Expand garbage collection

This commit is contained in:
Francisco Hodge 2019-11-07 11:25:18 -05:00
parent 6fe56c3abc
commit d92f84f5c3

View File

@ -129,9 +129,8 @@ class SimpleKeyboard {
if (!window["SimpleKeyboardInstances"]) if (!window["SimpleKeyboardInstances"])
window["SimpleKeyboardInstances"] = {}; window["SimpleKeyboardInstances"] = {};
window["SimpleKeyboardInstances"][ this.currentInstanceName = this.utilities.camelCase(this.keyboardDOMClass);
this.utilities.camelCase(this.keyboardDOMClass) window["SimpleKeyboardInstances"][this.currentInstanceName] = this;
] = this;
/** /**
* Instance vars * Instance vars
@ -723,22 +722,77 @@ class SimpleKeyboard {
}); });
} }
/**
* Execute an operation on each button
*/
recurseButtons(fn) {
if (!fn) return false;
Object.keys(this.buttonElements).forEach(buttonName =>
this.buttonElements[buttonName].forEach(fn)
);
}
/** /**
* Destroy keyboard listeners and DOM elements * Destroy keyboard listeners and DOM elements
*/ */
destroy() { destroy() {
if (this.options.debug)
console.log(
`Destroying simple-keyboard instance: ${this.currentInstanceName}`
);
/** /**
* Remove listeners * Remove document listeners
*/ */
document.removeEventListener("keyup", this.handleKeyUp); document.removeEventListener("keyup", this.handleKeyUp);
document.removeEventListener("keydown", this.handleKeyDown); document.removeEventListener("keydown", this.handleKeyDown);
document.removeEventListener("mouseup", this.handleMouseUp); document.removeEventListener("mouseup", this.handleMouseUp);
document.removeEventListener("touchend", this.handleTouchEnd); document.removeEventListener("touchend", this.handleTouchEnd);
document.onpointerup = null;
document.ontouchend = null;
document.ontouchcancel = null;
document.onmouseup = null;
/** /**
* Clear DOM * Remove buttons
*/ */
this.clear(); let deleteButton = buttonElement => {
buttonElement.onpointerdown = null;
buttonElement.onpointerup = null;
buttonElement.onpointercancel = null;
buttonElement.ontouchstart = null;
buttonElement.ontouchend = null;
buttonElement.ontouchcancel = null;
buttonElement.onclick = null;
buttonElement.onmousedown = null;
buttonElement.onmouseup = null;
buttonElement.remove();
buttonElement = null;
};
this.recurseButtons(deleteButton);
this.buttonElements = null;
this.recurseButtons = null;
deleteButton = null;
/**
* Remove wrapper events
*/
this.keyboardDOM.onpointerdown = null;
this.keyboardDOM.ontouchstart = null;
this.keyboardDOM.onmousedown = null;
this.keyboardDOM.remove();
this.keyboardDOM = null;
/**
* Remove instance
*/
window["SimpleKeyboardInstances"][this.currentInstanceName] = null;
delete window["SimpleKeyboardInstances"][this.currentInstanceName];
} }
/** /**