{"version":3,"sources":["https://lively-kernel.org/lively4/composed-offset/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","insertElementAtEvent","morph","pos","openCenteredAt","window","that","haloService","showHalos","grab","halo","get","delta","subPt","getGlobalPosition","moveBy","start","addEventListener","body","move","stop","windowExtentOffeset","openInWindow","w","create","appendChild","setGlobalPosition","setPosition","getExtent","addPt","style","position","width","height","id","setAttribute","stripWindow","localName","Error","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","clientX","clientY","scaleBy","preferenceEntry","preferenceKey","enabledIcon","enabled","preferences","shortDescription","item","stopPropagation","preventDefault","disable","enable","worldMenuItems","connections","allConnections","forEach","connection","push","existingConnectionsMenu","getFullLabel","setConnection","openWorkspace","last","querySelectorAll","followPath","getURL","classList","add","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","hand","startGrabbing","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","open","showModuleInfo","updateAllSearchRoots","getSearchRoots","addSearchRoot","removeSearchRoot","listBooleans","onSaveAs","saveCurrentPageAs","onSave","saveCurrentPage","console","log","firstEvent","createComponent","focusWithoutScroll","openOn","setTimeout","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  static insertElementAtEvent(morph, evt, worldContext) {\n    var pos = lively.getPosition(evt)\n    this.openCenteredAt(morph, worldContext, evt)          \n\n\n    // lively.hand.startGrabbing(morph, evt)\n    window.that = morph\n    lively.haloService.showHalos(morph)\n    var grab = lively.halo.get('lively-halo-grab-item')\n    var delta = pos.subPt(lively.getGlobalPosition(grab)).subPt(lively.pt(10,10))\n    lively.moveBy(morph, delta)\n    lively.haloService.showHalos(morph)\n\n    grab.start(evt)\n\n    lively.addEventListener(\"ContextMenuInsert\", document.body.parentElement, \"mousemove\", (evt) => {\n      grab.move(evt)\n      lively.haloService.showHalos(morph)\n\n    })\n\n    lively.addEventListener(\"ContextMenuInsert\",  document.body.parentElement, \"mouseup\", (evt) => {\n      lively.removeEventListener(\"ContextMenuInsert\", document.body.parentElement)\n      grab.stop(evt)\n\n    })\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    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          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          \n          this.insertElementAtEvent(morph, evt, worldContext)\n          \n          this.hide();\n        }, \"\", '<i class=\"fa fa-font\" aria-hidden=\"true\"></i>'],\n        [\"Rectangle\", async (evt) => {\n          var morph  = <div></div>;\n          morph.style.width = \"200px\";\n          morph.style.height = \"100px\";\n          morph.style.border = \"1px solid black\"\n          \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          \n          this.insertElementAtEvent(morph, evt, worldContext)\n         \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          worldContext.appendChild(morph);\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          this.insertElementAtEvent(morph, evt, worldContext)\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          // morph.style.backgroundColor = \"blue\";\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n          this.insertElementAtEvent(morph, evt, worldContext)\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          // morph.style.backgroundColor = \"blue\";\n          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n           this.insertElementAtEvent(morph, evt, worldContext)\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          if (worldContext === document.body) {\n            morph.classList.add(\"lively-content\")\n          }\n           this.insertElementAtEvent(morph, evt, worldContext)\n          this.hide();\n        }],\n        [\"Path\", async evt => {\n          var morph  = await lively.openPart(\"path\")\n          morph.classList.add(\"lively-content\")\n          this.insertElementAtEvent(morph, evt, worldContext)\n          this.hide();\n        }],\n        [\"Connector\", async evt => {\n          var morph  = await (<lively-connector></lively-connector>)\n          this.insertElementAtEvent(morph, evt, worldContext)\n          this.hide();\n        }],\n        \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        if (evt.clientX !== undefined && evt.clientY !== undefined) {\n          lively.setGlobalPosition(menu, pt(evt.clientX, evt.clientY))\n        } else if(evt.x !== undefined && evt.y !== undefined) {\n          lively.setGlobalPosition(menu, pt(evt.x, evt.y))\n        } else {\n          lively.setGlobalPosition(menu, lively.getGlobalPosition(target))\n        }\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"]}