| Index: third_party/polymer/v0_8/components/polymer/src/micro/attributes.html
|
| diff --git a/third_party/polymer/v0_8/components/polymer/src/micro/attributes.html b/third_party/polymer/v0_8/components/polymer/src/micro/attributes.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..67fe13a8531f1d91775feb87bcecc60fb978f5f6
|
| --- /dev/null
|
| +++ b/third_party/polymer/v0_8/components/polymer/src/micro/attributes.html
|
| @@ -0,0 +1,180 @@
|
| +<!--
|
| +@license
|
| +Copyright (c) 2014 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
|
| +-->
|
| +
|
| +<link rel="import" href="../lib/case-map.html">
|
| +
|
| +<script>
|
| +
|
| + /**
|
| + * Support for `hostAttributes` property.
|
| + *
|
| + * hostAttributes: 'block vertical layout'
|
| + *
|
| + * `hostAttributes` is a space-delimited string of boolean attribute names to
|
| + * set true on each instance.
|
| + *
|
| + * Support for mapping attributes to properties.
|
| + *
|
| + * Properties that are configured in `properties` with a type are mapped
|
| + * to attributes.
|
| + *
|
| + * A value set in an attribute is deserialized into the specified
|
| + * data-type and stored into the matching property.
|
| + *
|
| + * Example:
|
| + *
|
| + * properties: {
|
| + * // values set to index attribute are converted to Number and propagated
|
| + * // to index property
|
| + * index: Number,
|
| + * // values set to label attribute are propagated to index property
|
| + * label: String
|
| + * }
|
| + *
|
| + * Types supported for deserialization:
|
| + *
|
| + * - Number
|
| + * - Boolean
|
| + * - String
|
| + * - Object (JSON)
|
| + * - Array (JSON)
|
| + * - Date
|
| + *
|
| + * This feature implements `attributeChanged` to support automatic
|
| + * propagation of attribute values at run-time. If you override
|
| + * `attributeChanged` be sure to call this base class method
|
| + * if you also want the standard behavior.
|
| + *
|
| + * @class base feature: attributes
|
| + */
|
| +
|
| + Polymer.Base._addFeature({
|
| +
|
| + _marshalAttributes: function() {
|
| + this._takeAttributes();
|
| + },
|
| +
|
| + _installHostAttributes: function(attributes) {
|
| + if (attributes) {
|
| + this.applyAttributes(this, attributes);
|
| + }
|
| + },
|
| +
|
| + applyAttributes: function(node, attr$) {
|
| + for (var n in attr$) {
|
| + this.serializeValueToAttribute(attr$[n], n, this);
|
| + }
|
| + },
|
| +
|
| + _takeAttributes: function() {
|
| + this._takeAttributesToModel(this);
|
| + },
|
| +
|
| + _takeAttributesToModel: function(model) {
|
| + for (var i=0, l=this.attributes.length; i<l; i++) {
|
| + var a = this.attributes[i];
|
| + var property = Polymer.CaseMap.dashToCamelCase(a.name);
|
| + var info = this.getPropertyInfo(property);
|
| + if (info || this._propertyEffects[property]) {
|
| + model[property] =
|
| + this.deserialize(a.value, info.type);
|
| + }
|
| + }
|
| + },
|
| +
|
| + setAttributeToProperty: function(model, attrName) {
|
| + // Don't deserialize back to property if currently reflecting
|
| + if (!this._serializing) {
|
| + var propName = Polymer.CaseMap.dashToCamelCase(attrName);
|
| + if (propName in this.properties) {
|
| + var type = this.getPropertyType(propName);
|
| + var val = this.getAttribute(attrName);
|
| + model[propName] = this.deserialize(val, type);
|
| + }
|
| + }
|
| + },
|
| +
|
| + _serializing: false,
|
| + reflectPropertyToAttribute: function(name) {
|
| + this._serializing = true;
|
| + this.serializeValueToAttribute(this[name],
|
| + Polymer.CaseMap.camelToDashCase(name));
|
| + this._serializing = false;
|
| + },
|
| +
|
| + serializeValueToAttribute: function(value, attribute, node) {
|
| + var str = this.serialize(value);
|
| + (node || this)
|
| + [str === undefined ? 'removeAttribute' : 'setAttribute']
|
| + (attribute, str);
|
| + },
|
| +
|
| + deserialize: function(value, type) {
|
| + switch (type) {
|
| + case Number:
|
| + value = Number(value);
|
| + break;
|
| +
|
| + case Boolean:
|
| + value = (value !== null);
|
| + break;
|
| +
|
| + case Object:
|
| + try {
|
| + value = JSON.parse(value);
|
| + } catch(x) {
|
| + // allow non-JSON literals like Strings and Numbers
|
| + }
|
| + break;
|
| +
|
| + case Array:
|
| + try {
|
| + value = JSON.parse(value);
|
| + } catch(x) {
|
| + value = null;
|
| + console.warn('Polymer::Attributes: couldn`t decode Array as JSON');
|
| + }
|
| + break;
|
| +
|
| + case Date:
|
| + value = new Date(value);
|
| + break;
|
| +
|
| + case String:
|
| + default:
|
| + break;
|
| + }
|
| + return value;
|
| + },
|
| +
|
| + serialize: function(value) {
|
| + switch (typeof value) {
|
| + case 'boolean':
|
| + return value ? '' : undefined;
|
| +
|
| + case 'object':
|
| + if (value instanceof Date) {
|
| + return value;
|
| + } else if (value) {
|
| + try {
|
| + return JSON.stringify(value);
|
| + } catch(x) {
|
| + return '';
|
| + }
|
| + }
|
| +
|
| + default:
|
| + return value != null ? value : undefined;
|
| + }
|
| + }
|
| +
|
| + });
|
| +
|
| +</script>
|
|
|