|
4 | 4 | return; |
5 | 5 | } |
6 | 6 |
|
| 7 | +function mapClassName(name) { |
| 8 | +var customClass = Prism.plugins.customClass; |
| 9 | +if (customClass) { |
| 10 | +return customClass.apply(name, 'none'); |
| 11 | +} else { |
| 12 | +return name; |
| 13 | +} |
| 14 | +} |
| 15 | + |
7 | 16 | var PARTNER = { |
8 | 17 | '(': ')', |
9 | 18 | '[': ']', |
|
51 | 60 | } |
52 | 61 |
|
53 | 62 | [this, getPartnerBrace(this)].forEach(function (e) { |
54 | | -e.classList.add('brace-hover'); |
| 63 | +e.classList.add(mapClassName('brace-hover')); |
55 | 64 | }); |
56 | 65 | } |
57 | 66 | /** |
58 | 67 | * @this {HTMLElement} |
59 | 68 | */ |
60 | 69 | function leaveBrace() { |
61 | 70 | [this, getPartnerBrace(this)].forEach(function (e) { |
62 | | -e.classList.remove('brace-hover'); |
| 71 | +e.classList.remove(mapClassName('brace-hover')); |
63 | 72 | }); |
64 | 73 | } |
65 | 74 | /** |
|
71 | 80 | } |
72 | 81 |
|
73 | 82 | [this, getPartnerBrace(this)].forEach(function (e) { |
74 | | -e.classList.add('brace-selected'); |
| 83 | +e.classList.add(mapClassName('brace-selected')); |
75 | 84 | }); |
76 | 85 | } |
77 | 86 |
|
|
102 | 111 | pre.addEventListener('mousedown', function removeBraceSelected() { |
103 | 112 | // the code element might have been replaced |
104 | 113 | var code = pre.querySelector('code'); |
105 | | -Array.prototype.slice.call(code.querySelectorAll('.brace-selected')).forEach(function (e) { |
106 | | -e.classList.remove('brace-selected'); |
| 114 | +var className = mapClassName('brace-selected'); |
| 115 | +Array.prototype.slice.call(code.querySelectorAll('.' + className)).forEach(function (e) { |
| 116 | +e.classList.remove(className); |
107 | 117 | }); |
108 | 118 | }); |
109 | 119 | Object.defineProperty(pre, '__listenerAdded', { value: true }); |
110 | 120 | } |
111 | 121 |
|
112 | 122 | /** @type {HTMLSpanElement[]} */ |
113 | | -var punctuation = Array.prototype.slice.call(code.querySelectorAll('span.token.punctuation')); |
| 123 | +var punctuation = Array.prototype.slice.call( |
| 124 | +code.querySelectorAll('span.' + mapClassName('token') + '.' + mapClassName('punctuation')) |
| 125 | +); |
114 | 126 |
|
115 | 127 | /** @type {{ index: number, open: boolean, element: HTMLElement }[]} */ |
116 | 128 | var allBraces = []; |
117 | 129 |
|
118 | 130 | toMatch.forEach(function (open) { |
119 | 131 | var close = PARTNER[open]; |
120 | | -var name = NAMES[open]; |
| 132 | +var name = mapClassName(NAMES[open]); |
121 | 133 |
|
122 | 134 | /** @type {[number, number][]} */ |
123 | 135 | var pairs = []; |
|
132 | 144 | if (text === open) { |
133 | 145 | allBraces.push({ index: i, open: true, element: element }); |
134 | 146 | element.classList.add(name); |
135 | | -element.classList.add('brace-open'); |
| 147 | +element.classList.add(mapClassName('brace-open')); |
136 | 148 | openStack.push(i); |
137 | 149 | } else if (text === close) { |
138 | 150 | allBraces.push({ index: i, open: false, element: element }); |
139 | 151 | element.classList.add(name); |
140 | | -element.classList.add('brace-close'); |
| 152 | +element.classList.add(mapClassName('brace-close')); |
141 | 153 | if (openStack.length) { |
142 | 154 | pairs.push([i, openStack.pop()]); |
143 | 155 | } |
|
166 | 178 | allBraces.sort(function (a, b) { return a.index - b.index; }); |
167 | 179 | allBraces.forEach(function (brace) { |
168 | 180 | if (brace.open) { |
169 | | -brace.element.classList.add('brace-level-' + (level % LEVEL_WARP + 1)); |
| 181 | +brace.element.classList.add(mapClassName('brace-level-' + (level % LEVEL_WARP + 1))); |
170 | 182 | level++; |
171 | 183 | } else { |
172 | 184 | level = Math.max(0, level - 1); |
173 | | -brace.element.classList.add('brace-level-' + (level % LEVEL_WARP + 1)); |
| 185 | +brace.element.classList.add(mapClassName('brace-level-' + (level % LEVEL_WARP + 1))); |
174 | 186 | } |
175 | 187 | }); |
176 | 188 | }); |
|
0 commit comments