Я работаю над дублированием функциональности bbCodeXtra , устаревшего аддона Firefox.
Я создал таблицу, в которой подробно описываются все функции, их иерархия и т. Д.
Используя обычную систему меню, я бы в итоге получил меню, подобные этому:
browser.menus.create({
id: "test_clipboard",
title: " &Test Clipboard",
contexts: ["all"]
}, onCreated);
browser.menus.create({
id: "clipboard",
title: " Check Clipboard",
contexts: ["all"]
}, onCreated);
Это могло бы привести к таким выражениям, как это:
browser.menus.onClicked.addListener((info, tab) => {
switch (info.menuItemId) {
case "test_clipboard":
browser.tabs.sendMessage(tab.id,{runwhat: "zzBBCode", ParseArg: "[b]{{selection}}[/b]"});
break;
case "clipboard":
browser.tabs.sendMessage(tab.id,{runwhat: "zzBBCode", ParseArg: "[b]{{selection}}[/b]"});
break;
}
});
Дело в том,что между различными опциями (не включая пользовательские теги пользователей) у меня более 100 опций меню.(У вас есть подменю для bbCode, Vbulletin, markdown, html, xml и т. Д. И подменю под каждым из них)
Я бы предпочел сделать такую таблицу, которую я уже в значительной степениустановить в электронной таблице (не издевайтесь надо мной), что будет примерно так:
| Menu ID | Menu Title | Parent ID | Contexts | Code to Execute |
| MenuID1 | MenuTitle1 | ParentID1 | Context1 | Code to Execut1 |
| MenuID2 | MenuTitle2 | ParentID2 | Context2 | Code to Execut2 |
Я думаю, что в этом случае структура меню, представленная в каком-либо табличном формате, упростит написание иотладка меню.
Мой вопрос заключается в том, может ли какой-нибудь трюк с массивами / объектами / программированием позволить мне сделать это?
По сути, можно было бы определить, чтово всех меню с первого взгляда, вместо того, чтобы медленно пробираться вниз к каждому пункту меню для устранения неполадок.
Видя, как мой код настолько уродлив, что он, вероятно, вызывает рак, я полагаю, что ядолжен сделать его как можно более читабельным, когда я или мой еще не раковый преемник попытаемся обновить или сохранить его.
Окончательная структура меню должна выглядеть примерно таккак это: Структура меню изображения