webui-aria2/js/libs/dojox/data/css.js.uncompressed.js
2012-05-01 19:52:07 +08:00

108 lines
3.3 KiB
JavaScript

//>>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;
});