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/installer.js
","../polymer-gestures/src/mouse.js","../polymer-gestures/src/touch.js","../poly
mer-gestures/src/ms.js","../polymer-gestures/src/pointer.js","../polymer-gesture
s/src/platform-events.js","../polymer-gestures/src/track.js","../polymer-gesture
s/src/hold.js","../polymer-gestures/src/tap.js","../polymer-expressions/third_pa
rty/esprima/esprima.js","../polymer-expressions/src/polymer-expressions.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/eve
nts.js","src/instance/attributes.js","src/instance/properties.js","src/instance/
mdv.js","src/instance/base.js","src/instance/styles.js","src/declaration/polymer
.js","src/declaration/path.js","src/declaration/styles.js","src/declaration/even
ts.js","src/declaration/properties.js","src/declaration/attributes.js","src/decl
aration/mdv.js","src/declaration/prototype.js","src/declaration/queue.js","src/d
eclaration/import.js","src/declaration/polymer-element.js","src/lib/auto-binding
.js"],"names":[],"mappings":"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
A","sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Projec
t Authors. All rights reserved.\n * This code may only be used under the BSD sty
le 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 s
et 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 t
o an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\nwindow.PolymerGestures = {\n hasSDPolyfill: Boolean(window.ShadowDOMPolyfil
l)\n};\nPolymerGestures.wrap = PolymerGestures.hasSDPolyfill ? ShadowDOMPolyfill
.wrapIfNeeded : function(a){ return a; };\n","/*\n * Copyright (c) 2014 The Poly
mer Project Authors. All rights reserved.\n * This code may only be used under t
he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl
ete 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/CONTRIBUTO
RS.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/PATE
NTS.txt\n */\n\n(function(scope) {\n var HAS_FULL_PATH = false;\n\n // test fo
r full event path support\n var pathTest = document.createElement('meta');\n i
f (!scope.hasSDPolyfill && pathTest.createShadowRoot) {\n var sr = pathTest.c
reateShadowRoot();\n var s = document.createElement('span');\n sr.appendCh
ild(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 s
ource for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n
ev.stopPropagation();\n });\n var ev = new CustomEvent('testpath', {bubble
s: true});\n // must add node to DOM to trigger event listener\n document.
head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest.parentNode.r
emoveChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\n\n var targ
et = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.sha
dowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shad
ow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n tar
getingShadow: 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.olderShadowRoot;\n if (!os) {\n var
se = shadow.querySelector('shadow');\n if (se) {\n os = se.olde
rShadowRoot;\n }\n }\n return os;\n },\n allShadows: func
tion(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.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, fall back to light dom element\n
return this.searchRoot(sr, x, y) || t;\n }\n },\n owner: function(el
ement) {\n if (!element) {\n return document;\n }\n var s
= element;\n // walk up until you hit the shadow root or document\n wh
ile (s.parentNode) {\n s = s.parentNode;\n }\n // the owner ele
ment is expected to be a Document or ShadowRoot\n if (s.nodeType != Node.DO
CUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = documen
t;\n }\n return s;\n },\n findTarget: 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 i
s 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 s
earch\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n
return this.searchRoot(s, x, y);\n },\n findScrollAxis: function(inEv
ent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n var pa
th = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n
= path[i];\n if (n._scrollType) {\n return n._scrollType;\n
}\n }\n } else {\n n = scope.wrap(inEvent.currentTa
rget);\n while(n) {\n if (n._scrollType) {\n return n
._scrollType;\n }\n n = n.parentNode || n.host;\n }\n
}\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.contains && a.contains(b)) {\n return a;\n }\n if (b.con
tains && b.contains(a)) {\n return b;\n }\n var adepth = this.d
epth(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.parentN
ode || 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 deepContains: funct
ion(a, b) {\n var common = this.LCA(a, b);\n // if a is the common anc
estor, it must \"deeply\" contain b\n return common === a;\n },\n ins
ideNode: function(node, x, y) {\n var rect = node.getBoundingClientRect();\
n return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <=
rect.bottom);\n }\n };\n scope.targetFinding = target;\n /**\n * Given a
n event, finds the \"deepest\" node that could have been the original target bef
ore ShadowDOM retargetting\n *\n * @param {Event} Event An event object with
clientX and clientY properties\n * @return {Element} The probable event orign
inator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n *
Determines if the \"container\" node deeply contains the \"containee\" node, in
cluding situations where the \"containee\" is contained by one or more ShadowDOM
\n * roots.\n *\n * @param {Node} container\n * @param {Node} containee\
n * @return {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 * va
r 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 * @p
aram {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 Th
e Polymer Project Authors. All rights reserved.\n * This code may only be used u
nder 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/CONT
RIBUTORS.txt\n * Code distributed by Google as part of the polymer project is al
so\n * subject to an additional IP rights grant found at http://polymer.github.i
o/PATENTS.txt\n */\n\n(function() {\n function shadowSelector(v) {\n return
'body /deep/ ' + selector(v);\n }\n function selector(v) {\n return '[touch
-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-act
ion: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'non
e',\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 head = document.head;\n var hasT
ouchAction = typeof document.head.style.touchAction === 'string';\n // only add
shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.Shado
wDOMPolyfill && document.head.createShadowRoot;\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 sty
les += r.selectors.map(selector) + rule(r.rule) + '\\n';\n if (hasShadowR
oot) {\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 document.head.appendChild(el);\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 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/**\n * This is the constr
uctor for new PointerEvents.\n *\n * New Pointer Events must be given a type, an
d an optional dictionary of\n * initialization properties.\n *\n * Due to certai
n platform requirements, events returned from the constructor\n * identify as Mo
useEvents.\n *\n * @constructor\n * @param {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 PointerEvent of type `inType` and initial
ized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PROP
S = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'scree
nX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKe
y',\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_FACTOR
Y = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO(d
freedm): this is overridden by tap recognizer, needs review\n preventTap: NOP
_FACTORY,\n makeBaseEvent: function(inType, inDict) {\n var e = document
.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inDic
t.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n
return e;\n },\n makeGestureEvent: function(inType, inDict) {\n inDi
ct = inDict || Object.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 makePointerEvent: function(inType, inDict) {\n inDict = inDi
ct || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\
n // define inherited MouseEvent properties\n for(var i = 0, p; i < MO
USE_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 that pointers without pressure specified use 0.5 for down\n
// state and 0 for up state.\n var pressure = 0;\n if (inDict.pressu
re) {\n pressure = 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.clientX;\n e.y = e.clientY;\n\n // define the properti
es 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 = inDict.tiltX || 0;\n e.tiltY = inDict
.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimesta
mp = inDict.hwTimestamp || 0;\n e.isPrimary = 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 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/**\n * This module implements an map of pointer
states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.proto
type.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 var i = this.keys.indexOf(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.sp
lice(i, 1);\n this.values.splice(i, 1);\n }\n },\n get: functi
on(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];
\n },\n clear: function() {\n this.keys.length = 0;\n this.value
s.length = 0;\n },\n // return value, key, map\n forEach: function(call
back, thisArg) {\n this.values.forEach(function(v, i) {\n callback.c
all(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: fun
ction() {\n return this.keys.length;\n }\n };\n\n scope.PointerMap = P
ointerMap;\n})(window.PolymerGestures);\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 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 's
hiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level
3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',\n 'he
ight',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hw
Timestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target',
\n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp
',\n // gesture addons\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 // Point
erEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n fa
lse,\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 = (type
of SVGElementInstance !== 'undefined');\n\n var eventFactory = scope.eventFacto
ry;\n\n var hasSDPolyfill = scope.hasSDPolyfill;\n var wrap = scope.wrap;\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
added\n * - pointerup: a pointer is removed\n * - pointermove: a pointe
r is moved\n * - pointerover: a pointer crosses into an element\n * - po
interout: a pointer leaves an element\n * - pointercancel: a pointer will no
longer generate events\n */\n var dispatcher = {\n pointermap: new scope.
PointerMap(),\n eventMap: Object.create(null),\n // Scope objects for nati
ve events.\n // This exists for ease of testing.\n eventSources: Object.cr
eate(null),\n eventSourceList: [],\n gestures: [],\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 the event source\n * @param {Object} source A new s
ource of platform events.\n */\n registerSource: function(name, source) {
\n var s = source;\n var newEvents = s.events;\n if (newEvents) {
\n newEvents.forEach(function(e) {\n if (s[e]) {\n th
is.eventMap[e] = s[e].bind(s);\n }\n }, this);\n this.eve
ntSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n
registerGesture: function(name, source) {\n this.gestures.push(source);\n
},\n register: function(element) {\n var l = this.eventSourceList.le
ngth;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++)
{\n // call eventsource register\n es.register.call(es, element);
\n }\n },\n unregister: function(element) {\n var l = this.event
SourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceL
ist[i]); i++) {\n // call eventsource register\n es.unregister.cal
l(es, element);\n }\n },\n // EVENTS\n down: function(inEvent) {\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 },\n cancel: function(inEvent) {\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 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 if (inEvent._handledByP
G) {\n return;\n }\n var type = inEvent.type;\n var fn = t
his.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.addEvent(target, e);\n
}\n },\n // remove event listeners\n unlisten: function(target, event
s) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i+
+) {\n this.removeEvent(target, e);\n }\n },\n addEvent: funct
ion(target, eventName) {\n // NOTE: Work around for #4, use native event li
stener in SD Polyfill\n if (hasSDPolyfill) {\n target.addEventListen
er_(eventName, this.boundHandler);\n } else {\n target.addEventListe
ner(eventName, this.boundHandler);\n }\n },\n removeEvent: function(t
arget, eventName) {\n // NOTE: Work around for #4, use native event listene
r in SD Polyfill\n if (hasSDPolyfill) {\n target.removeEventListener
_(eventName, this.boundHandler);\n } else {\n target.removeEventList
ener(eventName, this.boundHandler);\n }\n },\n // EVENT CREATION AND
TRACKING\n /**\n * Creates a new Event of type `inType`, based on the inf
ormation in\n * `inEvent`.\n *\n * @param {string} inType A string r
epresenting the type of event to create\n * @param {Event} inEvent A platfor
m event with a target\n * @return {Event} A PointerEvent of type `inType`\n
*/\n makeEvent: function(inType, inEvent) {\n var e = eventFactory.m
akePointerEvent(inType, inEvent);\n e.preventDefault = inEvent.preventDefau
lt;\n e.tapPrevented = inEvent.tapPrevented;\n e._target = e._target |
| inEvent.target;\n return e;\n },\n // make and dispatch an event in
one call\n fireEvent: function(inType, inEvent) {\n var e = this.makeEv
ent(inType, inEvent);\n return this.dispatchEvent(e);\n },\n /**\n
* Returns a snapshot of inEvent, with writable properties.\n *\n * @pa
ram {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 eventCopy = Object.cr
eate(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> e
lement that is represented by the instance for Safari, Chrome, IE.\n // T
his is the behavior implemented by Firefox.\n if (p === 'target' || p ===
'relatedTarget') {\n if (HAS_SVG_INSTANCE && eventCopy[p] instanceof S
VGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUseEl
ement;\n }\n eventCopy[p] = wrap(eventCopy[p]);\n }\n
}\n // keep the semantics of preventDefault\n eventCopy.preventDef
ault = inEvent.preventDefault;\n return eventCopy;\n },\n /**\n *
Dispatches the event to its target.\n *\n * @param {Event} inEvent The
event to be dispatched.\n * @return {Boolean} True if an event handler retur
ns true, false otherwise.\n */\n dispatchEvent: function(inEvent) {\n
var t = inEvent._target;\n if (t) {\n t.dispatchEvent(inEvent);\n
// clone the event for the gesture system to process\n // clone af
ter dispatch to pick up gesture prevention code\n var clone = this.cloneE
vent(inEvent);\n clone.target = t;\n this.fillGestureQueue(clone);
\n }\n },\n gestureTrigger: function() {\n // process the gestur
e 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 < this.gestures.leng
th; j++) {\n g = this.gestures[j];\n fn = g[e.type];\n
if (fn) {\n fn.call(g, e);\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.boundGestureTrigger);\n }\n this
.gestureQueue.push(ev);\n }\n };\n dispatcher.boundHandler = dispatcher.eve
ntHandler.bind(dispatcher);\n dispatcher.boundGestureTrigger = dispatcher.gestu
reTrigger.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register
= function(root) {\n dispatcher.register(root);\n };\n scope.unregister = d
ispatcher.unregister.bind(dispatcher);\n scope.wrap = wrap;\n})(window.PolymerG
estures);\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/**\n * This mod
ule uses Mutation Observers to dynamically adjust which nodes will\n * generate
Pointer Events.\n *\n * All nodes that wish to generate Pointer Events must have
the attribute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n var
forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\n var ma
p = Array.prototype.map.call.bind(Array.prototype.map);\n var toArray = Array.p
rototype.slice.call.bind(Array.prototype.slice);\n var filter = Array.prototype
.filter.call.bind(Array.prototype.filter);\n var MO = window.MutationObserver |
| window.WebKitMutationObserver;\n var SELECTOR = '[touch-action]';\n var OBSE
RVER_INIT = {\n subtree: true,\n childList: true,\n attributes: true,\n
attributeOldValue: true,\n attributeFilter: ['touch-action']\n };\n\n f
unction Installer(add, remove, changed, binder) {\n this.addCallback = add.bi
nd(binder);\n this.removeCallback = remove.bind(binder);\n this.changedCal
lback = changed.bind(binder);\n if (MO) {\n this.observer = new MO(this.
mutationWatcher.bind(this));\n }\n }\n\n Installer.prototype = {\n watch
Subtree: function(target) {\n // Only watch scopes that can target find, as
these are top-level.\n // Otherwise we can see duplicate additions and rem
ovals that add noise.\n //\n // TODO(dfreedman): For some instances wi
th ShadowDOMPolyfill, we can see\n // a removal without an insertion when a
node is redistributed among\n // shadows. Since it all ends up correct in
the document, watching only\n // the document will yield the correct mutati
ons to watch.\n if (scope.targetFinding.canTarget(target)) {\n this.
observer.observe(target, OBSERVER_INIT);\n }\n },\n enableOnSubtree:
function(target) {\n this.watchSubtree(target);\n if (target === docum
ent && document.readyState !== 'complete') {\n this.installOnLoad();\n
} else {\n this.installNewSubtree(target);\n }\n },\n insta
llNewSubtree: function(target) {\n forEach(this.findElements(target), this.
addElement, this);\n },\n findElements: function(target) {\n if (targ
et.querySelectorAll) {\n return target.querySelectorAll(SELECTOR);\n
}\n return [];\n },\n removeElement: function(el) {\n this.remo
veCallback(el);\n },\n addElement: function(el) {\n this.addCallback(
el);\n },\n elementChanged: function(el, oldValue) {\n this.changedCa
llback(el, oldValue);\n },\n concatLists: function(accum, list) {\n r
eturn accum.concat(toArray(list));\n },\n // register all touch-action = n
one nodes on document load\n installOnLoad: function() {\n document.addE
ventListener('readystatechange', function() {\n if (document.readyState =
== 'complete') {\n this.installNewSubtree(document);\n }\n
}.bind(this));\n },\n isElement: function(n) {\n return n.nodeType ==
= Node.ELEMENT_NODE;\n },\n flattenMutationTree: function(inNodes) {\n
// find children with touch-action\n var tree = map(inNodes, this.findEle
ments, this);\n // make sure the added nodes are accounted for\n tree.
push(filter(inNodes, this.isElement));\n // flatten the list\n return
tree.reduce(this.concatLists, []);\n },\n mutationWatcher: function(mutati
ons) {\n mutations.forEach(this.mutationHandler, this);\n },\n mutati
onHandler: function(m) {\n if (m.type === 'childList') {\n var added
= this.flattenMutationTree(m.addedNodes);\n added.forEach(this.addElemen
t, this);\n var removed = this.flattenMutationTree(m.removedNodes);\n
removed.forEach(this.removeElement, this);\n } else if (m.type === 'att
ributes') {\n this.elementChanged(m.target, m.oldValue);\n }\n }\
n };\n\n if (!MO) {\n Installer.prototype.watchSubtree = function(){\n
console.warn('PolymerGestures: MutationObservers not found, touch-action will n
ot be dynamically detected');\n };\n }\n\n scope.Installer = Installer;\n})
(window.PolymerGestures);\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
(function (scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = di
spatcher.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_BUTT
ONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).bu
ttons === 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 registe
r: function(target) {\n if (target !== document) {\n return;\n
}\n dispatcher.listen(target, this.events);\n },\n unregister: functi
on(target) {\n dispatcher.unlisten(target, this.events);\n },\n lastT
ouches: [],\n // collide with the global mouse listener\n isEventSimulated
FromTouch: 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 swallo
wed 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._sou
rce = 'mouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[
e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEven
t) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = poi
ntermap.has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some el
ements not sending mouseup\n // http://crbug/149091\n if (p) {\n
this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inE
vent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n point
ermap.set(this.POINTER_ID, e.target);\n dispatcher.down(e);\n }\n
},\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTou
ch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n e.target =
pointermap.get(this.POINTER_ID);\n dispatcher.move(e);\n }\n },\n
mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv
ent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget =
scope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(this.P
OINTER_ID);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n
},\n cleanupMouse: function() {\n pointermap['delete'](this.POINTER_I
D);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGesture
s);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserv
ed.\n * This code may only be used under the BSD style license found at http://p
olymer.github.io/LICENSE.txt\n * The complete set of authors may be found at htt
p://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fo
und 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 gr
ant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n
var dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.allSh
adows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n v
ar touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This sho
uld be long enough to ignore compat mouse events made by touch\n var DEDUP_TIME
OUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATT
RIB = 'touch-action';\n var INSTALLER;\n // maybe one day...\n // var CAN_USE
_GLOBAL = ATTRIB in document.head.style;\n var CAN_USE_GLOBAL = false;\n\n //
handler block for native touch events\n var touchEvents = {\n events: [\n
'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n
],\n register: function(target) {\n if (CAN_USE_GLOBAL) {\n dis
patcher.listen(target, this.events);\n } else {\n INSTALLER.enableOn
Subtree(target);\n }\n },\n unregister: function(target) {\n if
(CAN_USE_GLOBAL) {\n dispatcher.unlisten(target, this.events);\n } e
lse {\n // TODO(dfreedman): is it worth it to disconnect the MO?\n }
\n },\n elementAdded: function(el) {\n var a = el.getAttribute(ATTRIB
);\n var st = this.touchActionToScrollType(a);\n if (st) {\n el
._scrollType = st;\n dispatcher.listen(el, this.events);\n // set
touch-action on shadows as well\n allShadows(el).forEach(function(s) {\n
s._scrollType = st;\n dispatcher.listen(s, this.events);\n
}, this);\n }\n },\n elementRemoved: function(el) {\n el._sc
rollType = undefined;\n dispatcher.unlisten(el, this.events);\n // rem
ove touch-action from shadow\n allShadows(el).forEach(function(s) {\n
s._scrollType = undefined;\n dispatcher.unlisten(s, this.events);\n
}, this);\n },\n elementChanged: function(el, oldValue) {\n var a =
el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n
var oldSt = this.touchActionToScrollType(oldValue);\n // simply update sc
rollType if listeners are already established\n if (st && oldSt) {\n
el._scrollType = st;\n allShadows(el).forEach(function(s) {\n s
._scrollType = st;\n }, this);\n } else if (oldSt) {\n this.e
lementRemoved(el);\n } else if (st) {\n this.elementAdded(el);\n
}\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x
',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x)
|auto|manipulation$/\n },\n touchActionToScrollType: function(touchAction)
{\n var t = touchAction;\n var st = this.scrollTypes;\n if (t ==
= 'none') {\n return 'none';\n } else if (t === st.XSCROLLER) {\n
return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\n
} else if (st.SCROLLER.exec(t)) {\n return 'XY';\n }\n },\n
POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(i
nTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n set
PrimaryTouch: function(inTouch) {\n // set primary touch if there no pointe
rs, 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.clie
ntY};\n this.scrolling = null;\n this.cancelResetClickCount();\n
}\n },\n removePrimaryPointer: function(inPointer) {\n if (inPoin
ter.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\
n this.resetClickCount();\n }\n },\n clickCount: 0,\n reset
Id: null,\n resetClickCount: function() {\n var fn = function() {\n
this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n
this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetCl
ickCount: function() {\n if (this.resetId) {\n clearTimeout(this.res
etId);\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.currentTouchEvent.type === 'touchstart') {\n if (this.isPrimary
Touch(touch)) {\n var fastPath = {\n clientX: touch.clientX,
\n clientY: touch.clientY,\n path: this.currentTouchEvent.
path,\n target: scope.wrap(this.currentTouchEvent.target)\n
};\n return scope.findTarget(fastPath);\n } else {\n re
turn scope.findTarget(touch);\n }\n }\n // reuse target we foun
d in touchstart\n return pointermap.get(id);\n },\n touchToPointer: f
unction(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispa
tcher.cloneEvent(inTouch);\n // Spec specifies that pointerId 1 is reserved
for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the t
ouch identifier for compatibility.\n var id = e.pointerId = inTouch.identif
ier + 2;\n e.target = scope.wrap(this.findTarget(inTouch, id));\n e.bu
bbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n
e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitRad
iusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch
.radiusY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\
n e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.P
OINTER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaults
\n var self = this;\n e.preventDefault = function() {\n self.sc
rolling = false;\n self.firstXY = null;\n cte.preventDefault();\n
};\n return e;\n },\n processTouches: function(inEvent, inFuncti
on) {\n var tl = inEvent.changedTouches;\n this.currentTouchEvent = in
Event;\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.pointerId, p.target);\n }\n if (point
ermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n
if (inEvent.type === 'touchend' || inEvent._cancel) {\n this.cleanUp
Pointer(p);\n }\n }\n },\n // For single axis scrollers, deter
mines whether the element should emit\n // pointer events or behave as a scro
ller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n
var ret;\n var scrollAxis = scope.targetFinding.findScrollAxis(inEvent);\
n if (scrollAxis === 'none') {\n // this element is a touch-acti
on: none, should never scroll\n ret = false;\n } else if (scroll
Axis === 'XY') {\n // this element should always scroll\n ret
= true;\n } else {\n var t = inEvent.changedTouches[0];\n
// check the intended scroll axis, and other axis\n var a = scrollAx
is;\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 o
ther axis, scroll instead of\n // making events\n ret = da >=
doa;\n }\n return ret;\n }\n },\n findTouch: function(i
nTL, 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 to
uchend. This\n // leaves the pointermap in a broken state.\n // Therefore,
on every touchstart, we remove the touches that did not fire a\n // touchend
event.\n // To keep state globally consistent, we fire a\n // pointercanc
el for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n v
ar tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length h
ere, as the touchstart has not\n // been processed yet.\n if (pointerm
ap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(f
unction(value, key) {\n // Never remove pointerId == 1, which is mouse.
\n // Touch identifiers are 2 smaller than their pointerId, which is th
e\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 t
ouchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.s
etPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);
\n if (!this.scrolling) {\n this.clickCount++;\n this.process
Touches(inEvent, this.down);\n }\n },\n down: function(inPointer) {\n
dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n
if (CAN_USE_GLOBAL) {\n this.processTouches(inEvent, this.move);\n
} else {\n if (!this.scrolling) {\n if (this.scrolling === n
ull && this.shouldScroll(inEvent)) {\n this.scrolling = true;\n
} else {\n this.scrolling = false;\n inEvent.preventDe
fault();\n this.processTouches(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 - th
is.firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if (d
d >= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.scr
olling = true;\n this.firstXY = null;\n }\n }\n
}\n },\n move: function(inPointer) {\n dispatcher.move(inPointer);\n
},\n touchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n
this.processTouches(inEvent, this.up);\n },\n up: function(inPointer
) {\n inPointer.relatedTarget = scope.wrap(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 this.processTouches(inEvent, this.cancel);\n
},\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inP
ointer.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n //
prevent synth mouse events from creating pointer events\n dedupSynthMouse: fu
nction(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t =
inEvent.changedTouches[0];\n // only the primary finger will synth mouse e
vents\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touc
h\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, l
ts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n if (
!CAN_USE_GLOBAL) {\n INSTALLER = new scope.Installer(touchEvents.elementAdded
, touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n\n
scope.touchEvents = touchEvents;\n})(window.PolymerGestures);\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 var dispatcher = sco
pe.dispatcher;\n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TYPE
= window.MSPointerEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE ==
= 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'M
SPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n regi
ster: function(target) {\n if (target !== document) {\n return;\n
}\n dispatcher.listen(target, this.events);\n },\n unregister: fun
ction(target) {\n dispatcher.unlisten(target, this.events);\n },\n PO
INTER_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n
'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEve
nt;\n e = dispatcher.cloneEvent(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 po
intermap['delete'](id);\n },\n MSPointerDown: function(inEvent) {\n v
ar e = this.prepareEvent(inEvent);\n e.target = scope.wrap(scope.findTarget
(inEvent));\n pointermap.set(inEvent.pointerId, e.target);\n dispatche
r.down(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this.p
repareEvent(inEvent);\n e.target = pointermap.get(e.pointerId);\n disp
atcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var e = thi
s.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(in
Event));\n e.target = pointermap.get(e.pointerId);\n dispatcher.up(e);
\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCancel: function(
inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = s
cope.wrap(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 * 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 var dispatcher =
scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEven
ts = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointe
rup',\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 !== docume
nt) {\n return;\n }\n dispatcher.listen(target, this.events);\n
},\n unregister: function(target) {\n dispatcher.unlisten(target, th
is.events);\n },\n cleanup: function(id) {\n pointermap['delete'](id)
;\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEvent
(inEvent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n point
ermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointe
rmove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.t
arget = pointermap.get(e.pointerId);\n dispatcher.move(e);\n },\n poi
nterup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.
relatedTarget = scope.wrap(scope.findTarget(inEvent));\n e.target = pointer
map.get(e.pointerId);\n dispatcher.up(e);\n this.cleanup(inEvent.point
erId);\n },\n pointercancel: function(inEvent) {\n var e = this.prepa
reEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(inEvent))
;\n e.target = pointermap.get(e.pointerId);\n dispatcher.cancel(e);\n
this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.pointerEvents = po
interEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Poly
mer Project Authors. All rights reserved.\n * This code may only be used under t
he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl
ete 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/CONTRIBUTO
RS.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/PATE
NTS.txt\n */\n\n/**\n * This module contains the handlers for native platform ev
ents.\n * From here, the dispatcher is called to create unified pointer events.\
n * Included are touch events (v1), mouse events, and MSPointerEvents.\n */\n(fu
nction(scope) {\n var dispatcher = scope.dispatcher;\n\n if (window.PointerEve
nt) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else
if (window.navigator.msPointerEnabled) {\n dispatcher.registerSource('ms', sc
ope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEv
ents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerS
ource('touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(document
);\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Projec
t Authors. All rights reserved.\n * This code may only be used under the BSD sty
le 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 s
et 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 t
o an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\n\n/**\n * This event denotes the 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 direction 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 sinc
e 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 * @prope
rty clientX\n */\n/**\n * The clientY position of the track gesture.\n * @type N
umber\n * @property clientY\n */\n/**\n * The pageX position of the track gestur
e.\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 po
sition of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n
* The screenY position of the track gesture.\n * @type Number\n * @property scre
enY\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 yDirection\n */\n/**\n * A shared object between al
l tracking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The el
ement 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 mo
vement being tracked.\n *\n * @class track\n * @extends trackstart\n */\n/**\n *
This event fires when the pointer is no longer being tracked.\n *\n * @class tr
ackend\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 WIGGLE_THRESHOLD: 4,\n clampDir: fu
nction(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositi
onDelta: 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, in
Event, inTrackingData) {\n var t = inTrackingData;\n var d = this.ca
lcPositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t
.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clam
pDir(dd.x);\n }\n if (dd.y) {\n t.yDirection = this.clampDir
(dd.y);\n }\n var e = eventFactory.makeGestureEvent(inType, {\n
bubbles: true,\n cancelable: true,\n dx: d.x,\n dy:
d.y,\n ddx: dd.x,\n ddy: dd.y,\n x: inEvent.x,\n
y: inEvent.y,\n clientX: inEvent.clientX,\n clientY: inEvent.cl
ientY,\n pageX: inEvent.pageX,\n pageY: inEvent.pageY,\n
screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n xDirect
ion: t.xDirection,\n yDirection: t.yDirection,\n trackInfo: t.tr
ackInfo,\n relatedTarget: inEvent.relatedTarget,\n pointerType:
inEvent.pointerType,\n pointerId: inEvent.pointerId,\n _source:
'track'\n });\n t.downTarget.dispatchEvent(e);\n },\n down:
function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'm
ouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEve
nt: inEvent,\n downTarget: inEvent.target,\n trackInfo: {},\
n lastMoveEvent: null,\n xDirection: 0,\n yDirecti
on: 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 this.fireTrack('trackstart', p.
downEvent, p);\n this.fireTrack('track', inEvent, p);\n }\
n } else {\n this.fireTrack('track', inEvent, p);\n }\
n p.lastMoveEvent = inEvent;\n }\n },\n up: function(inEve
nt) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n
if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n
}\n pointermap.delete(inEvent.pointerId);\n }\n }\n };\n
dispatcher.registerGesture('track', track);\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.
github.io/LICENSE.txt\n * The complete set of authors may be found at http://pol
ymer.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 fou
nd at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event is fired w
hen a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @submo
dule Events\n * @class hold\n */\n/**\n * Type of pointer that made the holding
event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axis po
sition of the held pointer\n * @type Number\n * @property clientX\n */\n/**\n *
Screen Y axis position of the held pointer\n * @type Number\n * @property client
Y\n */\n/**\n * Type of pointer that made the holding event.\n * @type String\n
* @property pointerType\n */\n/**\n * This event is fired every 200ms while a po
inter is held down.\n *\n * @class holdpulse\n * @extends hold\n */\n/**\n * Mil
liseconds 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 dispatcher = scope.dispatcher
;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at leas
t HOLD_DELAY ms between hold and pulse events\n HOLD_DELAY: 200,\n // poin
ter can move WIGGLE_THRESHOLD pixels before not counting as a hold\n WIGGLE_T
HRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n ],\
n heldPointer: null,\n holdJob: null,\n pulse: function() {\n var
hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'h
oldpulse' : '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 = fals
e;\n this.heldPointer = null;\n this.target = null;\n this.holdJo
b = 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), thi
s.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.hel
dPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.ca
ncel();\n }\n },\n move: function(inEvent) {\n if (this.heldPoin
ter && this.heldPointer.pointerId === inEvent.pointerId) {\n var x = inEv
ent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.
heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n
this.cancel();\n }\n }\n },\n fireHold: function(inTyp
e, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable: t
rue,\n pointerType: this.heldPointer.pointerType,\n pointerId: thi
s.heldPointer.pointerId,\n x: this.heldPointer.clientX,\n y: this.
heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime) {
\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGest
ureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n dispat
cher.registerGesture('hold', hold);\n})(window.PolymerGestures);\n","/*\n * Copy
right (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code m
ay only be used under the BSD style license found at http://polymer.github.io/LI
CENSE.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://polym
er.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the poly
mer 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 is fired when a pointe
r quickly goes down and up, and is used to\n * denote activation.\n *\n * Any ge
sture event can prevent the tap event from being created by calling\n * `event.p
reventTap`.\n *\n * Any pointer event can prevent the tap by setting the `tapPre
vented` property\n * on itself.\n *\n * @module PointerGestures\n * @submodule E
vents\n * @class tap\n */\n/**\n * X axis position of the tap.\n * @property x\n
* @type Number\n */\n/**\n * Y axis position of the tap.\n * @property y\n * @t
ype Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property po
interType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.di
spatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scop
e.PointerMap();\n var tap = {\n events: [\n 'down',\n 'up'\n ],
\n down: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrev
ented) {\n pointermap.set(inEvent.pointerId, {\n target: inEvent
.target,\n buttons: inEvent.buttons,\n x: inEvent.clientX,\n
y: inEvent.clientY\n });\n }\n },\n shouldTap: functio
n(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.tapPrevented;\n },\n up: function(inEvent) {\n var st
art = pointermap.get(inEvent.pointerId);\n if (start && this.shouldTap(inEv
ent, 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.clien
tX,\n y: inEvent.clientY,\n detail: inEvent.detail,\n
pointerType: inEvent.pointerType,\n pointerId: inEvent.pointer
Id,\n altKey: 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 pointermap.delete(inEvent.pointerId);\n }\n };\n // pa
tch eventFactory to remove id from tap's pointermap for preventTap calls\n even
tFactory.preventTap = function(e) {\n return function() {\n e.tapPrevent
ed = true;\n pointermap.delete(e.pointerId);\n };\n };\n dispatcher.re
gisterGesture('tap', tap);\n})(window.PolymerGestures);\n","/*\n Copyright (C)
2013 Ariya Hidayat <ariya.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) 201
2 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Ko
wal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmai
l.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyr
ight (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and us
e in source and binary forms, with or without\n modification, are permitted pro
vided that the following conditions are met:\n\n * Redistributions of source
code must retain the above copyright\n notice, this list of conditions and
the following disclaimer.\n * Redistributions in binary form must reproduce t
he above copyright\n notice, this list of conditions and the following disc
laimer in the\n documentation and/or other materials provided with the dist
ribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTO
RS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITE
D TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR AN
Y\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 LIABILITY, 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (
global) {\n 'use strict';\n\n var Token,\n TokenName,\n Synt
ax,\n Messages,\n source,\n index,\n length,\n
delegate,\n lookahead,\n state;\n\n Token = {\n Boolea
nLiteral: 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.BooleanLit
eral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Ide
ntifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenNa
me[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric'
;\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLi
teral] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression'
,\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'CallE
xpression',\n ConditionalExpression: 'ConditionalExpression',\n Em
ptyStatement: 'EmptyStatement',\n ExpressionStatement: 'ExpressionStateme
nt',\n Identifier: 'Identifier',\n Literal: 'Literal',\n La
beledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpressi
on',\n MemberExpression: 'MemberExpression',\n ObjectExpression: '
ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n
ThisExpression: 'ThisExpression',\n UnaryExpression: 'UnaryExpres
sion'\n };\n\n // Error messages should be identical to V8.\n Messages
= {\n UnexpectedToken: 'Unexpected token %0',\n UnknownLabel: 'Un
defined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been d
eclared'\n };\n\n // Ensure the condition is true, otherwise throw an erro
r.\n // This is only to have a better contract semantic, i.e. another safety
net\n // to catch a logic error. The condition shall be fulfilled in normal c
ase.\n // Do NOT use this to enforce a certain condition on any user input.\n
\n function assert(condition, message) {\n if (!condition) {\n
throw new Error('ASSERT: ' + message);\n }\n }\n\n function isD
ecimalDigit(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 === 0
xB) ||\n (ch === 0xC) ||\n (ch === 0xA0) ||\n (
ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006
\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCha
rCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTer
minator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || (
ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n fun
ction isIdentifierStart(ch) {\n return (ch === 36) || (ch === 95) || //
$ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || //
A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n functi
on isIdentifierPart(ch) {\n return (ch === 36) || (ch === 95) || // $ (d
ollar) and _ (underscore)\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 skipWhitespace() {\n while (index < length && isWhiteSpace
(source.charCodeAt(index))) {\n ++index;\n }\n }\n\n func
tion getIdentifier() {\n var start, ch;\n\n start = index++;\n
while (index < length) {\n ch = source.charCodeAt(index);\n
if (isIdentifierPart(ch)) {\n ++index;\n } else
{\n break;\n }\n }\n\n return source.sli
ce(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 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.Keyw
ord;\n } else if (id === 'null') {\n type = Token.NullLiteral;
\n } else if (id === 'true' || id === 'false') {\n type = Toke
n.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 scanPunctuator() {\n var start = index,\n code = s
ource.charCodeAt(index),\n code2,\n ch1 = source[index],\n
ch2;\n\n switch (code) {\n\n // Check for most common
single-character punctuators.\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 br
ace\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(ind
ex + 1);\n\n // '=' (char #61) marks an assignment or comparison oper
ator.\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 6
2: // >\n case 124: // |\n index += 2;\n
return {\n type: Token.Punctuator,\n
value: String.fromCharCode(code) + String.fromCharCode(code2),
\n range: [start, index]\n };\n\n
case 33: // !\n case 61: // =\n ind
ex += 2;\n\n // !== and ===\n if (source.c
harCodeAt(index) === 61) {\n ++index;\n
}\n return {\n type: Token.Punctuato
r,\n value: source.slice(start, index),\n
range: [start, index]\n };\n default:\
n break;\n }\n }\n break
;\n }\n\n // Peek more characters.\n\n ch2 = source[index +
1];\n\n // Other 2-character punctuators: && ||\n\n if (ch1 === c
h2 && ('&|'.indexOf(ch1) >= 0)) {\n index += 2;\n return {
\n type: 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.UnexpectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n
function scanNumericLiteral() {\n var number, start, ch;\n\n ch
= source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.
'),\n 'Numeric literal must start with a decimal digit or a decimal p
oint');\n\n start = index;\n number = '';\n if (ch !== '.')
{\n number = source[index++];\n ch = source[index];\n\n
// Hex number starts with '0x'.\n // Octal number starts wi
th '0'.\n if (number === '0') {\n // decimal number st
arts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit
(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedTok
en, 'ILLEGAL');\n }\n }\n\n while (isDecima
lDigit(source.charCodeAt(index))) {\n number += source[index++];\
n }\n ch = source[index];\n }\n\n if (ch ===
'.') {\n number += source[index++];\n while (isDecimalDig
it(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 = so
urce[index];\n if (ch === '+' || ch === '-') {\n numbe
r += source[index++];\n }\n if (isDecimalDigit(source.char
CodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index
))) {\n number += source[index++];\n }\n
} else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGA
L');\n }\n }\n\n if (isIdentifierStart(source.charCodeA
t(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n
}\n\n return {\n type: Token.NumericLiteral,\n
value: parseFloat(number),\n range: [start, index]\n };\n
}\n\n // 7.8.4 String Literals\n\n function scanStringLiteral() {\n
var str = '', quote, start, ch, octal = false;\n\n quote = source[ind
ex];\n assert((quote === '\\'' || quote === '\"'),\n 'String l
iteral must starts with 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 b
reak;\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
default:\n str += ch;\n
break;\n }\n } else {\n
if (ch === '\\r' && source[index] === '\\n') {\n ++i
ndex;\n }\n }\n } else if (isLineTe
rminator(ch.charCodeAt(0))) {\n break;\n } else {\n
str += ch;\n }\n }\n\n if (quote !== '') {
\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\
n return {\n type: Token.StringLiteral,\n value: st
r,\n octal: octal,\n range: [start, index]\n };\n
}\n\n function isIdentifierName(token) {\n return token.type === Tok
en.Identifier ||\n token.type === Token.Keyword ||\n token
.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;
\n }\n\n function 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.charCodeAt(index);\n\n // Very common: ( and ) and ;
\n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPun
ctuator();\n }\n\n // String literal starts with single quote (#39
) or double quote (#34).\n if (ch === 39 || ch === 34) {\n ret
urn scanStringLiteral();\n }\n\n if (isIdentifierStart(ch)) {\n
return scanIdentifier();\n }\n\n // Dot (.) char #46 can
also start a floating-point number, hence the need\n // to check the next
character.\n if (ch === 46) {\n if (isDecimalDigit(source.cha
rCodeAt(index + 1))) {\n return scanNumericLiteral();\n
}\n return scanPunctuator();\n }\n\n if (isDecimalDig
it(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 = adva
nce();\n\n index = 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 fu
nction throwError(token, messageFormat) {\n var error,\n args
= Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.rep
lace(\n /%(\\d)/g,\n function (whole, index) {\n
assert(index < args.length, 'Message reference must be in rang
e');\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 be
cause of the token.\n\n function throwUnexpected(token) {\n throwError
(token, Messages.UnexpectedToken, token.value);\n }\n\n // Expect the next
token to match the specified punctuator.\n // If not, an exception will be t
hrown.\n\n function expect(value) {\n var token = lex();\n if (
token.type !== Token.Punctuator || token.value !== value) {\n throwUn
expected(token);\n }\n }\n\n // Return true if the next token match
es the specified punctuator.\n\n function match(value) {\n return look
ahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // R
eturn true if the next token matches the specified keyword\n\n function match
Keyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead
.value === keyword;\n }\n\n function consumeSemicolon() {\n // Catc
h the very common case first: immediately a semicolon (char #59).\n if (s
ource.charCodeAt(index) === 59) {\n lex();\n return;\n
}\n\n skipWhitespace();\n\n if (match(';')) {\n lex
();\n return;\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 (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 ret
urn delegate.createArrayExpression(elements);\n }\n\n // 11.1.5 Object Ini
tialiser\n\n function parseObjectPropertyKey() {\n var token;\n\n
skipWhitespace();\n token = lex();\n\n // Note: This function i
s called only from parseObjectProperty(), where\n // EOF and Punctuator t
okens are already filtered out.\n if (token.type === Token.StringLiteral
|| token.type === Token.NumericLiteral) {\n return delegate.createLit
eral(token);\n }\n\n return delegate.createIdentifier(token.value)
;\n }\n\n function parseObjectProperty() {\n var token, key;\n\n
token = lookahead;\n skipWhitespace();\n\n if (token.type ===
Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(to
ken);\n }\n\n key = parseObjectPropertyKey();\n expect(':')
;\n return delegate.createProperty('init', key, parseExpression());\n
}\n\n function parseObjectInitialiser() {\n var properties = [];\n\n
expect('{');\n\n while (!match('}')) {\n properties.push
(parseObjectProperty());\n\n if (!match('}')) {\n expe
ct(',');\n }\n }\n\n expect('}');\n\n return del
egate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping O
perator\n\n function parseGroupExpression() {\n var expr;\n\n e
xpect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n
return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function par
sePrimaryExpression() {\n var type, token, expr;\n\n if (match('('
)) {\n return parseGroupExpression();\n }\n\n type = lo
okahead.type;\n\n if (type === Token.Identifier) {\n expr = de
legate.createIdentifier(lex().value);\n } else if (type === Token.StringL
iteral || type === Token.NumericLiteral) {\n expr = delegate.createLi
teral(lex());\n } else if (type === Token.Keyword) {\n if (mat
chKeyword('this')) {\n lex();\n expr = delegate.cr
eateThisExpression();\n }\n } else if (type === Token.BooleanL
iteral) {\n token = lex();\n token.value = (token.value ==
= 'true');\n expr = delegate.createLiteral(token);\n } else if
(type === Token.NullLiteral) {\n token = lex();\n token.v
alue = null;\n expr = delegate.createLiteral(token);\n } else
if (match('[')) {\n expr = parseArrayInitialiser();\n } else i
f (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 parseA
rguments() {\n var args = [];\n\n expect('(');\n\n if (!mat
ch(')')) {\n while (index < length) {\n args.push(pars
eExpression());\n if (match(')')) {\n break;\n
}\n expect(',');\n }\n }\n\n
expect(')');\n\n return args;\n }\n\n function parseNonCompute
dProperty() {\n var token;\n\n token = lex();\n\n if (!isId
entifierName(token)) {\n throwUnexpected(token);\n }\n\n
return delegate.createIdentifier(token.value);\n }\n\n function parseNon
ComputedMember() {\n expect('.');\n\n return parseNonComputedPrope
rty();\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 pro
perty = parseNonComputedMember();\n expr = delegate.createMemberE
xpression('.', expr, property);\n } else if (match('(')) {\n
args = parseArguments();\n expr = delegate.createCallExpre
ssion(expr, args);\n } else {\n break;\n }\
n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n
var parsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Una
ry Operators\n\n function parseUnaryExpression() {\n var token, expr;\
n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.K
eyword) {\n expr = parsePostfixExpression();\n } else if (matc
h('+') || match('-') || match('!')) {\n token = lex();\n e
xpr = parseUnaryExpression();\n expr = delegate.createUnaryExpression
(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword(
'void') || matchKeyword('typeof')) {\n throwError({}, Messages.Unexpe
ctedToken);\n } else {\n expr = parsePostfixExpression();\n
}\n\n return expr;\n }\n\n function binaryPrecedence(token) {\
n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.t
ype !== Token.Keyword) {\n return 0;\n }\n\n switch (to
ken.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 pr
ec = 6;\n break;\n\n case '<':\n case '>':\n cas
e '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n
break;\n\n case 'in':\n prec = 7;\n bre
ak;\n\n case '+':\n case '-':\n prec = 9;\n
break;\n\n case '*':\n case '/':\n case '%':\n p
rec = 11;\n break;\n\n default:\n break;\n }
\n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n //
11.6 Additive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relati
onal Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Oper
ators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpressi
on() {\n var expr, token, prec, stack, right, operator, left, i;\n\n
left = parseUnaryExpression();\n\n token = lookahead;\n prec =
binaryPrecedence(token);\n if (prec === 0) {\n return left;\n
}\n token.prec = prec;\n lex();\n\n right = parseUna
ryExpression();\n\n stack = [left, token, right];\n\n while ((prec
= binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary e
xpression from the three topmost entries.\n while ((stack.length > 2)
&& (prec <= stack[stack.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 // Shif
t.\n token = lex();\n token.prec = prec;\n stac
k.push(token);\n expr = parseUnaryExpression();\n stack.pu
sh(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], e
xpr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n //
11.12 Conditional Operator\n\n function parseConditionalExpression() {\n
var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\
n\n if (match('?')) {\n lex();\n consequent = parse
ConditionalExpression();\n expect(':');\n alternate = pars
eConditionalExpression();\n\n expr = delegate.createConditionalExpres
sion(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n
// Simplification since we do not support AssignmentExpression.\n var par
seExpression = parseConditionalExpression;\n\n // Polymer Syntax extensions\n
\n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n //
Identifier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n
var identifier, args;\n\n identifier = lex();\n\n if (identifie
r.type !== Token.Identifier) {\n throwUnexpected(identifier);\n
}\n\n args = match('(') ? parseArguments() : [];\n\n return dele
gate.createFilter(identifier.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 // AsEx
pression\n // InExpression\n // FilterExpression\n\n // AsExpressio
n ::\n // FilterExpression as Identifier\n\n // InExpression ::\n //
Identifier, Identifier in FilterExpression\n // Identifier in FilterExpre
ssion\n\n // FilterExpression ::\n // Expression\n // Expression Fi
lters\n\n function parseTopLevel() {\n skipWhitespace();\n peek
();\n\n var expr = parseExpression();\n if (expr) {\n i
f (lookahead.value === ',' || lookahead.value == 'in' &&\n
expr.type === Syntax.Identifier) {\n parseInExpression(expr);\n
} else {\n parseFilters();\n if (lookah
ead.value === 'as') {\n parseAsExpression(expr);\n
} else {\n delegate.createTopLevel(expr);\n
}\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n
throwUnexpected(lookahead);\n }\n }\n\n function parseAs
Expression(expr) {\n lex(); // as\n var identifier = lex().value;
\n delegate.createAsExpression(expr, identifier);\n }\n\n function
parseInExpression(identifier) {\n var indexName;\n if (lookahead.v
alue === ',') {\n lex();\n if (lookahead.type !== Token.Id
entifier)\n throwUnexpected(lookahead);\n indexName =
lex().value;\n }\n\n lex(); // in\n var expr = parseExpres
sion();\n parseFilters();\n delegate.createInExpression(identifier
.name, indexName, expr);\n }\n\n function parse(code, inDelegate) {\n
delegate = inDelegate;\n source = code;\n index = 0;\n l
ength = source.length;\n lookahead = null;\n state = {\n
labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n glob
al.esprima = {\n parse: parse\n };\n})(this);\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 (global) {\n 'use strict';\n\n function prepare
Binding(expressionText, name, node, filterRegistry) {\n var expression;\n
try {\n expression = getExpression(expressionText);\n if (expression.s
copeIdent &&\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 } catch (ex) {\n console.error('Invalid expression syntax
: ' + expressionText, ex);\n return;\n }\n\n return function(model, n
ode, oneTime) {\n var binding = expression.getBinding(model, filterRegistry
, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymer
ExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIden
t)\n node.polymerExpressionIndexIdent_ = expression.indexIdent;\n
}\n\n return binding;\n }\n }\n\n // TODO(rafaelw): Implement simple L
RU.\n var expressionParseCache = Object.create(null);\n\n function getExpressi
on(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 expressionParseCache[expressionText] = expression;\n }\n return exp
ression;\n }\n\n function Literal(value) {\n this.value = value;\n this.
valueFn_ = undefined;\n }\n\n Literal.prototype = {\n valueFn: function() {
\n if (!this.valueFn_) {\n var value = this.value;\n this.val
ueFn_ = function() {\n return value;\n }\n }\n\n retur
n this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = na
me;\n this.path = Path.get(name);\n }\n\n IdentPath.prototype = {\n valu
eFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n
var path = this.path;\n this.valueFn_ = function(model, observer)
{\n if (observer)\n observer.addPath(model, path);\n\n
return path.getValueFrom(model);\n }\n }\n\n return this.va
lueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.pat
h.length == 1);\n model = findScope(model, this.path[0]);\n\n return
this.path.setValueFrom(model, newValue);\n }\n };\n\n function MemberExpre
ssion(object, property, accessor) {\n this.computed = accessor == '[';\n\n
this.dynamicDeps = typeof object == 'function' ||\n objec
t.dynamicDeps ||\n (this.computed && !(property instanceof
Literal));\n\n this.simplePath =\n !this.dynamicDeps &&\n (pro
perty instanceof IdentPath || property instanceof Literal) &&\n (object i
nstanceof MemberExpression || object instanceof IdentPath);\n\n this.object =
this.simplePath ? object : getFn(object);\n this.property = !this.computed |
| this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpress
ion.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n
var parts = this.object instanceof MemberExpression ?\n this.object.
fullPath.slice() : [this.object.name];\n parts.push(this.property instanc
eof IdentPath ?\n this.property.name : this.property.value);\n
this.fullPath_ = Path.get(parts);\n }\n\n return this.fullPath_;\n
},\n\n valueFn: function() {\n if (!this.valueFn_) {\n var objec
t = this.object;\n\n if (this.simplePath) {\n var path = this.fu
llPath;\n\n this.valueFn_ = function(model, observer) {\n if
(observer)\n observer.addPath(model, path);\n\n return
path.getValueFrom(model);\n };\n } else if (!this.computed) {\n
var path = Path.get(this.property.name);\n\n this.valueFn_ = f
unction(model, observer, filterRegistry) {\n var context = object(mod
el, observer, filterRegistry);\n\n if (observer)\n obser
ver.addPath(context, path);\n\n return path.getValueFrom(context);\n
}\n } else {\n // Computed property.\n var pro
perty = this.property;\n\n this.valueFn_ = function(model, observer, fi
lterRegistry) {\n var context = object(model, observer, filterRegistr
y);\n var propName = property(model, observer, filterRegistry);\n
if (observer)\n observer.addPath(context, [propName]);\n\n
return context ? context[propName] : undefined;\n };\n
}\n }\n return this.valueFn_;\n },\n\n setValue: function(mode
l, 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 = nam
e;\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, observer, filterRegistry, toModelDirection,\n
initialArgs) {\n var fn = filterRegistry[this.name];\n var conte
xt = model;\n if (fn) {\n context = undefined;\n } else {\n
fn = context[this.name];\n if (!fn) {\n console.error('Canno
t find function or filter: ' + this.name);\n return;\n }\n
}\n\n // If toModelDirection is falsey, then the \"normal\" (dom-bound) dir
ection\n // is used. Otherwise, it looks for a 'toModel' property function
on the\n // object.\n if (toModelDirection) {\n fn = fn.toModel
;\n } else if (typeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n
}\n\n if (typeof fn != 'function') {\n console.error('Cannot fin
d function or filter: ' + this.name);\n return;\n }\n\n var arg
s = initialArgs || [];\n for (var i = 0; i < this.args.length; i++) {\n
args.push(getFn(this.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 '+': fun
ction(v) { return +v; },\n '-': function(v) { return -v; },\n '!': functio
n(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 '%': functio
n(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': fun
ction(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 func
tion getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n
}\n\n function ASTDelegate() {\n this.expression = null;\n this.filters
= [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIde
nt = undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;
\n }\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op, ar
gument) {\n if (!unaryOperators[op])\n throw Error('Disallowed opera
tor: ' + op);\n\n argument = getFn(argument);\n\n return function(mode
l, observer, filterRegistry) {\n return unaryOperators[op](argument(model
, observer, filterRegistry));\n };\n },\n\n createBinaryExpression: f
unction(op, left, right) {\n if (!binaryOperators[op])\n throw Error
('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = getF
n(right);\n\n return function(model, observer, filterRegistry) {\n r
eturn binaryOperators[op](left(model, observer, filterRegistry),\n
right(model, observer, filterRegistry));\n };\n },\
n\n createConditionalExpression: function(test, consequent, alternate) {\n
test = getFn(test);\n consequent = getFn(consequent);\n alternate =
getFn(alternate);\n\n return function(model, observer, filterRegistry) {\n
return test(model, observer, filterRegistry) ?\n consequent(m
odel, observer, filterRegistry) :\n alternate(model, observer, filter
Registry);\n }\n },\n\n createIdentifier: function(name) {\n var
ident = new IdentPath(name);\n ident.type = 'Identifier';\n return id
ent;\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
createCallExpression: function(expression, args) {\n if (!(expression in
stanceof IdentPath))\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.trans
form(model, observer, filterRegistry, false);\n };\n },\n\n createLit
eral: function(token) {\n return new Literal(token.value);\n },\n\n c
reateArrayExpression: function(elements) {\n for (var i = 0; i < elements.l
ength; 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, fil
terRegistry));\n return arr;\n }\n },\n\n createProperty: func
tion(kind, key, value) {\n return {\n key: key instanceof IdentPath
? key.name : key.value,\n value: value\n };\n },\n\n createObj
ectExpression: function(properties) {\n for (var i = 0; i < properties.leng
th; i++)\n properties[i].value = getFn(properties[i].value);\n\n ret
urn function(model, 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 re
turn obj;\n }\n },\n\n createFilter: function(name, args) {\n th
is.filters.push(new Filter(name, args));\n },\n\n createAsExpression: func
tion(expression, scopeIdent) {\n this.expression = expression;\n this.
scopeIdent = scopeIdent;\n },\n\n createInExpression: function(scopeIdent,
indexIdent, expression) {\n this.expression = expression;\n this.scop
eIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\n\n createT
opLevel: function(expression) {\n this.expression = expression;\n },\n\n
createThisExpression: notImplemented\n }\n\n function ConstantObservable(v
alue) {\n this.value_ = value;\n }\n\n ConstantObservable.prototype = {\n
open: function() { return this.value_; },\n discardChanges: function() { re
turn this.value_; },\n deliver: function() {},\n close: function() {},\n
}\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeIden
t;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegate.expression)\
n throw Error('No expression found.');\n\n this.expression = delegate.ex
pression;\n getFn(this.expression); // forces enumeration of path dependencie
s\n\n this.filters = delegate.filters;\n this.dynamicDeps = delegate.dynam
icDeps;\n }\n\n Expression.prototype = {\n getBinding: function(model, filt
erRegistry, oneTime) {\n if (oneTime)\n return this.getValue(model,
undefined, filterRegistry);\n\n var observer = new CompoundObserver();\n
// captures deps.\n var firstValue = this.getValue(model, observer, filt
erRegistry);\n var firstTime = true;\n var self = this;\n\n funct
ion valueFn() {\n // deps cannot have changed on first value retrieval.\n
if (firstTime) {\n firstTime = false;\n return firstVa
lue;\n }\n\n if (self.dynamicDeps)\n observer.startReset(
);\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n fi
lterRegistry);\n if (self.dynamicDeps)\n observer.finishReset();
\n\n return value;\n }\n\n function setValueFn(newValue) {\n
self.setValue(model, newValue, filterRegistry);\n return newValue;\n
}\n\n return new ObserverTransform(observer, valueFn, setValueFn, tru
e);\n },\n\n getValue: function(model, observer, filterRegistry) {\n
var value = getFn(this.expression)(model, observer, filterRegistry);\n for
(var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].tra
nsform(model, observer, filterRegistry,\n false, [value]);\n }\n
\n return value;\n },\n\n setValue: function(model, newValue, filterR
egistry) {\n var count = this.filters ? this.filters.length : 0;\n whi
le (count-- > 0) {\n newValue = this.filters[count].transform(model, unde
fined,\n filterRegistry, true, [newValue]);\n }\n\n if (thi
s.expression.setValue)\n return this.expression.setValue(model, newValue)
;\n }\n }\n\n /**\n * Converts a style property name to a css property na
me. For example:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n
function convertStylePropertyName(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 iden
t paths must bind directly to the appropriate scope object.\n // I.e. Pushed va
lues in two-bindings need to be assigned to the actual model\n // object.\n fu
nction findScope(model, prop) {\n while (model[parentScopeName] &&\n
!Object.prototype.hasOwnProperty.call(model, prop)) {\n model = model[par
entScopeName];\n }\n\n return model;\n }\n\n function isLiteralExpressio
n(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 PolymerExpression
s.prototype = {\n // \"built-in\" filters\n styleObject: function(value) {
\n var parts = [];\n for (var key in value) {\n parts.push(conv
ertStylePropertyName(key) + ': ' + value[key]);\n }\n return parts.joi
n('; ');\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 A
PI\n prepareInstancePositionChanged: function(template) {\n var indexIde
nt = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n ret
urn;\n\n return function(templateInstance, index) {\n templateInstan
ce.model[indexIdent] = index;\n };\n },\n\n prepareBinding: function(
pathString, name, node) {\n var path = Path.get(pathString);\n\n if (!
isLiteralExpression(pathString) && path.valid) {\n if (path.length == 1)
{\n return function(model, node, oneTime) {\n if (oneTime)\n
return path.getValueFrom(model);\n\n var scope = findSc
ope(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 prepareInstanceModel: function(template) {\n var scopeName = templa
te.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n
var parentScope = template.templateInstance ?\n template.templateInst
ance.model :\n template.model;\n\n var indexName = template.polyme
rExpressionIndexIdent_;\n\n return function(model) {\n return create
ScopeObject(parentScope, model, scopeName, indexName);\n };\n }\n };\n\
n var createScopeObject = ('__proto__' in {}) ?\n function(parentScope, mode
l, scopeName, indexName) {\n var scope = {};\n scope[scopeName] = mode
l;\n scope[indexName] = undefined;\n scope[parentScopeName] = parentSc
ope;\n scope.__proto__ = parentScope;\n return scope;\n } :\n fu
nction(parentScope, model, scopeName, indexName) {\n var scope = Object.cre
ate(parentScope);\n Object.defineProperty(scope, scopeName,\n { va
lue: model, configurable: true, writable: true });\n Object.defineProperty(
scope, indexName,\n { value: undefined, configurable: true, writable: t
rue });\n Object.defineProperty(scope, parentScopeName,\n { value:
parentScope, configurable: true, writable: true });\n return scope;\n }
;\n\n global.PolymerExpressions = PolymerExpressions;\n PolymerExpressions.get
Expression = getExpression;\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 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 var
typeHandlers = {\n string: function(value) {\n return value;\n },\n
date: function(value) {\n return new Date(Date.parse(value) || Date.now()
);\n },\n boolean: function(value) {\n if (value === '') {\n r
eturn true;\n }\n return value === 'false' ? false : !!value;\n },\
n number: function(value) {\n var n = parseFloat(value);\n // hex v
alues like \"0xFFFF\" parseFloat as 0\n if (n === 0) {\n n = parseIn
t(value);\n }\n return isNaN(n) ? value : n;\n // this code disab
led because encoded values (like \"0xFFFF\")\n // do not round trip to thei
r original format\n //return (String(floatVal) === value) ? floatVal : valu
e;\n },\n object: function(value, currentValue) {\n if (currentValue
=== null) {\n return value;\n }\n try {\n // If the stri
ng is an object, we can parse is with the JSON library.\n // include conv
enience replace for single-quotes. If the author omits\n // quotes altoge
ther, 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 functio
ns\n 'function': function(value, currentValue) {\n return currentValue;\
n }\n };\n\n function deserializeValue(value, currentValue) {\n // attem
pt to infer type from default value\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 ty
pe string\n return typeHandlers[inferredType](value, currentValue);\n }\n\n
// exports\n\n scope.deserializeValue = deserializeValue;\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.g
ithub.io/LICENSE.txt\n * The complete set of authors may be found at http://poly
mer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at h
ttp://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 foun
d at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // impor
ts\n\n var extend = scope.extend;\n\n // module\n\n var api = {};\n\n api.de
claration = {};\n api.instance = {};\n\n api.publish = function(apis, prototyp
e) {\n for (var n in apis) {\n extend(prototype, apis[n]);\n }\n };\
n\n // exports\n\n scope.api = api;\n\n})(Polymer);\n","/*\n * Copyright (c) 2
014 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.i
o/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.gi
thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var utils = {\n /**\n
* Invokes a function asynchronously. The context of the callback\n * func
tion is bound to 'this' automatically.\n * @method async\n * @param {F
unction|String} method\n * @param {any|Array} args\n * @param {number}
timeout\n */\n async: function(method, args, timeout) {\n // when
polyfilling Object.observe, 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 = timeout ? setTimeout(fn, timeout) :\n requestAnima
tionFrame(fn);\n // NOTE: switch on inverting handle to determine which tim
e is used.\n return timeout ? handle : ~handle;\n },\n cancelAsync: f
unction(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 * @p
aram {Node} onNode Target node.\n */\n fire: function(type, detail, onNo
de, bubbles, cancelable) {\n var node = onNode || this;\n var detail =
detail || {};\n var event = new CustomEvent(type, {\n bubbles: (bub
bles !== undefined ? bubbles : true), \n cancelable: (cancelable !== unde
fined ? cancelable : true), \n detail: detail\n });\n node.disp
atchEvent(event);\n return event;\n },\n /**\n * Fire an event a
synchronously.\n * @method asyncFire\n * @param {string} type An event
name.\n * @param detail\n * @param {Node} toNode Target node.\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 node.\n
* @param old A node\n * @param className\n */\n classFollows: funct
ion(anew, old, className) {\n if (old) {\n old.classList.remove(clas
sName);\n }\n if (anew) {\n anew.classList.add(className);\n
}\n },\n /**\n * Inject HTML which contains markup bound to this e
lement into\n * a target element (replacing target element content).\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 var fragment
= this.instanceTemplate(template);\n if (element) {\n element.textC
ontent = '';\n element.appendChild(fragment);\n }\n return frag
ment;\n }\n };\n\n // no-operation function for handy stubs\n var nop = fu
nction() {};\n\n // null-object for handy stubs\n var nob = {};\n\n // deprec
ated\n\n utils.asyncMethod = utils.async;\n\n // exports\n\n scope.api.instan
ce.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n})(Polymer);\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 log = window.logFlags || {};\n var EVENT_PREFIX = 'on-';\n\n // in
stance events api\n var events = {\n // read-only\n EVENT_PREFIX: EVENT_P
REFIX,\n // event listeners on host\n addHostListeners: function() {\n
var events = this.eventDelegates;\n log.events && (Object.keys(events).le
ngth > 0) && console.log('[%s] addHostListeners:', this.localName, 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 support\n // multiple
event listeners ('host' and 'instance') and Node.bind\n // by default supp
orts 1 thing being bound.\n for (var type in events) {\n var methodN
ame = events[type];\n this.addEventListener(type, this.element.getEventHa
ndler(this, this,\n
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.events && console.groupEnd();\n Platf
orm.flush();\n }\n }\n };\n\n // exports\n\n scope.api.instance.event
s = events;\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 sty
le 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 comple
te 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 * s
ubject to an additional IP rights grant found at http://polymer.github.io/PATENT
S.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
property as needed\r\n takeAttributes: function() {\r\n // if we have no
publish 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.attribut
es, l=a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProper
ty(a.name, a.value);\r\n }\r\n }\r\n },\r\n // if attribute 'n
ame' is mapped to a property, deserialize\r\n // 'value' into that property\r
\n attributeToProperty: function(name, value) {\r\n // try to match this
attribute to a property (attributes are\r\n // all lower-case, so this is
case-insensitive 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 // them
selves\r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n
return;\r\n }\r\n // get original value\r\n var current
Value = this[name];\r\n // deserialize Boolean or Number values from attr
ibute\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 propert
y matching name, or undefined\r\n propertyForAttribute: function(name) {\r\n
var match = this._publishLC && this._publishLC[name];\r\n //console.lo
g('propertyForAttribute:', name, 'matches', match);\r\n return match;\r\n
},\r\n // convert representation of 'stringValue' based on type of 'current
Value'\r\n deserializeValue: function(stringValue, currentValue) {\r\n r
eturn scope.deserializeValue(stringValue, currentValue);\r\n },\r\n serial
izeValue: function(value, inferredType) {\r\n if (inferredType === 'boolean
') {\r\n return value ? '' : undefined;\r\n } else if (inferredType
!== 'object' && inferredType !== 'function'\r\n && value !== undefined)
{\r\n return value;\r\n }\r\n },\r\n reflectPropertyToAttribu
te: function(name) {\r\n var inferredType = typeof this[name];\r\n //
try to intelligently serialize property value\r\n var serializedValue = thi
s.serializeValue(this[name], inferredType);\r\n // boolean properties must
reflect as boolean attributes\r\n if (serializedValue !== undefined) {\r\n
this.setAttribute(name, serializedValue);\r\n // TODO(sorvell): we
should remove attr for all properties\r\n // that have undefined seriali
zation; however, we will need to\r\n // refine the attr reflection system
to achieve this; pica, for example,\r\n // relies on having inferredType
object properties not removed as\r\n // attrs.\r\n } else if (infer
redType === '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 = attribu
tes;\r\n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Aut
hors. All rights reserved.\n * This code may only be used under the BSD style li
cense found at http://polymer.github.io/LICENSE.txt\n * The complete set of auth
ors 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 || {};\n\n /
/ magic 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 = N
umber.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) &
& 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 value\n function resolveBindingValue(oldValue, value) {\n
if (value === undefined && 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$ = thi
s._observeNames;\n if (n$ && n$.length) {\n var o = this._propertyOb
server = new CompoundObserver(true);\n this.registerObserver(o);\n
// TODO(sorvell): may not be kosher to access the value here (this[n]);\n
// previously we looked at the descriptor on the prototype\n // this do
esn't work for inheritance and not for accessors without\n // a value pro
perty\n for (var 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.notifyPropertyCha
nges, this);\n }\n },\n notifyPropertyChanges: function(newValues, ol
dValues, paths) {\n var name, method, called = {};\n for (var i in old
Values) {\n // note: paths is of form [object, path, object, path]\n
name = paths[2 * i + 1];\n method = this.observe[name];\n if (m
ethod) {\n var ov = oldValues[i], nv = newValues[i];\n // obse
rves the value if it is an array\n this.observeArrayValue(name, nv, ov)
;\n if (!called[method]) {\n // only invoke change method if
one of ov or nv is not (undefined | null)\n if ((ov !== undefined &&
ov !== null) || (nv !== undefined && nv !== null)) {\n called[meth
od] = true;\n // TODO(sorvell): call method with the set of values
it's expecting;\n // e.g. 'foo bar': 'invalidate' expects the new a
nd old values for\n // foo and bar. Currently we give only one of t
hese and then\n // deliver all the arguments.\n this.i
nvokeMethod(method, [ov, nv, arguments]);\n }\n }\n }
\n }\n },\n deliverChanges: function() {\n if (this._propertyObs
erver) {\n this._propertyObserver.deliver();\n }\n },\n proper
tyChanged_: function(name, value, oldValue) {\n if (this.reflect[name]) {\n
this.reflectPropertyToAttribute(name);\n }\n },\n observeArra
yValue: function(name, value, old) {\n // we only care if there are registe
red side-effects\n var callbackName = this.observe[name];\n if (callba
ckName) {\n // if we are observing the previous value, stop\n if (
Array.isArray(old)) {\n log.observe && console.log('[%s] observeArrayVa
lue: unregister observer [%s]', this.localName, name);\n this.closeName
dObserver(name + '__array');\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 o
bserver.open(function(value, old) {\n this.invokeMethod(callbackName,
[old]);\n }, this);\n this.registerNamedObserver(name + '__ar
ray', observer);\n }\n }\n },\n emitPropertyChangeRecord: func
tion(name, value, oldValue) {\n var object = this;\n if (areSameValue(
value, oldValue))\n return;\n\n this.propertyChanged_(name, value, o
ldValue);\n\n if (!Observer.hasObjectObserve)\n return;\n\n var
notifier = this.notifier_;\n if (!notifier)\n notifier = this.notif
ier_ = Object.getNotifier(this);\n\n updateRecord.object = this;\n upd
ateRecord.name = name;\n updateRecord.oldValue = oldValue;\n\n notifie
r.notify(updateRecord);\n },\n bindToAccessor: function(name, observable,
resolveFn) {\n var privateName = name + '_';\n var privateObservable
= name + 'Observable_';\n\n this[privateObservable] = observable;\n va
r oldValue = this[privateName];\n\n var self = this;\n var value = obs
ervable.open(function(value, oldValue) {\n self[privateName] = value;\n
self.emitPropertyChangeRecord(name, value, oldValue);\n });\n\n
if (resolveFn && !areSameValue(oldValue, value)) {\n var resolvedValue =
resolveFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\
n value = resolvedValue;\n if (observable.setValue)\n
observable.setValue(value);\n }\n }\n\n this[privateName] =
value;\n this.emitPropertyChangeRecord(name, value, oldValue);\n\n var
observer = {\n close: function() {\n observable.close();\n
self[privateObservable] = undefined;\n }\n };\n this.regis
terObserver(observer);\n return observer;\n },\n createComputedProper
ties: function() {\n if (!this._computedNames) {\n return;\n }\
n\n for (var i = 0; i < this._computedNames.length; i++) {\n var nam
e = this._computedNames[i];\n var expressionText = this.computed[name];\n
try {\n var expression = PolymerExpressions.getExpression(expre
ssionText);\n var observable = expression.getBinding(this, this.element
.syntax);\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, resolveBindingVal
ue);\n },\n invokeMethod: function(method, args) {\n var fn = this[me
thod] || 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 item
s are arrays of observers.\n closeObservers: function() {\n if (!this._o
bservers) {\n return;\n }\n\n var observers = this._observers;\
n for (var i = 0; i < observers.length; i++) {\n var observer = obse
rvers[i];\n if (observer && typeof observer.close == 'function') {\n
observer.close();\n }\n }\n\n this._observers = [];\n }
,\n // bookkeeping observers for memory management\n registerNamedObserver
: function(name, observer) {\n var o$ = this._namedObservers || (this._name
dObservers = {});\n o$[name] = observer;\n },\n closeNamedObserver: f
unction(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._namedObse
rvers) {\n for (var i in this._namedObservers) {\n this.closeNam
edObserver(i);\n }\n this._namedObservers = {};\n }\n }\n
};\n\n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERV
ED = '[%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] prop
ertyChanged: [%s] now [%s] was [%s]';\n\n // exports\n\n scope.api.instance.pr
operties = properties;\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 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(function(scope) {\n\n // imports\n\n var log = window.logFlags |
| 0;\n\n // element api supporting mdv\n var mdv = {\n instanceTemplate: fu
nction(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 = d
om.bindings_;\n for (var i = 0; i < observers.length; i++) {\n this.
registerObserver(observers[i]);\n }\n return dom;\n },\n bind: f
unction(name, observable, oneTime) {\n var property = this.propertyForAttri
bute(name);\n if (!property) {\n // TODO(sjmiles): this mixin method
must use the special form\n // of `super` installed by `mixinMethod` in
declaration/prototype.js\n return this.mixinSuper(arguments);\n } el
se {\n // use n-way Polymer binding\n var observer = this.bindProp
erty(property, observable, oneTime);\n // NOTE: reflecting binding inform
ation is typically required only for\n // tooling. It has a performance c
ost so it's opt-in in Node.bind.\n if (Platform.enableBindingsReflection
&& observer) {\n observer.path = observable.path_;\n this._rec
ordBinding(property, observer);\n }\n if (this.reflect[property])
{\n this.reflectPropertyToAttribute(property);\n }\n retu
rn observer;\n }\n },\n bindFinished: function() {\n this.makeEl
ementReady();\n },\n _recordBinding: function(name, observer) {\n thi
s.bindings_ = this.bindings_ || {};\n this.bindings_[name] = observer;\n
},\n // TODO(sorvell): unbind/unbindAll has been removed, as public api, fro
m\n // TemplateBinding. We still need to close/dispose of observers but perha
ps\n // we should choose a more explicit name.\n asyncUnbindAll: function(
) {\n if (!this._unbound) {\n log.unbind && console.log('[%s] asyncU
nbindAll', this.localName);\n this._unbindAllJob = this.job(this._unbindA
llJob, this.unbindAll, 0);\n }\n },\n unbindAll: function() {\n
if (!this._unbound) {\n this.closeObservers();\n this.closeNamedOb
servers();\n this._unbound = true;\n }\n },\n cancelUnbindAll:
function() {\n if (this._unbound) {\n log.unbind && console.warn('[
%s] already unbound, cannot cancel unbindAll', this.localName);\n return;
\n }\n log.unbind && console.log('[%s] cancelUnbindAll', this.localNam
e);\n if (this._unbindAllJob) {\n this._unbindAllJob = this._unbindA
llJob.stop();\n }\n }\n };\n\n function unbindNodeTree(node) {\n fo
rNodeTree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n
node.unbindAll();\n }\n\n function forNodeTree(node, callback) {\n if (node
) {\n callback(node);\n for (var child = node.firstChild; child; child
= child.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n
}\n\n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exports\n\n scope.bi
ndPattern = 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
.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 var
base = {\n PolymerBase: true,\n job: function(job, 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 retu
rn Polymer.job.call(this, job, callback, wait);\n }\n },\n super: Pol
ymer.super,\n // user entry point for element has had its createdCallback cal
led\n created: function() {\n },\n // user entry point for element has
shadowRoot and is ready for\n // api interaction\n ready: function() {\n
},\n createdCallback: function() {\n if (this.templateInstance && this
.templateInstance.model) {\n console.warn('Attributes on ' + this.localNa
me + ' 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 // TODO(sorvell): replace
when ShadowDOMPolyfill issue is corrected\n // https://github.com/Polymer/
ShadowDOM/issues/420\n if (!this.ownerDocument.isStagingDocument || window.
ShadowDOMPolyfill) {\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
.localName);\n return;\n }\n this._elementPrepared = true;\n
// storage for shadowRoots info\n this.shadowRoots = {};\n // insta
ll property observers\n this.createPropertyObserver();\n // TODO (sorv
ell): temporarily open observer when created\n this.openPropertyObserver();
\n // install boilerplate attributes\n this.copyInstanceAttributes();\
n // process input attributes\n this.takeAttributes();\n // add e
vent listeners\n this.addHostListeners();\n },\n makeElementReady: fu
nction() {\n if (this._readied) {\n return;\n }\n this._re
adied = true;\n this.createComputedProperties();\n // TODO(sorvell): W
e could create an entry point here\n // for the user to compute property va
lues.\n // process declarative resources\n this.parseDeclarations(this
.__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attribute to s
imulate\n // :unresolved; remove this attribute to be compatible with nativ
e\n // CE.\n this.removeAttribute('unresolved');\n // user entry
point\n this.ready();\n // TODO (sorvell): temporarily open observer w
hen created\n // turn on property observation and take any initial changes\
n //this.openPropertyObserver();\n },\n attachedCallback: function()
{\n this.cancelUnbindAll();\n // invoke user action\n if (this.at
tached) {\n this.attached();\n }\n // TODO(sorvell): bc\n
if (this.enteredView) {\n this.enteredView();\n }\n // NOTE: do
mReady can be used to access elements in dom (descendants,\n // ancestors,
siblings) such that the developer is enured to upgrade\n // ordering. If th
e element definitions have loaded, domReady\n // can be used to access upgr
aded 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.preve
ntDispose) {\n this.asyncUnbindAll();\n }\n // invoke user acti
on\n if (this.detached) {\n this.detached();\n }\n // TODO
(sorvell): bc\n if (this.leftView) {\n this.leftView();\n }\n
},\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n thi
s.attachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback: f
unction() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc\n
enteredDocumentCallback: function() {\n this.attachedCallback();\n },
\n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n this.d
etachedCallback();\n },\n // recursive ancestral <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 input <element> as needed, over
ride for custom behavior\n parseDeclaration: function(elementElement) {\n
var template = this.fetchTemplate(elementElement);\n if (template) {\n
var root = this.shadowFromTemplate(template);\n this.shadowRoots[ele
mentElement.name] = root;\n }\n },\n // return a shadow-root template
(if desired), override for custom behavior\n fetchTemplate: function(element
Element) {\n return elementElement.querySelector('template');\n },\n
// utility function that creates a shadow root from a <template>\n shadowFrom
Template: 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 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.instanc
eTemplate(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 sh
adow root\n return root;\n }\n },\n // utility function that s
tamps a <template> into light-dom\n lightFromTemplate: function(template, ref
Node) {\n if (template) {\n // TODO(sorvell): mark this element as a
n eventController so that\n // event listeners on bound nodes inside it w
ill be called on it.\n // Note, the expectation here is that events on al
l descendants\n // should be handled by this element.\n this.event
Controller = this;\n // stamp template\n // which includes parsing
and applying MDV bindings before being\n // inserted (to avoid {{}} in a
ttribute 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 if (refNode) {\n this.insertBefore(dom,
refNode);\n } else {\n this.appendChild(dom);\n }\n
// perform post-construction initialization tasks on ahem, light root\n
this.shadowRootReady(this);\n // return the created shadow root\n
return dom;\n }\n },\n shadowRootReady: function(root) {\n //
locate nodes with id and store references to them in this.$ hash\n this.mar
shalNodeReferences(root);\n // set up polymer gestures\n PolymerGestur
es.register(root);\n },\n // locate nodes with id and store references to
them in this.$ hash\n marshalNodeReferences: function(root) {\n // estab
lish $ instance variable\n var $ = this.$ = this.$ || {};\n // populat
e $ 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 att
ributeChangedCallback: function(name, oldValue) {\n // TODO(sjmiles): adhoc
filter\n if (name !== 'class' && name !== 'style') {\n this.attribu
teToProperty(name, this.getAttribute(name));\n }\n if (this.attributeC
hanged) {\n this.attributeChanged.apply(this, arguments);\n }\n }
,\n onMutation: function(node, listener) {\n var observer = new Mutation
Observer(function(mutations) {\n listener.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(object) {\n return object.hasOwnPrope
rty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n funct
ion PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor = Pol
ymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = isBas
e;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n * Copyright (c) 2
014 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.i
o/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.gi
thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = wi
ndow.logFlags || {};\n \n // magic words\n \n var STYLE_SCOPE_ATTRIBUTE = 'e
lement';\n var STYLE_CONTROLLER_SCOPE = 'controller';\n \n var styles = {\n
STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs extern
al stylesheets and <style> elements with the attribute \n * polymer-scope='c
ontroller' into the scope of element. This is intended\n * to be a called du
ring custom element construction.\n */\n installControllerStyles: function
() {\n // apply controller styles, but only if they are not yet applied\n
var scope = this.findStyleScope();\n if (scope && !this.scopeHasNamedSt
yle(scope, this.localName)) {\n // allow inherited controller styles\n
var proto = getPrototypeOf(this), cssText = '';\n while (proto && pr
oto.element) {\n cssText += proto.element.cssTextForScope(STYLE_CONTROL
LER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (cs
sText) {\n this.installScopeCssText(cssText, scope);\n }\n
}\n },\n installScopeStyle: function(style, name, scope) {\n var scop
e = scope || this.findStyleScope(), name = name || '';\n if (scope && !this
.scopeHasNamedStyle(scope, this.localName + name)) {\n var cssText = '';\
n if (style instanceof 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.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 (window.ShadowDOMPolyfill) {\n cssText = shim
CssText(cssText, scope.host);\n }\n var style = this.element.cssTextTo
ScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyl
eToScope(style, scope);\n // cache that this style has been applied\n
this.styleCacheForScope(scope)[this.localName + name] = true;\n },\n findS
tyleScope: function(node) {\n // find the shadow root that contains this el
ement\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 (windo
w.ShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localNam
e : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (poly
fillScopeStyleCache[scopeName] = {});\n } else {\n return scope._sco
peStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfillSc
opeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ensur
e correct traversal\n // on platforms 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 = '', i
s = false;\n if (host) {\n name = host.localName;\n is = host.hasAt
tribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector(n
ame, is);\n return Platform.ShadowCSS.shimCssText(cssText, selector);\n }\n\
n // exports\n\n scope.api.instance.styles = styles;\n \n})(Polymer);\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(function(scope) {\n\n // import
s\n\n var extend = scope.extend;\n var api = scope.api;\n\n // imperative imp
lementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n func
tion element(name, prototype) {\n if (arguments.length === 1 && typeof argume
nts[0] !== 'string') {\n prototype = name;\n var script = document._cu
rrentScript;\n name = script && script.parentNode && script.parentNode.getA
ttribute ?\n script.parentNode.getAttribute('name') : '';\n if (!n
ame) {\n throw 'Element name could not be inferred.';\n }\n }\n
if (getRegisteredPrototype[name]) {\n throw 'Already registered (Polymer)
prototype for element ' + name;\n }\n // cache the prototype\n registe
rPrototype(name, prototype);\n // notify the registrar waiting for 'name', if
any\n notifyPrototype(name);\n }\n\n // async prototype source\n\n functi
on waitingForPrototype(name, client) {\n waitPrototype[name] = client;\n }\n
\n var waitPrototype = {};\n\n function notifyPrototype(name) {\n if (waitP
rototype[name]) {\n waitPrototype[name].registerWhenReady();\n delete
waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n // maps ta
g names to prototypes, as registered with\n // Polymer. Prototypes associated w
ith a tag name\n // using document.registerElement are available from\n // HTM
LElement.getPrototypeForTag().\n // If an element was fully registered by Polym
er, then\n // Polymer.getRegisteredPrototype(name) === \n // HTMLElement.get
PrototypeForTag(name)\n\n var prototypesByName = {};\n\n function registerProt
otype(name, prototype) {\n return prototypesByName[name] = prototype || {};\n
}\n\n function getRegisteredPrototype(name) {\n return prototypesByName[na
me];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegisteredProto
type;\n scope.waitingForPrototype = waitingForPrototype;\n\n // namespace shen
anigans so we can expose our scope on the registration \n // function\n\n // m
ake window.Polymer reference `element()`\n\n window.Polymer = element;\n\n //
TODO(sjmiles): find a way to do this that is less terrible\n // copy window.Pol
ymer 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 Polymer in the main\n // document. Platform collect
s those calls until we can process them, which\n // we do here.\n\n var declar
ations = Platform.deliverDeclarations();\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 P
olymer Project Authors. All rights reserved.\n * This code may only be used unde
r the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The co
mplete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * T
he complete set of contributors may be found at http://polymer.github.io/CONTRIB
UTORS.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/P
ATENTS.txt\n */\n\n(function(scope) {\n\nvar path = {\n resolveElementPaths: fu
nction(node) {\n Platform.urlResolver.resolveDom(node);\n },\n addResolvePa
thApi: function() {\n // let assetpath attribute modify the resolve path\n
var assetPath = this.getAttribute('assetpath') || '';\n var root = new URL(a
ssetPath, this.ownerDocument.baseURI);\n this.prototype.resolvePath = functio
n(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 * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at h
ttp://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 ma
y 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 ri
ghts 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
// magic words\n\n var STYLE_SELECTOR = 'style';\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(co
ntent);\n var styles = this.findLoadableStyles(content);\n if (sty
les.length) {\n var templateUrl = template.ownerDocument.baseURI;\n
return Platform.styleResolver.loadStyles(styles, templateUrl, callback);\n
}\n }\n if (callback) {\n callback();\n }\n },\
n convertSheetsToStyles: function(root) {\n var s$ = root.querySelectorA
ll(SHEET_SELECTOR);\n for (var i=0, l=s$.length, s, c; (i<l) && (s=s$[i]);
i++) {\n c = createStyleElement(importRuleForSheet(s, this.ownerDocument.
baseURI),\n this.ownerDocument);\n this.copySheetAttributes(c,
s);\n s.parentNode.replaceChild(c, s);\n }\n },\n copySheetAt
tributes: function(style, link) {\n for (var 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.querySelectorAll(STYLE_SELECTOR);\n
for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i++) {\n if (s.textCo
ntent.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 * elem
ent's template.\n * @param elementElement The <element> element to style.\n
*/\n installSheets: function() {\n this.cacheSheets();\n this.c
acheStyles();\n this.installLocalSheets();\n this.installGlobalStyles(
);\n },\n /**\n * Remove all sheets from element and store for later u
se.\n */\n cacheSheets: function() {\n this.sheets = this.findNodes(
SHEET_SELECTOR);\n this.sheets.forEach(function(s) {\n if (s.parentN
ode) {\n s.parentNode.removeChild(s);\n }\n });\n },\n
cacheStyles: function() {\n this.styles = this.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 loaded in an <element> element
and moves\n * their content into a <style> element inside the <element>'s t
emplate.\n * The sheet is then removed from the <element>. This is done only
so \n * that if the element is loaded in the main document, the sheet does\
n * not become active.\n * Note, ignores sheets with the attribute 'poly
mer-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 va
r content = this.templateContent();\n if (content) {\n var cssText =
'';\n sheets.forEach(function(sheet) {\n cssText += cssTextFrom
Sheet(sheet) + '\\n';\n });\n if (cssText) {\n var style
= createStyleElement(cssText, this.ownerDocument);\n content.insertBefo
re(style, content.firstChild);\n }\n }\n },\n findNodes: funct
ion(selector, matcher) {\n var nodes = this.querySelectorAll(selector).arra
y();\n var content = this.templateContent();\n if (content) {\n
var templateNodes = content.querySelectorAll(selector).array();\n nodes
= nodes.concat(templateNodes);\n }\n return matcher ? nodes.filter(mat
cher) : nodes;\n },\n /**\n * Promotes external stylesheets and <style
> elements with the attribute \n * polymer-scope='global' into global scope.
\n * This is particularly useful for defining @keyframe 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 addressed.\n installGlobal
Styles: function() {\n var style = this.styleForScope(STYLE_GLOBAL_SCOPE);\
n applyStyleToScope(style, document.head);\n },\n cssTextForScope: fu
nction(scopeDescriptor) {\n var cssText = '';\n // handle stylesheets\
n var selector = '[' + SCOPE_ATTR + '=' + scopeDescriptor + ']';\n var
matcher = function(s) {\n return matchesSelector(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(match
er);\n styles.forEach(function(style) {\n cssText += style.textConte
nt + '\\n\\n';\n });\n return cssText;\n },\n styleForScope: fun
ction(scopeDescriptor) {\n var cssText = this.cssTextForScope(scopeDescript
or);\n return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n },\n
cssTextToScopeStyle: function(cssText, scopeDescriptor) {\n if (cssText
) {\n var style = createStyleElement(cssText);\n style.setAttribut
e(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') +\n '-' + scopeDes
criptor);\n return style;\n }\n }\n };\n\n function importRuleF
orSheet(sheet, baseUrl) {\n var href = new URL(sheet.getAttribute('href'), ba
seUrl).href;\n return '@import \\'' + href + '\\';';\n }\n\n function apply
StyleToScope(style, scope) {\n if (style) {\n if (scope === document) {\
n scope = document.head;\n }\n if (window.ShadowDOMPolyfill) {\
n scope = document.head;\n }\n // TODO(sorvell): necessary for
IE\n // see https://connect.microsoft.com/IE/feedback/details/790212/\n
// cloning-a-style-element-and-adding-to-document-produces\n // -unexpect
ed-result#details\n // var clone = style.cloneNode(true);\n var clone
= createStyleElement(style.textContent);\n var attr = style.getAttribute(ST
YLE_SCOPE_ATTRIBUTE);\n if (attr) {\n clone.setAttribute(STYLE_SCOPE
_ATTRIBUTE, attr);\n }\n // TODO(sorvell): probably too brittle; try t
o figure out \n // where to put the element.\n var refNode = scope.fir
stElementChild;\n if (scope === document.head) {\n var selector = 's
tyle[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelec
torAll(selector);\n if (s$.length) {\n refNode = s$[s$.length-1]
.nextElementSibling;\n }\n }\n scope.insertBefore(clone, refNod
e);\n }\n }\n\n function createStyleElement(cssText, scope) {\n scope =
scope || document;\n scope = scope.createElement ? scope : scope.ownerDocumen
t;\n var style = scope.createElement('style');\n style.textContent = cssTe
xt;\n return style;\n }\n\n function cssTextFromSheet(sheet) {\n return
(sheet && sheet.__resource) || '';\n }\n\n function matchesSelector(node, inSe
lector) {\n if (matches) {\n return matches.call(node, inSelector);\n
}\n }\n var p = HTMLElement.prototype;\n var matches = p.matches || p.matche
sSelector || p.webkitMatchesSelector \n || p.mozMatchesSelector;\n \n //
exports\n\n scope.api.declaration.styles = styles;\n scope.applyStyleToScope =
applyStyleToScope;\n \n})(Polymer);\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 // imports\n\n var log = window.logFlags ||
{};\n var api = scope.api.instance.events;\n var EVENT_PREFIX = api.EVENT_PRE
FIX;\n // polymer-element declarative api: events feature\n\n var mixedCaseEve
ntTypes = {};\n [\n 'webkitAnimationStart',\n 'webkitAnimationEnd',\n
'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocusIn',\n 'DOMMouseScro
ll'\n ].forEach(function(e) {\n mixedCaseEventTypes[e.toLowerCase()] = e;\n
});\n\n var events = {\n parseHostEvents: function() {\n // our delega
tes map\n var delegates = this.prototype.eventDelegates;\n // extract
data from attributes into delegates\n this.addAttributeDelegates(delegates)
;\n },\n addAttributeDelegates: function(delegates) {\n // for each a
ttribute\n for (var i=0, a; a=this.attributes[i]; i++) {\n // does i
t have magic marker identifying it as an event delegate?\n if (this.hasEv
entPrefix(a.name)) {\n // if so, add the info to delegates\n d
elegates[this.removeEventPrefix(a.name)] = a.value.replace('{{', '')\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 removeEventPrefix: function(n) {\n
return n.slice(prefixLength);\n },\n findController: function(node) {
\n while (node.parentNode) {\n if (node.eventController) {\n
return node.eventController;\n }\n node = node.parentNode;\n
}\n return node.host;\n },\n getEventHandler: function(controller,
target, method) {\n var events = this;\n return function(e) {\n
if (!controller || !controller.PolymerBase) {\n controller = events.fi
ndController(target);\n }\n\n var args = [e, e.detail, e.currentTa
rget];\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.remove
EventPrefix(name);\n eventType = mixedCaseEventTypes[eventType] || eventTyp
e;\n\n var events = this;\n\n return function(model, node, oneTime) {\
n var handler = events.getEventHandler(undefined, node, pathString);\n
node.addEventListener(eventType, handler);\n\n if (oneTime)\n
return;\n\n // TODO(rafaelw): This is really pointless work. Aside fro
m the cost\n // of these allocations, NodeBind is going to setAttribute b
ack to its\n // current value. Fixing this would mean changing the Templa
teBinding\n // binding delegate API.\n function bindingValue() {\n
return '{{ ' + pathString + ' }}';\n }\n\n return {\n
open: bindingValue,\n discardChanges: bindingValue,\n c
lose: function() {\n node.removeEventListener(eventType, handler);\n
}\n };\n };\n }\n };\n\n var prefixLength = EVENT_PREF
IX.length;\n\n // exports\n scope.api.declaration.events = events;\n\n})(Polym
er);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reser
ved.\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 ht
tp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be f
ound 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 g
rant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\
n // element api\n\n var properties = {\n inferObservers: function(prototyp
e) {\n // called before prototype.observe is chained to inherited object\n
var observe = prototype.observe, property;\n for (var n in prototype)
{\n if (n.slice(-7) === 'Changed') {\n if (!observe) {\n
observe = (prototype.observe = {});\n }\n property = n.sl
ice(0, -7)\n observe[property] = observe[property] || n;\n }\n
}\n },\n explodeObservers: function(prototype) {\n // called befo
re prototype.observe is chained to inherited object\n var o = prototype.obs
erve;\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 exploded[ni] = o[n];\n }\n }\n prototype
.observe = exploded;\n }\n },\n optimizePropertyMaps: function(protot
ype) {\n if (prototype.observe) {\n // construct name list\n
var a = prototype._observeNames = [];\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 (pro
totype.publish) {\n // construct name list\n var a = prototype._pu
blishNames = [];\n for (var n in prototype.publish) {\n a.push(n
);\n }\n }\n if (prototype.computed) {\n // construct na
me list\n var a = prototype._computedNames = [];\n for (var n in p
rototype.computed) {\n a.push(n);\n }\n }\n },\n publ
ishProperties: function(prototype, base) {\n // if we have any properties t
o publish\n var publish = prototype.publish;\n if (publish) {\n
// transcribe `publish` entries onto own prototype\n this.requirePropert
ies(publish, prototype, base);\n // construct map of lower-cased property
names\n prototype._publishLC = this.lowerCaseMap(publish);\n }\n
},\n // sync prototype to property descriptors;\n // desriptor format con
tains default value and optionally a\n // hint for reflecting the property to
an attribute.\n // e.g. {foo: 5, bar: {value: true, reflect: true}}\n //
reflect: {foo: true} is also supported\n //\n requireProperties: function(
propertyDescriptors, prototype, base) {\n // reflected properties\n pr
ototype.reflect = prototype.reflect || {};\n // ensure a prototype value fo
r each property\n // and update the property's reflect to attribute status\
n for (var n in propertyDescriptors) {\n var propertyDescriptor = pr
opertyDescriptors[n];\n var reflects = this.reflectHintForDescriptor(prop
ertyDescriptor);\n if (prototype.reflect[n] === undefined && reflects !==
undefined) {\n prototype.reflect[n] = reflects;\n }\n if
(prototype[n] === undefined) {\n prototype[n] = this.valueForDescripto
r(propertyDescriptor);\n }\n }\n },\n valueForDescriptor: func
tion(propertyDescriptor) {\n var value = typeof propertyDescriptor === 'obj
ect' &&\n propertyDescriptor ? propertyDescriptor.value : propertyDescr
iptor;\n return value !== undefined ? value : null;\n },\n // returns
the value of the descriptor's 'reflect' property or undefined\n reflectHintF
orDescriptor: function(propertyDescriptor) {\n if (typeof propertyDescripto
r === 'object' &&\n propertyDescriptor && propertyDescriptor.reflect !=
= undefined) {\n return propertyDescriptor.reflect;\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.proto
type;\n\n var privateName = name + '_';\n var privateObservable = nam
e + 'Observable_';\n proto[privateName] = proto[name];\n\n Object.defi
neProperty(proto, name, {\n get: function() {\n var observable =
this[privateObservable];\n if (observable)\n observable.del
iver();\n\n return this[privateName];\n },\n set: functio
n(value) {\n var observable = this[privateObservable];\n if (o
bservable) {\n observable.setValue(value);\n return;\n
}\n\n var oldValue = this[privateName];\n this[privateNa
me] = value;\n this.emitPropertyChangeRecord(name, value, oldValue);\n\
n return value;\n },\n configurable: true\n });\n
},\n createPropertyAccessors: function(prototype) {\n var n$ = prototyp
e._publishNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.lengt
h, n, fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\
n }\n }\n\n var n$ = prototype._computedNames;\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\n // exports\n\n scope.api.declaration.properties = properties;\n\n})(Poly
mer);\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(function(scope) {\n\n
// magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attributes';\n var ATTRIBUTES
_REGEX = /\\s|,/;\n\n // attributes api\n\n var attributes = {\n \n inhe
ritAttributesObjects: function(prototype) {\n // chain our lower-cased publ
ish map to the inherited version\n this.inheritObject(prototype, 'publishLC
');\n // chain our instance attributes map to the inherited version\n
this.inheritObject(prototype, '_instanceAttributes');\n },\n\n publishAttr
ibutes: function(prototype, base) {\n // merge names from 'attributes' attr
ibute\n var attributes = this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if
(attributes) {\n // get properties to publish\n var publish = pro
totype.publish || (prototype.publish = {});\n // names='a b c' or names='
a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // reco
rd 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 // i
f the user hasn't specified a value, we want to use the\n // default, u
nless a superclass has already chosen one\n if (n && publish[n] === und
efined) {\n // TODO(sjmiles): querying native properties on IE11 (and
possibly\n // on other browsers) throws an exception because there i
s no actual\n // instance.\n // In fact, trying to publish
native properties is known bad for this\n // and other reasons, and
we need to solve this problem writ large.\n try {\n var
hasValue = (base[n] !== undefined);\n } catch(x) {\n has
Value = false;\n }\n // supply an empty 'descriptor' objec
t and let the publishProperties\n // code determine a default\n
if (!hasValue) {\n publish[n] = Polymer.nob;\n }\n
}\n }\n }\n },\n\n // record clonable attributes fro
m <element>\n accumulateInstanceAttributes: function() {\n // inherit in
stance attributes\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.isInsta
nceAttribute(a.name)) {\n clonable[a.name] = a.value;\n }\n
}\n },\n\n isInstanceAttribute: function(name) {\n return !this.blac
kList[name] && name.slice(0,3) !== 'on-';\n },\n\n // do not clone these a
ttributes onto instances\n blackList: {\n name: 1,\n 'extends': 1,\
n constructor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-cs
stext': 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 * Copyright (c) 2
014 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.i
o/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.gi
thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n var events = s
cope.api.declaration.events;\n\n var syntax = new PolymerExpressions();\n var
prepareBinding = syntax.prepareBinding;\n\n // Polymer takes a first crack at t
he binding to see if it's a declarative\n // event handler.\n syntax.prepareBi
nding = function(pathString, name, node) {\n return events.prepareEventBindin
g(pathString, name, node) ||\n prepareBinding.call(syntax, pathString,
name, node);\n };\n\n // declaration api supporting mdv\n var mdv = {\n s
yntax: syntax,\n fetchTemplate: function() {\n return this.querySelector
('template');\n },\n templateContent: function() {\n var template = t
his.fetchTemplate();\n return template && Platform.templateContent(template
);\n },\n installBindingDelegate: function(template) {\n if (template
) {\n template.bindingDelegate = this.syntax;\n }\n }\n };\n\n
// exports\n scope.api.declaration.mdv = mdv;\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 // imports\n \n v
ar api = scope.api;\n var isBase = scope.isBase;\n var extend = scope.extend;\
n\n // prototype api\n\n var prototype = {\n\n register: function(name, ext
endeeName) {\n // build prototype combining extendee, Polymer base, and nam
ed api\n this.buildPrototype(name, extendeeName);\n // register our cu
stom 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, e
xtendeeName) {\n // get our custom prototype (before chaining)\n var e
xtension = scope.getRegisteredPrototype(name);\n // get basal prototype\n
var base = this.generateBasePrototype(extendeeName);\n // implement dec
larative features\n this.desugarBeforeChaining(extension, base);\n //
join prototypes\n this.prototype = this.chainPrototypes(extension, base);\n
// more declarative features\n this.desugarAfterChaining(name, extend
eeName);\n },\n\n desugarBeforeChaining: function(prototype, base) {\n
// back reference declaration element\n // TODO(sjmiles): replace `elemen
t` with `elementElement` or `declaration`\n prototype.element = this;\n
// transcribe `attributes` declarations onto own prototype's `publish`\n
this.publishAttributes(prototype, base);\n // `publish` properties to the p
rototype and to attribute watch\n this.publishProperties(prototype, base);\
n // infer observers for `observe` list based on method names\n this.i
nferObservers(prototype);\n // desugar compound observer syntax, e.g. 'a b
c' \n this.explodeObservers(prototype);\n },\n\n chainPrototypes: fun
ction(prototype, base) {\n // chain various meta-data objects to inherited
versions\n this.inheritMetaData(prototype, base);\n // chain custom ap
i to inherited\n var chained = this.chainObject(prototype, base);\n //
x-platform fixup\n ensurePrototypeTraversal(chained);\n return chaine
d;\n },\n\n inheritMetaData: function(prototype, base) {\n // chain o
bserve object to inherited\n this.inheritObject('observe', prototype, base)
;\n // chain publish object to inherited\n this.inheritObject('publish
', prototype, base);\n // chain reflect object to inherited\n this.inh
eritObject('reflect', prototype, base);\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('_instanceAttributes', prototype, base);\n // chain o
ur event delegates map to the inherited version\n this.inheritObject('event
Delegates', prototype, base);\n },\n\n // implement various declarative fe
atures\n desugarAfterChaining: function(name, extendee) {\n // build sid
e-chained lists to optimize iterations\n this.optimizePropertyMaps(this.pro
totype);\n this.createPropertyAccessors(this.prototype);\n // install
mdv delegate on template\n this.installBindingDelegate(this.fetchTemplate()
);\n // install external stylesheets as if they are inline\n this.inst
allSheets();\n // adjust any paths in dom from imports\n this.resolveE
lementPaths(this);\n // compile list of attributes to copy to instances\n
this.accumulateInstanceAttributes();\n // parse on-* delegates declared
on `this` element\n this.parseHostEvents();\n //\n // install a
helper method this.resolvePath to aid in \n // setting resource urls. e.g.\
n // this.$.image.src = this.resolvePath('images/foo.png')\n this.addR
esolvePathApi();\n // under ShadowDOMPolyfill, transforms to approximate mi
ssing CSS features\n if (window.ShadowDOMPolyfill) {\n Platform.Shad
owCSS.shimStyling(this.templateContent(), name, extendee);\n }\n // al
low custom element access to the declarative context\n if (this.prototype.r
egisterCallback) {\n this.prototype.registerCallback(this);\n }\n
},\n\n // if a named constructor is requested in element, map a reference\n
// to the constructor to the given symbol\n publishConstructor: function()
{\n var symbol = this.getAttribute('constructor');\n if (symbol) {\n
window[symbol] = this.ctor;\n }\n },\n\n // build prototype co
mbining extendee, Polymer base, and named api\n generateBasePrototype: functi
on(extnds) {\n var prototype = this.findBasePrototype(extnds);\n if (!
prototype) {\n // create a prototype based on tag-name extension\n
var prototype = HTMLElement.getPrototypeForTag(extnds);\n // insert base
api in inheritance chain (if needed)\n prototype = this.ensureBaseApi(pr
ototype);\n // memoize this base\n memoizedBases[extnds] = prototy
pe;\n }\n return prototype;\n },\n\n findBasePrototype: function
(name) {\n return memoizedBases[name];\n },\n\n // install Polymer in
stance api into prototype chain, as needed \n ensureBaseApi: function(prototy
pe) {\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 o
f simply chaining\n api.publish(api.instance, extended);\n // TODO(sjm
iles): sharing methods across prototype chains is\n // not supported by 'su
per' implementation which optimizes\n // by memoizing prototype relationshi
ps.\n // Probably we should have a version of 'extend' that is \n // s
hare-aware: it could study the text of each function,\n // look for usage o
f '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 // insta
lled is called `mixinSuper` and the mixin method\n // must use this method
instead of the default `super`.\n this.mixinMethod(extended, prototype, api
.instance.mdv, 'bind');\n // return buffed-up prototype\n return exten
ded;\n },\n\n mixinMethod: function(extended, prototype, api, name) {\n
var $super = function(args) {\n return prototype[name].apply(this, arg
s);\n };\n extended[name] = function() {\n this.mixinSuper = $s
uper;\n return api[name].apply(this, arguments);\n }\n },\n\n
// ensure prototype[name] inherits from a prototype.prototype[name]\n inherit
Object: 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.chainObject(source, base[name]);\n },\n
\n // register 'prototype' to custom element 'name', store constructor \n
registerPrototype: function(name, extendee) { \n var info = {\n prot
otype: this.prototype\n }\n // native element must be specified in ext
ends\n var typeExtension = this.findTypeExtension(extendee);\n if (typ
eExtension) {\n info.extends = typeExtension;\n }\n // register
the prototype with HTMLElement for name lookup\n HTMLElement.register(name
, this.prototype);\n // register the custom type\n this.ctor = documen
t.registerElement(name, info);\n },\n\n findTypeExtension: function(name)
{\n if (name && name.indexOf('-') < 0) {\n return name;\n } els
e {\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 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 !== inherited) {\n object.__proto__ = inh
erited;\n }\n return object;\n }\n } else {\n prototype.chainOb
ject = function(object, inherited) {\n if (object && inherited && object !=
= inherited) {\n var chained = Object.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 // c
hain of a custom element is simulated via installation of __proto__.\n // Altho
ugh custom elements manages this, we install it here so it's\n // available dur
ing desugaring.\n function ensurePrototypeTraversal(prototype) {\n if (!Obje
ct.__proto__) {\n var ancestor = Object.getPrototypeOf(prototype);\n p
rototype.__proto__ = ancestor;\n if (isBase(ancestor)) {\n ancestor.
__proto__ = Object.getPrototypeOf(ancestor);\n }\n }\n }\n\n // export
s\n\n api.declaration.prototype = prototype;\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 /*\n\n Elements a
re 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 eleme
nts to load resources (like stylesheets) \n asynchronously. We need to do thi
s until the platform provides an efficient\n alternative. One issue is that r
emote @import stylesheets are \n re-fetched whenever stamped into a shadowRoo
t.\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 elements to be enured from\n
upgrade ordering as long as they query the dom tree 1 task after\n upgrad
e (aka domReady). This is a performance tradeoff. On the one hand,\n elements
that could register while imports are loading 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 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: function(element, check,
go) {\n var shouldAdd = element.__queue && !element.__queue.check;\n
if (shouldAdd) {\n queueForElement(element).push(element);\n eleme
nt.__queue.check = check;\n element.__queue.go = go;\n }\n retu
rn (this.indexOf(element) !== 0);\n },\n\n indexOf: function(element) {\n
var i = queueForElement(element).indexOf(element);\n if (i >= 0 && doc
ument.contains(element)) {\n i += (HTMLImports.useNative || HTMLImports.r
eady) ? \n importQueue.length : 1e9;\n }\n return i; \n }
,\n\n // tell the queue an element is ready to be registered\n go: functio
n(element) {\n var readied = this.remove(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.che
ck.call(element);\n }\n if (this.canReady()) {\n this.ready();\
n return true;\n }\n },\n\n nextElement: function() {\n r
eturn nextQueued();\n },\n\n canReady: function() {\n return !this.wa
itToReady && this.isEmpty();\n },\n\n isEmpty: function() {\n for (va
r 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 addToFlushQueue: function(element) {\n
flushQueue.push(element); \n },\n\n flush: function() {\n // preve
nt re-entrance\n if (this.flushing) {\n return;\n }\n if (
flushQueue.length) {\n console.warn('flushing %s elements', flushQueue.le
ngth);\n }\n this.flushing = true;\n var element;\n while (f
lushQueue.length) {\n element = flushQueue.shift();\n element.__qu
eue.go.call(element);\n element.__queue = null;\n }\n this.flus
hing = false;\n },\n\n ready: function() {\n this.flush();\n //
TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n // whil
e registering. This way we avoid having to upgrade each document\n // piece
meal per registration and can instead register all elements\n // and upgrad
e once in a batch. Without this optimization, upgrade time\n // degrades si
gnificantly when SD polyfill is used. This is mainly because\n // querying
the document tree for elements is slow under the SD polyfill.\n if (CustomE
lements.ready === false) {\n CustomElements.upgradeDocumentTree(document)
;\n CustomElements.ready = true;\n }\n Platform.flush();\n
requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n addReadyCallbac
k: function(callback) {\n if (callback) {\n readyCallbacks.push(call
back);\n }\n },\n\n flushReadyCallbacks: function() {\n if (read
yCallbacks) {\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 f
unction queueForElement(element) {\n return document.contains(element) ? main
Queue : importQueue;\n }\n\n function nextQueued() {\n return importQueue.l
ength ? importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied = false; \n\
n document.addEventListener('WebComponentsReady', function() {\n CustomEleme
nts.ready = false;\n });\n \n function whenPolymerReady(callback) {\n queu
e.waitToReady = true;\n CustomElements.ready = false;\n HTMLImports.whenIm
portsReady(function() {\n queue.addReadyCallback(callback);\n queue.wa
itToReady = false;\n queue.check();\n });\n }\n\n // exports\n scope.
elements = elements;\n scope.queue = queue;\n scope.whenReady = scope.whenPoly
merReady = whenPolymerReady;\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 var whenPolymerReady = scope.whenPolyme
rReady;\n\n function importElements(elementOrFragment, callback) {\n if (ele
mentOrFragment) {\n document.head.appendChild(elementOrFragment);\n wh
enPolymerReady(callback);\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, link; (i<l) && (url=urls[i]); i++) {\n link = documen
t.createElement('link');\n link.rel = 'import';\n link.href =
url;\n frag.appendChild(link);\n }\n importElements(frag,
callback);\n } else if (callback) {\n callback();\n }\n }\n\n // e
xports\n scope.import = importUrls;\n scope.importElements = importElements;\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\n // imports\n\n var extend = scope.extend;\n var api = scope.api;\
n var queue = scope.queue;\n var whenPolymerReady = scope.whenPolymerReady;\n
var getRegisteredPrototype = scope.getRegisteredPrototype;\n var waitingForPro
totype = scope.waitingForPrototype;\n\n // declarative implementation: <polymer
-element>\n\n var prototype = extend(Object.create(HTMLElement.prototype), {\n\
n createdCallback: function() {\n if (this.getAttribute('name')) {\n
this.init();\n }\n },\n\n init: function() {\n // fetch decl
ared values\n this.name = this.getAttribute('name');\n this.extends =
this.getAttribute('extends');\n queue.wait(this);\n // initiate any as
ync resource fetches\n this.loadResources();\n // register when all co
nstraints are met\n this.registerWhenReady();\n },\n\n // TODO(sorvel
l): we currently queue in the order the prototypes are \n // registered, but
we should queue in the order that polymer-elements\n // are registered. We ar
e currently blocked from doing this based on \n // crbug.com/395686.\n reg
isterWhenReady: function() {\n if (this.registered\n || this.waitingFo
rPrototype(this.name)\n || this.waitingForQueue()\n || this.waitingF
orResources()) {\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 i
f (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n console.
warn('%s is attempting to extend %s, an unregistered element ' +\n 'o
r one that was not registered with Polymer.', this.name,\n this.exten
ds);\n }\n this.register(this.name, this.extends);\n this.registe
red = true;\n },\n\n waitingForPrototype: function(name) {\n if (!get
RegisteredPrototype(name)) {\n // then wait for a prototype\n wait
ingForPrototype(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.hasAttribute('noscript'
) && !this.noscript) {\n this.noscript = true;\n // imperative ele
ment registration\n Polymer(name);\n }\n },\n\n waitingForReso
urces: function() {\n return this._needsResources;\n },\n\n // NOTE:
Elements must be queued in proper order for inheritance/composition\n // depe
ndency resolution. Previously this was enforced for inheritance,\n // and by
rule for composition. It's now entirely by rule.\n waitingForQueue: function(
) {\n return queue.enqueue(this, this.registerWhenReady, this._register);\n
},\n\n loadResources: function() {\n this._needsResources = true;\n
this.loadStyles(function() {\n this._needsResources = false;\n
this.registerWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-p
luggable APIs \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.publish(api.declaration, prototype);\n\n // utility and bookkeeping\n\
n function isRegistered(name) {\n return Boolean(HTMLElement.getPrototypeFor
Tag(name));\n }\n\n function isCustomTag(name) {\n return (name && name.ind
exOf('-') >= 0);\n }\n\n // boot tasks\n\n whenPolymerReady(function() {\n
document.body.removeAttribute('unresolved');\n document.dispatchEvent(\n
new CustomEvent('polymer-ready', {bubbles: true})\n );\n });\n\n // regis
ter polymer-element with document\n\n document.registerElement('polymer-element
', {prototype: prototype});\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Po
lymer 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 com
plete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * Th
e complete set of contributors may be found at http://polymer.github.io/CONTRIBU
TORS.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/PA
TENTS.txt\n */\n\n/**\n * The `auto-binding` element extends the template elemen
t. 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 co
ntroller for the \n * elements it contains. Both data and event handlers can be
bound. \n *\n * The `auto-binding` element acts just like a template that is bou
nd to \n * a model. It stamps its content in the dom adjacent to itself. When th
e \n * content is stamped, the `template-bound` event is fired.\n *\n * Example:
\n *\n * <template is=\"auto-binding\">\n * <div>Say something: <input
value=\"{{value}}\"></div>\n * <div>You said: {{value}}</div>\n * <
button on-tap=\"{{buttonTap}}\">Tap me!</button>\n * </template>\n * <sc
ript>\n * var template = document.querySelector('template');\n * tem
plate.value = 'something';\n * template.buttonTap = function() {\n *
console.log('tap!');\n * };\n * </script>\n *\n * @module 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 Polymer('auto-bind
ing', {\n\n createdCallback: function() {\n this.syntax = this.bindingDe
legate = this.makeSyntax();\n // delay stamping until polymer-ready so that
auto-binding is not\n // required to load last.\n Polymer.whenPolymer
Ready(function() {\n this.model = this;\n this.setAttribute('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 th
an just stamped ones. We'd need to use createInstance\n // to fix this
or something else fancier.\n this.marshalNodeReferences(this.parentNode
);\n // template stamping is asynchronous so stamping isn't complete\n
// by polymer-ready; fire an event so users can use stamped elements\n
this.fire('template-bound');\n });\n }.bind(this));\n },
\n\n makeSyntax: function() {\n var events = Object.create(Polymer.api.d
eclaration.events);\n var self = this;\n events.findController = funct
ion() { return self.model; };\n\n var syntax = new PolymerExpressions();\n
var prepareBinding = syntax.prepareBinding; \n syntax.prepareBinding
= function(pathString, name, node) {\n return events.prepareEventBinding(
pathString, name, node) ||\n prepareBinding.call(syntax, pathStrin
g, name, node);\n };\n return syntax;\n }\n\n });\n\n})();\n"]} | 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"]} |