diff --git a/src/gutter-container-component.coffee b/src/gutter-container-component.coffee index 9e0be4d8d..2dd5f21fb 100644 --- a/src/gutter-container-component.coffee +++ b/src/gutter-container-component.coffee @@ -7,7 +7,7 @@ LineNumberGutterComponent = require './line-number-gutter-component' module.exports = class GutterContainerComponent - constructor: ({@onLineNumberGutterMouseDown, @editor, @presenter}) -> + constructor: ({@onLineNumberGutterMouseDown, @editor}) -> # An array of objects of the form: {name: {String}, component: {Object}} @gutterComponents = [] @gutterComponentsByGutterName = {} @@ -34,7 +34,7 @@ class GutterContainerComponent gutterComponent = @gutterComponentsByGutterName[gutter.name] if not gutterComponent if gutter.name is 'line-number' - gutterComponent = new LineNumberGutterComponent({onMouseDown: @onLineNumberGutterMouseDown, @presenter, @editor, gutter}) + gutterComponent = new LineNumberGutterComponent({onMouseDown: @onLineNumberGutterMouseDown, @editor, gutter}) @lineNumberGutterComponent = gutterComponent else gutterComponent = new CustomGutterComponent({gutter}) diff --git a/src/line-number-gutter-component.coffee b/src/line-number-gutter-component.coffee index c33555979..5b399570a 100644 --- a/src/line-number-gutter-component.coffee +++ b/src/line-number-gutter-component.coffee @@ -7,7 +7,7 @@ module.exports = class LineNumberGutterComponent extends TiledComponent dummyLineNumberNode: null - constructor: ({@onMouseDown, @editor, @presenter, @gutter}) -> + constructor: ({@onMouseDown, @editor, @gutter}) -> @lineNumberNodesById = {} @visible = true @@ -77,11 +77,6 @@ class LineNumberGutterComponent extends TiledComponent DummyLineNumberComponent.newState = @newState @dummyLineNumberNode.innerHTML = DummyLineNumberComponent.buildLineNumberInnerHTML(0, false) - lineNumberNodeForScreenRow: (screenRow) -> - tile = @presenter.tileForRow(screenRow) - - @componentsByTileId[tile]?.lineNumberNodeForScreenRow(screenRow) - onMouseDown: (event) => {target} = event lineNumber = target.parentNode diff --git a/src/lines-component.coffee b/src/lines-component.coffee index 644278550..bef14aec3 100644 --- a/src/lines-component.coffee +++ b/src/lines-component.coffee @@ -14,7 +14,7 @@ class LinesComponent extends TiledComponent @domNode = document.createElement('div') @domNode.classList.add('lines') - @cursorsComponent = new CursorsComponent(@presenter) + @cursorsComponent = new CursorsComponent @domNode.appendChild(@cursorsComponent.getDomNode()) if @useShadowDOM @@ -95,8 +95,3 @@ class LinesComponent extends TiledComponent component.clearMeasurements() @presenter.clearScopedCharacterWidths() - - lineNodeForScreenRow: (screenRow) -> - tile = @presenter.tileForRow(screenRow) - - @componentsByTileId[tile]?.lineNodeForScreenRow(screenRow) diff --git a/src/lines-tile-component.coffee b/src/lines-tile-component.coffee index e0e47c3e7..d39df0a9e 100644 --- a/src/lines-tile-component.coffee +++ b/src/lines-tile-component.coffee @@ -25,7 +25,7 @@ class LinesTileComponent @domNode.style.position = "absolute" @domNode.style.display = "block" - @highlightsComponent = new HighlightsComponent(@presenter) + @highlightsComponent = new HighlightsComponent @domNode.appendChild(@highlightsComponent.getDomNode()) getDomNode: -> diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 8802d8022..647faded6 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -165,7 +165,7 @@ class TextEditorComponent @overlayManager?.measureOverlays() mountGutterContainerComponent: -> - @gutterContainerComponent = new GutterContainerComponent({@editor, @onLineNumberGutterMouseDown, @presenter}) + @gutterContainerComponent = new GutterContainerComponent({@editor, @onLineNumberGutterMouseDown}) @domNode.insertBefore(@gutterContainerComponent.getDomNode(), @domNode.firstChild) becameVisible: -> @@ -724,9 +724,18 @@ class TextEditorComponent consolidateSelections: (e) -> e.abortKeyBinding() unless @editor.consolidateSelections() - lineNodeForScreenRow: (screenRow) -> @linesComponent.lineNodeForScreenRow(screenRow) + lineNodeForScreenRow: (screenRow) -> + tileRow = @presenter.tileForRow(screenRow) + tileComponent = @linesComponent.getComponentForTile(tileRow) - lineNumberNodeForScreenRow: (screenRow) -> @gutterContainerComponent.getLineNumberGutterComponent().lineNumberNodeForScreenRow(screenRow) + tileComponent?.lineNodeForScreenRow(screenRow) + + lineNumberNodeForScreenRow: (screenRow) -> + tileRow = @presenter.tileForRow(screenRow) + gutterComponent = @gutterContainerComponent.getLineNumberGutterComponent() + tileComponent = gutterComponent.getComponentForTile(tileRow) + + tileComponent?.lineNumberNodeForScreenRow(screenRow) screenRowForNode: (node) -> while node? diff --git a/src/tiled-component.coffee b/src/tiled-component.coffee index 51af7b57d..33719dda5 100644 --- a/src/tiled-component.coffee +++ b/src/tiled-component.coffee @@ -17,32 +17,35 @@ class TiledComponent @afterUpdateSync?(state) removeTileNodes: -> - @removeTileNode(id) for id of @oldState.tiles + @removeTileNode(tileRow) for tileRow of @oldState.tiles return - removeTileNode: (id) -> - node = @componentsByTileId[id].getDomNode() + removeTileNode: (tileRow) -> + node = @componentsByTileId[tileRow].getDomNode() node.remove() - delete @componentsByTileId[id] - delete @oldState.tiles[id] + delete @componentsByTileId[tileRow] + delete @oldState.tiles[tileRow] updateTileNodes: -> @componentsByTileId ?= {} - for id of @oldState.tiles - unless @newState.tiles.hasOwnProperty(id) - @removeTileNode(id) + for tileRow of @oldState.tiles + unless @newState.tiles.hasOwnProperty(tileRow) + @removeTileNode(tileRow) - for id, tileState of @newState.tiles - if @oldState.tiles.hasOwnProperty(id) - component = @componentsByTileId[id] + for tileRow, tileState of @newState.tiles + if @oldState.tiles.hasOwnProperty(tileRow) + component = @componentsByTileId[tileRow] else - component = @componentsByTileId[id] = @buildComponentForTile(id) + component = @componentsByTileId[tileRow] = @buildComponentForTile(tileRow) @getTilesNode().appendChild(component.getDomNode()) - @oldState.tiles[id] = cloneObject(tileState) + @oldState.tiles[tileRow] = cloneObject(tileState) component.updateSync(@newState) return + + getComponentForTile: (tileRow) -> + @componentsByTileId[tileRow]