feat: Support multi-touch selection
This commit is contained in:
@@ -1160,9 +1160,9 @@ export const I18N = {
|
||||
zh_TW: `觸控設定`,
|
||||
},
|
||||
touch_translate_shortcut: {
|
||||
zh: `触屏翻译快捷方式`,
|
||||
en: `Touch Translate Shortcut`,
|
||||
zh_TW: `觸控翻譯捷徑`,
|
||||
zh: `触屏翻译快捷方式 (支持多选)`,
|
||||
en: `Touch Translate Shortcut (multiple supported)`,
|
||||
zh_TW: `觸控翻譯捷徑 (支援多選)`,
|
||||
},
|
||||
touch_tap_0: {
|
||||
zh: `禁用`,
|
||||
|
||||
@@ -166,7 +166,8 @@ export const DEFAULT_SETTING = {
|
||||
shortcuts: DEFAULT_SHORTCUTS, // 快捷键
|
||||
inputRule: DEFAULT_INPUT_RULE, // 输入框设置
|
||||
tranboxSetting: DEFAULT_TRANBOX_SETTING, // 划词翻译设置
|
||||
touchTranslate: 2, // 触屏翻译 {5:单指双击,6:单指三击,7:双指双击}
|
||||
// touchTranslate: 2, // 触屏翻译 {5:单指双击,6:单指三击,7:双指双击} (作废)
|
||||
touchModes: [2], // 触屏翻译 {5:单指双击,6:单指三击,7:双指双击} (多选)
|
||||
blacklist: DEFAULT_BLACKLIST.join(",\n"), // 禁用翻译名单
|
||||
csplist: DEFAULT_CSPLIST.join(",\n"), // 禁用CSP名单
|
||||
orilist: DEFAULT_ORILIST.join(",\n"), // 禁用CSP名单
|
||||
|
||||
@@ -28,7 +28,7 @@ import { logger } from "./log";
|
||||
export default class TranslatorManager {
|
||||
#clearShortcuts = [];
|
||||
#menuCommandIds = [];
|
||||
#clearTouchListener = null;
|
||||
#clearTouchListeners = [];
|
||||
#isActive = false;
|
||||
#isUserscript;
|
||||
#isIframe;
|
||||
@@ -110,10 +110,8 @@ export default class TranslatorManager {
|
||||
this.#clearShortcuts = [];
|
||||
|
||||
// 触屏
|
||||
if (this.#clearTouchListener) {
|
||||
this.#clearTouchListener();
|
||||
this.#clearTouchListener = null;
|
||||
}
|
||||
this.#clearTouchListeners.forEach((clear) => clear());
|
||||
this.#clearTouchListeners = [];
|
||||
|
||||
// 油猴菜单
|
||||
if (globalThis.GM && this.#menuCommandIds.length > 0) {
|
||||
@@ -145,8 +143,8 @@ export default class TranslatorManager {
|
||||
#setupTouchOperations() {
|
||||
if (this.#isIframe) return;
|
||||
|
||||
const { touchTranslate = 2 } = this._translator.setting;
|
||||
if (touchTranslate === 0) {
|
||||
const { touchModes = [2] } = this._translator.setting;
|
||||
if (touchModes.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -154,35 +152,31 @@ export default class TranslatorManager {
|
||||
this.#processActions({ action: MSG_TRANS_TOGGLE });
|
||||
};
|
||||
|
||||
switch (touchTranslate) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
this.#clearTouchListener = touchTapListener(handleTap, {
|
||||
taps: 1,
|
||||
fingers: touchTranslate,
|
||||
});
|
||||
break;
|
||||
case 5:
|
||||
this.#clearTouchListener = touchTapListener(handleTap, {
|
||||
taps: 2,
|
||||
fingers: 1,
|
||||
});
|
||||
break;
|
||||
case 6:
|
||||
this.#clearTouchListener = touchTapListener(handleTap, {
|
||||
taps: 3,
|
||||
fingers: 1,
|
||||
});
|
||||
break;
|
||||
case 7:
|
||||
this.#clearTouchListener = touchTapListener(handleTap, {
|
||||
taps: 2,
|
||||
fingers: 2,
|
||||
});
|
||||
break;
|
||||
default:
|
||||
}
|
||||
const handleListener = (mode) => {
|
||||
let options = null;
|
||||
switch (mode) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
options = { taps: 1, fingers: mode };
|
||||
break;
|
||||
case 5:
|
||||
options = { taps: 2, fingers: 1 };
|
||||
break;
|
||||
case 6:
|
||||
options = { taps: 3, fingers: 1 };
|
||||
break;
|
||||
case 7:
|
||||
options = { taps: 2, fingers: 2 };
|
||||
break;
|
||||
default:
|
||||
}
|
||||
if (options) {
|
||||
this.#clearTouchListeners.push(touchTapListener(handleTap, options));
|
||||
}
|
||||
};
|
||||
|
||||
touchModes.forEach((mode) => handleListener(mode));
|
||||
}
|
||||
|
||||
#handleWindowMessage(event) {
|
||||
|
||||
@@ -94,7 +94,7 @@ export default function Settings() {
|
||||
newlineLength = TRANS_NEWLINE_LENGTH,
|
||||
httpTimeout = DEFAULT_HTTP_TIMEOUT,
|
||||
contextMenuType = 1,
|
||||
touchTranslate = 2,
|
||||
touchModes = [2],
|
||||
blacklist = DEFAULT_BLACKLIST.join(",\n"),
|
||||
csplist = DEFAULT_CSPLIST.join(",\n"),
|
||||
orilist = DEFAULT_ORILIST.join(",\n"),
|
||||
@@ -268,10 +268,13 @@ export default function Settings() {
|
||||
select
|
||||
fullWidth
|
||||
size="small"
|
||||
name="touchTranslate"
|
||||
value={touchTranslate}
|
||||
name="touchModes"
|
||||
value={touchModes}
|
||||
label={i18n("touch_translate_shortcut")}
|
||||
onChange={handleChange}
|
||||
SelectProps={{
|
||||
multiple: true,
|
||||
}}
|
||||
>
|
||||
{[0, 2, 3, 4, 5, 6, 7].map((item) => (
|
||||
<MenuItem key={item} value={item}>
|
||||
|
||||
Reference in New Issue
Block a user