Release free nodes after destroying TextEditor

This commit is contained in:
Antonio Scandurra
2015-09-15 10:36:47 +02:00
parent ce4281821d
commit c8c69a99b9
5 changed files with 22 additions and 0 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -22,6 +22,8 @@ class LineNumberGutterComponent extends TiledComponent
@domNode.addEventListener 'mousedown', @onMouseDown
destroy: ->
@domElementPool.clear()
@domNode.removeEventListener 'click', @onClick
@domNode.removeEventListener 'mousedown', @onMouseDown

View File

@@ -31,6 +31,9 @@ class LinesComponent extends TiledComponent
insertionPoint.setAttribute('select', '.overlayer')
@domNode.appendChild(insertionPoint)
destroy: ->
@domElementPool.clear()
getDomNode: ->
@domNode

View File

@@ -107,6 +107,7 @@ class TextEditorComponent
@disposables.dispose()
@presenter.destroy()
@gutterContainerComponent?.destroy()
@linesComponent.destroy()
getDomNode: ->
@domNode