diff options
Diffstat (limited to 'httemplate/elements/cssexpr.js')
| -rw-r--r-- | httemplate/elements/cssexpr.js | 66 | 
1 files changed, 66 insertions, 0 deletions
| diff --git a/httemplate/elements/cssexpr.js b/httemplate/elements/cssexpr.js new file mode 100644 index 000000000..c434d8da0 --- /dev/null +++ b/httemplate/elements/cssexpr.js @@ -0,0 +1,66 @@ +function constExpression(x) { +	return x; +} + +function simplifyCSSExpression() { +	try { +		var ss,sl, rs, rl; +		ss = document.styleSheets; +		sl = ss.length +	 +		for (var i = 0; i < sl; i++) { +			simplifyCSSBlock(ss[i]); +		} +	} +	catch (exc) { +		//alert("Got an error while processing css. The page should still work but might be a bit slower"); +		throw exc; +	} +} + +function simplifyCSSBlock(ss) { +	var rs, rl; +	 +	for (var i = 0; i < ss.imports.length; i++) +		simplifyCSSBlock(ss.imports[i]); +	 +	if (ss.cssText.indexOf("expression(constExpression(") == -1) +		return; + +	rs = ss.rules; +	rl = rs.length; +	for (var j = 0; j < rl; j++) +		simplifyCSSRule(rs[j]); +	 +} + +function simplifyCSSRule(r) { +	var str = r.style.cssText; +	var str2 = str; +	var lastStr; +	do { +		lastStr = str2; +		str2 = simplifyCSSRuleHelper(lastStr); +	} while (str2 != lastStr) + +	if (str2 != str) +		r.style.cssText = str2; +} + +function simplifyCSSRuleHelper(str) { +	var i, i2; +	i = str.indexOf("expression(constExpression("); +	if (i == -1) return str; +	i2 = str.indexOf("))", i); +	var hd = str.substring(0, i); +	var tl = str.substring(i2 + 2); +	var exp = str.substring(i + 27, i2); +	var val = eval(exp) +	return hd + val + tl; +} + +if (/msie/i.test(navigator.userAgent) && window.attachEvent != null) { +	window.attachEvent("onload", function () { +		simplifyCSSExpression(); +	}); +} | 
