{"version":3,"file":"polymer.js","sources":["polymer.concat.js"],"names":["window","PolymerGestures","scope","HAS_FULL_PATH","pathTest","document","createElement","createShadowRoot","sr","s","appendChild","addEventListener","ev","path","stopPropagation","CustomEvent","bubbles","head","dispatchEvent","parentNode","removeChild","target","shadow","inEl","shadowRoot","webkitShadowRoot","canTarget","Boolean","elementFromPoint","targetingShadow","this","olderShadow","os","olderShadowRoot","se","querySelector","allShadows","element","shadows","push","searchRoot","inRoot","x","y","t","owner","nodeType","Node","DOCUMENT_NODE","DOCUMENT_FRAGMENT_NODE","findTarget","inEvent","length","clientX","clientY","findTouchAction","n","i","ELEMENT_NODE","hasAttribute","getAttribute","host","LCA","a","b","contains","adepth","depth","bdepth","d","walk","u","deepContains","common","insideNode","node","rect","getBoundingClientRect","left","right","top","bottom","event","p","targetFinding","bind","shadowSelector","v","selector","rule","attrib2css","selectors","styles","hasTouchAction","style","touchAction","hasShadowRoot","ShadowDOMPolyfill","forEach","r","String","map","el","textContent","MOUSE_PROPS","MOUSE_DEFAULTS","NOP_FACTORY","eventFactory","preventTap","makeBaseEvent","inType","inDict","e","createEvent","initEvent","cancelable","makeGestureEvent","Object","create","k","keys","makePointerEvent","buttons","pressure","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","currentGestures","CLONE_PROPS","CLONE_DEFAULTS","HAS_SVG_INSTANCE","SVGElementInstance","dispatcher","IS_IOS","pointermap","requiredGestures","eventMap","eventSources","eventSourceList","gestures","dependencyMap","down","listeners","index","up","gestureQueue","registerSource","name","source","newEvents","events","registerGesture","obj","g","exposes","toLowerCase","register","initial","es","l","unregister","fireEvent","move","type","fillGestureQueue","cancel","tapPrevented","addGestureDependency","gesturesWanted","_pgEvents","ri","gk","eventHandler","_handledByPG","nodes","currentTarget","fn","listen","addEvent","unlisten","removeEvent","eventName","boundHandler","removeEventListener","makeEvent","preventDefault","_target","cloneEvent","eventCopy","correspondingUseElement","clone","gestureTrigger","rg","_requiredGestures","j","requestAnimationFrame","boundGestureTrigger","activateGesture","gesture","dep","recognizer","_pgListeners","actionNode","defaultActions","setAttribute","handler","capture","deactivateGesture","DEDUP_DIST","WHICH_TO_BUTTONS","HAS_BUTTONS","MouseEvent","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","Math","abs","dy","prepareEvent","which","mousedown","mouseup","mousemove","cleanupMouse","relatedTarget","DEDUP_TIMEOUT","Array","CLICK_COUNT_TIMEOUT","HYSTERESIS","HAS_TOUCH_ACTION","touchEvents","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","touchActionToScrollType","st","firstTouch","isPrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","cancelResetClickCount","removePrimaryPointer","inPointer","resetClickCount","clickCount","resetId","setTimeout","clearTimeout","typeToButtons","ret","touch","id","currentTouchEvent","fastPath","touchToPointer","cte","detail","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","self","processTouches","inFunction","tl","changedTouches","_cancel","cleanUpPointer","shouldScroll","scrollAxis","oa","da","doa","findTouch","inTL","vacuumTouches","touches","value","key","touchstart","dedupSynthMouse","touchmove","dd","sqrt","touchcancel","touchend","lt","HAS_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","msEvents","POINTER_TYPES","cleanup","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel","pointerEvents","pointerdown","pointermove","pointerup","pointercancel","nav","navigator","PointerEvent","msPointerEnabled","undefined","ontouchstart","ua","userAgent","match","track","trackx","tracky","WIGGLE_THRESHOLD","clampDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY","fireTrack","inTrackingData","downEvent","lastMoveEvent","xDirection","yDirection","gestureProto","trackInfo","ddx","screenX","ddy","screenY","downTarget","tracking","hold","HOLD_DELAY","heldPointer","holdJob","pulse","Date","now","timeStamp","held","fireHold","clearInterval","setInterval","inHoldTime","holdTime","tap","shouldTap","downState","start","altKey","ctrlKey","metaKey","shiftKey","global","assert","condition","message","Error","isDecimalDigit","ch","isWhiteSpace","fromCharCode","isLineTerminator","isIdentifierStart","isIdentifierPart","isKeyword","skipWhitespace","charCodeAt","getIdentifier","slice","scanIdentifier","Token","Identifier","Keyword","NullLiteral","BooleanLiteral","range","scanPunctuator","code2","ch2","code","ch1","Punctuator","throwError","Messages","UnexpectedToken","scanNumericLiteral","number","NumericLiteral","parseFloat","scanStringLiteral","quote","str","octal","StringLiteral","isIdentifierName","token","advance","EOF","lex","lookahead","peek","pos","messageFormat","error","args","arguments","msg","replace","whole","description","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","elements","parseExpression","delegate","createArrayExpression","parseObjectPropertyKey","createLiteral","createIdentifier","parseObjectProperty","createProperty","parseObjectInitialiser","properties","createObjectExpression","parseGroupExpression","expr","parsePrimaryExpression","createThisExpression","parseArguments","parseNonComputedProperty","parseNonComputedMember","parseComputedMember","parseLeftHandSideExpression","property","createMemberExpression","createCallExpression","parseUnaryExpression","parsePostfixExpression","createUnaryExpression","binaryPrecedence","prec","parseBinaryExpression","stack","operator","pop","createBinaryExpression","parseConditionalExpression","consequent","alternate","createConditionalExpression","parseFilter","createFilter","parseFilters","parseTopLevel","Syntax","parseInExpression","parseAsExpression","createTopLevel","createAsExpression","indexName","createInExpression","parse","inDelegate","state","labelSet","TokenName","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","Redeclaration","esprima","prepareBinding","expressionText","filterRegistry","expression","getExpression","scopeIdent","tagName","ex","console","model","oneTime","binding","getBinding","polymerExpressionScopeIdent_","indexIdent","polymerExpressionIndexIdent_","expressionParseCache","ASTDelegate","Expression","valueFn_","IdentPath","Path","object","accessor","computed","dynamicDeps","simplePath","getFn","Filter","notImplemented","arg","valueFn","filters","deps","currentPath","ConstantObservable","value_","convertStylePropertyName","c","findScope","prop","parentScopeName","hasOwnProperty","isLiteralExpression","pathString","isNaN","Number","PolymerExpressions","observer","addPath","getValueFrom","setValue","newValue","setValueFrom",{"end":{"file":"polymer.concat.js","comments_before":[],"nlb":false,"endpos":93731,"pos":93723,"col":8,"line":3221,"value":"fullPath","type":"name"},"start":{"file":"polymer.concat.js","comments_before":[],"nlb":false,"endpos":93731,"pos":93723,"col":8,"line":3221,"value":"fullPath","type":"name"},"name":"fullPath"},"fullPath","fullPath_","parts","context","propName","transform","toModelDirection","initialArgs","toModel","toDOM","apply","unaryOperators","+","-","!","binaryOperators","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","op","argument","test","ident","filter","arr","kind","open","discardChanges","deliver","close","firstTime","firstValue","startReset","getValue","finishReset","setValueFn","CompoundObserver","ObserverTransform","count","random","toString","styleObject","join","tokenList","tokens","prepareInstancePositionChanged","template","templateInstance","valid","PathObserver","prepareInstanceModel","scopeName","parentScope","createScopeObject","__proto__","defineProperty","configurable","writable","Polymer","version","Platform","logFlags","flush","CustomElements","useNative","ready","takeRecords","instanceof","base","HTMLImports","wrap","unwrap","whenReady","doc","rootDocument","whenDocumentReady","watchImportsLoad","isDocumentReady","readyState","requiredReadyState","checkReady","READY_EVENT","markTargetLoaded","__loaded","checkDone","loaded","loadedImport","imports","querySelectorAll","imp","isImportLoaded","link","import","__importParsed","handleImports","isImport","handleImport","localName","rel","IMPORT_LINK_TYPE","hasNative","isIE","hasShadowDOMPolyfill","wrapIfNeeded","currentScriptDescriptor","script","currentScript","scripts","MutationObserver","mxns","addedNodes","observe","childList","readyTime","getTime","withDependencies","task","depends","marshal","module","dependsOrFactory","moduleFactory","modules","using","whenImportsReady","modularize","insertBefore","firstChild","detectObjectObserve","recs","records","deliverChangeRecords","unobserve","detectEval","chrome","app","runtime","getDeviceStorage","f","Function","isIndex","toNumber","isObject","areSameValue","numberIsNaN","getPathCharType","char","noop","parsePath","maybeUnescapeQuote","nextChar","mode","newChar","actions","append","transition","action","typeMap","pathStateMachine","isIdent","identRegExp","privateToken","constructorIsPrivate","hasEval","compiledGetValueFromFn","getPath","pathCache","invalidPath","formatAccessor","dirtyCheck","cycles","MAX_DIRTY_CHECK_CYCLES","check_","testingExposeCycleCount","dirtyCheckCycleCount","objectIsEmpty","diffIsEmpty","diff","added","removed","changed","diffObjectFromOldObject","oldObject","isArray","runEOMTasks","eomTasks","newObservedObject","state_","OPENED","discardRecords","first","obs","arrayObserve","discard","observedObjectCache","getObservedObject","dir","newObservedSet","rootObj","rootObjProps","objects","getPrototypeOf","allRootObjNonObservedProps","rec","observers","iterateObjects_","observerCount","record","Observer","unobservedCount","observedSetCache","getObservedSet","lastObservedSet","UNOPENED","callback_","target_","directObserver_","id_","nextObserverId","addToAll","_allObserversCount","collectObservers","allObservers","removeFromAll","ObjectObserver","oldObject_","ArrayObserver","array","object_","path_","reportChangesOnOpen","reportChangesOnOpen_","observed_","identFn","observable","getValueFn","dontPassThroughSet","observable_","getValueFn_","setValueFn_","dontPassThroughSet_","diffObjectFromChangeRecords","changeRecords","oldValues","expectedRecordTypes","oldValue","newSplice","addedCount","ArraySplice","calcSplices","current","currentStart","currentEnd","old","oldStart","oldEnd","arraySplice","intersect","start1","end1","start2","end2","mergeSplice","splices","inserted","insertionOffset","intersectCount","deleteCount","prepend","offset","createInitialSplices","JSON","stringify","projectArraySplices","concat","hasObserve","createObject","proto","newObject","getOwnPropertyNames","getOwnPropertyDescriptor","identStart","identPart","RegExp","beforePath","ws","[","eof","inPath",".","beforeIdent","inIdent","0","beforeElement","'","\"","afterZero","]","inIndex","inSingleQuote","else","inDoubleQuote","afterElement","iterateObjects","runEOM","eomObj","pingPong","eomRunScheduled","CLOSED","RESETTING","connect_","disconnect_","report_","changes","_errorThrownDuringCallback","runningMicrotaskCheckpoint","performMicrotaskCheckpoint","anyChanged","toCheck","clearObservers","copyObject","copy","applySplices","previous","spliceArgs","addIndex","skipChanges","observerSentinel","needsDirectObserver","addObserver","observedCallback_","add","update","EDIT_LEAVE","EDIT_UPDATE","EDIT_ADD","EDIT_DELETE","calcEditDistances","rowCount","columnCount","distances","equals","north","west","spliceOperationsFromEditDistances","edits","min","northWest","reverse","prefixCount","suffixCount","minLength","sharedPrefix","sharedSuffix","ops","oldIndex","searchLength","index1","index2","calculateSplices","currentValue","previousValue","runEOM_","observerSentinel_","hasObjectObserve","getTreeScope","getElementById","updateBindings","bindings","bindings_","returnBinding","sanitizeValue","updateText","data","textBinding","updateAttribute","conditional","removeAttribute","attributeBinding","getEventForInputType","checkboxEventType","updateInput","input","santizeFn","inputBinding","bindInputEvent","postEventFn","eventType","booleanSanitize","getAssociatedRadioButtons","form","treeScope","radios","checkedPostEvent","radio","checkedBinding","checked","updateOption","option","select","selectBinding","HTMLSelectElement","optionBinding","bindFinished","maybeUpdateBindings","enable","Text","Element","div","checkbox","initMouseEvent","HTMLInputElement","HTMLElement","sanitizeFn","HTMLTextAreaElement","HTMLOptionElement","getFragmentRoot","searchRefId","ref","protoContent_","templateCreator_","isSVGTemplate","namespaceURI","isHTMLTemplate","isAttributeTemplate","semanticTemplateElements","isTemplate","isTemplate_","forAllTemplatesFrom","subTemplates","allTemplatesSelectors","bootstrapTemplatesRecursivelyFrom","bootstrap","HTMLTemplateElement","decorate","content","mixin","to","from","getOrCreateTemplateContentsOwner","ownerDocument","defaultView","templateContentsOwner_","implementation","createHTMLDocument","lastChild","getTemplateStagingDocument","stagingDocument_","isStagingDocument","href","baseURI","extractTemplateFromAttributeTemplate","attribs","attributes","attrib","templateAttributeDirectives","extractTemplateFromSVGTemplate","liftNonNativeTemplateChildrenIntoContent","useRoot","child","fixTemplateElementPrototype","hasProto","ensureSetModelScheduled","setModelFn_","setModelFnScheduled_","getBindings","delegate_","processBindings","model_","parseMustaches","prepareBindingFn","startIndex","lastIndex","endIndex","onlyOneTime","oneTimeStart","terminator","trim","delegateFn","hasOnePath","isSimplePath","combinator","processOneTimeBinding","processSinglePathBinding","processBinding","instanceBindings","iter","processBindingDirectives_","parseWithDefault","parseAttributeBindings","attr","substring","IF","BIND","REPEAT","if","repeat","TEXT_NODE","cloneAndBindInstance","parent","stagingDocument","importNode","nextSibling","children","setDelegate_","createInstanceBindingMap","getContentUid","contentUidCounter","getInstanceBindingMap","contentId","bindingMaps","bindingMap_","TemplateIterator","templateElement","closed","templateElement_","instances","iteratedValue","presentValue","arrayObserver","opt_this","Document","documentElement","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","hasTemplateElement","html","TypeError","templateObserver","refChanged_","opt_instanceRef","templateIsDecorated_","isNativeHTMLTemplate","bootstrapContents","liftContents","liftRoot","content_","createDocumentFragment","instanceRef_","htmlElement","HTMLUnknownElement","contentDescriptor","enumerable","directives","iterator_","closeDeps","updateDependencies","attributeFilter","createInstance","bindingDelegate","newDelegate_","refContent_","ref_","emptyInstance","instance","terminator_","instanceRecord","templateInstance_","firstNode","lastNode","collectTerminator","raw","valueChanged","updateIteratedValue","getUpdatedValue","instancePositionChangedFn_","instanceModelFn_","nextRef","ifOneTime","ifValue","hasIf","updateIfValue","updateValue","observeValue","handleSplices","getLastInstanceNode","subtemplateIterator","getLastTemplateNode","insertInstanceAt","fragment","previousInstanceLast","extractInstanceAt","getDelegateFn","instanceCache","removeDelta","closeInstanceBindings","reportInstancesMoved","reportInstanceMoved","forAllTemplatesFrom_","endOfMicrotask","twiddle","iterations","callbacks","atEndOfMicrotask","shift","createTextNode","JsMutationObserver","characterData","flushing","group","groupEnd","FLUSH_POLL_INTERVAL","flushPoll","originalImportNode","deep","imported","upgradeAll","replaceUrlsInCssText","cssText","baseUrl","keepAbsolute","regexp","pre","url","post","urlPath","resolveRelativeUrl","URL","makeDocumentRelPath","root","port","protocol","makeRelPath","sourceUrl","targetUrl","pathname","split","unshift","search","hash","urlResolver","resolveDom","resolveAttributes","resolveStyles","templates","resolveTemplate","resolveStyle","resolveCssText","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","hasAttributes","resolveElementAttributes","URL_ATTRS_SELECTOR","URL_ATTRS","replacement","URL_TEMPLATE_SEARCH","Loader","regex","cache","requests","extractUrls","text","matched","matches","exec","process","done","fetch","inflight","req","xhr","wait","handleXhr","request","response","responseText","resolve","XMLHttpRequest","send","onerror","onload","pending","StyleResolver","loader","flatten","resolveNode","intermediate","loadStyles","loadedStyle","styleResolver","extend","api","pd","nom","inObj","copyProperty","inName","inSource","inTarget","getPropertyDescriptor","inObject","job","stop","Job","go","inContext","boundComplete","complete","h","handle","cancelAnimationFrame","createDOM","inTagOrNode","inHTML","inAttrs","dom","cloneNode","innerHTML","registry","tag","getPrototypeForTag","originalStopPropagation","Event","cancelBubble","DOMTokenList","remove","toggle","bool","switch","oldName","newName","ArraySlice","namedNodeMap","NamedNodeMap","MozNamedAttrMap","NodeList","HTMLCollection","$super","arrayOfArgs","caller","_super","nameInThis","warn","memoizeSuper","n$","method","nextSuper","super","noopHandler","deserializeValue","inferredType","typeHandlers","string","date","boolean","parseInt","function","declaration","publish","apis","utils","async","timeout","cancelAsync","fire","onNode","asyncFire","classFollows","anew","className","classList","injectBoundHTML","instanceTemplate","nop","nob","asyncMethod","log","EVENT_PREFIX","addHostListeners","eventDelegates","methodName","getEventHandler","dispatchMethod","handlerFn","copyInstanceAttributes","a$","_instanceAttributes","takeAttributes","_publishLC","attributeToProperty","propertyForAttribute","bindPattern","stringValue","serializeValue","reflectPropertyToAttribute","serializedValue","resolveBindingValue","updateRecord","createPropertyObserver","_observeNames","o","_propertyObserver","registerObserver","observeArrayValue","openPropertyObserver","notifyPropertyChanges","newValues","paths","called","ov","nv","invokeMethod","deliverChanges","propertyChanged_","reflect","callbackName","closeNamedObserver","registerNamedObserver","emitPropertyChangeRecord","notifier","notifier_","getNotifier","notify","bindToAccessor","resolveFn","privateName","setObserveable","privateComputedBoundValue","privateObservable","resolvedValue","createComputedProperties","_computedNames","syntax","bindProperty","_observers","closeObservers","o$","_namedObservers","closeNamedObservers","mdv","enableBindingsReflection","_recordBinding","mixinSuper","makeElementReady","asyncUnbindAll","_unbound","unbind","_unbindAllJob","unbindAll","cancelUnbindAll","mustachePattern","isBase","PolymerBase","created","createdCallback","prepareElement","_elementPrepared","shadowRoots","_readied","parseDeclarations","attachedCallback","attached","enteredView","hasBeenAttached","domReady","detachedCallback","preventDispose","detached","leftView","enteredViewCallback","leftViewCallback","enteredDocumentCallback","leftDocumentCallback","parseDeclaration","elementElement","fetchTemplate","shadowFromTemplate","shadowRootReady","lightFromTemplate","refNode","eventController","marshalNodeReferences","$","attributeChangedCallback","attributeChanged","onMutation","listener","mutations","disconnect","subtree","constructor","Base","shimCssText","is","ShadowCSS","makeScopeSelector","STYLE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","installControllerStyles","findStyleScope","scopeHasNamedStyle","cssTextForScope","installScopeCssText","installScopeStyle","cssTextToScopeStyle","applyStyleToScope","styleCacheForScope","polyfillScopeStyleCache","_scopeStyles","_currentScript","getRegisteredPrototype","registerPrototype","notifyPrototype","waitingForPrototype","client","waitPrototype","registerWhenReady","prototypesByName","instanceOfType","ctor","consumeDeclarations","declarations","resolveElementPaths","addResolvePathApi","assetPath","resolvePath","importRuleForSheet","sheet","createStyleElement","firstElementChild","s$","nextElementSibling","cssTextFromSheet","__resource","matchesSelector","inSelector","STYLE_SELECTOR","STYLE_LOADABLE_MATCH","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","templateContent","convertSheetsToStyles","findLoadableStyles","templateUrl","copySheetAttributes","replaceChild","loadables","installSheets","cacheSheets","cacheStyles","installLocalSheets","installGlobalStyles","sheets","findNodes","matcher","templateNodes","styleForScope","scopeDescriptor","webkitMatchesSelector","mozMatchesSelector","mixedCaseEventTypes","parseHostEvents","delegates","addAttributeDelegates","hasEventPrefix","removeEventPrefix","prefixLength","findController","controller","prepareEventBinding","bindingValue","inferObservers","explodeObservers","exploded","ni","names","optimizePropertyMaps","_publishNames","publishProperties","requireProperties","lowerCaseMap","propertyInfos","createPropertyAccessor","ignoreWrites","createPropertyAccessors","ATTRIBUTES_ATTRIBUTE","ATTRIBUTES_REGEX","inheritAttributesObjects","inheritObject","publishAttributes","accumulateInstanceAttributes","clonable","isInstanceAttribute","blackList","extends","noscript","assetpath","cache-csstext","installBindingDelegate","ensurePrototypeTraversal","ancestor","extendeeName","buildPrototype","publishConstructor","extension","generateBasePrototype","desugarBeforeChaining","chainPrototypes","desugarAfterChaining","inheritMetaData","chained","chainObject","extendee","shimStyling","registerCallback","symbol","extnds","findBasePrototype","ensureBaseApi","memoizedBases","extended","mixinMethod","info","typeExtension","findTypeExtension","registerElement","inherited","queueForElement","mainQueue","importQueue","nextQueued","queue","waitToReady","addReadyCallback","check","forceReady","__queue","enqueue","shouldAdd","readied","flushable","addToFlushQueue","nextElement","canReady","isEmpty","flushQueue","polyfillWasReady","upgradeDocumentTree","flushReadyCallbacks","readyCallbacks","waitingFor","e$","whenPolymerReady","isRegistered","isCustomTag","init","loadResources","registered","waitingForQueue","waitingForResources","_register","handleNoScript","_needsResources","body","importElements","elementOrFragment","importUrls","urls","frag","makeSyntax"],"mappings":"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","sourcesContent":["/**\n * @license\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 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\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 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 var HAS_FULL_PATH = false;\n\n // test for full event path support\n var pathTest = document.createElement('meta');\n if (pathTest.createShadowRoot) {\n var sr = pathTest.createShadowRoot();\n var s = document.createElement('span');\n sr.appendChild(s);\n pathTest.addEventListener('testpath', function(ev) {\n if (ev.path) {\n // if the span is in the event path, then path[0] is the real source for all events\n HAS_FULL_PATH = ev.path[0] === s;\n }\n ev.stopPropagation();\n });\n var ev = new CustomEvent('testpath', {bubbles: true});\n // must add node to DOM to trigger event listener\n document.head.appendChild(pathTest);\n s.dispatchEvent(ev);\n pathTest.parentNode.removeChild(pathTest);\n sr = s = null;\n }\n pathTest = null;\n\n var target = {\n shadow: function(inEl) {\n if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n }\n },\n canTarget: function(shadow) {\n return shadow && Boolean(shadow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n }\n },\n olderShadow: function(shadow) {\n var os = shadow.olderShadowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n if (se) {\n os = se.olderShadowRoot;\n }\n }\n return os;\n },\n allShadows: function(element) {\n var shadows = [], s = this.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(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 element is expected to be a Document or ShadowRoot\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) {\n s = document;\n }\n return s;\n },\n findTarget: function(inEvent) {\n if (HAS_FULL_PATH && inEvent.path && inEvent.path.length) {\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.owner(inEvent.target);\n // if x, y is not in this root, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n s = document;\n }\n return this.searchRoot(s, x, y);\n },\n findTouchAction: function(inEvent) {\n var n;\n if (HAS_FULL_PATH && inEvent.path && inEvent.path.length) {\n var path = inEvent.path;\n for (var i = 0; i < path.length; i++) {\n n = path[i];\n if (n.nodeType === Node.ELEMENT_NODE && n.hasAttribute('touch-action')) {\n return n.getAttribute('touch-action');\n }\n }\n } else {\n n = inEvent.target;\n while(n) {\n if (n.nodeType === Node.ELEMENT_NODE && n.hasAttribute('touch-action')) {\n return n.getAttribute('touch-action');\n }\n n = n.parentNode || n.host;\n }\n }\n // auto is default\n return \"auto\";\n },\n LCA: function(a, b) {\n if (a === b) {\n return a;\n }\n if (a && !b) {\n return a;\n }\n if (b && !a) {\n return b;\n }\n if (!b && !a) {\n return document;\n }\n // fast case, a is a direct descendant of b or vice versa\n if (a.contains && a.contains(b)) {\n return a;\n }\n if (b.contains && b.contains(a)) {\n return b;\n }\n var adepth = this.depth(a);\n var bdepth = this.depth(b);\n var d = adepth - bdepth;\n if (d >= 0) {\n a = this.walk(a, d);\n } else {\n b = this.walk(b, -d);\n }\n while (a && b && a !== b) {\n a = a.parentNode || a.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: function(a, b) {\n var common = this.LCA(a, b);\n // if a is the common ancestor, it must \"deeply\" contain b\n return common === a;\n },\n insideNode: 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 path: function(event) {\n var p;\n if (HAS_FULL_PATH && event.path && event.path.length) {\n p = event.path;\n } else {\n p = [];\n var n = this.findTarget(event);\n while (n) {\n p.push(n);\n n = n.parentNode || n.host;\n }\n }\n return p;\n }\n };\n scope.targetFinding = target;\n /**\n * Given an event, finds the \"deepest\" node that could have been the original target before ShadowDOM retargetting\n *\n * @param {Event} Event An event object with clientX and clientY properties\n * @return {Element} The probable event origninator\n */\n scope.findTarget = target.findTarget.bind(target);\n /**\n * Determines if the \"container\" node deeply contains the \"containee\" node, including 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 * var innode = PolymerGestures.insideNode(event.target, event.clientX, event.clientY);\n * if (innode) {\n * // wait for tap?\n * } else {\n * // tap will never happen\n * }\n * }\n *\n * @param {Node} node\n * @param {Number} x Screen X position\n * @param {Number} y screen Y position\n * @return {Boolean}\n */\n scope.insideNode = target.insideNode;\n\n})(window.PolymerGestures);\n\n/*\n *\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 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() {\n function shadowSelector(v) {\n return 'html /deep/ ' + selector(v);\n }\n function selector(v) {\n return '[touch-action=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}';\n }\n var attrib2css = [\n 'none',\n '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 hasTouchAction = typeof document.head.style.touchAction === 'string';\n // only add shadow selectors if shadowdom is supported\n var hasShadowRoot = !window.ShadowDOMPolyfill && 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 styles += r.selectors.map(selector) + rule(r.rule) + '\\n';\n if (hasShadowRoot) {\n styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\\n';\n }\n }\n });\n\n var el = document.createElement('style');\n el.textContent = styles;\n document.head.appendChild(el);\n }\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://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 is the constructor for new PointerEvents.\n *\n * New Pointer Events must be given a type, and an optional dictionary of\n * initialization properties.\n *\n * Due to certain platform requirements, events returned from the constructor\n * identify as MouseEvents.\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 initialized with properties from `inDict`.\n */\n(function(scope) {\n\n var MOUSE_PROPS = [\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n 'pageX',\n 'pageY'\n ];\n\n var 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_FACTORY = function(){ return function(){}; };\n\n var eventFactory = {\n // TODO(dfreedm): 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, inDict.cancelable || false);\n e.preventTap = eventFactory.preventTap(e);\n return e;\n },\n makeGestureEvent: function(inType, inDict) {\n inDict = inDict || Object.create(null);\n\n var e = this.makeBaseEvent(inType, inDict);\n for (var i = 0, keys = 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 = inDict || 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.pressure) {\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 properties of the PointerEvent interface\n e.pointerId = inDict.pointerId || 0;\n e.width = inDict.width || 0;\n e.height = inDict.height || 0;\n e.pressure = pressure;\n e.tiltX = inDict.tiltX || 0;\n e.tiltY = inDict.tiltY || 0;\n e.pointerType = inDict.pointerType || '';\n e.hwTimestamp = 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/*\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 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 module implements an map of pointer states\n */\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forEach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMap() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS_FN;\n return m;\n } else {\n this.keys = [];\n this.values = [];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.values[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.values.push(inEvent);\n }\n },\n has: function(inId) {\n return this.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1);\n this.values.splice(i, 1);\n }\n },\n get: function(inId) {\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\n clear: function() {\n this.keys.length = 0;\n this.values.length = 0;\n },\n // return value, key, map\n forEach: function(callback, thisArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisArg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() {\n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap;\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 * 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(function(scope) {\n var CLONE_PROPS = [\n // MouseEvent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n // DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',\n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',\n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n '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 // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n function(){},\n false\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');\n\n var eventFactory = scope.eventFactory;\n\n // set of recognizers to run for the currently handled event\n var currentGestures;\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 pointer is moved\n * - pointerover: a pointer crosses into an element\n * - pointerout: a pointer leaves an element\n * - pointercancel: a pointer will no longer generate events\n */\n var dispatcher = {\n IS_IOS: false,\n pointermap: new scope.PointerMap(),\n requiredGestures: new scope.PointerMap(),\n eventMap: Object.create(null),\n // Scope objects for native events.\n // This exists for ease of testing.\n eventSources: Object.create(null),\n eventSourceList: [],\n gestures: [],\n // map gesture event -> {listeners: int, index: gestures[int]}\n dependencyMap: {\n // make sure down and up are in the map to trigger \"register\"\n down: {listeners: 0, index: -1},\n up: {listeners: 0, index: -1}\n },\n gestureQueue: [],\n /**\n * Add a new event source that will generate pointer events.\n *\n * `inSource` must contain an array of event names named `events`, and\n * functions with the names specified in the `events` array.\n * @param {string} name A name for 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.eventSources[name] = s;\n this.eventSourceList.push(s);\n }\n },\n registerGesture: function(name, source) {\n var obj = Object.create(null);\n obj.listeners = 0;\n obj.index = this.gestures.length;\n for (var i = 0, g; i < source.exposes.length; i++) {\n g = source.exposes[i].toLowerCase();\n this.dependencyMap[g] = obj;\n }\n this.gestures.push(source);\n },\n register: function(element, initial) {\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, initial);\n }\n },\n unregister: function(element) {\n var l = this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {\n // call eventsource register\n es.unregister.call(es, element);\n }\n },\n // EVENTS\n down: function(inEvent) {\n this.requiredGestures.set(inEvent.pointerId, currentGestures);\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 this.requiredGestures.delete(inEvent.pointerId);\n },\n cancel: function(inEvent) {\n inEvent.tapPrevented = true;\n this.fireEvent('up', inEvent);\n this.requiredGestures.delete(inEvent.pointerId);\n },\n addGestureDependency: function(node, currentGestures) {\n var gesturesWanted = node._pgEvents;\n if (gesturesWanted) {\n var gk = Object.keys(gesturesWanted);\n for (var i = 0, r, ri, g; i < gk.length; i++) {\n // gesture\n g = gk[i];\n if (gesturesWanted[g] > 0) {\n // lookup gesture recognizer\n r = this.dependencyMap[g];\n // recognizer index\n ri = r ? r.index : -1;\n currentGestures[ri] = true;\n }\n }\n }\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\n var type = inEvent.type;\n\n // only generate the list of desired events on \"down\"\n if (type === 'touchstart' || type === 'mousedown' || type === 'pointerdown' || type === 'MSPointerDown') {\n if (!inEvent._handledByPG) {\n currentGestures = {};\n }\n // in IOS mode, there is only a listener on the document, so this is not re-entrant\n if (this.IS_IOS) {\n var nodes = scope.targetFinding.path(inEvent);\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\n this.addGestureDependency(n, currentGestures);\n }\n } else {\n this.addGestureDependency(inEvent.currentTarget, currentGestures);\n }\n }\n\n if (inEvent._handledByPG) {\n return;\n }\n var fn = this.eventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\n inEvent._handledByPG = true;\n },\n // set up event listeners\n listen: function(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.addEvent(target, e);\n }\n },\n // remove event listeners\n unlisten: function(target, events) {\n for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {\n this.removeEvent(target, e);\n }\n },\n addEvent: function(target, eventName) {\n target.addEventListener(eventName, this.boundHandler);\n },\n removeEvent: function(target, eventName) {\n target.removeEventListener(eventName, this.boundHandler);\n },\n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`, based on the information in\n * `inEvent`.\n *\n * @param {string} inType A string representing the type of event to create\n * @param {Event} inEvent A platform 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.preventDefault;\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.makeEvent(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 * properties.\n */\n cloneEvent: function(inEvent) {\n var eventCopy = Object.create(null), p;\n for (var i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceElement shadow tree\n // Return the 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].correspondingUseElement;\n }\n }\n }\n // keep the semantics of preventDefault\n eventCopy.preventDefault = function() {\n inEvent.preventDefault();\n };\n return eventCopy;\n },\n /**\n * Dispatches the event to its target.\n *\n * @param {Event} inEvent The event to be dispatched.\n * @return {Boolean} True if an event handler returns 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.cloneEvent(inEvent);\n clone.target = t;\n this.fillGestureQueue(clone);\n }\n },\n gestureTrigger: function() {\n // process the gesture queue\n for (var i = 0, e, rg; i < this.gestureQueue.length; i++) {\n e = this.gestureQueue[i];\n rg = e._requiredGestures;\n for (var j = 0, g, fn; j < this.gestures.length; j++) {\n // only run recognizer if an element in the source event's path is listening for those gestures\n if (rg[j]) {\n g = this.gestures[j];\n fn = g[e.type];\n if (fn) {\n fn.call(g, e);\n }\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 ev._requiredGestures = this.requiredGestures.get(ev.pointerId);\n this.gestureQueue.push(ev);\n }\n };\n dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n dispatcher.boundGestureTrigger = dispatcher.gestureTrigger.bind(dispatcher);\n scope.dispatcher = dispatcher;\n\n /**\n * Listen for `gesture` on `node` with the `handler` function\n *\n * If `handler` is the first listener for `gesture`, the underlying gesture recognizer is then enabled.\n *\n * @param {Element} node\n * @param {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.activateGesture = function(node, gesture) {\n var g = gesture.toLowerCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n var recognizer = dispatcher.gestures[dep.index];\n if (!node._pgListeners) {\n dispatcher.register(node);\n node._pgListeners = 0;\n }\n // TODO(dfreedm): re-evaluate bookkeeping to avoid using attributes\n if (recognizer) {\n var touchAction = recognizer.defaultActions && recognizer.defaultActions[g];\n var actionNode;\n switch(node.nodeType) {\n case Node.ELEMENT_NODE:\n actionNode = node;\n break;\n case Node.DOCUMENT_FRAGMENT_NODE:\n actionNode = node.host;\n break;\n default:\n actionNode = null;\n break;\n }\n if (touchAction && actionNode && !actionNode.hasAttribute('touch-action')) {\n actionNode.setAttribute('touch-action', touchAction);\n }\n }\n if (!node._pgEvents) {\n node._pgEvents = {};\n }\n node._pgEvents[g] = (node._pgEvents[g] || 0) + 1;\n node._pgListeners++;\n }\n return Boolean(dep);\n };\n\n /**\n *\n * Listen for `gesture` from `node` with `handler` function.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture\n */\n scope.addEventListener = function(node, gesture, handler, capture) {\n if (handler) {\n scope.activateGesture(node, gesture);\n node.addEventListener(gesture, handler, capture);\n }\n };\n\n /**\n * Tears down the gesture configuration for `node`\n *\n * If `handler` is the last listener for `gesture`, the underlying gesture recognizer is disabled.\n *\n * @param {Element} node\n * @param {string} gesture\n * @return Boolean `gesture` is a valid gesture\n */\n scope.deactivateGesture = function(node, gesture) {\n var g = gesture.toLowerCase();\n var dep = dispatcher.dependencyMap[g];\n if (dep) {\n if (node._pgListeners > 0) {\n node._pgListeners--;\n }\n if (node._pgListeners === 0) {\n dispatcher.unregister(node);\n }\n if (node._pgEvents) {\n if (node._pgEvents[g] > 0) {\n node._pgEvents[g]--;\n } else {\n node._pgEvents[g] = 0;\n }\n }\n }\n return Boolean(dep);\n };\n\n /**\n * Stop listening for `gesture` from `node` with `handler` function.\n *\n * @param {Element} node\n * @param {string} gesture\n * @param {Function} handler\n * @param {Boolean} capture\n */\n scope.removeEventListener = function(node, gesture, handler, capture) {\n if (handler) {\n scope.deactivateGesture(node, gesture);\n node.removeEventListener(gesture, handler, capture);\n }\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 * 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(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_BUTTONS = false;\n try {\n HAS_BUTTONS = new MouseEvent('test', {buttons: 1}).buttons === 1;\n } catch (e) {}\n\n // handler block for native mouse events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',\n events: [\n 'mousedown',\n 'mousemove',\n 'mouseup'\n ],\n exposes: [\n 'down',\n 'up',\n 'move'\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n if (target === document) {\n return;\n }\n dispatcher.unlisten(target, this.events);\n },\n lastTouches: [],\n // collide with the global mouse listener\n isEventSimulatedFromTouch: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n },\n prepareEvent: function(inEvent) {\n var e = dispatcher.cloneEvent(inEvent);\n e.pointerId = this.POINTER_ID;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n e._source = 'mouse';\n if (!HAS_BUTTONS) {\n e.buttons = WHICH_TO_BUTTONS[e.which] || 0;\n }\n return e;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_ID);\n // TODO(dfreedman) workaround for some elements not sending mouseup\n // http://crbug/149091\n if (p) {\n this.mouseup(inEvent);\n }\n var e = this.prepareEvent(inEvent);\n e.target = scope.findTarget(inEvent);\n pointermap.set(this.POINTER_ID, e.target);\n dispatcher.down(e);\n }\n },\n mousemove: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var target = pointermap.get(this.POINTER_ID);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n // handle case where we missed a mouseup\n if (e.buttons === 0) {\n dispatcher.cancel(e);\n this.cleanupMouse();\n } else {\n dispatcher.move(e);\n }\n }\n }\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(this.POINTER_ID);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n },\n cleanupMouse: function() {\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEvents = mouseEvents;\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 * 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(function(scope) {\n var dispatcher = scope.dispatcher;\n var allShadows = scope.targetFinding.allShadows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This should be long enough to ignore compat mouse events made by touch\n var DEDUP_TIMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var HYSTERESIS = 20;\n var ATTRIB = 'touch-action';\n // TODO(dfreedm): disable until http://crbug.com/399765 is resolved\n // var HAS_TOUCH_ACTION = ATTRIB in document.head.style;\n var HAS_TOUCH_ACTION = false;\n\n // handler block for native touch events\n var touchEvents = {\n IS_IOS: false,\n events: [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n exposes: [\n 'down',\n 'up',\n 'move'\n ],\n register: function(target, initial) {\n if (this.IS_IOS ? initial : !initial) {\n dispatcher.listen(target, this.events);\n }\n },\n unregister: function(target) {\n if (!this.IS_IOS) {\n dispatcher.unlisten(target, this.events);\n }\n },\n scrollTypes: {\n EMITTER: 'none',\n XSCROLLER: 'pan-x',\n YSCROLLER: 'pan-y',\n },\n touchActionToScrollType: function(touchAction) {\n var t = touchAction;\n var st = this.scrollTypes;\n if (t === st.EMITTER) {\n return 'none';\n } else if (t === st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCROLLER) {\n return 'Y';\n } else {\n return 'XY';\n }\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTouch.identifier;\n },\n setPrimaryTouch: function(inTouch) {\n // set primary touch if there no pointers, or the 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.clientY};\n this.scrolling = null;\n this.cancelResetClickCount();\n }\n },\n removePrimaryPointer: function(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouch = null;\n this.firstXY = null;\n this.resetClickCount();\n }\n },\n clickCount: 0,\n resetId: 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 cancelResetClickCount: function() {\n if (this.resetId) {\n clearTimeout(this.resetId);\n }\n },\n typeToButtons: function(type) {\n var ret = 0;\n if (type === 'touchstart' || type === 'touchmove') {\n ret = 1;\n }\n return ret;\n },\n findTarget: function(touch, id) {\n if (this.currentTouchEvent.type === 'touchstart') {\n if (this.isPrimaryTouch(touch)) {\n var fastPath = {\n clientX: touch.clientX,\n clientY: touch.clientY,\n path: this.currentTouchEvent.path,\n target: this.currentTouchEvent.target\n };\n return scope.findTarget(fastPath);\n } else {\n return scope.findTarget(touch);\n }\n }\n // reuse target we found in touchstart\n return pointermap.get(id);\n },\n touchToPointer: function(inTouch) {\n var cte = this.currentTouchEvent;\n var e = dispatcher.cloneEvent(inTouch);\n // Spec specifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the touch identifier for compatibility.\n var id = e.pointerId = inTouch.identifier + 2;\n e.target = this.findTarget(inTouch, id);\n e.bubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n e.buttons = this.typeToButtons(cte.type);\n e.width = inTouch.webkitRadiusX || 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.POINTER_TYPE;\n e._source = 'touch';\n // forward touch preventDefaults\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, inFunction) {\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 (pointermap.has(p.pointerId)) {\n inFunction.call(this, p);\n }\n if (inEvent.type === 'touchend' || inEvent._cancel) {\n this.cleanUpPointer(p);\n }\n }\n },\n // For single axis scrollers, determines whether the element should emit\n // pointer events or behave as a scroller\n shouldScroll: function(inEvent) {\n if (this.firstXY) {\n var ret;\n var touchAction = scope.targetFinding.findTouchAction(inEvent);\n var scrollAxis = this.touchActionToScrollType(touchAction);\n if (scrollAxis === 'none') {\n // this element is a touch-action: none, should never scroll\n ret = false;\n } else if (scrollAxis === 'XY') {\n // this element 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 = scrollAxis;\n var oa = scrollAxis === 'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.firstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\n // if delta in the scroll axis > delta other axis, scroll instead of\n // making events\n ret = da >= doa;\n }\n return ret;\n }\n },\n findTouch: function(inTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {\n if (t.identifier === inId) {\n return true;\n }\n }\n },\n // In some instances, a touchstart can happen without a touchend. This\n // leaves the pointermap in a broken state.\n // Therefore, on every touchstart, we remove the touches that did not fire a\n // touchend event.\n // To keep state globally consistent, we fire a\n // pointercancel for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n var tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length here, as the touchstart has not\n // been processed yet.\n if (pointermap.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(function(value, key) {\n // Never remove pointerId == 1, which is mouse.\n // Touch identifiers are 2 smaller than their pointerId, which is the\n // index in pointermap.\n if (key !== 1 && !this.findTouch(tl, key - 2)) {\n var p = value;\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.processTouches(inEvent, this.down);\n }\n },\n down: function(inPointer) {\n dispatcher.down(inPointer);\n },\n touchmove: function(inEvent) {\n if (HAS_TOUCH_ACTION) {\n // touchevent.cancelable == false is sent when the page is scrolling under native Touch Action in Chrome 36\n // https://groups.google.com/a/chromium.org/d/msg/input-dev/wHnyukcYBcA/b9kmtwM1jJQJ\n if (inEvent.cancelable) {\n this.processTouches(inEvent, this.move);\n }\n } else {\n if (!this.scrolling) {\n if (this.scrolling === null && this.shouldScroll(inEvent)) {\n this.scrolling = true;\n } else {\n this.scrolling = false;\n inEvent.preventDefault();\n 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.scrolling = 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.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'](inPointer.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 touch\n var lt = {x: t.clientX, y: t.clientY};\n lts.push(lt);\n var fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i > -1) {\n lts.splice(i, 1);\n }\n }).bind(null, lts, lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n scope.touchEvents = touchEvents;\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 * 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(function(scope) {\n var dispatcher = scope.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 'MSPointerMove',\n 'MSPointerUp',\n 'MSPointerCancel',\n ],\n register: function(target) {\n dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n if (target === document) {\n return;\n }\n dispatcher.unlisten(target, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: function(inEvent) {\n var e = inEvent;\n 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.findTarget(inEvent);\n pointermap.set(inEvent.pointerId, e.target);\n dispatcher.down(e);\n },\n MSPointerMove: function(inEvent) {\n var target = pointermap.get(inEvent.pointerId);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n dispatcher.move(e);\n }\n },\n MSPointerUp: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\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 = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.msEvents = msEvents;\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 * 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(function(scope) {\n var dispatcher = scope.dispatcher;\n var pointermap = dispatcher.pointermap;\n var pointerEvents = {\n events: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\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 dispatcher.listen(target, this.events);\n },\n unregister: function(target) {\n if (target === document) {\n return;\n }\n dispatcher.unlisten(target, this.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.findTarget(inEvent);\n pointermap.set(e.pointerId, e.target);\n dispatcher.down(e);\n },\n pointermove: function(inEvent) {\n var target = pointermap.get(inEvent.pointerId);\n if (target) {\n var e = this.prepareEvent(inEvent);\n e.target = target;\n dispatcher.move(e);\n }\n },\n pointerup: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n },\n pointercancel: function(inEvent) {\n var e = this.prepareEvent(inEvent);\n e.relatedTarget = scope.findTarget(inEvent);\n e.target = pointermap.get(e.pointerId);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\n }\n };\n\n scope.pointerEvents = pointerEvents;\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 * 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 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\n var dispatcher = scope.dispatcher;\n var nav = window.navigator;\n\n if (window.PointerEvent) {\n dispatcher.registerSource('pointer', scope.pointerEvents);\n } else if (nav.msPointerEnabled) {\n dispatcher.registerSource('ms', scope.msEvents);\n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n if (window.ontouchstart !== undefined) {\n dispatcher.registerSource('touch', scope.touchEvents);\n }\n }\n\n // Work around iOS bugs https://bugs.webkit.org/show_bug.cgi?id=135628 and https://bugs.webkit.org/show_bug.cgi?id=136506\n var ua = navigator.userAgent;\n var IS_IOS = ua.match(/iPad|iPhone|iPod/) && 'ontouchstart' in window;\n\n dispatcher.IS_IOS = IS_IOS;\n scope.touchEvents.IS_IOS = IS_IOS;\n\n dispatcher.register(document, true);\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 * 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 since the last track.\n * @type Number\n * @property ddx\n */\n/**\n * Pixles moved in the y direction since the last track.\n * @type Number\n * @property ddy\n */\n/**\n * The clientX position of the track gesture.\n * @type Number\n * @property 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 gesture.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY position of the track gesture.\n * @type Number\n * @property pageY\n */\n/**\n * The screenX position of the track gesture.\n * @type Number\n * @property screenX\n */\n/**\n * The screenY position of the track gesture.\n * @type Number\n * @property screenY\n */\n/**\n * The 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 relatedTarget\n */\n/**\n * The type of pointer that make the track gesture.\n * @type String\n * @property pointerType\n */\n/**\n *\n * This event fires for all pointer movement being tracked.\n *\n * @class 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 pointermap = new scope.PointerMap();\n var track = {\n events: [\n 'down',\n 'move',\n 'up',\n ],\n exposes: [\n 'trackstart',\n 'track',\n 'trackx',\n 'tracky',\n 'trackend'\n ],\n defaultActions: {\n 'track': 'none',\n 'trackx': 'pan-y',\n 'tracky': 'pan-x'\n },\n WIGGLE_THRESHOLD: 4,\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1;\n },\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n if (inA && inB) {\n x = inB.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.clampDir(dd.x);\n } else if (inType === 'trackx') {\n return;\n }\n if (dd.y) {\n t.yDirection = this.clampDir(dd.y);\n } else if (inType === 'tracky') {\n return;\n }\n var gestureProto = {\n bubbles: true,\n cancelable: true,\n trackInfo: t.trackInfo,\n relatedTarget: inEvent.relatedTarget,\n pointerType: inEvent.pointerType,\n pointerId: inEvent.pointerId,\n _source: 'track'\n };\n if (inType !== 'tracky') {\n gestureProto.x = inEvent.x;\n gestureProto.dx = d.x;\n gestureProto.ddx = dd.x;\n gestureProto.clientX = inEvent.clientX;\n gestureProto.pageX = inEvent.pageX;\n gestureProto.screenX = inEvent.screenX;\n gestureProto.xDirection = t.xDirection;\n }\n if (inType !== 'trackx') {\n gestureProto.dy = d.y;\n gestureProto.ddy = dd.y;\n gestureProto.y = inEvent.y;\n gestureProto.clientY = inEvent.clientY;\n gestureProto.pageY = inEvent.pageY;\n gestureProto.screenY = inEvent.screenY;\n gestureProto.yDirection = t.yDirection;\n }\n var e = eventFactory.makeGestureEvent(inType, gestureProto);\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 downEvent: inEvent,\n downTarget: inEvent.target,\n trackInfo: {},\n lastMoveEvent: null,\n xDirection: 0,\n yDirection: 0,\n tracking: false\n };\n pointermap.set(inEvent.pointerId, p);\n }\n },\n 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 p.lastMoveEvent = p.downEvent;\n this.fireTrack('trackstart', inEvent, p);\n }\n }\n if (p.tracking) {\n this.fireTrack('track', inEvent, p);\n this.fireTrack('trackx', inEvent, p);\n this.fireTrack('tracky', inEvent, p);\n }\n p.lastMoveEvent = inEvent;\n }\n },\n up: function(inEvent) {\n var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (p.tracking) {\n this.fireTrack('trackend', inEvent, p);\n }\n pointermap.delete(inEvent.pointerId);\n }\n }\n };\n dispatcher.registerGesture('track', track);\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 * 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 is fired when a pointer is held down for 200ms.\n *\n * @module PointerGestures\n * @submodule 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 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 clientY\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 * Milliseconds pointer has been held down.\n * @type Number\n * @property holdTime\n */\n/**\n * This event is fired when a held pointer is released or moved.\n *\n * @class release\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var hold = {\n // wait at least HOLD_DELAY ms between hold and pulse events\n HOLD_DELAY: 200,\n // pointer can move WIGGLE_THRESHOLD pixels before not counting as a hold\n WIGGLE_THRESHOLD: 16,\n events: [\n 'down',\n 'move',\n 'up',\n ],\n exposes: [\n 'hold',\n 'holdpulse',\n 'release'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: function() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n var type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n this.held = true;\n },\n cancel: function() {\n clearInterval(this.holdJob);\n if (this.held) {\n this.fireHold('release');\n }\n this.held = false;\n this.heldPointer = null;\n this.target = null;\n this.holdJob = null;\n },\n down: function(inEvent) {\n if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer = inEvent;\n this.target = inEvent.target;\n this.holdJob = setInterval(this.pulse.bind(this), this.HOLD_DELAY);\n }\n },\n up: function(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n this.cancel();\n }\n },\n move: function(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) {\n var x = inEvent.clientX - this.heldPointer.clientX;\n var y = inEvent.clientY - this.heldPointer.clientY;\n if ((x * x + y * y) > this.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n },\n fireHold: function(inType, inHoldTime) {\n var p = {\n bubbles: true,\n cancelable: true,\n pointerType: this.heldPointer.pointerType,\n pointerId: this.heldPointer.pointerId,\n x: this.heldPointer.clientX,\n y: this.heldPointer.clientY,\n _source: 'hold'\n };\n if (inHoldTime) {\n p.holdTime = inHoldTime;\n }\n var e = eventFactory.makeGestureEvent(inType, p);\n this.target.dispatchEvent(e);\n }\n };\n dispatcher.registerGesture('hold', hold);\n})(window.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 * 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 is fired when a pointer quickly goes down and up, and is used to\n * denote activation.\n *\n * Any gesture event can prevent the tap event from being created by calling\n * `event.preventTap`.\n *\n * Any pointer event can prevent the tap by setting the `tapPrevented` property\n * on itself.\n *\n * @module PointerGestures\n * @submodule Events\n * @class tap\n */\n/**\n * X axis position of the tap.\n * @property x\n * @type Number\n */\n/**\n * Y axis position of the tap.\n * @property y\n * @type Number\n */\n/**\n * Type of the pointer that made the tap.\n * @property pointerType\n * @type String\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var eventFactory = scope.eventFactory;\n var pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'down',\n 'up'\n ],\n exposes: [\n 'tap'\n ],\n down: function(inEvent) {\n if (inEvent.isPrimary && !inEvent.tapPrevented) {\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: function(e, downState) {\n if (e.pointerType === 'mouse') {\n // only allow left click to tap for mouse\n return downState.buttons === 1;\n }\n return !e.tapPrevented;\n },\n up: function(inEvent) {\n var start = pointermap.get(inEvent.pointerId);\n if (start && this.shouldTap(inEvent, 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.clientX,\n y: inEvent.clientY,\n detail: inEvent.detail,\n pointerType: inEvent.pointerType,\n pointerId: inEvent.pointerId,\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 eventFactory.preventTap = function(e) {\n return function() {\n e.tapPrevented = true;\n pointermap.delete(e.pointerId);\n };\n };\n dispatcher.registerGesture('tap', tap);\n})(window.PolymerGestures);\n\n/*\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF 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 Syntax,\n Messages,\n source,\n index,\n length,\n delegate,\n lookahead,\n state;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpression: 'ArrayExpression',\n BinaryExpression: 'BinaryExpression',\n CallExpression: 'CallExpression',\n ConditionalExpression: 'ConditionalExpression',\n EmptyStatement: 'EmptyStatement',\n ExpressionStatement: 'ExpressionStatement',\n Identifier: 'Identifier',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ThisExpression: 'ThisExpression',\n UnaryExpression: 'UnaryExpression'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n 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 error.\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 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 isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n\n // 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 32) || // space\n (ch === 9) || // tab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch === 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEFF'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n function 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 function 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 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 function 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.slice(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.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n range: [start, index]\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 46: // . dot\n case 40: // ( open bracket\n case 41: // ) 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, index]\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assignment or comparison operator.\n if (code2 === 61) {\n switch (code) {\n case 37: // %\n case 38: // &\n case 42: // *:\n case 43: // +\n case 45: // -\n case 47: // /\n case 60: // <\n case 62: // >\n case 124: // |\n index += 2;\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n range: [start, index]\n };\n\n case 33: // !\n case 61: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 61) {\n ++index;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n range: [start, index]\n };\n default:\n break;\n }\n }\n break;\n }\n\n // Peek more characters.\n\n ch2 = source[index + 1];\n\n // Other 2-character punctuators: && ||\n\n if (ch1 === ch2 && ('&|'.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 && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.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 number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n 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[index];\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 str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n str += ch;\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.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 === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n function advance() {\n var ch;\n\n skipWhitespace();\n\n if (index >= length) {\n return {\n type: Token.EOF,\n range: [index, index]\n };\n }\n\n ch = source.charCodeAt(index);\n\n // Very common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (#39) or double quote (#34).\n if (ch === 39 || ch === 34) {\n return scanStringLiteral();\n }\n\n if (isIdentifierStart(ch)) {\n return 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.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.range[1];\n\n lookahead = advance();\n\n index = token.range[1];\n\n return token;\n }\n\n function peek() {\n var pos;\n\n pos = index;\n lookahead = advance();\n index = pos;\n }\n\n // Throw an exception\n\n function throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function (whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n }\n\n // Throw an exception because of the token.\n\n function 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 thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpected(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (char #59).\n if (source.charCodeAt(index) === 59) {\n lex();\n return;\n }\n\n 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 return delegate.createArrayExpression(elements);\n }\n\n // 11.1.5 Object Initialiser\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.StringLiteral || token.type === Token.NumericLiteral) {\n return delegate.createLiteral(token);\n }\n\n return delegate.createIdentifier(token.value);\n }\n\n function parseObjectProperty() {\n var token, key;\n\n token = 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.push(parseObjectProperty());\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return delegate.createObjectExpression(properties);\n }\n\n // 11.1.6 The Grouping Operator\n\n function parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n 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.StringLiteral || type === Token.NumericLiteral) {\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keyword) {\n if (matchKeyword('this')) {\n lex();\n expr = delegate.createThisExpression();\n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = delegate.createLiteral(token);\n } else if (type === Token.NullLiteral) {\n token = lex();\n token.value = null;\n expr = delegate.createLiteral(token);\n } else if (match('[')) {\n expr = parseArrayInitialiser();\n } else if (match('{')) {\n expr = parseObjectInitialiser();\n }\n\n if (expr) {\n return expr;\n }\n\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token;\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return delegate.createIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n }\n\n function parseLeftHandSideExpression() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n while (true) {\n if (match('[')) {\n property = parseComputedMember();\n expr = delegate.createMemberExpression('[', expr, property);\n } else if (match('.')) {\n property = parseNonComputedMember();\n expr = delegate.createMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = delegate.createCallExpression(expr, args);\n } else {\n break;\n }\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var parsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Unary 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 (match('+') || match('-') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = delegate.createUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throwError({}, Messages.UnexpectedToken);\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 case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = 7;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpression() {\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 = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n while (i > 1) {\n expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = delegate.createConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n }\n\n // Simplification since we do not support AssignmentExpression.\n var parseExpression = parseConditionalExpression;\n\n // Polymer Syntax extensions\n\n // Filter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identifier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n var identifier, args;\n\n identifier = lex();\n\n if (identifier.type !== Token.Identifier) {\n throwUnexpected(identifier);\n }\n\n args = match('(') ? parseArguments() : [];\n\n return delegate.createFilter(identifier.value, args);\n }\n\n // Filters ::\n // \"|\" Filter\n // Filters \"|\" Filter\n\n function parseFilters() {\n while (match('|')) {\n lex();\n parseFilter();\n }\n }\n\n // TopLevel ::\n // LabelledExpressions\n // AsExpression\n // InExpression\n // FilterExpression\n\n // AsExpression ::\n // FilterExpression as Identifier\n\n // InExpression ::\n // Identifier, Identifier in FilterExpression\n // Identifier in FilterExpression\n\n // FilterExpression ::\n // Expression\n // Expression Filters\n\n function parseTopLevel() {\n skipWhitespace();\n peek();\n\n var expr = parseExpression();\n if (expr) {\n if (lookahead.value === ',' || lookahead.value == 'in' &&\n expr.type === Syntax.Identifier) {\n parseInExpression(expr);\n } else {\n parseFilters();\n if (lookahead.value === 'as') {\n 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 parseAsExpression(expr) {\n lex(); // as\n var identifier = lex().value;\n delegate.createAsExpression(expr, identifier);\n }\n\n function parseInExpression(identifier) {\n var indexName;\n if (lookahead.value === ',') {\n lex();\n if (lookahead.type !== Token.Identifier)\n throwUnexpected(lookahead);\n indexName = lex().value;\n }\n\n lex(); // in\n var expr = parseExpression();\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 length = source.length;\n lookahead = null;\n state = {\n labelSet: {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima = {\n parse: parse\n };\n})(this);\n\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 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 (global) {\n 'use strict';\n\n function prepareBinding(expressionText, name, node, filterRegistry) {\n var expression;\n try {\n expression = getExpression(expressionText);\n if (expression.scopeIdent &&\n (node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error('as and in can only be used within