From 3b83d881caf834720c97fb7fa7a283bca111b1e9 Mon Sep 17 00:00:00 2001 From: hbl917070 Date: Mon, 14 Oct 2024 01:47:49 +0800 Subject: [PATCH] Add options for reaching the last file and last folder --- Www/ejs/SettingWindow/SettingWindow.ejs | 26 ++++ Www/lang/langData.js | 104 +++++++++++++++ Www/ts/Config.ts | 4 + Www/ts/MainWindow/FileLoad.ts | 169 ++++++++++++++++++++++-- Www/ts/SettingWindow/SettingWindow.ts | 17 ++- 5 files changed, 309 insertions(+), 11 deletions(-) diff --git a/Www/ejs/SettingWindow/SettingWindow.ejs b/Www/ejs/SettingWindow/SettingWindow.ejs index d813a97..3445ad2 100644 --- a/Www/ejs/SettingWindow/SettingWindow.ejs +++ b/Www/ejs/SettingWindow/SettingWindow.ejs @@ -333,6 +333,32 @@ +
+ 到達最後一個檔案時 +
+
+ +
+ +
+ 到達最後一個資料夾時 +
+
+ +
+
啟用觸控板手勢
diff --git a/Www/lang/langData.js b/Www/lang/langData.js index 6d48da2..74db161 100644 --- a/Www/lang/langData.js +++ b/Www/lang/langData.js @@ -406,6 +406,57 @@ var langData = { "ja": "最後に挿入", }, + reachLastFile: { + "zh-TW": "到達最後一個檔案時", + "en": "When reaching the last file", + "ja": "最後のファイルに到達したとき", + }, + doNothing: { + "zh-TW": "不做任何事情", + "en": "Do nothing", + "ja": "何もしない", + }, + firstFile: { + "zh-TW": "回到第一個檔案", + "en": "Back to the first file", + "ja": "最初のファイルに戻る", + }, + nextDir: { + "zh-TW": "前往下一個資料夾", + "en": "Go to the next folder", + "ja": "次のフォルダに移動", + }, + noneWithPrompt: { + "zh-TW": "不做任何事情,並顯示提示", + "en": "Do nothing and show prompt", + "ja": "何もせず、プロンプトを表示する", + }, + firstFileWithPrompt: { + "zh-TW": "回到第一個檔案,並顯示提示", + "en": "Back to the first file and show prompt", + "ja": "最初のファイルに戻り、プロンプトを表示する", + }, + nextDirWithPrompt: { + "zh-TW": "前往下一個資料夾,並顯示提示", + "en": "Go to the next folder and show prompt", + "ja": "次のフォルダに移動し、プロンプトを表示する", + }, + + reachLastDir: { + "zh-TW": "到達最後一個資料夾時", + "en": "When reaching the last folder", + "ja": "最後のフォルダに到達したとき", + }, + firstDir: { + "zh-TW": "回到第一個資料夾", + "en": "Back to the first folder", + "ja": "最初のフォルダに戻る", + }, + firstDirWithPrompt: { + "zh-TW": "回到第一個資料夾,並顯示提示", + "en": "Back to the first folder and show prompt", + "ja": "最初のフォルダに戻り、プロンプトを表示する", + }, enableTouchpadGestures: { "zh-TW": "啟用觸控板手勢", @@ -2035,6 +2086,59 @@ var langData = { "ja": "Tiefsee のすべての設定をデフォルト値に戻してもよろしいですか?
(プラグインやファイルソートには影響しません)", }, //#endregion + + //#region 到達最後一個檔案時 + reachLastFile: { + "zh-TW": "已經是最後一個檔案", + "en": "This is the last file", + "ja": "これが最後のファイルです", + }, + reachFirstFile: { + "zh-TW": "已經是第一個檔案", + "en": "This is the first file", + "ja": "これが最初のファイルです", + }, + firstFile: { + "zh-TW": "載入第一個檔案", + "en": "Load the first file", + "ja": "最初のファイルを読み込む", + }, + lastFile: { + "zh-TW": "載入最後一個檔案", + "en": "Load the last file", + "ja": "最後のファイルを読み込む", + }, + nextDir: { + "zh-TW": "載入下一個資料夾", + "en": "Load the next folder", + "ja": "次のフォルダを読み込む", + }, + prevDir: { + "zh-TW": "載入上一個資料夾", + "en": "Load the previous folder", + "ja": "前のフォルダを読み込む", + }, + reachLastDir: { + "zh-TW": "已經是最後一個資料夾", + "en": "This is the last folder", + "ja": "これが最後のフォルダです", + }, + reachFirstDir: { + "zh-TW": "已經是第一個資料夾", + "en": "This is the first folder", + "ja": "これが最初のフォルダです", + }, + firstDir: { + "zh-TW": "載入第一個資料夾", + "en": "Load the first folder", + "ja": "最初のフォルダを読み込む", + }, + lastDir: { + "zh-TW": "載入最後一個資料夾", + "en": "Load the last folder", + "ja": "最後のフォルダを読み込む", + }, + //#endregion }, exif: { diff --git a/Www/ts/Config.ts b/Www/ts/Config.ts index 50bbee6..00d216b 100644 --- a/Www/ts/Config.ts +++ b/Www/ts/Config.ts @@ -391,6 +391,10 @@ class Config { whenInsertingFile: "auto", /** 啟用觸控板手勢 */ enableTouchpadGestures: false, + /** 到達最後一個檔案時 */ + reachLastFile : "firstFile", + /** 到達最後一個資料夾時 */ + reachLastDir : "firstDir", /** 語言 */ lang: "", }, diff --git a/Www/ts/MainWindow/FileLoad.ts b/Www/ts/MainWindow/FileLoad.ts index 64a2eba..3cadc3f 100644 --- a/Www/ts/MainWindow/FileLoad.ts +++ b/Www/ts/MainWindow/FileLoad.ts @@ -281,19 +281,77 @@ class FileLoad { /** * 載入下一個資料夾 */ - async function nextDir() { + async function nextDir(type?: string) { + _flagDir += 1; - if (_flagDir >= _arDirKey.length) { _flagDir = 0; } - showDir(); + + if (_flagDir >= _arDirKey.length) { + + if (type === undefined) { + type = M.config.settings.other.reachLastDir; + } + + // 不做任何事情 + if (type === "none") { + _flagDir = _arDirKey.length - 1; + } + // 回到第一個資料夾 + else if (type === "firstDir") { + _flagDir = 0; + showDir(); + } + // 不做任何事情,並顯示提示 + else if (type === "noneWithPrompt") { + Toast.show(M.i18n.t("msg.reachLastDir"), 1000 * 3); // 已經是最後一個資料夾 + _flagDir = _arDirKey.length - 1; + } + // 回到第一個資料夾,並顯示提示 + else if (type === "firstDirWithPrompt") { + Toast.show(M.i18n.t("msg.firstDir"), 1000 * 3); // 載入第一個資料夾 + _flagDir = 0; + showDir(); + } + } else { + showDir(); + } } /** * 載入上一個資料夾 */ - async function prevDir() { + async function prevDir(type?: string) { + _flagDir -= 1; - if (_flagDir < 0) { _flagDir = _arDirKey.length - 1; } - showDir(); + + if (_flagDir < 0) { + + if (type === undefined) { + type = M.config.settings.other.reachLastDir; + } + + // 不做任何事情 + if (type === "none") { + _flagDir = 0; + } + // 前往最後一個資料夾 + else if (type === "firstDir") { + _flagDir = _arDirKey.length - 1; + showDir(); + } + // 不做任何事情,並顯示提示 + else if (type === "noneWithPrompt") { + Toast.show(M.i18n.t("msg.reachFirstDir"), 1000 * 3); // 已經是第一個資料夾 + _flagDir = 0; + } + // 前往最後一個資料夾,並顯示提示 + else if (type === "firstDirWithPrompt") { + Toast.show(M.i18n.t("msg.lastDir"), 1000 * 3); // 載入最後一個資料夾 + _flagDir = _arDirKey.length - 1; + showDir(); + } + } else { + showDir(); + } } /** @@ -663,9 +721,53 @@ class FileLoad { if (_groupType === GroupType.none || _groupType === GroupType.welcome) { return; } + _flagFile += 1; - if (_flagFile >= _arFile.length) { _flagFile = 0; } - showFile(); + + if (_flagFile >= _arFile.length) { + const reachLastFile = M.config.settings.other.reachLastFile; + // 不做任何事情 + if (reachLastFile === "none") { + _flagFile = _arFile.length - 1; + } + // 回到第一個檔案 + else if (reachLastFile === "firstFile") { + _flagFile = 0; + showFile(); + } + // 前往下一個資料夾 + else if (reachLastFile === "nextDir") { + if (_flagDir >= _arDirKey.length - 1) { + Toast.show(M.i18n.t("msg.reachLastDir"), 1000 * 3); // 已經是最後一個資料夾 + _flagFile = _arFile.length - 1; + } else { + nextDir("none"); + } + } + // 不做任何事情,並顯示提示 + else if (reachLastFile === "noneWithPrompt") { + Toast.show(M.i18n.t("msg.reachLastFile"), 1000 * 3); // 已經是最後一個檔案 + _flagFile = _arFile.length - 1; + } + // 回到第一個檔案,並顯示提示 + else if (reachLastFile === "firstFileWithPrompt") { + Toast.show(M.i18n.t("msg.firstFile"), 1000 * 3); // 載入第一個檔案 + _flagFile = 0; + showFile(); + } + // 前往下一個資料夾,並顯示提示 + else if (reachLastFile === "nextDirWithPrompt") { + if (_flagDir >= _arDirKey.length - 1) { + Toast.show(M.i18n.t("msg.reachLastDir"), 1000 * 3); // 已經是最後一個資料夾 + _flagFile = _arFile.length - 1; + } else { + Toast.show(M.i18n.t("msg.nextDir"), 1000 * 3); // 載入下一個資料夾 + nextDir("none"); + } + } + } else { + showFile(); + } } /** @@ -679,9 +781,56 @@ class FileLoad { if (_groupType === GroupType.none || _groupType === GroupType.welcome) { return; } + _flagFile -= 1; - if (_flagFile < 0) { _flagFile = _arFile.length - 1; } - showFile(); + + if (_flagFile < 0) { + const reachLastFile = M.config.settings.other.reachLastFile; + // 不做任何事情 + if (reachLastFile === "none") { + _flagFile = 0; + } + // 回到最後一個檔案 + else if (reachLastFile === "firstFile") { + _flagFile = _arFile.length - 1; + showFile(); + } + // 前往上一個資料夾的最後一個檔案 + else if (reachLastFile === "nextDir") { + if (_flagDir === 0) { + // 已經是第一個資料夾 + Toast.show(M.i18n.t("msg.reachFirstDir"), 1000 * 3); + _flagFile = 0; + } else { + prevDir("none"); + // TODO 需要處理成最後一個檔案 + } + } + // 不做任何事情,並顯示提示 + else if (reachLastFile === "noneWithPrompt") { + Toast.show(M.i18n.t("msg.reachFirstFile"), 1000 * 3); // 已經是第一個檔案 + _flagFile = 0; + } + // 回到最後一個檔案,並顯示提示 + else if (reachLastFile === "firstFileWithPrompt") { + Toast.show(M.i18n.t("msg.lastFile"), 1000 * 3); // 載入最後一個檔案 + _flagFile = _arFile.length - 1; + showFile(); + } + // 前往上一個資料夾的最後一個檔案,並顯示提示 + else if (reachLastFile === "nextDirWithPrompt") { + if (_flagDir === 0) { + Toast.show(M.i18n.t("msg.reachFirstDir"), 1000 * 3); // 已經是第一個資料夾 + _flagFile = 0; + } else { + Toast.show(M.i18n.t("msg.prevDir"), 1000 * 3); // 載入上一個資料夾 + prevDir("none"); + // TODO 需要處理成最後一個檔案 + } + } + } else { + showFile(); + } } /** diff --git a/Www/ts/SettingWindow/SettingWindow.ts b/Www/ts/SettingWindow/SettingWindow.ts index 0e6b0c9..1efe18d 100644 --- a/Www/ts/SettingWindow/SettingWindow.ts +++ b/Www/ts/SettingWindow/SettingWindow.ts @@ -1574,13 +1574,28 @@ class SettingWindow { // 偵測到檔案新增時,插入於 const select_whenInsertingFile = getDom("#select-whenInsertingFile") as HTMLSelectElement; select_whenInsertingFile.value = _config.settings["other"]["whenInsertingFile"]; - select_whenInsertingFile.addEventListener("change", () => { let val = select_whenInsertingFile.value; _config.settings["other"]["whenInsertingFile"] = val; appleSettingOfMain(); }); + // 到達最後一個檔案時 + const select_reachLastFile = getDom("#select-reachLastFile") as HTMLSelectElement; + select_reachLastFile.value = _config.settings.other.reachLastFile; + select_reachLastFile.addEventListener("change", () => { + _config.settings.other.reachLastFile = select_reachLastFile.value; + appleSettingOfMain(); + }); + + // 到達最後一個資料夾時 + const select_reachLastDir = getDom("#select-reachLastDir") as HTMLSelectElement; + select_reachLastDir.value = _config.settings.other.reachLastDir; + select_reachLastDir.addEventListener("change", () => { + _config.settings.other.reachLastDir = select_reachLastDir.value; + appleSettingOfMain(); + }); + // 啟用觸控板手勢 const switch_touchpadGesture = getDom("#switch-enableTouchpadGestures") as HTMLInputElement; switch_touchpadGesture.checked = _config.settings.other.enableTouchpadGestures;