]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/javascript/yui3/build/stylesheet/stylesheet.js
Release 6.2.2
[Github/sugarcrm.git] / include / javascript / yui3 / build / stylesheet / stylesheet.js
1 /*
2  Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3  Code licensed under the BSD License:
4  http://developer.yahoo.com/yui/license.html
5  version: 3.3.0
6  build: 3167
7  */
8 YUI.add('stylesheet',function(Y){var d=Y.config.doc,p=d.createElement('p'),workerStyle=p.style,isString=Y.Lang.isString,selectors={},sheets={},floatAttr=('cssFloat'in workerStyle)?'cssFloat':'styleFloat',_toCssText,_unsetOpacity,_unsetProperty,OPACITY='opacity',FLOAT='float',EMPTY='';_unsetOpacity=(OPACITY in workerStyle)?function(style){style.opacity=EMPTY;}:function(style){style.filter=EMPTY;};workerStyle.border="1px solid red";workerStyle.border=EMPTY;_unsetProperty=workerStyle.borderLeft?function(style,prop){var p;if(prop!==floatAttr&&prop.toLowerCase().indexOf(FLOAT)!=-1){prop=floatAttr;}
9 if(isString(style[prop])){switch(prop){case OPACITY:case'filter':_unsetOpacity(style);break;case'font':style.font=style.fontStyle=style.fontVariant=style.fontWeight=style.fontSize=style.lineHeight=style.fontFamily=EMPTY;break;default:for(p in style){if(p.indexOf(prop)===0){style[p]=EMPTY;}}}}}:function(style,prop){if(prop!==floatAttr&&prop.toLowerCase().indexOf(FLOAT)!=-1){prop=floatAttr;}
10 if(isString(style[prop])){if(prop===OPACITY){_unsetOpacity(style);}else{style[prop]=EMPTY;}}};function StyleSheet(seed,name){var head,node,sheet,cssRules={},_rules,_insertRule,_deleteRule,i,r,sel;if(!(Y.instanceOf(this,StyleSheet))){return new StyleSheet(seed,name);}
11 if(seed){if(Y.Node&&seed instanceof Y.Node){node=seed._node;}else if(seed.nodeName){node=seed;}else if(isString(seed)){if(seed&&sheets[seed]){return sheets[seed];}
12 node=d.getElementById(seed.replace(/^#/,EMPTY));}
13 if(node&&sheets[Y.stamp(node)]){return sheets[Y.stamp(node)];}}
14 if(!node||!/^(?:style|link)$/i.test(node.nodeName)){node=d.createElement('style');node.type='text/css';}
15 if(isString(seed)){if(seed.indexOf('{')!=-1){if(node.styleSheet){node.styleSheet.cssText=seed;}else{node.appendChild(d.createTextNode(seed));}}else if(!name){name=seed;}}
16 if(!node.parentNode||node.parentNode.nodeName.toLowerCase()!=='head'){head=(node.ownerDocument||d).getElementsByTagName('head')[0];head.appendChild(node);}
17 sheet=node.sheet||node.styleSheet;_rules=sheet&&('cssRules'in sheet)?'cssRules':'rules';_deleteRule=('deleteRule'in sheet)?function(i){sheet.deleteRule(i);}:function(i){sheet.removeRule(i);};_insertRule=('insertRule'in sheet)?function(sel,css,i){sheet.insertRule(sel+' {'+css+'}',i);}:function(sel,css,i){sheet.addRule(sel,css,i);};for(i=sheet[_rules].length-1;i>=0;--i){r=sheet[_rules][i];sel=r.selectorText;if(cssRules[sel]){cssRules[sel].style.cssText+=';'+r.style.cssText;_deleteRule(i);}else{cssRules[sel]=r;}}
18 StyleSheet.register(Y.stamp(node),this);if(name){StyleSheet.register(name,this);}
19 Y.mix(this,{getId:function(){return Y.stamp(node);},enable:function(){sheet.disabled=false;return this;},disable:function(){sheet.disabled=true;return this;},isEnabled:function(){return!sheet.disabled;},set:function(sel,css){var rule=cssRules[sel],multi=sel.split(/\s*,\s*/),i,idx;if(multi.length>1){for(i=multi.length-1;i>=0;--i){this.set(multi[i],css);}
20 return this;}
21 if(!StyleSheet.isValidSelector(sel)){return this;}
22 if(rule){rule.style.cssText=StyleSheet.toCssText(css,rule.style.cssText);}else{idx=sheet[_rules].length;css=StyleSheet.toCssText(css);if(css){_insertRule(sel,css,idx);cssRules[sel]=sheet[_rules][idx];}}
23 return this;},unset:function(sel,css){var rule=cssRules[sel],multi=sel.split(/\s*,\s*/),remove=!css,rules,i;if(multi.length>1){for(i=multi.length-1;i>=0;--i){this.unset(multi[i],css);}
24 return this;}
25 if(rule){if(!remove){css=Y.Array(css);workerStyle.cssText=rule.style.cssText;for(i=css.length-1;i>=0;--i){_unsetProperty(workerStyle,css[i]);}
26 if(workerStyle.cssText){rule.style.cssText=workerStyle.cssText;}else{remove=true;}}
27 if(remove){rules=sheet[_rules];for(i=rules.length-1;i>=0;--i){if(rules[i]===rule){delete cssRules[sel];_deleteRule(i);break;}}}}
28 return this;},getCssText:function(sel){var rule,css,selector;if(isString(sel)){rule=cssRules[sel.split(/\s*,\s*/)[0]];return rule?rule.style.cssText:null;}else{css=[];for(selector in cssRules){if(cssRules.hasOwnProperty(selector)){rule=cssRules[selector];css.push(rule.selectorText+" {"+rule.style.cssText+"}");}}
29 return css.join("\n");}}});}
30 _toCssText=function(css,base){var f=css.styleFloat||css.cssFloat||css[FLOAT],trim=Y.Lang.trim,prop;try{workerStyle.cssText=base||EMPTY;}catch(e){p=d.createElement('p');workerStyle=p.style;workerStyle.cssText=base||EMPTY;}
31 if(f&&!css[floatAttr]){css=Y.merge(css);delete css.styleFloat;delete css.cssFloat;delete css[FLOAT];css[floatAttr]=f;}
32 for(prop in css){if(css.hasOwnProperty(prop)){try{workerStyle[prop]=trim(css[prop]);}
33 catch(ex){}}}
34 return workerStyle.cssText;};Y.mix(StyleSheet,{toCssText:((OPACITY in workerStyle)?_toCssText:function(css,cssText){if(OPACITY in css){css=Y.merge(css,{filter:'alpha(opacity='+(css.opacity*100)+')'});delete css.opacity;}
35 return _toCssText(css,cssText);}),register:function(name,sheet){return!!(name&&sheet instanceof StyleSheet&&!sheets[name]&&(sheets[name]=sheet));},isValidSelector:function(sel){var valid=false;if(sel&&isString(sel)){if(!selectors.hasOwnProperty(sel)){selectors[sel]=!/\S/.test(sel.replace(/\s+|\s*[+~>]\s*/g,' ').replace(/([^ ])\[.*?\]/g,'$1').replace(/([^ ])::?[a-z][a-z\-]+[a-z](?:\(.*?\))?/ig,'$1').replace(/(?:^| )[a-z0-6]+/ig,' ').replace(/\\./g,EMPTY).replace(/[.#]\w[\w\-]*/g,EMPTY));}
36 valid=selectors[sel];}
37 return valid;}},true);Y.StyleSheet=StyleSheet;},'3.3.0');