{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/client/vivide/components/vivide-view.js"],"names":["Morph","uuid","without","getTempKeyFor","getObjectFor","flatMap","VivideObject","Script","WidgetChooser","getPreferredWidgetType","forest","viewConfig","has","get","length","model","properties","findAppropriateWidget","type","includes","VivideView","findViewWithId","id","context","document","body","lively","query","getIdForView","view","idAttribute","outportAttribute","scriptAttribute","widgetId","widgetSelector","forestToData","map","m","object","dataToForest","data","d","widget","input","_input","val","getAttribute","newId","setAttribute","outportTargets","ids","getJSONAttribute","call","findWorldContext","error","targets","setJSONAttribute","addOutportTarget","target","concat","removeOutportTarget","inportSources","Array","from","querySelectorAll","targetHull","hull","Set","addToHull","add","forEach","connectTo","removeConnectionTo","transmitDataToOutportTargets","dataToTransmit","newDataFromUpstream","reallyNotifyOutportTargets","stuffToTransmit","notifyOutportTargets","warn","forestToDisplay","updateOutportTargets","getDataToTransmit","multiSelectionEnabled","getSelectedData","localName","undefined","selectionChanged","addDragInfoTo","evt","dt","dataTransfer","selection","setData","initialize","windowTitle","addEventListener","onExtentChanged","dragenter","dragover","dragleave","drop","myCurrentScript","scriptJSON","fromJSON","initDefaultScript","dataJSON","JSON","parse","childNodes","childNode","dispatchEvent","CustomEvent","preventDefault","_resetDropOverEffects","classList","hasSourceView","types","dropEffect","hasData","remove","shouldPreventPropagation","success","getData","sourceView","stopPropagation","_myCurrentScript","script","createDefaultScript","calculateOutputModel","updateWidget","getInputData","firstStep","getInitialStep","slice","processData","scriptGotUpdated","notify","innerHTML","getViewConfig","chosenWidgetType","create","setView","appendChild","display","createScriptEditor","viewWindow","findWindow","reference","tagName","pos","getGlobalBounds","topRight","scriptEditor","openComponentInWindow","setScript","livelyPrepareSave","toJSON","json","stringify","e","console","livelyExample","exampleData","name","subclasses","livelyMigrate","other","livelyInspect","contentNode","inspector","livelyHalo","configureHalo","halo","style","outportContainer","item","createElement","setTarget","inportContainer","source","setSource"],"mappings":"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","file":"vivide-view.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { uuid, without, getTempKeyFor, getObjectFor, flatMap } from 'utils';\nimport VivideObject from 'src/client/vivide/vivideobject.js';\nimport Script from 'src/client/vivide/vividescript.js';\n\n/**\n * Smart widget choosing\n */\nclass WidgetChooser {\n  static getPreferredWidgetType(forest, viewConfig) {\n    if (viewConfig.has('widget')) { \n      return viewConfig.get('widget');\n    }\n    \n    // #TODO: this is too dependent on internal structure of the model/VivideObject\n    // PROPOSAL: Models should not know about views, therefore they cannot return\n    //   a suggested view, but they could return a data type suggestion like:\n    //     model.dataType == \"data-points\" || \"list\" || \"text\"\n    //   Additionally, this data type could be set manually or via an \"intelligent\"\n    //   algorithm.\n    if (forest && forest.length > 0) {\n      // #Question: this model has an objects array, what is the data structure of this model?\n      const model = forest[0];\n      \n      if(model.properties.has('dataPoints') && typeof model.properties.get('dataPoints')[0] === 'number') {\n        return 'boxplot';\n      } else if (model.properties.has('text')) {\n        return 'text';\n      }\n    }\n    return 'tree';\n  }\n  static findAppropriateWidget(forest, viewConfig) {\n    const type = this.getPreferredWidgetType(forest, viewConfig);\n    \n    // full type specified\n    if(type.includes('-')) {\n      return type;\n    }\n    \n    // shorthand notation used\n    return `vivide-${type}-widget`;\n  }\n}\n\nexport default class VivideView extends Morph {\n  static findViewWithId(id, context=document.body) {\n    return lively.query(context, `vivide-view[vivide-view-id=${id}]`);\n  }\n  \n  static getIdForView(view) {\n    return view.id;\n  }\n  \n  static get idAttribute() { return 'vivide-view-id'; }\n  \n  static get outportAttribute() { return 'outport-target'; }\n  \n  static get scriptAttribute() { return 'vivide-script'; }\n  \n  static get widgetId() { return 'widget'; }\n  \n  static get widgetSelector() { return '#' + this.widgetId; }\n  \n  static forestToData(model) {\n    return model.map(m => m.object);\n  }\n  \n  // unused?\n  static dataToForest(data) {\n    return data.map(d => new VivideObject(d));\n  }\n\n  get widget() { return this.get(VivideView.widgetSelector); }\n  \n  get input() { return this._input || (this._input = []); }\n  set input(val) { return this._input = val; }\n  \n  get id() {\n    let id = this.getAttribute(VivideView.idAttribute);\n    if(id) { return id; }\n    \n    // ensure uuid begins with a letter to match the requirements for a css selector\n    let newId = 'vivide-view-' + uuid();\n    this.setAttribute(VivideView.idAttribute, newId);\n    return newId;\n  }\n  \n  get outportTargets() {\n    let ids = this.getJSONAttribute(VivideView.outportAttribute);\n    if(ids) {\n      return flatMap.call(ids, id => {\n        let view = VivideView.findViewWithId(id, lively.findWorldContext(this)) ;\n        if(view === null) {\n          lively.error('could not find view: ' + id);\n          return [];\n        }\n        return [view];\n      });\n    }\n    \n    return this.outportTargets = [];\n  }\n  \n  set outportTargets(targets) {\n    return this.setJSONAttribute(\n      VivideView.outportAttribute,\n      targets.map(VivideView.getIdForView)\n    );\n  }\n  \n  addOutportTarget(target) {\n    return this.outportTargets = this.outportTargets.concat(target);\n  }\n  \n  removeOutportTarget(target) {\n    return this.outportTargets = without.call(this.outportTargets, target);\n  }\n  \n  get inportSources() {\n    return Array.from(document.body.querySelectorAll(`vivide-view[${VivideView.outportAttribute}*=${this.id}]`));\n  }\n  \n  get targetHull() {\n    let hull = new Set();\n    \n    function addToHull(view) {\n      if(view && !hull.has(view)) {\n        hull.add(view);\n        view.outportTargets.forEach(addToHull);\n      }\n    }\n    addToHull(this);\n    \n    return Array.from(hull);\n  }\n  \n  connectTo(target) {\n    // #TODO: cycle detection, here?\n    this.addOutportTarget(target);\n  }\n  removeConnectionTo(target) {\n    this.removeOutportTarget(target);\n  }\n  \n  transmitDataToOutportTargets(dataToTransmit) {\n    this.outportTargets.forEach(target => target.newDataFromUpstream(dataToTransmit));\n  }\n  reallyNotifyOutportTargets(stuffToTransmit) {\n    this.transmitDataToOutportTargets(VivideView.forestToData(stuffToTransmit));\n  }\n  notifyOutportTargets() {\n    lively.warn('VIEW::NOTIFY2', this.forestToDisplay[0])\n    this.reallyNotifyOutportTargets(this.forestToDisplay);\n  }\n  \n  updateOutportTargets() {\n    const dataToTransmit = this.getDataToTransmit();\n    if(dataToTransmit) {\n      lively.warn('VIEW::UPDATE', dataToTransmit[0])\n      this.transmitDataToOutportTargets(dataToTransmit);\n    }\n  }\n  \n  getDataToTransmit() {\n      lively.warn('display all data')\n    if(this.widget && this.widget.multiSelectionEnabled) {\n      return this.getSelectedData();\n    } else if (this.widget && this.widget.localName === 'vivide-text-widget') {\n      return this.getSelectedData();\n    } else {\n      // use all data\n      return VivideObject.forestToData(this.forestToDisplay);\n    }\n  }\n  \n  getSelectedData() {\n    const widget = this.widget;\n    if(widget) {\n      return widget.getSelectedData();\n    }\n    return undefined;\n  }\n\n  selectionChanged() {\n    this.updateOutportTargets();\n  }\n  \n  addDragInfoTo(evt) {\n    const dt = evt.dataTransfer;\n    // #TODO: An improved fix would be to change what is returned by the widget selection\n    let selection = this.getDataToTransmit();\n    if(selection) {\n      lively.warn('VivideView::addDragInfoTo', selection[0])\n      dt.setData(\"javascript/object\", getTempKeyFor(selection));\n    } else {\n      lively.error('could not add drag data');\n    }\n\n    dt.setData(\"vivide\", \"\");\n    dt.setData(\"vivide/source-view\", getTempKeyFor(this));\n  }\n\n  async initialize() {\n    this.windowTitle = \"VivideView\";\n    this.addEventListener('extent-changed', evt => this.onExtentChanged(evt));\n    \n    this.addEventListener('dragenter', evt => this.dragenter(evt), false);\n    this.addEventListener('dragover', evt => this.dragover(evt), false);\n    this.addEventListener('dragleave', evt => this.dragleave(evt), false);\n    this.addEventListener('drop', evt => this.drop(evt), false);\n\n    // restore data... \n    \n    // not migrating, but initializing from source\n    if (!this.myCurrentScript) {\n      var scriptJSON = this.getAttribute(\"vivide-script\")\n      if (scriptJSON) {\n        this.myCurrentScript = await Script.fromJSON(scriptJSON, this)\n      } else {\n        await this.initDefaultScript();\n      }\n\n      var dataJSON = this.getAttribute(\"vivide-data\")\n      if (dataJSON) {\n        // await this.createScriptEditor();\n        var data = JSON.parse(dataJSON)\n        this.newDataFromUpstream(data)\n      }      \n    }\n  }\n  \n  onExtentChanged() {\n    this.childNodes.forEach(childNode => {\n      if(childNode.dispatchEvent) {\n        childNode.dispatchEvent(new CustomEvent(\"extent-changed\"));\n      }\n    })\n  }\n  \n  dragenter(evt) {}\n  dragover(evt) {\n    evt.preventDefault();\n\n    this._resetDropOverEffects();\n    this.classList.add('over');\n    \n    const dt = evt.dataTransfer;\n    \n    let hasSourceView = dt.types.includes(\"vivide\") && dt.types.includes(\"vivide/source-view\");\n    if(hasSourceView) {\n      // unfortunately, we cannot check for a circular dependency here,\n      // because we cannot get data from the dataTransfer outside dragStart and drop\n      // see: https://stackoverflow.com/a/31922258/1152174\n      this.classList.add('accept-drop');\n      dt.dropEffect = \"link\";\n      \n      return;\n    }\n    \n    let hasData = dt.types.includes(\"javascript/object\");\n    if(hasData) {\n      this.classList.add('accept-drop');\n      dt.dropEffect = \"copy\";\n      \n      return;\n    }\n    \n    this.classList.add('reject-drop');\n  }\n  dragleave(evt) {\n    this._resetDropOverEffects();\n  }\n  _resetDropOverEffects() {\n    this.classList.remove('over');\n    this.classList.remove('reject-drop');\n    this.classList.remove('accept-drop');\n  }\n  drop(evt) {\n    this._resetDropOverEffects();\n\n    let shouldPreventPropagation = false;\n    \n    const dt = evt.dataTransfer;\n    if (dt.types.includes(\"javascript/object\")) {\n      lively.success('drop data');\n\n      const data = getObjectFor(dt.getData(\"javascript/object\"));\n      this.newDataFromUpstream(data);\n      \n      shouldPreventPropagation = true;\n    }\n    \n    if (dt.types.includes(\"vivide\") && dt.types.includes(\"vivide/source-view\")) {\n      lively.success('drop vivide');\n      \n      const sourceView = getObjectFor(dt.getData(\"vivide/source-view\"));\n\n      if(this.targetHull.includes(sourceView)) {\n        lively.warn('cannot connect views', 'preventing cyclic dependencies')\n      } else {\n        sourceView.connectTo(this);\n      }\n\n      shouldPreventPropagation = true;\n    }\n\n    if(shouldPreventPropagation) {\n      evt.stopPropagation();\n    }\n  }\n  \n  get myCurrentScript() { return this._myCurrentScript; }\n  set myCurrentScript(script) { return this._myCurrentScript = script; }\n\n  async initDefaultScript() {\n    this.myCurrentScript = await Script.createDefaultScript(this);\n    // this.setJSONAttribute(VivideView.scriptAttribute, this.myCurrentScript.toJSON());\n  }\n  \n  async newDataFromUpstream(data) {\n    this.input = data;\n    \n    await this.calculateOutputModel();\n    await this.updateWidget();\n    this.updateOutportTargets();\n  }\n  \n  getInputData() {\n    return this.input;\n  }\n  \n  async calculateOutputModel() {\n    const firstStep = this.myCurrentScript.getInitialStep();\n    const data = this.input.slice(0);\n    \n    this.forestToDisplay = await firstStep.processData(data);\n  }\n  \n  // #TODO: nearly a duplicate with newDataFromUpstream; remove duplication\n  async scriptGotUpdated() {\n    // #TODO: save script to web-component\n    // #TODO: later support multiple profiles\n    lively.notify('VivideView::scriptGotUpdated');\n    await this.calculateOutputModel();\n    await this.updateWidget();\n    // Update outport views\n    // #TODO: nearly a duplicate with notifyOutportTargets, remove duplication\n    this.updateOutportTargets();\n  }\n  \n  async updateWidget() {\n    this.innerHTML = '';\n\n    const viewConfig = await this.myCurrentScript.getViewConfig();\n    const chosenWidgetType = WidgetChooser.findAppropriateWidget(this.forestToDisplay, viewConfig);\n\n    const widget = await lively.create(chosenWidgetType);\n    widget.setView(this);\n    widget.setAttribute('id', VivideView.widgetId);\n    this.appendChild(widget);\n    await widget.display(this.forestToDisplay, viewConfig);\n  }\n  \n  async createScriptEditor() {\n    const viewWindow = lively.findWindow(this);\n    const reference = viewWindow && viewWindow.tagName === \"LIVELY-WINDOW\" ?\n        viewWindow : this;\n    const pos = lively.getGlobalBounds(reference).topRight();\n\n    const scriptEditor = await lively.openComponentInWindow('vivide-script-editor', pos);\n\n    scriptEditor.setView(this);\n    // #TODO: only do setView with this as argument, the following line should not be required\n    scriptEditor.setScript(this.myCurrentScript);\n\n    return scriptEditor;\n  }\n  \n  livelyPrepareSave() {\n    this.setAttribute(\"vivide-script\", this.myCurrentScript.toJSON())\n    \n    try {\n      var json = JSON.stringify(this.getInputData())\n      this.setAttribute(\"vivide-data\", json)\n    } catch(e) {\n      console.warn(\"could not persist vivide data\", this.getInputData() )\n    }\n  }\n  \n  async livelyExample() {\n    const exampleData = [\n      {\n        name: \"object\",\n        subclasses:[\n          {name: \"morph\"}\n        ]},\n      {\n        name: \"list\",\n        subclasses:[\n          {\n            name: \"linkedlist\",\n            subclasses:[\n              {name: \"stack\"}\n            ]},\n          {\n            name: \"arraylist\"\n          }]\n      },\n      {\n        name: \"usercontrol\",\n        subclasses:[\n          {name: \"textbox\"},\n          {name: \"button\"},\n          {name: \"label\"}\n        ]},\n    ];\n    \n    await this.initDefaultScript();\n    await this.createScriptEditor();\n    await this.newDataFromUpstream(exampleData);\n  }\n  \n  livelyMigrate(other) {\n    lively.notify('VivideView::migrate')\n    this.myCurrentScript = other.myCurrentScript;\n    this.myCurrentScript.setView(this);\n\n    this.newDataFromUpstream(other.input);\n  }\n  \n  livelyInspect(contentNode, inspector) {\n    if (this.myCurrentScript) {\n      contentNode.appendChild(inspector.display(this.myCurrentScript, false, \"#script\", this));\n    }\n    if (this.input) {\n      contentNode.appendChild(inspector.display(this.input, false, \"#input\", this));\n    }\n    \n    var outportTargets = this.outportTargets\n    if (outportTargets) {\n      contentNode.appendChild(inspector.display(outportTargets, false, \"#outportTargets\", this));\n    }\n    \n    \n  }\n  \n  \n  livelyHalo() {\n    return {\n      configureHalo(halo) {\n        halo.get('#default-items').style.display = 'none';\n        halo.get('#vivide-items').style.display = 'flex';\n\n        // dynamically create outport connection visualizations\n        const outportContainer = halo.get('#vivide-outport-connection-items');\n        this.outportTargets.forEach(target => {\n          const item = document.createElement('lively-halo-vivide-outport-connection-item')\n          item.classList.add('halo');\n          item.setTarget(target);\n          outportContainer.appendChild(item);\n        });\n        \n        const inportContainer = halo.get('#vivide-inport-connection-items');\n        this.inportSources.forEach(source => {\n          const item = document.createElement('lively-halo-vivide-inport-connection-item')\n          item.classList.add('halo');\n          item.setSource(source);\n          inportContainer.appendChild(item);\n        });\n      }\n    };\n  }\n}\n"]}