Blame view

node_modules/clean-css/lib/optimizer/level-2/remove-duplicates.js 978 Bytes
aaac7fed   liuqimichale   add
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
  var Token = require('../../tokenizer/token');
  
  var serializeBody = require('../../writer/one-time').body;
  var serializeRules = require('../../writer/one-time').rules;
  
  function removeDuplicates(tokens) {
    var matched = {};
    var moreThanOnce = [];
    var id, token;
    var body, bodies;
  
    for (var i = 0, l = tokens.length; i < l; i++) {
      token = tokens[i];
      if (token[0] != Token.RULE)
        continue;
  
      id = serializeRules(token[1]);
  
      if (matched[id] && matched[id].length == 1)
        moreThanOnce.push(id);
      else
        matched[id] = matched[id] || [];
  
      matched[id].push(i);
    }
  
    for (i = 0, l = moreThanOnce.length; i < l; i++) {
      id = moreThanOnce[i];
      bodies = [];
  
      for (var j = matched[id].length - 1; j >= 0; j--) {
        token = tokens[matched[id][j]];
        body = serializeBody(token[2]);
  
        if (bodies.indexOf(body) > -1)
          token[2] = [];
        else
          bodies.push(body);
      }
    }
  }
  
  module.exports = removeDuplicates;