diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts index 825b5e2a2e..ff8bcf8949 100644 --- a/src/generators/dom/index.ts +++ b/src/generators/dom/index.ts @@ -174,8 +174,8 @@ export default function dom( ? `@proto ` : deindent` { - ${['get', 'fire', 'observe', 'on', 'set'] - .map(n => `${n}: @${n}`) + ${['destroy', 'get', 'fire', 'observe', 'on', 'set', 'teardown'] + .map(n => `${n}: @${n === 'teardown' ? 'destroy' : n}`) .join(',\n')} }`; @@ -207,6 +207,7 @@ export default function dom( }; this._handlers = Object.create( null ); + ${templateProperties.ondestroy && `this._handlers.destroy = [@template.ondestroy.bind(this)]`} this._root = options._root || this; this._yield = options._yield; @@ -263,19 +264,6 @@ export default function dom( ${_set} }; - ${name}.prototype.teardown = ${name}.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return${options.dev && ` console.warn( 'Component was already destroyed' )`}; - this.fire( 'destroy' ); - ${templateProperties.ondestroy && `@template.ondestroy.call( this );`} - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; - }; - ${templateProperties.setup && `@template.setup( ${name} );`} `); diff --git a/src/shared/index.js b/src/shared/index.js index 119f50452b..87f4728f8f 100644 --- a/src/shared/index.js +++ b/src/shared/index.js @@ -3,6 +3,24 @@ export * from './dom.js'; export * from './transitions.js'; export * from './utils.js'; +export function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + +export function destroyDev(detach) { + if (this._destroyed) console.warn('Component was already destroyed'); + destroy.call(this, detach); +} + export function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -105,6 +123,7 @@ export function onDev(eventName, handler) { } export function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -119,17 +138,21 @@ export function callAll(fns) { } export var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; export var protoDev = { + destroy: destroyDev, get: get, fire: fire, observe: observeDev, on: onDev, - set: set + set: set, + teardown: destroyDev }; diff --git a/test/js/samples/collapses-text-around-comments/expected-bundle.js b/test/js/samples/collapses-text-around-comments/expected-bundle.js index c9fa1ef590..053e4c2c12 100644 --- a/test/js/samples/collapses-text-around-comments/expected-bundle.js +++ b/test/js/samples/collapses-text-around-comments/expected-bundle.js @@ -37,6 +37,19 @@ function setAttribute(node, attribute, value) { node.setAttribute(attribute, value); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -114,6 +127,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -128,11 +142,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; var template = (function () { @@ -222,16 +238,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/collapses-text-around-comments/expected.js b/test/js/samples/collapses-text-around-comments/expected.js index a5dc4d5d58..697716bdfe 100644 --- a/test/js/samples/collapses-text-around-comments/expected.js +++ b/test/js/samples/collapses-text-around-comments/expected.js @@ -87,16 +87,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/computed-collapsed-if/expected-bundle.js b/test/js/samples/computed-collapsed-if/expected-bundle.js index 35825f465d..a52a992476 100644 --- a/test/js/samples/computed-collapsed-if/expected-bundle.js +++ b/test/js/samples/computed-collapsed-if/expected-bundle.js @@ -13,6 +13,19 @@ function assign(target) { return target; } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -90,6 +103,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -104,11 +118,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; function recompute ( state, newState, oldState, isInitial ) { @@ -175,16 +191,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/computed-collapsed-if/expected.js b/test/js/samples/computed-collapsed-if/expected.js index bb2b420c84..25058a55f6 100644 --- a/test/js/samples/computed-collapsed-if/expected.js +++ b/test/js/samples/computed-collapsed-if/expected.js @@ -64,16 +64,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/css-media-query/expected-bundle.js b/test/js/samples/css-media-query/expected-bundle.js index ebbfffd1ec..8ecdac50c1 100644 --- a/test/js/samples/css-media-query/expected-bundle.js +++ b/test/js/samples/css-media-query/expected-bundle.js @@ -33,6 +33,19 @@ function setAttribute(node, attribute, value) { node.setAttribute(attribute, value); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -110,6 +123,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -124,11 +138,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; function encapsulateStyles ( node ) { @@ -201,16 +217,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/css-media-query/expected.js b/test/js/samples/css-media-query/expected.js index d9af1bfe54..15a7e61159 100644 --- a/test/js/samples/css-media-query/expected.js +++ b/test/js/samples/css-media-query/expected.js @@ -70,16 +70,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/each-block-changed-check/expected-bundle.js b/test/js/samples/each-block-changed-check/expected-bundle.js index 9afe02d871..f77ab22f89 100644 --- a/test/js/samples/each-block-changed-check/expected-bundle.js +++ b/test/js/samples/each-block-changed-check/expected-bundle.js @@ -46,6 +46,19 @@ function createText(data) { return document.createTextNode(data); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -123,6 +136,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -137,11 +151,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; function create_main_fragment ( state, component ) { @@ -321,16 +337,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/each-block-changed-check/expected.js b/test/js/samples/each-block-changed-check/expected.js index 6072df4896..c849754884 100644 --- a/test/js/samples/each-block-changed-check/expected.js +++ b/test/js/samples/each-block-changed-check/expected.js @@ -177,16 +177,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/event-handlers-custom/expected-bundle.js b/test/js/samples/event-handlers-custom/expected-bundle.js index fa20cbc9ef..12857effdd 100644 --- a/test/js/samples/event-handlers-custom/expected-bundle.js +++ b/test/js/samples/event-handlers-custom/expected-bundle.js @@ -31,6 +31,19 @@ function createText(data) { return document.createTextNode(data); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -108,6 +121,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -122,11 +136,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; var template = (function () { @@ -209,16 +225,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/event-handlers-custom/expected.js b/test/js/samples/event-handlers-custom/expected.js index abbfef0f91..b4bf41c8a5 100644 --- a/test/js/samples/event-handlers-custom/expected.js +++ b/test/js/samples/event-handlers-custom/expected.js @@ -80,16 +80,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/if-block-no-update/expected-bundle.js b/test/js/samples/if-block-no-update/expected-bundle.js index 73ac6bcf63..56ab031da3 100644 --- a/test/js/samples/if-block-no-update/expected-bundle.js +++ b/test/js/samples/if-block-no-update/expected-bundle.js @@ -37,6 +37,19 @@ function createComment() { return document.createComment(''); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -114,6 +127,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -128,11 +142,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; function create_main_fragment ( state, component ) { @@ -256,16 +272,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/if-block-no-update/expected.js b/test/js/samples/if-block-no-update/expected.js index e346847b37..4fdddb4f0c 100644 --- a/test/js/samples/if-block-no-update/expected.js +++ b/test/js/samples/if-block-no-update/expected.js @@ -121,16 +121,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/if-block-simple/expected-bundle.js b/test/js/samples/if-block-simple/expected-bundle.js index 2ce85c33e6..aca06df4f4 100644 --- a/test/js/samples/if-block-simple/expected-bundle.js +++ b/test/js/samples/if-block-simple/expected-bundle.js @@ -37,6 +37,19 @@ function createComment() { return document.createComment(''); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -114,6 +127,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -128,11 +142,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; function create_main_fragment ( state, component ) { @@ -232,16 +248,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/if-block-simple/expected.js b/test/js/samples/if-block-simple/expected.js index efd23dc55d..03ab6d1598 100644 --- a/test/js/samples/if-block-simple/expected.js +++ b/test/js/samples/if-block-simple/expected.js @@ -97,16 +97,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/non-imported-component/expected-bundle.js b/test/js/samples/non-imported-component/expected-bundle.js index c37d2f042a..e9a1ef969d 100644 --- a/test/js/samples/non-imported-component/expected-bundle.js +++ b/test/js/samples/non-imported-component/expected-bundle.js @@ -25,6 +25,19 @@ function createText(data) { return document.createTextNode(data); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -102,6 +115,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -116,11 +130,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; var template = (function () { @@ -215,16 +231,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/non-imported-component/expected.js b/test/js/samples/non-imported-component/expected.js index 195fb2b7b1..629390ca63 100644 --- a/test/js/samples/non-imported-component/expected.js +++ b/test/js/samples/non-imported-component/expected.js @@ -94,16 +94,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/onrender-onteardown-rewritten/expected-bundle.js b/test/js/samples/onrender-onteardown-rewritten/expected-bundle.js index eb9a6cdd4f..041326fdf3 100644 --- a/test/js/samples/onrender-onteardown-rewritten/expected-bundle.js +++ b/test/js/samples/onrender-onteardown-rewritten/expected-bundle.js @@ -13,6 +13,19 @@ function assign(target) { return target; } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -90,6 +103,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -104,11 +118,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; var template = (function () { @@ -142,6 +158,7 @@ function SvelteComponent ( options ) { }; this._handlers = Object.create( null ); + this._handlers.destroy = [template.ondestroy.bind(this)]; this._root = options._root || this; this._yield = options._yield; @@ -177,17 +194,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - template.ondestroy.call( this ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/onrender-onteardown-rewritten/expected.js b/test/js/samples/onrender-onteardown-rewritten/expected.js index e35b716595..f40d3e0a5c 100644 --- a/test/js/samples/onrender-onteardown-rewritten/expected.js +++ b/test/js/samples/onrender-onteardown-rewritten/expected.js @@ -31,6 +31,7 @@ function SvelteComponent ( options ) { }; this._handlers = Object.create( null ); + this._handlers.destroy = [template.ondestroy.bind(this)] this._root = options._root || this; this._yield = options._yield; @@ -66,17 +67,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - template.ondestroy.call( this ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/setup-method/expected-bundle.js b/test/js/samples/setup-method/expected-bundle.js index 6c4e62fa04..d27a1ef958 100644 --- a/test/js/samples/setup-method/expected-bundle.js +++ b/test/js/samples/setup-method/expected-bundle.js @@ -13,6 +13,19 @@ function assign(target) { return target; } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -90,6 +103,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -104,11 +118,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; var template = (function () { @@ -176,18 +192,6 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - template.setup( SvelteComponent ); export default SvelteComponent; diff --git a/test/js/samples/setup-method/expected.js b/test/js/samples/setup-method/expected.js index 3e72768ac8..d82ab92039 100644 --- a/test/js/samples/setup-method/expected.js +++ b/test/js/samples/setup-method/expected.js @@ -65,18 +65,6 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - template.setup( SvelteComponent ); -export default SvelteComponent; +export default SvelteComponent; \ No newline at end of file diff --git a/test/js/samples/use-elements-as-anchors/expected-bundle.js b/test/js/samples/use-elements-as-anchors/expected-bundle.js index b969e80971..dd1ed072bb 100644 --- a/test/js/samples/use-elements-as-anchors/expected-bundle.js +++ b/test/js/samples/use-elements-as-anchors/expected-bundle.js @@ -37,6 +37,19 @@ function createComment() { return document.createComment(''); } +function destroy(detach) { + if (!this._destroyed) { + this.fire('destroy'); + + if (detach !== false) this._fragment.unmount(); + this._fragment.destroy(); + this._fragment = null; + + this._state = {}; + this._destroyed = true; + } +} + function differs(a, b) { return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } @@ -114,6 +127,7 @@ function on(eventName, handler) { } function set(newState) { + if (this._destroyed) return; this._set(assign({}, newState)); if (this._root._lock) return; this._root._lock = true; @@ -128,11 +142,13 @@ function callAll(fns) { } var proto = { + destroy: destroy, get: get, fire: fire, observe: observe, on: on, - set: set + set: set, + teardown: destroy }; function create_main_fragment ( state, component ) { @@ -416,16 +432,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; diff --git a/test/js/samples/use-elements-as-anchors/expected.js b/test/js/samples/use-elements-as-anchors/expected.js index 046bf7fcbc..2a214d1ca0 100644 --- a/test/js/samples/use-elements-as-anchors/expected.js +++ b/test/js/samples/use-elements-as-anchors/expected.js @@ -281,16 +281,4 @@ SvelteComponent.prototype._set = function _set ( newState ) { dispatchObservers( this, this._observers.post, newState, oldState ); }; -SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) { - if ( this._destroyed ) return; - this.fire( 'destroy' ); - - if ( detach !== false ) this._fragment.unmount(); - this._fragment.destroy(); - this._fragment = null; - - this._state = {}; - this._destroyed = true; -}; - export default SvelteComponent; \ No newline at end of file diff --git a/test/runtime/samples/lifecycle-events/_config.js b/test/runtime/samples/lifecycle-events/_config.js index 3dcb0d5192..2a9d25564a 100644 --- a/test/runtime/samples/lifecycle-events/_config.js +++ b/test/runtime/samples/lifecycle-events/_config.js @@ -1,7 +1,7 @@ export default { - test ( assert, component ) { - assert.deepEqual( component.events, [ 'render' ]); + test(assert, component) { + assert.deepEqual(component.events, ['create']); component.destroy(); - assert.deepEqual( component.events, [ 'render', 'teardown' ]); + assert.deepEqual(component.events, ['create', 'destroy']); } }; diff --git a/test/runtime/samples/lifecycle-events/main.html b/test/runtime/samples/lifecycle-events/main.html index 1989d158c0..b39ce292d6 100644 --- a/test/runtime/samples/lifecycle-events/main.html +++ b/test/runtime/samples/lifecycle-events/main.html @@ -2,12 +2,12 @@ + \ No newline at end of file diff --git a/test/runtime/samples/set-after-destroy/_config.js b/test/runtime/samples/set-after-destroy/_config.js new file mode 100644 index 0000000000..1f8fb08f73 --- /dev/null +++ b/test/runtime/samples/set-after-destroy/_config.js @@ -0,0 +1,10 @@ +export default { + data: { + x: 1 + }, + + test(assert, component) { + component.destroy(); + component.set({ x: 2 }); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/set-after-destroy/main.html b/test/runtime/samples/set-after-destroy/main.html new file mode 100644 index 0000000000..e60a1a28e2 --- /dev/null +++ b/test/runtime/samples/set-after-destroy/main.html @@ -0,0 +1 @@ +