{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-augment/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","attachShadow","mode","fragment","cloneNode","childNodes","forEach","ea","clone","document","importNode","appendChild","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","createdPromise","reject","target","addEventListener","evt","stopPropagation","delete","loadByName","didInsertTag","promise","p","r","finished","er","setTimeout","unfinished","unfinishedPromise","warn","join","all","err","resetTemplatePathCache","templatePathsCache","undefined","templatePathsCacheTime","getTemplatePathContent","path","cacheInvalidationTime","cached","time","resultPromise","fetch","method","resp","status","json","contents","getTemplatePaths","templatePaths","lively4url","addTemplatePath","isURL","location","href","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","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(\"templatePaths\");\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    if (template) {\n      if (!element.shadowRoot) {\n        element.attachShadow({mode: 'open'});\n      }\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) { \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)\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      if (loadingPromises[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._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      // 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      \n\n      return createdPromise;\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  \n  static resetTemplatePathCache() {\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      this.templatePaths = [\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      ]; // default\n    } \n    return this.templatePaths\n  }\n\n  static addTemplatePath(path) {\n    if (!lively.files.isURL(path)) {\n      path = lively.location.href.replace(/[^/]*$/, path)\n    }\n    var all = this.getTemplatePaths()\n    if (!all.includes(path)) {\n      all.push(path)\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)\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) {\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).then( () => name);\n  }\n  \n}\nComponentLoader.load()\n\n\nComponentLoader.templatePathsCache = null\n\n"]}