source: Dev/trunk/src/client/dojox/data/css.js @ 532

Last change on this file since 532 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 3.2 KB
Line 
1define(["dojo/_base/lang", "dojo/_base/array"],
2  function(lang, array) {
3
4var css = lang.getObject("dojox.data.css",true)
5
6css.rules = {};
7
8css.rules.forEach = function(fn,ctx,context){
9        if(context){
10                var _processSS = function(styleSheet){
11                        //iterate across rules in the stylesheet
12                        array.forEach(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){
13                                if(!rule.type || rule.type !== 3){// apply fn to current rule with approp ctx. rule is arg (all browsers)
14                                        var href = "";
15                                        if(styleSheet && styleSheet.href){
16                                                href = styleSheet.href;
17                                        }
18                                        fn.call(ctx?ctx:this,rule, styleSheet, href);
19                                }
20                        });
21                        //process any child stylesheets
22                };
23                array.forEach(context,_processSS);
24        }
25};
26
27css.findStyleSheets = function(sheets){
28        // Takes an array of stylesheet paths and finds the currently loaded StyleSheet objects matching
29        // those names
30        var sheetObjects = [];
31        var _processSS = function(styleSheet){
32                var s = css.findStyleSheet(styleSheet);
33                if(s){
34                        array.forEach(s, function(sheet){
35                                if(array.indexOf(sheetObjects, sheet) === -1){
36                                        sheetObjects.push(sheet);
37                                }
38                        });
39                }
40        };
41        array.forEach(sheets, _processSS);
42        return sheetObjects;
43};
44
45css.findStyleSheet = function(sheet){
46        // Takes a stylesheet path and finds the currently loaded StyleSheet objects matching
47        // those names (and it's parent(s), if it is imported from another)
48        var sheetObjects = [];
49        if(sheet.charAt(0) === '.'){
50                sheet = sheet.substring(1);
51        }
52        var _processSS = function(styleSheet){
53                if(styleSheet.href && styleSheet.href.match(sheet)){
54                        sheetObjects.push(styleSheet);
55                        return true;
56                }
57                if(styleSheet.imports){
58                        return array.some(styleSheet.imports, function(importedSS){ //IE stylesheet has imports[] containing @import'ed rules
59                                //console.debug("Processing IE @import rule",importedSS);
60                                return _processSS(importedSS);
61                        });
62                }
63                //iterate across rules in the stylesheet
64                return array.some(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){
65                        if(rule.type && rule.type === 3 && _processSS(rule.styleSheet)){// CSSImportRule (firefox)
66                                //sheetObjects.push(styleSheet);
67                                return true;
68                        }
69                        return false;
70                });
71        };
72        array.some(document.styleSheets, _processSS);
73        return sheetObjects;
74};
75
76css.determineContext = function(initialStylesheets){
77        // Takes an array of stylesheet paths and returns an array of all stylesheets that fall in the
78        // given context.  If no paths are given, all stylesheets are returned.
79        var ret = [];
80        if(initialStylesheets && initialStylesheets.length > 0){
81                initialStylesheets = css.findStyleSheets(initialStylesheets);
82        }else{
83                initialStylesheets = document.styleSheets;
84        }
85        var _processSS = function(styleSheet){
86                ret.push(styleSheet);
87                if(styleSheet.imports){
88                        array.forEach(styleSheet.imports, function(importedSS){ //IE stylesheet has imports[] containing @import'ed rules
89                                //console.debug("Processing IE @import rule",importedSS);
90                                _processSS(importedSS);
91                        });
92                }
93                //iterate across rules in the stylesheet
94                array.forEach(styleSheet[styleSheet.cssRules?"cssRules":"rules"], function(rule){
95                        if(rule.type && rule.type === 3){// CSSImportRule (firefox)
96                                _processSS(rule.styleSheet);
97                        }
98                });
99        };
100        array.forEach(initialStylesheets,_processSS);
101        return ret;
102};
103
104return css;
105
106});
Note: See TracBrowser for help on using the repository browser.