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

Side by Side Diff: third_party/polymer/platform/platform.js.map

Issue 98583008: Checkout Polymer using bower instead of the raw repository. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/polymer/platform/platform.js ('k') | third_party/polymer/polymer.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 '&amp;';\n case '<':\n return '&lt;'; \n case '\"':\n return '&quot;'\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 + '&nbsp;&nbsp;';\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>&lt;/' + name + '&gt;</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>' + '&lt;';\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 += '&gt;'+ '</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"]}
OLDNEW
« no previous file with comments | « third_party/polymer/platform/platform.js ('k') | third_party/polymer/polymer.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698