Closed Hatead1 closed 5 years ago
По первому:
теперь можно задать функцию в searchKeep
, которая при возвращении true не будет убирать пункт при поиске
searchKeep: title => keepItemTitles.includes(title)
где keepItemTitles
может быть ['Refresh']
, тогда этот пункт не будет убран
Супер! Спасибо. Проверю попозже.
А кстати, как запихнуть элементы items: {} в подменю, если это необходимо?
Сделать вложенный объект
Есть некая странность в работе: конструкция
let dontHide = ['click'];
searchKeep: title => dontHide.includes(title)
items: { "click"(){alert(1);} }
работает, но если поменять 'click' на 'Click' - перестает с ошибкой vue в консоли.
Сделать вложенный объект
Можно пример?
Добавлю, даже работающий вариант генерит ошибку в консоли. Вот мой код полностью
let readyMenu = [10, 12, 14];
let dontHide = ['click'];
editor.use(ContextMenuPlugin.default, {
searchBar: true,
delay: 300,
searchKeep: title => dontHide.includes(title),
allocate(component) {
if (readyMenu.includes(component.path)) return ['ready'];
return ['unready'];
},
items: {
"click"(){alert(1);}
}
});
работает, но если поменять 'click' на 'Click' - перестает с ошибкой vue в консоли.
title возвращается в lowercase
даже работающий вариант генерит ошибку в консоли.
какую? На codepen с Вашим кодом не наблюдаю ошибок
vue.js:597 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "value"
found in
---> <Search> at C:\new\context-menu-plugin\src\menu\Search.vue
<Menu> at C:\new\context-menu-plugin\src\menu\Menu.vue
<Root>
title возвращается в lowercase
Как-то не очень наглядно, надо постоянно про это помнить. Дубли строковые опять же в коде. Ну да ладно, работает, потом можно будет додумать.
Подправьте в README, кстати. Большая буква в Refresh еще кого-нить введет в заблуждение.
searchKeep: title => true, // leave item when searching, optional. For example, title => ['refresh'].includes(title),
allocate(component) {
if (readyMenu.includes(component.path)) return ['ready'];
return ['unready'];
},
items: {
"Refresh"(){ console.log('Works!');}
}
Почему же? В items все в норме? Главное, что title нужно проверять как lowercase
Ну так я там и поправил, в комменте после // И сам items сделал Refresh вместо click.
For example, title => ['refresh'].includes(title) (с ['Refresh'] не работает).
Вы в lobby бываете? Вопросик есть по движку.. Не могу понять, как удалить соединения при удалении input|output.
Ну так я там и поправил, в комменте после // И сам items сделал Refresh вместо click.
тогда лучше сделаю case insensitive
Согласен :)
Во втором пункту: модификация текущего меню может привести к проблемам с поддерживаемостью кода, поэтому лучше создать отдельное Dock меню, с тем же функционалом (можно вынести в миксины), но другим расположением
Все же, лучше будет сделать Dock меню в виде отдельного плагина. Более того, может быть полезно не только меню, но и псевдоузлы, которые можно добавлять перетаскиванием
Discussion of the dock menu is transferred to https://github.com/retejs/dock-plugin/issues
По первому пункту - нужны пункты меню, которые не исчезают, когда с окошке поиска вводится буква, которой нет в слове. Это всяческая служебная мура, типа сохранить, очистить и т.п. Добавить флаг "не скрывать". По второму - нужно фиксированное меню, которое всегда на экране в своем контейнере. Вызывать меню правым кликом реально достает после 10 минут работы. Собственно, это тоже пара свойств: id контейнера, где будет жить меню, немножко другие стили и тип в конструкторе (fixed/float).