mirror of
https://github.com/Polymer/polymer.git
synced 2025-02-25 18:55:30 -06:00
87 lines
2.8 KiB
HTML
87 lines
2.8 KiB
HTML
|
|
<!--
|
||
|
|
@license
|
||
|
|
Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||
|
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||
|
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||
|
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||
|
|
Code distributed by Google as part of the polymer project is also
|
||
|
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||
|
|
-->
|
||
|
|
<script>
|
||
|
|
(function() {
|
||
|
|
|
||
|
|
const DISABLED_ATTR = 'disable-upgrade';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Element class mixin that allows the element to boot up in a non-enabled
|
||
|
|
* state when the `disable-upgrade` attribute is present. This mixin is
|
||
|
|
* designed to be used with element classes like Polymer.Element that perform
|
||
|
|
* initial startup work when they are first connected. When the
|
||
|
|
* `disable-upgrade` attribute is removed, if the element is connected, it
|
||
|
|
* boots up and "enables" as it otherwise would; if it is not connected, the
|
||
|
|
* element boots up when it is next connected.
|
||
|
|
*
|
||
|
|
* Using `disable-upgrade` with Polymer.Element prevents any data propagation
|
||
|
|
* to the element, any element DOM from stamping, or any work done in
|
||
|
|
* connected/disconnctedCallback from occuring, but it does not prevent work
|
||
|
|
* done in the element constructor.
|
||
|
|
*
|
||
|
|
* Note, this mixin must be applied on top of any element class that
|
||
|
|
* itself implements a `connectedCallback` so that it can control the work
|
||
|
|
* done in `connectedCallback`. For example,
|
||
|
|
*
|
||
|
|
* MyClass = Polymer.DisableUpgradeMixin(class extends BaseClass {...});
|
||
|
|
*
|
||
|
|
* @mixinFunction
|
||
|
|
* @polymer
|
||
|
|
* @memberof Polymer
|
||
|
|
*/
|
||
|
|
Polymer.DisableUpgradeMixin = Polymer.dedupingMixin((base) => {
|
||
|
|
|
||
|
|
return class DisableUpgradeClass extends base {
|
||
|
|
|
||
|
|
static get observedAttributes() {
|
||
|
|
return super.observedAttributes.concat(DISABLED_ATTR);
|
||
|
|
}
|
||
|
|
|
||
|
|
attributeChangedCallback(name, old, value) {
|
||
|
|
if (name == DISABLED_ATTR) {
|
||
|
|
if (!this.__dataEnabled && value == null && this.isConnected) {
|
||
|
|
super.connectedCallback();
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
super.attributeChangedCallback(name, old, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
__shouldEnable() {
|
||
|
|
return this.__dataEnabled || !this.hasAttribute(DISABLED_ATTR);
|
||
|
|
}
|
||
|
|
|
||
|
|
// prevent user code in connected from running
|
||
|
|
connectedCallback() {
|
||
|
|
if (this.__shouldEnable()) {
|
||
|
|
super.connectedCallback();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// prevent element from turning on properties
|
||
|
|
_enableProperties() {
|
||
|
|
if (this.__shouldEnable()) {
|
||
|
|
super._enableProperties();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// only go if "enabled"
|
||
|
|
disconnectedCallback() {
|
||
|
|
if (this.__dataEnabled) {
|
||
|
|
super.disconnectedCallback();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
})();
|
||
|
|
|
||
|
|
</script>
|