source: Dev/branches/rest-dojo-ui/client/dojox/data/css.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

  • 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.