Index: lib/src/prism/plugins/line-numbers/prism-line-numbers.js |
diff --git a/lib/src/prism/plugins/line-numbers/prism-line-numbers.js b/lib/src/prism/plugins/line-numbers/prism-line-numbers.js |
index 9443deb7dc53690eaacaa17f96a4e956a5ff2193..8323a43b13dd56c5fccf2ff473ff95e5fbdb8a0b 100644 |
--- a/lib/src/prism/plugins/line-numbers/prism-line-numbers.js |
+++ b/lib/src/prism/plugins/line-numbers/prism-line-numbers.js |
@@ -1,15 +1,30 @@ |
-Prism.hooks.add('after-highlight', function (env) { |
+(function() { |
+ |
+if (typeof self === 'undefined' || !self.Prism || !self.document) { |
+ return; |
+} |
+ |
+Prism.hooks.add('complete', function (env) { |
+ if (!env.code) { |
+ return; |
+ } |
+ |
// works only for <code> wrapped inside <pre> (not inline) |
var pre = env.element.parentNode; |
var clsReg = /\s*\bline-numbers\b\s*/; |
if ( |
!pre || !/pre/i.test(pre.nodeName) || |
- // Abort only if nor the <pre> nor the <code> have the class |
+ // Abort only if nor the <pre> nor the <code> have the class |
(!clsReg.test(pre.className) && !clsReg.test(env.element.className)) |
) { |
return; |
} |
+ if (env.element.querySelector(".line-numbers-rows")) { |
+ // Abort if line numbers already exists |
+ return; |
+ } |
+ |
if (clsReg.test(env.element.className)) { |
// Remove the class "line-numbers" from the <code> |
env.element.className = env.element.className.replace(clsReg, ''); |
@@ -19,10 +34,11 @@ Prism.hooks.add('after-highlight', function (env) { |
pre.className += ' line-numbers'; |
} |
- var linesNum = (1 + env.code.split('\n').length); |
+ var match = env.code.match(/\n(?!$)/g); |
+ var linesNum = match ? match.length + 1 : 1; |
var lineNumbersWrapper; |
- var lines = new Array(linesNum); |
+ var lines = new Array(linesNum + 1); |
lines = lines.join('<span></span>'); |
lineNumbersWrapper = document.createElement('span'); |
@@ -35,4 +51,6 @@ Prism.hooks.add('after-highlight', function (env) { |
env.element.appendChild(lineNumbersWrapper); |
-}); |
+}); |
+ |
+}()); |