mirror of
https://github.com/atom/atom.git
synced 2026-01-22 21:38:10 -05:00
Release free nodes after destroying TextEditor
This commit is contained in:
@@ -34,6 +34,17 @@ describe "DOMElementPool", ->
|
||||
expect(elements).not.toContain(domElementPool.build("div"))
|
||||
expect(elements).not.toContain(domElementPool.build("span"))
|
||||
|
||||
it "forgets free nodes after being cleared", ->
|
||||
span = domElementPool.build("span")
|
||||
div = domElementPool.build("div")
|
||||
domElementPool.freeElementAndDescendants(span)
|
||||
domElementPool.freeElementAndDescendants(div)
|
||||
|
||||
domElementPool.clear()
|
||||
|
||||
expect(domElementPool.build("span")).not.toBe(span)
|
||||
expect(domElementPool.build("div")).not.toBe(div)
|
||||
|
||||
it "throws an error when trying to free the same node twice", ->
|
||||
div = domElementPool.build("div")
|
||||
domElementPool.freeElementAndDescendants(div)
|
||||
|
||||
@@ -4,6 +4,11 @@ class DOMElementPool
|
||||
@freeElementsByTagName = {}
|
||||
@freedElements = new Set
|
||||
|
||||
clear: ->
|
||||
@freedElements.clear()
|
||||
for tagName, freeElements of @freeElementsByTagName
|
||||
freeElements.length = 0
|
||||
|
||||
build: (tagName, className, textContent) ->
|
||||
element = @freeElementsByTagName[tagName]?.pop()
|
||||
element ?= document.createElement(tagName)
|
||||
|
||||
@@ -22,6 +22,8 @@ class LineNumberGutterComponent extends TiledComponent
|
||||
@domNode.addEventListener 'mousedown', @onMouseDown
|
||||
|
||||
destroy: ->
|
||||
@domElementPool.clear()
|
||||
|
||||
@domNode.removeEventListener 'click', @onClick
|
||||
@domNode.removeEventListener 'mousedown', @onMouseDown
|
||||
|
||||
|
||||
@@ -31,6 +31,9 @@ class LinesComponent extends TiledComponent
|
||||
insertionPoint.setAttribute('select', '.overlayer')
|
||||
@domNode.appendChild(insertionPoint)
|
||||
|
||||
destroy: ->
|
||||
@domElementPool.clear()
|
||||
|
||||
getDomNode: ->
|
||||
@domNode
|
||||
|
||||
|
||||
@@ -107,6 +107,7 @@ class TextEditorComponent
|
||||
@disposables.dispose()
|
||||
@presenter.destroy()
|
||||
@gutterContainerComponent?.destroy()
|
||||
@linesComponent.destroy()
|
||||
|
||||
getDomNode: ->
|
||||
@domNode
|
||||
|
||||
Reference in New Issue
Block a user