| -{"version":3,"file":"polymer.js","sources":["../src/polymer.js","../src/boot.js","../src/lib/lang.js","../src/lib/job.js","../src/lib/dom.js","../src/lib/super.js","../src/lib/deserialize.js","../src/api.js","../src/instance/utils.js","../src/instance/events.js","../src/instance/attributes.js","../src/instance/properties.js","../src/instance/mdv.js","../src/instance/base.js","../src/instance/styles.js","../src/declaration/polymer.js","../src/declaration/path.js","../src/declaration/styles.js","../src/declaration/events.js","../src/declaration/properties.js","../src/declaration/attributes.js","../src/declaration/prototype.js","../src/declaration/queue.js","../src/declaration/import.js","../src/declaration/polymer-element.js"],"names":["Polymer","window","scope","extend","prototype","api","Object","getOwnPropertyNames","forEach","n","pd","getOwnPropertyDescriptor","defineProperty","value","nom","job","callback","wait","stop","Job","this","go","inContext","context","boundComplete","complete","bind","h","setTimeout","handle","clearTimeout","requestAnimationFrame","cancelAnimationFrame","call","registry","HTMLElement","register","tag","getPrototypeForTag","getPrototypeOf","document","createElement","originalStopPropagation","Event","stopPropagation","cancelBubble","apply","arguments","$super","arrayOfArgs","caller","_super","nameInThis","console","warn","memoizeSuper","fn","nextSuper","proto","name","method","p","__proto__","n$","i","l","length","d","super","deserializeValue","currentValue","inferredType","Date","typeHandlers","string","date","parse","now","boolean","number","parseFloat","parseInt","isNaN","object","JSON","replace","e","function","declaration","instance","publish","apis","utils","async","args","timeout","Platform","flush","cancelAsync","Math","round","fire","type","detail","onNode","bubbles","cancelable","node","event","CustomEvent","undefined","dispatchEvent","asyncFire","classFollows","anew","old","className","classList","remove","add","nop","nob","asyncMethod","log","logFlags","EVENT_PREFIX","events","addHostListeners","eventDelegates","keys","localName","bindable","eventName","self","PolymerExpressions","prepareEventBinding","Path","get","resolveEventHandler","model","path","getValueFrom","dispatchMethod","obj","group","groupEnd","attributes","copyInstanceAttributes","a$","_instanceAttributes","k","hasAttribute","setAttribute","takeAttributes","_publishLC","a","attributeToProperty","propertyForAttribute","search","bindPattern","match","stringValue","serializeValue","reflectPropertyToAttribute","serializedValue","removeAttribute","bindProperties","inA","inProperty","observable","LOG_BIND_PROPS","inB","inPath","v","discardChanges","setValue","Observer","defineComputedProperty","properties","observeProperties","_observeNames","pn$","_publishNames","o","_propertyObserver","CompoundObserver","addPath","observeArrayValue","observe","open","notifyPropertyChanges","newValues","oldValues","paths","called","invokeMethod","callbackName","Array","isArray","unregisterObserver","observer","ArrayObserver","registerObserver","bindProperty","property","unbindAllProperties","close","unregisterObservers","unbindProperty","o$","_observers","findEventController","parentNode","lightDomController","host","unbindNodeTree","forNodeTree","_nodeUnbindAll","unbindAll","child","firstChild","nextSibling","syntax","ctlr","mdv","instanceTemplate","template","createInstance","_elementPrepared","prepareElement","unbind","path_","bindings","mixinSuper","asyncUnbindAll","_unbound","_unbindAllJob","root","shadowRoot","olderShadowRoot","cancelUnbindAll","preventCascade","mustachePattern","isBase","hasOwnProperty","PolymerBase","preparingElements","base","created","ready","createdCallback","ownerDocument","defaultView","alwaysPrepare","shadowRoots","parseDeclarations","attachedCallback","attached","enteredView","hasBeenAttached","domReady","detachedCallback","preventDispose","detached","leftView","enteredViewCallback","leftViewCallback","enteredDocumentCallback","leftDocumentCallback","element","parseDeclaration","elementElement","fetchTemplate","shadowFromTemplate","querySelector","createShadowRoot","resetStyleInheritance","dom","appendChild","shadowRootReady","lightFromTemplate","marshalNodeReferences","PointerGestures","$","querySelectorAll","id","attributeChangedCallback","getAttribute","attributeChanged","onMutation","listener","MutationObserver","mutations","disconnect","childList","subtree","constructor","Base","shimCssText","cssText","is","selector","ShadowCSS","makeScopeSelector","STYLE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","styles","installControllerStyles","findStyleScope","scopeHasNamedStyle","cssTextForScope","installScopeCssText","installScopeStyle","style","s","textContent","ShadowDOMPolyfill","cssTextToScopeStyle","applyStyleToScope","_scopeStyles","getRegisteredPrototype","registerPrototype","notifyPrototype","waitingForPrototype","client","waitPrototype","registerWhenReady","prototypesByName","declarations","deliverDeclarations","resolveElementPaths","urlResolver","resolveDom","addResolvePathApi","assetPath","URL","baseURI","resolvePath","urlPath","u","href","importRuleForSheet","sheet","baseUrl","head","clone","createStyleElement","attr","cssTextFromSheet","__resource","matchesSelector","inSelector","matches","STYLE_SELECTOR","STYLE_LOADABLE_MATCH","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","loadStyles","content","templateContent","convertSheetsToStyles","findLoadableStyles","styleResolver","c","s$","copySheetAttributes","replaceChild","link","loadables","push","installSheets","cacheSheets","cacheStyles","installLocalSheets","installGlobalStyles","sheets","findNodes","removeChild","filter","insertBefore","matcher","nodes","array","templateNodes","concat","styleForScope","scopeDescriptor","webkitMatchesSelector","mozMatchesSelector","parseHostEvents","delegates","addAttributeDelegates","hasEventPrefix","removeEventPrefix","trim","slice","prefixLength","inferObservers","explodeObservers","exploded","ni","names","split","optimizePropertyMaps","publishProperties","requireProperties","lowerCaseMap","map","toLowerCase","ATTRIBUTES_ATTRIBUTE","ATTRIBUTES_REGEX","inheritAttributesObjects","inheritObject","publishAttributes","accumulateInstanceAttributes","clonable","isInstanceAttribute","blackList","extends","noscript","assetpath","cache-csstext","ensurePrototypeTraversal","ancestor","extendeeName","buildPrototype","publishConstructor","extension","generateBasePrototype","desugarBeforeChaining","chainPrototypes","desugarAfterChaining","inheritMetaData","chained","chainObject","extendee","shimStyling","registerCallback","symbol","ctor","extnds","findBasePrototype","ensureBaseApi","memoizedBases","extended","create","mixinMethod","source","info","typeExtension","findTypeExtension","registerElement","indexOf","inherited","queueForElement","contains","mainQueue","importQueue","nextQueued","whenPolymerReady","queue","waitToReady","CustomElements","HTMLImports","whenImportsReady","addReadyCallback","check","__check","__go","useNative","readied","shift","nextElement","canReady","isEmpty","upgradeDocumentTree","readyCallbacks","addEventListener","importElements","elementOrFragment","importUrls","urls","url","frag","createDocumentFragment","rel","import","isRegistered","Boolean","isCustomTag","init","loadResources","registered","waitingForQueue","waitingForResources","_register","handleNoScript","script","_needsResources","body"],"mappings":"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","sourcesContent":["/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\nPolymer = {};\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n// TODO(sorvell): this ensures Polymer is an object and not a function\n// Platform is currently defining it as a function to allow for async loading\n// of polymer; once we refine the loading process this likely goes away.\nif (typeof window.Polymer === 'function') {\n  Polymer = {};\n}\n\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // copy own properties from 'api' to 'prototype, with name hinting for 'super'\n  function extend(prototype, api) {\n    if (prototype && api) {\n      // use only own properties of 'api'\n      Object.getOwnPropertyNames(api).forEach(function(n) {\n        // acquire property descriptor\n        var pd = Object.getOwnPropertyDescriptor(api, n);\n        if (pd) {\n          // clone property via descriptor\n          Object.defineProperty(prototype, n, pd);\n          // cache name-of-method for 'super' engine\n          if (typeof pd.value == 'function') {\n            // hint the 'super' engine\n            pd.value.nom = n;\n          }\n        }\n      });\n    }\n    return prototype;\n  }\n  \n  // exports\n\n  scope.extend = extend;\n\n})(Polymer);\n","/* \n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n  \n  // usage\n  \n  // invoke cb.call(this) in 100ms, unless the job is re-registered,\n  // which resets the timer\n  // \n  // this.myJob = this.job(this.myJob, cb, 100)\n  //\n  // returns a job handle which can be used to re-register a job\n\n  var Job = function(inContext) {\n    this.context = inContext;\n    this.boundComplete = this.complete.bind(this)\n  };\n  Job.prototype = {\n    go: function(callback, wait) {\n      this.callback = callback;\n      var h;\n      if (!wait) {\n        h = requestAnimationFrame(this.boundComplete);\n        this.handle = function() {\n          cancelAnimationFrame(h);\n        }\n      } else {\n        h = setTimeout(this.boundComplete, wait);\n        this.handle = function() {\n          clearTimeout(h);\n        }\n      }\n    },\n    stop: function() {\n      if (this.handle) {\n        this.handle();\n        this.handle = null;\n      }\n    },\n    complete: function() {\n      if (this.handle) {\n        this.stop();\n        this.callback.call(this.context);\n      }\n    }\n  };\n  \n  function job(job, callback, wait) {\n    if (job) {\n      job.stop();\n    } else {\n      job = new Job(this);\n    }\n    job.go(callback, wait);\n    return job;\n  }\n  \n  // exports \n\n  scope.job = job;\n  \n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  var registry = {};\n\n  HTMLElement.register = function(tag, prototype) {\n    registry[tag] = prototype;\n  }\n\n  // get prototype mapped to node <tag>\n  HTMLElement.getPrototypeForTag = function(tag) {\n    var prototype = !tag ? HTMLElement.prototype : registry[tag];\n    // TODO(sjmiles): creating <tag> is likely to have wasteful side-effects\n    return prototype || Object.getPrototypeOf(document.createElement(tag));\n  };\n\n  // we have to flag propagation stoppage for the event dispatcher\n  var originalStopPropagation = Event.prototype.stopPropagation;\n  Event.prototype.stopPropagation = function() {\n    this.cancelBubble = true;\n    originalStopPropagation.apply(this, arguments);\n  };\n  \n  // TODO(sorvell): remove when we're sure imports does not need\n  // to load stylesheets\n  /*\n  HTMLImports.importer.preloadSelectors += \n      ', polymer-element link[rel=stylesheet]';\n  */\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n (function(scope) {\n    // super\n\n    // `arrayOfArgs` is an optional array of args like one might pass\n    // to `Function.apply`\n\n    // TODO(sjmiles):\n    //    $super must be installed on an instance or prototype chain\n    //    as `super`, and invoked via `this`, e.g.\n    //      `this.super();`\n\n    //    will not work if function objects are not unique, for example,\n    //    when using mixins.\n    //    The memoization strategy assumes each function exists on only one \n    //    prototype chain i.e. we use the function object for memoizing)\n    //    perhaps we can bookkeep on the prototype itself instead\n    function $super(arrayOfArgs) {\n      // since we are thunking a method call, performance is important here: \n      // memoize all lookups, once memoized the fast path calls no other \n      // functions\n      //\n      // find the caller (cannot be `strict` because of 'caller')\n      var caller = $super.caller;\n      // memoized 'name of method' \n      var nom = caller.nom;\n      // memoized next implementation prototype\n      var _super = caller._super;\n      if (!_super) {\n        if (!nom) {\n          nom = caller.nom = nameInThis.call(this, caller);\n        }\n        if (!nom) {\n          console.warn('called super() on a method not installed declaratively (has no .nom property)');\n        }\n        // super prototype is either cached or we have to find it\n        // by searching __proto__ (at the 'top')\n        _super = memoizeSuper(caller, nom, getPrototypeOf(this));\n      }\n      if (!_super) {\n        // if _super is falsey, there is no super implementation\n        //console.warn('called $super(' + nom + ') where there is no super implementation');\n      } else {\n        // our super function\n        var fn = _super[nom];\n        // memoize information so 'fn' can call 'super'\n        if (!fn._super) {\n          memoizeSuper(fn, nom, _super);\n        }\n        // invoke the inherited method\n        // if 'fn' is not function valued, this will throw\n        return fn.apply(this, arrayOfArgs || []);\n      }\n    }\n\n    function nextSuper(proto, name, caller) {\n      // look for an inherited prototype that implements name\n      while (proto) {\n        if ((proto[name] !== caller) && proto[name]) {\n          return proto;\n        }\n        proto = getPrototypeOf(proto);\n      }\n    }\n\n    function memoizeSuper(method, name, proto) {\n      // find and cache next prototype containing `name`\n      // we need the prototype so we can do another lookup\n      // from here\n      method._super = nextSuper(proto, name, method);\n      if (method._super) {\n        // _super is a prototype, the actual method is _super[name]\n        // tag super method with it's name for further lookups\n        method._super[name].nom = name;\n      }\n      return method._super;\n    }\n\n    function nameInThis(value) {\n      var p = this.__proto__;\n      while (p && p !== HTMLElement.prototype) {\n        // TODO(sjmiles): getOwnPropertyNames is absurdly expensive\n        var n$ = Object.getOwnPropertyNames(p);\n        for (var i=0, l=n$.length, n; i<l && (n=n$[i]); i++) {\n          var d = Object.getOwnPropertyDescriptor(p, n);\n          if (typeof d.value === 'function' && d.value === value) {\n            return n;\n          }\n        }\n        p = p.__proto__;\n      }\n    }\n\n    // NOTE: In some platforms (IE10) the prototype chain is faked via \n    // __proto__. Therefore, always get prototype via __proto__ instead of\n    // the more standard Object.getPrototypeOf.\n    function getPrototypeOf(prototype) {\n      return prototype.__proto__;\n    }\n\n    // utility function to precompute name tags for functions\n    // in a (unchained) prototype\n    function hintSuper(prototype) {\n      // tag functions with their prototype name to optimize\n      // super call invocations\n      for (var n in prototype) {\n        var pd = Object.getOwnPropertyDescriptor(prototype, n);\n        if (pd && typeof pd.value === 'function') {\n          pd.value.nom = n;\n        }\n      }\n    }\n\n    // exports\n\n    scope.super = $super;\n\n})(Polymer);\n","/* \n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n  var typeHandlers = {\n    string: function(value) {\n      return value;\n    },\n    date: function(value) {\n      return new Date(Date.parse(value) || Date.now());\n    },\n    boolean: function(value) {\n      if (value === '') {\n        return true;\n      }\n      return value === 'false' ? false : !!value;\n    },\n    number: function(value) {\n      var n = parseFloat(value);\n      // hex values like \"0xFFFF\" parseFloat as 0\n      if (n === 0) {\n        n = parseInt(value);\n      }\n      return isNaN(n) ? value : n;\n      // this code disabled because encoded values (like \"0xFFFF\")\n      // do not round trip to their original format\n      //return (String(floatVal) === value) ? floatVal : value;\n    },\n    object: function(value, currentValue) {\n      if (currentValue === null) {\n        return value;\n      }\n      try {\n        // If the string is an object, we can parse is with the JSON library.\n        // include convenience replace for single-quotes. If the author omits\n        // quotes altogether, parse will fail.\n        return JSON.parse(value.replace(/'/g, '\"'));\n      } catch(e) {\n        // The object isn't valid JSON, return the raw value\n        return value;\n      }\n    },\n    // avoid deserialization of functions\n    'function': function(value, currentValue) {\n      return currentValue;\n    }\n  };\n\n  function deserializeValue(value, currentValue) {\n    // attempt to infer type from default value\n    var inferredType = typeof currentValue;\n    // invent 'date' type value for Date\n    if (currentValue instanceof Date) {\n      inferredType = 'date';\n    }\n    // delegate deserialization via type string\n    return typeHandlers[inferredType](value, currentValue);\n  }\n\n  // exports\n\n  scope.deserializeValue = deserializeValue;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var extend = scope.extend;\n\n  // module\n\n  var api = {};\n\n  api.declaration = {};\n  api.instance = {};\n\n  api.publish = function(apis, prototype) {\n    for (var n in apis) {\n      extend(prototype, apis[n]);\n    }\n  }\n\n  // exports\n\n  scope.api = api;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  var utils = {\n    /**\n      * Invokes a function asynchronously. The context of the callback\n      * function is bound to 'this' automatically.\n      * @method async\n      * @param {Function|String} method\n      * @param {any|Array} args\n      * @param {number} timeout\n      */\n    async: function(method, args, timeout) {\n      // when polyfilling Object.observe, ensure changes \n      // propagate before executing the async method\n      Platform.flush();\n      // second argument to `apply` must be an array\n      args = (args && args.length) ? args : [args];\n      // function to invoke\n      var fn = function() {\n        (this[method] || method).apply(this, args);\n      }.bind(this);\n      // execute `fn` sooner or later\n      var handle = timeout ? setTimeout(fn, timeout) :\n          requestAnimationFrame(fn);\n      // NOTE: switch on inverting handle to determine which time is used.\n      return timeout ? handle : 1 / handle;\n    },\n    cancelAsync: function(handle) {\n      if (handle < 1) {\n        cancelAnimationFrame(Math.round(1 / handle));\n      } else {\n        clearTimeout(handle);\n      }\n    },\n    /**\n      * Fire an event.\n      * @method fire\n      * @returns {Object} event\n      * @param {string} type An event name.\n      * @param {any} detail\n      * @param {Node} onNode Target node.\n      */\n    fire: function(type, detail, onNode, bubbles, cancelable) {\n      var node = onNode || this;\n      var detail = detail || {};\n      var event = new CustomEvent(type, {\n        bubbles: (bubbles !== undefined ? bubbles : true), \n        cancelable: (cancelable !== undefined ? cancelable : true), \n        detail: detail\n      });\n      node.dispatchEvent(event);\n      return event;\n    },\n    /**\n      * Fire an event asynchronously.\n      * @method asyncFire\n      * @param {string} type An event name.\n      * @param detail\n      * @param {Node} toNode Target node.\n      */\n    asyncFire: function(/*inType, inDetail*/) {\n      this.async(\"fire\", arguments);\n    },\n    /**\n      * Remove class from old, add class to anew, if they exist\n      * @param classFollows\n      * @param anew A node.\n      * @param old A node\n      * @param className\n      */\n    classFollows: function(anew, old, className) {\n      if (old) {\n        old.classList.remove(className);\n      }\n      if (anew) {\n        anew.classList.add(className);\n      }\n    }\n  };\n\n  // no-operation function for handy stubs\n  var nop = function() {};\n\n  // null-object for handy stubs\n  var nob = {};\n\n  // deprecated\n\n  utils.asyncMethod = utils.async;\n\n  // exports\n\n  scope.api.instance.utils = utils;\n  scope.nop = nop;\n  scope.nob = nob;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n  // imports\n\n  var log = window.logFlags || {};\n  var EVENT_PREFIX = 'on-';\n\n  // instance events api\n  var events = {\n    // read-only\n    EVENT_PREFIX: EVENT_PREFIX,\n    // event listeners on host\n    addHostListeners: function() {\n      var events = this.eventDelegates;\n      log.events && (Object.keys(events).length > 0) && console.log('[%s] addHostListeners:', this.localName, events);\n      // NOTE: host events look like bindings but really are not;\n      // (1) we don't want the attribute to be set and (2) we want to support\n      // multiple event listeners ('host' and 'instance') and Node.bind\n      // by default supports 1 thing being bound.\n      // We do, however, leverage the event hookup code in PolymerExpressions\n      // so that we have a common code path for handling declarative events.\n      var self = this, bindable, eventName;\n      for (var n in events) {\n        eventName = EVENT_PREFIX + n;\n        bindable = PolymerExpressions.prepareEventBinding(\n          Path.get(events[n]),\n          eventName, \n          {\n            resolveEventHandler: function(model, path, node) {\n              var fn = path.getValueFrom(self);\n              if (fn) {\n                return fn.bind(self);\n              }\n            }\n          }\n        );\n        bindable(this, this, false);\n      }\n    },\n    // call 'method' or function method on 'obj' with 'args', if the method exists\n    dispatchMethod: function(obj, method, args) {\n      if (obj) {\n        log.events && console.group('[%s] dispatch [%s]', obj.localName, method);\n        var fn = typeof method === 'function' ? method : obj[method];\n        if (fn) {\n          fn[args ? 'apply' : 'call'](obj, args);\n        }\n        log.events && console.groupEnd();\n        Platform.flush();\n      }\n    }\n  };\n\n  // exports\n\n  scope.api.instance.events = events;\n\n})(Polymer);\n","/*\r\n * Copyright 2013 The Polymer Authors. All rights reserved.\r\n * Use of this source code is governed by a BSD-style\r\n * license that can be found in the LICENSE file.\r\n */\r\n(function(scope) {\r\n\r\n  // instance api for attributes\r\n\r\n  var attributes = {\r\n    copyInstanceAttributes: function () {\r\n      var a$ = this._instanceAttributes;\r\n      for (var k in a$) {\r\n        if (!this.hasAttribute(k)) {\r\n          this.setAttribute(k, a$[k]);\r\n        }\r\n      }\r\n    },\r\n    // for each attribute on this, deserialize value to property as needed\r\n    takeAttributes: function() {\r\n      // if we have no publish lookup table, we have no attributes to take\r\n      // TODO(sjmiles): ad hoc\r\n      if (this._publishLC) {\r\n        for (var i=0, a$=this.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\r\n          this.attributeToProperty(a.name, a.value);\r\n        }\r\n      }\r\n    },\r\n    // if attribute 'name' is mapped to a property, deserialize\r\n    // 'value' into that property\r\n    attributeToProperty: function(name, value) {\r\n      // try to match this attribute to a property (attributes are\r\n      // all lower-case, so this is case-insensitive search)\r\n      var name = this.propertyForAttribute(name);\r\n      if (name) {\r\n        // filter out 'mustached' values, these are to be\r\n        // replaced with bound-data and are not yet values\r\n        // themselves\r\n        if (value && value.search(scope.bindPattern) >= 0) {\r\n          return;\r\n        }\r\n        // get original value\r\n        var currentValue = this[name];\r\n        // deserialize Boolean or Number values from attribute\r\n        var value = this.deserializeValue(value, currentValue);\r\n        // only act if the value has changed\r\n        if (value !== currentValue) {\r\n          // install new value (has side-effects)\r\n          this[name] = value;\r\n        }\r\n      }\r\n    },\r\n    // return the published property matching name, or undefined\r\n    propertyForAttribute: function(name) {\r\n      var match = this._publishLC && this._publishLC[name];\r\n      //console.log('propertyForAttribute:', name, 'matches', match);\r\n      return match;\r\n    },\r\n    // convert representation of 'stringValue' based on type of 'currentValue'\r\n    deserializeValue: function(stringValue, currentValue) {\r\n      return scope.deserializeValue(stringValue, currentValue);\r\n    },\r\n    serializeValue: function(value, inferredType) {\r\n      if (inferredType === 'boolean') {\r\n        return value ? '' : undefined;\r\n      } else if (inferredType !== 'object' && inferredType !== 'function'\r\n          && value !== undefined) {\r\n        return value;\r\n      }\r\n    },\r\n    reflectPropertyToAttribute: function(name) {\r\n      var inferredType = typeof this[name];\r\n      // try to intelligently serialize property value\r\n      var serializedValue = this.serializeValue(this[name], inferredType);\r\n      // boolean properties must reflect as boolean attributes\r\n      if (serializedValue !== undefined) {\r\n        this.setAttribute(name, serializedValue);\r\n        // TODO(sorvell): we should remove attr for all properties\r\n        // that have undefined serialization; however, we will need to\r\n        // refine the attr reflection system to achieve this; pica, for example,\r\n        // relies on having inferredType object properties not removed as\r\n        // attrs.\r\n      } else if (inferredType === 'boolean') {\r\n        this.removeAttribute(name);\r\n      }\r\n    }\r\n  };\r\n\r\n  // exports\r\n\r\n  scope.api.instance.attributes = attributes;\r\n\r\n})(Polymer);\r\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var log = window.logFlags || {};\n\n  // magic words\n\n  var OBSERVE_SUFFIX = 'Changed';\n\n  // element api\n\n  var empty = [];\n\n  var properties = {\n    observeProperties: function() {\n      var n$ = this._observeNames, pn$ = this._publishNames;\n      if ((n$ && n$.length) || (pn$ && pn$.length)) {\n        var self = this;\n        var o = this._propertyObserver = new CompoundObserver();\n        for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n          o.addPath(this, n);\n          // observer array properties\n          var pd = Object.getOwnPropertyDescriptor(this.__proto__, n);\n          if (pd && pd.value) {\n            this.observeArrayValue(n, pd.value, null);\n          }\n        }\n        for (var i=0, l=pn$.length, n; (i<l) && (n=pn$[i]); i++) {\n          if (!this.observe || (this.observe[n] === undefined)) {\n            o.addPath(this, n);\n          }\n        }\n        o.open(this.notifyPropertyChanges, this);\n      }\n    },\n    notifyPropertyChanges: function(newValues, oldValues, paths) {\n      var name, method, called = {};\n      for (var i in oldValues) {\n        // note: paths is of form [object, path, object, path]\n        name = paths[2 * i + 1];\n        if (this.publish[name] !== undefined) {\n          this.reflectPropertyToAttribute(name);\n        }\n        method = this.observe[name];\n        if (method) {\n          this.observeArrayValue(name, newValues[i], oldValues[i]);\n          if (!called[method]) {\n            called[method] = true;\n            // observes the value if it is an array\n            this.invokeMethod(method, [oldValues[i], newValues[i], arguments]);\n          }\n        }\n      }\n    },\n    observeArrayValue: function(name, value, old) {\n      // we only care if there are registered side-effects\n      var callbackName = this.observe[name];\n      if (callbackName) {\n        // if we are observing the previous value, stop\n        if (Array.isArray(old)) {\n          log.observe && console.log('[%s] observeArrayValue: unregister observer [%s]', this.localName, name);\n          this.unregisterObserver(name + '__array');\n        }\n        // if the new value is an array, being observing it\n        if (Array.isArray(value)) {\n          log.observe && console.log('[%s] observeArrayValue: register observer [%s]', this.localName, name, value);\n          var observer = new ArrayObserver(value);\n          observer.open(function(value, old) {\n            this.invokeMethod(callbackName, [old]);\n          }, this);\n          this.registerObserver(name + '__array', observer);\n        }\n      }\n    },\n    bindProperty: function(property, observable) {\n      // apply Polymer two-way reference binding\n      return bindProperties(this, property, observable);\n    },\n    unbindAllProperties: function() {\n      if (this._propertyObserver) {\n        this._propertyObserver.close();\n      }\n      this.unregisterObservers();\n    },\n    unbindProperty: function(name) {\n      return this.unregisterObserver(name);\n    },\n    invokeMethod: function(method, args) {\n      var fn = this[method] || method;\n      if (typeof fn === 'function') {\n        fn.apply(this, args);\n      }\n    },\n    // bookkeeping observers for memory management\n    registerObserver: function(name, observer) {\n      var o$ = this._observers || (this._observers = {});\n      o$[name] = observer;\n    },\n    unregisterObserver: function(name) {\n      var o$ = this._observers;\n      if (o$ && o$[name]) {\n        o$[name].close();\n        o$[name] = null;\n        return true;\n      }\n    },\n    unregisterObservers: function() {\n      if (this._observers) {\n        var keys=Object.keys(this._observers);\n        for (var i=0, l=keys.length, k, o; (i < l) && (k=keys[i]); i++) {\n          o = this._observers[k];\n          o.close();\n        }\n        this._observers = {};\n      }\n    }\n  };\n\n  // property binding\n  // bind a property in A to a path in B by converting A[property] to a\n  // getter/setter pair that accesses B[...path...]\n  function bindProperties(inA, inProperty, observable) {\n    log.bind && console.log(LOG_BIND_PROPS, inB.localName || 'object', inPath, inA.localName, inProperty);\n    // capture A's value if B's value is null or undefined,\n    // otherwise use B's value\n    // TODO(sorvell): need to review, can do with ObserverTransform\n    var v = observable.discardChanges();\n    if (v === null || v === undefined) {\n      observable.setValue(inA[inProperty]);\n    }\n    return Observer.defineComputedProperty(inA, inProperty, observable);\n  }\n\n  // logging\n  var LOG_OBSERVE = '[%s] watching [%s]';\n  var LOG_OBSERVED = '[%s#%s] watch: [%s] now [%s] was [%s]';\n  var LOG_CHANGED = '[%s#%s] propertyChanged: [%s] now [%s] was [%s]';\n  var LOG_BIND_PROPS = \"[%s]: bindProperties: [%s] to [%s].[%s]\";\n\n  // exports\n\n  scope.api.instance.properties = properties;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var log = window.logFlags || 0;\n  var events = scope.api.instance.events;\n\n  var syntax = new PolymerExpressions();\n  syntax.resolveEventHandler = function(model, path, node) {\n    var ctlr = findEventController(node);\n    if (ctlr) {\n      var fn = path.getValueFrom(ctlr);\n      if (fn) {\n        return fn.bind(ctlr);\n      }\n    }\n  }\n\n  // An event controller is the host element for the shadowRoot in which \n  // the node exists, or the first ancestor with a 'lightDomController'\n  // property.\n  function findEventController(node) {\n    while (node.parentNode) {\n      if (node.lightDomController) {\n        return node;\n      }\n      node = node.parentNode;\n    }\n    return node.host;\n  };\n\n  // element api supporting mdv\n\n  var mdv = {\n    syntax: syntax,\n    instanceTemplate: function(template) {\n      return template.createInstance(this, this.syntax);\n    },\n    bind: function(name, observable, oneTime) {\n      // note: binding is a prepare signal. This allows us to be sure that any\n      // property changes that occur as a result of binding will be observed.\n      if (!this._elementPrepared) {\n        this.prepareElement();\n      }\n      var property = this.propertyForAttribute(name);\n      if (!property) {\n        // TODO(sjmiles): this mixin method must use the special form\n        // of `super` installed by `mixinMethod` in declaration/prototype.js\n        return this.mixinSuper(arguments);\n      } else {\n        // clean out the closets\n        this.unbind(name);\n        // use n-way Polymer binding\n        var observer = this.bindProperty(property, observable);\n        // stick path on observer so it's available via this.bindings\n        observer.path = observable.path_;\n        // reflect bound property to attribute when binding\n        // to ensure binding is not left on attribute if property\n        // does not update due to not changing.\n        this.reflectPropertyToAttribute(property);\n        return this.bindings[name] = observer;\n      }\n    },\n    asyncUnbindAll: function() {\n      if (!this._unbound) {\n        log.unbind && console.log('[%s] asyncUnbindAll', this.localName);\n        this._unbindAllJob = this.job(this._unbindAllJob, this.unbindAll, 0);\n      }\n    },\n    unbindAll: function() {\n      if (!this._unbound) {\n        this.unbindAllProperties();\n        this.super();\n        // unbind shadowRoot\n        var root = this.shadowRoot;\n        while (root) {\n          unbindNodeTree(root);\n          root = root.olderShadowRoot;\n        }\n        this._unbound = true;\n      }\n    },\n    cancelUnbindAll: function(preventCascade) {\n      if (this._unbound) {\n        log.unbind && console.warn('[%s] already unbound, cannot cancel unbindAll', this.localName);\n        return;\n      }\n      log.unbind && console.log('[%s] cancelUnbindAll', this.localName);\n      if (this._unbindAllJob) {\n        this._unbindAllJob = this._unbindAllJob.stop();\n      }\n      // cancel unbinding our shadow tree iff we're not in the process of\n      // cascading our tree (as we do, for example, when the element is inserted).\n      if (!preventCascade) {\n        forNodeTree(this.shadowRoot, function(n) {\n          if (n.cancelUnbindAll) {\n            n.cancelUnbindAll();\n          }\n        });\n      }\n    }\n  };\n\n  function unbindNodeTree(node) {\n    forNodeTree(node, _nodeUnbindAll);\n  }\n\n  function _nodeUnbindAll(node) {\n    node.unbindAll();\n  }\n\n  function forNodeTree(node, callback) {\n    if (node) {\n      callback(node);\n      for (var child = node.firstChild; child; child = child.nextSibling) {\n        forNodeTree(child, callback);\n      }\n    }\n  }\n\n  var mustachePattern = /\\{\\{([^{}]*)}}/;\n\n  // exports\n\n  scope.bindPattern = mustachePattern;\n  scope.api.instance.mdv = mdv;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n  var preparingElements = 0;\n\n  var base = {\n    PolymerBase: true,\n    job: Polymer.job,\n    super: Polymer.super,\n    // user entry point for element has had its createdCallback called\n    created: function() {\n    },\n    // user entry point for element has shadowRoot and is ready for\n    // api interaction\n    ready: function() {\n    },\n    createdCallback: function() {\n      this.created();\n      if (this.ownerDocument.defaultView || this.alwaysPrepare ||\n          preparingElements > 0) {\n        this.prepareElement();\n      }\n    },\n    // system entry point, do not override\n    prepareElement: function() {\n      this._elementPrepared = true;\n      // install shadowRoots storage\n      this.shadowRoots = {};\n      // install property observers\n      this.observeProperties();\n      // install boilerplate attributes\n      this.copyInstanceAttributes();\n      // process input attributes\n      this.takeAttributes();\n      // add event listeners\n      this.addHostListeners();\n      // guarantees that while preparing, any\n      // sub-elements are also prepared\n      preparingElements++;\n      // process declarative resources\n      this.parseDeclarations(this.__proto__);\n      // decrement semaphore\n      preparingElements--;\n      // TODO(sorvell): CE polyfill uses unresolved attribute to simulate\n      // :unresolved; remove this attribute to be compatible with native\n      // CE.\n      this.removeAttribute('unresolved');\n      // user entry point\n      this.ready();\n    },\n    attachedCallback: function() {\n      if (!this._elementPrepared) {\n        this.prepareElement();\n      }\n      this.cancelUnbindAll(true);\n      // invoke user action\n      if (this.attached) {\n        this.attached();\n      }\n      // TODO(sorvell): bc\n      if (this.enteredView) {\n        this.enteredView();\n      }\n      // NOTE: domReady can be used to access elements in dom (descendants, \n      // ancestors, siblings) such that the developer is enured to upgrade\n      // ordering. If the element definitions have loaded, domReady\n      // can be used to access upgraded elements.\n      if (!this.hasBeenAttached) {\n        this.hasBeenAttached = true;\n        if (this.domReady) {\n          this.async('domReady');\n        }\n      }\n    },\n    detachedCallback: function() {\n      if (!this.preventDispose) {\n        this.asyncUnbindAll();\n      }\n      // invoke user action\n      if (this.detached) {\n        this.detached();\n      }\n      // TODO(sorvell): bc\n      if (this.leftView) {\n        this.leftView();\n      }\n    },\n    // TODO(sorvell): bc\n    enteredViewCallback: function() {\n      this.attachedCallback();\n    },\n    // TODO(sorvell): bc\n    leftViewCallback: function() {\n      this.detachedCallback();\n    },\n    // TODO(sorvell): bc\n    enteredDocumentCallback: function() {\n      this.attachedCallback();\n    },\n    // TODO(sorvell): bc\n    leftDocumentCallback: function() {\n      this.detachedCallback();\n    },\n    // recursive ancestral <element> initialization, oldest first\n    parseDeclarations: function(p) {\n      if (p && p.element) {\n        this.parseDeclarations(p.__proto__);\n        p.parseDeclaration.call(this, p.element);\n      }\n    },\n    // parse input <element> as needed, override for custom behavior\n    parseDeclaration: function(elementElement) {\n      var template = this.fetchTemplate(elementElement);\n      if (template) {\n        var root = this.shadowFromTemplate(template);\n        this.shadowRoots[elementElement.name] = root;        \n      }\n    },\n    // return a shadow-root template (if desired), override for custom behavior\n    fetchTemplate: function(elementElement) {\n      return elementElement.querySelector('template');\n    },\n    // utility function that creates a shadow root from a <template>\n    shadowFromTemplate: function(template) {\n      if (template) {\n        // make a shadow root\n        var root = this.createShadowRoot();\n        // migrate flag(s)\n        root.resetStyleInheritance = this.resetStyleInheritance;\n        // stamp template\n        // which includes parsing and applying MDV bindings before being \n        // inserted (to avoid {{}} in attribute values)\n        // e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n        var dom = this.instanceTemplate(template);\n        // append to shadow dom\n        root.appendChild(dom);\n        // perform post-construction initialization tasks on shadow root\n        this.shadowRootReady(root, template);\n        // return the created shadow root\n        return root;\n      }\n    },\n    // utility function that stamps a <template> into light-dom\n    lightFromTemplate: function(template) {\n      if (template) {\n        // TODO(sorvell): mark this element as a lightDOMController so that\n        // event listeners on bound nodes inside it will be called on it.\n        // Note, the expectation here is that events on all descendants \n        // should be handled by this element.\n        this.lightDomController = true;\n        // stamp template\n        // which includes parsing and applying MDV bindings before being \n        // inserted (to avoid {{}} in attribute values)\n        // e.g. to prevent <img src=\"images/{{icon}}\"> from generating a 404.\n        var dom = this.instanceTemplate(template);\n        // append to shadow dom\n        this.appendChild(dom);\n        // perform post-construction initialization tasks on ahem, light root\n        this.shadowRootReady(this, template);\n        // return the created shadow root\n        return dom;\n      }\n    },\n    shadowRootReady: function(root, template) {\n      // locate nodes with id and store references to them in this.$ hash\n      this.marshalNodeReferences(root);\n      // set up pointer gestures\n      PointerGestures.register(root);\n    },\n    // locate nodes with id and store references to them in this.$ hash\n    marshalNodeReferences: function(root) {\n      // establish $ instance variable\n      var $ = this.$ = this.$ || {};\n      // populate $ from nodes with ID from the LOCAL tree\n      if (root) {\n        var n$ = root.querySelectorAll(\"[id]\");\n        for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) {\n          $[n.id] = n;\n        };\n      }\n    },\n    attributeChangedCallback: function(name, oldValue) {\n      // TODO(sjmiles): adhoc filter\n      if (name !== 'class' && name !== 'style') {\n        this.attributeToProperty(name, this.getAttribute(name));\n      }\n      if (this.attributeChanged) {\n        this.attributeChanged.apply(this, arguments);\n      }\n    },\n    onMutation: function(node, listener) {\n      var observer = new MutationObserver(function(mutations) {\n        listener.call(this, observer, mutations);\n        observer.disconnect();\n      }.bind(this));\n      observer.observe(node, {childList: true, subtree: true});\n    }\n  };\n\n  // true if object has own PolymerBase api\n  function isBase(object) {\n    return object.hasOwnProperty('PolymerBase') \n  }\n\n  // name a base constructor for dev tools\n\n  function PolymerBase() {};\n  PolymerBase.prototype = base;\n  base.constructor = PolymerBase;\n  \n  // exports\n\n  scope.Base = PolymerBase;\n  scope.isBase = isBase;\n  scope.api.instance.base = base;\n  \n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var log = window.logFlags || {};\n  \n  // magic words\n  \n  var STYLE_SCOPE_ATTRIBUTE = 'element';\n  var STYLE_CONTROLLER_SCOPE = 'controller';\n  \n  var styles = {\n    STYLE_SCOPE_ATTRIBUTE: STYLE_SCOPE_ATTRIBUTE,\n    /**\n     * Installs external stylesheets and <style> elements with the attribute \n     * polymer-scope='controller' into the scope of element. This is intended\n     * to be a called during custom element construction.\n    */\n    installControllerStyles: function() {\n      // apply controller styles, but only if they are not yet applied\n      var scope = this.findStyleScope();\n      if (scope && !this.scopeHasNamedStyle(scope, this.localName)) {\n        // allow inherited controller styles\n        var proto = getPrototypeOf(this), cssText = '';\n        while (proto && proto.element) {\n          cssText += proto.element.cssTextForScope(STYLE_CONTROLLER_SCOPE);\n          proto = getPrototypeOf(proto);\n        }\n        if (cssText) {\n          this.installScopeCssText(cssText, scope);\n        }\n      }\n    },\n    installScopeStyle: function(style, name) {\n      var scope = this.findStyleScope(), name = name || '';\n      if (scope && !this.scopeHasNamedStyle(scope, this.localName + name)) {\n        var cssText = '';\n        if (style instanceof Array) {\n          for (var i=0, l=style.length, s; (i<l) && (s=style[i]); i++) {\n            cssText += s.textContent + '\\n\\n';\n          }\n        } else {\n          cssText = style.textContent;\n        }\n        this.installScopeCssText(cssText, scope, name);\n      }\n    },\n    installScopeCssText: function(cssText, scope, name) {\n      scope = scope || this.findStyleScope();\n      name = name || '';\n      if (!scope) {\n        return;\n      }\n      if (window.ShadowDOMPolyfill) {\n        cssText = shimCssText(cssText, scope.host);\n      }\n      var style = this.element.cssTextToScopeStyle(cssText,\n          STYLE_CONTROLLER_SCOPE);\n      Polymer.applyStyleToScope(style, scope);\n      // cache that this style has been applied\n      scope._scopeStyles[this.localName + name] = true;\n    },\n    findStyleScope: function() {\n      // find the shadow root that contains this element\n      var n = this;\n      while (n.parentNode) {\n        n = n.parentNode;\n      }\n      return n;\n    },\n    scopeHasNamedStyle: function(scope, name) {\n      scope._scopeStyles = scope._scopeStyles || {};\n      return scope._scopeStyles[name];\n    }\n  };\n  \n  // NOTE: use raw prototype traversal so that we ensure correct traversal\n  // on platforms where the protoype chain is simulated via __proto__ (IE10)\n  function getPrototypeOf(prototype) {\n    return prototype.__proto__;\n  }\n\n  function shimCssText(cssText, host) {\n    var name = '', is = false;\n    if (host) {\n      name = host.localName;\n      is = host.hasAttribute('is');\n    }\n    var selector = Platform.ShadowCSS.makeScopeSelector(name, is);\n    return Platform.ShadowCSS.shimCssText(cssText, selector);\n  }\n\n  // exports\n\n  scope.api.instance.styles = styles;\n  \n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var extend = scope.extend;\n  var api = scope.api;\n\n  // imperative implementation: Polymer()\n\n  // specify an 'own' prototype for tag `name`\n  function element(name, prototype) {\n    if (getRegisteredPrototype[name]) {\n      throw 'Already registered (Polymer) prototype for element ' + name;\n    }\n    // cache the prototype\n    registerPrototype(name, prototype);\n    // notify the registrar waiting for 'name', if any\n    notifyPrototype(name);\n  }\n\n  // async prototype source\n\n  function waitingForPrototype(name, client) {\n    waitPrototype[name] = client;\n  }\n\n  var waitPrototype = {};\n\n  function notifyPrototype(name) {\n    if (waitPrototype[name]) {\n      waitPrototype[name].registerWhenReady();\n      delete waitPrototype[name];\n    }\n  }\n\n  // utility and bookkeeping\n\n  // maps tag names to prototypes, as registered with\n  // Polymer. Prototypes associated with a tag name\n  // using document.registerElement are available from\n  // HTMLElement.getPrototypeForTag().\n  // If an element was fully registered by Polymer, then\n  // Polymer.getRegisteredPrototype(name) === \n  //   HTMLElement.getPrototypeForTag(name)\n\n  var prototypesByName = {};\n\n  function registerPrototype(name, prototype) {\n    return prototypesByName[name] = prototype || {};\n  }\n\n  function getRegisteredPrototype(name) {\n    return prototypesByName[name];\n  }\n\n  // exports\n\n  scope.getRegisteredPrototype = getRegisteredPrototype;\n  scope.waitingForPrototype = waitingForPrototype;\n\n  // namespace shenanigans so we can expose our scope on the registration \n  // function\n\n  // make window.Polymer reference `element()`\n\n  window.Polymer = element;\n\n  // TODO(sjmiles): find a way to do this that is less terrible\n  // copy window.Polymer properties onto `element()`\n\n  extend(Polymer, scope);\n\n  // Under the HTMLImports polyfill, scripts in the main document\n  // do not block on imports; we want to allow calls to Polymer in the main\n  // document. Platform collects those calls until we can process them, which\n  // we do here.\n\n  var declarations = Platform.deliverDeclarations();\n  if (declarations) {\n    for (var i=0, l=declarations.length, d; (i<l) && (d=declarations[i]); i++) {\n      element.apply(null, d);\n    }\n  }\n\n})(Polymer);\n","/* \n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\nvar path = {\n  resolveElementPaths: function(node) {\n    Platform.urlResolver.resolveDom(node);\n  },\n  addResolvePathApi: function() {\n    // let assetpath attribute modify the resolve path\n    var assetPath = this.getAttribute('assetpath') || '';\n    var root = new URL(assetPath, this.ownerDocument.baseURI);\n    this.prototype.resolvePath = function(urlPath, base) {\n      var u = new URL(urlPath, base || root);\n      return u.href;\n    };\n  }\n};\n\n// exports\nscope.api.declaration.path = path;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var log = window.logFlags || {};\n  var api = scope.api.instance.styles;\n  var STYLE_SCOPE_ATTRIBUTE = api.STYLE_SCOPE_ATTRIBUTE;\n\n  // magic words\n\n  var STYLE_SELECTOR = 'style';\n  var STYLE_LOADABLE_MATCH = '@import';\n  var SHEET_SELECTOR = 'link[rel=stylesheet]';\n  var STYLE_GLOBAL_SCOPE = 'global';\n  var SCOPE_ATTR = 'polymer-scope';\n\n  var styles = {\n    // returns true if resources are loading\n    loadStyles: function(callback) {\n      var content = this.templateContent();\n      if (content) {\n        this.convertSheetsToStyles(content);\n      }\n      var styles = this.findLoadableStyles(content);\n      if (styles.length) {\n        Platform.styleResolver.loadStyles(styles, callback);\n      } else if (callback) {\n        callback();\n      }\n    },\n    convertSheetsToStyles: function(root) {\n      var s$ = root.querySelectorAll(SHEET_SELECTOR);\n      for (var i=0, l=s$.length, s, c; (i<l) && (s=s$[i]); i++) {\n        c = createStyleElement(importRuleForSheet(s, this.ownerDocument.baseURI),\n            this.ownerDocument);\n        this.copySheetAttributes(c, s);\n        s.parentNode.replaceChild(c, s);\n      }\n    },\n    copySheetAttributes: function(style, link) {\n      for (var i=0, a$=link.attributes, l=a$.length, a; (a=a$[i]) && i<l; i++) {\n        if (a.name !== 'rel' && a.name !== 'href') {\n          style.setAttribute(a.name, a.value);\n        }\n      }\n    },\n    findLoadableStyles: function(root) {\n      var loadables = [];\n      if (root) {\n        var s$ = root.querySelectorAll(STYLE_SELECTOR);\n        for (var i=0, l=s$.length, s; (i<l) && (s=s$[i]); i++) {\n          if (s.textContent.match(STYLE_LOADABLE_MATCH)) {\n            loadables.push(s);\n          }\n        }\n      }\n      return loadables;\n    },\n    /**\n     * Install external stylesheets loaded in <polymer-element> elements into the \n     * element's template.\n     * @param elementElement The <element> element to style.\n     */\n    installSheets: function() {\n      this.cacheSheets();\n      this.cacheStyles();\n      this.installLocalSheets();\n      this.installGlobalStyles();\n    },\n    /**\n     * Remove all sheets from element and store for later use.\n     */\n    cacheSheets: function() {\n      this.sheets = this.findNodes(SHEET_SELECTOR);\n      this.sheets.forEach(function(s) {\n        if (s.parentNode) {\n          s.parentNode.removeChild(s);\n        }\n      });\n    },\n    cacheStyles: function() {\n      this.styles = this.findNodes(STYLE_SELECTOR + '[' + SCOPE_ATTR + ']');\n      this.styles.forEach(function(s) {\n        if (s.parentNode) {\n          s.parentNode.removeChild(s);\n        }\n      });\n    },\n    /**\n     * Takes external stylesheets loaded in an <element> element and moves\n     * their content into a <style> element inside the <element>'s template.\n     * The sheet is then removed from the <element>. This is done only so \n     * that if the element is loaded in the main document, the sheet does\n     * not become active.\n     * Note, ignores sheets with the attribute 'polymer-scope'.\n     * @param elementElement The <element> element to style.\n     */\n    installLocalSheets: function () {\n      var sheets = this.sheets.filter(function(s) {\n        return !s.hasAttribute(SCOPE_ATTR);\n      });\n      var content = this.templateContent();\n      if (content) {\n        var cssText = '';\n        sheets.forEach(function(sheet) {\n          cssText += cssTextFromSheet(sheet) + '\\n';\n        });\n        if (cssText) {\n          var style = createStyleElement(cssText, this.ownerDocument);\n          content.insertBefore(style, content.firstChild);\n        }\n      }\n    },\n    findNodes: function(selector, matcher) {\n      var nodes = this.querySelectorAll(selector).array();\n      var content = this.templateContent();\n      if (content) {\n        var templateNodes = content.querySelectorAll(selector).array();\n        nodes = nodes.concat(templateNodes);\n      }\n      return matcher ? nodes.filter(matcher) : nodes;\n    },\n    templateContent: function() {\n      var template = this.querySelector('template');\n      return template && templateContent(template);\n    },\n    /**\n     * Promotes external stylesheets and <style> elements with the attribute \n     * polymer-scope='global' into global scope.\n     * This is particularly useful for defining @keyframe rules which \n     * currently do not function in scoped or shadow style elements.\n     * (See wkb.ug/72462)\n     * @param elementElement The <element> element to style.\n    */\n    // TODO(sorvell): remove when wkb.ug/72462 is addressed.\n    installGlobalStyles: function() {\n      var style = this.styleForScope(STYLE_GLOBAL_SCOPE);\n      applyStyleToScope(style, document.head);\n    },\n    cssTextForScope: function(scopeDescriptor) {\n      var cssText = '';\n      // handle stylesheets\n      var selector = '[' + SCOPE_ATTR + '=' + scopeDescriptor + ']';\n      var matcher = function(s) {\n        return matchesSelector(s, selector);\n      };\n      var sheets = this.sheets.filter(matcher);\n      sheets.forEach(function(sheet) {\n        cssText += cssTextFromSheet(sheet) + '\\n\\n';\n      });\n      // handle cached style elements\n      var styles = this.styles.filter(matcher);\n      styles.forEach(function(style) {\n        cssText += style.textContent + '\\n\\n';\n      });\n      return cssText;\n    },\n    styleForScope: function(scopeDescriptor) {\n      var cssText = this.cssTextForScope(scopeDescriptor);\n      return this.cssTextToScopeStyle(cssText, scopeDescriptor);\n    },\n    cssTextToScopeStyle: function(cssText, scopeDescriptor) {\n      if (cssText) {\n        var style = createStyleElement(cssText);\n        style.setAttribute(STYLE_SCOPE_ATTRIBUTE, this.getAttribute('name') +\n            '-' + scopeDescriptor);\n        return style;\n      }\n    }\n  };\n\n  function importRuleForSheet(sheet, baseUrl) {\n    var href = new URL(sheet.getAttribute('href'), baseUrl).href;\n    return '@import \\'' + href + '\\';';\n  }\n\n  function applyStyleToScope(style, scope) {\n    if (style) {\n      if (scope === document) {\n        scope = document.head;\n      }\n      if (window.ShadowDOMPolyfill) {\n        scope = document.head;\n      }\n      // TODO(sorvell): necessary for IE\n      // see https://connect.microsoft.com/IE/feedback/details/790212/\n      // cloning-a-style-element-and-adding-to-document-produces\n      // -unexpected-result#details\n      // var clone = style.cloneNode(true);\n      var clone = createStyleElement(style.textContent);\n      var attr = style.getAttribute(STYLE_SCOPE_ATTRIBUTE);\n      if (attr) {\n        clone.setAttribute(STYLE_SCOPE_ATTRIBUTE, attr);\n      }\n      scope.appendChild(clone);\n    }\n  }\n\n  function createStyleElement(cssText, scope) {\n    scope = scope || document;\n    scope = scope.createElement ? scope : scope.ownerDocument;\n    var style = scope.createElement('style');\n    style.textContent = cssText;\n    return style;\n  }\n\n  function cssTextFromSheet(sheet) {\n    return (sheet && sheet.__resource) || '';\n  }\n\n  function matchesSelector(node, inSelector) {\n    if (matches) {\n      return matches.call(node, inSelector);\n    }\n  }\n  var p = HTMLElement.prototype;\n  var matches = p.matches || p.matchesSelector || p.webkitMatchesSelector \n      || p.mozMatchesSelector;\n  \n  // exports\n\n  scope.api.declaration.styles = styles;\n  scope.applyStyleToScope = applyStyleToScope;\n  \n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\n(function(scope) {\n\n  // imports\n\n  var log = window.logFlags || {};\n  var api = scope.api.instance.events;\n  var EVENT_PREFIX = api.EVENT_PREFIX;\n  // polymer-element declarative api: events feature\n\n  var events = { \n    parseHostEvents: function() {\n      // our delegates map\n      var delegates = this.prototype.eventDelegates;\n      // extract data from attributes into delegates\n      this.addAttributeDelegates(delegates);\n    },\n    addAttributeDelegates: function(delegates) {\n      // for each attribute\n      for (var i=0, a; a=this.attributes[i]; i++) {\n        // does it have magic marker identifying it as an event delegate?\n        if (this.hasEventPrefix(a.name)) {\n          // if so, add the info to delegates\n          delegates[this.removeEventPrefix(a.name)] = a.value.replace('{{', '')\n              .replace('}}', '').trim();\n        }\n      }\n    },\n    // starts with 'on-'\n    hasEventPrefix: function (n) {\n      return n && (n[0] === 'o') && (n[1] === 'n') && (n[2] === '-');\n    },\n    removeEventPrefix: function(n) {\n      return n.slice(prefixLength);\n    }\n  };\n\n  var prefixLength = EVENT_PREFIX.length;\n\n  // exports\n  scope.api.declaration.events = events;\n\n})(Polymer);","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // element api\n\n  var properties = {\n    inferObservers: function(prototype) {\n      // called before prototype.observe is chained to inherited object\n      var observe = prototype.observe, property;\n      for (var n in prototype) {\n        if (n.slice(-7) === 'Changed') {\n          if (!observe) {\n            observe  = (prototype.observe = {});\n          }\n          property = n.slice(0, -7)\n          observe[property] = observe[property] || n;\n        }\n      }\n    },\n    explodeObservers: function(prototype) {\n      // called before prototype.observe is chained to inherited object\n      var o = prototype.observe;\n      if (o) {\n        var exploded = {};\n        for (var n in o) {\n          var names = n.split(' ');\n          for (var i=0, ni; ni=names[i]; i++) {\n            exploded[ni] = o[n];\n          }\n        }\n        prototype.observe = exploded;\n      }\n    },\n    optimizePropertyMaps: function(prototype) {\n      if (prototype.observe) {\n        // construct name list\n        var a = prototype._observeNames = [];\n        for (var n in prototype.observe) {\n          var names = n.split(' ');\n          for (var i=0, ni; ni=names[i]; i++) {\n            a.push(ni);\n          }\n          //a.push(n);\n        }\n      }\n      if (prototype.publish) {\n        // construct name list\n        var a = prototype._publishNames = [];\n        for (var n in prototype.publish) {\n          a.push(n);\n        }\n      }\n    },\n    publishProperties: function(prototype, base) {\n      // if we have any properties to publish\n      var publish = prototype.publish;\n      if (publish) {\n        // transcribe `publish` entries onto own prototype\n        this.requireProperties(publish, prototype, base);\n        // construct map of lower-cased property names\n        prototype._publishLC = this.lowerCaseMap(publish);\n      }\n    },\n    requireProperties: function(properties, prototype, base) {\n      // ensure a prototype value for each property\n      for (var n in properties) {\n        if (prototype[n] === undefined && base[n] === undefined) {\n          prototype[n] = properties[n];\n        }\n      }\n    },\n    lowerCaseMap: function(properties) {\n      var map = {};\n      for (var n in properties) {\n        map[n.toLowerCase()] = n;\n      }\n      return map;\n    }\n  };\n\n  // exports\n\n  scope.api.declaration.properties = properties;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // magic words\n\n  var ATTRIBUTES_ATTRIBUTE = 'attributes';\n  var ATTRIBUTES_REGEX = /\\s|,/;\n\n  // attributes api\n\n  var attributes = {\n    inheritAttributesObjects: function(prototype) {\n      // chain our lower-cased publish map to the inherited version\n      this.inheritObject(prototype, 'publishLC');\n      // chain our instance attributes map to the inherited version\n      this.inheritObject(prototype, '_instanceAttributes');\n    },\n    publishAttributes: function(prototype, base) {\n      // merge names from 'attributes' attribute\n      var attributes = this.getAttribute(ATTRIBUTES_ATTRIBUTE);\n      if (attributes) {\n        // get properties to publish\n        var publish = prototype.publish || (prototype.publish = {});\n        // names='a b c' or names='a,b,c'\n        var names = attributes.split(ATTRIBUTES_REGEX);\n        // record each name for publishing\n        for (var i=0, l=names.length, n; i<l; i++) {\n          // remove excess ws\n          n = names[i].trim();\n          // do not override explicit entries\n          if (n && publish[n] === undefined && base[n] === undefined) {\n            publish[n] = null;\n          }\n        }\n      }\n    },\n    // record clonable attributes from <element>\n    accumulateInstanceAttributes: function() {\n      // inherit instance attributes\n      var clonable = this.prototype._instanceAttributes;\n      // merge attributes from element\n      var a$ = this.attributes;\n      for (var i=0, l=a$.length, a; (i<l) && (a=a$[i]); i++) {  \n        if (this.isInstanceAttribute(a.name)) {\n          clonable[a.name] = a.value;\n        }\n      }\n    },\n    isInstanceAttribute: function(name) {\n      return !this.blackList[name] && name.slice(0,3) !== 'on-';\n    },\n    // do not clone these attributes onto instances\n    blackList: {\n      name: 1,\n      'extends': 1,\n      constructor: 1,\n      noscript: 1,\n      assetpath: 1,\n      'cache-csstext': 1\n    }\n  };\n\n  // add ATTRIBUTES_ATTRIBUTE to the blacklist\n  attributes.blackList[ATTRIBUTES_ATTRIBUTE] = 1;\n\n  // exports\n\n  scope.api.declaration.attributes = attributes;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n  \n  var api = scope.api;\n  var isBase = scope.isBase;\n  var extend = scope.extend;\n\n  // prototype api\n\n  var prototype = {\n\n    register: function(name, extendeeName) {\n      // build prototype combining extendee, Polymer base, and named api\n      this.buildPrototype(name, extendeeName);\n      // register our custom element with the platform\n      this.registerPrototype(name, extendeeName);\n      // reference constructor in a global named by 'constructor' attribute\n      this.publishConstructor();\n    },\n\n    buildPrototype: function(name, extendeeName) {\n      // get our custom prototype (before chaining)\n      var extension = scope.getRegisteredPrototype(name);\n      // get basal prototype\n      var base = this.generateBasePrototype(extendeeName);\n      // implement declarative features\n      this.desugarBeforeChaining(extension, base);\n      // join prototypes\n      this.prototype = this.chainPrototypes(extension, base);\n      // more declarative features\n      this.desugarAfterChaining(name, extendeeName);\n    },\n\n    desugarBeforeChaining: function(prototype, base) {\n      // back reference declaration element\n      // TODO(sjmiles): replace `element` with `elementElement` or `declaration`\n      prototype.element = this;\n      // transcribe `attributes` declarations onto own prototype's `publish`\n      this.publishAttributes(prototype, base);\n      // `publish` properties to the prototype and to attribute watch\n      this.publishProperties(prototype, base);\n      // infer observers for `observe` list based on method names\n      this.inferObservers(prototype);\n      // desugar compound observer syntax, e.g. 'a b c' \n      this.explodeObservers(prototype);\n    },\n\n    chainPrototypes: function(prototype, base) {\n      // chain various meta-data objects to inherited versions\n      this.inheritMetaData(prototype, base);\n      // chain custom api to inherited\n      var chained = this.chainObject(prototype, base);\n      // x-platform fixup\n      ensurePrototypeTraversal(chained);\n      return chained;\n    },\n\n    inheritMetaData: function(prototype, base) {\n      // chain observe object to inherited\n      this.inheritObject('observe', prototype, base);\n      // chain publish object to inherited\n      this.inheritObject('publish', prototype, base);\n      // chain our lower-cased publish map to the inherited version\n      this.inheritObject('_publishLC', prototype, base);\n      // chain our instance attributes map to the inherited version\n      this.inheritObject('_instanceAttributes', prototype, base);\n      // chain our event delegates map to the inherited version\n      this.inheritObject('eventDelegates', prototype, base);\n    },\n\n    // implement various declarative features\n    desugarAfterChaining: function(name, extendee) {\n      // build side-chained lists to optimize iterations\n      this.optimizePropertyMaps(this.prototype);\n      // install external stylesheets as if they are inline\n      this.installSheets();\n      // adjust any paths in dom from imports\n      this.resolveElementPaths(this);\n      // compile list of attributes to copy to instances\n      this.accumulateInstanceAttributes();\n      // parse on-* delegates declared on `this` element\n      this.parseHostEvents();\n      //\n      // install a helper method this.resolvePath to aid in \n      // setting resource urls. e.g.\n      // this.$.image.src = this.resolvePath('images/foo.png')\n      this.addResolvePathApi();\n      // under ShadowDOMPolyfill, transforms to approximate missing CSS features\n      if (window.ShadowDOMPolyfill) {\n        Platform.ShadowCSS.shimStyling(this.templateContent(), name, extendee);\n      }\n      // allow custom element access to the declarative context\n      if (this.prototype.registerCallback) {\n        this.prototype.registerCallback(this);\n      }\n    },\n\n    // if a named constructor is requested in element, map a reference\n    // to the constructor to the given symbol\n    publishConstructor: function() {\n      var symbol = this.getAttribute('constructor');\n      if (symbol) {\n        window[symbol] = this.ctor;\n      }\n    },\n\n    // build prototype combining extendee, Polymer base, and named api\n    generateBasePrototype: function(extnds) {\n      var prototype = this.findBasePrototype(extnds);\n      if (!prototype) {\n        // create a prototype based on tag-name extension\n        var prototype = HTMLElement.getPrototypeForTag(extnds);\n        // insert base api in inheritance chain (if needed)\n        prototype = this.ensureBaseApi(prototype);\n        // memoize this base\n        memoizedBases[extnds] = prototype;\n      }\n      return prototype;\n    },\n\n    findBasePrototype: function(name) {\n      return memoizedBases[name];\n    },\n\n    // install Polymer instance api into prototype chain, as needed \n    ensureBaseApi: function(prototype) {\n      if (prototype.PolymerBase) {\n        return prototype;\n      }\n      var extended = Object.create(prototype);\n      // we need a unique copy of base api for each base prototype\n      // therefore we 'extend' here instead of simply chaining\n      api.publish(api.instance, extended);\n      // TODO(sjmiles): sharing methods across prototype chains is\n      // not supported by 'super' implementation which optimizes\n      // by memoizing prototype relationships.\n      // Probably we should have a version of 'extend' that is \n      // share-aware: it could study the text of each function,\n      // look for usage of 'super', and wrap those functions in\n      // closures.\n      // As of now, there is only one problematic method, so \n      // we just patch it manually.\n      // To avoid re-entrancy problems, the special super method\n      // installed is called `mixinSuper` and the mixin method\n      // must use this method instead of the default `super`.\n      this.mixinMethod(extended, prototype, api.instance.mdv, 'bind');\n      // return buffed-up prototype\n      return extended;\n    },\n\n    mixinMethod: function(extended, prototype, api, name) {\n      var $super = function(args) {\n        return prototype[name].apply(this, args);\n      };\n      extended[name] = function() {\n        this.mixinSuper = $super;\n        return api[name].apply(this, arguments);\n      }\n    },\n\n    // ensure prototype[name] inherits from a prototype.prototype[name]\n    inheritObject: function(name, prototype, base) {\n      // require an object\n      var source = prototype[name] || {};\n      // chain inherited properties onto a new object\n      prototype[name] = this.chainObject(source, base[name]);\n    },\n\n    // register 'prototype' to custom element 'name', store constructor \n    registerPrototype: function(name, extendee) { \n      var info = {\n        prototype: this.prototype\n      }\n      // native element must be specified in extends\n      var typeExtension = this.findTypeExtension(extendee);\n      if (typeExtension) {\n        info.extends = typeExtension;\n      }\n      // register the prototype with HTMLElement for name lookup\n      HTMLElement.register(name, this.prototype);\n      // register the custom type\n      this.ctor = document.registerElement(name, info);\n    },\n\n    findTypeExtension: function(name) {\n      if (name && name.indexOf('-') < 0) {\n        return name;\n      } else {\n        var p = this.findBasePrototype(name);\n        if (p.element) {\n          return this.findTypeExtension(p.element.extends);\n        }\n      }\n    }\n\n  };\n\n  // memoize base prototypes\n  var memoizedBases = {};\n\n  // implementation of 'chainObject' depends on support for __proto__\n  if (Object.__proto__) {\n    prototype.chainObject = function(object, inherited) {\n      if (object && inherited && object !== inherited) {\n        object.__proto__ = inherited;\n      }\n      return object;\n    }\n  } else {\n    prototype.chainObject = function(object, inherited) {\n      if (object && inherited && object !== inherited) {\n        var chained = Object.create(inherited);\n        object = extend(chained, object);\n      }\n      return object;\n    }\n  }\n\n  // On platforms that do not support __proto__ (versions of IE), the prototype\n  // chain of a custom element is simulated via installation of __proto__.\n  // Although custom elements manages this, we install it here so it's\n  // available during desugaring.\n  function ensurePrototypeTraversal(prototype) {\n    if (!Object.__proto__) {\n      var ancestor = Object.getPrototypeOf(prototype);\n      prototype.__proto__ = ancestor;\n      if (isBase(ancestor)) {\n        ancestor.__proto__ = Object.getPrototypeOf(ancestor);\n      }\n    }\n  }\n\n  // exports\n\n  api.declaration.prototype = prototype;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  var queue = {\n    // tell the queue to wait for an element to be ready\n    wait: function(element, check, go) {\n      if (this.indexOf(element) === -1) {\n        this.add(element);\n        element.__check = check;\n        element.__go = go;\n      }\n      return (this.indexOf(element) !== 0);\n    },\n    add: function(element) {\n      //console.log('queueing', element.name);\n      queueForElement(element).push(element);\n    },\n    indexOf: function(element) {\n      var i = queueForElement(element).indexOf(element);\n      if (i >= 0 && document.contains(element)) {\n        i += (HTMLImports.useNative || HTMLImports.ready) ? importQueue.length :\n            1e9;\n      }\n      return i;  \n    },\n    // tell the queue an element is ready to be registered\n    go: function(element) {\n      var readied = this.remove(element);\n      if (readied) {\n        readied.__go.call(readied);\n        readied.__check = readied.__go = null;\n        this.check();\n      }\n    },\n    remove: function(element) {\n      var i = this.indexOf(element);\n      if (i !== 0) {\n        //console.warn('queue order wrong', i);\n        return;\n      }\n      return queueForElement(element).shift();  \n    },\n    check: function() {\n      // next\n      var element = this.nextElement();\n      if (element) {\n        element.__check.call(element);\n      }\n      if (this.canReady()) {\n        this.ready();\n        return true;\n      }\n    },\n    nextElement: function() {\n      return nextQueued();\n    },\n    canReady: function() {\n      return !this.waitToReady && this.isEmpty();\n    },\n    isEmpty: function() {\n      return !importQueue.length && !mainQueue.length;\n    },\n    ready: function() {\n      // TODO(sorvell): As an optimization, turn off CE polyfill upgrading\n      // while registering. This way we avoid having to upgrade each document\n      // piecemeal per registration and can instead register all elements\n      // and upgrade once in a batch. Without this optimization, upgrade time\n      // degrades significantly when SD polyfill is used. This is mainly because\n      // querying the document tree for elements is slow under the SD polyfill.\n      if (CustomElements.ready === false) {\n        CustomElements.upgradeDocumentTree(document);\n        CustomElements.ready = true;\n      }\n      if (readyCallbacks) {\n        var fn;\n        while (readyCallbacks.length) {\n          fn = readyCallbacks.shift();\n          fn();\n        }\n      }\n    },\n    addReadyCallback: function(callback) {\n      if (callback) {\n        readyCallbacks.push(callback);\n      }\n    },\n    waitToReady: true\n  };\n\n  var importQueue = [];\n  var mainQueue = [];\n  var readyCallbacks = [];\n\n  function queueForElement(element) {\n    return document.contains(element) ? mainQueue : importQueue;\n  }\n\n  function nextQueued() {\n    return importQueue.length ? importQueue[0] : mainQueue[0];\n  }\n\n  var polymerReadied = false; \n\n  document.addEventListener('WebComponentsReady', function() {\n    CustomElements.ready = false;\n  });\n  \n  function whenPolymerReady(callback) {\n    queue.waitToReady = true;\n    CustomElements.ready = false;\n    HTMLImports.whenImportsReady(function() {\n      queue.addReadyCallback(callback);\n      queue.waitToReady = false;\n      queue.check();\n    });\n  }\n\n  // exports\n  scope.queue = queue;\n  scope.whenPolymerReady = whenPolymerReady;\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  var whenPolymerReady = scope.whenPolymerReady;\n\n  function importElements(elementOrFragment, callback) {\n    if (elementOrFragment) {\n      document.head.appendChild(elementOrFragment);\n      whenPolymerReady(callback);\n    } else if (callback) {\n      callback();\n    }\n  }\n\n  function importUrls(urls, callback) {\n    if (urls && urls.length) {\n        var frag = document.createDocumentFragment();\n        for (var i=0, l=urls.length, url, link; (i<l) && (url=urls[i]); i++) {\n          link = document.createElement('link');\n          link.rel = 'import';\n          link.href = url;\n          frag.appendChild(link);\n        }\n        importElements(frag, callback);\n    } else if (callback) {\n      callback();\n    }\n  }\n\n  // exports\n  scope.import = importUrls;\n  scope.importElements = importElements;\n\n})(Polymer);\n","/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n(function(scope) {\n\n  // imports\n\n  var extend = scope.extend;\n  var api = scope.api;\n  var queue = scope.queue;\n  var whenPolymerReady = scope.whenPolymerReady;\n  var getRegisteredPrototype = scope.getRegisteredPrototype;\n  var waitingForPrototype = scope.waitingForPrototype;\n\n  // declarative implementation: <polymer-element>\n\n  var prototype = extend(Object.create(HTMLElement.prototype), {\n\n    createdCallback: function() {\n      if (this.getAttribute('name')) {\n        this.init();\n      }\n    },\n\n    init: function() {\n      // fetch declared values\n      this.name = this.getAttribute('name');\n      this.extends = this.getAttribute('extends');\n      // initiate any async resource fetches\n      this.loadResources();\n      // register when all constraints are met\n      this.registerWhenReady();\n    },\n\n    registerWhenReady: function() {\n     if (this.registered\n       || this.waitingForPrototype(this.name)\n       || this.waitingForQueue()\n       || this.waitingForResources()) {\n          return;\n      }\n      queue.go(this);\n    },\n\n\n    // TODO(sorvell): refactor, this method is private-ish, but it's being\n    // called by the queue object.\n    _register: function() {\n      //console.log('registering', this.name);\n      //console.group('registering', this.name);\n      // warn if extending from a custom element not registered via Polymer\n      if (isCustomTag(this.extends) && !isRegistered(this.extends)) {\n        console.warn('%s is attempting to extend %s, an unregistered element ' +\n            'or one that was not registered with Polymer.', this.name,\n            this.extends);\n      }\n      this.register(this.name, this.extends);\n      this.registered = true;\n      //console.groupEnd();\n    },\n\n    waitingForPrototype: function(name) {\n      if (!getRegisteredPrototype(name)) {\n        // then wait for a prototype\n        waitingForPrototype(name, this);\n        // emulate script if user is not supplying one\n        this.handleNoScript(name);\n        // prototype not ready yet\n        return true;\n      }\n    },\n\n    handleNoScript: function(name) {\n      // if explicitly marked as 'noscript'\n      if (this.hasAttribute('noscript') && !this.noscript) {\n        this.noscript = true;\n        // TODO(sorvell): CustomElements polyfill awareness:\n        // noscript elements should upgrade in logical order\n        // script injection ensures this under native custom elements;\n        // under imports + ce polyfills, scripts run before upgrades.\n        // dependencies should be ready at upgrade time so register\n        // prototype at this time.\n        if (window.CustomElements && !CustomElements.useNative) {\n          Polymer(name);\n        } else {\n          var script = document.createElement('script');\n          script.textContent = 'Polymer(\\'' + name + '\\');';\n          this.appendChild(script);\n        }\n      }\n    },\n\n    waitingForResources: function() {\n      return this._needsResources;\n    },\n\n    // NOTE: Elements must be queued in proper order for inheritance/composition\n    // dependency resolution. Previously this was enforced for inheritance,\n    // and by rule for composition. It's now entirely by rule.\n    waitingForQueue: function() {\n      return queue.wait(this, this.registerWhenReady, this._register);\n    },\n\n    loadResources: function() {\n      this._needsResources = true;\n      this.loadStyles(function() {\n        this._needsResources = false;\n        this.registerWhenReady();\n      }.bind(this));\n    }\n\n  });\n\n  // semi-pluggable APIs \n\n  // TODO(sjmiles): should be fully pluggable (aka decoupled, currently\n  // the various plugins are allowed to depend on each other directly)\n  api.publish(api.declaration, prototype);\n\n  // utility and bookkeeping\n\n  function isRegistered(name) {\n    return Boolean(HTMLElement.getPrototypeForTag(name));\n  }\n\n  function isCustomTag(name) {\n    return (name && name.indexOf('-') >= 0);\n  }\n\n  // exports\n\n  scope.getRegisteredPrototype = getRegisteredPrototype;\n  \n  // boot tasks\n\n  whenPolymerReady(function() {\n    document.body.removeAttribute('unresolved');\n    document.dispatchEvent(\n      new CustomEvent('polymer-ready', {bubbles: true})\n    );\n  });\n\n  // register polymer-element with document\n\n  document.registerElement('polymer-element', {prototype: prototype});\n\n})(Polymer);\n"]}
 |