96 lines
3.2 KiB
JavaScript
96 lines
3.2 KiB
JavaScript
|
dojo.provide('dojox.data.css');
|
||
|
dojo.provide('dojox.data.css.rules');
|
||
|
|
||
|
dojox.data.css.rules.forEach = function(fn,ctx,context){
|
||
|
if(context){
|
||
|
var _processSS = function(styleSheet){
|
||
|
//iterate across rules in the stylesheet
|
||
|
dojo.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
|
||
|
};
|
||
|
dojo.forEach(context,_processSS);
|
||
|
}
|
||
|
};
|
||
|
dojox.data.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 = dojox.data.css.findStyleSheet(styleSheet);
|
||
|
if(s){
|
||
|
dojo.forEach(s, function(sheet){
|
||
|
if(dojo.indexOf(sheetObjects, sheet) === -1){
|
||
|
sheetObjects.push(sheet);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
dojo.forEach(sheets, _processSS);
|
||
|
return sheetObjects;
|
||
|
};
|
||
|
dojox.data.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 dojo.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 dojo.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;
|
||
|
});
|
||
|
};
|
||
|
dojo.some(document.styleSheets, _processSS);
|
||
|
return sheetObjects;
|
||
|
};
|
||
|
dojox.data.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 = dojox.data.css.findStyleSheets(initialStylesheets);
|
||
|
}else{
|
||
|
initialStylesheets = document.styleSheets;
|
||
|
}
|
||
|
var _processSS = function(styleSheet){
|
||
|
ret.push(styleSheet);
|
||
|
if(styleSheet.imports){
|
||
|
dojo.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
|
||
|
dojo.forEach(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){
|
||
|
if(rule.type && rule.type === 3){// CSSImportRule (firefox)
|
||
|
_processSS(rule.styleSheet);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
dojo.forEach(initialStylesheets,_processSS);
|
||
|
return ret;
|
||
|
};
|