diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/data/css.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/data/css.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/data/css.js b/js/dojo-1.7.2/dojox/data/css.js new file mode 100644 index 0000000..790ad96 --- /dev/null +++ b/js/dojo-1.7.2/dojox/data/css.js @@ -0,0 +1,107 @@ +//>>built +define("dojox/data/css", ["dojo/_base/lang", "dojo/_base/array"], + function(lang, array) { + +var css = lang.getObject("dojox.data.css",true) + +css.rules = {}; + +css.rules.forEach = function(fn,ctx,context){ + if(context){ + var _processSS = function(styleSheet){ + //iterate across rules in the stylesheet + array.forEach(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){ + if(!rule.type || rule.type !== 3){// apply fn to current rule with approp ctx. rule is arg (all browsers) + var href = ""; + if(styleSheet && styleSheet.href){ + href = styleSheet.href; + } + fn.call(ctx?ctx:this,rule, styleSheet, href); + } + }); + //process any child stylesheets + }; + array.forEach(context,_processSS); + } +}; + +css.findStyleSheets = function(sheets){ + // Takes an array of stylesheet paths and finds the currently loaded StyleSheet objects matching + // those names + var sheetObjects = []; + var _processSS = function(styleSheet){ + var s = css.findStyleSheet(styleSheet); + if(s){ + array.forEach(s, function(sheet){ + if(array.indexOf(sheetObjects, sheet) === -1){ + sheetObjects.push(sheet); + } + }); + } + }; + array.forEach(sheets, _processSS); + return sheetObjects; +}; + +css.findStyleSheet = function(sheet){ + // Takes a stylesheet path and finds the currently loaded StyleSheet objects matching + // those names (and it's parent(s), if it is imported from another) + var sheetObjects = []; + if(sheet.charAt(0) === '.'){ + sheet = sheet.substring(1); + } + var _processSS = function(styleSheet){ + if(styleSheet.href && styleSheet.href.match(sheet)){ + sheetObjects.push(styleSheet); + return true; + } + if(styleSheet.imports){ + return array.some(styleSheet.imports, function(importedSS){ //IE stylesheet has imports[] containing @import'ed rules + //console.debug("Processing IE @import rule",importedSS); + return _processSS(importedSS); + }); + } + //iterate across rules in the stylesheet + return array.some(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){ + if(rule.type && rule.type === 3 && _processSS(rule.styleSheet)){// CSSImportRule (firefox) + //sheetObjects.push(styleSheet); + return true; + } + return false; + }); + }; + array.some(document.styleSheets, _processSS); + return sheetObjects; +}; + +css.determineContext = function(initialStylesheets){ + // Takes an array of stylesheet paths and returns an array of all stylesheets that fall in the + // given context. If no paths are given, all stylesheets are returned. + var ret = []; + if(initialStylesheets && initialStylesheets.length > 0){ + initialStylesheets = css.findStyleSheets(initialStylesheets); + }else{ + initialStylesheets = document.styleSheets; + } + var _processSS = function(styleSheet){ + ret.push(styleSheet); + if(styleSheet.imports){ + array.forEach(styleSheet.imports, function(importedSS){ //IE stylesheet has imports[] containing @import'ed rules + //console.debug("Processing IE @import rule",importedSS); + _processSS(importedSS); + }); + } + //iterate across rules in the stylesheet + array.forEach(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){ + if(rule.type && rule.type === 3){// CSSImportRule (firefox) + _processSS(rule.styleSheet); + } + }); + }; + array.forEach(initialStylesheets,_processSS); + return ret; +}; + +return css; + +}); |
