refactor(core): 将 菜单项生成 从Mixly.ContextMenu调整到Mixly.Menu

This commit is contained in:
王立帮
2025-05-19 20:02:18 +08:00
parent 4074e58c42
commit ba67cf41fb
28 changed files with 116 additions and 115 deletions

View File

@@ -1 +1 @@
<script defer=defer src=main.bundle.ec93e14c.js></script><link href=styles/main.b29a8ee0.css rel=stylesheet><xml></xml> <script defer=defer src=main.bundle.ed4e6fc5.js></script><link href=styles/main.b29a8ee0.css rel=stylesheet><xml></xml>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
import * as goog from 'goog'; import * as goog from 'goog';
import { Msg } from 'blockly/core'; import { Msg } from 'blockly/core';
import { Workspace, ContextMenu } from 'mixly'; import { Workspace, Menu } from 'mixly';
import FSArduEsp32Handler from './fs-board-handler'; import FSArduEsp32Handler from './fs-board-handler';
@@ -25,7 +25,7 @@ export default function addBoardFSItem () {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.BOARD_FS, ''), name: Menu.getItem(Msg.BOARD_FS),
callback: () => { callback: () => {
statusBarsManager.add({ statusBarsManager.add({
type: 'board-fs', type: 'board-fs',

View File

@@ -1,6 +1,6 @@
import * as goog from 'goog'; import * as goog from 'goog';
import { Msg } from 'blockly/core'; import { Msg } from 'blockly/core';
import { Workspace, ContextMenu } from 'mixly'; import { Workspace, Menu } from 'mixly';
import FSArduEsp8266Handler from './fs-board-handler'; import FSArduEsp8266Handler from './fs-board-handler';
@@ -25,7 +25,7 @@ export default function addBoardFSItem () {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.BOARD_FS, ''), name: Menu.getItem(Msg.BOARD_FS),
callback: () => { callback: () => {
statusBarsManager.add({ statusBarsManager.add({
type: 'board-fs', type: 'board-fs',

View File

@@ -8,7 +8,7 @@ import {
HTMLTemplate, HTMLTemplate,
DragV, DragV,
StatusBar, StatusBar,
ContextMenu, Menu,
Debug, Debug,
StatusBarsManager, StatusBarsManager,
Workspace Workspace
@@ -155,7 +155,7 @@ export default class StatusBarFileSystem extends PageBase {
type: 'copy_path', type: 'copy_path',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['fileTree.copyPath'], ''), name: Menu.getItem(Msg.Lang['fileTree.copyPath']),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let outPath = null; let outPath = null;
let type = $trigger.attr('type'); let type = $trigger.attr('type');
@@ -198,7 +198,7 @@ export default class StatusBarFileSystem extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.ampy.refresh'], ''), name: Menu.getItem(Msg.Lang['statusbar.ampy.refresh']),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let type = $trigger.attr('type'); let type = $trigger.attr('type');
if (type === 'root') { if (type === 'root') {
@@ -235,7 +235,7 @@ export default class StatusBarFileSystem extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.ampy.exit'], ''), name: Menu.getItem(Msg.Lang['statusbar.ampy.exit']),
callback: () => { callback: () => {
this.closeFS(); this.closeFS();
} }
@@ -257,7 +257,7 @@ export default class StatusBarFileSystem extends PageBase {
type: 'cut', type: 'cut',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.cut'], 'Ctrl+X'), name: Menu.getItem(Msg.Lang['editor.contextMenu.cut'], 'Ctrl+X'),
callback: () => this.#editor_.cut() callback: () => this.#editor_.cut()
} }
}); });
@@ -266,7 +266,7 @@ export default class StatusBarFileSystem extends PageBase {
type: 'copy', type: 'copy',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'), name: Menu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'),
callback: () => this.#editor_.copy() callback: () => this.#editor_.copy()
} }
}); });
@@ -275,7 +275,7 @@ export default class StatusBarFileSystem extends PageBase {
type: 'paste', type: 'paste',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.paste'], 'Ctrl+V'), name: Menu.getItem(Msg.Lang['editor.contextMenu.paste'], 'Ctrl+V'),
callback: () => this.#editor_.paste() callback: () => this.#editor_.paste()
} }
}); });
@@ -289,7 +289,7 @@ export default class StatusBarFileSystem extends PageBase {
type: 'togglecomment', type: 'togglecomment',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.togglecomment'], 'Ctrl+/'), name: Menu.getItem(Msg.Lang['editor.contextMenu.togglecomment'], 'Ctrl+/'),
callback: () => this.#editor_.commentLine() callback: () => this.#editor_.commentLine()
} }
}); });
@@ -311,7 +311,7 @@ export default class StatusBarFileSystem extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['file.save'], 'Ctrl+S'), name: Menu.getItem(Msg.Lang['file.save'], 'Ctrl+S'),
callback: async () => { callback: async () => {
await this.put(); await this.put();
} }

View File

@@ -15,6 +15,10 @@
cursor: inherit; cursor: inherit;
} }
.menu-line > label.text:before {
margin-left: 0;
}
.mixly-drapdown-menu { .mixly-drapdown-menu {
width: fit-content; width: fit-content;
} }

View File

@@ -9,7 +9,6 @@ goog.require('Mixly.Msg');
goog.require('Mixly.Drag'); goog.require('Mixly.Drag');
goog.require('Mixly.Nav'); goog.require('Mixly.Nav');
goog.require('Mixly.Menu'); goog.require('Mixly.Menu');
goog.require('Mixly.ContextMenu');
goog.require('Mixly.Workspace'); goog.require('Mixly.Workspace');
goog.require('Mixly.FooterBar'); goog.require('Mixly.FooterBar');
goog.require('Mixly.HTMLTemplate'); goog.require('Mixly.HTMLTemplate');
@@ -44,7 +43,6 @@ const {
Drag, Drag,
Nav, Nav,
Menu, Menu,
ContextMenu,
Workspace, Workspace,
FooterBar, FooterBar,
HTMLTemplate, HTMLTemplate,
@@ -467,7 +465,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.file.new'], 'Ctrl+N'), name: Menu.getItem(Msg.Lang['nav.btn.file.new'], 'Ctrl+N', 'icon-doc-new'),
callback: () => File.new() callback: () => File.new()
} }
}); });
@@ -486,7 +484,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.file.open'], 'Ctrl+O'), name: Menu.getItem(Msg.Lang['nav.btn.file.open'], 'Ctrl+O', 'icon-doc'),
callback: (key, opt) => File.open() callback: (key, opt) => File.open()
} }
}); });
@@ -510,7 +508,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.file.save'], 'Ctrl+S'), name: Menu.getItem(Msg.Lang['nav.btn.file.save'], 'Ctrl+S', 'icon-floppy'),
callback: () => File.save() callback: () => File.save()
} }
}); });
@@ -528,7 +526,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.file.saveAs'], 'Ctrl+Shift+S'), name: Menu.getItem(Msg.Lang['nav.btn.file.saveAs'], 'Ctrl+Shift+S', 'icon-save-as'),
callback: () => File.saveAs() callback: () => File.saveAs()
} }
}); });
@@ -555,7 +553,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.file.exportAs'], 'Ctrl+E'), name: Menu.getItem(Msg.Lang['nav.btn.file.exportAs'], 'Ctrl+E', 'icon-export'),
callback: () => File.exportLib() callback: () => File.exportLib()
} }
}); });
@@ -575,7 +573,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.setting.manageLibs'], 'Ctrl+M'), name: Menu.getItem(Msg.Lang['nav.btn.setting.manageLibs'], 'Ctrl+M', 'icon-menu'),
callback: () => LibManager.showManageDialog() callback: () => LibManager.showManageDialog()
} }
}); });
@@ -603,7 +601,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['nav.btn.setting.feedback'], 'Ctrl+Shift+F'), name: Menu.getItem(Msg.Lang['nav.btn.setting.feedback'], 'Ctrl+Shift+F', 'icon-comment-1'),
callback: () => { callback: () => {
const href = 'https://gitee.com/bnu_mixly/mixly3/issues'; const href = 'https://gitee.com/bnu_mixly/mixly3/issues';
Url.open(href); Url.open(href);
@@ -624,7 +622,7 @@ class App extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem('文档', 'Ctrl+H'), name: Menu.getItem(Msg.Lang['nav.btn.setting.wiki'], 'Ctrl+H', 'icon-book-open'),
callback: () => { callback: () => {
const href = 'https://mixly.readthedocs.io/zh-cn/latest/contents.html'; const href = 'https://mixly.readthedocs.io/zh-cn/latest/contents.html';
Url.open(href); Url.open(href);

View File

@@ -1,30 +1,20 @@
goog.loadJs('common', () => { goog.loadJs('common', () => {
goog.require('$.contextMenu'); goog.require('$.contextMenu');
goog.require('Mixly.XML'); goog.require('Mixly.Menu');
goog.require('Mixly.Env');
goog.require('Mixly.Events'); goog.require('Mixly.Events');
goog.require('Mixly.Registry'); goog.require('Mixly.Registry');
goog.require('Mixly.HTMLTemplate');
goog.provide('Mixly.ContextMenu'); goog.provide('Mixly.ContextMenu');
const { const {
XML, Menu,
Env,
Events, Events,
Registry, Registry
HTMLTemplate
} = Mixly; } = Mixly;
class ContextMenu { class ContextMenu {
static { static {
HTMLTemplate.add(
'html/context-menu-item.html',
new HTMLTemplate(goog.readFileSync(path.join(Env.templatePath, 'html/context-menu-item.html')))
);
this.getItem = (name, hotKey) => HTMLTemplate.get('html/context-menu-item.html').render({ name, hotKey });
this.generate = (menu, $trigger) => { this.generate = (menu, $trigger) => {
let menuItems = {}; let menuItems = {};
for (let item of menu.getAllItems()) { for (let item of menu.getAllItems()) {

View File

@@ -6,9 +6,9 @@ goog.require('Mixly.Config');
goog.require('Mixly.XML'); goog.require('Mixly.XML');
goog.require('Mixly.Env'); goog.require('Mixly.Env');
goog.require('Mixly.Msg'); goog.require('Mixly.Msg');
goog.require('Mixly.Menu');
goog.require('Mixly.ContextMenu'); goog.require('Mixly.ContextMenu');
goog.require('Mixly.IdGenerator'); goog.require('Mixly.IdGenerator');
goog.require('Mixly.Menu');
goog.require('Mixly.EditorMonaco'); goog.require('Mixly.EditorMonaco');
goog.provide('Mixly.EditorCode'); goog.provide('Mixly.EditorCode');
@@ -17,9 +17,9 @@ const {
XML, XML,
Env, Env,
Msg, Msg,
Menu,
ContextMenu, ContextMenu,
IdGenerator, IdGenerator,
Menu,
EditorMonaco EditorMonaco
} = Mixly; } = Mixly;
const { USER } = Config; const { USER } = Config;
@@ -54,7 +54,7 @@ class EditorCode extends EditorMonaco {
id: 'cut', id: 'cut',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.cut'], 'Ctrl+X'), name: Menu.getItem(Msg.Lang['editor.contextMenu.cut'], 'Ctrl+X'),
callback: (key, opt) => this.cut() callback: (key, opt) => this.cut()
} }
}); });
@@ -63,7 +63,7 @@ class EditorCode extends EditorMonaco {
id: 'copy', id: 'copy',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'), name: Menu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'),
callback: (key, opt) => this.copy() callback: (key, opt) => this.copy()
} }
}); });
@@ -72,7 +72,7 @@ class EditorCode extends EditorMonaco {
id: 'paste', id: 'paste',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.paste'], 'Ctrl+V'), name: Menu.getItem(Msg.Lang['editor.contextMenu.paste'], 'Ctrl+V'),
callback: (key, opt) => this.paste() callback: (key, opt) => this.paste()
} }
}); });
@@ -86,7 +86,7 @@ class EditorCode extends EditorMonaco {
id: 'togglecomment', id: 'togglecomment',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.togglecomment'], 'Ctrl+/'), name: Menu.getItem(Msg.Lang['editor.contextMenu.togglecomment'], 'Ctrl+/'),
callback: (key, opt) => this.commentLine() callback: (key, opt) => this.commentLine()
} }
}); });
@@ -95,7 +95,7 @@ class EditorCode extends EditorMonaco {
id: 'toggleBlockComment', id: 'toggleBlockComment',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.toggleBlockComment'], 'Shift+Alt+A'), name: Menu.getItem(Msg.Lang['editor.contextMenu.toggleBlockComment'], 'Shift+Alt+A'),
callback: (key, opt) => this.blockComment() callback: (key, opt) => this.blockComment()
} }
}); });

View File

@@ -10,12 +10,11 @@ goog.require('Mixly.XML');
goog.require('Mixly.Msg'); goog.require('Mixly.Msg');
goog.require('Mixly.Config'); goog.require('Mixly.Config');
goog.require('Mixly.Env'); goog.require('Mixly.Env');
goog.require('Mixly.LayerExt');
goog.require('Mixly.ContextMenu');
goog.require('Mixly.Debug'); goog.require('Mixly.Debug');
goog.require('Mixly.Menu'); goog.require('Mixly.Menu');
goog.require('Mixly.Boards'); goog.require('Mixly.Boards');
goog.require('Mixly.MJson'); goog.require('Mixly.MJson');
goog.require('Mixly.LayerExt');
goog.require('Mixly.HTMLTemplate'); goog.require('Mixly.HTMLTemplate');
goog.require('Mixly.EditorBlockly'); goog.require('Mixly.EditorBlockly');
goog.require('Mixly.EditorCode'); goog.require('Mixly.EditorCode');
@@ -33,7 +32,6 @@ const {
Msg, Msg,
Config, Config,
Env, Env,
ContextMenu,
Debug, Debug,
Menu, Menu,
Boards, Boards,
@@ -45,6 +43,7 @@ const { BOARD, SOFTWARE } = Config;
const { form } = layui; const { form } = layui;
class EditorMix extends EditorBase { class EditorMix extends EditorBase {
static { static {
HTMLTemplate.add( HTMLTemplate.add(
@@ -112,7 +111,7 @@ class EditorMix extends EditorBase {
id: 'copy', id: 'copy',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'), name: Menu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'),
callback: (key, opt) => codePage.copy() callback: (key, opt) => codePage.copy()
} }
}); });

View File

@@ -257,7 +257,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['fileTree.newFolder'], ''), name: Menu.getItem(Msg.Lang['fileTree.newFolder'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let type = $trigger.attr('type'); let type = $trigger.attr('type');
if (type === 'root') { if (type === 'root') {
@@ -279,7 +279,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['fileTree.newFile'], ''), name: Menu.getItem(Msg.Lang['fileTree.newFile'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let type = $trigger.attr('type'); let type = $trigger.attr('type');
if (type === 'root') { if (type === 'root') {
@@ -310,7 +310,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.cut'], ''), name: Menu.getItem(Msg.Lang['editor.contextMenu.cut'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let id = $trigger.attr('id'); let id = $trigger.attr('id');
this.cutNode(id); this.cutNode(id);
@@ -326,7 +326,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.copy'], ''), name: Menu.getItem(Msg.Lang['editor.contextMenu.copy'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let id = $trigger.attr('id'); let id = $trigger.attr('id');
this.copyNode(id); this.copyNode(id);
@@ -342,7 +342,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.paste'], ''), name: Menu.getItem(Msg.Lang['editor.contextMenu.paste'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let id = $trigger.attr('id'); let id = $trigger.attr('id');
this.pasteNode(id); this.pasteNode(id);
@@ -359,7 +359,7 @@ class FileTree extends Component {
id: 'copy_path', id: 'copy_path',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['fileTree.copyPath'], ''), name: Menu.getItem(Msg.Lang['fileTree.copyPath'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let outPath = null; let outPath = null;
let type = $trigger.attr('type'); let type = $trigger.attr('type');
@@ -382,7 +382,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['fileTree.rename'], ''), name: Menu.getItem(Msg.Lang['fileTree.rename'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let type = $trigger.attr('type'); let type = $trigger.attr('type');
let id = $trigger.attr('id'); let id = $trigger.attr('id');
@@ -403,7 +403,7 @@ class FileTree extends Component {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['fileTree.delete'], ''), name: Menu.getItem(Msg.Lang['fileTree.delete'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let type = $trigger.attr('type'); let type = $trigger.attr('type');
let id = $trigger.attr('id'); let id = $trigger.attr('id');

View File

@@ -1,17 +1,33 @@
goog.loadJs('common', () => { goog.loadJs('common', () => {
goog.require('Mixly.Env');
goog.require('Mixly.Debug'); goog.require('Mixly.Debug');
goog.require('Mixly.IdGenerator');
goog.require('Mixly.Events'); goog.require('Mixly.Events');
goog.require('Mixly.IdGenerator');
goog.require('Mixly.HTMLTemplate');
goog.provide('Mixly.Menu'); goog.provide('Mixly.Menu');
const { const {
Env,
Debug, Debug,
Events,
IdGenerator, IdGenerator,
Events HTMLTemplate
} = Mixly; } = Mixly;
class Menu { class Menu {
static {
HTMLTemplate.add(
'html/menu-item.html',
new HTMLTemplate(goog.readFileSync(path.join(Env.templatePath, 'html/menu-item.html')))
);
this.getItem = (name, hotKey = '', icon = '') => {
return HTMLTemplate.get('html/menu-item.html').render({ name, hotKey, icon });
};
}
#menuItems_ = []; #menuItems_ = [];
#ids_ = {}; #ids_ = {};
#isDynamic_ = false; #isDynamic_ = false;

View File

@@ -7,8 +7,6 @@ goog.require('Mixly.XML');
goog.require('Mixly.Msg'); goog.require('Mixly.Msg');
goog.require('Mixly.HTMLTemplate'); goog.require('Mixly.HTMLTemplate');
goog.require('Mixly.Component'); goog.require('Mixly.Component');
goog.require('Mixly.Menu');
goog.require('Mixly.ContextMenu');
goog.require('Mixly.DropdownMenuGroup'); goog.require('Mixly.DropdownMenuGroup');
goog.provide('Mixly.Nav'); goog.provide('Mixly.Nav');
@@ -18,8 +16,6 @@ const {
Msg, Msg,
HTMLTemplate, HTMLTemplate,
Component, Component,
Menu,
ContextMenu,
DropdownMenuGroup DropdownMenuGroup
} = Mixly; } = Mixly;

View File

@@ -6,7 +6,6 @@ goog.require('Mixly.IdGenerator');
goog.require('Mixly.XML'); goog.require('Mixly.XML');
goog.require('Mixly.Env'); goog.require('Mixly.Env');
goog.require('Mixly.HTMLTemplate'); goog.require('Mixly.HTMLTemplate');
goog.require('Mixly.ContextMenu');
goog.require('Mixly.Debug'); goog.require('Mixly.Debug');
goog.require('Mixly.Menu'); goog.require('Mixly.Menu');
goog.require('Mixly.PageBase'); goog.require('Mixly.PageBase');
@@ -21,7 +20,6 @@ const {
XML, XML,
Env, Env,
HTMLTemplate, HTMLTemplate,
ContextMenu,
Debug, Debug,
Menu, Menu,
PageBase, PageBase,
@@ -78,7 +76,7 @@ class SideBarLocalStorage extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem('打开新文件夹', ''), name: Menu.getItem('打开新文件夹', ''),
callback: () => { callback: () => {
this.showDirectoryPicker(); this.showDirectoryPicker();
} }

View File

@@ -9,7 +9,7 @@ goog.require('Mixly.HTMLTemplate');
goog.require('Mixly.DragV'); goog.require('Mixly.DragV');
goog.require('Mixly.StatusBar'); goog.require('Mixly.StatusBar');
goog.require('Mixly.Serial'); goog.require('Mixly.Serial');
goog.require('Mixly.ContextMenu'); goog.require('Mixly.Menu');
goog.require('Mixly.AmpyFileTree'); goog.require('Mixly.AmpyFileTree');
goog.provide('Mixly.StatusBarAmpy'); goog.provide('Mixly.StatusBarAmpy');
@@ -21,7 +21,7 @@ const {
DragV, DragV,
StatusBar, StatusBar,
Serial, Serial,
ContextMenu, Menu,
AmpyFileTree AmpyFileTree
} = Mixly; } = Mixly;
@@ -168,7 +168,7 @@ class StatusBarAmpy extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.ampy.refresh'], ''), name: Menu.getItem(Msg.Lang['statusbar.ampy.refresh'], ''),
callback: (_, { $trigger }) => { callback: (_, { $trigger }) => {
let type = $trigger.attr('type'); let type = $trigger.attr('type');
if (type === 'root') { if (type === 'root') {
@@ -205,7 +205,7 @@ class StatusBarAmpy extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.ampy.exit'], ''), name: Menu.getItem(Msg.Lang['statusbar.ampy.exit'], ''),
callback: () => { callback: () => {
this.closeFS(); this.closeFS();
} }
@@ -227,7 +227,7 @@ class StatusBarAmpy extends PageBase {
id: 'cut', id: 'cut',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.cut'], 'Ctrl+X'), name: Menu.getItem(Msg.Lang['editor.contextMenu.cut'], 'Ctrl+X'),
callback: () => this.#editor_.cut() callback: () => this.#editor_.cut()
} }
}); });
@@ -236,7 +236,7 @@ class StatusBarAmpy extends PageBase {
id: 'copy', id: 'copy',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'), name: Menu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'),
callback: () => this.#editor_.copy() callback: () => this.#editor_.copy()
} }
}); });
@@ -245,7 +245,7 @@ class StatusBarAmpy extends PageBase {
id: 'paste', id: 'paste',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.paste'], 'Ctrl+V'), name: Menu.getItem(Msg.Lang['editor.contextMenu.paste'], 'Ctrl+V'),
callback: () => this.#editor_.paste() callback: () => this.#editor_.paste()
} }
}); });
@@ -259,7 +259,7 @@ class StatusBarAmpy extends PageBase {
id: 'togglecomment', id: 'togglecomment',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.togglecomment'], 'Ctrl+/'), name: Menu.getItem(Msg.Lang['editor.contextMenu.togglecomment'], 'Ctrl+/'),
callback: () => this.#editor_.commentLine() callback: () => this.#editor_.commentLine()
} }
}); });
@@ -268,7 +268,7 @@ class StatusBarAmpy extends PageBase {
id: 'toggleBlockComment', id: 'toggleBlockComment',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.toggleBlockComment'], 'Shift+Alt+A'), name: Menu.getItem(Msg.Lang['editor.contextMenu.toggleBlockComment'], 'Shift+Alt+A'),
callback: (key, opt) => this.#editor_.blockComment() callback: (key, opt) => this.#editor_.blockComment()
} }
});*/ });*/
@@ -290,7 +290,7 @@ class StatusBarAmpy extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['file.save'], 'Ctrl+S'), name: Menu.getItem(Msg.Lang['file.save'], 'Ctrl+S'),
callback: async () => { callback: async () => {
await this.put(); await this.put();
} }

View File

@@ -11,7 +11,7 @@ goog.require('Mixly.StatusBar');
goog.require('Mixly.SideBarsManager'); goog.require('Mixly.SideBarsManager');
goog.require('Mixly.HTMLTemplate'); goog.require('Mixly.HTMLTemplate');
goog.require('Mixly.PageBase'); goog.require('Mixly.PageBase');
goog.require('Mixly.ContextMenu'); goog.require('Mixly.Menu');
goog.require('Mixly.StatusBarSerialOutput'); goog.require('Mixly.StatusBarSerialOutput');
goog.require('Mixly.StatusBarSerialChart'); goog.require('Mixly.StatusBarSerialChart');
goog.require('Mixly.Electron.Serial'); goog.require('Mixly.Electron.Serial');
@@ -29,7 +29,7 @@ const {
RightSideBarsManager, RightSideBarsManager,
HTMLTemplate, HTMLTemplate,
PageBase, PageBase,
ContextMenu, Menu,
StatusBarSerialOutput, StatusBarSerialOutput,
StatusBarSerialChart, StatusBarSerialChart,
Electron = {}, Electron = {},
@@ -186,7 +186,7 @@ class StatusBarSerial extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.serial.interrupt'], 'Ctrl+C'), name: Menu.getItem(Msg.Lang['statusbar.serial.interrupt'], 'Ctrl+C'),
callback: (key, opt) => this.interrupt().catch(Debug.error) callback: (key, opt) => this.interrupt().catch(Debug.error)
} }
}); });
@@ -200,7 +200,7 @@ class StatusBarSerial extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.serial.reset'], 'Ctrl+D'), name: Menu.getItem(Msg.Lang['statusbar.serial.reset'], 'Ctrl+D'),
callback: (key, opt) => this.reset().catch(Debug.error) callback: (key, opt) => this.reset().catch(Debug.error)
} }
}); });
@@ -213,7 +213,7 @@ class StatusBarSerial extends PageBase {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.serial.toggle'], ''), name: Menu.getItem(Msg.Lang['statusbar.serial.toggle'], ''),
callback: (key, opt) => this.toggle().catch(Debug.error) callback: (key, opt) => this.toggle().catch(Debug.error)
} }
}); });

View File

@@ -22,6 +22,7 @@ const {
} = Mixly; } = Mixly;
const { USER } = Config; const { USER } = Config;
class StatusBar extends EditorAce { class StatusBar extends EditorAce {
#contextMenu_ = null; #contextMenu_ = null;
constructor() { constructor() {
@@ -44,7 +45,7 @@ class StatusBar extends EditorAce {
id: 'copy', id: 'copy',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'), name: Menu.getItem(Msg.Lang['editor.contextMenu.copy'], 'Ctrl+C'),
callback: (key, opt) => this.copy() callback: (key, opt) => this.copy()
} }
}); });

View File

@@ -14,7 +14,6 @@ goog.require('Mixly.StatusBarFS');
goog.require('Mixly.StatusBarLibs'); goog.require('Mixly.StatusBarLibs');
goog.require('Mixly.StatusBarAmpy') goog.require('Mixly.StatusBarAmpy')
goog.require('Mixly.PagesManager'); goog.require('Mixly.PagesManager');
goog.require('Mixly.ContextMenu');
goog.require('Mixly.DropdownMenu'); goog.require('Mixly.DropdownMenu');
goog.require('Mixly.Menu'); goog.require('Mixly.Menu');
goog.require('Mixly.IdGenerator'); goog.require('Mixly.IdGenerator');
@@ -36,7 +35,6 @@ const {
StatusBarLibs, StatusBarLibs,
StatusBarAmpy, StatusBarAmpy,
PagesManager, PagesManager,
ContextMenu,
DropdownMenu, DropdownMenu,
Menu, Menu,
IdGenerator, IdGenerator,
@@ -158,7 +156,7 @@ class StatusBarsManager extends PagesManager {
}, },
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.openSelectedPort'], ''), name: Menu.getItem(Msg.Lang['statusbar.openSelectedPort'], ''),
callback: (key, opt) => { callback: (key, opt) => {
this.openSelectedPort(); this.openSelectedPort();
} }
@@ -170,7 +168,7 @@ class StatusBarsManager extends PagesManager {
children: serialChildMenu, children: serialChildMenu,
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.openPort'], '') name: Menu.getItem(Msg.Lang['statusbar.openPort'], '')
} }
}); });
@@ -179,7 +177,7 @@ class StatusBarsManager extends PagesManager {
id: 'lib', id: 'lib',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem('第三方库管理', ''), name: Menu.getItem('第三方库管理', ''),
callback: (key, opt) => { callback: (key, opt) => {
this.add('libs', 'libs', '第三方库管理'); this.add('libs', 'libs', '第三方库管理');
this.changeTo('libs'); this.changeTo('libs');
@@ -199,7 +197,7 @@ class StatusBarsManager extends PagesManager {
id: 'ampy', id: 'ampy',
data: { data: {
isHtmlName: true, isHtmlName: true,
name: ContextMenu.getItem(Msg.Lang['statusbar.ampy'], ''), name: Menu.getItem(Msg.Lang['statusbar.ampy'], ''),
callback: (key, opt) => { callback: (key, opt) => {
this.add({ this.add({
id: 'ampy', id: 'ampy',

View File

@@ -31,7 +31,6 @@
"Mixly.Drag", "Mixly.Drag",
"Mixly.Nav", "Mixly.Nav",
"Mixly.Menu", "Mixly.Menu",
"Mixly.ContextMenu",
"Mixly.Workspace", "Mixly.Workspace",
"Mixly.FooterBar", "Mixly.FooterBar",
"Mixly.HTMLTemplate", "Mixly.HTMLTemplate",
@@ -149,11 +148,9 @@
"path": "/common/context-menu.js", "path": "/common/context-menu.js",
"require": [ "require": [
"$.contextMenu", "$.contextMenu",
"Mixly.XML", "Mixly.Menu",
"Mixly.Env",
"Mixly.Events", "Mixly.Events",
"Mixly.Registry", "Mixly.Registry"
"Mixly.HTMLTemplate"
], ],
"provide": [ "provide": [
"Mixly.ContextMenu" "Mixly.ContextMenu"
@@ -282,9 +279,9 @@
"Mixly.XML", "Mixly.XML",
"Mixly.Env", "Mixly.Env",
"Mixly.Msg", "Mixly.Msg",
"Mixly.Menu",
"Mixly.ContextMenu", "Mixly.ContextMenu",
"Mixly.IdGenerator", "Mixly.IdGenerator",
"Mixly.Menu",
"Mixly.EditorMonaco" "Mixly.EditorMonaco"
], ],
"provide": [ "provide": [
@@ -322,12 +319,11 @@
"Mixly.Msg", "Mixly.Msg",
"Mixly.Config", "Mixly.Config",
"Mixly.Env", "Mixly.Env",
"Mixly.LayerExt",
"Mixly.ContextMenu",
"Mixly.Debug", "Mixly.Debug",
"Mixly.Menu", "Mixly.Menu",
"Mixly.Boards", "Mixly.Boards",
"Mixly.MJson", "Mixly.MJson",
"Mixly.LayerExt",
"Mixly.HTMLTemplate", "Mixly.HTMLTemplate",
"Mixly.EditorBlockly", "Mixly.EditorBlockly",
"Mixly.EditorCode", "Mixly.EditorCode",
@@ -700,9 +696,11 @@
{ {
"path": "/common/menu.js", "path": "/common/menu.js",
"require": [ "require": [
"Mixly.Env",
"Mixly.Debug", "Mixly.Debug",
"Mixly.Events",
"Mixly.IdGenerator", "Mixly.IdGenerator",
"Mixly.Events" "Mixly.HTMLTemplate"
], ],
"provide": [ "provide": [
"Mixly.Menu" "Mixly.Menu"
@@ -787,8 +785,6 @@
"Mixly.Msg", "Mixly.Msg",
"Mixly.HTMLTemplate", "Mixly.HTMLTemplate",
"Mixly.Component", "Mixly.Component",
"Mixly.Menu",
"Mixly.ContextMenu",
"Mixly.DropdownMenuGroup" "Mixly.DropdownMenuGroup"
], ],
"provide": [ "provide": [
@@ -908,7 +904,6 @@
"Mixly.XML", "Mixly.XML",
"Mixly.Env", "Mixly.Env",
"Mixly.HTMLTemplate", "Mixly.HTMLTemplate",
"Mixly.ContextMenu",
"Mixly.Debug", "Mixly.Debug",
"Mixly.Menu", "Mixly.Menu",
"Mixly.PageBase", "Mixly.PageBase",
@@ -963,7 +958,7 @@
"Mixly.DragV", "Mixly.DragV",
"Mixly.StatusBar", "Mixly.StatusBar",
"Mixly.Serial", "Mixly.Serial",
"Mixly.ContextMenu", "Mixly.Menu",
"Mixly.AmpyFileTree" "Mixly.AmpyFileTree"
], ],
"provide": [ "provide": [
@@ -1093,7 +1088,7 @@
"Mixly.SideBarsManager", "Mixly.SideBarsManager",
"Mixly.HTMLTemplate", "Mixly.HTMLTemplate",
"Mixly.PageBase", "Mixly.PageBase",
"Mixly.ContextMenu", "Mixly.Menu",
"Mixly.StatusBarSerialOutput", "Mixly.StatusBarSerialOutput",
"Mixly.StatusBarSerialChart", "Mixly.StatusBarSerialChart",
"Mixly.Electron.Serial", "Mixly.Electron.Serial",
@@ -1137,7 +1132,6 @@
"Mixly.StatusBarLibs", "Mixly.StatusBarLibs",
"Mixly.StatusBarAmpy", "Mixly.StatusBarAmpy",
"Mixly.PagesManager", "Mixly.PagesManager",
"Mixly.ContextMenu",
"Mixly.DropdownMenu", "Mixly.DropdownMenu",
"Mixly.Menu", "Mixly.Menu",
"Mixly.IdGenerator", "Mixly.IdGenerator",

View File

@@ -79,6 +79,7 @@
"nav.btn.setting.manageLibs": "Manage libs", "nav.btn.setting.manageLibs": "Manage libs",
"nav.btn.setting.firmware": "Firmware", "nav.btn.setting.firmware": "Firmware",
"nav.btn.setting.feedback": "Feedback", "nav.btn.setting.feedback": "Feedback",
"nav.btn.setting.wiki": "Wiki",
"shell.compiling": "Compiling", "shell.compiling": "Compiling",
"shell.compileFailed": "Compile failed", "shell.compileFailed": "Compile failed",
"shell.compileSucc": "Compile successful", "shell.compileSucc": "Compile successful",

View File

@@ -79,6 +79,7 @@
"nav.btn.setting.manageLibs": "管理库", "nav.btn.setting.manageLibs": "管理库",
"nav.btn.setting.firmware": "固件", "nav.btn.setting.firmware": "固件",
"nav.btn.setting.feedback": "反馈", "nav.btn.setting.feedback": "反馈",
"nav.btn.setting.wiki": "文档",
"shell.compiling": "编译中", "shell.compiling": "编译中",
"shell.compileFailed": "编译失败", "shell.compileFailed": "编译失败",
"shell.compileSucc": "编译成功", "shell.compileSucc": "编译成功",

View File

@@ -80,6 +80,7 @@
"nav.btn.setting.manageLibs": "管理函式庫", "nav.btn.setting.manageLibs": "管理函式庫",
"nav.btn.setting.firmware": "韌體", "nav.btn.setting.firmware": "韌體",
"nav.btn.setting.feedback": "回饋", "nav.btn.setting.feedback": "回饋",
"nav.btn.setting.wiki": "維基",
"shell.compiling": "編譯中", "shell.compiling": "編譯中",
"shell.compileFailed": "編譯失敗", "shell.compileFailed": "編譯失敗",
"shell.compileSucc": "編譯成功", "shell.compileSucc": "編譯成功",

View File

@@ -1,7 +0,0 @@
<div class="menu-line">
<label>{{d.name}}</label>
<div class="sep"></div>
{{# if (d.hotKey) { }}
<label>{{d.hotKey}}</label>
{{# } }}
</div>

View File

@@ -0,0 +1,11 @@
<div class="menu-line">
{{# if (d.icon) { }}
<label class="text {{d.icon}}">{{d.name}}</label>
{{# } else { }}
<label class="item">{{d.name}}</label>
{{# } }}
<div class="sep"></div>
{{# if (d.hotKey) { }}
<label class="hot-key">{{d.hotKey}}</label>
{{# } }}
</div>