{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/templates/knot-input.js"],"names":["Morph","Graph","applyDragCSSClass","KnotInput","listSelector","input","get","list","label","initialize","windowTitle","addEventListener","event","keyCode","dispatchEvent","CustomEvent","detail","getValue","evt","dataTransfer","types","includes","stopPropagation","preventDefault","setValue","getData","focus","prepareDatalist","graph","getInstance","getKnots","forEach","knot","option","document","createElement","innerHTML","value","url","dataset","appendChild","getURLString","URL","e","lively","notify","isExternalURL","Error","setLabel","text","setPlaceholder","setAttribute","urlString","livelyExample"],"mappings":"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","file":"knot-input.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\n\nimport { Graph } from 'src/client/triples/triples.js';\nimport { applyDragCSSClass } from 'src/client/draganddrop.js';\n\nexport default class KnotInput extends Morph {\n  get listSelector() { return '#list'}\n  get input() { return this.get('#input'); }\n  get list() { return this.get(this.listSelector); }\n  get label() { return this.get('#label'); }\n\n  async initialize() {\n    this.windowTitle = \"Knot Input\";\n\n    this.input.addEventListener('keyup',  event => {\n      if (event.keyCode == 13) { // ENTER\n        this.dispatchEvent(new CustomEvent('enter-knot', { detail: this.getValue() }));\n      }\n    });\n    \n    this.input::applyDragCSSClass();\n    this.input.addEventListener('drop', evt => {\n      if(evt.dataTransfer.types.includes(\"knot/url\")) {\n        evt.stopPropagation();\n        evt.preventDefault();\n        \n        this.setValue(evt.dataTransfer.getData(\"knot/url\"));\n        this.focus();\n      }\n    });\n    \n    await this.prepareDatalist();\n  }\n  \n  async prepareDatalist() {\n    let graph = await Graph.getInstance();\n\n    graph.getKnots().forEach(knot => {\n      let option = document.createElement('option');\n      \n      option.innerHTML = knot.label();\n      option.value = knot.url;\n      option.dataset.url = knot.url;\n      \n      this.list.appendChild(option);\n    });\n  }\n  \n  // https://derickbailey.com/2016/03/23/get-a-data-attribute-value-from-the-selected-datalist-option/\n  getURLString() {\n    var value = this.input.value;\n    let url;\n    // TODO: check for empty value ('')\n    // TODO: value could be a literal or a url\n    \n    // check if value is a URL\n    try {\n      url = new URL(value);\n    } catch(e) {\n      lively.notify(value + ' is no URL');\n      throw e;\n    }\n\n    // check if url is known\n    var option = this.get(`${this.listSelector} [value='${value}']`);\n    if(option) {\n      // known URL\n      return option.dataset.url;\n    } else {\n      // check for external url\n      return value;\n      if(Graph.isExternalURL(url)) {\n        \n      } else {\n        \n      }\n      throw new Error(`${value} is an external URL. Thus, it probably does not support 'Access-Control-Allow-Origin' header and/or https.`);\n    }\n  }\n  getValue() { return this.input.value; }\n  \n  setLabel(text) { this.label.innerHTML = text; }\n  setPlaceholder(text) { this.input.setAttribute('placeholder', text); }\n  setValue(urlString) { this.input.value = urlString; }\n\n  focus() { this.get('#input').focus(); }\n  \n  livelyExample() {\n    this.setLabel(\"some knot:\");\n    this.setPlaceholder(\"knot url\");\n  }\n}"]}