{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/src/components/draft/lively-object-editor.js"],"names":["Morph","generateUUID","uuid","scriptManager","ObjectEditor","initialize","codeEditor","shadowRoot","querySelector","doSave","text","onSave","attachedCallback","attached","saveElementReferences","addElementEvents","detachedCallback","targetElement","releaseTarget","attributeChangedCallback","attrName","oldValue","newValue","selector","element","document","substr","propertyList","get","editor","addEventListener","e","listChanged","addButtonClicked","removeButtonClicked","runButtonClicked","initializeAttributes","i","attributes","length","attribute","name","value","_targetElement","val","render","__scripts__","dataset","setAttribute","createObservers","doitContext","destroyObservers","destroyUUID","domObserver","disconnect","scriptsObserver","changes","updateScripts","livelyId","expectedTargetCount","querySelectorAll","updateList","setWindowTitle","parentElement","tagName","windowElement","title","id","toLowerCase","showAttributes","map","saveAttribute","data","source","attributeName","attributeChanged","detail","key","showProperties","editableProperties","type","readonly","Object","keys","forEach","ea","match","propType","push","properties","property","propertiesMap","propertyChanged","addPropertyButtonClicked","propertyName","window","prompt","propertyValue","addAttributeButtonClicked","attributeValue","showConnections","__connections__","values","conn","connectionList","innerHTML","addConnectionButtonClicked","eventName","scriptName","alert","target","listener","removeConnectionButtonClicked","selectedIndex","removedConnection","removeEventListener","splice","setSelection","line","ch","focus","addEmptyScript","addScript","funcOrString","selectLeaf","activeLeaf","removeScript","isScriptData","isAttributeData","hideErrorBorder","style","border","showErrorBorder","m","lively","notify","saveScript","functionObj","eval","showError","updateScript","func","apply","editorKeyDown","metaKey","keyCode","preventDefault","loadScript","scriptHtml","isActive","updateBackgroundColor","console","log","color","backgroundColor","livelyLoad","livelyMigrate","oldInstance"],"mappings":"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","file":"lively-object-editor.js","sourcesContent":["'use strict';\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport { uuid as generateUUID } from 'utils';\nimport scriptManager from  \"src/client/script-manager.js\";\n\nexport default class ObjectEditor extends Morph {\n  initialize() {\n    // this.getSubmorph(\"#editor\").changeMode(\"javascript\");\n    var codeEditor = this.shadowRoot.querySelector('lively-code-mirror');\n    // codeEditor.enableAutocompletion();\n    \n      \n    codeEditor.doSave = text => {\n      this.onSave()\n    }\n    \n  }\n\n  /*\n   * HTMLElement callbacks\n   */\n  attachedCallback() {\n    this.attached = true;\n\n    this.saveElementReferences();\n    this.addElementEvents();\n\n    // this.render();\n\n    // this.initializeAttributes();\n  }\n\n  detachedCallback() {\n    this.attached = false;\n\n    if (this.targetElement) {\n      this.releaseTarget();\n    }\n  }\n\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    switch(attrName) {\n      case 'target':\n        var selector = newValue, element  = null;\n\n        if(!selector) {\n          break;\n        }\n\n        // target attribute changed, find new target element\n        if (selector[0] === '$') {\n          this.targetElement = document.querySelector('[data-lively-id=\"' + selector.substr(1) + '\"]');\n        } else {\n          this.targetElement = document.querySelector(selector);\n        }\n\n        break;\n    }\n  }\n\n  /*\n   * ObjectEditor methods\n   */\n  saveElementReferences() {\n    this.propertyList = this.get('#property-list');\n    this.editor = this.get('#editor');\n  }\n\n  addElementEvents() {\n    this.propertyList.addEventListener('change', (e) => { this.listChanged(e) });\n    this.get('#add-script').addEventListener('click', (e) => { this.addButtonClicked(e) });\n    this.get('#remove-script').addEventListener('click', (e) => { this.removeButtonClicked(e) });\n    this.get('#save-script').addEventListener('click', (e) => { this.onSave(e) });\n    this.get('#run-script').addEventListener('click', (e) => { this.runButtonClicked(e) });\n    \n    \n    // this.editor.addEventListener('keydown', (e) => { this.editorKeyDown(e) });\n  }\n\n  initializeAttributes() {\n    for (let i = 0; i < this.attributes.length; i++) {\n      var attribute = this.attributes[i];\n\n      this.attributeChangedCallback(attribute.name, null, attribute.value);\n    }\n  }\n\n  // Target element\n  get targetElement() {\n    return this._targetElement;\n  }\n\n  set targetElement(val) {\n    if(val == this.targetElement) {\n      return;\n    }\n\n    if (this.targetElement) {\n      this.releaseTarget();\n    }\n\n    this._targetElement = val;\n    this.render();\n\n    if (typeof this.targetElement.__scripts__ === 'undefined') {\n      this.targetElement.__scripts__ = {};\n    }\n\n    if (!this.targetElement.dataset['livelyId']) {\n      var uuid = generateUUID();\n\n      this.targetElement.setAttribute('data-lively-id', uuid);\n      this.setAttribute('target', '$' + uuid);\n    }\n\n    this.createObservers();\n    \n    this.shadowRoot.querySelector(\"#editor\").doitContext = val\n  }\n\n  releaseTarget() {\n    if(!this.targetElement) {\n      return;\n    }\n\n    this.destroyObservers();\n    this.destroyUUID();\n  }\n\n  /*\n   * Observers for attributes, scripts, etc.\n   */\n  createObservers() {\n    // NOTE: We need to wait for Google to bring Proxy to V8\n    // if (this.targetElement.__scripts__) {\n    //   this.scriptsObserver = new MutationObserver((changes) => { this.scriptsObserver(changes) });\n    //   this.scriptsObserver.observe(this.targetElement.__scripts__, {\n    //     attributes: true\n    //   });      \n    // }\n\n    // this.domObserver = new MutationObserver((changes) => { this.attributesObserver(changes) });\n    // this.domObserver.observe(this.targetElement, {\n    //   attributes: true\n    // });\n  }\n\n  destroyObservers() {\n    if (this.domObserver) this.domObserver.disconnect(); // #TODO why is that sometimes not initialized ?\n  }\n\n  // attributesObserver(changes) {\n  //   this.showAttributes();\n  // }\n\n  scriptsObserver(changes) {\n    this.updateScripts();\n  }\n\n  destroyUUID() {\n    var uuid = this.targetElement.dataset.livelyId;\n    if(!uuid) {\n      return;\n    }\n\n    var expectedTargetCount = this.attached ? 1 : 0;\n\n    if(document.querySelectorAll('[target=\"$' + uuid + '\"]').length > expectedTargetCount) {\n      return;\n    }\n\n    delete this.targetElement.dataset.livelyId;\n  }\n\n  render() {\n    if (!this.attached) {\n      return;\n    }\n\n    this.updateList();\n    this.setWindowTitle();\n  }\n\n  setWindowTitle() {\n    if(!this.targetElement) return;\n    if(this.parentElement.tagName != 'LIVELY-WINDOW') {\n      // parent is not a window, so cannot set title\n      return;\n    }\n\n    let windowElement = this.parentElement;\n    let title = '';\n\n    if (this.targetElement.name) {\n        title = this.targetElement.name;\n    } else if (this.targetElement.id) {\n        title = '#'+ this.targetElement.id;\n    }\n\n    title += ' <small>' + this.targetElement.tagName.toLowerCase() + '</small>';\n\n    windowElement.setAttribute('title', title);\n  }\n\n  /* \n   * Attributes Tab\n   */\n  showAttributes() {\n    if (!this.targetElement) {\n      return;\n    }\n\n    let attributes = {};\n    for (let i = 0; i < this.targetElement.attributes.length; i++) {\n      attributes[this.targetElement.attributes[i].name] = this.targetElement.attributes[i].value;\n    }\n    this.shadowRoot.querySelector(\"#attributesMap\").map = attributes;\n  }\n\n  saveAttribute(data, source) {\n    let attributeName = data['attributeName']\n    this.targetElement.setAttribute(attributeName, source);\n  }\n\n  attributeChanged(e) {\n    let attribute = e.detail;\n\n    this.targetElement.setAttribute(attribute.key, attribute.value);\n  }\n\n  /*\n   * Properties Tab\n   */\n  showProperties() {\n    if (!this.targetElement) {\n      return;\n    }\n\n    let editableProperties = [\n      { name: 'dir', type: 'string', readonly: true },\n      { name: 'lang', type: 'string' },\n      { name: 'className', type: 'string' },\n      { name: 'contentEditable', type: 'string' },\n      { name: 'id', type: 'string' },\n\n      { name: 'offsetHeight', type: 'number', readonly: true },\n      { name: 'offsetWidth', type: 'number', readonly: true },\n      { name: 'offsetTop', type: 'number', readonly: true },\n      { name: 'offsetLeft', type: 'number', readonly: true },\n\n      { name: 'clientHeight', type: 'number', readonly: true },\n      { name: 'clientLeft', type: 'number', readonly: true },\n      { name: 'clientTop', type: 'number', readonly: true },\n      { name: 'clientWidth', type: 'number', readonly: true },\n\n      { name: 'tabIndex', type: 'number' },\n\n      { name: 'innerHTML', type: 'string' },\n      { name: 'outerHTML', type: 'string', readonly: true },\n      { name: 'value', type: 'string' },\n      { name: 'title', type: 'string' },\n      { name: 'tagName', type: 'string', readonly: true },\n\n      { name: 'scrollTop', type: 'number' },\n      { name: 'scrollLeft', type: 'number' }\n    ];\n    \n    Object.keys(this.targetElement).forEach( ea => {\n      if (ea.match(/^__/)) return;\n      var readonly = true;\n      var propType = typeof this.targetElement[ea]\n      if (propType == \"function\") return\n      if (propType == \"string\" || propType == \"number\") readonly = false;\n      editableProperties.push({name: ea, type: propType, readonly: readonly})\n    })\n    \n\n    let properties = {};\n    for (let i = 0; i < editableProperties.length; i++) {\n      let property = editableProperties[i];\n      properties[property.name] = {\n        value: this.targetElement[property.name],\n        type: property.type,\n        readonly: property.readonly\n      }\n    }\n\n    this.propertiesMap.map = properties;\n  }\n\n  propertyChanged(e) {\n    let property = e.detail;\n\n    this.targetElement[property.key] = property.value;\n  }\n\n  addPropertyButtonClicked(e) {\n    if (!this.targetElement) {\n      return;\n    }\n\n    var propertyName = window.prompt('Please enter the name of the property', '');\n    if (!propertyName || propertyName.length == 0) {\n      return;\n    }\n\n    var propertyValue = window.prompt('Please enter the (new) value', '');\n    if (!propertyValue || propertyValue.length == 0) {\n      return;\n    }\n\n    this.targetElement[propertyName] = propertyValue;\n\n    this.showProperties();\n  }\n\n  addAttributeButtonClicked(e) {\n    if (!this.targetElement) {\n      return;\n    }\n\n    var attributeName = window.prompt('Please enter the name of the attribute', '');\n    if (!attributeName || attributeName.length == 0) {\n      return;\n    }\n\n    var attributeValue = window.prompt('Please enter the (new) value', '');\n    if (!attributeValue || attributeValue.length == 0) {\n      return;\n    }\n\n    this.targetElement.setAttribute(attributeName, attributeValue);\n  }\n\n  /*\n   * Connections Tab\n   */\n  showConnections() {\n    if (!this.targetElement) {\n      return;\n    }\n    if (!this.targetElement.__connections__) {\n      this.targetElement.__connections__ = [];\n    }\n\n    let values = '';\n    this.targetElement.__connections__.forEach(function(conn) {\n      values += '<option>' + conn.name + '</option>';\n    });\n\n    this.connectionList.innerHTML = values;\n  }\n\n  addConnectionButtonClicked(e) {\n    if (!this.targetElement) {\n      return;\n    }\n    if (!this.targetElement.__connections__) {\n      this.targetElement.__connections__ = [];\n    }\n\n    var eventName = window.prompt('Please enter the event to be connected', '');\n    if (!eventName || eventName.length == 0) {\n      return;\n    }\n\n    var scriptName = window.prompt('Please enter the name of the script to be executed', '');\n    if (!scriptName || scriptName.length == 0) {\n      return;\n    }\n\n    if (typeof this.targetElement[scriptName] === 'undefined') {\n      alert('Could not find that script on the target element!');\n      return;\n    }\n\n    // connect it\n    var target = this.targetElement;\n    var listener = function(e) {\n      target[scriptName](e);\n    };\n\n    this.targetElement.addEventListener(eventName, listener);\n    this.targetElement.__connections__.push({\n      eventName: eventName,\n      listener: listener,\n      name: eventName + ' >> ' + scriptName\n    });\n\n    this.showConnections();\n  }\n\n  removeConnectionButtonClicked(e) {\n    if (!this.targetElement) {\n      return;\n    }\n    if (!this.targetElement.__connections__) {\n      this.targetElement.__connections__ = [];\n    }\n\n    if (this.connectionList.selectedIndex < 0) {\n      return;\n    }\n\n    let removedConnection = this.targetElement.__connections__[this.connectionList.selectedIndex];\n    this.targetElement.removeEventListener(removedConnection.eventName, removedConnection.listener);\n    this.targetElement.__connections__.splice(this.connectionList.selectedIndex);\n\n    this.showConnections();\n  }\n\n  /*\n   * Scripts Tab\n   */\n  addButtonClicked(e) {\n    if (!this.targetElement) {\n      return;\n    }\n\n    if (typeof this.targetElement.__scripts__ === 'undefined') {\n      this.targetElement.__scripts__ = {};\n    }\n\n    var scriptName = \"methodName\"\n    if (!scriptName || scriptName.length <= 0) {\n      return;\n    }\n\n    if (typeof this.targetElement.__scripts__[scriptName] !== 'undefined') {\n      alert('Script name already in use.');\n      return;\n    }\n\n    ///this.addEmptyScript(scriptName);\n    var source = 'function ' + scriptName + '() {\\n  \\n}'\n    this.get(\"#editor\").value = source\n    this.get(\"#editor\").editor.setSelection({line: 0, ch: 9 }, {line: 0, ch: 9 + scriptName.length})\n    this.get(\"#editor\").focus()\n  }\n  \n  addEmptyScript(scriptName) {\n    this.addScript(scriptName, 'function ' + scriptName + '() {\\n  \\n}')\n  }\n\n  addScript(scriptName, funcOrString) {\n    scriptManager.addScript(this.targetElement, funcOrString, {name: scriptName});\n    this.updateScripts();\n    this.propertyList.selectLeaf(this.propertyList.querySelector('.leaf[data-script-name=\"'+scriptName+'\"]'));\n    this.listChanged();\n  }\n\n  removeButtonClicked(e) {\n    if (this.targetElement) {\n      if (this.propertyList.activeLeaf !== null) {\n        let scriptName = this.propertyList.activeLeaf.dataset['scriptName'];\n        scriptManager.removeScript(this.targetElement, scriptName);\n      }\n      this.editor.value = '';\n      this.updateScripts();\n    }\n  }\n\n  isScriptData(data) {\n    return typeof data['scriptName'] !== 'undefined'\n  }\n  \n  isAttributeData(data) {\n    return typeof data['attributeName'] !== 'undefined'\n  }\n\n  \n\n  hideErrorBorder() {\n    this.get('lively-code-mirror').style.border = \"\"\n  }\n\n  showErrorBorder() {\n    this.get('lively-code-mirror').style.border = \"2px solid red\"\n  }\n  \n\n  onSave(e) {\n    if (!this.targetElement) return;\n    let source = this.editor.value;\n    let m = source.match(/^(?:async +)?function +([a-zA-Z][a-zA-Z0-9$_]+) *\\(/)\n    var scriptName = m && m[1]\n    this.hideErrorBorder()\n    if (!scriptName) {\n      lively.notify(\"[ObjectEditor] Could not save\", source)  \n      this.showErrorBorder()\n      return \n    }\n    if (this.propertyList.activeLeaf !== null) {\n      let data = this.propertyList.activeLeaf.dataset;\n      \n      if (this.isScriptData(data)) {\n        if (scriptName === data['scriptName']) {\n          this.saveScript(data, source);\n        } else {\n          try {\n            this.addScript(scriptName, source)  \n          } catch(e) {\n            lively.notify(\"Could not save \" + scriptName, e) \n            this.showErrorBorder()\n\n          }\n        }\n      } else if (this.isAttributeData(data)) {\n        this.saveAttribute(data, source);\n      }\n    } else {\n      if(scriptName) {\n        debugger\n        this.addScript(scriptName, source)\n        lively.notify(\"[ObjectEditor] added new script \" + scriptName)\n      } else {\n      // #here go the new attributes?\n      lively.notify(\"[ObjectEditor] Could not save.\")\n      this.showErrorBorder()\n      }\n    }\n  }\n  \n  saveScript(data, source) {\n    try {\n      // #FEATURE can we parse it before to show better syntax errors?\n      var functionObj = eval('(' + source + ')')\n    } catch(e) {\n      lively.notify(\"[ObjectEditor] Eror compiling script! \", \n        \"\" + e, 10, () => { lively.showError(e)}, \"red\")\n      functionObj = source\n      return\n    }\n    let scriptName =  data['scriptName']\n    scriptManager.updateScript(\n      this.targetElement,\n      functionObj,\n      { name: scriptName }\n    );\n    lively.notify(\"[ObjectEditor] Saved script \" + scriptName, \"\", 2, null, \"green\" )\n  }\n  \n\n  runButtonClicked(e) {\n    if (this.targetElement && this.propertyList.activeLeaf !== null) {\n      let data = this.propertyList.activeLeaf.dataset;\n      let func = eval('(' + this.editor.value + ')');\n\n      func.apply(this.targetElement);\n    }\n  }\n\n  editorKeyDown(e) {\n    if (e.metaKey && e.keyCode === 83) {\n      this.onSave();\n      e.preventDefault();\n    }\n  }\n\n  listChanged(e) {\n    if (this.propertyList.activeLeaf !== null) {\n      let data = this.propertyList.activeLeaf.dataset;\n\n      if (typeof data['scriptName'] !== 'undefined') {\n        this.loadScript(data['scriptName']);\n      }\n    } else {\n      this.editor.value = '';\n    }\n  }\n\n  loadScript(scriptName) {\n    if (typeof this.targetElement.__scripts__ === 'undefined' ||\n      typeof this.targetElement.__scripts__[scriptName] === 'undefined') {\n      return;\n    }\n    this.editor.value = this.targetElement.__scripts__[scriptName];\n  }\n\n  updateList() {\n    this.updateScripts();\n  }\n\n  updateScripts() {\n    var activeLeaf = null;\n    // if (this.propertyList.activeLeaf) {\n    //   let activeLeafData = this.propertyList.activeLeaf.dataset;\n    //   if(activeLeafData.scriptName)\n    //     activeLeaf = activeLeafData.scriptName;\n    // }\n\n    let scriptHtml = '';\n    if (this.targetElement && typeof this.targetElement.__scripts__ !== 'undefined') {\n      for (let scriptName in this.targetElement.__scripts__) {\n        let isActive = scriptName == activeLeaf;\n        scriptHtml += '<li class=\"leaf' + (isActive ? ' active' : '') + '\" data-script-name=\"' + scriptName + '\">' + scriptName + '</li>';\n      }\n    }\n    this.shadowRoot.querySelector('#script-nodes').innerHTML = scriptHtml;\n  }\n  \n  updateBackgroundColor() {\n    console.log(\"update color\")\n    var color = this.shadowRoot.querySelector(\"#background-color\").value;\n    this.targetElement.style.backgroundColor = color;\n  }\n  \n  livelyLoad() {\n    // this.releaseTarget()\n    // this.targetElement = that\n    // var target = lively.elementByID(this.getAttribute(\"target\"))\n    // if (target) {\n    //   this.targetElement = target\n    // }\n  }\n  \n  livelyMigrate(oldInstance) {\n    this.targetElement = oldInstance.targetElement\n  }\n}"]}