{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tom/src/client/morphic/component-loader.js"],"names":["scriptManager","files","self","lively4loadingPromises","loadingPromises","_loggingEnabled","_log","args","console","log","_timeEnabled","_timeLog","name","msg","Math","round","performance","now","ComponentLoader","templateFirstLoadTimes","register","componentName","template","prototype","load","_def","globalObject","window","lively4components","init","Object","defineProperty","get","obj","set","value","enumerable","configurable","updatePrototype","aClass","moduleName","replace","prototypes","proxies","__proto__","onCreatedCallback","object","shadowRoot","attachScriptsFromShadowDOM","findLively4Script","createdCallback","call","_livelyLoading","Promise","resolve","_livelyLoadingDep","loadUnresolved","then","initialize","LastRegistered","toFixed","_lively4created","Date","dispatchEvent","Event","catch","e","error","onAttachedCallback","attachedCallback","onDetachedCallback","detachedCallback","applyTemplate","element","templates","applyTemplateElement","attachShadow","mode","fragment","cloneNode","childNodes","forEach","ea","clone","document","importNode","appendChild","componentUrl","proxy","lively","fillTemplateStyles","HTMLElement","_lively4version","constructor","connectedCallback","apply","disconnectedCallback","adoptedCallback","customElements","define","lookupRoot","deep","debuggingHint","withChildren","withyourself","body","selector","unresolved","parentElement","unresolvedSiblingsAndMe","Array","from","querySelectorAll","includes","push","concat","deepUnresolved","findUnresolvedDeep","root","shadow","result","children","child","unique","Set","__debugOpenPromisedComponents","promises","filter","el","nodeName","toLowerCase","has","add","map","ensureLoadByName","promise","reject","p","r","finished","er","setTimeout","unfinished","unfinishedPromise","warn","join","all","err","createdPromise","target","addEventListener","evt","stopPropagation","delete","loadByName","didInsertTag","resetTemplatePathCache","templatePaths","undefined","templatePathsCache","templatePathsCacheTime","getTemplatePathContent","path","cacheInvalidationTime","cached","time","resultPromise","fetch","method","resp","status","json","contents","getTemplatePaths","defaultPaths","lively4url","customPaths","persistentCustomTemplatePaths","startsWith","JSON","parse","localStorage","lively4customTemplatePaths","paths","stringify","addPersistentCustomTemplatePath","removePersistentCustomTemplatePath","index","indexOf","splice","searchTemplateFilename","filename","templateDir","__karma__","stats","found","find","modUrl","Error","templateURL","exists","mod","System","import","default","templateSource","text","div","createElement","innerHTML","querySelector","remove","content","createComponent","tagString","comp","openIn","parent","component","beginning","created","compPromise","composedPath","tagName","insertBefore","firstChild","openInBody","openInWindow","pos","w","setPosition","style","opacity","localName","match","windowPromise","ensureWindowTitle","windowTitle","setAttribute","reloadComponent","source","url","html","parseHTML","id","templateClone"],"mappings":"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","file":"component-loader.js","sourcesContent":["import scriptManager from  \"src/client/script-manager.js\";\nimport files from \"../files.js\"\n\n// store promises of loaded and currently loading templates\nif (!self.lively4loadingPromises) {\n  // WARNING: only used by loadUnresolved and not loadByName\n  self.lively4loadingPromises = {} // just to be on the save side....\n}\nexport var loadingPromises = self.lively4loadingPromises;\n\nvar _loggingEnabled = false\nvar _log = function(...args) {\n  if (_loggingEnabled) {\n    console.log(\"ComponentLoader \",...args)\n  }\n}\n\nvar _timeEnabled = false\nvar _timeLog = function(name, msg, ...args) {\n  if (_timeEnabled) {\n    console.log(\"[component] \" + name + \" \" + Math.round(performance.now() - ComponentLoader.templateFirstLoadTimes[name]) +\"ms \"+ msg, ...args)\n  }\n}\n\n// for compatibility\nexport function register(componentName, template, prototype) {\n  return ComponentLoader.register(componentName, template, prototype);\n}\n\n/* #FutureWork should interactive state change of \"(module) global\" state be preserved while reloading / developing modules\n    ComponentLoader.foo = 3\n    ComponentLoader.foo\n\n#Discussion\n\npro) expected in Smalltalk-like developent and live-programmning experience\ncontra) gap between development-time and runtime (those manualy changes could make something work that without it won't...)\n\nsynthese) if modules and classes are also objects that can have run-time-specific state they should be migrated the same as objects. \n\n*/\n\n\n\nexport default class ComponentLoader {\n\n  static load() {\n    this._def(\"templates\", {});\n    this._def(\"prototypes\", {});\n    this._def(\"proxies\", {});\n    this._def(\"templatePathsCache\", {});\n    this._def(\"templatePathsCacheTime\", {});\n    this._def(\"templateFirstLoadTimes\", {}); \n  }\n  \n  static globalObject() {\n    window.lively4components = window.lively4components || {}\n    return window.lively4components\n  }\n  \n  static _def(name, init) {\n      Object.defineProperty(this, name, {\n        get() {\n          // Since, we want to keep state accross module reloading.... #PreserveState\n          var obj = this.globalObject()\n          if (!obj[name]) obj[name] = init;\n          return obj[name];\n        },\n        set(value) {\n          var obj = this.globalObject()\n          if (!obj[name]) obj[name] = value;\n        },\n        enumerable: true,\n        configurable: true\n      });\n  }\n\n  static updatePrototype(aClass, moduleName) {    \n    var componentName = moduleName.replace(/.*\\//,\"\").replace(/\\.js$/,\"\")\n    if (componentName && this.prototypes[componentName]) {\n      this.prototypes[componentName] = aClass\n      this.proxies[componentName].__proto__ = aClass\n      this.proxies[componentName].prototype.__proto__ = aClass.prototype\n    }\n  }\n\n  static async onCreatedCallback(object, componentName) {\n    _log('onCreatedCallback ' + componentName)\n      \n    // attach lively4scripts from the shadow root to this\n    if (this.shadowRoot)\n      scriptManager.attachScriptsFromShadowDOM(object);\n    \n    // attach lively4script from the instance\n    scriptManager.findLively4Script(object, false);\n\n    if (ComponentLoader.prototypes[componentName].createdCallback) {\n      ComponentLoader.prototypes[componentName].createdCallback.call(object);\n    }\n\n    // load any unknown elements, which this component might introduce\n    _log('START onCreatedCallback loadUnresolved ' + componentName)\n            \n    this._livelyLoading = Promise.resolve()\n    this._livelyLoadingDep =  ComponentLoader.loadUnresolved(\n        object, true, \"onCreated \" + componentName, false).then((args) => {\n      _log('FINISHED onCreatedCallback loadUnresolved ' + componentName)\n\n      // lively.fillTemplateStyles(object.shadowRoot, \"source: \" + componentName).then(() => {\n        // call the initialize script, if it exists\n      \n        if (typeof object.initialize === \"function\") {\n          object.initialize();\n        }\n        _log(\"dispatch created \" +componentName )\n        _log(\"Identitity: \" + (window.LastRegistered === object))\n        \n      // })\n      if (this.templateFirstLoadTimes[componentName]) {\n        _log('Component first load time: ' + ((performance.now() - this.templateFirstLoadTimes[componentName]) / 1000).toFixed(3) + \"s \" + componentName + \" \")\n        this.templateFirstLoadTimes[componentName] = null;\n      }\n      _log(\"[component loader] fire created \" + componentName)\n      object._lively4created = Date.now()\n      object.dispatchEvent(new Event(\"created\")); // when we wait on other unresolved components, we can run into cyclic dependencies.... #Cyclic\n    }).catch( e => {\n      console.error(e); \n      return e\n    });\n    this._livelyLoadingDep\n  }\n  \n  static async onAttachedCallback(object, componentName) {\n    \n    if (this._livelyLoading) {\n      await this._livelyLoading // should we provicde this robustness here? Or should these be more pure metal...\n    }\n    \n    _log(\"onAttachedCallback \" + componentName)\n    \n    if (object.attachedCallback && \n      ComponentLoader.proxies[componentName].attachedCallback != object.attachedCallback) {\n        object.attachedCallback.call(object);\n    } else if (ComponentLoader.prototypes[componentName].attachedCallback) {\n      ComponentLoader.prototypes[componentName].attachedCallback.call(object);\n    }\n  }\n  \n  static async onDetachedCallback(object, componentName) {\n    \n    if (this._livelyLoading) {\n      await this._livelyLoading\n    }\n    \n    if (object.detachedCallback \n    && ComponentLoader.proxies[componentName].detachedCallback != object.detachedCallback) {\n      object.detachedCallback.call(object);\n    } else if (ComponentLoader.prototypes[componentName].detachedCallback) {\n      ComponentLoader.prototypes[componentName].detachedCallback.call(object);\n    }\n  }\n  \n  static applyTemplate(element, componentName) {\n    var template = this.templates[componentName]\n    return this.applyTemplateElement(element, template) \n  }\n\n  static applyTemplateElement(element,template) {\n    if (template) {\n      if (!element.shadowRoot) {\n        element.attachShadow({mode: 'open'});\n      }      \n      var fragment = template.cloneNode(true)\n      fragment.childNodes.forEach(ea => {\n        var clone = document.importNode(ea, true)\n        // #OriginTracking: attach meta infos here\n        element.shadowRoot.appendChild(clone)\n      })\n    }\n  }\n\n  // this function registers a custom element,\n  // it is called from the bootstap code in the component templates\n  static async register(componentName, template, aClass, componentUrl) { \n    _log(\"[component loader] register \" + componentName)\n    var proxy\n    \n    // For reflection and debugging\n    this.templates[componentName] = template;\n    this.prototypes[componentName] = aClass;\n    \n    if (template) {\n      _log(\"[component loader] register fillTemplateStyles: \" + componentName)\n      await lively.fillTemplateStyles(template, \"source: \" + componentName, componentUrl)\n    }\n    \n    if (!this.proxies[componentName]) {\n      proxy = class extends HTMLElement {\n        static get name() {\n          return componentName\n        } \n        \n        get _lively4version() {\n          return 2\n        }\n        \n        constructor() {\n          _log(\"[component loader] Proxy Constructor \" + componentName)\n    \n          super(); // always call super() first in the constructor.\n          \n          ComponentLoader.applyTemplate(this, componentName)\n          ComponentLoader.onCreatedCallback(this, componentName)\n        }\n\n        connectedCallback( args) {\n          _log('connectedCallback ' + componentName )\n          \n          \n          // return super.connectedCallback(...args)\n          // super seams to bind early?\n          ComponentLoader.onAttachedCallback(this, componentName)\n          if (this.constructor.__proto__.prototype.connectedCallback) {\n            return this.constructor.__proto__.prototype.connectedCallback.apply(this, args)\n          }\n        }\n        disconnectedCallback(...args) {\n          _log('diconnectedCallback ' + componentName )\n          \n          // return super.disconnectedCallback(...args)\n          ComponentLoader.onDetachedCallback(this, componentName)\n          if (this.constructor.__proto__.prototype.disconnectedCallback) {\n            return this.constructor.__proto__.prototype.disconnectedCallback.apply(this, args)\n          }\n        }\n\n        adoptedCallback(...args)\t{\n          _log('adoptedCallback ' + componentName )\n          // return super.adoptedCallback(...args)\n          if (this.constructor.__proto__.prototype.adoptedCallback) {\n            return this.constructor.__proto__.prototype.adoptedCallback.apply(this, args)  \n          }\n        }\n      }\n      // set the prototype of the proxy the first time\n      // #Idea: use \"extemds aClass\" ?\n      //       proxy.__proto__ = aClass\n      //       proxy.prototype.__proto__ = aClass.prototype\n      \n      _log(\"[component loader] define component: \" + componentName)\n      window.customElements.define(componentName, proxy); // #WebComponent #Magic\n      this.proxies[componentName] =  proxy\n    } else {\n      proxy = this.proxies[componentName] \n      \n    }\n    \n    // change the prototype of the proxy\n    proxy.__proto__ = aClass\n    proxy.prototype.__proto__ = aClass.prototype\n  }\n\n  // this function loads all unregistered elements, starts looking in lookupRoot,\n  // if lookupRoot is not set, it looks in the whole document.body,\n  // if deep is set, it also looks into shadow roots\n  static loadUnresolved(lookupRoot, deep, debuggingHint, withChildren=false, withyourself=false) {\n    lookupRoot = lookupRoot || document.body;\n\n    var selector = \":not(:defined)\";\n    var unresolved = []\n    \n    // check if lookupRoot is unresolved\n    \n    // loot at me\n    if (withyourself && lookupRoot.parentElement) {\n      var unresolvedSiblingsAndMe = Array.from(lookupRoot.parentElement.querySelectorAll(selector));\n      if (unresolvedSiblingsAndMe.includes(lookupRoot)) {\n        unresolved.push(lookupRoot)\n      }\n    }\n    // find all unresolved elements looking downwards from lookupRoot\n    \n    // look at my children? \n    if (withChildren) {\n      unresolved = unresolved.concat(Array.from(lookupRoot.querySelectorAll(selector)));\n    }\n    \n    // look into the shadow?\n    if (deep) {\n      var deepUnresolved = findUnresolvedDeep(lookupRoot);\n      unresolved = unresolved.concat(deepUnresolved);\n    }\n\n    function findUnresolvedDeep(root) {\n      var shadow = root.shadowRoot;\n      if (!shadow) {\n        return [];\n      }\n\n      var result = Array.from(shadow.querySelectorAll(selector));\n\n      Array.from(shadow.children).forEach((child) => {\n        result = result.concat(findUnresolvedDeep(child));\n      });\n\n      return result;\n    }\n\n    // helper set to filter for unique tags\n    var unique = new Set();\n    \n    \n    var __debugOpenPromisedComponents = new Set()\n    \n    var promises = unresolved.filter((el) => {\n      // filter for unique tag names\n      if (!el.nodeName || el.nodeName.toLowerCase() == \"undefined\") return false;\n      var name = el.nodeName.toLowerCase();\n      return !unique.has(name) && unique.add(name);\n    })\n    .map((el) => {\n      var name = el.nodeName.toLowerCase();\n      return this.ensureLoadByName(name, __debugOpenPromisedComponents, el)\n    })\n    .filter(promise => promise != null);\n    \n    _log(\"findUnresolvedDeep components: \", promises)\n\n    // return a promise that resolves once all unresolved elements from the unresolved-array\n    // are completely created\n    return new Promise( (resolve, reject) => {\n      \n      // fuck promises!!!! I hate them. There is one promise pending.... but just does not fail. It just hangs around doing nothing! #Jens\n      promises.forEach( p => {\n        p.then( r => {\n          p.finished = true;\n        }, er => console.log(\"ERROR in promise: \" + p.name))\n        \n      })\n      window.setTimeout( function() {\n        var unfinished = false;\n        var unfinishedPromise;\n        promises.forEach( p => {\n          if (!p.finished) {\n            unfinishedPromise = p\n            unfinished = true;\n          }\n        })\n        if (unfinished) {\n          resolve(\"timeout\") // \"(if) the fuel gauge breaks, call maintenance. If they are not there in 20 minutes, fuck it.\"\n          console.warn(\"Timout due to unresolved promises, while loading \" + unfinishedPromise.name + \" context: \" + debuggingHint, \" unresolved: \" + Array.from(__debugOpenPromisedComponents).join(\", \") )\n        }\n      }, 20 * 1000)\n\n      Promise.all(promises).then( result => resolve(), err => {\n          _log(\"ERROR loading component \", err)\n      })\n    })\n  }\n  \n  static ensureLoadByName(name, __debugOpenPromisedComponents=new Set(), el) {\n     if (loadingPromises[name]) {\n        console.log(\"EARLY ensureLoadByName... \" + name)\n        // the loading was already triggered\n        return loadingPromises[name];\n      }\n\n      __debugOpenPromisedComponents.add(name)\n      // create a promise that resolves once el is completely created\n      var createdPromise = new Promise((resolve, reject) => {\n        if (el) {\n          if (el._lively4created) {\n            return resolve({target: el})\n          }\n          el.addEventListener(\"created\", (evt) => {\n            evt.stopPropagation();\n            __debugOpenPromisedComponents.delete(name)\n            resolve(evt);\n          });          \n        }\n      });\n\n      // trigger loading the template of the unresolved element\n      loadingPromises[name] = createdPromise;\n      \n      loadingPromises[name].name = \"[Loaded \" +name + \" \" + Date.now() + \"]\"\n      \n      this.loadByName(name).then((didInsertTag) => {\n        if(!didInsertTag) {\n          console.error(\"Component Loader\", `Template ${name} could not be loaded.`, 3, null, \"yellow\");\n          delete loadingPromises[name];\n          return null;\n        }\n      })\n      console.log(\"FINISHE ensureLoadByName... \" + name)\n      return createdPromise;\n  }\n  \n  \n  static resetTemplatePathCache() {\n    this.templatePaths = undefined\n    this.templatePathsCache = undefined\n    this.templatePathsCacheTime = undefined\n  }\n\n  static async getTemplatePathContent(path) {\n    \n   \n    \n    let cacheInvalidationTime = 60 * 5 * 1000;\n    let cached = this.templatePathsCache[path]\n    let time = this.templatePathsCacheTime[path]\n    if (cached && ((Date.now() - time) < cacheInvalidationTime)) return cached\n    \n    let resultPromise =  fetch(path, { method: 'OPTIONS' }).then(resp => {\n      if (resp.status !== 200) return undefined\n      return resp.json()\n    });\n    this.templatePathsCacheTime[path] = Date.now()\n    this.templatePathsCache[path] = new Promise(async (resolve, reject) => {\n      let result = await resultPromise;\n      if (result) {\n          resolve({contents: result.contents});\n        return cached \n      }\n    })\n    return resultPromise \n  }\n  \n  static getTemplatePaths() {\n    if (!this.templatePaths) {\n      const defaultPaths = [ // default\n        lively4url + '/templates/',\n        lively4url + '/src/components/',\n        lively4url + '/src/components/widgets/',\n        lively4url + '/src/components/tools/',\n        lively4url + '/src/components/halo/',\n        lively4url + '/src/components/demo/',\n        lively4url + '/src/components/draft/',\n        lively4url + '/src/components/d3/',\n        lively4url + '/src/client/vivide/components/',\n        lively4url + '/src/client/reactive/components/rewritten/',\n        lively4url + '/src/client/reactive/components/basic/',\n        lively4url + '/src/client/triples/components/',\n        lively4url + '/src/client/pen-editor/components/',\n        lively4url + '/src/babylonian-programming-editor/',\n        lively4url + '/src/babylonian-programming-editor/demos/canvas/',\n        lively4url + '/src/babylonian-programming-editor/demos/todo/',\n        lively4url + '/src/client/reactive/components/rewritten/conduit/src/components/',\n        lively4url + '/src/client/reactive/components/rewritten/conduit/rpComponents/',\n      ];\n\n      const customPaths = this.persistentCustomTemplatePaths\n        .map(path => path.startsWith('/') ? lively4url + path : path);\n\n      this.templatePaths = defaultPaths.concat(customPaths); \n    } \n    return this.templatePaths;\n  }\n\n  /*MD ### PersistentCustomPaths MD*/\n  static get persistentCustomTemplatePaths() {\n    return JSON.parse(localStorage.lively4customTemplatePaths || '[]')\n  }\n\n  static set persistentCustomTemplatePaths(paths) {\n    localStorage.lively4customTemplatePaths = JSON.stringify(paths);\n    this.resetTemplatePathCache();\n  }\n\n  static addPersistentCustomTemplatePath(path) {\n    const customPaths = this.persistentCustomTemplatePaths;\n\n    if (!customPaths.includes(path)) {\n      customPaths.push(path);\n      this.persistentCustomTemplatePaths = customPaths;\n    }\n  }\n\n  static removePersistentCustomTemplatePath(path) {\n    const customPaths = this.persistentCustomTemplatePaths;\n\n    const index = customPaths.indexOf(path);\n    if (index > -1) {\n      customPaths.splice(index, 1);\n      this.persistentCustomTemplatePaths = customPaths;\n    }\n  }\n\n  static async searchTemplateFilename(filename) {\n    \n    var templatePaths =  this.getTemplatePaths()\n    let templateDir = undefined;          \n  \n    // #IDEA, using HTTP HEAD could be faster, but is not always implemented... as ource OPTIONS is neigher\n    // this method avoids the 404 in the console.log\n    \n    // the OPTIONS request seems to break karma... waits to long..\n    if (!window.__karma__) { \n      for(templateDir of templatePaths) {\n        try {\n          var stats = await this.getTemplatePathContent(templateDir);\n          var found = stats.contents.find(ea => ea.name == filename)\n        } catch(e) {\n          _log(\"searchTemplateFilename: could not get stats of  \" + filename + \" ERROR: \", e)\n          found = null\n        }\n        if (found) {\n          return templateDir + filename\n        }\n      }\n\n    } else {\n      // so the server did not understand OPTIONS, so lets ask for the files directly\n      if (!found) {\n        for(templateDir of templatePaths) {\n          found = await fetch(templateDir + filename, { method: 'GET' }) // #TODO use HEAD, after implementing it in lively4-server\n            .then(resp => resp.status == 200); \n          if (found) {\n            return templateDir + filename\n          }  \n        } \n      }      \n    }\n    return undefined\n  }\n  \n  // #TODO use loadingPromises here... #Issue, as we used it in livley.js directly, we loaded lively-window in parralel... \n  static async loadByName(name) {\n    _log(\"[component loader] loadByName \" + name)\n    \n    this.templateFirstLoadTimes[name] = performance.now()\n    var modUrl = await this.searchTemplateFilename(name + '.js')\n    if (!modUrl) {\n      throw new Error(\"Could not find template for \" + name)\n    }\n    _timeLog(name, \" found module filename\")\n    \n    // #OriginTracking: get source code information here\n    var templateURL = await this.searchTemplateFilename(name + '.html')\n    _timeLog(name, \" found template filename\")\n    \n    // Check  if the template will be loadable (this would e.g. fail if we were offline without cache)\n    // We have to check this before inserting the link tag because otherwise we will have\n    // the link tag even though the template was not properly loaded\n    try {\n      if(files.exists(modUrl)) {\n        _timeLog(name, \"module exists\")\n        var mod = await System.import(modUrl)\n        _timeLog(name, \"module loaded\")\n        var aClass = mod.default\n        \n        if (templateURL) {\n          if(files.exists(templateURL)) {\n            _timeLog(name, \"template exits\")\n            var templateSource = await fetch(templateURL).then(r => r.text());\n            _timeLog(name, \"template loaded\")\n            var div = document.createElement(\"div\")\n            div.innerHTML = templateSource\n            var template = div.querySelector(\"template\")\n            template.remove()\n          }          \n        }\n        this.register(name, template && template.content, aClass, templateURL)\n        _timeLog(name, \"registered\")\n        return true;\n      } else {\n        return false;\n      }\n    } catch (error) {\n      return false;\n    }\n  }\n  \n  // #TODO refactor this to use lively.create(), because this is not enough... \n  static createComponent(tagString) {\n    var comp = document.createElement(tagString);\n    return comp;\n  }\n  \n  static openIn(parent, component, beginning) {\n    var created = false;\n    var compPromise = new Promise((resolve) => {\n      if (component._lively4created ) return resolve(component)\n      \n      component.addEventListener(\"created\", (e) => {\n        if (e.composedPath()[0] !== component) {\n          _log(\"[components] ingnore and stop created event from child \" + e.composedPath[0].tagName);\n          return \n        }\n        if (created) {\n          // #Just check... we had this issue before\n          throw new Error(\"[compontents] created called twice for \" + component)\n        } else {\n          created = true\n          e.stopPropagation();\n          resolve(e.target);\n        }\n        \n      });\n    });\n\n    if (beginning) {\n      parent.insertBefore(component, parent.firstChild);\n    } else {\n      parent.appendChild(component);\n    }\n    this.loadUnresolved(component, true, \"openIn \" + component, true, true);\n    return compPromise;\n  }\n\n  static openInBody(component) {\n    return this.openIn(document.body, component, true);\n  }\n\n  static async openInWindow(component, pos) {\n    // this will call the window's createdCallback before\n    // we append the child, if the window template is already\n    // loaded\n    var w = this.createComponent(\"lively-window\");\n    if (pos) {\n      lively.setPosition(w, pos);\n    }\n    w.style.opacity = 0.2\n    w.appendChild(component);\n\n    this.openInBody(w);\n\n    if (!component.localName.match(/-/)) {\n      return w // standard elments... which are no components\n    }\n    \n    // therefore, we need to call loadUnresolved again after\n    // adding the child, so that it finds it and resolves it,\n    // if it is currently unresolved\n    var windowPromise = new Promise((resolve) => {\n      this.loadUnresolved(document.body, true, \"openInWindow \" + component).then(() => {\n        w.style.opacity = 1.0\n        this.ensureWindowTitle(component, w)\n\n        resolve(w);\n      });\n    });\n\n    return windowPromise;\n  }\n  \n  static ensureWindowTitle(component, w) {\n    if (component.windowTitle) {\n      w.setAttribute('title', '' + component.windowTitle);\n    }\n  }  \n\n  static reloadComponent(source, url) {\n    var template = lively.html.parseHTML(source).find(ea => ea.localName == \"template\");\n    if (!template) return;\n    var name = template.id;\n    if (!name) return;\n    var templateClone = document.importNode(template.content, true);\n    ComponentLoader.templates[name] = templateClone;\n    \n    return lively.fillTemplateStyles(templateClone, \"source: \" + name, url).then( () => name);\n  }\n  \n}\n\nComponentLoader.load()\nComponentLoader.resetTemplatePathCache()\n"]}