| 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 |