UNPKG

npm-polymer-elements

Version:

Polymer Elements package for npm

677 lines (674 loc) 16.5 kB
<!-- @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 --> <script>(function () { function resolve() { document.body.removeAttribute('unresolved'); } if (window.WebComponents) { addEventListener('WebComponentsReady', resolve); } else { if (document.readyState === 'interactive' || document.readyState === 'complete') { resolve(); } else { addEventListener('DOMContentLoaded', resolve); } } }()); window.Polymer = { Settings: function () { var user = window.Polymer || {}; var parts = location.search.slice(1).split('&'); for (var i = 0, o; i < parts.length && (o = parts[i]); i++) { o = o.split('='); o[0] && (user[o[0]] = o[1] || true); } var wantShadow = user.dom === 'shadow'; var hasShadow = Boolean(Element.prototype.createShadowRoot); var nativeShadow = hasShadow && !window.ShadowDOMPolyfill; var useShadow = wantShadow && hasShadow; var hasNativeImports = Boolean('import' in document.createElement('link')); var useNativeImports = hasNativeImports; var useNativeCustomElements = !window.CustomElements || window.CustomElements.useNative; return { wantShadow: wantShadow, hasShadow: hasShadow, nativeShadow: nativeShadow, useShadow: useShadow, useNativeShadow: useShadow && nativeShadow, useNativeImports: useNativeImports, useNativeCustomElements: useNativeCustomElements }; }() }; (function () { var userPolymer = window.Polymer; window.Polymer = function (prototype) { if (typeof prototype === 'function') { prototype = prototype.prototype; } if (!prototype) { prototype = {}; } var factory = desugar(prototype); prototype = factory.prototype; var options = { prototype: prototype }; if (prototype.extends) { options.extends = prototype.extends; } Polymer.telemetry._registrate(prototype); document.registerElement(prototype.is, options); return factory; }; var desugar = function (prototype) { var base = Polymer.Base; if (prototype.extends) { base = Polymer.Base._getExtendedPrototype(prototype.extends); } prototype = Polymer.Base.chainObject(prototype, base); prototype.registerCallback(); return prototype.constructor; }; window.Polymer = Polymer; if (userPolymer) { for (var i in userPolymer) { Polymer[i] = userPolymer[i]; } } Polymer.Class = desugar; }()); Polymer.telemetry = { registrations: [], _regLog: function (prototype) { console.log('[' + prototype.is + ']: registered'); }, _registrate: function (prototype) { this.registrations.push(prototype); Polymer.log && this._regLog(prototype); }, dumpRegistrations: function () { this.registrations.forEach(this._regLog); } }; Object.defineProperty(window, 'currentImport', { enumerable: true, configurable: true, get: function () { return (document._currentScript || document.currentScript).ownerDocument; } }); Polymer.RenderStatus = { _ready: false, _callbacks: [], whenReady: function (cb) { if (this._ready) { cb(); } else { this._callbacks.push(cb); } }, _makeReady: function () { this._ready = true; for (var i = 0; i < this._callbacks.length; i++) { this._callbacks[i](); } this._callbacks = []; }, _catchFirstRender: function () { requestAnimationFrame(function () { Polymer.RenderStatus._makeReady(); }); }, _afterNextRenderQueue: [], _waitingNextRender: false, afterNextRender: function (element, fn, args) { this._watchNextRender(); this._afterNextRenderQueue.push([ element, fn, args ]); }, _watchNextRender: function () { if (!this._waitingNextRender) { this._waitingNextRender = true; var fn = function () { Polymer.RenderStatus._flushNextRender(); }; if (!this._ready) { this.whenReady(fn); } else { requestAnimationFrame(fn); } } }, _flushNextRender: function () { var self = this; setTimeout(function () { self._flushRenderCallbacks(self._afterNextRenderQueue); self._afterNextRenderQueue = []; self._waitingNextRender = false; }); }, _flushRenderCallbacks: function (callbacks) { for (var i = 0, h; i < callbacks.length; i++) { h = callbacks[i]; h[1].apply(h[0], h[2] || Polymer.nar); } ; } }; if (window.HTMLImports) { HTMLImports.whenReady(function () { Polymer.RenderStatus._catchFirstRender(); }); } else { Polymer.RenderStatus._catchFirstRender(); } Polymer.ImportStatus = Polymer.RenderStatus; Polymer.ImportStatus.whenLoaded = Polymer.ImportStatus.whenReady; Polymer.Base = { __isPolymerInstance__: true, _addFeature: function (feature) { this.extend(this, feature); }, registerCallback: function () { this._desugarBehaviors(); this._doBehavior('beforeRegister'); this._registerFeatures(); this._doBehavior('registered'); }, createdCallback: function () { Polymer.telemetry.instanceCount++; this.root = this; this._doBehavior('created'); this._initFeatures(); }, attachedCallback: function () { var self = this; Polymer.RenderStatus.whenReady(function () { self.isAttached = true; self._doBehavior('attached'); }); }, detachedCallback: function () { this.isAttached = false; this._doBehavior('detached'); }, attributeChangedCallback: function (name, oldValue, newValue) { this._attributeChangedImpl(name); this._doBehavior('attributeChanged', [ name, oldValue, newValue ]); }, _attributeChangedImpl: function (name) { this._setAttributeToProperty(this, name); }, extend: function (prototype, api) { if (prototype && api) { var n$ = Object.getOwnPropertyNames(api); for (var i = 0, n; i < n$.length && (n = n$[i]); i++) { this.copyOwnProperty(n, api, prototype); } } return prototype || api; }, mixin: function (target, source) { for (var i in source) { target[i] = source[i]; } return target; }, copyOwnProperty: function (name, source, target) { var pd = Object.getOwnPropertyDescriptor(source, name); if (pd) { Object.defineProperty(target, name, pd); } }, _log: console.log.apply.bind(console.log, console), _warn: console.warn.apply.bind(console.warn, console), _error: console.error.apply.bind(console.error, console), _logf: function () { return this._logPrefix.concat([this.is]).concat(Array.prototype.slice.call(arguments, 0)); } }; Polymer.Base._logPrefix = function () { var color = window.chrome || /firefox/i.test(navigator.userAgent); return color ? [ '%c[%s::%s]:', 'font-weight: bold; background-color:#EEEE00;' ] : ['[%s::%s]:']; }(); Polymer.Base.chainObject = function (object, inherited) { if (object && inherited && object !== inherited) { if (!Object.__proto__) { object = Polymer.Base.extend(Object.create(inherited), object); } object.__proto__ = inherited; } return object; }; Polymer.Base = Polymer.Base.chainObject(Polymer.Base, HTMLElement.prototype); if (window.CustomElements) { Polymer.instanceof = CustomElements.instanceof; } else { Polymer.instanceof = function (obj, ctor) { return obj instanceof ctor; }; } Polymer.isInstance = function (obj) { return Boolean(obj && obj.__isPolymerInstance__); }; Polymer.telemetry.instanceCount = 0; (function () { var modules = {}; var lcModules = {}; var findModule = function (id) { return modules[id] || lcModules[id.toLowerCase()]; }; var DomModule = function () { return document.createElement('dom-module'); }; DomModule.prototype = Object.create(HTMLElement.prototype); Polymer.Base.extend(DomModule.prototype, { constructor: DomModule, createdCallback: function () { this.register(); }, register: function (id) { var id = id || this.id || this.getAttribute('name') || this.getAttribute('is'); if (id) { this.id = id; modules[id] = this; lcModules[id.toLowerCase()] = this; } }, import: function (id, selector) { if (id) { var m = findModule(id); if (!m) { forceDomModulesUpgrade(); m = findModule(id); } if (m && selector) { m = m.querySelector(selector); } return m; } } }); var cePolyfill = window.CustomElements && !CustomElements.useNative; document.registerElement('dom-module', DomModule); function forceDomModulesUpgrade() { if (cePolyfill) { var script = document._currentScript || document.currentScript; var doc = script && script.ownerDocument || document; var modules = doc.querySelectorAll('dom-module'); for (var i = modules.length - 1, m; i >= 0 && (m = modules[i]); i--) { if (m.__upgraded__) { return; } else { CustomElements.upgrade(m); } } } } }()); Polymer.Base._addFeature({ _prepIs: function () { if (!this.is) { var module = (document._currentScript || document.currentScript).parentNode; if (module.localName === 'dom-module') { var id = module.id || module.getAttribute('name') || module.getAttribute('is'); this.is = id; } } if (this.is) { this.is = this.is.toLowerCase(); } } }); Polymer.Base._addFeature({ behaviors: [], _desugarBehaviors: function () { if (this.behaviors.length) { this.behaviors = this._desugarSomeBehaviors(this.behaviors); } }, _desugarSomeBehaviors: function (behaviors) { behaviors = this._flattenBehaviorsList(behaviors); for (var i = behaviors.length - 1; i >= 0; i--) { this._mixinBehavior(behaviors[i]); } return behaviors; }, _flattenBehaviorsList: function (behaviors) { var flat = []; for (var i = 0; i < behaviors.length; i++) { var b = behaviors[i]; if (b instanceof Array) { flat = flat.concat(this._flattenBehaviorsList(b)); } else if (b) { flat.push(b); } else { this._warn(this._logf('_flattenBehaviorsList', 'behavior is null, check for missing or 404 import')); } } return flat; }, _mixinBehavior: function (b) { var n$ = Object.getOwnPropertyNames(b); for (var i = 0, n; i < n$.length && (n = n$[i]); i++) { if (!Polymer.Base._behaviorProperties[n] && !this.hasOwnProperty(n)) { this.copyOwnProperty(n, b, this); } } }, _prepBehaviors: function () { this._prepFlattenedBehaviors(this.behaviors); }, _prepFlattenedBehaviors: function (behaviors) { for (var i = 0, l = behaviors.length; i < l; i++) { this._prepBehavior(behaviors[i]); } this._prepBehavior(this); }, _doBehavior: function (name, args) { for (var i = 0; i < this.behaviors.length; i++) { this._invokeBehavior(this.behaviors[i], name, args); } this._invokeBehavior(this, name, args); }, _invokeBehavior: function (b, name, args) { var fn = b[name]; if (fn) { fn.apply(this, args || Polymer.nar); } }, _marshalBehaviors: function () { for (var i = 0; i < this.behaviors.length; i++) { this._marshalBehavior(this.behaviors[i]); } this._marshalBehavior(this); } }); Polymer.Base._behaviorProperties = { hostAttributes: true, beforeRegister: true, registered: true, properties: true, observers: true, listeners: true, created: true, attached: true, detached: true, attributeChanged: true, ready: true }; Polymer.Base._addFeature({ _getExtendedPrototype: function (tag) { return this._getExtendedNativePrototype(tag); }, _nativePrototypes: {}, _getExtendedNativePrototype: function (tag) { var p = this._nativePrototypes[tag]; if (!p) { var np = this.getNativePrototype(tag); p = this.extend(Object.create(np), Polymer.Base); this._nativePrototypes[tag] = p; } return p; }, getNativePrototype: function (tag) { return Object.getPrototypeOf(document.createElement(tag)); } }); Polymer.Base._addFeature({ _prepConstructor: function () { this._factoryArgs = this.extends ? [ this.extends, this.is ] : [this.is]; var ctor = function () { return this._factory(arguments); }; if (this.hasOwnProperty('extends')) { ctor.extends = this.extends; } Object.defineProperty(this, 'constructor', { value: ctor, writable: true, configurable: true }); ctor.prototype = this; }, _factory: function (args) { var elt = document.createElement.apply(document, this._factoryArgs); if (this.factoryImpl) { this.factoryImpl.apply(elt, args); } return elt; } }); Polymer.nob = Object.create(null); Polymer.Base._addFeature({ properties: {}, getPropertyInfo: function (property) { var info = this._getPropertyInfo(property, this.properties); if (!info) { for (var i = 0; i < this.behaviors.length; i++) { info = this._getPropertyInfo(property, this.behaviors[i].properties); if (info) { return info; } } ; } return info || Polymer.nob; }, _getPropertyInfo: function (property, properties) { var p = properties && properties[property]; if (typeof p === 'function') { p = properties[property] = { type: p }; } if (p) { p.defined = true; } return p; }, _prepPropertyInfo: function () { this._propertyInfo = {}; for (var i = 0, p; i < this.behaviors.length; i++) { this._addPropertyInfo(this._propertyInfo, this.behaviors[i].properties); } this._addPropertyInfo(this._propertyInfo, this.properties); this._addPropertyInfo(this._propertyInfo, this._propertyEffects); }, _addPropertyInfo: function (target, source) { if (source) { var t, s; for (var i in source) { t = target[i]; s = source[i]; if (i[0] === '_' && !s.readOnly) { continue; } if (!target[i]) { target[i] = { type: typeof s === 'function' ? s : s.type, readOnly: s.readOnly, attribute: Polymer.CaseMap.camelToDashCase(i) }; } else { if (!t.type) { t.type = s.type; } if (!t.readOnly) { t.readOnly = s.readOnly; } } } } } }); Polymer.CaseMap = { _caseMap: {}, dashToCamelCase: function (dash) { var mapped = Polymer.CaseMap._caseMap[dash]; if (mapped) { return mapped; } if (dash.indexOf('-') < 0) { return Polymer.CaseMap._caseMap[dash] = dash; } return Polymer.CaseMap._caseMap[dash] = dash.replace(/-([a-z])/g, function (m) { return m[1].toUpperCase(); }); }, camelToDashCase: function (camel) { var mapped = Polymer.CaseMap._caseMap[camel]; if (mapped) { return mapped; } return Polymer.CaseMap._caseMap[camel] = camel.replace(/([a-z][A-Z])/g, function (g) { return g[0] + '-' + g[1].toLowerCase(); }); } }; Polymer.Base._addFeature({ _addHostAttributes: function (attributes) { if (!this._aggregatedAttributes) { this._aggregatedAttributes = {}; } if (attributes) { this.mixin(this._aggregatedAttributes, attributes); } }, _marshalHostAttributes: function () { if (this._aggregatedAttributes) { this._applyAttributes(this, this._aggregatedAttributes); } }, _applyAttributes: function (node, attr$) { for (var n in attr$) { if (!this.hasAttribute(n) && n !== 'class') { var v = attr$[n]; this.serializeValueToAttribute(v, n, this); } } }, _marshalAttributes: function () { this._takeAttributesToModel(this); }, _takeAttributesToModel: function (model) { if (this.hasAttributes()) { for (var i in this._propertyInfo) { var info = this._propertyInfo[i]; if (this.hasAttribute(info.attribute)) { this._setAttributeToProperty(model, info.attribute, i, info); } } } }, _setAttributeToProperty: function (model, attribute, property, info) { if (!this._serializing) { var property = property || Polymer.CaseMap.dashToCamelCase(attribute); info = info || this._propertyInfo && this._propertyInfo[property]; if (info && !info.readOnly) { var v = this.getAttribute(attribute); model[property] = this.deserialize(v, info.type); } } }, _serializing: false, reflectPropertyToAttribute: function (property, attribute, value) { this._serializing = true; value = value === undefined ? this[property] : value; this.serializeValueToAttribute(value, attribute || Polymer.CaseMap.camelToDashCase(property)); this._serializing = false; }, serializeValueToAttribute: function (value, attribute, node) { var str = this.serialize(value); node = node || this; if (str === undefined) { node.removeAttribute(attribute); } else { node.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) { } 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; } } }); Polymer.version = '1.2.4'; Polymer.Base._addFeature({ _registerFeatures: function () { this._prepIs(); this._prepBehaviors(); this._prepConstructor(); this._prepPropertyInfo(); }, _prepBehavior: function (b) { this._addHostAttributes(b.hostAttributes); }, _marshalBehavior: function (b) { }, _initFeatures: function () { this._marshalHostAttributes(); this._marshalBehaviors(); } });</script>