summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/data/css.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/data/css.js')
-rw-r--r--js/dojo-1.7.2/dojox/data/css.js107
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;
+
+});