我智商爆棚
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

160 lines
4.2 KiB

const { readFileSync } = require('fs');
/** 包名 */
const PACKAGE_NAME = 'ccc-quick-finder';
/**
* i18n
* @param {string} key
* @returns {string}
*/
const translate = (key) => Editor.T(`${PACKAGE_NAME}.${key}`);
/** 扩展名 */
const EXTENSION_NAME = translate('name');
// 注册面板
Editor.Panel.extend({
/** HTML */
template: readFileSync(Editor.url(`packages://${PACKAGE_NAME}/panel.setting/index.html`), 'utf8'),
/** 样式 */
style: readFileSync(Editor.url(`packages://${PACKAGE_NAME}/panel.setting/index.css`), 'utf8'),
/**
* 当面板渲染成功后触发
*/
ready() {
// 创建 Vue 实例
const app = new window.Vue({
/**
* 挂载目标
* @type {string | Element}
*/
el: this.shadowRoot,
/**
* 数据对象
*/
data: {
// 多语言文本
titleLabel: translate('setting'),
selectLabel: translate('select'),
selectTooltipLabel: translate('selectTooltip'),
customLabel: translate('custom'),
customPlaceholderLabel: translate('customPlaceholder'),
customTooltipLabel: translate('customTooltip'),
referenceLabel: translate('reference'),
repositoryLabel: translate('repository'),
applyLabel: translate('apply'),
// 预设快捷键
presets: [
{ key: 'custom', name: translate('custom') },
{ key: 'F1', name: 'F1' },
{ key: 'F3', name: 'F3' },
{ key: 'F4', name: 'F4' },
{ key: 'F5', name: 'F5' },
{ key: 'F6', name: 'F6' },
{ key: 'CmdOrCtrl+F', name: 'Cmd/Ctrl + F' },
{ key: 'CmdOrCtrl+B', name: 'Cmd/Ctrl + B' },
{ key: 'CmdOrCtrl+Shift+F', name: 'Cmd/Ctrl + Shift + F' },
],
// 设置
select: 'F1',
custom: '',
// 按钮状态
isProcessing: false
},
/**
* 实例函数
* @type {{ [key: string]: Function }}
*/
methods: {
/**
* 选择变化回调
* @param {*} event
*/
onSelectChange(event) {
if (this.select !== 'custom') {
this.custom = '';
}
},
/**
* 自定义输入框内容变化回调
* @param {*} event
*/
onCustomChange(event) {
if (this.select !== 'custom') {
this.select = 'custom';
}
},
/**
* 应用设置
* @param {*} event
*/
onApplyBtnClick(event) {
if (this.isProcessing) return;
// 配置
const config = Object.create(null);
if (this.select === 'custom') {
const custom = this.custom;
// 输入是否有效
if (custom === '') {
Editor.warn(`[${EXTENSION_NAME}]`, translate('customError'));
return;
}
// 不可以使用双引号(避免 json 值中出现双引号而解析错误,导致插件加载失败)
if (custom.includes('"')) {
this.custom = this.custom.replace(/\"/g, '');
Editor.warn(`[${EXTENSION_NAME}]`, translate('quoteError'));
return;
}
config.hotkey = custom;
} else {
config.hotkey = this.select;
}
// 发消息给主进程保存配置
this.isProcessing = true;
Editor.Ipc.sendToMain(`${PACKAGE_NAME}:save-config`, config, (error) => {
this.isProcessing = false;
});
},
/**
* 读取设置
*/
readConfig() {
Editor.Ipc.sendToMain(`${PACKAGE_NAME}:read-config`, (error, config) => {
if (error || !config) return;
const presets = this.presets,
hotkey = config.hotkey;
// 预设按键
for (let i = 0, l = presets.length; i < l; i++) {
if (presets[i].key === hotkey) {
this.select = hotkey;
this.custom = '';
return;
}
}
// 自定义按键
this.select = 'custom';
this.custom = hotkey;
});
},
},
});
// 读取配置
app.readConfig();
},
});