- Author:
- David Nickerson <nickerso@users.sourceforge.net>
- Date:
- 2009-07-16 02:00:03+12:00
- Desc:
- the starting point for the HH tutorial example
- Permanent Source URI:
- https://models.fieldml.org/workspace/a1/rawfile/f6a8f90307388eb4b040ee3566b84d88b59247f7/dojo-presentation/js/dojo/dojox/data/css.js
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;
};