1 {"version":3,"file":"polymer.js","sources":["../../polymer-gestures/src/scope.js
","../../polymer-gestures/src/targetfind.js","../../polymer-gestures/src/touch-a
ction.js","../../polymer-gestures/src/eventFactory.js","../../polymer-gestures/s
rc/pointermap.js","../../polymer-gestures/src/dispatcher.js","../../polymer-gest
ures/src/installer.js","../../polymer-gestures/src/mouse.js","../../polymer-gest
ures/src/touch.js","../../polymer-gestures/src/ms.js","../../polymer-gestures/sr
c/pointer.js","../../polymer-gestures/src/platform-events.js","../../polymer-ges
tures/src/track.js","../../polymer-gestures/src/hold.js","../../polymer-gestures
/src/tap.js","../../polymer-expressions/third_party/esprima/esprima.js","../../p
olymer-expressions/src/polymer-expressions.js","polymer-versioned.js","../src/bo
ot.js","../src/lib/lang.js","../src/lib/job.js","../src/lib/dom.js","../src/lib/
super.js","../src/lib/deserialize.js","../src/api.js","../src/instance/utils.js"
,"../src/instance/events.js","../src/instance/attributes.js","../src/instance/pr
operties.js","../src/instance/mdv.js","../src/instance/base.js","../src/instance
/styles.js","../src/declaration/polymer.js","../src/declaration/path.js","../src
/declaration/styles.js","../src/declaration/events.js","../src/declaration/prope
rties.js","../src/declaration/attributes.js","../src/declaration/mdv.js","../src
/declaration/prototype.js","../src/declaration/queue.js","../src/declaration/imp
ort.js","../src/declaration/polymer-element.js","../src/lib/auto-binding.js"],"n
ames":["window","PolymerGestures","hasSDPolyfill","Boolean","ShadowDOMPolyfill",
"wrap","wrapIfNeeded","a","scope","HAS_FULL_PATH","pathTest","document","createE
lement","createShadowRoot","sr","s","appendChild","addEventListener","ev","path"
,"stopPropagation","CustomEvent","bubbles","head","dispatchEvent","parentNode","
removeChild","target","shadow","inEl","shadowRoot","webkitShadowRoot","canTarget
","elementFromPoint","targetingShadow","this","olderShadow","os","olderShadowRoo
t","se","querySelector","allShadows","element","shadows","push","searchRoot","in
Root","x","y","t","owner","nodeType","Node","DOCUMENT_NODE","DOCUMENT_FRAGMENT_N
ODE","findTarget","inEvent","clientX","clientY","findScrollAxis","n","i","length
","_scrollType","currentTarget","host","LCA","b","contains","adepth","depth","bd
epth","d","walk","u","deepContains","common","insideNode","node","rect","getBoun
dingClientRect","left","right","top","bottom","targetFinding","bind","shadowSele
ctor","v","selector","rule","attrib2css","selectors","styles","hasTouchAction","
style","touchAction","hasShadowRoot","forEach","r","String","map","el","textCont
ent","MOUSE_PROPS","MOUSE_DEFAULTS","NOP_FACTORY","eventFactory","preventTap","m
akeBaseEvent","inType","inDict","e","createEvent","initEvent","cancelable","make
GestureEvent","Object","create","k","keys","makePointerEvent","p","buttons","pre
ssure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp",
"isPrimary","_source","PointerMap","USE_MAP","m","Map","pointers","POINTERS_FN",
"values","prototype","size","set","inId","indexOf","has","delete","splice","get"
,"clear","callback","thisArg","call","CLONE_PROPS","CLONE_DEFAULTS","HAS_SVG_INS
TANCE","SVGElementInstance","dispatcher","pointermap","eventMap","eventSources",
"eventSourceList","gestures","gestureQueue","registerSource","name","source","ne
wEvents","events","registerGesture","register","es","l","unregister","down","fir
eEvent","move","type","fillGestureQueue","up","cancel","tapPrevented","eventHand
ler","_handledByPG","fn","listen","addEvent","unlisten","removeEvent","eventName
","addEventListener_","boundHandler","removeEventListener_","removeEventListener
","makeEvent","preventDefault","_target","cloneEvent","eventCopy","corresponding
UseElement","clone","gestureTrigger","g","j","requestAnimationFrame","boundGestu
reTrigger","root","Installer","add","remove","changed","binder","addCallback","r
emoveCallback","changedCallback","MO","observer","mutationWatcher","Array","toAr
ray","slice","filter","MutationObserver","WebKitMutationObserver","SELECTOR","OB
SERVER_INIT","subtree","childList","attributes","attributeOldValue","attributeFi
lter","watchSubtree","observe","enableOnSubtree","readyState","installOnLoad","i
nstallNewSubtree","findElements","addElement","querySelectorAll","removeElement"
,"elementChanged","oldValue","concatLists","accum","list","concat","isElement","
ELEMENT_NODE","flattenMutationTree","inNodes","tree","reduce","mutations","mutat
ionHandler","added","addedNodes","removed","removedNodes","console","warn","DEDU
P_DIST","WHICH_TO_BUTTONS","HAS_BUTTONS","MouseEvent","mouseEvents","POINTER_ID"
,"POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","Math","abs
","dy","prepareEvent","which","mousedown","mouseup","mousemove","relatedTarget",
"cleanupMouse","INSTALLER","DEDUP_TIMEOUT","CLICK_COUNT_TIMEOUT","HYSTERESIS","A
TTRIB","CAN_USE_GLOBAL","touchEvents","elementAdded","getAttribute","st","touchA
ctionToScrollType","elementRemoved","undefined","oldSt","scrollTypes","EMITTER",
"XSCROLLER","YSCROLLER","SCROLLER","exec","firstTouch","isPrimaryTouch","inTouch
","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","cancelResetClick
Count","removePrimaryPointer","inPointer","resetClickCount","clickCount","resetI
d","setTimeout","clearTimeout","typeToButtons","ret","touch","id","currentTouchE
vent","fastPath","touchToPointer","cte","detail","webkitRadiusX","radiusX","webk
itRadiusY","radiusY","webkitForce","force","self","processTouches","inFunction",
"tl","changedTouches","_cancel","cleanUpPointer","shouldScroll","scrollAxis","oa
","da","doa","findTouch","inTL","vacuumTouches","touches","value","key","touchst
art","dedupSynthMouse","touchmove","dd","sqrt","touchcancel","touchend","lt","HA
S_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","msEvents","POINTER_TYPES
","cleanup","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel","poi
nterEvents","pointerdown","pointermove","pointerup","pointercancel","PointerEven
t","navigator","msPointerEnabled","ontouchstart","track","WIGGLE_THRESHOLD","cla
mpDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY","fireTrack","in
TrackingData","downEvent","lastMoveEvent","xDirection","yDirection","ddx","ddy",
"screenX","screenY","trackInfo","downTarget","tracking","hold","HOLD_DELAY","hel
dPointer","holdJob","pulse","Date","now","timeStamp","held","fireHold","clearInt
erval","setInterval","inHoldTime","holdTime","tap","shouldTap","downState","star
t","altKey","ctrlKey","metaKey","shiftKey","global","assert","condition","messag
e","Error","isDecimalDigit","ch","isWhiteSpace","fromCharCode","isLineTerminator
","isIdentifierStart","isIdentifierPart","isKeyword","skipWhitespace","index","c
harCodeAt","getIdentifier","scanIdentifier","Token","Identifier","Keyword","Null
Literal","BooleanLiteral","range","scanPunctuator","code2","ch2","code","ch1","P
unctuator","throwError","Messages","UnexpectedToken","scanNumericLiteral","numbe
r","NumericLiteral","parseFloat","scanStringLiteral","quote","str","octal","Stri
ngLiteral","isIdentifierName","token","advance","EOF","lex","lookahead","peek","
pos","messageFormat","error","args","arguments","msg","replace","whole","descrip
tion","throwUnexpected","expect","match","matchKeyword","keyword","parseArrayIni
tialiser","elements","parseExpression","delegate","createArrayExpression","parse
ObjectPropertyKey","createLiteral","createIdentifier","parseObjectProperty","cre
ateProperty","parseObjectInitialiser","properties","createObjectExpression","par
seGroupExpression","expr","parsePrimaryExpression","createThisExpression","parse
Arguments","parseNonComputedProperty","parseNonComputedMember","parseComputedMem
ber","parseLeftHandSideExpression","property","createMemberExpression","createCa
llExpression","parseUnaryExpression","parsePostfixExpression","createUnaryExpres
sion","binaryPrecedence","prec","parseBinaryExpression","stack","operator","pop"
,"createBinaryExpression","parseConditionalExpression","consequent","alternate",
"createConditionalExpression","parseFilter","createFilter","parseFilters","parse
TopLevel","Syntax","parseInExpression","parseAsExpression","createTopLevel","cre
ateAsExpression","indexName","createInExpression","parse","inDelegate","state","
labelSet","TokenName","ArrayExpression","BinaryExpression","CallExpression","Con
ditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledSta
tement","LogicalExpression","MemberExpression","ObjectExpression","Program","Pro
perty","ThisExpression","UnaryExpression","UnknownLabel","Redeclaration","esprim
a","prepareBinding","expressionText","filterRegistry","expression","getExpressio
n","scopeIdent","tagName","ex","model","oneTime","binding","getBinding","polymer
ExpressionScopeIdent_","indexIdent","polymerExpressionIndexIdent_","expressionPa
rseCache","ASTDelegate","Expression","valueFn_","IdentPath","Path","object","acc
essor","computed","dynamicDeps","simplePath","getFn","Filter","notImplemented","
arg","valueFn","filters","deps","currentPath","ConstantObservable","value_","con
vertStylePropertyName","c","toLowerCase","findScope","prop","parentScopeName","h
asOwnProperty","isLiteralExpression","pathString","isNaN","Number","PolymerExpre
ssions","addPath","getValueFrom","setValue","newValue","setValueFrom",{"end":{"f
ile":"../../polymer-expressions/src/polymer-expressions.js","comments_before":[]
,"nlb":false,"endpos":3539,"pos":3531,"col":8,"line":117,"value":"fullPath","typ
e":"name"},"start":{"file":"../../polymer-expressions/src/polymer-expressions.js
","comments_before":[],"nlb":false,"endpos":3539,"pos":3531,"col":8,"line":117,"
value":"fullPath","type":"name"},"name":"fullPath"},"fullPath","fullPath_","part
s","context","propName","transform","toModelDirection","initialArgs","toModel","
toDOM","apply","unaryOperators","+","-","!","binaryOperators","*","/","%","<",">
","<=",">=","==","!=","===","!==","&&","||","op","argument","test","ident","arr"
,"kind","obj","open","discardChanges","deliver","close","firstTime","firstValue"
,"startReset","getValue","finishReset","setValueFn","CompoundObserver","Observer
Transform","count","random","toString","styleObject","join","tokenList","tokens"
,"prepareInstancePositionChanged","template","templateInstance","valid","PathObs
erver","prepareInstanceModel","scopeName","parentScope","createScopeObject","__p
roto__","defineProperty","configurable","writable","Polymer","version","extend",
"api","getOwnPropertyNames","pd","getOwnPropertyDescriptor","nom","job","wait","
stop","Job","go","inContext","boundComplete","complete","h","handle","cancelAnim
ationFrame","registry","HTMLElement","tag","getPrototypeForTag","getPrototypeOf"
,"originalStopPropagation","Event","cancelBubble","$super","arrayOfArgs","caller
","_super","nameInThis","memoizeSuper","n$","method","proto","nextSuper","super"
,"deserializeValue","currentValue","inferredType","typeHandlers","string","date"
,"boolean","parseInt","JSON","function","declaration","instance","publish","apis
","utils","async","timeout","Platform","flush","cancelAsync","fire","onNode","ev
ent","asyncFire","classFollows","anew","old","className","classList","injectBoun
dHTML","html","innerHTML","fragment","instanceTemplate","nop","nob","asyncMethod
","log","logFlags","EVENT_PREFIX","addHostListeners","eventDelegates","localName
","methodName","getEventHandler","dispatchMethod","group","groupEnd","copyInstan
ceAttributes","a$","_instanceAttributes","hasAttribute","setAttribute","takeAttr
ibutes","_publishLC","attributeToProperty","propertyForAttribute","search","bind
Pattern","stringValue","serializeValue","reflectPropertyToAttribute","serialized
Value","removeAttribute","areSameValue","numberIsNaN","resolveBindingValue","upd
ateRecord","createPropertyObserver","_observeNames","o","_propertyObserver","reg
isterObserver","observeArrayValue","openPropertyObserver","notifyPropertyChanges
","newValues","oldValues","paths","called","ov","nv","invokeMethod","deliverChan
ges","propertyChanged_","reflect","callbackName","isArray","closeNamedObserver",
"ArrayObserver","registerNamedObserver","emitPropertyChangeRecord","Observer","h
asObjectObserve","notifier","notifier_","getNotifier","notify","bindToAccessor",
"observable","resolveFn","privateName","privateObservable","resolvedValue","crea
teComputedProperties","_computedNames","syntax","bindProperty","_observers","clo
seObservers","observers","o$","_namedObservers","closeNamedObservers","mdv","bin
dingDelegate","dom","createInstance","bindings_","enableBindingsReflection","pat
h_","_recordBinding","mixinSuper","bindFinished","makeElementReady","asyncUnbind
All","_unbound","unbind","_unbindAllJob","unbindAll","cancelUnbindAll","mustache
Pattern","isBase","PolymerBase","base","created","ready","createdCallback","prep
areElement","ownerDocument","isStagingDocument","_elementPrepared","shadowRoots"
,"_readied","parseDeclarations","attachedCallback","attached","enteredView","has
BeenAttached","domReady","detachedCallback","preventDispose","detached","leftVie
w","enteredViewCallback","leftViewCallback","enteredDocumentCallback","leftDocum
entCallback","parseDeclaration","elementElement","fetchTemplate","shadowFromTemp
late","shadowRootReady","lightFromTemplate","refNode","eventController","insertB
efore","marshalNodeReferences","$","attributeChangedCallback","attributeChanged"
,"onMutation","listener","disconnect","constructor","Base","shimCssText","cssTex
t","is","ShadowCSS","makeScopeSelector","STYLE_SCOPE_ATTRIBUTE","STYLE_CONTROLLE
R_SCOPE","installControllerStyles","findStyleScope","scopeHasNamedStyle","cssTex
tForScope","installScopeCssText","installScopeStyle","cssTextToScopeStyle","appl
yStyleToScope","_scopeStyles","script","_currentScript","getRegisteredPrototype"
,"registerPrototype","notifyPrototype","waitingForPrototype","client","waitProto
type","registerWhenReady","prototypesByName","declarations","deliverDeclarations
","resolveElementPaths","urlResolver","resolveDom","addResolvePathApi","assetPat
h","URL","baseURI","resolvePath","urlPath","href","importRuleForSheet","sheet","
baseUrl","createStyleElement","attr","firstElementChild","s$","nextElementSiblin
g","cssTextFromSheet","__resource","matchesSelector","inSelector","matches","STY
LE_SELECTOR","STYLE_LOADABLE_MATCH","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE
_ATTR","loadStyles","content","templateContent","convertSheetsToStyles","findLoa
dableStyles","templateUrl","styleResolver","copySheetAttributes","replaceChild",
"link","loadables","installSheets","cacheSheets","cacheStyles","installLocalShee
ts","installGlobalStyles","sheets","findNodes","firstChild","matcher","nodes","a
rray","templateNodes","styleForScope","scopeDescriptor","webkitMatchesSelector",
"mozMatchesSelector","mixedCaseEventTypes","parseHostEvents","delegates","addAtt
ributeDelegates","hasEventPrefix","removeEventPrefix","trim","prefixLength","fin
dController","controller","prepareEventBinding","eventType","bindingValue","hand
ler","inferObservers","explodeObservers","exploded","ni","names","split","optimi
zePropertyMaps","_publishNames","publishProperties","requireProperties","lowerCa
seMap","propertyDescriptors","propertyDescriptor","reflects","reflectHintForDesc
riptor","valueForDescriptor","createPropertyAccessor","createPropertyAccessors",
"ATTRIBUTES_ATTRIBUTE","ATTRIBUTES_REGEX","inheritAttributesObjects","inheritObj
ect","publishAttributes","hasValue","accumulateInstanceAttributes","clonable","i
sInstanceAttribute","blackList","extends","noscript","assetpath","cache-csstext"
,"installBindingDelegate","ensurePrototypeTraversal","ancestor","extendeeName","
buildPrototype","publishConstructor","extension","generateBasePrototype","desuga
rBeforeChaining","chainPrototypes","desugarAfterChaining","inheritMetaData","cha
ined","chainObject","extendee","shimStyling","registerCallback","symbol","ctor",
"extnds","findBasePrototype","ensureBaseApi","memoizedBases","extended","mixinMe
thod","info","typeExtension","findTypeExtension","registerElement","inherited","
queueForElement","mainQueue","importQueue","nextQueued","whenPolymerReady","queu
e","waitToReady","CustomElements","HTMLImports","whenImportsReady","addReadyCall
back","check","shouldAdd","flushQueue","__check","__go","useNative","readied","a
ddToFlushQueue","shift","nextElement","canReady","isEmpty","upgradeDocumentTree"
,"flushReadyCallbacks","readyCallbacks","importElements","elementOrFragment","im
portUrls","urls","url","frag","createDocumentFragment","rel","import","isRegiste
red","isCustomTag","init","loadResources","registered","waitingForQueue","waitin
gForResources","_register","handleNoScript","_needsResources","body","makeSyntax
"],"mappings":"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
BnC6d,GAAYnb,WACVqX,sBAAuB,SAASiI,EAAIC,GAClC,IAAKnB,EAAekB,GAClB,KAAMvN,OAAM,wB
AA0BuN,EAIxC,OAFAC,GAAW1D,EAAM0D,GAEV,SAAS5E,EAAO/V,EAAUyV,GAC/B,MAAO+D,GAAekB,G
AAIC,EAAS5E,EAAO/V,EAAUyV,MAIxDzC,uBAAwB,SAAS0H,EAAIljB,EAAMC,GACzC,IAAKmiB,EAAg
Bc,GACnB,KAAMvN,OAAM,wBAA0BuN,EAKxC,OAHAljB,GAAOyf,EAAMzf,GACbC,EAAQwf,EAAMxf,GA
EP,SAASse,EAAO/V,EAAUyV,GAC/B,MAAOmE,GAAgBc,GAAIljB,EAAKue,EAAO/V,EAAUyV,GACtBhe
,EAAMse,EAAO/V,EAAUyV,MAItDrC,4BAA6B,SAASwH,EAAM1H,EAAYC,GAKtD,MAJAyH,GAAO3D,EAA
M2D,GACb1H,EAAa+D,EAAM/D,GACnBC,EAAY8D,EAAM9D,GAEX,SAAS4C,EAAO/V,EAAUyV,GAC/B,MA
AOmF,GAAK7E,EAAO/V,EAAUyV,GACzBvC,EAAW6C,EAAO/V,EAAUyV,GAC5BtC,EAAU4C,EAAO/V,EAA
UyV,KAInCpE,iBAAkB,SAASxU,GACzB,GAAIge,GAAQ,GAAInE,GAAU7Z,EAE1B,OADAge,GAAMpd,KA
AO,aACNod,GAGTxI,uBAAwB,SAASwE,EAAUD,EAAQxE,GACjD,GAAI0D,GAAK,GAAIhB,GAAiB8B,EAA
QxE,EAAUyE,EAGhD,OAFIf,GAAGiB,cACLriB,KAAKqiB,aAAc,GACdjB,GAGTxD,qBAAsB,SAASoD,E
AAYvF,GACzC,KAAMuF,YAAsBgB,IAC1B,KAAMvJ,OAAM,mDAEd,IAAI9M,GAAS,GAAI6W,GAAOxB,EAA
W7Y,KAAMsT,EAEzC,OAAO,UAAS4F,EAAO/V,EAAUyV,GAC/B,MAAOpV,GAAO6Y,UAAUnD,EAAO/V,EAA
UyV,GAAgB,KAI7DrE,cAAe,SAAS1B,GACtB,MAAO,IAAIiF,GAAQjF,EAAMpH,QAG3B4I,sBAAuB,SAA
SH,GAC9B,IAAK,GAAI3a,GAAI,EAAGA,EAAI2a,EAAS1a,OAAQD,IACnC2a,EAAS3a,GAAK6gB,EAAMl
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
4uB","sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Proj
ect Authors. All rights reserved.\n * This code may only be used under the BSD s
tyle license found at http://polymer.github.io/LICENSE.txt\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\
n */\nwindow.PolymerGestures = {\n hasSDPolyfill: Boolean(window.ShadowDOMPolyf
ill)\n};\nPolymerGestures.wrap = PolymerGestures.hasSDPolyfill ? ShadowDOMPolyfi
ll.wrapIfNeeded : function(a){ return a; };\n","/*\n * Copyright (c) 2014 The Po
lymer Project Authors. All rights reserved.\n * This code may only be used under
the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The com
plete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * Th
e complete set of contributors may be found at http://polymer.github.io/CONTRIBU
TORS.txt\n * Code distributed by Google as part of the polymer project is also\n
* subject to an additional IP rights grant found at http://polymer.github.io/PA
TENTS.txt\n */\n\n(function(scope) {\n var HAS_FULL_PATH = false;\n\n // test
for full event path support\n var pathTest = document.createElement('meta');\n
if (!scope.hasSDPolyfill && pathTest.createShadowRoot) {\n var sr = pathTest
.createShadowRoot();\n var s = document.createElement('span');\n sr.append
Child(s);\n pathTest.addEventListener('testpath', function(ev) {\n if (e
v.path) {\n // if the span is in the event path, then path[0] is the real
source for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n
ev.stopPropagation();\n });\n var ev = new CustomEvent('testpath', {bubb
les: true});\n // must add node to DOM to trigger event listener\n documen
t.head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest.parentNode
.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\n\n var ta
rget = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.s
hadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(sh
adow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n t
argetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (th
is.canTarget(s)) {\n return s;\n }\n },\n olderShadow: functio
n(shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) {\n v
ar se = shadow.querySelector('shadow');\n if (se) {\n os = se.ol
derShadowRoot;\n }\n }\n return os;\n },\n allShadows: fu
nction(element) {\n var shadows = [], s = this.shadow(element);\n whil
e(s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n
return shadows;\n },\n searchRoot: function(inRoot, x, y) {\n var
t, st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPoint(x, y);\
n if (t) {\n // found element, check if it has a ShadowRoot\n
sr = this.targetingShadow(t);\n } else if (inRoot !== document) {\
n // check for sibling roots\n sr = this.olderShadow(inRoot);\
n }\n // search other roots, fall back to light dom element\n
return this.searchRoot(sr, x, y) || t;\n }\n },\n owner: function(
element) {\n if (!element) {\n return document;\n }\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 // the owner e
lement is expected to be a Document or ShadowRoot\n if (s.nodeType != Node.
DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = docum
ent;\n }\n return s;\n },\n findTarget: function(inEvent) {\n
if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[0];\n
}\n var x = inEvent.clientX, y = inEvent.clientY;\n // if the listener
is in the shadow root, it is much faster to start there\n var s = this.own
er(inEvent.target);\n // if x, y is not in this root, fall back to document
search\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\
n return this.searchRoot(s, x, y);\n },\n findScrollAxis: function(in
Event) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n var
path = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n
n = path[i];\n if (n._scrollType) {\n return n._scrollType;
\n }\n }\n } else {\n n = scope.wrap(inEvent.current
Target);\n while(n) {\n if (n._scrollType) {\n return
n._scrollType;\n }\n n = n.parentNode || n.host;\n }\n
}\n },\n LCA: function(a, b) {\n if (a === b) {\n return
a;\n }\n if (a && !b) {\n return a;\n }\n if (b && !
a) {\n return b;\n }\n if (!b && !a) {\n return document
;\n }\n // fast case, a is a direct descendant of b or vice versa\n
if (a.contains && a.contains(b)) {\n return a;\n }\n if (b.c
ontains && b.contains(a)) {\n return b;\n }\n var adepth = this
.depth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n
if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = th
is.walk(b, -d);\n }\n while (a && b && a !== b) {\n a = a.paren
tNode || a.host;\n b = b.parentNode || b.host;\n }\n return a;\
n },\n walk: function(n, u) {\n for (var i = 0; n && (i < u); i++) {\
n n = n.parentNode || n.host;\n }\n return n;\n },\n dept
h: function(n) {\n var d = 0;\n while(n) {\n d++;\n n =
n.parentNode || n.host;\n }\n return d;\n },\n deepContains: fun
ction(a, b) {\n var common = this.LCA(a, b);\n // if a is the common a
ncestor, it must \"deeply\" contain b\n return common === a;\n },\n i
nsideNode: function(node, x, y) {\n var rect = node.getBoundingClientRect()
;\n return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <
= rect.bottom);\n }\n };\n scope.targetFinding = target;\n /**\n * Given
an event, finds the \"deepest\" node that could have been the original target b
efore ShadowDOM retargetting\n *\n * @param {Event} Event An event object wi
th clientX and clientY properties\n * @return {Element} The probable event ori
gninator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n
* Determines if the \"container\" node deeply contains the \"containee\" node,
including situations where the \"containee\" is contained by one or more ShadowD
OM\n * roots.\n *\n * @param {Node} container\n * @param {Node} containe
e\n * @return {Boolean}\n */\n scope.deepContains = target.deepContains.bin
d(target);\n\n /**\n * Determines if the x/y position is inside the given nod
e.\n *\n * Example:\n *\n * function upHandler(event) {\n *
var innode = PolymerGestures.insideNode(event.target, event.clientX, event.clien
tY);\n * if (innode) {\n * // wait for tap?\n * } else
{\n * // tap will never happen\n * }\n * }\n *\n *
@param {Node} node\n * @param {Number} x Screen X position\n * @param {Numbe
r} y screen Y position\n * @return {Boolean}\n */\n scope.insideNode = targ
et.insideNode;\n\n})(window.PolymerGestures);\n","/*\n *\n * Copyright (c) 2014
The Polymer Project Authors. All rights reserved.\n * This code may only be used
under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * T
he complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\
n * The complete set of contributors may be found at http://polymer.github.io/CO
NTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is
also\n * subject to an additional IP rights grant found at http://polymer.github
.io/PATENTS.txt\n */\n\n(function() {\n function shadowSelector(v) {\n retur
n 'body /deep/ ' + selector(v);\n }\n function selector(v) {\n return '[tou
ch-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-a
ction: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'n
one',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y'
,\n selectors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n
},\n 'manipulation'\n ];\n var styles = '';\n // only install styleshee
t if the browser has touch action support\n var head = document.head;\n var ha
sTouchAction = typeof document.head.style.touchAction === 'string';\n // only a
dd shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.Sha
dowDOMPolyfill && document.head.createShadowRoot;\n\n if (hasTouchAction) {\n
attrib2css.forEach(function(r) {\n if (String(r) === r) {\n styles
+= selector(r) + rule(r) + '\\n';\n if (hasShadowRoot) {\n styl
es += shadowSelector(r) + rule(r) + '\\n';\n }\n } else {\n s
tyles += r.selectors.map(selector) + rule(r.rule) + '\\n';\n if (hasShado
wRoot) {\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '
\\n';\n }\n }\n });\n\n var el = document.createElement('style
');\n el.textContent = styles;\n document.head.appendChild(el);\n }\n})()
;\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This is the cons
tructor 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 cert
ain platform requirements, events returned from the constructor\n * identify as
MouseEvents.\n *\n * @constructor\n * @param {String} inType The type of the eve
nt to create.\n * @param {Object} [inDict] An optional dictionary of initial eve
nt properties.\n * @return {Event} A new PointerEvent of type `inType` and initi
alized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PR
OPS = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'scr
eenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'alt
Key',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n
'pageX',\n 'pageY'\n ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,
\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n
false,\n false,\n 0,\n null,\n 0,\n 0\n ];\n\n var NOP_FACT
ORY = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO
(dfreedm): this is overridden by tap recognizer, needs review\n preventTap: N
OP_FACTORY,\n makeBaseEvent: function(inType, inDict) {\n var e = docume
nt.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inD
ict.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n
return e;\n },\n makeGestureEvent: function(inType, inDict) {\n in
Dict = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType
, inDict);\n for (var i = 0, keys = Object.keys(inDict), k; i < keys.length
; i++) {\n k = keys[i];\n e[k] = inDict[k];\n }\n return
e;\n },\n makePointerEvent: function(inType, inDict) {\n inDict = in
Dict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict)
;\n // define inherited MouseEvent properties\n for(var i = 0, p; i <
MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n e[p] = inDict[p
] || MOUSE_DEFAULTS[i];\n }\n e.buttons = inDict.buttons || 0;\n\n
// Spec requires that pointers without pressure specified use 0.5 for down\n
// state and 0 for up state.\n var pressure = 0;\n if (inDict.pres
sure) {\n pressure = inDict.pressure;\n } else {\n pressure =
e.buttons ? 0.5 : 0;\n }\n\n // add x/y properties aliased to clientX
/Y\n e.x = e.clientX;\n e.y = e.clientY;\n\n // define the proper
ties of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n
e.width = inDict.width || 0;\n e.height = inDict.height || 0;\n
e.pressure = pressure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDi
ct.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimes
tamp = inDict.hwTimestamp || 0;\n e.isPrimary = inDict.isPrimary || false;\
n e._source = inDict._source || '';\n return e;\n }\n };\n\n scop
e.eventFactory = eventFactory;\n})(window.PolymerGestures);\n","/*\n * Copyright
(c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may on
ly be used under the BSD style license found at http://polymer.github.io/LICENSE
.txt\n * The complete set of authors may be found at http://polymer.github.io/AU
THORS.txt\n * The complete set of contributors may be found at http://polymer.gi
thub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer p
roject is also\n * subject to an additional IP rights grant found at http://poly
mer.github.io/PATENTS.txt\n */\n\n/**\n * This module implements an map of point
er states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.pro
totype.forEach;\n var POINTERS_FN = function(){ return this.size; };\n functio
n PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers
= POINTERS_FN;\n return m;\n } else {\n this.keys = [];\n thi
s.values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId
, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n
this.values[i] = inEvent;\n } else {\n this.keys.push(inId);\n
this.values.push(inEvent);\n }\n },\n has: function(inId) {\n
return this.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\
n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.
splice(i, 1);\n this.values.splice(i, 1);\n }\n },\n get: func
tion(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i
];\n },\n clear: function() {\n this.keys.length = 0;\n this.val
ues.length = 0;\n },\n // return value, key, map\n forEach: function(ca
llback, thisArg) {\n this.values.forEach(function(v, i) {\n callback
.call(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: f
unction() {\n return this.keys.length;\n }\n };\n\n scope.PointerMap =
PointerMap;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Poly
mer Project Authors. All rights reserved.\n * This code may only be used under t
he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl
ete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The
complete set of contributors may be found at http://polymer.github.io/CONTRIBUTO
RS.txt\n * Code distributed by Google as part of the polymer project is also\n *
subject to an additional IP rights grant found at http://polymer.github.io/PATE
NTS.txt\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n
'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n
'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n
'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Lev
el 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',\n '
height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n '
hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target
',\n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeSta
mp',\n // gesture addons\n 'preventTap',\n 'tapPrevented',\n '_sourc
e'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\
n null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n
false,\n false,\n 0,\n null,\n // DOM Level 3\n 0,\n // Poi
nterEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n
false,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n
0,\n 0,\n function(){},\n false\n ];\n\n var HAS_SVG_INSTANCE = (ty
peof SVGElementInstance !== 'undefined');\n\n var eventFactory = scope.eventFac
tory;\n\n var hasSDPolyfill = scope.hasSDPolyfill;\n var wrap = scope.wrap;\n\
n /**\n * This module is for normalizing events. Mouse and Touch events will
be\n * collected here, and fire PointerEvents that have the same semantics, no
\n * matter the source.\n * Events fired:\n * - pointerdown: a pointing
is added\n * - pointerup: a pointer is removed\n * - pointermove: a poin
ter is moved\n * - pointerover: a pointer crosses into an element\n * -
pointerout: a pointer leaves an element\n * - pointercancel: a pointer will
no longer generate events\n */\n var dispatcher = {\n pointermap: new scop
e.PointerMap(),\n eventMap: Object.create(null),\n // Scope objects for na
tive events.\n // This exists for ease of testing.\n eventSources: Object.
create(null),\n eventSourceList: [],\n gestures: [],\n gestureQueue: []
,\n /**\n * Add a new event source that will generate pointer events.\n
*\n * `inSource` must contain an array of event names named `events`, and
\n * functions with the names specified in the `events` array.\n * @para
m {string} name A name for the event source\n * @param {Object} source A new
source of platform events.\n */\n registerSource: function(name, source)
{\n var s = source;\n var newEvents = s.events;\n if (newEvents)
{\n newEvents.forEach(function(e) {\n if (s[e]) {\n
this.eventMap[e] = s[e].bind(s);\n }\n }, this);\n this.e
ventSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n
registerGesture: function(name, source) {\n this.gestures.push(source);
\n },\n register: function(element) {\n var l = this.eventSourceList.
length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i+
+) {\n // call eventsource register\n es.register.call(es, element
);\n }\n },\n unregister: function(element) {\n var l = this.eve
ntSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourc
eList[i]); i++) {\n // call eventsource register\n es.unregister.c
all(es, element);\n }\n },\n // EVENTS\n down: function(inEvent) {
\n this.fireEvent('down', inEvent);\n },\n move: function(inEvent) {\
n // pipe move events into gesture queue directly\n inEvent.type = 'mo
ve';\n this.fillGestureQueue(inEvent);\n },\n up: function(inEvent) {
\n this.fireEvent('up', inEvent);\n },\n cancel: function(inEvent) {\
n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent);\n }
,\n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n // This i
s used to prevent multiple dispatch of events from\n // platform events. Th
is can happen when two elements in different scopes\n // are set up to crea
te pointer events, which is relevant to Shadow DOM.\n if (inEvent._handledB
yPG) {\n return;\n }\n var type = inEvent.type;\n var fn =
this.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n
}\n inEvent._handledByPG = true;\n },\n // set up event listener
s\n listen: function(target, events) {\n for (var i = 0, l = events.leng
th, e; (i < l) && (e = events[i]); i++) {\n this.addEvent(target, e);\n
}\n },\n // remove event listeners\n unlisten: function(target, eve
nts) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]);
i++) {\n this.removeEvent(target, e);\n }\n },\n addEvent: fun
ction(target, eventName) {\n // NOTE: Work around for #4, use native event
listener in SD Polyfill\n if (hasSDPolyfill) {\n target.addEventList
ener_(eventName, this.boundHandler);\n } else {\n target.addEventLis
tener(eventName, this.boundHandler);\n }\n },\n removeEvent: function
(target, eventName) {\n // NOTE: Work around for #4, use native event liste
ner in SD Polyfill\n if (hasSDPolyfill) {\n target.removeEventListen
er_(eventName, this.boundHandler);\n } else {\n target.removeEventLi
stener(eventName, this.boundHandler);\n }\n },\n // EVENT CREATION AN
D TRACKING\n /**\n * Creates a new Event of type `inType`, based on the i
nformation in\n * `inEvent`.\n *\n * @param {string} inType A string
representing the type of event to create\n * @param {Event} inEvent A platf
orm event with a target\n * @return {Event} A PointerEvent of type `inType`\
n */\n makeEvent: function(inType, inEvent) {\n var e = eventFactory
.makePointerEvent(inType, inEvent);\n e.preventDefault = inEvent.preventDef
ault;\n e.tapPrevented = inEvent.tapPrevented;\n e._target = e._target
|| inEvent.target;\n return e;\n },\n // make and dispatch an event
in one call\n fireEvent: function(inType, inEvent) {\n var e = this.make
Event(inType, inEvent);\n return this.dispatchEvent(e);\n },\n /**\n
* Returns a snapshot of inEvent, with writable properties.\n *\n * @
param {Event} inEvent An event that contains properties to copy.\n * @return
{Object} An object containing shallow copies of `inEvent`'s\n * properti
es.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.
create(null), p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n
p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n
// Work around SVGInstanceElement shadow tree\n // Return the <use>
element that is represented by the instance for Safari, Chrome, IE.\n //
This is the behavior implemented by Firefox.\n if (p === 'target' || p =
== 'relatedTarget') {\n if (HAS_SVG_INSTANCE && eventCopy[p] instanceof
SVGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUse
Element;\n }\n eventCopy[p] = wrap(eventCopy[p]);\n }\n
}\n // keep the semantics of preventDefault\n eventCopy.preventD
efault = inEvent.preventDefault;\n return eventCopy;\n },\n /**\n
* Dispatches the event to its target.\n *\n * @param {Event} inEvent Th
e event to be dispatched.\n * @return {Boolean} True if an event handler ret
urns true, false otherwise.\n */\n dispatchEvent: function(inEvent) {\n
var t = inEvent._target;\n if (t) {\n t.dispatchEvent(inEvent);\
n // clone the event for the gesture system to process\n // clone
after dispatch to pick up gesture prevention code\n var clone = this.clon
eEvent(inEvent);\n clone.target = t;\n this.fillGestureQueue(clone
);\n }\n },\n gestureTrigger: function() {\n // process the gest
ure queue\n for (var i = 0, e; i < this.gestureQueue.length; i++) {\n
e = this.gestureQueue[i];\n for (var j = 0, g, fn; j < this.gestures.le
ngth; j++) {\n g = this.gestures[j];\n fn = g[e.type];\n
if (fn) {\n fn.call(g, e);\n }\n }\n }\n
this.gestureQueue.length = 0;\n },\n fillGestureQueue: function(ev) {\n
// only trigger the gesture queue once\n if (!this.gestureQueue.length
) {\n requestAnimationFrame(this.boundGestureTrigger);\n }\n th
is.gestureQueue.push(ev);\n }\n };\n dispatcher.boundHandler = dispatcher.e
ventHandler.bind(dispatcher);\n dispatcher.boundGestureTrigger = dispatcher.ges
tureTrigger.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.registe
r = function(root) {\n dispatcher.register(root);\n };\n scope.unregister =
dispatcher.unregister.bind(dispatcher);\n scope.wrap = wrap;\n})(window.Polyme
rGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All right
s reserved.\n * This code may only be used under the BSD style license found at
http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be foun
d at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors m
ay be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by
Google as part of the polymer project is also\n * subject to an additional IP r
ights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This m
odule uses Mutation Observers to dynamically adjust which nodes will\n * generat
e Pointer Events.\n *\n * All nodes that wish to generate Pointer Events must ha
ve the attribute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n v
ar forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\n var
map = Array.prototype.map.call.bind(Array.prototype.map);\n var toArray = Array
.prototype.slice.call.bind(Array.prototype.slice);\n var filter = Array.prototy
pe.filter.call.bind(Array.prototype.filter);\n var MO = window.MutationObserver
|| window.WebKitMutationObserver;\n var SELECTOR = '[touch-action]';\n var OB
SERVER_INIT = {\n subtree: true,\n childList: true,\n attributes: true,
\n attributeOldValue: true,\n attributeFilter: ['touch-action']\n };\n\n
function Installer(add, remove, changed, binder) {\n this.addCallback = add.
bind(binder);\n this.removeCallback = remove.bind(binder);\n this.changedC
allback = changed.bind(binder);\n if (MO) {\n this.observer = new MO(thi
s.mutationWatcher.bind(this));\n }\n }\n\n Installer.prototype = {\n wat
chSubtree: function(target) {\n // Only watch scopes that can target find,
as these are top-level.\n // Otherwise we can see duplicate additions and r
emovals that add noise.\n //\n // TODO(dfreedman): For some instances
with ShadowDOMPolyfill, we can see\n // a removal without an insertion when
a node is redistributed among\n // shadows. Since it all ends up correct i
n the document, watching only\n // the document will yield the correct muta
tions to watch.\n if (scope.targetFinding.canTarget(target)) {\n thi
s.observer.observe(target, OBSERVER_INIT);\n }\n },\n enableOnSubtree
: function(target) {\n this.watchSubtree(target);\n if (target === doc
ument && document.readyState !== 'complete') {\n this.installOnLoad();\n
} else {\n this.installNewSubtree(target);\n }\n },\n ins
tallNewSubtree: function(target) {\n forEach(this.findElements(target), thi
s.addElement, this);\n },\n findElements: function(target) {\n if (ta
rget.querySelectorAll) {\n return target.querySelectorAll(SELECTOR);\n
}\n return [];\n },\n removeElement: function(el) {\n this.re
moveCallback(el);\n },\n addElement: function(el) {\n this.addCallbac
k(el);\n },\n elementChanged: function(el, oldValue) {\n this.changed
Callback(el, oldValue);\n },\n concatLists: function(accum, list) {\n
return accum.concat(toArray(list));\n },\n // register all touch-action =
none nodes on document load\n installOnLoad: function() {\n document.ad
dEventListener('readystatechange', function() {\n if (document.readyState
=== 'complete') {\n this.installNewSubtree(document);\n }\n
}.bind(this));\n },\n isElement: function(n) {\n return n.nodeType
=== Node.ELEMENT_NODE;\n },\n flattenMutationTree: function(inNodes) {\n
// find children with touch-action\n var tree = map(inNodes, this.findE
lements, this);\n // make sure the added nodes are accounted for\n tre
e.push(filter(inNodes, this.isElement));\n // flatten the list\n retur
n tree.reduce(this.concatLists, []);\n },\n mutationWatcher: function(muta
tions) {\n mutations.forEach(this.mutationHandler, this);\n },\n muta
tionHandler: function(m) {\n if (m.type === 'childList') {\n var add
ed = this.flattenMutationTree(m.addedNodes);\n added.forEach(this.addElem
ent, this);\n var removed = this.flattenMutationTree(m.removedNodes);\n
removed.forEach(this.removeElement, this);\n } else if (m.type === 'a
ttributes') {\n this.elementChanged(m.target, m.oldValue);\n }\n
}\n };\n\n if (!MO) {\n Installer.prototype.watchSubtree = function(){\n
console.warn('PolymerGestures: MutationObservers not found, touch-action will
not be dynamically detected');\n };\n }\n\n scope.Installer = Installer;\n
})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Au
thors. All rights reserved.\n * This code may only be used under the BSD style l
icense found at http://polymer.github.io/LICENSE.txt\n * The complete set of aut
hors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set o
f contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Cod
e distributed by Google as part of the polymer project is also\n * subject to an
additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n
\n(function (scope) {\n var dispatcher = scope.dispatcher;\n var pointermap =
dispatcher.pointermap;\n // radius around touchend that swallows mouse events\n
var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BU
TTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).
buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n
var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n event
s: [\n 'mousedown',\n 'mousemove',\n 'mouseup'\n ],\n regis
ter: function(target) {\n if (target !== document) {\n return;\n
}\n dispatcher.listen(target, this.events);\n },\n unregister: func
tion(target) {\n dispatcher.unlisten(target, this.events);\n },\n las
tTouches: [],\n // collide with the global mouse listener\n isEventSimulat
edFromTouch: function(inEvent) {\n var lts = this.lastTouches;\n var x
= inEvent.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length,
t; i < l && (t = lts[i]); i++) {\n // simulated mouse events will be swal
lowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs
(y - t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n retur
n true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n
var e = dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\
n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._s
ource = 'mouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTON
S[e.which] || 0;\n }\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.mouseup(inEvent);\n }\n var e = this.prepareEvent(i
nEvent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n poi
ntermap.set(this.POINTER_ID, e.target);\n dispatcher.down(e);\n }\n
},\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromT
ouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n e.target
= pointermap.get(this.POINTER_ID);\n dispatcher.move(e);\n }\n },
\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(in
Event)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget
= scope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(this
.POINTER_ID);\n dispatcher.up(e);\n this.cleanupMouse();\n }\
n },\n cleanupMouse: function() {\n pointermap['delete'](this.POINTER
_ID);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGestu
res);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese
rved.\n * This code may only be used under the BSD style license found at http:/
/polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h
ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl
e as part of the polymer project is also\n * subject to an additional IP rights
grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n
var dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.all
Shadows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n
var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This s
hould be long enough to ignore compat mouse events made by touch\n var DEDUP_TI
MEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var A
TTRIB = 'touch-action';\n var INSTALLER;\n // maybe one day...\n // var CAN_U
SE_GLOBAL = ATTRIB in document.head.style;\n var CAN_USE_GLOBAL = false;\n\n /
/ handler block for native touch events\n var touchEvents = {\n events: [\n
'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n
],\n register: function(target) {\n if (CAN_USE_GLOBAL) {\n d
ispatcher.listen(target, this.events);\n } else {\n INSTALLER.enable
OnSubtree(target);\n }\n },\n unregister: function(target) {\n i
f (CAN_USE_GLOBAL) {\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(ATTR
IB);\n var st = this.touchActionToScrollType(a);\n if (st) {\n
el._scrollType = st;\n dispatcher.listen(el, this.events);\n // se
t touch-action on shadows as well\n allShadows(el).forEach(function(s) {\
n s._scrollType = st;\n dispatcher.listen(s, this.events);\n
}, this);\n }\n },\n elementRemoved: function(el) {\n el._
scrollType = undefined;\n dispatcher.unlisten(el, this.events);\n // r
emove touch-action from shadow\n allShadows(el).forEach(function(s) {\n
s._scrollType = undefined;\n dispatcher.unlisten(s, this.events);\n
}, this);\n },\n elementChanged: function(el, oldValue) {\n var a
= el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n
var oldSt = this.touchActionToScrollType(oldValue);\n // simply update
scrollType if listeners are already established\n if (st && oldSt) {\n
el._scrollType = st;\n allShadows(el).forEach(function(s) {\n
s._scrollType = st;\n }, this);\n } else if (oldSt) {\n this
.elementRemoved(el);\n } else if (st) {\n this.elementAdded(el);\n
}\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan
-x',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-
x)|auto|manipulation$/\n },\n touchActionToScrollType: function(touchActio
n) {\n var t = touchAction;\n var st = this.scrollTypes;\n if (t
=== 'none') {\n return 'none';\n } else if (t === st.XSCROLLER) {\n
return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\
n } else if (st.SCROLLER.exec(t)) {\n return 'XY';\n }\n },\
n POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function
(inTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n s
etPrimaryTouch: function(inTouch) {\n // set primary touch if there no poin
ters, or the only pointer is the mouse\n if (pointermap.pointers() === 0 ||
(pointermap.pointers() === 1 && pointermap.has(1))) {\n this.firstTouch
= inTouch.identifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.cl
ientY};\n this.scrolling = null;\n this.cancelResetClickCount();\n
}\n },\n removePrimaryPointer: function(inPointer) {\n if (inPo
inter.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null
;\n this.resetClickCount();\n }\n },\n clickCount: 0,\n res
etId: null,\n resetClickCount: function() {\n var fn = function() {\n
this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n
this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelReset
ClickCount: function() {\n if (this.resetId) {\n clearTimeout(this.r
esetId);\n }\n },\n typeToButtons: function(type) {\n var ret =
0;\n if (type === 'touchstart' || type === 'touchmove') {\n ret = 1;
\n }\n return ret;\n },\n findTarget: function(touch, id) {\n
if (this.currentTouchEvent.type === 'touchstart') {\n if (this.isPrima
ryTouch(touch)) {\n var fastPath = {\n clientX: touch.client
X,\n clientY: touch.clientY,\n path: this.currentTouchEven
t.path,\n target: scope.wrap(this.currentTouchEvent.target)\n
};\n return scope.findTarget(fastPath);\n } else {\n
return scope.findTarget(touch);\n }\n }\n // reuse target we fo
und in touchstart\n return pointermap.get(id);\n },\n touchToPointer:
function(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dis
patcher.cloneEvent(inTouch);\n // Spec specifies that pointerId 1 is reserv
ed for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the
touch identifier for compatibility.\n var id = e.pointerId = inTouch.ident
ifier + 2;\n e.target = scope.wrap(this.findTarget(inTouch, id));\n e.
bubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n
e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitR
adiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTou
ch.radiusY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5
;\n e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this
.POINTER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaul
ts\n var self = this;\n e.preventDefault = function() {\n self.
scrolling = false;\n self.firstXY = null;\n cte.preventDefault();\
n };\n return e;\n },\n processTouches: function(inEvent, inFunc
tion) {\n var tl = inEvent.changedTouches;\n this.currentTouchEvent =
inEvent;\n for (var i = 0, t, p; i < tl.length; i++) {\n t = tl[i];\
n p = this.touchToPointer(t);\n if (inEvent.type === 'touchstart')
{\n pointermap.set(p.pointerId, p.target);\n }\n if (poi
ntermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n
if (inEvent.type === 'touchend' || inEvent._cancel) {\n this.clean
UpPointer(p);\n }\n }\n },\n // For single axis scrollers, det
ermines whether the element should emit\n // pointer events or behave as a sc
roller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n
var ret;\n var scrollAxis = scope.targetFinding.findScrollAxis(inEvent)
;\n if (scrollAxis === 'none') {\n // this element is a touch-ac
tion: none, should never scroll\n ret = false;\n } else if (scro
llAxis === 'XY') {\n // this element should always scroll\n re
t = true;\n } else {\n var t = inEvent.changedTouches[0];\n
// check the intended scroll axis, and other axis\n var a = scroll
Axis;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Ma
th.abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['clie
nt' + oa] - this.firstXY[oa]);\n // if delta in the scroll axis > delta
other axis, scroll instead of\n // making events\n ret = da >
= doa;\n }\n 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 // Therefor
e, on every touchstart, we remove the touches that did not fire a\n // touche
nd event.\n // To keep state globally consistent, we fire a\n // pointerca
ncel for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n
var tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length
here, as the touchstart has not\n // been processed yet.\n if (pointe
rmap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach
(function(value, key) {\n // Never remove pointerId == 1, which is mous
e.\n // Touch identifiers are 2 smaller than their pointerId, which is
the\n // index in pointermap.\n if (key !== 1 && !this.findTou
ch(tl, key - 2)) {\n var p = value;\n d.push(p);\n
}\n }, this);\n d.forEach(function(p) {\n this.cancel(p
);\n pointermap.delete(p.pointerId);\n });\n }\n },\n
touchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this
.setPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent
);\n if (!this.scrolling) {\n this.clickCount++;\n this.proce
ssTouches(inEvent, this.down);\n }\n },\n down: function(inPointer) {
\n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\
n if (CAN_USE_GLOBAL) {\n this.processTouches(inEvent, this.move);\n
} else {\n if (!this.scrolling) {\n if (this.scrolling ===
null && this.shouldScroll(inEvent)) {\n this.scrolling = true;\n
} else {\n this.scrolling = false;\n inEvent.prevent
Default();\n this.processTouches(inEvent, this.move);\n }\n
} else if (this.firstXY) {\n var t = inEvent.changedTouches[0];\
n var dx = t.clientX - this.firstXY.X;\n var dy = t.clientY -
this.firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if
(dd >= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.s
crolling = true;\n this.firstXY = null;\n }\n }\n
}\n },\n move: function(inPointer) {\n dispatcher.move(inPointer);\
n },\n touchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);
\n this.processTouches(inEvent, this.up);\n },\n up: function(inPoint
er) {\n inPointer.relatedTarget = scope.wrap(scope.findTarget(inPointer));\
n dispatcher.up(inPointer);\n },\n cancel: function(inPointer) {\n
dispatcher.cancel(inPointer);\n },\n touchcancel: function(inEvent) {\n
inEvent._cancel = true;\n this.processTouches(inEvent, this.cancel);\
n },\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](i
nPointer.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n /
/ prevent synth mouse events from creating pointer events\n dedupSynthMouse:
function(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t
= inEvent.changedTouches[0];\n // only the primary finger will synth mouse
events\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last to
uch\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
(!CAN_USE_GLOBAL) {\n INSTALLER = new scope.Installer(touchEvents.elementAdd
ed, touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n
\n scope.touchEvents = touchEvents;\n})(window.PolymerGestures);\n","/*\n * Cop
yright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/L
ICENSE.txt\n * The complete set of authors may be found at http://polymer.github
.io/AUTHORS.txt\n * The complete set of contributors may be found at http://poly
mer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the pol
ymer project is also\n * subject to an additional IP rights grant found at http:
//polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = s
cope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TY
PE = window.MSPointerEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE
=== 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n
'MSPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n re
gister: function(target) {\n if (target !== document) {\n return;\n
}\n dispatcher.listen(target, this.events);\n },\n unregister: f
unction(target) {\n dispatcher.unlisten(target, this.events);\n },\n
POINTER_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\
n 'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inE
vent;\n e = dispatcher.cloneEvent(inEvent);\n if (HAS_BITMAP_TYPE) {\n
e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n }\n
e._source = 'ms';\n return e;\n },\n cleanup: function(id) {\n
pointermap['delete'](id);\n },\n MSPointerDown: function(inEvent) {\n
var e = this.prepareEvent(inEvent);\n e.target = scope.wrap(scope.findTarg
et(inEvent));\n pointermap.set(inEvent.pointerId, e.target);\n dispatc
her.down(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this
.prepareEvent(inEvent);\n e.target = pointermap.get(e.pointerId);\n di
spatcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var e = t
his.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(
inEvent));\n e.target = pointermap.get(e.pointerId);\n dispatcher.up(e
);\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCancel: functio
n(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget =
scope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(e.point
erId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n
}\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n","/*\n *
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This c
ode may only be used under the BSD style license found at http://polymer.github.
io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.gi
thub.io/AUTHORS.txt\n * The complete set of contributors may be found at http://
polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the
polymer project is also\n * subject to an additional IP rights grant found at h
ttp://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher
= scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEv
ents = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'poin
terup',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n
var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n
return e;\n },\n register: function(target) {\n if (target !== docu
ment) {\n return;\n }\n dispatcher.listen(target, this.events);
\n },\n unregister: function(target) {\n dispatcher.unlisten(target,
this.events);\n },\n cleanup: function(id) {\n pointermap['delete'](i
d);\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEve
nt(inEvent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n poi
ntermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n poin
termove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e
.target = pointermap.get(e.pointerId);\n dispatcher.move(e);\n },\n p
ointerup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n
e.relatedTarget = scope.wrap(scope.findTarget(inEvent));\n e.target = point
ermap.get(e.pointerId);\n dispatcher.up(e);\n this.cleanup(inEvent.poi
nterId);\n },\n pointercancel: function(inEvent) {\n var e = this.pre
pareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(inEvent
));\n e.target = pointermap.get(e.pointerId);\n dispatcher.cancel(e);\
n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.pointerEvents =
pointerEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Po
lymer Project Authors. All rights reserved.\n * This code may only be used under
the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The com
plete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * Th
e complete set of contributors may be found at http://polymer.github.io/CONTRIBU
TORS.txt\n * Code distributed by Google as part of the polymer project is also\n
* subject to an additional IP rights grant found at http://polymer.github.io/PA
TENTS.txt\n */\n\n/**\n * This module contains the handlers for native platform
events.\n * From here, the dispatcher is called to create unified pointer events
.\n * Included are touch events (v1), mouse events, and MSPointerEvents.\n */\n(
function(scope) {\n var dispatcher = scope.dispatcher;\n\n if (window.PointerE
vent) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } els
e if (window.navigator.msPointerEnabled) {\n dispatcher.registerSource('ms',
scope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouse
Events);\n if (window.ontouchstart !== undefined) {\n dispatcher.registe
rSource('touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(docume
nt);\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Proj
ect Authors. All rights reserved.\n * This code may only be used under the BSD s
tyle license found at http://polymer.github.io/LICENSE.txt\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\
n */\n\n/**\n * This event denotes the beginning of a series of tracking events.
\n *\n * @module PointerGestures\n * @submodule Events\n * @class trackstart\n *
/\n/**\n * Pixels moved in the x direction since trackstart.\n * @type Number\n
* @property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n
* @type Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction si
nce the last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles move
d in the y direction since the last track.\n * @type Number\n * @property ddy\n
*/\n/**\n * The clientX position of the track gesture.\n * @type Number\n * @pro
perty clientX\n */\n/**\n * The clientY position of the track gesture.\n * @type
Number\n * @property clientY\n */\n/**\n * The pageX position of the track gest
ure.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of th
e track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX
position of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\
n * The screenY position of the track gesture.\n * @type Number\n * @property sc
reenY\n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n
* @property xDirection\n */\n/**\n * The last y axis direction of the pointer.\
n * @type Number\n * @property yDirection\n */\n/**\n * A shared object between
all tracking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The
element currently under the pointer.\n * @type Element\n * @property relatedTarg
et\n */\n/**\n * The type of pointer that make the track gesture.\n * @type Stri
ng\n * @property pointerType\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 the pointer is no longer being tracked.\n *\n * @class
trackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher
= scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointerma
p = new scope.PointerMap();\n var track = {\n events: [\n 'down',\n
'move',\n 'up',\n ],\n WIGGLE_THRESHOLD: 4,\n clampDir:
function(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPosi
tionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB
) {\n x = inB.pageX - inA.pageX;\n y = inB.pageY - inA.pageY;\n
}\n return {x: x, y: y};\n },\n fireTrack: function(inType,
inEvent, inTrackingData) {\n var t = inTrackingData;\n var d = this.
calcPositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta
(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.cl
ampDir(dd.x);\n }\n if (dd.y) {\n t.yDirection = this.clampD
ir(dd.y);\n }\n var e = eventFactory.makeGestureEvent(inType, {\n
bubbles: true,\n cancelable: true,\n dx: d.x,\n dy
: d.y,\n ddx: dd.x,\n ddy: dd.y,\n x: inEvent.x,\n
y: inEvent.y,\n clientX: inEvent.clientX,\n clientY: inEvent.
clientY,\n pageX: inEvent.pageX,\n pageY: inEvent.pageY,\n
screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n xDire
ction: t.xDirection,\n yDirection: t.yDirection,\n trackInfo: t.
trackInfo,\n relatedTarget: inEvent.relatedTarget,\n pointerType
: inEvent.pointerType,\n pointerId: inEvent.pointerId,\n _source
: 'track'\n });\n t.downTarget.dispatchEvent(e);\n },\n down
: function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType ===
'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downE
vent: inEvent,\n downTarget: inEvent.target,\n trackInfo: {}
,\n lastMoveEvent: null,\n xDirection: 0,\n yDirec
tion: 0,\n tracking: false\n };\n pointermap.set(inEve
nt.pointerId, p);\n }\n },\n move: function(inEvent) {\n var
p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracki
ng) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n
var move = d.x * d.x + d.y * d.y;\n // start tracking only if fing
er moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD
) {\n p.tracking = true;\n this.fireTrack('trackstart',
p.downEvent, p);\n this.fireTrack('track', inEvent, p);\n
}\n } else {\n this.fireTrack('track', inEvent, p);\n
}\n p.lastMoveEvent = inEvent;\n }\n },\n up: function(inE
vent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n
if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n
}\n pointermap.delete(inEvent.pointerId);\n }\n }\n };
\n dispatcher.registerGesture('track', track);\n })(window.PolymerGestures);\n
","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polyme
r.github.io/LICENSE.txt\n * The complete set of authors may be found at http://p
olymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found a
t http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as pa
rt of the polymer project is also\n * subject to an additional IP rights grant f
ound at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event is fired
when a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @sub
module Events\n * @class hold\n */\n/**\n * Type of pointer that made the holdin
g event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axis
position of the held pointer\n * @type Number\n * @property clientX\n */\n/**\n
* Screen Y axis position of the held pointer\n * @type Number\n * @property clie
ntY\n */\n/**\n * Type of pointer that made the holding event.\n * @type String\
n * @property pointerType\n */\n/**\n * This event is fired every 200ms while a
pointer is held down.\n *\n * @class holdpulse\n * @extends hold\n */\n/**\n * M
illiseconds pointer has been held down.\n * @type Number\n * @property holdTime\
n */\n/**\n * This event is fired when a held pointer is released or moved.\n *\
n * @class release\n */\n\n(function(scope) {\n var dispatcher = scope.dispatch
er;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at le
ast HOLD_DELAY ms between hold and pulse events\n HOLD_DELAY: 200,\n // po
inter can move WIGGLE_THRESHOLD pixels before not counting as a hold\n WIGGLE
_THRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n ]
,\n heldPointer: null,\n holdJob: null,\n pulse: function() {\n va
r 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 = fa
lse;\n this.heldPointer = null;\n this.target = null;\n this.hold
Job = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary
&& !this.heldPointer) {\n this.heldPointer = inEvent;\n this.targe
t = inEvent.target;\n this.holdJob = setInterval(this.pulse.bind(this), t
his.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.h
eldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.
cancel();\n }\n },\n move: function(inEvent) {\n if (this.heldPo
inter && this.heldPointer.pointerId === inEvent.pointerId) {\n var x = in
Event.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - thi
s.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n
this.cancel();\n }\n }\n },\n fireHold: function(inT
ype, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable:
true,\n pointerType: this.heldPointer.pointerType,\n pointerId: t
his.heldPointer.pointerId,\n x: this.heldPointer.clientX,\n y: thi
s.heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime)
{\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGe
stureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n disp
atcher.registerGesture('hold', hold);\n})(window.PolymerGestures);\n","/*\n * Co
pyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/
LICENSE.txt\n * The complete set of authors may be found at http://polymer.githu
b.io/AUTHORS.txt\n * The complete set of contributors may be found at http://pol
ymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the po
lymer project is also\n * subject to an additional IP rights grant found at http
://polymer.github.io/PATENTS.txt\n */\n\n/**\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 eventFactory = scope.eventFactory;\n var pointermap = new sc
ope.PointerMap();\n var tap = {\n events: [\n 'down',\n 'up'\n
],\n down: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPr
evented) {\n pointermap.set(inEvent.pointerId, {\n target: inEve
nt.target,\n buttons: inEvent.buttons,\n x: inEvent.clientX,\n
y: inEvent.clientY\n });\n }\n },\n shouldTap: funct
ion(e, downState) {\n if (e.pointerType === 'mouse') {\n // only all
ow left click to tap for mouse\n return downState.buttons === 1;\n }
\n return !e.tapPrevented;\n },\n up: function(inEvent) {\n var
start = pointermap.get(inEvent.pointerId);\n if (start && this.shouldTap(in
Event, start)) {\n // up.relatedTarget is target currently under finger\n
var t = scope.targetFinding.LCA(start.target, inEvent.relatedTarget);\n
if (t) {\n var e = eventFactory.makeGestureEvent('tap', {\n
bubbles: true,\n cancelable: true,\n x: inEvent.cli
entX,\n y: inEvent.clientY,\n detail: inEvent.detail,\n
pointerType: inEvent.pointerType,\n pointerId: inEvent.point
erId,\n altKey: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey
,\n metaKey: inEvent.metaKey,\n shiftKey: inEvent.shiftKey
,\n _source: 'tap'\n });\n t.dispatchEvent(e);\n
}\n }\n pointermap.delete(inEvent.pointerId);\n }\n };\n //
patch eventFactory to remove id from tap's pointermap for preventTap calls\n ev
entFactory.preventTap = function(e) {\n return function() {\n e.tapPreve
nted = true;\n pointermap.delete(e.pointerId);\n };\n };\n dispatcher.
registerGesture('tap', tap);\n})(window.PolymerGestures);\n","/*\n Copyright (C
) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl
<thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmai
l.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 2
012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris
Kowal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gm
ail.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Cop
yright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and
use in source and binary forms, with or without\n modification, are permitted p
rovided that the following conditions are met:\n\n * Redistributions of sourc
e code must retain the above copyright\n notice, this list of conditions an
d the following disclaimer.\n * Redistributions in binary form must reproduce
the above copyright\n notice, this list of conditions and the following di
sclaimer in the\n documentation and/or other materials provided with the di
stribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBU
TORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMI
TED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULA
R PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR
ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGE
S\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES
;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n TH
IS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function
(global) {\n 'use strict';\n\n var Token,\n TokenName,\n Sy
ntax,\n Messages,\n source,\n index,\n length,\n
delegate,\n lookahead,\n state;\n\n Token = {\n Bool
eanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n
NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n
StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanL
iteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.I
dentifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n Token
Name[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeri
c';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.String
Literal] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpressio
n',\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'Cal
lExpression',\n ConditionalExpression: 'ConditionalExpression',\n
EmptyStatement: 'EmptyStatement',\n ExpressionStatement: 'ExpressionState
ment',\n Identifier: 'Identifier',\n Literal: 'Literal',\n
LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpres
sion',\n MemberExpression: 'MemberExpression',\n ObjectExpression:
'ObjectExpression',\n Program: 'Program',\n Property: 'Property',
\n ThisExpression: 'ThisExpression',\n UnaryExpression: 'UnaryExpr
ession'\n };\n\n // Error messages should be identical to V8.\n Message
s = {\n UnexpectedToken: 'Unexpected token %0',\n UnknownLabel: '
Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been
declared'\n };\n\n // Ensure the condition is true, otherwise throw an er
ror.\n // This is only to have a better contract semantic, i.e. another safet
y net\n // to catch a logic error. The condition shall be fulfilled in normal
case.\n // Do NOT use this to enforce a certain condition on any user input.
\n\n function assert(condition, message) {\n if (!condition) {\n
throw new Error('ASSERT: ' + message);\n }\n }\n\n function i
sDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n
\n // 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch
=== 32) || // space\n (ch === 9) || // tab\n (ch ===
0xB) ||\n (ch === 0xC) ||\n (ch === 0xA0) ||\n
(ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u20
06\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromC
harCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineT
erminator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) ||
(ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n f
unction isIdentifierStart(ch) {\n return (ch === 36) || (ch === 95) || /
/ $ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || /
/ A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n func
tion isIdentifierPart(ch) {\n return (ch === 36) || (ch === 95) || // $
(dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A.
.Z\n (ch >= 97 && ch <= 122) || // a..z\n (ch >= 48
&& ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n functi
on isKeyword(id) {\n return (id === 'this')\n }\n\n // 7.4 Comments
\n\n function skipWhitespace() {\n while (index < length && isWhiteSpa
ce(source.charCodeAt(index))) {\n ++index;\n }\n }\n\n fu
nction getIdentifier() {\n var start, ch;\n\n start = index++;\n
while (index < length) {\n ch = source.charCodeAt(index);\n
if (isIdentifierPart(ch)) {\n ++index;\n } els
e {\n break;\n }\n }\n\n return source.s
lice(start, index);\n }\n\n function scanIdentifier() {\n var start
, id, type;\n\n start = index;\n\n id = getIdentifier();\n\n
// There is no keyword or literal with only one character.\n // Thus, i
t must be an identifier.\n if (id.length === 1) {\n type = Tok
en.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Ke
yword;\n } else if (id === 'null') {\n type = Token.NullLitera
l;\n } else if (id === 'true' || id === 'false') {\n type = To
ken.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 commo
n single-character punctuators.\n case 46: // . dot\n case 40:
// ( open bracket\n case 41: // ) close bracket\n case 59: //
; semicolon\n case 44: // , comma\n case 123: // { open curly
brace\n case 125: // } close curly brace\n case 91: // [\n
case 93: // ]\n case 58: // :\n case 63: // ?\n
++index;\n return {\n type: Token.Punctuator,\n
value: String.fromCharCode(code),\n range: [start, ind
ex]\n };\n\n default:\n code2 = source.charCodeAt(i
ndex + 1);\n\n // '=' (char #61) marks an assignment or comparison op
erator.\n if (code2 === 61) {\n switch (code) {\n
case 37: // %\n case 38: // &\n case
42: // *:\n case 43: // +\n case 45: // -\n
case 47: // /\n case 60: // <\n case
62: // >\n case 124: // |\n index += 2;\n
return {\n type: Token.Punctuator,\n
value: String.fromCharCode(code) + String.fromCharCode(code2
),\n range: [start, index]\n };\n\n
case 33: // !\n case 61: // =\n i
ndex += 2;\n\n // !== and ===\n if (source
.charCodeAt(index) === 61) {\n ++index;\n
}\n return {\n type: Token.Punctua
tor,\n value: source.slice(start, index),\n
range: [start, index]\n };\n default
:\n break;\n }\n }\n bre
ak;\n }\n\n // Peek more characters.\n\n ch2 = source[index
+ 1];\n\n // Other 2-character punctuators: && ||\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(isDecimalDigit(ch.charCodeAt(0)) || (ch ===
'.'),\n 'Numeric literal must start with a decimal digit or a decimal
point');\n\n start = index;\n number = '';\n if (ch !== '.
') {\n number = source[index++];\n ch = source[index];\n\n
// 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 && isDecimalDig
it(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedT
oken, 'ILLEGAL');\n }\n }\n\n while (isDeci
malDigit(source.charCodeAt(index))) {\n number += source[index++]
;\n }\n ch = source[index];\n }\n\n if (ch =
== '.') {\n number += source[index++];\n while (isDecimalD
igit(source.charCodeAt(index))) {\n number += source[index++];\n
}\n ch = source[index];\n }\n\n if (ch === '
e' || ch === 'E') {\n number += source[index++];\n\n ch =
source[index];\n if (ch === '+' || ch === '-') {\n num
ber += source[index++];\n }\n if (isDecimalDigit(source.ch
arCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(ind
ex))) {\n number += source[index++];\n }\n
} else {\n throwError({}, Messages.UnexpectedToken, 'ILLE
GAL');\n }\n }\n\n if (isIdentifierStart(source.charCod
eAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
\n }\n\n return {\n type: Token.NumericLiteral,\n
value: parseFloat(number),\n range: [start, index]\n };\
n }\n\n // 7.8.4 String Literals\n\n function scanStringLiteral() {\n
var str = '', quote, start, ch, octal = false;\n\n quote = source[i
ndex];\n assert((quote === '\\'' || quote === '\"'),\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 quote = '';\n break;\
n } else if (ch === '\\\\') {\n ch = source[index++];\
n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n
switch (ch) {\n case 'n':\n st
r += '\\n';\n break;\n case 'r':\n
str += '\\r';\n break;\n
case 't':\n str += '\\t';\n
break;\n case 'b':\n str += '\\b';\n
break;\n case 'f':\n
str += '\\f';\n break;\n case 'v
':\n str += '\\x0B';\n break;\n\n
default:\n str += ch;\n
break;\n }\n } else {\n
if (ch === '\\r' && source[index] === '\\n') {\n +
+index;\n }\n }\n } else if (isLine
Terminator(ch.charCodeAt(0))) {\n break;\n } else {\n
str += ch;\n }\n }\n\n if (quote !== '')
{\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\
n\n return {\n type: Token.StringLiteral,\n value:
str,\n octal: octal,\n range: [start, index]\n };\n
}\n\n function isIdentifierName(token) {\n return token.type === T
oken.Identifier ||\n token.type === Token.Keyword ||\n tok
en.type === Token.BooleanLiteral ||\n token.type === Token.NullLitera
l;\n }\n\n function advance() {\n var ch;\n\n skipWhitespace
();\n\n if (index >= length) {\n return {\n typ
e: 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 scanP
unctuator();\n }\n\n // String literal starts with single quote (#
39) or double quote (#34).\n if (ch === 39 || ch === 34) {\n r
eturn scanStringLiteral();\n }\n\n if (isIdentifierStart(ch)) {\n
return scanIdentifier();\n }\n\n // Dot (.) char #46 ca
n also start a floating-point number, hence the need\n // to check the ne
xt character.\n if (ch === 46) {\n if (isDecimalDigit(source.c
harCodeAt(index + 1))) {\n return scanNumericLiteral();\n
}\n return scanPunctuator();\n }\n\n if (isDecimalD
igit(ch)) {\n return scanNumericLiteral();\n }\n\n retu
rn scanPunctuator();\n }\n\n function lex() {\n var token;\n\n
token = lookahead;\n index = token.range[1];\n\n lookahead = ad
vance();\n\n index = token.range[1];\n\n return token;\n }\n\n
function peek() {\n var pos;\n\n pos = index;\n lookahea
d = advance();\n index = pos;\n }\n\n // Throw an exception\n\n
function throwError(token, messageFormat) {\n var error,\n arg
s = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.r
eplace(\n /%(\\d)/g,\n function (whole, index) {\n
assert(index < args.length, 'Message reference must be in ra
nge');\n return args[index];\n }\n
);\n\n error = new Error(msg);\n error.index = index;\n err
or.description = msg;\n throw error;\n }\n\n // Throw an exception
because of the token.\n\n function throwUnexpected(token) {\n throwErr
or(token, Messages.UnexpectedToken, token.value);\n }\n\n // Expect the ne
xt 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.value !== value) {\n throw
Unexpected(token);\n }\n }\n\n // Return true if the next token mat
ches the specified punctuator.\n\n function match(value) {\n return lo
okahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n //
Return true if the next token matches the specified keyword\n\n function mat
chKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahe
ad.value === keyword;\n }\n\n function consumeSemicolon() {\n // Ca
tch 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 l
ex();\n return;\n }\n\n if (lookahead.type !== Token.EO
F && !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n
\n // 11.1.4 Array Initialiser\n\n function parseArrayInitialiser() {\n
var elements = [];\n\n expect('[');\n\n while (!match(']')) {
\n if (match(',')) {\n lex();\n element
s.push(null);\n } else {\n elements.push(parseExpressi
on());\n\n if (!match(']')) {\n expect(',');\n
}\n }\n }\n\n expect(']');\n\n r
eturn delegate.createArrayExpression(elements);\n }\n\n // 11.1.5 Object I
nitialiser\n\n function parseObjectPropertyKey() {\n var token;\n\n
skipWhitespace();\n token = lex();\n\n // Note: This function
is called only from parseObjectProperty(), where\n // EOF and Punctuator
tokens are already filtered out.\n if (token.type === Token.StringLitera
l || token.type === Token.NumericLiteral) {\n return delegate.createL
iteral(token);\n }\n\n return delegate.createIdentifier(token.valu
e);\n }\n\n function parseObjectProperty() {\n var token, key;\n\n
token = lookahead;\n skipWhitespace();\n\n if (token.type =
== Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(
token);\n }\n\n key = parseObjectPropertyKey();\n expect(':
');\n return delegate.createProperty('init', key, parseExpression());\n
}\n\n function parseObjectInitialiser() {\n var properties = [];\n\n
expect('{');\n\n while (!match('}')) {\n properties.pu
sh(parseObjectProperty());\n\n if (!match('}')) {\n ex
pect(',');\n }\n }\n\n expect('}');\n\n return d
elegate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping
Operator\n\n function parseGroupExpression() {\n var expr;\n\n
expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n
return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function p
arsePrimaryExpression() {\n var type, token, expr;\n\n if (match('
(')) {\n return parseGroupExpression();\n }\n\n type =
lookahead.type;\n\n if (type === Token.Identifier) {\n expr =
delegate.createIdentifier(lex().value);\n } else if (type === Token.Strin
gLiteral || type === Token.NumericLiteral) {\n expr = delegate.create
Literal(lex());\n } else if (type === Token.Keyword) {\n if (m
atchKeyword('this')) {\n lex();\n expr = delegate.
createThisExpression();\n }\n } else if (type === Token.Boolea
nLiteral) {\n token = lex();\n token.value = (token.value
=== 'true');\n expr = delegate.createLiteral(token);\n } else
if (type === Token.NullLiteral) {\n token = lex();\n token
.value = null;\n expr = delegate.createLiteral(token);\n } els
e if (match('[')) {\n expr = parseArrayInitialiser();\n } else
if (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n
if (expr) {\n return expr;\n }\n\n throwUnexpect
ed(lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function pars
eArguments() {\n var args = [];\n\n expect('(');\n\n if (!m
atch(')')) {\n while (index < length) {\n args.push(pa
rseExpression());\n if (match(')')) {\n break;
\n }\n expect(',');\n }\n }\n\n
expect(')');\n\n return args;\n }\n\n function parseNonCompu
tedProperty() {\n var token;\n\n token = lex();\n\n if (!is
IdentifierName(token)) {\n throwUnexpected(token);\n }\n\n
return delegate.createIdentifier(token.value);\n }\n\n function parseN
onComputedMember() {\n expect('.');\n\n return parseNonComputedPro
perty();\n }\n\n function parseComputedMember() {\n var expr;\n\n
expect('[');\n\n expr = parseExpression();\n\n expect(']');\
n\n return expr;\n }\n\n function parseLeftHandSideExpression() {\n
var expr, args, property;\n\n expr = parsePrimaryExpression();\n\
n while (true) {\n if (match('[')) {\n property
= parseComputedMember();\n expr = delegate.createMemberExpressio
n('[', expr, property);\n } else if (match('.')) {\n p
roperty = parseNonComputedMember();\n expr = delegate.createMembe
rExpression('.', expr, property);\n } else if (match('(')) {\n
args = parseArguments();\n expr = delegate.createCallExp
ression(expr, args);\n } else {\n break;\n
}\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n
\n var parsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 U
nary 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 (ma
tch('+') || match('-') || match('!')) {\n token = lex();\n
expr = parseUnaryExpression();\n expr = delegate.createUnaryExpressi
on(token.value, expr);\n } else if (matchKeyword('delete') || matchKeywor
d('void') || matchKeyword('typeof')) {\n throwError({}, Messages.Unex
pectedToken);\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 (
token.value) {\n case '||':\n prec = 1;\n break;\n\
n case '&&':\n prec = 2;\n break;\n\n case '
==':\n case '!=':\n case '===':\n case '!==':\n
prec = 6;\n break;\n\n case '<':\n case '>':\n c
ase '<=':\n case '>=':\n case 'instanceof':\n prec = 7;
\n break;\n\n case 'in':\n prec = 7;\n b
reak;\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 Rela
tional Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Op
erators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpres
sion() {\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 = parseU
naryExpression();\n\n stack = [left, token, right];\n\n while ((pr
ec = 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.p
op();\n operator = stack.pop().value;\n left = sta
ck.pop();\n expr = delegate.createBinaryExpression(operator, left
, right);\n stack.push(expr);\n }\n\n // Sh
ift.\n token = lex();\n token.prec = prec;\n st
ack.push(token);\n expr = parseUnaryExpression();\n stack.
push(expr);\n }\n\n // Final reduce to clean-up the stack.\n
i = stack.length - 1;\n expr = stack[i];\n while (i > 1) {\n
expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2],
expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n
// 11.12 Conditional Operator\n\n function parseConditionalExpression() {\n
var expr, consequent, alternate;\n\n expr = parseBinaryExpression()
;\n\n if (match('?')) {\n lex();\n consequent = par
seConditionalExpression();\n expect(':');\n alternate = pa
rseConditionalExpression();\n\n expr = delegate.createConditionalExpr
ession(expr, consequent, alternate);\n }\n\n return expr;\n }\n
\n // Simplification since we do not support AssignmentExpression.\n var p
arseExpression = 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 (identif
ier.type !== Token.Identifier) {\n throwUnexpected(identifier);\n
}\n\n args = match('(') ? parseArguments() : [];\n\n return de
legate.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 // As
Expression\n // InExpression\n // FilterExpression\n\n // AsExpress
ion ::\n // FilterExpression as Identifier\n\n // InExpression ::\n /
/ Identifier, Identifier in FilterExpression\n // Identifier in FilterExp
ression\n\n // FilterExpression ::\n // Expression\n // Expression
Filters\n\n function parseTopLevel() {\n skipWhitespace();\n pe
ek();\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 (look
ahead.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 parse
AsExpression(expr) {\n lex(); // as\n var identifier = lex().valu
e;\n delegate.createAsExpression(expr, identifier);\n }\n\n functio
n parseInExpression(identifier) {\n var indexName;\n if (lookahead
.value === ',') {\n lex();\n if (lookahead.type !== Token.
Identifier)\n throwUnexpected(lookahead);\n indexName
= lex().value;\n }\n\n lex(); // in\n var expr = parseExpr
ession();\n parseFilters();\n delegate.createInExpression(identifi
er.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 gl
obal.esprima = {\n parse: parse\n };\n})(this);\n","// Copyright (c) 2
014 The Polymer Project Authors. All rights reserved.\n// This code may only be
used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n
// The complete set of authors may be found at http://polymer.github.io/AUTHORS.
txt\n// The complete set of contributors may be found at http://polymer.github.i
o/CONTRIBUTORS.txt\n// Code distributed by Google as part of the polymer project
is also\n// subject to an additional IP rights grant found at http://polymer.gi
thub.io/PATENTS.txt\n\n(function (global) {\n 'use strict';\n\n function prepa
reBinding(expressionText, name, node, filterRegistry) {\n var expression;\n
try {\n expression = getExpression(expressionText);\n if (expression
.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n no
de.tagName !== 'TEMPLATE' ||\n (name !== 'bind' && name !== 'repeat'))
) {\n throw Error('as and in can only be used within <template bind/repea
t>');\n }\n } catch (ex) {\n console.error('Invalid expression synt
ax: ' + expressionText, ex);\n return;\n }\n\n return function(model,
node, oneTime) {\n var binding = expression.getBinding(model, filterRegist
ry, oneTime);\n if (expression.scopeIdent && binding) {\n node.polym
erExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexId
ent)\n node.polymerExpressionIndexIdent_ = expression.indexIdent;\n
}\n\n return binding;\n }\n }\n\n // TODO(rafaelw): Implement simple
LRU.\n var expressionParseCache = Object.create(null);\n\n function getExpres
sion(expressionText) {\n var expression = expressionParseCache[expressionText
];\n if (!expression) {\n var delegate = new ASTDelegate();\n espri
ma.parse(expressionText, delegate);\n expression = new Expression(delegate)
;\n expressionParseCache[expressionText] = expression;\n }\n return e
xpression;\n }\n\n function Literal(value) {\n this.value = value;\n thi
s.valueFn_ = undefined;\n }\n\n Literal.prototype = {\n valueFn: function()
{\n if (!this.valueFn_) {\n var value = this.value;\n this.v
alueFn_ = function() {\n return value;\n }\n }\n\n ret
urn this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name =
name;\n this.path = Path.get(name);\n }\n\n IdentPath.prototype = {\n va
lueFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\
n var path = this.path;\n this.valueFn_ = function(model, observer
) {\n if (observer)\n observer.addPath(model, path);\n\n
return path.getValueFrom(model);\n }\n }\n\n return this.
valueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.p
ath.length == 1);\n model = findScope(model, this.path[0]);\n\n retu
rn this.path.setValueFrom(model, newValue);\n }\n };\n\n function MemberExp
ression(object, property, accessor) {\n this.computed = accessor == '[';\n\n
this.dynamicDeps = typeof object == 'function' ||\n obj
ect.dynamicDeps ||\n (this.computed && !(property instance
of Literal));\n\n this.simplePath =\n !this.dynamicDeps &&\n (p
roperty instanceof IdentPath || property instanceof Literal) &&\n (object
instanceof MemberExpression || object instanceof IdentPath);\n\n this.object
= this.simplePath ? object : getFn(object);\n this.property = !this.computed
|| this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpre
ssion.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n
var parts = this.object instanceof MemberExpression ?\n this.objec
t.fullPath.slice() : [this.object.name];\n parts.push(this.property insta
nceof IdentPath ?\n this.property.name : this.property.value);\n
this.fullPath_ = Path.get(parts);\n }\n\n return this.fullPath_;\n
},\n\n valueFn: function() {\n if (!this.valueFn_) {\n var obj
ect = this.object;\n\n if (this.simplePath) {\n var path = this.
fullPath;\n\n this.valueFn_ = function(model, observer) {\n
if (observer)\n observer.addPath(model, path);\n\n retur
n path.getValueFrom(model);\n };\n } else if (!this.computed) {\
n var path = Path.get(this.property.name);\n\n this.valueFn_ =
function(model, observer, filterRegistry) {\n var context = object(m
odel, observer, filterRegistry);\n\n if (observer)\n obs
erver.addPath(context, path);\n\n return path.getValueFrom(context);\
n }\n } else {\n // Computed property.\n var p
roperty = this.property;\n\n this.valueFn_ = function(model, observer,
filterRegistry) {\n var context = object(model, observer, filterRegis
try);\n var propName = property(model, observer, filterRegistry);\n
if (observer)\n observer.addPath(context, [propName]);\n\
n return context ? context[propName] : undefined;\n };\n
}\n }\n return this.valueFn_;\n },\n\n setValue: function(mo
del, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFr
om(model, newValue);\n return newValue;\n }\n\n var object = th
is.object(model);\n var propName = this.property instanceof IdentPath ? thi
s.property.name :\n this.property(model);\n return object[propName
] = newValue;\n }\n };\n\n function Filter(name, args) {\n this.name = n
ame;\n this.args = [];\n for (var i = 0; i < args.length; i++) {\n th
is.args[i] = getFn(args[i]);\n }\n }\n\n Filter.prototype = {\n transfor
m: function(model, observer, filterRegistry, toModelDirection,\n
initialArgs) {\n var fn = filterRegistry[this.name];\n var con
text = model;\n if (fn) {\n context = undefined;\n } else {\n
fn = context[this.name];\n if (!fn) {\n console.error('Can
not find function or filter: ' + this.name);\n return;\n }\n
}\n\n // If toModelDirection is falsey, then the \"normal\" (dom-bound) d
irection\n // is used. Otherwise, it looks for a 'toModel' property functio
n on the\n // object.\n if (toModelDirection) {\n fn = fn.toMod
el;\n } else if (typeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n
}\n\n if (typeof fn != 'function') {\n console.error('Cannot f
ind function or filter: ' + this.name);\n return;\n }\n\n var a
rgs = initialArgs || [];\n for (var i = 0; i < this.args.length; i++) {\n
args.push(getFn(this.args[i])(model, observer, filterRegistry));\n }\
n\n return fn.apply(context, args);\n }\n };\n\n function notImplement
ed() { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': f
unction(v) { return +v; },\n '-': function(v) { return -v; },\n '!': funct
ion(v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r
) { return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(
l, r) { return l*r; },\n '/': function(l, r) { return l/r; },\n '%': funct
ion(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) { retu
rn l===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l
, r) { return l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n fu
nction getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\
n }\n\n function ASTDelegate() {\n this.expression = null;\n this.filter
s = [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeI
dent = undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = fals
e;\n }\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op,
argument) {\n if (!unaryOperators[op])\n throw Error('Disallowed ope
rator: ' + op);\n\n argument = getFn(argument);\n\n return function(mo
del, observer, filterRegistry) {\n return unaryOperators[op](argument(mod
el, observer, filterRegistry));\n };\n },\n\n createBinaryExpression:
function(op, left, right) {\n if (!binaryOperators[op])\n throw Err
or('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = ge
tFn(right);\n\n return function(model, observer, filterRegistry) {\n
return binaryOperators[op](left(model, observer, filterRegistry),\n
right(model, observer, filterRegistry));\n };\n }
,\n\n createConditionalExpression: function(test, consequent, alternate) {\n
test = getFn(test);\n consequent = getFn(consequent);\n alternate
= getFn(alternate);\n\n return function(model, observer, filterRegistry) {
\n return test(model, observer, filterRegistry) ?\n consequent
(model, observer, filterRegistry) :\n alternate(model, observer, filt
erRegistry);\n }\n },\n\n createIdentifier: function(name) {\n v
ar ident = new IdentPath(name);\n ident.type = 'Identifier';\n return
ident;\n },\n\n createMemberExpression: function(accessor, object, propert
y) {\n var ex = new MemberExpression(object, property, accessor);\n if
(ex.dynamicDeps)\n this.dynamicDeps = true;\n return ex;\n },\n\
n createCallExpression: function(expression, args) {\n if (!(expression
instanceof IdentPath))\n throw Error('Only identifier function invocation
s are allowed');\n\n var filter = new Filter(expression.name, args);\n\n
return function(model, observer, filterRegistry) {\n return filter.tra
nsform(model, observer, filterRegistry, false);\n };\n },\n\n createL
iteral: function(token) {\n return new Literal(token.value);\n },\n\n
createArrayExpression: function(elements) {\n for (var i = 0; i < elements
.length; i++)\n elements[i] = getFn(elements[i]);\n\n return functio
n(model, observer, filterRegistry) {\n var arr = []\n for (var i =
0; i < elements.length; i++)\n arr.push(elements[i](model, observer, f
ilterRegistry));\n return arr;\n }\n },\n\n createProperty: fu
nction(kind, key, value) {\n return {\n key: key instanceof IdentPat
h ? key.name : key.value,\n value: value\n };\n },\n\n createO
bjectExpression: function(properties) {\n for (var i = 0; i < properties.le
ngth; i++)\n properties[i].value = getFn(properties[i].value);\n\n r
eturn function(model, observer, filterRegistry) {\n var obj = {};\n
for (var i = 0; i < properties.length; i++)\n obj[properties[i].key]
=\n properties[i].value(model, observer, filterRegistry);\n
return obj;\n }\n },\n\n createFilter: function(name, args) {\n
this.filters.push(new Filter(name, args));\n },\n\n createAsExpression: fu
nction(expression, scopeIdent) {\n this.expression = expression;\n thi
s.scopeIdent = scopeIdent;\n },\n\n createInExpression: function(scopeIden
t, indexIdent, expression) {\n this.expression = expression;\n this.sc
opeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\n\n creat
eTopLevel: function(expression) {\n this.expression = expression;\n },\n
\n createThisExpression: notImplemented\n }\n\n function ConstantObservable
(value) {\n this.value_ = value;\n }\n\n ConstantObservable.prototype = {\n
open: function() { return this.value_; },\n discardChanges: function() {
return this.value_; },\n deliver: function() {},\n close: function() {},\n
}\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeId
ent;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegate.expression
)\n throw Error('No expression found.');\n\n this.expression = delegate.
expression;\n getFn(this.expression); // forces enumeration of path dependenc
ies\n\n this.filters = delegate.filters;\n this.dynamicDeps = delegate.dyn
amicDeps;\n }\n\n Expression.prototype = {\n getBinding: function(model, fi
lterRegistry, oneTime) {\n if (oneTime)\n return this.getValue(model
, undefined, filterRegistry);\n\n var observer = new CompoundObserver();\n
// captures deps.\n var firstValue = this.getValue(model, observer, fi
lterRegistry);\n var firstTime = true;\n var self = this;\n\n fun
ction valueFn() {\n // deps cannot have changed on first value retrieval.
\n if (firstTime) {\n firstTime = false;\n return first
Value;\n }\n\n if (self.dynamicDeps)\n observer.startRese
t();\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n
filterRegistry);\n if (self.dynamicDeps)\n observer.finishReset(
);\n\n return value;\n }\n\n function setValueFn(newValue) {\n
self.setValue(model, newValue, filterRegistry);\n return newValue;
\n }\n\n return new ObserverTransform(observer, valueFn, setValueFn, t
rue);\n },\n\n getValue: function(model, observer, filterRegistry) {\n
var value = getFn(this.expression)(model, observer, filterRegistry);\n fo
r (var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].t
ransform(model, observer, filterRegistry,\n false, [value]);\n }
\n\n return value;\n },\n\n setValue: function(model, newValue, filte
rRegistry) {\n var count = this.filters ? this.filters.length : 0;\n w
hile (count-- > 0) {\n newValue = this.filters[count].transform(model, un
defined,\n filterRegistry, true, [newValue]);\n }\n\n if (t
his.expression.setValue)\n return this.expression.setValue(model, newValu
e);\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 convertStylePropertyName(name) {\n return String(name).replace(/[
A-Z]/g, function(c) {\n return '-' + c.toLowerCase();\n });\n }\n\n va
r parentScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single id
ent paths must bind directly to the appropriate scope object.\n // I.e. Pushed
values in two-bindings need to be assigned to the actual model\n // object.\n
function findScope(model, prop) {\n while (model[parentScopeName] &&\n
!Object.prototype.hasOwnProperty.call(model, prop)) {\n model = model[p
arentScopeName];\n }\n\n return model;\n }\n\n function isLiteralExpress
ion(pathString) {\n switch (pathString) {\n case '':\n return fal
se;\n\n case 'false':\n case 'null':\n case 'true':\n retu
rn true;\n }\n\n if (!isNaN(Number(pathString)))\n return true;\n\n
return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpressi
ons.prototype = {\n // \"built-in\" filters\n styleObject: function(value)
{\n var parts = [];\n for (var key in value) {\n parts.push(co
nvertStylePropertyName(key) + ': ' + value[key]);\n }\n return parts.j
oin('; ');\n },\n\n tokenList: function(value) {\n var tokens = [];\n
for (var key in value) {\n if (value[key])\n tokens.push(k
ey);\n }\n return tokens.join(' ');\n },\n\n // binding delegate
API\n prepareInstancePositionChanged: function(template) {\n var indexI
dent = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n r
eturn;\n\n return function(templateInstance, index) {\n templateInst
ance.model[indexIdent] = index;\n };\n },\n\n prepareBinding: functio
n(pathString, name, node) {\n var path = Path.get(pathString);\n\n if
(!isLiteralExpression(pathString) && path.valid) {\n if (path.length == 1
) {\n return function(model, node, oneTime) {\n if (oneTime)
\n return path.getValueFrom(model);\n\n var scope = find
Scope(model, path[0]);\n return new PathObserver(scope, path);\n
};\n }\n return; // bail out early if pathString is simple pa
th.\n }\n\n return prepareBinding(pathString, name, node, this);\n
},\n\n prepareInstanceModel: function(template) {\n var scopeName = temp
late.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n
var parentScope = template.templateInstance ?\n template.templateIn
stance.model :\n template.model;\n\n var indexName = template.poly
merExpressionIndexIdent_;\n\n return function(model) {\n return crea
teScopeObject(parentScope, model, scopeName, indexName);\n };\n }\n };\
n\n var createScopeObject = ('__proto__' in {}) ?\n function(parentScope, mo
del, scopeName, indexName) {\n var scope = {};\n scope[scopeName] = mo
del;\n scope[indexName] = undefined;\n scope[parentScopeName] = parent
Scope;\n scope.__proto__ = parentScope;\n return scope;\n } :\n
function(parentScope, model, scopeName, indexName) {\n var scope = Object.c
reate(parentScope);\n Object.defineProperty(scope, scopeName,\n {
value: model, configurable: true, writable: true });\n Object.definePropert
y(scope, indexName,\n { value: undefined, configurable: true, writable:
true });\n Object.defineProperty(scope, parentScopeName,\n { valu
e: parentScope, configurable: true, writable: true });\n return scope;\n
};\n\n global.PolymerExpressions = PolymerExpressions;\n PolymerExpressions.g
etExpression = getExpression;\n})(this);\n","/*\n * Copyright (c) 2014 The Polym
er Project Authors. All rights reserved.\n * This code may only be used under th
e BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comple
te set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The c
omplete set of contributors may be found at http://polymer.github.io/CONTRIBUTOR
S.txt\n * Code distributed by Google as part of the polymer project is also\n *
subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt\n */\nPolymer = {\n version: '0.3.3-0e73963'\n};\n","/*\n * Copyright (c
) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only
be used under the BSD style license found at http://polymer.github.io/LICENSE.tx
t\n * The complete set of authors may be found at http://polymer.github.io/AUTHO
RS.txt\n * The complete set of contributors may be found at http://polymer.githu
b.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proj
ect is also\n * subject to an additional IP rights grant found at http://polymer
.github.io/PATENTS.txt\n */\n\n// TODO(sorvell): this ensures Polymer is an obje
ct and not a function\n// Platform is currently defining it as a function to all
ow for async loading\n// of polymer; once we refine the loading process this lik
ely goes away.\nif (typeof window.Polymer === 'function') {\n Polymer = {};\n}\
n\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n
// copy own properties from 'api' to 'prototype, with name hinting for 'super'\n
function extend(prototype, api) {\n if (prototype && api) {\n // use o
nly own properties of 'api'\n Object.getOwnPropertyNames(api).forEach(funct
ion(n) {\n // acquire property descriptor\n var pd = Object.getOwn
PropertyDescriptor(api, n);\n if (pd) {\n // clone property via
descriptor\n Object.defineProperty(prototype, n, pd);\n // cac
he name-of-method for 'super' engine\n if (typeof pd.value == 'function
') {\n // hint the 'super' engine\n pd.value.nom = n;\n
}\n }\n });\n }\n return prototype;\n }\n \n // expo
rts\n\n scope.extend = extend;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 Th
e Polymer Project Authors. All rights reserved.\n * This code may only be used u
nder the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The
complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n
* The complete set of contributors may be found at http://polymer.github.io/CONT
RIBUTORS.txt\n * Code distributed by Google as part of the polymer project is al
so\n * subject to an additional IP rights grant found at http://polymer.github.i
o/PATENTS.txt\n */\n\n(function(scope) {\n \n // usage\n \n // invoke cb.cal
l(this) in 100ms, unless the job is re-registered,\n // which resets the timer\
n // \n // this.myJob = this.job(this.myJob, cb, 100)\n //\n // returns a jo
b handle which can be used to re-register a job\n\n var Job = function(inContex
t) {\n this.context = inContext;\n this.boundComplete = this.complete.bind
(this)\n };\n Job.prototype = {\n go: function(callback, wait) {\n thi
s.callback = callback;\n var h;\n if (!wait) {\n h = requestAni
mationFrame(this.boundComplete);\n this.handle = function() {\n
cancelAnimationFrame(h);\n }\n } else {\n h = setTimeout(this
.boundComplete, wait);\n this.handle = function() {\n clearTimeo
ut(h);\n }\n }\n },\n stop: function() {\n if (this.handl
e) {\n this.handle();\n this.handle = null;\n }\n },\n
complete: function() {\n if (this.handle) {\n this.stop();\n
this.callback.call(this.context);\n }\n }\n };\n \n function job(job,
callback, wait) {\n if (job) {\n job.stop();\n } else {\n job =
new Job(this);\n }\n job.go(callback, wait);\n return job;\n }\n \n
// exports \n\n scope.job = job;\n \n})(Polymer);\n","/*\n * Copyright (c) 20
14 The Polymer Project Authors. All rights reserved.\n * This code may only be u
sed under the BSD style license found at http://polymer.github.io/LICENSE.txt\n
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.t
xt\n * The complete set of contributors may be found at http://polymer.github.io
/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project
is also\n * subject to an additional IP rights grant found at http://polymer.git
hub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLE
lement.register = function(tag, prototype) {\n registry[tag] = prototype;\n
}\n\n // get prototype mapped to node <tag>\n HTMLElement.getPrototypeForTag =
function(tag) {\n var prototype = !tag ? HTMLElement.prototype : registry[ta
g];\n // TODO(sjmiles): creating <tag> is likely to have wasteful side-effect
s\n return prototype || Object.getPrototypeOf(document.createElement(tag));\n
};\n\n // we have to flag propagation stoppage for the event dispatcher\n va
r originalStopPropagation = Event.prototype.stopPropagation;\n Event.prototype.
stopPropagation = function() {\n this.cancelBubble = true;\n originalStopP
ropagation.apply(this, arguments);\n };\n \n // TODO(sorvell): remove when we
're sure imports does not need\n // to load stylesheets\n /*\n HTMLImports.im
porter.preloadSelectors += \n ', polymer-element link[rel=stylesheet]';\n
*/\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. Al
l rights reserved.\r\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\r\n * The complete set of authors
may be found at http://polymer.github.io/AUTHORS.txt\r\n * The complete set of c
ontributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code
distributed by Google as part of the polymer project is also\r\n * subject to a
n additional IP rights grant found at http://polymer.github.io/PATENTS.txt\r\n *
/\r\n\r\n (function(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an o
ptional array of args like one might pass\r\n // to `Function.apply`\r\n\r\n
// TODO(sjmiles):\r\n // $super must be installed on an instance or pro
totype chain\r\n // as `super`, and invoked via `this`, e.g.\r\n //
`this.super();`\r\n\r\n // will not work if function objects are not uni
que, for example,\r\n // when using mixins.\r\n // The memoization s
trategy assumes each function exists on only one \r\n // prototype chain i
.e. we use the function object for memoizing)\r\n // perhaps we can bookke
ep on the prototype itself instead\r\n function $super(arrayOfArgs) {\r\n
// since we are thunking a method call, performance is important here: \r\n
// memoize all lookups, once memoized the fast path calls no other \r\n
// functions\r\n //\r\n // find the caller (cannot be `strict` because
of 'caller')\r\n var caller = $super.caller;\r\n // memoized 'name of
method' \r\n var nom = caller.nom;\r\n // memoized next implementatio
n prototype\r\n var _super = caller._super;\r\n if (!_super) {\r\n
if (!nom) {\r\n nom = caller.nom = nameInThis.call(this, caller);\r
\n }\r\n if (!nom) {\r\n console.warn('called super() on
a method not installed declaratively (has no .nom property)');\r\n }\r\n
// super prototype is either cached or we have to find it\r\n // b
y searching __proto__ (at the 'top')\r\n // invariant: because we cache _
super on fn below, we never reach \r\n // here from inside a series of ca
lls to super(), so it's ok to \r\n // start searching from the prototype
of 'this' (at the 'top')\r\n // we must never memoize a null super for th
is reason\r\n _super = memoizeSuper(caller, nom, getPrototypeOf(this));\r
\n }\r\n // our super function\r\n var fn = _super[nom];\r\n
if (fn) {\r\n // memoize information so 'fn' can call 'super'\r\n
if (!fn._super) {\r\n // must not memoize null, or we lose our invaria
nt above\r\n memoizeSuper(fn, nom, _super);\r\n }\r\n //
invoke the inherited method\r\n // if 'fn' is not function valued, this w
ill throw\r\n return fn.apply(this, arrayOfArgs || []);\r\n }\r\n
}\r\n\r\n function nameInThis(value) {\r\n var p = this.__proto__;\r\n
while (p && p !== HTMLElement.prototype) {\r\n // TODO(sjmiles): get
OwnPropertyNames is absurdly expensive\r\n var n$ = Object.getOwnProperty
Names(p);\r\n for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n
var d = Object.getOwnPropertyDescriptor(p, n);\r\n if (typeof
d.value === 'function' && d.value === value) {\r\n return n;\r\n
}\r\n }\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n f
unction memoizeSuper(method, name, proto) {\r\n // find and cache next prot
otype containing `name`\r\n // we need the prototype so we can do another l
ookup\r\n // from here\r\n var s = nextSuper(proto, name, method);\r\n
if (s[name]) {\r\n // `s` is a prototype, the actual method is `s[n
ame]`\r\n // tag super method with it's name for quicker lookups\r\n
s[name].nom = name;\r\n }\r\n return method._super = s;\r\n }\r\
n\r\n function nextSuper(proto, name, caller) {\r\n // look for an inher
ited prototype that implements name\r\n while (proto) {\r\n if ((pro
to[name] !== caller) && proto[name]) {\r\n return proto;\r\n }\r
\n proto = getPrototypeOf(proto);\r\n }\r\n // must not return
null, or we lose our invariant above\r\n // in this case, a super() call wa
s invoked where no superclass\r\n // method exists\r\n // TODO(sjmiles
): thow an exception?\r\n return Object;\r\n }\r\n\r\n // NOTE: In so
me platforms (IE10) the prototype chain is faked via \r\n // __proto__. There
fore, always get prototype via __proto__ instead of\r\n // the more standard
Object.getPrototypeOf.\r\n function getPrototypeOf(prototype) {\r\n retu
rn prototype.__proto__;\r\n }\r\n\r\n // utility function to precompute na
me tags for functions\r\n // in a (unchained) prototype\r\n function hintS
uper(prototype) {\r\n // tag functions with their prototype name to optimiz
e\r\n // super call invocations\r\n for (var n in prototype) {\r\n
var pd = Object.getOwnPropertyDescriptor(prototype, n);\r\n if (pd &&
typeof pd.value === 'function') {\r\n pd.value.nom = n;\r\n }\r
\n }\r\n }\r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\
n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All r
ights reserved.\n * This code may only be used under the BSD style license found
at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be
found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributo
rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribute
d by Google as part of the polymer project is also\n * subject to an additional
IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(
scope) {\n\n var typeHandlers = {\n string: function(value) {\n return
value;\n },\n date: function(value) {\n return new Date(Date.parse(va
lue) || Date.now());\n },\n boolean: function(value) {\n if (value ==
= '') {\n return true;\n }\n return value === 'false' ? false :
!!value;\n },\n number: function(value) {\n var n = parseFloat(value
);\n // hex values like \"0xFFFF\" parseFloat as 0\n if (n === 0) {\n
n = parseInt(value);\n }\n return isNaN(n) ? value : n;\n
// this code disabled because encoded values (like \"0xFFFF\")\n // do not
round trip to their original format\n //return (String(floatVal) === value)
? floatVal : value;\n },\n object: function(value, currentValue) {\n
if (currentValue === null) {\n return value;\n }\n try {\n
// If the string is an object, we can parse is with the JSON library.\n
// include convenience replace for single-quotes. If the author omits\n
// quotes altogether, parse will fail.\n return JSON.parse(value.replac
e(/'/g, '\"'));\n } catch(e) {\n // The object isn't valid JSON, ret
urn the raw value\n return value;\n }\n },\n // avoid deserial
ization of functions\n 'function': function(value, currentValue) {\n ret
urn currentValue;\n }\n };\n\n function deserializeValue(value, currentValu
e) {\n // attempt to infer type from default value\n var inferredType = ty
peof currentValue;\n // invent 'date' type value for Date\n if (currentVal
ue instanceof Date) {\n inferredType = 'date';\n }\n // delegate dese
rialization via type string\n return typeHandlers[inferredType](value, curren
tValue);\n }\n\n // exports\n\n scope.deserializeValue = deserializeValue;\n\
n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rig
hts reserved.\n * This code may only be used under the BSD style license found a
t http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be fo
und at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors
may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed
by Google as part of the polymer project is also\n * subject to an additional IP
rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scop
e) {\n\n // imports\n\n var extend = scope.extend;\n\n // module\n\n var api
= {};\n\n api.declaration = {};\n api.instance = {};\n\n api.publish = funct
ion(apis, prototype) {\n for (var n in apis) {\n extend(prototype, apis[
n]);\n }\n };\n\n // exports\n\n scope.api = api;\n\n})(Polymer);\n","/*\n
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This
code may only be used under the BSD style license found at http://polymer.githu
b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.
github.io/AUTHORS.txt\n * The complete set of contributors may be found at http:
//polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t
he polymer project is also\n * subject to an additional IP rights grant found at
http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var utils
= {\n /**\n * Invokes a function asynchronously. The context of the call
back\n * function is bound to 'this' automatically.\n * @method async\
n * @param {Function|String} method\n * @param {any|Array} args\n
* @param {number} timeout\n */\n async: function(method, args, timeout)
{\n // when polyfilling Object.observe, ensure changes \n // propagat
e before executing the async method\n Platform.flush();\n // second ar
gument to `apply` must be an array\n args = (args && args.length) ? args :
[args];\n // function to invoke\n var fn = function() {\n (this
[method] || method).apply(this, args);\n }.bind(this);\n // execute `f
n` sooner or later\n var handle = timeout ? setTimeout(fn, timeout) :\n
requestAnimationFrame(fn);\n // NOTE: switch on inverting handle to d
etermine which time is used.\n return timeout ? handle : ~handle;\n },\n
cancelAsync: function(handle) {\n if (handle < 0) {\n cancelAnim
ationFrame(~handle);\n } else {\n clearTimeout(handle);\n }\n
},\n /**\n * Fire an event.\n * @method fire\n * @returns {O
bject} event\n * @param {string} type An event name.\n * @param {any}
detail\n * @param {Node} onNode Target node.\n */\n fire: function(
type, detail, onNode, bubbles, cancelable) {\n var node = onNode || this;\n
var detail = detail || {};\n var event = new CustomEvent(type, {\n
bubbles: (bubbles !== undefined ? bubbles : true), \n cancelable: (c
ancelable !== undefined ? cancelable : true), \n detail: detail\n })
;\n node.dispatchEvent(event);\n return event;\n },\n /**\n
* Fire an event asynchronously.\n * @method asyncFire\n * @param {str
ing} type An event name.\n * @param detail\n * @param {Node} toNode Ta
rget node.\n */\n asyncFire: function(/*inType, inDetail*/) {\n thi
s.async(\"fire\", arguments);\n },\n /**\n * Remove class from old, a
dd class to anew, if they exist.\n * @param classFollows\n * @param an
ew A node.\n * @param old A node\n * @param className\n */\n c
lassFollows: function(anew, old, className) {\n if (old) {\n old.cla
ssList.remove(className);\n }\n if (anew) {\n anew.classList.ad
d(className);\n }\n },\n /**\n * Inject HTML which contains mark
up bound to this element into\n * a target element (replacing target elemen
t content).\n * @param String html to inject\n * @param Element target
element\n */\n injectBoundHTML: function(html, element) {\n var te
mplate = document.createElement('template');\n template.innerHTML = html;\n
var fragment = this.instanceTemplate(template);\n if (element) {\n
element.textContent = '';\n element.appendChild(fragment);\n }\
n return fragment;\n }\n };\n\n // no-operation function for handy stu
bs\n var nop = function() {};\n\n // null-object for handy stubs\n var nob =
{};\n\n // deprecated\n\n utils.asyncMethod = utils.async;\n\n // exports\n\n
scope.api.instance.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n}
)(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All right
s reserved.\n * This code may only be used under the BSD style license found at
http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be foun
d at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors m
ay be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by
Google as part of the polymer project is also\n * subject to an additional IP r
ights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scop
e) {\n\n // imports\n\n var log = window.logFlags || {};\n var EVENT_PREFIX =
'on-';\n\n // instance events api\n var events = {\n // read-only\n EVE
NT_PREFIX: EVENT_PREFIX,\n // event listeners on host\n addHostListeners:
function() {\n var events = this.eventDelegates;\n log.events && (Obje
ct.keys(events).length > 0) && console.log('[%s] addHostListeners:', this.localN
ame, events);\n // NOTE: host events look like bindings but really are not;
\n // (1) we don't want the attribute to be set and (2) we want to support\
n // multiple event listeners ('host' and 'instance') and Node.bind\n
// by default supports 1 thing being bound.\n for (var type in events) {\n
var methodName = events[type];\n this.addEventListener(type, this.
element.getEventHandler(this, this,\n
methodName));\n }\n },\n // call 'method' or fu
nction method on 'obj' with 'args', if the method exists\n dispatchMethod: fu
nction(obj, method, args) {\n if (obj) {\n log.events && console.gro
up('[%s] dispatch [%s]', obj.localName, method);\n var fn = typeof method
=== 'function' ? method : obj[method];\n if (fn) {\n fn[args ?
'apply' : 'call'](obj, args);\n }\n log.events && console.groupEnd
();\n Platform.flush();\n }\n }\n };\n\n // exports\n\n scope.
api.instance.events = events;\n\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 Th
e Polymer Project Authors. All rights reserved.\r\n * This code may only be used
under the BSD style license found at http://polymer.github.io/LICENSE.txt\r\n *
The complete set of authors may be found at http://polymer.github.io/AUTHORS.tx
t\r\n * The complete set of contributors may be found at http://polymer.github.i
o/CONTRIBUTORS.txt\r\n * Code distributed by Google as part of the polymer proje
ct is also\r\n * subject to an additional IP rights grant found at http://polyme
r.github.io/PATENTS.txt\r\n */\r\n\r\n(function(scope) {\r\n\r\n // instance ap
i for attributes\r\n\r\n var attributes = {\r\n copyInstanceAttributes: func
tion () {\r\n var a$ = this._instanceAttributes;\r\n for (var k in a$)
{\r\n if (!this.hasAttribute(k)) {\r\n this.setAttribute(k, a$[
k]);\r\n }\r\n }\r\n },\r\n // for each attribute on this, des
erialize value to property as needed\r\n takeAttributes: function() {\r\n
// if we have no publish lookup table, we have no attributes to take\r\n
// TODO(sjmiles): ad hoc\r\n if (this._publishLC) {\r\n for (var i=0
, a$=this.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this
.attributeToProperty(a.name, a.value);\r\n }\r\n }\r\n },\r\n
// if attribute 'name' is mapped to a property, deserialize\r\n // 'value' in
to that property\r\n attributeToProperty: function(name, value) {\r\n //
try to match this attribute to a property (attributes are\r\n // all lower
-case, so this is case-insensitive search)\r\n var name = this.propertyForA
ttribute(name);\r\n if (name) {\r\n // filter out 'mustached' values
, these are to be\r\n // replaced with bound-data and are not yet values\
r\n // themselves\r\n if (value && value.search(scope.bindPattern)
>= 0) {\r\n return;\r\n }\r\n // get original value\r\n
var currentValue = this[name];\r\n // deserialize Boolean or Numbe
r values from attribute\r\n var value = this.deserializeValue(value, curr
entValue);\r\n // only act if the value has changed\r\n if (value
!== currentValue) {\r\n // install new value (has side-effects)\r\n
this[name] = value;\r\n }\r\n }\r\n },\r\n // return the
published property matching name, or undefined\r\n propertyForAttribute: fun
ction(name) {\r\n var match = this._publishLC && this._publishLC[name];\r\n
//console.log('propertyForAttribute:', name, 'matches', match);\r\n r
eturn match;\r\n },\r\n // convert representation of 'stringValue' based o
n type of 'currentValue'\r\n deserializeValue: function(stringValue, currentV
alue) {\r\n return scope.deserializeValue(stringValue, currentValue);\r\n
},\r\n serializeValue: function(value, inferredType) {\r\n if (inferre
dType === 'boolean') {\r\n return value ? '' : undefined;\r\n } else
if (inferredType !== 'object' && inferredType !== 'function'\r\n && va
lue !== undefined) {\r\n return value;\r\n }\r\n },\r\n reflec
tPropertyToAttribute: function(name) {\r\n var inferredType = typeof this[n
ame];\r\n // try to intelligently serialize property value\r\n var ser
ializedValue = this.serializeValue(this[name], inferredType);\r\n // boolea
n properties must reflect as boolean attributes\r\n if (serializedValue !==
undefined) {\r\n this.setAttribute(name, serializedValue);\r\n //
TODO(sorvell): we should remove attr for all properties\r\n // that have
undefined serialization; however, we will need to\r\n // refine the attr
reflection system to achieve this; pica, for example,\r\n // relies on h
aving inferredType object properties not removed as\r\n // attrs.\r\n
} else if (inferredType === 'boolean') {\r\n this.removeAttribute(name)
;\r\n }\r\n }\r\n };\r\n\r\n // exports\r\n\r\n scope.api.instance.at
tributes = attributes;\r\n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The P
olymer Project Authors. All rights reserved.\n * This code may only be used unde
r the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The co
mplete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * T
he complete set of contributors may be found at http://polymer.github.io/CONTRIB
UTORS.txt\n * Code distributed by Google as part of the polymer project is also\
n * subject to an additional IP rights grant found at http://polymer.github.io/P
ATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logF
lags || {};\n\n // magic words\n\n var OBSERVE_SUFFIX = 'Changed';\n\n // ele
ment api\n\n var empty = [];\n\n var updateRecord = {\n object: undefined,\
n type: 'update',\n name: undefined,\n oldValue: undefined\n };\n\n v
ar numberIsNaN = Number.isNaN || function(value) {\n return typeof value ===
'number' && isNaN(value);\n }\n\n function areSameValue(left, right) {\n if
(left === right)\n return left !== 0 || 1 / left === 1 / right;\n if (n
umberIsNaN(left) && numberIsNaN(right))\n return true;\n\n return left !
== left && right !== right;\n }\n\n // capture A's value if B's value is null
or undefined,\n // otherwise use B's value\n function resolveBindingValue(oldV
alue, value) {\n if (value === undefined && oldValue === null) {\n retur
n value;\n }\n return (value === null || value === undefined) ? oldValue :
value;\n }\n\n var properties = {\n createPropertyObserver: function() {\n
var n$ = this._observeNames;\n if (n$ && n$.length) {\n var o
= this._propertyObserver = new CompoundObserver(true);\n this.registerObs
erver(o);\n // TODO(sorvell): may not be kosher to access the value here
(this[n]);\n // previously we looked at the descriptor on the prototype\n
// this doesn't work for inheritance and not for accessors without\n
// a value property\n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]
); i++) {\n o.addPath(this, n);\n this.observeArrayValue(n, th
is[n], null);\n }\n }\n },\n openPropertyObserver: function()
{\n if (this._propertyObserver) {\n this._propertyObserver.open(this
.notifyPropertyChanges, this);\n }\n },\n notifyPropertyChanges: func
tion(newValues, oldValues, paths) {\n var name, method, called = {};\n
for (var i in oldValues) {\n // note: paths is of form [object, path, ob
ject, path]\n name = paths[2 * i + 1];\n method = this.observe[nam
e];\n if (method) {\n var ov = oldValues[i], nv = newValues[i];\
n // observes the value if it is an array\n this.observeArrayV
alue(name, nv, ov);\n if (!called[method]) {\n // only invok
e change method if one of ov or nv is not (undefined | null)\n if ((o
v !== undefined && ov !== null) || (nv !== undefined && nv !== null)) {\n
called[method] = true;\n // TODO(sorvell): call method with
the set of values it's expecting;\n // e.g. 'foo bar': 'invalidate'
expects the new and old values for\n // foo and bar. Currently we
give only one of these and then\n // deliver all the arguments.\n
this.invokeMethod(method, [ov, nv, arguments]);\n }\n
}\n }\n }\n },\n deliverChanges: function() {\n if
(this._propertyObserver) {\n this._propertyObserver.deliver();\n }\n
},\n propertyChanged_: function(name, value, oldValue) {\n if (this.
reflect[name]) {\n this.reflectPropertyToAttribute(name);\n }\n }
,\n observeArrayValue: function(name, value, old) {\n // we only care if
there are registered side-effects\n var callbackName = this.observe[name];
\n if (callbackName) {\n // if we are observing the previous value,
stop\n if (Array.isArray(old)) {\n log.observe && console.log('[
%s] observeArrayValue: unregister observer [%s]', this.localName, name);\n
this.closeNamedObserver(name + '__array');\n }\n // if the new
value is an array, being observing it\n if (Array.isArray(value)) {\n
log.observe && console.log('[%s] observeArrayValue: register observer [%s
]', this.localName, name, value);\n var observer = new ArrayObserver(va
lue);\n observer.open(function(value, old) {\n this.invokeMe
thod(callbackName, [old]);\n }, this);\n this.registerNamedObs
erver(name + '__array', observer);\n }\n }\n },\n emitProperty
ChangeRecord: function(name, value, oldValue) {\n var object = this;\n
if (areSameValue(value, oldValue))\n return;\n\n this.propertyChang
ed_(name, value, oldValue);\n\n if (!Observer.hasObjectObserve)\n re
turn;\n\n var notifier = this.notifier_;\n if (!notifier)\n not
ifier = this.notifier_ = Object.getNotifier(this);\n\n updateRecord.object
= this;\n updateRecord.name = name;\n updateRecord.oldValue = oldValue
;\n\n notifier.notify(updateRecord);\n },\n bindToAccessor: function(
name, observable, resolveFn) {\n var privateName = name + '_';\n var p
rivateObservable = name + 'Observable_';\n\n this[privateObservable] = obs
ervable;\n var oldValue = this[privateName];\n\n var self = this;\n
var value = observable.open(function(value, oldValue) {\n self[private
Name] = value;\n self.emitPropertyChangeRecord(name, value, oldValue);\n
});\n\n if (resolveFn && !areSameValue(oldValue, value)) {\n va
r resolvedValue = resolveFn(oldValue, value);\n if (!areSameValue(value,
resolvedValue)) {\n value = resolvedValue;\n if (observable.se
tValue)\n observable.setValue(value);\n }\n }\n\n th
is[privateName] = value;\n this.emitPropertyChangeRecord(name, value, oldVa
lue);\n\n var observer = {\n close: function() {\n observab
le.close();\n self[privateObservable] = undefined;\n }\n };
\n this.registerObserver(observer);\n return observer;\n },\n cr
eateComputedProperties: function() {\n if (!this._computedNames) {\n
return;\n }\n\n for (var i = 0; i < this._computedNames.length; i++)
{\n var name = this._computedNames[i];\n var expressionText = this
.computed[name];\n try {\n var expression = PolymerExpressions.g
etExpression(expressionText);\n var observable = expression.getBinding(
this, this.element.syntax);\n this.bindToAccessor(name, observable);\n
} catch (ex) {\n console.error('Failed to create computed proper
ty', ex);\n }\n }\n },\n bindProperty: function(property, obse
rvable, oneTime) {\n if (oneTime) {\n this[property] = observable;\n
return;\n }\n return this.bindToAccessor(property, observable,
resolveBindingValue);\n },\n invokeMethod: function(method, args) {\n
var fn = this[method] || method;\n if (typeof fn === 'function') {\n
fn.apply(this, args);\n }\n },\n registerObserver: function(observ
er) {\n if (!this._observers) {\n this._observers = [observer];\n
return;\n }\n\n this._observers.push(observer);\n },\n // o
bserver array items are arrays of observers.\n closeObservers: function() {\n
if (!this._observers) {\n return;\n }\n\n var observers =
this._observers;\n for (var i = 0; i < observers.length; i++) {\n v
ar observer = observers[i];\n if (observer && typeof observer.close == 'f
unction') {\n observer.close();\n }\n }\n\n this._obse
rvers = [];\n },\n // bookkeeping observers for memory management\n reg
isterNamedObserver: function(name, observer) {\n var o$ = this._namedObserv
ers || (this._namedObservers = {});\n o$[name] = observer;\n },\n clo
seNamedObserver: function(name) {\n var o$ = this._namedObservers;\n i
f (o$ && o$[name]) {\n o$[name].close();\n o$[name] = null;\n
return true;\n }\n },\n closeNamedObservers: function() {\n i
f (this._namedObservers) {\n for (var i in this._namedObservers) {\n
this.closeNamedObserver(i);\n }\n this._namedObservers = {};\
n }\n }\n };\n\n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';
\n var LOG_OBSERVED = '[%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANG
ED = '[%s#%s] propertyChanged: [%s] now [%s] was [%s]';\n\n // exports\n\n sco
pe.api.instance.properties = properties;\n\n})(Polymer);\n","/*\n * Copyright (c
) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only
be used under the BSD style license found at http://polymer.github.io/LICENSE.tx
t\n * The complete set of authors may be found at http://polymer.github.io/AUTHO
RS.txt\n * The complete set of contributors may be found at http://polymer.githu
b.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer proj
ect is also\n * subject to an additional IP rights grant found at http://polymer
.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log =
window.logFlags || 0;\n\n // element api supporting mdv\n var mdv = {\n in
stanceTemplate: function(template) {\n // ensure a default bindingDelegate\
n var syntax = this.syntax || (!template.bindingDelegate &&\n this
.element.syntax);\n var dom = template.createInstance(this, syntax);\n
var observers = dom.bindings_;\n for (var i = 0; i < observers.length; i++
) {\n this.registerObserver(observers[i]);\n }\n return dom;\n
},\n bind: function(name, observable, oneTime) {\n var property = thi
s.propertyForAttribute(name);\n if (!property) {\n // TODO(sjmiles):
this mixin method must use the special form\n // of `super` installed by
`mixinMethod` in declaration/prototype.js\n return this.mixinSuper(argum
ents);\n } else {\n // use n-way Polymer binding\n var observ
er = this.bindProperty(property, observable, oneTime);\n // NOTE: reflect
ing binding information is typically required only for\n // tooling. It h
as a performance cost so it's opt-in in Node.bind.\n if (Platform.enableB
indingsReflection && observer) {\n observer.path = observable.path_;\n
this._recordBinding(property, observer);\n }\n if (this.r
eflect[property]) {\n this.reflectPropertyToAttribute(property);\n
}\n return observer;\n }\n },\n bindFinished: function() {\
n this.makeElementReady();\n },\n _recordBinding: function(name, obse
rver) {\n this.bindings_ = this.bindings_ || {};\n this.bindings_[name
] = observer;\n },\n // TODO(sorvell): unbind/unbindAll has been removed,
as public api, from\n // TemplateBinding. We still need to close/dispose of o
bservers but perhaps\n // we should choose a more explicit name.\n asyncUn
bindAll: function() {\n if (!this._unbound) {\n log.unbind && consol
e.log('[%s] asyncUnbindAll', this.localName);\n this._unbindAllJob = this
.job(this._unbindAllJob, this.unbindAll, 0);\n }\n },\n unbindAll: fu
nction() {\n if (!this._unbound) {\n this.closeObservers();\n
this.closeNamedObservers();\n this._unbound = true;\n }\n },\n
cancelUnbindAll: function() {\n if (this._unbound) {\n log.unbind
&& console.warn('[%s] already unbound, cannot cancel unbindAll', this.localName)
;\n return;\n }\n log.unbind && console.log('[%s] cancelUnbindA
ll', this.localName);\n if (this._unbindAllJob) {\n this._unbindAllJ
ob = this._unbindAllJob.stop();\n }\n }\n };\n\n function unbindNodeTr
ee(node) {\n forNodeTree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbin
dAll(node) {\n node.unbindAll();\n }\n\n function forNodeTree(node, callbac
k) {\n if (node) {\n callback(node);\n for (var child = node.firstC
hild; child; child = child.nextSibling) {\n forNodeTree(child, callback);
\n }\n }\n }\n\n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exp
orts\n\n scope.bindPattern = mustachePattern;\n scope.api.instance.mdv = mdv;\
n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All r
ights reserved.\n * This code may only be used under the BSD style license found
at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be
found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributo
rs may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distribute
d by Google as part of the polymer project is also\n * subject to an additional
IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(
scope) {\n\n var base = {\n PolymerBase: true,\n job: function(job, callb
ack, wait) {\n if (typeof job === 'string') {\n var n = '___' + job;
\n this[n] = Polymer.job.call(this, this[n], callback, wait);\n } el
se {\n return Polymer.job.call(this, job, callback, wait);\n }\n
},\n super: Polymer.super,\n // user entry point for element has had its c
reatedCallback called\n created: function() {\n },\n // user entry poin
t for element has shadowRoot and is ready for\n // api interaction\n ready
: function() {\n },\n createdCallback: function() {\n if (this.templa
teInstance && this.templateInstance.model) {\n console.warn('Attributes o
n ' + this.localName + ' were data bound ' +\n 'prior to Polymer upgr
ading the element. This may result in ' +\n 'incorrect binding types.
');\n }\n this.created();\n this.prepareElement();\n // TODO
(sorvell): replace when ShadowDOMPolyfill issue is corrected\n // https://g
ithub.com/Polymer/ShadowDOM/issues/420\n if (!this.ownerDocument.isStagingD
ocument || window.ShadowDOMPolyfill) {\n this.makeElementReady();\n
}\n },\n // system entry point, do not override\n prepareElement: funct
ion() {\n if (this._elementPrepared) {\n console.warn('Element alrea
dy prepared', this.localName);\n return;\n }\n this._elementPre
pared = true;\n // storage for shadowRoots info\n this.shadowRoots = {
};\n // install property observers\n this.createPropertyObserver();\n
// TODO (sorvell): temporarily open observer when created\n this.openP
ropertyObserver();\n // install boilerplate attributes\n this.copyInst
anceAttributes();\n // process input attributes\n this.takeAttributes(
);\n // add event listeners\n this.addHostListeners();\n },\n ma
keElementReady: function() {\n if (this._readied) {\n return;\n
}\n this._readied = true;\n this.createComputedProperties();\n /
/ TODO(sorvell): We could create an entry point here\n // for the user to c
ompute property values.\n // process declarative resources\n this.pars
eDeclarations(this.__proto__);\n // TODO(sorvell): CE polyfill uses unresol
ved attribute to simulate\n // :unresolved; remove this attribute to be com
patible with native\n // CE.\n this.removeAttribute('unresolved');\n
// user entry point\n this.ready();\n // TODO (sorvell): temporari
ly open observer when created\n // turn on property observation and take an
y initial changes\n //this.openPropertyObserver();\n },\n attachedCal
lback: function() {\n this.cancelUnbindAll();\n // invoke user action\
n if (this.attached) {\n this.attached();\n }\n // TODO(so
rvell): bc\n if (this.enteredView) {\n this.enteredView();\n }\
n // NOTE: domReady can be used to access elements in dom (descendants,\n
// ancestors, siblings) such that the developer is enured to upgrade\n
// ordering. If the element definitions have loaded, domReady\n // can be u
sed to access upgraded elements.\n if (!this.hasBeenAttached) {\n th
is.hasBeenAttached = true;\n if (this.domReady) {\n this.async('
domReady');\n }\n }\n },\n detachedCallback: function() {\n
if (!this.preventDispose) {\n this.asyncUnbindAll();\n }\n /
/ invoke user action\n if (this.detached) {\n this.detached();\n
}\n // TODO(sorvell): bc\n if (this.leftView) {\n this.leftVi
ew();\n }\n },\n // TODO(sorvell): bc\n enteredViewCallback: funct
ion() {\n this.attachedCallback();\n },\n // TODO(sorvell): bc\n l
eftViewCallback: function() {\n this.detachedCallback();\n },\n // TO
DO(sorvell): bc\n enteredDocumentCallback: function() {\n this.attachedC
allback();\n },\n // TODO(sorvell): bc\n leftDocumentCallback: function
() {\n this.detachedCallback();\n },\n // recursive ancestral <elemen
t> initialization, oldest first\n parseDeclarations: function(p) {\n if
(p && p.element) {\n this.parseDeclarations(p.__proto__);\n p.pars
eDeclaration.call(this, p.element);\n }\n },\n // parse input <elemen
t> as needed, override for custom behavior\n parseDeclaration: function(eleme
ntElement) {\n var template = this.fetchTemplate(elementElement);\n if
(template) {\n var root = this.shadowFromTemplate(template);\n th
is.shadowRoots[elementElement.name] = root;\n }\n },\n // return a sh
adow-root template (if desired), override for custom behavior\n fetchTemplate
: function(elementElement) {\n return elementElement.querySelector('templat
e');\n },\n // utility function that creates a shadow root from a <templat
e>\n shadowFromTemplate: function(template) {\n if (template) {\n
// make a shadow root\n var root = this.createShadowRoot();\n //
stamp template\n // which includes parsing and applying MDV bindings befo
re being\n // inserted (to avoid {{}} in attribute values)\n // e.
g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n var
dom = this.instanceTemplate(template);\n // append to shadow dom\n
root.appendChild(dom);\n // perform post-construction initialization tas
ks on shadow root\n this.shadowRootReady(root, template);\n // ret
urn the created shadow root\n return root;\n }\n },\n // utili
ty function that stamps a <template> into light-dom\n lightFromTemplate: func
tion(template, refNode) {\n if (template) {\n // TODO(sorvell): mark
this element as an eventController so that\n // event listeners on bound
nodes inside it will be called on it.\n // Note, the expectation here is
that events on all descendants\n // should be handled by this element.\n
this.eventController = this;\n // stamp template\n // whic
h includes parsing and applying MDV bindings before being\n // inserted (
to avoid {{}} in attribute values)\n // e.g. to prevent <img src=\"images
/{{icon}}\"> from generating a 404.\n var dom = this.instanceTemplate(tem
plate);\n // append to shadow dom\n if (refNode) {\n this
.insertBefore(dom, refNode);\n } else {\n this.appendChild(dom);
\n }\n // perform post-construction initialization tasks on ahem,
light root\n this.shadowRootReady(this);\n // return the created s
hadow root\n return dom;\n }\n },\n shadowRootReady: function(
root) {\n // locate nodes with id and store references to them in this.$ ha
sh\n this.marshalNodeReferences(root);\n // set up polymer gestures\n
PolymerGestures.register(root);\n },\n // locate nodes with id and st
ore references to them in this.$ hash\n marshalNodeReferences: function(root)
{\n // establish $ instance variable\n var $ = this.$ = this.$ || {};
\n // populate $ from nodes with ID from the LOCAL tree\n if (root) {\
n var n$ = root.querySelectorAll(\"[id]\");\n for (var i=0, l=n$.l
ength, n; (i<l) && (n=n$[i]); i++) {\n $[n.id] = n;\n };\n
}\n },\n attributeChangedCallback: function(name, oldValue) {\n // TO
DO(sjmiles): adhoc filter\n if (name !== 'class' && name !== 'style') {\n
this.attributeToProperty(name, this.getAttribute(name));\n }\n i
f (this.attributeChanged) {\n this.attributeChanged.apply(this, arguments
);\n }\n },\n onMutation: function(node, listener) {\n var obser
ver = new MutationObserver(function(mutations) {\n listener.call(this, ob
server, mutations);\n observer.disconnect();\n }.bind(this));\n
observer.observe(node, {childList: true, subtree: true});\n }\n };\n\n //
true if object has own PolymerBase api\n function isBase(object) {\n return
object.hasOwnProperty('PolymerBase')\n }\n\n // name a base constructor for de
v tools\n\n function PolymerBase() {};\n PolymerBase.prototype = base;\n base
.constructor = PolymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n sc
ope.isBase = isBase;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n
* Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This
code may only be used under the BSD style license found at http://polymer.githu
b.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.
github.io/AUTHORS.txt\n * The complete set of contributors may be found at http:
//polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of t
he polymer project is also\n * subject to an additional IP rights grant found at
http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports
\n\n var log = window.logFlags || {};\n \n // magic words\n \n var STYLE_SC
OPE_ATTRIBUTE = 'element';\n var STYLE_CONTROLLER_SCOPE = 'controller';\n \n
var styles = {\n STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n
* Installs external stylesheets and <style> elements with the attribute \n
* polymer-scope='controller' into the scope of element. This is intended\n *
to be a called during custom element construction.\n */\n installControll
erStyles: function() {\n // apply controller styles, but only if they are n
ot yet applied\n var scope = this.findStyleScope();\n if (scope && !th
is.scopeHasNamedStyle(scope, this.localName)) {\n // allow inherited cont
roller styles\n var proto = getPrototypeOf(this), cssText = '';\n
while (proto && proto.element) {\n cssText += proto.element.cssTextForS
cope(STYLE_CONTROLLER_SCOPE);\n proto = getPrototypeOf(proto);\n
}\n if (cssText) {\n this.installScopeCssText(cssText, scope);\
n }\n }\n },\n installScopeStyle: function(style, name, scope)
{\n var scope = scope || this.findStyleScope(), name = name || '';\n
if (scope && !this.scopeHasNamedStyle(scope, this.localName + name)) {\n
var cssText = '';\n if (style instanceof Array) {\n for (var i=0
, l=style.length, s; (i<l) && (s=style[i]); i++) {\n cssText += s.tex
tContent + '\\n\\n';\n }\n } else {\n cssText = style.t
extContent;\n }\n this.installScopeCssText(cssText, scope, name);\
n }\n },\n installScopeCssText: function(cssText, scope, name) {\n
scope = scope || this.findStyleScope();\n name = name || '';\n if (
!scope) {\n return;\n }\n if (window.ShadowDOMPolyfill) {\n
cssText = shimCssText(cssText, scope.host);\n }\n var style = this
.element.cssTextToScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n
Polymer.applyStyleToScope(style, scope);\n // cache that this style has be
en applied\n scope._scopeStyles[this.localName + name] = true;\n },\n
findStyleScope: function(node) {\n // find the shadow root that contains t
his element\n var n = node || this;\n while (n.parentNode) {\n
n = n.parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: fun
ction(scope, name) {\n scope._scopeStyles = scope._scopeStyles || {};\n
return scope._scopeStyles[name];\n }\n };\n \n // NOTE: use raw prototyp
e traversal so that we ensure correct traversal\n // on platforms where the pro
toype chain is simulated via __proto__ (IE10)\n function getPrototypeOf(prototy
pe) {\n return prototype.__proto__;\n }\n\n function shimCssText(cssText, h
ost) {\n var name = '', is = false;\n if (host) {\n name = host.local
Name;\n is = host.hasAttribute('is');\n }\n var selector = Platform.S
hadowCSS.makeScopeSelector(name, is);\n return Platform.ShadowCSS.shimCssText
(cssText, selector);\n }\n\n // exports\n\n scope.api.instance.styles = style
s;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors.
All rights reserved.\n * This code may only be used under the BSD style license
found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors ma
y be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contr
ibutors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distr
ibuted by Google as part of the polymer project is also\n * subject to an additi
onal IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(func
tion(scope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope
.api;\n\n // imperative implementation: Polymer()\n\n // specify an 'own' prot
otype for tag `name`\n function element(name, prototype) {\n if (arguments.l
ength === 1 && typeof arguments[0] !== 'string') {\n prototype = name;\n
var script = document._currentScript;\n name = script && script.parentNo
de && script.parentNode.getAttribute ?\n script.parentNode.getAttribute
('name') : '';\n if (!name) {\n throw 'Element name could not be inf
erred.';\n }\n }\n if (getRegisteredPrototype[name]) {\n throw '
Already registered (Polymer) prototype for element ' + name;\n }\n // cach
e the prototype\n registerPrototype(name, prototype);\n // notify the regi
strar waiting for 'name', if any\n notifyPrototype(name);\n }\n\n // async
prototype source\n\n function waitingForPrototype(name, client) {\n waitProt
otype[name] = client;\n }\n\n var waitPrototype = {};\n\n function notifyProt
otype(name) {\n if (waitPrototype[name]) {\n waitPrototype[name].registe
rWhenReady();\n delete waitPrototype[name];\n }\n }\n\n // utility and
bookkeeping\n\n // maps tag names to prototypes, as registered with\n // Poly
mer. Prototypes associated with a tag name\n // using document.registerElement
are available from\n // HTMLElement.getPrototypeForTag().\n // If an element w
as fully registered by Polymer, then\n // Polymer.getRegisteredPrototype(name)
=== \n // HTMLElement.getPrototypeForTag(name)\n\n var prototypesByName = {}
;\n\n function registerPrototype(name, prototype) {\n return prototypesByNam
e[name] = prototype || {};\n }\n\n function getRegisteredPrototype(name) {\n
return prototypesByName[name];\n }\n\n // exports\n\n scope.getRegisteredPr
ototype = getRegisteredPrototype;\n scope.waitingForPrototype = waitingForProto
type;\n\n // namespace shenanigans so we can expose our scope on the registrati
on \n // function\n\n // make window.Polymer reference `element()`\n\n window
.Polymer = element;\n\n // TODO(sjmiles): find a way to do this that is less te
rrible\n // copy window.Polymer properties onto `element()`\n\n extend(Polymer
, scope);\n\n // Under the HTMLImports polyfill, scripts in the main document\n
// do not block on imports; we want to allow calls to Polymer in the main\n /
/ document. Platform collects those calls until we can process them, which\n //
we do here.\n\n var declarations = Platform.deliverDeclarations();\n if (decl
arations) {\n for (var i=0, l=declarations.length, d; (i<l) && (d=declaration
s[i]); i++) {\n element.apply(null, d);\n }\n }\n\n})(Polymer);\n","/*\
n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Thi
s code may only be used under the BSD style license found at http://polymer.gith
ub.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer
.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http
://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of
the polymer project is also\n * subject to an additional IP rights grant found a
t http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar path =
{\n resolveElementPaths: function(node) {\n Platform.urlResolver.resolveDom(
node);\n },\n addResolvePathApi: function() {\n // let assetpath attribute
modify the resolve path\n var assetPath = this.getAttribute('assetpath') || '
';\n var root = new URL(assetPath, this.ownerDocument.baseURI);\n this.pro
totype.resolvePath = function(urlPath, base) {\n var u = new URL(urlPath, b
ase || root);\n return u.href;\n };\n }\n};\n\n// exports\nscope.api.de
claration.path = path;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com
plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.
txt\n * Code distributed by Google as part of the polymer project is also\n * su
bject to an additional IP rights grant found at http://polymer.github.io/PATENTS
.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags |
| {};\n var api = scope.api.instance.styles;\n var STYLE_SCOPE_ATTRIBUTE = api
.STYLE_SCOPE_ATTRIBUTE;\n\n // magic words\n\n var STYLE_SELECTOR = 'style';\n
var STYLE_LOADABLE_MATCH = '@import';\n var SHEET_SELECTOR = 'link[rel=styles
heet]';\n var STYLE_GLOBAL_SCOPE = 'global';\n var SCOPE_ATTR = 'polymer-scope
';\n\n var styles = {\n // returns true if resources are loading\n loadSt
yles: function(callback) {\n var template = this.fetchTemplate();\n va
r content = template && this.templateContent();\n if (content) {\n t
his.convertSheetsToStyles(content);\n var styles = this.findLoadableStyle
s(content);\n if (styles.length) {\n var templateUrl = template.
ownerDocument.baseURI;\n return Platform.styleResolver.loadStyles(style
s, templateUrl, callback);\n }\n }\n if (callback) {\n c
allback();\n }\n },\n convertSheetsToStyles: function(root) {\n
var s$ = root.querySelectorAll(SHEET_SELECTOR);\n for (var i=0, l=s$.length
, s, c; (i<l) && (s=s$[i]); i++) {\n c = createStyleElement(importRuleFor
Sheet(s, this.ownerDocument.baseURI),\n this.ownerDocument);\n
this.copySheetAttributes(c, s);\n s.parentNode.replaceChild(c, s);\n
}\n },\n copySheetAttributes: function(style, link) {\n for (var i=
0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n if (a.n
ame !== 'rel' && a.name !== 'href') {\n style.setAttribute(a.name, a.va
lue);\n }\n }\n },\n findLoadableStyles: function(root) {\n
var loadables = [];\n if (root) {\n var s$ = root.querySelectorAl
l(STYLE_SELECTOR);\n for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i+
+) {\n if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n lo
adables.push(s);\n }\n }\n }\n return loadables;\n
},\n /**\n * Install external stylesheets loaded in <polymer-element> ele
ments into the \n * element's template.\n * @param elementElement The <e
lement> element to style.\n */\n installSheets: function() {\n this.
cacheSheets();\n this.cacheStyles();\n this.installLocalSheets();\n
this.installGlobalStyles();\n },\n /**\n * Remove all sheets from e
lement and store for later use.\n */\n cacheSheets: function() {\n t
his.sheets = this.findNodes(SHEET_SELECTOR);\n this.sheets.forEach(function
(s) {\n if (s.parentNode) {\n s.parentNode.removeChild(s);\n
}\n });\n },\n cacheStyles: function() {\n this.styles = thi
s.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n this.styles.forEach
(function(s) {\n if (s.parentNode) {\n s.parentNode.removeChild(
s);\n }\n });\n },\n /**\n * Takes external stylesheets lo
aded in an <element> element and moves\n * their content into a <style> elem
ent inside the <element>'s template.\n * The sheet is then removed from the
<element>. This is done only so \n * that if the element is loaded in the ma
in document, the sheet does\n * not become active.\n * Note, ignores she
ets with the attribute 'polymer-scope'.\n * @param elementElement The <eleme
nt> element to style.\n */\n installLocalSheets: function () {\n var
sheets = this.sheets.filter(function(s) {\n return !s.hasAttribute(SCOPE
_ATTR);\n });\n var content = this.templateContent();\n if (conte
nt) {\n var cssText = '';\n sheets.forEach(function(sheet) {\n
cssText += cssTextFromSheet(sheet) + '\\n';\n });\n if (cssT
ext) {\n var style = createStyleElement(cssText, this.ownerDocument);\n
content.insertBefore(style, content.firstChild);\n }\n }\n
},\n findNodes: function(selector, matcher) {\n var nodes = this.que
rySelectorAll(selector).array();\n var content = this.templateContent();\n
if (content) {\n var templateNodes = content.querySelectorAll(select
or).array();\n nodes = nodes.concat(templateNodes);\n }\n retur
n matcher ? nodes.filter(matcher) : nodes;\n },\n /**\n * Promotes ext
ernal stylesheets and <style> elements with the attribute \n * polymer-scope
='global' into global scope.\n * This is particularly useful for defining @k
eyframe rules which \n * currently do not function in scoped or shadow style
elements.\n * (See wkb.ug/72462)\n * @param elementElement The <element
> element to style.\n */\n // TODO(sorvell): remove when wkb.ug/72462 is a
ddressed.\n installGlobalStyles: function() {\n var style = this.styleFo
rScope(STYLE_GLOBAL_SCOPE);\n applyStyleToScope(style, document.head);\n
},\n cssTextForScope: function(scopeDescriptor) {\n var cssText = '';\n
// handle stylesheets\n var selector = '[' + SCOPE_ATTR + '=' + scope
Descriptor + ']';\n var matcher = function(s) {\n return matchesSele
ctor(s, selector);\n };\n var sheets = this.sheets.filter(matcher);\n
sheets.forEach(function(sheet) {\n cssText += cssTextFromSheet(sheet
) + '\\n\\n';\n });\n // handle cached style elements\n var style
s = this.styles.filter(matcher);\n styles.forEach(function(style) {\n
cssText += style.textContent + '\\n\\n';\n });\n return cssText;\n
},\n styleForScope: function(scopeDescriptor) {\n var cssText = this.c
ssTextForScope(scopeDescriptor);\n return this.cssTextToScopeStyle(cssText,
scopeDescriptor);\n },\n cssTextToScopeStyle: function(cssText, scopeDesc
riptor) {\n if (cssText) {\n var style = createStyleElement(cssText)
;\n style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') +
\n '-' + scopeDescriptor);\n return style;\n }\n }\n
};\n\n function importRuleForSheet(sheet, baseUrl) {\n var href = new URL(sh
eet.getAttribute('href'), baseUrl).href;\n return '@import \\'' + href + '\\'
;';\n }\n\n function applyStyleToScope(style, scope) {\n if (style) {\n
if (scope === document) {\n scope = document.head;\n }\n if (
window.ShadowDOMPolyfill) {\n scope = document.head;\n }\n // T
ODO(sorvell): necessary for IE\n // see https://connect.microsoft.com/IE/fe
edback/details/790212/\n // cloning-a-style-element-and-adding-to-document-
produces\n // -unexpected-result#details\n // var clone = style.cloneN
ode(true);\n var clone = createStyleElement(style.textContent);\n var
attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n if (attr) {\n cl
one.setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n }\n // TODO(sorvell):
probably too brittle; try to figure out \n // where to put the element.\n
var refNode = scope.firstElementChild;\n if (scope === document.head)
{\n var selector = 'style[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s
$ = document.head.querySelectorAll(selector);\n if (s$.length) {\n
refNode = s$[s$.length-1].nextElementSibling;\n }\n }\n scop
e.insertBefore(clone, refNode);\n }\n }\n\n function createStyleElement(css
Text, scope) {\n scope = scope || document;\n scope = scope.createElement
? scope : scope.ownerDocument;\n var style = scope.createElement('style');\n
style.textContent = cssText;\n return style;\n }\n\n function cssTextFro
mSheet(sheet) {\n return (sheet && sheet.__resource) || '';\n }\n\n functio
n matchesSelector(node, inSelector) {\n if (matches) {\n return matches.
call(node, inSelector);\n }\n }\n var p = HTMLElement.prototype;\n var mat
ches = p.matches || p.matchesSelector || p.webkitMatchesSelector \n || p.mo
zMatchesSelector;\n \n // exports\n\n scope.api.declaration.styles = styles;\
n scope.applyStyleToScope = applyStyleToScope;\n \n})(Polymer);\n","/*\n * Cop
yright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code
may only be used under the BSD style license found at http://polymer.github.io/L
ICENSE.txt\n * The complete set of authors may be found at http://polymer.github
.io/AUTHORS.txt\n * The complete set of contributors may be found at http://poly
mer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the pol
ymer project is also\n * subject to an additional IP rights grant found at http:
//polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n
var log = window.logFlags || {};\n var api = scope.api.instance.events;\n var
EVENT_PREFIX = api.EVENT_PREFIX;\n // polymer-element declarative api: events f
eature\n\n var mixedCaseEventTypes = {};\n [\n 'webkitAnimationStart',\n
'webkitAnimationEnd',\n 'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOM
FocusIn',\n 'DOMMouseScroll'\n ].forEach(function(e) {\n mixedCaseEventTy
pes[e.toLowerCase()] = e;\n });\n\n var events = {\n parseHostEvents: funct
ion() {\n // our delegates map\n var delegates = this.prototype.eventD
elegates;\n // extract data from attributes into delegates\n this.addA
ttributeDelegates(delegates);\n },\n addAttributeDelegates: function(deleg
ates) {\n // for each attribute\n for (var i=0, a; a=this.attributes[i
]; i++) {\n // does it have magic marker identifying it as an event deleg
ate?\n if (this.hasEventPrefix(a.name)) {\n // if so, add the in
fo to delegates\n delegates[this.removeEventPrefix(a.name)] = a.value.r
eplace('{{', '')\n .replace('}}', '').trim();\n }\n }\n
},\n // starts with 'on-'\n hasEventPrefix: function (n) {\n retu
rn n && (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n },\n removeE
ventPrefix: function(n) {\n return n.slice(prefixLength);\n },\n find
Controller: function(node) {\n while (node.parentNode) {\n if (node.
eventController) {\n return node.eventController;\n }\n n
ode = node.parentNode;\n }\n return node.host;\n },\n getEventHa
ndler: function(controller, target, method) {\n var events = this;\n r
eturn function(e) {\n if (!controller || !controller.PolymerBase) {\n
controller = events.findController(target);\n }\n\n var args
= [e, e.detail, e.currentTarget];\n controller.dispatchMethod(controller
, method, args);\n };\n },\n prepareEventBinding: function(pathString
, name, node) {\n if (!this.hasEventPrefix(name))\n return;\n\n
var eventType = this.removeEventPrefix(name);\n eventType = mixedCaseEvent
Types[eventType] || eventType;\n\n var events = this;\n\n return funct
ion(model, node, oneTime) {\n var handler = events.getEventHandler(undefi
ned, node, pathString);\n node.addEventListener(eventType, handler);\n\n
if (oneTime)\n return;\n\n // TODO(rafaelw): This is real
ly pointless work. Aside from the cost\n // of these allocations, NodeBin
d is going to setAttribute back to its\n // current value. Fixing this wo
uld mean changing the TemplateBinding\n // binding delegate API.\n
function bindingValue() {\n return '{{ ' + pathString + ' }}';\n
}\n\n return {\n open: bindingValue,\n discardChanges
: bindingValue,\n close: function() {\n node.removeEventList
ener(eventType, handler);\n }\n };\n };\n }\n };\n\n v
ar prefixLength = EVENT_PREFIX.length;\n\n // exports\n scope.api.declaration.
events = events;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Proje
ct Authors. All rights reserved.\n * This code may only be used under the BSD st
yle license found at http://polymer.github.io/LICENSE.txt\n * The complete set o
f authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\n\n(function(scope) {\n\n // element api\n\n var properties = {\n infer
Observers: function(prototype) {\n // called before prototype.observe is ch
ained to inherited object\n var observe = prototype.observe, property;\n
for (var n in prototype) {\n if (n.slice(-7) === 'Changed') {\n
if (!observe) {\n observe = (prototype.observe = {});\n
}\n property = n.slice(0, -7)\n observe[property] = observe[pr
operty] || n;\n }\n }\n },\n explodeObservers: function(protot
ype) {\n // called before prototype.observe is chained to inherited object\
n var o = prototype.observe;\n if (o) {\n var exploded = {};\n
for (var n in o) {\n var names = n.split(' ');\n for (v
ar i=0, ni; ni=names[i]; i++) {\n exploded[ni] = o[n];\n }\n
}\n prototype.observe = exploded;\n }\n },\n optimizeP
ropertyMaps: function(prototype) {\n if (prototype.observe) {\n // c
onstruct name list\n var a = prototype._observeNames = [];\n for (
var n in prototype.observe) {\n var names = n.split(' ');\n fo
r (var i=0, ni; ni=names[i]; i++) {\n a.push(ni);\n }\n
}\n }\n if (prototype.publish) {\n // construct name list\n
var a = prototype._publishNames = [];\n for (var n in prototype.pu
blish) {\n a.push(n);\n }\n }\n if (prototype.computed
) {\n // construct name list\n var a = prototype._computedNames =
[];\n for (var n in prototype.computed) {\n a.push(n);\n
}\n }\n },\n publishProperties: function(prototype, base) {\n //
if we have any properties to publish\n var publish = prototype.publish;\n
if (publish) {\n // transcribe `publish` entries onto own prototype\
n this.requireProperties(publish, prototype, base);\n // construct
map of lower-cased property names\n prototype._publishLC = this.lowerCas
eMap(publish);\n }\n },\n // sync prototype to property descriptors;\
n // desriptor format contains default value and optionally a\n // hint fo
r reflecting the property to an attribute.\n // e.g. {foo: 5, bar: {value: tr
ue, reflect: true}}\n // reflect: {foo: true} is also supported\n //\n
requireProperties: function(propertyDescriptors, prototype, base) {\n // re
flected properties\n prototype.reflect = prototype.reflect || {};\n //
ensure a prototype value for each property\n // and update the property's
reflect to attribute status\n for (var n in propertyDescriptors) {\n
var propertyDescriptor = propertyDescriptors[n];\n var reflects = this.r
eflectHintForDescriptor(propertyDescriptor);\n if (prototype.reflect[n] =
== undefined && reflects !== undefined) {\n prototype.reflect[n] = refl
ects;\n }\n if (prototype[n] === undefined) {\n prototype
[n] = this.valueForDescriptor(propertyDescriptor);\n }\n }\n },\n
valueForDescriptor: function(propertyDescriptor) {\n var value = typeof
propertyDescriptor === 'object' &&\n propertyDescriptor ? propertyDesc
riptor.value : propertyDescriptor;\n return value !== undefined ? value : n
ull;\n },\n // returns the value of the descriptor's 'reflect' property or
undefined\n reflectHintForDescriptor: function(propertyDescriptor) {\n
if (typeof propertyDescriptor === 'object' &&\n propertyDescriptor && p
ropertyDescriptor.reflect !== undefined) {\n return propertyDescriptor.re
flect;\n }\n },\n lowerCaseMap: function(properties) {\n var map
= {};\n for (var n in properties) {\n map[n.toLowerCase()] = n;\n
}\n return map;\n },\n createPropertyAccessor: function(name) {\n
var proto = this.prototype;\n\n var privateName = name + '_';\n
var privateObservable = name + 'Observable_';\n proto[privateName] = proto
[name];\n\n Object.defineProperty(proto, name, {\n get: function() {
\n var observable = this[privateObservable];\n if (observable)
\n observable.deliver();\n\n return this[privateName];\n
},\n set: function(value) {\n var observable = this[privateO
bservable];\n if (observable) {\n observable.setValue(value)
;\n return;\n }\n\n var oldValue = this[privateName
];\n this[privateName] = value;\n this.emitPropertyChangeRecor
d(name, value, oldValue);\n\n return value;\n },\n config
urable: true\n });\n },\n createPropertyAccessors: function(prototype
) {\n var n$ = prototype._publishNames;\n if (n$ && n$.length) {\n
for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++) {\n this
.createPropertyAccessor(n);\n }\n }\n\n var n$ = prototype._com
putedNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.length, n,
fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\n
}\n }\n\n }\n };\n\n // exports\n\n scope.api.declaration.propert
ies = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Proj
ect Authors. All rights reserved.\n * This code may only be used under the BSD s
tyle license found at http://polymer.github.io/LICENSE.txt\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete
set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n
* Code distributed by Google as part of the polymer project is also\n * subject
to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\
n */\n(function(scope) {\n\n // magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'at
tributes';\n var ATTRIBUTES_REGEX = /\\s|,/;\n\n // attributes api\n\n var at
tributes = {\n \n inheritAttributesObjects: function(prototype) {\n /
/ chain our lower-cased publish map to the inherited version\n this.inherit
Object(prototype, 'publishLC');\n // chain our instance attributes map to t
he inherited version\n this.inheritObject(prototype, '_instanceAttributes')
;\n },\n\n publishAttributes: function(prototype, base) {\n // merge
names from 'attributes' attribute\n var attributes = this.getAttribute(ATTR
IBUTES_ATTRIBUTE);\n if (attributes) {\n // get properties to publis
h\n var publish = prototype.publish || (prototype.publish = {});\n
// names='a b c' or names='a,b,c'\n var names = attributes.split(ATTRIBU
TES_REGEX);\n // record each name for publishing\n for (var i=0, l
=names.length, n; i<l; i++) {\n // remove excess ws\n n = name
s[i].trim();\n // if the user hasn't specified a value, we want to use
the\n // default, unless a superclass has already chosen one\n
if (n && publish[n] === undefined) {\n // TODO(sjmiles): querying na
tive properties on IE11 (and possibly\n // on other browsers) throws
an exception because there is no actual\n // instance.\n /
/ In fact, trying to publish native properties is known bad for this\n
// and other reasons, and we need to solve this problem writ large.\n
try {\n var hasValue = (base[n] !== undefined);\n } c
atch(x) {\n hasValue = false;\n }\n // supply
an empty 'descriptor' object and let the publishProperties\n // code
determine a default\n if (!hasValue) {\n publish[n] = P
olymer.nob;\n }\n }\n }\n }\n },\n\n // re
cord clonable attributes from <element>\n accumulateInstanceAttributes: funct
ion() {\n // inherit instance attributes\n var clonable = this.prototy
pe._instanceAttributes;\n // merge attributes from element\n var a$ =
this.attributes;\n for (var i=0, l=a$.length, a; (i<l) && (a=a$[i]); i++) {
\n if (this.isInstanceAttribute(a.name)) {\n clonable[a.name]
= a.value;\n }\n }\n },\n\n isInstanceAttribute: function(name
) {\n return !this.blackList[name] && name.slice(0,3) !== 'on-';\n },\n\
n // do not clone these attributes onto instances\n blackList: {\n na
me: 1,\n 'extends': 1,\n constructor: 1,\n noscript: 1,\n as
setpath: 1,\n 'cache-csstext': 1\n }\n \n };\n\n // add ATTRIBUTES_
ATTRIBUTE to the blacklist\n attributes.blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\
n // exports\n\n scope.api.declaration.attributes = attributes;\n\n})(Polymer)
;\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n
// imports\n var events = scope.api.declaration.events;\n\n var syntax = new P
olymerExpressions();\n var prepareBinding = syntax.prepareBinding;\n\n // Poly
mer takes a first crack at the binding to see if it's a declarative\n // event
handler.\n syntax.prepareBinding = function(pathString, name, node) {\n retu
rn events.prepareEventBinding(pathString, name, node) ||\n prepareBind
ing.call(syntax, pathString, name, node);\n };\n\n // declaration api supporti
ng mdv\n var mdv = {\n syntax: syntax,\n fetchTemplate: function() {\n
return this.querySelector('template');\n },\n templateContent: function
() {\n var template = this.fetchTemplate();\n return template && Platf
orm.templateContent(template);\n },\n installBindingDelegate: function(tem
plate) {\n if (template) {\n template.bindingDelegate = this.syntax;
\n }\n }\n };\n\n // exports\n scope.api.declaration.mdv = mdv;\n\n})
(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at h
ttp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found
at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors ma
y be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by
Google as part of the polymer project is also\n * subject to an additional IP ri
ghts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope
) {\n\n // imports\n \n var api = scope.api;\n var isBase = scope.isBase;\n
var extend = scope.extend;\n\n // prototype api\n\n var prototype = {\n\n
register: function(name, extendeeName) {\n // build prototype combining ext
endee, Polymer base, and named api\n this.buildPrototype(name, extendeeName
);\n // register our custom element with the platform\n this.registerP
rototype(name, extendeeName);\n // reference constructor in a global named
by 'constructor' attribute\n this.publishConstructor();\n },\n\n buil
dPrototype: function(name, extendeeName) {\n // get our custom prototype (b
efore chaining)\n var extension = scope.getRegisteredPrototype(name);\n
// get basal prototype\n var base = this.generateBasePrototype(extendeeNa
me);\n // implement declarative features\n this.desugarBeforeChaining(
extension, base);\n // join prototypes\n this.prototype = this.chainPr
ototypes(extension, base);\n // more declarative features\n this.desug
arAfterChaining(name, extendeeName);\n },\n\n desugarBeforeChaining: funct
ion(prototype, base) {\n // back reference declaration element\n // TO
DO(sjmiles): replace `element` with `elementElement` or `declaration`\n pro
totype.element = this;\n // transcribe `attributes` declarations onto own p
rototype's `publish`\n this.publishAttributes(prototype, base);\n // `
publish` properties to the prototype and to attribute watch\n this.publishP
roperties(prototype, base);\n // infer observers for `observe` list based o
n method names\n this.inferObservers(prototype);\n // desugar compound
observer syntax, e.g. 'a b c' \n this.explodeObservers(prototype);\n },
\n\n chainPrototypes: function(prototype, base) {\n // chain various met
a-data objects to inherited versions\n this.inheritMetaData(prototype, base
);\n // chain custom api to inherited\n var chained = this.chainObject
(prototype, base);\n // x-platform fixup\n ensurePrototypeTraversal(ch
ained);\n return chained;\n },\n\n inheritMetaData: function(prototyp
e, base) {\n // chain observe object to inherited\n this.inheritObject
('observe', prototype, base);\n // chain publish object to inherited\n
this.inheritObject('publish', prototype, base);\n // chain reflect object
to inherited\n this.inheritObject('reflect', prototype, base);\n // ch
ain our lower-cased publish map to the inherited version\n this.inheritObje
ct('_publishLC', prototype, base);\n // chain our instance attributes map t
o the inherited version\n this.inheritObject('_instanceAttributes', prototy
pe, base);\n // chain our event delegates map to the inherited version\n
this.inheritObject('eventDelegates', prototype, base);\n },\n\n // impl
ement various declarative features\n desugarAfterChaining: function(name, ext
endee) {\n // build side-chained lists to optimize iterations\n this.o
ptimizePropertyMaps(this.prototype);\n this.createPropertyAccessors(this.pr
ototype);\n // install mdv delegate on template\n this.installBindingD
elegate(this.fetchTemplate());\n // install external stylesheets as if they
are inline\n this.installSheets();\n // adjust any paths in dom from
imports\n this.resolveElementPaths(this);\n // compile list of attribu
tes to copy to instances\n this.accumulateInstanceAttributes();\n // p
arse on-* delegates declared on `this` element\n this.parseHostEvents();\n
//\n // install a helper method this.resolvePath to aid in \n //
setting resource urls. e.g.\n // this.$.image.src = this.resolvePath('image
s/foo.png')\n this.addResolvePathApi();\n // under ShadowDOMPolyfill,
transforms to approximate missing CSS features\n if (window.ShadowDOMPolyfi
ll) {\n Platform.ShadowCSS.shimStyling(this.templateContent(), name, exte
ndee);\n }\n // allow custom element access to the declarative context
\n if (this.prototype.registerCallback) {\n this.prototype.registerC
allback(this);\n }\n },\n\n // if a named constructor is requested in
element, map a reference\n // to the constructor to the given symbol\n pu
blishConstructor: function() {\n var symbol = this.getAttribute('constructo
r');\n if (symbol) {\n window[symbol] = this.ctor;\n }\n },\
n\n // build prototype combining extendee, Polymer base, and named api\n g
enerateBasePrototype: function(extnds) {\n var prototype = this.findBasePro
totype(extnds);\n if (!prototype) {\n // create a prototype based on
tag-name extension\n var prototype = HTMLElement.getPrototypeForTag(extn
ds);\n // insert base api in inheritance chain (if needed)\n proto
type = this.ensureBaseApi(prototype);\n // memoize this base\n mem
oizedBases[extnds] = prototype;\n }\n return prototype;\n },\n\n
findBasePrototype: function(name) {\n return memoizedBases[name];\n },\
n\n // install Polymer instance api into prototype chain, as needed \n ens
ureBaseApi: function(prototype) {\n if (prototype.PolymerBase) {\n r
eturn prototype;\n }\n var extended = Object.create(prototype);\n
// we need a unique copy of base api for each base prototype\n // therefor
e we 'extend' here instead of simply chaining\n api.publish(api.instance, e
xtended);\n // TODO(sjmiles): sharing methods across prototype chains is\n
// not supported by 'super' implementation which optimizes\n // by mem
oizing prototype relationships.\n // Probably we should have a version of '
extend' that is \n // share-aware: it could study the text of each function
,\n // look for usage of 'super', and wrap those functions in\n // clo
sures.\n // As of now, there is only one problematic method, so \n //
we just patch it manually.\n // To avoid re-entrancy problems, the special
super method\n // installed is called `mixinSuper` and the mixin method\n
// must use this method instead of the default `super`.\n this.mixinMet
hod(extended, prototype, api.instance.mdv, 'bind');\n // return buffed-up p
rototype\n return extended;\n },\n\n mixinMethod: function(extended,
prototype, api, name) {\n var $super = function(args) {\n return pro
totype[name].apply(this, args);\n };\n extended[name] = function() {\n
this.mixinSuper = $super;\n return api[name].apply(this, argument
s);\n }\n },\n\n // ensure prototype[name] inherits from a prototype.
prototype[name]\n inheritObject: function(name, prototype, base) {\n //
require an object\n var source = prototype[name] || {};\n // chain inh
erited properties onto a new object\n prototype[name] = this.chainObject(so
urce, base[name]);\n },\n\n // register 'prototype' to custom element 'nam
e', store constructor \n registerPrototype: function(name, extendee) { \n
var info = {\n prototype: this.prototype\n }\n // native elem
ent must be specified in extends\n var typeExtension = this.findTypeExtensi
on(extendee);\n if (typeExtension) {\n info.extends = typeExtension;
\n }\n // register the prototype with HTMLElement for name lookup\n
HTMLElement.register(name, this.prototype);\n // register the custom typ
e\n this.ctor = document.registerElement(name, info);\n },\n\n findTy
peExtension: function(name) {\n if (name && name.indexOf('-') < 0) {\n
return name;\n } else {\n var p = this.findBasePrototype(name);\n
if (p.element) {\n return this.findTypeExtension(p.element.exte
nds);\n }\n }\n }\n\n };\n\n // memoize base prototypes\n var
memoizedBases = {};\n\n // implementation of 'chainObject' depends on support f
or __proto__\n if (Object.__proto__) {\n prototype.chainObject = function(ob
ject, inherited) {\n if (object && inherited && object !== inherited) {\n
object.__proto__ = inherited;\n }\n return object;\n }\n } e
lse {\n prototype.chainObject = function(object, inherited) {\n if (obje
ct && inherited && object !== inherited) {\n var chained = Object.create(
inherited);\n object = extend(chained, object);\n }\n return ob
ject;\n }\n }\n\n // On platforms that do not support __proto__ (versions o
f IE), the prototype\n // chain of a custom element is simulated via installati
on of __proto__.\n // Although custom elements manages this, we install it here
so it's\n // available during desugaring.\n function ensurePrototypeTraversal
(prototype) {\n if (!Object.__proto__) {\n var ancestor = Object.getProt
otypeOf(prototype);\n prototype.__proto__ = ancestor;\n if (isBase(anc
estor)) {\n ancestor.__proto__ = Object.getPrototypeOf(ancestor);\n
}\n }\n }\n\n // exports\n\n api.declaration.prototype = prototype;\n\n})(
Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at ht
tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found
at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may
be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G
oogle as part of the polymer project is also\n * subject to an additional IP rig
hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope)
{\n\n /*\n\n Elements are added to a registration queue so that they regist
er in \n the proper order at the appropriate time. We do this for a few reaso
ns:\n\n * to enable elements to load resources (like stylesheets) \n async
hronously. We need to do this until the platform provides an efficient\n alte
rnative. One issue is that remote @import stylesheets are \n re-fetched whene
ver stamped into a shadowRoot.\n\n * to ensure elements loaded 'at the same t
ime' (e.g. via some set of\n imports) are registered as a batch. This allows
elements to be enured from\n upgrade ordering as long as they query the dom t
ree 1 task after\n upgrade (aka domReady). This is a performance tradeoff. On
the one hand,\n elements that could register while imports are loading are p
revented from \n doing so. On the other, grouping upgrades into a single task
means less\n incremental work (for example style recalcs), Also, we can ens
ure the \n document is in a known state at the single quantum of time when \n
elements upgrade.\n\n */\n var queue = {\n // tell the queue to wait fo
r an element to be ready\n wait: function(element, check, go) {\n var sh
ouldAdd = (this.indexOf(element) === -1 && \n flushQueue.indexOf(elemen
t) === -1);\n if (shouldAdd) {\n this.add(element);\n element
.__check = check;\n element.__go = go;\n }\n return (this.index
Of(element) !== 0);\n },\n add: function(element) {\n //console.log('
queueing', element.name);\n queueForElement(element).push(element);\n },
\n indexOf: function(element) {\n var i = queueForElement(element).index
Of(element);\n if (i >= 0 && document.contains(element)) {\n i += (H
TMLImports.useNative || HTMLImports.ready) ? \n importQueue.length : 1e
9;\n }\n return i; \n },\n // tell the queue an element is read
y to be registered\n go: function(element) {\n var readied = this.remove
(element);\n if (readied) {\n this.addToFlushQueue(readied);\n
this.check();\n }\n },\n remove: function(element) {\n var i =
this.indexOf(element);\n if (i !== 0) {\n //console.warn('queue ord
er wrong', i);\n return;\n }\n return queueForElement(element).
shift();\n },\n check: function() {\n // next\n var element = th
is.nextElement();\n if (element) {\n element.__check.call(element);\
n }\n if (this.canReady()) {\n this.ready();\n return tr
ue;\n }\n },\n nextElement: function() {\n return nextQueued();\
n },\n canReady: function() {\n return !this.waitToReady && this.isEm
pty();\n },\n isEmpty: function() {\n return !importQueue.length && !
mainQueue.length;\n },\n addToFlushQueue: function(element) {\n flush
Queue.push(element); \n },\n flush: function() {\n var element;\n
while (flushQueue.length) {\n element = flushQueue.shift();\n e
lement.__go.call(element);\n element.__check = element.__go = null;\n
}\n },\n ready: function() {\n this.flush();\n // TODO(sorvell
): As an optimization, turn off CE polyfill upgrading\n // while registerin
g. This way we avoid having to upgrade each document\n // piecemeal per reg
istration and can instead register all elements\n // and upgrade once in a
batch. Without this optimization, upgrade time\n // degrades significantly
when SD polyfill is used. This is mainly because\n // querying the document
tree for elements is slow under the SD polyfill.\n if (CustomElements.read
y === false) {\n CustomElements.upgradeDocumentTree(document);\n C
ustomElements.ready = true;\n }\n Platform.flush();\n requestAnim
ationFrame(this.flushReadyCallbacks);\n },\n addReadyCallback: function(ca
llback) {\n if (callback) {\n readyCallbacks.push(callback);\n
}\n },\n flushReadyCallbacks: function() {\n if (readyCallbacks) {\n
var fn;\n while (readyCallbacks.length) {\n fn = readyCal
lbacks.shift();\n fn();\n }\n }\n },\n waitToReady: t
rue\n };\n\n var flushQueue = [];\n\n var importQueue = [];\n var mainQueue
= [];\n var readyCallbacks = [];\n\n function queueForElement(element) {\n
return document.contains(element) ? mainQueue : importQueue;\n }\n\n function
nextQueued() {\n return importQueue.length ? importQueue[0] : mainQueue[0];\n
}\n\n var polymerReadied = false; \n\n document.addEventListener('WebCompone
ntsReady', function() {\n CustomElements.ready = false;\n });\n \n functio
n whenPolymerReady(callback) {\n queue.waitToReady = true;\n CustomElement
s.ready = false;\n HTMLImports.whenImportsReady(function() {\n queue.add
ReadyCallback(callback);\n queue.waitToReady = false;\n queue.check();
\n });\n }\n\n // exports\n scope.queue = queue;\n scope.whenPolymerReady
= whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Pro
ject Authors. All rights reserved.\n * This code may only be used under the BSD
style license found at http://polymer.github.io/LICENSE.txt\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complet
e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\
n * Code distributed by Google as part of the polymer project is also\n * subjec
t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
\n */\n\n(function(scope) {\n\n var whenPolymerReady = scope.whenPolymerReady;\
n\n function importElements(elementOrFragment, callback) {\n if (elementOrFr
agment) {\n document.head.appendChild(elementOrFragment);\n whenPolyme
rReady(callback);\n } else if (callback) {\n callback();\n }\n }\n\n
function importUrls(urls, callback) {\n if (urls && urls.length) {\n
var frag = document.createDocumentFragment();\n for (var i=0, l=urls.len
gth, url, link; (i<l) && (url=urls[i]); i++) {\n link = document.create
Element('link');\n link.rel = 'import';\n link.href = url;\n
frag.appendChild(link);\n }\n importElements(frag, callbac
k);\n } else if (callback) {\n callback();\n }\n }\n\n // exports\n
scope.import = importUrls;\n scope.importElements = importElements;\n\n})(Pol
ymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights res
erved.\n * This code may only be used under the BSD style license found at http:
//polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at
http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Goog
le as part of the polymer project is also\n * subject to an additional IP rights
grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\
n\n // imports\n\n var extend = scope.extend;\n var api = scope.api;\n var q
ueue = scope.queue;\n var whenPolymerReady = scope.whenPolymerReady;\n var get
RegisteredPrototype = scope.getRegisteredPrototype;\n var waitingForPrototype =
scope.waitingForPrototype;\n\n // declarative implementation: <polymer-element
>\n\n var prototype = extend(Object.create(HTMLElement.prototype), {\n\n cre
atedCallback: function() {\n if (this.getAttribute('name')) {\n this
.init();\n }\n },\n\n init: function() {\n // fetch declared val
ues\n this.name = this.getAttribute('name');\n this.extends = this.get
Attribute('extends');\n // initiate any async resource fetches\n this.
loadResources();\n // register when all constraints are met\n this.reg
isterWhenReady();\n },\n\n registerWhenReady: function() {\n if (this.
registered\n || this.waitingForPrototype(this.name)\n || this.waitin
gForQueue()\n || this.waitingForResources()) {\n return;\n }
\n // TODO(sorvell): ends up calling '_register' by virtue\n // of `wa
itingForQueue` (see below)\n queue.go(this);\n },\n\n // TODO(sorvell
): refactor, this method is private-ish, but it's being\n // called by the qu
eue object.\n _register: function() {\n //console.log('registering', thi
s.name);\n //console.group('registering', this.name);\n // warn if ext
ending from a custom element not registered via Polymer\n if (isCustomTag(t
his.extends) && !isRegistered(this.extends)) {\n console.warn('%s is atte
mpting to extend %s, an unregistered element ' +\n 'or one that was n
ot registered with Polymer.', this.name,\n this.extends);\n }\n
this.register(this.name, this.extends);\n this.registered = true;\n
//console.groupEnd();\n },\n\n waitingForPrototype: function(name) {\n
if (!getRegisteredPrototype(name)) {\n // then wait for a prototype\
n waitingForPrototype(name, this);\n // emulate script if user is
not supplying one\n this.handleNoScript(name);\n // prototype not
ready yet\n return true;\n }\n },\n\n handleNoScript: function
(name) {\n // if explicitly marked as 'noscript'\n if (this.hasAttribu
te('noscript') && !this.noscript) {\n this.noscript = true;\n // T
ODO(sorvell): CustomElements polyfill awareness:\n // noscript elements s
hould upgrade in logical order\n // script injection ensures this under n
ative custom elements;\n // under imports + ce polyfills, scripts run bef
ore upgrades.\n // dependencies should be ready at upgrade time so regist
er\n // prototype at this time.\n if (window.CustomElements && !Cu
stomElements.useNative) {\n Polymer(name);\n } else {\n
var script = document.createElement('script');\n script.textContent =
'Polymer(\\'' + name + '\\');';\n this.appendChild(script);\n }\
n }\n },\n\n waitingForResources: function() {\n return this._ne
edsResources;\n },\n\n // NOTE: Elements must be queued in proper order fo
r inheritance/composition\n // dependency resolution. Previously this was enf
orced for inheritance,\n // and by rule for composition. It's now entirely by
rule.\n waitingForQueue: function() {\n return queue.wait(this, this.re
gisterWhenReady, this._register);\n },\n\n loadResources: function() {\n
this._needsResources = true;\n this.loadStyles(function() {\n th
is._needsResources = false;\n this.registerWhenReady();\n }.bind(thi
s));\n }\n\n });\n\n // semi-pluggable APIs \n\n // TODO(sjmiles): should
be fully pluggable (aka decoupled, currently\n // the various plugins are allow
ed to depend on each other directly)\n api.publish(api.declaration, prototype);
\n\n // utility and bookkeeping\n\n function isRegistered(name) {\n return
Boolean(HTMLElement.getPrototypeForTag(name));\n }\n\n function isCustomTag(na
me) {\n return (name && name.indexOf('-') >= 0);\n }\n\n // boot tasks\n\n
whenPolymerReady(function() {\n document.body.removeAttribute('unresolved');
\n document.dispatchEvent(\n new CustomEvent('polymer-ready', {bubbles:
true})\n );\n });\n\n // register polymer-element with document\n\n docume
nt.registerElement('polymer-element', {prototype: prototype});\n\n})(Polymer);\n
","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polyme
r.github.io/LICENSE.txt\n * The complete set of authors may be found at http://p
olymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found a
t http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as pa
rt of the polymer project is also\n * subject to an additional IP rights grant f
ound at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The `auto-binding`
element extends the template element. It provides a quick \n * and easy way to d
o data binding without the need to setup a model. \n * The `auto-binding` elemen
t itself serves as the model and controller for the \n * elements it contains. B
oth data and event handlers can be bound. \n *\n * The `auto-binding` element ac
ts just like a template that is bound to \n * a model. It stamps its content in
the dom adjacent to itself. When the \n * content is stamped, the `template-boun
d` event is fired.\n *\n * Example:\n *\n * <template is=\"auto-binding\">\n
* <div>Say something: <input value=\"{{value}}\"></div>\n * <div>Yo
u said: {{value}}</div>\n * <button on-tap=\"{{buttonTap}}\">Tap me!</butt
on>\n * </template>\n * <script>\n * var template = document.query
Selector('template');\n * template.value = 'something';\n * template
.buttonTap = function() {\n * console.log('tap!');\n * };\n *
</script>\n *\n * @module Polymer\n * @status stable\n*/\n\n(function() {\n\n v
ar element = document.createElement('polymer-element');\n element.setAttribute(
'name', 'auto-binding');\n element.setAttribute('extends', 'template');\n elem
ent.init();\n\n Polymer('auto-binding', {\n\n createdCallback: function() {\
n this.syntax = this.bindingDelegate = this.makeSyntax();\n // delay s
tamping until polymer-ready so that auto-binding is not\n // required to lo
ad last.\n Polymer.whenPolymerReady(function() {\n this.model = this
;\n this.setAttribute('bind', '');\n // we don't bother with an ex
plicit signal here, we could ust a MO\n // if necessary\n this.asy
nc(function() {\n // note: this will marshall *all* the elements in the
parentNode\n // rather than just stamped ones. We'd need to use create
Instance\n // to fix this or something else fancier.\n this.ma
rshalNodeReferences(this.parentNode);\n // template stamping is asynchr
onous so stamping isn't complete\n // by polymer-ready; fire an event s
o users can use stamped elements\n this.fire('template-bound');\n
});\n }.bind(this));\n },\n\n makeSyntax: function() {\n var e
vents = Object.create(Polymer.api.declaration.events);\n var self = this;\n
events.findController = function() { return self.model; };\n\n var sy
ntax = new PolymerExpressions();\n var prepareBinding = syntax.prepareBindi
ng; \n syntax.prepareBinding = function(pathString, name, node) {\n
return events.prepareEventBinding(pathString, name, node) ||\n pr
epareBinding.call(syntax, pathString, name, node);\n };\n return synta
x;\n }\n\n });\n\n})();\n"]} | 1 {"version":3,"file":"polymer.js","sources":["../polymer-gestures/src/scope.js","
../polymer-gestures/src/targetfind.js","../polymer-gestures/src/touch-action.js"
,"../polymer-gestures/src/eventFactory.js","../polymer-gestures/src/pointermap.j
s","../polymer-gestures/src/dispatcher.js","../polymer-gestures/src/installer.js
","../polymer-gestures/src/mouse.js","../polymer-gestures/src/touch.js","../poly
mer-gestures/src/ms.js","../polymer-gestures/src/pointer.js","../polymer-gesture
s/src/platform-events.js","../polymer-gestures/src/track.js","../polymer-gesture
s/src/hold.js","../polymer-gestures/src/tap.js","../polymer-expressions/third_pa
rty/esprima/esprima.js","../polymer-expressions/src/polymer-expressions.js","src
/boot.js","src/lib/lang.js","src/lib/job.js","src/lib/dom.js","src/lib/super.js"
,"src/lib/deserialize.js","src/api.js","src/instance/utils.js","src/instance/eve
nts.js","src/instance/attributes.js","src/instance/properties.js","src/instance/
mdv.js","src/instance/base.js","src/instance/styles.js","src/declaration/polymer
.js","src/declaration/path.js","src/declaration/styles.js","src/declaration/even
ts.js","src/declaration/properties.js","src/declaration/attributes.js","src/decl
aration/mdv.js","src/declaration/prototype.js","src/declaration/queue.js","src/d
eclaration/import.js","src/declaration/polymer-element.js","src/lib/auto-binding
.js"],"names":[],"mappings":"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
A","sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Projec
t Authors. All rights reserved.\n * This code may only be used under the BSD sty
le license found at http://polymer.github.io/LICENSE.txt\n * The complete set of
authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete s
et of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n *
Code distributed by Google as part of the polymer project is also\n * subject t
o an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\nwindow.PolymerGestures = {\n hasSDPolyfill: Boolean(window.ShadowDOMPolyfil
l)\n};\nPolymerGestures.wrap = PolymerGestures.hasSDPolyfill ? ShadowDOMPolyfill
.wrapIfNeeded : function(a){ return a; };\n","/*\n * Copyright (c) 2014 The Poly
mer Project Authors. All rights reserved.\n * This code may only be used under t
he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl
ete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The
complete set of contributors may be found at http://polymer.github.io/CONTRIBUTO
RS.txt\n * Code distributed by Google as part of the polymer project is also\n *
subject to an additional IP rights grant found at http://polymer.github.io/PATE
NTS.txt\n */\n\n(function(scope) {\n var HAS_FULL_PATH = false;\n\n // test fo
r full event path support\n var pathTest = document.createElement('meta');\n i
f (!scope.hasSDPolyfill && pathTest.createShadowRoot) {\n var sr = pathTest.c
reateShadowRoot();\n var s = document.createElement('span');\n sr.appendCh
ild(s);\n pathTest.addEventListener('testpath', function(ev) {\n if (ev.
path) {\n // if the span is in the event path, then path[0] is the real s
ource for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n
ev.stopPropagation();\n });\n var ev = new CustomEvent('testpath', {bubble
s: true});\n // must add node to DOM to trigger event listener\n document.
head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest.parentNode.r
emoveChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\n\n var targ
et = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.sha
dowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shad
ow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n tar
getingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this
.canTarget(s)) {\n return s;\n }\n },\n olderShadow: function(
shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) {\n var
se = shadow.querySelector('shadow');\n if (se) {\n os = se.olde
rShadowRoot;\n }\n }\n return os;\n },\n allShadows: func
tion(element) {\n var shadows = [], s = this.shadow(element);\n while(
s) {\n shadows.push(s);\n s = this.olderShadow(s);\n }\n
return shadows;\n },\n searchRoot: function(inRoot, x, y) {\n var t,
st, sr, os;\n if (inRoot) {\n t = inRoot.elementFromPoint(x, y);\n
if (t) {\n // found element, check if it has a ShadowRoot\n
sr = this.targetingShadow(t);\n } else if (inRoot !== document) {\n
// check for sibling roots\n sr = this.olderShadow(inRoot);\n
}\n // search other roots, fall back to light dom element\n
return this.searchRoot(sr, x, y) || t;\n }\n },\n owner: function(el
ement) {\n if (!element) {\n return document;\n }\n var s
= element;\n // walk up until you hit the shadow root or document\n wh
ile (s.parentNode) {\n s = s.parentNode;\n }\n // the owner ele
ment is expected to be a Document or ShadowRoot\n if (s.nodeType != Node.DO
CUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = documen
t;\n }\n return s;\n },\n findTarget: function(inEvent) {\n
if (HAS_FULL_PATH && inEvent.path) {\n return inEvent.path[0];\n }\
n var x = inEvent.clientX, y = inEvent.clientY;\n // if the listener i
s in the shadow root, it is much faster to start there\n var s = this.owner
(inEvent.target);\n // if x, y is not in this root, fall back to document s
earch\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n
return this.searchRoot(s, x, y);\n },\n findScrollAxis: function(inEv
ent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path) {\n var pa
th = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n
= path[i];\n if (n._scrollType) {\n return n._scrollType;\n
}\n }\n } else {\n n = scope.wrap(inEvent.currentTa
rget);\n while(n) {\n if (n._scrollType) {\n return n
._scrollType;\n }\n n = n.parentNode || n.host;\n }\n
}\n },\n LCA: function(a, b) {\n if (a === b) {\n return a
;\n }\n if (a && !b) {\n return a;\n }\n if (b && !a)
{\n return b;\n }\n if (!b && !a) {\n return document;\
n }\n // fast case, a is a direct descendant of b or vice versa\n
if (a.contains && a.contains(b)) {\n return a;\n }\n if (b.con
tains && b.contains(a)) {\n return b;\n }\n var adepth = this.d
epth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n
if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = this
.walk(b, -d);\n }\n while (a && b && a !== b) {\n a = a.parentN
ode || a.host;\n b = b.parentNode || b.host;\n }\n return a;\n
},\n walk: function(n, u) {\n for (var i = 0; n && (i < u); i++) {\n
n = n.parentNode || n.host;\n }\n return n;\n },\n depth:
function(n) {\n var d = 0;\n while(n) {\n d++;\n n = n.
parentNode || n.host;\n }\n return d;\n },\n deepContains: funct
ion(a, b) {\n var common = this.LCA(a, b);\n // if a is the common anc
estor, it must \"deeply\" contain b\n return common === a;\n },\n ins
ideNode: function(node, x, y) {\n var rect = node.getBoundingClientRect();\
n return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <=
rect.bottom);\n }\n };\n scope.targetFinding = target;\n /**\n * Given a
n event, finds the \"deepest\" node that could have been the original target bef
ore ShadowDOM retargetting\n *\n * @param {Event} Event An event object with
clientX and clientY properties\n * @return {Element} The probable event orign
inator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n *
Determines if the \"container\" node deeply contains the \"containee\" node, in
cluding situations where the \"containee\" is contained by one or more ShadowDOM
\n * roots.\n *\n * @param {Node} container\n * @param {Node} containee\
n * @return {Boolean}\n */\n scope.deepContains = target.deepContains.bind(
target);\n\n /**\n * Determines if the x/y position is inside the given node.
\n *\n * Example:\n *\n * function upHandler(event) {\n * va
r innode = PolymerGestures.insideNode(event.target, event.clientX, event.clientY
);\n * if (innode) {\n * // wait for tap?\n * } else {
\n * // tap will never happen\n * }\n * }\n *\n * @p
aram {Node} node\n * @param {Number} x Screen X position\n * @param {Number}
y screen Y position\n * @return {Boolean}\n */\n scope.insideNode = target
.insideNode;\n\n})(window.PolymerGestures);\n","/*\n *\n * Copyright (c) 2014 Th
e Polymer Project Authors. All rights reserved.\n * This code may only be used u
nder the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The
complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n
* The complete set of contributors may be found at http://polymer.github.io/CONT
RIBUTORS.txt\n * Code distributed by Google as part of the polymer project is al
so\n * subject to an additional IP rights grant found at http://polymer.github.i
o/PATENTS.txt\n */\n\n(function() {\n function shadowSelector(v) {\n return
'body /deep/ ' + selector(v);\n }\n function selector(v) {\n return '[touch
-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-act
ion: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'non
e',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n rule: 'pan-x pan-y',\
n selectors: [\n 'pan-x pan-y',\n 'pan-y pan-x'\n ]\n
},\n 'manipulation'\n ];\n var styles = '';\n // only install stylesheet
if the browser has touch action support\n var head = document.head;\n var hasT
ouchAction = typeof document.head.style.touchAction === 'string';\n // only add
shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.Shado
wDOMPolyfill && document.head.createShadowRoot;\n\n if (hasTouchAction) {\n
attrib2css.forEach(function(r) {\n if (String(r) === r) {\n styles +
= selector(r) + rule(r) + '\\n';\n if (hasShadowRoot) {\n styles
+= shadowSelector(r) + rule(r) + '\\n';\n }\n } else {\n sty
les += r.selectors.map(selector) + rule(r.rule) + '\\n';\n if (hasShadowR
oot) {\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\
n';\n }\n }\n });\n\n var el = document.createElement('style')
;\n el.textContent = styles;\n document.head.appendChild(el);\n }\n})();\
n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\
n * This code may only be used under the BSD style license found at http://polym
er.github.io/LICENSE.txt\n * The complete set of authors may be found at http://
polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as p
art of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This is the constr
uctor for new PointerEvents.\n *\n * New Pointer Events must be given a type, an
d an optional dictionary of\n * initialization properties.\n *\n * Due to certai
n platform requirements, events returned from the constructor\n * identify as Mo
useEvents.\n *\n * @constructor\n * @param {String} inType The type of the event
to create.\n * @param {Object} [inDict] An optional dictionary of initial event
properties.\n * @return {Event} A new PointerEvent of type `inType` and initial
ized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PROP
S = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'scree
nX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKe
y',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n '
pageX',\n 'pageY'\n ];\n\n var MOUSE_DEFAULTS = [\n false,\n false,\n
null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n
false,\n false,\n 0,\n null,\n 0,\n 0\n ];\n\n var NOP_FACTOR
Y = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO(d
freedm): this is overridden by tap recognizer, needs review\n preventTap: NOP
_FACTORY,\n makeBaseEvent: function(inType, inDict) {\n var e = document
.createEvent('Event');\n e.initEvent(inType, inDict.bubbles || false, inDic
t.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n
return e;\n },\n makeGestureEvent: function(inType, inDict) {\n inDi
ct = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType,
inDict);\n for (var i = 0, keys = Object.keys(inDict), k; i < keys.length;
i++) {\n k = keys[i];\n e[k] = inDict[k];\n }\n return e
;\n },\n makePointerEvent: function(inType, inDict) {\n inDict = inDi
ct || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\
n // define inherited MouseEvent properties\n for(var i = 0, p; i < MO
USE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n e[p] = inDict[p]
|| MOUSE_DEFAULTS[i];\n }\n e.buttons = inDict.buttons || 0;\n\n
// Spec requires that pointers without pressure specified use 0.5 for down\n
// state and 0 for up state.\n var pressure = 0;\n if (inDict.pressu
re) {\n pressure = inDict.pressure;\n } else {\n pressure = e
.buttons ? 0.5 : 0;\n }\n\n // add x/y properties aliased to clientX/Y
\n e.x = e.clientX;\n e.y = e.clientY;\n\n // define the properti
es of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n
e.width = inDict.width || 0;\n e.height = inDict.height || 0;\n e.
pressure = pressure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict
.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimesta
mp = inDict.hwTimestamp || 0;\n e.isPrimary = inDict.isPrimary || false;\n
e._source = inDict._source || '';\n return e;\n }\n };\n\n scope.
eventFactory = eventFactory;\n})(window.PolymerGestures);\n","/*\n * Copyright (
c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only
be used under the BSD style license found at http://polymer.github.io/LICENSE.t
xt\n * The complete set of authors may be found at http://polymer.github.io/AUTH
ORS.txt\n * The complete set of contributors may be found at http://polymer.gith
ub.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer pro
ject is also\n * subject to an additional IP rights grant found at http://polyme
r.github.io/PATENTS.txt\n */\n\n/**\n * This module implements an map of pointer
states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.proto
type.forEach;\n var POINTERS_FN = function(){ return this.size; };\n function
PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers =
POINTERS_FN;\n return m;\n } else {\n this.keys = [];\n this.
values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId,
inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n
this.values[i] = inEvent;\n } else {\n this.keys.push(inId);\n
this.values.push(inEvent);\n }\n },\n has: function(inId) {\n
return this.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n
var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.sp
lice(i, 1);\n this.values.splice(i, 1);\n }\n },\n get: functi
on(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];
\n },\n clear: function() {\n this.keys.length = 0;\n this.value
s.length = 0;\n },\n // return value, key, map\n forEach: function(call
back, thisArg) {\n this.values.forEach(function(v, i) {\n callback.c
all(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: fun
ction() {\n return this.keys.length;\n }\n };\n\n scope.PointerMap = P
ointerMap;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polyme
r Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complet
e set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The co
mplete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
.txt\n * Code distributed by Google as part of the polymer project is also\n * s
ubject to an additional IP rights grant found at http://polymer.github.io/PATENT
S.txt\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n
'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n '
screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 's
hiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level
3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',\n 'he
ight',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hw
Timestamp',\n 'isPrimary',\n // event instance\n 'type',\n 'target',
\n 'currentTarget',\n 'which',\n 'pageX',\n 'pageY',\n 'timeStamp
',\n // gesture addons\n 'preventTap',\n 'tapPrevented',\n '_source'
\n ];\n\n var CLONE_DEFAULTS = [\n // MouseEvent\n false,\n false,\n
null,\n null,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n
false,\n false,\n 0,\n null,\n // DOM Level 3\n 0,\n // Point
erEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n fa
lse,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n
0,\n 0,\n function(){},\n false\n ];\n\n var HAS_SVG_INSTANCE = (type
of SVGElementInstance !== 'undefined');\n\n var eventFactory = scope.eventFacto
ry;\n\n var hasSDPolyfill = scope.hasSDPolyfill;\n var wrap = scope.wrap;\n\n
/**\n * This module is for normalizing events. Mouse and Touch events will be
\n * collected here, and fire PointerEvents that have the same semantics, no\n
* matter the source.\n * Events fired:\n * - pointerdown: a pointing is
added\n * - pointerup: a pointer is removed\n * - pointermove: a pointe
r is moved\n * - pointerover: a pointer crosses into an element\n * - po
interout: a pointer leaves an element\n * - pointercancel: a pointer will no
longer generate events\n */\n var dispatcher = {\n pointermap: new scope.
PointerMap(),\n eventMap: Object.create(null),\n // Scope objects for nati
ve events.\n // This exists for ease of testing.\n eventSources: Object.cr
eate(null),\n eventSourceList: [],\n gestures: [],\n gestureQueue: [],\
n /**\n * Add a new event source that will generate pointer events.\n
*\n * `inSource` must contain an array of event names named `events`, and\n
* functions with the names specified in the `events` array.\n * @param
{string} name A name for the event source\n * @param {Object} source A new s
ource of platform events.\n */\n registerSource: function(name, source) {
\n var s = source;\n var newEvents = s.events;\n if (newEvents) {
\n newEvents.forEach(function(e) {\n if (s[e]) {\n th
is.eventMap[e] = s[e].bind(s);\n }\n }, this);\n this.eve
ntSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n
registerGesture: function(name, source) {\n this.gestures.push(source);\n
},\n register: function(element) {\n var l = this.eventSourceList.le
ngth;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++)
{\n // call eventsource register\n es.register.call(es, element);
\n }\n },\n unregister: function(element) {\n var l = this.event
SourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceL
ist[i]); i++) {\n // call eventsource register\n es.unregister.cal
l(es, element);\n }\n },\n // EVENTS\n down: function(inEvent) {\n
this.fireEvent('down', inEvent);\n },\n move: function(inEvent) {\n
// pipe move events into gesture queue directly\n inEvent.type = 'move
';\n this.fillGestureQueue(inEvent);\n },\n up: function(inEvent) {\n
this.fireEvent('up', inEvent);\n },\n cancel: function(inEvent) {\n
inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent);\n },\
n // LISTENER LOGIC\n eventHandler: function(inEvent) {\n // This is
used to prevent multiple dispatch of events from\n // platform events. This
can happen when two elements in different scopes\n // are set up to create
pointer events, which is relevant to Shadow DOM.\n if (inEvent._handledByP
G) {\n return;\n }\n var type = inEvent.type;\n var fn = t
his.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n
}\n inEvent._handledByPG = true;\n },\n // set up event listeners\
n listen: function(target, events) {\n for (var i = 0, l = events.length
, e; (i < l) && (e = events[i]); i++) {\n this.addEvent(target, e);\n
}\n },\n // remove event listeners\n unlisten: function(target, event
s) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i+
+) {\n this.removeEvent(target, e);\n }\n },\n addEvent: funct
ion(target, eventName) {\n // NOTE: Work around for #4, use native event li
stener in SD Polyfill\n if (hasSDPolyfill) {\n target.addEventListen
er_(eventName, this.boundHandler);\n } else {\n target.addEventListe
ner(eventName, this.boundHandler);\n }\n },\n removeEvent: function(t
arget, eventName) {\n // NOTE: Work around for #4, use native event listene
r in SD Polyfill\n if (hasSDPolyfill) {\n target.removeEventListener
_(eventName, this.boundHandler);\n } else {\n target.removeEventList
ener(eventName, this.boundHandler);\n }\n },\n // EVENT CREATION AND
TRACKING\n /**\n * Creates a new Event of type `inType`, based on the inf
ormation in\n * `inEvent`.\n *\n * @param {string} inType A string r
epresenting the type of event to create\n * @param {Event} inEvent A platfor
m event with a target\n * @return {Event} A PointerEvent of type `inType`\n
*/\n makeEvent: function(inType, inEvent) {\n var e = eventFactory.m
akePointerEvent(inType, inEvent);\n e.preventDefault = inEvent.preventDefau
lt;\n e.tapPrevented = inEvent.tapPrevented;\n e._target = e._target |
| inEvent.target;\n return e;\n },\n // make and dispatch an event in
one call\n fireEvent: function(inType, inEvent) {\n var e = this.makeEv
ent(inType, inEvent);\n return this.dispatchEvent(e);\n },\n /**\n
* Returns a snapshot of inEvent, with writable properties.\n *\n * @pa
ram {Event} inEvent An event that contains properties to copy.\n * @return {
Object} An object containing shallow copies of `inEvent`'s\n * properties
.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.cr
eate(null), p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p
= CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n
// Work around SVGInstanceElement shadow tree\n // Return the <use> e
lement that is represented by the instance for Safari, Chrome, IE.\n // T
his is the behavior implemented by Firefox.\n if (p === 'target' || p ===
'relatedTarget') {\n if (HAS_SVG_INSTANCE && eventCopy[p] instanceof S
VGElementInstance) {\n eventCopy[p] = eventCopy[p].correspondingUseEl
ement;\n }\n eventCopy[p] = wrap(eventCopy[p]);\n }\n
}\n // keep the semantics of preventDefault\n eventCopy.preventDef
ault = inEvent.preventDefault;\n return eventCopy;\n },\n /**\n *
Dispatches the event to its target.\n *\n * @param {Event} inEvent The
event to be dispatched.\n * @return {Boolean} True if an event handler retur
ns true, false otherwise.\n */\n dispatchEvent: function(inEvent) {\n
var t = inEvent._target;\n if (t) {\n t.dispatchEvent(inEvent);\n
// clone the event for the gesture system to process\n // clone af
ter dispatch to pick up gesture prevention code\n var clone = this.cloneE
vent(inEvent);\n clone.target = t;\n this.fillGestureQueue(clone);
\n }\n },\n gestureTrigger: function() {\n // process the gestur
e queue\n for (var i = 0, e; i < this.gestureQueue.length; i++) {\n
e = this.gestureQueue[i];\n for (var j = 0, g, fn; j < this.gestures.leng
th; j++) {\n g = this.gestures[j];\n fn = g[e.type];\n
if (fn) {\n fn.call(g, e);\n }\n }\n }\n
this.gestureQueue.length = 0;\n },\n fillGestureQueue: function(ev) {\n
// only trigger the gesture queue once\n if (!this.gestureQueue.length)
{\n requestAnimationFrame(this.boundGestureTrigger);\n }\n this
.gestureQueue.push(ev);\n }\n };\n dispatcher.boundHandler = dispatcher.eve
ntHandler.bind(dispatcher);\n dispatcher.boundGestureTrigger = dispatcher.gestu
reTrigger.bind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register
= function(root) {\n dispatcher.register(root);\n };\n scope.unregister = d
ispatcher.unregister.bind(dispatcher);\n scope.wrap = wrap;\n})(window.PolymerG
estures);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at ht
tp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found
at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may
be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by G
oogle as part of the polymer project is also\n * subject to an additional IP rig
hts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This mod
ule uses Mutation Observers to dynamically adjust which nodes will\n * generate
Pointer Events.\n *\n * All nodes that wish to generate Pointer Events must have
the attribute\n * `touch-action` set to `none`.\n */\n(function(scope) {\n var
forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);\n var ma
p = Array.prototype.map.call.bind(Array.prototype.map);\n var toArray = Array.p
rototype.slice.call.bind(Array.prototype.slice);\n var filter = Array.prototype
.filter.call.bind(Array.prototype.filter);\n var MO = window.MutationObserver |
| window.WebKitMutationObserver;\n var SELECTOR = '[touch-action]';\n var OBSE
RVER_INIT = {\n subtree: true,\n childList: true,\n attributes: true,\n
attributeOldValue: true,\n attributeFilter: ['touch-action']\n };\n\n f
unction Installer(add, remove, changed, binder) {\n this.addCallback = add.bi
nd(binder);\n this.removeCallback = remove.bind(binder);\n this.changedCal
lback = changed.bind(binder);\n if (MO) {\n this.observer = new MO(this.
mutationWatcher.bind(this));\n }\n }\n\n Installer.prototype = {\n watch
Subtree: function(target) {\n // Only watch scopes that can target find, as
these are top-level.\n // Otherwise we can see duplicate additions and rem
ovals that add noise.\n //\n // TODO(dfreedman): For some instances wi
th ShadowDOMPolyfill, we can see\n // a removal without an insertion when a
node is redistributed among\n // shadows. Since it all ends up correct in
the document, watching only\n // the document will yield the correct mutati
ons to watch.\n if (scope.targetFinding.canTarget(target)) {\n this.
observer.observe(target, OBSERVER_INIT);\n }\n },\n enableOnSubtree:
function(target) {\n this.watchSubtree(target);\n if (target === docum
ent && document.readyState !== 'complete') {\n this.installOnLoad();\n
} else {\n this.installNewSubtree(target);\n }\n },\n insta
llNewSubtree: function(target) {\n forEach(this.findElements(target), this.
addElement, this);\n },\n findElements: function(target) {\n if (targ
et.querySelectorAll) {\n return target.querySelectorAll(SELECTOR);\n
}\n return [];\n },\n removeElement: function(el) {\n this.remo
veCallback(el);\n },\n addElement: function(el) {\n this.addCallback(
el);\n },\n elementChanged: function(el, oldValue) {\n this.changedCa
llback(el, oldValue);\n },\n concatLists: function(accum, list) {\n r
eturn accum.concat(toArray(list));\n },\n // register all touch-action = n
one nodes on document load\n installOnLoad: function() {\n document.addE
ventListener('readystatechange', function() {\n if (document.readyState =
== 'complete') {\n this.installNewSubtree(document);\n }\n
}.bind(this));\n },\n isElement: function(n) {\n return n.nodeType ==
= Node.ELEMENT_NODE;\n },\n flattenMutationTree: function(inNodes) {\n
// find children with touch-action\n var tree = map(inNodes, this.findEle
ments, this);\n // make sure the added nodes are accounted for\n tree.
push(filter(inNodes, this.isElement));\n // flatten the list\n return
tree.reduce(this.concatLists, []);\n },\n mutationWatcher: function(mutati
ons) {\n mutations.forEach(this.mutationHandler, this);\n },\n mutati
onHandler: function(m) {\n if (m.type === 'childList') {\n var added
= this.flattenMutationTree(m.addedNodes);\n added.forEach(this.addElemen
t, this);\n var removed = this.flattenMutationTree(m.removedNodes);\n
removed.forEach(this.removeElement, this);\n } else if (m.type === 'att
ributes') {\n this.elementChanged(m.target, m.oldValue);\n }\n }\
n };\n\n if (!MO) {\n Installer.prototype.watchSubtree = function(){\n
console.warn('PolymerGestures: MutationObservers not found, touch-action will n
ot be dynamically detected');\n };\n }\n\n scope.Installer = Installer;\n})
(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Project Auth
ors. All rights reserved.\n * This code may only be used under the BSD style lic
ense found at http://polymer.github.io/LICENSE.txt\n * The complete set of autho
rs may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of
contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code
distributed by Google as part of the polymer project is also\n * subject to an a
dditional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n
(function (scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = di
spatcher.pointermap;\n // radius around touchend that swallows mouse events\n
var DEDUP_DIST = 25;\n\n var WHICH_TO_BUTTONS = [0, 1, 4, 2];\n\n var HAS_BUTT
ONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).bu
ttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n
var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events:
[\n 'mousedown',\n 'mousemove',\n 'mouseup'\n ],\n registe
r: function(target) {\n if (target !== document) {\n return;\n
}\n dispatcher.listen(target, this.events);\n },\n unregister: functi
on(target) {\n dispatcher.unlisten(target, this.events);\n },\n lastT
ouches: [],\n // collide with the global mouse listener\n isEventSimulated
FromTouch: function(inEvent) {\n var lts = this.lastTouches;\n var x =
inEvent.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t;
i < l && (t = lts[i]); i++) {\n // simulated mouse events will be swallo
wed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y
- t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return
true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n
var e = dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n
e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._sou
rce = 'mouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[
e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEven
t) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = poi
ntermap.has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some el
ements not sending mouseup\n // http://crbug/149091\n if (p) {\n
this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inE
vent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n point
ermap.set(this.POINTER_ID, e.target);\n dispatcher.down(e);\n }\n
},\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTou
ch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n e.target =
pointermap.get(this.POINTER_ID);\n dispatcher.move(e);\n }\n },\n
mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEv
ent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget =
scope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(this.P
OINTER_ID);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n
},\n cleanupMouse: function() {\n pointermap['delete'](this.POINTER_I
D);\n }\n };\n\n scope.mouseEvents = mouseEvents;\n})(window.PolymerGesture
s);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserv
ed.\n * This code may only be used under the BSD style license found at http://p
olymer.github.io/LICENSE.txt\n * The complete set of authors may be found at htt
p://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be fo
und at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google
as part of the polymer project is also\n * subject to an additional IP rights gr
ant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n
var dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.allSh
adows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n v
ar touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This sho
uld be long enough to ignore compat mouse events made by touch\n var DEDUP_TIME
OUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATT
RIB = 'touch-action';\n var INSTALLER;\n // maybe one day...\n // var CAN_USE
_GLOBAL = ATTRIB in document.head.style;\n var CAN_USE_GLOBAL = false;\n\n //
handler block for native touch events\n var touchEvents = {\n events: [\n
'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n
],\n register: function(target) {\n if (CAN_USE_GLOBAL) {\n dis
patcher.listen(target, this.events);\n } else {\n INSTALLER.enableOn
Subtree(target);\n }\n },\n unregister: function(target) {\n if
(CAN_USE_GLOBAL) {\n dispatcher.unlisten(target, this.events);\n } e
lse {\n // TODO(dfreedman): is it worth it to disconnect the MO?\n }
\n },\n elementAdded: function(el) {\n var a = el.getAttribute(ATTRIB
);\n var st = this.touchActionToScrollType(a);\n if (st) {\n el
._scrollType = st;\n dispatcher.listen(el, this.events);\n // set
touch-action on shadows as well\n allShadows(el).forEach(function(s) {\n
s._scrollType = st;\n dispatcher.listen(s, this.events);\n
}, this);\n }\n },\n elementRemoved: function(el) {\n el._sc
rollType = undefined;\n dispatcher.unlisten(el, this.events);\n // rem
ove touch-action from shadow\n allShadows(el).forEach(function(s) {\n
s._scrollType = undefined;\n dispatcher.unlisten(s, this.events);\n
}, this);\n },\n elementChanged: function(el, oldValue) {\n var a =
el.getAttribute(ATTRIB);\n var st = this.touchActionToScrollType(a);\n
var oldSt = this.touchActionToScrollType(oldValue);\n // simply update sc
rollType if listeners are already established\n if (st && oldSt) {\n
el._scrollType = st;\n allShadows(el).forEach(function(s) {\n s
._scrollType = st;\n }, this);\n } else if (oldSt) {\n this.e
lementRemoved(el);\n } else if (st) {\n this.elementAdded(el);\n
}\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x
',\n YSCROLLER: 'pan-y',\n SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x)
|auto|manipulation$/\n },\n touchActionToScrollType: function(touchAction)
{\n var t = touchAction;\n var st = this.scrollTypes;\n if (t ==
= 'none') {\n return 'none';\n } else if (t === st.XSCROLLER) {\n
return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\n
} else if (st.SCROLLER.exec(t)) {\n return 'XY';\n }\n },\n
POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(i
nTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n set
PrimaryTouch: function(inTouch) {\n // set primary touch if there no pointe
rs, or the only pointer is the mouse\n if (pointermap.pointers() === 0 || (
pointermap.pointers() === 1 && pointermap.has(1))) {\n this.firstTouch =
inTouch.identifier;\n this.firstXY = {X: inTouch.clientX, Y: inTouch.clie
ntY};\n this.scrolling = null;\n this.cancelResetClickCount();\n
}\n },\n removePrimaryPointer: function(inPointer) {\n if (inPoin
ter.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\
n this.resetClickCount();\n }\n },\n clickCount: 0,\n reset
Id: null,\n resetClickCount: function() {\n var fn = function() {\n
this.clickCount = 0;\n this.resetId = null;\n }.bind(this);\n
this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT);\n },\n cancelResetCl
ickCount: function() {\n if (this.resetId) {\n clearTimeout(this.res
etId);\n }\n },\n typeToButtons: function(type) {\n var ret = 0;
\n if (type === 'touchstart' || type === 'touchmove') {\n ret = 1;\n
}\n return ret;\n },\n findTarget: function(touch, id) {\n
if (this.currentTouchEvent.type === 'touchstart') {\n if (this.isPrimary
Touch(touch)) {\n var fastPath = {\n clientX: touch.clientX,
\n clientY: touch.clientY,\n path: this.currentTouchEvent.
path,\n target: scope.wrap(this.currentTouchEvent.target)\n
};\n return scope.findTarget(fastPath);\n } else {\n re
turn scope.findTarget(touch);\n }\n }\n // reuse target we foun
d in touchstart\n return pointermap.get(id);\n },\n touchToPointer: f
unction(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispa
tcher.cloneEvent(inTouch);\n // Spec specifies that pointerId 1 is reserved
for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the t
ouch identifier for compatibility.\n var id = e.pointerId = inTouch.identif
ier + 2;\n e.target = scope.wrap(this.findTarget(inTouch, id));\n e.bu
bbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n
e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitRad
iusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch
.radiusY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\
n e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.P
OINTER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaults
\n var self = this;\n e.preventDefault = function() {\n self.sc
rolling = false;\n self.firstXY = null;\n cte.preventDefault();\n
};\n return e;\n },\n processTouches: function(inEvent, inFuncti
on) {\n var tl = inEvent.changedTouches;\n this.currentTouchEvent = in
Event;\n for (var i = 0, t, p; i < tl.length; i++) {\n t = tl[i];\n
p = this.touchToPointer(t);\n if (inEvent.type === 'touchstart') {
\n pointermap.set(p.pointerId, p.target);\n }\n if (point
ermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n
if (inEvent.type === 'touchend' || inEvent._cancel) {\n this.cleanUp
Pointer(p);\n }\n }\n },\n // For single axis scrollers, deter
mines whether the element should emit\n // pointer events or behave as a scro
ller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n
var ret;\n var scrollAxis = scope.targetFinding.findScrollAxis(inEvent);\
n if (scrollAxis === 'none') {\n // this element is a touch-acti
on: none, should never scroll\n ret = false;\n } else if (scroll
Axis === 'XY') {\n // this element should always scroll\n ret
= true;\n } else {\n var t = inEvent.changedTouches[0];\n
// check the intended scroll axis, and other axis\n var a = scrollAx
is;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Math
.abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['client
' + oa] - this.firstXY[oa]);\n // if delta in the scroll axis > delta o
ther axis, scroll instead of\n // making events\n ret = da >=
doa;\n }\n return ret;\n }\n },\n findTouch: function(i
nTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]);
i++) {\n if (t.identifier === inId) {\n return true;\n }\
n }\n },\n // In some instances, a touchstart can happen without a to
uchend. This\n // leaves the pointermap in a broken state.\n // Therefore,
on every touchstart, we remove the touches that did not fire a\n // touchend
event.\n // To keep state globally consistent, we fire a\n // pointercanc
el for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n v
ar tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length h
ere, as the touchstart has not\n // been processed yet.\n if (pointerm
ap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(f
unction(value, key) {\n // Never remove pointerId == 1, which is mouse.
\n // Touch identifiers are 2 smaller than their pointerId, which is th
e\n // index in pointermap.\n if (key !== 1 && !this.findTouch
(tl, key - 2)) {\n var p = value;\n d.push(p);\n
}\n }, this);\n d.forEach(function(p) {\n this.cancel(p);
\n pointermap.delete(p.pointerId);\n });\n }\n },\n t
ouchstart: function(inEvent) {\n this.vacuumTouches(inEvent);\n this.s
etPrimaryTouch(inEvent.changedTouches[0]);\n this.dedupSynthMouse(inEvent);
\n if (!this.scrolling) {\n this.clickCount++;\n this.process
Touches(inEvent, this.down);\n }\n },\n down: function(inPointer) {\n
dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n
if (CAN_USE_GLOBAL) {\n this.processTouches(inEvent, this.move);\n
} else {\n if (!this.scrolling) {\n if (this.scrolling === n
ull && this.shouldScroll(inEvent)) {\n this.scrolling = true;\n
} else {\n this.scrolling = false;\n inEvent.preventDe
fault();\n this.processTouches(inEvent, this.move);\n }\n
} else if (this.firstXY) {\n var t = inEvent.changedTouches[0];\n
var dx = t.clientX - this.firstXY.X;\n var dy = t.clientY - th
is.firstXY.Y;\n var dd = Math.sqrt(dx * dx + dy * dy);\n if (d
d >= HYSTERESIS) {\n this.touchcancel(inEvent);\n this.scr
olling = true;\n this.firstXY = null;\n }\n }\n
}\n },\n move: function(inPointer) {\n dispatcher.move(inPointer);\n
},\n touchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n
this.processTouches(inEvent, this.up);\n },\n up: function(inPointer
) {\n inPointer.relatedTarget = scope.wrap(scope.findTarget(inPointer));\n
dispatcher.up(inPointer);\n },\n cancel: function(inPointer) {\n
dispatcher.cancel(inPointer);\n },\n touchcancel: function(inEvent) {\n
inEvent._cancel = true;\n this.processTouches(inEvent, this.cancel);\n
},\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inP
ointer.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n //
prevent synth mouse events from creating pointer events\n dedupSynthMouse: fu
nction(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t =
inEvent.changedTouches[0];\n // only the primary finger will synth mouse e
vents\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touc
h\n var lt = {x: t.clientX, y: t.clientY};\n lts.push(lt);\n
var fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if
(i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, l
ts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n if (
!CAN_USE_GLOBAL) {\n INSTALLER = new scope.Installer(touchEvents.elementAdded
, touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n }\n\n
scope.touchEvents = touchEvents;\n})(window.PolymerGestures);\n","/*\n * Copyr
ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma
y only be used under the BSD style license found at http://polymer.github.io/LIC
ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i
o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme
r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym
er project is also\n * subject to an additional IP rights grant found at http://
polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher = sco
pe.dispatcher;\n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TYPE
= window.MSPointerEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE ==
= 'number';\n var msEvents = {\n events: [\n 'MSPointerDown',\n 'M
SPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n regi
ster: function(target) {\n if (target !== document) {\n return;\n
}\n dispatcher.listen(target, this.events);\n },\n unregister: fun
ction(target) {\n dispatcher.unlisten(target, this.events);\n },\n PO
INTER_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n
'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEve
nt;\n e = dispatcher.cloneEvent(inEvent);\n if (HAS_BITMAP_TYPE) {\n
e.pointerType = this.POINTER_TYPES[inEvent.pointerType];\n }\n e
._source = 'ms';\n return e;\n },\n cleanup: function(id) {\n po
intermap['delete'](id);\n },\n MSPointerDown: function(inEvent) {\n v
ar e = this.prepareEvent(inEvent);\n e.target = scope.wrap(scope.findTarget
(inEvent));\n pointermap.set(inEvent.pointerId, e.target);\n dispatche
r.down(e);\n },\n MSPointerMove: function(inEvent) {\n var e = this.p
repareEvent(inEvent);\n e.target = pointermap.get(e.pointerId);\n disp
atcher.move(e);\n },\n MSPointerUp: function(inEvent) {\n var e = thi
s.prepareEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(in
Event));\n e.target = pointermap.get(e.pointerId);\n dispatcher.up(e);
\n this.cleanup(inEvent.pointerId);\n },\n MSPointerCancel: function(
inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = s
cope.wrap(scope.findTarget(inEvent));\n e.target = pointermap.get(e.pointer
Id);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }
\n };\n\n scope.msEvents = msEvents;\n})(window.PolymerGestures);\n","/*\n * C
opyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This cod
e may only be used under the BSD style license found at http://polymer.github.io
/LICENSE.txt\n * The complete set of authors may be found at http://polymer.gith
ub.io/AUTHORS.txt\n * The complete set of contributors may be found at http://po
lymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the p
olymer project is also\n * subject to an additional IP rights grant found at htt
p://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var dispatcher =
scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEven
ts = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointe
rup',\n 'pointercancel'\n ],\n prepareEvent: function(inEvent) {\n
var e = dispatcher.cloneEvent(inEvent);\n e._source = 'pointer';\n
return e;\n },\n register: function(target) {\n if (target !== docume
nt) {\n return;\n }\n dispatcher.listen(target, this.events);\n
},\n unregister: function(target) {\n dispatcher.unlisten(target, th
is.events);\n },\n cleanup: function(id) {\n pointermap['delete'](id)
;\n },\n pointerdown: function(inEvent) {\n var e = this.prepareEvent
(inEvent);\n e.target = scope.wrap(scope.findTarget(inEvent));\n point
ermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointe
rmove: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.t
arget = pointermap.get(e.pointerId);\n dispatcher.move(e);\n },\n poi
nterup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.
relatedTarget = scope.wrap(scope.findTarget(inEvent));\n e.target = pointer
map.get(e.pointerId);\n dispatcher.up(e);\n this.cleanup(inEvent.point
erId);\n },\n pointercancel: function(inEvent) {\n var e = this.prepa
reEvent(inEvent);\n e.relatedTarget = scope.wrap(scope.findTarget(inEvent))
;\n e.target = pointermap.get(e.pointerId);\n dispatcher.cancel(e);\n
this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.pointerEvents = po
interEvents;\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Poly
mer Project Authors. All rights reserved.\n * This code may only be used under t
he BSD style license found at http://polymer.github.io/LICENSE.txt\n * The compl
ete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The
complete set of contributors may be found at http://polymer.github.io/CONTRIBUTO
RS.txt\n * Code distributed by Google as part of the polymer project is also\n *
subject to an additional IP rights grant found at http://polymer.github.io/PATE
NTS.txt\n */\n\n/**\n * This module contains the handlers for native platform ev
ents.\n * From here, the dispatcher is called to create unified pointer events.\
n * Included are touch events (v1), mouse events, and MSPointerEvents.\n */\n(fu
nction(scope) {\n var dispatcher = scope.dispatcher;\n\n if (window.PointerEve
nt) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else
if (window.navigator.msPointerEnabled) {\n dispatcher.registerSource('ms', sc
ope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEv
ents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerS
ource('touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(document
);\n})(window.PolymerGestures);\n","/*\n * Copyright (c) 2014 The Polymer Projec
t Authors. All rights reserved.\n * This code may only be used under the BSD sty
le license found at http://polymer.github.io/LICENSE.txt\n * The complete set of
authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete s
et of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n *
Code distributed by Google as part of the polymer project is also\n * subject t
o an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n
*/\n\n/**\n * This event denotes the beginning of a series of tracking events.\n
*\n * @module PointerGestures\n * @submodule Events\n * @class trackstart\n */\
n/**\n * Pixels moved in the x direction since trackstart.\n * @type Number\n *
@property dx\n */\n/**\n * Pixes moved in the y direction since trackstart.\n *
@type Number\n * @property dy\n */\n/**\n * Pixels moved in the x direction sinc
e the last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved
in the y direction since the last track.\n * @type Number\n * @property ddy\n */
\n/**\n * The clientX position of the track gesture.\n * @type Number\n * @prope
rty clientX\n */\n/**\n * The clientY position of the track gesture.\n * @type N
umber\n * @property clientY\n */\n/**\n * The pageX position of the track gestur
e.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of the
track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX po
sition of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n
* The screenY position of the track gesture.\n * @type Number\n * @property scre
enY\n */\n/**\n * The last x axis direction of the pointer.\n * @type Number\n *
@property xDirection\n */\n/**\n * The last y axis direction of the pointer.\n
* @type Number\n * @property yDirection\n */\n/**\n * A shared object between al
l tracking events.\n * @type Object\n * @property trackInfo\n */\n/**\n * The el
ement currently under the pointer.\n * @type Element\n * @property relatedTarget
\n */\n/**\n * The type of pointer that make the track gesture.\n * @type String
\n * @property pointerType\n */\n/**\n *\n * This event fires for all pointer mo
vement being tracked.\n *\n * @class track\n * @extends trackstart\n */\n/**\n *
This event fires when the pointer is no longer being tracked.\n *\n * @class tr
ackend\n * @extends trackstart\n */\n\n (function(scope) {\n var dispatcher =
scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap
= new scope.PointerMap();\n var track = {\n events: [\n 'down',\n
'move',\n 'up',\n ],\n WIGGLE_THRESHOLD: 4,\n clampDir: fu
nction(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositi
onDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB)
{\n x = inB.pageX - inA.pageX;\n y = inB.pageY - inA.pageY;\n
}\n return {x: x, y: y};\n },\n fireTrack: function(inType, in
Event, inTrackingData) {\n var t = inTrackingData;\n var d = this.ca
lcPositionDelta(t.downEvent, inEvent);\n var dd = this.calcPositionDelta(t
.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDirection = this.clam
pDir(dd.x);\n }\n if (dd.y) {\n t.yDirection = this.clampDir
(dd.y);\n }\n var e = eventFactory.makeGestureEvent(inType, {\n
bubbles: true,\n cancelable: true,\n dx: d.x,\n dy:
d.y,\n ddx: dd.x,\n ddy: dd.y,\n x: inEvent.x,\n
y: inEvent.y,\n clientX: inEvent.clientX,\n clientY: inEvent.cl
ientY,\n pageX: inEvent.pageX,\n pageY: inEvent.pageY,\n
screenX: inEvent.screenX,\n screenY: inEvent.screenY,\n xDirect
ion: t.xDirection,\n yDirection: t.yDirection,\n trackInfo: t.tr
ackInfo,\n relatedTarget: inEvent.relatedTarget,\n pointerType:
inEvent.pointerType,\n pointerId: inEvent.pointerId,\n _source:
'track'\n });\n t.downTarget.dispatchEvent(e);\n },\n down:
function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType === 'm
ouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n downEve
nt: inEvent,\n downTarget: inEvent.target,\n trackInfo: {},\
n lastMoveEvent: null,\n xDirection: 0,\n yDirecti
on: 0,\n tracking: false\n };\n pointermap.set(inEvent
.pointerId, p);\n }\n },\n move: function(inEvent) {\n var p
= pointermap.get(inEvent.pointerId);\n if (p) {\n if (!p.tracking
) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\n
var move = d.x * d.x + d.y * d.y;\n // start tracking only if finger
moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_THRESHOLD)
{\n p.tracking = true;\n this.fireTrack('trackstart', p.
downEvent, p);\n this.fireTrack('track', inEvent, p);\n }\
n } else {\n this.fireTrack('track', inEvent, p);\n }\
n p.lastMoveEvent = inEvent;\n }\n },\n up: function(inEve
nt) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n
if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n
}\n pointermap.delete(inEvent.pointerId);\n }\n }\n };\n
dispatcher.registerGesture('track', track);\n })(window.PolymerGestures);\n",
"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n *
This code may only be used under the BSD style license found at http://polymer.
github.io/LICENSE.txt\n * The complete set of authors may be found at http://pol
ymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part
of the polymer project is also\n * subject to an additional IP rights grant fou
nd at http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event is fired w
hen a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @submo
dule Events\n * @class hold\n */\n/**\n * Type of pointer that made the holding
event.\n * @type String\n * @property pointerType\n */\n/**\n * Screen X axis po
sition of the held pointer\n * @type Number\n * @property clientX\n */\n/**\n *
Screen Y axis position of the held pointer\n * @type Number\n * @property client
Y\n */\n/**\n * Type of pointer that made the holding event.\n * @type String\n
* @property pointerType\n */\n/**\n * This event is fired every 200ms while a po
inter is held down.\n *\n * @class holdpulse\n * @extends hold\n */\n/**\n * Mil
liseconds pointer has been held down.\n * @type Number\n * @property holdTime\n
*/\n/**\n * This event is fired when a held pointer is released or moved.\n *\n
* @class release\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher
;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at leas
t HOLD_DELAY ms between hold and pulse events\n HOLD_DELAY: 200,\n // poin
ter can move WIGGLE_THRESHOLD pixels before not counting as a hold\n WIGGLE_T
HRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n ],\
n heldPointer: null,\n holdJob: null,\n pulse: function() {\n var
hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'h
oldpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n
},\n cancel: function() {\n clearInterval(this.holdJob);\n if (
this.held) {\n this.fireHold('release');\n }\n this.held = fals
e;\n this.heldPointer = null;\n this.target = null;\n this.holdJo
b = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary &&
!this.heldPointer) {\n this.heldPointer = inEvent;\n this.target
= inEvent.target;\n this.holdJob = setInterval(this.pulse.bind(this), thi
s.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.hel
dPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.ca
ncel();\n }\n },\n move: function(inEvent) {\n if (this.heldPoin
ter && this.heldPointer.pointerId === inEvent.pointerId) {\n var x = inEv
ent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.
heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n
this.cancel();\n }\n }\n },\n fireHold: function(inTyp
e, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable: t
rue,\n pointerType: this.heldPointer.pointerType,\n pointerId: thi
s.heldPointer.pointerId,\n x: this.heldPointer.clientX,\n y: this.
heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime) {
\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGest
ureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n dispat
cher.registerGesture('hold', hold);\n})(window.PolymerGestures);\n","/*\n * Copy
right (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code m
ay only be used under the BSD style license found at http://polymer.github.io/LI
CENSE.txt\n * The complete set of authors may be found at http://polymer.github.
io/AUTHORS.txt\n * The complete set of contributors may be found at http://polym
er.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the poly
mer project is also\n * subject to an additional IP rights grant found at http:/
/polymer.github.io/PATENTS.txt\n */\n\n/**\n * This event is fired when a pointe
r quickly goes down and up, and is used to\n * denote activation.\n *\n * Any ge
sture event can prevent the tap event from being created by calling\n * `event.p
reventTap`.\n *\n * Any pointer event can prevent the tap by setting the `tapPre
vented` property\n * on itself.\n *\n * @module PointerGestures\n * @submodule E
vents\n * @class tap\n */\n/**\n * X axis position of the tap.\n * @property x\n
* @type Number\n */\n/**\n * Y axis position of the tap.\n * @property y\n * @t
ype Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property po
interType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.di
spatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scop
e.PointerMap();\n var tap = {\n events: [\n 'down',\n 'up'\n ],
\n down: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrev
ented) {\n pointermap.set(inEvent.pointerId, {\n target: inEvent
.target,\n buttons: inEvent.buttons,\n x: inEvent.clientX,\n
y: inEvent.clientY\n });\n }\n },\n shouldTap: functio
n(e, downState) {\n if (e.pointerType === 'mouse') {\n // only allow
left click to tap for mouse\n return downState.buttons === 1;\n }\n
return !e.tapPrevented;\n },\n up: function(inEvent) {\n var st
art = pointermap.get(inEvent.pointerId);\n if (start && this.shouldTap(inEv
ent, start)) {\n // up.relatedTarget is target currently under finger\n
var t = scope.targetFinding.LCA(start.target, inEvent.relatedTarget);\n
if (t) {\n var e = eventFactory.makeGestureEvent('tap', {\n
bubbles: true,\n cancelable: true,\n x: inEvent.clien
tX,\n y: inEvent.clientY,\n detail: inEvent.detail,\n
pointerType: inEvent.pointerType,\n pointerId: inEvent.pointer
Id,\n altKey: inEvent.altKey,\n ctrlKey: inEvent.ctrlKey,\
n metaKey: inEvent.metaKey,\n shiftKey: inEvent.shiftKey,\
n _source: 'tap'\n });\n t.dispatchEvent(e);\n
}\n }\n pointermap.delete(inEvent.pointerId);\n }\n };\n // pa
tch eventFactory to remove id from tap's pointermap for preventTap calls\n even
tFactory.preventTap = function(e) {\n return function() {\n e.tapPrevent
ed = true;\n pointermap.delete(e.pointerId);\n };\n };\n dispatcher.re
gisterGesture('tap', tap);\n})(window.PolymerGestures);\n","/*\n Copyright (C)
2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyright (C) 2013 Thaddee Tyl <
thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.
com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>\n Copyright (C) 201
2 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n Copyright (C) 2012 Kris Ko
wal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmai
l.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>\n Copyr
ight (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n Redistribution and us
e in source and binary forms, with or without\n modification, are permitted pro
vided that the following conditions are met:\n\n * Redistributions of source
code must retain the above copyright\n notice, this list of conditions and
the following disclaimer.\n * Redistributions in binary form must reproduce t
he above copyright\n notice, this list of conditions and the following disc
laimer in the\n documentation and/or other materials provided with the dist
ribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTO
RS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITE
D TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR AN
Y\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\
n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\
n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (
global) {\n 'use strict';\n\n var Token,\n TokenName,\n Synt
ax,\n Messages,\n source,\n index,\n length,\n
delegate,\n lookahead,\n state;\n\n Token = {\n Boolea
nLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n
NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n
StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLit
eral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';\n TokenName[Token.Ide
ntifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenNa
me[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric'
;\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLi
teral] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression'
,\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'CallE
xpression',\n ConditionalExpression: 'ConditionalExpression',\n Em
ptyStatement: 'EmptyStatement',\n ExpressionStatement: 'ExpressionStateme
nt',\n Identifier: 'Identifier',\n Literal: 'Literal',\n La
beledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpressi
on',\n MemberExpression: 'MemberExpression',\n ObjectExpression: '
ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n
ThisExpression: 'ThisExpression',\n UnaryExpression: 'UnaryExpres
sion'\n };\n\n // Error messages should be identical to V8.\n Messages
= {\n UnexpectedToken: 'Unexpected token %0',\n UnknownLabel: 'Un
defined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been d
eclared'\n };\n\n // Ensure the condition is true, otherwise throw an erro
r.\n // This is only to have a better contract semantic, i.e. another safety
net\n // to catch a logic error. The condition shall be fulfilled in normal c
ase.\n // Do NOT use this to enforce a certain condition on any user input.\n
\n function assert(condition, message) {\n if (!condition) {\n
throw new Error('ASSERT: ' + message);\n }\n }\n\n function isD
ecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n
// 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch ==
= 32) || // space\n (ch === 9) || // tab\n (ch === 0
xB) ||\n (ch === 0xC) ||\n (ch === 0xA0) ||\n (
ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006
\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCha
rCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTer
minator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || (
ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n fun
ction isIdentifierStart(ch) {\n return (ch === 36) || (ch === 95) || //
$ (dollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || //
A..Z\n (ch >= 97 && ch <= 122); // a..z\n }\n\n functi
on isIdentifierPart(ch) {\n return (ch === 36) || (ch === 95) || // $ (d
ollar) and _ (underscore)\n (ch >= 65 && ch <= 90) || // A..Z
\n (ch >= 97 && ch <= 122) || // a..z\n (ch >= 48 &
& ch <= 57); // 0..9\n }\n\n // 7.6.1.1 Keywords\n\n function
isKeyword(id) {\n return (id === 'this')\n }\n\n // 7.4 Comments\n
\n function skipWhitespace() {\n while (index < length && isWhiteSpace
(source.charCodeAt(index))) {\n ++index;\n }\n }\n\n func
tion getIdentifier() {\n var start, ch;\n\n start = index++;\n
while (index < length) {\n ch = source.charCodeAt(index);\n
if (isIdentifierPart(ch)) {\n ++index;\n } else
{\n break;\n }\n }\n\n return source.sli
ce(start, index);\n }\n\n function scanIdentifier() {\n var start,
id, type;\n\n start = index;\n\n id = getIdentifier();\n\n
// There is no keyword or literal with only one character.\n // Thus, it
must be an identifier.\n if (id.length === 1) {\n type = Token
.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyw
ord;\n } else if (id === 'null') {\n type = Token.NullLiteral;
\n } else if (id === 'true' || id === 'false') {\n type = Toke
n.BooleanLiteral;\n } else {\n type = Token.Identifier;\n
}\n\n return {\n type: type,\n value: id,\n
range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n
function scanPunctuator() {\n var start = index,\n code = s
ource.charCodeAt(index),\n code2,\n ch1 = source[index],\n
ch2;\n\n switch (code) {\n\n // Check for most common
single-character punctuators.\n case 46: // . dot\n case 40: /
/ ( open bracket\n case 41: // ) close bracket\n case 59: // ;
semicolon\n case 44: // , comma\n case 123: // { open curly br
ace\n case 125: // } close curly brace\n case 91: // [\n
case 93: // ]\n case 58: // :\n case 63: // ?\n
++index;\n return {\n type: Token.Punctuator,\n
value: String.fromCharCode(code),\n range: [start, index
]\n };\n\n default:\n code2 = source.charCodeAt(ind
ex + 1);\n\n // '=' (char #61) marks an assignment or comparison oper
ator.\n if (code2 === 61) {\n switch (code) {\n
case 37: // %\n case 38: // &\n case 42
: // *:\n case 43: // +\n case 45: // -\n
case 47: // /\n case 60: // <\n case 6
2: // >\n case 124: // |\n index += 2;\n
return {\n type: Token.Punctuator,\n
value: String.fromCharCode(code) + String.fromCharCode(code2),
\n range: [start, index]\n };\n\n
case 33: // !\n case 61: // =\n ind
ex += 2;\n\n // !== and ===\n if (source.c
harCodeAt(index) === 61) {\n ++index;\n
}\n return {\n type: Token.Punctuato
r,\n value: source.slice(start, index),\n
range: [start, index]\n };\n default:\
n break;\n }\n }\n break
;\n }\n\n // Peek more characters.\n\n ch2 = source[index +
1];\n\n // Other 2-character punctuators: && ||\n\n if (ch1 === c
h2 && ('&|'.indexOf(ch1) >= 0)) {\n index += 2;\n return {
\n type: Token.Punctuator,\n value: ch1 + ch2,\n
range: [start, index]\n };\n }\n\n if ('<
>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n
type: Token.Punctuator,\n value: ch1,\n
range: [start, index]\n };\n }\n\n throwError({},
Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n
function scanNumericLiteral() {\n var number, start, ch;\n\n ch
= source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.
'),\n 'Numeric literal must start with a decimal digit or a decimal p
oint');\n\n start = index;\n number = '';\n if (ch !== '.')
{\n number = source[index++];\n ch = source[index];\n\n
// Hex number starts with '0x'.\n // Octal number starts wi
th '0'.\n if (number === '0') {\n // decimal number st
arts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit
(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedTok
en, 'ILLEGAL');\n }\n }\n\n while (isDecima
lDigit(source.charCodeAt(index))) {\n number += source[index++];\
n }\n ch = source[index];\n }\n\n if (ch ===
'.') {\n number += source[index++];\n while (isDecimalDig
it(source.charCodeAt(index))) {\n number += source[index++];\n
}\n ch = source[index];\n }\n\n if (ch === 'e'
|| ch === 'E') {\n number += source[index++];\n\n ch = so
urce[index];\n if (ch === '+' || ch === '-') {\n numbe
r += source[index++];\n }\n if (isDecimalDigit(source.char
CodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index
))) {\n number += source[index++];\n }\n
} else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGA
L');\n }\n }\n\n if (isIdentifierStart(source.charCodeA
t(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n
}\n\n return {\n type: Token.NumericLiteral,\n
value: parseFloat(number),\n range: [start, index]\n };\n
}\n\n // 7.8.4 String Literals\n\n function scanStringLiteral() {\n
var str = '', quote, start, ch, octal = false;\n\n quote = source[ind
ex];\n assert((quote === '\\'' || quote === '\"'),\n 'String l
iteral must starts with a quote');\n\n start = index;\n ++index;\n
\n while (index < length) {\n ch = source[index++];\n\n
if (ch === quote) {\n quote = '';\n break;\n
} else if (ch === '\\\\') {\n ch = source[index++];\n
if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n
switch (ch) {\n case 'n':\n str
+= '\\n';\n break;\n case 'r':\n
str += '\\r';\n break;\n
case 't':\n str += '\\t';\n b
reak;\n case 'b':\n str += '\\b';\n
break;\n case 'f':\n
str += '\\f';\n break;\n case 'v':
\n str += '\\x0B';\n break;\n\n
default:\n str += ch;\n
break;\n }\n } else {\n
if (ch === '\\r' && source[index] === '\\n') {\n ++i
ndex;\n }\n }\n } else if (isLineTe
rminator(ch.charCodeAt(0))) {\n break;\n } else {\n
str += ch;\n }\n }\n\n if (quote !== '') {
\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\
n return {\n type: Token.StringLiteral,\n value: st
r,\n octal: octal,\n range: [start, index]\n };\n
}\n\n function isIdentifierName(token) {\n return token.type === Tok
en.Identifier ||\n token.type === Token.Keyword ||\n token
.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;
\n }\n\n function advance() {\n var ch;\n\n skipWhitespace()
;\n\n if (index >= length) {\n return {\n type:
Token.EOF,\n range: [index, index]\n };\n }\n\
n ch = source.charCodeAt(index);\n\n // Very common: ( and ) and ;
\n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPun
ctuator();\n }\n\n // String literal starts with single quote (#39
) or double quote (#34).\n if (ch === 39 || ch === 34) {\n ret
urn scanStringLiteral();\n }\n\n if (isIdentifierStart(ch)) {\n
return scanIdentifier();\n }\n\n // Dot (.) char #46 can
also start a floating-point number, hence the need\n // to check the next
character.\n if (ch === 46) {\n if (isDecimalDigit(source.cha
rCodeAt(index + 1))) {\n return scanNumericLiteral();\n
}\n return scanPunctuator();\n }\n\n if (isDecimalDig
it(ch)) {\n return scanNumericLiteral();\n }\n\n return
scanPunctuator();\n }\n\n function lex() {\n var token;\n\n
token = lookahead;\n index = token.range[1];\n\n lookahead = adva
nce();\n\n index = token.range[1];\n\n return token;\n }\n\n
function peek() {\n var pos;\n\n pos = index;\n lookahead
= advance();\n index = pos;\n }\n\n // Throw an exception\n\n fu
nction throwError(token, messageFormat) {\n var error,\n args
= Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.rep
lace(\n /%(\\d)/g,\n function (whole, index) {\n
assert(index < args.length, 'Message reference must be in rang
e');\n return args[index];\n }\n );
\n\n error = new Error(msg);\n error.index = index;\n error
.description = msg;\n throw error;\n }\n\n // Throw an exception be
cause of the token.\n\n function throwUnexpected(token) {\n throwError
(token, Messages.UnexpectedToken, token.value);\n }\n\n // Expect the next
token to match the specified punctuator.\n // If not, an exception will be t
hrown.\n\n function expect(value) {\n var token = lex();\n if (
token.type !== Token.Punctuator || token.value !== value) {\n throwUn
expected(token);\n }\n }\n\n // Return true if the next token match
es the specified punctuator.\n\n function match(value) {\n return look
ahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // R
eturn true if the next token matches the specified keyword\n\n function match
Keyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead
.value === keyword;\n }\n\n function consumeSemicolon() {\n // Catc
h the very common case first: immediately a semicolon (char #59).\n if (s
ource.charCodeAt(index) === 59) {\n lex();\n return;\n
}\n\n skipWhitespace();\n\n if (match(';')) {\n lex
();\n return;\n }\n\n if (lookahead.type !== Token.EOF
&& !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n\n
// 11.1.4 Array Initialiser\n\n function parseArrayInitialiser() {\n
var elements = [];\n\n expect('[');\n\n while (!match(']')) {\n
if (match(',')) {\n lex();\n elements.
push(null);\n } else {\n elements.push(parseExpression
());\n\n if (!match(']')) {\n expect(',');\n
}\n }\n }\n\n expect(']');\n\n ret
urn delegate.createArrayExpression(elements);\n }\n\n // 11.1.5 Object Ini
tialiser\n\n function parseObjectPropertyKey() {\n var token;\n\n
skipWhitespace();\n token = lex();\n\n // Note: This function i
s called only from parseObjectProperty(), where\n // EOF and Punctuator t
okens are already filtered out.\n if (token.type === Token.StringLiteral
|| token.type === Token.NumericLiteral) {\n return delegate.createLit
eral(token);\n }\n\n return delegate.createIdentifier(token.value)
;\n }\n\n function parseObjectProperty() {\n var token, key;\n\n
token = lookahead;\n skipWhitespace();\n\n if (token.type ===
Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(to
ken);\n }\n\n key = parseObjectPropertyKey();\n expect(':')
;\n return delegate.createProperty('init', key, parseExpression());\n
}\n\n function parseObjectInitialiser() {\n var properties = [];\n\n
expect('{');\n\n while (!match('}')) {\n properties.push
(parseObjectProperty());\n\n if (!match('}')) {\n expe
ct(',');\n }\n }\n\n expect('}');\n\n return del
egate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping O
perator\n\n function parseGroupExpression() {\n var expr;\n\n e
xpect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n
return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function par
sePrimaryExpression() {\n var type, token, expr;\n\n if (match('('
)) {\n return parseGroupExpression();\n }\n\n type = lo
okahead.type;\n\n if (type === Token.Identifier) {\n expr = de
legate.createIdentifier(lex().value);\n } else if (type === Token.StringL
iteral || type === Token.NumericLiteral) {\n expr = delegate.createLi
teral(lex());\n } else if (type === Token.Keyword) {\n if (mat
chKeyword('this')) {\n lex();\n expr = delegate.cr
eateThisExpression();\n }\n } else if (type === Token.BooleanL
iteral) {\n token = lex();\n token.value = (token.value ==
= 'true');\n expr = delegate.createLiteral(token);\n } else if
(type === Token.NullLiteral) {\n token = lex();\n token.v
alue = null;\n expr = delegate.createLiteral(token);\n } else
if (match('[')) {\n expr = parseArrayInitialiser();\n } else i
f (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n
if (expr) {\n return expr;\n }\n\n throwUnexpected
(lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseA
rguments() {\n var args = [];\n\n expect('(');\n\n if (!mat
ch(')')) {\n while (index < length) {\n args.push(pars
eExpression());\n if (match(')')) {\n break;\n
}\n expect(',');\n }\n }\n\n
expect(')');\n\n return args;\n }\n\n function parseNonCompute
dProperty() {\n var token;\n\n token = lex();\n\n if (!isId
entifierName(token)) {\n throwUnexpected(token);\n }\n\n
return delegate.createIdentifier(token.value);\n }\n\n function parseNon
ComputedMember() {\n expect('.');\n\n return parseNonComputedPrope
rty();\n }\n\n function parseComputedMember() {\n var expr;\n\n
expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\
n return expr;\n }\n\n function parseLeftHandSideExpression() {\n
var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n
while (true) {\n if (match('[')) {\n property =
parseComputedMember();\n expr = delegate.createMemberExpression(
'[', expr, property);\n } else if (match('.')) {\n pro
perty = parseNonComputedMember();\n expr = delegate.createMemberE
xpression('.', expr, property);\n } else if (match('(')) {\n
args = parseArguments();\n expr = delegate.createCallExpre
ssion(expr, args);\n } else {\n break;\n }\
n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n
var parsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Una
ry Operators\n\n function parseUnaryExpression() {\n var token, expr;\
n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.K
eyword) {\n expr = parsePostfixExpression();\n } else if (matc
h('+') || match('-') || match('!')) {\n token = lex();\n e
xpr = parseUnaryExpression();\n expr = delegate.createUnaryExpression
(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword(
'void') || matchKeyword('typeof')) {\n throwError({}, Messages.Unexpe
ctedToken);\n } else {\n expr = parsePostfixExpression();\n
}\n\n return expr;\n }\n\n function binaryPrecedence(token) {\
n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.t
ype !== Token.Keyword) {\n return 0;\n }\n\n switch (to
ken.value) {\n case '||':\n prec = 1;\n break;\n\n
case '&&':\n prec = 2;\n break;\n\n case '==
':\n case '!=':\n case '===':\n case '!==':\n pr
ec = 6;\n break;\n\n case '<':\n case '>':\n cas
e '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n
break;\n\n case 'in':\n prec = 7;\n bre
ak;\n\n case '+':\n case '-':\n prec = 9;\n
break;\n\n case '*':\n case '/':\n case '%':\n p
rec = 11;\n break;\n\n default:\n break;\n }
\n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n //
11.6 Additive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relati
onal Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Oper
ators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpressi
on() {\n var expr, token, prec, stack, right, operator, left, i;\n\n
left = parseUnaryExpression();\n\n token = lookahead;\n prec =
binaryPrecedence(token);\n if (prec === 0) {\n return left;\n
}\n token.prec = prec;\n lex();\n\n right = parseUna
ryExpression();\n\n stack = [left, token, right];\n\n while ((prec
= binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary e
xpression from the three topmost entries.\n while ((stack.length > 2)
&& (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop
();\n operator = stack.pop().value;\n left = stack
.pop();\n expr = delegate.createBinaryExpression(operator, left,
right);\n stack.push(expr);\n }\n\n // Shif
t.\n token = lex();\n token.prec = prec;\n stac
k.push(token);\n expr = parseUnaryExpression();\n stack.pu
sh(expr);\n }\n\n // Final reduce to clean-up the stack.\n
i = stack.length - 1;\n expr = stack[i];\n while (i > 1) {\n
expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], e
xpr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n //
11.12 Conditional Operator\n\n function parseConditionalExpression() {\n
var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\
n\n if (match('?')) {\n lex();\n consequent = parse
ConditionalExpression();\n expect(':');\n alternate = pars
eConditionalExpression();\n\n expr = delegate.createConditionalExpres
sion(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n
// Simplification since we do not support AssignmentExpression.\n var par
seExpression = parseConditionalExpression;\n\n // Polymer Syntax extensions\n
\n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n //
Identifier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n
var identifier, args;\n\n identifier = lex();\n\n if (identifie
r.type !== Token.Identifier) {\n throwUnexpected(identifier);\n
}\n\n args = match('(') ? parseArguments() : [];\n\n return dele
gate.createFilter(identifier.value, args);\n }\n\n // Filters ::\n //
\"|\" Filter\n // Filters \"|\" Filter\n\n function parseFilters() {\n
while (match('|')) {\n lex();\n parseFilter();\n
}\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsEx
pression\n // InExpression\n // FilterExpression\n\n // AsExpressio
n ::\n // FilterExpression as Identifier\n\n // InExpression ::\n //
Identifier, Identifier in FilterExpression\n // Identifier in FilterExpre
ssion\n\n // FilterExpression ::\n // Expression\n // Expression Fi
lters\n\n function parseTopLevel() {\n skipWhitespace();\n peek
();\n\n var expr = parseExpression();\n if (expr) {\n i
f (lookahead.value === ',' || lookahead.value == 'in' &&\n
expr.type === Syntax.Identifier) {\n parseInExpression(expr);\n
} else {\n parseFilters();\n if (lookah
ead.value === 'as') {\n parseAsExpression(expr);\n
} else {\n delegate.createTopLevel(expr);\n
}\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n
throwUnexpected(lookahead);\n }\n }\n\n function parseAs
Expression(expr) {\n lex(); // as\n var identifier = lex().value;
\n delegate.createAsExpression(expr, identifier);\n }\n\n function
parseInExpression(identifier) {\n var indexName;\n if (lookahead.v
alue === ',') {\n lex();\n if (lookahead.type !== Token.Id
entifier)\n throwUnexpected(lookahead);\n indexName =
lex().value;\n }\n\n lex(); // in\n var expr = parseExpres
sion();\n parseFilters();\n delegate.createInExpression(identifier
.name, indexName, expr);\n }\n\n function parse(code, inDelegate) {\n
delegate = inDelegate;\n source = code;\n index = 0;\n l
ength = source.length;\n lookahead = null;\n state = {\n
labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n glob
al.esprima = {\n parse: parse\n };\n})(this);\n","// Copyright (c) 201
4 The Polymer Project Authors. All rights reserved.\n// This code may only be us
ed under the BSD style license found at http://polymer.github.io/LICENSE.txt\n//
The complete set of authors may be found at http://polymer.github.io/AUTHORS.tx
t\n// The complete set of contributors may be found at http://polymer.github.io/
CONTRIBUTORS.txt\n// Code distributed by Google as part of the polymer project i
s also\n// subject to an additional IP rights grant found at http://polymer.gith
ub.io/PATENTS.txt\n\n(function (global) {\n 'use strict';\n\n function prepare
Binding(expressionText, name, node, filterRegistry) {\n var expression;\n
try {\n expression = getExpression(expressionText);\n if (expression.s
copeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node
.tagName !== 'TEMPLATE' ||\n (name !== 'bind' && name !== 'repeat')))
{\n throw Error('as and in can only be used within <template bind/repeat>
');\n }\n } catch (ex) {\n console.error('Invalid expression syntax
: ' + expressionText, ex);\n return;\n }\n\n return function(model, n
ode, oneTime) {\n var binding = expression.getBinding(model, filterRegistry
, oneTime);\n if (expression.scopeIdent && binding) {\n node.polymer
ExpressionScopeIdent_ = expression.scopeIdent;\n if (expression.indexIden
t)\n node.polymerExpressionIndexIdent_ = expression.indexIdent;\n
}\n\n return binding;\n }\n }\n\n // TODO(rafaelw): Implement simple L
RU.\n var expressionParseCache = Object.create(null);\n\n function getExpressi
on(expressionText) {\n var expression = expressionParseCache[expressionText];
\n if (!expression) {\n var delegate = new ASTDelegate();\n esprima
.parse(expressionText, delegate);\n expression = new Expression(delegate);\
n expressionParseCache[expressionText] = expression;\n }\n return exp
ression;\n }\n\n function Literal(value) {\n this.value = value;\n this.
valueFn_ = undefined;\n }\n\n Literal.prototype = {\n valueFn: function() {
\n if (!this.valueFn_) {\n var value = this.value;\n this.val
ueFn_ = function() {\n return value;\n }\n }\n\n retur
n this.valueFn_;\n }\n }\n\n function IdentPath(name) {\n this.name = na
me;\n this.path = Path.get(name);\n }\n\n IdentPath.prototype = {\n valu
eFn: function() {\n if (!this.valueFn_) {\n var name = this.name;\n
var path = this.path;\n this.valueFn_ = function(model, observer)
{\n if (observer)\n observer.addPath(model, path);\n\n
return path.getValueFrom(model);\n }\n }\n\n return this.va
lueFn_;\n },\n\n setValue: function(model, newValue) {\n if (this.pat
h.length == 1);\n model = findScope(model, this.path[0]);\n\n return
this.path.setValueFrom(model, newValue);\n }\n };\n\n function MemberExpre
ssion(object, property, accessor) {\n this.computed = accessor == '[';\n\n
this.dynamicDeps = typeof object == 'function' ||\n objec
t.dynamicDeps ||\n (this.computed && !(property instanceof
Literal));\n\n this.simplePath =\n !this.dynamicDeps &&\n (pro
perty instanceof IdentPath || property instanceof Literal) &&\n (object i
nstanceof MemberExpression || object instanceof IdentPath);\n\n this.object =
this.simplePath ? object : getFn(object);\n this.property = !this.computed |
| this.simplePath ?\n property : getFn(property);\n }\n\n MemberExpress
ion.prototype = {\n get fullPath() {\n if (!this.fullPath_) {\n\n
var parts = this.object instanceof MemberExpression ?\n this.object.
fullPath.slice() : [this.object.name];\n parts.push(this.property instanc
eof IdentPath ?\n this.property.name : this.property.value);\n
this.fullPath_ = Path.get(parts);\n }\n\n return this.fullPath_;\n
},\n\n valueFn: function() {\n if (!this.valueFn_) {\n var objec
t = this.object;\n\n if (this.simplePath) {\n var path = this.fu
llPath;\n\n this.valueFn_ = function(model, observer) {\n if
(observer)\n observer.addPath(model, path);\n\n return
path.getValueFrom(model);\n };\n } else if (!this.computed) {\n
var path = Path.get(this.property.name);\n\n this.valueFn_ = f
unction(model, observer, filterRegistry) {\n var context = object(mod
el, observer, filterRegistry);\n\n if (observer)\n obser
ver.addPath(context, path);\n\n return path.getValueFrom(context);\n
}\n } else {\n // Computed property.\n var pro
perty = this.property;\n\n this.valueFn_ = function(model, observer, fi
lterRegistry) {\n var context = object(model, observer, filterRegistr
y);\n var propName = property(model, observer, filterRegistry);\n
if (observer)\n observer.addPath(context, [propName]);\n\n
return context ? context[propName] : undefined;\n };\n
}\n }\n return this.valueFn_;\n },\n\n setValue: function(mode
l, newValue) {\n if (this.simplePath) {\n this.fullPath.setValueFrom
(model, newValue);\n return newValue;\n }\n\n var object = this
.object(model);\n var propName = this.property instanceof IdentPath ? this.
property.name :\n this.property(model);\n return object[propName]
= newValue;\n }\n };\n\n function Filter(name, args) {\n this.name = nam
e;\n this.args = [];\n for (var i = 0; i < args.length; i++) {\n this
.args[i] = getFn(args[i]);\n }\n }\n\n Filter.prototype = {\n transform:
function(model, observer, filterRegistry, toModelDirection,\n
initialArgs) {\n var fn = filterRegistry[this.name];\n var conte
xt = model;\n if (fn) {\n context = undefined;\n } else {\n
fn = context[this.name];\n if (!fn) {\n console.error('Canno
t find function or filter: ' + this.name);\n return;\n }\n
}\n\n // If toModelDirection is falsey, then the \"normal\" (dom-bound) dir
ection\n // is used. Otherwise, it looks for a 'toModel' property function
on the\n // object.\n if (toModelDirection) {\n fn = fn.toModel
;\n } else if (typeof fn.toDOM == 'function') {\n fn = fn.toDOM;\n
}\n\n if (typeof fn != 'function') {\n console.error('Cannot fin
d function or filter: ' + this.name);\n return;\n }\n\n var arg
s = initialArgs || [];\n for (var i = 0; i < this.args.length; i++) {\n
args.push(getFn(this.args[i])(model, observer, filterRegistry));\n }\n\
n return fn.apply(context, args);\n }\n };\n\n function notImplemented
() { throw Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': fun
ction(v) { return +v; },\n '-': function(v) { return -v; },\n '!': functio
n(v) { return !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r)
{ return l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l,
r) { return l*r; },\n '/': function(l, r) { return l/r; },\n '%': functio
n(l, r) { return l%r; },\n '<': function(l, r) { return l<r; },\n '>': fun
ction(l, r) { return l>r; },\n '<=': function(l, r) { return l<=r; },\n '>
=': function(l, r) { return l>=r; },\n '==': function(l, r) { return l==r; },
\n '!=': function(l, r) { return l!=r; },\n '===': function(l, r) { return
l===r; },\n '!==': function(l, r) { return l!==r; },\n '&&': function(l,
r) { return l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n func
tion getFn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n
}\n\n function ASTDelegate() {\n this.expression = null;\n this.filters
= [];\n this.deps = {};\n this.currentPath = undefined;\n this.scopeIde
nt = undefined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;
\n }\n\n ASTDelegate.prototype = {\n createUnaryExpression: function(op, ar
gument) {\n if (!unaryOperators[op])\n throw Error('Disallowed opera
tor: ' + op);\n\n argument = getFn(argument);\n\n return function(mode
l, observer, filterRegistry) {\n return unaryOperators[op](argument(model
, observer, filterRegistry));\n };\n },\n\n createBinaryExpression: f
unction(op, left, right) {\n if (!binaryOperators[op])\n throw Error
('Disallowed operator: ' + op);\n\n left = getFn(left);\n right = getF
n(right);\n\n return function(model, observer, filterRegistry) {\n r
eturn binaryOperators[op](left(model, observer, filterRegistry),\n
right(model, observer, filterRegistry));\n };\n },\
n\n createConditionalExpression: function(test, consequent, alternate) {\n
test = getFn(test);\n consequent = getFn(consequent);\n alternate =
getFn(alternate);\n\n return function(model, observer, filterRegistry) {\n
return test(model, observer, filterRegistry) ?\n consequent(m
odel, observer, filterRegistry) :\n alternate(model, observer, filter
Registry);\n }\n },\n\n createIdentifier: function(name) {\n var
ident = new IdentPath(name);\n ident.type = 'Identifier';\n return id
ent;\n },\n\n createMemberExpression: function(accessor, object, property)
{\n var ex = new MemberExpression(object, property, accessor);\n if (
ex.dynamicDeps)\n this.dynamicDeps = true;\n return ex;\n },\n\n
createCallExpression: function(expression, args) {\n if (!(expression in
stanceof IdentPath))\n throw Error('Only identifier function invocations
are allowed');\n\n var filter = new Filter(expression.name, args);\n\n
return function(model, observer, filterRegistry) {\n return filter.trans
form(model, observer, filterRegistry, false);\n };\n },\n\n createLit
eral: function(token) {\n return new Literal(token.value);\n },\n\n c
reateArrayExpression: function(elements) {\n for (var i = 0; i < elements.l
ength; i++)\n elements[i] = getFn(elements[i]);\n\n return function(
model, observer, filterRegistry) {\n var arr = []\n for (var i = 0
; i < elements.length; i++)\n arr.push(elements[i](model, observer, fil
terRegistry));\n return arr;\n }\n },\n\n createProperty: func
tion(kind, key, value) {\n return {\n key: key instanceof IdentPath
? key.name : key.value,\n value: value\n };\n },\n\n createObj
ectExpression: function(properties) {\n for (var i = 0; i < properties.leng
th; i++)\n properties[i].value = getFn(properties[i].value);\n\n ret
urn function(model, observer, filterRegistry) {\n var obj = {};\n
for (var i = 0; i < properties.length; i++)\n obj[properties[i].key] =\
n properties[i].value(model, observer, filterRegistry);\n re
turn obj;\n }\n },\n\n createFilter: function(name, args) {\n th
is.filters.push(new Filter(name, args));\n },\n\n createAsExpression: func
tion(expression, scopeIdent) {\n this.expression = expression;\n this.
scopeIdent = scopeIdent;\n },\n\n createInExpression: function(scopeIdent,
indexIdent, expression) {\n this.expression = expression;\n this.scop
eIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\n\n createT
opLevel: function(expression) {\n this.expression = expression;\n },\n\n
createThisExpression: notImplemented\n }\n\n function ConstantObservable(v
alue) {\n this.value_ = value;\n }\n\n ConstantObservable.prototype = {\n
open: function() { return this.value_; },\n discardChanges: function() { re
turn this.value_; },\n deliver: function() {},\n close: function() {},\n
}\n\n function Expression(delegate) {\n this.scopeIdent = delegate.scopeIden
t;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegate.expression)\
n throw Error('No expression found.');\n\n this.expression = delegate.ex
pression;\n getFn(this.expression); // forces enumeration of path dependencie
s\n\n this.filters = delegate.filters;\n this.dynamicDeps = delegate.dynam
icDeps;\n }\n\n Expression.prototype = {\n getBinding: function(model, filt
erRegistry, oneTime) {\n if (oneTime)\n return this.getValue(model,
undefined, filterRegistry);\n\n var observer = new CompoundObserver();\n
// captures deps.\n var firstValue = this.getValue(model, observer, filt
erRegistry);\n var firstTime = true;\n var self = this;\n\n funct
ion valueFn() {\n // deps cannot have changed on first value retrieval.\n
if (firstTime) {\n firstTime = false;\n return firstVa
lue;\n }\n\n if (self.dynamicDeps)\n observer.startReset(
);\n\n var value = self.getValue(model,\n
self.dynamicDeps ? observer : undefined,\n fi
lterRegistry);\n if (self.dynamicDeps)\n observer.finishReset();
\n\n return value;\n }\n\n function setValueFn(newValue) {\n
self.setValue(model, newValue, filterRegistry);\n return newValue;\n
}\n\n return new ObserverTransform(observer, valueFn, setValueFn, tru
e);\n },\n\n getValue: function(model, observer, filterRegistry) {\n
var value = getFn(this.expression)(model, observer, filterRegistry);\n for
(var i = 0; i < this.filters.length; i++) {\n value = this.filters[i].tra
nsform(model, observer, filterRegistry,\n false, [value]);\n }\n
\n return value;\n },\n\n setValue: function(model, newValue, filterR
egistry) {\n var count = this.filters ? this.filters.length : 0;\n whi
le (count-- > 0) {\n newValue = this.filters[count].transform(model, unde
fined,\n filterRegistry, true, [newValue]);\n }\n\n if (thi
s.expression.setValue)\n return this.expression.setValue(model, newValue)
;\n }\n }\n\n /**\n * Converts a style property name to a css property na
me. For example:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n
function convertStylePropertyName(name) {\n return String(name).replace(/[A-
Z]/g, function(c) {\n return '-' + c.toLowerCase();\n });\n }\n\n var
parentScopeName = '@' + Math.random().toString(36).slice(2);\n\n // Single iden
t paths must bind directly to the appropriate scope object.\n // I.e. Pushed va
lues in two-bindings need to be assigned to the actual model\n // object.\n fu
nction findScope(model, prop) {\n while (model[parentScopeName] &&\n
!Object.prototype.hasOwnProperty.call(model, prop)) {\n model = model[par
entScopeName];\n }\n\n return model;\n }\n\n function isLiteralExpressio
n(pathString) {\n switch (pathString) {\n case '':\n return false
;\n\n case 'false':\n case 'null':\n case 'true':\n return
true;\n }\n\n if (!isNaN(Number(pathString)))\n return true;\n\n
return false;\n };\n\n function PolymerExpressions() {}\n\n PolymerExpression
s.prototype = {\n // \"built-in\" filters\n styleObject: function(value) {
\n var parts = [];\n for (var key in value) {\n parts.push(conv
ertStylePropertyName(key) + ': ' + value[key]);\n }\n return parts.joi
n('; ');\n },\n\n tokenList: function(value) {\n var tokens = [];\n
for (var key in value) {\n if (value[key])\n tokens.push(key
);\n }\n return tokens.join(' ');\n },\n\n // binding delegate A
PI\n prepareInstancePositionChanged: function(template) {\n var indexIde
nt = template.polymerExpressionIndexIdent_;\n if (!indexIdent)\n ret
urn;\n\n return function(templateInstance, index) {\n templateInstan
ce.model[indexIdent] = index;\n };\n },\n\n prepareBinding: function(
pathString, name, node) {\n var path = Path.get(pathString);\n\n if (!
isLiteralExpression(pathString) && path.valid) {\n if (path.length == 1)
{\n return function(model, node, oneTime) {\n if (oneTime)\n
return path.getValueFrom(model);\n\n var scope = findSc
ope(model, path[0]);\n return new PathObserver(scope, path);\n
};\n }\n return; // bail out early if pathString is simple path
.\n }\n\n return prepareBinding(pathString, name, node, this);\n },
\n\n prepareInstanceModel: function(template) {\n var scopeName = templa
te.polymerExpressionScopeIdent_;\n if (!scopeName)\n return;\n\n
var parentScope = template.templateInstance ?\n template.templateInst
ance.model :\n template.model;\n\n var indexName = template.polyme
rExpressionIndexIdent_;\n\n return function(model) {\n return create
ScopeObject(parentScope, model, scopeName, indexName);\n };\n }\n };\n\
n var createScopeObject = ('__proto__' in {}) ?\n function(parentScope, mode
l, scopeName, indexName) {\n var scope = {};\n scope[scopeName] = mode
l;\n scope[indexName] = undefined;\n scope[parentScopeName] = parentSc
ope;\n scope.__proto__ = parentScope;\n return scope;\n } :\n fu
nction(parentScope, model, scopeName, indexName) {\n var scope = Object.cre
ate(parentScope);\n Object.defineProperty(scope, scopeName,\n { va
lue: model, configurable: true, writable: true });\n Object.defineProperty(
scope, indexName,\n { value: undefined, configurable: true, writable: t
rue });\n Object.defineProperty(scope, parentScopeName,\n { value:
parentScope, configurable: true, writable: true });\n return scope;\n }
;\n\n global.PolymerExpressions = PolymerExpressions;\n PolymerExpressions.get
Expression = getExpression;\n})(this);\n","/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com
plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.
txt\n * Code distributed by Google as part of the polymer project is also\n * su
bject to an additional IP rights grant found at http://polymer.github.io/PATENTS
.txt\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a funct
ion\n// Platform is currently defining it as a function to allow for async loadi
ng\n// of polymer; once we refine the loading process this likely goes away.\nif
(typeof window.Polymer === 'function') {\n Polymer = {};\n}\n\n","/*\n * Copyr
ight (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code ma
y only be used under the BSD style license found at http://polymer.github.io/LIC
ENSE.txt\n * The complete set of authors may be found at http://polymer.github.i
o/AUTHORS.txt\n * The complete set of contributors may be found at http://polyme
r.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polym
er project is also\n * subject to an additional IP rights grant found at http://
polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // copy own proper
ties from 'api' to 'prototype, with name hinting for 'super'\n function extend(
prototype, api) {\n if (prototype && api) {\n // use only own properties
of 'api'\n Object.getOwnPropertyNames(api).forEach(function(n) {\n
// acquire property descriptor\n var pd = Object.getOwnPropertyDescriptor
(api, n);\n if (pd) {\n // clone property via descriptor\n
Object.defineProperty(prototype, n, pd);\n // cache name-of-method
for 'super' engine\n if (typeof pd.value == 'function') {\n
// hint the 'super' engine\n pd.value.nom = n;\n }\n
}\n });\n }\n return prototype;\n }\n \n // exports\n\n scope.ext
end = extend;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\n * This code may only be used under the BSD style
license found at http://polymer.github.io/LICENSE.txt\n * The complete set of a
uthors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set
of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * C
ode distributed by Google as part of the polymer project is also\n * subject to
an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */
\n\n(function(scope) {\n \n // usage\n \n // invoke cb.call(this) in 100ms,
unless the job is re-registered,\n // which resets the timer\n // \n // this.
myJob = this.job(this.myJob, cb, 100)\n //\n // returns a job handle which can
be used to re-register a job\n\n var Job = function(inContext) {\n this.con
text = inContext;\n this.boundComplete = this.complete.bind(this)\n };\n Jo
b.prototype = {\n go: function(callback, wait) {\n this.callback = callb
ack;\n var h;\n if (!wait) {\n h = requestAnimationFrame(this.b
oundComplete);\n this.handle = function() {\n cancelAnimationFra
me(h);\n }\n } else {\n h = setTimeout(this.boundComplete, wa
it);\n this.handle = function() {\n clearTimeout(h);\n }\
n }\n },\n stop: function() {\n if (this.handle) {\n this
.handle();\n this.handle = null;\n }\n },\n complete: function
() {\n if (this.handle) {\n this.stop();\n this.callback.call
(this.context);\n }\n }\n };\n \n function job(job, callback, wait) {
\n if (job) {\n job.stop();\n } else {\n job = new Job(this);\n
}\n job.go(callback, wait);\n return job;\n }\n \n // exports \n\n
scope.job = job;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Pro
ject Authors. All rights reserved.\n * This code may only be used under the BSD
style license found at http://polymer.github.io/LICENSE.txt\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complet
e set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\
n * Code distributed by Google as part of the polymer project is also\n * subjec
t to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
\n */\n\n(function(scope) {\n\n var registry = {};\n\n HTMLElement.register =
function(tag, prototype) {\n registry[tag] = prototype;\n }\n\n // get prot
otype mapped to node <tag>\n HTMLElement.getPrototypeForTag = function(tag) {\n
var prototype = !tag ? HTMLElement.prototype : registry[tag];\n // TODO(s
jmiles): creating <tag> is likely to have wasteful side-effects\n return prot
otype || Object.getPrototypeOf(document.createElement(tag));\n };\n\n // we ha
ve to flag propagation stoppage for the event dispatcher\n var originalStopProp
agation = Event.prototype.stopPropagation;\n Event.prototype.stopPropagation =
function() {\n this.cancelBubble = true;\n originalStopPropagation.apply(t
his, arguments);\n };\n \n // TODO(sorvell): remove when we're sure imports d
oes not need\n // to load stylesheets\n /*\n HTMLImports.importer.preloadSele
ctors += \n ', polymer-element link[rel=stylesheet]';\n */\n})(Polymer);\n
","/*\r\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\r\n * This code may only be used under the BSD style license found at http://po
lymer.github.io/LICENSE.txt\r\n * The complete set of authors may be found at ht
tp://polymer.github.io/AUTHORS.txt\r\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\r\n * Code distributed by Go
ogle as part of the polymer project is also\r\n * subject to an additional IP ri
ghts grant found at http://polymer.github.io/PATENTS.txt\r\n */\r\n\r\n (functio
n(scope) {\r\n // super\r\n\r\n // `arrayOfArgs` is an optional array of a
rgs like one might pass\r\n // to `Function.apply`\r\n\r\n // TODO(sjmiles
):\r\n // $super must be installed on an instance or prototype chain\r\n
// as `super`, and invoked via `this`, e.g.\r\n // `this.super();`\
r\n\r\n // will not work if function objects are not unique, for example,\
r\n // when using mixins.\r\n // The memoization strategy assumes ea
ch function exists on only one \r\n // prototype chain i.e. we use the fun
ction object for memoizing)\r\n // perhaps we can bookkeep on the prototyp
e itself instead\r\n function $super(arrayOfArgs) {\r\n // since we are
thunking a method call, performance is important here: \r\n // memoize all
lookups, once memoized the fast path calls no other \r\n // functions\r\n
//\r\n // find the caller (cannot be `strict` because of 'caller')\r\n
var caller = $super.caller;\r\n // memoized 'name of method' \r\n
var nom = caller.nom;\r\n // memoized next implementation prototype\r\n
var _super = caller._super;\r\n if (!_super) {\r\n if (!nom) {\r\
n nom = caller.nom = nameInThis.call(this, caller);\r\n }\r\n
if (!nom) {\r\n console.warn('called super() on a method not insta
lled declaratively (has no .nom property)');\r\n }\r\n // super pr
ototype is either cached or we have to find it\r\n // by searching __prot
o__ (at the 'top')\r\n // invariant: because we cache _super on fn below,
we never reach \r\n // here from inside a series of calls to super(), so
it's ok to \r\n // start searching from the prototype of 'this' (at the
'top')\r\n // we must never memoize a null super for this reason\r\n
_super = memoizeSuper(caller, nom, getPrototypeOf(this));\r\n }\r\n
// our super function\r\n var fn = _super[nom];\r\n if (fn) {\r\n
// memoize information so 'fn' can call 'super'\r\n if (!fn._super) {
\r\n // must not memoize null, or we lose our invariant above\r\n
memoizeSuper(fn, nom, _super);\r\n }\r\n // invoke the inherit
ed method\r\n // if 'fn' is not function valued, this will throw\r\n
return fn.apply(this, arrayOfArgs || []);\r\n }\r\n }\r\n\r\n func
tion nameInThis(value) {\r\n var p = this.__proto__;\r\n while (p && p
!== HTMLElement.prototype) {\r\n // TODO(sjmiles): getOwnPropertyNames i
s absurdly expensive\r\n var n$ = Object.getOwnPropertyNames(p);\r\n
for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\r\n var d = O
bject.getOwnPropertyDescriptor(p, n);\r\n if (typeof d.value === 'funct
ion' && d.value === value) {\r\n return n;\r\n }\r\n
}\r\n p = p.__proto__;\r\n }\r\n }\r\n\r\n function memoizeSup
er(method, name, proto) {\r\n // find and cache next prototype containing `
name`\r\n // we need the prototype so we can do another lookup\r\n //
from here\r\n var s = nextSuper(proto, name, method);\r\n if (s[name])
{\r\n // `s` is a prototype, the actual method is `s[name]`\r\n /
/ tag super method with it's name for quicker lookups\r\n s[name].nom = n
ame;\r\n }\r\n return method._super = s;\r\n }\r\n\r\n function
nextSuper(proto, name, caller) {\r\n // look for an inherited prototype tha
t implements name\r\n while (proto) {\r\n if ((proto[name] !== calle
r) && proto[name]) {\r\n return proto;\r\n }\r\n proto =
getPrototypeOf(proto);\r\n }\r\n // must not return null, or we lose o
ur invariant above\r\n // in this case, a super() call was invoked where no
superclass\r\n // method exists\r\n // TODO(sjmiles): thow an excepti
on?\r\n return Object;\r\n }\r\n\r\n // NOTE: In some platforms (IE10
) the prototype chain is faked via \r\n // __proto__. Therefore, always get p
rototype via __proto__ instead of\r\n // the more standard Object.getPrototyp
eOf.\r\n function getPrototypeOf(prototype) {\r\n return prototype.__pro
to__;\r\n }\r\n\r\n // utility function to precompute name tags for functi
ons\r\n // in a (unchained) prototype\r\n function hintSuper(prototype) {\
r\n // tag functions with their prototype name to optimize\r\n // supe
r call invocations\r\n for (var n in prototype) {\r\n var pd = Objec
t.getOwnPropertyDescriptor(prototype, n);\r\n if (pd && typeof pd.value =
== 'function') {\r\n pd.value.nom = n;\r\n }\r\n }\r\n }
\r\n\r\n // exports\r\n\r\n scope.super = $super;\r\n\r\n})(Polymer);\r\n"
,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polymer
.github.io/LICENSE.txt\n * The complete set of authors may be found at http://po
lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par
t of the polymer project is also\n * subject to an additional IP rights grant fo
und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var
typeHandlers = {\n string: function(value) {\n return value;\n },\n
date: function(value) {\n return new Date(Date.parse(value) || Date.now()
);\n },\n boolean: function(value) {\n if (value === '') {\n r
eturn true;\n }\n return value === 'false' ? false : !!value;\n },\
n number: function(value) {\n var n = parseFloat(value);\n // hex v
alues like \"0xFFFF\" parseFloat as 0\n if (n === 0) {\n n = parseIn
t(value);\n }\n return isNaN(n) ? value : n;\n // this code disab
led because encoded values (like \"0xFFFF\")\n // do not round trip to thei
r original format\n //return (String(floatVal) === value) ? floatVal : valu
e;\n },\n object: function(value, currentValue) {\n if (currentValue
=== null) {\n return value;\n }\n try {\n // If the stri
ng is an object, we can parse is with the JSON library.\n // include conv
enience replace for single-quotes. If the author omits\n // quotes altoge
ther, parse will fail.\n return JSON.parse(value.replace(/'/g, '\"'));\n
} catch(e) {\n // The object isn't valid JSON, return the raw value\
n return value;\n }\n },\n // avoid deserialization of functio
ns\n 'function': function(value, currentValue) {\n return currentValue;\
n }\n };\n\n function deserializeValue(value, currentValue) {\n // attem
pt to infer type from default value\n var inferredType = typeof currentValue;
\n // invent 'date' type value for Date\n if (currentValue instanceof Date
) {\n inferredType = 'date';\n }\n // delegate deserialization via ty
pe string\n return typeHandlers[inferredType](value, currentValue);\n }\n\n
// exports\n\n scope.deserializeValue = deserializeValue;\n\n})(Polymer);\n","
/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n *
This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt\n * The complete set of authors may be found at http://poly
mer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at h
ttp://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part
of the polymer project is also\n * subject to an additional IP rights grant foun
d at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n // impor
ts\n\n var extend = scope.extend;\n\n // module\n\n var api = {};\n\n api.de
claration = {};\n api.instance = {};\n\n api.publish = function(apis, prototyp
e) {\n for (var n in apis) {\n extend(prototype, apis[n]);\n }\n };\
n\n // exports\n\n scope.api = api;\n\n})(Polymer);\n","/*\n * Copyright (c) 2
014 The Polymer Project Authors. All rights reserved.\n * This code may only be
used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.
txt\n * The complete set of contributors may be found at http://polymer.github.i
o/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project
is also\n * subject to an additional IP rights grant found at http://polymer.gi
thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var utils = {\n /**\n
* Invokes a function asynchronously. The context of the callback\n * func
tion is bound to 'this' automatically.\n * @method async\n * @param {F
unction|String} method\n * @param {any|Array} args\n * @param {number}
timeout\n */\n async: function(method, args, timeout) {\n // when
polyfilling Object.observe, ensure changes \n // propagate before executing
the async method\n Platform.flush();\n // second argument to `apply`
must be an array\n args = (args && args.length) ? args : [args];\n //
function to invoke\n var fn = function() {\n (this[method] || method
).apply(this, args);\n }.bind(this);\n // execute `fn` sooner or later
\n var handle = timeout ? setTimeout(fn, timeout) :\n requestAnima
tionFrame(fn);\n // NOTE: switch on inverting handle to determine which tim
e is used.\n return timeout ? handle : ~handle;\n },\n cancelAsync: f
unction(handle) {\n if (handle < 0) {\n cancelAnimationFrame(~handle
);\n } else {\n clearTimeout(handle);\n }\n },\n /**\n
* Fire an event.\n * @method fire\n * @returns {Object} event\n
* @param {string} type An event name.\n * @param {any} detail\n * @p
aram {Node} onNode Target node.\n */\n fire: function(type, detail, onNo
de, bubbles, cancelable) {\n var node = onNode || this;\n var detail =
detail || {};\n var event = new CustomEvent(type, {\n bubbles: (bub
bles !== undefined ? bubbles : true), \n cancelable: (cancelable !== unde
fined ? cancelable : true), \n detail: detail\n });\n node.disp
atchEvent(event);\n return event;\n },\n /**\n * Fire an event a
synchronously.\n * @method asyncFire\n * @param {string} type An event
name.\n * @param detail\n * @param {Node} toNode Target node.\n
*/\n asyncFire: function(/*inType, inDetail*/) {\n this.async(\"fire\",
arguments);\n },\n /**\n * Remove class from old, add class to anew,
if they exist.\n * @param classFollows\n * @param anew A node.\n
* @param old A node\n * @param className\n */\n classFollows: funct
ion(anew, old, className) {\n if (old) {\n old.classList.remove(clas
sName);\n }\n if (anew) {\n anew.classList.add(className);\n
}\n },\n /**\n * Inject HTML which contains markup bound to this e
lement into\n * a target element (replacing target element content).\n
* @param String html to inject\n * @param Element target element\n */
\n injectBoundHTML: function(html, element) {\n var template = document.
createElement('template');\n template.innerHTML = html;\n var fragment
= this.instanceTemplate(template);\n if (element) {\n element.textC
ontent = '';\n element.appendChild(fragment);\n }\n return frag
ment;\n }\n };\n\n // no-operation function for handy stubs\n var nop = fu
nction() {};\n\n // null-object for handy stubs\n var nob = {};\n\n // deprec
ated\n\n utils.asyncMethod = utils.async;\n\n // exports\n\n scope.api.instan
ce.utils = utils;\n scope.nop = nop;\n scope.nob = nob;\n\n})(Polymer);\n","/*
\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Th
is code may only be used under the BSD style license found at http://polymer.git
hub.io/LICENSE.txt\n * The complete set of authors may be found at http://polyme
r.github.io/AUTHORS.txt\n * The complete set of contributors may be found at htt
p://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of
the polymer project is also\n * subject to an additional IP rights grant found
at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // impor
ts\n\n var log = window.logFlags || {};\n var EVENT_PREFIX = 'on-';\n\n // in
stance events api\n var events = {\n // read-only\n EVENT_PREFIX: EVENT_P
REFIX,\n // event listeners on host\n addHostListeners: function() {\n
var events = this.eventDelegates;\n log.events && (Object.keys(events).le
ngth > 0) && console.log('[%s] addHostListeners:', this.localName, events);\n
// NOTE: host events look like bindings but really are not;\n // (1) we
don't want the attribute to be set and (2) we want to support\n // multiple
event listeners ('host' and 'instance') and Node.bind\n // by default supp
orts 1 thing being bound.\n for (var type in events) {\n var methodN
ame = events[type];\n this.addEventListener(type, this.element.getEventHa
ndler(this, this,\n
methodName));\n }\n },\n // call 'method' or function method on '
obj' with 'args', if the method exists\n dispatchMethod: function(obj, method
, args) {\n if (obj) {\n log.events && console.group('[%s] dispatch
[%s]', obj.localName, method);\n var fn = typeof method === 'function' ?
method : obj[method];\n if (fn) {\n fn[args ? 'apply' : 'call'](
obj, args);\n }\n log.events && console.groupEnd();\n Platf
orm.flush();\n }\n }\n };\n\n // exports\n\n scope.api.instance.event
s = events;\n\n})(Polymer);\n","/*\r\n * Copyright (c) 2014 The Polymer Project
Authors. All rights reserved.\r\n * This code may only be used under the BSD sty
le license found at http://polymer.github.io/LICENSE.txt\r\n * The complete set
of authors may be found at http://polymer.github.io/AUTHORS.txt\r\n * The comple
te set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
\r\n * Code distributed by Google as part of the polymer project is also\r\n * s
ubject to an additional IP rights grant found at http://polymer.github.io/PATENT
S.txt\r\n */\r\n\r\n(function(scope) {\r\n\r\n // instance api for attributes\r
\n\r\n var attributes = {\r\n copyInstanceAttributes: function () {\r\n
var a$ = this._instanceAttributes;\r\n for (var k in a$) {\r\n if (
!this.hasAttribute(k)) {\r\n this.setAttribute(k, a$[k]);\r\n }\
r\n }\r\n },\r\n // for each attribute on this, deserialize value to
property as needed\r\n takeAttributes: function() {\r\n // if we have no
publish lookup table, we have no attributes to take\r\n // TODO(sjmiles):
ad hoc\r\n if (this._publishLC) {\r\n for (var i=0, a$=this.attribut
es, l=a$.length, a; (a=a$[i]) && i<l; i++) {\r\n this.attributeToProper
ty(a.name, a.value);\r\n }\r\n }\r\n },\r\n // if attribute 'n
ame' is mapped to a property, deserialize\r\n // 'value' into that property\r
\n attributeToProperty: function(name, value) {\r\n // try to match this
attribute to a property (attributes are\r\n // all lower-case, so this is
case-insensitive search)\r\n var name = this.propertyForAttribute(name);\r\
n if (name) {\r\n // filter out 'mustached' values, these are to be\
r\n // replaced with bound-data and are not yet values\r\n // them
selves\r\n if (value && value.search(scope.bindPattern) >= 0) {\r\n
return;\r\n }\r\n // get original value\r\n var current
Value = this[name];\r\n // deserialize Boolean or Number values from attr
ibute\r\n var value = this.deserializeValue(value, currentValue);\r\n
// only act if the value has changed\r\n if (value !== currentValue)
{\r\n // install new value (has side-effects)\r\n this[name] =
value;\r\n }\r\n }\r\n },\r\n // return the published propert
y matching name, or undefined\r\n propertyForAttribute: function(name) {\r\n
var match = this._publishLC && this._publishLC[name];\r\n //console.lo
g('propertyForAttribute:', name, 'matches', match);\r\n return match;\r\n
},\r\n // convert representation of 'stringValue' based on type of 'current
Value'\r\n deserializeValue: function(stringValue, currentValue) {\r\n r
eturn scope.deserializeValue(stringValue, currentValue);\r\n },\r\n serial
izeValue: function(value, inferredType) {\r\n if (inferredType === 'boolean
') {\r\n return value ? '' : undefined;\r\n } else if (inferredType
!== 'object' && inferredType !== 'function'\r\n && value !== undefined)
{\r\n return value;\r\n }\r\n },\r\n reflectPropertyToAttribu
te: function(name) {\r\n var inferredType = typeof this[name];\r\n //
try to intelligently serialize property value\r\n var serializedValue = thi
s.serializeValue(this[name], inferredType);\r\n // boolean properties must
reflect as boolean attributes\r\n if (serializedValue !== undefined) {\r\n
this.setAttribute(name, serializedValue);\r\n // TODO(sorvell): we
should remove attr for all properties\r\n // that have undefined seriali
zation; however, we will need to\r\n // refine the attr reflection system
to achieve this; pica, for example,\r\n // relies on having inferredType
object properties not removed as\r\n // attrs.\r\n } else if (infer
redType === 'boolean') {\r\n this.removeAttribute(name);\r\n }\r\n
}\r\n };\r\n\r\n // exports\r\n\r\n scope.api.instance.attributes = attribu
tes;\r\n\r\n})(Polymer);\r\n","/*\n * Copyright (c) 2014 The Polymer Project Aut
hors. All rights reserved.\n * This code may only be used under the BSD style li
cense found at http://polymer.github.io/LICENSE.txt\n * The complete set of auth
ors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of
contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code
distributed by Google as part of the polymer project is also\n * subject to an
additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\
n(function(scope) {\n\n // imports\n\n var log = window.logFlags || {};\n\n /
/ magic words\n\n var OBSERVE_SUFFIX = 'Changed';\n\n // element api\n\n var
empty = [];\n\n var updateRecord = {\n object: undefined,\n type: 'update
',\n name: undefined,\n oldValue: undefined\n };\n\n var numberIsNaN = N
umber.isNaN || function(value) {\n return typeof value === 'number' && isNaN(
value);\n }\n\n function areSameValue(left, right) {\n if (left === right)\
n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left) &
& numberIsNaN(right))\n return true;\n\n return left !== left && right !
== right;\n }\n\n // capture A's value if B's value is null or undefined,\n /
/ otherwise use B's value\n function resolveBindingValue(oldValue, value) {\n
if (value === undefined && oldValue === null) {\n return value;\n }\n
return (value === null || value === undefined) ? oldValue : value;\n }\n\n
var properties = {\n createPropertyObserver: function() {\n var n$ = thi
s._observeNames;\n if (n$ && n$.length) {\n var o = this._propertyOb
server = new CompoundObserver(true);\n this.registerObserver(o);\n
// TODO(sorvell): may not be kosher to access the value here (this[n]);\n
// previously we looked at the descriptor on the prototype\n // this do
esn't work for inheritance and not for accessors without\n // a value pro
perty\n for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n
o.addPath(this, n);\n this.observeArrayValue(n, this[n], null);\n
}\n }\n },\n openPropertyObserver: function() {\n if (this.
_propertyObserver) {\n this._propertyObserver.open(this.notifyPropertyCha
nges, this);\n }\n },\n notifyPropertyChanges: function(newValues, ol
dValues, paths) {\n var name, method, called = {};\n for (var i in old
Values) {\n // note: paths is of form [object, path, object, path]\n
name = paths[2 * i + 1];\n method = this.observe[name];\n if (m
ethod) {\n var ov = oldValues[i], nv = newValues[i];\n // obse
rves the value if it is an array\n this.observeArrayValue(name, nv, ov)
;\n if (!called[method]) {\n // only invoke change method if
one of ov or nv is not (undefined | null)\n if ((ov !== undefined &&
ov !== null) || (nv !== undefined && nv !== null)) {\n called[meth
od] = true;\n // TODO(sorvell): call method with the set of values
it's expecting;\n // e.g. 'foo bar': 'invalidate' expects the new a
nd old values for\n // foo and bar. Currently we give only one of t
hese and then\n // deliver all the arguments.\n this.i
nvokeMethod(method, [ov, nv, arguments]);\n }\n }\n }
\n }\n },\n deliverChanges: function() {\n if (this._propertyObs
erver) {\n this._propertyObserver.deliver();\n }\n },\n proper
tyChanged_: function(name, value, oldValue) {\n if (this.reflect[name]) {\n
this.reflectPropertyToAttribute(name);\n }\n },\n observeArra
yValue: function(name, value, old) {\n // we only care if there are registe
red side-effects\n var callbackName = this.observe[name];\n if (callba
ckName) {\n // if we are observing the previous value, stop\n if (
Array.isArray(old)) {\n log.observe && console.log('[%s] observeArrayVa
lue: unregister observer [%s]', this.localName, name);\n this.closeName
dObserver(name + '__array');\n }\n // if the new value is an array
, being observing it\n if (Array.isArray(value)) {\n log.observe
&& console.log('[%s] observeArrayValue: register observer [%s]', this.localName
, name, value);\n var observer = new ArrayObserver(value);\n o
bserver.open(function(value, old) {\n this.invokeMethod(callbackName,
[old]);\n }, this);\n this.registerNamedObserver(name + '__ar
ray', observer);\n }\n }\n },\n emitPropertyChangeRecord: func
tion(name, value, oldValue) {\n var object = this;\n if (areSameValue(
value, oldValue))\n return;\n\n this.propertyChanged_(name, value, o
ldValue);\n\n if (!Observer.hasObjectObserve)\n return;\n\n var
notifier = this.notifier_;\n if (!notifier)\n notifier = this.notif
ier_ = Object.getNotifier(this);\n\n updateRecord.object = this;\n upd
ateRecord.name = name;\n updateRecord.oldValue = oldValue;\n\n notifie
r.notify(updateRecord);\n },\n bindToAccessor: function(name, observable,
resolveFn) {\n var privateName = name + '_';\n var privateObservable
= name + 'Observable_';\n\n this[privateObservable] = observable;\n va
r oldValue = this[privateName];\n\n var self = this;\n var value = obs
ervable.open(function(value, oldValue) {\n self[privateName] = value;\n
self.emitPropertyChangeRecord(name, value, oldValue);\n });\n\n
if (resolveFn && !areSameValue(oldValue, value)) {\n var resolvedValue =
resolveFn(oldValue, value);\n if (!areSameValue(value, resolvedValue)) {\
n value = resolvedValue;\n if (observable.setValue)\n
observable.setValue(value);\n }\n }\n\n this[privateName] =
value;\n this.emitPropertyChangeRecord(name, value, oldValue);\n\n var
observer = {\n close: function() {\n observable.close();\n
self[privateObservable] = undefined;\n }\n };\n this.regis
terObserver(observer);\n return observer;\n },\n createComputedProper
ties: function() {\n if (!this._computedNames) {\n return;\n }\
n\n for (var i = 0; i < this._computedNames.length; i++) {\n var nam
e = this._computedNames[i];\n var expressionText = this.computed[name];\n
try {\n var expression = PolymerExpressions.getExpression(expre
ssionText);\n var observable = expression.getBinding(this, this.element
.syntax);\n this.bindToAccessor(name, observable);\n } catch (ex
) {\n console.error('Failed to create computed property', ex);\n
}\n }\n },\n bindProperty: function(property, observable, oneTime) {
\n if (oneTime) {\n this[property] = observable;\n return;\n
}\n return this.bindToAccessor(property, observable, resolveBindingVal
ue);\n },\n invokeMethod: function(method, args) {\n var fn = this[me
thod] || method;\n if (typeof fn === 'function') {\n fn.apply(this,
args);\n }\n },\n registerObserver: function(observer) {\n if (!
this._observers) {\n this._observers = [observer];\n return;\n
}\n\n this._observers.push(observer);\n },\n // observer array item
s are arrays of observers.\n closeObservers: function() {\n if (!this._o
bservers) {\n return;\n }\n\n var observers = this._observers;\
n for (var i = 0; i < observers.length; i++) {\n var observer = obse
rvers[i];\n if (observer && typeof observer.close == 'function') {\n
observer.close();\n }\n }\n\n this._observers = [];\n }
,\n // bookkeeping observers for memory management\n registerNamedObserver
: function(name, observer) {\n var o$ = this._namedObservers || (this._name
dObservers = {});\n o$[name] = observer;\n },\n closeNamedObserver: f
unction(name) {\n var o$ = this._namedObservers;\n if (o$ && o$[name])
{\n o$[name].close();\n o$[name] = null;\n return true;\n
}\n },\n closeNamedObservers: function() {\n if (this._namedObse
rvers) {\n for (var i in this._namedObservers) {\n this.closeNam
edObserver(i);\n }\n this._namedObservers = {};\n }\n }\n
};\n\n // logging\n var LOG_OBSERVE = '[%s] watching [%s]';\n var LOG_OBSERV
ED = '[%s#%s] watch: [%s] now [%s] was [%s]';\n var LOG_CHANGED = '[%s#%s] prop
ertyChanged: [%s] now [%s] was [%s]';\n\n // exports\n\n scope.api.instance.pr
operties = properties;\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the
BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The com
plete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.
txt\n * Code distributed by Google as part of the polymer project is also\n * su
bject to an additional IP rights grant found at http://polymer.github.io/PATENTS
.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags |
| 0;\n\n // element api supporting mdv\n var mdv = {\n instanceTemplate: fu
nction(template) {\n // ensure a default bindingDelegate\n var syntax
= this.syntax || (!template.bindingDelegate &&\n this.element.syntax);\
n var dom = template.createInstance(this, syntax);\n var observers = d
om.bindings_;\n for (var i = 0; i < observers.length; i++) {\n this.
registerObserver(observers[i]);\n }\n return dom;\n },\n bind: f
unction(name, observable, oneTime) {\n var property = this.propertyForAttri
bute(name);\n if (!property) {\n // TODO(sjmiles): this mixin method
must use the special form\n // of `super` installed by `mixinMethod` in
declaration/prototype.js\n return this.mixinSuper(arguments);\n } el
se {\n // use n-way Polymer binding\n var observer = this.bindProp
erty(property, observable, oneTime);\n // NOTE: reflecting binding inform
ation is typically required only for\n // tooling. It has a performance c
ost so it's opt-in in Node.bind.\n if (Platform.enableBindingsReflection
&& observer) {\n observer.path = observable.path_;\n this._rec
ordBinding(property, observer);\n }\n if (this.reflect[property])
{\n this.reflectPropertyToAttribute(property);\n }\n retu
rn observer;\n }\n },\n bindFinished: function() {\n this.makeEl
ementReady();\n },\n _recordBinding: function(name, observer) {\n thi
s.bindings_ = this.bindings_ || {};\n this.bindings_[name] = observer;\n
},\n // TODO(sorvell): unbind/unbindAll has been removed, as public api, fro
m\n // TemplateBinding. We still need to close/dispose of observers but perha
ps\n // we should choose a more explicit name.\n asyncUnbindAll: function(
) {\n if (!this._unbound) {\n log.unbind && console.log('[%s] asyncU
nbindAll', this.localName);\n this._unbindAllJob = this.job(this._unbindA
llJob, this.unbindAll, 0);\n }\n },\n unbindAll: function() {\n
if (!this._unbound) {\n this.closeObservers();\n this.closeNamedOb
servers();\n this._unbound = true;\n }\n },\n cancelUnbindAll:
function() {\n if (this._unbound) {\n log.unbind && console.warn('[
%s] already unbound, cannot cancel unbindAll', this.localName);\n return;
\n }\n log.unbind && console.log('[%s] cancelUnbindAll', this.localNam
e);\n if (this._unbindAllJob) {\n this._unbindAllJob = this._unbindA
llJob.stop();\n }\n }\n };\n\n function unbindNodeTree(node) {\n fo
rNodeTree(node, _nodeUnbindAll);\n }\n\n function _nodeUnbindAll(node) {\n
node.unbindAll();\n }\n\n function forNodeTree(node, callback) {\n if (node
) {\n callback(node);\n for (var child = node.firstChild; child; child
= child.nextSibling) {\n forNodeTree(child, callback);\n }\n }\n
}\n\n var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n // exports\n\n scope.bi
ndPattern = mustachePattern;\n scope.api.instance.mdv = mdv;\n\n})(Polymer);\n"
,"/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n
* This code may only be used under the BSD style license found at http://polymer
.github.io/LICENSE.txt\n * The complete set of authors may be found at http://po
lymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as par
t of the polymer project is also\n * subject to an additional IP rights grant fo
und at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n var
base = {\n PolymerBase: true,\n job: function(job, callback, wait) {\n
if (typeof job === 'string') {\n var n = '___' + job;\n this[n]
= Polymer.job.call(this, this[n], callback, wait);\n } else {\n retu
rn Polymer.job.call(this, job, callback, wait);\n }\n },\n super: Pol
ymer.super,\n // user entry point for element has had its createdCallback cal
led\n created: function() {\n },\n // user entry point for element has
shadowRoot and is ready for\n // api interaction\n ready: function() {\n
},\n createdCallback: function() {\n if (this.templateInstance && this
.templateInstance.model) {\n console.warn('Attributes on ' + this.localNa
me + ' were data bound ' +\n 'prior to Polymer upgrading the element.
This may result in ' +\n 'incorrect binding types.');\n }\n
this.created();\n this.prepareElement();\n // TODO(sorvell): replace
when ShadowDOMPolyfill issue is corrected\n // https://github.com/Polymer/
ShadowDOM/issues/420\n if (!this.ownerDocument.isStagingDocument || window.
ShadowDOMPolyfill) {\n this.makeElementReady();\n }\n },\n //
system entry point, do not override\n prepareElement: function() {\n if
(this._elementPrepared) {\n console.warn('Element already prepared', this
.localName);\n return;\n }\n this._elementPrepared = true;\n
// storage for shadowRoots info\n this.shadowRoots = {};\n // insta
ll property observers\n this.createPropertyObserver();\n // TODO (sorv
ell): temporarily open observer when created\n this.openPropertyObserver();
\n // install boilerplate attributes\n this.copyInstanceAttributes();\
n // process input attributes\n this.takeAttributes();\n // add e
vent listeners\n this.addHostListeners();\n },\n makeElementReady: fu
nction() {\n if (this._readied) {\n return;\n }\n this._re
adied = true;\n this.createComputedProperties();\n // TODO(sorvell): W
e could create an entry point here\n // for the user to compute property va
lues.\n // process declarative resources\n this.parseDeclarations(this
.__proto__);\n // TODO(sorvell): CE polyfill uses unresolved attribute to s
imulate\n // :unresolved; remove this attribute to be compatible with nativ
e\n // CE.\n this.removeAttribute('unresolved');\n // user entry
point\n this.ready();\n // TODO (sorvell): temporarily open observer w
hen created\n // turn on property observation and take any initial changes\
n //this.openPropertyObserver();\n },\n attachedCallback: function()
{\n this.cancelUnbindAll();\n // invoke user action\n if (this.at
tached) {\n this.attached();\n }\n // TODO(sorvell): bc\n
if (this.enteredView) {\n this.enteredView();\n }\n // NOTE: do
mReady can be used to access elements in dom (descendants,\n // ancestors,
siblings) such that the developer is enured to upgrade\n // ordering. If th
e element definitions have loaded, domReady\n // can be used to access upgr
aded elements.\n if (!this.hasBeenAttached) {\n this.hasBeenAttached
= true;\n if (this.domReady) {\n this.async('domReady');\n
}\n }\n },\n detachedCallback: function() {\n if (!this.preve
ntDispose) {\n this.asyncUnbindAll();\n }\n // invoke user acti
on\n if (this.detached) {\n this.detached();\n }\n // TODO
(sorvell): bc\n if (this.leftView) {\n this.leftView();\n }\n
},\n // TODO(sorvell): bc\n enteredViewCallback: function() {\n thi
s.attachedCallback();\n },\n // TODO(sorvell): bc\n leftViewCallback: f
unction() {\n this.detachedCallback();\n },\n // TODO(sorvell): bc\n
enteredDocumentCallback: function() {\n this.attachedCallback();\n },
\n // TODO(sorvell): bc\n leftDocumentCallback: function() {\n this.d
etachedCallback();\n },\n // recursive ancestral <element> initialization,
oldest first\n parseDeclarations: function(p) {\n if (p && p.element) {
\n this.parseDeclarations(p.__proto__);\n p.parseDeclaration.call(
this, p.element);\n }\n },\n // parse input <element> as needed, over
ride for custom behavior\n parseDeclaration: function(elementElement) {\n
var template = this.fetchTemplate(elementElement);\n if (template) {\n
var root = this.shadowFromTemplate(template);\n this.shadowRoots[ele
mentElement.name] = root;\n }\n },\n // return a shadow-root template
(if desired), override for custom behavior\n fetchTemplate: function(element
Element) {\n return elementElement.querySelector('template');\n },\n
// utility function that creates a shadow root from a <template>\n shadowFrom
Template: function(template) {\n if (template) {\n // make a shadow
root\n var root = this.createShadowRoot();\n // stamp template\n
// which includes parsing and applying MDV bindings before being\n
// inserted (to avoid {{}} in attribute values)\n // e.g. to prevent <img
src=\"images/{{icon}}\"> from generating a 404.\n var dom = this.instanc
eTemplate(template);\n // append to shadow dom\n root.appendChild(
dom);\n // perform post-construction initialization tasks on shadow root\
n this.shadowRootReady(root, template);\n // return the created sh
adow root\n return root;\n }\n },\n // utility function that s
tamps a <template> into light-dom\n lightFromTemplate: function(template, ref
Node) {\n if (template) {\n // TODO(sorvell): mark this element as a
n eventController so that\n // event listeners on bound nodes inside it w
ill be called on it.\n // Note, the expectation here is that events on al
l descendants\n // should be handled by this element.\n this.event
Controller = this;\n // stamp template\n // which includes parsing
and applying MDV bindings before being\n // inserted (to avoid {{}} in a
ttribute values)\n // e.g. to prevent <img src=\"images/{{icon}}\"> from
generating a 404.\n var dom = this.instanceTemplate(template);\n /
/ append to shadow dom\n if (refNode) {\n this.insertBefore(dom,
refNode);\n } else {\n this.appendChild(dom);\n }\n
// perform post-construction initialization tasks on ahem, light root\n
this.shadowRootReady(this);\n // return the created shadow root\n
return dom;\n }\n },\n shadowRootReady: function(root) {\n //
locate nodes with id and store references to them in this.$ hash\n this.mar
shalNodeReferences(root);\n // set up polymer gestures\n PolymerGestur
es.register(root);\n },\n // locate nodes with id and store references to
them in this.$ hash\n marshalNodeReferences: function(root) {\n // estab
lish $ instance variable\n var $ = this.$ = this.$ || {};\n // populat
e $ from nodes with ID from the LOCAL tree\n if (root) {\n var n$ =
root.querySelectorAll(\"[id]\");\n for (var i=0, l=n$.length, n; (i<l) &&
(n=n$[i]); i++) {\n $[n.id] = n;\n };\n }\n },\n att
ributeChangedCallback: function(name, oldValue) {\n // TODO(sjmiles): adhoc
filter\n if (name !== 'class' && name !== 'style') {\n this.attribu
teToProperty(name, this.getAttribute(name));\n }\n if (this.attributeC
hanged) {\n this.attributeChanged.apply(this, arguments);\n }\n }
,\n onMutation: function(node, listener) {\n var observer = new Mutation
Observer(function(mutations) {\n listener.call(this, observer, mutations)
;\n observer.disconnect();\n }.bind(this));\n observer.observe(
node, {childList: true, subtree: true});\n }\n };\n\n // true if object has
own PolymerBase api\n function isBase(object) {\n return object.hasOwnPrope
rty('PolymerBase')\n }\n\n // name a base constructor for dev tools\n\n funct
ion PolymerBase() {};\n PolymerBase.prototype = base;\n base.constructor = Pol
ymerBase;\n\n // exports\n\n scope.Base = PolymerBase;\n scope.isBase = isBas
e;\n scope.api.instance.base = base;\n\n})(Polymer);\n","/*\n * Copyright (c) 2
014 The Polymer Project Authors. All rights reserved.\n * This code may only be
used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.
txt\n * The complete set of contributors may be found at http://polymer.github.i
o/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project
is also\n * subject to an additional IP rights grant found at http://polymer.gi
thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = wi
ndow.logFlags || {};\n \n // magic words\n \n var STYLE_SCOPE_ATTRIBUTE = 'e
lement';\n var STYLE_CONTROLLER_SCOPE = 'controller';\n \n var styles = {\n
STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n /**\n * Installs extern
al stylesheets and <style> elements with the attribute \n * polymer-scope='c
ontroller' into the scope of element. This is intended\n * to be a called du
ring custom element construction.\n */\n installControllerStyles: function
() {\n // apply controller styles, but only if they are not yet applied\n
var scope = this.findStyleScope();\n if (scope && !this.scopeHasNamedSt
yle(scope, this.localName)) {\n // allow inherited controller styles\n
var proto = getPrototypeOf(this), cssText = '';\n while (proto && pr
oto.element) {\n cssText += proto.element.cssTextForScope(STYLE_CONTROL
LER_SCOPE);\n proto = getPrototypeOf(proto);\n }\n if (cs
sText) {\n this.installScopeCssText(cssText, scope);\n }\n
}\n },\n installScopeStyle: function(style, name, scope) {\n var scop
e = scope || this.findStyleScope(), name = name || '';\n if (scope && !this
.scopeHasNamedStyle(scope, this.localName + name)) {\n var cssText = '';\
n if (style instanceof Array) {\n for (var i=0, l=style.length,
s; (i<l) && (s=style[i]); i++) {\n cssText += s.textContent + '\\n\\n
';\n }\n } else {\n cssText = style.textContent;\n
}\n this.installScopeCssText(cssText, scope, name);\n }\n },\n
installScopeCssText: function(cssText, scope, name) {\n scope = scope |
| this.findStyleScope();\n name = name || '';\n if (!scope) {\n
return;\n }\n if (window.ShadowDOMPolyfill) {\n cssText = shim
CssText(cssText, scope.host);\n }\n var style = this.element.cssTextTo
ScopeStyle(cssText,\n STYLE_CONTROLLER_SCOPE);\n Polymer.applyStyl
eToScope(style, scope);\n // cache that this style has been applied\n
this.styleCacheForScope(scope)[this.localName + name] = true;\n },\n findS
tyleScope: function(node) {\n // find the shadow root that contains this el
ement\n var n = node || this;\n while (n.parentNode) {\n n = n.
parentNode;\n }\n return n;\n },\n scopeHasNamedStyle: function(
scope, name) {\n var cache = this.styleCacheForScope(scope);\n return
cache[name];\n },\n styleCacheForScope: function(scope) {\n if (windo
w.ShadowDOMPolyfill) {\n var scopeName = scope.host ? scope.host.localNam
e : scope.localName;\n return polyfillScopeStyleCache[scopeName] || (poly
fillScopeStyleCache[scopeName] = {});\n } else {\n return scope._sco
peStyles = (scope._scopeStyles || {});\n }\n }\n };\n\n var polyfillSc
opeStyleCache = {};\n \n // NOTE: use raw prototype traversal so that we ensur
e correct traversal\n // on platforms where the protoype chain is simulated via
__proto__ (IE10)\n function getPrototypeOf(prototype) {\n return prototype.
__proto__;\n }\n\n function shimCssText(cssText, host) {\n var name = '', i
s = false;\n if (host) {\n name = host.localName;\n is = host.hasAt
tribute('is');\n }\n var selector = Platform.ShadowCSS.makeScopeSelector(n
ame, is);\n return Platform.ShadowCSS.shimCssText(cssText, selector);\n }\n\
n // exports\n\n scope.api.instance.styles = styles;\n \n})(Polymer);\n","/*\
n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * Thi
s code may only be used under the BSD style license found at http://polymer.gith
ub.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer
.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http
://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of
the polymer project is also\n * subject to an additional IP rights grant found a
t http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // import
s\n\n var extend = scope.extend;\n var api = scope.api;\n\n // imperative imp
lementation: Polymer()\n\n // specify an 'own' prototype for tag `name`\n func
tion element(name, prototype) {\n if (arguments.length === 1 && typeof argume
nts[0] !== 'string') {\n prototype = name;\n var script = document._cu
rrentScript;\n name = script && script.parentNode && script.parentNode.getA
ttribute ?\n script.parentNode.getAttribute('name') : '';\n if (!n
ame) {\n throw 'Element name could not be inferred.';\n }\n }\n
if (getRegisteredPrototype[name]) {\n throw 'Already registered (Polymer)
prototype for element ' + name;\n }\n // cache the prototype\n registe
rPrototype(name, prototype);\n // notify the registrar waiting for 'name', if
any\n notifyPrototype(name);\n }\n\n // async prototype source\n\n functi
on waitingForPrototype(name, client) {\n waitPrototype[name] = client;\n }\n
\n var waitPrototype = {};\n\n function notifyPrototype(name) {\n if (waitP
rototype[name]) {\n waitPrototype[name].registerWhenReady();\n delete
waitPrototype[name];\n }\n }\n\n // utility and bookkeeping\n\n // maps ta
g names to prototypes, as registered with\n // Polymer. Prototypes associated w
ith a tag name\n // using document.registerElement are available from\n // HTM
LElement.getPrototypeForTag().\n // If an element was fully registered by Polym
er, then\n // Polymer.getRegisteredPrototype(name) === \n // HTMLElement.get
PrototypeForTag(name)\n\n var prototypesByName = {};\n\n function registerProt
otype(name, prototype) {\n return prototypesByName[name] = prototype || {};\n
}\n\n function getRegisteredPrototype(name) {\n return prototypesByName[na
me];\n }\n\n // exports\n\n scope.getRegisteredPrototype = getRegisteredProto
type;\n scope.waitingForPrototype = waitingForPrototype;\n\n // namespace shen
anigans so we can expose our scope on the registration \n // function\n\n // m
ake window.Polymer reference `element()`\n\n window.Polymer = element;\n\n //
TODO(sjmiles): find a way to do this that is less terrible\n // copy window.Pol
ymer properties onto `element()`\n\n extend(Polymer, scope);\n\n // Under the
HTMLImports polyfill, scripts in the main document\n // do not block on imports
; we want to allow calls to Polymer in the main\n // document. Platform collect
s those calls until we can process them, which\n // we do here.\n\n var declar
ations = Platform.deliverDeclarations();\n if (declarations) {\n for (var i=
0, l=declarations.length, d; (i<l) && (d=declarations[i]); i++) {\n element
.apply(null, d);\n }\n }\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The P
olymer Project Authors. All rights reserved.\n * This code may only be used unde
r the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The co
mplete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * T
he complete set of contributors may be found at http://polymer.github.io/CONTRIB
UTORS.txt\n * Code distributed by Google as part of the polymer project is also\
n * subject to an additional IP rights grant found at http://polymer.github.io/P
ATENTS.txt\n */\n\n(function(scope) {\n\nvar path = {\n resolveElementPaths: fu
nction(node) {\n Platform.urlResolver.resolveDom(node);\n },\n addResolvePa
thApi: function() {\n // let assetpath attribute modify the resolve path\n
var assetPath = this.getAttribute('assetpath') || '';\n var root = new URL(a
ssetPath, this.ownerDocument.baseURI);\n this.prototype.resolvePath = functio
n(urlPath, base) {\n var u = new URL(urlPath, base || root);\n return
u.href;\n };\n }\n};\n\n// exports\nscope.api.declaration.path = path;\n\n})
(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights
reserved.\n * This code may only be used under the BSD style license found at h
ttp://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found
at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors ma
y be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by
Google as part of the polymer project is also\n * subject to an additional IP ri
ghts grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope
) {\n\n // imports\n\n var log = window.logFlags || {};\n var api = scope.api
.instance.styles;\n var STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n
// magic words\n\n var STYLE_SELECTOR = 'style';\n var STYLE_LOADABLE_MATCH =
'@import';\n var SHEET_SELECTOR = 'link[rel=stylesheet]';\n var STYLE_GLOBAL_
SCOPE = 'global';\n var SCOPE_ATTR = 'polymer-scope';\n\n var styles = {\n
// returns true if resources are loading\n loadStyles: function(callback) {\n
var template = this.fetchTemplate();\n var content = template && this
.templateContent();\n if (content) {\n this.convertSheetsToStyles(co
ntent);\n var styles = this.findLoadableStyles(content);\n if (sty
les.length) {\n var templateUrl = template.ownerDocument.baseURI;\n
return Platform.styleResolver.loadStyles(styles, templateUrl, callback);\n
}\n }\n if (callback) {\n callback();\n }\n },\
n convertSheetsToStyles: function(root) {\n var s$ = root.querySelectorA
ll(SHEET_SELECTOR);\n for (var i=0, l=s$.length, s, c; (i<l) && (s=s$[i]);
i++) {\n c = createStyleElement(importRuleForSheet(s, this.ownerDocument.
baseURI),\n this.ownerDocument);\n this.copySheetAttributes(c,
s);\n s.parentNode.replaceChild(c, s);\n }\n },\n copySheetAt
tributes: function(style, link) {\n for (var i=0, a$=link.attributes, l=a$.
length, a; (a=a$[i]) && i<l; i++) {\n if (a.name !== 'rel' && a.name !==
'href') {\n style.setAttribute(a.name, a.value);\n }\n }\n
},\n findLoadableStyles: function(root) {\n var loadables = [];\n
if (root) {\n var s$ = root.querySelectorAll(STYLE_SELECTOR);\n
for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i++) {\n if (s.textCo
ntent.match(STYLE_LOADABLE_MATCH)) {\n loadables.push(s);\n
}\n }\n }\n return loadables;\n },\n /**\n * Install
external stylesheets loaded in <polymer-element> elements into the \n * elem
ent's template.\n * @param elementElement The <element> element to style.\n
*/\n installSheets: function() {\n this.cacheSheets();\n this.c
acheStyles();\n this.installLocalSheets();\n this.installGlobalStyles(
);\n },\n /**\n * Remove all sheets from element and store for later u
se.\n */\n cacheSheets: function() {\n this.sheets = this.findNodes(
SHEET_SELECTOR);\n this.sheets.forEach(function(s) {\n if (s.parentN
ode) {\n s.parentNode.removeChild(s);\n }\n });\n },\n
cacheStyles: function() {\n this.styles = this.findNodes(STYLE_SELECTOR +
'[' + SCOPE_ATTR + ']');\n this.styles.forEach(function(s) {\n if (
s.parentNode) {\n s.parentNode.removeChild(s);\n }\n });\n
},\n /**\n * Takes external stylesheets loaded in an <element> element
and moves\n * their content into a <style> element inside the <element>'s t
emplate.\n * The sheet is then removed from the <element>. This is done only
so \n * that if the element is loaded in the main document, the sheet does\
n * not become active.\n * Note, ignores sheets with the attribute 'poly
mer-scope'.\n * @param elementElement The <element> element to style.\n
*/\n installLocalSheets: function () {\n var sheets = this.sheets.filter
(function(s) {\n return !s.hasAttribute(SCOPE_ATTR);\n });\n va
r content = this.templateContent();\n if (content) {\n var cssText =
'';\n sheets.forEach(function(sheet) {\n cssText += cssTextFrom
Sheet(sheet) + '\\n';\n });\n if (cssText) {\n var style
= createStyleElement(cssText, this.ownerDocument);\n content.insertBefo
re(style, content.firstChild);\n }\n }\n },\n findNodes: funct
ion(selector, matcher) {\n var nodes = this.querySelectorAll(selector).arra
y();\n var content = this.templateContent();\n if (content) {\n
var templateNodes = content.querySelectorAll(selector).array();\n nodes
= nodes.concat(templateNodes);\n }\n return matcher ? nodes.filter(mat
cher) : nodes;\n },\n /**\n * Promotes external stylesheets and <style
> elements with the attribute \n * polymer-scope='global' into global scope.
\n * This is particularly useful for defining @keyframe rules which \n *
currently do not function in scoped or shadow style elements.\n * (See wkb.
ug/72462)\n * @param elementElement The <element> element to style.\n */\
n // TODO(sorvell): remove when wkb.ug/72462 is addressed.\n installGlobal
Styles: function() {\n var style = this.styleForScope(STYLE_GLOBAL_SCOPE);\
n applyStyleToScope(style, document.head);\n },\n cssTextForScope: fu
nction(scopeDescriptor) {\n var cssText = '';\n // handle stylesheets\
n var selector = '[' + SCOPE_ATTR + '=' + scopeDescriptor + ']';\n var
matcher = function(s) {\n return matchesSelector(s, selector);\n };
\n var sheets = this.sheets.filter(matcher);\n sheets.forEach(function
(sheet) {\n cssText += cssTextFromSheet(sheet) + '\\n\\n';\n });\n
// handle cached style elements\n var styles = this.styles.filter(match
er);\n styles.forEach(function(style) {\n cssText += style.textConte
nt + '\\n\\n';\n });\n return cssText;\n },\n styleForScope: fun
ction(scopeDescriptor) {\n var cssText = this.cssTextForScope(scopeDescript
or);\n return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n },\n
cssTextToScopeStyle: function(cssText, scopeDescriptor) {\n if (cssText
) {\n var style = createStyleElement(cssText);\n style.setAttribut
e(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') +\n '-' + scopeDes
criptor);\n return style;\n }\n }\n };\n\n function importRuleF
orSheet(sheet, baseUrl) {\n var href = new URL(sheet.getAttribute('href'), ba
seUrl).href;\n return '@import \\'' + href + '\\';';\n }\n\n function apply
StyleToScope(style, scope) {\n if (style) {\n if (scope === document) {\
n scope = document.head;\n }\n if (window.ShadowDOMPolyfill) {\
n scope = document.head;\n }\n // TODO(sorvell): necessary for
IE\n // see https://connect.microsoft.com/IE/feedback/details/790212/\n
// cloning-a-style-element-and-adding-to-document-produces\n // -unexpect
ed-result#details\n // var clone = style.cloneNode(true);\n var clone
= createStyleElement(style.textContent);\n var attr = style.getAttribute(ST
YLE_SCOPE_ATTRIBUTE);\n if (attr) {\n clone.setAttribute(STYLE_SCOPE
_ATTRIBUTE, attr);\n }\n // TODO(sorvell): probably too brittle; try t
o figure out \n // where to put the element.\n var refNode = scope.fir
stElementChild;\n if (scope === document.head) {\n var selector = 's
tyle[' + STYLE_SCOPE_ATTRIBUTE + ']';\n var s$ = document.head.querySelec
torAll(selector);\n if (s$.length) {\n refNode = s$[s$.length-1]
.nextElementSibling;\n }\n }\n scope.insertBefore(clone, refNod
e);\n }\n }\n\n function createStyleElement(cssText, scope) {\n scope =
scope || document;\n scope = scope.createElement ? scope : scope.ownerDocumen
t;\n var style = scope.createElement('style');\n style.textContent = cssTe
xt;\n return style;\n }\n\n function cssTextFromSheet(sheet) {\n return
(sheet && sheet.__resource) || '';\n }\n\n function matchesSelector(node, inSe
lector) {\n if (matches) {\n return matches.call(node, inSelector);\n
}\n }\n var p = HTMLElement.prototype;\n var matches = p.matches || p.matche
sSelector || p.webkitMatchesSelector \n || p.mozMatchesSelector;\n \n //
exports\n\n scope.api.declaration.styles = styles;\n scope.applyStyleToScope =
applyStyleToScope;\n \n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer
Project Authors. All rights reserved.\n * This code may only be used under the B
SD style license found at http://polymer.github.io/LICENSE.txt\n * The complete
set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The comp
lete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.t
xt\n * Code distributed by Google as part of the polymer project is also\n * sub
ject to an additional IP rights grant found at http://polymer.github.io/PATENTS.
txt\n */\n\n(function(scope) {\n\n // imports\n\n var log = window.logFlags ||
{};\n var api = scope.api.instance.events;\n var EVENT_PREFIX = api.EVENT_PRE
FIX;\n // polymer-element declarative api: events feature\n\n var mixedCaseEve
ntTypes = {};\n [\n 'webkitAnimationStart',\n 'webkitAnimationEnd',\n
'webkitTransitionEnd',\n 'DOMFocusOut',\n 'DOMFocusIn',\n 'DOMMouseScro
ll'\n ].forEach(function(e) {\n mixedCaseEventTypes[e.toLowerCase()] = e;\n
});\n\n var events = {\n parseHostEvents: function() {\n // our delega
tes map\n var delegates = this.prototype.eventDelegates;\n // extract
data from attributes into delegates\n this.addAttributeDelegates(delegates)
;\n },\n addAttributeDelegates: function(delegates) {\n // for each a
ttribute\n for (var i=0, a; a=this.attributes[i]; i++) {\n // does i
t have magic marker identifying it as an event delegate?\n if (this.hasEv
entPrefix(a.name)) {\n // if so, add the info to delegates\n d
elegates[this.removeEventPrefix(a.name)] = a.value.replace('{{', '')\n
.replace('}}', '').trim();\n }\n }\n },\n // starts with '
on-'\n hasEventPrefix: function (n) {\n return n && (n[0] === 'o') && (n
[1] === 'n') && (n[2] === '-');\n },\n removeEventPrefix: function(n) {\n
return n.slice(prefixLength);\n },\n findController: function(node) {
\n while (node.parentNode) {\n if (node.eventController) {\n
return node.eventController;\n }\n node = node.parentNode;\n
}\n return node.host;\n },\n getEventHandler: function(controller,
target, method) {\n var events = this;\n return function(e) {\n
if (!controller || !controller.PolymerBase) {\n controller = events.fi
ndController(target);\n }\n\n var args = [e, e.detail, e.currentTa
rget];\n controller.dispatchMethod(controller, method, args);\n };\n
},\n prepareEventBinding: function(pathString, name, node) {\n if (!
this.hasEventPrefix(name))\n return;\n\n var eventType = this.remove
EventPrefix(name);\n eventType = mixedCaseEventTypes[eventType] || eventTyp
e;\n\n var events = this;\n\n return function(model, node, oneTime) {\
n var handler = events.getEventHandler(undefined, node, pathString);\n
node.addEventListener(eventType, handler);\n\n if (oneTime)\n
return;\n\n // TODO(rafaelw): This is really pointless work. Aside fro
m the cost\n // of these allocations, NodeBind is going to setAttribute b
ack to its\n // current value. Fixing this would mean changing the Templa
teBinding\n // binding delegate API.\n function bindingValue() {\n
return '{{ ' + pathString + ' }}';\n }\n\n return {\n
open: bindingValue,\n discardChanges: bindingValue,\n c
lose: function() {\n node.removeEventListener(eventType, handler);\n
}\n };\n };\n }\n };\n\n var prefixLength = EVENT_PREF
IX.length;\n\n // exports\n scope.api.declaration.events = events;\n\n})(Polym
er);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reser
ved.\n * This code may only be used under the BSD style license found at http://
polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at ht
tp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be f
ound at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google
as part of the polymer project is also\n * subject to an additional IP rights g
rant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\
n // element api\n\n var properties = {\n inferObservers: function(prototyp
e) {\n // called before prototype.observe is chained to inherited object\n
var observe = prototype.observe, property;\n for (var n in prototype)
{\n if (n.slice(-7) === 'Changed') {\n if (!observe) {\n
observe = (prototype.observe = {});\n }\n property = n.sl
ice(0, -7)\n observe[property] = observe[property] || n;\n }\n
}\n },\n explodeObservers: function(prototype) {\n // called befo
re prototype.observe is chained to inherited object\n var o = prototype.obs
erve;\n if (o) {\n var exploded = {};\n for (var n in o) {\n
var names = n.split(' ');\n for (var i=0, ni; ni=names[i]; i++
) {\n exploded[ni] = o[n];\n }\n }\n prototype
.observe = exploded;\n }\n },\n optimizePropertyMaps: function(protot
ype) {\n if (prototype.observe) {\n // construct name list\n
var a = prototype._observeNames = [];\n for (var n in prototype.observe)
{\n var names = n.split(' ');\n for (var i=0, ni; ni=names[i];
i++) {\n a.push(ni);\n }\n }\n }\n if (pro
totype.publish) {\n // construct name list\n var a = prototype._pu
blishNames = [];\n for (var n in prototype.publish) {\n a.push(n
);\n }\n }\n if (prototype.computed) {\n // construct na
me list\n var a = prototype._computedNames = [];\n for (var n in p
rototype.computed) {\n a.push(n);\n }\n }\n },\n publ
ishProperties: function(prototype, base) {\n // if we have any properties t
o publish\n var publish = prototype.publish;\n if (publish) {\n
// transcribe `publish` entries onto own prototype\n this.requirePropert
ies(publish, prototype, base);\n // construct map of lower-cased property
names\n prototype._publishLC = this.lowerCaseMap(publish);\n }\n
},\n // sync prototype to property descriptors;\n // desriptor format con
tains default value and optionally a\n // hint for reflecting the property to
an attribute.\n // e.g. {foo: 5, bar: {value: true, reflect: true}}\n //
reflect: {foo: true} is also supported\n //\n requireProperties: function(
propertyDescriptors, prototype, base) {\n // reflected properties\n pr
ototype.reflect = prototype.reflect || {};\n // ensure a prototype value fo
r each property\n // and update the property's reflect to attribute status\
n for (var n in propertyDescriptors) {\n var propertyDescriptor = pr
opertyDescriptors[n];\n var reflects = this.reflectHintForDescriptor(prop
ertyDescriptor);\n if (prototype.reflect[n] === undefined && reflects !==
undefined) {\n prototype.reflect[n] = reflects;\n }\n if
(prototype[n] === undefined) {\n prototype[n] = this.valueForDescripto
r(propertyDescriptor);\n }\n }\n },\n valueForDescriptor: func
tion(propertyDescriptor) {\n var value = typeof propertyDescriptor === 'obj
ect' &&\n propertyDescriptor ? propertyDescriptor.value : propertyDescr
iptor;\n return value !== undefined ? value : null;\n },\n // returns
the value of the descriptor's 'reflect' property or undefined\n reflectHintF
orDescriptor: function(propertyDescriptor) {\n if (typeof propertyDescripto
r === 'object' &&\n propertyDescriptor && propertyDescriptor.reflect !=
= undefined) {\n return propertyDescriptor.reflect;\n }\n },\n
lowerCaseMap: function(properties) {\n var map = {};\n for (var n in
properties) {\n map[n.toLowerCase()] = n;\n }\n return map;\n
},\n createPropertyAccessor: function(name) {\n var proto = this.proto
type;\n\n var privateName = name + '_';\n var privateObservable = nam
e + 'Observable_';\n proto[privateName] = proto[name];\n\n Object.defi
neProperty(proto, name, {\n get: function() {\n var observable =
this[privateObservable];\n if (observable)\n observable.del
iver();\n\n return this[privateName];\n },\n set: functio
n(value) {\n var observable = this[privateObservable];\n if (o
bservable) {\n observable.setValue(value);\n return;\n
}\n\n var oldValue = this[privateName];\n this[privateNa
me] = value;\n this.emitPropertyChangeRecord(name, value, oldValue);\n\
n return value;\n },\n configurable: true\n });\n
},\n createPropertyAccessors: function(prototype) {\n var n$ = prototyp
e._publishNames;\n if (n$ && n$.length) {\n for (var i=0, l=n$.lengt
h, n, fn; (i<l) && (n=n$[i]); i++) {\n this.createPropertyAccessor(n);\
n }\n }\n\n var n$ = prototype._computedNames;\n if (n$ &&
n$.length) {\n for (var i=0, l=n$.length, n, fn; (i<l) && (n=n$[i]); i++
) {\n this.createPropertyAccessor(n);\n }\n }\n\n }\n }
;\n\n // exports\n\n scope.api.declaration.properties = properties;\n\n})(Poly
mer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights rese
rved.\n * This code may only be used under the BSD style license found at http:/
/polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at h
ttp://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be
found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Googl
e as part of the polymer project is also\n * subject to an additional IP rights
grant found at http://polymer.github.io/PATENTS.txt\n */\n(function(scope) {\n\n
// magic words\n\n var ATTRIBUTES_ATTRIBUTE = 'attributes';\n var ATTRIBUTES
_REGEX = /\\s|,/;\n\n // attributes api\n\n var attributes = {\n \n inhe
ritAttributesObjects: function(prototype) {\n // chain our lower-cased publ
ish map to the inherited version\n this.inheritObject(prototype, 'publishLC
');\n // chain our instance attributes map to the inherited version\n
this.inheritObject(prototype, '_instanceAttributes');\n },\n\n publishAttr
ibutes: function(prototype, base) {\n // merge names from 'attributes' attr
ibute\n var attributes = this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n if
(attributes) {\n // get properties to publish\n var publish = pro
totype.publish || (prototype.publish = {});\n // names='a b c' or names='
a,b,c'\n var names = attributes.split(ATTRIBUTES_REGEX);\n // reco
rd each name for publishing\n for (var i=0, l=names.length, n; i<l; i++)
{\n // remove excess ws\n n = names[i].trim();\n // i
f the user hasn't specified a value, we want to use the\n // default, u
nless a superclass has already chosen one\n if (n && publish[n] === und
efined) {\n // TODO(sjmiles): querying native properties on IE11 (and
possibly\n // on other browsers) throws an exception because there i
s no actual\n // instance.\n // In fact, trying to publish
native properties is known bad for this\n // and other reasons, and
we need to solve this problem writ large.\n try {\n var
hasValue = (base[n] !== undefined);\n } catch(x) {\n has
Value = false;\n }\n // supply an empty 'descriptor' objec
t and let the publishProperties\n // code determine a default\n
if (!hasValue) {\n publish[n] = Polymer.nob;\n }\n
}\n }\n }\n },\n\n // record clonable attributes fro
m <element>\n accumulateInstanceAttributes: function() {\n // inherit in
stance attributes\n var clonable = this.prototype._instanceAttributes;\n
// merge attributes from element\n var a$ = this.attributes;\n for
(var i=0, l=a$.length, a; (i<l) && (a=a$[i]); i++) { \n if (this.isInsta
nceAttribute(a.name)) {\n clonable[a.name] = a.value;\n }\n
}\n },\n\n isInstanceAttribute: function(name) {\n return !this.blac
kList[name] && name.slice(0,3) !== 'on-';\n },\n\n // do not clone these a
ttributes onto instances\n blackList: {\n name: 1,\n 'extends': 1,\
n constructor: 1,\n noscript: 1,\n assetpath: 1,\n 'cache-cs
stext': 1\n }\n \n };\n\n // add ATTRIBUTES_ATTRIBUTE to the blacklist\n
attributes.blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n // exports\n\n scope.api
.declaration.attributes = attributes;\n\n})(Polymer);\n","/*\n * Copyright (c) 2
014 The Polymer Project Authors. All rights reserved.\n * This code may only be
used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.
txt\n * The complete set of contributors may be found at http://polymer.github.i
o/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project
is also\n * subject to an additional IP rights grant found at http://polymer.gi
thub.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n var events = s
cope.api.declaration.events;\n\n var syntax = new PolymerExpressions();\n var
prepareBinding = syntax.prepareBinding;\n\n // Polymer takes a first crack at t
he binding to see if it's a declarative\n // event handler.\n syntax.prepareBi
nding = function(pathString, name, node) {\n return events.prepareEventBindin
g(pathString, name, node) ||\n prepareBinding.call(syntax, pathString,
name, node);\n };\n\n // declaration api supporting mdv\n var mdv = {\n s
yntax: syntax,\n fetchTemplate: function() {\n return this.querySelector
('template');\n },\n templateContent: function() {\n var template = t
his.fetchTemplate();\n return template && Platform.templateContent(template
);\n },\n installBindingDelegate: function(template) {\n if (template
) {\n template.bindingDelegate = this.syntax;\n }\n }\n };\n\n
// exports\n scope.api.declaration.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyri
ght (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may
only be used under the BSD style license found at http://polymer.github.io/LICE
NSE.txt\n * The complete set of authors may be found at http://polymer.github.io
/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer
.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polyme
r project is also\n * subject to an additional IP rights grant found at http://p
olymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n // imports\n \n v
ar api = scope.api;\n var isBase = scope.isBase;\n var extend = scope.extend;\
n\n // prototype api\n\n var prototype = {\n\n register: function(name, ext
endeeName) {\n // build prototype combining extendee, Polymer base, and nam
ed api\n this.buildPrototype(name, extendeeName);\n // register our cu
stom element with the platform\n this.registerPrototype(name, extendeeName)
;\n // reference constructor in a global named by 'constructor' attribute\n
this.publishConstructor();\n },\n\n buildPrototype: function(name, e
xtendeeName) {\n // get our custom prototype (before chaining)\n var e
xtension = scope.getRegisteredPrototype(name);\n // get basal prototype\n
var base = this.generateBasePrototype(extendeeName);\n // implement dec
larative features\n this.desugarBeforeChaining(extension, base);\n //
join prototypes\n this.prototype = this.chainPrototypes(extension, base);\n
// more declarative features\n this.desugarAfterChaining(name, extend
eeName);\n },\n\n desugarBeforeChaining: function(prototype, base) {\n
// back reference declaration element\n // TODO(sjmiles): replace `elemen
t` with `elementElement` or `declaration`\n prototype.element = this;\n
// transcribe `attributes` declarations onto own prototype's `publish`\n
this.publishAttributes(prototype, base);\n // `publish` properties to the p
rototype and to attribute watch\n this.publishProperties(prototype, base);\
n // infer observers for `observe` list based on method names\n this.i
nferObservers(prototype);\n // desugar compound observer syntax, e.g. 'a b
c' \n this.explodeObservers(prototype);\n },\n\n chainPrototypes: fun
ction(prototype, base) {\n // chain various meta-data objects to inherited
versions\n this.inheritMetaData(prototype, base);\n // chain custom ap
i to inherited\n var chained = this.chainObject(prototype, base);\n //
x-platform fixup\n ensurePrototypeTraversal(chained);\n return chaine
d;\n },\n\n inheritMetaData: function(prototype, base) {\n // chain o
bserve object to inherited\n this.inheritObject('observe', prototype, base)
;\n // chain publish object to inherited\n this.inheritObject('publish
', prototype, base);\n // chain reflect object to inherited\n this.inh
eritObject('reflect', prototype, base);\n // chain our lower-cased publish
map to the inherited version\n this.inheritObject('_publishLC', prototype,
base);\n // chain our instance attributes map to the inherited version\n
this.inheritObject('_instanceAttributes', prototype, base);\n // chain o
ur event delegates map to the inherited version\n this.inheritObject('event
Delegates', prototype, base);\n },\n\n // implement various declarative fe
atures\n desugarAfterChaining: function(name, extendee) {\n // build sid
e-chained lists to optimize iterations\n this.optimizePropertyMaps(this.pro
totype);\n this.createPropertyAccessors(this.prototype);\n // install
mdv delegate on template\n this.installBindingDelegate(this.fetchTemplate()
);\n // install external stylesheets as if they are inline\n this.inst
allSheets();\n // adjust any paths in dom from imports\n this.resolveE
lementPaths(this);\n // compile list of attributes to copy to instances\n
this.accumulateInstanceAttributes();\n // parse on-* delegates declared
on `this` element\n this.parseHostEvents();\n //\n // install a
helper method this.resolvePath to aid in \n // setting resource urls. e.g.\
n // this.$.image.src = this.resolvePath('images/foo.png')\n this.addR
esolvePathApi();\n // under ShadowDOMPolyfill, transforms to approximate mi
ssing CSS features\n if (window.ShadowDOMPolyfill) {\n Platform.Shad
owCSS.shimStyling(this.templateContent(), name, extendee);\n }\n // al
low custom element access to the declarative context\n if (this.prototype.r
egisterCallback) {\n this.prototype.registerCallback(this);\n }\n
},\n\n // if a named constructor is requested in element, map a reference\n
// to the constructor to the given symbol\n publishConstructor: function()
{\n var symbol = this.getAttribute('constructor');\n if (symbol) {\n
window[symbol] = this.ctor;\n }\n },\n\n // build prototype co
mbining extendee, Polymer base, and named api\n generateBasePrototype: functi
on(extnds) {\n var prototype = this.findBasePrototype(extnds);\n if (!
prototype) {\n // create a prototype based on tag-name extension\n
var prototype = HTMLElement.getPrototypeForTag(extnds);\n // insert base
api in inheritance chain (if needed)\n prototype = this.ensureBaseApi(pr
ototype);\n // memoize this base\n memoizedBases[extnds] = prototy
pe;\n }\n return prototype;\n },\n\n findBasePrototype: function
(name) {\n return memoizedBases[name];\n },\n\n // install Polymer in
stance api into prototype chain, as needed \n ensureBaseApi: function(prototy
pe) {\n if (prototype.PolymerBase) {\n return prototype;\n }\n
var extended = Object.create(prototype);\n // we need a unique copy of
base api for each base prototype\n // therefore we 'extend' here instead o
f simply chaining\n api.publish(api.instance, extended);\n // TODO(sjm
iles): sharing methods across prototype chains is\n // not supported by 'su
per' implementation which optimizes\n // by memoizing prototype relationshi
ps.\n // Probably we should have a version of 'extend' that is \n // s
hare-aware: it could study the text of each function,\n // look for usage o
f 'super', and wrap those functions in\n // closures.\n // As of now,
there is only one problematic method, so \n // we just patch it manually.\n
// To avoid re-entrancy problems, the special super method\n // insta
lled is called `mixinSuper` and the mixin method\n // must use this method
instead of the default `super`.\n this.mixinMethod(extended, prototype, api
.instance.mdv, 'bind');\n // return buffed-up prototype\n return exten
ded;\n },\n\n mixinMethod: function(extended, prototype, api, name) {\n
var $super = function(args) {\n return prototype[name].apply(this, arg
s);\n };\n extended[name] = function() {\n this.mixinSuper = $s
uper;\n return api[name].apply(this, arguments);\n }\n },\n\n
// ensure prototype[name] inherits from a prototype.prototype[name]\n inherit
Object: function(name, prototype, base) {\n // require an object\n var
source = prototype[name] || {};\n // chain inherited properties onto a new
object\n prototype[name] = this.chainObject(source, base[name]);\n },\n
\n // register 'prototype' to custom element 'name', store constructor \n
registerPrototype: function(name, extendee) { \n var info = {\n prot
otype: this.prototype\n }\n // native element must be specified in ext
ends\n var typeExtension = this.findTypeExtension(extendee);\n if (typ
eExtension) {\n info.extends = typeExtension;\n }\n // register
the prototype with HTMLElement for name lookup\n HTMLElement.register(name
, this.prototype);\n // register the custom type\n this.ctor = documen
t.registerElement(name, info);\n },\n\n findTypeExtension: function(name)
{\n if (name && name.indexOf('-') < 0) {\n return name;\n } els
e {\n var p = this.findBasePrototype(name);\n if (p.element) {\n
return this.findTypeExtension(p.element.extends);\n }\n }\n
}\n\n };\n\n // memoize base prototypes\n var memoizedBases = {};\n\n //
implementation of 'chainObject' depends on support for __proto__\n if (Object._
_proto__) {\n prototype.chainObject = function(object, inherited) {\n if
(object && inherited && object !== inherited) {\n object.__proto__ = inh
erited;\n }\n return object;\n }\n } else {\n prototype.chainOb
ject = function(object, inherited) {\n if (object && inherited && object !=
= inherited) {\n var chained = Object.create(inherited);\n object
= extend(chained, object);\n }\n return object;\n }\n }\n\n // On
platforms that do not support __proto__ (versions of IE), the prototype\n // c
hain of a custom element is simulated via installation of __proto__.\n // Altho
ugh custom elements manages this, we install it here so it's\n // available dur
ing desugaring.\n function ensurePrototypeTraversal(prototype) {\n if (!Obje
ct.__proto__) {\n var ancestor = Object.getPrototypeOf(prototype);\n p
rototype.__proto__ = ancestor;\n if (isBase(ancestor)) {\n ancestor.
__proto__ = Object.getPrototypeOf(ancestor);\n }\n }\n }\n\n // export
s\n\n api.declaration.prototype = prototype;\n\n})(Polymer);\n","/*\n * Copyrig
ht (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may
only be used under the BSD style license found at http://polymer.github.io/LICEN
SE.txt\n * The complete set of authors may be found at http://polymer.github.io/
AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.
github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer
project is also\n * subject to an additional IP rights grant found at http://po
lymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /*\n\n Elements a
re added to a registration queue so that they register in \n the proper order
at the appropriate time. We do this for a few reasons:\n\n * to enable eleme
nts to load resources (like stylesheets) \n asynchronously. We need to do thi
s until the platform provides an efficient\n alternative. One issue is that r
emote @import stylesheets are \n re-fetched whenever stamped into a shadowRoo
t.\n\n * to ensure elements loaded 'at the same time' (e.g. via some set of\n
imports) are registered as a batch. This allows elements to be enured from\n
upgrade ordering as long as they query the dom tree 1 task after\n upgrad
e (aka domReady). This is a performance tradeoff. On the one hand,\n elements
that could register while imports are loading are prevented from \n doing so
. On the other, grouping upgrades into a single task means less\n incremental
work (for example style recalcs), Also, we can ensure the \n document is in
a known state at the single quantum of time when \n elements upgrade.\n\n *
/\n var queue = {\n\n // tell the queue to wait for an element to be ready\n
wait: function(element) {\n if (!element.__queue) {\n element.__
queue = {};\n elements.push(element);\n }\n },\n\n // enqueue
an element to the next spot in the queue.\n enqueue: function(element, check,
go) {\n var shouldAdd = element.__queue && !element.__queue.check;\n
if (shouldAdd) {\n queueForElement(element).push(element);\n eleme
nt.__queue.check = check;\n element.__queue.go = go;\n }\n retu
rn (this.indexOf(element) !== 0);\n },\n\n indexOf: function(element) {\n
var i = queueForElement(element).indexOf(element);\n if (i >= 0 && doc
ument.contains(element)) {\n i += (HTMLImports.useNative || HTMLImports.r
eady) ? \n importQueue.length : 1e9;\n }\n return i; \n }
,\n\n // tell the queue an element is ready to be registered\n go: functio
n(element) {\n var readied = this.remove(element);\n if (readied) {\n
element.__queue.flushable = true;\n this.addToFlushQueue(readied);
\n this.check();\n }\n },\n\n remove: function(element) {\n
var i = this.indexOf(element);\n if (i !== 0) {\n //console.warn(
'queue order wrong', i);\n return;\n }\n return queueForElement
(element).shift();\n },\n\n check: function() {\n // next\n var
element = this.nextElement();\n if (element) {\n element.__queue.che
ck.call(element);\n }\n if (this.canReady()) {\n this.ready();\
n return true;\n }\n },\n\n nextElement: function() {\n r
eturn nextQueued();\n },\n\n canReady: function() {\n return !this.wa
itToReady && this.isEmpty();\n },\n\n isEmpty: function() {\n for (va
r i=0, l=elements.length, e; (i<l) && \n (e=elements[i]); i++) {\n
if (e.__queue && !e.__queue.flushable) {\n return;\n }\n
}\n return true;\n },\n\n addToFlushQueue: function(element) {\n
flushQueue.push(element); \n },\n\n flush: function() {\n // preve
nt re-entrance\n if (this.flushing) {\n return;\n }\n if (
flushQueue.length) {\n console.warn('flushing %s elements', flushQueue.le
ngth);\n }\n this.flushing = true;\n var element;\n while (f
lushQueue.length) {\n element = flushQueue.shift();\n element.__qu
eue.go.call(element);\n element.__queue = null;\n }\n this.flus
hing = false;\n },\n\n ready: function() {\n this.flush();\n //
TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n // whil
e registering. This way we avoid having to upgrade each document\n // piece
meal per registration and can instead register all elements\n // and upgrad
e once in a batch. Without this optimization, upgrade time\n // degrades si
gnificantly when SD polyfill is used. This is mainly because\n // querying
the document tree for elements is slow under the SD polyfill.\n if (CustomE
lements.ready === false) {\n CustomElements.upgradeDocumentTree(document)
;\n CustomElements.ready = true;\n }\n Platform.flush();\n
requestAnimationFrame(this.flushReadyCallbacks);\n },\n\n addReadyCallbac
k: function(callback) {\n if (callback) {\n readyCallbacks.push(call
back);\n }\n },\n\n flushReadyCallbacks: function() {\n if (read
yCallbacks) {\n var fn;\n while (readyCallbacks.length) {\n
fn = readyCallbacks.shift();\n fn();\n }\n }\n },\n\n
waitToReady: true\n\n };\n\n var elements = [];\n var flushQueue = [];\n
var importQueue = [];\n var mainQueue = [];\n var readyCallbacks = [];\n\n f
unction queueForElement(element) {\n return document.contains(element) ? main
Queue : importQueue;\n }\n\n function nextQueued() {\n return importQueue.l
ength ? importQueue[0] : mainQueue[0];\n }\n\n var polymerReadied = false; \n\
n document.addEventListener('WebComponentsReady', function() {\n CustomEleme
nts.ready = false;\n });\n \n function whenPolymerReady(callback) {\n queu
e.waitToReady = true;\n CustomElements.ready = false;\n HTMLImports.whenIm
portsReady(function() {\n queue.addReadyCallback(callback);\n queue.wa
itToReady = false;\n queue.check();\n });\n }\n\n // exports\n scope.
elements = elements;\n scope.queue = queue;\n scope.whenReady = scope.whenPoly
merReady = whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Pol
ymer Project Authors. All rights reserved.\n * This code may only be used under
the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The comp
lete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The
complete set of contributors may be found at http://polymer.github.io/CONTRIBUT
ORS.txt\n * Code distributed by Google as part of the polymer project is also\n
* subject to an additional IP rights grant found at http://polymer.github.io/PAT
ENTS.txt\n */\n\n(function(scope) {\n\n var whenPolymerReady = scope.whenPolyme
rReady;\n\n function importElements(elementOrFragment, callback) {\n if (ele
mentOrFragment) {\n document.head.appendChild(elementOrFragment);\n wh
enPolymerReady(callback);\n } else if (callback) {\n callback();\n }\
n }\n\n function importUrls(urls, callback) {\n if (urls && urls.length) {\
n var frag = document.createDocumentFragment();\n for (var i=0, l=
urls.length, url, link; (i<l) && (url=urls[i]); i++) {\n link = documen
t.createElement('link');\n link.rel = 'import';\n link.href =
url;\n frag.appendChild(link);\n }\n importElements(frag,
callback);\n } else if (callback) {\n callback();\n }\n }\n\n // e
xports\n scope.import = importUrls;\n scope.importElements = importElements;\n
\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Polymer Project Authors. All ri
ghts reserved.\n * This code may only be used under the BSD style license found
at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be f
ound at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributor
s may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed
by Google as part of the polymer project is also\n * subject to an additional I
P rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(s
cope) {\n\n // imports\n\n var extend = scope.extend;\n var api = scope.api;\
n var queue = scope.queue;\n var whenPolymerReady = scope.whenPolymerReady;\n
var getRegisteredPrototype = scope.getRegisteredPrototype;\n var waitingForPro
totype = scope.waitingForPrototype;\n\n // declarative implementation: <polymer
-element>\n\n var prototype = extend(Object.create(HTMLElement.prototype), {\n\
n createdCallback: function() {\n if (this.getAttribute('name')) {\n
this.init();\n }\n },\n\n init: function() {\n // fetch decl
ared values\n this.name = this.getAttribute('name');\n this.extends =
this.getAttribute('extends');\n queue.wait(this);\n // initiate any as
ync resource fetches\n this.loadResources();\n // register when all co
nstraints are met\n this.registerWhenReady();\n },\n\n // TODO(sorvel
l): we currently queue in the order the prototypes are \n // registered, but
we should queue in the order that polymer-elements\n // are registered. We ar
e currently blocked from doing this based on \n // crbug.com/395686.\n reg
isterWhenReady: function() {\n if (this.registered\n || this.waitingFo
rPrototype(this.name)\n || this.waitingForQueue()\n || this.waitingF
orResources()) {\n return;\n }\n queue.go(this);\n },\n\n
_register: function() {\n //console.log('registering', this.name);\n
// warn if extending from a custom element not registered via Polymer\n i
f (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n console.
warn('%s is attempting to extend %s, an unregistered element ' +\n 'o
r one that was not registered with Polymer.', this.name,\n this.exten
ds);\n }\n this.register(this.name, this.extends);\n this.registe
red = true;\n },\n\n waitingForPrototype: function(name) {\n if (!get
RegisteredPrototype(name)) {\n // then wait for a prototype\n wait
ingForPrototype(name, this);\n // emulate script if user is not supplying
one\n this.handleNoScript(name);\n // prototype not ready yet\n
return true;\n }\n },\n\n handleNoScript: function(name) {\n
// if explicitly marked as 'noscript'\n if (this.hasAttribute('noscript'
) && !this.noscript) {\n this.noscript = true;\n // imperative ele
ment registration\n Polymer(name);\n }\n },\n\n waitingForReso
urces: function() {\n return this._needsResources;\n },\n\n // NOTE:
Elements must be queued in proper order for inheritance/composition\n // depe
ndency resolution. Previously this was enforced for inheritance,\n // and by
rule for composition. It's now entirely by rule.\n waitingForQueue: function(
) {\n return queue.enqueue(this, this.registerWhenReady, this._register);\n
},\n\n loadResources: function() {\n this._needsResources = true;\n
this.loadStyles(function() {\n this._needsResources = false;\n
this.registerWhenReady();\n }.bind(this));\n }\n\n });\n\n // semi-p
luggable APIs \n\n // TODO(sjmiles): should be fully pluggable (aka decoupled,
currently\n // the various plugins are allowed to depend on each other directly
)\n api.publish(api.declaration, prototype);\n\n // utility and bookkeeping\n\
n function isRegistered(name) {\n return Boolean(HTMLElement.getPrototypeFor
Tag(name));\n }\n\n function isCustomTag(name) {\n return (name && name.ind
exOf('-') >= 0);\n }\n\n // boot tasks\n\n whenPolymerReady(function() {\n
document.body.removeAttribute('unresolved');\n document.dispatchEvent(\n
new CustomEvent('polymer-ready', {bubbles: true})\n );\n });\n\n // regis
ter polymer-element with document\n\n document.registerElement('polymer-element
', {prototype: prototype});\n\n})(Polymer);\n","/*\n * Copyright (c) 2014 The Po
lymer Project Authors. All rights reserved.\n * This code may only be used under
the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The com
plete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * Th
e complete set of contributors may be found at http://polymer.github.io/CONTRIBU
TORS.txt\n * Code distributed by Google as part of the polymer project is also\n
* subject to an additional IP rights grant found at http://polymer.github.io/PA
TENTS.txt\n */\n\n/**\n * The `auto-binding` element extends the template elemen
t. It provides a quick \n * and easy way to do data binding without the need to
setup a model. \n * The `auto-binding` element itself serves as the model and co
ntroller for the \n * elements it contains. Both data and event handlers can be
bound. \n *\n * The `auto-binding` element acts just like a template that is bou
nd to \n * a model. It stamps its content in the dom adjacent to itself. When th
e \n * content is stamped, the `template-bound` event is fired.\n *\n * Example:
\n *\n * <template is=\"auto-binding\">\n * <div>Say something: <input
value=\"{{value}}\"></div>\n * <div>You said: {{value}}</div>\n * <
button on-tap=\"{{buttonTap}}\">Tap me!</button>\n * </template>\n * <sc
ript>\n * var template = document.querySelector('template');\n * tem
plate.value = 'something';\n * template.buttonTap = function() {\n *
console.log('tap!');\n * };\n * </script>\n *\n * @module Polymer\n
* @status stable\n*/\n\n(function() {\n\n var element = document.createElement
('polymer-element');\n element.setAttribute('name', 'auto-binding');\n element
.setAttribute('extends', 'template');\n element.init();\n\n Polymer('auto-bind
ing', {\n\n createdCallback: function() {\n this.syntax = this.bindingDe
legate = this.makeSyntax();\n // delay stamping until polymer-ready so that
auto-binding is not\n // required to load last.\n Polymer.whenPolymer
Ready(function() {\n this.model = this;\n this.setAttribute('bind'
, '');\n // we don't bother with an explicit signal here, we could ust a
MO\n // if necessary\n this.async(function() {\n // note:
this will marshall *all* the elements in the parentNode\n // rather th
an just stamped ones. We'd need to use createInstance\n // to fix this
or something else fancier.\n this.marshalNodeReferences(this.parentNode
);\n // template stamping is asynchronous so stamping isn't complete\n
// by polymer-ready; fire an event so users can use stamped elements\n
this.fire('template-bound');\n });\n }.bind(this));\n },
\n\n makeSyntax: function() {\n var events = Object.create(Polymer.api.d
eclaration.events);\n var self = this;\n events.findController = funct
ion() { return self.model; };\n\n var syntax = new PolymerExpressions();\n
var prepareBinding = syntax.prepareBinding; \n syntax.prepareBinding
= function(pathString, name, node) {\n return events.prepareEventBinding(
pathString, name, node) ||\n prepareBinding.call(syntax, pathStrin
g, name, node);\n };\n return syntax;\n }\n\n });\n\n})();\n"]} |