{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/contextmenu.js"],"names":["html","pt","ViewNav","Layout","Windows","Grid","Info","_","Rasterize","Favorites","applicationFolder","createView","SearchRoots","Connection","ContextMenu","constructor","target","optItems","items","openIn","container","evt","worldContext","hide","menu","remove","lively","removeEventListener","document","documentElement","visible","parentElement","openComponentInWindow","name","extent","getPosition","then","comp","setExtent","focus","windowExtentOffeset","openInWindow","pos","getGlobalPosition","w","create","body","appendChild","setGlobalPosition","setPosition","getExtent","addPt","style","position","width","height","id","setAttribute","stripWindow","localName","Error","subPt","targetMenuItems","wasEditable","contentEditable","wasDisabled","disabled","targetInWindow","tagName","showElement","showHalo","allParents","reverse","map","ea","match","elementToCSSName","Array","from","childNodes","filter","showSource","showClassSource","insertBefore","makeLocalSpace","Image","url","getAttribute","editor","setTarget","openBrowser","openInspector","element","src","notify","prompt","files","readBlobAsDataURL","fetch","r","blob","previewAttrName","textContent","slice","toLowerCase","lively4url","copyURLtoURL","elementToURL","partName","source","outerHTML","querySelector","tmp","createElement","innerHTML","x","y","outerText","saveFile","openCenteredAt","morph","clientX","clientY","scaleBy","preferenceEntry","preferenceKey","enabledIcon","enabled","preferences","shortDescription","item","stopPropagation","preventDefault","get","disable","enable","worldMenuItems","connections","allConnections","forEach","connection","push","existingConnectionsMenu","getFullLabel","setConnection","openWorkspace","last","querySelectorAll","followPath","getURL","classList","add","hand","startGrabbing","border","backgroundColor","components","openPart","explorer","livelyExample","diary","selectFirstEntry","undefined","jsxRay","lively4invalidateFileCaches","workspace","mode","zIndex","parentNode","FilesCaches","System","import","list","invalidateTranspiledFiles","purgeTranspiledFiles","join","updateCachedFilesList","urls","replace","editFile","event","li","query","method","json","contents","concat","statFile","JSON","parse","type","split","content","loadFile","n","allWindows","gotoWindow","confirm","persistence","restoreBackupContextMenuItems","resetView","webkitIsFullScreen","webkitRequestFullScreen","Element","ALLOW_KEYBOARD_INPUT","webkitCancelFullScreen","sortBy","getComputedStyle","expandUntilNoIntersectionsExplosion","windowsByWidth","groupBy","clientWidth","Object","keys","Math","max","min","Number","snapAllTopLevelContent","window","open","showModuleInfo","updateAllSearchRoots","getSearchRoots","addSearchRoot","removeSearchRoot","listBooleans","onSaveAs","saveCurrentPageAs","onSave","saveCurrentPage","console","log","firstEvent","createComponent","focusWithoutScroll","openOn","setTimeout","addEventListener","self","contextmenu"],"mappings":"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","file":"contextmenu.js","sourcesContent":["\"disable deepeval\"\n/*MD # Lively4 ContextMenu \n\ncreates the \"world menu\" for Lively4\n\n- [worldMenuItems](#worldMenuItems)\n- [targetMenuItems](#targetMenuItems)\n\n\nMD*/\n\nimport html from './html.js';\nimport {pt} from './graphics.js';\nimport ViewNav from 'src/client/viewnav.js'\nimport Layout from \"src/client/layout.js\"\nimport Windows from \"src/components/widgets/lively-window.js\"\nimport {Grid} from \"src/client/morphic/snapping.js\"\nimport Info from \"src/client/info.js\"\nimport * as _ from 'src/external/lodash/lodash.js'\nimport Rasterize from 'src/client/rasterize.js'\nimport Favorites from \"src/client/favorites.js\"\nimport { applicationFolder } from 'src/client/vivide/utils.js';\nimport { createView } from 'src/client/vivide/scripts/loading.js';\nimport SearchRoots from \"src/client/search-roots.js\"\nimport Connection from \"src/components/halo/Connection.js\";\n\n// import lively from './lively.js'; #TODO resinsert after we support cycles again\n\nexport default class ContextMenu {\n  \n  constructor(target, optItems) {\n    this.target = target;\n    this.items = optItems;\n  }\n  \n  openIn(container, evt, target, worldContext) {\n     return ContextMenu.openIn(container, evt, target, worldContext,  this.items);\n  }\n  \n  static hide() {\n    if (this.menu) this.menu.remove();\n    lively.removeEventListener(\"contextMenu\",  document.documentElement);\n    delete this.menu\n  }\n  \n  static visible() {\n    return this.menu && this.menu.parentElement\n  }\n  \n  static openComponentInWindow (name, evt, worldContext, extent) {\n    this.hide();\n    return lively.openComponentInWindow(name, \n      lively.getPosition(evt), \n      extent, worldContext).then( comp => {\n      if(extent) {\n        lively.setExtent(comp.parentElement, extent)\n      }\n      comp.focus()\n      return comp\n    });\n  }\n  \n  \n  static get windowExtentOffeset() {\n    return pt(2,21)\n  }\n  \n  static async openInWindow(comp) {\n    // wrap an existing component in a window\n    var pos = lively.getGlobalPosition(comp);\n    var w = await lively.create(\"lively-window\")\n    document.body.appendChild(w)\n    lively.setGlobalPosition(w, lively.getGlobalPosition(comp))\n    w.appendChild(comp)\n    lively.setPosition(comp, pt(0,0))\n    lively.setExtent(w, lively.getExtent(comp).addPt(this.windowExtentOffeset))\n    comp.style.position = \"\"\n    comp.style.width = \"100%\"\n    comp.style.height = \"100%\"\n    if (comp.id) w.setAttribute(\"title\", comp.id)\n    return w\n  }\n  \n  static async stripWindow(comp, evt) {\n    var w = comp.parentElement\n    if (w.localName !== \"lively-window\") {\n      throw new Error(\"Could not strip window, because there is none\")\n    }\n    var extent = lively.getExtent(w).subPt(this.windowExtentOffeset)\n    w.parentElement.appendChild(comp) \n    lively.setGlobalPosition(comp, lively.getGlobalPosition(w))\n    lively.setExtent(comp, extent.addPt(this.windowExtentOffeset))\n    w.remove()\n    return comp\n  }\n\n  \n  // #important\n  static targetMenuItems(target) {\n    var wasEditable = (target.contentEditable == \"true\");\n    var wasDisabled = (target.disabled == \"true\");\n    var targetInWindow = target.parentElement && target.parentElement.tagName == 'LIVELY-WINDOW';\n    return [\n      [\"show\", () => {\n         this.hide();\n         lively.showElement(target);\n      },\"\", '<i class=\"fa fa-eye\" aria-hidden=\"true\"></i>'],\n      [\"open halo\",\n        [\n          [\"self\", () => {lively.showHalo(target)}],\n          [\"parents\", lively.allParents(target, [], true)\n             .reverse()  \n             .map(\n              ea => [\n                  (ea.localName && ea.localName.match(/-/)) ?\n                      `<b>${ea.localName}</b>`\n                      : lively.elementToCSSName(ea), \n                () => {lively.showHalo(ea)}])\n          ],\n          [\"children\",  Array.from(target.childNodes)\n             .filter(ea => ea.localName)  \n             .map( \n                ea => [lively.elementToCSSName(ea), () => {lively.showHalo(ea)}])\n          ],\n        ],\n        \"\", '<i class=\"fa fa-search\" aria-hidden=\"true\"></i>'\n      ],\n      [\"browse template source\", (evt) => {\n         this.hide();\n         lively.showSource(target, evt);\n      },\n      \"\", '<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>'\n      ],\n      [\"browse class source\", (evt) => {\n         this.hide();\n         lively.showClassSource(target, evt);\n      },\n        \"\", '<i class=\"fa fa-file-code-o\" aria-hidden=\"true\"></i>'\n      ],\n      [\"browse component class source\" ,\n        lively.allParents(target, [], true)\n         .filter(ea => ea.localName && ea.localName.match(/-/))\n         .reverse()\n         .map( \n            ea => [ea.localName, (evt) => {lively.showClassSource(ea, evt)}])\n      ],\n      // [\"trace\", (evt) => {\n      //    System.import(\"src/client/tracer.js\").then(tracer => {\n      //      tracer.default.traceObject(target);\n      //    });\n      //    this.hide();\n      // }],\n      [\"remove\", () => {\n         target.remove()\n         this.hide();\n      },\n      \"\", '<i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>'\n      ],\n      [\"go back\", () => {\n        target.parentElement.insertBefore(target, target.parentElement.childNodes[0])\n         this.hide();\n      },\n      \"\", '<i class=\"fa fa-backward\" aria-hidden=\"true\"></i>'\n      ],\n      [\"come forward\", () => {\n        target.parentElement.appendChild(target)\n        this.hide();\n      },\n      \"\", '<i class=\"fa fa-forward\" aria-hidden=\"true\"></i>'\n      ],\n      [\n        \"make space\", () => {\n          Layout.makeLocalSpace(target)\n          this.hide()\n        },\n         \"\", '<i class=\"fa fa-file-code-o\" aria-hidden=\"true\"></i>'\n      ],\n      [wasEditable ? \"make uneditable\" : \"make editable\", () => {\n         this.hide();\n         target.contentEditable = !wasEditable;\n      },     \n        \"\", '<i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>'\n      ],\n      [wasDisabled ? \"enable\" : \"disable\", () => {\n         this.hide();\n         target.disabled = !wasDisabled;\n      },\n        \"\", '<i class=\"fa fa-bolt\" aria-hidden=\"true\"></i>'\n      ],\n      [targetInWindow ? \"strip window\" : \"open in window\", (evt) => {\n          this.hide();\n          targetInWindow ?\n            this.stripWindow(target, evt) :\n            this.openInWindow(target, evt);\n        },\n        \"\", '<i class=\"fa fa-window-restore\" aria-hidden=\"true\"></i>'\n      ],\n      [\"edit\", async () => {\n          if (target instanceof Image) {\n            var url = target.getAttribute(\"src\")\n            if (url.match(/^data\\:/)) {\n              var editor = await lively.openComponentInWindow(\"lively-image-editor\")\n              editor.setTarget(target)\n              \n            } else {\n              lively.openBrowser(url, true)\n            }\n            \n          } else {\n              lively.openInspector(target)\n          }\n        },\n        \"\", '<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>'\n      ],\n      target.localName == \"lively-file\" ?\n        [ \"become content\", async () => {\n            if (target.url && target.name.match(/\\.png$/)) {\n              var element = await (<img id={target.name}></img>)\n              element.src = target.url\n              target.parentElement.appendChild(element)\n              lively.setPosition(element, lively.getPosition(target))\n              target.remove()\n            } else {\n               lively.notify(\"not supported\")\n            }\n          },\n          \"\", '<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>'\n        ] :\n      [  \"become file\", async () => {\n            if (target.src) {\n              var name  = this.id || await lively.prompt(\"convert to file named: \", \"newfile.png\")\n              var element = await (<lively-file name={name}></lively-file>)\n              target.parentElement.appendChild(element)\n              \n              element.setAttribute(\"url\",await lively.files.readBlobAsDataURL(await fetch(target.src).then(r => r.blob())))\n              lively.setPosition(element, lively.getPosition(target))\n\n              target.remove()\n\n            } else {\n              lively.notify(\"not supported\")\n            }\n          },\n          \"\", '<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>'\n        ],\n      [\"save as png ...\", async () => {\n          var previewAttrName = \"data-lively-preview-src\"\n          var url = target.getAttribute(previewAttrName)\n          if (!url) {\n            var name = target.id || \n                target.textContent.slice(0,30) || \n                target.tagName.toLowerCase();\n            url = lively4url + \"/\" + name + \".png\"            \n          }        \n          url = await lively.prompt(\"save as png\", url);\n          if (url) {\n            target.setAttribute(previewAttrName, url)\n            if (target instanceof Image) {\n              await lively.files.copyURLtoURL(target.src, url) \n            } else {\n              await Rasterize.elementToURL(target, url)\n            }\n            lively.notify(\"saved image to \", url, 10, () => {\n              lively.openBrowser(url)\n            })\n          }\n        },\n        \"\", '<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>'\n      ],\n      [\"save as...\", async () => {\n        var partName = target.getAttribute(\"data-lively-part-name\") || target.id ||  \"element\"\n        var name = await lively.prompt(\"save element as: \", `src/parts/${partName}.html`)\n        if (!name) return;\n        // var name = \"foo.html\"\n        var url = name\n        \n        if (!url.match(/https?:\\/\\//)) {\n          if (url.match(/^[a-zA-Z0-9]+\\:/)) {\n            // url = lively.swxURL(url)\n          } else {\n            url = lively4url + \"/\" + url \n          }\n        }\n        var source = \"\"\n        if (name.match(/\\.html$/)) {\n          source = target.outerHTML  \n        } else if (name.match(/\\.svg/)) {\n          var element = target.querySelector(\"svg\")\n          if (!element) throw new Error(\"Could not find SVG elment in target\");\n          var extent = lively.getExtent(element)\n          var tmp = document.createElement(\"div\")\n          tmp.innerHTML = element.outerHTML\n          tmp.querySelector(\"svg\").setAttribute(\"width\", extent.x)\n          tmp.querySelector(\"svg\").setAttribute(\"height\", extent.y)\n          source = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\\n' + \n            tmp.innerHTML  \n        } else if (name.match(/\\.png/)) {\n          if (target.tagName == \"IMG\") \n            element = target\n          else\n            target.querySelector(\"img\")\n          if (!element) throw new Error(\"Could not find img elment in target\");\n          // var extent = lively.getExtent(element)\n          // var tmp = document.createElement(\"div\")\n          // tmp.innerHTML = element.outerHTML\n          source = await fetch(element.src).then(r => r.blob())\n        } else{\n          // fall back to text\n          source = target.outerText\n        }\n        await lively.files.saveFile (url, source)\n        lively.notify(\"saved \", name, 10, () => {\n          lively.openBrowser(url)\n        })\n      },\n      \"\", '<i class=\"fa fa-file-o\" aria-hidden=\"true\"></i>'\n      ]\n    ];\n  }\n  \n  static openCenteredAt(morph, worldContext, evt) {\n    worldContext.appendChild(morph);\n    lively.setGlobalPosition(morph, pt(evt.clientX, evt.clientY)\n      .subPt(lively.getExtent(morph).scaleBy(0.5)))\n  }\n  \n  static preferenceEntry(preferenceKey) {\n    let enabledIcon = function(enabled) {\n      return enabled ? \n        '<i class=\"fa fa-check-square-o\" aria-hidden=\"true\"></i>' :\n        '<i class=\"fa fa-square-o\" aria-hidden=\"true\"></i>'    \n    }\n    \n    return [\n      lively.preferences.shortDescription(preferenceKey), (evt, item) => {\n        evt.stopPropagation();\n        evt.preventDefault();\n        \n        if (lively.preferences.get(preferenceKey))  {\n          lively.preferences.disable(preferenceKey)\n        } else {\n          lively.preferences.enable(preferenceKey)    \n        }\n        item.querySelector(\".icon\").innerHTML = enabledIcon(lively.preferences.get(preferenceKey)); \n      },\"\", enabledIcon(lively.preferences.get(preferenceKey))\n    ]\n  }\n  \n  // #important\n  static worldMenuItems(worldContext) {\n    \n    let connections = []\n    Connection.allConnections.forEach(connection => {\n      connections.push(connection)\n    })\n    let existingConnectionsMenu = connections.map(connection => [connection.getFullLabel(), \n      async () => {\n        let editor = await lively.openComponentInWindow('lively-connection-editor')\n        lively.setExtent(editor.parentElement, lively.pt(800, 50))\n        editor.setConnection(connection)\n      }]);\n        \n\n    var items =  [\n      [\"Workspace\", evt => {\n        this.hide();\n        lively.openWorkspace(\"\", evt.clientX && lively.getPosition(evt), worldContext)\n      }, \"CMD+K\", '<i class=\"fa fa-window-maximize\" aria-hidden=\"true\"></i>'],\n      [\"Browse/Edit\", async(evt) => {\n          var container = _.last(document.querySelectorAll(\"lively-container\"));\n          this.openComponentInWindow(\"lively-container\", evt, worldContext, pt(1210, 700)).then(comp => {\n            if (container)\n              comp.followPath(\"\" + container.getURL());\n            else\n              comp.followPath(lively4url +\"/\");\n          });\n        }, \n        \"CMD+SHIFT+B\", '<i class=\"fa fa-cogs\" aria-hidden=\"true\"></i>'],\n      // [\"File Editor\", evt => this.openComponentInWindow(\"lively-editor\", evt)],\n      // [\"File Browser\", evt => this.openComponentInWindow(\"lively-file-browser\", evt)],\n      [\"Component Bin\", evt => \n        this.openComponentInWindow(\"lively-component-bin\", evt, worldContext,  pt(950, 660)),\n       \"CMD+O\", '<i class=\"fa fa-th\" aria-hidden=\"true\"></i>'],\n      [\"Insert\", [\n        [\"Text\", evt => {\n          var morph  = document.createElement(\"div\");\n          morph.classList.add(\"lively-text\")\n\n          morph.innerHTML = \"Hello\";\n          morph.contentEditable = true;\n          morph.style.width = \"100px\"\n          worldContext.appendChild(morph);\n          this.openCenteredAt(morph, worldContext, evt)          \n          lively.hand.startGrabbing(morph, evt)\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          this.hide();\n        }, \"\", '<i class=\"fa fa-font\" aria-hidden=\"true\"></i>'],\n        [\"Rectangle\", evt => {\n          var morph  = document.createElement(\"div\");\n          morph.style.width = \"200px\";\n          morph.style.height = \"100px\";\n          morph.style.border = \"1px solid black\"\n          \n          this.openCenteredAt(morph, worldContext, evt)          \n          // morph.style.backgroundColor = \"blue\";\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          morph.style.backgroundColor = 'rgba(40,40,80,0.5)';\n          lively.hand.startGrabbing(morph, evt)\n          \n\n          this.hide();\n        }, \"\", '<i class=\"fa fa-square-o\" aria-hidden=\"true\"></i>'],\n        [\"Slider\", async evt => {\n          var morph  = document.createElement(\"input\");\n          morph.setAttribute('type', 'range')\n\n          worldContext.appendChild(morph);\n          this.openCenteredAt(morph, worldContext, evt)          \n          lively.hand.startGrabbing(morph, evt)\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          this.hide();\n        }, \"\", '<i class=\"fa fa-sliders\" aria-hidden=\"true\"></i>'],\n         [\"Drawing\", async evt => {\n          var morph  = document.createElement(\"lively-drawboard\");\n          morph.setAttribute(\"width\", \"400px\");\n          morph.setAttribute(\"height\", \"400px\");\n          await lively.components.openIn(worldContext, morph);\n\n          this.openCenteredAt(morph, worldContext, evt)          \n          lively.hand.startGrabbing(morph, evt)\n          // morph.style.backgroundColor = \"blue\";\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          morph.style.backgroundColor = 'rgb(255,250,205)';\n          this.hide();\n        }, \"\", '<i class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></i>'], \n        [\"Button\", async evt => {\n          var morph  = await lively.openPart(\"button\")\n          this.openCenteredAt(morph, worldContext, evt)          \n          lively.hand.startGrabbing(morph, evt)\n          // morph.style.backgroundColor = \"blue\";\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          this.hide();\n        }],\n        [\"List\", async evt => {\n          var morph  = await (<lively-list>\n              <li>one</li>\n              <li>two</li>\n              <li>three</li>\n              <li>four</li>\n            </lively-list>)\n          this.openCenteredAt(morph, worldContext, evt)          \n          lively.hand.startGrabbing(morph, evt)\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          this.hide();\n        }],\n        [\"Path\", async evt => {\n          var morph  = await lively.openPart(\"path\")\n          this.openCenteredAt(morph, worldContext, evt)          \n          lively.hand.startGrabbing(morph, evt)\n          morph.classList.add(\"lively-content\")\n          this.hide();\n        }],\n        \n      ]],\n      [\"Tools\", [\n        // [\"Services\", evt => this.openComponentInWindow(\"lively-services\", evt)],\n        // [\"Terminal\", evt => this.openComponentInWindow(\"lively-terminal\", evt)],\n        [\"Inspector\", evt => lively.openInspector(document.body)],\n        \n        [\"Console\", evt => this.openComponentInWindow(\"lively-console\", evt, worldContext), \n          \"CMD+J\", '<i class=\"fa fa-terminal\" aria-hidden=\"true\"></i>'],\n        [\"Search\", evt => this.openComponentInWindow(\"lively-search\", evt, worldContext),\n          \"CMD+SHIFT+F\",'<i class=\"fa fa-search\" aria-hidden=\"true\"></i>'],\n        [\"Plugin explorer\", async evt => {\n            const explorer = await this.openComponentInWindow('lively-plugin-explorer', evt, worldContext);\n            explorer.livelyExample();\n        }],\n        // ['Debugger', evt => lively.openDebugger().then( cmp), \n        //   \"\", '<i class=\"fa fa-chrome\" aria-hidden=\"true\"></i>'],\n        [\"Test Runner\", evt => this.openComponentInWindow(\"lively-testrunner\", evt, worldContext),\n          \"\", '<i class=\"fa fa-check-square-o\" aria-hidden=\"true\"></i>'],\n        [\"Drawboard\", evt => this.openComponentInWindow(\"lively-drawboard\", evt, worldContext),\n          \"\", '<i class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></i>'],\n        [\"Storage Setup\", evt => this.openComponentInWindow(\"lively-filesystems\", evt, worldContext),\n          \"\", '<i class=\"fa fa-cloud\" aria-hidden=\"true\"></i>'],\n        [\"Graph Control\", evt => this.openComponentInWindow(\"graph-control\", evt, worldContext),\n          \"Ctrl+Alt+G\", '<i class=\"fa fa-globe\" aria-hidden=\"true\"></i>'],\n        [\"Diary\", async evt => {\n          const diary = await this.openComponentInWindow(\"research-diary\", evt, worldContext);\n          diary.selectFirstEntry();\n        },\n          \"Ctrl+Alt+D\", '<i class=\"fa fa-book\" aria-hidden=\"true\"></i>'],\n        [\"Quicklinks\", async evt => {\n          var morph  = await lively.openPart(\"quicklinks\")          \n          lively.setPosition(morph, lively.pt(0,0), \"fixed\")\n          this.hide();\n        }],\n        [\"X-Ray\", async evt => {\n          var morph  = await lively.openPart(\"WorldMirror\") \n          lively.setGlobalPosition(morph, lively.getPosition(evt))\n          this.hide();\n        }, undefined, '<i class=\"fa fa-tv\" aria-hidden=\"true\"></i>'], \n        [\"X-Ray Events\", async evt => {\n          var morph  = await lively.openPart(\"XRayEvents\") \n          lively.setGlobalPosition(morph, lively.getPosition(evt))\n          this.hide();\n        }, undefined, '<i class=\"fa fa-tv\" aria-hidden=\"true\"></i>'],\n        [\"JSX-Ray \", async evt => {\n          const jsxRay  = await lively.create(\"jsx-ray\", document.body) \n          lively.setGlobalPosition(jsxRay, lively.getPosition(evt))\n          this.hide();\n        }, undefined, '<i class=\"fa fa-tv\" aria-hidden=\"true\"></i>'],\n        [\"AST Explorer\", evt => this.openComponentInWindow(\"lively-ast-explorer\", evt, worldContext),\n          undefined, '<i class=\"fa fa-tree\" aria-hidden=\"true\"></i>'],\n        [\"Invalidate caches\", async evt => {\n          lively4invalidateFileCaches()\n        }],\n        [\"Terminal\", evt => this.openComponentInWindow(\"lively-xterm\", evt, worldContext),\n          \"\", '<i class=\"fa fa-terminal\" aria-hidden=\"true\"></i>'],\n        [\"Chrome Service-Workers\", async evt => {\n          // does not work... security?\n          // window.open(\"chrome://inspect/#service-workers\")\n          // fuck it... just display it... better that nothing\n          var workspace = await lively.openWorkspace(\"chrome://inspect/#service-workers\")\n          workspace.parentElement.setAttribute(\"title\",\"open this in a tab...\")\n          workspace.mode = \"text\"\n        }],\n        [\"Handwriting\", async evt => {\n          var morph  = await this.openComponentInWindow(\"lively-handwriting\", evt, worldContext)\n          \n          lively.setExtent(morph.parentElement, lively.getExtent(morph).addPt(pt(0,20)))\n          // lively.setPosition(morph, lively.pt(0,0), \"fixed\")\n          // morph.style.bottom = \"0px\"\n          // morph.style.right= \"0px\"\n          this.hide();\n        }],\n        [\"Change Graph\", async evt => {\n          lively.openBrowser(lively4url + \"/doc/files/changesgraph.md\")\n          this.hide();\n        }],\n        \n        [\"Keyevent Display\", async evt => {\n          var comp = await (<keyevent-display></keyevent-display>)\n          document.body.appendChild(comp)\n          comp.style.zIndex = 10000\n          lively.setGlobalPosition(comp, lively.getPosition(evt))\n        }],\n        // [\"BP2019 Workspace\", async evt => {\n        //   const workspace = await this.openComponentInWindow(\"bp2019-workspace\", evt, worldContext);\n        // },\n        //   \"\", '<i class=\"fa fa-terminal\" aria-hidden=\"true\"></i>'],\n        [\"MLE IDE\", evt => {this.openComponentInWindow(\"lively-mle-ide\", evt, worldContext).then(w => {w.parentNode.style.height=\"100vh\";w.parentNode.style.width=\"100vw\";lively.setGlobalPosition(w.parentNode, [0,0])})}, \"\", '<i class=\"fa fa-database\" aria-hidden=\"true\"></i>']\n      ], undefined, '<i class=\"fa fa-wrench\" aria-hidden=\"true\"></i>'],\n      [\"Server\", [\n         [\"Invalidate Transpiled Files\", async evt => {\n           \n          const FilesCaches = await System.import(\"src/client/files-caches.js\")\n          var list = await FilesCaches.invalidateTranspiledFiles()\n          var workspace = await lively.openWorkspace(\"\" + list)\n          workspace.parentElement.setAttribute(\"title\",\"Purged Transpiled Files\")\n          workspace.mode = \"text\"\n          \n        }],\n         [\"Purged Transpiled Files WARNING! SLOW!\", async evt => {\n           \n          const FilesCaches = await System.import(\"src/client/files-caches.js\")\n          var list = await FilesCaches.purgeTranspiledFiles()\n          var workspace = await lively.openWorkspace(\"\" + list.join(\"\\n\"))\n          workspace.parentElement.setAttribute(\"title\",\"Purged Transpiled Files\")\n          workspace.mode = \"text\"\n          \n        }],\n         [\"Update Cached Bootfiles\", async evt => {\n           \n          const FilesCaches = await System.import(\"src/client/files-caches.js\")\n          var list = await FilesCaches.updateCachedFilesList()\n          lively.openBrowser(lively4url + \"/.lively4bootfilelist\", true)        \n        }],\n      ], undefined, '<i class=\"fa fa-wrench\" aria-hidden=\"true\"></i>'],\n      [\n        \"Favorites\",\n          Favorites.get().then(urls => {\n            return urls.map(url => [\n              url.replace(/\\/index.md$/i, '').replace(/.*\\//i, ''), // only files names\n              async evt => {\n                const comp = await this.openComponentInWindow(\"lively-container\", evt, worldContext, pt(1000,600));\n                return comp.editFile(url);\n              },\n              <span click={function (event) {\n                const li = lively.query(this, 'li');\n                if(li) { li.remove(); }\n                event.stopPropagation();\n                Favorites.remove(url);\n              }}><i class=\"fa fa-close\" aria-hidden=\"true\"></i></span>,\n              undefined\n            ]);\n          }), undefined, '<i class=\"fa fa-star\" aria-hidden=\"true\"></i>'\n      ],\n      [\n        \"Parts\",\n          fetch(lively4url + \"/src/parts\", {\n            method: \"OPTIONS\"\n          }).then(r => r.json()).then( json => json.contents.filter(ea => ea.name.match(/\\.html/)).map(ea => {\n            var partName = \"\" + ea.name.replace(/\\.html/,\"\");\n            return [\n              partName, \n              async (evt) =>  {\n                var morph  = await lively.openPart(partName)          \n                lively.setGlobalPosition(morph, lively.getPosition(evt))\n                lively.hand.startGrabbing(morph, evt)\n                morph.classList.add(\"lively-content\")\n                this.hide();\n              }]}).concat([[\n            \"Vivide Applications\",\n            lively.files.statFile(applicationFolder).then(r => (JSON.parse(r).contents || [])\n              .filter(({ type }) => type=== 'file')\n              .map(({ name }) => [name.split('.')[0], async () => {\n                const content = JSON.parse(await lively.files.loadFile(applicationFolder+name));\n                const n = name.split('.')[0];\n                await createView(content, false, true, n);}\n              ]))\n          ]])), undefined, '<i class=\"fa fa-th-large\" aria-hidden=\"true\"></i>'\n      ],\n      [\n        \"Windows\", \n        Windows.allWindows().map(ea => [\n          \"\" + ea.getAttribute(\"title\"),\n          () => lively.gotoWindow(ea),\n          (<span click={function (event) {\n            ea.remove();\n            const li = lively.query(this, 'li')\n            if(li) {\n             li.remove();\n            }\n            event.stopPropagation();\n          }}><i class=\"fa fa-close\" aria-hidden=\"true\"></i></span>),\n          ea.getAttribute(\"icon\")\n        ]).concat([[\"Close all\", async () => {\n          if(await lively.confirm('Close all windows?')) {\n            document.body.querySelectorAll('lively-window').forEach(w => w.remove())\n          } \n        }]]), undefined, '<i class=\"fa fa-window-restore\" aria-hidden=\"true\"></i>'\n      ],\n      [\"Debug\", [\n          ['Connections', existingConnectionsMenu, '', '<i class=\"fa fa-arrow-right\" aria-hidden=\"true\"></i>'],\n          ['Restore content', \n            lively.persistence.restoreBackupContextMenuItems()\n          ]\n        ], undefined, '<i class=\"fa fa-bug\" aria-hidden=\"true\"></i>'\n      ],\n      \n      [\"View\", [\n        [\"Reset View\", () => ViewNav.resetView(), \n          \"\",'<i class=\"fa fa-window-restore\" aria-hidden=\"true\"></i>'],\n        \n        !document.webkitIsFullScreen ?\n            [\"Enter Fullscreen\", () => {\n                document.documentElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)\n              },\n              \"F11\", '<i class=\"fa fa-arrows-alt\" aria-hidden=\"true\"></i>'\n            ] :\n            [\"Leave Fullscreen\", () => document.webkitCancelFullScreen(),\n              \"F11\", '<i class=\"fa fa-times-circle-o\" aria-hidden=\"true\"></i>'\n          ],\n\n        [\"Gather Windows\", () => {\n            var pos = pt(0,0)\n            _.sortBy(worldContext.querySelectorAll(\":scope > lively-window\"), ea => {\n              return getComputedStyle(ea).zIndex\n            }).forEach(ea => {\n              lively.setPosition(ea, pos)\n              pos = pos.addPt(pt(20,20))\n            })\n          },\n          \"\", '<i class=\"fa fa-window-restore\" aria-hidden=\"true\"></i>'\n        ],\n        [\"Explode Windows\", () => {\n            Layout.expandUntilNoIntersectionsExplosion()\n          },\n          \"\", '<i class=\"fa fa-window-restore\" aria-hidden=\"true\"></i>'\n        ],\n        [\"Show Windows\", () => {\n            var pos = pt(0,0)\n            var windowsByWidth = _.groupBy(document.body.querySelectorAll(\"lively-window\"), ea => ea.clientWidth) \n            Object.keys(windowsByWidth).forEach( width => {\n              windowsByWidth[width].forEach( ea => {\n                lively.setPosition(ea, pos)\n                pos = pos.addPt(pt(0, Math.max(lively.getExtent(ea).y, 50) + 10))\n              })\n              pos = pt(pos.x + Math.min(1000, Number(width)), 0)\n            })\n          },\n          \"\", '<i class=\"fa fa-window-restore\" aria-hidden=\"true\"></i>',\n        ],\n        [\"Snap All to Grid Now\", () => {\n          Grid.snapAllTopLevelContent()\n        },\n        \"\", '<i class=\"fa fa-th\" aria-hidden=\"true\"></i>'\n        ]\n      ]],\n      [\"Documentation\", [\n        [\"Keyboard Shortcuts\", () => {\n          lively.openBrowser(lively4url + \"/doc/manual/shortcuts.md\")\n          }, \n          \"\", '<i class=\"fa fa-file-text-o\" aria-hidden=\"true\"></i>'],\n        [\"Devdocs.io\", (evt) => {\n            this.openComponentInWindow(\"lively-help\",  evt, worldContext);\n          }, \n          \"CMD+H\", '<i class=\"fa fa-book\" aria-hidden=\"true\"></i>'],\n        [\"Docs\", (evt) => {\n          this.openComponentInWindow(\"lively-container\", evt, worldContext).then(comp => {\n              comp.followPath(lively4url + \"/doc/index.md\");\n            });\n          },\n          \"\",'<i class=\"fa fa-file-text-o\" aria-hidden=\"true\"></i>'\n        ],\n        [\"Vivide CheatSheet\", evt => {\n          this.openComponentInWindow(\"lively-container\", evt, worldContext).then(comp => {\n            comp.followPath(lively4url + \"/src/client/vivide/cheatsheet.md\");\n          });\n        },undefined, '<i class=\"fa fa-inbox\" aria-hidden=\"true\"></i>'],\n        [\"Vivide Scripts\", evt => this.openComponentInWindow(\"lively-container\", evt, worldContext).then(comp => comp.followPath(lively4url+\"/src/client/vivide/scripts/index.md\")), /* shortcut info */undefined, \"<i class='fa fa-wrench' aria-hidden='true'></i>\"],\n        [\"Journal\", (evt) => {\n          this.openComponentInWindow(\"lively-container\", evt, worldContext, pt(1000,600)).then(comp => {\n            comp.followPath(lively4url + \"/doc/journal/index.md\");\n          });\n        },\n          \"\",'<i class=\"fa fa-file-text-o\" aria-hidden=\"true\"></i>'],\n        [\"Issues\", (evt) => { \n          window.open(\"https://github.com/LivelyKernel/lively4-core/issues\") ;\n        },undefined, '<i class=\"fa fa-bug\" aria-hidden=\"true\"></i>'],\n        [\"Project Board\", (evt) => {\n           window.open(\"https://github.com/LivelyKernel/lively4-core/projects/1\") ;\n        },undefined, '<i class=\"fa fa-bug\" aria-hidden=\"true\"></i>'],\n        [\"Module Info\", () => {\n          Info.showModuleInfo()\n          },undefined, '<i class=\"fa fa-info\" aria-hidden=\"true\"></i>']\n      ]],\n      [\"Preferences\",\n        [[\"Search Roots\", [[\"update all\", () => {\n          SearchRoots.updateAllSearchRoots()\n        }]].concat(\n          SearchRoots.getSearchRoots().map(ea => {\n            return [ea.replace(lively4url.replace(/\\/[^/]*$/,\"\"),\"\"), [\n              [\"browse\", () => lively.openBrowser(ea)],\n              [\"update\", () => SearchRoots.addSearchRoot(ea)],\n              [\"remove\", () => SearchRoots.removeSearchRoot(ea)],\n            ]]  \n          }))]].concat(\n          lively.preferences.listBooleans()\n            .map(ea => this.preferenceEntry(ea)))\n      ],\n      [\"Sync Github\", (evt) => this.openComponentInWindow(\"lively-sync\", evt, worldContext, pt(900, 500)), \n        \"CMD+SHIFT+G\",'<i class=\"fa fa-github\" aria-hidden=\"true\"></i>']\n    ];\n    \n    \n    if (worldContext !== document.body) {\n      items.push(...[[\"save as ..\", () => {\n          if (worldContext.onSaveAs)\n            worldContext.onSaveAs() \n          else html.saveCurrentPageAs();\n        }],\n\n        [\"Save\", () => {\n            if (worldContext.onSave)\n              worldContext.onSave()\n            else\n              html.saveCurrentPage();\n          },\n          \"CMD+S\", '<i class=\"fa fa-cloud-upload\" aria-hidden=\"true\"></i>']])      \n    }\n    \n    return items\n  }\n  \n  static items (target, worldContext = document.body) {\n    console.log(\"[context menu] \" + worldContext)\n    if (target) {\n      return this.targetMenuItems(target);\n    } else {\n      return this.worldMenuItems(worldContext);\n    }\n  }\n  \n  static openIn(container, evt, target, worldContext, optItems) {\n    this.hide();\n    this.firstEvent = evt\n\n    var menu = lively.components.createComponent(\"lively-menu\");\n    return lively.components.openIn(container, menu).then(() => {\n      if (this.menu) this.menu.remove();\n      this.menu = menu;\n      if (evt) {\n        lively.setGlobalPosition(menu, pt(evt.clientX, evt.clientY))\n      }\n      // menu.focus()\n      lively.focusWithoutScroll(menu)\n      menu.openOn(optItems || this.items(target, worldContext), evt)\n      \n      // defere event registration to prevent closing the menu as it was opened\n      setTimeout(() => {\n        lively.addEventListener(\"contextMenu\", document.documentElement, \"click\", () => {\n          this.hide();\n        });        \n      }, 0)\n      \n      return menu;\n    });\n  }\n}\n\nif (self.lively && lively.contextmenu) {\n  lively.contextmenu = ContextMenu // make it live...\n}\n"]}