diff --git a/externs/closure-types.js b/externs/closure-types.js
index 57b3925f25..f5793e1753 100644
--- a/externs/closure-types.js
+++ b/externs/closure-types.js
@@ -17,94 +17,126 @@
/**
* @interface
*/
-function Polymer_PropertyAccessors(){}
-/** @type {boolean} */
-Polymer_PropertyAccessors.prototype.__serializing;
-
-/** @type {number} */
-Polymer_PropertyAccessors.prototype.__dataCounter;
-
-/** @type {boolean} */
-Polymer_PropertyAccessors.prototype.__dataEnabled;
-
-/** @type {boolean} */
-Polymer_PropertyAccessors.prototype.__dataReady;
-
-/** @type {boolean} */
-Polymer_PropertyAccessors.prototype.__dataInvalid;
-
-/** @type {!Object} */
-Polymer_PropertyAccessors.prototype.__data;
-
-/** @type {Object} */
-Polymer_PropertyAccessors.prototype.__dataPending;
-
-/** @type {Object} */
-Polymer_PropertyAccessors.prototype.__dataOld;
-
-/** @type {Object} */
-Polymer_PropertyAccessors.prototype.__dataProto;
-
-/** @type {Object} */
-Polymer_PropertyAccessors.prototype.__dataHasAccessor;
-
-/** @type {Object} */
-Polymer_PropertyAccessors.prototype.__dataInstanceProps;
-
+function Polymer_PropertiesChanged(){}
/**
-* @param {string} name Name of attribute that changed
-* @param {?string} old Old attribute value
-* @param {?string} value New attribute value
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
*/
-Polymer_PropertyAccessors.prototype.attributeChangedCallback = function(name, old, value){};
+Polymer_PropertiesChanged.prototype._createPropertyAccessor = function(property, readOnly){};
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+*/
+Polymer_PropertiesChanged.prototype._generatePropertyAccessor = function(property, readOnly){};
/**
* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype._initializeProperties = function(){};
+Polymer_PropertiesChanged.prototype.ready = function(){};
/**
-* @param {Object} props Bag of property values that were overwritten
- when creating property accessors.
+* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype._initializeProtoProperties = function(props){};
+Polymer_PropertiesChanged.prototype._initializeProperties = function(){};
/**
* @param {Object} props Bag of property values that were overwritten
when creating property accessors.
*/
-Polymer_PropertyAccessors.prototype._initializeInstanceProperties = function(props){};
+Polymer_PropertiesChanged.prototype._initializeInstanceProperties = function(props){};
/**
-* @param {string} attribute Name of attribute to ensure is set.
-* @param {string} value of the attribute.
+* @param {string} property Name of the property
+* @param {*} value Value to set
*/
-Polymer_PropertyAccessors.prototype._ensureAttribute = function(attribute, value){};
+Polymer_PropertiesChanged.prototype._setProperty = function(property, value){};
/**
-* @param {string} attribute Name of attribute to deserialize.
-* @param {?string} value of the attribute.
-* @param {*=} type type to deserialize to.
+* @param {string} property Name of property
+* @return {*}
*/
-Polymer_PropertyAccessors.prototype._attributeToProperty = function(attribute, value, type){};
+Polymer_PropertiesChanged.prototype._getProperty = function(property){};
/**
-* @param {string} property Property name to reflect.
-* @param {string=} attribute Attribute name to reflect.
-* @param {*=} value Property value to refect.
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @return {boolean}
*/
-Polymer_PropertyAccessors.prototype._propertyToAttribute = function(property, attribute, value){};
+Polymer_PropertiesChanged.prototype._setPendingProperty = function(property, value){};
/**
-* @param {Element} node Element to set attribute to.
-* @param {*} value Value to serialize.
-* @param {string} attribute Attribute name to serialize to.
+* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype._valueToNodeAttribute = function(node, value, attribute){};
+Polymer_PropertiesChanged.prototype._invalidateProperties = function(){};
/**
-* @param {*} value Property value to serialize.
-* @return {(string|undefined)}
+* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype._serializeValue = function(value){};
+Polymer_PropertiesChanged.prototype._validateProperties = function(){};
/**
-* @param {?string} value Attribute value to deserialize.
+* @return {undefined}
+*/
+Polymer_PropertiesChanged.prototype._enableProperties = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesChanged.prototype._flushProperties = function(){};
+/**
+* @param {!Object} currentProps Bag of all current accessor values
+* @param {!Object} changedProps Bag of properties changed since the last
+ call to `_propertiesChanged`
+* @param {!Object} oldProps Bag of previous values for each property
+ in `changedProps`
+*/
+Polymer_PropertiesChanged.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+/**
+* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
+* @return {boolean}
+*/
+Polymer_PropertiesChanged.prototype._shouldPropertyChange = function(property, value, old){};
+/**
+* @param {string} name Name of attribute that changed
+* @param {?string} old Old attribute value
+* @param {?string} value New attribute value
+*/
+Polymer_PropertiesChanged.prototype.attributeChangedCallback = function(name, old, value){};
+/**
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to, defaults to the value
+returned from `_typeForProperty`
+*/
+Polymer_PropertiesChanged.prototype._attributeToProperty = function(attribute, value, type){};
+/**
+* @param {?string} value Value to deserialize.
* @param {*=} type Type to deserialize the string to.
* @return {*}
*/
-Polymer_PropertyAccessors.prototype._deserializeValue = function(value, type){};
+Polymer_PropertiesChanged.prototype._deserializeValue = function(value, type){};
+/**
+* @param {string} attribute Attribute to convert
+* @return {string}
+*/
+Polymer_PropertiesChanged.prototype._propertyForAttribute = function(attribute){};
+/**
+* @param {string} property Property to convert
+* @return {string}
+*/
+Polymer_PropertiesChanged.prototype._attributeForProperty = function(property){};
+/**
+* @param {string} name Name of property
+*/
+Polymer_PropertiesChanged.prototype._typeForProperty = function(name){};
+/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_PropertiesChanged.createProperties = function(props){};
+/**
+* @interface
+* @extends {Polymer_PropertiesChanged}
+*/
+function Polymer_PropertyAccessors(){}
+/** @type {boolean} */
+Polymer_PropertyAccessors.prototype.__serializing;
+
+/** @type {number} */
+Polymer_PropertyAccessors.prototype.__dataCounter;
+
/**
* @param {string} property Name of the property
* @param {boolean=} readOnly When true, no setter is created; the
@@ -112,42 +144,62 @@ Polymer_PropertyAccessors.prototype._deserializeValue = function(value, type){};
*/
Polymer_PropertyAccessors.prototype._createPropertyAccessor = function(property, readOnly){};
/**
-* @param {string} property Property name
-* @return {boolean}
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+
+When calling on a prototype, any overwritten values are saved in
+`__dataProto`, and it is up to the subclasser to decide how/when
+to set those properties back into the accessor. When calling on an
+instance, the overwritten value is set via `_setPendingProperty`,
+and the user should call `_invalidateProperties` or `_flushProperties`
+for the values to take effect.
*/
-Polymer_PropertyAccessors.prototype._hasAccessor = function(property){};
+Polymer_PropertyAccessors.prototype._generatePropertyAccessor = function(property, readOnly){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertyAccessors.prototype.ready = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertyAccessors.prototype._initializeProperties = function(){};
+/**
+* @param {Object} props Bag of property values that were overwritten
+ when creating property accessors.
+*/
+Polymer_PropertyAccessors.prototype._initializeInstanceProperties = function(props){};
/**
* @param {string} property Name of the property
* @param {*} value Value to set
*/
Polymer_PropertyAccessors.prototype._setProperty = function(property, value){};
/**
+* @param {string} property Name of property
+* @return {*}
+*/
+Polymer_PropertyAccessors.prototype._getProperty = function(property){};
+/**
* @param {string} property Name of the property
* @param {*} value Value to set
* @return {boolean}
*/
Polymer_PropertyAccessors.prototype._setPendingProperty = function(property, value){};
/**
-* @param {string} prop Property name
-* @return {boolean}
-*/
-Polymer_PropertyAccessors.prototype._isPropertyPending = function(prop){};
-/**
* @return {undefined}
*/
Polymer_PropertyAccessors.prototype._invalidateProperties = function(){};
/**
* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype._enableProperties = function(){};
+Polymer_PropertyAccessors.prototype._validateProperties = function(){};
/**
* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype._flushProperties = function(){};
+Polymer_PropertyAccessors.prototype._enableProperties = function(){};
/**
* @return {undefined}
*/
-Polymer_PropertyAccessors.prototype.ready = function(){};
+Polymer_PropertyAccessors.prototype._flushProperties = function(){};
/**
* @param {!Object} currentProps Bag of all current accessor values
* @param {!Object} changedProps Bag of properties changed since the last
@@ -164,6 +216,79 @@ Polymer_PropertyAccessors.prototype._propertiesChanged = function(currentProps,
*/
Polymer_PropertyAccessors.prototype._shouldPropertyChange = function(property, value, old){};
/**
+* @param {string} name Name of attribute that changed
+* @param {?string} old Old attribute value
+* @param {?string} value New attribute value
+*/
+Polymer_PropertyAccessors.prototype.attributeChangedCallback = function(name, old, value){};
+/**
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to.
+*/
+Polymer_PropertyAccessors.prototype._attributeToProperty = function(attribute, value, type){};
+/**
+* @param {?string} value Attribute value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
+*/
+Polymer_PropertyAccessors.prototype._deserializeValue = function(value, type){};
+/**
+* @param {string} attribute Attribute to convert
+* @return {string}
+*/
+Polymer_PropertyAccessors.prototype._propertyForAttribute = function(attribute){};
+/**
+* @param {string} property Property to convert
+* @return {string}
+*/
+Polymer_PropertyAccessors.prototype._attributeForProperty = function(property){};
+/**
+* @param {string} name Name of property
+*/
+Polymer_PropertyAccessors.prototype._typeForProperty = function(name){};
+/**
+* @param {Object} props Bag of property values that were overwritten
+ when creating property accessors.
+*/
+Polymer_PropertyAccessors.prototype._initializeProtoProperties = function(props){};
+/**
+* @param {string} attribute Name of attribute to ensure is set.
+* @param {string} value of the attribute.
+*/
+Polymer_PropertyAccessors.prototype._ensureAttribute = function(attribute, value){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect.
+* @param {*=} value Property value to refect.
+*/
+Polymer_PropertyAccessors.prototype._propertyToAttribute = function(property, attribute, value){};
+/**
+* @param {Element} node Element to set attribute to.
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
+*/
+Polymer_PropertyAccessors.prototype._valueToNodeAttribute = function(node, value, attribute){};
+/**
+* @param {*} value Property value to serialize.
+* @return {(string|undefined)}
+*/
+Polymer_PropertyAccessors.prototype._serializeValue = function(value){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyAccessors.prototype._hasAccessor = function(property){};
+/**
+* @param {string} prop Property name
+* @return {boolean}
+*/
+Polymer_PropertyAccessors.prototype._isPropertyPending = function(prop){};
+/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_PropertyAccessors.createProperties = function(props){};
+/**
*/
Polymer_PropertyAccessors.createPropertiesForAttributes = function(){};
/**
@@ -260,15 +385,6 @@ function Polymer_PropertyEffects(){}
/** @type {number} */
Polymer_PropertyEffects.prototype.__dataCounter;
-/** @type {!Object} */
-Polymer_PropertyEffects.prototype.__data;
-
-/** @type {!Object} */
-Polymer_PropertyEffects.prototype.__dataPending;
-
-/** @type {!Object} */
-Polymer_PropertyEffects.prototype.__dataOld;
-
/** @type {boolean} */
Polymer_PropertyEffects.prototype.__dataClientsReady;
@@ -296,6 +412,15 @@ Polymer_PropertyEffects.prototype.__dataTemp;
/** @type {boolean} */
Polymer_PropertyEffects.prototype.__dataClientsInitialized;
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__data;
+
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__dataPending;
+
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__dataOld;
+
/** @type {Object} */
Polymer_PropertyEffects.prototype.__computeEffects;
@@ -345,115 +470,150 @@ Polymer_PropertyEffects.prototype._addEventListenerToNode = function(node, event
*/
Polymer_PropertyEffects.prototype._removeEventListenerFromNode = function(node, eventName, handler){};
/**
-* @param {string} name Name of attribute that changed
-* @param {?string} old Old attribute value
-* @param {?string} value New attribute value
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
*/
-Polymer_PropertyEffects.prototype.attributeChangedCallback = function(name, old, value){};
+Polymer_PropertyEffects.prototype._createPropertyAccessor = function(property, readOnly){};
/**
-* @return {undefined}
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+
+When calling on a prototype, any overwritten values are saved in
+`__dataProto`, and it is up to the subclasser to decide how/when
+to set those properties back into the accessor. When calling on an
+instance, the overwritten value is set via `_setPendingProperty`,
+and the user should call `_invalidateProperties` or `_flushProperties`
+for the values to take effect.
*/
-Polymer_PropertyEffects.prototype._initializeProperties = function(){};
+Polymer_PropertyEffects.prototype._generatePropertyAccessor = function(property, readOnly){};
/**
* @override
-* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_PropertyEffects.prototype._initializeProtoProperties = function(props){};
+Polymer_PropertyEffects.prototype.ready = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertyEffects.prototype._initializeProperties = function(){};
/**
* @override
* @param {Object} props Properties to initialize on the instance
*/
Polymer_PropertyEffects.prototype._initializeInstanceProperties = function(props){};
/**
-* @param {string} attribute Name of attribute to ensure is set.
-* @param {string} value of the attribute.
+* @override
*/
-Polymer_PropertyEffects.prototype._ensureAttribute = function(attribute, value){};
+Polymer_PropertyEffects.prototype._setProperty = function(property, value){};
/**
-* @param {string} attribute Name of attribute to deserialize.
-* @param {?string} value of the attribute.
-* @param {*=} type type to deserialize to.
+* @param {string} property Name of property
+* @return {*}
*/
-Polymer_PropertyEffects.prototype._attributeToProperty = function(attribute, value, type){};
+Polymer_PropertyEffects.prototype._getProperty = function(property){};
/**
-* @param {string} property Property name to reflect.
-* @param {string=} attribute Attribute name to reflect.
-* @param {*=} value Property value to refect.
+* @override
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @param {boolean=} shouldNotify True if property should fire notification
+ event (applies only for `notify: true` properties)
+* @return {boolean}
*/
-Polymer_PropertyEffects.prototype._propertyToAttribute = function(property, attribute, value){};
+Polymer_PropertyEffects.prototype._setPendingProperty = function(property, value, shouldNotify){};
/**
-* @param {Element} node Element to set attribute to.
-* @param {*} value Value to serialize.
-* @param {string} attribute Attribute name to serialize to.
+* @override
*/
-Polymer_PropertyEffects.prototype._valueToNodeAttribute = function(node, value, attribute){};
+Polymer_PropertyEffects.prototype._invalidateProperties = function(){};
/**
-* @param {*} value Property value to serialize.
-* @return {(string|undefined)}
+* @return {undefined}
*/
-Polymer_PropertyEffects.prototype._serializeValue = function(value){};
+Polymer_PropertyEffects.prototype._validateProperties = function(){};
/**
-* @param {?string} value Attribute value to deserialize.
-* @param {*=} type Type to deserialize the string to.
-* @return {*}
+* @return {undefined}
*/
-Polymer_PropertyEffects.prototype._deserializeValue = function(value, type){};
+Polymer_PropertyEffects.prototype._enableProperties = function(){};
/**
-* @param {string} property Name of the property
-* @param {boolean=} readOnly When true, no setter is created; the
- protected `_setProperty` function must be used to set the property
+* @return {undefined}
*/
-Polymer_PropertyEffects.prototype._createPropertyAccessor = function(property, readOnly){};
+Polymer_PropertyEffects.prototype._flushProperties = function(){};
+/**
+* @override
+*/
+Polymer_PropertyEffects.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
/**
* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
* @return {boolean}
*/
-Polymer_PropertyEffects.prototype._hasAccessor = function(property){};
+Polymer_PropertyEffects.prototype._shouldPropertyChange = function(property, value, old){};
/**
-* @override
+* @param {string} name Name of attribute that changed
+* @param {?string} old Old attribute value
+* @param {?string} value New attribute value
*/
-Polymer_PropertyEffects.prototype._setProperty = function(property, value){};
+Polymer_PropertyEffects.prototype.attributeChangedCallback = function(name, old, value){};
/**
-* @override
-* @param {string} property Name of the property
-* @param {*} value Value to set
-* @param {boolean=} shouldNotify True if property should fire notification
- event (applies only for `notify: true` properties)
-* @return {boolean}
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to.
*/
-Polymer_PropertyEffects.prototype._setPendingProperty = function(property, value, shouldNotify){};
+Polymer_PropertyEffects.prototype._attributeToProperty = function(attribute, value, type){};
/**
-* @param {string} prop Property name
-* @return {boolean}
+* @param {?string} value Attribute value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
*/
-Polymer_PropertyEffects.prototype._isPropertyPending = function(prop){};
+Polymer_PropertyEffects.prototype._deserializeValue = function(value, type){};
/**
-* @override
+* @param {string} attribute Attribute to convert
+* @return {string}
*/
-Polymer_PropertyEffects.prototype._invalidateProperties = function(){};
+Polymer_PropertyEffects.prototype._propertyForAttribute = function(attribute){};
/**
-* @return {undefined}
+* @param {string} property Property to convert
+* @return {string}
*/
-Polymer_PropertyEffects.prototype._enableProperties = function(){};
+Polymer_PropertyEffects.prototype._attributeForProperty = function(property){};
/**
-* @return {undefined}
+* @param {string} name Name of property
*/
-Polymer_PropertyEffects.prototype._flushProperties = function(){};
+Polymer_PropertyEffects.prototype._typeForProperty = function(name){};
/**
* @override
+* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_PropertyEffects.prototype.ready = function(){};
+Polymer_PropertyEffects.prototype._initializeProtoProperties = function(props){};
/**
-* @override
+* @param {string} attribute Name of attribute to ensure is set.
+* @param {string} value of the attribute.
*/
-Polymer_PropertyEffects.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+Polymer_PropertyEffects.prototype._ensureAttribute = function(attribute, value){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect.
+* @param {*=} value Property value to refect.
+*/
+Polymer_PropertyEffects.prototype._propertyToAttribute = function(property, attribute, value){};
+/**
+* @param {Element} node Element to set attribute to.
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
+*/
+Polymer_PropertyEffects.prototype._valueToNodeAttribute = function(node, value, attribute){};
+/**
+* @param {*} value Property value to serialize.
+* @return {(string|undefined)}
+*/
+Polymer_PropertyEffects.prototype._serializeValue = function(value){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._hasAccessor = function(property){};
/**
-* @param {string} property Property name
-* @param {*} value New property value
-* @param {*} old Previous property value
+* @param {string} prop Property name
* @return {boolean}
*/
-Polymer_PropertyEffects.prototype._shouldPropertyChange = function(property, value, old){};
+Polymer_PropertyEffects.prototype._isPropertyPending = function(prop){};
/**
* @param {string} property Property that should trigger the effect
* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
@@ -730,6 +890,10 @@ Polymer_PropertyEffects._parseTemplateNodeAttribute = function(node, templateInf
*/
Polymer_PropertyEffects._contentForTemplate = function(template){};
/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_PropertyEffects.createProperties = function(props){};
+/**
*/
Polymer_PropertyEffects.createPropertiesForAttributes = function(){};
/**
@@ -852,116 +1016,151 @@ Polymer_ElementMixin.prototype._addEventListenerToNode = function(node, eventNam
*/
Polymer_ElementMixin.prototype._removeEventListenerFromNode = function(node, eventName, handler){};
/**
-* @override
-* @param {string} name Name of attribute.
-* @param {?string} old Old value of attribute.
-* @param {?string} value Current value of attribute.
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
*/
-Polymer_ElementMixin.prototype.attributeChangedCallback = function(name, old, value){};
+Polymer_ElementMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+
+When calling on a prototype, any overwritten values are saved in
+`__dataProto`, and it is up to the subclasser to decide how/when
+to set those properties back into the accessor. When calling on an
+instance, the overwritten value is set via `_setPendingProperty`,
+and the user should call `_invalidateProperties` or `_flushProperties`
+for the values to take effect.
+*/
+Polymer_ElementMixin.prototype._generatePropertyAccessor = function(property, readOnly){};
/**
* @override
*/
-Polymer_ElementMixin.prototype._initializeProperties = function(){};
+Polymer_ElementMixin.prototype.ready = function(){};
/**
* @override
-* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_ElementMixin.prototype._initializeProtoProperties = function(props){};
+Polymer_ElementMixin.prototype._initializeProperties = function(){};
/**
* @override
* @param {Object} props Properties to initialize on the instance
*/
Polymer_ElementMixin.prototype._initializeInstanceProperties = function(props){};
/**
-* @param {string} attribute Name of attribute to ensure is set.
-* @param {string} value of the attribute.
+* @override
*/
-Polymer_ElementMixin.prototype._ensureAttribute = function(attribute, value){};
+Polymer_ElementMixin.prototype._setProperty = function(property, value){};
/**
-* @param {string} attribute Name of attribute to deserialize.
-* @param {?string} value of the attribute.
-* @param {*=} type type to deserialize to.
+* @param {string} property Name of property
+* @return {*}
*/
-Polymer_ElementMixin.prototype._attributeToProperty = function(attribute, value, type){};
+Polymer_ElementMixin.prototype._getProperty = function(property){};
/**
-* @param {string} property Property name to reflect.
-* @param {string=} attribute Attribute name to reflect.
-* @param {*=} value Property value to refect.
+* @override
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @param {boolean=} shouldNotify True if property should fire notification
+ event (applies only for `notify: true` properties)
+* @return {boolean}
*/
-Polymer_ElementMixin.prototype._propertyToAttribute = function(property, attribute, value){};
+Polymer_ElementMixin.prototype._setPendingProperty = function(property, value, shouldNotify){};
/**
-* @param {Element} node Element to set attribute to.
-* @param {*} value Value to serialize.
-* @param {string} attribute Attribute name to serialize to.
+* @override
*/
-Polymer_ElementMixin.prototype._valueToNodeAttribute = function(node, value, attribute){};
+Polymer_ElementMixin.prototype._invalidateProperties = function(){};
/**
-* @param {*} value Property value to serialize.
-* @return {(string|undefined)}
+* @return {undefined}
*/
-Polymer_ElementMixin.prototype._serializeValue = function(value){};
+Polymer_ElementMixin.prototype._validateProperties = function(){};
/**
-* @param {?string} value Attribute value to deserialize.
-* @param {*=} type Type to deserialize the string to.
-* @return {*}
+* @return {undefined}
*/
-Polymer_ElementMixin.prototype._deserializeValue = function(value, type){};
+Polymer_ElementMixin.prototype._enableProperties = function(){};
/**
-* @param {string} property Name of the property
-* @param {boolean=} readOnly When true, no setter is created; the
- protected `_setProperty` function must be used to set the property
+* @return {undefined}
*/
-Polymer_ElementMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+Polymer_ElementMixin.prototype._flushProperties = function(){};
+/**
+* @override
+*/
+Polymer_ElementMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
/**
* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
* @return {boolean}
*/
-Polymer_ElementMixin.prototype._hasAccessor = function(property){};
+Polymer_ElementMixin.prototype._shouldPropertyChange = function(property, value, old){};
/**
* @override
+* @param {string} name Name of attribute.
+* @param {?string} old Old value of attribute.
+* @param {?string} value Current value of attribute.
*/
-Polymer_ElementMixin.prototype._setProperty = function(property, value){};
+Polymer_ElementMixin.prototype.attributeChangedCallback = function(name, old, value){};
/**
-* @override
-* @param {string} property Name of the property
-* @param {*} value Value to set
-* @param {boolean=} shouldNotify True if property should fire notification
- event (applies only for `notify: true` properties)
-* @return {boolean}
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to.
*/
-Polymer_ElementMixin.prototype._setPendingProperty = function(property, value, shouldNotify){};
+Polymer_ElementMixin.prototype._attributeToProperty = function(attribute, value, type){};
/**
-* @param {string} prop Property name
-* @return {boolean}
+* @param {?string} value Attribute value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
*/
-Polymer_ElementMixin.prototype._isPropertyPending = function(prop){};
+Polymer_ElementMixin.prototype._deserializeValue = function(value, type){};
/**
-* @override
+* @param {string} attribute Attribute to convert
+* @return {string}
*/
-Polymer_ElementMixin.prototype._invalidateProperties = function(){};
+Polymer_ElementMixin.prototype._propertyForAttribute = function(attribute){};
/**
-* @return {undefined}
+* @param {string} property Property to convert
+* @return {string}
*/
-Polymer_ElementMixin.prototype._enableProperties = function(){};
+Polymer_ElementMixin.prototype._attributeForProperty = function(property){};
/**
-* @return {undefined}
+* @param {string} name Name of property
*/
-Polymer_ElementMixin.prototype._flushProperties = function(){};
+Polymer_ElementMixin.prototype._typeForProperty = function(name){};
/**
* @override
+* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_ElementMixin.prototype.ready = function(){};
+Polymer_ElementMixin.prototype._initializeProtoProperties = function(props){};
/**
-* @override
+* @param {string} attribute Name of attribute to ensure is set.
+* @param {string} value of the attribute.
*/
-Polymer_ElementMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+Polymer_ElementMixin.prototype._ensureAttribute = function(attribute, value){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect.
+* @param {*=} value Property value to refect.
+*/
+Polymer_ElementMixin.prototype._propertyToAttribute = function(property, attribute, value){};
+/**
+* @param {Element} node Element to set attribute to.
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
+*/
+Polymer_ElementMixin.prototype._valueToNodeAttribute = function(node, value, attribute){};
+/**
+* @param {*} value Property value to serialize.
+* @return {(string|undefined)}
+*/
+Polymer_ElementMixin.prototype._serializeValue = function(value){};
/**
* @param {string} property Property name
-* @param {*} value New property value
-* @param {*} old Previous property value
* @return {boolean}
*/
-Polymer_ElementMixin.prototype._shouldPropertyChange = function(property, value, old){};
+Polymer_ElementMixin.prototype._hasAccessor = function(property){};
+/**
+* @param {string} prop Property name
+* @return {boolean}
+*/
+Polymer_ElementMixin.prototype._isPropertyPending = function(prop){};
/**
* @param {string} property Property that should trigger the effect
* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
@@ -1261,6 +1460,10 @@ Polymer_ElementMixin._parseTemplateNodeAttribute = function(node, templateInfo,
*/
Polymer_ElementMixin._contentForTemplate = function(template){};
/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_ElementMixin.createProperties = function(props){};
+/**
*/
Polymer_ElementMixin.createPropertiesForAttributes = function(){};
/**
@@ -1394,116 +1597,151 @@ Polymer_LegacyElementMixin.prototype._addEventListenerToNode = function(node, ev
*/
Polymer_LegacyElementMixin.prototype._removeEventListenerFromNode = function(node, eventName, handler){};
/**
-* @override
-* @param {string} name Name of attribute.
-* @param {?string} old Old value of attribute.
-* @param {?string} value Current value of attribute.
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
*/
-Polymer_LegacyElementMixin.prototype.attributeChangedCallback = function(name, old, value){};
+Polymer_LegacyElementMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+
+When calling on a prototype, any overwritten values are saved in
+`__dataProto`, and it is up to the subclasser to decide how/when
+to set those properties back into the accessor. When calling on an
+instance, the overwritten value is set via `_setPendingProperty`,
+and the user should call `_invalidateProperties` or `_flushProperties`
+for the values to take effect.
+*/
+Polymer_LegacyElementMixin.prototype._generatePropertyAccessor = function(property, readOnly){};
/**
* @override
*/
-Polymer_LegacyElementMixin.prototype._initializeProperties = function(){};
+Polymer_LegacyElementMixin.prototype.ready = function(){};
/**
* @override
-* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_LegacyElementMixin.prototype._initializeProtoProperties = function(props){};
+Polymer_LegacyElementMixin.prototype._initializeProperties = function(){};
/**
* @override
* @param {Object} props Properties to initialize on the instance
*/
Polymer_LegacyElementMixin.prototype._initializeInstanceProperties = function(props){};
/**
-* @param {string} attribute Name of attribute to ensure is set.
-* @param {string} value of the attribute.
+* @override
*/
-Polymer_LegacyElementMixin.prototype._ensureAttribute = function(attribute, value){};
+Polymer_LegacyElementMixin.prototype._setProperty = function(property, value){};
/**
-* @param {string} attribute Name of attribute to deserialize.
-* @param {?string} value of the attribute.
-* @param {*=} type type to deserialize to.
+* @param {string} property Name of property
+* @return {*}
*/
-Polymer_LegacyElementMixin.prototype._attributeToProperty = function(attribute, value, type){};
+Polymer_LegacyElementMixin.prototype._getProperty = function(property){};
/**
-* @param {string} property Property name to reflect.
-* @param {string=} attribute Attribute name to reflect.
-* @param {*=} value Property value to refect.
+* @override
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @param {boolean=} shouldNotify True if property should fire notification
+ event (applies only for `notify: true` properties)
+* @return {boolean}
*/
-Polymer_LegacyElementMixin.prototype._propertyToAttribute = function(property, attribute, value){};
+Polymer_LegacyElementMixin.prototype._setPendingProperty = function(property, value, shouldNotify){};
/**
-* @param {Element} node Element to set attribute to.
-* @param {*} value Value to serialize.
-* @param {string} attribute Attribute name to serialize to.
+* @override
*/
-Polymer_LegacyElementMixin.prototype._valueToNodeAttribute = function(node, value, attribute){};
+Polymer_LegacyElementMixin.prototype._invalidateProperties = function(){};
/**
-* @param {*} value Property value to serialize.
-* @return {(string|undefined)}
+* @return {undefined}
*/
-Polymer_LegacyElementMixin.prototype._serializeValue = function(value){};
+Polymer_LegacyElementMixin.prototype._validateProperties = function(){};
/**
-* @param {?string} value Attribute value to deserialize.
-* @param {*=} type Type to deserialize the string to.
-* @return {*}
+* @return {undefined}
*/
-Polymer_LegacyElementMixin.prototype._deserializeValue = function(value, type){};
+Polymer_LegacyElementMixin.prototype._enableProperties = function(){};
/**
-* @param {string} property Name of the property
-* @param {boolean=} readOnly When true, no setter is created; the
- protected `_setProperty` function must be used to set the property
+* @return {undefined}
*/
-Polymer_LegacyElementMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+Polymer_LegacyElementMixin.prototype._flushProperties = function(){};
+/**
+* @override
+*/
+Polymer_LegacyElementMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
/**
* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
* @return {boolean}
*/
-Polymer_LegacyElementMixin.prototype._hasAccessor = function(property){};
+Polymer_LegacyElementMixin.prototype._shouldPropertyChange = function(property, value, old){};
/**
* @override
+* @param {string} name Name of attribute.
+* @param {?string} old Old value of attribute.
+* @param {?string} value Current value of attribute.
*/
-Polymer_LegacyElementMixin.prototype._setProperty = function(property, value){};
+Polymer_LegacyElementMixin.prototype.attributeChangedCallback = function(name, old, value){};
/**
-* @override
-* @param {string} property Name of the property
-* @param {*} value Value to set
-* @param {boolean=} shouldNotify True if property should fire notification
- event (applies only for `notify: true` properties)
-* @return {boolean}
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to.
*/
-Polymer_LegacyElementMixin.prototype._setPendingProperty = function(property, value, shouldNotify){};
+Polymer_LegacyElementMixin.prototype._attributeToProperty = function(attribute, value, type){};
/**
-* @param {string} prop Property name
-* @return {boolean}
+* @param {?string} value Attribute value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
*/
-Polymer_LegacyElementMixin.prototype._isPropertyPending = function(prop){};
+Polymer_LegacyElementMixin.prototype._deserializeValue = function(value, type){};
+/**
+* @param {string} attribute Attribute to convert
+* @return {string}
+*/
+Polymer_LegacyElementMixin.prototype._propertyForAttribute = function(attribute){};
+/**
+* @param {string} property Property to convert
+* @return {string}
+*/
+Polymer_LegacyElementMixin.prototype._attributeForProperty = function(property){};
+/**
+* @param {string} name Name of property
+*/
+Polymer_LegacyElementMixin.prototype._typeForProperty = function(name){};
/**
* @override
+* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_LegacyElementMixin.prototype._invalidateProperties = function(){};
+Polymer_LegacyElementMixin.prototype._initializeProtoProperties = function(props){};
/**
-* @return {undefined}
+* @param {string} attribute Name of attribute to ensure is set.
+* @param {string} value of the attribute.
+*/
+Polymer_LegacyElementMixin.prototype._ensureAttribute = function(attribute, value){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect.
+* @param {*=} value Property value to refect.
*/
-Polymer_LegacyElementMixin.prototype._enableProperties = function(){};
+Polymer_LegacyElementMixin.prototype._propertyToAttribute = function(property, attribute, value){};
/**
-* @return {undefined}
+* @param {Element} node Element to set attribute to.
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
*/
-Polymer_LegacyElementMixin.prototype._flushProperties = function(){};
+Polymer_LegacyElementMixin.prototype._valueToNodeAttribute = function(node, value, attribute){};
/**
-* @override
+* @param {*} value Property value to serialize.
+* @return {(string|undefined)}
*/
-Polymer_LegacyElementMixin.prototype.ready = function(){};
+Polymer_LegacyElementMixin.prototype._serializeValue = function(value){};
/**
-* @override
+* @param {string} property Property name
+* @return {boolean}
*/
-Polymer_LegacyElementMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+Polymer_LegacyElementMixin.prototype._hasAccessor = function(property){};
/**
-* @param {string} property Property name
-* @param {*} value New property value
-* @param {*} old Previous property value
+* @param {string} prop Property name
* @return {boolean}
*/
-Polymer_LegacyElementMixin.prototype._shouldPropertyChange = function(property, value, old){};
+Polymer_LegacyElementMixin.prototype._isPropertyPending = function(prop){};
/**
* @param {string} property Property that should trigger the effect
* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
@@ -2096,6 +2334,10 @@ Polymer_LegacyElementMixin._parseTemplateNodeAttribute = function(node, template
*/
Polymer_LegacyElementMixin._contentForTemplate = function(template){};
/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_LegacyElementMixin.createProperties = function(props){};
+/**
*/
Polymer_LegacyElementMixin.createPropertiesForAttributes = function(){};
/**
@@ -2243,116 +2485,151 @@ Polymer_ArraySelectorMixin.prototype._addEventListenerToNode = function(node, ev
*/
Polymer_ArraySelectorMixin.prototype._removeEventListenerFromNode = function(node, eventName, handler){};
/**
-* @override
-* @param {string} name Name of attribute.
-* @param {?string} old Old value of attribute.
-* @param {?string} value Current value of attribute.
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
*/
-Polymer_ArraySelectorMixin.prototype.attributeChangedCallback = function(name, old, value){};
+Polymer_ArraySelectorMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+
+When calling on a prototype, any overwritten values are saved in
+`__dataProto`, and it is up to the subclasser to decide how/when
+to set those properties back into the accessor. When calling on an
+instance, the overwritten value is set via `_setPendingProperty`,
+and the user should call `_invalidateProperties` or `_flushProperties`
+for the values to take effect.
+*/
+Polymer_ArraySelectorMixin.prototype._generatePropertyAccessor = function(property, readOnly){};
/**
* @override
*/
-Polymer_ArraySelectorMixin.prototype._initializeProperties = function(){};
+Polymer_ArraySelectorMixin.prototype.ready = function(){};
/**
* @override
-* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_ArraySelectorMixin.prototype._initializeProtoProperties = function(props){};
+Polymer_ArraySelectorMixin.prototype._initializeProperties = function(){};
/**
* @override
* @param {Object} props Properties to initialize on the instance
*/
Polymer_ArraySelectorMixin.prototype._initializeInstanceProperties = function(props){};
/**
-* @param {string} attribute Name of attribute to ensure is set.
-* @param {string} value of the attribute.
+* @override
*/
-Polymer_ArraySelectorMixin.prototype._ensureAttribute = function(attribute, value){};
+Polymer_ArraySelectorMixin.prototype._setProperty = function(property, value){};
/**
-* @param {string} attribute Name of attribute to deserialize.
-* @param {?string} value of the attribute.
-* @param {*=} type type to deserialize to.
+* @param {string} property Name of property
+* @return {*}
*/
-Polymer_ArraySelectorMixin.prototype._attributeToProperty = function(attribute, value, type){};
+Polymer_ArraySelectorMixin.prototype._getProperty = function(property){};
/**
-* @param {string} property Property name to reflect.
-* @param {string=} attribute Attribute name to reflect.
-* @param {*=} value Property value to refect.
+* @override
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @param {boolean=} shouldNotify True if property should fire notification
+ event (applies only for `notify: true` properties)
+* @return {boolean}
*/
-Polymer_ArraySelectorMixin.prototype._propertyToAttribute = function(property, attribute, value){};
+Polymer_ArraySelectorMixin.prototype._setPendingProperty = function(property, value, shouldNotify){};
/**
-* @param {Element} node Element to set attribute to.
-* @param {*} value Value to serialize.
-* @param {string} attribute Attribute name to serialize to.
+* @override
*/
-Polymer_ArraySelectorMixin.prototype._valueToNodeAttribute = function(node, value, attribute){};
+Polymer_ArraySelectorMixin.prototype._invalidateProperties = function(){};
/**
-* @param {*} value Property value to serialize.
-* @return {(string|undefined)}
+* @return {undefined}
*/
-Polymer_ArraySelectorMixin.prototype._serializeValue = function(value){};
+Polymer_ArraySelectorMixin.prototype._validateProperties = function(){};
/**
-* @param {?string} value Attribute value to deserialize.
-* @param {*=} type Type to deserialize the string to.
-* @return {*}
+* @return {undefined}
*/
-Polymer_ArraySelectorMixin.prototype._deserializeValue = function(value, type){};
+Polymer_ArraySelectorMixin.prototype._enableProperties = function(){};
/**
-* @param {string} property Name of the property
-* @param {boolean=} readOnly When true, no setter is created; the
- protected `_setProperty` function must be used to set the property
+* @return {undefined}
*/
-Polymer_ArraySelectorMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+Polymer_ArraySelectorMixin.prototype._flushProperties = function(){};
+/**
+* @override
+*/
+Polymer_ArraySelectorMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
/**
* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
* @return {boolean}
*/
-Polymer_ArraySelectorMixin.prototype._hasAccessor = function(property){};
+Polymer_ArraySelectorMixin.prototype._shouldPropertyChange = function(property, value, old){};
/**
* @override
+* @param {string} name Name of attribute.
+* @param {?string} old Old value of attribute.
+* @param {?string} value Current value of attribute.
*/
-Polymer_ArraySelectorMixin.prototype._setProperty = function(property, value){};
+Polymer_ArraySelectorMixin.prototype.attributeChangedCallback = function(name, old, value){};
/**
-* @override
-* @param {string} property Name of the property
-* @param {*} value Value to set
-* @param {boolean=} shouldNotify True if property should fire notification
- event (applies only for `notify: true` properties)
-* @return {boolean}
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to.
*/
-Polymer_ArraySelectorMixin.prototype._setPendingProperty = function(property, value, shouldNotify){};
+Polymer_ArraySelectorMixin.prototype._attributeToProperty = function(attribute, value, type){};
/**
-* @param {string} prop Property name
-* @return {boolean}
+* @param {?string} value Attribute value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
*/
-Polymer_ArraySelectorMixin.prototype._isPropertyPending = function(prop){};
+Polymer_ArraySelectorMixin.prototype._deserializeValue = function(value, type){};
/**
-* @override
+* @param {string} attribute Attribute to convert
+* @return {string}
*/
-Polymer_ArraySelectorMixin.prototype._invalidateProperties = function(){};
+Polymer_ArraySelectorMixin.prototype._propertyForAttribute = function(attribute){};
/**
-* @return {undefined}
+* @param {string} property Property to convert
+* @return {string}
*/
-Polymer_ArraySelectorMixin.prototype._enableProperties = function(){};
+Polymer_ArraySelectorMixin.prototype._attributeForProperty = function(property){};
/**
-* @return {undefined}
+* @param {string} name Name of property
*/
-Polymer_ArraySelectorMixin.prototype._flushProperties = function(){};
+Polymer_ArraySelectorMixin.prototype._typeForProperty = function(name){};
/**
* @override
+* @param {Object} props Properties to initialize on the prototype
*/
-Polymer_ArraySelectorMixin.prototype.ready = function(){};
+Polymer_ArraySelectorMixin.prototype._initializeProtoProperties = function(props){};
/**
-* @override
+* @param {string} attribute Name of attribute to ensure is set.
+* @param {string} value of the attribute.
*/
-Polymer_ArraySelectorMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+Polymer_ArraySelectorMixin.prototype._ensureAttribute = function(attribute, value){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect.
+* @param {*=} value Property value to refect.
+*/
+Polymer_ArraySelectorMixin.prototype._propertyToAttribute = function(property, attribute, value){};
+/**
+* @param {Element} node Element to set attribute to.
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
+*/
+Polymer_ArraySelectorMixin.prototype._valueToNodeAttribute = function(node, value, attribute){};
+/**
+* @param {*} value Property value to serialize.
+* @return {(string|undefined)}
+*/
+Polymer_ArraySelectorMixin.prototype._serializeValue = function(value){};
/**
* @param {string} property Property name
-* @param {*} value New property value
-* @param {*} old Previous property value
* @return {boolean}
*/
-Polymer_ArraySelectorMixin.prototype._shouldPropertyChange = function(property, value, old){};
+Polymer_ArraySelectorMixin.prototype._hasAccessor = function(property){};
+/**
+* @param {string} prop Property name
+* @return {boolean}
+*/
+Polymer_ArraySelectorMixin.prototype._isPropertyPending = function(prop){};
/**
* @param {string} property Property that should trigger the effect
* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
@@ -2682,6 +2959,10 @@ Polymer_ArraySelectorMixin._parseTemplateNodeAttribute = function(node, template
*/
Polymer_ArraySelectorMixin._contentForTemplate = function(template){};
/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_ArraySelectorMixin.createProperties = function(props){};
+/**
*/
Polymer_ArraySelectorMixin.createPropertiesForAttributes = function(){};
/**
@@ -2755,4 +3036,134 @@ Polymer_ArraySelectorMixin._parseBindings = function(text, templateInfo){};
Polymer_ArraySelectorMixin._evaluateBinding = function(inst, part, path, props, oldProps, hasPaths){};
/**
*/
-Polymer_ArraySelectorMixin.finalize = function(){};
\ No newline at end of file
+Polymer_ArraySelectorMixin.finalize = function(){};
+/**
+* @interface
+* @extends {Polymer_PropertiesChanged}
+*/
+function Polymer_PropertiesMixin(){}
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
+*/
+Polymer_PropertiesMixin.prototype._createPropertyAccessor = function(property, readOnly){};
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+*/
+Polymer_PropertiesMixin.prototype._generatePropertyAccessor = function(property, readOnly){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype.ready = function(){};
+/**
+* @override
+*/
+Polymer_PropertiesMixin.prototype._initializeProperties = function(){};
+/**
+* @param {Object} props Bag of property values that were overwritten
+ when creating property accessors.
+*/
+Polymer_PropertiesMixin.prototype._initializeInstanceProperties = function(props){};
+/**
+* @param {string} property Name of the property
+* @param {*} value Value to set
+*/
+Polymer_PropertiesMixin.prototype._setProperty = function(property, value){};
+/**
+* @param {string} property Name of property
+* @return {*}
+*/
+Polymer_PropertiesMixin.prototype._getProperty = function(property){};
+/**
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @return {boolean}
+*/
+Polymer_PropertiesMixin.prototype._setPendingProperty = function(property, value){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype._invalidateProperties = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype._validateProperties = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype._enableProperties = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype._flushProperties = function(){};
+/**
+* @param {!Object} currentProps Bag of all current accessor values
+* @param {!Object} changedProps Bag of properties changed since the last
+ call to `_propertiesChanged`
+* @param {!Object} oldProps Bag of previous values for each property
+ in `changedProps`
+*/
+Polymer_PropertiesMixin.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+/**
+* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
+* @return {boolean}
+*/
+Polymer_PropertiesMixin.prototype._shouldPropertyChange = function(property, value, old){};
+/**
+* @param {string} name Name of attribute that changed
+* @param {?string} old Old attribute value
+* @param {?string} value New attribute value
+*/
+Polymer_PropertiesMixin.prototype.attributeChangedCallback = function(name, old, value){};
+/**
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to, defaults to the value
+returned from `_typeForProperty`
+*/
+Polymer_PropertiesMixin.prototype._attributeToProperty = function(attribute, value, type){};
+/**
+* @param {?string} value Value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
+*/
+Polymer_PropertiesMixin.prototype._deserializeValue = function(value, type){};
+/**
+* @param {string} attribute Attribute to convert
+* @return {string}
+*/
+Polymer_PropertiesMixin.prototype._propertyForAttribute = function(attribute){};
+/**
+* @param {string} property Property to convert
+* @return {string}
+*/
+Polymer_PropertiesMixin.prototype._attributeForProperty = function(property){};
+/**
+* @param {string} name Name of property
+* @return {*}
+*/
+Polymer_PropertiesMixin.prototype._typeForProperty = function(name){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype.connectedCallback = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin.prototype.disconnectedCallback = function(){};
+/**
+* @param {Array} props Array of names of accessors.
+*/
+Polymer_PropertiesMixin.createProperties = function(props){};
+/**
+* @param {*} name
+*/
+Polymer_PropertiesMixin._ensureFinalized = function(name){};
+/**
+* @param {string} name Name of the element
+*/
+Polymer_PropertiesMixin.finalize = function(name){};
\ No newline at end of file
diff --git a/externs/polymer-closure-types.html b/externs/polymer-closure-types.html
index faf9152e1b..0c499ecee8 100644
--- a/externs/polymer-closure-types.html
+++ b/externs/polymer-closure-types.html
@@ -154,4 +154,8 @@
* }}
*/
let TemplatizeOptions;
+
+
+ /** @typedef {{run: function(function(), number=):number, cancel: function(number)}} */
+ let AsyncInterface;
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index aa6d6b1f1f..7d53afb248 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -144,7 +144,7 @@ gulp.task('closure', ['clean'], () => {
if (CLOSURE_LINT_ONLY) {
closurePluginOptions = {
logger: closureLintLogger
- }
+ };
}
const closureStream = closure({
diff --git a/lib/elements/properties-element.html b/lib/elements/properties-element.html
index e0e8f13615..3972e2e364 100644
--- a/lib/elements/properties-element.html
+++ b/lib/elements/properties-element.html
@@ -13,36 +13,30 @@
+ /**
+ * Base class that provides a simple starting point for creating an element
+ * that declares properties via the `properties` static getter that are
+ * observed. Changes are reported via the `_propertiesChanged` method.
+ * This element provides no specific support for rendering. Users are expected
+ * to create a shadowRoot and put content into it and update it in whatever
+ * way makes sense for the use case.
+ *
+ * @customElement
+ * @polymer
+ * @memberof Polymer
+ * @constructor
+ * @implements {Polymer_PropertiesMixin}
+ * @extends HTMLElement
+ * @appliesMixin Polymer.PropertiesMixin
+ * @summary Base class that provides a simple starting point for creating an
+ * element that declares properties via the `properties` static getter that
+ * are observed
+ */
+ const PropertiesElement = Polymer.PropertiesMixin(HTMLElement);
+ Polymer.PropertiesElement = PropertiesElement;
+ })();
+
\ No newline at end of file
diff --git a/lib/mixins/properties-changed.html b/lib/mixins/properties-changed.html
index e0fce0eb22..80b595c4ad 100644
--- a/lib/mixins/properties-changed.html
+++ b/lib/mixins/properties-changed.html
@@ -13,398 +13,408 @@
+
\ No newline at end of file
diff --git a/lib/mixins/properties-mixin.html b/lib/mixins/properties-mixin.html
index 62695fa8ec..06c6359402 100644
--- a/lib/mixins/properties-mixin.html
+++ b/lib/mixins/properties-mixin.html
@@ -26,13 +26,10 @@
* to create a shadowRoot and put content into it and update it in whatever
* way makes sense for the use case.
*
- * @customElement
+ * @mixinFunction
* @polymer
- * @memberof Polymer
- * @constructor
- * @implements {Polymer_PropertiesChanged}
- * @extends HTMLElement
* @appliesMixin Polymer.PropertiesChanged
+ * @memberof Polymer
* @summary Mixin that provides a minimal starting point for using
* the PropertiesChanged mixin by providing a declarative `properties` object.
*/
@@ -42,11 +39,17 @@
* @constructor
* @extends {superClass}
* @implements {Polymer_PropertiesChanged}
- * @unrestricted
*/
const base = Polymer.PropertiesChanged(superClass);
- return class PropertiesElement extends base {
+ /**
+ * @polymer
+ * @mixinClass
+ * @extends {base}
+ * @implements {Polymer_PropertiesMixin}
+ * @unrestricted
+ */
+ class Properties extends base {
/**
* Implements standard custom elements getter to observes the attributes
@@ -131,7 +134,9 @@
*/
disconnectedCallback() {}
- };
+ }
+
+ return Properties;
});
diff --git a/lib/mixins/property-accessors.html b/lib/mixins/property-accessors.html
index 369a636830..366fa05d82 100644
--- a/lib/mixins/property-accessors.html
+++ b/lib/mixins/property-accessors.html
@@ -86,6 +86,7 @@
*
* @mixinFunction
* @polymer
+ * @appliesMixin Polymer.PropertiesChanged
* @memberof Polymer
* @summary Element class mixin for reacting to property changes from
* generated property accessors.
@@ -104,7 +105,7 @@
* @polymer
* @mixinClass
* @implements {Polymer_PropertyAccessors}
- * @extends HTMLElement
+ * @extends {base}
* @unrestricted
*/
class PropertyAccessors extends base {
@@ -195,13 +196,15 @@
* Ensures the element has the given attribute. If it does not,
* assigns the given value to the attribute.
*
+ * @suppress {invalidCasts} Closure can't figure out `this` is infact an element
*
* @param {string} attribute Name of attribute to ensure is set.
* @param {string} value of the attribute.
*/
_ensureAttribute(attribute, value) {
- if (!this.hasAttribute(attribute)) {
- this._valueToNodeAttribute(this, value, attribute);
+ const el = /** @type {!HTMLElement} */(this);
+ if (!el.hasAttribute(attribute)) {
+ this._valueToNodeAttribute(el, value, attribute);
}
}
@@ -225,6 +228,8 @@
/**
* Serializes a property to its associated attribute.
*
+ * @suppress {invalidCasts} Closure can't figure out `this` is an element.
+ *
* @param {string} property Property name to reflect.
* @param {string=} attribute Attribute name to reflect.
* @param {*=} value Property value to refect.
@@ -232,8 +237,8 @@
_propertyToAttribute(property, attribute, value) {
this.__serializing = true;
value = (arguments.length < 3) ? this[property] : value;
- this._valueToNodeAttribute(this, value,
- attribute || this._attributeNameForProperty(property));
+ this._valueToNodeAttribute(/** @type {!HTMLElement} */(this), value,
+ attribute || this._attributeForProperty(property));
this.__serializing = false;
}
diff --git a/lib/mixins/property-effects.html b/lib/mixins/property-effects.html
index b88ed2e1b3..6c835a9069 100644
--- a/lib/mixins/property-effects.html
+++ b/lib/mixins/property-effects.html
@@ -8,7 +8,6 @@
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
-
diff --git a/lib/utils/async.html b/lib/utils/async.html
index f90bb033b6..33494436a7 100644
--- a/lib/utils/async.html
+++ b/lib/utils/async.html
@@ -14,9 +14,6 @@
'use strict';
- /** @typedef {{run: function(function(), number=):number, cancel: function(number)}} */
- let AsyncInterface; // eslint-disable-line no-unused-vars
-
// Microtask implemented using Mutation Observer
let microtaskCurrHandle = 0;
let microtaskLastHandle = 0;
@@ -67,11 +64,11 @@
* delay.
*
* @memberof Polymer.Async.timeOut
- * @param {number} delay Time to wait before calling callbacks in ms
+ * @param {number=} delay Time to wait before calling callbacks in ms
* @return {AsyncInterface} An async timeout interface
*/
after(delay) {
- return {
+ return {
run(fn) { return setTimeout(fn, delay); },
cancel(handle) {
window.clearTimeout(handle);
@@ -83,7 +80,7 @@
*
* @memberof Polymer.Async.timeOut
* @param {Function} fn Callback to run
- * @param {number} delay Delay in milliseconds
+ * @param {number=} delay Delay in milliseconds
* @return {number} Handle used for canceling task
*/
run(fn, delay) {
@@ -112,7 +109,7 @@
* Enqueues a function called at `requestAnimationFrame` timing.
*
* @memberof Polymer.Async.animationFrame
- * @param {Function} fn Callback to run
+ * @param {function(number)} fn Callback to run
* @return {number} Handle used for canceling task
*/
run(fn) {