From 84bcb440893daf94d0c8ca4a79feed61deaa4a05 Mon Sep 17 00:00:00 2001 From: lerminou Date: Mon, 27 Feb 2017 11:22:04 +0100 Subject: [PATCH 1/2] Adding word-wrap support --- src/highlightjs-line-numbers.js | 45 ++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/highlightjs-line-numbers.js b/src/highlightjs-line-numbers.js index f68f8f2..617b167 100644 --- a/src/highlightjs-line-numbers.js +++ b/src/highlightjs-line-numbers.js @@ -22,26 +22,38 @@ for (var i in blocks) { if (blocks.hasOwnProperty(i)) { - lineNumbersBlock(blocks[i]); + lineNumbersBlock(blocks[i], true); } } + + $( window ).resize(function() { + for (var i in blocks) { + if (blocks.hasOwnProperty(i)) { + lineNumbersBlock(blocks[i], false); + } + } + }); } catch (e) { console.error('LineNumbers error: ', e); } } - function lineNumbersBlock (element) { + //Add a second parameter to know if triggered by resizing + function lineNumbersBlock (element, resize) { if (typeof element !== 'object') return; var parent = element.parentNode; - var lines = getCountLines(parent.textContent); - + var lines = getCountLines(element, resize); if (lines > 1) { var l = ''; - for (var i = 0; i < lines; i++) { - l += (i + 1) + '\n'; - } - + $('.hljs-line').each(function(i) { + l += (i + 1) + '\n'; + //add a empty line if word wrap is detected (if div's height if > than the line-height) + if(Math.round(parseInt($(this).height())/parseInt($(this).css('line-height'))) > 1){ + l += '\n'; + } + }); + $('.hljs-line-numbers').remove(); var linesPanel = document.createElement('code'); linesPanel.className = 'hljs hljs-line-numbers'; linesPanel.style.float = 'left'; @@ -51,17 +63,26 @@ } } - function getCountLines(text) { + function getCountLines(el, resize) { + var text = el.innerHTML; if (text.length === 0) return 0; var regExp = /\r\n|\r|\n/g; var lines = text.match(regExp); lines = lines ? lines.length : 0; - if (!text[text.length - 1].match(regExp)) { lines += 1; } - + // Don't wrap in div if resize, we have already it + if(resize === true){ + //wrap each line in a div + var textLines = text.split(regExp); + var textResult = ""; + textLines.forEach(function(element) { + textResult += "
"+element+"
\n"; + }); + el.innerHTML = textResult; + } return lines; } -}(window)); \ No newline at end of file +}(window)); From 0f060cf8fc81747e4fb05268e323e8439aa6bd21 Mon Sep 17 00:00:00 2001 From: lerminou Date: Mon, 27 Feb 2017 11:35:14 +0100 Subject: [PATCH 2/2] Handle multiple wrap for each lines --- src/highlightjs-line-numbers.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/highlightjs-line-numbers.js b/src/highlightjs-line-numbers.js index 617b167..49369e5 100644 --- a/src/highlightjs-line-numbers.js +++ b/src/highlightjs-line-numbers.js @@ -49,8 +49,9 @@ $('.hljs-line').each(function(i) { l += (i + 1) + '\n'; //add a empty line if word wrap is detected (if div's height if > than the line-height) - if(Math.round(parseInt($(this).height())/parseInt($(this).css('line-height'))) > 1){ - l += '\n'; + var height = Math.round(parseInt($(this).height())/parseInt($(this).css('line-height'))); + if( height > 1){ + l += '\n'.repeat(height-1); } }); $('.hljs-line-numbers').remove();