| 1 {"version":3,"file":"build/platform.js","sources":["../PointerGestures/src/Point
erGestureEvent.js","../WeakMap/weakmap.js","../observe-js/src/observe.js","build
/if-poly.js","../ShadowDOM/src/wrappers.js","../ShadowDOM/src/microtask.js","../
ShadowDOM/src/MutationObserver.js","../ShadowDOM/src/wrappers/events.js","../Sha
dowDOM/src/wrappers/NodeList.js","../ShadowDOM/src/wrappers/Node.js","../ShadowD
OM/src/querySelector.js","../ShadowDOM/src/wrappers/node-interfaces.js","../Shad
owDOM/src/wrappers/CharacterData.js","../ShadowDOM/src/wrappers/Element.js","../
ShadowDOM/src/wrappers/HTMLElement.js","../ShadowDOM/src/wrappers/HTMLCanvasElem
ent.js","../ShadowDOM/src/wrappers/HTMLContentElement.js","../ShadowDOM/src/wrap
pers/HTMLImageElement.js","../ShadowDOM/src/wrappers/HTMLShadowElement.js","../S
hadowDOM/src/wrappers/HTMLTemplateElement.js","../ShadowDOM/src/wrappers/HTMLMed
iaElement.js","../ShadowDOM/src/wrappers/HTMLAudioElement.js","../ShadowDOM/src/
wrappers/HTMLOptionElement.js","../ShadowDOM/src/wrappers/HTMLUnknownElement.js"
,"../ShadowDOM/src/wrappers/CanvasRenderingContext2D.js","../ShadowDOM/src/wrapp
ers/WebGLRenderingContext.js","../ShadowDOM/src/wrappers/Range.js","../ShadowDOM
/src/wrappers/generic.js","../ShadowDOM/src/wrappers/ShadowRoot.js","../ShadowDO
M/src/ShadowRenderer.js","../ShadowDOM/src/wrappers/elements-with-form-property.
js","../ShadowDOM/src/wrappers/Document.js","../ShadowDOM/src/wrappers/Window.js
","../ShadowDOM/src/wrappers/override-constructors.js","src/patches-shadowdom-po
lyfill.js","src/ShadowCSS.js","src/patches-shadowdom-native.js","src/lang.js","s
rc/dom.js","src/template.js","src/inspector.js","src/unresolved.js","../HTMLImpo
rts/src/HTMLImports.js","../HTMLImports/src/Parser.js","../HTMLImports/src/boot.
js","../MutationObservers/MutationObserver.js","../CustomElements/src/scope.js",
"../CustomElements/src/Observer.js","../CustomElements/src/CustomElements.js",".
./CustomElements/src/Parser.js","../CustomElements/src/boot.js","src/patches-cus
tom-elements.js","src/microtask.js","../PointerEvents/src/boot.js","../PointerEv
ents/src/touch-action.js","../PointerEvents/src/PointerEvent.js","../PointerEven
ts/src/pointermap.js","../PointerEvents/src/dispatcher.js","../PointerEvents/src
/installer.js","../PointerEvents/src/mouse.js","../PointerEvents/src/touch.js","
../PointerEvents/src/ms.js","../PointerEvents/src/platform-events.js","../Pointe
rEvents/src/capture.js","../PointerGestures/src/initialize.js","../PointerGestur
es/src/pointermap.js","../PointerGestures/src/dispatcher.js","../PointerGestures
/src/hold.js","../PointerGestures/src/track.js","../PointerGestures/src/flick.js
","../PointerGestures/src/tap.js","../NodeBind/src/NodeBind.js","../TemplateBind
ing/src/TemplateBinding.js","../polymer-expressions/third_party/esprima/esprima.
js","../polymer-expressions/src/polymer-expressions.js","src/patches-mdv.js"],"n
ames":[],"mappings":"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
A,UAGA,GAOA,oBAAA,UAAA,CAEA,IAAA,GAAA,EAAA,oBAAA,YAEA,GACA,IAAA,WACA,MAAA,MAAA,U
AEA,YAAA,EACA,cAAA,EAGA,KAGA,oBAAA,UAAA,OAAA,OAAA,EAAA,WAEA,OAAA,eAAA,oBAAA,UAAA
,UACA,IA+BA,EAAA,oBAAA,WACA,KAAA,SAAA,EAAA,EAAA,GAKA,MAJA,MAAA,YACA,KAAA,UAAA,GA
AA,GAAA,OAEA,KAAA,SAAA,KAAA,aACA,SAAA,GACA,KAAA,UAAA,SAAA,EACA,KAAA,UAAA,UAAA,EA
CA,KAAA,UAAA,SAAA,EACA,KAAA,UAAA,eACA,KAAA,UAAA,cAAA,EACA,EAAA,KAAA,YAGA,KAAA,SA
AA,KAAA,KAAA,WAGA,WAAA,GACA,KAAA,UAAA,WAAA,EACA,KAAA,UAAA,YAAA,EACA,KAAA,UAAA,WA
AA,EACA,KAAA,UAAA,eACA,KAAA,UAAA,cAAA,EACA,EAAA,KAAA,YAEA,KAAA,SAAA,OAAA,KAAA,WA
GA,OAAA,GACA,KAAA,UAAA,OAAA,EACA,KAAA,UAAA,QAAA,EACA,KAAA,UAAA,OAAA,EACA,KAAA,UA
AA,eACA,KAAA,UAAA,cAAA,EACA,EAAA,KAAA,YAEA,KAAA,SAAA,GAAA,KAAA,WAGA,YAAA,UAAA,KA
AA,KAAA,KAAA,EAAA,EAAA,IAGA,OAAA,SAAA,GACA,GAAA,SAAA,EAAA,CACA,IAAA,KAAA,UACA,MA
UA,OARA,MAAA,UAAA,SAAA,EACA,KAAA,UAAA,UAAA,OACA,KAAA,UAAA,SAAA,OACA,KAAA,UAAA,eA
CA,KAAA,UAAA,cAAA,EACA,EAAA,KAAA,YAGA,KAAA,SAAA,KAAA,OAGA,GAAA,WAAA,EAAA,CACA,IA
AA,KAAA,UACA,MAQA,OAPA,MAAA,UAAA,WAAA,EACA,KAAA,UAAA,YAAA,OACA,KAAA,UAAA,WAAA,OA
CA,KAAA,UAAA,eACA,KAAA,UAAA,cAAA,EACA,EAAA,KAAA,YAEA,KAAA,SAAA,OAAA,OAGA,GAAA,OA
AA,EAAA,CACA,IAAA,KAAA,UACA,MAQA,OAPA,MAAA,UAAA,OAAA,EACA,KAAA,UAAA,QAAA,OACA,KA
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","sou
rcesContent":["/*\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 fo
und in the LICENSE file.\n */\n\n/**\n * PointerGestureEvent is the constructor
for all PointerGesture events.\n *\n * @module PointerGestures\n * @class Pointe
rGestureEvent\n * @extends UIEvent\n * @constructor\n * @param {String} inType E
vent 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 props = {\n bu
bbles: Boolean(dict.bubbles) === dict.bubbles || true,\n cancelable: Boolean(
dict.cancelable) === dict.cancelable || true\n };\n\n e.initEvent(inType, prop
s.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 * Allows for any gest
ure to prevent the tap gesture.\n *\n * @method preventTap\n */\nPointerGestureE
vent.prototype.preventTap = function() {\n this.tapPrevented = true;\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 found in the LICE
NSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (function() {\n va
r defineProperty = Object.defineProperty;\n var counter = Date.now() % 1e9;\n
\n var WeakMap = function() {\n this.name = '__st' + (Math.random() * 1e
9 >>> 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 define
Property(key, this.name, {value: [key, value], writable: true});\n },\n
get: function(key) {\n var entry;\n return (entry = key[this.nam
e]) && entry[0] === key ?\n entry[1] : undefined;\n },\n de
lete: function(key) {\n this.set(key, undefined);\n }\n };\n\n
window.WeakMap = WeakMap;\n })();\n}\n","// Copyright 2012 Google Inc.\n//\n//
Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may n
ot use this file except in compliance with the License.\n// You may obtain a cop
y of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n
// Unless required by applicable law or agreed to in writing, software\n// distr
ibuted under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRA
NTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License
for the specific language governing permissions and\n// limitations under the Li
cense.\n\n(function(global) {\n 'use strict';\n\n var PROP_ADD_TYPE = 'add';\n
var PROP_UPDATE_TYPE = 'update';\n var PROP_RECONFIGURE_TYPE = 'reconfigure';
\n var PROP_DELETE_TYPE = 'delete';\n var ARRAY_SPLICE_TYPE = 'splice';\n\n /
/ Detect and do basic sanity checking on Object/Array.observe.\n function detec
tObjectObserve() {\n if (typeof Object.observe !== 'function' ||\n typ
eof Array.observe !== 'function') {\n return false;\n }\n\n var recor
ds = [];\n\n function callback(recs) {\n records = recs;\n }\n\n v
ar test = {};\n Object.observe(test, callback);\n test.id = 1;\n test.i
d = 2;\n delete test.id;\n Object.deliverChangeRecords(callback);\n if
(records.length !== 3)\n return false;\n\n // TODO(rafaelw): Remove this
when new change record type names make it to\n // chrome release.\n if (r
ecords[0].type == 'new' &&\n records[1].type == 'updated' &&\n rec
ords[2].type == 'deleted') {\n PROP_ADD_TYPE = 'new';\n PROP_UPDATE_TY
PE = 'updated';\n PROP_RECONFIGURE_TYPE = 'reconfigured';\n PROP_DELET
E_TYPE = 'deleted';\n } else if (records[0].type != 'add' ||\n
records[1].type != 'update' ||\n records[2].type != 'delete') {\n
console.error('Unexpected change record names for Object.observe. ' +\n
'Using dirty-checking instead');\n return false;\n }\n
Object.unobserve(test, callback);\n\n test = [0];\n Array.observe(test,
callback);\n test[1] = 1;\n test.length = 0;\n Object.deliverChangeReco
rds(callback);\n if (records.length != 2)\n return false;\n if (recor
ds[0].type != ARRAY_SPLICE_TYPE ||\n records[1].type != ARRAY_SPLICE_TYPE
) {\n return false;\n }\n Array.unobserve(test, callback);\n\n ret
urn true;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detect
Eval() {\n // don't test for eval if document has CSP securityPolicy object a
nd we can see that\n // eval is not supported. This avoids an error message i
n console even when the exception\n // is caught\n if (global.document &&\
n 'securityPolicy' in global.document &&\n !global.document.securi
tyPolicy.allowsEval) {\n return false;\n }\n\n try {\n var f = n
ew Function('', 'return true;');\n return f();\n } catch (ex) {\n r
eturn false;\n }\n }\n\n var hasEval = 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.isNaN || function isNaN(value) {\n return typ
eof value === 'number' && global.isNaN(value);\n }\n\n function areSameValue(l
eft, right) {\n if (left === right)\n return left !== 0 || 1 / left ===
1 / right;\n if (numberIsNaN(left) && numberIsNaN(right))\n return true;
\n\n return left !== left && right !== right;\n }\n\n var createObject = ('
__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n
var proto = obj.__proto__;\n if (!proto)\n return obj;\n v
ar newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forE
ach(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n });\n
return newObject;\n };\n\n var identStart = '[\\$_a-zA-Z]';\n var identPa
rt = '[\\$_a-zA-Z0-9]';\n var ident = identStart + '+' + identPart + '*';\n va
r elementIndex = '(?:[0-9]|[1-9]+[0-9]+)';\n var identOrElementIndex = '(?:' +
ident + '|' + elementIndex + ')';\n var path = '(?:' + identOrElementIndex + ')
(?:\\\\s*\\\\.\\\\s*' + identOrElementIndex + ')*';\n var pathRegExp = new RegE
xp('^' + path + '$');\n\n function isPathValid(s) {\n if (typeof s != 'strin
g')\n return false;\n s = s.trim();\n\n if (s == '')\n return tr
ue;\n\n if (s[0] == '.')\n return false;\n\n return pathRegExp.test(s
);\n }\n\n var constructorIsPrivate = {};\n\n function Path(s, privateToken)
{\n if (privateToken !== constructorIsPrivate)\n throw Error('Use Path.g
et to retrieve path objects');\n\n if (s.trim() == '')\n return this;\n\
n if (isIndex(s)) {\n this.push(s);\n return this;\n }\n\n s.
split(/\\s*\\.\\s*/).filter(function(part) {\n return part;\n }).forEach
(function(part) {\n this.push(part);\n }, this);\n\n if (hasEval && !
hasObserve && this.length) {\n this.getValueFrom = this.compiledGetValueFro
mFn();\n }\n }\n\n // TODO(rafaelw): Make simple 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(pathStrin
g);\n\n var path = pathCache[pathString];\n if (path)\n return path;\
n if (!isPathValid(pathString))\n return invalidPath;\n var path = ne
w Path(pathString, constructorIsPrivate);\n pathCache[pathString] = path;\n
return path;\n }\n\n Path.get = getPath;\n\n Path.prototype = createObject(
{\n __proto__: [],\n valid: true,\n\n toString: function() {\n ret
urn this.join('.');\n },\n\n getValueFrom: function(obj, observedSet) {\n
for (var i = 0; i < this.length; i++) {\n if (obj == null)\n
return;\n if (observedSet)\n observedSet.observe(obj);\n
obj = obj[this[i]];\n }\n return obj;\n },\n\n compiledGetValu
eFromFn: function() {\n var accessors = this.map(function(ident) {\n
return isIndex(ident) ? '[\"' + ident + '\"]' : '.' + 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 += accessors[i];\n str += ' &&\\n ' +
pathString + ' != null';\n }\n str += ')\\n';\n\n pathString +=
accessors[i];\n\n str += ' return ' + pathString + ';\\nelse\\n return un
defined;';\n return new Function('obj', str);\n },\n\n setValueFrom:
function(obj, value) {\n if (!this.length)\n return false;\n\n
for (var i = 0; i < this.length - 1; i++) {\n if (!isObject(obj))\n
return false;\n obj = obj[this[i]];\n }\n\n if (!isObject(o
bj))\n return false;\n\n obj[this[i]] = value;\n return true;\n
}\n });\n\n var invalidPath = new Path('', constructorIsPrivate);\n inval
idPath.valid = false;\n invalidPath.getValueFrom = invalidPath.setValueFrom = f
unction() {};\n\n var MAX_DIRTY_CHECK_CYCLES = 1000;\n\n function dirtyCheck(o
bserver) {\n var cycles = 0;\n while (cycles < MAX_DIRTY_CHECK_CYCLES && o
bserver.check_()) {\n observer.report_();\n cycles++;\n }\n if (
global.testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;\n
}\n\n function objectIsEmpty(object) {\n for (var prop in object)\n ret
urn 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(obje
ct, oldObject) {\n var added = {};\n var removed = {};\n var changed =
{};\n var oldObjectHas = {};\n\n for (var prop in oldObject) {\n var
newValue = object[prop];\n\n if (newValue !== undefined && newValue === old
Object[prop])\n continue;\n\n if (!(prop in object)) {\n remo
ved[prop] = undefined;\n continue;\n }\n\n if (newValue !== old
Object[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 !== old
Object.length)\n changed.length = object.length;\n\n return {\n add
ed: added,\n removed: removed,\n changed: changed\n };\n }\n\n fu
nction copyObject(object, opt_copy) {\n var copy = opt_copy || (Array.isArray
(object) ? [] : {});\n for (var prop in object) {\n copy[prop] = object[
prop];\n };\n if (Array.isArray(object))\n copy.length = object.lengt
h;\n return copy;\n }\n\n function Observer(object, callback, target) {\n
this.closed_ = false;\n this.object_ = object;\n this.callback = callbac
k; // TODO(rafaelw): Used in NodeBind\n // TODO(rafaelw): Hold this.target we
akly when WeakRef is available.\n this.target = target; // TODO(rafaelw): Use
d in NodeBind\n this.reporting_ = true;\n if (hasObserve) {\n var sel
f = this;\n this.boundInternalCallback_ = function(records) {\n self
.internalCallback_(records);\n };\n }\n\n addToAll(this);\n }\n\n O
bserver.prototype = {\n internalCallback_: function(records) {\n if (thi
s.closed_)\n return;\n if (this.reporting_ && this.check_(records))
{\n this.report_();\n if (this.testingResults)\n this.tes
tingResults.anyChanged = true;\n }\n },\n\n close: function() {\n
if (this.closed_)\n return;\n if (this.object_ && typeof this.obje
ct_.close === 'function')\n this.object_.close();\n\n this.disconnec
t_();\n this.object_ = undefined;\n this.closed_ = true;\n },\n\n
deliver: function(testingResults) {\n if (this.closed_)\n return;\
n if (hasObserve) {\n this.testingResults = testingResults;\n
Object.deliverChangeRecords(this.boundInternalCallback_);\n this.testing
Results = undefined;\n } else {\n dirtyCheck(this);\n }\n },
\n\n report_: function() {\n if (!this.reporting_)\n return;\n\n
this.sync_(false);\n if (this.callback) {\n this.invokeCallback
_(this.reportArgs);\n }\n this.reportArgs = undefined;\n },\n\n
invokeCallback_: function(args) {\n try {\n this.callback.apply(this
.target, args);\n } catch (ex) {\n Observer._errorThrownDuringCallba
ck = true;\n console.error('Exception caught during observer callback: '
+ (ex.stack || ex));\n }\n },\n\n reset: function() {\n if (this
.closed_)\n return;\n\n if (hasObserve) {\n this.reporting_ =
false;\n Object.deliverChangeRecords(this.boundInternalCallback_);\n
this.reporting_ = true;\n }\n\n this.sync_(true);\n }\n }\n\n
var collectObservers = !hasObserve || global.forceCollectObservers;\n var allO
bservers;\n Observer._allObserversCount = 0;\n\n if (collectObservers) {\n
allObservers = [];\n }\n\n function addToAll(observer) {\n if (!collectObse
rvers)\n return;\n\n allObservers.push(observer);\n Observer._allObse
rversCount++;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n var hasDebu
gForceFullDelivery = typeof Object.deliverAllChangeRecords == 'function';\n\n g
lobal.Platform = global.Platform || {};\n\n global.Platform.performMicrotaskChe
ckpoint = function() {\n if (runningMicrotaskCheckpoint)\n return;\n\n
if (hasDebugForceFullDelivery) {\n Object.deliverAllChangeRecords();\n
return;\n }\n\n if (!collectObservers)\n return;\n\n runningMic
rotaskCheckpoint = true;\n\n var cycles = 0;\n var results = {};\n\n do
{\n cycles++;\n var toCheck = allObservers;\n allObservers = [];
\n results.anyChanged = false;\n\n for (var i = 0; i < toCheck.length;
i++) {\n var observer = toCheck[i];\n if (observer.closed_)\n
continue;\n\n if (hasObserve) {\n observer.deliver(results
);\n } else if (observer.check_()) {\n results.anyChanged = true
;\n observer.report_();\n }\n\n allObservers.push(observe
r);\n }\n } while (cycles < MAX_DIRTY_CHECK_CYCLES && results.anyChanged
);\n\n if (global.testingExposeCycleCount)\n global.dirtyCheckCycleCount
= cycles;\n\n Observer._allObserversCount = allObservers.length;\n runnin
gMicrotaskCheckpoint = false;\n };\n\n if (collectObservers) {\n global.Pla
tform.clearObservers = function() {\n allObservers = [];\n };\n }\n\n
function ObjectObserver(object, callback, target) {\n Observer.call(this, obj
ect, callback, target);\n this.connect_();\n this.sync_(true);\n }\n\n O
bjectObserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n
connect_: function() {\n if (hasObserve)\n Object.observe(this.o
bject_, this.boundInternalCallback_);\n },\n\n sync_: function(hard) {\n
if (!hasObserve)\n this.oldObject = copyObject(this.object_);\n },
\n\n check_: function(changeRecords) {\n var diff;\n var oldValues;
\n if (hasObserve) {\n if (!changeRecords)\n return false;\
n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.obje
ct_, changeRecords,\n oldValues);\n
} else {\n oldValues = this.oldObject;\n diff = diffObjectFromO
ldObject(this.object_, this.oldObject);\n }\n\n if (diffIsEmpty(diff))
\n return false;\n\n this.reportArgs =\n [diff.added || {},
diff.removed || {}, diff.changed || {}];\n this.reportArgs.push(function(p
roperty) {\n return oldValues[property];\n });\n\n return true;
\n },\n\n disconnect_: function() {\n if (!hasObserve)\n this.
oldObject = undefined;\n else if (this.object_)\n Object.unobserve(t
his.object_, this.boundInternalCallback_);\n }\n });\n\n function ArrayObse
rver(array, callback, target) {\n if (!Array.isArray(array))\n throw Err
or('Provided object is not an Array');\n ObjectObserver.call(this, array, cal
lback, target);\n }\n\n ArrayObserver.prototype = createObject({\n __proto_
_: ObjectObserver.prototype,\n\n connect_: function() {\n if (hasObserve
)\n Array.observe(this.object_, this.boundInternalCallback_);\n },\n\n
sync_: function() {\n if (!hasObserve)\n this.oldObject = this.o
bject_.slice();\n },\n\n check_: function(changeRecords) {\n var spli
ces;\n if (hasObserve) {\n if (!changeRecords)\n return fal
se;\n splices = projectArraySplices(this.object_, changeRecords);\n
} else {\n splices = calcSplices(this.object_, 0, this.object_.length,\n
this.oldObject, 0, this.oldObject.length);\n }
\n\n if (!splices || !splices.length)\n return false;\n\n this.
reportArgs = [splices];\n return true;\n }\n });\n\n ArrayObserver.app
lySplices = function(previous, current, splices) {\n splices.forEach(function
(splice) {\n var spliceArgs = [splice.index, splice.removed.length];\n
var addIndex = splice.index;\n while (addIndex < splice.index + splice.add
edCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++;\n
}\n\n Array.prototype.splice.apply(previous, spliceArgs);\n });\n }
;\n\n function ObservedSet(callback) {\n this.arr = [];\n this.callback =
callback;\n this.isObserved = true;\n }\n\n // TODO(rafaelw): Consider sur
facing a way to avoid observing prototype\n // ancestors which are expected not
to change (e.g. Element, Node...).\n var objProto = Object.getPrototypeOf({});
\n var arrayProto = Object.getPrototypeOf([]);\n ObservedSet.prototype = {\n
reset: function() {\n this.isObserved = !this.isObserved;\n },\n\n
observe: function(obj) {\n if (!isObject(obj) || obj === objProto || obj ==
= arrayProto)\n return;\n var i = this.arr.indexOf(obj);\n if (
i >= 0 && this.arr[i+1] === this.isObserved)\n return;\n\n if (i < 0
) {\n i = this.arr.length;\n this.arr[i] = obj;\n Object.ob
serve(obj, this.callback);\n }\n\n this.arr[i+1] = this.isObserved;\n
this.observe(Object.getPrototypeOf(obj));\n },\n\n cleanup: function(
) {\n var i = 0, j = 0;\n var isObserved = this.isObserved;\n whi
le(j < this.arr.length) {\n var obj = this.arr[j];\n if (this.arr[
j + 1] == isObserved) {\n if (i < j) {\n this.arr[i] = obj;\
n this.arr[i + 1] = isObserved;\n }\n i += 2;\n
} else {\n Object.unobserve(obj, this.callback);\n }\n
j += 2;\n }\n\n this.arr.length = i;\n }\n };\n\n function Path
Observer(object, path, callback, target, transformFn,\n s
etValueFn) {\n var path = path instanceof Path ? path : getPath(path);\n i
f (!path.valid || !path.length || !isObject(object)) {\n this.value_ = path
.getValueFrom(object);\n this.value = transformFn ? transformFn(this.value_
) : this.value_;\n this.closed_ = true;\n return;\n }\n\n Observ
er.call(this, object, callback, target);\n this.transformFn_ = transformFn;\n
this.setValueFn_ = setValueFn;\n this.path_ = path;\n\n this.connect_(
);\n this.sync_(true);\n }\n\n PathObserver.prototype = createObject({\n
__proto__: Observer.prototype,\n\n connect_: function() {\n if (hasObse
rve)\n this.observedSet_ = new ObservedSet(this.boundInternalCallback_);\
n },\n\n disconnect_: function() {\n this.value = undefined;\n t
his.value_ = undefined;\n if (this.observedSet_) {\n this.observedSe
t_.reset();\n this.observedSet_.cleanup();\n this.observedSet_ = u
ndefined;\n }\n },\n\n check_: function() {\n // Note: Extractin
g this to a member function for use here and below\n // regresses dirty-che
cking path perf by about 25% =-(.\n if (this.observedSet_)\n this.ob
servedSet_.reset();\n\n this.value_ = this.path_.getValueFrom(this.object_,
this.observedSet_);\n\n if (this.observedSet_)\n this.observedSet_.
cleanup();\n\n if (areSameValue(this.value_, this.oldValue_))\n retu
rn false;\n\n this.value = this.transformFn_ ? this.transformFn_(this.value
_)\n : this.value_;\n this.reportArgs =
[this.value, this.oldValue];\n return true;\n },\n\n sync_: function
(hard) {\n if (hard) {\n if (this.observedSet_)\n this.obse
rvedSet_.reset();\n\n this.value_ = this.path_.getValueFrom(this.object_,
this.observedSet_);\n this.value = this.transformFn_ ? this.transformFn_
(this.value_)\n : this.value_;\n\n
if (this.observedSet_)\n this.observedSet_.cleanup();\n }\n\n
this.oldValue_ = this.value_;\n this.oldValue = this.value;\n },\n\n
setValue: function(newValue) {\n if (this.setValueFn_)\n this.setVa
lueFn_(newValue);\n else if (this.path_)\n this.path_.setValueFrom(t
his.object_, newValue);\n }\n });\n\n function CompoundPathObserver(callbac
k, target, transformFn, setValueFn) {\n Observer.call(this, undefined, callba
ck, target);\n this.transformFn_ = transformFn;\n this.setValueFn_ = setVa
lueFn;\n\n this.observed_ = [];\n this.values_ = [];\n this.value = und
efined;\n this.oldValue = undefined;\n this.oldValues_ = undefined;\n t
his.changeFlags_ = undefined;\n this.started_ = false;\n }\n\n CompoundPath
Observer.prototype = createObject({\n __proto__: PathObserver.prototype,\n\n
// TODO(rafaelw): Consider special-casing when |object| is a PathObserver\n
// and path 'value' to avoid explicit observation.\n addPath: function(obje
ct, path) {\n if (this.started_)\n throw Error('Cannot add more path
s once started.');\n\n var path = path instanceof Path ? path : getPath(pat
h);\n var value = path.getValueFrom(object);\n\n this.observed_.push(o
bject, path);\n this.values_.push(value);\n },\n\n start: function()
{\n this.started_ = true;\n this.connect_();\n this.sync_(true);\
n },\n\n getValues_: function() {\n if (this.observedSet_)\n t
his.observedSet_.reset();\n\n var anyChanged = false;\n for (var i = 0
; i < this.observed_.length; i = i+2) {\n var path = this.observed_[i+1];
\n var object = this.observed_[i];\n var value = path.getValueFrom
(object, this.observedSet_);\n var oldValue = this.values_[i/2];\n
if (!areSameValue(value, oldValue)) {\n if (!anyChanged && !this.trans
formFn_) {\n this.oldValues_ = this.oldValues_ || [];\n th
is.changeFlags_ = this.changeFlags_ || [];\n for (var j = 0; j < this
.values_.length; j++) {\n this.oldValues_[j] = this.values_[j];\n
this.changeFlags_[j] = false;\n }\n }\n\n
if (!this.transformFn_)\n this.changeFlags_[i/2] = true;\n\n
this.values_[i/2] = value;\n anyChanged = true;\n }\n }
\n\n if (this.observedSet_)\n this.observedSet_.cleanup();\n\n
return anyChanged;\n },\n\n check_: function() {\n if (!this.getValue
s_())\n return;\n\n if (this.transformFn_) {\n this.value = t
his.transformFn_(this.values_);\n\n if (areSameValue(this.value, this.old
Value))\n return false;\n\n this.reportArgs = [this.value, this.
oldValue];\n } else {\n this.reportArgs = [this.values_, this.oldVal
ues_, this.changeFlags_,\n this.observed_];\n }\n
\n return true;\n },\n\n sync_: function(hard) {\n if (hard) {\n
this.getValues_();\n if (this.transformFn_)\n this.value
= this.transformFn_(this.values_);\n }\n\n if (this.transformFn_)\n
this.oldValue = this.value;\n },\n\n close: function() {\n if (
this.observed_) {\n for (var i = 0; i < this.observed_.length; i = i + 2)
{\n var object = this.observed_[i];\n if (object && typeof ob
ject.close === 'function')\n object.close();\n }\n this
.observed_ = undefined;\n this.values_ = undefined;\n }\n\n Obs
erver.prototype.close.call(this);\n }\n });\n\n var expectedRecordTypes = {
};\n expectedRecordTypes[PROP_ADD_TYPE] = true;\n expectedRecordTypes[PROP_UPD
ATE_TYPE] = true;\n expectedRecordTypes[PROP_DELETE_TYPE] = true;\n\n function
notifyFunction(object, name) {\n if (typeof Object.observe !== 'function')\n
return;\n\n var notifier = Object.getNotifier(object);\n return func
tion(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(changeRecord
);\n }\n }\n\n // TODO(rafaelw): It should be possible for the Object.obser
ve case to have\n // every PathObserver used by defineProperty share a single O
bject.observe\n // callback, and thus get() can simply call observer.deliver()
and any changes\n // to any dependent value will be observed.\n PathObserver.d
efineProperty = function(target, name, object, path) {\n // TODO(rafaelw): Va
lidate errors\n path = getPath(path);\n var notify = notifyFunction(target
, name);\n\n var observer = new PathObserver(object, path,\n function(
newValue, oldValue) {\n if (notify)\n notify(PROP_UPDATE_TYP
E, oldValue);\n }\n );\n\n Object.defineProperty(target, name, {\n
get: function() {\n return path.getValueFrom(object);\n },\n
set: function(newValue) {\n path.setValueFrom(object, newValue);\n
},\n configurable: true\n });\n\n return {\n close: function()
{\n var oldValue = path.getValueFrom(object);\n if (notify)\n
observer.deliver();\n observer.close();\n Object.definePrope
rty(target, name, {\n value: oldValue,\n writable: true,\n
configurable: true\n });\n }\n };\n }\n\n function diffOb
jectFromChangeRecords(object, changeRecords, oldValues) {\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 changeRecord 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 (r
ecord.type == PROP_UPDATE_TYPE)\n continue;\n\n if (record.type == P
ROP_ADD_TYPE) {\n if (record.name in removed)\n delete removed[r
ecord.name];\n else\n added[record.name] = true;\n\n cont
inue;\n }\n\n // type = 'delete'\n if (record.name in added) {\n
delete added[record.name];\n delete oldValues[record.name];\n
} else {\n removed[record.name] = true;\n }\n }\n\n for (var
prop in added)\n added[prop] = object[prop];\n\n for (var prop in remove
d)\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[prop] !== newValue)\
n changed[prop] = newValue;\n }\n\n return {\n added: added,\n
removed: removed,\n changed: changed\n };\n }\n\n function newSp
lice(index, removed, addedCount) {\n return {\n index: index,\n rem
oved: 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_DELETE = 3;\n\n fun
ction ArraySplice() {}\n\n ArraySplice.prototype = {\n\n // Note: This funct
ion is *based* on the computation of the Levenshtein\n // \"edit\" distance.
The one change is that \"updates\" are treated as two\n // edits - not one. W
ith Array splices, an update is really a delete\n // followed by an add. By r
etaining this, we optimize for \"keeping\" the\n // maximum array items in th
e original array. For example:\n //\n // 'xxxx123' -> '123yyyy'\n //\
n // With 1-edit updates, the shortest path would be just to update all seven
\n // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\
n // leaves the substring '123' intact.\n calcEditDistances: function(curr
ent, currentStart, currentEnd,\n old, oldStart, o
ldEnd) {\n // \"Deletion\" columns\n var rowCount = oldEnd - oldStart
+ 1;\n var columnCount = currentEnd - currentStart + 1;\n var distance
s = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\
n for (var i = 0; i < rowCount; i++) {\n distances[i] = new Array(co
lumnCount);\n distances[i][0] = i;\n }\n\n // Initialize null r
ow\n for (var j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\
n for (var i = 1; i < rowCount; i++) {\n for (var j = 1; j < columnC
ount; j++) {\n if (this.equals(current[currentStart + j - 1], old[oldSt
art + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n
else {\n var north = distances[i - 1][j] + 1;\n var west
= distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north
: west;\n }\n }\n }\n\n return distances;\n },\n\n
// This starts at the final weight, and walks \"backward\" by finding\n //
the minimum previous weight recursively until the origin of the weight\n //
matrix.\n spliceOperationsFromEditDistances: function(distances) {\n var
i = distances.length - 1;\n var j = distances[0].length - 1;\n var cu
rrent = 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 = dist
ances[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 = nort
h < northWest ? north : northWest;\n\n if (min == northWest) {\n
if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } e
lse {\n edits.push(EDIT_UPDATE);\n current = northWest;\n
}\n i--;\n j--;\n } else if (min == west) {\n
edits.push(EDIT_DELETE);\n i--;\n current = west;\n
} else {\n edits.push(EDIT_ADD);\n j--;\n curre
nt = 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 asce
nding index order of. The tuple represents that at\n * the |index|, |removed
| sequence of items were removed, and counting forward\n * from |index|, |ad
dedCount| items were added.\n */\n\n /**\n * Lacking individual splic
e mutation information, the minimal set of\n * splices can be synthesized gi
ven the previous state and final state of an\n * array. The basic approach i
s to calculate the edit distance matrix and\n * choose the shortest path thr
ough it.\n *\n * Complexity: O(l * p)\n * l: The length of the cur
rent array\n * p: The length of the old array\n */\n calcSplices: f
unction(current, currentStart, currentEnd,\n old, oldSt
art, oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n
var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n i
f (currentStart == 0 && oldStart == 0)\n prefixCount = this.sharedPrefix(
current, old, minLength);\n\n if (currentEnd == current.length && oldEnd ==
old.length)\n suffixCount = this.sharedSuffix(current, old, minLength -
prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCou
nt;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if
(currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n
\n if (currentStart == currentEnd) {\n var splice = newSplice(curren
tStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.pus
h(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStart ==
oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentStart)
];\n\n var ops = this.spliceOperationsFromEditDistances(\n this.c
alcEditDistances(current, currentStart, currentEnd,\n
old, oldStart, oldEnd));\n\n var splice = undefined;\n var splic
es = [];\n var index = currentStart;\n var oldIndex = oldStart;\n
for (var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n cas
e EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n
splice = undefined;\n }\n\n index++;\n
oldIndex++;\n break;\n case EDIT_UPDATE:\n i
f (!splice)\n splice = newSplice(index, [], 0);\n\n spli
ce.addedCount++;\n index++;\n\n splice.removed.push(old[ol
dIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:
\n if (!splice)\n splice = newSplice(index, [], 0);\n\n
splice.addedCount++;\n index++;\n break;\n
case EDIT_DELETE:\n if (!splice)\n splice = newSpli
ce(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n
oldIndex++;\n break;\n }\n }\n\n if (splice) {\n
splices.push(splice);\n }\n return splices;\n },\n\n share
dPrefix: function(current, old, searchLength) {\n for (var i = 0; i < searc
hLength; i++)\n if (!this.equals(current[i], old[i]))\n return i
;\n return searchLength;\n },\n\n sharedSuffix: function(current, old
, searchLength) {\n var index1 = current.length;\n var index2 = old.le
ngth;\n var count = 0;\n while (count < searchLength && this.equals(cu
rrent[--index1], old[--index2]))\n count++;\n\n return count;\n }
,\n\n calculateSplices: function(current, previous) {\n return this.calc
Splices(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, currentStart, currentEn
d,\n old, oldStart, oldEnd) {\n return arraySplice.calc
Splices(current, currentStart, currentEnd,\n o
ld, oldStart, oldEnd);\n }\n\n function intersect(start1, end1, 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 (en
d1 < end2)\n return end1 - start2; // Overlap\n else\n return
end2 - start2; // Contained\n } else {\n // Non-zero intersect, span2 f
irst\n if (end2 < end1)\n return end2 - start1; // Overlap\n el
se\n return end1 - start1; // Contained\n }\n }\n\n function mergeSp
lice(splices, index, removed, addedCount) {\n\n var splice = newSplice(index,
removed, addedCount);\n\n var inserted = false;\n var insertionOffset = 0
;\n\n for (var i = 0; i < splices.length; i++) {\n var current = splices
[i];\n current.index += insertionOffset;\n\n if (inserted)\n co
ntinue;\n\n var intersectCount = intersect(splice.index,\n
splice.index + splice.removed.length,\n
current.index,\n current.ind
ex + current.addedCount);\n\n if (intersectCount >= 0) {\n // Merge
the two splices\n\n splices.splice(i, 1);\n i--;\n\n insert
ionOffset -= current.addedCount - current.removed.length;\n\n splice.adde
dCount += current.addedCount - intersectCount;\n var deleteCount = splice
.removed.length +\n current.removed.length - intersectC
ount;\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.index < current.index
) {\n // some prefix of splice.removed is prepended to current.remove
d.\n var prepend = splice.removed.slice(0, current.index - splice.ind
ex);\n Array.prototype.push.apply(prepend, removed);\n rem
oved = prepend;\n }\n\n if (splice.index + splice.removed.leng
th > current.index + current.addedCount) {\n // some suffix of splice
.removed is appended to current.removed.\n var append = splice.remove
d.slice(current.index + current.addedCount - splice.index);\n Array.p
rototype.push.apply(removed, append);\n }\n\n splice.removed =
removed;\n if (current.index < splice.index) {\n splice.ind
ex = current.index;\n }\n }\n } else if (splice.index < cur
rent.index) {\n // Insert splice here.\n\n inserted = true;\n\n
splices.splice(i, 0, splice);\n i++;\n\n var offset = splice.
addedCount - splice.removed.length\n current.index += offset;\n in
sertionOffset += offset;\n }\n }\n\n if (!inserted)\n splices.pu
sh(splice);\n }\n\n function createInitialSplices(array, changeRecords) {\n
var splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\n
var record = changeRecords[i];\n switch(record.type) {\n case ARRA
Y_SPLICE_TYPE:\n mergeSplice(splices, record.index, record.removed.slic
e(), record.addedCount);\n break;\n case PROP_ADD_TYPE:\n
case PROP_UPDATE_TYPE:\n case PROP_DELETE_TYPE:\n if (!isIndex(
record.name))\n continue;\n var index = toNumber(record.name
);\n if (index < 0)\n continue;\n mergeSplice(splic
es, index, [record.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 projectArraySpl
ices(array, changeRecords) {\n var splices = [];\n\n createInitialSplices(
array, changeRecords).forEach(function(splice) {\n if (splice.addedCount ==
1 && splice.removed.length == 1) {\n if (splice.removed[0] !== array[spl
ice.index])\n splices.push(splice);\n\n return\n };\n\n
splices = splices.concat(calcSplices(array, splice.index, splice.index + splic
e.addedCount,\n splice.removed, 0, spl
ice.removed.length));\n });\n\n return splices;\n }\n\n global.Observer
= Observer;\n global.Observer.hasObjectObserve = hasObserve;\n global.ArrayObs
erver = ArrayObserver;\n global.ArrayObserver.calculateSplices = function(curre
nt, previous) {\n return arraySplice.calculateSplices(current, previous);\n
};\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver = ObjectObser
ver;\n global.PathObserver = PathObserver;\n global.CompoundPathObserver = Com
poundPathObserver;\n global.Path = Path;\n\n // TODO(rafaelw): Only needed for
testing until new change record names\n // make it to release.\n global.Obser
ver.changeRecordTypes = {\n add: PROP_ADD_TYPE,\n update: PROP_UPDATE_TYPE
,\n reconfigure: PROP_RECONFIGURE_TYPE,\n 'delete': PROP_DELETE_TYPE,\n
splice: ARRAY_SPLICE_TYPE\n };\n})(typeof global !== 'undefined' && global ? g
lobal : this || window);\n","// prepoulate window.Platform.flags for default con
trols\r\nwindow.Platform = window.Platform || {};\r\n// prepopulate window.logFl
ags if necessary\r\nwindow.logFlags = window.logFlags || {};\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.search.slice(1).split('&').forEach(f
unction(o) {\r\n o = o.split('=');\r\n o[0] && (flags[o[0]] = o[1] || true
);\r\n });\r\n // If any of these flags match 'native', then force native Shad
owDOM; any\r\n // other truthy value, or failure to detect native\r\n // Shado
wDOM, results in polyfill \r\n flags.shadow = (flags.shadow || 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.prototyp
e.createShadowRoot\r\n && 'polyfill';\r\n }\r\n\r\n\r\n\r\n // export\r
\n scope.flags = flags;\r\n})(Platform);\r\n// select ShadowDOM impl\r\nif (Pla
tform.flags.shadow === 'polyfill') {","// Copyright 2012 The Polymer Authors. Al
l rights reserved.\n// Use of this source code is goverened by a BSD-style\n// l
icense that can be found in the LICENSE file.\n\nwindow.ShadowDOMPolyfill = {};\
n\n(function(scope) {\n 'use strict';\n\n var constructorTable = new WeakMap()
;\n var nativePrototypeTable = new WeakMap();\n var wrappers = Object.create(n
ull);\n\n // Don't test for eval if document has CSP securityPolicy object and
we can\n // see that eval is not supported. This avoids an error message in con
sole\n // even when the exception is caught\n var hasEval = !('securityPolicy'
in document) ||\n document.securityPolicy.allowsEval;\n if (hasEval) {\n
try {\n var f = new Function('', 'return true;');\n hasEval = f();\
n } catch (ex) {\n hasEval = false;\n }\n }\n\n function assert(b)
{\n if (!b)\n throw new Error('Assertion failed');\n };\n\n var define
Property = Object.defineProperty;\n var getOwnPropertyNames = Object.getOwnProp
ertyNames;\n var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\
n function mixin(to, from) {\n getOwnPropertyNames(from).forEach(function(na
me) {\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n
});\n return to;\n };\n\n function mixinStatics(to, from) {\n getOwnPr
opertyNames(from).forEach(function(name) {\n switch (name) {\n case
'arguments':\n case 'caller':\n case 'length':\n case 'name
':\n case 'prototype':\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 < propertyNames.length; i++) {\n if (propertyNames[i] in obje
ct)\n return propertyNames[i];\n }\n }\n\n // Mozilla's old DOM bind
ings are bretty busted:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=85584
4\n // Make sure they are create before we start modifying things.\n getOwnPro
pertyNames(window);\n\n function getWrapperConstructor(node) {\n var nativeP
rototype = node.__proto__ || Object.getPrototypeOf(node);\n var wrapperConstr
uctor = constructorTable.get(nativePrototype);\n if (wrapperConstructor)\n
return wrapperConstructor;\n\n var parentWrapperConstructor = getWrapperCo
nstructor(nativePrototype);\n\n var GeneratedWrapper = createWrapperConstruct
or(parentWrapperConstructor);\n registerInternal(nativePrototype, GeneratedWr
apper, node);\n\n return GeneratedWrapper;\n }\n\n function addForwardingPr
operties(nativePrototype, wrapperPrototype) {\n installProperty(nativePrototy
pe, wrapperPrototype, true);\n }\n\n function registerInstanceProperties(wrapp
erPrototype, instanceObject) {\n installProperty(instanceObject, wrapperProto
type, false);\n }\n\n var isFirefox = /Firefox/.test(navigator.userAgent);\n\n
// This is used as a fallback when getting the descriptor fails in\n // insta
llProperty.\n var dummyDescriptor = {\n get: function() {},\n set: functi
on(v) {},\n configurable: true,\n enumerable: true\n };\n\n function isE
ventHandlerName(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 this.impl.' + name) :\n function() { return this
.impl[name]; };\n }\n\n function getSetter(name) {\n return hasEval && isId
entifierName(name) ?\n new Function('v', 'this.impl.' + name + ' = v') :\
n function(v) { this.impl[name] = v; };\n }\n\n function getMethod(name
) {\n return hasEval && isIdentifierName(name) ?\n new Function('retur
n this.impl.' + name +\n '.apply(this.impl, arguments)') :\n
function() { return this.impl[name].apply(this.impl, arguments); };\n }
\n\n function getDescriptor(source, name) {\n try {\n return Object.get
OwnPropertyDescriptor(source, name);\n } catch (ex) {\n // JSC and V8 bo
th use data properties instead of accessors which can\n // cause getting th
e property desciptor to throw an exception.\n // https://bugs.webkit.org/sh
ow_bug.cgi?id=49739\n return dummyDescriptor;\n }\n }\n\n function ins
tallProperty(source, target, allowMethod, opt_blacklist) {\n var names = getO
wnPropertyNames(source);\n for (var i = 0; i < names.length; i++) {\n va
r name = names[i];\n if (name === 'polymerBlackList_')\n continue;\n
\n if (name in target)\n continue;\n\n if (source.polymerBlackL
ist_ && source.polymerBlackList_[name])\n continue;\n\n if (isFirefo
x) {\n // Tickle Firefox's old bindings.\n source.__lookupGetter__
(name);\n }\n var 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 = isEventHandlerName(name);\n if (isEvent)\n getter =
scope.getEventHandlerGetter(name);\n else\n getter = getGetter(name
);\n\n if (descriptor.writable || descriptor.set) {\n if (isEvent)\n
setter = scope.getEventHandlerSetter(name);\n else\n s
etter = getSetter(name);\n }\n\n defineProperty(target, name, {\n
get: getter,\n set: setter,\n configurable: descriptor.configur
able,\n enumerable: descriptor.enumerable\n });\n }\n }\n\n /**
\n * @param {Function} nativeConstructor\n * @param {Function} wrapperConstr
uctor\n * @param {Object=} opt_instance If present, this is used to extract\n
* properties from an instance object.\n */\n function register(nativeCo
nstructor, wrapperConstructor, opt_instance) {\n var nativePrototype = native
Constructor.prototype;\n registerInternal(nativePrototype, wrapperConstructor
, opt_instance);\n mixinStatics(wrapperConstructor, nativeConstructor);\n }\
n\n function registerInternal(nativePrototype, wrapperConstructor, opt_instance
) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(constr
uctorTable.get(nativePrototype) === undefined);\n\n constructorTable.set(nati
vePrototype, wrapperConstructor);\n nativePrototypeTable.set(wrapperPrototype
, nativePrototype);\n\n addForwardingProperties(nativePrototype, wrapperProto
type);\n if (opt_instance)\n registerInstanceProperties(wrapperPrototype
, opt_instance);\n defineProperty(wrapperPrototype, 'constructor', {\n v
alue: wrapperConstructor,\n configurable: true,\n enumerable: false,\n
writable: true\n });\n }\n\n function isWrapperFor(wrapperConstructor
, nativeConstructor) {\n return constructorTable.get(nativeConstructor.protot
ype) ===\n wrapperConstructor;\n }\n\n /**\n * Creates a generic wrap
per constructor based on |object| and its\n * constructor.\n * @param {Node}
object\n * @return {Function} The generated constructor.\n */\n function r
egisterObject(object) {\n var nativePrototype = Object.getPrototypeOf(object)
;\n\n var superWrapperConstructor = getWrapperConstructor(nativePrototype);\n
var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);\n
registerInternal(nativePrototype, GeneratedWrapper, object);\n\n return Ge
neratedWrapper;\n }\n\n function createWrapperConstructor(superWrapperConstruc
tor) {\n function GeneratedWrapper(node) {\n superWrapperConstructor.cal
l(this, node);\n }\n GeneratedWrapper.prototype =\n Object.create(s
uperWrapperConstructor.prototype);\n GeneratedWrapper.prototype.constructor =
GeneratedWrapper;\n\n return GeneratedWrapper;\n }\n\n var OriginalDOMImpl
ementation = window.DOMImplementation;\n var OriginalEvent = window.Event;\n v
ar OriginalNode = window.Node;\n var OriginalWindow = window.Window;\n var Ori
ginalRange = window.Range;\n var OriginalCanvasRenderingContext2D = window.Canv
asRenderingContext2D;\n var OriginalWebGLRenderingContext = window.WebGLRenderi
ngContext;\n\n function isWrapper(object) {\n return object instanceof wrapp
ers.EventTarget ||\n object instanceof wrappers.Event ||\n o
bject instanceof wrappers.Range ||\n object instanceof wrappers.DOMImp
lementation ||\n object instanceof wrappers.CanvasRenderingContext2D |
|\n wrappers.WebGLRenderingContext &&\n object instanceo
f wrappers.WebGLRenderingContext;\n }\n\n function isNative(object) {\n ret
urn object instanceof OriginalNode ||\n object instanceof OriginalEven
t ||\n object instanceof OriginalWindow ||\n object instance
of OriginalRange ||\n object instanceof OriginalDOMImplementation ||\n
object instanceof OriginalCanvasRenderingContext2D ||\n Ori
ginalWebGLRenderingContext &&\n object instanceof OriginalWebGLRen
deringContext;\n }\n\n /**\n * Wraps a node in a WrapperNode. If there alrea
dy exists a wrapper for the\n * |node| that wrapper is returned instead.\n *
@param {Node} node\n * @return {WrapperNode}\n */\n function wrap(impl) {\
n if (impl === null)\n return null;\n\n assert(isNative(impl));\n
return impl.polymerWrapper_ ||\n (impl.polymerWrapper_ = new (getWrapperC
onstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrapper and returns the
node it is wrapping.\n * @param {WrapperNode} wrapper\n * @return {Node}\n
*/\n function unwrap(wrapper) {\n if (wrapper === null)\n return null;
\n assert(isWrapper(wrapper));\n return wrapper.impl;\n }\n\n /**\n *
Unwraps object if it is a wrapper.\n * @param {Object} object\n * @return {O
bject} The native implementation object.\n */\n function unwrapIfNeeded(objec
t) {\n return object && isWrapper(object) ? unwrap(object) : object;\n }\n\n
/**\n * Wraps object if it is not a wrapper.\n * @param {Object} object\n
* @return {Object} The wrapper for object.\n */\n function wrapIfNeeded(obj
ect) {\n return object && !isWrapper(object) ? wrap(object) : object;\n }\n\
n /**\n * Overrides the current wrapper (if any) for node.\n * @param {Node
} node\n * @param {WrapperNode=} wrapper If left out the wrapper will be creat
ed as\n * needed next time someone wraps the node.\n */\n function rewr
ap(node, wrapper) {\n if (wrapper === null)\n return;\n assert(isNati
ve(node));\n assert(wrapper === undefined || isWrapper(wrapper));\n node.p
olymerWrapper_ = wrapper;\n }\n\n function defineGetter(constructor, name, get
ter) {\n defineProperty(constructor.prototype, name, {\n get: getter,\n
configurable: true,\n enumerable: true\n });\n }\n\n function def
ineWrapGetter(constructor, name) {\n defineGetter(constructor, name, function
() {\n return wrap(this.impl[name]);\n });\n }\n\n /**\n * Forwards
existing methods on the native object to the wrapper methods.\n * This does no
t wrap any of the arguments or the return value since the\n * wrapper implemen
tation already takes care of that.\n * @param {Array.<Function>} constructors\
n * @parem {Array.<string>} names\n */\n function forwardMethodsToWrapper(c
onstructors, names) {\n constructors.forEach(function(constructor) {\n n
ames.forEach(function(name) {\n constructor.prototype[name] = function()
{\n var w = wrapIfNeeded(this);\n return w[name].apply(w, argu
ments);\n };\n });\n });\n }\n\n scope.assert = assert;\n scop
e.constructorTable = constructorTable;\n scope.defineGetter = defineGetter;\n
scope.defineWrapGetter = defineWrapGetter;\n scope.forwardMethodsToWrapper = fo
rwardMethodsToWrapper;\n scope.isWrapper = isWrapper;\n scope.isWrapperFor = i
sWrapperFor;\n scope.mixin = mixin;\n scope.nativePrototypeTable = nativeProto
typeTable;\n scope.oneOf = oneOf;\n scope.registerObject = registerObject;\n
scope.registerWrapper = register;\n scope.rewrap = rewrap;\n scope.unwrap = un
wrap;\n scope.unwrapIfNeeded = unwrapIfNeeded;\n scope.wrap = wrap;\n scope.w
rapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n\n})(window.ShadowDOM
Polyfill);\n","/*\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 f
ound in the LICENSE file.\n */\n\n(function(context) {\n 'use strict';\n\n var
OriginalMutationObserver = window.MutationObserver;\n var callbacks = [];\n v
ar pending = false;\n var timerFunc;\n\n function handle() {\n pending = fa
lse;\n var copies = callbacks.slice(0);\n callbacks = [];\n for (var i
= 0; i < copies.length; i++) {\n (0, copies[i])();\n }\n }\n\n if (Ori
ginalMutationObserver) {\n var counter = 1;\n var observer = new OriginalM
utationObserver(handle);\n var textNode = document.createTextNode(counter);\n
observer.observe(textNode, {characterData: true});\n\n timerFunc = functi
on() {\n counter = (counter + 1) % 2;\n textNode.data = counter;\n
};\n\n } else {\n timerFunc = window.setImmediate || window.setTimeout;\n }
\n\n function setEndOfMicrotask(func) {\n callbacks.push(func);\n if (pen
ding)\n return;\n pending = true;\n timerFunc(handle, 0);\n }\n\n c
ontext.setEndOfMicrotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n
","/*\n * Copyright 2013 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 setEndOfMicro
task = scope.setEndOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var w
rappers = scope.wrappers;\n\n var registrationsTable = new WeakMap();\n var gl
obalMutationObservers = [];\n var isScheduled = false;\n\n function scheduleCa
llback(observer) {\n if (isScheduled)\n return;\n setEndOfMicrotask(n
otifyObservers);\n isScheduled = true;\n }\n\n // http://dom.spec.whatwg.or
g/#mutation-observers\n function notifyObservers() {\n isScheduled = false;\
n\n do {\n var notifyList = globalMutationObservers.slice();\n var
anyNonEmpty = false;\n for (var i = 0; i < notifyList.length; i++) {\n
var mo = notifyList[i];\n var queue = mo.takeRecords();\n remov
eTransientObserversFor(mo);\n if (queue.length) {\n mo.callback_
(queue, mo);\n anyNonEmpty = true;\n }\n }\n } while (an
yNonEmpty);\n }\n\n /**\n * @param {string} type\n * @param {Node} target\
n * @constructor\n */\n function MutationRecord(type, target) {\n this.t
ype = type;\n this.target = target;\n this.addedNodes = new wrappers.NodeL
ist();\n this.removedNodes = new wrappers.NodeList();\n this.previousSibli
ng = null;\n this.nextSibling = null;\n this.attributeName = null;\n th
is.attributeNamespace = null;\n this.oldValue = null;\n }\n\n /**\n * Reg
isters transient observers to ancestor and its ancesors for the node\n * which
was removed.\n * @param {!Node} ancestor\n * @param {!Node} node\n */\n
function registerTransientObservers(ancestor, node) {\n for (; ancestor; ance
stor = ancestor.parentNode) {\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 (registration.options.subtree)\n registration.addTransientOb
server(node);\n }\n }\n }\n\n function removeTransientObserversFor(obs
erver) {\n for (var i = 0; i < observer.nodes_.length; i++) {\n var node
= observer.nodes_[i];\n var registrations = registrationsTable.get(node);\
n if (!registrations)\n return;\n for (var j = 0; j < registrat
ions.length; j++) {\n var registration = registrations[j];\n if (r
egistration.observer === observer)\n registration.removeTransientObserv
ers();\n }\n }\n }\n\n // http://dom.spec.whatwg.org/#queue-a-mutation
-record\n function enqueueMutation(target, type, data) {\n // 1.\n var in
terestedObservers = Object.create(null);\n var associatedStrings = Object.cre
ate(null);\n\n // 2.\n for (var node = target; node; node = node.parentNod
e) {\n // 3.\n var registrations = registrationsTable.get(node);\n
if (!registrations)\n continue;\n for (var j = 0; j < registration
s.length; j++) {\n var registration = registrations[j];\n var opti
ons = registration.options;\n // 1.\n if (node !== target && !opti
ons.subtree)\n continue;\n\n // 2.\n if (type === 'attrib
utes' && !options.attributes)\n continue;\n\n // 3. If type is \
"attributes\", options's attributeFilter is present, and\n // either opti
ons's attributeFilter does not contain name or namespace\n // is non-null
, continue.\n if (type === 'attributes' && options.attributeFilter &&\n
(data.namespace !== null ||\n options.attributeFilter.inde
xOf(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 interestedObservers[observer.uid_] = observer;\n\n // 7. If eith
er type is \"attributes\" and options's attributeOldValue is\n // true, o
r type is \"characterData\" and options's characterDataOldValue\n // is t
rue, set the paired string of registered observer's observer in\n // inte
rested observers to oldValue.\n if (type === 'attributes' && options.attr
ibuteOldValue ||\n type === 'characterData' && options.characterDataO
ldValue) {\n associatedStrings[observer.uid_] = data.oldValue;\n
}\n }\n }\n\n var anyRecordsEnqueued = false;\n\n // 4.\n for
(var uid in interestedObservers) {\n var observer = interestedObservers[uid
];\n var record = new MutationRecord(type, target);\n\n // 2.\n i
f ('name' in data && 'namespace' in data) {\n record.attributeName = data
.name;\n record.attributeNamespace = data.namespace;\n }\n\n //
3.\n if (data.addedNodes)\n record.addedNodes = data.addedNodes;\n\
n // 4.\n if (data.removedNodes)\n record.removedNodes = data.r
emovedNodes;\n\n // 5.\n if (data.previousSibling)\n record.pre
viousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSibling)
\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (assoc
iatedStrings[uid] !== undefined)\n record.oldValue = associatedStrings[ui
d];\n\n // 8.\n observer.records_.push(record);\n\n anyRecordsEnq
ueued = true;\n }\n\n if (anyRecordsEnqueued)\n scheduleCallback();\n
}\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} opti
ons\n * @constructor\n */\n function MutationObserverOptions(options) {\n
this.childList = !!options.childList;\n this.subtree = !!options.subtree;\n
\n // 1. If either 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' in options)) {\n this.attributes = true;\n } else {\n
this.attributes = !!options.attributes;\n }\n\n // 2. If options' char
acterDataOldValue is present and options'\n // characterData is omitted, set
options' characterData to true.\n if ('characterDataOldValue' in options && !
('characterData' in options))\n this.characterData = true;\n else\n
this.characterData = !!options.characterData;\n\n // 3. & 4.\n if (!this.
attributes &&\n (options.attributeOldValue || 'attributeFilter' in option
s) ||\n // 5.\n !this.characterData && options.characterDataOldVal
ue) {\n throw new TypeError();\n }\n\n this.characterData = !!options
.characterData;\n this.attributeOldValue = !!options.attributeOldValue;\n
this.characterDataOldValue = !!options.characterDataOldValue;\n if ('attribut
eFilter' in options) {\n if (options.attributeFilter == null ||\n
typeof options.attributeFilter !== 'object') {\n throw new TypeError();\n
}\n this.attributeFilter = slice.call(options.attributeFilter);\n
} else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter = 0
;\n\n /**\n * The class that maps to the DOM MutationObserver interface.\n
* @param {Function} callback.\n * @constructor\n */\n function MutationObse
rver(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n thi
s.records_ = [];\n this.uid_ = ++uidCounter;\n\n // This will leak. There
is no way to implement this without WeakRefs :'(\n globalMutationObservers.pu
sh(this);\n }\n\n MutationObserver.prototype = {\n // http://dom.spec.whatw
g.org/#dom-mutationobserver-observe\n observe: function(target, options) {\n
target = wrapIfNeeded(target);\n\n var newOptions = new MutationObserv
erOptions(options);\n\n // 6.\n var registration;\n var registrat
ions = registrationsTable.get(target);\n if (!registrations)\n regis
trationsTable.set(target, registrations = []);\n\n for (var i = 0; i < regi
strations.length; i++) {\n if (registrations[i].observer === this) {\n
registration = registrations[i];\n // 6.1.\n registrati
on.removeTransientObservers();\n // 6.2.\n registration.option
s = newOptions;\n }\n }\n\n // 7.\n if (!registration) {\n
registration = new Registration(this, target, newOptions);\n regi
strations.push(registration);\n this.nodes_.push(target);\n }\n }
,\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-disconnect\n dis
connect: function() {\n this.nodes_.forEach(function(node) {\n var r
egistrations = registrationsTable.get(node);\n for (var i = 0; i < regist
rations.length; i++) {\n var registration = registrations[i];\n
if (registration.observer === this) {\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 copyOfRecords = this.records_;\n this.records_ = [];\n ret
urn copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a registe
red observer.\n * @param {MutationObserver} observer\n * @param {Node} targe
t\n * @param {MutationObserverOptions} options\n * @constructor\n */\n fu
nction Registration(observer, target, options) {\n this.observer = observer;\
n this.target = target;\n this.options = options;\n this.transientObser
vedNodes = [];\n }\n\n Registration.prototype = {\n /**\n * Adds a tran
sient observer on node. The transient observer gets removed\n * next time we
deliver the change records.\n * @param {Node} node\n */\n addTransie
ntObserver: function(node) {\n // Don't add transient observers on the targ
et itself. We already have all\n // the required listeners set up on the ta
rget.\n if (node === this.target)\n return;\n\n this.transientO
bservedNodes.push(node);\n var registrations = registrationsTable.get(node)
;\n if (!registrations)\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(thi
s);\n },\n\n removeTransientObservers: function() {\n var transientOb
servedNodes = this.transientObservedNodes;\n this.transientObservedNodes =
[];\n\n for (var i = 0; i < transientObservedNodes.length; i++) {\n
var node = transientObservedNodes[i];\n var registrations = registrations
Table.get(node);\n for (var j = 0; j < registrations.length; j++) {\n
if (registrations[j] === this) {\n registrations.splice(j, 1);\
n // Each node can only have one registered observer associated with\
n // this observer.\n break;\n }\n }\n
}\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.register
TransientObservers = registerTransientObservers;\n scope.wrappers.MutationObser
ver = MutationObserver;\n scope.wrappers.MutationRecord = MutationRecord;\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 forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var mixin = s
cope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scop
e.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrappers;\n\n var w
rappedFuns = new WeakMap();\n var listenersTable = new WeakMap();\n var handle
dEventsTable = new WeakMap();\n var currentlyDispatchingEvents = new WeakMap();
\n var targetTable = new WeakMap();\n var currentTargetTable = new WeakMap();\
n var relatedTargetTable = new WeakMap();\n var eventPhaseTable = new WeakMap(
);\n var stopPropagationTable = new WeakMap();\n var stopImmediatePropagationT
able = new WeakMap();\n var eventHandlersTable = new WeakMap();\n var eventPat
hTable = new WeakMap();\n\n function isShadowRoot(node) {\n return node inst
anceof wrappers.ShadowRoot;\n }\n\n function isInsertionPoint(node) {\n var
localName = node.localName;\n return localName === 'content' || localName ==
= 'shadow';\n }\n\n function isShadowHost(node) {\n return !!node.shadowRoo
t;\n }\n\n function getEventParent(node) {\n var dv;\n return node.paren
tNode || (dv = node.defaultView) && wrap(dv) || null;\n }\n\n // https://dvcs.
w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-adjusted-parent\
n function calculateParents(node, context, ancestors) {\n if (ancestors.leng
th)\n return ancestors.shift();\n\n // 1.\n if (isShadowRoot(node))\n
return getInsertionParent(node) || node.host;\n\n // 2.\n var eventP
arents = scope.eventParentsTable.get(node);\n if (eventParents) {\n // C
opy over the remaining event parents for next iteration.\n for (var i = 1;
i < eventParents.length; i++) {\n ancestors[i - 1] = eventParents[i];\n
}\n return eventParents[0];\n }\n\n // 3.\n if (context && isI
nsertionPoint(node)) {\n var parentNode = node.parentNode;\n if (paren
tNode && isShadowHost(parentNode)) {\n var trees = scope.getShadowTrees(p
arentNode);\n var p = getInsertionParent(context);\n for (var i =
0; i < trees.length; i++) {\n if (trees[i].contains(p))\n re
turn p;\n }\n }\n }\n\n return getEventParent(node);\n }\n\n
// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#eve
nt-retargeting\n function retarget(node) {\n var stack = []; // 1.\n var
ancestor = node; // 2.\n var targets = [];\n var ancestors = [];\n wh
ile (ancestor) { // 3.\n var context = null; // 3.2.\n // TODO(arv):
Change order of these. If the stack is empty we always end\n // up pushing
ancestor, no matter what.\n if (isInsertionPoint(ancestor)) { // 3.1.\n
context = topMostNotInsertionPoint(stack); // 3.1.1.\n var top = s
tack[stack.length - 1] || ancestor; // 3.1.2.\n stack.push(top);\n
} else if (!stack.length) {\n stack.push(ancestor); // 3.3.\n }\n
var target = stack[stack.length - 1]; // 3.4.\n targets.push({target:
target, currentTarget: ancestor}); // 3.5.\n if (isShadowRoot(ancestor))
// 3.6.\n stack.pop(); // 3.6.1.\n\n ancestor = calculateParents(an
cestor, context, ancestors); // 3.7.\n }\n return targets;\n }\n\n func
tion 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/spec/shadow/index.html#dfn-adjusted-related-target\n function adjustRelated
Target(target, related) {\n var ancestors = [];\n while (target) { // 3.\
n var stack = []; // 3.1.\n var ancestor = related; // 3.2.\n v
ar last = undefined; // 3.3. Needs to be reset every iteration.\n while (a
ncestor) {\n var context = null;\n if (!stack.length) {\n
stack.push(ancestor);\n } else {\n if (isInsertionPoint(ancesto
r)) { // 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(h
ead);\n }\n }\n }\n\n if (inSameTree(ancestor,
target)) // 3.4.4.\n return stack[stack.length - 1];\n\n if (i
sShadowRoot(ancestor)) // 3.4.5.\n stack.pop();\n\n last = ance
stor; // 3.4.6.\n ancestor = calculateParents(ancestor, context, ancesto
rs); // 3.4.7.\n }\n if (isShadowRoot(target)) // 3.5.\n targ
et = target.host;\n else\n target = target.parentNode; // 3.6.\n
}\n }\n\n function getInsertionParent(node) {\n return scope.insertionPare
ntTable.get(node);\n }\n\n function isDistributed(node) {\n return getInser
tionParent(node);\n }\n\n function rootOfNode(node) {\n var p;\n while (
p = node.parentNode) {\n node = p;\n }\n return node;\n }\n\n funct
ion inSameTree(a, b) {\n return rootOfNode(a) === rootOfNode(b);\n }\n\n fu
nction enclosedBy(a, b) {\n if (a === b)\n return true;\n if (a insta
nceof wrappers.ShadowRoot)\n return enclosedBy(rootOfNode(a.host), b);\n
return false;\n }\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, true)
;\n\n return dispatchEvent(wrap(originalEvent), wrap(originalEvent.target));\
n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (curren
tlyDispatchingEvents.get(event))\n throw new Error('InvalidStateError')\n
currentlyDispatchingEvents.set(event, true);\n\n // Render to ensure that t
he event path is correct.\n scope.renderAllPending();\n var eventPath = re
target(originalWrapperTarget);\n\n // For window load events the load event i
s dispatched at the window but\n // the target is set to the document.\n /
/\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.ht
ml#the-end\n //\n // TODO(arv): Find a less hacky way to do this.\n if
(event.type === 'load' &&\n eventPath.length === 2 &&\n eventPath[
0].target instanceof wrappers.Document) {\n eventPath.shift();\n }\n\n
eventPathTable.set(event, eventPath);\n\n if (dispatchCapturing(event, even
tPath)) {\n if (dispatchAtTarget(event, eventPath)) {\n dispatchBubb
ling(event, eventPath);\n }\n }\n\n eventPhaseTable.set(event, Event.
NONE);\n currentTargetTable.delete(event, null);\n currentlyDispatchingEve
nts.delete(event);\n\n return event.defaultPrevented;\n }\n\n function disp
atchCapturing(event, eventPath) {\n var phase;\n\n for (var i = eventPath.
length - 1; i > 0; i--) {\n var target = eventPath[i].target;\n var cu
rrentTarget = eventPath[i].currentTarget;\n if (target === currentTarget)\n
continue;\n\n phase = Event.CAPTURING_PHASE;\n if (!invoke(eve
ntPath[i], event, phase))\n return false;\n }\n\n return true;\n }
\n\n function dispatchAtTarget(event, eventPath) {\n var phase = Event.AT_TA
RGET;\n return invoke(eventPath[0], event, phase);\n }\n\n function dispatc
hBubbling(event, eventPath) {\n var bubbles = event.bubbles;\n var phase;\
n\n for (var i = 1; i < eventPath.length; i++) {\n var target = eventPat
h[i].target;\n var currentTarget = eventPath[i].currentTarget;\n if (t
arget === currentTarget)\n phase = Event.AT_TARGET;\n else if (bubbl
es && !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 function invoke(tuple, event, phase)
{\n var target = tuple.target;\n var currentTarget = tuple.currentTarget;\
n\n var listeners = listenersTable.get(currentTarget);\n if (!listeners)\n
return true;\n\n if ('relatedTarget' in event) {\n var originalEve
nt = unwrap(event);\n // X-Tag sets relatedTarget on a CustomEvent. If they
do that there is no\n // way to have relatedTarget return the adjusted tar
get but worse is that\n // the originalEvent might not have a relatedTarget
so we hit an assert\n // when we try to wrap it.\n if (originalEvent.
relatedTarget) {\n var relatedTarget = wrap(originalEvent.relatedTarget);
\n\n var adjusted = adjustRelatedTarget(currentTarget, relatedTarget);\n
if (adjusted === target)\n return true;\n\n relatedTarget
Table.set(event, adjusted);\n }\n }\n\n eventPhaseTable.set(event, ph
ase);\n var type = event.type;\n\n var anyRemoved = false;\n targetTabl
e.set(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 && p
hase === Event.CAPTURING_PHASE ||\n listener.capture && phase === Event
.BUBBLING_PHASE) {\n continue;\n }\n\n try {\n if (typeo
f listener.handler === 'function')\n listener.handler.call(currentTarge
t, 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.mes
sage);\n else\n console.error(ex, ex.stack);\n }\n }\n\n
if (anyRemoved) {\n var copy = listeners.slice();\n listeners.leng
th = 0;\n for (var i = 0; i < copy.length; i++) {\n if (!copy[i].rem
oved)\n listeners.push(copy[i]);\n }\n }\n\n return !stopPro
pagationTable.get(event);\n }\n\n function Listener(type, handler, capture) {\
n this.type = type;\n this.handler = handler;\n this.capture = Boolean(
capture);\n }\n Listener.prototype = {\n equals: function(that) {\n re
turn this.handler === that.handler && this.type === that.type &&\n this
.capture === that.capture;\n },\n get removed() {\n return this.handl
er === null;\n },\n remove: function() {\n this.handler = null;\n
}\n };\n\n var OriginalEvent = window.Event;\n OriginalEvent.prototype.polyme
rBlackList_ = {returnValue: true};\n\n /**\n * Creates a new Event wrapper or
wraps an existin native Event object.\n * @param {string|Event} type\n * @p
aram {Object=} options\n * @constructor\n */\n function Event(type, options
) {\n if (type instanceof OriginalEvent)\n this.impl = type;\n else\n
return wrap(constructEvent(OriginalEvent, 'Event', type, options));\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(this);\n },\n
get path() {\n var nodeList = new wrappers.NodeList();\n var event
Path = eventPathTable.get(this);\n if (eventPath) {\n var index = 0;
\n var lastIndex = eventPath.length - 1;\n var baseRoot = rootOfNo
de(currentTargetTable.get(this));\n\n for (var i = 0; i <= lastIndex; i++
) {\n var currentTarget = eventPath[i].currentTarget;\n var cu
rrentRoot = rootOfNode(currentTarget);\n if (enclosedBy(baseRoot, curre
ntRoot) &&\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 stopPropagation:
function() {\n stopPropagationTable.set(this, true);\n },\n stopImmed
iatePropagation: function() {\n stopPropagationTable.set(this, true);\n
stopImmediatePropagationTable.set(this, true);\n }\n };\n registerWrapper
(OriginalEvent, Event, document.createEvent('Event'));\n\n function unwrapOptio
ns(options) {\n if (!options || !options.relatedTarget)\n return options
;\n return Object.create(options, {\n relatedTarget: {value: unwrap(opti
ons.relatedTarget)}\n });\n }\n\n function registerGenericEvent(name, Super
Event, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent
= function(type, options) {\n if (type instanceof OriginalEvent)\n
this.impl = type;\n else\n return wrap(constructEvent(OriginalEvent,
name, type, options));\n };\n GenericEvent.prototype = Object.create(Supe
rEvent.prototype);\n if (prototype)\n mixin(GenericEvent.prototype, prot
otype);\n if (OriginalEvent) {\n // - Old versions of Safari fails on ne
w FocusEvent (and others?).\n // - IE does not support event constructors.\
n // - createEvent('FocusEvent') throws in Firefox.\n // => Try the be
st practice solution first and fallback to the old way\n // if needed.\n
try {\n registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent
('temp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, Generic
Event,\n document.createEvent(name));\n }\n }\n
return GenericEvent;\n }\n\n var UIEvent = registerGenericEvent('UIEvent', E
vent);\n var CustomEvent = registerGenericEvent('CustomEvent', Event);\n\n var
relatedTargetProto = {\n get relatedTarget() {\n return relatedTargetTa
ble.get(this) || wrap(unwrap(this).relatedTarget);\n }\n };\n\n function ge
tInitFunction(name, relatedTargetIndex) {\n return function() {\n argume
nts[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\n var impl
= unwrap(this);\n impl[name].apply(impl, arguments);\n };\n }\n\n var
mouseEventProto = mixin({\n initMouseEvent: getInitFunction('initMouseEvent'
, 14)\n }, relatedTargetProto);\n\n var focusEventProto = mixin({\n initFoc
usEvent: getInitFunction('initFocusEvent', 5)\n }, relatedTargetProto);\n\n va
r MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);\n
var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);\n
\n // In case the browser does not support event constructors we polyfill that\
n // by calling `createEvent('Foo')` and `initFooEvent` where the arguments to\
n // `initFooEvent` are derived from the registered default event init dict.\n
var defaultInitDicts = 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 * Cons
tructs a new native event.\n */\n function constructEvent(OriginalEvent, name
, type, options) {\n if (supportsEventConstructors)\n return new Origina
lEvent(type, unwrapOptions(options));\n\n // Create the arguments from the de
fault dictionary.\n var event = unwrap(document.createEvent(name));\n var
defaultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(d
efaultDict).forEach(function(key) {\n var v = options != null && key in opt
ions ?\n options[key] : defaultDict[key];\n if (key === 'relatedTa
rget')\n v = unwrap(v);\n args.push(v);\n });\n event['init' +
name].apply(event, args);\n return event;\n }\n\n if (!supportsEventConstr
uctors) {\n var configureEventConstructor = function(name, initDict, superNam
e) {\n if (superName) {\n var superDict = defaultInitDicts[superName
];\n initDict = mixin(mixin({}, superDict), initDict);\n }\n\n
defaultInitDicts[name] = initDict;\n };\n\n // The order of the default ev
ent init dictionary keys is important, the\n // arguments to initFooEvent is
derived from that.\n configureEventConstructor('Event', {bubbles: false, canc
elable: false});\n configureEventConstructor('CustomEvent', {detail: null}, '
Event');\n configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Eve
nt');\n configureEventConstructor('MouseEvent', {\n screenX: 0,\n s
creenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n a
ltKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n
relatedTarget: null\n }, 'UIEvent');\n configureEventConstructor('Fo
cusEvent', {relatedTarget: null}, 'UIEvent');\n }\n\n function BeforeUnloadEve
nt(impl) {\n Event.call(this);\n }\n BeforeUnloadEvent.prototype = Object.c
reate(Event.prototype);\n mixin(BeforeUnloadEvent.prototype, {\n get returnV
alue() {\n return this.impl.returnValue;\n },\n set returnValue(v) {\
n this.impl.returnValue = v;\n }\n });\n\n function isValidListener(fu
n) {\n if (typeof fun === 'function')\n return true;\n return fun &&
fun.handleEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {
\n case 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n ca
se 'DOMCharacterDataModified':\n case 'DOMElementNameChanged':\n case
'DOMNodeInserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNo
deRemoved':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeMod
ified':\n return true;\n }\n return false;\n }\n\n var OriginalEv
entTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for an
EventTarget.\n * @param {!EventTarget} impl The original event target.\n * @
constructor\n */\n function EventTarget(impl) {\n this.impl = impl;\n }\n
\n // Node and Window have different internal type checks in WebKit so we canno
t\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 var p = constructor.protot
ype;\n methodNames.forEach(function(name) {\n Object.defineProperty(p, n
ame + '_', {value: p[name]});\n });\n });\n\n function getTargetToListenAt(
wrapper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wra
pper.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n
addEventListener: function(type, fun, capture) {\n if (!isValidListener(fu
n) || isMutationEvent(type))\n return;\n\n var listener = new Listen
er(type, fun, capture);\n var listeners = listenersTable.get(this);\n
if (!listeners) {\n listeners = [];\n listenersTable.set(this, lis
teners);\n } else {\n // Might have a duplicate.\n for (var i
= 0; i < listeners.length; i++) {\n if (listener.equals(listeners[i]))
\n return;\n }\n }\n\n listeners.push(listener);\n\n
var target = getTargetToListenAt(this);\n target.addEventListener_(ty
pe, dispatchOriginalEvent, true);\n },\n removeEventListener: function(typ
e, fun, capture) {\n capture = Boolean(capture);\n var listeners = lis
tenersTable.get(this);\n if (!listeners)\n return;\n var count
= 0, found = false;\n for (var i = 0; i < listeners.length; i++) {\n
if (listeners[i].type === type && listeners[i].capture === capture) {\n
count++;\n if (listeners[i].handler === fun) {\n found = t
rue;\n listeners[i].remove();\n }\n }\n }\n\n
if (found && count === 1) {\n var target = getTargetToListenAt(this);\
n target.removeEventListener_(type, dispatchOriginalEvent, true);\n
}\n },\n dispatchEvent: function(event) {\n dispatchEvent(event, this
);\n }\n };\n\n if (OriginalEventTarget)\n registerWrapper(OriginalEvent
Target, EventTarget);\n\n function wrapEventTargetMethods(constructors) {\n
forwardMethodsToWrapper(constructors, methodNames);\n }\n\n var originalElemen
tFromPoint = document.elementFromPoint;\n\n function elementFromPoint(self, doc
ument, x, y) {\n scope.renderAllPending();\n\n var element = wrap(original
ElementFromPoint.call(document.impl, x, y));\n var targets = retarget(element
, this)\n for (var i = 0; i < targets.length; i++) {\n var target = targ
ets[i];\n if (target.currentTarget === self)\n return target.target;
\n }\n return null;\n }\n\n /**\n * Returns a function that is to be u
sed as a getter for `onfoo` properties.\n * @param {string} name\n * @return
{Function}\n */\n function getEventHandlerGetter(name) {\n return functio
n() {\n var inlineEventHandlers = eventHandlersTable.get(this);\n retu
rn inlineEventHandlers && inlineEventHandlers[name] &&\n inlineEventHan
dlers[name].value || null;\n };\n }\n\n /**\n * Returns a function 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 inlineEventH
andlers = eventHandlersTable.get(this);\n if (!inlineEventHandlers) {\n
inlineEventHandlers = Object.create(null);\n eventHandlersTable.set(t
his, inlineEventHandlers);\n }\n\n var old = inlineEventHandlers[name]
;\n if (old)\n this.removeEventListener(eventType, old.wrapped, fals
e);\n\n if (typeof value === 'function') {\n var wrapped = function(
e) {\n var rv = value.call(this, e);\n if (rv === false)\n
e.preventDefault();\n else if (name === 'onbeforeunload' && typ
eof rv === 'string')\n e.returnValue = rv;\n // mouseover us
es true for preventDefault but preventDefault for\n // mouseover is ign
ored by browsers these day.\n };\n\n this.addEventListener(eventTy
pe, wrapped, false);\n inlineEventHandlers[name] = {\n value: va
lue,\n wrapped: wrapped\n };\n }\n };\n }\n\n scope.ad
justRelatedTarget = adjustRelatedTarget;\n scope.elementFromPoint = elementFrom
Point;\n scope.getEventHandlerGetter = getEventHandlerGetter;\n scope.getEvent
HandlerSetter = getEventHandlerSetter;\n scope.wrapEventTargetMethods = wrapEve
ntTargetMethods;\n scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;\n sco
pe.wrappers.CustomEvent = CustomEvent;\n scope.wrappers.Event = Event;\n scope
.wrappers.EventTarget = EventTarget;\n scope.wrappers.FocusEvent = FocusEvent;\
n scope.wrappers.MouseEvent = MouseEvent;\n scope.wrappers.UIEvent = UIEvent;\
n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2012 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 wrap = scope.wrap;\n\n function nonEnum(obj, prop) {\n Object.de
fineProperty(obj, prop, {enumerable: false});\n }\n\n function NodeList() {\n
this.length = 0;\n nonEnum(this, 'length');\n }\n NodeList.prototype = {
\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(li
st[i]);\n }\n wrapperList.length = length;\n return wrapperList;\n }\n
\n function addWrapNodeListMethod(wrapperConstructor, name) {\n wrapperConst
ructor.prototype[name] = function() {\n return wrapNodeList(this.impl[name]
.apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.NodeList = NodeL
ist;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n scope.wrapNodeLi
st = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2012 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
NodeList = scope.wrappers.NodeList;\n var assert = scope.assert;\n var defineW
rapGetter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutati
on;\n var isWrapper = scope.isWrapper;\n var mixin = scope.mixin;\n var regis
terTransientObservers = scope.registerTransientObservers;\n var registerWrapper
= scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap
;\n var wrapIfNeeded = scope.wrapIfNeeded;\n\n function assertIsNodeWrapper(no
de) {\n assert(node instanceof Node);\n }\n\n function createOneElementNode
List(node) {\n var nodes = new NodeList();\n nodes[0] = node;\n nodes.l
ength = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\
n * Called before node is inserted into a node to enqueue its removal from its
\n * old parent.\n * @param {!Node} node The node that is about to be remove
d.\n * @param {!Node} parent The parent node that the node is being removed fr
om.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enque
ueRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'c
hildList', {\n removedNodes: nodes,\n previousSibling: node.previousSi
bling,\n nextSibling: node.nextSibling\n });\n }\n\n function enqueueR
emovalForInsertedDocumentFragment(df, nodes) {\n enqueueMutation(df, 'childLi
st', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes fr
om a DocumentFragment or a Node for removal followed\n * by an insertion.\n
*\n * This updates the internal pointers for node, previousNode and nextNode.\
n */\n function collectNodes(node, parentNode, previousNode, nextNode) {\n
if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocum
entFragment(node);\n\n // The extra loop is to work around bugs with Docume
ntFragments in IE.\n surpressMutations = true;\n for (var i = nodes.le
ngth - 1; i >= 0; i--) {\n node.removeChild(nodes[i]);\n nodes[i].
parentNode_ = parentNode;\n }\n surpressMutations = false;\n\n fo
r (var i = 0; i < nodes.length; i++) {\n nodes[i].previousSibling_ = node
s[i - 1] || previousNode;\n nodes[i].nextSibling_ = nodes[i + 1] || nextN
ode;\n }\n\n if (previousNode)\n previousNode.nextSibling_ = no
des[0];\n if (nextNode)\n nextNode.previousSibling_ = nodes[nodes.le
ngth - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNode
List(node);\n var oldParent = node.parentNode;\n if (oldParent) {\n /
/ This will enqueue the mutation record for the removal as needed.\n oldPar
ent.removeChild(node);\n }\n\n node.parentNode_ = parentNode;\n node.pr
eviousSibling_ = previousNode;\n node.nextSibling_ = nextNode;\n if (previ
ousNode)\n previousNode.nextSibling_ = node;\n if (nextNode)\n next
Node.previousSibling_ = node;\n\n return nodes;\n }\n\n function collectNod
esNative(node) {\n if (node instanceof DocumentFragment)\n return collec
tNodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(nod
e);\n var oldParent = node.parentNode;\n if (oldParent)\n enqueueRemo
valForInsertedNodes(node, oldParent, nodes);\n return nodes;\n }\n\n functi
on collectNodesForDocumentFragment(node) {\n var nodes = new NodeList();\n
var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibl
ing) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemo
valForInsertedDocumentFragment(node, nodes);\n return nodes;\n }\n\n functi
on snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so
just return the same object.\n return nodeList;\n }\n\n // http://dom.spec.
whatwg.org/#node-is-inserted\n function nodeWasAdded(node) {\n node.nodeIsIn
serted_();\n }\n\n function nodesWereAdded(nodes) {\n for (var i = 0; i < n
odes.length; i++) {\n nodeWasAdded(nodes[i]);\n }\n }\n\n // http://do
m.spec.whatwg.org/#node-is-removed\n function nodeWasRemoved(node) {\n // No
thing at this point in time.\n }\n\n function nodesWereRemoved(nodes) {\n /
/ Nothing at this point in time.\n }\n\n function ensureSameOwnerDocument(pare
nt, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n
parent : parent.ownerDocument;\n if (ownerDoc !== child.ownerDocument)\n
ownerDoc.adoptNode(child);\n }\n\n function adoptNodesIfNeeded(owner, node
s) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.ownerDoc
ument;\n\n // All nodes have the same ownerDocument when we get here.\n if
(ownerDoc === nodes[0].ownerDocument)\n return;\n\n for (var i = 0; i <
nodes.length; i++) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }
\n }\n\n function unwrapNodesForInsertion(owner, nodes) {\n adoptNodesIfNee
ded(owner, nodes);\n var length = nodes.length;\n\n if (length === 1)\n
return unwrap(nodes[0]);\n\n var df = unwrap(owner.ownerDocument.createDoc
umentFragment());\n for (var i = 0; i < length; i++) {\n df.appendChild(
unwrap(nodes[i]));\n }\n return df;\n }\n\n function removeAllChildNodes
(wrapper) {\n if (wrapper.invalidateShadowRenderer()) {\n var childWrapp
er = wrapper.firstChild;\n while (childWrapper) {\n assert(childWrap
per.parentNode === wrapper);\n var nextSibling = childWrapper.nextSibling
;\n var childNode = unwrap(childWrapper);\n var parentNode = child
Node.parentNode;\n if (parentNode)\n originalRemoveChild.call(pa
rentNode, childNode);\n childWrapper.previousSibling_ = childWrapper.next
Sibling_ =\n childWrapper.parentNode_ = null;\n childWrapper =
nextSibling;\n }\n wrapper.firstChild_ = wrapper.lastChild_ = null;\n
} else {\n var node = unwrap(wrapper);\n var child = node.firstChi
ld;\n var nextSibling;\n while (child) {\n nextSibling = child.
nextSibling;\n originalRemoveChild.call(node, child);\n child = ne
xtSibling;\n }\n }\n }\n\n function invalidateParent(node) {\n var
p = node.parentNode;\n return p && p.invalidateShadowRenderer();\n }\n\n va
r OriginalNode = window.Node;\n\n /**\n * This represents a wrapper of a nati
ve DOM node.\n * @param {!Node} original The original DOM node, aka, the visua
l DOM node.\n * @constructor\n * @extends {EventTarget}\n */\n function N
ode(original) {\n assert(original instanceof OriginalNode);\n\n EventTarge
t.call(this, original);\n\n // These properties are used to override the visu
al references with the\n // logical ones. If the value is undefined it means
that the logical is the\n // same as the visual.\n\n /**\n * @type {No
de|undefined}\n * @private\n */\n this.parentNode_ = undefined;\n\n
/**\n * @type {Node|undefined}\n * @private\n */\n this.firstCh
ild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n
*/\n this.lastChild_ = undefined;\n\n /**\n * @type {Node|undefined
}\n * @private\n */\n this.nextSibling_ = undefined;\n\n /**\n
* @type {Node|undefined}\n * @private\n */\n this.previousSibling_ =
undefined;\n };\n\n var OriginalDocumentFragment = window.DocumentFragment;\n
var originalAppendChild = OriginalNode.prototype.appendChild;\n var originalC
ompareDocumentPosition =\n OriginalNode.prototype.compareDocumentPosition;\
n var originalInsertBefore = OriginalNode.prototype.insertBefore;\n var origin
alRemoveChild = OriginalNode.prototype.removeChild;\n var originalReplaceChild
= OriginalNode.prototype.replaceChild;\n\n var isIe = /Trident/.test(navigator.
userAgent);\n\n var removeChildOriginalHelper = isIe ?\n function(parent,
child) {\n try {\n originalRemoveChild.call(parent, child);\n
} catch (ex) {\n if (!(parent instanceof OriginalDocumentFragment)
)\n throw ex;\n }\n } :\n function(parent, child) {\
n originalRemoveChild.call(parent, child);\n };\n\n Node.prototype
= Object.create(EventTarget.prototype);\n mixin(Node.prototype, {\n appendCh
ild: function(childWrapper) {\n return this.insertBefore(childWrapper, null
);\n },\n\n insertBefore: function(childWrapper, refWrapper) {\n asse
rtIsNodeWrapper(childWrapper);\n\n var refNode;\n if (refWrapper) {\n
if (isWrapper(refWrapper)) {\n refNode = unwrap(refWrapper);\n
} else {\n refNode = refWrapper;\n refWrapper = wrap(ref
Node);\n }\n } else {\n refWrapper = null;\n refNode =
null;\n }\n\n refWrapper && assert(refWrapper.parentNode === this);\n
\n var nodes;\n var previousNode =\n refWrapper ? refWrapper.
previousSibling : this.lastChild;\n\n var useNative = !this.invalidateShado
wRenderer() &&\n !invalidateParent(childWrapper);\n\n
if (useNative)\n nodes = collectNodesNative(childWrapper);\n else\n
nodes = collectNodes(childWrapper, this, previousNode, refWrapper);\n\n
if (useNative) {\n ensureSameOwnerDocument(this, childWrapper);\n
originalInsertBefore.call(this.impl, unwrap(childWrapper), refNode);\n
} else {\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 //
insertBefore refWrapper no matter what the parent is?\n if (parentNode)
{\n originalInsertBefore.call(parentNode,\n unwrapNodesFor
Insertion(this, nodes), refNode);\n } else {\n adoptNodesIfNeede
d(this, nodes);\n }\n }\n\n enqueueMutation(this, 'childList',
{\n addedNodes: nodes,\n nextSibling: refWrapper,\n previou
sSibling: previousNode\n });\n\n nodesWereAdded(nodes);\n\n retur
n childWrapper;\n },\n\n removeChild: function(childWrapper) {\n asse
rtIsNodeWrapper(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.nextSi
bling;\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 that
that mutation event is dispatched before\n // the pointers have changed.
\n var thisFirstChild = this.firstChild;\n var thisLastChild = thi
s.lastChild;\n\n var parentNode = childNode.parentNode;\n if (pare
ntNode)\n removeChildOriginalHelper(parentNode, childNode);\n\n
if (thisFirstChild === childWrapper)\n this.firstChild_ = childWrapperN
extSibling;\n if (thisLastChild === childWrapper)\n this.lastChi
ld_ = childWrapperPreviousSibling;\n if (childWrapperPreviousSibling)\n
childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;\n
if (childWrapperNextSibling) {\n childWrapperNextSibling.previousS
ibling_ =\n childWrapperPreviousSibling;\n }\n\n chil
dWrapper.previousSibling_ = childWrapper.nextSibling_ =\n childWrappe
r.parentNode_ = undefined;\n } else {\n removeChildOriginalHelper(th
is.impl, childNode);\n }\n\n if (!surpressMutations) {\n enqueu
eMutation(this, 'childList', {\n removedNodes: createOneElementNodeList
(childWrapper),\n nextSibling: childWrapperNextSibling,\n prev
iousSibling: childWrapperPreviousSibling\n });\n }\n\n register
TransientObservers(this, childWrapper);\n\n return childWrapper;\n },\n\
n replaceChild: function(newChildWrapper, oldChildWrapper) {\n assertIsN
odeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrapper(old
ChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\n } else
{\n oldChildNode = oldChildWrapper;\n oldChildWrapper = wrap(oldCh
ildNode);\n }\n\n if (oldChildWrapper.parentNode !== this) {\n
// TODO(arv): DOMException\n throw new Error('NotFoundError');\n }\n
\n var nextNode = oldChildWrapper.nextSibling;\n var previousNode = ol
dChildWrapper.previousSibling;\n var nodes;\n\n var useNative = !this.
invalidateShadowRenderer() &&\n !invalidateParent(newChildW
rapper);\n\n if (useNative) {\n nodes = collectNodesNative(newChildW
rapper);\n } else {\n if (nextNode === newChildWrapper)\n n
extNode = newChildWrapper.nextSibling;\n nodes = collectNodes(newChildWra
pper, this, previousNode, nextNode);\n }\n\n if (!useNative) {\n
if (this.firstChild === oldChildWrapper)\n this.firstChild_ = nodes[0
];\n if (this.lastChild === oldChildWrapper)\n this.lastChild_ =
nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibling_ = oldChild
Wrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefined;\n\n
// replaceChild no matter what the parent is?\n if (oldChildNode.
parentNode) {\n originalReplaceChild.call(\n oldChildNode.
parentNode,\n unwrapNodesForInsertion(this, nodes),\n
oldChildNode);\n }\n } else {\n ensureSameOwnerDocument(this,
newChildWrapper);\n originalReplaceChild.call(this.impl, unwrap(newChild
Wrapper),\n oldChildNode);\n }\n\n en
queueMutation(this, 'childList', {\n addedNodes: nodes,\n removedN
odes: createOneElementNodeList(oldChildWrapper),\n nextSibling: nextNode,
\n previousSibling: previousNode\n });\n\n nodeWasRemoved(oldCh
ildWrapper);\n nodesWereAdded(nodes);\n\n return oldChildWrapper;\n
},\n\n /**\n * Called after a node was inserted. Subclasses override thi
s to invalidate\n * the renderer as needed.\n * @private\n */\n n
odeIsInserted_: function() {\n for (var child = this.firstChild; child; chi
ld = child.nextSibling) {\n child.nodeIsInserted_();\n }\n },\n\n
hasChildNodes: function() {\n return this.firstChild !== null;\n },\
n\n /** @type {Node} */\n get parentNode() {\n // If the parentNode h
as not been overridden, use the original parentNode.\n return this.parentNo
de_ !== undefined ?\n this.parentNode_ : wrap(this.impl.parentNode);\n
},\n\n /** @type {Node} */\n get firstChild() {\n return this.firs
tChild_ !== undefined ?\n this.firstChild_ : wrap(this.impl.firstChild)
;\n },\n\n /** @type {Node} */\n get lastChild() {\n return this.l
astChild_ !== undefined ?\n this.lastChild_ : wrap(this.impl.lastChild)
;\n },\n\n /** @type {Node} */\n get nextSibling() {\n return this
.nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(this.impl.next
Sibling);\n },\n\n /** @type {Node} */\n get previousSibling() {\n
return this.previousSibling_ !== undefined ?\n this.previousSibling_ :
wrap(this.impl.previousSibling);\n },\n\n get parentElement() {\n va
r p = this.parentNode;\n while (p && p.nodeType !== Node.ELEMENT_NODE) {\n
p = p.parentNode;\n }\n return p;\n },\n\n get textConten
t() {\n // TODO(arv): This should fallback to this.impl.textContent if ther
e\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 s += child.textContent;\n }\n return s;\n },\n set tex
tContent(textContent) {\n var removedNodes = snapshotNodeList(this.childNod
es);\n\n if (this.invalidateShadowRenderer()) {\n removeAllChildNode
s(this);\n if (textContent !== '') {\n var textNode = this.impl.
ownerDocument.createTextNode(textContent);\n this.appendChild(textNode)
;\n }\n } else {\n this.impl.textContent = textContent;\n
}\n\n var addedNodes = snapshotNodeList(this.childNodes);\n\n enqueu
eMutation(this, 'childList', {\n addedNodes: addedNodes,\n removed
Nodes: removedNodes\n });\n\n nodesWereRemoved(removedNodes);\n n
odesWereAdded(addedNodes);\n },\n\n get childNodes() {\n var wrapperL
ist = new NodeList();\n var i = 0;\n for (var child = this.firstChild;
child; child = child.nextSibling) {\n wrapperList[i++] = child;\n }
\n wrapperList.length = i;\n return wrapperList;\n },\n\n cloneN
ode: function(deep) {\n var clone = wrap(this.impl.cloneNode(false));\n
if (deep) {\n for (var child = this.firstChild; child; child = child.ne
xtSibling) {\n clone.appendChild(child.cloneNode(true));\n }\n
}\n // TODO(arv): Some HTML elements also clone other data like value.\
n return clone;\n },\n\n contains: function(child) {\n if (!chil
d)\n return false;\n\n child = wrapIfNeeded(child);\n\n // TODO
(arv): Optimize using ownerDocument etc.\n if (child === this)\n ret
urn true;\n var parentNode = child.parentNode;\n if (!parentNode)\n
return false;\n return this.contains(parentNode);\n },\n\n compa
reDocumentPosition: function(otherNode) {\n // This only wraps, it therefor
e only operates on the composed DOM and not\n // the logical DOM.\n re
turn originalCompareDocumentPosition.call(this.impl, unwrap(otherNode));\n }\
n });\n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We use a DocumentFr
agment as a base and then delete the properties of\n // DocumentFragment.protot
ype from the wrapper Node. Since delete makes\n // objects slow in some JS engi
nes we recreate the prototype object.\n registerWrapper(OriginalNode, Node, doc
ument.createDocumentFragment());\n delete Node.prototype.querySelector;\n dele
te Node.prototype.querySelectorAll;\n Node.prototype = mixin(Object.create(Even
tTarget.prototype), Node.prototype);\n\n scope.nodeWasAdded = nodeWasAdded;\n
scope.nodeWasRemoved = nodeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;
\n scope.nodesWereRemoved = nodesWereRemoved;\n scope.snapshotNodeList = snaps
hotNodeList;\n scope.wrappers.Node = Node;\n\n})(window.ShadowDOMPolyfill);\n",
"// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this sou
rce code is governed by a BSD-style\n// license that can be found in the LICENSE
file.\n\n(function(scope) {\n 'use strict';\n\n function findOne(node, select
or) {\n var m, el = node.firstElementChild;\n while (el) {\n if (el.m
atches(selector))\n return el;\n m = findOne(el, selector);\n i
f (m)\n return m;\n el = el.nextElementSibling;\n }\n return n
ull;\n }\n\n function findAll(node, selector, results) {\n var el = node.fi
rstElementChild;\n while (el) {\n if (el.matches(selector))\n res
ults[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 guare
nteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple-selectors\
n\n var SelectorsInterface = {\n querySelector: function(selector) {\n
return findOne(this, selector);\n },\n querySelectorAll: function(selector
) {\n return findAll(this, selector, new NodeList())\n }\n };\n\n var
GetElementsByInterface = {\n getElementsByTagName: function(tagName) {\n
// TODO(arv): Check tagName?\n return this.querySelectorAll(tagName);\n
},\n getElementsByClassName: function(className) {\n // TODO(arv): Chec
k className?\n return this.querySelectorAll('.' + className);\n },\n
getElementsByTagNameNS: function(ns, tagName) {\n if (ns === '*')\n
return this.getElementsByTagName(tagName);\n\n // TODO(arv): Check tagName?
\n var result = new NodeList;\n var els = this.getElementsByTagName(ta
gName);\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.le
ngth = j;\n return result;\n }\n };\n\n scope.GetElementsByInterface =
GetElementsByInterface;\n scope.SelectorsInterface = SelectorsInterface;\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 NodeList = scope.wrappers.NodeList;\n\n function forwardElement(node) {\
n while (node && node.nodeType !== Node.ELEMENT_NODE) {\n node = node.ne
xtSibling;\n }\n return node;\n }\n\n function backwardsElement(node) {\
n while (node && node.nodeType !== Node.ELEMENT_NODE) {\n node = node.pr
eviousSibling;\n }\n return node;\n }\n\n var ParentNodeInterface = {\n
get firstElementChild() {\n return forwardElement(this.firstChild);\n
},\n\n get lastElementChild() {\n return backwardsElement(this.lastChil
d);\n },\n\n get childElementCount() {\n var count = 0;\n for (v
ar child = this.firstElementChild;\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.nextElementSibling) {\n wrapperList[i++] = child;\n }\
n wrapperList.length = i;\n return wrapperList;\n }\n };\n\n var
ChildNodeInterface = {\n get nextElementSibling() {\n return forwardElem
ent(this.nextSibling);\n },\n\n get previousElementSibling() {\n retu
rn backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNodeInte
rface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterface;\
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// lic
ense that can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict
';\n\n var ChildNodeInterface = scope.ChildNodeInterface;\n var Node = scope.w
rappers.Node;\n var enqueueMutation = scope.enqueueMutation;\n var mixin = sco
pe.mixin;\n var registerWrapper = scope.registerWrapper;\n\n var OriginalChara
cterData = window.CharacterData;\n\n function CharacterData(node) {\n Node.c
all(this, node);\n }\n CharacterData.prototype = Object.create(Node.prototype)
;\n mixin(CharacterData.prototype, {\n get textContent() {\n return thi
s.data;\n },\n set textContent(value) {\n this.data = value;\n },\
n get data() {\n return this.impl.data;\n },\n set data(value) {\n
var oldValue = this.impl.data;\n enqueueMutation(this, 'characterData
', {\n oldValue: oldValue\n });\n this.impl.data = value;\n
}\n });\n\n mixin(CharacterData.prototype, ChildNodeInterface);\n\n registerW
rapper(OriginalCharacterData, CharacterData,\n document.createT
extNode(''));\n\n scope.wrappers.CharacterData = CharacterData;\n})(window.Shad
owDOMPolyfill);\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 LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Child
NodeInterface = scope.ChildNodeInterface;\n var GetElementsByInterface = scope.
GetElementsByInterface;\n var Node = scope.wrappers.Node;\n var ParentNodeInte
rface = scope.ParentNodeInterface;\n var SelectorsInterface = scope.SelectorsIn
terface;\n var addWrapNodeListMethod = scope.addWrapNodeListMethod;\n var enqu
eueMutation = scope.enqueueMutation;\n var mixin = scope.mixin;\n var oneOf =
scope.oneOf;\n var registerWrapper = scope.registerWrapper;\n var wrappers = s
cope.wrappers;\n\n var OriginalElement = window.Element;\n\n var matchesName =
oneOf(OriginalElement.prototype, [\n 'matches',\n 'mozMatchesSelector',\n
'msMatchesSelector',\n 'webkitMatchesSelector',\n ]);\n\n var originalM
atches = OriginalElement.prototype[matchesName];\n\n function invalidateRendere
rBasedOnAttribute(element, name) {\n // Only invalidate if parent node is a s
hadow host.\n var p = element.parentNode;\n if (!p || !p.shadowRoot)\n
return;\n\n var renderer = scope.getRendererForHost(p);\n if (renderer.d
ependsOnAttribute(name))\n renderer.invalidate();\n }\n\n function enqueA
ttributeChange(element, name, oldValue) {\n // This is not fully spec complia
nt. 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 enq
ueueMutation(element, 'attributes', {\n name: name,\n namespace: null,
\n oldValue: oldValue\n });\n }\n\n function Element(node) {\n Node
.call(this, node);\n }\n Element.prototype = Object.create(Node.prototype);\n
mixin(Element.prototype, {\n createShadowRoot: function() {\n var newSh
adowRoot = new wrappers.ShadowRoot(this);\n this.impl.polymerShadowRoot_ =
newShadowRoot;\n\n var renderer = scope.getRendererForHost(this);\n re
nderer.invalidate();\n\n return newShadowRoot;\n },\n\n get shadowRoo
t() {\n return this.impl.polymerShadowRoot_ || null;\n },\n\n setAttr
ibute: function(name, value) {\n var oldValue = this.impl.getAttribute(name
);\n this.impl.setAttribute(name, value);\n enqueAttributeChange(this,
name, oldValue);\n invalidateRendererBasedOnAttribute(this, name);\n },
\n\n removeAttribute: function(name) {\n var oldValue = this.impl.getAtt
ribute(name);\n this.impl.removeAttribute(name);\n enqueAttributeChang
e(this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, name);\
n },\n\n matches: function(selector) {\n return originalMatches.call(
this.impl, selector);\n }\n });\n\n if (matchesName != \"matches\") {\n
Element.prototype[matchesName] = function(selector) {\n return this.matches
(selector);\n };\n }\n\n if (OriginalElement.prototype.webkitCreateShadowRo
ot) {\n Element.prototype.webkitCreateShadowRoot =\n Element.prototype
.createShadowRoot;\n }\n\n /**\n * Useful for generating the accessor pair f
or a property that reflects an\n * attribute.\n */\n function setterDirties
Attribute(prototype, propertyName, opt_attrName) {\n var attrName = opt_attrN
ame || propertyName;\n Object.defineProperty(prototype, propertyName, {\n
get: function() {\n return this.impl[propertyName];\n },\n se
t: function(v) {\n this.impl[propertyName] = v;\n invalidateRender
erBasedOnAttribute(this, attrName);\n },\n configurable: true,\n
enumerable: true\n });\n }\n\n setterDirtiesAttribute(Element.prototype, 'i
d');\n setterDirtiesAttribute(Element.prototype, 'className', 'class');\n\n mi
xin(Element.prototype, ChildNodeInterface);\n mixin(Element.prototype, GetEleme
ntsByInterface);\n mixin(Element.prototype, ParentNodeInterface);\n mixin(Elem
ent.prototype, SelectorsInterface);\n\n registerWrapper(OriginalElement, Elemen
t);\n\n // TODO(arv): Export setterDirtiesAttribute and apply it to more bindin
gs\n // that reflect attributes.\n scope.matchesName = matchesName;\n scope.w
rappers.Element = Element;\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013
The Polymer Authors. All rights reserved.\n// Use of this source code is goveren
ed by a BSD-style\n// license that can be found in the LICENSE file.\n\n(functio
n(scope) {\n 'use strict';\n\n var Element = scope.wrappers.Element;\n var de
fineGetter = scope.defineGetter;\n var enqueueMutation = scope.enqueueMutation;
\n var mixin = scope.mixin;\n var nodesWereAdded = scope.nodesWereAdded;\n va
r nodesWereRemoved = scope.nodesWereRemoved;\n var registerWrapper = scope.regi
sterWrapper;\n var snapshotNodeList = scope.snapshotNodeList;\n var unwrap = s
cope.unwrap;\n var wrap = scope.wrap;\n\n ////////////////////////////////////
/////////////////////////////////////////\n // innerHTML and outerHTML\n\n var
escapeRegExp = /&|<|\"/g;\n\n function escapeReplace(c) {\n switch (c) {\n
case '&':\n return '&';\n case '<':\n return '<';
\n case '\"':\n return '"'\n }\n }\n\n function escape(s)
{\n return s.replace(escapeRegExp, escapeReplace);\n }\n\n // http://www.wh
atwg.org/specs/web-apps/current-work/#void-elements\n var voidElements = {\n
'area': true,\n 'base': true,\n 'br': true,\n 'col': true,\n 'comma
nd': true,\n 'embed': true,\n 'hr': true,\n 'img': true,\n 'input':
true,\n 'keygen': true,\n 'link': true,\n 'meta': true,\n 'param': t
rue,\n 'source': true,\n 'track': true,\n 'wbr': true\n };\n\n functi
on getOuterHTML(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_N
ODE:\n var tagName = node.tagName.toLowerCase();\n var s = '<' + t
agName;\n var attrs = node.attributes;\n for (var i = 0, attr; att
r = attrs[i]; i++) {\n s += ' ' + attr.name + '=\"' + escape(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 return escape(node.nodeValue);\n\n
case Node.COMMENT_NODE:\n return '<!--' + escape(node.nodeValue) + '-->'
;\n default:\n console.error(node);\n throw new Error('not im
plemented');\n }\n }\n\n function getInnerHTML(node) {\n var s = '';\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n s
+= getOuterHTML(child);\n }\n return s;\n }\n\n function setInnerHTML(n
ode, value, opt_tagName) {\n var tagName = opt_tagName || 'div';\n node.te
xtContent = '';\n var tempElement = unwrap(node.ownerDocument.createElement(t
agName));\n tempElement.innerHTML = value;\n var firstChild;\n while (f
irstChild = tempElement.firstChild) {\n node.appendChild(wrap(firstChild));
\n }\n }\n\n var OriginalHTMLElement = window.HTMLElement;\n\n function HT
MLElement(node) {\n Element.call(this, node);\n }\n HTMLElement.prototype =
Object.create(Element.prototype);\n mixin(HTMLElement.prototype, {\n get in
nerHTML() {\n // TODO(arv): This should fallback to this.impl.innerHTML if
there\n // are no shadow trees below or above the context node.\n retu
rn getInnerHTML(this);\n },\n set innerHTML(value) {\n var removedNod
es = snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRender
er())\n setInnerHTML(this, value, this.tagName);\n else\n thi
s.impl.innerHTML = value;\n var addedNodes = snapshotNodeList(this.childNod
es);\n\n enqueueMutation(this, 'childList', {\n addedNodes: addedNod
es,\n removedNodes: removedNodes\n });\n\n nodesWereRemoved(rem
ovedNodes);\n nodesWereAdded(addedNodes);\n },\n\n get outerHTML() {\
n // TODO(arv): This should fallback to HTMLElement_prototype.outerHTML if
there\n // are no shadow trees below or above the context node.\n retu
rn getOuterHTML(this);\n },\n set outerHTML(value) {\n var p = this.p
arentNode;\n if (p) {\n p.invalidateShadowRenderer();\n var d
f = frag(p, value);\n p.replaceChild(df, this);\n }\n },\n\n i
nsertAdjacentHTML: function(position, text) {\n var contextElement, refNode
;\n switch (String(position).toLowerCase()) {\n case 'beforebegin':\
n contextElement = this.parentNode;\n refNode = this;\n
break;\n case 'afterend':\n contextElement = this.parentNode;
\n refNode = this.nextSibling;\n break;\n case 'afterbe
gin':\n contextElement = this;\n refNode = this.firstChild;\n
break;\n case 'beforeend':\n contextElement = this;\n
refNode = null;\n break;\n default:\n return;\n
}\n\n var df = frag(contextElement, text);\n contextElement.inse
rtBefore(df, refNode);\n }\n });\n\n function frag(contextElement, html) {\
n // TODO(arv): This does not work with SVG and other 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 return wrap(df);\n }\n\n
function getter(name) {\n return function() {\n scope.renderAllPending(
);\n return this.impl[name];\n };\n }\n\n function getterRequiresRende
ring(name) {\n defineGetter(HTMLElement, name, getter(name));\n }\n\n [\n
'clientHeight',\n 'clientLeft',\n 'clientTop',\n 'clientWidth',\n
'offsetHeight',\n 'offsetLeft',\n 'offsetTop',\n 'offsetWidth',\n 's
crollHeight',\n 'scrollWidth',\n ].forEach(getterRequiresRendering);\n\n fu
nction getterAndSetterRequiresRendering(name) {\n Object.defineProperty(HTMLE
lement.prototype, name, {\n get: getter(name),\n set: function(v) {\n
scope.renderAllPending();\n this.impl[name] = v;\n },\n
configurable: true,\n enumerable: true\n });\n }\n\n [\n 'scrollLef
t',\n 'scrollTop',\n ].forEach(getterAndSetterRequiresRendering);\n\n funct
ion methodRequiresRendering(name) {\n Object.defineProperty(HTMLElement.proto
type, name, {\n value: function() {\n scope.renderAllPending();\n
return this.impl[name].apply(this.impl, arguments);\n },\n config
urable: true,\n enumerable: true\n });\n }\n\n [\n 'getBoundingClie
ntRect',\n 'getClientRects',\n 'scrollIntoView'\n ].forEach(methodRequire
sRendering);\n\n // HTMLElement is abstract so we use a subclass that has no me
mbers.\n registerWrapper(OriginalHTMLElement, HTMLElement,\n d
ocument.createElement('b'));\n\n scope.wrappers.HTMLElement = HTMLElement;\n\n
// TODO: Find a better way to share these two with WrapperShadowRoot.\n scope.
getInnerHTML = getInnerHTML;\n scope.setInnerHTML = setInnerHTML\n})(window.Sha
dowDOMPolyfill);\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 LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTML
Element = scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registe
rWrapper = scope.registerWrapper;\n var wrap = scope.wrap;\n\n var OriginalHTM
LCanvasElement = window.HTMLCanvasElement;\n\n function HTMLCanvasElement(node)
{\n HTMLElement.call(this, node);\n }\n HTMLCanvasElement.prototype = Obje
ct.create(HTMLElement.prototype);\n\n mixin(HTMLCanvasElement.prototype, {\n
getContext: function() {\n var context = this.impl.getContext.apply(this.i
mpl, arguments);\n return context && wrap(context);\n }\n });\n\n regi
sterWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement,\n doc
ument.createElement('canvas'));\n\n scope.wrappers.HTMLCanvasElement = HTMLCanv
asElement;\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\n var OriginalHTML
ContentElement = window.HTMLContentElement;\n\n function HTMLContentElement(nod
e) {\n HTMLElement.call(this, node);\n }\n HTMLContentElement.prototype = O
bject.create(HTMLElement.prototype);\n mixin(HTMLContentElement.prototype, {\n
get select() {\n return this.getAttribute('select');\n },\n set se
lect(value) {\n this.setAttribute('select', value);\n },\n\n setAttri
bute: function(n, v) {\n HTMLElement.prototype.setAttribute.call(this, n, v
);\n if (String(n).toLowerCase() === 'select')\n this.invalidateShad
owRenderer(true);\n }\n\n // getDistributedNodes is added in ShadowRendere
r\n\n // TODO: attribute boolean resetStyleInheritance;\n });\n\n if (Origi
nalHTMLContentElement)\n registerWrapper(OriginalHTMLContentElement, HTMLCont
entElement);\n\n scope.wrappers.HTMLContentElement = HTMLContentElement;\n})(wi
ndow.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All rights r
eserved.\n// Use of this source code is goverened by a BSD-style\n// license tha
t can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n
var HTMLElement = scope.wrappers.HTMLElement;\n var registerWrapper = scope.reg
isterWrapper;\n var unwrap = scope.unwrap;\n var rewrap = scope.rewrap;\n\n v
ar OriginalHTMLImageElement = window.HTMLImageElement;\n\n function HTMLImageEl
ement(node) {\n HTMLElement.call(this, node);\n }\n HTMLImageElement.protot
ype = Object.create(HTMLElement.prototype);\n\n registerWrapper(OriginalHTMLIma
geElement, HTMLImageElement,\n document.createElement('img'));\
n\n function Image(width, height) {\n if (!(this instanceof Image)) {\n
throw new TypeError(\n 'DOM object constructor cannot be called as a f
unction.');\n }\n\n var node = unwrap(document.createElement('img'));\n
HTMLElement.call(this, node);\n rewrap(node, this);\n\n if (width !== und
efined)\n node.width = width;\n if (height !== undefined)\n node.he
ight = height;\n }\n\n Image.prototype = HTMLImageElement.prototype;\n\n scop
e.wrappers.HTMLImageElement = HTMLImageElement;\n scope.wrappers.Image = Image;
\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013 The Polymer Authors. All r
ights reserved.\n// Use of this source code is goverened by a BSD-style\n// lice
nse 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 var OriginalHTMLShadowElem
ent = window.HTMLShadowElement;\n\n function HTMLShadowElement(node) {\n HTM
LElement.call(this, node);\n }\n HTMLShadowElement.prototype = Object.create(H
TMLElement.prototype);\n mixin(HTMLShadowElement.prototype, {\n // TODO: att
ribute boolean resetStyleInheritance;\n });\n\n if (OriginalHTMLShadowElement)
\n registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement);\n\n scope.
wrappers.HTMLShadowElement = HTMLShadowElement;\n})(window.ShadowDOMPolyfill);\n
","// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this s
ource code is goverened by a BSD-style\n// license that can be found in the LICE
NSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.wr
appers.HTMLElement;\n var getInnerHTML = scope.getInnerHTML;\n var mixin = sco
pe.mixin;\n var registerWrapper = scope.registerWrapper;\n var setInnerHTML =
scope.setInnerHTML;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n
var contentTable = new WeakMap();\n var templateContentsOwnerTable = new WeakM
ap();\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/in
dex.html#dfn-template-contents-owner\n function getTemplateContentsOwner(doc) {
\n if (!doc.defaultView)\n return doc;\n var d = templateContentsOwne
rTable.get(doc);\n if (!d) {\n // TODO(arv): This should either be a Doc
ument or HTMLDocument depending\n // on doc.\n d = doc.implementation.
createHTMLDocument('');\n while (d.lastChild) {\n d.removeChild(d.la
stChild);\n }\n templateContentsOwnerTable.set(doc, d);\n }\n re
turn d;\n }\n\n function extractContent(templateElement) {\n // templateEle
ment is not a wrapper here.\n var doc = getTemplateContentsOwner(templateElem
ent.ownerDocument);\n var df = unwrap(doc.createDocumentFragment());\n var
child;\n while (child = templateElement.firstChild) {\n df.appendChild(
child);\n }\n return df;\n }\n\n var OriginalHTMLTemplateElement = windo
w.HTMLTemplateElement;\n\n function HTMLTemplateElement(node) {\n HTMLElemen
t.call(this, node);\n if (!OriginalHTMLTemplateElement) {\n var content
= extractContent(node);\n contentTable.set(this, wrap(content));\n }\n
}\n HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);\n\n
mixin(HTMLTemplateElement.prototype, {\n get content() {\n if (OriginalH
TMLTemplateElement)\n return wrap(this.impl.content);\n return conte
ntTable.get(this);\n },\n\n get innerHTML() {\n return getInnerHTML(t
his.content);\n },\n set innerHTML(value) {\n setInnerHTML(this.conte
nt, value);\n }\n\n // TODO(arv): cloneNode needs to clone content.\n\n }
);\n\n if (OriginalHTMLTemplateElement)\n registerWrapper(OriginalHTMLTempla
teElement, HTMLTemplateElement);\n\n scope.wrappers.HTMLTemplateElement = HTMLT
emplateElement;\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 LICENSE file.\n\n(function(scope) {\
n 'use strict';\n\n var HTMLElement = scope.wrappers.HTMLElement;\n var regis
terWrapper = scope.registerWrapper;\n\n var OriginalHTMLMediaElement = window.H
TMLMediaElement;\n\n function HTMLMediaElement(node) {\n HTMLElement.call(th
is, node);\n }\n HTMLMediaElement.prototype = Object.create(HTMLElement.protot
ype);\n\n registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement,\n
document.createElement('audio'));\n\n scope.wrappers.HTMLMediaElement
= HTMLMediaElement;\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 HTMLMediaElement = scope.wrappers.HTMLMediaElemen
t;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;
\n var rewrap = scope.rewrap;\n\n var OriginalHTMLAudioElement = window.HTMLAu
dioElement;\n\n function HTMLAudioElement(node) {\n HTMLMediaElement.call(th
is, node);\n }\n HTMLAudioElement.prototype = Object.create(HTMLMediaElement.p
rototype);\n\n registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement,\n
document.createElement('audio'));\n\n function Audio(src) {\n
if (!(this instanceof Audio)) {\n throw new TypeError(\n 'DOM obj
ect constructor cannot be called as a function.');\n }\n\n var node = unwr
ap(document.createElement('audio'));\n HTMLMediaElement.call(this, node);\n
rewrap(node, this);\n\n node.setAttribute('preload', 'auto');\n if (src
!== undefined)\n node.setAttribute('src', src);\n }\n\n Audio.prototype =
HTMLAudioElement.prototype;\n\n scope.wrappers.HTMLAudioElement = HTMLAudioEle
ment;\n scope.wrappers.Audio = Audio;\n})(window.ShadowDOMPolyfill);\n","// Cop
yright 2013 The Polymer Authors. All rights reserved.\n// Use of this source cod
e 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.HT
MLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope.registerWr
apper;\n var rewrap = scope.rewrap;\n var unwrap = scope.unwrap;\n var wrap =
scope.wrap;\n\n var OriginalHTMLOptionElement = window.HTMLOptionElement;\n\n
function trimText(s) {\n return s.replace(/\\s+/g, ' ').trim();\n }\n\n fu
nction HTMLOptionElement(node) {\n HTMLElement.call(this, node);\n }\n HTML
OptionElement.prototype = Object.create(HTMLElement.prototype);\n mixin(HTMLOpt
ionElement.prototype, {\n get text() {\n return trimText(this.textConten
t);\n },\n set text(value) {\n this.textContent = trimText(String(val
ue));\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 instanceof Option)) {\n throw
new TypeError(\n 'DOM object constructor cannot be called as a function
.');\n }\n\n var node = unwrap(document.createElement('option'));\n HTM
LElement.call(this, node);\n rewrap(node, this);\n\n if (text !== undefine
d)\n node.text = text;\n if (value !== undefined)\n node.setAttribu
te('value', value);\n if (defaultSelected === true)\n node.setAttribute(
'selected', '');\n node.selected = selected === true;\n }\n\n Option.protot
ype = HTMLOptionElement.prototype;\n\n scope.wrappers.HTMLOptionElement = HTMLO
ptionElement;\n scope.wrappers.Option = Option;\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 LIC
ENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLContentElement =
scope.wrappers.HTMLContentElement;\n var HTMLElement = scope.wrappers.HTMLEleme
nt;\n var HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var HTMLTemp
lateElement = scope.wrappers.HTMLTemplateElement;\n var mixin = scope.mixin;\n
var registerWrapper = scope.registerWrapper;\n\n var OriginalHTMLUnknownElemen
t = window.HTMLUnknownElement;\n\n function HTMLUnknownElement(node) {\n swi
tch (node.localName) {\n case 'content':\n return new HTMLContentEle
ment(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.cr
eate(HTMLElement.prototype);\n registerWrapper(OriginalHTMLUnknownElement, HTML
UnknownElement);\n scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;\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 t
hat can be found in the LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n
var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va
r unwrap = scope.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wr
ap = scope.wrap;\n\n var OriginalCanvasRenderingContext2D = window.CanvasRender
ingContext2D;\n\n function CanvasRenderingContext2D(impl) {\n this.impl = im
pl;\n }\n\n mixin(CanvasRenderingContext2D.prototype, {\n get canvas() {\n
return wrap(this.impl.canvas);\n },\n\n drawImage: function() {\n
arguments[0] = unwrapIfNeeded(arguments[0]);\n this.impl.drawImage.apply(
this.impl, arguments);\n },\n\n createPattern: function() {\n argumen
ts[0] = unwrap(arguments[0]);\n return this.impl.createPattern.apply(this.i
mpl, arguments);\n }\n });\n\n registerWrapper(OriginalCanvasRenderingConte
xt2D, CanvasRenderingContext2D,\n document.createElement('canva
s').getContext('2d'));\n\n scope.wrappers.CanvasRenderingContext2D = CanvasRend
eringContext2D;\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 LICENSE file.\n\n(function(scope) {\
n 'use strict';\n\n var mixin = scope.mixin;\n var registerWrapper = scope.re
gisterWrapper;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = scope
.wrap;\n\n var OriginalWebGLRenderingContext = window.WebGLRenderingContext;\n\
n // IE10 does not have WebGL.\n if (!OriginalWebGLRenderingContext)\n retu
rn;\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.apply(this.impl, arg
uments);\n },\n\n texSubImage2D: function() {\n arguments[6] = unwrap
IfNeeded(arguments[6]);\n this.impl.texSubImage2D.apply(this.impl, argument
s);\n }\n });\n\n // Blink/WebKit has broken DOM bindings. Usually we would
create an instance\n // of the object and pass it into registerWrapper 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 these broken browser
s.\n var instanceProperties = /WebKit/.test(navigator.userAgent) ?\n {draw
ingBufferHeight: null, drawingBufferWidth: null} : {};\n\n registerWrapper(Orig
inalWebGLRenderingContext, WebGLRenderingContext,\n instanceProperties);\n\
n scope.wrappers.WebGLRenderingContext = WebGLRenderingContext;\n})(window.Shad
owDOMPolyfill);\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 LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var regis
terWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapI
fNeeded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalRange
= window.Range;\n\n function Range(impl) {\n this.impl = impl;\n }\n Rang
e.prototype = {\n get startContainer() {\n return wrap(this.impl.startCo
ntainer);\n },\n get endContainer() {\n return wrap(this.impl.endCont
ainer);\n },\n get commonAncestorContainer() {\n return wrap(this.imp
l.commonAncestorContainer);\n },\n setStart: function(refNode,offset) {\n
this.impl.setStart(unwrapIfNeeded(refNode), offset);\n },\n setEnd: f
unction(refNode,offset) {\n this.impl.setEnd(unwrapIfNeeded(refNode), offse
t);\n },\n setStartBefore: function(refNode) {\n this.impl.setStartBe
fore(unwrapIfNeeded(refNode));\n },\n setStartAfter: function(refNode) {\n
this.impl.setStartAfter(unwrapIfNeeded(refNode));\n },\n setEndBefor
e: function(refNode) {\n this.impl.setEndBefore(unwrapIfNeeded(refNode));\n
},\n setEndAfter: function(refNode) {\n this.impl.setEndAfter(unwrap
IfNeeded(refNode));\n },\n selectNode: function(refNode) {\n this.imp
l.selectNode(unwrapIfNeeded(refNode));\n },\n selectNodeContents: function
(refNode) {\n this.impl.selectNodeContents(unwrapIfNeeded(refNode));\n }
,\n compareBoundaryPoints: function(how, sourceRange) {\n return this.im
pl.compareBoundaryPoints(how, unwrap(sourceRange));\n },\n extractContents
: function() {\n return wrap(this.impl.extractContents());\n },\n clo
neContents: function() {\n return wrap(this.impl.cloneContents());\n },\
n insertNode: function(node) {\n this.impl.insertNode(unwrapIfNeeded(nod
e));\n },\n surroundContents: function(newParent) {\n this.impl.surro
undContents(unwrapIfNeeded(newParent));\n },\n cloneRange: function() {\n
return wrap(this.impl.cloneRange());\n },\n isPointInRange: function(
node, offset) {\n return this.impl.isPointInRange(unwrapIfNeeded(node), off
set);\n },\n comparePoint: function(node, offset) {\n return this.imp
l.comparePoint(unwrapIfNeeded(node), offset);\n },\n intersectsNode: funct
ion(node) {\n return this.impl.intersectsNode(unwrapIfNeeded(node));\n }
\n };\n\n // IE9 does not have createContextualFragment.\n if (OriginalRange.
prototype.createContextualFragment) {\n Range.prototype.createContextualFragm
ent = function(html) {\n return wrap(this.impl.createContextualFragment(htm
l));\n };\n }\n\n registerWrapper(window.Range, Range, document.createRange
());\n\n scope.wrappers.Range = Range;\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 LICENSE fi
le.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterface = sco
pe.GetElementsByInterface;\n var ParentNodeInterface = scope.ParentNodeInterfac
e;\n var SelectorsInterface = scope.SelectorsInterface;\n var mixin = scope.mi
xin;\n var registerObject = scope.registerObject;\n\n var DocumentFragment = r
egisterObject(document.createDocumentFragment());\n mixin(DocumentFragment.prot
otype, ParentNodeInterface);\n mixin(DocumentFragment.prototype, SelectorsInter
face);\n mixin(DocumentFragment.prototype, GetElementsByInterface);\n\n var Te
xt = registerObject(document.createTextNode(''));\n var Comment = registerObjec
t(document.createComment(''));\n\n scope.wrappers.Comment = Comment;\n scope.w
rappers.DocumentFragment = DocumentFragment;\n scope.wrappers.Text = Text;\n\n}
)(window.ShadowDOMPolyfill);\n","// Copyright 2013 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 DocumentFragment = scope.wrappers.DocumentFragment;\n var elementFromPo
int = scope.elementFromPoint;\n var getInnerHTML = scope.getInnerHTML;\n var m
ixin = scope.mixin;\n var rewrap = scope.rewrap;\n var setInnerHTML = scope.se
tInnerHTML;\n var unwrap = scope.unwrap;\n\n var shadowHostTable = new WeakMap
();\n var nextOlderShadowTreeTable = new WeakMap();\n\n function ShadowRoot(ho
stWrapper) {\n var node = unwrap(hostWrapper.impl.ownerDocument.createDocumen
tFragment());\n DocumentFragment.call(this, node);\n\n // createDocumentFr
agment associates the node with a wrapper\n // DocumentFragment instance. Ove
rride that.\n rewrap(node, this);\n\n var oldShadowRoot = hostWrapper.shad
owRoot;\n nextOlderShadowTreeTable.set(this, oldShadowRoot);\n\n shadowHos
tTable.set(this, hostWrapper);\n }\n ShadowRoot.prototype = Object.create(Docu
mentFragment.prototype);\n mixin(ShadowRoot.prototype, {\n get innerHTML() {
\n return getInnerHTML(this);\n },\n set innerHTML(value) {\n se
tInnerHTML(this, value);\n this.invalidateShadowRenderer();\n },\n\n
get olderShadowRoot() {\n return nextOlderShadowTreeTable.get(this) || null
;\n },\n\n get host() {\n return shadowHostTable.get(this) || null;\n
},\n\n invalidateShadowRenderer: function() {\n return shadowHostTab
le.get(this).invalidateShadowRenderer();\n },\n\n elementFromPoint: functi
on(x, y) {\n return elementFromPoint(this, this.ownerDocument, x, y);\n
},\n\n getElementById: function(id) {\n return this.querySelector('#' +
id);\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRoot;\n\n})(window.Sha
dowDOMPolyfill);\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 strict';\n\n var Eleme
nt = scope.wrappers.Element;\n var HTMLContentElement = scope.wrappers.HTMLCont
entElement;\n var HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var
Node = scope.wrappers.Node;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n va
r assert = scope.assert;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;
\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n /**\n * Updates
the fields of a wrapper to a snapshot of the logical DOM as needed.\n * Up mea
ns parentNode\n * Sideways means previous and next sibling.\n * @param {!Nod
e} 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 fields of a wrapper to a snapshot of the logical DOM as needed.\n
* Down means first and last child\n * @param {!Node} wrapper\n */\n functi
on updateWrapperDown(wrapper) {\n wrapper.firstChild_ = wrapper.firstChild;\n
wrapper.lastChild_ = wrapper.lastChild;\n }\n\n function updateAllChildNod
es(parentNodeWrapper) {\n assert(parentNodeWrapper instanceof Node);\n for
(var childWrapper = parentNodeWrapper.firstChild;\n childWrapper;\n
childWrapper = childWrapper.nextSibling) {\n updateWrapperUpAndSideway
s(childWrapper);\n }\n updateWrapperDown(parentNodeWrapper);\n }\n\n fun
ction insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) {\n v
ar parentNode = unwrap(parentNodeWrapper);\n var newChild = unwrap(newChildWr
apper);\n var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;\n\
n remove(newChildWrapper);\n updateWrapperUpAndSideways(newChildWrapper);\
n\n if (!refChildWrapper) {\n parentNodeWrapper.lastChild_ = parentNodeW
rapper.lastChild;\n if (parentNodeWrapper.lastChild === parentNodeWrapper.f
irstChild)\n parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild
;\n\n var lastChildWrapper = wrap(parentNode.lastChild);\n if (lastChi
ldWrapper)\n lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling
;\n } else {\n if (parentNodeWrapper.firstChild === refChildWrapper)\n
parentNodeWrapper.firstChild_ = refChildWrapper;\n\n refChildWrapper.
previousSibling_ = refChildWrapper.previousSibling;\n }\n\n parentNode.ins
ertBefore(newChild, refChild);\n }\n\n function remove(nodeWrapper) {\n var
node = unwrap(nodeWrapper)\n var parentNode = node.parentNode;\n if (!par
entNode)\n return;\n\n var parentNodeWrapper = wrap(parentNode);\n up
dateWrapperUpAndSideways(nodeWrapper);\n\n if (nodeWrapper.previousSibling)\n
nodeWrapper.previousSibling.nextSibling_ = nodeWrapper;\n if (nodeWrapp
er.nextSibling)\n nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;\n
\n if (parentNodeWrapper.lastChild === nodeWrapper)\n parentNodeWrapper.
lastChild_ = nodeWrapper;\n if (parentNodeWrapper.firstChild === nodeWrapper)
\n parentNodeWrapper.firstChild_ = nodeWrapper;\n\n parentNode.removeChi
ld(node);\n }\n\n var distributedChildNodesTable = new WeakMap();\n var event
ParentsTable = new WeakMap();\n var insertionParentTable = new WeakMap();\n va
r rendererForHostTable = new WeakMap();\n\n function distributeChildToInsertion
Point(child, insertionPoint) {\n getDistributedChildNodes(insertionPoint).pus
h(child);\n assignToInsertionPoint(child, insertionPoint);\n\n var eventPa
rents = eventParentsTable.get(child);\n if (!eventParents)\n eventParent
sTable.set(child, eventParents = []);\n eventParents.push(insertionPoint);\n
}\n\n function resetDistributedChildNodes(insertionPoint) {\n distributedCh
ildNodesTable.set(insertionPoint, []);\n }\n\n function getDistributedChildNod
es(insertionPoint) {\n return distributedChildNodesTable.get(insertionPoint);
\n }\n\n function getChildNodesSnapshot(node) {\n var result = [], i = 0;\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n
result[i++] = child;\n }\n return result;\n }\n\n /**\n * Visits all
nodes in the tree that fulfils the |predicate|. If the |visitor|\n * function
returns |false| the traversal is aborted.\n * @param {!Node} tree\n * @param
{function(!Node) : boolean} predicate\n * @param {function(!Node) : *} visito
r\n */\n function visit(tree, predicate, visitor) {\n // This operates on
logical 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/webcompo
nents/raw-file/tip/spec/shadow/index.html#matching-insertion-points\n\n // TODO
(arv): Verify this... I don't remember why I picked this regexp.\n var selector
MatchRegExp = /^[*.:#[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-ch
ild',\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
The insertion point element.\n * @return {boolean} Whether the node matches t
he insertion point.\n */\n function matchesCriteria(node, point) {\n var s
elect = point.getAttribute('select');\n if (!select)\n return true;\n\n
// Here we know the select attribute is a non empty string.\n select = sel
ect.trim();\n if (!select)\n return true;\n\n if (!(node instanceof E
lement))\n return false;\n\n // TODO(arv): This does not seem right. Nee
d to check for a simple selector.\n if (!selectorMatchRegExp.test(select))\n
return false;\n\n if (select[0] === ':' && !allowedPseudoRegExp.test(sel
ect))\n return false;\n\n try {\n return node.matches(select);\n
} catch (ex) {\n // Invalid selector.\n return false;\n }\n }\n\n
var request = oneOf(window, [\n 'requestAnimationFrame',\n 'mozRequestAn
imationFrame',\n 'webkitRequestAnimationFrame',\n 'setTimeout'\n ]);\n\n
var pendingDirtyRenderers = [];\n var renderTimer;\n\n function renderAllPend
ing() {\n for (var i = 0; i < pendingDirtyRenderers.length; i++) {\n pen
dingDirtyRenderers[i].render();\n }\n pendingDirtyRenderers = [];\n }\n\n
function handleRequestAnimationFrame() {\n renderTimer = null;\n renderA
llPending();\n }\n\n /**\n * Returns existing shadow renderer for a host or
creates it if it is needed.\n * @params {!Element} host\n * @return {!Shadow
Renderer}\n */\n function getRendererForHost(host) {\n var renderer = rend
ererForHostTable.get(host);\n if (!renderer) {\n renderer = new ShadowRe
nderer(host);\n rendererForHostTable.set(host, renderer);\n }\n retur
n renderer;\n }\n\n function getShadowRootAncestor(node) {\n for (; node; n
ode = node.parentNode) {\n if (node instanceof ShadowRoot)\n return
node;\n }\n return null;\n }\n\n function getRendererForShadowRoot(shado
wRoot) {\n return getRendererForHost(shadowRoot.host);\n }\n\n var spliceDi
ff = new ArraySplice();\n spliceDiff.equals = function(renderNode, rawNode) {\n
return unwrap(renderNode.node) === rawNode;\n };\n\n /**\n * RenderNode
is used as an in memory \"render tree\". When we render the\n * composed tree
we create a tree of RenderNodes, then we diff this against\n * the real DOM tr
ee 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: function(node) {\n var rv = new Rend
erNode(node);\n this.childNodes.push(rv);\n return rv;\n },\n\n
sync: function(opt_added) {\n if (this.skip)\n return;\n\n var
nodeWrapper = this.node;\n // plain array of RenderNodes\n var newChil
dren = this.childNodes;\n // plain array of real nodes.\n var oldChild
ren = getChildNodesSnapshot(unwrap(nodeWrapper));\n var added = opt_added |
| new WeakMap();\n\n var splices = spliceDiff.calculateSplices(newChildren,
oldChildren);\n\n var newIndex = 0, oldIndex = 0;\n var lastIndex = 0
;\n for (var i = 0; i < splices.length; i++) {\n var splice = splice
s[i];\n for (; lastIndex < splice.index; lastIndex++) {\n oldInd
ex++;\n newChildren[newIndex++].sync(added);\n }\n\n var
removedCount = splice.removed.length;\n for (var j = 0; j < removedCount;
j++) {\n var wrapper = wrap(oldChildren[oldIndex++]);\n if (!
added.get(wrapper))\n remove(wrapper);\n }\n\n var adde
dCount = splice.addedCount;\n var refNode = oldChildren[oldIndex] && wrap
(oldChildren[oldIndex]);\n for (var j = 0; j < addedCount; j++) {\n
var newChildRenderNode = newChildren[newIndex++];\n var newChildWra
pper = newChildRenderNode.node;\n insertBefore(nodeWrapper, newChildWra
pper, refNode);\n\n // Keep track of added so that we do not remove the
node after it\n // has been added.\n added.set(newChildWrappe
r, true);\n\n newChildRenderNode.sync(added);\n }\n\n las
tIndex += addedCount;\n }\n\n for (var i = lastIndex; i < newChildren.
length; i++) {\n newChildren[i].sync(added);\n }\n }\n };\n\n f
unction ShadowRenderer(host) {\n this.host = host;\n this.dirty = false;\n
this.invalidateAttributes();\n this.associateNode(host);\n }\n\n Shadow
Renderer.prototype = {\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/ti
p/spec/shadow/index.html#rendering-shadow-trees\n render: function(opt_render
Node) {\n if (!this.dirty)\n return;\n\n this.invalidateAttribu
tes();\n this.treeComposition();\n\n var host = this.host;\n var
shadowRoot = host.shadowRoot;\n\n this.associateNode(host);\n var topM
ostRenderer = !renderNode;\n var renderNode = opt_renderNode || new RenderN
ode(host);\n\n for (var node = shadowRoot.firstChild; node; node = node.nex
tSibling) {\n this.renderNode(shadowRoot, renderNode, node, false);\n
}\n\n if (topMostRenderer)\n renderNode.sync();\n\n this.dirt
y = false;\n },\n\n invalidate: function() {\n if (!this.dirty) {\n
this.dirty = true;\n pendingDirtyRenderers.push(this);\n if
(renderTimer)\n return;\n renderTimer = window[request](handleRe
questAnimationFrame, 0);\n }\n },\n\n renderNode: function(shadowRoot
, renderNode, node, isNested) {\n if (isShadowHost(node)) {\n render
Node = 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(shadowRoot, renderNode, node, isNested);\n
} else if (isShadowInsertionPoint(node)) {\n this.renderShadowInsertionP
oint(shadowRoot, renderNode, node);\n } else {\n this.renderAsAnyDom
Tree(shadowRoot, renderNode, node, isNested);\n }\n },\n\n renderAsAn
yDomTree: function(shadowRoot, renderNode, node, isNested) {\n renderNode =
renderNode.append(node);\n\n if (isShadowHost(node)) {\n var render
er = getRendererForHost(node);\n renderNode.skip = !renderer.dirty;\n
renderer.render(renderNode);\n } else {\n for (var child = node.
firstChild; child; child = child.nextSibling) {\n this.renderNode(shado
wRoot, renderNode, child, isNested);\n }\n }\n },\n\n renderIn
sertionPoint: function(shadowRoot, renderNode, insertionPoint,\n
isNested) {\n var distributedChildNodes = getDistributed
ChildNodes(insertionPoint);\n if (distributedChildNodes.length) {\n
this.associateNode(insertionPoint);\n\n for (var i = 0; i < distributedCh
ildNodes.length; i++) {\n var child = distributedChildNodes[i];\n
if (isInsertionPoint(child) && isNested)\n this.renderInsertionPo
int(shadowRoot, renderNode, child, isNested);\n else\n this.
renderAsAnyDomTree(shadowRoot, renderNode, child, isNested);\n }\n }
else {\n this.renderFallbackContent(shadowRoot, renderNode, insertionPoi
nt);\n }\n this.associateNode(insertionPoint.parentNode);\n },\n\n
renderShadowInsertionPoint: function(shadowRoot, renderNode,\n
shadowInsertionPoint) {\n var nextOlderTree = sha
dowRoot.olderShadowRoot;\n if (nextOlderTree) {\n assignToInsertionP
oint(nextOlderTree, shadowInsertionPoint);\n this.associateNode(shadowIns
ertionPoint.parentNode);\n for (var node = nextOlderTree.firstChild;\n
node;\n node = node.nextSibling) {\n this.renderN
ode(nextOlderTree, renderNode, node, true);\n }\n } else {\n
this.renderFallbackContent(shadowRoot, renderNode,\n
shadowInsertionPoint);\n }\n },\n\n renderFallbackContent: fun
ction(shadowRoot, renderNode, fallbackHost) {\n this.associateNode(fallback
Host);\n this.associateNode(fallbackHost.parentNode);\n for (var node
= fallbackHost.firstChild; node; node = node.nextSibling) {\n this.render
AsAnyDomTree(shadowRoot, renderNode, node, false);\n }\n },\n\n /**\n
* Invalidates the attributes used to keep track of which attributes may\n
* cause the renderer to be invalidated.\n */\n invalidateAttributes: f
unction() {\n this.attributes = Object.create(null);\n },\n\n /**\n
* Parses the selector and makes this renderer dependent on the attribute\n
* being used in the selector.\n * @param {string} selector\n */\n u
pdateDependentAttributes: function(selector) {\n if (!selector)\n re
turn;\n\n var attributes = this.attributes;\n\n // .class\n if (/
\\.\\w+/.test(selector))\n attributes['class'] = true;\n\n // #id\n
if (/#\\w+/.test(selector))\n attributes['id'] = true;\n\n sele
ctor.replace(/\\[\\s*([^\\s=\\|~\\]]+)/g, function(_, name) {\n attribute
s[name] = true;\n });\n\n // Pseudo selectors have been removed from t
he spec.\n },\n\n dependsOnAttribute: function(name) {\n return this.
attributes[name];\n },\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file
/tip/spec/shadow/index.html#dfn-distribution-algorithm\n distribute: function
(tree, pool) {\n var self = this;\n\n visit(tree, isActiveInsertionPoi
nt,\n function(insertionPoint) {\n resetDistributedChildNode
s(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) // removed\n continue;\n
if (matchesCriteria(node, insertionPoint)) { // 1.2.2\n distri
buteChildToInsertionPoint(node, insertionPoint); // 1.2.2.1\n po
ol[i] = undefined; // 1.2.2.2\n }\n }\n });\n
},\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/ind
ex.html#dfn-tree-composition\n treeComposition: function () {\n var shad
owHost = this.host;\n var tree = shadowHost.shadowRoot; // 1.\n var p
ool = []; // 2.\n\n for (var child = shadowHost.firstChild;\n ch
ild;\n child = child.nextSibling) { // 3.\n if (isInsertionPoi
nt(child)) { // 3.2.\n var reprojected = getDistributedChildNodes(chil
d); // 3.2.1.\n // if reprojected is undef... reset it?\n if
(!reprojected || !reprojected.length) // 3.2.2.\n reprojected = getC
hildNodesSnapshot(child);\n pool.push.apply(pool, reprojected); // 3.2
.3.\n } else {\n pool.push(child); // 3.3.\n }\n }\n
\n var shadowInsertionPoint, point;\n while (tree) { // 4.\n /
/ 4.1.\n shadowInsertionPoint = undefined; // Reset every iteration.\n
visit(tree, isActiveShadowInsertionPoint, function(point) {\n sha
dowInsertionPoint = point;\n return false;\n });\n point
= shadowInsertionPoint;\n\n this.distribute(tree, pool); // 4.2.\n
if (point) { // 4.3.\n var nextOlderTree = tree.olderShadowRoot; //
4.3.1.\n if (!nextOlderTree) {\n break; // 4.3.1.1.\n
} else {\n tree = nextOlderTree; // 4.3.2.2.\n assig
nToInsertionPoint(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: function(node) {\n node.impl.polymerShadowRend
erer_ = this;\n }\n };\n\n function isInsertionPoint(node) {\n // Should
this include <shadow>?\n return node instanceof HTMLContentElement;\n }\n\n
function isActiveInsertionPoint(node) {\n // <content> inside another <cont
ent> or <shadow> is considered inactive.\n return node instanceof HTMLContent
Element;\n }\n\n function isShadowInsertionPoint(node) {\n return node inst
anceof HTMLShadowElement;\n }\n\n function isActiveShadowInsertionPoint(node)
{\n // <shadow> inside another <content> or <shadow> is considered inactive.\
n return node instanceof HTMLShadowElement;\n }\n\n function isShadowHost(s
hadowHost) {\n return shadowHost.shadowRoot;\n }\n\n function getShadowTree
s(host) {\n var trees = [];\n\n for (var tree = host.shadowRoot; tree; tre
e = tree.olderShadowRoot) {\n trees.push(tree);\n }\n return trees;\n
}\n\n function assignToInsertionPoint(tree, point) {\n insertionParentTabl
e.set(tree, point);\n }\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/ti
p/spec/shadow/index.html#rendering-shadow-trees\n function render(host) {\n
new ShadowRenderer(host).render();\n };\n\n // Need to rerender shadow host wh
en:\n //\n // - a direct child to the ShadowRoot is added or removed\n // - a
direct child to the host is added or removed\n // - a new shadow root is creat
ed\n // - a direct child to a content/shadow element is added or removed\n //
- a sibling to a content/shadow element is added or removed\n // - content[sele
ct] is changed\n // - an attribute in a direct child to a host is modified\n\n
/**\n * This gets called when a node was added or removed to it.\n */\n No
de.prototype.invalidateShadowRenderer = function(force) {\n var renderer = th
is.impl.polymerShadowRenderer_;\n if (renderer) {\n renderer.invalidate(
);\n return true;\n }\n\n return false;\n };\n\n HTMLContentElement
.prototype.getDistributedNodes = function() {\n // TODO(arv): We should only
rerender the dirty ancestor renderers (from\n // the root and down).\n ren
derAllPending();\n return getDistributedChildNodes(this);\n };\n\n HTMLShad
owElement.prototype.nodeIsInserted_ =\n HTMLContentElement.prototype.nodeIsInse
rted_ = function() {\n // Invalidate old renderer if any.\n this.invalidat
eShadowRenderer();\n\n var shadowRoot = getShadowRootAncestor(this);\n var
renderer;\n if (shadowRoot)\n renderer = getRendererForShadowRoot(shado
wRoot);\n this.impl.polymerShadowRenderer_ = renderer;\n if (renderer)\n
renderer.invalidate();\n };\n\n scope.eventParentsTable = eventParentsTabl
e;\n scope.getRendererForHost = getRendererForHost;\n scope.getShadowTrees = g
etShadowTrees;\n scope.insertionParentTable = insertionParentTable;\n scope.re
nderAllPending = renderAllPending;\n\n // Exposed for testing\n scope.visual =
{\n insertBefore: insertBefore,\n remove: remove,\n };\n\n})(window.Shad
owDOMPolyfill);\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 LICENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLE
lement = scope.wrappers.HTMLElement;\n var assert = scope.assert;\n var mixin
= scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unwrap = s
cope.unwrap;\n var wrap = scope.wrap;\n\n var elementsWithFormProperty = [\n
'HTMLButtonElement',\n 'HTMLFieldSetElement',\n 'HTMLInputElement',\n
'HTMLKeygenElement',\n 'HTMLLabelElement',\n 'HTMLLegendElement',\n 'H
TMLObjectElement',\n // HTMLOptionElement is handled in HTMLOptionElement.js\
n 'HTMLOutputElement',\n 'HTMLSelectElement',\n 'HTMLTextAreaElement',\
n ];\n\n function createWrapperConstructor(name) {\n if (!window[name])\n
return;\n\n // Ensure we are not overriding an already existing construct
or.\n assert(!scope.wrappers[name]);\n\n var GeneratedWrapper = function(n
ode) {\n // At this point all of them extend HTMLElement.\n HTMLElemen
t.call(this, node);\n }\n GeneratedWrapper.prototype = Object.create(HTMLE
lement.prototype);\n mixin(GeneratedWrapper.prototype, {\n get form() {\
n return wrap(unwrap(this).form);\n },\n });\n\n registerWrapp
er(window[name], GeneratedWrapper,\n document.createElement(name.slice(4,
-7)));\n scope.wrappers[name] = GeneratedWrapper;\n }\n\n elementsWithForm
Property.forEach(createWrapperConstructor);\n\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 GetElementsByInterface =
scope.GetElementsByInterface;\n var Node = scope.wrappers.Node;\n var ParentN
odeInterface = scope.ParentNodeInterface;\n var SelectorsInterface = scope.Sele
ctorsInterface;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n var defineWrap
Getter = scope.defineWrapGetter;\n var elementFromPoint = scope.elementFromPoin
t;\n var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var matche
sName = scope.matchesName;\n var mixin = scope.mixin;\n var registerWrapper =
scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n
var rewrap = scope.rewrap;\n var wrapEventTargetMethods = scope.wrapEventTarg
etMethods;\n var wrapNodeList = scope.wrapNodeList;\n\n var implementationTabl
e = new WeakMap();\n\n function Document(node) {\n Node.call(this, node);\n
}\n Document.prototype = Object.create(Node.prototype);\n\n defineWrapGetter(
Document, 'documentElement');\n\n // Conceptually both body and head can be in
a shadow but suporting that seems\n // overkill at this point.\n defineWrapGet
ter(Document, 'body');\n defineWrapGetter(Document, 'head');\n\n // document c
annot be overridden so we override a bunch of its methods\n // directly on the
instance.\n\n function wrapMethod(name) {\n var original = document[name];\n
Document.prototype[name] = function() {\n return wrap(original.apply(th
is.impl, arguments));\n };\n }\n\n [\n 'createComment',\n 'createDocu
mentFragment',\n 'createElement',\n 'createElementNS',\n 'createEvent',
\n 'createEventNS',\n 'createRange',\n 'createTextNode',\n 'getEleme
ntById',\n ].forEach(wrapMethod);\n\n var originalAdoptNode = document.adoptNo
de;\n\n function adoptNodeNoRemove(node, doc) {\n originalAdoptNode.call(doc
.impl, unwrap(node));\n adoptSubtree(node, doc);\n }\n\n function adoptSubt
ree(node, doc) {\n if (node.shadowRoot)\n doc.adoptNode(node.shadowRoot)
;\n if (node instanceof ShadowRoot)\n adoptOlderShadowRoots(node, doc);\
n for (var child = node.firstChild; child; child = child.nextSibling) {\n
adoptSubtree(child, doc);\n }\n }\n\n function adoptOlderShadowRoots(shad
owRoot, doc) {\n var oldShadowRoot = shadowRoot.olderShadowRoot;\n if (old
ShadowRoot)\n doc.adoptNode(oldShadowRoot);\n }\n\n var originalImportNod
e = document.importNode;\n\n mixin(Document.prototype, {\n adoptNode: functi
on(node) {\n if (node.parentNode)\n node.parentNode.removeChild(node
);\n adoptNodeNoRemove(node, this);\n return node;\n },\n elemen
tFromPoint: function(x, y) {\n return elementFromPoint(this, this, x, y);\n
},\n importNode: function(node, deep) {\n // We need to manually wal
k the tree to ensure we do not include rendered\n // shadow trees.\n v
ar clone = wrap(originalImportNode.call(this.impl, unwrap(node), false));\n
if (deep) {\n for (var child = node.firstChild; child; child = child.nex
tSibling) {\n clone.appendChild(this.importNode(child, true));\n
}\n }\n return clone;\n }\n });\n\n if (document.register) {\n
var originalRegister = document.register;\n Document.prototype.register = f
unction(tagName, object) {\n var prototype = object.prototype;\n\n //
If we already used the object as a prototype for another custom\n // elemen
t.\n if (scope.nativePrototypeTable.get(prototype)) {\n // TODO(arv)
: DOMException\n throw new Error('NotSupportedError');\n }\n\n
// Find first object on the prototype chain that already have a native\n //
prototype. Keep track of all the objects before that so we can create\n //
a similar structure for the native case.\n var proto = Object.getPrototype
Of(prototype);\n var nativePrototype;\n var prototypes = [];\n wh
ile (proto) {\n nativePrototype = scope.nativePrototypeTable.get(proto);\
n if (nativePrototype)\n break;\n prototypes.push(proto);
\n proto = Object.getPrototypeOf(proto);\n }\n\n if (!nativePro
totype) {\n // TODO(arv): DOMException\n throw new Error('NotSuppo
rtedError');\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 // passed into register is used as the wrapper prototyp
e.\n\n var newPrototype = Object.create(nativePrototype);\n for (var i
= prototypes.length - 1; i >= 0; i--) {\n newPrototype = Object.create(n
ewPrototype);\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/bindings/v8/CustomElementConstructorBuilder.cpp&sq
=package:chromium&type=cs&l=156\n // and not from the spec since the spec i
s out of date.\n [\n 'createdCallback',\n 'enteredViewCallbac
k',\n 'leftViewCallback',\n 'attributeChangedCallback',\n ].f
orEach(function(name) {\n var f = prototype[name];\n if (!f)\n
return;\n newPrototype[name] = function() {\n // if this e
lement has been wrapped prior to registration,\n // the wrapper is stal
e; in this case rewrap\n if (!(wrap(this) instanceof CustomElementConst
ructor)) {\n rewrap(this);\n }\n f.apply(wrap(this)
, arguments);\n };\n });\n\n var p = {prototype: newPrototype};
\n if (object.extends)\n p.extends = object.extends;\n\n functi
on CustomElementConstructor(node) {\n if (!node) {\n if (object.
extends) {\n return document.createElement(object.extends, tagName);\
n } else {\n return document.createElement(tagName);\n
}\n }\n this.impl = node;\n }\n CustomElementConstru
ctor.prototype = prototype;\n CustomElementConstructor.prototype.constructo
r = CustomElementConstructor;\n\n scope.constructorTable.set(newPrototype,
CustomElementConstructor);\n scope.nativePrototypeTable.set(prototype, newP
rototype);\n\n // registration is synchronous so do it last\n var nati
veConstructor = originalRegister.call(unwrap(this), tagName, p);\n return C
ustomElementConstructor;\n };\n\n forwardMethodsToWrapper([\n window.
HTMLDocument || window.Document, // Gecko adds these to HTMLDocument\n ], [\
n 'register',\n ]);\n }\n\n // We also override some of the methods on
document.body and document.head\n // for convenience.\n forwardMethodsToWrapp
er([\n window.HTMLBodyElement,\n window.HTMLDocument || window.Document,
// Gecko adds these to HTMLDocument\n window.HTMLHeadElement,\n window.HTM
LHtmlElement,\n ], [\n 'appendChild',\n 'compareDocumentPosition',\n '
contains',\n 'getElementsByClassName',\n 'getElementsByTagName',\n 'get
ElementsByTagNameNS',\n 'insertBefore',\n 'querySelector',\n 'querySele
ctorAll',\n 'removeChild',\n 'replaceChild',\n matchesName,\n ]);\n\n
forwardMethodsToWrapper([\n window.HTMLDocument || window.Document, // Geck
o adds these to HTMLDocument\n ], [\n 'adoptNode',\n 'importNode',\n '
contains',\n 'createComment',\n 'createDocumentFragment',\n 'createElem
ent',\n 'createElementNS',\n 'createEvent',\n 'createEventNS',\n 'cr
eateRange',\n 'createTextNode',\n 'elementFromPoint',\n 'getElementById
',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface);\n mixin(Docum
ent.prototype, ParentNodeInterface);\n mixin(Document.prototype, SelectorsInter
face);\n\n mixin(Document.prototype, {\n get implementation() {\n var i
mplementation = implementationTable.get(this);\n if (implementation)\n
return implementation;\n implementation =\n new DOMImplementati
on(unwrap(this).implementation);\n implementationTable.set(this, implementa
tion);\n return implementation;\n }\n });\n\n registerWrapper(window.D
ocument, Document,\n document.implementation.createHTMLDocument(''));\n\n
// Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM only has\n /
/ one Document interface and IE implements the standard correctly.\n if (window
.HTMLDocument)\n registerWrapper(window.HTMLDocument, Document);\n\n wrapEve
ntTargetMethods([\n window.HTMLBodyElement,\n window.HTMLDocument || windo
w.Document, // Gecko adds these to HTMLDocument\n window.HTMLHeadElement,\n
]);\n\n function DOMImplementation(impl) {\n this.impl = impl;\n }\n\n fu
nction wrapImplMethod(constructor, name) {\n var original = document.implemen
tation[name];\n constructor.prototype[name] = function() {\n return wrap
(original.apply(this.impl, arguments));\n };\n }\n\n function forwardImplMe
thod(constructor, name) {\n var original = document.implementation[name];\n
constructor.prototype[name] = function() {\n return original.apply(this.i
mpl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementation, 'createDocu
mentType');\n wrapImplMethod(DOMImplementation, 'createDocument');\n wrapImplM
ethod(DOMImplementation, 'createHTMLDocument');\n forwardImplMethod(DOMImplemen
tation, 'hasFeature');\n\n registerWrapper(window.DOMImplementation, DOMImpleme
ntation);\n\n forwardMethodsToWrapper([\n window.DOMImplementation,\n ], [\
n 'createDocumentType',\n 'createDocument',\n 'createHTMLDocument',\n
'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNodeNoRemove;\n scop
e.wrappers.DOMImplementation = DOMImplementation;\n scope.wrappers.Document = D
ocument;\n\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 EventTarget = scope.wrappers.EventTarget;\n var mixin = sc
ope.mixin;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope
.unwrap;\n var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;
\n var renderAllPending = scope.renderAllPending;\n\n var OriginalWindow = win
dow.Window;\n\n function Window(impl) {\n EventTarget.call(this, impl);\n }
\n Window.prototype = Object.create(EventTarget.prototype);\n\n var originalGe
tComputedStyle = window.getComputedStyle;\n OriginalWindow.prototype.getCompute
dStyle = function(el, pseudo) {\n renderAllPending();\n return originalGet
ComputedStyle.call(this || window, unwrapIfNeeded(el),\n
pseudo);\n };\n\n // Work around for https://bugzilla.mozilla
.org/show_bug.cgi?id=943065\n delete window.getComputedStyle;\n\n ['addEventLi
stener', '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.prototype, {\n getC
omputedStyle: function(el, pseudo) {\n return originalGetComputedStyle.call
(unwrap(this), unwrapIfNeeded(el),\n p
seudo);\n }\n });\n\n registerWrapper(OriginalWindow, Window);\n\n scope.w
rappers.Window = Window;\n\n})(window.ShadowDOMPolyfill);\n","// Copyright 2013
The Polymer Authors. All rights reserved.\n// Use of this source code is goveren
ed by a BSD-style\n// license that can be found in the LICENSE file.\n\n(functio
n(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 'applet': 'HTMLAp
pletElement',\n 'area': 'HTMLAreaElement',\n 'br': 'HTMLBRElement',\n '
base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n 'button': 'HTMLBu
ttonElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'dl': 'HTMLDListElement',\n 'datalist': 'HTMLDataListElement'
,\n 'data': 'HTMLDataElement',\n 'dir': 'HTMLDirectoryElement',\n 'div'
: 'HTMLDivElement',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFiel
dSetElement',\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n
'frame': 'HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'hr
': 'HTMLHRElement',\n 'head': 'HTMLHeadElement',\n 'h1': 'HTMLHeadingEleme
nt',\n 'html': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'i
nput': 'HTMLInputElement',\n 'li': 'HTMLLIElement',\n 'label': 'HTMLLabelE
lement',\n 'legend': 'HTMLLegendElement',\n 'link': 'HTMLLinkElement',\n
'map': 'HTMLMapElement',\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'H
TMLMenuElement',\n 'menuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaE
lement',\n 'meter': 'HTMLMeterElement',\n 'del': 'HTMLModElement',\n 'o
l': 'HTMLOListElement',\n 'object': 'HTMLObjectElement',\n 'optgroup': 'HT
MLOptGroupElement',\n 'option': 'HTMLOptionElement',\n 'output': 'HTMLOutp
utElement',\n 'p': 'HTMLParagraphElement',\n 'param': 'HTMLParamElement',\
n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLProgressElement',\n 'q':
'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',\n 'select': 'HTMLSele
ctElement',\n 'source': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\
n 'style': 'HTMLStyleElement',\n 'time': 'HTMLTimeElement',\n 'caption'
: 'HTMLTableCaptionElement',\n // WebKit and Moz are wrong:\n // https://b
ugs.webkit.org/show_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_
bug.cgi?id=848096\n // 'td': 'HTMLTableCellElement',\n 'col': 'HTMLTableCo
lElement',\n 'table': 'HTMLTableElement',\n 'tr': 'HTMLTableRowElement',\n
'thead': 'HTMLTableSectionElement',\n 'tbody': 'HTMLTableSectionElement',
\n 'textarea': 'HTMLTextAreaElement',\n 'track': 'HTMLTrackElement',\n
'title': 'HTMLTitleElement',\n 'ul': 'HTMLUListElement',\n 'video': 'HTMLV
ideoElement',\n };\n\n function overrideConstructor(tagName) {\n var native
ConstructorName = elements[tagName];\n var nativeConstructor = window[nativeC
onstructorName];\n if (!nativeConstructor)\n return;\n var element =
document.createElement(tagName);\n var wrapperConstructor = element.construct
or;\n window[nativeConstructorName] = wrapperConstructor;\n }\n\n Object.ke
ys(elements).forEach(overrideConstructor);\n\n Object.getOwnPropertyNames(scope
.wrappers).forEach(function(name) {\n window[name] = scope.wrappers[name]\n
});\n\n // Export for testing.\n scope.knownElements = elements;\n\n})(window.
ShadowDOMPolyfill);\n","/*\n * Copyright 2013 The Polymer Authors. All rights re
served.\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 // convenient global\
n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.unwrap = ShadowDOMPol
yfill.unwrapIfNeeded;\n\n // users may want to customize other types\n // TODO
(sjmiles): 'button' is now supported by ShadowDOMPolyfill, but\n // I've left t
his code here in case we need to temporarily patch another\n // type\n /*\n (
function() {\n var elts = {HTMLButtonElement: 'button'};\n for (var c in e
lts) {\n window[c] = function() { throw 'Patched Constructor'; };\n wi
ndow[c].prototype = Object.getPrototypeOf(\n document.createElement(elt
s[c]));\n }\n })();\n */\n\n // patch in prefixed name\n Object.definePro
perty(Element.prototype, 'webkitShadowRoot',\n Object.getOwnPropertyDescrip
tor(Element.prototype, 'shadowRoot'));\n\n var originalCreateShadowRoot = Eleme
nt.prototype.createShadowRoot;\n Element.prototype.createShadowRoot = function(
) {\n var root = originalCreateShadowRoot.call(this);\n CustomElements.wat
chShadow(this);\n return root;\n };\n\n Element.prototype.webkitCreateShado
wRoot = Element.prototype.createShadowRoot;\n})();\n","/*\n * Copyright 2012 The
Polymer Authors. All rights reserved.\n * Use of this source code is governed b
y a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n/*\n T
his is a limited shim for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webco
mponents/raw-file/tip/spec/shadow/index.html#styles\n \n The intention here is
to support only the styling features which can be \n relatively simply impleme
nted. The goal is to allow users to avoid the \n most obvious pitfalls and do s
o without compromising performance significantly. \n For ShadowDOM styling that
's not covered here, a set of best practices\n can be provided that should allo
w users to accomplish more complex styling.\n\n The following is a list of spec
ific ShadowDOM styling features and a brief\n discussion of the approach used t
o shim.\n\n Shimmed features:\n\n * @host: ShadowDOM allows styling of the sha
dowRoot's host element using the \n @host rule. To shim this feature, the @host
styles are reformatted and \n prefixed with a given scope name and promoted to
a document level stylesheet.\n For example, given a scope name of .foo, a rule
like this:\n \n @host {\n * {\n background: red;\n }\n
}\n \n becomes:\n \n .foo {\n background: red;\n }\n \n * encaps
ultion: Styles defined within ShadowDOM, apply only to \n dom inside the Shadow
DOM. Polymer uses one of two techniques to imlement\n this feature.\n \n By d
efault, rules are prefixed with the host element tag name \n as a descendant se
lector. 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 becom
es:\n\n x-foo div {\n font-weight: bold;\n }\n \n becomes:\n\n\n Alt
ernatively, if Platform.ShadowCSS.strictStyling is set to true then \n selector
s are scoped by adding an attribute selector suffix to each\n simple selector t
hat contains the host element tag name. Each element \n in the element's Shadow
DOM template is also given the scope attribute. \n Thus, these rules match only
elements that have the scope attribute.\n For example, given a scope name of x
-foo, a rule like this:\n \n div {\n font-weight: bold;\n }\n \n b
ecomes:\n \n div[x-foo] {\n font-weight: bold;\n }\n\n Note that el
ements that are dynamically added to a scope must have the scope\n selector add
ed to them manually.\n\n * ::pseudo: These rules are converted to rules that ta
ke advantage of the\n pseudo attribute. For example, a shadowRoot like this ins
ide an x-foo\n\n <div pseudo=\"x-special\">Special</div>\n\n with a rule lik
e this:\n\n x-foo::x-special { ... }\n\n becomes:\n\n x-foo [pseudo=x-spe
cial] { ... }\n\n * ::part(): These rules are converted to rules that take adva
ntage of the\n part attribute. For example, a shadowRoot like this inside an x-
foo\n\n <div part=\"special\">Special</div>\n\n with a rule like this:\n\n
x-foo::part(special) { ... }\n\n becomes:\n\n x-foo [part=special] { ... }
\n \n Unaddressed ShadowDOM styling features:\n \n * upper/lower bound e
ncapsulation: Styles which are defined outside a\n shadowRoot should not cross
the ShadowDOM boundary and should not apply\n inside a shadowRoot.\n\n This st
yling behavior is not emulated. Some possible ways to do this that \n were reje
cted due to complexity and/or performance concerns include: (1) reset\n every p
ossible property for every possible selector for a given scope name;\n (2) re-i
mplement 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 * ::dis
tributed: This behavior is not emulated. It's often not necessary\n to style th
e contents of a specific insertion point and instead, descendants\n of the host
element can be styled selectively. Users can also create an \n extra node arou
nd an insertion point and style that node's contents\n via descendent selectors
. For example, with a shadowRoot like this:\n \n <style>\n content::-we
bkit-distributed(div) {\n background: red;\n }\n </style>\n <c
ontent></content>\n \n could become:\n \n <style>\n / *@polyfill .con
tent-container div * / \n content::-webkit-distributed(div) {\n back
ground: red;\n }\n </style>\n <div class=\"content-container\">\n
<content></content>\n </div>\n \n Note the use of @polyfill in the commen
t above a ShadowDOM specific style\n declaration. This is a directive to the st
yling shim to use the selector \n in comments in lieu of the next selector when
running under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictS
tyling: false,\n registry: {},\n // Shim styles for a given root associated wi
th a name and extendsName\n // 1. cache root styles by name\n // 2. optionally
tag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill *
/ and /* @polyfill-rule */\n // 4. shim @host and scoping\n shimStyling: funct
ion(root, name, extendsName) {\n var typeExtension = this.isTypeExtension(ext
endsName);\n // use caching to make working with styles nodes easier and to f
acilitate\n // lookup of extendee\n var def = this.registerDefinition(root
, name, extendsName);\n // find styles and apply shimming...\n if (this.st
rictStyling) {\n this.applyScopeToContent(root, name);\n }\n var cssT
ext = this.stylesToShimmedCssText(def.rootStyles, def.scopeStyles,\n name
, typeExtension);\n // provide shimmedStyle for user extensibility\n def.s
himmedStyle = cssTextToStyle(cssText);\n if (root) {\n root.shimmedStyle
= def.shimmedStyle;\n }\n // remove existing style elements\n for (var
i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]); \n i++)
{\n s.parentNode.removeChild(s);\n }\n // add style to document\n
addCssToDocument(cssText);\n },\n // apply @polyfill rules + @host and scope
shimming\n stylesToShimmedCssText: function(rootStyles, scopeStyles, name,\n
typeExtension) {\n name = name || '';\n // insert @polyfill and @polyfi
ll-rule rules into style elements\n // scoping process takes care of shimming
these\n this.insertPolyfillDirectives(rootStyles);\n this.insertPolyfillR
ules(rootStyles);\n var cssText = this.shimAtHost(scopeStyles, name, typeExte
nsion) +\n this.shimScoping(scopeStyles, name, typeExtension);\n // no
te: we only need to do rootStyles since these are unscoped.\n cssText += this
.extractPolyfillUnscopedRules(rootStyles);\n return cssText;\n },\n registe
rDefinition: function(root, name, extendsName) {\n var def = this.registry[na
me] = {\n root: root,\n name: name,\n extendsName: extendsName\n
}\n var styles = root ? root.querySelectorAll('style') : [];\n styles =
styles ? Array.prototype.slice.call(styles, 0) : [];\n def.rootStyles = styl
es;\n def.scopeStyles = def.rootStyles;\n var extendee = this.registry[def
.extendsName];\n if (extendee && (!root || root.querySelector('shadow'))) {\n
def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);\n }\n
return def;\n },\n isTypeExtension: function(extendsName) {\n return exte
ndsName && extendsName.indexOf('-') < 0;\n },\n applyScopeToContent: function(
root, name) {\n if (root) {\n // add the name attribute to each node in
root.\n Array.prototype.forEach.call(root.querySelectorAll('*'),\n
function(node) {\n node.setAttribute(name, '');\n });\n
// and template contents too\n Array.prototype.forEach.call(root.querySel
ectorAll('template'),\n function(template) {\n this.applySco
peToContent(template.content, name);\n },\n this);\n }\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 comments.\n *
\n * For example, we convert this rule:\n * \n * (comment start) @polyfil
l :host menu-item (comment end)\n * shadow::-webkit-distributed(menu-item) {\n
* \n * to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPo
lyfillDirectives: function(styles) {\n if (styles) {\n Array.prototype.f
orEach.call(styles, function(s) {\n s.textContent = this.insertPolyfillDi
rectivesInCssText(s.textContent);\n }, this);\n }\n },\n insertPolyfil
lDirectivesInCssText: function(cssText) {\n return cssText.replace(cssPolyfil
lCommentRe, function(match, p1) {\n // remove end comment delimiter and add
block start\n return p1.slice(0, -2) + '{';\n });\n },\n /*\n * Pro
cess styles to add rules which will only apply under the polyfill\n * \n * F
or example, we convert this rule:\n * \n * (comment start) @polyfill-rule :h
ost menu-item { \n * ... } (comment end)\n * \n * to this:\n * \n * sc
opeName menu-item {...}\n *\n **/\n insertPolyfillRules: function(styles) {\
n if (styles) {\n Array.prototype.forEach.call(styles, function(s) {\n
s.textContent = this.insertPolyfillRulesInCssText(s.textContent);\n }
, this);\n }\n },\n insertPolyfillRulesInCssText: function(cssText) {\n
return cssText.replace(cssPolyfillRuleCommentRe, function(match, p1) {\n //
remove end comment delimiter\n return p1.slice(0, -1);\n });\n },\n /
*\n * Process styles to add rules which will only apply under the polyfill\n
* and do not process via CSSOM. (CSSOM is destructive to rules on rare \n * o
ccasions, e.g. -webkit-calc on Safari.)\n * For example, we convert 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
extractPolyfillUnscopedRules: function(styles) {\n var cssText = '';\n if
(styles) {\n Array.prototype.forEach.call(styles, function(s) {\n cs
sText += this.extractPolyfillUnscopedRulesFromCssText(\n s.textConten
t) + '\\n\\n';\n }, this);\n }\n return cssText;\n },\n extractPoly
fillUnscopedRulesFromCssText: function(cssText) {\n var r = '', matches;\n
while (matches = cssPolyfillUnscopedRuleCommentRe.exec(cssText)) {\n r +=
matches[1].slice(0, -1) + '\\n\\n';\n }\n return r;\n },\n // form: @hos
t { .foo { declarations } }\n // becomes: scopeName.foo { declarations }\n shi
mAtHost: function(styles, name, typeExtension) {\n if (styles) {\n retur
n this.convertAtHostStyles(styles, name, typeExtension);\n }\n },\n convert
AtHostStyles: function(styles, name, typeExtension) {\n var cssText = stylesT
oCssText(styles), self = this;\n cssText = cssText.replace(hostRuleRe, functi
on(m, p1) {\n return self.scopeHostCss(p1, name, typeExtension);\n });\n
cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),\n this
.makeScopeMatcher(name, typeExtension)));\n return cssText;\n },\n scopeHos
tCss: function(cssText, name, typeExtension) {\n var self = this;\n return
cssText.replace(selectorRe, function(m, p1, p2) {\n return self.scopeHostS
elector(p1, name, typeExtension) + ' ' + p2 + '\\n\\t';\n });\n },\n // sup
ports scopig by name and [is=name] syntax\n scopeHostSelector: function(select
or, name, typeExtension) {\n var r = [], parts = selector.split(','), is = '[
is=' + name + ']';\n parts.forEach(function(p) {\n p = p.trim();\n
// selector: *|:scope -> name\n if (p.match(hostElementRe)) {\n p =
p.replace(hostElementRe, typeExtension ? is + '$1$3' :\n name + '$1$3
');\n // selector: .foo -> name.foo (OR) [bar] -> name[bar]\n } else i
f (p.match(hostFixableRe)) {\n p = typeExtension ? is + p : name + p;\n
}\n r.push(p);\n }, this);\n return r.join(', ');\n },\n // con
sider styles that do not include component name in the selector to be\n // unsc
oped and in need of promotion; \n // for convenience, also consider keyframe ru
les this way.\n findAtHostRules: function(cssRules, matcher) {\n return Arra
y.prototype.filter.call(cssRules, \n this.isHostRule.bind(this, matcher));\
n },\n isHostRule: function(matcher, cssRule) {\n return (cssRule.selectorT
ext && cssRule.selectorText.match(matcher)) ||\n (cssRule.cssRules && this.
findAtHostRules(cssRule.cssRules, matcher).length) ||\n (cssRule.type == CS
SRule.WEBKIT_KEYFRAMES_RULE);\n },\n /* Ensure styles are scoped. Pseudo-scopi
ng takes a rule like:\n * \n * .foo {... } \n * \n * and converts thi
s to\n * \n * scopeName .foo { ... }\n */\n shimScoping: function(styles
, name, typeExtension) {\n if (styles) {\n return this.convertScopedStyl
es(styles, name, typeExtension);\n }\n },\n convertScopedStyles: function(s
tyles, name, typeExtension) {\n var cssText = stylesToCssText(styles).replace
(hostRuleRe, '');\n cssText = this.insertPolyfillHostInCssText(cssText);\n
cssText = this.convertColonHost(cssText);\n cssText = this.convertPseudos(cs
sText);\n cssText = this.convertParts(cssText);\n cssText = this.convertCo
mbinators(cssText);\n var rules = cssToRules(cssText);\n if (name) {\n
cssText = this.scopeRules(rules, name, typeExtension);\n }\n return cssT
ext;\n },\n convertPseudos: function(cssText) {\n return cssText.replace(cs
sPseudoRe, ' [pseudo=$1]');\n },\n convertParts: function(cssText) {\n retu
rn cssText.replace(cssPartRe, ' [part=$1]');\n },\n /*\n * convert a rule li
ke :host(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .foo
scopeName > .bar { }\n * \n * and\n *\n * :host(.foo:host) .bar { ... }\
n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n convertColonHos
t: function(cssText) {\n // p1 = :host, p2 = contents of (), p3 rest of rule\
n return cssText.replace(cssColonHostRe, 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 if (p.match(polyfillHost)) {\n r
.push(p1 + p.replace(polyfillHost, '') + p3);\n } else {\n r
.push(p1 + p + p3 + ', ' + p + ' ' + p1 + p3);\n }\n }\n
return r.join(',');\n } else {\n return p1 + p3;\n }\n });\n
},\n /*\n * Convert ^ and ^^ combinators by replacing with space.\n */\n
convertCombinators: function(cssText) {\n return cssText.replace(/\\^\\^/g, '
').replace(/\\^/g, ' ');\n },\n // change a selector like 'div' to 'name div'
\n scopeRules: function(cssRules, name, typeExtension) {\n var cssText = '';
\n Array.prototype.forEach.call(cssRules, function(rule) {\n if (rule.se
lectorText && (rule.style && rule.style.cssText)) {\n cssText += this.sco
peSelector(rule.selectorText, name, typeExtension, \n this.strictStylin
g) + ' {\\n\\t';\n cssText += this.propertiesFromRule(rule) + '\\n}\\n\\n
';\n } else if (rule.media) {\n cssText += '@media ' + rule.media.me
diaText + ' {\\n';\n cssText += this.scopeRules(rule.cssRules, name, type
Extension);\n cssText += '\\n}\\n\\n';\n } else if (rule.cssText) {\
n cssText += rule.cssText + '\\n\\n';\n }\n }, this);\n return
cssText;\n },\n scopeSelector: function(selector, name, typeExtension, strict
) {\n var r = [], parts = selector.split(',');\n parts.forEach(function(p)
{\n p = p.trim();\n if (this.selectorNeedsScoping(p, name, typeExtens
ion)) {\n p = (strict && !p.match(polyfillHostNoCombinator)) ? \n
this.applyStrictSelectorScope(p, name) :\n this.applySimpleSelect
orScope(p, name, typeExtension);\n }\n r.push(p);\n }, this);\n
return r.join(', ');\n },\n selectorNeedsScoping: function(selector, name, typ
eExtension) {\n var re = this.makeScopeMatcher(name, typeExtension);\n ret
urn !selector.match(re);\n },\n makeScopeMatcher: function(name, typeExtension
) {\n var matchScope = typeExtension ? '\\\\[is=[\\'\"]?' + name + '[\\'\"]?\
\\\]' : name;\n return new RegExp('^(' + matchScope + ')' + selectorReSuffix,
'm');\n },\n // scope via name and [is=name]\n applySimpleSelectorScope: fun
ction(selector, name, typeExtension) {\n var scoper = typeExtension ? '[is='
+ name + ']' : name;\n if (selector.match(polyfillHostRe)) {\n selector
= selector.replace(polyfillHostNoCombinator, scoper);\n return selector.rep
lace(polyfillHostRe, scoper + ' ');\n } else {\n return scoper + ' ' + s
elector;\n }\n },\n // return a selector with [name] suffix on each simple
selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]\n
applyStrictSelectorScope: function(selector, name) {\n var splits = [' ', '>
', '+', '~'],\n scoped = selector,\n attrName = '[' + name + ']';\n
splits.forEach(function(sep) {\n var parts = scoped.split(sep);\n sco
ped = parts.map(function(p) {\n // remove :host since it should be unnece
ssary\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 insertPolyfillHostInCssTex
t: function(selector) {\n return selector.replace(hostRe, polyfillHost).repla
ce(colonHostRe,\n polyfillHost);\n },\n propertiesFromRule: function(ru
le) {\n return rule.style.cssText;\n }\n};\n\nvar hostRuleRe = /@host[^{]*{(
([^}]*?{[^{]*?}[\\s\\S]*?)+)}/gim,\n selectorRe = /([^{]*)({[\\s\\S]*?})/gim,
\n hostElementRe = /(.*)((?:\\*)|(?:\\:scope))(.*)/,\n hostFixableRe = /^[
.\\[:]/,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n cssP
olyfillCommentRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^{]*?){
/gim,\n cssPolyfillRuleCommentRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/*][^
*]*\\*+)*)\\//gim,\n cssPolyfillUnscopedRuleCommentRe = /\\/\\*\\s@polyfill-u
nscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssPseudoRe = /::(x-[^\\s{
,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host pre-pr
ocessed to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n cssColonHo
stRe = new RegExp('(' + polyfillHost +\n ')(?:\\\\((' +\n '(?:\\\\
([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\))?([^,{]*)', 'gim'),\n selectorReSu
ffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n hostRe = /@host/gim,\n colo
nHostRe = /\\:host/gim,\n /* host name without combinator */\n polyfillHos
tNoCombinator = polyfillHost + '-no-combinator',\n polyfillHostRe = new RegEx
p(polyfillHost, 'gim');\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 proc
essing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe,
'');\n }\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var sty
le = document.createElement('style');\n style.textContent = cssText;\n return
style;\n}\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssTex
t);\n document.head.appendChild(style);\n var rules = style.sheet.cssRules;\n
style.parentNode.removeChild(style);\n return rules;\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 addCssTo
Document(cssText) {\n if (cssText) {\n getSheet().appendChild(document.creat
eTextNode(cssText));\n }\n}\n\nvar sheet;\nfunction getSheet() {\n if (!sheet)
{\n sheet = document.createElement(\"style\");\n sheet.setAttribute('Shad
owCSSShim', '');\n sheet.shadowCssShim = true;\n }\n return sheet;\n}\n\n//
add polyfill stylesheet to document\nif (window.ShadowDOMPolyfill) {\n addCssT
oDocument('style { display: none !important; }\\n');\n var doc = wrap(document)
;\n var head = doc.querySelector('head');\n head.insertBefore(getSheet(), head
.childNodes[0]);\n\n document.addEventListener('DOMContentLoaded', function() {
\n if (window.HTMLImports) {\n HTMLImports.importer.preloadSelectors +=
\n ', link[rel=stylesheet]:not([nopolyfill])';\n HTMLImports.parse
r.parseGeneric = function(elt) {\n if (elt.shadowCssShim) {\n re
turn;\n }\n var style = elt;\n if (!elt.hasAttribute('nopol
yfill')) {\n if (elt.__resource) {\n style = doc.createEleme
nt('style');\n style.textContent = elt.__resource;\n // re
move links from main document\n if (elt.ownerDocument === doc) {\n
elt.parentNode.removeChild(elt);\n }\n }\n
var styles = [style];\n style.textContent = ShadowCSS.stylesToShimme
dCssText(styles, styles);\n style.shadowCssShim = true;\n }\n
// place in document\n if (style.parentNode !== head) {\n h
ead.appendChild(style);\n }\n }\n }\n });\n}\n\n// exports\nscop
e.ShadowCSS = ShadowCSS;\n\n})(window.Platform);","/*\n * Copyright 2013 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(function() {
\n\n // poor man's adapter for template.content on various platform scenarios\n
window.templateContent = window.templateContent || function(inTemplate) {\n
return inTemplate.content;\n };\n\n // so we can call wrap/unwrap without tes
ting for ShadowDOMPolyfill\n\n window.wrap = window.unwrap = function(n){\n
return n;\n }\n\n var originalCreateShadowRoot = Element.prototype.webkitCreat
eShadowRoot;\n Element.prototype.webkitCreateShadowRoot = function() {\n var
elderRoot = this.webkitShadowRoot;\n var root = originalCreateShadowRoot.cal
l(this);\n root.olderShadowRoot = elderRoot;\n root.host = this;\n Cust
omElements.watchShadow(this);\n return root;\n }\n\n Object.definePropertie
s(Element.prototype, {\n shadowRoot: {\n get: function() {\n retu
rn this.webkitShadowRoot;\n }\n },\n createShadowRoot: {\n value
: function() {\n return this.webkitCreateShadowRoot();\n }\n }\n
});\n\n window.templateContent = function(inTemplate) {\n // if MDV exists,
it may need to boostrap this template to reveal content\n if (window.HTMLTem
plateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.boot
strap(inTemplate);\n }\n // fallback when there is no Shadow DOM polyfill,
no MDV polyfill, and no\n // native template support\n if (!inTemplate.co
ntent && !inTemplate._content) {\n var frag = document.createDocumentFragme
nt();\n while (inTemplate.firstChild) {\n frag.appendChild(inTemplat
e.firstChild);\n }\n inTemplate._content = frag;\n }\n return in
Template.content || inTemplate._content;\n };\n\n})();","/*\n * Copyright 2013
The Polymer Authors. All rights reserved.\n * Use of this source code is governe
d by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(fun
ction(scope) {\n\n// Old versions of iOS do not have bind.\n\nif (!Function.prot
otype.bind) {\n Function.prototype.bind = function(scope) {\n var self = thi
s;\n var args = Array.prototype.slice.call(arguments, 1);\n return functio
n() {\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// cop
y all properties from inProps (et al) to inObj\nfunction mixin(inObj/*, inProps,
inMoreProps, ...*/) {\n var obj = inObj || {};\n for (var i = 1; i < argument
s.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 ret
urn obj;\n}\n\n// copy property inName from inSource object to inTarget object\n
function copyProperty(inName, inSource, inTarget) {\n var pd = getPropertyDescr
iptor(inSource, inName);\n Object.defineProperty(inTarget, inName, pd);\n}\n\n/
/ get property descriptor for inName on inObject, even if\n// inName exists on s
ome link in inObject's prototype chain\nfunction getPropertyDescriptor(inObject,
inName) {\n if (inObject) {\n var pd = Object.getOwnPropertyDescriptor(inOb
ject, inName);\n return pd || getPropertyDescriptor(Object.getPrototypeOf(inO
bject), inName);\n }\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platf
orm);","// 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 complian
ce with the License.\n// You may obtain a copy of the License at\n//\n// htt
p://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable la
w or agreed to in writing, software\n// distributed under the License is distrib
uted on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, ei
ther express or implied.\n// See the License for the specific language governing
permissions and\n// limitations under the License.\n\n(function(scope) {\n\n '
use strict';\n\n // polyfill DOMTokenList\n // * add/remove: allow these metho
ds to take multiple classNames\n // * toggle: add a 2nd argument which forces t
he given state rather\n // than toggling.\n\n var add = DOMTokenList.prototyp
e.add;\n var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.
add = function() {\n for (var i = 0; i < arguments.length; i++) {\n add.
call(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = functi
on() {\n for (var i = 0; i < arguments.length; i++) {\n remove.call(this
, arguments[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.proto
type.switch = function(oldName, newName) {\n oldName && this.remove(oldName);
\n newName && this.add(newName);\n };\n\n // add array() to NodeList, Named
NodeMap, HTMLCollection\n\n var ArraySlice = function() {\n return Array.pro
totype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || w
indow.MozNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n nam
edNodeMap.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = Arra
ySlice;\n\n // polyfill performance.now\n\n if (!window.performance) {\n va
r start = Date.now();\n // only at millisecond precision\n window.performa
nce = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for
requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window.requ
estAnimationFrame = (function() {\n var nativeRaf = window.webkitRequestAni
mationFrame ||\n window.mozRequestAnimationFrame;\n\n return nativeR
af ?\n function(callback) {\n return nativeRaf(function() {\n
callback(performance.now());\n });\n } :\n funct
ion( callback ){\n return window.setTimeout(callback, 1000 / 60);\n
};\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window.canc
elAnimationFrame = (function() {\n return window.webkitCancelAnimationFram
e ||\n window.mozCancelAnimationFrame ||\n function(id) {\n
clearTimeout(id);\n };\n })();\n }\n\n // TODO(sorvell): workarou
nd for bug:\n // https://code.google.com/p/chromium/issues/detail?id=229142\n
// remove when this bug is addressed\n // give main document templates a base t
hat allows them to fetch eagerly\n // resolved paths relative to the main docum
ent\n var template = document.createElement('template');\n var base = document
.createElement('base');\n base.href = document.baseURI;\n template.content.own
erDocument.appendChild(base);\n \n\n // utility\n\n function createDOM(inTagO
rNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'string' ?\n
document.createElement(inTagOrNode) : inTagOrNode.cloneNode(true);\n dom.i
nnerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttrs) {\n
dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\n }\n\n var
polymer = function(name, dictionary) {\n window.addEventListener('WebComponen
tsReady', function() {\n // avoid re-entrancy. If polymer is not redefined
by this time, do nothing\n if (window.Polymer !== polymer) {\n Polym
er(name, dictionary);\n } else {\n console.warn('You tried to use po
lymer without loading it first. To ' +\n 'load polymer, <link rel=\"i
mport\" href=\"' + \n 'components/polymer/plymer.html\">');\n }\
n });\n }\n\n window.Polymer = polymer\n // exports\n\n scope.createDOM =
createDOM;\n\n})(window.Platform);\n","/*\n * Copyright 2013 The Polymer Author
s. 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// poor man's adapter
for template.content on various platform scenarios\nwindow.templateContent = win
dow.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 (!inspect
or) {\n inspector = window.open('', 'ShadowDOM Inspector', null, true);\n
inspector.document.write(inspectorHTML);\n //inspector.document.close()
;\n inspector.api = {\n shadowize: shadowize\n };\n }\n i
nspect(inNode || wrap(document.body), inProxy);\n };\n\n var inspectorHTML = [
\n '<!DOCTYPE html>',\n '<html>',\n ' <head>',\n ' <title>Shadow
DOM 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 ' backg
round-color: #f1f1f1;',\n ' padding: 4px 6px;',\n ' border
-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 '</html>
'\n ].join('\\n');\n \n var crumbs = [];\n\n var displayCrumbs = function()
{\n // alias our document\n var d = inspector.document;\n // get crumbb
ar\n var cb = d.querySelector('#crumbs');\n // clear crumbs\n cb.textCo
ntent = '';\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.textContent =
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 drillable
= [];\n // memoize our crumb proxy\n var proxy = inProxy || inNode;\n
crumbs.push(proxy);\n // update crumbs\n displayCrumbs();\n // reflect
local tree\n d.body.querySelector('#tree').innerHTML =\n '<pre>' + out
put(inNode, inNode.childNodes) + '</pre>';\n };\n\n var forEach = Array.protot
ype.forEach.call.bind(Array.prototype.forEach);\n\n var blacklisted = {STYLE:1,
SCRIPT:1, \"#comment\": 1, TEMPLATE: 1};\n var blacklist = function(inNode) {\
n return blacklisted[inNode.nodeName];\n };\n\n var output = function(inNod
e, inChildNodes, inIndent) {\n if (blacklist(inNode)) {\n return '';\n
}\n var indent = inIndent || '';\n if (inNode.localName || inNode.nodeTy
pe == 11) {\n var name = inNode.localName || 'shadow-root';\n //inChil
dNodes = ShadowDOM.localNodes(inNode);\n var info = indent + describe(inNod
e);\n // if only textNodes\n // TODO(sjmiles): make correct for Shadow
DOM\n /*if (!inNode.children.length && inNode.localName !== 'content' && in
Node.localName !== 'shadow') {\n info += catTextContent(inChildNodes);\n
} else*/ {\n // TODO(sjmiles): native <shadow> has no reference to i
ts projection\n if (name == 'content' /*|| name == 'shadow'*/) {\n
inChildNodes = inNode.getDistributedNodes();\n }\n info += '<br
/>';\n var ind = indent + ' ';\n forEach(inChildNodes,
function(n) {\n info += output(n, n.childNodes, ind);\n });\n
info += indent;\n }\n if (!({br:1}[name])) {\n info += '<t
ag></' + name + '></tag>';\n info += '<br/>';\n }\n } else
{\n var text = inNode.textContent.trim();\n info = text ? indent + '\"
' + text + '\"' + '<br/>' : '';\n }\n return info;\n };\n\n var catTextC
ontent = function(inChildNodes) {\n var info = '';\n forEach(inChildNodes,
function(n) {\n info += n.textContent.trim();\n });\n return info;\n
};\n\n var drillable = [];\n\n var describe = function(inNode) {\n var ta
g = '<tag>' + '<';\n var name = inNode.localName || 'shadow-root';\n if
(inNode.webkitShadowRoot || inNode.shadowRoot) {\n tag += ' <button idx=\"
' + drillable.length +\n '\" onclick=\"api.shadowize.call(this)\">' + nam
e + '</button>';\n drillable.push(inNode);\n } else {\n tag += name
|| 'shadow-root';\n }\n if (inNode.attributes) {\n forEach(inNode.at
tributes, function(a) {\n tag += ' ' + a.name + (a.value ? '=\"' + a.valu
e + '\"' : '');\n });\n }\n tag += '>'+ '</tag>';\n return tag;
\n };\n\n // remote api\n\n shadowize = function() {\n var idx = Number(th
is.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(this);
\n }\n };\n \n // export\n \n scope.output = output;\n \n})(window.Insp
ector);\n\n\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 f
ound in the LICENSE file.\n */\n(function(scope) {\n /*\n Shim :unresolved v
ia an attribute unresolved.\n TODO(sorvell): This is currently done once when
the first\n round of elements are upgraded. This is incorrect, and it will\n
need to be done dynamically.\n The 'resolved' attribute is experimental a
nd may be removed.\n */\n var TRANSITION_TIME = 0.2;\n var UNRESOLVED = 'unre
solved';\n var RESOLVED = 'resolved';\n var UNRESOLVED_SELECTOR = '[' + UNRESO
LVED + ']';\n var RESOLVED_SELECTOR = '[' + RESOLVED + ']';\n var style = docu
ment.createElement('style');\n \n style.textContent = UNRESOLVED_SELECTOR + '
{ ' +\n 'opacity: 0; display: block; overflow: hidden; } \\n' +\n RESO
LVED_SELECTOR + '{ display: block; overflow: hidden;\\n' +\n '-webkit-tran
sition: opacity ' + TRANSITION_TIME + 's; ' +\n 'transition: opacity ' + TR
ANSITION_TIME +'s; }\\n';\n var head = document.querySelector('head');\n head.
insertBefore(style, head.firstChild);\n\n // remove unresolved and apply resolv
ed class\n function resolveElements() {\n requestAnimationFrame(function() {
\n var nodes = document.querySelectorAll(UNRESOLVED_SELECTOR);\n for (
var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\n n.removeAttri
bute(UNRESOLVED);\n n.setAttribute(RESOLVED, '');\n }\n\n // NO
TE: depends on transition end event to remove 'resolved' class.\n if (nodes
.length) {\n var removeResolved = function() {\n for (var i=0, l
=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\n n.removeAttribute(R
ESOLVED);\n }\n document.body.removeEventListener(endEvent, re
moveResolved, false);\n }\n document.body.addEventListener(endEven
t, removeResolved, false);\n };\n\n });\n }\n\n // determine transitio
n end event\n var endEvent = (document.documentElement.style.webkitTransition !
== undefined) ?\n 'webkitTransitionEnd' : 'transitionend';\n\n // hookup a
uto-unveiling\n window.addEventListener('WebComponentsReady', resolveElements);
\n\n})(Platform);\n","/*\n * Copyright 2013 The Polymer Authors. All rights rese
rved.\n * Use of this source code is governed by a BSD-style\n * license that ca
n be found in the LICENSE file.\n */\n\n(function(scope) {\n\nif (!scope) {\n s
cope = window.HTMLImports = {flags:{}};\n}\n\n// imports\n\nvar xhr = scope.xhr;
\n\n// importer\n\nvar IMPORT_LINK_TYPE = 'import';\nvar STYLE_LINK_TYPE = 'styl
esheet';\n\n// highlander object represents a primary document (the argument to
'load')\n// at the root of a tree of documents\n\n// for any document, importer:
\n// - loads any linked documents (with deduping), modifies paths and feeds them
back into importer\n// - loads text of external script tags\n// - loads text of
external style tags inside of <element>, modifies paths\n\n// when importer 'mo
difies paths' in a document, this includes\n// - href/src/action in node attribu
tes\n// - paths in inline stylesheets\n// - all content inside templates\n\n// l
inked style sheets in an import have their own path fixed up when their containi
ng import modifies paths\n// linked style sheets in an <element> are loaded, and
the content gets path fixups\n// inline style sheets get path fixups when their
containing import modifies paths\n\nvar loader;\n\nvar importer = {\n document
s: {},\n cache: {},\n preloadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE
+ ']',\n 'element link[rel=' + STYLE_LINK_TYPE + ']',\n 'template',\n '
script[src]:not([type])',\n 'script[src][type=\"text/javascript\"]'\n ].join
(','),\n loader: function(next) {\n // construct a loader instance\n load
er = new Loader(importer.loaded, next);\n // alias the importer cache (for de
bugging)\n loader.cache = importer.cache;\n return loader;\n },\n load:
function(doc, next) {\n // get a loader instance from the factory\n loader
= importer.loader(next);\n // add nodes from document into loader queue\n
importer.preload(doc);\n },\n preload: function(doc) {\n // all preloadabl
e nodes in inDocument\n var nodes = doc.querySelectorAll(importer.preloadSele
ctors);\n // from the main document, only load imports\n // TODO(sjmiles):
do this by altering the selector list instead\n nodes = this.filterMainDocum
entNodes(doc, nodes);\n // extra link nodes from templates, filter templates
out of the nodes list\n nodes = this.extractTemplateNodes(nodes);\n // add
these nodes to loader's queue\n loader.addNodes(nodes);\n },\n filterMainD
ocumentNodes: function(doc, nodes) {\n if (doc === document) {\n nodes =
Array.prototype.filter.call(nodes, function(n) {\n return !isScript(n);\
n });\n }\n return nodes;\n },\n extractTemplateNodes: function(nod
es) {\n var extra = [];\n nodes = Array.prototype.filter.call(nodes, funct
ion(n) {\n if (n.localName === 'template') {\n if (n.content) {\n
var l$ = n.content.querySelectorAll('link[rel=' + STYLE_LINK_TYPE +\n
']');\n if (l$.length) {\n extra = extra.concat(Arra
y.prototype.slice.call(l$, 0));\n }\n }\n return false;\n
}\n return true;\n });\n if (extra.length) {\n nodes = nod
es.concat(extra);\n }\n return nodes;\n },\n loaded: function(url, elt,
resource) {\n if (isDocumentLink(elt)) {\n var document = importer.docum
ents[url];\n // if we've never seen a document at this url\n if (!docu
ment) {\n // generate an HTMLDocument from data\n document = makeD
ocument(resource, url);\n // resolve resource paths relative to host docu
ment\n path.resolvePathsInHTML(document);\n // cache document\n
importer.documents[url] = document;\n // add nodes from this documen
t to the loader queue\n importer.preload(document);\n }\n // st
ore import record\n elt.import = document;\n elt.import.href = url;\n
elt.import.ownerNode = elt;\n // store document resource\n elt.co
ntent = resource = document;\n }\n // store generic resource\n // TODO(
sorvell): fails for nodes inside <template>.content\n // see https://code.goo
gle.com/p/chromium/issues/detail?id=249381.\n elt.__resource = resource;\n
// css path fixups\n if (isStylesheetLink(elt)) {\n path.resolvePathsIn
Stylesheet(elt);\n }\n }\n};\n\nfunction isDocumentLink(elt) {\n return isL
inkRel(elt, IMPORT_LINK_TYPE);\n}\n\nfunction isStylesheetLink(elt) {\n return
isLinkRel(elt, STYLE_LINK_TYPE);\n}\n\nfunction isLinkRel(elt, rel) {\n return
elt.localName === 'link' && elt.getAttribute('rel') === rel;\n}\n\nfunction isSc
ript(elt) {\n return elt.localName === 'script';\n}\n\nfunction makeDocument(re
source, url) {\n // create a new HTML document\n var doc = resource;\n if (!(
doc instanceof Document)) {\n doc = document.implementation.createHTMLDocumen
t(IMPORT_LINK_TYPE);\n }\n // cache the new document's source url\n doc._URL
= url;\n // establish a relative path via <base>\n var base = doc.createElemen
t('base');\n base.setAttribute('href', document.baseURI || document.URL);\n do
c.head.appendChild(base);\n // install HTML last as it may trigger CustomElemen
t upgrades\n // TODO(sjmiles): problem wrt to template boostrapping below,\n /
/ template bootstrapping must (?) come before element upgrade\n // but we canno
t bootstrap templates until they are in a document\n // which is too late\n if
(!(resource instanceof Document)) {\n // install html\n doc.body.innerHTM
L = resource;\n }\n // TODO(sorvell): ideally this code is not aware of Templa
te polyfill,\n // but for now the polyfill needs help to bootstrap these templa
tes\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n H
TMLTemplateElement.bootstrap(doc);\n }\n return doc;\n}\n\nvar Loader = functi
on(onLoad, onComplete) {\n this.onload = onLoad;\n this.oncomplete = onComplet
e;\n this.inflight = 0;\n this.pending = {};\n this.cache = {};\n};\n\nLoader
.prototype = {\n addNodes: function(nodes) {\n // number of transactions to
complete\n this.inflight += nodes.length;\n // commence transactions\n
forEach(nodes, this.require, this);\n // anything to do?\n this.checkDone(
);\n },\n require: function(elt) {\n var url = path.nodeUrl(elt);\n // e
nsure we have a standard url that can be used\n // reliably for deduping.\n
url = path.makeAbsUrl(url);\n // TODO(sjmiles): ad-hoc\n elt.__nodeUrl =
url;\n // deduplication\n if (!this.dedupe(url, elt)) {\n // fetch t
his 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 retu
rn true;\n }\n if (this.cache[url]) {\n // complete load using cache
data\n this.onload(url, elt, loader.cache[url]);\n // finished this tr
ansaction\n this.tail();\n // don't need fetch\n return true;\n
}\n // first node waiting for inUrl\n this.pending[url] = [elt];\n //
need fetch (not a dupe)\n return false;\n },\n fetch: function(url, elt) {
\n var receiveXhr = function(err, resource) {\n this.receive(url, elt, e
rr, resource);\n }.bind(this);\n xhr.load(url, receiveXhr);\n // TODO(s
orvell): blocked on\n // https://code.google.com/p/chromium/issues/detail?id=
257221\n // xhr'ing for a document makes scripts in imports runnable; otherwi
se\n // they are not; however, it requires that we have doctype=html in\n
// the import which is unacceptable. This is only needed on Chrome\n // to av
oid the bug above.\n /*\n if (isDocumentLink(elt)) {\n xhr.loadDocume
nt(url, receiveXhr);\n } else {\n xhr.load(url, receiveXhr);\n }\n
*/\n },\n receive: function(url, elt, err, resource) {\n if (!err) {\n
loader.cache[url] = resource;\n }\n loader.pending[url].forEach(function
(e) {\n if (!err) {\n this.onload(url, e, resource);\n }\n
this.tail();\n }, this);\n loader.pending[url] = null;\n },\n tail: fun
ction() {\n --this.inflight;\n this.checkDone();\n },\n checkDone: funct
ion() {\n if (!this.inflight) {\n this.oncomplete();\n }\n }\n};\n\n
var URL_ATTRS = ['href', 'src', 'action'];\nvar URL_ATTRS_SELECTOR = '[' + URL_A
TTRS.join('],[') + ']';\nvar URL_TEMPLATE_SEARCH = '{{.*}}';\n\nvar path = {\n
nodeUrl: function(node) {\n return path.resolveUrl(path.documentURL, path.hre
fOrSrc(node));\n },\n hrefOrSrc: function(node) {\n return node.getAttribut
e(\"href\") || node.getAttribute(\"src\");\n },\n documentUrlFromNode: functio
n(node) {\n return path.getDocumentUrl(node.ownerDocument || node);\n },\n
getDocumentUrl: function(doc) {\n var url = doc &&\n // TODO(sjmiles):
ShadowDOMPolyfill intrusion\n (doc._URL || (doc.impl && doc.impl._URL)\n
|| doc.baseURI || doc.URL)\n || '';\n // take only
the left side if there is a #\n return url.split('#')[0];\n },\n resolveUr
l: function(baseUrl, url) {\n if (this.isAbsUrl(url)) {\n return url;\n
}\n return this.compressUrl(this.urlToPath(baseUrl) + url);\n },\n resol
veRelativeUrl: function(baseUrl, url) {\n if (this.isAbsUrl(url)) {\n re
turn url;\n }\n return this.makeDocumentRelPath(this.resolveUrl(baseUrl, u
rl));\n },\n isAbsUrl: function(url) {\n return /(^data:)|(^http[s]?:)|(^\\
/)/.test(url);\n },\n urlToPath: function(baseUrl) {\n var parts = baseUrl.
split(\"/\");\n parts.pop();\n parts.push('');\n return parts.join(\"/\
");\n },\n compressUrl: function(url) {\n var search = '';\n var searchP
os = url.indexOf('?');\n // query string is not part of the path\n if (sea
rchPos > -1) {\n search = url.substring(searchPos);\n url = url.substr
ing(searchPos, 0);\n }\n var parts = url.split('/');\n for (var i=0, p;
i<parts.length; i++) {\n p = parts[i];\n if (p === '..') {\n p
arts.splice(i-1, 2);\n i -= 2;\n }\n }\n return parts.join('/'
) + search;\n },\n makeDocumentRelPath: function(url) {\n // test url again
st document to see if we can construct a relative path\n path.urlElt.href = u
rl;\n // IE does not set host if same as document\n if (!path.urlElt.host
|| \n (path.urlElt.host === window.location.host &&\n path.urlElt.
protocol === window.location.protocol)) {\n return this.makeRelPath(path.do
cumentURL, path.urlElt.href);\n } else {\n return url;\n }\n },\n /
/ make a relative path from source to target\n makeRelPath: function(source, ta
rget) {\n var s = source.split('/');\n var t = target.split('/');\n whi
le (s.length && 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
var r = t.join('/');\n return r;\n },\n makeAbsUrl: function(url) {\n p
ath.urlElt.href = url;\n return path.urlElt.href;\n },\n resolvePathsInHTML
: function(root, url) {\n url = url || path.documentUrlFromNode(root)\n pa
th.resolveAttributes(root, url);\n path.resolveStyleElts(root, url);\n //
handle template.content\n var templates = root.querySelectorAll('template');\
n if (templates) {\n forEach(templates, function(t) {\n if (t.con
tent) {\n path.resolvePathsInHTML(t.content, url);\n }\n })
;\n }\n },\n resolvePathsInStylesheet: function(sheet) {\n var docUrl =
path.nodeUrl(sheet);\n sheet.__resource = path.resolveCssText(sheet.__resourc
e, docUrl);\n },\n resolveStyleElts: function(root, url) {\n var styles = r
oot.querySelectorAll('style');\n if (styles) {\n forEach(styles, functio
n(style) {\n style.textContent = path.resolveCssText(style.textContent, u
rl);\n });\n }\n },\n resolveCssText: function(cssText, baseUrl) {\n
return cssText.replace(/url\\([^)]*\\)/g, function(match) {\n // find the
url path, ignore quotes in url string\n var urlPath = match.replace(/[\"']
/g, \"\").slice(4, -1);\n urlPath = path.resolveRelativeUrl(baseUrl, urlPat
h);\n return \"url(\" + urlPath + \")\";\n });\n },\n resolveAttribute
s: function(root, url) {\n // search for attributes that host urls\n var n
odes = root && root.querySelectorAll(URL_ATTRS_SELECTOR);\n if (nodes) {\n
forEach(nodes, function(n) {\n this.resolveNodeAttributes(n, url);\n
}, this);\n }\n },\n resolveNodeAttributes: function(node, url) {\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 = path.resolveRelativeUrl(url, attr.value);\n attr.
value = urlPath;\n }\n });\n }\n};\n\npath.documentURL = path.getDocume
ntUrl(document);\npath.urlElt = document.createElement('a');\n\nxhr = xhr || {\n
async: true,\n ok: function(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 reques
t = new XMLHttpRequest();\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 (reque
st.readyState === 4) {\n next.call(nextContext, !xhr.ok(request) && reque
st,\n request.response || request.responseText, url);\n }\n }
);\n request.send();\n return request;\n },\n loadDocument: function(url
, next, nextContext) {\n this.load(url, next, nextContext).responseType = 'do
cument';\n }\n};\n\nvar forEach = Array.prototype.forEach.call.bind(Array.proto
type.forEach);\n\n// expose _currentScript\nObject.defineProperty(document, '_cu
rrentScript', {\n get: function() {\n return HTMLImports.currentScript || do
cument.currentScript;\n },\n writeable: true,\n configurable: true\n});\n\n\n
// exports\n\nscope.path = path;\nscope.xhr = xhr;\nscope.importer = importer;\n
scope.getDocumentUrl = path.getDocumentUrl;\nscope.IMPORT_LINK_TYPE = IMPORT_LIN
K_TYPE;\n\n})(window.HTMLImports);\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 file.\n */\n\n(function(scope) {\n\nv
ar IMPORT_LINK_TYPE = 'import';\n\n// highlander object for parsing a document t
ree\n\nvar importParser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE
+ ']',\n 'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n
'script[type=\"text/javascript\"]'\n ],\n map: {\n link: 'parseLink',\n
script: 'parseScript',\n style: 'parseGeneric'\n },\n // TODO(sorvell): b
ecause dynamic imports are not supported, users are \n // writing code like in
https://github.com/Polymer/HTMLImports/issues/40\n // as a workaround. The code
here checking for the existence of\n // document.scripts is here only to suppo
rt the workaround.\n parse: function(document) {\n if (!document.__importPar
sed) {\n // only parse once\n document.__importParsed = true;\n /
/ all parsable elements in inDocument (depth-first pre-order traversal)\n v
ar elts = document.querySelectorAll(importParser.selectors);\n // memoize t
he number of scripts\n var scriptCount = document.scripts ? document.script
s.length : 0;\n // for each parsable node type, call the mapped parsing met
hod\n for (var i=0, e; i<elts.length && (e=elts[i]); i++) {\n import
Parser[importParser.map[e.localName]](e);\n // if a script was injected,
we need to requery our nodes\n // TODO(sjmiles): injecting nodes above th
e current script will\n // result in errors\n if (document.scripts
&& scriptCount !== document.scripts.length) {\n // memoize the new cou
nt\n scriptCount = document.scripts.length;\n // ensure we hav
e any new nodes in our list\n elts = document.querySelectorAll(importPa
rser.selectors);\n }\n }\n }\n },\n parseLink: function(linkElt
) {\n if (isDocumentLink(linkElt)) {\n if (linkElt.import) {\n im
portParser.parse(linkElt.import);\n // fire load event\n linkElt.d
ispatchEvent(new CustomEvent('load'));\n }\n } else {\n this.parseG
eneric(linkElt);\n }\n },\n parseGeneric: function(elt) {\n if (needsMai
nDocumentContext(elt)) {\n document.head.appendChild(elt);\n }\n },\n
parseScript: function(scriptElt) {\n if (needsMainDocumentContext(scriptElt))
{\n // acquire code to execute\n var code = (scriptElt.__resource ||
scriptElt.textContent).trim();\n if (code) {\n // calculate source m
ap hint\n var moniker = scriptElt.__nodeUrl;\n if (!moniker) {\n
var moniker = scope.path.documentUrlFromNode(scriptElt);\n // t
here could be more than one script this url\n var tag = '[' + Math.floo
r((Math.random()+1)*1000) + ']';\n // TODO(sjmiles): Polymer hack, shou
ld be pluggable if we need to allow \n // this sort of thing\n
var matches = code.match(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches
&& matches[1] || tag;\n // tag the moniker\n moniker += '/' +
tag + '.js';\n }\n // source map hint\n code += \"\\n//# so
urceURL=\" + moniker + \"\\n\";\n // evaluate the code\n scope.cur
rentScript = scriptElt;\n eval.call(window, code);\n scope.current
Script = null;\n }\n }\n }\n};\n\nvar forEach = Array.prototype.forEach
.call.bind(Array.prototype.forEach);\n\nfunction isDocumentLink(elt) {\n return
elt.localName === 'link'\n && elt.getAttribute('rel') === IMPORT_LINK_TYPE
;\n}\n\nfunction needsMainDocumentContext(node) {\n // nodes can be moved to th
e main document:\n // if they are in a tree but not in the main document and no
t children of <element>\n return node.parentNode && !inMainDocument(node) \n
&& !isElementElementChild(node);\n}\n\nfunction inMainDocument(elt) {\n retu
rn elt.ownerDocument === document ||\n // TODO(sjmiles): ShadowDOMPolyfill in
trusion\n elt.ownerDocument.impl === document;\n}\n\nfunction isElementElemen
tChild(elt) {\n return elt.parentNode && elt.parentNode.localName === 'element'
;\n}\n\n// exports\n\nscope.parser = importParser;\n\n})(HTMLImports);","/*\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\n// bootstrap\n\n// IE shim for CustomEvent\nif (typeof
window.CustomEvent !== 'function') {\n window.CustomEvent = function(inType) {\
n var e = document.createEvent('HTMLEvents');\n e.initEvent(inType, true
, true);\n return e;\n };\n}\n\nfunction bootstrap() {\n // preload docume
nt resource trees\n HTMLImports.importer.load(document, function() {\n HTMLI
mports.parser.parse(document);\n HTMLImports.ready = true;\n HTMLImports.r
eadyTime = new Date().getTime();\n // send HTMLImportsLoaded when finished\n
document.dispatchEvent(\n new CustomEvent('HTMLImportsLoaded', {bubbles:
true})\n );\n });\n}\n\n// Allow for asynchronous loading when minified\n//
readyState 'interactive' is expected when loaded with 'async' or 'defer' attrib
utes\n// note: use interactive state only when not on IE since it can become \n/
/ interactive early (see https://github.com/mobify/mobifyjs/issues/136)\nif (doc
ument.readyState === 'complete' ||\n (document.readyState === 'interactive' &
& !window.attachEvent)) {\n bootstrap();\n} else {\n window.addEventListener('
DOMContentLoaded', bootstrap);\n}\n\n})();\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 file.\n */\n\n(function(glob
al) {\n\n var registrationsTable = new WeakMap();\n\n // We use setImmediate o
r postMessage for our future callback.\n var setImmediate = window.msSetImmedia
te;\n\n // Use post message to emulate setImmediate.\n if (!setImmediate) {\n
var setImmediateQueue = [];\n var sentinel = String(Math.random());\n w
indow.addEventListener('message', function(e) {\n if (e.data === sentinel)
{\n var queue = setImmediateQueue;\n setImmediateQueue = [];\n
queue.forEach(function(func) {\n func();\n });\n }\n
});\n setImmediate = function(func) {\n setImmediateQueue.push(func);\n
window.postMessage(sentinel, '*');\n };\n }\n\n // This is used to en
sure that we never schedule 2 callas to setImmediate\n var isScheduled = false;
\n\n // Keep track of observers that needs to be notified next time.\n var sch
eduledObservers = [];\n\n /**\n * Schedules |dispatchCallback| to be called i
n the future.\n * @param {MutationObserver} observer\n */\n function schedu
leCallback(observer) {\n scheduledObservers.push(observer);\n if (!isSched
uled) {\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.spec.whatwg.org/#mutation-o
bservers\n\n isScheduled = false; // Used to allow a new setImmediate call ab
ove.\n\n var observers = scheduledObservers;\n scheduledObservers = [];\n
// Sort observers based on their creation UID (incremental).\n observers.s
ort(function(o1, o2) {\n return o1.uid_ - o2.uid_;\n });\n\n var anyN
onEmpty = false;\n observers.forEach(function(observer) {\n\n // 2.1, 2.
2\n var queue = observer.takeRecords();\n // 2.3. Remove all transient
registered observers whose observer is mo.\n removeTransientObserversFor(o
bserver);\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 removeTransi
entObserversFor(observer) {\n observer.nodes_.forEach(function(node) {\n
var registrations = registrationsTable.get(node);\n if (!registrations)\n
return;\n registrations.forEach(function(registration) {\n if
(registration.observer === observer)\n registration.removeTransientObs
ervers();\n });\n });\n }\n\n /**\n * This function is used for the
\"For each registered observer observer (with\n * observer's options as option
s) 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 c
hecked to ensure that the callback is called\n * correctly.\n *\n * @param
{Node} target\n * @param {function(MutationObserverInit):MutationRecord} call
back\n */\n function forEachAncestorAndObserverEnqueueRecord(target, callback
) {\n for (var node = target; node; node = node.parentNode) {\n var regi
strations = registrationsTable.get(node);\n\n if (registrations) {\n
for (var j = 0; j < registrations.length; j++) {\n var registration =
registrations[j];\n var options = registration.options;\n\n //
Only target ignores subtree.\n if (node !== target && !options.subtree
)\n continue;\n\n var record = callback(options);\n
if (record)\n registration.enqueue(record);\n }\n }\n
}\n }\n\n var uidCounter = 0;\n\n /**\n * The class that maps to the DOM M
utationObserver interface.\n * @param {Function} callback.\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 observe: function(target, optio
ns) {\n target = wrapIfNeeded(target);\n\n // 1.1\n if (!options.
childList && !options.attributes && !options.characterData ||\n\n // 1.
2\n options.attributeOldValue && !options.attributes ||\n\n //
1.3\n options.attributeFilter && options.attributeFilter.length &&\n
!options.attributes ||\n\n // 1.4\n options.charac
terDataOldValue && !options.characterData) {\n\n throw new SyntaxError();
\n }\n\n var registrations = registrationsTable.get(target);\n if
(!registrations)\n registrationsTable.set(target, registrations = []);\n
\n // 2\n // If target's list of registered observers already includes
a registered\n // observer associated with the context object, replace tha
t registered\n // observer's options with options.\n var registration;
\n for (var i = 0; i < registrations.length; i++) {\n if (registrati
ons[i].observer === this) {\n registration = registrations[i];\n
registration.removeListeners();\n registration.options = options;\n
break;\n }\n }\n\n // 3.\n // Otherwise, add a ne
w registered observer to target's list of registered\n // observers with th
e context object as the observer and options as the\n // options, and add t
arget to context object's list of nodes on which it\n // is registered.\n
if (!registration) {\n registration = new Registration(this, target,
options);\n registrations.push(registration);\n this.nodes_.push(t
arget);\n }\n\n registration.addListeners();\n },\n\n disconnect
: function() {\n this.nodes_.forEach(function(node) {\n var registra
tions = registrationsTable.get(node);\n for (var i = 0; i < registrations
.length; i++) {\n var registration = registrations[i];\n if (r
egistration.observer === this) {\n registration.removeListeners();\n
registrations.splice(i, 1);\n // Each node can only have o
ne registered observer associated with\n // this observer.\n
break;\n }\n }\n }, this);\n this.records_ = [];\n
},\n\n takeRecords: function() {\n var copyOfRecords = this.records_;
\n this.records_ = [];\n return copyOfRecords;\n }\n };\n\n /**\n
* @param {string} type\n * @param {Node} target\n * @constructor\n */\n
function MutationRecord(type, target) {\n this.type = type;\n this.targe
t = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.pr
eviousSibling = null;\n this.nextSibling = null;\n this.attributeName = nu
ll;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n fu
nction copyMutationRecord(original) {\n var record = new MutationRecord(origi
nal.type, original.target);\n record.addedNodes = original.addedNodes.slice()
;\n record.removedNodes = original.removedNodes.slice();\n record.previous
Sibling = original.previousSibling;\n record.nextSibling = original.nextSibli
ng;\n record.attributeName = original.attributeName;\n record.attributeNam
espace = original.attributeNamespace;\n record.oldValue = original.oldValue;\
n return record;\n };\n\n // We keep track of the two (possibly one) record
s used in a single mutation.\n var currentRecord, recordWithOldValue;\n\n /**\
n * Creates a record without |oldValue| and caches it as |currentRecord| for\n
* later use.\n * @param {string} oldValue\n * @return {MutationRecord}\n
*/\n function getRecord(type, target) {\n return currentRecord = new Mutat
ionRecord(type, target);\n }\n\n /**\n * Gets or creates a record with |oldV
alue| based in the |currentRecord|\n * @param {string} oldValue\n * @return
{MutationRecord}\n */\n function getRecordWithOldValue(oldValue) {\n if (r
ecordWithOldValue)\n return recordWithOldValue;\n recordWithOldValue = c
opyMutationRecord(currentRecord);\n recordWithOldValue.oldValue = oldValue;\n
return recordWithOldValue;\n }\n\n function clearRecords() {\n currentR
ecord = recordWithOldValue = undefined;\n }\n\n /**\n * @param {MutationReco
rd} record\n * @return {boolean} Whether the record represents a record from t
he current\n * mutation event.\n */\n function recordRepresentsCurrentMutat
ion(record) {\n return record === recordWithOldValue || record === currentRec
ord;\n }\n\n /**\n * Selects which record, if any, to replace the last recor
d in the queue.\n * This returns |null| if no record should be replaced.\n *
\n * @param {MutationRecord} lastRecord\n * @param {MutationRecord} newRecor
d\n * @param {MutationRecord}\n */\n function selectRecord(lastRecord, newR
ecord) {\n if (lastRecord === newRecord)\n return lastRecord;\n\n //
Check if the the record we are adding represents the same record. If\n // so,
we keep the one with the oldValue in it.\n if (recordWithOldValue && recordR
epresentsCurrentMutation(lastRecord))\n return recordWithOldValue;\n\n r
eturn null;\n }\n\n /**\n * Class used to represent a registered observer.\n
* @param {MutationObserver} observer\n * @param {Node} target\n * @param
{MutationObserverInit} 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 enqueue: function(record) {\n var re
cords = this.observer.records_;\n var length = records.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 if (records.length > 0) {\n
var lastRecord = records[length - 1];\n var recordToReplaceLast =
selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n
records[length - 1] = recordToReplaceLast;\n return;\n }\n
} else {\n scheduleCallback(this.observer);\n }\n\n records[l
ength] = record;\n },\n\n addListeners: function() {\n this.addListen
ers_(this.target);\n },\n\n addListeners_: function(node) {\n var opt
ions = this.options;\n if (options.attributes)\n node.addEventListen
er('DOMAttrModified', this, true);\n\n if (options.characterData)\n
node.addEventListener('DOMCharacterDataModified', this, true);\n\n if (opti
ons.childList)\n node.addEventListener('DOMNodeInserted', this, true);\n\
n if (options.childList || options.subtree)\n node.addEventListener(
'DOMNodeRemoved', this, true);\n },\n\n removeListeners: 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 (option
s.characterData)\n node.removeEventListener('DOMCharacterDataModified', t
his, true);\n\n if (options.childList)\n node.removeEventListener('D
OMNodeInserted', this, true);\n\n if (options.childList || options.subtree)
\n node.removeEventListener('DOMNodeRemoved', this, true);\n },\n\n
/**\n * Adds a transient observer on node. The transient observer gets remo
ved\n * next time we deliver the change records.\n * @param {Node} node\
n */\n addTransientObserver: function(node) {\n // Don't add transie
nt observers on the target itself. We already have all\n // the required li
steners set up on the target.\n if (node === this.target)\n return;\
n\n this.addListeners_(node);\n this.transientObservedNodes.push(node)
;\n var registrations = registrationsTable.get(node);\n if (!registrat
ions)\n registrationsTable.set(node, registrations = []);\n\n // We
know that registrations does not contain this because we already\n // check
ed if node === this.target.\n registrations.push(this);\n },\n\n remo
veTransientObservers: function() {\n var transientObservedNodes = this.tran
sientObservedNodes;\n this.transientObservedNodes = [];\n\n transientO
bservedNodes.forEach(function(node) {\n // Transient observers are never
added to the target.\n this.removeListeners_(node);\n\n var regist
rations = registrationsTable.get(node);\n for (var i = 0; i < registratio
ns.length; i++) {\n if (registrations[i] === this) {\n regis
trations.splice(i, 1);\n // Each node can only have one registered ob
server associated with\n // this observer.\n break;\n
}\n }\n }, this);\n },\n\n handleEvent: function(e) {\n
// Stop propagation since we are managing the propagation manually.\n /
/ This means that other mutation events on the page will not work\n // corr
ectly but that is by design.\n e.stopImmediatePropagation();\n\n switc
h (e.type) {\n case 'DOMAttrModified':\n // http://dom.spec.what
wg.org/#concept-mo-queue-attributes\n\n var name = e.attrName;\n
var namespace = e.relatedNode.namespaceURI;\n var target = e.target;
\n\n // 1.\n var record = new getRecord('attributes', target);
\n record.attributeName = name;\n record.attributeNamespace =
namespace;\n\n // 2.\n var oldValue =\n e.attrCha
nge === MutationEvent.ADDITION ? null : e.prevValue;\n\n forEachAncesto
rAndObserverEnqueueRecord(target, function(options) {\n // 3.1, 4.2\n
if (!options.attributes)\n return;\n\n // 3.
2, 4.3\n if (options.attributeFilter && options.attributeFilter.lengt
h &&\n options.attributeFilter.indexOf(name) === -1 &&\n
options.attributeFilter.indexOf(namespace) === -1) {\n retur
n;\n }\n // 3.3, 4.4\n if (options.attributeOld
Value)\n return getRecordWithOldValue(oldValue);\n\n //
3.4, 4.5\n return record;\n });\n\n break;\n\n
case 'DOMCharacterDataModified':\n // http://dom.spec.whatwg.org/#co
ncept-mo-queue-characterdata\n var target = e.target;\n\n // 1
.\n var record = getRecord('characterData', target);\n\n // 2.
\n var oldValue = e.prevValue;\n\n\n forEachAncestorAndObserve
rEnqueueRecord(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 getRecordWi
thOldValue(oldValue);\n\n // 3.3, 4.4\n return record;\n
});\n\n break;\n\n case 'DOMNodeRemoved':\n thi
s.addTransientObserver(e.target);\n // Fall through.\n case 'DOM
NodeInserted':\n // http://dom.spec.whatwg.org/#concept-mo-queue-childl
ist\n var target = e.relatedNode;\n var changedNode = e.target
;\n var addedNodes, removedNodes;\n if (e.type === 'DOMNodeIns
erted') {\n addedNodes = [changedNode];\n removedNodes = [
];\n } else {\n\n addedNodes = [];\n removedNodes
= [changedNode];\n }\n var previousSibling = changedNode.prev
iousSibling;\n var nextSibling = changedNode.nextSibling;\n\n
// 1.\n var record = getRecord('childList', target);\n record.
addedNodes = addedNodes;\n record.removedNodes = removedNodes;\n
record.previousSibling = previousSibling;\n record.nextSibling = nex
tSibling;\n\n forEachAncestorAndObserverEnqueueRecord(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.JsMutationObs
erver = JsMutationObserver;\n\n // Provide unprefixed MutationObserver with nat
ive or JS implementation\n if (!global.MutationObserver && global.WebKitMutatio
nObserver)\n global.MutationObserver = global.WebKitMutationObserver;\n\n if
(!global.MutationObserver)\n global.MutationObserver = JsMutationObserver;\n
\n\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
found in the LICENSE file.\n */\nwindow.CustomElements = window.CustomElements
|| {flags:{}};"," /*\r\nCopyright 2013 The Polymer Authors. All rights reserved.
\r\nUse of this source code is governed by a BSD-style\r\nlicense that can be fo
und in the LICENSE file.\r\n*/\r\n\r\n(function(scope){\r\n\r\nvar logFlags = wi
ndow.logFlags || {};\r\n\r\n// walk the subtree rooted at node, applying 'find(e
lement, 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 var 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.nextSibl
ing;\r\n }\r\n }\r\n while (e) {\r\n if (find(e, data) !== true) {\r\n
findAll(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
forSubtree(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// appl
ying '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 (upgrad
e(node)) {\r\n insertedNode(node);\r\n return true;\r\n }\r\n inserted(n
ode);\r\n}\r\n\r\n// manage lifecycle on added node's subtree only\r\nfunction a
ddedSubtree(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) || a
ddedSubtree(node);\r\n}\r\n\r\n// upgrade custom elements at node, if applicable
\r\nfunction upgrade(node) {\r\n if (!node.__upgraded__ && node.nodeType === No
de.ELEMENT_NODE) {\r\n var type = node.getAttribute('is') || node.localName;\
r\n var definition = scope.registry[type];\r\n if (definition) {\r\n
logFlags.dom && console.group('upgrade:', node.localName);\r\n scope.upgrad
e(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 (inDocument(node)) {\r\n forSubtree(node, function(e) {\r\n inserted(
e);\r\n });\r\n }\r\n}\r\n\r\n\r\n// TODO(sorvell): on platforms without Mut
ationObserver, mutations may not be \r\n// reliable and therefore entered/leftVi
ew are not reliable.\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 enteredViewCallback fires for elements that are create
d and \r\n// immediately added to dom.\r\nvar hasPolyfillMutations = (!window.Mu
tationObserver ||\r\n (window.MutationObserver === window.JsMutationObserver)
);\r\nscope.hasPolyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMut
ations = false;\r\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\
n pendingMutations.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMu
tations = true;\r\n var async = (window.Platform && window.Platform.endOfMicr
otask) ||\r\n setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\
nfunction takeMutations() {\r\n isPendingMutations = false;\r\n var $p = pendi
ngMutations;\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 (hasPolyfillMutations) {\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(*) true, fix this\r\nfunction _inserted(element) {\r\n // TODO(sjmi
les): it's possible we were inserted and removed in the space\r\n // of one mic
rotask, in which case we won't be 'inDocument' here\r\n // But there are other
cases where we are testing for inserted without\r\n // specific knowledge of mu
tations, and must test 'inDocument' to determine\r\n // whether to call inserte
d\r\n // If we can factor these cases into separate code paths we can have\r\n
// better diagnostics.\r\n // TODO(sjmiles): when logging, do work on all cust
om elements so we can\r\n // track behavior even when callbacks not defined\r\n
//console.log('inserted: ', element.localName);\r\n if (element.enteredViewCa
llback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom && conso
le.group('inserted:', element.localName);\r\n if (inDocument(element)) {\r\n
element.__inserted = (element.__inserted || 0) + 1;\r\n // if we are i
n 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 w
e are 'over inserted', squelch the callback\r\n if (element.__inserted > 1)
{\r\n logFlags.dom && console.warn('inserted:', element.localName,\r\n
'insert/remove count:', element.__inserted)\r\n } else if (element.
enteredViewCallback) {\r\n logFlags.dom && console.log('inserted:', eleme
nt.localName);\r\n element.enteredViewCallback();\r\n }\r\n }\r\n
logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction removedNode(
node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n removed(e
);\r\n });\r\n}\r\n\r\n\r\nfunction removed(element) {\r\n if (hasPolyfillMuta
tions) {\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(e
lement) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we
can track\r\n // behavior even when callbacks not defined\r\n if (element.lef
tViewCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.dom &
& console.log('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 'removed' state\r\n if (ele
ment.__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('removed:', element.localName,\r\
n 'insert/remove count:', element.__inserted)\r\n } else if (ele
ment.leftViewCallback) {\r\n element.leftViewCallback();\r\n }\r\n
}\r\n }\r\n}\r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n
var doc = window.ShadowDOMPolyfill &&\r\n window.ShadowDOMPolyfill.wrapIfN
eeded(document) || document;\r\n while (p) {\r\n if (p == doc) {\r\n re
turn true;\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfuncti
on watchShadow(node) {\r\n if (node.shadowRoot && !node.shadowRoot.__watched) {
\r\n logFlags.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.olderShadowRoo
t;\r\n }\r\n }\r\n}\r\n\r\nfunction watchRoot(root) {\r\n if (!root.__watch
ed) {\r\n observe(root);\r\n root.__watched = true;\r\n }\r\n}\r\n\r\nfun
ction handler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = muta
tions[0];\r\n if (mx && mx.type === 'childList' && mx.addedNodes) {\r\n
if (mx.addedNodes) {\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 && cons
ole.group('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx
.addedNodes, function(n) {\r\n //logFlags.dom && console.log(n.localName)
;\r\n if (!n.localName) {\r\n return;\r\n }\r\n //
nodes added may need lifecycle management\r\n addedNode(n);\r\n });
\r\n // removed nodes may need lifecycle management\r\n forEach(mx.rem
ovedNodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\
r\n if (!n.localName) {\r\n return;\r\n }\r\n remo
vedNode(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
MutationObserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles
): ask Raf why we have to call handler ourselves\r\n handler(observer.takeRecor
ds());\r\n takeMutations();\r\n}\r\n\r\nvar forEach = Array.prototype.forEach.c
all.bind(Array.prototype.forEach);\r\n\r\nfunction observe(inRoot) {\r\n observ
er.observe(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction obser
veDocument(document) {\r\n observe(document);\r\n}\r\n\r\nfunction upgradeDocum
ent(document) {\r\n logFlags.dom && console.group('upgradeDocument: ', (documen
t.URL || document._URL || '').split('/').pop());\r\n addedNode(document);\r\n
logFlags.dom && console.groupEnd();\r\n}\r\n\r\n// exports\r\n\r\nscope.watchSha
dow = watchShadow;\r\nscope.upgradeAll = addedNode;\r\nscope.upgradeSubtree = ad
dedSubtree;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDocu
ment = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window
.CustomElements);\r\n","/*\n * Copyright 2013 The Polymer Authors. All rights re
served.\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 `documen
t` object.\n * @class Document\n*/\n\n(function(scope) {\n\n// imports\n\nif (!s
cope) {\n scope = window.CustomElements = {flags:{}};\n}\nvar flags = scope.fla
gs;\n\n// native document.register?\n\nvar hasNative = Boolean(document.register
);\nvar useNative = !flags.register && hasNative;\n\nif (useNative) {\n\n // st
ub\n var nop = function() {};\n\n // exports\n scope.registry = {};\n scope.
upgradeElement = nop;\n \n scope.watchShadow = nop;\n scope.upgrade = nop;\n
scope.upgradeAll = nop;\n scope.upgradeSubtree = nop;\n scope.observeDocument
= nop;\n scope.upgradeDocument = nop;\n scope.takeRecords = nop;\n\n} else {\
n\n /**\n * Registers a custom tag name with the document.\n *\n * When a
registered element is created, a `readyCallback` method is called\n * in the
scope of the element. The `readyCallback` method can be specified on\n * eithe
r `options.prototype` or `options.lifecycle` with the latter taking\n * preced
ence.\n *\n * @method register\n * @param {String} name The tag name to re
gister. Must include a dash ('-'),\n * for example 'x-component'.\n * @pa
ram {Object} options\n * @param {String} [options.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 h
int for the polyfill because the extendee is difficult to infer.\n * Reme
mber that the input prototype must chain to the extended element's\n * pr
ototype (or HTMLElement.prototype) regardless of the value of\n * `extend
s`.\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 * F
ancyButton = document.register(\"fancy-button\", {\n * extends: 'button
',\n * prototype: Object.create(HTMLButtonElement.prototype, {\n *
readyCallback: {\n * value: function() {\n *
console.log(\"a fancy-button was created\",\n * }\n * }\
n * })\n * });\n * @return {Function} Constructor for the newl
y registered type.\n */\n function register(name, options) {\n //console.w
arn('document.register(\"' + name + '\", ', options, ')');\n // construct a d
efintion out of options\n // TODO(sjmiles): probably should clone options ins
tead of mutating it\n var definition = options || {};\n if (!name) {\n
// TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('document.register: first argument
`name` must not be empty');\n }\n if (name.indexOf('-') < 0) {\n // T
ODO(sjmiles): replace with more appropriate error (EricB can probably\n //
offer guidance)\n throw new Error('document.register: first argument (\\'na
me\\') must contain a dash (\\'-\\'). Argument provided was \\'' + String(name)
+ '\\'.');\n }\n // elements may only be registered once\n if (getRegis
teredDefinition(name)) {\n throw new Error('DuplicateDefinitionError: a typ
e with name \\'' + String(name) + '\\' is already registered');\n }\n // m
ust have a prototype, default to an extension of HTMLElement\n // TODO(sjmile
s): probably should throw if no prototype, check spec\n if (!definition.proto
type) {\n // TODO(sjmiles): replace with more appropriate error (EricB can
probably\n // offer guidance)\n throw new Error('Options missing requi
red prototype property');\n }\n // record name\n definition.name = name
.toLowerCase();\n // ensure a lifecycle object so we don't have to null test
it\n definition.lifecycle = definition.lifecycle || {};\n // build a list
of ancestral custom elements (for native base detection)\n // TODO(sjmiles):
we used to need to store this, but current code only\n // uses it in 'resolve
TagName': it should probably be inlined\n definition.ancestry = ancestry(defi
nition.extends);\n // extensions of native specializations of HTMLElement req
uire localName\n // to remain native, and use secondary 'is' specifier for ex
tension type\n resolveTagName(definition);\n // some platforms require mod
ifications to the user-supplied prototype\n // chain\n resolvePrototypeCha
in(definition);\n // overrides to implement attributeChanged callback\n ov
errideAttributeApi(definition.prototype);\n // 7.1.5: Register the DEFINITION
with DOCUMENT\n registerDefinition(definition.name, definition);\n // 7.1
.7. Run custom element constructor generation algorithm with PROTOTYPE\n // 7
.1.8. Return the output of the previous step.\n definition.ctor = generateCon
structor(definition);\n definition.ctor.prototype = definition.prototype;\n
// force our .constructor to be our actual constructor\n definition.prototy
pe.constructor = definition.ctor;\n // if initial parsing is complete\n if
(scope.ready) {\n // upgrade any pre-existing nodes of this type\n sc
ope.upgradeAll(document);\n }\n return definition.ctor;\n }\n\n function
ancestry(extnds) {\n var extendee = getRegisteredDefinition(extnds);\n if
(extendee) {\n return ancestry(extendee.extends).concat([extendee]);\n
}\n return [];\n }\n\n function resolveTagName(definition) {\n // if we
are explicitly extending something, that thing is our\n // baseTag, unless it
represents a custom component\n var baseTag = 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=definition.ancestry[i]); i++) {\n bas
eTag = a.is && a.tag;\n }\n // our tag is our baseTag, if it exists, and o
therwise just our name\n definition.tag = baseTag || definition.name;\n if
(baseTag) {\n // if there is a base tag, use secondary 'is' specifier\n
definition.is = definition.name;\n }\n }\n\n function resolvePrototypeCh
ain(definition) {\n // if we don't support __proto__ we need to locate the na
tive level\n // prototype for precise mixing in\n if (!Object.__proto__) {
\n // default prototype\n var nativePrototype = HTMLElement.prototype;
\n // work out prototype when using type-extension\n if (definition.is
) {\n var inst = document.createElement(definition.tag);\n nativeP
rototype = Object.getPrototypeOf(inst);\n }\n // ensure __proto__ refe
rence is installed at each point on the prototype\n // chain.\n // NOT
E: On platforms without __proto__, a mixin strategy is used instead\n // of
prototype swizzling. In this case, this generated __proto__ provides\n //
limited support for prototype traversal.\n var proto = definition.prototype
, ancestor;\n while (proto && (proto !== nativePrototype)) {\n var a
ncestor = 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 insta
ntiate(definition) {\n // 4.a.1. Create a new object that implements PROTOTYP
E\n // 4.a.2. Let ELEMENT by this new object\n //\n // the custom eleme
nt instantiation algorithm must also ensure that the\n // output is a valid D
OM element with the proper wrapper in place.\n //\n return upgrade(domCrea
teElement(definition.tag), definition);\n }\n\n function upgrade(element, defi
nition) {\n // some definitions specify an 'is' attribute\n if (definition
.is) {\n element.setAttribute('is', definition.is);\n }\n // remove '
unresolved' attr, which is a standin for :unresolved.\n element.removeAttribu
te('unresolved');\n // make 'element' implement definition.prototype\n imp
lement(element, definition);\n // flag as upgraded\n element.__upgraded__
= true;\n // there should never be a shadow root on element at this point\n
// we require child nodes be upgraded before `created`\n scope.upgradeSubtr
ee(element);\n // lifecycle management\n created(element);\n // OUTPUT\
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-acquire
inPrototype via\n // getPrototypeOf(Element), we cannot do so when\n
// we use mixin, so we install a magic reference\n customMixin(element, def
inition.prototype, definition.native);\n element.__proto__ = definition.pro
totype;\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 // consid
er this for supporting 'super'.\n var used = {};\n // start with inSrc\n
var p = inSrc;\n // sometimes the default is HTMLUnknownElement.prototype i
nstead of\n // HTMLElement.prototype, so we add a test\n // the idea is to
avoid mixing in native prototypes, so adding\n // the second test is WLOG\n
while (p !== inNative && p !== HTMLUnknownElement.prototype) {\n var key
s = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=keys[i]; i++) {\n
if (!used[k]) {\n Object.defineProperty(inTarget, k,\n
Object.getOwnPropertyDescriptor(p, k));\n used[k] = 1;\n }\n
}\n p = Object.getPrototypeOf(p);\n }\n }\n\n function created(el
ement) {\n // invoke createdCallback\n if (element.createdCallback) {\n
element.createdCallback();\n }\n }\n\n // attribute watching\n\n functi
on overrideAttributeApi(prototype) {\n // overrides to implement callbacks\n
// TODO(sjmiles): should support access via .attributes NamedNodeMap\n //
TODO(sjmiles): preserves user defined overrides, if any\n if (prototype.setAt
tribute._polyfilled) {\n return;\n }\n var setAttribute = prototype.s
etAttribute;\n prototype.setAttribute = function(name, value) {\n change
Attribute.call(this, name, value, setAttribute);\n }\n var removeAttribute
= prototype.removeAttribute;\n prototype.removeAttribute = function(name) {\
n changeAttribute.call(this, name, null, removeAttribute);\n }\n prot
otype.setAttribute._polyfilled = true;\n }\n\n // https://dvcs.w3.org/hg/webco
mponents/raw-file/tip/spec/custom/\n // index.html#dfn-attribute-changed-callba
ck\n function changeAttribute(name, value, operation) {\n var oldValue = thi
s.getAttribute(name);\n operation.apply(this, arguments);\n var newValue =
this.getAttribute(name);\n if (this.attributeChangedCallback\n && (ne
wValue !== oldValue)) {\n this.attributeChangedCallback(name, oldValue, new
Value);\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.toLowerCase()];\n }\n }\n\n function regist
erDefinition(name, definition) {\n registry[name] = definition;\n }\n\n fun
ction generateConstructor(definition) {\n return function() {\n return i
nstantiate(definition);\n };\n }\n\n function createElement(tag, typeExtens
ion) {\n // TODO(sjmiles): ignore 'tag' when using 'typeExtension', we could\
n // error check it, or perhaps there should only ever be one argument\n v
ar definition = getRegisteredDefinition(typeExtension || tag);\n if (definiti
on) {\n return new definition.ctor();\n }\n return domCreateElement(t
ag);\n }\n\n function upgradeElement(element) {\n if (!element.__upgraded__
&& (element.nodeType === Node.ELEMENT_NODE)) {\n var type = element.getAtt
ribute('is') || element.localName;\n var definition = getRegisteredDefiniti
on(type);\n return definition && upgrade(element, definition);\n }\n }\
n\n function cloneNode(deep) {\n // call original clone\n var n = domClon
eNode.call(this, deep);\n // upgrade the element and subtree\n scope.upgra
deAll(n);\n // return the clone\n return n;\n }\n // capture native crea
teElement before we override it\n\n var domCreateElement = document.createEleme
nt.bind(document);\n\n // capture native cloneNode before we override it\n\n v
ar domCloneNode = Node.prototype.cloneNode;\n\n // exports\n\n document.regist
er = register;\n document.createElement = createElement; // override\n Node.pr
ototype.cloneNode = cloneNode; // override\n\n scope.registry = registry;\n\n
/**\n * Upgrade an element to a custom element. Upgrading an element\n * cau
ses the custom prototype to be applied, an `is` attribute \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 matches no registered custom
tag name.\n *\n * @method ugprade\n * @param {Element} element The elemen
t to upgrade.\n * @return {Element} The upgraded element.\n */\n scope.upgr
ade = upgradeElement;\n}\n\nscope.hasNative = hasNative;\nscope.useNative = useN
ative;\n\n})(window.CustomElements);\n","/*\n * Copyright 2013 The Polymer Autho
rs. 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() {\n\n// i
mport\n\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_TYP
E : 'none';\n\n// highlander object for parsing a document tree\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.__parsed = true;\n /
/ all parsable elements in inDocument (depth-first pre-order traversal)\n v
ar elts = inDocument.querySelectorAll(parser.selectors);\n // for each pars
able 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 // created should be ca
ught by observer\n CustomElements.upgradeDocument(inDocument);\n // ob
serve document for dom changes\n CustomElements.observeDocument(inDocument)
;\n }\n },\n parseLink: function(linkElt) {\n // imports\n if (isDocu
mentLink(linkElt)) {\n this.parseImport(linkElt);\n }\n },\n parseImpo
rt: function(linkElt) {\n if (linkElt.content) {\n parser.parse(linkElt.
content);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n return (inElt.l
ocalName === 'link'\n && inElt.getAttribute('rel') === IMPORT_LINK_TYPE);\n
}\n\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\n
\n// exports\n\nCustomElements.parser = parser;\n\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(func
tion(scope){\n\n// bootstrap parsing\nfunction bootstrap() {\n // parse documen
t\n CustomElements.parser.parse(document);\n // one more pass before register
is 'live'\n CustomElements.upgradeDocument(document);\n // choose async\n var
async = window.Platform && Platform.endOfMicrotask ? \n Platform.endOfMicrot
ask :\n setTimeout;\n async(function() {\n // set internal 'ready' flag,
now document.register 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.body.dispatchEvent(\n new Cust
omEvent('WebComponentsReady', {bubbles: true})\n );\n });\n}\n\n// CustomEve
nt shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.Custom
Event = function(inType) {\n var e = document.createEvent('HTMLEvents');\n
e.initEvent(inType, true, true);\n return e;\n };\n}\n\n// When loading at
readyState complete time (or via flag), boot custom elements\n// immediately.\n/
/ If relevant, HTMLImports must already be loaded.\nif (document.readyState ===
'complete' || scope.flags.eager) {\n bootstrap();\n// When loading at readyStat
e interactive time, bootstrap only if HTMLImports\n// are not pending. Also avoi
d IE as the semantics of this state are unreliable.\n} else if (document.readySt
ate === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports || win
dow.HTMLImports.ready)) {\n bootstrap();\n// When loading at other readyStates,
wait for the appropriate DOM event to \n// bootstrap.\n} else {\n var loadEven
t = window.HTMLImports ? 'HTMLImportsLoaded' : 'DOMContentLoaded';\n window.add
EventListener(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 fi
le.\n */\n(function() {\n\n// inject style sheet\nvar style = document.createEle
ment('style');\nstyle.textContent = 'element {display: none !important;} /* inje
cted by platform.js */';\nvar head = document.querySelector('head');\nhead.inser
tBefore(style, head.firstChild);\n\nif (window.ShadowDOMPolyfill) {\n\n // ensu
re wrapped inputs for these functions\n var fns = ['upgradeAll', 'upgradeSubtre
e', 'observeDocument',\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] = function(inNode) {\n return original[fn](wrap(inNode));\n };\n })
;\n\n}\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\nvar iterations = 0;\nv
ar callbacks = [];\nvar twiddle = document.createTextNode('');\n\nfunction endOf
Microtask(callback) {\n twiddle.textContent = iterations++;\n callbacks.push(c
allback);\n}\n\nfunction atEndOfMicrotask() {\n while (callbacks.length) {\n
callbacks.shift()();\n }\n}\n\nnew (window.MutationObserver || JsMutationObser
ver)(atEndOfMicrotask)\n .observe(twiddle, {characterData: true})\n ;\n\n// ex
ports\n\nscope.endOfMicrotask = endOfMicrotask;\n\n})(Platform);\n\n","/*\n * Co
pyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source co
de is governed by a BSD-style\n * license that can be found in the LICENSE file.
\n */\n\n(function(scope) {\n scope = scope || {};\n scope.external = scope.ex
ternal || {};\n var target = {\n shadow: function(inEl) {\n if (inEl) {
\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n
canTarget: function(shadow) {\n return shadow && Boolean(shadow.elementFro
mPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shad
ow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n
olderShadow: function(shadow) {\n var os = shadow.olderShadowRoot;\n
if (!os) {\n var se = shadow.querySelector('shadow');\n if (se)
{\n os = se.olderShadowRoot;\n }\n }\n return os;\n
},\n allShadows: function(element) {\n var shadows = [], s = this.shado
w(element);\n while(s) {\n shadows.push(s);\n s = this.olderS
hadow(s);\n }\n return shadows;\n },\n searchRoot: function(inRo
ot, x, y) {\n if (inRoot) {\n var t = inRoot.elementFromPoint(x, y);
\n var st, sr, os;\n // is element a shadow host?\n sr = th
is.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 shadows\n sr = this.olderShad
ow(sr);\n } else {\n // shadowed element may contain a shado
w root\n var ssr = this.targetingShadow(st);\n return this
.searchRoot(ssr, x, y) || st;\n }\n }\n // light dom elem
ent is the target\n return t;\n }\n },\n owner: function(eleme
nt) {\n var s = element;\n // walk up until you hit the shadow root or
document\n while (s.parentNode) {\n s = s.parentNode;\n }\n
return s;\n },\n findTarget: function(inEvent) {\n var x = inEvent
.clientX, y = inEvent.clientY;\n // if the listener is in the shadow root,
it is much faster to start there\n var s = this.owner(inEvent.target);\n
// if x, y is not in this root, fall back to document search\n if (!s.el
ementFromPoint(x, y)) {\n s = document;\n }\n return this.searc
hRoot(s, x, y);\n }\n };\n scope.targetFinding = target;\n scope.findTarge
t = target.findTarget.bind(target);\n\n window.PointerEventsPolyfill = scope;\n
})(window.PointerEventsPolyfill);\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 file.\n */\n(function() {\n function
shadowSelector(v) {\n return 'body ^^ ' + selector(v);\n }\n function selec
tor(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function rule(v) {\
n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; touch-actio
n-delay: none; }';\n }\n var attrib2css = [\n 'none',\n 'auto',\n 'pa
n-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 styles =
'';\n attrib2css.forEach(function(r) {\n if (String(r) === r) {\n style
s += selector(r) + rule(r) + '\\n';\n styles += shadowSelector(r) + rule(r)
+ '\\n';\n } else {\n styles += r.selectors.map(selector) + rule(r.rule
) + '\\n';\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\
n';\n }\n });\n var el = document.createElement('style');\n el.textContent
= styles;\n document.head.appendChild(el);\n})();\n","/*\n * Copyright 2013 Th
e 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/**\n
* This is the constructor for new PointerEvents.\n *\n * New Pointer Events must
be given a type, and an optional dictionary of\n * initialization properties.\n
*\n * Due to certain platform requirements, events returned from the constructo
r\n * identify as MouseEvents.\n *\n * @constructor\n * @param {String} inType T
he type of the event to create.\n * @param {Object} [inDict] An optional diction
ary of initial event properties.\n * @return {Event} A new PointerEvent of type
`inType` and initialized with properties from `inDict`.\n */\n(function(scope) {
\n // test for DOM Level 4 Events\n var NEW_MOUSE_EVENT = false;\n var HAS_BU
TTONS = false;\n try {\n var ev = new MouseEvent('click', {buttons: 1});\n
NEW_MOUSE_EVENT = true;\n HAS_BUTTONS = ev.buttons === 1;\n } catch(e) {\n
}\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 ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,\n
null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n fa
lse,\n false,\n 0,\n null\n ];\n\n function PointerEvent(inType, inDi
ct) {\n inDict = inDict || {};\n // According to the w3c spec,\n // htt
p://www.w3.org/TR/DOM-Level-3-Events/#events-MouseEvent-button\n // MouseEven
t.button == 0 can mean either no mouse button depressed, or the\n // left mou
se button depressed.\n //\n // As of now, the only way to distinguish betw
een the two states of\n // MouseEvent.button is by using the deprecated Mouse
Event.which property, as\n // this maps mouse buttons to positive integers >
0, and uses 0 to mean that\n // no mouse button is held.\n //\n // Mous
eEvent.which is derived from MouseEvent.button at MouseEvent creation,\n // b
ut initMouseEvent does not expose an argument with which to set\n // MouseEve
nt.which. Calling initMouseEvent with a buttonArg of 0 will set\n // MouseEve
nt.button == 0 and MouseEvent.which == 1, breaking the expectations\n // of a
pp developers.\n //\n // The only way to propagate the correct state of Mo
useEvent.which and\n // MouseEvent.button to a new MouseEvent.button == 0 and
MouseEvent.which == 0\n // is to call initMouseEvent with a buttonArg value
of -1.\n //\n // This is fixed with DOM Level 4's use of buttons\n var
buttons = inDict.buttons;\n if (buttons === undefined) {\n switch (inDic
t.which) {\n case 1: buttons = 1; break;\n case 2: buttons = 4; br
eak;\n case 3: buttons = 2; break;\n default: buttons = 0;\n
}\n }\n\n var e;\n if (NEW_MOUSE_EVENT) {\n e = new MouseEvent(inT
ype, inDict);\n } else {\n e = document.createEvent('MouseEvent');\n\n
// import values from the given dictionary\n var props = {}, p;\n
for(var i = 0; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n
props[p] = inDict[p] || MOUSE_DEFAULTS[i];\n }\n\n // define the p
roperties inherited from MouseEvent\n e.initMouseEvent(\n inType, pr
ops.bubbles, props.cancelable, props.view, props.detail,\n props.screenX,
props.screenY, props.clientX, props.clientY, props.ctrlKey,\n props.altK
ey, props.shiftKey, props.metaKey, props.button, props.relatedTarget\n );\n
}\n\n // make the event pass instanceof checks\n e.__proto__ = Pointer
Event.prototype;\n\n // define the buttons property according to DOM Level 3
spec\n if (!HAS_BUTTONS) {\n // IE 10 has buttons on MouseEvent.prototyp
e as a getter w/o any setting\n // mechanism\n Object.defineProperty(e
, 'buttons', {get: function(){ return buttons; }, enumerable: true});\n }\n\n
// Spec requires that pointers without pressure specified use 0.5 for down\n
// state and 0 for up state.\n var pressure = 0;\n if (inDict.pressure
) {\n pressure = inDict.pressure;\n } else {\n pressure = buttons ?
0.5 : 0;\n }\n\n // define the properties of the PointerEvent interface\n
Object.defineProperties(e, {\n pointerId: { value: inDict.pointerId ||
0, enumerable: true },\n width: { value: inDict.width || 0, enumerable: tru
e },\n height: { value: inDict.height || 0, enumerable: true },\n pres
sure: { value: pressure, enumerable: true },\n tiltX: { value: inDict.tiltX
|| 0, enumerable: true },\n tiltY: { value: inDict.tiltY || 0, enumerable:
true },\n pointerType: { value: inDict.pointerType || '', enumerable: true
},\n hwTimestamp: { value: inDict.hwTimestamp || 0, enumerable: true },\n
isPrimary: { value: inDict.isPrimary || false, enumerable: true }\n });\
n return e;\n }\n\n // PointerEvent extends MouseEvent\n PointerEvent.prot
otype = Object.create(MouseEvent.prototype);\n\n // attach to window\n if (!sc
ope.PointerEvent) {\n scope.PointerEvent = PointerEvent;\n }\n})(window);\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/**\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.size; };\n function PointerMap()
{\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN
;\n return m;\n } else {\n this.keys = [];\n this.values = [];
\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n
var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.values
[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.valu
es.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.indexOf(inId);\n return this.values[i];\n },\n
clear: function() {\n this.keys.length = 0;\n this.values.length = 0
;\n },\n // return value, key, map\n forEach: function(callback, thisAr
g) {\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 scope.PointerMap = PointerMap;\n
})(window.PointerEventsPolyfill);\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 file.\n */\n\n(function(scope) {\n va
r CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'vi
ew',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'client
Y',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button
',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEven
t\n 'pointerId',\n 'width',\n 'height',\n 'pressure',\n 'tiltX',\
n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isPrimary',\n //
event instance\n 'type',\n 'target',\n 'currentTarget',\n 'which'\n
];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n
null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n fa
lse,\n false,\n 0,\n null,\n // DOM Level 3\n undefined,\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 ];\n\n
/**\n * This module is for normalizing events. Mouse and Touch events will b
e\n * collected here, and fire PointerEvents that have the same semantics, no\
n * matter the source.\n * Events fired:\n * - pointerdown: a pointing i
s added\n * - pointerup: a pointer is removed\n * - pointermove: a point
er is moved\n * - pointerover: a pointer crosses into an element\n * - p
ointerout: a pointer leaves an element\n * - pointercancel: a pointer will n
o longer generate events\n */\n var dispatcher = {\n targets: new WeakMap(
),\n handledEvents: new WeakMap(),\n pointermap: new scope.PointerMap(),\n
eventMap: {},\n // Scope objects for native events.\n // This exists f
or ease of testing.\n eventSources: {},\n eventSourceList: [],\n /**\n
* Add a new event source that will generate pointer events.\n *\n *
`inSource` must contain an array of event names named `events`, and\n * func
tions with the names specified in the `events` array.\n * @param {string} na
me A name for the event source\n * @param {Object} source A new source of pl
atform events.\n */\n registerSource: function(name, source) {\n var
s = source;\n var newEvents = s.events;\n if (newEvents) {\n n
ewEvents.forEach(function(e) {\n if (s[e]) {\n this.eventMap
[e] = s[e].bind(s);\n }\n }, this);\n this.eventSources[n
ame] = s;\n this.eventSourceList.push(s);\n }\n },\n register:
function(element) {\n var l = this.eventSourceList.length;\n for (var
i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n // call e
ventsource register\n es.register.call(es, element);\n }\n },\n
unregister: function(element) {\n var l = this.eventSourceList.length;\n
for (var 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, contai
ned) {\n return container.contains(contained);\n },\n // EVENTS\n
down: function(inEvent) {\n this.fireEvent('pointerdown', inEvent);\n },
\n move: function(inEvent) {\n this.fireEvent('pointermove', inEvent);\n
},\n up: function(inEvent) {\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 th
is.fireEvent('pointerover', inEvent);\n },\n out: function(inEvent) {\n
inEvent.bubbles = true;\n this.fireEvent('pointerout', inEvent);\n },
\n cancel: function(inEvent) {\n this.fireEvent('pointercancel', inEvent
);\n },\n leaveOut: function(event) {\n if (!this.contains(event.targ
et, event.relatedTarget)) {\n this.leave(event);\n }\n this.out
(event);\n },\n enterOver: function(event) {\n if (!this.contains(eve
nt.target, event.relatedTarget)) {\n this.enter(event);\n }\n t
his.over(event);\n },\n // LISTENER LOGIC\n eventHandler: function(inEv
ent) {\n // This is used to prevent multiple dispatch of pointerevents from
\n // platform events. This can happen when two elements in different scope
s\n // are set up to create pointer events, which is relevant to Shadow DOM
.\n if (this.handledEvents.get(inEvent)) {\n return;\n }\n
var type = inEvent.type;\n var fn = this.eventMap && this.eventMap[type];\
n if (fn) {\n fn(inEvent);\n }\n this.handledEvents.set(in
Event, true);\n },\n // set up event listeners\n listen: function(targe
t, events) {\n events.forEach(function(e) {\n this.addEvent(target,
e);\n }, this);\n },\n // remove event listeners\n unlisten: funct
ion(target, events) {\n events.forEach(function(e) {\n this.removeEv
ent(target, e);\n }, this);\n },\n addEvent: scope.external.addEvent
|| function(target, eventName) {\n target.addEventListener(eventName, this.
boundHandler);\n },\n removeEvent: scope.external.removeEvent || function(
target, eventName) {\n target.removeEventListener(eventName, this.boundHand
ler);\n },\n // EVENT CREATION AND TRACKING\n /**\n * Creates a new
Event of type `inType`, based on the information in\n * `inEvent`.\n *\
n * @param {string} inType A string representing the type of event to create
\n * @param {Event} inEvent A platform event with a target\n * @return {
Event} A PointerEvent of type `inType`\n */\n makeEvent: function(inType,
inEvent) {\n // relatedTarget must be null if pointer is captured\n i
f (this.captureInfo) {\n inEvent.relatedTarget = null;\n }\n va
r e = new PointerEvent(inType, inEvent);\n if (inEvent.preventDefault) {\n
e.preventDefault = inEvent.preventDefault;\n }\n this.targets.s
et(e, this.targets.get(inEvent) || inEvent.target);\n return e;\n },\n
// make and dispatch an event in one call\n fireEvent: function(inType, inE
vent) {\n var e = this.makeEvent(inType, inEvent);\n return this.dispa
tchEvent(e);\n },\n /**\n * Returns a snapshot of inEvent, with writab
le properties.\n *\n * @param {Event} inEvent An event that contains pro
perties to copy.\n * @return {Object} An object containing shallow copies of
`inEvent`'s\n * properties.\n */\n cloneEvent: 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_D
EFAULTS[i];\n }\n // keep the semantics of preventDefault\n if (i
nEvent.preventDefault) {\n eventCopy.preventDefault = function() {\n
inEvent.preventDefault();\n };\n }\n return eventCopy;\n
},\n getTarget: function(inEvent) {\n // if pointer capture is set, ro
ute all events for the specified pointerId\n // to the capture target\n
if (this.captureInfo) {\n if (this.captureInfo.id === inEvent.pointerId
) {\n return this.captureInfo.target;\n }\n }\n return
this.targets.get(inEvent);\n },\n setCapture: function(inPointerId, inTar
get) {\n if (this.captureInfo) {\n this.releaseCapture(this.captureI
nfo.id);\n }\n this.captureInfo = {id: inPointerId, target: inTarget};
\n var e = new PointerEvent('gotpointercapture', { bubbles: true });\n
this.implicitRelease = this.releaseCapture.bind(this, inPointerId);\n docu
ment.addEventListener('pointerup', this.implicitRelease);\n document.addEve
ntListener('pointercancel', this.implicitRelease);\n this.targets.set(e, in
Target);\n this.asyncDispatchEvent(e);\n },\n releaseCapture: functio
n(inPointerId) {\n if (this.captureInfo && this.captureInfo.id === inPointe
rId) {\n var e = new PointerEvent('lostpointercapture', { bubbles: true }
);\n var t = this.captureInfo.target;\n this.captureInfo = null;\n
document.removeEventListener('pointerup', this.implicitRelease);\n
document.removeEventListener('pointercancel', this.implicitRelease);\n
this.targets.set(e, t);\n this.asyncDispatchEvent(e);\n }\n },\n
/**\n * Dispatches the event to its target.\n *\n * @param {Event
} inEvent The event to be dispatched.\n * @return {Boolean} True if an event
handler returns true, false otherwise.\n */\n dispatchEvent: scope.exter
nal.dispatchEvent || function(inEvent) {\n var t = this.getTarget(inEvent);
\n if (t) {\n return t.dispatchEvent(inEvent);\n }\n },\n
asyncDispatchEvent: function(inEvent) {\n setTimeout(this.dispatchEvent.bi
nd(this, inEvent), 0);\n }\n };\n dispatcher.boundHandler = dispatcher.even
tHandler.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register =
dispatcher.register.bind(dispatcher);\n scope.unregister = dispatcher.unregist
er.bind(dispatcher);\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 201
3 The Polymer Authors. All rights reserved.\n * Use of this source code is gover
ned 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 which nodes will
\n * generate Pointer Events.\n *\n * All nodes that wish to generate Pointer Ev
ents must have the attribute\n * `touch-action` set to `none`.\n */\n(function(s
cope) {\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEa
ch);\n var map = Array.prototype.map.call.bind(Array.prototype.map);\n var toA
rray = Array.prototype.slice.call.bind(Array.prototype.slice);\n var filter = A
rray.prototype.filter.call.bind(Array.prototype.filter);\n var MO = window.Muta
tionObserver || window.WebKitMutationObserver;\n var SELECTOR = '[touch-action]
';\n var OBSERVER_INIT = {\n subtree: true,\n childList: true,\n attri
butes: true,\n attributeOldValue: true,\n attributeFilter: ['touch-action'
]\n };\n\n function Installer(add, remove, changed, binder) {\n this.addCal
lback = add.bind(binder);\n this.removeCallback = remove.bind(binder);\n t
his.changedCallback = changed.bind(binder);\n if (MO) {\n this.observer
= new MO(this.mutationWatcher.bind(this));\n }\n }\n\n Installer.prototype
= {\n watchSubtree: function(target) {\n // Only watch scopes that can t
arget find, as these are top-level.\n // Otherwise we can see duplicate add
itions and removals that add noise.\n //\n // TODO(dfreedman): For som
e instances with ShadowDOMPolyfill, we can see\n // a removal without an in
sertion when a node is redistributed among\n // shadows. Since it all ends
up correct in the document, watching only\n // the document will yield the
correct mutations to watch.\n if (scope.targetFinding.canTarget(target)) {\
n this.observer.observe(target, OBSERVER_INIT);\n }\n },\n ena
bleOnSubtree: function(target) {\n this.watchSubtree(target);\n if (ta
rget === document && document.readyState !== 'complete') {\n this.install
OnLoad();\n } else {\n this.installNewSubtree(target);\n }\n
},\n installNewSubtree: function(target) {\n forEach(this.findElements(
target), this.addElement, this);\n },\n findElements: function(target) {\n
if (target.querySelectorAll) {\n return target.querySelectorAll(SEL
ECTOR);\n }\n return [];\n },\n removeElement: function(el) {\n
this.removeCallback(el);\n },\n addElement: function(el) {\n thi
s.addCallback(el);\n },\n elementChanged: function(el, oldValue) {\n
this.changedCallback(el, oldValue);\n },\n concatLists: function(accum, li
st) {\n return accum.concat(toArray(list));\n },\n // register all to
uch-action = none nodes on document load\n installOnLoad: function() {\n
document.addEventListener('DOMContentLoaded', this.installNewSubtree.bind(this,
document));\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.findEleme
nts, this);\n // make sure the added nodes are accounted for\n tree.pu
sh(filter(inNodes, this.isElement));\n // flatten the list\n return tr
ee.reduce(this.concatLists, []);\n },\n mutationWatcher: function(mutation
s) {\n mutations.forEach(this.mutationHandler, this);\n },\n mutation
Handler: function(m) {\n if (m.type === 'childList') {\n var added =
this.flattenMutationTree(m.addedNodes);\n added.forEach(this.addElement,
this);\n var removed = this.flattenMutationTree(m.removedNodes);\n
removed.forEach(this.removeElement, this);\n } else if (m.type === 'attri
butes') {\n this.elementChanged(m.target, m.oldValue);\n }\n }\n
};\n\n if (!MO) {\n Installer.prototype.watchSubtree = function(){\n c
onsole.warn('PointerEventsPolyfill: MutationObservers not found, touch-action wi
ll not be dynamically detected');\n };\n }\n\n scope.Installer = Installer;
\n})(window.PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Author
s. 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 pointermap = dispatcher.pointermap;\n
// radius around touchend that swallows mouse events\n var DEDUP_DIST = 25;\n
\n // handler block for native mouse events\n var mouseEvents = {\n POINTER
_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n 'm
ousemove',\n 'mouseup',\n 'mouseover',\n 'mouseout'\n ],\n
register: function(target) {\n dispatcher.listen(target, this.events);\n
},\n unregister: function(target) {\n dispatcher.unlisten(target, this.
events);\n },\n lastTouches: [],\n // collide with the global mouse lis
tener\n isEventSimulatedFromTouch: function(inEvent) {\n var lts = this.
lastTouches;\n var x = inEvent.clientX, y = inEvent.clientY;\n for (va
r i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\n // simulated
mouse events will be swallowed near a primary touchend\n var dx = Math.ab
s(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP
_DIST) {\n return true;\n }\n }\n },\n prepareEvent:
function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n // for
ward mouse preventDefault\n var pd = e.preventDefault;\n e.preventDefa
ult = function() {\n inEvent.preventDefault();\n pd();\n };\n
e.pointerId = this.POINTER_ID;\n e.isPrimary = true;\n e.pointer
Type = this.POINTER_TYPE;\n return e;\n },\n mousedown: function(inEv
ent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = p
ointermap.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(in
Event);\n pointermap.set(this.POINTER_ID, inEvent);\n dispatcher.d
own(e);\n }\n },\n mousemove: function(inEvent) {\n if (!this.is
EventSimulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);
\n dispatcher.move(e);\n }\n },\n mouseup: function(inEvent) {
\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointer
map.get(this.POINTER_ID);\n if (p && p.button === inEvent.button) {\n
var e = this.prepareEvent(inEvent);\n dispatcher.up(e);\n
this.cleanupMouse();\n }\n }\n },\n mouseover: function(inEv
ent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = t
his.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n }\n },\n
mouseout: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv
ent)) {\n var e = this.prepareEvent(inEvent);\n dispatcher.leaveOu
t(e);\n }\n },\n cancel: function(inEvent) {\n var e = this.prep
areEvent(inEvent);\n dispatcher.cancel(e);\n this.cleanupMouse();\n
},\n cleanupMouse: function() {\n pointermap['delete'](this.POINTER_ID)
;\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PointerEventsPol
yfill);\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 file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispa
tcher;\n var findTarget = scope.findTarget;\n var allShadows = scope.targetFin
ding.allShadows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointe
rmap;\n var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n /
/ This should be long enough to ignore compat mouse events made by touch\n var
DEDUP_TIMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var ATTRIB = 'touch-a
ction';\n var INSTALLER;\n var HAS_TOUCH_ACTION = (typeof document.head.style.
touchAction) === 'string';\n\n // handler block for native touch events\n var
touchEvents = {\n scrollType: new WeakMap(),\n events: [\n 'touchstar
t',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n reg
ister: function(target) {\n if (HAS_TOUCH_ACTION) {\n dispatcher.lis
ten(target, this.events);\n } else {\n INSTALLER.enableOnSubtree(tar
get);\n }\n },\n unregister: function(target) {\n if (HAS_TOUCH_
ACTION) {\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 this.scroll
Type.set(el, st);\n dispatcher.listen(el, this.events);\n // set t
ouch-action on shadows as well\n allShadows(el).forEach(function(s) {\n
this.scrollType.set(s, st);\n dispatcher.listen(s, this.events)
;\n }, this);\n }\n },\n elementRemoved: function(el) {\n
this.scrollType['delete'](el);\n dispatcher.unlisten(el, this.events);\n
// remove touch-action from shadow\n allShadows(el).forEach(function(s)
{\n this.scrollType['delete'](s);\n dispatcher.unlisten(s, this.e
vents);\n }, this);\n },\n elementChanged: function(el, oldValue) {\n
var a = el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollT
ype(a);\n var oldSt = this.touchActionToScrollType(oldValue);\n // sim
ply update scrollType if listeners are already established\n if (st && oldS
t) {\n this.scrollType.set(el, st);\n allShadows(el).forEach(funct
ion(s) {\n this.scrollType.set(s, st);\n }, this);\n } else
if (oldSt) {\n this.elementRemoved(el);\n } else if (st) {\n
this.elementAdded(el);\n }\n },\n scrollTypes: {\n EMITTER: 'no
ne',\n XSCROLLER: 'pan-x',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?
:pan-x pan-y)|(?:pan-y pan-x)|auto$/\n },\n touchActionToScrollType: funct
ion(touchAction) {\n var t = touchAction;\n var st = this.scrollTypes;
\n if (t === 'none') {\n return 'none';\n } else if (t === st.X
SCROLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n
return 'Y';\n } else if (st.SCROLLER.exec(t)) {\n return 'XY';\n
}\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryT
ouch: function(inTouch) {\n return this.firstTouch === inTouch.identifier;\
n },\n setPrimaryTouch: function(inTouch) {\n // set primary touch if
there no pointers, or the only pointer is the mouse\n if (pointermap.point
ers() === 0 || (pointermap.pointers() === 1 && pointermap.has(1))) {\n th
is.firstTouch = inTouch.identifier;\n this.firstXY = {X: inTouch.clientX,
Y: inTouch.clientY};\n this.scrolling = false;\n this.cancelReset
ClickCount();\n }\n },\n removePrimaryPointer: function(inPointer) {\
n if (inPointer.isPrimary) {\n this.firstTouch = null;\n this
.firstXY = null;\n this.resetClickCount();\n }\n },\n clickCou
nt: 0,\n resetId: null,\n resetClickCount: function() {\n var fn = fu
nction() {\n this.clickCount = 0;\n this.resetId = null;\n }.
bind(this);\n this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n
cancelResetClickCount: function() {\n if (this.resetId) {\n clea
rTimeout(this.resetId);\n }\n },\n touchToPointer: function(inTouch)
{\n var e = dispatcher.cloneEvent(inTouch);\n // Spec specifies that p
ointerId 1 is reserved for Mouse.\n // Touch identifiers can start at 0.\n
// Add 2 to the touch identifier for compatibility.\n e.pointerId = in
Touch.identifier + 2;\n e.target = findTarget(e);\n e.bubbles = true;\
n e.cancelable = true;\n e.detail = this.clickCount;\n e.button =
0;\n e.buttons = 1;\n e.width = inTouch.webkitRadiusX || inTouch.radi
usX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n
e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary =
this.isPrimaryTouch(inTouch);\n e.pointerType = this.POINTER_TYPE;\n
return e;\n },\n processTouches: function(inEvent, inFunction) {\n va
r tl = inEvent.changedTouches;\n var pointers = touchMap(tl, this.touchToPo
inter, this);\n // forward touch preventDefaults\n pointers.forEach(fu
nction(p) {\n p.preventDefault = function() {\n this.scrolling =
false;\n this.firstXY = null;\n inEvent.preventDefault();\n
};\n }, this);\n pointers.forEach(inFunction, this);\n },\n
// For single axis scrollers, determines whether the element should emit\n
// pointer events or behave as a scroller\n shouldScroll: function(inEvent) {
\n if (this.firstXY) {\n var ret;\n var scrollAxis = this.scr
ollType.get(inEvent.currentTarget);\n if (scrollAxis === 'none') {\n
// this element is a touch-action: none, should never scroll\n ret
= false;\n } else if (scrollAxis === 'XY') {\n // this element
should always scroll\n ret = true;\n } else {\n var t =
inEvent.changedTouches[0];\n // check the intended scroll axis, and ot
her 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 // i
f delta in the scroll axis > delta other axis, scroll instead of\n // m
aking 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. This\n
// leaves the pointermap in a broken state.\n // Therefore, on every touc
hstart, we remove the touches that did not fire a\n // touchend event.\n /
/ To keep state globally consistent, we fire a\n // pointercancel for this \"
abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = inEven
t.touches;\n // pointermap.pointers() should be < tl.length here, as the to
uchstart has not\n // been processed yet.\n if (pointermap.pointers()
>= tl.length) {\n var d = [];\n pointermap.forEach(function(value,
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(this.touchToPointer(p));\
n }\n }, this);\n d.forEach(this.cancelOut, this);\n
}\n },\n touchstart: function(inEvent) {\n this.vacuumTouches(inEven
t);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSyn
thMouse(inEvent);\n if (!this.scrolling) {\n this.clickCount++;\n
this.processTouches(inEvent, this.overDown);\n }\n },\n overDown
: function(inPointer) {\n var p = pointermap.set(inPointer.pointerId, {\n
target: inPointer.target,\n out: inPointer,\n outTarget: inP
ointer.target\n });\n dispatcher.over(inPointer);\n dispatcher.do
wn(inPointer);\n },\n touchmove: function(inEvent) {\n if (!this.scro
lling) {\n if (this.shouldScroll(inEvent)) {\n this.scrolling =
true;\n this.touchcancel(inEvent);\n } else {\n inEvent
.preventDefault();\n this.processTouches(inEvent, this.moveOverOut);\n
}\n }\n },\n moveOverOut: function(inPointer) {\n var eve
nt = inPointer;\n var pointer = pointermap.get(event.pointerId);\n //
a finger drifted off the screen, ignore it\n if (!pointer) {\n retur
n;\n }\n var outEvent = pointer.out;\n var outTarget = pointer.ou
tTarget;\n dispatcher.move(event);\n if (outEvent && outTarget !== eve
nt.target) {\n outEvent.relatedTarget = event.target;\n event.rela
tedTarget = outTarget;\n // recover from retargeting by shadow\n o
utEvent.target = outTarget;\n if (event.target) {\n dispatcher.l
eaveOut(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(eve
nt);\n }\n }\n pointer.out = event;\n pointer.outTarget =
event.target;\n },\n touchend: function(inEvent) {\n this.dedupSynthM
ouse(inEvent);\n this.processTouches(inEvent, this.upOut);\n },\n upO
ut: function(inPointer) {\n if (!this.scrolling) {\n dispatcher.up(i
nPointer);\n dispatcher.out(inPointer);\n }\n this.cleanUpPoint
er(inPointer);\n },\n touchcancel: function(inEvent) {\n this.process
Touches(inEvent, this.cancelOut);\n },\n cancelOut: function(inPointer) {\
n dispatcher.cancel(inPointer);\n dispatcher.out(inPointer);\n th
is.cleanUpPointer(inPointer);\n },\n cleanUpPointer: function(inPointer) {
\n pointermap['delete'](inPointer.pointerId);\n this.removePrimaryPoin
ter(inPointer);\n },\n // prevent synth mouse events from creating pointer
events\n dedupSynthMouse: function(inEvent) {\n var lts = scope.mouseEv
ents.lastTouches;\n var t = inEvent.changedTouches[0];\n // only the p
rimary finger will synth mouse events\n if (this.isPrimaryTouch(t)) {\n
// remember x/y of last touch\n var lt = {x: t.clientX, y: t.clientY}
;\n lts.push(lt);\n var fn = (function(lts, lt){\n var i
= lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n
}\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);
\n }\n }\n };\n\n if (!HAS_TOUCH_ACTION) {\n INSTALLER = new scope.
Installer(touchEvents.elementAdded, touchEvents.elementRemoved, touchEvents.elem
entChanged, touchEvents);\n }\n\n scope.touchEvents = touchEvents;\n})(window.
PointerEventsPolyfill);\n","/*\n * Copyright 2013 The Polymer Authors. All right
s reserved.\n * Use of this source code is governed by a BSD-style\n * license t
hat can be found in the LICENSE file.\n */\n\n(function(scope) {\n var dispatch
er = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var HAS_BIT
MAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_
MOUSE === 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n
'MSPointerMove',\n 'MSPointerUp',\n 'MSPointerOut',\n 'MSPo
interOver',\n 'MSPointerCancel',\n 'MSGotPointerCapture',\n 'MSLo
stPointerCapture'\n ],\n register: function(target) {\n dispatcher.li
sten(target, this.events);\n },\n unregister: function(target) {\n di
spatcher.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 = t
his.POINTER_TYPES[inEvent.pointerType];\n }\n return e;\n },\n c
leanup: function(id) {\n pointermap['delete'](id);\n },\n MSPointerDo
wn: function(inEvent) {\n pointermap.set(inEvent.pointerId, inEvent);\n
var e = this.prepareEvent(inEvent);\n dispatcher.down(e);\n },\n MS
PointerMove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n
dispatcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var
e = this.prepareEvent(inEvent);\n dispatcher.up(e);\n this.cleanup(inE
vent.pointerId);\n },\n MSPointerOut: function(inEvent) {\n var e = t
his.prepareEvent(inEvent);\n dispatcher.leaveOut(e);\n },\n MSPointer
Over: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n disp
atcher.enterOver(e);\n },\n MSPointerCancel: function(inEvent) {\n va
r e = this.prepareEvent(inEvent);\n dispatcher.cancel(e);\n this.clean
up(inEvent.pointerId);\n },\n MSLostPointerCapture: function(inEvent) {\n
var e = dispatcher.makeEvent('lostpointercapture', inEvent);\n dispatc
her.dispatchEvent(e);\n },\n MSGotPointerCapture: function(inEvent) {\n
var e = dispatcher.makeEvent('gotpointercapture', inEvent);\n dispatcher
.dispatchEvent(e);\n }\n };\n\n scope.msEvents = msEvents;\n})(window.Point
erEventsPolyfill);\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 module contains the handle
rs 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 M
SPointerEvents.\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n
\n // only activate if this platform does not have pointer events\n if (window
.navigator.pointerEnabled === undefined) {\n Object.defineProperty(window.nav
igator, 'pointerEnabled', {value: true, enumerable: true});\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 2012 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// This mo
dule implements an ordered list of pointer states.\n//\n// Each pointer object h
ere has two properties:\n// - id: the id of the pointer\n// - event: the sou
rce event of the pointer, complete with positions\n//\n// The ordering of the po
inters is from oldest pointer to youngest pointer,\n// which allows for multi-po
inter gestures to not rely on the actual ids\n// imported from the source events
.\n//\n// Any operation that needs to store state information about pointers can
hang\n// objects off of the pointer in the pointermap. This information will be
\n// preserved until the pointer is removed from the pointermap.\n\n(function(sc
ope) {\n function PointerMap() {\n this.ids = [];\n this.pointers = [];\n
};\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n va
r i = this.ids.indexOf(inId);\n if (i > -1) {\n this.pointers[i] = i
nEvent;\n } else {\n this.ids.push(inId);\n this.pointers.pus
h(inEvent);\n }\n },\n has: function(inId) {\n return this.ids.i
ndexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.i
ds.indexOf(inId);\n if (i > -1) {\n this.ids.splice(i, 1);\n
this.pointers.splice(i, 1);\n }\n },\n get: function(inId) {\n v
ar i = this.ids.indexOf(inId);\n return this.pointers[i];\n },\n get
size() {\n return this.pointers.length;\n },\n clear: function() {\n
this.ids.length = 0;\n this.pointers.length = 0;\n }\n };\n\n if
(window.Map) {\n PointerMap = window.Map;\n }\n scope.PointerMap = PointerM
ap;\n})(window.PointerGestures);\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 file.\n */\n\n(function(scope) {\n var
CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'vie
w',\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 // e
vent instance\n 'type',\n 'target',\n 'currentTarget',\n 'screenX',\
n 'screenY',\n 'pageX',\n 'pageY',\n 'tapPrevented'\n ];\n\n var C
LONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n null,\n nul
l,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n fals
e,\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 // even
t instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0\n ];\n
\n var dispatcher = {\n handledEvents: new WeakMap(),\n targets: new Weak
Map(),\n handlers: {},\n recognizers: {},\n events: {},\n // Add a n
ew gesture recognizer to the event listeners.\n // Recognizer needs an `event
s` property.\n registerRecognizer: function(inName, inRecognizer) {\n va
r r = inRecognizer;\n this.recognizers[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 this.addHandler(e, f);\n }\n }, th
is);\n },\n addHandler: function(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(inTarget) {\n this.listen(Object.keys(this.even
ts), inTarget);\n },\n // remove event listeners for inTarget\n unregis
terTarget: function(inTarget) {\n this.unlisten(Object.keys(this.events), i
nTarget);\n },\n // LISTENER LOGIC\n eventHandler: function(inEvent) {\
n if (this.handledEvents.get(inEvent)) {\n return;\n }\n v
ar type = inEvent.type, fns = this.handlers[type];\n if (fns) {\n th
is.makeQueue(fns, inEvent);\n }\n this.handledEvents.set(inEvent, true
);\n },\n // queue event for async dispatch\n makeQueue: function(inHan
dlerFns, inEvent) {\n // must clone events to keep the (possibly shadowed)
target correct for\n // async dispatching\n var e = this.cloneEvent(in
Event);\n setTimeout(this.runQueue.bind(this, inHandlerFns, e), 0);\n },
\n // Dispatch the queued events\n runQueue: function(inHandlers, inEvent)
{\n this.currentPointerId = inEvent.pointerId;\n for (var i = 0, f, l
= inHandlers.length; (i < l) && (f = inHandlers[i]); i++) {\n f(inEvent)
;\n }\n this.currentPointerId = 0;\n },\n // set up event listen
ers\n listen: function(inEvents, inTarget) {\n inEvents.forEach(function
(e) {\n this.addEvent(e, this.boundHandler, false, inTarget);\n }, t
his);\n },\n // remove event listeners\n unlisten: function(inEvents) {
\n inEvents.forEach(function(e) {\n this.removeEvent(e, this.boundHa
ndler, false, inTarget);\n }, this);\n },\n addEvent: function(inEven
tName, inEventHandler, inCapture, inTarget) {\n inTarget.addEventListener(i
nEventName, inEventHandler, inCapture);\n },\n removeEvent: function(inEve
ntName, inEventHandler, inCapture, inTarget) {\n inTarget.removeEventListen
er(inEventName, inEventHandler, inCapture);\n },\n // EVENT CREATION AND T
RACKING\n // Creates a new Event of type `inType`, based on the information i
n\n // `inEvent`.\n makeEvent: function(inType, inDict) {\n return ne
w PointerGestureEvent(inType, inDict);\n },\n /*\n * Returns a snapsho
t of inEvent, with writable properties.\n *\n * @method cloneEvent\n
* @param {Event} inEvent An event that contains properties to copy.\n * @re
turn {Object} An object containing shallow copies of `inEvent`'s\n * prop
erties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = {},
p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PRO
PS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n }\n
return eventCopy;\n },\n // Dispatches the event to its target.\n dispa
tchEvent: function(inEvent, inTarget) {\n var t = inTarget || this.targets.
get(inEvent);\n if (t) {\n t.dispatchEvent(inEvent);\n if (in
Event.tapPrevented) {\n this.preventTap(this.currentPointerId);\n
}\n }\n },\n asyncDispatchEvent: function(inEvent, inTarget) {\n
var fn = function() {\n this.dispatchEvent(inEvent, inTarget);\n
}.bind(this);\n setTimeout(fn, 0);\n },\n preventTap: function(inPoin
terId) {\n var t = this.recognizers.tap;\n if (t){\n t.preventT
ap(inPointerId);\n }\n }\n };\n dispatcher.boundHandler = dispatcher.e
ventHandler.bind(dispatcher);\n scope.dispatcher = dispatcher;\n var registerQ
ueue = [];\n var immediateRegister = false;\n /**\n * Enable gesture events
for a given scope, typically\n * [ShadowRoots](https://dvcs.w3.org/hg/webcompo
nents/raw-file/tip/spec/shadow/index.html#shadow-root-object).\n *\n * @for
PointerGestures\n * @method register\n * @param {ShadowRoot} scope A top lev
el scope to enable gesture\n * support on.\n */\n scope.register = function
(inScope) {\n if (immediateRegister) {\n var pe = window.PointerEventsPo
lyfill;\n if (pe) {\n pe.register(inScope);\n }\n scope.di
spatcher.registerTarget(inScope);\n } else {\n registerQueue.push(inScop
e);\n }\n };\n // wait to register scopes until recognizers load\n documen
t.addEventListener('DOMContentLoaded', function() {\n immediateRegister = tru
e;\n registerQueue.push(document);\n registerQueue.forEach(scope.register)
;\n });\n})(window.PointerGestures);\n","/*\n * Copyright 2013 The Polymer Auth
ors. 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 * This event i
s fired when a pointer is held down for 200ms.\n *\n * @module PointerGestures\n
* @submodule Events\n * @class hold\n */\n/**\n * Milliseconds pointer has been
held down.\n * @type Number\n * @property holdTime\n */\n/**\n * Type of pointe
r that made the holding event.\n * @type String\n * @property pointerType\n */\n
/**\n * This event is fired every 200ms while a pointer is held down.\n *\n * @c
lass holdpulse\n * @extends hold\n */\n/**\n * This event is fired when a held p
ointer is released or moved.\n *\n * @class released\n */\n/**\n * Type of point
er that made the holding event.\n * @type String\n * @property pointerType\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: 2
00,\n // pointer can move WIGGLE_THRESHOLD pixels before not counting as a ho
ld\n WIGGLE_THRESHOLD: 16,\n events: [\n 'pointerdown',\n 'point
ermove',\n 'pointerup',\n 'pointercancel'\n ],\n heldPointer: nu
ll,\n holdJob: null,\n pulse: function() {\n var hold = Date.now() -
this.heldPointer.timeStamp;\n var type = this.held ? 'holdpulse' : 'hold';\
n this.fireHold(type, hold);\n this.held = true;\n },\n cancel:
function() {\n clearInterval(this.holdJob);\n if (this.held) {\n
this.fireHold('release');\n }\n this.held = false;\n this.heldP
ointer = null;\n this.target = null;\n this.holdJob = null;\n },\n
pointerdown: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPo
inter) {\n this.heldPointer = inEvent;\n this.target = inEvent.tar
get;\n this.holdJob = setInterval(this.pulse.bind(this), this.HOLD_DELAY)
;\n }\n },\n pointerup: function(inEvent) {\n if (this.heldPoint
er && this.heldPointer.pointerId === inEvent.pointerId) {\n this.cancel()
;\n }\n },\n pointercancel: function(inEvent) {\n this.cancel();
\n },\n pointermove: function(inEvent) {\n if (this.heldPointer && th
is.heldPointer.pointerId === inEvent.pointerId) {\n var x = inEvent.clien
tX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.heldPoint
er.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n t
his.cancel();\n }\n }\n },\n fireHold: function(inType, inHold
Time) {\n var p = {\n pointerType: this.heldPointer.pointerType\n
};\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n
var e = dispatcher.makeEvent(inType, p);\n dispatcher.dispatchEvent(e, thi
s.target);\n if (e.tapPrevented) {\n dispatcher.preventTap(this.held
Pointer.pointerId);\n }\n }\n };\n dispatcher.registerRecognizer('hold
', hold);\n})(window.PointerGestures);\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 event
denotes the beginning of a series of tracking events.\n *\n * @module PointerGes
tures\n * @submodule Events\n * @class trackstart\n */\n/**\n * Pixels moved in
the x direction since trackstart.\n * @type Number\n * @property dx\n */\n/**\n
* Pixes moved in the y direction since trackstart.\n * @type Number\n * @propert
y dy\n */\n/**\n * Pixels moved in the x direction since the last track.\n * @ty
pe Number\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since
the last track.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX pos
ition of the track gesture.\n * @type Number\n * @property clientX\n */\n/**\n *
The clientY position of the track gesture.\n * @type Number\n * @property clien
tY\n */\n/**\n * The pageX position of the track gesture.\n * @type Number\n * @
property pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type
Number\n * @property pageY\n */\n/**\n * The screenX position of the track gestu
re.\n * @type Number\n * @property screenX\n */\n/**\n * The screenY position of
the track gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The las
t x axis direction of the pointer.\n * @type Number\n * @property xDirection\n *
/\n/**\n * The last y axis direction of the pointer.\n * @type Number\n * @prope
rty yDirection\n */\n/**\n * A shared object between all tracking events.\n * @t
ype Object\n * @property trackInfo\n */\n/**\n * The element currently under the
pointer.\n * @type Element\n * @property relatedTarget\n */\n/**\n * The type o
f pointer that make the track gesture.\n * @type String\n * @property pointerTyp
e\n */\n/**\n *\n * This event fires for all pointer movement being tracked.\n *
\n * @class track\n * @extends trackstart\n */\n/**\n * This event fires when th
e pointer is no longer being tracked.\n *\n * @class trackend\n * @extends track
start\n */\n\n (function(scope) {\n var dispatcher = scope.dispatcher;\n var
pointermap = new scope.PointerMap();\n var track = {\n events: [\n
'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointercance
l'\n ],\n WIGGLE_THRESHOLD: 4,\n clampDir: function(inDelta) {\n
return inDelta > 0 ? 1 : -1;\n },\n calcPositionDelta: function(inA,
inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.pag
eX - inA.pageX;\n y = inB.pageY - inA.pageY;\n }\n return {x
: x, y: y};\n },\n fireTrack: function(inType, inEvent, inTrackingData)
{\n var t = inTrackingData;\n var d = this.calcPositionDelta(t.downE
vent, inEvent);\n var dd = this.calcPositionDelta(t.lastMoveEvent, inEvent
);\n if (dd.x) {\n t.xDirection = this.clampDir(dd.x);\n }\n
if (dd.y) {\n t.yDirection = this.clampDir(dd.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: inEv
ent.clientY,\n pageX: inEvent.pageX,\n pageY: inEvent.pageY,\n
screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n x
Direction: t.xDirection,\n yDirection: t.yDirection,\n trackInfo
: t.trackInfo,\n relatedTarget: inEvent.target,\n pointerType: i
nEvent.pointerType\n };\n var e = dispatcher.makeEvent(inType, track
Data);\n t.lastMoveEvent = inEvent;\n dispatcher.dispatchEvent(e, t.
downTarget);\n },\n pointerdown: function(inEvent) {\n if (inEvent
.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 : true))
{\n var p = {\n downEvent: inEvent,\n downTarget: in
Event.target,\n trackInfo: {},\n lastMoveEvent: 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 = pointermap.get(inEvent.pointe
rId);\n if (p) {\n if (!p.tracking) {\n var d = this.cal
cPositionDelta(p.downEvent, inEvent);\n var move = d.x * d.x + d.y * d
.y;\n // start tracking only if finger moves more than WIGGLE_THRESHOL
D\n if (move > this.WIGGLE_THRESHOLD) {\n p.tracking = tru
e;\n this.fireTrack('trackstart', p.downEvent, p);\n thi
s.fireTrack('track', inEvent, p);\n }\n } else {\n t
his.fireTrack('track', inEvent, p);\n }\n }\n },\n pointer
up: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n
if (p) {\n if (p.tracking) {\n this.fireTrack('trackend', i
nEvent, p);\n }\n pointermap.delete(inEvent.pointerId);\n
}\n },\n pointercancel: function(inEvent) {\n this.pointerup(inEve
nt);\n }\n };\n dispatcher.registerRecognizer('track', track);\n })(wind
ow.PointerGestures);\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/**\n * This event denotes a rapid do
wn/move/up sequence from a pointer.\n *\n * The event is sent to the first eleme
nt the pointer went down on.\n *\n * @module PointerGestures\n * @submodule Even
ts\n * @class flick\n */\n/**\n * Signed velocity of the flick in the x directio
n.\n * @property xVelocity\n * @type Number\n */\n/**\n * Signed velocity of the
flick in the y direction.\n * @type Number\n * @property yVelocity\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 the\n * positive x axi
s.\n * @type Number\n * @property angle\n */\n/**\n * Axis with the greatest abs
olute velocity. Denoted\n * with 'x' or 'y'.\n * @type String\n * @property majo
rAxis\n */\n/**\n * Type of the pointer that made the flick.\n * @type String\n
* @property pointerType\n */\n\n(function(scope) {\n var dispatcher = scope.dis
patcher;\n var flick = {\n // TODO(dfreedman): value should be low enough fo
r low speed flicks, but\n // high enough to remove accidental flicks\n MIN
_VELOCITY: 0.5 /* px/ms */,\n MAX_QUEUE: 4,\n moveQueue: [],\n target:
null,\n pointerId: null,\n events: [\n 'pointerdown',\n 'pointer
move',\n 'pointerup',\n 'pointercancel'\n ],\n pointerdown: func
tion(inEvent) {\n if (inEvent.isPrimary && !this.pointerId) {\n this
.pointerId = inEvent.pointerId;\n this.target = inEvent.target;\n
this.addMove(inEvent);\n }\n },\n pointermove: function(inEvent) {\n
if (inEvent.pointerId === this.pointerId) {\n this.addMove(inEvent);
\n }\n },\n pointerup: function(inEvent) {\n if (inEvent.pointer
Id === 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.tar
get = null;\n this.pointerId = null;\n },\n addMove: function(inEvent
) {\n if (this.moveQueue.length >= this.MAX_QUEUE) {\n this.moveQueu
e.shift();\n }\n this.moveQueue.push(inEvent);\n },\n fireFlick:
function(inEvent) {\n var e = inEvent;\n var l = this.moveQueue.lengt
h;\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 = thi
s.moveQueue[i]); i++) {\n dt = e.timeStamp - m.timeStamp;\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 = Math.abs(x) > Math.abs(y
) ? 'x' : 'y';\n var a = this.calcAngle(x, y);\n if (Math.abs(v) >= th
is.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: inEvent.pointerType\n
});\n dispatcher.dispatchEvent(ev, this.target);\n }\n },\n
calcAngle: function(inX, inY) {\n return (Math.atan2(inY, inX) * 180 / Mat
h.PI);\n }\n };\n dispatcher.registerRecognizer('flick', flick);\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 quickly goes down and up, and is used to\n * denote activation.\n *\n * Any
gesture event can prevent the tap event from being created by calling\n * `event
.preventTap`.\n *\n * Any pointer event can prevent the tap by setting the `tapP
revented` 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 axis position of the tap.\n * @property y\n *
@type Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property
pointerType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.
dispatcher;\n var pointermap = new scope.PointerMap();\n var tap = {\n even
ts: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'po
intercancel',\n 'keyup'\n ],\n pointerdown: function(inEvent) {\n
if (inEvent.isPrimary && !inEvent.tapPrevented) {\n pointermap.set(inEv
ent.pointerId, {\n target: inEvent.target,\n x: inEvent.client
X,\n y: inEvent.clientY\n });\n }\n },\n pointermove:
function(inEvent) {\n if (inEvent.isPrimary) {\n var start = pointe
rmap.get(inEvent.pointerId);\n if (start) {\n if (inEvent.tapPre
vented) {\n pointermap.delete(inEvent.pointerId);\n }\n
}\n }\n },\n pointerup: function(inEvent) {\n var start = poi
ntermap.get(inEvent.pointerId);\n if (start && !inEvent.tapPrevented) {\n
var t = scope.findLCA(start.target, inEvent.target);\n if (t) {\n
var e = dispatcher.makeEvent('tap', {\n x: inEvent.clientX,\n
y: inEvent.clientY,\n detail: inEvent.detail,\n
pointerType: inEvent.pointerType\n });\n dispatcher.dispatch
Event(e, t);\n }\n }\n pointermap.delete(inEvent.pointerId);\n
},\n pointercancel: function(inEvent) {\n pointermap.delete(inEvent.p
ointerId);\n },\n keyup: function(inEvent) {\n var code = inEvent.key
Code;\n // 32 == spacebar\n if (code === 32) {\n var t = inEven
t.target;\n if (!(t instanceof HTMLInputElement || t instanceof HTMLTextA
reaElement)) {\n dispatcher.dispatchEvent(dispatcher.makeEvent('tap', {
\n x: 0,\n y: 0,\n detail: 0,\n poin
terType: 'unavailable'\n }), t);\n }\n }\n },\n preve
ntTap: function(inPointerId) {\n pointermap.delete(inPointerId);\n }\n
};\n dispatcher.registerRecognizer('tap', tap);\n})(window.PointerGestures);\n"
,"// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Versi
on 2.0 (the \"License\");\n// you may not use this file except in compliance wit
h the License.\n// You may obtain a copy of the License at\n//\n// http://ww
w.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or a
greed to in writing, software\n// distributed under the License is distributed o
n an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either e
xpress or implied.\n// See the License for the specific language governing permi
ssions and\n// limitations under the License.\n\n(function(global) {\n 'use str
ict';\n\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter)
;\n\n function getTreeScope(node) {\n while (node.parentNode) {\n node
= node.parentNode;\n }\n\n return typeof node.getElementById === 'function
' ? node : null;\n }\n\n // JScript does not have __proto__. We wrap all objec
t literals with\n // createObject which uses Object.create, Object.defineProper
ty and\n // Object.getOwnPropertyDescriptor to create a new object that does th
e 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 = ('__p
roto__' 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.getOwnPropertyName
s(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 hav
e 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.documentEleme
nt.contains(node);\n }\n }\n\n Node.prototype.bind = function(name, model,
path) {\n console.error('Unhandled binding to Node: ', this, name, model, pat
h);\n };\n\n Node.prototype.unbind = function(name) {\n if (!this.bindings)
\n this.bindings = {};\n var binding = this.bindings[name];\n if (!bi
nding)\n return;\n if (typeof binding.close === 'function')\n bindi
ng.close();\n this.bindings[name] = undefined;\n };\n\n Node.prototype.unbi
ndAll = function() {\n if (!this.bindings)\n return;\n var names = Ob
ject.keys(this.bindings);\n for (var i = 0; i < names.length; i++) {\n v
ar binding = this.bindings[names[i]];\n if (binding)\n binding.close
();\n }\n\n this.bindings = {};\n };\n\n var valuePath = Path.get('value
');\n\n function NodeBinding(node, property, model, path) {\n this.closed =
false;\n this.node = node;\n this.property = property;\n this.model = m
odel;\n this.path = Path.get(path);\n if ((this.model instanceof PathObser
ver ||\n this.model instanceof CompoundPathObserver) &&\n this.p
ath === valuePath) {\n this.observer = this.model;\n this.observer.tar
get = this;\n this.observer.callback = this.valueChanged;\n } else {\n
this.observer = new PathObserver(this.model, this.path,\n
this.valueChanged,\n t
his);\n }\n this.valueChanged(this.value);\n }\n\n NodeBinding.prototype
= {\n valueChanged: function(value) {\n this.node[this.property] = this
.sanitizeBoundValue(value);\n },\n\n sanitizeBoundValue: function(value) {
\n return value == undefined ? '' : String(value);\n },\n\n close: fu
nction() {\n if (this.closed)\n return;\n this.observer.close()
;\n this.observer = undefined;\n this.node = undefined;\n this.mo
del = undefined;\n this.closed = true;\n },\n\n get value() {\n
return this.observer.value;\n },\n\n set value(value) {\n this.observ
er.setValue(value);\n },\n\n reset: function() {\n this.observer.rese
t();\n }\n };\n\n Text.prototype.bind = function(name, model, path) {\n
if (name !== 'textContent')\n return Node.prototype.bind.call(this, name, m
odel, path);\n\n this.unbind(name);\n return this.bindings[name] = new Nod
eBinding(this, 'data', model, path);\n }\n\n function AttributeBinding(element
, attributeName, model, path) {\n this.conditional = attributeName[attributeN
ame.length - 1] == '?';\n if (this.conditional) {\n element.removeAttrib
ute(attributeName);\n attributeName = attributeName.slice(0, -1);\n }\n\
n NodeBinding.call(this, element, attributeName, model, path);\n }\n\n Attr
ibuteBinding.prototype = createObject({\n __proto__: NodeBinding.prototype,\n
\n valueChanged: function(value) {\n if (this.conditional) {\n if
(value)\n this.node.setAttribute(this.property, '');\n else\n
this.node.removeAttribute(this.property);\n return;\n }\n\n
this.node.setAttribute(this.property, this.sanitizeBoundValue(value));\n
}\n });\n\n Element.prototype.bind = function(name, model, path) {\n this.
unbind(name);\n return this.bindings[name] = new AttributeBinding(this, name,
model, path);\n };\n\n var checkboxEventType;\n (function() {\n // Attemp
t to feature-detect which event (change or click) is fired first\n // for che
ckboxes.\n var div = document.createElement('div');\n var checkbox = div.a
ppendChild(document.createElement('input'));\n checkbox.setAttribute('type',
'checkbox');\n var first;\n var count = 0;\n checkbox.addEventListener(
'click', function(e) {\n count++;\n first = first || 'click';\n });
\n checkbox.addEventListener('change', function() {\n count++;\n fi
rst = first || 'change';\n });\n\n var event = document.createEvent('Mouse
Event');\n event.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0,
false,\n false, false, false, 0, null);\n checkbox.dispatchEvent(even
t);\n // WebKit/Blink don't fire the change event if the element is outside t
he\n // document, so assume 'change' for that case.\n checkboxEventType =
count == 1 ? 'change' : first;\n })();\n\n function getEventForInputType(eleme
nt) {\n switch (element.type) {\n case 'checkbox':\n return check
boxEventType;\n case 'radio':\n case 'select-multiple':\n case 's
elect-one':\n return 'change';\n default:\n return 'input';\n
}\n }\n\n function InputBinding(node, property, model, path) {\n NodeBi
nding.call(this, node, property, model, path);\n this.eventType = getEventFor
InputType(this.node);\n this.boundNodeValueChanged = this.nodeValueChanged.bi
nd(this);\n this.node.addEventListener(this.eventType, this.boundNodeValueCha
nged,\n true);\n }\n\n InputBinding.prototype =
createObject({\n __proto__: NodeBinding.prototype,\n\n nodeValueChanged: f
unction() {\n this.value = this.node[this.property];\n this.reset();\n
this.postUpdateBinding();\n Platform.performMicrotaskCheckpoint();\n
},\n\n postUpdateBinding: function() {},\n\n close: function() {\n
if (this.closed)\n return;\n\n this.node.removeEventListener(this.e
ventType,\n this.boundNodeValueChanged,\n
true);\n NodeBinding.prototype.close.call(t
his);\n }\n });\n\n // |element| is assumed to be an HTMLInputElement with
|type| == 'radio'.\n // Returns an array containing all radio buttons other tha
n |element| that\n // have the same |name|, either in the form that |element| b
elongs to or,\n // if no form, in the document tree to which |element| belongs.
\n //\n // This implementation is based upon the HTML spec definition of a\n
// \"radio button group\":\n // http://www.whatwg.org/specs/web-apps/current-
work/multipage/number-state.html#radio-button-group\n //\n function getAssocia
tedRadioButtons(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 = getTreeScope(elem
ent);\n if (!treeScope)\n return [];\n var radios = treeScope.q
uerySelectorAll(\n 'input[type=\"radio\"][name=\"' + element.name + '\"
]');\n return filter(radios, function(el) {\n return el != element &
& !el.form;\n });\n }\n }\n\n function CheckedBinding(element, model,
path) {\n InputBinding.call(this, element, 'checked', model, path);\n }\n\n
CheckedBinding.prototype = createObject({\n __proto__: InputBinding.prototyp
e,\n\n sanitizeBoundValue: function(value) {\n return Boolean(value);\n
},\n\n postUpdateBinding: function() {\n // Only the radio button tha
t is getting checked gets an event. We\n // therefore find all the associat
ed radio buttons and update their\n // CheckedBinding manually.\n if (
this.node.tagName === 'INPUT' &&\n this.node.type === 'radio') {\n
getAssociatedRadioButtons(this.node).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.value = false;\n }\n });\n }\n }\n });\n
\n HTMLInputElement.prototype.bind = function(name, model, path) {\n if (nam
e !== 'value' && name !== 'checked')\n return HTMLElement.prototype.bind.ca
ll(this, name, model, path);\n\n this.unbind(name);\n this.removeAttribute
(name);\n return this.bindings[name] = name === 'value' ?\n new InputB
inding(this, 'value', model, path) :\n new CheckedBinding(this, model, pa
th);\n }\n\n HTMLTextAreaElement.prototype.bind = function(name, model, path)
{\n if (name !== 'value')\n return HTMLElement.prototype.bind.call(this,
name, model, path);\n\n this.unbind(name);\n this.removeAttribute(name);\
n return this.bindings[name] = new InputBinding(this, name, model, path);\n
}\n\n function OptionValueBinding(element, model, path) {\n InputBinding.cal
l(this, element, 'value', model, path);\n }\n\n OptionValueBinding.prototype =
createObject({\n __proto__: InputBinding.prototype,\n\n valueChanged: fun
ction(value) {\n var select = this.node.parentNode instanceof HTMLSelectEle
ment ?\n this.node.parentNode : undefined;\n var selectBinding;\n
var oldValue;\n if (select &&\n select.bindings &&\n
select.bindings.value instanceof SelectBinding) {\n selectBinding = sele
ct.bindings.value;\n oldValue = select.value;\n }\n\n InputBind
ing.prototype.valueChanged.call(this, value);\n if (selectBinding && !selec
tBinding.closed && select.value !== oldValue)\n selectBinding.nodeValueCh
anged();\n }\n });\n\n HTMLOptionElement.prototype.bind = function(name, mo
del, path) {\n if (name !== 'value')\n return HTMLElement.prototype.bind
.call(this, name, model, path);\n\n this.unbind(name);\n this.removeAttrib
ute(name);\n return this.bindings[name] = new OptionValueBinding(this, model,
path);\n }\n\n function SelectBinding(element, property, model, path) {\n
InputBinding.call(this, element, property, model, path);\n }\n\n SelectBinding
.prototype = createObject({\n __proto__: InputBinding.prototype,\n\n value
Changed: function(value) {\n this.node[this.property] = value;\n if (t
his.node[this.property] == value)\n return;\n\n // The binding may w
ish to bind to an <option> which has not yet been\n // produced by a child
<template>. Delay a maximum of two times: once for\n // each of <optgroup>
and <option>\n var maxRetries = 2;\n var self = this;\n function
delaySetSelectedIndex() {\n self.node[self.property] = value;\n if
(self.node[self.property] != value && maxRetries--)\n ensureScheduled(
delaySetSelectedIndex);\n }\n ensureScheduled(delaySetSelectedIndex);\
n }\n });\n\n HTMLSelectElement.prototype.bind = function(name, model, path
) {\n if (name === 'selectedindex')\n name = 'selectedIndex';\n\n if
(name !== 'selectedIndex' && name !== 'value')\n return HTMLElement.prototy
pe.bind.call(this, name, model, path);\n\n this.unbind(name);\n this.remov
eAttribute(name);\n return this.bindings[name] = new SelectBinding(this, name
, model, path);\n }\n\n // TODO(rafaelw): We should polyfill a Microtask Promi
se and define it if it isn't.\n var ensureScheduled = function() {\n // We n
eed to ping-pong between two Runners in order for the tests to\n // simulate
proper end-of-microtask behavior for Object.observe. Without\n // this, we'll
continue delivering to a single observer without allowing\n // other observe
rs in the same microtask to make progress.\n\n function Runner(nextRunner) {\
n this.nextRunner = nextRunner;\n this.value = false;\n this.last
Value = this.value;\n this.scheduled = [];\n this.scheduledIds = [];\n
this.running = false;\n this.observer = new PathObserver(this, 'value
', this.run, this);\n }\n\n Runner.prototype = {\n schedule: function
(async, id) {\n if (this.scheduledIds[id])\n return;\n\n
if (this.running)\n return this.nextRunner.schedule(async, id);\n\n
this.scheduledIds[id] = true;\n this.scheduled.push(async);\n\n
if (this.lastValue !== this.value)\n return;\n\n this.value =
!this.value;\n },\n\n run: function() {\n this.running = true;\
n\n for (var i = 0; i < this.scheduled.length; i++) {\n var asyn
c = this.scheduled[i];\n var id = async[idExpando];\n this.sch
eduledIds[id] = false;\n\n if (typeof async === 'function')\n
async();\n else\n async.resolve();\n }\n\n t
his.scheduled = [];\n this.scheduledIds = [];\n this.lastValue = t
his.value;\n\n this.running = false;\n }\n }\n\n var runner =
new Runner(new Runner());\n\n var nextId = 1;\n var idExpando = '__schedul
edId__';\n\n function ensureScheduled(async) {\n var id = async[idExpand
o];\n if (!async[idExpando]) {\n id = nextId++;\n async[idExp
ando] = id;\n }\n\n runner.schedule(async, id);\n }\n\n return e
nsureScheduled;\n }();\n\n})(this);\n","// Copyright 2011 Google Inc.\n//\n// L
icensed 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 agreed to in writing, software\n// distrib
uted under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANT
IES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License fo
r the specific language governing permissions and\n// limitations under the Lice
nse.\n\n(function(global) {\n 'use strict';\n\n function assert(v) {\n if (
!v)\n throw new Error('Assertion failed');\n }\n\n var forEach = Array.pr
ototype.forEach.call.bind(Array.prototype.forEach);\n\n function getTreeScope(n
ode) {\n while (node.parentNode) {\n node = node.parentNode;\n }\n\n
return typeof node.getElementById === 'function' ? 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: functio
n(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(ke
y);\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.k
eys.length; i++)\n f.call(opt_this || this, this.values[i], this.keys[i
], this);\n }\n };\n }\n\n // JScript does not have __proto__. We wrap
all object literals with\n // createObject which uses Object.create, Object.de
fineProperty and\n // Object.getOwnPropertyDescriptor to create a new object th
at does the exact\n // same thing. The main downside to this solution is that w
e have to extract\n // all those property descriptors for IE.\n var createObje
ct = ('__proto__' in {}) ?\n function(obj) { return obj; } :\n functio
n(obj) {\n var proto = obj.__proto__;\n if (!proto)\n ret
urn obj;\n var newObject = Object.create(proto);\n Object.getOwnPr
opertyNames(obj).forEach(function(name) {\n Object.defineProperty(newOb
ject, name,\n Object.getOwnPropertyDescriptor(obj,
name));\n });\n return newObject;\n };\n\n // IE does not s
upport have Document.prototype.contains.\n if (typeof document.contains != 'fun
ction') {\n Document.prototype.contains = function(node) {\n if (node ==
= this || node.parentNode === this)\n return true;\n return this.doc
umentElement.contains(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT =
'repeat';\n var IF = 'if';\n\n var templateAttributeDirectives = {\n 'temp
late': true,\n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n
var semanticTemplateElements = {\n 'THEAD': true,\n 'TBODY': true,\n '
TFOOT': true,\n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'COLGROUP'
: true,\n 'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGR
OUP': true\n };\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'u
ndefined';\n\n var allTemplatesSelectors = 'template, ' +\n Object.keys(se
manticTemplateElements).map(function(tagName) {\n return tagName.toLowerC
ase() + '[template]';\n }).join(', ');\n\n function isAttributeTemplate(el
) {\n return semanticTemplateElements[el.tagName] &&\n el.hasAttribute
('template');\n }\n\n function isTemplate(el) {\n return el.tagName == 'TEM
PLATE' || isAttributeTemplate(el);\n }\n\n function isNativeTemplate(el) {\n
return hasTemplateElement && el.tagName == 'TEMPLATE';\n }\n\n var ensureSch
eduled = function() {\n // We need to ping-pong between two Runners in order
for the tests to\n // simulate proper end-of-microtask behavior for Object.ob
serve. Without\n // this, we'll continue delivering to a single observer with
out allowing\n // other observers in the same microtask to make progress.\n\n
function Runner(nextRunner) {\n this.nextRunner = nextRunner;\n th
is.value = false;\n this.lastValue = this.value;\n this.scheduled = []
;\n this.scheduledIds = [];\n this.running = false;\n this.observ
er = new PathObserver(this, 'value', this.run, this);\n }\n\n Runner.proto
type = {\n schedule: function(async, id) {\n if (this.scheduledIds[i
d])\n return;\n\n if (this.running)\n return this.nextR
unner.schedule(async, id);\n\n this.scheduledIds[id] = true;\n thi
s.scheduled.push(async);\n\n if (this.lastValue !== this.value)\n
return;\n\n this.value = !this.value;\n },\n\n run: function(
) {\n this.running = true;\n\n for (var i = 0; i < this.scheduled.
length; i++) {\n var async = this.scheduled[i];\n var id = asy
nc[idExpando];\n this.scheduledIds[id] = false;\n\n if (typeof
async === 'function')\n async();\n else\n async.
resolve();\n }\n\n this.scheduled = [];\n this.scheduledIds
= [];\n this.lastValue = this.value;\n\n this.running = false;\n
}\n }\n\n var runner = new Runner(new Runner());\n\n var nextId =
1;\n var idExpando = '__scheduledId__';\n\n function ensureScheduled(async
) {\n var id = async[idExpando];\n if (!async[idExpando]) {\n i
d = nextId++;\n async[idExpando] = id;\n }\n\n runner.schedule(
async, id);\n }\n\n return ensureScheduled;\n }();\n\n // FIXME: Observe
templates being added/removed from documents\n // FIXME: Expose imperative API
to decorate and observe templates in\n // \"disconnected tress\" (e.g. ShadowR
oot)\n document.addEventListener('DOMContentLoaded', function(e) {\n bootstr
apTemplatesRecursivelyFrom(document);\n // FIXME: Is this needed? Seems like
it shouldn't be.\n Platform.performMicrotaskCheckpoint();\n }, false);\n\n
function forAllTemplatesFrom(node, fn) {\n var subTemplates = node.querySelec
torAll(allTemplatesSelectors);\n\n if (isTemplate(node))\n fn(node)\n
forEach(subTemplates, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom
(node) {\n function bootstrap(template) {\n if (!HTMLTemplateElement.dec
orate(template))\n bootstrapTemplatesRecursivelyFrom(template.content);\n
}\n\n forAllTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTemplateEle
ment) {\n /**\n * This represents a <template> element.\n * @construc
tor\n * @extends {HTMLElement}\n */\n global.HTMLTemplateElement = fu
nction() {\n throw TypeError('Illegal constructor');\n };\n }\n\n var
hasProto = '__proto__' in {};\n\n function mixin(to, from) {\n Object.getOwn
PropertyNames(from).forEach(function(name) {\n Object.defineProperty(to, na
me,\n Object.getOwnPropertyDescriptor(from, name));\n
});\n }\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templ
ates/index.html#dfn-template-contents-owner\n function getOrCreateTemplateConte
ntsOwner(template) {\n var doc = template.ownerDocument\n if (!doc.default
View)\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.t
emplateContentsOwner_ = d;\n }\n return d;\n }\n\n function getTemplateS
tagingDocument(template) {\n if (!template.stagingDocument_) {\n var own
er = template.ownerDocument;\n if (!owner.stagingDocument_) {\n owne
r.stagingDocument_ = owner.implementation.createHTMLDocument('');\n owner
.stagingDocument_.stagingDocument_ = owner.stagingDocument_;\n }\n\n t
emplate.stagingDocument_ = owner.stagingDocument_;\n }\n\n return template
.stagingDocument_;\n }\n\n // For non-template browsers, the parser will disal
low <template> in certain\n // locations, so we allow \"attribute templates\" w
hich combine the template\n // element with the top-level container node of the
content, e.g.\n //\n // <tr template repeat=\"{{ foo }}\"\" class=\"bar\"><
td>Bar</td></tr>\n //\n // becomes\n //\n // <template repeat=\"{{ foo }}\
">\n // + #document-fragment\n // + <tr class=\"bar\">\n // + <td
>Bar</td>\n //\n function extractTemplateFromAttributeTemplate(el) {\n var
template = el.ownerDocument.createElement('template');\n el.parentNode.insert
Before(template, el);\n\n var attribs = el.attributes;\n var count = attri
bs.length;\n while (count-- > 0) {\n var attrib = attribs[count];\n
if (templateAttributeDirectives[attrib.name]) {\n if (attrib.name !== 't
emplate')\n template.setAttribute(attrib.name, attrib.value);\n
el.removeAttribute(attrib.name);\n }\n }\n\n return template;\n }\n\
n function liftNonNativeTemplateChildrenIntoContent(template, el, useRoot) {\n
var content = template.content;\n if (useRoot) {\n content.appendChil
d(el);\n return;\n }\n\n var child;\n while (child = el.firstChild
) {\n content.appendChild(child);\n }\n }\n\n /**\n * Ensures proper
API and content model 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 s
ource when createInstance() is invoked.\n */\n HTMLTemplateElement.decorate =
function(el, opt_instanceRef) {\n if (el.templateIsDecorated_)\n return
false;\n\n var templateElement = el;\n templateElement.templateIsDecorate
d_ = true;\n\n var isNative = isNativeTemplate(templateElement);\n var boo
tstrapContents = isNative;\n var liftContents = !isNative;\n var liftRoot
= false;\n\n if (!isNative && isAttributeTemplate(templateElement)) {\n
assert(!opt_instanceRef);\n templateElement = extractTemplateFromAttributeT
emplate(el);\n templateElement.templateIsDecorated_ = true;\n\n isNati
ve = isNativeTemplate(templateElement);\n liftRoot = true;\n }\n\n if
(!isNative) {\n fixTemplateElementPrototype(templateElement);\n var d
oc = getOrCreateTemplateContentsOwner(templateElement);\n templateElement.c
ontent_ = doc.createDocumentFragment();\n }\n\n if (opt_instanceRef) {\n
// template is contained within an instance, its direct content must be\n
// empty\n templateElement.instanceRef_ = opt_instanceRef;\n } else i
f (liftContents) {\n liftNonNativeTemplateChildrenIntoContent(templateEleme
nt,\n el,\n
liftRoot);\n } else if (bootstrapContents) {\n b
ootstrapTemplatesRecursivelyFrom(templateElement.content);\n }\n\n return
true;\n };\n\n // TODO(rafaelw): This used to decorate recursively all templat
es from a given\n // node. This happens by default on 'DOMContentLoaded', but m
ay be needed\n // in subtrees not descendent from document (e.g. ShadowRoot).\n
// Review whether this is the right public API.\n HTMLTemplateElement.bootstr
ap = bootstrapTemplatesRecursivelyFrom;\n\n var htmlElement = global.HTMLUnknow
nElement || HTMLElement;\n\n var contentDescriptor = {\n get: function() {\n
return this.content_;\n },\n enumerable: true,\n configurable: tr
ue\n };\n\n if (!hasTemplateElement) {\n // Gecko is more picky with the pr
ototype than WebKit. Make sure to use the\n // same prototype as created in t
he constructor.\n HTMLTemplateElement.prototype = Object.create(htmlElement.p
rototype);\n\n Object.defineProperty(HTMLTemplateElement.prototype, 'content'
,\n contentDescriptor);\n }\n\n function fixTemplateE
lementPrototype(el) {\n // Note: because we need to treat some semantic eleme
nts as template\n // elements (like tr or td), but don't want to reassign the
ir proto (gecko\n // doesn't like that), we mixin the properties for those el
ements.\n if (el.tagName === 'TEMPLATE') {\n if (!hasTemplateElement) {\
n if (hasProto)\n el.__proto__ = HTMLTemplateElement.prototype;\
n else\n mixin(el, HTMLTemplateElement.prototype);\n }\n
} else {\n mixin(el, HTMLTemplateElement.prototype);\n // FIXME: Won'
t need this when webkit methods move to the prototype.\n Object.definePrope
rty(el, 'content', contentDescriptor);\n }\n }\n\n function ensureSetModelS
cheduled(template) {\n if (!template.setModelFn_) {\n template.setModelF
n_ = function() {\n addBindings(template, template.model, template.prepar
eBindingFn_);\n };\n }\n\n ensureScheduled(template.setModelFn_);\n
}\n\n mixin(HTMLTemplateElement.prototype, {\n bind: function(name, model, p
ath) {\n if (!this.iterator_)\n this.iterator_ = new TemplateIterato
r(this);\n\n this.bindings = this.bindings || {};\n if (name === 'bind
') {\n this.iterator_.hasBind = true;\n this.iterator_.bindModel =
model;\n this.iterator_.bindPath = path;\n if (!this.iterator_.de
psChanging) {\n this.iterator_.depsChanging = true;\n ensureSc
heduled(this.iterator_);\n }\n\n return this.bindings.bind = this.
iterator_;\n }\n\n if (name === 'repeat') {\n this.iterator_.ha
sRepeat = true;\n this.iterator_.repeatModel = model;\n this.itera
tor_.repeatPath = path;\n if (!this.iterator_.depsChanging) {\n
this.iterator_.depsChanging = true;\n ensureScheduled(this.iterator_);\
n }\n return this.bindings.repeat = this.iterator_;\n }\n\n
if (name === 'if') {\n this.iterator_.hasIf = true;\n this.ite
rator_.ifModel = model;\n this.iterator_.ifPath = path;\n if (!thi
s.iterator_.depsChanging) {\n this.iterator_.depsChanging = true;\n
ensureScheduled(this.iterator_);\n }\n return this.bindings.
if = this.iterator_;\n }\n\n return HTMLElement.prototype.bind.call(th
is, name, model, path);\n },\n\n unbind: function(name) {\n if (name
=== 'bind') {\n if (!this.iterator_)\n return;\n\n this.i
terator_.hasBind = false;\n this.iterator_.bindModel = undefined;\n
this.iterator_.bindPath = undefined;\n if (!this.iterator_.depsChanging
) {\n this.iterator_.depsChanging = true;\n ensureScheduled(th
is.iterator_);\n }\n\n return this.bindings.bind = undefined;\n
}\n\n if (name === 'repeat') {\n if (!this.iterator_)\n
return;\n this.iterator_.hasRepeat = false;\n this.iterator_.repea
tModel = undefined;\n this.iterator_.repeatPath = undefined;\n if
(!this.iterator_.depsChanging) {\n this.iterator_.depsChanging = true;\
n ensureScheduled(this.iterator_);\n }\n return this.bind
ings.repeat = undefined;\n }\n\n if (name === 'if') {\n if (!th
is.iterator_)\n return;\n this.iterator_.hasIf = false;\n
this.iterator_.ifModel = undefined;\n this.iterator_.ifPath = undefined;
\n if (!this.iterator_.depsChanging) {\n this.iterator_.depsChan
ging = true;\n ensureScheduled(this.iterator_);\n }\n ret
urn this.bindings.if = undefined;\n }\n\n return HTMLElement.prototype
.unbind.call(this, name);\n },\n\n createInstance: function(model, bound)
{\n var content = this.ref.content;\n var map = content.bindingMap_;\n
if (!map) {\n // TODO(rafaelw): Setup a MutationObserver on content
to detect\n // when the instanceMap is invalid.\n map = createIns
tanceBindingMap(content, this.prepareBindingFn_) || [];\n content.binding
Map_ = map;\n }\n\n var stagingDocument = getTemplateStagingDocument(t
his);\n var instance = deepCloneIgnoreTemplateContent(content, stagingDocum
ent);\n\n addMapBindings(instance, map, model, this.bindingDelegate_, bound
);\n // TODO(rafaelw): We can do this more lazily, but setting a sentinel\n
// in the parent of the template element, and creating it when it's\n
// asked for by walking back to find the iterating template.\n addTemplate
InstanceRecord(instance, model);\n return instance;\n },\n\n get mode
l() {\n return this.model_;\n },\n\n set model(model) {\n this.m
odel_ = model;\n ensureSetModelScheduled(this);\n },\n\n get bindingD
elegate() {\n return this.bindingDelegate_;\n },\n\n setBindingDelega
te_: function(bindingDelegate) {\n this.bindingDelegate_ = bindingDelegate;
\n\n function delegateFn(name) {\n var fn = bindingDelegate && bindi
ngDelegate[name];\n if (typeof fn != 'function')\n return;\n\n
return function() {\n return fn.apply(bindingDelegate, arguments)
;\n };\n }\n\n this.prepareBindingFn_ = delegateFn('prepareBind
ing');\n this.prepareInstanceModelFn_ = delegateFn('prepareInstanceModel');
\n this.prepareInstancePositionChangedFn_ =\n delegateFn('prepareI
nstancePositionChanged');\n },\n\n set bindingDelegate(bindingDelegate) {\
n this.setBindingDelegate_(bindingDelegate);\n ensureSetModelScheduled
(this);\n },\n\n get ref() {\n var ref;\n var refId = this.getAt
tribute('ref');\n if (refId) {\n var treeScope = getTreeScope(this);
\n if (treeScope)\n ref = treeScope.getElementById(refId);\n
}\n\n if (!ref)\n ref = this.instanceRef_;\n\n if (!ref)\n
return this;\n\n var nextRef = ref.ref;\n return nextRef ? nextRe
f : ref;\n }\n });\n\n // Returns\n // a) undefined if there are no must
aches.\n // b) [TEXT, (PATH, DELEGATE_FN, TEXT)+] if there is at least one mu
stache.\n function parseMustaches(s, name, node, prepareBindingFn) {\n if (!
s || !s.length)\n return;\n\n var tokens;\n var length = s.length;\n
var startIndex = 0, lastIndex = 0, endIndex = 0;\n while (lastIndex < leng
th) {\n startIndex = s.indexOf('{{', lastIndex);\n endIndex = startInd
ex < 0 ? -1 : s.indexOf('}}', startIndex + 2);\n\n if (endIndex < 0) {\n
if (!tokens)\n return;\n\n tokens.push(s.slice(lastIndex));
// TEXT\n break;\n }\n\n tokens = tokens || [];\n tokens.
push(s.slice(lastIndex, startIndex)); // TEXT\n var pathString = s.slice(st
artIndex + 2, endIndex).trim();\n tokens.push(Path.get(pathString)); // PAT
H\n var delegateFn = prepareBindingFn &&\n prepareBin
dingFn(pathString, name, node)\n tokens.push(delegateFn); // DELEGATE_FN\n
lastIndex = endIndex + 2;\n }\n\n if (lastIndex === length)\n to
kens.push(''); // TEXT\n\n tokens.hasOnePath = tokens.length === 4;\n toke
ns.isSimplePath = tokens.hasOnePath &&\n tokens[0] == '
' &&\n tokens[3] == '';\n\n tokens.combinator = func
tion(values) {\n var newValue = tokens[0];\n\n for (var i = 1; i < tok
ens.length; i += 3) {\n var value = tokens.hasOnePath ? values : values[(
i - 1) / 3];\n if (value !== undefined)\n newValue += value;\n
newValue += tokens[i + 2];\n }\n\n return newValue;\n }\n\n
return tokens;\n }\n\n var valuePath = Path.get('value');\n\n function proc
essBinding(name, tokens, node, model, bound) {\n var bindingModel;\n var b
indingPath;\n\n if (!tokens.hasOnePath) {\n bindingModel = new CompoundP
athObserver(undefined, undefined,\n
tokens.combinator);\n }\n\n if (!tokens.isSimplePath)\n bindingPath
= valuePath;\n\n for (var i = 1; i < tokens.length; i += 3) {\n var type
= tokens[i];\n var localModel = model;\n var localPath = tokens[i];\n
var delegateFn = tokens[i + 1];\n\n var delegateValue = delegateFn &&
delegateFn(model, node);\n if (delegateValue !== undefined) {\n loc
alModel = delegateValue;\n localPath = valuePath;\n }\n\n if (!
tokens.hasOnePath) {\n bindingModel.addPath(localModel, localPath);\n
continue;\n }\n\n if (tokens.isSimplePath) {\n bindingModel
= localModel;\n bindingPath = localPath;\n } else {\n bindin
gModel = new PathObserver(localModel, localPath, undefined,\n
undefined,\n tokens.
combinator);\n }\n }\n\n if (!tokens.hasOnePath)\n bindingModel.
start();\n\n var binding = node.bind(name, bindingModel, bindingPath);\n i
f (bound)\n bound.push(binding);\n }\n\n function processBindings(binding
s, node, model, bound) {\n for (var i = 0; i < bindings.length; i += 2) {\n
processBinding(bindings[i], bindings[i + 1], node, model, bound);\n }\n
}\n\n function parseAttributeBindings(element, prepareBindingFn) {\n assert(
element);\n\n var bindings;\n var isTemplateNode = isTemplate(element);\n
var ifFound = false;\n var bindFound = false;\n\n for (var i = 0; i < e
lement.attributes.length; i++) {\n var attr = element.attributes[i];\n
var name = attr.name;\n var value = attr.value;\n\n // Allow bindings
expressed in attributes to be prefixed with underbars.\n // We do this to
allow correct semantics for browsers that don't implement\n // <template> w
here certain attributes might trigger side-effects -- and\n // for IE which
sanitizes certain attributes, disallowing mustache\n // replacements in th
eir text.\n while (name[0] === '_') {\n name = name.substring(1);\n
}\n\n if (isTemplateNode) {\n if (name === IF) {\n ifF
ound = true;\n value = value || '{{}}'; // Accept 'naked' if.\n
} else if (name === BIND || name === REPEAT) {\n bindFound = true;\n
value = value || '{{}}'; // Accept 'naked' bind & repeat.\n }\n
}\n\n var tokens = parseMustaches(value, name, element,\n
prepareBindingFn);\n if (!tokens)\n continue;\n
\n bindings = bindings || [];\n bindings.push(name, tokens);\n }\n\
n // Treat <template if> as <template bind if>\n if (ifFound && !bindFound
) {\n bindings = bindings || [];\n bindings.push(BIND, parseMustaches(
'{{}}', BIND, element,\n prepareBindingF
n));\n }\n\n return bindings;\n }\n\n function getBindings(node, prepare
BindingFn) {\n if (node.nodeType === Node.ELEMENT_NODE)\n return parseAt
tributeBindings(node, prepareBindingFn);\n\n if (node.nodeType === Node.TEXT_
NODE) {\n var tokens = parseMustaches(node.data, 'textContent', node,\n
prepareBindingFn);\n if (tokens)\n ret
urn ['textContent', tokens];\n }\n }\n\n function addMapBindings(node, bind
ings, model, delegate, bound) {\n if (!bindings)\n return;\n\n if (bi
ndings.templateRef) {\n HTMLTemplateElement.decorate(node, bindings.templat
eRef);\n if (delegate) {\n node.setBindingDelegate_(delegate);\n
}\n }\n\n if (bindings.length)\n processBindings(bindings, node, mo
del, bound);\n\n if (!bindings.children)\n return;\n\n var i = 0;\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n a
ddMapBindings(child, bindings.children[i++], model, delegate, bound);\n }\n
}\n\n function addBindings(node, model, prepareBindingFn) {\n assert(node);\
n\n var bindings = getBindings(node, prepareBindingFn);\n if (bindings)\n
processBindings(bindings, node, model);\n\n for (var child = node.firstC
hild; child ; child = child.nextSibling)\n addBindings(child, model, prepar
eBindingFn);\n }\n\n function deepCloneIgnoreTemplateContent(node, stagingDocu
ment) {\n var clone = stagingDocument.importNode(node, false);\n if (node.
isTemplate_) {\n return clone;\n }\n\n for (var child = node.firstChi
ld; child; child = child.nextSibling) {\n clone.appendChild(deepCloneIgnore
TemplateContent(child, stagingDocument))\n }\n\n return clone;\n }\n\n f
unction createInstanceBindingMap(node, prepareBindingFn) {\n var map = getBin
dings(node, prepareBindingFn);\n if (isTemplate(node)) {\n node.isTempla
te_ = true;\n map = map || [];\n map.templateRef = node;\n }\n\n
var child = node.firstChild, index = 0;\n for (; child; child = child.nextSi
bling, index++) {\n var childMap = createInstanceBindingMap(child, prepareB
indingFn);\n if (!childMap)\n continue;\n\n map = map || [];\n
map.children = map.children || {};\n map.children[index] = childMap;\n
}\n\n return map;\n }\n\n function TemplateInstance(firstNode, lastNode
, model) {\n // TODO(rafaelw): firstNode & lastNode should be read-synchronou
s\n // in cases where script has modified the template instance boundary.\n
// All should be read-only.\n this.firstNode = firstNode;\n this.lastNod
e = lastNode;\n this.model = model;\n }\n\n function addTemplateInstanceRec
ord(fragment, model) {\n if (!fragment.firstChild)\n return;\n\n var
instanceRecord = new TemplateInstance(fragment.firstChild,\n
fragment.lastChild, model);\n var node = instanceRe
cord.firstNode;\n while (node) {\n node.templateInstance_ = instanceReco
rd;\n node = node.nextSibling;\n }\n }\n\n Object.defineProperty(Node.
prototype, 'templateInstance', {\n get: function() {\n var instance = th
is.templateInstance_;\n return instance ? instance :\n (this.paren
tNode ? this.parentNode.templateInstance : undefined);\n }\n });\n\n functi
on TemplateIterator(templateElement) {\n this.closed = false;\n this.templ
ateElement_ = templateElement;\n\n // Flattened array of tuples:\n // <i
nstanceTerminatorNode, [bindingsSetupByInstance]>\n this.terminators = [];\n\
n this.iteratedValue = undefined;\n this.arrayObserver = undefined;\n\n
this.depsChanged = false;\n this.hasRepeat = false;\n this.repeatModel =
undefined;\n this.repeatPath = undefined;\n this.hasBind = false;\n thi
s.bindModel = undefined;\n this.bindPath = undefined;\n this.hasIf = false
;\n this.ifModel = undefined;\n this.ifPath = undefined;\n }\n\n Templat
eIterator.prototype = {\n resolve: function() {\n this.depsChanging = fa
lse;\n if (this.valueObserver) {\n this.valueObserver.close();\n
this.valueObserver = undefined;\n }\n\n if (!this.hasRepeat && !th
is.hasBind) {\n this.valueChanged();\n return;\n }\n\n v
ar isRepeat = this.hasRepeat === true;\n var model = isRepeat ? this.repeat
Model : this.bindModel;\n var path = isRepeat ? this.repeatPath : this.bind
Path;\n\n if (!this.hasIf) {\n var valueFn = this.hasRepeat ? undefi
ned : function(value) {\n return [value];\n };\n\n this.v
alueObserver = new PathObserver(model,\n
path,\n this.valueChanged,\n
this,\n
valueFn);\n } else {\n var valueFn = function(valu
es) {\n var modelValue = values[0];\n var ifValue = values[1]\
n if (!ifValue)\n return;\n return isRepeat ? model
Value : [ modelValue ];\n };\n\n this.valueObserver = new Compound
PathObserver(this.valueChanged,\n
this,\n valueFn);\n\
n this.valueObserver.addPath(model, path);\n this.valueObserver.ad
dPath(this.ifModel, this.ifPath);\n this.valueObserver.start();\n }\
n\n this.valueChanged(this.valueObserver.value);\n },\n\n valueChange
d: function(value) {\n if (!Array.isArray(value))\n value = undefine
d;\n\n var oldValue = this.iteratedValue;\n this.unobserve();\n t
his.iteratedValue = value;\n\n if (this.iteratedValue) {\n this.arra
yObserver =\n new ArrayObserver(this.iteratedValue, this.handleSplice
s, this);\n }\n\n var splices = ArrayObserver.calculateSplices(this.it
eratedValue || [],\n oldValue
|| []);\n\n if (splices.length)\n this.handleSplices(splices);\n
},\n\n getTerminatorAt: function(index) {\n if (index == -1)\n re
turn this.templateElement_;\n var terminator = this.terminators[index*2];\n
if (terminator.nodeType !== Node.ELEMENT_NODE ||\n this.templateE
lement_ === terminator) {\n return terminator;\n }\n\n var subI
terator = terminator.iterator_;\n if (!subIterator)\n return termina
tor;\n\n return subIterator.getTerminatorAt(subIterator.terminators.length/
2 - 1);\n },\n\n // TODO(rafaelw): If we inserting sequences of instances
we can probably\n // avoid lots of calls to getTerminatorAt(), or cache its r
esult.\n insertInstanceAt: function(index, fragment, instanceNodes, bound) {\
n var previousTerminator = this.getTerminatorAt(index - 1);\n var term
inator = previousTerminator;\n if (fragment)\n terminator = fragment
.lastChild || terminator;\n else if (instanceNodes)\n terminator = i
nstanceNodes[instanceNodes.length - 1] || terminator;\n\n this.terminators.
splice(index*2, 0, terminator, bound);\n var parent = this.templateElement_
.parentNode;\n var insertBeforeNode = previousTerminator.nextSibling;\n\n
if (fragment) {\n parent.insertBefore(fragment, insertBeforeNode);\n
} else if (instanceNodes) {\n for (var i = 0; i < instanceNodes.leng
th; i++)\n parent.insertBefore(instanceNodes[i], insertBeforeNode);\n
}\n },\n\n extractInstanceAt: function(index) {\n var instanceNod
es = [];\n var previousTerminator = this.getTerminatorAt(index - 1);\n
var terminator = this.getTerminatorAt(index);\n instanceNodes.bound = this
.terminators[index*2 + 1];\n this.terminators.splice(index*2, 2);\n\n
var parent = this.templateElement_.parentNode;\n while (terminator !== prev
iousTerminator) {\n var node = previousTerminator.nextSibling;\n i
f (node == terminator)\n terminator = previousTerminator;\n\n pa
rent.removeChild(node);\n instanceNodes.push(node);\n }\n\n ret
urn instanceNodes;\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)\n
return;\n\n var template = this.templateElement_;\n\n if (!templat
e.parentNode || !template.ownerDocument.defaultView) {\n this.close();\n
return;\n }\n\n if (this.instanceModelFn_ === undefined) {\n
this.instanceModelFn_ =\n this.getDelegateFn(template.prepareIns
tanceModelFn_);\n }\n\n if (this.instancePositionChangedFn_ === undefi
ned) {\n this.instancePositionChangedFn_ =\n this.getDelegateF
n(template.prepareInstancePositionChangedFn_);\n }\n\n var instanceCac
he = new Map;\n var removeDelta = 0;\n splices.forEach(function(splice
) {\n splice.removed.forEach(function(model) {\n var instanceNod
es =\n this.extractInstanceAt(splice.index + removeDelta);\n
instanceCache.set(model, instanceNodes);\n }, this);\n\n remove
Delta -= splice.addedCount;\n }, this);\n\n splices.forEach(function(s
plice) {\n var addIndex = splice.index;\n for (; addIndex < splice
.index + splice.addedCount; addIndex++) {\n var model = this.iteratedVa
lue[addIndex];\n var fragment = undefined;\n var instanceNodes
= instanceCache.get(model);\n var bound;\n if (instanceNodes)
{\n instanceCache.delete(model);\n bound = instanceNodes.
bound;\n } else {\n bound = [];\n if (this.instan
ceModelFn_)\n model = this.instanceModelFn_(model);\n\n
if (model !== undefined) {\n fragment = this.templateElement_.creat
eInstance(model, bound);\n }\n }\n\n this.insertIns
tanceAt(addIndex, fragment, instanceNodes, bound);\n }\n }, this);\n
\n instanceCache.forEach(function(instanceNodes) {\n this.closeInsta
nceBindings(instanceNodes.bound);\n }, this);\n\n if (this.instancePos
itionChangedFn_)\n this.reportInstancesMoved(splices);\n },\n\n rep
ortInstanceMoved: function(index) {\n var previousTerminator = this.getTerm
inatorAt(index - 1);\n var terminator = this.getTerminatorAt(index);\n
if (previousTerminator === terminator)\n return; // instance has zero no
des.\n\n // We must use the first node of the instance, because any subsequ
ent\n // nodes may have been generated by sub-templates.\n // TODO(raf
aelw): This is brittle WRT instance mutation -- e.g. if the\n // first node
was removed by script.\n var templateInstance = previousTerminator.nextSib
ling.templateInstance;\n this.instancePositionChangedFn_(templateInstance,
index);\n },\n\n reportInstancesMoved: function(splices) {\n var inde
x = 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 (
index < splice.index) {\n this.reportInstanceMoved(index);\n
index++;\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 offse
t += splice.addedCount - splice.removed.length;\n }\n\n if (offset ==
0)\n return;\n\n var length = this.terminators.length / 2;\n wh
ile (index < length) {\n this.reportInstanceMoved(index);\n index+
+;\n }\n },\n\n closeInstanceBindings: function(bound) {\n for (
var i = 0; i < bound.length; i++) {\n bound[i].close();\n }\n },\
n\n unobserve: function() {\n if (!this.arrayObserver)\n return;\
n\n this.arrayObserver.close();\n this.arrayObserver = undefined;\n
},\n\n close: function() {\n if (this.closed)\n return;\n t
his.unobserve();\n for (var i = 1; i < this.terminators.length; i += 2) {\n
this.closeInstanceBindings(this.terminators[i]);\n }\n\n this.
terminators.length = 0;\n if (this.valueObserver)\n this.valueObserv
er.close();\n this.valueObserver = undefined;\n this.templateElement_.
iterator_ = undefined;\n this.closed = true;\n }\n };\n\n // Polyfill-
specific API.\n HTMLTemplateElement.forAllTemplatesFrom_ = forAllTemplatesFrom;
\n})(this);\n","/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>
\n Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2012
Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <m
athias@qiwi.be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekestei
jn.nl>\n Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n Copyright (C)
2012 Yusuke Suzuki <utatane.tea@gmail.com>\n Copyright (C) 2012 Arpad Borsos <a
rpad.borsos@googlemail.com>\n Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@g
mail.com>\n\n Redistribution and use in source and binary forms, with or withou
t\n modification, are permitted provided that the following conditions are met:
\n\n * Redistributions of source code must retain the above copyright\n
notice, this list of conditions and the following disclaimer.\n * Redistribut
ions in binary form must reproduce the above copyright\n notice, this list
of conditions and the following disclaimer in the\n documentation and/or ot
her 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 W
ARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTA
BILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL
<COPYRIGHT HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREME
NT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINES
S INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CON
TRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILIT
Y OF SUCH DAMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Toke
n,\n TokenName,\n Syntax,\n Messages,\n source,\n
index,\n length,\n delegate,\n lookahead,\n sta
te;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Ident
ifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral:
6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName =
{};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF]
= '<end>';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Toke
n.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenNa
me[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctu
ator';\n TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n
ArrayExpression: 'ArrayExpression',\n BinaryExpression: 'BinaryExpressi
on',\n CallExpression: 'CallExpression',\n ConditionalExpression:
'ConditionalExpression',\n EmptyStatement: 'EmptyStatement',\n Exp
ressionStatement: 'ExpressionStatement',\n Identifier: 'Identifier',\n
Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n
LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpre
ssion',\n ObjectExpression: 'ObjectExpression',\n Program: 'Progra
m',\n Property: 'Property',\n ThisExpression: 'ThisExpression',\n
UnaryExpression: 'UnaryExpression'\n };\n\n // Error messages shoul
d be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected t
oken %0',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclarat
ion: '%0 \\'%1\\' has already been declared'\n };\n\n // Ensure the condit
ion is true, otherwise throw an error.\n // This is only to have a better con
tract semantic, i.e. another safety net\n // to catch a logic error. The cond
ition shall be fulfilled in normal case.\n // Do NOT use this to enforce a ce
rtain 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 White Space\n\n function isWhi
teSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) |
| // tab\n (ch === 0xB) ||\n (ch === 0xC) ||\n
(ch === 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u200
1\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\
u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line T
erminators\n\n function isLineTerminator(ch) {\n return (ch === 10) ||
(ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identif
ier Names and Identifiers\n\n function isIdentifierStart(ch) {\n retur
n (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 isIdentifierPart(ch) {\n return (c
h === 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 === 'th
is')\n }\n\n // 7.4 Comments\n\n function skipWhitespace() {\n w
hile (index < length && isWhiteSpace(source.charCodeAt(index))) {\n ++
index;\n }\n }\n\n function getIdentifier() {\n var start, c
h;\n\n start = index++;\n while (index < length) {\n ch
= source.charCodeAt(index);\n if (isIdentifierPart(ch)) {\n
++index;\n } else {\n break;\n }\n
}\n\n return source.slice(start, index);\n }\n\n function sca
nIdentifier() {\n var start, id, type;\n\n start = index;\n\n
id = getIdentifier();\n\n // There is no keyword or literal with only
one character.\n // Thus, it must be an identifier.\n if (id.lengt
h === 1) {\n type = Token.Identifier;\n } else if (isKeyword(i
d)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n
type = Token.NullLiteral;\n } else if (id === 'true' || id ===
'false') {\n type = Token.BooleanLiteral;\n } else {\n
type = Token.Identifier;\n }\n\n return {\n type:
type,\n value: id,\n range: [start, index]\n };\n
}\n\n\n // 7.7 Punctuators\n\n function scanPunctuator() {\n var
start = index,\n code = source.charCodeAt(index),\n code2,
\n ch1 = source[index],\n ch2;\n\n switch (code) {\
n\n // Check for most common single-character punctuators.\n case
46: // . dot\n case 40: // ( open bracket\n case 41: // ) cl
ose bracket\n case 59: // ; semicolon\n case 44: // , comma\n
case 123: // { open curly brace\n case 125: // } close curly bra
ce\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) ma
rks an assignment or comparison operator.\n if (code2 === 61) {\n
switch (code) {\n case 37: // %\n cas
e 38: // &\n case 42: // *:\n case 43: // +\n
case 45: // -\n case 47: // /\n ca
se 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, ind
ex]\n };\n\n case 33: // !\n ca
se 61: // =\n index += 2;\n\n // !== and =
==\n if (source.charCodeAt(index) === 61) {\n
++index;\n }\n return {\n
type: Token.Punctuator,\n value: source.sl
ice(start, index),\n range: [start, index]\n
};\n default:\n break;\n
}\n }\n break;\n }\n\n // Peek more charact
ers.\n\n ch2 = source[index + 1];\n\n // Other 2-character punctua
tors: && ||\n\n if (ch1 === ch2 && ('&|'.indexOf(ch1) >= 0)) {\n
index += 2;\n return {\n type: Token.Punctuator,\n
value: ch1 + ch2,\n range: [start, index]\n
};\n }\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n
++index;\n return {\n type: Token.Punctuator,\n
value: ch1,\n range: [start, index]\n };\n
}\n\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }
\n\n // 7.8.3 Numeric Literals\n function scanNumericLiteral() {\n
var number, start, ch;\n\n ch = source[index];\n assert(isDecimalD
igit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start
with a decimal digit or a decimal point');\n\n start = index;\n n
umber = '';\n if (ch !== '.') {\n number = source[index++];\n
ch = source[index];\n\n // Hex 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 t
hrowError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n
}\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n
number += source[index++];\n }\n ch = source[inde
x];\n }\n\n if (ch === '.') {\n number += source[index+
+];\n while (isDecimalDigit(source.charCodeAt(index))) {\n
number += source[index++];\n }\n ch = source[index];\
n }\n\n if (ch === 'e' || ch === 'E') {\n number += sou
rce[index++];\n\n ch = source[index];\n if (ch === '+' ||
ch === '-') {\n number += source[index++];\n }\n
if (isDecimalDigit(source.charCodeAt(index))) {\n while (is
DecimalDigit(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({}, Mes
sages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n t
ype: Token.NumericLiteral,\n value: parseFloat(number),\n
range: [start, index]\n };\n }\n\n // 7.8.4 String Literals\n\n
function scanStringLiteral() {\n var str = '', quote, start, ch, octal =
false;\n\n quote = source[index];\n assert((quote === '\\'' || quo
te === '\"'),\n 'String literal must starts with a quote');\n\n
start = index;\n ++index;\n\n while (index < length) {\n
ch = source[index++];\n\n if (ch === quote) {\n qu
ote = '';\n break;\n } else if (ch === '\\\\') {\n
ch = source[index++];\n if (!ch || !isLineTerminator(
ch.charCodeAt(0))) {\n switch (ch) {\n cas
e '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 b
reak;\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.charCodeAt(0))) {\n
break;\n } else {\n str += ch;\n }\n
}\n\n if (quote !== '') {\n throwError({}, Messages.Unexpe
ctedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.S
tringLiteral,\n value: str,\n octal: octal,\n r
ange: [start, index]\n };\n }\n\n function isIdentifierName(token)
{\n return token.type === Token.Identifier ||\n token.type ===
Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n
token.type === Token.NullLiteral;\n }\n\n function advance() {\n
var ch;\n\n skipWhitespace();\n\n if (index >= length) {\n
return {\n type: Token.EOF,\n range: [index,
index]\n };\n }\n\n ch = source.charCodeAt(index);\n\n
// Very common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch =
== 58) {\n return scanPunctuator();\n }\n\n // String l
iteral starts with single quote (#39) or double quote (#34).\n if (ch ===
39 || ch === 34) {\n return scanStringLiteral();\n }\n\n
if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }
\n\n // Dot (.) char #46 can also start a floating-point number, hence th
e need\n // to check the next character.\n if (ch === 46) {\n
if (isDecimalDigit(source.charCodeAt(index + 1))) {\n retu
rn scanNumericLiteral();\n }\n return scanPunctuator();\n
}\n\n if (isDecimalDigit(ch)) {\n return scanNumericLit
eral();\n }\n\n return scanPunctuator();\n }\n\n function le
x() {\n var token;\n\n token = lookahead;\n index = token.r
ange[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 throwError(token, messageFormat) {\n
var error,\n args = Array.prototype.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 error = new Error(msg);\n
error.index = index;\n error.description = msg;\n throw error;\n
}\n\n // Throw an exception because of the token.\n\n function throwUne
xpected(token) {\n throwError(token, Messages.UnexpectedToken, token.valu
e);\n }\n\n // Expect the next token to match 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.val
ue !== value) {\n throwUnexpected(token);\n }\n }\n\n //
Return true if the next token matches the specified 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 spe
cified keyword\n\n function matchKeyword(keyword) {\n return lookahead
.type === Token.Keyword && lookahead.value === keyword;\n }\n\n function c
onsumeSemicolon() {\n // Catch the very common case first: immediately a
semicolon (char #59).\n if (source.charCodeAt(index) === 59) {\n
lex();\n return;\n }\n\n skipWhitespace();\n\n
if (match(';')) {\n lex();\n return;\n }\n\n
if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpect
ed(lookahead);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n funct
ion parseArrayInitialiser() {\n var elements = [];\n\n expect('[')
;\n\n while (!match(']')) {\n if (match(',')) {\n
lex();\n elements.push(null);\n } else {\n
elements.push(parseExpression());\n\n if (!match(']')) {\n
expect(',');\n }\n }\n }\n\
n expect(']');\n\n return delegate.createArrayExpression(elements)
;\n }\n\n // 11.1.5 Object Initialiser\n\n function parseObjectProperty
Key() {\n var token;\n\n skipWhitespace();\n token = lex();
\n\n // Note: This function is called only from parseObjectProperty(), wh
ere\n // EOF and Punctuator tokens are already filtered out.\n if
(token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n
return delegate.createLiteral(token);\n }\n\n return de
legate.createIdentifier(token.value);\n }\n\n function parseObjectProperty
() {\n var token, key;\n\n token = lookahead;\n skipWhitesp
ace();\n\n if (token.type === Token.EOF || token.type === Token.Punctuato
r) {\n throwUnexpected(token);\n }\n\n key = parseObjec
tPropertyKey();\n expect(':');\n return delegate.createProperty('i
nit', key, parseExpression());\n }\n\n function parseObjectInitialiser() {
\n var properties = [];\n\n expect('{');\n\n while (!match(
'}')) {\n properties.push(parseObjectProperty());\n\n if (
!match('}')) {\n expect(',');\n }\n }\n\n
expect('}');\n\n return delegate.createObjectExpression(properties);\n
}\n\n // 11.1.6 The Grouping Operator\n\n function parseGroupExpression
() {\n var expr;\n\n expect('(');\n\n expr = parseExpressio
n();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Pri
mary Expressions\n\n function parsePrimaryExpression() {\n var type, t
oken, expr;\n\n if (match('(')) {\n return parseGroupExpressio
n();\n }\n\n type = lookahead.type;\n\n if (type === Token.
Identifier) {\n expr = delegate.createIdentifier(lex().value);\n
} else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n
expr = delegate.createLiteral(lex());\n } else if (type === T
oken.Keyword) {\n if (matchKeyword('this')) {\n lex();
\n expr = delegate.createThisExpression();\n }\n
} else if (type === Token.BooleanLiteral) {\n token = lex();\n
token.value = (token.value === 'true');\n expr = delegate.crea
teLiteral(token);\n } else if (type === Token.NullLiteral) {\n
token = lex();\n token.value = null;\n expr = delegate.cr
eateLiteral(token);\n } else if (match('[')) {\n expr = parseA
rrayInitialiser();\n } else if (match('{')) {\n expr = parseOb
jectInitialiser();\n }\n\n if (expr) {\n return expr;\n
}\n\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Sid
e Expressions\n\n function parseArguments() {\n var args = [];\n\n
expect('(');\n\n if (!match(')')) {\n while (index < lengt
h) {\n args.push(parseExpression());\n if (match('
)')) {\n break;\n }\n expect(',
');\n }\n }\n\n expect(')');\n\n return args;\n
}\n\n function parseNonComputedProperty() {\n var token;\n\n
token = lex();\n\n if (!isIdentifierName(token)) {\n throwUne
xpected(token);\n }\n\n return delegate.createIdentifier(token.val
ue);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n
return parseNonComputedProperty();\n }\n\n function parseComputedM
ember() {\n var expr;\n\n expect('[');\n\n expr = parseExpr
ession();\n\n expect(']');\n\n return 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 = parseNonComputedMember();\n
expr = delegate.createMemberExpression('.', expr, property);\n }
\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\
n var parsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Un
ary Operators\n\n function parseUnaryExpression() {\n var token, expr;
\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.
Keyword) {\n expr = parsePostfixExpression();\n } else if (mat
ch('+') || match('-') || match('!')) {\n token = lex();\n
expr = parseUnaryExpression();\n expr = delegate.createUnaryExpressio
n(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword
('void') || matchKeyword('typeof')) {\n throwError({}, Messages.Unexp
ectedToken);\n } else {\n expr = parsePostfixExpression();\n
}\n\n return expr;\n }\n\n function binaryPrecedence(token) {
\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.
type !== Token.Keyword) {\n return 0;\n }\n\n switch (t
oken.value) {\n case '||':\n prec = 1;\n break;\n\n
case '&&':\n prec = 2;\n break;\n\n case '=
=':\n case '!=':\n case '===':\n case '!==':\n p
rec = 6;\n break;\n\n case '<':\n case '>':\n ca
se '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\
n break;\n\n case 'in':\n prec = 7;\n br
eak;\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 Multiplicative Operators\n //
11.6 Additive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relat
ional Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Ope
rators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpress
ion() {\n var expr, token, prec, stack, right, operator, left, i;\n\n
left = parseUnaryExpression();\n\n token = lookahead;\n prec =
binaryPrecedence(token);\n if (prec === 0) {\n return left;\n
}\n token.prec = prec;\n lex();\n\n right = parseUn
aryExpression();\n\n stack = [left, token, right];\n\n while ((pre
c = 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.po
p();\n operator = stack.pop().value;\n left = stac
k.pop();\n expr = delegate.createBinaryExpression(operator, left,
right);\n stack.push(expr);\n }\n\n // Shi
ft.\n token = lex();\n token.prec = prec;\n sta
ck.push(token);\n expr = parseUnaryExpression();\n stack.p
ush(expr);\n }\n\n // Final reduce to clean-up the stack.\n
i = stack.length - 1;\n expr = stack[i];\n while (i > 1) {\n
expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2],
expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n /
/ 11.12 Conditional Operator\n\n function parseConditionalExpression() {\n
var expr, consequent, alternate;\n\n expr = parseBinaryExpression();
\n\n if (match('?')) {\n lex();\n consequent = pars
eConditionalExpression();\n expect(':');\n alternate = par
seConditionalExpression();\n\n expr = delegate.createConditionalExpre
ssion(expr, consequent, alternate);\n }\n\n return expr;\n }\n\
n // Simplification since we do not support AssignmentExpression.\n var pa
rseExpression = 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 (identifi
er.type !== Token.Identifier) {\n throwUnexpected(identifier);\n
}\n\n args = match('(') ? parseArguments() : [];\n\n return del
egate.createFilter(identifier.value, args);\n }\n\n // Filters ::\n //
\"|\" Filter\n // Filters \"|\" Filter\n\n function parseFilters() {\n
while (match('|')) {\n lex();\n parseFilter();\n
}\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsE
xpression\n // InExpression\n // FilterExpression\n\n // AsExpressi
on ::\n // FilterExpression as Identifier\n\n // InExpression ::\n //
Identifier, Identifier in FilterExpression\n // Identifier in FilterExpr
ession\n\n // FilterExpression ::\n // Expression\n // Expression F
ilters\n\n function parseTopLevel() {\n skipWhitespace();\n pee
k();\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 (looka
head.value === 'as') {\n parseAsExpression(expr);\n
} else {\n delegate.createTopLevel(expr);\n
}\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n
throwUnexpected(lookahead);\n }\n }\n\n function parseA
sExpression(expr) {\n lex(); // as\n var identifier = lex().value
;\n delegate.createAsExpression(expr, identifier);\n }\n\n function
parseInExpression(identifier) {\n var indexName;\n if (lookahead.
value === ',') {\n lex();\n if (lookahead.type !== Token.I
dentifier)\n throwUnexpected(lookahead);\n indexName =
lex().value;\n }\n\n lex(); // in\n var expr = parseExpre
ssion();\n parseFilters();\n delegate.createInExpression(identifie
r.name, indexName, expr);\n }\n\n function parse(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 parseTopLevel();\n }\n\n glo
bal.esprima = {\n parse: parse\n };\n})(this);\n","// Copyright 2013 G
oogle 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// Yo
u 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 agreed 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 express or implied.\n/
/ See the License for the specific language governing permissions and\n// limita
tions under the License.\n\n(function (global) {\n 'use strict';\n\n // JScrip
t does not have __proto__. We wrap all object literals with\n // createObject w
hich uses Object.create, Object.defineProperty and\n // Object.getOwnPropertyDe
scriptor to create a new object that does the exact\n // same thing. The main d
ownside to this solution is that we have to extract\n // all those property des
criptors 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.creat
e(proto);\n Object.getOwnPropertyNames(obj).forEach(function(name) {\n
Object.defineProperty(newObject, name,\n Ob
ject.getOwnPropertyDescriptor(obj, name));\n });\n return newObjec
t;\n };\n\n function prepareBinding(expressionText, name, node, filterRegi
stry) {\n var expression;\n try {\n expression = getExpression(expres
sionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Nod
e.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE' ||\n (name !
== 'bind' && name !== 'repeat'))) {\n throw Error('as and in can only be
used within <template bind/repeat>');\n }\n } catch (ex) {\n consol
e.error('Invalid expression syntax: ' + expressionText, ex);\n return;\n
}\n\n return function(model, node) {\n var binding = expression.getBind
ing(model, filterRegistry);\n if (expression.scopeIdent && binding) {\n
node.polymerExpressionScopeIdent_ = expression.scopeIdent;\n if (expr
ession.indexIdent)\n node.polymerExpressionIndexIdent_ = expression.ind
exIdent;\n }\n\n return binding;\n }\n }\n\n // TODO(rafaelw): Im
plement simple LRU.\n var expressionParseCache = Object.create(null);\n\n func
tion getExpression(expressionText) {\n var expression = expressionParseCache[
expressionText];\n if (!expression) {\n var delegate = new ASTDelegate()
;\n esprima.parse(expressionText, delegate);\n expression = new Expres
sion(delegate);\n expressionParseCache[expressionText] = expression;\n }
\n return expression;\n }\n\n function Literal(value) {\n this.value = v
alue;\n }\n\n Literal.prototype = {\n valueFn: function() {\n var valu
e = this.value;\n return function() { return value; };\n }\n }\n\n fun
ction IdentPath(delegate, name, last) {\n this.delegate = delegate;\n this
.name = name;\n this.last = last;\n }\n\n IdentPath.prototype = {\n getP
ath: function() {\n if (!this.path_) {\n if (this.last)\n t
his.path_ = Path.get(this.last.getPath() + '.' + this.name);\n else\n
this.path_ = Path.get(this.name);\n }\n return this.path_;\n
},\n\n valueFn: function() {\n if (!this.valueFn_) {\n var path =
this.getPath();\n var index = this.delegate.deps[path];\n if (ind
ex === undefined) {\n index = this.delegate.deps[path] = this.delegate.
depsList.length;\n this.delegate.depsList.push(path);\n }\n\n
var depsList = this.delegate.depsList;\n this.valueFn_ = function(va
lues) {\n return depsList.length === 1 ? values : values[index];\n
}\n }\n\n return this.valueFn_;\n },\n\n setValue: function(m
odel, newValue) {\n return this.getPath().setValueFrom(model, newValue);\n
}\n };\n\n function MemberExpression(object, property) {\n this.object =
object;\n this.property = property;\n }\n\n MemberExpression.prototype = {
\n valueFn: function() {\n var object = this.object;\n var property
= this.property;\n return function(values) {\n return object(values
)[property(values)];\n };\n },\n\n setValue: function(object, newValu
e, depsValues) {\n object = this.object(depsValues);\n var property =
this.property(depsValues);\n return object[property] = newValue;\n }\n
};\n\n function Filter(name, args) {\n this.name = name;\n this.args = []
;\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(args[
i]);\n }\n }\n\n Filter.prototype = {\n transform: function(value, depsV
alues, toModelDirection, filterRegistry,\n context) {\n
var fn = filterRegistry[this.name];\n if (fn) {\n context = unde
fined;\n } else {\n fn = context[this.name];\n if (!fn) {\n
console.error('Cannot find filter: ' + this.name);\n return;\n
}\n }\n\n // If toModelDirection is falsey, then the \"normal\"
(dom-bound) direction\n // is used. Otherwise, it looks for a 'toModel' pr
operty 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.e
rror('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])(depsValues);\n }\n\n return fn.apply(context, args);\n
}\n };\n\n function notImplemented() { throw Error('Not Implemented'); }\n\
n var unaryOperators = {\n '+': function(v) { return +v; },\n '-': functi
on(v) { return -v; },\n '!': function(v) { return !v; }\n };\n\n var binary
Operators = {\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 '<': functi
on(l, r) { return l<r; },\n '>': function(l, r) { return l>r; },\n '<=': f
unction(l, r) { return l<=r; },\n '>=': function(l, r) { return l>=r; },\n
'==': function(l, r) { return l==r; },\n '!=': function(l, r) { return l!=r;
},\n '===': function(l, r) { return l===r; },\n '!==': function(l, r) { r
eturn l!==r; },\n '&&': function(l, r) { return l&&r; },\n '||': function(
l, r) { return l||r; },\n };\n\n function getFn(arg) {\n return typeof arg
== 'function' ? arg : arg.valueFn();\n }\n\n function ASTDelegate() {\n thi
s.expression = null;\n this.filters = [];\n this.deps = {};\n this.deps
List = [];\n this.currentPath = undefined;\n this.scopeIdent = undefined;\
n this.indexIdent = undefined;\n }\n\n ASTDelegate.prototype = {\n creat
eUnaryExpression: function(op, argument) {\n if (!unaryOperators[op])\n
throw Error('Disallowed operator: ' + op);\n\n argument = getFn(argumen
t);\n\n return function(values) {\n return unaryOperators[op](argume
nt(values));\n };\n },\n\n createBinaryExpression: function(op, left,
right) {\n if (!binaryOperators[op])\n throw Error('Disallowed oper
ator: ' + op);\n\n left = getFn(left);\n right = getFn(right);\n\n
return function(values) {\n return binaryOperators[op](left(values), ri
ght(values));\n };\n },\n\n createConditionalExpression: function(tes
t, consequent, alternate) {\n test = getFn(test);\n consequent = getFn
(consequent);\n alternate = getFn(alternate);\n\n return function(valu
es) {\n return test(values) ? consequent(values) : alternate(values);\n
}\n },\n\n createIdentifier: function(name) {\n var ident = new I
dentPath(this, name);\n ident.type = 'Identifier';\n return ident;\n
},\n\n createMemberExpression: function(accessor, object, property) {\n
if (object instanceof IdentPath) {\n if (accessor == '.')\n re
turn new IdentPath(this, property.name, object);\n\n if (property instanc
eof Literal && Path.get(property.value).valid)\n return new IdentPath(t
his, property.value, object);\n }\n\n return new MemberExpression(getF
n(object), getFn(property));\n },\n\n createLiteral: function(token) {\n
return new Literal(token.value);\n },\n\n createArrayExpression: funct
ion(elements) {\n for (var i = 0; i < elements.length; i++)\n elemen
ts[i] = getFn(elements[i]);\n\n return function(values) {\n var arr
= []\n for (var i = 0; i < elements.length; i++)\n arr.push(elem
ents[i](values));\n return arr;\n }\n },\n\n createProperty: f
unction(kind, key, value) {\n return {\n key: key instanceof IdentPa
th ? key.name : key.value,\n value: value\n };\n },\n\n create
ObjectExpression: function(properties) {\n for (var i = 0; i < properties.l
ength; i++)\n properties[i].value = getFn(properties[i].value);\n\n
return function(values) {\n var obj = {};\n for (var i = 0; i < pr
operties.length; i++)\n obj[properties[i].key] = properties[i].value(va
lues);\n return obj;\n }\n },\n\n createFilter: function(name,
args) {\n this.filters.push(new Filter(name, args));\n },\n\n create
AsExpression: function(expression, scopeIdent) {\n this.expression = expres
sion;\n this.scopeIdent = scopeIdent;\n },\n\n createInExpression: fu
nction(scopeIdent, indexIdent, expression) {\n this.expression = expression
;\n this.scopeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n
},\n\n createTopLevel: function(expression) {\n this.expression = expre
ssion;\n },\n\n createThisExpression: notImplemented\n }\n\n function Ex
pression(delegate) {\n this.scopeIdent = delegate.scopeIdent;\n this.index
Ident = delegate.indexIdent;\n\n if (!delegate.expression)\n throw Error
('No expression found.');\n\n this.expression = delegate.expression;\n get
Fn(this.expression); // forces enumeration of path dependencies\n\n this.path
s = delegate.depsList;\n this.filters = delegate.filters;\n }\n\n Expressio
n.prototype = {\n getBinding: function(model, filterRegistry) {\n var pa
ths = this.paths;\n if (!paths.length) {\n // only literals in expre
ssion.\n return { value: this.getValue(undefined, filterRegistry, model)
};\n }\n\n var self = this;\n function valueFn(values) {\n
return self.getValue(values, filterRegistry, model);\n }\n\n function
setValueFn(newValue) {\n var values;\n if (self.paths.length == 1
) {\n // In the singular-dep case, a PathObserver is used and the callb
ack\n // is a scalar value.\n values = self.paths[0].getValueF
rom(model);\n } else {\n // Multiple-deps uses a CompoundPathObs
erver whose callback is an\n // array of values.\n values = []
;\n for (var i = 0; i < self.paths.length; i++) {\n values[i
] = self.paths[i].getValueFrom(model);\n }\n }\n\n self.s
etValue(model, newValue, values, filterRegistry, model);\n }\n\n if (p
aths.length === 1) {\n return new PathObserver(model, paths[0], undefined
, undefined, valueFn,\n setValueFn);\n }\n\n
var binding = new CompoundPathObserver(undefined, undefined, valueFn,\n
setValueFn);\n\n for (var i = 0;
i < paths.length; i++) {\n binding.addPath(model, paths[i]);\n }\n\n
binding.start();\n return binding;\n },\n\n getValue: function(
depsValues, filterRegistry, context) {\n var value = getFn(this.expression)
(depsValues);\n for (var i = 0; i < this.filters.length; i++) {\n va
lue = this.filters[i].transform(value, depsValues, false,\n
filterRegistry,\n
context);\n }\n\n return value;\n },\n\n setValue: function(mode
l, newValue, depsValues, filterRegistry, context) {\n var count = this.filt
ers ? this.filters.length : 0;\n while (count-- > 0) {\n newValue =
this.filters[count].transform(newValue, depsValues, true,\n
filterRegistry,\n
context);\n }\n\n if (this.expression.setValue)\n
return this.expression.setValue(model, newValue, depsValues);\n }\n }\n\n
/**\n * Converts a style property name to a css property name. For example:\n
* \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function convertSt
ylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, function(c) {
\n return '-' + c.toLowerCase();\n });\n }\n\n function PolymerExpress
ions() {}\n\n PolymerExpressions.prototype = {\n // \"built-in\" filters\n
styleObject: function(value) {\n var parts = [];\n for (var key in v
alue) {\n parts.push(convertStylePropertyName(key) + ': ' + value[key]);\
n }\n return parts.join('; ');\n },\n\n tokenList: function(valu
e) {\n var tokens = [];\n for (var key in value) {\n if (value[
key])\n tokens.push(key);\n }\n return tokens.join(' ');\n
},\n\n // binding delegate API\n prepareInstancePositionChanged: function
(template) {\n var indexIdent = template.polymerExpressionIndexIdent_;\n
if (!indexIdent)\n return;\n\n return function(templateInstance,
index) {\n templateInstance.model[indexIdent] = index;\n };\n },\
n\n prepareBinding: function(pathString, name, node) {\n if (Path.get(pa
thString).valid)\n return; // bail out early if pathString is simple path
.\n\n return prepareBinding(pathString, name, node, this);\n },\n\n p
repareInstanceModel: function(template) {\n var scopeName = template.polyme
rExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n var par
entScope = template.templateInstance ?\n template.templateInstance.mode
l :\n template.model;\n\n return function(model) {\n var sc
ope = Object.create(parentScope);\n scope[scopeName] = model;\n re
turn scope;\n };\n }\n };\n\n global.PolymerExpressions = PolymerExpre
ssions;\n\n})(this);\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(function(scope) {\n\n// inject style s
heet\nvar style = document.createElement('style');\nstyle.textContent = 'templat
e {display: none !important;} /* injected by platform.js */';\nvar head = docume
nt.querySelector('head');\nhead.insertBefore(style, head.firstChild);\n\n// flus
h (with logging)\nvar flushing;\nfunction flush() {\n if (!flushing) {\n flu
shing = true;\n scope.endOfMicrotask(function() {\n flushing = false;\n
logFlags.data && console.group('Platform.flush()');\n scope.performMic
rotaskCheckpoint();\n logFlags.data && console.groupEnd();\n });\n }\n}
;\n\n// polling dirty checker\nvar FLUSH_POLL_INTERVAL = 125;\nwindow.addEventLi
stener('WebComponentsReady', function() {\n flush();\n // flush periodically i
f platform does not have object observe.\n if (!Observer.hasObjectObserve) {\n
scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n }\n});\n\n\nif
(window.CustomElements && !CustomElements.useNative) {\n var originalImportNode
= Document.prototype.importNode;\n Document.prototype.importNode = function(no
de, deep) {\n var imported = originalImportNode.call(this, node, deep);\n
CustomElements.upgradeAll(imported);\n return imported;\n }\n}\n\n// exports
\nscope.flush = flush;\n\n})(window.Platform);\n\n"]} |