1f516a629824f0019315b9841dc2df76dc7862ddeChris Craik/** 2f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * @license 3f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 4f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * Code distributed by Google as part of the polymer project is also 8f516a629824f0019315b9841dc2df76dc7862ddeChris Craik * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9f516a629824f0019315b9841dc2df76dc7862ddeChris Craik */ 10f516a629824f0019315b9841dc2df76dc7862ddeChris Craik// @version 0.5.5 11f516a629824f0019315b9841dc2df76dc7862ddeChris Craikif (typeof WeakMap === "undefined") { 12f516a629824f0019315b9841dc2df76dc7862ddeChris Craik (function() { 13f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var defineProperty = Object.defineProperty; 14f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var counter = Date.now() % 1e9; 15f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var WeakMap = function() { 16f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); 17f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 18f516a629824f0019315b9841dc2df76dc7862ddeChris Craik WeakMap.prototype = { 19f516a629824f0019315b9841dc2df76dc7862ddeChris Craik set: function(key, value) { 20f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var entry = key[this.name]; 21f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { 22f516a629824f0019315b9841dc2df76dc7862ddeChris Craik value: [ key, value ], 23f516a629824f0019315b9841dc2df76dc7862ddeChris Craik writable: true 24f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 25f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return this; 26f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 27f516a629824f0019315b9841dc2df76dc7862ddeChris Craik get: function(key) { 28f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var entry; 29f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; 30f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 31f516a629824f0019315b9841dc2df76dc7862ddeChris Craik "delete": function(key) { 32f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var entry = key[this.name]; 33f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!entry || entry[0] !== key) return false; 34f516a629824f0019315b9841dc2df76dc7862ddeChris Craik entry[0] = entry[1] = undefined; 35f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return true; 36f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 37f516a629824f0019315b9841dc2df76dc7862ddeChris Craik has: function(key) { 38f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var entry = key[this.name]; 39f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!entry) return false; 40f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return entry[0] === key; 41f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 42f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 43f516a629824f0019315b9841dc2df76dc7862ddeChris Craik window.WeakMap = WeakMap; 44f516a629824f0019315b9841dc2df76dc7862ddeChris Craik })(); 45f516a629824f0019315b9841dc2df76dc7862ddeChris Craik} 46f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 47f516a629824f0019315b9841dc2df76dc7862ddeChris Craikwindow.HTMLImports = window.HTMLImports || { 48f516a629824f0019315b9841dc2df76dc7862ddeChris Craik flags: {} 49f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}; 50f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 51f516a629824f0019315b9841dc2df76dc7862ddeChris Craik(function(scope) { 52f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var IMPORT_LINK_TYPE = "import"; 53f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link")); 54f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill); 55f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var wrap = function(node) { 56f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return hasShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node) : node; 57f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 58f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var rootDocument = wrap(document); 59f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var currentScriptDescriptor = { 60f516a629824f0019315b9841dc2df76dc7862ddeChris Craik get: function() { 61f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var script = HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null); 62f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return wrap(script); 63f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 64f516a629824f0019315b9841dc2df76dc7862ddeChris Craik configurable: true 65f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 66f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Object.defineProperty(document, "_currentScript", currentScriptDescriptor); 67f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor); 68f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var isIE = /Trident|Edge/.test(navigator.userAgent); 69f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function whenReady(callback, doc) { 70f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc = doc || rootDocument; 71f516a629824f0019315b9841dc2df76dc7862ddeChris Craik whenDocumentReady(function() { 72f516a629824f0019315b9841dc2df76dc7862ddeChris Craik watchImportsLoad(callback, doc); 73f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, doc); 74f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 75f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var requiredReadyState = isIE ? "complete" : "interactive"; 76f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var READY_EVENT = "readystatechange"; 77f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function isDocumentReady(doc) { 78f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return doc.readyState === "complete" || doc.readyState === requiredReadyState; 79f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 80f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function whenDocumentReady(callback, doc) { 81f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!isDocumentReady(doc)) { 82f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var checkReady = function() { 83f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (doc.readyState === "complete" || doc.readyState === requiredReadyState) { 84f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc.removeEventListener(READY_EVENT, checkReady); 85f516a629824f0019315b9841dc2df76dc7862ddeChris Craik whenDocumentReady(callback, doc); 86f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 87f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 88f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc.addEventListener(READY_EVENT, checkReady); 89f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else if (callback) { 90f516a629824f0019315b9841dc2df76dc7862ddeChris Craik callback(); 91f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 92f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 93f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function markTargetLoaded(event) { 94f516a629824f0019315b9841dc2df76dc7862ddeChris Craik event.target.__loaded = true; 95f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 96f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function watchImportsLoad(callback, doc) { 97f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var imports = doc.querySelectorAll("link[rel=import]"); 98f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var loaded = 0, l = imports.length; 99f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function checkDone(d) { 100f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (loaded == l && callback) { 101f516a629824f0019315b9841dc2df76dc7862ddeChris Craik callback(); 102f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 103f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 104f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function loadedImport(e) { 105f516a629824f0019315b9841dc2df76dc7862ddeChris Craik markTargetLoaded(e); 106f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loaded++; 107f516a629824f0019315b9841dc2df76dc7862ddeChris Craik checkDone(); 108f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 109f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (l) { 110f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, imp; i < l && (imp = imports[i]); i++) { 111f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (isImportLoaded(imp)) { 112f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loadedImport.call(imp, { 113f516a629824f0019315b9841dc2df76dc7862ddeChris Craik target: imp 114f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 115f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 116f516a629824f0019315b9841dc2df76dc7862ddeChris Craik imp.addEventListener("load", loadedImport); 117f516a629824f0019315b9841dc2df76dc7862ddeChris Craik imp.addEventListener("error", loadedImport); 118f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 119f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 120f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 121f516a629824f0019315b9841dc2df76dc7862ddeChris Craik checkDone(); 122f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 123f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 124f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function isImportLoaded(link) { 125f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed; 126f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 127f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (useNative) { 128f516a629824f0019315b9841dc2df76dc7862ddeChris Craik new MutationObserver(function(mxns) { 129f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) { 130f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (m.addedNodes) { 131f516a629824f0019315b9841dc2df76dc7862ddeChris Craik handleImports(m.addedNodes); 132f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 133f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 134f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }).observe(document.head, { 135f516a629824f0019315b9841dc2df76dc7862ddeChris Craik childList: true 136f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 137f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function handleImports(nodes) { 138f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { 139f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (isImport(n)) { 140f516a629824f0019315b9841dc2df76dc7862ddeChris Craik handleImport(n); 141f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 142f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 143f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 144f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function isImport(element) { 145f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return element.localName === "link" && element.rel === "import"; 146f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 147f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function handleImport(element) { 148f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var loaded = element.import; 149f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (loaded) { 150f516a629824f0019315b9841dc2df76dc7862ddeChris Craik markTargetLoaded({ 151f516a629824f0019315b9841dc2df76dc7862ddeChris Craik target: element 152f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 153f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 154f516a629824f0019315b9841dc2df76dc7862ddeChris Craik element.addEventListener("load", markTargetLoaded); 155f516a629824f0019315b9841dc2df76dc7862ddeChris Craik element.addEventListener("error", markTargetLoaded); 156f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 157f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 158f516a629824f0019315b9841dc2df76dc7862ddeChris Craik (function() { 159f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (document.readyState === "loading") { 160f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var imports = document.querySelectorAll("link[rel=import]"); 161f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) { 162f516a629824f0019315b9841dc2df76dc7862ddeChris Craik handleImport(imp); 163f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 164f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 165f516a629824f0019315b9841dc2df76dc7862ddeChris Craik })(); 166f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 167f516a629824f0019315b9841dc2df76dc7862ddeChris Craik whenReady(function() { 168f516a629824f0019315b9841dc2df76dc7862ddeChris Craik HTMLImports.ready = true; 169f516a629824f0019315b9841dc2df76dc7862ddeChris Craik HTMLImports.readyTime = new Date().getTime(); 170f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var evt = rootDocument.createEvent("CustomEvent"); 171f516a629824f0019315b9841dc2df76dc7862ddeChris Craik evt.initCustomEvent("HTMLImportsLoaded", true, true, {}); 172f516a629824f0019315b9841dc2df76dc7862ddeChris Craik rootDocument.dispatchEvent(evt); 173f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 174f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE; 175f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.useNative = useNative; 176f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.rootDocument = rootDocument; 177f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.whenReady = whenReady; 178f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.isIE = isIE; 179f516a629824f0019315b9841dc2df76dc7862ddeChris Craik})(HTMLImports); 180f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 181f516a629824f0019315b9841dc2df76dc7862ddeChris Craik(function(scope) { 182f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var modules = []; 183f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var addModule = function(module) { 184f516a629824f0019315b9841dc2df76dc7862ddeChris Craik modules.push(module); 185f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 186f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var initializeModules = function() { 187f516a629824f0019315b9841dc2df76dc7862ddeChris Craik modules.forEach(function(module) { 188f516a629824f0019315b9841dc2df76dc7862ddeChris Craik module(scope); 189f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 190f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 191f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.addModule = addModule; 192f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.initializeModules = initializeModules; 193f516a629824f0019315b9841dc2df76dc7862ddeChris Craik})(HTMLImports); 194f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 195f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 196f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g; 197f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g; 198f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var path = { 199f516a629824f0019315b9841dc2df76dc7862ddeChris Craik resolveUrlsInStyle: function(style) { 200f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var doc = style.ownerDocument; 201f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var resolver = doc.createElement("a"); 202f516a629824f0019315b9841dc2df76dc7862ddeChris Craik style.textContent = this.resolveUrlsInCssText(style.textContent, resolver); 203f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return style; 204f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 205f516a629824f0019315b9841dc2df76dc7862ddeChris Craik resolveUrlsInCssText: function(cssText, urlObj) { 206f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var r = this.replaceUrls(cssText, urlObj, CSS_URL_REGEXP); 207f516a629824f0019315b9841dc2df76dc7862ddeChris Craik r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEXP); 208f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return r; 209f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 210f516a629824f0019315b9841dc2df76dc7862ddeChris Craik replaceUrls: function(text, urlObj, regexp) { 211f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return text.replace(regexp, function(m, pre, url, post) { 212f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var urlPath = url.replace(/["']/g, ""); 213f516a629824f0019315b9841dc2df76dc7862ddeChris Craik urlObj.href = urlPath; 214f516a629824f0019315b9841dc2df76dc7862ddeChris Craik urlPath = urlObj.href; 215f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return pre + "'" + urlPath + "'" + post; 216f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 217f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 218f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 219f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.path = path; 220f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 221f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 222f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 223f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var xhr = { 224f516a629824f0019315b9841dc2df76dc7862ddeChris Craik async: true, 225f516a629824f0019315b9841dc2df76dc7862ddeChris Craik ok: function(request) { 226f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0; 227f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 228f516a629824f0019315b9841dc2df76dc7862ddeChris Craik load: function(url, next, nextContext) { 229f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var request = new XMLHttpRequest(); 230f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (scope.flags.debug || scope.flags.bust) { 231f516a629824f0019315b9841dc2df76dc7862ddeChris Craik url += "?" + Math.random(); 232f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 233f516a629824f0019315b9841dc2df76dc7862ddeChris Craik request.open("GET", url, xhr.async); 234f516a629824f0019315b9841dc2df76dc7862ddeChris Craik request.addEventListener("readystatechange", function(e) { 235f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (request.readyState === 4) { 236f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var locationHeader = request.getResponseHeader("Location"); 237f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var redirectedUrl = null; 238f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (locationHeader) { 239f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader; 240f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 241f516a629824f0019315b9841dc2df76dc7862ddeChris Craik next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl); 242f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 243f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 244f516a629824f0019315b9841dc2df76dc7862ddeChris Craik request.send(); 245f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return request; 246f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 247f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loadDocument: function(url, next, nextContext) { 248f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.load(url, next, nextContext).responseType = "document"; 249f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 250f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 251f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.xhr = xhr; 252f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 253f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 254f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 255f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var xhr = scope.xhr; 256f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var flags = scope.flags; 257f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var Loader = function(onLoad, onComplete) { 258f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.cache = {}; 259f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.onload = onLoad; 260f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.oncomplete = onComplete; 261f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.inflight = 0; 262f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.pending = {}; 263f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 264f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Loader.prototype = { 265f516a629824f0019315b9841dc2df76dc7862ddeChris Craik addNodes: function(nodes) { 266f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.inflight += nodes.length; 267f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { 268f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.require(n); 269f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 270f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.checkDone(); 271f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 272f516a629824f0019315b9841dc2df76dc7862ddeChris Craik addNode: function(node) { 273f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.inflight++; 274f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.require(node); 275f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.checkDone(); 276f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 277f516a629824f0019315b9841dc2df76dc7862ddeChris Craik require: function(elt) { 278f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var url = elt.src || elt.href; 279f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.__nodeUrl = url; 280f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!this.dedupe(url, elt)) { 281f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.fetch(url, elt); 282f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 283f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 284f516a629824f0019315b9841dc2df76dc7862ddeChris Craik dedupe: function(url, elt) { 285f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (this.pending[url]) { 286f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.pending[url].push(elt); 287f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return true; 288f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 289f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var resource; 290f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (this.cache[url]) { 291f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.onload(url, elt, this.cache[url]); 292f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.tail(); 293f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return true; 294f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 295f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.pending[url] = [ elt ]; 296f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return false; 297f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 298f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fetch: function(url, elt) { 299f516a629824f0019315b9841dc2df76dc7862ddeChris Craik flags.load && console.log("fetch", url, elt); 300f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!url) { 301f516a629824f0019315b9841dc2df76dc7862ddeChris Craik setTimeout(function() { 302f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.receive(url, elt, { 303f516a629824f0019315b9841dc2df76dc7862ddeChris Craik error: "href must be specified" 304f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, null); 305f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }.bind(this), 0); 306f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else if (url.match(/^data:/)) { 307f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var pieces = url.split(","); 308f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var header = pieces[0]; 309f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var body = pieces[1]; 310f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (header.indexOf(";base64") > -1) { 311f516a629824f0019315b9841dc2df76dc7862ddeChris Craik body = atob(body); 312f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 313f516a629824f0019315b9841dc2df76dc7862ddeChris Craik body = decodeURIComponent(body); 314f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 315f516a629824f0019315b9841dc2df76dc7862ddeChris Craik setTimeout(function() { 316f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.receive(url, elt, null, body); 317f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }.bind(this), 0); 318f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 319f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var receiveXhr = function(err, resource, redirectedUrl) { 320f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.receive(url, elt, err, resource, redirectedUrl); 321f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }.bind(this); 322f516a629824f0019315b9841dc2df76dc7862ddeChris Craik xhr.load(url, receiveXhr); 323f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 324f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 325f516a629824f0019315b9841dc2df76dc7862ddeChris Craik receive: function(url, elt, err, resource, redirectedUrl) { 326f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.cache[url] = resource; 327f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var $p = this.pending[url]; 328f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { 329f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.onload(url, p, resource, err, redirectedUrl); 330f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.tail(); 331f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 332f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.pending[url] = null; 333f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 334f516a629824f0019315b9841dc2df76dc7862ddeChris Craik tail: function() { 335f516a629824f0019315b9841dc2df76dc7862ddeChris Craik --this.inflight; 336f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.checkDone(); 337f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 338f516a629824f0019315b9841dc2df76dc7862ddeChris Craik checkDone: function() { 339f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!this.inflight) { 340f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.oncomplete(); 341f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 342f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 343f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 344f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.Loader = Loader; 345f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 346f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 347f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 348f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var Observer = function(addCallback) { 349f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.addCallback = addCallback; 350f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.mo = new MutationObserver(this.handler.bind(this)); 351f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 352f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Observer.prototype = { 353f516a629824f0019315b9841dc2df76dc7862ddeChris Craik handler: function(mutations) { 354f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) { 355f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (m.type === "childList" && m.addedNodes.length) { 356f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.addedNodes(m.addedNodes); 357f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 358f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 359f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 360f516a629824f0019315b9841dc2df76dc7862ddeChris Craik addedNodes: function(nodes) { 361f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (this.addCallback) { 362f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.addCallback(nodes); 363f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 364f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) { 365f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (n.children && n.children.length) { 366f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.addedNodes(n.children); 367f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 368f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 369f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 370f516a629824f0019315b9841dc2df76dc7862ddeChris Craik observe: function(root) { 371f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.mo.observe(root, { 372f516a629824f0019315b9841dc2df76dc7862ddeChris Craik childList: true, 373f516a629824f0019315b9841dc2df76dc7862ddeChris Craik subtree: true 374f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 375f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 376f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 377f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.Observer = Observer; 378f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 379f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 380f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 381f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var path = scope.path; 382f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var rootDocument = scope.rootDocument; 383f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var flags = scope.flags; 384f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var isIE = scope.isIE; 385f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; 386f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]"; 387f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var importParser = { 388f516a629824f0019315b9841dc2df76dc7862ddeChris Craik documentSelectors: IMPORT_SELECTOR, 389f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]", "style", "script:not([type])", 'script[type="text/javascript"]' ].join(","), 390f516a629824f0019315b9841dc2df76dc7862ddeChris Craik map: { 391f516a629824f0019315b9841dc2df76dc7862ddeChris Craik link: "parseLink", 392f516a629824f0019315b9841dc2df76dc7862ddeChris Craik script: "parseScript", 393f516a629824f0019315b9841dc2df76dc7862ddeChris Craik style: "parseStyle" 394f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 395f516a629824f0019315b9841dc2df76dc7862ddeChris Craik dynamicElements: [], 396f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseNext: function() { 397f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var next = this.nextToParse(); 398f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (next) { 399f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parse(next); 400f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 401f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 402f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parse: function(elt) { 403f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (this.isParsed(elt)) { 404f516a629824f0019315b9841dc2df76dc7862ddeChris Craik flags.parse && console.log("[%s] is already parsed", elt.localName); 405f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return; 406f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 407f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var fn = this[this.map[elt.localName]]; 408f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (fn) { 409f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.markParsing(elt); 410f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fn.call(this, elt); 411f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 412f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 413f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseDynamic: function(elt, quiet) { 414f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.dynamicElements.push(elt); 415f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!quiet) { 416f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parseNext(); 417f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 418f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 419f516a629824f0019315b9841dc2df76dc7862ddeChris Craik markParsing: function(elt) { 420f516a629824f0019315b9841dc2df76dc7862ddeChris Craik flags.parse && console.log("parsing", elt); 421f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parsingElement = elt; 422f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 423f516a629824f0019315b9841dc2df76dc7862ddeChris Craik markParsingComplete: function(elt) { 424f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.__importParsed = true; 425f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.markDynamicParsingComplete(elt); 426f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (elt.__importElement) { 427f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.__importElement.__importParsed = true; 428f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.markDynamicParsingComplete(elt.__importElement); 429f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 430f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parsingElement = null; 431f516a629824f0019315b9841dc2df76dc7862ddeChris Craik flags.parse && console.log("completed", elt); 432f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 433f516a629824f0019315b9841dc2df76dc7862ddeChris Craik markDynamicParsingComplete: function(elt) { 434f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var i = this.dynamicElements.indexOf(elt); 435f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (i >= 0) { 436f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.dynamicElements.splice(i, 1); 437f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 438f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 439f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseImport: function(elt) { 440f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (HTMLImports.__importsParsingHook) { 441f516a629824f0019315b9841dc2df76dc7862ddeChris Craik HTMLImports.__importsParsingHook(elt); 442f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 443f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (elt.import) { 444f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.import.__importParsed = true; 445f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 446f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.markParsingComplete(elt); 447f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (elt.__resource && !elt.__error) { 448f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.dispatchEvent(new CustomEvent("load", { 449f516a629824f0019315b9841dc2df76dc7862ddeChris Craik bubbles: false 450f516a629824f0019315b9841dc2df76dc7862ddeChris Craik })); 451f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 452f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.dispatchEvent(new CustomEvent("error", { 453f516a629824f0019315b9841dc2df76dc7862ddeChris Craik bubbles: false 454f516a629824f0019315b9841dc2df76dc7862ddeChris Craik })); 455f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 456f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (elt.__pending) { 457f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var fn; 458f516a629824f0019315b9841dc2df76dc7862ddeChris Craik while (elt.__pending.length) { 459f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fn = elt.__pending.shift(); 460f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (fn) { 461f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fn({ 462f516a629824f0019315b9841dc2df76dc7862ddeChris Craik target: elt 463f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 464f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 465f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 466f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 467f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parseNext(); 468f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 469f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseLink: function(linkElt) { 470f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (nodeIsImport(linkElt)) { 471f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parseImport(linkElt); 472f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 473f516a629824f0019315b9841dc2df76dc7862ddeChris Craik linkElt.href = linkElt.href; 474f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parseGeneric(linkElt); 475f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 476f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 477f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseStyle: function(elt) { 478f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var src = elt; 479f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt = cloneStyle(elt); 480f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.__importElement = src; 481f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.parseGeneric(elt); 482f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 483f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseGeneric: function(elt) { 484f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.trackElement(elt); 485f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.addElementToDocument(elt); 486f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 487f516a629824f0019315b9841dc2df76dc7862ddeChris Craik rootImportForElement: function(elt) { 488f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var n = elt; 489f516a629824f0019315b9841dc2df76dc7862ddeChris Craik while (n.ownerDocument.__importLink) { 490f516a629824f0019315b9841dc2df76dc7862ddeChris Craik n = n.ownerDocument.__importLink; 491f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 492f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return n; 493f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 494f516a629824f0019315b9841dc2df76dc7862ddeChris Craik addElementToDocument: function(elt) { 495f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var port = this.rootImportForElement(elt.__importElement || elt); 496f516a629824f0019315b9841dc2df76dc7862ddeChris Craik port.parentNode.insertBefore(elt, port); 497f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 498f516a629824f0019315b9841dc2df76dc7862ddeChris Craik trackElement: function(elt, callback) { 499f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var self = this; 500f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var done = function(e) { 501f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (callback) { 502f516a629824f0019315b9841dc2df76dc7862ddeChris Craik callback(e); 503f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 504f516a629824f0019315b9841dc2df76dc7862ddeChris Craik self.markParsingComplete(elt); 505f516a629824f0019315b9841dc2df76dc7862ddeChris Craik self.parseNext(); 506f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 507f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.addEventListener("load", done); 508f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.addEventListener("error", done); 509f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (isIE && elt.localName === "style") { 510f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var fakeLoad = false; 511f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (elt.textContent.indexOf("@import") == -1) { 512f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fakeLoad = true; 513f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else if (elt.sheet) { 514f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fakeLoad = true; 515f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var csr = elt.sheet.cssRules; 516f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var len = csr ? csr.length : 0; 517f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, r; i < len && (r = csr[i]); i++) { 518f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (r.type === CSSRule.IMPORT_RULE) { 519f516a629824f0019315b9841dc2df76dc7862ddeChris Craik fakeLoad = fakeLoad && Boolean(r.styleSheet); 520f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 521f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 522f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 523f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (fakeLoad) { 524f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.dispatchEvent(new CustomEvent("load", { 525f516a629824f0019315b9841dc2df76dc7862ddeChris Craik bubbles: false 526f516a629824f0019315b9841dc2df76dc7862ddeChris Craik })); 527f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 528f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 529f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 530f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseScript: function(scriptElt) { 531f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var script = document.createElement("script"); 532f516a629824f0019315b9841dc2df76dc7862ddeChris Craik script.__importElement = scriptElt; 533f516a629824f0019315b9841dc2df76dc7862ddeChris Craik script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt); 534f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.currentScript = scriptElt; 535f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.trackElement(script, function(e) { 536f516a629824f0019315b9841dc2df76dc7862ddeChris Craik script.parentNode.removeChild(script); 537f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.currentScript = null; 538f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 539f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.addElementToDocument(script); 540f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 541f516a629824f0019315b9841dc2df76dc7862ddeChris Craik nextToParse: function() { 542f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this._mayParse = []; 543f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic()); 544f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 545f516a629824f0019315b9841dc2df76dc7862ddeChris Craik nextToParseInDoc: function(doc, link) { 546f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (doc && this._mayParse.indexOf(doc) < 0) { 547f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this._mayParse.push(doc); 548f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc)); 549f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = nodes.length, p = 0, n; i < l && (n = nodes[i]); i++) { 550f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!this.isParsed(n)) { 551f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (this.hasResource(n)) { 552f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n; 553f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 554f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return; 555f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 556f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 557f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 558f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 559f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return link; 560f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 561f516a629824f0019315b9841dc2df76dc7862ddeChris Craik nextToParseDynamic: function() { 562f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return this.dynamicElements[0]; 563f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 564f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parseSelectorsForNode: function(node) { 565f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var doc = node.ownerDocument || node; 566f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return doc === rootDocument ? this.documentSelectors : this.importsSelectors; 567f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 568f516a629824f0019315b9841dc2df76dc7862ddeChris Craik isParsed: function(node) { 569f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return node.__importParsed; 570f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 571f516a629824f0019315b9841dc2df76dc7862ddeChris Craik needsDynamicParsing: function(elt) { 572f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return this.dynamicElements.indexOf(elt) >= 0; 573f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 574f516a629824f0019315b9841dc2df76dc7862ddeChris Craik hasResource: function(node) { 575f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (nodeIsImport(node) && node.import === undefined) { 576f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return false; 577f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 578f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return true; 579f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 580f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 581f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function nodeIsImport(elt) { 582f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE; 583f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 584f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function generateScriptDataUrl(script) { 585f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var scriptContent = generateScriptContent(script); 586f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent); 587f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 588f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function generateScriptContent(script) { 589f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return script.textContent + generateSourceMapHint(script); 590f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 591f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function generateSourceMapHint(script) { 592f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var owner = script.ownerDocument; 593f516a629824f0019315b9841dc2df76dc7862ddeChris Craik owner.__importedScripts = owner.__importedScripts || 0; 594f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var moniker = script.ownerDocument.baseURI; 595f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var num = owner.__importedScripts ? "-" + owner.__importedScripts : ""; 596f516a629824f0019315b9841dc2df76dc7862ddeChris Craik owner.__importedScripts++; 597f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return "\n//# sourceURL=" + moniker + num + ".js\n"; 598f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 599f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function cloneStyle(style) { 600f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var clone = style.ownerDocument.createElement("style"); 601f516a629824f0019315b9841dc2df76dc7862ddeChris Craik clone.textContent = style.textContent; 602f516a629824f0019315b9841dc2df76dc7862ddeChris Craik path.resolveUrlsInStyle(clone); 603f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return clone; 604f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 605f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.parser = importParser; 606f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.IMPORT_SELECTOR = IMPORT_SELECTOR; 607f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 608f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 609f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 610f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var flags = scope.flags; 611f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; 612f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var IMPORT_SELECTOR = scope.IMPORT_SELECTOR; 613f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var rootDocument = scope.rootDocument; 614f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var Loader = scope.Loader; 615f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var Observer = scope.Observer; 616f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var parser = scope.parser; 617f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var importer = { 618f516a629824f0019315b9841dc2df76dc7862ddeChris Craik documents: {}, 619f516a629824f0019315b9841dc2df76dc7862ddeChris Craik documentPreloadSelectors: IMPORT_SELECTOR, 620f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","), 621f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loadNode: function(node) { 622f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importLoader.addNode(node); 623f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 624f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loadSubtree: function(parent) { 625f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var nodes = this.marshalNodes(parent); 626f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importLoader.addNodes(nodes); 627f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 628f516a629824f0019315b9841dc2df76dc7862ddeChris Craik marshalNodes: function(parent) { 629f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return parent.querySelectorAll(this.loadSelectorsForNode(parent)); 630f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 631f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loadSelectorsForNode: function(node) { 632f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var doc = node.ownerDocument || node; 633f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors; 634f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 635f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loaded: function(url, elt, resource, err, redirectedUrl) { 636f516a629824f0019315b9841dc2df76dc7862ddeChris Craik flags.load && console.log("loaded", url, elt); 637f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.__resource = resource; 638f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.__error = err; 639f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (isImportLink(elt)) { 640f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var doc = this.documents[url]; 641f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (doc === undefined) { 642f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc = err ? null : makeDocument(resource, redirectedUrl || url); 643f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (doc) { 644f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc.__importLink = elt; 645f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.bootDocument(doc); 646f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 647f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.documents[url] = doc; 648f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 649f516a629824f0019315b9841dc2df76dc7862ddeChris Craik elt.import = doc; 650f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 651f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parser.parseNext(); 652f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 653f516a629824f0019315b9841dc2df76dc7862ddeChris Craik bootDocument: function(doc) { 654f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.loadSubtree(doc); 655f516a629824f0019315b9841dc2df76dc7862ddeChris Craik this.observer.observe(doc); 656f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parser.parseNext(); 657f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 658f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loadedAll: function() { 659f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parser.parseNext(); 660f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 661f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 662f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer)); 663f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importer.observer = new Observer(); 664f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function isImportLink(elt) { 665f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return isLinkRel(elt, IMPORT_LINK_TYPE); 666f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 667f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function isLinkRel(elt, rel) { 668f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return elt.localName === "link" && elt.getAttribute("rel") === rel; 669f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 670f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function hasBaseURIAccessor(doc) { 671f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return !!Object.getOwnPropertyDescriptor(doc, "baseURI"); 672f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 673f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function makeDocument(resource, url) { 674f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE); 675f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc._URL = url; 676f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var base = doc.createElement("base"); 677f516a629824f0019315b9841dc2df76dc7862ddeChris Craik base.setAttribute("href", url); 678f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!doc.baseURI && !hasBaseURIAccessor(doc)) { 679f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Object.defineProperty(doc, "baseURI", { 680f516a629824f0019315b9841dc2df76dc7862ddeChris Craik value: url 681f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }); 682f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 683f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var meta = doc.createElement("meta"); 684f516a629824f0019315b9841dc2df76dc7862ddeChris Craik meta.setAttribute("charset", "utf-8"); 685f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc.head.appendChild(meta); 686f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc.head.appendChild(base); 687f516a629824f0019315b9841dc2df76dc7862ddeChris Craik doc.body.innerHTML = resource; 688f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) { 689f516a629824f0019315b9841dc2df76dc7862ddeChris Craik HTMLTemplateElement.bootstrap(doc); 690f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 691f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return doc; 692f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 693f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!document.baseURI) { 694f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var baseURIDescriptor = { 695f516a629824f0019315b9841dc2df76dc7862ddeChris Craik get: function() { 696f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var base = document.querySelector("base"); 697f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return base ? base.href : window.location.href; 698f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 699f516a629824f0019315b9841dc2df76dc7862ddeChris Craik configurable: true 700f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 701f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Object.defineProperty(document, "baseURI", baseURIDescriptor); 702f516a629824f0019315b9841dc2df76dc7862ddeChris Craik Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor); 703f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 704f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.importer = importer; 705f516a629824f0019315b9841dc2df76dc7862ddeChris Craik scope.importLoader = importLoader; 706f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 707f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 708f516a629824f0019315b9841dc2df76dc7862ddeChris CraikHTMLImports.addModule(function(scope) { 709f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var parser = scope.parser; 710f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var importer = scope.importer; 711f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var dynamic = { 712f516a629824f0019315b9841dc2df76dc7862ddeChris Craik added: function(nodes) { 713f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var owner, parsed, loading; 714f516a629824f0019315b9841dc2df76dc7862ddeChris Craik for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { 715f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (!owner) { 716f516a629824f0019315b9841dc2df76dc7862ddeChris Craik owner = n.ownerDocument; 717f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parsed = parser.isParsed(owner); 718f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 719f516a629824f0019315b9841dc2df76dc7862ddeChris Craik loading = this.shouldLoadNode(n); 720f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (loading) { 721f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importer.loadNode(n); 722f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 723f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (this.shouldParseNode(n) && parsed) { 724f516a629824f0019315b9841dc2df76dc7862ddeChris Craik parser.parseDynamic(n, loading); 725f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 726f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 727f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 728f516a629824f0019315b9841dc2df76dc7862ddeChris Craik shouldLoadNode: function(node) { 729f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node)); 730f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }, 731f516a629824f0019315b9841dc2df76dc7862ddeChris Craik shouldParseNode: function(node) { 732f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node)); 733f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 734f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 735f516a629824f0019315b9841dc2df76dc7862ddeChris Craik importer.observer.addCallback = dynamic.added.bind(dynamic); 736f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector; 737f516a629824f0019315b9841dc2df76dc7862ddeChris Craik}); 738f516a629824f0019315b9841dc2df76dc7862ddeChris Craik 739f516a629824f0019315b9841dc2df76dc7862ddeChris Craik(function(scope) { 740f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var initializeModules = scope.initializeModules; 741f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var isIE = scope.isIE; 742f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (scope.useNative) { 743f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return; 744f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 745f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (isIE && typeof window.CustomEvent !== "function") { 746f516a629824f0019315b9841dc2df76dc7862ddeChris Craik window.CustomEvent = function(inType, params) { 747f516a629824f0019315b9841dc2df76dc7862ddeChris Craik params = params || {}; 748f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var e = document.createEvent("CustomEvent"); 749f516a629824f0019315b9841dc2df76dc7862ddeChris Craik e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); 750f516a629824f0019315b9841dc2df76dc7862ddeChris Craik return e; 751f516a629824f0019315b9841dc2df76dc7862ddeChris Craik }; 752f516a629824f0019315b9841dc2df76dc7862ddeChris Craik window.CustomEvent.prototype = window.Event.prototype; 753f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 754f516a629824f0019315b9841dc2df76dc7862ddeChris Craik initializeModules(); 755f516a629824f0019315b9841dc2df76dc7862ddeChris Craik var rootDocument = scope.rootDocument; 756f516a629824f0019315b9841dc2df76dc7862ddeChris Craik function bootstrap() { 757f516a629824f0019315b9841dc2df76dc7862ddeChris Craik HTMLImports.importer.bootDocument(rootDocument); 758f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 759f516a629824f0019315b9841dc2df76dc7862ddeChris Craik if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) { 760f516a629824f0019315b9841dc2df76dc7862ddeChris Craik bootstrap(); 761f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } else { 762f516a629824f0019315b9841dc2df76dc7862ddeChris Craik document.addEventListener("DOMContentLoaded", bootstrap); 763f516a629824f0019315b9841dc2df76dc7862ddeChris Craik } 764f516a629824f0019315b9841dc2df76dc7862ddeChris Craik})(HTMLImports);