diff --git a/README.md b/README.md
index 5c82fd8..36f25e9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# highlightjs-line-numbers.js [](https://github.com/wcoder/highlightjs-line-numbers.js/archive/master.zip)
+# highlightjs-line-numbers.js [](https://www.npmjs.com/package/highlightjs-line-numbers.js) 
Highlight.js line numbers plugin.
@@ -18,7 +18,7 @@ npm install highlightjs-line-numbers.js
#### Getting the library from CDN
```html
-
+
```
## Usage
@@ -40,9 +40,9 @@ hljs.initLineNumbersOnLoad();
Here’s an equivalent way to calling `initLineNumbersOnLoad` using jQuery:
```js
$(document).ready(function() {
- $('code.hljs').each(function(i, block) {
- hljs.lineNumbersBlock(block);
- });
+ $('code.hljs').each(function(i, block) {
+ hljs.lineNumbersBlock(block);
+ });
});
```
@@ -50,25 +50,25 @@ If your needs cool style, add styles by taste:
```css
/* for block of numbers */
td.hljs-ln-numbers {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-
- text-align: center;
- color: #ccc;
- border-right: 1px solid #CCC;
- vertical-align: top;
- padding-right: 5px;
-
- /* your custom style here */
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+ text-align: center;
+ color: #ccc;
+ border-right: 1px solid #CCC;
+ vertical-align: top;
+ padding-right: 5px;
+
+ /* your custom style here */
}
/* for block of code */
td.hljs-ln-code {
- padding-left: 10px;
+ padding-left: 10px;
}
```
@@ -76,9 +76,9 @@ td.hljs-ln-code {
After version 2.1 plugin has optional parameter `options` - for custom setup.
-name | type | default value | description
------|------|---------------|------------
-singleLine | boolean | false | enable plugin for code block with one line
+name | type | default value | description
+-----------|---------|---------------|-----------------------
+singleLine | boolean | false | enable plugin for code block with one line
#### Examples of using
@@ -93,4 +93,4 @@ hljs.lineNumbersBlock(myCodeBlock, myOptions);
```
---
-© 2017 Yauheni Pakala | MIT License
+© 2018 Yauheni Pakala | MIT License
diff --git a/dist/highlightjs-line-numbers.min.js b/dist/highlightjs-line-numbers.min.js
index 0ed4344..6112cb6 100644
--- a/dist/highlightjs-line-numbers.min.js
+++ b/dist/highlightjs-line-numbers.min.js
@@ -1 +1 @@
-!function(n,e){"use strict";function t(){var n=e.createElement("style");n.type="text/css",n.innerHTML=h(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[f,m,j]),e.getElementsByTagName("head")[0].appendChild(n)}function r(t){"complete"===e.readyState?l(t):n.addEventListener("DOMContentLoaded",function(){l(t)})}function l(t){try{var r=e.querySelectorAll("code.hljs");for(var l in r)r.hasOwnProperty(l)&&i(r[l],t)}catch(o){n.console.error("LineNumbers error: ",o)}}function i(n,e){if("object"==typeof n){e=e||{singleLine:!1};var t=e.singleLine?0:1;u(function(){s(n),n.innerHTML=o(n.innerHTML,t)})}}function o(n,e){var t=c(n);if(t.length>e){for(var r="",l=0,i=t.length;l
| {6} | ',[p,v,m,j,g,l+1,t[l].length>0?t[l]:" "]);return h('',[f,r])}return n}function s(n){var e=n.childNodes;for(var t in e)if(e.hasOwnProperty(t)){var r=e[t];d(r.textContent)>0&&(r.childNodes.length>0?s(r):a(r))}}function a(n){var e=n.parentNode.className;if(/hljs-/.test(e)){for(var t=c(n.textContent),r=0,l="";r{1}\n',[e,t[r]]);n.parentNode.innerHTML=l.trim()}}function c(n){return 0===n.length?[]:n.split(L)}function d(n){return(n.trim().match(L)||[]).length}function u(e){n.setTimeout(e,0)}function h(n,e){return n.replace(/\{(\d+)\}/g,function(n,t){return e[t]?e[t]:n})}var f="hljs-ln",v="hljs-ln-line",g="hljs-ln-code",p="hljs-ln-numbers",m="hljs-ln-n",j="data-line-number",L=/\r\n|\r|\n/g;n.hljs?(n.hljs.initLineNumbersOnLoad=r,n.hljs.lineNumbersBlock=i,t()):n.console.error("highlight.js not detected!")}(window,document);
\ No newline at end of file
+!function(n,e){"use strict";function t(){var n=e.createElement("style");n.type="text/css",n.innerHTML=h(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[f,m,j]),e.getElementsByTagName("head")[0].appendChild(n)}function r(t){"complete"===e.readyState?l(t):n.addEventListener("DOMContentLoaded",function(){l(t)})}function l(t){try{var r=e.querySelectorAll("code.hljs");for(var l in r)r.hasOwnProperty(l)&&i(r[l],t)}catch(o){n.console.error("LineNumbers error: ",o)}}function i(n,e){if("object"==typeof n){e=e||{singleLine:!1};var t=e.singleLine?0:1;u(function(){s(n),n.innerHTML=o(n.innerHTML,t)})}}function o(n,e){var t=c(n);if(""===t[t.length-1].trim()&&t.pop(),t.length>e){for(var r="",l=0,i=t.length;l | {6} | ',[v,g,m,j,p,l+1,t[l].length>0?t[l]:" "]);return h('',[f,r])}return n}function s(n){var e=n.childNodes;for(var t in e)if(e.hasOwnProperty(t)){var r=e[t];d(r.textContent)>0&&(r.childNodes.length>0?s(r):a(r.parentNode))}}function a(n){var e=n.className;if(/hljs-/.test(e)){for(var t=c(n.innerHTML),r=0,l="";r{1}\n',[e,t[r]]);n.innerHTML=l.trim()}}function c(n){return 0===n.length?[]:n.split(L)}function d(n){return(n.trim().match(L)||[]).length}function u(e){n.setTimeout(e,0)}function h(n,e){return n.replace(/\{(\d+)\}/g,function(n,t){return e[t]?e[t]:n})}var f="hljs-ln",g="hljs-ln-line",p="hljs-ln-code",v="hljs-ln-numbers",m="hljs-ln-n",j="data-line-number",L=/\r\n|\r|\n/g;n.hljs?(n.hljs.initLineNumbersOnLoad=r,n.hljs.lineNumbersBlock=i,t()):n.console.error("highlight.js not detected!")}(window,document);
\ No newline at end of file
diff --git a/src/highlightjs-line-numbers.js b/src/highlightjs-line-numbers.js
index d44dba1..a045a05 100644
--- a/src/highlightjs-line-numbers.js
+++ b/src/highlightjs-line-numbers.js
@@ -82,6 +82,11 @@
var lines = getLines(inputHtml);
+ // if last line contains only carriage return remove it
+ if (lines[lines.length-1].trim() === '') {
+ lines.pop();
+ }
+
if (lines.length > firstLineIndex) {
var html = '';
@@ -119,14 +124,14 @@
*/
function duplicateMultilineNodes (element) {
var nodes = element.childNodes;
- for (var node in nodes){
+ for (var node in nodes) {
if (nodes.hasOwnProperty(node)) {
var child = nodes[node];
if (getLinesCount(child.textContent) > 0) {
if (child.childNodes.length > 0) {
duplicateMultilineNodes(child);
} else {
- duplicateMultilineNode(child);
+ duplicateMultilineNode(child.parentNode);
}
}
}
@@ -138,16 +143,17 @@
* @param {HTMLElement} element
*/
function duplicateMultilineNode (element) {
- var className = element.parentNode.className;
+ var className = element.className;
if ( ! /hljs-/.test(className)) return;
- var lines = getLines(element.textContent);
+ var lines = getLines(element.innerHTML);
for (var i = 0, result = ''; i < lines.length; i++) {
result += format('{1}\n', [ className, lines[i] ]);
}
- element.parentNode.innerHTML = result.trim();
+
+ element.innerHTML = result.trim();
}
function getLines (text) {