fix-ie.js 1.66 KB
//split IE to make sure 
function breakCSS(less_parser, css_input, callback) {
 if(!less_parser) {
	callback.call(null, false);
	return;
 }
 
 less_parser.parse(css_input, function(e, tree) {
	if(e) {
		callback.call(null, false);
		console.log($e);
		return;
	}

	var rules = tree.rules;
	var totalSelectors = 0;
	var lastIndex = -1;//the index to split CSS files from
	
	var ie_limit = 4090;//4095;

	for(var i = 0, l = rules.length; i < l ; i++) {
		var rule = rules[i];
		if(rule.type == "Ruleset") {
			totalSelectors += rule.selectors.length;
			if(totalSelectors > ie_limit) break;
			lastIndex = rule.selectors[0].elements[0].index;
		}
		else if(rule.type == "Media") {
			var $rules = rule.rules[0].rules;
			for(var k = 0 ; k < $rules.length; k++) {
				if($rules[k].type == "Ruleset") {
					totalSelectors += $rules[k].selectors.length;
				}
			}
		}
		if(totalSelectors > ie_limit) break;
	}
	
	
	var css_part2 = false;
	if(totalSelectors > ie_limit) {
		css_part2 = css_input.substring(lastIndex , css_input.length);
	}
	
	callback.call(null, css_part2);
 })
}



//this is used for grunt
if(typeof module !== 'undefined') {
 var fs = require('fs');
 var vm = require('vm');
 var less = require('less');
 less_parser = new(less.Parser)({
    processImports: false
 });

 module.exports = function fixIE(grunt) {
	var css_file = fs.readFileSync(__dirname+'/../../assets/css/ace.css' , 'utf-8');
	breakCSS(less_parser, css_file, function(css_part2) {
		if(typeof css_part2 == 'string' && css_part2.length > 10) {
			fs.writeFileSync(__dirname+'/../../assets/css/ace-part2.css' , css_part2 , 'utf-8');
			grunt.log.writeln('ace-part2.css for IE9 and below created.');
		}
	});
 }
}