Code Duplication    Length = 101-101 lines in 2 locations

public/js/tinymce/themes/modern/theme.js 1 location

@@ 1582-1682 (lines=101) @@
1579
    var whiteSpace = /^\s*|\s*$/g;
1580
    var Collection;
1581
    var Selector = global$a.extend({
1582
      init: function (selector) {
1583
        var match = this.match;
1584
        function compileNameFilter(name) {
1585
          if (name) {
1586
            name = name.toLowerCase();
1587
            return function (item) {
1588
              return name === '*' || item.type === name;
1589
            };
1590
          }
1591
        }
1592
        function compileIdFilter(id) {
1593
          if (id) {
1594
            return function (item) {
1595
              return item._name === id;
1596
            };
1597
          }
1598
        }
1599
        function compileClassesFilter(classes) {
1600
          if (classes) {
1601
            classes = classes.split('.');
1602
            return function (item) {
1603
              var i = classes.length;
1604
              while (i--) {
1605
                if (!item.classes.contains(classes[i])) {
1606
                  return false;
1607
                }
1608
              }
1609
              return true;
1610
            };
1611
          }
1612
        }
1613
        function compileAttrFilter(name, cmp, check) {
1614
          if (name) {
1615
            return function (item) {
1616
              var value = item[name] ? item[name]() : '';
1617
              return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;
1618
            };
1619
          }
1620
        }
1621
        function compilePsuedoFilter(name) {
1622
          var notSelectors;
1623
          if (name) {
1624
            name = /(?:not\((.+)\))|(.+)/i.exec(name);
1625
            if (!name[1]) {
1626
              name = name[2];
1627
              return function (item, index, length) {
1628
                return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;
1629
              };
1630
            }
1631
            notSelectors = parseChunks(name[1], []);
1632
            return function (item) {
1633
              return !match(item, notSelectors);
1634
            };
1635
          }
1636
        }
1637
        function compile(selector, filters, direct) {
1638
          var parts;
1639
          function add(filter) {
1640
            if (filter) {
1641
              filters.push(filter);
1642
            }
1643
          }
1644
          parts = expression.exec(selector.replace(whiteSpace, ''));
1645
          add(compileNameFilter(parts[1]));
1646
          add(compileIdFilter(parts[2]));
1647
          add(compileClassesFilter(parts[3]));
1648
          add(compileAttrFilter(parts[4], parts[5], parts[6]));
1649
          add(compilePsuedoFilter(parts[7]));
1650
          filters.pseudo = !!parts[7];
1651
          filters.direct = direct;
1652
          return filters;
1653
        }
1654
        function parseChunks(selector, selectors) {
1655
          var parts = [];
1656
          var extra, matches, i;
1657
          do {
1658
            chunker.exec('');
1659
            matches = chunker.exec(selector);
1660
            if (matches) {
1661
              selector = matches[3];
1662
              parts.push(matches[1]);
1663
              if (matches[2]) {
1664
                extra = matches[3];
1665
                break;
1666
              }
1667
            }
1668
          } while (matches);
1669
          if (extra) {
1670
            parseChunks(extra, selectors);
1671
          }
1672
          selector = [];
1673
          for (i = 0; i < parts.length; i++) {
1674
            if (parts[i] !== '>') {
1675
              selector.push(compile(parts[i], [], parts[i - 1] === '>'));
1676
            }
1677
          }
1678
          selectors.push(selector);
1679
          return selectors;
1680
        }
1681
        this._selectors = parseChunks(selector, []);
1682
      },
1683
      match: function (control, selectors) {
1684
        var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
1685
        selectors = selectors || this._selectors;

public/js/tinymce/themes/inlite/theme.js 1 location

@@ 1042-1142 (lines=101) @@
1039
    var whiteSpace = /^\s*|\s*$/g;
1040
    var Collection;
1041
    var Selector = global$8.extend({
1042
      init: function (selector) {
1043
        var match = this.match;
1044
        function compileNameFilter(name) {
1045
          if (name) {
1046
            name = name.toLowerCase();
1047
            return function (item) {
1048
              return name === '*' || item.type === name;
1049
            };
1050
          }
1051
        }
1052
        function compileIdFilter(id) {
1053
          if (id) {
1054
            return function (item) {
1055
              return item._name === id;
1056
            };
1057
          }
1058
        }
1059
        function compileClassesFilter(classes) {
1060
          if (classes) {
1061
            classes = classes.split('.');
1062
            return function (item) {
1063
              var i = classes.length;
1064
              while (i--) {
1065
                if (!item.classes.contains(classes[i])) {
1066
                  return false;
1067
                }
1068
              }
1069
              return true;
1070
            };
1071
          }
1072
        }
1073
        function compileAttrFilter(name, cmp, check) {
1074
          if (name) {
1075
            return function (item) {
1076
              var value = item[name] ? item[name]() : '';
1077
              return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;
1078
            };
1079
          }
1080
        }
1081
        function compilePsuedoFilter(name) {
1082
          var notSelectors;
1083
          if (name) {
1084
            name = /(?:not\((.+)\))|(.+)/i.exec(name);
1085
            if (!name[1]) {
1086
              name = name[2];
1087
              return function (item, index, length) {
1088
                return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;
1089
              };
1090
            }
1091
            notSelectors = parseChunks(name[1], []);
1092
            return function (item) {
1093
              return !match(item, notSelectors);
1094
            };
1095
          }
1096
        }
1097
        function compile(selector, filters, direct) {
1098
          var parts;
1099
          function add(filter) {
1100
            if (filter) {
1101
              filters.push(filter);
1102
            }
1103
          }
1104
          parts = expression.exec(selector.replace(whiteSpace, ''));
1105
          add(compileNameFilter(parts[1]));
1106
          add(compileIdFilter(parts[2]));
1107
          add(compileClassesFilter(parts[3]));
1108
          add(compileAttrFilter(parts[4], parts[5], parts[6]));
1109
          add(compilePsuedoFilter(parts[7]));
1110
          filters.pseudo = !!parts[7];
1111
          filters.direct = direct;
1112
          return filters;
1113
        }
1114
        function parseChunks(selector, selectors) {
1115
          var parts = [];
1116
          var extra, matches, i;
1117
          do {
1118
            chunker.exec('');
1119
            matches = chunker.exec(selector);
1120
            if (matches) {
1121
              selector = matches[3];
1122
              parts.push(matches[1]);
1123
              if (matches[2]) {
1124
                extra = matches[3];
1125
                break;
1126
              }
1127
            }
1128
          } while (matches);
1129
          if (extra) {
1130
            parseChunks(extra, selectors);
1131
          }
1132
          selector = [];
1133
          for (i = 0; i < parts.length; i++) {
1134
            if (parts[i] !== '>') {
1135
              selector.push(compile(parts[i], [], parts[i - 1] === '>'));
1136
            }
1137
          }
1138
          selectors.push(selector);
1139
          return selectors;
1140
        }
1141
        this._selectors = parseChunks(selector, []);
1142
      },
1143
      match: function (control, selectors) {
1144
        var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
1145
        selectors = selectors || this._selectors;