| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-util-CSS'>/**</span> * Utility class for manipulating CSS rules * @singleton */Ext.define('Ext.util.CSS', (function() {    var rules = null,        doc = document,        camelRe = /(-[a-z])/gi,        camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };    return {        singleton: true,        constructor: function() {            this.rules = {};            this.initialized = false;        },<span id='Ext-util-CSS-method-createStyleSheet'>        /**</span>         * Creates a stylesheet from a text blob of rules.         * These rules will be wrapped in a STYLE tag and appended to the HEAD of the document.         * @param {String} cssText The text containing the css rules         * @param {String} id An id to add to the stylesheet for later removal         * @return {CSSStyleSheet}         */        createStyleSheet : function(cssText, id) {            var ss,                head = doc.getElementsByTagName("head")[0],                styleEl = doc.createElement("style");            styleEl.setAttribute("type", "text/css");            if (id) {               styleEl.setAttribute("id", id);            }            if (Ext.isIE) {               head.appendChild(styleEl);               ss = styleEl.styleSheet;               ss.cssText = cssText;            } else {                try{                    styleEl.appendChild(doc.createTextNode(cssText));                } catch(e) {                   styleEl.cssText = cssText;                }                head.appendChild(styleEl);                ss = styleEl.styleSheet ? styleEl.styleSheet : (styleEl.sheet || doc.styleSheets[doc.styleSheets.length-1]);            }            this.cacheStyleSheet(ss);            return ss;        },<span id='Ext-util-CSS-method-removeStyleSheet'>        /**</span>         * Removes a style or link tag by id         * @param {String} id The id of the tag         */        removeStyleSheet : function(id) {            var existing = document.getElementById(id);            if (existing) {                existing.parentNode.removeChild(existing);            }        },<span id='Ext-util-CSS-method-swapStyleSheet'>        /**</span>         * Dynamically swaps an existing stylesheet reference for a new one         * @param {String} id The id of an existing link tag to remove         * @param {String} url The href of the new stylesheet to include         */        swapStyleSheet : function(id, url) {            var doc = document,                ss;            this.removeStyleSheet(id);            ss = doc.createElement("link");            ss.setAttribute("rel", "stylesheet");            ss.setAttribute("type", "text/css");            ss.setAttribute("id", id);            ss.setAttribute("href", url);            doc.getElementsByTagName("head")[0].appendChild(ss);        },<span id='Ext-util-CSS-method-refreshCache'>        /**</span>         * Refresh the rule cache if you have dynamically added stylesheets         * @return {Object} An object (hash) of rules indexed by selector         */        refreshCache : function() {            return this.getRules(true);        },        // private        cacheStyleSheet : function(ss) {            if(!rules){                rules = {};            }            try {// try catch for cross domain access issue                var ssRules = ss.cssRules || ss.rules,                    selectorText,                    i = ssRules.length - 1,                    j,                    selectors;                for (; i >= 0; --i) {                    selectorText = ssRules[i].selectorText;                    if (selectorText) {                        // Split in case there are multiple, comma-delimited selectors                        selectorText = selectorText.split(',');                        selectors = selectorText.length;                        for (j = 0; j < selectors; j++) {                            rules[Ext.String.trim(selectorText[j]).toLowerCase()] = ssRules[i];                        }                    }                }            } catch(e) {}        },<span id='Ext-util-CSS-method-getRules'>        /**</span>         * Gets all css rules for the document         * @param {Boolean} refreshCache true to refresh the internal cache         * @return {Object} An object (hash) of rules indexed by selector         */        getRules : function(refreshCache) {            if (rules === null || refreshCache) {                rules = {};                var ds = doc.styleSheets,                    i = 0,                    len = ds.length;                for (; i < len; i++) {                    try {                        if (!ds[i].disabled) {                            this.cacheStyleSheet(ds[i]);                        }                    } catch(e) {}                }            }            return rules;        },<span id='Ext-util-CSS-method-getRule'>        /**</span>         * Gets an an individual CSS rule by selector(s)         * @param {String/String[]} selector The CSS selector or an array of selectors to try. The first selector that is found is returned.         * @param {Boolean} refreshCache true to refresh the internal cache if you have recently updated any rules or added styles dynamically         * @return {CSSStyleRule} The CSS rule or null if one is not found         */        getRule: function(selector, refreshCache) {            var rs = this.getRules(refreshCache),                i;            if (!Ext.isArray(selector)) {                return rs[selector.toLowerCase()];            }            for (i = 0; i < selector.length; i++) {                if (rs[selector[i]]) {                    return rs[selector[i].toLowerCase()];                }            }            return null;        },<span id='Ext-util-CSS-method-updateRule'>        /**</span>         * Updates a rule property         * @param {String/String[]} selector If it's an array it tries each selector until it finds one. Stops immediately once one is found.         * @param {String} property The css property         * @param {String} value The new value for the property         * @return {Boolean} true If a rule was found and updated         */        updateRule : function(selector, property, value){            var rule, i;            if (!Ext.isArray(selector)) {                rule = this.getRule(selector);                if (rule) {                    rule.style[property.replace(camelRe, camelFn)] = value;                    return true;                }            } else {                for (i = 0; i < selector.length; i++) {                    if (this.updateRule(selector[i], property, value)) {                        return true;                    }                }            }            return false;        }    };}()));</pre></body></html>
 |