{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/src/client/vivide/vividescript.js"],"names":["boundEval","uuid","stepFolder","ScriptStep","VivideObject","Annotations","Script","constructor","view","setView","_view","setInitialStep","step","initialStep","getInitialStep","getLastStep","firstStep","getLoopStartStep","lastStep","getNextExecutionStep","numberOfSteps","length","iterateLinear","getPrevStep","find","s","forEachStepAsync","cb","iterateLinearAsync","stepsAsArray","arr","push","insertStepAfter","stepType","prevStep","newStep","newFromTemplate","setScript","insertAfter","removeStep","stepToBeRemoved","removeLoop","remove","removeLoopTargetStep","setLoopStart","setLoopTargetStep","gotUpdated","lively","notify","scriptGotUpdated","getViewConfig","viewConfig","steps","fn","config","getExecutable","add","createDefaultScript","transform","extract","descent","script","toJSO","jsonContainer","forEach","id","toJSON","JSON","stringify","fromJSON","json","jsonScripts","parse","scripts","firstScriptStep","lastScriptStep","scriptId","source","type","stepJSON","loopId","otherStep","warn","document","querySelectorAll","vv","myCurrentScript","migrateTo"],"mappings":"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","file":"vividescript.js","sourcesContent":["import boundEval from \"src/client/bound-eval.js\";\nimport { uuid } from 'utils';\nimport { stepFolder } from 'src/client/vivide/utils.js';\nimport ScriptStep from 'src/client/vivide/vividescriptstep.js';\nimport VivideObject from 'src/client/vivide/vivideobject.js';\nimport Annotations from 'src/client/reactive/utils/annotations.js';\n\nexport default class Script {\n  constructor(view) {\n    this.setView(view);\n  }\n\n  setView(view) { this._view = view; }\n\n  /**\n   * Access\n   */\n  setInitialStep(step) { return this.initialStep = step; }\n  getInitialStep() { return this.initialStep; }\n\n  getLastStep() {\n    const firstStep = this.getInitialStep();\n    return firstStep && firstStep.getLastStep();\n  }\n\n  getLoopStartStep() {\n    const lastStep = this.getLastStep();\n    return lastStep && lastStep.getNextExecutionStep();\n  }\n\n  numberOfSteps() {\n    let length = 0;\n    this.getInitialStep().iterateLinear(() => length++);\n    return length;\n  }\n\n  getPrevStep(step) {\n    return this.getInitialStep().find(s => s.getNextExecutionStep() === step);\n  }\n\n  async forEachStepAsync(cb) {\n    await this.getInitialStep().iterateLinearAsync(cb);\n  }\n\n  stepsAsArray() {\n    const arr = [];\n    this.getInitialStep().iterateLinear(step => arr.push(step));\n\n    return arr;\n  }\n\n  /**\n   * Modify\n   */\n  async insertStepAfter(stepType, prevStep) {\n    const newStep = await ScriptStep.newFromTemplate(stepType);\n    newStep.setScript(this);\n\n    prevStep.insertAfter(newStep);\n\n    return newStep;\n  }\n\n  removeStep(stepToBeRemoved) {\n    if(stepToBeRemoved === this.getLoopStartStep()) {\n      this.removeLoop();\n    }\n\n    if(stepToBeRemoved === this.getInitialStep()) {\n      // First script was removed\n      this.setInitialStep(stepToBeRemoved.getNextExecutionStep());\n    }\n\n    stepToBeRemoved.remove();\n  }\n\n  removeLoop() {\n    const lastStep = this.getLastStep();\n    lastStep.removeLoopTargetStep();\n  }\n\n  setLoopStart(step) {\n    const lastStep = step.getLastStep();\n    lastStep.setLoopTargetStep(step);\n  }\n\n  /**\n   * Handling script execution\n   */\n  gotUpdated() {\n    lively.notify('VivideScript::gotIpdated')\n    this._view.scriptGotUpdated();\n  }\n\n  /**\n   * Script execution\n   */\n  async getViewConfig() {\n    const viewConfig = new Annotations();\n    const steps = this.stepsAsArray();\n\n    for (let step of steps) {\n      // #TODO: just say 'await step.getConfig()' (make it lazy and memoize later)\n      const [fn, config] = await step.getExecutable();\n      viewConfig.add(config);\n    }\n\n    return viewConfig;\n  }\n\n  /**\n   * Serialization\n   */\n  static async createDefaultScript(view) {\n    const transform = await ScriptStep.newFromTemplate('transform');\n    const extract = await ScriptStep.newFromTemplate('extract');\n    const descent = await ScriptStep.newFromTemplate('descent');\n\n    transform.insertAfter(extract);\n    extract.insertAfter(descent);\n\n    const script = new Script(view);\n    script.setInitialStep(transform);\n    transform.setScript(script);\n    extract.setScript(script);\n    descent.setScript(script);\n\n    return script;\n  }\n\n  toJSO() {\n    const jsonContainer = {};\n\n    this.stepsAsArray().forEach(step => {\n      jsonContainer[step.id] = step.toJSO();\n    });\n\n    return jsonContainer;\n  }\n  \n  toJSON() {\n    return JSON.stringify(this.toJSO())\n  }\n\n  static async fromJSON(json, view) {\n    // this is deserialization of a script\n    let jsonScripts = JSON.parse(json)\n    let scripts = {};\n\n    var firstScriptStep\n    var lastScriptStep\n    \n    const script = new Script(view);\n    for (let scriptId in jsonScripts) {\n      let step = new ScriptStep(\n        jsonScripts[scriptId].source,\n        jsonScripts[scriptId].type,\n        scriptId,\n      );\n      step.setScript(script);\n      scripts[scriptId] = step\n      if (!firstScriptStep) firstScriptStep = step;\n      if (lastScriptStep) {\n        lastScriptStep.insertAfter(step);\n      }\n      lastScriptStep = step\n    }\n    for (let scriptId in jsonScripts) {\n      let step = scripts[scriptId]\n      let stepJSON =  jsonScripts[scriptId]\n      var loopId = stepJSON[\"loop-target-step-id\"]\n      if(loopId) {\n        var otherStep = scripts[loopId]\n        if (otherStep) {\n          step.setLoopTargetStep(otherStep)\n        } else {\n          debugger\n          lively.warn(\"Could not restore Vivide Step Loop\")\n        }\n      }\n    }\n    \n    \n    script.setInitialStep(firstScriptStep);\n    return script;\n  }\n}\n\n// #UPDATE_INSTANCES\n// #TODO: idea: using a list of all object, we can make them become anew\n// go through all object reachable from window\ndocument.querySelectorAll(\"vivide-view\").forEach(vv => {\n  const script = vv.myCurrentScript;\n  if(script) {\n    script.migrateTo(Script);\n  }\n});\n"]}