{"version":3,"names":["Morph","HTMLElement","connectedCallback","get","selector","getSubmorph","morph","querySelector","shadowRoot","setWindowSize","width","height","parentElement","style","windowTitle","string","_windowTitle","tagName","titleSpan","setAttribute","updateTabTitle","windowIcon","_windowIcon","getAllSubmorphs","morphs","Array","from","querySelectorAll","concat","filter","m","withAttributeDo","name","func","value","getAttribute","undefined","registerButtons","forEach","node","id","funcName","camelCase","replace","c","toUpperCase","addEventListener","evt","Function","alert","registerSignalEnter","rootElement","domain","lively","removeEventListener","code","target","dispatchEvent","CustomEvent","detail","registerAttributes","list","registerAttribute","Object","defineProperty","set","newValue","enumerable","configurable","toString","constructor","followURLonClick","element","url","window","getSelection","length","openBrowser","livelyUpdateStrategy"],"sources":["lively-morph.js"],"sourcesContent":["/*\n * Morph is a HtmlElement replacement with some API enhanncements\n */\n \n\n// #TODO all custom elements have to inherit from HTMLElement\nexport default class Morph extends HTMLElement {\n  /* \n   * Access subelments by name\n   * shortcut for querySelector and shadowRoot.querySelector t\n   * #FeatureIdea -- In Livel3, it could it also be used to look for owners and siblings  \n   */ \n  connectedCallback() {\n    // console.log('connected');\n  }\n  \n  get(selector) {\n    return this.getSubmorph(selector);\n  }\n\n  // #Depricated, please use either \"get\" or \"querySelector\" directly\n  getSubmorph(selector) {\n    var morph = this.querySelector(selector);\n    if (!morph && this.shadowRoot) {\n      morph = this.shadowRoot.querySelector(selector);\n    }\n    return morph;\n  }\n  \n  setWindowSize(width, height) {\n    this.parentElement.style[\"width\"] = width + \"px\";\n    this.parentElement.style[\"height\"] = height + \"px\";\n  }\n\n  set windowTitle(string) {\n    this._windowTitle = string;\n    \n    if (this.parentElement) {\n      if (this.parentElement.tagName === \"LIVELY-WINDOW\") {\n        // #TODO replace with connections\n        if (this.parentElement.titleSpan) { // check for window?\n          this.parentElement.setAttribute(\"title\", string);\n        }\n      } else if (this.parentElement.tagName === \"LIVELY-TABS-WRAPPER\") {\n        this.parentElement.updateTabTitle(string, this);\n      }\n    }\n\n    \n\n  }\n  \n  get windowTitle(){\n    return this._windowTitle;\n  }\n\n  set windowIcon(string){\n    this._windowIcon = string;\n    // #TODO replace with connections\n    \n    if (this.parentElement && this.parentElement.titleSpan) { // check for window?\n      this.parentElement.setAttribute(\"icon\", string);\n    }\n  }\n  \n  get windowIcon(){\n    return this._windowIcon;\n  }\n\n  getAllSubmorphs(selector) {\n    var morphs = Array.from(this.querySelectorAll(selector));\n    if (this.shadowRoot) {\n      morphs = morphs.concat(Array.from(this.shadowRoot.querySelectorAll(selector)));\n    }\n    \n    // morphs can contain null, if either none was found in this or this.shadowRoot\n    return morphs.filter(m => m);\n  }\n  \n  withAttributeDo(name, func) {\n    var value = this.getAttribute(name) \n    if (value !== undefined && value !== null) {\n      func(value)\n    }\n  }\n\n  registerButtons() {\n    // Just an experiment for having to write less code.... which ended up in having more code here ;-) #Jens\n    Array.from(this.shadowRoot.querySelectorAll('button')).forEach(node => {\n      var name = node.id;\n      var funcName = name.camelCase().replace(/^./, c => 'on'+ c.toUpperCase());\n      // console.log('register button ' + name)\n      node.addEventListener(\"click\", evt => {\n        if (this[funcName] instanceof Function) {\n          this[funcName](evt);\n        } else {\n          alert('No callback: ' +  funcName);\n        }\n      });\n    });\n  }\n  \n  /* \n    catches all enter keyup events and syntesizes a new enter event! \n  */\n  registerSignalEnter(rootElement = this) {\n    var domain = \"singnal-enter\"\n    lively.removeEventListener(domain, rootElement) // just in case...\n    lively.addEventListener(domain, rootElement, \"keyup\", evt => {\n      if(evt.code == \"Enter\") { \n        evt.target.dispatchEvent(new CustomEvent(\"enter-pressed\", { detail: evt })) \n      }  \n    })\n  }\n  \n  registerAttributes(list) {\n    for(let name of list) {\n      this.registerAttribute(name)\n    }\n  }\n  \n  registerAttribute(name) {\n    Object.defineProperty(this, name, {\n      get() { \n        return this.getAttribute(name); \n      },\n      set(newValue) { \n        this.setAttribute(name, newValue)\n      },\n      enumerable: true,\n      configurable: true\n    });\n  }\n\n  \n  \n  toString() {\n    return \"[\" + this.constructor.name + \"]\"\n  }\n  \n  followURLonClick(element, url) {\n    lively.removeEventListener(\"followurl\", element, \"click\")\n    lively.addEventListener(\"followurl\", element, \"click\", (evt) => {\n      // distinguish between clicking and selecting text\n      if(window.getSelection().toString().length == 0) {\n        lively.openBrowser(url)\n       }\n    })\n  }\n  \n  \n  // another option is 'inplace'\n  get livelyUpdateStrategy() { return 'migrate'; }\n}\n"],"mappings":"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"}