{"version":3,"names":["openMenu","astCapabilities","codeMirror","livelyCodeMirror","fa","name","modifiers","map","m","join","generateGenerationSubmenu","submenu","menu","remove","generateClass","selectedPath","getInnermostPathContainingSelection","programPath","firstSelection","isInDescribe","unshift","generateTestCase","isDirectlyIn","push","generateGetter","generateSetter","generateImportSubmenu","identName","functions","classes","findImports","length","forEach","url","replace","lively4url","addImport","cl","menuItems","extractExpressionIntoLocalVariable","inlineLocalVariable","wrapExpressionIntoActiveExpression","rename","swapConditional","onSelect","selection","selectMethodExtraction","changedSelectionInMenu","selectPaths","selectedPaths","onDeselect","undoSelection","generateHTMLAccessors","printAllBindings","livelyNotify","menuPosition","cursorCoords","ContextMenu","openIn","document","body","clientX","left","clientY","bottom","undefined","addEventListener","focus"],"sources":["lively-code-mirror-context-menu.js"],"sourcesContent":["import ContextMenu from 'src/client/contextmenu.js';\n\nexport default async function openMenu(astCapabilities, codeMirror, livelyCodeMirror) {\n\n  function fa(name, ...modifiers) {\n    return `<i class=\"fa fa-${name} ${modifiers.map(m => 'fa-' + m).join(' ')}\"></i>`;\n  }\n  \n  /*MD ### Generate Submenus MD*/\n\n  async function generateGenerationSubmenu() {\n\n    // for now, classes can be generated everywhere\n    // if this isn't wanted anymore, scope checks can be done as can be seen below\n    let submenu = [['Class', () => {\n        menu.remove();\n        astCapabilities.generateClass();\n      }, '→', fa('suitcase')]];\n\n    const selectedPath = astCapabilities.getInnermostPathContainingSelection(astCapabilities.programPath, astCapabilities.firstSelection);\n    \n    //add testcase if in describe\n    if (astCapabilities.isInDescribe(selectedPath)) {\n      submenu.unshift(['Testcase', () => {\n        menu.remove();\n        astCapabilities.generateTestCase();\n      }, '→', fa('suitcase')]);\n    }\n    \n    //add getter / setter if directly in ClassBody or ObjectExpression\n    if (astCapabilities.isDirectlyIn([\"ClassBody\", \"ObjectExpression\"], selectedPath)) {\n      submenu.push(['Getter', () => {\n        menu.remove();\n        astCapabilities.generateGetter();\n      }, '→', fa('suitcase')], ['Setter', () => {\n        menu.remove();\n        astCapabilities.generateSetter();\n      }, '→', fa('suitcase')]);\n    }\n\n    return submenu;\n  }\n\n  async function generateImportSubmenu() {\n    let { identName, functions, classes } = await astCapabilities.findImports();\n    let submenu = [];\n    if (!identName || functions.length == 0 && classes.length == 0) {\n      submenu.push(['none', () => {\n        menu.remove();\n      }, '', '']);\n    } else {\n      functions.forEach(url => submenu.push([url.replace(lively4url, ''), () => {\n        menu.remove();\n        astCapabilities.addImport(url, identName, true);\n      }, '-', fa('share-square-o')]));\n      classes.forEach(cl => submenu.push([cl.name + \", \" + cl.url.replace(lively4url, ''), () => {\n        menu.remove();\n        astCapabilities.addImport(cl.url, cl.name, false);\n      }, '-', fa('share-square-o')]));\n    }\n    return submenu;\n  }\n\n  /*MD ### Generate Factoring Menu MD*/\n\n  const menuItems = [['selection to local variable', () => {\n    menu.remove();\n    astCapabilities.extractExpressionIntoLocalVariable();\n  }, '→', fa('share-square-o', 'flip-horizontal')], ['inline variable', () => {\n    menu.remove();\n    astCapabilities.inlineLocalVariable();\n  }, '→', fa('external-link', 'flip-vertical')], ['wrap into active expression', () => {\n    menu.remove();\n    astCapabilities.wrapExpressionIntoActiveExpression();\n  }, '→', fa('suitcase')], ['Rename', () => {\n    menu.remove();\n    astCapabilities.rename();\n  }, '→', fa('suitcase')], ['Swap then and else of conditional', () => {\n    menu.remove();\n    astCapabilities.rename();\n  }, 'swap', fa('suitcase')], ['Extract Method', () => {\n    menu.remove();\n    astCapabilities.swapConditional()\n  }, 'Alt+M', fa('suitcase'), {\n    onSelect: () => {\n      const selection = astCapabilities.selectMethodExtraction(astCapabilities.programPath, true);\n      if (selection) {\n        openMenu.changedSelectionInMenu = true;\n        astCapabilities.selectPaths(selection.selectedPaths);\n      } else {\n        openMenu.changedSelectionInMenu = false;\n      }\n    },\n    onDeselect: () => {\n      if (openMenu.changedSelectionInMenu) {\n        codeMirror.undoSelection();\n      }\n    }}], ['Generate HTML Accessors', () => {\n      menu.remove();\n      astCapabilities.generateHTMLAccessors();\n    }, 'Alt+H', fa('suitcase')],\n                     ['Print References', () => {\n                       astCapabilities.printAllBindings();\n                       menu.remove();\n                     }, 'Alt+I', fa('suitcase')],\n                     [\n                       'lively', [['lively.notify', () => {\n                         menu.remove();\n                         astCapabilities.livelyNotify();\n                       }, '+', fa('plus')],\n                                  ['lively4url', () => {\n                                    menu.remove();\n                                    astCapabilities.lively4url();\n                                  }, '+', fa('plus')],\n                                 ]],\n                     ['Generate', generateGenerationSubmenu()], ['Import', generateImportSubmenu()]];\n  var menuPosition = codeMirror.cursorCoords(false, \"window\");\n\n  const menu = await ContextMenu.openIn(document.body, { clientX: menuPosition.left, clientY: menuPosition.bottom }, undefined, document.body, menuItems);\n  menu.addEventListener(\"DOMNodeRemoved\", () => {\n    livelyCodeMirror.focus();\n  });\n}\n"],"mappings":"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"}