You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.2 KiB
106 lines
3.2 KiB
define(["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; |
|
|
|
});
|
|
|