siyuan/app/src/plugin/uninstall.ts

65 lines
2.5 KiB
TypeScript

import {App} from "../index";
import {Plugin} from "../plugin";
import {getAllModels} from "../layout/getAll";
import {exportLayout, resizeTopbar} from "../layout/util";
import {Constants} from "../constants";
export const uninstall = (app: App, name: string) => {
app.plugins.find((plugin: Plugin, index) => {
if (plugin.name === name) {
// rm command
try {
plugin.onunload();
} catch (e) {
console.error(`plugin ${plugin.name} onunload error:`, e);
}
// rm tab
const modelsKeys = Object.keys(plugin.models);
getAllModels().custom.forEach(custom => {
if (modelsKeys.includes(custom.type)) {
custom.parent.parent.removeTab(custom.parent.id);
}
});
// rm topBar
plugin.topBarIcons.forEach(item => {
item.remove();
});
resizeTopbar();
// rm statusBar
/// #if !MOBILE
plugin.statusBarIcons.forEach(item => {
item.remove();
});
/// #endif
// rm dock
const docksKeys = Object.keys(plugin.docks);
docksKeys.forEach(key => {
if (Object.keys(window.siyuan.layout.leftDock.data).includes(key)) {
window.siyuan.layout.leftDock.remove(key);
} else if (Object.keys(window.siyuan.layout.rightDock.data).includes(key)) {
window.siyuan.layout.rightDock.remove(key);
} else if (Object.keys(window.siyuan.layout.bottomDock.data).includes(key)) {
window.siyuan.layout.bottomDock.remove(key);
}
});
// rm listen
Array.from(document.childNodes).find(item => {
if (item.nodeType === 8 && item.textContent === name) {
item.remove();
return true;
}
});
// rm plugin
app.plugins.splice(index, 1);
setTimeout(() => {
exportLayout({
reload: false,
onlyData: false,
errorExit: false
});
}, Constants.TIMEOUT_LOAD); // 移除页签时切换到新的文档页签,需等待新页签初始化完成,才有 editor.protyle.block 等数据
return true;
}
});
};