{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/client/contextmenu.js"],"names":["html","pt","ViewNav","Layout","Windows","Grid","Info","_","Rasterize","Favorites","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","windowExtentOffeset","openInWindow","pos","w","create","setGlobalPosition","getGlobalPosition","appendChild","setPosition","getExtent","addPt","style","position","width","height","id","setAttribute","stripWindow","localName","Error","subPt","targetMenuItems","wasEditable","contentEditable","wasDisabled","disabled","targetInWindow","tagName","showElement","showHalo","allParents","map","ea","elementToCSSName","Array","from","childNodes","showSource","showClassSource","insertBefore","makeLocalSpace","Image","url","getAttribute","match","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","openWorkspace","last","querySelectorAll","followPath","getURL","classList","add","hand","startGrabbing","body","border","backgroundColor","components","openPart","diary","selectFirstEntry","undefined","jsxRay","lively4invalidateFileCaches","workspace","mode","FilesCaches","System","import","list","invalidateTranspiledFiles","purgeTranspiledFiles","join","updateCachedFilesList","urls","replace","editFile","event","li","query","method","json","contents","filter","allWindows","gotoWindow","concat","confirm","forEach","resetView","webkitIsFullScreen","webkitRequestFullScreen","Element","ALLOW_KEYBOARD_INPUT","webkitCancelFullScreen","sortBy","getComputedStyle","zIndex","expandUntilNoIntersectionsExplosion","windowsByWidth","groupBy","clientWidth","Object","keys","Math","max","min","Number","snapAllTopLevelContent","pageX","pageY","showModuleInfo","listBooleans","push","onSaveAs","saveCurrentPageAs","onSave","saveCurrentPage","firstEvent","createComponent","focusWithoutScroll","openOn","setTimeout","addEventListener","self","contextmenu"],"mappings":"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","file":"contextmenu.js","sourcesContent":["/*\n * Lively4 ContextMenu\n * - creates the \"world menu\" for Lively4\n */ \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\"\n\n// import lively from './lively.js'; #TODO resinsert after we support cycles again\n\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      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.getPosition(comp);\n    var w = await lively.create(\"lively-window\")\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  \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).map(\n            ea => [lively.elementToCSSName(ea), () => {lively.showHalo(ea)}])\n          ],\n          [\"children\",  Array.from(target.childNodes).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      // [\"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            ContextMenu.stripWindow(target, evt) :\n            ContextMenu.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              debugger\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  static worldMenuItems(worldContext) {\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\", 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(850, 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         [\"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        [\"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        // ['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      ], 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(/.*\\//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              }]})), 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      [\"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\",  pt(evt.pageX, evt.pageY), 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        [\"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        [\"Tools and Workflows\", (evt) => {\n          this.openComponentInWindow(\"lively-container\", evt, worldContext, pt(1250,700)).then(comp => {\n            comp.followPath(lively4url + \"/doc/presentation/index.md\");\n          });\n        },\n          \"\",'<i class=\"fa fa-file-text-o\" aria-hidden=\"true\"></i>'],\n        [\"Issues\", (evt) => {\n           this.openComponentInWindow(\"lively-container\", evt, worldContext).then(comp => {\n            comp.followPath(lively4url + \"/doc/stories.md\");\n          });\n          // window.open(\"https://github.com/LivelyKernel/lively4-core/issues\") ;\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        lively.preferences.listBooleans()\n          .map(ea => this.preferenceEntry(ea))\n      ],\n      [\"Sync Github\", (evt) => this.openComponentInWindow(\"lively-sync\", evt, worldContext, pt(800, 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    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"]}