diff --git a/src/mixins/property-accessors.html b/src/mixins/property-accessors.html index 3ad1ca08..14dc3c09 100644 --- a/src/mixins/property-accessors.html +++ b/src/mixins/property-accessors.html @@ -83,8 +83,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN * deserialized via `attributeChangedCallback` and set to the associated * property using `dash-case`-to-`camelCase` convention. * - * TODOC - * * @polymerMixin * @memberof Polymer */ diff --git a/src/mixins/property-effects.html b/src/mixins/property-effects.html index 99072fde..5a245b8b 100644 --- a/src/mixins/property-effects.html +++ b/src/mixins/property-effects.html @@ -412,6 +412,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN * @param {Element} inst The instance the effect will be run on * @param {Object} changedProps Bag of changed properties * @param {Object} oldProps Bag of previous values for changed properties + * @private */ function runComputedEffects(inst, changedProps, oldProps, hasPaths) { let computeEffects = inst.__computeEffects; @@ -1191,6 +1192,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN * * @param {HTMLElement} inst Instance to apply data to * @param {object} props Bag of instance properties to set + * @private */ function initalizeInstanceProperties(inst, props) { inst.__dataOld = inst.__dataOld || {}; @@ -1207,7 +1209,21 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN * Element class mixin that provides meta-programming for Polymer's template * binding and data observation (collectively, "property effects") system. * - * TODOC + * This mixin uses provides the following key methods for adding property effects + * to this element: + * - `_createPropertyObserver` + * - `_createMethodObserver` + * - `_createNotifyingProperty` + * - `_createReadOnlyProperty` + * - `_createReflectedProperty` + * - `_createComputedProperty` + * - `_bindTemplate` + * + * Each method creates one or more property accessors, along with metadata + * used by this mixin's implementation of `_propertiesChanged` to perform + * the property effects. These methods may be called on element instances, + * but are designed to be called on element prototypes such that the work to + * set up accessors and effect metadata are done once per element class. * * @polymerMixin * @mixes Polymer.TemplateStamp @@ -1216,18 +1232,24 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN */ Polymer.PropertyEffects = Polymer.dedupingMixin(function(superClass) { - const mixin = Polymer.TemplateStamp(Polymer.PropertyAccessors(superClass)); + const propertyEffectsBase = Polymer.TemplateStamp(Polymer.PropertyAccessors(superClass)); /** * @polymerMixinClass * @unrestricted */ - class PropertyEffects extends mixin { + class PropertyEffects extends propertyEffectsBase { get PROPERTY_EFFECT_TYPES() { return TYPES; } + /** + * Overrides `Polymer.PropertyAccessors` implementation to initialize + * additional property-effect related properties. + * + * @override + */ _initializeProperties() { super._initializeProperties(); hostStack.registerHost(this); @@ -1252,6 +1274,13 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN } } + /** + * Overrides `Polymer.PropertyAccessors` implementation to provide a + * more efficient implementation of initializing properties from + * the prototype on the instance. + * + * @override + */ _initializeProtoProperties(props) { this.__data = Object.create(props); this.__dataPending = Object.create(props); @@ -1450,6 +1479,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN * @param {Node} node The node to set a property on * @param {string} prop The property to set * @param {*} value The value to set + * @protected */ _setUnmanagedPropertyToNode(node, prop, value) { // It is a judgment call that resetting primitives is @@ -1537,7 +1567,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN } /** - * Overrides default PropertyAccessors implementation to pull the value + * Overrides default `PropertyAccessors` implementation to pull the value * to dirty check against from the `__dataTemp` cache (rather than the * normal `__data` cache) for Objects. Since the temp cache is cleared * at the end of a turn, this implementation allows side-effects of deep @@ -1563,7 +1593,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN } /** - * Overrides PropertyAccessor's default async queuing of + * Overrides `PropertyAccessor`'s default async queuing of * `_propertiesChanged`: if `__dataInitialized` is false (has not yet been * manually flushed), the function no-ops; otherwise flushes * `_propertiesChanged` synchronously. @@ -1620,6 +1650,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN * * @param {Object} props Bag of one or more key-value pairs whose key is * a property and value is the new value to set for that property. + * @public */ setProperties(props) { for (let path in props) { @@ -1633,6 +1664,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN } this._invalidateProperties(); } + /** * Overrides PropertyAccessor's default async queuing of * `_propertiesChanged`, to instead synchronously flush