From 246476f7597ed4d52f152d03797eaf73525379cf Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 9 Sep 2015 14:26:47 +0200 Subject: [PATCH] :art: --- src/line-numbers-tile-component.coffee | 37 +++++++++++++------------- src/lines-tile-component.coffee | 23 +++++++++------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/line-numbers-tile-component.coffee b/src/line-numbers-tile-component.coffee index 05a997216..fcebf3dcf 100644 --- a/src/line-numbers-tile-component.coffee +++ b/src/line-numbers-tile-component.coffee @@ -77,32 +77,33 @@ class LineNumbersTileComponent @lineNumberIdsByScreenRow[lineNumberState.screenRow] = id @oldTileState.lineNumbers[id] = _.clone(lineNumberState) - if newLineNumberIds? - WrapperDiv.innerHTML = newLineNumbersHTML - newLineNumberNodes = _.toArray(WrapperDiv.children) - newLineNumberNodes = _.sortBy(newLineNumberNodes, @screenRowForNode) - while newNode = newLineNumberNodes.shift() - oldLineNumberNodes = _.toArray(@domNode.children) - while oldNode = oldLineNumberNodes.shift() - break if @screenRowForNode(newNode) < @screenRowForNode(oldNode) + return unless newLineNumberIds? - id = @lineNumberIdsByScreenRow[newNode.dataset.screenRow] - @lineNumberNodesById[id] = newNode - if oldNode? - @domNode.insertBefore(newNode, oldNode) - else - @domNode.appendChild(newNode) + WrapperDiv.innerHTML = newLineNumbersHTML + newLineNumberNodes = _.toArray(WrapperDiv.children) + @insertNodes(newLineNumberNodes) + insertNodes: (lineNumberNodes) -> + lineNumberNodes = _.sortBy(lineNumberNodes, @screenRowForNode) + while newNode = lineNumberNodes.shift() + id = @lineNumberIdsByScreenRow[newNode.dataset.screenRow] + + domNodes = _.toArray(@domNode.children) + while nextNode = domNodes.shift() + break if @screenRowForNode(newNode) < @screenRowForNode(nextNode) + + if nextNode? + @domNode.insertBefore(newNode, nextNode) + else + @domNode.appendChild(newNode) + + @lineNumberNodesById[id] = newNode return screenRowForNode: (node) -> parseInt(node.dataset.screenRow) buildLineNumberHTML: (lineNumberState) -> {screenRow, bufferRow, softWrapped, top, decorationClasses, zIndex} = lineNumberState - if screenRow? - style = "position: absolute; top: #{top}px; z-index: #{zIndex};" - else - style = "visibility: hidden;" className = @buildLineNumberClassName(lineNumberState) innerHTML = @buildLineNumberInnerHTML(bufferRow, softWrapped) diff --git a/src/lines-tile-component.coffee b/src/lines-tile-component.coffee index d94ead656..66aacf569 100644 --- a/src/lines-tile-component.coffee +++ b/src/lines-tile-component.coffee @@ -106,20 +106,23 @@ class LinesTileComponent WrapperDiv.innerHTML = newLinesHTML newLineNodes = _.toArray(WrapperDiv.children) - newLineNodes = _.sortBy(newLineNodes, @screenRowForNode) + @insertLineNodes(newLineNodes) - while newLineNode = newLineNodes.shift() - oldLineNodes = _.rest(@domNode.children) # skips highlights node - while oldLineNode = oldLineNodes.shift() - break if @screenRowForNode(newLineNode) < @screenRowForNode(oldLineNode) + insertLineNodes: (lineNodes) -> + lineNodes = _.sortBy(lineNodes, @screenRowForNode) + while newNode = lineNodes.shift() + id = @lineIdsByScreenRow[newNode.dataset.screenRow] - id = @lineIdsByScreenRow[newLineNode.dataset.screenRow] - @lineNodesByLineId[id] = newLineNode - if oldLineNode? - @domNode.insertBefore(newLineNode, oldLineNode) + domNodes = _.rest(@domNode.children) # skips highlights node + while nextNode = domNodes.shift() + break if @screenRowForNode(newNode) < @screenRowForNode(nextNode) + + if nextNode? + @domNode.insertBefore(newNode, nextNode) else - @domNode.appendChild(newLineNode) + @domNode.appendChild(newNode) + @lineNodesByLineId[id] = newNode return screenRowForNode: (node) -> parseInt(node.dataset.screenRow)