Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1284)

Side by Side Diff: pkg/polymer/lib/src/js/polymer/polymer.js.map

Issue 558673004: update polymer js to 0.4.0 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: review updates Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/polymer/lib/src/js/polymer/polymer.concat.js.map ('k') | pkg/polymer/lib/src/loader.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 {"version":3,"file":"polymer.js","sources":["../polymer-gestures/src/scope.js"," ../polymer-gestures/src/targetfind.js","../polymer-gestures/src/touch-action.js" ,"../polymer-gestures/src/eventFactory.js","../polymer-gestures/src/pointermap.j s","../polymer-gestures/src/dispatcher.js","../polymer-gestures/src/mouse.js",". ./polymer-gestures/src/touch.js","../polymer-gestures/src/ms.js","../polymer-ges tures/src/pointer.js","../polymer-gestures/src/platform-events.js","../polymer-g estures/src/track.js","../polymer-gestures/src/hold.js","../polymer-gestures/src /tap.js","../polymer-expressions/third_party/esprima/esprima.js","../polymer-exp ressions/src/polymer-expressions.js","build/polymer-versioned.js","src/boot.js", "src/lib/lang.js","src/lib/job.js","src/lib/dom.js","src/lib/super.js","src/lib/ deserialize.js","src/api.js","src/instance/utils.js","src/instance/events.js","s rc/instance/attributes.js","src/instance/properties.js","src/instance/mdv.js","s rc/instance/base.js","src/instance/styles.js","src/declaration/polymer.js","src/ declaration/path.js","src/declaration/styles.js","src/declaration/events.js","sr c/declaration/properties.js","src/declaration/attributes.js","src/declaration/md v.js","src/declaration/prototype.js","src/declaration/queue.js","src/declaration /import.js","src/declaration/polymer-element.js","src/lib/auto-binding.js"],"nam es":[],"mappings":"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","sourcesContent":["/**\n * @lic ense\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\nwindow.PolymerGestures = {};\n ","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polyme r.github.io/LICENSE.txt\n * The complete set of authors may be found at http://p olymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found a t http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as pa rt of the polymer project is also\n * subject to an additional IP rights grant f ound at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var H AS_FULL_PATH = false;\n\n // test for full event path support\n var pathTest = document.createElement('meta');\n if (pathTest.createShadowRoot) {\n var sr = pathTest.createShadowRoot();\n var s = document.createElement('span');\n sr.appendChild(s);\n pathTest.addEventListener('testpath', function(ev) {\n if (ev.path) {\n // if the span is in the event path, then path[0] is the real source for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var ev = new CustomEvent('testp ath', {bubbles: true});\n // must add node to DOM to trigger event listener\n document.head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest .parentNode.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\ n\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n re turn inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n olderShad ow: function(shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) { \n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n return os;\n },\n all Shadows: function(element) {\n var shadows = [], s = this.shadow(element);\ n while(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRoot, x, y) {\ n var t, st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPo int(x, y);\n if (t) {\n // found element, check if it has a Shad owRoot\n sr = this.targetingShadow(t);\n } else if (inRoot !== d ocument) {\n // check for sibling roots\n sr = this.olderShado w(inRoot);\n }\n // search other roots, fall back to light dom ele ment\n return this.searchRoot(sr, x, y) || t;\n }\n },\n owner : function(element) {\n if (!element) {\n return document;\n }\ n var s = element;\n // walk up until you hit the shadow root or docum ent\n while (s.parentNode) {\n s = s.parentNode;\n }\n // the owner element is expected to be a Document or ShadowRoot\n if (s.nodeTy pe != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = document;\n }\n return s;\n },\n findTarget: function(inEv ent) {\n if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[ 0];\n }\n var x = inEvent.clientX, y = inEvent.clientY;\n // if t he listener is in the shadow root, it is much faster to start there\n var s = this.owner(inEvent.target);\n // if x, y is not in this root, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document ;\n }\n return this.searchRoot(s, x, y);\n },\n findTouchAction: function(inEvent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n var path = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n = path[i];\n if (n.nodeType === Node.ELEMENT_NODE && n.h asAttribute('touch-action')) {\n return n.getAttribute('touch-action' );\n }\n }\n } else {\n n = inEvent.target;\n while(n) {\n if (n.hasAttribute('touch-action')) {\n return n.getAttribute('touch-action');\n }\n n = n.parentNode || n.h ost;\n }\n }\n // auto is default\n return \"auto\";\n },\n LCA: function(a, b) {\n if (a === b) {\n return a;\n }\ n if (a && !b) {\n return a;\n }\n if (b && !a) {\n return b;\n }\n if (!b && !a) {\n return document;\n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.cont ains && a.contains(b)) {\n return a;\n }\n if (b.contains && b. contains(a)) {\n return b;\n }\n var adepth = this.depth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = this.walk(b, -d );\n }\n while (a && b && a !== b) {\n a = a.parentNode || a.ho st;\n b = b.parentNode || b.host;\n }\n return a;\n },\n walk: function(n, u) {\n for (var i = 0; n && (i < u); i++) {\n n = n.parentNode || n.host;\n }\n return n;\n },\n depth: function(n ) {\n var d = 0;\n while(n) {\n d++;\n n = n.parentNode || n.host;\n }\n return d;\n },\n deepContains: function(a, b) { \n var common = this.LCA(a, b);\n // if a is the common ancestor, it m ust \"deeply\" contain b\n return common === a;\n },\n insideNode: fu nction(node, x, y) {\n var rect = node.getBoundingClientRect();\n retu rn (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom );\n }\n };\n scope.targetFinding = target;\n /**\n * Given an event, fi nds the \"deepest\" node that could have been the original target before ShadowD OM retargetting\n *\n * @param {Event} Event An event object with clientX an d clientY properties\n * @return {Element} The probable event origninator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n * Determines if the \"container\" node deeply contains the \"containee\" node, including sit uations where the \"containee\" is contained by one or more ShadowDOM\n * root s.\n *\n * @param {Node} container\n * @param {Node} containee\n * @retu rn {Boolean}\n */\n scope.deepContains = target.deepContains.bind(target);\n\ n /**\n * Determines if the x/y position is inside the given node.\n *\n * Example:\n *\n * function upHandler(event) {\n * var innode = PolymerGestures.insideNode(event.target, event.clientX, event.clientY);\n * if (innode) {\n * // wait for tap?\n * } else {\n * // tap will never happen\n * }\n * }\n *\n * @param {Node} node\n * @param {Number} x Screen X position\n * @param {Number} y screen Y position\n * @return {Boolean}\n */\n scope.insideNode = target.insideNode ;\n\n})(window.PolymerGestures);\n","/*\n *\n * Copyright (c) 2014 The Polymer P roject Authors. All rights reserved.\n * This code may only be used under the BS D style license found at http://polymer.github.io/LICENSE.txt\n * The complete s et of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The compl ete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.tx t\n * Code distributed by Google as part of the polymer project is also\n * subj ect to an additional IP rights grant found at http://polymer.github.io/PATENTS.t xt\n */\n\n(function() {\n function shadowSelector(v) {\n return 'html /deep / ' + selector(v);\n }\n function selector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'none',\n 'a uto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n sele ctors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n },\n 'm anipulation'\n ];\n var styles = '';\n // only install stylesheet if the brow ser has touch action support\n var hasTouchAction = typeof document.head.style. touchAction === 'string';\n // only add shadow selectors if shadowdom is suppor ted\n var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShad owRoot;\n\n if (hasTouchAction) {\n attrib2css.forEach(function(r) {\n if (String(r) === r) {\n styles += selector(r) + rule(r) + '\\n';\n if (hasShadowRoot) {\n styles += shadowSelector(r) + rule(r) + '\\n'; \n }\n } else {\n styles += r.selectors.map(selector) + rule( r.rule) + '\\n';\n if (hasShadowRoot) {\n styles += r.selectors. map(shadowSelector) + rule(r.rule) + '\\n';\n }\n }\n });\n\n var el = document.createElement('style');\n el.textContent = styles;\n doc ument.head.appendChild(el);\n }\n})();\n","/*\n * Copyright (c) 2014 The Polyme r Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS .txt\n * Code distributed by Google as part of the polymer project is also\n * s ubject to an additional IP rights grant found at http://polymer.github.io/PATENT S.txt\n */\n\n/**\n * This is the constructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, and an optional dictionary of\n * initiali zation properties.\n *\n * Due to certain platform requirements, events returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor\n * @par am {String} inType The type of the event to create.\n * @param {Object} [inDict] An optional dictionary of initial event properties.\n * @return {Event} A new P ointerEvent of type `inType` and initialized with properties from `inDict`.\n */ \n(function(scope) {\n\n var MOUSE_PROPS = [\n 'bubbles',\n 'cancelable', \n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n 'pageX',\n 'pageY'\n ];\n\n var MOUS E_DEFAULTS = [\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\ n 0,\n 0\n ];\n\n var NOP_FACTORY = function(){ return function(){}; };\ n\n var eventFactory = {\n // TODO(dfreedm): this is overridden by tap recog nizer, needs review\n preventTap: NOP_FACTORY,\n makeBaseEvent: function(i nType, inDict) {\n var e = document.createEvent('Event');\n e.initEven t(inType, inDict.bubbles || false, inDict.cancelable || false);\n e.prevent Tap = eventFactory.preventTap(e);\n return e;\n },\n makeGestureEvent : function(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n for (var i = 0, keys = O bject.keys(inDict), k; i < keys.length; i++) {\n k = keys[i];\n e[ k] = inDict[k];\n }\n return e;\n },\n makePointerEvent: functio n(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n // define inherited MouseEvent pr operties\n for(var i = 0, p; i < MOUSE_PROPS.length; i++) {\n p = MO USE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e. buttons = inDict.buttons || 0;\n\n // Spec requires that pointers without p ressure specified use 0.5 for down\n // state and 0 for up state.\n va r pressure = 0;\n if (inDict.pressure) {\n pressure = inDict.pressur e;\n } else {\n pressure = e.buttons ? 0.5 : 0;\n }\n\n // add x/y properties aliased to clientX/Y\n e.x = e.clientX;\n e.y = e. clientY;\n\n // define the properties of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDict.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pressure;\n e.tiltX = in Dict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n e.pointerType = inDi ct.pointerType || '';\n e.hwTimestamp = inDict.hwTimestamp || 0;\n e.i sPrimary = inDict.isPrimary || false;\n e._source = inDict._source || '';\n return e;\n }\n };\n\n scope.eventFactory = eventFactory;\n})(window. PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license fou nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu ted by Google as part of the polymer project is also\n * subject to an additiona l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = funct ion(){ return this.size; };\n function PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN;\n return m;\n } el se {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap .prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.inde xOf(inId);\n if (i > -1) {\n this.values[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.values.push(inEvent);\n }\n },\n has: function(inId) {\n return this.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1);\n this.values.splice( i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.inde xOf(inId);\n return this.values[i];\n },\n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return val ue, key, map\n forEach: function(callback, thisArg) {\n this.values.forE ach(function(v, i) {\n callback.call(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() {\n return this.keys.length ;\n }\n };\n\n scope.PointerMap = PointerMap;\n})(window.PolymerGestures);\ n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\ n * This code may only be used under the BSD style license found at http://polym er.github.io/LICENSE.txt\n * The complete set of authors may be found at http:// polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as p art of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'view ',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY' ,\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button', \n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\ n 'pointerId',\n 'width',\n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isPrimary',\n // ev ent instance\n 'type',\n 'target',\n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp',\n // gesture addons\n 'preventT ap',\n 'tapPrevented',\n '_source'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\ n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n function(){},\n false \n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\ n\n var eventFactory = scope.eventFactory;\n\n /**\n * This module is for no rmalizing events. Mouse and Touch events will be\n * collected here, and fire PointerEvents that have the same semantics, no\n * matter the source.\n * Ev ents fired:\n * - pointerdown: a pointing is added\n * - pointerup: a po inter is removed\n * - pointermove: a pointer is moved\n * - pointerover : a pointer crosses into an element\n * - pointerout: a pointer leaves an el ement\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatcher = {\n pointermap: new scope.PointerMap(),\n eventMap: Obj ect.create(null),\n // Scope objects for native events.\n // This exists f or ease of testing.\n eventSources: Object.create(null),\n eventSourceList : [],\n gestures: [],\n // map gesture event -> {listeners: int, index: ge stures[int]}\n dependencyMap: {\n // make sure down and up are in the ma p to trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {li steners: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` array.\n * @param {string} name A name for t he event source\n * @param {Object} source A new source of platform events.\ n */\n registerSource: function(name, source) {\n var s = source;\n var newEvents = s.events;\n if (newEvents) {\n newEvents.forEac h(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bind (s);\n }\n }, this);\n this.eventSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n registerGesture: functio n(name, source) {\n var obj = Object.create(null);\n obj.listeners = 0 ;\n obj.index = this.gestures.length;\n for (var i = 0, g; i < source. exposes.length; i++) {\n g = source.exposes[i].toLowerCase();\n th is.dependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\n register: function(element, initial) {\n var l = this.eventSourceList.l ength;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++ ) {\n // call eventsource register\n es.register.call(es, element, initial);\n }\n },\n unregister: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.ev entSourceList[i]); i++) {\n // call eventsource register\n es.unre gister.call(es, element);\n }\n },\n // EVENTS\n down: function(in Event) {\n this.fireEvent('down', inEvent);\n },\n move: function(inE vent) {\n // pipe move events into gesture queue directly\n inEvent.ty pe = 'move';\n this.fillGestureQueue(inEvent);\n },\n up: function(in Event) {\n this.fireEvent('up', inEvent);\n },\n cancel: function(inE vent) {\n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent) ;\n },\n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n / / This is used to prevent multiple dispatch of events from\n // platform ev ents. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n\n // TODO(dfr eedm): make this check more granular, allow for minimal event generation\n // e.g inEvent._handledByPG['tap'] and inEvent._handledByPG['track'], etc\n if (inEvent._handledByPG) {\n return;\n }\n var type = inEvent .type;\n var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEvent._handledByPG = true;\n },\n // set up event listeners\n listen: function(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.ad dEvent(target, e);\n }\n },\n // remove event listeners\n unlisten : function(target, events) {\n for (var i = 0, l = events.length, e; (i < l ) && (e = events[i]); i++) {\n this.removeEvent(target, e);\n }\n },\n addEvent: function(target, eventName) {\n target.addEventListener( eventName, this.boundHandler);\n },\n removeEvent: function(target, eventN ame) {\n target.removeEventListener(eventName, this.boundHandler);\n },\ n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`, based on the information in\n * `inEvent`.\n *\n * @param {string} inType A string representing the type of event to create\n * @para m {Event} inEvent A platform event with a target\n * @return {Event} A Point erEvent of type `inType`\n */\n makeEvent: function(inType, inEvent) {\n var e = eventFactory.makePointerEvent(inType, inEvent);\n e.preventDef ault = inEvent.preventDefault;\n e.tapPrevented = inEvent.tapPrevented;\n e._target = e._target || inEvent.target;\n return e;\n },\n // ma ke and dispatch an event in one call\n fireEvent: function(inType, inEvent) { \n var e = this.makeEvent(inType, inEvent);\n return this.dispatchEven t(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable prop erties.\n *\n * @param {Event} inEvent An event that contains properties to copy.\n * @return {Object} An object containing shallow copies of `inEve nt`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROPS .length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n // Return the <use> element that is represented by the instance for Safari , Chrome, IE.\n // This is the behavior implemented by Firefox.\n if (p === 'target' || p === 'relatedTarget') {\n if (HAS_SVG_INSTANCE & & eventCopy[p] instanceof SVGElementInstance) {\n eventCopy[p] = even tCopy[p].correspondingUseElement;\n }\n }\n }\n // kee p the semantics of preventDefault\n eventCopy.preventDefault = function() { \n inEvent.preventDefault();\n };\n return eventCopy;\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Even t} inEvent The event to be dispatched.\n * @return {Boolean} True if an even t handler returns true, false otherwise.\n */\n dispatchEvent: function(i nEvent) {\n var t = inEvent._target;\n if (t) {\n t.dispatchEve nt(inEvent);\n // clone the event for the gesture system to process\n // clone after dispatch to pick up gesture prevention code\n var clon e = this.cloneEvent(inEvent);\n clone.target = t;\n this.fillGestu reQueue(clone);\n }\n },\n gestureTrigger: function() {\n // pro cess the gesture queue\n for (var i = 0, e; i < this.gestureQueue.length; i ++) {\n e = this.gestureQueue[i];\n for (var j = 0, g, fn; j < thi s.gestures.length; j++) {\n g = this.gestures[j];\n fn = g[e.t ype];\n if (g.enabled && fn) {\n fn.call(g, e);\n } \n }\n }\n this.gestureQueue.length = 0;\n },\n fillGestu reQueue: function(ev) {\n // only trigger the gesture queue once\n if (!this.gestureQueue.length) {\n requestAnimationFrame(this.boundGestureTr igger);\n }\n this.gestureQueue.push(ev);\n }\n };\n dispatcher.b oundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGestu reTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher = di spatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` funct ion\n *\n * If `handler` is the first listener for `gesture`, the underlying gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @pa ram {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.activateGesture = function(node, gesture) {\n var g = gesture.toLower Case();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var r ecognizer = dispatcher.gestures[dep.index];\n if (dep.listeners === 0) {\n if (recognizer) {\n recognizer.enabled = true;\n }\n }\n dep.listeners++;\n if (!node._pgListeners) {\n dispatcher. register(node);\n node._pgListeners = 0;\n }\n // TODO(dfreedm) : re-evaluate bookkeeping to avoid using attributes\n if (recognizer) {\n var touchAction = recognizer.defaultActions && recognizer.defaultActions[g ];\n var actionNode;\n switch(node.nodeType) {\n case Nod e.ELEMENT_NODE:\n actionNode = node;\n break;\n cas e Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node.host;\n b reak;\n default:\n actionNode = null;\n break;\n }\n if (touchAction && actionNode && !actionNode.hasAttribute('touch -action')) {\n actionNode.setAttribute('touch-action', touchAction);\n }\n }\n node._pgListeners++;\n }\n return Boolean(dep);\n };\n\n /**\n *\n * Listen for `gesture` from `node` with `handler` functi on.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture\n */\n scope.addEventListe ner = function(node, gesture, handler, capture) {\n if (handler) {\n sco pe.activateGesture(node, gesture);\n node.addEventListener(gesture, handler , capture);\n }\n };\n\n /**\n * Tears down the gesture configuration for `node`\n *\n * If `handler` is the last listener for `gesture`, the underly ing gesture recognizer is disabled.\n *\n * @param {Element} node\n * @par am {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.deactivateGesture = function(node, gesture) {\n var g = gesture.toLowe rCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n if ( dep.listeners > 0) {\n dep.listeners--;\n }\n if (dep.listeners === 0) {\n var recognizer = dispatcher.gestures[dep.index];\n if (recognizer) {\n recognizer.enabled = false;\n }\n }\n if (node._pgListeners > 0) {\n node._pgListeners--;\n }\n if ( node._pgListeners === 0) {\n dispatcher.unregister(node);\n }\n } \n return Boolean(dep);\n };\n\n /**\n * Stop listening for `gesture` fro m `node` with `handler` function.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture \n */\n scope.removeEventListener = function(node, gesture, handler, capture) {\n if (handler) {\n scope.deactivateGesture(node, gesture);\n nod e.removeEventListener(gesture, handler, capture);\n }\n };\n})(window.Polyme rGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All right s reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be foun d at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors m ay be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP r ights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function (sco pe) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.point ermap;\n // radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n var mouseEvent s = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mou sedown',\n 'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'do wn',\n 'up',\n 'move'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(targe t) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n // collide with the global mouse listener\n isEventSimulatedFromTouc h: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent .clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l & & (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); \n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.i sPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._source = 'm ouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap. has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some elements n ot sending mouseup\n // http://crbug/149091\n if (p) {\n this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(this.POINT ER_ID, e.target);\n dispatcher.down(e);\n }\n },\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var target = pointermap.get(this.POINTER_ID);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n // handle case where we missed a mouseup\n if (e.buttons === 0) {\n dispatcher.cancel(e);\n this.cleanupMouse();\n } el se {\n dispatcher.move(e);\n }\n }\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv ent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\ n dispatcher.up(e);\n this.cleanupMouse();\n }\n },\n c leanupMouse: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.githu b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer. github.io/AUTHORS.txt\n * The complete set of contributors may be found at http: //polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t he polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatch er = scope.dispatcher;\n var allShadows = scope.targetFinding.allShadows.bind(s cope.targetFinding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This should be long enough to ignore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\ n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATTRIB = 'touch -action';\n // TODO(dfreedm): disable until http://crbug.com/399765 is resolved \n // var HAS_TOUCH_ACTION = ATTRIB in document.head.style;\n var HAS_TOUCH_AC TION = false;\n\n // handler block for native touch events\n var touchEvents = {\n events: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n exposes: [\n 'down',\n 'up',\n 'm ove'\n ],\n register: function(target, initial) {\n if (initial) {\n return;\n }\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.event s);\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x ',\n YSCROLLER: 'pan-y',\n },\n touchActionToScrollType: function(tou chAction) {\n var t = touchAction;\n var st = this.scrollTypes;\n if (t === st.EMITTER) {\n return 'none';\n } else if (t === st.XSCR OLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n r eturn 'Y';\n } else {\n return 'XY';\n }\n },\n POINTER_T YPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch : function(inTouch) {\n // set primary touch if there no pointers, or the o nly pointer is the mouse\n if (pointermap.pointers() === 0 || (pointermap.p ointers() === 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.iden tifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n this.scrolling = null;\n this.cancelResetClickCount();\n }\n } ,\n removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimar y) {\n this.firstTouch = null;\n this.firstXY = null;\n thi s.resetClickCount();\n }\n },\n clickCount: 0,\n resetId: null,\n resetClickCount: function() {\n var fn = function() {\n this.clic kCount = 0;\n this.resetId = null;\n }.bind(this);\n this.reset Id = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: fu nction() {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n },\n typeToButtons: function(type) {\n var ret = 0;\n if ( type === 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n return ret;\n },\n findTarget: function(touch, id) {\n if (this.cu rrentTouchEvent.type === 'touchstart') {\n if (this.isPrimaryTouch(touch) ) {\n var fastPath = {\n clientX: touch.clientX,\n clientY: touch.clientY,\n path: this.currentTouchEvent.path,\n target: this.currentTouchEvent.target\n };\n return sco pe.findTarget(fastPath);\n } else {\n return scope.findTarget(to uch);\n }\n }\n // reuse target we found in touchstart\n r eturn pointermap.get(id);\n },\n touchToPointer: function(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch );\n // Spec specifies that pointerId 1 is reserved for Mouse.\n // To uch identifiers can start at 0.\n // Add 2 to the touch identifier for comp atibility.\n var id = e.pointerId = inTouch.identifier + 2;\n e.target = this.findTarget(inTouch, id);\n e.bubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.buttons = this.typeToButtons(c te.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pressure = i nTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryT ouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n e._source = 'tou ch';\n // forward touch preventDefaults\n var self = this;\n e.pr eventDefault = function() {\n self.scrolling = false;\n self.first XY = null;\n cte.preventDefault();\n };\n return e;\n },\n processTouches: function(inEvent, inFunction) {\n var tl = inEvent.change dTouches;\n this.currentTouchEvent = inEvent;\n for (var i = 0, t, p; i < tl.length; i++) {\n t = tl[i];\n p = this.touchToPointer(t);\n if (inEvent.type === 'touchstart') {\n pointermap.set(p.pointer Id, p.target);\n }\n if (pointermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n if (inEvent.type === 'touchend' | | inEvent._cancel) {\n this.cleanUpPointer(p);\n }\n }\n },\n // For single axis scrollers, determines whether the element should emi t\n // pointer events or behave as a scroller\n shouldScroll: function(inE vent) {\n if (this.firstXY) {\n var ret;\n var touchAction = scope.targetFinding.findTouchAction(inEvent);\n var scrollAxis = this.tou chActionToScrollType(touchAction);\n if (scrollAxis === 'none') {\n // this element is a touch-action: none, should never scroll\n ret = false;\n } else if (scrollAxis === 'XY') {\n // this element s hould always scroll\n ret = true;\n } else {\n var t = inEvent.changedTouches[0];\n // check the intended scroll axis, and oth er axis\n var a = scrollAxis;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n // if delta in the scroll axis > delta other axis, scroll instead of\n // ma king events\n ret = da >= doa;\n }\n return ret;\n } \n },\n findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL. length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\ n return true;\n }\n }\n },\n // In some instances, a touchstart can happen without a touchend. This\n // leaves the pointermap in a broken state.\n // Therefore, on every touchstart, we remove the touches t hat did not fire a\n // touchend event.\n // To keep state globally consis tent, we fire a\n // pointercancel for this \"abandoned\" touch\n vacuumTo uches: function(inEvent) {\n var tl = inEvent.touches;\n // pointermap .pointers() should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointermap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(function(value, key) {\n // Never rem ove pointerId == 1, which is mouse.\n // Touch identifiers are 2 smalle r than their pointerId, which is the\n // index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key - 2)) {\n var p = value;\ n d.push(p);\n }\n }, this);\n d.forEach(funct ion(p) {\n this.cancel(p);\n pointermap.delete(p.pointerId);\n });\n }\n },\n touchstart: function(inEvent) {\n this.va cuumTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this. clickCount++;\n this.processTouches(inEvent, this.down);\n }\n }, \n down: function(inPointer) {\n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n if (HAS_TOUCH_ACTION) {\n // touc hevent.cancelable == false is sent when the page is scrolling under native Touch Action in Chrome 36\n // https://groups.google.com/a/chromium.org/d/msg/ input-dev/wHnyukcYBcA/b9kmtwM1jJQJ\n if (inEvent.cancelable) {\n this.processTouches(inEvent, this.move);\n }\n } else {\n if (!this.scrolling) {\n if (this.scrolling === null && this.shouldScroll (inEvent)) {\n this.scrolling = true;\n } else {\n this.scrolling = false;\n inEvent.preventDefault();\n th is.processTouches(inEvent, this.move);\n }\n } else if (this.fir stXY) {\n var t = inEvent.changedTouches[0];\n var dx = t.clie ntX - this.firstXY.X;\n var dy = t.clientY - this.firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if (dd >= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.scrolling = true;\n this.firstXY = null;\n }\n }\n }\n },\n move: fun ction(inPointer) {\n dispatcher.move(inPointer);\n },\n touchend: fun ction(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.processTouche s(inEvent, this.up);\n },\n up: function(inPointer) {\n inPointer.rel atedTarget = scope.findTarget(inPointer);\n dispatcher.up(inPointer);\n },\n cancel: function(inPointer) {\n dispatcher.cancel(inPointer);\n },\n touchcancel: function(inEvent) {\n inEvent._cancel = true;\n t his.processTouches(inEvent, this.cancel);\n },\n cleanUpPointer: function( inPointer) {\n pointermap['delete'](inPointer.pointerId);\n this.remov ePrimaryPointer(inPointer);\n },\n // prevent synth mouse events from crea ting pointer events\n dedupSynthMouse: function(inEvent) {\n var lts = s cope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n / / only the primary finger will synth mouse events\n if (this.isPrimaryTouch (t)) {\n // remember x/y of last touch\n var lt = {x: t.clientX, y : t.clientY};\n lts.push(lt);\n var fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice( i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DED UP_TIMEOUT);\n }\n }\n };\n\n scope.touchEvents = touchEvents;\n})(win dow.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun ction(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatc her.pointermap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window. MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n event s: [\n 'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n register: function(target) {\n if (target !== document) {\n return;\n }\n dispatcher.listen(target, this .events);\n },\n unregister: function(target) {\n dispatcher.unlisten (target, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavaila ble',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: fu nction(inEvent) {\n var e = inEvent;\n e = dispatcher.cloneEvent(inEve nt);\n if (HAS_BITMAP_TYPE) {\n e.pointerType = this.POINTER_TYPES[i nEvent.pointerType];\n }\n e._source = 'ms';\n return e;\n },\ n cleanup: function(id) {\n pointermap['delete'](id);\n },\n MSPoi nterDown: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(inEvent.pointerId, e .target);\n dispatcher.down(e);\n },\n MSPointerMove: function(inEven t) {\n var e = this.prepareEvent(inEvent);\n e.target = pointermap.get (e.pointerId);\n dispatcher.move(e);\n },\n MSPointerUp: function(inE vent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scop e.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dis patcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCan cel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.rel atedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.point erId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This c ode may only be used under the BSD style license found at http://polymer.github. io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.gi thub.io/AUTHORS.txt\n * The complete set of contributors may be found at http:// polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at h ttp://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEv ents = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'poin terup',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n return e;\n },\n register: function(target) {\n if (target !== docu ment) {\n return;\n }\n dispatcher.listen(target, this.events); \n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.events);\n },\n cleanup: function(id) {\n pointermap['delete'](i d);\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEve nt(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set( e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointermove: fun ction(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.target = po intermap.get(e.pointerId);\n dispatcher.move(e);\n },\n pointerup: fu nction(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTar get = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\ n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n po intercancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get (e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerI d);\n }\n };\n\n scope.pointerEvents = pointerEvents;\n})(window.PolymerGes tures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights re served.\n * This code may only be used under the BSD style license found at http ://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may b e found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Goo gle as part of the polymer project is also\n * subject to an additional IP right s grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This modul e contains the handlers for native platform events.\n * From here, the dispatche r is called to create unified pointer events.\n * Included are touch events (v1) , mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var nav = window.navigator;\n\n if (window.PointerEvent) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else if (nav.msPointerEnabled) {\n dispatcher.registerSource('ms', scope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if ( window.ontouchstart !== undefined) {\n dispatcher.registerSource('touch', s cope.touchEvents);\n /*\n * NOTE: an empty touch listener on body wil l reactivate nodes imported from templates with touch listeners\n * Removi ng it will re-break the nodes\n *\n * Work around for https://bugs.w ebkit.org/show_bug.cgi?id=135628\n */\n var isSafari = nav.userAgent. match('Safari') && !nav.userAgent.match('Chrome');\n if (isSafari) {\n document.body.addEventListener('touchstart', function(){});\n }\n }\n }\n dispatcher.register(document, true);\n})(window.PolymerGestures);\n","/*\ n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Thi s code may only be used under the BSD style license found at http://polymer.gith ub.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer .github.io/AUTHORS.txt\n * The complete set of contributors may be found at http ://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found a t http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event denotes the be ginning of a series of tracking events.\n *\n * @module PointerGestures\n * @sub module Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x directio n since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @type Number\n * @property dy\n */\n/** \n * Pixels moved in the x direction since the last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the last track .\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position of the t rack gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clientY p osition of the track gesture.\n * @type Number\n * @property clientY\n */\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @property pageX \n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @pr operty pageY\n */\n/**\n * The screenX position of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n * The screenY position of the track ges ture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis direc tion of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The last y axis direction of the pointer.\n * @type Number\n * @property yDirection \n */\n/**\n * A shared object between all tracking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The element currently under the pointer.\n * @type Element\n * @property relatedTarget\n */\n/**\n * The type of pointer that make the track gesture.\n * @type String\n * @property pointerType\n */\n/**\n *\n * This event fires for all pointer movement being tracked.\n *\n * @class tr ack\n * @extends trackstart\n */\n/**\n * This event fires when the pointer is n o longer being tracked.\n *\n * @class trackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var track = {\n events: [\n 'down',\n 'move',\n 'up',\n ],\n exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n 'track y',\n 'trackend'\n ],\n defaultActions: {\n 'track': 'none',\ n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGGLE_THRES HOLD: 4,\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1 ;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.pageY - inA.pageY;\n }\n return {x: x, y: y};\n },\n fir eTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrackingDa ta;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clampDir(dd.x);\n } else if (inType === 'trackx') { \n return;\n }\n if (dd.y) {\n t.yDirection = this.c lampDir(dd.y);\n } else if (inType === 'tracky') {\n return;\n }\n var gestureProto = {\n bubbles: true,\n cancelable: true,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.relate dTarget,\n pointerType: inEvent.pointerType,\n pointerId: inEven t.pointerId,\n _source: 'track'\n };\n if (inType !== 'track y') {\n gestureProto.x = inEvent.x;\n gestureProto.dx = d.x;\n gestureProto.ddx = dd.x;\n gestureProto.clientX = inEvent.clientX ;\n gestureProto.pageX = inEvent.pageX;\n gestureProto.screenX = inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n }\n if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n gest ureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n gestureProt o.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.pageY;\n gestureProto.screenY = inEvent.screenY;\n gestureProto.yDirection = t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(inType, g estureProto);\n t.downTarget.dispatchEvent(e);\n },\n down: functi on(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEvent: in Event,\n downTarget: inEvent.target,\n trackInfo: {},\n lastMoveEvent: null,\n xDirection: 0,\n yDirection: 0, \n tracking: false\n };\n pointermap.set(inEvent.point erId, p);\n }\n },\n move: function(inEvent) {\n var p = poi ntermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD) {\n p.tracking = true;\n p.lastMoveEvent = p.downEvent;\n this.fireTrack('trackstart', inEvent, p);\n }\n }\n if (p.tracking) {\n this.fireTrack('track', inEvent, p);\n this.fireTrack('trackx', inEvent, p);\n this.fireTrack('tracky', inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\n }, \n up: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId) ;\n if (p) {\n if (p.tracking) {\n this.fireTrack('track end', inEvent, p);\n }\n pointermap.delete(inEvent.pointerId);\n }\n }\n };\n dispatcher.registerGesture('track', track);\n })(win dow.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\ n * This event is fired when a pointer is held down for 200ms.\n *\n * @module P ointerGestures\n * @submodule Events\n * @class hold\n */\n/**\n * Type of point er that made the holding event.\n * @type String\n * @property pointerType\n */\ n/**\n * Screen X axis position of the held pointer\n * @type Number\n * @proper ty clientX\n */\n/**\n * Screen Y axis position of the held pointer\n * @type Nu mber\n * @property clientY\n */\n/**\n * Type of pointer that made the holding e vent.\n * @type String\n * @property pointerType\n */\n/**\n * This event is fir ed every 200ms while a pointer is held down.\n *\n * @class holdpulse\n * @exten ds hold\n */\n/**\n * Milliseconds pointer has been held down.\n * @type Number\ n * @property holdTime\n */\n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var disp atcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n HOLD _DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not countin g as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'down',\n 'mov e',\n 'up',\n ],\n exposes: [\n 'hold',\n 'holdpulse',\n 'release'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: fun ction() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(this. holdJob);\n if (this.held) {\n this.fireHold('release');\n }\n this.held = false;\n this.heldPointer = null;\n this.target = nul l;\n this.holdJob = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\ n this.target = inEvent.target;\n this.holdJob = setInterval(this. pulse.bind(this), this.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerI d) {\n this.cancel();\n }\n },\n move: function(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\ n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = in Event.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > this.WI GGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fir eHold: function(inType, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable: true,\n pointerType: this.heldPointer.pointerType,\n pointerId: this.heldPointer.pointerId,\n x: this.heldPointer.clien tX,\n y: this.heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGestureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n dispatcher.registerGesture('hold', hold);\n})(window.PolymerGestu res);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese rved.\n * This code may only be used under the BSD style license found at http:/ /polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl e as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event i s fired when a pointer quickly goes down and up, and is used to\n * denote activ ation.\n *\n * Any gesture event can prevent the tap event from being created by calling\n * `event.preventTap`.\n *\n * Any pointer event can prevent the tap b y setting the `tapPrevented` property\n * on itself.\n *\n * @module PointerGest ures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of the t ap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap.\n * @property y\n * @type Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property pointerType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'down' ,\n 'up'\n ],\n exposes: [\n 'tap'\n ],\n down: function(i nEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\n poin termap.set(inEvent.pointerId, {\n target: inEvent.target,\n bu ttons: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent.cli entY\n });\n }\n },\n shouldTap: function(e, downState) {\n if (e.pointerType === 'mouse') {\n // only allow left click to tap for mouse\n return downState.buttons === 1;\n }\n return !e.tapPre vented;\n },\n up: function(inEvent) {\n var start = pointermap.get(i nEvent.pointerId);\n if (start && this.shouldTap(inEvent, start)) {\n // up.relatedTarget is target currently under finger\n var t = scope.ta rgetFinding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n var e = eventFactory.makeGestureEvent('tap', {\n bubbles: true,\n cancelable: true,\n x: inEvent.clientX,\n y: in Event.clientY,\n detail: inEvent.detail,\n pointerType: in Event.pointerType,\n pointerId: inEvent.pointerId,\n altKe y: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\n metaKey: inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\n _source: 'tap'\n });\n t.dispatchEvent(e);\n }\n }\n p ointermap.delete(inEvent.pointerId);\n }\n };\n // patch eventFactory to re move id from tap's pointermap for preventTap calls\n eventFactory.preventTap = function(e) {\n return function() {\n e.tapPrevented = true;\n poin termap.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap', t ap);\n})(window.PolymerGestures);\n","/*\n Copyright (C) 2013 Ariya Hidayat <ar iya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com> \n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekesteij n <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixar. com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C ) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya Hi dayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the followi ng conditions are met:\n\n * Redistributions of source code must retain the a bove copyright\n notice, this list of conditions and the following disclaim er.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n d ocumentation and/or other materials provided with the distribution.\n\n THIS SO FTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND AN Y EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED W ARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAI MED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIA BILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADV ISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n 'use st rict';\n\n var Token,\n TokenName,\n Syntax,\n Messages, \n source,\n index,\n length,\n delegate,\n l ookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Identifier ';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token .Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression',\n BinaryExpre ssion: 'BinaryExpression',\n CallExpression: 'CallExpression',\n C onditionalExpression: 'ConditionalExpression',\n EmptyStatement: 'EmptySt atement',\n ExpressionStatement: 'ExpressionStatement',\n Identifi er: 'Identifier',\n Literal: 'Literal',\n LabeledStatement: 'Label edStatement',\n LogicalExpression: 'LogicalExpression',\n MemberEx pression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpression : 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\n\n / / Error messages should be identical to V8.\n Messages = {\n Unexpecte dToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\\' ',\n Redeclaration: '%0 \\'%1\\' has already been declared'\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is onl y to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT us e this to enforce a certain condition on any user input.\n\n function assert( condition, message) {\n if (!condition) {\n throw new Error('A SSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Space \n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) || // tab\n (ch === 0xB) ||\n (c h === 0xC) ||\n (ch === 0xA0) ||\n (ch >= 0x1680 && '\\u16 80\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\ \u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n } \n\n // 7.6 Identifier Names and Identifiers\n\n function isIdentifierStar t(ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (unde rscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart(ch ) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (undersco re)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 9 7 && ch <= 122) || // a..z\n (ch >= 48 && ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n }\n\n // 7.4 Comments\n\n function skipWhi tespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(ind ex))) {\n ++index;\n }\n }\n\n function getIdentifier() { \n var start, ch;\n\n start = index++;\n while (index < len gth) {\n ch = source.charCodeAt(index);\n if (isIdentifier Part(ch)) {\n ++index;\n } else {\n bre ak;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n s tart = index;\n\n id = getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier. \n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else i f (id === 'null') {\n type = Token.NullLiteral;\n } else if (i d === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctu ator() {\n var start = index,\n code = source.charCodeAt(index ),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character punct uators.\n case 46: // . dot\n case 40: // ( open bracket\n case 41: // ) close bracket\n case 59: // ; semicolon\n ca se 44: // , comma\n case 123: // { open curly brace\n case 125: // } close curly brace\n case 91: // [\n case 93: // ]\n case 58: // :\n case 63: // ?\n ++index;\n return {\n type: Token.Punctuator,\n value: String .fromCharCode(code),\n range: [start, index]\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assignment or comparison operator.\n if (code2 === 61) {\n switch (code) {\n case 37: // %\n case 38: // &\n case 42: // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 62: // >\n case 124: // |\n index += 2;\n return {\n type: Token.Punctuator,\n valu e: String.fromCharCode(code) + String.fromCharCode(code2),\n range: [start, index]\n };\n\n case 33: // !\n case 61: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 6 1) {\n ++index;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n range: [start, index]\n };\n default:\n b reak;\n }\n }\n break;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // Oth er 2-character punctuators: && ||\n\n if (ch1 === ch2 && ('&|'.indexOf(ch 1) >= 0)) {\n index += 2;\n return {\n type : Token.Punctuator,\n value: ch1 + ch2,\n range: [ start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf(c h1) >= 0) {\n ++index;\n return {\n type: T oken.Punctuator,\n value: ch1,\n range: [start, in dex]\n };\n }\n\n throwError({}, Messages.UnexpectedTok en, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNumeri cLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Nume ric literal must start with a decimal digit or a decimal point');\n\n sta rt = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex numbe r starts with '0x'.\n // Octal number starts with '0'.\n i f (number === '0') {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\ n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCode At(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n n umber += source[index++];\n while (isDecimalDigit(source.charCodeAt(i ndex))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\ n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n r eturn {\n type: Token.NumericLiteral,\n value: parseFloat( number),\n range: [start, index]\n };\n }\n\n // 7.8.4 S tring Literals\n\n function scanStringLiteral() {\n var str = '', quot e, start, ch, octal = false;\n\n quote = source[index];\n assert(( quote === '\\'' || quote === '\"'),\n 'String literal must starts wit h a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if ( ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n b reak;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n defau lt:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt (0))) {\n break;\n } else {\n str += ch ;\n }\n }\n\n if (quote !== '') {\n throwErr or({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n range: [start, index]\n };\n }\n\n function is IdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.Boolea nLiteral ||\n token.type === Token.NullLiteral;\n }\n\n functio n advance() {\n var ch;\n\n skipWhitespace();\n\n if (index >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\n ch = source.c harCodeAt(index);\n\n // Very common: ( and ) and ;\n if (ch === 4 0 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\ n\n // String literal starts with single quote (#39) or double quote (#34 ).\n if (ch === 39 || ch === 34) {\n return scanStringLiteral( );\n }\n\n if (isIdentifierStart(ch)) {\n return scanId entifier();\n }\n\n // Dot (.) char #46 can also start a floating- point number, hence the need\n // to check the next character.\n i f (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) { \n return scanNumericLiteral();\n }\n retur n scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.range[1];\n\n lookahead = advance();\n\n inde x = token.range[1];\n\n return token;\n }\n\n function peek() {\n var pos;\n\n pos = index;\n lookahead = advance();\n index = pos;\n }\n\n // Throw an exception\n\n function throwError(toke n, messageFormat) {\n var error,\n args = Array.prototype.slic e.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function (whole, index) {\n asse rt(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n error = ne w Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n }\n\n // Throw an exception because of the token.\n\ n function throwUnexpected(token) {\n throwError(token, Messages.Unexp ectedToken, token.value);\n }\n\n // Expect the next token to match the sp ecified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.P unctuator || token.value !== value) {\n throwUnexpected(token);\n }\n }\n\n // Return true if the next token matches the specified punct uator.\n\n function match(value) {\n return lookahead.type === Token.P unctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (char #59).\n if (source.charCodeAt(index ) === 59) {\n lex();\n return;\n }\n\n skipW hitespace();\n\n if (match(';')) {\n lex();\n retur n;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n\n // 11.1.4 Array In itialiser\n\n function parseArrayInitialiser() {\n var elements = [];\ n\n expect('[');\n\n while (!match(']')) {\n if (match( ',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n expect(']');\n\n return delegate.createArr ayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n functi on parseObjectPropertyKey() {\n var token;\n\n skipWhitespace();\n token = lex();\n\n // Note: This function is called only from par seObjectProperty(), where\n // EOF and Punctuator tokens are already filt ered out.\n if (token.type === Token.StringLiteral || token.type === Toke n.NumericLiteral) {\n return delegate.createLiteral(token);\n }\n\n return delegate.createIdentifier(token.value);\n }\n\n functi on parseObjectProperty() {\n var token, key;\n\n token = lookahead ;\n skipWhitespace();\n\n if (token.type === Token.EOF || token.ty pe === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n key = parseObjectPropertyKey();\n expect(':');\n return dele gate.createProperty('init', key, parseExpression());\n }\n\n function pars eObjectInitialiser() {\n var properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty() );\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return delegate.createObjectExpr ession(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n functio n parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n retu rn parseGroupExpression();\n }\n\n type = lookahead.type;\n\n if (type === Token.Identifier) {\n expr = delegate.createIdentifie r(lex().value);\n } else if (type === Token.StringLiteral || type === Tok en.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keyword) {\n if (matchKeyword('this')) {\n lex();\n expr = delegate.createThisExpression();\ n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = delegate.createLiteral(token);\n } else if (type === Token.NullL iteral) {\n token = lex();\n token.value = null;\n expr = delegate.createLiteral(token);\n } else if (match('[')) {\n expr = parseArrayInitialiser();\n } else if (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n if (expr) {\n return expr;\n }\n\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token;\n\n token = lex();\n\n if (!isIdentifierName(token)) { \n throwUnexpected(token);\n }\n\n return delegate.crea teIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n f unction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\ n }\n\n function parseLeftHandSideExpression() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n while (true) {\ n if (match('[')) {\n property = parseComputedMember() ;\n expr = delegate.createMemberExpression('[', expr, property);\ n } else if (match('.')) {\n property = parseNonComput edMember();\n expr = delegate.createMemberExpression('.', expr, p roperty);\n } else if (match('(')) {\n args = parseArg uments();\n expr = delegate.createCallExpression(expr, args);\n } else {\n break;\n }\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfixEx pression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operators\n\n fu nction parseUnaryExpression() {\n var token, expr;\n\n if (lookahe ad.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('+') || match('-') | | match('!')) {\n token = lex();\n expr = parseUnaryExpres sion();\n expr = delegate.createUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeywor d('typeof')) {\n throwError({}, Messages.UnexpectedToken);\n } else {\n expr = parsePostfixExpression();\n }\n\n retu rn expr;\n }\n\n function binaryPrecedence(token) {\n var prec = 0; \n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '==':\n case '!=': \n case '===':\n case '!==':\n prec = 6;\n b reak;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = 7;\n break;\n\n case '+ ':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return pre c;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operator s\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Bi nary Logical Operators\n\n function parseBinaryExpression() {\n var ex pr, token, prec, stack, right, operator, left, i;\n\n left = parseUnaryEx pression();\n\n token = lookahead;\n prec = binaryPrecedence(token );\n if (prec === 0) {\n return left;\n }\n toke n.prec = prec;\n lex();\n\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lo okahead)) > 0) {\n\n // Reduce: make a binary expression from the thr ee topmost entries.\n while ((stack.length > 2) && (prec <= stack[sta ck.length - 2].prec)) {\n right = stack.pop();\n o perator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n \n // Final reduce to clean-up the stack.\n i = stack.length - 1;\ n expr = stack[i];\n while (i > 1) {\n expr = delegate. createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i - = 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional Ope rator\n\n function parseConditionalExpression() {\n var expr, conseque nt, alternate;\n\n expr = parseBinaryExpression();\n\n if (match(' ?')) {\n lex();\n consequent = parseConditionalExpression( );\n expect(':');\n alternate = parseConditionalExpression ();\n\n expr = delegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n // Simplification since we do not support AssignmentExpression.\n var parseExpression = parseCo nditionalExpression;\n\n // Polymer Syntax extensions\n\n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\" Fi lterArguments \")\"\n\n function parseFilter() {\n var identifier, arg s;\n\n identifier = lex();\n\n if (identifier.type !== Token.Ident ifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return delegate.createFilter(iden tifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n // Filters \"|\" Filter\n\n function parseFilters() {\n while (match('| ')) {\n lex();\n parseFilter();\n }\n }\n\n / / TopLevel ::\n // LabelledExpressions\n // AsExpression\n // InE xpression\n // FilterExpression\n\n // AsExpression ::\n // FilterE xpression as Identifier\n\n // InExpression ::\n // Identifier, Identifi er in FilterExpression\n // Identifier in FilterExpression\n\n // Filter Expression ::\n // Expression\n // Expression Filters\n\n function parseTopLevel() {\n skipWhitespace();\n peek();\n\n var exp r = parseExpression();\n if (expr) {\n if (lookahead.value === ',' || lookahead.value == 'in' &&\n expr.type === Syntax. Identifier) {\n parseInExpression(expr);\n } else {\n parseFilters();\n if (lookahead.value === 'as') {\ n parseAsExpression(expr);\n } else {\n delegate.createTopLevel(expr);\n }\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnexpe cted(lookahead);\n }\n }\n\n function parseAsExpression(expr) {\n lex(); // as\n var identifier = lex().value;\n delegate.cre ateAsExpression(expr, identifier);\n }\n\n function parseInExpression(iden tifier) {\n var indexName;\n if (lookahead.value === ',') {\n lex();\n if (lookahead.type !== Token.Identifier)\n throwUnexpected(lookahead);\n indexName = lex().value;\n }\n\n lex(); // in\n var expr = parseExpression();\n parse Filters();\n delegate.createInExpression(identifier.name, indexName, expr );\n }\n\n function parse(code, inDelegate) {\n delegate = inDelega te;\n source = code;\n index = 0;\n length = source.length; \n lookahead = null;\n state = {\n labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);\n","// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n// This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n// The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n// The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n// C ode distributed by Google as part of the polymer project is also\n// subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n( function (global) {\n 'use strict';\n\n function prepareBinding(expressionText , name, node, filterRegistry) {\n var expression;\n try {\n expressio n = getExpression(expressionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE ' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error ('as and in can only be used within <template bind/repeat>');\n }\n } ca tch (ex) {\n console.error('Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n return function(model, node, oneTime) {\n var binding = expression.getBinding(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIdent)\n node.pol ymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bind ing;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expressionP arseCache = Object.create(null);\n\n function getExpression(expressionText) {\n var expression = expressionParseCache[expressionText];\n if (!expression) {\n var delegate = new ASTDelegate();\n esprima.parse(expressionText, delegate);\n expression = new Expression(delegate);\n expressionParse Cache[expressionText] = expression;\n }\n return expression;\n }\n\n fun ction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;\ n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.valu eFn_) {\n var value = this.value;\n this.valueFn_ = function() {\n return value;\n }\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = P ath.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n var path = this .path;\n this.valueFn_ = function(model, observer) {\n if (obser ver)\n observer.addPath(model, path);\n\n return path.getVal ueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.path.length == 1);\n model = findScope(model, this.path[0]);\n\n return this.path.setValueFro m(model, newValue);\n }\n };\n\n function MemberExpression(object, property , accessor) {\n this.computed = accessor == '[';\n\n this.dynamicDeps = ty peof object == 'function' ||\n object.dynamicDeps ||\n (this.computed && !(property instanceof Literal));\n\n thi s.simplePath =\n !this.dynamicDeps &&\n (property instanceof Ident Path || property instanceof Literal) &&\n (object instanceof MemberExpres sion || object instanceof IdentPath);\n\n this.object = this.simplePath ? obj ect : getFn(object);\n this.property = !this.computed || this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpression.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n var parts = this.obje ct instanceof MemberExpression ?\n this.object.fullPath.slice() : [th is.object.name];\n parts.push(this.property instanceof IdentPath ?\n this.property.name : this.property.value);\n this.fullPath_ = Path .get(parts);\n }\n\n return this.fullPath_;\n },\n\n valueFn: fu nction() {\n if (!this.valueFn_) {\n var object = this.object;\n\n if (this.simplePath) {\n var path = this.fullPath;\n\n t his.valueFn_ = function(model, observer) {\n if (observer)\n observer.addPath(model, path);\n\n return path.getValueFrom(mode l);\n };\n } else if (!this.computed) {\n var path = Pa th.get(this.property.name);\n\n this.valueFn_ = function(model, observe r, filterRegistry) {\n var context = object(model, observer, filterRe gistry);\n\n if (observer)\n observer.addPath(context, p ath);\n\n return path.getValueFrom(context);\n }\n } else {\n // Computed property.\n var property = this.property; \n\n this.valueFn_ = function(model, observer, filterRegistry) {\n var context = object(model, observer, filterRegistry);\n var p ropName = property(model, observer, filterRegistry);\n if (observer)\ n observer.addPath(context, [propName]);\n\n return cont ext ? context[propName] : undefined;\n };\n }\n }\n re turn this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue);\n return newValue;\n }\n\n var object = this.object(model);\n var propName = this.property instanceof IdentPath ? this.property.name :\n this.property(model);\n return object[propName] = newValue;\n }\n };\n\n function Filter(name, args) {\n this.name = name;\n this.args = [] ;\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(args[ i]);\n }\n }\n\n Filter.prototype = {\n transform: function(model, obser ver, filterRegistry, toModelDirection,\n initialArgs) {\n var fn = filterRegistry[this.name];\n var context = model;\n if (fn) {\n context = undefined;\n } else {\n fn = context[this. name];\n if (!fn) {\n console.error('Cannot find function or fil ter: ' + this.name);\n return;\n }\n }\n\n // If toMod elDirection is falsey, then the \"normal\" (dom-bound) direction\n // is us ed. Otherwise, it looks for a 'toModel' property function on the\n // objec t.\n if (toModelDirection) {\n fn = fn.toModel;\n } else if (ty peof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (typ eof fn != 'function') {\n console.error('Cannot find function or filter: ' + this.name);\n return;\n }\n\n var args = initialArgs || []; \n for (var i = 0; i < this.args.length; i++) {\n args.push(getFn(th is.args[i])(model, observer, filterRegistry));\n }\n\n return fn.apply (context, args);\n }\n };\n\n function notImplemented() { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': function(v) { return +v; },\n '-': function(v) { return -v; },\n '!': function(v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r) { return l*r; },\n '/': function(l, r) { return l/r; },\n '%': function(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': function(l, r) { return l >r; },\n '<=': function(l, r) { return l<=r; },\n '>=': function(l, r) { r eturn l>=r; },\n '==': function(l, r) { return l==r; },\n '!=': function(l , r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n function getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTDe legate() {\n this.expression = null;\n this.filters = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIdent = undefined;\n t his.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\n ASTDelegate .prototype = {\n createUnaryExpression: function(op, argument) {\n if (! unaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n argument = getFn(argument);\n\n return function(model, observer, filterReg istry) {\n return unaryOperators[op](argument(model, observer, filterRegi stry));\n };\n },\n\n createBinaryExpression: function(op, left, righ t) {\n if (!binaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n swi tch (op) {\n case '||':\n this.dynamicDeps = true;\n re turn function(model, observer, filterRegistry) {\n return left(model, observer, filterRegistry) ||\n right(model, observer, filterRegi stry);\n };\n case '&&':\n this.dynamicDeps = true;\n return function(model, observer, filterRegistry) {\n return l eft(model, observer, filterRegistry) &&\n right(model, observer, filterRegistry);\n };\n }\n\n return function(model, observer , filterRegistry) {\n return binaryOperators[op](left(model, observer, fi lterRegistry),\n right(model, observer, filter Registry));\n };\n },\n\n createConditionalExpression: function(test, consequent, alternate) {\n test = getFn(test);\n consequent = getFn(c onsequent);\n alternate = getFn(alternate);\n\n this.dynamicDeps = tru e;\n\n return function(model, observer, filterRegistry) {\n return t est(model, observer, filterRegistry) ?\n consequent(model, observer, filterRegistry) :\n alternate(model, observer, filterRegistry);\n }\n },\n\n createIdentifier: function(name) {\n var ident = new Ide ntPath(name);\n ident.type = 'Identifier';\n return ident;\n },\n\n createMemberExpression: function(accessor, object, property) {\n var ex = new MemberExpression(object, property, accessor);\n if (ex.dynamicDeps)\ n this.dynamicDeps = true;\n return ex;\n },\n\n createCallExp ression: function(expression, args) {\n if (!(expression instanceof IdentPa th))\n throw Error('Only identifier function invocations are allowed');\n \n var filter = new Filter(expression.name, args);\n\n return function (model, observer, filterRegistry) {\n return filter.transform(model, obse rver, filterRegistry, false);\n };\n },\n\n createLiteral: function(t oken) {\n return new Literal(token.value);\n },\n\n createArrayExpres sion: function(elements) {\n for (var i = 0; i < elements.length; i++)\n elements[i] = getFn(elements[i]);\n\n return function(model, observer, filterRegistry) {\n var arr = []\n for (var i = 0; i < elements.l ength; i++)\n arr.push(elements[i](model, observer, filterRegistry));\n return arr;\n }\n },\n\n createProperty: function(kind, key, value) {\n return {\n key: key instanceof IdentPath ? key.name : key .value,\n value: value\n };\n },\n\n createObjectExpression: f unction(properties) {\n for (var i = 0; i < properties.length; i++)\n properties[i].value = getFn(properties[i].value);\n\n return function(mod el, observer, filterRegistry) {\n var obj = {};\n for (var i = 0; i < properties.length; i++)\n obj[properties[i].key] =\n p roperties[i].value(model, observer, filterRegistry);\n return obj;\n }\n },\n\n createFilter: function(name, args) {\n this.filters.push( new Filter(name, args));\n },\n\n createAsExpression: function(expression, scopeIdent) {\n this.expression = expression;\n this.scopeIdent = sco peIdent;\n },\n\n createInExpression: function(scopeIdent, indexIdent, exp ression) {\n this.expression = expression;\n this.scopeIdent = scopeId ent;\n this.indexIdent = indexIdent;\n },\n\n createTopLevel: functio n(expression) {\n this.expression = expression;\n },\n\n createThisEx pression: notImplemented\n }\n\n function ConstantObservable(value) {\n thi s.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: function () { return this.value_; },\n discardChanges: function() { return this.value_ ; },\n deliver: function() {},\n close: function() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeIdent;\n this.ind exIdent = delegate.indexIdent;\n\n if (!delegate.expression)\n throw Err or('No expression found.');\n\n this.expression = delegate.expression;\n g etFn(this.expression); // forces enumeration of path dependencies\n\n this.fi lters = delegate.filters;\n this.dynamicDeps = delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: function(model, filterRegistry, oneT ime) {\n if (oneTime)\n return this.getValue(model, undefined, filte rRegistry);\n\n var observer = new CompoundObserver();\n // captures d eps.\n var firstValue = this.getValue(model, observer, filterRegistry);\n var firstTime = true;\n var self = this;\n\n function valueFn() {\ n // deps cannot have changed on first value retrieval.\n if (firs tTime) {\n firstTime = false;\n return firstValue;\n }\ n\n if (self.dynamicDeps)\n observer.startReset();\n\n va r value = self.getValue(model,\n self.dynamicDe ps ? observer : undefined,\n filterRegistry);\n if (self.dynamicDeps)\n observer.finishReset();\n\n retu rn value;\n }\n\n function setValueFn(newValue) {\n self.setVal ue(model, newValue, filterRegistry);\n return newValue;\n }\n\n return new ObserverTransform(observer, valueFn, setValueFn, true);\n },\n\n getValue: function(model, observer, filterRegistry) {\n var value = getF n(this.expression)(model, observer, filterRegistry);\n for (var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].transform(model, ob server, filterRegistry,\n false, [value]);\n }\n\n return v alue;\n },\n\n setValue: function(model, newValue, filterRegistry) {\n var count = this.filters ? this.filters.length : 0;\n while (count-- > 0) {\n newValue = this.filters[count].transform(model, undefined,\n filterRegistry, true, [newValue]);\n }\n\n if (this.expression.set Value)\n return this.expression.setValue(model, newValue);\n }\n }\n\ n /**\n * Converts a style property name to a css property name. For example: \n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function conver tStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, function(c ) {\n return '-' + c.toLowerCase();\n });\n }\n\n var parentScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single ident paths must bin d directly to the appropriate scope object.\n // I.e. Pushed values in two-bind ings need to be assigned to the actual model\n // object.\n function findScope (model, prop) {\n while (model[parentScopeName] &&\n !Object.protot ype.hasOwnProperty.call(model, prop)) {\n model = model[parentScopeName];\n }\n\n return model;\n }\n\n function isLiteralExpression(pathString) {\ n switch (pathString) {\n case '':\n return false;\n\n case 'false':\n case 'null':\n case 'true':\n return true;\n }\n\ n if (!isNaN(Number(pathString)))\n return true;\n\n return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpressions.prototype = {\ n // \"built-in\" filters\n styleObject: function(value) {\n var part s = [];\n for (var key in value) {\n parts.push(convertStyleProperty Name(key) + ': ' + value[key]);\n }\n return parts.join('; ');\n }, \n\n tokenList: function(value) {\n var tokens = [];\n for (var key in value) {\n if (value[key])\n tokens.push(key);\n }\n return tokens.join(' ');\n },\n\n // binding delegate API\n prepareI nstancePositionChanged: function(template) {\n var indexIdent = template.po lymerExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n re turn function(templateInstance, index) {\n templateInstance.model[indexId ent] = index;\n };\n },\n\n prepareBinding: function(pathString, name , node) {\n var path = Path.get(pathString);\n\n if (!isLiteralExpress ion(pathString) && path.valid) {\n if (path.length == 1) {\n ret urn function(model, node, oneTime) {\n if (oneTime)\n re turn path.getValueFrom(model);\n\n var scope = findScope(model, path[ 0]);\n return new PathObserver(scope, path);\n };\n } \n return; // bail out early if pathString is simple path.\n }\n\n return prepareBinding(pathString, name, node, this);\n },\n\n prepareI nstanceModel: function(template) {\n var scopeName = template.polymerExpres sionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentScop e = template.templateInstance ?\n template.templateInstance.model :\n template.model;\n\n var indexName = template.polymerExpressionIndex Ident_;\n\n return function(model) {\n return createScopeObject(pare ntScope, model, scopeName, indexName);\n };\n }\n };\n\n var createSco peObject = ('__proto__' in {}) ?\n function(parentScope, model, scopeName, in dexName) {\n var scope = {};\n scope[scopeName] = model;\n scope[ indexName] = undefined;\n scope[parentScopeName] = parentScope;\n scop e.__proto__ = parentScope;\n return scope;\n } :\n function(parentSco pe, model, scopeName, indexName) {\n var scope = Object.create(parentScope) ;\n Object.defineProperty(scope, scopeName,\n { value: model, conf igurable: true, writable: true });\n Object.defineProperty(scope, indexName ,\n { value: undefined, configurable: true, writable: true });\n O bject.defineProperty(scope, parentScopeName,\n { value: parentScope, co nfigurable: true, writable: true });\n return scope;\n };\n\n global.Po lymerExpressions = PolymerExpressions;\n PolymerExpressions.getExpression = get Expression;\n})(this);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors . All rights reserved.\n * This code may only be used under the BSD style licens e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis tributed by Google as part of the polymer project is also\n * subject to an addi tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nPolym er = {\n version: '0.3.5-5d00e4b'\n};\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS. txt\n * Code distributed by Google as part of the polymer project is also\n * su bject to an additional IP rights grant found at http://polymer.github.io/PATENTS .txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a funct ion\n// Platform is currently defining it as a function to allow for async loadi ng\n// of polymer; once we refine the loading process this likely goes away.\nif (typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n","/*\n * Copyr ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma y only be used under the BSD style license found at http://polymer.github.io/LIC ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym er project is also\n * subject to an additional IP rights grant found at http:// polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // copy own proper ties from 'api' to 'prototype, with name hinting for 'super'\n function extend( prototype, api) {\n if (prototype && api) {\n // use only own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(function(n) {\n // acquire property descriptor\n var pd = Object.getOwnPropertyDescriptor (api, n);\n if (pd) {\n // clone property via descriptor\n Object.defineProperty(prototype, n, pd);\n // cache name-of-method for 'super' engine\n if (typeof pd.value == 'function') {\n // hint the 'super' engine\n pd.value.nom = n;\n }\n }\n });\n }\n return prototype;\n }\n \n // exports\n\n scope.ext end = extend;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C ode distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */ \n\n(function(scope) {\n \n // usage\n \n // invoke cb.call(this) in 100ms, unless the job is re-registered,\n // which resets the timer\n // \n // this. myJob = this.job(this.myJob, cb, 100)\n //\n // returns a job handle which can be used to re-register a job\n\n var Job = function(inContext) {\n this.con text = inContext;\n this.boundComplete = this.complete.bind(this)\n };\n Jo b.prototype = {\n go: function(callback, wait) {\n this.callback = callb ack;\n var h;\n if (!wait) {\n h = requestAnimationFrame(this.b oundComplete);\n this.handle = function() {\n cancelAnimationFra me(h);\n }\n } else {\n h = setTimeout(this.boundComplete, wa it);\n this.handle = function() {\n clearTimeout(h);\n }\ n }\n },\n stop: function() {\n if (this.handle) {\n this .handle();\n this.handle = null;\n }\n },\n complete: function () {\n if (this.handle) {\n this.stop();\n this.callback.call (this.context);\n }\n }\n };\n \n function job(job, callback, wait) { \n if (job) {\n job.stop();\n } else {\n job = new Job(this);\n }\n job.go(callback, wait);\n return job;\n }\n \n // exports \n\n scope.job = job;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Pro ject Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complet e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\ n * Code distributed by Google as part of the polymer project is also\n * subjec t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt \n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLElement.register = function(tag, prototype) {\n registry[tag] = prototype;\n }\n\n // get prot otype mapped to node <tag>\n HTMLElement.getPrototypeForTag = function(tag) {\n var prototype = !tag ? HTMLElement.prototype : registry[tag];\n // TODO(s jmiles): creating <tag> is likely to have wasteful side-effects\n return prot otype || Object.getPrototypeOf(document.createElement(tag));\n };\n\n // we ha ve to flag propagation stoppage for the event dispatcher\n var originalStopProp agation = Event.prototype.stopPropagation;\n Event.prototype.stopPropagation = function() {\n this.cancelBubble = true;\n originalStopPropagation.apply(t his, arguments);\n };\n \n // TODO(sorvell): remove when we're sure imports d oes not need\n // to load stylesheets\n /*\n HTMLImports.importer.preloadSele ctors += \n ', polymer-element link[rel=stylesheet]';\n */\n})(Polymer);\n ","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. \r\n * This code may only be used under the BSD style license found at http://po lymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at ht tp://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Go ogle as part of the polymer project is also\r\n * subject to an additional IP ri ghts grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (functio n(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of a rgs like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles ):\r\n // $super must be installed on an instance or prototype chain\r\n // as `super`, and invoked via `this`, e.g.\r\n // `this.super();`\ r\n\r\n // will not work if function objects are not unique, for example,\ r\n // when using mixins.\r\n // The memoization strategy assumes ea ch function exists on only one \r\n // prototype chain i.e. we use the fun ction object for memoizing)\r\n // perhaps we can bookkeep on the prototyp e itself instead\r\n function $super(arrayOfArgs) {\r\n // since we are thunking a method call, performance is important here: \r\n // memoize all lookups, once memoized the fast path calls no other \r\n // functions\r\n //\r\n // find the caller (cannot be `strict` because of 'caller')\r\n var caller = $super.caller;\r\n // memoized 'name of method' \r\n var nom = caller.nom;\r\n // memoized next implementation prototype\r\n var _super = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\ n nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n if (!nom) {\r\n console.warn('called super() on a method not insta lled declaratively (has no .nom property)');\r\n }\r\n // super pr ototype is either cached or we have to find it\r\n // by searching __prot o__ (at the 'top')\r\n // invariant: because we cache _super on fn below, we never reach \r\n // here from inside a series of calls to super(), so it's ok to \r\n // start searching from the prototype of 'this' (at the 'top')\r\n // we must never memoize a null super for this reason\r\n _super = memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n // our super function\r\n var fn = _super[nom];\r\n if (fn) {\r\n // memoize information so 'fn' can call 'super'\r\n if (!fn._super) { \r\n // must not memoize null, or we lose our invariant above\r\n memoizeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherit ed method\r\n // if 'fn' is not function valued, this will throw\r\n return fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n func tion nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p && p !== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames i s absurdly expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = O bject.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'funct ion' && d.value === value) {\r\n return n;\r\n }\r\n }\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSup er(method, name, proto) {\r\n // find and cache next prototype containing ` name`\r\n // we need the prototype so we can do another lookup\r\n // from here\r\n var s = nextSuper(proto, name, method);\r\n if (s[name]) {\r\n // `s` is a prototype, the actual method is `s[name]`\r\n / / tag super method with it's name for quicker lookups\r\n s[name].nom = n ame;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n function nextSuper(proto, name, caller) {\r\n // look for an inherited prototype tha t implements name\r\n while (proto) {\r\n if ((proto[name] !== calle r) && proto[name]) {\r\n return proto;\r\n }\r\n proto = getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose o ur invariant above\r\n // in this case, a super() call was invoked where no superclass\r\n // method exists\r\n // TODO(sjmiles): thow an excepti on?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10 ) the prototype chain is faked via \r\n // __proto__. Therefore, always get p rototype via __proto__ instead of\r\n // the more standard Object.getPrototyp eOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__pro to__;\r\n }\r\n\r\n // utility function to precompute name tags for functi ons\r\n // in a (unchained) prototype\r\n function hintSuper(prototype) {\ r\n // tag functions with their prototype name to optimize\r\n // supe r call invocations\r\n for (var n in prototype) {\r\n var pd = Objec t.getOwnPropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value = == 'function') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n } \r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n" ,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n func tion noopHandler(value) {\n return value;\n }\n\n var typeHandlers = {\n string: noopHandler,\n 'undefined': noopHandler,\n date: function(value) {\n return new Date(Date.parse(value) || Date.now());\n },\n boolean: function(value) {\n if (value === '') {\n return true;\n }\n return value === 'false' ? false : !!value;\n },\n number: function(va lue) {\n var n = parseFloat(value);\n // hex values like \"0xFFFF\" pa rseFloat as 0\n if (n === 0) {\n n = parseInt(value);\n }\n return isNaN(n) ? value : n;\n // this code disabled because encoded valu es (like \"0xFFFF\")\n // do not round trip to their original format\n //return (String(floatVal) === value) ? floatVal : value;\n },\n object: function(value, currentValue) {\n if (currentValue === null) {\n ret urn value;\n }\n try {\n // If the string is an object, we can parse is with the JSON library.\n // include convenience replace for sing le-quotes. If the author omits\n // quotes altogether, parse will fail.\n return JSON.parse(value.replace(/'/g, '\"'));\n } catch(e) {\n // The object isn't valid JSON, return the raw value\n return value;\n }\n },\n // avoid deserialization of functions\n 'function': func tion(value, currentValue) {\n return currentValue;\n }\n };\n\n functi on deserializeValue(value, currentValue) {\n // attempt to infer type from de fault value\n var inferredType = typeof currentValue;\n // invent 'date' t ype value for Date\n if (currentValue instanceof Date) {\n inferredType = 'date';\n }\n // delegate deserialization via type string\n return ty peHandlers[inferredType](value, currentValue);\n }\n\n // exports\n\n scope.d eserializeValue = deserializeValue;\n\n})(Polymer);\n","/*\n * Copyright (c) 201 4 The Polymer Project Authors. All rights reserved.\n * This code may only be us ed under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.tx t\n * The complete set of contributors may be found at http://polymer.github.io/ CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project i s also\n * subject to an additional IP rights grant found at http://polymer.gith ub.io/PATENTS.txt\n */\n(function(scope) {\n\n // imports\n\n var extend = sco pe.extend;\n\n // module\n\n var api = {};\n\n api.declaration = {};\n api.i nstance = {};\n\n api.publish = function(apis, prototype) {\n for (var n in apis) {\n extend(prototype, apis[n]);\n }\n };\n\n // exports\n\n sco pe.api = api;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C ode distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */ \n\n(function(scope) {\n\n var utils = {\n /**\n * Invokes a function a synchronously. The context of the callback\n * function is bound to 'this' automatically.\n * @method async\n * @param {Function|String} method\n * @param {any|Array} args\n * @param {number} timeout\n */\n async: function(method, args, timeout) {\n // when polyfilling Object.obser ve, ensure changes \n // propagate before executing the async method\n Platform.flush();\n // second argument to `apply` must be an array\n args = (args && args.length) ? args : [args];\n // function to invoke\n var fn = function() {\n (this[method] || method).apply(this, args);\n }.bind(this);\n // execute `fn` sooner or later\n var handle = tim eout ? setTimeout(fn, timeout) :\n requestAnimationFrame(fn);\n // NOTE: switch on inverting handle to determine which time is used.\n return timeout ? handle : ~handle;\n },\n cancelAsync: function(handle) {\n if (handle < 0) {\n cancelAnimationFrame(~handle);\n } else {\n clearTimeout(handle);\n }\n },\n /**\n * Fire an event.\n * @method fire\n * @returns {Object} event\n * @param {string} type An event name.\n * @param {any} detail\n * @param {Node} onNode Targe t node.\n * @param {Boolean} bubbles Set false to prevent bubbling, default s to true\n * @param {Boolean} cancelable Set false to prevent cancellation , defaults to true\n */\n fire: function(type, detail, onNode, bubbles, cancelable) {\n var node = onNode || this;\n var detail = detail === n ull || detail === undefined ? {} : detail;\n var event = new CustomEvent(ty pe, {\n bubbles: bubbles !== undefined ? bubbles : true,\n cancela ble: cancelable !== undefined ? cancelable : true,\n detail: detail\n });\n node.dispatchEvent(event);\n return event;\n },\n /**\n * Fire an event asynchronously.\n * @method asyncFire\n * @param {string} type An event name.\n * @param detail\n * @param {Node} toNod e Target node.\n */\n asyncFire: function(/*inType, inDetail*/) {\n this.async(\"fire\", arguments);\n },\n /**\n * Remove class from ol d, add class to anew, if they exist.\n * @param classFollows\n * @para m anew A node.\n * @param old A node\n * @param className\n */\n classFollows: function(anew, old, className) {\n if (old) {\n old .classList.remove(className);\n }\n if (anew) {\n anew.classLis t.add(className);\n }\n },\n /**\n * Inject HTML which contains markup bound to this element into\n * a target element (replacing target el ement content).\n * @param String html to inject\n * @param Element ta rget element\n */\n injectBoundHTML: function(html, element) {\n va r template = document.createElement('template');\n template.innerHTML = htm l;\n var fragment = this.instanceTemplate(template);\n if (element) {\ n element.textContent = '';\n element.appendChild(fragment);\n }\n return fragment;\n }\n };\n\n // no-operation function for handy stubs\n var nop = function() {};\n\n // null-object for handy stubs\n var no b = {};\n\n // deprecated\n\n utils.asyncMethod = utils.async;\n\n // exports \n\n scope.api.instance.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\ n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All r ights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributo rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribute d by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function( scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var EVENT_PREF IX = 'on-';\n\n // instance events api\n var events = {\n // read-only\n EVENT_PREFIX: EVENT_PREFIX,\n // event listeners on host\n addHostListene rs: function() {\n var events = this.eventDelegates;\n log.events && ( Object.keys(events).length > 0) && console.log('[%s] addHostListeners:', this.lo calName, events);\n // NOTE: host events look like bindings but really are not;\n // (1) we don't want the attribute to be set and (2) we want to supp ort\n // multiple event listeners ('host' and 'instance') and Node.bind\n // by default supports 1 thing being bound.\n for (var type in events) {\n var methodName = events[type];\n PolymerGestures.addEventListe ner(this, type, this.element.getEventHandler(this, this, methodName));\n }\ n },\n // call 'method' or function method on 'obj' with 'args', if the me thod exists\n dispatchMethod: function(obj, method, args) {\n if (obj) { \n log.events && console.group('[%s] dispatch [%s]', obj.localName, metho d);\n var fn = typeof method === 'function' ? method : obj[method];\n if (fn) {\n fn[args ? 'apply' : 'call'](obj, args);\n }\n log.events && console.groupEnd();\n Platform.flush();\n }\n }\n };\n\n // exports\n\n scope.api.instance.events = events;\n\n // alias P olymerGestures event listener logic\n scope.addEventListener = PolymerGestures. addEventListener;\n scope.removeEventListener = PolymerGestures.removeEventList ener;\n\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 The Polymer Project Author s. All rights reserved.\r\n * This code may only be used under the BSD style lic ense found at http://polymer.github.io/LICENSE.txt\r\n * The complete set of aut hors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\ r\n */\r\n\r\n(function(scope) {\r\n\r\n // instance api for attributes\r\n\r\n var attributes = {\r\n copyInstanceAttributes: function () {\r\n var a $ = this._instanceAttributes;\r\n for (var k in a$) {\r\n if (!this. hasAttribute(k)) {\r\n this.setAttribute(k, a$[k]);\r\n }\r\n }\r\n },\r\n // for each attribute on this, deserialize value to proper ty as needed\r\n takeAttributes: function() {\r\n // if we have no publi sh lookup table, we have no attributes to take\r\n // TODO(sjmiles): ad hoc \r\n if (this._publishLC) {\r\n for (var i=0, a$=this.attributes, l= a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProperty(a.n ame, a.value);\r\n }\r\n }\r\n },\r\n // if attribute 'name' i s mapped to a property, deserialize\r\n // 'value' into that property\r\n attributeToProperty: function(name, value) {\r\n // try to match this attri bute to a property (attributes are\r\n // all lower-case, so this is case-i nsensitive search)\r\n var name = this.propertyForAttribute(name);\r\n if (name) {\r\n // filter out 'mustached' values, these are to be\r\n // replaced with bound-data and are not yet values\r\n // themselves \r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n re turn;\r\n }\r\n // get original value\r\n var currentValue = this[name];\r\n // deserialize Boolean or Number values from attribute\ r\n var value = this.deserializeValue(value, currentValue);\r\n // only act if the value has changed\r\n if (value !== currentValue) {\r\n // install new value (has side-effects)\r\n this[name] = value ;\r\n }\r\n }\r\n },\r\n // return the published property matc hing name, or undefined\r\n propertyForAttribute: function(name) {\r\n v ar match = this._publishLC && this._publishLC[name];\r\n //console.log('pro pertyForAttribute:', name, 'matches', match);\r\n return match;\r\n },\r \n // convert representation of 'stringValue' based on type of 'currentValue' \r\n deserializeValue: function(stringValue, currentValue) {\r\n return scope.deserializeValue(stringValue, currentValue);\r\n },\r\n serializeVal ue: function(value, inferredType) {\r\n if (inferredType === 'boolean') {\r \n return value ? '' : undefined;\r\n } else if (inferredType !== 'o bject' && inferredType !== 'function'\r\n && value !== undefined) {\r\n return value;\r\n }\r\n },\r\n reflectPropertyToAttribute: fu nction(name) {\r\n var inferredType = typeof this[name];\r\n // try to intelligently serialize property value\r\n var serializedValue = this.seri alizeValue(this[name], inferredType);\r\n // boolean properties must reflec t as boolean attributes\r\n if (serializedValue !== undefined) {\r\n this.setAttribute(name, serializedValue);\r\n // TODO(sorvell): we shoul d remove attr for all properties\r\n // that have undefined serialization ; however, we will need to\r\n // refine the attr reflection system to ac hieve this; pica, for example,\r\n // relies on having inferredType objec t properties not removed as\r\n // attrs.\r\n } else if (inferredTyp e === 'boolean') {\r\n this.removeAttribute(name);\r\n }\r\n }\r\ n };\r\n\r\n // exports\r\n\r\n scope.api.instance.attributes = attributes;\r \n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors ma y be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contr ibutors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distr ibuted by Google as part of the polymer project is also\n * subject to an additi onal IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(func tion(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n\n // magi c words\n\n var OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var updateRecord = {\n object: undefined,\n type: 'update',\n name: undefined,\n oldValue: undefined\n };\n\n var numberIsNaN = Number. isNaN || function(value) {\n return typeof value === 'number' && isNaN(value) ;\n }\n\n function areSameValue(left, right) {\n if (left === right)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numb erIsNaN(right))\n return true;\n\n return left !== left && right !== rig ht;\n }\n\n // capture A's value if B's value is null or undefined,\n // othe rwise use B's value\n function resolveBindingValue(oldValue, value) {\n if ( value === undefined && oldValue === null) {\n return value;\n }\n ret urn (value === null || value === undefined) ? oldValue : value;\n }\n\n var pr operties = {\n createPropertyObserver: function() {\n var n$ = this._obs erveNames;\n if (n$ && n$.length) {\n var o = this._propertyObserver = new CompoundObserver(true);\n this.registerObserver(o);\n // TO DO(sorvell): may not be kosher to access the value here (this[n]);\n // p reviously we looked at the descriptor on the prototype\n // this doesn't work for inheritance and not for accessors without\n // a value property\ n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n o.a ddPath(this, n);\n this.observeArrayValue(n, this[n], null);\n } \n }\n },\n openPropertyObserver: function() {\n if (this._prope rtyObserver) {\n this._propertyObserver.open(this.notifyPropertyChanges, this);\n }\n },\n notifyPropertyChanges: function(newValues, oldValue s, paths) {\n var name, method, called = {};\n for (var i in oldValues ) {\n // note: paths is of form [object, path, object, path]\n nam e = paths[2 * i + 1];\n method = this.observe[name];\n if (method) {\n var ov = oldValues[i], nv = newValues[i];\n // observes t he value if it is an array\n this.observeArrayValue(name, nv, ov);\n if (!called[method]) {\n // only invoke change method if one o f ov or nv is not (undefined | null)\n if ((ov !== undefined && ov != = null) || (nv !== undefined && nv !== null)) {\n called[method] = true;\n // TODO(sorvell): call method with the set of values it's e xpecting;\n // e.g. 'foo bar': 'invalidate' expects the new and old values for\n // foo and bar. Currently we give only one of these a nd then\n // deliver all the arguments.\n this.invokeM ethod(method, [ov, nv, arguments]);\n }\n }\n }\n }\n },\n deliverChanges: function() {\n if (this._propertyObserver) {\n this._propertyObserver.deliver();\n }\n },\n propertyChan ged_: function(name, value, oldValue) {\n if (this.reflect[name]) {\n this.reflectPropertyToAttribute(name);\n }\n },\n observeArrayValue : function(name, value, old) {\n // we only care if there are registered si de-effects\n var callbackName = this.observe[name];\n if (callbackName ) {\n // if we are observing the previous value, stop\n if (Array. isArray(old)) {\n log.observe && console.log('[%s] observeArrayValue: u nregister observer [%s]', this.localName, name);\n this.closeNamedObser ver(name + '__array');\n }\n // if the new value is an array, bein g observing it\n if (Array.isArray(value)) {\n log.observe && co nsole.log('[%s] observeArrayValue: register observer [%s]', this.localName, name , value);\n var observer = new ArrayObserver(value);\n observe r.open(function(value, old) {\n this.invokeMethod(callbackName, [old] );\n }, this);\n this.registerNamedObserver(name + '__array', observer);\n }\n }\n },\n emitPropertyChangeRecord: function(n ame, value, oldValue) {\n var object = this;\n if (areSameValue(value, oldValue))\n return;\n\n this.propertyChanged_(name, value, oldValu e);\n\n if (!Observer.hasObjectObserve)\n return;\n\n var notif ier = this.notifier_;\n if (!notifier)\n notifier = this.notifier_ = Object.getNotifier(this);\n\n updateRecord.object = this;\n updateRec ord.name = name;\n updateRecord.oldValue = oldValue;\n\n notifier.noti fy(updateRecord);\n },\n bindToAccessor: function(name, observable, resolv eFn) {\n var privateName = name + '_';\n var privateObservable = name + 'Observable_';\n\n this[privateObservable] = observable;\n var oldV alue = this[privateName];\n\n var self = this;\n var value = observabl e.open(function(value, oldValue) {\n self[privateName] = value;\n self.emitPropertyChangeRecord(name, value, oldValue);\n });\n\n if (re solveFn && !areSameValue(oldValue, value)) {\n var resolvedValue = resolv eFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\n value = resolvedValue;\n if (observable.setValue)\n obs ervable.setValue(value);\n }\n }\n\n this[privateName] = value; \n this.emitPropertyChangeRecord(name, value, oldValue);\n\n var obser ver = {\n close: function() {\n observable.close();\n s elf[privateObservable] = undefined;\n }\n };\n this.registerObs erver(observer);\n return observer;\n },\n createComputedProperties: function() {\n if (!this._computedNames) {\n return;\n }\n\n for (var i = 0; i < this._computedNames.length; i++) {\n var name = th is._computedNames[i];\n var expressionText = this.computed[name];\n try {\n var expression = PolymerExpressions.getExpression(expressionT ext);\n var observable = expression.getBinding(this, this.element.synta x);\n this.bindToAccessor(name, observable);\n } catch (ex) {\n console.error('Failed to create computed property', ex);\n }\n }\n },\n bindProperty: function(property, observable, oneTime) {\n if (oneTime) {\n this[property] = observable;\n return;\n } \n return this.bindToAccessor(property, observable, resolveBindingValue);\n },\n invokeMethod: function(method, args) {\n var fn = this[method] || method;\n if (typeof fn === 'function') {\n fn.apply(this, args); \n }\n },\n registerObserver: function(observer) {\n if (!this._ observers) {\n this._observers = [observer];\n return;\n }\n\ n this._observers.push(observer);\n },\n // observer array items are arrays of observers.\n closeObservers: function() {\n if (!this._observe rs) {\n return;\n }\n\n var observers = this._observers;\n for (var i = 0; i < observers.length; i++) {\n var observer = observers[ i];\n if (observer && typeof observer.close == 'function') {\n o bserver.close();\n }\n }\n\n this._observers = [];\n },\n // bookkeeping observers for memory management\n registerNamedObserver: func tion(name, observer) {\n var o$ = this._namedObservers || (this._namedObser vers = {});\n o$[name] = observer;\n },\n closeNamedObserver: functio n(name) {\n var o$ = this._namedObservers;\n if (o$ && o$[name]) {\n o$[name].close();\n o$[name] = null;\n return true;\n } \n },\n closeNamedObservers: function() {\n if (this._namedObservers) {\n for (var i in this._namedObservers) {\n this.closeNamedObse rver(i);\n }\n this._namedObservers = {};\n }\n }\n };\n\ n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERVED = ' [%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] propertyCh anged: [%s] now [%s] was [%s]';\n\n // exports\n\n scope.api.instance.properti es = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Proje ct Authors. All rights reserved.\n * This code may only be used under the BSD st yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || 0;\n \n // element api supporting mdv\n var mdv = {\n instanceTemplate: function (template) {\n // ensure a default bindingDelegate\n var syntax = this .syntax || (!template.bindingDelegate &&\n this.element.syntax);\n var dom = template.createInstance(this, syntax);\n var observers = dom.bin dings_;\n for (var i = 0; i < observers.length; i++) {\n this.regist erObserver(observers[i]);\n }\n return dom;\n },\n bind: functio n(name, observable, oneTime) {\n var property = this.propertyForAttribute(n ame);\n if (!property) {\n // TODO(sjmiles): this mixin method must use the special form\n // of `super` installed by `mixinMethod` in declar ation/prototype.js\n return this.mixinSuper(arguments);\n } else {\n // use n-way Polymer binding\n var observer = this.bindProperty(p roperty, observable, oneTime);\n // NOTE: reflecting binding information is typically required only for\n // tooling. It has a performance cost so it's opt-in in Node.bind.\n if (Platform.enableBindingsReflection && obs erver) {\n observer.path = observable.path_;\n this._recordBin ding(property, observer);\n }\n if (this.reflect[property]) {\n this.reflectPropertyToAttribute(property);\n }\n return obs erver;\n }\n },\n bindFinished: function() {\n this.makeElementR eady();\n },\n _recordBinding: function(name, observer) {\n this.bind ings_ = this.bindings_ || {};\n this.bindings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbindAll has been removed, as public api, from\n // TemplateBinding. We still need to close/dispose of observers but perhaps\n // we should choose a more explicit name.\n asyncUnbindAll: function() {\n if (!this._unbound) {\n log.unbind && console.log('[%s] asyncUnbindA ll', this.localName);\n this._unbindAllJob = this.job(this._unbindAllJob, this.unbindAll, 0);\n }\n },\n unbindAll: function() {\n if (!t his._unbound) {\n this.closeObservers();\n this.closeNamedObserver s();\n this._unbound = true;\n }\n },\n cancelUnbindAll: funct ion() {\n if (this._unbound) {\n log.unbind && console.warn('[%s] al ready unbound, cannot cancel unbindAll', this.localName);\n return;\n }\n log.unbind && console.log('[%s] cancelUnbindAll', this.localName);\n if (this._unbindAllJob) {\n this._unbindAllJob = this._unbindAllJob. stop();\n }\n }\n };\n\n function unbindNodeTree(node) {\n forNodeT ree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n node.u nbindAll();\n }\n\n function forNodeTree(node, callback) {\n if (node) {\n callback(node);\n for (var child = node.firstChild; child; child = chi ld.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n }\n\ n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exports\n\n scope.bindPatt ern = mustachePattern;\n scope.api.instance.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.githu b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer. github.io/AUTHORS.txt\n * The complete set of contributors may be found at http: //polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t he polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var base = {\n PolymerBase: true,\n job: function(job, callback, wait) {\n if ( typeof job === 'string') {\n var n = '___' + job;\n this[n] = Poly mer.job.call(this, this[n], callback, wait);\n } else {\n return Pol ymer.job.call(this, job, callback, wait);\n }\n },\n super: Polymer.s uper,\n // user entry point for element has had its createdCallback called\n created: function() {\n },\n // user entry point for element has shadow Root and is ready for\n // api interaction\n ready: function() {\n },\n createdCallback: function() {\n if (this.templateInstance && this.templ ateInstance.model) {\n console.warn('Attributes on ' + this.localName + ' were data bound ' +\n 'prior to Polymer upgrading the element. This may result in ' +\n 'incorrect binding types.');\n }\n this .created();\n this.prepareElement();\n if (!this.ownerDocument.isStagi ngDocument) {\n this.makeElementReady();\n }\n },\n // system entry point, do not override\n prepareElement: function() {\n if (this._ elementPrepared) {\n console.warn('Element already prepared', this.localN ame);\n return;\n }\n this._elementPrepared = true;\n // s torage for shadowRoots info\n this.shadowRoots = {};\n // install prop erty observers\n this.createPropertyObserver();\n this.openPropertyObs erver();\n // install boilerplate attributes\n this.copyInstanceAttrib utes();\n // process input attributes\n this.takeAttributes();\n // add event listeners\n this.addHostListeners();\n },\n makeElementR eady: function() {\n if (this._readied) {\n return;\n }\n this._readied = true;\n this.createComputedProperties();\n // TODO(sor vell): We could create an entry point here\n // for the user to compute pro perty values.\n // process declarative resources\n this.parseDeclarati ons(this.__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attrib ute to simulate\n // :unresolved; remove this attribute to be compatible wi th native\n // CE.\n this.removeAttribute('unresolved');\n // use r entry point\n this.ready();\n },\n attachedCallback: function() {\n this.cancelUnbindAll();\n // invoke user action\n if (this.attac hed) {\n this.attached();\n }\n // TODO(sorvell): bc\n if (this.enteredView) {\n this.enteredView();\n }\n // NOTE: domRe ady can be used to access elements in dom (descendants,\n // ancestors, sib lings) such that the developer is enured to upgrade\n // ordering. If the e lement definitions have loaded, domReady\n // can be used to access upgrade d elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAttached = true;\n if (this.domReady) {\n this.async('domReady');\n }\n }\n },\n detachedCallback: function() {\n if (!this.preventD ispose) {\n this.asyncUnbindAll();\n }\n // invoke user action\ n if (this.detached) {\n this.detached();\n }\n // TODO(so rvell): bc\n if (this.leftView) {\n this.leftView();\n }\n } ,\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n this.a ttachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback: func tion() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc\n enteredDocumentCallback: function() {\n this.attachedCallback();\n },\n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n this.deta chedCallback();\n },\n // recursive ancestral <element> initialization, ol dest first\n parseDeclarations: function(p) {\n if (p && p.element) {\n this.parseDeclarations(p.__proto__);\n p.parseDeclaration.call(thi s, p.element);\n }\n },\n // parse input <element> as needed, overrid e for custom behavior\n parseDeclaration: function(elementElement) {\n v ar template = this.fetchTemplate(elementElement);\n if (template) {\n var root = this.shadowFromTemplate(template);\n this.shadowRoots[elemen tElement.name] = root;\n }\n },\n // return a shadow-root template (i f desired), override for custom behavior\n fetchTemplate: function(elementEle ment) {\n return elementElement.querySelector('template');\n },\n // utility function that creates a shadow root from a <template>\n shadowFromTem plate: function(template) {\n if (template) {\n // make a shadow roo t\n var root = this.createShadowRoot();\n // stamp template\n // which includes parsing and applying MDV bindings before being\n // inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img sr c=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanceTe mplate(template);\n // append to shadow dom\n root.appendChild(dom );\n // perform post-construction initialization tasks on shadow root\n this.shadowRootReady(root, template);\n // return the created shado w root\n return root;\n }\n },\n // utility function that stam ps a <template> into light-dom\n lightFromTemplate: function(template, refNod e) {\n if (template) {\n // TODO(sorvell): mark this element as an e ventController so that\n // event listeners on bound nodes inside it will be called on it.\n // Note, the expectation here is that events on all d escendants\n // should be handled by this element.\n this.eventCon troller = this;\n // stamp template\n // which includes parsing an d applying MDV bindings before being\n // inserted (to avoid {{}} in attr ibute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from gen erating a 404.\n var dom = this.instanceTemplate(template);\n // a ppend to shadow dom\n if (refNode) {\n this.insertBefore(dom, re fNode);\n } else {\n this.appendChild(dom);\n }\n // perform post-construction initialization tasks on ahem, light root\n t his.shadowRootReady(this);\n // return the created shadow root\n r eturn dom;\n }\n },\n shadowRootReady: function(root) {\n // loc ate nodes with id and store references to them in this.$ hash\n this.marsha lNodeReferences(root);\n },\n // locate nodes with id and store references to them in this.$ hash\n marshalNodeReferences: function(root) {\n // e stablish $ instance variable\n var $ = this.$ = this.$ || {};\n // pop ulate $ from nodes with ID from the LOCAL tree\n if (root) {\n var n $ = root.querySelectorAll(\"[id]\");\n for (var i=0, l=n$.length, n; (i<l ) && (n=n$[i]); i++) {\n $[n.id] = n;\n };\n }\n },\n attributeChangedCallback: function(name, oldValue) {\n // TODO(sjmiles): a dhoc filter\n if (name !== 'class' && name !== 'style') {\n this.att ributeToProperty(name, this.getAttribute(name));\n }\n if (this.attrib uteChanged) {\n this.attributeChanged.apply(this, arguments);\n }\n },\n onMutation: function(node, listener) {\n var observer = new Muta tionObserver(function(mutations) {\n listener.call(this, observer, mutati ons);\n observer.disconnect();\n }.bind(this));\n observer.obse rve(node, {childList: true, subtree: true});\n }\n };\n\n // true if object has own PolymerBase api\n function isBase(object) {\n return object.hasOwnP roperty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n f unction PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor = PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = i sBase;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n * Copyright ( c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.t xt\n * The complete set of authors may be found at http://polymer.github.io/AUTH ORS.txt\n * The complete set of contributors may be found at http://polymer.gith ub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pro ject is also\n * subject to an additional IP rights grant found at http://polyme r.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var hasShadowDOMPolyfill = window.ShadowDOMPolyfill; \n\n // magic words\n \n var STYLE_SCOPE_ATTRIBUTE = 'element';\n var STYLE_ CONTROLLER_SCOPE = 'controller';\n \n var styles = {\n STYLE_SCOPE_ATTRIBUT E: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs external stylesheets and <st yle> elements with the attribute \n * polymer-scope='controller' into the sc ope of element. This is intended\n * to be a called during custom element co nstruction.\n */\n installControllerStyles: function() {\n // apply c ontroller styles, but only if they are not yet applied\n var scope = this.f indStyleScope();\n if (scope && !this.scopeHasNamedStyle(scope, this.localN ame)) {\n // allow inherited controller styles\n var proto = getPr ototypeOf(this), cssText = '';\n while (proto && proto.element) {\n cssText += proto.element.cssTextForScope(STYLE_CONTROLLER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (cssText) {\n th is.installScopeCssText(cssText, scope);\n }\n }\n },\n install ScopeStyle: function(style, name, scope) {\n var scope = scope || this.find StyleScope(), name = name || '';\n if (scope && !this.scopeHasNamedStyle(sc ope, this.localName + name)) {\n var cssText = '';\n if (style ins tanceof Array) {\n for (var i=0, l=style.length, s; (i<l) && (s=style[i ]); i++) {\n cssText += s.textContent + '\\n\\n';\n }\n } else {\n cssText = style.textContent;\n }\n this.ins tallScopeCssText(cssText, scope, name);\n }\n },\n installScopeCssTex t: function(cssText, scope, name) {\n scope = scope || this.findStyleScope( );\n name = name || '';\n if (!scope) {\n return;\n }\n if (hasShadowDOMPolyfill) {\n cssText = shimCssText(cssText, scope.hos t);\n }\n var style = this.element.cssTextToScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyleToScope(style, scope);\n // cache that this style has been applied\n this.styleCacheForScope(sc ope)[this.localName + name] = true;\n },\n findStyleScope: function(node) {\n // find the shadow root that contains this element\n var n = node || this;\n while (n.parentNode) {\n n = n.parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: function(scope, name) {\n var cache = this.styleCacheForScope(scope);\n return cache[name];\n },\n styleCacheForScope: function(scope) {\n if (hasShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localName : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (polyfillScopeStyleCache[scopeName] = {});\n } else {\n return scope._scopeStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfillScopeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ensure correct traversal\n // on p latforms where the protoype chain is simulated via __proto__ (IE10)\n function getPrototypeOf(prototype) {\n return prototype.__proto__;\n }\n\n function shimCssText(cssText, host) {\n var name = '', is = false;\n if (host) {\n name = host.localName;\n is = host.hasAttribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector(name, is);\n return Platform .ShadowCSS.shimCssText(cssText, selector);\n }\n\n // exports\n\n scope.api.i nstance.styles = styles;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Pol ymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comp lete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUT ORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PAT ENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var extend = scope.exte nd;\n var api = scope.api;\n\n // imperative implementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n function element(name, prototype) {\n if (arguments.length === 1 && typeof arguments[0] !== 'string') {\n prototype = name;\n var script = document._currentScript;\n name = scr ipt && script.parentNode && script.parentNode.getAttribute ?\n script.p arentNode.getAttribute('name') : '';\n if (!name) {\n throw 'Element name could not be inferred.';\n }\n }\n if (getRegisteredPrototype[n ame]) {\n throw 'Already registered (Polymer) prototype for element ' + nam e;\n }\n // cache the prototype\n registerPrototype(name, prototype);\n // notify the registrar waiting for 'name', if any\n notifyPrototype(name );\n }\n\n // async prototype source\n\n function waitingForPrototype(name, c lient) {\n waitPrototype[name] = client;\n }\n\n var waitPrototype = {};\n\ n function notifyPrototype(name) {\n if (waitPrototype[name]) {\n waitP rototype[name].registerWhenReady();\n delete waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n // maps tag names to prototypes, as regi stered with\n // Polymer. Prototypes associated with a tag name\n // using doc ument.registerElement are available from\n // HTMLElement.getPrototypeForTag(). \n // If an element was fully registered by Polymer, then\n // Polymer.getRegi steredPrototype(name) === \n // HTMLElement.getPrototypeForTag(name)\n\n var prototypesByName = {};\n\n function registerPrototype(name, prototype) {\n return prototypesByName[name] = prototype || {};\n }\n\n function getRegistere dPrototype(name) {\n return prototypesByName[name];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegisteredPrototype;\n scope.waitingForProto type = waitingForPrototype;\n\n // namespace shenanigans so we can expose our s cope on the registration \n // function\n\n // make window.Polymer reference ` element()`\n\n window.Polymer = element;\n\n // TODO(sjmiles): find a way to d o this that is less terrible\n // copy window.Polymer properties onto `element( )`\n\n extend(Polymer, scope);\n\n // Under the HTMLImports polyfill, scripts in the main document\n // do not block on imports; we want to allow calls to Po lymer in the main\n // document. Platform collects those calls until we can pro cess them, which\n // we do here.\n\n var declarations = Platform.deliverDecla rations();\n if (declarations) {\n for (var i=0, l=declarations.length, d; ( i<l) && (d=declarations[i]); i++) {\n element.apply(null, d);\n }\n }\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All ri ghts reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be f ound at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributor s may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional I P rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(s cope) {\n\nvar path = {\n resolveElementPaths: function(node) {\n Platform.u rlResolver.resolveDom(node);\n },\n addResolvePathApi: function() {\n // le t assetpath attribute modify the resolve path\n var assetPath = this.getAttri bute('assetpath') || '';\n var root = new URL(assetPath, this.ownerDocument.b aseURI);\n this.prototype.resolvePath = function(urlPath, base) {\n var u = new URL(urlPath, base || root);\n return u.href;\n };\n }\n};\n\n// exports\nscope.api.declaration.path = path;\n\n})(Polymer);\n","/*\n * Copyrigh t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o nly be used under the BSD style license found at http://polymer.github.io/LICENS E.txt\n * The complete set of authors may be found at http://polymer.github.io/A UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://pol ymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var l og = window.logFlags || {};\n var api = scope.api.instance.styles;\n var STYLE _SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n var hasShadowDOMPolyfill = wi ndow.ShadowDOMPolyfill;\n\n // magic words\n\n var STYLE_SELECTOR = 'style';\n var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel=styles heet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_ATTR = 'polymer-scope ';\n\n var styles = {\n // returns true if resources are loading\n loadSt yles: function(callback) {\n var template = this.fetchTemplate();\n va r content = template && this.templateContent();\n if (content) {\n t his.convertSheetsToStyles(content);\n var styles = this.findLoadableStyle s(content);\n if (styles.length) {\n var templateUrl = template. ownerDocument.baseURI;\n return Platform.styleResolver.loadStyles(style s, templateUrl, callback);\n }\n }\n if (callback) {\n c allback();\n }\n },\n convertSheetsToStyles: function(root) {\n var s$ = root.querySelectorAll(SHEET_SELECTOR);\n for (var i=0, l=s$.length , s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRuleFor Sheet(s, this.ownerDocument.baseURI),\n this.ownerDocument);\n this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\n }\n },\n copySheetAttributes: function(style, link) {\n for (var i= 0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n if (a.n ame !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name, a.va lue);\n }\n }\n },\n findLoadableStyles: function(root) {\n var loadables = [];\n if (root) {\n var s$ = root.querySelectorAl l(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i+ +) {\n if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n lo adables.push(s);\n }\n }\n }\n return loadables;\n },\n /**\n * Install external stylesheets loaded in <polymer-element> ele ments into the \n * element's template.\n * @param elementElement The <e lement> element to style.\n */\n installSheets: function() {\n this. cacheSheets();\n this.cacheStyles();\n this.installLocalSheets();\n this.installGlobalStyles();\n },\n /**\n * Remove all sheets from e lement and store for later use.\n */\n cacheSheets: function() {\n t his.sheets = this.findNodes(SHEET_SELECTOR);\n this.sheets.forEach(function (s) {\n if (s.parentNode) {\n s.parentNode.removeChild(s);\n }\n });\n },\n cacheStyles: function() {\n this.styles = thi s.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.forEach (function(s) {\n if (s.parentNode) {\n s.parentNode.removeChild( s);\n }\n });\n },\n /**\n * Takes external stylesheets lo aded in an <element> element and moves\n * their content into a <style> elem ent inside the <element>'s template.\n * The sheet is then removed from the <element>. This is done only so \n * that if the element is loaded in the ma in document, the sheet does\n * not become active.\n * Note, ignores she ets with the attribute 'polymer-scope'.\n * @param elementElement The <eleme nt> element to style.\n */\n installLocalSheets: function () {\n var sheets = this.sheets.filter(function(s) {\n return !s.hasAttribute(SCOPE _ATTR);\n });\n var content = this.templateContent();\n if (conte nt) {\n var cssText = '';\n sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(sheet) + '\\n';\n });\n if (cssT ext) {\n var style = createStyleElement(cssText, this.ownerDocument);\n content.insertBefore(style, content.firstChild);\n }\n }\n },\n findNodes: function(selector, matcher) {\n var nodes = this.que rySelectorAll(selector).array();\n var content = this.templateContent();\n if (content) {\n var templateNodes = content.querySelectorAll(select or).array();\n nodes = nodes.concat(templateNodes);\n }\n retur n matcher ? nodes.filter(matcher) : nodes;\n },\n /**\n * Promotes ext ernal stylesheets and <style> elements with the attribute \n * polymer-scope ='global' into global scope.\n * This is particularly useful for defining @k eyframe rules which \n * currently do not function in scoped or shadow style elements.\n * (See wkb.ug/72462)\n * @param elementElement The <element > element to style.\n */\n // TODO(sorvell): remove when wkb.ug/72462 is a ddressed.\n installGlobalStyles: function() {\n var style = this.styleFo rScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style, document.head);\n },\n cssTextForScope: function(scopeDescriptor) {\n var cssText = '';\n // handle stylesheets\n var selector = '[' + SCOPE_ATTR + '=' + scope Descriptor + ']';\n var matcher = function(s) {\n return matchesSele ctor(s, selector);\n };\n var sheets = this.sheets.filter(matcher);\n sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(sheet ) + '\\n\\n';\n });\n // handle cached style elements\n var style s = this.styles.filter(matcher);\n styles.forEach(function(style) {\n cssText += style.textContent + '\\n\\n';\n });\n return cssText;\n },\n styleForScope: function(scopeDescriptor) {\n var cssText = this.c ssTextForScope(scopeDescriptor);\n return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scopeDesc riptor) {\n if (cssText) {\n var style = createStyleElement(cssText) ;\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') + \n '-' + scopeDescriptor);\n return style;\n }\n }\n };\n\n function importRuleForSheet(sheet, baseUrl) {\n var href = new URL(sh eet.getAttribute('href'), baseUrl).href;\n return '@import \\'' + href + '\\' ;';\n }\n\n function applyStyleToScope(style, scope) {\n if (style) {\n if (scope === document) {\n scope = document.head;\n }\n if ( hasShadowDOMPolyfill) {\n scope = document.head;\n }\n // TODO( sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/feedba ck/details/790212/\n // cloning-a-style-element-and-adding-to-document-prod uces\n // -unexpected-result#details\n // var clone = style.cloneNode( true);\n var clone = createStyleElement(style.textContent);\n var attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (attr) {\n clone. setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n // TODO(sorvell): pro bably too brittle; try to figure out \n // where to put the element.\n var refNode = scope.firstElementChild;\n if (scope === document.head) {\n var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelectorAll(selector);\n if (s$.length) {\n r efNode = s$[s$.length-1].nextElementSibling;\n }\n }\n scope.in sertBefore(clone, refNode);\n }\n }\n\n function createStyleElement(cssText , scope) {\n scope = scope || document;\n scope = scope.createElement ? sc ope : scope.ownerDocument;\n var style = scope.createElement('style');\n s tyle.textContent = cssText;\n return style;\n }\n\n function cssTextFromShe et(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n function ma tchesSelector(node, inSelector) {\n if (matches) {\n return matches.call (node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var matches = p.matches || p.matchesSelector || p.webkitMatchesSelector \n || p.mozMat chesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles;\n s cope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n","/*\n * Copyrig ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICEN SE.txt\n * The complete set of authors may be found at http://polymer.github.io/ AUTHORS.txt\n * The complete set of contributors may be found at http://polymer. github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://po lymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api.instance.events;\n var EVEN T_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarative api: events featu re\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart',\n 'we bkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocu sIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCaseEventTypes[ e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: function( ) {\n // our delegates map\n var delegates = this.prototype.eventDeleg ates;\n // extract data from attributes into delegates\n this.addAttri buteDelegates(delegates);\n },\n addAttributeDelegates: function(delegates ) {\n // for each attribute\n for (var i=0, a; a=this.attributes[i]; i ++) {\n // does it have magic marker identifying it as an event delegate? \n if (this.hasEventPrefix(a.name)) {\n // if so, add the info t o delegates\n delegates[this.removeEventPrefix(a.name)] = a.value.repla ce('{{', '')\n .replace('}}', '').trim();\n }\n }\n },\n // starts with 'on-'\n hasEventPrefix: function (n) {\n return n && (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n },\n removeEvent Prefix: function(n) {\n return n.slice(prefixLength);\n },\n findCont roller: function(node) {\n while (node.parentNode) {\n if (node.even tController) {\n return node.eventController;\n }\n node = node.parentNode;\n }\n return node.host;\n },\n getEventHandle r: function(controller, target, method) {\n var events = this;\n retur n function(e) {\n if (!controller || !controller.PolymerBase) {\n controller = events.findController(target);\n }\n\n var args = [ e, e.detail, e.currentTarget];\n controller.dispatchMethod(controller, me thod, args);\n };\n },\n prepareEventBinding: function(pathString, na me, node) {\n if (!this.hasEventPrefix(name))\n return;\n\n var eventType = this.removeEventPrefix(name);\n eventType = mixedCaseEventType s[eventType] || eventType;\n\n var events = this;\n\n return function( model, node, oneTime) {\n var handler = events.getEventHandler(undefined, node, pathString);\n PolymerGestures.addEventListener(node, eventType, h andler);\n\n if (oneTime)\n return;\n\n // TODO(rafaelw): This is really pointless work. Aside from the cost\n // of these allocat ions, NodeBind is going to setAttribute back to its\n // current value. F ixing this would mean changing the TemplateBinding\n // binding delegate API.\n function bindingValue() {\n return '{{ ' + pathString + ' }}';\n }\n\n return {\n open: bindingValue,\n d iscardChanges: bindingValue,\n close: function() {\n Polymer Gestures.removeEventListener(node, eventType, handler);\n }\n }; \n };\n }\n };\n\n var prefixLength = EVENT_PREFIX.length;\n\n // exp orts\n scope.api.declaration.events = events;\n\n})(Polymer);\n","/*\n * Copyri ght (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICE NSE.txt\n * The complete set of authors may be found at http://polymer.github.io /AUTHORS.txt\n * The complete set of contributors may be found at http://polymer .github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polyme r project is also\n * subject to an additional IP rights grant found at http://p olymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // element api\n\n var properties = {\n inferObservers: function(prototype) {\n // called before prototype.observe is chained to inherited object\n var observe = pro totype.observe, property;\n for (var n in prototype) {\n if (n.slice (-7) === 'Changed') {\n if (!observe) {\n observe = (protot ype.observe = {});\n }\n property = n.slice(0, -7)\n observe[property] = observe[property] || n;\n }\n }\n },\n exp lodeObservers: function(prototype) {\n // called before prototype.observe i s chained to inherited object\n var o = prototype.observe;\n if (o) {\ n var exploded = {};\n for (var n in o) {\n var names = n .split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n explo ded[ni] = o[n];\n }\n }\n prototype.observe = exploded;\n }\n },\n optimizePropertyMaps: function(prototype) {\n if (prot otype.observe) {\n // construct name list\n var a = prototype._obs erveNames = [];\n for (var n in prototype.observe) {\n var names = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n a .push(ni);\n }\n }\n }\n if (prototype.publish) {\n // construct name list\n var a = prototype._publishNames = [];\n for (var n in prototype.publish) {\n a.push(n);\n }\n } \n if (prototype.computed) {\n // construct name list\n var a = prototype._computedNames = [];\n for (var n in prototype.computed) {\n a.push(n);\n }\n }\n },\n publishProperties: functio n(prototype, base) {\n // if we have any properties to publish\n var p ublish = prototype.publish;\n if (publish) {\n // transcribe `publis h` entries onto own prototype\n this.requireProperties(publish, prototype , base);\n // construct map of lower-cased property names\n protot ype._publishLC = this.lowerCaseMap(publish);\n }\n },\n //\n // `n ame: value` entries in the `publish` object may need to generate \n // matchi ng properties on the prototype.\n //\n // Values that are objects may have a `reflect` property, which\n // signals that the value describes property c ontrol metadata.\n // In metadata objects, the prototype default value (if an y)\n // is encoded in the `value` property.\n //\n // publish: {\n / / foo: 5, \n // bar: {value: true, reflect: true},\n // zot: {}\n // }\n //\n // `reflect` metadata property controls whether changes to th e property\n // are reflected back to the attribute (default false). \n // \n // A value is stored on the prototype unless it's === `undefined`,\n // in which case the base chain is checked for a value.\n // If the basal value is also undefined, `null` is stored on the prototype.\n //\n // The refle ction data is stored on another prototype object, `reflect`\n // which also c an be specified directly.\n //\n // reflect: {\n // foo: true\n // }\n //\n requireProperties: function(propertyInfos, prototype, base) {\n // per-prototype storage for reflected properties\n prototype.reflect = prototype.reflect || {};\n // ensure a prototype value for each property\ n // and update the property's reflect to attribute status\n for (var n in propertyInfos) {\n var value = propertyInfos[n];\n // value h as metadata if it has a `reflect` property\n if (value && value.reflect ! == undefined) {\n prototype.reflect[n] = Boolean(value.reflect);\n value = value.value;\n }\n // only set a value if one is spec ified\n if (value !== undefined) {\n prototype[n] = value;\n }\n }\n },\n lowerCaseMap: function(properties) {\n var map = {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n }\n return map;\n },\n createPropertyAccessor: function(name) {\n var proto = this.prototype;\n\n var privateName = name + '_';\n v ar privateObservable = name + 'Observable_';\n proto[privateName] = proto[ name];\n\n Object.defineProperty(proto, name, {\n get: function() {\ n var observable = this[privateObservable];\n if (observable)\ n observable.deliver();\n\n return this[privateName];\n },\n set: function(value) {\n var observable = this[privateOb servable];\n if (observable) {\n observable.setValue(value); \n return;\n }\n\n var oldValue = this[privateName] ;\n this[privateName] = value;\n this.emitPropertyChangeRecord (name, value, oldValue);\n\n return value;\n },\n configu rable: true\n });\n },\n createPropertyAccessors: function(prototype) {\n var n$ = prototype._publishNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n this. createPropertyAccessor(n);\n }\n }\n var n$ = prototype._comput edNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn ; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\n }\n }\n }\n };\n\n // exports\n\n scope.api.declaration.properties = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project A uthors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of au thors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Co de distributed by Google as part of the polymer project is also\n * subject to a n additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\ n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attribu tes';\n var ATTRIBUTES_REGEX = /\\s|,/;\n\n // attributes api\n\n var attribu tes = {\n \n inheritAttributesObjects: function(prototype) {\n // cha in our lower-cased publish map to the inherited version\n this.inheritObjec t(prototype, 'publishLC');\n // chain our instance attributes map to the in herited version\n this.inheritObject(prototype, '_instanceAttributes');\n },\n\n publishAttributes: function(prototype, base) {\n // merge names from 'attributes' attribute into the 'publish' object\n var attributes = t his.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (attributes) {\n // cre ate a `publish` object if needed.\n // the `publish` object is only relev ant to this prototype, the \n // publishing logic in `declaration/propert ies.js` is responsible for\n // managing property values on the prototype chain.\n // TODO(sjmiles): the `publish` object is later chained to it's \n // ancestor object, presumably this is only for \n // reflection or other non-library uses. \n var publis h = prototype.publish || (prototype.publish = {}); \n // names='a b c' or names='a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // record each name for publishing\n for (var i=0, l=names.length, n; i< l; i++) {\n // remove excess ws\n n = names[i].trim();\n // looks weird, but causes n to exist on `publish` if it does not;\n // a more careful test would need expensive `in` operator\n if (n && publish[n] === undefined) {\n publish[n] = undefined;\n }\n }\n }\n },\n\n // record clonable attributes from <element>\n accumulateInstanceAttributes: function() {\n // inherit instance attribu tes\n var clonable = this.prototype._instanceAttributes;\n // merge at tributes from element\n var a$ = this.attributes;\n for (var i=0, l=a$ .length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInstanceAttribute(a .name)) {\n clonable[a.name] = a.value;\n }\n }\n },\n\n isInstanceAttribute: function(name) {\n return !this.blackList[name] && name.slice(0,3) !== 'on-';\n },\n\n // do not clone these attributes onto instances\n blackList: {\n name: 1,\n 'extends': 1,\n constru ctor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-csstext': 1\n }\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n attributes.b lackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api.declaration.a ttributes = attributes;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polyme r Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS .txt\n * Code distributed by Google as part of the polymer project is also\n * s ubject to an additional IP rights grant found at http://polymer.github.io/PATENT S.txt\n */\n\n(function(scope) {\n\n // imports\n var events = scope.api.decla ration.events;\n\n var syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBinding;\n\n // Polymer takes a first crack at the binding to see if it's a declarative\n // event handler.\n syntax.prepareBinding = functi on(pathString, name, node) {\n return events.prepareEventBinding(pathString, name, node) ||\n prepareBinding.call(syntax, pathString, name, node);\ n };\n\n // declaration api supporting mdv\n var mdv = {\n syntax: syntax, \n fetchTemplate: function() {\n return this.querySelector('template');\ n },\n templateContent: function() {\n var template = this.fetchTempl ate();\n return template && Platform.templateContent(template);\n },\n installBindingDelegate: function(template) {\n if (template) {\n t emplate.bindingDelegate = this.syntax;\n }\n }\n };\n\n // exports\n scope.api.declaration.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 T he Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * Th e complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CON TRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is a lso\n * subject to an additional IP rights grant found at http://polymer.github. io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n \n var api = scope .api;\n var isBase = scope.isBase;\n var extend = scope.extend;\n\n var hasSh adowDOMPolyfill = window.ShadowDOMPolyfill;\n\n // prototype api\n\n var proto type = {\n\n register: function(name, extendeeName) {\n // build prototy pe combining extendee, Polymer base, and named api\n this.buildPrototype(na me, extendeeName);\n // register our custom element with the platform\n this.registerPrototype(name, extendeeName);\n // reference constructor in a global named by 'constructor' attribute\n this.publishConstructor();\n },\n\n buildPrototype: function(name, extendeeName) {\n // get our cus tom prototype (before chaining)\n var extension = scope.getRegisteredProtot ype(name);\n // get basal prototype\n var base = this.generateBaseProt otype(extendeeName);\n // implement declarative features\n this.desuga rBeforeChaining(extension, base);\n // join prototypes\n this.prototyp e = this.chainPrototypes(extension, base);\n // more declarative features\n this.desugarAfterChaining(name, extendeeName);\n },\n\n desugarBefor eChaining: function(prototype, base) {\n // back reference declaration elem ent\n // TODO(sjmiles): replace `element` with `elementElement` or `declara tion`\n prototype.element = this;\n // transcribe `attributes` declara tions onto own prototype's `publish`\n this.publishAttributes(prototype, ba se);\n // `publish` properties to the prototype and to attribute watch\n this.publishProperties(prototype, base);\n // infer observers for `obser ve` list based on method names\n this.inferObservers(prototype);\n // desugar compound observer syntax, e.g. 'a b c' \n this.explodeObservers(pro totype);\n },\n\n chainPrototypes: function(prototype, base) {\n // c hain various meta-data objects to inherited versions\n this.inheritMetaData (prototype, base);\n // chain custom api to inherited\n var chained = this.chainObject(prototype, base);\n // x-platform fixup\n ensureProto typeTraversal(chained);\n return chained;\n },\n\n inheritMetaData: f unction(prototype, base) {\n // chain observe object to inherited\n th is.inheritObject('observe', prototype, base);\n // chain publish object to inherited\n this.inheritObject('publish', prototype, base);\n // chain reflect object to inherited\n this.inheritObject('reflect', prototype, bas e);\n // chain our lower-cased publish map to the inherited version\n this.inheritObject('_publishLC', prototype, base);\n // chain our instance attributes map to the inherited version\n this.inheritObject('_instanceAttr ibutes', prototype, base);\n // chain our event delegates map to the inheri ted version\n this.inheritObject('eventDelegates', prototype, base);\n } ,\n\n // implement various declarative features\n desugarAfterChaining: fu nction(name, extendee) {\n // build side-chained lists to optimize iteratio ns\n this.optimizePropertyMaps(this.prototype);\n this.createPropertyA ccessors(this.prototype);\n // install mdv delegate on template\n this .installBindingDelegate(this.fetchTemplate());\n // install external styles heets as if they are inline\n this.installSheets();\n // adjust any pa ths in dom from imports\n this.resolveElementPaths(this);\n // compile list of attributes to copy to instances\n this.accumulateInstanceAttribute s();\n // parse on-* delegates declared on `this` element\n this.parse HostEvents();\n //\n // install a helper method this.resolvePath to ai d in \n // setting resource urls. e.g.\n // this.$.image.src = this.re solvePath('images/foo.png')\n this.addResolvePathApi();\n // under Sha dowDOMPolyfill, transforms to approximate missing CSS features\n if (hasSha dowDOMPolyfill) {\n Platform.ShadowCSS.shimStyling(this.templateContent() , name, extendee);\n }\n // allow custom element access to the declara tive context\n if (this.prototype.registerCallback) {\n this.prototy pe.registerCallback(this);\n }\n },\n\n // if a named constructor is requested in element, map a reference\n // to the constructor to the given sy mbol\n publishConstructor: function() {\n var symbol = this.getAttribute ('constructor');\n if (symbol) {\n window[symbol] = this.ctor;\n }\n },\n\n // build prototype combining extendee, Polymer base, and name d api\n generateBasePrototype: function(extnds) {\n var prototype = this .findBasePrototype(extnds);\n if (!prototype) {\n // create a protot ype based on tag-name extension\n var prototype = HTMLElement.getPrototyp eForTag(extnds);\n // insert base api in inheritance chain (if needed)\n prototype = this.ensureBaseApi(prototype);\n // memoize this base\ n memoizedBases[extnds] = prototype;\n }\n return prototype;\n },\n\n findBasePrototype: function(name) {\n return memoizedBases[nam e];\n },\n\n // install Polymer instance api into prototype chain, as need ed \n ensureBaseApi: function(prototype) {\n if (prototype.PolymerBase) {\n return prototype;\n }\n var extended = Object.create(protot ype);\n // we need a unique copy of base api for each base prototype\n // therefore we 'extend' here instead of simply chaining\n api.publish(api .instance, extended);\n // TODO(sjmiles): sharing methods across prototype chains is\n // not supported by 'super' implementation which optimizes\n // by memoizing prototype relationships.\n // Probably we should have a version of 'extend' that is \n // share-aware: it could study the text of e ach function,\n // look for usage of 'super', and wrap those functions in\n // closures.\n // As of now, there is only one problematic method, so \n // we just patch it manually.\n // To avoid re-entrancy problems, the special super method\n // installed is called `mixinSuper` and the mixi n method\n // must use this method instead of the default `super`.\n t his.mixinMethod(extended, prototype, api.instance.mdv, 'bind');\n // return buffed-up prototype\n return extended;\n },\n\n mixinMethod: functio n(extended, prototype, api, name) {\n var $super = function(args) {\n return prototype[name].apply(this, args);\n };\n extended[name] = fu nction() {\n this.mixinSuper = $super;\n return api[name].apply(th is, arguments);\n }\n },\n\n // ensure prototype[name] inherits from a prototype.prototype[name]\n inheritObject: function(name, prototype, base) {\n // require an object\n var source = prototype[name] || {};\n // chain inherited properties onto a new object\n prototype[name] = this.ch ainObject(source, base[name]);\n },\n\n // register 'prototype' to custom element 'name', store constructor \n registerPrototype: function(name, extend ee) { \n var info = {\n prototype: this.prototype\n }\n // native element must be specified in extends\n var typeExtension = this.fin dTypeExtension(extendee);\n if (typeExtension) {\n info.extends = ty peExtension;\n }\n // register the prototype with HTMLElement for name lookup\n HTMLElement.register(name, this.prototype);\n // register th e custom type\n this.ctor = document.registerElement(name, info);\n },\n \n findTypeExtension: function(name) {\n if (name && name.indexOf('-') < 0) {\n return name;\n } else {\n var p = this.findBaseProtot ype(name);\n if (p.element) {\n return this.findTypeExtension(p. element.extends);\n }\n }\n }\n\n };\n\n // memoize base protot ypes\n var memoizedBases = {};\n\n // implementation of 'chainObject' depends on support for __proto__\n if (Object.__proto__) {\n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inhe rited) {\n object.__proto__ = inherited;\n }\n return object;\n }\n } else {\n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inherited) {\n var chained = Ob ject.create(inherited);\n object = extend(chained, object);\n }\n return object;\n }\n }\n\n // On platforms that do not support __proto__ (versions of IE), the prototype\n // chain of a custom element is simulated vi a installation of __proto__.\n // Although custom elements manages this, we ins tall it here so it's\n // available during desugaring.\n function ensureProtot ypeTraversal(prototype) {\n if (!Object.__proto__) {\n var ancestor = Ob ject.getPrototypeOf(prototype);\n prototype.__proto__ = ancestor;\n if (isBase(ancestor)) {\n ancestor.__proto__ = Object.getPrototypeOf(ancest or);\n }\n }\n }\n\n // exports\n\n api.declaration.prototype = proto type;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun ction(scope) {\n\n /*\n\n Elements are added to a registration queue so that they register in \n the proper order at the appropriate time. We do this for a few reasons:\n\n * to enable elements to load resources (like stylesheets) \n asynchronously. We need to do this until the platform provides an efficie nt\n alternative. One issue is that remote @import stylesheets are \n re-f etched whenever stamped into a shadowRoot.\n\n * to ensure elements loaded 'a t the same time' (e.g. via some set of\n imports) are registered as a batch. This allows elements to be enured from\n upgrade ordering as long as they que ry the dom tree 1 task after\n upgrade (aka domReady). This is a performance tradeoff. On the one hand,\n elements that could register while imports are l oading are prevented from \n doing so. On the other, grouping upgrades into a single task means less\n incremental work (for example style recalcs), Also , we can ensure the \n document is in a known state at the single quantum of time when \n elements upgrade.\n\n */\n var queue = {\n\n // tell the qu eue to wait for an element to be ready\n wait: function(element) {\n if (!element.__queue) {\n element.__queue = {};\n elements.push(eleme nt);\n }\n },\n\n // enqueue an element to the next spot in the queue .\n enqueue: function(element, check, go) {\n var shouldAdd = element.__ queue && !element.__queue.check;\n if (shouldAdd) {\n queueForElemen t(element).push(element);\n element.__queue.check = check;\n eleme nt.__queue.go = go;\n }\n return (this.indexOf(element) !== 0);\n } ,\n\n indexOf: function(element) {\n var i = queueForElement(element).in dexOf(element);\n if (i >= 0 && document.contains(element)) {\n i += (HTMLImports.useNative || HTMLImports.ready) ? \n importQueue.length : 1e9;\n }\n return i; \n },\n\n // tell the queue an element is ready to be registered\n go: function(element) {\n var readied = this.r emove(element);\n if (readied) {\n element.__queue.flushable = true; \n this.addToFlushQueue(readied);\n this.check();\n }\n }, \n\n remove: function(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n //console.warn('queue order wrong', i);\n return ;\n }\n return queueForElement(element).shift();\n },\n\n check: function() {\n // next\n var element = this.nextElement();\n if (element) {\n element.__queue.check.call(element);\n }\n if (th is.canReady()) {\n this.ready();\n return true;\n }\n },\n \n nextElement: function() {\n return nextQueued();\n },\n\n canRe ady: function() {\n return !this.waitToReady && this.isEmpty();\n },\n\n isEmpty: function() {\n for (var i=0, l=elements.length, e; (i<l) && \n (e=elements[i]); i++) {\n if (e.__queue && !e.__queue.flushable ) {\n return;\n }\n }\n return true;\n },\n\n ad dToFlushQueue: function(element) {\n flushQueue.push(element); \n },\n\ n flush: function() {\n // prevent re-entrance\n if (this.flushing) {\n return;\n }\n this.flushing = true;\n var element;\n while (flushQueue.length) {\n element = flushQueue.shift();\n element.__queue.go.call(element);\n element.__queue = null;\n }\n this.flushing = false;\n },\n\n ready: function() {\n this.flush( );\n // TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n // while registering. This way we avoid having to upgrade each document\n // piecemeal per registration and can instead register all elements\n // and upgrade once in a batch. Without this optimization, upgrade time\n / / degrades significantly when SD polyfill is used. This is mainly because\n // querying the document tree for elements is slow under the SD polyfill.\n if (CustomElements.ready === false) {\n CustomElements.upgradeDocumentT ree(document);\n CustomElements.ready = true;\n }\n Platform.fl ush();\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n ad dReadyCallback: function(callback) {\n if (callback) {\n readyCallba cks.push(callback);\n }\n },\n\n flushReadyCallbacks: function() {\n if (readyCallbacks) {\n var fn;\n while (readyCallbacks.lengt h) {\n fn = readyCallbacks.shift();\n fn();\n }\n }\n },\n\n waitToReady: true\n\n };\n\n var elements = [];\n var flushQ ueue = [];\n var importQueue = [];\n var mainQueue = [];\n var readyCallbacks = [];\n\n function queueForElement(element) {\n return document.contains(el ement) ? mainQueue : importQueue;\n }\n\n function nextQueued() {\n return importQueue.length ? importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied = false; \n\n document.addEventListener('WebComponentsReady', function() {\n CustomElements.ready = false;\n });\n \n function whenPolymerReady(callback ) {\n queue.waitToReady = true;\n CustomElements.ready = false;\n HTMLI mports.whenImportsReady(function() {\n queue.addReadyCallback(callback);\n queue.waitToReady = false;\n queue.check();\n });\n }\n\n // expo rts\n scope.elements = elements;\n scope.queue = queue;\n scope.whenReady = s cope.whenPolymerReady = whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only b e used under the BSD style license found at http://polymer.github.io/LICENSE.txt \n * The complete set of authors may be found at http://polymer.github.io/AUTHOR S.txt\n * The complete set of contributors may be found at http://polymer.github .io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proje ct is also\n * subject to an additional IP rights grant found at http://polymer. github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var whenPolymerReady = sco pe.whenPolymerReady;\n\n function importElements(elementOrFragment, callback) { \n if (elementOrFragment) {\n document.head.appendChild(elementOrFragmen t);\n whenPolymerReady(callback);\n } else if (callback) {\n callba ck();\n }\n }\n\n function importUrls(urls, callback) {\n if (urls && ur ls.length) {\n var frag = document.createDocumentFragment();\n for (var i=0, l=urls.length, url, link; (i<l) && (url=urls[i]); i++) {\n l ink = document.createElement('link');\n link.rel = 'import';\n link.href = url;\n frag.appendChild(link);\n }\n importE lements(frag, callback);\n } else if (callback) {\n callback();\n }\n }\n\n // exports\n scope.import = importUrls;\n scope.importElements = impo rtElements;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Au thors. All rights reserved.\n * This code may only be used under the BSD style l icense found at http://polymer.github.io/LICENSE.txt\n * The complete set of aut hors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set o f contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Cod e distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n \n(function(scope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope.api;\n var queue = scope.queue;\n var whenPolymerReady = scope.whenPol ymerReady;\n var getRegisteredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype = scope.waitingForPrototype;\n\n // declarative implementat ion: <polymer-element>\n\n var prototype = extend(Object.create(HTMLElement.pro totype), {\n\n createdCallback: function() {\n if (this.getAttribute('na me')) {\n this.init();\n }\n },\n\n init: function() {\n // fetch declared values\n this.name = this.getAttribute('name');\n th is.extends = this.getAttribute('extends');\n queue.wait(this);\n // in itiate any async resource fetches\n this.loadResources();\n // registe r when all constraints are met\n this.registerWhenReady();\n },\n\n / / TODO(sorvell): we currently queue in the order the prototypes are \n // reg istered, but we should queue in the order that polymer-elements\n // are regi stered. We are currently blocked from doing this based on \n // crbug.com/395 686.\n registerWhenReady: function() {\n if (this.registered\n || t his.waitingForPrototype(this.name)\n || this.waitingForQueue()\n || this.waitingForResources()) {\n return;\n }\n queue.go(this); \n },\n\n _register: function() {\n //console.log('registering', this .name);\n // warn if extending from a custom element not registered via Pol ymer\n if (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n console.warn('%s is attempting to extend %s, an unregistered element ' +\n 'or one that was not registered with Polymer.', this.name,\n this.extends);\n }\n this.register(this.name, this.extends);\n this.registered = true;\n },\n\n waitingForPrototype: function(name) {\n if (!getRegisteredPrototype(name)) {\n // then wait for a prototype\ n waitingForPrototype(name, this);\n // emulate script if user is not supplying one\n this.handleNoScript(name);\n // prototype not ready yet\n return true;\n }\n },\n\n handleNoScript: function (name) {\n // if explicitly marked as 'noscript'\n if (this.hasAttribu te('noscript') && !this.noscript) {\n this.noscript = true;\n // i mperative element registration\n Polymer(name);\n }\n },\n\n w aitingForResources: function() {\n return this._needsResources;\n },\n\n // NOTE: Elements must be queued in proper order for inheritance/composition \n // dependency resolution. Previously this was enforced for inheritance,\n // and by rule for composition. It's now entirely by rule.\n waitingForQue ue: function() {\n return queue.enqueue(this, this.registerWhenReady, this. _register);\n },\n\n loadResources: function() {\n this._needsResourc es = true;\n this.loadStyles(function() {\n this._needsResources = f alse;\n this.registerWhenReady();\n }.bind(this));\n }\n\n });\n \n // semi-pluggable APIs \n\n // TODO(sjmiles): should be fully pluggable (ak a decoupled, currently\n // the various plugins are allowed to depend on each o ther directly)\n api.publish(api.declaration, prototype);\n\n // utility and b ookkeeping\n\n function isRegistered(name) {\n return Boolean(HTMLElement.ge tPrototypeForTag(name));\n }\n\n function isCustomTag(name) {\n return (nam e && name.indexOf('-') >= 0);\n }\n\n // boot tasks\n\n whenPolymerReady(func tion() {\n document.body.removeAttribute('unresolved');\n document.dispatc hEvent(\n new CustomEvent('polymer-ready', {bubbles: true})\n );\n });\ n\n // register polymer-element with document\n\n document.registerElement('po lymer-element', {prototype: prototype});\n\n})(Polymer);\n","/*\n * Copyright (c ) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.tx t\n * The complete set of authors may be found at http://polymer.github.io/AUTHO RS.txt\n * The complete set of contributors may be found at http://polymer.githu b.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proj ect is also\n * subject to an additional IP rights grant found at http://polymer .github.io/PATENTS.txt\n */\n\n/**\n * The `auto-binding` element extends the te mplate element. It provides a quick \n * and easy way to do data binding without the need to setup a model. \n * The `auto-binding` element itself serves as the model and controller for the \n * elements it contains. Both data and event han dlers can be bound. \n *\n * The `auto-binding` element acts just like a templat e that is bound to \n * a model. It stamps its content in the dom adjacent to it self. When the \n * content is stamped, the `template-bound` event is fired.\n * \n * Example:\n *\n * <template is=\"auto-binding\">\n * <div>Say some thing: <input value=\"{{value}}\"></div>\n * <div>You said: {{value}}</div >\n * <button on-tap=\"{{buttonTap}}\">Tap me!</button>\n * </template >\n * <script>\n * var template = document.querySelector('template');\ n * template.value = 'something';\n * template.buttonTap = function( ) {\n * console.log('tap!');\n * };\n * </script>\n *\n * @mod ule Polymer\n * @status stable\n*/\n\n(function() {\n\n var element = document. createElement('polymer-element');\n element.setAttribute('name', 'auto-binding' );\n element.setAttribute('extends', 'template');\n element.init();\n\n Polym er('auto-binding', {\n\n createdCallback: function() {\n this.syntax = t his.bindingDelegate = this.makeSyntax();\n // delay stamping until polymer- ready so that auto-binding is not\n // required to load last.\n Polyme r.whenPolymerReady(function() {\n this.model = this;\n this.setAtt ribute('bind', '');\n // we don't bother with an explicit signal here, we could ust a MO\n // if necessary\n this.async(function() {\n // note: this will marshall *all* the elements in the parentNode\n // rather than just stamped ones. We'd need to use createInstance\n // to fix this or something else fancier.\n this.marshalNodeReferences(th is.parentNode);\n // template stamping is asynchronous so stamping isn' t complete\n // by polymer-ready; fire an event so users can use stampe d elements\n this.fire('template-bound');\n });\n }.bind(th is));\n },\n\n makeSyntax: function() {\n var events = Object.create( Polymer.api.declaration.events);\n var self = this;\n events.findContr oller = function() { return self.model; };\n\n var syntax = new PolymerExpr essions();\n var prepareBinding = syntax.prepareBinding; \n syntax.pr epareBinding = function(pathString, name, node) {\n return events.prepare EventBinding(pathString, name, node) ||\n prepareBinding.call(synt ax, pathString, name, node);\n };\n return syntax;\n }\n\n });\n\n })();\n"]} 1 {"version":3,"file":"polymer.js","sources":["polymer.concat.js"],"names":["windo w","PolymerGestures","scope","HAS_FULL_PATH","pathTest","document","createElemen t","createShadowRoot","sr","s","appendChild","addEventListener","ev","path","sto pPropagation","CustomEvent","bubbles","head","dispatchEvent","parentNode","remov eChild","target","shadow","inEl","shadowRoot","webkitShadowRoot","canTarget","Bo olean","elementFromPoint","targetingShadow","this","olderShadow","os","olderShad owRoot","se","querySelector","allShadows","element","shadows","push","searchRoot ","inRoot","x","y","t","owner","nodeType","Node","DOCUMENT_NODE","DOCUMENT_FRAGM ENT_NODE","findTarget","inEvent","clientX","clientY","findTouchAction","n","i"," length","ELEMENT_NODE","hasAttribute","getAttribute","host","LCA","a","b","conta ins","adepth","depth","bdepth","d","walk","u","deepContains","common","insideNod e","node","rect","getBoundingClientRect","left","right","top","bottom","targetFi nding","bind","shadowSelector","v","selector","rule","attrib2css","selectors","s tyles","hasTouchAction","style","touchAction","hasShadowRoot","ShadowDOMPolyfill ","forEach","r","String","map","el","textContent","MOUSE_PROPS","MOUSE_DEFAULTS" ,"NOP_FACTORY","eventFactory","preventTap","makeBaseEvent","inType","inDict","e" ,"createEvent","initEvent","cancelable","makeGestureEvent","Object","create","k" ,"keys","makePointerEvent","p","buttons","pressure","pointerId","width","height" ,"tiltX","tiltY","pointerType","hwTimestamp","isPrimary","_source","PointerMap", "USE_MAP","m","Map","pointers","POINTERS_FN","values","prototype","size","set"," inId","indexOf","has","delete","splice","get","clear","callback","thisArg","call ","currentGestures","CLONE_PROPS","CLONE_DEFAULTS","HAS_SVG_INSTANCE","SVGElemen tInstance","dispatcher","pointermap","requiredGestures","eventMap","eventSources ","eventSourceList","gestures","dependencyMap","down","listeners","index","up"," gestureQueue","registerSource","name","source","newEvents","events","registerGes ture","obj","g","exposes","toLowerCase","register","initial","es","l","unregiste r","fireEvent","move","type","fillGestureQueue","cancel","tapPrevented","eventHa ndler","_handledByPG","gesturesWanted","currentTarget","_pgEvents","ri","gk","fn ","listen","addEvent","unlisten","removeEvent","eventName","boundHandler","remov eEventListener","makeEvent","preventDefault","_target","cloneEvent","eventCopy", "correspondingUseElement","clone","gestureTrigger","rg","_requiredGestures","j", "requestAnimationFrame","boundGestureTrigger","activateGesture","gesture","dep", "recognizer","_pgListeners","actionNode","defaultActions","setAttribute","handle r","capture","deactivateGesture","DEDUP_DIST","WHICH_TO_BUTTONS","HAS_BUTTONS"," MouseEvent","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimu latedFromTouch","lts","dx","Math","abs","dy","prepareEvent","which","mousedown", "mouseup","mousemove","cleanupMouse","relatedTarget","DEDUP_TIMEOUT","Array","CL ICK_COUNT_TIMEOUT","HYSTERESIS","HAS_TOUCH_ACTION","touchEvents","scrollTypes"," EMITTER","XSCROLLER","YSCROLLER","touchActionToScrollType","st","firstTouch","is PrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scroll ing","cancelResetClickCount","removePrimaryPointer","inPointer","resetClickCount ","clickCount","resetId","setTimeout","clearTimeout","typeToButtons","ret","touc h","id","currentTouchEvent","fastPath","touchToPointer","cte","detail","webkitRa diusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","self","process Touches","inFunction","tl","changedTouches","_cancel","cleanUpPointer","shouldSc roll","scrollAxis","oa","da","doa","findTouch","inTL","vacuumTouches","touches", "value","key","touchstart","dedupSynthMouse","touchmove","dd","sqrt","touchcance l","touchend","lt","HAS_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","ms Events","POINTER_TYPES","cleanup","MSPointerDown","MSPointerMove","MSPointerUp", "MSPointerCancel","pointerEvents","pointerdown","pointermove","pointerup","point ercancel","nav","navigator","PointerEvent","msPointerEnabled","undefined","ontou chstart","isSafari","userAgent","match","body","track","trackx","tracky","WIGGLE _THRESHOLD","clampDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY" ,"fireTrack","inTrackingData","downEvent","lastMoveEvent","xDirection","yDirecti on","gestureProto","trackInfo","ddx","screenX","ddy","screenY","downTarget","tra cking","hold","HOLD_DELAY","heldPointer","holdJob","pulse","Date","now","timeSta mp","held","fireHold","clearInterval","setInterval","inHoldTime","holdTime","tap ","shouldTap","downState","start","altKey","ctrlKey","metaKey","shiftKey","globa l","assert","condition","message","Error","isDecimalDigit","ch","isWhiteSpace"," fromCharCode","isLineTerminator","isIdentifierStart","isIdentifierPart","isKeywo rd","skipWhitespace","charCodeAt","getIdentifier","slice","scanIdentifier","Toke n","Identifier","Keyword","NullLiteral","BooleanLiteral","range","scanPunctuator ","code2","ch2","code","ch1","Punctuator","throwError","Messages","UnexpectedTok en","scanNumericLiteral","number","NumericLiteral","parseFloat","scanStringLiter al","quote","str","octal","StringLiteral","isIdentifierName","token","advance"," EOF","lex","lookahead","peek","pos","messageFormat","error","args","arguments"," msg","replace","whole","description","throwUnexpected","expect","matchKeyword"," keyword","parseArrayInitialiser","elements","parseExpression","delegate","create ArrayExpression","parseObjectPropertyKey","createLiteral","createIdentifier","pa rseObjectProperty","createProperty","parseObjectInitialiser","properties","creat eObjectExpression","parseGroupExpression","expr","parsePrimaryExpression","creat eThisExpression","parseArguments","parseNonComputedProperty","parseNonComputedMe mber","parseComputedMember","parseLeftHandSideExpression","property","createMemb erExpression","createCallExpression","parseUnaryExpression","parsePostfixExpress ion","createUnaryExpression","binaryPrecedence","prec","parseBinaryExpression"," stack","operator","pop","createBinaryExpression","parseConditionalExpression","c onsequent","alternate","createConditionalExpression","parseFilter","createFilter ","parseFilters","parseTopLevel","Syntax","parseInExpression","parseAsExpression ","createTopLevel","createAsExpression","indexName","createInExpression","parse" ,"inDelegate","state","labelSet","TokenName","ArrayExpression","BinaryExpression ","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement ","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExp ression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel", "Redeclaration","esprima","prepareBinding","expressionText","filterRegistry","ex pression","getExpression","scopeIdent","tagName","ex","console","model","oneTime ","binding","getBinding","polymerExpressionScopeIdent_","indexIdent","polymerExp ressionIndexIdent_","expressionParseCache","ASTDelegate","Expression","valueFn_" ,"IdentPath","Path","object","accessor","computed","dynamicDeps","simplePath","g etFn","Filter","notImplemented","arg","valueFn","filters","deps","currentPath"," ConstantObservable","value_","convertStylePropertyName","c","findScope","prop"," parentScopeName","hasOwnProperty","isLiteralExpression","pathString","isNaN","Nu mber","PolymerExpressions","observer","addPath","getValueFrom","setValue","newVa lue","setValueFrom",{"end":{"file":"polymer.concat.js","comments_before":[],"nlb ":false,"endpos":92826,"pos":92818,"col":8,"line":3185,"value":"fullPath","type" :"name"},"start":{"file":"polymer.concat.js","comments_before":[],"nlb":false,"e ndpos":92826,"pos":92818,"col":8,"line":3185,"value":"fullPath","type":"name"}," name":"fullPath"},"fullPath","fullPath_","parts","context","propName","transform ","toModelDirection","initialArgs","toModel","toDOM","apply","unaryOperators","+ ","-","!","binaryOperators","*","/","%","<",">","<=",">=","==","!=","===","!==", "&&","||","op","argument","test","ident","filter","arr","kind","open","discardCh anges","deliver","close","firstTime","firstValue","startReset","getValue","finis hReset","setValueFn","CompoundObserver","ObserverTransform","count","random","to String","styleObject","join","tokenList","tokens","prepareInstancePositionChange d","template","templateInstance","valid","PathObserver","prepareInstanceModel"," scopeName","parentScope","createScopeObject","__proto__","defineProperty","confi gurable","writable","Polymer","version","Platform","logFlags","flush","CustomEle ments","useNative","ready","takeRecords","instanceof","base","HTMLImports","wrap ","unwrap","whenImportsReady","doc","mainDoc","whenDocumentReady","watchImportsL oad","isDocumentReady","readyState","requiredReadyState","checkReady","READY_EVE NT","markTargetLoaded","event","__loaded","checkDone","loaded","loadedImport","i mports","querySelectorAll","imp","isImportLoaded","link","__importParsed","handl eImports","nodes","isImport","handleImport","localName","rel","import","hasNativ e","isIE","hasShadowDOMPolyfill","wrapIfNeeded","currentScriptDescriptor","scrip t","currentScript","scripts","MutationObserver","mxns","addedNodes","observe","c hildList","readyTime","getTime","whenReady","withDependencies","task","depends", "marshal","module","dependsOrFactory","moduleFactory","modules","using","modular ize","insertBefore","firstChild","detectObjectObserve","recs","records","deliver ChangeRecords","unobserve","detectEval","chrome","app","runtime","getDeviceStora ge","f","Function","isIndex","toNumber","isObject","areSameValue","numberIsNaN", "getPathCharType","char","noop","parsePath","maybeUnescapeQuote","nextChar","mod e","newChar","actions","append","transition","action","typeMap","pathStateMachin e","isIdent","identRegExp","privateToken","constructorIsPrivate","hasEval","comp iledGetValueFromFn","getPath","pathCache","invalidPath","formatAccessor","dirtyC heck","cycles","MAX_DIRTY_CHECK_CYCLES","check_","testingExposeCycleCount","dirt yCheckCycleCount","objectIsEmpty","diffIsEmpty","diff","added","removed","change d","diffObjectFromOldObject","oldObject","isArray","runEOMTasks","eomTasks","new ObservedObject","state_","OPENED","discardRecords","first","obs","arrayObserve", "discard","observedObjectCache","getObservedObject","dir","newObservedSet","root Obj","rootObjProps","objects","getPrototypeOf","allRootObjNonObservedProps","rec ","observers","iterateObjects_","observerCount","record","Observer","unobservedC ount","observedSetCache","getObservedSet","lastObservedSet","UNOPENED","callback _","target_","directObserver_","id_","nextObserverId","addToAll","_allObserversC ount","collectObservers","allObservers","removeFromAll","ObjectObserver","oldObj ect_","ArrayObserver","array","object_","path_","reportChangesOnOpen","reportCha ngesOnOpen_","observed_","identFn","observable","getValueFn","dontPassThroughSet ","observable_","getValueFn_","setValueFn_","dontPassThroughSet_","diffObjectFro mChangeRecords","changeRecords","oldValues","expectedRecordTypes","oldValue","ne wSplice","addedCount","ArraySplice","calcSplices","current","currentStart","curr entEnd","old","oldStart","oldEnd","arraySplice","intersect","start1","end1","sta rt2","end2","mergeSplice","splices","inserted","insertionOffset","intersectCount ","deleteCount","prepend","offset","createInitialSplices","JSON","stringify","pr ojectArraySplices","concat","hasObserve","createObject","proto","newObject","get OwnPropertyNames","getOwnPropertyDescriptor","identStart","identPart","RegExp"," beforePath","ws","[","eof","inPath",".","beforeIdent","inIdent","0","beforeEleme nt","'","\"","afterZero","]","inIndex","inSingleQuote","else","inDoubleQuote","a fterElement","iterateObjects","runEOM","eomObj","pingPong","eomRunScheduled","CL OSED","RESETTING","connect_","disconnect_","report_","changes","_errorThrownDuri ngCallback","runningMicrotaskCheckpoint","hasDebugForceFullDelivery","eval","per formMicrotaskCheckpoint","anyChanged","toCheck","clearObservers","copyObject","c opy","applySplices","previous","spliceArgs","addIndex","skipChanges","observerSe ntinel","needsDirectObserver","addObserver","observedCallback_","add","update"," EDIT_LEAVE","EDIT_UPDATE","EDIT_ADD","EDIT_DELETE","calcEditDistances","rowCount ","columnCount","distances","equals","north","west","spliceOperationsFromEditDis tances","edits","min","northWest","reverse","prefixCount","suffixCount","minLeng th","sharedPrefix","sharedSuffix","ops","oldIndex","searchLength","index1","inde x2","calculateSplices","currentValue","previousValue","runEOM_","observerSentine l_","hasObjectObserve","getTreeScope","getElementById","updateBindings","binding s","bindings_","returnBinding","sanitizeValue","updateText","data","textBinding" ,"updateAttribute","conditional","removeAttribute","attributeBinding","getEventF orInputType","checkboxEventType","updateInput","input","santizeFn","inputBinding ","bindInputEvent","postEventFn","eventType","booleanSanitize","getAssociatedRad ioButtons","form","treeScope","radios","checkedPostEvent","radio","checkedBindin g","checked","updateOption","option","select","selectBinding","HTMLSelectElement ","optionBinding","bindFinished","maybeUpdateBindings","enable","Text","Element" ,"div","checkbox","initMouseEvent","HTMLInputElement","HTMLElement","sanitizeFn" ,"HTMLTextAreaElement","HTMLOptionElement","getFragmentRoot","searchRefId","ref" ,"protoContent_","templateCreator_","isSVGTemplate","namespaceURI","isHTMLTempla te","isAttributeTemplate","semanticTemplateElements","isTemplate","isTemplate_", "forAllTemplatesFrom","subTemplates","allTemplatesSelectors","bootstrapTemplates RecursivelyFrom","bootstrap","HTMLTemplateElement","decorate","content","mixin", "to","from","getOrCreateTemplateContentsOwner","ownerDocument","defaultView","te mplateContentsOwner_","implementation","createHTMLDocument","lastChild","getTemp lateStagingDocument","stagingDocument_","isStagingDocument","href","baseURI","ex tractTemplateFromAttributeTemplate","attribs","attributes","attrib","templateAtt ributeDirectives","extractTemplateFromSVGTemplate","liftNonNativeTemplateChildre nIntoContent","useRoot","child","fixTemplateElementPrototype","hasProto","ensure SetModelScheduled","setModelFn_","setModelFnScheduled_","getBindings","delegate_ ","processBindings","model_","parseMustaches","prepareBindingFn","startIndex","l astIndex","endIndex","onlyOneTime","oneTimeStart","terminator","trim","delegateF n","hasOnePath","isSimplePath","combinator","processOneTimeBinding","processSing lePathBinding","processBinding","instanceBindings","iter","processBindingDirecti ves_","parseWithDefault","parseAttributeBindings","attr","substring","IF","BIND" ,"REPEAT","if","repeat","TEXT_NODE","cloneAndBindInstance","parent","stagingDocu ment","importNode","nextSibling","children","setDelegate_","createInstanceBindin gMap","getContentUid","contentUidCounter","getInstanceBindingMap","contentId","b indingMaps","bindingMap_","TemplateIterator","templateElement","closed","templat eElement_","instances","iteratedValue","presentValue","arrayObserver","opt_this" ,"Document","documentElement","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP", "COL","CAPTION","OPTION","OPTGROUP","hasTemplateElement","html","TypeError","tem plateObserver","refChanged_","opt_instanceRef","templateIsDecorated_","isNativeH TMLTemplate","bootstrapContents","liftContents","liftRoot","content_","createDoc umentFragment","instanceRef_","htmlElement","HTMLUnknownElement","contentDescrip tor","enumerable","directives","iterator_","closeDeps","updateDependencies","att ributeFilter","createInstance","bindingDelegate","newDelegate_","refContent_","r ef_","emptyInstance","instance","terminator_","instanceRecord","templateInstance _","firstNode","lastNode","collectTerminator","raw","valueChanged","updateIterat edValue","getUpdatedValue","instancePositionChangedFn_","instanceModelFn_","next Ref","ifOneTime","ifValue","hasIf","updateIfValue","updateValue","observeValue", "handleSplices","getLastInstanceNode","subtemplateIterator","getLastTemplateNode ","insertInstanceAt","fragment","previousInstanceLast","extractInstanceAt","getD elegateFn","instanceCache","removeDelta","closeInstanceBindings","reportInstance sMoved","reportInstanceMoved","forAllTemplatesFrom_","endOfMicrotask","twiddle", "iterations","callbacks","atEndOfMicrotask","shift","createTextNode","JsMutation Observer","characterData","flushing","group","groupEnd","FLUSH_POLL_INTERVAL","f lushPoll","originalImportNode","deep","imported","upgradeAll","replaceUrlsInCssT ext","cssText","baseUrl","keepAbsolute","regexp","pre","url","post","urlPath","r esolveRelativeUrl","URL","makeDocumentRelPath","root","port","protocol","makeRel Path","sourceUrl","targetUrl","pathname","split","unshift","search","hash","urlR esolver","resolveDom","resolveAttributes","resolveStyles","templates","resolveTe mplate","resolveStyle","resolveCssText","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","ha sAttributes","resolveElementAttributes","URL_ATTRS_SELECTOR","URL_ATTRS","replac ement","URL_TEMPLATE_SEARCH","Loader","regex","cache","requests","extractUrls"," text","matched","matches","exec","process","done","fetch","inflight","req","xhr" ,"wait","handleXhr","request","response","responseText","resolve","XMLHttpReques t","send","onerror","onload","pending","StyleResolver","loader","flatten","resol veNode","intermediate","loadStyles","loadedStyle","styleResolver","extend","api" ,"pd","nom","inObj","copyProperty","inName","inSource","inTarget","getPropertyDe scriptor","inObject","job","stop","Job","go","inContext","boundComplete","comple te","h","handle","cancelAnimationFrame","createDOM","inTagOrNode","inHTML","inAt trs","dom","cloneNode","innerHTML","registry","tag","getPrototypeForTag","origin alStopPropagation","Event","cancelBubble","DOMTokenList","remove","toggle","bool ","switch","oldName","newName","ArraySlice","namedNodeMap","NamedNodeMap","MozNa medAttrMap","NodeList","HTMLCollection","$super","arrayOfArgs","caller","_super" ,"nameInThis","warn","memoizeSuper","n$","method","nextSuper","super","noopHandl er","deserializeValue","inferredType","typeHandlers","string","date","boolean"," parseInt","function","declaration","publish","apis","utils","async","timeout","c ancelAsync","fire","onNode","asyncFire","classFollows","anew","className","class List","injectBoundHTML","instanceTemplate","nop","nob","asyncMethod","log","EVEN T_PREFIX","addHostListeners","eventDelegates","methodName","getEventHandler","di spatchMethod","copyInstanceAttributes","a$","_instanceAttributes","takeAttribute s","_publishLC","attributeToProperty","propertyForAttribute","bindPattern","stri ngValue","serializeValue","reflectPropertyToAttribute","serializedValue","resolv eBindingValue","updateRecord","createPropertyObserver","_observeNames","o","_pro pertyObserver","registerObserver","observeArrayValue","openPropertyObserver","no tifyPropertyChanges","newValues","paths","called","ov","nv","invokeMethod","deli verChanges","propertyChanged_","reflect","callbackName","closeNamedObserver","re gisterNamedObserver","emitPropertyChangeRecord","notifier","notifier_","getNotif ier","notify","bindToAccessor","resolveFn","privateName","privateObservable","re solvedValue","createComputedProperties","_computedNames","syntax","bindProperty" ,"_observers","closeObservers","o$","_namedObservers","closeNamedObservers","mdv ","enableBindingsReflection","_recordBinding","mixinSuper","makeElementReady","a syncUnbindAll","_unbound","unbind","_unbindAllJob","unbindAll","cancelUnbindAll" ,"mustachePattern","isBase","PolymerBase","created","createdCallback","prepareEl ement","_elementPrepared","shadowRoots","_readied","parseDeclarations","attached Callback","attached","enteredView","hasBeenAttached","domReady","detachedCallbac k","preventDispose","detached","leftView","enteredViewCallback","leftViewCallbac k","enteredDocumentCallback","leftDocumentCallback","parseDeclaration","elementE lement","fetchTemplate","shadowFromTemplate","shadowRootReady","lightFromTemplat e","refNode","eventController","marshalNodeReferences","$","attributeChangedCall back","attributeChanged","onMutation","listener","mutations","disconnect","subtr ee","constructor","Base","shimCssText","is","ShadowCSS","makeScopeSelector","STY LE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","installControllerStyles","findStyl eScope","scopeHasNamedStyle","cssTextForScope","installScopeCssText","installSco peStyle","cssTextToScopeStyle","applyStyleToScope","styleCacheForScope","polyfil lScopeStyleCache","_scopeStyles","_currentScript","getRegisteredPrototype","regi sterPrototype","notifyPrototype","waitingForPrototype","client","waitPrototype", "registerWhenReady","prototypesByName","consumeDeclarations","declarations","res olveElementPaths","addResolvePathApi","assetPath","resolvePath","importRuleForSh eet","sheet","createStyleElement","firstElementChild","s$","nextElementSibling", "cssTextFromSheet","__resource","matchesSelector","inSelector","STYLE_SELECTOR", "STYLE_LOADABLE_MATCH","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","templ ateContent","convertSheetsToStyles","findLoadableStyles","templateUrl","copyShee tAttributes","replaceChild","loadables","installSheets","cacheSheets","cacheStyl es","installLocalSheets","installGlobalStyles","sheets","findNodes","matcher","t emplateNodes","styleForScope","scopeDescriptor","webkitMatchesSelector","mozMatc hesSelector","mixedCaseEventTypes","parseHostEvents","delegates","addAttributeDe legates","hasEventPrefix","removeEventPrefix","prefixLength","findController","c ontroller","prepareEventBinding","bindingValue","inferObservers","explodeObserve rs","exploded","ni","names","optimizePropertyMaps","_publishNames","publishPrope rties","requireProperties","lowerCaseMap","propertyInfos","createPropertyAccesso r","createPropertyAccessors","ATTRIBUTES_ATTRIBUTE","ATTRIBUTES_REGEX","inheritA ttributesObjects","inheritObject","publishAttributes","accumulateInstanceAttribu tes","clonable","isInstanceAttribute","blackList","extends","noscript","assetpat h","cache-csstext","installBindingDelegate","ensurePrototypeTraversal","ancestor ","extendeeName","buildPrototype","publishConstructor","extension","generateBase Prototype","desugarBeforeChaining","chainPrototypes","desugarAfterChaining","inh eritMetaData","chained","chainObject","extendee","shimStyling","registerCallback ","symbol","ctor","extnds","findBasePrototype","ensureBaseApi","memoizedBases"," extended","mixinMethod","info","typeExtension","findTypeExtension","registerElem ent","inherited","queueForElement","mainQueue","importQueue","nextQueued","queue ","waitToReady","addReadyCallback","check","__queue","enqueue","shouldAdd","read ied","flushable","addToFlushQueue","nextElement","canReady","isEmpty","flushQueu e","polyfillWasReady","upgradeDocumentTree","flushReadyCallbacks","readyCallback s","whenPolymerReady","isRegistered","isCustomTag","init","loadResources","regis tered","waitingForQueue","waitingForResources","_register","handleNoScript","_ne edsResources","importElements","elementOrFragment","importUrls","urls","frag","m akeSyntax"],"mappings":"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 hC,EAAQo/B,WAAWj+B,GAC1BmH,EAAOm5B,EAAKn5B,KACZ4I,EAAQuwB,EAAKvwB,MAOE,MAAZ5I,EA AK,IACVA,EAAOA,EAAKo5B,UAAU,EAGxB,KAAIjE,EAAWz9B,IACVsI,IAASq5B,GAAMr5B,IAASs5B, GAAQt5B,IAASu5B,EAD9C,CAKA,GAAIrc,GAAS4a,EAAelvB,EAAO5I,EAAMtI,EACbqgC,EACvB7a,I AGLuU,EAAS75B,KAAKoI,EAAMkd,IAatB,MAVIiY,GAAWz9B,KACb+5B,EAAS0D,YAAa,EACtB1D,EAA S+H,GAAKP,EAAiBvhC,EAAS2hC,EAAItB,GAC5CtG,EAASj3B,KAAOy+B,EAAiBvhC,EAAS4hC,EAAMv B,GAChDtG,EAASgI,OAASR,EAAiBvhC,EAAS6hC,EAAQxB,IAEhDtG,EAAS+H,IAAO/H,EAASj3B,MAA Si3B,EAASgI,SAC7ChI,EAASj3B,KAAOs9B,EAAe,OAAQwB,EAAM5hC,EAASqgC,KAGnDtG,EAGT,QAA SiG,GAAY19B,EAAM+9B,GACzB,GAAI/9B,EAAK7B,WAAaC,KAAKW,aACzB,MAAOmgC,GAAuBl/B,EAAM +9B,EAEtC,IAAI/9B,EAAK7B,WAAaC,KAAKshC,UAAW,CACpC,GAAIxc,GAAS4a,EAAe99B,EAAK83B, KAAM,cAAe93B,EAC1B+9B,EAC5B,IAAI7a,EACF,OAAQ,cAAeA,GAG3B,SAGF,QAASyc,GAAqB3/B,EA AM4/B,EAAQC,EAAiBpI,EAAU3a,EACzC/E,EACA+mB,GAK5B,IAAK,GAHDr2B,GAAQm3B,EAAO7jC,YA AY8jC,EAAgBC,WAAW9/B,GAAM,IAE5DnB,EAAI,EACCu+B,EAAQp9B,EAAKsoB,WAAY8U,EAAOA,EAAQ A,EAAM2C,YACrDJ,EAAqBvC,EAAO30B,EAAOo3B,EACbpI,EAASuI,SAASnhC,KAClBie,EACA/E,EAC A+mB,EAUxB,OAPIrH,GAAS0D,aACXO,oBAAoBC,SAASlzB,EAAOzI,GAChC+X,GACFtP,EAAMw3B,aAA aloB,IAGvB6lB,EAAgBn1B,EAAOgvB,EAAU3a,EAAOgiB,GACjCr2B,EAGT,QAASy3B,GAAyBlgC,EAA M+9B,GACtC,GAAIv8B,GAAMk8B,EAAY19B,EAAM+9B,EAC5Bv8B,GAAIw+B,WAEJ,KAAK,GADDp6B,GA AQ,EACHw3B,EAAQp9B,EAAKsoB,WAAY8U,EAAOA,EAAQA,EAAM2C,YACrDv+B,EAAIw+B,SAASp6B,KA AWs6B,EAAyB9C,EAAOW,EAG1D,OAAOv8B,GAOT,QAAS2+B,GAAcvE,GACrB,GAAI5uB,GAAK4uB,EAAQ 5N,GAGjB,OAFKhhB,KACHA,EAAK4uB,EAAQ5N,IAAMoS,KACdpzB,EAUT,QAASqzB,GAAsBzE,EAAS+B ,GACtC,GAAI2C,GAAYH,EAAcvE,EAC9B,IAAI+B,EAAW,CACb,GAAIn8B,GAAMm8B,EAAU4C,YAAYD,E AKhC,OAJK9+B,KACHA,EAAMm8B,EAAU4C,YAAYD,GACxBJ,EAAyBtE,EAAS+B,EAAUthB,qBAE3C7a,E AGT,GAAIA,GAAMo6B,EAAQ4E,WAKlB,OAJKh/B,KACHA,EAAMo6B,EAAQ4E,YACVN,EAAyBtE,EAASnr B,aAEjCjP,EAeT,QAASi/B,GAAiBC,GACxBvjC,KAAKwjC,QAAS,EACdxjC,KAAKyjC,iBAAmBF,EACx BvjC,KAAK0jC,aACL1jC,KAAKmhB,KAAO7N,OACZtT,KAAK2jC,iBACL3jC,KAAK4jC,aAAetwB,OACp BtT,KAAK6jC,cAAgBvwB,OAl7BvB,GAyCI7M,GAzCAvC,EAAU4J,MAAMjH,UAAU3C,QAAQuD,KAAKpE, KAAKyK,MAAMjH,UAAU3C,QA0C5DyS,GAAOlQ,KAA+C,kBAAjCkQ,GAAOlQ,IAAII,UAAU3C,QAC5CuC, EAAMkQ,EAAOlQ,KAEbA,EAAM,WACJzG,KAAKwF,QACLxF,KAAK4G,WAGPH,EAAII,WACFE,IAAK,SAAS 2K,EAAKD,GACjB,GAAIhJ,GAAQzI,KAAKwF,KAAKyB,QAAQyK,EAClB,GAARjJ,GACFzI,KAAKwF,KAA K/E,KAAKiR,GACf1R,KAAK4G,OAAOnG,KAAKgR,IAEjBzR,KAAK4G,OAAO6B,GAASgJ,GAIzBpK,IAAK ,SAASqK,GACZ,GAAIjJ,GAAQzI,KAAKwF,KAAKyB,QAAQyK,EAC9B,MAAY,EAARjJ,GAGJ,MAAOzI,MA AK4G,OAAO6B,IAGrBtB,SAAQ,SAASuK,GACf,GAAIjJ,GAAQzI,KAAKwF,KAAKyB,QAAQyK,EAC9B,OA AY,GAARjJ,GACK,GAETzI,KAAKwF,KAAK4B,OAAOqB,EAAO,GACxBzI,KAAK4G,OAAOQ,OAAOqB,EAAO ,IACnB,IAGTvE,QAAS,SAAS4nB,EAAGgY,GACnB,IAAK,GAAIpiC,GAAI,EAAGA,EAAI1B,KAAKwF,KA AK7D,OAAQD,IACpCoqB,EAAErkB,KAAKq8B,GAAY9jC,KAAMA,KAAK4G,OAAOlF,GAAI1B,KAAKwF,KA AK9D,GAAI1B,QAyB/B,mBAArBzB,UAAS4D,WAClB4hC,SAASl9B,UAAU1E,SAAW,SAASU,GACrC,MAAI A,KAAS7C,MAAQ6C,EAAKxD,aAAeW,MAChC,EACFA,KAAKgkC,gBAAgB7hC,SAASU,IAIzC,IAAIs/B,G AAO,OACPC,EAAS,SACTF,EAAK,KAELrC,GACF5Z,UAAY,EACZqc,QAAU,EACVj/B,MAAQ,EACRm6B,KA AO,GAGLO,GACFkG,OAAS,EACTC,OAAS,EACTC,OAAS,EACTC,IAAM,EACNC,IAAM,EACNC,IAAM,EACN C,UAAY,EACZC,KAAO,EACPC,SAAW,EACXC,QAAU,EACVC,UAAY,GAGVC,EAAoD,mBAAxBrG,oBAC5BqG ,KAIF,WACE,GAAI9jC,GAAIvC,SAASC,cAAc,YAC3B+D,EAAIzB,EAAE29B,QAAQK,cACd+F,EAAOtiC ,EAAE3D,YAAY2D,EAAE/D,cAAc,SACrCW,EAAO0lC,EAAKjmC,YAAY2D,EAAE/D,cAAc,SACxC+oB,EA AOhlB,EAAE/D,cAAc,OAC3B+oB,GAAKgY,KAAOhhC,SAASihC,QACrBrgC,EAAKP,YAAY2oB,KAIrB,I AAI6W,GAAwB,aACxB/4B,OAAOG,KAAKu4B,GAA0B15B,IAAI,SAASmb,GACjD,MAAOA,GAAQnW,cAAgB ,eAC9Bwc,KAAK,KA2BZtnB,UAASM,iBAAiB,mBAAoB,WAC5Cw/B,EAAkC9/B,UAElCwoB,SAASmQ,+BA CR,GAmBE0N,IAMHjuB,EAAO4nB,oBAAsB,WAC3B,KAAMuG,WAAU,wBAIpB,IA6GIC,GA7GA5E,EAAW,e A8GgB,mBAApBnW,oBACT+a,EAAmB,GAAI/a,kBAAiB,SAASsB,GAC/C,IAAK,GAAI5pB,GAAI,EAAGA, EAAI4pB,EAAQ3pB,OAAQD,IAClC4pB,EAAQ5pB,GAAGnC,OAAOylC,iBAWxBzG,oBAAoBC,SAAW,SAAS l6B,EAAI2gC,GAC1C,GAAI3gC,EAAG4gC,qBACL,OAAO,CAET,IAAI3B,GAAkBj/B,CACtBi/B,GAAgB 2B,sBAAuB,CAEvC,IAAIC,GAAuBtH,EAAe0F,IACfqB,EACvBQ,EAAoBD,EACpBE,GAAgBF,EAChBG,G AAW,CAgBf,IAdKH,IACCrH,EAAoByF,IACtB3sB,GAAQquB,GACR1B,EAAkB9D,EAAqCn7B,GACvDi/B ,EAAgB2B,sBAAuB,EACvCC,EAAuBP,EACvBU,GAAW,GACF3H,EAAc4F,KACvBA,EAAkBzD,EAA+Bx7B, GACjDi/B,EAAgB2B,sBAAuB,EACvCC,EAAuBP,KAItBO,EAAsB,CACzBjF,EAA4BqD,EAC5B,IAAI3b, GAAMiX,EAAiC0E,EAC3CA,GAAgBgC,SAAW3d,EAAI4d,yBAejC,MAZIP,GAGF1B,EAAgBkC,aAAeR,EA CtBI,EACTtF,EAAyCwD,EACAj/B,EACAghC,GAChCF,GACT/G,EAAkCkF,EAAgB9E,UAG7C,GAOTF,oB AAoBD,UAAYD,CAEhC,IAAIqH,GAAc/uB,EAAOgvB,oBAAsBzI,YAE3C0I,GACFv+B,IAAK,WACH,MAAO rH,MAAKulC,UAEdM,YAAY,EACZlf,cAAc,EAGXie,KAGHrG,oBAAoB13B,UAAYxB,OAAOC,OAAOogC,E AAY7+B,WAE1DxB,OAAOqhB,eAAe6X,oBAAoB13B,UAAW,UAC/B++B,IA0BxBlH,EAAMH,oBAAoB13B,W ACxBxD,KAAM,SAASwF,EAAM4I,EAAOmO,GAC1B,GAAY,OAAR/W,EACF,MAAOg0B,SAAQh2B,UAAUxD,K AAKoE,KAAKzH,KAAM6I,EAAM4I,EAAOmO,EAExD,IAAInP,GAAOzQ,KACPw9B,EAAM5d,EAAUnO,EAAQ A,EAAMoT,KAAK,SAAS2Y,GAC9C/sB,EAAKrE,aAAa,MAAOoxB,GACzB/sB,EAAKu0B,eAKP,OAFAhlC, MAAKoM,aAAa,MAAOoxB,GACzBx9B,KAAKglC,cACDplB,EAAJ,QAGK5f,KAAKu6B,UAGRv6B,KAAKu6B ,UAAUiD,IAAM/rB,EAFrBzR,KAAKu6B,WAAciD,IAAK/rB,GAKnBA,IAGTowB,0BAA2B,SAASiE,GAIl C,MAHI9lC,MAAK+lC,WACP/lC,KAAK+lC,UAAUC,YAEZF,EAAWzD,IAAOyD,EAAWziC,MAASyiC,EAAW xD,QASjDtiC,KAAK+lC,YACR/lC,KAAK+lC,UAAY,GAAIzC,GAAiBtjC,OAGxCA,KAAK+lC,UAAUE,mB AAmBH,EAAY9lC,KAAK0gC,QAE/CqE,GACFA,EAAiB5a,QAAQnqB,MAAQ2/B,YAAY,EACZuG,iBAAkB,S AG9ClmC,KAAK+lC,gBAnBN/lC,KAAK+lC,YACP/lC,KAAK+lC,UAAU/gB,QACfhlB,KAAK+lC,UAAYzy B,UAoBvB6yB,eAAgB,SAASxmB,EAAOymB,EAAiB5F,GAC3C4F,EACF5F,EAAYxgC,KAAKqmC,aAAaD,G ACtB5F,IACRA,EAAYxgC,KAAKwgC,WAEdxgC,KAAKsmC,cACRtmC,KAAKsmC,YAActmC,KAAKumC,KAA K9H,QAC/B,IAAIA,GAAUz+B,KAAKsmC,WACnB,IAA2B,OAAvB7H,EAAQtT,WACV,MAAOqb,EAET,IAAI niC,GAAM6+B,EAAsBzE,EAAS+B,GACrCkC,EAAkBtD,EAA2Bp/B,MAC7CymC,EAAW/D,EAAgB8C,wBAC /BiB,GAAS/I,iBAAmB19B,KAC5BymC,EAAShJ,cAAgBgB,EACzBgI,EAASlM,aACTkM,EAASC,YAAc,I ASvB,KAAK,GARDC,GAAiBF,EAASG,mBAC5BC,UAAW,KACXC,SAAU,KACVnnB,MAAOA,GAGLje,EAAI,E ACJqlC,GAAoB,EACf9G,EAAQxB,EAAQtT,WAAY8U,EAAOA,EAAQA,EAAM2C,YAAa,CAK3C,OAAtB3C,E AAM2C,cACRmE,GAAoB,EAEtB,IAAIz7B,GAAQk3B,EAAqBvC,EAAOwG,EAAU/D,EACjBr+B,EAAIw+B, SAASnhC,KACbie,EACA6gB,EACAiG,EAASlM,UAC1CjvB,GAAMs7B,kBAAoBD,EACtBI,IACFN,EAASC ,YAAcp7B,GAO3B,MAJAq7B,GAAeE,UAAYJ,EAAStb,WACpCwb,EAAeG,SAAWL,EAAStH,UACnCsH,EAA S/I,iBAAmBpqB,OAC5BmzB,EAAShJ,cAAgBnqB,OAClBmzB,GAGTjkB,GAAI7C,SACF,MAAO3f,MAAK0 gC,QAGdle,GAAI7C,OAAMA,GACR3f,KAAK0gC,OAAS/gB,EACdygB,EAAwBpgC,OAG1BwiB,GAAI4jB, mBACF,MAAOpmC,MAAKwgC,WAAaxgC,KAAKwgC,UAAUwG,KAG1ChC,YAAa,WACNhlC,KAAK+lC,WAAa/l C,KAAKsmC,cAAgBtmC,KAAKumC,KAAK9H,UAGtDz+B,KAAKsmC,YAAchzB,OACnBtT,KAAK+lC,UAAUk B,eACfjnC,KAAK+lC,UAAUmB,oBAAoBlnC,KAAK+lC,UAAUoB,qBAGpD7/B,MAAO,WACLtH,KAAK0gC, OAASptB,OACdtT,KAAKwgC,UAAYltB,OACbtT,KAAKu6B,WAAav6B,KAAKu6B,UAAUiD,KACnCx9B,KA AKu6B,UAAUiD,IAAIxY,QACrBhlB,KAAKsmC,YAAchzB,OACdtT,KAAK+lC,YAEV/lC,KAAK+lC,UAAU kB,eACfjnC,KAAK+lC,UAAU/gB,QACfhlB,KAAK+lC,UAAYzyB,SAGnBwvB,aAAc,SAASloB,GACrB5a ,KAAKwgC,UAAY5lB,EACjB5a,KAAKqjC,YAAc/vB,OACftT,KAAK+lC,YACP/lC,KAAK+lC,UAAUqB,2 BAA6B9zB,OAC5CtT,KAAK+lC,UAAUsB,iBAAmB/zB,SAItC+yB,aAAc,SAASD,GAIrB,QAAShF,GAAWv 4B,GAClB,GAAI2B,GAAK47B,GAAmBA,EAAgBv9B,EAC5C,IAAiB,kBAAN2B,GAGX,MAAO,YACL,MAAOA ,GAAG2Y,MAAMijB,EAAiBpsB,YATrC,GAAKosB,EAaL,OACEhD,eACA4D,IAAKZ,EACLlnB,eAAgBkiB ,EAAW,kBAC3B/a,qBAAsB+a,EAAW,wBACjCpb,+BACIob,EAAW,oCAInB5e,GAAI4jB,iBAAgBA,GACl B,GAAIpmC,KAAKwgC,UACP,KAAMzpB,OAAM,wEAId/W,MAAK8iC,aAAa9iC,KAAKqmC,aAAaD,KAGtC5 jB,GAAI+jB,QACF,GAAI/I,GAAMD,EAAYv9B,KAAMA,KAAK8B,aAAa,OAI9C,IAHK07B,IACHA,EAAMx 9B,KAAKylC,eAERjI,EACH,MAAOx9B,KAET,IAAIsnC,GAAU9J,EAAI+I,IAClB,OAAOe,GAAUA,EAAU 9J,IAqQ/B,IAAIyF,GAAoB,CAqCxB59B,QAAOqhB,eAAezlB,KAAK4F,UAAW,oBACpCQ,IAAK,WACH,G AAIo/B,GAAWzmC,KAAK4mC,iBACpB,OAAOH,GAAWA,EACbzmC,KAAKX,WAAaW,KAAKX,WAAW6mB,iBAA mB5S,SAI9D,IAAIkzB,GAAgBjoC,SAASinC,wBAC7BgB,GAAcjM,aACdiM,EAAcE,YAAc,KAY5BpD,EA AiBz8B,WACfm/B,UAAW,WACT,GAAI7kB,GAAOnhB,KAAKmhB,IACZA,KACEA,EAAKomB,aAAc,GACrBp mB,EAAKqmB,QAAQxiB,QACX7D,EAAKvB,WAAY,GACnBuB,EAAK1P,MAAMuT,UAIjBihB,mBAAoB,SAAS H,EAAYnmB,GACvC3f,KAAKgmC,WAEL,IAAI7kB,GAAOnhB,KAAKmhB,QACZ8E,EAAWjmB,KAAKyjC,iB AEhB+D,GAAU,CACd,IAAI1B,EAAWzD,GAAI,CAQjB,GAPAlhB,EAAKsmB,OAAQ,EACbtmB,EAAKomB,U AAYzB,EAAWzD,GAAGrB,YAC/B7f,EAAKqmB,QAAU9F,EAAeQ,EAAI4D,EAAWzD,GAAIpc,EAAUtG,GAE 3D6nB,EAAUrmB,EAAKqmB,QAGXrmB,EAAKomB,YAAcC,EAErB,WADAxnC,MAAKinC,cAIF9lB,GAAKom B,YACRC,EAAUA,EAAQ3iB,KAAK7kB,KAAK0nC,cAAe1nC,OAG3C8lC,EAAWxD,QACbnhB,EAAKmhB,QA AS,EACdnhB,EAAKvB,QAAUkmB,EAAWxD,OAAOtB,YACjC7f,EAAK1P,MAAQiwB,EAAeU,EAAQ0D,EAAW xD,OAAQrc,EAAUtG,KAEjEwB,EAAKmhB,QAAS,EACdnhB,EAAKvB,QAAUkmB,EAAWziC,KAAK29B,YAC /B7f,EAAK1P,MAAQiwB,EAAeS,EAAM2D,EAAWziC,KAAM4iB,EAAUtG,GAG/D,IAAIlO,GAAQ0P,EAAK 1P,KAIjB,OAHK0P,GAAKvB,UACRnO,EAAQA,EAAMoT,KAAK7kB,KAAKknC,oBAAqBlnC,OAE1CwnC,MA KLxnC,MAAK2nC,YAAYl2B,OAJfzR,MAAKinC,gBAYTE,gBAAiB,WACf,GAAI11B,GAAQzR,KAAKmhB,K AAK1P,KAGtB,OAFKzR,MAAKmhB,KAAKvB,UACbnO,EAAQA,EAAMqT,kBACTrT,GAGTi2B,cAAe,SAASF ,GACtB,MAAKA,OAKLxnC,MAAK2nC,YAAY3nC,KAAKmnC,uBAJpBnnC,MAAKinC,gBAOTC,oBAAqB,SAA Sz1B,GAC5B,GAAIzR,KAAKmhB,KAAKsmB,MAAO,CACnB,GAAID,GAAUxnC,KAAKmhB,KAAKqmB,OAGxB ,IAFKxnC,KAAKmhB,KAAKomB,YACbC,EAAUA,EAAQ1iB,mBACf0iB,EAEH,WADAxnC,MAAKinC,eAKTj nC,KAAK2nC,YAAYl2B,IAGnBk2B,YAAa,SAASl2B,GACfzR,KAAKmhB,KAAKmhB,SACb7wB,GAASA,GA CX,IAAI0Y,GAAUnqB,KAAKmhB,KAAKmhB,SACTtiC,KAAKmhB,KAAKvB,SACX9R,MAAM6gB,QAAQld,E AC5BzR,MAAKinC,aAAax1B,EAAO0Y,IAG3B8c,aAAc,SAASx1B,EAAOm2B,GACvB95B,MAAM6gB,QAAQ ld,KACjBA,MAEEA,IAAUzR,KAAK2jC,gBAGnB3jC,KAAKwrB,YACLxrB,KAAK4jC,aAAenyB,EAChBm2 B,IACF5nC,KAAK6jC,cAAgB,GAAIvS,eAActxB,KAAK4jC,cAC5C5jC,KAAK6jC,cAAchf,KAAK7kB,K AAK6nC,cAAe7nC,OAG9CA,KAAK6nC,cAAcvW,cAAcuI,iBAAiB75B,KAAK4jC,aACL5jC,KAAK2jC,kB AGzDmE,oBAAqB,SAASr/B,GAC5B,GAAa,IAATA,EACF,MAAOzI,MAAKyjC,gBACd,IAAIgD,GAAWzmC, KAAK0jC,UAAUj7B,GAC1By4B,EAAauF,EAASC,WAC1B,KAAKxF,EACH,MAAOlhC,MAAK8nC,oBAAoBr/ B,EAAQ,EAE1C,IAAIy4B,EAAWlgC,WAAaC,KAAKW,cAC7B5B,KAAKyjC,mBAAqBvC,EAC5B,MAAOA,EA GT,IAAI6G,GAAsB7G,EAAW6E,SACrC,OAAKgC,GAGEA,EAAoBC,sBAFlB9G,GAKX8G,oBAAqB,WACnB, MAAOhoC,MAAK8nC,oBAAoB9nC,KAAK0jC,UAAU/hC,OAAS,IAG1DsmC,iBAAkB,SAASx/B,EAAOy/B,G AChC,GAAIC,GAAuBnoC,KAAK8nC,oBAAoBr/B,EAAQ,GACxDg6B,EAASziC,KAAKyjC,iBAAiBpkC,UA CnCW,MAAK0jC,UAAUt8B,OAAOqB,EAAO,EAAGy/B,GAEhCzF,EAAOvX,aAAagd,EAAUC,EAAqBvF,cAG rDwF,kBAAmB,SAAS3/B,GAM1B,IALA,GAAI0/B,GAAuBnoC,KAAK8nC,oBAAoBr/B,EAAQ,GACxDq+B, EAAW9mC,KAAK8nC,oBAAoBr/B,GACpCg6B,EAASziC,KAAKyjC,iBAAiBpkC,WAC/BonC,EAAWzmC,KA AK0jC,UAAUt8B,OAAOqB,EAAO,GAAG,GAExCq+B,IAAaqB,GAAsB,CACxC,GAAItlC,GAAOslC,EAAqB vF,WAC5B//B,IAAQikC,IACVA,EAAWqB,GAEb1B,EAAS7nC,YAAY6jC,EAAOnjC,YAAYuD,IAG1C,MAA O4jC,IAGT4B,cAAe,SAAS79B,GAEtB,MADAA,GAAKA,GAAMA,EAAGxK,KAAKyjC,kBACE,kBAAPj5B,G AAoBA,EAAK,MAGzCq9B,cAAe,SAASlU,GACtB,IAAI3zB,KAAKwjC,QAAW7P,EAAQhyB,OAA5B,CAGA, GAAIskB,GAAWjmB,KAAKyjC,gBAEpB,KAAKxd,EAAS5mB,WAEZ,WADAW,MAAKglB,OAIPsM,eAAckG,a AAax3B,KAAK2jC,cAAe3jC,KAAK4jC,aACzBjQ,EAE3B,IAAI/Y,GAAWqL,EAASua,SACMltB,UAA1Bt T,KAAKqnC,mBACPrnC,KAAKqnC,iBACDrnC,KAAKqoC,cAAcztB,GAAYA,EAASyL,uBAGN/S,SAApCtT ,KAAKonC,6BACPpnC,KAAKonC,2BACDpnC,KAAKqoC,cAAcztB,GACAA,EAASoL,gCAMlC,KAAK,GAFD siB,GAAgB,GAAI7hC,GACpB8hC,EAAc,EACT7mC,EAAI,EAAGA,EAAIiyB,EAAQhyB,OAAQD,IAAK,CA GvC,IAAK,GAFD0F,GAASusB,EAAQjyB,GACjB6sB,EAAUnnB,EAAOmnB,QACZ7iB,EAAI,EAAGA,EAAI 6iB,EAAQ5sB,OAAQ+J,IAAK,CACvC,GAAIiU,GAAQ4O,EAAQ7iB,GAChB+6B,EAAWzmC,KAAKooC,kBA AkBhhC,EAAOqB,MAAQ8/B,EACjD9B,KAAaD,GACf8B,EAAcvhC,IAAI4Y,EAAO8mB,GAI7B8B,GAAenh C,EAAOurB,WAIxB,IAAK,GAAIjxB,GAAI,EAAGA,EAAIiyB,EAAQhyB,OAAQD,IAGlC,IAFA,GAAI0F, GAASusB,EAAQjyB,GACjBi2B,EAAWvwB,EAAOqB,MACfkvB,EAAWvwB,EAAOqB,MAAQrB,EAAOurB,WA AYgF,IAAY,CAC9D,GAAIhY,GAAQ3f,KAAK2jC,cAAchM,GAC3B8O,EAAW6B,EAAcjhC,IAAIsY,EAC7B 8mB,GACF6B,EAAcnhC,OAAOwY,IAEjB3f,KAAKqnC,mBACP1nB,EAAQ3f,KAAKqnC,iBAAiB1nB,IAI9 B8mB,EADYnzB,SAAVqM,EACS6mB,EAEAvgB,EAASkgB,eAAexmB,EAAOrM,OAAWsH,IAIzD5a,KAAKio C,iBAAiBtQ,EAAU8O,GAIpC6B,EAAcpkC,QAAQ,SAASuiC,GAC7BzmC,KAAKwoC,sBAAsB/B,IAC1Bzm C,MAECA,KAAKonC,4BACPpnC,KAAKyoC,qBAAqB9U,KAG9B+U,oBAAqB,SAASjgC,GAC5B,GAAIg+B,G AAWzmC,KAAK0jC,UAAUj7B,EAC1Bg+B,KAAaD,GAGjBxmC,KAAKonC,2BAA2BX,EAASG,kBAAmBn+B,I AG9DggC,qBAAsB,SAAS9U,GAG7B,IAAK,GAFDlrB,GAAQ,EACRwrB,EAAS,EACJvyB,EAAI,EAAGA,EA AIiyB,EAAQhyB,OAAQD,IAAK,CACvC,GAAI0F,GAASusB,EAAQjyB,EACrB,IAAc,GAAVuyB,EACF,KA AOxrB,EAAQrB,EAAOqB,OACpBzI,KAAK0oC,oBAAoBjgC,GACzBA,QAGFA,GAAQrB,EAAOqB,KAGjB,M AAOA,EAAQrB,EAAOqB,MAAQrB,EAAOurB,YACnC3yB,KAAK0oC,oBAAoBjgC,GACzBA,GAGFwrB,IAAU 7sB,EAAOurB,WAAavrB,EAAOmnB,QAAQ5sB,OAG/C,GAAc,GAAVsyB,EAIJ,IADA,GAAItyB,GAAS3B, KAAK0jC,UAAU/hC,OACbA,EAAR8G,GACLzI,KAAK0oC,oBAAoBjgC,GACzBA,KAIJ+/B,sBAAuB,SAAS /B,GAE9B,IAAK,GADDnM,GAAWmM,EAASlM,UACf74B,EAAI,EAAGA,EAAI44B,EAAS34B,OAAQD,IACn C44B,EAAS54B,GAAGsjB,SAIhBwG,UAAW,WACJxrB,KAAK6jC,gBAGV7jC,KAAK6jC,cAAc7e,QACnBh lB,KAAK6jC,cAAgBvwB,SAGvB0R,MAAO,WACL,IAAIhlB,KAAKwjC,OAAT,CAEAxjC,KAAKwrB,WACL, KAAK,GAAI9pB,GAAI,EAAGA,EAAI1B,KAAK0jC,UAAU/hC,OAAQD,IACzC1B,KAAKwoC,sBAAsBxoC,K AAK0jC,UAAUhiC,GAG5C1B,MAAK0jC,UAAU/hC,OAAS,EACxB3B,KAAKgmC,YACLhmC,KAAKyjC,iBAA iBsC,UAAYzyB,OAClCtT,KAAKwjC,QAAS,KAKlBjF,oBAAoBoK,qBAAuBzK,GAC1Cl+B,MAWH,SAAU5B ,GAMV,QAASwqC,GAAerhC,GACtBshC,EAAQtkC,YAAcukC,IACtBC,EAAUtoC,KAAK8G,GAGjB,QAASy hC,KACP,KAAOD,EAAUpnC,QACfonC,EAAUE,UAXd,GAAIH,GAAa,EACbC,KACAF,EAAUtqC,SAAS2qC, eAAe,GAatC,KAAKhrC,OAAO8rB,kBAAoBmf,oBAAoBH,GACjD7e,QAAQ0e,GAAUO,eAAe,IAKpChrC,E AAMwqC,eAAiBA,GAEpB7hB,UAYH,SAAU3oB,GAUV,QAAS6oB,KACFoiB,IACHA,GAAW,EACXjrC,EAAM wqC,eAAe,WACnBS,GAAW,EACXriB,SAAS2T,MAAQjb,QAAQ4pB,MAAM,oBAC/BlrC,EAAM84B,6BACNl Q,SAAS2T,MAAQjb,QAAQ6pB,cAd/B,GAAIzlC,GAAQvF,SAASC,cAAc,QACnCsF,GAAMS,YAAc,oEACp B,IAAIpF,GAAOZ,SAAS8B,cAAc,OAClClB,GAAK+rB,aAAapnB,EAAO3E,EAAKgsB,WAG9B,IAAIke,E AeJ,IAAKjZ,SAAS8J,iBAQZjT,EAAQ,iBARsB,CAC9B,GAAIuiB,GAAsB,GAC1BtrC,QAAOW,iBAAiB, qBAAsB,WAC5CooB,IACA7oB,EAAMqrC,UAAYzzB,YAAYiR,EAAOuiB,KAOzC,GAAItrC,OAAOgpB,iBA AmBA,eAAeC,UAAW,CACtD,GAAIuiB,GAAqB3F,SAASl9B,UAAU87B,UAC5CoB,UAASl9B,UAAU87B,WA Aa,SAAS9/B,EAAM8mC,GAC7C,GAAIC,GAAWF,EAAmBjiC,KAAKzH,KAAM6C,EAAM8mC,EAEnD,OADAzi B,gBAAe2iB,WAAWD,GACnBA,GAKXxrC,EAAM6oB,MAAQA,GAEX/oB,OAAO6oB,UAYV,SAAU3oB,GAwEV ,QAAS0rC,GAAqBC,EAASC,EAASC,EAAcC,GAC5D,MAAOH,GAAQ7vB,QAAQgwB,EAAQ,SAAS1jC,EAAG2 jC,EAAKC,EAAKC,GACnD,GAAIC,GAAUF,EAAIlwB,QAAQ,QAAS,GAEnC,OADAowB,GAAUC,EAAmBP,EA ASM,EAASL,GACxCE,EAAM,IAAOG,EAAU,IAAOD,IAIzC,QAASE,GAAmBP,EAASI,EAAKH,GAExC,GAAI G,GAAkB,MAAXA,EAAI,GACb,MAAOA,EAET,IAAI3nC,GAAI,GAAI+nC,KAAIJ,EAAKJ,EACrB,OAAOC, GAAexnC,EAAE88B,KAAOkL,EAAoBhoC,EAAE88B,MAGvD,QAASkL,GAAoBL,GAC3B,GAAIM,GAAO,GAA IF,KAAIjsC,SAASihC,SACxB/8B,EAAI,GAAI+nC,KAAIJ,EAAKM,EACrB,OAAIjoC,GAAEV,OAAS2oC ,EAAK3oC,MAAQU,EAAEkoC,OAASD,EAAKC,MACxCloC,EAAEmoC,WAAaF,EAAKE,SACfC,EAAYH,EAAM joC,GAElB2nC,EAKX,QAASS,GAAYC,EAAWC,GAK9B,IAJA,GAAIjiC,GAASgiC,EAAUE,SACnBzrC,EA ASwrC,EAAUC,SACnBrsC,EAAImK,EAAOmiC,MAAM,KACjBnqC,EAAIvB,EAAO0rC,MAAM,KACdtsC,EA AEgD,QAAUhD,EAAE,KAAOmC,EAAE,IAC5BnC,EAAEsqC,QACFnoC,EAAEmoC,OAEJ,KAAK,GAAIvnC,G AAI,EAAG+H,EAAI9K,EAAEgD,OAAS,EAAO8H,EAAJ/H,EAAOA,IACvCZ,EAAEoqC,QAAQ,KAEZ,OAAOp qC,GAAE+kB,KAAK,KAAOklB,EAAUI,OAASJ,EAAUK,KA/GpD,GAAIC,IACFC,WAAY,SAASZ,EAAMN,GA CzBA,EAAMA,GAAOM,EAAK5L,cAAcU,QAChCx/B,KAAKurC,kBAAkBb,EAAMN,GAC7BpqC,KAAKwrC,cA Acd,EAAMN,EAEzB,IAAIqB,GAAYf,EAAK9hB,iBAAiB,WACtC,IAAI6iB,EACF,IAAK,GAAiC3qC,GAA 7BY,EAAI,EAAG+H,EAAIgiC,EAAU9pC,OAAgB8H,EAAJ/H,IAAWZ,EAAI2qC,EAAU/pC,IAAKA,IAClE Z,EAAE29B,SACJz+B,KAAKsrC,WAAWxqC,EAAE29B,QAAS2L,IAKnCsB,gBAAiB,SAASzlB,GACxBjmB ,KAAKsrC,WAAWrlB,EAASwY,QAASxY,EAAS6Y,cAAcU,UAE3DgM,cAAe,SAASd,EAAMN,GAC5B,GAAIx mC,GAAS8mC,EAAK9hB,iBAAiB,QACnC,IAAIhlB,EACF,IAAK,GAA8BjF,GAA1B+C,EAAI,EAAG+H,EA AI7F,EAAOjC,OAAgB8H,EAAJ/H,IAAW/C,EAAIiF,EAAOlC,IAAKA,IAChE1B,KAAK2rC,aAAahtC,EA AGyrC,IAI3BuB,aAAc,SAAS7nC,EAAOsmC,GAC5BA,EAAMA,GAAOtmC,EAAMg7B,cAAcU,QACjC17B,E AAMS,YAAcvE,KAAK4rC,eAAe9nC,EAAMS,YAAa6lC,IAE7DwB,eAAgB,SAAS7B,EAASC,EAASC,GAEzC ,MADAF,GAAUD,EAAqBC,EAASC,EAASC,EAAc4B,GACxD/B,EAAqBC,EAASC,EAASC,EAAc6B,IAE9DP, kBAAmB,SAASb,EAAMN,GAC5BM,EAAKqB,eAAiBrB,EAAKqB,iBAC7B/rC,KAAKgsC,yBAAyBtB,EAAMN ,EAGtC,IAAIlhB,GAAQwhB,GAAQA,EAAK9hB,iBAAiBqjB,EAC1C,IAAI/iB,EACF,IAAK,GAA6BznB, GAAzBC,EAAI,EAAG+H,EAAIyf,EAAMvnB,OAAgB8H,EAAJ/H,IAAWD,EAAIynB,EAAMxnB,IAAKA,IAC 9D1B,KAAKgsC,yBAAyBvqC,EAAG2oC,IAIvC4B,yBAA0B,SAASnpC,EAAMunC,GACvCA,EAAMA,GAAOv nC,EAAKi8B,cAAcU,QAChC0M,EAAUhoC,QAAQ,SAASX,GACzB,GAEI4oC,GAFAnK,EAAOn/B,EAAK88B ,WAAWp8B,GACvBkO,EAAQuwB,GAAQA,EAAKvwB,KAErBA,IAASA,EAAM05B,OAAOiB,GAAuB,IAE7CD, EADQ,UAAN5oC,EACYumC,EAAqBr4B,EAAO24B,GAAK,EAAOyB,GAExCtB,EAAmBH,EAAK34B,GAExCuw B,EAAKvwB,MAAQ06B,OAMjBN,EAAiB,sBACjBC,EAAoB,qCACpBI,GAAa,OAAQ,MAAO,SAAU,QAAS,OA C/CD,EAAqB,IAAMC,EAAUrmB,KAAK,OAAS,IACnDumB,EAAsB,QA+C1BhuC,GAAMitC,YAAcA,GAEjBx kB,SAWH,SAAUzoB,GAIR,QAASiuC,GAAOC,GACdtsC,KAAKusC,MAAQlnC,OAAOC,OAAO,MAC3BtF,KA AKqE,IAAMgB,OAAOC,OAAO,MACzBtF,KAAKwsC,SAAW,EAChBxsC,KAAKssC,MAAQA,EAPf,GAAI1D,G AAiB7hB,SAAS6hB,cAS9ByD,GAAOxlC,WAIL4lC,YAAa,SAASC,EAAMnlB,GAG1B,IAFA,GACIolB,GA ASlqC,EADTmqC,KAEID,EAAU3sC,KAAKssC,MAAMO,KAAKH,IAChCjqC,EAAI,GAAI+nC,KAAImC,EAA Q,GAAIplB,GACxBqlB,EAAQnsC,MAAMksC,QAASA,EAAQ,GAAIvC,IAAK3nC,EAAE88B,MAE5C,OAAOq N,IAITE,QAAS,SAASJ,EAAMhC,EAAMnjC,GAC5B,GAAIqlC,GAAU5sC,KAAKysC,YAAYC,EAAMhC,GAG jCqC,EAAOxlC,EAASlE,KAAK,KAAMrD,KAAKqE,IACpCrE,MAAKgtC,MAAMJ,EAASG,IAGtBC,MAAO,S AASJ,EAASrlC,GACvB,GAAI0lC,GAAWL,EAAQjrC,MAGvB,KAAKsrC,EACH,MAAO1lC,IAYT,KAAK,GA DDf,GAAG0mC,EAAK9C,EAPR2C,EAAO,WACU,MAAbE,GACJ1lC,KAMK7F,EAAI,EAAOurC,EAAJvrC,EA AcA,IAC5B8E,EAAIomC,EAAQlrC,GACZ0oC,EAAM5jC,EAAE4jC,IACR8C,EAAMltC,KAAKusC,MAAMn C,GAEZ8C,IACHA,EAAMltC,KAAKmtC,IAAI/C,GACf8C,EAAIx5B,MAAQlN,EACZxG,KAAKusC,MAAMn C,GAAO8C,GAGpBA,EAAIE,KAAKL,IAGbM,UAAW,SAASC,GAClB,GAAI55B,GAAQ45B,EAAQ55B,MAChB 02B,EAAM12B,EAAM02B,IAGZmD,EAAWD,EAAQC,UAAYD,EAAQE,cAAgB,EAC3DxtC,MAAKqE,IAAI+lC ,GAAOmD,EAChBvtC,KAAKgtC,MAAMhtC,KAAKysC,YAAYc,EAAUnD,GAAMkD,EAAQG,UAEtDN,IAAK,S AAS/C,GACZpqC,KAAKwsC,UACL,IAAIc,GAAU,GAAII,eAwBlB,OAvBAJ,GAAQzoB,KAAK,MAAOulB,G AAK,GACzBkD,EAAQK,OACRL,EAAQM,QAAUN,EAAQO,OAAS7tC,KAAKqtC,UAAUhqC,KAAKrD,KAAMstC ,GAG7DA,EAAQQ,WACRR,EAAQG,QAAU,WAEhB,IAAI,GADAK,GAAUR,EAAQQ,QACdpsC,EAAI,EAAGA,E AAIosC,EAAQnsC,OAAQD,IACjCosC,EAAQpsC,IAEV4rC,GAAQQ,QAAU,MAIpBR,EAAQF,KAAO,SAAS5 iC,GAClB8iC,EAAQQ,QACVR,EAAQQ,QAAQrtC,KAAK+J,GAErBo+B,EAAep+B,IAIZ8iC,IAIXlvC,EA AMiuC,OAASA,GACdxlB,SAWH,SAAUzoB,GAKV,QAAS2vC,KACP/tC,KAAKguC,OAAS,GAAI3B,GAAOrs C,KAAKssC,OAJhC,GAAIjB,GAAcjtC,EAAMitC,YACpBgB,EAASjuC,EAAMiuC,MAKnB0B,GAAclnC,W ACZylC,MAAO,+CAEPmB,QAAS,SAASf,EAAMtC,EAAK7iC,GAC3B,GAAIwlC,GAAO,SAAS1oC,GAClBkD ,EAASvH,KAAKiuC,QAAQvB,EAAMtC,EAAK/lC,KACjChB,KAAKrD,KACPA,MAAKguC,OAAOlB,QAAQJ, EAAMtC,EAAK2C,IAGjCmB,YAAa,SAASpqC,EAAOsmC,EAAK7iC,GAChC,GAAImlC,GAAO5oC,EAAMS,Y ACbwoC,EAAO,SAASL,GAClB5oC,EAAMS,YAAcmoC,EACpBnlC,EAASzD,GAEX9D,MAAKytC,QAAQf,EA AMtC,EAAK2C,IAG1BkB,QAAS,SAASvB,EAAMnlB,EAAMljB,GAG5B,IAAK,GADDqP,GAAO02B,EAAK+D ,EADZvB,EAAU5sC,KAAKguC,OAAOvB,YAAYC,EAAMnlB,GAEnC7lB,EAAI,EAAGA,EAAIkrC,EAAQjrC ,OAAQD,IAClCgS,EAAQk5B,EAAQlrC,GAChB0oC,EAAM12B,EAAM02B,IAEZ+D,EAAe9C,EAAYO,eAAe vnC,EAAI+lC,GAAMA,GAAK,GAEzD+D,EAAenuC,KAAKiuC,QAAQE,EAAc5mB,EAAMljB,GAChDqoC,EA AOA,EAAKxyB,QAAQxG,EAAMi5B,QAASwB,EAErC,OAAOzB,IAET0B,WAAY,SAASxqC,EAAQ2jB,EAAMh gB,GAGjC,QAAS8mC,KACP5lB,IACIA,IAAWhf,GAAKlC,GAClBA,IAGJ,IAAK,GAAS5I,GARV8pB,EAA O,EAAGhf,EAAI7F,EAAOjC,OAQhBD,EAAE,EAAS+H,EAAF/H,IAAS/C,EAAEiF,EAAOlC,IAAKA,IACv C1B,KAAKkuC,YAAYvvC,EAAG4oB,EAAM8mB,IAKhC,IAAIC,GAAgB,GAAIP,EAGxB3vC,GAAMkwC,cAA gBA,GAEnBznB,SAWH,SAAUzoB,GAGR,QAASmwC,GAAO1nC,EAAW2nC,GAiBzB,MAhBI3nC,IAAa2nC,G AEfnpC,OAAOsvB,oBAAoB6Z,GAAKtqC,QAAQ,SAASzC,GAE/C,GAAIgtC,GAAKppC,OAAOuvB,yBAAyB 4Z,EAAK/sC,EAC1CgtC,KAEFppC,OAAOqhB,eAAe7f,EAAWpF,EAAGgtC,GAEb,kBAAZA,GAAGh9B,QA EZg9B,EAAGh9B,MAAMi9B,IAAMjtC,MAKhBoF,EAOT,QAAS63B,GAAMiQ,GAEb,IAAK,GADDzlC,GAAM ylC,MACDjtC,EAAI,EAAGA,EAAIsY,UAAUrY,OAAQD,IAAK,CACzC,GAAIgE,GAAIsU,UAAUtY,EAClB ,KACE,IAAK,GAAID,KAAKiE,GACZkpC,EAAantC,EAAGiE,EAAGwD,GAErB,MAAMtI,KAGV,MAAOsI,G AIT,QAAS0lC,GAAaC,EAAQC,EAAUC,GACtC,GAAIN,GAAKO,EAAsBF,EAAUD,EACzCxpC,QAAOqhB,eA AeqoB,EAAUF,EAAQJ,GAK1C,QAASO,GAAsBC,EAAUJ,GACvC,GAAII,EAAU,CACZ,GAAIR,GAAKppC,O AAOuvB,yBAAyBqa,EAAUJ,EACnD,OAAOJ,IAAMO,EAAsB3pC,OAAOwqB,eAAeof,GAAWJ,IAMxEzwC,E AAMmwC,OAASA,EACfnwC,EAAMsgC,MAAQA,EAGd3X,SAAS2X,MAAQA,GAEhB7X,SAWH,SAAUzoB,GA6C R,QAAS8wC,GAAIA,EAAK3nC,EAAU6lC,GAO1B,MANI8B,GACFA,EAAIC,OAEJD,EAAM,GAAIE,GAAIpv C,MAEhBkvC,EAAIG,GAAG9nC,EAAU6lC,GACV8B,EAzCT,GAAIE,GAAM,SAASE,GACjBtvC,KAAK4iB, QAAU0sB,EACftvC,KAAKuvC,cAAgBvvC,KAAKwvC,SAASnsC,KAAKrD,MAE1CovC,GAAIvoC,WACFwoC ,GAAI,SAAS9nC,EAAU6lC,GACrBptC,KAAKuH,SAAWA,CAChB,IAAIkoC,EACCrC,IAMHqC,EAAIjgC, WAAWxP,KAAKuvC,cAAenC,GACnCptC,KAAK0vC,OAAS,WACZjgC,aAAaggC,MAPfA,EAAI9jC,sBAAsB 3L,KAAKuvC,eAC/BvvC,KAAK0vC,OAAS,WACZC,qBAAqBF,MAS3BN,KAAM,WACAnvC,KAAK0vC,SACP1 vC,KAAK0vC,SACL1vC,KAAK0vC,OAAS,OAGlBF,SAAU,WACJxvC,KAAK0vC,SACP1vC,KAAKmvC,OACL nvC,KAAKuH,SAASE,KAAKzH,KAAK4iB,YAiB9BxkB,EAAM8wC,IAAMA,GAEXroB,SAWH,SAAUzoB,GAi ER,QAASwxC,GAAUC,EAAaC,EAAQC,GACtC,GAAIC,GAA4B,gBAAfH,GACbtxC,SAASC,cAAcqxC,GAAe A,EAAYI,WAAU,EAEhE,IADAD,EAAIE,UAAYJ,EACZC,EACF,IAAK,GAAItuC,KAAKsuC,GACZC,EAAI5 jC,aAAa3K,EAAGsuC,EAAQtuC,GAGhC,OAAOuuC,GAxET,GAAIG,KAEJjT,aAAY5zB,SAAW,SAAS8mC, EAAKvpC,GACnCspC,EAASC,GAAOvpC,GAIlBq2B,YAAYmT,mBAAqB,SAASD,GACxC,GAAIvpC,GAAaup C,EAA8BD,EAASC,GAAjClT,YAAYr2B,SAEnC,OAAOA,IAAaxB,OAAOwqB,eAAetxB,SAASC,cAAc4xC, IAInE,IAAIE,GAA0BC,MAAM1pC,UAAU7H,eAC9CuxC,OAAM1pC,UAAU7H,gBAAkB,WAChCgB,KAAKwwC ,cAAe,EACpBF,EAAwBntB,MAAMnjB,KAAMga,WAStC,IAAIie,GAAMwY,aAAa5pC,UAAUoxB,IAC7ByY ,EAASD,aAAa5pC,UAAU6pC,MACpCD,cAAa5pC,UAAUoxB,IAAM,WAC3B,IAAK,GAAIv2B,GAAI,EAAGA ,EAAIsY,UAAUrY,OAAQD,IACpCu2B,EAAIxwB,KAAKzH,KAAMga,UAAUtY,KAG7B+uC,aAAa5pC,UAAU 6pC,OAAS,WAC9B,IAAK,GAAIhvC,GAAI,EAAGA,EAAIsY,UAAUrY,OAAQD,IACpCgvC,EAAOjpC,KAAK zH,KAAMga,UAAUtY,KAGhC+uC,aAAa5pC,UAAU8pC,OAAS,SAAS9nC,EAAM+nC,GACrB,GAApB52B,UA AUrY,SACZivC,GAAQ5wC,KAAKmC,SAAS0G,IAExB+nC,EAAO5wC,KAAKi4B,IAAIpvB,GAAQ7I,KAAK0 wC,OAAO7nC,IAEtC4nC,aAAa5pC,UAAUgqC,OAAS,SAASC,EAASC,GAChDD,GAAW9wC,KAAK0wC,OAAO I,GACvBC,GAAW/wC,KAAKi4B,IAAI8Y,GAKtB,IAAIC,GAAa,WACf,MAAOljC,OAAMjH,UAAU8Q,MAAM lQ,KAAKzH,OAGhCixC,EAAgB/yC,OAAOgzC,cAAgBhzC,OAAOizC,mBAElDC,UAASvqC,UAAU0qB,MAA Qyf,EAC3BC,EAAapqC,UAAU0qB,MAAQyf,EAC/BK,eAAexqC,UAAU0qB,MAAQyf,EAkBjC5yC,EAAMwx C,UAAYA,GAEjB/oB,SAWF,SAAUzoB,GAgBP,QAASkzC,GAAOC,GAMd,GAAIC,GAASF,EAAOE,OAEhB9C ,EAAM8C,EAAO9C,IAEb+C,EAASD,EAAOC,MACfA,KACE/C,IACHA,EAAM8C,EAAO9C,IAAMgD,EAAWjq C,KAAKzH,KAAMwxC,IAEtC9C,GACHhvB,QAAQiyB,KAAK,iFAQfF,EAASG,EAAaJ,EAAQ9C,EAAK7e,E AAe7vB,OAGpD,IAAIwK,GAAKinC,EAAO/C,EAChB,OAAIlkC,IAEGA,EAAGinC,QAENG,EAAapnC,EAA IkkC,EAAK+C,GAIjBjnC,EAAG2Y,MAAMnjB,KAAMuxC,QARxB,OAYF,QAASG,GAAWjgC,GAElB,IADA, GAAI/L,GAAI1F,KAAKymB,UACN/gB,GAAKA,IAAMw3B,YAAYr2B,WAAW,CAGvC,IAAK,GAAsBpF,GADv BowC,EAAKxsC,OAAOsvB,oBAAoBjvB,GAC3BhE,EAAE,EAAG+H,EAAEooC,EAAGlwC,OAAa8H,EAAF/H ,IAAQD,EAAEowC,EAAGnwC,IAAKA,IAAK,CACnD,GAAIa,GAAI8C,OAAOuvB,yBAAyBlvB,EAAGjE,EA C3C,IAAuB,kBAAZc,GAAEkP,OAAwBlP,EAAEkP,QAAUA,EAC/C,MAAOhQ,GAGXiE,EAAIA,EAAE+gB,W AIV,QAASmrB,GAAaE,EAAQjpC,EAAM4rB,GAIlC,GAAI91B,GAAIozC,EAAUtd,EAAO5rB,EAAMipC,E AM/B,OALInzC,GAAEkK,KAGJlK,EAAEkK,GAAM6lC,IAAM7lC,GAETipC,EAAOL,OAAS9yC,EAGzB,QA ASozC,GAAUtd,EAAO5rB,EAAM2oC,GAE9B,KAAO/c,GAAO,CACZ,GAAKA,EAAM5rB,KAAU2oC,GAAW/c ,EAAM5rB,GACpC,MAAO4rB,EAETA,GAAQ5E,EAAe4E,GAMzB,MAAOpvB,QAMT,QAASwqB,GAAehpB,GA CtB,MAAOA,GAAU4f,UAkBnBroB,EAAM4zC,MAAQV,GAEfzqB,SAWH,SAAUzoB,GAER,QAAS6zC,GAAYx gC,GACnB,MAAOA,GA8CT,QAASygC,GAAiBzgC,EAAOqoB,GAE/B,GAAIqY,SAAsBrY,EAM1B,OAJIA,a AAwBpkB,QAC1By8B,EAAe,QAGVC,EAAaD,GAAc1gC,EAAOqoB,GAnD3C,GAAIsY,IACFC,OAAQJ,EACR 3+B,UAAa2+B,EACbK,KAAM,SAAS7gC,GACb,MAAO,IAAIiE,MAAKA,KAAKiI,MAAMlM,IAAUiE,KAAKC ,QAE5C48B,UAAS,SAAS9gC,GAChB,MAAc,KAAVA,GACK,EAEQ,UAAVA,GAAoB,IAAUA,GAEvCoH,OAAQ ,SAASpH,GACf,GAAIhQ,GAAIsX,WAAWtH,EAKnB,OAHU,KAANhQ,IACFA,EAAI+wC,SAAS/gC,IAERsQ ,MAAMtgB,GAAKgQ,EAAQhQ,GAK5B+e,OAAQ,SAAS/O,EAAOqoB,GACtB,GAAqB,OAAjBA,EACF,MAAOr oB,EAET,KAIE,MAAO0iB,MAAKxW,MAAMlM,EAAMyI,QAAQ,KAAM,MACtC,MAAMlV,GAEN,MAAOyM,KAI XghC,WAAY,SAAShhC,EAAOqoB,GAC1B,MAAOA,IAiBX17B,GAAM8zC,iBAAmBA,GAExBrrB,SAUH,SAA UzoB,GAIR,GAAImwC,GAASnwC,EAAMmwC,OAIfC,IAEJA,GAAIkE,eACJlE,EAAI/H,YAEJ+H,EAAImE ,QAAU,SAASC,EAAM/rC,GAC3B,IAAK,GAAIpF,KAAKmxC,GACZrE,EAAO1nC,EAAW+rC,EAAKnxC,KAM 3BrD,EAAMowC,IAAMA,GAEX3nB,SAWH,SAAUzoB,GAER,GAAIy0C,IASFC,MAAO,SAAShB,EAAQ/3B,E AAMg5B,GAG5BhsB,SAASE,QAETlN,EAAQA,GAAQA,EAAKpY,OAAUoY,GAAQA,EAEvC,IAAIvP,GAAK,Y ACNxK,KAAK8xC,IAAWA,GAAQ3uB,MAAMnjB,KAAM+Z,IACrC1W,KAAKrD,MAEH0vC,EAASqD,EAAUvjC ,WAAWhF,EAAIuoC,GAClCpnC,sBAAsBnB,EAE1B,OAAOuoC,GAAUrD,GAAUA,GAE7BsD,YAAa,SAAStD ,GACP,EAATA,EACFC,sBAAsBD,GAEtBjgC,aAAaigC,IAajBuD,KAAM,SAASppC,EAAMqG,EAAQgjC,E AAQh0C,EAASiG,GAC5C,GAAItC,GAAOqwC,GAAUlzC,KACjBkQ,EAAoB,OAAXA,GAA8BoD,SAAXpD,KA A4BA,EACxDoY,EAAQ,GAAIrpB,aAAY4K,GAC1B3K,QAAqBoU,SAAZpU,EAAwBA,GAAU,EAC3CiG,WAA2 BmO,SAAfnO,EAA2BA,GAAa,EACpD+K,OAAQA,GAGV,OADArN,GAAKzD,cAAckpB,GACZA,GAST6qB,UA AW,WACTnzC,KAAK8yC,MAAM,OAAQ94B,YASrBo5B,aAAc,SAASC,EAAMpgB,EAAKqgB,GAC5BrgB,GAC FA,EAAIsgB,UAAU7C,OAAO4C,GAEnBD,GACFA,EAAKE,UAAUtb,IAAIqb,IASvBE,gBAAiB,SAAS3O,E AAMtkC,GAC9B,GAAI0lB,GAAW1nB,SAASC,cAAc,WACtCynB,GAASiqB,UAAYrL,CACrB,IAAIqD,GAA WloC,KAAKyzC,iBAAiBxtB,EAKrC,OAJI1lB,KACFA,EAAQgE,YAAc,GACtBhE,EAAQ3B,YAAYspC,IA EfA,IAKPwL,EAAM,aAGNC,IAIJd,GAAMe,YAAcf,EAAMC,MAI1B10C,EAAMowC,IAAI/H,SAASoM,MAA QA,EAC3Bz0C,EAAMs1C,IAAMA,EACZt1C,EAAMu1C,IAAMA,GAEX9sB,SAWH,SAAUzoB,GAIR,GAAIy1 C,GAAM31C,OAAO8oB,aACb8sB,EAAe,MAGf9qC,GAEF8qC,aAAcA,EAEdC,iBAAkB,WAChB,GAAI/qC, GAAShJ,KAAKg0C,cAClBH,GAAI7qC,QAAW3D,OAAOG,KAAKwD,GAAQrH,OAAS,GAAM+d,QAAQm0B,IAA I,yBAA0B7zC,KAAKqpB,UAAWrgB,EAKxG,KAAK,GAAIa,KAAQb,GAAQ,CACvB,GAAIirC,GAAajrC,EA AOa,EACxB1L,iBAAgBU,iBAAiBmB,KAAM6J,EAAM7J,KAAKO,QAAQ2zC,gBAAgBl0C,KAAMA,KAAMi0C ,MAI1FE,eAAgB,SAASjrC,EAAK4oC,EAAQ/3B,GACpC,GAAI7Q,EAAK,CACP2qC,EAAI7qC,QAAU0W,Q AAQ4pB,MAAM,qBAAsBpgC,EAAImgB,UAAWyoB,EACjE,IAAItnC,GAAuB,kBAAXsnC,GAAwBA,EAAS5o C,EAAI4oC,EACjDtnC,IACFA,EAAGuP,EAAO,QAAU,QAAQ7Q,EAAK6Q,GAEnC85B,EAAI7qC,QAAU0W, QAAQ6pB,WACtBxiB,SAASE,UAOf7oB,GAAMowC,IAAI/H,SAASz9B,OAASA,EAG5B5K,EAAMS,iBAAmB V,gBAAgBU,iBACzCT,EAAM2M,oBAAsB5M,gBAAgB4M,qBAE3C8b,SAWH,SAAUzoB,GAIR,GAAIuhC,IA CFyU,uBAAwB,WACtB,GAAIC,GAAKr0C,KAAKs0C,mBACd,KAAK,GAAI/uC,KAAK8uC,GACPr0C,KAAK6 B,aAAa0D,IACrBvF,KAAKoM,aAAa7G,EAAG8uC,EAAG9uC,KAK9BgvC,eAAgB,WAGd,GAAIv0C,KAAKw 0C,WACP,IAAK,GAA0CvyC,GAAtCP,EAAE,EAAG2yC,EAAGr0C,KAAK2/B,WAAYl2B,EAAE4qC,EAAG1y C,QAAYM,EAAEoyC,EAAG3yC,KAAS+H,EAAF/H,EAAKA,IAClE1B,KAAKy0C,oBAAoBxyC,EAAE4G,KAA M5G,EAAEwP,QAMzCgjC,oBAAqB,SAAS5rC,EAAM4I,GAGlC,GAAI5I,GAAO7I,KAAK00C,qBAAqB7rC, EACrC,IAAIA,EAAM,CAIR,GAAI4I,GAASA,EAAM05B,OAAO/sC,EAAMu2C,cAAgB,EAC9C,MAGF,IAAI 7a,GAAe95B,KAAK6I,GAEpB4I,EAAQzR,KAAKkyC,iBAAiBzgC,EAAOqoB,EAErCroB,KAAUqoB,IAEZ 95B,KAAK6I,GAAQ4I,KAKnBijC,qBAAsB,SAAS7rC,GAC7B,GAAI6K,GAAQ1T,KAAKw0C,YAAcx0C,KA AKw0C,WAAW3rC,EAE/C,OAAO6K,IAGTw+B,iBAAkB,SAAS0C,EAAa9a,GACtC,MAAO17B,GAAM8zC,iB AAiB0C,EAAa9a,IAE7C+a,eAAgB,SAASpjC,EAAO0gC,GAC9B,MAAqB,YAAjBA,EACK1gC,EAAQ,GAAK 6B,OACM,WAAjB6+B,GAA8C,aAAjBA,GACvB7+B,SAAV7B,EACEA,EAFF,QAKTqjC,2BAA4B,SAASjsC, GACnC,GAAIspC,SAAsBnyC,MAAK6I,GAE3BksC,EAAkB/0C,KAAK60C,eAAe70C,KAAK6I,GAAOspC,E AE9B7+B,UAApByhC,EACF/0C,KAAKoM,aAAavD,EAAMksC,GAME,YAAjB5C,GACTnyC,KAAK+6B,gBAA gBlyB,IAO3BzK,GAAMowC,IAAI/H,SAAS9G,WAAaA,GAE/B9Y,SAWH,SAAUzoB,GAyBR,QAAS+tB,GAA anpB,EAAMC,GAC1B,MAAID,KAASC,EACK,IAATD,GAAc,EAAIA,IAAS,EAAIC,EACpCmpB,EAAYppB,I AASopB,EAAYnpB,IAC5B,EAEFD,IAASA,GAAQC,IAAUA,EAKpC,QAAS+xC,GAAoBviB,EAAUhhB,GACr C,MAAc6B,UAAV7B,GAAoC,OAAbghB,EAClBhhB,EAES,OAAVA,GAA4B6B,SAAV7B,EAAuBghB,EAAWhh B,EApC9D,GAAIoiC,GAAM31C,OAAO8oB,aAUbiuB,GACFz0B,OAAQlN,OACRzJ,KAAM,SACNhB,KAAMy K,OACNmf,SAAUnf,QAGR8Y,EAAcpK,OAAOD,OAAS,SAAStQ,GACzC,MAAwB,gBAAVA,IAAsBsQ,MAAMt Q,IAqBxC2J,GACF85B,uBAAwB,WACtB,GAAIrD,GAAK7xC,KAAKm1C,aACd,IAAItD,GAAMA,EAAGlwC ,OAAQ,CACnB,GAAIyzC,GAAIp1C,KAAKq1C,kBAAoB,GAAI9vB,mBAAiB,EACtDvlB,MAAKs1C,iBAAi BF,EAKtB,KAAK,GAAsB3zC,GAAlBC,EAAE,EAAG+H,EAAEooC,EAAGlwC,OAAc8H,EAAF/H,IAASD,EA AEowC,EAAGnwC,IAAKA,IAChD0zC,EAAEjzB,QAAQniB,KAAMyB,GAChBzB,KAAKu1C,kBAAkB9zC,EA AGzB,KAAKyB,GAAI,QAIzC+zC,qBAAsB,WAChBx1C,KAAKq1C,mBACPr1C,KAAKq1C,kBAAkBxwB,KAA K7kB,KAAKy1C,sBAAuBz1C,OAG5Dy1C,sBAAuB,SAASC,EAAWnjB,EAAWojB,GACpD,GAAI9sC,GAAMi pC,EAAQ8D,IAClB,KAAK,GAAIl0C,KAAK6wB,GAIZ,GAFA1pB,EAAO8sC,EAAM,EAAIj0C,EAAI,GACr BowC,EAAS9xC,KAAKmqB,QAAQthB,GACV,CACV,GAAIgtC,GAAKtjB,EAAU7wB,GAAIo0C,EAAKJ,EAA Uh0C,EAEtC1B,MAAKu1C,kBAAkB1sC,EAAMitC,EAAID,GAC5BD,EAAO9D,KAEEx+B,SAAPuiC,GAA2B ,OAAPA,GAAwBviC,SAAPwiC,GAA2B,OAAPA,KAC5DF,EAAO9D,IAAU,EAKjB9xC,KAAK+1C,aAAajE,G AAS+D,EAAIC,EAAI97B,eAM7Cg8B,eAAgB,WACVh2C,KAAKq1C,mBACPr1C,KAAKq1C,kBAAkBtwB,WA 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","source sContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nwindow .PolymerGestures = {};\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors m ay be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of cont ributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dist ributed by Google as part of the polymer project is also\n * subject to an addit ional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fun ction(scope) {\n var HAS_FULL_PATH = false;\n\n // test for full event path su pport\n var pathTest = document.createElement('meta');\n if (pathTest.createSh adowRoot) {\n var sr = pathTest.createShadowRoot();\n var s = document.cre ateElement('span');\n sr.appendChild(s);\n pathTest.addEventListener('test path', function(ev) {\n if (ev.path) {\n // if the span is in the ev ent path, then path[0] is the real source for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var ev = new CustomEvent('testpath', {bubbles: true});\n // must add node to DOM to t rigger event listener\n document.head.appendChild(pathTest);\n s.dispatchE vent(ev);\n pathTest.parentNode.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\n\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(shadow .elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n } \n },\n olderShadow: function(shadow) {\n var os = shadow.olderShadow Root;\n if (!os) {\n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n retu rn os;\n },\n allShadows: function(element) {\n var shadows = [], s = this.shadow(element);\n while(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot: fu nction(inRoot, x, y) {\n var t, st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPoint(x, y);\n if (t) {\n // found element, check if it has a ShadowRoot\n sr = this.targetingShadow(t);\n } else if (inRoot !== document) {\n // check for sibling roots\n sr = this.olderShadow(inRoot);\n }\n // search other roots, fal l back to light dom element\n return this.searchRoot(sr, x, y) || t;\n }\n },\n owner: function(element) {\n if (!element) {\n ret urn document;\n }\n var s = element;\n // walk up until you hit t he shadow root or document\n while (s.parentNode) {\n s = s.parentNo de;\n }\n // the owner element is expected to be a Document or ShadowR oot\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_F RAGMENT_NODE) {\n s = document;\n }\n return s;\n },\n fi ndTarget: function(inEvent) {\n if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[0];\n }\n var x = inEvent.clientX, y = inEvent. clientY;\n // if the listener is in the shadow root, it is much faster to s tart there\n var s = this.owner(inEvent.target);\n // if x, y is not i n this root, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s, x, y);\n } ,\n findTouchAction: function(inEvent) {\n var n;\n if (HAS_FULL_PA TH && inEvent.path) {\n var path = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n = path[i];\n if (n.nodeType === N ode.ELEMENT_NODE && n.hasAttribute('touch-action')) {\n return n.getA ttribute('touch-action');\n }\n }\n } else {\n n = i nEvent.target;\n while(n) {\n if (n.hasAttribute('touch-action') ) {\n return n.getAttribute('touch-action');\n }\n n = n.parentNode || n.host;\n }\n }\n // auto is default\n return \"auto\";\n },\n LCA: function(a, b) {\n if (a === b) {\n return a;\n }\n if (a && !b) {\n return a;\n }\n if (b && !a) {\n return b;\n }\n if (!b && !a) {\n retur n document;\n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.contains && a.contains(b)) {\n return a;\n }\n if (b.contains && b.contains(a)) {\n return b;\n }\n var ade pth = this.depth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = this.walk(b, -d);\n }\n while (a && b && a !== b) {\n a = a.parentNode || a.host;\n b = b.parentNode || b.host;\n }\n return a;\n },\n walk: function(n, u) {\n for (var i = 0; n && (i < u ); i++) {\n n = n.parentNode || n.host;\n }\n return n;\n }, \n depth: function(n) {\n var d = 0;\n while(n) {\n d++;\n n = n.parentNode || n.host;\n }\n return d;\n },\n deepCon tains: function(a, b) {\n var common = this.LCA(a, b);\n // if a is th e common ancestor, it must \"deeply\" contain b\n return common === a;\n },\n insideNode: function(node, x, y) {\n var rect = node.getBoundingCl ientRect();\n return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom);\n }\n };\n scope.targetFinding = target;\n /**\n * Given an event, finds the \"deepest\" node that could have been the origina l target before ShadowDOM retargetting\n *\n * @param {Event} Event An event object with clientX and clientY properties\n * @return {Element} The probable event origninator\n */\n scope.findTarget = target.findTarget.bind(target);\ n /**\n * Determines if the \"container\" node deeply contains the \"containe e\" node, including situations where the \"containee\" is contained by one or mo re ShadowDOM\n * roots.\n *\n * @param {Node} container\n * @param {Node } containee\n * @return {Boolean}\n */\n scope.deepContains = target.deepCo ntains.bind(target);\n\n /**\n * Determines if the x/y position is inside the given node.\n *\n * Example:\n *\n * function upHandler(event) {\n * var innode = PolymerGestures.insideNode(event.target, event.clientX, e vent.clientY);\n * if (innode) {\n * // wait for tap?\n * } else {\n * // tap will never happen\n * }\n * }\n *\n * @param {Node} node\n * @param {Number} x Screen X position\n * @pa ram {Number} y screen Y position\n * @return {Boolean}\n */\n scope.insideN ode = target.insideNode;\n\n})(window.PolymerGestures);\n\n/*\n *\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may onl y be used under the BSD style license found at http://polymer.github.io/LICENSE. txt\n * The complete set of authors may be found at http://polymer.github.io/AUT HORS.txt\n * The complete set of contributors may be found at http://polymer.git hub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pr oject is also\n * subject to an additional IP rights grant found at http://polym er.github.io/PATENTS.txt\n */\n\n(function() {\n function shadowSelector(v) {\n return 'html /deep/ ' + selector(v);\n }\n function selector(v) {\n ret urn '[touch-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -m s-touch-action: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'none',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan -x pan-y',\n selectors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n },\n 'manipulation'\n ];\n var styles = '';\n // only install stylesheet if the browser has touch action support\n var hasTouchAction = typeo f document.head.style.touchAction === 'string';\n // only add shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.ShadowDOMPolyfill && do cument.head.createShadowRoot;\n\n if (hasTouchAction) {\n attrib2css.forEach (function(r) {\n if (String(r) === r) {\n styles += selector(r) + ru le(r) + '\\n';\n if (hasShadowRoot) {\n styles += shadowSelector (r) + rule(r) + '\\n';\n }\n } else {\n styles += r.selectors .map(selector) + rule(r.rule) + '\\n';\n if (hasShadowRoot) {\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\n';\n }\n }\n });\n\n var el = document.createElement('style');\n el.textCont ent = styles;\n document.head.appendChild(el);\n }\n})();\n\n/*\n * Copyrigh t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o nly be used under the BSD style license found at http://polymer.github.io/LICENS E.txt\n * The complete set of authors may be found at http://polymer.github.io/A UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://pol ymer.github.io/PATENTS.txt\n */\n\n/**\n * This is the constructor for new Point erEvents.\n *\n * New Pointer Events must be given a type, and an optional dicti onary of\n * initialization properties.\n *\n * Due to certain platform requirem ents, events returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor\n * @param {String} inType The type of the event to create.\n * @pa ram {Object} [inDict] An optional dictionary of initial event properties.\n * @r eturn {Event} A new PointerEvent of type `inType` and initialized with propertie s from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PROPS = [\n 'bubbles ',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY' ,\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey' ,\n 'metaKey',\n 'button',\n 'relatedTarget',\n 'pageX',\n 'pageY '\n ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,\n null,\n null ,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false ,\n 0,\n null,\n 0,\n 0\n ];\n\n var NOP_FACTORY = function(){ ret urn function(){}; };\n\n var eventFactory = {\n // TODO(dfreedm): this is ov erridden by tap recognizer, needs review\n preventTap: NOP_FACTORY,\n make BaseEvent: function(inType, inDict) {\n var e = document.createEvent('Event ');\n e.initEvent(inType, inDict.bubbles || false, inDict.cancelable || fal se);\n e.preventTap = eventFactory.preventTap(e);\n return e;\n },\ n makeGestureEvent: function(inType, inDict) {\n inDict = inDict || Obje ct.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n for (var i = 0, keys = Object.keys(inDict), k; i < keys.length; i++) {\n k = keys[i];\n e[k] = inDict[k];\n }\n return e;\n },\n make PointerEvent: function(inType, inDict) {\n inDict = inDict || Object.create (null);\n\n var e = this.makeBaseEvent(inType, inDict);\n // define in herited MouseEvent properties\n for(var i = 0, p; i < MOUSE_PROPS.length; i ++) {\n p = MOUSE_PROPS[i];\n e[p] = inDict[p] || MOUSE_DEFAULTS[i ];\n }\n e.buttons = inDict.buttons || 0;\n\n // Spec requires th at pointers without pressure specified use 0.5 for down\n // state and 0 fo r up state.\n var pressure = 0;\n if (inDict.pressure) {\n pres sure = inDict.pressure;\n } else {\n pressure = e.buttons ? 0.5 : 0; \n }\n\n // add x/y properties aliased to clientX/Y\n e.x = e.cli entX;\n e.y = e.clientY;\n\n // define the properties of the PointerEv ent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDic t.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pressure ;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimestamp = inDict.hwTimes tamp || 0;\n e.isPrimary = inDict.isPrimary || false;\n e._source = in Dict._source || '';\n return e;\n }\n };\n\n scope.eventFactory = even tFactory;\n})(window.PolymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the B SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t xt\n * Code distributed by Google as part of the polymer project is also\n * sub ject to an additional IP rights grant found at http://polymer.github.io/PATENTS. txt\n */\n\n/**\n * This module implements an map of pointer states\n */\n(funct ion(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN;\n return m;\n } else {\n this.keys = [];\n this.values = [];\n }\ n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n va r i = this.keys.indexOf(inId);\n if (i > -1) {\n this.values[i] = in Event;\n } else {\n this.keys.push(inId);\n this.values.push( inEvent);\n }\n },\n has: function(inId) {\n return this.keys.in dexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.ke ys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1);\n this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n va r i = this.keys.indexOf(inId);\n return this.values[i];\n },\n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n } ,\n // return value, key, map\n forEach: function(callback, thisArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisArg, v, this .keys[i], this);\n }, this);\n },\n pointers: function() {\n ret urn this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap;\n})(windo w.PolymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. Al l rights reserved.\n * This code may only be used under the BSD style license fo und at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contrib utors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distrib uted by Google as part of the polymer project is also\n * subject to an addition al IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functi on(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'canc elable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clien tX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaK ey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',\n 'height',\n 'pressure ',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isP rimary',\n // event instance\n 'type',\n 'target',\n 'currentTarget' ,\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp',\n // gesture ad dons\n 'preventTap',\n 'tapPrevented',\n '_source'\n ];\n\n var CLONE _DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event in stance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n funct ion(){},\n false\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\n\n var eventFactory = scope.eventFactory;\n\n // set of re cognizers to run for the currently handled event\n var currentGestures;\n\n /* *\n * This module is for normalizing events. Mouse and Touch events will be\n * collected here, and fire PointerEvents that have the same semantics, no\n * matter the source.\n * Events fired:\n * - pointerdown: a pointing is ad ded\n * - pointerup: a pointer is removed\n * - pointermove: a pointer i s moved\n * - pointerover: a pointer crosses into an element\n * - point erout: a pointer leaves an element\n * - pointercancel: a pointer will no lo nger generate events\n */\n var dispatcher = {\n pointermap: new scope.Poi nterMap(),\n requiredGestures: new scope.PointerMap(),\n eventMap: Object. create(null),\n // Scope objects for native events.\n // This exists for e ase of testing.\n eventSources: Object.create(null),\n eventSourceList: [] ,\n gestures: [],\n // map gesture event -> {listeners: int, index: gestur es[int]}\n dependencyMap: {\n // make sure down and up are in the map to trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {listen ers: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a new eve nt source that will generate pointer events.\n *\n * `inSource` must con tain an array of event names named `events`, and\n * functions with the name s specified in the `events` array.\n * @param {string} name A name for the e vent source\n * @param {Object} source A new source of platform events.\n */\n registerSource: function(name, source) {\n var s = source;\n var newEvents = s.events;\n if (newEvents) {\n newEvents.forEach(fu nction(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].bind(s); \n }\n }, this);\n this.eventSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n registerGesture: function(na me, source) {\n var obj = Object.create(null);\n obj.listeners = 0;\n obj.index = this.gestures.length;\n for (var i = 0, g; i < source.expo ses.length; i++) {\n g = source.exposes[i].toLowerCase();\n this.d ependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\n register: function(element, initial) {\n var l = this.eventSourceList.lengt h;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\ n // call eventsource register\n es.register.call(es, element, ini tial);\n }\n },\n unregister: function(element) {\n var l = this .eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventS ourceList[i]); i++) {\n // call eventsource register\n es.unregist er.call(es, element);\n }\n },\n // EVENTS\n down: function(inEven t) {\n this.requiredGestures.set(inEvent.pointerId, currentGestures);\n this.fireEvent('down', inEvent);\n },\n move: function(inEvent) {\n // pipe move events into gesture queue directly\n inEvent.type = 'move';\n this.fillGestureQueue(inEvent);\n },\n up: function(inEvent) {\n this.fireEvent('up', inEvent);\n this.requiredGestures.delete(inEvent.poi nterId);\n },\n cancel: function(inEvent) {\n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent);\n this.requiredGestures.delete( inEvent.pointerId);\n },\n // LISTENER LOGIC\n eventHandler: function(i nEvent) {\n // This is used to prevent multiple dispatch of events from\n // platform events. This can happen when two elements in different scopes\n // are set up to create pointer events, which is relevant to Shadow DOM.\n\ n var type = inEvent.type;\n\n // only generate the list of desired ev ents on \"down\"\n if (type === 'touchstart' || type === 'mousedown' || typ e === 'pointerdown' || type === 'MSPointerDown') {\n if (!inEvent._handle dByPG) {\n currentGestures = {};\n }\n // map gesture nam es to ordered set of recognizers\n var gesturesWanted = inEvent.currentTa rget._pgEvents;\n if (gesturesWanted) {\n var gk = Object.keys(g esturesWanted);\n for (var i = 0, r, ri, g; i < gk.length; i++) {\n // gesture\n g = gk[i];\n if (gesturesWanted[g] > 0) {\n // lookup gesture recognizer\n r = this.depende ncyMap[g];\n // recognizer index\n ri = r ? r.index : -1;\n currentGestures[ri] = true;\n }\n }\n }\n }\n\n if (inEvent._handledByPG) {\n return;\n }\n var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n fn (inEvent);\n }\n inEvent._handledByPG = true;\n },\n // set up e vent listeners\n listen: function(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.addEvent(ta rget, e);\n }\n },\n // remove event listeners\n unlisten: functio n(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.removeEvent(target, e);\n }\n },\n addEvent: function(target, eventName) {\n target.addEventListener(eventName , this.boundHandler);\n },\n removeEvent: function(target, eventName) {\n target.removeEventListener(eventName, this.boundHandler);\n },\n // E VENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType` , based on the information in\n * `inEvent`.\n *\n * @param {string} inType A string representing the type of event to create\n * @param {Event} inEvent A platform event with a target\n * @return {Event} A PointerEvent o f type `inType`\n */\n makeEvent: function(inType, inEvent) {\n var e = eventFactory.makePointerEvent(inType, inEvent);\n e.preventDefault = in Event.preventDefault;\n e.tapPrevented = inEvent.tapPrevented;\n e._ta rget = e._target || inEvent.target;\n return e;\n },\n // make and di spatch an event in one call\n fireEvent: function(inType, inEvent) {\n v ar e = this.makeEvent(inType, inEvent);\n return this.dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @param {Event} inEvent An event that contains properties to copy. \n * @return {Object} An object containing shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent: function(inEvent) {\n var eve ntCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_ DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n // Return the <use> element that is represented by the instance for Safari, Chrome, IE.\n // This is the behavior implemented by Firefox.\n if (p === 'target' || p === 'relatedTarget') {\n if (HAS_SVG_INSTANCE && eventCo py[p] instanceof SVGElementInstance) {\n eventCopy[p] = eventCopy[p]. correspondingUseElement;\n }\n }\n }\n // keep the sem antics of preventDefault\n eventCopy.preventDefault = function() {\n inEvent.preventDefault();\n };\n return eventCopy;\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Event} inEven t The event to be dispatched.\n * @return {Boolean} True if an event handler returns true, false otherwise.\n */\n dispatchEvent: function(inEvent) { \n var t = inEvent._target;\n if (t) {\n t.dispatchEvent(inEven t);\n // clone the event for the gesture system to process\n // cl one after dispatch to pick up gesture prevention code\n var clone = this. cloneEvent(inEvent);\n clone.target = t;\n this.fillGestureQueue(c lone);\n }\n },\n gestureTrigger: function() {\n // process the gesture queue\n for (var i = 0, e, rg; i < this.gestureQueue.length; i++) { \n e = this.gestureQueue[i];\n rg = e._requiredGestures;\n for (var j = 0, g, fn; j < this.gestures.length; j++) {\n // only run r ecognizer if an element in the source event's path is listening for those gestur es\n if (rg[j]) {\n g = this.gestures[j];\n fn = g[e.type];\n if (fn) {\n fn.call(g, e);\n }\n }\n }\n }\n this.gestureQueue.length = 0;\n },\n fillGestureQueue: function(ev) {\n // only trigger the gesture queue once \n if (!this.gestureQueue.length) {\n requestAnimationFrame(this.bou ndGestureTrigger);\n }\n ev._requiredGestures = this.requiredGestures. get(ev.pointerId);\n this.gestureQueue.push(ev);\n }\n };\n dispatcher .boundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGes tureTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher = dispatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` fun ction\n *\n * If `handler` is the first listener for `gesture`, the underlyi ng gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @ param {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */ \n scope.activateGesture = function(node, gesture) {\n var g = gesture.toLow erCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var recognizer = dispatcher.gestures[dep.index];\n if (!node._pgListeners) {\n dispatcher.register(node);\n node._pgListeners = 0;\n }\n // TODO(dfreedm): re-evaluate bookkeeping to avoid using attributes\n if (recognizer) {\n var touchAction = recognizer.defaultActions && recogniz er.defaultActions[g];\n var actionNode;\n switch(node.nodeType) {\ n case Node.ELEMENT_NODE:\n actionNode = node;\n br eak;\n case Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node .host;\n break;\n default:\n actionNode = null;\n break;\n }\n if (touchAction && actionNode && !actionNode. hasAttribute('touch-action')) {\n actionNode.setAttribute('touch-action ', touchAction);\n }\n }\n if (!node._pgEvents) {\n node ._pgEvents = {};\n }\n node._pgEvents[g] = (node._pgEvents[g] || 0) + 1;\n node._pgListeners++;\n }\n return Boolean(dep);\n };\n\n /**\n *\n * Listen for `gesture` from `node` with `handler` function.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} han dler\n * @param {Boolean} capture\n */\n scope.addEventListener = function( node, gesture, handler, capture) {\n if (handler) {\n scope.activateGest ure(node, gesture);\n node.addEventListener(gesture, handler, capture);\n }\n };\n\n /**\n * Tears down the gesture configuration for `node`\n *\n * If `handler` is the last listener for `gesture`, the underlying gesture rec ognizer is disabled.\n *\n * @param {Element} node\n * @param {string} ges ture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.deactiva teGesture = function(node, gesture) {\n var g = gesture.toLowerCase();\n v ar dep = dispatcher.dependencyMap[g];\n if (dep) {\n if (node._pgListene rs > 0) {\n node._pgListeners--;\n }\n if (node._pgListeners == = 0) {\n dispatcher.unregister(node);\n }\n if (node._pgEvents) {\n if (node._pgEvents[g] > 0) {\n node._pgEvents[g]--;\n } else {\n node._pgEvents[g] = 0;\n }\n }\n }\n ret urn Boolean(dep);\n };\n\n /**\n * Stop listening for `gesture` from `node` with `handler` function.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture\n */\n scope.removeEventListener = function(node, gesture, handler, capture) {\n i f (handler) {\n scope.deactivateGesture(node, gesture);\n node.removeE ventListener(gesture, handler, capture);\n }\n };\n})(window.PolymerGestures );\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved .\n * This code may only be used under the BSD style license found at http://pol ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http: //polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\n */\n\n(function (scope) {\n v ar dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n // radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n 'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'down',\n 'up',\n 'move'\n ],\n register: function(target) {\n dispatche r.listen(target, this.events);\n },\n unregister: function(target) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n / / collide with the global mouse listener\n isEventSimulatedFromTouch: functio n(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l && (t = lts [i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher .cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._source = 'mouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEvent) {\n if (!t his.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.P OINTER_ID);\n // TODO(dfreedman) workaround for some elements not sending mouseup\n // http://crbug/149091\n if (p) {\n this.mouse up(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n e. target = scope.findTarget(inEvent);\n pointermap.set(this.POINTER_ID, e.t arget);\n dispatcher.down(e);\n }\n },\n mousemove: function(i nEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var ta rget = pointermap.get(this.POINTER_ID);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n // handle case where we missed a mouseup\n if (e.buttons === 0) {\n d ispatcher.cancel(e);\n this.cleanupMouse();\n } else {\n dispatcher.move(e);\n }\n }\n }\n },\n mouseu p: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.find Target(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\n d ispatcher.up(e);\n this.cleanupMouse();\n }\n },\n cleanupMous e: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGestures);\n\n/*\n * Copyrigh t (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may o nly be used under the BSD style license found at http://polymer.github.io/LICENS E.txt\n * The complete set of authors may be found at http://polymer.github.io/A UTHORS.txt\n * The complete set of contributors may be found at http://polymer.g ithub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://pol ymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope. dispatcher;\n var allShadows = scope.targetFinding.allShadows.bind(scope.target Finding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.pro totype.map.call.bind(Array.prototype.map);\n // This should be long enough to i gnore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\n var CLIC K_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATTRIB = 'touch-action';\n // TODO(dfreedm): disable until http://crbug.com/399765 is resolved\n // var HAS_TOUCH_ACTION = ATTRIB in document.head.style;\n var HAS_TOUCH_ACTION = fals e;\n\n // handler block for native touch events\n var touchEvents = {\n eve nts: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touch cancel'\n ],\n exposes: [\n 'down',\n 'up',\n 'move'\n ] ,\n register: function(target, initial) {\n if (initial) {\n retu rn;\n }\n dispatcher.listen(target, this.events);\n },\n unregis ter: function(target) {\n dispatcher.unlisten(target, this.events);\n }, \n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x',\n Y SCROLLER: 'pan-y',\n },\n touchActionToScrollType: function(touchAction) { \n var t = touchAction;\n var st = this.scrollTypes;\n if (t === st.EMITTER) {\n return 'none';\n } else if (t === st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\ n } else {\n return 'XY';\n }\n },\n POINTER_TYPE: 'touch ',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch: function( inTouch) {\n // set primary touch if there no pointers, or the only pointer is the mouse\n if (pointermap.pointers() === 0 || (pointermap.pointers() = == 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.identifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n this.scr olling = null;\n this.cancelResetClickCount();\n }\n },\n remo vePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\n this.resetClic kCount();\n }\n },\n clickCount: 0,\n resetId: null,\n resetCli ckCount: function() {\n var fn = function() {\n this.clickCount = 0; \n this.resetId = null;\n }.bind(this);\n this.resetId = setTim eout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: function() {\ n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n }, \n typeToButtons: function(type) {\n var ret = 0;\n if (type === 't ouchstart' || type === 'touchmove') {\n ret = 1;\n }\n return r et;\n },\n findTarget: function(touch, id) {\n if (this.currentTouchE vent.type === 'touchstart') {\n if (this.isPrimaryTouch(touch)) {\n var fastPath = {\n clientX: touch.clientX,\n clientY: touch.clientY,\n path: this.currentTouchEvent.path,\n targ et: this.currentTouchEvent.target\n };\n return scope.findTarg et(fastPath);\n } else {\n return scope.findTarget(touch);\n }\n }\n // reuse target we found in touchstart\n return point ermap.get(id);\n },\n touchToPointer: function(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch);\n / / Spec specifies that pointerId 1 is reserved for Mouse.\n // Touch identif iers can start at 0.\n // Add 2 to the touch identifier for compatibility.\ n var id = e.pointerId = inTouch.identifier + 2;\n e.target = this.fin dTarget(inTouch, id);\n e.bubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pressure = inTouch.webk itForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryTouch(inTouc h);\n e.pointerType = this.POINTER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaults\n var self = this;\n e.preventDefaul t = function() {\n self.scrolling = false;\n self.firstXY = null;\ n cte.preventDefault();\n };\n return e;\n },\n processTo uches: function(inEvent, inFunction) {\n var tl = inEvent.changedTouches;\n this.currentTouchEvent = inEvent;\n for (var i = 0, t, p; i < tl.leng th; i++) {\n t = tl[i];\n p = this.touchToPointer(t);\n if (inEvent.type === 'touchstart') {\n pointermap.set(p.pointerId, p.targe t);\n }\n if (pointermap.has(p.pointerId)) {\n inFunction .call(this, p);\n }\n if (inEvent.type === 'touchend' || inEvent._ cancel) {\n this.cleanUpPointer(p);\n }\n }\n },\n // For single axis scrollers, determines whether the element should emit\n // p ointer events or behave as a scroller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n var ret;\n var touchAction = scope.targe tFinding.findTouchAction(inEvent);\n var scrollAxis = this.touchActionToS crollType(touchAction);\n if (scrollAxis === 'none') {\n // this element is a touch-action: none, should never scroll\n ret = false;\n } else if (scrollAxis === 'XY') {\n // this element should alway s scroll\n ret = true;\n } else {\n var t = inEvent.cha ngedTouches[0];\n // check the intended scroll axis, and other axis\n var a = scrollAxis;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\ n var da = Math.abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n // if delta in t he scroll axis > delta other axis, scroll instead of\n // making events \n ret = da >= doa;\n }\n return ret;\n }\n },\n findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n return true;\n }\n }\n },\n // In some instances, a touchstart can happen without a touchend. This\n // leaves the pointermap in a broken s tate.\n // Therefore, on every touchstart, we remove the touches that did not fire a\n // touchend event.\n // To keep state globally consistent, we fi re a\n // pointercancel for this \"abandoned\" touch\n vacuumTouches: func tion(inEvent) {\n var tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointermap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(function(value, key) {\n // Never remove pointer Id == 1, which is mouse.\n // Touch identifiers are 2 smaller than thei r pointerId, which is the\n // index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key - 2)) {\n var p = value;\n d.push(p);\n }\n }, this);\n d.forEach(function(p) {\n this.cancel(p);\n pointermap.delete(p.pointerId);\n }); \n }\n },\n touchstart: function(inEvent) {\n this.vacuumTouches (inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.d edupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.clickCount+ +;\n this.processTouches(inEvent, this.down);\n }\n },\n down: function(inPointer) {\n dispatcher.down(inPointer);\n },\n touchmove : function(inEvent) {\n if (HAS_TOUCH_ACTION) {\n // touchevent.canc elable == false is sent when the page is scrolling under native Touch Action in Chrome 36\n // https://groups.google.com/a/chromium.org/d/msg/input-dev/w HnyukcYBcA/b9kmtwM1jJQJ\n if (inEvent.cancelable) {\n this.proce ssTouches(inEvent, this.move);\n }\n } else {\n if (!this.scr olling) {\n if (this.scrolling === null && this.shouldScroll(inEvent)) {\n this.scrolling = true;\n } else {\n this.scro lling = false;\n inEvent.preventDefault();\n this.processT ouches(inEvent, this.move);\n }\n } else if (this.firstXY) {\n var t = inEvent.changedTouches[0];\n var dx = t.clientX - this. firstXY.X;\n var dy = t.clientY - this.firstXY.Y;\n var dd = M ath.sqrt(dx * dx + dy * dy);\n if (dd >= HYSTERESIS) {\n thi s.touchcancel(inEvent);\n this.scrolling = true;\n this.fi rstXY = null;\n }\n }\n }\n },\n move: function(inPoi nter) {\n dispatcher.move(inPointer);\n },\n touchend: function(inEve nt) {\n this.dedupSynthMouse(inEvent);\n this.processTouches(inEvent, this.up);\n },\n up: function(inPointer) {\n inPointer.relatedTarget = scope.findTarget(inPointer);\n dispatcher.up(inPointer);\n },\n can cel: function(inPointer) {\n dispatcher.cancel(inPointer);\n },\n tou chcancel: function(inEvent) {\n inEvent._cancel = true;\n this.process Touches(inEvent, this.cancel);\n },\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inPointer.pointerId);\n this.removePrimaryPoi nter(inPointer);\n },\n // prevent synth mouse events from creating pointe r events\n dedupSynthMouse: function(inEvent) {\n var lts = scope.mouseE vents.lastTouches;\n var t = inEvent.changedTouches[0];\n // only the primary finger will synth mouse events\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touch\n var lt = {x: t.clientX, y: t.clientY };\n lts.push(lt);\n var fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT) ;\n }\n }\n };\n\n scope.touchEvents = touchEvents;\n})(window.Polymer Gestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at ht tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G oogle as part of the polymer project is also\n * subject to an additional IP rig hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointerm ap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEve nt.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPointer Cancel',\n ],\n register: function(target) {\n dispatcher.listen(targ et, this.events);\n },\n unregister: function(target) {\n dispatcher. unlisten(target, this.events);\n },\n POINTER_TYPES: [\n '',\n ' unavailable',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareE vent: function(inEvent) {\n var e = inEvent;\n e = dispatcher.cloneEve nt(inEvent);\n if (HAS_BITMAP_TYPE) {\n e.pointerType = this.POINTER _TYPES[inEvent.pointerType];\n }\n e._source = 'ms';\n return e;\ n },\n cleanup: function(id) {\n pointermap['delete'](id);\n },\n MSPointerDown: function(inEvent) {\n var e = this.prepareEvent(inEvent); \n e.target = scope.findTarget(inEvent);\n pointermap.set(inEvent.poin terId, e.target);\n dispatcher.down(e);\n },\n MSPointerMove: functio n(inEvent) {\n var target = pointermap.get(inEvent.pointerId);\n if (t arget) {\n var e = this.prepareEvent(inEvent);\n e.target = target ;\n dispatcher.move(e);\n }\n },\n MSPointerUp: function(inEve nt) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope. findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dispa tcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCance l: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relat edTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointer Id);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n } \n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n\n/*\n * Co pyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/ LICENSE.txt\n * The complete set of authors may be found at http://polymer.githu b.io/AUTHORS.txt\n * The complete set of contributors may be found at http://pol ymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the po lymer project is also\n * subject to an additional IP rights grant found at http ://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEvent s = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointer up',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n r eturn e;\n },\n register: function(target) {\n dispatcher.listen(targ et, this.events);\n },\n unregister: function(target) {\n dispatcher. unlisten(target, this.events);\n },\n cleanup: function(id) {\n point ermap['delete'](id);\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointermove: function(inEvent) {\n var target = pointermap.get(inEvent.poi nterId);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n dispatcher.move(e);\n }\n },\n pointe rup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.rel atedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.point erId);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\ n pointercancel: function(inEvent) {\n var e = this.prepareEvent(inEvent );\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointer map.get(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.p ointerId);\n }\n };\n\n scope.pointerEvents = pointerEvents;\n})(window.Pol ymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rig hts reserved.\n * This code may only be used under the BSD style license found a t http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be fo und at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This module contains the handlers for native platform events.\n * From here, the dis patcher is called to create unified pointer events.\n * Included are touch event s (v1), mouse events, and MSPointerEvents.\n */\n(function(scope) {\n var dispa tcher = scope.dispatcher;\n var nav = window.navigator;\n\n if (window.Pointer Event) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } el se if (nav.msPointerEnabled) {\n dispatcher.registerSource('ms', scope.msEven ts);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerSource('tou ch', scope.touchEvents);\n /*\n * NOTE: an empty touch listener on bo dy will reactivate nodes imported from templates with touch listeners\n * Removing it will re-break the nodes\n *\n * Work around for https:// bugs.webkit.org/show_bug.cgi?id=135628\n */\n var isSafari = nav.user Agent.match('Safari') && !nav.userAgent.match('Chrome');\n if (isSafari) {\ n document.body.addEventListener('touchstart', function(){});\n }\n }\n }\n dispatcher.register(document, true);\n})(window.PolymerGestures);\n \n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer .github.io/LICENSE.txt\n * The complete set of authors may be found at http://po lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par t of the polymer project is also\n * subject to an additional IP rights grant fo und at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event denotes t he beginning of a series of tracking events.\n *\n * @module PointerGestures\n * @submodule Events\n * @class trackstart\n */\n/**\n * Pixels moved in the x dir ection since trackstart.\n * @type Number\n * @property dx\n */\n/**\n * Pixes m oved in the y direction since trackstart.\n * @type Number\n * @property dy\n */ \n/**\n * Pixels moved in the x direction since the last track.\n * @type Number \n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the last track.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position of the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n * The clie ntY position of the track gesture.\n * @type Number\n * @property clientY\n */\n /**\n * The pageX position of the track gesture.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX position of the track gesture.\n * @ type Number\n * @property screenX\n */\n/**\n * The screenY position of the trac k gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n * @property xDirection\n */\n/**\n * The last y axis direction of the pointer.\n * @type Number\n * @property yDire ction\n */\n/**\n * A shared object between all tracking events.\n * @type Objec t\n * @property trackInfo\n */\n/**\n * The element currently under the pointer. \n * @type Element\n * @property relatedTarget\n */\n/**\n * The type of pointer that make the track gesture.\n * @type String\n * @property pointerType\n */\n/ **\n *\n * This event fires for all pointer movement being tracked.\n *\n * @cla ss track\n * @extends trackstart\n */\n/**\n * This event fires when the pointer is no longer being tracked.\n *\n * @class trackend\n * @extends trackstart\n * /\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFac tory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var track = {\n events: [\n 'down',\n 'move',\n 'up',\n ], \n exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n ' tracky',\n 'trackend'\n ],\n defaultActions: {\n 'track': 'no ne',\n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGGLE_ THRESHOLD: 4,\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.pageY - inA.pageY;\n }\n return {x: x, y: y};\n },\n fireTrack: function(inType, inEvent, inTrackingData) {\n var t = inTrack ingData;\n var d = this.calcPositionDelta(t.downEvent, inEvent);\n v ar dd = this.calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clampDir(dd.x);\n } else if (inType === 'track x') {\n return;\n }\n if (dd.y) {\n t.yDirection = t his.clampDir(dd.y);\n } else if (inType === 'tracky') {\n return;\ n }\n var gestureProto = {\n bubbles: true,\n cancel able: true,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.r elatedTarget,\n pointerType: inEvent.pointerType,\n pointerId: i nEvent.pointerId,\n _source: 'track'\n };\n if (inType !== ' tracky') {\n gestureProto.x = inEvent.x;\n gestureProto.dx = d.x ;\n gestureProto.ddx = dd.x;\n gestureProto.clientX = inEvent.cl ientX;\n gestureProto.pageX = inEvent.pageX;\n gestureProto.scre enX = inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n }\n if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n gestureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n gestur eProto.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.pageY;\ n gestureProto.screenY = inEvent.screenY;\n gestureProto.yDirect ion = t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(inTy pe, gestureProto);\n t.downTarget.dispatchEvent(e);\n },\n down: f unction(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'mo use' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEven t: inEvent,\n downTarget: inEvent.target,\n trackInfo: {},\n lastMoveEvent: null,\n xDirection: 0,\n yDirectio n: 0,\n tracking: false\n };\n pointermap.set(inEvent. pointerId, p);\n }\n },\n move: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD) { \n p.tracking = true;\n p.lastMoveEvent = p.downEvent;\n this.fireTrack('trackstart', inEvent, p);\n }\n } \n if (p.tracking) {\n this.fireTrack('track', inEvent, p);\n this.fireTrack('trackx', inEvent, p);\n this.fireTrack('trac ky', inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\n },\n up: function(inEvent) {\n var p = pointermap.get(inEvent.point erId);\n if (p) {\n if (p.tracking) {\n this.fireTrack(' trackend', inEvent, p);\n }\n pointermap.delete(inEvent.pointerI d);\n }\n }\n };\n dispatcher.registerGesture('track', track);\n } )(window.PolymerGestures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Auth ors. All rights reserved.\n * This code may only be used under the BSD style lic ense found at http://polymer.github.io/LICENSE.txt\n * The complete set of autho rs may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an a dditional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n /**\n * This event is fired when a pointer is held down for 200ms.\n *\n * @modu le PointerGestures\n * @submodule Events\n * @class hold\n */\n/**\n * Type of p ointer that made the holding event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axis position of the held pointer\n * @type Number\n * @pr operty clientX\n */\n/**\n * Screen Y axis position of the held pointer\n * @typ e Number\n * @property clientY\n */\n/**\n * Type of pointer that made the holdi ng event.\n * @type String\n * @property pointerType\n */\n/**\n * This event is fired every 200ms while a pointer is held down.\n *\n * @class holdpulse\n * @e xtends hold\n */\n/**\n * Milliseconds pointer has been held down.\n * @type Num ber\n * @property holdTime\n */\n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n HOLD_DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not cou nting as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n ],\n exposes: [\n 'hold',\n 'holdpulse',\ n 'release'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: function() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(t his.holdJob);\n if (this.held) {\n this.fireHold('release');\n }\n this.held = false;\n this.heldPointer = null;\n this.target = null;\n this.holdJob = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEve nt;\n this.target = inEvent.target;\n this.holdJob = setInterval(t his.pulse.bind(this), this.HOLD_DELAY);\n }\n },\n up: function(inEve nt) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.poin terId) {\n this.cancel();\n }\n },\n move: function(inEvent) { \n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId ) {\n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > thi s.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fireHold: function(inType, inHoldTime) {\n var p = {\n bubbles: tru e,\n cancelable: true,\n pointerType: this.heldPointer.pointerType ,\n pointerId: this.heldPointer.pointerId,\n x: this.heldPointer.c lientX,\n y: this.heldPointer.clientY,\n _source: 'hold'\n }; \n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGestureEvent(inType, p);\n this.target.dispatchEvent(e );\n }\n };\n dispatcher.registerGesture('hold', hold);\n})(window.PolymerG estures);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights r eserved.\n * This code may only be used under the BSD style license found at htt p://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found a t http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Go ogle as part of the polymer project is also\n * subject to an additional IP righ ts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This even t is fired when a pointer quickly goes down and up, and is used to\n * denote ac tivation.\n *\n * Any gesture event can prevent the tap event from being created by calling\n * `event.preventTap`.\n *\n * Any pointer event can prevent the ta p by setting the `tapPrevented` property\n * on itself.\n *\n * @module PointerG estures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of th e tap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap .\n * @property y\n * @type Number\n */\n/**\n * Type of the pointer that made t he tap.\n * @property pointerType\n * @type String\n */\n(function(scope) {\n v ar dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n v ar pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'do wn',\n 'up'\n ],\n exposes: [\n 'tap'\n ],\n down: functio n(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\n p ointermap.set(inEvent.pointerId, {\n target: inEvent.target,\n buttons: inEvent.buttons,\n x: inEvent.clientX,\n y: inEvent. clientY\n });\n }\n },\n shouldTap: function(e, downState) {\n if (e.pointerType === 'mouse') {\n // only allow left click to tap for mouse\n return downState.buttons === 1;\n }\n return !e.tap Prevented;\n },\n up: function(inEvent) {\n var start = pointermap.ge t(inEvent.pointerId);\n if (start && this.shouldTap(inEvent, start)) {\n // up.relatedTarget is target currently under finger\n var t = scope .targetFinding.LCA(start.target, inEvent.relatedTarget);\n if (t) {\n var e = eventFactory.makeGestureEvent('tap', {\n bubbles: true, \n cancelable: true,\n x: inEvent.clientX,\n y: inEvent.clientY,\n detail: inEvent.detail,\n pointerType: inEvent.pointerType,\n pointerId: inEvent.pointerId,\n al tKey: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\n metaKe y: inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\n _sourc e: 'tap'\n });\n t.dispatchEvent(e);\n }\n }\n pointermap.delete(inEvent.pointerId);\n }\n };\n // patch eventFactory to remove id from tap's pointermap for preventTap calls\n eventFactory.preventTap = function(e) {\n return function() {\n e.tapPrevented = true;\n p ointermap.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap' , tap);\n})(window.PolymerGestures);\n\n/*\n Copyright (C) 2013 Ariya Hidayat < ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.co m>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C ) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekeste ijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixa r.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source and bina ry forms, with or without\n modification, are permitted provided that the follo wing conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following discla imer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCL AIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIREC T, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT N OT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA , OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF L IABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENC E OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF A DVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Token,\n TokenName,\n Syntax,\n Message s,\n source,\n index,\n length,\n delegate,\n lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\ n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Identifi er';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral ] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Tok en.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n \n Syntax = {\n ArrayExpression: 'ArrayExpression',\n BinaryExp ression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n ConditionalExpression: 'ConditionalExpression',\n EmptyStatement: 'Empty Statement',\n ExpressionStatement: 'ExpressionStatement',\n Identi fier: 'Identifier',\n Literal: 'Literal',\n LabeledStatement: 'Lab eledStatement',\n LogicalExpression: 'LogicalExpression',\n Member Expression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpressi on: 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n Unexpec tedToken: 'Unexpected token %0',\n UnknownLabel: 'Undefined label \\'%0\ \'',\n Redeclaration: '%0 \\'%1\\' has already been declared'\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is o nly to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function asser t(condition, message) {\n if (!condition) {\n throw new Error( 'ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Spa ce\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) || // tab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch === 0xA0) ||\n (ch >= 0x1680 && '\\u 1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u200 9\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n function isIdentifierSt art(ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (un derscore)\n (ch >= 65 && ch <= 90) || // A..Z\n (c h >= 97 && ch <= 122); // a..z\n }\n\n function isIdentifierPart( ch) {\n return (ch === 36) || (ch === 95) || // $ (dollar) and _ (unders core)\n (ch >= 65 && ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122) || // a..z\n (ch >= 48 && ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n }\n\n // 7.4 Comments\n\n function skipW hitespace() {\n while (index < length && isWhiteSpace(source.charCodeAt(i ndex))) {\n ++index;\n }\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < l ength) {\n ch = source.charCodeAt(index);\n if (isIdentifi erPart(ch)) {\n ++index;\n } else {\n b reak;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n id = getIdentifier();\n\n // There is no keywo rd or literal with only one character.\n // Thus, it must be an identifie r.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n retu rn {\n type: type,\n value: id,\n range: [start , index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunc tuator() {\n var start = index,\n code = source.charCodeAt(ind ex),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character pun ctuators.\n case 46: // . dot\n case 40: // ( open bracket\n case 41: // ) close bracket\n case 59: // ; semicolon\n case 44: // , comma\n case 123: // { open curly brace\n case 12 5: // } close curly brace\n case 91: // [\n case 93: // ]\n case 58: // :\n case 63: // ?\n ++index;\n return {\n type: Token.Punctuator,\n value: Stri ng.fromCharCode(code),\n range: [start, index]\n };\n\ n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assignment or comparison operator.\n i f (code2 === 61) {\n switch (code) {\n case 37: / / %\n case 38: // &\n case 42: // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 62: // >\n case 124: // |\n index += 2;\n retur n {\n type: Token.Punctuator,\n va lue: String.fromCharCode(code) + String.fromCharCode(code2),\n range: [start, index]\n };\n\n case 33: // !\n case 61: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 61) {\n ++index;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n range: [star t, index]\n };\n default:\n break;\n }\n }\n break;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // O ther 2-character punctuators: && ||\n\n if (ch1 === ch2 && ('&|'.indexOf( ch1) >= 0)) {\n index += 2;\n return {\n ty pe: Token.Punctuator,\n value: ch1 + ch2,\n range: [start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.indexOf (ch1) >= 0) {\n ++index;\n return {\n type: Token.Punctuator,\n value: ch1,\n range: [start, index]\n };\n }\n\n throwError({}, Messages.UnexpectedT oken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function scanNume ricLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Nu meric literal must start with a decimal digit or a decimal point');\n\n s tart = index;\n number = '';\n if (ch !== '.') {\n numb er = source[index++];\n ch = source[index];\n\n // Hex num ber starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n // decimal number starts with '0' such a s '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCo deAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt (index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++] ;\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\ n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloa t(number),\n range: [start, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', qu ote, start, ch, octal = false;\n\n quote = source[index];\n assert ((quote === '\\'' || quote === '\"'),\n 'String literal must starts w ith a quote');\n\n start = index;\n ++index;\n\n while (ind ex < length) {\n ch = source[index++];\n\n if (ch === quot e) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (! ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\ n case 'n':\n str += '\\n';\n break;\n case 'r':\n st r += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n def ault:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r ' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCode At(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwE rror({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octa l: octal,\n range: [start, index]\n };\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.Bool eanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n funct ion advance() {\n var ch;\n\n skipWhitespace();\n\n if (ind ex >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\n ch = source .charCodeAt(index);\n\n // Very common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (#39) or double quote (# 34).\n if (ch === 39 || ch === 34) {\n return scanStringLitera l();\n }\n\n if (isIdentifierStart(ch)) {\n return scan Identifier();\n }\n\n // Dot (.) char #46 can also start a floatin g-point number, hence the need\n // to check the next character.\n if (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n ret urn scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\ n index = token.range[1];\n\n lookahead = advance();\n\n in dex = token.range[1];\n\n return token;\n }\n\n function peek() {\n var pos;\n\n pos = index;\n lookahead = advance();\n index = pos;\n }\n\n // Throw an exception\n\n function throwError(to ken, messageFormat) {\n var error,\n args = Array.prototype.sl ice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function (whole, index) {\n as sert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\ n throw error;\n }\n\n // Throw an exception because of the token.\ n\n function throwUnexpected(token) {\n throwError(token, Messages.Une xpectedToken, token.value);\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n functi on expect(value) {\n var token = lex();\n if (token.type !== Token .Punctuator || token.value !== value) {\n throwUnexpected(token);\n }\n }\n\n // Return true if the next token matches the specified pun ctuator.\n\n function match(value) {\n return lookahead.type === Token .Punctuator && lookahead.value === value;\n }\n\n // Return true if the ne xt token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\ n }\n\n function consumeSemicolon() {\n // Catch the very common ca se first: immediately a semicolon (char #59).\n if (source.charCodeAt(ind ex) === 59) {\n lex();\n return;\n }\n\n ski pWhitespace();\n\n if (match(';')) {\n lex();\n ret urn;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseArrayInitialiser() {\n var elements = [] ;\n\n expect('[');\n\n while (!match(']')) {\n if (matc h(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n expect(']');\n\n return delegate.createA rrayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n func tion parseObjectPropertyKey() {\n var token;\n\n skipWhitespace(); \n token = lex();\n\n // Note: This function is called only from p arseObjectProperty(), where\n // EOF and Punctuator tokens are already fi ltered out.\n if (token.type === Token.StringLiteral || token.type === To ken.NumericLiteral) {\n return delegate.createLiteral(token);\n }\n\n return delegate.createIdentifier(token.value);\n }\n\n func tion parseObjectProperty() {\n var token, key;\n\n token = lookahe ad;\n skipWhitespace();\n\n if (token.type === Token.EOF || token. type === Token.Punctuator) {\n throwUnexpected(token);\n }\n\n key = parseObjectPropertyKey();\n expect(':');\n return de legate.createProperty('init', key, parseExpression());\n }\n\n function pa rseObjectInitialiser() {\n var properties = [];\n\n expect('{');\n \n while (!match('}')) {\n properties.push(parseObjectProperty ());\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return delegate.createObjectEx pression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n funct ion parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression( ) {\n var type, token, expr;\n\n if (match('(')) {\n re turn parseGroupExpression();\n }\n\n type = lookahead.type;\n\n if (type === Token.Identifier) {\n expr = delegate.createIdentif ier(lex().value);\n } else if (type === Token.StringLiteral || type === T oken.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keyword) {\n if (matchKeyword('this')) { \n lex();\n expr = delegate.createThisExpression() ;\n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = delegate.createLiteral(token);\n } else if (type === Token.Nul lLiteral) {\n token = lex();\n token.value = null;\n expr = delegate.createLiteral(token);\n } else if (match('[')) {\n expr = parseArrayInitialiser();\n } else if (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n if (expr) {\n return expr;\n }\n\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\ n return args;\n }\n\n function parseNonComputedProperty() {\n var token;\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return delegate.cr eateIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr ;\n }\n\n function parseLeftHandSideExpression() {\n var expr, args , property;\n\n expr = parsePrimaryExpression();\n\n while (true) {\n if (match('[')) {\n property = parseComputedMember ();\n expr = delegate.createMemberExpression('[', expr, property) ;\n } else if (match('.')) {\n property = parseNonComp utedMember();\n expr = delegate.createMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseA rguments();\n expr = delegate.createCallExpression(expr, args);\n } else {\n break;\n }\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfix Expression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr;\n\n if (looka head.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('+') || match('-') || match('!')) {\n token = lex();\n expr = parseUnaryExpr ession();\n expr = delegate.createUnaryExpression(token.value, expr); \n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyw ord('typeof')) {\n throwError({}, Messages.UnexpectedToken);\n } else {\n expr = parsePostfixExpression();\n }\n\n re turn expr;\n }\n\n function binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keywor d) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '==':\n case '!= ':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n cas e '>=':\n case 'instanceof':\n prec = 7;\n break;\n \n case 'in':\n prec = 7;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n ca se '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return p rec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operat ors\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpression() {\n var expr, token, prec, stack, right, operator, left, i;\n\n left = parseUnary Expression();\n\n token = lookahead;\n prec = binaryPrecedence(tok en);\n if (prec === 0) {\n return left;\n }\n to ken.prec = prec;\n lex();\n\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence( lookahead)) > 0) {\n\n // Reduce: make a binary expression from the t hree topmost entries.\n while ((stack.length > 2) && (prec <= stack[s tack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n toke n = lex();\n token.prec = prec;\n stack.push(token);\n expr = parseUnaryExpression();\n stack.push(expr);\n } \n\n // Final reduce to clean-up the stack.\n i = stack.length - 1 ;\n expr = stack[i];\n while (i > 1) {\n expr = delegat e.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional O perator\n\n function parseConditionalExpression() {\n var expr, conseq uent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match ('?')) {\n lex();\n consequent = parseConditionalExpressio n();\n expect(':');\n alternate = parseConditionalExpressi on();\n\n expr = delegate.createConditionalExpression(expr, consequen t, alternate);\n }\n\n return expr;\n }\n\n // Simplificatio n since we do not support AssignmentExpression.\n var parseExpression = parse ConditionalExpression;\n\n // Polymer Syntax extensions\n\n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n var identifier, a rgs;\n\n identifier = lex();\n\n if (identifier.type !== Token.Ide ntifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return delegate.createFilter(id entifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n / / Filters \"|\" Filter\n\n function parseFilters() {\n while (match( '|')) {\n lex();\n parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsExpression\n // I nExpression\n // FilterExpression\n\n // AsExpression ::\n // Filte rExpression as Identifier\n\n // InExpression ::\n // Identifier, Identi fier in FilterExpression\n // Identifier in FilterExpression\n\n // Filt erExpression ::\n // Expression\n // Expression Filters\n\n functio n parseTopLevel() {\n skipWhitespace();\n peek();\n\n var e xpr = parseExpression();\n if (expr) {\n if (lookahead.value = == ',' || lookahead.value == 'in' &&\n expr.type === Synta x.Identifier) {\n parseInExpression(expr);\n } else {\ n parseFilters();\n if (lookahead.value === 'as') {\n parseAsExpression(expr);\n } else {\n delegate.createTopLevel(expr);\n }\n }\ n }\n\n if (lookahead.type !== Token.EOF) {\n throwUnex pected(lookahead);\n }\n }\n\n function parseAsExpression(expr) {\n lex(); // as\n var identifier = lex().value;\n delegate.c reateAsExpression(expr, identifier);\n }\n\n function parseInExpression(id entifier) {\n var indexName;\n if (lookahead.value === ',') {\n lex();\n if (lookahead.type !== Token.Identifier)\n throwUnexpected(lookahead);\n indexName = lex().value;\n }\n\n lex(); // in\n var expr = parseExpression();\n par seFilters();\n delegate.createInExpression(identifier.name, indexName, ex pr);\n }\n\n function parse(code, inDelegate) {\n delegate = inDele gate;\n source = code;\n index = 0;\n length = source.lengt h;\n lookahead = null;\n state = {\n labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);\n\n// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n// This code may only be used under the BSD styl e license found at http://polymer.github.io/LICENSE.txt\n// The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n// The complete se t of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google as part of the polymer project is also\n// subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n (function (global) {\n 'use strict';\n\n function prepareBinding(expressionTex t, name, node, filterRegistry) {\n var expression;\n try {\n expressi on = getExpression(expressionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLAT E' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Erro r('as and in can only be used within <template bind/repeat>');\n }\n } c atch (ex) {\n console.error('Invalid expression syntax: ' + expressionText, ex);\n return;\n }\n\n return function(model, node, oneTime) {\n var binding = expression.getBinding(model, filterRegistry, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIdent)\n node.po lymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bin ding;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expression ParseCache = Object.create(null);\n\n function getExpression(expressionText) {\ n var expression = expressionParseCache[expressionText];\n if (!expression ) {\n var delegate = new ASTDelegate();\n esprima.parse(expressionText , delegate);\n expression = new Expression(delegate);\n expressionPars eCache[expressionText] = expression;\n }\n return expression;\n }\n\n fu nction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined; \n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.val ueFn_) {\n var value = this.value;\n this.valueFn_ = function() {\ n return value;\n }\n }\n\n return this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = Path.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n var path = thi s.path;\n this.valueFn_ = function(model, observer) {\n if (obse rver)\n observer.addPath(model, path);\n\n return path.getVa lueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.path.length == 1);\n model = findScope(model, this.path[0]);\n\n return this.path.setValueFr om(model, newValue);\n }\n };\n\n function MemberExpression(object, propert y, accessor) {\n this.computed = accessor == '[';\n\n this.dynamicDeps = t ypeof object == 'function' ||\n object.dynamicDeps ||\n (this.computed && !(property instanceof Literal));\n\n th is.simplePath =\n !this.dynamicDeps &&\n (property instanceof Iden tPath || property instanceof Literal) &&\n (object instanceof MemberExpre ssion || object instanceof IdentPath);\n\n this.object = this.simplePath ? ob ject : getFn(object);\n this.property = !this.computed || this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpression.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n var parts = this.obj ect instanceof MemberExpression ?\n this.object.fullPath.slice() : [t his.object.name];\n parts.push(this.property instanceof IdentPath ?\n this.property.name : this.property.value);\n this.fullPath_ = Pat h.get(parts);\n }\n\n return this.fullPath_;\n },\n\n valueFn: f unction() {\n if (!this.valueFn_) {\n var object = this.object;\n\n if (this.simplePath) {\n var path = this.fullPath;\n\n this.valueFn_ = function(model, observer) {\n if (observer)\n observer.addPath(model, path);\n\n return path.getValueFrom(mod el);\n };\n } else if (!this.computed) {\n var path = P ath.get(this.property.name);\n\n this.valueFn_ = function(model, observ er, filterRegistry) {\n var context = object(model, observer, filterR egistry);\n\n if (observer)\n observer.addPath(context, path);\n\n return path.getValueFrom(context);\n }\n } else {\n // Computed property.\n var property = this.property ;\n\n this.valueFn_ = function(model, observer, filterRegistry) {\n var context = object(model, observer, filterRegistry);\n var propName = property(model, observer, filterRegistry);\n if (observer) \n observer.addPath(context, [propName]);\n\n return con text ? context[propName] : undefined;\n };\n }\n }\n r eturn this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue);\n return newValue;\n }\n\n var object = this.object(model);\n var propName = this.property instanceof IdentPath ? this.property.name :\n this.property(model);\n return object[propName] = newValue;\n }\n };\n\n function Filter(name, args) {\n this.name = name;\n this.args = [ ];\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(args [i]);\n }\n }\n\n Filter.prototype = {\n transform: function(model, obse rver, filterRegistry, toModelDirection,\n initialArgs) {\ n var fn = filterRegistry[this.name];\n var context = model;\n if (fn) {\n context = undefined;\n } else {\n fn = context[this .name];\n if (!fn) {\n console.error('Cannot find function or fi lter: ' + this.name);\n return;\n }\n }\n\n // If toMo delDirection is falsey, then the \"normal\" (dom-bound) direction\n // is u sed. Otherwise, it looks for a 'toModel' property function on the\n // obje ct.\n if (toModelDirection) {\n fn = fn.toModel;\n } else if (t ypeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n }\n\n if (ty peof fn != 'function') {\n console.error('Cannot find function or filter: ' + this.name);\n return;\n }\n\n var args = initialArgs || [] ;\n for (var i = 0; i < this.args.length; i++) {\n args.push(getFn(t his.args[i])(model, observer, filterRegistry));\n }\n\n return fn.appl y(context, args);\n }\n };\n\n function notImplemented() { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': function(v) { return +v; },\n '-': function(v) { return -v; },\n '!': function(v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r) { return l*r; },\ n '/': function(l, r) { return l/r; },\n '%': function(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': function(l, r) { return l>r; },\n '<=': function(l, r) { return l<=r; },\n '>=': function(l, r) { return l>=r; },\n '==': function(l, r) { return l==r; },\n '!=': function( l, r) { return l!=r; },\n '===': function(l, r) { return l===r; },\n '!==' : function(l, r) { return l!==r; },\n '&&': function(l, r) { return l&&r; },\ n '||': function(l, r) { return l||r; },\n };\n\n function getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n function ASTD elegate() {\n this.expression = null;\n this.filters = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIdent = undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\n ASTDelegat e.prototype = {\n createUnaryExpression: function(op, argument) {\n if ( !unaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n argument = getFn(argument);\n\n return function(model, observer, filterRe gistry) {\n return unaryOperators[op](argument(model, observer, filterReg istry));\n };\n },\n\n createBinaryExpression: function(op, left, rig ht) {\n if (!binaryOperators[op])\n throw Error('Disallowed operator : ' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n sw itch (op) {\n case '||':\n this.dynamicDeps = true;\n r eturn function(model, observer, filterRegistry) {\n return left(model , observer, filterRegistry) ||\n right(model, observer, filterReg istry);\n };\n case '&&':\n this.dynamicDeps = true;\n return function(model, observer, filterRegistry) {\n return left(model, observer, filterRegistry) &&\n right(model, observer, filterRegistry);\n };\n }\n\n return function(model, observe r, filterRegistry) {\n return binaryOperators[op](left(model, observer, f ilterRegistry),\n right(model, observer, filte rRegistry));\n };\n },\n\n createConditionalExpression: function(test , consequent, alternate) {\n test = getFn(test);\n consequent = getFn( consequent);\n alternate = getFn(alternate);\n\n this.dynamicDeps = tr ue;\n\n return function(model, observer, filterRegistry) {\n return test(model, observer, filterRegistry) ?\n consequent(model, observer, filterRegistry) :\n alternate(model, observer, filterRegistry);\n }\n },\n\n createIdentifier: function(name) {\n var ident = new Id entPath(name);\n ident.type = 'Identifier';\n return ident;\n },\n\ n createMemberExpression: function(accessor, object, property) {\n var e x = new MemberExpression(object, property, accessor);\n if (ex.dynamicDeps) \n this.dynamicDeps = true;\n return ex;\n },\n\n createCallEx pression: function(expression, args) {\n if (!(expression instanceof IdentP ath))\n throw Error('Only identifier function invocations are allowed');\ n\n var filter = new Filter(expression.name, args);\n\n return functio n(model, observer, filterRegistry) {\n return filter.transform(model, obs erver, filterRegistry, false);\n };\n },\n\n createLiteral: function( token) {\n return new Literal(token.value);\n },\n\n createArrayExpre ssion: function(elements) {\n for (var i = 0; i < elements.length; i++)\n elements[i] = getFn(elements[i]);\n\n return function(model, observer , filterRegistry) {\n var arr = []\n for (var i = 0; i < elements. length; i++)\n arr.push(elements[i](model, observer, filterRegistry));\ n return arr;\n }\n },\n\n createProperty: function(kind, key, value) {\n return {\n key: key instanceof IdentPath ? key.name : ke y.value,\n value: value\n };\n },\n\n createObjectExpression: function(properties) {\n for (var i = 0; i < properties.length; i++)\n properties[i].value = getFn(properties[i].value);\n\n return function(mo del, observer, filterRegistry) {\n var obj = {};\n for (var i = 0; i < properties.length; i++)\n obj[properties[i].key] =\n properties[i].value(model, observer, filterRegistry);\n return obj;\n }\n },\n\n createFilter: function(name, args) {\n this.filters.push (new Filter(name, args));\n },\n\n createAsExpression: function(expression , scopeIdent) {\n this.expression = expression;\n this.scopeIdent = sc opeIdent;\n },\n\n createInExpression: function(scopeIdent, indexIdent, ex pression) {\n this.expression = expression;\n this.scopeIdent = scopeI dent;\n this.indexIdent = indexIdent;\n },\n\n createTopLevel: functi on(expression) {\n this.expression = expression;\n },\n\n createThisE xpression: notImplemented\n }\n\n function ConstantObservable(value) {\n th is.value_ = value;\n }\n\n ConstantObservable.prototype = {\n open: functio n() { return this.value_; },\n discardChanges: function() { return this.value _; },\n deliver: function() {},\n close: function() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeIdent;\n this.in dexIdent = delegate.indexIdent;\n\n if (!delegate.expression)\n throw Er ror('No expression found.');\n\n this.expression = delegate.expression;\n getFn(this.expression); // forces enumeration of path dependencies\n\n this.f ilters = delegate.filters;\n this.dynamicDeps = delegate.dynamicDeps;\n }\n\ n Expression.prototype = {\n getBinding: function(model, filterRegistry, one Time) {\n if (oneTime)\n return this.getValue(model, undefined, filt erRegistry);\n\n var observer = new CompoundObserver();\n // captures deps.\n var firstValue = this.getValue(model, observer, filterRegistry);\n var firstTime = true;\n var self = this;\n\n function valueFn() { \n // deps cannot have changed on first value retrieval.\n if (fir stTime) {\n firstTime = false;\n return firstValue;\n } \n\n if (self.dynamicDeps)\n observer.startReset();\n\n v ar value = self.getValue(model,\n self.dynamicD eps ? observer : undefined,\n filterRegistry);\ n if (self.dynamicDeps)\n observer.finishReset();\n\n ret urn value;\n }\n\n function setValueFn(newValue) {\n self.setVa lue(model, newValue, filterRegistry);\n return newValue;\n }\n\n return new ObserverTransform(observer, valueFn, setValueFn, true);\n },\n\n getValue: function(model, observer, filterRegistry) {\n var value = get Fn(this.expression)(model, observer, filterRegistry);\n for (var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].transform(model, o bserver, filterRegistry,\n false, [value]);\n }\n\n return value;\n },\n\n setValue: function(model, newValue, filterRegistry) {\n var count = this.filters ? this.filters.length : 0;\n while (count-- > 0 ) {\n newValue = this.filters[count].transform(model, undefined,\n filterRegistry, true, [newValue]);\n }\n\n if (this.expression.se tValue)\n return this.expression.setValue(model, newValue);\n }\n }\n \n /**\n * Converts a style property name to a css property name. For example :\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function conve rtStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, function( c) {\n return '-' + c.toLowerCase();\n });\n }\n\n var parentScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single ident paths must bi nd directly to the appropriate scope object.\n // I.e. Pushed values in two-bin dings need to be assigned to the actual model\n // object.\n function findScop e(model, prop) {\n while (model[parentScopeName] &&\n !Object.proto type.hasOwnProperty.call(model, prop)) {\n model = model[parentScopeName];\ n }\n\n return model;\n }\n\n function isLiteralExpression(pathString) { \n switch (pathString) {\n case '':\n return false;\n\n case 'false':\n case 'null':\n case 'true':\n return true;\n }\n \n if (!isNaN(Number(pathString)))\n return true;\n\n return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpressions.prototype = { \n // \"built-in\" filters\n styleObject: function(value) {\n var par ts = [];\n for (var key in value) {\n parts.push(convertStylePropert yName(key) + ': ' + value[key]);\n }\n return parts.join('; ');\n } ,\n\n tokenList: function(value) {\n var tokens = [];\n for (var ke y in value) {\n if (value[key])\n tokens.push(key);\n }\n return tokens.join(' ');\n },\n\n // binding delegate API\n prepare InstancePositionChanged: function(template) {\n var indexIdent = template.p olymerExpressionIndexIdent_;\n if (!indexIdent)\n return;\n\n r eturn function(templateInstance, index) {\n templateInstance.model[indexI dent] = index;\n };\n },\n\n prepareBinding: function(pathString, nam e, node) {\n var path = Path.get(pathString);\n\n if (!isLiteralExpres sion(pathString) && path.valid) {\n if (path.length == 1) {\n re turn function(model, node, oneTime) {\n if (oneTime)\n r eturn path.getValueFrom(model);\n\n var scope = findScope(model, path [0]);\n return new PathObserver(scope, path);\n };\n }\n return; // bail out early if pathString is simple path.\n }\n\n return prepareBinding(pathString, name, node, this);\n },\n\n prepare InstanceModel: function(template) {\n var scopeName = template.polymerExpre ssionScopeIdent_;\n if (!scopeName)\n return;\n\n var parentSco pe = template.templateInstance ?\n template.templateInstance.model :\n template.model;\n\n var indexName = template.polymerExpressionInde xIdent_;\n\n return function(model) {\n return createScopeObject(par entScope, model, scopeName, indexName);\n };\n }\n };\n\n var createSc opeObject = ('__proto__' in {}) ?\n function(parentScope, model, scopeName, i ndexName) {\n var scope = {};\n scope[scopeName] = model;\n scope [indexName] = undefined;\n scope[parentScopeName] = parentScope;\n sco pe.__proto__ = parentScope;\n return scope;\n } :\n function(parentSc ope, model, scopeName, indexName) {\n var scope = Object.create(parentScope );\n Object.defineProperty(scope, scopeName,\n { value: model, con figurable: true, writable: true });\n Object.defineProperty(scope, indexNam e,\n { value: undefined, configurable: true, writable: true });\n Object.defineProperty(scope, parentScopeName,\n { value: parentScope, c onfigurable: true, writable: true });\n return scope;\n };\n\n global.P olymerExpressions = PolymerExpressions;\n PolymerExpressions.getExpression = ge tExpression;\n})(this);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors . All rights reserved.\n * This code may only be used under the BSD style licens e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis tributed by Google as part of the polymer project is also\n * subject to an addi tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nPolym er = {\n version: '0.4.0-d66a86e'\n};\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the B SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t xt\n * Code distributed by Google as part of the polymer project is also\n * sub ject to an additional IP rights grant found at http://polymer.github.io/PATENTS. txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a functi on\n// Platform is currently defining it as a function to allow for async loadin g\n// of polymer; once we refine the loading process this likely goes away.\nif (typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n\n/*\n * Copyrig ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICEN SE.txt\n * The complete set of authors may be found at http://polymer.github.io/ AUTHORS.txt\n * The complete set of contributors may be found at http://polymer. github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://po lymer.github.io/PATENTS.txt\n */\n\n /*\n\tOn supported platforms, platform.js i s not needed. To retain compatibility\n\twith the polyfills, we stub out minimal functionality.\n */\nif (!window.Platform) {\n logFlags = window.logFlags || { };\n\n\n Platform = {\n \tflush: function() {}\n };\n\n CustomElements = {\n \tuseNative: true,\n ready: true,\n takeRecords: function() {},\n ins tanceof: function(obj, base) {\n return obj instanceof base;\n }\n };\n \n HTMLImports = {\n \tuseNative: true\n };\n\n \n addEventListener('HTML ImportsLoaded', function() {\n document.dispatchEvent(\n new CustomEvent ('WebComponentsReady', {bubbles: true})\n );\n });\n\n\n // ShadowDOM\n Sh adowDOMPolyfill = null;\n wrap = unwrap = function(n){\n return n;\n };\n\n }\n\n/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\r\n * This code may only be used under the BSD style license found at http:// polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer project is also\r\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n(functi on(scope) {\r\n\r\nvar hasNative = ('import' in document.createElement('link')); \r\nvar useNative = hasNative;\r\n\r\nisIE = /Trident/.test(navigator.userAgent) ;\r\n\r\n// TODO(sorvell): SD polyfill intrusion\r\nvar hasShadowDOMPolyfill = B oolean(window.ShadowDOMPolyfill);\r\nvar wrap = function(node) {\r\n return has ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node) : node;\r\n};\r\nvar ma inDoc = wrap(document);\r\n \r\n// NOTE: We cannot polyfill document.currentS cript because it's not possible\r\n// both to override and maintain the ability to capture the native value;\r\n// therefore we choose to expose _currentScript both when native imports\r\n// and the polyfill are in use.\r\nvar currentScript Descriptor = {\r\n get: function() {\r\n var script = HTMLImports.currentScr ipt || document.currentScript ||\r\n // NOTE: only works when called in s ynchronously executing code.\r\n // readyState should check if `loading` but IE10 is \r\n // interactive when scripts run so we cheat.\r\n (document.readyState !== 'complete' ? \r\n document.scripts[document.scri pts.length - 1] : null);\r\n return wrap(script);\r\n },\r\n configurable: true\r\n};\r\n\r\nObject.defineProperty(document, '_currentScript', currentScrip tDescriptor);\r\nObject.defineProperty(mainDoc, '_currentScript', currentScriptD escriptor);\r\n\r\n// call a callback when all HTMLImports in the document at ca ll (or at least\r\n// document ready) time have loaded.\r\n// 1. ensure the doc ument is in a ready state (has dom), then \r\n// 2. watch for loading of imports and call callback when done\r\nfunction whenImportsReady(callback, doc) {\r\n doc = doc || mainDoc;\r\n // if document is loading, wait and try again\r\n wh enDocumentReady(function() {\r\n watchImportsLoad(callback, doc);\r\n }, doc );\r\n}\r\n\r\n// call the callback when the document is in a ready state (has d om)\r\nvar requiredReadyState = isIE ? 'complete' : 'interactive';\r\nvar READY_ EVENT = 'readystatechange';\r\nfunction isDocumentReady(doc) {\r\n return (doc. readyState === 'complete' ||\r\n doc.readyState === requiredReadyState);\r\ n}\r\n\r\n// call <callback> when we ensure the document is in a ready state\r\n function whenDocumentReady(callback, doc) {\r\n if (!isDocumentReady(doc)) {\r\ n var checkReady = function() {\r\n if (doc.readyState === 'complete' || \r\n doc.readyState === requiredReadyState) {\r\n doc.removeEve ntListener(READY_EVENT, checkReady);\r\n whenDocumentReady(callback, doc) ;\r\n }\r\n };\r\n doc.addEventListener(READY_EVENT, checkReady);\r\n } else if (callback) {\r\n callback();\r\n }\r\n}\r\n\r\nfunction markTarg etLoaded(event) {\r\n event.target.__loaded = true;\r\n}\r\n\r\n// call <callba ck> when we ensure all imports have loaded\r\nfunction watchImportsLoad(callback , doc) {\r\n var imports = doc.querySelectorAll('link[rel=import]');\r\n var l oaded = 0, l = imports.length;\r\n function checkDone(d) { \r\n if (loaded = = l) {\r\n callback && callback();\r\n }\r\n }\r\n function loadedImpo rt(e) {\r\n markTargetLoaded(e);\r\n loaded++;\r\n checkDone();\r\n }\ r\n if (l) {\r\n for (var i=0, imp; (i<l) && (imp=imports[i]); i++) {\r\n if (isImportLoaded(imp)) {\r\n loadedImport.call(imp, {target: imp});\ r\n } else {\r\n imp.addEventListener('load', loadedImport);\r\n imp.addEventListener('error', loadedImport);\r\n }\r\n }\r\n } else {\r\n checkDone();\r\n }\r\n}\r\n\r\n// NOTE: test for native imports loadi ng is based on explicitly watching\r\n// all imports (see below).\r\nfunction is ImportLoaded(link) {\r\n return useNative ? link.__loaded : link.__importParsed ;\r\n}\r\n\r\n// TODO(sorvell): Workaround for \r\n// https://www.w3.org/Bugs/Pu blic/show_bug.cgi?id=25007, should be removed when\r\n// this bug is addressed.\ r\n// (1) Install a mutation observer to see when HTMLImports have loaded\r\n// (2) if this script is run during document load it will watch any existing\r\n// imports for loading.\r\n//\r\n// NOTE: The workaround has restricted functionali ty: (1) it's only compatible\r\n// with imports that are added to document.head since the mutation observer \r\n// watches only head for perf reasons, (2) it re quires this script\r\n// to run before any imports have completed loading.\r\nif (useNative) {\r\n new MutationObserver(function(mxns) {\r\n for (var i=0, l =mxns.length, m; (i < l) && (m=mxns[i]); i++) {\r\n if (m.addedNodes) {\r\n handleImports(m.addedNodes);\r\n }\r\n }\r\n }).observe(documen t.head, {childList: true});\r\n\r\n function handleImports(nodes) {\r\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\r\n if (isImport (n)) {\r\n handleImport(n); \r\n }\r\n }\r\n }\r\n\r\n functio n isImport(element) {\r\n return element.localName === 'link' && element.rel === 'import';\r\n }\r\n\r\n function handleImport(element) {\r\n var loaded = element.import;\r\n if (loaded) {\r\n markTargetLoaded({target: eleme nt});\r\n } else {\r\n element.addEventListener('load', markTargetLoaded );\r\n element.addEventListener('error', markTargetLoaded);\r\n }\r\n } \r\n\r\n // make sure to catch any imports that are in the process of loading\r \n // when this script is run.\r\n (function() {\r\n if (document.readyStat e === 'loading') {\r\n var imports = document.querySelectorAll('link[rel=im port]');\r\n for (var i=0, l=imports.length, imp; (i<l) && (imp=imports[i]) ; i++) {\r\n handleImport(imp);\r\n }\r\n }\r\n })();\r\n\r\n}\r \n\r\n// Fire the 'HTMLImportsLoaded' event when imports in document at load tim e \r\n// have loaded. This event is required to simulate the script blocking \r\ n// behavior of native imports. A main document script that needs to be sure\r\n // imports have loaded should wait for this event.\r\nwhenImportsReady(function( ) {\r\n HTMLImports.ready = true;\r\n HTMLImports.readyTime = new Date().getTi me();\r\n mainDoc.dispatchEvent(\r\n new CustomEvent('HTMLImportsLoaded', {b ubbles: true})\r\n );\r\n});\r\n\r\n// exports\r\nscope.useNative = useNative;\ r\nscope.isImportLoaded = isImportLoaded;\r\nscope.whenReady = whenImportsReady; \r\nscope.isIE = isIE;\r\n\r\n// deprecated\r\nscope.whenImportsReady = whenImpo rtsReady;\r\n\r\n})(window.HTMLImports);\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the B SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t xt\n * Code distributed by Google as part of the polymer project is also\n * sub ject to an additional IP rights grant found at http://polymer.github.io/PATENTS. txt\n */\n\n(function(scope) {\n\n function withDependencies(task, depends) {\n depends = depends || [];\n if (!depends.map) {\n depends = [depends] ;\n }\n return task.apply(this, depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, moduleFactory) {\n var module;\n switch (ar guments.length) {\n case 0:\n return;\n case 1:\n module = null;\n break;\n case 2:\n // dependsOrFactory is `factory ` in this case\n module = dependsOrFactory.apply(this);\n break;\n default:\n // dependsOrFactory is `depends` in this case\n m odule = withDependencies(moduleFactory, dependsOrFactory);\n break;\n }\n modules[name] = module;\n };\n\n function marshal(name) {\n return m odules[name];\n }\n\n var modules = {};\n\n function using(depends, task) {\n HTMLImports.whenImportsReady(function() {\n withDependencies(task, depe nds);\n });\n };\n\n // exports\n\n scope.marshal = marshal;\n // `module ` confuses commonjs detectors\n scope.modularize = module;\n scope.using = usi ng;\n\n})(window);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license fou nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu ted by Google as part of the polymer project is also\n * subject to an additiona l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functio n(scope) {\n\n // TODO(sorvell): It's desireable to provide a default styleshee t \n // that's convenient for styling unresolved elements, but\n // it's cumbe rsome to have to include this manually in every page.\n // It would make sense to put inside some HTMLImport but \n // the HTMLImports polyfill does not allow loading of stylesheets \n // that block rendering. Therefore this injection is tolerated here.\n var style = document.createElement('style');\n style.textCo ntent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden;' \n + ' } \\n'\n ;\n var head = document.querySele ctor('head');\n head.insertBefore(style, head.firstChild);\n\n})(Platform);\n\n // Copyright 2012 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www. apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agr eed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either exp ress or implied.\n// See the License for the specific language governing permiss ions and\n// limitations under the License.\n\n(function(global) {\n 'use stric t';\n\n var testingExposeCycleCount = global.testingExposeCycleCount;\n\n // D etect and do basic sanity checking on Object/Array.observe.\n function detectOb jectObserve() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n return false;\n }\n\n var records = [];\n\n function callback(recs) {\n records = recs;\n }\n\n var test = {};\n var arr = [];\n Object.observe(test, callback);\n Array.ob serve(arr, callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliverChangeRecords(call back);\n if (records.length !== 5)\n return false;\n\n if (records[0] .type != 'add' ||\n records[1].type != 'update' ||\n records[2].ty pe != 'delete' ||\n records[3].type != 'splice' ||\n records[4].ty pe != 'splice') {\n return false;\n }\n\n Object.unobserve(test, call back);\n Array.unobserve(arr, callback);\n\n return true;\n }\n\n var ha sObserve = detectObjectObserve();\n\n function detectEval() {\n // Don't tes t for eval if we're running in a Chrome App environment.\n // We check for AP Is set that only exist in a Chrome App context.\n if (typeof chrome !== 'unde fined' && chrome.app && chrome.app.runtime) {\n return false;\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very hacky\n // but even if some other platform adds support for this function this code\n // will continue to work.\n if (navigator.getDeviceStorage) {\n return false;\n }\n\n try {\n var f = new Function('', 'return true;');\n return f();\n } catch (ex) {\n return false;\n }\n }\n\n var ha sEval = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n }\n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) { \n return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNa N || function(value) {\n return typeof value === 'number' && global.isNaN(val ue);\n }\n\n function areSameValue(left, right) {\n if (left === right)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && n umberIsNaN(right))\n return true;\n\n return left !== left && right !== right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { r eturn obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.defin eProperty(newObject, name,\n Object.getOwnPropertyDe scriptor(obj, name));\n });\n return newObject;\n };\n\n var ident Start = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp = new RegExp('^' + identStart + '+' + identPart + '*' + '$');\n\n function get PathCharType(char) {\n if (char === undefined)\n return 'eof';\n\n va r code = char.charCodeAt(0);\n\n switch(code) {\n case 0x5B: // [\n case 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27 : // '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n return 'ws';\n }\n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x 7A) || (0x41 <= code && code <= 0x5A))\n return 'ident';\n\n // 1-9\n if (0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else'; \n }\n\n var pathStateMachine = {\n 'beforePath': {\n 'ws': ['beforePa th'],\n 'ident': ['inIdent', 'append'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n '.': ['beforeIdent'],\n '[': ['beforeElement'],\n 'eof': ['afterPat h']\n },\n\n 'beforeIdent': {\n 'ws': ['beforeIdent'],\n 'ident' : ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'append'],\n '0': ['inIdent', 'append'],\n 'number': ['inIdent', 'appe nd'],\n 'ws': ['inPath', 'push'],\n '.': ['beforeIdent', 'push'],\n '[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n \n 'beforeElement': {\n 'ws': ['beforeElement'],\n '0': ['afterZero ', 'append'],\n 'number': ['inIndex', 'append'],\n \"'\": ['inSingleQu ote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'afterZero': {\n 'ws': ['afterElement', 'push'],\n ']': ['inPath', 'p ush']\n },\n\n 'inIndex': {\n '0': ['inIndex', 'append'],\n 'num ber': ['inIndex', 'append'],\n 'ws': ['afterElement'],\n ']': ['inPath ', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n 'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n 'else': ['inDoubleQuote', 'append']\n },\n\n 'afterElement': {\n 'w s': ['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function n oop() {}\n\n function parsePath(path) {\n var keys = [];\n var index = -1 ;\n var c, newChar, key, type, transition, action, typeMap, mode = 'beforePat h';\n\n var actions = {\n push: function() {\n if (key === undefi ned)\n return;\n\n keys.push(key);\n key = undefined;\n },\n\n append: function() {\n if (key === undefined)\n key = newChar\n else\n key += newChar;\n }\n };\n\n f unction maybeUnescapeQuote() {\n if (index >= path.length)\n return; \n\n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\n index++;\n newChar = nextChar;\n actions.append();\n return true;\n }\n }\n\n while (mode) {\n index++;\n c = path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n continue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[ mode];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if (transition == 'error')\n return; // parse error;\n\n mode = tra nsition[0];\n action = actions[transition[1]] || noop;\n newChar = tra nsition[2] === undefined ? c : transition[2];\n action();\n\n if (mode === 'afterPath') {\n return keys;\n }\n }\n\n return; // pars e error\n }\n\n function isIdent(s) {\n return identRegExp.test(s);\n }\n\ n var constructorIsPrivate = {};\n\n function Path(parts, privateToken) {\n if (privateToken !== constructorIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\n\n for (var i = 0; i < parts.length; i++) {\n this.push(String(parts[i]));\n }\n\n if (hasEval && this.length) {\n this.getValueFrom = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafa elw): Make simple LRU cache\n var pathCache = {};\n\n function getPath(pathStr ing) {\n if (pathString instanceof Path)\n return pathString;\n\n if (pathString == null || pathString.length == 0)\n pathString = '';\n\n if (typeof pathString != 'string') {\n if (isIndex(pathString.length)) {\n // Constructed with array-like (pre-parsed) keys\n return new Path(p athString, constructorIsPrivate);\n }\n\n pathString = String(pathStri ng);\n }\n\n var path = pathCache[pathString];\n if (path)\n retur n path;\n\n var parts = parsePath(pathString);\n if (!parts)\n return invalidPath;\n\n var path = new Path(parts, constructorIsPrivate);\n path Cache[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n f unction formatAccessor(key) {\n if (isIndex(key)) {\n return '[' + key + ']';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\ n }\n }\n\n Path.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toString: function() {\n var pathString = '';\n for (var i = 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent (key)) {\n pathString += i ? '.' + key : key;\n } else {\n pathString += formatAccessor(key);\n }\n }\n\n return pathS tring;\n },\n\n getValueFrom: function(obj, directObserver) {\n for ( var i = 0; i < this.length; i++) {\n if (obj == null)\n return;\ n obj = obj[this[i]];\n }\n return obj;\n },\n\n iterateO bjects: function(obj, observe) {\n for (var i = 0; i < this.length; i++) {\ n if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\ n return;\n observe(obj, this[0]);\n }\n },\n\n compi ledGetValueFromFn: function() {\n var str = '';\n var pathString = 'ob j';\n str += 'if (obj != null';\n var i = 0;\n var key;\n fo r (; i < (this.length - 1); i++) {\n key = this[i];\n pathString + = isIdent(key) ? '.' + key : formatAccessor(key);\n str += ' &&\\n ' + pathString + ' != null';\n }\n str += ')\\n';\n\n var key = thi s[i];\n pathString += isIdent(key) ? '.' + key : formatAccessor(key);\n\n str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n r eturn new Function('obj', str);\n },\n\n setValueFrom: function(obj, value ) {\n if (!this.length)\n return false;\n\n for (var i = 0; i < this.length - 1; i++) {\n if (!isObject(obj))\n return false;\n obj = obj[this[i]];\n }\n\n if (!isObject(obj))\n retur n false;\n\n obj[this[i]] = value;\n return true;\n }\n });\n\n v ar invalidPath = new Path('', constructorIsPrivate);\n invalidPath.valid = fals e;\n invalidPath.getValueFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) { \n cycles++;\n }\n if (testingExposeCycleCount)\n global.dirtyCh eckCycleCount = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmp ty(object) {\n for (var prop in object)\n return false;\n return true ;\n }\n\n function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) & &\n objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.chan ged);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var a dded = {};\n var removed = {};\n var changed = {};\n\n for (var prop in oldObject) {\n var newValue = object[prop];\n\n if (newValue !== unde fined && newValue === oldObject[prop])\n continue;\n\n if (!(prop in object)) {\n removed[prop] = undefined;\n continue;\n }\n\n if (newValue !== oldObject[prop])\n changed[prop] = newValue;\n } \n\n for (var prop in object) {\n if (prop in oldObject)\n contin ue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== oldObject.length)\n changed.length = object.length;\n \n return {\n added: added,\n removed: removed,\n changed: cha nged\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (! eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length ; i++) {\n eomTasks[i]();\n }\n eomTasks.length = 0;\n return true ;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRunScheduled = false;\n\n Object.observe(eomObj, functio n() {\n runEOMTasks();\n eomRunScheduled = false;\n });\n\n retu rn function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = true;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n (function() {\n return function(fn) {\n eomTasks. push(fn);\n };\n })();\n\n var observedObjectCache = [];\n\n function newO bservedObject() {\n var observer;\n var object;\n var discardRecords = false;\n var first = true;\n\n function callback(records) {\n if (obs erver && observer.state_ === OPENED && !discardRecords)\n observer.check_ (records);\n }\n\n return {\n open: function(obs) {\n if (obse rver)\n throw Error('ObservedObject in use');\n\n if (!first)\n Object.deliverChangeRecords(callback);\n\n observer = obs;\n first = false;\n },\n observe: function(obj, arrayObserve) {\n object = obj;\n if (arrayObserve)\n Array.observe(object, ca llback);\n else\n Object.observe(object, callback);\n },\n deliver: function(discard) {\n discardRecords = discard;\n Ob ject.deliverChangeRecords(callback);\n discardRecords = false;\n },\ n close: function() {\n observer = undefined;\n Object.unobse rve(object, callback);\n observedObjectCache.push(this);\n }\n }; \n }\n\n /*\n * The observedSet abstraction is a perf optimization which red uces the total\n * number of Object.observe observations of a set of objects. The idea is that\n * groups of Observers will have some object dependencies in common and this\n * observed set ensures that each object in the transitive c losure of\n * dependencies is only observed once. The observedSet acts as a wr ite barrier\n * such that whenever any change comes through, all Observers are checked for\n * changed values.\n *\n * Note that this optimization is ex plicitly moving work from setup-time to\n * change-time.\n *\n * TODO(rafa elw): Implement \"garbage collection\". In order to move work off\n * the crit ical path, when Observers are closed, their observed objects are\n * not Objec t.unobserve(d). As a result, it's possible that if the observedSet\n * is kept open, but some Observers have been closed, it could cause \"leaks\"\n * (prev ent otherwise collectable objects from being collected). At some\n * point, we should implement incremental \"gc\" which keeps a list of\n * observedSets wh ich may need clean-up and does small amounts of cleanup on a\n * timeout until all is clean.\n */\n\n function getObservedObject(observer, object, arrayObs erve) {\n var dir = observedObjectCache.pop() || newObservedObject();\n di r.open(observer);\n dir.observe(object, arrayObserve);\n return dir;\n }\ n\n var observedSetCache = [];\n\n function newObservedSet() {\n var observ erCount = 0;\n var observers = [];\n var objects = [];\n var rootObj;\n var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n return;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n \n if (objects.indexOf(obj) < 0) {\n objects.push(obj);\n Obj ect.observe(obj, callback);\n }\n\n observe(Object.getPrototypeOf(obj) , prop);\n }\n\n function allRootObjNonObservedProps(recs) {\n for (v ar i = 0; i < recs.length; i++) {\n var rec = recs[i];\n if (rec.o bject !== rootObj ||\n rootObjProps[rec.name] ||\n rec.typ e === 'setPrototype') {\n return false;\n }\n }\n retu rn true;\n }\n\n function callback(recs) {\n if (allRootObjNonObserve dProps(recs))\n return;\n\n var observer;\n for (var i = 0; i < observers.length; i++) {\n observer = observers[i];\n if (observe r.state_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n }\n\n for (var i = 0; i < observers.length; i++) {\n observer = observers[i];\n if (observer.state_ == OPENED) {\n observer.ch eck_();\n }\n }\n }\n\n var record = {\n object: undefine d,\n objects: objects,\n open: function(obs, object) {\n if (!r ootObj) {\n rootObj = object;\n rootObjProps = {};\n }\ n\n observers.push(obs);\n observerCount++;\n obs.iterateOb jects_(observe);\n },\n close: function(obs) {\n observerCount- -;\n if (observerCount > 0) {\n return;\n }\n\n fo r (var i = 0; i < objects.length; i++) {\n Object.unobserve(objects[i], callback);\n Observer.unobservedCount++;\n }\n\n observe rs.length = 0;\n objects.length = 0;\n rootObj = undefined;\n rootObjProps = undefined;\n observedSetCache.push(this);\n }\n };\n\n return record;\n }\n\n var lastObservedSet;\n\n function getObserv edSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== o bj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj); \n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directO bserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserver Id++;\n }\n\n Observer.prototype = {\n open: function(callback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Observer has already be en opened.');\n\n addToAll(this);\n this.callback_ = callback;\n this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\n return this.value_;\n },\n\n close: function() {\n if (this.state_ != OPENED)\n return;\n\n removeFromAll(this);\n this.disconnec t_();\n this.value_ = undefined;\n this.callback_ = undefined;\n this.target_ = undefined;\n this.state_ = CLOSED;\n },\n\n deliver: f unction() {\n if (this.state_ != OPENED)\n return;\n\n dirtyChe ck(this);\n },\n\n report_: function(changes) {\n try {\n this .callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer ._errorThrownDuringCallback = true;\n console.error('Exception caught dur ing observer callback: ' +\n (ex.stack || ex));\n }\n },\n\n discardChanges: function() {\n this.check_(undefined, true);\ n return this.value_;\n }\n }\n\n var collectObservers = !hasObserve;\ n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObserve rs) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Obser ver._allObserversCount++;\n if (!collectObservers)\n return;\n\n allO bservers.push(observer);\n }\n\n function removeFromAll(observer) {\n Obser ver._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n var hasDebugForceFullDelivery = hasObserve && hasEval && (function() {\n try {\n eval('%RunMicrotasks()');\n return true;\n } catch (ex) {\n return false;\n }\n })();\n\n global.Platform = global.Platform || {};\n \n global.Platform.performMicrotaskCheckpoint = function() {\n if (runningMi crotaskCheckpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n eval('%RunMicrotasks()');\n return;\n }\n\n if (!collectObservers)\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allOb servers;\n allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n i f (observer.state_ != OPENED)\n continue;\n\n if (observer.check _())\n anyChanged = true;\n\n allObservers.push(observer);\n }\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = fal se;\n };\n\n if (collectObservers) {\n global.Platform.clearObservers = fun ction() {\n allObservers = [];\n };\n }\n\n function ObjectObserver(ob ject) {\n Observer.call(this);\n this.value_ = object;\n this.oldObject _ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __proto_ _: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: function(cal lback, target) {\n if (hasObserve) {\n this.directObserver_ = getObs ervedObject(this, this.value_,\n this.arrayObserve);\n } else {\n this.oldObject_ = this.copyObject( this.value_);\n }\n\n },\n\n copyObject: function(object) {\n va r copy = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n copy.length = object.length;\n return copy;\n },\n\n check_: fun ction(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, ch angeRecords,\n oldValues);\n } el se {\n oldValues = this.oldObject_;\n diff = diffObjectFromOldObje ct(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return false;\n\n if (!hasObserve)\n this.oldObject_ = this.copy Object(this.value_);\n\n this.report_([\n diff.added || {},\n diff.removed || {},\n diff.changed || {},\n function(property) {\ n return oldValues[property];\n }\n ]);\n\n return tru e;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n th is.directObserver_.close();\n this.directObserver_ = undefined;\n } else {\n this.oldObject_ = undefined;\n }\n },\n\n deliver: fu nction() {\n if (this.state_ != OPENED)\n return;\n\n if (hasOb serve)\n this.directObserver_.deliver(false);\n else\n dirtyC heck(this);\n },\n\n discardChanges: function() {\n if (this.directOb server_)\n this.directObserver_.deliver(true);\n else\n this. oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n });\n\n function ArrayObserver(array) {\n if (!Array.isArray(array))\n throw Error('Provided object is not an Array');\n ObjectObserver.call(this, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: Ob jectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: function(a rr) {\n return arr.slice();\n },\n\n check_: function(changeRecords) {\n var splices;\n if (hasObserve) {\n if (!changeRecords)\n return false;\n splices = projectArraySplices(this.value_, changeR ecords);\n } else {\n splices = calcSplices(this.value_, 0, this.val ue_.length,\n this.oldObject_, 0, this.oldObject_.l ength);\n }\n\n if (!splices || !splices.length)\n return false ;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.valu e_);\n\n this.report_([splices]);\n return true;\n }\n });\n\n Ar rayObserver.applySplices = function(previous, current, splices) {\n splices.f orEach(function(splice) {\n var spliceArgs = [splice.index, splice.removed. length];\n var addIndex = splice.index;\n while (addIndex < splice.ind ex + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceArgs) ;\n });\n };\n\n function PathObserver(object, path) {\n Observer.call(t his);\n\n this.object_ = object;\n this.path_ = getPath(path);\n this.d irectObserver_ = undefined;\n }\n\n PathObserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n get path() {\n return this.path_;\ n },\n\n connect_: function() {\n if (hasObserve)\n this.direc tObserver_ = getObservedSet(this, this.object_);\n\n this.check_(undefined, true);\n },\n\n disconnect_: function() {\n this.value_ = undefined; \n\n if (this.directObserver_) {\n this.directObserver_.close(this); \n this.directObserver_ = undefined;\n }\n },\n\n iterateObjec ts_: function(observe) {\n this.path_.iterateObjects(this.object_, observe) ;\n },\n\n check_: function(changeRecords, skipChanges) {\n var oldVa lue = this.value_;\n this.value_ = this.path_.getValueFrom(this.object_);\n if (skipChanges || areSameValue(this.value_, oldValue))\n return fa lse;\n\n this.report_([this.value_, oldValue, this]);\n return true;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n thi s.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n function Compou ndObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n this.reportCh angesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.directObser ver_ = undefined;\n this.observed_ = [];\n }\n\n var observerSentinel = {}; \n\n CompoundObserver.prototype = createObject({\n __proto__: Observer.proto type,\n\n connect_: function() {\n if (hasObserve) {\n var object ;\n var needsDirectObserver = false;\n for (var i = 0; i < this.ob served_.length; i += 2) {\n object = this.observed_[i]\n if (o bject !== observerSentinel) {\n needsDirectObserver = true;\n break;\n }\n }\n\n if (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, object);\n }\n\n this.ch eck_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: functio n() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n if (t his.observed_[i] === observerSentinel)\n this.observed_[i + 1].close(); \n }\n this.observed_.length = 0;\n this.value_.length = 0;\n\n if (this.directObserver_) {\n this.directObserver_.close(this);\n this.directObserver_ = undefined;\n }\n },\n\n addPath: function( object, path) {\n if (this.state_ != UNOPENED && this.state_ != RESETTING)\ n throw Error('Cannot add paths once started.');\n\n var path = getP ath(path);\n this.observed_.push(object, path);\n if (!this.reportChan gesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1;\n this.value_[index] = path.getValueFrom(object);\n },\n\n addObserver : function(observer) {\n if (this.state_ != UNOPENED && this.state_ != RESE TTING)\n throw Error('Cannot add observers once started.');\n\n this .observed_.push(observerSentinel, observer);\n if (!this.reportChangesOnOpe n_)\n return;\n var index = this.observed_.length / 2 - 1;\n th is.value_[index] = observer.open(this.deliver, this);\n },\n\n startReset: function() {\n if (this.state_ != OPENED)\n throw Error('Can only r eset while open');\n\n this.state_ = RESETTING;\n this.disconnect_();\ n },\n\n finishReset: function() {\n if (this.state_ != RESETTING)\n throw Error('Can only finishReset after startReset');\n this.state_ = OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n it erateObjects_: function(observe) {\n var object;\n for (var i = 0; i < this.observed_.length; i += 2) {\n object = this.observed_[i]\n i f (object !== observerSentinel)\n this.observed_[i + 1].iterateObjects( object, observe)\n }\n },\n\n check_: function(changeRecords, skipCha nges) {\n var oldValues;\n for (var i = 0; i < this.observed_.length; i += 2) {\n var object = this.observed_[i];\n var path = this.obse rved_[i+1];\n var value;\n if (object === observerSentinel) {\n var observable = path;\n value = this.state_ === UNOPENED ?\n observable.open(this.deliver, this) :\n observable.disca rdChanges();\n } else {\n value = path.getValueFrom(object);\n }\n\n if (skipChanges) {\n this.value_[i / 2] = value;\n continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n continue;\n\n oldValues = oldValues || [];\n oldVa lues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\ n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Havin g observed_ as the third callback arg here is\n // pretty lame API. Fix.\n this.report_([this.value_, oldValues, this.observed_]);\n return true; \n }\n });\n\n function identFn(value) { return value; }\n\n function Obse rverTransform(observable, getValueFn, setValueFn,\n dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = undef ined;\n this.value_ = undefined;\n this.observable_ = observable;\n thi s.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || ide ntFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions needs this\n // at the moment because of a bug in it's dependency tracking.\n th is.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prototy pe = {\n open: function(callback, target) {\n this.callback_ = callback; \n this.target_ = target;\n this.value_ =\n this.getValueFn_( this.observable_.open(this.observedCallback_, this));\n return this.value_; \n },\n\n observedCallback_: function(value) {\n value = this.getValu eFn_(value);\n if (areSameValue(value, this.value_))\n return;\n var oldValue = this.value_;\n this.value_ = value;\n this.callback_. call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: functi on() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges()); \n return this.value_;\n },\n\n deliver: function() {\n return t his.observable_.deliver();\n },\n\n setValue: function(value) {\n val ue = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.obser vable_.setValue)\n return this.observable_.setValue(value);\n },\n\n close: function() {\n if (this.observable_)\n this.observable_.clo se();\n this.callback_ = undefined;\n this.target_ = undefined;\n this.observable_ = undefined;\n this.value_ = undefined;\n this.getVa lueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var ex pectedRecordTypes = {\n add: true,\n update: true,\n delete: true\n }; \n\n function diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i < changeReco rds.length; i++) {\n var record = changeRecords[i];\n if (!expectedRec ordTypes[record.type]) {\n console.error('Unknown changeRecord type: ' + record.type);\n console.error(record);\n continue;\n }\n\n if (!(record.name in oldValues))\n oldValues[record.name] = record.old Value;\n\n if (record.type == 'update')\n continue;\n\n if (rec ord.type == 'add') {\n if (record.name in removed)\n delete remo ved[record.name];\n else\n added[record.name] = true;\n\n continue;\n }\n\n // type = 'delete'\n if (record.name in added) {\n delete added[record.name];\n delete oldValues[record.name];\n } else {\n removed[record.name] = true;\n }\n }\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (var prop in r emoved)\n removed[prop] = undefined;\n\n var changed = {};\n for (var prop in oldValues) {\n if (prop in added || prop in removed)\n cont inue;\n\n var newValue = object[prop];\n if (oldValues[prop] !== newVa lue)\n changed[prop] = newValue;\n }\n\n return {\n added: add ed,\n removed: removed,\n changed: changed\n };\n }\n\n function newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n var EDIT_LEA VE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\n\n function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n // Note: This function is *based* on the computation of the Levenshtein\n // \"edit\" dista nce. The one change is that \"updates\" are treated as two\n // edits - not o ne. With Array splices, an update is really a delete\n // followed by an add. By retaining this, we optimize for \"keeping\" the\n // maximum array items in the original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\n //\n // With 1-edit updates, the shortest path would be just to update all seven\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the substring '123' intact.\n calcEditDistances: function (current, currentStart, currentEnd,\n old, oldSta rt, oldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - oldS tart + 1;\n var columnCount = currentEnd - currentStart + 1;\n var dis tances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null col umn.\n for (var i = 0; i < rowCount; i++) {\n distances[i] = new Arr ay(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize n ull row\n for (var j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (var i = 1; i < rowCount; i++) {\n for (var j = 1; j < co lumnCount; j++) {\n if (this.equals(current[currentStart + j - 1], old[ oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n var west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? n orth : west;\n }\n }\n }\n\n return distances;\n }, \n\n // This starts at the final weight, and walks \"backward\" by finding\n // the minimum previous weight recursively until the origin of the weight\n // matrix.\n spliceOperationsFromEditDistances: function(distances) {\n var i = distances.length - 1;\n var j = distances[0].length - 1;\n v ar current = distances[i][j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_D ELETE);\n i--;\n continue;\n }\n var northWest = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n var north = distances[i][j - 1];\n\n var min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWes t;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west ;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edi ts;\n },\n\n /**\n * Splice Projection functions:\n *\n * A sp lice map is a representation of how a previous array of items\n * was transf ormed into a new array of items. Conceptually it is a list of\n * tuples of\ n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |re moved| sequence of items were removed, and counting forward\n * from |index| , |addedCount| items were added.\n */\n\n /**\n * Lacking individual splice mutation information, the minimal set of\n * splices can be synthesiz ed given the previous state and final state of an\n * array. The basic appro ach is to calculate the edit distance matrix and\n * choose the shortest pat h through it.\n *\n * Complexity: O(l * p)\n * l: The length of th e current array\n * p: The length of the old array\n */\n calcSplic es: function(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = this.sharedPr efix(current, old, minLength);\n\n if (currentEnd == current.length && oldE nd == old.length)\n suffixCount = this.sharedSuffix(current, old, minLeng th - prefixCount);\n\n currentStart += prefixCount;\n oldStart += pref ixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentStart == currentEnd) {\n var splice = newSplice(c urrentStart, [], 0);\n while (oldStart < oldEnd)\n splice.remove d.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStar t == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentS tart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n t his.calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n var splice = undefined;\n var splices = [];\n var index = currentStart;\n var oldIndex = oldStart;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice );\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(o ld[oldIndex]);\n oldIndex++;\n break;\n case EDIT _ADD:\n if (!splice)\n splice = newSplice(index, [], 0); \n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice)\n splice = ne wSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n },\n\n sharedPrefix: function(current, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n ret urn i;\n return searchLength;\n },\n\n sharedSuffix: function(current , old, searchLength) {\n var index1 = current.length;\n var index2 = o ld.length;\n var count = 0;\n while (count < searchLength && this.equa ls(current[--index1], old[--index2]))\n count++;\n\n return count;\n },\n\n calculateSplices: function(current, previous) {\n return this .calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n },\n\n equals: function(currentValue, previousVal ue) {\n return currentValue === previousValue;\n }\n };\n\n var arrayS plice = new ArraySplice();\n\n function calcSplices(current, currentStart, curr entEnd,\n old, oldStart, oldEnd) {\n return arraySplice .calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, start2, e nd2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n return - 1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n return 0 ;\n\n // Non-zero intersect, span1 first\n if (start1 < start2) {\n i f (end1 < end2)\n return end1 - start2; // Overlap\n else\n r eturn end2 - start2; // Contained\n } else {\n // Non-zero intersect, sp an2 first\n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n function me rgeSplice(splices, index, removed, addedCount) {\n\n var splice = newSplice(i ndex, removed, addedCount);\n\n var inserted = false;\n var insertionOffse t = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var current = sp lices[i];\n current.index += insertionOffset;\n\n if (inserted)\n continue;\n\n var intersectCount = intersect(splice.index,\n splice.index + splice.removed.length,\n current.index,\n curren t.index + current.addedCount);\n\n if (intersectCount >= 0) {\n // M erge the two splices\n\n splices.splice(i, 1);\n i--;\n\n i nsertionOffset -= current.addedCount - current.removed.length;\n\n splice .addedCount += current.addedCount - intersectCount;\n var deleteCount = s plice.removed.length +\n current.removed.length - inter sectCount;\n\n if (!splice.addedCount && !deleteCount) {\n // me rged splice is a noop. discard.\n inserted = true;\n } else {\n var removed = current.removed;\n\n if (splice.index < current. index) {\n // some prefix of splice.removed is prepended to current.r emoved.\n var prepend = splice.removed.slice(0, current.index - splic e.index);\n Array.prototype.push.apply(prepend, removed);\n removed = prepend;\n }\n\n if (splice.index + splice.removed .length > current.index + current.addedCount) {\n // some suffix of s plice.removed is appended to current.removed.\n var append = splice.r emoved.slice(current.index + current.addedCount - splice.index);\n Ar ray.prototype.push.apply(removed, append);\n }\n\n splice.remo ved = removed;\n if (current.index < splice.index) {\n splic e.index = current.index;\n }\n }\n } else if (splice.index < current.index) {\n // Insert splice here.\n\n inserted = true;\n \n splices.splice(i, 0, splice);\n i++;\n\n var offset = sp lice.addedCount - splice.removed.length\n current.index += offset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\n splic es.push(splice);\n }\n\n function createInitialSplices(array, changeRecords) { \n var splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\ n var record = changeRecords[i];\n switch(record.type) {\n case 'splice':\n mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);\n break;\n case 'add':\n case 'updat e':\n case 'delete':\n if (!isIndex(record.name))\n c ontinue;\n var index = toNumber(record.name);\n if (index < 0) \n continue;\n mergeSplice(splices, index, [record.oldValue] , 1);\n break;\n default:\n console.error('Unexpected r ecord type: ' + JSON.stringify(record));\n break;\n }\n }\n\n return splices;\n }\n\n function projectArraySplices(array, changeRecords) { \n var splices = [];\n\n createInitialSplices(array, changeRecords).forEac h(function(splice) {\n if (splice.addedCount == 1 && splice.removed.length == 1) {\n if (splice.removed[0] !== array[splice.index])\n splic es.push(splice);\n\n return\n };\n\n splices = splices.concat(c alcSplices(array, splice.index, splice.index + splice.addedCount,\n splice.removed, 0, splice.removed.length));\n } );\n\n return splices;\n }\n\n global.Observer = Observer;\n global.Observ er.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerSentinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n global.ArrayO bserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function(cur rent, previous) {\n return arraySplice.calculateSplices(current, previous);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = ObjectObs erver;\n global.PathObserver = PathObserver;\n global.CompoundObserver = Compo undObserver;\n global.Path = Path;\n global.ObserverTransform = ObserverTransf orm;\n})(typeof global !== 'undefined' && global && typeof module !== 'undefined ' && module ? global : this || window);\n\n// Copyright (c) 2014 The Polymer Pro ject Authors. All rights reserved.\n// This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n// The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n// The complet e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\ n// Code distributed by Google as part of the polymer project is also\n// subjec t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt \n\n(function(global) {\n 'use strict';\n\n var filter = Array.prototype.filte r.call.bind(Array.prototype.filter);\n\n function getTreeScope(node) {\n whi le (node.parentNode) {\n node = node.parentNode;\n }\n\n return typeo f node.getElementById === 'function' ? node : null;\n }\n\n Node.prototype.bin d = function(name, observable) {\n console.error('Unhandled binding to Node: ', this, name, observable);\n };\n\n Node.prototype.bindFinished = function() {};\n\n function updateBindings(node, name, binding) {\n var bindings = node .bindings_;\n if (!bindings)\n bindings = node.bindings_ = {};\n\n if (bindings[name])\n binding[name].close();\n\n return bindings[name] = b inding;\n }\n\n function returnBinding(node, name, binding) {\n return bind ing;\n }\n\n function sanitizeValue(value) {\n return value == null ? '' : value;\n }\n\n function updateText(node, value) {\n node.data = sanitizeVal ue(value);\n }\n\n function textBinding(node) {\n return function(value) {\ n return updateText(node, value);\n };\n }\n\n var maybeUpdateBindings = returnBinding;\n\n Object.defineProperty(Platform, 'enableBindingsReflection ', {\n get: function() {\n return maybeUpdateBindings === updateBindings ;\n },\n set: function(enable) {\n maybeUpdateBindings = enable ? upd ateBindings : returnBinding;\n return enable;\n },\n configurable: tr ue\n });\n\n Text.prototype.bind = function(name, value, oneTime) {\n if (n ame !== 'textContent')\n return Node.prototype.bind.call(this, name, value, oneTime);\n\n if (oneTime)\n return updateText(this, value);\n\n var observable = value;\n updateText(this, observable.open(textBinding(this)));\ n return maybeUpdateBindings(this, name, observable);\n }\n\n function upda teAttribute(el, name, conditional, value) {\n if (conditional) {\n if (v alue)\n el.setAttribute(name, '');\n else\n el.removeAttribut e(name);\n return;\n }\n\n el.setAttribute(name, sanitizeValue(value) );\n }\n\n function attributeBinding(el, name, conditional) {\n return func tion(value) {\n updateAttribute(el, name, conditional, value);\n };\n } \n\n Element.prototype.bind = function(name, value, oneTime) {\n var conditi onal = name[name.length - 1] == '?';\n if (conditional) {\n this.removeA ttribute(name);\n name = name.slice(0, -1);\n }\n\n if (oneTime)\n return updateAttribute(this, name, conditional, value);\n\n\n var observab le = value;\n updateAttribute(this, name, conditional,\n observable.op en(attributeBinding(this, name, conditional)));\n\n return maybeUpdateBinding s(this, name, observable);\n };\n\n var checkboxEventType;\n (function() {\n // Attempt to feature-detect which event (change or click) is fired first\n // for checkboxes.\n var div = document.createElement('div');\n var chec kbox = div.appendChild(document.createElement('input'));\n checkbox.setAttrib ute('type', 'checkbox');\n var first;\n var count = 0;\n checkbox.addEv entListener('click', function(e) {\n count++;\n first = first || 'clic k';\n });\n checkbox.addEventListener('change', function() {\n count+ +;\n first = first || 'change';\n });\n\n var event = document.create Event('MouseEvent');\n event.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false,\n false, false, false, 0, null);\n checkbox.dispat chEvent(event);\n // WebKit/Blink don't fire the change event if the element is outside the\n // document, so assume 'change' for that case.\n checkbox EventType = count == 1 ? 'change' : first;\n })();\n\n function getEventForInp utType(element) {\n switch (element.type) {\n case 'checkbox':\n return checkboxEventType;\n case 'radio':\n case 'select-multiple':\n case 'select-one':\n return 'change';\n case 'range':\n if (/Trident|MSIE/.test(navigator.userAgent))\n return 'change';\n default:\n return 'input';\n }\n }\n\n function updateInput(input, property, value, santizeFn) {\n input[property] = (santizeFn || sanitizeValue )(value);\n }\n\n function inputBinding(input, property, santizeFn) {\n ret urn function(value) {\n return updateInput(input, property, value, santizeF n);\n }\n }\n\n function noop() {}\n\n function bindInputEvent(input, prop erty, observable, postEventFn) {\n var eventType = getEventForInputType(input );\n\n function eventHandler() {\n observable.setValue(input[property]); \n observable.discardChanges();\n (postEventFn || noop)(input);\n Platform.performMicrotaskCheckpoint();\n }\n input.addEventListener(event Type, eventHandler);\n\n return {\n close: function() {\n input.r emoveEventListener(eventType, eventHandler);\n observable.close();\n },\n\n observable_: observable\n }\n }\n\n function booleanSanitize(v alue) {\n return Boolean(value);\n }\n\n // |element| is assumed to be an H TMLInputElement with |type| == 'radio'.\n // Returns an array containing all ra dio buttons other than |element| that\n // have the same |name|, either in the form that |element| belongs to or,\n // if no form, in the document tree to whi ch |element| belongs.\n //\n // This implementation is based upon the HTML spe c definition of a\n // \"radio button group\":\n // http://www.whatwg.org/sp ecs/web-apps/current-work/multipage/number-state.html#radio-button-group\n //\n function getAssociatedRadioButtons(element) {\n if (element.form) {\n return filter(element.form.elements, function(el) {\n return el != elemen t &&\n el.tagName == 'INPUT' &&\n el.type == 'radio' &&\n el.name == element.name;\n });\n } else {\n var treeScop e = getTreeScope(element);\n if (!treeScope)\n return [];\n var radios = treeScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + element.name + '\"]');\n return filter(radios, function(el) {\n r eturn el != element && !el.form;\n });\n }\n }\n\n function checkedPos tEvent(input) {\n // Only the radio button that is getting checked gets an ev ent. We\n // therefore find all the associated radio buttons and update their \n // check binding manually.\n if (input.tagName === 'INPUT' &&\n input.type === 'radio') {\n getAssociatedRadioButtons(input).forEach(functi on(radio) {\n var checkedBinding = radio.bindings_.checked;\n if ( checkedBinding) {\n // Set the value directly to avoid an infinite call stack.\n checkedBinding.observable_.setValue(false);\n }\n });\n }\n }\n\n HTMLInputElement.prototype.bind = function(name, value, on eTime) {\n if (name !== 'value' && name !== 'checked')\n return HTMLElem ent.prototype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute (name);\n var sanitizeFn = name == 'checked' ? booleanSanitize : sanitizeValu e;\n var postEventFn = name == 'checked' ? checkedPostEvent : noop;\n\n if (oneTime)\n return updateInput(this, name, value, sanitizeFn);\n\n\n va r observable = value;\n var binding = bindInputEvent(this, name, observable, postEventFn);\n updateInput(this, name,\n observable.open(inpu tBinding(this, name, sanitizeFn)),\n sanitizeFn);\n\n // Check boxes may need to update bindings of other checkboxes.\n return updateBinding s(this, name, binding);\n }\n\n HTMLTextAreaElement.prototype.bind = function( name, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.pro totype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute('value ');\n\n if (oneTime)\n return updateInput(this, 'value', value);\n\n var observable = value;\n var binding = bindInputEvent(this, 'value', observa ble);\n updateInput(this, 'value',\n observable.open(inputBind ing(this, 'value', sanitizeValue)));\n return maybeUpdateBindings(this, name, binding);\n }\n\n function updateOption(option, value) {\n var parentNode = option.parentNode;;\n var select;\n var selectBinding;\n var oldValue ;\n if (parentNode instanceof HTMLSelectElement &&\n parentNode.bindin gs_ &&\n parentNode.bindings_.value) {\n select = parentNode;\n selectBinding = select.bindings_.value;\n oldValue = select.value;\n }\ n\n option.value = sanitizeValue(value);\n\n if (select && select.value != oldValue) {\n selectBinding.observable_.setValue(select.value);\n sel ectBinding.observable_.discardChanges();\n Platform.performMicrotaskCheckpo int();\n }\n }\n\n function optionBinding(option) {\n return function(va lue) {\n updateOption(option, value);\n }\n }\n\n HTMLOptionElement.pr ototype.bind = function(name, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n thi s.removeAttribute('value');\n\n if (oneTime)\n return updateOption(this, value);\n\n var observable = value;\n var binding = bindInputEvent(this, 'value', observable);\n updateOption(this, observable.open(optionBinding(this )));\n return maybeUpdateBindings(this, name, binding);\n }\n\n HTMLSelectE lement.prototype.bind = function(name, value, oneTime) {\n if (name === 'sele ctedindex')\n name = 'selectedIndex';\n\n if (name !== 'selectedIndex' & & name !== 'value')\n return HTMLElement.prototype.bind.call(this, name, va lue, oneTime);\n\n this.removeAttribute(name);\n\n if (oneTime)\n ret urn updateInput(this, name, value);\n\n var observable = value;\n var bind ing = bindInputEvent(this, name, observable);\n updateInput(this, name,\n observable.open(inputBinding(this, name)));\n\n // Option update events may need to access select bindings.\n return updateBindings(this, name , binding);\n }\n})(this);\n\n// Copyright (c) 2014 The Polymer Project Authors . All rights reserved.\n// This code may only be used under the BSD style licens e found at http://polymer.github.io/LICENSE.txt\n// The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n// The complete set of con tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n// Code dis tributed by Google as part of the polymer project is also\n// subject to an addi tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n\n(functio n(global) {\n 'use strict';\n\n function assert(v) {\n if (!v)\n throw new Error('Assertion failed');\n }\n\n var forEach = Array.prototype.forEach. call.bind(Array.prototype.forEach);\n\n function getFragmentRoot(node) {\n v ar p;\n while (p = node.parentNode) {\n node = p;\n }\n\n return n ode;\n }\n\n function searchRefId(node, id) {\n if (!id)\n return;\n\n var ref;\n var selector = '#' + id;\n while (!ref) {\n node = get FragmentRoot(node);\n\n if (node.protoContent_)\n ref = node.protoCo ntent_.querySelector(selector);\n else if (node.getElementById)\n re f = node.getElementById(id);\n\n if (ref || !node.templateCreator_)\n break\n\n node = node.templateCreator_;\n }\n\n return ref;\n }\n\ n function getInstanceRoot(node) {\n while (node.parentNode) {\n node = node.parentNode;\n }\n return node.templateCreator_ ? node : null;\n }\n \n var Map;\n if (global.Map && typeof global.Map.prototype.forEach === 'funct ion') {\n Map = global.Map;\n } else {\n Map = function() {\n this.k eys = [];\n this.values = [];\n };\n\n Map.prototype = {\n set: function(key, value) {\n var index = this.keys.indexOf(key);\n if (index < 0) {\n this.keys.push(key);\n this.values.push(value) ;\n } else {\n this.values[index] = value;\n }\n },\ n\n get: function(key) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n return;\n\n return this.values[index];\n },\n\n delete: function(key, value) {\n var index = this.keys.ind exOf(key);\n if (index < 0)\n return false;\n\n this.keys .splice(index, 1);\n this.values.splice(index, 1);\n return true;\ n },\n\n forEach: function(f, opt_this) {\n for (var i = 0; i < this.keys.length; i++)\n f.call(opt_this || this, this.values[i], this .keys[i], this);\n }\n };\n }\n\n // JScript does not have __proto__. We wrap all object literals with\n // createObject which uses Object.create, Ob ject.defineProperty and\n // Object.getOwnPropertyDescriptor to create a new ob ject that does the exact\n // same thing. The main downside to this solution is that we have to extract\n // all those property descriptors for IE.\n var cre ateObject = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!proto)\n return obj;\n var newObject = Object.create(proto);\n Object.g etOwnPropertyNames(obj).forEach(function(name) {\n Object.definePropert y(newObject, name,\n Object.getOwnPropertyDescript or(obj, name));\n });\n return newObject;\n };\n\n // IE doe s not support have Document.prototype.contains.\n if (typeof document.contains != 'function') {\n Document.prototype.contains = function(node) {\n if ( node === this || node.parentNode === this)\n return true;\n return t his.documentElement.contains(node);\n }\n }\n\n var BIND = 'bind';\n var R EPEAT = 'repeat';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n 'template': true,\n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var semanticTemplateElements = {\n 'THEAD': true,\n 'TBODY': true, \n 'TFOOT': true,\n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'CO LGROUP': true,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGROUP': true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'undefined';\n if (hasTemplateElement) {\n // TODO(rafaelw): Remove whe n fix for\n // https://codereview.chromium.org/164803002/\n // makes it to Chrome release.\n (function() {\n var t = document.createElement('templ ate');\n var d = t.content.ownerDocument;\n var html = d.appendChild(d .createElement('html'));\n var head = html.appendChild(d.createElement('hea d'));\n var base = d.createElement('base');\n base.href = document.bas eURI;\n head.appendChild(base);\n })();\n }\n\n var allTemplatesSelect ors = 'template, ' +\n Object.keys(semanticTemplateElements).map(function(t agName) {\n return tagName.toLowerCase() + '[template]';\n }).join(' , ');\n\n function isSVGTemplate(el) {\n return el.tagName == 'template' &&\ n el.namespaceURI == 'http://www.w3.org/2000/svg';\n }\n\n function isHTMLTemplate(el) {\n return el.tagName == 'TEMPLATE' &&\n el.name spaceURI == 'http://www.w3.org/1999/xhtml';\n }\n\n function isAttributeTempla te(el) {\n return Boolean(semanticTemplateElements[el.tagName] &&\n el.hasAttribute('template'));\n }\n\n function isTemplate(el) {\n if (el.isTemplate_ === undefined)\n el.isTemplate_ = el.tagName == 'TEMPLAT E' || isAttributeTemplate(el);\n\n return el.isTemplate_;\n }\n\n // FIXME: Observe templates being added/removed from documents\n // FIXME: Expose impera tive API to decorate and observe templates in\n // \"disconnected tress\" (e.g. ShadowRoot)\n document.addEventListener('DOMContentLoaded', function(e) {\n bootstrapTemplatesRecursivelyFrom(document);\n // FIXME: Is this needed? See ms like it shouldn't be.\n Platform.performMicrotaskCheckpoint();\n }, false );\n\n function forAllTemplatesFrom(node, fn) {\n var subTemplates = node.qu erySelectorAll(allTemplatesSelectors);\n\n if (isTemplate(node))\n fn(no de)\n forEach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursi velyFrom(node) {\n function bootstrap(template) {\n if (!HTMLTemplateEle ment.decorate(template))\n bootstrapTemplatesRecursivelyFrom(template.con tent);\n }\n\n forAllTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTem plateElement) {\n /**\n * This represents a <template> element.\n * @ constructor\n * @extends {HTMLElement}\n */\n global.HTMLTemplateElem ent = function() {\n throw TypeError('Illegal constructor');\n };\n }\n \n var hasProto = '__proto__' in {};\n\n function mixin(to, from) {\n Objec t.getOwnPropertyNames(from).forEach(function(name) {\n Object.definePropert y(to, name,\n Object.getOwnPropertyDescriptor(from, n ame));\n });\n }\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/sp ec/templates/index.html#dfn-template-contents-owner\n function getOrCreateTempl ateContentsOwner(template) {\n var doc = template.ownerDocument\n if (!doc .defaultView)\n return doc;\n var d = doc.templateContentsOwner_;\n i f (!d) {\n // TODO(arv): This should either be a Document or HTMLDocument d epending\n // on doc.\n d = doc.implementation.createHTMLDocument(''); \n while (d.lastChild) {\n d.removeChild(d.lastChild);\n }\n doc.templateContentsOwner_ = d;\n }\n return d;\n }\n\n function getT emplateStagingDocument(template) {\n if (!template.stagingDocument_) {\n var owner = template.ownerDocument;\n if (!owner.stagingDocument_) {\n owner.stagingDocument_ = owner.implementation.createHTMLDocument('');\n owner.stagingDocument_.isStagingDocument = true;\n // TODO(rafaelw): R emove when fix for\n // https://codereview.chromium.org/164803002/\n // makes it to Chrome release.\n var base = owner.stagingDocument_.cre ateElement('base');\n base.href = document.baseURI;\n owner.stagin gDocument_.head.appendChild(base);\n\n owner.stagingDocument_.stagingDocu ment_ = owner.stagingDocument_;\n }\n\n template.stagingDocument_ = ow ner.stagingDocument_;\n }\n\n return template.stagingDocument_;\n }\n\n // For non-template browsers, the parser will disallow <template> in certain\n // locations, so we allow \"attribute templates\" which combine the template\n // element with the top-level container node of the content, e.g.\n //\n // <tr template repeat=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n // becomes\n //\n // <template repeat=\"{{ foo }}\">\n // + #document-fragme nt\n // + <tr class=\"bar\">\n // + <td>Bar</td>\n //\n function e xtractTemplateFromAttributeTemplate(el) {\n var template = el.ownerDocument.c reateElement('template');\n el.parentNode.insertBefore(template, el);\n\n var attribs = el.attributes;\n var count = attribs.length;\n while (count- - > 0) {\n var attrib = attribs[count];\n if (templateAttributeDirecti ves[attrib.name]) {\n if (attrib.name !== 'template')\n template .setAttribute(attrib.name, attrib.value);\n el.removeAttribute(attrib.nam e);\n }\n }\n\n return template;\n }\n\n function extractTemplateFr omSVGTemplate(el) {\n var template = el.ownerDocument.createElement('template ');\n el.parentNode.insertBefore(template, el);\n\n var attribs = el.attri butes;\n var count = attribs.length;\n while (count-- > 0) {\n var at trib = attribs[count];\n template.setAttribute(attrib.name, attrib.value);\ n el.removeAttribute(attrib.name);\n }\n\n el.parentNode.removeChild( el);\n return template;\n }\n\n function liftNonNativeTemplateChildrenIntoC ontent(template, el, useRoot) {\n var content = template.content;\n if (us eRoot) {\n content.appendChild(el);\n return;\n }\n\n var child; \n while (child = el.firstChild) {\n content.appendChild(child);\n }\ n }\n\n var templateObserver;\n if (typeof MutationObserver == 'function') {\ n templateObserver = new MutationObserver(function(records) {\n for (var i = 0; i < records.length; i++) {\n records[i].target.refChanged_();\n }\n });\n }\n\n /**\n * Ensures proper API and content model for temp late elements.\n * @param {HTMLTemplateElement} opt_instanceRef The template e lement which\n * |el| template element will return as the value of its ref (), and whose\n * content will be used as source when createInstance() is invoked.\n */\n HTMLTemplateElement.decorate = function(el, opt_instanceRef) {\n if (el.templateIsDecorated_)\n return false;\n\n var templateElem ent = el;\n templateElement.templateIsDecorated_ = true;\n\n var isNativeH TMLTemplate = isHTMLTemplate(templateElement) &&\n hasTemplateElement;\n var bootstrapContents = isNativeHTMLTemplate;\n var liftContents = !isNativeHTMLTemplate;\n var liftRoot = false;\n\n if (!is NativeHTMLTemplate) {\n if (isAttributeTemplate(templateElement)) {\n assert(!opt_instanceRef);\n templateElement = extractTemplateFromAttrib uteTemplate(el);\n templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = hasTemplateElement;\n liftRoot = true;\n } el se if (isSVGTemplate(templateElement)) {\n templateElement = extractTempl ateFromSVGTemplate(el);\n templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = hasTemplateElement;\n }\n }\n\n if (!is NativeHTMLTemplate) {\n fixTemplateElementPrototype(templateElement);\n var doc = getOrCreateTemplateContentsOwner(templateElement);\n templateEl ement.content_ = doc.createDocumentFragment();\n }\n\n if (opt_instanceRef ) {\n // template is contained within an instance, its direct content must be\n // empty\n templateElement.instanceRef_ = opt_instanceRef;\n } else if (liftContents) {\n liftNonNativeTemplateChildrenIntoContent(templa teElement,\n el,\n liftRoot);\n } else if (bootstrapContents) {\n bootstrapTemplatesRecursivelyFrom(templateElement.content);\n }\n\n return true;\n };\n\n // TODO(rafaelw): This used to decorate recursively all templates from a given\n // node. This happens by default on 'DOMContentLoaded' , but may be needed\n // in subtrees not descendent from document (e.g. ShadowR oot).\n // Review whether this is the right public API.\n HTMLTemplateElement. bootstrap = bootstrapTemplatesRecursivelyFrom;\n\n var htmlElement = global.HTM LUnknownElement || HTMLElement;\n\n var contentDescriptor = {\n get: functio n() {\n return this.content_;\n },\n enumerable: true,\n configura ble: true\n };\n\n if (!hasTemplateElement) {\n // Gecko is more picky with the prototype than WebKit. Make sure to use the\n // same prototype as creat ed in the constructor.\n HTMLTemplateElement.prototype = Object.create(htmlEl ement.prototype);\n\n Object.defineProperty(HTMLTemplateElement.prototype, 'c ontent',\n contentDescriptor);\n }\n\n function fixTe mplateElementPrototype(el) {\n if (hasProto)\n el.__proto__ = HTMLTempla teElement.prototype;\n else\n mixin(el, HTMLTemplateElement.prototype);\ n }\n\n function ensureSetModelScheduled(template) {\n if (!template.setMod elFn_) {\n template.setModelFn_ = function() {\n template.setModelFn Scheduled_ = false;\n var map = getBindings(template,\n templa te.delegate_ && template.delegate_.prepareBinding);\n processBindings(tem plate, map, template.model_);\n };\n }\n\n if (!template.setModelFnSc heduled_) {\n template.setModelFnScheduled_ = true;\n Observer.runEOM_ (template.setModelFn_);\n }\n }\n\n mixin(HTMLTemplateElement.prototype, {\ n bind: function(name, value, oneTime) {\n if (name != 'ref')\n r eturn Element.prototype.bind.call(this, name, value, oneTime);\n\n var self = this;\n var ref = oneTime ? value : value.open(function(ref) {\n self.setAttribute('ref', ref);\n self.refChanged_();\n });\n\n this.setAttribute('ref', ref);\n this.refChanged_();\n if (oneTime)\n return;\n\n if (!this.bindings_) {\n this.bindings_ = { ref: value };\n } else {\n this.bindings_.ref = value;\n }\n\n return value;\n },\n\n processBindingDirectives_: function(directives) {\n if (this.iterator_)\n this.iterator_.closeDeps();\n\n if (!dir ectives.if && !directives.bind && !directives.repeat) {\n if (this.iterat or_) {\n this.iterator_.close();\n this.iterator_ = undefined; \n }\n\n return;\n }\n\n if (!this.iterator_) {\n this.iterator_ = new TemplateIterator(this);\n }\n\n this.iterator_.u pdateDependencies(directives, this.model_);\n\n if (templateObserver) {\n templateObserver.observe(this, { attributes: true,\n attributeFilter: ['ref'] });\n }\n\n return this.it erator_;\n },\n\n createInstance: function(model, bindingDelegate, delegat e_) {\n if (bindingDelegate)\n delegate_ = this.newDelegate_(binding Delegate);\n else if (!delegate_)\n delegate_ = this.delegate_;\n\n if (!this.refContent_)\n this.refContent_ = this.ref_.content;\n var content = this.refContent_;\n if (content.firstChild === null)\n return emptyInstance;\n\n var map = getInstanceBindingMap(content, deleg ate_);\n var stagingDocument = getTemplateStagingDocument(this);\n var instance = stagingDocument.createDocumentFragment();\n instance.templateCr eator_ = this;\n instance.protoContent_ = content;\n instance.bindings _ = [];\n instance.terminator_ = null;\n var instanceRecord = instance .templateInstance_ = {\n firstNode: null,\n lastNode: null,\n model: model\n };\n\n var i = 0;\n var collectTerminator = fal se;\n for (var child = content.firstChild; child; child = child.nextSibling ) {\n // The terminator of the instance is the clone of the last child of the\n // content. If the last child is an active template, it may produc e\n // instances as a result of production, so simply collecting the last \n // child of the instance after it has finished producing may be wrong. \n if (child.nextSibling === null)\n collectTerminator = true;\n \n var clone = cloneAndBindInstance(child, instance, stagingDocument,\n map.children[i++],\n model,\n delegate_,\ n instance.bindings_);\n clone.te mplateInstance_ = instanceRecord;\n if (collectTerminator)\n ins tance.terminator_ = clone;\n }\n\n instanceRecord.firstNode = instance .firstChild;\n instanceRecord.lastNode = instance.lastChild;\n instanc e.templateCreator_ = undefined;\n instance.protoContent_ = undefined;\n return instance;\n },\n\n get model() {\n return this.model_;\n },\n\n set model(model) {\n this.model_ = model;\n ensureSetModelSc heduled(this);\n },\n\n get bindingDelegate() {\n return this.delegat e_ && this.delegate_.raw;\n },\n\n refChanged_: function() {\n if (!t his.iterator_ || this.refContent_ === this.ref_.content)\n return;\n\n this.refContent_ = undefined;\n this.iterator_.valueChanged();\n th is.iterator_.updateIteratedValue(this.iterator_.getUpdatedValue());\n },\n\n clear: function() {\n this.model_ = undefined;\n this.delegate_ = u ndefined;\n if (this.bindings_ && this.bindings_.ref)\n this.binding s_.ref.close()\n this.refContent_ = undefined;\n if (!this.iterator_)\ n return;\n this.iterator_.valueChanged();\n this.iterator_.clo se()\n this.iterator_ = undefined;\n },\n\n setDelegate_: function(de legate) {\n this.delegate_ = delegate;\n this.bindingMap_ = undefined; \n if (this.iterator_) {\n this.iterator_.instancePositionChangedFn_ = undefined;\n this.iterator_.instanceModelFn_ = undefined;\n }\n },\n\n newDelegate_: function(bindingDelegate) {\n if (!bindingDelegat e)\n return;\n\n function delegateFn(name) {\n var fn = bindi ngDelegate && bindingDelegate[name];\n if (typeof fn != 'function')\n return;\n\n return function() {\n return fn.apply(bindingD elegate, arguments);\n };\n }\n\n return {\n bindingMaps : {},\n raw: bindingDelegate,\n prepareBinding: delegateFn('prepar eBinding'),\n prepareInstanceModel: delegateFn('prepareInstanceModel'),\n prepareInstancePositionChanged:\n delegateFn('prepareInstance PositionChanged')\n };\n },\n\n set bindingDelegate(bindingDelegate) {\n if (this.delegate_) {\n throw Error('Template must be cleared be fore a new bindingDelegate ' +\n 'can be assigned');\n } \n\n this.setDelegate_(this.newDelegate_(bindingDelegate));\n },\n\n get ref_() {\n var ref = searchRefId(this, this.getAttribute('ref'));\n if (!ref)\n ref = this.instanceRef_;\n\n if (!ref)\n return this;\n\n var nextRef = ref.ref_;\n return nextRef ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefined if there are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+] if there is at least one m ustache.\n function parseMustaches(s, name, node, prepareBindingFn) {\n if ( !s || !s.length)\n return;\n\n var tokens;\n var length = s.length;\n var startIndex = 0, lastIndex = 0, endIndex = 0;\n var onlyOneTime = true ;\n while (lastIndex < length) {\n var startIndex = s.indexOf('{{', last Index);\n var oneTimeStart = s.indexOf('[[', lastIndex);\n var oneTime = false;\n var terminator = '}}';\n\n if (oneTimeStart >= 0 &&\n (startIndex < 0 || oneTimeStart < startIndex)) {\n startIndex = oneT imeStart;\n oneTime = true;\n terminator = ']]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.indexOf(terminator, startIndex + 2);\n\n if (endIndex < 0) {\n if (!tokens)\n return;\n\n tokens .push(s.slice(lastIndex)); // TEXT\n break;\n }\n\n tokens = to kens || [];\n tokens.push(s.slice(lastIndex, startIndex)); // TEXT\n v ar pathString = s.slice(startIndex + 2, endIndex).trim();\n tokens.push(one Time); // ONE_TIME?\n onlyOneTime = onlyOneTime && oneTime;\n var dele gateFn = prepareBindingFn &&\n prepareBindingFn(pathString , name, node);\n // Don't try to parse the expression if there's a prepareB inding function\n if (delegateFn == null) {\n tokens.push(Path.get(p athString)); // PATH\n } else {\n tokens.push(null);\n }\n tokens.push(delegateFn); // DELEGATE_FN\n lastIndex = endIndex + 2;\n } \n\n if (lastIndex === length)\n tokens.push(''); // TEXT\n\n tokens. hasOnePath = tokens.length === 5;\n tokens.isSimplePath = tokens.hasOnePath & &\n tokens[0] == '' &&\n token s[4] == '';\n tokens.onlyOneTime = onlyOneTime;\n\n tokens.combinator = fu nction(values) {\n var newValue = tokens[0];\n\n for (var i = 1; i < t okens.length; i += 4) {\n var value = tokens.hasOnePath ? values : values [(i - 1) / 4];\n if (value !== undefined)\n newValue += value;\n newValue += tokens[i + 3];\n }\n\n return newValue;\n }\n\n return tokens;\n };\n\n function processOneTimeBinding(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n var delegateFn = tokens[3];\n var value = delegateFn ? delegateFn(model, node, true) :\n tokens[2].getValueFrom(model);\n return tokens.isSimplePath ? va lue : tokens.combinator(value);\n }\n\n var values = [];\n for (var i = 1; i < tokens.length; i += 4) {\n var delegateFn = tokens[i + 2];\n v alues[(i - 1) / 4] = delegateFn ? delegateFn(model, node) :\n tokens[i + 1].getValueFrom(model);\n }\n\n return tokens.combinator(values);\n }\n \n function processSinglePathBinding(name, tokens, node, model) {\n var dele gateFn = tokens[3];\n var observer = delegateFn ? delegateFn(model, node, fal se) :\n new PathObserver(model, tokens[2]);\n\n return tokens.isSimple Path ? observer :\n new ObserverTransform(observer, tokens.combinator);\n }\n\n function processBinding(name, tokens, node, model) {\n if (tokens.on lyOneTime)\n return processOneTimeBinding(name, tokens, node, model);\n\n if (tokens.hasOnePath)\n return processSinglePathBinding(name, tokens, no de, model);\n\n var observer = new CompoundObserver();\n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTime = tokens[i];\n var delegat eFn = tokens[i + 2];\n\n if (delegateFn) {\n var value = delegateFn( model, node, oneTime);\n if (oneTime)\n observer.addPath(value)\ n else\n observer.addObserver(value);\n continue;\n }\n\n var path = tokens[i + 1];\n if (oneTime)\n observer.addPa th(path.getValueFrom(model))\n else\n observer.addPath(model, path); \n }\n\n return new ObserverTransform(observer, tokens.combinator);\n }\n \n function processBindings(node, bindings, model, instanceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n var name = bindings[i]\n var tokens = bindings[i + 1];\n var value = processBinding(name, tokens, n ode, model);\n var binding = node.bind(name, value, tokens.onlyOneTime);\n if (binding && instanceBindings)\n instanceBindings.push(binding);\n }\n\n node.bindFinished();\n if (!bindings.isTemplate)\n return;\ n\n node.model_ = model;\n var iter = node.processBindingDirectives_(bindi ngs);\n if (instanceBindings && iter)\n instanceBindings.push(iter);\n }\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var v = el.g etAttribute(name);\n return parseMustaches(v == '' ? '{{}}' : v, name, el, pr epareBindingFn);\n }\n\n function parseAttributeBindings(element, prepareBindi ngFn) {\n assert(element);\n\n var bindings = [];\n var ifFound = false ;\n var bindFound = false;\n\n for (var i = 0; i < element.attributes.leng th; i++) {\n var attr = element.attributes[i];\n var name = attr.name; \n var value = attr.value;\n\n // Allow bindings expressed in attribut es to be prefixed with underbars.\n // We do this to allow correct semantic s for browsers that don't implement\n // <template> where certain attribute s might trigger side-effects -- and\n // for IE which sanitizes certain att ributes, disallowing mustache\n // replacements in their text.\n while (name[0] === '_') {\n name = name.substring(1);\n }\n\n if (is Template(element) &&\n (name === IF || name === BIND || name === REPEAT )) {\n continue;\n }\n\n var tokens = parseMustaches(value, nam e, element,\n prepareBindingFn);\n if (!to kens)\n continue;\n\n bindings.push(name, tokens);\n }\n\n if (isTemplate(element)) {\n bindings.isTemplate = true;\n bindings.if = parseWithDefault(element, IF, prepareBindingFn);\n bindings.bind = parseWit hDefault(element, BIND, prepareBindingFn);\n bindings.repeat = parseWithDef ault(element, REPEAT, prepareBindingFn);\n\n if (bindings.if && !bindings.b ind && !bindings.repeat)\n bindings.bind = parseMustaches('{{}}', BIND, e lement, prepareBindingFn);\n }\n\n return bindings;\n }\n\n function get Bindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEMENT_NODE) \n return parseAttributeBindings(node, prepareBindingFn);\n\n if (node.n odeType === Node.TEXT_NODE) {\n var tokens = parseMustaches(node.data, 'tex tContent', node,\n prepareBindingFn);\n if (tokens)\n return ['textContent', tokens];\n }\n\n return [];\n } \n\n function cloneAndBindInstance(node, parent, stagingDocument, bindings, mod el,\n delegate,\n instanceBindings,\n instanceRecord) {\n var cl one = parent.appendChild(stagingDocument.importNode(node, false));\n\n var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\ n cloneAndBindInstance(child, clone, stagingDocument,\n bindings.children[i++],\n model,\n delegate,\n instanceBindings);\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateElement.decorate(clone, n ode);\n if (delegate)\n clone.setDelegate_(delegate);\n }\n\n processBindings(clone, bindings, model, instanceBindings);\n return clone;\n }\n\n function createInstanceBindingMap(node, prepareBindingFn) {\n var map = getBindings(node, prepareBindingFn);\n map.children = {};\n var index = 0;\n for (var child = node.firstChild; child; child = child.nextSibling) {\n map.children[index++] = createInstanceBindingMap(child, prepareBindingFn); \n }\n\n return map;\n }\n\n var contentUidCounter = 1;\n\n // TODO(raf aelw): Setup a MutationObserver on content which clears the id\n // so that bin dingMaps regenerate when the template.content changes.\n function getContentUid (content) {\n var id = content.id_;\n if (!id)\n id = content.id_ = c ontentUidCounter++;\n return id;\n }\n\n // Each delegate is associated wit h a set of bindingMaps, one for each\n // content which may be used by a templa te. The intent is that each binding\n // delegate gets the opportunity to prepa re the instance (via the prepare*\n // delegate calls) once across all uses.\n // TODO(rafaelw): Separate out the parse map from the binding map. In the\n // current implementation, if two delegates need a binding map for the same\n // content, the second will have to reparse.\n function getInstanceBindingMap(cont ent, delegate_) {\n var contentId = getContentUid(content);\n if (delegate _) {\n var map = delegate_.bindingMaps[contentId];\n if (!map) {\n map = delegate_.bindingMaps[contentId] =\n createInstanceBindingM ap(content, delegate_.prepareBinding) || [];\n }\n return map;\n }\ n\n var map = content.bindingMap_;\n if (!map) {\n map = content.bind ingMap_ =\n createInstanceBindingMap(content, undefined) || [];\n }\ n return map;\n }\n\n Object.defineProperty(Node.prototype, 'templateInstan ce', {\n get: function() {\n var instance = this.templateInstance_;\n return instance ? instance :\n (this.parentNode ? this.parentNode.te mplateInstance : undefined);\n }\n });\n\n var emptyInstance = document.cre ateDocumentFragment();\n emptyInstance.bindings_ = [];\n emptyInstance.termina tor_ = null;\n\n function TemplateIterator(templateElement) {\n this.closed = false;\n this.templateElement_ = templateElement;\n this.instances = []; \n this.deps = undefined;\n this.iteratedValue = [];\n this.presentValu e = undefined;\n this.arrayObserver = undefined;\n }\n\n TemplateIterator.p rototype = {\n closeDeps: function() {\n var deps = this.deps;\n if (deps) {\n if (deps.ifOneTime === false)\n deps.ifValue.close() ;\n if (deps.oneTime === false)\n deps.value.close();\n }\n },\n\n updateDependencies: function(directives, model) {\n this.clos eDeps();\n\n var deps = this.deps = {};\n var template = this.template Element_;\n\n var ifValue = true;\n if (directives.if) {\n deps .hasIf = true;\n deps.ifOneTime = directives.if.onlyOneTime;\n dep s.ifValue = processBinding(IF, directives.if, template, model);\n\n ifVal ue = deps.ifValue;\n\n // oneTime if & predicate is false. nothing else t o do.\n if (deps.ifOneTime && !ifValue) {\n this.valueChanged(); \n return;\n }\n\n if (!deps.ifOneTime)\n ifValu e = ifValue.open(this.updateIfValue, this);\n }\n\n if (directives.rep eat) {\n deps.repeat = true;\n deps.oneTime = directives.repeat.on lyOneTime;\n deps.value = processBinding(REPEAT, directives.repeat, templ ate, model);\n } else {\n deps.repeat = false;\n deps.oneTime = directives.bind.onlyOneTime;\n deps.value = processBinding(BIND, direc tives.bind, template, model);\n }\n\n var value = deps.value;\n i f (!deps.oneTime)\n value = value.open(this.updateIteratedValue, this);\n \n if (!ifValue) {\n this.valueChanged();\n return;\n }\ n\n this.updateValue(value);\n },\n\n /**\n * Gets the updated va lue of the bind/repeat. This can potentially call\n * user code (if a bindin gDelegate is set up) so we try to avoid it if we\n * already have the value in hand (from Observer.open).\n */\n getUpdatedValue: function() {\n var value = this.deps.value;\n if (!this.deps.oneTime)\n value = va lue.discardChanges();\n return value;\n },\n\n updateIfValue: functio n(ifValue) {\n if (!ifValue) {\n this.valueChanged();\n retur n;\n }\n\n this.updateValue(this.getUpdatedValue());\n },\n\n up dateIteratedValue: function(value) {\n if (this.deps.hasIf) {\n var ifValue = this.deps.ifValue;\n if (!this.deps.ifOneTime)\n ifVal ue = ifValue.discardChanges();\n if (!ifValue) {\n this.valueCha nged();\n return;\n }\n }\n\n this.updateValue(value); \n },\n\n updateValue: function(value) {\n if (!this.deps.repeat)\n value = [value];\n var observe = this.deps.repeat &&\n !this.deps.oneTime &&\n Array.isArray(value);\n thi s.valueChanged(value, observe);\n },\n\n valueChanged: function(value, obs erveValue) {\n if (!Array.isArray(value))\n value = [];\n\n if (value === this.iteratedValue)\n return;\n\n this.unobserve();\n this.presentValue = value;\n if (observeValue) {\n this.arrayObser ver = new ArrayObserver(this.presentValue);\n this.arrayObserver.open(thi s.handleSplices, this);\n }\n\n this.handleSplices(ArrayObserver.calcu lateSplices(this.presentValue,\n this.iteratedValue));\n },\n\n getLastInstanceNode: function(index ) {\n if (index == -1)\n return this.templateElement_;\n var in stance = this.instances[index];\n var terminator = instance.terminator_;\n if (!terminator)\n return this.getLastInstanceNode(index - 1);\n\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this.templateEle ment_ === terminator) {\n return terminator;\n }\n\n var subtem plateIterator = terminator.iterator_;\n if (!subtemplateIterator)\n return terminator;\n\n return subtemplateIterator.getLastTemplateNode();\n },\n\n getLastTemplateNode: function() {\n return this.getLastInstanc eNode(this.instances.length - 1);\n },\n\n insertInstanceAt: function(inde x, fragment) {\n var previousInstanceLast = this.getLastInstanceNode(index - 1);\n var parent = this.templateElement_.parentNode;\n this.instance s.splice(index, 0, fragment);\n\n parent.insertBefore(fragment, previousIns tanceLast.nextSibling);\n },\n\n extractInstanceAt: function(index) {\n var previousInstanceLast = this.getLastInstanceNode(index - 1);\n var la stNode = this.getLastInstanceNode(index);\n var parent = this.templateEleme nt_.parentNode;\n var instance = this.instances.splice(index, 1)[0];\n\n while (lastNode !== previousInstanceLast) {\n var node = previousInsta nceLast.nextSibling;\n if (node == lastNode)\n lastNode = previo usInstanceLast;\n\n instance.appendChild(parent.removeChild(node));\n }\n\n return instance;\n },\n\n getDelegateFn: function(fn) {\n fn = fn && fn(this.templateElement_);\n return typeof fn === 'function' ? fn : null;\n },\n\n handleSplices: function(splices) {\n if (this.cl osed || !splices.length)\n return;\n\n var template = this.templateE lement_;\n\n if (!template.parentNode) {\n this.close();\n re turn;\n }\n\n ArrayObserver.applySplices(this.iteratedValue, this.pres entValue,\n splices);\n\n var delegate = te mplate.delegate_;\n if (this.instanceModelFn_ === undefined) {\n thi s.instanceModelFn_ =\n this.getDelegateFn(delegate && delegate.prepar eInstanceModel);\n }\n\n if (this.instancePositionChangedFn_ === undef ined) {\n this.instancePositionChangedFn_ =\n this.getDelegate Fn(delegate &&\n delegate.prepareInstancePositionC hanged);\n }\n\n // Instance Removals\n var instanceCache = new M ap;\n var removeDelta = 0;\n for (var i = 0; i < splices.length; i++) {\n var splice = splices[i];\n var removed = splice.removed;\n for (var j = 0; j < removed.length; j++) {\n var model = removed[j] ;\n var instance = this.extractInstanceAt(splice.index + removeDelta);\ n if (instance !== emptyInstance) {\n instanceCache.set(mode l, instance);\n }\n }\n\n removeDelta -= splice.addedCoun t;\n }\n\n // Instance Insertions\n for (var i = 0; i < splices.l ength; i++) {\n var splice = splices[i];\n var addIndex = splice.i ndex;\n for (; addIndex < splice.index + splice.addedCount; addIndex++) { \n var model = this.iteratedValue[addIndex];\n var instance = instanceCache.get(model);\n if (instance) {\n instanceCache. delete(model);\n } else {\n if (this.instanceModelFn_) {\n model = this.instanceModelFn_(model);\n }\n\n if (model === undefined) {\n instance = emptyInstance;\n } else {\n instance = template.createInstance(model, undefined, de legate);\n }\n }\n\n this.insertInstanceAt(addIndex , instance);\n }\n }\n\n instanceCache.forEach(function(instanc e) {\n this.closeInstanceBindings(instance);\n }, this);\n\n if (this.instancePositionChangedFn_)\n this.reportInstancesMoved(splices);\ n },\n\n reportInstanceMoved: function(index) {\n var instance = this .instances[index];\n if (instance === emptyInstance)\n return;\n\n this.instancePositionChangedFn_(instance.templateInstance_, index);\n },\ n\n reportInstancesMoved: function(splices) {\n var index = 0;\n va r offset = 0;\n for (var i = 0; i < splices.length; i++) {\n var spl ice = splices[i];\n if (offset != 0) {\n while (index < splice.i ndex) {\n this.reportInstanceMoved(index);\n index++;\n }\n } else {\n index = splice.index;\n }\n\n while (index < splice.index + splice.addedCount) {\n this.reportInsta nceMoved(index);\n index++;\n }\n\n offset += splice.adde dCount - splice.removed.length;\n }\n\n if (offset == 0)\n retu rn;\n\n var length = this.instances.length;\n while (index < length) { \n this.reportInstanceMoved(index);\n index++;\n }\n },\n\ n closeInstanceBindings: function(instance) {\n var bindings = instance. bindings_;\n for (var i = 0; i < bindings.length; i++) {\n bindings[ i].close();\n }\n },\n\n unobserve: function() {\n if (!this.arr ayObserver)\n return;\n\n this.arrayObserver.close();\n this.ar rayObserver = undefined;\n },\n\n close: function() {\n if (this.clos ed)\n return;\n this.unobserve();\n for (var i = 0; i < this.in stances.length; i++) {\n this.closeInstanceBindings(this.instances[i]);\n }\n\n this.instances.length = 0;\n this.closeDeps();\n this .templateElement_.iterator_ = undefined;\n this.closed = true;\n }\n }; \n\n // Polyfill-specific API.\n HTMLTemplateElement.forAllTemplatesFrom_ = fo rAllTemplatesFrom;\n})(this);\n\n/*\n * Copyright (c) 2014 The Polymer Project A uthors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of au thors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Co de distributed by Google as part of the polymer project is also\n * subject to a n additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\ n\n(function(scope) {\n\nvar iterations = 0;\nvar callbacks = [];\nvar twiddle = document.createTextNode('');\n\nfunction endOfMicrotask(callback) {\n twiddle. textContent = iterations++;\n callbacks.push(callback);\n}\n\nfunction atEndOfM icrotask() {\n while (callbacks.length) {\n callbacks.shift()();\n }\n}\n\n new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask)\n .observ e(twiddle, {characterData: true})\n ;\n\n// exports\n\nscope.endOfMicrotask = e ndOfMicrotask;\n\n})(Platform);\n\n\n/*\n * Copyright (c) 2014 The Polymer Proje ct Authors. All rights reserved.\n * This code may only be used under the BSD st yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n// inject style sheet\nvar style = document.createE lement('style');\nstyle.textContent = 'template {display: none !important;} /* i njected by platform.js */';\nvar head = document.querySelector('head');\nhead.in sertBefore(style, head.firstChild);\n\n// flush (with logging)\nvar flushing;\nf unction flush() {\n if (!flushing) {\n flushing = true;\n scope.endOfMicr otask(function() {\n flushing = false;\n logFlags.data && console.grou p('Platform.flush()');\n scope.performMicrotaskCheckpoint();\n logFlag s.data && console.groupEnd();\n });\n }\n};\n\n// polling dirty checker\n// flush periodically if platform does not have object observe.\nif (!Observer.hasO bjectObserve) {\n var FLUSH_POLL_INTERVAL = 125;\n window.addEventListener('We bComponentsReady', function() {\n flush();\n scope.flushPoll = setInterval (flush, FLUSH_POLL_INTERVAL);\n });\n} else {\n // make flush a no-op when we have Object.observe\n flush = function() {};\n}\n\nif (window.CustomElements && !CustomElements.useNative) {\n var originalImportNode = Document.prototype.imp ortNode;\n Document.prototype.importNode = function(node, deep) {\n var impo rted = originalImportNode.call(this, node, deep);\n CustomElements.upgradeAll (imported);\n return imported;\n }\n}\n\n// exports\nscope.flush = flush;\n\ n})(window.Platform);\n\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors . All rights reserved.\n * This code may only be used under the BSD style licens e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis tributed by Google as part of the polymer project is also\n * subject to an addi tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fu nction(scope) {\n\nvar urlResolver = {\n resolveDom: function(root, url) {\n url = url || root.ownerDocument.baseURI;\n this.resolveAttributes(root, url) ;\n this.resolveStyles(root, url);\n // handle template.content\n var t emplates = root.querySelectorAll('template');\n if (templates) {\n for ( var i = 0, l = templates.length, t; (i < l) && (t = templates[i]); i++) {\n if (t.content) {\n this.resolveDom(t.content, url);\n }\n }\n }\n },\n resolveTemplate: function(template) {\n this.resolveDom(t emplate.content, template.ownerDocument.baseURI);\n },\n resolveStyles: functi on(root, url) {\n var styles = root.querySelectorAll('style');\n if (style s) {\n for (var i = 0, l = styles.length, s; (i < l) && (s = styles[i]); i+ +) {\n this.resolveStyle(s, url);\n }\n }\n },\n resolveStyle: function(style, url) {\n url = url || style.ownerDocument.baseURI;\n style .textContent = this.resolveCssText(style.textContent, url);\n },\n resolveCssT ext: function(cssText, baseUrl, keepAbsolute) {\n cssText = replaceUrlsInCssT ext(cssText, baseUrl, keepAbsolute, CSS_URL_REGEXP);\n return replaceUrlsInCs sText(cssText, baseUrl, keepAbsolute, CSS_IMPORT_REGEXP);\n },\n resolveAttrib utes: function(root, url) {\n if (root.hasAttributes && root.hasAttributes()) {\n this.resolveElementAttributes(root, url);\n }\n // search for at tributes that host urls\n var nodes = root && root.querySelectorAll(URL_ATTRS _SELECTOR);\n if (nodes) {\n for (var i = 0, l = nodes.length, n; (i < l ) && (n = nodes[i]); i++) {\n this.resolveElementAttributes(n, url);\n }\n }\n },\n resolveElementAttributes: function(node, url) {\n url = url || node.ownerDocument.baseURI;\n URL_ATTRS.forEach(function(v) {\n v ar attr = node.attributes[v];\n var value = attr && attr.value;\n var replacement;\n if (value && value.search(URL_TEMPLATE_SEARCH) < 0) {\n if (v === 'style') {\n replacement = replaceUrlsInCssText(value, url , false, CSS_URL_REGEXP);\n } else {\n replacement = resolveRela tiveUrl(url, value);\n }\n attr.value = replacement;\n }\n });\n }\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMPORT_R EGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['href', 'src', 'action', 'style', 'url'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[' ) + ']';\nvar URL_TEMPLATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(c ssText, baseUrl, keepAbsolute, regexp) {\n return cssText.replace(regexp, funct ion(m, pre, url, post) {\n var urlPath = url.replace(/[\"']/g, '');\n urlP ath = resolveRelativeUrl(baseUrl, urlPath, keepAbsolute);\n return pre + '\\' ' + urlPath + '\\'' + post;\n });\n}\n\nfunction resolveRelativeUrl(baseUrl, ur l, keepAbsolute) {\n // do not resolve '/' absolute urls\n if (url && url[0] = == '/') {\n return url;\n }\n var u = new URL(url, baseUrl);\n return keep Absolute ? u.href : makeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelP ath(url) {\n var root = new URL(document.baseURI);\n var u = new URL(url, root );\n if (u.host === root.host && u.port === root.port &&\n u.protocol === root.protocol) {\n return makeRelPath(root, u);\n } else {\n return url;\ n }\n}\n\n// make a relative path from source to target\nfunction makeRelPath(s ourceUrl, targetUrl) {\n var source = sourceUrl.pathname;\n var target = targe tUrl.pathname;\n var s = source.split('/');\n var t = target.split('/');\n wh ile (s.length && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n for (va r i = 0, l = s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n return t. join('/') + targetUrl.search + targetUrl.hash;\n}\n\n// exports\nscope.urlResolv er = urlResolver;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Proje ct Authors. All rights reserved.\n * This code may only be used under the BSD st yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var endOfMicrotask = Platform.endOfMicrotask;\n\n // Generic url loader\n function Loader(regex) {\n this.cache = Object.creat e(null);\n this.map = Object.create(null);\n this.requests = 0;\n this. regex = regex;\n }\n Loader.prototype = {\n\n // TODO(dfreedm): there may b e a better factoring here\n // extract absolute urls from the text (full of r elative urls)\n extractUrls: function(text, base) {\n var matches = [];\ n var matched, u;\n while ((matched = this.regex.exec(text))) {\n u = new URL(matched[1], base);\n matches.push({matched: matched[0], ur l: u.href});\n }\n return matches;\n },\n // take a text blob, a root url, and a callback and load all the urls found within the text\n // re turns a map of absolute url to text\n process: function(text, root, callback) {\n var matches = this.extractUrls(text, root);\n\n // every call to process returns all the text this loader has ever received\n var done = cal lback.bind(null, this.map);\n this.fetch(matches, done);\n },\n // bu ild a mapping of url -> text from matches\n fetch: function(matches, callback ) {\n var inflight = matches.length;\n\n // return early if there is n o fetching to be done\n if (!inflight) {\n return callback();\n }\n\n // wait for all subrequests to return\n var done = function() { \n if (--inflight === 0) {\n callback();\n }\n };\n\ n // start fetching all subrequests\n var m, req, url;\n for (var i = 0; i < inflight; i++) {\n m = matches[i];\n url = m.url;\n req = this.cache[url];\n // if this url has already been requested, skip requesting it again\n if (!req) {\n req = this.xhr(url);\n req.match = m;\n this.cache[url] = req;\n }\n // wait for the request to process its subrequests\n req.wait(done);\n }\n },\n handleXhr: function(request) {\n var match = request.match; \n var url = match.url;\n\n // handle errors with an empty string\n var response = request.response || request.responseText || '';\n this.ma p[url] = response;\n this.fetch(this.extractUrls(response, url), request.re solve);\n },\n xhr: function(url) {\n this.requests++;\n var req uest = new XMLHttpRequest();\n request.open('GET', url, true);\n reque st.send();\n request.onerror = request.onload = this.handleXhr.bind(this, r equest);\n\n // queue of tasks to run after XHR returns\n request.pend ing = [];\n request.resolve = function() {\n var pending = request.p ending;\n for(var i = 0; i < pending.length; i++) {\n pending[i] ();\n }\n request.pending = null;\n };\n\n // if we have already resolved, pending is null, async call the callback\n request.wait = function(fn) {\n if (request.pending) {\n request.pending.push (fn);\n } else {\n endOfMicrotask(fn);\n }\n };\n\n return request;\n }\n };\n\n scope.Loader = Loader;\n})(Polymer);\n\n/ *\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * T his code may only be used under the BSD style license found at http://polymer.gi thub.io/LICENSE.txt\n * The complete set of authors may be found at http://polym er.github.io/AUTHORS.txt\n * The complete set of contributors may be found at ht tp://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part o f the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar urlRe solver = scope.urlResolver;\nvar Loader = scope.Loader;\n\nfunction StyleResolve r() {\n this.loader = new Loader(this.regex);\n}\nStyleResolver.prototype = {\n regex: /@import\\s+(?:url)?[\"'\\(]*([^'\"\\)]*)['\"\\)]*;/g,\n // Recursivel y replace @imports with the text at that url\n resolve: function(text, url, cal lback) {\n var done = function(map) {\n callback(this.flatten(text, url, map));\n }.bind(this);\n this.loader.process(text, url, done);\n },\n / / resolve the textContent of a style node\n resolveNode: function(style, url, c allback) {\n var text = style.textContent;\n var done = function(text) {\n style.textContent = text;\n callback(style);\n };\n this.resolv e(text, url, done);\n },\n // flatten all the @imports to text\n flatten: fun ction(text, base, map) {\n var matches = this.loader.extractUrls(text, base); \n var match, url, intermediate;\n for (var i = 0; i < matches.length; i++ ) {\n match = matches[i];\n url = match.url;\n // resolve any css text to be relative to the importer, keep absolute url\n intermediate = ur lResolver.resolveCssText(map[url], url, true);\n // flatten intermediate @i mports\n intermediate = this.flatten(intermediate, base, map);\n text = text.replace(match.matched, intermediate);\n }\n return text;\n },\n l oadStyles: function(styles, base, callback) {\n var loaded=0, l = styles.leng th;\n // called in the context of the style\n function loadedStyle(style) {\n loaded++;\n if (loaded === l && callback) {\n callback();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n this. resolveNode(s, base, loadedStyle);\n }\n }\n};\n\nvar styleResolver = new St yleResolver();\n\n// exports\nscope.styleResolver = styleResolver;\n\n})(Polymer );\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved .\n * This code may only be used under the BSD style license found at http://pol ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http: //polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // copy own properties from 'api' to 'prototype, with name hinting for 'super'\n function extend(prototype, api) {\n if (prototype && api) {\n // use o nly own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(funct ion(n) {\n // acquire property descriptor\n var pd = Object.getOwn PropertyDescriptor(api, n);\n if (pd) {\n // clone property via descriptor\n Object.defineProperty(prototype, n, pd);\n // cac he name-of-method for 'super' engine\n if (typeof pd.value == 'function ') {\n // hint the 'super' engine\n pd.value.nom = n;\n }\n }\n });\n }\n return prototype;\n }\n\n\n // mixi n\n\n // copy all properties from inProps (et al) to inObj\n function mixin(in Obj/*, inProps, inMoreProps, ...*/) {\n var obj = inObj || {};\n for (var i = 1; i < arguments.length; i++) {\n var p = arguments[i];\n try {\n for (var n in p) {\n copyProperty(n, p, obj);\n }\n } catch(x) {\n }\n }\n return obj;\n }\n\n // copy property inName from inSource object to inTarget object\n function copyProperty(inName, inSourc e, inTarget) {\n var pd = getPropertyDescriptor(inSource, inName);\n Objec t.defineProperty(inTarget, inName, pd);\n }\n\n // get property descriptor for inName on inObject, even if\n // inName exists on some link in inObject's prot otype chain\n function getPropertyDescriptor(inObject, inName) {\n if (inObj ect) {\n var pd = Object.getOwnPropertyDescriptor(inObject, inName);\n return pd || getPropertyDescriptor(Object.getPrototypeOf(inObject), inName);\n }\n }\n\n // exports\n\n scope.extend = extend;\n scope.mixin = mixin;\n\ n // for bc\n Platform.mixin = mixin;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\ n * The complete set of authors may be found at http://polymer.github.io/AUTHORS .txt\n * The complete set of contributors may be found at http://polymer.github. io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer projec t is also\n * subject to an additional IP rights grant found at http://polymer.g ithub.io/PATENTS.txt\n */\n\n(function(scope) {\n \n // usage\n \n // invoke cb.call(this) in 100ms, unless the job is re-registered,\n // which resets the timer\n // \n // this.myJob = this.job(this.myJob, cb, 100)\n //\n // retur ns a job handle which can be used to re-register a job\n\n var Job = function(i nContext) {\n this.context = inContext;\n this.boundComplete = this.comple te.bind(this)\n };\n Job.prototype = {\n go: function(callback, wait) {\n this.callback = callback;\n var h;\n if (!wait) {\n h = req uestAnimationFrame(this.boundComplete);\n this.handle = function() {\n cancelAnimationFrame(h);\n }\n } else {\n h = setTimeo ut(this.boundComplete, wait);\n this.handle = function() {\n cle arTimeout(h);\n }\n }\n },\n stop: function() {\n if (thi s.handle) {\n this.handle();\n this.handle = null;\n }\n } ,\n complete: function() {\n if (this.handle) {\n this.stop();\n this.callback.call(this.context);\n }\n }\n };\n \n function j ob(job, callback, wait) {\n if (job) {\n job.stop();\n } else {\n job = new Job(this);\n }\n job.go(callback, wait);\n return job;\n } \n \n // exports \n\n scope.job = job;\n \n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may onl y be used under the BSD style license found at http://polymer.github.io/LICENSE. txt\n * The complete set of authors may be found at http://polymer.github.io/AUT HORS.txt\n * The complete set of contributors may be found at http://polymer.git hub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pr oject is also\n * subject to an additional IP rights grant found at http://polym er.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLElement.register = function(tag, prototype) {\n registry[tag] = prototyp e;\n }\n\n // get prototype mapped to node <tag>\n HTMLElement.getPrototypeFo rTag = function(tag) {\n var prototype = !tag ? HTMLElement.prototype : regis try[tag];\n // TODO(sjmiles): creating <tag> is likely to have wasteful side- effects\n return prototype || Object.getPrototypeOf(document.createElement(ta g));\n };\n\n // we have to flag propagation stoppage for the event dispatcher \n var originalStopPropagation = Event.prototype.stopPropagation;\n Event.prot otype.stopPropagation = function() {\n this.cancelBubble = true;\n origina lStopPropagation.apply(this, arguments);\n };\n \n \n // polyfill DOMTokenLi st\n // * add/remove: allow these methods to take multiple classNames\n // * t oggle: add a 2nd argument which forces the given state rather\n // than toggli ng.\n\n var add = DOMTokenList.prototype.add;\n var remove = DOMTokenList.prot otype.remove;\n DOMTokenList.prototype.add = function() {\n for (var i = 0; i < arguments.length; i++) {\n add.call(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = function() {\n for (var i = 0; i < argument s.length; i++) {\n remove.call(this, arguments[i]);\n }\n };\n DOMToke nList.prototype.toggle = function(name, bool) {\n if (arguments.length == 1) {\n bool = !this.contains(name);\n }\n bool ? this.add(name) : this.r emove(name);\n };\n DOMTokenList.prototype.switch = function(oldName, newName) {\n oldName && this.remove(oldName);\n newName && this.add(newName);\n } ;\n\n // add array() to NodeList, NamedNodeMap, HTMLCollection\n\n var ArraySl ice = function() {\n return Array.prototype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || window.MozNamedAttrMap || {});\n\n NodeL ist.prototype.array = ArraySlice;\n namedNodeMap.prototype.array = ArraySlice;\ n HTMLCollection.prototype.array = ArraySlice;\n\n // utility\n\n function cr eateDOM(inTagOrNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'st ring' ?\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(tru e);\n dom.innerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttr s) {\n dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\ n }\n\n // exports\n\n scope.createDOM = createDOM;\n\n})(Polymer);\n\n/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\r\n * Th is code may only be used under the BSD style license found at http://polymer.git hub.io/LICENSE.txt\r\n * The complete set of authors may be found at http://poly mer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Google as p art of the polymer project is also\r\n * subject to an additional IP rights gran t found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (function(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of args like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles):\r\n // $super must be installed on an instance or prototype chain\r\n // a s `super`, and invoked via `this`, e.g.\r\n // `this.super();`\r\n\r\n // will not work if function objects are not unique, for example,\r\n // when using mixins.\r\n // The memoization strategy assumes each functi on exists on only one \r\n // prototype chain i.e. we use the function obj ect for memoizing)\r\n // perhaps we can bookkeep on the prototype itself instead\r\n function $super(arrayOfArgs) {\r\n // since we are thunking a method call, performance is important here: \r\n // memoize all lookups, once memoized the fast path calls no other \r\n // functions\r\n //\r\ n // find the caller (cannot be `strict` because of 'caller')\r\n var caller = $super.caller;\r\n // memoized 'name of method' \r\n var nom = caller.nom;\r\n // memoized next implementation prototype\r\n var _s uper = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\n nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n if ( !nom) {\r\n console.warn('called super() on a method not installed decl aratively (has no .nom property)');\r\n }\r\n // super prototype i s either cached or we have to find it\r\n // by searching __proto__ (at t he 'top')\r\n // invariant: because we cache _super on fn below, we never reach \r\n // here from inside a series of calls to super(), so it's ok to \r\n // start searching from the prototype of 'this' (at the 'top')\r\ n // we must never memoize a null super for this reason\r\n _super = memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n // our s uper function\r\n var fn = _super[nom];\r\n if (fn) {\r\n // me moize information so 'fn' can call 'super'\r\n if (!fn._super) {\r\n // must not memoize null, or we lose our invariant above\r\n memoi zeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherited method \r\n // if 'fn' is not function valued, this will throw\r\n return fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n function name InThis(value) {\r\n var p = this.__proto__;\r\n while (p && p !== HTML Element.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames is absurdl y expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n for (v ar i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = Object.get OwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'function' && d .value === value) {\r\n return n;\r\n }\r\n }\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSuper(method , name, proto) {\r\n // find and cache next prototype containing `name`\r\n // we need the prototype so we can do another lookup\r\n // from here \r\n var s = nextSuper(proto, name, method);\r\n if (s[name]) {\r\n // `s` is a prototype, the actual method is `s[name]`\r\n // tag sup er method with it's name for quicker lookups\r\n s[name].nom = name;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n function nextSuper (proto, name, caller) {\r\n // look for an inherited prototype that impleme nts name\r\n while (proto) {\r\n if ((proto[name] !== caller) && pro to[name]) {\r\n return proto;\r\n }\r\n proto = getProtot ypeOf(proto);\r\n }\r\n // must not return null, or we lose our invari ant above\r\n // in this case, a super() call was invoked where no supercla ss\r\n // method exists\r\n // TODO(sjmiles): thow an exception?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10) the pro totype chain is faked via \r\n // __proto__. Therefore, always get prototype via __proto__ instead of\r\n // the more standard Object.getPrototypeOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__proto__;\r\n }\r\n\r\n // utility function to precompute name tags for functions\r\n // in a (unchained) prototype\r\n function hintSuper(prototype) {\r\n // tag functions with their prototype name to optimize\r\n // super call in vocations\r\n for (var n in prototype) {\r\n var pd = Object.getOwnP ropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value === 'funct ion') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n\n/*\n * C opyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This cod e may only be used under the BSD style license found at http://polymer.github.io /LICENSE.txt\n * The complete set of authors may be found at http://polymer.gith ub.io/AUTHORS.txt\n * The complete set of contributors may be found at http://po lymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the p olymer project is also\n * subject to an additional IP rights grant found at htt p://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n function noopH andler(value) {\n return value;\n }\n\n var typeHandlers = {\n string: n oopHandler,\n 'undefined': noopHandler,\n date: function(value) {\n r eturn new Date(Date.parse(value) || Date.now());\n },\n boolean: function( value) {\n if (value === '') {\n return true;\n }\n return value === 'false' ? false : !!value;\n },\n number: function(value) {\n var n = parseFloat(value);\n // hex values like \"0xFFFF\" parseFloat a s 0\n if (n === 0) {\n n = parseInt(value);\n }\n return i sNaN(n) ? value : n;\n // this code disabled because encoded values (like \ "0xFFFF\")\n // do not round trip to their original format\n //return (String(floatVal) === value) ? floatVal : value;\n },\n object: function(v alue, currentValue) {\n if (currentValue === null) {\n return value; \n }\n try {\n // If the string is an object, we can parse is w ith the JSON library.\n // include convenience replace for single-quotes. If the author omits\n // quotes altogether, parse will fail.\n re turn JSON.parse(value.replace(/'/g, '\"'));\n } catch(e) {\n // The object isn't valid JSON, return the raw value\n return value;\n }\n },\n // avoid deserialization of functions\n 'function': function(value , currentValue) {\n return currentValue;\n }\n };\n\n function deseria lizeValue(value, currentValue) {\n // attempt to infer type from default valu e\n var inferredType = typeof currentValue;\n // invent 'date' type value for Date\n if (currentValue instanceof Date) {\n inferredType = 'date';\ n }\n // delegate deserialization via type string\n return typeHandlers [inferredType](value, currentValue);\n }\n\n // exports\n\n scope.deserialize Value = deserializeValue;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polym er Project Authors. All rights reserved.\n * This code may only be used under th e BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comple te set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The c omplete set of contributors may be found at http://polymer.github.io/CONTRIBUTOR S.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt\n */\n(function(scope) {\n\n // imports\n\n var extend = scope.extend;\ n\n // module\n\n var api = {};\n\n api.declaration = {};\n api.instance = { };\n\n api.publish = function(apis, prototype) {\n for (var n in apis) {\n extend(prototype, apis[n]);\n }\n };\n\n // exports\n\n scope.api = ap i;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license fou nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu ted by Google as part of the polymer project is also\n * subject to an additiona l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functio n(scope) {\n\n var utils = {\n /**\n * Invokes a function asynchronousl y. The context of the callback\n * function is bound to 'this' automaticall y.\n * @method async\n * @param {Function|String} method\n * @par am {any|Array} args\n * @param {number} timeout\n */\n async: funct ion(method, args, timeout) {\n // when polyfilling Object.observe, ensure c hanges \n // propagate before executing the async method\n Platform.fl ush();\n // second argument to `apply` must be an array\n args = (args && args.length) ? args : [args];\n // function to invoke\n var fn = f unction() {\n (this[method] || method).apply(this, args);\n }.bind(t his);\n // execute `fn` sooner or later\n var handle = timeout ? setTi meout(fn, timeout) :\n requestAnimationFrame(fn);\n // NOTE: switc h on inverting handle to determine which time is used.\n return timeout ? h andle : ~handle;\n },\n cancelAsync: function(handle) {\n if (handle < 0) {\n cancelAnimationFrame(~handle);\n } else {\n clearTim eout(handle);\n }\n },\n /**\n * Fire an event.\n * @method fire\n * @returns {Object} event\n * @param {string} type An event na me.\n * @param {any} detail\n * @param {Node} onNode Target node.\n * @param {Boolean} bubbles Set false to prevent bubbling, defaults to true\n * @param {Boolean} cancelable Set false to prevent cancellation, defaults t o true\n */\n fire: function(type, detail, onNode, bubbles, cancelable) {\n var node = onNode || this;\n var detail = detail === null || detai l === undefined ? {} : detail;\n var event = new CustomEvent(type, {\n bubbles: bubbles !== undefined ? bubbles : true,\n cancelable: cancela ble !== undefined ? cancelable : true,\n detail: detail\n });\n node.dispatchEvent(event);\n return event;\n },\n /**\n * Fire an event asynchronously.\n * @method asyncFire\n * @param {string} typ e An event name.\n * @param detail\n * @param {Node} toNode Target nod e.\n */\n asyncFire: function(/*inType, inDetail*/) {\n this.async( \"fire\", arguments);\n },\n /**\n * Remove class from old, add class to anew, if they exist.\n * @param classFollows\n * @param anew A nod e.\n * @param old A node\n * @param className\n */\n classFoll ows: function(anew, old, className) {\n if (old) {\n old.classList.r emove(className);\n }\n if (anew) {\n anew.classList.add(classN ame);\n }\n },\n /**\n * Inject HTML which contains markup bound to this element into\n * a target element (replacing target element conten t).\n * @param String html to inject\n * @param Element target element \n */\n injectBoundHTML: function(html, element) {\n var template = document.createElement('template');\n template.innerHTML = html;\n va r fragment = this.instanceTemplate(template);\n if (element) {\n ele ment.textContent = '';\n element.appendChild(fragment);\n }\n r eturn fragment;\n }\n };\n\n // no-operation function for handy stubs\n va r nop = function() {};\n\n // null-object for handy stubs\n var nob = {};\n\n // deprecated\n\n utils.asyncMethod = utils.async;\n\n // exports\n\n scope. api.instance.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n})(Polyme r);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\n * This code may only be used under the BSD style license found at http://po lymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http ://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fou nd at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google a s part of the polymer project is also\n * subject to an additional IP rights gra nt found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var EVENT_PREFIX = 'on-';\n \n // instance events api\n var events = {\n // read-only\n EVENT_PREFIX : EVENT_PREFIX,\n // event listeners on host\n addHostListeners: function( ) {\n var events = this.eventDelegates;\n log.events && (Object.keys(e vents).length > 0) && console.log('[%s] addHostListeners:', this.localName, even ts);\n // NOTE: host events look like bindings but really are not;\n / / (1) we don't want the attribute to be set and (2) we want to support\n // multiple event listeners ('host' and 'instance') and Node.bind\n // by def ault supports 1 thing being bound.\n for (var type in events) {\n va r methodName = events[type];\n PolymerGestures.addEventListener(this, typ e, this.element.getEventHandler(this, this, methodName));\n }\n },\n // call 'method' or function method on 'obj' with 'args', if the method exists\n dispatchMethod: function(obj, method, args) {\n if (obj) {\n log .events && console.group('[%s] dispatch [%s]', obj.localName, method);\n var fn = typeof method === 'function' ? method : obj[method];\n if (fn) { \n fn[args ? 'apply' : 'call'](obj, args);\n }\n log.even ts && console.groupEnd();\n Platform.flush();\n }\n }\n };\n\n // exports\n\n scope.api.instance.events = events;\n\n // alias PolymerGesture s event listener logic\n scope.addEventListener = PolymerGestures.addEventListe ner;\n scope.removeEventListener = PolymerGestures.removeEventListener;\n\n})(P olymer);\n\n/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\r\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\r\n * The complete set of authors may be fo und at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributo rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distribu ted by Google as part of the polymer project is also\r\n * subject to an additio nal IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (function(scope) {\r\n\r\n // instance api for attributes\r\n\r\n var attribut es = {\r\n copyInstanceAttributes: function () {\r\n var a$ = this._inst anceAttributes;\r\n for (var k in a$) {\r\n if (!this.hasAttribute(k )) {\r\n this.setAttribute(k, a$[k]);\r\n }\r\n }\r\n }, \r\n // for each attribute on this, deserialize value to property as needed\r \n takeAttributes: function() {\r\n // if we have no publish lookup tabl e, we have no attributes to take\r\n // TODO(sjmiles): ad hoc\r\n if ( this._publishLC) {\r\n for (var i=0, a$=this.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProperty(a.name, a.value); \r\n }\r\n }\r\n },\r\n // if attribute 'name' is mapped to a property, deserialize\r\n // 'value' into that property\r\n attributeToPro perty: function(name, value) {\r\n // try to match this attribute to a prop erty (attributes are\r\n // all lower-case, so this is case-insensitive sea rch)\r\n var name = this.propertyForAttribute(name);\r\n if (name) {\r \n // filter out 'mustached' values, these are to be\r\n // replac ed with bound-data and are not yet values\r\n // themselves\r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n return;\r\n }\r\n // get original value\r\n var currentValue = this[name];\ r\n // deserialize Boolean or Number values from attribute\r\n var value = this.deserializeValue(value, currentValue);\r\n // only act if t he value has changed\r\n if (value !== currentValue) {\r\n // in stall new value (has side-effects)\r\n this[name] = value;\r\n } \r\n }\r\n },\r\n // return the published property matching name, or undefined\r\n propertyForAttribute: function(name) {\r\n var match = thi s._publishLC && this._publishLC[name];\r\n //console.log('propertyForAttrib ute:', name, 'matches', match);\r\n return match;\r\n },\r\n // conve rt representation of 'stringValue' based on type of 'currentValue'\r\n deseri alizeValue: function(stringValue, currentValue) {\r\n return scope.deserial izeValue(stringValue, currentValue);\r\n },\r\n serializeValue: function(v alue, inferredType) {\r\n if (inferredType === 'boolean') {\r\n retu rn value ? '' : undefined;\r\n } else if (inferredType !== 'object' && infe rredType !== 'function'\r\n && value !== undefined) {\r\n return value;\r\n }\r\n },\r\n reflectPropertyToAttribute: function(name) { \r\n var inferredType = typeof this[name];\r\n // try to intelligently serialize property value\r\n var serializedValue = this.serializeValue(thi s[name], inferredType);\r\n // boolean properties must reflect as boolean a ttributes\r\n if (serializedValue !== undefined) {\r\n this.setAttri bute(name, serializedValue);\r\n // TODO(sorvell): we should remove attr for all properties\r\n // that have undefined serialization; however, we will need to\r\n // refine the attr reflection system to achieve this; pi ca, for example,\r\n // relies on having inferredType object properties n ot removed as\r\n // attrs.\r\n } else if (inferredType === 'boolean ') {\r\n this.removeAttribute(name);\r\n }\r\n }\r\n };\r\n\r\n // exports\r\n\r\n scope.api.instance.attributes = attributes;\r\n\r\n})(Polym er);\r\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese rved.\n * This code may only be used under the BSD style license found at http:/ /polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl e as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n \n // imports\n\n var log = window.logFlags || {};\n\n // magic words\n\n va r OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var empty = [];\n\n var updateRecord = {\n object: undefined,\n type: 'update',\n name: undefin ed,\n oldValue: undefined\n };\n\n var numberIsNaN = Number.isNaN || functi on(value) {\n return typeof value === 'number' && isNaN(value);\n }\n\n fun ction areSameValue(left, right) {\n if (left === right)\n return left != = 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) && numberIsNaN(right)) \n return true;\n\n return left !== left && right !== right;\n }\n\n / / capture A's value if B's value is null or undefined,\n // otherwise use B's v alue\n function resolveBindingValue(oldValue, value) {\n if (value === undef ined && oldValue === null) {\n return value;\n }\n return (value === null || value === undefined) ? oldValue : value;\n }\n\n var properties = {\n createPropertyObserver: function() {\n var n$ = this._observeNames;\n if (n$ && n$.length) {\n var o = this._propertyObserver = new Compound Observer(true);\n this.registerObserver(o);\n // TODO(sorvell): ma y not be kosher to access the value here (this[n]);\n // previously we lo oked at the descriptor on the prototype\n // this doesn't work for inheri tance and not for accessors without\n // a value property\n for (v ar i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n o.addPath(this, n) ;\n this.observeArrayValue(n, this[n], null);\n }\n }\n },\n openPropertyObserver: function() {\n if (this._propertyObserver) {\ n this._propertyObserver.open(this.notifyPropertyChanges, this);\n } \n },\n notifyPropertyChanges: function(newValues, oldValues, paths) {\n var name, method, called = {};\n for (var i in oldValues) {\n // note: paths is of form [object, path, object, path]\n name = paths[2 * i + 1];\n method = this.observe[name];\n if (method) {\n v ar ov = oldValues[i], nv = newValues[i];\n // observes the value if it is an array\n this.observeArrayValue(name, nv, ov);\n if (!cal led[method]) {\n // only invoke change method if one of ov or nv is n ot (undefined | null)\n if ((ov !== undefined && ov !== null) || (nv !== undefined && nv !== null)) {\n called[method] = true;\n // TODO(sorvell): call method with the set of values it's expecting;\n // e.g. 'foo bar': 'invalidate' expects the new and old values for\n // foo and bar. Currently we give only one of these and then\n // deliver all the arguments.\n this.invokeMethod(method, [ ov, nv, arguments]);\n }\n }\n }\n }\n },\n deliverChanges: function() {\n if (this._propertyObserver) {\n thi s._propertyObserver.deliver();\n }\n },\n propertyChanged_: function( name, value, oldValue) {\n if (this.reflect[name]) {\n this.reflectP ropertyToAttribute(name);\n }\n },\n observeArrayValue: function(name , value, old) {\n // we only care if there are registered side-effects\n var callbackName = this.observe[name];\n if (callbackName) {\n // if we are observing the previous value, stop\n if (Array.isArray(old)) { \n log.observe && console.log('[%s] observeArrayValue: unregister obser ver [%s]', this.localName, name);\n this.closeNamedObserver(name + '__a rray');\n }\n // if the new value is an array, being observing it\ n if (Array.isArray(value)) {\n log.observe && console.log('[%s] observeArrayValue: register observer [%s]', this.localName, name, value);\n var observer = new ArrayObserver(value);\n observer.open(function (splices) {\n this.invokeMethod(callbackName, [splices]);\n }, this);\n this.registerNamedObserver(name + '__array', observer);\n }\n }\n },\n emitPropertyChangeRecord: function(name, value, ol dValue) {\n var object = this;\n if (areSameValue(value, oldValue))\n return;\n\n this.propertyChanged_(name, value, oldValue);\n\n i f (!Observer.hasObjectObserve)\n return;\n\n var notifier = this.not ifier_;\n if (!notifier)\n notifier = this.notifier_ = Object.getNot ifier(this);\n\n updateRecord.object = this;\n updateRecord.name = nam e;\n updateRecord.oldValue = oldValue;\n\n notifier.notify(updateRecor d);\n },\n bindToAccessor: function(name, observable, resolveFn) {\n var privateName = name + '_';\n var privateObservable = name + 'Observable _';\n\n this[privateObservable] = observable;\n var oldValue = this[pr ivateName];\n\n var self = this;\n var value = observable.open(functio n(value, oldValue) {\n self[privateName] = value;\n self.emitPrope rtyChangeRecord(name, value, oldValue);\n });\n\n if (resolveFn && !ar eSameValue(oldValue, value)) {\n var resolvedValue = resolveFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\n value = r esolvedValue;\n if (observable.setValue)\n observable.setVal ue(value);\n }\n }\n\n this[privateName] = value;\n this.e mitPropertyChangeRecord(name, value, oldValue);\n\n var observer = {\n close: function() {\n observable.close();\n self[privateObs ervable] = undefined;\n }\n };\n this.registerObserver(observer );\n return observer;\n },\n createComputedProperties: function() {\n if (!this._computedNames) {\n return;\n }\n\n for (var i = 0; i < this._computedNames.length; i++) {\n var name = this._computedNa mes[i];\n var expressionText = this.computed[name];\n try {\n var expression = PolymerExpressions.getExpression(expressionText);\n var observable = expression.getBinding(this, this.element.syntax);\n this.bindToAccessor(name, observable);\n } catch (ex) {\n conso le.error('Failed to create computed property', ex);\n }\n }\n },\ n bindProperty: function(property, observable, oneTime) {\n if (oneTime) {\n this[property] = observable;\n return;\n }\n return this.bindToAccessor(property, observable, resolveBindingValue);\n },\n in vokeMethod: function(method, args) {\n var fn = this[method] || method;\n if (typeof fn === 'function') {\n fn.apply(this, args);\n }\n },\n registerObserver: function(observer) {\n if (!this._observers) {\n this._observers = [observer];\n return;\n }\n\n this._o bservers.push(observer);\n },\n // observer array items are arrays of obse rvers.\n closeObservers: function() {\n if (!this._observers) {\n return;\n }\n\n var observers = this._observers;\n for (var i = 0; i < observers.length; i++) {\n var observer = observers[i];\n i f (observer && typeof observer.close == 'function') {\n observer.close( );\n }\n }\n\n this._observers = [];\n },\n // bookkeepin g observers for memory management\n registerNamedObserver: function(name, obs erver) {\n var o$ = this._namedObservers || (this._namedObservers = {});\n o$[name] = observer;\n },\n closeNamedObserver: function(name) {\n var o$ = this._namedObservers;\n if (o$ && o$[name]) {\n o$[name] .close();\n o$[name] = null;\n return true;\n }\n },\n closeNamedObservers: function() {\n if (this._namedObservers) {\n fo r (var i in this._namedObservers) {\n this.closeNamedObserver(i);\n }\n this._namedObservers = {};\n }\n }\n };\n\n // logging\ n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERVED = '[%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] propertyChanged: [%s] no w [%s] was [%s]';\n\n // exports\n\n scope.api.instance.properties = propertie s;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license fou nd at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may b e found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribu tors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribu ted by Google as part of the polymer project is also\n * subject to an additiona l IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(functio n(scope) {\n\n // imports\n\n var log = window.logFlags || 0;\n\n // element api supporting mdv\n var mdv = {\n instanceTemplate: function(template) {\n // ensure template is decorated (lets' things like <tr template ...> work)\ n HTMLTemplateElement.decorate(template);\n // ensure a default bindin gDelegate\n var syntax = this.syntax || (!template.bindingDelegate &&\n this.element.syntax);\n var dom = template.createInstance(this, synta x);\n var observers = dom.bindings_;\n for (var i = 0; i < observers.l ength; i++) {\n this.registerObserver(observers[i]);\n }\n retu rn dom;\n },\n bind: function(name, observable, oneTime) {\n var prop erty = this.propertyForAttribute(name);\n if (!property) {\n // TODO (sjmiles): this mixin method must use the special form\n // of `super` in stalled by `mixinMethod` in declaration/prototype.js\n return this.mixinS uper(arguments);\n } else {\n // use n-way Polymer binding\n var observer = this.bindProperty(property, observable, oneTime);\n // NOT E: reflecting binding information is typically required only for\n // too ling. It has a performance cost so it's opt-in in Node.bind.\n if (Platfo rm.enableBindingsReflection && observer) {\n observer.path = observable .path_;\n this._recordBinding(property, observer);\n }\n if (this.reflect[property]) {\n this.reflectPropertyToAttribute(propert y);\n }\n return observer;\n }\n },\n bindFinished: fun ction() {\n this.makeElementReady();\n },\n _recordBinding: function( name, observer) {\n this.bindings_ = this.bindings_ || {};\n this.bind ings_[name] = observer;\n },\n // TODO(sorvell): unbind/unbindAll has been removed, as public api, from\n // TemplateBinding. We still need to close/di spose of observers but perhaps\n // we should choose a more explicit name.\n asyncUnbindAll: function() {\n if (!this._unbound) {\n log.unbind && console.log('[%s] asyncUnbindAll', this.localName);\n this._unbindAll Job = this.job(this._unbindAllJob, this.unbindAll, 0);\n }\n },\n unb indAll: function() {\n if (!this._unbound) {\n this.closeObservers() ;\n this.closeNamedObservers();\n this._unbound = true;\n }\n },\n cancelUnbindAll: function() {\n if (this._unbound) {\n l og.unbind && console.warn('[%s] already unbound, cannot cancel unbindAll', this. localName);\n return;\n }\n log.unbind && console.log('[%s] can celUnbindAll', this.localName);\n if (this._unbindAllJob) {\n this._ unbindAllJob = this._unbindAllJob.stop();\n }\n }\n };\n\n function un bindNodeTree(node) {\n forNodeTree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n node.unbindAll();\n }\n\n function forNodeTree(nod e, callback) {\n if (node) {\n callback(node);\n for (var child = n ode.firstChild; child; child = child.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n }\n\n var mustachePattern = /\\{\\{([^{}]*)}}/;\n \n // exports\n\n scope.bindPattern = mustachePattern;\n scope.api.instance.m dv = mdv;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Autho rs. All rights reserved.\n * This code may only be used under the BSD style lice nse found at http://polymer.github.io/LICENSE.txt\n * The complete set of author s may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of c ontributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code d istributed by Google as part of the polymer project is also\n * subject to an ad ditional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n( function(scope) {\n\n var base = {\n PolymerBase: true,\n job: function(j ob, callback, wait) {\n if (typeof job === 'string') {\n var n = '__ _' + job;\n this[n] = Polymer.job.call(this, this[n], callback, wait);\n } else {\n return Polymer.job.call(this, job, callback, wait);\n }\n },\n super: Polymer.super,\n // user entry point for element has had its createdCallback called\n created: function() {\n },\n // user e ntry point for element has shadowRoot and is ready for\n // api interaction\n ready: function() {\n },\n createdCallback: function() {\n if (th is.templateInstance && this.templateInstance.model) {\n console.warn('Att ributes on ' + this.localName + ' were data bound ' +\n 'prior to Pol ymer upgrading the element. This may result in ' +\n 'incorrect bindi ng types.');\n }\n this.created();\n this.prepareElement();\n if (!this.ownerDocument.isStagingDocument) {\n this.makeElementReady(); \n }\n },\n // system entry point, do not override\n prepareElemen t: function() {\n if (this._elementPrepared) {\n console.warn('Eleme nt already prepared', this.localName);\n return;\n }\n this._el ementPrepared = true;\n // storage for shadowRoots info\n this.shadowR oots = {};\n // install property observers\n this.createPropertyObserv er();\n this.openPropertyObserver();\n // install boilerplate attribut es\n this.copyInstanceAttributes();\n // process input attributes\n this.takeAttributes();\n // add event listeners\n this.addHostListe ners();\n },\n makeElementReady: function() {\n if (this._readied) {\ n return;\n }\n this._readied = true;\n this.createCompute dProperties();\n // TODO(sorvell): We could create an entry point here\n // for the user to compute property values.\n // process declarative res ources\n this.parseDeclarations(this.__proto__);\n // TODO(sorvell): C E polyfill uses unresolved attribute to simulate\n // :unresolved; remove t his attribute to be compatible with native\n // CE.\n this.removeAttri bute('unresolved');\n // user entry point\n this.ready();\n },\n attachedCallback: function() {\n this.cancelUnbindAll();\n // invoke user action\n if (this.attached) {\n this.attached();\n }\n // TODO(sorvell): bc\n if (this.enteredView) {\n this.enteredView( );\n }\n // NOTE: domReady can be used to access elements in dom (desc endants,\n // ancestors, siblings) such that the developer is enured to upg rade\n // ordering. If the element definitions have loaded, domReady\n // can be used to access upgraded elements.\n if (!this.hasBeenAttached) { \n this.hasBeenAttached = true;\n if (this.domReady) {\n this.async('domReady');\n }\n }\n },\n detachedCallback: funct ion() {\n if (!this.preventDispose) {\n this.asyncUnbindAll();\n }\n // invoke user action\n if (this.detached) {\n this.detac hed();\n }\n // TODO(sorvell): bc\n if (this.leftView) {\n this.leftView();\n }\n },\n // TODO(sorvell): bc\n enteredViewCal lback: function() {\n this.attachedCallback();\n },\n // TODO(sorvell ): bc\n leftViewCallback: function() {\n this.detachedCallback();\n } ,\n // TODO(sorvell): bc\n enteredDocumentCallback: function() {\n th is.attachedCallback();\n },\n // TODO(sorvell): bc\n leftDocumentCallba ck: function() {\n this.detachedCallback();\n },\n // recursive ances tral <element> initialization, oldest first\n parseDeclarations: function(p) {\n if (p && p.element) {\n this.parseDeclarations(p.__proto__);\n p.parseDeclaration.call(this, p.element);\n }\n },\n // parse i nput <element> as needed, override for custom behavior\n parseDeclaration: fu nction(elementElement) {\n var template = this.fetchTemplate(elementElement );\n if (template) {\n var root = this.shadowFromTemplate(template); \n this.shadowRoots[elementElement.name] = root;\n }\n },\n // return a shadow-root template (if desired), override for custom behavior\n f etchTemplate: function(elementElement) {\n return elementElement.querySelec tor('template');\n },\n // utility function that creates a shadow root fro m a <template>\n shadowFromTemplate: function(template) {\n if (template ) {\n // make a shadow root\n var root = this.createShadowRoot();\ n // stamp template\n // which includes parsing and applying MDV b indings before being\n // inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanceTemplate(template);\n // append to shadow dom\n root.appendChild(dom);\n // perform post-construction initia lization tasks on shadow root\n this.shadowRootReady(root, template);\n // return the created shadow root\n return root;\n }\n },\n // utility function that stamps a <template> into light-dom\n lightFromTe mplate: function(template, refNode) {\n if (template) {\n // TODO(so rvell): mark this element as an eventController so that\n // event listen ers on bound nodes inside it will be called on it.\n // Note, the expecta tion here is that events on all descendants\n // should be handled by thi s element.\n this.eventController = this;\n // stamp template\n // which includes parsing and applying MDV bindings before being\n / / inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instance Template(template);\n // append to shadow dom\n if (refNode) {\n this.insertBefore(dom, refNode);\n } else {\n this.appen dChild(dom);\n }\n // perform post-construction initialization tas ks on ahem, light root\n this.shadowRootReady(this);\n // return t he created shadow root\n return dom;\n }\n },\n shadowRootRead y: function(root) {\n // locate nodes with id and store references to them in this.$ hash\n this.marshalNodeReferences(root);\n },\n // locate n odes with id and store references to them in this.$ hash\n marshalNodeReferen ces: function(root) {\n // establish $ instance variable\n var $ = thi s.$ = this.$ || {};\n // populate $ from nodes with ID from the LOCAL tree\ n if (root) {\n var n$ = root.querySelectorAll(\"[id]\");\n f or (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n $[n.id] = n;\ n };\n }\n },\n attributeChangedCallback: function(name, oldVa lue) {\n // TODO(sjmiles): adhoc filter\n if (name !== 'class' && name !== 'style') {\n this.attributeToProperty(name, this.getAttribute(name)) ;\n }\n if (this.attributeChanged) {\n this.attributeChanged.ap ply(this, arguments);\n }\n },\n onMutation: function(node, listener) {\n var observer = new MutationObserver(function(mutations) {\n lis tener.call(this, observer, mutations);\n observer.disconnect();\n }. bind(this));\n observer.observe(node, {childList: true, subtree: true});\n }\n };\n\n // true if object has own PolymerBase api\n function isBase(obj ect) {\n return object.hasOwnProperty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n function PolymerBase() {};\n PolymerBase.protot ype = base;\n base.constructor = PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = isBase;\n scope.api.instance.base = base;\n\n}) (Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at ht tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G oogle as part of the polymer project is also\n * subject to an additional IP rig hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var hasShadowDOMPoly fill = window.ShadowDOMPolyfill;\n\n // magic words\n \n var STYLE_SCOPE_ATTR IBUTE = 'element';\n var STYLE_CONTROLLER_SCOPE = 'controller';\n \n var styl es = {\n STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Insta lls external stylesheets and <style> elements with the attribute \n * polyme r-scope='controller' into the scope of element. This is intended\n * to be a called during custom element construction.\n */\n installControllerStyles : function() {\n // apply controller styles, but only if they are not yet a pplied\n var scope = this.findStyleScope();\n if (scope && !this.scope HasNamedStyle(scope, this.localName)) {\n // allow inherited controller s tyles\n var proto = getPrototypeOf(this), cssText = '';\n while (p roto && proto.element) {\n cssText += proto.element.cssTextForScope(STY LE_CONTROLLER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (cssText) {\n this.installScopeCssText(cssText, scope);\n }\n }\n },\n installScopeStyle: function(style, name, scope) {\n var scope = scope || this.findStyleScope(), name = name || '';\n if (scop e && !this.scopeHasNamedStyle(scope, this.localName + name)) {\n var cssT ext = '';\n if (style instanceof Array) {\n for (var i=0, l=styl e.length, s; (i<l) && (s=style[i]); i++) {\n cssText += s.textContent + '\\n\\n';\n }\n } else {\n cssText = style.textConte nt;\n }\n this.installScopeCssText(cssText, scope, name);\n } \n },\n installScopeCssText: function(cssText, scope, name) {\n scope = scope || this.findStyleScope();\n name = name || '';\n if (!scope) {\n return;\n }\n if (hasShadowDOMPolyfill) {\n cssText = shimCssText(cssText, scope.host);\n }\n var style = this.element.css TextToScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.app lyStyleToScope(style, scope);\n // cache that this style has been applied\n this.styleCacheForScope(scope)[this.localName + name] = true;\n },\n findStyleScope: function(node) {\n // find the shadow root that contains t his element\n var n = node || this;\n while (n.parentNode) {\n n = n.parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: fun ction(scope, name) {\n var cache = this.styleCacheForScope(scope);\n r eturn cache[name];\n },\n styleCacheForScope: function(scope) {\n if (hasShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localN ame : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (po lyfillScopeStyleCache[scopeName] = {});\n } else {\n return scope._s copeStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfill ScopeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ens ure correct traversal\n // on platforms where the protoype chain is simulated v ia __proto__ (IE10)\n function getPrototypeOf(prototype) {\n return prototyp e.__proto__;\n }\n\n function shimCssText(cssText, host) {\n var name = '', is = false;\n if (host) {\n name = host.localName;\n is = host.has Attribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector (name, is);\n return Platform.ShadowCSS.shimCssText(cssText, selector);\n }\ n\n // exports\n\n scope.api.instance.styles = styles;\n \n})(Polymer);\n\n/* \n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Th is code may only be used under the BSD style license found at http://polymer.git hub.io/LICENSE.txt\n * The complete set of authors may be found at http://polyme r.github.io/AUTHORS.txt\n * The complete set of contributors may be found at htt p://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // impor ts\n\n var extend = scope.extend;\n var api = scope.api;\n\n // imperative im plementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n fun ction element(name, prototype) {\n if (typeof name !== 'string') {\n var script = prototype || document._currentScript;\n prototype = name;\n name = script && script.parentNode && script.parentNode.getAttribute ?\n script.parentNode.getAttribute('name') : '';\n if (!name) {\n thro w 'Element name could not be inferred.';\n }\n }\n if (getRegisteredP rototype[name]) {\n throw 'Already registered (Polymer) prototype for eleme nt ' + name;\n }\n // cache the prototype\n registerPrototype(name, pro totype);\n // notify the registrar waiting for 'name', if any\n notifyProt otype(name);\n }\n\n // async prototype source\n\n function waitingForPrototy pe(name, client) {\n waitPrototype[name] = client;\n }\n\n var waitPrototyp e = {};\n\n function notifyPrototype(name) {\n if (waitPrototype[name]) {\n waitPrototype[name].registerWhenReady();\n delete waitPrototype[name]; \n }\n }\n\n // utility and bookkeeping\n\n // maps tag names to prototype s, as registered with\n // Polymer. Prototypes associated with a tag name\n // using document.registerElement are available from\n // HTMLElement.getPrototyp eForTag().\n // If an element was fully registered by Polymer, then\n // Polym er.getRegisteredPrototype(name) === \n // HTMLElement.getPrototypeForTag(name )\n\n var prototypesByName = {};\n\n function registerPrototype(name, prototyp e) {\n return prototypesByName[name] = prototype || {};\n }\n\n function ge tRegisteredPrototype(name) {\n return prototypesByName[name];\n }\n\n // ex ports\n\n scope.getRegisteredPrototype = getRegisteredPrototype;\n scope.waiti ngForPrototype = waitingForPrototype;\n\n // namespace shenanigans so we can ex pose our scope on the registration \n // function\n\n // make window.Polymer r eference `element()`\n\n window.Polymer = element;\n\n // TODO(sjmiles): find a way to do this that is less terrible\n // copy window.Polymer properties onto `element()`\n\n extend(Polymer, scope);\n\n // Under the HTMLImports polyfill , scripts in the main document\n // do not block on imports; we want to allow c alls to Polymer in the main\n // document. Platform collects those calls until we can process them, which\n // we do here.\n\n if (Platform.consumeDeclaratio ns) {\n Platform.consumeDeclarations(function(declarations) {;\n if (dec larations) {\n for (var i=0, l=declarations.length, d; (i<l) && (d=declar ations[i]); i++) {\n element.apply(null, d);\n }\n }\n } );\n }\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors . All rights reserved.\n * This code may only be used under the BSD style licens e found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of con tributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code dis tributed by Google as part of the polymer project is also\n * subject to an addi tional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(fu nction(scope) {\n\nvar path = {\n resolveElementPaths: function(node) {\n Po lymer.urlResolver.resolveDom(node);\n },\n addResolvePathApi: function() {\n // let assetpath attribute modify the resolve path\n var assetPath = this.g etAttribute('assetpath') || '';\n var root = new URL(assetPath, this.ownerDoc ument.baseURI);\n this.prototype.resolvePath = function(urlPath, base) {\n var u = new URL(urlPath, base || root);\n return u.href;\n };\n }\n} ;\n\n// exports\nscope.api.declaration.path = path;\n\n})(Polymer);\n\n/*\n * Co pyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/ LICENSE.txt\n * The complete set of authors may be found at http://polymer.githu b.io/AUTHORS.txt\n * The complete set of contributors may be found at http://pol ymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the po lymer project is also\n * subject to an additional IP rights grant found at http ://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api.instance.styles;\n var STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n var hasShadowDOMPolyfil l = window.ShadowDOMPolyfill;\n\n // magic words\n\n var STYLE_SELECTOR = 'sty le';\n var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel= stylesheet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_ATTR = 'polymer -scope';\n\n var styles = {\n // returns true if resources are loading\n loadStyles: function(callback) {\n var template = this.fetchTemplate();\n var content = template && this.templateContent();\n if (content) {\n this.convertSheetsToStyles(content);\n var styles = this.findLoadabl eStyles(content);\n if (styles.length) {\n var templateUrl = tem plate.ownerDocument.baseURI;\n return Polymer.styleResolver.loadStyles( styles, templateUrl, callback);\n }\n }\n if (callback) {\n callback();\n }\n },\n convertSheetsToStyles: function(root) {\n var s$ = root.querySelectorAll(SHEET_SELECTOR);\n for (var i=0, l=s$.l ength, s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRu leForSheet(s, this.ownerDocument.baseURI),\n this.ownerDocument);\n this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\ n }\n },\n copySheetAttributes: function(style, link) {\n for (v ar i=0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n if (a.name !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name, a.value);\n }\n }\n },\n findLoadableStyles: function(root) { \n var loadables = [];\n if (root) {\n var s$ = root.querySelec torAll(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i] ); i++) {\n if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n loadables.push(s);\n }\n }\n }\n return loadables;\ n },\n /**\n * Install external stylesheets loaded in <polymer-element > elements into the \n * element's template.\n * @param elementElement T he <element> element to style.\n */\n installSheets: function() {\n this.cacheSheets();\n this.cacheStyles();\n this.installLocalSheets(); \n this.installGlobalStyles();\n },\n /**\n * Remove all sheets f rom element and store for later use.\n */\n cacheSheets: function() {\n this.sheets = this.findNodes(SHEET_SELECTOR);\n this.sheets.forEach(fun ction(s) {\n if (s.parentNode) {\n s.parentNode.removeChild(s);\ n }\n });\n },\n cacheStyles: function() {\n this.styles = this.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.fo rEach(function(s) {\n if (s.parentNode) {\n s.parentNode.removeC hild(s);\n }\n });\n },\n /**\n * Takes external styleshee ts loaded in an <element> element and moves\n * their content into a <style> element inside the <element>'s template.\n * The sheet is then removed from the <element>. This is done only so \n * that if the element is loaded in t he main document, the sheet does\n * not become active.\n * Note, ignore s sheets with the attribute 'polymer-scope'.\n * @param elementElement The < element> element to style.\n */\n installLocalSheets: function () {\n var sheets = this.sheets.filter(function(s) {\n return !s.hasAttribute( SCOPE_ATTR);\n });\n var content = this.templateContent();\n if ( content) {\n var cssText = '';\n sheets.forEach(function(sheet) {\ n cssText += cssTextFromSheet(sheet) + '\\n';\n });\n if (cssText) {\n var style = createStyleElement(cssText, this.ownerDocumen t);\n content.insertBefore(style, content.firstChild);\n }\n }\n },\n findNodes: function(selector, matcher) {\n var nodes = thi s.querySelectorAll(selector).array();\n var content = this.templateContent( );\n if (content) {\n var templateNodes = content.querySelectorAll(s elector).array();\n nodes = nodes.concat(templateNodes);\n }\n return matcher ? nodes.filter(matcher) : nodes;\n },\n /**\n * Promote s external stylesheets and <style> elements with the attribute \n * polymer- scope='global' into global scope.\n * This is particularly useful for defini ng @keyframe rules which \n * currently do not function in scoped or shadow style elements.\n * (See wkb.ug/72462)\n * @param elementElement The <el ement> element to style.\n */\n // TODO(sorvell): remove when wkb.ug/72462 is addressed.\n installGlobalStyles: function() {\n var style = this.st yleForScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style, document.head); \n },\n cssTextForScope: function(scopeDescriptor) {\n var cssText = '';\n // handle stylesheets\n var selector = '[' + SCOPE_ATTR + '=' + scopeDescriptor + ']';\n var matcher = function(s) {\n return matche sSelector(s, selector);\n };\n var sheets = this.sheets.filter(matcher );\n sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet( sheet) + '\\n\\n';\n });\n // handle cached style elements\n var styles = this.styles.filter(matcher);\n styles.forEach(function(style) {\n cssText += style.textContent + '\\n\\n';\n });\n return cssText ;\n },\n styleForScope: function(scopeDescriptor) {\n var cssText = t his.cssTextForScope(scopeDescriptor);\n return this.cssTextToScopeStyle(css Text, scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scop eDescriptor) {\n if (cssText) {\n var style = createStyleElement(css Text);\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('nam e') +\n '-' + scopeDescriptor);\n return style;\n }\n }\n };\n\n function importRuleForSheet(sheet, baseUrl) {\n var href = new U RL(sheet.getAttribute('href'), baseUrl).href;\n return '@import \\'' + href + '\\';';\n }\n\n function applyStyleToScope(style, scope) {\n if (style) {\ n if (scope === document) {\n scope = document.head;\n }\n if (hasShadowDOMPolyfill) {\n scope = document.head;\n }\n // TODO(sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/f eedback/details/790212/\n // cloning-a-style-element-and-adding-to-document -produces\n // -unexpected-result#details\n // var clone = style.clone Node(true);\n var clone = createStyleElement(style.textContent);\n var attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (attr) {\n c lone.setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n // TODO(sorvell) : probably too brittle; try to figure out \n // where to put the element.\n var refNode = scope.firstElementChild;\n if (scope === document.head) {\n var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelectorAll(selector);\n if (s$.length) {\n refNode = s$[s$.length-1].nextElementSibling;\n }\n }\n sco pe.insertBefore(clone, refNode);\n }\n }\n\n function createStyleElement(cs sText, scope) {\n scope = scope || document;\n scope = scope.createElement ? scope : scope.ownerDocument;\n var style = scope.createElement('style');\n style.textContent = cssText;\n return style;\n }\n\n function cssTextFr omSheet(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n functi on matchesSelector(node, inSelector) {\n if (matches) {\n return matches .call(node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var ma tches = p.matches || p.matchesSelector || p.webkitMatchesSelector \n || p.m ozMatchesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles; \n scope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n\n/*\n * Cop yright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/L ICENSE.txt\n * The complete set of authors may be found at http://polymer.github .io/AUTHORS.txt\n * The complete set of contributors may be found at http://poly mer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the pol ymer project is also\n * subject to an additional IP rights grant found at http: //polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api.instance.events;\n var EVENT_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarative api: events f eature\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOM FocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCaseEventTy pes[e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: funct ion() {\n // our delegates map\n var delegates = this.prototype.eventD elegates;\n // extract data from attributes into delegates\n this.addA ttributeDelegates(delegates);\n },\n addAttributeDelegates: function(deleg ates) {\n // for each attribute\n for (var i=0, a; a=this.attributes[i ]; i++) {\n // does it have magic marker identifying it as an event deleg ate?\n if (this.hasEventPrefix(a.name)) {\n // if so, add the in fo to delegates\n delegates[this.removeEventPrefix(a.name)] = a.value.r eplace('{{', '')\n .replace('}}', '').trim();\n }\n }\n },\n // starts with 'on-'\n hasEventPrefix: function (n) {\n retu rn n && (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n },\n removeE ventPrefix: function(n) {\n return n.slice(prefixLength);\n },\n find Controller: function(node) {\n while (node.parentNode) {\n if (node. eventController) {\n return node.eventController;\n }\n n ode = node.parentNode;\n }\n return node.host;\n },\n getEventHa ndler: function(controller, target, method) {\n var events = this;\n r eturn function(e) {\n if (!controller || !controller.PolymerBase) {\n controller = events.findController(target);\n }\n\n var args = [e, e.detail, e.currentTarget];\n controller.dispatchMethod(controller , method, args);\n };\n },\n prepareEventBinding: function(pathString , name, node) {\n if (!this.hasEventPrefix(name))\n return;\n\n var eventType = this.removeEventPrefix(name);\n eventType = mixedCaseEvent Types[eventType] || eventType;\n\n var events = this;\n\n return funct ion(model, node, oneTime) {\n var handler = events.getEventHandler(undefi ned, node, pathString);\n PolymerGestures.addEventListener(node, eventTyp e, handler);\n\n if (oneTime)\n return;\n\n // TODO(rafae lw): This is really pointless work. Aside from the cost\n // of these all ocations, NodeBind is going to setAttribute back to its\n // current valu e. Fixing this would mean changing the TemplateBinding\n // binding deleg ate API.\n function bindingValue() {\n return '{{ ' + pathString + ' }}';\n }\n\n return {\n open: bindingValue,\n discardChanges: bindingValue,\n close: function() {\n Pol ymerGestures.removeEventListener(node, eventType, handler);\n }\n };\n };\n }\n };\n\n var prefixLength = EVENT_PREFIX.length;\n\n // exports\n scope.api.declaration.events = events;\n\n})(Polymer);\n\n/*\n * Cop yright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/L ICENSE.txt\n * The complete set of authors may be found at http://polymer.github .io/AUTHORS.txt\n * The complete set of contributors may be found at http://poly mer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the pol ymer project is also\n * subject to an additional IP rights grant found at http: //polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // element api\n \n var properties = {\n inferObservers: function(prototype) {\n // call ed before prototype.observe is chained to inherited object\n var observe = prototype.observe, property;\n for (var n in prototype) {\n if (n.sl ice(-7) === 'Changed') {\n if (!observe) {\n observe = (pro totype.observe = {});\n }\n property = n.slice(0, -7)\n observe[property] = observe[property] || n;\n }\n }\n },\n explodeObservers: function(prototype) {\n // called before prototype.observ e is chained to inherited object\n var o = prototype.observe;\n if (o) {\n var exploded = {};\n for (var n in o) {\n var names = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n ex ploded[ni] = o[n];\n }\n }\n prototype.observe = exploded ;\n }\n },\n optimizePropertyMaps: function(prototype) {\n if (p rototype.observe) {\n // construct name list\n var a = prototype._ observeNames = [];\n for (var n in prototype.observe) {\n var na mes = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++) {\n a.push(ni);\n }\n }\n }\n if (prototype.publish) {\n // construct name list\n var a = prototype._publishNames = [];\n for (var n in prototype.publish) {\n a.push(n);\n }\n }\n if (prototype.computed) {\n // construct name list\n va r a = prototype._computedNames = [];\n for (var n in prototype.computed) {\n a.push(n);\n }\n }\n },\n publishProperties: func tion(prototype, base) {\n // if we have any properties to publish\n va r publish = prototype.publish;\n if (publish) {\n // transcribe `pub lish` entries onto own prototype\n this.requireProperties(publish, protot ype, base);\n // construct map of lower-cased property names\n pro totype._publishLC = this.lowerCaseMap(publish);\n }\n },\n //\n // `name: value` entries in the `publish` object may need to generate \n // mat ching properties on the prototype.\n //\n // Values that are objects may h ave a `reflect` property, which\n // signals that the value describes propert y control metadata.\n // In metadata objects, the prototype default value (if any)\n // is encoded in the `value` property.\n //\n // publish: {\n // foo: 5, \n // bar: {value: true, reflect: true},\n // zot: {}\n // }\n //\n // `reflect` metadata property controls whether changes to the property\n // are reflected back to the attribute (default false). \n //\n // A value is stored on the prototype unless it's === `undefined`,\n // in which case the base chain is checked for a value.\n // If the basal va lue is also undefined, `null` is stored on the prototype.\n //\n // The re flection data is stored on another prototype object, `reflect`\n // which als o can be specified directly.\n //\n // reflect: {\n // foo: true\n // }\n //\n requireProperties: function(propertyInfos, prototype, base) { \n // per-prototype storage for reflected properties\n prototype.refle ct = prototype.reflect || {};\n // ensure a prototype value for each proper ty\n // and update the property's reflect to attribute status\n for (v ar n in propertyInfos) {\n var value = propertyInfos[n];\n // valu e has metadata if it has a `reflect` property\n if (value && value.reflec t !== undefined) {\n prototype.reflect[n] = Boolean(value.reflect);\n value = value.value;\n }\n // only set a value if one is s pecified\n if (value !== undefined) {\n prototype[n] = value;\n }\n }\n },\n lowerCaseMap: function(properties) {\n var m ap = {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n }\n return map;\n },\n createPropertyAccessor: function(name) { \n var proto = this.prototype;\n\n var privateName = name + '_';\n var privateObservable = name + 'Observable_';\n proto[privateName] = pro to[name];\n\n Object.defineProperty(proto, name, {\n get: function() {\n var observable = this[privateObservable];\n if (observabl e)\n observable.deliver();\n\n return this[privateName];\n },\n set: function(value) {\n var observable = this[privat eObservable];\n if (observable) {\n observable.setValue(valu e);\n return;\n }\n\n var oldValue = this[privateNa me];\n this[privateName] = value;\n this.emitPropertyChangeRec ord(name, value, oldValue);\n\n return value;\n },\n conf igurable: true\n });\n },\n createPropertyAccessors: function(prototy pe) {\n var n$ = prototype._publishNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n th is.createPropertyAccessor(n);\n }\n }\n var n$ = prototype._com putedNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\n }\n }\n }\n };\n\n // exports\n\n scope.api.declaration.propertie s = properties;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD styl e license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete se t of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n * /\n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attri butes';\n var ATTRIBUTES_REGEX = /\\s|,/;\n\n // attributes api\n\n var attri butes = {\n \n inheritAttributesObjects: function(prototype) {\n // c hain our lower-cased publish map to the inherited version\n this.inheritObj ect(prototype, 'publishLC');\n // chain our instance attributes map to the inherited version\n this.inheritObject(prototype, '_instanceAttributes');\n },\n\n publishAttributes: function(prototype, base) {\n // merge nam es from 'attributes' attribute into the 'publish' object\n var attributes = this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if (attributes) {\n // c reate a `publish` object if needed.\n // the `publish` object is only rel evant to this prototype, the \n // publishing logic in `declaration/prope rties.js` is responsible for\n // managing property values on the prototy pe chain.\n // TODO(sjmiles): the `publish` object is later chained to it 's \n // ancestor object, presumably this is only for \n // reflection or other non-library uses. \n var publ ish = prototype.publish || (prototype.publish = {}); \n // names='a b c' or names='a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // record each name for publishing\n for (var i=0, l=names.length, n; i<l; i++) {\n // remove excess ws\n n = names[i].trim();\n // looks weird, but causes n to exist on `publish` if it does not;\n // a more careful test would need expensive `in` operator\n if (n & & publish[n] === undefined) {\n publish[n] = undefined;\n }\ n }\n }\n },\n\n // record clonable attributes from <element>\ n accumulateInstanceAttributes: function() {\n // inherit instance attri butes\n var clonable = this.prototype._instanceAttributes;\n // merge attributes from element\n var a$ = this.attributes;\n for (var i=0, l= a$.length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInstanceAttribute (a.name)) {\n clonable[a.name] = a.value;\n }\n }\n },\n \n isInstanceAttribute: function(name) {\n return !this.blackList[name] && name.slice(0,3) !== 'on-';\n },\n\n // do not clone these attributes on to instances\n blackList: {\n name: 1,\n 'extends': 1,\n const ructor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-csstext': 1\n }\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n attributes .blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api.declaration .attributes = attributes;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polym er Project Authors. All rights reserved.\n * This code may only be used under th e BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comple te set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The c omplete set of contributors may be found at http://polymer.github.io/CONTRIBUTOR S.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt\n */\n\n(function(scope) {\n\n // imports\n var events = scope.api.decl aration.events;\n\n var syntax = new PolymerExpressions();\n var prepareBindin g = syntax.prepareBinding;\n\n // Polymer takes a first crack at the binding to see if it's a declarative\n // event handler.\n syntax.prepareBinding = funct ion(pathString, name, node) {\n return events.prepareEventBinding(pathString, name, node) ||\n prepareBinding.call(syntax, pathString, name, node); \n };\n\n // declaration api supporting mdv\n var mdv = {\n syntax: syntax ,\n fetchTemplate: function() {\n return this.querySelector('template'); \n },\n templateContent: function() {\n var template = this.fetchTemp late();\n return template && template.content;\n },\n installBindingD elegate: function(template) {\n if (template) {\n template.bindingDe legate = this.syntax;\n }\n }\n };\n\n // exports\n scope.api.declara tion.mdv = mdv;\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD styl e license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete se t of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n * /\n\n(function(scope) {\n\n // imports\n \n var api = scope.api;\n var isBas e = scope.isBase;\n var extend = scope.extend;\n\n var hasShadowDOMPolyfill = window.ShadowDOMPolyfill;\n\n // prototype api\n\n var prototype = {\n\n re gister: function(name, extendeeName) {\n // build prototype combining exten dee, Polymer base, and named api\n this.buildPrototype(name, extendeeName); \n // register our custom element with the platform\n this.registerPro totype(name, extendeeName);\n // reference constructor in a global named by 'constructor' attribute\n this.publishConstructor();\n },\n\n buildP rototype: function(name, extendeeName) {\n // get our custom prototype (bef ore chaining)\n var extension = scope.getRegisteredPrototype(name);\n // get basal prototype\n var base = this.generateBasePrototype(extendeeName );\n // implement declarative features\n this.desugarBeforeChaining(ex tension, base);\n // join prototypes\n this.prototype = this.chainProt otypes(extension, base);\n // more declarative features\n this.desugar AfterChaining(name, extendeeName);\n },\n\n desugarBeforeChaining: functio n(prototype, base) {\n // back reference declaration element\n // TODO (sjmiles): replace `element` with `elementElement` or `declaration`\n proto type.element = this;\n // transcribe `attributes` declarations onto own pro totype's `publish`\n this.publishAttributes(prototype, base);\n // `pu blish` properties to the prototype and to attribute watch\n this.publishPro perties(prototype, base);\n // infer observers for `observe` list based on method names\n this.inferObservers(prototype);\n // desugar compound o bserver syntax, e.g. 'a b c' \n this.explodeObservers(prototype);\n },\n \n chainPrototypes: function(prototype, base) {\n // chain various meta- data objects to inherited versions\n this.inheritMetaData(prototype, base); \n // chain custom api to inherited\n var chained = this.chainObject(p rototype, base);\n // x-platform fixup\n ensurePrototypeTraversal(chai ned);\n return chained;\n },\n\n inheritMetaData: function(prototype, base) {\n // chain observe object to inherited\n this.inheritObject(' observe', prototype, base);\n // chain publish object to inherited\n t his.inheritObject('publish', prototype, base);\n // chain reflect object to inherited\n this.inheritObject('reflect', prototype, base);\n // chai n our lower-cased publish map to the inherited version\n this.inheritObject ('_publishLC', prototype, base);\n // chain our instance attributes map to the inherited version\n this.inheritObject('_instanceAttributes', prototype , base);\n // chain our event delegates map to the inherited version\n this.inheritObject('eventDelegates', prototype, base);\n },\n\n // implem ent various declarative features\n desugarAfterChaining: function(name, exten dee) {\n // build side-chained lists to optimize iterations\n this.opt imizePropertyMaps(this.prototype);\n this.createPropertyAccessors(this.prot otype);\n // install mdv delegate on template\n this.installBindingDel egate(this.fetchTemplate());\n // install external stylesheets as if they a re inline\n this.installSheets();\n // adjust any paths in dom from im ports\n this.resolveElementPaths(this);\n // compile list of attribute s to copy to instances\n this.accumulateInstanceAttributes();\n // par se on-* delegates declared on `this` element\n this.parseHostEvents();\n //\n // install a helper method this.resolvePath to aid in \n // se tting resource urls. e.g.\n // this.$.image.src = this.resolvePath('images/ foo.png')\n this.addResolvePathApi();\n // under ShadowDOMPolyfill, tr ansforms to approximate missing CSS features\n if (hasShadowDOMPolyfill) {\ n Platform.ShadowCSS.shimStyling(this.templateContent(), name, extendee); \n }\n // allow custom element access to the declarative context\n if (this.prototype.registerCallback) {\n this.prototype.registerCallbac k(this);\n }\n },\n\n // if a named constructor is requested in eleme nt, map a reference\n // to the constructor to the given symbol\n publishC onstructor: function() {\n var symbol = this.getAttribute('constructor');\n if (symbol) {\n window[symbol] = this.ctor;\n }\n },\n\n // build prototype combining extendee, Polymer base, and named api\n generat eBasePrototype: function(extnds) {\n var prototype = this.findBasePrototype (extnds);\n if (!prototype) {\n // create a prototype based on tag-n ame extension\n var prototype = HTMLElement.getPrototypeForTag(extnds);\n // insert base api in inheritance chain (if needed)\n prototype = this.ensureBaseApi(prototype);\n // memoize this base\n memoizedB ases[extnds] = prototype;\n }\n return prototype;\n },\n\n findB asePrototype: function(name) {\n return memoizedBases[name];\n },\n\n // install Polymer instance api into prototype chain, as needed \n ensureBas eApi: function(prototype) {\n if (prototype.PolymerBase) {\n return prototype;\n }\n var extended = Object.create(prototype);\n // we need a unique copy of base api for each base prototype\n // therefore we ' extend' here instead of simply chaining\n api.publish(api.instance, extende d);\n // TODO(sjmiles): sharing methods across prototype chains is\n / / not supported by 'super' implementation which optimizes\n // by memoizing prototype relationships.\n // Probably we should have a version of 'extend ' that is \n // share-aware: it could study the text of each function,\n // look for usage of 'super', and wrap those functions in\n // closures. \n // As of now, there is only one problematic method, so \n // we jus t patch it manually.\n // To avoid re-entrancy problems, the special super method\n // installed is called `mixinSuper` and the mixin method\n // must use this method instead of the default `super`.\n this.mixinMethod(ex tended, prototype, api.instance.mdv, 'bind');\n // return buffed-up prototy pe\n return extended;\n },\n\n mixinMethod: function(extended, protot ype, api, name) {\n var $super = function(args) {\n return prototype [name].apply(this, args);\n };\n extended[name] = function() {\n this.mixinSuper = $super;\n return api[name].apply(this, arguments);\n }\n },\n\n // ensure prototype[name] inherits from a prototype.protot ype[name]\n inheritObject: function(name, prototype, base) {\n // requir e an object\n var source = prototype[name] || {};\n // chain inherited properties onto a new object\n prototype[name] = this.chainObject(source, base[name]);\n },\n\n // register 'prototype' to custom element 'name', st ore constructor \n registerPrototype: function(name, extendee) { \n var info = {\n prototype: this.prototype\n }\n // native element mu st be specified in extends\n var typeExtension = this.findTypeExtension(ext endee);\n if (typeExtension) {\n info.extends = typeExtension;\n }\n // register the prototype with HTMLElement for name lookup\n HTM LElement.register(name, this.prototype);\n // register the custom type\n this.ctor = document.registerElement(name, info);\n },\n\n findTypeExte nsion: function(name) {\n if (name && name.indexOf('-') < 0) {\n ret urn name;\n } else {\n var p = this.findBasePrototype(name);\n if (p.element) {\n return this.findTypeExtension(p.element.extends);\ n }\n }\n }\n\n };\n\n // memoize base prototypes\n var memoiz edBases = {};\n\n // implementation of 'chainObject' depends on support for __p roto__\n if (Object.__proto__) {\n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inherited) {\n object.__proto__ = inherited;\n }\n return object;\n }\n } else {\ n prototype.chainObject = function(object, inherited) {\n if (object && inherited && object !== inherited) {\n var chained = Object.create(inheri ted);\n object = extend(chained, object);\n }\n return object;\ n }\n }\n\n // On platforms that do not support __proto__ (versions of IE), the prototype\n // chain of a custom element is simulated via installation of __proto__.\n // Although custom elements manages this, we install it here so it 's\n // available during desugaring.\n function ensurePrototypeTraversal(proto type) {\n if (!Object.__proto__) {\n var ancestor = Object.getPrototypeO f(prototype);\n prototype.__proto__ = ancestor;\n if (isBase(ancestor) ) {\n ancestor.__proto__ = Object.getPrototypeOf(ancestor);\n }\n }\n }\n\n // exports\n\n api.declaration.prototype = prototype;\n\n})(Polyme r);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserve d.\n * This code may only be used under the BSD style license found at http://po lymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http ://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fou nd at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google a s part of the polymer project is also\n * subject to an additional IP rights gra nt found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /*\n\n Elements are added to a registration queue so that they register in \ n the proper order at the appropriate time. We do this for a few reasons:\n\n * to enable elements to load resources (like stylesheets) \n asynchronous ly. We need to do this until the platform provides an efficient\n alternative . One issue is that remote @import stylesheets are \n re-fetched whenever sta mped into a shadowRoot.\n\n * to ensure elements loaded 'at the same time' (e .g. via some set of\n imports) are registered as a batch. This allows element s to be enured from\n upgrade ordering as long as they query the dom tree 1 t ask after\n upgrade (aka domReady). This is a performance tradeoff. On the on e hand,\n elements that could register while imports are loading are prevente d from \n doing so. On the other, grouping upgrades into a single task means less\n incremental work (for example style recalcs), Also, we can ensure the \n document is in a known state at the single quantum of time when \n ele ments upgrade.\n\n */\n var queue = {\n\n // tell the queue to wait for an element to be ready\n wait: function(element) {\n if (!element.__queue) {\n element.__queue = {};\n elements.push(element);\n }\n },\n\n // enqueue an element to the next spot in the queue.\n enqueue: fun ction(element, check, go) {\n var shouldAdd = element.__queue && !element._ _queue.check;\n if (shouldAdd) {\n queueForElement(element).push(ele ment);\n element.__queue.check = check;\n element.__queue.go = go; \n }\n return (this.indexOf(element) !== 0);\n },\n\n indexOf: f unction(element) {\n var i = queueForElement(element).indexOf(element);\n if (i >= 0 && document.contains(element)) {\n i += (HTMLImports.useNa tive || HTMLImports.ready) ? \n importQueue.length : 1e9;\n }\n return i; \n },\n\n // tell the queue an element is ready to be regist ered\n go: function(element) {\n var readied = this.remove(element);\n if (readied) {\n element.__queue.flushable = true;\n this.addT oFlushQueue(readied);\n this.check();\n }\n },\n\n remove: fun ction(element) {\n var i = this.indexOf(element);\n if (i !== 0) {\n //console.warn('queue order wrong', i);\n return;\n }\n r eturn queueForElement(element).shift();\n },\n\n check: function() {\n // next\n var element = this.nextElement();\n if (element) {\n element.__queue.check.call(element);\n }\n if (this.canReady()) {\n this.ready();\n return true;\n }\n },\n\n nextElement: function() {\n return nextQueued();\n },\n\n canReady: function() {\n return !this.waitToReady && this.isEmpty();\n },\n\n isEmpty: functi on() {\n for (var i=0, l=elements.length, e; (i<l) && \n (e=elemen ts[i]); i++) {\n if (e.__queue && !e.__queue.flushable) {\n retu rn;\n }\n }\n return true;\n },\n\n addToFlushQueue: func tion(element) {\n flushQueue.push(element); \n },\n\n flush: functio n() {\n // prevent re-entrance\n if (this.flushing) {\n return; \n }\n this.flushing = true;\n var element;\n while (flushQu eue.length) {\n element = flushQueue.shift();\n element.__queue.go .call(element);\n element.__queue = null;\n }\n this.flushing = false;\n },\n\n ready: function() {\n // TODO(sorvell): As an optimi zation, turn off CE polyfill upgrading\n // while registering. This way we avoid having to upgrade each document\n // piecemeal per registration and c an instead register all elements\n // and upgrade once in a batch. Without this optimization, upgrade time\n // degrades significantly when SD polyfil l is used. This is mainly because\n // querying the document tree for eleme nts is slow under the SD polyfill.\n var polyfillWasReady = CustomElements. ready;\n CustomElements.ready = false;\n this.flush();\n if (!Cus tomElements.useNative) {\n CustomElements.upgradeDocumentTree(document);\ n }\n CustomElements.ready = polyfillWasReady;\n Platform.flush() ;\n requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n addRead yCallback: function(callback) {\n if (callback) {\n readyCallbacks.p ush(callback);\n }\n },\n\n flushReadyCallbacks: function() {\n if (readyCallbacks) {\n var fn;\n while (readyCallbacks.length) {\ n fn = readyCallbacks.shift();\n fn();\n }\n }\n },\n\n waitToReady: true\n\n };\n\n var elements = [];\n var flushQueue = [];\n var importQueue = [];\n var mainQueue = [];\n var readyCallbacks = [] ;\n\n function queueForElement(element) {\n return document.contains(element ) ? mainQueue : importQueue;\n }\n\n function nextQueued() {\n return impor tQueue.length ? importQueue[0] : mainQueue[0];\n }\n\n function whenReady(call back) {\n queue.waitToReady = true;\n HTMLImports.whenImportsReady(functio n() {\n queue.addReadyCallback(callback);\n queue.waitToReady = false; \n queue.check();\n });\n }\n\n // exports\n scope.elements = element s;\n scope.queue = queue;\n scope.whenReady = scope.whenPolymerReady = whenRea dy;\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license foun d at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contribut ors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribut ed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function (scope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope.api ;\n var queue = scope.queue;\n var whenReady = scope.whenReady;\n var getRegi steredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype = sco pe.waitingForPrototype;\n\n // declarative implementation: <polymer-element>\n\ n var prototype = extend(Object.create(HTMLElement.prototype), {\n\n created Callback: function() {\n if (this.getAttribute('name')) {\n this.ini t();\n }\n },\n\n init: function() {\n // fetch declared values\ n this.name = this.getAttribute('name');\n this.extends = this.getAttr ibute('extends');\n queue.wait(this);\n // initiate any async resource fetches\n this.loadResources();\n // register when all constraints ar e met\n this.registerWhenReady();\n },\n\n // TODO(sorvell): we curre ntly queue in the order the prototypes are \n // registered, but we should qu eue in the order that polymer-elements\n // are registered. We are currently blocked from doing this based on \n // crbug.com/395686.\n registerWhenRea dy: function() {\n if (this.registered\n || this.waitingForPrototype(t his.name)\n || this.waitingForQueue()\n || this.waitingForResources( )) {\n return;\n }\n queue.go(this);\n },\n\n _register : function() {\n //console.log('registering', this.name);\n // warn if extending from a custom element not registered via Polymer\n if (isCustomT ag(this.extends) && !isRegistered(this.extends)) {\n console.warn('%s is attempting to extend %s, an unregistered element ' +\n 'or one that w as not registered with Polymer.', this.name,\n this.extends);\n }\n this.register(this.name, this.extends);\n this.registered = true;\ n },\n\n waitingForPrototype: function(name) {\n if (!getRegisteredPr ototype(name)) {\n // then wait for a prototype\n waitingForProtot ype(name, this);\n // emulate script if user is not supplying one\n this.handleNoScript(name);\n // prototype not ready yet\n return true;\n }\n },\n\n handleNoScript: function(name) {\n // if exp licitly marked as 'noscript'\n if (this.hasAttribute('noscript') && !this.n oscript) {\n this.noscript = true;\n // imperative element registr ation\n Polymer(name);\n }\n },\n\n waitingForResources: funct ion() {\n return this._needsResources;\n },\n\n // NOTE: Elements mus t be queued in proper order for inheritance/composition\n // dependency resol ution. Previously this was enforced for inheritance,\n // and by rule for com position. It's now entirely by rule.\n waitingForQueue: function() {\n r eturn queue.enqueue(this, this.registerWhenReady, this._register);\n },\n\n loadResources: function() {\n this._needsResources = true;\n this.lo adStyles(function() {\n this._needsResources = false;\n this.regis terWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-pluggable API s \n\n // TODO(sjmiles): should be fully pluggable (aka decoupled, currently\n // the various plugins are allowed to depend on each other directly)\n api.pub lish(api.declaration, prototype);\n\n // utility and bookkeeping\n\n function isRegistered(name) {\n return Boolean(HTMLElement.getPrototypeForTag(name));\ n }\n\n function isCustomTag(name) {\n return (name && name.indexOf('-') >= 0);\n }\n\n // boot tasks\n\n whenReady(function() {\n document.body.remo veAttribute('unresolved');\n document.dispatchEvent(\n new CustomEvent(' polymer-ready', {bubbles: true})\n );\n });\n\n // register polymer-element with document\n\n document.registerElement('polymer-element', {prototype: prot otype});\n\n})(Polymer);\n\n/*\n * Copyright (c) 2014 The Polymer Project Author s. All rights reserved.\n * This code may only be used under the BSD style licen se found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of co ntributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code di stributed by Google as part of the polymer project is also\n * subject to an add itional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(f unction(scope) {\n\n var whenPolymerReady = scope.whenPolymerReady;\n\n functi on importElements(elementOrFragment, callback) {\n if (elementOrFragment) {\n document.head.appendChild(elementOrFragment);\n whenPolymerReady(call back);\n } else if (callback) {\n callback();\n }\n }\n\n function importUrls(urls, callback) {\n if (urls && urls.length) {\n var frag = document.createDocumentFragment();\n for (var i=0, l=urls.length, url, l ink; (i<l) && (url=urls[i]); i++) {\n link = document.createElement('li nk');\n link.rel = 'import';\n link.href = url;\n fra g.appendChild(link);\n }\n importElements(frag, callback);\n } else if (callback) {\n callback();\n }\n }\n\n // exports\n scope.imp ort = importUrls;\n scope.importElements = importElements;\n\n})(Polymer);\n\n/ *\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * T his code may only be used under the BSD style license found at http://polymer.gi thub.io/LICENSE.txt\n * The complete set of authors may be found at http://polym er.github.io/AUTHORS.txt\n * The complete set of contributors may be found at ht tp://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part o f the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The `auto-binding` elem ent extends the template element. It provides a quick \n * and easy way to do da ta binding without the need to setup a model. \n * The `auto-binding` element it self serves as the model and controller for the \n * elements it contains. Both data and event handlers can be bound. \n *\n * The `auto-binding` element acts j ust like a template that is bound to \n * a model. It stamps its content in the dom adjacent to itself. When the \n * content is stamped, the `template-bound` e vent is fired.\n *\n * Example:\n *\n * <template is=\"auto-binding\">\n * <div>Say something: <input value=\"{{value}}\"></div>\n * <div>You sa id: {{value}}</div>\n * <button on-tap=\"{{buttonTap}}\">Tap me!</button>\ n * </template>\n * <script>\n * var template = document.querySele ctor('template');\n * template.value = 'something';\n * template.but tonTap = function() {\n * console.log('tap!');\n * };\n * </sc ript>\n *\n * @module Polymer\n * @status stable\n*/\n\n(function() {\n\n var e lement = document.createElement('polymer-element');\n element.setAttribute('nam e', 'auto-binding');\n element.setAttribute('extends', 'template');\n element. init();\n\n Polymer('auto-binding', {\n\n createdCallback: function() {\n this.syntax = this.bindingDelegate = this.makeSyntax();\n // delay stamp ing until polymer-ready so that auto-binding is not\n // required to load l ast.\n Polymer.whenPolymerReady(function() {\n this.model = this;\n this.setAttribute('bind', '');\n // we don't bother with an explic it signal here, we could ust a MO\n // if necessary\n this.async(f unction() {\n // note: this will marshall *all* the elements in the par entNode\n // rather than just stamped ones. We'd need to use createInst ance\n // to fix this or something else fancier.\n this.marsha lNodeReferences(this.parentNode);\n // template stamping is asynchronou s so stamping isn't complete\n // by polymer-ready; fire an event so us ers can use stamped elements\n this.fire('template-bound');\n }) ;\n }.bind(this));\n },\n\n makeSyntax: function() {\n var event s = Object.create(Polymer.api.declaration.events);\n var self = this;\n events.findController = function() { return self.model; };\n\n var syntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBinding; \n syntax.prepareBinding = function(pathString, name, node) {\n ret urn events.prepareEventBinding(pathString, name, node) ||\n prepar eBinding.call(syntax, pathString, name, node);\n };\n return syntax;\n }\n\n });\n\n})();\n\n//# sourceMappingURL=polymer.concat.js.map"]}
OLDNEW
« no previous file with comments | « pkg/polymer/lib/src/js/polymer/polymer.concat.js.map ('k') | pkg/polymer/lib/src/loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698