OLD | NEW |
1 Prism.hooks.add('after-highlight', function (env) { | 1 (function() { |
| 2 |
| 3 if (typeof self === 'undefined' || !self.Prism || !self.document) { |
| 4 » return; |
| 5 } |
| 6 |
| 7 Prism.hooks.add('complete', function (env) { |
| 8 » if (!env.code) { |
| 9 » » return; |
| 10 » } |
| 11 |
2 // works only for <code> wrapped inside <pre> (not inline) | 12 // works only for <code> wrapped inside <pre> (not inline) |
3 var pre = env.element.parentNode; | 13 var pre = env.element.parentNode; |
4 var clsReg = /\s*\bline-numbers\b\s*/; | 14 var clsReg = /\s*\bline-numbers\b\s*/; |
5 if ( | 15 if ( |
6 !pre || !/pre/i.test(pre.nodeName) || | 16 !pre || !/pre/i.test(pre.nodeName) || |
7 » » // Abort only if nor the <pre> nor the <code> have the class | 17 » » » // Abort only if nor the <pre> nor the <code> have the c
lass |
8 (!clsReg.test(pre.className) && !clsReg.test(env.element.classNa
me)) | 18 (!clsReg.test(pre.className) && !clsReg.test(env.element.classNa
me)) |
9 ) { | 19 ) { |
10 return; | 20 return; |
11 } | 21 } |
12 | 22 |
| 23 if (env.element.querySelector(".line-numbers-rows")) { |
| 24 // Abort if line numbers already exists |
| 25 return; |
| 26 } |
| 27 |
13 if (clsReg.test(env.element.className)) { | 28 if (clsReg.test(env.element.className)) { |
14 // Remove the class "line-numbers" from the <code> | 29 // Remove the class "line-numbers" from the <code> |
15 env.element.className = env.element.className.replace(clsReg, ''
); | 30 env.element.className = env.element.className.replace(clsReg, ''
); |
16 } | 31 } |
17 if (!clsReg.test(pre.className)) { | 32 if (!clsReg.test(pre.className)) { |
18 // Add the class "line-numbers" to the <pre> | 33 // Add the class "line-numbers" to the <pre> |
19 pre.className += ' line-numbers'; | 34 pre.className += ' line-numbers'; |
20 } | 35 } |
21 | 36 |
22 » var linesNum = (1 + env.code.split('\n').length); | 37 » var match = env.code.match(/\n(?!$)/g); |
| 38 » var linesNum = match ? match.length + 1 : 1; |
23 var lineNumbersWrapper; | 39 var lineNumbersWrapper; |
24 | 40 |
25 » var lines = new Array(linesNum); | 41 » var lines = new Array(linesNum + 1); |
26 lines = lines.join('<span></span>'); | 42 lines = lines.join('<span></span>'); |
27 | 43 |
28 lineNumbersWrapper = document.createElement('span'); | 44 lineNumbersWrapper = document.createElement('span'); |
29 lineNumbersWrapper.className = 'line-numbers-rows'; | 45 lineNumbersWrapper.className = 'line-numbers-rows'; |
30 lineNumbersWrapper.innerHTML = lines; | 46 lineNumbersWrapper.innerHTML = lines; |
31 | 47 |
32 if (pre.hasAttribute('data-start')) { | 48 if (pre.hasAttribute('data-start')) { |
33 pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttrib
ute('data-start'), 10) - 1); | 49 pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttrib
ute('data-start'), 10) - 1); |
34 } | 50 } |
35 | 51 |
36 env.element.appendChild(lineNumbersWrapper); | 52 env.element.appendChild(lineNumbersWrapper); |
37 | 53 |
38 }); | 54 }); |
| 55 |
| 56 }()); |
OLD | NEW |