Blame view

build/files/fix-ie.js 1.66 KB
5a739853   patrick.he   commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  //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.');
  		}
  	});
   }
  }