{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/components/widgets/lively-morph.js"],"names":["Morph","HTMLElement","connectedCallback","get","selector","getSubmorph","morph","querySelector","shadowRoot","windowTitle","string","_windowTitle","parentElement","titleSpan","setAttribute","windowIcon","_windowIcon","getAllSubmorphs","morphs","Array","from","querySelectorAll","concat","filter","m","withAttributeDo","name","func","value","getAttribute","undefined","registerButtons","forEach","node","id","funcName","replace","c","toUpperCase","addEventListener","evt","Function","alert","toString","constructor","livelyUpdateStrategy"],"mappings":";;;;;;;;AAAA;;;;AAKA;AACe,YAAMA,KAAN,SAAoBC,WAApB,CAAgC;AAC7C;;;;;AAKAC,4BAAoB;AAClB;AACD;;AAEDC,YAAIC,QAAJ,EAAc;AACZ,iBAAO,KAAKC,WAAL,CAAiBD,QAAjB,CAAP;AACD;;AAGD;AACAC,oBAAYD,QAAZ,EAAsB;AACpB,cAAIE,QAAQ,KAAKC,aAAL,CAAmBH,QAAnB,CAAZ;AACA,cAAI,CAACE,KAAD,IAAU,KAAKE,UAAnB,EAA+B;AAC7BF,oBAAQ,KAAKE,UAAL,CAAgBD,aAAhB,CAA8BH,QAA9B,CAAR;AACD;AACD,iBAAOE,KAAP;AACD;;AAED,YAAIG,WAAJ,CAAgBC,MAAhB,EAAuB;AACrB,eAAKC,YAAL,GAAoBD,MAApB;AACA;AACA,cAAI,KAAKE,aAAL,IAAsB,KAAKA,aAAL,CAAmBC,SAA7C,EAAwD;AAAE;AACxD,iBAAKD,aAAL,CAAmBE,YAAnB,CAAgC,OAAhC,EAAyCJ,MAAzC;AACD;AACF;;AAED,YAAID,WAAJ,GAAiB;AACf,iBAAO,KAAKE,YAAZ;AACD;;AAED,YAAII,UAAJ,CAAeL,MAAf,EAAsB;AACpB,eAAKM,WAAL,GAAmBN,MAAnB;AACA;AACA,cAAI,KAAKE,aAAL,IAAsB,KAAKA,aAAL,CAAmBC,SAA7C,EAAwD;AAAE;AACxD,iBAAKD,aAAL,CAAmBE,YAAnB,CAAgC,MAAhC,EAAwCJ,MAAxC;AACD;AACF;;AAED,YAAIK,UAAJ,GAAgB;AACd,iBAAO,KAAKC,WAAZ;AACD;;AAEDC,wBAAgBb,QAAhB,EAA0B;AACxB,cAAIc,SAASC,MAAMC,IAAN,CAAW,KAAKC,gBAAL,CAAsBjB,QAAtB,CAAX,CAAb;AACA,cAAI,KAAKI,UAAT,EAAqB;AACnBU,qBAASA,OAAOI,MAAP,CAAcH,MAAMC,IAAN,CAAW,KAAKZ,UAAL,CAAgBa,gBAAhB,CAAiCjB,QAAjC,CAAX,CAAd,CAAT;AACD;;AAED;AACA,iBAAOc,OAAOK,MAAP,CAAcC,KAAKA,CAAnB,CAAP;AACD;;AAEDC,wBAAgBC,IAAhB,EAAsBC,IAAtB,EAA4B;AAC1B,cAAIC,QAAQ,KAAKC,YAAL,CAAkBH,IAAlB,CAAZ;AACA,cAAIE,UAAUE,SAAV,IAAuBF,UAAU,IAArC,EAA2C;AACzCD,iBAAKC,KAAL;AACD;AACF;;AAEDG,0BAAkB;AAChB;AACAZ,gBAAMC,IAAN,CAAW,KAAKZ,UAAL,CAAgBa,gBAAhB,CAAiC,QAAjC,CAAX,EAAuDW,OAAvD,CAA+DC,QAAQ;AACrE,gBAAIP,OAAOO,KAAKC,EAAhB;AACA,gBAAIC,WAAWT,KAAKU,OAAL,CAAa,IAAb,EAAmBC,KAAK,OAAMA,EAAEC,WAAF,EAA9B,CAAf;AACA;AACAL,iBAAKM,gBAAL,CAAsB,OAAtB,EAA+BC,OAAO;AACpC,kBAAI,KAAKL,QAAL,aAA0BM,QAA9B,EAAwC;AACtC,qBAAKN,QAAL,EAAeK,GAAf;AACD,eAFD,MAEO;AACLE,sBAAM,kBAAmBP,QAAzB;AACD;AACF,aAND;AAOD,WAXD;AAYD;;AAEDQ,mBAAW;AACT,iBAAO,MAAM,KAAKC,WAAL,CAAiBlB,IAAvB,GAA8B,GAArC;AACD;;AAED;AACA,YAAImB,oBAAJ,GAA2B;AAAE,iBAAO,SAAP;AAAmB;AAtFH;;yBAA1B7C,K","file":"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  \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  set windowTitle(string){\n    this._windowTitle = string;\n    // #TODO replace with connections\n    if (this.parentElement && this.parentElement.titleSpan) { // check for window?\n      this.parentElement.setAttribute(\"title\", string);\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    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.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  toString() {\n    return \"[\" + this.constructor.name + \"]\"\n  }\n  \n  // another option is 'inplace'\n  get livelyUpdateStrategy() { return 'migrate'; }\n}\n"]}