1 {"version":3,"file":"platform.js","sources":["../PointerGestures/src/PointerGest
ureEvent.js","../WeakMap/weakmap.js","../observe-js/src/observe.js","build/if-po
ly.js","../ShadowDOM/src/wrappers.js","../ShadowDOM/src/microtask.js","../Shadow
DOM/src/MutationObserver.js","../ShadowDOM/src/TreeScope.js","../ShadowDOM/src/w
rappers/events.js","../ShadowDOM/src/wrappers/NodeList.js","../ShadowDOM/src/wra
ppers/HTMLCollection.js","../ShadowDOM/src/wrappers/Node.js","../ShadowDOM/src/q
uerySelector.js","../ShadowDOM/src/wrappers/node-interfaces.js","../ShadowDOM/sr
c/wrappers/CharacterData.js","../ShadowDOM/src/wrappers/Text.js","../ShadowDOM/s
rc/wrappers/Element.js","../ShadowDOM/src/wrappers/HTMLElement.js","../ShadowDOM
/src/wrappers/HTMLCanvasElement.js","../ShadowDOM/src/wrappers/HTMLContentElemen
t.js","../ShadowDOM/src/wrappers/HTMLImageElement.js","../ShadowDOM/src/wrappers
/HTMLShadowElement.js","../ShadowDOM/src/wrappers/HTMLTemplateElement.js","../Sh
adowDOM/src/wrappers/HTMLMediaElement.js","../ShadowDOM/src/wrappers/HTMLAudioEl
ement.js","../ShadowDOM/src/wrappers/HTMLOptionElement.js","../ShadowDOM/src/wra
ppers/HTMLSelectElement.js","../ShadowDOM/src/wrappers/HTMLTableElement.js","../
ShadowDOM/src/wrappers/HTMLTableSectionElement.js","../ShadowDOM/src/wrappers/HT
MLTableRowElement.js","../ShadowDOM/src/wrappers/HTMLUnknownElement.js","../Shad
owDOM/src/wrappers/SVGElement.js","../ShadowDOM/src/wrappers/SVGUseElement.js","
../ShadowDOM/src/wrappers/SVGElementInstance.js","../ShadowDOM/src/wrappers/Canv
asRenderingContext2D.js","../ShadowDOM/src/wrappers/WebGLRenderingContext.js",".
./ShadowDOM/src/wrappers/Range.js","../ShadowDOM/src/wrappers/generic.js","../Sh
adowDOM/src/wrappers/ShadowRoot.js","../ShadowDOM/src/ShadowRenderer.js","../Sha
dowDOM/src/wrappers/elements-with-form-property.js","../ShadowDOM/src/wrappers/S
election.js","../ShadowDOM/src/wrappers/Document.js","../ShadowDOM/src/wrappers/
Window.js","../ShadowDOM/src/wrappers/DataTransfer.js","../ShadowDOM/src/wrapper
s/override-constructors.js","src/patches-shadowdom-polyfill.js","src/ShadowCSS.j
s","src/patches-shadowdom-native.js","../URL/url.js","src/lang.js","src/dom.js",
"src/template.js","src/inspector.js","src/unresolved.js","src/module.js","src/mi
crotask.js","src/url.js","../MutationObservers/MutationObserver.js","../HTMLImpo
rts/src/scope.js","../HTMLImports/src/Loader.js","../HTMLImports/src/Parser.js",
"../HTMLImports/src/HTMLImports.js","../HTMLImports/src/Observer.js","../HTMLImp
orts/src/boot.js","../CustomElements/src/scope.js","../CustomElements/src/Observ
er.js","../CustomElements/src/CustomElements.js","../CustomElements/src/Parser.j
s","../CustomElements/src/boot.js","src/patches-custom-elements.js","src/loader.
js","src/styleloader.js","../PointerEvents/src/boot.js","../PointerEvents/src/to
uch-action.js","../PointerEvents/src/PointerEvent.js","../PointerEvents/src/poin
termap.js","../PointerEvents/src/dispatcher.js","../PointerEvents/src/installer.
js","../PointerEvents/src/mouse.js","../PointerEvents/src/touch.js","../PointerE
vents/src/ms.js","../PointerEvents/src/platform-events.js","../PointerEvents/src
/capture.js","../PointerGestures/src/initialize.js","../PointerGestures/src/poin
termap.js","../PointerGestures/src/dispatcher.js","../PointerGestures/src/hold.j
s","../PointerGestures/src/track.js","../PointerGestures/src/flick.js","../Point
erGestures/src/pinch.js","../PointerGestures/src/tap.js","../PointerGestures/src
/registerScopes.js","../NodeBind/src/NodeBind.js","../TemplateBinding/src/Templa
teBinding.js","../polymer-expressions/third_party/esprima/esprima.js","../polyme
r-expressions/src/polymer-expressions.js","src/patches-mdv.js"],"names":[],"mapp
ings":"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
AEA,OAAA","sourcesContent":["/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n/**\n * PointerGestureEvent is th
e constructor for all PointerGesture events.\n *\n * @module PointerGestures\n *
@class PointerGestureEvent\n * @extends UIEvent\n * @constructor\n * @param {St
ring} inType Event type\n * @param {Object} [inDict] Dictionary of properties to
initialize on the event\n */\n\nfunction PointerGestureEvent(inType, inDict) {\
n var dict = inDict || {};\n var e = document.createEvent('Event');\n var pro
ps = {\n bubbles: Boolean(dict.bubbles) === dict.bubbles || true,\n cancel
able: Boolean(dict.cancelable) === dict.cancelable || true\n };\n\n e.initEven
t(inType, props.bubbles, props.cancelable);\n\n var keys = Object.keys(dict), k
;\n for (var i = 0; i < keys.length; i++) {\n k = keys[i];\n e[k] = dict[
k];\n }\n\n e.preventTap = this.preventTap;\n\n return e;\n}\n\n/**\n * Allow
s for any gesture to prevent the tap gesture.\n *\n * @method preventTap\n */\nP
ointerGestureEvent.prototype.preventTap = function() {\n this.tapPrevented = tr
ue;\n};\n\n","/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n
* Use of this source code is governed by a BSD-style\n * license that can be fou
nd in the LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (functi
on() {\n var defineProperty = Object.defineProperty;\n var counter = Date.
now() % 1e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math
.random() * 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype =
{\n set: function(key, value) {\n var entry = key[this.name];\n
if (entry && entry[0] === key)\n entry[1] = value;\n else\n
defineProperty(key, this.name, {value: [key, value], writable: true});\n
},\n get: function(key) {\n var entry;\n return (entry
= key[this.name]) && entry[0] === key ?\n entry[1] : undefined;\n
},\n delete: function(key) {\n this.set(key, undefined);\n }\
n };\n\n window.WeakMap = WeakMap;\n })();\n}\n","// Copyright 2012 Googl
e Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");
\n// you may not use this file except in compliance with the License.\n// You ma
y obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LIC
ENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, soft
ware\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n//
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// Se
e the License for the specific language governing permissions and\n// limitation
s under the License.\n\n(function(global) {\n 'use strict';\n\n // Detect and
do basic sanity checking on Object/Array.observe.\n function detectObjectObserv
e() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.obs
erve !== 'function') {\n return false;\n }\n\n var records = [];\n\n
function callback(recs) {\n records = recs;\n }\n\n var test = {};
\n var arr = [];\n Object.observe(test, callback);\n Array.observe(arr,
callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n arr.pu
sh(1, 2);\n arr.length = 0;\n\n Object.deliverChangeRecords(callback);\n
if (records.length !== 5)\n return false;\n\n if (records[0].type != '
add' ||\n records[1].type != 'update' ||\n records[2].type != 'del
ete' ||\n records[3].type != 'splice' ||\n records[4].type != 'spl
ice') {\n return false;\n }\n\n Object.unobserve(test, callback);\n
Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve =
detectObjectObserve();\n\n function detectEval() {\n // don't test for eval
if document has CSP securityPolicy object and we can see that\n // eval is n
ot supported. This avoids an error message in console even when the exception\n
// is caught\n if (global.document &&\n 'securityPolicy' in global.
document &&\n !global.document.securityPolicy.allowsEval) {\n return
false;\n }\n\n try {\n var f = new Function('', 'return true;');\n
return f();\n } catch (ex) {\n return false;\n }\n }\n\n var ha
sEval = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n
}\n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) {
\n return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNa
N || function isNaN(value) {\n return typeof value === 'number' && global.isN
aN(value);\n }\n\n function areSameValue(left, right) {\n if (left === righ
t)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left
) && numberIsNaN(right))\n return true;\n\n return left !== left && righ
t !== right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(ob
j) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n
if (!proto)\n return obj;\n var newObject = Object.create(proto);
\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object
.defineProperty(newObject, name,\n Object.getOwnProp
ertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var
identStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var ident
= identStart + '+' + identPart + '*';\n var elementIndex = '(?:[0-9]|[1-9]+[0-
9]+)';\n var identOrElementIndex = '(?:' + ident + '|' + elementIndex + ')';\n
var path = '(?:' + identOrElementIndex + ')(?:\\\\s*\\\\.\\\\s*' + identOrEleme
ntIndex + ')*';\n var pathRegExp = new RegExp('^' + path + '$');\n\n function
isPathValid(s) {\n if (typeof s != 'string')\n return false;\n s = s.
trim();\n\n if (s == '')\n return true;\n\n if (s[0] == '.')\n r
eturn false;\n\n return pathRegExp.test(s);\n }\n\n var constructorIsPrivat
e = {};\n\n function Path(s, privateToken) {\n if (privateToken !== construc
torIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\n\n
if (s.trim() == '')\n return this;\n\n if (isIndex(s)) {\n this.p
ush(s);\n return this;\n }\n\n s.split(/\\s*\\.\\s*/).filter(function
(part) {\n return part;\n }).forEach(function(part) {\n this.push(p
art);\n }, this);\n\n if (hasEval && this.length) {\n this.getValueFr
om = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simp
le LRU cache\n var pathCache = {};\n\n function getPath(pathString) {\n if
(pathString instanceof Path)\n return pathString;\n\n if (pathString ==
null)\n pathString = '';\n\n if (typeof pathString !== 'string')\n
pathString = String(pathString);\n\n var path = pathCache[pathString];\n i
f (path)\n return path;\n if (!isPathValid(pathString))\n return in
validPath;\n var path = new Path(pathString, constructorIsPrivate);\n path
Cache[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n P
ath.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toSt
ring: function() {\n return this.join('.');\n },\n\n getValueFrom: fu
nction(obj, directObserver) {\n for (var i = 0; i < this.length; i++) {\n
if (obj == null)\n return;\n obj = obj[this[i]];\n }\
n return obj;\n },\n\n iterateObjects: function(obj, observe) {\n
for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[t
his[i - 1]];\n if (!isObject(obj))\n return;\n observe(ob
j);\n }\n },\n\n compiledGetValueFromFn: function() {\n var acce
ssors = this.map(function(ident) {\n return isIndex(ident) ? '[\"' + iden
t + '\"]' : '.' + ident;\n });\n\n var str = '';\n var pathString
= 'obj';\n str += 'if (obj != null';\n var i = 0;\n for (; i < (
this.length - 1); i++) {\n var ident = this[i];\n pathString += ac
cessors[i];\n str += ' &&\\n ' + pathString + ' != null';\n }\n
str += ')\\n';\n\n pathString += accessors[i];\n\n str += ' retu
rn ' + pathString + ';\\nelse\\n return undefined;';\n return new Function
('obj', str);\n },\n\n setValueFrom: function(obj, value) {\n if (!th
is.length)\n return false;\n\n for (var i = 0; i < this.length - 1;
i++) {\n if (!isObject(obj))\n return false;\n obj = obj[
this[i]];\n }\n\n if (!isObject(obj))\n return false;\n\n
obj[this[i]] = value;\n return true;\n }\n });\n\n var invalidPath = n
ew Path('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.
getValueFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHEC
K_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n
while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\
n }\n if (global.testingExposeCycleCount)\n global.dirtyCheckCycleCou
nt = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmpty(object)
{\n for (var prop in object)\n return false;\n return true;\n }\n\n
function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n
objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\
n\n function diffObjectFromOldObject(object, oldObject) {\n var added = {};\
n var removed = {};\n var changed = {};\n\n for (var prop in oldObject)
{\n var newValue = object[prop];\n\n if (newValue !== undefined && ne
wValue === oldObject[prop])\n continue;\n\n if (!(prop in object)) {
\n removed[prop] = undefined;\n continue;\n }\n\n if (ne
wValue !== oldObject[prop])\n changed[prop] = newValue;\n }\n\n for
(var prop in object) {\n if (prop in oldObject)\n continue;\n\n
added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.
length !== oldObject.length)\n changed.length = object.length;\n\n retur
n {\n added: added,\n removed: removed,\n changed: changed\n }
;\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.le
ngth)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n
eomTasks[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n
var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n
var eomRunScheduled = false;\n\n Object.observe(eomObj, function() {\n
runEOMTasks();\n eomRunScheduled = false;\n });\n\n return function
(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunS
cheduled = true;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n
})() :\n (function() {\n return function(fn) {\n eomTasks.push(fn);\n
};\n })();\n\n var observedObjectCache = [];\n\n function newObservedObje
ct() {\n var observer;\n var object;\n var discardRecords = false;\n
var first = true;\n\n function callback(records) {\n if (observer && ob
server.state_ === OPENED && !discardRecords)\n observer.check_(records);\
n }\n\n return {\n open: function(obs) {\n if (observer)\n
throw Error('ObservedObject in use');\n\n if (!first)\n Ob
ject.deliverChangeRecords(callback);\n\n observer = obs;\n first =
false;\n },\n observe: function(obj, arrayObserve) {\n object
= obj;\n if (arrayObserve)\n Array.observe(object, callback);\n
else\n Object.observe(object, callback);\n },\n delive
r: function(discard) {\n discardRecords = discard;\n Object.delive
rChangeRecords(callback);\n discardRecords = false;\n },\n clos
e: function() {\n observer = undefined;\n Object.unobserve(object,
callback);\n observedObjectCache.push(this);\n }\n };\n }\n\n
function getObservedObject(observer, object, arrayObserve) {\n var dir = obse
rvedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n dir.
observe(object, arrayObserve);\n return dir;\n }\n\n var emptyArray = [];\n
var observedSetCache = [];\n\n function newObservedSet() {\n var observers
= [];\n var observerCount = 0;\n var objects = [];\n var toRemove = em
ptyArray;\n var resetNeeded = false;\n var resetScheduled = false;\n\n
function observe(obj) {\n if (!obj)\n return;\n\n var index = t
oRemove.indexOf(obj);\n if (index >= 0) {\n toRemove[index] = undefi
ned;\n objects.push(obj);\n } else if (objects.indexOf(obj) < 0) {\n
objects.push(obj);\n Object.observe(obj, callback);\n }\n\n
observe(Object.getPrototypeOf(obj));\n }\n\n function reset() {\n
var objs = toRemove === emptyArray ? [] : toRemove;\n toRemove = objects;
\n objects = objs;\n\n var observer;\n for (var id in observers)
{\n observer = observers[id];\n if (!observer || observer.state_ !
= OPENED)\n continue;\n\n observer.iterateObjects_(observe);\n
}\n\n for (var i = 0; i < toRemove.length; i++) {\n var obj = to
Remove[i];\n if (obj)\n Object.unobserve(obj, callback);\n
}\n\n toRemove.length = 0;\n }\n\n function scheduledReset() {\n
resetScheduled = false;\n if (!resetNeeded)\n return;\n\n rese
t();\n }\n\n function scheduleReset() {\n if (resetScheduled)\n
return;\n\n resetNeeded = true;\n resetScheduled = true;\n runE
OM(scheduledReset);\n }\n\n function callback() {\n reset();\n\n
var observer;\n\n for (var id in observers) {\n observer = observer
s[id];\n if (!observer || observer.state_ != OPENED)\n continue;
\n\n observer.check_();\n }\n }\n\n var record = {\n obje
ct: undefined,\n objects: objects,\n open: function(obs) {\n ob
servers[obs.id_] = obs;\n observerCount++;\n obs.iterateObjects_(o
bserve);\n },\n close: function(obs) {\n var anyLeft = false;\n
\n observers[obs.id_] = undefined;\n observerCount--;\n\n i
f (observerCount) {\n scheduleReset();\n return;\n }\n
resetNeeded = false;\n\n for (var i = 0; i < objects.length; i++)
{\n Object.unobserve(objects[i], callback);\n Observer.unobser
vedCount++;\n }\n\n observers.length = 0;\n objects.length
= 0;\n observedSetCache.push(this);\n },\n reset: scheduleReset
\n };\n\n return record;\n }\n\n var lastObservedSet;\n\n function getO
bservedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object
!== obj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\
n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer);
\n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n
var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function
Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n
this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directO
bserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserver
Id++;\n }\n\n Observer.prototype = {\n open: function(callback, target) {\n
if (this.state_ != UNOPENED)\n throw Error('Observer has already be
en opened.');\n\n addToAll(this);\n this.callback_ = callback;\n
this.target_ = target;\n this.state_ = OPENED;\n this.connect_();\n
return this.value_;\n },\n\n close: function() {\n if (this.state_
!= OPENED)\n return;\n\n removeFromAll(this);\n this.state_ =
CLOSED;\n this.disconnect_();\n this.value_ = undefined;\n this.c
allback_ = undefined;\n this.target_ = undefined;\n },\n\n deliver: f
unction() {\n if (this.state_ != OPENED)\n return;\n\n dirtyChe
ck(this);\n },\n\n report_: function(changes) {\n try {\n this
.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer
._errorThrownDuringCallback = true;\n console.error('Exception caught dur
ing observer callback: ' +\n (ex.stack || ex));\n }\n
},\n\n discardChanges: function() {\n this.check_(undefined, true);\
n return this.value_;\n }\n }\n\n var collectObservers = !hasObserve;\
n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObserve
rs) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Obser
ver._allObserversCount++;\n if (!collectObservers)\n return;\n\n allO
bservers.push(observer);\n }\n\n function removeFromAll(observer) {\n Obser
ver._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n
var hasDebugForceFullDelivery = hasObserve && (function() {\n try {\n e
val('%RunMicrotasks()');\n return true;\n } catch (ex) {\n return f
alse;\n }\n })();\n\n global.Platform = global.Platform || {};\n\n global.
Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskChec
kpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n eval('%Run
Microtasks()');\n return;\n }\n\n if (!collectObservers)\n retur
n;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var any
Changed, toCheck;\n\n do {\n cycles++;\n toCheck = allObservers;\n
allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i <
toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer
.state_ != OPENED)\n continue;\n\n if (observer.check_())\n
anyChanged = true;\n\n allObservers.push(observer);\n }\n
if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_
CHECK_CYCLES && anyChanged);\n\n if (global.testingExposeCycleCount)\n g
lobal.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\
n };\n\n if (collectObservers) {\n global.Platform.clearObservers = functio
n() {\n allObservers = [];\n };\n }\n\n function ObjectObserver(object
) {\n Observer.call(this);\n this.value_ = object;\n this.oldObject_ =
undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __proto__: O
bserver.prototype,\n\n arrayObserve: false,\n\n connect_: function(callbac
k, target) {\n if (hasObserve) {\n this.directObserver_ = getObserve
dObject(this, this.value_,\n thi
s.arrayObserve);\n } else {\n this.oldObject_ = this.copyObject(this
.value_);\n }\n\n },\n\n copyObject: function(object) {\n var co
py = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n
copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n
copy.length = object.length;\n return copy;\n },\n\n check_: functio
n(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if
(hasObserve) {\n if (!changeRecords)\n return false;\n\n
oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, change
Records,\n oldValues);\n } else {
\n oldValues = this.oldObject_;\n diff = diffObjectFromOldObject(t
his.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n
return false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObje
ct(this.value_);\n\n this.report_([\n diff.added || {},\n dif
f.removed || {},\n diff.changed || {},\n function(property) {\n
return oldValues[property];\n }\n ]);\n\n return true;\n
},\n\n disconnect_: function() {\n if (hasObserve) {\n this.d
irectObserver_.close();\n this.directObserver_ = undefined;\n } else
{\n this.oldObject_ = undefined;\n }\n },\n\n deliver: functi
on() {\n if (this.state_ != OPENED)\n return;\n\n if (hasObserv
e)\n this.directObserver_.deliver(false);\n else\n dirtyCheck
(this);\n },\n\n discardChanges: function() {\n if (this.directObserv
er_)\n this.directObserver_.deliver(true);\n else\n this.oldO
bject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n })
;\n\n function ArrayObserver(array) {\n if (!Array.isArray(array))\n th
row Error('Provided object is not an Array');\n ObjectObserver.call(this, arr
ay);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: Object
Observer.prototype,\n\n arrayObserve: true,\n\n copyObject: function(arr)
{\n return arr.slice();\n },\n\n check_: function(changeRecords) {\n
var splices;\n if (hasObserve) {\n if (!changeRecords)\n
return false;\n splices = projectArraySplices(this.value_, changeRecor
ds);\n } else {\n splices = calcSplices(this.value_, 0, this.value_.
length,\n this.oldObject_, 0, this.oldObject_.lengt
h);\n }\n\n if (!splices || !splices.length)\n return false;\n\
n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.value_);
\n\n this.report_([splices]);\n return true;\n }\n });\n\n ArrayO
bserver.applySplices = function(previous, current, splices) {\n splices.forEa
ch(function(splice) {\n var spliceArgs = [splice.index, splice.removed.leng
th];\n var addIndex = splice.index;\n while (addIndex < splice.index +
splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addI
ndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceArgs);\n
});\n };\n\n function PathObserver(object, path) {\n Observer.call(this)
;\n\n this.object_ = object;\n this.path_ = path instanceof Path ? path :
getPath(path);\n this.directObserver_ = undefined;\n }\n\n PathObserver.pro
totype = createObject({\n __proto__: Observer.prototype,\n\n connect_: fun
ction() {\n if (hasObserve)\n this.directObserver_ = getObservedSet(
this, this.object_);\n\n this.check_(undefined, true);\n },\n\n disco
nnect_: function() {\n this.value_ = undefined;\n\n if (this.directObs
erver_) {\n this.directObserver_.close(this);\n this.directObserve
r_ = undefined;\n }\n },\n\n iterateObjects_: function(observe) {\n
this.path_.iterateObjects(this.object_, observe);\n },\n\n check_: fun
ction(changeRecords, skipChanges) {\n var oldValue = this.value_;\n th
is.value_ = this.path_.getValueFrom(this.object_);\n if (skipChanges || are
SameValue(this.value_, oldValue))\n return false;\n\n this.report_([
this.value_, oldValue]);\n return true;\n },\n\n setValue: function(n
ewValue) {\n if (this.path_)\n this.path_.setValueFrom(this.object_,
newValue);\n }\n });\n\n function CompoundObserver() {\n Observer.call(
this);\n\n this.value_ = [];\n this.directObserver_ = undefined;\n this
.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundObserver.prot
otype = createObject({\n __proto__: Observer.prototype,\n\n connect_: func
tion() {\n this.check_(undefined, true);\n\n if (!hasObserve)\n
return;\n\n var object;\n var needsDirectObserver = false;\n for
(var i = 0; i < this.observed_.length; i += 2) {\n object = this.observe
d_[i]\n if (object !== observerSentinel) {\n needsDirectObserver
= true;\n break;\n }\n }\n\n if (this.directObserver_
) {\n if (needsDirectObserver) {\n this.directObserver_.reset();
\n return;\n }\n this.directObserver_.close();\n t
his.directObserver_ = undefined;\n return;\n }\n\n if (needsDir
ectObserver)\n this.directObserver_ = getObservedSet(this, object);\n
},\n\n closeObservers_: function() {\n for (var i = 0; i < this.observed
_.length; i += 2) {\n if (this.observed_[i] === observerSentinel)\n
this.observed_[i + 1].close();\n }\n this.observed_.length = 0;\n
},\n\n disconnect_: function() {\n this.value_ = undefined;\n\n
if (this.directObserver_) {\n this.directObserver_.close(this);\n
this.directObserver_ = undefined;\n }\n\n this.closeObservers_();\n
},\n\n addPath: function(object, path) {\n if (this.state_ != UNOPENED
&& this.state_ != RESETTING)\n throw Error('Cannot add paths once started
.');\n\n this.observed_.push(object, path instanceof Path ? path : getPath(
path));\n },\n\n addObserver: function(observer) {\n if (this.state_
!= UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add observ
ers once started.');\n\n observer.open(this.deliver, this);\n this.obs
erved_.push(observerSentinel, observer);\n },\n\n startReset: function() {
\n if (this.state_ != OPENED)\n throw Error('Can only reset while op
en');\n\n this.state_ = RESETTING;\n this.closeObservers_();\n },\n
\n finishReset: function() {\n if (this.state_ != RESETTING)\n th
row Error('Can only finishReset after startReset');\n this.state_ = OPENED;
\n this.connect_();\n\n return this.value_;\n },\n\n iterateObje
cts_: function(observe) {\n var object;\n for (var i = 0; i < this.obs
erved_.length; i += 2) {\n object = this.observed_[i]\n if (object
!== observerSentinel)\n this.observed_[i + 1].iterateObjects(object, o
bserve)\n }\n },\n\n check_: function(changeRecords, skipChanges) {\n
var oldValues;\n for (var i = 0; i < this.observed_.length; i += 2) {
\n var pathOrObserver = this.observed_[i+1];\n var object = this.o
bserved_[i];\n var value = object === observerSentinel ?\n pat
hOrObserver.discardChanges() :\n pathOrObserver.getValueFrom(object)\
n\n if (skipChanges) {\n this.value_[i / 2] = value;\n
continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n
continue;\n\n oldValues = oldValues || [];\n oldValues[i /
2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n
if (!oldValues)\n return false;\n\n // TODO(rafaelw): Having observ
ed_ as the third callback arg here is\n // pretty lame API. Fix.\n thi
s.report_([this.value_, oldValues, this.observed_]);\n return true;\n }\
n });\n\n function identFn(value) { return value; }\n\n function ObserverTran
sform(observable, getValueFn, setValueFn,\n dontPass
ThroughSet) {\n this.callback_ = undefined;\n this.target_ = undefined;\n
this.value_ = undefined;\n this.observable_ = observable;\n this.getVal
ueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n
// TODO(rafaelw): This is a temporary hack. PolymerExpressions needs this\n
// at the moment because of a bug in it's dependency tracking.\n this.dontP
assThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prototype = {\n
open: function(callback, target) {\n this.callback_ = callback;\n
this.target_ = target;\n this.value_ =\n this.getValueFn_(this.obs
ervable_.open(this.observedCallback_, this));\n return this.value_;\n },
\n\n observedCallback_: function(value) {\n value = this.getValueFn_(val
ue);\n if (areSameValue(value, this.value_))\n return;\n var ol
dValue = this.value_;\n this.value_ = value;\n this.callback_.call(thi
s.target_, this.value_, oldValue);\n },\n\n discardChanges: function() {\n
this.value_ = this.getValueFn_(this.observable_.discardChanges());\n
return this.value_;\n },\n\n deliver: function() {\n return this.obse
rvable_.deliver();\n },\n\n setValue: function(value) {\n value = thi
s.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.observable_.s
etValue)\n return this.observable_.setValue(value);\n },\n\n close:
function() {\n if (this.observable_)\n this.observable_.close();\n
this.callback_ = undefined;\n this.target_ = undefined;\n this.ob
servable_ = undefined;\n this.value_ = undefined;\n this.getValueFn_ =
undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedRe
cordTypes = {\n add: true,\n update: true,\n delete: true\n };\n\n fu
nction notifyFunction(object, name) {\n if (typeof Object.observe !== 'functi
on')\n return;\n\n var notifier = Object.getNotifier(object);\n retur
n function(type, oldValue) {\n var changeRecord = {\n object: object
,\n type: type,\n name: name\n };\n if (arguments.length
=== 2)\n changeRecord.oldValue = oldValue;\n notifier.notify(change
Record);\n }\n }\n\n Observer.defineComputedProperty = function(target, nam
e, observable) {\n var notify = notifyFunction(target, name);\n var value
= observable.open(function(newValue, oldValue) {\n value = newValue;\n
if (notify)\n notify('update', oldValue);\n });\n\n Object.defineP
roperty(target, name, {\n get: function() {\n observable.deliver();\
n return value;\n },\n set: function(newValue) {\n obser
vable.setValue(newValue);\n return newValue;\n },\n configurabl
e: true\n });\n\n return {\n close: function() {\n observable.
close();\n Object.defineProperty(target, name, {\n value: value,
\n writable: true,\n configurable: true\n });\n }\
n };\n }\n\n function diffObjectFromChangeRecords(object, changeRecords, ol
dValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i
< changeRecords.length; i++) {\n var record = changeRecords[i];\n if (
!expectedRecordTypes[record.type]) {\n console.error('Unknown changeRecor
d type: ' + record.type);\n console.error(record);\n continue;\n
}\n\n if (!(record.name in oldValues))\n oldValues[record.name]
= record.oldValue;\n\n if (record.type == 'update')\n continue;\n\n
if (record.type == 'add') {\n if (record.name in removed)\n
delete removed[record.name];\n else\n added[record.name] = true
;\n\n continue;\n }\n\n // type = 'delete'\n if (record.na
me in added) {\n delete added[record.name];\n delete oldValues[rec
ord.name];\n } else {\n removed[record.name] = true;\n }\n }
\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (v
ar prop in removed)\n removed[prop] = undefined;\n\n var changed = {};\n
for (var prop in oldValues) {\n if (prop in added || prop in removed)\n
continue;\n\n var newValue = object[prop];\n if (oldValues[pro
p] !== newValue)\n changed[prop] = newValue;\n }\n\n return {\n
added: added,\n removed: removed,\n changed: changed\n };\n }\n\
n function newSplice(index, removed, addedCount) {\n return {\n index:
index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n
var EDIT_LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DEL
ETE = 3;\n\n function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n //
Note: This function is *based* on the computation of the Levenshtein\n // \"
edit\" distance. The one change is that \"updates\" are treated as two\n // e
dits - not one. With Array splices, an update is really a delete\n // followe
d by an add. By retaining this, we optimize for \"keeping\" the\n // maximum
array items in the original array. For example:\n //\n // 'xxxx123' -> '
123yyyy'\n //\n // With 1-edit updates, the shortest path would be just to
update all seven\n // characters. With 2-edit updates, we delete 4, leave 3,
and add 4. This\n // leaves the substring '123' intact.\n calcEditDistanc
es: function(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n // \"Deletion\" columns\n var rowCount = o
ldEnd - oldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n
var distances = new Array(rowCount);\n\n // \"Addition\" rows. Initial
ize null column.\n for (var i = 0; i < rowCount; i++) {\n distances[
i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n //
Initialize null row\n for (var j = 0; j < columnCount; j++)\n distan
ces[0][j] = j;\n\n for (var i = 1; i < rowCount; i++) {\n for (var j
= 1; j < columnCount; j++) {\n if (this.equals(current[currentStart +
j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][
j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n
var west = distances[i][j - 1] + 1;\n distances[i][j] = nort
h < west ? north : west;\n }\n }\n }\n\n return distan
ces;\n },\n\n // This starts at the final weight, and walks \"backward\" b
y finding\n // the minimum previous weight recursively until the origin of th
e weight\n // matrix.\n spliceOperationsFromEditDistances: function(distan
ces) {\n var i = distances.length - 1;\n var j = distances[0].length -
1;\n var current = distances[i][j];\n var edits = [];\n while (i
> 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n
j--;\n continue;\n }\n if (j == 0) {\n edits
.push(EDIT_DELETE);\n i--;\n continue;\n }\n var
northWest = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n
var north = distances[i][j - 1];\n\n var min;\n if (west <
north)\n min = west < northWest ? west : northWest;\n else\n
min = north < northWest ? north : northWest;\n\n if (min == northW
est) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE
);\n } else {\n edits.push(EDIT_UPDATE);\n curren
t = northWest;\n }\n i--;\n j--;\n } else if (
min == west) {\n edits.push(EDIT_DELETE);\n i--;\n cu
rrent = west;\n } else {\n edits.push(EDIT_ADD);\n j--;
\n current = north;\n }\n }\n\n edits.reverse();\n
return edits;\n },\n\n /**\n * Splice Projection functions:\n *\
n * A splice map is a representation of how a previous array of items\n
* was transformed into a new array of items. Conceptually it is a list of\n
* tuples of\n *\n * <index, removed, addedCount>\n *\n * which
are kept in ascending index order of. The tuple represents that at\n * the
|index|, |removed| sequence of items were removed, and counting forward\n *
from |index|, |addedCount| items were added.\n */\n\n /**\n * Lacking
individual splice mutation information, the minimal set of\n * splices can
be synthesized given the previous state and final state of an\n * array. The
basic approach is to calculate the edit distance matrix and\n * choose the
shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The
length of the current array\n * p: The length of the old array\n */\n
calcSplices: function(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCou
nt = 0;\n\n var minLength = Math.min(currentEnd - currentStart, oldEnd - ol
dStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = t
his.sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.le
ngth && oldEnd == old.length)\n suffixCount = this.sharedSuffix(current,
old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldS
tart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCo
unt;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n
return [];\n\n if (currentStart == currentEnd) {\n var splice =
newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n s
plice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else
if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEn
d - currentStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\
n this.calcEditDistances(current, currentStart, currentEnd,\n
old, oldStart, oldEnd));\n\n var splice = undefined;
\n var splices = [];\n var index = currentStart;\n var oldIndex =
oldStart;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i])
{\n case EDIT_LEAVE:\n if (splice) {\n splices
.push(splice);\n splice = undefined;\n }\n\n
index++;\n oldIndex++;\n break;\n case EDIT_UPDAT
E:\n if (!splice)\n splice = newSplice(index, [], 0);\n\
n splice.addedCount++;\n index++;\n\n splice.re
moved.push(old[oldIndex]);\n oldIndex++;\n break;\n
case EDIT_ADD:\n if (!splice)\n splice = newSplice(in
dex, [], 0);\n\n splice.addedCount++;\n index++;\n
break;\n case EDIT_DELETE:\n if (!splice)\n
splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldInd
ex]);\n oldIndex++;\n break;\n }\n }\n\n
if (splice) {\n splices.push(splice);\n }\n return splices;\n
},\n\n sharedPrefix: function(current, old, searchLength) {\n for (var
i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n
return i;\n return searchLength;\n },\n\n sharedSuffix: func
tion(current, old, searchLength) {\n var index1 = current.length;\n va
r index2 = old.length;\n var count = 0;\n while (count < searchLength
&& this.equals(current[--index1], old[--index2]))\n count++;\n\n ret
urn count;\n },\n\n calculateSplices: function(current, previous) {\n
return this.calcSplices(current, 0, current.length, previous, 0,\n
previous.length);\n },\n\n equals: function(currentValue,
previousValue) {\n return currentValue === previousValue;\n }\n };\n\n
var arraySplice = new ArraySplice();\n\n function calcSplices(current, curren
tStart, currentEnd,\n old, oldStart, oldEnd) {\n return
arraySplice.calcSplices(current, currentStart, currentEnd,\n
old, oldStart, oldEnd);\n }\n\n function intersect(start1, end
1, start2, end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n
return -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n
return 0;\n\n // Non-zero intersect, span1 first\n if (start1 < start2
) {\n if (end1 < end2)\n return end1 - start2; // Overlap\n els
e\n return end2 - start2; // Contained\n } else {\n // Non-zero i
ntersect, span2 first\n if (end2 < end1)\n return end2 - start1; //
Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n
function mergeSplice(splices, index, removed, addedCount) {\n\n var splice =
newSplice(index, removed, addedCount);\n\n var inserted = false;\n var in
sertionOffset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var
current = splices[i];\n current.index += insertionOffset;\n\n if (inse
rted)\n continue;\n\n var intersectCount = intersect(splice.index,\n
splice.index + splice.removed.length,\n
current.index,\n
current.index + current.addedCount);\n\n if (intersectCount >= 0) {\n
// Merge the two splices\n\n splices.splice(i, 1);\n i--;\
n\n insertionOffset -= current.addedCount - current.removed.length;\n\n
splice.addedCount += current.addedCount - intersectCount;\n var del
eteCount = splice.removed.length +\n current.removed.le
ngth - intersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n
// merged splice is a noop. discard.\n inserted = true;\n
} else {\n var removed = current.removed;\n\n if (splice.inde
x < current.index) {\n // some prefix of splice.removed is prepended
to current.removed.\n var prepend = splice.removed.slice(0, current.i
ndex - splice.index);\n Array.prototype.push.apply(prepend, removed);
\n removed = prepend;\n }\n\n if (splice.index + sp
lice.removed.length > current.index + current.addedCount) {\n // some
suffix of splice.removed is appended to current.removed.\n var appen
d = splice.removed.slice(current.index + current.addedCount - splice.index);\n
Array.prototype.push.apply(removed, append);\n }\n\n
splice.removed = removed;\n if (current.index < splice.index) {\n
splice.index = current.index;\n }\n }\n } else if (s
plice.index < current.index) {\n // Insert splice here.\n\n insert
ed = true;\n\n splices.splice(i, 0, splice);\n i++;\n\n var
offset = splice.addedCount - splice.removed.length\n current.index += of
fset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\
n splices.push(splice);\n }\n\n function createInitialSplices(array, chan
geRecords) {\n var splices = [];\n\n for (var i = 0; i < changeRecords.len
gth; i++) {\n var record = changeRecords[i];\n switch(record.type) {\n
case 'splice':\n mergeSplice(splices, record.index, record.remo
ved.slice(), record.addedCount);\n break;\n case 'add':\n
case 'update':\n case 'delete':\n if (!isIndex(record.name))\n
continue;\n var index = toNumber(record.name);\n if
(index < 0)\n continue;\n mergeSplice(splices, index, [reco
rd.oldValue], 1);\n break;\n default:\n console.error('
Unexpected record type: ' + JSON.stringify(record));\n break;\n }\
n }\n\n return splices;\n }\n\n function projectArraySplices(array, chan
geRecords) {\n var splices = [];\n\n createInitialSplices(array, changeRec
ords).forEach(function(splice) {\n if (splice.addedCount == 1 && splice.rem
oved.length == 1) {\n if (splice.removed[0] !== array[splice.index])\n
splices.push(splice);\n\n return\n };\n\n splices = spli
ces.concat(calcSplices(array, splice.index, splice.index + splice.addedCount,\n
splice.removed, 0, splice.removed.leng
th));\n });\n\n return splices;\n }\n\n global.Observer = Observer;\n g
lobal.Observer.runEOM_ = runEOM;\n global.Observer.hasObjectObserve = hasObserv
e;\n global.ArrayObserver = ArrayObserver;\n global.ArrayObserver.calculateSpl
ices = function(current, previous) {\n return arraySplice.calculateSplices(cu
rrent, previous);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectO
bserver = ObjectObserver;\n global.PathObserver = PathObserver;\n global.Compo
undObserver = CompoundObserver;\n global.Path = Path;\n global.ObserverTransfo
rm = ObserverTransform;\n})(typeof global !== 'undefined' && global && typeof mo
dule !== 'undefined' && module ? global : this || window);\n","// prepoulate win
dow.Platform.flags for default controls\r\nwindow.Platform = window.Platform ||
{};\r\n// prepopulate window.logFlags if necessary\r\nwindow.logFlags = window.l
ogFlags || {};\r\n// process flags\r\n(function(scope){\r\n // import\r\n var
flags = scope.flags || {};\r\n // populate flags from location\r\n location.se
arch.slice(1).split('&').forEach(function(o) {\r\n o = o.split('=');\r\n o
[0] && (flags[o[0]] = o[1] || true);\r\n });\r\n var entryPoint = document.cur
rentScript ||\r\n document.querySelector('script[src*=\"platform.js\"]');\r
\n if (entryPoint) {\r\n var a = entryPoint.attributes;\r\n for (var i =
0, n; i < a.length; i++) {\r\n n = a[i];\r\n if (n.name !== 'src') {\r
\n flags[n.name] = n.value || true;\r\n }\r\n }\r\n }\r\n if (f
lags.log) {\r\n flags.log.split(',').forEach(function(f) {\r\n window.lo
gFlags[f] = true;\r\n });\r\n }\r\n // If any of these flags match 'native'
, then force native ShadowDOM; any\r\n // other truthy value, or failure to det
ect native\r\n // ShadowDOM, results in polyfill\r\n flags.shadow = flags.shad
ow || flags.shadowdom || flags.polyfill;\r\n if (flags.shadow === 'native') {\r
\n flags.shadow = false;\r\n } else {\r\n flags.shadow = flags.shadow ||
!HTMLElement.prototype.createShadowRoot;\r\n }\r\n\r\n if (flags.shadow && doc
ument.querySelectorAll('script').length > 1) {\r\n console.warn('platform.js
is not the first script on the page. ' +\r\n 'See http://www.polymer-proj
ect.org/docs/start/platform.html#setup ' +\r\n 'for details.');\r\n }\r\
n\r\n // CustomElements polyfill flag\r\n if (flags.register) {\r\n window.
CustomElements = window.CustomElements || {flags: {}};\r\n window.CustomEleme
nts.flags.register = flags.register;\r\n }\r\n\r\n if (flags.imports) {\r\n
window.HTMLImports = window.HTMLImports || {flags: {}};\r\n window.HTMLImpor
ts.flags.imports = flags.imports;\r\n }\r\n\r\n // export\r\n scope.flags = f
lags;\r\n})(Platform);\r\n\r\n// select ShadowDOM impl\r\nif (Platform.flags.sha
dow) {\r\n","// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use
of this source code is goverened by a BSD-style\n// license that can be found i
n the LICENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n '
use strict';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTa
ble = new WeakMap();\n var wrappers = Object.create(null);\n\n // Don't test f
or eval if document has CSP securityPolicy object and we can\n // see that eval
is not supported. This avoids an error message in console\n // even when the e
xception is caught\n var hasEval = !('securityPolicy' in document) ||\n do
cument.securityPolicy.allowsEval;\n if (hasEval) {\n try {\n var f = ne
w Function('', 'return true;');\n hasEval = f();\n } catch (ex) {\n
hasEval = false;\n }\n }\n\n function assert(b) {\n if (!b)\n thro
w new Error('Assertion failed');\n };\n\n var defineProperty = Object.definePr
operty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPr
opertyDescriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from
) {\n getOwnPropertyNames(from).forEach(function(name) {\n definePropert
y(to, name, getOwnPropertyDescriptor(from, name));\n });\n return to;\n }
;\n\n function mixinStatics(to, from) {\n getOwnPropertyNames(from).forEach(
function(name) {\n switch (name) {\n case 'arguments':\n case
'caller':\n case 'length':\n case 'name':\n case 'prototyp
e':\n case 'toString':\n return;\n }\n defineProperty(
to, name, getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\
n\n function oneOf(object, propertyNames) {\n for (var i = 0; i < propertyNa
mes.length; i++) {\n if (propertyNames[i] in object)\n return proper
tyNames[i];\n }\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n
// https://bugzilla.mozilla.org/show_bug.cgi?id=855844\n // Make sure they are
create before we start modifying things.\n getOwnPropertyNames(window);\n\n f
unction getWrapperConstructor(node) {\n var nativePrototype = node.__proto__
|| Object.getPrototypeOf(node);\n var wrapperConstructor = constructorTable.g
et(nativePrototype);\n if (wrapperConstructor)\n return wrapperConstruct
or;\n\n var parentWrapperConstructor = getWrapperConstructor(nativePrototype)
;\n\n var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructo
r);\n registerInternal(nativePrototype, GeneratedWrapper, node);\n\n retur
n GeneratedWrapper;\n }\n\n function addForwardingProperties(nativePrototype,
wrapperPrototype) {\n installProperty(nativePrototype, wrapperPrototype, true
);\n }\n\n function registerInstanceProperties(wrapperPrototype, instanceObjec
t) {\n installProperty(instanceObject, wrapperPrototype, false);\n }\n\n va
r isFirefox = /Firefox/.test(navigator.userAgent);\n\n // This is used as a fal
lback when getting the descriptor fails in\n // installProperty.\n var dummyDe
scriptor = {\n get: function() {},\n set: function(v) {},\n configurabl
e: true,\n enumerable: true\n };\n\n function isEventHandlerName(name) {\n
return /^on[a-z]+$/.test(name);\n }\n\n function isIdentifierName(name) {\n
return /^\\w[a-zA-Z_0-9]*$/.test(name);\n }\n\n function getGetter(name) {
\n return hasEval && isIdentifierName(name) ?\n new Function('return t
his.impl.' + name) :\n function() { return this.impl[name]; };\n }\n\n
function getSetter(name) {\n return hasEval && isIdentifierName(name) ?\n
new Function('v', 'this.impl.' + name + ' = v') :\n function(v) { thi
s.impl[name] = v; };\n }\n\n function getMethod(name) {\n return hasEval &&
isIdentifierName(name) ?\n new Function('return this.impl.' + name +\n
'.apply(this.impl, arguments)') :\n function() { retur
n this.impl[name].apply(this.impl, arguments); };\n }\n\n function getDescript
or(source, name) {\n try {\n return Object.getOwnPropertyDescriptor(sour
ce, name);\n } catch (ex) {\n // JSC and V8 both use data properties ins
tead of accessors which can\n // cause getting the property desciptor to th
row an exception.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n
return dummyDescriptor;\n }\n }\n\n function installProperty(source, targe
t, allowMethod, opt_blacklist) {\n var names = getOwnPropertyNames(source);\n
for (var i = 0; i < names.length; i++) {\n var name = names[i];\n
if (name === 'polymerBlackList_')\n continue;\n\n if (name in target
)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlac
kList_[name])\n continue;\n\n if (isFirefox) {\n // Tickle Fi
refox's old bindings.\n source.__lookupGetter__(name);\n }\n va
r descriptor = getDescriptor(source, name);\n var getter, setter;\n if
(allowMethod && typeof descriptor.value === 'function') {\n target[name]
= getMethod(name);\n continue;\n }\n\n var isEvent = isEventHa
ndlerName(name);\n if (isEvent)\n getter = scope.getEventHandlerGett
er(name);\n else\n getter = getGetter(name);\n\n if (descriptor
.writable || descriptor.set) {\n if (isEvent)\n setter = scope.g
etEventHandlerSetter(name);\n else\n setter = getSetter(name);\n
}\n\n defineProperty(target, name, {\n get: getter,\n s
et: setter,\n configurable: descriptor.configurable,\n enumerable:
descriptor.enumerable\n });\n }\n }\n\n /**\n * @param {Function} n
ativeConstructor\n * @param {Function} wrapperConstructor\n * @param {Object
=} opt_instance If present, this is used to extract\n * properties from an
instance object.\n */\n function register(nativeConstructor, wrapperConstruc
tor, opt_instance) {\n var nativePrototype = nativeConstructor.prototype;\n
registerInternal(nativePrototype, wrapperConstructor, opt_instance);\n mixi
nStatics(wrapperConstructor, nativeConstructor);\n }\n\n function registerInte
rnal(nativePrototype, wrapperConstructor, opt_instance) {\n var wrapperProtot
ype = wrapperConstructor.prototype;\n assert(constructorTable.get(nativeProto
type) === undefined);\n\n constructorTable.set(nativePrototype, wrapperConstr
uctor);\n nativePrototypeTable.set(wrapperPrototype, nativePrototype);\n\n
addForwardingProperties(nativePrototype, wrapperPrototype);\n if (opt_instan
ce)\n registerInstanceProperties(wrapperPrototype, opt_instance);\n defi
neProperty(wrapperPrototype, 'constructor', {\n value: wrapperConstructor,\
n configurable: true,\n enumerable: false,\n writable: true\n
});\n // Set it again. Some VMs optimizes objects that are used as prototypes
.\n wrapperConstructor.prototype = wrapperPrototype;\n }\n\n function isWra
pperFor(wrapperConstructor, nativeConstructor) {\n return constructorTable.ge
t(nativeConstructor.prototype) ===\n wrapperConstructor;\n }\n\n /**\n
* Creates a generic wrapper constructor based on |object| and its\n * constr
uctor.\n * @param {Node} object\n * @return {Function} The generated constru
ctor.\n */\n function registerObject(object) {\n var nativePrototype = Obj
ect.getPrototypeOf(object);\n\n var superWrapperConstructor = getWrapperConst
ructor(nativePrototype);\n var GeneratedWrapper = createWrapperConstructor(su
perWrapperConstructor);\n registerInternal(nativePrototype, GeneratedWrapper,
object);\n\n return GeneratedWrapper;\n }\n\n function createWrapperConstr
uctor(superWrapperConstructor) {\n function GeneratedWrapper(node) {\n s
uperWrapperConstructor.call(this, node);\n }\n var p = Object.create(super
WrapperConstructor.prototype);\n p.constructor = GeneratedWrapper;\n Gener
atedWrapper.prototype = p;\n\n return GeneratedWrapper;\n }\n\n var Origina
lDOMImplementation = window.DOMImplementation;\n var OriginalEventTarget = wind
ow.EventTarget;\n var OriginalEvent = window.Event;\n var OriginalNode = windo
w.Node;\n var OriginalWindow = window.Window;\n var OriginalRange = window.Ran
ge;\n var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;\n
var OriginalWebGLRenderingContext = window.WebGLRenderingContext;\n var Origi
nalSVGElementInstance = window.SVGElementInstance;\n\n function isWrapper(objec
t) {\n return object instanceof wrappers.EventTarget ||\n object in
stanceof wrappers.Event ||\n object instanceof wrappers.Range ||\n
object instanceof wrappers.DOMImplementation ||\n object instan
ceof wrappers.CanvasRenderingContext2D ||\n wrappers.WebGLRenderingCon
text &&\n object instanceof wrappers.WebGLRenderingContext;\n }\n
\n function isNative(object) {\n return OriginalEventTarget && object instan
ceof OriginalEventTarget ||\n object instanceof OriginalNode ||\n
object instanceof OriginalEvent ||\n object instanceof OriginalW
indow ||\n object instanceof OriginalRange ||\n object insta
nceof OriginalDOMImplementation ||\n object instanceof OriginalCanvasR
enderingContext2D ||\n OriginalWebGLRenderingContext &&\n
object instanceof OriginalWebGLRenderingContext ||\n OriginalSVGElem
entInstance &&\n object instanceof OriginalSVGElementInstance;\n
}\n\n /**\n * Wraps a node in a WrapperNode. If there already exists a wrappe
r for the\n * |node| that wrapper is returned instead.\n * @param {Node} nod
e\n * @return {WrapperNode}\n */\n function wrap(impl) {\n if (impl ===
null)\n return null;\n\n assert(isNative(impl));\n return impl.polyme
rWrapper_ ||\n (impl.polymerWrapper_ = new (getWrapperConstructor(impl))(
impl));\n }\n\n /**\n * Unwraps a wrapper and returns the node it is wrappin
g.\n * @param {WrapperNode} wrapper\n * @return {Node}\n */\n function un
wrap(wrapper) {\n if (wrapper === null)\n return null;\n assert(isWra
pper(wrapper));\n return wrapper.impl;\n }\n\n /**\n * Unwraps object if
it is a wrapper.\n * @param {Object} object\n * @return {Object} The native
implementation object.\n */\n function unwrapIfNeeded(object) {\n return o
bject && isWrapper(object) ? unwrap(object) : object;\n }\n\n /**\n * Wraps
object if it is not a wrapper.\n * @param {Object} object\n * @return {Objec
t} The wrapper for object.\n */\n function wrapIfNeeded(object) {\n return
object && !isWrapper(object) ? wrap(object) : object;\n }\n\n /**\n * Overr
ides the current wrapper (if any) for node.\n * @param {Node} node\n * @para
m {WrapperNode=} wrapper If left out the wrapper will be created as\n * ne
eded next time someone wraps the node.\n */\n function rewrap(node, wrapper)
{\n if (wrapper === null)\n return;\n assert(isNative(node));\n as
sert(wrapper === undefined || isWrapper(wrapper));\n node.polymerWrapper_ = w
rapper;\n }\n\n function defineGetter(constructor, name, getter) {\n define
Property(constructor.prototype, name, {\n get: getter,\n configurable:
true,\n enumerable: true\n });\n }\n\n function defineWrapGetter(cons
tructor, name) {\n defineGetter(constructor, name, function() {\n return
wrap(this.impl[name]);\n });\n }\n\n /**\n * Forwards existing methods o
n the native object to the wrapper methods.\n * This does not wrap any of the
arguments or the return value since the\n * wrapper implementation already tak
es care of that.\n * @param {Array.<Function>} constructors\n * @parem {Arra
y.<string>} names\n */\n function forwardMethodsToWrapper(constructors, names
) {\n constructors.forEach(function(constructor) {\n names.forEach(funct
ion(name) {\n constructor.prototype[name] = function() {\n var w
= wrapIfNeeded(this);\n return w[name].apply(w, arguments);\n }
;\n });\n });\n }\n\n scope.assert = assert;\n scope.constructorTable
= constructorTable;\n scope.defineGetter = defineGetter;\n scope.defineWrapGe
tter = defineWrapGetter;\n scope.forwardMethodsToWrapper = forwardMethodsToWrap
per;\n scope.isWrapper = isWrapper;\n scope.isWrapperFor = isWrapperFor;\n sc
ope.mixin = mixin;\n scope.nativePrototypeTable = nativePrototypeTable;\n scop
e.oneOf = oneOf;\n scope.registerObject = registerObject;\n scope.registerWrap
per = register;\n scope.rewrap = rewrap;\n scope.unwrap = unwrap;\n scope.unw
rapIfNeeded = unwrapIfNeeded;\n scope.wrap = wrap;\n scope.wrapIfNeeded = wrap
IfNeeded;\n scope.wrappers = wrappers;\n\n})(window.ShadowDOMPolyfill);\n","/*\
n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this sou
rce code is goverened by a BSD-style\n * license that can be found in the LICENS
E file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalMutationO
bserver = window.MutationObserver;\n var callbacks = [];\n var pending = false
;\n var timerFunc;\n\n function handle() {\n pending = false;\n var copi
es = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < copies.le
ngth; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutationObser
ver) {\n var counter = 1;\n var observer = new OriginalMutationObserver(ha
ndle);\n var textNode = document.createTextNode(counter);\n observer.obser
ve(textNode, {characterData: true});\n\n timerFunc = function() {\n coun
ter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n } else {\n
timerFunc = window.setImmediate || window.setTimeout;\n }\n\n function set
EndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n retur
n;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.setEndOfMic
rotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyrigh
t 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is
goverened by a BSD-style\n * license that can be found in the LICENSE file.\n */
\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMicrotask = scope.setEn
dOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var wrappers = scope.wr
appers;\n\n var registrationsTable = new WeakMap();\n var globalMutationObserv
ers = [];\n var isScheduled = false;\n\n function scheduleCallback(observer) {
\n if (isScheduled)\n return;\n setEndOfMicrotask(notifyObservers);\n
isScheduled = true;\n }\n\n // http://dom.spec.whatwg.org/#mutation-observ
ers\n function notifyObservers() {\n isScheduled = false;\n\n do {\n
var notifyList = globalMutationObservers.slice();\n var anyNonEmpty = fals
e;\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notify
List[i];\n var queue = mo.takeRecords();\n removeTransientObserver
sFor(mo);\n if (queue.length) {\n mo.callback_(queue, mo);\n
anyNonEmpty = true;\n }\n }\n } while (anyNonEmpty);\n }\n
\n /**\n * @param {string} type\n * @param {Node} target\n * @constructor
\n */\n function MutationRecord(type, target) {\n this.type = type;\n t
his.target = target;\n this.addedNodes = new wrappers.NodeList();\n this.r
emovedNodes = new wrappers.NodeList();\n this.previousSibling = null;\n th
is.nextSibling = null;\n this.attributeName = null;\n this.attributeNamesp
ace = null;\n this.oldValue = null;\n }\n\n /**\n * Registers transient o
bservers to ancestor and its ancesors for the node\n * which was removed.\n
* @param {!Node} ancestor\n * @param {!Node} node\n */\n function registerT
ransientObservers(ancestor, node) {\n for (; ancestor; ancestor = ancestor.pa
rentNode) {\n var registrations = registrationsTable.get(ancestor);\n
if (!registrations)\n continue;\n for (var i = 0; i < registrations.
length; i++) {\n var registration = registrations[i];\n if (regist
ration.options.subtree)\n registration.addTransientObserver(node);\n
}\n }\n }\n\n function removeTransientObserversFor(observer) {\n for
(var i = 0; i < observer.nodes_.length; i++) {\n var node = observer.nodes_
[i];\n var registrations = registrationsTable.get(node);\n if (!regist
rations)\n return;\n for (var j = 0; j < registrations.length; j++)
{\n var registration = registrations[j];\n if (registration.observ
er === observer)\n registration.removeTransientObservers();\n }\n
}\n }\n\n // http://dom.spec.whatwg.org/#queue-a-mutation-record\n functio
n enqueueMutation(target, type, data) {\n // 1.\n var interestedObservers
= Object.create(null);\n var associatedStrings = Object.create(null);\n\n
// 2.\n for (var node = target; node; node = node.parentNode) {\n // 3.\
n var registrations = registrationsTable.get(node);\n if (!registratio
ns)\n continue;\n for (var j = 0; j < registrations.length; j++) {\n
var registration = registrations[j];\n var options = registration
.options;\n // 1.\n if (node !== target && !options.subtree)\n
continue;\n\n // 2.\n if (type === 'attributes' && !options.
attributes)\n continue;\n\n // 3. If type is \"attributes\", opt
ions's attributeFilter is present, and\n // either options's attributeFil
ter does not contain name or namespace\n // is non-null, continue.\n
if (type === 'attributes' && options.attributeFilter &&\n (data.na
mespace !== null ||\n options.attributeFilter.indexOf(data.name) ===
-1)) {\n continue;\n }\n\n // 4.\n if (type === '
characterData' && !options.characterData)\n continue;\n\n // 5.\
n if (type === 'childList' && !options.childList)\n continue;\n\
n // 6.\n var observer = registration.observer;\n intereste
dObservers[observer.uid_] = observer;\n\n // 7. If either type is \"attri
butes\" and options's attributeOldValue is\n // true, or type is \"charac
terData\" and options's characterDataOldValue\n // is true, set the paire
d string of registered observer's observer in\n // interested observers t
o oldValue.\n if (type === 'attributes' && options.attributeOldValue ||\n
type === 'characterData' && options.characterDataOldValue) {\n
associatedStrings[observer.uid_] = data.oldValue;\n }\n }\n }
\n\n var anyRecordsEnqueued = false;\n\n // 4.\n for (var uid in intere
stedObservers) {\n var observer = interestedObservers[uid];\n var reco
rd = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data
&& 'namespace' in data) {\n record.attributeName = data.name;\n re
cord.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (dat
a.addedNodes)\n record.addedNodes = data.addedNodes;\n\n // 4.\n
if (data.removedNodes)\n record.removedNodes = data.removedNodes;\n\n
// 5.\n if (data.previousSibling)\n record.previousSibling = dat
a.previousSibling;\n\n // 6.\n if (data.nextSibling)\n record.n
extSibling = data.nextSibling;\n\n // 7.\n if (associatedStrings[uid]
!== undefined)\n record.oldValue = associatedStrings[uid];\n\n // 8.
\n observer.records_.push(record);\n\n anyRecordsEnqueued = true;\n
}\n\n if (anyRecordsEnqueued)\n scheduleCallback();\n }\n\n var slice
= Array.prototype.slice;\n\n /**\n * @param {!Object} options\n * @constru
ctor\n */\n function MutationObserverOptions(options) {\n this.childList =
!!options.childList;\n this.subtree = !!options.subtree;\n\n // 1. If eit
her options' attributeOldValue or attributeFilter is present\n // and options
' attributes is omitted, set options' attributes to true.\n if (!('attributes
' in options) &&\n ('attributeOldValue' in options || 'attributeFilter' i
n options)) {\n this.attributes = true;\n } else {\n this.attribute
s = !!options.attributes;\n }\n\n // 2. If options' characterDataOldValue
is present and options'\n // characterData is omitted, set options' character
Data to true.\n if ('characterDataOldValue' in options && !('characterData' i
n options))\n this.characterData = true;\n else\n this.characterDat
a = !!options.characterData;\n\n // 3. & 4.\n if (!this.attributes &&\n
(options.attributeOldValue || 'attributeFilter' in options) ||\n //
5.\n !this.characterData && options.characterDataOldValue) {\n throw
new TypeError();\n }\n\n this.characterData = !!options.characterData;\n
this.attributeOldValue = !!options.attributeOldValue;\n this.characterData
OldValue = !!options.characterDataOldValue;\n if ('attributeFilter' in option
s) {\n if (options.attributeFilter == null ||\n typeof options.att
ributeFilter !== 'object') {\n throw new TypeError();\n }\n thi
s.attributeFilter = slice.call(options.attributeFilter);\n } else {\n th
is.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * T
he class that maps to the DOM MutationObserver interface.\n * @param {Function
} callback.\n * @constructor\n */\n function MutationObserver(callback) {\n
this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n
this.uid_ = ++uidCounter;\n\n // This will leak. There is no way to imple
ment this without WeakRefs :'(\n globalMutationObservers.push(this);\n }\n\n
MutationObserver.prototype = {\n // http://dom.spec.whatwg.org/#dom-mutatio
nobserver-observe\n observe: function(target, options) {\n target = wrap
IfNeeded(target);\n\n var newOptions = new MutationObserverOptions(options)
;\n\n // 6.\n var registration;\n var registrations = registratio
nsTable.get(target);\n if (!registrations)\n registrationsTable.set(
target, registrations = []);\n\n for (var i = 0; i < registrations.length;
i++) {\n if (registrations[i].observer === this) {\n registratio
n = registrations[i];\n // 6.1.\n registration.removeTransient
Observers();\n // 6.2.\n registration.options = newOptions;\n
}\n }\n\n // 7.\n if (!registration) {\n registrati
on = new Registration(this, target, newOptions);\n registrations.push(reg
istration);\n this.nodes_.push(target);\n }\n },\n\n // http:/
/dom.spec.whatwg.org/#dom-mutationobserver-disconnect\n disconnect: function(
) {\n this.nodes_.forEach(function(node) {\n var registrations = reg
istrationsTable.get(node);\n for (var i = 0; i < registrations.length; i+
+) {\n var registration = registrations[i];\n if (registration
.observer === this) {\n registrations.splice(i, 1);\n // E
ach node can only have one registered observer associated with\n // t
his observer.\n break;\n }\n }\n }, this);\n
this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOf
Records = this.records_;\n this.records_ = [];\n return copyOfRecords;
\n }\n };\n\n /**\n * Class used to represent a registered observer.\n
* @param {MutationObserver} observer\n * @param {Node} target\n * @param {Mu
tationObserverOptions} options\n * @constructor\n */\n function Registratio
n(observer, target, options) {\n this.observer = observer;\n this.target =
target;\n this.options = options;\n this.transientObservedNodes = [];\n
}\n\n Registration.prototype = {\n /**\n * Adds a transient observer on
node. The transient observer gets removed\n * next time we deliver the chang
e records.\n * @param {Node} node\n */\n addTransientObserver: functi
on(node) {\n // Don't add transient observers on the target itself. We alre
ady have all\n // the required listeners set up on the target.\n if (n
ode === this.target)\n return;\n\n this.transientObservedNodes.push(
node);\n var registrations = registrationsTable.get(node);\n if (!regi
strations)\n registrationsTable.set(node, registrations = []);\n\n /
/ We know that registrations does not contain this because we already\n //
checked if node === this.target.\n registrations.push(this);\n },\n\n
removeTransientObservers: function() {\n var transientObservedNodes = this
.transientObservedNodes;\n this.transientObservedNodes = [];\n\n for (
var i = 0; i < transientObservedNodes.length; i++) {\n var node = transie
ntObservedNodes[i];\n var registrations = registrationsTable.get(node);\n
for (var j = 0; j < registrations.length; j++) {\n if (registra
tions[j] === this) {\n registrations.splice(j, 1);\n // Ea
ch node can only have one registered observer associated with\n // th
is observer.\n break;\n }\n }\n }\n }\n };\n
\n scope.enqueueMutation = enqueueMutation;\n scope.registerTransientObservers
= registerTransientObservers;\n scope.wrappers.MutationObserver = MutationObse
rver;\n scope.wrappers.MutationRecord = MutationRecord;\n\n})(window.ShadowDOMP
olyfill);\n","/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n
* Use of this source code is goverened by a BSD-style\n * license that can be f
ound in the LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n
* A tree scope represents the root of a tree. All nodes in a tree point to\n
* the same TreeScope object. The tree scope of a node get set the first time\n
* it is accessed or when a node is added or remove to a tree.\n * @construc
tor\n */\n function TreeScope(root, parent) {\n this.root = root;\n thi
s.parent = parent;\n }\n\n TreeScope.prototype = {\n get renderer() {\n
if (this.root instanceof scope.wrappers.ShadowRoot) {\n return scope.ge
tRendererForHost(this.root.host);\n }\n return null;\n },\n\n co
ntains: function(treeScope) {\n for (; treeScope; treeScope = treeScope.par
ent) {\n if (treeScope === this)\n return true;\n }\n
return false;\n }\n };\n\n function setTreeScope(node, treeScope) {\n if
(node.treeScope_ !== treeScope) {\n node.treeScope_ = treeScope;\n fo
r (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {\n sr.treeScop
e_.parent = treeScope;\n }\n for (var child = node.firstChild; child;
child = child.nextSibling) {\n setTreeScope(child, treeScope);\n }\n
}\n }\n\n function getTreeScope(node) {\n if (node.treeScope_)\n r
eturn node.treeScope_;\n var parent = node.parentNode;\n var treeScope;\n
if (parent)\n treeScope = getTreeScope(parent);\n else\n treeSco
pe = new TreeScope(node, null);\n return node.treeScope_ = treeScope;\n }\n\
n scope.TreeScope = TreeScope;\n scope.getTreeScope = getTreeScope;\n scope.s
etTreeScope = setTreeScope;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 20
13 The Polymer Authors. All rights reserved.\n// Use of this source code is gove
rened by a BSD-style\n// license that can be found in the LICENSE file.\n\n(func
tion(scope) {\n 'use strict';\n\n var forwardMethodsToWrapper = scope.forwardM
ethodsToWrapper;\n var getTreeScope = scope.getTreeScope;\n var mixin = scope.
mixin;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unw
rap;\n var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n var wrappe
dFuns = new WeakMap();\n var listenersTable = new WeakMap();\n var handledEven
tsTable = new WeakMap();\n var currentlyDispatchingEvents = new WeakMap();\n v
ar targetTable = new WeakMap();\n var currentTargetTable = new WeakMap();\n va
r relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n
var stopPropagationTable = new WeakMap();\n var stopImmediatePropagationTable
= new WeakMap();\n var eventHandlersTable = new WeakMap();\n var eventPathTabl
e = new WeakMap();\n\n function isShadowRoot(node) {\n return node instanceo
f wrappers.ShadowRoot;\n }\n\n function isInsertionPoint(node) {\n var loca
lName = node.localName;\n return localName === 'content' || localName === 'sh
adow';\n }\n\n function isShadowHost(node) {\n return !!node.shadowRoot;\n
}\n\n function getEventParent(node) {\n var dv;\n return node.parentNode
|| (dv = node.defaultView) && wrap(dv) || null;\n }\n\n // https://dvcs.w3.or
g/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-adjusted-parent\n fu
nction calculateParents(node, context, ancestors) {\n if (ancestors.length)\n
return ancestors.shift();\n\n // 1.\n if (isShadowRoot(node))\n
return getInsertionParent(node) || node.host;\n\n // 2.\n var eventParent
s = scope.eventParentsTable.get(node);\n if (eventParents) {\n // Copy o
ver the remaining event parents for next iteration.\n for (var i = 1; i < e
ventParents.length; i++) {\n ancestors[i - 1] = eventParents[i];\n }
\n return eventParents[0];\n }\n\n // 3.\n if (context && isInsert
ionPoint(node)) {\n var parentNode = node.parentNode;\n if (parentNode
&& isShadowHost(parentNode)) {\n var trees = scope.getShadowTrees(parent
Node);\n var p = getInsertionParent(context);\n for (var i = 0; i
< trees.length; i++) {\n if (trees[i].contains(p))\n return
p;\n }\n }\n }\n\n return getEventParent(node);\n }\n\n // h
ttps://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-re
targeting\n function retarget(node) {\n var stack = []; // 1.\n var ance
stor = node; // 2.\n var targets = [];\n var ancestors = [];\n while (
ancestor) { // 3.\n var context = null; // 3.2.\n // TODO(arv): Chan
ge order of these. If the stack is empty we always end\n // up pushing ance
stor, no matter what.\n if (isInsertionPoint(ancestor)) { // 3.1.\n
context = topMostNotInsertionPoint(stack); // 3.1.1.\n var top = stack[
stack.length - 1] || ancestor; // 3.1.2.\n stack.push(top);\n } els
e if (!stack.length) {\n stack.push(ancestor); // 3.3.\n }\n v
ar target = stack[stack.length - 1]; // 3.4.\n targets.push({target: targe
t, currentTarget: ancestor}); // 3.5.\n if (isShadowRoot(ancestor)) // 3.
6.\n stack.pop(); // 3.6.1.\n\n ancestor = calculateParents(ancesto
r, context, ancestors); // 3.7.\n }\n return targets;\n }\n\n function
topMostNotInsertionPoint(stack) {\n for (var i = stack.length - 1; i >= 0; i-
-) {\n if (!isInsertionPoint(stack[i]))\n return stack[i];\n }\n
return null;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/s
pec/shadow/index.html#dfn-adjusted-related-target\n function adjustRelatedTarge
t(target, related) {\n var ancestors = [];\n while (target) { // 3.\n
var stack = []; // 3.1.\n var ancestor = related; // 3.2.\n var la
st = undefined; // 3.3. Needs to be reset every iteration.\n while (ancest
or) {\n var context = null;\n if (!stack.length) {\n stac
k.push(ancestor);\n } else {\n if (isInsertionPoint(ancestor)) {
// 3.4.3.\n context = topMostNotInsertionPoint(stack);\n
// isDistributed is more general than checking whether last is\n //
assigned into ancestor.\n if (isDistributed(last)) { // 3.4.3.2.\n
var head = stack[stack.length - 1];\n stack.push(head);
\n }\n }\n }\n\n if (inSameTree(ancestor, targ
et)) // 3.4.4.\n return stack[stack.length - 1];\n\n if (isShad
owRoot(ancestor)) // 3.4.5.\n stack.pop();\n\n last = ancestor;
// 3.4.6.\n ancestor = calculateParents(ancestor, context, ancestors);
// 3.4.7.\n }\n if (isShadowRoot(target)) // 3.5.\n target =
target.host;\n else\n target = target.parentNode; // 3.6.\n }\n
}\n\n function getInsertionParent(node) {\n return scope.insertionParentTab
le.get(node);\n }\n\n function isDistributed(node) {\n return getInsertionP
arent(node);\n }\n\n function inSameTree(a, b) {\n return getTreeScope(a) =
== getTreeScope(b);\n }\n\n function dispatchOriginalEvent(originalEvent) {\n
// Make sure this event is only dispatched once.\n if (handledEventsTable.
get(originalEvent))\n return;\n handledEventsTable.set(originalEvent, tr
ue);\n dispatchEvent(wrap(originalEvent), wrap(originalEvent.target));\n }\n
\n function isLoadLikeEvent(event) {\n switch (event.type) {\n case 'be
foreunload':\n case 'load':\n case 'unload':\n return true;\n
}\n return false;\n }\n\n function dispatchEvent(event, originalWrapperTa
rget) {\n if (currentlyDispatchingEvents.get(event))\n throw new Error('
InvalidStateError')\n currentlyDispatchingEvents.set(event, true);\n\n //
Render to ensure that the event path is correct.\n scope.renderAllPending();\
n var eventPath = retarget(originalWrapperTarget);\n\n // For window \"loa
d\" events the \"load\" event is dispatched at the window but\n // the target
is set to the document.\n //\n // http://www.whatwg.org/specs/web-apps/cu
rrent-work/multipage/the-end.html#the-end\n //\n // TODO(arv): Find a less
hacky way to do this.\n if (eventPath.length === 2 &&\n eventPath[0].
target instanceof wrappers.Document &&\n isLoadLikeEvent(event)) {\n
eventPath.shift();\n }\n\n eventPathTable.set(event, eventPath);\n\n i
f (dispatchCapturing(event, eventPath)) {\n if (dispatchAtTarget(event, eve
ntPath)) {\n dispatchBubbling(event, eventPath);\n }\n }\n\n e
ventPhaseTable.set(event, Event.NONE);\n currentTargetTable.delete(event, nul
l);\n currentlyDispatchingEvents.delete(event);\n\n return event.defaultPr
evented;\n }\n\n function dispatchCapturing(event, eventPath) {\n var phase
;\n\n for (var i = eventPath.length - 1; i > 0; i--) {\n var target = ev
entPath[i].target;\n var currentTarget = eventPath[i].currentTarget;\n
if (target === currentTarget)\n continue;\n\n phase = Event.CAPTURI
NG_PHASE;\n if (!invoke(eventPath[i], event, phase))\n return false;
\n }\n\n return true;\n }\n\n function dispatchAtTarget(event, eventPath
) {\n var phase = Event.AT_TARGET;\n return invoke(eventPath[0], event, ph
ase);\n }\n\n function dispatchBubbling(event, eventPath) {\n var bubbles =
event.bubbles;\n var phase;\n\n for (var i = 1; i < eventPath.length; i++
) {\n var target = eventPath[i].target;\n var currentTarget = eventPat
h[i].currentTarget;\n if (target === currentTarget)\n phase = Event.
AT_TARGET;\n else if (bubbles && !stopImmediatePropagationTable.get(event))
\n phase = Event.BUBBLING_PHASE;\n else\n continue;\n\n
if (!invoke(eventPath[i], event, phase))\n return;\n }\n }\n\n funct
ion invoke(tuple, event, phase) {\n var target = tuple.target;\n var curre
ntTarget = tuple.currentTarget;\n\n var listeners = listenersTable.get(curren
tTarget);\n if (!listeners)\n return true;\n\n if ('relatedTarget' in
event) {\n var originalEvent = unwrap(event);\n var unwrappedRelatedT
arget = originalEvent.relatedTarget;\n\n // X-Tag sets relatedTarget on a C
ustomEvent. If they do that there is no\n // way to have relatedTarget retu
rn the adjusted target but worse is that\n // the originalEvent might not h
ave a relatedTarget so we hit an assert\n // when we try to wrap it.\n
if (unwrappedRelatedTarget) {\n // In IE we can get objects that are not
EventTargets at this point.\n // Safari does not have an EventTarget int
erface so revert to checking\n // for addEventListener as an approximatio
n.\n if (unwrappedRelatedTarget instanceof Object &&\n unwrapp
edRelatedTarget.addEventListener) {\n var relatedTarget = wrap(unwrappe
dRelatedTarget);\n\n var adjusted = adjustRelatedTarget(currentTarget,
relatedTarget);\n if (adjusted === target)\n return true;\n
} else {\n adjusted = null;\n }\n relatedTargetTab
le.set(event, adjusted);\n }\n }\n\n eventPhaseTable.set(event, phase
);\n var type = event.type;\n\n var anyRemoved = false;\n targetTable.s
et(event, target);\n currentTargetTable.set(event, currentTarget);\n\n for
(var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n
if (listener.removed) {\n anyRemoved = true;\n continue;\n
}\n\n if (listener.type !== type ||\n !listener.capture && phas
e === Event.CAPTURING_PHASE ||\n listener.capture && phase === Event.BU
BBLING_PHASE) {\n continue;\n }\n\n try {\n if (typeof l
istener.handler === 'function')\n listener.handler.call(currentTarget,
event);\n else\n listener.handler.handleEvent(event);\n\n
if (stopImmediatePropagationTable.get(event))\n return false;\n\n
} catch (ex) {\n if (window.onerror)\n window.onerror(ex.messag
e);\n else\n console.error(ex, ex.stack);\n }\n }\n\n
if (anyRemoved) {\n var copy = listeners.slice();\n listeners.length
= 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].remove
d)\n listeners.push(copy[i]);\n }\n }\n\n return !stopPropag
ationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\n
this.type = type;\n this.handler = handler;\n this.capture = Boolean(cap
ture);\n }\n Listener.prototype = {\n equals: function(that) {\n retur
n this.handler === that.handler && this.type === that.type &&\n this.ca
pture === that.capture;\n },\n get removed() {\n return this.handler
=== null;\n },\n remove: function() {\n this.handler = null;\n }\n
};\n\n var OriginalEvent = window.Event;\n OriginalEvent.prototype.polymerBl
ackList_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of K
eyboardEvent but Firefox does not\n // support constructable KeyboardEvent so
we keep it here for now.\n keyLocation: true\n };\n\n /**\n * Creates a
new Event wrapper or wraps an existin native Event object.\n * @param {string|
Event} type\n * @param {Object=} options\n * @constructor\n */\n function
Event(type, options) {\n if (type instanceof OriginalEvent) {\n var imp
l = type;\n if (!OriginalBeforeUnloadEvent && impl.type === 'beforeunload')
\n return new BeforeUnloadEvent(impl);\n this.impl = impl;\n } el
se {\n return wrap(constructEvent(OriginalEvent, 'Event', type, options));\
n }\n }\n Event.prototype = {\n get target() {\n return targetTable
.get(this);\n },\n get currentTarget() {\n return currentTargetTable.
get(this);\n },\n get eventPhase() {\n return eventPhaseTable.get(thi
s);\n },\n get path() {\n var nodeList = new wrappers.NodeList();\n
var eventPath = eventPathTable.get(this);\n if (eventPath) {\n v
ar index = 0;\n var lastIndex = eventPath.length - 1;\n var baseRo
ot = getTreeScope(currentTargetTable.get(this));\n\n for (var i = 0; i <=
lastIndex; i++) {\n var currentTarget = eventPath[i].currentTarget;\n
var currentRoot = getTreeScope(currentTarget);\n if (currentRo
ot.contains(baseRoot) &&\n // Make sure we do not add Window to the
path.\n (i !== lastIndex || currentTarget instanceof wrappers.Node
)) {\n nodeList[index++] = currentTarget;\n }\n }\n
nodeList.length = index;\n }\n return nodeList;\n },\n sto
pPropagation: function() {\n stopPropagationTable.set(this, true);\n },\
n stopImmediatePropagation: function() {\n stopPropagationTable.set(this
, true);\n stopImmediatePropagationTable.set(this, true);\n }\n };\n r
egisterWrapper(OriginalEvent, Event, document.createEvent('Event'));\n\n functi
on unwrapOptions(options) {\n if (!options || !options.relatedTarget)\n
return options;\n return Object.create(options, {\n relatedTarget: {valu
e: unwrap(options.relatedTarget)}\n });\n }\n\n function registerGenericEve
nt(name, SuperEvent, prototype) {\n var OriginalEvent = window[name];\n va
r GenericEvent = function(type, options) {\n if (type instanceof OriginalEv
ent)\n this.impl = type;\n else\n return wrap(constructEvent(
OriginalEvent, name, type, options));\n };\n GenericEvent.prototype = Obje
ct.create(SuperEvent.prototype);\n if (prototype)\n mixin(GenericEvent.p
rototype, prototype);\n if (OriginalEvent) {\n // - Old versions of Safa
ri fails on new FocusEvent (and others?).\n // - IE does not support event
constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n //
=> Try the best practice solution first and fallback to the old way\n // i
f needed.\n try {\n registerWrapper(OriginalEvent, GenericEvent, new
OriginalEvent('temp'));\n } catch (ex) {\n registerWrapper(Original
Event, GenericEvent,\n document.createEvent(name));\n
}\n }\n return GenericEvent;\n }\n\n var UIEvent = registerGenericEven
t('UIEvent', Event);\n var CustomEvent = registerGenericEvent('CustomEvent', Ev
ent);\n\n var relatedTargetProto = {\n get relatedTarget() {\n var rela
tedTarget = relatedTargetTable.get(this);\n // relatedTarget can be null.\n
if (relatedTarget !== undefined)\n return relatedTarget;\n ret
urn wrap(unwrap(this).relatedTarget);\n }\n };\n\n function getInitFunction
(name, relatedTargetIndex) {\n return function() {\n arguments[relatedTa
rgetIndex] = unwrap(arguments[relatedTargetIndex]);\n var impl = unwrap(thi
s);\n impl[name].apply(impl, arguments);\n };\n }\n\n var mouseEventPr
oto = mixin({\n initMouseEvent: getInitFunction('initMouseEvent', 14)\n }, r
elatedTargetProto);\n\n var focusEventProto = mixin({\n initFocusEvent: getI
nitFunction('initFocusEvent', 5)\n }, relatedTargetProto);\n\n var MouseEvent
= registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);\n var FocusEven
t = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);\n\n // In cas
e the browser does not support event constructors we polyfill that\n // by call
ing `createEvent('Foo')` and `initFooEvent` where the arguments to\n // `initFo
oEvent` are derived from the registered default event init dict.\n var defaultI
nitDicts = Object.create(null);\n\n var supportsEventConstructors = (function()
{\n try {\n new window.FocusEvent('focus');\n } catch (ex) {\n
return false;\n }\n return true;\n })();\n\n /**\n * Constructs a new
native event.\n */\n function constructEvent(OriginalEvent, name, type, optio
ns) {\n if (supportsEventConstructors)\n return new OriginalEvent(type,
unwrapOptions(options));\n\n // Create the arguments from the default diction
ary.\n var event = unwrap(document.createEvent(name));\n var defaultDict =
defaultInitDicts[name];\n var args = [type];\n Object.keys(defaultDict).f
orEach(function(key) {\n var v = options != null && key in options ?\n
options[key] : defaultDict[key];\n if (key === 'relatedTarget')\n
v = unwrap(v);\n args.push(v);\n });\n event['init' + name].apply(
event, args);\n return event;\n }\n\n if (!supportsEventConstructors) {\n
var configureEventConstructor = function(name, initDict, superName) {\n i
f (superName) {\n var superDict = defaultInitDicts[superName];\n i
nitDict = mixin(mixin({}, superDict), initDict);\n }\n\n defaultInitDi
cts[name] = initDict;\n };\n\n // The order of the default event init dict
ionary keys is important, the\n // arguments to initFooEvent is derived from
that.\n configureEventConstructor('Event', {bubbles: false, cancelable: false
});\n configureEventConstructor('CustomEvent', {detail: null}, 'Event');\n
configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Event');\n co
nfigureEventConstructor('MouseEvent', {\n screenX: 0,\n screenY: 0,\n
clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKey: false,
\n shiftKey: false,\n metaKey: false,\n button: 0,\n related
Target: null\n }, 'UIEvent');\n configureEventConstructor('FocusEvent', {r
elatedTarget: null}, 'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeU
nloadEvent.\n // https://bugs.webkit.org/show_bug.cgi?id=120849\n var Original
BeforeUnloadEvent = window.BeforeUnloadEvent;\n\n function BeforeUnloadEvent(im
pl) {\n Event.call(this, impl);\n }\n BeforeUnloadEvent.prototype = Object.
create(Event.prototype);\n mixin(BeforeUnloadEvent.prototype, {\n get return
Value() {\n return this.impl.returnValue;\n },\n set returnValue(v) {
\n this.impl.returnValue = v;\n }\n });\n\n if (OriginalBeforeUnloadEv
ent)\n registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);\n\n fu
nction isValidListener(fun) {\n if (typeof fun === 'function')\n return
true;\n return fun && fun.handleEvent;\n }\n\n function isMutationEvent(typ
e) {\n switch (type) {\n case 'DOMAttrModified':\n case 'DOMAttribu
teNameChanged':\n case 'DOMCharacterDataModified':\n case 'DOMElementN
ameChanged':\n case 'DOMNodeInserted':\n case 'DOMNodeInsertedIntoDocu
ment':\n case 'DOMNodeRemoved':\n case 'DOMNodeRemovedFromDocument':\n
case 'DOMSubtreeModified':\n return true;\n }\n return false;
\n }\n\n var OriginalEventTarget = window.EventTarget;\n\n /**\n * This rep
resents a wrapper for an EventTarget.\n * @param {!EventTarget} impl The origi
nal event target.\n * @constructor\n */\n function EventTarget(impl) {\n
this.impl = impl;\n }\n\n // Node and Window have different internal type che
cks in WebKit so we cannot\n // use the same method as the original function.\n
var methodNames = [\n 'addEventListener',\n 'removeEventListener',\n
'dispatchEvent'\n ];\n\n [Node, Window].forEach(function(constructor) {\n v
ar p = constructor.prototype;\n methodNames.forEach(function(name) {\n O
bject.defineProperty(p, name + '_', {value: p[name]});\n });\n });\n\n func
tion getTargetToListenAt(wrapper) {\n if (wrapper instanceof wrappers.ShadowR
oot)\n wrapper = wrapper.host;\n return unwrap(wrapper);\n }\n\n Event
Target.prototype = {\n addEventListener: function(type, fun, capture) {\n
if (!isValidListener(fun) || isMutationEvent(type))\n return;\n\n
var listener = new Listener(type, fun, capture);\n var listeners = listener
sTable.get(this);\n if (!listeners) {\n listeners = [];\n lis
tenersTable.set(this, listeners);\n } else {\n // Might have a dupli
cate.\n for (var i = 0; i < listeners.length; i++) {\n if (liste
ner.equals(listeners[i]))\n return;\n }\n }\n\n list
eners.push(listener);\n\n var target = getTargetToListenAt(this);\n ta
rget.addEventListener_(type, dispatchOriginalEvent, true);\n },\n removeEv
entListener: function(type, fun, capture) {\n capture = Boolean(capture);\n
var listeners = listenersTable.get(this);\n if (!listeners)\n
return;\n var count = 0, found = false;\n for (var i = 0; i < listener
s.length; i++) {\n if (listeners[i].type === type && listeners[i].capture
=== capture) {\n count++;\n if (listeners[i].handler === fun)
{\n found = true;\n listeners[i].remove();\n }\n
}\n }\n\n if (found && count === 1) {\n var target = ge
tTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOrig
inalEvent, true);\n }\n },\n dispatchEvent: function(event) {\n
// We want to use the native dispatchEvent because it triggers the default\n
// actions (like checking a checkbox). However, if there are no listeners\n
// in the composed tree then there are no events that will trigger and\n
// listeners in the non composed tree that are part of the event path are\n
// not notified.\n //\n // If we find out that there are no listener
s in the composed tree we add\n // a temporary listener to the target which
makes us get called back even\n // in that case.\n\n var nativeEvent
= unwrap(event);\n var eventType = nativeEvent.type;\n\n // Allow disp
atching the same event again. This is safe because if user\n // code calls
this during an existing dispatch of the same event the\n // native dispatch
Event throws (that is required by the spec).\n handledEventsTable.set(nativ
eEvent, false);\n\n // Force rendering since we prefer native dispatch and
that works on the\n // composed tree.\n scope.renderAllPending();\n\n
var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\n
tempListener = function() {};\n this.addEventListener(eventType, t
empListener, true);\n }\n\n try {\n return unwrap(this).dispatc
hEvent_(nativeEvent);\n } finally {\n if (tempListener)\n t
his.removeEventListener(eventType, tempListener, true);\n }\n }\n };\n\
n function hasListener(node, type) {\n var listeners = listenersTable.get(no
de);\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n
if (!listeners[i].removed && listeners[i].type === type)\n retu
rn true;\n }\n }\n return false;\n }\n\n function hasListenerInAnce
stors(target, type) {\n for (var node = unwrap(target); node; node = node.par
entNode) {\n if (hasListener(wrap(node), type))\n return true;\n
}\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(Ori
ginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(constructor
s) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var orig
inalElementFromPoint = document.elementFromPoint;\n\n function elementFromPoint
(self, document, x, y) {\n scope.renderAllPending();\n\n var element = wra
p(originalElementFromPoint.call(document.impl, x, y));\n var targets = retarg
et(element, this)\n for (var i = 0; i < targets.length; i++) {\n var tar
get = targets[i];\n if (target.currentTarget === self)\n return targ
et.target;\n }\n return null;\n }\n\n /**\n * Returns a function that
is to be used as a getter for `onfoo` properties.\n * @param {string} name\n
* @return {Function}\n */\n function getEventHandlerGetter(name) {\n retu
rn function() {\n var inlineEventHandlers = eventHandlersTable.get(this);\n
return inlineEventHandlers && inlineEventHandlers[name] &&\n inli
neEventHandlers[name].value || null;\n };\n }\n\n /**\n * Returns a func
tion that is to be used as a setter for `onfoo` properties.\n * @param {string
} name\n * @return {Function}\n */\n function getEventHandlerSetter(name) {
\n var eventType = name.slice(2);\n return function(value) {\n var in
lineEventHandlers = eventHandlersTable.get(this);\n if (!inlineEventHandler
s) {\n inlineEventHandlers = Object.create(null);\n eventHandlersT
able.set(this, inlineEventHandlers);\n }\n\n var old = inlineEventHand
lers[name];\n if (old)\n this.removeEventListener(eventType, old.wra
pped, false);\n\n if (typeof value === 'function') {\n var wrapped =
function(e) {\n var rv = value.call(this, e);\n if (rv === fa
lse)\n e.preventDefault();\n else if (name === 'onbeforeunlo
ad' && typeof rv === 'string')\n e.returnValue = rv;\n // mo
useover uses true for preventDefault but preventDefault for\n // mouseo
ver is ignored by browsers these day.\n };\n\n this.addEventListen
er(eventType, wrapped, false);\n inlineEventHandlers[name] = {\n
value: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n
scope.adjustRelatedTarget = adjustRelatedTarget;\n scope.elementFromPoint = e
lementFromPoint;\n scope.getEventHandlerGetter = getEventHandlerGetter;\n scop
e.getEventHandlerSetter = getEventHandlerSetter;\n scope.wrapEventTargetMethods
= wrapEventTargetMethods;\n scope.wrappers.BeforeUnloadEvent = BeforeUnloadEve
nt;\n scope.wrappers.CustomEvent = CustomEvent;\n scope.wrappers.Event = Event
;\n scope.wrappers.EventTarget = EventTarget;\n scope.wrappers.FocusEvent = Fo
cusEvent;\n scope.wrappers.MouseEvent = MouseEvent;\n scope.wrappers.UIEvent =
UIEvent;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2012 The Polymer Aut
hors. All rights reserved.\n// Use of this source code is goverened by a BSD-sty
le\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n '
use strict';\n\n var wrap = scope.wrap;\n\n function nonEnum(obj, prop) {\n
Object.defineProperty(obj, prop, {enumerable: false});\n }\n\n function NodeL
ist() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.pro
totype = {\n item: function(index) {\n return this[index];\n }\n };\
n nonEnum(NodeList.prototype, 'item');\n\n function wrapNodeList(list) {\n
if (list == null)\n return list;\n var wrapperList = new NodeList();\n
for (var i = 0, length = list.length; i < length; i++) {\n wrapperList[i]
= wrap(list[i]);\n }\n wrapperList.length = length;\n return wrapperLi
st;\n }\n\n function addWrapNodeListMethod(wrapperConstructor, name) {\n wr
apperConstructor.prototype[name] = function() {\n return wrapNodeList(this.
impl[name].apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.NodeLi
st = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.
wrapNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyrig
ht 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is
goverened by a BSD-style\n * license that can be found in the LICENSE file.\n *
/\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): Implement.\n\n scop
e.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers.HTMLCollection = sc
ope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n","/**\n * Copyright 20
12 The Polymer Authors. All rights reserved.\n * Use of this source code is gove
rened by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n
(function(scope) {\n 'use strict';\n\n var EventTarget = scope.wrappers.EventT
arget;\n var NodeList = scope.wrappers.NodeList;\n var TreeScope = scope.TreeS
cope;\n var assert = scope.assert;\n var defineWrapGetter = scope.defineWrapGe
tter;\n var enqueueMutation = scope.enqueueMutation;\n var getTreeScope = scop
e.getTreeScope;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\
n var registerTransientObservers = scope.registerTransientObservers;\n var reg
isterWrapper = scope.registerWrapper;\n var setTreeScope = scope.setTreeScope;\
n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n v
ar wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers
= scope.wrappers;\n\n function assertIsNodeWrapper(node) {\n assert(node ins
tanceof Node);\n }\n\n function createOneElementNodeList(node) {\n var node
s = new NodeList();\n nodes[0] = node;\n nodes.length = 1;\n return nod
es;\n }\n\n var surpressMutations = false;\n\n /**\n * Called before node i
s inserted into a node to enqueue its removal from its\n * old parent.\n * @
param {!Node} node The node that is about to be removed.\n * @param {!Node} pa
rent The parent node that the node is being removed from.\n * @param {!NodeLis
t} nodes The collected nodes.\n */\n function enqueueRemovalForInsertedNodes(
node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n remove
dNodes: nodes,\n previousSibling: node.previousSibling,\n nextSibling:
node.nextSibling\n });\n }\n\n function enqueueRemovalForInsertedDocumentF
ragment(df, nodes) {\n enqueueMutation(df, 'childList', {\n removedNodes
: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFragment or a
Node for removal followed\n * by an insertion.\n *\n * This updates the i
nternal pointers for node, previousNode and nextNode.\n */\n function collect
Nodes(node, parentNode, previousNode, nextNode) {\n if (node instanceof Docum
entFragment) {\n var nodes = collectNodesForDocumentFragment(node);\n\n
// The extra loop is to work around bugs with DocumentFragments in IE.\n
surpressMutations = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n
node.removeChild(nodes[i]);\n nodes[i].parentNode_ = parentNode;\
n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.le
ngth; i++) {\n nodes[i].previousSibling_ = nodes[i - 1] || previousNode;\
n nodes[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if
(previousNode)\n previousNode.nextSibling_ = nodes[0];\n if (nextNod
e)\n nextNode.previousSibling_ = nodes[nodes.length - 1];\n\n return
nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldPa
rent = node.parentNode;\n if (oldParent) {\n // This will enqueue the mu
tation record for the removal as needed.\n oldParent.removeChild(node);\n
}\n\n node.parentNode_ = parentNode;\n node.previousSibling_ = previousN
ode;\n node.nextSibling_ = nextNode;\n if (previousNode)\n previousNo
de.nextSibling_ = node;\n if (nextNode)\n nextNode.previousSibling_ = no
de;\n\n return nodes;\n }\n\n function collectNodesNative(node) {\n if (
node instanceof DocumentFragment)\n return collectNodesForDocumentFragment(
node);\n\n var nodes = createOneElementNodeList(node);\n var oldParent = n
ode.parentNode;\n if (oldParent)\n enqueueRemovalForInsertedNodes(node,
oldParent, nodes);\n return nodes;\n }\n\n function collectNodesForDocument
Fragment(node) {\n var nodes = new NodeList();\n var i = 0;\n for (var
child = node.firstChild; child; child = child.nextSibling) {\n nodes[i++] =
child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDocumentFrag
ment(node, nodes);\n return nodes;\n }\n\n function snapshotNodeList(nodeLi
st) {\n // NodeLists are not live at the moment so just return the same objec
t.\n return nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-is-insert
ed\n function nodeWasAdded(node, treeScope) {\n setTreeScope(node, treeScope
);\n node.nodeIsInserted_();\n }\n\n function nodesWereAdded(nodes, parent)
{\n var treeScope = getTreeScope(parent);\n for (var i = 0; i < nodes.len
gth; i++) {\n nodeWasAdded(nodes[i], treeScope);\n }\n }\n\n // http:/
/dom.spec.whatwg.org/#node-is-removed\n function nodeWasRemoved(node) {\n se
tTreeScope(node, new TreeScope(node, null));\n }\n\n function nodesWereRemoved
(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasRemoved(no
des[i]);\n }\n }\n\n function ensureSameOwnerDocument(parent, child) {\n
var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : paren
t.ownerDocument;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adop
tNode(child);\n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!no
des.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n //
All nodes have the same ownerDocument when we get here.\n if (ownerDoc === no
des[0].ownerDocument)\n return;\n\n for (var i = 0; i < nodes.length; i+
+) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n functi
on unwrapNodesForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes)
;\n var length = nodes.length;\n\n if (length === 1)\n return unwrap(
nodes[0]);\n\n var df = unwrap(owner.ownerDocument.createDocumentFragment());
\n for (var i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]))
;\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (
wrapper.firstChild_ !== undefined) {\n var child = wrapper.firstChild_;\n
while (child) {\n var tmp = child;\n child = child.nextSibling
_;\n tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefine
d;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n
}\n\n function removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShado
wRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (child
Wrapper) {\n assert(childWrapper.parentNode === wrapper);\n var ne
xtSibling = childWrapper.nextSibling;\n var childNode = unwrap(childWrapp
er);\n var parentNode = childNode.parentNode;\n if (parentNode)\n
originalRemoveChild.call(parentNode, childNode);\n childWrapper.
previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentN
ode_ = null;\n childWrapper = nextSibling;\n }\n wrapper.firstC
hild_ = wrapper.lastChild_ = null;\n } else {\n var node = unwrap(wrappe
r);\n var child = node.firstChild;\n var nextSibling;\n while (ch
ild) {\n nextSibling = child.nextSibling;\n originalRemoveChild.ca
ll(node, child);\n child = nextSibling;\n }\n }\n }\n\n functio
n invalidateParent(node) {\n var p = node.parentNode;\n return p && p.inva
lidateShadowRenderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i
= 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.remov
eChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var
originalCloneNode = window.Node.prototype.cloneNode;\n\n function cloneNode(no
de, deep, opt_doc) {\n var clone;\n if (opt_doc)\n clone = wrap(origi
nalImportNode.call(opt_doc, node.impl, false));\n else\n clone = wrap(or
iginalCloneNode.call(node.impl, false));\n\n if (deep) {\n for (var chil
d = node.firstChild; child; child = child.nextSibling) {\n clone.appendCh
ild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrap
pers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n
for (var child = node.content.firstChild;\n child;\n chi
ld = child.nextSibling) {\n cloneContent.appendChild(cloneNode(child, tr
ue, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elements
also clone other data like value.\n return clone;\n }\n\n function contains
(self, child) {\n if (!child || getTreeScope(self) !== getTreeScope(child))\n
return false;\n\n for (var node = child; node; node = node.parentNode)
{\n if (node === self)\n return true;\n }\n return false;\n }
\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrapper o
f a native DOM node.\n * @param {!Node} original The original DOM node, aka, t
he visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\n fu
nction Node(original) {\n assert(original instanceof OriginalNode);\n\n Ev
entTarget.call(this, original);\n\n // These properties are used to override
the visual references with the\n // logical ones. If the value is undefined i
t means that the logical is the\n // same as the visual.\n\n /**\n * @
type {Node|undefined}\n * @private\n */\n this.parentNode_ = undefine
d;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this
.firstChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @pri
vate\n */\n this.lastChild_ = undefined;\n\n /**\n * @type {Node|u
ndefined}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /
**\n * @type {Node|undefined}\n * @private\n */\n this.previousSi
bling_ = undefined;\n\n this.treeScope_ = undefined;\n }\n\n var OriginalDo
cumentFragment = window.DocumentFragment;\n var originalAppendChild = OriginalN
ode.prototype.appendChild;\n var originalCompareDocumentPosition =\n Origi
nalNode.prototype.compareDocumentPosition;\n var originalInsertBefore = Origina
lNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.prototyp
e.removeChild;\n var originalReplaceChild = OriginalNode.prototype.replaceChild
;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChildOrigi
nalHelper = isIe ?\n function(parent, child) {\n try {\n or
iginalRemoveChild.call(parent, child);\n } catch (ex) {\n if (!(
parent instanceof OriginalDocumentFragment))\n throw ex;\n }\n
} :\n function(parent, child) {\n originalRemoveChild.call(par
ent, child);\n };\n\n Node.prototype = Object.create(EventTarget.prototype
);\n mixin(Node.prototype, {\n appendChild: function(childWrapper) {\n
return this.insertBefore(childWrapper, null);\n },\n\n insertBefore: funct
ion(childWrapper, refWrapper) {\n assertIsNodeWrapper(childWrapper);\n\n
var refNode;\n if (refWrapper) {\n if (isWrapper(refWrapper)) {\n
refNode = unwrap(refWrapper);\n } else {\n refNode = r
efWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n
refWrapper = null;\n refNode = null;\n }\n\n refWrapper &
& assert(refWrapper.parentNode === this);\n\n var nodes;\n var previou
sNode =\n refWrapper ? refWrapper.previousSibling : this.lastChild;\n\n
var useNative = !this.invalidateShadowRenderer() &&\n
!invalidateParent(childWrapper);\n\n if (useNative)\n nodes = colle
ctNodesNative(childWrapper);\n else\n nodes = collectNodes(childWrap
per, this, previousNode, refWrapper);\n\n if (useNative) {\n ensureS
ameOwnerDocument(this, childWrapper);\n clearChildNodes(this);\n o
riginalInsertBefore.call(this.impl, unwrap(childWrapper), refNode);\n } els
e {\n if (!previousNode)\n this.firstChild_ = nodes[0];\n
if (!refWrapper)\n this.lastChild_ = nodes[nodes.length - 1];\n\n
var parentNode = refNode ? refNode.parentNode : this.impl;\n\n // inse
rtBefore refWrapper no matter what the parent is?\n if (parentNode) {\n
originalInsertBefore.call(parentNode,\n unwrapNodesForInser
tion(this, nodes), refNode);\n } else {\n adoptNodesIfNeeded(thi
s, nodes);\n }\n }\n\n enqueueMutation(this, 'childList', {\n
addedNodes: nodes,\n nextSibling: refWrapper,\n previousSibl
ing: previousNode\n });\n\n nodesWereAdded(nodes, this);\n\n retu
rn childWrapper;\n },\n\n removeChild: function(childWrapper) {\n ass
ertIsNodeWrapper(childWrapper);\n if (childWrapper.parentNode !== this) {\n
// IE has invalid DOM trees at times.\n var found = false;\n
var childNodes = this.childNodes;\n for (var ieChild = this.firstChild
; ieChild;\n ieChild = ieChild.nextSibling) {\n if (ieChild
=== childWrapper) {\n found = true;\n break;\n }
\n }\n if (!found) {\n // TODO(arv): DOMException\n
throw new Error('NotFoundError');\n }\n }\n\n var childNode
= unwrap(childWrapper);\n var childWrapperNextSibling = childWrapper.nextS
ibling;\n var childWrapperPreviousSibling = childWrapper.previousSibling;\n
\n if (this.invalidateShadowRenderer()) {\n // We need to remove the
real node from the DOM before updating the\n // pointers. This is so tha
t that mutation event is dispatched before\n // the pointers have changed
.\n var thisFirstChild = this.firstChild;\n var thisLastChild = th
is.lastChild;\n\n var parentNode = childNode.parentNode;\n if (par
entNode)\n removeChildOriginalHelper(parentNode, childNode);\n\n
if (thisFirstChild === childWrapper)\n this.firstChild_ = childWrapper
NextSibling;\n if (thisLastChild === childWrapper)\n this.lastCh
ild_ = childWrapperPreviousSibling;\n if (childWrapperPreviousSibling)\n
childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;\n
if (childWrapperNextSibling) {\n childWrapperNextSibling.previous
Sibling_ =\n childWrapperPreviousSibling;\n }\n\n chi
ldWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapp
er.parentNode_ = undefined;\n } else {\n clearChildNodes(this);\n
removeChildOriginalHelper(this.impl, childNode);\n }\n\n if (!sur
pressMutations) {\n enqueueMutation(this, 'childList', {\n remov
edNodes: createOneElementNodeList(childWrapper),\n nextSibling: childWr
apperNextSibling,\n previousSibling: childWrapperPreviousSibling\n
});\n }\n\n registerTransientObservers(this, childWrapper);\n\n
return childWrapper;\n },\n\n replaceChild: function(newChildWrapper, ol
dChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldCh
ildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChildNode = unwrap
(oldChildWrapper);\n } else {\n oldChildNode = oldChildWrapper;\n
oldChildWrapper = wrap(oldChildNode);\n }\n\n if (oldChildWrapper
.parentNode !== this) {\n // TODO(arv): DOMException\n throw new E
rror('NotFoundError');\n }\n\n var nextNode = oldChildWrapper.nextSibl
ing;\n var previousNode = oldChildWrapper.previousSibling;\n var nodes
;\n\n var useNative = !this.invalidateShadowRenderer() &&\n
!invalidateParent(newChildWrapper);\n\n if (useNative) {\n nod
es = collectNodesNative(newChildWrapper);\n } else {\n if (nextNode
=== newChildWrapper)\n nextNode = newChildWrapper.nextSibling;\n
nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);\n }\n
\n if (!useNative) {\n if (this.firstChild === oldChildWrapper)\n
this.firstChild_ = nodes[0];\n if (this.lastChild === oldChildWrap
per)\n this.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWr
apper.previousSibling_ = oldChildWrapper.nextSibling_ =\n oldChildWra
pper.parentNode_ = undefined;\n\n // replaceChild no matter what the pare
nt is?\n if (oldChildNode.parentNode) {\n originalReplaceChild.c
all(\n oldChildNode.parentNode,\n unwrapNodesForInsert
ion(this, nodes),\n oldChildNode);\n }\n } else {\n
ensureSameOwnerDocument(this, newChildWrapper);\n clearChildNodes(thi
s);\n originalReplaceChild.call(this.impl, unwrap(newChildWrapper),\n
oldChildNode);\n }\n\n enqueueMutation(t
his, 'childList', {\n addedNodes: nodes,\n removedNodes: createOne
ElementNodeList(oldChildWrapper),\n nextSibling: nextNode,\n previ
ousSibling: previousNode\n });\n\n nodeWasRemoved(oldChildWrapper);\n
nodesWereAdded(nodes, this);\n\n return oldChildWrapper;\n },\n\n
/**\n * Called after a node was inserted. Subclasses override this to inva
lidate\n * the renderer as needed.\n * @private\n */\n nodeIsInse
rted_: function() {\n for (var child = this.firstChild; child; child = chil
d.nextSibling) {\n child.nodeIsInserted_();\n }\n },\n\n hasCh
ildNodes: function() {\n return this.firstChild !== null;\n },\n\n /*
* @type {Node} */\n get parentNode() {\n // If the parentNode has not be
en overridden, use the original parentNode.\n return this.parentNode_ !== u
ndefined ?\n this.parentNode_ : wrap(this.impl.parentNode);\n },\n\n
/** @type {Node} */\n get firstChild() {\n return this.firstChild_ !
== undefined ?\n this.firstChild_ : wrap(this.impl.firstChild);\n },
\n\n /** @type {Node} */\n get lastChild() {\n return this.lastChild_
!== undefined ?\n this.lastChild_ : wrap(this.impl.lastChild);\n },
\n\n /** @type {Node} */\n get nextSibling() {\n return this.nextSibl
ing_ !== undefined ?\n this.nextSibling_ : wrap(this.impl.nextSibling);
\n },\n\n /** @type {Node} */\n get previousSibling() {\n return t
his.previousSibling_ !== undefined ?\n this.previousSibling_ : wrap(thi
s.impl.previousSibling);\n },\n\n get parentElement() {\n var p = thi
s.parentNode;\n while (p && p.nodeType !== Node.ELEMENT_NODE) {\n p
= p.parentNode;\n }\n return p;\n },\n\n get textContent() {\n
// TODO(arv): This should fallback to this.impl.textContent if there\n
// are no shadow trees below or above the context node.\n var s = '';\n
for (var child = this.firstChild; child; child = child.nextSibling) {\n
if (child.nodeType != Node.COMMENT_NODE) {\n s += child.textContent;\n
}\n }\n return s;\n },\n set textContent(textContent) {\
n var removedNodes = snapshotNodeList(this.childNodes);\n\n if (this.i
nvalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (te
xtContent !== '') {\n var textNode = this.impl.ownerDocument.createText
Node(textContent);\n this.appendChild(textNode);\n }\n } el
se {\n clearChildNodes(this);\n this.impl.textContent = textConten
t;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n
enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,\n
removedNodes: removedNodes\n });\n\n nodesWereRemoved(removedNodes);\
n nodesWereAdded(addedNodes, this);\n },\n\n get childNodes() {\n
var wrapperList = new NodeList();\n var i = 0;\n for (var child = th
is.firstChild; child; child = child.nextSibling) {\n wrapperList[i++] = c
hild;\n }\n wrapperList.length = i;\n return wrapperList;\n },
\n\n cloneNode: function(deep) {\n return cloneNode(this, deep);\n },
\n\n contains: function(child) {\n return contains(this, wrapIfNeeded(ch
ild));\n },\n\n compareDocumentPosition: function(otherNode) {\n // T
his only wraps, it therefore only operates on the composed DOM and not\n //
the logical DOM.\n return originalCompareDocumentPosition.call(this.impl,\
n unwrapIfNeeded(otherNode));\n
},\n\n normalize: function() {\n var nodes = snapshotNodeList(this.c
hildNodes);\n var remNodes = [];\n var s = '';\n var modNode;\n\n
for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n
if (n.nodeType === Node.TEXT_NODE) {\n if (!modNode && !n.data.length
)\n this.removeNode(n);\n else if (!modNode)\n mo
dNode = n;\n else {\n s += n.data;\n remNodes.pus
h(n);\n }\n } else {\n if (modNode && remNodes.length)
{\n modNode.data += s;\n cleanUpNodes(remNodes);\n
}\n remNodes = [];\n s = '';\n modNode = null;\n
if (n.childNodes.length)\n n.normalize();\n }\n }\
n\n // handle case where >1 text nodes are the last children\n if (mod
Node && remNodes.length) {\n modNode.data += s;\n cleanupNodes(rem
Nodes);\n }\n }\n });\n\n defineWrapGetter(Node, 'ownerDocument');\n\n
// We use a DocumentFragment as a base and then delete the properties of\n //
DocumentFragment.prototype from the wrapper Node. Since delete makes\n // obje
cts slow in some JS engines we recreate the prototype object.\n registerWrapper
(OriginalNode, Node, document.createDocumentFragment());\n delete Node.prototyp
e.querySelector;\n delete Node.prototype.querySelectorAll;\n Node.prototype =
mixin(Object.create(EventTarget.prototype), Node.prototype);\n\n scope.cloneNod
e = cloneNode;\n scope.nodeWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = n
odeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;\n scope.nodesWereRemov
ed = nodesWereRemoved;\n scope.snapshotNodeList = snapshotNodeList;\n scope.wr
appers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The P
olymer Authors. All rights reserved.\n// Use of this source code is governed by
a BSD-style\n// license that can be found in the LICENSE file.\n\n(function(scop
e) {\n 'use strict';\n\n function findOne(node, selector) {\n var m, el = n
ode.firstElementChild;\n while (el) {\n if (el.matches(selector))\n
return el;\n m = findOne(el, selector);\n if (m)\n return m;
\n el = el.nextElementSibling;\n }\n return null;\n }\n\n function
findAll(node, selector, results) {\n var el = node.firstElementChild;\n wh
ile (el) {\n if (el.matches(selector))\n results[results.length++] =
el;\n findAll(el, selector, results);\n el = el.nextElementSibling;\n
}\n return results;\n }\n\n // find and findAll will only match Simple
Selectors,\n // Structural Pseudo Classes are not guarenteed to be correct\n /
/ http://www.w3.org/TR/css3-selectors/#simple-selectors\n\n var SelectorsInterf
ace = {\n querySelector: function(selector) {\n return findOne(this, sel
ector);\n },\n querySelectorAll: function(selector) {\n return findAl
l(this, selector, new NodeList())\n }\n };\n\n var GetElementsByInterface =
{\n getElementsByTagName: function(tagName) {\n // TODO(arv): Check tag
Name?\n return this.querySelectorAll(tagName);\n },\n getElementsByCl
assName: function(className) {\n // TODO(arv): Check className?\n retu
rn this.querySelectorAll('.' + className);\n },\n getElementsByTagNameNS:
function(ns, tagName) {\n if (ns === '*')\n return this.getElementsB
yTagName(tagName);\n\n // TODO(arv): Check tagName?\n var result = new
NodeList;\n var els = this.getElementsByTagName(tagName);\n for (var
i = 0, j = 0; i < els.length; i++) {\n if (els[i].namespaceURI === ns)\n
result[j++] = els[i];\n }\n result.length = j;\n return
result;\n }\n };\n\n scope.GetElementsByInterface = GetElementsByInterface;
\n scope.SelectorsInterface = SelectorsInterface;\n\n})(window.ShadowDOMPolyfil
l);\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of t
his source code is goverened by a BSD-style\n// license that can be found in the
LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var NodeList = scope.
wrappers.NodeList;\n\n function forwardElement(node) {\n while (node && node
.nodeType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n r
eturn node;\n }\n\n function backwardsElement(node) {\n while (node && node
.nodeType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n
return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild
() {\n return forwardElement(this.firstChild);\n },\n\n get lastEleme
ntChild() {\n return backwardsElement(this.lastChild);\n },\n\n get c
hildElementCount() {\n var count = 0;\n for (var child = this.firstEle
mentChild;\n child;\n child = child.nextElementSibling) {\n
count++;\n }\n return count;\n },\n\n get children() {\n
var wrapperList = new NodeList();\n var i = 0;\n for (var child =
this.firstElementChild;\n child;\n child = child.nextElemen
tSibling) {\n wrapperList[i++] = child;\n }\n wrapperList.lengt
h = i;\n return wrapperList;\n },\n\n remove: function() {\n var
p = this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n
\n var ChildNodeInterface = {\n get nextElementSibling() {\n return for
wardElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n
return backwardsElement(this.previousSibling);\n }\n };\n\n scope.Child
NodeInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInt
erface;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Autho
rs. All rights reserved.\n// Use of this source code is goverened by a BSD-style
\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n 'us
e strict';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var Node =
scope.wrappers.Node;\n var enqueueMutation = scope.enqueueMutation;\n var mix
in = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n var Origi
nalCharacterData = window.CharacterData;\n\n function CharacterData(node) {\n
Node.call(this, node);\n }\n CharacterData.prototype = Object.create(Node.pr
ototype);\n mixin(CharacterData.prototype, {\n get textContent() {\n re
turn this.data;\n },\n set textContent(value) {\n this.data = value;\
n },\n get data() {\n return this.impl.data;\n },\n set data(va
lue) {\n var oldValue = this.impl.data;\n enqueueMutation(this, 'chara
cterData', {\n oldValue: oldValue\n });\n this.impl.data = valu
e;\n }\n });\n\n mixin(CharacterData.prototype, ChildNodeInterface);\n\n r
egisterWrapper(OriginalCharacterData, CharacterData,\n document
.createTextNode(''));\n\n scope.wrappers.CharacterData = CharacterData;\n})(win
dow.ShadowDOMPolyfill);\n","// Copyright 2014 The Polymer Authors. All rights re
served.\n// Use of this source code is goverened by a BSD-style\n// license that
can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n v
ar CharacterData = scope.wrappers.CharacterData;\n var enqueueMutation = scope.
enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.regi
sterWrapper;\n\n function toUInt32(x) {\n return x >>> 0;\n }\n\n var Orig
inalText = window.Text;\n\n function Text(node) {\n CharacterData.call(this,
node);\n }\n Text.prototype = Object.create(CharacterData.prototype);\n mixi
n(Text.prototype, {\n splitText: function(offset) {\n offset = toUInt32(
offset);\n var s = this.data;\n if (offset > s.length)\n throw
new Error('IndexSizeError');\n var head = s.slice(0, offset);\n var ta
il = s.slice(offset);\n this.data = head;\n var newTextNode = this.own
erDocument.createTextNode(tail);\n if (this.parentNode)\n this.paren
tNode.insertBefore(newTextNode, this.nextSibling);\n return newTextNode;\n
}\n });\n\n registerWrapper(OriginalText, Text, document.createTextNode('')
);\n\n scope.wrappers.Text = Text;\n})(window.ShadowDOMPolyfill);\n","// Copyri
ght 2013 The Polymer Authors. All rights reserved.\n// Use of this source code i
s goverened by a BSD-style\n// license that can be found in the LICENSE file.\n\
n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface = scope.ChildNo
deInterface;\n var GetElementsByInterface = scope.GetElementsByInterface;\n va
r Node = scope.wrappers.Node;\n var ParentNodeInterface = scope.ParentNodeInter
face;\n var SelectorsInterface = scope.SelectorsInterface;\n var addWrapNodeLi
stMethod = scope.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMu
tation;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerW
rapper = scope.registerWrapper;\n var wrappers = scope.wrappers;\n\n var Origi
nalElement = window.Element;\n\n var matchesNames = [\n 'matches', // needs
to come first.\n 'mozMatchesSelector',\n 'msMatchesSelector',\n 'webki
tMatchesSelector',\n ].filter(function(name) {\n return OriginalElement.prot
otype[name];\n });\n\n var matchesName = matchesNames[0];\n\n var originalMat
ches = OriginalElement.prototype[matchesName];\n\n function invalidateRendererB
asedOnAttribute(element, name) {\n // Only invalidate if parent node is a sha
dow host.\n var p = element.parentNode;\n if (!p || !p.shadowRoot)\n
return;\n\n var renderer = scope.getRendererForHost(p);\n if (renderer.dep
endsOnAttribute(name))\n renderer.invalidate();\n }\n\n function enqueAtt
ributeChange(element, name, oldValue) {\n // This is not fully spec compliant
. We should use localName (which might\n // have a different case than name)
and the namespace (which requires us\n // to get the Attr object).\n enque
ueMutation(element, 'attributes', {\n name: name,\n namespace: null,\n
oldValue: oldValue\n });\n }\n\n function Element(node) {\n Node.c
all(this, node);\n }\n Element.prototype = Object.create(Node.prototype);\n m
ixin(Element.prototype, {\n createShadowRoot: function() {\n var newShad
owRoot = new wrappers.ShadowRoot(this);\n this.impl.polymerShadowRoot_ = ne
wShadowRoot;\n\n var renderer = scope.getRendererForHost(this);\n rend
erer.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoot(
) {\n return this.impl.polymerShadowRoot_ || null;\n },\n\n setAttrib
ute: function(name, value) {\n var oldValue = this.impl.getAttribute(name);
\n this.impl.setAttribute(name, value);\n enqueAttributeChange(this, n
ame, oldValue);\n invalidateRendererBasedOnAttribute(this, name);\n },\n
\n removeAttribute: function(name) {\n var oldValue = this.impl.getAttri
bute(name);\n this.impl.removeAttribute(name);\n enqueAttributeChange(
this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name);\n
},\n\n matches: function(selector) {\n return originalMatches.call(th
is.impl, selector);\n }\n });\n\n matchesNames.forEach(function(name) {\n
if (name !== 'matches') {\n Element.prototype[name] = function(selector)
{\n return this.matches(selector);\n };\n }\n });\n\n if (Origi
nalElement.prototype.webkitCreateShadowRoot) {\n Element.prototype.webkitCrea
teShadowRoot =\n Element.prototype.createShadowRoot;\n }\n\n /**\n *
Useful for generating the accessor pair for a property that reflects an\n * at
tribute.\n */\n function setterDirtiesAttribute(prototype, propertyName, opt_
attrName) {\n var attrName = opt_attrName || propertyName;\n Object.define
Property(prototype, propertyName, {\n get: function() {\n return thi
s.impl[propertyName];\n },\n set: function(v) {\n this.impl[pro
pertyName] = v;\n invalidateRendererBasedOnAttribute(this, attrName);\n
},\n configurable: true,\n enumerable: true\n });\n }\n\n set
terDirtiesAttribute(Element.prototype, 'id');\n setterDirtiesAttribute(Element.
prototype, 'className', 'class');\n\n mixin(Element.prototype, ChildNodeInterfa
ce);\n mixin(Element.prototype, GetElementsByInterface);\n mixin(Element.proto
type, ParentNodeInterface);\n mixin(Element.prototype, SelectorsInterface);\n\n
registerWrapper(OriginalElement, Element,\n document.createEl
ementNS(null, 'x'));\n\n // TODO(arv): Export setterDirtiesAttribute and apply
it to more bindings\n // that reflect attributes.\n scope.matchesNames = match
esNames;\n scope.wrappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n",
"// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this sou
rce code is goverened by a BSD-style\n// license that can be found in the LICENS
E file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrappers
.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation = sco
pe.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scope.no
desWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var registerW
rapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNodeList
;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scop
e.wrappers;\n\n ///////////////////////////////////////////////////////////////
//////////////\n // innerHTML and outerHTML\n\n // http://www.whatwg.org/specs
/web-apps/current-work/multipage/the-end.html#escapingString\n var escapeAttrRe
gExp = /[&\\u00A0\"]/g;\n var escapeDataRegExp = /[&\\u00A0<>]/g;\n\n function
escapeReplace(c) {\n switch (c) {\n case '&':\n return '&';\
n case '<':\n return '<';\n case '>':\n return '>'
;\n case '\"':\n return '"'\n case '\\u00A0':\n ret
urn ' ';\n }\n }\n\n function escapeAttr(s) {\n return s.replace(es
capeAttrRegExp, escapeReplace);\n }\n\n function escapeData(s) {\n return s
.replace(escapeDataRegExp, escapeReplace);\n }\n\n function makeSet(arr) {\n
var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i]] =
true;\n }\n return set;\n }\n\n // http://www.whatwg.org/specs/web-apps
/current-work/#void-elements\n var voidElements = makeSet([\n 'area',\n '
base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img
',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'so
urce',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([\n
'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'nofra
mes',\n 'plaintext',\n 'noscript'\n ]);\n\n function getOuterHTML(node,
parentNode) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n
var tagName = node.tagName.toLowerCase();\n var s = '<' + tagName;\n
var attrs = node.attributes;\n for (var i = 0, attr; attr = attrs[
i]; i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\
"';\n }\n s += '>';\n if (voidElements[tagName])\n
return s;\n\n return s + getInnerHTML(node) + '</' + tagName + '>';\n\n
case Node.TEXT_NODE:\n var data = node.data;\n if (parentNode
&& plaintextParents[parentNode.localName])\n return data;\n ret
urn escapeData(data);\n\n case Node.COMMENT_NODE:\n return '<!--' +
node.data + '-->';\n\n default:\n console.error(node);\n thro
w new Error('not implemented');\n }\n }\n\n function getInnerHTML(node) {\n
if (node instanceof wrappers.HTMLTemplateElement)\n node = node.content
;\n\n var s = '';\n for (var child = node.firstChild; child; child = child
.nextSibling) {\n s += getOuterHTML(child, node);\n }\n return s;\n
}\n\n function setInnerHTML(node, value, opt_tagName) {\n var tagName = opt_
tagName || 'div';\n node.textContent = '';\n var tempElement = unwrap(node
.ownerDocument.createElement(tagName));\n tempElement.innerHTML = value;\n
var firstChild;\n while (firstChild = tempElement.firstChild) {\n node.
appendChild(wrap(firstChild));\n }\n }\n\n // IE11 does not have MSIE in th
e user agent string.\n var oldIe = /MSIE/.test(navigator.userAgent);\n\n var O
riginalHTMLElement = window.HTMLElement;\n var OriginalHTMLTemplateElement = wi
ndow.HTMLTemplateElement;\n\n function HTMLElement(node) {\n Element.call(th
is, node);\n }\n HTMLElement.prototype = Object.create(Element.prototype);\n
mixin(HTMLElement.prototype, {\n get innerHTML() {\n return getInnerHTML
(this);\n },\n set innerHTML(value) {\n // IE9 does not handle set in
nerHTML correctly on plaintextParents. It\n // creates element children. Fo
r example\n //\n // scriptElement.innerHTML = '<a>test</a>'\n /
/\n // Creates a single HTMLAnchorElement child.\n if (oldIe && plaint
extParents[this.localName]) {\n this.textContent = value;\n return
;\n }\n\n var removedNodes = snapshotNodeList(this.childNodes);\n\n
if (this.invalidateShadowRenderer()) {\n if (this instanceof wrappers.
HTMLTemplateElement)\n setInnerHTML(this.content, value);\n else
\n setInnerHTML(this, value, this.tagName);\n\n // If we have a no
n native template element we need to handle this\n // manually since settin
g impl.innerHTML would add the html as direct\n // children and not be move
d over to the content fragment.\n } else if (!OriginalHTMLTemplateElement &
&\n this instanceof wrappers.HTMLTemplateElement) {\n set
InnerHTML(this.content, value);\n } else {\n this.impl.innerHTML = v
alue;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n
enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,\n
removedNodes: removedNodes\n });\n\n nodesWereRemoved(removedNodes
);\n nodesWereAdded(addedNodes, this);\n },\n\n get outerHTML() {\n
return getOuterHTML(this, this.parentNode);\n },\n set outerHTML(value
) {\n var p = this.parentNode;\n if (p) {\n p.invalidateShadowR
enderer();\n var df = frag(p, value);\n p.replaceChild(df, this);\
n }\n },\n\n insertAdjacentHTML: function(position, text) {\n va
r contextElement, refNode;\n switch (String(position).toLowerCase()) {\n
case 'beforebegin':\n contextElement = this.parentNode;\n
refNode = this;\n break;\n case 'afterend':\n contextE
lement = this.parentNode;\n refNode = this.nextSibling;\n brea
k;\n case 'afterbegin':\n contextElement = this;\n refN
ode = this.firstChild;\n break;\n case 'beforeend':\n c
ontextElement = this;\n refNode = null;\n break;\n defa
ult:\n return;\n }\n\n var df = frag(contextElement, text);\n
contextElement.insertBefore(df, refNode);\n }\n });\n\n function frag
(contextElement, html) {\n // TODO(arv): This does not work with SVG and othe
r non HTML elements.\n var p = unwrap(contextElement.cloneNode(false));\n
p.innerHTML = html;\n var df = unwrap(document.createDocumentFragment());\n
var c;\n while (c = p.firstChild) {\n df.appendChild(c);\n }\n r
eturn wrap(df);\n }\n\n function getter(name) {\n return function() {\n
scope.renderAllPending();\n return this.impl[name];\n };\n }\n\n fun
ction getterRequiresRendering(name) {\n defineGetter(HTMLElement, name, gette
r(name));\n }\n\n [\n 'clientHeight',\n 'clientLeft',\n 'clientTop',\
n 'clientWidth',\n 'offsetHeight',\n 'offsetLeft',\n 'offsetTop',\n
'offsetWidth',\n 'scrollHeight',\n 'scrollWidth',\n ].forEach(getterRe
quiresRendering);\n\n function getterAndSetterRequiresRendering(name) {\n Ob
ject.defineProperty(HTMLElement.prototype, name, {\n get: getter(name),\n
set: function(v) {\n scope.renderAllPending();\n this.impl[nam
e] = v;\n },\n configurable: true,\n enumerable: true\n });\n
}\n\n [\n 'scrollLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequi
resRendering);\n\n function methodRequiresRendering(name) {\n Object.defineP
roperty(HTMLElement.prototype, name, {\n value: function() {\n scope
.renderAllPending();\n return this.impl[name].apply(this.impl, arguments)
;\n },\n configurable: true,\n enumerable: true\n });\n }\n\n
[\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n
].forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use
a subclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElem
ent,\n document.createElement('b'));\n\n scope.wrappers.HTMLEl
ement = HTMLElement;\n\n // TODO: Find a better way to share these two with Wra
pperShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = se
tInnerHTML\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Auth
ors. All rights reserved.\n// Use of this source code is goverened by a BSD-styl
e\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n 'u
se strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var mixin = sc
ope.mixin;\n var registerWrapper = scope.registerWrapper;\n var wrap = scope.w
rap;\n\n var OriginalHTMLCanvasElement = window.HTMLCanvasElement;\n\n functio
n HTMLCanvasElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCanva
sElement.prototype = Object.create(HTMLElement.prototype);\n\n mixin(HTMLCanvas
Element.prototype, {\n getContext: function() {\n var context = this.imp
l.getContext.apply(this.impl, arguments);\n return context && wrap(context)
;\n }\n });\n\n registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElemen
t,\n document.createElement('canvas'));\n\n scope.wrappers.HTM
LCanvasElement = HTMLCanvasElement;\n})(window.ShadowDOMPolyfill);\n","// Copyri
ght 2013 The Polymer Authors. All rights reserved.\n// Use of this source code i
s goverened by a BSD-style\n// license that can be found in the LICENSE file.\n\
n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLE
lement;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapp
er;\n\n var OriginalHTMLContentElement = window.HTMLContentElement;\n\n functi
on HTMLContentElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCon
tentElement.prototype = Object.create(HTMLElement.prototype);\n mixin(HTMLConte
ntElement.prototype, {\n get select() {\n return this.getAttribute('sele
ct');\n },\n set select(value) {\n this.setAttribute('select', value)
;\n },\n\n setAttribute: function(n, v) {\n HTMLElement.prototype.set
Attribute.call(this, n, v);\n if (String(n).toLowerCase() === 'select')\n
this.invalidateShadowRenderer(true);\n }\n\n // getDistributedNodes
is added in ShadowRenderer\n\n // TODO: attribute boolean resetStyleInheritan
ce;\n });\n\n if (OriginalHTMLContentElement)\n registerWrapper(OriginalHTM
LContentElement, HTMLContentElement);\n\n scope.wrappers.HTMLContentElement = H
TMLContentElement;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Poly
mer Authors. All rights reserved.\n// Use of this source code is goverened by a
BSD-style\n// license that can be found in the LICENSE file.\n\n(function(scope)
{\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var re
gisterWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var rewr
ap = scope.rewrap;\n\n var OriginalHTMLImageElement = window.HTMLImageElement;\
n\n function HTMLImageElement(node) {\n HTMLElement.call(this, node);\n }\n
HTMLImageElement.prototype = Object.create(HTMLElement.prototype);\n\n regist
erWrapper(OriginalHTMLImageElement, HTMLImageElement,\n documen
t.createElement('img'));\n\n function Image(width, height) {\n if (!(this in
stanceof Image)) {\n throw new TypeError(\n 'DOM object constructo
r cannot be called as a function.');\n }\n\n var node = unwrap(document.cr
eateElement('img'));\n HTMLElement.call(this, node);\n rewrap(node, this);
\n\n if (width !== undefined)\n node.width = width;\n if (height !==
undefined)\n node.height = height;\n }\n\n Image.prototype = HTMLImageEle
ment.prototype;\n\n scope.wrappers.HTMLImageElement = HTMLImageElement;\n scop
e.wrappers.Image = Image;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 T
he Polymer Authors. All rights reserved.\n// Use of this source code is goverene
d by a BSD-style\n// license that can be found in the LICENSE file.\n\n(function
(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n
var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n v
ar OriginalHTMLShadowElement = window.HTMLShadowElement;\n\n function HTMLShado
wElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLShadowElement.pr
ototype = Object.create(HTMLElement.prototype);\n mixin(HTMLShadowElement.proto
type, {\n // TODO: attribute boolean resetStyleInheritance;\n });\n\n if (O
riginalHTMLShadowElement)\n registerWrapper(OriginalHTMLShadowElement, HTMLSh
adowElement);\n\n scope.wrappers.HTMLShadowElement = HTMLShadowElement;\n})(win
dow.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rights re
served.\n// Use of this source code is goverened by a BSD-style\n// license that
can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n v
ar HTMLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var
registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wr
ap = scope.wrap;\n\n var contentTable = new WeakMap();\n var templateContentsO
wnerTable = new WeakMap();\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/
tip/spec/templates/index.html#dfn-template-contents-owner\n function getTemplat
eContentsOwner(doc) {\n if (!doc.defaultView)\n return doc;\n var d =
templateContentsOwnerTable.get(doc);\n if (!d) {\n // TODO(arv): This s
hould either be a Document or HTMLDocument depending\n // on doc.\n d
= doc.implementation.createHTMLDocument('');\n while (d.lastChild) {\n
d.removeChild(d.lastChild);\n }\n templateContentsOwnerTable.set(do
c, d);\n }\n return d;\n }\n\n function extractContent(templateElement)
{\n // templateElement is not a wrapper here.\n var doc = getTemplateConte
ntsOwner(templateElement.ownerDocument);\n var df = unwrap(doc.createDocument
Fragment());\n var child;\n while (child = templateElement.firstChild) {\n
df.appendChild(child);\n }\n return df;\n }\n\n var OriginalHTMLTe
mplateElement = window.HTMLTemplateElement;\n\n function HTMLTemplateElement(no
de) {\n HTMLElement.call(this, node);\n if (!OriginalHTMLTemplateElement)
{\n var content = extractContent(node);\n contentTable.set(this, wrap(
content));\n }\n }\n HTMLTemplateElement.prototype = Object.create(HTMLElem
ent.prototype);\n\n mixin(HTMLTemplateElement.prototype, {\n get content() {
\n if (OriginalHTMLTemplateElement)\n return wrap(this.impl.content)
;\n return contentTable.get(this);\n },\n\n // TODO(arv): cloneNode n
eeds to clone content.\n\n });\n\n if (OriginalHTMLTemplateElement)\n regis
terWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);\n\n scope.wrapper
s.HTMLTemplateElement = HTMLTemplateElement;\n})(window.ShadowDOMPolyfill);\n","
// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this sour
ce code is goverened by a BSD-style\n// license that can be found in the LICENSE
file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrapp
ers.HTMLElement;\n var registerWrapper = scope.registerWrapper;\n\n var Origin
alHTMLMediaElement = window.HTMLMediaElement;\n\n function HTMLMediaElement(nod
e) {\n HTMLElement.call(this, node);\n }\n HTMLMediaElement.prototype = Obj
ect.create(HTMLElement.prototype);\n\n registerWrapper(OriginalHTMLMediaElement
, HTMLMediaElement,\n document.createElement('audio'));\n\n sc
ope.wrappers.HTMLMediaElement = HTMLMediaElement;\n})(window.ShadowDOMPolyfill);
\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLMediaElement = s
cope.wrappers.HTMLMediaElement;\n var registerWrapper = scope.registerWrapper;\
n var unwrap = scope.unwrap;\n var rewrap = scope.rewrap;\n\n var OriginalHTM
LAudioElement = window.HTMLAudioElement;\n\n function HTMLAudioElement(node) {\
n HTMLMediaElement.call(this, node);\n }\n HTMLAudioElement.prototype = Obj
ect.create(HTMLMediaElement.prototype);\n\n registerWrapper(OriginalHTMLAudioEl
ement, HTMLAudioElement,\n document.createElement('audio'));\n\
n function Audio(src) {\n if (!(this instanceof Audio)) {\n throw new T
ypeError(\n 'DOM object constructor cannot be called as a function.');\
n }\n\n var node = unwrap(document.createElement('audio'));\n HTMLMedia
Element.call(this, node);\n rewrap(node, this);\n\n node.setAttribute('pre
load', 'auto');\n if (src !== undefined)\n node.setAttribute('src', src)
;\n }\n\n Audio.prototype = HTMLAudioElement.prototype;\n\n scope.wrappers.HT
MLAudioElement = HTMLAudioElement;\n scope.wrappers.Audio = Audio;\n})(window.S
hadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rights reserve
d.\n// Use of this source code is goverened by a BSD-style\n// license that can
be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HT
MLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var regis
terWrapper = scope.registerWrapper;\n var rewrap = scope.rewrap;\n var unwrap
= scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLOptionElement = w
indow.HTMLOptionElement;\n\n function trimText(s) {\n return s.replace(/\\s+
/g, ' ').trim();\n }\n\n function HTMLOptionElement(node) {\n HTMLElement.c
all(this, node);\n }\n HTMLOptionElement.prototype = Object.create(HTMLElement
.prototype);\n mixin(HTMLOptionElement.prototype, {\n get text() {\n re
turn trimText(this.textContent);\n },\n set text(value) {\n this.text
Content = trimText(String(value));\n },\n get form() {\n return wrap(
unwrap(this).form);\n }\n });\n\n registerWrapper(OriginalHTMLOptionElement
, HTMLOptionElement,\n document.createElement('option'));\n\n
function Option(text, value, defaultSelected, selected) {\n if (!(this instan
ceof Option)) {\n throw new TypeError(\n 'DOM object constructor c
annot be called as a function.');\n }\n\n var node = unwrap(document.creat
eElement('option'));\n HTMLElement.call(this, node);\n rewrap(node, this);
\n\n if (text !== undefined)\n node.text = text;\n if (value !== unde
fined)\n node.setAttribute('value', value);\n if (defaultSelected === tr
ue)\n node.setAttribute('selected', '');\n node.selected = selected ===
true;\n }\n\n Option.prototype = HTMLOptionElement.prototype;\n\n scope.wrapp
ers.HTMLOptionElement = HTMLOptionElement;\n scope.wrappers.Option = Option;\n}
)(window.ShadowDOMPolyfill);\n","// Copyright 2014 The Polymer Authors. All righ
ts reserved.\n// Use of this source code is goverened by a BSD-style\n// license
that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n
\n var HTMLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n
var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n v
ar wrap = scope.wrap;\n\n var OriginalHTMLSelectElement = window.HTMLSelectElem
ent;\n\n function HTMLSelectElement(node) {\n HTMLElement.call(this, node);\
n }\n HTMLSelectElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLSelectElement.prototype, {\n add: function(element, before) {\n
if (typeof before === 'object') // also includes null\n before = unwrap
(before);\n unwrap(this).add(unwrap(element), before);\n },\n\n remov
e: function(indexOrNode) {\n // Spec only allows index but implementations
allow index or node.\n // remove() is also allowed which is same as remove(
undefined)\n if (indexOrNode === undefined) {\n HTMLElement.prototyp
e.remove.call(this);\n return;\n }\n\n if (typeof indexOrNode =
== 'object')\n indexOrNode = unwrap(indexOrNode);\n\n unwrap(this).r
emove(indexOrNode);\n },\n\n get form() {\n return wrap(unwrap(this).
form);\n }\n });\n\n registerWrapper(OriginalHTMLSelectElement, HTMLSelectE
lement,\n document.createElement('select'));\n\n scope.wrapper
s.HTMLSelectElement = HTMLSelectElement;\n})(window.ShadowDOMPolyfill);\n","/*\n
* Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this sour
ce code is goverened by a BSD-style\n * license that can be found in the LICENSE
file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var
wrapHTMLCollection = scope.wrapHTMLCollection;\n\n var OriginalHTMLTableElemen
t = window.HTMLTableElement;\n\n function HTMLTableElement(node) {\n HTMLEle
ment.call(this, node);\n }\n HTMLTableElement.prototype = Object.create(HTMLEl
ement.prototype);\n mixin(HTMLTableElement.prototype, {\n get caption() {\n
return wrap(unwrap(this).caption);\n },\n createCaption: function() {
\n return wrap(unwrap(this).createCaption());\n },\n\n get tHead() {\
n return wrap(unwrap(this).tHead);\n },\n createTHead: function() {\n
return wrap(unwrap(this).createTHead());\n },\n\n createTFoot: funct
ion() {\n return wrap(unwrap(this).createTFoot());\n },\n get tFoot()
{\n return wrap(unwrap(this).tFoot);\n },\n\n get tBodies() {\n
return wrapHTMLCollection(unwrap(this).tBodies);\n },\n createTBody: func
tion() {\n return wrap(unwrap(this).createTBody());\n },\n\n get rows
() {\n return wrapHTMLCollection(unwrap(this).rows);\n },\n insertRow
: function(index) {\n return wrap(unwrap(this).insertRow(index));\n }\n
});\n\n registerWrapper(OriginalHTMLTableElement, HTMLTableElement,\n
document.createElement('table'));\n\n scope.wrappers.HTMLTableElement
= HTMLTableElement;\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyright 2014 The
Polymer Authors. All rights reserved.\n * Use of this source code is goverened
by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(funct
ion(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;
\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n
var wrapHTMLCollection = scope.wrapHTMLCollection;\n var unwrap = scope.unwrap;
\n var wrap = scope.wrap;\n\n var OriginalHTMLTableSectionElement = window.HTM
LTableSectionElement;\n\n function HTMLTableSectionElement(node) {\n HTMLEle
ment.call(this, node);\n }\n HTMLTableSectionElement.prototype = Object.create
(HTMLElement.prototype);\n mixin(HTMLTableSectionElement.prototype, {\n get
rows() {\n return wrapHTMLCollection(unwrap(this).rows);\n },\n inser
tRow: function(index) {\n return wrap(unwrap(this).insertRow(index));\n
}\n });\n\n registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionE
lement,\n document.createElement('thead'));\n\n scope.wrappers
.HTMLTableSectionElement = HTMLTableSectionElement;\n})(window.ShadowDOMPolyfill
);\n","/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use o
f this source code is goverened by a BSD-style\n * license that can be found in
the LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLEleme
nt = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrap
per = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollectio
n;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTML
TableRowElement = window.HTMLTableRowElement;\n\n function HTMLTableRowElement(
node) {\n HTMLElement.call(this, node);\n }\n HTMLTableRowElement.prototype
= Object.create(HTMLElement.prototype);\n mixin(HTMLTableRowElement.prototype,
{\n get cells() {\n return wrapHTMLCollection(unwrap(this).cells);\n
},\n\n insertCell: function(index) {\n return wrap(unwrap(this).insertC
ell(index));\n }\n });\n\n registerWrapper(OriginalHTMLTableRowElement, HTM
LTableRowElement,\n document.createElement('tr'));\n\n scope.w
rappers.HTMLTableRowElement = HTMLTableRowElement;\n})(window.ShadowDOMPolyfill)
;\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of thi
s source code is goverened by a BSD-style\n// license that can be found in the L
ICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLContentElement
= scope.wrappers.HTMLContentElement;\n var HTMLElement = scope.wrappers.HTMLEle
ment;\n var HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var HTMLTe
mplateElement = scope.wrappers.HTMLTemplateElement;\n var mixin = scope.mixin;\
n var registerWrapper = scope.registerWrapper;\n\n var OriginalHTMLUnknownElem
ent = window.HTMLUnknownElement;\n\n function HTMLUnknownElement(node) {\n s
witch (node.localName) {\n case 'content':\n return new HTMLContentE
lement(node);\n case 'shadow':\n return new HTMLShadowElement(node);
\n case 'template':\n return new HTMLTemplateElement(node);\n }\n
HTMLElement.call(this, node);\n }\n HTMLUnknownElement.prototype = Object.
create(HTMLElement.prototype);\n registerWrapper(OriginalHTMLUnknownElement, HT
MLUnknownElement);\n scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;\n}
)(window.ShadowDOMPolyfill);\n","// Copyright 2014 The Polymer Authors. All righ
ts reserved.\n// Use of this source code is goverened by a BSD-style\n// license
that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n
\n var registerObject = scope.registerObject;\n\n var SVG_NS = 'http://www.w3.
org/2000/svg';\n var svgTitleElement = document.createElementNS(SVG_NS, 'title'
);\n var SVGTitleElement = registerObject(svgTitleElement);\n var SVGElement =
Object.getPrototypeOf(SVGTitleElement.prototype).constructor;\n\n scope.wrappe
rs.SVGElement = SVGElement;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2014
The Polymer Authors. All rights reserved.\n// Use of this source code is govere
ned by a BSD-style\n// license that can be found in the LICENSE file.\n\n(functi
on(scope) {\n 'use strict';\n\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n\n var OriginalSVGUseElement = window.SVGUseElement;\n\n // IE uses SVGEle
ment as parent interface, SVG2 (Blink & Gecko) uses\n // SVGGraphicsElement. Us
e the <g> element to get the right prototype.\n\n var SVG_NS = 'http://www.w3.o
rg/2000/svg';\n var gWrapper = wrap(document.createElementNS(SVG_NS, 'g'));\n
var useElement = document.createElementNS(SVG_NS, 'use');\n var SVGGElement = g
Wrapper.constructor;\n var parentInterfacePrototype = Object.getPrototypeOf(SVG
GElement.prototype);\n var parentInterface = parentInterfacePrototype.construct
or;\n\n function SVGUseElement(impl) {\n parentInterface.call(this, impl);\n
}\n\n SVGUseElement.prototype = Object.create(parentInterfacePrototype);\n\n
// Firefox does not expose instanceRoot.\n if ('instanceRoot' in useElement) {
\n mixin(SVGUseElement.prototype, {\n get instanceRoot() {\n retu
rn wrap(unwrap(this).instanceRoot);\n },\n get animatedInstanceRoot()
{\n return wrap(unwrap(this).animatedInstanceRoot);\n },\n });\n
}\n\n registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement);\n\n
scope.wrappers.SVGUseElement = SVGUseElement;\n})(window.ShadowDOMPolyfill);\n",
"// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this sou
rce code is goverened by a BSD-style\n// license that can be found in the LICENS
E file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.wrap
pers.EventTarget;\n var mixin = scope.mixin;\n var registerWrapper = scope.reg
isterWrapper;\n var wrap = scope.wrap;\n\n var OriginalSVGElementInstance = wi
ndow.SVGElementInstance;\n if (!OriginalSVGElementInstance)\n return;\n\n f
unction SVGElementInstance(impl) {\n EventTarget.call(this, impl);\n }\n\n
SVGElementInstance.prototype = Object.create(EventTarget.prototype);\n mixin(SV
GElementInstance.prototype, {\n /** @type {SVGElement} */\n get correspond
ingElement() {\n return wrap(this.impl.correspondingElement);\n },\n\n
/** @type {SVGUseElement} */\n get correspondingUseElement() {\n retur
n wrap(this.impl.correspondingUseElement);\n },\n\n /** @type {SVGElementI
nstance} */\n get parentNode() {\n return wrap(this.impl.parentNode);\n
},\n\n /** @type {SVGElementInstanceList} */\n get childNodes() {\n
throw new Error('Not implemented');\n },\n\n /** @type {SVGElementInstan
ce} */\n get firstChild() {\n return wrap(this.impl.firstChild);\n },
\n\n /** @type {SVGElementInstance} */\n get lastChild() {\n return w
rap(this.impl.lastChild);\n },\n\n /** @type {SVGElementInstance} */\n
get previousSibling() {\n return wrap(this.impl.previousSibling);\n },\n
\n /** @type {SVGElementInstance} */\n get nextSibling() {\n return w
rap(this.impl.nextSibling);\n }\n });\n\n registerWrapper(OriginalSVGElemen
tInstance, SVGElementInstance);\n\n scope.wrappers.SVGElementInstance = SVGElem
entInstance;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Au
thors. All rights reserved.\n// Use of this source code is goverened by a BSD-st
yle\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n
'use strict';\n\n var mixin = scope.mixin;\n var registerWrapper = scope.regis
terWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIf
Needed;\n var wrap = scope.wrap;\n\n var OriginalCanvasRenderingContext2D = wi
ndow.CanvasRenderingContext2D;\n\n function CanvasRenderingContext2D(impl) {\n
this.impl = impl;\n }\n\n mixin(CanvasRenderingContext2D.prototype, {\n
get canvas() {\n return wrap(this.impl.canvas);\n },\n\n drawImage: f
unction() {\n arguments[0] = unwrapIfNeeded(arguments[0]);\n this.impl
.drawImage.apply(this.impl, arguments);\n },\n\n createPattern: function()
{\n arguments[0] = unwrap(arguments[0]);\n return this.impl.createPat
tern.apply(this.impl, arguments);\n }\n });\n\n registerWrapper(OriginalCan
vasRenderingContext2D, CanvasRenderingContext2D,\n document.cre
ateElement('canvas').getContext('2d'));\n\n scope.wrappers.CanvasRenderingConte
xt2D = CanvasRenderingContext2D;\n})(window.ShadowDOMPolyfill);\n","// Copyright
2013 The Polymer Authors. All rights reserved.\n// Use of this source code is g
overened by a BSD-style\n// license that can be found in the LICENSE file.\n\n(f
unction(scope) {\n 'use strict';\n\n var mixin = scope.mixin;\n var registerW
rapper = scope.registerWrapper;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n
var wrap = scope.wrap;\n\n var OriginalWebGLRenderingContext = window.WebGLRen
deringContext;\n\n // IE10 does not have WebGL.\n if (!OriginalWebGLRenderingC
ontext)\n return;\n\n function WebGLRenderingContext(impl) {\n this.impl
= impl;\n }\n\n mixin(WebGLRenderingContext.prototype, {\n get canvas() {\n
return wrap(this.impl.canvas);\n },\n\n texImage2D: function() {\n
arguments[5] = unwrapIfNeeded(arguments[5]);\n this.impl.texImage2D.app
ly(this.impl, arguments);\n },\n\n texSubImage2D: function() {\n argu
ments[6] = unwrapIfNeeded(arguments[6]);\n this.impl.texSubImage2D.apply(th
is.impl, arguments);\n }\n });\n\n // Blink/WebKit has broken DOM bindings.
Usually we would create an instance\n // of the object and pass it into regist
erWrapper as a \"blueprint\" but\n // creating WebGL contexts is expensive and
might fail so we use a dummy\n // object with dummy instance properties for the
se broken browsers.\n var instanceProperties = /WebKit/.test(navigator.userAgen
t) ?\n {drawingBufferHeight: null, drawingBufferWidth: null} : {};\n\n reg
isterWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext,\n instan
ceProperties);\n\n scope.wrappers.WebGLRenderingContext = WebGLRenderingContext
;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All
rights reserved.\n// Use of this source code is goverened by a BSD-style\n// lic
ense that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict
';\n\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwra
p;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n
var OriginalRange = window.Range;\n\n function Range(impl) {\n this.impl = i
mpl;\n }\n Range.prototype = {\n get startContainer() {\n return wrap(
this.impl.startContainer);\n },\n get endContainer() {\n return wrap(
this.impl.endContainer);\n },\n get commonAncestorContainer() {\n ret
urn wrap(this.impl.commonAncestorContainer);\n },\n setStart: function(ref
Node,offset) {\n this.impl.setStart(unwrapIfNeeded(refNode), offset);\n
},\n setEnd: function(refNode,offset) {\n this.impl.setEnd(unwrapIfNeede
d(refNode), offset);\n },\n setStartBefore: function(refNode) {\n thi
s.impl.setStartBefore(unwrapIfNeeded(refNode));\n },\n setStartAfter: func
tion(refNode) {\n this.impl.setStartAfter(unwrapIfNeeded(refNode));\n },
\n setEndBefore: function(refNode) {\n this.impl.setEndBefore(unwrapIfNe
eded(refNode));\n },\n setEndAfter: function(refNode) {\n this.impl.s
etEndAfter(unwrapIfNeeded(refNode));\n },\n selectNode: function(refNode)
{\n this.impl.selectNode(unwrapIfNeeded(refNode));\n },\n selectNodeC
ontents: function(refNode) {\n this.impl.selectNodeContents(unwrapIfNeeded(
refNode));\n },\n compareBoundaryPoints: function(how, sourceRange) {\n
return this.impl.compareBoundaryPoints(how, unwrap(sourceRange));\n },\n
extractContents: function() {\n return wrap(this.impl.extractContents());
\n },\n cloneContents: function() {\n return wrap(this.impl.cloneCont
ents());\n },\n insertNode: function(node) {\n this.impl.insertNode(u
nwrapIfNeeded(node));\n },\n surroundContents: function(newParent) {\n
this.impl.surroundContents(unwrapIfNeeded(newParent));\n },\n cloneRange
: function() {\n return wrap(this.impl.cloneRange());\n },\n isPointI
nRange: function(node, offset) {\n return this.impl.isPointInRange(unwrapIf
Needed(node), offset);\n },\n comparePoint: function(node, offset) {\n
return this.impl.comparePoint(unwrapIfNeeded(node), offset);\n },\n inte
rsectsNode: function(node) {\n return this.impl.intersectsNode(unwrapIfNeed
ed(node));\n },\n toString: function() {\n return this.impl.toString(
);\n }\n };\n\n // IE9 does not have createContextualFragment.\n if (Origi
nalRange.prototype.createContextualFragment) {\n Range.prototype.createContex
tualFragment = function(html) {\n return wrap(this.impl.createContextualFra
gment(html));\n };\n }\n\n registerWrapper(window.Range, Range, document.cr
eateRange());\n\n scope.wrappers.Range = Range;\n\n})(window.ShadowDOMPolyfill)
;\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of thi
s source code is goverened by a BSD-style\n// license that can be found in the L
ICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterf
ace = scope.GetElementsByInterface;\n var ParentNodeInterface = scope.ParentNod
eInterface;\n var SelectorsInterface = scope.SelectorsInterface;\n var mixin =
scope.mixin;\n var registerObject = scope.registerObject;\n\n var DocumentFra
gment = registerObject(document.createDocumentFragment());\n mixin(DocumentFrag
ment.prototype, ParentNodeInterface);\n mixin(DocumentFragment.prototype, Selec
torsInterface);\n mixin(DocumentFragment.prototype, GetElementsByInterface);\n\
n var Comment = registerObject(document.createComment(''));\n\n scope.wrappers
.Comment = Comment;\n scope.wrappers.DocumentFragment = DocumentFragment;\n\n})
(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All right
s reserved.\n// Use of this source code is goverened by a BSD-style\n// license
that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\
n var DocumentFragment = scope.wrappers.DocumentFragment;\n var TreeScope = sc
ope.TreeScope;\n var elementFromPoint = scope.elementFromPoint;\n var getInner
HTML = scope.getInnerHTML;\n var getTreeScope = scope.getTreeScope;\n var mixi
n = scope.mixin;\n var rewrap = scope.rewrap;\n var setInnerHTML = scope.setIn
nerHTML;\n var unwrap = scope.unwrap;\n\n var shadowHostTable = new WeakMap();
\n var nextOlderShadowTreeTable = new WeakMap();\n\n var spaceCharRe = /[ \\t\
\n\\r\\f]/;\n\n function ShadowRoot(hostWrapper) {\n var node = unwrap(hostW
rapper.impl.ownerDocument.createDocumentFragment());\n DocumentFragment.call(
this, node);\n\n // createDocumentFragment associates the node with a wrapper
\n // DocumentFragment instance. Override that.\n rewrap(node, this);\n\n
this.treeScope_ = new TreeScope(this, getTreeScope(hostWrapper));\n\n var
oldShadowRoot = hostWrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this,
oldShadowRoot);\n\n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoo
t.prototype = Object.create(DocumentFragment.prototype);\n mixin(ShadowRoot.pro
totype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n
set innerHTML(value) {\n setInnerHTML(this, value);\n this.invalidateS
hadowRenderer();\n },\n\n get olderShadowRoot() {\n return nextOlderS
hadowTreeTable.get(this) || null;\n },\n\n get host() {\n return shad
owHostTable.get(this) || null;\n },\n\n invalidateShadowRenderer: function
() {\n return shadowHostTable.get(this).invalidateShadowRenderer();\n },
\n\n elementFromPoint: function(x, y) {\n return elementFromPoint(this,
this.ownerDocument, x, y);\n },\n\n getElementById: function(id) {\n
if (spaceCharRe.test(id))\n return null;\n return this.querySelector
('[id=\"' + id + '\"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRo
ot;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors.
All rights reserved.\n// Use of this source code is governed by a BSD-style\n//
license that can be found in the LICENSE file.\n\n(function(scope) {\n 'use str
ict';\n\n var Element = scope.wrappers.Element;\n var HTMLContentElement = sco
pe.wrappers.HTMLContentElement;\n var HTMLShadowElement = scope.wrappers.HTMLSh
adowElement;\n var Node = scope.wrappers.Node;\n var ShadowRoot = scope.wrappe
rs.ShadowRoot;\n var assert = scope.assert;\n var getTreeScope = scope.getTree
Scope;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var unwrap = s
cope.unwrap;\n var wrap = scope.wrap;\n\n /**\n * Updates the fields of a wr
apper to a snapshot of the logical DOM as needed.\n * Up means parentNode\n
* Sideways means previous and next sibling.\n * @param {!Node} wrapper\n */\
n function updateWrapperUpAndSideways(wrapper) {\n wrapper.previousSibling_
= wrapper.previousSibling;\n wrapper.nextSibling_ = wrapper.nextSibling;\n
wrapper.parentNode_ = wrapper.parentNode;\n }\n\n /**\n * Updates the field
s of a wrapper to a snapshot of the logical DOM as needed.\n * Down means firs
t and last child\n * @param {!Node} wrapper\n */\n function updateWrapperDo
wn(wrapper) {\n wrapper.firstChild_ = wrapper.firstChild;\n wrapper.lastCh
ild_ = wrapper.lastChild;\n }\n\n function updateAllChildNodes(parentNodeWrapp
er) {\n assert(parentNodeWrapper instanceof Node);\n for (var childWrapper
= parentNodeWrapper.firstChild;\n childWrapper;\n childWrapper
= childWrapper.nextSibling) {\n updateWrapperUpAndSideways(childWrapper);\n
}\n updateWrapperDown(parentNodeWrapper);\n }\n\n function insertBefore
(parentNodeWrapper, newChildWrapper, refChildWrapper) {\n var parentNode = un
wrap(parentNodeWrapper);\n var newChild = unwrap(newChildWrapper);\n var r
efChild = refChildWrapper ? unwrap(refChildWrapper) : null;\n\n remove(newChi
ldWrapper);\n updateWrapperUpAndSideways(newChildWrapper);\n\n if (!refChi
ldWrapper) {\n parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild;\
n if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild)\n
parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;\n\n var las
tChildWrapper = wrap(parentNode.lastChild);\n if (lastChildWrapper)\n
lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;\n } else {\n
if (parentNodeWrapper.firstChild === refChildWrapper)\n parentNodeWr
apper.firstChild_ = refChildWrapper;\n\n refChildWrapper.previousSibling_ =
refChildWrapper.previousSibling;\n }\n\n parentNode.insertBefore(newChild
, refChild);\n }\n\n function remove(nodeWrapper) {\n var node = unwrap(nod
eWrapper)\n var parentNode = node.parentNode;\n if (!parentNode)\n re
turn;\n\n var parentNodeWrapper = wrap(parentNode);\n updateWrapperUpAndSi
deways(nodeWrapper);\n\n if (nodeWrapper.previousSibling)\n nodeWrapper.
previousSibling.nextSibling_ = nodeWrapper;\n if (nodeWrapper.nextSibling)\n
nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;\n\n if (parentNo
deWrapper.lastChild === nodeWrapper)\n parentNodeWrapper.lastChild_ = nodeW
rapper;\n if (parentNodeWrapper.firstChild === nodeWrapper)\n parentNode
Wrapper.firstChild_ = nodeWrapper;\n\n parentNode.removeChild(node);\n }\n\n
var distributedChildNodesTable = new WeakMap();\n var eventParentsTable = new
WeakMap();\n var insertionParentTable = new WeakMap();\n var rendererForHostT
able = new WeakMap();\n\n function distributeChildToInsertionPoint(child, inser
tionPoint) {\n getDistributedChildNodes(insertionPoint).push(child);\n ass
ignToInsertionPoint(child, insertionPoint);\n\n var eventParents = eventParen
tsTable.get(child);\n if (!eventParents)\n eventParentsTable.set(child,
eventParents = []);\n eventParents.push(insertionPoint);\n }\n\n function r
esetDistributedChildNodes(insertionPoint) {\n distributedChildNodesTable.set(
insertionPoint, []);\n }\n\n function getDistributedChildNodes(insertionPoint)
{\n var rv = distributedChildNodesTable.get(insertionPoint);\n if (!rv)\n
distributedChildNodesTable.set(insertionPoint, rv = []);\n return rv;\n
}\n\n function getChildNodesSnapshot(node) {\n var result = [], i = 0;\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n r
esult[i++] = child;\n }\n return result;\n }\n\n /**\n * Visits all no
des in the tree that fulfils the |predicate|. If the |visitor|\n * function re
turns |false| the traversal is aborted.\n * @param {!Node} tree\n * @param {
function(!Node) : boolean} predicate\n * @param {function(!Node) : *} visitor\
n */\n function visit(tree, predicate, visitor) {\n // This operates on lo
gical DOM.\n for (var node = tree.firstChild; node; node = node.nextSibling)
{\n if (predicate(node)) {\n if (visitor(node) === false)\n
return;\n } else {\n visit(node, predicate, visitor);\n }\n
}\n }\n\n // Matching Insertion Points\n // http://dvcs.w3.org/hg/webcompone
nts/raw-file/tip/spec/shadow/index.html#matching-insertion-points\n\n // TODO(a
rv): Verify this... I don't remember why I picked this regexp.\n var selectorMa
tchRegExp = /^[*.:#[a-zA-Z_|]/;\n\n var allowedPseudoRegExp = new RegExp('^:('
+ [\n 'link',\n 'visited',\n 'target',\n 'enabled',\n 'disabled',
\n 'checked',\n 'indeterminate',\n 'nth-child',\n 'nth-last-child',\
n 'nth-of-type',\n 'nth-last-of-type',\n 'first-child',\n 'last-chil
d',\n 'first-of-type',\n 'last-of-type',\n 'only-of-type',\n ].join('|
') + ')');\n\n\n /**\n * @param {Element} node\n * @oaram {Element} point T
he insertion point element.\n * @return {boolean} Whether the node matches the
insertion point.\n */\n function matchesCriteria(node, point) {\n var sel
ect = point.getAttribute('select');\n if (!select)\n return true;\n\n
// Here we know the select attribute is a non empty string.\n select = selec
t.trim();\n if (!select)\n return true;\n\n if (!(node instanceof Ele
ment))\n return false;\n\n // The native matches function in IE9 does no
t correctly work with elements\n // that are not in the document.\n // TOD
O(arv): Implement matching in JS.\n // https://github.com/Polymer/ShadowDOM/i
ssues/361\n if (select === '*' || select === node.localName)\n return tr
ue;\n\n // TODO(arv): This does not seem right. Need to check for a simple se
lector.\n if (!selectorMatchRegExp.test(select))\n return false;\n\n
// TODO(arv): This no longer matches the spec.\n if (select[0] === ':' && !al
lowedPseudoRegExp.test(select))\n return false;\n\n try {\n return
node.matches(select);\n } catch (ex) {\n // Invalid selector.\n ret
urn false;\n }\n }\n\n var request = oneOf(window, [\n 'requestAnimation
Frame',\n 'mozRequestAnimationFrame',\n 'webkitRequestAnimationFrame',\n
'setTimeout'\n ]);\n\n var pendingDirtyRenderers = [];\n var renderTimer;\n
\n function renderAllPending() {\n // TODO(arv): Order these in document ord
er. That way we do not have to\n // render something twice.\n for (var i =
0; i < pendingDirtyRenderers.length; i++) {\n var renderer = pendingDirtyR
enderers[i];\n var parentRenderer = renderer.parentRenderer;\n if (par
entRenderer && parentRenderer.dirty)\n continue;\n renderer.render()
;\n }\n\n pendingDirtyRenderers = [];\n }\n\n function handleRequestAnim
ationFrame() {\n renderTimer = null;\n renderAllPending();\n }\n\n /**\n
* Returns existing shadow renderer for a host or creates it if it is needed.\
n * @params {!Element} host\n * @return {!ShadowRenderer}\n */\n function
getRendererForHost(host) {\n var renderer = rendererForHostTable.get(host);\
n if (!renderer) {\n renderer = new ShadowRenderer(host);\n rendere
rForHostTable.set(host, renderer);\n }\n return renderer;\n }\n\n functi
on getShadowRootAncestor(node) {\n var root = getTreeScope(node).root;\n i
f (root instanceof ShadowRoot)\n return root;\n return null;\n }\n\n f
unction getRendererForShadowRoot(shadowRoot) {\n return getRendererForHost(sh
adowRoot.host);\n }\n\n var spliceDiff = new ArraySplice();\n spliceDiff.equa
ls = function(renderNode, rawNode) {\n return unwrap(renderNode.node) === raw
Node;\n };\n\n /**\n * RenderNode is used as an in memory \"render tree\". W
hen we render the\n * composed tree we create a tree of RenderNodes, then we d
iff this against\n * the real DOM tree and make minimal changes as needed.\n
*/\n function RenderNode(node) {\n this.skip = false;\n this.node = node
;\n this.childNodes = [];\n }\n\n RenderNode.prototype = {\n append: fun
ction(node) {\n var rv = new RenderNode(node);\n this.childNodes.push(
rv);\n return rv;\n },\n\n sync: function(opt_added) {\n if (thi
s.skip)\n return;\n\n var nodeWrapper = this.node;\n // plain a
rray of RenderNodes\n var newChildren = this.childNodes;\n // plain ar
ray of real nodes.\n var oldChildren = getChildNodesSnapshot(unwrap(nodeWra
pper));\n var added = opt_added || new WeakMap();\n\n var splices = sp
liceDiff.calculateSplices(newChildren, oldChildren);\n\n var newIndex = 0,
oldIndex = 0;\n var lastIndex = 0;\n for (var i = 0; i < splices.lengt
h; i++) {\n var splice = splices[i];\n for (; lastIndex < splice.i
ndex; lastIndex++) {\n oldIndex++;\n newChildren[newIndex++].s
ync(added);\n }\n\n var removedCount = splice.removed.length;\n
for (var j = 0; j < removedCount; j++) {\n var wrapper = wrap(oldC
hildren[oldIndex++]);\n if (!added.get(wrapper))\n remove(wr
apper);\n }\n\n var addedCount = splice.addedCount;\n var r
efNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]);\n for (var
j = 0; j < addedCount; j++) {\n var newChildRenderNode = newChildren[n
ewIndex++];\n var newChildWrapper = newChildRenderNode.node;\n
insertBefore(nodeWrapper, newChildWrapper, refNode);\n\n // Keep track
of added so that we do not remove the node after it\n // has been adde
d.\n added.set(newChildWrapper, true);\n\n newChildRenderNode.
sync(added);\n }\n\n lastIndex += addedCount;\n }\n\n fo
r (var i = lastIndex; i < newChildren.length; i++) {\n newChildren[i].syn
c(added);\n }\n }\n };\n\n function ShadowRenderer(host) {\n this.h
ost = host;\n this.dirty = false;\n this.invalidateAttributes();\n this
.associateNode(host);\n }\n\n ShadowRenderer.prototype = {\n\n // http://dv
cs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#rendering-shadow-
trees\n render: function(opt_renderNode) {\n if (!this.dirty)\n r
eturn;\n\n this.invalidateAttributes();\n this.treeComposition();\n\n
var host = this.host;\n var shadowRoot = host.shadowRoot;\n\n thi
s.associateNode(host);\n var topMostRenderer = !renderNode;\n var rend
erNode = opt_renderNode || new RenderNode(host);\n\n for (var node = shadow
Root.firstChild; node; node = node.nextSibling) {\n this.renderNode(shado
wRoot, renderNode, node, false);\n }\n\n if (topMostRenderer)\n
renderNode.sync();\n\n this.dirty = false;\n },\n\n get parentRender
er() {\n return getTreeScope(this.host).renderer;\n },\n\n invalidate
: function() {\n if (!this.dirty) {\n this.dirty = true;\n pe
ndingDirtyRenderers.push(this);\n if (renderTimer)\n return;\n
renderTimer = window[request](handleRequestAnimationFrame, 0);\n }\n
},\n\n renderNode: function(shadowRoot, renderNode, node, isNested) {\n
if (isShadowHost(node)) {\n renderNode = renderNode.append(node);\n
var renderer = getRendererForHost(node);\n renderer.dirty = true; /
/ Need to rerender due to reprojection.\n renderer.render(renderNode);\n
} else if (isInsertionPoint(node)) {\n this.renderInsertionPoint(sha
dowRoot, renderNode, node, isNested);\n } else if (isShadowInsertionPoint(n
ode)) {\n this.renderShadowInsertionPoint(shadowRoot, renderNode, node);\
n } else {\n this.renderAsAnyDomTree(shadowRoot, renderNode, node, i
sNested);\n }\n },\n\n renderAsAnyDomTree: function(shadowRoot, rende
rNode, node, isNested) {\n renderNode = renderNode.append(node);\n\n i
f (isShadowHost(node)) {\n var renderer = getRendererForHost(node);\n
renderNode.skip = !renderer.dirty;\n renderer.render(renderNode);\n
} else {\n for (var child = node.firstChild; child; child = child.nex
tSibling) {\n this.renderNode(shadowRoot, renderNode, child, isNested);
\n }\n }\n },\n\n renderInsertionPoint: function(shadowRoot, r
enderNode, insertionPoint,\n isNested) {\n
var distributedChildNodes = getDistributedChildNodes(insertionPoint);\n i
f (distributedChildNodes.length) {\n this.associateNode(insertionPoint);\
n\n for (var i = 0; i < distributedChildNodes.length; i++) {\n v
ar child = distributedChildNodes[i];\n if (isInsertionPoint(child) && i
sNested)\n this.renderInsertionPoint(shadowRoot, renderNode, child, i
sNested);\n else\n this.renderAsAnyDomTree(shadowRoot, rende
rNode, child, isNested);\n }\n } else {\n this.renderFallback
Content(shadowRoot, renderNode, insertionPoint);\n }\n this.associateN
ode(insertionPoint.parentNode);\n },\n\n renderShadowInsertionPoint: funct
ion(shadowRoot, renderNode,\n shadowInse
rtionPoint) {\n var nextOlderTree = shadowRoot.olderShadowRoot;\n if (
nextOlderTree) {\n assignToInsertionPoint(nextOlderTree, shadowInsertionP
oint);\n this.associateNode(shadowInsertionPoint.parentNode);\n fo
r (var node = nextOlderTree.firstChild;\n node;\n node =
node.nextSibling) {\n this.renderNode(nextOlderTree, renderNode, node,
true);\n }\n } else {\n this.renderFallbackContent(shadowRoo
t, renderNode,\n shadowInsertionPoint);\n
}\n },\n\n renderFallbackContent: function(shadowRoot, renderNode, fallba
ckHost) {\n this.associateNode(fallbackHost);\n this.associateNode(fal
lbackHost.parentNode);\n for (var node = fallbackHost.firstChild; node; nod
e = node.nextSibling) {\n this.renderAsAnyDomTree(shadowRoot, renderNode,
node, false);\n }\n },\n\n /**\n * Invalidates the attributes us
ed to keep track of which attributes may\n * cause the renderer to be invali
dated.\n */\n invalidateAttributes: function() {\n this.attributes =
Object.create(null);\n },\n\n /**\n * Parses the selector and makes t
his renderer dependent on the attribute\n * being used in the selector.\n
* @param {string} selector\n */\n updateDependentAttributes: function(s
elector) {\n if (!selector)\n return;\n\n var attributes = this
.attributes;\n\n // .class\n if (/\\.\\w+/.test(selector))\n at
tributes['class'] = true;\n\n // #id\n if (/#\\w+/.test(selector))\n
attributes['id'] = true;\n\n selector.replace(/\\[\\s*([^\\s=\\|~\\]]
+)/g, function(_, name) {\n attributes[name] = true;\n });\n\n
// Pseudo selectors have been removed from the spec.\n },\n\n dependsOnAtt
ribute: function(name) {\n return this.attributes[name];\n },\n\n //
http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-dist
ribution-algorithm\n distribute: function(tree, pool) {\n var self = thi
s;\n\n visit(tree, isActiveInsertionPoint,\n function(insertionPoi
nt) {\n resetDistributedChildNodes(insertionPoint);\n self
.updateDependentAttributes(\n insertionPoint.getAttribute('select
'));\n\n for (var i = 0; i < pool.length; i++) { // 1.2\n
var node = pool[i]; // 1.2.1\n if (node === undefined) // remo
ved\n continue;\n if (matchesCriteria(node, insertio
nPoint)) { // 1.2.2\n distributeChildToInsertionPoint(node, inse
rtionPoint); // 1.2.2.1\n pool[i] = undefined; // 1.2.2.2\n
}\n }\n });\n },\n\n // http://dvcs.w3.org/h
g/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-tree-composition\n tr
eeComposition: function () {\n var shadowHost = this.host;\n var tree
= shadowHost.shadowRoot; // 1.\n var pool = []; // 2.\n\n for (var c
hild = shadowHost.firstChild;\n child;\n child = child.nextS
ibling) { // 3.\n if (isInsertionPoint(child)) { // 3.2.\n var
reprojected = getDistributedChildNodes(child); // 3.2.1.\n // if repr
ojected is undef... reset it?\n if (!reprojected || !reprojected.length
) // 3.2.2.\n reprojected = getChildNodesSnapshot(child);\n
pool.push.apply(pool, reprojected); // 3.2.3.\n } else {\n poo
l.push(child); // 3.3.\n }\n }\n\n var shadowInsertionPoint, po
int;\n while (tree) { // 4.\n // 4.1.\n shadowInsertionPoint
= undefined; // Reset every iteration.\n visit(tree, isActiveShadowInse
rtionPoint, function(point) {\n shadowInsertionPoint = point;\n
return false;\n });\n point = shadowInsertionPoint;\n\n t
his.distribute(tree, pool); // 4.2.\n if (point) { // 4.3.\n v
ar nextOlderTree = tree.olderShadowRoot; // 4.3.1.\n if (!nextOlderTre
e) {\n break; // 4.3.1.1.\n } else {\n tree = ne
xtOlderTree; // 4.3.2.2.\n assignToInsertionPoint(tree, point); //
4.3.2.2.\n continue; // 4.3.2.3.\n }\n } else {\n
break; // 4.4.\n }\n }\n },\n\n associateNode: functio
n(node) {\n node.impl.polymerShadowRenderer_ = this;\n }\n };\n\n func
tion isInsertionPoint(node) {\n // Should this include <shadow>?\n return
node instanceof HTMLContentElement;\n }\n\n function isActiveInsertionPoint(no
de) {\n // <content> inside another <content> or <shadow> is considered inact
ive.\n return node instanceof HTMLContentElement;\n }\n\n function isShadow
InsertionPoint(node) {\n return node instanceof HTMLShadowElement;\n }\n\n
function isActiveShadowInsertionPoint(node) {\n // <shadow> inside another <c
ontent> or <shadow> is considered inactive.\n return node instanceof HTMLShad
owElement;\n }\n\n function isShadowHost(shadowHost) {\n return shadowHost.
shadowRoot;\n }\n\n function getShadowTrees(host) {\n var trees = [];\n\n
for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {\n t
rees.push(tree);\n }\n return trees;\n }\n\n function assignToInsertionP
oint(tree, point) {\n insertionParentTable.set(tree, point);\n }\n\n // htt
p://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#rendering-s
hadow-trees\n function render(host) {\n new ShadowRenderer(host).render();\n
};\n\n // Need to rerender shadow host when:\n //\n // - a direct child to
the ShadowRoot is added or removed\n // - a direct child to the host is added o
r removed\n // - a new shadow root is created\n // - a direct child to a conte
nt/shadow element is added or removed\n // - a sibling to a content/shadow elem
ent is added or removed\n // - content[select] is changed\n // - an attribute
in a direct child to a host is modified\n\n /**\n * This gets called when a n
ode was added or removed to it.\n */\n Node.prototype.invalidateShadowRendere
r = function(force) {\n var renderer = this.impl.polymerShadowRenderer_;\n
if (renderer) {\n renderer.invalidate();\n return true;\n }\n\n
return false;\n };\n\n HTMLContentElement.prototype.getDistributedNodes = fun
ction() {\n // TODO(arv): We should only rerender the dirty ancestor renderer
s (from\n // the root and down).\n renderAllPending();\n return getDist
ributedChildNodes(this);\n };\n\n HTMLShadowElement.prototype.nodeIsInserted_
=\n HTMLContentElement.prototype.nodeIsInserted_ = function() {\n // Invalid
ate old renderer if any.\n this.invalidateShadowRenderer();\n\n var shadow
Root = getShadowRootAncestor(this);\n var renderer;\n if (shadowRoot)\n
renderer = getRendererForShadowRoot(shadowRoot);\n this.impl.polymerShadow
Renderer_ = renderer;\n if (renderer)\n renderer.invalidate();\n };\n\n
scope.eventParentsTable = eventParentsTable;\n scope.getRendererForHost = get
RendererForHost;\n scope.getShadowTrees = getShadowTrees;\n scope.insertionPar
entTable = insertionParentTable;\n scope.renderAllPending = renderAllPending;\n
\n // Exposed for testing\n scope.visual = {\n insertBefore: insertBefore,\
n remove: remove,\n };\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 201
3 The Polymer Authors. All rights reserved.\n// Use of this source code is gover
ened by a BSD-style\n// license that can be found in the LICENSE file.\n\n(funct
ion(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;
\n var assert = scope.assert;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n\n var elementsWithFormProperty = [\n 'HTMLButtonElement',\n 'HTMLFie
ldSetElement',\n 'HTMLInputElement',\n 'HTMLKeygenElement',\n 'HTMLLabe
lElement',\n 'HTMLLegendElement',\n 'HTMLObjectElement',\n // HTMLOptio
nElement is handled in HTMLOptionElement.js\n 'HTMLOutputElement',\n // HT
MLSelectElement is handled in HTMLSelectElement.js\n 'HTMLTextAreaElement',\n
];\n\n function createWrapperConstructor(name) {\n if (!window[name])\n
return;\n\n // Ensure we are not overriding an already existing constructo
r.\n assert(!scope.wrappers[name]);\n\n var GeneratedWrapper = function(no
de) {\n // At this point all of them extend HTMLElement.\n HTMLElement
.call(this, node);\n }\n GeneratedWrapper.prototype = Object.create(HTMLEl
ement.prototype);\n mixin(GeneratedWrapper.prototype, {\n get form() {\n
return wrap(unwrap(this).form);\n },\n });\n\n registerWrappe
r(window[name], GeneratedWrapper,\n document.createElement(name.slice(4,
-7)));\n scope.wrappers[name] = GeneratedWrapper;\n }\n\n elementsWithFormP
roperty.forEach(createWrapperConstructor);\n\n})(window.ShadowDOMPolyfill);\n","
// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this sour
ce code is goverened by a BSD-style\n// license that can be found in the LICENSE
file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = scope.r
egisterWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwr
apIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalSelection = window.Select
ion;\n\n function Selection(impl) {\n this.impl = impl;\n }\n Selection.pr
ototype = {\n get anchorNode() {\n return wrap(this.impl.anchorNode);\n
},\n get focusNode() {\n return wrap(this.impl.focusNode);\n },\n
addRange: function(range) {\n this.impl.addRange(unwrap(range));\n },
\n collapse: function(node, index) {\n this.impl.collapse(unwrapIfNeeded
(node), index);\n },\n containsNode: function(node, allowPartial) {\n
return this.impl.containsNode(unwrapIfNeeded(node), allowPartial);\n },\n
extend: function(node, offset) {\n this.impl.extend(unwrapIfNeeded(node),
offset);\n },\n getRangeAt: function(index) {\n return wrap(this.impl
.getRangeAt(index));\n },\n removeRange: function(range) {\n this.imp
l.removeRange(unwrap(range));\n },\n selectAllChildren: function(node) {\n
this.impl.selectAllChildren(unwrapIfNeeded(node));\n },\n toString:
function() {\n return this.impl.toString();\n }\n };\n\n // WebKit ext
ensions. Not implemented.\n // readonly attribute Node baseNode;\n // readonly
attribute long baseOffset;\n // readonly attribute Node extentNode;\n // read
only attribute long extentOffset;\n // [RaisesException] void setBaseAndExtent(
[Default=Undefined] optional Node baseNode,\n // [Default
=Undefined] optional long baseOffset,\n // [Default=Undef
ined] optional Node extentNode,\n // [Default=Undefined]
optional long extentOffset);\n // [RaisesException, ImplementedAs=collapse] voi
d setPosition([Default=Undefined] optional Node node,\n // [De
fault=Undefined] optional long offset);\n\n registerWrapper(window.Selection, S
election, window.getSelection());\n\n scope.wrappers.Selection = Selection;\n\n
})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rig
hts reserved.\n// Use of this source code is goverened by a BSD-style\n// licens
e that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\
n\n var GetElementsByInterface = scope.GetElementsByInterface;\n var Node = sc
ope.wrappers.Node;\n var ParentNodeInterface = scope.ParentNodeInterface;\n va
r Selection = scope.wrappers.Selection;\n var SelectorsInterface = scope.Select
orsInterface;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n var TreeScope =
scope.TreeScope;\n var cloneNode = scope.cloneNode;\n var defineWrapGetter = s
cope.defineWrapGetter;\n var elementFromPoint = scope.elementFromPoint;\n var
forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var matchesNames = s
cope.matchesNames;\n var mixin = scope.mixin;\n var registerWrapper = scope.re
gisterWrapper;\n var renderAllPending = scope.renderAllPending;\n var rewrap =
scope.rewrap;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wr
apEventTargetMethods = scope.wrapEventTargetMethods;\n var wrapNodeList = scope
.wrapNodeList;\n\n var implementationTable = new WeakMap();\n\n function Docum
ent(node) {\n Node.call(this, node);\n this.treeScope_ = new TreeScope(thi
s, null);\n }\n Document.prototype = Object.create(Node.prototype);\n\n defin
eWrapGetter(Document, 'documentElement');\n\n // Conceptually both body and hea
d can be in a shadow but suporting that seems\n // overkill at this point.\n d
efineWrapGetter(Document, 'body');\n defineWrapGetter(Document, 'head');\n\n /
/ document cannot be overridden so we override a bunch of its methods\n // dire
ctly on the instance.\n\n function wrapMethod(name) {\n var original = docum
ent[name];\n Document.prototype[name] = function() {\n return wrap(origi
nal.apply(this.impl, arguments));\n };\n }\n\n [\n 'createComment',\n
'createDocumentFragment',\n 'createElement',\n 'createElementNS',\n 'c
reateEvent',\n 'createEventNS',\n 'createRange',\n 'createTextNode',\n
'getElementById'\n ].forEach(wrapMethod);\n\n var originalAdoptNode = docum
ent.adoptNode;\n\n function adoptNodeNoRemove(node, doc) {\n originalAdoptNo
de.call(doc.impl, unwrap(node));\n adoptSubtree(node, doc);\n }\n\n functio
n adoptSubtree(node, doc) {\n if (node.shadowRoot)\n doc.adoptNode(node.
shadowRoot);\n if (node instanceof ShadowRoot)\n adoptOlderShadowRoots(n
ode, doc);\n for (var child = node.firstChild; child; child = child.nextSibli
ng) {\n adoptSubtree(child, doc);\n }\n }\n\n function adoptOlderShado
wRoots(shadowRoot, doc) {\n var oldShadowRoot = shadowRoot.olderShadowRoot;\n
if (oldShadowRoot)\n doc.adoptNode(oldShadowRoot);\n }\n\n var origin
alGetSelection = document.getSelection;\n\n mixin(Document.prototype, {\n ad
optNode: function(node) {\n if (node.parentNode)\n node.parentNode.r
emoveChild(node);\n adoptNodeNoRemove(node, this);\n return node;\n
},\n elementFromPoint: function(x, y) {\n return elementFromPoint(this,
this, x, y);\n },\n importNode: function(node, deep) {\n return clon
eNode(node, deep, this.impl);\n },\n getSelection: function() {\n ren
derAllPending();\n return new Selection(originalGetSelection.call(unwrap(th
is)));\n }\n });\n\n if (document.registerElement) {\n var originalRegis
terElement = document.registerElement;\n Document.prototype.registerElement =
function(tagName, object) {\n var prototype, extendsOption;\n if (obj
ect !== undefined) {\n prototype = object.prototype;\n extendsOpti
on = object.extends;\n }\n\n if (!prototype)\n prototype = Obje
ct.create(HTMLElement.prototype);\n\n\n // If we already used the object as
a prototype for another custom\n // element.\n if (scope.nativeProtot
ypeTable.get(prototype)) {\n // TODO(arv): DOMException\n throw ne
w Error('NotSupportedError');\n }\n\n // Find first object on the prot
otype chain that already have a native\n // prototype. Keep track of all th
e objects before that so we can create\n // a similar structure for the nat
ive case.\n var proto = Object.getPrototypeOf(prototype);\n var native
Prototype;\n var prototypes = [];\n while (proto) {\n nativePro
totype = scope.nativePrototypeTable.get(proto);\n if (nativePrototype)\n
break;\n prototypes.push(proto);\n proto = Object.getProt
otypeOf(proto);\n }\n\n if (!nativePrototype) {\n // TODO(arv):
DOMException\n throw new Error('NotSupportedError');\n }\n\n /
/ This works by creating a new prototype object that is empty, but has\n //
the native prototype as its proto. The original prototype object\n // pass
ed into register is used as the wrapper prototype.\n\n var newPrototype = O
bject.create(nativePrototype);\n for (var i = prototypes.length - 1; i >= 0
; i--) {\n newPrototype = Object.create(newPrototype);\n }\n\n
// Add callbacks if present.\n // Names are taken from:\n // https:/
/code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bi
ndings/v8/CustomElementConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\
n // and not from the spec since the spec is out of date.\n [\n
'createdCallback',\n 'attachedCallback',\n 'detachedCallback',\n
'attributeChangedCallback',\n ].forEach(function(name) {\n va
r f = prototype[name];\n if (!f)\n return;\n newPrototype
[name] = function() {\n // if this element has been wrapped prior to re
gistration,\n // the wrapper is stale; in this case rewrap\n i
f (!(wrap(this) instanceof CustomElementConstructor)) {\n rewrap(this
);\n }\n f.apply(wrap(this), arguments);\n };\n })
;\n\n var p = {prototype: newPrototype};\n if (extendsOption)\n
p.extends = extendsOption;\n\n function CustomElementConstructor(node) {\n
if (!node) {\n if (extendsOption) {\n return documen
t.createElement(extendsOption, tagName);\n } else {\n return
document.createElement(tagName);\n }\n }\n this.impl = n
ode;\n }\n CustomElementConstructor.prototype = prototype;\n Cust
omElementConstructor.prototype.constructor = CustomElementConstructor;\n\n
scope.constructorTable.set(newPrototype, CustomElementConstructor);\n scope
.nativePrototypeTable.set(prototype, newPrototype);\n\n // registration is
synchronous so do it last\n var nativeConstructor = originalRegisterElement
.call(unwrap(this),\n tagName, p);\n return CustomElementConstruct
or;\n };\n\n forwardMethodsToWrapper([\n window.HTMLDocument || windo
w.Document, // Gecko adds these to HTMLDocument\n ], [\n 'registerEleme
nt',\n ]);\n }\n\n // We also override some of the methods on document.body
and document.head\n // for convenience.\n forwardMethodsToWrapper([\n wind
ow.HTMLBodyElement,\n window.HTMLDocument || window.Document, // Gecko adds
these to HTMLDocument\n window.HTMLHeadElement,\n window.HTMLHtmlElement,\
n ], [\n 'appendChild',\n 'compareDocumentPosition',\n 'contains',\n
'getElementsByClassName',\n 'getElementsByTagName',\n 'getElementsByTagN
ameNS',\n 'insertBefore',\n 'querySelector',\n 'querySelectorAll',\n
'removeChild',\n 'replaceChild',\n ].concat(matchesNames));\n\n forwardMet
hodsToWrapper([\n window.HTMLDocument || window.Document, // Gecko adds thes
e to HTMLDocument\n ], [\n 'adoptNode',\n 'importNode',\n 'contains',\
n 'createComment',\n 'createDocumentFragment',\n 'createElement',\n
'createElementNS',\n 'createEvent',\n 'createEventNS',\n 'createRange',
\n 'createTextNode',\n 'elementFromPoint',\n 'getElementById',\n 'ge
tSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface);\n m
ixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype, Sele
ctorsInterface);\n\n mixin(Document.prototype, {\n get implementation() {\n
var implementation = implementationTable.get(this);\n if (implementati
on)\n return implementation;\n implementation =\n new DOMIm
plementation(unwrap(this).implementation);\n implementationTable.set(this,
implementation);\n return implementation;\n }\n });\n\n registerWrappe
r(window.Document, Document,\n document.implementation.createHTMLDocument('
'));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM onl
y has\n // one Document interface and IE implements the standard correctly.\n
if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Document);\n\
n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTMLDocumen
t || window.Document, // Gecko adds these to HTMLDocument\n window.HTMLHeadE
lement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = impl;\n
}\n\n function wrapImplMethod(constructor, name) {\n var original = documen
t.implementation[name];\n constructor.prototype[name] = function() {\n r
eturn wrap(original.apply(this.impl, arguments));\n };\n }\n\n function for
wardImplMethod(constructor, name) {\n var original = document.implementation[
name];\n constructor.prototype[name] = function() {\n return original.ap
ply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementation, '
createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocument');\n
wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplMethod(D
OMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplementation,
DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImplementation
,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createHTMLDocu
ment',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNodeNoRemov
e;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrappers.Do
cument = Document;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Po
lymer Authors. All rights reserved.\n// Use of this source code is goverened by
a BSD-style\n// license that can be found in the LICENSE file.\n\n(function(scop
e) {\n 'use strict';\n\n var EventTarget = scope.wrappers.EventTarget;\n var
Selection = scope.wrappers.Selection;\n var mixin = scope.mixin;\n var registe
rWrapper = scope.registerWrapper;\n var renderAllPending = scope.renderAllPendi
ng;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\
n var wrap = scope.wrap;\n\n var OriginalWindow = window.Window;\n var origin
alGetComputedStyle = window.getComputedStyle;\n var originalGetSelection = wind
ow.getSelection;\n\n function Window(impl) {\n EventTarget.call(this, impl);
\n }\n Window.prototype = Object.create(EventTarget.prototype);\n\n OriginalW
indow.prototype.getComputedStyle = function(el, pseudo) {\n return wrap(this
|| window).getComputedStyle(unwrapIfNeeded(el), pseudo);\n };\n\n OriginalWind
ow.prototype.getSelection = function() {\n return wrap(this || window).getSel
ection();\n };\n\n // Work around for https://bugzilla.mozilla.org/show_bug.cg
i?id=943065\n delete window.getComputedStyle;\n delete window.getSelection;\n\
n ['addEventListener', 'removeEventListener', 'dispatchEvent'].forEach(\n
function(name) {\n OriginalWindow.prototype[name] = function() {\n
var w = wrap(this || window);\n return w[name].apply(w, arguments);\
n };\n\n // Work around for https://bugzilla.mozilla.org/show_bug.
cgi?id=943065\n delete window[name];\n });\n\n mixin(Window.prototy
pe, {\n getComputedStyle: function(el, pseudo) {\n renderAllPending();\n
return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el),\n
pseudo);\n },\n getSelection: fun
ction() {\n renderAllPending();\n return new Selection(originalGetSele
ction.call(unwrap(this)));\n },\n });\n\n registerWrapper(OriginalWindow, W
indow);\n\n scope.wrappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n"
,"/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of th
is source code is goverened by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrap = scop
e.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single meth
od that\n // requires wrapping. Since it is only a method we do not need a real
wrapper,\n // we can just override the method.\n\n var OriginalDataTransfer =
window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragImag
e =\n OriginalDataTransfer.prototype.setDragImage;\n\n OriginalDataTransfe
r.prototype.setDragImage = function(image, x, y) {\n OriginalDataTransferSetD
ragImage.call(this, unwrap(image), x, y);\n };\n\n})(window.ShadowDOMPolyfill);
\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope
.isWrapperFor;\n\n // This is a list of the elements we currently override the
global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement',
\n // Do not create an applet element by default since it shows a warning in\
n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple
t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi
oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n
'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC
anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable
ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\
n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir'
: 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle
ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement',
\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': '
HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi
ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht
ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma
geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement'
,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li
': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement'
,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me
nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H
TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme
nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',
\n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par
am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro
gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',
\n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's
ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML
StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection
Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show
_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n
// 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n
'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n
'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML
TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement
',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag
Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst
ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu
rn;\n var element = document.createElement(tagName);\n var wrapperConstruc
tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct
or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge
tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s
cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyright
2013 The Polymer Authors. All rights reserved.\n * Use of this source code is g
overned by a BSD-style\n * license that can be found in the LICENSE file.\n */\n
(function() {\n\n // convenient global\n window.wrap = ShadowDOMPolyfill.wrapI
fNeeded;\n window.unwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may
want to customize other types\n // TODO(sjmiles): 'button' is now supported by
ShadowDOMPolyfill, but\n // I've left this code here in case we need to tempora
rily patch another\n // type\n /*\n (function() {\n var elts = {HTMLButton
Element: 'button'};\n for (var c in elts) {\n window[c] = function() { t
hrow 'Patched Constructor'; };\n window[c].prototype = Object.getPrototypeO
f(\n document.createElement(elts[c]));\n }\n })();\n */\n\n // pa
tch in prefixed name\n Object.defineProperty(Element.prototype, 'webkitShadowRo
ot',\n Object.getOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n
\n var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elemen
t.prototype.createShadowRoot = function() {\n var root = originalCreateShadow
Root.call(this);\n CustomElements.watchShadow(this);\n return root;\n };\
n\n Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRo
ot;\n})();\n","/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n
* Use of this source code is governed by a BSD-style\n * license that can be fo
und in the LICENSE file.\n */\n\n/*\n This is a limited shim for ShadowDOM css
styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.
html#styles\n \n The intention here is to support only the styling features wh
ich can be \n relatively simply implemented. The goal is to allow users to avoi
d the \n most obvious pitfalls and do so without compromising performance signi
ficantly. \n For ShadowDOM styling that's not covered here, a set of best pract
ices\n can be provided that should allow users to accomplish more complex styli
ng.\n\n The following is a list of specific ShadowDOM styling features and a br
ief\n discussion of the approach used to shim.\n\n Shimmed features:\n\n * :h
ost, :host-context: ShadowDOM allows styling of the shadowRoot's host\n element
using the :host rule. To shim this feature, the :host styles are \n reformatte
d and prefixed with a given scope name and promoted to a \n document level styl
esheet.\n For example, given a scope name of .foo, a rule like this:\n \n :
host {\n background: red;\n }\n }\n \n becomes:\n \n .foo {
\n background: red;\n }\n \n * encapsultion: Styles defined within Sha
dowDOM, apply only to \n dom inside the ShadowDOM. Polymer uses one of two tech
niques to imlement\n this feature.\n \n By default, rules are prefixed with t
he host element tag name \n as a descendant selector. This ensures styling does
not leak out of the 'top'\n of the element's ShadowDOM. For example,\n\n div
{\n font-weight: bold;\n }\n \n becomes:\n\n x-foo div {\n font-
weight: bold;\n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS
.strictStyling is set to true then \n selectors are scoped by adding an attribu
te selector suffix to each\n simple selector that contains the host element tag
name. Each element \n in the element's ShadowDOM template is also given the sc
ope attribute. \n Thus, these rules match only elements that have the scope att
ribute.\n For example, given a scope name of x-foo, a rule like this:\n \n
div {\n font-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n
font-weight: bold;\n }\n\n Note that elements that are dynamically added
to a scope must have the scope\n selector added to them manually.\n\n * upper
/lower bound encapsulation: Styles which are defined outside a\n shadowRoot sho
uld not cross the ShadowDOM boundary and should not apply\n inside a shadowRoot
.\n\n This styling behavior is not emulated. Some possible ways to do this that
\n were rejected due to complexity and/or performance concerns include: (1) re
set\n every possible property for every possible selector for a given scope nam
e;\n (2) re-implement css in javascript.\n \n As an alternative, users should
make sure to use selectors\n specific to the scope in which they are working.\
n \n * ::distributed: This behavior is not emulated. It's often not necessary\
n to style the contents of a specific insertion point and instead, descendants\
n of the host element can be styled selectively. Users can also create an \n e
xtra node around an insertion point and style that node's contents\n via descen
dent selectors. For example, with a shadowRoot like this:\n \n <style>\n
::content(div) {\n background: red;\n }\n </style>\n <conten
t></content>\n \n could become:\n \n <style>\n / *@polyfill .content-
container div * / \n ::content(div) {\n background: red;\n }\n
</style>\n <div class=\"content-container\">\n <content></content>\n
</div>\n \n Note the use of @polyfill in the comment above a ShadowDOM spec
ific style\n declaration. This is a directive to the styling shim to use the se
lector \n in comments in lieu of the next selector when running under polyfill.
\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictStyling: false,\n regist
ry: {},\n // Shim styles for a given root associated with a name and extendsNam
e\n // 1. cache root styles by name\n // 2. optionally tag root nodes with sco
pe name\n // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule
*/\n // 4. shim :host and scoping\n shimStyling: function(root, name, extendsN
ame) {\n var scopeStyles = this.prepareRoot(root, name, extendsName);\n va
r typeExtension = this.isTypeExtension(extendsName);\n var scopeSelector = th
is.makeScopeSelector(name, typeExtension);\n // use caching to make working w
ith styles nodes easier and to facilitate\n // lookup of extendee\n var cs
sText = stylesToCssText(scopeStyles, true);\n cssText = this.scopeCssText(css
Text, scopeSelector);\n // cache shimmed css on root for user extensibility\n
if (root) {\n root.shimmedStyle = cssText;\n }\n // add style to
document\n this.addCssToDocument(cssText, name);\n },\n /*\n * Shim a styl
e element with the given selector. Returns cssText that can\n * be included in
the document via Platform.ShadowCSS.addCssToDocument(css).\n */\n shimStyle: f
unction(style, selector) {\n return this.shimCssText(style.textContent, selec
tor);\n },\n /*\n * Shim some cssText with the given selector. Returns cssTex
t that can\n * be included in the document via Platform.ShadowCSS.addCssToDocum
ent(css).\n */\n shimCssText: function(cssText, selector) {\n cssText = thi
s.insertDirectives(cssText);\n return this.scopeCssText(cssText, selector);\n
},\n makeScopeSelector: function(name, typeExtension) {\n if (name) {\n
return typeExtension ? '[is=' + name + ']' : name;\n }\n return '';\n
},\n isTypeExtension: function(extendsName) {\n return extendsName && extend
sName.indexOf('-') < 0;\n },\n prepareRoot: function(root, name, extendsName)
{\n var def = this.registerRoot(root, name, extendsName);\n this.replaceTe
xtInStyles(def.rootStyles, this.insertDirectives);\n // remove existing style
elements\n this.removeStyles(root, def.rootStyles);\n // apply strict att
r\n if (this.strictStyling) {\n this.applyScopeToContent(root, name);\n
}\n return def.scopeStyles;\n },\n removeStyles: function(root, styles)
{\n for (var i=0, l=styles.length, s; (i<l) && (s=styles[i]); i++) {\n s
.parentNode.removeChild(s);\n }\n },\n registerRoot: function(root, name, e
xtendsName) {\n var def = this.registry[name] = {\n root: root,\n n
ame: name,\n extendsName: extendsName\n }\n var styles = this.findSty
les(root);\n def.rootStyles = styles;\n def.scopeStyles = def.rootStyles;\
n var extendee = this.registry[def.extendsName];\n if (extendee) {\n
def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);\n }\n retu
rn def;\n },\n findStyles: function(root) {\n if (!root) {\n return []
;\n }\n var styles = root.querySelectorAll('style');\n return Array.pro
totype.filter.call(styles, function(s) {\n return !s.hasAttribute(NO_SHIM_A
TTRIBUTE);\n });\n },\n applyScopeToContent: function(root, name) {\n if
(root) {\n // add the name attribute to each node in root.\n Array.pr
ototype.forEach.call(root.querySelectorAll('*'),\n function(node) {\n
node.setAttribute(name, '');\n });\n // and template con
tents too\n Array.prototype.forEach.call(root.querySelectorAll('template'),
\n function(template) {\n this.applyScopeToContent(template.
content, name);\n },\n this);\n }\n },\n insertDirectives
: function(cssText) {\n cssText = this.insertPolyfillDirectivesInCssText(cssT
ext);\n return this.insertPolyfillRulesInCssText(cssText);\n },\n /*\n *
Process styles to convert native ShadowDOM rules that will trip\n * up the css
parser; we rely on decorating the stylesheet with inert rules.\n * \n * For
example, we convert this rule:\n * \n * polyfill-next-selector { content: '
:host menu-item'; }\n * ::content menu-item {\n * \n * to this:\n * \n
* scopeName menu-item {\n *\n **/\n insertPolyfillDirectivesInCssText: func
tion(cssText) {\n // TODO(sorvell): remove either content or comment\n css
Text = cssText.replace(cssCommentNextSelectorRe, function(match, p1) {\n //
remove end comment delimiter and add block start\n return p1.slice(0, -2)
+ '{';\n });\n return cssText.replace(cssContentNextSelectorRe, function(m
atch, p1) {\n return p1 + ' {';\n });\n },\n /*\n * Process styles t
o add rules which will only apply under the polyfill\n * \n * For example, w
e convert this rule:\n * \n * polyfill-rule {\n * content: ':host menu-i
tem';\n * ...\n * }\n * \n * to this:\n * \n * scopeName menu-item {
...}\n *\n **/\n insertPolyfillRulesInCssText: function(cssText) {\n // T
ODO(sorvell): remove either content or comment\n cssText = cssText.replace(cs
sCommentRuleRe, function(match, p1) {\n // remove end comment delimiter\n
return p1.slice(0, -1);\n });\n return cssText.replace(cssContentRuleR
e, function(match, p1, p2, p3) {\n var rule = match.replace(p1, '').replace
(p2, '');\n return p3 + rule;\n });\n },\n /* Ensure styles are scoped
. Pseudo-scoping takes a rule like:\n * \n * .foo {... } \n * \n * an
d converts this to\n * \n * scopeName .foo { ... }\n */\n scopeCssText:
function(cssText, scopeSelector) {\n var unscoped = this.extractUnscopedRules
FromCssText(cssText);\n cssText = this.insertPolyfillHostInCssText(cssText);\
n cssText = this.convertColonHost(cssText);\n cssText = this.convertColonH
ostContext(cssText);\n cssText = this.convertCombinators(cssText);\n if (s
copeSelector) {\n var self = this, cssText;\n withCssRules(cssText, fu
nction(rules) {\n cssText = self.scopeRules(rules, scopeSelector);\n
});\n\n }\n cssText = cssText + '\\n' + unscoped;\n return cssText.tri
m();\n },\n /*\n * Process styles to add rules which will only apply under t
he polyfill\n * and do not process via CSSOM. (CSSOM is destructive to rules o
n rare \n * occasions, e.g. -webkit-calc on Safari.)\n * For example, we con
vert this rule:\n * \n * (comment start) @polyfill-unscoped-rule menu-item {
\n * ... } (comment end)\n * \n * to this:\n * \n * menu-item {...}\n
*\n **/\n extractUnscopedRulesFromCssText: function(cssText) {\n // TODO
(sorvell): remove either content or comment\n var r = '', m;\n while (m =
cssCommentUnscopedRuleRe.exec(cssText)) {\n r += m[1].slice(0, -1) + '\\n\\
n';\n }\n while (m = cssContentUnscopedRuleRe.exec(cssText)) {\n r +=
m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\\n';\n }\n return r;\n
},\n /*\n * convert a rule like :host(.foo) > .bar { }\n *\n * to\n *\
n * scopeName.foo > .bar\n */\n convertColonHost: function(cssText) {\n r
eturn this.convertColonRule(cssText, cssColonHostRe,\n this.colonHostPart
Replacer);\n },\n /*\n * convert a rule like :host-context(.foo) > .bar { }\
n *\n * to\n *\n * scopeName.foo > .bar, .foo scopeName > .bar { }\n *
\n * and\n *\n * :host-context(.foo:host) .bar { ... }\n * \n * to\n
* \n * scopeName.foo .bar { ... }\n */\n convertColonHostContext: function
(cssText) {\n return this.convertColonRule(cssText, cssColonHostContextRe,\n
this.colonHostContextPartReplacer);\n },\n convertColonRule: function(c
ssText, regExp, partReplacer) {\n // p1 = :host, p2 = contents of (), p3 rest
of rule\n return cssText.replace(regExp, function(m, p1, p2, p3) {\n p1
= polyfillHostNoCombinator;\n if (p2) {\n var parts = p2.split(',')
, r = [];\n for (var i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++)
{\n p = p.trim();\n r.push(partReplacer(p1, p, p3));\n
}\n return r.join(',');\n } else {\n return p1 + p3;\n }
\n });\n },\n colonHostContextPartReplacer: function(host, part, suffix) {\
n if (part.match(polyfillHost)) {\n return this.colonHostPartReplacer(ho
st, part, suffix);\n } else {\n return host + part + suffix + ', ' + par
t + ' ' + host + suffix;\n }\n },\n colonHostPartReplacer: function(host, p
art, suffix) {\n return host + part.replace(polyfillHost, '') + suffix;\n },
\n /*\n * Convert ^ and ^^ combinators by replacing with space.\n */\n conv
ertCombinators: function(cssText) {\n for (var i=0; i < combinatorsRe.length;
i++) {\n cssText = cssText.replace(combinatorsRe[i], ' ');\n }\n ret
urn cssText;\n },\n // change a selector like 'div' to 'name div'\n scopeRule
s: function(cssRules, scopeSelector) {\n var cssText = '';\n if (cssRules)
{\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (r
ule.selectorText && (rule.style && rule.style.cssText)) {\n cssText +=
this.scopeSelector(rule.selectorText, scopeSelector, \n this.strictSt
yling) + ' {\\n\\t';\n cssText += this.propertiesFromRule(rule) + '\\n}
\\n\\n';\n } else if (rule.type === CSSRule.MEDIA_RULE) {\n cssT
ext += '@media ' + rule.media.mediaText + ' {\\n';\n cssText += this.sc
opeRules(rule.cssRules, scopeSelector);\n cssText += '\\n}\\n\\n';\n
} else if (rule.cssText) {\n cssText += rule.cssText + '\\n\\n';\n
}\n }, this);\n }\n return cssText;\n },\n scopeSelector: f
unction(selector, scopeSelector, strict) {\n var r = [], parts = selector.spl
it(',');\n parts.forEach(function(p) {\n p = p.trim();\n if (this.s
electorNeedsScoping(p, scopeSelector)) {\n p = (strict && !p.match(polyfi
llHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, scopeSelec
tor) :\n this.applySimpleSelectorScope(p, scopeSelector);\n }\n
r.push(p);\n }, this);\n return r.join(', ');\n },\n selectorNeedsS
coping: function(selector, scopeSelector) {\n var re = this.makeScopeMatcher(
scopeSelector);\n return !selector.match(re);\n },\n makeScopeMatcher: func
tion(scopeSelector) {\n scopeSelector = scopeSelector.replace(/\\[/g, '\\\\['
).replace(/\\[/g, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' +
selectorReSuffix, 'm');\n },\n // scope via name and [is=name]\n applySimpleS
electorScope: function(selector, scopeSelector) {\n if (selector.match(polyfi
llHostRe)) {\n selector = selector.replace(polyfillHostNoCombinator, scopeS
elector);\n return selector.replace(polyfillHostRe, scopeSelector + ' ');\n
} else {\n return scopeSelector + ' ' + selector;\n }\n },\n // re
turn a selector with [name] suffix on each simple selector\n // e.g. .foo.bar >
.zot becomes .foo[name].bar[name] > .zot[name]\n applyStrictSelectorScope: fun
ction(selector, scopeSelector) {\n scopeSelector = scopeSelector.replace(/\\[
is=([^\\]]*)\\]/g, '$1');\n var splits = [' ', '>', '+', '~'],\n scoped
= selector,\n attrName = '[' + scopeSelector + ']';\n splits.forEach(fun
ction(sep) {\n var parts = scoped.split(sep);\n scoped = parts.map(fun
ction(p) {\n // remove :host since it should be unnecessary\n var
t = p.trim().replace(polyfillHostRe, '');\n if (t && (splits.indexOf(t) <
0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([^:]*)(:*)(.*)/,
'$1' + attrName + '$2$3')\n }\n return p;\n }).join(sep);\n
});\n return scoped;\n },\n insertPolyfillHostInCssText: function(selecto
r) {\n return selector.replace(colonHostContextRe, polyfillHostContext).repla
ce(\n colonHostRe, polyfillHost);\n },\n propertiesFromRule: function(r
ule) {\n var cssText = rule.style.cssText;\n // TODO(sorvell): Safari csso
m incorrectly removes quotes from the content\n // property. (https://bugs.we
bkit.org/show_bug.cgi?id=118045)\n // don't replace attr rules\n if (rule.
style.content && !rule.style.content.match(/['\"]+|attr/)) {\n cssText = cs
sText.replace(/content:[^;]*;/g, 'content: \\'' + \n rule.style.content
+ '\\';');\n }\n // TODO(sorvell): we can workaround this issue here, but
we need a list\n // of troublesome properties to fix https://github.com/Poly
mer/platform/issues/53\n //\n // inherit rules can be omitted from cssText
\n // TODO(sorvell): remove when Blink bug is fixed:\n // https://code.goo
gle.com/p/chromium/issues/detail?id=358273\n var style = rule.style;\n for
(var i in style) {\n if (style[i] === 'initial') {\n cssText += i +
': initial; ';\n }\n }\n return cssText;\n },\n replaceTextInStyle
s: function(styles, action) {\n if (styles && action) {\n if (!(styles i
nstanceof Array)) {\n styles = [styles];\n }\n Array.prototype.
forEach.call(styles, function(s) {\n s.textContent = action.call(this, s.
textContent);\n }, this);\n }\n },\n addCssToDocument: function(cssTex
t, name) {\n if (cssText.match('@import')) {\n addOwnSheet(cssText, name
);\n } else {\n addCssToDocument(cssText);\n }\n }\n};\n\nvar select
orRe = /([^{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*
]*\\*+)*\\//gim,\n // TODO(sorvell): remove either content or comment\n cs
sCommentNextSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^
{]*?){/gim,\n cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\
\:[\\s]*'([^']*)'[^}]*}([^{]*?){/gim,\n // TODO(sorvell): remove either conte
nt or comment\n cssCommentRuleRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/*][^
*]*\\*+)*)\\//gim,\n cssContentRuleRe = /(polyfill-rule)[^}]*(content\\:[\\s]
*'([^']*)'[^;]*;)[^}]*}/gim,\n // TODO(sorvell): remove either content or com
ment\n cssCommentUnscopedRuleRe = /\\/\\*\\s@polyfill-unscoped-rule([^*]*\\*+
([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnscopedRuleRe = /(polyfill-unscoped-r
ule)[^}]*(content\\:[\\s]*'([^']*)'[^;]*;)[^}]*}/gim,\n cssPseudoRe = /::(x-[
^\\s{,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host p
re-processed to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n // no
te: :host-context pre-processed to -shadowcsshostcontext.\n polyfillHostConte
xt = '-shadowcsscontext',\n parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^
)(]*\\\\)|[^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssColonHostRe = new Re
gExp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonHostContextRe = new
RegExp('(' + polyfillHostContext + parenSuffix, 'gim'),\n selectorReSuffix =
'([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n colonHostRe = /\\:host/gim,\n colo
nHostContextRe = /\\:host-context/gim,\n /* host name without combinator */\n
polyfillHostNoCombinator = polyfillHost + '-no-combinator',\n polyfillHos
tRe = new RegExp(polyfillHost, 'gim'),\n polyfillHostContextRe = new RegExp(p
olyfillHostContext, 'gim'),\n combinatorsRe = [\n /\\^\\^/g,\n /\\^
/g,\n /\\/shadow\\//g,\n /\\/shadow-deep\\//g,\n /::shadow/g,\n
/\\/deep\\//g\n ];\n\nfunction stylesToCssText(styles, preserveComments)
{\n var cssText = '';\n Array.prototype.forEach.call(styles, function(s) {\n
cssText += s.textContent + '\\n\\n';\n });\n // strip comments for easier pr
ocessing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe
, '');\n }\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var s
tyle = document.createElement('style');\n style.textContent = cssText;\n retur
n style;\n}\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssT
ext);\n document.head.appendChild(style);\n var rules = [];\n if (style.sheet
) {\n // TODO(sorvell): Firefox throws when accessing the rules of a styleshe
et\n // with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=
625013\n try {\n rules = style.sheet.cssRules;\n } catch(e) {\n
//\n }\n } else {\n console.warn('sheet not found', style);\n }\n style
.parentNode.removeChild(style);\n return rules;\n}\n\nvar frame = document.crea
teElement('iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n
frame.initialized = true;\n document.body.appendChild(frame);\n var doc = fra
me.contentDocument;\n var base = doc.createElement('base');\n base.href = docu
ment.baseURI;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if
(!frame.initialized) {\n initFrame();\n }\n document.body.appendChild(frame
);\n fn(frame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// T
ODO(sorvell): use an iframe if the cssText contains an @import to workaround\n//
https://code.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navi
gator.userAgent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n
if (!callback) {\n return;\n }\n var rules;\n if (cssText.match('@import')
&& isChrome) {\n var style = cssTextToStyle(cssText);\n inFrame(function(
doc) {\n doc.head.appendChild(style.impl);\n rules = style.sheet.cssRu
les;\n callback(rules);\n });\n } else {\n rules = cssToRules(cssTex
t);\n callback(rules);\n }\n}\n\nfunction rulesToCss(cssRules) {\n for (var
i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssRules[i].cssText);\n
}\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocument(cssText) {\n i
f (cssText) {\n getSheet().appendChild(document.createTextNode(cssText));\n
}\n}\n\nfunction addOwnSheet(cssText, name) {\n var style = cssTextToStyle(cssT
ext);\n style.setAttribute(name, '');\n style.setAttribute(SHIMMED_ATTRIBUTE,
'');\n document.head.appendChild(style);\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shado
wdom';\nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar NO_SHIM_ATTRIBUTE = '
no-shim';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet) {\n sheet = doc
ument.createElement(\"style\");\n sheet.setAttribute(SHIMMED_ATTRIBUTE, '');\
n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\n}\n\n// add polyfil
l stylesheet to document\nif (window.ShadowDOMPolyfill) {\n addCssToDocument('s
tyle { display: none !important; }\\n');\n var doc = wrap(document);\n var hea
d = doc.querySelector('head');\n head.insertBefore(getSheet(), head.childNodes[
0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is abusive;\n // consid
er a better solution.\n document.addEventListener('DOMContentLoaded', function(
) {\n var urlResolver = scope.urlResolver;\n \n if (window.HTMLImports
&& !HTMLImports.useNative) {\n var SHIM_SHEET_SELECTOR = 'link[rel=styleshe
et]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHIM_STYLE_SELECTOR = '
style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.importer.documentPreloadSelec
tors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImports.importer.importsPreloadSel
ectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.parser.documentSelecto
rs = [\n HTMLImports.parser.documentSelectors,\n SHIM_SHEET_SELECT
OR,\n SHIM_STYLE_SELECTOR\n ].join(',');\n \n var originalPars
eGeneric = HTMLImports.parser.parseGeneric;\n\n HTMLImports.parser.parseGen
eric = function(elt) {\n if (elt[SHIMMED_ATTRIBUTE]) {\n return;
\n }\n var style = elt.__importElement || elt;\n if (!style
.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGeneric.call(this, elt)
;\n return;\n }\n if (elt.__resource) {\n style
= elt.ownerDocument.createElement('style');\n style.textContent = urlRe
solver.resolveCssText(\n elt.__resource, elt.href);\n } else
{\n urlResolver.resolveStyle(style); \n }\n style.textC
ontent = ShadowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTRIBU
TE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[SHIM
MED_ATTRIBUTE] = true;\n // place in document\n if (style.parentNo
de !== head) {\n // replace links in head\n if (elt.parentNode
=== head) {\n head.replaceChild(style, elt);\n } else {\n
head.appendChild(style);\n }\n }\n style.__impo
rtParsed = true;\n this.markParsingComplete(elt);\n }\n\n var h
asResource = HTMLImports.parser.hasResource;\n HTMLImports.parser.hasResour
ce = function(node) {\n if (node.localName === 'link' && node.rel === 'st
ylesheet' &&\n node.hasAttribute(SHIM_ATTRIBUTE)) {\n return
(node.__resource);\n } else {\n return hasResource.call(this, n
ode);\n }\n }\n\n }\n });\n}\n\n// exports\nscope.ShadowCSS = Sh
adowCSS;\n\n})(window.Platform);","/*\n * Copyright 2013 The Polymer Authors. Al
l rights reserved.\n * Use of this source code is governed by a BSD-style\n * li
cense that can be found in the LICENSE file.\n */\n(function() {\n\n // poor ma
n's adapter for template.content on various platform scenarios\n window.templat
eContent = window.templateContent || function(inTemplate) {\n return inTempla
te.content;\n };\n\n // so we can call wrap/unwrap without testing for ShadowD
OMPolyfill\n\n window.wrap = window.unwrap = function(n){\n return n;\n }\n
\n addEventListener('DOMContentLoaded', function() {\n if (CustomElements.
useNative === false) {\n var originalCreateShadowRoot = Element.prototype.c
reateShadowRoot;\n Element.prototype.createShadowRoot = function() {\n
var root = originalCreateShadowRoot.call(this);\n CustomElements.watch
Shadow(this);\n return root;\n };\n }\n });\n \n window.templa
teContent = function(inTemplate) {\n // if MDV exists, it may need to boostra
p this template to reveal content\n if (window.HTMLTemplateElement && HTMLTem
plateElement.bootstrap) {\n HTMLTemplateElement.bootstrap(inTemplate);\n
}\n // fallback when there is no Shadow DOM polyfill, no MDV polyfill, and n
o\n // native template support\n if (!inTemplate.content && !inTemplate._c
ontent) {\n var frag = document.createDocumentFragment();\n while (inT
emplate.firstChild) {\n frag.appendChild(inTemplate.firstChild);\n }
\n inTemplate._content = frag;\n }\n return inTemplate.content || inT
emplate._content;\n };\n\n})();","/* Any copyright is dedicated to the Public D
omain.\n * http://creativecommons.org/publicdomain/zero/1.0/ */\n\n(function(sco
pe) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWork
ingUrl = false;\n if (!scope.forceJURL) {\n try {\n var u = new URL('b'
, 'http://a');\n hasWorkingUrl = u.href === 'http://a/b';\n } catch(e) {
}\n }\n\n if (hasWorkingUrl)\n return;\n\n var relative = Object.create(nu
ll);\n relative['ftp'] = 21;\n relative['file'] = 0;\n relative['gopher'] = 7
0;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;
\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null)
;\n relativePathDotMapping['%2e'] = '.';\n relativePathDotMapping['.%2e'] = '.
.';\n relativePathDotMapping['%2e.'] = '..';\n relativePathDotMapping['%2e%2e'
] = '..';\n\n function isRelativeScheme(scheme) {\n return relative[scheme]
!== undefined;\n }\n\n function invalid() {\n clear.call(this);\n this._
isInvalid = true;\n }\n\n function IDNAToASCII(h) {\n if ('' == h) {\n
invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n fun
ction percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode >
0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0
x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }
\n return encodeURIComponent(c);\n }\n\n function percentEscapeQuery(c) {\n
// XXX This actually needs to encode c using encoding and then\n // conve
rt the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode
> 0x20 &&\n unicode < 0x7F &&\n // \" # < > ` (do not escape '?')\n
[0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n re
turn c;\n }\n return encodeURIComponent(c);\n }\n\n var EOF = undefined,
\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n f
unction parse(input, stateOverride, base) {\n function err(message) {\n
errors.push(message)\n }\n\n var state = stateOverride || 'scheme start',\
n cursor = 0,\n buffer = '',\n seenAt = false,\n see
nBracket = false,\n errors = [];\n\n loop: while ((input[cursor - 1] !
= EOF || cursor == 0) && !this._isInvalid) {\n var c = input[cursor];\n
switch (state) {\n case 'scheme start':\n if (c && ALPHA.test(
c)) {\n buffer += c.toLowerCase(); // ASCII-safe\n state =
'scheme';\n } else if (!stateOverride) {\n buffer = '';\n
state = 'no scheme';\n continue;\n } else {\n
err('Invalid scheme.');\n break loop;\n }\n
break;\n\n case 'scheme':\n if (c && ALPHANUMERIC.test(c)) {\n
buffer += c.toLowerCase(); // ASCII-safe\n } else if (':' ==
c) {\n this._scheme = buffer;\n buffer = '';\n
if (stateOverride) {\n break loop;\n }\n if (
isRelativeScheme(this._scheme)) {\n this._isRelative = true;\n
}\n if ('file' == this._scheme) {\n state = 'rela
tive';\n } else if (this._isRelative && base && base._scheme == this.
_scheme) {\n state = 'relative or authority';\n } else i
f (this._isRelative) {\n state = 'authority first slash';\n
} else {\n state = 'scheme data';\n }\n } e
lse if (!stateOverride) {\n buffer = '';\n cursor = 0;\n
state = 'no scheme';\n continue;\n } else if (EOF
== c) {\n break loop;\n } else {\n err('Code poin
t not allowed in scheme: ' + c)\n break loop;\n }\n
break;\n\n case 'scheme data':\n if ('?' == c) {\n q
uery = '?';\n state = 'query';\n } else if ('#' == c) {\n
this._fragment = '#';\n state = 'fragment';\n } els
e {\n // XXX error handling\n if (EOF != c && '\\t' != c &
& '\\n' != c && '\\r' != c) {\n this._schemeData += percentEscape(c
);\n }\n }\n break;\n\n case 'no scheme':\n
if (!base || !(isRelativeScheme(base._scheme))) {\n err('Mis
sing scheme.');\n invalid.call(this);\n } else {\n
state = 'relative';\n continue;\n }\n break;\n\n
case 'relative or authority':\n if ('/' == c && '/' == input[cur
sor+1]) {\n state = 'authority ignore slashes';\n } else {\n
err('Expected /, got: ' + c);\n state = 'relative';\n
continue\n }\n break;\n\n case 'relative':\n
this._isRelative = true;\n if ('file' != this._scheme)\n
this._scheme = base._scheme;\n if (EOF == c) {\n this._h
ost = base._host;\n this._port = base._port;\n this._path
= base._path.slice();\n this._query = base._query;\n break
loop;\n } else if ('/' == c || '\\\\' == c) {\n if ('\\\\'
== c)\n err('\\\\ is an invalid code point.');\n state =
'relative slash';\n } else if ('?' == c) {\n this._host = b
ase._host;\n this._port = base._port;\n this._path = base.
_path.slice();\n this._query = '?';\n state = 'query';\n
} else if ('#' == c) {\n this._host = base._host;\n
this._port = base._port;\n this._path = base._path.slice();\n
this._query = base._query;\n this._fragment = '#';\n
state = 'fragment';\n } else {\n var nextC = input[cursor+1
]\n var nextNextC = input[cursor+2]\n if (\n
'file' != this._scheme || !ALPHA.test(c) ||\n (nextC != ':' && next
C != '|') ||\n (EOF != nextNextC && '/' != nextNextC && '\\\\' != n
extNextC && '?' != nextNextC && '#' != nextNextC)) {\n this._host =
base._host;\n this._port = base._port;\n this._path =
base._path.slice();\n this._path.pop();\n }\n
state = 'relative path';\n continue;\n }\n break;
\n\n case 'relative slash':\n if ('/' == c || '\\\\' == c) {\n
if ('\\\\' == c) {\n err('\\\\ is an invalid code point.'
);\n }\n if ('file' == this._scheme) {\n stat
e = 'file host';\n } else {\n state = 'authority ignore
slashes';\n }\n } else {\n if ('file' != this._sc
heme) {\n this._host = base._host;\n this._port = base
._port;\n }\n state = 'relative path';\n contin
ue;\n }\n break;\n\n case 'authority first slash':\n
if ('/' == c) {\n state = 'authority second slash';\n
} else {\n err(\"Expected '/', got: \" + c);\n state = 'a
uthority ignore slashes';\n continue;\n }\n break;\
n\n case 'authority second slash':\n state = 'authority ignore s
lashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c
);\n continue;\n }\n break;\n\n case 'author
ity ignore slashes':\n if ('/' != c && '\\\\' != c) {\n stat
e = 'authority';\n continue;\n } else {\n err('Ex
pected authority, got: ' + c);\n }\n break;\n\n case 'a
uthority':\n if ('@' == c) {\n if (seenAt) {\n
err('@ already seen.');\n buffer += '%40';\n }\n
seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n
var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\
\r' == cp) {\n err('Invalid whitespace in authority.');\n
continue;\n }\n // XXX check URL code points\n
if (':' == cp && null === this._password) {\n this.
_password = '';\n continue;\n }\n var t
empC = percentEscape(cp);\n (null !== this._password) ? this._passw
ord += tempC : this._username += tempC;\n }\n buffer = '';
\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' ==
c) {\n cursor -= buffer.length;\n buffer = '';\n
state = 'host';\n continue;\n } else {\n buffe
r += c;\n }\n break;\n\n case 'file host':\n i
f (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n i
f (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ':' || buffer[1]
== '|')) {\n state = 'relative path';\n } else if (buff
er.length == 0) {\n state = 'relative path start';\n } e
lse {\n this._host = IDNAToASCII.call(this, buffer);\n
buffer = '';\n state = 'relative path start';\n }\n
continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c)
{\n err('Invalid whitespace in file host.');\n } else {\n
buffer += c;\n }\n break;\n\n case 'host':\n
case 'hostname':\n if (':' == c && !seenBracket) {\n /
/ XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n
buffer = '';\n state = 'port';\n if ('hostname'
== stateOverride) {\n break loop;\n }\n } else
if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n
this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n
state = 'relative path start';\n if (stateOverride) {\n
break loop;\n }\n continue;\n } else if ('\\t
' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n
seenBracket = true;\n } else if (']' == c) {\n seenBra
cket = false;\n }\n buffer += c;\n } else {\n
err('Invalid code point in host/hostname: ' + c);\n }\n
break;\n\n case 'port':\n if (/[0-9]/.test(c)) {\n
buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' ==
c || '#' == c || stateOverride) {\n if ('' != buffer) {\n
var temp = parseInt(buffer, 10);\n if (temp != relative[this._sc
heme]) {\n this._port = temp + '';\n }\n
buffer = '';\n }\n if (stateOverride) {\n b
reak loop;\n }\n state = 'relative path start';\n
continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n
err('Invalid code point in port: ' + c);\n } else {\n
invalid.call(this);\n }\n break;\n\n case 'relative
path start':\n if ('\\\\' == c)\n err(\"'\\\\' not allowed
in path.\");\n state = 'relative path';\n if ('/' != c && '\\\
\' != c) {\n continue;\n }\n break;\n\n case
'relative path':\n if (EOF == c || '/' == c || '\\\\' == c || (!stateO
verride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n
err('\\\\ not allowed in relative path.');\n }\n var
tmp;\n if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {\n
buffer = tmp;\n }\n if ('..' == buffer) {\n
this._path.pop();\n if ('/' != c && '\\\\' != c) {\n
this._path.push('');\n }\n } else if ('.' ==
buffer && '/' != c && '\\\\' != c) {\n this._path.push('');\n
} else if ('.' != buffer) {\n if ('file' == this._scheme && t
his._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1
] == '|') {\n buffer = buffer[0] + ':';\n }\n
this._path.push(buffer);\n }\n buffer = '';\n
if ('?' == c) {\n this._query = '?';\n state = '
query';\n } else if ('#' == c) {\n this._fragment = '#';
\n state = 'fragment';\n }\n } else if ('\\t' !
= c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n
}\n break;\n\n case 'query':\n if (!stateOverrid
e && '#' == c) {\n this._fragment = '#';\n state = 'fragme
nt';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {
\n this._query += percentEscapeQuery(c);\n }\n brea
k;\n\n case 'fragment':\n if (EOF != c && '\\t' != c && '\\n' !=
c && '\\r' != c) {\n this._fragment += c;\n }\n br
eak;\n }\n\n cursor++;\n }\n }\n\n function clear() {\n this._
scheme = '';\n this._schemeData = '';\n this._username = '';\n this._pa
ssword = null;\n this._host = '';\n this._port = '';\n this._path = [];
\n this._query = '';\n this._fragment = '';\n this._isInvalid = false;\
n this._isRelative = false;\n }\n\n // Does not process domain names or IP
addresses.\n // Does not handle encoding for the query parameter.\n function j
URL(url, base /* , encoding */) {\n if (base !== undefined && !(base instance
of jURL))\n base = new jURL(String(base));\n\n this._url = url;\n cle
ar.call(this);\n\n var input = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]
+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input,
null, base);\n }\n\n jURL.prototype = {\n get href() {\n if (this._is
Invalid)\n return this._url;\n\n var authority = '';\n if ('' !
= this._username || null != this._password) {\n authority = this._usernam
e +\n (null != this._password ? ':' + this._password : '') + '@';\n
}\n\n return this.protocol +\n (this._isRelative ? '//' + auth
ority + this.host : '') +\n this.pathname + this._query + this._fragmen
t;\n },\n set href(href) {\n clear.call(this);\n parse.call(this
, href);\n },\n\n get protocol() {\n return this._scheme + ':';\n
},\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n
parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host()
{\n return this._isInvalid ? '' : this._port ?\n this._host + ':'
+ this._port : this._host;\n },\n set host(host) {\n if (this._isInv
alid || !this._isRelative)\n return;\n parse.call(this, host, 'host'
);\n },\n\n get hostname() {\n return this._host;\n },\n set ho
stname(hostname) {\n if (this._isInvalid || !this._isRelative)\n ret
urn;\n parse.call(this, hostname, 'hostname');\n },\n\n get port() {\
n return this._port;\n },\n set port(port) {\n if (this._isInval
id || !this._isRelative)\n return;\n parse.call(this, port, 'port');
\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRe
lative ?\n '/' + this._path.join('/') : this._schemeData;\n },\n
set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n
return;\n this._path = [];\n parse.call(this, pathname, 'relative p
ath start');\n },\n\n get search() {\n return this._isInvalid || !thi
s._query || '?' == this._query ?\n '' : this._query;\n },\n set s
earch(search) {\n if (this._isInvalid || !this._isRelative)\n return
;\n this._query = '?';\n if ('?' == search[0])\n search = searc
h.slice(1);\n parse.call(this, search, 'query');\n },\n\n get hash()
{\n return this._isInvalid || !this._fragment || '#' == this._fragment ?\n
'' : this._fragment;\n },\n set hash(hash) {\n if (this._isI
nvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])
\n hash = hash.slice(1);\n parse.call(this, hash, 'fragment');\n
}\n };\n\n scope.URL = jURL;\n\n})(window);\n","/*\n * Copyright 2013 The Poly
mer Authors. All rights reserved.\n * Use of this source code is governed by a B
SD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(sc
ope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bi
nd) {\n Function.prototype.bind = function(scope) {\n var self = this;\n
var args = Array.prototype.slice.call(arguments, 1);\n return function() {\n
var args2 = args.slice();\n args2.push.apply(args2, arguments);\n
return self.apply(scope, args2);\n };\n };\n}\n\n// mixin\n\n// copy all pr
operties from inProps (et al) to inObj\nfunction mixin(inObj/*, inProps, inMoreP
rops, ...*/) {\n var obj = inObj || {};\n for (var i = 1; i < arguments.length
; i++) {\n var p = arguments[i];\n try {\n for (var n in p) {\n
copyProperty(n, p, obj);\n }\n } catch(x) {\n }\n }\n return obj;
\n}\n\n// copy property inName from inSource object to inTarget object\nfunction
copyProperty(inName, inSource, inTarget) {\n var pd = getPropertyDescriptor(in
Source, inName);\n Object.defineProperty(inTarget, inName, pd);\n}\n\n// get pr
operty descriptor for inName on inObject, even if\n// inName exists on some link
in inObject's prototype chain\nfunction getPropertyDescriptor(inObject, inName)
{\n if (inObject) {\n var pd = Object.getOwnPropertyDescriptor(inObject, in
Name);\n return pd || getPropertyDescriptor(Object.getPrototypeOf(inObject),
inName);\n }\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platform);","
// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Version
2.0 (the \"License\");\n// you may not use this file except in compliance with
the License.\n// You may obtain a copy of the License at\n//\n// http://www.
apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agr
eed to in writing, software\n// distributed under the License is distributed on
an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either exp
ress or implied.\n// See the License for the specific language governing permiss
ions and\n// limitations under the License.\n\n(function(scope) {\n\n 'use stri
ct';\n\n // polyfill DOMTokenList\n // * add/remove: allow these methods to ta
ke multiple classNames\n // * toggle: add a 2nd argument which forces the given
state rather\n // than toggling.\n\n var add = DOMTokenList.prototype.add;\n
var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.add = fu
nction() {\n for (var i = 0; i < arguments.length; i++) {\n add.call(thi
s, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = function() {\n
for (var i = 0; i < arguments.length; i++) {\n remove.call(this, argume
nts[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name, bool) {\
n if (arguments.length == 1) {\n bool = !this.contains(name);\n }\n
bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.prototype.swi
tch = function(oldName, newName) {\n oldName && this.remove(oldName);\n ne
wName && this.add(newName);\n };\n\n // add array() to NodeList, NamedNodeMap,
HTMLCollection\n\n var ArraySlice = function() {\n return Array.prototype.s
lice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || window.Mo
zNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n namedNodeMa
p.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = ArraySlice;\
n\n // polyfill performance.now\n\n if (!window.performance) {\n var start
= Date.now();\n // only at millisecond precision\n window.performance = {n
ow: function(){ return Date.now() - start }};\n }\n\n // polyfill for requestA
nimationFrame\n\n if (!window.requestAnimationFrame) {\n window.requestAnima
tionFrame = (function() {\n var nativeRaf = window.webkitRequestAnimationFr
ame ||\n window.mozRequestAnimationFrame;\n\n return nativeRaf ?\n
function(callback) {\n return nativeRaf(function() {\n
callback(performance.now());\n });\n } :\n function( cal
lback ){\n return window.setTimeout(callback, 1000 / 60);\n };\n
})();\n }\n\n if (!window.cancelAnimationFrame) {\n window.cancelAnimat
ionFrame = (function() {\n return window.webkitCancelAnimationFrame ||\n
window.mozCancelAnimationFrame ||\n function(id) {\n clear
Timeout(id);\n };\n })();\n }\n\n // utility\n\n function createDOM
(inTagOrNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'string' ?
\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(true);\n
dom.innerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttrs) {\n
dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\n }\n
// Make a stub for Polymer() for polyfill purposes; under the HTMLImports\n //
polyfill, scripts in the main document run before imports. That means\n // if
(1) polymer is imported and (2) Polymer() is called in the main document\n // i
n a script after the import, 2 occurs before 1. We correct this here\n // by sp
ecfiically patching Polymer(); this is not necessary under native\n // HTMLImpo
rts.\n var elementDeclarations = [];\n\n var polymerStub = function(name, dict
ionary) {\n elementDeclarations.push(arguments);\n }\n window.Polymer = pol
ymerStub;\n\n // deliver queued delcarations\n scope.deliverDeclarations = fun
ction() {\n scope.deliverDeclarations = function() {\n throw 'Possible at
tempt to load Polymer twice';\n };\n return elementDeclarations;\n }\n\n
// Once DOMContent has loaded, any main document scripts that depend on\n // P
olymer() should have run. Calling Polymer() now is an error until\n // polymer
is imported.\n window.addEventListener('DOMContentLoaded', function() {\n if
(window.Polymer === polymerStub) {\n window.Polymer = function() {\n
console.error('You tried to use polymer without loading it first. To ' +\n
'load polymer, <link rel=\"import\" href=\"' + \n 'components/pol
ymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope.createD
OM = createDOM;\n\n})(window.Platform);\n","/*\n * Copyright 2013 The Polymer Au
thors. All rights reserved.\n * Use of this source code is governed by a BSD-sty
le\n * license that can be found in the LICENSE file.\n */\n\n// poor man's adap
ter for template.content on various platform scenarios\nwindow.templateContent =
window.templateContent || function(inTemplate) {\n return inTemplate.content;\
n};","(function(scope) {\n \n scope = scope || (window.Inspector = {});\n \n
var inspector;\n\n window.sinspect = function(inNode, inProxy) {\n if (!ins
pector) {\n inspector = window.open('', 'ShadowDOM Inspector', null, true);
\n inspector.document.write(inspectorHTML);\n //inspector.document.clo
se();\n inspector.api = {\n shadowize: shadowize\n };\n }\n
inspect(inNode || wrap(document.body), inProxy);\n };\n\n var inspectorHTML
= [\n '<!DOCTYPE html>',\n '<html>',\n ' <head>',\n ' <title>Sh
adowDOM Inspector</title>',\n ' <style>',\n ' body {',\n '
}',\n ' pre {',\n ' font: 9pt \"Courier New\", monospace;',\n
' line-height: 1.5em;',\n ' }',\n ' tag {',\n '
color: purple;',\n ' }',\n ' ul {',\n ' margin:
0;',\n ' padding: 0;',\n ' list-style: none;',\n '
}',\n ' li {',\n ' display: inline-block;',\n ' b
ackground-color: #f1f1f1;',\n ' padding: 4px 6px;',\n ' bo
rder-radius: 4px;',\n ' margin-right: 4px;',\n ' }',\n '
</style>',\n ' </head>',\n ' <body>',\n ' <ul id=\"crumbs\">',\n
' </ul>',\n ' <div id=\"tree\"></div>',\n ' </body>',\n '</h
tml>'\n ].join('\\n');\n \n var crumbs = [];\n\n var displayCrumbs = functio
n() {\n // alias our document\n var d = inspector.document;\n // get cr
umbbar\n var cb = d.querySelector('#crumbs');\n // clear crumbs\n cb.te
xtContent = '';\n // build new crumbs\n for (var i=0, c; c=crumbs[i]; i++)
{\n var a = d.createElement('a');\n a.href = '#';\n a.textConten
t = c.localName;\n a.idx = i;\n a.onclick = function(event) {\n
var c;\n while (crumbs.length > this.idx) {\n c = crumbs.pop();
\n }\n inspect(c.shadow || c, c);\n event.preventDefault();
\n };\n cb.appendChild(d.createElement('li')).appendChild(a);\n }\n
};\n\n var inspect = function(inNode, inProxy) {\n // alias our document\n
var d = inspector.document;\n // reset list of drillable nodes\n drill
able = [];\n // memoize our crumb proxy\n var proxy = inProxy || inNode;\n
crumbs.push(proxy);\n // update crumbs\n displayCrumbs();\n // refl
ect local tree\n d.body.querySelector('#tree').innerHTML =\n '<pre>' +
output(inNode, inNode.childNodes) + '</pre>';\n };\n\n var forEach = Array.pr
ototype.forEach.call.bind(Array.prototype.forEach);\n\n var blacklisted = {STYL
E:1, SCRIPT:1, \"#comment\": 1, TEMPLATE: 1};\n var blacklist = function(inNode
) {\n return blacklisted[inNode.nodeName];\n };\n\n var output = function(i
nNode, inChildNodes, inIndent) {\n if (blacklist(inNode)) {\n return '';
\n }\n var indent = inIndent || '';\n if (inNode.localName || inNode.no
deType == 11) {\n var name = inNode.localName || 'shadow-root';\n //in
ChildNodes = ShadowDOM.localNodes(inNode);\n var info = indent + describe(i
nNode);\n // if only textNodes\n // TODO(sjmiles): make correct for Sh
adowDOM\n /*if (!inNode.children.length && inNode.localName !== 'content' &
& inNode.localName !== 'shadow') {\n info += catTextContent(inChildNodes)
;\n } else*/ {\n // TODO(sjmiles): native <shadow> has no reference
to its projection\n if (name == 'content' /*|| name == 'shadow'*/) {\n
inChildNodes = inNode.getDistributedNodes();\n }\n info +=
'<br/>';\n var ind = indent + ' ';\n forEach(inChildNod
es, function(n) {\n info += output(n, n.childNodes, ind);\n });\
n info += indent;\n }\n if (!({br:1}[name])) {\n info +=
'<tag></' + name + '></tag>';\n info += '<br/>';\n }\n } e
lse {\n var text = inNode.textContent.trim();\n info = text ? indent +
'\"' + text + '\"' + '<br/>' : '';\n }\n return info;\n };\n\n var catT
extContent = function(inChildNodes) {\n var info = '';\n forEach(inChildNo
des, function(n) {\n info += n.textContent.trim();\n });\n return inf
o;\n };\n\n var drillable = [];\n\n var describe = function(inNode) {\n va
r tag = '<tag>' + '<';\n var name = inNode.localName || 'shadow-root';\n
if (inNode.webkitShadowRoot || inNode.shadowRoot) {\n tag += ' <button id
x=\"' + drillable.length +\n '\" onclick=\"api.shadowize.call(this)\">' +
name + '</button>';\n drillable.push(inNode);\n } else {\n tag +=
name || 'shadow-root';\n }\n if (inNode.attributes) {\n forEach(inNod
e.attributes, function(a) {\n tag += ' ' + a.name + (a.value ? '=\"' + a.
value + '\"' : '');\n });\n }\n tag += '>'+ '</tag>';\n return
tag;\n };\n\n // remote api\n\n shadowize = function() {\n var idx = Numbe
r(this.attributes.idx.value);\n //alert(idx);\n var node = drillable[idx];
\n if (node) {\n inspect(node.webkitShadowRoot || node.shadowRoot, node)
\n } else {\n console.log(\"bad shadowize node\");\n console.dir(th
is);\n }\n };\n \n // export\n \n scope.output = output;\n \n})(window.
Inspector);\n\n\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserv
ed.\n * Use of this source code is governed by a BSD-style\n * license that can
be found in the LICENSE file.\n */\n(function(scope) {\n\n // TODO(sorvell): It
's desireable to provide a default stylesheet \n // that's convenient for styli
ng unresolved elements, but\n // it's cumbersome to have to include this manual
ly in every page.\n // It would make sense to put inside some HTMLImport but \n
// the HTMLImports polyfill does not allow loading of stylesheets \n // that
block rendering. Therefore this injection is tolerated here.\n\n var style = do
cument.createElement('style');\n style.textContent = ''\n + 'body {'\n
+ 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unreso
lved] {'\n + 'opacity: 0; display: block; overflow: hidden;' \n + ' }
\\n'\n ;\n var head = document.querySelector('head');\n head.insertBefore
(style, head.firstChild);\n\n})(Platform);\n","(function(scope) {\n\n function
withDependencies(task, depends) {\n depends = depends || [];\n if (!depend
s.map) {\n depends = [depends];\n }\n return task.apply(this, depends
.map(marshal));\n }\n\n function module(name, dependsOrFactory, moduleFactory)
{\n var module;\n switch (arguments.length) {\n case 0:\n ret
urn;\n case 1:\n module = null;\n break;\n case 2:\n
module = dependsOrFactory.apply(this);\n break;\n default:\n
module = withDependencies(moduleFactory, dependsOrFactory);\n break;\
n }\n modules[name] = module;\n };\n\n function marshal(name) {\n ret
urn modules[name];\n }\n\n var modules = {};\n\n function using(depends, task
) {\n HTMLImports.whenImportsReady(function() {\n withDependencies(task,
depends);\n });\n };\n\n // exports\n\n scope.marshal = marshal;\n scope
.module = module;\n scope.using = using;\n\n})(window);","/*\n * Copyright 2013
The Polymer Authors. All rights reserved.\n * Use of this source code is govern
ed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(func
tion(scope) {\n\nvar iterations = 0;\nvar callbacks = [];\nvar twiddle = documen
t.createTextNode('');\n\nfunction endOfMicrotask(callback) {\n twiddle.textCont
ent = iterations++;\n callbacks.push(callback);\n}\n\nfunction atEndOfMicrotask
() {\n while (callbacks.length) {\n callbacks.shift()();\n }\n}\n\nnew (win
dow.MutationObserver || JsMutationObserver)(atEndOfMicrotask)\n .observe(twiddl
e, {characterData: true})\n ;\n\n// exports\n\nscope.endOfMicrotask = endOfMicr
otask;\n\n})(Platform);\n\n","/*\n * Copyright 2013 The Polymer Authors. All rig
hts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar urlRes
olver = {\n resolveDom: function(root, url) {\n url = url || root.ownerDocum
ent.baseURI;\n this.resolveAttributes(root, url);\n this.resolveStyles(roo
t, url);\n // handle template.content\n var templates = root.querySelector
All('template');\n if (templates) {\n for (var i = 0, l = templates.leng
th, t; (i < l) && (t = templates[i]); i++) {\n if (t.content) {\n
this.resolveDom(t.content, url);\n }\n }\n }\n },\n resolveTe
mplate: function(template) {\n this.resolveDom(template.content, template.own
erDocument.baseURI);\n },\n resolveStyles: function(root, url) {\n var styl
es = root.querySelectorAll('style');\n if (styles) {\n for (var i = 0, l
= styles.length, s; (i < l) && (s = styles[i]); i++) {\n this.resolveSty
le(s, url);\n }\n }\n },\n resolveStyle: function(style, url) {\n u
rl = url || style.ownerDocument.baseURI;\n style.textContent = this.resolveCs
sText(style.textContent, url);\n },\n resolveCssText: function(cssText, baseUr
l) {\n cssText = replaceUrlsInCssText(cssText, baseUrl, CSS_URL_REGEXP);\n
return replaceUrlsInCssText(cssText, baseUrl, CSS_IMPORT_REGEXP);\n },\n reso
lveAttributes: function(root, url) {\n if (root.hasAttributes && root.hasAttr
ibutes()) {\n this.resolveElementAttributes(root, url);\n }\n // sear
ch for attributes that host urls\n var nodes = root && root.querySelectorAll(
URL_ATTRS_SELECTOR);\n if (nodes) {\n for (var i = 0, l = nodes.length,
n; (i < l) && (n = nodes[i]); i++) {\n this.resolveElementAttributes(n, u
rl);\n }\n }\n },\n resolveElementAttributes: function(node, url) {\n
url = url || node.ownerDocument.baseURI;\n URL_ATTRS.forEach(function(v) {
\n var attr = node.attributes[v];\n if (attr && attr.value &&\n
(attr.value.search(URL_TEMPLATE_SEARCH) < 0)) {\n var urlPath = resolve
RelativeUrl(url, attr.value);\n attr.value = urlPath;\n }\n });\n
}\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMPORT_REGEXP
= /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['href', 'src', 'acti
on'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + ']';\nvar URL_TEMP
LATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText, baseUrl, regex
p) {\n return cssText.replace(regexp, function(m, pre, url, post) {\n var ur
lPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativeUrl(baseUrl, ur
lPath);\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n}\n\nfunction
resolveRelativeUrl(baseUrl, url) {\n var u = new URL(url, baseUrl);\n return m
akeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(url) {\n var roo
t = document.baseURI;\n var u = new URL(url, root);\n if (u.host === root.host
&& u.port === root.port &&\n u.protocol === root.protocol) {\n return m
akeRelPath(root.pathname, u.pathname);\n } else {\n return url;\n }\n}\n\n/
/ make a relative path from source to target\nfunction makeRelPath(source, targe
t) {\n var s = source.split('/');\n var t = target.split('/');\n while (s.len
gth && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n for (var i = 0, l
= s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n return t.join('/');
\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n})(Platform);\n","/*\n *
Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source
code is goverened by a BSD-style\n * license that can be found in the LICENSE fi
le.\n */\n\n(function(global) {\n\n var registrationsTable = new WeakMap();\n\n
// We use setImmediate or postMessage for our future callback.\n var setImmed
iate = window.msSetImmediate;\n\n // Use post message to emulate setImmediate.\
n if (!setImmediate) {\n var setImmediateQueue = [];\n var sentinel = Str
ing(Math.random());\n window.addEventListener('message', function(e) {\n
if (e.data === sentinel) {\n var queue = setImmediateQueue;\n set
ImmediateQueue = [];\n queue.forEach(function(func) {\n func();\
n });\n }\n });\n setImmediate = function(func) {\n setIm
mediateQueue.push(func);\n window.postMessage(sentinel, '*');\n };\n }\
n\n // This is used to ensure that we never schedule 2 callas to setImmediate\n
var isScheduled = false;\n\n // Keep track of observers that needs to be noti
fied next time.\n var scheduledObservers = [];\n\n /**\n * Schedules |dispat
chCallback| to be called in the future.\n * @param {MutationObserver} observer
\n */\n function scheduleCallback(observer) {\n scheduledObservers.push(ob
server);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate
(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\n return
window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIfNeeded(node)
||\n node;\n }\n\n function dispatchCallbacks() {\n // http://dom.s
pec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Used to allow
a new setImmediate call above.\n\n var observers = scheduledObservers;\n s
cheduledObservers = [];\n // Sort observers based on their creation UID (incr
emental).\n observers.sort(function(o1, o2) {\n return o1.uid_ - o2.uid_
;\n });\n\n var anyNonEmpty = false;\n observers.forEach(function(obser
ver) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords();\n //
2.3. Remove all transient registered observers whose observer is mo.\n rem
oveTransientObserversFor(observer);\n\n // 2.4\n if (queue.length) {\n
observer.callback_(queue, observer);\n anyNonEmpty = true;\n
}\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallbacks();\n }\
n\n function removeTransientObserversFor(observer) {\n observer.nodes_.forEa
ch(function(node) {\n var registrations = registrationsTable.get(node);\n
if (!registrations)\n return;\n registrations.forEach(function(r
egistration) {\n if (registration.observer === observer)\n regis
tration.removeTransientObservers();\n });\n });\n }\n\n /**\n * This
function is used for the \"For each registered observer observer (with\n * ob
server's options as options) in target's list of registered observers,\n * run
these substeps:\" and the \"For each ancestor ancestor of target, and for\n *
each registered observer observer (with options options) in ancestor's list\n
* of registered observers, run these substeps:\" part of the algorithms. The\n
* |options.subtree| is checked to ensure that the callback is called\n * cor
rectly.\n *\n * @param {Node} target\n * @param {function(MutationObserver
Init):MutationRecord} callback\n */\n function forEachAncestorAndObserverEnqu
eueRecord(target, callback) {\n for (var node = target; node; node = node.par
entNode) {\n var registrations = registrationsTable.get(node);\n\n if
(registrations) {\n for (var j = 0; j < registrations.length; j++) {\n
var registration = registrations[j];\n var options = registratio
n.options;\n\n // Only target ignores subtree.\n if (node !==
target && !options.subtree)\n continue;\n\n var record = cal
lback(options);\n if (record)\n registration.enqueue(record)
;\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The cl
ass that maps to the DOM MutationObserver interface.\n * @param {Function} cal
lback.\n * @constructor\n */\n function JsMutationObserver(callback) {\n
this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n
this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype = {\n obser
ve: function(target, options) {\n target = wrapIfNeeded(target);\n\n /
/ 1.1\n if (!options.childList && !options.attributes && !options.character
Data ||\n\n // 1.2\n options.attributeOldValue && !options.att
ributes ||\n\n // 1.3\n options.attributeFilter && options.att
ributeFilter.length &&\n !options.attributes ||\n\n // 1.4
\n options.characterDataOldValue && !options.characterData) {\n\n
throw new SyntaxError();\n }\n\n var registrations = registrationsTa
ble.get(target);\n if (!registrations)\n registrationsTable.set(targ
et, registrations = []);\n\n // 2\n // If target's list of registered
observers already includes a registered\n // observer associated with the c
ontext object, replace that registered\n // observer's options with options
.\n var registration;\n for (var i = 0; i < registrations.length; i++)
{\n if (registrations[i].observer === this) {\n registration =
registrations[i];\n registration.removeListeners();\n registra
tion.options = options;\n break;\n }\n }\n\n // 3.\n
// Otherwise, add a new registered observer to target's list of registered\n
// observers with the context object as the observer and options as the\n
// options, and add target to context object's list of nodes on which it\n
// is registered.\n if (!registration) {\n registration = new R
egistration(this, target, options);\n registrations.push(registration);\n
this.nodes_.push(target);\n }\n\n registration.addListeners();
\n },\n\n disconnect: function() {\n this.nodes_.forEach(function(nod
e) {\n var registrations = registrationsTable.get(node);\n for (va
r i = 0; i < registrations.length; i++) {\n var registration = registra
tions[i];\n if (registration.observer === this) {\n registra
tion.removeListeners();\n registrations.splice(i, 1);\n //
Each node can only have one registered observer associated with\n //
this observer.\n break;\n }\n }\n }, this);\n
this.records_ = [];\n },\n\n takeRecords: function() {\n var copy
OfRecords = this.records_;\n this.records_ = [];\n return copyOfRecord
s;\n }\n };\n\n /**\n * @param {string} type\n * @param {Node} target\n
* @constructor\n */\n function MutationRecord(type, target) {\n this.ty
pe = type;\n this.target = target;\n this.addedNodes = [];\n this.remov
edNodes = [];\n this.previousSibling = null;\n this.nextSibling = null;\n
this.attributeName = null;\n this.attributeNamespace = null;\n this.old
Value = null;\n }\n\n function copyMutationRecord(original) {\n var record
= new MutationRecord(original.type, original.target);\n record.addedNodes = o
riginal.addedNodes.slice();\n record.removedNodes = original.removedNodes.sli
ce();\n record.previousSibling = original.previousSibling;\n record.nextSi
bling = original.nextSibling;\n record.attributeName = original.attributeName
;\n record.attributeNamespace = original.attributeNamespace;\n record.oldV
alue = original.oldValue;\n return record;\n };\n\n // We keep track of the
two (possibly one) records used in a single mutation.\n var currentRecord, rec
ordWithOldValue;\n\n /**\n * Creates a record without |oldValue| and caches i
t as |currentRecord| for\n * later use.\n * @param {string} oldValue\n * @
return {MutationRecord}\n */\n function getRecord(type, target) {\n return
currentRecord = new MutationRecord(type, target);\n }\n\n /**\n * Gets or c
reates a record with |oldValue| based in the |currentRecord|\n * @param {strin
g} oldValue\n * @return {MutationRecord}\n */\n function getRecordWithOldVa
lue(oldValue) {\n if (recordWithOldValue)\n return recordWithOldValue;\n
recordWithOldValue = copyMutationRecord(currentRecord);\n recordWithOldVa
lue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n function clea
rRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n\n /**\
n * @param {MutationRecord} record\n * @return {boolean} Whether the record
represents a record from the current\n * mutation event.\n */\n function re
cordRepresentsCurrentMutation(record) {\n return record === recordWithOldValu
e || record === currentRecord;\n }\n\n /**\n * Selects which record, if any,
to replace the last record in the queue.\n * This returns |null| if no record
should be replaced.\n *\n * @param {MutationRecord} lastRecord\n * @param
{MutationRecord} newRecord\n * @param {MutationRecord}\n */\n function sel
ectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord)\n ret
urn lastRecord;\n\n // Check if the the record we are adding represents the s
ame record. If\n // so, we keep the one with the oldValue in it.\n if (rec
ordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n return re
cordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used to represen
t a registered observer.\n * @param {MutationObserver} observer\n * @param {
Node} target\n * @param {MutationObserverInit} options\n * @constructor\n
*/\n function Registration(observer, target, options) {\n this.observer = ob
server;\n this.target = target;\n this.options = options;\n this.transi
entObservedNodes = [];\n }\n\n Registration.prototype = {\n enqueue: functi
on(record) {\n var records = this.observer.records_;\n var length = re
cords.length;\n\n // There are cases where we replace the last record with
the new record.\n // For example if the record represents the same mutation
we need to use\n // the one with the oldValue. If we get same record (this
can happen as we\n // walk up the tree) we ignore the new record.\n i
f (records.length > 0) {\n var lastRecord = records[length - 1];\n
var recordToReplaceLast = selectRecord(lastRecord, record);\n if (record
ToReplaceLast) {\n records[length - 1] = recordToReplaceLast;\n
return;\n }\n } else {\n scheduleCallback(this.observer);\n
}\n\n records[length] = record;\n },\n\n addListeners: function
() {\n this.addListeners_(this.target);\n },\n\n addListeners_: funct
ion(node) {\n var options = this.options;\n if (options.attributes)\n
node.addEventListener('DOMAttrModified', this, true);\n\n if (option
s.characterData)\n node.addEventListener('DOMCharacterDataModified', this
, true);\n\n if (options.childList)\n node.addEventListener('DOMNode
Inserted', this, true);\n\n if (options.childList || options.subtree)\n
node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n removeLi
steners: function() {\n this.removeListeners_(this.target);\n },\n\n
removeListeners_: function(node) {\n var options = this.options;\n if
(options.attributes)\n node.removeEventListener('DOMAttrModified', this,
true);\n\n if (options.characterData)\n node.removeEventListener('DO
MCharacterDataModified', this, true);\n\n if (options.childList)\n n
ode.removeEventListener('DOMNodeInserted', this, true);\n\n if (options.chi
ldList || options.subtree)\n node.removeEventListener('DOMNodeRemoved', t
his, true);\n },\n\n /**\n * Adds a transient observer on node. The tr
ansient observer gets removed\n * next time we deliver the change records.\n
* @param {Node} node\n */\n addTransientObserver: function(node) {\n
// Don't add transient observers on the target itself. We already have all
\n // the required listeners set up on the target.\n if (node === this
.target)\n return;\n\n this.addListeners_(node);\n this.transie
ntObservedNodes.push(node);\n var registrations = registrationsTable.get(no
de);\n if (!registrations)\n registrationsTable.set(node, registrati
ons = []);\n\n // We know that registrations does not contain this because
we already\n // checked if node === this.target.\n registrations.push(
this);\n },\n\n removeTransientObservers: function() {\n var transien
tObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes
= [];\n\n transientObservedNodes.forEach(function(node) {\n // Tran
sient observers are never added to the target.\n this.removeListeners_(no
de);\n\n var registrations = registrationsTable.get(node);\n for (
var i = 0; i < registrations.length; i++) {\n if (registrations[i] ===
this) {\n registrations.splice(i, 1);\n // Each node can o
nly have one registered observer associated with\n // this observer.\
n break;\n }\n }\n }, this);\n },\n\n hand
leEvent: function(e) {\n // Stop propagation since we are managing the prop
agation manually.\n // This means that other mutation events on the page wi
ll not work\n // correctly but that is by design.\n e.stopImmediatePro
pagation();\n\n switch (e.type) {\n case 'DOMAttrModified':\n
// http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var n
ame = e.attrName;\n var namespace = e.relatedNode.namespaceURI;\n
var target = e.target;\n\n // 1.\n var record = new getRec
ord('attributes', target);\n record.attributeName = name;\n re
cord.attributeNamespace = namespace;\n\n // 2.\n var oldValue
=\n e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;\n
\n forEachAncestorAndObserverEnqueueRecord(target, function(options) {\
n // 3.1, 4.2\n if (!options.attributes)\n re
turn;\n\n // 3.2, 4.3\n if (options.attributeFilter && opt
ions.attributeFilter.length &&\n options.attributeFilter.indexOf(
name) === -1 &&\n options.attributeFilter.indexOf(namespace) ===
-1) {\n return;\n }\n // 3.3, 4.4\n
if (options.attributeOldValue)\n return getRecordWithOldValue(old
Value);\n\n // 3.4, 4.5\n return record;\n });\n\
n break;\n\n case 'DOMCharacterDataModified':\n // http
://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n var target = e
.target;\n\n // 1.\n var record = getRecord('characterData', t
arget);\n\n // 2.\n var oldValue = e.prevValue;\n\n\n
forEachAncestorAndObserverEnqueueRecord(target, function(options) {\n
// 3.1, 4.2\n if (!options.characterData)\n return;\n\
n // 3.2, 4.3\n if (options.characterDataOldValue)\n
return getRecordWithOldValue(oldValue);\n\n // 3.3, 4.4\n
return record;\n });\n\n break;\n\n case 'DOMNo
deRemoved':\n this.addTransientObserver(e.target);\n // Fall t
hrough.\n case 'DOMNodeInserted':\n // http://dom.spec.whatwg.or
g/#concept-mo-queue-childlist\n var target = e.relatedNode;\n
var changedNode = e.target;\n var addedNodes, removedNodes;\n
if (e.type === 'DOMNodeInserted') {\n addedNodes = [changedNode];\n
removedNodes = [];\n } else {\n\n addedNodes = [];
\n removedNodes = [changedNode];\n }\n var previous
Sibling = changedNode.previousSibling;\n var nextSibling = changedNode.
nextSibling;\n\n // 1.\n var record = getRecord('childList', t
arget);\n record.addedNodes = addedNodes;\n record.removedNode
s = removedNodes;\n record.previousSibling = previousSibling;\n
record.nextSibling = nextSibling;\n\n forEachAncestorAndObserverEnque
ueRecord(target, function(options) {\n // 2.1, 3.2\n if (!
options.childList)\n return;\n\n // 2.2, 3.3\n
return record;\n });\n\n }\n\n clearRecords();\n }\n };
\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!global.MutationO
bserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})(this);\n","/
*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this s
ource code is governed by a BSD-style\n * license that can be found in the LICEN
SE file.\n */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};","/*\n * C
opyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source c
ode is governed by a BSD-style\n * license that can be found in the LICENSE file
.\n */\n\n(function(scope) {\n\n // imports\n var path = scope.path;\n var xh
r = scope.xhr;\n var flags = scope.flags;\n\n // TODO(sorvell): this loader su
pports a dynamic list of urls\n // and an oncomplete callback that is called wh
en the loader is done.\n // The polyfill currently does *not* need this dynamis
m or the onComplete\n // concept. Because of this, the loader could be simplifi
ed quite a bit.\n var Loader = function(onLoad, onComplete) {\n this.cache =
{};\n this.onload = onLoad;\n this.oncomplete = onComplete;\n this.inf
light = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\n addNodes
: function(nodes) {\n // number of transactions to complete\n this.inf
light += nodes.length;\n // commence transactions\n for (var i=0, l=no
des.length, n; (i<l) && (n=nodes[i]); i++) {\n this.require(n);\n }\
n // anything to do?\n this.checkDone();\n },\n addNode: functio
n(node) {\n // number of transactions to complete\n this.inflight++;\n
// commence transactions\n this.require(node);\n // anything to
do?\n this.checkDone();\n },\n require: function(elt) {\n var ur
l = elt.src || elt.href;\n // ensure we have a standard url that can be use
d\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\n elt.__
nodeUrl = url;\n // deduplication\n if (!this.dedupe(url, elt)) {\n
// fetch this resource\n this.fetch(url, elt);\n }\n },\n
dedupe: function(url, elt) {\n if (this.pending[url]) {\n // add to
list of nodes waiting for inUrl\n this.pending[url].push(elt);\n
// don't need fetch\n return true;\n }\n var resource;\n i
f (this.cache[url]) {\n this.onload(url, elt, this.cache[url]);\n
// finished this transaction\n this.tail();\n // don't need fetch\
n return true;\n }\n // first node waiting for inUrl\n thi
s.pending[url] = [elt];\n // need fetch (not a dupe)\n return false;\n
},\n fetch: function(url, elt) {\n flags.load && console.log('fetch'
, url, elt);\n if (url.match(/^data:/)) {\n // Handle Data URI Schem
e\n var pieces = url.split(',');\n var header = pieces[0];\n
var body = pieces[1];\n if(header.indexOf(';base64') > -1) {\n
body = atob(body);\n } else {\n body = decodeURIComponent(body)
;\n }\n setTimeout(function() {\n this.receive(url, elt
, null, body);\n }.bind(this), 0);\n } else {\n var receiveXh
r = function(err, resource) {\n this.receive(url, elt, err, resource);\
n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(sorv
ell): blocked on)\n // https://code.google.com/p/chromium/issues/detail?i
d=257221\n // xhr'ing for a document makes scripts in imports runnable; o
therwise\n // they are not; however, it requires that we have doctype=htm
l in\n // the import which is unacceptable. This is only needed on Chrome
\n // to avoid the bug above.\n /*\n if (isDocumentLink(elt
)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n
xhr.load(url, receiveXhr);\n }\n */\n }\n },\n receive:
function(url, elt, err, resource) {\n this.cache[url] = resource;\n v
ar $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i
]); i++) {\n //if (!err) {\n this.onload(url, p, resource);\n
//}\n this.tail();\n }\n this.pending[url] = null;\n },
\n tail: function() {\n --this.inflight;\n this.checkDone();\n }
,\n checkDone: function() {\n if (!this.inflight) {\n this.oncomp
lete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: fun
ction(request) {\n return (request.status >= 200 && request.status < 300)\n
|| (request.status === 304)\n || (request.status === 0);\n
},\n load: function(url, next, nextContext) {\n var request = new XMLHt
tpRequest();\n if (scope.flags.debug || scope.flags.bust) {\n url +=
'?' + Math.random();\n }\n request.open('GET', url, xhr.async);\n
request.addEventListener('readystatechange', function(e) {\n if (reques
t.readyState === 4) {\n next.call(nextContext, !xhr.ok(request) && requ
est,\n request.response || request.responseText, url);\n }\n
});\n request.send();\n return request;\n },\n loadDocumen
t: function(url, next, nextContext) {\n this.load(url, next, nextContext).r
esponseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n sc
ope.Loader = Loader;\n\n})(window.HTMLImports);\n","/*\n * Copyright 2013 The Po
lymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(
scope) {\n\nvar IMPORT_LINK_TYPE = 'import';\nvar flags = scope.flags;\nvar isIe
= /Trident/.test(navigator.userAgent);\n// TODO(sorvell): SD polyfill intrusion
\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIf
Needed(document) : document;\n\n// importParser\n// highlander object to manage
parsing of imports\n// parses import related elements\n// and ensures proper par
se order\n// parse order is enforced by crawling the tree and monitoring which e
lements\n// have been parsed; async parsing is also supported.\n\n// highlander
object for parsing a document tree\nvar importParser = {\n // parse selectors f
or main document elements\n documentSelectors: 'link[rel=' + IMPORT_LINK_TYPE +
']',\n // parse selectors for import document elements\n importsSelectors: [\
n 'link[rel=' + IMPORT_LINK_TYPE + ']',\n 'link[rel=stylesheet]',\n 'st
yle',\n 'script:not([type])',\n 'script[type=\"text/javascript\"]'\n ].jo
in(','),\n map: {\n link: 'parseLink',\n script: 'parseScript',\n styl
e: 'parseStyle'\n },\n // try to parse the next import in the tree\n parseNex
t: function() {\n var next = this.nextToParse();\n if (next) {\n this
.parse(next);\n }\n },\n parse: function(elt) {\n if (this.isParsed(elt)
) {\n flags.parse && console.log('[%s] is already parsed', elt.localName);\
n return;\n }\n var fn = this[this.map[elt.localName]];\n if (fn)
{\n this.markParsing(elt);\n fn.call(this, elt);\n }\n },\n // on
ly 1 element may be parsed at a time; parsing is async so, each\n // parsing im
plementation must inform the system that parsing is complete\n // via markParsi
ngComplete.\n markParsing: function(elt) {\n flags.parse && console.log('par
sing', elt);\n this.parsingElement = elt;\n },\n markParsingComplete: funct
ion(elt) {\n elt.__importParsed = true;\n if (elt.__importElement) {\n
elt.__importElement.__importParsed = true;\n }\n this.parsingElement = n
ull;\n flags.parse && console.log('completed', elt);\n this.parseNext();\n
},\n parseImport: function(elt) {\n elt.import.__importParsed = true;\n
// TODO(sorvell): consider if there's a better way to do this;\n // expose a
n imports parsing hook; this is needed, for example, by the\n // CustomElemen
ts polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports.__i
mportsParsingHook(elt);\n }\n // fire load event\n if (elt.__resource)
{\n elt.dispatchEvent(new CustomEvent('load', {bubbles: false})); \n
} else {\n elt.dispatchEvent(new CustomEvent('error', {bubbles: false}));\n
}\n // TODO(sorvell): workaround for Safari addEventListener not working\
n // for elements not in the main document.\n if (elt.__pending) {\n
var fn;\n while (elt.__pending.length) {\n fn = elt.__pending.shift(
);\n if (fn) {\n fn({target: elt});\n }\n }\n }\n
this.markParsingComplete(elt);\n },\n parseLink: function(linkElt) {\n
if (nodeIsImport(linkElt)) {\n this.parseImport(linkElt);\n } else {\n
// make href absolute\n linkElt.href = linkElt.href;\n this.parseG
eneric(linkElt);\n }\n },\n parseStyle: function(elt) {\n // TODO(sorvel
l): style element load event can just not fire so clone styles\n var src = el
t;\n elt = cloneStyle(elt);\n elt.__importElement = src;\n this.parseGe
neric(elt);\n },\n parseGeneric: function(elt) {\n this.trackElement(elt);\
n document.head.appendChild(elt);\n },\n // tracks when a loadable element
has loaded\n trackElement: function(elt, callback) {\n var self = this;\n
var done = function(e) {\n if (callback) {\n callback(e);\n }\
n self.markParsingComplete(elt);\n };\n elt.addEventListener('load',
done);\n elt.addEventListener('error', done);\n\n // NOTE: IE does not fir
e \"load\" event for styles that have already loaded\n // This is in violatio
n of the spec, so we try our hardest to work around it\n if (isIe && elt.loca
lName === 'style') {\n var fakeLoad = false;\n // If there's not @impo
rt in the textContent, assume it has loaded\n if (elt.textContent.indexOf('
@import') == -1) {\n fakeLoad = true;\n // if we have a sheet, we ha
ve been parsed\n } else if (elt.sheet) {\n fakeLoad = true;\n
var csr = elt.sheet.cssRules;\n var len = csr ? csr.length : 0;\n
// search the rules for @import's\n for (var i = 0, r; (i < len) && (r =
csr[i]); i++) {\n if (r.type === CSSRule.IMPORT_RULE) {\n /
/ if every @import has resolved, fake the load\n fakeLoad = fakeLoad
&& Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a
fake load event and continue parsing\n if (fakeLoad) {\n elt.dispatc
hEvent(new CustomEvent('load', {bubbles: false}));\n }\n }\n },\n // N
OTE: execute scripts by injecting them and watching for the load/error\n // eve
nt. Inline scripts are handled via dataURL's because browsers tend to\n // prov
ide correct parsing errors in this case. If this has any compatibility\n // iss
ues, we can switch to injecting the inline script with textContent.\n // Script
s with dataURL's do not appear to generate load events and therefore\n // we as
sume they execute synchronously.\n parseScript: function(scriptElt) {\n var
script = document.createElement('script');\n script.__importElement = scriptE
lt;\n script.src = scriptElt.src ? scriptElt.src : \n generateScriptDa
taUrl(scriptElt);\n scope.currentScript = scriptElt;\n this.trackElement(s
cript, function(e) {\n script.parentNode.removeChild(script);\n scope.
currentScript = null; \n });\n document.head.appendChild(script);\n },\n
// determine the next element in the tree which should be parsed\n nextToPars
e: function() {\n return !this.parsingElement && this.nextToParseInDoc(mainDo
c);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = doc.queryS
electorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes.length,
p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n i
f (this.hasResource(n)) {\n return nodeIsImport(n) ? this.nextToParseIn
Doc(n.import, n) : n;\n } else {\n return;\n }\n }\n
}\n // all nodes have been parsed, ready to parse import, if any\n ret
urn link;\n },\n // return the set of parse selectors relevant for this node.\
n parseSelectorsForNode: function(node) {\n var doc = node.ownerDocument ||
node;\n return doc === mainDoc ? this.documentSelectors : this.importsSelecto
rs;\n },\n isParsed: function(node) {\n return node.__importParsed;\n },\n
hasResource: function(node) {\n if (nodeIsImport(node) && !node.import) {\n
return false;\n }\n return true;\n }\n};\n\nfunction nodeIsImport(e
lt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}
\n\nfunction generateScriptDataUrl(script) {\n var scriptContent = generateScri
ptContent(script), b64;\n try {\n b64 = btoa(scriptContent);\n } catch(e) {
\n b64 = btoa(unescape(encodeURIComponent(scriptContent)));\n console.warn
('Script contained non-latin characters that were forced ' +\n 'to latin. S
ome characters may be wrong.', script);\n }\n return 'data:text/javascript;bas
e64,' + b64;\n}\n\nfunction generateScriptContent(script) {\n return script.tex
tContent + generateSourceMapHint(script);\n}\n\n// calculate source map hint\nfu
nction generateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n if
(!moniker) {\n moniker = script.ownerDocument.baseURI;\n // there could be
more than one script this url\n var tag = '[' + Math.floor((Math.random()+1)
*1000) + ']';\n // TODO(sjmiles): Polymer hack, should be pluggable if we nee
d to allow \n // this sort of thing\n var matches = script.textContent.mat
ch(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n //
tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sourc
eURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style w
ith proper path resolution for main document\n// NOTE: styles are the only eleme
nts that require direct path fixup.\nfunction cloneStyle(style) {\n var clone =
style.ownerDocument.createElement('style');\n clone.textContent = style.textCo
ntent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup:
style elements in imports must be made relative to the main \n// document. We fi
xup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n
var CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = {\
n resolveUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n
var resolver = doc.createElement('a');\n style.textContent = this.resolveUr
lsInCssText(style.textContent, resolver);\n return style; \n },\n resolveU
rlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText,
urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEXP
);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n re
turn text.replace(regexp, function(m, pre, url, post) {\n var urlPath = url
.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.hr
ef;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n\n
// exports\nscope.parser = importParser;\nscope.path = path;\nscope.isIE = isIe;
\n\n})(HTMLImports);\n","/*\n * Copyright 2013 The Polymer Authors. All rights r
eserved.\n * Use of this source code is governed by a BSD-style\n * license that
can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar hasNative =
('import' in document.createElement('link'));\nvar useNative = hasNative;\nvar
flags = scope.flags;\nvar IMPORT_LINK_TYPE = 'import';\n\n// TODO(sorvell): SD p
olyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n ShadowDOMPolyf
ill.wrapIfNeeded(document) : document;\n\nif (!useNative) {\n\n // imports\n v
ar xhr = scope.xhr;\n var Loader = scope.Loader;\n var parser = scope.parser;\
n\n // importer\n // highlander object to manage loading of imports\n\n // fo
r any document, importer:\n // - loads any linked import documents (with dedupi
ng)\n\n var importer = {\n documents: {},\n // nodes to load in the mian
document\n documentPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n
// nodes to load in imports\n importsPreloadSelectors: [\n 'link[rel=
' + IMPORT_LINK_TYPE + ']'\n ].join(','),\n loadNode: function(node) {\n
importLoader.addNode(node);\n },\n // load all loadable elements withi
n the parent element\n loadSubtree: function(parent) {\n var nodes = thi
s.marshalNodes(parent);\n // add these nodes to loader's queue\n impor
tLoader.addNodes(nodes);\n },\n marshalNodes: function(parent) {\n //
all preloadable nodes in inDocument\n return parent.querySelectorAll(this.
loadSelectorsForNode(parent));\n },\n // find the proper set of load selec
tors for a given node\n loadSelectorsForNode: function(node) {\n var doc
= node.ownerDocument || node;\n return doc === mainDoc ? this.documentPrel
oadSelectors :\n this.importsPreloadSelectors;\n },\n loaded: fun
ction(url, elt, resource) {\n flags.load && console.log('loaded', url, elt)
;\n // store generic resource\n // TODO(sorvell): fails for nodes insi
de <template>.content\n // see https://code.google.com/p/chromium/issues/de
tail?id=249381.\n elt.__resource = resource;\n if (isDocumentLink(elt)
) {\n var doc = this.documents[url];\n // if we've never seen a do
cument at this url\n if (!doc) {\n // generate an HTMLDocument f
rom data\n doc = makeDocument(resource, url);\n doc.__importLi
nk = elt;\n // TODO(sorvell): we cannot use MO to detect parsed nodes b
ecause\n // SD polyfill does not report these as mutations.\n
this.bootDocument(doc);\n // cache document\n this.documents[u
rl] = doc;\n }\n // don't store import record until we're actually
loaded\n // store document resource\n elt.import = doc;\n }\
n parser.parseNext();\n },\n bootDocument: function(doc) {\n thi
s.loadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },
\n loadedAll: function() {\n parser.parseNext();\n }\n };\n\n // lo
ader singleton\n var importLoader = new Loader(importer.loaded.bind(importer),
\n importer.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\
n return isLinkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt,
rel) {\n return elt.localName === 'link' && elt.getAttribute('rel') === rel;\
n }\n\n function isScript(elt) {\n return elt.localName === 'script';\n }\
n\n function makeDocument(resource, url) {\n // create a new HTML document\n
var doc = resource;\n if (!(doc instanceof Document)) {\n doc = docu
ment.implementation.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache t
he new document's source url\n doc._URL = url;\n // establish a relative p
ath via <base>\n var base = doc.createElement('base');\n base.setAttribute
('href', url);\n // add baseURI support to browsers (IE) that lack it.\n i
f (!doc.baseURI) {\n doc.baseURI = url;\n }\n // ensure UTF-8 charset
\n var meta = doc.createElement('meta');\n meta.setAttribute('charset', 'u
tf-8');\n\n doc.head.appendChild(meta);\n doc.head.appendChild(base);\n
// install HTML last as it may trigger CustomElement upgrades\n // TODO(sjmi
les): problem wrt to template boostrapping below,\n // template bootstrapping
must (?) come before element upgrade\n // but we cannot bootstrap templates
until they are in a document\n // which is too late\n if (!(resource insta
nceof Document)) {\n // install html\n doc.body.innerHTML = resource;\
n }\n // TODO(sorvell): ideally this code is not aware of Template polyfil
l,\n // but for now the polyfill needs help to bootstrap these templates\n
if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLT
emplateElement.bootstrap(doc);\n }\n return doc;\n }\n} else {\n // do n
othing if using native imports\n var importer = {};\n}\n\n// NOTE: We cannot po
lyfill document.currentScript because it's not possible\n// both to override and
maintain the ability to capture the native value;\n// therefore we choose to ex
pose _currentScript both when native imports\n// and the polyfill are in use.\nv
ar currentScriptDescriptor = {\n get: function() {\n return HTMLImports.curr
entScript || document.currentScript;\n },\n configurable: true\n};\n\nObject.d
efineProperty(document, '_currentScript', currentScriptDescriptor);\nObject.defi
neProperty(mainDoc, '_currentScript', currentScriptDescriptor);\n\n// Polyfill d
ocument.baseURI for browsers without it.\nif (!document.baseURI) {\n var baseUR
IDescriptor = {\n get: function() {\n return window.location.href;\n
},\n configurable: true\n };\n\n Object.defineProperty(document, 'baseURI',
baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURIDescrip
tor);\n}\n\n// call a callback when all HTMLImports in the document at call (or
at least\n// document ready) time have loaded.\n// 1. ensure the document is in
a ready state (has dom), then \n// 2. watch for loading of imports and call cal
lback when done\nfunction whenImportsReady(callback, doc) {\n doc = doc || main
Doc;\n // if document is loading, wait and try again\n whenDocumentReady(funct
ion() {\n watchImportsLoad(callback, doc);\n }, doc);\n}\n\n// call the call
back when the document is in a ready state (has dom)\nvar requiredReadyState = H
TMLImports.isIE ? 'complete' : 'interactive';\nvar READY_EVENT = 'readystatechan
ge';\nfunction isDocumentReady(doc) {\n return (doc.readyState === 'complete' |
|\n doc.readyState === requiredReadyState);\n}\n\n// call <callback> when w
e ensure the document is in a ready state\nfunction whenDocumentReady(callback,
doc) {\n if (!isDocumentReady(doc)) {\n var checkReady = function() {\n
if (doc.readyState === 'complete' || \n doc.readyState === requiredRea
dyState) {\n doc.removeEventListener(READY_EVENT, checkReady);\n w
henDocumentReady(callback, doc);\n }\n }\n doc.addEventListener(READY
_EVENT, checkReady);\n } else if (callback) {\n callback();\n }\n}\n\n// ca
ll <callback> when we ensure all imports have loaded\nfunction watchImportsLoad(
callback, doc) {\n var imports = doc.querySelectorAll('link[rel=import]');\n v
ar loaded = 0, l = imports.length;\n function checkDone(d) { \n if (loaded =
= l) {\n // go async to ensure parser isn't stuck on a script tag\n re
questAnimationFrame(callback);\n }\n }\n function loadedImport(e) {\n lo
aded++;\n checkDone();\n }\n if (l) {\n for (var i=0, imp; (i<l) && (imp
=imports[i]); i++) {\n if (isImportLoaded(imp)) {\n loadedImport.cal
l(imp);\n } else {\n imp.addEventListener('load', loadedImport);\n
imp.addEventListener('error', loadedImport);\n }\n }\n } else {\n
checkDone();\n }\n}\n\nfunction isImportLoaded(link) {\n return useNative
? (link.import && (link.import.readyState !== 'loading')) :\n link.__import
Parsed;\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useNative = useNat
ive;\nscope.importer = importer;\nscope.whenImportsReady = whenImportsReady;\nsc
ope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\nscope.isImportLoaded = isImportLoaded;
\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\n"," /*\nCopyrig
ht 2013 The Polymer Authors. All rights reserved.\nUse of this source code is go
verned by a BSD-style\nlicense that can be found in the LICENSE file.\n*/\n\n(fu
nction(scope){\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importSele
ctor = 'link[rel=' + IMPORT_LINK_TYPE + ']';\nvar importer = scope.importer;\n\n
// we track mutations for addedNodes, looking for imports\nfunction handler(muta
tions) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mutations[i]); i++)
{\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNodes(m
.addedNodes);\n }\n }\n}\n\n// find loadable elements and add them to the im
porter\nfunction addedNodes(nodes) {\n for (var i=0, l=nodes.length, n; (i<l) &
& (n=nodes[i]); i++) {\n if (shouldLoadNode(n)) {\n importer.loadNode(n)
;\n }\n if (n.children && n.children.length) {\n addedNodes(n.childre
n);\n }\n }\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType =
== 1) && matches.call(node,\n importer.loadSelectorsForNode(node));\n}\n\n/
/ x-plat matches\nvar matches = HTMLElement.prototype.matches || \n HTMLEleme
nt.prototype.matchesSelector || \n HTMLElement.prototype.webkitMatchesSelecto
r ||\n HTMLElement.prototype.mozMatchesSelector ||\n HTMLElement.prototype
.msMatchesSelector;\n\nvar observer = new MutationObserver(handler);\n\n// obser
ve the given root for loadable elements\nfunction observe(root) {\n observer.ob
serve(root, {childList: true, subtree: true});\n}\n\n// exports\n// TODO(sorvell
): factor so can put on scope\nscope.observe = observe;\nimporter.observe = obse
rve;\n\n})(HTMLImports);\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n(function(){\n\n// bootstrap\n\n//
IE shim for CustomEvent\nif (typeof window.CustomEvent !== 'function') {\n wind
ow.CustomEvent = function(inType, dictionary) {\n var e = document.createEve
nt('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === fals
e ? false : true,\n dictionary.cancelable === false ? false : true,\n
dictionary.detail);\n return e;\n };\n}\n\n// TODO(sorvell): SD polyfil
l intrusion\nvar doc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill
.wrapIfNeeded(document) : document;\n\n// Fire the 'HTMLImportsLoaded' event whe
n imports in document at load time \n// have loaded. This event is required to s
imulate the script blocking \n// behavior of native imports. A main document scr
ipt that needs to be sure\n// imports have loaded should wait for this event.\nH
TMLImports.whenImportsReady(function() {\n HTMLImports.ready = true;\n HTMLImp
orts.readyTime = new Date().getTime();\n doc.dispatchEvent(\n new CustomEven
t('HTMLImportsLoaded', {bubbles: true})\n );\n});\n\n\n// no need to bootstrap
the polyfill when native imports is available.\nif (!HTMLImports.useNative) {\n
function bootstrap() {\n HTMLImports.importer.bootDocument(doc);\n }\n \
n // TODO(sorvell): SD polyfill does *not* generate mutations for nodes added\n
// by the parser. For this reason, we must wait until the dom exists to \n //
bootstrap.\n if (document.readyState === 'complete' ||\n (document.readyS
tate === 'interactive' && !window.attachEvent)) {\n bootstrap();\n } else {\
n document.addEventListener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\
n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of t
his source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\nwindow.CustomElements = window.CustomElements || {flags:{}};
"," /*\r\nCopyright 2013 The Polymer Authors. All rights reserved.\r\nUse of thi
s source code is governed by a BSD-style\r\nlicense that can be found in the LIC
ENSE file.\r\n*/\r\n\r\n(function(scope){\r\n\r\nvar logFlags = window.logFlags
|| {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_TY
PE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element,
data)' function\r\n// to each element\r\n// if 'find' returns true for 'element'
, do not search element's subtree\r\nfunction findAll(node, find, data) {\r\n v
ar e = node.firstElementChild;\r\n if (!e) {\r\n e = node.firstChild;\r\n
while (e && e.nodeType !== Node.ELEMENT_NODE) {\r\n e = e.nextSibling;\r\n
}\r\n }\r\n while (e) {\r\n if (find(e, data) !== true) {\r\n find
All(e, find, data);\r\n }\r\n e = e.nextElementSibling;\r\n }\r\n return
null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoots
(node, cb) {\r\n var root = node.shadowRoot;\r\n while(root) {\r\n forSubtr
ee(root, cb);\r\n root = root.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk the
subtree rooted at node, including descent into shadow-roots,\r\n// applying 'cb
' to each element\r\nfunction forSubtree(node, cb) {\r\n //logFlags.dom && node
.childNodes && node.childNodes.length && console.group('subTree: ', node);\r\n
findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n }\r
\n forRoots(e, cb);\r\n });\r\n forRoots(node, cb);\r\n //logFlags.dom &&
node.childNodes && node.childNodes.length && console.groupEnd();\r\n}\r\n\r\n//
manage lifecycle on added node\r\nfunction added(node) {\r\n if (upgrade(node))
{\r\n insertedNode(node);\r\n return true;\r\n }\r\n inserted(node);\r\
n}\r\n\r\n// manage lifecycle on added node's subtree only\r\nfunction addedSubt
ree(node) {\r\n forSubtree(node, function(e) {\r\n if (added(e)) {\r\n
return true;\r\n }\r\n });\r\n}\r\n\r\n// manage lifecycle on added node and
it's subtree\r\nfunction addedNode(node) {\r\n return added(node) || addedSubt
ree(node);\r\n}\r\n\r\n// upgrade custom elements at node, if applicable\r\nfunc
tion upgrade(node) {\r\n if (!node.__upgraded__ && node.nodeType === Node.ELEME
NT_NODE) {\r\n var type = node.getAttribute('is') || node.localName;\r\n v
ar definition = scope.registry[type];\r\n if (definition) {\r\n logFlags
.dom && console.group('upgrade:', node.localName);\r\n scope.upgrade(node);
\r\n logFlags.dom && console.groupEnd();\r\n return true;\r\n }\r\n
}\r\n}\r\n\r\nfunction insertedNode(node) {\r\n inserted(node);\r\n if (inDo
cument(node)) {\r\n forSubtree(node, function(e) {\r\n inserted(e);\r\n
});\r\n }\r\n}\r\n\r\n// TODO(sorvell): on platforms without MutationObserve
r, mutations may not be\r\n// reliable and therefore attached/detached are not r
eliable.\r\n// To make these callbacks less likely to fail, we defer all inserts
and removes\r\n// to give a chance for elements to be inserted into dom.\r\n//
This ensures attachedCallback fires for elements that are created and\r\n// imme
diately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObserver ||
\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope.hasPo
lyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = false;\r
\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingMutatio
ns.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = true;\r
\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r\n
setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction takeMut
ations() {\r\n isPendingMutations = false;\r\n var $p = pendingMutations;\r\n
for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n }\r\n
pendingMutations = [];\r\n}\r\n\r\nfunction inserted(element) {\r\n if (hasPo
lyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(element)
;\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TODO
(sjmiles): if there are descents into trees that can never have inDocument(*) tr
ue, fix this\r\nfunction _inserted(element) {\r\n // TODO(sjmiles): it's possib
le we were inserted and removed in the space\r\n // of one microtask, in which
case we won't be 'inDocument' here\r\n // But there are other cases where we ar
e testing for inserted without\r\n // specific knowledge of mutations, and must
test 'inDocument' to determine\r\n // whether to call inserted\r\n // If we c
an factor these cases into separate code paths we can have\r\n // better diagno
stics.\r\n // TODO(sjmiles): when logging, do work on all custom elements so we
can\r\n // track behavior even when callbacks not defined\r\n //console.log('
inserted: ', element.localName);\r\n if (element.attachedCallback || element.de
tachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom
&& console.group('inserted:', element.localName);\r\n if (inDocument(element)
) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if
we are in a 'removed' state, bluntly adjust to an 'inserted' state\r\n if (
element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\n
// if we are 'over inserted', squelch the callback\r\n if (element.__inser
ted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.localNam
e,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (
element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:',
element.localName);\r\n element.attachedCallback();\r\n }\r\n }\r
\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction removedNod
e(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n removed
(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfillMutati
ons) {\r\n deferMutation(function() {\r\n _removed(element);\r\n });\
r\n } else {\r\n _removed(element);\r\n }\r\n}\r\n\r\nfunction _removed(ele
ment) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we c
an track\r\n // behavior even when callbacks not defined\r\n if (element.attac
hedCallback || element.detachedCallback || (element.__upgraded__ && logFlags.dom
)) {\r\n logFlags.dom && console.group('removed:', element.localName);\r\n
if (!inDocument(element)) {\r\n element.__inserted = (element.__inserted |
| 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'rem
oved' state\r\n if (element.__inserted > 0) {\r\n element.__inserted
= 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\n
if (element.__inserted < 0) {\r\n logFlags.dom && console.warn('remo
ved:', element.localName,\r\n 'insert/remove count:', element.__inser
ted)\r\n } else if (element.detachedCallback) {\r\n element.detached
Callback();\r\n }\r\n }\r\n logFlags.dom && console.groupEnd();\r\n
}\r\n}\r\n\r\n// SD polyfill intrustion due mainly to the fact that 'document'\r
\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return window
.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node;\r\n}\
r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc = wrapI
fNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return true;
\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction watchSh
adow(node) {\r\n if (node.shadowRoot && !node.shadowRoot.__watched) {\r\n lo
gFlags.dom && console.log('watching shadow-root for: ', node.localName);\r\n
// watch all unwatched roots...\r\n var root = node.shadowRoot;\r\n while
(root) {\r\n watchRoot(root);\r\n root = root.olderShadowRoot;\r\n
}\r\n }\r\n}\r\n\r\nfunction watchRoot(root) {\r\n if (!root.__watched) {\r\n
observe(root);\r\n root.__watched = true;\r\n }\r\n}\r\n\r\nfunction hand
ler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutations[0];\
r\n if (mx && mx.type === 'childList' && mx.addedNodes) {\r\n if (mx.a
ddedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d && d !
== document && !d.host) {\r\n d = d.parentNode;\r\n }\r\n
var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '';\r\n
u = u.split('/?').shift().split('/').pop();\r\n }\r\n }\r\n
console.group('mutations (%d) [%s]', mutations.length, u || '');\r\n }\r\n
//\r\n mutations.forEach(function(mx) {\r\n //logFlags.dom && console.group(
'mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNode
s, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n // nodes add
ed may need lifecycle management\r\n addedNode(n);\r\n });\r\n
// removed nodes may need lifecycle management\r\n forEach(mx.removedNodes,
function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n removedNode(n)
;\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n });\r\
n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nvar observer = new MutationO
bserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): ask Raf
why we have to call handler ourselves\r\n handler(observer.takeRecords());\r\n
takeMutations();\r\n}\r\n\r\nvar forEach = Array.prototype.forEach.call.bind(A
rray.prototype.forEach);\r\n\r\nfunction observe(inRoot) {\r\n observer.observe
(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDocument
(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n logF
lags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').pop());\
r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\nfuncti
on upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n //console.log('
upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade contain
ed imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IMPO
RT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=imports
[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n upgradeDocumen
tTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// expor
ts\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = watchSha
dow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeAll = a
ddedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = insert
edNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDocument
= upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window.Cus
tomElements);\r\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserv
ed.\n * Use of this source code is governed by a BSD-style\n * license that can
be found in the LICENSE file.\n */\n\n/**\n * Implements `document.register`\n *
@module CustomElements\n*/\n\n/**\n * Polyfilled extensions to the `document` o
bject.\n * @class Document\n*/\n\n(function(scope) {\n\n// imports\n\nif (!scope
) {\n scope = window.CustomElements = {flags:{}};\n}\nvar flags = scope.flags;\
n\n// native document.registerElement?\n\nvar hasNative = Boolean(document.regis
terElement);\n// TODO(sorvell): See https://github.com/Polymer/polymer/issues/39
9\n// we'll address this by defaulting to CE polyfill in the presence of the SD\
n// polyfill. This will avoid spamming excess attached/detached callbacks.\n// I
f there is a compelling need to run CE native with SD polyfill,\n// we'll need t
o fix this issue.\nvar useNative = !flags.register && hasNative && !window.Shado
wDOMPolyfill;\n\nif (useNative) {\n\n // stub\n var nop = function() {};\n\n
// exports\n scope.registry = {};\n scope.upgradeElement = nop;\n\n scope.wat
chShadow = nop;\n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgr
adeSubtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop
;\n scope.upgradeDocumentTree = nop;\n scope.takeRecords = nop;\n scope.reser
vedTagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the
document.\n *\n * When a registered element is created, a `readyCallback` m
ethod is called\n * in the scope of the element. The `readyCallback` method ca
n be specified on\n * either `options.prototype` or `options.lifecycle` with t
he latter taking\n * precedence.\n *\n * @method register\n * @param {St
ring} name The tag name to register. Must include a dash ('-'),\n * for exa
mple 'x-component'.\n * @param {Object} options\n * @param {String} [opti
ons.extends]\n * (_off spec_) Tag name of an element to extend (or blank
for a new\n * element). This parameter is not part of the specification,
but instead\n * is a hint for the polyfill because the extendee is diffic
ult to infer.\n * Remember that the input prototype must chain to the ext
ended element's\n * prototype (or HTMLElement.prototype) regardless of th
e value of\n * `extends`.\n * @param {Object} options.prototype The
prototype to use for the new\n * element. The prototype must inherit from
HTMLElement.\n * @param {Object} [options.lifecycle]\n * Callbacks
that fire at important phases in the life of the custom\n * element.\n
*\n * @example\n * FancyButton = document.registerElement(\"fancy-butto
n\", {\n * extends: 'button',\n * prototype: Object.create(HTM
LButtonElement.prototype, {\n * readyCallback: {\n * val
ue: function() {\n * console.log(\"a fancy-button was created\",\
n * }\n * }\n * })\n * });\n * @return
{Function} Constructor for the newly registered type.\n */\n function regist
er(name, options) {\n //console.warn('document.registerElement(\"' + name + '
\", ', options, ')');\n // construct a defintion out of options\n // TODO(
sjmiles): probably should clone options instead of mutating it\n var definiti
on = options || {};\n if (!name) {\n // TODO(sjmiles): replace with more
appropriate error (EricB can probably\n // offer guidance)\n throw ne
w Error('document.registerElement: first argument `name` must not be empty');\n
}\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with mor
e appropriate error (EricB can probably\n // offer guidance)\n throw n
ew Error('document.registerElement: first argument (\\'name\\') must contain a d
ash (\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n
// prevent registering reserved names\n if (isReservedTag(name)) {\n thr
ow new Error('Failed to execute \\'registerElement\\' on \\'Document\\': Registr
ation failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n
}\n // elements may only be registered once\n if (getRegisteredDefinit
ion(name)) {\n throw new Error('DuplicateDefinitionError: a type with name
\\'' + String(name) + '\\' is already registered');\n }\n // must have a p
rototype, default to an extension of HTMLElement\n // TODO(sjmiles): probably
should throw if no prototype, check spec\n if (!definition.prototype) {\n
// TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('Options missing required prototyp
e property');\n }\n // record name\n definition.__name = name.toLowerCa
se();\n // ensure a lifecycle object so we don't have to null test it\n de
finition.lifecycle = definition.lifecycle || {};\n // build a list of ancestr
al custom elements (for native base detection)\n // TODO(sjmiles): we used to
need to store this, but current code only\n // uses it in 'resolveTagName':
it should probably be inlined\n definition.ancestry = ancestry(definition.ext
ends);\n // extensions of native specializations of HTMLElement require local
Name\n // to remain native, and use secondary 'is' specifier for extension ty
pe\n resolveTagName(definition);\n // some platforms require modifications
to the user-supplied prototype\n // chain\n resolvePrototypeChain(definit
ion);\n // overrides to implement attributeChanged callback\n overrideAttr
ibuteApi(definition.prototype);\n // 7.1.5: Register the DEFINITION with DOCU
MENT\n registerDefinition(definition.__name, definition);\n // 7.1.7. Run
custom element constructor generation algorithm with PROTOTYPE\n // 7.1.8. Re
turn the output of the previous step.\n definition.ctor = generateConstructor
(definition);\n definition.ctor.prototype = definition.prototype;\n // for
ce our .constructor to be our actual constructor\n definition.prototype.const
ructor = definition.ctor;\n // if initial parsing is complete\n if (scope.
ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgr
adeDocumentTree(document);\n }\n return definition.ctor;\n }\n\n functio
n isReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\
n if (name === reservedTagList[i]) {\n return true;\n }\n }\
n }\n\n var reservedTagList = [\n 'annotation-xml', 'color-profile', 'font-
face', 'font-face-src',\n 'font-face-uri', 'font-face-format', 'font-face-nam
e', 'missing-glyph'\n ];\n\n function ancestry(extnds) {\n var extendee = g
etRegisteredDefinition(extnds);\n if (extendee) {\n return ancestry(exte
ndee.extends).concat([extendee]);\n }\n return [];\n }\n\n function reso
lveTagName(definition) {\n // if we are explicitly extending something, that
thing is our\n // baseTag, unless it represents a custom component\n var b
aseTag = definition.extends;\n // if our ancestry includes custom components,
we only have a\n // baseTag if one of them does\n for (var i=0, a; (a=def
inition.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our
tag is our baseTag, if it exists, and otherwise just our name\n definition.ta
g = baseTag || definition.__name;\n if (baseTag) {\n // if there is a ba
se tag, use secondary 'is' specifier\n definition.is = definition.__name;\n
}\n }\n\n function resolvePrototypeChain(definition) {\n // if we don't
support __proto__ we need to locate the native level\n // prototype for prec
ise mixing in\n if (!Object.__proto__) {\n // default prototype\n v
ar nativePrototype = HTMLElement.prototype;\n // work out prototype when us
ing type-extension\n if (definition.is) {\n var inst = document.crea
teElement(definition.tag);\n nativePrototype = Object.getPrototypeOf(inst
);\n }\n // ensure __proto__ reference is installed at each point on t
he prototype\n // chain.\n // NOTE: On platforms without __proto__, a
mixin strategy is used instead\n // of prototype swizzling. In this case, t
his generated __proto__ provides\n // limited support for prototype travers
al.\n var proto = definition.prototype, ancestor;\n while (proto && (p
roto !== nativePrototype)) {\n var ancestor = Object.getPrototypeOf(proto
);\n proto.__proto__ = ancestor;\n proto = ancestor;\n }\n
}\n // cache this in case of mixin\n definition.native = nativePrototype;
\n }\n\n // SECTION 4\n\n function instantiate(definition) {\n // 4.a.1. C
reate a new object that implements PROTOTYPE\n // 4.a.2. Let ELEMENT by this
new object\n //\n // the custom element instantiation algorithm must also
ensure that the\n // output is a valid DOM element with the proper wrapper in
place.\n //\n return upgrade(domCreateElement(definition.tag), definition
);\n }\n\n function upgrade(element, definition) {\n // some definitions sp
ecify an 'is' attribute\n if (definition.is) {\n element.setAttribute('i
s', definition.is);\n }\n // remove 'unresolved' attr, which is a standin
for :unresolved.\n element.removeAttribute('unresolved');\n // make 'eleme
nt' implement definition.prototype\n implement(element, definition);\n //
flag as upgraded\n element.__upgraded__ = true;\n // lifecycle management\
n created(element);\n // attachedCallback fires in tree order, call before
recursing\n scope.insertedNode(element);\n // there should never be a sha
dow root on element at this point\n scope.upgradeSubtree(element);\n // OU
TPUT\n return element;\n }\n\n function implement(element, definition) {\n
// prototype swizzling is best\n if (Object.__proto__) {\n element.__
proto__ = definition.prototype;\n } else {\n // where above we can re-ac
quire inPrototype via\n // getPrototypeOf(Element), we cannot do so when\n
// we use mixin, so we install a magic reference\n customMixin(element
, definition.prototype, definition.native);\n element.__proto__ = definitio
n.prototype;\n }\n }\n\n function customMixin(inTarget, inSrc, inNative) {\
n // TODO(sjmiles): 'used' allows us to only copy the 'youngest' version of\n
// any property. This set should be precalculated. We also need to\n // c
onsider this for supporting 'super'.\n var used = {};\n // start with inSr
c\n var p = inSrc;\n // The default is HTMLElement.prototype, so we add a
test to avoid mixing in\n // native prototypes\n while (p !== inNative &&
p !== HTMLElement.prototype) {\n var keys = Object.getOwnPropertyNames(p);\
n for (var i=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Ob
ject.defineProperty(inTarget, k,\n Object.getOwnPropertyDescriptor(
p, k));\n used[k] = 1;\n }\n }\n p = Object.getPrototy
peOf(p);\n }\n }\n\n function created(element) {\n // invoke createdCall
back\n if (element.createdCallback) {\n element.createdCallback();\n
}\n }\n\n // attribute watching\n\n function overrideAttributeApi(prototype)
{\n // overrides to implement callbacks\n // TODO(sjmiles): should support
access via .attributes NamedNodeMap\n // TODO(sjmiles): preserves user defin
ed overrides, if any\n if (prototype.setAttribute._polyfilled) {\n retur
n;\n }\n var setAttribute = prototype.setAttribute;\n prototype.setAttr
ibute = function(name, value) {\n changeAttribute.call(this, name, value, s
etAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n
prototype.removeAttribute = function(name) {\n changeAttribute.call(this, n
ame, null, removeAttribute);\n }\n prototype.setAttribute._polyfilled = tr
ue;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\
n // index.html#dfn-attribute-changed-callback\n function changeAttribute(name
, value, operation) {\n var oldValue = this.getAttribute(name);\n operatio
n.apply(this, arguments);\n var newValue = this.getAttribute(name);\n if (
this.attributeChangedCallback\n && (newValue !== oldValue)) {\n this
.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // element
registry (maps tag names to definitions)\n\n var registry = {};\n\n function
getRegisteredDefinition(name) {\n if (name) {\n return registry[name.toL
owerCase()];\n }\n }\n\n function registerDefinition(name, definition) {\n
registry[name] = definition;\n }\n\n function generateConstructor(definitio
n) {\n return function() {\n return instantiate(definition);\n };\n
}\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function createEl
ementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-HTM
L elements,\n // just call createElementNS for non HTML Elements\n if (nam
espace === HTML_NAMESPACE) {\n return createElement(tag, typeExtension);\n
} else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n f
unction createElement(tag, typeExtension) {\n // TODO(sjmiles): ignore 'tag'
when using 'typeExtension', we could\n // error check it, or perhaps there sh
ould only ever be one argument\n var definition = getRegisteredDefinition(typ
eExtension || tag);\n if (definition) {\n if (tag == definition.tag && t
ypeExtension == definition.is) {\n return new definition.ctor();\n }
\n // Handle empty string for type extension.\n if (!typeExtension &&
!definition.is) {\n return new definition.ctor();\n }\n }\n\n
if (typeExtension) {\n var element = createElement(tag);\n element.set
Attribute('is', typeExtension);\n return element;\n }\n var element =
domCreateElement(tag);\n // Custom tags should be HTMLElements even if not u
pgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTMLElement
);\n }\n return element;\n }\n\n function upgradeElement(element) {\n
if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n
var is = element.getAttribute('is');\n var definition = getRegisteredDefin
ition(is || element.localName);\n if (definition) {\n if (is && defi
nition.tag == element.localName) {\n return upgrade(element, definition
);\n } else if (!is && !definition.extends) {\n return upgrade(e
lement, definition);\n }\n }\n }\n }\n\n function cloneNode(dee
p) {\n // call original clone\n var n = domCloneNode.call(this, deep);\n
// upgrade the element and subtree\n scope.upgradeAll(n);\n // return th
e clone\n return n;\n }\n // capture native createElement before we overrid
e it\n\n var domCreateElement = document.createElement.bind(document);\n var d
omCreateElementNS = document.createElementNS.bind(document);\n\n // capture nat
ive cloneNode before we override it\n\n var domCloneNode = Node.prototype.clone
Node;\n\n // exports\n\n document.registerElement = register;\n document.crea
teElement = createElement; // override\n document.createElementNS = createEleme
ntNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n\n scop
e.registry = registry;\n\n /**\n * Upgrade an element to a custom element. Up
grading an element\n * causes the custom prototype to be applied, an `is` attr
ibute\n * to be attached (as needed), and invocation of the `readyCallback`.\n
* `upgrade` does nothing if the element is already upgraded, or\n * if it m
atches no registered custom tag name.\n *\n * @method ugprade\n * @param {
Element} element The element to upgrade.\n * @return {Element} The upgraded el
ement.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custom 'insta
nceof'. This is necessary when CustomElements\n// are implemented via a mixin st
rategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !useN
ative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n while (p)
{\n // NOTE: this is not technically correct since we're not checking if\n
// an object is an instance of a constructor; however, this should\n /
/ be good enough for the mixin strategy.\n if (p === ctor.prototype) {\n
return true;\n }\n p = p.__proto__;\n }\n return false;\n
}\n} else {\n isInstance = function(obj, base) {\n return obj instanceof bas
e;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reservedTagList
= reservedTagList;\n\n// bc\ndocument.register = document.registerElement;\n\nsc
ope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.CustomElem
ents);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * U
se of this source code is governed by a BSD-style\n * license that can be found
in the LICENSE file.\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_
TYPE = scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tr
ee\n\nvar parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n
],\n map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n
if (!inDocument.__parsed) {\n // only parse once\n inDocument.__pars
ed = true;\n // all parsable elements in inDocument (depth-first pre-order
traversal)\n var elts = inDocument.querySelectorAll(parser.selectors);\n
// for each parsable node type, call the mapped parsing method\n forEach
(elts, function(e) {\n parser[parser.map[e.localName]](e);\n });\n
// upgrade all upgradeable static elements, anything dynamically\n // c
reated should be caught by observer\n CustomElements.upgradeDocument(inDocu
ment);\n // observe document for dom changes\n CustomElements.observeD
ocument(inDocument);\n }\n },\n parseLink: function(linkElt) {\n // impo
rts\n if (isDocumentLink(linkElt)) {\n this.parseImport(linkElt);\n }
\n },\n parseImport: function(linkElt) {\n if (linkElt.import) {\n par
ser.parse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n
return (inElt.localName === 'link'\n && inElt.getAttribute('rel') === IMP
ORT_LINK_TYPE);\n}\n\nvar forEach = Array.prototype.forEach.call.bind(Array.prot
otype.forEach);\n\n// exports\n\nscope.parser = parser;\nscope.IMPORT_LINK_TYPE
= IMPORT_LINK_TYPE;\n\n})(window.CustomElements);","/*\n * Copyright 2013 The Po
lymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(sc
ope){\n\n// bootstrap parsing\nfunction bootstrap() {\n // parse document\n Cu
stomElements.parser.parse(document);\n // one more pass before register is 'liv
e'\n CustomElements.upgradeDocument(document);\n // choose async\n var async
= window.Platform && Platform.endOfMicrotask ? \n Platform.endOfMicrotask :\n
setTimeout;\n async(function() {\n // set internal 'ready' flag, now doc
ument.registerElement will trigger \n // synchronous upgrades\n CustomElem
ents.ready = true;\n // capture blunt profiling data\n CustomElements.read
yTime = Date.now();\n if (window.HTMLImports) {\n CustomElements.elapsed
= CustomElements.readyTime - HTMLImports.readyTime;\n }\n // notify the s
ystem that we are bootstrapped\n document.dispatchEvent(\n new CustomEve
nt('WebComponentsReady', {bubbles: true})\n );\n\n // install upgrade hook
if HTMLImports are available\n if (window.HTMLImports) {\n HTMLImports.
__importsParsingHook = function(elt) {\n CustomElements.parser.parse(elt.
import);\n }\n }\n });\n}\n\n// CustomEvent shim for IE\nif (typeof win
dow.CustomEvent !== 'function') {\n window.CustomEvent = function(inType) {\n
var e = document.createEvent('HTMLEvents');\n e.initEvent(inType, true, tru
e);\n return e;\n };\n}\n\n// When loading at readyState complete time (or v
ia flag), boot custom elements\n// immediately.\n// If relevant, HTMLImports mus
t already be loaded.\nif (document.readyState === 'complete' || scope.flags.eage
r) {\n bootstrap();\n// When loading at readyState interactive time, bootstrap
only if HTMLImports\n// are not pending. Also avoid IE as the semantics of this
state are unreliable.\n} else if (document.readyState === 'interactive' && !wind
ow.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready)) {\n b
ootstrap();\n// When loading at other readyStates, wait for the appropriate DOM
event to \n// bootstrap.\n} else {\n var loadEvent = window.HTMLImports && !HTM
LImports.ready ?\n 'HTMLImportsLoaded' : 'DOMContentLoaded';\n window.addE
ventListener(loadEvent, bootstrap);\n}\n\n})(window.CustomElements);\n","/*\n *
Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source
code is governed by a BSD-style\n * license that can be found in the LICENSE fil
e.\n */\n(function() {\n\nif (window.ShadowDOMPolyfill) {\n\n // ensure wrapped
inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtree', 'obser
veDocument',\n 'upgradeDocument'];\n\n // cache originals\n var original
= {};\n fns.forEach(function(fn) {\n original[fn] = CustomElements[fn];\n }
);\n\n // override\n fns.forEach(function(fn) {\n CustomElements[fn] = func
tion(inNode) {\n return original[fn](wrap(inNode));\n };\n });\n\n}\n\n
})();\n","/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Us
e of this source code is governed by a BSD-style\n * license that can be found i
n the LICENSE file.\n */\n(function(scope) {\n var endOfMicrotask = scope.endOf
Microtask;\n\n // Generic url loader\n function Loader(regex) {\n this.rege
x = regex;\n }\n Loader.prototype = {\n // TODO(dfreedm): there may be a be
tter factoring here\n // extract absolute urls from the text (full of relativ
e urls)\n extractUrls: function(text, base) {\n var matches = [];\n
var matched, u;\n while ((matched = this.regex.exec(text))) {\n u =
new URL(matched[1], base);\n matches.push({matched: matched[0], url: u.h
ref});\n }\n return matches;\n },\n // take a text blob, a root
url, and a callback and load all the urls found within the text\n // returns
a map of absolute url to text\n process: function(text, root, callback) {\n
var matches = this.extractUrls(text, root);\n this.fetch(matches, {}, c
allback);\n },\n // build a mapping of url -> text from matches\n fetch
: function(matches, map, callback) {\n var inflight = matches.length;\n\n
// return early if there is no fetching to be done\n if (!inflight) {\n
return callback(map);\n }\n\n var done = function() {\n
if (--inflight === 0) {\n callback(map);\n }\n };\n\n
// map url -> responseText\n var handleXhr = function(err, request) {\n
var match = request.match;\n var key = match.url;\n // handle
errors with an empty string\n if (err) {\n map[key] = '';\n
return done();\n }\n var response = request.response || requ
est.responseText;\n map[key] = response;\n this.fetch(this.extract
Urls(response, key), map, done);\n };\n\n var m, req, url;\n for
(var i = 0; i < inflight; i++) {\n m = matches[i];\n url = m.url;\
n // if this url has already been requested, skip requesting it again\n
if (map[url]) {\n // Async call to done to simplify the inflight
logic\n endOfMicrotask(done);\n continue;\n }\n
req = this.xhr(url, handleXhr, this);\n req.match = m;\n // tag th
e map with an XHR request to deduplicate at the same level\n map[url] = r
eq;\n }\n },\n xhr: function(url, callback, scope) {\n var reque
st = new XMLHttpRequest();\n request.open('GET', url, true);\n request
.send();\n request.onload = function() {\n callback.call(scope, null
, request);\n };\n request.onerror = function() {\n callback.ca
ll(scope, null, request);\n };\n return request;\n }\n };\n\n sco
pe.Loader = Loader;\n})(window.Platform);\n","/*\n * Copyright 2014 The Polymer
Authors. All rights reserved.\n * Use of this source code is governed by a BSD-s
tyle\n * license that can be found in the LICENSE file.\n */\n(function(scope) {
\n\nvar urlResolver = scope.urlResolver;\nvar Loader = scope.Loader;\n\nfunction
StyleResolver() {\n this.loader = new Loader(this.regex);\n}\nStyleResolver.pr
ototype = {\n regex: /@import\\s+(?:url)?[\"'\\(]*([^'\"\\)]*)['\"\\)]*;/g,\n
// Recursively replace @imports with the text at that url\n resolve: function(t
ext, url, callback) {\n var done = function(map) {\n callback(this.flatt
en(text, url, map));\n }.bind(this);\n this.loader.process(text, url, done
);\n },\n // resolve the textContent of a style node\n resolveNode: function(
style, callback) {\n var text = style.textContent;\n var url = style.owner
Document.baseURI;\n var done = function(text) {\n style.textContent = te
xt;\n callback(style);\n };\n this.resolve(text, url, done);\n },\n
// flatten all the @imports to text\n flatten: function(text, base, map) {\n
var matches = this.loader.extractUrls(text, base);\n var match, url, interm
ediate;\n for (var i = 0; i < matches.length; i++) {\n match = matches[i
];\n url = match.url;\n // resolve any css text to be relative to the
importer\n intermediate = urlResolver.resolveCssText(map[url], url);\n
// flatten intermediate @imports\n intermediate = this.flatten(intermediat
e, url, map);\n text = text.replace(match.matched, intermediate);\n }\n
return text;\n },\n loadStyles: function(styles, callback) {\n var loade
d=0, l = styles.length;\n // called in the context of the style\n function
loadedStyle(style) {\n loaded++;\n if (loaded === l && callback) {\n
callback();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]);
i++) {\n this.resolveNode(s, loadedStyle);\n }\n }\n};\n\nvar styleRes
olver = new StyleResolver();\n\n// exports\nscope.styleResolver = styleResolver;
\n\n})(window.Platform);\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n(function(scope) {\n scope = sco
pe || {};\n scope.external = scope.external || {};\n var target = {\n shado
w: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.w
ebkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n retu
rn shadow && Boolean(shadow.elementFromPoint);\n },\n targetingShadow: fun
ction(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.quer
ySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n
}\n }\n return os;\n },\n allShadows: function(element) {\n
var shadows = [], s = this.shadow(element);\n while(s) {\n sha
dows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\
n },\n searchRoot: function(inRoot, x, y) {\n if (inRoot) {\n
var t = inRoot.elementFromPoint(x, y);\n var st, sr, os;\n // is e
lement a shadow host?\n sr = this.targetingShadow(t);\n while (sr)
{\n // find the the element inside the shadow root\n st = sr.
elementFromPoint(x, y);\n if (!st) {\n // check for older sh
adows\n sr = this.olderShadow(sr);\n } else {\n /
/ shadowed element may contain a shadow root\n var ssr = this.targeti
ngShadow(st);\n return this.searchRoot(ssr, x, y) || st;\n }
\n }\n // light dom element is the target\n return t;\n
}\n },\n owner: function(element) {\n var s = element;\n // wa
lk up until you hit the shadow root or document\n while (s.parentNode) {\n
s = s.parentNode;\n }\n // the owner element is expected to be
a Document or ShadowRoot\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeTy
pe != Node.DOCUMENT_FRAGMENT_NODE) {\n s = document;\n }\n retu
rn s;\n },\n findTarget: function(inEvent) {\n var x = inEvent.client
X, y = inEvent.clientY;\n // if the listener is in the shadow root, it is m
uch faster to start there\n var s = this.owner(inEvent.target);\n // i
f x, y is not in this root, fall back to document search\n if (!s.elementFr
omPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s
, x, y);\n }\n };\n scope.targetFinding = target;\n scope.findTarget = tar
get.findTarget.bind(target);\n\n window.PointerEventsPolyfill = scope;\n})(wind
ow.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Authors. All ri
ghts reserved.\n * Use of this source code is governed by a BSD-style\n * licens
e that can be found in the LICENSE file.\n */\n(function() {\n function shadowS
elector(v) {\n return 'body /shadow-deep/ ' + selector(v);\n }\n function s
elector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function rule(v
) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; touch-a
ction-delay: none; }';\n }\n var attrib2css = [\n 'none',\n 'auto',\n
'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n selectors: [\n
'pan-x pan-y',\n 'pan-y pan-x'\n ]\n }\n ];\n var style
s = '';\n // only install stylesheet if the browser has touch action support\n
var head = document.head;\n var hasNativePE = window.PointerEvent || window.MS
PointerEvent;\n // only add shadow selectors if shadowdom is supported\n var h
asShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot;\n\n
if (hasNativePE) {\n attrib2css.forEach(function(r) {\n if (String(r) =
== r) {\n styles += selector(r) + rule(r) + '\\n';\n if (hasShadow
Root) {\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(shadowSelec
tor) + rule(r.rule) + '\\n';\n }\n }\n });\n\n var el = docume
nt.createElement('style');\n el.textContent = styles;\n document.head.appe
ndChild(el);\n }\n})();\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n/**\n * This is the constructor f
or new PointerEvents.\n *\n * New Pointer Events must be given a type, and an op
tional dictionary of\n * initialization properties.\n *\n * Due to certain platf
orm requirements, events returned from the constructor\n * identify as MouseEven
ts.\n *\n * @constructor\n * @param {String} inType The type of the event to cre
ate.\n * @param {Object} [inDict] An optional dictionary of initial event proper
ties.\n * @return {Event} A new PointerEvent of type `inType` and initialized wi
th 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 MOUSE_DEFAULTS = [\n false,\n false,\n nul
l,\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 function PointerEvent
(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = d
ocument.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false,
inDict.cancelable || false);\n\n // define inherited MouseEvent properties\n
for(var i = 0, p; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n
e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e.buttons = inDict.butt
ons || 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 (in
Dict.pressure) {\n pressure = inDict.pressure;\n } else {\n pressur
e = 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.wid
th = inDict.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pr
essure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n
e.pointerType = inDict.pointerType || '';\n e.hwTimestamp = inDict.hwTimesta
mp || 0;\n e.isPrimary = inDict.isPrimary || false;\n return e;\n }\n\n
// attach to window\n if (!scope.PointerEvent) {\n scope.PointerEvent = Poin
terEvent;\n }\n})(window);\n","/*\n * Copyright 2013 The Polymer Authors. All r
ights reserved.\n * Use of this source code is governed by a BSD-style\n * licen
se that can be found in the LICENSE file.\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 = function(){ return this.siz
e; };\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 se
t: 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: funct
ion(inId) {\n return this.keys.indexOf(inId) > -1;\n },\n 'delete': f
unction(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.indexOf(inId);\n retu
rn this.values[i];\n },\n clear: function() {\n this.keys.length = 0;
\n this.values.length = 0;\n },\n // return value, key, map\n forE
ach: function(callback, thisArg) {\n this.values.forEach(function(v, i) {\n
callback.call(thisArg, v, this.keys[i], this);\n }, this);\n },\
n pointers: function() {\n return this.keys.length;\n }\n };\n\n sc
ope.PointerMap = PointerMap;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyr
ight 2013 The Polymer Authors. All rights reserved.\n * Use of this source code
is governed by a BSD-style\n * license that can be found in the LICENSE file.\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 'hwTimestam
p',\n 'isPrimary',\n // event instance\n 'type',\n 'target',\n 'c
urrentTarget',\n 'which',\n 'pageX',\n 'pageY'\n ];\n\n var CLONE_DEF
AULTS = [\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 instan
ce\n '',\n null,\n null,\n 0,\n 0,\n 0\n ];\n\n var HAS_SVG_
INSTANCE = (typeof SVGElementInstance !== 'undefined');\n\n /**\n * This modu
le is for normalizing events. Mouse and Touch events will be\n * collected her
e, and fire PointerEvents that have the same semantics, no\n * matter the sour
ce.\n * Events fired:\n * - pointerdown: a pointing is added\n * - poi
nterup: a pointer is removed\n * - pointermove: a pointer is moved\n * -
pointerover: a pointer crosses into an element\n * - pointerout: a pointer
leaves an element\n * - pointercancel: a pointer will no longer generate eve
nts\n */\n var dispatcher = {\n pointermap: new scope.PointerMap(),\n e
ventMap: Object.create(null),\n captureInfo: Object.create(null),\n // Sco
pe objects for native events.\n // This exists for ease of testing.\n even
tSources: Object.create(null),\n eventSourceList: [],\n /**\n * Add a
new event source that will generate pointer events.\n *\n * `inSource` m
ust contain an array of event names named `events`, and\n * functions with t
he names specified in the `events` array.\n * @param {string} name A name fo
r the event source\n * @param {Object} source A new source of platform event
s.\n */\n registerSource: function(name, source) {\n var s = source;
\n var newEvents = s.events;\n if (newEvents) {\n newEvents.for
Each(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].b
ind(s);\n }\n }, this);\n this.eventSources[name] = s;\n
this.eventSourceList.push(s);\n }\n },\n register: function(el
ement) {\n var l = this.eventSourceList.length;\n for (var i = 0, es;
(i < l) && (es = this.eventSourceList[i]); i++) {\n // call eventsource r
egister\n es.register.call(es, element);\n }\n },\n unregister
: function(element) {\n var l = this.eventSourceList.length;\n for (va
r i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n // call
eventsource register\n es.unregister.call(es, element);\n }\n },\
n contains: scope.external.contains || function(container, contained) {\n
return container.contains(contained);\n },\n // EVENTS\n down: functi
on(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointerdown'
, inEvent);\n },\n move: function(inEvent) {\n inEvent.bubbles = true
;\n this.fireEvent('pointermove', inEvent);\n },\n up: function(inEve
nt) {\n inEvent.bubbles = true;\n this.fireEvent('pointerup', inEvent)
;\n },\n enter: function(inEvent) {\n inEvent.bubbles = false;\n
this.fireEvent('pointerenter', inEvent);\n },\n leave: function(inEvent)
{\n inEvent.bubbles = false;\n this.fireEvent('pointerleave', inEvent)
;\n },\n over: function(inEvent) {\n inEvent.bubbles = true;\n t
his.fireEvent('pointerover', inEvent);\n },\n out: function(inEvent) {\n
inEvent.bubbles = true;\n this.fireEvent('pointerout', inEvent);\n }
,\n cancel: function(inEvent) {\n inEvent.bubbles = true;\n this.fi
reEvent('pointercancel', inEvent);\n },\n leaveOut: function(event) {\n
this.out(event);\n if (!this.contains(event.target, event.relatedTarget)
) {\n this.leave(event);\n }\n },\n enterOver: function(event)
{\n this.over(event);\n if (!this.contains(event.target, event.relate
dTarget)) {\n this.enter(event);\n }\n },\n // LISTENER LOGIC\
n eventHandler: function(inEvent) {\n // This is used to prevent multipl
e dispatch of pointerevents 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._handledByPE) {\n re
turn;\n }\n var type = inEvent.type;\n var fn = this.eventMap &&
this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEv
ent._handledByPE = true;\n },\n // set up event listeners\n listen: fun
ction(target, events) {\n events.forEach(function(e) {\n this.addEve
nt(target, e);\n }, this);\n },\n // remove event listeners\n unli
sten: function(target, events) {\n events.forEach(function(e) {\n th
is.removeEvent(target, e);\n }, this);\n },\n addEvent: scope.externa
l.addEvent || function(target, eventName) {\n target.addEventListener(event
Name, this.boundHandler);\n },\n removeEvent: scope.external.removeEvent |
| function(target, eventName) {\n target.removeEventListener(eventName, thi
s.boundHandler);\n },\n // EVENT CREATION AND TRACKING\n /**\n * Cr
eates a new Event of type `inType`, based on the information in\n * `inEvent
`.\n *\n * @param {string} inType A string representing the type of even
t to create\n * @param {Event} inEvent A platform event with a target\n
* @return {Event} A PointerEvent of type `inType`\n */\n makeEvent: funct
ion(inType, inEvent) {\n // relatedTarget must be null if pointer is captur
ed\n if (this.captureInfo[inEvent.pointerId]) {\n inEvent.relatedTar
get = null;\n }\n var e = new PointerEvent(inType, inEvent);\n if
(inEvent.preventDefault) {\n e.preventDefault = inEvent.preventDefault;\
n }\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.makeEvent(inType, inEvent);\n return this.
dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with w
ritable properties.\n *\n * @param {Event} inEvent An event that contain
s properties to copy.\n * @return {Object} An object containing shallow copi
es of `inEvent`'s\n * properties.\n */\n cloneEvent: function(inEv
ent) {\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 sha
dow tree\n // Return the <use> element that is represented by the instanc
e for Safari, Chrome, IE.\n // This is the behavior implemented by Firefo
x.\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedTarget')) {
\n if (eventCopy[p] instanceof SVGElementInstance) {\n event
Copy[p] = eventCopy[p].correspondingUseElement;\n }\n }\n }
\n // keep the semantics of preventDefault\n if (inEvent.preventDefaul
t) {\n eventCopy.preventDefault = function() {\n inEvent.prevent
Default();\n };\n }\n return eventCopy;\n },\n getTarget:
function(inEvent) {\n // if pointer capture is set, route all events for t
he specified pointerId\n // to the capture target\n return this.captur
eInfo[inEvent.pointerId] || inEvent._target;\n },\n setCapture: function(i
nPointerId, inTarget) {\n if (this.captureInfo[inPointerId]) {\n thi
s.releaseCapture(inPointerId);\n }\n this.captureInfo[inPointerId] = i
nTarget;\n var e = document.createEvent('Event');\n e.initEvent('gotpo
intercapture', true, false);\n e.pointerId = inPointerId;\n this.impli
citRelease = this.releaseCapture.bind(this, inPointerId);\n document.addEve
ntListener('pointerup', this.implicitRelease);\n document.addEventListener(
'pointercancel', this.implicitRelease);\n e._target = inTarget;\n this
.asyncDispatchEvent(e);\n },\n releaseCapture: function(inPointerId) {\n
var t = this.captureInfo[inPointerId];\n if (t) {\n var e = docu
ment.createEvent('Event');\n e.initEvent('lostpointercapture', true, fals
e);\n e.pointerId = inPointerId;\n this.captureInfo[inPointerId] =
undefined;\n document.removeEventListener('pointerup', this.implicitRele
ase);\n document.removeEventListener('pointercancel', this.implicitReleas
e);\n e._target = t;\n this.asyncDispatchEvent(e);\n }\n }
,\n /**\n * Dispatches the event to its target.\n *\n * @param {E
vent} inEvent The event to be dispatched.\n * @return {Boolean} True if an e
vent handler returns true, false otherwise.\n */\n dispatchEvent: scope.e
xternal.dispatchEvent || function(inEvent) {\n var t = this.getTarget(inEve
nt);\n if (t) {\n return t.dispatchEvent(inEvent);\n }\n },\
n asyncDispatchEvent: function(inEvent) {\n requestAnimationFrame(this.d
ispatchEvent.bind(this, inEvent));\n }\n };\n dispatcher.boundHandler = dis
patcher.eventHandler.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scop
e.register = dispatcher.register.bind(dispatcher);\n scope.unregister = dispatc
her.unregister.bind(dispatcher);\n})(window.PointerEventsPolyfill);\n","/*\n * C
opyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source c
ode is governed by a BSD-style\n * license that can be found in the LICENSE file
.\n */\n\n/**\n * This module uses Mutation Observers to dynamically adjust whic
h nodes will\n * generate Pointer Events.\n *\n * All nodes that wish to generat
e 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.pro
totype.forEach);\n var map = Array.prototype.map.call.bind(Array.prototype.map)
;\n var toArray = Array.prototype.slice.call.bind(Array.prototype.slice);\n va
r filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n var MO =
window.MutationObserver || window.WebKitMutationObserver;\n var SELECTOR = '[t
ouch-action]';\n var OBSERVER_INIT = {\n subtree: true,\n childList: true
,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['t
ouch-action']\n };\n\n function Installer(add, remove, changed, binder) {\n
this.addCallback = add.bind(binder);\n this.removeCallback = remove.bind(bin
der);\n this.changedCallback = changed.bind(binder);\n if (MO) {\n th
is.observer = new MO(this.mutationWatcher.bind(this));\n }\n }\n\n Installe
r.prototype = {\n watchSubtree: function(target) {\n // Only watch scope
s that can target find, as these are top-level.\n // Otherwise we can see d
uplicate additions and removals that add noise.\n //\n // TODO(dfreedm
an): For some instances with ShadowDOMPolyfill, we can see\n // a removal w
ithout an insertion when a node is redistributed among\n // shadows. Since
it all ends up correct in the document, watching only\n // the document wil
l yield the correct mutations 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 === document && document.readyState !== 'complete') {\n
this.installOnLoad();\n } else {\n this.installNewSubtree(target);\n
}\n },\n installNewSubtree: function(target) {\n forEach(this.f
indElements(target), this.addElement, this);\n },\n findElements: function
(target) {\n if (target.querySelectorAll) {\n return target.querySel
ectorAll(SELECTOR);\n }\n return [];\n },\n removeElement: funct
ion(el) {\n this.removeCallback(el);\n },\n addElement: function(el)
{\n this.addCallback(el);\n },\n elementChanged: function(el, oldValu
e) {\n this.changedCallback(el, oldValue);\n },\n concatLists: functi
on(accum, list) {\n return accum.concat(toArray(list));\n },\n // reg
ister all touch-action = none nodes on document load\n installOnLoad: functio
n() {\n document.addEventListener('readystatechange', function() {\n
if (document.readyState === 'complete') {\n this.installNewSubtree(doc
ument);\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.findElements, this);\n // make sure the added nodes are
accounted for\n tree.push(filter(inNodes, this.isElement));\n // flatt
en the list\n return tree.reduce(this.concatLists, []);\n },\n mutati
onWatcher: function(mutations) {\n mutations.forEach(this.mutationHandler,
this);\n },\n mutationHandler: function(m) {\n if (m.type === 'childL
ist') {\n var added = this.flattenMutationTree(m.addedNodes);\n ad
ded.forEach(this.addElement, this);\n var removed = this.flattenMutationT
ree(m.removedNodes);\n removed.forEach(this.removeElement, this);\n
} else if (m.type === 'attributes') {\n this.elementChanged(m.target, m.o
ldValue);\n }\n }\n };\n\n if (!MO) {\n Installer.prototype.watchSu
btree = function(){\n console.warn('PointerEventsPolyfill: MutationObserver
s not found, touch-action will not be dynamically detected');\n };\n }\n\n
scope.Installer = Installer;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyr
ight 2013 The Polymer Authors. All rights reserved.\n * Use of this source code
is governed by a BSD-style\n * license that can be found in the LICENSE file.\n
*/\n\n(function (scope) {\n var dispatcher = scope.dispatcher;\n var pointerma
p = dispatcher.pointermap;\n // radius around touchend that swallows mouse even
ts\n var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HA
S_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons:
1}).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse even
ts\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n e
vents: [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouse
over',\n 'mouseout'\n ],\n register: function(target) {\n dispat
cher.listen(target, this.events);\n },\n unregister: function(target) {\n
dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n
// collide with the global mouse listener\n isEventSimulatedFromTouch: func
tion(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.client
X, 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 prim
ary 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 = dispatc
her.cloneEvent(inEvent);\n // forward mouse preventDefault\n var pd =
e.preventDefault;\n e.preventDefault = function() {\n inEvent.preven
tDefault();\n pd();\n };\n e.pointerId = this.POINTER_ID;\n
e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\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.isEventSi
mulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_ID);\n
// TODO(dfreedman) workaround for some elements not sending mouseup\n
// http://crbug/149091\n if (p) {\n this.cancel(inEvent);\n
}\n var e = this.prepareEvent(inEvent);\n pointermap.set(t
his.POINTER_ID, inEvent);\n dispatcher.down(e);\n }\n },\n mou
semove: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent))
{\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\n
}\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulate
dFromTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n
if (p && p.button === inEvent.button) {\n var e = this.prepareEvent(i
nEvent);\n dispatcher.up(e);\n this.cleanupMouse();\n }
\n }\n },\n mouseover: function(inEvent) {\n if (!this.isEventSi
mulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n
dispatcher.enterOver(e);\n }\n },\n mouseout: function(inEvent) {\
n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.pre
pareEvent(inEvent);\n dispatcher.leaveOut(e);\n }\n },\n cance
l: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatc
her.cancel(e);\n this.cleanupMouse();\n },\n cleanupMouse: function()
{\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEv
ents = mouseEvents;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013
The Polymer Authors. All rights reserved.\n * Use of this source code is govern
ed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(fu
nction(scope) {\n var dispatcher = scope.dispatcher;\n var captureInfo = dispa
tcher.captureInfo;\n var findTarget = scope.findTarget;\n var allShadows = sco
pe.targetFinding.allShadows.bind(scope.targetFinding);\n var pointermap = dispa
tcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototyp
e.map);\n // This should be long enough to ignore compat mouse events made by t
ouch\n var DEDUP_TIMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var ATTRI
B = 'touch-action';\n var INSTALLER;\n // The presence of touch event handlers
blocks scrolling, and so we must be careful to\n // avoid adding handlers unne
cessarily. Chrome plans to add a touch-action-delay property\n // (crbug.com/3
29559) to address this, and once we have that we can opt-in to a simpler\n // h
andler registration mechanism. Rather than try to predict how exactly to opt-in
to\n // that we'll just leave this disabled until there is a build of Chrome t
o test.\n var HAS_TOUCH_ACTION_DELAY = false;\n \n // handler block for nativ
e touch events\n var touchEvents = {\n events: [\n 'touchstart',\n
'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n register: fun
ction(target) {\n if (HAS_TOUCH_ACTION_DELAY) {\n dispatcher.listen(
target, this.events);\n } else {\n INSTALLER.enableOnSubtree(target)
;\n }\n },\n unregister: function(target) {\n if (HAS_TOUCH_ACTI
ON_DELAY) {\n dispatcher.unlisten(target, this.events);\n } else {\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._scrol
lType = st;\n dispatcher.listen(el, this.events);\n // set touch-a
ction 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._scrollTyp
e = undefined;\n dispatcher.unlisten(el, this.events);\n // remove tou
ch-action from shadow\n allShadows(el).forEach(function(s) {\n s._sc
rollType = undefined;\n dispatcher.unlisten(s, this.events);\n }, th
is);\n },\n elementChanged: function(el, oldValue) {\n var a = el.get
Attribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n var o
ldSt = this.touchActionToScrollType(oldValue);\n // simply update scrollTyp
e if listeners are already established\n if (st && oldSt) {\n el._sc
rollType = st;\n allShadows(el).forEach(function(s) {\n s._scrol
lType = st;\n }, this);\n } else if (oldSt) {\n this.elementR
emoved(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$/
\n },\n touchActionToScrollType: function(touchAction) {\n var t = to
uchAction;\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.S
CROLLER.exec(t)) {\n return 'XY';\n }\n },\n POINTER_TYPE: 'to
uch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n ret
urn this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch: functi
on(inTouch) {\n // set primary touch if there no pointers, or the only poin
ter is the mouse\n if (pointermap.pointers() === 0 || (pointermap.pointers(
) === 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.identifier;\
n this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n this.
scrolling = false;\n this.cancelResetClickCount();\n }\n },\n
removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimary) {\n
this.firstTouch = null;\n this.firstXY = null;\n this.reset
ClickCount();\n }\n },\n clickCount: 0,\n resetId: null,\n rese
tClickCount: function() {\n var fn = function() {\n this.clickCount
= 0;\n this.resetId = null;\n }.bind(this);\n this.resetId = se
tTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: function(
) {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n
},\n typeToButtons: function(type) {\n var ret = 0;\n if (type ==
= 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n retu
rn ret;\n },\n touchToPointer: function(inTouch) {\n var cte = this.c
urrentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch);\n // Spec
specifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers ca
n start at 0.\n // Add 2 to the touch identifier for compatibility.\n
var id = e.pointerId = inTouch.identifier + 2;\n e.target = captureInfo[id]
|| findTarget(e);\n e.bubbles = true;\n e.cancelable = true;\n e
.detail = this.clickCount;\n e.button = 0;\n e.buttons = this.typeToBu
ttons(cte.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;
\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.press
ure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isP
rimaryTouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n // forwar
d touch preventDefaults\n var self = this;\n e.preventDefault = functi
on() {\n self.scrolling = false;\n self.firstXY = null;\n c
te.preventDefault();\n };\n return e;\n },\n processTouches: fun
ction(inEvent, inFunction) {\n var tl = inEvent.changedTouches;\n this
.currentTouchEvent = inEvent;\n for (var i = 0, t; i < tl.length; i++) {\n
t = tl[i];\n inFunction.call(this, this.touchToPointer(t));\n
}\n },\n // For single axis scrollers, determines whether the element sho
uld emit\n // pointer events or behave as a scroller\n shouldScroll: funct
ion(inEvent) {\n if (this.firstXY) {\n var ret;\n var scrollA
xis = inEvent.currentTarget._scrollType;\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 ele
ment should always scroll\n ret = true;\n } else {\n va
r t = inEvent.changedTouches[0];\n // check the intended scroll axis, a
nd other axis\n var a = scrollAxis;\n var oa = scrollAxis ===
'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.firstXY[a])
;\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n
// if delta in the scroll axis > delta other axis, scroll instead of\n
// making events\n ret = da >= doa;\n }\n this.firstXY =
null;\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. T
his\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 // pointercancel for th
is \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = i
nEvent.touches;\n // pointermap.pointers() should be < tl.length here, as t
he touchstart has not\n // been processed yet.\n if (pointermap.pointe
rs() >= tl.length) {\n var d = [];\n pointermap.forEach(function(v
alue, key) {\n // Never remove pointerId == 1, which is mouse.\n
// Touch identifiers are 2 smaller than their pointerId, which is the\n
// index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key
- 2)) {\n var p = value.out;\n d.push(p);\n }\n
}, this);\n d.forEach(this.cancelOut, this);\n }\n },\n
touchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.
setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent)
;\n if (!this.scrolling) {\n this.clickCount++;\n this.proces
sTouches(inEvent, this.overDown);\n }\n },\n overDown: function(inPoi
nter) {\n var p = pointermap.set(inPointer.pointerId, {\n target: in
Pointer.target,\n out: inPointer,\n outTarget: inPointer.target\n
});\n dispatcher.over(inPointer);\n dispatcher.enter(inPointer);\
n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n
if (!this.scrolling) {\n if (this.shouldScroll(inEvent)) {\n
this.scrolling = true;\n this.touchcancel(inEvent);\n } else
{\n inEvent.preventDefault();\n this.processTouches(inEvent, t
his.moveOverOut);\n }\n }\n },\n moveOverOut: function(inPoint
er) {\n var event = inPointer;\n var pointer = pointermap.get(event.po
interId);\n // a finger drifted off the screen, ignore it\n if (!point
er) {\n return;\n }\n var outEvent = pointer.out;\n var ou
tTarget = pointer.outTarget;\n dispatcher.move(event);\n if (outEvent
&& outTarget !== event.target) {\n outEvent.relatedTarget = event.target;
\n event.relatedTarget = outTarget;\n // recover from retargeting
by shadow\n outEvent.target = outTarget;\n if (event.target) {\n
dispatcher.leaveOut(outEvent);\n dispatcher.enterOver(event);\n
} else {\n // clean up case when finger leaves the screen\n
event.target = outTarget;\n event.relatedTarget = null;\n
this.cancelOut(event);\n }\n }\n pointer.out = event;\n
pointer.outTarget = event.target;\n },\n touchend: function(inEvent) {\n
this.dedupSynthMouse(inEvent);\n this.processTouches(inEvent, this.upOu
t);\n },\n upOut: function(inPointer) {\n if (!this.scrolling) {\n
dispatcher.up(inPointer);\n dispatcher.out(inPointer);\n disp
atcher.leave(inPointer);\n }\n this.cleanUpPointer(inPointer);\n },
\n touchcancel: function(inEvent) {\n this.processTouches(inEvent, this.
cancelOut);\n },\n cancelOut: function(inPointer) {\n dispatcher.canc
el(inPointer);\n dispatcher.out(inPointer);\n dispatcher.leave(inPoint
er);\n this.cleanUpPointer(inPointer);\n },\n cleanUpPointer: functio
n(inPointer) {\n pointermap['delete'](inPointer.pointerId);\n this.rem
ovePrimaryPointer(inPointer);\n },\n // prevent synth mouse events from cr
eating pointer events\n dedupSynthMouse: function(inEvent) {\n var lts =
scope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n
// only the primary finger will synth mouse events\n if (this.isPrimaryTou
ch(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.splic
e(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, D
EDUP_TIMEOUT);\n }\n }\n };\n\n if (!HAS_TOUCH_ACTION_DELAY) {\n IN
STALLER = new scope.Installer(touchEvents.elementAdded, touchEvents.elementRemov
ed, touchEvents.elementChanged, touchEvents);\n }\n\n scope.touchEvents = touc
hEvents;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polyme
r Authors. All rights reserved.\n * Use of this source code is governed by a BSD
-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scop
e) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointe
rmap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerE
vent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n
'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPoint
erOut',\n 'MSPointerOver',\n 'MSPointerCancel',\n 'MSGotPointerCa
pture',\n 'MSLostPointerCapture'\n ],\n register: function(target) {\
n dispatcher.listen(target, this.events);\n },\n unregister: function
(target) {\n dispatcher.unlisten(target, this.events);\n },\n POINTER
_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n
'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEvent;\n
if (HAS_BITMAP_TYPE) {\n e = dispatcher.cloneEvent(inEvent);\n
e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n }\n retu
rn e;\n },\n cleanup: function(id) {\n pointermap['delete'](id);\n
},\n MSPointerDown: function(inEvent) {\n pointermap.set(inEvent.pointe
rId, inEvent);\n var e = this.prepareEvent(inEvent);\n dispatcher.down
(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this.prepare
Event(inEvent);\n dispatcher.move(e);\n },\n MSPointerUp: function(in
Event) {\n var e = this.prepareEvent(inEvent);\n dispatcher.up(e);\n
this.cleanup(inEvent.pointerId);\n },\n MSPointerOut: function(inEvent
) {\n var e = this.prepareEvent(inEvent);\n dispatcher.leaveOut(e);\n
},\n MSPointerOver: function(inEvent) {\n var e = this.prepareEvent(i
nEvent);\n dispatcher.enterOver(e);\n },\n MSPointerCancel: function(
inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.cancel(e
);\n this.cleanup(inEvent.pointerId);\n },\n MSLostPointerCapture: fu
nction(inEvent) {\n var e = dispatcher.makeEvent('lostpointercapture', inEv
ent);\n dispatcher.dispatchEvent(e);\n },\n MSGotPointerCapture: func
tion(inEvent) {\n var e = dispatcher.makeEvent('gotpointercapture', inEvent
);\n dispatcher.dispatchEvent(e);\n }\n };\n\n scope.msEvents = msEven
ts;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Aut
hors. All rights reserved.\n * Use of this source code is governed by a BSD-styl
e\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module
contains the handlers for native platform events.\n * From here, the dispatcher
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\n // only activate if this platform does not have pointer
events\n if (window.PointerEvent !== scope.PointerEvent) {\n\n if (window.na
vigator.msPointerEnabled) {\n var tp = window.navigator.msMaxTouchPoints;\n
Object.defineProperty(window.navigator, 'maxTouchPoints', {\n value
: tp,\n enumerable: true\n });\n dispatcher.registerSource('ms'
, scope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope
.mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatch
er.registerSource('touch', scope.touchEvents);\n }\n }\n\n dispatcher
.register(document);\n }\n})(window.PointerEventsPolyfill);\n","/*\n * Copyrigh
t 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is
governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\
n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var n = window.na
vigator;\n var s, r;\n function assertDown(id) {\n if (!dispatcher.pointerm
ap.has(id)) {\n throw new Error('InvalidPointerId');\n }\n }\n if (n.m
sPointerEnabled) {\n s = function(pointerId) {\n assertDown(pointerId);\
n this.msSetPointerCapture(pointerId);\n };\n r = function(pointerId)
{\n assertDown(pointerId);\n this.msReleasePointerCapture(pointerId);
\n };\n } else {\n s = function setPointerCapture(pointerId) {\n ass
ertDown(pointerId);\n dispatcher.setCapture(pointerId, this);\n };\n
r = function releasePointerCapture(pointerId) {\n assertDown(pointerId);\n
dispatcher.releaseCapture(pointerId, this);\n };\n }\n if (window.Elem
ent && !Element.prototype.setPointerCapture) {\n Object.defineProperties(Elem
ent.prototype, {\n 'setPointerCapture': {\n value: s\n },\n
'releasePointerCapture': {\n value: r\n }\n });\n }\n})(window
.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n(function(scope) {\n /**\n * T
his class contains the gesture recognizers that create the PointerGesture\n *
events.\n *\n * @class PointerGestures\n * @static\n */\n scope = scope
|| {};\n scope.utils = {\n LCA: {\n // Determines the lowest node in t
he ancestor chain of a and b\n find: function(a, b) {\n if (a === b)
{\n return a;\n }\n // fast case, a is a direct descenda
nt of b or vice versa\n if (a.contains) {\n if (a.contains(b)) {
\n return a;\n }\n if (b.contains(a)) {\n
return b;\n }\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 = this.walk
(a, 1);\n b = this.walk(b, 1);\n }\n return a;\n },\
n walk: function(n, u) {\n for (var i = 0; i < u; i++) {\n
n = n.parentNode;\n }\n return n;\n },\n depth: function
(n) {\n var d = 0;\n while(n) {\n d++;\n n = n.p
arentNode;\n }\n return d;\n }\n }\n };\n scope.findLCA
= function(a, b) {\n return scope.utils.LCA.find(a, b);\n }\n window.Pointe
rGestures = scope;\n})(window.PointerGestures);\n","/*\n * Copyright 2013 The Po
lymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Th
is module implements an map of pointer states\n */\n(function(scope) {\n var US
E_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = functio
n(){ 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.p
rototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexO
f(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.indexO
f(inId);\n return this.values[i];\n },\n clear: function() {\n t
his.keys.length = 0;\n this.values.length = 0;\n },\n // return value
, key, map\n forEach: function(callback, thisArg) {\n this.values.forEac
h(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.PointerGestures);\n"
,"/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of thi
s source code is governed by a BSD-style\n * license that can be found in the LI
CENSE file.\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 // event instance\n 'type',\n 'ta
rget',\n 'currentTarget',\n 'screenX',\n 'screenY',\n 'pageX',\n
'pageY',\n 'tapPrevented'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEven
t\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 L
evel 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 ];\n\n var dispatcher = {\n handled
Events: new WeakMap(),\n targets: new WeakMap(),\n handlers: {},\n reco
gnizers: {},\n events: {},\n // Add a new gesture recognizer to the event
listeners.\n // Recognizer needs an `events` property.\n registerRecognize
r: function(inName, inRecognizer) {\n var r = inRecognizer;\n this.rec
ognizers[inName] = r;\n r.events.forEach(function(e) {\n if (r[e]) {
\n this.events[e] = true;\n var f = r[e].bind(r);\n t
his.addHandler(e, f);\n }\n }, this);\n },\n addHandler: funct
ion(inEvent, inFn) {\n var e = inEvent;\n if (!this.handlers[e]) {\n
this.handlers[e] = [];\n }\n this.handlers[e].push(inFn);\n }
,\n // add event listeners for inTarget\n registerTarget: function(inTarge
t) {\n this.listen(Object.keys(this.events), inTarget);\n },\n // rem
ove event listeners for inTarget\n unregisterTarget: function(inTarget) {\n
this.unlisten(Object.keys(this.events), inTarget);\n },\n // LISTENER
LOGIC\n eventHandler: function(inEvent) {\n if (this.handledEvents.get(i
nEvent)) {\n return;\n }\n var type = inEvent.type, fns = this.
handlers[type];\n if (fns) {\n this.makeQueue(fns, inEvent);\n
}\n this.handledEvents.set(inEvent, true);\n },\n // queue event for
async dispatch\n makeQueue: function(inHandlerFns, inEvent) {\n // must
clone events to keep the (possibly shadowed) target correct for\n // async
dispatching\n var e = this.cloneEvent(inEvent);\n requestAnimationFram
e(this.runQueue.bind(this, inHandlerFns, e));\n },\n // Dispatch the queue
d events\n runQueue: function(inHandlers, inEvent) {\n this.currentPoint
erId = inEvent.pointerId;\n for (var i = 0, f, l = inHandlers.length; (i <
l) && (f = inHandlers[i]); i++) {\n f(inEvent);\n }\n this.curr
entPointerId = 0;\n },\n // set up event listeners\n listen: function(i
nEvents, inTarget) {\n inEvents.forEach(function(e) {\n this.addEven
t(e, this.boundHandler, false, inTarget);\n }, this);\n },\n // remov
e event listeners\n unlisten: function(inEvents) {\n inEvents.forEach(fu
nction(e) {\n this.removeEvent(e, this.boundHandler, false, inTarget);\n
}, this);\n },\n addEvent: function(inEventName, inEventHandler, inCa
pture, inTarget) {\n inTarget.addEventListener(inEventName, inEventHandler,
inCapture);\n },\n removeEvent: function(inEventName, inEventHandler, inC
apture, inTarget) {\n inTarget.removeEventListener(inEventName, inEventHand
ler, inCapture);\n },\n // EVENT CREATION AND TRACKING\n // Creates a n
ew Event of type `inType`, based on the information in\n // `inEvent`.\n m
akeEvent: function(inType, inDict) {\n return new PointerGestureEvent(inTyp
e, inDict);\n },\n /*\n * Returns a snapshot of inEvent, with writable
properties.\n *\n * @method cloneEvent\n * @param {Event} inEvent A
n event that contains properties to copy.\n * @return {Object} An object con
taining shallow copies of `inEvent`'s\n * properties.\n */\n clone
Event: function(inEvent) {\n var eventCopy = {}, 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 }\n return eventCopy;\n },\n
// Dispatches the event to its target.\n dispatchEvent: function(inEvent,
inTarget) {\n var t = inTarget || this.targets.get(inEvent);\n if (t)
{\n t.dispatchEvent(inEvent);\n if (inEvent.tapPrevented) {\n
this.preventTap(this.currentPointerId);\n }\n }\n },\n a
syncDispatchEvent: function(inEvent, inTarget) {\n requestAnimationFrame(th
is.dispatchEvent.bind(this, inEvent, inTarget));\n },\n preventTap: functi
on(inPointerId) {\n var t = this.recognizers.tap;\n if (t){\n t
.preventTap(inPointerId);\n }\n }\n };\n dispatcher.boundHandler = dis
patcher.eventHandler.bind(dispatcher);\n // recognizers call into the dispatche
r and load later\n // solve the chicken and egg problem by having registerScope
s module run last\n dispatcher.registerQueue = [];\n dispatcher.immediateRegis
ter = false;\n scope.dispatcher = dispatcher;\n /**\n * Enable gesture event
s for a given scope, typically\n * [ShadowRoots](https://dvcs.w3.org/hg/webcom
ponents/raw-file/tip/spec/shadow/index.html#shadow-root-object).\n *\n * @fo
r PointerGestures\n * @method register\n * @param {ShadowRoot} scope A top l
evel scope to enable gesture\n * support on.\n */\n scope.register = functi
on(inScope) {\n if (dispatcher.immediateRegister) {\n var pe = window.Po
interEventsPolyfill;\n if (pe) {\n pe.register(inScope);\n }\n
scope.dispatcher.registerTarget(inScope);\n } else {\n dispatcher.r
egisterQueue.push(inScope);\n }\n };\n scope.register(document);\n})(window
.PointerGestures);\n","/*\n * Copyright 2013 The Polymer Authors. All rights res
erved.\n * Use of this source code is governed by a BSD-style\n * license that c
an be found in the LICENSE file.\n */\n\n/**\n * This event is fired when a poin
ter is held down for 200ms.\n *\n * @module PointerGestures\n * @submodule Event
s\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 position of
the held pointer\n * @type Number\n * @property clientX\n */\n/**\n * Screen Y a
xis position of the held pointer\n * @type Number\n * @property clientY\n */\n/*
*\n * Type of pointer that made the holding event.\n * @type String\n * @propert
y pointerType\n */\n/**\n * This event is fired every 200ms while a pointer is h
eld down.\n *\n * @class holdpulse\n * @extends 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 r
eleased\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var
hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n
HOLD_DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not cou
nting as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'pointerdown',\
n 'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n he
ldPointer: null,\n holdJob: null,\n pulse: function() {\n var hold =
Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'holdpuls
e' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\
n cancel: function() {\n clearInterval(this.holdJob);\n if (this.he
ld) {\n this.fireHold('release');\n }\n this.held = false;\n
this.heldPointer = null;\n this.target = null;\n this.holdJob = nul
l;\n },\n pointerdown: 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 pointerup: function(inEvent) {\n if (t
his.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n
this.cancel();\n }\n },\n pointercancel: function(inEvent) {\n t
his.cancel();\n },\n pointermove: function(inEvent) {\n if (this.held
Pointer && this.heldPointer.pointerId === inEvent.pointerId) {\n var x =
inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - t
his.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {
\n this.cancel();\n }\n }\n },\n fireHold: function(i
nType, inHoldTime) {\n var p = {\n pointerType: this.heldPointer.poi
nterType,\n clientX: this.heldPointer.clientX,\n clientY: this.hel
dPointer.clientY\n };\n if (inHoldTime) {\n p.holdTime = inHold
Time;\n }\n var e = dispatcher.makeEvent(inType, p);\n dispatcher
.dispatchEvent(e, this.target);\n if (e.tapPrevented) {\n dispatcher
.preventTap(this.heldPointer.pointerId);\n }\n }\n };\n dispatcher.reg
isterRecognizer('hold', hold);\n})(window.PointerGestures);\n","/*\n * Copyright
2013 The Polymer Authors. All rights reserved.\n * Use of this source code is g
overned by a BSD-style\n * license that can be found in the LICENSE file.\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 * @pro
perty dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @typ
e Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction since th
e last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved in t
he y direction since the last track.\n * @type Number\n * @property ddy\n */\n/*
*\n * The clientX position of the track gesture.\n * @type Number\n * @property
clientX\n */\n/**\n * The clientY position of the track gesture.\n * @type Numbe
r\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 trac
k gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX positi
on of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n * Th
e screenY position of the track gesture.\n * @type Number\n * @property screenY\
n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n * @pr
operty xDirection\n */\n/**\n * The last y axis direction of the pointer.\n * @t
ype Number\n * @property yDirection\n */\n/**\n * A shared object between all tr
acking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The elemen
t 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 moveme
nt being tracked.\n *\n * @class track\n * @extends trackstart\n */\n/**\n * Thi
s event fires when the pointer is no longer being tracked.\n *\n * @class tracke
nd\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scop
e.dispatcher;\n var pointermap = new scope.PointerMap();\n var track = {\n
events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\
n 'pointercancel'\n ],\n WIGGLE_THRESHOLD: 4,\n clampDir: func
tion(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPosition
Delta: 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, inEv
ent, inTrackingData) {\n var t = inTrackingData;\n var d = this.calc
PositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t.l
astMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clampD
ir(dd.x);\n }\n if (dd.y) {\n t.yDirection = this.clampDir(d
d.y);\n }\n var trackData = {\n dx: d.x,\n dy: d.y,\
n ddx: dd.x,\n ddy: dd.y,\n clientX: inEvent.clientX,\n
clientY: inEvent.clientY,\n pageX: inEvent.pageX,\n page
Y: inEvent.pageY,\n screenX: inEvent.screenX,\n screenY: inEvent
.screenY,\n xDirection: t.xDirection,\n yDirection: t.yDirection
,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.target,\n
pointerType: inEvent.pointerType\n };\n var e = dispatcher.ma
keEvent(inType, trackData);\n t.lastMoveEvent = inEvent;\n dispatche
r.dispatchEvent(e, t.downTarget);\n },\n pointerdown: function(inEvent)
{\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.bu
ttons === 1 : true)) {\n var p = {\n downEvent: inEvent,\n
downTarget: inEvent.target,\n trackInfo: {},\n lastMo
veEvent: null,\n xDirection: 0,\n yDirection: 0,\n
tracking: false\n };\n pointermap.set(inEvent.pointerId, p);\n
}\n },\n pointermove: function(inEvent) {\n var p = pointerm
ap.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 }\n
},\n pointerup: function(inEvent) {\n var p = pointermap.get(inEv
ent.pointerId);\n if (p) {\n if (p.tracking) {\n this.fi
reTrack('trackend', inEvent, p);\n }\n pointermap.delete(inEvent
.pointerId);\n }\n },\n pointercancel: function(inEvent) {\n
this.pointerup(inEvent);\n }\n };\n dispatcher.registerRecognizer('trac
k', track);\n })(window.PointerGestures);\n","/*\n * Copyright 2013 The Polymer
Authors. All rights reserved.\n * Use of this source code is governed by a BSD-s
tyle\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This eve
nt denotes a rapid down/move/up sequence from a pointer.\n *\n * The event is se
nt to the first element the pointer went down on.\n *\n * @module PointerGesture
s\n * @submodule Events\n * @class flick\n */\n/**\n * Signed velocity of the fl
ick in the x direction.\n * @property xVelocity\n * @type Number\n */\n/**\n * S
igned velocity of the flick in the y direction.\n * @type Number\n * @property y
Velocity\n */\n/**\n * Unsigned total velocity of the flick.\n * @type Number\n
* @property velocity\n */\n/**\n * Angle of the flick in degrees, with 0 along t
he\n * positive x axis.\n * @type Number\n * @property angle\n */\n/**\n * Axis
with the greatest absolute velocity. Denoted\n * with 'x' or 'y'.\n * @type Stri
ng\n * @property majorAxis\n */\n/**\n * Type of the pointer that made the flick
.\n * @type String\n * @property pointerType\n */\n\n(function(scope) {\n var d
ispatcher = scope.dispatcher;\n var flick = {\n // TODO(dfreedman): value sh
ould be low enough for low speed flicks, but\n // high enough to remove accid
ental flicks\n MIN_VELOCITY: 0.5 /* px/ms */,\n MAX_QUEUE: 4,\n moveQue
ue: [],\n target: null,\n pointerId: null,\n events: [\n 'pointerd
own',\n 'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n
pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.point
erId) {\n this.pointerId = inEvent.pointerId;\n this.target = inEv
ent.target;\n this.addMove(inEvent);\n }\n },\n pointermove: f
unction(inEvent) {\n if (inEvent.pointerId === this.pointerId) {\n t
his.addMove(inEvent);\n }\n },\n pointerup: function(inEvent) {\n
if (inEvent.pointerId === this.pointerId) {\n this.fireFlick(inEvent);\
n }\n this.cleanup();\n },\n pointercancel: function(inEvent) {\
n this.cleanup();\n },\n cleanup: function() {\n this.moveQueue
= [];\n this.target = null;\n this.pointerId = null;\n },\n addM
ove: function(inEvent) {\n if (this.moveQueue.length >= this.MAX_QUEUE) {\n
this.moveQueue.shift();\n }\n this.moveQueue.push(inEvent);\n
},\n fireFlick: function(inEvent) {\n var e = inEvent;\n var l =
this.moveQueue.length;\n var dt, dx, dy, tx, ty, tv, x = 0, y = 0, v = 0;\
n // flick based off the fastest segment of movement\n for (var i = 0,
m; i < l && (m = this.moveQueue[i]); i++) {\n dt = e.timeStamp - m.timeS
tamp;\n dx = e.clientX - m.clientX, dy = e.clientY - m.clientY;\n
tx = dx / dt, ty = dy / dt, tv = Math.sqrt(tx * tx + ty * ty);\n if (tv >
v) {\n x = tx, y = ty, v = tv;\n }\n }\n var ma = Mat
h.abs(x) > Math.abs(y) ? 'x' : 'y';\n var a = this.calcAngle(x, y);\n
if (Math.abs(v) >= this.MIN_VELOCITY) {\n var ev = dispatcher.makeEvent('
flick', {\n xVelocity: x,\n yVelocity: y,\n velocity:
v,\n angle: a,\n majorAxis: ma,\n pointerType: inEve
nt.pointerType\n });\n dispatcher.dispatchEvent(ev, this.target);\
n }\n },\n calcAngle: function(inX, inY) {\n return (Math.atan2(
inY, inX) * 180 / Math.PI);\n }\n };\n dispatcher.registerRecognizer('flick
', flick);\n})(window.PointerGestures);\n","/*\n * Copyright 2013 The Polymer Au
thors. All rights reserved.\n * Use of this source code is governed by a BSD-sty
le\n * license that can be found in the LICENSE file.\n */\n\n/*\n * Basic strat
egy: find the farthest apart points, use as diameter of circle\n * react to size
change and rotation of the chord\n */\n\n/**\n * @module PointerGestures\n * @s
ubmodule Events\n * @class pinch\n */\n/**\n * Scale of the pinch zoom gesture\n
* @property scale\n * @type Number\n */\n/**\n * Center X position of pointers
causing pinch\n * @property centerX\n * @type Number\n */\n/**\n * Center Y posi
tion of pointers causing pinch\n * @property centerY\n * @type Number\n */\n\n/*
*\n * @module PointerGestures\n * @submodule Events\n * @class rotate\n */\n/**\
n * Angle (in degrees) of rotation. Measured from starting positions of pointers
.\n * @property angle\n * @type Number\n */\n/**\n * Center X position of pointe
rs causing rotation\n * @property centerX\n * @type Number\n */\n/**\n * Center
Y position of pointers causing rotation\n * @property centerY\n * @type Number\n
*/\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap
= new scope.PointerMap();\n var RAD_TO_DEG = 180 / Math.PI;\n var pinch = {\n
events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n
'pointercancel'\n ],\n reference: {},\n pointerdown: function(ev) {
\n pointermap.set(ev.pointerId, ev);\n if (pointermap.pointers() == 2)
{\n var points = this.calcChord();\n var angle = this.calcAngle(p
oints);\n this.reference = {\n angle: angle,\n diameter
: points.diameter,\n target: scope.findLCA(points.a.target, points.b.ta
rget)\n };\n }\n },\n pointerup: function(ev) {\n pointer
map.delete(ev.pointerId);\n },\n pointermove: function(ev) {\n if (po
intermap.has(ev.pointerId)) {\n pointermap.set(ev.pointerId, ev);\n
if (pointermap.pointers() > 1) {\n this.calcPinchRotate();\n }
\n }\n },\n pointercancel: function(ev) {\n this.pointerup(ev);\
n },\n dispatchPinch: function(diameter, points) {\n var zoom = diame
ter / this.reference.diameter;\n var ev = dispatcher.makeEvent('pinch', {\n
scale: zoom,\n centerX: points.center.x,\n centerY: points
.center.y\n });\n dispatcher.dispatchEvent(ev, this.reference.target);
\n },\n dispatchRotate: function(angle, points) {\n var diff = Math.r
ound((angle - this.reference.angle) % 360);\n var ev = dispatcher.makeEvent
('rotate', {\n angle: diff,\n centerX: points.center.x,\n c
enterY: points.center.y\n });\n dispatcher.dispatchEvent(ev, this.refe
rence.target);\n },\n calcPinchRotate: function() {\n var points = th
is.calcChord();\n var diameter = points.diameter;\n var angle = this.c
alcAngle(points);\n if (diameter != this.reference.diameter) {\n thi
s.dispatchPinch(diameter, points);\n }\n if (angle != this.reference.a
ngle) {\n this.dispatchRotate(angle, points);\n }\n },\n calcC
hord: function() {\n var pointers = [];\n pointermap.forEach(function(
p) {\n pointers.push(p);\n });\n var dist = 0;\n // start
with at least two pointers\n var points = {a: pointers[0], b: pointers[1]};
\n var x, y, d;\n for (var i = 0; i < pointers.length; i++) {\n
var a = pointers[i];\n for (var j = i + 1; j < pointers.length; j++) {\n
var b = pointers[j];\n x = Math.abs(a.clientX - b.clientX);\n
y = Math.abs(a.clientY - b.clientY);\n d = x + y;\n
if (d > dist) {\n dist = d;\n points = {a: a, b: b};\n
}\n }\n }\n x = Math.abs(points.a.clientX + points.b.clie
ntX) / 2;\n y = Math.abs(points.a.clientY + points.b.clientY) / 2;\n p
oints.center = { x: x, y: y };\n points.diameter = dist;\n return poin
ts;\n },\n calcAngle: function(points) {\n var x = points.a.clientX -
points.b.clientX;\n var y = points.a.clientY - points.b.clientY;\n re
turn (360 + Math.atan2(y, x) * RAD_TO_DEG) % 360;\n },\n };\n dispatcher.re
gisterRecognizer('pinch', pinch);\n})(window.PointerGestures);\n","/*\n * Copyri
ght 2013 The Polymer Authors. All rights reserved.\n * Use of this source code i
s governed by a BSD-style\n * license that can be found in the LICENSE file.\n *
/\n\n/**\n * This event is fired when a pointer quickly goes down and up, and is
used to\n * denote activation.\n *\n * Any gesture event can prevent the tap ev
ent from being created by calling\n * `event.preventTap`.\n *\n * Any pointer ev
ent can prevent the tap by setting the `tapPrevented` property\n * on itself.\n
*\n * @module PointerGestures\n * @submodule Events\n * @class tap\n */\n/**\n *
X axis position of the tap.\n * @property x\n * @type Number\n */\n/**\n * Y ax
is position of the tap.\n * @property y\n * @type Number\n */\n/**\n * Type of t
he pointer that made the tap.\n * @property pointerType\n * @type String\n */\n(
function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = new
scope.PointerMap();\n var tap = {\n events: [\n 'pointerdown',\n '
pointermove',\n 'pointerup',\n 'pointercancel',\n 'keyup'\n ],
\n pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.
tapPrevented) {\n pointermap.set(inEvent.pointerId, {\n target:
inEvent.target,\n buttons: inEvent.buttons,\n x: inEvent.clien
tX,\n y: inEvent.clientY\n });\n }\n },\n pointermove
: function(inEvent) {\n if (inEvent.isPrimary) {\n var start = point
ermap.get(inEvent.pointerId);\n if (start) {\n if (inEvent.tapPr
evented) {\n pointermap.delete(inEvent.pointerId);\n }\n
}\n }\n },\n shouldTap: function(e, downState) {\n if (!e.ta
pPrevented) {\n if (e.pointerType === 'mouse') {\n // only allow
left click to tap for mouse\n return downState.buttons === 1;\n
} else {\n return true;\n }\n }\n },\n pointerup: fu
nction(inEvent) {\n var start = pointermap.get(inEvent.pointerId);\n i
f (start && this.shouldTap(inEvent, start)) {\n var t = scope.findLCA(sta
rt.target, inEvent.target);\n if (t) {\n var e = dispatcher.make
Event('tap', {\n x: inEvent.clientX,\n y: inEvent.clientY,
\n detail: inEvent.detail,\n pointerType: inEvent.pointerT
ype\n });\n dispatcher.dispatchEvent(e, t);\n }\n
}\n pointermap.delete(inEvent.pointerId);\n },\n pointercancel: funct
ion(inEvent) {\n pointermap.delete(inEvent.pointerId);\n },\n keyup:
function(inEvent) {\n var code = inEvent.keyCode;\n // 32 == spacebar\
n if (code === 32) {\n var t = inEvent.target;\n if (!(t inst
anceof HTMLInputElement || t instanceof HTMLTextAreaElement)) {\n dispa
tcher.dispatchEvent(dispatcher.makeEvent('tap', {\n x: 0,\n
y: 0,\n detail: 0,\n pointerType: 'unavailable'\n
}), t);\n }\n }\n },\n preventTap: function(inPointerId) {\
n pointermap.delete(inPointerId);\n }\n };\n dispatcher.registerRecogn
izer('tap', tap);\n})(window.PointerGestures);\n","/*\n * Copyright 2014 The Pol
ymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Bec
ause recognizers are loaded after dispatcher, we have to wait to register\n * sc
opes until after all the recognizers.\n */\n(function(scope) {\n var dispatcher
= scope.dispatcher;\n function registerScopes() {\n dispatcher.immediateReg
ister = true;\n var rq = dispatcher.registerQueue;\n rq.forEach(scope.regi
ster);\n rq.length = 0;\n }\n if (document.readyState === 'complete') {\n
registerScopes();\n } else {\n // register scopes after a steadystate is r
eached\n // less MutationObserver churn\n document.addEventListener('ready
statechange', function() {\n if (document.readyState === 'complete') {\n
registerScopes();\n }\n });\n }\n})(window.PointerGestures);\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.g
ithub.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 th
e 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
var filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n\n fu
nction getTreeScope(node) {\n while (node.parentNode) {\n node = node.pa
rentNode;\n }\n\n return typeof node.getElementById === 'function' ? node
: null;\n }\n\n Node.prototype.bind = function(name, observable) {\n consol
e.error('Unhandled binding to Node: ', this, name, observable);\n };\n\n funct
ion updateBindings(node, name, binding) {\n var bindings = node.bindings_;\n
if (!bindings)\n bindings = node.bindings_ = {};\n\n if (bindings[nam
e])\n binding[name].close();\n\n return bindings[name] = binding;\n }\n
\n function returnBinding(node, name, binding) {\n return binding;\n }\n\n
function sanitizeValue(value) {\n return value == null ? '' : value;\n }\n\
n function updateText(node, value) {\n node.data = sanitizeValue(value);\n
}\n\n function textBinding(node) {\n return function(value) {\n return
updateText(node, value);\n };\n }\n\n var maybeUpdateBindings = returnBindi
ng;\n\n Object.defineProperty(Platform, 'enableBindingsReflection', {\n get:
function() {\n return maybeUpdateBindings === updateBindings;\n },\n
set: function(enable) {\n maybeUpdateBindings = enable ? updateBindings :
returnBinding;\n return enable;\n },\n configurable: true\n });\n\n
Text.prototype.bind = function(name, value, oneTime) {\n if (name !== 'textC
ontent')\n return Node.prototype.bind.call(this, name, value, oneTime);\n\n
if (oneTime)\n return updateText(this, value);\n\n var observable =
value;\n updateText(this, observable.open(textBinding(this)));\n return ma
ybeUpdateBindings(this, name, observable);\n }\n\n function updateAttribute(el
, name, conditional, value) {\n if (conditional) {\n if (value)\n
el.setAttribute(name, '');\n else\n el.removeAttribute(name);\n
return;\n }\n\n el.setAttribute(name, sanitizeValue(value));\n }\n\n f
unction attributeBinding(el, name, conditional) {\n return function(value) {\
n updateAttribute(el, name, conditional, value);\n };\n }\n\n Element.
prototype.bind = function(name, value, oneTime) {\n var conditional = name[na
me.length - 1] == '?';\n if (conditional) {\n this.removeAttribute(name)
;\n name = name.slice(0, -1);\n }\n\n if (oneTime)\n return upda
teAttribute(this, name, conditional, value);\n\n\n var observable = value;\n
updateAttribute(this, name, conditional,\n observable.open(attributeBi
nding(this, name, conditional)));\n\n return maybeUpdateBindings(this, name,
observable);\n };\n\n var checkboxEventType;\n (function() {\n // Attempt
to feature-detect which event (change or click) is fired first\n // for check
boxes.\n var div = document.createElement('div');\n var checkbox = div.app
endChild(document.createElement('input'));\n checkbox.setAttribute('type', 'c
heckbox');\n var first;\n var count = 0;\n checkbox.addEventListener('c
lick', function(e) {\n count++;\n first = first || 'click';\n });\n
checkbox.addEventListener('change', function() {\n count++;\n firs
t = first || 'change';\n });\n\n var event = document.createEvent('MouseEv
ent');\n event.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, f
alse,\n false, false, false, 0, null);\n checkbox.dispatchEvent(event)
;\n // WebKit/Blink don't fire the change event if the element is outside the
\n // document, so assume 'change' for that case.\n checkboxEventType = co
unt == 1 ? 'change' : first;\n })();\n\n function getEventForInputType(element
) {\n switch (element.type) {\n case 'checkbox':\n return checkbo
xEventType;\n case 'radio':\n case 'select-multiple':\n case 'sel
ect-one':\n return 'change';\n case 'range':\n if (/Trident|M
SIE/.test(navigator.userAgent))\n return 'change';\n default:\n
return 'input';\n }\n }\n\n function updateInput(input, property, valu
e, santizeFn) {\n input[property] = (santizeFn || sanitizeValue)(value);\n }
\n\n function inputBinding(input, property, santizeFn) {\n return function(v
alue) {\n return updateInput(input, property, value, santizeFn);\n }\n
}\n\n function noop() {}\n\n function bindInputEvent(input, property, observab
le, postEventFn) {\n var eventType = getEventForInputType(input);\n\n func
tion eventHandler() {\n observable.setValue(input[property]);\n observ
able.discardChanges();\n (postEventFn || noop)(input);\n Platform.perf
ormMicrotaskCheckpoint();\n }\n input.addEventListener(eventType, eventHan
dler);\n\n return {\n close: function() {\n input.removeEventList
ener(eventType, eventHandler);\n observable.close();\n },\n\n o
bservable_: observable\n }\n }\n\n function booleanSanitize(value) {\n r
eturn Boolean(value);\n }\n\n // |element| is assumed to be an HTMLInputElemen
t with |type| == 'radio'.\n // Returns an array containing all radio buttons ot
her than |element| that\n // have the same |name|, either in the form that |ele
ment| belongs to or,\n // if no form, in the document tree to which |element| b
elongs.\n //\n // This implementation is based upon the HTML spec definition o
f a\n // \"radio button group\":\n // http://www.whatwg.org/specs/web-apps/c
urrent-work/multipage/number-state.html#radio-button-group\n //\n function get
AssociatedRadioButtons(element) {\n if (element.form) {\n return filter(
element.form.elements, function(el) {\n return el != element &&\n
el.tagName == 'INPUT' &&\n el.type == 'radio' &&\n el.
name == element.name;\n });\n } else {\n var treeScope = getTreeSco
pe(element);\n if (!treeScope)\n return [];\n var radios = tree
Scope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + element.nam
e + '\"]');\n return filter(radios, function(el) {\n return el != el
ement && !el.form;\n });\n }\n }\n\n function checkedPostEvent(input)
{\n // Only the radio button that is getting checked gets an event. We\n /
/ therefore find all the associated radio buttons and update their\n // check
binding manually.\n if (input.tagName === 'INPUT' &&\n input.type ===
'radio') {\n getAssociatedRadioButtons(input).forEach(function(radio) {\n
var checkedBinding = radio.bindings_.checked;\n if (checkedBinding
) {\n // Set the value directly to avoid an infinite call stack.\n
checkedBinding.observable_.setValue(false);\n }\n });\n }\n
}\n\n HTMLInputElement.prototype.bind = function(name, value, oneTime) {\n
if (name !== 'value' && name !== 'checked')\n return HTMLElement.prototype.
bind.call(this, name, value, oneTime);\n\n this.removeAttribute(name);\n v
ar sanitizeFn = name == 'checked' ? booleanSanitize : sanitizeValue;\n var po
stEventFn = name == 'checked' ? checkedPostEvent : noop;\n\n if (oneTime)\n
return updateInput(this, name, value, sanitizeFn);\n\n\n var observable =
value;\n var binding = bindInputEvent(this, name, observable, postEventFn);\
n updateInput(this, name,\n observable.open(inputBinding(this,
name, sanitizeFn)),\n sanitizeFn);\n\n // Checkboxes may need
to update bindings of other checkboxes.\n return updateBindings(this, name,
binding);\n }\n\n HTMLTextAreaElement.prototype.bind = function(name, value, o
neTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.ca
ll(this, name, value, oneTime);\n\n this.removeAttribute('value');\n\n if
(oneTime)\n return updateInput(this, 'value', value);\n\n var observable
= value;\n var binding = bindInputEvent(this, 'value', observable);\n upd
ateInput(this, 'value',\n observable.open(inputBinding(this, 'val
ue', sanitizeValue)));\n return maybeUpdateBindings(this, name, binding);\n
}\n\n function updateOption(option, value) {\n var parentNode = option.paren
tNode;;\n var select;\n var selectBinding;\n var oldValue;\n if (par
entNode instanceof HTMLSelectElement &&\n parentNode.bindings_ &&\n
parentNode.bindings_.value) {\n select = parentNode;\n selectBinding
= select.bindings_.value;\n oldValue = select.value;\n }\n\n option.
value = sanitizeValue(value);\n\n if (select && select.value != oldValue) {\n
selectBinding.observable_.setValue(select.value);\n selectBinding.obs
ervable_.discardChanges();\n Platform.performMicrotaskCheckpoint();\n }\
n }\n\n function optionBinding(option) {\n return function(value) {\n
updateOption(option, value);\n }\n }\n\n HTMLOptionElement.prototype.bind =
function(name, value, oneTime) {\n if (name !== 'value')\n return HTMLE
lement.prototype.bind.call(this, name, value, oneTime);\n\n this.removeAttrib
ute('value');\n\n if (oneTime)\n return updateOption(this, value);\n\n
var observable = value;\n var binding = bindInputEvent(this, 'value', obser
vable);\n updateOption(this, observable.open(optionBinding(this)));\n retu
rn maybeUpdateBindings(this, name, binding);\n }\n\n HTMLSelectElement.prototy
pe.bind = function(name, value, oneTime) {\n if (name === 'selectedindex')\n
name = 'selectedIndex';\n\n if (name !== 'selectedIndex' && name !== 'va
lue')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);
\n\n this.removeAttribute(name);\n\n if (oneTime)\n return updateInpu
t(this, name, value);\n\n var observable = value;\n var binding = bindInpu
tEvent(this, name, observable);\n updateInput(this, name,\n ob
servable.open(inputBinding(this, name)));\n\n // Option update events may nee
d to access select bindings.\n return updateBindings(this, name, binding);\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 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(function(global) {\n
'use strict';\n\n function assert(v) {\n if (!v)\n throw new Error('A
ssertion failed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Arr
ay.prototype.forEach);\n\n function getFragmentRoot(node) {\n var p;\n wh
ile (p = node.parentNode) {\n node = p;\n }\n\n return node;\n }\n\n
function searchRefId(node, id) {\n if (!id)\n return;\n\n var ref;\
n var selector = '#' + id;\n while (!ref) {\n node = getFragmentRoot(
node);\n\n if (node.protoContent_)\n ref = node.protoContent_.queryS
elector(selector);\n else if (node.getElementById)\n ref = node.getE
lementById(id);\n\n if (ref || !node.templateCreator_)\n break\n\n
node = node.templateCreator_;\n }\n\n return ref;\n }\n\n function g
etInstanceRoot(node) {\n while (node.parentNode) {\n node = node.parentN
ode;\n }\n return node.templateCreator_ ? node : null;\n }\n\n var Map;\
n if (global.Map && typeof global.Map.prototype.forEach === 'function') {\n
Map = global.Map;\n } else {\n Map = function() {\n this.keys = [];\n
this.values = [];\n };\n\n Map.prototype = {\n set: function(key,
value) {\n var index = this.keys.indexOf(key);\n if (index < 0) {
\n this.keys.push(key);\n this.values.push(value);\n }
else {\n this.values[index] = value;\n }\n },\n\n get:
function(key) {\n var index = this.keys.indexOf(key);\n if (index
< 0)\n return;\n\n return this.values[index];\n },\n\n
delete: function(key, value) {\n var index = this.keys.indexOf(key);\n
if (index < 0)\n return false;\n\n this.keys.splice(index
, 1);\n this.values.splice(index, 1);\n return true;\n },\n\n
forEach: function(f, opt_this) {\n for (var i = 0; i < this.keys.le
ngth; i++)\n f.call(opt_this || this, this.values[i], this.keys[i], thi
s);\n }\n };\n }\n\n // JScript does not have __proto__. We wrap all o
bject literals with\n // createObject which uses Object.create, Object.definePr
operty and\n // Object.getOwnPropertyDescriptor to create a new object that doe
s the exact\n // same thing. The main downside to this solution is that we have
to extract\n // all those property descriptors for IE.\n var createObject = (
'__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj)
{\n var proto = obj.__proto__;\n if (!proto)\n return ob
j;\n var newObject = Object.create(proto);\n Object.getOwnProperty
Names(obj).forEach(function(name) {\n Object.defineProperty(newObject,
name,\n Object.getOwnPropertyDescriptor(obj, name)
);\n });\n return newObject;\n };\n\n // IE does not support
have Document.prototype.contains.\n if (typeof document.contains != 'function'
) {\n Document.prototype.contains = function(node) {\n if (node === this
|| node.parentNode === this)\n return true;\n return this.documentE
lement.contains(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repe
at';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n 'template':
true,\n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var s
emanticTemplateElements = {\n 'THEAD': true,\n 'TBODY': true,\n 'TFOOT'
: true,\n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'COLGROUP': true
,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGROUP':
true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'undefin
ed';\n if (hasTemplateElement) {\n // TODO(rafaelw): Remove when fix for\n
// https://codereview.chromium.org/164803002/\n // makes it to Chrome relea
se.\n (function() {\n var t = document.createElement('template');\n
var d = t.content.ownerDocument;\n var html = d.appendChild(d.createElemen
t('html'));\n var head = html.appendChild(d.createElement('head'));\n
var base = d.createElement('base');\n base.href = document.baseURI;\n
head.appendChild(base);\n })();\n }\n\n var allTemplatesSelectors = 'templa
te, ' +\n Object.keys(semanticTemplateElements).map(function(tagName) {\n
return tagName.toLowerCase() + '[template]';\n }).join(', ');\n\n fu
nction isSVGTemplate(el) {\n return el.tagName == 'template' &&\n e
l.namespaceURI == 'http://www.w3.org/2000/svg';\n }\n\n function isHTMLTemplat
e(el) {\n return el.tagName == 'TEMPLATE' &&\n el.namespaceURI == '
http://www.w3.org/1999/xhtml';\n }\n\n function isAttributeTemplate(el) {\n
return Boolean(semanticTemplateElements[el.tagName] &&\n el.h
asAttribute('template'));\n }\n\n function isTemplate(el) {\n if (el.isTemp
late_ === undefined)\n el.isTemplate_ = el.tagName == 'TEMPLATE' || isAttri
buteTemplate(el);\n\n return el.isTemplate_;\n }\n\n // FIXME: Observe temp
lates being added/removed from documents\n // FIXME: Expose imperative API to d
ecorate and observe templates in\n // \"disconnected tress\" (e.g. ShadowRoot)\
n document.addEventListener('DOMContentLoaded', function(e) {\n bootstrapTem
platesRecursivelyFrom(document);\n // FIXME: Is this needed? Seems like it sh
ouldn't be.\n Platform.performMicrotaskCheckpoint();\n }, false);\n\n funct
ion forAllTemplatesFrom(node, fn) {\n var subTemplates = node.querySelectorAl
l(allTemplatesSelectors);\n\n if (isTemplate(node))\n fn(node)\n forE
ach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom(node
) {\n function bootstrap(template) {\n if (!HTMLTemplateElement.decorate
(template))\n bootstrapTemplatesRecursivelyFrom(template.content);\n }
\n\n forAllTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTemplateElement)
{\n /**\n * This represents a <template> element.\n * @constructor\n
* @extends {HTMLElement}\n */\n global.HTMLTemplateElement = functio
n() {\n throw TypeError('Illegal constructor');\n };\n }\n\n var hasPr
oto = '__proto__' in {};\n\n function mixin(to, from) {\n Object.getOwnPrope
rtyNames(from).forEach(function(name) {\n Object.defineProperty(to, name,\n
Object.getOwnPropertyDescriptor(from, name));\n }
);\n }\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/
index.html#dfn-template-contents-owner\n function getOrCreateTemplateContentsOw
ner(template) {\n var doc = template.ownerDocument\n if (!doc.defaultView)
\n return doc;\n var d = doc.templateContentsOwner_;\n if (!d) {\n
// TODO(arv): This should either be a Document or HTMLDocument depending\n
// on doc.\n d = doc.implementation.createHTMLDocument('');\n while
(d.lastChild) {\n d.removeChild(d.lastChild);\n }\n doc.templa
teContentsOwner_ = d;\n }\n return d;\n }\n\n function getTemplateStagin
gDocument(template) {\n if (!template.stagingDocument_) {\n var owner =
template.ownerDocument;\n if (!owner.stagingDocument_) {\n owner.sta
gingDocument_ = owner.implementation.createHTMLDocument('');\n\n // TODO(
rafaelw): Remove when fix for\n // https://codereview.chromium.org/164803
002/\n // makes it to Chrome release.\n var base = owner.stagingDo
cument_.createElement('base');\n base.href = document.baseURI;\n o
wner.stagingDocument_.head.appendChild(base);\n\n owner.stagingDocument_.
stagingDocument_ = owner.stagingDocument_;\n }\n\n template.stagingDoc
ument_ = owner.stagingDocument_;\n }\n\n return template.stagingDocument_;
\n }\n\n // For non-template browsers, the parser will disallow <template> in
certain\n // locations, so we allow \"attribute templates\" which combine the t
emplate\n // element with the top-level container node of the content, e.g.\n
//\n // <tr template repeat=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n
//\n // becomes\n //\n // <template repeat=\"{{ foo }}\">\n // + #docu
ment-fragment\n // + <tr class=\"bar\">\n // + <td>Bar</td>\n //\n
function extractTemplateFromAttributeTemplate(el) {\n var template = el.owne
rDocument.createElement('template');\n el.parentNode.insertBefore(template, e
l);\n\n var attribs = el.attributes;\n var count = attribs.length;\n wh
ile (count-- > 0) {\n var attrib = attribs[count];\n if (templateAttri
buteDirectives[attrib.name]) {\n if (attrib.name !== 'template')\n
template.setAttribute(attrib.name, attrib.value);\n el.removeAttribute
(attrib.name);\n }\n }\n\n return template;\n }\n\n function extrac
tTemplateFromSVGTemplate(el) {\n var template = el.ownerDocument.createElemen
t('template');\n el.parentNode.insertBefore(template, el);\n\n var attribs
= el.attributes;\n var count = attribs.length;\n while (count-- > 0) {\n
var attrib = attribs[count];\n template.setAttribute(attrib.name, attr
ib.value);\n el.removeAttribute(attrib.name);\n }\n\n el.parentNode.r
emoveChild(el);\n return template;\n }\n\n function liftNonNativeTemplateCh
ildrenIntoContent(template, el, useRoot) {\n var content = template.content;\
n if (useRoot) {\n content.appendChild(el);\n return;\n }\n\n
var child;\n while (child = el.firstChild) {\n content.appendChild(chil
d);\n }\n }\n\n var templateObserver;\n if (typeof MutationObserver == 'fu
nction') {\n templateObserver = new MutationObserver(function(records) {\n
for (var i = 0; i < records.length; i++) {\n records[i].target.refChan
ged_();\n }\n });\n }\n\n /**\n * Ensures proper API and content mod
el for template elements.\n * @param {HTMLTemplateElement} opt_instanceRef The
template element which\n * |el| template element will return as the value
of its ref(), and whose\n * content will be used as source when createIns
tance() is invoked.\n */\n HTMLTemplateElement.decorate = function(el, opt_in
stanceRef) {\n if (el.templateIsDecorated_)\n return false;\n\n var t
emplateElement = el;\n templateElement.templateIsDecorated_ = true;\n\n va
r isNativeHTMLTemplate = isHTMLTemplate(templateElement) &&\n
hasTemplateElement;\n var bootstrapContents = isNativeHTMLTemplat
e;\n var liftContents = !isNativeHTMLTemplate;\n var liftRoot = false;\n\n
if (!isNativeHTMLTemplate) {\n if (isAttributeTemplate(templateElement)
) {\n assert(!opt_instanceRef);\n templateElement = extractTemplat
eFromAttributeTemplate(el);\n templateElement.templateIsDecorated_ = true
;\n isNativeHTMLTemplate = hasTemplateElement;\n liftRoot = true;\
n } else if (isSVGTemplate(templateElement)) {\n templateElement = e
xtractTemplateFromSVGTemplate(el);\n templateElement.templateIsDecorated_
= true;\n isNativeHTMLTemplate = hasTemplateElement;\n }\n }\n\n
if (!isNativeHTMLTemplate) {\n fixTemplateElementPrototype(templateElem
ent);\n var doc = getOrCreateTemplateContentsOwner(templateElement);\n
templateElement.content_ = doc.createDocumentFragment();\n }\n\n if (opt_
instanceRef) {\n // template is contained within an instance, its direct co
ntent must be\n // empty\n templateElement.instanceRef_ = opt_instance
Ref;\n } else if (liftContents) {\n liftNonNativeTemplateChildrenIntoCon
tent(templateElement,\n el,\n
liftRoot);\n } else if (bootstrapCo
ntents) {\n bootstrapTemplatesRecursivelyFrom(templateElement.content);\n
}\n\n return true;\n };\n\n // TODO(rafaelw): This used to decorate recur
sively all templates from a given\n // node. This happens by default on 'DOMCon
tentLoaded', but may be needed\n // in subtrees not descendent from document (e
.g. ShadowRoot).\n // Review whether this is the right public API.\n HTMLTempl
ateElement.bootstrap = bootstrapTemplatesRecursivelyFrom;\n\n var htmlElement =
global.HTMLUnknownElement || HTMLElement;\n\n var contentDescriptor = {\n g
et: function() {\n return this.content_;\n },\n enumerable: true,\n
configurable: true\n };\n\n if (!hasTemplateElement) {\n // Gecko is more
picky with the prototype than WebKit. Make sure to use the\n // same prototy
pe as created in the constructor.\n HTMLTemplateElement.prototype = Object.cr
eate(htmlElement.prototype);\n\n Object.defineProperty(HTMLTemplateElement.pr
ototype, 'content',\n contentDescriptor);\n }\n\n fun
ction fixTemplateElementPrototype(el) {\n if (hasProto)\n el.__proto__ =
HTMLTemplateElement.prototype;\n else\n mixin(el, HTMLTemplateElement.p
rototype);\n }\n\n function ensureSetModelScheduled(template) {\n if (!temp
late.setModelFn_) {\n template.setModelFn_ = function() {\n template
.setModelFnScheduled_ = false;\n var map = getBindings(template,\n
template.delegate_ && template.delegate_.prepareBinding);\n processB
indings(template, map, template.model_);\n };\n }\n\n if (!template.s
etModelFnScheduled_) {\n template.setModelFnScheduled_ = true;\n Obser
ver.runEOM_(template.setModelFn_);\n }\n }\n\n mixin(HTMLTemplateElement.pr
ototype, {\n bind: function(name, value, oneTime) {\n if (name != 'ref')
\n return Element.prototype.bind.call(this, name, value, oneTime);\n\n
var self = this;\n var ref = oneTime ? value : value.open(function(ref)
{\n self.setAttribute('ref', ref);\n self.refChanged_();\n })
;\n\n this.setAttribute('ref', ref);\n this.refChanged_();\n if (
oneTime)\n return;\n\n if (!this.bindings_) {\n this.bindings
_ = { ref: value };\n } else {\n this.bindings_.ref = value;\n
}\n\n return value;\n },\n\n processBindingDirectives_: function(dire
ctives) {\n if (this.iterator_)\n this.iterator_.closeDeps();\n\n
if (!directives.if && !directives.bind && !directives.repeat) {\n if (
this.iterator_) {\n this.iterator_.close();\n this.iterator_ =
undefined;\n }\n\n return;\n }\n\n if (!this.iterator_)
{\n this.iterator_ = new TemplateIterator(this);\n }\n\n this.
iterator_.updateDependencies(directives, this.model_);\n\n if (templateObse
rver) {\n templateObserver.observe(this, { attributes: true,\n
attributeFilter: ['ref'] });\n }\n\n ret
urn this.iterator_;\n },\n\n createInstance: function(model, bindingDelega
te, delegate_) {\n if (bindingDelegate)\n delegate_ = this.newDelega
te_(bindingDelegate);\n\n if (!this.refContent_)\n this.refContent_
= this.ref_.content;\n var content = this.refContent_;\n if (content.f
irstChild === null)\n return emptyInstance;\n\n var map = this.bindi
ngMap_;\n if (!map || map.content !== content) {\n // TODO(rafaelw):
Setup a MutationObserver on content to detect\n // when the instanceMap
is invalid.\n map = createInstanceBindingMap(content,\n delega
te_ && delegate_.prepareBinding) || [];\n map.content = content;\n
this.bindingMap_ = map;\n }\n\n var stagingDocument = getTemplateStag
ingDocument(this);\n var instance = stagingDocument.createDocumentFragment(
);\n instance.templateCreator_ = this;\n instance.protoContent_ = cont
ent;\n instance.bindings_ = [];\n instance.terminator_ = null;\n
var instanceRecord = instance.templateInstance_ = {\n firstNode: null,\n
lastNode: null,\n model: model\n };\n\n var i = 0;\n
var collectTerminator = false;\n for (var child = content.firstChild; chi
ld; child = child.nextSibling) {\n // The terminator of the instance is t
he clone of the last child of the\n // content. If the last child is an a
ctive template, it may produce\n // instances as a result of production,
so simply collecting the last\n // child of the instance after it has fin
ished producing may be wrong.\n if (child.nextSibling === null)\n
collectTerminator = true;\n\n var clone = cloneAndBindInstance(child, i
nstance, stagingDocument,\n map.children
[i++],\n model,\n
delegate_,\n instance.
bindings_);\n clone.templateInstance_ = instanceRecord;\n if (coll
ectTerminator)\n instance.terminator_ = clone;\n }\n\n instan
ceRecord.firstNode = instance.firstChild;\n instanceRecord.lastNode = insta
nce.lastChild;\n instance.templateCreator_ = undefined;\n instance.pro
toContent_ = undefined;\n return instance;\n },\n\n get model() {\n
return this.model_;\n },\n\n set model(model) {\n this.model_ = m
odel;\n ensureSetModelScheduled(this);\n },\n\n get bindingDelegate()
{\n return this.delegate_ && this.delegate_.raw;\n },\n\n refChanged
_: function() {\n if (!this.iterator_ || this.refContent_ === this.ref_.con
tent)\n return;\n\n this.refContent_ = undefined;\n this.iterat
or_.valueChanged();\n this.iterator_.updateIteratedValue();\n },\n\n
clear: function() {\n this.model_ = undefined;\n this.delegate_ = unde
fined;\n if (this.bindings_ && this.bindings_.ref)\n this.bindings_.
ref.close()\n this.refContent_ = undefined;\n if (!this.iterator_)\n
return;\n this.iterator_.valueChanged();\n this.iterator_.close(
)\n this.iterator_ = undefined;\n },\n\n setDelegate_: function(deleg
ate) {\n this.delegate_ = delegate;\n this.bindingMap_ = undefined;\n
if (this.iterator_) {\n this.iterator_.instancePositionChangedFn_ =
undefined;\n this.iterator_.instanceModelFn_ = undefined;\n }\n }
,\n\n newDelegate_: function(bindingDelegate) {\n if (!bindingDelegate)\
n return {};\n\n function delegateFn(name) {\n var fn = bindi
ngDelegate && bindingDelegate[name];\n if (typeof fn != 'function')\n
return;\n\n return function() {\n return fn.apply(bindingD
elegate, arguments);\n };\n }\n\n return {\n raw: bindin
gDelegate,\n prepareBinding: delegateFn('prepareBinding'),\n prepa
reInstanceModel: delegateFn('prepareInstanceModel'),\n prepareInstancePos
itionChanged:\n delegateFn('prepareInstancePositionChanged')\n }
;\n },\n\n // TODO(rafaelw): Assigning .bindingDelegate always succeeds. I
t may\n // make sense to issue a warning or even throw if the template is alr
eady\n // \"activated\", since this would be a strange thing to do.\n set
bindingDelegate(bindingDelegate) {\n if (this.delegate_) {\n throw E
rror('Template must be cleared before a new bindingDelegate ' +\n
'can be assigned');\n }\n\n this.setDelegate_(this.newDelegate_(b
indingDelegate));\n },\n\n get ref_() {\n var ref = searchRefId(this,
this.getAttribute('ref'));\n if (!ref)\n ref = this.instanceRef_;\n
\n if (!ref)\n return this;\n\n var nextRef = ref.ref_;\n
return nextRef ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefin
ed if there are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, T
EXT)+] if there is at least one mustache.\n function parseMustaches(s, name, no
de, prepareBindingFn) {\n if (!s || !s.length)\n return;\n\n var toke
ns;\n var length = s.length;\n var startIndex = 0, lastIndex = 0, endIndex
= 0;\n var onlyOneTime = true;\n while (lastIndex < length) {\n var
startIndex = s.indexOf('{{', lastIndex);\n var oneTimeStart = s.indexOf('[[
', lastIndex);\n var oneTime = false;\n var terminator = '}}';\n\n
if (oneTimeStart >= 0 &&\n (startIndex < 0 || oneTimeStart < startInd
ex)) {\n startIndex = oneTimeStart;\n oneTime = true;\n ter
minator = ']]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.indexOf(ter
minator, startIndex + 2);\n\n if (endIndex < 0) {\n if (!tokens)\n
return;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n bre
ak;\n }\n\n tokens = tokens || [];\n tokens.push(s.slice(lastInde
x, startIndex)); // TEXT\n var pathString = s.slice(startIndex + 2, endInde
x).trim();\n tokens.push(oneTime); // ONE_TIME?\n onlyOneTime = onlyOn
eTime && oneTime;\n var delegateFn = prepareBindingFn &&\n
prepareBindingFn(pathString, name, node);\n // Don't try to parse the
expression if there's a prepareBinding function\n if (delegateFn == null)
{\n tokens.push(Path.get(pathString)); // PATH\n } else {\n t
okens.push(null);\n }\n tokens.push(delegateFn); // DELEGATE_FN\n
lastIndex = endIndex + 2;\n }\n\n if (lastIndex === length)\n tokens
.push(''); // TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens.i
sSimplePath = tokens.hasOnePath &&\n tokens[0] == '' &&
\n tokens[4] == '';\n tokens.onlyOneTime = onlyOneTi
me;\n\n tokens.combinator = function(values) {\n var newValue = tokens[0
];\n\n for (var i = 1; i < tokens.length; i += 4) {\n var value = to
kens.hasOnePath ? values : values[(i - 1) / 4];\n if (value !== undefined
)\n newValue += value;\n newValue += tokens[i + 3];\n }\n\n
return newValue;\n }\n\n return tokens;\n };\n\n function processO
neTimeBinding(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n
var delegateFn = tokens[3];\n var value = delegateFn ? delegateFn(model, no
de, true) :\n tokens[2].getValueFrom(model);\n
return tokens.isSimplePath ? value : tokens.combinator(value);\n }\n\n v
ar values = [];\n for (var i = 1; i < tokens.length; i += 4) {\n var del
egateFn = tokens[i + 2];\n values[(i - 1) / 4] = delegateFn ? delegateFn(mo
del, node) :\n tokens[i + 1].getValueFrom(model);\n }\n\n return
tokens.combinator(values);\n }\n\n function processSinglePathBinding(name, tok
ens, node, model) {\n var delegateFn = tokens[3];\n var observer = delegat
eFn ? delegateFn(model, node, false) :\n new PathObserver(model, tokens[2
]);\n\n return tokens.isSimplePath ? observer :\n new ObserverTransfor
m(observer, tokens.combinator);\n }\n\n function processBinding(name, tokens,
node, model) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding(
name, tokens, node, model);\n\n if (tokens.hasOnePath)\n return processS
inglePathBinding(name, tokens, node, model);\n\n var observer = new CompoundO
bserver();\n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTim
e = tokens[i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn) {
\n var value = delegateFn(model, node, oneTime);\n if (oneTime)\n
observer.addPath(value)\n else\n observer.addObserver(v
alue);\n continue;\n }\n\n var path = tokens[i + 1];\n if
(oneTime)\n observer.addPath(path.getValueFrom(model))\n else\n
observer.addPath(model, path);\n }\n\n return new ObserverTransform(obs
erver, tokens.combinator);\n }\n\n function processBindings(node, bindings, mo
del, instanceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n
var name = bindings[i]\n var tokens = bindings[i + 1];\n var value
= processBinding(name, tokens, node, model);\n var binding = node.bind(nam
e, value, tokens.onlyOneTime);\n if (binding && instanceBindings)\n
instanceBindings.push(binding);\n }\n\n if (!bindings.isTemplate)\n r
eturn;\n\n node.model_ = model;\n var iter = node.processBindingDirectives
_(bindings);\n if (instanceBindings && iter)\n instanceBindings.push(ite
r);\n }\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var v
= el.getAttribute(name);\n return parseMustaches(v == '' ? '{{}}' : v, name,
el, prepareBindingFn);\n }\n\n function parseAttributeBindings(element, prepa
reBindingFn) {\n assert(element);\n\n var bindings = [];\n var ifFound
= false;\n var bindFound = false;\n\n for (var i = 0; i < element.attribut
es.length; i++) {\n var attr = element.attributes[i];\n var name = att
r.name;\n var value = attr.value;\n\n // Allow bindings expressed in a
ttributes to be prefixed with underbars.\n // We do this to allow correct s
emantics for browsers that don't implement\n // <template> where certain at
tributes might trigger side-effects -- and\n // for IE which sanitizes cert
ain attributes, disallowing mustache\n // replacements in their text.\n
while (name[0] === '_') {\n name = name.substring(1);\n }\n\n
if (isTemplate(element) &&\n (name === IF || name === BIND || name ===
REPEAT)) {\n continue;\n }\n\n var tokens = parseMustaches(val
ue, name, element,\n prepareBindingFn);\n
if (!tokens)\n continue;\n\n bindings.push(name, tokens);\n }\n\n
if (isTemplate(element)) {\n bindings.isTemplate = true;\n binding
s.if = parseWithDefault(element, IF, prepareBindingFn);\n bindings.bind = p
arseWithDefault(element, BIND, prepareBindingFn);\n bindings.repeat = parse
WithDefault(element, REPEAT, prepareBindingFn);\n\n if (bindings.if && !bin
dings.bind && !bindings.repeat)\n bindings.bind = parseMustaches('{{}}',
BIND, element, prepareBindingFn);\n }\n\n return bindings;\n }\n\n funct
ion getBindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEMEN
T_NODE)\n return parseAttributeBindings(node, prepareBindingFn);\n\n if
(node.nodeType === Node.TEXT_NODE) {\n var tokens = parseMustaches(node.dat
a, 'textContent', node,\n prepareBindingFn);\n
if (tokens)\n return ['textContent', tokens];\n }\n\n return [
];\n }\n\n function cloneAndBindInstance(node, parent, stagingDocument, bindin
gs, model,\n delegate,\n
instanceBindings,\n instanceRecord) {\n
var clone = parent.appendChild(stagingDocument.importNode(node, false));\n\n
var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibl
ing) {\n cloneAndBindInstance(child, clone, stagingDocument,\n
bindings.children[i++],\n model,\n
delegate,\n instanceBindings)
;\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateElement.decorate(c
lone, node);\n if (delegate)\n clone.setDelegate_(delegate);\n }\
n\n processBindings(clone, bindings, model, instanceBindings);\n return cl
one;\n }\n\n function createInstanceBindingMap(node, prepareBindingFn) {\n
var map = getBindings(node, prepareBindingFn);\n map.children = {};\n var
index = 0;\n for (var child = node.firstChild; child; child = child.nextSibli
ng) {\n map.children[index++] = createInstanceBindingMap(child, prepareBind
ingFn);\n }\n\n return map;\n }\n\n Object.defineProperty(Node.prototype
, 'templateInstance', {\n get: function() {\n var instance = this.templa
teInstance_;\n return instance ? instance :\n (this.parentNode ? t
his.parentNode.templateInstance : undefined);\n }\n });\n\n var emptyInstan
ce = document.createDocumentFragment();\n emptyInstance.bindings_ = [];\n empt
yInstance.terminator_ = null;\n\n function TemplateIterator(templateElement) {\
n this.closed = false;\n this.templateElement_ = templateElement;\n thi
s.instances = [];\n this.deps = undefined;\n this.iteratedValue = [];\n
this.presentValue = undefined;\n this.arrayObserver = undefined;\n }\n\n T
emplateIterator.prototype = {\n closeDeps: function() {\n var deps = thi
s.deps;\n if (deps) {\n if (deps.ifOneTime === false)\n dep
s.ifValue.close();\n if (deps.oneTime === false)\n deps.value.cl
ose();\n }\n },\n\n updateDependencies: function(directives, model) {
\n this.closeDeps();\n\n var deps = this.deps = {};\n var templat
e = this.templateElement_;\n\n if (directives.if) {\n deps.hasIf = t
rue;\n deps.ifOneTime = directives.if.onlyOneTime;\n deps.ifValue
= processBinding(IF, directives.if, template, model);\n\n // oneTime if &
predicate is false. nothing else to do.\n if (deps.ifOneTime && !deps.if
Value) {\n this.updateIteratedValue();\n return;\n }\n\
n if (!deps.ifOneTime)\n deps.ifValue.open(this.updateIteratedVa
lue, this);\n }\n\n if (directives.repeat) {\n deps.repeat = tr
ue;\n deps.oneTime = directives.repeat.onlyOneTime;\n deps.value =
processBinding(REPEAT, directives.repeat, template, model);\n } else {\n
deps.repeat = false;\n deps.oneTime = directives.bind.onlyOneTime;\
n deps.value = processBinding(BIND, directives.bind, template, model);\n
}\n\n if (!deps.oneTime)\n deps.value.open(this.updateIteratedV
alue, this);\n\n this.updateIteratedValue();\n },\n\n updateIteratedV
alue: function() {\n if (this.deps.hasIf) {\n var ifValue = this.dep
s.ifValue;\n if (!this.deps.ifOneTime)\n ifValue = ifValue.disca
rdChanges();\n if (!ifValue) {\n this.valueChanged();\n
return;\n }\n }\n\n var value = this.deps.value;\n if (!t
his.deps.oneTime)\n value = value.discardChanges();\n if (!this.deps
.repeat)\n value = [value];\n var observe = this.deps.repeat &&\n
!this.deps.oneTime &&\n Array.isArray(value)
;\n this.valueChanged(value, observe);\n },\n\n valueChanged: functio
n(value, observeValue) {\n if (!Array.isArray(value))\n value = [];\
n\n if (value === this.iteratedValue)\n return;\n\n this.unobse
rve();\n this.presentValue = value;\n if (observeValue) {\n thi
s.arrayObserver = new ArrayObserver(this.presentValue);\n this.arrayObser
ver.open(this.handleSplices, this);\n }\n\n this.handleSplices(ArrayOb
server.calculateSplices(this.presentValue,\n
this.iteratedValue));\n },\n\n getLastInstanceNode: fu
nction(index) {\n if (index == -1)\n return this.templateElement_;\n
var instance = this.instances[index];\n var terminator = instance.ter
minator_;\n if (!terminator)\n return this.getLastInstanceNode(index
- 1);\n\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this
.templateElement_ === terminator) {\n return terminator;\n }\n\n
var subtemplateIterator = terminator.iterator_;\n if (!subtemplateIterato
r)\n return terminator;\n\n return subtemplateIterator.getLastTempla
teNode();\n },\n\n getLastTemplateNode: function() {\n return this.ge
tLastInstanceNode(this.instances.length - 1);\n },\n\n insertInstanceAt: f
unction(index, fragment) {\n var previousInstanceLast = this.getLastInstanc
eNode(index - 1);\n var parent = this.templateElement_.parentNode;\n t
his.instances.splice(index, 0, fragment);\n\n parent.insertBefore(fragment,
previousInstanceLast.nextSibling);\n },\n\n extractInstanceAt: function(i
ndex) {\n var previousInstanceLast = this.getLastInstanceNode(index - 1);\n
var lastNode = this.getLastInstanceNode(index);\n var parent = this.t
emplateElement_.parentNode;\n var instance = this.instances.splice(index, 1
)[0];\n\n while (lastNode !== previousInstanceLast) {\n var node = p
reviousInstanceLast.nextSibling;\n if (node == lastNode)\n lastN
ode = previousInstanceLast;\n\n instance.appendChild(parent.removeChild(n
ode));\n }\n\n return instance;\n },\n\n getDelegateFn: function
(fn) {\n fn = fn && fn(this.templateElement_);\n return typeof fn ===
'function' ? fn : null;\n },\n\n handleSplices: function(splices) {\n
if (this.closed || !splices.length)\n return;\n\n var template = th
is.templateElement_;\n\n if (!template.parentNode) {\n this.close();
\n return;\n }\n\n ArrayObserver.applySplices(this.iteratedValu
e, this.presentValue,\n splices);\n\n var d
elegate = template.delegate_;\n if (this.instanceModelFn_ === undefined) {\
n this.instanceModelFn_ =\n this.getDelegateFn(delegate && del
egate.prepareInstanceModel);\n }\n\n if (this.instancePositionChangedF
n_ === undefined) {\n this.instancePositionChangedFn_ =\n this
.getDelegateFn(delegate &&\n delegate.prepareInsta
ncePositionChanged);\n }\n\n // Instance Removals\n var instanceC
ache = new Map;\n var removeDelta = 0;\n for (var i = 0; i < splices.l
ength; i++) {\n var splice = splices[i];\n var removed = splice.re
moved;\n for (var j = 0; j < removed.length; j++) {\n var model
= removed[j];\n var instance = this.extractInstanceAt(splice.index + re
moveDelta);\n if (instance !== emptyInstance) {\n instanceCa
che.set(model, instance);\n }\n }\n\n removeDelta -= spli
ce.addedCount;\n }\n\n // Instance Insertions\n for (var i = 0; i
< splices.length; i++) {\n var splice = splices[i];\n var addInde
x = splice.index;\n for (; addIndex < splice.index + splice.addedCount; a
ddIndex++) {\n var model = this.iteratedValue[addIndex];\n var
instance = instanceCache.get(model);\n if (instance) {\n in
stanceCache.delete(model);\n } else {\n if (this.instanceMod
elFn_) {\n model = this.instanceModelFn_(model);\n }\n\n
if (model === undefined) {\n instance = emptyInstance;\
n } else {\n instance = template.createInstance(model, u
ndefined, delegate);\n }\n }\n\n this.insertInstanc
eAt(addIndex, instance);\n }\n }\n\n instanceCache.forEach(func
tion(instance) {\n this.closeInstanceBindings(instance);\n }, this);
\n\n if (this.instancePositionChangedFn_)\n this.reportInstancesMove
d(splices);\n },\n\n reportInstanceMoved: function(index) {\n var ins
tance = this.instances[index];\n if (instance === emptyInstance)\n r
eturn;\n\n this.instancePositionChangedFn_(instance.templateInstance_, inde
x);\n },\n\n reportInstancesMoved: function(splices) {\n var index =
0;\n var offset = 0;\n for (var i = 0; i < splices.length; i++) {\n
var splice = splices[i];\n if (offset != 0) {\n while (inde
x < splice.index) {\n this.reportInstanceMoved(index);\n i
ndex++;\n }\n } else {\n index = splice.index;\n
}\n\n while (index < splice.index + splice.addedCount) {\n this
.reportInstanceMoved(index);\n index++;\n }\n\n offset +=
splice.addedCount - splice.removed.length;\n }\n\n if (offset == 0)\n
return;\n\n var length = this.instances.length;\n while (index
< length) {\n this.reportInstanceMoved(index);\n index++;\n
}\n },\n\n closeInstanceBindings: function(instance) {\n var bindings
= instance.bindings_;\n for (var i = 0; i < bindings.length; i++) {\n
bindings[i].close();\n }\n },\n\n unobserve: function() {\n i
f (!this.arrayObserver)\n return;\n\n this.arrayObserver.close();\n
this.arrayObserver = undefined;\n },\n\n close: function() {\n i
f (this.closed)\n return;\n this.unobserve();\n for (var i = 0;
i < this.instances.length; i++) {\n this.closeInstanceBindings(this.inst
ances[i]);\n }\n\n this.instances.length = 0;\n this.closeDeps();
\n this.templateElement_.iterator_ = undefined;\n this.closed = true;\
n }\n };\n\n // Polyfill-specific API.\n HTMLTemplateElement.forAllTemplat
esFrom_ = forAllTemplatesFrom;\n})(this);\n","/*\n Copyright (C) 2013 Ariya Hid
ayat <ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gm
ail.com>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyri
ght (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Bo
ekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowa
l@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copy
right (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011
Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source an
d binary forms, with or without\n modification, are permitted provided that the
following conditions are met:\n\n * Redistributions of source code must reta
in the above copyright\n notice, this list of conditions and the following
disclaimer.\n * Redistributions in binary form must reproduce the above copyr
ight\n notice, this list of conditions and the following disclaimer in the\
n documentation and/or other materials provided with the distribution.\n\n
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n I
MPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, I
NDIRECT, 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 THEOR
Y OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEG
LIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVE
N IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n
'use strict';\n\n var Token,\n TokenName,\n Syntax,\n M
essages,\n source,\n index,\n length,\n delegate,\n
lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n
EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLitera
l: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral
: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boole
an';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Id
entifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullL
iteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenNa
me[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'Stri
ng';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression',\n Bin
aryExpression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n
ConditionalExpression: 'ConditionalExpression',\n EmptyStatement:
'EmptyStatement',\n ExpressionStatement: 'ExpressionStatement',\n
Identifier: 'Identifier',\n Literal: 'Literal',\n LabeledStatement
: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n
MemberExpression: 'MemberExpression',\n ObjectExpression: 'ObjectExpressi
on',\n Program: 'Program',\n Property: 'Property',\n ThisEx
pression: 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\
n\n // Error messages should be identical to V8.\n Messages = {\n U
nexpectedToken: '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 // Thi
s 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 case.\n // D
o 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 isDecimalDigit(ch
) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 Whi
te Space\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // s
pace\n (ch === 9) || // tab\n (ch === 0xB) ||\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.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 isIdenti
fierStart(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 function isIdentifie
rPart(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 (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.charCo
deAt(index))) {\n ++index;\n }\n }\n\n function getIdenti
fier() {\n var start, ch;\n\n start = index++;\n while (ind
ex < length) {\n ch = source.charCodeAt(index);\n if (isId
entifierPart(ch)) {\n ++index;\n } else {\n
break;\n }\n }\n\n return source.slice(start, inde
x);\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 ide
ntifier.\n if (id.length === 1) {\n type = Token.Identifier;\n
} else if (isKeyword(id)) {\n type = Token.Keyword;\n
} else if (id === 'null') {\n type = Token.NullLiteral;\n } el
se if (id === 'true' || id === 'false') {\n type = Token.BooleanLiter
al;\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 sc
anPunctuator() {\n var start = index,\n code = source.charCode
At(index),\n code2,\n ch1 = source[index],\n ch
2;\n\n switch (code) {\n\n // Check for most common single-charact
er punctuators.\n case 46: // . dot\n case 40: // ( open brack
et\n case 41: // ) close bracket\n case 59: // ; semicolon\n
case 44: // , comma\n case 123: // { open curly brace\n c
ase 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
value: String.fromCharCode(code) + String.fromCharCode(code2),\n
range: [start, index]\n };\n\n cas
e 33: // !\n case 61: // =\n index += 2;\n\n
// !== and ===\n if (source.charCodeAt(inde
x) === 61) {\n ++index;\n }\n
return {\n type: Token.Punctuator,\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 === ch2 && ('&|'.in
dexOf(ch1) >= 0)) {\n index += 2;\n return {\n
type: Token.Punctuator,\n value: ch1 + ch2,\n
range: [start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.i
ndexOf(ch1) >= 0) {\n ++index;\n return {\n
type: Token.Punctuator,\n value: ch1,\n range: [s
tart, index]\n };\n }\n\n throwError({}, Messages.Unexp
ectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function sc
anNumericLiteral() {\n var number, start, ch;\n\n ch = source[inde
x];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n
'Numeric literal must start with a decimal digit or a decimal point');\n\n
start = index;\n number = '';\n if (ch !== '.') {\n
number = source[index++];\n ch = source[index];\n\n // H
ex number starts with '0x'.\n // Octal number starts with '0'.\n
if (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.
charCodeAt(index))) {\n number += source[index++];\n }
\n ch = source[index];\n }\n\n if (ch === '.') {\n
number += source[index++];\n while (isDecimalDigit(source.char
CodeAt(index))) {\n number += source[index++];\n }\n
ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E'
) {\n number += source[index++];\n\n ch = source[index];\n
if (ch === '+' || ch === '-') {\n number += source[in
dex++];\n }\n if (isDecimalDigit(source.charCodeAt(index))
) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n
number += source[index++];\n }\n } else {
\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n
}\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n
return {\n type: Token.NumericLiteral,\n value: par
seFloat(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[index];\n
assert((quote === '\\'' || quote === '\"'),\n 'String literal must st
arts with a quote');\n\n start = index;\n ++index;\n\n whil
e (index < length) {\n ch = source[index++];\n\n if (ch ==
= quote) {\n quote = '';\n break;\n } e
lse 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
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 ++index;\n
}\n }\n } else if (isLineTerminator(ch.ch
arCodeAt(0))) {\n break;\n } else {\n s
tr += ch;\n }\n }\n\n if (quote !== '') {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n retur
n {\n type: Token.StringLiteral,\n value: str,\n
octal: octal,\n range: [start, index]\n };\n }\n\n fun
ction isIdentifierName(token) {\n return token.type === Token.Identifier
||\n token.type === Token.Keyword ||\n token.type === Toke
n.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n
function advance() {\n var ch;\n\n skipWhitespace();\n\n i
f (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 scanPunctuator();\n
}\n\n // String literal starts with single quote (#39) or double qu
ote (#34).\n if (ch === 39 || ch === 34) {\n return scanString
Literal();\n }\n\n if (isIdentifierStart(ch)) {\n retur
n scanIdentifier();\n }\n\n // Dot (.) char #46 can also start a f
loating-point number, hence the need\n // to check the next character.\n
if (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index
+ 1))) {\n return scanNumericLiteral();\n }\n
return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n
return scanNumericLiteral();\n }\n\n return scanPunctuato
r();\n }\n\n function lex() {\n var token;\n\n token = looka
head;\n index = token.range[1];\n\n lookahead = advance();\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 function throwEr
ror(token, messageFormat) {\n var error,\n args = Array.protot
ype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n
/%(\\d)/g,\n function (whole, index) {\n
assert(index < args.length, 'Message reference must be in range');\n
return args[index];\n }\n );\n\n er
ror = new Error(msg);\n error.index = index;\n error.description =
msg;\n throw error;\n }\n\n // Throw an exception because of the t
oken.\n\n function throwUnexpected(token) {\n throwError(token, Messag
es.UnexpectedToken, token.value);\n }\n\n // Expect the next token to matc
h the specified punctuator.\n // If not, an exception will be thrown.\n\n
function expect(value) {\n var token = lex();\n if (token.type !==
Token.Punctuator || token.value !== value) {\n throwUnexpected(token
);\n }\n }\n\n // Return true if the next token matches the specifi
ed punctuator.\n\n function match(value) {\n return lookahead.type ===
Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if
the next token matches the specified keyword\n\n function matchKeyword(keywor
d) {\n return lookahead.type === Token.Keyword && lookahead.value === key
word;\n }\n\n function consumeSemicolon() {\n // Catch the very com
mon case first: immediately a semicolon (char #59).\n if (source.charCode
At(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 element
s = [];\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.c
reateArrayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n
function parseObjectPropertyKey() {\n var token;\n\n skipWhitesp
ace();\n token = lex();\n\n // Note: This function is called only
from parseObjectProperty(), where\n // EOF and Punctuator tokens are alre
ady filtered out.\n if (token.type === Token.StringLiteral || token.type
=== Token.NumericLiteral) {\n return delegate.createLiteral(token);\n
}\n\n return delegate.createIdentifier(token.value);\n }\n\n
function parseObjectProperty() {\n var token, key;\n\n token = l
ookahead;\n skipWhitespace();\n\n if (token.type === Token.EOF ||
token.type === Token.Punctuator) {\n throwUnexpected(token);\n
}\n\n key = parseObjectPropertyKey();\n expect(':');\n ret
urn delegate.createProperty('init', key, parseExpression());\n }\n\n funct
ion parseObjectInitialiser() {\n var properties = [];\n\n expect('
{');\n\n while (!match('}')) {\n properties.push(parseObjectPr
operty());\n\n if (!match('}')) {\n expect(',');\n
}\n }\n\n expect('}');\n\n return delegate.createOb
jectExpression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n
function parseGroupExpression() {\n var expr;\n\n expect('(');\n\
n expr = parseExpression();\n\n expect(')');\n\n return exp
r;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpre
ssion() {\n var type, token, expr;\n\n if (match('(')) {\n
return parseGroupExpression();\n }\n\n type = lookahead.type;\
n\n if (type === Token.Identifier) {\n expr = delegate.createI
dentifier(lex().value);\n } else if (type === Token.StringLiteral || type
=== Token.NumericLiteral) {\n expr = delegate.createLiteral(lex());\
n } else if (type === Token.Keyword) {\n if (matchKeyword('thi
s')) {\n lex();\n expr = delegate.createThisExpres
sion();\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 === Tok
en.NullLiteral) {\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(t
oken)) {\n throwUnexpected(token);\n }\n\n return deleg
ate.createIdentifier(token.value);\n }\n\n function parseNonComputedMember
() {\n expect('.');\n\n return parseNonComputedProperty();\n }\
n\n function parseComputedMember() {\n var expr;\n\n expect('['
);\n\n expr = parseExpression();\n\n expect(']');\n\n retur
n expr;\n }\n\n function parseLeftHandSideExpression() {\n var expr
, property;\n\n expr = parsePrimaryExpression();\n\n while (match(
'.') || match('[')) {\n if (match('[')) {\n property =
parseComputedMember();\n expr = delegate.createMemberExpression(
'[', expr, property);\n } else {\n property = parseNon
ComputedMember();\n expr = delegate.createMemberExpression('.', e
xpr, property);\n }\n }\n\n return expr;\n }\n\n
// 11.3 Postfix Expressions\n\n var parsePostfixExpression = parseLeftHandSid
eExpression;\n\n // 11.4 Unary Operators\n\n function parseUnaryExpression
() {\n var token, expr;\n\n if (lookahead.type !== Token.Punctuato
r && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpress
ion();\n } else if (match('+') || match('-') || match('!')) {\n
token = lex();\n expr = parseUnaryExpression();\n expr =
delegate.createUnaryExpression(token.value, expr);\n } else if (matchKey
word('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n
throwError({}, Messages.UnexpectedToken);\n } else {\n expr =
parsePostfixExpression();\n }\n\n return expr;\n }\n\n func
tion 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 pre
c = 1;\n break;\n\n case '&&':\n prec = 2;\n
break;\n\n case '==':\n case '!=':\n case '===':\n
case '!==':\n prec = 6;\n break;\n\n case '<':\
n case '>':\n case '<=':\n case '>=':\n case 'instan
ceof':\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 prec;\n }\n\n // 11.5 Mu
ltiplicative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shif
t Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n
// 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n
function parseBinaryExpression() {\n var expr, token, prec, stack, rig
ht, operator, left, i;\n\n left = parseUnaryExpression();\n\n toke
n = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0)
{\n return left;\n }\n token.prec = prec;\n lex
();\n\n right = parseUnaryExpression();\n\n stack = [left, token,
right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n
// Reduce: make a binary expression from the 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.createBi
naryExpression(operator, left, right);\n stack.push(expr);\n
}\n\n // Shift.\n token = lex();\n token
.prec = prec;\n stack.push(token);\n expr = parseUnaryExpr
ession();\n stack.push(expr);\n }\n\n // Final reduce t
o clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n
while (i > 1) {\n expr = delegate.createBinaryExpression(stac
k[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n
return expr;\n }\n\n\n // 11.12 Conditional Operator\n\n function parse
ConditionalExpression() {\n var expr, consequent, alternate;\n\n e
xpr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\
n consequent = parseConditionalExpression();\n expect(':')
;\n alternate = parseConditionalExpression();\n\n expr = d
elegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n
return expr;\n }\n\n // Simplification since we do not support Ass
ignmentExpression.\n var parseExpression = 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 (identifier.type !== Token.Identifier) {\n throw
Unexpected(identifier);\n }\n\n args = match('(') ? parseArguments
() : [];\n\n return delegate.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 // Lab
elledExpressions\n // AsExpression\n // InExpression\n // FilterE
xpression\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n
// InExpression ::\n // Identifier, Identifier in FilterExpression\n
// Identifier in FilterExpression\n\n // FilterExpression ::\n // Exp
ression\n // Expression Filters\n\n function parseTopLevel() {\n
skipWhitespace();\n peek();\n\n var expr = 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 parseA
sExpression(expr);\n } else {\n delegate.creat
eTopLevel(expr);\n }\n }\n }\n\n if (loo
kahead.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }
\n }\n\n function parseAsExpression(expr) {\n lex(); // as\n
var identifier = lex().value;\n delegate.createAsExpression(expr, ident
ifier);\n }\n\n function parseInExpression(identifier) {\n var inde
xName;\n if (lookahead.value === ',') {\n lex();\n
if (lookahead.type !== Token.Identifier)\n throwUnexpected(lookah
ead);\n indexName = lex().value;\n }\n\n lex(); // in\
n var expr = parseExpression();\n parseFilters();\n delegat
e.createInExpression(identifier.name, indexName, expr);\n }\n\n function p
arse(code, inDelegate) {\n delegate = inDelegate;\n source = code;
\n index = 0;\n length = source.length;\n lookahead = null;
\n state = {\n labelSet: {}\n };\n\n return pars
eTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(
this);\n","// Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\n// This code may only be used under the BSD style license found at http://po
lymer.github.io/LICENSE.txt\n// The complete set of authors may be found at http
://polymer.github.io/AUTHORS.txt\n// The complete set of contributors may be fou
nd at http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google a
s part of the polymer project is also\n// subject to an additional IP rights gra
nt found at http://polymer.github.io/PATENTS.txt\n\n(function (global) {\n 'use
strict';\n\n // JScript does not have __proto__. We wrap all object literals w
ith\n // createObject which uses Object.create, Object.defineProperty and\n //
Object.getOwnPropertyDescriptor to create a new object that does the exact\n /
/ same thing. The main downside to this solution is that we have to extract\n /
/ all those property descriptors for IE.\n var createObject = ('__proto__' in {
}) ?\n function(obj) { return obj; } :\n function(obj) {\n var
proto = obj.__proto__;\n if (!proto)\n return obj;\n var
newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEa
ch(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n });\
n return newObject;\n };\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 // convert literal computed property access where literal val
ue is a value\n // path to ident dot-access.\n if (accessor == '[' &&\n
property instanceof Literal &&\n Path.get(property.value).valid) {\n
accessor = '.';\n property = new IdentPath(property.value);\n }\n\
n this.dynamicDeps = typeof object == 'function' || object.dynamic;\n\n th
is.dynamic = typeof property == 'function' ||\n property.dynam
ic ||\n accessor == '[';\n\n this.simplePath =\n !th
is.dynamic &&\n !this.dynamicDeps &&\n property instanceof IdentPa
th &&\n (object instanceof MemberExpression || object instanceof IdentPat
h);\n\n this.object = this.simplePath ? object : getFn(object);\n this.pro
perty = accessor == '.' ? property : getFn(property);\n }\n\n MemberExpression
.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n var
last = this.object instanceof IdentPath ?\n this.object.name : this.o
bject.fullPath;\n this.fullPath_ = Path.get(last + '.' + this.property.na
me);\n }\n\n return this.fullPath_;\n },\n\n valueFn: function()
{\n if (!this.valueFn_) {\n var object = this.object;\n\n if
(this.simplePath) {\n var path = this.fullPath;\n\n this.valu
eFn_ = function(model, observer) {\n if (observer)\n obs
erver.addPath(model, path);\n\n return path.getValueFrom(model);\n
};\n } else if (this.property instanceof IdentPath) {\n v
ar path = Path.get(this.property.name);\n\n this.valueFn_ = function(mo
del, observer) {\n var context = object(model, observer);\n\n
if (observer)\n observer.addPath(context, path);\n\n
return path.getValueFrom(context);\n }\n } else {\n //
Computed property.\n var property = this.property;\n\n this.v
alueFn_ = function(model, observer) {\n var context = object(model, o
bserver);\n var propName = property(model, observer);\n if
(observer)\n observer.addPath(context, propName);\n\n r
eturn context ? context[propName] : undefined;\n };\n }\n }
\n return this.valueFn_;\n },\n\n setValue: function(model, newValue)
{\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newV
alue);\n return newValue;\n }\n\n var object = this.object(mode
l);\n var propName = this.property instanceof IdentPath ? this.property.nam
e :\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] = g
etFn(args[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(va
lue, toModelDirection, filterRegistry, model,\n observer)
{\n var fn = filterRegistry[this.name];\n var context = model;\n
if (fn) {\n context = undefined;\n } else {\n fn = context[t
his.name];\n if (!fn) {\n console.error('Cannot find filter: ' +
this.name);\n return;\n }\n }\n\n // If toModelDirect
ion is falsey, then the \"normal\" (dom-bound) direction\n // is used. Othe
rwise, 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('No ' + (toModelDirection ? 'toModel' : '
toDOM') +\n ' found on' + this.name);\n return;\n
}\n\n var args = [value];\n for (var i = 0; i < this.args.length; i
++) {\n args[i + 1] = getFn(this.args[i])(model, observer);\n }\n\n
return fn.apply(context, args);\n }\n };\n\n function notImplemented()
{ throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': funct
ion(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 '>': funct
ion(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 functi
on 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.scopeIdent
= undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;\n
}\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op, argu
ment) {\n if (!unaryOperators[op])\n throw Error('Disallowed operato
r: ' + op);\n\n argument = getFn(argument);\n\n return function(model,
observer) {\n return unaryOperators[op](argument(model, observer));\n
};\n },\n\n createBinaryExpression: function(op, left, right) {\n
if (!binaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\
n left = getFn(left);\n right = getFn(right);\n\n return function
(model, observer) {\n return binaryOperators[op](left(model, observer),\n
right(model, observer));\n };\n },\n\
n createConditionalExpression: function(test, consequent, alternate) {\n
test = getFn(test);\n consequent = getFn(consequent);\n alternate = g
etFn(alternate);\n\n return function(model, observer) {\n return tes
t(model, observer) ?\n consequent(model, observer) : alternate(model,
observer);\n }\n },\n\n createIdentifier: function(name) {\n va
r ident = new IdentPath(name);\n ident.type = 'Identifier';\n return i
dent;\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
createLiteral: function(token) {\n return new Literal(token.value);\n
},\n\n createArrayExpression: function(elements) {\n for (var i = 0; i
< elements.length; i++)\n elements[i] = getFn(elements[i]);\n\n ret
urn function(model, observer) {\n var arr = []\n for (var i = 0; i
< elements.length; i++)\n arr.push(elements[i](model, observer));\n
return arr;\n }\n },\n\n createProperty: function(kind, key, val
ue) {\n return {\n key: key instanceof IdentPath ? key.name : key.va
lue,\n value: value\n };\n },\n\n createObjectExpression: func
tion(properties) {\n for (var i = 0; i < properties.length; i++)\n p
roperties[i].value = getFn(properties[i].value);\n\n return function(model,
observer) {\n var obj = {};\n for (var i = 0; i < properties.leng
th; i++)\n obj[properties[i].key] = properties[i].value(model, observer
);\n return obj;\n }\n },\n\n createFilter: function(name, arg
s) {\n this.filters.push(new Filter(name, args));\n },\n\n createAsEx
pression: function(expression, scopeIdent) {\n this.expression = expression
;\n this.scopeIdent = scopeIdent;\n },\n\n createInExpression: functi
on(scopeIdent, indexIdent, expression) {\n this.expression = expression;\n
this.scopeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\
n\n createTopLevel: function(expression) {\n this.expression = expressio
n;\n },\n\n createThisExpression: notImplemented\n }\n\n function Consta
ntObservable(value) {\n this.value_ = value;\n }\n\n ConstantObservable.pro
totype = {\n open: function() { return this.value_; },\n discardChanges: f
unction() { return this.value_; },\n deliver: function() {},\n close: func
tion() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = dele
gate.scopeIdent;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegat
e.expression)\n throw Error('No expression found.');\n\n this.expression
= delegate.expression;\n getFn(this.expression); // forces enumeration of pa
th dependencies\n\n this.filters = delegate.filters;\n this.dynamicDeps =
delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: functi
on(model, filterRegistry, oneTime) {\n if (oneTime)\n return this.ge
tValue(model, undefined, filterRegistry);\n\n var observer = new CompoundOb
server();\n // captures deps.\n var firstValue = this.getValue(model,
observer, filterRegistry);\n var firstTime = true;\n var self = this;\
n\n function valueFn() {\n // deps cannot have changed on first valu
e retrieval.\n if (firstTime) {\n firstTime = false;\n
return firstValue;\n }\n\n if (self.dynamicDeps)\n observ
er.startReset();\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n
filterRegistry);\n if (self.dynamicDeps)\n observer.
finishReset();\n\n return value;\n }\n\n function setValueFn(ne
wValue) {\n self.setValue(model, newValue, filterRegistry);\n retu
rn newValue;\n }\n\n return new ObserverTransform(observer, valueFn, s
etValueFn, true);\n },\n\n getValue: function(model, observer, filterRegis
try) {\n var value = getFn(this.expression)(model, observer);\n for (v
ar i = 0; i < this.filters.length; i++) {\n value = this.filters[i].trans
form(value, false, filterRegistry, model,\n
observer);\n }\n\n return value;\n },\n\n setValue: functio
n(model, newValue, filterRegistry) {\n var count = this.filters ? this.filt
ers.length : 0;\n while (count-- > 0) {\n newValue = this.filters[co
unt].transform(newValue, true, filterRegistry,\n
model);\n }\n\n if (this.expression.setValue)\n
return this.expression.setValue(model, newValue);\n }\n }\n\n /**\n * C
onverts a style property name to a css property name. For example:\n * \"Webki
tUserSelect\" to \"-webkit-user-select\"\n */\n function convertStyleProperty
Name(name) {\n return String(name).replace(/[A-Z]/g, function(c) {\n ret
urn '-' + c.toLowerCase();\n });\n }\n\n function isEventHandler(name) {\n
return name[0] === 'o' &&\n name[1] === 'n' &&\n name[2]
=== '-';\n }\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart
',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n
'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCase
EventTypes[e.toLowerCase()] = e;\n });\n\n var parentScopeName = '@' + Math.ra
ndom().toString(36).slice(2);\n\n // Single ident paths must bind directly to t
he appropriate scope object.\n // I.e. Pushed values in two-bindings need to be
assigned to the actual model\n // object.\n function findScope(model, prop) {
\n while (model[parentScopeName] &&\n !Object.prototype.hasOwnPrope
rty.call(model, prop)) {\n model = model[parentScopeName];\n }\n\n re
turn model;\n }\n\n function resolveEventReceiver(model, path, node) {\n if
(path.length == 0)\n return undefined;\n\n if (path.length == 1)\n
return findScope(model, path[0]);\n\n for (var i = 0; model != null && i < p
ath.length - 1; i++) {\n model = model[path[i]];\n }\n\n return model
;\n }\n\n function prepareEventBinding(path, name, polymerExpressions) {\n
var eventType = name.substring(3);\n eventType = mixedCaseEventTypes[eventTyp
e] || eventType;\n\n return function(model, node, oneTime) {\n var fn, r
eceiver, handler;\n if (typeof polymerExpressions.resolveEventHandler == 'f
unction') {\n handler = function(e) {\n fn = fn || polymerExpres
sions.resolveEventHandler(model, path, node);\n fn(e, e.detail, e.curre
ntTarget);\n\n if (Platform && typeof Platform.flush == 'function')\n
Platform.flush();\n };\n } else {\n handler = funct
ion(e) {\n fn = fn || path.getValueFrom(model);\n receiver = r
eceiver || resolveEventReceiver(model, path, node);\n\n fn.apply(receiv
er, [e, e.detail, e.currentTarget]);\n\n if (Platform && typeof Platfor
m.flush == 'function')\n Platform.flush();\n };\n }\n\n
node.addEventListener(eventType, handler);\n\n if (oneTime)\n re
turn;\n\n function bindingValue() {\n return '{{ ' + path + ' }}';\n
}\n\n return {\n open: bindingValue,\n discardChanges:
bindingValue,\n close: function() {\n node.removeEventListener(e
ventType, handler);\n }\n };\n }\n }\n\n function isLiteralExpr
ession(pathString) {\n switch (pathString) {\n case '':\n return
false;\n\n case 'false':\n case 'null':\n case 'true':\n r
eturn true;\n }\n\n if (!isNaN(Number(pathString)))\n return true;\n\
n return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpre
ssions.prototype = {\n // \"built-in\" filters\n styleObject: function(val
ue) {\n var parts = [];\n for (var key in value) {\n parts.push
(convertStylePropertyName(key) + ': ' + value[key]);\n }\n return part
s.join('; ');\n },\n\n tokenList: function(value) {\n var tokens = []
;\n for (var key in value) {\n if (value[key])\n tokens.pus
h(key);\n }\n return tokens.join(' ');\n },\n\n // binding deleg
ate API\n prepareInstancePositionChanged: function(template) {\n var ind
exIdent = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n
return;\n\n return function(templateInstance, index) {\n templateI
nstance.model[indexIdent] = index;\n };\n },\n\n prepareBinding: func
tion(pathString, name, node) {\n var path = Path.get(pathString);\n if
(isEventHandler(name)) {\n if (!path.valid) {\n console.error('
on-* bindings must be simple path expressions');\n return;\n }\n
\n return prepareEventBinding(path, name, this);\n }\n\n if (!i
sLiteralExpression(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 = findSco
pe(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 = templat
e.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n
var parentScope = template.templateInstance ?\n template.templateInsta
nce.model :\n template.model;\n\n var indexName = template.polymer
ExpressionIndexIdent_;\n\n return function(model) {\n var scope = Ob
ject.create(parentScope);\n scope[scopeName] = model;\n scope[inde
xName] = undefined;\n scope[parentScopeName] = parentScope;\n retu
rn scope;\n };\n }\n };\n\n global.PolymerExpressions = PolymerExpress
ions;\n if (global.exposeGetExpression)\n global.getExpression_ = getExpress
ion;\n\n global.PolymerExpressions.prepareEventBinding = prepareEventBinding;\n
})(this);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n
* Use of this source code is governed by a BSD-style\n * license that can be fou
nd in the LICENSE file.\n */\n(function(scope) {\n\n// inject style sheet\nvar s
tyle = document.createElement('style');\nstyle.textContent = 'template {display:
none !important;} /* injected by platform.js */';\nvar head = document.querySel
ector('head');\nhead.insertBefore(style, head.firstChild);\n\n// flush (with log
ging)\nvar flushing;\nfunction flush() {\n if (!flushing) {\n flushing = tru
e;\n scope.endOfMicrotask(function() {\n flushing = false;\n logFla
gs.data && console.group('Platform.flush()');\n scope.performMicrotaskCheck
point();\n logFlags.data && console.groupEnd();\n });\n }\n};\n\n// pol
ling dirty checker\n// flush periodically if platform does not have object obser
ve.\nif (!Observer.hasObjectObserve) {\n var FLUSH_POLL_INTERVAL = 125;\n wind
ow.addEventListener('WebComponentsReady', function() {\n flush();\n scope.
flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n });\n} else {\n // make
flush a no-op when we have Object.observe\n flush = function() {};\n}\n\nif (w
indow.CustomElements && !CustomElements.useNative) {\n var originalImportNode =
Document.prototype.importNode;\n Document.prototype.importNode = function(node
, deep) {\n var imported = originalImportNode.call(this, node, deep);\n Cu
stomElements.upgradeAll(imported);\n return imported;\n }\n}\n\n// exports\n
scope.flush = flush;\n\n})(window.Platform);\n\n"]} | 1 {"version":3,"file":"platform.js","sources":["../PointerGestures/src/PointerGest
ureEvent.js","../WeakMap/weakmap.js","../observe-js/src/observe.js","build/if-po
ly.js","../ShadowDOM/src/wrappers.js","../ShadowDOM/src/microtask.js","../Shadow
DOM/src/MutationObserver.js","../ShadowDOM/src/TreeScope.js","../ShadowDOM/src/w
rappers/events.js","../ShadowDOM/src/wrappers/NodeList.js","../ShadowDOM/src/wra
ppers/HTMLCollection.js","../ShadowDOM/src/wrappers/Node.js","../ShadowDOM/src/q
uerySelector.js","../ShadowDOM/src/wrappers/node-interfaces.js","../ShadowDOM/sr
c/wrappers/CharacterData.js","../ShadowDOM/src/wrappers/Text.js","../ShadowDOM/s
rc/wrappers/Element.js","../ShadowDOM/src/wrappers/HTMLElement.js","../ShadowDOM
/src/wrappers/HTMLCanvasElement.js","../ShadowDOM/src/wrappers/HTMLContentElemen
t.js","../ShadowDOM/src/wrappers/HTMLImageElement.js","../ShadowDOM/src/wrappers
/HTMLShadowElement.js","../ShadowDOM/src/wrappers/HTMLTemplateElement.js","../Sh
adowDOM/src/wrappers/HTMLMediaElement.js","../ShadowDOM/src/wrappers/HTMLAudioEl
ement.js","../ShadowDOM/src/wrappers/HTMLOptionElement.js","../ShadowDOM/src/wra
ppers/HTMLSelectElement.js","../ShadowDOM/src/wrappers/HTMLTableElement.js","../
ShadowDOM/src/wrappers/HTMLTableSectionElement.js","../ShadowDOM/src/wrappers/HT
MLTableRowElement.js","../ShadowDOM/src/wrappers/HTMLUnknownElement.js","../Shad
owDOM/src/wrappers/SVGElement.js","../ShadowDOM/src/wrappers/SVGUseElement.js","
../ShadowDOM/src/wrappers/SVGElementInstance.js","../ShadowDOM/src/wrappers/Canv
asRenderingContext2D.js","../ShadowDOM/src/wrappers/WebGLRenderingContext.js",".
./ShadowDOM/src/wrappers/Range.js","../ShadowDOM/src/wrappers/generic.js","../Sh
adowDOM/src/wrappers/ShadowRoot.js","../ShadowDOM/src/ShadowRenderer.js","../Sha
dowDOM/src/wrappers/elements-with-form-property.js","../ShadowDOM/src/wrappers/S
election.js","../ShadowDOM/src/wrappers/Document.js","../ShadowDOM/src/wrappers/
Window.js","../ShadowDOM/src/wrappers/DataTransfer.js","../ShadowDOM/src/wrapper
s/override-constructors.js","src/patches-shadowdom-polyfill.js","src/ShadowCSS.j
s","src/patches-shadowdom-native.js","../URL/url.js","src/lang.js","src/dom.js",
"src/template.js","src/inspector.js","src/unresolved.js","src/module.js","src/mi
crotask.js","src/url.js","../MutationObservers/MutationObserver.js","../HTMLImpo
rts/src/scope.js","../HTMLImports/src/Loader.js","../HTMLImports/src/Parser.js",
"../HTMLImports/src/HTMLImports.js","../HTMLImports/src/Observer.js","../HTMLImp
orts/src/boot.js","../CustomElements/src/scope.js","../CustomElements/src/Observ
er.js","../CustomElements/src/CustomElements.js","../CustomElements/src/Parser.j
s","../CustomElements/src/boot.js","src/patches-custom-elements.js","src/loader.
js","src/styleloader.js","../PointerEvents/src/boot.js","../PointerEvents/src/to
uch-action.js","../PointerEvents/src/PointerEvent.js","../PointerEvents/src/poin
termap.js","../PointerEvents/src/dispatcher.js","../PointerEvents/src/installer.
js","../PointerEvents/src/mouse.js","../PointerEvents/src/touch.js","../PointerE
vents/src/ms.js","../PointerEvents/src/platform-events.js","../PointerEvents/src
/capture.js","../PointerGestures/src/initialize.js","../PointerGestures/src/poin
termap.js","../PointerGestures/src/dispatcher.js","../PointerGestures/src/hold.j
s","../PointerGestures/src/track.js","../PointerGestures/src/flick.js","../Point
erGestures/src/pinch.js","../PointerGestures/src/tap.js","../PointerGestures/src
/registerScopes.js","../NodeBind/src/NodeBind.js","../TemplateBinding/src/Templa
teBinding.js","../polymer-expressions/third_party/esprima/esprima.js","../polyme
r-expressions/src/polymer-expressions.js","src/patches-mdv.js"],"names":[],"mapp
ings":"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
AEA,OAAA","sourcesContent":["/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n/**\n * PointerGestureEvent is th
e constructor for all PointerGesture events.\n *\n * @module PointerGestures\n *
@class PointerGestureEvent\n * @extends UIEvent\n * @constructor\n * @param {St
ring} inType Event type\n * @param {Object} [inDict] Dictionary of properties to
initialize on the event\n */\n\nfunction PointerGestureEvent(inType, inDict) {\
n var dict = inDict || {};\n var e = document.createEvent('Event');\n var pro
ps = {\n bubbles: Boolean(dict.bubbles) === dict.bubbles || true,\n cancel
able: Boolean(dict.cancelable) === dict.cancelable || true\n };\n\n e.initEven
t(inType, props.bubbles, props.cancelable);\n\n var keys = Object.keys(dict), k
;\n for (var i = 0; i < keys.length; i++) {\n k = keys[i];\n e[k] = dict[
k];\n }\n\n e.preventTap = this.preventTap;\n\n return e;\n}\n\n/**\n * Allow
s for any gesture to prevent the tap gesture.\n *\n * @method preventTap\n */\nP
ointerGestureEvent.prototype.preventTap = function() {\n this.tapPrevented = tr
ue;\n};\n\n","/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n
* Use of this source code is governed by a BSD-style\n * license that can be fou
nd in the LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (functi
on() {\n var defineProperty = Object.defineProperty;\n var counter = Date.
now() % 1e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math
.random() * 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype =
{\n set: function(key, value) {\n var entry = key[this.name];\n
if (entry && entry[0] === key)\n entry[1] = value;\n else\n
defineProperty(key, this.name, {value: [key, value], writable: true});\n
},\n get: function(key) {\n var entry;\n return (entry
= key[this.name]) && entry[0] === key ?\n entry[1] : undefined;\n
},\n delete: function(key) {\n this.set(key, undefined);\n }\
n };\n\n window.WeakMap = WeakMap;\n })();\n}\n","// Copyright 2012 Googl
e Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");
\n// you may not use this file except in compliance with the License.\n// You ma
y obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LIC
ENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, soft
ware\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n//
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// Se
e the License for the specific language governing permissions and\n// limitation
s under the License.\n\n(function(global) {\n 'use strict';\n\n // Detect and
do basic sanity checking on Object/Array.observe.\n function detectObjectObserv
e() {\n if (typeof Object.observe !== 'function' ||\n typeof Array.obs
erve !== 'function') {\n return false;\n }\n\n var records = [];\n\n
function callback(recs) {\n records = recs;\n }\n\n var test = {};
\n var arr = [];\n Object.observe(test, callback);\n Array.observe(arr,
callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n arr.pu
sh(1, 2);\n arr.length = 0;\n\n Object.deliverChangeRecords(callback);\n
if (records.length !== 5)\n return false;\n\n if (records[0].type != '
add' ||\n records[1].type != 'update' ||\n records[2].type != 'del
ete' ||\n records[3].type != 'splice' ||\n records[4].type != 'spl
ice') {\n return false;\n }\n\n Object.unobserve(test, callback);\n
Array.unobserve(arr, callback);\n\n return true;\n }\n\n var hasObserve =
detectObjectObserve();\n\n function detectEval() {\n // don't test for eval
if document has CSP securityPolicy object and we can see that\n // eval is n
ot supported. This avoids an error message in console even when the exception\n
// is caught\n if (global.document &&\n 'securityPolicy' in global.
document &&\n !global.document.securityPolicy.allowsEval) {\n return
false;\n }\n\n try {\n var f = new Function('', 'return true;');\n
return f();\n } catch (ex) {\n return false;\n }\n }\n\n var ha
sEval = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n
}\n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) {
\n return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNa
N || function isNaN(value) {\n return typeof value === 'number' && global.isN
aN(value);\n }\n\n function areSameValue(left, right) {\n if (left === righ
t)\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left
) && numberIsNaN(right))\n return true;\n\n return left !== left && righ
t !== right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(ob
j) { return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n
if (!proto)\n return obj;\n var newObject = Object.create(proto);
\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object
.defineProperty(newObject, name,\n Object.getOwnProp
ertyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var
identStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var ident
= identStart + '+' + identPart + '*';\n var elementIndex = '(?:[0-9]|[1-9]+[0-
9]+)';\n var identOrElementIndex = '(?:' + ident + '|' + elementIndex + ')';\n
var path = '(?:' + identOrElementIndex + ')(?:\\\\s*\\\\.\\\\s*' + identOrEleme
ntIndex + ')*';\n var pathRegExp = new RegExp('^' + path + '$');\n\n function
isPathValid(s) {\n if (typeof s != 'string')\n return false;\n s = s.
trim();\n\n if (s == '')\n return true;\n\n if (s[0] == '.')\n r
eturn false;\n\n return pathRegExp.test(s);\n }\n\n var constructorIsPrivat
e = {};\n\n function Path(s, privateToken) {\n if (privateToken !== construc
torIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\n\n
if (s.trim() == '')\n return this;\n\n if (isIndex(s)) {\n this.p
ush(s);\n return this;\n }\n\n s.split(/\\s*\\.\\s*/).filter(function
(part) {\n return part;\n }).forEach(function(part) {\n this.push(p
art);\n }, this);\n\n if (hasEval && this.length) {\n this.getValueFr
om = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simp
le LRU cache\n var pathCache = {};\n\n function getPath(pathString) {\n if
(pathString instanceof Path)\n return pathString;\n\n if (pathString ==
null)\n pathString = '';\n\n if (typeof pathString !== 'string')\n
pathString = String(pathString);\n\n var path = pathCache[pathString];\n i
f (path)\n return path;\n if (!isPathValid(pathString))\n return in
validPath;\n var path = new Path(pathString, constructorIsPrivate);\n path
Cache[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n P
ath.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toSt
ring: function() {\n return this.join('.');\n },\n\n getValueFrom: fu
nction(obj, directObserver) {\n for (var i = 0; i < this.length; i++) {\n
if (obj == null)\n return;\n obj = obj[this[i]];\n }\
n return obj;\n },\n\n iterateObjects: function(obj, observe) {\n
for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[t
his[i - 1]];\n if (!isObject(obj))\n return;\n observe(ob
j);\n }\n },\n\n compiledGetValueFromFn: function() {\n var acce
ssors = this.map(function(ident) {\n return isIndex(ident) ? '[\"' + iden
t + '\"]' : '.' + ident;\n });\n\n var str = '';\n var pathString
= 'obj';\n str += 'if (obj != null';\n var i = 0;\n for (; i < (
this.length - 1); i++) {\n var ident = this[i];\n pathString += ac
cessors[i];\n str += ' &&\\n ' + pathString + ' != null';\n }\n
str += ')\\n';\n\n pathString += accessors[i];\n\n str += ' retu
rn ' + pathString + ';\\nelse\\n return undefined;';\n return new Function
('obj', str);\n },\n\n setValueFrom: function(obj, value) {\n if (!th
is.length)\n return false;\n\n for (var i = 0; i < this.length - 1;
i++) {\n if (!isObject(obj))\n return false;\n obj = obj[
this[i]];\n }\n\n if (!isObject(obj))\n return false;\n\n
obj[this[i]] = value;\n return true;\n }\n });\n\n var invalidPath = n
ew Path('', constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.
getValueFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHEC
K_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n
while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\
n }\n if (global.testingExposeCycleCount)\n global.dirtyCheckCycleCou
nt = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmpty(object)
{\n for (var prop in object)\n return false;\n return true;\n }\n\n
function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n
objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\
n\n function diffObjectFromOldObject(object, oldObject) {\n var added = {};\
n var removed = {};\n var changed = {};\n\n for (var prop in oldObject)
{\n var newValue = object[prop];\n\n if (newValue !== undefined && ne
wValue === oldObject[prop])\n continue;\n\n if (!(prop in object)) {
\n removed[prop] = undefined;\n continue;\n }\n\n if (ne
wValue !== oldObject[prop])\n changed[prop] = newValue;\n }\n\n for
(var prop in object) {\n if (prop in oldObject)\n continue;\n\n
added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && object.
length !== oldObject.length)\n changed.length = object.length;\n\n retur
n {\n added: added,\n removed: removed,\n changed: changed\n }
;\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.le
ngth)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n
eomTasks[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n
var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true };\n
var eomRunScheduled = false;\n\n Object.observe(eomObj, function() {\n
runEOMTasks();\n eomRunScheduled = false;\n });\n\n return function
(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunS
cheduled = true;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n
})() :\n (function() {\n return function(fn) {\n eomTasks.push(fn);\n
};\n })();\n\n var observedObjectCache = [];\n\n function newObservedObje
ct() {\n var observer;\n var object;\n var discardRecords = false;\n
var first = true;\n\n function callback(records) {\n if (observer && ob
server.state_ === OPENED && !discardRecords)\n observer.check_(records);\
n }\n\n return {\n open: function(obs) {\n if (observer)\n
throw Error('ObservedObject in use');\n\n if (!first)\n Ob
ject.deliverChangeRecords(callback);\n\n observer = obs;\n first =
false;\n },\n observe: function(obj, arrayObserve) {\n object
= obj;\n if (arrayObserve)\n Array.observe(object, callback);\n
else\n Object.observe(object, callback);\n },\n delive
r: function(discard) {\n discardRecords = discard;\n Object.delive
rChangeRecords(callback);\n discardRecords = false;\n },\n clos
e: function() {\n observer = undefined;\n Object.unobserve(object,
callback);\n observedObjectCache.push(this);\n }\n };\n }\n\n
function getObservedObject(observer, object, arrayObserve) {\n var dir = obse
rvedObjectCache.pop() || newObservedObject();\n dir.open(observer);\n dir.
observe(object, arrayObserve);\n return dir;\n }\n\n var emptyArray = [];\n
var observedSetCache = [];\n\n function newObservedSet() {\n var observers
= [];\n var observerCount = 0;\n var objects = [];\n var toRemove = em
ptyArray;\n var resetNeeded = false;\n var resetScheduled = false;\n\n
function observe(obj) {\n if (!obj)\n return;\n\n var index = t
oRemove.indexOf(obj);\n if (index >= 0) {\n toRemove[index] = undefi
ned;\n objects.push(obj);\n } else if (objects.indexOf(obj) < 0) {\n
objects.push(obj);\n Object.observe(obj, callback);\n }\n\n
observe(Object.getPrototypeOf(obj));\n }\n\n function reset() {\n
var objs = toRemove === emptyArray ? [] : toRemove;\n toRemove = objects;
\n objects = objs;\n\n var observer;\n for (var id in observers)
{\n observer = observers[id];\n if (!observer || observer.state_ !
= OPENED)\n continue;\n\n observer.iterateObjects_(observe);\n
}\n\n for (var i = 0; i < toRemove.length; i++) {\n var obj = to
Remove[i];\n if (obj)\n Object.unobserve(obj, callback);\n
}\n\n toRemove.length = 0;\n }\n\n function scheduledReset() {\n
resetScheduled = false;\n if (!resetNeeded)\n return;\n\n rese
t();\n }\n\n function scheduleReset() {\n if (resetScheduled)\n
return;\n\n resetNeeded = true;\n resetScheduled = true;\n runE
OM(scheduledReset);\n }\n\n function callback() {\n reset();\n\n
var observer;\n\n for (var id in observers) {\n observer = observer
s[id];\n if (!observer || observer.state_ != OPENED)\n continue;
\n\n observer.check_();\n }\n }\n\n var record = {\n obje
ct: undefined,\n objects: objects,\n open: function(obs) {\n ob
servers[obs.id_] = obs;\n observerCount++;\n obs.iterateObjects_(o
bserve);\n },\n close: function(obs) {\n var anyLeft = false;\n
\n observers[obs.id_] = undefined;\n observerCount--;\n\n i
f (observerCount) {\n scheduleReset();\n return;\n }\n
resetNeeded = false;\n\n for (var i = 0; i < objects.length; i++)
{\n Object.unobserve(objects[i], callback);\n Observer.unobser
vedCount++;\n }\n\n observers.length = 0;\n objects.length
= 0;\n observedSetCache.push(this);\n },\n reset: scheduleReset
\n };\n\n return record;\n }\n\n var lastObservedSet;\n\n function getO
bservedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object
!== obj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\
n lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer);
\n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n
var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function
Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n
this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directO
bserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserver
Id++;\n }\n\n Observer.prototype = {\n open: function(callback, target) {\n
if (this.state_ != UNOPENED)\n throw Error('Observer has already be
en opened.');\n\n addToAll(this);\n this.callback_ = callback;\n
this.target_ = target;\n this.state_ = OPENED;\n this.connect_();\n
return this.value_;\n },\n\n close: function() {\n if (this.state_
!= OPENED)\n return;\n\n removeFromAll(this);\n this.state_ =
CLOSED;\n this.disconnect_();\n this.value_ = undefined;\n this.c
allback_ = undefined;\n this.target_ = undefined;\n },\n\n deliver: f
unction() {\n if (this.state_ != OPENED)\n return;\n\n dirtyChe
ck(this);\n },\n\n report_: function(changes) {\n try {\n this
.callback_.apply(this.target_, changes);\n } catch (ex) {\n Observer
._errorThrownDuringCallback = true;\n console.error('Exception caught dur
ing observer callback: ' +\n (ex.stack || ex));\n }\n
},\n\n discardChanges: function() {\n this.check_(undefined, true);\
n return this.value_;\n }\n }\n\n var collectObservers = !hasObserve;\
n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObserve
rs) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n Obser
ver._allObserversCount++;\n if (!collectObservers)\n return;\n\n allO
bservers.push(observer);\n }\n\n function removeFromAll(observer) {\n Obser
ver._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n
var hasDebugForceFullDelivery = hasObserve && (function() {\n try {\n e
val('%RunMicrotasks()');\n return true;\n } catch (ex) {\n return f
alse;\n }\n })();\n\n global.Platform = global.Platform || {};\n\n global.
Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskChec
kpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n eval('%Run
Microtasks()');\n return;\n }\n\n if (!collectObservers)\n retur
n;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var any
Changed, toCheck;\n\n do {\n cycles++;\n toCheck = allObservers;\n
allObservers = [];\n anyChanged = false;\n\n for (var i = 0; i <
toCheck.length; i++) {\n var observer = toCheck[i];\n if (observer
.state_ != OPENED)\n continue;\n\n if (observer.check_())\n
anyChanged = true;\n\n allObservers.push(observer);\n }\n
if (runEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_
CHECK_CYCLES && anyChanged);\n\n if (global.testingExposeCycleCount)\n g
lobal.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\
n };\n\n if (collectObservers) {\n global.Platform.clearObservers = functio
n() {\n allObservers = [];\n };\n }\n\n function ObjectObserver(object
) {\n Observer.call(this);\n this.value_ = object;\n this.oldObject_ =
undefined;\n }\n\n ObjectObserver.prototype = createObject({\n __proto__: O
bserver.prototype,\n\n arrayObserve: false,\n\n connect_: function(callbac
k, target) {\n if (hasObserve) {\n this.directObserver_ = getObserve
dObject(this, this.value_,\n thi
s.arrayObserve);\n } else {\n this.oldObject_ = this.copyObject(this
.value_);\n }\n\n },\n\n copyObject: function(object) {\n var co
py = Array.isArray(object) ? [] : {};\n for (var prop in object) {\n
copy[prop] = object[prop];\n };\n if (Array.isArray(object))\n
copy.length = object.length;\n return copy;\n },\n\n check_: functio
n(changeRecords, skipChanges) {\n var diff;\n var oldValues;\n if
(hasObserve) {\n if (!changeRecords)\n return false;\n\n
oldValues = {};\n diff = diffObjectFromChangeRecords(this.value_, change
Records,\n oldValues);\n } else {
\n oldValues = this.oldObject_;\n diff = diffObjectFromOldObject(t
his.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n
return false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObje
ct(this.value_);\n\n this.report_([\n diff.added || {},\n dif
f.removed || {},\n diff.changed || {},\n function(property) {\n
return oldValues[property];\n }\n ]);\n\n return true;\n
},\n\n disconnect_: function() {\n if (hasObserve) {\n this.d
irectObserver_.close();\n this.directObserver_ = undefined;\n } else
{\n this.oldObject_ = undefined;\n }\n },\n\n deliver: functi
on() {\n if (this.state_ != OPENED)\n return;\n\n if (hasObserv
e)\n this.directObserver_.deliver(false);\n else\n dirtyCheck
(this);\n },\n\n discardChanges: function() {\n if (this.directObserv
er_)\n this.directObserver_.deliver(true);\n else\n this.oldO
bject_ = this.copyObject(this.value_);\n\n return this.value_;\n }\n })
;\n\n function ArrayObserver(array) {\n if (!Array.isArray(array))\n th
row Error('Provided object is not an Array');\n ObjectObserver.call(this, arr
ay);\n }\n\n ArrayObserver.prototype = createObject({\n\n __proto__: Object
Observer.prototype,\n\n arrayObserve: true,\n\n copyObject: function(arr)
{\n return arr.slice();\n },\n\n check_: function(changeRecords) {\n
var splices;\n if (hasObserve) {\n if (!changeRecords)\n
return false;\n splices = projectArraySplices(this.value_, changeRecor
ds);\n } else {\n splices = calcSplices(this.value_, 0, this.value_.
length,\n this.oldObject_, 0, this.oldObject_.lengt
h);\n }\n\n if (!splices || !splices.length)\n return false;\n\
n if (!hasObserve)\n this.oldObject_ = this.copyObject(this.value_);
\n\n this.report_([splices]);\n return true;\n }\n });\n\n ArrayO
bserver.applySplices = function(previous, current, splices) {\n splices.forEa
ch(function(splice) {\n var spliceArgs = [splice.index, splice.removed.leng
th];\n var addIndex = splice.index;\n while (addIndex < splice.index +
splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n addI
ndex++;\n }\n\n Array.prototype.splice.apply(previous, spliceArgs);\n
});\n };\n\n function PathObserver(object, path) {\n Observer.call(this)
;\n\n this.object_ = object;\n this.path_ = path instanceof Path ? path :
getPath(path);\n this.directObserver_ = undefined;\n }\n\n PathObserver.pro
totype = createObject({\n __proto__: Observer.prototype,\n\n connect_: fun
ction() {\n if (hasObserve)\n this.directObserver_ = getObservedSet(
this, this.object_);\n\n this.check_(undefined, true);\n },\n\n disco
nnect_: function() {\n this.value_ = undefined;\n\n if (this.directObs
erver_) {\n this.directObserver_.close(this);\n this.directObserve
r_ = undefined;\n }\n },\n\n iterateObjects_: function(observe) {\n
this.path_.iterateObjects(this.object_, observe);\n },\n\n check_: fun
ction(changeRecords, skipChanges) {\n var oldValue = this.value_;\n th
is.value_ = this.path_.getValueFrom(this.object_);\n if (skipChanges || are
SameValue(this.value_, oldValue))\n return false;\n\n this.report_([
this.value_, oldValue]);\n return true;\n },\n\n setValue: function(n
ewValue) {\n if (this.path_)\n this.path_.setValueFrom(this.object_,
newValue);\n }\n });\n\n function CompoundObserver() {\n Observer.call(
this);\n\n this.value_ = [];\n this.directObserver_ = undefined;\n this
.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundObserver.prot
otype = createObject({\n __proto__: Observer.prototype,\n\n connect_: func
tion() {\n this.check_(undefined, true);\n\n if (!hasObserve)\n
return;\n\n var object;\n var needsDirectObserver = false;\n for
(var i = 0; i < this.observed_.length; i += 2) {\n object = this.observe
d_[i]\n if (object !== observerSentinel) {\n needsDirectObserver
= true;\n break;\n }\n }\n\n if (this.directObserver_
) {\n if (needsDirectObserver) {\n this.directObserver_.reset();
\n return;\n }\n this.directObserver_.close();\n t
his.directObserver_ = undefined;\n return;\n }\n\n if (needsDir
ectObserver)\n this.directObserver_ = getObservedSet(this, object);\n
},\n\n closeObservers_: function() {\n for (var i = 0; i < this.observed
_.length; i += 2) {\n if (this.observed_[i] === observerSentinel)\n
this.observed_[i + 1].close();\n }\n this.observed_.length = 0;\n
},\n\n disconnect_: function() {\n this.value_ = undefined;\n\n
if (this.directObserver_) {\n this.directObserver_.close(this);\n
this.directObserver_ = undefined;\n }\n\n this.closeObservers_();\n
},\n\n addPath: function(object, path) {\n if (this.state_ != UNOPENED
&& this.state_ != RESETTING)\n throw Error('Cannot add paths once started
.');\n\n this.observed_.push(object, path instanceof Path ? path : getPath(
path));\n },\n\n addObserver: function(observer) {\n if (this.state_
!= UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add observ
ers once started.');\n\n observer.open(this.deliver, this);\n this.obs
erved_.push(observerSentinel, observer);\n },\n\n startReset: function() {
\n if (this.state_ != OPENED)\n throw Error('Can only reset while op
en');\n\n this.state_ = RESETTING;\n this.closeObservers_();\n },\n
\n finishReset: function() {\n if (this.state_ != RESETTING)\n th
row Error('Can only finishReset after startReset');\n this.state_ = OPENED;
\n this.connect_();\n\n return this.value_;\n },\n\n iterateObje
cts_: function(observe) {\n var object;\n for (var i = 0; i < this.obs
erved_.length; i += 2) {\n object = this.observed_[i]\n if (object
!== observerSentinel)\n this.observed_[i + 1].iterateObjects(object, o
bserve)\n }\n },\n\n check_: function(changeRecords, skipChanges) {\n
var oldValues;\n for (var i = 0; i < this.observed_.length; i += 2) {
\n var pathOrObserver = this.observed_[i+1];\n var object = this.o
bserved_[i];\n var value = object === observerSentinel ?\n pat
hOrObserver.discardChanges() :\n pathOrObserver.getValueFrom(object)\
n\n if (skipChanges) {\n this.value_[i / 2] = value;\n
continue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n
continue;\n\n oldValues = oldValues || [];\n oldValues[i /
2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n
if (!oldValues)\n return false;\n\n // TODO(rafaelw): Having observ
ed_ as the third callback arg here is\n // pretty lame API. Fix.\n thi
s.report_([this.value_, oldValues, this.observed_]);\n return true;\n }\
n });\n\n function identFn(value) { return value; }\n\n function ObserverTran
sform(observable, getValueFn, setValueFn,\n dontPass
ThroughSet) {\n this.callback_ = undefined;\n this.target_ = undefined;\n
this.value_ = undefined;\n this.observable_ = observable;\n this.getVal
ueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n
// TODO(rafaelw): This is a temporary hack. PolymerExpressions needs this\n
// at the moment because of a bug in it's dependency tracking.\n this.dontP
assThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prototype = {\n
open: function(callback, target) {\n this.callback_ = callback;\n
this.target_ = target;\n this.value_ =\n this.getValueFn_(this.obs
ervable_.open(this.observedCallback_, this));\n return this.value_;\n },
\n\n observedCallback_: function(value) {\n value = this.getValueFn_(val
ue);\n if (areSameValue(value, this.value_))\n return;\n var ol
dValue = this.value_;\n this.value_ = value;\n this.callback_.call(thi
s.target_, this.value_, oldValue);\n },\n\n discardChanges: function() {\n
this.value_ = this.getValueFn_(this.observable_.discardChanges());\n
return this.value_;\n },\n\n deliver: function() {\n return this.obse
rvable_.deliver();\n },\n\n setValue: function(value) {\n value = thi
s.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.observable_.s
etValue)\n return this.observable_.setValue(value);\n },\n\n close:
function() {\n if (this.observable_)\n this.observable_.close();\n
this.callback_ = undefined;\n this.target_ = undefined;\n this.ob
servable_ = undefined;\n this.value_ = undefined;\n this.getValueFn_ =
undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedRe
cordTypes = {\n add: true,\n update: true,\n delete: true\n };\n\n fu
nction notifyFunction(object, name) {\n if (typeof Object.observe !== 'functi
on')\n return;\n\n var notifier = Object.getNotifier(object);\n retur
n function(type, oldValue) {\n var changeRecord = {\n object: object
,\n type: type,\n name: name\n };\n if (arguments.length
=== 2)\n changeRecord.oldValue = oldValue;\n notifier.notify(change
Record);\n }\n }\n\n Observer.defineComputedProperty = function(target, nam
e, observable) {\n var notify = notifyFunction(target, name);\n var value
= observable.open(function(newValue, oldValue) {\n value = newValue;\n
if (notify)\n notify('update', oldValue);\n });\n\n Object.defineP
roperty(target, name, {\n get: function() {\n observable.deliver();\
n return value;\n },\n set: function(newValue) {\n obser
vable.setValue(newValue);\n return newValue;\n },\n configurabl
e: true\n });\n\n return {\n close: function() {\n observable.
close();\n Object.defineProperty(target, name, {\n value: value,
\n writable: true,\n configurable: true\n });\n }\
n };\n }\n\n function diffObjectFromChangeRecords(object, changeRecords, ol
dValues) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i
< changeRecords.length; i++) {\n var record = changeRecords[i];\n if (
!expectedRecordTypes[record.type]) {\n console.error('Unknown changeRecor
d type: ' + record.type);\n console.error(record);\n continue;\n
}\n\n if (!(record.name in oldValues))\n oldValues[record.name]
= record.oldValue;\n\n if (record.type == 'update')\n continue;\n\n
if (record.type == 'add') {\n if (record.name in removed)\n
delete removed[record.name];\n else\n added[record.name] = true
;\n\n continue;\n }\n\n // type = 'delete'\n if (record.na
me in added) {\n delete added[record.name];\n delete oldValues[rec
ord.name];\n } else {\n removed[record.name] = true;\n }\n }
\n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (v
ar prop in removed)\n removed[prop] = undefined;\n\n var changed = {};\n
for (var prop in oldValues) {\n if (prop in added || prop in removed)\n
continue;\n\n var newValue = object[prop];\n if (oldValues[pro
p] !== newValue)\n changed[prop] = newValue;\n }\n\n return {\n
added: added,\n removed: removed,\n changed: changed\n };\n }\n\
n function newSplice(index, removed, addedCount) {\n return {\n index:
index,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n
var EDIT_LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DEL
ETE = 3;\n\n function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n //
Note: This function is *based* on the computation of the Levenshtein\n // \"
edit\" distance. The one change is that \"updates\" are treated as two\n // e
dits - not one. With Array splices, an update is really a delete\n // followe
d by an add. By retaining this, we optimize for \"keeping\" the\n // maximum
array items in the original array. For example:\n //\n // 'xxxx123' -> '
123yyyy'\n //\n // With 1-edit updates, the shortest path would be just to
update all seven\n // characters. With 2-edit updates, we delete 4, leave 3,
and add 4. This\n // leaves the substring '123' intact.\n calcEditDistanc
es: function(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n // \"Deletion\" columns\n var rowCount = o
ldEnd - oldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n
var distances = new Array(rowCount);\n\n // \"Addition\" rows. Initial
ize null column.\n for (var i = 0; i < rowCount; i++) {\n distances[
i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n //
Initialize null row\n for (var j = 0; j < columnCount; j++)\n distan
ces[0][j] = j;\n\n for (var i = 1; i < rowCount; i++) {\n for (var j
= 1; j < columnCount; j++) {\n if (this.equals(current[currentStart +
j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][
j - 1];\n else {\n var north = distances[i - 1][j] + 1;\n
var west = distances[i][j - 1] + 1;\n distances[i][j] = nort
h < west ? north : west;\n }\n }\n }\n\n return distan
ces;\n },\n\n // This starts at the final weight, and walks \"backward\" b
y finding\n // the minimum previous weight recursively until the origin of th
e weight\n // matrix.\n spliceOperationsFromEditDistances: function(distan
ces) {\n var i = distances.length - 1;\n var j = distances[0].length -
1;\n var current = distances[i][j];\n var edits = [];\n while (i
> 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n
j--;\n continue;\n }\n if (j == 0) {\n edits
.push(EDIT_DELETE);\n i--;\n continue;\n }\n var
northWest = distances[i - 1][j - 1];\n var west = distances[i - 1][j];\n
var north = distances[i][j - 1];\n\n var min;\n if (west <
north)\n min = west < northWest ? west : northWest;\n else\n
min = north < northWest ? north : northWest;\n\n if (min == northW
est) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE
);\n } else {\n edits.push(EDIT_UPDATE);\n curren
t = northWest;\n }\n i--;\n j--;\n } else if (
min == west) {\n edits.push(EDIT_DELETE);\n i--;\n cu
rrent = west;\n } else {\n edits.push(EDIT_ADD);\n j--;
\n current = north;\n }\n }\n\n edits.reverse();\n
return edits;\n },\n\n /**\n * Splice Projection functions:\n *\
n * A splice map is a representation of how a previous array of items\n
* was transformed into a new array of items. Conceptually it is a list of\n
* tuples of\n *\n * <index, removed, addedCount>\n *\n * which
are kept in ascending index order of. The tuple represents that at\n * the
|index|, |removed| sequence of items were removed, and counting forward\n *
from |index|, |addedCount| items were added.\n */\n\n /**\n * Lacking
individual splice mutation information, the minimal set of\n * splices can
be synthesized given the previous state and final state of an\n * array. The
basic approach is to calculate the edit distance matrix and\n * choose the
shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The
length of the current array\n * p: The length of the old array\n */\n
calcSplices: function(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCou
nt = 0;\n\n var minLength = Math.min(currentEnd - currentStart, oldEnd - ol
dStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = t
his.sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.le
ngth && oldEnd == old.length)\n suffixCount = this.sharedSuffix(current,
old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldS
tart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCo
unt;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n
return [];\n\n if (currentStart == currentEnd) {\n var splice =
newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n s
plice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else
if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEn
d - currentStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\
n this.calcEditDistances(current, currentStart, currentEnd,\n
old, oldStart, oldEnd));\n\n var splice = undefined;
\n var splices = [];\n var index = currentStart;\n var oldIndex =
oldStart;\n for (var i = 0; i < ops.length; i++) {\n switch(ops[i])
{\n case EDIT_LEAVE:\n if (splice) {\n splices
.push(splice);\n splice = undefined;\n }\n\n
index++;\n oldIndex++;\n break;\n case EDIT_UPDAT
E:\n if (!splice)\n splice = newSplice(index, [], 0);\n\
n splice.addedCount++;\n index++;\n\n splice.re
moved.push(old[oldIndex]);\n oldIndex++;\n break;\n
case EDIT_ADD:\n if (!splice)\n splice = newSplice(in
dex, [], 0);\n\n splice.addedCount++;\n index++;\n
break;\n case EDIT_DELETE:\n if (!splice)\n
splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldInd
ex]);\n oldIndex++;\n break;\n }\n }\n\n
if (splice) {\n splices.push(splice);\n }\n return splices;\n
},\n\n sharedPrefix: function(current, old, searchLength) {\n for (var
i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n
return i;\n return searchLength;\n },\n\n sharedSuffix: func
tion(current, old, searchLength) {\n var index1 = current.length;\n va
r index2 = old.length;\n var count = 0;\n while (count < searchLength
&& this.equals(current[--index1], old[--index2]))\n count++;\n\n ret
urn count;\n },\n\n calculateSplices: function(current, previous) {\n
return this.calcSplices(current, 0, current.length, previous, 0,\n
previous.length);\n },\n\n equals: function(currentValue,
previousValue) {\n return currentValue === previousValue;\n }\n };\n\n
var arraySplice = new ArraySplice();\n\n function calcSplices(current, curren
tStart, currentEnd,\n old, oldStart, oldEnd) {\n return
arraySplice.calcSplices(current, currentStart, currentEnd,\n
old, oldStart, oldEnd);\n }\n\n function intersect(start1, end
1, start2, end2) {\n // Disjoint\n if (end1 < start2 || end2 < start1)\n
return -1;\n\n // Adjacent\n if (end1 == start2 || end2 == start1)\n
return 0;\n\n // Non-zero intersect, span1 first\n if (start1 < start2
) {\n if (end1 < end2)\n return end1 - start2; // Overlap\n els
e\n return end2 - start2; // Contained\n } else {\n // Non-zero i
ntersect, span2 first\n if (end2 < end1)\n return end2 - start1; //
Overlap\n else\n return end1 - start1; // Contained\n }\n }\n\n
function mergeSplice(splices, index, removed, addedCount) {\n\n var splice =
newSplice(index, removed, addedCount);\n\n var inserted = false;\n var in
sertionOffset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var
current = splices[i];\n current.index += insertionOffset;\n\n if (inse
rted)\n continue;\n\n var intersectCount = intersect(splice.index,\n
splice.index + splice.removed.length,\n
current.index,\n
current.index + current.addedCount);\n\n if (intersectCount >= 0) {\n
// Merge the two splices\n\n splices.splice(i, 1);\n i--;\
n\n insertionOffset -= current.addedCount - current.removed.length;\n\n
splice.addedCount += current.addedCount - intersectCount;\n var del
eteCount = splice.removed.length +\n current.removed.le
ngth - intersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n
// merged splice is a noop. discard.\n inserted = true;\n
} else {\n var removed = current.removed;\n\n if (splice.inde
x < current.index) {\n // some prefix of splice.removed is prepended
to current.removed.\n var prepend = splice.removed.slice(0, current.i
ndex - splice.index);\n Array.prototype.push.apply(prepend, removed);
\n removed = prepend;\n }\n\n if (splice.index + sp
lice.removed.length > current.index + current.addedCount) {\n // some
suffix of splice.removed is appended to current.removed.\n var appen
d = splice.removed.slice(current.index + current.addedCount - splice.index);\n
Array.prototype.push.apply(removed, append);\n }\n\n
splice.removed = removed;\n if (current.index < splice.index) {\n
splice.index = current.index;\n }\n }\n } else if (s
plice.index < current.index) {\n // Insert splice here.\n\n insert
ed = true;\n\n splices.splice(i, 0, splice);\n i++;\n\n var
offset = splice.addedCount - splice.removed.length\n current.index += of
fset;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\
n splices.push(splice);\n }\n\n function createInitialSplices(array, chan
geRecords) {\n var splices = [];\n\n for (var i = 0; i < changeRecords.len
gth; i++) {\n var record = changeRecords[i];\n switch(record.type) {\n
case 'splice':\n mergeSplice(splices, record.index, record.remo
ved.slice(), record.addedCount);\n break;\n case 'add':\n
case 'update':\n case 'delete':\n if (!isIndex(record.name))\n
continue;\n var index = toNumber(record.name);\n if
(index < 0)\n continue;\n mergeSplice(splices, index, [reco
rd.oldValue], 1);\n break;\n default:\n console.error('
Unexpected record type: ' + JSON.stringify(record));\n break;\n }\
n }\n\n return splices;\n }\n\n function projectArraySplices(array, chan
geRecords) {\n var splices = [];\n\n createInitialSplices(array, changeRec
ords).forEach(function(splice) {\n if (splice.addedCount == 1 && splice.rem
oved.length == 1) {\n if (splice.removed[0] !== array[splice.index])\n
splices.push(splice);\n\n return\n };\n\n splices = spli
ces.concat(calcSplices(array, splice.index, splice.index + splice.addedCount,\n
splice.removed, 0, splice.removed.leng
th));\n });\n\n return splices;\n }\n\n global.Observer = Observer;\n g
lobal.Observer.runEOM_ = runEOM;\n global.Observer.hasObjectObserve = hasObserv
e;\n global.ArrayObserver = ArrayObserver;\n global.ArrayObserver.calculateSpl
ices = function(current, previous) {\n return arraySplice.calculateSplices(cu
rrent, previous);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectO
bserver = ObjectObserver;\n global.PathObserver = PathObserver;\n global.Compo
undObserver = CompoundObserver;\n global.Path = Path;\n global.ObserverTransfo
rm = ObserverTransform;\n})(typeof global !== 'undefined' && global && typeof mo
dule !== 'undefined' && module ? global : this || window);\n","// prepoulate win
dow.Platform.flags for default controls\r\nwindow.Platform = window.Platform ||
{};\r\n// prepopulate window.logFlags if necessary\r\nwindow.logFlags = window.l
ogFlags || {};\r\n// process flags\r\n(function(scope){\r\n // import\r\n var
flags = scope.flags || {};\r\n // populate flags from location\r\n location.se
arch.slice(1).split('&').forEach(function(o) {\r\n o = o.split('=');\r\n o
[0] && (flags[o[0]] = o[1] || true);\r\n });\r\n var entryPoint = document.cur
rentScript ||\r\n document.querySelector('script[src*=\"platform.js\"]');\r
\n if (entryPoint) {\r\n var a = entryPoint.attributes;\r\n for (var i =
0, n; i < a.length; i++) {\r\n n = a[i];\r\n if (n.name !== 'src') {\r
\n flags[n.name] = n.value || true;\r\n }\r\n }\r\n }\r\n if (f
lags.log) {\r\n flags.log.split(',').forEach(function(f) {\r\n window.lo
gFlags[f] = true;\r\n });\r\n }\r\n // If any of these flags match 'native'
, then force native ShadowDOM; any\r\n // other truthy value, or failure to det
ect native\r\n // ShadowDOM, results in polyfill\r\n flags.shadow = flags.shad
ow || flags.shadowdom || flags.polyfill;\r\n if (flags.shadow === 'native') {\r
\n flags.shadow = false;\r\n } else {\r\n flags.shadow = flags.shadow ||
!HTMLElement.prototype.createShadowRoot;\r\n }\r\n\r\n if (flags.shadow && doc
ument.querySelectorAll('script').length > 1) {\r\n console.warn('platform.js
is not the first script on the page. ' +\r\n 'See http://www.polymer-proj
ect.org/docs/start/platform.html#setup ' +\r\n 'for details.');\r\n }\r\
n\r\n // CustomElements polyfill flag\r\n if (flags.register) {\r\n window.
CustomElements = window.CustomElements || {flags: {}};\r\n window.CustomEleme
nts.flags.register = flags.register;\r\n }\r\n\r\n if (flags.imports) {\r\n
window.HTMLImports = window.HTMLImports || {flags: {}};\r\n window.HTMLImpor
ts.flags.imports = flags.imports;\r\n }\r\n\r\n // export\r\n scope.flags = f
lags;\r\n})(Platform);\r\n\r\n// select ShadowDOM impl\r\nif (Platform.flags.sha
dow) {\r\n","// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use
of this source code is goverened by a BSD-style\n// license that can be found i
n the LICENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n '
use strict';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTa
ble = new WeakMap();\n var wrappers = Object.create(null);\n\n // Don't test f
or eval if document has CSP securityPolicy object and we can\n // see that eval
is not supported. This avoids an error message in console\n // even when the e
xception is caught\n var hasEval = !('securityPolicy' in document) ||\n do
cument.securityPolicy.allowsEval;\n if (hasEval) {\n try {\n var f = ne
w Function('', 'return true;');\n hasEval = f();\n } catch (ex) {\n
hasEval = false;\n }\n }\n\n function assert(b) {\n if (!b)\n thro
w new Error('Assertion failed');\n };\n\n var defineProperty = Object.definePr
operty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPr
opertyDescriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from
) {\n getOwnPropertyNames(from).forEach(function(name) {\n definePropert
y(to, name, getOwnPropertyDescriptor(from, name));\n });\n return to;\n }
;\n\n function mixinStatics(to, from) {\n getOwnPropertyNames(from).forEach(
function(name) {\n switch (name) {\n case 'arguments':\n case
'caller':\n case 'length':\n case 'name':\n case 'prototyp
e':\n case 'toString':\n return;\n }\n defineProperty(
to, name, getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\
n\n function oneOf(object, propertyNames) {\n for (var i = 0; i < propertyNa
mes.length; i++) {\n if (propertyNames[i] in object)\n return proper
tyNames[i];\n }\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n
// https://bugzilla.mozilla.org/show_bug.cgi?id=855844\n // Make sure they are
create before we start modifying things.\n getOwnPropertyNames(window);\n\n f
unction getWrapperConstructor(node) {\n var nativePrototype = node.__proto__
|| Object.getPrototypeOf(node);\n var wrapperConstructor = constructorTable.g
et(nativePrototype);\n if (wrapperConstructor)\n return wrapperConstruct
or;\n\n var parentWrapperConstructor = getWrapperConstructor(nativePrototype)
;\n\n var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructo
r);\n registerInternal(nativePrototype, GeneratedWrapper, node);\n\n retur
n GeneratedWrapper;\n }\n\n function addForwardingProperties(nativePrototype,
wrapperPrototype) {\n installProperty(nativePrototype, wrapperPrototype, true
);\n }\n\n function registerInstanceProperties(wrapperPrototype, instanceObjec
t) {\n installProperty(instanceObject, wrapperPrototype, false);\n }\n\n va
r isFirefox = /Firefox/.test(navigator.userAgent);\n\n // This is used as a fal
lback when getting the descriptor fails in\n // installProperty.\n var dummyDe
scriptor = {\n get: function() {},\n set: function(v) {},\n configurabl
e: true,\n enumerable: true\n };\n\n function isEventHandlerName(name) {\n
return /^on[a-z]+$/.test(name);\n }\n\n function isIdentifierName(name) {\n
return /^\\w[a-zA-Z_0-9]*$/.test(name);\n }\n\n function getGetter(name) {
\n return hasEval && isIdentifierName(name) ?\n new Function('return t
his.impl.' + name) :\n function() { return this.impl[name]; };\n }\n\n
function getSetter(name) {\n return hasEval && isIdentifierName(name) ?\n
new Function('v', 'this.impl.' + name + ' = v') :\n function(v) { thi
s.impl[name] = v; };\n }\n\n function getMethod(name) {\n return hasEval &&
isIdentifierName(name) ?\n new Function('return this.impl.' + name +\n
'.apply(this.impl, arguments)') :\n function() { retur
n this.impl[name].apply(this.impl, arguments); };\n }\n\n function getDescript
or(source, name) {\n try {\n return Object.getOwnPropertyDescriptor(sour
ce, name);\n } catch (ex) {\n // JSC and V8 both use data properties ins
tead of accessors which can\n // cause getting the property desciptor to th
row an exception.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n
return dummyDescriptor;\n }\n }\n\n function installProperty(source, targe
t, allowMethod, opt_blacklist) {\n var names = getOwnPropertyNames(source);\n
for (var i = 0; i < names.length; i++) {\n var name = names[i];\n
if (name === 'polymerBlackList_')\n continue;\n\n if (name in target
)\n continue;\n\n if (source.polymerBlackList_ && source.polymerBlac
kList_[name])\n continue;\n\n if (isFirefox) {\n // Tickle Fi
refox's old bindings.\n source.__lookupGetter__(name);\n }\n va
r descriptor = getDescriptor(source, name);\n var getter, setter;\n if
(allowMethod && typeof descriptor.value === 'function') {\n target[name]
= getMethod(name);\n continue;\n }\n\n var isEvent = isEventHa
ndlerName(name);\n if (isEvent)\n getter = scope.getEventHandlerGett
er(name);\n else\n getter = getGetter(name);\n\n if (descriptor
.writable || descriptor.set) {\n if (isEvent)\n setter = scope.g
etEventHandlerSetter(name);\n else\n setter = getSetter(name);\n
}\n\n defineProperty(target, name, {\n get: getter,\n s
et: setter,\n configurable: descriptor.configurable,\n enumerable:
descriptor.enumerable\n });\n }\n }\n\n /**\n * @param {Function} n
ativeConstructor\n * @param {Function} wrapperConstructor\n * @param {Object
=} opt_instance If present, this is used to extract\n * properties from an
instance object.\n */\n function register(nativeConstructor, wrapperConstruc
tor, opt_instance) {\n var nativePrototype = nativeConstructor.prototype;\n
registerInternal(nativePrototype, wrapperConstructor, opt_instance);\n mixi
nStatics(wrapperConstructor, nativeConstructor);\n }\n\n function registerInte
rnal(nativePrototype, wrapperConstructor, opt_instance) {\n var wrapperProtot
ype = wrapperConstructor.prototype;\n assert(constructorTable.get(nativeProto
type) === undefined);\n\n constructorTable.set(nativePrototype, wrapperConstr
uctor);\n nativePrototypeTable.set(wrapperPrototype, nativePrototype);\n\n
addForwardingProperties(nativePrototype, wrapperPrototype);\n if (opt_instan
ce)\n registerInstanceProperties(wrapperPrototype, opt_instance);\n defi
neProperty(wrapperPrototype, 'constructor', {\n value: wrapperConstructor,\
n configurable: true,\n enumerable: false,\n writable: true\n
});\n // Set it again. Some VMs optimizes objects that are used as prototypes
.\n wrapperConstructor.prototype = wrapperPrototype;\n }\n\n function isWra
pperFor(wrapperConstructor, nativeConstructor) {\n return constructorTable.ge
t(nativeConstructor.prototype) ===\n wrapperConstructor;\n }\n\n /**\n
* Creates a generic wrapper constructor based on |object| and its\n * constr
uctor.\n * @param {Node} object\n * @return {Function} The generated constru
ctor.\n */\n function registerObject(object) {\n var nativePrototype = Obj
ect.getPrototypeOf(object);\n\n var superWrapperConstructor = getWrapperConst
ructor(nativePrototype);\n var GeneratedWrapper = createWrapperConstructor(su
perWrapperConstructor);\n registerInternal(nativePrototype, GeneratedWrapper,
object);\n\n return GeneratedWrapper;\n }\n\n function createWrapperConstr
uctor(superWrapperConstructor) {\n function GeneratedWrapper(node) {\n s
uperWrapperConstructor.call(this, node);\n }\n var p = Object.create(super
WrapperConstructor.prototype);\n p.constructor = GeneratedWrapper;\n Gener
atedWrapper.prototype = p;\n\n return GeneratedWrapper;\n }\n\n var Origina
lDOMImplementation = window.DOMImplementation;\n var OriginalEventTarget = wind
ow.EventTarget;\n var OriginalEvent = window.Event;\n var OriginalNode = windo
w.Node;\n var OriginalWindow = window.Window;\n var OriginalRange = window.Ran
ge;\n var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;\n
var OriginalWebGLRenderingContext = window.WebGLRenderingContext;\n var Origi
nalSVGElementInstance = window.SVGElementInstance;\n\n function isWrapper(objec
t) {\n return object instanceof wrappers.EventTarget ||\n object in
stanceof wrappers.Event ||\n object instanceof wrappers.Range ||\n
object instanceof wrappers.DOMImplementation ||\n object instan
ceof wrappers.CanvasRenderingContext2D ||\n wrappers.WebGLRenderingCon
text &&\n object instanceof wrappers.WebGLRenderingContext;\n }\n
\n function isNative(object) {\n return OriginalEventTarget && object instan
ceof OriginalEventTarget ||\n object instanceof OriginalNode ||\n
object instanceof OriginalEvent ||\n object instanceof OriginalW
indow ||\n object instanceof OriginalRange ||\n object insta
nceof OriginalDOMImplementation ||\n object instanceof OriginalCanvasR
enderingContext2D ||\n OriginalWebGLRenderingContext &&\n
object instanceof OriginalWebGLRenderingContext ||\n OriginalSVGElem
entInstance &&\n object instanceof OriginalSVGElementInstance;\n
}\n\n /**\n * Wraps a node in a WrapperNode. If there already exists a wrappe
r for the\n * |node| that wrapper is returned instead.\n * @param {Node} nod
e\n * @return {WrapperNode}\n */\n function wrap(impl) {\n if (impl ===
null)\n return null;\n\n assert(isNative(impl));\n return impl.polyme
rWrapper_ ||\n (impl.polymerWrapper_ = new (getWrapperConstructor(impl))(
impl));\n }\n\n /**\n * Unwraps a wrapper and returns the node it is wrappin
g.\n * @param {WrapperNode} wrapper\n * @return {Node}\n */\n function un
wrap(wrapper) {\n if (wrapper === null)\n return null;\n assert(isWra
pper(wrapper));\n return wrapper.impl;\n }\n\n /**\n * Unwraps object if
it is a wrapper.\n * @param {Object} object\n * @return {Object} The native
implementation object.\n */\n function unwrapIfNeeded(object) {\n return o
bject && isWrapper(object) ? unwrap(object) : object;\n }\n\n /**\n * Wraps
object if it is not a wrapper.\n * @param {Object} object\n * @return {Objec
t} The wrapper for object.\n */\n function wrapIfNeeded(object) {\n return
object && !isWrapper(object) ? wrap(object) : object;\n }\n\n /**\n * Overr
ides the current wrapper (if any) for node.\n * @param {Node} node\n * @para
m {WrapperNode=} wrapper If left out the wrapper will be created as\n * ne
eded next time someone wraps the node.\n */\n function rewrap(node, wrapper)
{\n if (wrapper === null)\n return;\n assert(isNative(node));\n as
sert(wrapper === undefined || isWrapper(wrapper));\n node.polymerWrapper_ = w
rapper;\n }\n\n function defineGetter(constructor, name, getter) {\n define
Property(constructor.prototype, name, {\n get: getter,\n configurable:
true,\n enumerable: true\n });\n }\n\n function defineWrapGetter(cons
tructor, name) {\n defineGetter(constructor, name, function() {\n return
wrap(this.impl[name]);\n });\n }\n\n /**\n * Forwards existing methods o
n the native object to the wrapper methods.\n * This does not wrap any of the
arguments or the return value since the\n * wrapper implementation already tak
es care of that.\n * @param {Array.<Function>} constructors\n * @parem {Arra
y.<string>} names\n */\n function forwardMethodsToWrapper(constructors, names
) {\n constructors.forEach(function(constructor) {\n names.forEach(funct
ion(name) {\n constructor.prototype[name] = function() {\n var w
= wrapIfNeeded(this);\n return w[name].apply(w, arguments);\n }
;\n });\n });\n }\n\n scope.assert = assert;\n scope.constructorTable
= constructorTable;\n scope.defineGetter = defineGetter;\n scope.defineWrapGe
tter = defineWrapGetter;\n scope.forwardMethodsToWrapper = forwardMethodsToWrap
per;\n scope.isWrapper = isWrapper;\n scope.isWrapperFor = isWrapperFor;\n sc
ope.mixin = mixin;\n scope.nativePrototypeTable = nativePrototypeTable;\n scop
e.oneOf = oneOf;\n scope.registerObject = registerObject;\n scope.registerWrap
per = register;\n scope.rewrap = rewrap;\n scope.unwrap = unwrap;\n scope.unw
rapIfNeeded = unwrapIfNeeded;\n scope.wrap = wrap;\n scope.wrapIfNeeded = wrap
IfNeeded;\n scope.wrappers = wrappers;\n\n})(window.ShadowDOMPolyfill);\n","/*\
n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this sou
rce code is goverened by a BSD-style\n * license that can be found in the LICENS
E file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalMutationO
bserver = window.MutationObserver;\n var callbacks = [];\n var pending = false
;\n var timerFunc;\n\n function handle() {\n pending = false;\n var copi
es = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < copies.le
ngth; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutationObser
ver) {\n var counter = 1;\n var observer = new OriginalMutationObserver(ha
ndle);\n var textNode = document.createTextNode(counter);\n observer.obser
ve(textNode, {characterData: true});\n\n timerFunc = function() {\n coun
ter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n } else {\n
timerFunc = window.setImmediate || window.setTimeout;\n }\n\n function set
EndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n retur
n;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.setEndOfMic
rotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyrigh
t 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is
goverened by a BSD-style\n * license that can be found in the LICENSE file.\n */
\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMicrotask = scope.setEn
dOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var wrappers = scope.wr
appers;\n\n var registrationsTable = new WeakMap();\n var globalMutationObserv
ers = [];\n var isScheduled = false;\n\n function scheduleCallback(observer) {
\n if (isScheduled)\n return;\n setEndOfMicrotask(notifyObservers);\n
isScheduled = true;\n }\n\n // http://dom.spec.whatwg.org/#mutation-observ
ers\n function notifyObservers() {\n isScheduled = false;\n\n do {\n
var notifyList = globalMutationObservers.slice();\n var anyNonEmpty = fals
e;\n for (var i = 0; i < notifyList.length; i++) {\n var mo = notify
List[i];\n var queue = mo.takeRecords();\n removeTransientObserver
sFor(mo);\n if (queue.length) {\n mo.callback_(queue, mo);\n
anyNonEmpty = true;\n }\n }\n } while (anyNonEmpty);\n }\n
\n /**\n * @param {string} type\n * @param {Node} target\n * @constructor
\n */\n function MutationRecord(type, target) {\n this.type = type;\n t
his.target = target;\n this.addedNodes = new wrappers.NodeList();\n this.r
emovedNodes = new wrappers.NodeList();\n this.previousSibling = null;\n th
is.nextSibling = null;\n this.attributeName = null;\n this.attributeNamesp
ace = null;\n this.oldValue = null;\n }\n\n /**\n * Registers transient o
bservers to ancestor and its ancesors for the node\n * which was removed.\n
* @param {!Node} ancestor\n * @param {!Node} node\n */\n function registerT
ransientObservers(ancestor, node) {\n for (; ancestor; ancestor = ancestor.pa
rentNode) {\n var registrations = registrationsTable.get(ancestor);\n
if (!registrations)\n continue;\n for (var i = 0; i < registrations.
length; i++) {\n var registration = registrations[i];\n if (regist
ration.options.subtree)\n registration.addTransientObserver(node);\n
}\n }\n }\n\n function removeTransientObserversFor(observer) {\n for
(var i = 0; i < observer.nodes_.length; i++) {\n var node = observer.nodes_
[i];\n var registrations = registrationsTable.get(node);\n if (!regist
rations)\n return;\n for (var j = 0; j < registrations.length; j++)
{\n var registration = registrations[j];\n if (registration.observ
er === observer)\n registration.removeTransientObservers();\n }\n
}\n }\n\n // http://dom.spec.whatwg.org/#queue-a-mutation-record\n functio
n enqueueMutation(target, type, data) {\n // 1.\n var interestedObservers
= Object.create(null);\n var associatedStrings = Object.create(null);\n\n
// 2.\n for (var node = target; node; node = node.parentNode) {\n // 3.\
n var registrations = registrationsTable.get(node);\n if (!registratio
ns)\n continue;\n for (var j = 0; j < registrations.length; j++) {\n
var registration = registrations[j];\n var options = registration
.options;\n // 1.\n if (node !== target && !options.subtree)\n
continue;\n\n // 2.\n if (type === 'attributes' && !options.
attributes)\n continue;\n\n // 3. If type is \"attributes\", opt
ions's attributeFilter is present, and\n // either options's attributeFil
ter does not contain name or namespace\n // is non-null, continue.\n
if (type === 'attributes' && options.attributeFilter &&\n (data.na
mespace !== null ||\n options.attributeFilter.indexOf(data.name) ===
-1)) {\n continue;\n }\n\n // 4.\n if (type === '
characterData' && !options.characterData)\n continue;\n\n // 5.\
n if (type === 'childList' && !options.childList)\n continue;\n\
n // 6.\n var observer = registration.observer;\n intereste
dObservers[observer.uid_] = observer;\n\n // 7. If either type is \"attri
butes\" and options's attributeOldValue is\n // true, or type is \"charac
terData\" and options's characterDataOldValue\n // is true, set the paire
d string of registered observer's observer in\n // interested observers t
o oldValue.\n if (type === 'attributes' && options.attributeOldValue ||\n
type === 'characterData' && options.characterDataOldValue) {\n
associatedStrings[observer.uid_] = data.oldValue;\n }\n }\n }
\n\n var anyRecordsEnqueued = false;\n\n // 4.\n for (var uid in intere
stedObservers) {\n var observer = interestedObservers[uid];\n var reco
rd = new MutationRecord(type, target);\n\n // 2.\n if ('name' in data
&& 'namespace' in data) {\n record.attributeName = data.name;\n re
cord.attributeNamespace = data.namespace;\n }\n\n // 3.\n if (dat
a.addedNodes)\n record.addedNodes = data.addedNodes;\n\n // 4.\n
if (data.removedNodes)\n record.removedNodes = data.removedNodes;\n\n
// 5.\n if (data.previousSibling)\n record.previousSibling = dat
a.previousSibling;\n\n // 6.\n if (data.nextSibling)\n record.n
extSibling = data.nextSibling;\n\n // 7.\n if (associatedStrings[uid]
!== undefined)\n record.oldValue = associatedStrings[uid];\n\n // 8.
\n observer.records_.push(record);\n\n anyRecordsEnqueued = true;\n
}\n\n if (anyRecordsEnqueued)\n scheduleCallback();\n }\n\n var slice
= Array.prototype.slice;\n\n /**\n * @param {!Object} options\n * @constru
ctor\n */\n function MutationObserverOptions(options) {\n this.childList =
!!options.childList;\n this.subtree = !!options.subtree;\n\n // 1. If eit
her options' attributeOldValue or attributeFilter is present\n // and options
' attributes is omitted, set options' attributes to true.\n if (!('attributes
' in options) &&\n ('attributeOldValue' in options || 'attributeFilter' i
n options)) {\n this.attributes = true;\n } else {\n this.attribute
s = !!options.attributes;\n }\n\n // 2. If options' characterDataOldValue
is present and options'\n // characterData is omitted, set options' character
Data to true.\n if ('characterDataOldValue' in options && !('characterData' i
n options))\n this.characterData = true;\n else\n this.characterDat
a = !!options.characterData;\n\n // 3. & 4.\n if (!this.attributes &&\n
(options.attributeOldValue || 'attributeFilter' in options) ||\n //
5.\n !this.characterData && options.characterDataOldValue) {\n throw
new TypeError();\n }\n\n this.characterData = !!options.characterData;\n
this.attributeOldValue = !!options.attributeOldValue;\n this.characterData
OldValue = !!options.characterDataOldValue;\n if ('attributeFilter' in option
s) {\n if (options.attributeFilter == null ||\n typeof options.att
ributeFilter !== 'object') {\n throw new TypeError();\n }\n thi
s.attributeFilter = slice.call(options.attributeFilter);\n } else {\n th
is.attributeFilter = null;\n }\n }\n\n var uidCounter = 0;\n\n /**\n * T
he class that maps to the DOM MutationObserver interface.\n * @param {Function
} callback.\n * @constructor\n */\n function MutationObserver(callback) {\n
this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n
this.uid_ = ++uidCounter;\n\n // This will leak. There is no way to imple
ment this without WeakRefs :'(\n globalMutationObservers.push(this);\n }\n\n
MutationObserver.prototype = {\n // http://dom.spec.whatwg.org/#dom-mutatio
nobserver-observe\n observe: function(target, options) {\n target = wrap
IfNeeded(target);\n\n var newOptions = new MutationObserverOptions(options)
;\n\n // 6.\n var registration;\n var registrations = registratio
nsTable.get(target);\n if (!registrations)\n registrationsTable.set(
target, registrations = []);\n\n for (var i = 0; i < registrations.length;
i++) {\n if (registrations[i].observer === this) {\n registratio
n = registrations[i];\n // 6.1.\n registration.removeTransient
Observers();\n // 6.2.\n registration.options = newOptions;\n
}\n }\n\n // 7.\n if (!registration) {\n registrati
on = new Registration(this, target, newOptions);\n registrations.push(reg
istration);\n this.nodes_.push(target);\n }\n },\n\n // http:/
/dom.spec.whatwg.org/#dom-mutationobserver-disconnect\n disconnect: function(
) {\n this.nodes_.forEach(function(node) {\n var registrations = reg
istrationsTable.get(node);\n for (var i = 0; i < registrations.length; i+
+) {\n var registration = registrations[i];\n if (registration
.observer === this) {\n registrations.splice(i, 1);\n // E
ach node can only have one registered observer associated with\n // t
his observer.\n break;\n }\n }\n }, this);\n
this.records_ = [];\n },\n\n takeRecords: function() {\n var copyOf
Records = this.records_;\n this.records_ = [];\n return copyOfRecords;
\n }\n };\n\n /**\n * Class used to represent a registered observer.\n
* @param {MutationObserver} observer\n * @param {Node} target\n * @param {Mu
tationObserverOptions} options\n * @constructor\n */\n function Registratio
n(observer, target, options) {\n this.observer = observer;\n this.target =
target;\n this.options = options;\n this.transientObservedNodes = [];\n
}\n\n Registration.prototype = {\n /**\n * Adds a transient observer on
node. The transient observer gets removed\n * next time we deliver the chang
e records.\n * @param {Node} node\n */\n addTransientObserver: functi
on(node) {\n // Don't add transient observers on the target itself. We alre
ady have all\n // the required listeners set up on the target.\n if (n
ode === this.target)\n return;\n\n this.transientObservedNodes.push(
node);\n var registrations = registrationsTable.get(node);\n if (!regi
strations)\n registrationsTable.set(node, registrations = []);\n\n /
/ We know that registrations does not contain this because we already\n //
checked if node === this.target.\n registrations.push(this);\n },\n\n
removeTransientObservers: function() {\n var transientObservedNodes = this
.transientObservedNodes;\n this.transientObservedNodes = [];\n\n for (
var i = 0; i < transientObservedNodes.length; i++) {\n var node = transie
ntObservedNodes[i];\n var registrations = registrationsTable.get(node);\n
for (var j = 0; j < registrations.length; j++) {\n if (registra
tions[j] === this) {\n registrations.splice(j, 1);\n // Ea
ch node can only have one registered observer associated with\n // th
is observer.\n break;\n }\n }\n }\n }\n };\n
\n scope.enqueueMutation = enqueueMutation;\n scope.registerTransientObservers
= registerTransientObservers;\n scope.wrappers.MutationObserver = MutationObse
rver;\n scope.wrappers.MutationRecord = MutationRecord;\n\n})(window.ShadowDOMP
olyfill);\n","/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n
* Use of this source code is goverened by a BSD-style\n * license that can be f
ound in the LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n
* A tree scope represents the root of a tree. All nodes in a tree point to\n
* the same TreeScope object. The tree scope of a node get set the first time\n
* it is accessed or when a node is added or remove to a tree.\n * @construc
tor\n */\n function TreeScope(root, parent) {\n this.root = root;\n thi
s.parent = parent;\n }\n\n TreeScope.prototype = {\n get renderer() {\n
if (this.root instanceof scope.wrappers.ShadowRoot) {\n return scope.ge
tRendererForHost(this.root.host);\n }\n return null;\n },\n\n co
ntains: function(treeScope) {\n for (; treeScope; treeScope = treeScope.par
ent) {\n if (treeScope === this)\n return true;\n }\n
return false;\n }\n };\n\n function setTreeScope(node, treeScope) {\n if
(node.treeScope_ !== treeScope) {\n node.treeScope_ = treeScope;\n fo
r (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) {\n sr.treeScop
e_.parent = treeScope;\n }\n for (var child = node.firstChild; child;
child = child.nextSibling) {\n setTreeScope(child, treeScope);\n }\n
}\n }\n\n function getTreeScope(node) {\n if (node.treeScope_)\n r
eturn node.treeScope_;\n var parent = node.parentNode;\n var treeScope;\n
if (parent)\n treeScope = getTreeScope(parent);\n else\n treeSco
pe = new TreeScope(node, null);\n return node.treeScope_ = treeScope;\n }\n\
n scope.TreeScope = TreeScope;\n scope.getTreeScope = getTreeScope;\n scope.s
etTreeScope = setTreeScope;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 20
13 The Polymer Authors. All rights reserved.\n// Use of this source code is gove
rened by a BSD-style\n// license that can be found in the LICENSE file.\n\n(func
tion(scope) {\n 'use strict';\n\n var forwardMethodsToWrapper = scope.forwardM
ethodsToWrapper;\n var getTreeScope = scope.getTreeScope;\n var mixin = scope.
mixin;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unw
rap;\n var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n var wrappe
dFuns = new WeakMap();\n var listenersTable = new WeakMap();\n var handledEven
tsTable = new WeakMap();\n var currentlyDispatchingEvents = new WeakMap();\n v
ar targetTable = new WeakMap();\n var currentTargetTable = new WeakMap();\n va
r relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap();\n
var stopPropagationTable = new WeakMap();\n var stopImmediatePropagationTable
= new WeakMap();\n var eventHandlersTable = new WeakMap();\n var eventPathTabl
e = new WeakMap();\n\n function isShadowRoot(node) {\n return node instanceo
f wrappers.ShadowRoot;\n }\n\n function isInsertionPoint(node) {\n var loca
lName = node.localName;\n return localName === 'content' || localName === 'sh
adow';\n }\n\n function isShadowHost(node) {\n return !!node.shadowRoot;\n
}\n\n function getEventParent(node) {\n var dv;\n return node.parentNode
|| (dv = node.defaultView) && wrap(dv) || null;\n }\n\n // https://dvcs.w3.or
g/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-adjusted-parent\n fu
nction calculateParents(node, context, ancestors) {\n if (ancestors.length)\n
return ancestors.shift();\n\n // 1.\n if (isShadowRoot(node))\n
return getInsertionParent(node) || node.host;\n\n // 2.\n var eventParent
s = scope.eventParentsTable.get(node);\n if (eventParents) {\n // Copy o
ver the remaining event parents for next iteration.\n for (var i = 1; i < e
ventParents.length; i++) {\n ancestors[i - 1] = eventParents[i];\n }
\n return eventParents[0];\n }\n\n // 3.\n if (context && isInsert
ionPoint(node)) {\n var parentNode = node.parentNode;\n if (parentNode
&& isShadowHost(parentNode)) {\n var trees = scope.getShadowTrees(parent
Node);\n var p = getInsertionParent(context);\n for (var i = 0; i
< trees.length; i++) {\n if (trees[i].contains(p))\n return
p;\n }\n }\n }\n\n return getEventParent(node);\n }\n\n // h
ttps://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-re
targeting\n function retarget(node) {\n var stack = []; // 1.\n var ance
stor = node; // 2.\n var targets = [];\n var ancestors = [];\n while (
ancestor) { // 3.\n var context = null; // 3.2.\n // TODO(arv): Chan
ge order of these. If the stack is empty we always end\n // up pushing ance
stor, no matter what.\n if (isInsertionPoint(ancestor)) { // 3.1.\n
context = topMostNotInsertionPoint(stack); // 3.1.1.\n var top = stack[
stack.length - 1] || ancestor; // 3.1.2.\n stack.push(top);\n } els
e if (!stack.length) {\n stack.push(ancestor); // 3.3.\n }\n v
ar target = stack[stack.length - 1]; // 3.4.\n targets.push({target: targe
t, currentTarget: ancestor}); // 3.5.\n if (isShadowRoot(ancestor)) // 3.
6.\n stack.pop(); // 3.6.1.\n\n ancestor = calculateParents(ancesto
r, context, ancestors); // 3.7.\n }\n return targets;\n }\n\n function
topMostNotInsertionPoint(stack) {\n for (var i = stack.length - 1; i >= 0; i-
-) {\n if (!isInsertionPoint(stack[i]))\n return stack[i];\n }\n
return null;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/s
pec/shadow/index.html#dfn-adjusted-related-target\n function adjustRelatedTarge
t(target, related) {\n var ancestors = [];\n while (target) { // 3.\n
var stack = []; // 3.1.\n var ancestor = related; // 3.2.\n var la
st = undefined; // 3.3. Needs to be reset every iteration.\n while (ancest
or) {\n var context = null;\n if (!stack.length) {\n stac
k.push(ancestor);\n } else {\n if (isInsertionPoint(ancestor)) {
// 3.4.3.\n context = topMostNotInsertionPoint(stack);\n
// isDistributed is more general than checking whether last is\n //
assigned into ancestor.\n if (isDistributed(last)) { // 3.4.3.2.\n
var head = stack[stack.length - 1];\n stack.push(head);
\n }\n }\n }\n\n if (inSameTree(ancestor, targ
et)) // 3.4.4.\n return stack[stack.length - 1];\n\n if (isShad
owRoot(ancestor)) // 3.4.5.\n stack.pop();\n\n last = ancestor;
// 3.4.6.\n ancestor = calculateParents(ancestor, context, ancestors);
// 3.4.7.\n }\n if (isShadowRoot(target)) // 3.5.\n target =
target.host;\n else\n target = target.parentNode; // 3.6.\n }\n
}\n\n function getInsertionParent(node) {\n return scope.insertionParentTab
le.get(node);\n }\n\n function isDistributed(node) {\n return getInsertionP
arent(node);\n }\n\n function inSameTree(a, b) {\n return getTreeScope(a) =
== getTreeScope(b);\n }\n\n function dispatchOriginalEvent(originalEvent) {\n
// Make sure this event is only dispatched once.\n if (handledEventsTable.
get(originalEvent))\n return;\n handledEventsTable.set(originalEvent, tr
ue);\n dispatchEvent(wrap(originalEvent), wrap(originalEvent.target));\n }\n
\n function isLoadLikeEvent(event) {\n switch (event.type) {\n case 'be
foreunload':\n case 'load':\n case 'unload':\n return true;\n
}\n return false;\n }\n\n function dispatchEvent(event, originalWrapperTa
rget) {\n if (currentlyDispatchingEvents.get(event))\n throw new Error('
InvalidStateError')\n currentlyDispatchingEvents.set(event, true);\n\n //
Render to ensure that the event path is correct.\n scope.renderAllPending();\
n var eventPath = retarget(originalWrapperTarget);\n\n // For window \"loa
d\" events the \"load\" event is dispatched at the window but\n // the target
is set to the document.\n //\n // http://www.whatwg.org/specs/web-apps/cu
rrent-work/multipage/the-end.html#the-end\n //\n // TODO(arv): Find a less
hacky way to do this.\n if (eventPath.length === 2 &&\n eventPath[0].
target instanceof wrappers.Document &&\n isLoadLikeEvent(event)) {\n
eventPath.shift();\n }\n\n eventPathTable.set(event, eventPath);\n\n i
f (dispatchCapturing(event, eventPath)) {\n if (dispatchAtTarget(event, eve
ntPath)) {\n dispatchBubbling(event, eventPath);\n }\n }\n\n e
ventPhaseTable.set(event, Event.NONE);\n currentTargetTable.delete(event, nul
l);\n currentlyDispatchingEvents.delete(event);\n\n return event.defaultPr
evented;\n }\n\n function dispatchCapturing(event, eventPath) {\n var phase
;\n\n for (var i = eventPath.length - 1; i > 0; i--) {\n var target = ev
entPath[i].target;\n var currentTarget = eventPath[i].currentTarget;\n
if (target === currentTarget)\n continue;\n\n phase = Event.CAPTURI
NG_PHASE;\n if (!invoke(eventPath[i], event, phase))\n return false;
\n }\n\n return true;\n }\n\n function dispatchAtTarget(event, eventPath
) {\n var phase = Event.AT_TARGET;\n return invoke(eventPath[0], event, ph
ase);\n }\n\n function dispatchBubbling(event, eventPath) {\n var bubbles =
event.bubbles;\n var phase;\n\n for (var i = 1; i < eventPath.length; i++
) {\n var target = eventPath[i].target;\n var currentTarget = eventPat
h[i].currentTarget;\n if (target === currentTarget)\n phase = Event.
AT_TARGET;\n else if (bubbles && !stopImmediatePropagationTable.get(event))
\n phase = Event.BUBBLING_PHASE;\n else\n continue;\n\n
if (!invoke(eventPath[i], event, phase))\n return;\n }\n }\n\n funct
ion invoke(tuple, event, phase) {\n var target = tuple.target;\n var curre
ntTarget = tuple.currentTarget;\n\n var listeners = listenersTable.get(curren
tTarget);\n if (!listeners)\n return true;\n\n if ('relatedTarget' in
event) {\n var originalEvent = unwrap(event);\n var unwrappedRelatedT
arget = originalEvent.relatedTarget;\n\n // X-Tag sets relatedTarget on a C
ustomEvent. If they do that there is no\n // way to have relatedTarget retu
rn the adjusted target but worse is that\n // the originalEvent might not h
ave a relatedTarget so we hit an assert\n // when we try to wrap it.\n
if (unwrappedRelatedTarget) {\n // In IE we can get objects that are not
EventTargets at this point.\n // Safari does not have an EventTarget int
erface so revert to checking\n // for addEventListener as an approximatio
n.\n if (unwrappedRelatedTarget instanceof Object &&\n unwrapp
edRelatedTarget.addEventListener) {\n var relatedTarget = wrap(unwrappe
dRelatedTarget);\n\n var adjusted = adjustRelatedTarget(currentTarget,
relatedTarget);\n if (adjusted === target)\n return true;\n
} else {\n adjusted = null;\n }\n relatedTargetTab
le.set(event, adjusted);\n }\n }\n\n eventPhaseTable.set(event, phase
);\n var type = event.type;\n\n var anyRemoved = false;\n targetTable.s
et(event, target);\n currentTargetTable.set(event, currentTarget);\n\n for
(var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n
if (listener.removed) {\n anyRemoved = true;\n continue;\n
}\n\n if (listener.type !== type ||\n !listener.capture && phas
e === Event.CAPTURING_PHASE ||\n listener.capture && phase === Event.BU
BBLING_PHASE) {\n continue;\n }\n\n try {\n if (typeof l
istener.handler === 'function')\n listener.handler.call(currentTarget,
event);\n else\n listener.handler.handleEvent(event);\n\n
if (stopImmediatePropagationTable.get(event))\n return false;\n\n
} catch (ex) {\n if (window.onerror)\n window.onerror(ex.messag
e);\n else\n console.error(ex, ex.stack);\n }\n }\n\n
if (anyRemoved) {\n var copy = listeners.slice();\n listeners.length
= 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].remove
d)\n listeners.push(copy[i]);\n }\n }\n\n return !stopPropag
ationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\n
this.type = type;\n this.handler = handler;\n this.capture = Boolean(cap
ture);\n }\n Listener.prototype = {\n equals: function(that) {\n retur
n this.handler === that.handler && this.type === that.type &&\n this.ca
pture === that.capture;\n },\n get removed() {\n return this.handler
=== null;\n },\n remove: function() {\n this.handler = null;\n }\n
};\n\n var OriginalEvent = window.Event;\n OriginalEvent.prototype.polymerBl
ackList_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of K
eyboardEvent but Firefox does not\n // support constructable KeyboardEvent so
we keep it here for now.\n keyLocation: true\n };\n\n /**\n * Creates a
new Event wrapper or wraps an existin native Event object.\n * @param {string|
Event} type\n * @param {Object=} options\n * @constructor\n */\n function
Event(type, options) {\n if (type instanceof OriginalEvent) {\n var imp
l = type;\n if (!OriginalBeforeUnloadEvent && impl.type === 'beforeunload')
\n return new BeforeUnloadEvent(impl);\n this.impl = impl;\n } el
se {\n return wrap(constructEvent(OriginalEvent, 'Event', type, options));\
n }\n }\n Event.prototype = {\n get target() {\n return targetTable
.get(this);\n },\n get currentTarget() {\n return currentTargetTable.
get(this);\n },\n get eventPhase() {\n return eventPhaseTable.get(thi
s);\n },\n get path() {\n var nodeList = new wrappers.NodeList();\n
var eventPath = eventPathTable.get(this);\n if (eventPath) {\n v
ar index = 0;\n var lastIndex = eventPath.length - 1;\n var baseRo
ot = getTreeScope(currentTargetTable.get(this));\n\n for (var i = 0; i <=
lastIndex; i++) {\n var currentTarget = eventPath[i].currentTarget;\n
var currentRoot = getTreeScope(currentTarget);\n if (currentRo
ot.contains(baseRoot) &&\n // Make sure we do not add Window to the
path.\n (i !== lastIndex || currentTarget instanceof wrappers.Node
)) {\n nodeList[index++] = currentTarget;\n }\n }\n
nodeList.length = index;\n }\n return nodeList;\n },\n sto
pPropagation: function() {\n stopPropagationTable.set(this, true);\n },\
n stopImmediatePropagation: function() {\n stopPropagationTable.set(this
, true);\n stopImmediatePropagationTable.set(this, true);\n }\n };\n r
egisterWrapper(OriginalEvent, Event, document.createEvent('Event'));\n\n functi
on unwrapOptions(options) {\n if (!options || !options.relatedTarget)\n
return options;\n return Object.create(options, {\n relatedTarget: {valu
e: unwrap(options.relatedTarget)}\n });\n }\n\n function registerGenericEve
nt(name, SuperEvent, prototype) {\n var OriginalEvent = window[name];\n va
r GenericEvent = function(type, options) {\n if (type instanceof OriginalEv
ent)\n this.impl = type;\n else\n return wrap(constructEvent(
OriginalEvent, name, type, options));\n };\n GenericEvent.prototype = Obje
ct.create(SuperEvent.prototype);\n if (prototype)\n mixin(GenericEvent.p
rototype, prototype);\n if (OriginalEvent) {\n // - Old versions of Safa
ri fails on new FocusEvent (and others?).\n // - IE does not support event
constructors.\n // - createEvent('FocusEvent') throws in Firefox.\n //
=> Try the best practice solution first and fallback to the old way\n // i
f needed.\n try {\n registerWrapper(OriginalEvent, GenericEvent, new
OriginalEvent('temp'));\n } catch (ex) {\n registerWrapper(Original
Event, GenericEvent,\n document.createEvent(name));\n
}\n }\n return GenericEvent;\n }\n\n var UIEvent = registerGenericEven
t('UIEvent', Event);\n var CustomEvent = registerGenericEvent('CustomEvent', Ev
ent);\n\n var relatedTargetProto = {\n get relatedTarget() {\n var rela
tedTarget = relatedTargetTable.get(this);\n // relatedTarget can be null.\n
if (relatedTarget !== undefined)\n return relatedTarget;\n ret
urn wrap(unwrap(this).relatedTarget);\n }\n };\n\n function getInitFunction
(name, relatedTargetIndex) {\n return function() {\n arguments[relatedTa
rgetIndex] = unwrap(arguments[relatedTargetIndex]);\n var impl = unwrap(thi
s);\n impl[name].apply(impl, arguments);\n };\n }\n\n var mouseEventPr
oto = mixin({\n initMouseEvent: getInitFunction('initMouseEvent', 14)\n }, r
elatedTargetProto);\n\n var focusEventProto = mixin({\n initFocusEvent: getI
nitFunction('initFocusEvent', 5)\n }, relatedTargetProto);\n\n var MouseEvent
= registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);\n var FocusEven
t = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);\n\n // In cas
e the browser does not support event constructors we polyfill that\n // by call
ing `createEvent('Foo')` and `initFooEvent` where the arguments to\n // `initFo
oEvent` are derived from the registered default event init dict.\n var defaultI
nitDicts = Object.create(null);\n\n var supportsEventConstructors = (function()
{\n try {\n new window.FocusEvent('focus');\n } catch (ex) {\n
return false;\n }\n return true;\n })();\n\n /**\n * Constructs a new
native event.\n */\n function constructEvent(OriginalEvent, name, type, optio
ns) {\n if (supportsEventConstructors)\n return new OriginalEvent(type,
unwrapOptions(options));\n\n // Create the arguments from the default diction
ary.\n var event = unwrap(document.createEvent(name));\n var defaultDict =
defaultInitDicts[name];\n var args = [type];\n Object.keys(defaultDict).f
orEach(function(key) {\n var v = options != null && key in options ?\n
options[key] : defaultDict[key];\n if (key === 'relatedTarget')\n
v = unwrap(v);\n args.push(v);\n });\n event['init' + name].apply(
event, args);\n return event;\n }\n\n if (!supportsEventConstructors) {\n
var configureEventConstructor = function(name, initDict, superName) {\n i
f (superName) {\n var superDict = defaultInitDicts[superName];\n i
nitDict = mixin(mixin({}, superDict), initDict);\n }\n\n defaultInitDi
cts[name] = initDict;\n };\n\n // The order of the default event init dict
ionary keys is important, the\n // arguments to initFooEvent is derived from
that.\n configureEventConstructor('Event', {bubbles: false, cancelable: false
});\n configureEventConstructor('CustomEvent', {detail: null}, 'Event');\n
configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Event');\n co
nfigureEventConstructor('MouseEvent', {\n screenX: 0,\n screenY: 0,\n
clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKey: false,
\n shiftKey: false,\n metaKey: false,\n button: 0,\n related
Target: null\n }, 'UIEvent');\n configureEventConstructor('FocusEvent', {r
elatedTarget: null}, 'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeU
nloadEvent.\n // https://bugs.webkit.org/show_bug.cgi?id=120849\n var Original
BeforeUnloadEvent = window.BeforeUnloadEvent;\n\n function BeforeUnloadEvent(im
pl) {\n Event.call(this, impl);\n }\n BeforeUnloadEvent.prototype = Object.
create(Event.prototype);\n mixin(BeforeUnloadEvent.prototype, {\n get return
Value() {\n return this.impl.returnValue;\n },\n set returnValue(v) {
\n this.impl.returnValue = v;\n }\n });\n\n if (OriginalBeforeUnloadEv
ent)\n registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);\n\n fu
nction isValidListener(fun) {\n if (typeof fun === 'function')\n return
true;\n return fun && fun.handleEvent;\n }\n\n function isMutationEvent(typ
e) {\n switch (type) {\n case 'DOMAttrModified':\n case 'DOMAttribu
teNameChanged':\n case 'DOMCharacterDataModified':\n case 'DOMElementN
ameChanged':\n case 'DOMNodeInserted':\n case 'DOMNodeInsertedIntoDocu
ment':\n case 'DOMNodeRemoved':\n case 'DOMNodeRemovedFromDocument':\n
case 'DOMSubtreeModified':\n return true;\n }\n return false;
\n }\n\n var OriginalEventTarget = window.EventTarget;\n\n /**\n * This rep
resents a wrapper for an EventTarget.\n * @param {!EventTarget} impl The origi
nal event target.\n * @constructor\n */\n function EventTarget(impl) {\n
this.impl = impl;\n }\n\n // Node and Window have different internal type che
cks in WebKit so we cannot\n // use the same method as the original function.\n
var methodNames = [\n 'addEventListener',\n 'removeEventListener',\n
'dispatchEvent'\n ];\n\n [Node, Window].forEach(function(constructor) {\n v
ar p = constructor.prototype;\n methodNames.forEach(function(name) {\n O
bject.defineProperty(p, name + '_', {value: p[name]});\n });\n });\n\n func
tion getTargetToListenAt(wrapper) {\n if (wrapper instanceof wrappers.ShadowR
oot)\n wrapper = wrapper.host;\n return unwrap(wrapper);\n }\n\n Event
Target.prototype = {\n addEventListener: function(type, fun, capture) {\n
if (!isValidListener(fun) || isMutationEvent(type))\n return;\n\n
var listener = new Listener(type, fun, capture);\n var listeners = listener
sTable.get(this);\n if (!listeners) {\n listeners = [];\n lis
tenersTable.set(this, listeners);\n } else {\n // Might have a dupli
cate.\n for (var i = 0; i < listeners.length; i++) {\n if (liste
ner.equals(listeners[i]))\n return;\n }\n }\n\n list
eners.push(listener);\n\n var target = getTargetToListenAt(this);\n ta
rget.addEventListener_(type, dispatchOriginalEvent, true);\n },\n removeEv
entListener: function(type, fun, capture) {\n capture = Boolean(capture);\n
var listeners = listenersTable.get(this);\n if (!listeners)\n
return;\n var count = 0, found = false;\n for (var i = 0; i < listener
s.length; i++) {\n if (listeners[i].type === type && listeners[i].capture
=== capture) {\n count++;\n if (listeners[i].handler === fun)
{\n found = true;\n listeners[i].remove();\n }\n
}\n }\n\n if (found && count === 1) {\n var target = ge
tTargetToListenAt(this);\n target.removeEventListener_(type, dispatchOrig
inalEvent, true);\n }\n },\n dispatchEvent: function(event) {\n
// We want to use the native dispatchEvent because it triggers the default\n
// actions (like checking a checkbox). However, if there are no listeners\n
// in the composed tree then there are no events that will trigger and\n
// listeners in the non composed tree that are part of the event path are\n
// not notified.\n //\n // If we find out that there are no listener
s in the composed tree we add\n // a temporary listener to the target which
makes us get called back even\n // in that case.\n\n var nativeEvent
= unwrap(event);\n var eventType = nativeEvent.type;\n\n // Allow disp
atching the same event again. This is safe because if user\n // code calls
this during an existing dispatch of the same event the\n // native dispatch
Event throws (that is required by the spec).\n handledEventsTable.set(nativ
eEvent, false);\n\n // Force rendering since we prefer native dispatch and
that works on the\n // composed tree.\n scope.renderAllPending();\n\n
var tempListener;\n if (!hasListenerInAncestors(this, eventType)) {\n
tempListener = function() {};\n this.addEventListener(eventType, t
empListener, true);\n }\n\n try {\n return unwrap(this).dispatc
hEvent_(nativeEvent);\n } finally {\n if (tempListener)\n t
his.removeEventListener(eventType, tempListener, true);\n }\n }\n };\n\
n function hasListener(node, type) {\n var listeners = listenersTable.get(no
de);\n if (listeners) {\n for (var i = 0; i < listeners.length; i++) {\n
if (!listeners[i].removed && listeners[i].type === type)\n retu
rn true;\n }\n }\n return false;\n }\n\n function hasListenerInAnce
stors(target, type) {\n for (var node = unwrap(target); node; node = node.par
entNode) {\n if (hasListener(wrap(node), type))\n return true;\n
}\n return false;\n }\n\n if (OriginalEventTarget)\n registerWrapper(Ori
ginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(constructor
s) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var orig
inalElementFromPoint = document.elementFromPoint;\n\n function elementFromPoint
(self, document, x, y) {\n scope.renderAllPending();\n\n var element = wra
p(originalElementFromPoint.call(document.impl, x, y));\n var targets = retarg
et(element, this)\n for (var i = 0; i < targets.length; i++) {\n var tar
get = targets[i];\n if (target.currentTarget === self)\n return targ
et.target;\n }\n return null;\n }\n\n /**\n * Returns a function that
is to be used as a getter for `onfoo` properties.\n * @param {string} name\n
* @return {Function}\n */\n function getEventHandlerGetter(name) {\n retu
rn function() {\n var inlineEventHandlers = eventHandlersTable.get(this);\n
return inlineEventHandlers && inlineEventHandlers[name] &&\n inli
neEventHandlers[name].value || null;\n };\n }\n\n /**\n * Returns a func
tion that is to be used as a setter for `onfoo` properties.\n * @param {string
} name\n * @return {Function}\n */\n function getEventHandlerSetter(name) {
\n var eventType = name.slice(2);\n return function(value) {\n var in
lineEventHandlers = eventHandlersTable.get(this);\n if (!inlineEventHandler
s) {\n inlineEventHandlers = Object.create(null);\n eventHandlersT
able.set(this, inlineEventHandlers);\n }\n\n var old = inlineEventHand
lers[name];\n if (old)\n this.removeEventListener(eventType, old.wra
pped, false);\n\n if (typeof value === 'function') {\n var wrapped =
function(e) {\n var rv = value.call(this, e);\n if (rv === fa
lse)\n e.preventDefault();\n else if (name === 'onbeforeunlo
ad' && typeof rv === 'string')\n e.returnValue = rv;\n // mo
useover uses true for preventDefault but preventDefault for\n // mouseo
ver is ignored by browsers these day.\n };\n\n this.addEventListen
er(eventType, wrapped, false);\n inlineEventHandlers[name] = {\n
value: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n
scope.adjustRelatedTarget = adjustRelatedTarget;\n scope.elementFromPoint = e
lementFromPoint;\n scope.getEventHandlerGetter = getEventHandlerGetter;\n scop
e.getEventHandlerSetter = getEventHandlerSetter;\n scope.wrapEventTargetMethods
= wrapEventTargetMethods;\n scope.wrappers.BeforeUnloadEvent = BeforeUnloadEve
nt;\n scope.wrappers.CustomEvent = CustomEvent;\n scope.wrappers.Event = Event
;\n scope.wrappers.EventTarget = EventTarget;\n scope.wrappers.FocusEvent = Fo
cusEvent;\n scope.wrappers.MouseEvent = MouseEvent;\n scope.wrappers.UIEvent =
UIEvent;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2012 The Polymer Aut
hors. All rights reserved.\n// Use of this source code is goverened by a BSD-sty
le\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n '
use strict';\n\n var wrap = scope.wrap;\n\n function nonEnum(obj, prop) {\n
Object.defineProperty(obj, prop, {enumerable: false});\n }\n\n function NodeL
ist() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.pro
totype = {\n item: function(index) {\n return this[index];\n }\n };\
n nonEnum(NodeList.prototype, 'item');\n\n function wrapNodeList(list) {\n
if (list == null)\n return list;\n var wrapperList = new NodeList();\n
for (var i = 0, length = list.length; i < length; i++) {\n wrapperList[i]
= wrap(list[i]);\n }\n wrapperList.length = length;\n return wrapperLi
st;\n }\n\n function addWrapNodeListMethod(wrapperConstructor, name) {\n wr
apperConstructor.prototype[name] = function() {\n return wrapNodeList(this.
impl[name].apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.NodeLi
st = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.
wrapNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyrig
ht 2014 The Polymer Authors. All rights reserved.\n * Use of this source code is
goverened by a BSD-style\n * license that can be found in the LICENSE file.\n *
/\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): Implement.\n\n scop
e.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers.HTMLCollection = sc
ope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n","/**\n * Copyright 20
12 The Polymer Authors. All rights reserved.\n * Use of this source code is gove
rened by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n
(function(scope) {\n 'use strict';\n\n var EventTarget = scope.wrappers.EventT
arget;\n var NodeList = scope.wrappers.NodeList;\n var TreeScope = scope.TreeS
cope;\n var assert = scope.assert;\n var defineWrapGetter = scope.defineWrapGe
tter;\n var enqueueMutation = scope.enqueueMutation;\n var getTreeScope = scop
e.getTreeScope;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\
n var registerTransientObservers = scope.registerTransientObservers;\n var reg
isterWrapper = scope.registerWrapper;\n var setTreeScope = scope.setTreeScope;\
n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n v
ar wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var wrappers
= scope.wrappers;\n\n function assertIsNodeWrapper(node) {\n assert(node ins
tanceof Node);\n }\n\n function createOneElementNodeList(node) {\n var node
s = new NodeList();\n nodes[0] = node;\n nodes.length = 1;\n return nod
es;\n }\n\n var surpressMutations = false;\n\n /**\n * Called before node i
s inserted into a node to enqueue its removal from its\n * old parent.\n * @
param {!Node} node The node that is about to be removed.\n * @param {!Node} pa
rent The parent node that the node is being removed from.\n * @param {!NodeLis
t} nodes The collected nodes.\n */\n function enqueueRemovalForInsertedNodes(
node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n remove
dNodes: nodes,\n previousSibling: node.previousSibling,\n nextSibling:
node.nextSibling\n });\n }\n\n function enqueueRemovalForInsertedDocumentF
ragment(df, nodes) {\n enqueueMutation(df, 'childList', {\n removedNodes
: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFragment or a
Node for removal followed\n * by an insertion.\n *\n * This updates the i
nternal pointers for node, previousNode and nextNode.\n */\n function collect
Nodes(node, parentNode, previousNode, nextNode) {\n if (node instanceof Docum
entFragment) {\n var nodes = collectNodesForDocumentFragment(node);\n\n
// The extra loop is to work around bugs with DocumentFragments in IE.\n
surpressMutations = true;\n for (var i = nodes.length - 1; i >= 0; i--) {\n
node.removeChild(nodes[i]);\n nodes[i].parentNode_ = parentNode;\
n }\n surpressMutations = false;\n\n for (var i = 0; i < nodes.le
ngth; i++) {\n nodes[i].previousSibling_ = nodes[i - 1] || previousNode;\
n nodes[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n if
(previousNode)\n previousNode.nextSibling_ = nodes[0];\n if (nextNod
e)\n nextNode.previousSibling_ = nodes[nodes.length - 1];\n\n return
nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n var oldPa
rent = node.parentNode;\n if (oldParent) {\n // This will enqueue the mu
tation record for the removal as needed.\n oldParent.removeChild(node);\n
}\n\n node.parentNode_ = parentNode;\n node.previousSibling_ = previousN
ode;\n node.nextSibling_ = nextNode;\n if (previousNode)\n previousNo
de.nextSibling_ = node;\n if (nextNode)\n nextNode.previousSibling_ = no
de;\n\n return nodes;\n }\n\n function collectNodesNative(node) {\n if (
node instanceof DocumentFragment)\n return collectNodesForDocumentFragment(
node);\n\n var nodes = createOneElementNodeList(node);\n var oldParent = n
ode.parentNode;\n if (oldParent)\n enqueueRemovalForInsertedNodes(node,
oldParent, nodes);\n return nodes;\n }\n\n function collectNodesForDocument
Fragment(node) {\n var nodes = new NodeList();\n var i = 0;\n for (var
child = node.firstChild; child; child = child.nextSibling) {\n nodes[i++] =
child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDocumentFrag
ment(node, nodes);\n return nodes;\n }\n\n function snapshotNodeList(nodeLi
st) {\n // NodeLists are not live at the moment so just return the same objec
t.\n return nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-is-insert
ed\n function nodeWasAdded(node, treeScope) {\n setTreeScope(node, treeScope
);\n node.nodeIsInserted_();\n }\n\n function nodesWereAdded(nodes, parent)
{\n var treeScope = getTreeScope(parent);\n for (var i = 0; i < nodes.len
gth; i++) {\n nodeWasAdded(nodes[i], treeScope);\n }\n }\n\n // http:/
/dom.spec.whatwg.org/#node-is-removed\n function nodeWasRemoved(node) {\n se
tTreeScope(node, new TreeScope(node, null));\n }\n\n function nodesWereRemoved
(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n nodeWasRemoved(no
des[i]);\n }\n }\n\n function ensureSameOwnerDocument(parent, child) {\n
var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : paren
t.ownerDocument;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adop
tNode(child);\n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!no
des.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n //
All nodes have the same ownerDocument when we get here.\n if (ownerDoc === no
des[0].ownerDocument)\n return;\n\n for (var i = 0; i < nodes.length; i+
+) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n functi
on unwrapNodesForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes)
;\n var length = nodes.length;\n\n if (length === 1)\n return unwrap(
nodes[0]);\n\n var df = unwrap(owner.ownerDocument.createDocumentFragment());
\n for (var i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]))
;\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (
wrapper.firstChild_ !== undefined) {\n var child = wrapper.firstChild_;\n
while (child) {\n var tmp = child;\n child = child.nextSibling
_;\n tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefine
d;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n
}\n\n function removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShado
wRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (child
Wrapper) {\n assert(childWrapper.parentNode === wrapper);\n var ne
xtSibling = childWrapper.nextSibling;\n var childNode = unwrap(childWrapp
er);\n var parentNode = childNode.parentNode;\n if (parentNode)\n
originalRemoveChild.call(parentNode, childNode);\n childWrapper.
previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentN
ode_ = null;\n childWrapper = nextSibling;\n }\n wrapper.firstC
hild_ = wrapper.lastChild_ = null;\n } else {\n var node = unwrap(wrappe
r);\n var child = node.firstChild;\n var nextSibling;\n while (ch
ild) {\n nextSibling = child.nextSibling;\n originalRemoveChild.ca
ll(node, child);\n child = nextSibling;\n }\n }\n }\n\n functio
n invalidateParent(node) {\n var p = node.parentNode;\n return p && p.inva
lidateShadowRenderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i
= 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.remov
eChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var
originalCloneNode = window.Node.prototype.cloneNode;\n\n function cloneNode(no
de, deep, opt_doc) {\n var clone;\n if (opt_doc)\n clone = wrap(origi
nalImportNode.call(opt_doc, node.impl, false));\n else\n clone = wrap(or
iginalCloneNode.call(node.impl, false));\n\n if (deep) {\n for (var chil
d = node.firstChild; child; child = child.nextSibling) {\n clone.appendCh
ild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrap
pers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n
for (var child = node.content.firstChild;\n child;\n chi
ld = child.nextSibling) {\n cloneContent.appendChild(cloneNode(child, tr
ue, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elements
also clone other data like value.\n return clone;\n }\n\n function contains
(self, child) {\n if (!child || getTreeScope(self) !== getTreeScope(child))\n
return false;\n\n for (var node = child; node; node = node.parentNode)
{\n if (node === self)\n return true;\n }\n return false;\n }
\n\n var OriginalNode = window.Node;\n\n /**\n * This represents a wrapper o
f a native DOM node.\n * @param {!Node} original The original DOM node, aka, t
he visual DOM node.\n * @constructor\n * @extends {EventTarget}\n */\n fu
nction Node(original) {\n assert(original instanceof OriginalNode);\n\n Ev
entTarget.call(this, original);\n\n // These properties are used to override
the visual references with the\n // logical ones. If the value is undefined i
t means that the logical is the\n // same as the visual.\n\n /**\n * @
type {Node|undefined}\n * @private\n */\n this.parentNode_ = undefine
d;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this
.firstChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @pri
vate\n */\n this.lastChild_ = undefined;\n\n /**\n * @type {Node|u
ndefined}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /
**\n * @type {Node|undefined}\n * @private\n */\n this.previousSi
bling_ = undefined;\n\n this.treeScope_ = undefined;\n }\n\n var OriginalDo
cumentFragment = window.DocumentFragment;\n var originalAppendChild = OriginalN
ode.prototype.appendChild;\n var originalCompareDocumentPosition =\n Origi
nalNode.prototype.compareDocumentPosition;\n var originalInsertBefore = Origina
lNode.prototype.insertBefore;\n var originalRemoveChild = OriginalNode.prototyp
e.removeChild;\n var originalReplaceChild = OriginalNode.prototype.replaceChild
;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n var removeChildOrigi
nalHelper = isIe ?\n function(parent, child) {\n try {\n or
iginalRemoveChild.call(parent, child);\n } catch (ex) {\n if (!(
parent instanceof OriginalDocumentFragment))\n throw ex;\n }\n
} :\n function(parent, child) {\n originalRemoveChild.call(par
ent, child);\n };\n\n Node.prototype = Object.create(EventTarget.prototype
);\n mixin(Node.prototype, {\n appendChild: function(childWrapper) {\n
return this.insertBefore(childWrapper, null);\n },\n\n insertBefore: funct
ion(childWrapper, refWrapper) {\n assertIsNodeWrapper(childWrapper);\n\n
var refNode;\n if (refWrapper) {\n if (isWrapper(refWrapper)) {\n
refNode = unwrap(refWrapper);\n } else {\n refNode = r
efWrapper;\n refWrapper = wrap(refNode);\n }\n } else {\n
refWrapper = null;\n refNode = null;\n }\n\n refWrapper &
& assert(refWrapper.parentNode === this);\n\n var nodes;\n var previou
sNode =\n refWrapper ? refWrapper.previousSibling : this.lastChild;\n\n
var useNative = !this.invalidateShadowRenderer() &&\n
!invalidateParent(childWrapper);\n\n if (useNative)\n nodes = colle
ctNodesNative(childWrapper);\n else\n nodes = collectNodes(childWrap
per, this, previousNode, refWrapper);\n\n if (useNative) {\n ensureS
ameOwnerDocument(this, childWrapper);\n clearChildNodes(this);\n o
riginalInsertBefore.call(this.impl, unwrap(childWrapper), refNode);\n } els
e {\n if (!previousNode)\n this.firstChild_ = nodes[0];\n
if (!refWrapper)\n this.lastChild_ = nodes[nodes.length - 1];\n\n
var parentNode = refNode ? refNode.parentNode : this.impl;\n\n // inse
rtBefore refWrapper no matter what the parent is?\n if (parentNode) {\n
originalInsertBefore.call(parentNode,\n unwrapNodesForInser
tion(this, nodes), refNode);\n } else {\n adoptNodesIfNeeded(thi
s, nodes);\n }\n }\n\n enqueueMutation(this, 'childList', {\n
addedNodes: nodes,\n nextSibling: refWrapper,\n previousSibl
ing: previousNode\n });\n\n nodesWereAdded(nodes, this);\n\n retu
rn childWrapper;\n },\n\n removeChild: function(childWrapper) {\n ass
ertIsNodeWrapper(childWrapper);\n if (childWrapper.parentNode !== this) {\n
// IE has invalid DOM trees at times.\n var found = false;\n
var childNodes = this.childNodes;\n for (var ieChild = this.firstChild
; ieChild;\n ieChild = ieChild.nextSibling) {\n if (ieChild
=== childWrapper) {\n found = true;\n break;\n }
\n }\n if (!found) {\n // TODO(arv): DOMException\n
throw new Error('NotFoundError');\n }\n }\n\n var childNode
= unwrap(childWrapper);\n var childWrapperNextSibling = childWrapper.nextS
ibling;\n var childWrapperPreviousSibling = childWrapper.previousSibling;\n
\n if (this.invalidateShadowRenderer()) {\n // We need to remove the
real node from the DOM before updating the\n // pointers. This is so tha
t that mutation event is dispatched before\n // the pointers have changed
.\n var thisFirstChild = this.firstChild;\n var thisLastChild = th
is.lastChild;\n\n var parentNode = childNode.parentNode;\n if (par
entNode)\n removeChildOriginalHelper(parentNode, childNode);\n\n
if (thisFirstChild === childWrapper)\n this.firstChild_ = childWrapper
NextSibling;\n if (thisLastChild === childWrapper)\n this.lastCh
ild_ = childWrapperPreviousSibling;\n if (childWrapperPreviousSibling)\n
childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;\n
if (childWrapperNextSibling) {\n childWrapperNextSibling.previous
Sibling_ =\n childWrapperPreviousSibling;\n }\n\n chi
ldWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrapp
er.parentNode_ = undefined;\n } else {\n clearChildNodes(this);\n
removeChildOriginalHelper(this.impl, childNode);\n }\n\n if (!sur
pressMutations) {\n enqueueMutation(this, 'childList', {\n remov
edNodes: createOneElementNodeList(childWrapper),\n nextSibling: childWr
apperNextSibling,\n previousSibling: childWrapperPreviousSibling\n
});\n }\n\n registerTransientObservers(this, childWrapper);\n\n
return childWrapper;\n },\n\n replaceChild: function(newChildWrapper, ol
dChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n var oldCh
ildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChildNode = unwrap
(oldChildWrapper);\n } else {\n oldChildNode = oldChildWrapper;\n
oldChildWrapper = wrap(oldChildNode);\n }\n\n if (oldChildWrapper
.parentNode !== this) {\n // TODO(arv): DOMException\n throw new E
rror('NotFoundError');\n }\n\n var nextNode = oldChildWrapper.nextSibl
ing;\n var previousNode = oldChildWrapper.previousSibling;\n var nodes
;\n\n var useNative = !this.invalidateShadowRenderer() &&\n
!invalidateParent(newChildWrapper);\n\n if (useNative) {\n nod
es = collectNodesNative(newChildWrapper);\n } else {\n if (nextNode
=== newChildWrapper)\n nextNode = newChildWrapper.nextSibling;\n
nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);\n }\n
\n if (!useNative) {\n if (this.firstChild === oldChildWrapper)\n
this.firstChild_ = nodes[0];\n if (this.lastChild === oldChildWrap
per)\n this.lastChild_ = nodes[nodes.length - 1];\n\n oldChildWr
apper.previousSibling_ = oldChildWrapper.nextSibling_ =\n oldChildWra
pper.parentNode_ = undefined;\n\n // replaceChild no matter what the pare
nt is?\n if (oldChildNode.parentNode) {\n originalReplaceChild.c
all(\n oldChildNode.parentNode,\n unwrapNodesForInsert
ion(this, nodes),\n oldChildNode);\n }\n } else {\n
ensureSameOwnerDocument(this, newChildWrapper);\n clearChildNodes(thi
s);\n originalReplaceChild.call(this.impl, unwrap(newChildWrapper),\n
oldChildNode);\n }\n\n enqueueMutation(t
his, 'childList', {\n addedNodes: nodes,\n removedNodes: createOne
ElementNodeList(oldChildWrapper),\n nextSibling: nextNode,\n previ
ousSibling: previousNode\n });\n\n nodeWasRemoved(oldChildWrapper);\n
nodesWereAdded(nodes, this);\n\n return oldChildWrapper;\n },\n\n
/**\n * Called after a node was inserted. Subclasses override this to inva
lidate\n * the renderer as needed.\n * @private\n */\n nodeIsInse
rted_: function() {\n for (var child = this.firstChild; child; child = chil
d.nextSibling) {\n child.nodeIsInserted_();\n }\n },\n\n hasCh
ildNodes: function() {\n return this.firstChild !== null;\n },\n\n /*
* @type {Node} */\n get parentNode() {\n // If the parentNode has not be
en overridden, use the original parentNode.\n return this.parentNode_ !== u
ndefined ?\n this.parentNode_ : wrap(this.impl.parentNode);\n },\n\n
/** @type {Node} */\n get firstChild() {\n return this.firstChild_ !
== undefined ?\n this.firstChild_ : wrap(this.impl.firstChild);\n },
\n\n /** @type {Node} */\n get lastChild() {\n return this.lastChild_
!== undefined ?\n this.lastChild_ : wrap(this.impl.lastChild);\n },
\n\n /** @type {Node} */\n get nextSibling() {\n return this.nextSibl
ing_ !== undefined ?\n this.nextSibling_ : wrap(this.impl.nextSibling);
\n },\n\n /** @type {Node} */\n get previousSibling() {\n return t
his.previousSibling_ !== undefined ?\n this.previousSibling_ : wrap(thi
s.impl.previousSibling);\n },\n\n get parentElement() {\n var p = thi
s.parentNode;\n while (p && p.nodeType !== Node.ELEMENT_NODE) {\n p
= p.parentNode;\n }\n return p;\n },\n\n get textContent() {\n
// TODO(arv): This should fallback to this.impl.textContent if there\n
// are no shadow trees below or above the context node.\n var s = '';\n
for (var child = this.firstChild; child; child = child.nextSibling) {\n
if (child.nodeType != Node.COMMENT_NODE) {\n s += child.textContent;\n
}\n }\n return s;\n },\n set textContent(textContent) {\
n var removedNodes = snapshotNodeList(this.childNodes);\n\n if (this.i
nvalidateShadowRenderer()) {\n removeAllChildNodes(this);\n if (te
xtContent !== '') {\n var textNode = this.impl.ownerDocument.createText
Node(textContent);\n this.appendChild(textNode);\n }\n } el
se {\n clearChildNodes(this);\n this.impl.textContent = textConten
t;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n
enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,\n
removedNodes: removedNodes\n });\n\n nodesWereRemoved(removedNodes);\
n nodesWereAdded(addedNodes, this);\n },\n\n get childNodes() {\n
var wrapperList = new NodeList();\n var i = 0;\n for (var child = th
is.firstChild; child; child = child.nextSibling) {\n wrapperList[i++] = c
hild;\n }\n wrapperList.length = i;\n return wrapperList;\n },
\n\n cloneNode: function(deep) {\n return cloneNode(this, deep);\n },
\n\n contains: function(child) {\n return contains(this, wrapIfNeeded(ch
ild));\n },\n\n compareDocumentPosition: function(otherNode) {\n // T
his only wraps, it therefore only operates on the composed DOM and not\n //
the logical DOM.\n return originalCompareDocumentPosition.call(this.impl,\
n unwrapIfNeeded(otherNode));\n
},\n\n normalize: function() {\n var nodes = snapshotNodeList(this.c
hildNodes);\n var remNodes = [];\n var s = '';\n var modNode;\n\n
for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n
if (n.nodeType === Node.TEXT_NODE) {\n if (!modNode && !n.data.length
)\n this.removeNode(n);\n else if (!modNode)\n mo
dNode = n;\n else {\n s += n.data;\n remNodes.pus
h(n);\n }\n } else {\n if (modNode && remNodes.length)
{\n modNode.data += s;\n cleanUpNodes(remNodes);\n
}\n remNodes = [];\n s = '';\n modNode = null;\n
if (n.childNodes.length)\n n.normalize();\n }\n }\
n\n // handle case where >1 text nodes are the last children\n if (mod
Node && remNodes.length) {\n modNode.data += s;\n cleanupNodes(rem
Nodes);\n }\n }\n });\n\n defineWrapGetter(Node, 'ownerDocument');\n\n
// We use a DocumentFragment as a base and then delete the properties of\n //
DocumentFragment.prototype from the wrapper Node. Since delete makes\n // obje
cts slow in some JS engines we recreate the prototype object.\n registerWrapper
(OriginalNode, Node, document.createDocumentFragment());\n delete Node.prototyp
e.querySelector;\n delete Node.prototype.querySelectorAll;\n Node.prototype =
mixin(Object.create(EventTarget.prototype), Node.prototype);\n\n scope.cloneNod
e = cloneNode;\n scope.nodeWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = n
odeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;\n scope.nodesWereRemov
ed = nodesWereRemoved;\n scope.snapshotNodeList = snapshotNodeList;\n scope.wr
appers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The P
olymer Authors. All rights reserved.\n// Use of this source code is governed by
a BSD-style\n// license that can be found in the LICENSE file.\n\n(function(scop
e) {\n 'use strict';\n\n function findOne(node, selector) {\n var m, el = n
ode.firstElementChild;\n while (el) {\n if (el.matches(selector))\n
return el;\n m = findOne(el, selector);\n if (m)\n return m;
\n el = el.nextElementSibling;\n }\n return null;\n }\n\n function
findAll(node, selector, results) {\n var el = node.firstElementChild;\n wh
ile (el) {\n if (el.matches(selector))\n results[results.length++] =
el;\n findAll(el, selector, results);\n el = el.nextElementSibling;\n
}\n return results;\n }\n\n // find and findAll will only match Simple
Selectors,\n // Structural Pseudo Classes are not guarenteed to be correct\n /
/ http://www.w3.org/TR/css3-selectors/#simple-selectors\n\n var SelectorsInterf
ace = {\n querySelector: function(selector) {\n return findOne(this, sel
ector);\n },\n querySelectorAll: function(selector) {\n return findAl
l(this, selector, new NodeList())\n }\n };\n\n var GetElementsByInterface =
{\n getElementsByTagName: function(tagName) {\n // TODO(arv): Check tag
Name?\n return this.querySelectorAll(tagName);\n },\n getElementsByCl
assName: function(className) {\n // TODO(arv): Check className?\n retu
rn this.querySelectorAll('.' + className);\n },\n getElementsByTagNameNS:
function(ns, tagName) {\n if (ns === '*')\n return this.getElementsB
yTagName(tagName);\n\n // TODO(arv): Check tagName?\n var result = new
NodeList;\n var els = this.getElementsByTagName(tagName);\n for (var
i = 0, j = 0; i < els.length; i++) {\n if (els[i].namespaceURI === ns)\n
result[j++] = els[i];\n }\n result.length = j;\n return
result;\n }\n };\n\n scope.GetElementsByInterface = GetElementsByInterface;
\n scope.SelectorsInterface = SelectorsInterface;\n\n})(window.ShadowDOMPolyfil
l);\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of t
his source code is goverened by a BSD-style\n// license that can be found in the
LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var NodeList = scope.
wrappers.NodeList;\n\n function forwardElement(node) {\n while (node && node
.nodeType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n r
eturn node;\n }\n\n function backwardsElement(node) {\n while (node && node
.nodeType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n
return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild
() {\n return forwardElement(this.firstChild);\n },\n\n get lastEleme
ntChild() {\n return backwardsElement(this.lastChild);\n },\n\n get c
hildElementCount() {\n var count = 0;\n for (var child = this.firstEle
mentChild;\n child;\n child = child.nextElementSibling) {\n
count++;\n }\n return count;\n },\n\n get children() {\n
var wrapperList = new NodeList();\n var i = 0;\n for (var child =
this.firstElementChild;\n child;\n child = child.nextElemen
tSibling) {\n wrapperList[i++] = child;\n }\n wrapperList.lengt
h = i;\n return wrapperList;\n },\n\n remove: function() {\n var
p = this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n
\n var ChildNodeInterface = {\n get nextElementSibling() {\n return for
wardElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n
return backwardsElement(this.previousSibling);\n }\n };\n\n scope.Child
NodeInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInt
erface;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Autho
rs. All rights reserved.\n// Use of this source code is goverened by a BSD-style
\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n 'us
e strict';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var Node =
scope.wrappers.Node;\n var enqueueMutation = scope.enqueueMutation;\n var mix
in = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n var Origi
nalCharacterData = window.CharacterData;\n\n function CharacterData(node) {\n
Node.call(this, node);\n }\n CharacterData.prototype = Object.create(Node.pr
ototype);\n mixin(CharacterData.prototype, {\n get textContent() {\n re
turn this.data;\n },\n set textContent(value) {\n this.data = value;\
n },\n get data() {\n return this.impl.data;\n },\n set data(va
lue) {\n var oldValue = this.impl.data;\n enqueueMutation(this, 'chara
cterData', {\n oldValue: oldValue\n });\n this.impl.data = valu
e;\n }\n });\n\n mixin(CharacterData.prototype, ChildNodeInterface);\n\n r
egisterWrapper(OriginalCharacterData, CharacterData,\n document
.createTextNode(''));\n\n scope.wrappers.CharacterData = CharacterData;\n})(win
dow.ShadowDOMPolyfill);\n","// Copyright 2014 The Polymer Authors. All rights re
served.\n// Use of this source code is goverened by a BSD-style\n// license that
can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n v
ar CharacterData = scope.wrappers.CharacterData;\n var enqueueMutation = scope.
enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper = scope.regi
sterWrapper;\n\n function toUInt32(x) {\n return x >>> 0;\n }\n\n var Orig
inalText = window.Text;\n\n function Text(node) {\n CharacterData.call(this,
node);\n }\n Text.prototype = Object.create(CharacterData.prototype);\n mixi
n(Text.prototype, {\n splitText: function(offset) {\n offset = toUInt32(
offset);\n var s = this.data;\n if (offset > s.length)\n throw
new Error('IndexSizeError');\n var head = s.slice(0, offset);\n var ta
il = s.slice(offset);\n this.data = head;\n var newTextNode = this.own
erDocument.createTextNode(tail);\n if (this.parentNode)\n this.paren
tNode.insertBefore(newTextNode, this.nextSibling);\n return newTextNode;\n
}\n });\n\n registerWrapper(OriginalText, Text, document.createTextNode('')
);\n\n scope.wrappers.Text = Text;\n})(window.ShadowDOMPolyfill);\n","// Copyri
ght 2013 The Polymer Authors. All rights reserved.\n// Use of this source code i
s goverened by a BSD-style\n// license that can be found in the LICENSE file.\n\
n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface = scope.ChildNo
deInterface;\n var GetElementsByInterface = scope.GetElementsByInterface;\n va
r Node = scope.wrappers.Node;\n var ParentNodeInterface = scope.ParentNodeInter
face;\n var SelectorsInterface = scope.SelectorsInterface;\n var addWrapNodeLi
stMethod = scope.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMu
tation;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerW
rapper = scope.registerWrapper;\n var wrappers = scope.wrappers;\n\n var Origi
nalElement = window.Element;\n\n var matchesNames = [\n 'matches', // needs
to come first.\n 'mozMatchesSelector',\n 'msMatchesSelector',\n 'webki
tMatchesSelector',\n ].filter(function(name) {\n return OriginalElement.prot
otype[name];\n });\n\n var matchesName = matchesNames[0];\n\n var originalMat
ches = OriginalElement.prototype[matchesName];\n\n function invalidateRendererB
asedOnAttribute(element, name) {\n // Only invalidate if parent node is a sha
dow host.\n var p = element.parentNode;\n if (!p || !p.shadowRoot)\n
return;\n\n var renderer = scope.getRendererForHost(p);\n if (renderer.dep
endsOnAttribute(name))\n renderer.invalidate();\n }\n\n function enqueAtt
ributeChange(element, name, oldValue) {\n // This is not fully spec compliant
. We should use localName (which might\n // have a different case than name)
and the namespace (which requires us\n // to get the Attr object).\n enque
ueMutation(element, 'attributes', {\n name: name,\n namespace: null,\n
oldValue: oldValue\n });\n }\n\n function Element(node) {\n Node.c
all(this, node);\n }\n Element.prototype = Object.create(Node.prototype);\n m
ixin(Element.prototype, {\n createShadowRoot: function() {\n var newShad
owRoot = new wrappers.ShadowRoot(this);\n this.impl.polymerShadowRoot_ = ne
wShadowRoot;\n\n var renderer = scope.getRendererForHost(this);\n rend
erer.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoot(
) {\n return this.impl.polymerShadowRoot_ || null;\n },\n\n setAttrib
ute: function(name, value) {\n var oldValue = this.impl.getAttribute(name);
\n this.impl.setAttribute(name, value);\n enqueAttributeChange(this, n
ame, oldValue);\n invalidateRendererBasedOnAttribute(this, name);\n },\n
\n removeAttribute: function(name) {\n var oldValue = this.impl.getAttri
bute(name);\n this.impl.removeAttribute(name);\n enqueAttributeChange(
this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name);\n
},\n\n matches: function(selector) {\n return originalMatches.call(th
is.impl, selector);\n }\n });\n\n matchesNames.forEach(function(name) {\n
if (name !== 'matches') {\n Element.prototype[name] = function(selector)
{\n return this.matches(selector);\n };\n }\n });\n\n if (Origi
nalElement.prototype.webkitCreateShadowRoot) {\n Element.prototype.webkitCrea
teShadowRoot =\n Element.prototype.createShadowRoot;\n }\n\n /**\n *
Useful for generating the accessor pair for a property that reflects an\n * at
tribute.\n */\n function setterDirtiesAttribute(prototype, propertyName, opt_
attrName) {\n var attrName = opt_attrName || propertyName;\n Object.define
Property(prototype, propertyName, {\n get: function() {\n return thi
s.impl[propertyName];\n },\n set: function(v) {\n this.impl[pro
pertyName] = v;\n invalidateRendererBasedOnAttribute(this, attrName);\n
},\n configurable: true,\n enumerable: true\n });\n }\n\n set
terDirtiesAttribute(Element.prototype, 'id');\n setterDirtiesAttribute(Element.
prototype, 'className', 'class');\n\n mixin(Element.prototype, ChildNodeInterfa
ce);\n mixin(Element.prototype, GetElementsByInterface);\n mixin(Element.proto
type, ParentNodeInterface);\n mixin(Element.prototype, SelectorsInterface);\n\n
registerWrapper(OriginalElement, Element,\n document.createEl
ementNS(null, 'x'));\n\n // TODO(arv): Export setterDirtiesAttribute and apply
it to more bindings\n // that reflect attributes.\n scope.matchesNames = match
esNames;\n scope.wrappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n",
"// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this sou
rce code is goverened by a BSD-style\n// license that can be found in the LICENS
E file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrappers
.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation = sco
pe.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scope.no
desWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var registerW
rapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNodeList
;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scop
e.wrappers;\n\n ///////////////////////////////////////////////////////////////
//////////////\n // innerHTML and outerHTML\n\n // http://www.whatwg.org/specs
/web-apps/current-work/multipage/the-end.html#escapingString\n var escapeAttrRe
gExp = /[&\\u00A0\"]/g;\n var escapeDataRegExp = /[&\\u00A0<>]/g;\n\n function
escapeReplace(c) {\n switch (c) {\n case '&':\n return '&';\
n case '<':\n return '<';\n case '>':\n return '>'
;\n case '\"':\n return '"'\n case '\\u00A0':\n ret
urn ' ';\n }\n }\n\n function escapeAttr(s) {\n return s.replace(es
capeAttrRegExp, escapeReplace);\n }\n\n function escapeData(s) {\n return s
.replace(escapeDataRegExp, escapeReplace);\n }\n\n function makeSet(arr) {\n
var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i]] =
true;\n }\n return set;\n }\n\n // http://www.whatwg.org/specs/web-apps
/current-work/#void-elements\n var voidElements = makeSet([\n 'area',\n '
base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img
',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'so
urce',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([\n
'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'nofra
mes',\n 'plaintext',\n 'noscript'\n ]);\n\n function getOuterHTML(node,
parentNode) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n
var tagName = node.tagName.toLowerCase();\n var s = '<' + tagName;\n
var attrs = node.attributes;\n for (var i = 0, attr; attr = attrs[
i]; i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\
"';\n }\n s += '>';\n if (voidElements[tagName])\n
return s;\n\n return s + getInnerHTML(node) + '</' + tagName + '>';\n\n
case Node.TEXT_NODE:\n var data = node.data;\n if (parentNode
&& plaintextParents[parentNode.localName])\n return data;\n ret
urn escapeData(data);\n\n case Node.COMMENT_NODE:\n return '<!--' +
node.data + '-->';\n\n default:\n console.error(node);\n thro
w new Error('not implemented');\n }\n }\n\n function getInnerHTML(node) {\n
if (node instanceof wrappers.HTMLTemplateElement)\n node = node.content
;\n\n var s = '';\n for (var child = node.firstChild; child; child = child
.nextSibling) {\n s += getOuterHTML(child, node);\n }\n return s;\n
}\n\n function setInnerHTML(node, value, opt_tagName) {\n var tagName = opt_
tagName || 'div';\n node.textContent = '';\n var tempElement = unwrap(node
.ownerDocument.createElement(tagName));\n tempElement.innerHTML = value;\n
var firstChild;\n while (firstChild = tempElement.firstChild) {\n node.
appendChild(wrap(firstChild));\n }\n }\n\n // IE11 does not have MSIE in th
e user agent string.\n var oldIe = /MSIE/.test(navigator.userAgent);\n\n var O
riginalHTMLElement = window.HTMLElement;\n var OriginalHTMLTemplateElement = wi
ndow.HTMLTemplateElement;\n\n function HTMLElement(node) {\n Element.call(th
is, node);\n }\n HTMLElement.prototype = Object.create(Element.prototype);\n
mixin(HTMLElement.prototype, {\n get innerHTML() {\n return getInnerHTML
(this);\n },\n set innerHTML(value) {\n // IE9 does not handle set in
nerHTML correctly on plaintextParents. It\n // creates element children. Fo
r example\n //\n // scriptElement.innerHTML = '<a>test</a>'\n /
/\n // Creates a single HTMLAnchorElement child.\n if (oldIe && plaint
extParents[this.localName]) {\n this.textContent = value;\n return
;\n }\n\n var removedNodes = snapshotNodeList(this.childNodes);\n\n
if (this.invalidateShadowRenderer()) {\n if (this instanceof wrappers.
HTMLTemplateElement)\n setInnerHTML(this.content, value);\n else
\n setInnerHTML(this, value, this.tagName);\n\n // If we have a no
n native template element we need to handle this\n // manually since settin
g impl.innerHTML would add the html as direct\n // children and not be move
d over to the content fragment.\n } else if (!OriginalHTMLTemplateElement &
&\n this instanceof wrappers.HTMLTemplateElement) {\n set
InnerHTML(this.content, value);\n } else {\n this.impl.innerHTML = v
alue;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n
enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,\n
removedNodes: removedNodes\n });\n\n nodesWereRemoved(removedNodes
);\n nodesWereAdded(addedNodes, this);\n },\n\n get outerHTML() {\n
return getOuterHTML(this, this.parentNode);\n },\n set outerHTML(value
) {\n var p = this.parentNode;\n if (p) {\n p.invalidateShadowR
enderer();\n var df = frag(p, value);\n p.replaceChild(df, this);\
n }\n },\n\n insertAdjacentHTML: function(position, text) {\n va
r contextElement, refNode;\n switch (String(position).toLowerCase()) {\n
case 'beforebegin':\n contextElement = this.parentNode;\n
refNode = this;\n break;\n case 'afterend':\n contextE
lement = this.parentNode;\n refNode = this.nextSibling;\n brea
k;\n case 'afterbegin':\n contextElement = this;\n refN
ode = this.firstChild;\n break;\n case 'beforeend':\n c
ontextElement = this;\n refNode = null;\n break;\n defa
ult:\n return;\n }\n\n var df = frag(contextElement, text);\n
contextElement.insertBefore(df, refNode);\n }\n });\n\n function frag
(contextElement, html) {\n // TODO(arv): This does not work with SVG and othe
r non HTML elements.\n var p = unwrap(contextElement.cloneNode(false));\n
p.innerHTML = html;\n var df = unwrap(document.createDocumentFragment());\n
var c;\n while (c = p.firstChild) {\n df.appendChild(c);\n }\n r
eturn wrap(df);\n }\n\n function getter(name) {\n return function() {\n
scope.renderAllPending();\n return this.impl[name];\n };\n }\n\n fun
ction getterRequiresRendering(name) {\n defineGetter(HTMLElement, name, gette
r(name));\n }\n\n [\n 'clientHeight',\n 'clientLeft',\n 'clientTop',\
n 'clientWidth',\n 'offsetHeight',\n 'offsetLeft',\n 'offsetTop',\n
'offsetWidth',\n 'scrollHeight',\n 'scrollWidth',\n ].forEach(getterRe
quiresRendering);\n\n function getterAndSetterRequiresRendering(name) {\n Ob
ject.defineProperty(HTMLElement.prototype, name, {\n get: getter(name),\n
set: function(v) {\n scope.renderAllPending();\n this.impl[nam
e] = v;\n },\n configurable: true,\n enumerable: true\n });\n
}\n\n [\n 'scrollLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequi
resRendering);\n\n function methodRequiresRendering(name) {\n Object.defineP
roperty(HTMLElement.prototype, name, {\n value: function() {\n scope
.renderAllPending();\n return this.impl[name].apply(this.impl, arguments)
;\n },\n configurable: true,\n enumerable: true\n });\n }\n\n
[\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n
].forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use
a subclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElem
ent,\n document.createElement('b'));\n\n scope.wrappers.HTMLEl
ement = HTMLElement;\n\n // TODO: Find a better way to share these two with Wra
pperShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = se
tInnerHTML\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Auth
ors. All rights reserved.\n// Use of this source code is goverened by a BSD-styl
e\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n 'u
se strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var mixin = sc
ope.mixin;\n var registerWrapper = scope.registerWrapper;\n var wrap = scope.w
rap;\n\n var OriginalHTMLCanvasElement = window.HTMLCanvasElement;\n\n functio
n HTMLCanvasElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCanva
sElement.prototype = Object.create(HTMLElement.prototype);\n\n mixin(HTMLCanvas
Element.prototype, {\n getContext: function() {\n var context = this.imp
l.getContext.apply(this.impl, arguments);\n return context && wrap(context)
;\n }\n });\n\n registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElemen
t,\n document.createElement('canvas'));\n\n scope.wrappers.HTM
LCanvasElement = HTMLCanvasElement;\n})(window.ShadowDOMPolyfill);\n","// Copyri
ght 2013 The Polymer Authors. All rights reserved.\n// Use of this source code i
s goverened by a BSD-style\n// license that can be found in the LICENSE file.\n\
n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLE
lement;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapp
er;\n\n var OriginalHTMLContentElement = window.HTMLContentElement;\n\n functi
on HTMLContentElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLCon
tentElement.prototype = Object.create(HTMLElement.prototype);\n mixin(HTMLConte
ntElement.prototype, {\n get select() {\n return this.getAttribute('sele
ct');\n },\n set select(value) {\n this.setAttribute('select', value)
;\n },\n\n setAttribute: function(n, v) {\n HTMLElement.prototype.set
Attribute.call(this, n, v);\n if (String(n).toLowerCase() === 'select')\n
this.invalidateShadowRenderer(true);\n }\n\n // getDistributedNodes
is added in ShadowRenderer\n\n // TODO: attribute boolean resetStyleInheritan
ce;\n });\n\n if (OriginalHTMLContentElement)\n registerWrapper(OriginalHTM
LContentElement, HTMLContentElement);\n\n scope.wrappers.HTMLContentElement = H
TMLContentElement;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Poly
mer Authors. All rights reserved.\n// Use of this source code is goverened by a
BSD-style\n// license that can be found in the LICENSE file.\n\n(function(scope)
{\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var re
gisterWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var rewr
ap = scope.rewrap;\n\n var OriginalHTMLImageElement = window.HTMLImageElement;\
n\n function HTMLImageElement(node) {\n HTMLElement.call(this, node);\n }\n
HTMLImageElement.prototype = Object.create(HTMLElement.prototype);\n\n regist
erWrapper(OriginalHTMLImageElement, HTMLImageElement,\n documen
t.createElement('img'));\n\n function Image(width, height) {\n if (!(this in
stanceof Image)) {\n throw new TypeError(\n 'DOM object constructo
r cannot be called as a function.');\n }\n\n var node = unwrap(document.cr
eateElement('img'));\n HTMLElement.call(this, node);\n rewrap(node, this);
\n\n if (width !== undefined)\n node.width = width;\n if (height !==
undefined)\n node.height = height;\n }\n\n Image.prototype = HTMLImageEle
ment.prototype;\n\n scope.wrappers.HTMLImageElement = HTMLImageElement;\n scop
e.wrappers.Image = Image;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 T
he Polymer Authors. All rights reserved.\n// Use of this source code is goverene
d by a BSD-style\n// license that can be found in the LICENSE file.\n\n(function
(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n
var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n v
ar OriginalHTMLShadowElement = window.HTMLShadowElement;\n\n function HTMLShado
wElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLShadowElement.pr
ototype = Object.create(HTMLElement.prototype);\n mixin(HTMLShadowElement.proto
type, {\n // TODO: attribute boolean resetStyleInheritance;\n });\n\n if (O
riginalHTMLShadowElement)\n registerWrapper(OriginalHTMLShadowElement, HTMLSh
adowElement);\n\n scope.wrappers.HTMLShadowElement = HTMLShadowElement;\n})(win
dow.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rights re
served.\n// Use of this source code is goverened by a BSD-style\n// license that
can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n v
ar HTMLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var
registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wr
ap = scope.wrap;\n\n var contentTable = new WeakMap();\n var templateContentsO
wnerTable = new WeakMap();\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/
tip/spec/templates/index.html#dfn-template-contents-owner\n function getTemplat
eContentsOwner(doc) {\n if (!doc.defaultView)\n return doc;\n var d =
templateContentsOwnerTable.get(doc);\n if (!d) {\n // TODO(arv): This s
hould either be a Document or HTMLDocument depending\n // on doc.\n d
= doc.implementation.createHTMLDocument('');\n while (d.lastChild) {\n
d.removeChild(d.lastChild);\n }\n templateContentsOwnerTable.set(do
c, d);\n }\n return d;\n }\n\n function extractContent(templateElement)
{\n // templateElement is not a wrapper here.\n var doc = getTemplateConte
ntsOwner(templateElement.ownerDocument);\n var df = unwrap(doc.createDocument
Fragment());\n var child;\n while (child = templateElement.firstChild) {\n
df.appendChild(child);\n }\n return df;\n }\n\n var OriginalHTMLTe
mplateElement = window.HTMLTemplateElement;\n\n function HTMLTemplateElement(no
de) {\n HTMLElement.call(this, node);\n if (!OriginalHTMLTemplateElement)
{\n var content = extractContent(node);\n contentTable.set(this, wrap(
content));\n }\n }\n HTMLTemplateElement.prototype = Object.create(HTMLElem
ent.prototype);\n\n mixin(HTMLTemplateElement.prototype, {\n get content() {
\n if (OriginalHTMLTemplateElement)\n return wrap(this.impl.content)
;\n return contentTable.get(this);\n },\n\n // TODO(arv): cloneNode n
eeds to clone content.\n\n });\n\n if (OriginalHTMLTemplateElement)\n regis
terWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);\n\n scope.wrapper
s.HTMLTemplateElement = HTMLTemplateElement;\n})(window.ShadowDOMPolyfill);\n","
// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this sour
ce code is goverened by a BSD-style\n// license that can be found in the LICENSE
file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrapp
ers.HTMLElement;\n var registerWrapper = scope.registerWrapper;\n\n var Origin
alHTMLMediaElement = window.HTMLMediaElement;\n\n function HTMLMediaElement(nod
e) {\n HTMLElement.call(this, node);\n }\n HTMLMediaElement.prototype = Obj
ect.create(HTMLElement.prototype);\n\n registerWrapper(OriginalHTMLMediaElement
, HTMLMediaElement,\n document.createElement('audio'));\n\n sc
ope.wrappers.HTMLMediaElement = HTMLMediaElement;\n})(window.ShadowDOMPolyfill);
\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLMediaElement = s
cope.wrappers.HTMLMediaElement;\n var registerWrapper = scope.registerWrapper;\
n var unwrap = scope.unwrap;\n var rewrap = scope.rewrap;\n\n var OriginalHTM
LAudioElement = window.HTMLAudioElement;\n\n function HTMLAudioElement(node) {\
n HTMLMediaElement.call(this, node);\n }\n HTMLAudioElement.prototype = Obj
ect.create(HTMLMediaElement.prototype);\n\n registerWrapper(OriginalHTMLAudioEl
ement, HTMLAudioElement,\n document.createElement('audio'));\n\
n function Audio(src) {\n if (!(this instanceof Audio)) {\n throw new T
ypeError(\n 'DOM object constructor cannot be called as a function.');\
n }\n\n var node = unwrap(document.createElement('audio'));\n HTMLMedia
Element.call(this, node);\n rewrap(node, this);\n\n node.setAttribute('pre
load', 'auto');\n if (src !== undefined)\n node.setAttribute('src', src)
;\n }\n\n Audio.prototype = HTMLAudioElement.prototype;\n\n scope.wrappers.HT
MLAudioElement = HTMLAudioElement;\n scope.wrappers.Audio = Audio;\n})(window.S
hadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rights reserve
d.\n// Use of this source code is goverened by a BSD-style\n// license that can
be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HT
MLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var regis
terWrapper = scope.registerWrapper;\n var rewrap = scope.rewrap;\n var unwrap
= scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLOptionElement = w
indow.HTMLOptionElement;\n\n function trimText(s) {\n return s.replace(/\\s+
/g, ' ').trim();\n }\n\n function HTMLOptionElement(node) {\n HTMLElement.c
all(this, node);\n }\n HTMLOptionElement.prototype = Object.create(HTMLElement
.prototype);\n mixin(HTMLOptionElement.prototype, {\n get text() {\n re
turn trimText(this.textContent);\n },\n set text(value) {\n this.text
Content = trimText(String(value));\n },\n get form() {\n return wrap(
unwrap(this).form);\n }\n });\n\n registerWrapper(OriginalHTMLOptionElement
, HTMLOptionElement,\n document.createElement('option'));\n\n
function Option(text, value, defaultSelected, selected) {\n if (!(this instan
ceof Option)) {\n throw new TypeError(\n 'DOM object constructor c
annot be called as a function.');\n }\n\n var node = unwrap(document.creat
eElement('option'));\n HTMLElement.call(this, node);\n rewrap(node, this);
\n\n if (text !== undefined)\n node.text = text;\n if (value !== unde
fined)\n node.setAttribute('value', value);\n if (defaultSelected === tr
ue)\n node.setAttribute('selected', '');\n node.selected = selected ===
true;\n }\n\n Option.prototype = HTMLOptionElement.prototype;\n\n scope.wrapp
ers.HTMLOptionElement = HTMLOptionElement;\n scope.wrappers.Option = Option;\n}
)(window.ShadowDOMPolyfill);\n","// Copyright 2014 The Polymer Authors. All righ
ts reserved.\n// Use of this source code is goverened by a BSD-style\n// license
that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n
\n var HTMLElement = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n
var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n v
ar wrap = scope.wrap;\n\n var OriginalHTMLSelectElement = window.HTMLSelectElem
ent;\n\n function HTMLSelectElement(node) {\n HTMLElement.call(this, node);\
n }\n HTMLSelectElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLSelectElement.prototype, {\n add: function(element, before) {\n
if (typeof before === 'object') // also includes null\n before = unwrap
(before);\n unwrap(this).add(unwrap(element), before);\n },\n\n remov
e: function(indexOrNode) {\n // Spec only allows index but implementations
allow index or node.\n // remove() is also allowed which is same as remove(
undefined)\n if (indexOrNode === undefined) {\n HTMLElement.prototyp
e.remove.call(this);\n return;\n }\n\n if (typeof indexOrNode =
== 'object')\n indexOrNode = unwrap(indexOrNode);\n\n unwrap(this).r
emove(indexOrNode);\n },\n\n get form() {\n return wrap(unwrap(this).
form);\n }\n });\n\n registerWrapper(OriginalHTMLSelectElement, HTMLSelectE
lement,\n document.createElement('select'));\n\n scope.wrapper
s.HTMLSelectElement = HTMLSelectElement;\n})(window.ShadowDOMPolyfill);\n","/*\n
* Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of this sour
ce code is goverened by a BSD-style\n * license that can be found in the LICENSE
file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var
wrapHTMLCollection = scope.wrapHTMLCollection;\n\n var OriginalHTMLTableElemen
t = window.HTMLTableElement;\n\n function HTMLTableElement(node) {\n HTMLEle
ment.call(this, node);\n }\n HTMLTableElement.prototype = Object.create(HTMLEl
ement.prototype);\n mixin(HTMLTableElement.prototype, {\n get caption() {\n
return wrap(unwrap(this).caption);\n },\n createCaption: function() {
\n return wrap(unwrap(this).createCaption());\n },\n\n get tHead() {\
n return wrap(unwrap(this).tHead);\n },\n createTHead: function() {\n
return wrap(unwrap(this).createTHead());\n },\n\n createTFoot: funct
ion() {\n return wrap(unwrap(this).createTFoot());\n },\n get tFoot()
{\n return wrap(unwrap(this).tFoot);\n },\n\n get tBodies() {\n
return wrapHTMLCollection(unwrap(this).tBodies);\n },\n createTBody: func
tion() {\n return wrap(unwrap(this).createTBody());\n },\n\n get rows
() {\n return wrapHTMLCollection(unwrap(this).rows);\n },\n insertRow
: function(index) {\n return wrap(unwrap(this).insertRow(index));\n }\n
});\n\n registerWrapper(OriginalHTMLTableElement, HTMLTableElement,\n
document.createElement('table'));\n\n scope.wrappers.HTMLTableElement
= HTMLTableElement;\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyright 2014 The
Polymer Authors. All rights reserved.\n * Use of this source code is goverened
by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(funct
ion(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;
\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n
var wrapHTMLCollection = scope.wrapHTMLCollection;\n var unwrap = scope.unwrap;
\n var wrap = scope.wrap;\n\n var OriginalHTMLTableSectionElement = window.HTM
LTableSectionElement;\n\n function HTMLTableSectionElement(node) {\n HTMLEle
ment.call(this, node);\n }\n HTMLTableSectionElement.prototype = Object.create
(HTMLElement.prototype);\n mixin(HTMLTableSectionElement.prototype, {\n get
rows() {\n return wrapHTMLCollection(unwrap(this).rows);\n },\n inser
tRow: function(index) {\n return wrap(unwrap(this).insertRow(index));\n
}\n });\n\n registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionE
lement,\n document.createElement('thead'));\n\n scope.wrappers
.HTMLTableSectionElement = HTMLTableSectionElement;\n})(window.ShadowDOMPolyfill
);\n","/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use o
f this source code is goverened by a BSD-style\n * license that can be found in
the LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLEleme
nt = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrap
per = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollectio
n;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTML
TableRowElement = window.HTMLTableRowElement;\n\n function HTMLTableRowElement(
node) {\n HTMLElement.call(this, node);\n }\n HTMLTableRowElement.prototype
= Object.create(HTMLElement.prototype);\n mixin(HTMLTableRowElement.prototype,
{\n get cells() {\n return wrapHTMLCollection(unwrap(this).cells);\n
},\n\n insertCell: function(index) {\n return wrap(unwrap(this).insertC
ell(index));\n }\n });\n\n registerWrapper(OriginalHTMLTableRowElement, HTM
LTableRowElement,\n document.createElement('tr'));\n\n scope.w
rappers.HTMLTableRowElement = HTMLTableRowElement;\n})(window.ShadowDOMPolyfill)
;\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of thi
s source code is goverened by a BSD-style\n// license that can be found in the L
ICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLContentElement
= scope.wrappers.HTMLContentElement;\n var HTMLElement = scope.wrappers.HTMLEle
ment;\n var HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var HTMLTe
mplateElement = scope.wrappers.HTMLTemplateElement;\n var mixin = scope.mixin;\
n var registerWrapper = scope.registerWrapper;\n\n var OriginalHTMLUnknownElem
ent = window.HTMLUnknownElement;\n\n function HTMLUnknownElement(node) {\n s
witch (node.localName) {\n case 'content':\n return new HTMLContentE
lement(node);\n case 'shadow':\n return new HTMLShadowElement(node);
\n case 'template':\n return new HTMLTemplateElement(node);\n }\n
HTMLElement.call(this, node);\n }\n HTMLUnknownElement.prototype = Object.
create(HTMLElement.prototype);\n registerWrapper(OriginalHTMLUnknownElement, HT
MLUnknownElement);\n scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;\n}
)(window.ShadowDOMPolyfill);\n","// Copyright 2014 The Polymer Authors. All righ
ts reserved.\n// Use of this source code is goverened by a BSD-style\n// license
that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n
\n var registerObject = scope.registerObject;\n\n var SVG_NS = 'http://www.w3.
org/2000/svg';\n var svgTitleElement = document.createElementNS(SVG_NS, 'title'
);\n var SVGTitleElement = registerObject(svgTitleElement);\n var SVGElement =
Object.getPrototypeOf(SVGTitleElement.prototype).constructor;\n\n scope.wrappe
rs.SVGElement = SVGElement;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2014
The Polymer Authors. All rights reserved.\n// Use of this source code is govere
ned by a BSD-style\n// license that can be found in the LICENSE file.\n\n(functi
on(scope) {\n 'use strict';\n\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n\n var OriginalSVGUseElement = window.SVGUseElement;\n\n // IE uses SVGEle
ment as parent interface, SVG2 (Blink & Gecko) uses\n // SVGGraphicsElement. Us
e the <g> element to get the right prototype.\n\n var SVG_NS = 'http://www.w3.o
rg/2000/svg';\n var gWrapper = wrap(document.createElementNS(SVG_NS, 'g'));\n
var useElement = document.createElementNS(SVG_NS, 'use');\n var SVGGElement = g
Wrapper.constructor;\n var parentInterfacePrototype = Object.getPrototypeOf(SVG
GElement.prototype);\n var parentInterface = parentInterfacePrototype.construct
or;\n\n function SVGUseElement(impl) {\n parentInterface.call(this, impl);\n
}\n\n SVGUseElement.prototype = Object.create(parentInterfacePrototype);\n\n
// Firefox does not expose instanceRoot.\n if ('instanceRoot' in useElement) {
\n mixin(SVGUseElement.prototype, {\n get instanceRoot() {\n retu
rn wrap(unwrap(this).instanceRoot);\n },\n get animatedInstanceRoot()
{\n return wrap(unwrap(this).animatedInstanceRoot);\n },\n });\n
}\n\n registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement);\n\n
scope.wrappers.SVGUseElement = SVGUseElement;\n})(window.ShadowDOMPolyfill);\n",
"// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this sou
rce code is goverened by a BSD-style\n// license that can be found in the LICENS
E file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.wrap
pers.EventTarget;\n var mixin = scope.mixin;\n var registerWrapper = scope.reg
isterWrapper;\n var wrap = scope.wrap;\n\n var OriginalSVGElementInstance = wi
ndow.SVGElementInstance;\n if (!OriginalSVGElementInstance)\n return;\n\n f
unction SVGElementInstance(impl) {\n EventTarget.call(this, impl);\n }\n\n
SVGElementInstance.prototype = Object.create(EventTarget.prototype);\n mixin(SV
GElementInstance.prototype, {\n /** @type {SVGElement} */\n get correspond
ingElement() {\n return wrap(this.impl.correspondingElement);\n },\n\n
/** @type {SVGUseElement} */\n get correspondingUseElement() {\n retur
n wrap(this.impl.correspondingUseElement);\n },\n\n /** @type {SVGElementI
nstance} */\n get parentNode() {\n return wrap(this.impl.parentNode);\n
},\n\n /** @type {SVGElementInstanceList} */\n get childNodes() {\n
throw new Error('Not implemented');\n },\n\n /** @type {SVGElementInstan
ce} */\n get firstChild() {\n return wrap(this.impl.firstChild);\n },
\n\n /** @type {SVGElementInstance} */\n get lastChild() {\n return w
rap(this.impl.lastChild);\n },\n\n /** @type {SVGElementInstance} */\n
get previousSibling() {\n return wrap(this.impl.previousSibling);\n },\n
\n /** @type {SVGElementInstance} */\n get nextSibling() {\n return w
rap(this.impl.nextSibling);\n }\n });\n\n registerWrapper(OriginalSVGElemen
tInstance, SVGElementInstance);\n\n scope.wrappers.SVGElementInstance = SVGElem
entInstance;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Au
thors. All rights reserved.\n// Use of this source code is goverened by a BSD-st
yle\n// license that can be found in the LICENSE file.\n\n(function(scope) {\n
'use strict';\n\n var mixin = scope.mixin;\n var registerWrapper = scope.regis
terWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIf
Needed;\n var wrap = scope.wrap;\n\n var OriginalCanvasRenderingContext2D = wi
ndow.CanvasRenderingContext2D;\n\n function CanvasRenderingContext2D(impl) {\n
this.impl = impl;\n }\n\n mixin(CanvasRenderingContext2D.prototype, {\n
get canvas() {\n return wrap(this.impl.canvas);\n },\n\n drawImage: f
unction() {\n arguments[0] = unwrapIfNeeded(arguments[0]);\n this.impl
.drawImage.apply(this.impl, arguments);\n },\n\n createPattern: function()
{\n arguments[0] = unwrap(arguments[0]);\n return this.impl.createPat
tern.apply(this.impl, arguments);\n }\n });\n\n registerWrapper(OriginalCan
vasRenderingContext2D, CanvasRenderingContext2D,\n document.cre
ateElement('canvas').getContext('2d'));\n\n scope.wrappers.CanvasRenderingConte
xt2D = CanvasRenderingContext2D;\n})(window.ShadowDOMPolyfill);\n","// Copyright
2013 The Polymer Authors. All rights reserved.\n// Use of this source code is g
overened by a BSD-style\n// license that can be found in the LICENSE file.\n\n(f
unction(scope) {\n 'use strict';\n\n var mixin = scope.mixin;\n var registerW
rapper = scope.registerWrapper;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n
var wrap = scope.wrap;\n\n var OriginalWebGLRenderingContext = window.WebGLRen
deringContext;\n\n // IE10 does not have WebGL.\n if (!OriginalWebGLRenderingC
ontext)\n return;\n\n function WebGLRenderingContext(impl) {\n this.impl
= impl;\n }\n\n mixin(WebGLRenderingContext.prototype, {\n get canvas() {\n
return wrap(this.impl.canvas);\n },\n\n texImage2D: function() {\n
arguments[5] = unwrapIfNeeded(arguments[5]);\n this.impl.texImage2D.app
ly(this.impl, arguments);\n },\n\n texSubImage2D: function() {\n argu
ments[6] = unwrapIfNeeded(arguments[6]);\n this.impl.texSubImage2D.apply(th
is.impl, arguments);\n }\n });\n\n // Blink/WebKit has broken DOM bindings.
Usually we would create an instance\n // of the object and pass it into regist
erWrapper as a \"blueprint\" but\n // creating WebGL contexts is expensive and
might fail so we use a dummy\n // object with dummy instance properties for the
se broken browsers.\n var instanceProperties = /WebKit/.test(navigator.userAgen
t) ?\n {drawingBufferHeight: null, drawingBufferWidth: null} : {};\n\n reg
isterWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext,\n instan
ceProperties);\n\n scope.wrappers.WebGLRenderingContext = WebGLRenderingContext
;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All
rights reserved.\n// Use of this source code is goverened by a BSD-style\n// lic
ense that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict
';\n\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwra
p;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n
var OriginalRange = window.Range;\n\n function Range(impl) {\n this.impl = i
mpl;\n }\n Range.prototype = {\n get startContainer() {\n return wrap(
this.impl.startContainer);\n },\n get endContainer() {\n return wrap(
this.impl.endContainer);\n },\n get commonAncestorContainer() {\n ret
urn wrap(this.impl.commonAncestorContainer);\n },\n setStart: function(ref
Node,offset) {\n this.impl.setStart(unwrapIfNeeded(refNode), offset);\n
},\n setEnd: function(refNode,offset) {\n this.impl.setEnd(unwrapIfNeede
d(refNode), offset);\n },\n setStartBefore: function(refNode) {\n thi
s.impl.setStartBefore(unwrapIfNeeded(refNode));\n },\n setStartAfter: func
tion(refNode) {\n this.impl.setStartAfter(unwrapIfNeeded(refNode));\n },
\n setEndBefore: function(refNode) {\n this.impl.setEndBefore(unwrapIfNe
eded(refNode));\n },\n setEndAfter: function(refNode) {\n this.impl.s
etEndAfter(unwrapIfNeeded(refNode));\n },\n selectNode: function(refNode)
{\n this.impl.selectNode(unwrapIfNeeded(refNode));\n },\n selectNodeC
ontents: function(refNode) {\n this.impl.selectNodeContents(unwrapIfNeeded(
refNode));\n },\n compareBoundaryPoints: function(how, sourceRange) {\n
return this.impl.compareBoundaryPoints(how, unwrap(sourceRange));\n },\n
extractContents: function() {\n return wrap(this.impl.extractContents());
\n },\n cloneContents: function() {\n return wrap(this.impl.cloneCont
ents());\n },\n insertNode: function(node) {\n this.impl.insertNode(u
nwrapIfNeeded(node));\n },\n surroundContents: function(newParent) {\n
this.impl.surroundContents(unwrapIfNeeded(newParent));\n },\n cloneRange
: function() {\n return wrap(this.impl.cloneRange());\n },\n isPointI
nRange: function(node, offset) {\n return this.impl.isPointInRange(unwrapIf
Needed(node), offset);\n },\n comparePoint: function(node, offset) {\n
return this.impl.comparePoint(unwrapIfNeeded(node), offset);\n },\n inte
rsectsNode: function(node) {\n return this.impl.intersectsNode(unwrapIfNeed
ed(node));\n },\n toString: function() {\n return this.impl.toString(
);\n }\n };\n\n // IE9 does not have createContextualFragment.\n if (Origi
nalRange.prototype.createContextualFragment) {\n Range.prototype.createContex
tualFragment = function(html) {\n return wrap(this.impl.createContextualFra
gment(html));\n };\n }\n\n registerWrapper(window.Range, Range, document.cr
eateRange());\n\n scope.wrappers.Range = Range;\n\n})(window.ShadowDOMPolyfill)
;\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of thi
s source code is goverened by a BSD-style\n// license that can be found in the L
ICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterf
ace = scope.GetElementsByInterface;\n var ParentNodeInterface = scope.ParentNod
eInterface;\n var SelectorsInterface = scope.SelectorsInterface;\n var mixin =
scope.mixin;\n var registerObject = scope.registerObject;\n\n var DocumentFra
gment = registerObject(document.createDocumentFragment());\n mixin(DocumentFrag
ment.prototype, ParentNodeInterface);\n mixin(DocumentFragment.prototype, Selec
torsInterface);\n mixin(DocumentFragment.prototype, GetElementsByInterface);\n\
n var Comment = registerObject(document.createComment(''));\n\n scope.wrappers
.Comment = Comment;\n scope.wrappers.DocumentFragment = DocumentFragment;\n\n})
(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All right
s reserved.\n// Use of this source code is goverened by a BSD-style\n// license
that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\
n var DocumentFragment = scope.wrappers.DocumentFragment;\n var TreeScope = sc
ope.TreeScope;\n var elementFromPoint = scope.elementFromPoint;\n var getInner
HTML = scope.getInnerHTML;\n var getTreeScope = scope.getTreeScope;\n var mixi
n = scope.mixin;\n var rewrap = scope.rewrap;\n var setInnerHTML = scope.setIn
nerHTML;\n var unwrap = scope.unwrap;\n\n var shadowHostTable = new WeakMap();
\n var nextOlderShadowTreeTable = new WeakMap();\n\n var spaceCharRe = /[ \\t\
\n\\r\\f]/;\n\n function ShadowRoot(hostWrapper) {\n var node = unwrap(hostW
rapper.impl.ownerDocument.createDocumentFragment());\n DocumentFragment.call(
this, node);\n\n // createDocumentFragment associates the node with a wrapper
\n // DocumentFragment instance. Override that.\n rewrap(node, this);\n\n
this.treeScope_ = new TreeScope(this, getTreeScope(hostWrapper));\n\n var
oldShadowRoot = hostWrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this,
oldShadowRoot);\n\n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoo
t.prototype = Object.create(DocumentFragment.prototype);\n mixin(ShadowRoot.pro
totype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n
set innerHTML(value) {\n setInnerHTML(this, value);\n this.invalidateS
hadowRenderer();\n },\n\n get olderShadowRoot() {\n return nextOlderS
hadowTreeTable.get(this) || null;\n },\n\n get host() {\n return shad
owHostTable.get(this) || null;\n },\n\n invalidateShadowRenderer: function
() {\n return shadowHostTable.get(this).invalidateShadowRenderer();\n },
\n\n elementFromPoint: function(x, y) {\n return elementFromPoint(this,
this.ownerDocument, x, y);\n },\n\n getElementById: function(id) {\n
if (spaceCharRe.test(id))\n return null;\n return this.querySelector
('[id=\"' + id + '\"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRo
ot;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors.
All rights reserved.\n// Use of this source code is governed by a BSD-style\n//
license that can be found in the LICENSE file.\n\n(function(scope) {\n 'use str
ict';\n\n var Element = scope.wrappers.Element;\n var HTMLContentElement = sco
pe.wrappers.HTMLContentElement;\n var HTMLShadowElement = scope.wrappers.HTMLSh
adowElement;\n var Node = scope.wrappers.Node;\n var ShadowRoot = scope.wrappe
rs.ShadowRoot;\n var assert = scope.assert;\n var getTreeScope = scope.getTree
Scope;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var unwrap = s
cope.unwrap;\n var wrap = scope.wrap;\n\n /**\n * Updates the fields of a wr
apper to a snapshot of the logical DOM as needed.\n * Up means parentNode\n
* Sideways means previous and next sibling.\n * @param {!Node} wrapper\n */\
n function updateWrapperUpAndSideways(wrapper) {\n wrapper.previousSibling_
= wrapper.previousSibling;\n wrapper.nextSibling_ = wrapper.nextSibling;\n
wrapper.parentNode_ = wrapper.parentNode;\n }\n\n /**\n * Updates the field
s of a wrapper to a snapshot of the logical DOM as needed.\n * Down means firs
t and last child\n * @param {!Node} wrapper\n */\n function updateWrapperDo
wn(wrapper) {\n wrapper.firstChild_ = wrapper.firstChild;\n wrapper.lastCh
ild_ = wrapper.lastChild;\n }\n\n function updateAllChildNodes(parentNodeWrapp
er) {\n assert(parentNodeWrapper instanceof Node);\n for (var childWrapper
= parentNodeWrapper.firstChild;\n childWrapper;\n childWrapper
= childWrapper.nextSibling) {\n updateWrapperUpAndSideways(childWrapper);\n
}\n updateWrapperDown(parentNodeWrapper);\n }\n\n function insertBefore
(parentNodeWrapper, newChildWrapper, refChildWrapper) {\n var parentNode = un
wrap(parentNodeWrapper);\n var newChild = unwrap(newChildWrapper);\n var r
efChild = refChildWrapper ? unwrap(refChildWrapper) : null;\n\n remove(newChi
ldWrapper);\n updateWrapperUpAndSideways(newChildWrapper);\n\n if (!refChi
ldWrapper) {\n parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild;\
n if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild)\n
parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;\n\n var las
tChildWrapper = wrap(parentNode.lastChild);\n if (lastChildWrapper)\n
lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;\n } else {\n
if (parentNodeWrapper.firstChild === refChildWrapper)\n parentNodeWr
apper.firstChild_ = refChildWrapper;\n\n refChildWrapper.previousSibling_ =
refChildWrapper.previousSibling;\n }\n\n parentNode.insertBefore(newChild
, refChild);\n }\n\n function remove(nodeWrapper) {\n var node = unwrap(nod
eWrapper)\n var parentNode = node.parentNode;\n if (!parentNode)\n re
turn;\n\n var parentNodeWrapper = wrap(parentNode);\n updateWrapperUpAndSi
deways(nodeWrapper);\n\n if (nodeWrapper.previousSibling)\n nodeWrapper.
previousSibling.nextSibling_ = nodeWrapper;\n if (nodeWrapper.nextSibling)\n
nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;\n\n if (parentNo
deWrapper.lastChild === nodeWrapper)\n parentNodeWrapper.lastChild_ = nodeW
rapper;\n if (parentNodeWrapper.firstChild === nodeWrapper)\n parentNode
Wrapper.firstChild_ = nodeWrapper;\n\n parentNode.removeChild(node);\n }\n\n
var distributedChildNodesTable = new WeakMap();\n var eventParentsTable = new
WeakMap();\n var insertionParentTable = new WeakMap();\n var rendererForHostT
able = new WeakMap();\n\n function distributeChildToInsertionPoint(child, inser
tionPoint) {\n getDistributedChildNodes(insertionPoint).push(child);\n ass
ignToInsertionPoint(child, insertionPoint);\n\n var eventParents = eventParen
tsTable.get(child);\n if (!eventParents)\n eventParentsTable.set(child,
eventParents = []);\n eventParents.push(insertionPoint);\n }\n\n function r
esetDistributedChildNodes(insertionPoint) {\n distributedChildNodesTable.set(
insertionPoint, []);\n }\n\n function getDistributedChildNodes(insertionPoint)
{\n var rv = distributedChildNodesTable.get(insertionPoint);\n if (!rv)\n
distributedChildNodesTable.set(insertionPoint, rv = []);\n return rv;\n
}\n\n function getChildNodesSnapshot(node) {\n var result = [], i = 0;\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n r
esult[i++] = child;\n }\n return result;\n }\n\n /**\n * Visits all no
des in the tree that fulfils the |predicate|. If the |visitor|\n * function re
turns |false| the traversal is aborted.\n * @param {!Node} tree\n * @param {
function(!Node) : boolean} predicate\n * @param {function(!Node) : *} visitor\
n */\n function visit(tree, predicate, visitor) {\n // This operates on lo
gical DOM.\n for (var node = tree.firstChild; node; node = node.nextSibling)
{\n if (predicate(node)) {\n if (visitor(node) === false)\n
return;\n } else {\n visit(node, predicate, visitor);\n }\n
}\n }\n\n // Matching Insertion Points\n // http://dvcs.w3.org/hg/webcompone
nts/raw-file/tip/spec/shadow/index.html#matching-insertion-points\n\n // TODO(a
rv): Verify this... I don't remember why I picked this regexp.\n var selectorMa
tchRegExp = /^[*.:#[a-zA-Z_|]/;\n\n var allowedPseudoRegExp = new RegExp('^:('
+ [\n 'link',\n 'visited',\n 'target',\n 'enabled',\n 'disabled',
\n 'checked',\n 'indeterminate',\n 'nth-child',\n 'nth-last-child',\
n 'nth-of-type',\n 'nth-last-of-type',\n 'first-child',\n 'last-chil
d',\n 'first-of-type',\n 'last-of-type',\n 'only-of-type',\n ].join('|
') + ')');\n\n\n /**\n * @param {Element} node\n * @oaram {Element} point T
he insertion point element.\n * @return {boolean} Whether the node matches the
insertion point.\n */\n function matchesCriteria(node, point) {\n var sel
ect = point.getAttribute('select');\n if (!select)\n return true;\n\n
// Here we know the select attribute is a non empty string.\n select = selec
t.trim();\n if (!select)\n return true;\n\n if (!(node instanceof Ele
ment))\n return false;\n\n // The native matches function in IE9 does no
t correctly work with elements\n // that are not in the document.\n // TOD
O(arv): Implement matching in JS.\n // https://github.com/Polymer/ShadowDOM/i
ssues/361\n if (select === '*' || select === node.localName)\n return tr
ue;\n\n // TODO(arv): This does not seem right. Need to check for a simple se
lector.\n if (!selectorMatchRegExp.test(select))\n return false;\n\n
// TODO(arv): This no longer matches the spec.\n if (select[0] === ':' && !al
lowedPseudoRegExp.test(select))\n return false;\n\n try {\n return
node.matches(select);\n } catch (ex) {\n // Invalid selector.\n ret
urn false;\n }\n }\n\n var request = oneOf(window, [\n 'requestAnimation
Frame',\n 'mozRequestAnimationFrame',\n 'webkitRequestAnimationFrame',\n
'setTimeout'\n ]);\n\n var pendingDirtyRenderers = [];\n var renderTimer;\n
\n function renderAllPending() {\n // TODO(arv): Order these in document ord
er. That way we do not have to\n // render something twice.\n for (var i =
0; i < pendingDirtyRenderers.length; i++) {\n var renderer = pendingDirtyR
enderers[i];\n var parentRenderer = renderer.parentRenderer;\n if (par
entRenderer && parentRenderer.dirty)\n continue;\n renderer.render()
;\n }\n\n pendingDirtyRenderers = [];\n }\n\n function handleRequestAnim
ationFrame() {\n renderTimer = null;\n renderAllPending();\n }\n\n /**\n
* Returns existing shadow renderer for a host or creates it if it is needed.\
n * @params {!Element} host\n * @return {!ShadowRenderer}\n */\n function
getRendererForHost(host) {\n var renderer = rendererForHostTable.get(host);\
n if (!renderer) {\n renderer = new ShadowRenderer(host);\n rendere
rForHostTable.set(host, renderer);\n }\n return renderer;\n }\n\n functi
on getShadowRootAncestor(node) {\n var root = getTreeScope(node).root;\n i
f (root instanceof ShadowRoot)\n return root;\n return null;\n }\n\n f
unction getRendererForShadowRoot(shadowRoot) {\n return getRendererForHost(sh
adowRoot.host);\n }\n\n var spliceDiff = new ArraySplice();\n spliceDiff.equa
ls = function(renderNode, rawNode) {\n return unwrap(renderNode.node) === raw
Node;\n };\n\n /**\n * RenderNode is used as an in memory \"render tree\". W
hen we render the\n * composed tree we create a tree of RenderNodes, then we d
iff this against\n * the real DOM tree and make minimal changes as needed.\n
*/\n function RenderNode(node) {\n this.skip = false;\n this.node = node
;\n this.childNodes = [];\n }\n\n RenderNode.prototype = {\n append: fun
ction(node) {\n var rv = new RenderNode(node);\n this.childNodes.push(
rv);\n return rv;\n },\n\n sync: function(opt_added) {\n if (thi
s.skip)\n return;\n\n var nodeWrapper = this.node;\n // plain a
rray of RenderNodes\n var newChildren = this.childNodes;\n // plain ar
ray of real nodes.\n var oldChildren = getChildNodesSnapshot(unwrap(nodeWra
pper));\n var added = opt_added || new WeakMap();\n\n var splices = sp
liceDiff.calculateSplices(newChildren, oldChildren);\n\n var newIndex = 0,
oldIndex = 0;\n var lastIndex = 0;\n for (var i = 0; i < splices.lengt
h; i++) {\n var splice = splices[i];\n for (; lastIndex < splice.i
ndex; lastIndex++) {\n oldIndex++;\n newChildren[newIndex++].s
ync(added);\n }\n\n var removedCount = splice.removed.length;\n
for (var j = 0; j < removedCount; j++) {\n var wrapper = wrap(oldC
hildren[oldIndex++]);\n if (!added.get(wrapper))\n remove(wr
apper);\n }\n\n var addedCount = splice.addedCount;\n var r
efNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]);\n for (var
j = 0; j < addedCount; j++) {\n var newChildRenderNode = newChildren[n
ewIndex++];\n var newChildWrapper = newChildRenderNode.node;\n
insertBefore(nodeWrapper, newChildWrapper, refNode);\n\n // Keep track
of added so that we do not remove the node after it\n // has been adde
d.\n added.set(newChildWrapper, true);\n\n newChildRenderNode.
sync(added);\n }\n\n lastIndex += addedCount;\n }\n\n fo
r (var i = lastIndex; i < newChildren.length; i++) {\n newChildren[i].syn
c(added);\n }\n }\n };\n\n function ShadowRenderer(host) {\n this.h
ost = host;\n this.dirty = false;\n this.invalidateAttributes();\n this
.associateNode(host);\n }\n\n ShadowRenderer.prototype = {\n\n // http://dv
cs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#rendering-shadow-
trees\n render: function(opt_renderNode) {\n if (!this.dirty)\n r
eturn;\n\n this.invalidateAttributes();\n this.treeComposition();\n\n
var host = this.host;\n var shadowRoot = host.shadowRoot;\n\n thi
s.associateNode(host);\n var topMostRenderer = !renderNode;\n var rend
erNode = opt_renderNode || new RenderNode(host);\n\n for (var node = shadow
Root.firstChild; node; node = node.nextSibling) {\n this.renderNode(shado
wRoot, renderNode, node, false);\n }\n\n if (topMostRenderer)\n
renderNode.sync();\n\n this.dirty = false;\n },\n\n get parentRender
er() {\n return getTreeScope(this.host).renderer;\n },\n\n invalidate
: function() {\n if (!this.dirty) {\n this.dirty = true;\n pe
ndingDirtyRenderers.push(this);\n if (renderTimer)\n return;\n
renderTimer = window[request](handleRequestAnimationFrame, 0);\n }\n
},\n\n renderNode: function(shadowRoot, renderNode, node, isNested) {\n
if (isShadowHost(node)) {\n renderNode = renderNode.append(node);\n
var renderer = getRendererForHost(node);\n renderer.dirty = true; /
/ Need to rerender due to reprojection.\n renderer.render(renderNode);\n
} else if (isInsertionPoint(node)) {\n this.renderInsertionPoint(sha
dowRoot, renderNode, node, isNested);\n } else if (isShadowInsertionPoint(n
ode)) {\n this.renderShadowInsertionPoint(shadowRoot, renderNode, node);\
n } else {\n this.renderAsAnyDomTree(shadowRoot, renderNode, node, i
sNested);\n }\n },\n\n renderAsAnyDomTree: function(shadowRoot, rende
rNode, node, isNested) {\n renderNode = renderNode.append(node);\n\n i
f (isShadowHost(node)) {\n var renderer = getRendererForHost(node);\n
renderNode.skip = !renderer.dirty;\n renderer.render(renderNode);\n
} else {\n for (var child = node.firstChild; child; child = child.nex
tSibling) {\n this.renderNode(shadowRoot, renderNode, child, isNested);
\n }\n }\n },\n\n renderInsertionPoint: function(shadowRoot, r
enderNode, insertionPoint,\n isNested) {\n
var distributedChildNodes = getDistributedChildNodes(insertionPoint);\n i
f (distributedChildNodes.length) {\n this.associateNode(insertionPoint);\
n\n for (var i = 0; i < distributedChildNodes.length; i++) {\n v
ar child = distributedChildNodes[i];\n if (isInsertionPoint(child) && i
sNested)\n this.renderInsertionPoint(shadowRoot, renderNode, child, i
sNested);\n else\n this.renderAsAnyDomTree(shadowRoot, rende
rNode, child, isNested);\n }\n } else {\n this.renderFallback
Content(shadowRoot, renderNode, insertionPoint);\n }\n this.associateN
ode(insertionPoint.parentNode);\n },\n\n renderShadowInsertionPoint: funct
ion(shadowRoot, renderNode,\n shadowInse
rtionPoint) {\n var nextOlderTree = shadowRoot.olderShadowRoot;\n if (
nextOlderTree) {\n assignToInsertionPoint(nextOlderTree, shadowInsertionP
oint);\n this.associateNode(shadowInsertionPoint.parentNode);\n fo
r (var node = nextOlderTree.firstChild;\n node;\n node =
node.nextSibling) {\n this.renderNode(nextOlderTree, renderNode, node,
true);\n }\n } else {\n this.renderFallbackContent(shadowRoo
t, renderNode,\n shadowInsertionPoint);\n
}\n },\n\n renderFallbackContent: function(shadowRoot, renderNode, fallba
ckHost) {\n this.associateNode(fallbackHost);\n this.associateNode(fal
lbackHost.parentNode);\n for (var node = fallbackHost.firstChild; node; nod
e = node.nextSibling) {\n this.renderAsAnyDomTree(shadowRoot, renderNode,
node, false);\n }\n },\n\n /**\n * Invalidates the attributes us
ed to keep track of which attributes may\n * cause the renderer to be invali
dated.\n */\n invalidateAttributes: function() {\n this.attributes =
Object.create(null);\n },\n\n /**\n * Parses the selector and makes t
his renderer dependent on the attribute\n * being used in the selector.\n
* @param {string} selector\n */\n updateDependentAttributes: function(s
elector) {\n if (!selector)\n return;\n\n var attributes = this
.attributes;\n\n // .class\n if (/\\.\\w+/.test(selector))\n at
tributes['class'] = true;\n\n // #id\n if (/#\\w+/.test(selector))\n
attributes['id'] = true;\n\n selector.replace(/\\[\\s*([^\\s=\\|~\\]]
+)/g, function(_, name) {\n attributes[name] = true;\n });\n\n
// Pseudo selectors have been removed from the spec.\n },\n\n dependsOnAtt
ribute: function(name) {\n return this.attributes[name];\n },\n\n //
http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-dist
ribution-algorithm\n distribute: function(tree, pool) {\n var self = thi
s;\n\n visit(tree, isActiveInsertionPoint,\n function(insertionPoi
nt) {\n resetDistributedChildNodes(insertionPoint);\n self
.updateDependentAttributes(\n insertionPoint.getAttribute('select
'));\n\n for (var i = 0; i < pool.length; i++) { // 1.2\n
var node = pool[i]; // 1.2.1\n if (node === undefined) // remo
ved\n continue;\n if (matchesCriteria(node, insertio
nPoint)) { // 1.2.2\n distributeChildToInsertionPoint(node, inse
rtionPoint); // 1.2.2.1\n pool[i] = undefined; // 1.2.2.2\n
}\n }\n });\n },\n\n // http://dvcs.w3.org/h
g/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-tree-composition\n tr
eeComposition: function () {\n var shadowHost = this.host;\n var tree
= shadowHost.shadowRoot; // 1.\n var pool = []; // 2.\n\n for (var c
hild = shadowHost.firstChild;\n child;\n child = child.nextS
ibling) { // 3.\n if (isInsertionPoint(child)) { // 3.2.\n var
reprojected = getDistributedChildNodes(child); // 3.2.1.\n // if repr
ojected is undef... reset it?\n if (!reprojected || !reprojected.length
) // 3.2.2.\n reprojected = getChildNodesSnapshot(child);\n
pool.push.apply(pool, reprojected); // 3.2.3.\n } else {\n poo
l.push(child); // 3.3.\n }\n }\n\n var shadowInsertionPoint, po
int;\n while (tree) { // 4.\n // 4.1.\n shadowInsertionPoint
= undefined; // Reset every iteration.\n visit(tree, isActiveShadowInse
rtionPoint, function(point) {\n shadowInsertionPoint = point;\n
return false;\n });\n point = shadowInsertionPoint;\n\n t
his.distribute(tree, pool); // 4.2.\n if (point) { // 4.3.\n v
ar nextOlderTree = tree.olderShadowRoot; // 4.3.1.\n if (!nextOlderTre
e) {\n break; // 4.3.1.1.\n } else {\n tree = ne
xtOlderTree; // 4.3.2.2.\n assignToInsertionPoint(tree, point); //
4.3.2.2.\n continue; // 4.3.2.3.\n }\n } else {\n
break; // 4.4.\n }\n }\n },\n\n associateNode: functio
n(node) {\n node.impl.polymerShadowRenderer_ = this;\n }\n };\n\n func
tion isInsertionPoint(node) {\n // Should this include <shadow>?\n return
node instanceof HTMLContentElement;\n }\n\n function isActiveInsertionPoint(no
de) {\n // <content> inside another <content> or <shadow> is considered inact
ive.\n return node instanceof HTMLContentElement;\n }\n\n function isShadow
InsertionPoint(node) {\n return node instanceof HTMLShadowElement;\n }\n\n
function isActiveShadowInsertionPoint(node) {\n // <shadow> inside another <c
ontent> or <shadow> is considered inactive.\n return node instanceof HTMLShad
owElement;\n }\n\n function isShadowHost(shadowHost) {\n return shadowHost.
shadowRoot;\n }\n\n function getShadowTrees(host) {\n var trees = [];\n\n
for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {\n t
rees.push(tree);\n }\n return trees;\n }\n\n function assignToInsertionP
oint(tree, point) {\n insertionParentTable.set(tree, point);\n }\n\n // htt
p://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#rendering-s
hadow-trees\n function render(host) {\n new ShadowRenderer(host).render();\n
};\n\n // Need to rerender shadow host when:\n //\n // - a direct child to
the ShadowRoot is added or removed\n // - a direct child to the host is added o
r removed\n // - a new shadow root is created\n // - a direct child to a conte
nt/shadow element is added or removed\n // - a sibling to a content/shadow elem
ent is added or removed\n // - content[select] is changed\n // - an attribute
in a direct child to a host is modified\n\n /**\n * This gets called when a n
ode was added or removed to it.\n */\n Node.prototype.invalidateShadowRendere
r = function(force) {\n var renderer = this.impl.polymerShadowRenderer_;\n
if (renderer) {\n renderer.invalidate();\n return true;\n }\n\n
return false;\n };\n\n HTMLContentElement.prototype.getDistributedNodes = fun
ction() {\n // TODO(arv): We should only rerender the dirty ancestor renderer
s (from\n // the root and down).\n renderAllPending();\n return getDist
ributedChildNodes(this);\n };\n\n HTMLShadowElement.prototype.nodeIsInserted_
=\n HTMLContentElement.prototype.nodeIsInserted_ = function() {\n // Invalid
ate old renderer if any.\n this.invalidateShadowRenderer();\n\n var shadow
Root = getShadowRootAncestor(this);\n var renderer;\n if (shadowRoot)\n
renderer = getRendererForShadowRoot(shadowRoot);\n this.impl.polymerShadow
Renderer_ = renderer;\n if (renderer)\n renderer.invalidate();\n };\n\n
scope.eventParentsTable = eventParentsTable;\n scope.getRendererForHost = get
RendererForHost;\n scope.getShadowTrees = getShadowTrees;\n scope.insertionPar
entTable = insertionParentTable;\n scope.renderAllPending = renderAllPending;\n
\n // Exposed for testing\n scope.visual = {\n insertBefore: insertBefore,\
n remove: remove,\n };\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 201
3 The Polymer Authors. All rights reserved.\n// Use of this source code is gover
ened by a BSD-style\n// license that can be found in the LICENSE file.\n\n(funct
ion(scope) {\n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;
\n var assert = scope.assert;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n\n var elementsWithFormProperty = [\n 'HTMLButtonElement',\n 'HTMLFie
ldSetElement',\n 'HTMLInputElement',\n 'HTMLKeygenElement',\n 'HTMLLabe
lElement',\n 'HTMLLegendElement',\n 'HTMLObjectElement',\n // HTMLOptio
nElement is handled in HTMLOptionElement.js\n 'HTMLOutputElement',\n // HT
MLSelectElement is handled in HTMLSelectElement.js\n 'HTMLTextAreaElement',\n
];\n\n function createWrapperConstructor(name) {\n if (!window[name])\n
return;\n\n // Ensure we are not overriding an already existing constructo
r.\n assert(!scope.wrappers[name]);\n\n var GeneratedWrapper = function(no
de) {\n // At this point all of them extend HTMLElement.\n HTMLElement
.call(this, node);\n }\n GeneratedWrapper.prototype = Object.create(HTMLEl
ement.prototype);\n mixin(GeneratedWrapper.prototype, {\n get form() {\n
return wrap(unwrap(this).form);\n },\n });\n\n registerWrappe
r(window[name], GeneratedWrapper,\n document.createElement(name.slice(4,
-7)));\n scope.wrappers[name] = GeneratedWrapper;\n }\n\n elementsWithFormP
roperty.forEach(createWrapperConstructor);\n\n})(window.ShadowDOMPolyfill);\n","
// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this sour
ce code is goverened by a BSD-style\n// license that can be found in the LICENSE
file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = scope.r
egisterWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwr
apIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalSelection = window.Select
ion;\n\n function Selection(impl) {\n this.impl = impl;\n }\n Selection.pr
ototype = {\n get anchorNode() {\n return wrap(this.impl.anchorNode);\n
},\n get focusNode() {\n return wrap(this.impl.focusNode);\n },\n
addRange: function(range) {\n this.impl.addRange(unwrap(range));\n },
\n collapse: function(node, index) {\n this.impl.collapse(unwrapIfNeeded
(node), index);\n },\n containsNode: function(node, allowPartial) {\n
return this.impl.containsNode(unwrapIfNeeded(node), allowPartial);\n },\n
extend: function(node, offset) {\n this.impl.extend(unwrapIfNeeded(node),
offset);\n },\n getRangeAt: function(index) {\n return wrap(this.impl
.getRangeAt(index));\n },\n removeRange: function(range) {\n this.imp
l.removeRange(unwrap(range));\n },\n selectAllChildren: function(node) {\n
this.impl.selectAllChildren(unwrapIfNeeded(node));\n },\n toString:
function() {\n return this.impl.toString();\n }\n };\n\n // WebKit ext
ensions. Not implemented.\n // readonly attribute Node baseNode;\n // readonly
attribute long baseOffset;\n // readonly attribute Node extentNode;\n // read
only attribute long extentOffset;\n // [RaisesException] void setBaseAndExtent(
[Default=Undefined] optional Node baseNode,\n // [Default
=Undefined] optional long baseOffset,\n // [Default=Undef
ined] optional Node extentNode,\n // [Default=Undefined]
optional long extentOffset);\n // [RaisesException, ImplementedAs=collapse] voi
d setPosition([Default=Undefined] optional Node node,\n // [De
fault=Undefined] optional long offset);\n\n registerWrapper(window.Selection, S
election, window.getSelection());\n\n scope.wrappers.Selection = Selection;\n\n
})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rig
hts reserved.\n// Use of this source code is goverened by a BSD-style\n// licens
e that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\
n\n var GetElementsByInterface = scope.GetElementsByInterface;\n var Node = sc
ope.wrappers.Node;\n var ParentNodeInterface = scope.ParentNodeInterface;\n va
r Selection = scope.wrappers.Selection;\n var SelectorsInterface = scope.Select
orsInterface;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n var TreeScope =
scope.TreeScope;\n var cloneNode = scope.cloneNode;\n var defineWrapGetter = s
cope.defineWrapGetter;\n var elementFromPoint = scope.elementFromPoint;\n var
forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var matchesNames = s
cope.matchesNames;\n var mixin = scope.mixin;\n var registerWrapper = scope.re
gisterWrapper;\n var renderAllPending = scope.renderAllPending;\n var rewrap =
scope.rewrap;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wr
apEventTargetMethods = scope.wrapEventTargetMethods;\n var wrapNodeList = scope
.wrapNodeList;\n\n var implementationTable = new WeakMap();\n\n function Docum
ent(node) {\n Node.call(this, node);\n this.treeScope_ = new TreeScope(thi
s, null);\n }\n Document.prototype = Object.create(Node.prototype);\n\n defin
eWrapGetter(Document, 'documentElement');\n\n // Conceptually both body and hea
d can be in a shadow but suporting that seems\n // overkill at this point.\n d
efineWrapGetter(Document, 'body');\n defineWrapGetter(Document, 'head');\n\n /
/ document cannot be overridden so we override a bunch of its methods\n // dire
ctly on the instance.\n\n function wrapMethod(name) {\n var original = docum
ent[name];\n Document.prototype[name] = function() {\n return wrap(origi
nal.apply(this.impl, arguments));\n };\n }\n\n [\n 'createComment',\n
'createDocumentFragment',\n 'createElement',\n 'createElementNS',\n 'c
reateEvent',\n 'createEventNS',\n 'createRange',\n 'createTextNode',\n
'getElementById'\n ].forEach(wrapMethod);\n\n var originalAdoptNode = docum
ent.adoptNode;\n\n function adoptNodeNoRemove(node, doc) {\n originalAdoptNo
de.call(doc.impl, unwrap(node));\n adoptSubtree(node, doc);\n }\n\n functio
n adoptSubtree(node, doc) {\n if (node.shadowRoot)\n doc.adoptNode(node.
shadowRoot);\n if (node instanceof ShadowRoot)\n adoptOlderShadowRoots(n
ode, doc);\n for (var child = node.firstChild; child; child = child.nextSibli
ng) {\n adoptSubtree(child, doc);\n }\n }\n\n function adoptOlderShado
wRoots(shadowRoot, doc) {\n var oldShadowRoot = shadowRoot.olderShadowRoot;\n
if (oldShadowRoot)\n doc.adoptNode(oldShadowRoot);\n }\n\n var origin
alGetSelection = document.getSelection;\n\n mixin(Document.prototype, {\n ad
optNode: function(node) {\n if (node.parentNode)\n node.parentNode.r
emoveChild(node);\n adoptNodeNoRemove(node, this);\n return node;\n
},\n elementFromPoint: function(x, y) {\n return elementFromPoint(this,
this, x, y);\n },\n importNode: function(node, deep) {\n return clon
eNode(node, deep, this.impl);\n },\n getSelection: function() {\n ren
derAllPending();\n return new Selection(originalGetSelection.call(unwrap(th
is)));\n }\n });\n\n if (document.registerElement) {\n var originalRegis
terElement = document.registerElement;\n Document.prototype.registerElement =
function(tagName, object) {\n var prototype, extendsOption;\n if (obj
ect !== undefined) {\n prototype = object.prototype;\n extendsOpti
on = object.extends;\n }\n\n if (!prototype)\n prototype = Obje
ct.create(HTMLElement.prototype);\n\n\n // If we already used the object as
a prototype for another custom\n // element.\n if (scope.nativeProtot
ypeTable.get(prototype)) {\n // TODO(arv): DOMException\n throw ne
w Error('NotSupportedError');\n }\n\n // Find first object on the prot
otype chain that already have a native\n // prototype. Keep track of all th
e objects before that so we can create\n // a similar structure for the nat
ive case.\n var proto = Object.getPrototypeOf(prototype);\n var native
Prototype;\n var prototypes = [];\n while (proto) {\n nativePro
totype = scope.nativePrototypeTable.get(proto);\n if (nativePrototype)\n
break;\n prototypes.push(proto);\n proto = Object.getProt
otypeOf(proto);\n }\n\n if (!nativePrototype) {\n // TODO(arv):
DOMException\n throw new Error('NotSupportedError');\n }\n\n /
/ This works by creating a new prototype object that is empty, but has\n //
the native prototype as its proto. The original prototype object\n // pass
ed into register is used as the wrapper prototype.\n\n var newPrototype = O
bject.create(nativePrototype);\n for (var i = prototypes.length - 1; i >= 0
; i--) {\n newPrototype = Object.create(newPrototype);\n }\n\n
// Add callbacks if present.\n // Names are taken from:\n // https:/
/code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bi
ndings/v8/CustomElementConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\
n // and not from the spec since the spec is out of date.\n [\n
'createdCallback',\n 'attachedCallback',\n 'detachedCallback',\n
'attributeChangedCallback',\n ].forEach(function(name) {\n va
r f = prototype[name];\n if (!f)\n return;\n newPrototype
[name] = function() {\n // if this element has been wrapped prior to re
gistration,\n // the wrapper is stale; in this case rewrap\n i
f (!(wrap(this) instanceof CustomElementConstructor)) {\n rewrap(this
);\n }\n f.apply(wrap(this), arguments);\n };\n })
;\n\n var p = {prototype: newPrototype};\n if (extendsOption)\n
p.extends = extendsOption;\n\n function CustomElementConstructor(node) {\n
if (!node) {\n if (extendsOption) {\n return documen
t.createElement(extendsOption, tagName);\n } else {\n return
document.createElement(tagName);\n }\n }\n this.impl = n
ode;\n }\n CustomElementConstructor.prototype = prototype;\n Cust
omElementConstructor.prototype.constructor = CustomElementConstructor;\n\n
scope.constructorTable.set(newPrototype, CustomElementConstructor);\n scope
.nativePrototypeTable.set(prototype, newPrototype);\n\n // registration is
synchronous so do it last\n var nativeConstructor = originalRegisterElement
.call(unwrap(this),\n tagName, p);\n return CustomElementConstruct
or;\n };\n\n forwardMethodsToWrapper([\n window.HTMLDocument || windo
w.Document, // Gecko adds these to HTMLDocument\n ], [\n 'registerEleme
nt',\n ]);\n }\n\n // We also override some of the methods on document.body
and document.head\n // for convenience.\n forwardMethodsToWrapper([\n wind
ow.HTMLBodyElement,\n window.HTMLDocument || window.Document, // Gecko adds
these to HTMLDocument\n window.HTMLHeadElement,\n window.HTMLHtmlElement,\
n ], [\n 'appendChild',\n 'compareDocumentPosition',\n 'contains',\n
'getElementsByClassName',\n 'getElementsByTagName',\n 'getElementsByTagN
ameNS',\n 'insertBefore',\n 'querySelector',\n 'querySelectorAll',\n
'removeChild',\n 'replaceChild',\n ].concat(matchesNames));\n\n forwardMet
hodsToWrapper([\n window.HTMLDocument || window.Document, // Gecko adds thes
e to HTMLDocument\n ], [\n 'adoptNode',\n 'importNode',\n 'contains',\
n 'createComment',\n 'createDocumentFragment',\n 'createElement',\n
'createElementNS',\n 'createEvent',\n 'createEventNS',\n 'createRange',
\n 'createTextNode',\n 'elementFromPoint',\n 'getElementById',\n 'ge
tSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface);\n m
ixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype, Sele
ctorsInterface);\n\n mixin(Document.prototype, {\n get implementation() {\n
var implementation = implementationTable.get(this);\n if (implementati
on)\n return implementation;\n implementation =\n new DOMIm
plementation(unwrap(this).implementation);\n implementationTable.set(this,
implementation);\n return implementation;\n }\n });\n\n registerWrappe
r(window.Document, Document,\n document.implementation.createHTMLDocument('
'));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM onl
y has\n // one Document interface and IE implements the standard correctly.\n
if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Document);\n\
n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTMLDocumen
t || window.Document, // Gecko adds these to HTMLDocument\n window.HTMLHeadE
lement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = impl;\n
}\n\n function wrapImplMethod(constructor, name) {\n var original = documen
t.implementation[name];\n constructor.prototype[name] = function() {\n r
eturn wrap(original.apply(this.impl, arguments));\n };\n }\n\n function for
wardImplMethod(constructor, name) {\n var original = document.implementation[
name];\n constructor.prototype[name] = function() {\n return original.ap
ply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementation, '
createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocument');\n
wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplMethod(D
OMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplementation,
DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImplementation
,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createHTMLDocu
ment',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNodeNoRemov
e;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrappers.Do
cument = Document;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Po
lymer Authors. All rights reserved.\n// Use of this source code is goverened by
a BSD-style\n// license that can be found in the LICENSE file.\n\n(function(scop
e) {\n 'use strict';\n\n var EventTarget = scope.wrappers.EventTarget;\n var
Selection = scope.wrappers.Selection;\n var mixin = scope.mixin;\n var registe
rWrapper = scope.registerWrapper;\n var renderAllPending = scope.renderAllPendi
ng;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\
n var wrap = scope.wrap;\n\n var OriginalWindow = window.Window;\n var origin
alGetComputedStyle = window.getComputedStyle;\n var originalGetSelection = wind
ow.getSelection;\n\n function Window(impl) {\n EventTarget.call(this, impl);
\n }\n Window.prototype = Object.create(EventTarget.prototype);\n\n OriginalW
indow.prototype.getComputedStyle = function(el, pseudo) {\n return wrap(this
|| window).getComputedStyle(unwrapIfNeeded(el), pseudo);\n };\n\n OriginalWind
ow.prototype.getSelection = function() {\n return wrap(this || window).getSel
ection();\n };\n\n // Work around for https://bugzilla.mozilla.org/show_bug.cg
i?id=943065\n delete window.getComputedStyle;\n delete window.getSelection;\n\
n ['addEventListener', 'removeEventListener', 'dispatchEvent'].forEach(\n
function(name) {\n OriginalWindow.prototype[name] = function() {\n
var w = wrap(this || window);\n return w[name].apply(w, arguments);\
n };\n\n // Work around for https://bugzilla.mozilla.org/show_bug.
cgi?id=943065\n delete window[name];\n });\n\n mixin(Window.prototy
pe, {\n getComputedStyle: function(el, pseudo) {\n renderAllPending();\n
return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el),\n
pseudo);\n },\n getSelection: fun
ction() {\n renderAllPending();\n return new Selection(originalGetSele
ction.call(unwrap(this)));\n },\n });\n\n registerWrapper(OriginalWindow, W
indow);\n\n scope.wrappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n"
,"/**\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of th
is source code is goverened by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrap = scop
e.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single meth
od that\n // requires wrapping. Since it is only a method we do not need a real
wrapper,\n // we can just override the method.\n\n var OriginalDataTransfer =
window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragImag
e =\n OriginalDataTransfer.prototype.setDragImage;\n\n OriginalDataTransfe
r.prototype.setDragImage = function(image, x, y) {\n OriginalDataTransferSetD
ragImage.call(this, unwrap(image), x, y);\n };\n\n})(window.ShadowDOMPolyfill);
\n","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope
.isWrapperFor;\n\n // This is a list of the elements we currently override the
global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement',
\n // Do not create an applet element by default since it shows a warning in\
n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple
t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi
oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n
'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC
anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable
ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\
n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir'
: 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle
ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement',
\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': '
HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi
ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht
ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma
geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement'
,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li
': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement'
,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me
nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H
TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme
nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',
\n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par
am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro
gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',
\n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's
ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML
StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection
Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show
_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n
// 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n
'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n
'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML
TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement
',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag
Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst
ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu
rn;\n var element = document.createElement(tagName);\n var wrapperConstruc
tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct
or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge
tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s
cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n","/*\n * Copyright
2013 The Polymer Authors. All rights reserved.\n * Use of this source code is g
overned by a BSD-style\n * license that can be found in the LICENSE file.\n */\n
(function() {\n\n // convenient global\n window.wrap = ShadowDOMPolyfill.wrapI
fNeeded;\n window.unwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may
want to customize other types\n // TODO(sjmiles): 'button' is now supported by
ShadowDOMPolyfill, but\n // I've left this code here in case we need to tempora
rily patch another\n // type\n /*\n (function() {\n var elts = {HTMLButton
Element: 'button'};\n for (var c in elts) {\n window[c] = function() { t
hrow 'Patched Constructor'; };\n window[c].prototype = Object.getPrototypeO
f(\n document.createElement(elts[c]));\n }\n })();\n */\n\n // pa
tch in prefixed name\n Object.defineProperty(Element.prototype, 'webkitShadowRo
ot',\n Object.getOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n
\n var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elemen
t.prototype.createShadowRoot = function() {\n var root = originalCreateShadow
Root.call(this);\n CustomElements.watchShadow(this);\n return root;\n };\
n\n Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRo
ot;\n})();\n","/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n
* Use of this source code is governed by a BSD-style\n * license that can be fo
und in the LICENSE file.\n */\n\n/*\n This is a limited shim for ShadowDOM css
styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.
html#styles\n \n The intention here is to support only the styling features wh
ich can be \n relatively simply implemented. The goal is to allow users to avoi
d the \n most obvious pitfalls and do so without compromising performance signi
ficantly. \n For ShadowDOM styling that's not covered here, a set of best pract
ices\n can be provided that should allow users to accomplish more complex styli
ng.\n\n The following is a list of specific ShadowDOM styling features and a br
ief\n discussion of the approach used to shim.\n\n Shimmed features:\n\n * :h
ost, :host-context: ShadowDOM allows styling of the shadowRoot's host\n element
using the :host rule. To shim this feature, the :host styles are \n reformatte
d and prefixed with a given scope name and promoted to a \n document level styl
esheet.\n For example, given a scope name of .foo, a rule like this:\n \n :
host {\n background: red;\n }\n }\n \n becomes:\n \n .foo {
\n background: red;\n }\n \n * encapsultion: Styles defined within Sha
dowDOM, apply only to \n dom inside the ShadowDOM. Polymer uses one of two tech
niques to imlement\n this feature.\n \n By default, rules are prefixed with t
he host element tag name \n as a descendant selector. This ensures styling does
not leak out of the 'top'\n of the element's ShadowDOM. For example,\n\n div
{\n font-weight: bold;\n }\n \n becomes:\n\n x-foo div {\n font-
weight: bold;\n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS
.strictStyling is set to true then \n selectors are scoped by adding an attribu
te selector suffix to each\n simple selector that contains the host element tag
name. Each element \n in the element's ShadowDOM template is also given the sc
ope attribute. \n Thus, these rules match only elements that have the scope att
ribute.\n For example, given a scope name of x-foo, a rule like this:\n \n
div {\n font-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n
font-weight: bold;\n }\n\n Note that elements that are dynamically added
to a scope must have the scope\n selector added to them manually.\n\n * upper
/lower bound encapsulation: Styles which are defined outside a\n shadowRoot sho
uld not cross the ShadowDOM boundary and should not apply\n inside a shadowRoot
.\n\n This styling behavior is not emulated. Some possible ways to do this that
\n were rejected due to complexity and/or performance concerns include: (1) re
set\n every possible property for every possible selector for a given scope nam
e;\n (2) re-implement css in javascript.\n \n As an alternative, users should
make sure to use selectors\n specific to the scope in which they are working.\
n \n * ::distributed: This behavior is not emulated. It's often not necessary\
n to style the contents of a specific insertion point and instead, descendants\
n of the host element can be styled selectively. Users can also create an \n e
xtra node around an insertion point and style that node's contents\n via descen
dent selectors. For example, with a shadowRoot like this:\n \n <style>\n
::content(div) {\n background: red;\n }\n </style>\n <conten
t></content>\n \n could become:\n \n <style>\n / *@polyfill .content-
container div * / \n ::content(div) {\n background: red;\n }\n
</style>\n <div class=\"content-container\">\n <content></content>\n
</div>\n \n Note the use of @polyfill in the comment above a ShadowDOM spec
ific style\n declaration. This is a directive to the styling shim to use the se
lector \n in comments in lieu of the next selector when running under polyfill.
\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictStyling: false,\n regist
ry: {},\n // Shim styles for a given root associated with a name and extendsNam
e\n // 1. cache root styles by name\n // 2. optionally tag root nodes with sco
pe name\n // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule
*/\n // 4. shim :host and scoping\n shimStyling: function(root, name, extendsN
ame) {\n var scopeStyles = this.prepareRoot(root, name, extendsName);\n va
r typeExtension = this.isTypeExtension(extendsName);\n var scopeSelector = th
is.makeScopeSelector(name, typeExtension);\n // use caching to make working w
ith styles nodes easier and to facilitate\n // lookup of extendee\n var cs
sText = stylesToCssText(scopeStyles, true);\n cssText = this.scopeCssText(css
Text, scopeSelector);\n // cache shimmed css on root for user extensibility\n
if (root) {\n root.shimmedStyle = cssText;\n }\n // add style to
document\n this.addCssToDocument(cssText, name);\n },\n /*\n * Shim a styl
e element with the given selector. Returns cssText that can\n * be included in
the document via Platform.ShadowCSS.addCssToDocument(css).\n */\n shimStyle: f
unction(style, selector) {\n return this.shimCssText(style.textContent, selec
tor);\n },\n /*\n * Shim some cssText with the given selector. Returns cssTex
t that can\n * be included in the document via Platform.ShadowCSS.addCssToDocum
ent(css).\n */\n shimCssText: function(cssText, selector) {\n cssText = thi
s.insertDirectives(cssText);\n return this.scopeCssText(cssText, selector);\n
},\n makeScopeSelector: function(name, typeExtension) {\n if (name) {\n
return typeExtension ? '[is=' + name + ']' : name;\n }\n return '';\n
},\n isTypeExtension: function(extendsName) {\n return extendsName && extend
sName.indexOf('-') < 0;\n },\n prepareRoot: function(root, name, extendsName)
{\n var def = this.registerRoot(root, name, extendsName);\n this.replaceTe
xtInStyles(def.rootStyles, this.insertDirectives);\n // remove existing style
elements\n this.removeStyles(root, def.rootStyles);\n // apply strict att
r\n if (this.strictStyling) {\n this.applyScopeToContent(root, name);\n
}\n return def.scopeStyles;\n },\n removeStyles: function(root, styles)
{\n for (var i=0, l=styles.length, s; (i<l) && (s=styles[i]); i++) {\n s
.parentNode.removeChild(s);\n }\n },\n registerRoot: function(root, name, e
xtendsName) {\n var def = this.registry[name] = {\n root: root,\n n
ame: name,\n extendsName: extendsName\n }\n var styles = this.findSty
les(root);\n def.rootStyles = styles;\n def.scopeStyles = def.rootStyles;\
n var extendee = this.registry[def.extendsName];\n if (extendee) {\n
def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);\n }\n retu
rn def;\n },\n findStyles: function(root) {\n if (!root) {\n return []
;\n }\n var styles = root.querySelectorAll('style');\n return Array.pro
totype.filter.call(styles, function(s) {\n return !s.hasAttribute(NO_SHIM_A
TTRIBUTE);\n });\n },\n applyScopeToContent: function(root, name) {\n if
(root) {\n // add the name attribute to each node in root.\n Array.pr
ototype.forEach.call(root.querySelectorAll('*'),\n function(node) {\n
node.setAttribute(name, '');\n });\n // and template con
tents too\n Array.prototype.forEach.call(root.querySelectorAll('template'),
\n function(template) {\n this.applyScopeToContent(template.
content, name);\n },\n this);\n }\n },\n insertDirectives
: function(cssText) {\n cssText = this.insertPolyfillDirectivesInCssText(cssT
ext);\n return this.insertPolyfillRulesInCssText(cssText);\n },\n /*\n *
Process styles to convert native ShadowDOM rules that will trip\n * up the css
parser; we rely on decorating the stylesheet with inert rules.\n * \n * For
example, we convert this rule:\n * \n * polyfill-next-selector { content: '
:host menu-item'; }\n * ::content menu-item {\n * \n * to this:\n * \n
* scopeName menu-item {\n *\n **/\n insertPolyfillDirectivesInCssText: func
tion(cssText) {\n // TODO(sorvell): remove either content or comment\n css
Text = cssText.replace(cssCommentNextSelectorRe, function(match, p1) {\n //
remove end comment delimiter and add block start\n return p1.slice(0, -2)
+ '{';\n });\n return cssText.replace(cssContentNextSelectorRe, function(m
atch, p1) {\n return p1 + ' {';\n });\n },\n /*\n * Process styles t
o add rules which will only apply under the polyfill\n * \n * For example, w
e convert this rule:\n * \n * polyfill-rule {\n * content: ':host menu-i
tem';\n * ...\n * }\n * \n * to this:\n * \n * scopeName menu-item {
...}\n *\n **/\n insertPolyfillRulesInCssText: function(cssText) {\n // T
ODO(sorvell): remove either content or comment\n cssText = cssText.replace(cs
sCommentRuleRe, function(match, p1) {\n // remove end comment delimiter\n
return p1.slice(0, -1);\n });\n return cssText.replace(cssContentRuleR
e, function(match, p1, p2, p3) {\n var rule = match.replace(p1, '').replace
(p2, '');\n return p3 + rule;\n });\n },\n /* Ensure styles are scoped
. Pseudo-scoping takes a rule like:\n * \n * .foo {... } \n * \n * an
d converts this to\n * \n * scopeName .foo { ... }\n */\n scopeCssText:
function(cssText, scopeSelector) {\n var unscoped = this.extractUnscopedRules
FromCssText(cssText);\n cssText = this.insertPolyfillHostInCssText(cssText);\
n cssText = this.convertColonHost(cssText);\n cssText = this.convertColonH
ostContext(cssText);\n cssText = this.convertCombinators(cssText);\n if (s
copeSelector) {\n var self = this, cssText;\n withCssRules(cssText, fu
nction(rules) {\n cssText = self.scopeRules(rules, scopeSelector);\n
});\n\n }\n cssText = cssText + '\\n' + unscoped;\n return cssText.tri
m();\n },\n /*\n * Process styles to add rules which will only apply under t
he polyfill\n * and do not process via CSSOM. (CSSOM is destructive to rules o
n rare \n * occasions, e.g. -webkit-calc on Safari.)\n * For example, we con
vert this rule:\n * \n * (comment start) @polyfill-unscoped-rule menu-item {
\n * ... } (comment end)\n * \n * to this:\n * \n * menu-item {...}\n
*\n **/\n extractUnscopedRulesFromCssText: function(cssText) {\n // TODO
(sorvell): remove either content or comment\n var r = '', m;\n while (m =
cssCommentUnscopedRuleRe.exec(cssText)) {\n r += m[1].slice(0, -1) + '\\n\\
n';\n }\n while (m = cssContentUnscopedRuleRe.exec(cssText)) {\n r +=
m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\\n';\n }\n return r;\n
},\n /*\n * convert a rule like :host(.foo) > .bar { }\n *\n * to\n *\
n * scopeName.foo > .bar\n */\n convertColonHost: function(cssText) {\n r
eturn this.convertColonRule(cssText, cssColonHostRe,\n this.colonHostPart
Replacer);\n },\n /*\n * convert a rule like :host-context(.foo) > .bar { }\
n *\n * to\n *\n * scopeName.foo > .bar, .foo scopeName > .bar { }\n *
\n * and\n *\n * :host-context(.foo:host) .bar { ... }\n * \n * to\n
* \n * scopeName.foo .bar { ... }\n */\n convertColonHostContext: function
(cssText) {\n return this.convertColonRule(cssText, cssColonHostContextRe,\n
this.colonHostContextPartReplacer);\n },\n convertColonRule: function(c
ssText, regExp, partReplacer) {\n // p1 = :host, p2 = contents of (), p3 rest
of rule\n return cssText.replace(regExp, function(m, p1, p2, p3) {\n p1
= polyfillHostNoCombinator;\n if (p2) {\n var parts = p2.split(',')
, r = [];\n for (var i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++)
{\n p = p.trim();\n r.push(partReplacer(p1, p, p3));\n
}\n return r.join(',');\n } else {\n return p1 + p3;\n }
\n });\n },\n colonHostContextPartReplacer: function(host, part, suffix) {\
n if (part.match(polyfillHost)) {\n return this.colonHostPartReplacer(ho
st, part, suffix);\n } else {\n return host + part + suffix + ', ' + par
t + ' ' + host + suffix;\n }\n },\n colonHostPartReplacer: function(host, p
art, suffix) {\n return host + part.replace(polyfillHost, '') + suffix;\n },
\n /*\n * Convert ^ and ^^ combinators by replacing with space.\n */\n conv
ertCombinators: function(cssText) {\n for (var i=0; i < combinatorsRe.length;
i++) {\n cssText = cssText.replace(combinatorsRe[i], ' ');\n }\n ret
urn cssText;\n },\n // change a selector like 'div' to 'name div'\n scopeRule
s: function(cssRules, scopeSelector) {\n var cssText = '';\n if (cssRules)
{\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (r
ule.selectorText && (rule.style && rule.style.cssText)) {\n cssText +=
this.scopeSelector(rule.selectorText, scopeSelector, \n this.strictSt
yling) + ' {\\n\\t';\n cssText += this.propertiesFromRule(rule) + '\\n}
\\n\\n';\n } else if (rule.type === CSSRule.MEDIA_RULE) {\n cssT
ext += '@media ' + rule.media.mediaText + ' {\\n';\n cssText += this.sc
opeRules(rule.cssRules, scopeSelector);\n cssText += '\\n}\\n\\n';\n
} else if (rule.cssText) {\n cssText += rule.cssText + '\\n\\n';\n
}\n }, this);\n }\n return cssText;\n },\n scopeSelector: f
unction(selector, scopeSelector, strict) {\n var r = [], parts = selector.spl
it(',');\n parts.forEach(function(p) {\n p = p.trim();\n if (this.s
electorNeedsScoping(p, scopeSelector)) {\n p = (strict && !p.match(polyfi
llHostNoCombinator)) ? \n this.applyStrictSelectorScope(p, scopeSelec
tor) :\n this.applySimpleSelectorScope(p, scopeSelector);\n }\n
r.push(p);\n }, this);\n return r.join(', ');\n },\n selectorNeedsS
coping: function(selector, scopeSelector) {\n var re = this.makeScopeMatcher(
scopeSelector);\n return !selector.match(re);\n },\n makeScopeMatcher: func
tion(scopeSelector) {\n scopeSelector = scopeSelector.replace(/\\[/g, '\\\\['
).replace(/\\[/g, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' +
selectorReSuffix, 'm');\n },\n // scope via name and [is=name]\n applySimpleS
electorScope: function(selector, scopeSelector) {\n if (selector.match(polyfi
llHostRe)) {\n selector = selector.replace(polyfillHostNoCombinator, scopeS
elector);\n return selector.replace(polyfillHostRe, scopeSelector + ' ');\n
} else {\n return scopeSelector + ' ' + selector;\n }\n },\n // re
turn a selector with [name] suffix on each simple selector\n // e.g. .foo.bar >
.zot becomes .foo[name].bar[name] > .zot[name]\n applyStrictSelectorScope: fun
ction(selector, scopeSelector) {\n scopeSelector = scopeSelector.replace(/\\[
is=([^\\]]*)\\]/g, '$1');\n var splits = [' ', '>', '+', '~'],\n scoped
= selector,\n attrName = '[' + scopeSelector + ']';\n splits.forEach(fun
ction(sep) {\n var parts = scoped.split(sep);\n scoped = parts.map(fun
ction(p) {\n // remove :host since it should be unnecessary\n var
t = p.trim().replace(polyfillHostRe, '');\n if (t && (splits.indexOf(t) <
0) && (t.indexOf(attrName) < 0)) {\n p = t.replace(/([^:]*)(:*)(.*)/,
'$1' + attrName + '$2$3')\n }\n return p;\n }).join(sep);\n
});\n return scoped;\n },\n insertPolyfillHostInCssText: function(selecto
r) {\n return selector.replace(colonHostContextRe, polyfillHostContext).repla
ce(\n colonHostRe, polyfillHost);\n },\n propertiesFromRule: function(r
ule) {\n var cssText = rule.style.cssText;\n // TODO(sorvell): Safari csso
m incorrectly removes quotes from the content\n // property. (https://bugs.we
bkit.org/show_bug.cgi?id=118045)\n // don't replace attr rules\n if (rule.
style.content && !rule.style.content.match(/['\"]+|attr/)) {\n cssText = cs
sText.replace(/content:[^;]*;/g, 'content: \\'' + \n rule.style.content
+ '\\';');\n }\n // TODO(sorvell): we can workaround this issue here, but
we need a list\n // of troublesome properties to fix https://github.com/Poly
mer/platform/issues/53\n //\n // inherit rules can be omitted from cssText
\n // TODO(sorvell): remove when Blink bug is fixed:\n // https://code.goo
gle.com/p/chromium/issues/detail?id=358273\n var style = rule.style;\n for
(var i in style) {\n if (style[i] === 'initial') {\n cssText += i +
': initial; ';\n }\n }\n return cssText;\n },\n replaceTextInStyle
s: function(styles, action) {\n if (styles && action) {\n if (!(styles i
nstanceof Array)) {\n styles = [styles];\n }\n Array.prototype.
forEach.call(styles, function(s) {\n s.textContent = action.call(this, s.
textContent);\n }, this);\n }\n },\n addCssToDocument: function(cssTex
t, name) {\n if (cssText.match('@import')) {\n addOwnSheet(cssText, name
);\n } else {\n addCssToDocument(cssText);\n }\n }\n};\n\nvar select
orRe = /([^{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*
]*\\*+)*\\//gim,\n // TODO(sorvell): remove either content or comment\n cs
sCommentNextSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^
{]*?){/gim,\n cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\
\:[\\s]*'([^']*)'[^}]*}([^{]*?){/gim,\n // TODO(sorvell): remove either conte
nt or comment\n cssCommentRuleRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/*][^
*]*\\*+)*)\\//gim,\n cssContentRuleRe = /(polyfill-rule)[^}]*(content\\:[\\s]
*'([^']*)'[^;]*;)[^}]*}/gim,\n // TODO(sorvell): remove either content or com
ment\n cssCommentUnscopedRuleRe = /\\/\\*\\s@polyfill-unscoped-rule([^*]*\\*+
([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnscopedRuleRe = /(polyfill-unscoped-r
ule)[^}]*(content\\:[\\s]*'([^']*)'[^;]*;)[^}]*}/gim,\n cssPseudoRe = /::(x-[
^\\s{,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host p
re-processed to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n // no
te: :host-context pre-processed to -shadowcsshostcontext.\n polyfillHostConte
xt = '-shadowcsscontext',\n parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^
)(]*\\\\)|[^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssColonHostRe = new Re
gExp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonHostContextRe = new
RegExp('(' + polyfillHostContext + parenSuffix, 'gim'),\n selectorReSuffix =
'([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n colonHostRe = /\\:host/gim,\n colo
nHostContextRe = /\\:host-context/gim,\n /* host name without combinator */\n
polyfillHostNoCombinator = polyfillHost + '-no-combinator',\n polyfillHos
tRe = new RegExp(polyfillHost, 'gim'),\n polyfillHostContextRe = new RegExp(p
olyfillHostContext, 'gim'),\n combinatorsRe = [\n /\\^\\^/g,\n /\\^
/g,\n /\\/shadow\\//g,\n /\\/shadow-deep\\//g,\n /::shadow/g,\n
/\\/deep\\//g\n ];\n\nfunction stylesToCssText(styles, preserveComments)
{\n var cssText = '';\n Array.prototype.forEach.call(styles, function(s) {\n
cssText += s.textContent + '\\n\\n';\n });\n // strip comments for easier pr
ocessing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe
, '');\n }\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var s
tyle = document.createElement('style');\n style.textContent = cssText;\n retur
n style;\n}\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssT
ext);\n document.head.appendChild(style);\n var rules = [];\n if (style.sheet
) {\n // TODO(sorvell): Firefox throws when accessing the rules of a styleshe
et\n // with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=
625013\n try {\n rules = style.sheet.cssRules;\n } catch(e) {\n
//\n }\n } else {\n console.warn('sheet not found', style);\n }\n style
.parentNode.removeChild(style);\n return rules;\n}\n\nvar frame = document.crea
teElement('iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n
frame.initialized = true;\n document.body.appendChild(frame);\n var doc = fra
me.contentDocument;\n var base = doc.createElement('base');\n base.href = docu
ment.baseURI;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if
(!frame.initialized) {\n initFrame();\n }\n document.body.appendChild(frame
);\n fn(frame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// T
ODO(sorvell): use an iframe if the cssText contains an @import to workaround\n//
https://code.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navi
gator.userAgent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n
if (!callback) {\n return;\n }\n var rules;\n if (cssText.match('@import')
&& isChrome) {\n var style = cssTextToStyle(cssText);\n inFrame(function(
doc) {\n doc.head.appendChild(style.impl);\n rules = style.sheet.cssRu
les;\n callback(rules);\n });\n } else {\n rules = cssToRules(cssTex
t);\n callback(rules);\n }\n}\n\nfunction rulesToCss(cssRules) {\n for (var
i=0, css=[]; i < cssRules.length; i++) {\n css.push(cssRules[i].cssText);\n
}\n return css.join('\\n\\n');\n}\n\nfunction addCssToDocument(cssText) {\n i
f (cssText) {\n getSheet().appendChild(document.createTextNode(cssText));\n
}\n}\n\nfunction addOwnSheet(cssText, name) {\n var style = cssTextToStyle(cssT
ext);\n style.setAttribute(name, '');\n style.setAttribute(SHIMMED_ATTRIBUTE,
'');\n document.head.appendChild(style);\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shado
wdom';\nvar SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar NO_SHIM_ATTRIBUTE = '
no-shim';\n\nvar sheet;\nfunction getSheet() {\n if (!sheet) {\n sheet = doc
ument.createElement(\"style\");\n sheet.setAttribute(SHIMMED_ATTRIBUTE, '');\
n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\n}\n\n// add polyfil
l stylesheet to document\nif (window.ShadowDOMPolyfill) {\n addCssToDocument('s
tyle { display: none !important; }\\n');\n var doc = wrap(document);\n var hea
d = doc.querySelector('head');\n head.insertBefore(getSheet(), head.childNodes[
0]);\n\n // TODO(sorvell): monkey-patching HTMLImports is abusive;\n // consid
er a better solution.\n document.addEventListener('DOMContentLoaded', function(
) {\n var urlResolver = scope.urlResolver;\n \n if (window.HTMLImports
&& !HTMLImports.useNative) {\n var SHIM_SHEET_SELECTOR = 'link[rel=styleshe
et]' +\n '[' + SHIM_ATTRIBUTE + ']';\n var SHIM_STYLE_SELECTOR = '
style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.importer.documentPreloadSelec
tors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImports.importer.importsPreloadSel
ectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.parser.documentSelecto
rs = [\n HTMLImports.parser.documentSelectors,\n SHIM_SHEET_SELECT
OR,\n SHIM_STYLE_SELECTOR\n ].join(',');\n \n var originalPars
eGeneric = HTMLImports.parser.parseGeneric;\n\n HTMLImports.parser.parseGen
eric = function(elt) {\n if (elt[SHIMMED_ATTRIBUTE]) {\n return;
\n }\n var style = elt.__importElement || elt;\n if (!style
.hasAttribute(SHIM_ATTRIBUTE)) {\n originalParseGeneric.call(this, elt)
;\n return;\n }\n if (elt.__resource) {\n style
= elt.ownerDocument.createElement('style');\n style.textContent = urlRe
solver.resolveCssText(\n elt.__resource, elt.href);\n } else
{\n urlResolver.resolveStyle(style); \n }\n style.textC
ontent = ShadowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTRIBU
TE, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[SHIM
MED_ATTRIBUTE] = true;\n // place in document\n if (style.parentNo
de !== head) {\n // replace links in head\n if (elt.parentNode
=== head) {\n head.replaceChild(style, elt);\n } else {\n
head.appendChild(style);\n }\n }\n style.__impo
rtParsed = true;\n this.markParsingComplete(elt);\n }\n\n var h
asResource = HTMLImports.parser.hasResource;\n HTMLImports.parser.hasResour
ce = function(node) {\n if (node.localName === 'link' && node.rel === 'st
ylesheet' &&\n node.hasAttribute(SHIM_ATTRIBUTE)) {\n return
(node.__resource);\n } else {\n return hasResource.call(this, n
ode);\n }\n }\n\n }\n });\n}\n\n// exports\nscope.ShadowCSS = Sh
adowCSS;\n\n})(window.Platform);","/*\n * Copyright 2013 The Polymer Authors. Al
l rights reserved.\n * Use of this source code is governed by a BSD-style\n * li
cense that can be found in the LICENSE file.\n */\n(function() {\n\n // poor ma
n's adapter for template.content on various platform scenarios\n window.templat
eContent = window.templateContent || function(inTemplate) {\n return inTempla
te.content;\n };\n\n // so we can call wrap/unwrap without testing for ShadowD
OMPolyfill\n\n window.wrap = window.unwrap = function(n){\n return n;\n }\n
\n addEventListener('DOMContentLoaded', function() {\n if (CustomElements.
useNative === false) {\n var originalCreateShadowRoot = Element.prototype.c
reateShadowRoot;\n Element.prototype.createShadowRoot = function() {\n
var root = originalCreateShadowRoot.call(this);\n CustomElements.watch
Shadow(this);\n return root;\n };\n }\n });\n \n window.templa
teContent = function(inTemplate) {\n // if MDV exists, it may need to boostra
p this template to reveal content\n if (window.HTMLTemplateElement && HTMLTem
plateElement.bootstrap) {\n HTMLTemplateElement.bootstrap(inTemplate);\n
}\n // fallback when there is no Shadow DOM polyfill, no MDV polyfill, and n
o\n // native template support\n if (!inTemplate.content && !inTemplate._c
ontent) {\n var frag = document.createDocumentFragment();\n while (inT
emplate.firstChild) {\n frag.appendChild(inTemplate.firstChild);\n }
\n inTemplate._content = frag;\n }\n return inTemplate.content || inT
emplate._content;\n };\n\n})();","/* Any copyright is dedicated to the Public D
omain.\n * http://creativecommons.org/publicdomain/zero/1.0/ */\n\n(function(sco
pe) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWork
ingUrl = false;\n if (!scope.forceJURL) {\n try {\n var u = new URL('b'
, 'http://a');\n hasWorkingUrl = u.href === 'http://a/b';\n } catch(e) {
}\n }\n\n if (hasWorkingUrl)\n return;\n\n var relative = Object.create(nu
ll);\n relative['ftp'] = 21;\n relative['file'] = 0;\n relative['gopher'] = 7
0;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;
\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null)
;\n relativePathDotMapping['%2e'] = '.';\n relativePathDotMapping['.%2e'] = '.
.';\n relativePathDotMapping['%2e.'] = '..';\n relativePathDotMapping['%2e%2e'
] = '..';\n\n function isRelativeScheme(scheme) {\n return relative[scheme]
!== undefined;\n }\n\n function invalid() {\n clear.call(this);\n this._
isInvalid = true;\n }\n\n function IDNAToASCII(h) {\n if ('' == h) {\n
invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n fun
ction percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode >
0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0
x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }
\n return encodeURIComponent(c);\n }\n\n function percentEscapeQuery(c) {\n
// XXX This actually needs to encode c using encoding and then\n // conve
rt the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode
> 0x20 &&\n unicode < 0x7F &&\n // \" # < > ` (do not escape '?')\n
[0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n re
turn c;\n }\n return encodeURIComponent(c);\n }\n\n var EOF = undefined,
\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n f
unction parse(input, stateOverride, base) {\n function err(message) {\n
errors.push(message)\n }\n\n var state = stateOverride || 'scheme start',\
n cursor = 0,\n buffer = '',\n seenAt = false,\n see
nBracket = false,\n errors = [];\n\n loop: while ((input[cursor - 1] !
= EOF || cursor == 0) && !this._isInvalid) {\n var c = input[cursor];\n
switch (state) {\n case 'scheme start':\n if (c && ALPHA.test(
c)) {\n buffer += c.toLowerCase(); // ASCII-safe\n state =
'scheme';\n } else if (!stateOverride) {\n buffer = '';\n
state = 'no scheme';\n continue;\n } else {\n
err('Invalid scheme.');\n break loop;\n }\n
break;\n\n case 'scheme':\n if (c && ALPHANUMERIC.test(c)) {\n
buffer += c.toLowerCase(); // ASCII-safe\n } else if (':' ==
c) {\n this._scheme = buffer;\n buffer = '';\n
if (stateOverride) {\n break loop;\n }\n if (
isRelativeScheme(this._scheme)) {\n this._isRelative = true;\n
}\n if ('file' == this._scheme) {\n state = 'rela
tive';\n } else if (this._isRelative && base && base._scheme == this.
_scheme) {\n state = 'relative or authority';\n } else i
f (this._isRelative) {\n state = 'authority first slash';\n
} else {\n state = 'scheme data';\n }\n } e
lse if (!stateOverride) {\n buffer = '';\n cursor = 0;\n
state = 'no scheme';\n continue;\n } else if (EOF
== c) {\n break loop;\n } else {\n err('Code poin
t not allowed in scheme: ' + c)\n break loop;\n }\n
break;\n\n case 'scheme data':\n if ('?' == c) {\n q
uery = '?';\n state = 'query';\n } else if ('#' == c) {\n
this._fragment = '#';\n state = 'fragment';\n } els
e {\n // XXX error handling\n if (EOF != c && '\\t' != c &
& '\\n' != c && '\\r' != c) {\n this._schemeData += percentEscape(c
);\n }\n }\n break;\n\n case 'no scheme':\n
if (!base || !(isRelativeScheme(base._scheme))) {\n err('Mis
sing scheme.');\n invalid.call(this);\n } else {\n
state = 'relative';\n continue;\n }\n break;\n\n
case 'relative or authority':\n if ('/' == c && '/' == input[cur
sor+1]) {\n state = 'authority ignore slashes';\n } else {\n
err('Expected /, got: ' + c);\n state = 'relative';\n
continue\n }\n break;\n\n case 'relative':\n
this._isRelative = true;\n if ('file' != this._scheme)\n
this._scheme = base._scheme;\n if (EOF == c) {\n this._h
ost = base._host;\n this._port = base._port;\n this._path
= base._path.slice();\n this._query = base._query;\n break
loop;\n } else if ('/' == c || '\\\\' == c) {\n if ('\\\\'
== c)\n err('\\\\ is an invalid code point.');\n state =
'relative slash';\n } else if ('?' == c) {\n this._host = b
ase._host;\n this._port = base._port;\n this._path = base.
_path.slice();\n this._query = '?';\n state = 'query';\n
} else if ('#' == c) {\n this._host = base._host;\n
this._port = base._port;\n this._path = base._path.slice();\n
this._query = base._query;\n this._fragment = '#';\n
state = 'fragment';\n } else {\n var nextC = input[cursor+1
]\n var nextNextC = input[cursor+2]\n if (\n
'file' != this._scheme || !ALPHA.test(c) ||\n (nextC != ':' && next
C != '|') ||\n (EOF != nextNextC && '/' != nextNextC && '\\\\' != n
extNextC && '?' != nextNextC && '#' != nextNextC)) {\n this._host =
base._host;\n this._port = base._port;\n this._path =
base._path.slice();\n this._path.pop();\n }\n
state = 'relative path';\n continue;\n }\n break;
\n\n case 'relative slash':\n if ('/' == c || '\\\\' == c) {\n
if ('\\\\' == c) {\n err('\\\\ is an invalid code point.'
);\n }\n if ('file' == this._scheme) {\n stat
e = 'file host';\n } else {\n state = 'authority ignore
slashes';\n }\n } else {\n if ('file' != this._sc
heme) {\n this._host = base._host;\n this._port = base
._port;\n }\n state = 'relative path';\n contin
ue;\n }\n break;\n\n case 'authority first slash':\n
if ('/' == c) {\n state = 'authority second slash';\n
} else {\n err(\"Expected '/', got: \" + c);\n state = 'a
uthority ignore slashes';\n continue;\n }\n break;\
n\n case 'authority second slash':\n state = 'authority ignore s
lashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c
);\n continue;\n }\n break;\n\n case 'author
ity ignore slashes':\n if ('/' != c && '\\\\' != c) {\n stat
e = 'authority';\n continue;\n } else {\n err('Ex
pected authority, got: ' + c);\n }\n break;\n\n case 'a
uthority':\n if ('@' == c) {\n if (seenAt) {\n
err('@ already seen.');\n buffer += '%40';\n }\n
seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n
var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\
\r' == cp) {\n err('Invalid whitespace in authority.');\n
continue;\n }\n // XXX check URL code points\n
if (':' == cp && null === this._password) {\n this.
_password = '';\n continue;\n }\n var t
empC = percentEscape(cp);\n (null !== this._password) ? this._passw
ord += tempC : this._username += tempC;\n }\n buffer = '';
\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' ==
c) {\n cursor -= buffer.length;\n buffer = '';\n
state = 'host';\n continue;\n } else {\n buffe
r += c;\n }\n break;\n\n case 'file host':\n i
f (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n i
f (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ':' || buffer[1]
== '|')) {\n state = 'relative path';\n } else if (buff
er.length == 0) {\n state = 'relative path start';\n } e
lse {\n this._host = IDNAToASCII.call(this, buffer);\n
buffer = '';\n state = 'relative path start';\n }\n
continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c)
{\n err('Invalid whitespace in file host.');\n } else {\n
buffer += c;\n }\n break;\n\n case 'host':\n
case 'hostname':\n if (':' == c && !seenBracket) {\n /
/ XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n
buffer = '';\n state = 'port';\n if ('hostname'
== stateOverride) {\n break loop;\n }\n } else
if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n
this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n
state = 'relative path start';\n if (stateOverride) {\n
break loop;\n }\n continue;\n } else if ('\\t
' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n
seenBracket = true;\n } else if (']' == c) {\n seenBra
cket = false;\n }\n buffer += c;\n } else {\n
err('Invalid code point in host/hostname: ' + c);\n }\n
break;\n\n case 'port':\n if (/[0-9]/.test(c)) {\n
buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' ==
c || '#' == c || stateOverride) {\n if ('' != buffer) {\n
var temp = parseInt(buffer, 10);\n if (temp != relative[this._sc
heme]) {\n this._port = temp + '';\n }\n
buffer = '';\n }\n if (stateOverride) {\n b
reak loop;\n }\n state = 'relative path start';\n
continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n
err('Invalid code point in port: ' + c);\n } else {\n
invalid.call(this);\n }\n break;\n\n case 'relative
path start':\n if ('\\\\' == c)\n err(\"'\\\\' not allowed
in path.\");\n state = 'relative path';\n if ('/' != c && '\\\
\' != c) {\n continue;\n }\n break;\n\n case
'relative path':\n if (EOF == c || '/' == c || '\\\\' == c || (!stateO
verride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n
err('\\\\ not allowed in relative path.');\n }\n var
tmp;\n if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {\n
buffer = tmp;\n }\n if ('..' == buffer) {\n
this._path.pop();\n if ('/' != c && '\\\\' != c) {\n
this._path.push('');\n }\n } else if ('.' ==
buffer && '/' != c && '\\\\' != c) {\n this._path.push('');\n
} else if ('.' != buffer) {\n if ('file' == this._scheme && t
his._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1
] == '|') {\n buffer = buffer[0] + ':';\n }\n
this._path.push(buffer);\n }\n buffer = '';\n
if ('?' == c) {\n this._query = '?';\n state = '
query';\n } else if ('#' == c) {\n this._fragment = '#';
\n state = 'fragment';\n }\n } else if ('\\t' !
= c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n
}\n break;\n\n case 'query':\n if (!stateOverrid
e && '#' == c) {\n this._fragment = '#';\n state = 'fragme
nt';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {
\n this._query += percentEscapeQuery(c);\n }\n brea
k;\n\n case 'fragment':\n if (EOF != c && '\\t' != c && '\\n' !=
c && '\\r' != c) {\n this._fragment += c;\n }\n br
eak;\n }\n\n cursor++;\n }\n }\n\n function clear() {\n this._
scheme = '';\n this._schemeData = '';\n this._username = '';\n this._pa
ssword = null;\n this._host = '';\n this._port = '';\n this._path = [];
\n this._query = '';\n this._fragment = '';\n this._isInvalid = false;\
n this._isRelative = false;\n }\n\n // Does not process domain names or IP
addresses.\n // Does not handle encoding for the query parameter.\n function j
URL(url, base /* , encoding */) {\n if (base !== undefined && !(base instance
of jURL))\n base = new jURL(String(base));\n\n this._url = url;\n cle
ar.call(this);\n\n var input = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]
+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input,
null, base);\n }\n\n jURL.prototype = {\n get href() {\n if (this._is
Invalid)\n return this._url;\n\n var authority = '';\n if ('' !
= this._username || null != this._password) {\n authority = this._usernam
e +\n (null != this._password ? ':' + this._password : '') + '@';\n
}\n\n return this.protocol +\n (this._isRelative ? '//' + auth
ority + this.host : '') +\n this.pathname + this._query + this._fragmen
t;\n },\n set href(href) {\n clear.call(this);\n parse.call(this
, href);\n },\n\n get protocol() {\n return this._scheme + ':';\n
},\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n
parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host()
{\n return this._isInvalid ? '' : this._port ?\n this._host + ':'
+ this._port : this._host;\n },\n set host(host) {\n if (this._isInv
alid || !this._isRelative)\n return;\n parse.call(this, host, 'host'
);\n },\n\n get hostname() {\n return this._host;\n },\n set ho
stname(hostname) {\n if (this._isInvalid || !this._isRelative)\n ret
urn;\n parse.call(this, hostname, 'hostname');\n },\n\n get port() {\
n return this._port;\n },\n set port(port) {\n if (this._isInval
id || !this._isRelative)\n return;\n parse.call(this, port, 'port');
\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRe
lative ?\n '/' + this._path.join('/') : this._schemeData;\n },\n
set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n
return;\n this._path = [];\n parse.call(this, pathname, 'relative p
ath start');\n },\n\n get search() {\n return this._isInvalid || !thi
s._query || '?' == this._query ?\n '' : this._query;\n },\n set s
earch(search) {\n if (this._isInvalid || !this._isRelative)\n return
;\n this._query = '?';\n if ('?' == search[0])\n search = searc
h.slice(1);\n parse.call(this, search, 'query');\n },\n\n get hash()
{\n return this._isInvalid || !this._fragment || '#' == this._fragment ?\n
'' : this._fragment;\n },\n set hash(hash) {\n if (this._isI
nvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])
\n hash = hash.slice(1);\n parse.call(this, hash, 'fragment');\n
}\n };\n\n scope.URL = jURL;\n\n})(window);\n","/*\n * Copyright 2013 The Poly
mer Authors. All rights reserved.\n * Use of this source code is governed by a B
SD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(sc
ope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prototype.bi
nd) {\n Function.prototype.bind = function(scope) {\n var self = this;\n
var args = Array.prototype.slice.call(arguments, 1);\n return function() {\n
var args2 = args.slice();\n args2.push.apply(args2, arguments);\n
return self.apply(scope, args2);\n };\n };\n}\n\n// mixin\n\n// copy all pr
operties from inProps (et al) to inObj\nfunction mixin(inObj/*, inProps, inMoreP
rops, ...*/) {\n var obj = inObj || {};\n for (var i = 1; i < arguments.length
; i++) {\n var p = arguments[i];\n try {\n for (var n in p) {\n
copyProperty(n, p, obj);\n }\n } catch(x) {\n }\n }\n return obj;
\n}\n\n// copy property inName from inSource object to inTarget object\nfunction
copyProperty(inName, inSource, inTarget) {\n var pd = getPropertyDescriptor(in
Source, inName);\n Object.defineProperty(inTarget, inName, pd);\n}\n\n// get pr
operty descriptor for inName on inObject, even if\n// inName exists on some link
in inObject's prototype chain\nfunction getPropertyDescriptor(inObject, inName)
{\n if (inObject) {\n var pd = Object.getOwnPropertyDescriptor(inObject, in
Name);\n return pd || getPropertyDescriptor(Object.getPrototypeOf(inObject),
inName);\n }\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platform);","
// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Version
2.0 (the \"License\");\n// you may not use this file except in compliance with
the License.\n// You may obtain a copy of the License at\n//\n// http://www.
apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agr
eed to in writing, software\n// distributed under the License is distributed on
an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either exp
ress or implied.\n// See the License for the specific language governing permiss
ions and\n// limitations under the License.\n\n(function(scope) {\n\n 'use stri
ct';\n\n // polyfill DOMTokenList\n // * add/remove: allow these methods to ta
ke multiple classNames\n // * toggle: add a 2nd argument which forces the given
state rather\n // than toggling.\n\n var add = DOMTokenList.prototype.add;\n
var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.add = fu
nction() {\n for (var i = 0; i < arguments.length; i++) {\n add.call(thi
s, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = function() {\n
for (var i = 0; i < arguments.length; i++) {\n remove.call(this, argume
nts[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name, bool) {\
n if (arguments.length == 1) {\n bool = !this.contains(name);\n }\n
bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.prototype.swi
tch = function(oldName, newName) {\n oldName && this.remove(oldName);\n ne
wName && this.add(newName);\n };\n\n // add array() to NodeList, NamedNodeMap,
HTMLCollection\n\n var ArraySlice = function() {\n return Array.prototype.s
lice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || window.Mo
zNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n namedNodeMa
p.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = ArraySlice;\
n\n // polyfill performance.now\n\n if (!window.performance) {\n var start
= Date.now();\n // only at millisecond precision\n window.performance = {n
ow: function(){ return Date.now() - start }};\n }\n\n // polyfill for requestA
nimationFrame\n\n if (!window.requestAnimationFrame) {\n window.requestAnima
tionFrame = (function() {\n var nativeRaf = window.webkitRequestAnimationFr
ame ||\n window.mozRequestAnimationFrame;\n\n return nativeRaf ?\n
function(callback) {\n return nativeRaf(function() {\n
callback(performance.now());\n });\n } :\n function( cal
lback ){\n return window.setTimeout(callback, 1000 / 60);\n };\n
})();\n }\n\n if (!window.cancelAnimationFrame) {\n window.cancelAnimat
ionFrame = (function() {\n return window.webkitCancelAnimationFrame ||\n
window.mozCancelAnimationFrame ||\n function(id) {\n clear
Timeout(id);\n };\n })();\n }\n\n // utility\n\n function createDOM
(inTagOrNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'string' ?
\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(true);\n
dom.innerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttrs) {\n
dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\n }\n
// Make a stub for Polymer() for polyfill purposes; under the HTMLImports\n //
polyfill, scripts in the main document run before imports. That means\n // if
(1) polymer is imported and (2) Polymer() is called in the main document\n // i
n a script after the import, 2 occurs before 1. We correct this here\n // by sp
ecfiically patching Polymer(); this is not necessary under native\n // HTMLImpo
rts.\n var elementDeclarations = [];\n\n var polymerStub = function(name, dict
ionary) {\n elementDeclarations.push(arguments);\n }\n window.Polymer = pol
ymerStub;\n\n // deliver queued delcarations\n scope.deliverDeclarations = fun
ction() {\n scope.deliverDeclarations = function() {\n throw 'Possible at
tempt to load Polymer twice';\n };\n return elementDeclarations;\n }\n\n
// Once DOMContent has loaded, any main document scripts that depend on\n // P
olymer() should have run. Calling Polymer() now is an error until\n // polymer
is imported.\n window.addEventListener('DOMContentLoaded', function() {\n if
(window.Polymer === polymerStub) {\n window.Polymer = function() {\n
console.error('You tried to use polymer without loading it first. To ' +\n
'load polymer, <link rel=\"import\" href=\"' + \n 'components/pol
ymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope.createD
OM = createDOM;\n\n})(window.Platform);\n","/*\n * Copyright 2013 The Polymer Au
thors. All rights reserved.\n * Use of this source code is governed by a BSD-sty
le\n * license that can be found in the LICENSE file.\n */\n\n// poor man's adap
ter for template.content on various platform scenarios\nwindow.templateContent =
window.templateContent || function(inTemplate) {\n return inTemplate.content;\
n};","(function(scope) {\n \n scope = scope || (window.Inspector = {});\n \n
var inspector;\n\n window.sinspect = function(inNode, inProxy) {\n if (!ins
pector) {\n inspector = window.open('', 'ShadowDOM Inspector', null, true);
\n inspector.document.write(inspectorHTML);\n //inspector.document.clo
se();\n inspector.api = {\n shadowize: shadowize\n };\n }\n
inspect(inNode || wrap(document.body), inProxy);\n };\n\n var inspectorHTML
= [\n '<!DOCTYPE html>',\n '<html>',\n ' <head>',\n ' <title>Sh
adowDOM Inspector</title>',\n ' <style>',\n ' body {',\n '
}',\n ' pre {',\n ' font: 9pt \"Courier New\", monospace;',\n
' line-height: 1.5em;',\n ' }',\n ' tag {',\n '
color: purple;',\n ' }',\n ' ul {',\n ' margin:
0;',\n ' padding: 0;',\n ' list-style: none;',\n '
}',\n ' li {',\n ' display: inline-block;',\n ' b
ackground-color: #f1f1f1;',\n ' padding: 4px 6px;',\n ' bo
rder-radius: 4px;',\n ' margin-right: 4px;',\n ' }',\n '
</style>',\n ' </head>',\n ' <body>',\n ' <ul id=\"crumbs\">',\n
' </ul>',\n ' <div id=\"tree\"></div>',\n ' </body>',\n '</h
tml>'\n ].join('\\n');\n \n var crumbs = [];\n\n var displayCrumbs = functio
n() {\n // alias our document\n var d = inspector.document;\n // get cr
umbbar\n var cb = d.querySelector('#crumbs');\n // clear crumbs\n cb.te
xtContent = '';\n // build new crumbs\n for (var i=0, c; c=crumbs[i]; i++)
{\n var a = d.createElement('a');\n a.href = '#';\n a.textConten
t = c.localName;\n a.idx = i;\n a.onclick = function(event) {\n
var c;\n while (crumbs.length > this.idx) {\n c = crumbs.pop();
\n }\n inspect(c.shadow || c, c);\n event.preventDefault();
\n };\n cb.appendChild(d.createElement('li')).appendChild(a);\n }\n
};\n\n var inspect = function(inNode, inProxy) {\n // alias our document\n
var d = inspector.document;\n // reset list of drillable nodes\n drill
able = [];\n // memoize our crumb proxy\n var proxy = inProxy || inNode;\n
crumbs.push(proxy);\n // update crumbs\n displayCrumbs();\n // refl
ect local tree\n d.body.querySelector('#tree').innerHTML =\n '<pre>' +
output(inNode, inNode.childNodes) + '</pre>';\n };\n\n var forEach = Array.pr
ototype.forEach.call.bind(Array.prototype.forEach);\n\n var blacklisted = {STYL
E:1, SCRIPT:1, \"#comment\": 1, TEMPLATE: 1};\n var blacklist = function(inNode
) {\n return blacklisted[inNode.nodeName];\n };\n\n var output = function(i
nNode, inChildNodes, inIndent) {\n if (blacklist(inNode)) {\n return '';
\n }\n var indent = inIndent || '';\n if (inNode.localName || inNode.no
deType == 11) {\n var name = inNode.localName || 'shadow-root';\n //in
ChildNodes = ShadowDOM.localNodes(inNode);\n var info = indent + describe(i
nNode);\n // if only textNodes\n // TODO(sjmiles): make correct for Sh
adowDOM\n /*if (!inNode.children.length && inNode.localName !== 'content' &
& inNode.localName !== 'shadow') {\n info += catTextContent(inChildNodes)
;\n } else*/ {\n // TODO(sjmiles): native <shadow> has no reference
to its projection\n if (name == 'content' /*|| name == 'shadow'*/) {\n
inChildNodes = inNode.getDistributedNodes();\n }\n info +=
'<br/>';\n var ind = indent + ' ';\n forEach(inChildNod
es, function(n) {\n info += output(n, n.childNodes, ind);\n });\
n info += indent;\n }\n if (!({br:1}[name])) {\n info +=
'<tag></' + name + '></tag>';\n info += '<br/>';\n }\n } e
lse {\n var text = inNode.textContent.trim();\n info = text ? indent +
'\"' + text + '\"' + '<br/>' : '';\n }\n return info;\n };\n\n var catT
extContent = function(inChildNodes) {\n var info = '';\n forEach(inChildNo
des, function(n) {\n info += n.textContent.trim();\n });\n return inf
o;\n };\n\n var drillable = [];\n\n var describe = function(inNode) {\n va
r tag = '<tag>' + '<';\n var name = inNode.localName || 'shadow-root';\n
if (inNode.webkitShadowRoot || inNode.shadowRoot) {\n tag += ' <button id
x=\"' + drillable.length +\n '\" onclick=\"api.shadowize.call(this)\">' +
name + '</button>';\n drillable.push(inNode);\n } else {\n tag +=
name || 'shadow-root';\n }\n if (inNode.attributes) {\n forEach(inNod
e.attributes, function(a) {\n tag += ' ' + a.name + (a.value ? '=\"' + a.
value + '\"' : '');\n });\n }\n tag += '>'+ '</tag>';\n return
tag;\n };\n\n // remote api\n\n shadowize = function() {\n var idx = Numbe
r(this.attributes.idx.value);\n //alert(idx);\n var node = drillable[idx];
\n if (node) {\n inspect(node.webkitShadowRoot || node.shadowRoot, node)
\n } else {\n console.log(\"bad shadowize node\");\n console.dir(th
is);\n }\n };\n \n // export\n \n scope.output = output;\n \n})(window.
Inspector);\n\n\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserv
ed.\n * Use of this source code is governed by a BSD-style\n * license that can
be found in the LICENSE file.\n */\n(function(scope) {\n\n // TODO(sorvell): It
's desireable to provide a default stylesheet \n // that's convenient for styli
ng unresolved elements, but\n // it's cumbersome to have to include this manual
ly in every page.\n // It would make sense to put inside some HTMLImport but \n
// the HTMLImports polyfill does not allow loading of stylesheets \n // that
block rendering. Therefore this injection is tolerated here.\n\n var style = do
cument.createElement('style');\n style.textContent = ''\n + 'body {'\n
+ 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unreso
lved] {'\n + 'opacity: 0; display: block; overflow: hidden;' \n + ' }
\\n'\n ;\n var head = document.querySelector('head');\n head.insertBefore
(style, head.firstChild);\n\n})(Platform);\n","(function(scope) {\n\n function
withDependencies(task, depends) {\n depends = depends || [];\n if (!depend
s.map) {\n depends = [depends];\n }\n return task.apply(this, depends
.map(marshal));\n }\n\n function module(name, dependsOrFactory, moduleFactory)
{\n var module;\n switch (arguments.length) {\n case 0:\n ret
urn;\n case 1:\n module = null;\n break;\n case 2:\n
module = dependsOrFactory.apply(this);\n break;\n default:\n
module = withDependencies(moduleFactory, dependsOrFactory);\n break;\
n }\n modules[name] = module;\n };\n\n function marshal(name) {\n ret
urn modules[name];\n }\n\n var modules = {};\n\n function using(depends, task
) {\n HTMLImports.whenImportsReady(function() {\n withDependencies(task,
depends);\n });\n };\n\n // exports\n\n scope.marshal = marshal;\n scope
.module = module;\n scope.using = using;\n\n})(window);","/*\n * Copyright 2013
The Polymer Authors. All rights reserved.\n * Use of this source code is govern
ed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(func
tion(scope) {\n\nvar iterations = 0;\nvar callbacks = [];\nvar twiddle = documen
t.createTextNode('');\n\nfunction endOfMicrotask(callback) {\n twiddle.textCont
ent = iterations++;\n callbacks.push(callback);\n}\n\nfunction atEndOfMicrotask
() {\n while (callbacks.length) {\n callbacks.shift()();\n }\n}\n\nnew (win
dow.MutationObserver || JsMutationObserver)(atEndOfMicrotask)\n .observe(twiddl
e, {characterData: true})\n ;\n\n// exports\n\nscope.endOfMicrotask = endOfMicr
otask;\n\n})(Platform);\n\n","/*\n * Copyright 2013 The Polymer Authors. All rig
hts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar urlRes
olver = {\n resolveDom: function(root, url) {\n url = url || root.ownerDocum
ent.baseURI;\n this.resolveAttributes(root, url);\n this.resolveStyles(roo
t, url);\n // handle template.content\n var templates = root.querySelector
All('template');\n if (templates) {\n for (var i = 0, l = templates.leng
th, t; (i < l) && (t = templates[i]); i++) {\n if (t.content) {\n
this.resolveDom(t.content, url);\n }\n }\n }\n },\n resolveTe
mplate: function(template) {\n this.resolveDom(template.content, template.own
erDocument.baseURI);\n },\n resolveStyles: function(root, url) {\n var styl
es = root.querySelectorAll('style');\n if (styles) {\n for (var i = 0, l
= styles.length, s; (i < l) && (s = styles[i]); i++) {\n this.resolveSty
le(s, url);\n }\n }\n },\n resolveStyle: function(style, url) {\n u
rl = url || style.ownerDocument.baseURI;\n style.textContent = this.resolveCs
sText(style.textContent, url);\n },\n resolveCssText: function(cssText, baseUr
l) {\n cssText = replaceUrlsInCssText(cssText, baseUrl, CSS_URL_REGEXP);\n
return replaceUrlsInCssText(cssText, baseUrl, CSS_IMPORT_REGEXP);\n },\n reso
lveAttributes: function(root, url) {\n if (root.hasAttributes && root.hasAttr
ibutes()) {\n this.resolveElementAttributes(root, url);\n }\n // sear
ch for attributes that host urls\n var nodes = root && root.querySelectorAll(
URL_ATTRS_SELECTOR);\n if (nodes) {\n for (var i = 0, l = nodes.length,
n; (i < l) && (n = nodes[i]); i++) {\n this.resolveElementAttributes(n, u
rl);\n }\n }\n },\n resolveElementAttributes: function(node, url) {\n
url = url || node.ownerDocument.baseURI;\n URL_ATTRS.forEach(function(v) {
\n var attr = node.attributes[v];\n if (attr && attr.value &&\n
(attr.value.search(URL_TEMPLATE_SEARCH) < 0)) {\n var urlPath = resolve
RelativeUrl(url, attr.value);\n attr.value = urlPath;\n }\n });\n
}\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMPORT_REGEXP
= /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['href', 'src', 'acti
on'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + ']';\nvar URL_TEMP
LATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText, baseUrl, regex
p) {\n return cssText.replace(regexp, function(m, pre, url, post) {\n var ur
lPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativeUrl(baseUrl, ur
lPath);\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n}\n\nfunction
resolveRelativeUrl(baseUrl, url) {\n var u = new URL(url, baseUrl);\n return m
akeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(url) {\n var roo
t = document.baseURI;\n var u = new URL(url, root);\n if (u.host === root.host
&& u.port === root.port &&\n u.protocol === root.protocol) {\n return m
akeRelPath(root.pathname, u.pathname);\n } else {\n return url;\n }\n}\n\n/
/ make a relative path from source to target\nfunction makeRelPath(source, targe
t) {\n var s = source.split('/');\n var t = target.split('/');\n while (s.len
gth && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n for (var i = 0, l
= s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n return t.join('/');
\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n})(Platform);\n","/*\n *
Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of this source
code is goverened by a BSD-style\n * license that can be found in the LICENSE fi
le.\n */\n\n(function(global) {\n\n var registrationsTable = new WeakMap();\n\n
// We use setImmediate or postMessage for our future callback.\n var setImmed
iate = window.msSetImmediate;\n\n // Use post message to emulate setImmediate.\
n if (!setImmediate) {\n var setImmediateQueue = [];\n var sentinel = Str
ing(Math.random());\n window.addEventListener('message', function(e) {\n
if (e.data === sentinel) {\n var queue = setImmediateQueue;\n set
ImmediateQueue = [];\n queue.forEach(function(func) {\n func();\
n });\n }\n });\n setImmediate = function(func) {\n setIm
mediateQueue.push(func);\n window.postMessage(sentinel, '*');\n };\n }\
n\n // This is used to ensure that we never schedule 2 callas to setImmediate\n
var isScheduled = false;\n\n // Keep track of observers that needs to be noti
fied next time.\n var scheduledObservers = [];\n\n /**\n * Schedules |dispat
chCallback| to be called in the future.\n * @param {MutationObserver} observer
\n */\n function scheduleCallback(observer) {\n scheduledObservers.push(ob
server);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate
(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\n return
window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIfNeeded(node)
||\n node;\n }\n\n function dispatchCallbacks() {\n // http://dom.s
pec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Used to allow
a new setImmediate call above.\n\n var observers = scheduledObservers;\n s
cheduledObservers = [];\n // Sort observers based on their creation UID (incr
emental).\n observers.sort(function(o1, o2) {\n return o1.uid_ - o2.uid_
;\n });\n\n var anyNonEmpty = false;\n observers.forEach(function(obser
ver) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords();\n //
2.3. Remove all transient registered observers whose observer is mo.\n rem
oveTransientObserversFor(observer);\n\n // 2.4\n if (queue.length) {\n
observer.callback_(queue, observer);\n anyNonEmpty = true;\n
}\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallbacks();\n }\
n\n function removeTransientObserversFor(observer) {\n observer.nodes_.forEa
ch(function(node) {\n var registrations = registrationsTable.get(node);\n
if (!registrations)\n return;\n registrations.forEach(function(r
egistration) {\n if (registration.observer === observer)\n regis
tration.removeTransientObservers();\n });\n });\n }\n\n /**\n * This
function is used for the \"For each registered observer observer (with\n * ob
server's options as options) in target's list of registered observers,\n * run
these substeps:\" and the \"For each ancestor ancestor of target, and for\n *
each registered observer observer (with options options) in ancestor's list\n
* of registered observers, run these substeps:\" part of the algorithms. The\n
* |options.subtree| is checked to ensure that the callback is called\n * cor
rectly.\n *\n * @param {Node} target\n * @param {function(MutationObserver
Init):MutationRecord} callback\n */\n function forEachAncestorAndObserverEnqu
eueRecord(target, callback) {\n for (var node = target; node; node = node.par
entNode) {\n var registrations = registrationsTable.get(node);\n\n if
(registrations) {\n for (var j = 0; j < registrations.length; j++) {\n
var registration = registrations[j];\n var options = registratio
n.options;\n\n // Only target ignores subtree.\n if (node !==
target && !options.subtree)\n continue;\n\n var record = cal
lback(options);\n if (record)\n registration.enqueue(record)
;\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\n * The cl
ass that maps to the DOM MutationObserver interface.\n * @param {Function} cal
lback.\n * @constructor\n */\n function JsMutationObserver(callback) {\n
this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n
this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype = {\n obser
ve: function(target, options) {\n target = wrapIfNeeded(target);\n\n /
/ 1.1\n if (!options.childList && !options.attributes && !options.character
Data ||\n\n // 1.2\n options.attributeOldValue && !options.att
ributes ||\n\n // 1.3\n options.attributeFilter && options.att
ributeFilter.length &&\n !options.attributes ||\n\n // 1.4
\n options.characterDataOldValue && !options.characterData) {\n\n
throw new SyntaxError();\n }\n\n var registrations = registrationsTa
ble.get(target);\n if (!registrations)\n registrationsTable.set(targ
et, registrations = []);\n\n // 2\n // If target's list of registered
observers already includes a registered\n // observer associated with the c
ontext object, replace that registered\n // observer's options with options
.\n var registration;\n for (var i = 0; i < registrations.length; i++)
{\n if (registrations[i].observer === this) {\n registration =
registrations[i];\n registration.removeListeners();\n registra
tion.options = options;\n break;\n }\n }\n\n // 3.\n
// Otherwise, add a new registered observer to target's list of registered\n
// observers with the context object as the observer and options as the\n
// options, and add target to context object's list of nodes on which it\n
// is registered.\n if (!registration) {\n registration = new R
egistration(this, target, options);\n registrations.push(registration);\n
this.nodes_.push(target);\n }\n\n registration.addListeners();
\n },\n\n disconnect: function() {\n this.nodes_.forEach(function(nod
e) {\n var registrations = registrationsTable.get(node);\n for (va
r i = 0; i < registrations.length; i++) {\n var registration = registra
tions[i];\n if (registration.observer === this) {\n registra
tion.removeListeners();\n registrations.splice(i, 1);\n //
Each node can only have one registered observer associated with\n //
this observer.\n break;\n }\n }\n }, this);\n
this.records_ = [];\n },\n\n takeRecords: function() {\n var copy
OfRecords = this.records_;\n this.records_ = [];\n return copyOfRecord
s;\n }\n };\n\n /**\n * @param {string} type\n * @param {Node} target\n
* @constructor\n */\n function MutationRecord(type, target) {\n this.ty
pe = type;\n this.target = target;\n this.addedNodes = [];\n this.remov
edNodes = [];\n this.previousSibling = null;\n this.nextSibling = null;\n
this.attributeName = null;\n this.attributeNamespace = null;\n this.old
Value = null;\n }\n\n function copyMutationRecord(original) {\n var record
= new MutationRecord(original.type, original.target);\n record.addedNodes = o
riginal.addedNodes.slice();\n record.removedNodes = original.removedNodes.sli
ce();\n record.previousSibling = original.previousSibling;\n record.nextSi
bling = original.nextSibling;\n record.attributeName = original.attributeName
;\n record.attributeNamespace = original.attributeNamespace;\n record.oldV
alue = original.oldValue;\n return record;\n };\n\n // We keep track of the
two (possibly one) records used in a single mutation.\n var currentRecord, rec
ordWithOldValue;\n\n /**\n * Creates a record without |oldValue| and caches i
t as |currentRecord| for\n * later use.\n * @param {string} oldValue\n * @
return {MutationRecord}\n */\n function getRecord(type, target) {\n return
currentRecord = new MutationRecord(type, target);\n }\n\n /**\n * Gets or c
reates a record with |oldValue| based in the |currentRecord|\n * @param {strin
g} oldValue\n * @return {MutationRecord}\n */\n function getRecordWithOldVa
lue(oldValue) {\n if (recordWithOldValue)\n return recordWithOldValue;\n
recordWithOldValue = copyMutationRecord(currentRecord);\n recordWithOldVa
lue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n function clea
rRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n\n /**\
n * @param {MutationRecord} record\n * @return {boolean} Whether the record
represents a record from the current\n * mutation event.\n */\n function re
cordRepresentsCurrentMutation(record) {\n return record === recordWithOldValu
e || record === currentRecord;\n }\n\n /**\n * Selects which record, if any,
to replace the last record in the queue.\n * This returns |null| if no record
should be replaced.\n *\n * @param {MutationRecord} lastRecord\n * @param
{MutationRecord} newRecord\n * @param {MutationRecord}\n */\n function sel
ectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord)\n ret
urn lastRecord;\n\n // Check if the the record we are adding represents the s
ame record. If\n // so, we keep the one with the oldValue in it.\n if (rec
ordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n return re
cordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used to represen
t a registered observer.\n * @param {MutationObserver} observer\n * @param {
Node} target\n * @param {MutationObserverInit} options\n * @constructor\n
*/\n function Registration(observer, target, options) {\n this.observer = ob
server;\n this.target = target;\n this.options = options;\n this.transi
entObservedNodes = [];\n }\n\n Registration.prototype = {\n enqueue: functi
on(record) {\n var records = this.observer.records_;\n var length = re
cords.length;\n\n // There are cases where we replace the last record with
the new record.\n // For example if the record represents the same mutation
we need to use\n // the one with the oldValue. If we get same record (this
can happen as we\n // walk up the tree) we ignore the new record.\n i
f (records.length > 0) {\n var lastRecord = records[length - 1];\n
var recordToReplaceLast = selectRecord(lastRecord, record);\n if (record
ToReplaceLast) {\n records[length - 1] = recordToReplaceLast;\n
return;\n }\n } else {\n scheduleCallback(this.observer);\n
}\n\n records[length] = record;\n },\n\n addListeners: function
() {\n this.addListeners_(this.target);\n },\n\n addListeners_: funct
ion(node) {\n var options = this.options;\n if (options.attributes)\n
node.addEventListener('DOMAttrModified', this, true);\n\n if (option
s.characterData)\n node.addEventListener('DOMCharacterDataModified', this
, true);\n\n if (options.childList)\n node.addEventListener('DOMNode
Inserted', this, true);\n\n if (options.childList || options.subtree)\n
node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n removeLi
steners: function() {\n this.removeListeners_(this.target);\n },\n\n
removeListeners_: function(node) {\n var options = this.options;\n if
(options.attributes)\n node.removeEventListener('DOMAttrModified', this,
true);\n\n if (options.characterData)\n node.removeEventListener('DO
MCharacterDataModified', this, true);\n\n if (options.childList)\n n
ode.removeEventListener('DOMNodeInserted', this, true);\n\n if (options.chi
ldList || options.subtree)\n node.removeEventListener('DOMNodeRemoved', t
his, true);\n },\n\n /**\n * Adds a transient observer on node. The tr
ansient observer gets removed\n * next time we deliver the change records.\n
* @param {Node} node\n */\n addTransientObserver: function(node) {\n
// Don't add transient observers on the target itself. We already have all
\n // the required listeners set up on the target.\n if (node === this
.target)\n return;\n\n this.addListeners_(node);\n this.transie
ntObservedNodes.push(node);\n var registrations = registrationsTable.get(no
de);\n if (!registrations)\n registrationsTable.set(node, registrati
ons = []);\n\n // We know that registrations does not contain this because
we already\n // checked if node === this.target.\n registrations.push(
this);\n },\n\n removeTransientObservers: function() {\n var transien
tObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes
= [];\n\n transientObservedNodes.forEach(function(node) {\n // Tran
sient observers are never added to the target.\n this.removeListeners_(no
de);\n\n var registrations = registrationsTable.get(node);\n for (
var i = 0; i < registrations.length; i++) {\n if (registrations[i] ===
this) {\n registrations.splice(i, 1);\n // Each node can o
nly have one registered observer associated with\n // this observer.\
n break;\n }\n }\n }, this);\n },\n\n hand
leEvent: function(e) {\n // Stop propagation since we are managing the prop
agation manually.\n // This means that other mutation events on the page wi
ll not work\n // correctly but that is by design.\n e.stopImmediatePro
pagation();\n\n switch (e.type) {\n case 'DOMAttrModified':\n
// http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var n
ame = e.attrName;\n var namespace = e.relatedNode.namespaceURI;\n
var target = e.target;\n\n // 1.\n var record = new getRec
ord('attributes', target);\n record.attributeName = name;\n re
cord.attributeNamespace = namespace;\n\n // 2.\n var oldValue
=\n e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;\n
\n forEachAncestorAndObserverEnqueueRecord(target, function(options) {\
n // 3.1, 4.2\n if (!options.attributes)\n re
turn;\n\n // 3.2, 4.3\n if (options.attributeFilter && opt
ions.attributeFilter.length &&\n options.attributeFilter.indexOf(
name) === -1 &&\n options.attributeFilter.indexOf(namespace) ===
-1) {\n return;\n }\n // 3.3, 4.4\n
if (options.attributeOldValue)\n return getRecordWithOldValue(old
Value);\n\n // 3.4, 4.5\n return record;\n });\n\
n break;\n\n case 'DOMCharacterDataModified':\n // http
://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n var target = e
.target;\n\n // 1.\n var record = getRecord('characterData', t
arget);\n\n // 2.\n var oldValue = e.prevValue;\n\n\n
forEachAncestorAndObserverEnqueueRecord(target, function(options) {\n
// 3.1, 4.2\n if (!options.characterData)\n return;\n\
n // 3.2, 4.3\n if (options.characterDataOldValue)\n
return getRecordWithOldValue(oldValue);\n\n // 3.3, 4.4\n
return record;\n });\n\n break;\n\n case 'DOMNo
deRemoved':\n this.addTransientObserver(e.target);\n // Fall t
hrough.\n case 'DOMNodeInserted':\n // http://dom.spec.whatwg.or
g/#concept-mo-queue-childlist\n var target = e.relatedNode;\n
var changedNode = e.target;\n var addedNodes, removedNodes;\n
if (e.type === 'DOMNodeInserted') {\n addedNodes = [changedNode];\n
removedNodes = [];\n } else {\n\n addedNodes = [];
\n removedNodes = [changedNode];\n }\n var previous
Sibling = changedNode.previousSibling;\n var nextSibling = changedNode.
nextSibling;\n\n // 1.\n var record = getRecord('childList', t
arget);\n record.addedNodes = addedNodes;\n record.removedNode
s = removedNodes;\n record.previousSibling = previousSibling;\n
record.nextSibling = nextSibling;\n\n forEachAncestorAndObserverEnque
ueRecord(target, function(options) {\n // 2.1, 3.2\n if (!
options.childList)\n return;\n\n // 2.2, 3.3\n
return record;\n });\n\n }\n\n clearRecords();\n }\n };
\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!global.MutationO
bserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})(this);\n","/
*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this s
ource code is governed by a BSD-style\n * license that can be found in the LICEN
SE file.\n */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};","/*\n * C
opyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source c
ode is governed by a BSD-style\n * license that can be found in the LICENSE file
.\n */\n\n(function(scope) {\n\n // imports\n var path = scope.path;\n var xh
r = scope.xhr;\n var flags = scope.flags;\n\n // TODO(sorvell): this loader su
pports a dynamic list of urls\n // and an oncomplete callback that is called wh
en the loader is done.\n // The polyfill currently does *not* need this dynamis
m or the onComplete\n // concept. Because of this, the loader could be simplifi
ed quite a bit.\n var Loader = function(onLoad, onComplete) {\n this.cache =
{};\n this.onload = onLoad;\n this.oncomplete = onComplete;\n this.inf
light = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\n addNodes
: function(nodes) {\n // number of transactions to complete\n this.inf
light += nodes.length;\n // commence transactions\n for (var i=0, l=no
des.length, n; (i<l) && (n=nodes[i]); i++) {\n this.require(n);\n }\
n // anything to do?\n this.checkDone();\n },\n addNode: functio
n(node) {\n // number of transactions to complete\n this.inflight++;\n
// commence transactions\n this.require(node);\n // anything to
do?\n this.checkDone();\n },\n require: function(elt) {\n var ur
l = elt.src || elt.href;\n // ensure we have a standard url that can be use
d\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\n elt.__
nodeUrl = url;\n // deduplication\n if (!this.dedupe(url, elt)) {\n
// fetch this resource\n this.fetch(url, elt);\n }\n },\n
dedupe: function(url, elt) {\n if (this.pending[url]) {\n // add to
list of nodes waiting for inUrl\n this.pending[url].push(elt);\n
// don't need fetch\n return true;\n }\n var resource;\n i
f (this.cache[url]) {\n this.onload(url, elt, this.cache[url]);\n
// finished this transaction\n this.tail();\n // don't need fetch\
n return true;\n }\n // first node waiting for inUrl\n thi
s.pending[url] = [elt];\n // need fetch (not a dupe)\n return false;\n
},\n fetch: function(url, elt) {\n flags.load && console.log('fetch'
, url, elt);\n if (url.match(/^data:/)) {\n // Handle Data URI Schem
e\n var pieces = url.split(',');\n var header = pieces[0];\n
var body = pieces[1];\n if(header.indexOf(';base64') > -1) {\n
body = atob(body);\n } else {\n body = decodeURIComponent(body)
;\n }\n setTimeout(function() {\n this.receive(url, elt
, null, body);\n }.bind(this), 0);\n } else {\n var receiveXh
r = function(err, resource) {\n this.receive(url, elt, err, resource);\
n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(sorv
ell): blocked on)\n // https://code.google.com/p/chromium/issues/detail?i
d=257221\n // xhr'ing for a document makes scripts in imports runnable; o
therwise\n // they are not; however, it requires that we have doctype=htm
l in\n // the import which is unacceptable. This is only needed on Chrome
\n // to avoid the bug above.\n /*\n if (isDocumentLink(elt
)) {\n xhr.loadDocument(url, receiveXhr);\n } else {\n
xhr.load(url, receiveXhr);\n }\n */\n }\n },\n receive:
function(url, elt, err, resource) {\n this.cache[url] = resource;\n v
ar $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i
]); i++) {\n //if (!err) {\n this.onload(url, p, resource);\n
//}\n this.tail();\n }\n this.pending[url] = null;\n },
\n tail: function() {\n --this.inflight;\n this.checkDone();\n }
,\n checkDone: function() {\n if (!this.inflight) {\n this.oncomp
lete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: fun
ction(request) {\n return (request.status >= 200 && request.status < 300)\n
|| (request.status === 304)\n || (request.status === 0);\n
},\n load: function(url, next, nextContext) {\n var request = new XMLHt
tpRequest();\n if (scope.flags.debug || scope.flags.bust) {\n url +=
'?' + Math.random();\n }\n request.open('GET', url, xhr.async);\n
request.addEventListener('readystatechange', function(e) {\n if (reques
t.readyState === 4) {\n next.call(nextContext, !xhr.ok(request) && requ
est,\n request.response || request.responseText, url);\n }\n
});\n request.send();\n return request;\n },\n loadDocumen
t: function(url, next, nextContext) {\n this.load(url, next, nextContext).r
esponseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n sc
ope.Loader = Loader;\n\n})(window.HTMLImports);\n","/*\n * Copyright 2013 The Po
lymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(
scope) {\n\nvar IMPORT_LINK_TYPE = 'import';\nvar flags = scope.flags;\nvar isIe
= /Trident/.test(navigator.userAgent);\n// TODO(sorvell): SD polyfill intrusion
\nvar mainDoc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIf
Needed(document) : document;\n\n// importParser\n// highlander object to manage
parsing of imports\n// parses import related elements\n// and ensures proper par
se order\n// parse order is enforced by crawling the tree and monitoring which e
lements\n// have been parsed; async parsing is also supported.\n\n// highlander
object for parsing a document tree\nvar importParser = {\n // parse selectors f
or main document elements\n documentSelectors: 'link[rel=' + IMPORT_LINK_TYPE +
']',\n // parse selectors for import document elements\n importsSelectors: [\
n 'link[rel=' + IMPORT_LINK_TYPE + ']',\n 'link[rel=stylesheet]',\n 'st
yle',\n 'script:not([type])',\n 'script[type=\"text/javascript\"]'\n ].jo
in(','),\n map: {\n link: 'parseLink',\n script: 'parseScript',\n styl
e: 'parseStyle'\n },\n // try to parse the next import in the tree\n parseNex
t: function() {\n var next = this.nextToParse();\n if (next) {\n this
.parse(next);\n }\n },\n parse: function(elt) {\n if (this.isParsed(elt)
) {\n flags.parse && console.log('[%s] is already parsed', elt.localName);\
n return;\n }\n var fn = this[this.map[elt.localName]];\n if (fn)
{\n this.markParsing(elt);\n fn.call(this, elt);\n }\n },\n // on
ly 1 element may be parsed at a time; parsing is async so, each\n // parsing im
plementation must inform the system that parsing is complete\n // via markParsi
ngComplete.\n markParsing: function(elt) {\n flags.parse && console.log('par
sing', elt);\n this.parsingElement = elt;\n },\n markParsingComplete: funct
ion(elt) {\n elt.__importParsed = true;\n if (elt.__importElement) {\n
elt.__importElement.__importParsed = true;\n }\n this.parsingElement = n
ull;\n flags.parse && console.log('completed', elt);\n this.parseNext();\n
},\n parseImport: function(elt) {\n elt.import.__importParsed = true;\n
// TODO(sorvell): consider if there's a better way to do this;\n // expose a
n imports parsing hook; this is needed, for example, by the\n // CustomElemen
ts polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports.__i
mportsParsingHook(elt);\n }\n // fire load event\n if (elt.__resource)
{\n elt.dispatchEvent(new CustomEvent('load', {bubbles: false})); \n
} else {\n elt.dispatchEvent(new CustomEvent('error', {bubbles: false}));\n
}\n // TODO(sorvell): workaround for Safari addEventListener not working\
n // for elements not in the main document.\n if (elt.__pending) {\n
var fn;\n while (elt.__pending.length) {\n fn = elt.__pending.shift(
);\n if (fn) {\n fn({target: elt});\n }\n }\n }\n
this.markParsingComplete(elt);\n },\n parseLink: function(linkElt) {\n
if (nodeIsImport(linkElt)) {\n this.parseImport(linkElt);\n } else {\n
// make href absolute\n linkElt.href = linkElt.href;\n this.parseG
eneric(linkElt);\n }\n },\n parseStyle: function(elt) {\n // TODO(sorvel
l): style element load event can just not fire so clone styles\n var src = el
t;\n elt = cloneStyle(elt);\n elt.__importElement = src;\n this.parseGe
neric(elt);\n },\n parseGeneric: function(elt) {\n this.trackElement(elt);\
n document.head.appendChild(elt);\n },\n // tracks when a loadable element
has loaded\n trackElement: function(elt, callback) {\n var self = this;\n
var done = function(e) {\n if (callback) {\n callback(e);\n }\
n self.markParsingComplete(elt);\n };\n elt.addEventListener('load',
done);\n elt.addEventListener('error', done);\n\n // NOTE: IE does not fir
e \"load\" event for styles that have already loaded\n // This is in violatio
n of the spec, so we try our hardest to work around it\n if (isIe && elt.loca
lName === 'style') {\n var fakeLoad = false;\n // If there's not @impo
rt in the textContent, assume it has loaded\n if (elt.textContent.indexOf('
@import') == -1) {\n fakeLoad = true;\n // if we have a sheet, we ha
ve been parsed\n } else if (elt.sheet) {\n fakeLoad = true;\n
var csr = elt.sheet.cssRules;\n var len = csr ? csr.length : 0;\n
// search the rules for @import's\n for (var i = 0, r; (i < len) && (r =
csr[i]); i++) {\n if (r.type === CSSRule.IMPORT_RULE) {\n /
/ if every @import has resolved, fake the load\n fakeLoad = fakeLoad
&& Boolean(r.styleSheet);\n }\n }\n }\n // dispatch a
fake load event and continue parsing\n if (fakeLoad) {\n elt.dispatc
hEvent(new CustomEvent('load', {bubbles: false}));\n }\n }\n },\n // N
OTE: execute scripts by injecting them and watching for the load/error\n // eve
nt. Inline scripts are handled via dataURL's because browsers tend to\n // prov
ide correct parsing errors in this case. If this has any compatibility\n // iss
ues, we can switch to injecting the inline script with textContent.\n // Script
s with dataURL's do not appear to generate load events and therefore\n // we as
sume they execute synchronously.\n parseScript: function(scriptElt) {\n var
script = document.createElement('script');\n script.__importElement = scriptE
lt;\n script.src = scriptElt.src ? scriptElt.src : \n generateScriptDa
taUrl(scriptElt);\n scope.currentScript = scriptElt;\n this.trackElement(s
cript, function(e) {\n script.parentNode.removeChild(script);\n scope.
currentScript = null; \n });\n document.head.appendChild(script);\n },\n
// determine the next element in the tree which should be parsed\n nextToPars
e: function() {\n return !this.parsingElement && this.nextToParseInDoc(mainDo
c);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = doc.queryS
electorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes.length,
p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n i
f (this.hasResource(n)) {\n return nodeIsImport(n) ? this.nextToParseIn
Doc(n.import, n) : n;\n } else {\n return;\n }\n }\n
}\n // all nodes have been parsed, ready to parse import, if any\n ret
urn link;\n },\n // return the set of parse selectors relevant for this node.\
n parseSelectorsForNode: function(node) {\n var doc = node.ownerDocument ||
node;\n return doc === mainDoc ? this.documentSelectors : this.importsSelecto
rs;\n },\n isParsed: function(node) {\n return node.__importParsed;\n },\n
hasResource: function(node) {\n if (nodeIsImport(node) && !node.import) {\n
return false;\n }\n return true;\n }\n};\n\nfunction nodeIsImport(e
lt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE);\n}
\n\nfunction generateScriptDataUrl(script) {\n var scriptContent = generateScri
ptContent(script), b64;\n try {\n b64 = btoa(scriptContent);\n } catch(e) {
\n b64 = btoa(unescape(encodeURIComponent(scriptContent)));\n console.warn
('Script contained non-latin characters that were forced ' +\n 'to latin. S
ome characters may be wrong.', script);\n }\n return 'data:text/javascript;bas
e64,' + b64;\n}\n\nfunction generateScriptContent(script) {\n return script.tex
tContent + generateSourceMapHint(script);\n}\n\n// calculate source map hint\nfu
nction generateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n if
(!moniker) {\n moniker = script.ownerDocument.baseURI;\n // there could be
more than one script this url\n var tag = '[' + Math.floor((Math.random()+1)
*1000) + ']';\n // TODO(sjmiles): Polymer hack, should be pluggable if we nee
d to allow \n // this sort of thing\n var matches = script.textContent.mat
ch(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n //
tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '\\n//# sourc
eURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone style w
ith proper path resolution for main document\n// NOTE: styles are the only eleme
nts that require direct path fixup.\nfunction cloneStyle(style) {\n var clone =
style.ownerDocument.createElement('style');\n clone.textContent = style.textCo
ntent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup:
style elements in imports must be made relative to the main \n// document. We fi
xup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n
var CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = {\
n resolveUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n
var resolver = doc.createElement('a');\n style.textContent = this.resolveUr
lsInCssText(style.textContent, resolver);\n return style; \n },\n resolveU
rlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText,
urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEXP
);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n re
turn text.replace(regexp, function(m, pre, url, post) {\n var urlPath = url
.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.hr
ef;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n\n
// exports\nscope.parser = importParser;\nscope.path = path;\nscope.isIE = isIe;
\n\n})(HTMLImports);\n","/*\n * Copyright 2013 The Polymer Authors. All rights r
eserved.\n * Use of this source code is governed by a BSD-style\n * license that
can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar hasNative =
('import' in document.createElement('link'));\nvar useNative = hasNative;\nvar
flags = scope.flags;\nvar IMPORT_LINK_TYPE = 'import';\n\n// TODO(sorvell): SD p
olyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n ShadowDOMPolyf
ill.wrapIfNeeded(document) : document;\n\nif (!useNative) {\n\n // imports\n v
ar xhr = scope.xhr;\n var Loader = scope.Loader;\n var parser = scope.parser;\
n\n // importer\n // highlander object to manage loading of imports\n\n // fo
r any document, importer:\n // - loads any linked import documents (with dedupi
ng)\n\n var importer = {\n documents: {},\n // nodes to load in the mian
document\n documentPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n
// nodes to load in imports\n importsPreloadSelectors: [\n 'link[rel=
' + IMPORT_LINK_TYPE + ']'\n ].join(','),\n loadNode: function(node) {\n
importLoader.addNode(node);\n },\n // load all loadable elements withi
n the parent element\n loadSubtree: function(parent) {\n var nodes = thi
s.marshalNodes(parent);\n // add these nodes to loader's queue\n impor
tLoader.addNodes(nodes);\n },\n marshalNodes: function(parent) {\n //
all preloadable nodes in inDocument\n return parent.querySelectorAll(this.
loadSelectorsForNode(parent));\n },\n // find the proper set of load selec
tors for a given node\n loadSelectorsForNode: function(node) {\n var doc
= node.ownerDocument || node;\n return doc === mainDoc ? this.documentPrel
oadSelectors :\n this.importsPreloadSelectors;\n },\n loaded: fun
ction(url, elt, resource) {\n flags.load && console.log('loaded', url, elt)
;\n // store generic resource\n // TODO(sorvell): fails for nodes insi
de <template>.content\n // see https://code.google.com/p/chromium/issues/de
tail?id=249381.\n elt.__resource = resource;\n if (isDocumentLink(elt)
) {\n var doc = this.documents[url];\n // if we've never seen a do
cument at this url\n if (!doc) {\n // generate an HTMLDocument f
rom data\n doc = makeDocument(resource, url);\n doc.__importLi
nk = elt;\n // TODO(sorvell): we cannot use MO to detect parsed nodes b
ecause\n // SD polyfill does not report these as mutations.\n
this.bootDocument(doc);\n // cache document\n this.documents[u
rl] = doc;\n }\n // don't store import record until we're actually
loaded\n // store document resource\n elt.import = doc;\n }\
n parser.parseNext();\n },\n bootDocument: function(doc) {\n thi
s.loadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },
\n loadedAll: function() {\n parser.parseNext();\n }\n };\n\n // lo
ader singleton\n var importLoader = new Loader(importer.loaded.bind(importer),
\n importer.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\
n return isLinkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt,
rel) {\n return elt.localName === 'link' && elt.getAttribute('rel') === rel;\
n }\n\n function isScript(elt) {\n return elt.localName === 'script';\n }\
n\n function makeDocument(resource, url) {\n // create a new HTML document\n
var doc = resource;\n if (!(doc instanceof Document)) {\n doc = docu
ment.implementation.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache t
he new document's source url\n doc._URL = url;\n // establish a relative p
ath via <base>\n var base = doc.createElement('base');\n base.setAttribute
('href', url);\n // add baseURI support to browsers (IE) that lack it.\n i
f (!doc.baseURI) {\n doc.baseURI = url;\n }\n // ensure UTF-8 charset
\n var meta = doc.createElement('meta');\n meta.setAttribute('charset', 'u
tf-8');\n\n doc.head.appendChild(meta);\n doc.head.appendChild(base);\n
// install HTML last as it may trigger CustomElement upgrades\n // TODO(sjmi
les): problem wrt to template boostrapping below,\n // template bootstrapping
must (?) come before element upgrade\n // but we cannot bootstrap templates
until they are in a document\n // which is too late\n if (!(resource insta
nceof Document)) {\n // install html\n doc.body.innerHTML = resource;\
n }\n // TODO(sorvell): ideally this code is not aware of Template polyfil
l,\n // but for now the polyfill needs help to bootstrap these templates\n
if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n HTMLT
emplateElement.bootstrap(doc);\n }\n return doc;\n }\n} else {\n // do n
othing if using native imports\n var importer = {};\n}\n\n// NOTE: We cannot po
lyfill document.currentScript because it's not possible\n// both to override and
maintain the ability to capture the native value;\n// therefore we choose to ex
pose _currentScript both when native imports\n// and the polyfill are in use.\nv
ar currentScriptDescriptor = {\n get: function() {\n return HTMLImports.curr
entScript || document.currentScript;\n },\n configurable: true\n};\n\nObject.d
efineProperty(document, '_currentScript', currentScriptDescriptor);\nObject.defi
neProperty(mainDoc, '_currentScript', currentScriptDescriptor);\n\n// Polyfill d
ocument.baseURI for browsers without it.\nif (!document.baseURI) {\n var baseUR
IDescriptor = {\n get: function() {\n return window.location.href;\n
},\n configurable: true\n };\n\n Object.defineProperty(document, 'baseURI',
baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURIDescrip
tor);\n}\n\n// call a callback when all HTMLImports in the document at call (or
at least\n// document ready) time have loaded.\n// 1. ensure the document is in
a ready state (has dom), then \n// 2. watch for loading of imports and call cal
lback when done\nfunction whenImportsReady(callback, doc) {\n doc = doc || main
Doc;\n // if document is loading, wait and try again\n whenDocumentReady(funct
ion() {\n watchImportsLoad(callback, doc);\n }, doc);\n}\n\n// call the call
back when the document is in a ready state (has dom)\nvar requiredReadyState = H
TMLImports.isIE ? 'complete' : 'interactive';\nvar READY_EVENT = 'readystatechan
ge';\nfunction isDocumentReady(doc) {\n return (doc.readyState === 'complete' |
|\n doc.readyState === requiredReadyState);\n}\n\n// call <callback> when w
e ensure the document is in a ready state\nfunction whenDocumentReady(callback,
doc) {\n if (!isDocumentReady(doc)) {\n var checkReady = function() {\n
if (doc.readyState === 'complete' || \n doc.readyState === requiredRea
dyState) {\n doc.removeEventListener(READY_EVENT, checkReady);\n w
henDocumentReady(callback, doc);\n }\n }\n doc.addEventListener(READY
_EVENT, checkReady);\n } else if (callback) {\n callback();\n }\n}\n\n// ca
ll <callback> when we ensure all imports have loaded\nfunction watchImportsLoad(
callback, doc) {\n var imports = doc.querySelectorAll('link[rel=import]');\n v
ar loaded = 0, l = imports.length;\n function checkDone(d) { \n if (loaded =
= l) {\n // go async to ensure parser isn't stuck on a script tag\n re
questAnimationFrame(callback);\n }\n }\n function loadedImport(e) {\n lo
aded++;\n checkDone();\n }\n if (l) {\n for (var i=0, imp; (i<l) && (imp
=imports[i]); i++) {\n if (isImportLoaded(imp)) {\n loadedImport.cal
l(imp);\n } else {\n imp.addEventListener('load', loadedImport);\n
imp.addEventListener('error', loadedImport);\n }\n }\n } else {\n
checkDone();\n }\n}\n\nfunction isImportLoaded(link) {\n return useNative
? (link.import && (link.import.readyState !== 'loading')) :\n link.__import
Parsed;\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useNative = useNat
ive;\nscope.importer = importer;\nscope.whenImportsReady = whenImportsReady;\nsc
ope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\nscope.isImportLoaded = isImportLoaded;
\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\n"," /*\nCopyrig
ht 2013 The Polymer Authors. All rights reserved.\nUse of this source code is go
verned by a BSD-style\nlicense that can be found in the LICENSE file.\n*/\n\n(fu
nction(scope){\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE;\nvar importSele
ctor = 'link[rel=' + IMPORT_LINK_TYPE + ']';\nvar importer = scope.importer;\n\n
// we track mutations for addedNodes, looking for imports\nfunction handler(muta
tions) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mutations[i]); i++)
{\n if (m.type === 'childList' && m.addedNodes.length) {\n addedNodes(m
.addedNodes);\n }\n }\n}\n\n// find loadable elements and add them to the im
porter\nfunction addedNodes(nodes) {\n for (var i=0, l=nodes.length, n; (i<l) &
& (n=nodes[i]); i++) {\n if (shouldLoadNode(n)) {\n importer.loadNode(n)
;\n }\n if (n.children && n.children.length) {\n addedNodes(n.childre
n);\n }\n }\n}\n\nfunction shouldLoadNode(node) {\n return (node.nodeType =
== 1) && matches.call(node,\n importer.loadSelectorsForNode(node));\n}\n\n/
/ x-plat matches\nvar matches = HTMLElement.prototype.matches || \n HTMLEleme
nt.prototype.matchesSelector || \n HTMLElement.prototype.webkitMatchesSelecto
r ||\n HTMLElement.prototype.mozMatchesSelector ||\n HTMLElement.prototype
.msMatchesSelector;\n\nvar observer = new MutationObserver(handler);\n\n// obser
ve the given root for loadable elements\nfunction observe(root) {\n observer.ob
serve(root, {childList: true, subtree: true});\n}\n\n// exports\n// TODO(sorvell
): factor so can put on scope\nscope.observe = observe;\nimporter.observe = obse
rve;\n\n})(HTMLImports);\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n(function(){\n\n// bootstrap\n\n//
IE shim for CustomEvent\nif (typeof window.CustomEvent !== 'function') {\n wind
ow.CustomEvent = function(inType, dictionary) {\n var e = document.createEve
nt('HTMLEvents');\n e.initEvent(inType,\n dictionary.bubbles === fals
e ? false : true,\n dictionary.cancelable === false ? false : true,\n
dictionary.detail);\n return e;\n };\n}\n\n// TODO(sorvell): SD polyfil
l intrusion\nvar doc = window.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill
.wrapIfNeeded(document) : document;\n\n// Fire the 'HTMLImportsLoaded' event whe
n imports in document at load time \n// have loaded. This event is required to s
imulate the script blocking \n// behavior of native imports. A main document scr
ipt that needs to be sure\n// imports have loaded should wait for this event.\nH
TMLImports.whenImportsReady(function() {\n HTMLImports.ready = true;\n HTMLImp
orts.readyTime = new Date().getTime();\n doc.dispatchEvent(\n new CustomEven
t('HTMLImportsLoaded', {bubbles: true})\n );\n});\n\n\n// no need to bootstrap
the polyfill when native imports is available.\nif (!HTMLImports.useNative) {\n
function bootstrap() {\n HTMLImports.importer.bootDocument(doc);\n }\n \
n // TODO(sorvell): SD polyfill does *not* generate mutations for nodes added\n
// by the parser. For this reason, we must wait until the dom exists to \n //
bootstrap.\n if (document.readyState === 'complete' ||\n (document.readyS
tate === 'interactive' && !window.attachEvent)) {\n bootstrap();\n } else {\
n document.addEventListener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\
n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of t
his source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\nwindow.CustomElements = window.CustomElements || {flags:{}};
"," /*\r\nCopyright 2013 The Polymer Authors. All rights reserved.\r\nUse of thi
s source code is governed by a BSD-style\r\nlicense that can be found in the LIC
ENSE file.\r\n*/\r\n\r\n(function(scope){\r\n\r\nvar logFlags = window.logFlags
|| {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_TY
PE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element,
data)' function\r\n// to each element\r\n// if 'find' returns true for 'element'
, do not search element's subtree\r\nfunction findAll(node, find, data) {\r\n v
ar e = node.firstElementChild;\r\n if (!e) {\r\n e = node.firstChild;\r\n
while (e && e.nodeType !== Node.ELEMENT_NODE) {\r\n e = e.nextSibling;\r\n
}\r\n }\r\n while (e) {\r\n if (find(e, data) !== true) {\r\n find
All(e, find, data);\r\n }\r\n e = e.nextElementSibling;\r\n }\r\n return
null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoots
(node, cb) {\r\n var root = node.shadowRoot;\r\n while(root) {\r\n forSubtr
ee(root, cb);\r\n root = root.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk the
subtree rooted at node, including descent into shadow-roots,\r\n// applying 'cb
' to each element\r\nfunction forSubtree(node, cb) {\r\n //logFlags.dom && node
.childNodes && node.childNodes.length && console.group('subTree: ', node);\r\n
findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n }\r
\n forRoots(e, cb);\r\n });\r\n forRoots(node, cb);\r\n //logFlags.dom &&
node.childNodes && node.childNodes.length && console.groupEnd();\r\n}\r\n\r\n//
manage lifecycle on added node\r\nfunction added(node) {\r\n if (upgrade(node))
{\r\n insertedNode(node);\r\n return true;\r\n }\r\n inserted(node);\r\
n}\r\n\r\n// manage lifecycle on added node's subtree only\r\nfunction addedSubt
ree(node) {\r\n forSubtree(node, function(e) {\r\n if (added(e)) {\r\n
return true;\r\n }\r\n });\r\n}\r\n\r\n// manage lifecycle on added node and
it's subtree\r\nfunction addedNode(node) {\r\n return added(node) || addedSubt
ree(node);\r\n}\r\n\r\n// upgrade custom elements at node, if applicable\r\nfunc
tion upgrade(node) {\r\n if (!node.__upgraded__ && node.nodeType === Node.ELEME
NT_NODE) {\r\n var type = node.getAttribute('is') || node.localName;\r\n v
ar definition = scope.registry[type];\r\n if (definition) {\r\n logFlags
.dom && console.group('upgrade:', node.localName);\r\n scope.upgrade(node);
\r\n logFlags.dom && console.groupEnd();\r\n return true;\r\n }\r\n
}\r\n}\r\n\r\nfunction insertedNode(node) {\r\n inserted(node);\r\n if (inDo
cument(node)) {\r\n forSubtree(node, function(e) {\r\n inserted(e);\r\n
});\r\n }\r\n}\r\n\r\n// TODO(sorvell): on platforms without MutationObserve
r, mutations may not be\r\n// reliable and therefore attached/detached are not r
eliable.\r\n// To make these callbacks less likely to fail, we defer all inserts
and removes\r\n// to give a chance for elements to be inserted into dom.\r\n//
This ensures attachedCallback fires for elements that are created and\r\n// imme
diately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObserver ||
\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope.hasPo
lyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = false;\r
\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingMutatio
ns.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = true;\r
\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r\n
setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction takeMut
ations() {\r\n isPendingMutations = false;\r\n var $p = pendingMutations;\r\n
for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n }\r\n
pendingMutations = [];\r\n}\r\n\r\nfunction inserted(element) {\r\n if (hasPo
lyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(element)
;\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TODO
(sjmiles): if there are descents into trees that can never have inDocument(*) tr
ue, fix this\r\nfunction _inserted(element) {\r\n // TODO(sjmiles): it's possib
le we were inserted and removed in the space\r\n // of one microtask, in which
case we won't be 'inDocument' here\r\n // But there are other cases where we ar
e testing for inserted without\r\n // specific knowledge of mutations, and must
test 'inDocument' to determine\r\n // whether to call inserted\r\n // If we c
an factor these cases into separate code paths we can have\r\n // better diagno
stics.\r\n // TODO(sjmiles): when logging, do work on all custom elements so we
can\r\n // track behavior even when callbacks not defined\r\n //console.log('
inserted: ', element.localName);\r\n if (element.attachedCallback || element.de
tachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom
&& console.group('inserted:', element.localName);\r\n if (inDocument(element)
) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // if
we are in a 'removed' state, bluntly adjust to an 'inserted' state\r\n if (
element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\n
// if we are 'over inserted', squelch the callback\r\n if (element.__inser
ted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.localNam
e,\r\n 'insert/remove count:', element.__inserted)\r\n } else if (
element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:',
element.localName);\r\n element.attachedCallback();\r\n }\r\n }\r
\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction removedNod
e(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n removed
(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfillMutati
ons) {\r\n deferMutation(function() {\r\n _removed(element);\r\n });\
r\n } else {\r\n _removed(element);\r\n }\r\n}\r\n\r\nfunction _removed(ele
ment) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we c
an track\r\n // behavior even when callbacks not defined\r\n if (element.attac
hedCallback || element.detachedCallback || (element.__upgraded__ && logFlags.dom
)) {\r\n logFlags.dom && console.group('removed:', element.localName);\r\n
if (!inDocument(element)) {\r\n element.__inserted = (element.__inserted |
| 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'rem
oved' state\r\n if (element.__inserted > 0) {\r\n element.__inserted
= 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\n
if (element.__inserted < 0) {\r\n logFlags.dom && console.warn('remo
ved:', element.localName,\r\n 'insert/remove count:', element.__inser
ted)\r\n } else if (element.detachedCallback) {\r\n element.detached
Callback();\r\n }\r\n }\r\n logFlags.dom && console.groupEnd();\r\n
}\r\n}\r\n\r\n// SD polyfill intrustion due mainly to the fact that 'document'\r
\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return window
.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node;\r\n}\
r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc = wrapI
fNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return true;
\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction watchSh
adow(node) {\r\n if (node.shadowRoot && !node.shadowRoot.__watched) {\r\n lo
gFlags.dom && console.log('watching shadow-root for: ', node.localName);\r\n
// watch all unwatched roots...\r\n var root = node.shadowRoot;\r\n while
(root) {\r\n watchRoot(root);\r\n root = root.olderShadowRoot;\r\n
}\r\n }\r\n}\r\n\r\nfunction watchRoot(root) {\r\n if (!root.__watched) {\r\n
observe(root);\r\n root.__watched = true;\r\n }\r\n}\r\n\r\nfunction hand
ler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutations[0];\
r\n if (mx && mx.type === 'childList' && mx.addedNodes) {\r\n if (mx.a
ddedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d && d !
== document && !d.host) {\r\n d = d.parentNode;\r\n }\r\n
var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '';\r\n
u = u.split('/?').shift().split('/').pop();\r\n }\r\n }\r\n
console.group('mutations (%d) [%s]', mutations.length, u || '');\r\n }\r\n
//\r\n mutations.forEach(function(mx) {\r\n //logFlags.dom && console.group(
'mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNode
s, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n // nodes add
ed may need lifecycle management\r\n addedNode(n);\r\n });\r\n
// removed nodes may need lifecycle management\r\n forEach(mx.removedNodes,
function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n removedNode(n)
;\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n });\r\
n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nvar observer = new MutationO
bserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): ask Raf
why we have to call handler ourselves\r\n handler(observer.takeRecords());\r\n
takeMutations();\r\n}\r\n\r\nvar forEach = Array.prototype.forEach.call.bind(A
rray.prototype.forEach);\r\n\r\nfunction observe(inRoot) {\r\n observer.observe
(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDocument
(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n logF
lags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').pop());\
r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\nfuncti
on upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n //console.log('
upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade contain
ed imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IMPO
RT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=imports
[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n upgradeDocumen
tTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// expor
ts\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = watchSha
dow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeAll = a
ddedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = insert
edNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDocument
= upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window.Cus
tomElements);\r\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserv
ed.\n * Use of this source code is governed by a BSD-style\n * license that can
be found in the LICENSE file.\n */\n\n/**\n * Implements `document.register`\n *
@module CustomElements\n*/\n\n/**\n * Polyfilled extensions to the `document` o
bject.\n * @class Document\n*/\n\n(function(scope) {\n\n// imports\n\nif (!scope
) {\n scope = window.CustomElements = {flags:{}};\n}\nvar flags = scope.flags;\
n\n// native document.registerElement?\n\nvar hasNative = Boolean(document.regis
terElement);\n// TODO(sorvell): See https://github.com/Polymer/polymer/issues/39
9\n// we'll address this by defaulting to CE polyfill in the presence of the SD\
n// polyfill. This will avoid spamming excess attached/detached callbacks.\n// I
f there is a compelling need to run CE native with SD polyfill,\n// we'll need t
o fix this issue.\nvar useNative = !flags.register && hasNative && !window.Shado
wDOMPolyfill;\n\nif (useNative) {\n\n // stub\n var nop = function() {};\n\n
// exports\n scope.registry = {};\n scope.upgradeElement = nop;\n\n scope.wat
chShadow = nop;\n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgr
adeSubtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop
;\n scope.upgradeDocumentTree = nop;\n scope.takeRecords = nop;\n scope.reser
vedTagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the
document.\n *\n * When a registered element is created, a `readyCallback` m
ethod is called\n * in the scope of the element. The `readyCallback` method ca
n be specified on\n * either `options.prototype` or `options.lifecycle` with t
he latter taking\n * precedence.\n *\n * @method register\n * @param {St
ring} name The tag name to register. Must include a dash ('-'),\n * for exa
mple 'x-component'.\n * @param {Object} options\n * @param {String} [opti
ons.extends]\n * (_off spec_) Tag name of an element to extend (or blank
for a new\n * element). This parameter is not part of the specification,
but instead\n * is a hint for the polyfill because the extendee is diffic
ult to infer.\n * Remember that the input prototype must chain to the ext
ended element's\n * prototype (or HTMLElement.prototype) regardless of th
e value of\n * `extends`.\n * @param {Object} options.prototype The
prototype to use for the new\n * element. The prototype must inherit from
HTMLElement.\n * @param {Object} [options.lifecycle]\n * Callbacks
that fire at important phases in the life of the custom\n * element.\n
*\n * @example\n * FancyButton = document.registerElement(\"fancy-butto
n\", {\n * extends: 'button',\n * prototype: Object.create(HTM
LButtonElement.prototype, {\n * readyCallback: {\n * val
ue: function() {\n * console.log(\"a fancy-button was created\",\
n * }\n * }\n * })\n * });\n * @return
{Function} Constructor for the newly registered type.\n */\n function regist
er(name, options) {\n //console.warn('document.registerElement(\"' + name + '
\", ', options, ')');\n // construct a defintion out of options\n // TODO(
sjmiles): probably should clone options instead of mutating it\n var definiti
on = options || {};\n if (!name) {\n // TODO(sjmiles): replace with more
appropriate error (EricB can probably\n // offer guidance)\n throw ne
w Error('document.registerElement: first argument `name` must not be empty');\n
}\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with mor
e appropriate error (EricB can probably\n // offer guidance)\n throw n
ew Error('document.registerElement: first argument (\\'name\\') must contain a d
ash (\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n
// prevent registering reserved names\n if (isReservedTag(name)) {\n thr
ow new Error('Failed to execute \\'registerElement\\' on \\'Document\\': Registr
ation failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n
}\n // elements may only be registered once\n if (getRegisteredDefinit
ion(name)) {\n throw new Error('DuplicateDefinitionError: a type with name
\\'' + String(name) + '\\' is already registered');\n }\n // must have a p
rototype, default to an extension of HTMLElement\n // TODO(sjmiles): probably
should throw if no prototype, check spec\n if (!definition.prototype) {\n
// TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('Options missing required prototyp
e property');\n }\n // record name\n definition.__name = name.toLowerCa
se();\n // ensure a lifecycle object so we don't have to null test it\n de
finition.lifecycle = definition.lifecycle || {};\n // build a list of ancestr
al custom elements (for native base detection)\n // TODO(sjmiles): we used to
need to store this, but current code only\n // uses it in 'resolveTagName':
it should probably be inlined\n definition.ancestry = ancestry(definition.ext
ends);\n // extensions of native specializations of HTMLElement require local
Name\n // to remain native, and use secondary 'is' specifier for extension ty
pe\n resolveTagName(definition);\n // some platforms require modifications
to the user-supplied prototype\n // chain\n resolvePrototypeChain(definit
ion);\n // overrides to implement attributeChanged callback\n overrideAttr
ibuteApi(definition.prototype);\n // 7.1.5: Register the DEFINITION with DOCU
MENT\n registerDefinition(definition.__name, definition);\n // 7.1.7. Run
custom element constructor generation algorithm with PROTOTYPE\n // 7.1.8. Re
turn the output of the previous step.\n definition.ctor = generateConstructor
(definition);\n definition.ctor.prototype = definition.prototype;\n // for
ce our .constructor to be our actual constructor\n definition.prototype.const
ructor = definition.ctor;\n // if initial parsing is complete\n if (scope.
ready) {\n // upgrade any pre-existing nodes of this type\n scope.upgr
adeDocumentTree(document);\n }\n return definition.ctor;\n }\n\n functio
n isReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\
n if (name === reservedTagList[i]) {\n return true;\n }\n }\
n }\n\n var reservedTagList = [\n 'annotation-xml', 'color-profile', 'font-
face', 'font-face-src',\n 'font-face-uri', 'font-face-format', 'font-face-nam
e', 'missing-glyph'\n ];\n\n function ancestry(extnds) {\n var extendee = g
etRegisteredDefinition(extnds);\n if (extendee) {\n return ancestry(exte
ndee.extends).concat([extendee]);\n }\n return [];\n }\n\n function reso
lveTagName(definition) {\n // if we are explicitly extending something, that
thing is our\n // baseTag, unless it represents a custom component\n var b
aseTag = definition.extends;\n // if our ancestry includes custom components,
we only have a\n // baseTag if one of them does\n for (var i=0, a; (a=def
inition.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our
tag is our baseTag, if it exists, and otherwise just our name\n definition.ta
g = baseTag || definition.__name;\n if (baseTag) {\n // if there is a ba
se tag, use secondary 'is' specifier\n definition.is = definition.__name;\n
}\n }\n\n function resolvePrototypeChain(definition) {\n // if we don't
support __proto__ we need to locate the native level\n // prototype for prec
ise mixing in\n if (!Object.__proto__) {\n // default prototype\n v
ar nativePrototype = HTMLElement.prototype;\n // work out prototype when us
ing type-extension\n if (definition.is) {\n var inst = document.crea
teElement(definition.tag);\n nativePrototype = Object.getPrototypeOf(inst
);\n }\n // ensure __proto__ reference is installed at each point on t
he prototype\n // chain.\n // NOTE: On platforms without __proto__, a
mixin strategy is used instead\n // of prototype swizzling. In this case, t
his generated __proto__ provides\n // limited support for prototype travers
al.\n var proto = definition.prototype, ancestor;\n while (proto && (p
roto !== nativePrototype)) {\n var ancestor = Object.getPrototypeOf(proto
);\n proto.__proto__ = ancestor;\n proto = ancestor;\n }\n
}\n // cache this in case of mixin\n definition.native = nativePrototype;
\n }\n\n // SECTION 4\n\n function instantiate(definition) {\n // 4.a.1. C
reate a new object that implements PROTOTYPE\n // 4.a.2. Let ELEMENT by this
new object\n //\n // the custom element instantiation algorithm must also
ensure that the\n // output is a valid DOM element with the proper wrapper in
place.\n //\n return upgrade(domCreateElement(definition.tag), definition
);\n }\n\n function upgrade(element, definition) {\n // some definitions sp
ecify an 'is' attribute\n if (definition.is) {\n element.setAttribute('i
s', definition.is);\n }\n // remove 'unresolved' attr, which is a standin
for :unresolved.\n element.removeAttribute('unresolved');\n // make 'eleme
nt' implement definition.prototype\n implement(element, definition);\n //
flag as upgraded\n element.__upgraded__ = true;\n // lifecycle management\
n created(element);\n // attachedCallback fires in tree order, call before
recursing\n scope.insertedNode(element);\n // there should never be a sha
dow root on element at this point\n scope.upgradeSubtree(element);\n // OU
TPUT\n return element;\n }\n\n function implement(element, definition) {\n
// prototype swizzling is best\n if (Object.__proto__) {\n element.__
proto__ = definition.prototype;\n } else {\n // where above we can re-ac
quire inPrototype via\n // getPrototypeOf(Element), we cannot do so when\n
// we use mixin, so we install a magic reference\n customMixin(element
, definition.prototype, definition.native);\n element.__proto__ = definitio
n.prototype;\n }\n }\n\n function customMixin(inTarget, inSrc, inNative) {\
n // TODO(sjmiles): 'used' allows us to only copy the 'youngest' version of\n
// any property. This set should be precalculated. We also need to\n // c
onsider this for supporting 'super'.\n var used = {};\n // start with inSr
c\n var p = inSrc;\n // The default is HTMLElement.prototype, so we add a
test to avoid mixing in\n // native prototypes\n while (p !== inNative &&
p !== HTMLElement.prototype) {\n var keys = Object.getOwnPropertyNames(p);\
n for (var i=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Ob
ject.defineProperty(inTarget, k,\n Object.getOwnPropertyDescriptor(
p, k));\n used[k] = 1;\n }\n }\n p = Object.getPrototy
peOf(p);\n }\n }\n\n function created(element) {\n // invoke createdCall
back\n if (element.createdCallback) {\n element.createdCallback();\n
}\n }\n\n // attribute watching\n\n function overrideAttributeApi(prototype)
{\n // overrides to implement callbacks\n // TODO(sjmiles): should support
access via .attributes NamedNodeMap\n // TODO(sjmiles): preserves user defin
ed overrides, if any\n if (prototype.setAttribute._polyfilled) {\n retur
n;\n }\n var setAttribute = prototype.setAttribute;\n prototype.setAttr
ibute = function(name, value) {\n changeAttribute.call(this, name, value, s
etAttribute);\n }\n var removeAttribute = prototype.removeAttribute;\n
prototype.removeAttribute = function(name) {\n changeAttribute.call(this, n
ame, null, removeAttribute);\n }\n prototype.setAttribute._polyfilled = tr
ue;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\
n // index.html#dfn-attribute-changed-callback\n function changeAttribute(name
, value, operation) {\n var oldValue = this.getAttribute(name);\n operatio
n.apply(this, arguments);\n var newValue = this.getAttribute(name);\n if (
this.attributeChangedCallback\n && (newValue !== oldValue)) {\n this
.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // element
registry (maps tag names to definitions)\n\n var registry = {};\n\n function
getRegisteredDefinition(name) {\n if (name) {\n return registry[name.toL
owerCase()];\n }\n }\n\n function registerDefinition(name, definition) {\n
registry[name] = definition;\n }\n\n function generateConstructor(definitio
n) {\n return function() {\n return instantiate(definition);\n };\n
}\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function createEl
ementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-HTM
L elements,\n // just call createElementNS for non HTML Elements\n if (nam
espace === HTML_NAMESPACE) {\n return createElement(tag, typeExtension);\n
} else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n f
unction createElement(tag, typeExtension) {\n // TODO(sjmiles): ignore 'tag'
when using 'typeExtension', we could\n // error check it, or perhaps there sh
ould only ever be one argument\n var definition = getRegisteredDefinition(typ
eExtension || tag);\n if (definition) {\n if (tag == definition.tag && t
ypeExtension == definition.is) {\n return new definition.ctor();\n }
\n // Handle empty string for type extension.\n if (!typeExtension &&
!definition.is) {\n return new definition.ctor();\n }\n }\n\n
if (typeExtension) {\n var element = createElement(tag);\n element.set
Attribute('is', typeExtension);\n return element;\n }\n var element =
domCreateElement(tag);\n // Custom tags should be HTMLElements even if not u
pgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTMLElement
);\n }\n return element;\n }\n\n function upgradeElement(element) {\n
if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n
var is = element.getAttribute('is');\n var definition = getRegisteredDefin
ition(is || element.localName);\n if (definition) {\n if (is && defi
nition.tag == element.localName) {\n return upgrade(element, definition
);\n } else if (!is && !definition.extends) {\n return upgrade(e
lement, definition);\n }\n }\n }\n }\n\n function cloneNode(dee
p) {\n // call original clone\n var n = domCloneNode.call(this, deep);\n
// upgrade the element and subtree\n scope.upgradeAll(n);\n // return th
e clone\n return n;\n }\n // capture native createElement before we overrid
e it\n\n var domCreateElement = document.createElement.bind(document);\n var d
omCreateElementNS = document.createElementNS.bind(document);\n\n // capture nat
ive cloneNode before we override it\n\n var domCloneNode = Node.prototype.clone
Node;\n\n // exports\n\n document.registerElement = register;\n document.crea
teElement = createElement; // override\n document.createElementNS = createEleme
ntNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n\n scop
e.registry = registry;\n\n /**\n * Upgrade an element to a custom element. Up
grading an element\n * causes the custom prototype to be applied, an `is` attr
ibute\n * to be attached (as needed), and invocation of the `readyCallback`.\n
* `upgrade` does nothing if the element is already upgraded, or\n * if it m
atches no registered custom tag name.\n *\n * @method ugprade\n * @param {
Element} element The element to upgrade.\n * @return {Element} The upgraded el
ement.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custom 'insta
nceof'. This is necessary when CustomElements\n// are implemented via a mixin st
rategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !useN
ative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n while (p)
{\n // NOTE: this is not technically correct since we're not checking if\n
// an object is an instance of a constructor; however, this should\n /
/ be good enough for the mixin strategy.\n if (p === ctor.prototype) {\n
return true;\n }\n p = p.__proto__;\n }\n return false;\n
}\n} else {\n isInstance = function(obj, base) {\n return obj instanceof bas
e;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reservedTagList
= reservedTagList;\n\n// bc\ndocument.register = document.registerElement;\n\nsc
ope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.CustomElem
ents);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * U
se of this source code is governed by a BSD-style\n * license that can be found
in the LICENSE file.\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_
TYPE = scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tr
ee\n\nvar parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n
],\n map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n
if (!inDocument.__parsed) {\n // only parse once\n inDocument.__pars
ed = true;\n // all parsable elements in inDocument (depth-first pre-order
traversal)\n var elts = inDocument.querySelectorAll(parser.selectors);\n
// for each parsable node type, call the mapped parsing method\n forEach
(elts, function(e) {\n parser[parser.map[e.localName]](e);\n });\n
// upgrade all upgradeable static elements, anything dynamically\n // c
reated should be caught by observer\n CustomElements.upgradeDocument(inDocu
ment);\n // observe document for dom changes\n CustomElements.observeD
ocument(inDocument);\n }\n },\n parseLink: function(linkElt) {\n // impo
rts\n if (isDocumentLink(linkElt)) {\n this.parseImport(linkElt);\n }
\n },\n parseImport: function(linkElt) {\n if (linkElt.import) {\n par
ser.parse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n
return (inElt.localName === 'link'\n && inElt.getAttribute('rel') === IMP
ORT_LINK_TYPE);\n}\n\nvar forEach = Array.prototype.forEach.call.bind(Array.prot
otype.forEach);\n\n// exports\n\nscope.parser = parser;\nscope.IMPORT_LINK_TYPE
= IMPORT_LINK_TYPE;\n\n})(window.CustomElements);","/*\n * Copyright 2013 The Po
lymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(sc
ope){\n\n// bootstrap parsing\nfunction bootstrap() {\n // parse document\n Cu
stomElements.parser.parse(document);\n // one more pass before register is 'liv
e'\n CustomElements.upgradeDocument(document);\n // choose async\n var async
= window.Platform && Platform.endOfMicrotask ? \n Platform.endOfMicrotask :\n
setTimeout;\n async(function() {\n // set internal 'ready' flag, now doc
ument.registerElement will trigger \n // synchronous upgrades\n CustomElem
ents.ready = true;\n // capture blunt profiling data\n CustomElements.read
yTime = Date.now();\n if (window.HTMLImports) {\n CustomElements.elapsed
= CustomElements.readyTime - HTMLImports.readyTime;\n }\n // notify the s
ystem that we are bootstrapped\n document.dispatchEvent(\n new CustomEve
nt('WebComponentsReady', {bubbles: true})\n );\n\n // install upgrade hook
if HTMLImports are available\n if (window.HTMLImports) {\n HTMLImports.
__importsParsingHook = function(elt) {\n CustomElements.parser.parse(elt.
import);\n }\n }\n });\n}\n\n// CustomEvent shim for IE\nif (typeof win
dow.CustomEvent !== 'function') {\n window.CustomEvent = function(inType) {\n
var e = document.createEvent('HTMLEvents');\n e.initEvent(inType, true, tru
e);\n return e;\n };\n}\n\n// When loading at readyState complete time (or v
ia flag), boot custom elements\n// immediately.\n// If relevant, HTMLImports mus
t already be loaded.\nif (document.readyState === 'complete' || scope.flags.eage
r) {\n bootstrap();\n// When loading at readyState interactive time, bootstrap
only if HTMLImports\n// are not pending. Also avoid IE as the semantics of this
state are unreliable.\n} else if (document.readyState === 'interactive' && !wind
ow.attachEvent &&\n (!window.HTMLImports || window.HTMLImports.ready)) {\n b
ootstrap();\n// When loading at other readyStates, wait for the appropriate DOM
event to \n// bootstrap.\n} else {\n var loadEvent = window.HTMLImports && !HTM
LImports.ready ?\n 'HTMLImportsLoaded' : 'DOMContentLoaded';\n window.addE
ventListener(loadEvent, bootstrap);\n}\n\n})(window.CustomElements);\n","/*\n *
Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source
code is governed by a BSD-style\n * license that can be found in the LICENSE fil
e.\n */\n(function() {\n\nif (window.ShadowDOMPolyfill) {\n\n // ensure wrapped
inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtree', 'obser
veDocument',\n 'upgradeDocument'];\n\n // cache originals\n var original
= {};\n fns.forEach(function(fn) {\n original[fn] = CustomElements[fn];\n }
);\n\n // override\n fns.forEach(function(fn) {\n CustomElements[fn] = func
tion(inNode) {\n return original[fn](wrap(inNode));\n };\n });\n\n}\n\n
})();\n","/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Us
e of this source code is governed by a BSD-style\n * license that can be found i
n the LICENSE file.\n */\n(function(scope) {\n var endOfMicrotask = scope.endOf
Microtask;\n\n // Generic url loader\n function Loader(regex) {\n this.rege
x = regex;\n }\n Loader.prototype = {\n // TODO(dfreedm): there may be a be
tter factoring here\n // extract absolute urls from the text (full of relativ
e urls)\n extractUrls: function(text, base) {\n var matches = [];\n
var matched, u;\n while ((matched = this.regex.exec(text))) {\n u =
new URL(matched[1], base);\n matches.push({matched: matched[0], url: u.h
ref});\n }\n return matches;\n },\n // take a text blob, a root
url, and a callback and load all the urls found within the text\n // returns
a map of absolute url to text\n process: function(text, root, callback) {\n
var matches = this.extractUrls(text, root);\n this.fetch(matches, {}, c
allback);\n },\n // build a mapping of url -> text from matches\n fetch
: function(matches, map, callback) {\n var inflight = matches.length;\n\n
// return early if there is no fetching to be done\n if (!inflight) {\n
return callback(map);\n }\n\n var done = function() {\n
if (--inflight === 0) {\n callback(map);\n }\n };\n\n
// map url -> responseText\n var handleXhr = function(err, request) {\n
var match = request.match;\n var key = match.url;\n // handle
errors with an empty string\n if (err) {\n map[key] = '';\n
return done();\n }\n var response = request.response || requ
est.responseText;\n map[key] = response;\n this.fetch(this.extract
Urls(response, key), map, done);\n };\n\n var m, req, url;\n for
(var i = 0; i < inflight; i++) {\n m = matches[i];\n url = m.url;\
n // if this url has already been requested, skip requesting it again\n
if (map[url]) {\n // Async call to done to simplify the inflight
logic\n endOfMicrotask(done);\n continue;\n }\n
req = this.xhr(url, handleXhr, this);\n req.match = m;\n // tag th
e map with an XHR request to deduplicate at the same level\n map[url] = r
eq;\n }\n },\n xhr: function(url, callback, scope) {\n var reque
st = new XMLHttpRequest();\n request.open('GET', url, true);\n request
.send();\n request.onload = function() {\n callback.call(scope, null
, request);\n };\n request.onerror = function() {\n callback.ca
ll(scope, null, request);\n };\n return request;\n }\n };\n\n sco
pe.Loader = Loader;\n})(window.Platform);\n","/*\n * Copyright 2014 The Polymer
Authors. All rights reserved.\n * Use of this source code is governed by a BSD-s
tyle\n * license that can be found in the LICENSE file.\n */\n(function(scope) {
\n\nvar urlResolver = scope.urlResolver;\nvar Loader = scope.Loader;\n\nfunction
StyleResolver() {\n this.loader = new Loader(this.regex);\n}\nStyleResolver.pr
ototype = {\n regex: /@import\\s+(?:url)?[\"'\\(]*([^'\"\\)]*)['\"\\)]*;/g,\n
// Recursively replace @imports with the text at that url\n resolve: function(t
ext, url, callback) {\n var done = function(map) {\n callback(this.flatt
en(text, url, map));\n }.bind(this);\n this.loader.process(text, url, done
);\n },\n // resolve the textContent of a style node\n resolveNode: function(
style, callback) {\n var text = style.textContent;\n var url = style.owner
Document.baseURI;\n var done = function(text) {\n style.textContent = te
xt;\n callback(style);\n };\n this.resolve(text, url, done);\n },\n
// flatten all the @imports to text\n flatten: function(text, base, map) {\n
var matches = this.loader.extractUrls(text, base);\n var match, url, interm
ediate;\n for (var i = 0; i < matches.length; i++) {\n match = matches[i
];\n url = match.url;\n // resolve any css text to be relative to the
importer\n intermediate = urlResolver.resolveCssText(map[url], url);\n
// flatten intermediate @imports\n intermediate = this.flatten(intermediat
e, url, map);\n text = text.replace(match.matched, intermediate);\n }\n
return text;\n },\n loadStyles: function(styles, callback) {\n var loade
d=0, l = styles.length;\n // called in the context of the style\n function
loadedStyle(style) {\n loaded++;\n if (loaded === l && callback) {\n
callback();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]);
i++) {\n this.resolveNode(s, loadedStyle);\n }\n }\n};\n\nvar styleRes
olver = new StyleResolver();\n\n// exports\nscope.styleResolver = styleResolver;
\n\n})(window.Platform);\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n(function(scope) {\n scope = sco
pe || {};\n scope.external = scope.external || {};\n var target = {\n shado
w: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.w
ebkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n retu
rn shadow && Boolean(shadow.elementFromPoint);\n },\n targetingShadow: fun
ction(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.quer
ySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n
}\n }\n return os;\n },\n allShadows: function(element) {\n
var shadows = [], s = this.shadow(element);\n while(s) {\n sha
dows.push(s);\n s = this.olderShadow(s);\n }\n return shadows;\
n },\n searchRoot: function(inRoot, x, y) {\n if (inRoot) {\n
var t = inRoot.elementFromPoint(x, y);\n var st, sr, os;\n // is e
lement a shadow host?\n sr = this.targetingShadow(t);\n while (sr)
{\n // find the the element inside the shadow root\n st = sr.
elementFromPoint(x, y);\n if (!st) {\n // check for older sh
adows\n sr = this.olderShadow(sr);\n } else {\n /
/ shadowed element may contain a shadow root\n var ssr = this.targeti
ngShadow(st);\n return this.searchRoot(ssr, x, y) || st;\n }
\n }\n // light dom element is the target\n return t;\n
}\n },\n owner: function(element) {\n var s = element;\n // wa
lk up until you hit the shadow root or document\n while (s.parentNode) {\n
s = s.parentNode;\n }\n // the owner element is expected to be
a Document or ShadowRoot\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeTy
pe != Node.DOCUMENT_FRAGMENT_NODE) {\n s = document;\n }\n retu
rn s;\n },\n findTarget: function(inEvent) {\n var x = inEvent.client
X, y = inEvent.clientY;\n // if the listener is in the shadow root, it is m
uch faster to start there\n var s = this.owner(inEvent.target);\n // i
f x, y is not in this root, fall back to document search\n if (!s.elementFr
omPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s
, x, y);\n }\n };\n scope.targetFinding = target;\n scope.findTarget = tar
get.findTarget.bind(target);\n\n window.PointerEventsPolyfill = scope;\n})(wind
ow.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Authors. All ri
ghts reserved.\n * Use of this source code is governed by a BSD-style\n * licens
e that can be found in the LICENSE file.\n */\n(function() {\n function shadowS
elector(v) {\n return 'body /shadow-deep/ ' + selector(v);\n }\n function s
elector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function rule(v
) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; touch-a
ction-delay: none; }';\n }\n var attrib2css = [\n 'none',\n 'auto',\n
'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\n selectors: [\n
'pan-x pan-y',\n 'pan-y pan-x'\n ]\n }\n ];\n var style
s = '';\n // only install stylesheet if the browser has touch action support\n
var head = document.head;\n var hasNativePE = window.PointerEvent || window.MS
PointerEvent;\n // only add shadow selectors if shadowdom is supported\n var h
asShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot;\n\n
if (hasNativePE) {\n attrib2css.forEach(function(r) {\n if (String(r) =
== r) {\n styles += selector(r) + rule(r) + '\\n';\n if (hasShadow
Root) {\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(shadowSelec
tor) + rule(r.rule) + '\\n';\n }\n }\n });\n\n var el = docume
nt.createElement('style');\n el.textContent = styles;\n document.head.appe
ndChild(el);\n }\n})();\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n/**\n * This is the constructor f
or new PointerEvents.\n *\n * New Pointer Events must be given a type, and an op
tional dictionary of\n * initialization properties.\n *\n * Due to certain platf
orm requirements, events returned from the constructor\n * identify as MouseEven
ts.\n *\n * @constructor\n * @param {String} inType The type of the event to cre
ate.\n * @param {Object} [inDict] An optional dictionary of initial event proper
ties.\n * @return {Event} A new PointerEvent of type `inType` and initialized wi
th 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 MOUSE_DEFAULTS = [\n false,\n false,\n nul
l,\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 function PointerEvent
(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = d
ocument.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false,
inDict.cancelable || false);\n\n // define inherited MouseEvent properties\n
for(var i = 0, p; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n
e[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n e.buttons = inDict.butt
ons || 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 (in
Dict.pressure) {\n pressure = inDict.pressure;\n } else {\n pressur
e = 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.wid
th = inDict.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pr
essure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n
e.pointerType = inDict.pointerType || '';\n e.hwTimestamp = inDict.hwTimesta
mp || 0;\n e.isPrimary = inDict.isPrimary || false;\n return e;\n }\n\n
// attach to window\n if (!scope.PointerEvent) {\n scope.PointerEvent = Poin
terEvent;\n }\n})(window);\n","/*\n * Copyright 2013 The Polymer Authors. All r
ights reserved.\n * Use of this source code is governed by a BSD-style\n * licen
se that can be found in the LICENSE file.\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 = function(){ return this.siz
e; };\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 se
t: 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: funct
ion(inId) {\n return this.keys.indexOf(inId) > -1;\n },\n 'delete': f
unction(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.indexOf(inId);\n retu
rn this.values[i];\n },\n clear: function() {\n this.keys.length = 0;
\n this.values.length = 0;\n },\n // return value, key, map\n forE
ach: function(callback, thisArg) {\n this.values.forEach(function(v, i) {\n
callback.call(thisArg, v, this.keys[i], this);\n }, this);\n },\
n pointers: function() {\n return this.keys.length;\n }\n };\n\n sc
ope.PointerMap = PointerMap;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyr
ight 2013 The Polymer Authors. All rights reserved.\n * Use of this source code
is governed by a BSD-style\n * license that can be found in the LICENSE file.\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 'hwTimestam
p',\n 'isPrimary',\n // event instance\n 'type',\n 'target',\n 'c
urrentTarget',\n 'which',\n 'pageX',\n 'pageY'\n ];\n\n var CLONE_DEF
AULTS = [\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 instan
ce\n '',\n null,\n null,\n 0,\n 0,\n 0\n ];\n\n var HAS_SVG_
INSTANCE = (typeof SVGElementInstance !== 'undefined');\n\n /**\n * This modu
le is for normalizing events. Mouse and Touch events will be\n * collected her
e, and fire PointerEvents that have the same semantics, no\n * matter the sour
ce.\n * Events fired:\n * - pointerdown: a pointing is added\n * - poi
nterup: a pointer is removed\n * - pointermove: a pointer is moved\n * -
pointerover: a pointer crosses into an element\n * - pointerout: a pointer
leaves an element\n * - pointercancel: a pointer will no longer generate eve
nts\n */\n var dispatcher = {\n pointermap: new scope.PointerMap(),\n e
ventMap: Object.create(null),\n captureInfo: Object.create(null),\n // Sco
pe objects for native events.\n // This exists for ease of testing.\n even
tSources: Object.create(null),\n eventSourceList: [],\n /**\n * Add a
new event source that will generate pointer events.\n *\n * `inSource` m
ust contain an array of event names named `events`, and\n * functions with t
he names specified in the `events` array.\n * @param {string} name A name fo
r the event source\n * @param {Object} source A new source of platform event
s.\n */\n registerSource: function(name, source) {\n var s = source;
\n var newEvents = s.events;\n if (newEvents) {\n newEvents.for
Each(function(e) {\n if (s[e]) {\n this.eventMap[e] = s[e].b
ind(s);\n }\n }, this);\n this.eventSources[name] = s;\n
this.eventSourceList.push(s);\n }\n },\n register: function(el
ement) {\n var l = this.eventSourceList.length;\n for (var i = 0, es;
(i < l) && (es = this.eventSourceList[i]); i++) {\n // call eventsource r
egister\n es.register.call(es, element);\n }\n },\n unregister
: function(element) {\n var l = this.eventSourceList.length;\n for (va
r i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n // call
eventsource register\n es.unregister.call(es, element);\n }\n },\
n contains: scope.external.contains || function(container, contained) {\n
return container.contains(contained);\n },\n // EVENTS\n down: functi
on(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent('pointerdown'
, inEvent);\n },\n move: function(inEvent) {\n inEvent.bubbles = true
;\n this.fireEvent('pointermove', inEvent);\n },\n up: function(inEve
nt) {\n inEvent.bubbles = true;\n this.fireEvent('pointerup', inEvent)
;\n },\n enter: function(inEvent) {\n inEvent.bubbles = false;\n
this.fireEvent('pointerenter', inEvent);\n },\n leave: function(inEvent)
{\n inEvent.bubbles = false;\n this.fireEvent('pointerleave', inEvent)
;\n },\n over: function(inEvent) {\n inEvent.bubbles = true;\n t
his.fireEvent('pointerover', inEvent);\n },\n out: function(inEvent) {\n
inEvent.bubbles = true;\n this.fireEvent('pointerout', inEvent);\n }
,\n cancel: function(inEvent) {\n inEvent.bubbles = true;\n this.fi
reEvent('pointercancel', inEvent);\n },\n leaveOut: function(event) {\n
this.out(event);\n if (!this.contains(event.target, event.relatedTarget)
) {\n this.leave(event);\n }\n },\n enterOver: function(event)
{\n this.over(event);\n if (!this.contains(event.target, event.relate
dTarget)) {\n this.enter(event);\n }\n },\n // LISTENER LOGIC\
n eventHandler: function(inEvent) {\n // This is used to prevent multipl
e dispatch of pointerevents 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._handledByPE) {\n re
turn;\n }\n var type = inEvent.type;\n var fn = this.eventMap &&
this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEv
ent._handledByPE = true;\n },\n // set up event listeners\n listen: fun
ction(target, events) {\n events.forEach(function(e) {\n this.addEve
nt(target, e);\n }, this);\n },\n // remove event listeners\n unli
sten: function(target, events) {\n events.forEach(function(e) {\n th
is.removeEvent(target, e);\n }, this);\n },\n addEvent: scope.externa
l.addEvent || function(target, eventName) {\n target.addEventListener(event
Name, this.boundHandler);\n },\n removeEvent: scope.external.removeEvent |
| function(target, eventName) {\n target.removeEventListener(eventName, thi
s.boundHandler);\n },\n // EVENT CREATION AND TRACKING\n /**\n * Cr
eates a new Event of type `inType`, based on the information in\n * `inEvent
`.\n *\n * @param {string} inType A string representing the type of even
t to create\n * @param {Event} inEvent A platform event with a target\n
* @return {Event} A PointerEvent of type `inType`\n */\n makeEvent: funct
ion(inType, inEvent) {\n // relatedTarget must be null if pointer is captur
ed\n if (this.captureInfo[inEvent.pointerId]) {\n inEvent.relatedTar
get = null;\n }\n var e = new PointerEvent(inType, inEvent);\n if
(inEvent.preventDefault) {\n e.preventDefault = inEvent.preventDefault;\
n }\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.makeEvent(inType, inEvent);\n return this.
dispatchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with w
ritable properties.\n *\n * @param {Event} inEvent An event that contain
s properties to copy.\n * @return {Object} An object containing shallow copi
es of `inEvent`'s\n * properties.\n */\n cloneEvent: function(inEv
ent) {\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 sha
dow tree\n // Return the <use> element that is represented by the instanc
e for Safari, Chrome, IE.\n // This is the behavior implemented by Firefo
x.\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedTarget')) {
\n if (eventCopy[p] instanceof SVGElementInstance) {\n event
Copy[p] = eventCopy[p].correspondingUseElement;\n }\n }\n }
\n // keep the semantics of preventDefault\n if (inEvent.preventDefaul
t) {\n eventCopy.preventDefault = function() {\n inEvent.prevent
Default();\n };\n }\n return eventCopy;\n },\n getTarget:
function(inEvent) {\n // if pointer capture is set, route all events for t
he specified pointerId\n // to the capture target\n return this.captur
eInfo[inEvent.pointerId] || inEvent._target;\n },\n setCapture: function(i
nPointerId, inTarget) {\n if (this.captureInfo[inPointerId]) {\n thi
s.releaseCapture(inPointerId);\n }\n this.captureInfo[inPointerId] = i
nTarget;\n var e = document.createEvent('Event');\n e.initEvent('gotpo
intercapture', true, false);\n e.pointerId = inPointerId;\n this.impli
citRelease = this.releaseCapture.bind(this, inPointerId);\n document.addEve
ntListener('pointerup', this.implicitRelease);\n document.addEventListener(
'pointercancel', this.implicitRelease);\n e._target = inTarget;\n this
.asyncDispatchEvent(e);\n },\n releaseCapture: function(inPointerId) {\n
var t = this.captureInfo[inPointerId];\n if (t) {\n var e = docu
ment.createEvent('Event');\n e.initEvent('lostpointercapture', true, fals
e);\n e.pointerId = inPointerId;\n this.captureInfo[inPointerId] =
undefined;\n document.removeEventListener('pointerup', this.implicitRele
ase);\n document.removeEventListener('pointercancel', this.implicitReleas
e);\n e._target = t;\n this.asyncDispatchEvent(e);\n }\n }
,\n /**\n * Dispatches the event to its target.\n *\n * @param {E
vent} inEvent The event to be dispatched.\n * @return {Boolean} True if an e
vent handler returns true, false otherwise.\n */\n dispatchEvent: scope.e
xternal.dispatchEvent || function(inEvent) {\n var t = this.getTarget(inEve
nt);\n if (t) {\n return t.dispatchEvent(inEvent);\n }\n },\
n asyncDispatchEvent: function(inEvent) {\n requestAnimationFrame(this.d
ispatchEvent.bind(this, inEvent));\n }\n };\n dispatcher.boundHandler = dis
patcher.eventHandler.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scop
e.register = dispatcher.register.bind(dispatcher);\n scope.unregister = dispatc
her.unregister.bind(dispatcher);\n})(window.PointerEventsPolyfill);\n","/*\n * C
opyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source c
ode is governed by a BSD-style\n * license that can be found in the LICENSE file
.\n */\n\n/**\n * This module uses Mutation Observers to dynamically adjust whic
h nodes will\n * generate Pointer Events.\n *\n * All nodes that wish to generat
e 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.pro
totype.forEach);\n var map = Array.prototype.map.call.bind(Array.prototype.map)
;\n var toArray = Array.prototype.slice.call.bind(Array.prototype.slice);\n va
r filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n var MO =
window.MutationObserver || window.WebKitMutationObserver;\n var SELECTOR = '[t
ouch-action]';\n var OBSERVER_INIT = {\n subtree: true,\n childList: true
,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: ['t
ouch-action']\n };\n\n function Installer(add, remove, changed, binder) {\n
this.addCallback = add.bind(binder);\n this.removeCallback = remove.bind(bin
der);\n this.changedCallback = changed.bind(binder);\n if (MO) {\n th
is.observer = new MO(this.mutationWatcher.bind(this));\n }\n }\n\n Installe
r.prototype = {\n watchSubtree: function(target) {\n // Only watch scope
s that can target find, as these are top-level.\n // Otherwise we can see d
uplicate additions and removals that add noise.\n //\n // TODO(dfreedm
an): For some instances with ShadowDOMPolyfill, we can see\n // a removal w
ithout an insertion when a node is redistributed among\n // shadows. Since
it all ends up correct in the document, watching only\n // the document wil
l yield the correct mutations 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 === document && document.readyState !== 'complete') {\n
this.installOnLoad();\n } else {\n this.installNewSubtree(target);\n
}\n },\n installNewSubtree: function(target) {\n forEach(this.f
indElements(target), this.addElement, this);\n },\n findElements: function
(target) {\n if (target.querySelectorAll) {\n return target.querySel
ectorAll(SELECTOR);\n }\n return [];\n },\n removeElement: funct
ion(el) {\n this.removeCallback(el);\n },\n addElement: function(el)
{\n this.addCallback(el);\n },\n elementChanged: function(el, oldValu
e) {\n this.changedCallback(el, oldValue);\n },\n concatLists: functi
on(accum, list) {\n return accum.concat(toArray(list));\n },\n // reg
ister all touch-action = none nodes on document load\n installOnLoad: functio
n() {\n document.addEventListener('readystatechange', function() {\n
if (document.readyState === 'complete') {\n this.installNewSubtree(doc
ument);\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.findElements, this);\n // make sure the added nodes are
accounted for\n tree.push(filter(inNodes, this.isElement));\n // flatt
en the list\n return tree.reduce(this.concatLists, []);\n },\n mutati
onWatcher: function(mutations) {\n mutations.forEach(this.mutationHandler,
this);\n },\n mutationHandler: function(m) {\n if (m.type === 'childL
ist') {\n var added = this.flattenMutationTree(m.addedNodes);\n ad
ded.forEach(this.addElement, this);\n var removed = this.flattenMutationT
ree(m.removedNodes);\n removed.forEach(this.removeElement, this);\n
} else if (m.type === 'attributes') {\n this.elementChanged(m.target, m.o
ldValue);\n }\n }\n };\n\n if (!MO) {\n Installer.prototype.watchSu
btree = function(){\n console.warn('PointerEventsPolyfill: MutationObserver
s not found, touch-action will not be dynamically detected');\n };\n }\n\n
scope.Installer = Installer;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyr
ight 2013 The Polymer Authors. All rights reserved.\n * Use of this source code
is governed by a BSD-style\n * license that can be found in the LICENSE file.\n
*/\n\n(function (scope) {\n var dispatcher = scope.dispatcher;\n var pointerma
p = dispatcher.pointermap;\n // radius around touchend that swallows mouse even
ts\n var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HA
S_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons:
1}).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse even
ts\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n e
vents: [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouse
over',\n 'mouseout'\n ],\n register: function(target) {\n dispat
cher.listen(target, this.events);\n },\n unregister: function(target) {\n
dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n
// collide with the global mouse listener\n isEventSimulatedFromTouch: func
tion(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.client
X, 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 prim
ary 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 = dispatc
her.cloneEvent(inEvent);\n // forward mouse preventDefault\n var pd =
e.preventDefault;\n e.preventDefault = function() {\n inEvent.preven
tDefault();\n pd();\n };\n e.pointerId = this.POINTER_ID;\n
e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\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.isEventSi
mulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_ID);\n
// TODO(dfreedman) workaround for some elements not sending mouseup\n
// http://crbug/149091\n if (p) {\n this.cancel(inEvent);\n
}\n var e = this.prepareEvent(inEvent);\n pointermap.set(t
his.POINTER_ID, inEvent);\n dispatcher.down(e);\n }\n },\n mou
semove: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent))
{\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\n
}\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulate
dFromTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n
if (p && p.button === inEvent.button) {\n var e = this.prepareEvent(i
nEvent);\n dispatcher.up(e);\n this.cleanupMouse();\n }
\n }\n },\n mouseover: function(inEvent) {\n if (!this.isEventSi
mulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n
dispatcher.enterOver(e);\n }\n },\n mouseout: function(inEvent) {\
n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.pre
pareEvent(inEvent);\n dispatcher.leaveOut(e);\n }\n },\n cance
l: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatc
her.cancel(e);\n this.cleanupMouse();\n },\n cleanupMouse: function()
{\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEv
ents = mouseEvents;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013
The Polymer Authors. All rights reserved.\n * Use of this source code is govern
ed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(fu
nction(scope) {\n var dispatcher = scope.dispatcher;\n var captureInfo = dispa
tcher.captureInfo;\n var findTarget = scope.findTarget;\n var allShadows = sco
pe.targetFinding.allShadows.bind(scope.targetFinding);\n var pointermap = dispa
tcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototyp
e.map);\n // This should be long enough to ignore compat mouse events made by t
ouch\n var DEDUP_TIMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var ATTRI
B = 'touch-action';\n var INSTALLER;\n // The presence of touch event handlers
blocks scrolling, and so we must be careful to\n // avoid adding handlers unne
cessarily. Chrome plans to add a touch-action-delay property\n // (crbug.com/3
29559) to address this, and once we have that we can opt-in to a simpler\n // h
andler registration mechanism. Rather than try to predict how exactly to opt-in
to\n // that we'll just leave this disabled until there is a build of Chrome t
o test.\n var HAS_TOUCH_ACTION_DELAY = false;\n \n // handler block for nativ
e touch events\n var touchEvents = {\n events: [\n 'touchstart',\n
'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n register: fun
ction(target) {\n if (HAS_TOUCH_ACTION_DELAY) {\n dispatcher.listen(
target, this.events);\n } else {\n INSTALLER.enableOnSubtree(target)
;\n }\n },\n unregister: function(target) {\n if (HAS_TOUCH_ACTI
ON_DELAY) {\n dispatcher.unlisten(target, this.events);\n } else {\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._scrol
lType = st;\n dispatcher.listen(el, this.events);\n // set touch-a
ction 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._scrollTyp
e = undefined;\n dispatcher.unlisten(el, this.events);\n // remove tou
ch-action from shadow\n allShadows(el).forEach(function(s) {\n s._sc
rollType = undefined;\n dispatcher.unlisten(s, this.events);\n }, th
is);\n },\n elementChanged: function(el, oldValue) {\n var a = el.get
Attribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n var o
ldSt = this.touchActionToScrollType(oldValue);\n // simply update scrollTyp
e if listeners are already established\n if (st && oldSt) {\n el._sc
rollType = st;\n allShadows(el).forEach(function(s) {\n s._scrol
lType = st;\n }, this);\n } else if (oldSt) {\n this.elementR
emoved(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$/
\n },\n touchActionToScrollType: function(touchAction) {\n var t = to
uchAction;\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.S
CROLLER.exec(t)) {\n return 'XY';\n }\n },\n POINTER_TYPE: 'to
uch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n ret
urn this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch: functi
on(inTouch) {\n // set primary touch if there no pointers, or the only poin
ter is the mouse\n if (pointermap.pointers() === 0 || (pointermap.pointers(
) === 1 && pointermap.has(1))) {\n this.firstTouch = inTouch.identifier;\
n this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY};\n this.
scrolling = false;\n this.cancelResetClickCount();\n }\n },\n
removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimary) {\n
this.firstTouch = null;\n this.firstXY = null;\n this.reset
ClickCount();\n }\n },\n clickCount: 0,\n resetId: null,\n rese
tClickCount: function() {\n var fn = function() {\n this.clickCount
= 0;\n this.resetId = null;\n }.bind(this);\n this.resetId = se
tTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetClickCount: function(
) {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n
},\n typeToButtons: function(type) {\n var ret = 0;\n if (type ==
= 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n retu
rn ret;\n },\n touchToPointer: function(inTouch) {\n var cte = this.c
urrentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch);\n // Spec
specifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers ca
n start at 0.\n // Add 2 to the touch identifier for compatibility.\n
var id = e.pointerId = inTouch.identifier + 2;\n e.target = captureInfo[id]
|| findTarget(e);\n e.bubbles = true;\n e.cancelable = true;\n e
.detail = this.clickCount;\n e.button = 0;\n e.buttons = this.typeToBu
ttons(cte.type);\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;
\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.press
ure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isP
rimaryTouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n // forwar
d touch preventDefaults\n var self = this;\n e.preventDefault = functi
on() {\n self.scrolling = false;\n self.firstXY = null;\n c
te.preventDefault();\n };\n return e;\n },\n processTouches: fun
ction(inEvent, inFunction) {\n var tl = inEvent.changedTouches;\n this
.currentTouchEvent = inEvent;\n for (var i = 0, t; i < tl.length; i++) {\n
t = tl[i];\n inFunction.call(this, this.touchToPointer(t));\n
}\n },\n // For single axis scrollers, determines whether the element sho
uld emit\n // pointer events or behave as a scroller\n shouldScroll: funct
ion(inEvent) {\n if (this.firstXY) {\n var ret;\n var scrollA
xis = inEvent.currentTarget._scrollType;\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 ele
ment should always scroll\n ret = true;\n } else {\n va
r t = inEvent.changedTouches[0];\n // check the intended scroll axis, a
nd other axis\n var a = scrollAxis;\n var oa = scrollAxis ===
'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.firstXY[a])
;\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n
// if delta in the scroll axis > delta other axis, scroll instead of\n
// making events\n ret = da >= doa;\n }\n this.firstXY =
null;\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. T
his\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 // pointercancel for th
is \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = i
nEvent.touches;\n // pointermap.pointers() should be < tl.length here, as t
he touchstart has not\n // been processed yet.\n if (pointermap.pointe
rs() >= tl.length) {\n var d = [];\n pointermap.forEach(function(v
alue, key) {\n // Never remove pointerId == 1, which is mouse.\n
// Touch identifiers are 2 smaller than their pointerId, which is the\n
// index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key
- 2)) {\n var p = value.out;\n d.push(p);\n }\n
}, this);\n d.forEach(this.cancelOut, this);\n }\n },\n
touchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.
setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent)
;\n if (!this.scrolling) {\n this.clickCount++;\n this.proces
sTouches(inEvent, this.overDown);\n }\n },\n overDown: function(inPoi
nter) {\n var p = pointermap.set(inPointer.pointerId, {\n target: in
Pointer.target,\n out: inPointer,\n outTarget: inPointer.target\n
});\n dispatcher.over(inPointer);\n dispatcher.enter(inPointer);\
n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n
if (!this.scrolling) {\n if (this.shouldScroll(inEvent)) {\n
this.scrolling = true;\n this.touchcancel(inEvent);\n } else
{\n inEvent.preventDefault();\n this.processTouches(inEvent, t
his.moveOverOut);\n }\n }\n },\n moveOverOut: function(inPoint
er) {\n var event = inPointer;\n var pointer = pointermap.get(event.po
interId);\n // a finger drifted off the screen, ignore it\n if (!point
er) {\n return;\n }\n var outEvent = pointer.out;\n var ou
tTarget = pointer.outTarget;\n dispatcher.move(event);\n if (outEvent
&& outTarget !== event.target) {\n outEvent.relatedTarget = event.target;
\n event.relatedTarget = outTarget;\n // recover from retargeting
by shadow\n outEvent.target = outTarget;\n if (event.target) {\n
dispatcher.leaveOut(outEvent);\n dispatcher.enterOver(event);\n
} else {\n // clean up case when finger leaves the screen\n
event.target = outTarget;\n event.relatedTarget = null;\n
this.cancelOut(event);\n }\n }\n pointer.out = event;\n
pointer.outTarget = event.target;\n },\n touchend: function(inEvent) {\n
this.dedupSynthMouse(inEvent);\n this.processTouches(inEvent, this.upOu
t);\n },\n upOut: function(inPointer) {\n if (!this.scrolling) {\n
dispatcher.up(inPointer);\n dispatcher.out(inPointer);\n disp
atcher.leave(inPointer);\n }\n this.cleanUpPointer(inPointer);\n },
\n touchcancel: function(inEvent) {\n this.processTouches(inEvent, this.
cancelOut);\n },\n cancelOut: function(inPointer) {\n dispatcher.canc
el(inPointer);\n dispatcher.out(inPointer);\n dispatcher.leave(inPoint
er);\n this.cleanUpPointer(inPointer);\n },\n cleanUpPointer: functio
n(inPointer) {\n pointermap['delete'](inPointer.pointerId);\n this.rem
ovePrimaryPointer(inPointer);\n },\n // prevent synth mouse events from cr
eating pointer events\n dedupSynthMouse: function(inEvent) {\n var lts =
scope.mouseEvents.lastTouches;\n var t = inEvent.changedTouches[0];\n
// only the primary finger will synth mouse events\n if (this.isPrimaryTou
ch(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.splic
e(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, D
EDUP_TIMEOUT);\n }\n }\n };\n\n if (!HAS_TOUCH_ACTION_DELAY) {\n IN
STALLER = new scope.Installer(touchEvents.elementAdded, touchEvents.elementRemov
ed, touchEvents.elementChanged, touchEvents);\n }\n\n scope.touchEvents = touc
hEvents;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polyme
r Authors. All rights reserved.\n * Use of this source code is governed by a BSD
-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scop
e) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointe
rmap;\n var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerE
vent.MSPOINTER_TYPE_MOUSE === 'number';\n var msEvents = {\n events: [\n
'MSPointerDown',\n 'MSPointerMove',\n 'MSPointerUp',\n 'MSPoint
erOut',\n 'MSPointerOver',\n 'MSPointerCancel',\n 'MSGotPointerCa
pture',\n 'MSLostPointerCapture'\n ],\n register: function(target) {\
n dispatcher.listen(target, this.events);\n },\n unregister: function
(target) {\n dispatcher.unlisten(target, this.events);\n },\n POINTER
_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n
'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEvent;\n
if (HAS_BITMAP_TYPE) {\n e = dispatcher.cloneEvent(inEvent);\n
e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n }\n retu
rn e;\n },\n cleanup: function(id) {\n pointermap['delete'](id);\n
},\n MSPointerDown: function(inEvent) {\n pointermap.set(inEvent.pointe
rId, inEvent);\n var e = this.prepareEvent(inEvent);\n dispatcher.down
(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this.prepare
Event(inEvent);\n dispatcher.move(e);\n },\n MSPointerUp: function(in
Event) {\n var e = this.prepareEvent(inEvent);\n dispatcher.up(e);\n
this.cleanup(inEvent.pointerId);\n },\n MSPointerOut: function(inEvent
) {\n var e = this.prepareEvent(inEvent);\n dispatcher.leaveOut(e);\n
},\n MSPointerOver: function(inEvent) {\n var e = this.prepareEvent(i
nEvent);\n dispatcher.enterOver(e);\n },\n MSPointerCancel: function(
inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.cancel(e
);\n this.cleanup(inEvent.pointerId);\n },\n MSLostPointerCapture: fu
nction(inEvent) {\n var e = dispatcher.makeEvent('lostpointercapture', inEv
ent);\n dispatcher.dispatchEvent(e);\n },\n MSGotPointerCapture: func
tion(inEvent) {\n var e = dispatcher.makeEvent('gotpointercapture', inEvent
);\n dispatcher.dispatchEvent(e);\n }\n };\n\n scope.msEvents = msEven
ts;\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Aut
hors. All rights reserved.\n * Use of this source code is governed by a BSD-styl
e\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This module
contains the handlers for native platform events.\n * From here, the dispatcher
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\n // only activate if this platform does not have pointer
events\n if (window.PointerEvent !== scope.PointerEvent) {\n\n if (window.na
vigator.msPointerEnabled) {\n var tp = window.navigator.msMaxTouchPoints;\n
Object.defineProperty(window.navigator, 'maxTouchPoints', {\n value
: tp,\n enumerable: true\n });\n dispatcher.registerSource('ms'
, scope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope
.mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatch
er.registerSource('touch', scope.touchEvents);\n }\n }\n\n dispatcher
.register(document);\n }\n})(window.PointerEventsPolyfill);\n","/*\n * Copyrigh
t 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is
governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\
n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var n = window.na
vigator;\n var s, r;\n function assertDown(id) {\n if (!dispatcher.pointerm
ap.has(id)) {\n throw new Error('InvalidPointerId');\n }\n }\n if (n.m
sPointerEnabled) {\n s = function(pointerId) {\n assertDown(pointerId);\
n this.msSetPointerCapture(pointerId);\n };\n r = function(pointerId)
{\n assertDown(pointerId);\n this.msReleasePointerCapture(pointerId);
\n };\n } else {\n s = function setPointerCapture(pointerId) {\n ass
ertDown(pointerId);\n dispatcher.setCapture(pointerId, this);\n };\n
r = function releasePointerCapture(pointerId) {\n assertDown(pointerId);\n
dispatcher.releaseCapture(pointerId, this);\n };\n }\n if (window.Elem
ent && !Element.prototype.setPointerCapture) {\n Object.defineProperties(Elem
ent.prototype, {\n 'setPointerCapture': {\n value: s\n },\n
'releasePointerCapture': {\n value: r\n }\n });\n }\n})(window
.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Authors. All righ
ts reserved.\n * Use of this source code is governed by a BSD-style\n * license
that can be found in the LICENSE file.\n */\n\n(function(scope) {\n /**\n * T
his class contains the gesture recognizers that create the PointerGesture\n *
events.\n *\n * @class PointerGestures\n * @static\n */\n scope = scope
|| {};\n scope.utils = {\n LCA: {\n // Determines the lowest node in t
he ancestor chain of a and b\n find: function(a, b) {\n if (a === b)
{\n return a;\n }\n // fast case, a is a direct descenda
nt of b or vice versa\n if (a.contains) {\n if (a.contains(b)) {
\n return a;\n }\n if (b.contains(a)) {\n
return b;\n }\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 = this.walk
(a, 1);\n b = this.walk(b, 1);\n }\n return a;\n },\
n walk: function(n, u) {\n for (var i = 0; i < u; i++) {\n
n = n.parentNode;\n }\n return n;\n },\n depth: function
(n) {\n var d = 0;\n while(n) {\n d++;\n n = n.p
arentNode;\n }\n return d;\n }\n }\n };\n scope.findLCA
= function(a, b) {\n return scope.utils.LCA.find(a, b);\n }\n window.Pointe
rGestures = scope;\n})(window.PointerGestures);\n","/*\n * Copyright 2013 The Po
lymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Th
is module implements an map of pointer states\n */\n(function(scope) {\n var US
E_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = functio
n(){ 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.p
rototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexO
f(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.indexO
f(inId);\n return this.values[i];\n },\n clear: function() {\n t
his.keys.length = 0;\n this.values.length = 0;\n },\n // return value
, key, map\n forEach: function(callback, thisArg) {\n this.values.forEac
h(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.PointerGestures);\n"
,"/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of thi
s source code is governed by a BSD-style\n * license that can be found in the LI
CENSE file.\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 // event instance\n 'type',\n 'ta
rget',\n 'currentTarget',\n 'screenX',\n 'screenY',\n 'pageX',\n
'pageY',\n 'tapPrevented'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEven
t\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 L
evel 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 ];\n\n var dispatcher = {\n handled
Events: new WeakMap(),\n targets: new WeakMap(),\n handlers: {},\n reco
gnizers: {},\n events: {},\n // Add a new gesture recognizer to the event
listeners.\n // Recognizer needs an `events` property.\n registerRecognize
r: function(inName, inRecognizer) {\n var r = inRecognizer;\n this.rec
ognizers[inName] = r;\n r.events.forEach(function(e) {\n if (r[e]) {
\n this.events[e] = true;\n var f = r[e].bind(r);\n t
his.addHandler(e, f);\n }\n }, this);\n },\n addHandler: funct
ion(inEvent, inFn) {\n var e = inEvent;\n if (!this.handlers[e]) {\n
this.handlers[e] = [];\n }\n this.handlers[e].push(inFn);\n }
,\n // add event listeners for inTarget\n registerTarget: function(inTarge
t) {\n this.listen(Object.keys(this.events), inTarget);\n },\n // rem
ove event listeners for inTarget\n unregisterTarget: function(inTarget) {\n
this.unlisten(Object.keys(this.events), inTarget);\n },\n // LISTENER
LOGIC\n eventHandler: function(inEvent) {\n if (this.handledEvents.get(i
nEvent)) {\n return;\n }\n var type = inEvent.type, fns = this.
handlers[type];\n if (fns) {\n this.makeQueue(fns, inEvent);\n
}\n this.handledEvents.set(inEvent, true);\n },\n // queue event for
async dispatch\n makeQueue: function(inHandlerFns, inEvent) {\n // must
clone events to keep the (possibly shadowed) target correct for\n // async
dispatching\n var e = this.cloneEvent(inEvent);\n requestAnimationFram
e(this.runQueue.bind(this, inHandlerFns, e));\n },\n // Dispatch the queue
d events\n runQueue: function(inHandlers, inEvent) {\n this.currentPoint
erId = inEvent.pointerId;\n for (var i = 0, f, l = inHandlers.length; (i <
l) && (f = inHandlers[i]); i++) {\n f(inEvent);\n }\n this.curr
entPointerId = 0;\n },\n // set up event listeners\n listen: function(i
nEvents, inTarget) {\n inEvents.forEach(function(e) {\n this.addEven
t(e, this.boundHandler, false, inTarget);\n }, this);\n },\n // remov
e event listeners\n unlisten: function(inEvents) {\n inEvents.forEach(fu
nction(e) {\n this.removeEvent(e, this.boundHandler, false, inTarget);\n
}, this);\n },\n addEvent: function(inEventName, inEventHandler, inCa
pture, inTarget) {\n inTarget.addEventListener(inEventName, inEventHandler,
inCapture);\n },\n removeEvent: function(inEventName, inEventHandler, inC
apture, inTarget) {\n inTarget.removeEventListener(inEventName, inEventHand
ler, inCapture);\n },\n // EVENT CREATION AND TRACKING\n // Creates a n
ew Event of type `inType`, based on the information in\n // `inEvent`.\n m
akeEvent: function(inType, inDict) {\n return new PointerGestureEvent(inTyp
e, inDict);\n },\n /*\n * Returns a snapshot of inEvent, with writable
properties.\n *\n * @method cloneEvent\n * @param {Event} inEvent A
n event that contains properties to copy.\n * @return {Object} An object con
taining shallow copies of `inEvent`'s\n * properties.\n */\n clone
Event: function(inEvent) {\n var eventCopy = {}, 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 }\n return eventCopy;\n },\n
// Dispatches the event to its target.\n dispatchEvent: function(inEvent,
inTarget) {\n var t = inTarget || this.targets.get(inEvent);\n if (t)
{\n t.dispatchEvent(inEvent);\n if (inEvent.tapPrevented) {\n
this.preventTap(this.currentPointerId);\n }\n }\n },\n a
syncDispatchEvent: function(inEvent, inTarget) {\n requestAnimationFrame(th
is.dispatchEvent.bind(this, inEvent, inTarget));\n },\n preventTap: functi
on(inPointerId) {\n var t = this.recognizers.tap;\n if (t){\n t
.preventTap(inPointerId);\n }\n }\n };\n dispatcher.boundHandler = dis
patcher.eventHandler.bind(dispatcher);\n // recognizers call into the dispatche
r and load later\n // solve the chicken and egg problem by having registerScope
s module run last\n dispatcher.registerQueue = [];\n dispatcher.immediateRegis
ter = false;\n scope.dispatcher = dispatcher;\n /**\n * Enable gesture event
s for a given scope, typically\n * [ShadowRoots](https://dvcs.w3.org/hg/webcom
ponents/raw-file/tip/spec/shadow/index.html#shadow-root-object).\n *\n * @fo
r PointerGestures\n * @method register\n * @param {ShadowRoot} scope A top l
evel scope to enable gesture\n * support on.\n */\n scope.register = functi
on(inScope) {\n if (dispatcher.immediateRegister) {\n var pe = window.Po
interEventsPolyfill;\n if (pe) {\n pe.register(inScope);\n }\n
scope.dispatcher.registerTarget(inScope);\n } else {\n dispatcher.r
egisterQueue.push(inScope);\n }\n };\n scope.register(document);\n})(window
.PointerGestures);\n","/*\n * Copyright 2013 The Polymer Authors. All rights res
erved.\n * Use of this source code is governed by a BSD-style\n * license that c
an be found in the LICENSE file.\n */\n\n/**\n * This event is fired when a poin
ter is held down for 200ms.\n *\n * @module PointerGestures\n * @submodule Event
s\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 position of
the held pointer\n * @type Number\n * @property clientX\n */\n/**\n * Screen Y a
xis position of the held pointer\n * @type Number\n * @property clientY\n */\n/*
*\n * Type of pointer that made the holding event.\n * @type String\n * @propert
y pointerType\n */\n/**\n * This event is fired every 200ms while a pointer is h
eld down.\n *\n * @class holdpulse\n * @extends 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 r
eleased\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var
hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n
HOLD_DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not cou
nting as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'pointerdown',\
n 'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n he
ldPointer: null,\n holdJob: null,\n pulse: function() {\n var hold =
Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'holdpuls
e' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\
n cancel: function() {\n clearInterval(this.holdJob);\n if (this.he
ld) {\n this.fireHold('release');\n }\n this.held = false;\n
this.heldPointer = null;\n this.target = null;\n this.holdJob = nul
l;\n },\n pointerdown: 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 pointerup: function(inEvent) {\n if (t
his.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n
this.cancel();\n }\n },\n pointercancel: function(inEvent) {\n t
his.cancel();\n },\n pointermove: function(inEvent) {\n if (this.held
Pointer && this.heldPointer.pointerId === inEvent.pointerId) {\n var x =
inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - t
his.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {
\n this.cancel();\n }\n }\n },\n fireHold: function(i
nType, inHoldTime) {\n var p = {\n pointerType: this.heldPointer.poi
nterType,\n clientX: this.heldPointer.clientX,\n clientY: this.hel
dPointer.clientY\n };\n if (inHoldTime) {\n p.holdTime = inHold
Time;\n }\n var e = dispatcher.makeEvent(inType, p);\n dispatcher
.dispatchEvent(e, this.target);\n if (e.tapPrevented) {\n dispatcher
.preventTap(this.heldPointer.pointerId);\n }\n }\n };\n dispatcher.reg
isterRecognizer('hold', hold);\n})(window.PointerGestures);\n","/*\n * Copyright
2013 The Polymer Authors. All rights reserved.\n * Use of this source code is g
overned by a BSD-style\n * license that can be found in the LICENSE file.\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 * @pro
perty dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n * @typ
e Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction since th
e last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved in t
he y direction since the last track.\n * @type Number\n * @property ddy\n */\n/*
*\n * The clientX position of the track gesture.\n * @type Number\n * @property
clientX\n */\n/**\n * The clientY position of the track gesture.\n * @type Numbe
r\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 trac
k gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX positi
on of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n * Th
e screenY position of the track gesture.\n * @type Number\n * @property screenY\
n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n * @pr
operty xDirection\n */\n/**\n * The last y axis direction of the pointer.\n * @t
ype Number\n * @property yDirection\n */\n/**\n * A shared object between all tr
acking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The elemen
t 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 moveme
nt being tracked.\n *\n * @class track\n * @extends trackstart\n */\n/**\n * Thi
s event fires when the pointer is no longer being tracked.\n *\n * @class tracke
nd\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher = scop
e.dispatcher;\n var pointermap = new scope.PointerMap();\n var track = {\n
events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\
n 'pointercancel'\n ],\n WIGGLE_THRESHOLD: 4,\n clampDir: func
tion(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPosition
Delta: 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, inEv
ent, inTrackingData) {\n var t = inTrackingData;\n var d = this.calc
PositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t.l
astMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clampD
ir(dd.x);\n }\n if (dd.y) {\n t.yDirection = this.clampDir(d
d.y);\n }\n var trackData = {\n dx: d.x,\n dy: d.y,\
n ddx: dd.x,\n ddy: dd.y,\n clientX: inEvent.clientX,\n
clientY: inEvent.clientY,\n pageX: inEvent.pageX,\n page
Y: inEvent.pageY,\n screenX: inEvent.screenX,\n screenY: inEvent
.screenY,\n xDirection: t.xDirection,\n yDirection: t.yDirection
,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.target,\n
pointerType: inEvent.pointerType\n };\n var e = dispatcher.ma
keEvent(inType, trackData);\n t.lastMoveEvent = inEvent;\n dispatche
r.dispatchEvent(e, t.downTarget);\n },\n pointerdown: function(inEvent)
{\n if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.bu
ttons === 1 : true)) {\n var p = {\n downEvent: inEvent,\n
downTarget: inEvent.target,\n trackInfo: {},\n lastMo
veEvent: null,\n xDirection: 0,\n yDirection: 0,\n
tracking: false\n };\n pointermap.set(inEvent.pointerId, p);\n
}\n },\n pointermove: function(inEvent) {\n var p = pointerm
ap.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 }\n
},\n pointerup: function(inEvent) {\n var p = pointermap.get(inEv
ent.pointerId);\n if (p) {\n if (p.tracking) {\n this.fi
reTrack('trackend', inEvent, p);\n }\n pointermap.delete(inEvent
.pointerId);\n }\n },\n pointercancel: function(inEvent) {\n
this.pointerup(inEvent);\n }\n };\n dispatcher.registerRecognizer('trac
k', track);\n })(window.PointerGestures);\n","/*\n * Copyright 2013 The Polymer
Authors. All rights reserved.\n * Use of this source code is governed by a BSD-s
tyle\n * license that can be found in the LICENSE file.\n */\n\n/**\n * This eve
nt denotes a rapid down/move/up sequence from a pointer.\n *\n * The event is se
nt to the first element the pointer went down on.\n *\n * @module PointerGesture
s\n * @submodule Events\n * @class flick\n */\n/**\n * Signed velocity of the fl
ick in the x direction.\n * @property xVelocity\n * @type Number\n */\n/**\n * S
igned velocity of the flick in the y direction.\n * @type Number\n * @property y
Velocity\n */\n/**\n * Unsigned total velocity of the flick.\n * @type Number\n
* @property velocity\n */\n/**\n * Angle of the flick in degrees, with 0 along t
he\n * positive x axis.\n * @type Number\n * @property angle\n */\n/**\n * Axis
with the greatest absolute velocity. Denoted\n * with 'x' or 'y'.\n * @type Stri
ng\n * @property majorAxis\n */\n/**\n * Type of the pointer that made the flick
.\n * @type String\n * @property pointerType\n */\n\n(function(scope) {\n var d
ispatcher = scope.dispatcher;\n var flick = {\n // TODO(dfreedman): value sh
ould be low enough for low speed flicks, but\n // high enough to remove accid
ental flicks\n MIN_VELOCITY: 0.5 /* px/ms */,\n MAX_QUEUE: 4,\n moveQue
ue: [],\n target: null,\n pointerId: null,\n events: [\n 'pointerd
own',\n 'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n
pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.point
erId) {\n this.pointerId = inEvent.pointerId;\n this.target = inEv
ent.target;\n this.addMove(inEvent);\n }\n },\n pointermove: f
unction(inEvent) {\n if (inEvent.pointerId === this.pointerId) {\n t
his.addMove(inEvent);\n }\n },\n pointerup: function(inEvent) {\n
if (inEvent.pointerId === this.pointerId) {\n this.fireFlick(inEvent);\
n }\n this.cleanup();\n },\n pointercancel: function(inEvent) {\
n this.cleanup();\n },\n cleanup: function() {\n this.moveQueue
= [];\n this.target = null;\n this.pointerId = null;\n },\n addM
ove: function(inEvent) {\n if (this.moveQueue.length >= this.MAX_QUEUE) {\n
this.moveQueue.shift();\n }\n this.moveQueue.push(inEvent);\n
},\n fireFlick: function(inEvent) {\n var e = inEvent;\n var l =
this.moveQueue.length;\n var dt, dx, dy, tx, ty, tv, x = 0, y = 0, v = 0;\
n // flick based off the fastest segment of movement\n for (var i = 0,
m; i < l && (m = this.moveQueue[i]); i++) {\n dt = e.timeStamp - m.timeS
tamp;\n dx = e.clientX - m.clientX, dy = e.clientY - m.clientY;\n
tx = dx / dt, ty = dy / dt, tv = Math.sqrt(tx * tx + ty * ty);\n if (tv >
v) {\n x = tx, y = ty, v = tv;\n }\n }\n var ma = Mat
h.abs(x) > Math.abs(y) ? 'x' : 'y';\n var a = this.calcAngle(x, y);\n
if (Math.abs(v) >= this.MIN_VELOCITY) {\n var ev = dispatcher.makeEvent('
flick', {\n xVelocity: x,\n yVelocity: y,\n velocity:
v,\n angle: a,\n majorAxis: ma,\n pointerType: inEve
nt.pointerType\n });\n dispatcher.dispatchEvent(ev, this.target);\
n }\n },\n calcAngle: function(inX, inY) {\n return (Math.atan2(
inY, inX) * 180 / Math.PI);\n }\n };\n dispatcher.registerRecognizer('flick
', flick);\n})(window.PointerGestures);\n","/*\n * Copyright 2013 The Polymer Au
thors. All rights reserved.\n * Use of this source code is governed by a BSD-sty
le\n * license that can be found in the LICENSE file.\n */\n\n/*\n * Basic strat
egy: find the farthest apart points, use as diameter of circle\n * react to size
change and rotation of the chord\n */\n\n/**\n * @module PointerGestures\n * @s
ubmodule Events\n * @class pinch\n */\n/**\n * Scale of the pinch zoom gesture\n
* @property scale\n * @type Number\n */\n/**\n * Center X position of pointers
causing pinch\n * @property centerX\n * @type Number\n */\n/**\n * Center Y posi
tion of pointers causing pinch\n * @property centerY\n * @type Number\n */\n\n/*
*\n * @module PointerGestures\n * @submodule Events\n * @class rotate\n */\n/**\
n * Angle (in degrees) of rotation. Measured from starting positions of pointers
.\n * @property angle\n * @type Number\n */\n/**\n * Center X position of pointe
rs causing rotation\n * @property centerX\n * @type Number\n */\n/**\n * Center
Y position of pointers causing rotation\n * @property centerY\n * @type Number\n
*/\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap
= new scope.PointerMap();\n var RAD_TO_DEG = 180 / Math.PI;\n var pinch = {\n
events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n
'pointercancel'\n ],\n reference: {},\n pointerdown: function(ev) {
\n pointermap.set(ev.pointerId, ev);\n if (pointermap.pointers() == 2)
{\n var points = this.calcChord();\n var angle = this.calcAngle(p
oints);\n this.reference = {\n angle: angle,\n diameter
: points.diameter,\n target: scope.findLCA(points.a.target, points.b.ta
rget)\n };\n }\n },\n pointerup: function(ev) {\n pointer
map.delete(ev.pointerId);\n },\n pointermove: function(ev) {\n if (po
intermap.has(ev.pointerId)) {\n pointermap.set(ev.pointerId, ev);\n
if (pointermap.pointers() > 1) {\n this.calcPinchRotate();\n }
\n }\n },\n pointercancel: function(ev) {\n this.pointerup(ev);\
n },\n dispatchPinch: function(diameter, points) {\n var zoom = diame
ter / this.reference.diameter;\n var ev = dispatcher.makeEvent('pinch', {\n
scale: zoom,\n centerX: points.center.x,\n centerY: points
.center.y\n });\n dispatcher.dispatchEvent(ev, this.reference.target);
\n },\n dispatchRotate: function(angle, points) {\n var diff = Math.r
ound((angle - this.reference.angle) % 360);\n var ev = dispatcher.makeEvent
('rotate', {\n angle: diff,\n centerX: points.center.x,\n c
enterY: points.center.y\n });\n dispatcher.dispatchEvent(ev, this.refe
rence.target);\n },\n calcPinchRotate: function() {\n var points = th
is.calcChord();\n var diameter = points.diameter;\n var angle = this.c
alcAngle(points);\n if (diameter != this.reference.diameter) {\n thi
s.dispatchPinch(diameter, points);\n }\n if (angle != this.reference.a
ngle) {\n this.dispatchRotate(angle, points);\n }\n },\n calcC
hord: function() {\n var pointers = [];\n pointermap.forEach(function(
p) {\n pointers.push(p);\n });\n var dist = 0;\n // start
with at least two pointers\n var points = {a: pointers[0], b: pointers[1]};
\n var x, y, d;\n for (var i = 0; i < pointers.length; i++) {\n
var a = pointers[i];\n for (var j = i + 1; j < pointers.length; j++) {\n
var b = pointers[j];\n x = Math.abs(a.clientX - b.clientX);\n
y = Math.abs(a.clientY - b.clientY);\n d = x + y;\n
if (d > dist) {\n dist = d;\n points = {a: a, b: b};\n
}\n }\n }\n x = Math.abs(points.a.clientX + points.b.clie
ntX) / 2;\n y = Math.abs(points.a.clientY + points.b.clientY) / 2;\n p
oints.center = { x: x, y: y };\n points.diameter = dist;\n return poin
ts;\n },\n calcAngle: function(points) {\n var x = points.a.clientX -
points.b.clientX;\n var y = points.a.clientY - points.b.clientY;\n re
turn (360 + Math.atan2(y, x) * RAD_TO_DEG) % 360;\n },\n };\n dispatcher.re
gisterRecognizer('pinch', pinch);\n})(window.PointerGestures);\n","/*\n * Copyri
ght 2013 The Polymer Authors. All rights reserved.\n * Use of this source code i
s governed by a BSD-style\n * license that can be found in the LICENSE file.\n *
/\n\n/**\n * This event is fired when a pointer quickly goes down and up, and is
used to\n * denote activation.\n *\n * Any gesture event can prevent the tap ev
ent from being created by calling\n * `event.preventTap`.\n *\n * Any pointer ev
ent can prevent the tap by setting the `tapPrevented` property\n * on itself.\n
*\n * @module PointerGestures\n * @submodule Events\n * @class tap\n */\n/**\n *
X axis position of the tap.\n * @property x\n * @type Number\n */\n/**\n * Y ax
is position of the tap.\n * @property y\n * @type Number\n */\n/**\n * Type of t
he pointer that made the tap.\n * @property pointerType\n * @type String\n */\n(
function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = new
scope.PointerMap();\n var tap = {\n events: [\n 'pointerdown',\n '
pointermove',\n 'pointerup',\n 'pointercancel',\n 'keyup'\n ],
\n pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.
tapPrevented) {\n pointermap.set(inEvent.pointerId, {\n target:
inEvent.target,\n buttons: inEvent.buttons,\n x: inEvent.clien
tX,\n y: inEvent.clientY\n });\n }\n },\n pointermove
: function(inEvent) {\n if (inEvent.isPrimary) {\n var start = point
ermap.get(inEvent.pointerId);\n if (start) {\n if (inEvent.tapPr
evented) {\n pointermap.delete(inEvent.pointerId);\n }\n
}\n }\n },\n shouldTap: function(e, downState) {\n if (!e.ta
pPrevented) {\n if (e.pointerType === 'mouse') {\n // only allow
left click to tap for mouse\n return downState.buttons === 1;\n
} else {\n return true;\n }\n }\n },\n pointerup: fu
nction(inEvent) {\n var start = pointermap.get(inEvent.pointerId);\n i
f (start && this.shouldTap(inEvent, start)) {\n var t = scope.findLCA(sta
rt.target, inEvent.target);\n if (t) {\n var e = dispatcher.make
Event('tap', {\n x: inEvent.clientX,\n y: inEvent.clientY,
\n detail: inEvent.detail,\n pointerType: inEvent.pointerT
ype\n });\n dispatcher.dispatchEvent(e, t);\n }\n
}\n pointermap.delete(inEvent.pointerId);\n },\n pointercancel: funct
ion(inEvent) {\n pointermap.delete(inEvent.pointerId);\n },\n keyup:
function(inEvent) {\n var code = inEvent.keyCode;\n // 32 == spacebar\
n if (code === 32) {\n var t = inEvent.target;\n if (!(t inst
anceof HTMLInputElement || t instanceof HTMLTextAreaElement)) {\n dispa
tcher.dispatchEvent(dispatcher.makeEvent('tap', {\n x: 0,\n
y: 0,\n detail: 0,\n pointerType: 'unavailable'\n
}), t);\n }\n }\n },\n preventTap: function(inPointerId) {\
n pointermap.delete(inPointerId);\n }\n };\n dispatcher.registerRecogn
izer('tap', tap);\n})(window.PointerGestures);\n","/*\n * Copyright 2014 The Pol
ymer Authors. All rights reserved.\n * Use of this source code is governed by a
BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/**\n * Bec
ause recognizers are loaded after dispatcher, we have to wait to register\n * sc
opes until after all the recognizers.\n */\n(function(scope) {\n var dispatcher
= scope.dispatcher;\n function registerScopes() {\n dispatcher.immediateReg
ister = true;\n var rq = dispatcher.registerQueue;\n rq.forEach(scope.regi
ster);\n rq.length = 0;\n }\n if (document.readyState === 'complete') {\n
registerScopes();\n } else {\n // register scopes after a steadystate is r
eached\n // less MutationObserver churn\n document.addEventListener('ready
statechange', function() {\n if (document.readyState === 'complete') {\n
registerScopes();\n }\n });\n }\n})(window.PointerGestures);\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.g
ithub.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 th
e 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
var filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n\n fu
nction getTreeScope(node) {\n while (node.parentNode) {\n node = node.pa
rentNode;\n }\n\n return typeof node.getElementById === 'function' ? node
: null;\n }\n\n Node.prototype.bind = function(name, observable) {\n consol
e.error('Unhandled binding to Node: ', this, name, observable);\n };\n\n funct
ion updateBindings(node, name, binding) {\n var bindings = node.bindings_;\n
if (!bindings)\n bindings = node.bindings_ = {};\n\n if (bindings[nam
e])\n binding[name].close();\n\n return bindings[name] = binding;\n }\n
\n function returnBinding(node, name, binding) {\n return binding;\n }\n\n
function sanitizeValue(value) {\n return value == null ? '' : value;\n }\n\
n function updateText(node, value) {\n node.data = sanitizeValue(value);\n
}\n\n function textBinding(node) {\n return function(value) {\n return
updateText(node, value);\n };\n }\n\n var maybeUpdateBindings = returnBindi
ng;\n\n Object.defineProperty(Platform, 'enableBindingsReflection', {\n get:
function() {\n return maybeUpdateBindings === updateBindings;\n },\n
set: function(enable) {\n maybeUpdateBindings = enable ? updateBindings :
returnBinding;\n return enable;\n },\n configurable: true\n });\n\n
Text.prototype.bind = function(name, value, oneTime) {\n if (name !== 'textC
ontent')\n return Node.prototype.bind.call(this, name, value, oneTime);\n\n
if (oneTime)\n return updateText(this, value);\n\n var observable =
value;\n updateText(this, observable.open(textBinding(this)));\n return ma
ybeUpdateBindings(this, name, observable);\n }\n\n function updateAttribute(el
, name, conditional, value) {\n if (conditional) {\n if (value)\n
el.setAttribute(name, '');\n else\n el.removeAttribute(name);\n
return;\n }\n\n el.setAttribute(name, sanitizeValue(value));\n }\n\n f
unction attributeBinding(el, name, conditional) {\n return function(value) {\
n updateAttribute(el, name, conditional, value);\n };\n }\n\n Element.
prototype.bind = function(name, value, oneTime) {\n var conditional = name[na
me.length - 1] == '?';\n if (conditional) {\n this.removeAttribute(name)
;\n name = name.slice(0, -1);\n }\n\n if (oneTime)\n return upda
teAttribute(this, name, conditional, value);\n\n\n var observable = value;\n
updateAttribute(this, name, conditional,\n observable.open(attributeBi
nding(this, name, conditional)));\n\n return maybeUpdateBindings(this, name,
observable);\n };\n\n var checkboxEventType;\n (function() {\n // Attempt
to feature-detect which event (change or click) is fired first\n // for check
boxes.\n var div = document.createElement('div');\n var checkbox = div.app
endChild(document.createElement('input'));\n checkbox.setAttribute('type', 'c
heckbox');\n var first;\n var count = 0;\n checkbox.addEventListener('c
lick', function(e) {\n count++;\n first = first || 'click';\n });\n
checkbox.addEventListener('change', function() {\n count++;\n firs
t = first || 'change';\n });\n\n var event = document.createEvent('MouseEv
ent');\n event.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, f
alse,\n false, false, false, 0, null);\n checkbox.dispatchEvent(event)
;\n // WebKit/Blink don't fire the change event if the element is outside the
\n // document, so assume 'change' for that case.\n checkboxEventType = co
unt == 1 ? 'change' : first;\n })();\n\n function getEventForInputType(element
) {\n switch (element.type) {\n case 'checkbox':\n return checkbo
xEventType;\n case 'radio':\n case 'select-multiple':\n case 'sel
ect-one':\n return 'change';\n case 'range':\n if (/Trident|M
SIE/.test(navigator.userAgent))\n return 'change';\n default:\n
return 'input';\n }\n }\n\n function updateInput(input, property, valu
e, santizeFn) {\n input[property] = (santizeFn || sanitizeValue)(value);\n }
\n\n function inputBinding(input, property, santizeFn) {\n return function(v
alue) {\n return updateInput(input, property, value, santizeFn);\n }\n
}\n\n function noop() {}\n\n function bindInputEvent(input, property, observab
le, postEventFn) {\n var eventType = getEventForInputType(input);\n\n func
tion eventHandler() {\n observable.setValue(input[property]);\n observ
able.discardChanges();\n (postEventFn || noop)(input);\n Platform.perf
ormMicrotaskCheckpoint();\n }\n input.addEventListener(eventType, eventHan
dler);\n\n return {\n close: function() {\n input.removeEventList
ener(eventType, eventHandler);\n observable.close();\n },\n\n o
bservable_: observable\n }\n }\n\n function booleanSanitize(value) {\n r
eturn Boolean(value);\n }\n\n // |element| is assumed to be an HTMLInputElemen
t with |type| == 'radio'.\n // Returns an array containing all radio buttons ot
her than |element| that\n // have the same |name|, either in the form that |ele
ment| belongs to or,\n // if no form, in the document tree to which |element| b
elongs.\n //\n // This implementation is based upon the HTML spec definition o
f a\n // \"radio button group\":\n // http://www.whatwg.org/specs/web-apps/c
urrent-work/multipage/number-state.html#radio-button-group\n //\n function get
AssociatedRadioButtons(element) {\n if (element.form) {\n return filter(
element.form.elements, function(el) {\n return el != element &&\n
el.tagName == 'INPUT' &&\n el.type == 'radio' &&\n el.
name == element.name;\n });\n } else {\n var treeScope = getTreeSco
pe(element);\n if (!treeScope)\n return [];\n var radios = tree
Scope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + element.nam
e + '\"]');\n return filter(radios, function(el) {\n return el != el
ement && !el.form;\n });\n }\n }\n\n function checkedPostEvent(input)
{\n // Only the radio button that is getting checked gets an event. We\n /
/ therefore find all the associated radio buttons and update their\n // check
binding manually.\n if (input.tagName === 'INPUT' &&\n input.type ===
'radio') {\n getAssociatedRadioButtons(input).forEach(function(radio) {\n
var checkedBinding = radio.bindings_.checked;\n if (checkedBinding
) {\n // Set the value directly to avoid an infinite call stack.\n
checkedBinding.observable_.setValue(false);\n }\n });\n }\n
}\n\n HTMLInputElement.prototype.bind = function(name, value, oneTime) {\n
if (name !== 'value' && name !== 'checked')\n return HTMLElement.prototype.
bind.call(this, name, value, oneTime);\n\n this.removeAttribute(name);\n v
ar sanitizeFn = name == 'checked' ? booleanSanitize : sanitizeValue;\n var po
stEventFn = name == 'checked' ? checkedPostEvent : noop;\n\n if (oneTime)\n
return updateInput(this, name, value, sanitizeFn);\n\n\n var observable =
value;\n var binding = bindInputEvent(this, name, observable, postEventFn);\
n updateInput(this, name,\n observable.open(inputBinding(this,
name, sanitizeFn)),\n sanitizeFn);\n\n // Checkboxes may need
to update bindings of other checkboxes.\n return updateBindings(this, name,
binding);\n }\n\n HTMLTextAreaElement.prototype.bind = function(name, value, o
neTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.ca
ll(this, name, value, oneTime);\n\n this.removeAttribute('value');\n\n if
(oneTime)\n return updateInput(this, 'value', value);\n\n var observable
= value;\n var binding = bindInputEvent(this, 'value', observable);\n upd
ateInput(this, 'value',\n observable.open(inputBinding(this, 'val
ue', sanitizeValue)));\n return maybeUpdateBindings(this, name, binding);\n
}\n\n function updateOption(option, value) {\n var parentNode = option.paren
tNode;;\n var select;\n var selectBinding;\n var oldValue;\n if (par
entNode instanceof HTMLSelectElement &&\n parentNode.bindings_ &&\n
parentNode.bindings_.value) {\n select = parentNode;\n selectBinding
= select.bindings_.value;\n oldValue = select.value;\n }\n\n option.
value = sanitizeValue(value);\n\n if (select && select.value != oldValue) {\n
selectBinding.observable_.setValue(select.value);\n selectBinding.obs
ervable_.discardChanges();\n Platform.performMicrotaskCheckpoint();\n }\
n }\n\n function optionBinding(option) {\n return function(value) {\n
updateOption(option, value);\n }\n }\n\n HTMLOptionElement.prototype.bind =
function(name, value, oneTime) {\n if (name !== 'value')\n return HTMLE
lement.prototype.bind.call(this, name, value, oneTime);\n\n this.removeAttrib
ute('value');\n\n if (oneTime)\n return updateOption(this, value);\n\n
var observable = value;\n var binding = bindInputEvent(this, 'value', obser
vable);\n updateOption(this, observable.open(optionBinding(this)));\n retu
rn maybeUpdateBindings(this, name, binding);\n }\n\n HTMLSelectElement.prototy
pe.bind = function(name, value, oneTime) {\n if (name === 'selectedindex')\n
name = 'selectedIndex';\n\n if (name !== 'selectedIndex' && name !== 'va
lue')\n return HTMLElement.prototype.bind.call(this, name, value, oneTime);
\n\n this.removeAttribute(name);\n\n if (oneTime)\n return updateInpu
t(this, name, value);\n\n var observable = value;\n var binding = bindInpu
tEvent(this, name, observable);\n updateInput(this, name,\n ob
servable.open(inputBinding(this, name)));\n\n // Option update events may nee
d to access select bindings.\n return updateBindings(this, name, binding);\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 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(function(global) {\n
'use strict';\n\n function assert(v) {\n if (!v)\n throw new Error('A
ssertion failed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Arr
ay.prototype.forEach);\n\n function getFragmentRoot(node) {\n var p;\n wh
ile (p = node.parentNode) {\n node = p;\n }\n\n return node;\n }\n\n
function searchRefId(node, id) {\n if (!id)\n return;\n\n var ref;\
n var selector = '#' + id;\n while (!ref) {\n node = getFragmentRoot(
node);\n\n if (node.protoContent_)\n ref = node.protoContent_.queryS
elector(selector);\n else if (node.getElementById)\n ref = node.getE
lementById(id);\n\n if (ref || !node.templateCreator_)\n break\n\n
node = node.templateCreator_;\n }\n\n return ref;\n }\n\n function g
etInstanceRoot(node) {\n while (node.parentNode) {\n node = node.parentN
ode;\n }\n return node.templateCreator_ ? node : null;\n }\n\n var Map;\
n if (global.Map && typeof global.Map.prototype.forEach === 'function') {\n
Map = global.Map;\n } else {\n Map = function() {\n this.keys = [];\n
this.values = [];\n };\n\n Map.prototype = {\n set: function(key,
value) {\n var index = this.keys.indexOf(key);\n if (index < 0) {
\n this.keys.push(key);\n this.values.push(value);\n }
else {\n this.values[index] = value;\n }\n },\n\n get:
function(key) {\n var index = this.keys.indexOf(key);\n if (index
< 0)\n return;\n\n return this.values[index];\n },\n\n
delete: function(key, value) {\n var index = this.keys.indexOf(key);\n
if (index < 0)\n return false;\n\n this.keys.splice(index
, 1);\n this.values.splice(index, 1);\n return true;\n },\n\n
forEach: function(f, opt_this) {\n for (var i = 0; i < this.keys.le
ngth; i++)\n f.call(opt_this || this, this.values[i], this.keys[i], thi
s);\n }\n };\n }\n\n // JScript does not have __proto__. We wrap all o
bject literals with\n // createObject which uses Object.create, Object.definePr
operty and\n // Object.getOwnPropertyDescriptor to create a new object that doe
s the exact\n // same thing. The main downside to this solution is that we have
to extract\n // all those property descriptors for IE.\n var createObject = (
'__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj)
{\n var proto = obj.__proto__;\n if (!proto)\n return ob
j;\n var newObject = Object.create(proto);\n Object.getOwnProperty
Names(obj).forEach(function(name) {\n Object.defineProperty(newObject,
name,\n Object.getOwnPropertyDescriptor(obj, name)
);\n });\n return newObject;\n };\n\n // IE does not support
have Document.prototype.contains.\n if (typeof document.contains != 'function'
) {\n Document.prototype.contains = function(node) {\n if (node === this
|| node.parentNode === this)\n return true;\n return this.documentE
lement.contains(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repe
at';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n 'template':
true,\n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var s
emanticTemplateElements = {\n 'THEAD': true,\n 'TBODY': true,\n 'TFOOT'
: true,\n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'COLGROUP': true
,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGROUP':
true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'undefin
ed';\n if (hasTemplateElement) {\n // TODO(rafaelw): Remove when fix for\n
// https://codereview.chromium.org/164803002/\n // makes it to Chrome relea
se.\n (function() {\n var t = document.createElement('template');\n
var d = t.content.ownerDocument;\n var html = d.appendChild(d.createElemen
t('html'));\n var head = html.appendChild(d.createElement('head'));\n
var base = d.createElement('base');\n base.href = document.baseURI;\n
head.appendChild(base);\n })();\n }\n\n var allTemplatesSelectors = 'templa
te, ' +\n Object.keys(semanticTemplateElements).map(function(tagName) {\n
return tagName.toLowerCase() + '[template]';\n }).join(', ');\n\n fu
nction isSVGTemplate(el) {\n return el.tagName == 'template' &&\n e
l.namespaceURI == 'http://www.w3.org/2000/svg';\n }\n\n function isHTMLTemplat
e(el) {\n return el.tagName == 'TEMPLATE' &&\n el.namespaceURI == '
http://www.w3.org/1999/xhtml';\n }\n\n function isAttributeTemplate(el) {\n
return Boolean(semanticTemplateElements[el.tagName] &&\n el.h
asAttribute('template'));\n }\n\n function isTemplate(el) {\n if (el.isTemp
late_ === undefined)\n el.isTemplate_ = el.tagName == 'TEMPLATE' || isAttri
buteTemplate(el);\n\n return el.isTemplate_;\n }\n\n // FIXME: Observe temp
lates being added/removed from documents\n // FIXME: Expose imperative API to d
ecorate and observe templates in\n // \"disconnected tress\" (e.g. ShadowRoot)\
n document.addEventListener('DOMContentLoaded', function(e) {\n bootstrapTem
platesRecursivelyFrom(document);\n // FIXME: Is this needed? Seems like it sh
ouldn't be.\n Platform.performMicrotaskCheckpoint();\n }, false);\n\n funct
ion forAllTemplatesFrom(node, fn) {\n var subTemplates = node.querySelectorAl
l(allTemplatesSelectors);\n\n if (isTemplate(node))\n fn(node)\n forE
ach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom(node
) {\n function bootstrap(template) {\n if (!HTMLTemplateElement.decorate
(template))\n bootstrapTemplatesRecursivelyFrom(template.content);\n }
\n\n forAllTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTemplateElement)
{\n /**\n * This represents a <template> element.\n * @constructor\n
* @extends {HTMLElement}\n */\n global.HTMLTemplateElement = functio
n() {\n throw TypeError('Illegal constructor');\n };\n }\n\n var hasPr
oto = '__proto__' in {};\n\n function mixin(to, from) {\n Object.getOwnPrope
rtyNames(from).forEach(function(name) {\n Object.defineProperty(to, name,\n
Object.getOwnPropertyDescriptor(from, name));\n }
);\n }\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/
index.html#dfn-template-contents-owner\n function getOrCreateTemplateContentsOw
ner(template) {\n var doc = template.ownerDocument\n if (!doc.defaultView)
\n return doc;\n var d = doc.templateContentsOwner_;\n if (!d) {\n
// TODO(arv): This should either be a Document or HTMLDocument depending\n
// on doc.\n d = doc.implementation.createHTMLDocument('');\n while
(d.lastChild) {\n d.removeChild(d.lastChild);\n }\n doc.templa
teContentsOwner_ = d;\n }\n return d;\n }\n\n function getTemplateStagin
gDocument(template) {\n if (!template.stagingDocument_) {\n var owner =
template.ownerDocument;\n if (!owner.stagingDocument_) {\n owner.sta
gingDocument_ = owner.implementation.createHTMLDocument('');\n\n // TODO(
rafaelw): Remove when fix for\n // https://codereview.chromium.org/164803
002/\n // makes it to Chrome release.\n var base = owner.stagingDo
cument_.createElement('base');\n base.href = document.baseURI;\n o
wner.stagingDocument_.head.appendChild(base);\n\n owner.stagingDocument_.
stagingDocument_ = owner.stagingDocument_;\n }\n\n template.stagingDoc
ument_ = owner.stagingDocument_;\n }\n\n return template.stagingDocument_;
\n }\n\n // For non-template browsers, the parser will disallow <template> in
certain\n // locations, so we allow \"attribute templates\" which combine the t
emplate\n // element with the top-level container node of the content, e.g.\n
//\n // <tr template repeat=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n
//\n // becomes\n //\n // <template repeat=\"{{ foo }}\">\n // + #docu
ment-fragment\n // + <tr class=\"bar\">\n // + <td>Bar</td>\n //\n
function extractTemplateFromAttributeTemplate(el) {\n var template = el.owne
rDocument.createElement('template');\n el.parentNode.insertBefore(template, e
l);\n\n var attribs = el.attributes;\n var count = attribs.length;\n wh
ile (count-- > 0) {\n var attrib = attribs[count];\n if (templateAttri
buteDirectives[attrib.name]) {\n if (attrib.name !== 'template')\n
template.setAttribute(attrib.name, attrib.value);\n el.removeAttribute
(attrib.name);\n }\n }\n\n return template;\n }\n\n function extrac
tTemplateFromSVGTemplate(el) {\n var template = el.ownerDocument.createElemen
t('template');\n el.parentNode.insertBefore(template, el);\n\n var attribs
= el.attributes;\n var count = attribs.length;\n while (count-- > 0) {\n
var attrib = attribs[count];\n template.setAttribute(attrib.name, attr
ib.value);\n el.removeAttribute(attrib.name);\n }\n\n el.parentNode.r
emoveChild(el);\n return template;\n }\n\n function liftNonNativeTemplateCh
ildrenIntoContent(template, el, useRoot) {\n var content = template.content;\
n if (useRoot) {\n content.appendChild(el);\n return;\n }\n\n
var child;\n while (child = el.firstChild) {\n content.appendChild(chil
d);\n }\n }\n\n var templateObserver;\n if (typeof MutationObserver == 'fu
nction') {\n templateObserver = new MutationObserver(function(records) {\n
for (var i = 0; i < records.length; i++) {\n records[i].target.refChan
ged_();\n }\n });\n }\n\n /**\n * Ensures proper API and content mod
el for template elements.\n * @param {HTMLTemplateElement} opt_instanceRef The
template element which\n * |el| template element will return as the value
of its ref(), and whose\n * content will be used as source when createIns
tance() is invoked.\n */\n HTMLTemplateElement.decorate = function(el, opt_in
stanceRef) {\n if (el.templateIsDecorated_)\n return false;\n\n var t
emplateElement = el;\n templateElement.templateIsDecorated_ = true;\n\n va
r isNativeHTMLTemplate = isHTMLTemplate(templateElement) &&\n
hasTemplateElement;\n var bootstrapContents = isNativeHTMLTemplat
e;\n var liftContents = !isNativeHTMLTemplate;\n var liftRoot = false;\n\n
if (!isNativeHTMLTemplate) {\n if (isAttributeTemplate(templateElement)
) {\n assert(!opt_instanceRef);\n templateElement = extractTemplat
eFromAttributeTemplate(el);\n templateElement.templateIsDecorated_ = true
;\n isNativeHTMLTemplate = hasTemplateElement;\n liftRoot = true;\
n } else if (isSVGTemplate(templateElement)) {\n templateElement = e
xtractTemplateFromSVGTemplate(el);\n templateElement.templateIsDecorated_
= true;\n isNativeHTMLTemplate = hasTemplateElement;\n }\n }\n\n
if (!isNativeHTMLTemplate) {\n fixTemplateElementPrototype(templateElem
ent);\n var doc = getOrCreateTemplateContentsOwner(templateElement);\n
templateElement.content_ = doc.createDocumentFragment();\n }\n\n if (opt_
instanceRef) {\n // template is contained within an instance, its direct co
ntent must be\n // empty\n templateElement.instanceRef_ = opt_instance
Ref;\n } else if (liftContents) {\n liftNonNativeTemplateChildrenIntoCon
tent(templateElement,\n el,\n
liftRoot);\n } else if (bootstrapCo
ntents) {\n bootstrapTemplatesRecursivelyFrom(templateElement.content);\n
}\n\n return true;\n };\n\n // TODO(rafaelw): This used to decorate recur
sively all templates from a given\n // node. This happens by default on 'DOMCon
tentLoaded', but may be needed\n // in subtrees not descendent from document (e
.g. ShadowRoot).\n // Review whether this is the right public API.\n HTMLTempl
ateElement.bootstrap = bootstrapTemplatesRecursivelyFrom;\n\n var htmlElement =
global.HTMLUnknownElement || HTMLElement;\n\n var contentDescriptor = {\n g
et: function() {\n return this.content_;\n },\n enumerable: true,\n
configurable: true\n };\n\n if (!hasTemplateElement) {\n // Gecko is more
picky with the prototype than WebKit. Make sure to use the\n // same prototy
pe as created in the constructor.\n HTMLTemplateElement.prototype = Object.cr
eate(htmlElement.prototype);\n\n Object.defineProperty(HTMLTemplateElement.pr
ototype, 'content',\n contentDescriptor);\n }\n\n fun
ction fixTemplateElementPrototype(el) {\n if (hasProto)\n el.__proto__ =
HTMLTemplateElement.prototype;\n else\n mixin(el, HTMLTemplateElement.p
rototype);\n }\n\n function ensureSetModelScheduled(template) {\n if (!temp
late.setModelFn_) {\n template.setModelFn_ = function() {\n template
.setModelFnScheduled_ = false;\n var map = getBindings(template,\n
template.delegate_ && template.delegate_.prepareBinding);\n processB
indings(template, map, template.model_);\n };\n }\n\n if (!template.s
etModelFnScheduled_) {\n template.setModelFnScheduled_ = true;\n Obser
ver.runEOM_(template.setModelFn_);\n }\n }\n\n mixin(HTMLTemplateElement.pr
ototype, {\n bind: function(name, value, oneTime) {\n if (name != 'ref')
\n return Element.prototype.bind.call(this, name, value, oneTime);\n\n
var self = this;\n var ref = oneTime ? value : value.open(function(ref)
{\n self.setAttribute('ref', ref);\n self.refChanged_();\n })
;\n\n this.setAttribute('ref', ref);\n this.refChanged_();\n if (
oneTime)\n return;\n\n if (!this.bindings_) {\n this.bindings
_ = { ref: value };\n } else {\n this.bindings_.ref = value;\n
}\n\n return value;\n },\n\n processBindingDirectives_: function(dire
ctives) {\n if (this.iterator_)\n this.iterator_.closeDeps();\n\n
if (!directives.if && !directives.bind && !directives.repeat) {\n if (
this.iterator_) {\n this.iterator_.close();\n this.iterator_ =
undefined;\n }\n\n return;\n }\n\n if (!this.iterator_)
{\n this.iterator_ = new TemplateIterator(this);\n }\n\n this.
iterator_.updateDependencies(directives, this.model_);\n\n if (templateObse
rver) {\n templateObserver.observe(this, { attributes: true,\n
attributeFilter: ['ref'] });\n }\n\n ret
urn this.iterator_;\n },\n\n createInstance: function(model, bindingDelega
te, delegate_) {\n if (bindingDelegate)\n delegate_ = this.newDelega
te_(bindingDelegate);\n\n if (!this.refContent_)\n this.refContent_
= this.ref_.content;\n var content = this.refContent_;\n if (content.f
irstChild === null)\n return emptyInstance;\n\n var map = this.bindi
ngMap_;\n if (!map || map.content !== content) {\n // TODO(rafaelw):
Setup a MutationObserver on content to detect\n // when the instanceMap
is invalid.\n map = createInstanceBindingMap(content,\n delega
te_ && delegate_.prepareBinding) || [];\n map.content = content;\n
this.bindingMap_ = map;\n }\n\n var stagingDocument = getTemplateStag
ingDocument(this);\n var instance = stagingDocument.createDocumentFragment(
);\n instance.templateCreator_ = this;\n instance.protoContent_ = cont
ent;\n instance.bindings_ = [];\n instance.terminator_ = null;\n
var instanceRecord = instance.templateInstance_ = {\n firstNode: null,\n
lastNode: null,\n model: model\n };\n\n var i = 0;\n
var collectTerminator = false;\n for (var child = content.firstChild; chi
ld; child = child.nextSibling) {\n // The terminator of the instance is t
he clone of the last child of the\n // content. If the last child is an a
ctive template, it may produce\n // instances as a result of production,
so simply collecting the last\n // child of the instance after it has fin
ished producing may be wrong.\n if (child.nextSibling === null)\n
collectTerminator = true;\n\n var clone = cloneAndBindInstance(child, i
nstance, stagingDocument,\n map.children
[i++],\n model,\n
delegate_,\n instance.
bindings_);\n clone.templateInstance_ = instanceRecord;\n if (coll
ectTerminator)\n instance.terminator_ = clone;\n }\n\n instan
ceRecord.firstNode = instance.firstChild;\n instanceRecord.lastNode = insta
nce.lastChild;\n instance.templateCreator_ = undefined;\n instance.pro
toContent_ = undefined;\n return instance;\n },\n\n get model() {\n
return this.model_;\n },\n\n set model(model) {\n this.model_ = m
odel;\n ensureSetModelScheduled(this);\n },\n\n get bindingDelegate()
{\n return this.delegate_ && this.delegate_.raw;\n },\n\n refChanged
_: function() {\n if (!this.iterator_ || this.refContent_ === this.ref_.con
tent)\n return;\n\n this.refContent_ = undefined;\n this.iterat
or_.valueChanged();\n this.iterator_.updateIteratedValue();\n },\n\n
clear: function() {\n this.model_ = undefined;\n this.delegate_ = unde
fined;\n if (this.bindings_ && this.bindings_.ref)\n this.bindings_.
ref.close()\n this.refContent_ = undefined;\n if (!this.iterator_)\n
return;\n this.iterator_.valueChanged();\n this.iterator_.close(
)\n this.iterator_ = undefined;\n },\n\n setDelegate_: function(deleg
ate) {\n this.delegate_ = delegate;\n this.bindingMap_ = undefined;\n
if (this.iterator_) {\n this.iterator_.instancePositionChangedFn_ =
undefined;\n this.iterator_.instanceModelFn_ = undefined;\n }\n }
,\n\n newDelegate_: function(bindingDelegate) {\n if (!bindingDelegate)\
n return {};\n\n function delegateFn(name) {\n var fn = bindi
ngDelegate && bindingDelegate[name];\n if (typeof fn != 'function')\n
return;\n\n return function() {\n return fn.apply(bindingD
elegate, arguments);\n };\n }\n\n return {\n raw: bindin
gDelegate,\n prepareBinding: delegateFn('prepareBinding'),\n prepa
reInstanceModel: delegateFn('prepareInstanceModel'),\n prepareInstancePos
itionChanged:\n delegateFn('prepareInstancePositionChanged')\n }
;\n },\n\n // TODO(rafaelw): Assigning .bindingDelegate always succeeds. I
t may\n // make sense to issue a warning or even throw if the template is alr
eady\n // \"activated\", since this would be a strange thing to do.\n set
bindingDelegate(bindingDelegate) {\n if (this.delegate_) {\n throw E
rror('Template must be cleared before a new bindingDelegate ' +\n
'can be assigned');\n }\n\n this.setDelegate_(this.newDelegate_(b
indingDelegate));\n },\n\n get ref_() {\n var ref = searchRefId(this,
this.getAttribute('ref'));\n if (!ref)\n ref = this.instanceRef_;\n
\n if (!ref)\n return this;\n\n var nextRef = ref.ref_;\n
return nextRef ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefin
ed if there are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, T
EXT)+] if there is at least one mustache.\n function parseMustaches(s, name, no
de, prepareBindingFn) {\n if (!s || !s.length)\n return;\n\n var toke
ns;\n var length = s.length;\n var startIndex = 0, lastIndex = 0, endIndex
= 0;\n var onlyOneTime = true;\n while (lastIndex < length) {\n var
startIndex = s.indexOf('{{', lastIndex);\n var oneTimeStart = s.indexOf('[[
', lastIndex);\n var oneTime = false;\n var terminator = '}}';\n\n
if (oneTimeStart >= 0 &&\n (startIndex < 0 || oneTimeStart < startInd
ex)) {\n startIndex = oneTimeStart;\n oneTime = true;\n ter
minator = ']]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.indexOf(ter
minator, startIndex + 2);\n\n if (endIndex < 0) {\n if (!tokens)\n
return;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n bre
ak;\n }\n\n tokens = tokens || [];\n tokens.push(s.slice(lastInde
x, startIndex)); // TEXT\n var pathString = s.slice(startIndex + 2, endInde
x).trim();\n tokens.push(oneTime); // ONE_TIME?\n onlyOneTime = onlyOn
eTime && oneTime;\n var delegateFn = prepareBindingFn &&\n
prepareBindingFn(pathString, name, node);\n // Don't try to parse the
expression if there's a prepareBinding function\n if (delegateFn == null)
{\n tokens.push(Path.get(pathString)); // PATH\n } else {\n t
okens.push(null);\n }\n tokens.push(delegateFn); // DELEGATE_FN\n
lastIndex = endIndex + 2;\n }\n\n if (lastIndex === length)\n tokens
.push(''); // TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens.i
sSimplePath = tokens.hasOnePath &&\n tokens[0] == '' &&
\n tokens[4] == '';\n tokens.onlyOneTime = onlyOneTi
me;\n\n tokens.combinator = function(values) {\n var newValue = tokens[0
];\n\n for (var i = 1; i < tokens.length; i += 4) {\n var value = to
kens.hasOnePath ? values : values[(i - 1) / 4];\n if (value !== undefined
)\n newValue += value;\n newValue += tokens[i + 3];\n }\n\n
return newValue;\n }\n\n return tokens;\n };\n\n function processO
neTimeBinding(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n
var delegateFn = tokens[3];\n var value = delegateFn ? delegateFn(model, no
de, true) :\n tokens[2].getValueFrom(model);\n
return tokens.isSimplePath ? value : tokens.combinator(value);\n }\n\n v
ar values = [];\n for (var i = 1; i < tokens.length; i += 4) {\n var del
egateFn = tokens[i + 2];\n values[(i - 1) / 4] = delegateFn ? delegateFn(mo
del, node) :\n tokens[i + 1].getValueFrom(model);\n }\n\n return
tokens.combinator(values);\n }\n\n function processSinglePathBinding(name, tok
ens, node, model) {\n var delegateFn = tokens[3];\n var observer = delegat
eFn ? delegateFn(model, node, false) :\n new PathObserver(model, tokens[2
]);\n\n return tokens.isSimplePath ? observer :\n new ObserverTransfor
m(observer, tokens.combinator);\n }\n\n function processBinding(name, tokens,
node, model) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding(
name, tokens, node, model);\n\n if (tokens.hasOnePath)\n return processS
inglePathBinding(name, tokens, node, model);\n\n var observer = new CompoundO
bserver();\n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTim
e = tokens[i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn) {
\n var value = delegateFn(model, node, oneTime);\n if (oneTime)\n
observer.addPath(value)\n else\n observer.addObserver(v
alue);\n continue;\n }\n\n var path = tokens[i + 1];\n if
(oneTime)\n observer.addPath(path.getValueFrom(model))\n else\n
observer.addPath(model, path);\n }\n\n return new ObserverTransform(obs
erver, tokens.combinator);\n }\n\n function processBindings(node, bindings, mo
del, instanceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n
var name = bindings[i]\n var tokens = bindings[i + 1];\n var value
= processBinding(name, tokens, node, model);\n var binding = node.bind(nam
e, value, tokens.onlyOneTime);\n if (binding && instanceBindings)\n
instanceBindings.push(binding);\n }\n\n if (!bindings.isTemplate)\n r
eturn;\n\n node.model_ = model;\n var iter = node.processBindingDirectives
_(bindings);\n if (instanceBindings && iter)\n instanceBindings.push(ite
r);\n }\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var v
= el.getAttribute(name);\n return parseMustaches(v == '' ? '{{}}' : v, name,
el, prepareBindingFn);\n }\n\n function parseAttributeBindings(element, prepa
reBindingFn) {\n assert(element);\n\n var bindings = [];\n var ifFound
= false;\n var bindFound = false;\n\n for (var i = 0; i < element.attribut
es.length; i++) {\n var attr = element.attributes[i];\n var name = att
r.name;\n var value = attr.value;\n\n // Allow bindings expressed in a
ttributes to be prefixed with underbars.\n // We do this to allow correct s
emantics for browsers that don't implement\n // <template> where certain at
tributes might trigger side-effects -- and\n // for IE which sanitizes cert
ain attributes, disallowing mustache\n // replacements in their text.\n
while (name[0] === '_') {\n name = name.substring(1);\n }\n\n
if (isTemplate(element) &&\n (name === IF || name === BIND || name ===
REPEAT)) {\n continue;\n }\n\n var tokens = parseMustaches(val
ue, name, element,\n prepareBindingFn);\n
if (!tokens)\n continue;\n\n bindings.push(name, tokens);\n }\n\n
if (isTemplate(element)) {\n bindings.isTemplate = true;\n binding
s.if = parseWithDefault(element, IF, prepareBindingFn);\n bindings.bind = p
arseWithDefault(element, BIND, prepareBindingFn);\n bindings.repeat = parse
WithDefault(element, REPEAT, prepareBindingFn);\n\n if (bindings.if && !bin
dings.bind && !bindings.repeat)\n bindings.bind = parseMustaches('{{}}',
BIND, element, prepareBindingFn);\n }\n\n return bindings;\n }\n\n funct
ion getBindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEMEN
T_NODE)\n return parseAttributeBindings(node, prepareBindingFn);\n\n if
(node.nodeType === Node.TEXT_NODE) {\n var tokens = parseMustaches(node.dat
a, 'textContent', node,\n prepareBindingFn);\n
if (tokens)\n return ['textContent', tokens];\n }\n\n return [
];\n }\n\n function cloneAndBindInstance(node, parent, stagingDocument, bindin
gs, model,\n delegate,\n
instanceBindings,\n instanceRecord) {\n
var clone = parent.appendChild(stagingDocument.importNode(node, false));\n\n
var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibl
ing) {\n cloneAndBindInstance(child, clone, stagingDocument,\n
bindings.children[i++],\n model,\n
delegate,\n instanceBindings)
;\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateElement.decorate(c
lone, node);\n if (delegate)\n clone.setDelegate_(delegate);\n }\
n\n processBindings(clone, bindings, model, instanceBindings);\n return cl
one;\n }\n\n function createInstanceBindingMap(node, prepareBindingFn) {\n
var map = getBindings(node, prepareBindingFn);\n map.children = {};\n var
index = 0;\n for (var child = node.firstChild; child; child = child.nextSibli
ng) {\n map.children[index++] = createInstanceBindingMap(child, prepareBind
ingFn);\n }\n\n return map;\n }\n\n Object.defineProperty(Node.prototype
, 'templateInstance', {\n get: function() {\n var instance = this.templa
teInstance_;\n return instance ? instance :\n (this.parentNode ? t
his.parentNode.templateInstance : undefined);\n }\n });\n\n var emptyInstan
ce = document.createDocumentFragment();\n emptyInstance.bindings_ = [];\n empt
yInstance.terminator_ = null;\n\n function TemplateIterator(templateElement) {\
n this.closed = false;\n this.templateElement_ = templateElement;\n thi
s.instances = [];\n this.deps = undefined;\n this.iteratedValue = [];\n
this.presentValue = undefined;\n this.arrayObserver = undefined;\n }\n\n T
emplateIterator.prototype = {\n closeDeps: function() {\n var deps = thi
s.deps;\n if (deps) {\n if (deps.ifOneTime === false)\n dep
s.ifValue.close();\n if (deps.oneTime === false)\n deps.value.cl
ose();\n }\n },\n\n updateDependencies: function(directives, model) {
\n this.closeDeps();\n\n var deps = this.deps = {};\n var templat
e = this.templateElement_;\n\n if (directives.if) {\n deps.hasIf = t
rue;\n deps.ifOneTime = directives.if.onlyOneTime;\n deps.ifValue
= processBinding(IF, directives.if, template, model);\n\n // oneTime if &
predicate is false. nothing else to do.\n if (deps.ifOneTime && !deps.if
Value) {\n this.updateIteratedValue();\n return;\n }\n\
n if (!deps.ifOneTime)\n deps.ifValue.open(this.updateIteratedVa
lue, this);\n }\n\n if (directives.repeat) {\n deps.repeat = tr
ue;\n deps.oneTime = directives.repeat.onlyOneTime;\n deps.value =
processBinding(REPEAT, directives.repeat, template, model);\n } else {\n
deps.repeat = false;\n deps.oneTime = directives.bind.onlyOneTime;\
n deps.value = processBinding(BIND, directives.bind, template, model);\n
}\n\n if (!deps.oneTime)\n deps.value.open(this.updateIteratedV
alue, this);\n\n this.updateIteratedValue();\n },\n\n updateIteratedV
alue: function() {\n if (this.deps.hasIf) {\n var ifValue = this.dep
s.ifValue;\n if (!this.deps.ifOneTime)\n ifValue = ifValue.disca
rdChanges();\n if (!ifValue) {\n this.valueChanged();\n
return;\n }\n }\n\n var value = this.deps.value;\n if (!t
his.deps.oneTime)\n value = value.discardChanges();\n if (!this.deps
.repeat)\n value = [value];\n var observe = this.deps.repeat &&\n
!this.deps.oneTime &&\n Array.isArray(value)
;\n this.valueChanged(value, observe);\n },\n\n valueChanged: functio
n(value, observeValue) {\n if (!Array.isArray(value))\n value = [];\
n\n if (value === this.iteratedValue)\n return;\n\n this.unobse
rve();\n this.presentValue = value;\n if (observeValue) {\n thi
s.arrayObserver = new ArrayObserver(this.presentValue);\n this.arrayObser
ver.open(this.handleSplices, this);\n }\n\n this.handleSplices(ArrayOb
server.calculateSplices(this.presentValue,\n
this.iteratedValue));\n },\n\n getLastInstanceNode: fu
nction(index) {\n if (index == -1)\n return this.templateElement_;\n
var instance = this.instances[index];\n var terminator = instance.ter
minator_;\n if (!terminator)\n return this.getLastInstanceNode(index
- 1);\n\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this
.templateElement_ === terminator) {\n return terminator;\n }\n\n
var subtemplateIterator = terminator.iterator_;\n if (!subtemplateIterato
r)\n return terminator;\n\n return subtemplateIterator.getLastTempla
teNode();\n },\n\n getLastTemplateNode: function() {\n return this.ge
tLastInstanceNode(this.instances.length - 1);\n },\n\n insertInstanceAt: f
unction(index, fragment) {\n var previousInstanceLast = this.getLastInstanc
eNode(index - 1);\n var parent = this.templateElement_.parentNode;\n t
his.instances.splice(index, 0, fragment);\n\n parent.insertBefore(fragment,
previousInstanceLast.nextSibling);\n },\n\n extractInstanceAt: function(i
ndex) {\n var previousInstanceLast = this.getLastInstanceNode(index - 1);\n
var lastNode = this.getLastInstanceNode(index);\n var parent = this.t
emplateElement_.parentNode;\n var instance = this.instances.splice(index, 1
)[0];\n\n while (lastNode !== previousInstanceLast) {\n var node = p
reviousInstanceLast.nextSibling;\n if (node == lastNode)\n lastN
ode = previousInstanceLast;\n\n instance.appendChild(parent.removeChild(n
ode));\n }\n\n return instance;\n },\n\n getDelegateFn: function
(fn) {\n fn = fn && fn(this.templateElement_);\n return typeof fn ===
'function' ? fn : null;\n },\n\n handleSplices: function(splices) {\n
if (this.closed || !splices.length)\n return;\n\n var template = th
is.templateElement_;\n\n if (!template.parentNode) {\n this.close();
\n return;\n }\n\n ArrayObserver.applySplices(this.iteratedValu
e, this.presentValue,\n splices);\n\n var d
elegate = template.delegate_;\n if (this.instanceModelFn_ === undefined) {\
n this.instanceModelFn_ =\n this.getDelegateFn(delegate && del
egate.prepareInstanceModel);\n }\n\n if (this.instancePositionChangedF
n_ === undefined) {\n this.instancePositionChangedFn_ =\n this
.getDelegateFn(delegate &&\n delegate.prepareInsta
ncePositionChanged);\n }\n\n // Instance Removals\n var instanceC
ache = new Map;\n var removeDelta = 0;\n for (var i = 0; i < splices.l
ength; i++) {\n var splice = splices[i];\n var removed = splice.re
moved;\n for (var j = 0; j < removed.length; j++) {\n var model
= removed[j];\n var instance = this.extractInstanceAt(splice.index + re
moveDelta);\n if (instance !== emptyInstance) {\n instanceCa
che.set(model, instance);\n }\n }\n\n removeDelta -= spli
ce.addedCount;\n }\n\n // Instance Insertions\n for (var i = 0; i
< splices.length; i++) {\n var splice = splices[i];\n var addInde
x = splice.index;\n for (; addIndex < splice.index + splice.addedCount; a
ddIndex++) {\n var model = this.iteratedValue[addIndex];\n var
instance = instanceCache.get(model);\n if (instance) {\n in
stanceCache.delete(model);\n } else {\n if (this.instanceMod
elFn_) {\n model = this.instanceModelFn_(model);\n }\n\n
if (model === undefined) {\n instance = emptyInstance;\
n } else {\n instance = template.createInstance(model, u
ndefined, delegate);\n }\n }\n\n this.insertInstanc
eAt(addIndex, instance);\n }\n }\n\n instanceCache.forEach(func
tion(instance) {\n this.closeInstanceBindings(instance);\n }, this);
\n\n if (this.instancePositionChangedFn_)\n this.reportInstancesMove
d(splices);\n },\n\n reportInstanceMoved: function(index) {\n var ins
tance = this.instances[index];\n if (instance === emptyInstance)\n r
eturn;\n\n this.instancePositionChangedFn_(instance.templateInstance_, inde
x);\n },\n\n reportInstancesMoved: function(splices) {\n var index =
0;\n var offset = 0;\n for (var i = 0; i < splices.length; i++) {\n
var splice = splices[i];\n if (offset != 0) {\n while (inde
x < splice.index) {\n this.reportInstanceMoved(index);\n i
ndex++;\n }\n } else {\n index = splice.index;\n
}\n\n while (index < splice.index + splice.addedCount) {\n this
.reportInstanceMoved(index);\n index++;\n }\n\n offset +=
splice.addedCount - splice.removed.length;\n }\n\n if (offset == 0)\n
return;\n\n var length = this.instances.length;\n while (index
< length) {\n this.reportInstanceMoved(index);\n index++;\n
}\n },\n\n closeInstanceBindings: function(instance) {\n var bindings
= instance.bindings_;\n for (var i = 0; i < bindings.length; i++) {\n
bindings[i].close();\n }\n },\n\n unobserve: function() {\n i
f (!this.arrayObserver)\n return;\n\n this.arrayObserver.close();\n
this.arrayObserver = undefined;\n },\n\n close: function() {\n i
f (this.closed)\n return;\n this.unobserve();\n for (var i = 0;
i < this.instances.length; i++) {\n this.closeInstanceBindings(this.inst
ances[i]);\n }\n\n this.instances.length = 0;\n this.closeDeps();
\n this.templateElement_.iterator_ = undefined;\n this.closed = true;\
n }\n };\n\n // Polyfill-specific API.\n HTMLTemplateElement.forAllTemplat
esFrom_ = forAllTemplatesFrom;\n})(this);\n","/*\n Copyright (C) 2013 Ariya Hid
ayat <ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gm
ail.com>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyri
ght (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Bo
ekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowa
l@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copy
right (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyright (C) 2011
Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and use in source an
d binary forms, with or without\n modification, are permitted provided that the
following conditions are met:\n\n * Redistributions of source code must reta
in the above copyright\n notice, this list of conditions and the following
disclaimer.\n * Redistributions in binary form must reproduce the above copyr
ight\n notice, this list of conditions and the following disclaimer in the\
n documentation and/or other materials provided with the distribution.\n\n
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n I
MPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, I
NDIRECT, 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 THEOR
Y OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEG
LIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVE
N IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (global) {\n
'use strict';\n\n var Token,\n TokenName,\n Syntax,\n M
essages,\n source,\n index,\n length,\n delegate,\n
lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n
EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLitera
l: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral
: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boole
an';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Identifier] = 'Id
entifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullL
iteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenNa
me[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'Stri
ng';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression',\n Bin
aryExpression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n
ConditionalExpression: 'ConditionalExpression',\n EmptyStatement:
'EmptyStatement',\n ExpressionStatement: 'ExpressionStatement',\n
Identifier: 'Identifier',\n Literal: 'Literal',\n LabeledStatement
: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n
MemberExpression: 'MemberExpression',\n ObjectExpression: 'ObjectExpressi
on',\n Program: 'Program',\n Property: 'Property',\n ThisEx
pression: 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\
n\n // Error messages should be identical to V8.\n Messages = {\n U
nexpectedToken: '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 // Thi
s 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 case.\n // D
o 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 isDecimalDigit(ch
) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 Whi
te Space\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // s
pace\n (ch === 9) || // tab\n (ch === 0xB) ||\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.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 isIdenti
fierStart(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 function isIdentifie
rPart(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 (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.charCo
deAt(index))) {\n ++index;\n }\n }\n\n function getIdenti
fier() {\n var start, ch;\n\n start = index++;\n while (ind
ex < length) {\n ch = source.charCodeAt(index);\n if (isId
entifierPart(ch)) {\n ++index;\n } else {\n
break;\n }\n }\n\n return source.slice(start, inde
x);\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 ide
ntifier.\n if (id.length === 1) {\n type = Token.Identifier;\n
} else if (isKeyword(id)) {\n type = Token.Keyword;\n
} else if (id === 'null') {\n type = Token.NullLiteral;\n } el
se if (id === 'true' || id === 'false') {\n type = Token.BooleanLiter
al;\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 sc
anPunctuator() {\n var start = index,\n code = source.charCode
At(index),\n code2,\n ch1 = source[index],\n ch
2;\n\n switch (code) {\n\n // Check for most common single-charact
er punctuators.\n case 46: // . dot\n case 40: // ( open brack
et\n case 41: // ) close bracket\n case 59: // ; semicolon\n
case 44: // , comma\n case 123: // { open curly brace\n c
ase 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
value: String.fromCharCode(code) + String.fromCharCode(code2),\n
range: [start, index]\n };\n\n cas
e 33: // !\n case 61: // =\n index += 2;\n\n
// !== and ===\n if (source.charCodeAt(inde
x) === 61) {\n ++index;\n }\n
return {\n type: Token.Punctuator,\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 === ch2 && ('&|'.in
dexOf(ch1) >= 0)) {\n index += 2;\n return {\n
type: Token.Punctuator,\n value: ch1 + ch2,\n
range: [start, index]\n };\n }\n\n if ('<>=!+-*%&|^/'.i
ndexOf(ch1) >= 0) {\n ++index;\n return {\n
type: Token.Punctuator,\n value: ch1,\n range: [s
tart, index]\n };\n }\n\n throwError({}, Messages.Unexp
ectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n function sc
anNumericLiteral() {\n var number, start, ch;\n\n ch = source[inde
x];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n
'Numeric literal must start with a decimal digit or a decimal point');\n\n
start = index;\n number = '';\n if (ch !== '.') {\n
number = source[index++];\n ch = source[index];\n\n // H
ex number starts with '0x'.\n // Octal number starts with '0'.\n
if (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.
charCodeAt(index))) {\n number += source[index++];\n }
\n ch = source[index];\n }\n\n if (ch === '.') {\n
number += source[index++];\n while (isDecimalDigit(source.char
CodeAt(index))) {\n number += source[index++];\n }\n
ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E'
) {\n number += source[index++];\n\n ch = source[index];\n
if (ch === '+' || ch === '-') {\n number += source[in
dex++];\n }\n if (isDecimalDigit(source.charCodeAt(index))
) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n
number += source[index++];\n }\n } else {
\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n
}\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n
return {\n type: Token.NumericLiteral,\n value: par
seFloat(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[index];\n
assert((quote === '\\'' || quote === '\"'),\n 'String literal must st
arts with a quote');\n\n start = index;\n ++index;\n\n whil
e (index < length) {\n ch = source[index++];\n\n if (ch ==
= quote) {\n quote = '';\n break;\n } e
lse 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
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 ++index;\n
}\n }\n } else if (isLineTerminator(ch.ch
arCodeAt(0))) {\n break;\n } else {\n s
tr += ch;\n }\n }\n\n if (quote !== '') {\n
throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n retur
n {\n type: Token.StringLiteral,\n value: str,\n
octal: octal,\n range: [start, index]\n };\n }\n\n fun
ction isIdentifierName(token) {\n return token.type === Token.Identifier
||\n token.type === Token.Keyword ||\n token.type === Toke
n.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n
function advance() {\n var ch;\n\n skipWhitespace();\n\n i
f (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 scanPunctuator();\n
}\n\n // String literal starts with single quote (#39) or double qu
ote (#34).\n if (ch === 39 || ch === 34) {\n return scanString
Literal();\n }\n\n if (isIdentifierStart(ch)) {\n retur
n scanIdentifier();\n }\n\n // Dot (.) char #46 can also start a f
loating-point number, hence the need\n // to check the next character.\n
if (ch === 46) {\n if (isDecimalDigit(source.charCodeAt(index
+ 1))) {\n return scanNumericLiteral();\n }\n
return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n
return scanNumericLiteral();\n }\n\n return scanPunctuato
r();\n }\n\n function lex() {\n var token;\n\n token = looka
head;\n index = token.range[1];\n\n lookahead = advance();\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 function throwEr
ror(token, messageFormat) {\n var error,\n args = Array.protot
ype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n
/%(\\d)/g,\n function (whole, index) {\n
assert(index < args.length, 'Message reference must be in range');\n
return args[index];\n }\n );\n\n er
ror = new Error(msg);\n error.index = index;\n error.description =
msg;\n throw error;\n }\n\n // Throw an exception because of the t
oken.\n\n function throwUnexpected(token) {\n throwError(token, Messag
es.UnexpectedToken, token.value);\n }\n\n // Expect the next token to matc
h the specified punctuator.\n // If not, an exception will be thrown.\n\n
function expect(value) {\n var token = lex();\n if (token.type !==
Token.Punctuator || token.value !== value) {\n throwUnexpected(token
);\n }\n }\n\n // Return true if the next token matches the specifi
ed punctuator.\n\n function match(value) {\n return lookahead.type ===
Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if
the next token matches the specified keyword\n\n function matchKeyword(keywor
d) {\n return lookahead.type === Token.Keyword && lookahead.value === key
word;\n }\n\n function consumeSemicolon() {\n // Catch the very com
mon case first: immediately a semicolon (char #59).\n if (source.charCode
At(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 element
s = [];\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.c
reateArrayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\n\n
function parseObjectPropertyKey() {\n var token;\n\n skipWhitesp
ace();\n token = lex();\n\n // Note: This function is called only
from parseObjectProperty(), where\n // EOF and Punctuator tokens are alre
ady filtered out.\n if (token.type === Token.StringLiteral || token.type
=== Token.NumericLiteral) {\n return delegate.createLiteral(token);\n
}\n\n return delegate.createIdentifier(token.value);\n }\n\n
function parseObjectProperty() {\n var token, key;\n\n token = l
ookahead;\n skipWhitespace();\n\n if (token.type === Token.EOF ||
token.type === Token.Punctuator) {\n throwUnexpected(token);\n
}\n\n key = parseObjectPropertyKey();\n expect(':');\n ret
urn delegate.createProperty('init', key, parseExpression());\n }\n\n funct
ion parseObjectInitialiser() {\n var properties = [];\n\n expect('
{');\n\n while (!match('}')) {\n properties.push(parseObjectPr
operty());\n\n if (!match('}')) {\n expect(',');\n
}\n }\n\n expect('}');\n\n return delegate.createOb
jectExpression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n
function parseGroupExpression() {\n var expr;\n\n expect('(');\n\
n expr = parseExpression();\n\n expect(')');\n\n return exp
r;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpre
ssion() {\n var type, token, expr;\n\n if (match('(')) {\n
return parseGroupExpression();\n }\n\n type = lookahead.type;\
n\n if (type === Token.Identifier) {\n expr = delegate.createI
dentifier(lex().value);\n } else if (type === Token.StringLiteral || type
=== Token.NumericLiteral) {\n expr = delegate.createLiteral(lex());\
n } else if (type === Token.Keyword) {\n if (matchKeyword('thi
s')) {\n lex();\n expr = delegate.createThisExpres
sion();\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 === Tok
en.NullLiteral) {\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(t
oken)) {\n throwUnexpected(token);\n }\n\n return deleg
ate.createIdentifier(token.value);\n }\n\n function parseNonComputedMember
() {\n expect('.');\n\n return parseNonComputedProperty();\n }\
n\n function parseComputedMember() {\n var expr;\n\n expect('['
);\n\n expr = parseExpression();\n\n expect(']');\n\n retur
n expr;\n }\n\n function parseLeftHandSideExpression() {\n var expr
, property;\n\n expr = parsePrimaryExpression();\n\n while (match(
'.') || match('[')) {\n if (match('[')) {\n property =
parseComputedMember();\n expr = delegate.createMemberExpression(
'[', expr, property);\n } else {\n property = parseNon
ComputedMember();\n expr = delegate.createMemberExpression('.', e
xpr, property);\n }\n }\n\n return expr;\n }\n\n
// 11.3 Postfix Expressions\n\n var parsePostfixExpression = parseLeftHandSid
eExpression;\n\n // 11.4 Unary Operators\n\n function parseUnaryExpression
() {\n var token, expr;\n\n if (lookahead.type !== Token.Punctuato
r && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpress
ion();\n } else if (match('+') || match('-') || match('!')) {\n
token = lex();\n expr = parseUnaryExpression();\n expr =
delegate.createUnaryExpression(token.value, expr);\n } else if (matchKey
word('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n
throwError({}, Messages.UnexpectedToken);\n } else {\n expr =
parsePostfixExpression();\n }\n\n return expr;\n }\n\n func
tion 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 pre
c = 1;\n break;\n\n case '&&':\n prec = 2;\n
break;\n\n case '==':\n case '!=':\n case '===':\n
case '!==':\n prec = 6;\n break;\n\n case '<':\
n case '>':\n case '<=':\n case '>=':\n case 'instan
ceof':\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 prec;\n }\n\n // 11.5 Mu
ltiplicative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shif
t Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n
// 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n
function parseBinaryExpression() {\n var expr, token, prec, stack, rig
ht, operator, left, i;\n\n left = parseUnaryExpression();\n\n toke
n = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0)
{\n return left;\n }\n token.prec = prec;\n lex
();\n\n right = parseUnaryExpression();\n\n stack = [left, token,
right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n
// Reduce: make a binary expression from the 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.createBi
naryExpression(operator, left, right);\n stack.push(expr);\n
}\n\n // Shift.\n token = lex();\n token
.prec = prec;\n stack.push(token);\n expr = parseUnaryExpr
ession();\n stack.push(expr);\n }\n\n // Final reduce t
o clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n
while (i > 1) {\n expr = delegate.createBinaryExpression(stac
k[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n
return expr;\n }\n\n\n // 11.12 Conditional Operator\n\n function parse
ConditionalExpression() {\n var expr, consequent, alternate;\n\n e
xpr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\
n consequent = parseConditionalExpression();\n expect(':')
;\n alternate = parseConditionalExpression();\n\n expr = d
elegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n
return expr;\n }\n\n // Simplification since we do not support Ass
ignmentExpression.\n var parseExpression = 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 (identifier.type !== Token.Identifier) {\n throw
Unexpected(identifier);\n }\n\n args = match('(') ? parseArguments
() : [];\n\n return delegate.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 // Lab
elledExpressions\n // AsExpression\n // InExpression\n // FilterE
xpression\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n
// InExpression ::\n // Identifier, Identifier in FilterExpression\n
// Identifier in FilterExpression\n\n // FilterExpression ::\n // Exp
ression\n // Expression Filters\n\n function parseTopLevel() {\n
skipWhitespace();\n peek();\n\n var expr = 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 parseA
sExpression(expr);\n } else {\n delegate.creat
eTopLevel(expr);\n }\n }\n }\n\n if (loo
kahead.type !== Token.EOF) {\n throwUnexpected(lookahead);\n }
\n }\n\n function parseAsExpression(expr) {\n lex(); // as\n
var identifier = lex().value;\n delegate.createAsExpression(expr, ident
ifier);\n }\n\n function parseInExpression(identifier) {\n var inde
xName;\n if (lookahead.value === ',') {\n lex();\n
if (lookahead.type !== Token.Identifier)\n throwUnexpected(lookah
ead);\n indexName = lex().value;\n }\n\n lex(); // in\
n var expr = parseExpression();\n parseFilters();\n delegat
e.createInExpression(identifier.name, indexName, expr);\n }\n\n function p
arse(code, inDelegate) {\n delegate = inDelegate;\n source = code;
\n index = 0;\n length = source.length;\n lookahead = null;
\n state = {\n labelSet: {}\n };\n\n return pars
eTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(
this);\n","// Copyright (c) 2014 The Polymer Project Authors. All rights reserve
d.\n// This code may only be used under the BSD style license found at http://po
lymer.github.io/LICENSE.txt\n// The complete set of authors may be found at http
://polymer.github.io/AUTHORS.txt\n// The complete set of contributors may be fou
nd at http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google a
s part of the polymer project is also\n// subject to an additional IP rights gra
nt found at http://polymer.github.io/PATENTS.txt\n\n(function (global) {\n 'use
strict';\n\n // JScript does not have __proto__. We wrap all object literals w
ith\n // createObject which uses Object.create, Object.defineProperty and\n //
Object.getOwnPropertyDescriptor to create a new object that does the exact\n /
/ same thing. The main downside to this solution is that we have to extract\n /
/ all those property descriptors for IE.\n var createObject = ('__proto__' in {
}) ?\n function(obj) { return obj; } :\n function(obj) {\n var
proto = obj.__proto__;\n if (!proto)\n return obj;\n var
newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEa
ch(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n });\
n return newObject;\n };\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 // convert literal computed property access where literal val
ue is a value\n // path to ident dot-access.\n if (accessor == '[' &&\n
property instanceof Literal &&\n Path.get(property.value).valid) {\n
accessor = '.';\n property = new IdentPath(property.value);\n }\n\
n this.dynamicDeps = typeof object == 'function' || object.dynamic;\n\n th
is.dynamic = typeof property == 'function' ||\n property.dynam
ic ||\n accessor == '[';\n\n this.simplePath =\n !th
is.dynamic &&\n !this.dynamicDeps &&\n property instanceof IdentPa
th &&\n (object instanceof MemberExpression || object instanceof IdentPat
h);\n\n this.object = this.simplePath ? object : getFn(object);\n this.pro
perty = accessor == '.' ? property : getFn(property);\n }\n\n MemberExpression
.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n var
last = this.object instanceof IdentPath ?\n this.object.name : this.o
bject.fullPath;\n this.fullPath_ = Path.get(last + '.' + this.property.na
me);\n }\n\n return this.fullPath_;\n },\n\n valueFn: function()
{\n if (!this.valueFn_) {\n var object = this.object;\n\n if
(this.simplePath) {\n var path = this.fullPath;\n\n this.valu
eFn_ = function(model, observer) {\n if (observer)\n obs
erver.addPath(model, path);\n\n return path.getValueFrom(model);\n
};\n } else if (this.property instanceof IdentPath) {\n v
ar path = Path.get(this.property.name);\n\n this.valueFn_ = function(mo
del, observer) {\n var context = object(model, observer);\n\n
if (observer)\n observer.addPath(context, path);\n\n
return path.getValueFrom(context);\n }\n } else {\n //
Computed property.\n var property = this.property;\n\n this.v
alueFn_ = function(model, observer) {\n var context = object(model, o
bserver);\n var propName = property(model, observer);\n if
(observer)\n observer.addPath(context, propName);\n\n r
eturn context ? context[propName] : undefined;\n };\n }\n }
\n return this.valueFn_;\n },\n\n setValue: function(model, newValue)
{\n if (this.simplePath) {\n this.fullPath.setValueFrom(model, newV
alue);\n return newValue;\n }\n\n var object = this.object(mode
l);\n var propName = this.property instanceof IdentPath ? this.property.nam
e :\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] = g
etFn(args[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(va
lue, toModelDirection, filterRegistry, model,\n observer)
{\n var fn = filterRegistry[this.name];\n var context = model;\n
if (fn) {\n context = undefined;\n } else {\n fn = context[t
his.name];\n if (!fn) {\n console.error('Cannot find filter: ' +
this.name);\n return;\n }\n }\n\n // If toModelDirect
ion is falsey, then the \"normal\" (dom-bound) direction\n // is used. Othe
rwise, 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('No ' + (toModelDirection ? 'toModel' : '
toDOM') +\n ' found on' + this.name);\n return;\n
}\n\n var args = [value];\n for (var i = 0; i < this.args.length; i
++) {\n args[i + 1] = getFn(this.args[i])(model, observer);\n }\n\n
return fn.apply(context, args);\n }\n };\n\n function notImplemented()
{ throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': funct
ion(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 '>': funct
ion(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 functi
on 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.scopeIdent
= undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;\n
}\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op, argu
ment) {\n if (!unaryOperators[op])\n throw Error('Disallowed operato
r: ' + op);\n\n argument = getFn(argument);\n\n return function(model,
observer) {\n return unaryOperators[op](argument(model, observer));\n
};\n },\n\n createBinaryExpression: function(op, left, right) {\n
if (!binaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\
n left = getFn(left);\n right = getFn(right);\n\n return function
(model, observer) {\n return binaryOperators[op](left(model, observer),\n
right(model, observer));\n };\n },\n\
n createConditionalExpression: function(test, consequent, alternate) {\n
test = getFn(test);\n consequent = getFn(consequent);\n alternate = g
etFn(alternate);\n\n return function(model, observer) {\n return tes
t(model, observer) ?\n consequent(model, observer) : alternate(model,
observer);\n }\n },\n\n createIdentifier: function(name) {\n va
r ident = new IdentPath(name);\n ident.type = 'Identifier';\n return i
dent;\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
createLiteral: function(token) {\n return new Literal(token.value);\n
},\n\n createArrayExpression: function(elements) {\n for (var i = 0; i
< elements.length; i++)\n elements[i] = getFn(elements[i]);\n\n ret
urn function(model, observer) {\n var arr = []\n for (var i = 0; i
< elements.length; i++)\n arr.push(elements[i](model, observer));\n
return arr;\n }\n },\n\n createProperty: function(kind, key, val
ue) {\n return {\n key: key instanceof IdentPath ? key.name : key.va
lue,\n value: value\n };\n },\n\n createObjectExpression: func
tion(properties) {\n for (var i = 0; i < properties.length; i++)\n p
roperties[i].value = getFn(properties[i].value);\n\n return function(model,
observer) {\n var obj = {};\n for (var i = 0; i < properties.leng
th; i++)\n obj[properties[i].key] = properties[i].value(model, observer
);\n return obj;\n }\n },\n\n createFilter: function(name, arg
s) {\n this.filters.push(new Filter(name, args));\n },\n\n createAsEx
pression: function(expression, scopeIdent) {\n this.expression = expression
;\n this.scopeIdent = scopeIdent;\n },\n\n createInExpression: functi
on(scopeIdent, indexIdent, expression) {\n this.expression = expression;\n
this.scopeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\
n\n createTopLevel: function(expression) {\n this.expression = expressio
n;\n },\n\n createThisExpression: notImplemented\n }\n\n function Consta
ntObservable(value) {\n this.value_ = value;\n }\n\n ConstantObservable.pro
totype = {\n open: function() { return this.value_; },\n discardChanges: f
unction() { return this.value_; },\n deliver: function() {},\n close: func
tion() {},\n }\n\n function Expression(delegate) {\n this.scopeIdent = dele
gate.scopeIdent;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegat
e.expression)\n throw Error('No expression found.');\n\n this.expression
= delegate.expression;\n getFn(this.expression); // forces enumeration of pa
th dependencies\n\n this.filters = delegate.filters;\n this.dynamicDeps =
delegate.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: functi
on(model, filterRegistry, oneTime) {\n if (oneTime)\n return this.ge
tValue(model, undefined, filterRegistry);\n\n var observer = new CompoundOb
server();\n // captures deps.\n var firstValue = this.getValue(model,
observer, filterRegistry);\n var firstTime = true;\n var self = this;\
n\n function valueFn() {\n // deps cannot have changed on first valu
e retrieval.\n if (firstTime) {\n firstTime = false;\n
return firstValue;\n }\n\n if (self.dynamicDeps)\n observ
er.startReset();\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n
filterRegistry);\n if (self.dynamicDeps)\n observer.
finishReset();\n\n return value;\n }\n\n function setValueFn(ne
wValue) {\n self.setValue(model, newValue, filterRegistry);\n retu
rn newValue;\n }\n\n return new ObserverTransform(observer, valueFn, s
etValueFn, true);\n },\n\n getValue: function(model, observer, filterRegis
try) {\n var value = getFn(this.expression)(model, observer);\n for (v
ar i = 0; i < this.filters.length; i++) {\n value = this.filters[i].trans
form(value, false, filterRegistry, model,\n
observer);\n }\n\n return value;\n },\n\n setValue: functio
n(model, newValue, filterRegistry) {\n var count = this.filters ? this.filt
ers.length : 0;\n while (count-- > 0) {\n newValue = this.filters[co
unt].transform(newValue, true, filterRegistry,\n
model);\n }\n\n if (this.expression.setValue)\n
return this.expression.setValue(model, newValue);\n }\n }\n\n /**\n * C
onverts a style property name to a css property name. For example:\n * \"Webki
tUserSelect\" to \"-webkit-user-select\"\n */\n function convertStyleProperty
Name(name) {\n return String(name).replace(/[A-Z]/g, function(c) {\n ret
urn '-' + c.toLowerCase();\n });\n }\n\n function isEventHandler(name) {\n
return name[0] === 'o' &&\n name[1] === 'n' &&\n name[2]
=== '-';\n }\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart
',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n
'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCase
EventTypes[e.toLowerCase()] = e;\n });\n\n var parentScopeName = '@' + Math.ra
ndom().toString(36).slice(2);\n\n // Single ident paths must bind directly to t
he appropriate scope object.\n // I.e. Pushed values in two-bindings need to be
assigned to the actual model\n // object.\n function findScope(model, prop) {
\n while (model[parentScopeName] &&\n !Object.prototype.hasOwnPrope
rty.call(model, prop)) {\n model = model[parentScopeName];\n }\n\n re
turn model;\n }\n\n function resolveEventReceiver(model, path, node) {\n if
(path.length == 0)\n return undefined;\n\n if (path.length == 1)\n
return findScope(model, path[0]);\n\n for (var i = 0; model != null && i < p
ath.length - 1; i++) {\n model = model[path[i]];\n }\n\n return model
;\n }\n\n function prepareEventBinding(path, name, polymerExpressions) {\n
var eventType = name.substring(3);\n eventType = mixedCaseEventTypes[eventTyp
e] || eventType;\n\n return function(model, node, oneTime) {\n var fn, r
eceiver, handler;\n if (typeof polymerExpressions.resolveEventHandler == 'f
unction') {\n handler = function(e) {\n fn = fn || polymerExpres
sions.resolveEventHandler(model, path, node);\n fn(e, e.detail, e.curre
ntTarget);\n\n if (Platform && typeof Platform.flush == 'function')\n
Platform.flush();\n };\n } else {\n handler = funct
ion(e) {\n fn = fn || path.getValueFrom(model);\n receiver = r
eceiver || resolveEventReceiver(model, path, node);\n\n fn.apply(receiv
er, [e, e.detail, e.currentTarget]);\n\n if (Platform && typeof Platfor
m.flush == 'function')\n Platform.flush();\n };\n }\n\n
node.addEventListener(eventType, handler);\n\n if (oneTime)\n re
turn;\n\n function bindingValue() {\n return '{{ ' + path + ' }}';\n
}\n\n return {\n open: bindingValue,\n discardChanges:
bindingValue,\n close: function() {\n node.removeEventListener(e
ventType, handler);\n }\n };\n }\n }\n\n function isLiteralExpr
ession(pathString) {\n switch (pathString) {\n case '':\n return
false;\n\n case 'false':\n case 'null':\n case 'true':\n r
eturn true;\n }\n\n if (!isNaN(Number(pathString)))\n return true;\n\
n return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpre
ssions.prototype = {\n // \"built-in\" filters\n styleObject: function(val
ue) {\n var parts = [];\n for (var key in value) {\n parts.push
(convertStylePropertyName(key) + ': ' + value[key]);\n }\n return part
s.join('; ');\n },\n\n tokenList: function(value) {\n var tokens = []
;\n for (var key in value) {\n if (value[key])\n tokens.pus
h(key);\n }\n return tokens.join(' ');\n },\n\n // binding deleg
ate API\n prepareInstancePositionChanged: function(template) {\n var ind
exIdent = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n
return;\n\n return function(templateInstance, index) {\n templateI
nstance.model[indexIdent] = index;\n };\n },\n\n prepareBinding: func
tion(pathString, name, node) {\n var path = Path.get(pathString);\n if
(isEventHandler(name)) {\n if (!path.valid) {\n console.error('
on-* bindings must be simple path expressions');\n return;\n }\n
\n return prepareEventBinding(path, name, this);\n }\n\n if (!i
sLiteralExpression(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 = findSco
pe(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 = templat
e.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n
var parentScope = template.templateInstance ?\n template.templateInsta
nce.model :\n template.model;\n\n var indexName = template.polymer
ExpressionIndexIdent_;\n\n return function(model) {\n var scope = Ob
ject.create(parentScope);\n scope[scopeName] = model;\n scope[inde
xName] = undefined;\n scope[parentScopeName] = parentScope;\n retu
rn scope;\n };\n }\n };\n\n global.PolymerExpressions = PolymerExpress
ions;\n if (global.exposeGetExpression)\n global.getExpression_ = getExpress
ion;\n\n global.PolymerExpressions.prepareEventBinding = prepareEventBinding;\n
})(this);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n
* Use of this source code is governed by a BSD-style\n * license that can be fou
nd in the LICENSE file.\n */\n(function(scope) {\n\n// inject style sheet\nvar s
tyle = document.createElement('style');\nstyle.textContent = 'template {display:
none !important;} /* injected by platform.js */';\nvar head = document.querySel
ector('head');\nhead.insertBefore(style, head.firstChild);\n\n// flush (with log
ging)\nvar flushing;\nfunction flush() {\n if (!flushing) {\n flushing = tru
e;\n scope.endOfMicrotask(function() {\n flushing = false;\n logFla
gs.data && console.group('Platform.flush()');\n scope.performMicrotaskCheck
point();\n logFlags.data && console.groupEnd();\n });\n }\n};\n\n// pol
ling dirty checker\n// flush periodically if platform does not have object obser
ve.\nif (!Observer.hasObjectObserve) {\n var FLUSH_POLL_INTERVAL = 125;\n wind
ow.addEventListener('WebComponentsReady', function() {\n flush();\n scope.
flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n });\n} else {\n // make
flush a no-op when we have Object.observe\n flush = function() {};\n}\n\nif (w
indow.CustomElements && !CustomElements.useNative) {\n var originalImportNode =
Document.prototype.importNode;\n Document.prototype.importNode = function(node
, deep) {\n var imported = originalImportNode.call(this, node, deep);\n Cu
stomElements.upgradeAll(imported);\n return imported;\n }\n}\n\n// exports\n
scope.flush = flush;\n\n})(window.Platform);\n\n"]} |