Update: 调整Ampy板卡文件管理
本次更新用以配置Ampy板卡文件管理使其仅支持编辑文本文件
This commit is contained in:
@@ -23,7 +23,8 @@ class EditorAce extends EditorBase {
|
||||
static {
|
||||
this.CTRL_BTNS = ['resetFontSize', 'increaseFontSize', 'decreaseFontSize'];
|
||||
this.CTRL_BTN_TEMPLATE = '<div m-id="{{d.mId}}" class="code-editor-btn setFontSize"></div>';
|
||||
|
||||
this.MODE_MAP = goog.getJSON(path.join(Env.templatePath, 'json/ace-mode-map.json'));
|
||||
|
||||
HTMLTemplate.add(
|
||||
'html/editor/editor-code.html',
|
||||
new HTMLTemplate(goog.get(path.join(Env.templatePath, 'html/editor/editor-code.html')))
|
||||
@@ -279,6 +280,24 @@ class EditorAce extends EditorBase {
|
||||
this.#editor_.setReadOnly(status);
|
||||
}
|
||||
|
||||
setMode(type) {
|
||||
this.#editor_.session.setMode(`ace/mode/${type}`);
|
||||
}
|
||||
|
||||
setFileMode(extname) {
|
||||
const mode = this.getFileMode(extname) ?? 'text';
|
||||
this.setMode(mode);
|
||||
}
|
||||
|
||||
getFileMode(extname) {
|
||||
for (const [mode, extensions] of Object.entries(EditorAce.MODE_MAP)) {
|
||||
if (extensions.includes(extname)) {
|
||||
return mode;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
cut() {
|
||||
const { selection, session } = this.#editor_;
|
||||
const cutLine = selection.isEmpty();
|
||||
|
||||
@@ -130,7 +130,7 @@ class FileTree extends Component {
|
||||
});
|
||||
this.#jstree_ = this.#$fileTree_.jstree(true);
|
||||
this.addEventsType([
|
||||
'selectLeaf', 'afterOpenNode', 'afterCloseNode', 'afterRefreshNode',
|
||||
'beforeSelectLeaf', 'afterSelectLeaf', 'afterOpenNode', 'afterCloseNode', 'afterRefreshNode',
|
||||
'afterCreateNode', 'afterDeleteNode', 'afterRenameNode'
|
||||
]);
|
||||
this.#addEventsListener_();
|
||||
@@ -202,8 +202,14 @@ class FileTree extends Component {
|
||||
if (selected[0].id === this.#selected_) {
|
||||
return;
|
||||
}
|
||||
this.#selected_ = selected[0].id;
|
||||
this.runEvent('selectLeaf', selected);
|
||||
const result = this.runEvent('beforeSelectLeaf', selected);
|
||||
if ((result.length && result[0]) || !result.length) {
|
||||
this.#selected_ = selected[0].id;
|
||||
this.runEvent('afterSelectLeaf', selected);
|
||||
} else {
|
||||
this.deselect(selected[0].id);
|
||||
this.reselect();
|
||||
}
|
||||
})
|
||||
.on('refresh.jstree', (e, data) => {
|
||||
this.runEvent('afterRefreshNode', data.node);
|
||||
|
||||
@@ -89,9 +89,20 @@ class StatusBarAmpy extends PageBase {
|
||||
this.openFS();
|
||||
});
|
||||
|
||||
this.#fileTree_.bind('selectLeaf', async (selected) => {
|
||||
this.#fileTree_.showProgress();
|
||||
this.#fileTree_.bind('beforeSelectLeaf', (selected) => {
|
||||
const filePath = selected[0].id;
|
||||
const mode = this.#editor_.getFileMode(path.extname(filePath));
|
||||
if (!mode) {
|
||||
layer.msg(Msg.Lang['statusbar.ampy.cannotEdit'], { time: 1000 });
|
||||
return false;
|
||||
}
|
||||
this.#editor_.setMode(mode);
|
||||
return true;
|
||||
});
|
||||
|
||||
this.#fileTree_.bind('afterSelectLeaf', async (selected) => {
|
||||
const filePath = selected[0].id;
|
||||
this.#fileTree_.showProgress();
|
||||
const fs = this.#fileTree_.getFS();
|
||||
const [error, result] = await fs.readFile(filePath);
|
||||
if (error) {
|
||||
@@ -103,9 +114,6 @@ class StatusBarAmpy extends PageBase {
|
||||
this.#editor_.scrollToTop();
|
||||
this.#editor_.focus();
|
||||
this.setStatus(false);
|
||||
this.#editor_.getEditor().session.setMode(
|
||||
`ace/mode/${this.getLanguageByExt(path.extname(filePath))}`
|
||||
);
|
||||
}
|
||||
this.#fileTree_.hideProgress();
|
||||
});
|
||||
@@ -173,7 +181,7 @@ class StatusBarAmpy extends PageBase {
|
||||
this.#fileTree_.refreshFolder(id);
|
||||
} else {
|
||||
const nodes = this.#fileTree_.getSelectedNodes();
|
||||
this.#fileTree_.runEvent('selectLeaf', nodes);
|
||||
this.#fileTree_.runEvent('afterSelectLeaf', nodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -439,38 +447,6 @@ class StatusBarAmpy extends PageBase {
|
||||
}
|
||||
}
|
||||
|
||||
getLanguageByExt(ext) {
|
||||
let language = 'text';
|
||||
switch(ext) {
|
||||
case '.json':
|
||||
language = 'json';
|
||||
break;
|
||||
case '.c':
|
||||
case '.cpp':
|
||||
case '.h':
|
||||
case '.hpp':
|
||||
case '.ino':
|
||||
language = 'c_cpp';
|
||||
break;
|
||||
case '.js':
|
||||
language = 'javascript';
|
||||
break;
|
||||
case '.py':
|
||||
language = 'python';
|
||||
break;
|
||||
case '.lua':
|
||||
language = 'lua';
|
||||
break;
|
||||
case '.md':
|
||||
case '.mdx':
|
||||
language = 'markdown';
|
||||
break;
|
||||
default:
|
||||
language = 'text';
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
dispose() {
|
||||
this.#editor_.dispose();
|
||||
this.#fileTree_.dispose();
|
||||
|
||||
@@ -103,7 +103,7 @@ class Workspace extends Component {
|
||||
#addEventsListenerForFileTree_() {
|
||||
const leftSideBarLocalStorage = this.getLeftSideBarsManager().get('local_storage');
|
||||
const fileTree = leftSideBarLocalStorage.getFileTree();
|
||||
fileTree.bind('selectLeaf', (selected) => {
|
||||
fileTree.bind('afterSelectLeaf', (selected) => {
|
||||
const tabs = this.#editorsManager_.getTabs();
|
||||
tabs.addTab({
|
||||
name: selected[0].text,
|
||||
|
||||
Reference in New Issue
Block a user