Oscar Plaisant 62f0313af1 update
2024-09-20 21:31:23 +02:00

693 lines
47 KiB
JavaScript

/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => TabKeyPlugin
});
module.exports = __toCommonJS(main_exports);
var import_language = require("@codemirror/language");
var import_state = require("@codemirror/state");
var import_view = require("@codemirror/view");
// localization.ts
var localization = {
title: {
"en-US": "Obsidian Restore Tab Key Plugin",
"zh-CN": "\u9ED1\u66DC\u77F3\u7B14\u8BB0 \u6062\u5FA9\u5236\u8868\u952E\u884C\u4E3A\u63D2\u4EF6",
"zh-TW": "\u9ED1\u66DC\u77F3\u7B46\u8A18 \u6062\u5FA9\u5236\u8868\u9375\u884C\u70BA\u63D2\u4EF6"
},
description: {
"en-US": "Restore tab key behavior: tab key inserts a tab, the way it should be.",
"zh-CN": "\u56DE\u5FA9 Tab \u952E\u884C\u4E3A\uFF0C\u672C\u8BE5\u5982\u6B64\uFF01",
"zh-TW": "\u56DE\u5FA9 Tab \u9375\u884C\u70BA\uFF0C\u672C\u8A72\u5982\u6B64\uFF01"
},
tabOrSpace: {
"en-US": "Tab or Space Settings",
"zh-CN": "Tab \u6216\u7A7A\u683C\u8BBE\u5B9A",
"zh-TW": "Tab \u6216\u7A7A\u683C\u8A2D\u5B9A"
},
useSpacesInsteadOfTab: {
"en-US": "Use spaces instead of tab",
"zh-CN": "\u4EE5\u7A7A\u683C\u53D6\u4EE3 Tab",
"zh-TW": "\u4EE5\u7A7A\u683C\u53D6\u4EE3 Tab"
},
useSpacesInsteadOfTabDesc: {
"en-US": "false(default): Insert tab (\\t) when tab key is pressed. true: Insert spaces (\xA0\xA0\xA0\xA0) when tab key is pressed. (configurable)",
"zh-CN": "\u5173\u95ED(\u9ED8\u8BA4)\uFF1A\u5728 Tab \u952E\u88AB\u6309\u4E0B\u65F6\u63D2\u5165\u8868\u683C\u7B26\u53F7 (Tab)\uFF1B\u5F00\u542F\uFF1A\u5728 Tab \u952E\u88AB\u6309\u4E0B\u65F6\u63D2\u5165\u7A7A\u767D\u7B26\u53F7\uFF08\u53EF\u4EE5\u81EA\u8BA2\u4E49\uFF09",
"zh-TW": "\u95DC\u9589(\u9810\u8A2D)\uFF1A\u5728 Tab \u9375\u88AB\u6309\u4E0B\u6642\u63D2\u5165\u8868\u683C\u7B26\u865F (Tab)\uFF1B\u958B\u555F\uFF1A\u5728 Tab \u9375\u88AB\u6309\u4E0B\u6642\u63D2\u5165\u7A7A\u767D\u7B26\u865F\uFF08\u53EF\u4EE5\u81EA\u8A02\u7FA9\uFF09"
},
useHardSpaces: {
"en-US": "Use hard spaces",
"zh-CN": "\u4F7F\u7528\u786C\u7A7A\u683C\u5B57\u5143",
"zh-TW": "\u4F7F\u7528\u786C\u7A7A\u683C\u5B57\u5143"
},
useHardSpacesDesc: {
"en-US": `If "Indent using tabs" is false, space will be used to indent. If "Use hard spaces" is off, normal space characters will be used. Notice that with Markdown, repeated normal spaces will be rendered as one. Turn this option on to use hard spaces (U+00A0), which will not be truncated after Markdown render. To indent stuff in the processed Markdown output, move your cursor to the begin and press tab (indenting won't insert hard spaces)`,
"zh-CN": "\u5047\u5982\u300C\u4EE5 Tab \u7F29\u8FDB\u300D\u8BBE\u5B9A\u4E3A\u5173\u95ED\uFF0C\u7A7A\u683C\u4F1A\u88AB\u7528\u6765\u7F29\u6392\u3002\u5982\u679C\u300C\u4F7F\u7528\u786C\u7A7A\u683C\u300D\u88AB\u5173\u95ED\uFF0C\u5219\u4F1A\u4F7F\u7528\u6570\u4E2A\u666E\u901A\u7684\u7A7A\u683C\u7B26\u53F7\u3002\u8BF7\u6CE8\u610F\uFF1A\u5728 Markdown \u4E0B\uFF0C\u91CD\u8907\u7684\u7A7A\u683C\u4F1A\u88AB\u6E32\u67D3\u4E3A\u4E00\u4E2A\u3002\u5F00\u542F\u6B64\u9009\u9879\u540E\uFF0C\u786C\u7A7A\u683C (U+00A0) \u5C06\u4F1A\u53D6\u4EE3\u7A7A\u767D\u5B57\u5143\u5F53\u4F5C Tab\uFF0C\u5728\u6E32\u67D3\u540E\u4E0D\u4F1A\u88AB\u5220\u51CF\u3002\u82E5\u8981\u4F7F\u7528\u786C\u7A7A\u683C\u8FDB\u884C\u7F29\u6392\uFF0C\u8BF7\u624B\u52A8\u5C06\u5149\u6807\u79FB\u81F3\u884C\u5934\u5E76\u6309\u4E0B Tab \u952E\uFF08\u7F29\u6392\u4E0D\u4F1A\u4F7F\u7528\u786C\u7A7A\u683C\uFF09",
"zh-TW": "\u5047\u5982\u300C\u4EE5 Tab \u7E2E\u6392\u300D\u8A2D\u5B9A\u70BA\u95DC\u9589\uFF0C\u7A7A\u683C\u6703\u88AB\u7528\u4F86\u7E2E\u6392\u3002\u5982\u679C\u300C\u4F7F\u7528\u786C\u7A7A\u683C\u300D\u88AB\u95DC\u9589\uFF0C\u5247\u6703\u4F7F\u7528\u6578\u500B\u666E\u901A\u7684\u7A7A\u683C\u7B26\u865F\u3002\u8ACB\u6CE8\u610F\uFF1A\u5728 Markdown \u4E0B\uFF0C\u91CD\u8907\u7684\u7A7A\u683C\u6703\u88AB\u6E32\u67D3\u70BA\u4E00\u500B\u3002\u958B\u555F\u6B64\u9078\u9805\u5F8C\uFF0C\u786C\u7A7A\u683C (U+00A0) \u5C07\u6703\u53D6\u4EE3\u7A7A\u767D\u5B57\u5143\u7576\u4F5C Tab\uFF0C\u5728\u6E32\u67D3\u5F8C\u4E0D\u6703\u88AB\u522A\u6E1B\u3002\u82E5\u8981\u4F7F\u7528\u786C\u7A7A\u683C\u9032\u884C\u7E2E\u6392\uFF0C\u8ACB\u624B\u52D5\u5C07\u6E38\u6A19\u79FB\u81F3\u884C\u982D\u4E26\u6309\u4E0B Tab \u9375\uFF08\u7E2E\u6392\u4E0D\u6703\u4F7F\u7528\u786C\u7A7A\u683C\uFF09"
},
spaceCount: {
"en-US": "Space count",
"zh-CN": "\u7A7A\u683C\u6570\u91CF",
"zh-TW": "\u7A7A\u683C\u6578\u91CF"
},
spaceCountDesc: {
"en-US": "The number of spaces or hard spaces inserted when tab key is pressed. default: 4",
"zh-CN": "\u4F7F\u7528\u51E0\u4E2A\u7A7A\u683C\u5B57\u7B26\u53D6\u4EE3\u4E00\u4E2A Tab \u5B57\u7B26\uFF1F\u9ED8\u8BA4\uFF1A4\u4E2A",
"zh-TW": "\u4F7F\u7528\u5E7E\u500B\u7A7A\u683C\u7B26\u865F\u53D6\u4EE3\u4E00\u500B Tab \u5B57\u5143\uFF1F\u9810\u8A2D\uFF1A4\u500B"
},
alignSpaces: {
"en-US": "Align spaces (just like how tabs behave)",
"zh-CN": "\u5BF9\u9F50\u7A7A\u683C",
"zh-TW": "\u5C0D\u9F4A\u7A7A\u683C"
},
alignSpacesDesc: {
"en-US": 'At space count of 4, pressing tab after "abc" inserts one space, "abcde" inserts 3, so the end position after pressing tab is always an integer multiple of the space count.',
"zh-CN": '\u5047\u8BBE\u300C\u7A7A\u683C\u6570\u91CF\u300D\u8BBE\u4E3A 4\uFF0C\u5219\u5728"abc"\u6700\u540E\u6309\u4E0B Tab \u952E\u4F1A\u63D2\u5165\u4E00\u4E2A\u7A7A\u767D\uFF0C"abcde"\u5219\u4E3A\u4E09\u4E2A\uFF0C\u4F7F\u5F97\u6309\u4E0B Tab \u63D2\u5165\u7A7A\u683C\u540E\u7684\u5149\u6807\u4F4D\u7F6E\u4E3A\u7A7A\u683C\u6570\u91CF\u7684\u6574\u6570\u500D',
"zh-TW": '\u5047\u8A2D\u300C\u7A7A\u683C\u6578\u91CF\u300D\u8A2D\u70BA 4\uFF0C\u5247\u5728"abc"\u6700\u5F8C\u6309\u4E0B Tab \u9375\u6703\u63D2\u5165\u4E00\u500B\u7A7A\u767D\uFF0C"abcde"\u5247\u70BA\u4E09\u500B\uFF0C\u4F7F\u5F97\u6309\u4E0B Tab \u63D2\u5165\u7A7A\u683C\u5F8C\u7684\u6E38\u6A19\u4F4D\u7F6E\u70BA\u7A7A\u683C\u6578\u91CF\u7684\u6574\u6578\u500D'
},
tabKeyBehavior: {
"en-US": "Tab Key Behavior",
"zh-CN": "Tab \u952E\u884C\u4E3A",
"zh-TW": "Tab \u9375\u884C\u70BA"
},
activateIn: {
"en-US": "Activate plugin in Markdown environment",
"zh-CN": "\u5728 Markdown \u73AF\u5883\u4E2D\u542F\u7528\u63D2\u4EF6",
"zh-TW": "\u5728 Markdown \u74B0\u5883\u4E2D\u555F\u7528\u63D2\u4EF6"
},
activateInDesc: {
"en-US": "On: Insert tab character. Off: Indent, or next cell for tables",
"zh-CN": "\u5F00\u542F\uFF1A\u63D2\u5165 Tab \u5B57\u7B26\u3002\u5173\u95ED\uFF1A\u7F29\u6392\uFF0C\u6216\u8005\u5728\u8868\u683C\u4E2D\u4E3A\u79FB\u81F3\u4E0B\u4E00\u683C",
"zh-TW": "\u958B\u555F\uFF1A\u63D2\u5165 Tab \u5B57\u5143\u3002\u95DC\u9589\uFF1A\u7E2E\u6392\uFF0C\u6216\u8005\u5728\u8868\u683C\u4E2D\u70BA\u79FB\u81F3\u4E0B\u4E00\u683C"
},
activateInCodeBlocks: {
"en-US": "Code blocks",
"zh-CN": "\u4EE3\u7801\u533A\u5757",
"zh-TW": "\u7A0B\u5F0F\u78BC\u5340\u584A"
},
activateInLists: {
"en-US": "Lists",
"zh-CN": "\u5217\u8868",
"zh-TW": "\u5217\u8868"
},
activateInTables: {
"en-US": "Tables",
"zh-CN": "\u8868\u683C",
"zh-TW": "\u8868\u683C"
},
activateInInlineCode: {
"en-US": "Inline code / Indented code",
"zh-CN": "\u884C\u5167\u4EE3\u7801\uFF08inline code\uFF09",
"zh-TW": "\u884C\u5167\u7A0B\u5F0F\u78BC\uFF08inline code\uFF09"
},
activateInOthers: {
"en-US": "Others",
"zh-CN": "\u5176\u4ED6",
"zh-TW": "\u5176\u4ED6"
},
indentWhenSelectionNotEmpty: {
"en-US": "Indents when selection is not empty",
"zh-CN": "\u5728\u6709\u6587\u5B57\u88AB\u9009\u53D6\u65F6\u9032\u884C\u7F29\u6392",
"zh-TW": "\u5728\u6709\u6587\u5B57\u88AB\u9078\u53D6\u6642\u9032\u884C\u7E2E\u6392"
},
indentWhenSelectionNotEmptyDesc: {
"en-US": "true(default): Select some text and press tab key will indent the selected lines. Same behavior as most IDEs. \nfalse: Selection will be replaced with one tab",
"zh-CN": "\u5F00\u542F\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u9009\u53D6/\u53CD\u767D\u4E00\u4E9B\u6587\u5B57\u540E\u6309\u4E0B Tab \u952E\u4F1A\u7F29\u8FDB\u8BE5\u51E0\u884C\u6587\u5B57\u3002\u6B64\u884C\u4E3A\u548C\u591A\u6570 IDE \u76F8\u540C\uFF1B\u5173\u95ED\uFF1A\u9009\u53D6\u7684\u6587\u5B57\u4F1A\u88AB\u53D6\u4EE3\u4E3A\u4E00\u4E2A Tab",
"zh-TW": "\u958B\u555F\uFF08\u9810\u8A2D\uFF09\uFF1A\u9078\u53D6/\u53CD\u767D\u4E00\u4E9B\u6587\u5B57\u5F8C\u6309\u4E0B Tab \u9375\u6703\u7E2E\u6392\u8A72\u5E7E\u884C\u6587\u5B57\u3002\u6B64\u884C\u70BA\u548C\u591A\u6578 IDE \u76F8\u540C\uFF1B\u95DC\u9589\uFF1A\u9078\u53D6\u7684\u6587\u5B57\u6703\u88AB\u53D6\u4EE3\u70BA\u4E00\u500B Tab"
},
indentOnlySelectionMultipleLine: {
"en-US": "Indents only when selection contains multiple lines",
"zh-CN": "\u4EC5\u5728\u9009\u53D6\u591A\u884C\u65F6\u8FDB\u884C\u7F29\u8FDB",
"zh-TW": "\u50C5\u5728\u9078\u53D6\u591A\u884C\u6642\u9032\u884C\u7E2E\u6392"
},
indentOnlySelectionMultipleLineDesc: {
"en-US": "true(default): If the selection lies within one line, a tab (or spaces) will replace the selection instead",
"zh-CN": "\u5F00\u542F\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u5982\u679C\u4EC5\u6709\u4E00\u884C\u6587\u5B57\u88AB\u9009\u53D6\uFF0C\u5219\u9009\u53D6\u7684\u6587\u5B57\u4F1A\u88AB\u53D6\u4EE3\u4E3A\u4E00\u4E2A Tab",
"zh-TW": "\u958B\u555F\uFF08\u9810\u8A2D\uFF09\uFF1A\u5982\u679C\u50C5\u6709\u4E00\u884C\u6587\u5B57\u88AB\u9078\u53D6\uFF0C\u5247\u9078\u53D6\u7684\u6587\u5B57\u6703\u88AB\u53D6\u4EE3\u70BA\u4E00\u500B Tab"
},
allowException: {
"en-US": "Allow exceptions for indenting",
"zh-CN": "\u5141\u8BB8\u5BF9\u7F29\u8FDB\u8FDB\u884C\u4F8B\u5916\u5904\u7406",
"zh-TW": "\u5C0D\u7E2E\u6392\u9032\u884C\u4F8B\u5916\u8655\u7406"
},
allowExceptionDesc: {
"en-US": "Indent line even when the selection is empty when the line matches the regex (For example, when cursor is on an empty list bullet)",
"zh-CN": "\u82E5\u5149\u6807\u6240\u5728\u7684\u90A3\u884C\u5339\u914D\u4EE5\u4E0B\u8868\u8FBE\u5F0F\u65F6\uFF0C\u4ECD\u7136\u8FDB\u884C\u7F29\u8FDB\uFF08\u5982\u8BE5\u884C\u4E3A\u7A7A\u767D\u7684\u6E05\u5355\u5217\u8868\uFF09",
"zh-TW": "\u82E5\u6E38\u6A19\u6240\u5728\u7684\u90A3\u884C\u7B26\u5408\u4EE5\u4E0B\u8868\u9054\u5F0F\u6642\uFF0C\u4ECD\u7136\u9032\u884C\u7E2E\u6392\uFF08\u5982\u8A72\u884C\u70BA\u7A7A\u767D\u7684\u6E05\u55AE\u5217\u8868\uFF09"
},
exceptionRegex: {
"en-US": "Exception regex",
"zh-CN": "\u4F8B\u5916\u7684\u6B63\u5219\u8868\u8FBE\u5F0F",
"zh-TW": "\u4F8B\u5916\u7684\u6B63\u898F\u8868\u9054\u5F0F"
},
exceptionRegexDesc: {
"en-US": "default: Indents regardless in empty list entries (zero or more whitespaces, followed by - or number. then optionally a checkbox and then a space). Remove the trailing $ to enable indentation in non-empty lists",
"zh-CN": "\u9ED8\u8BA4\uFF1A\u5728\u8BE5\u884C\u4E3A\u6E05\u5355\u5217\u8868\u9879\u76EE\u65F6\uFF08\u96F6\u4E2A\u6216\u4EE5\u4E0A\u4E2A\u7A7A\u767D\uFF0C\u52A0\u4E0A\u4E00\u4E2A\u6570\u5B57\uFF0C\u4E5F\u8BB8\u518D\u52A0\u4E0A\u4E00\u4E2A\u8907\u9009\u6846\uFF0C\u7136\u540E\u518D\u4E00\u4E2A\u7A7A\u767D\uFF09\u3002\u5220\u9664\u7ED3\u5C3E\u7684 $ \u7B26\u53F7\uFF0C\u53EF\u4EE5\u8BA9\u6B64\u8868\u8FBE\u5F0F\u5339\u914D\u975E\u7A7A\u767D\u7684\u6E05\u5355\u9879\u76EE\u3002",
"zh-TW": "\u9810\u8A2D\uFF1A\u5728\u8A72\u884C\u70BA\u6E05\u55AE\u5217\u8868\u9805\u76EE\u6642\uFF08\u96F6\u500B\u6216\u4EE5\u4E0A\u500B\u7A7A\u767D\uFF0C\u52A0\u4E0A\u4E00\u500B\u6578\u5B57\uFF0C\u4E5F\u8A31\u518D\u52A0\u4E0A\u4E00\u500B\u8907\u9078\u6846\uFF0C\u7136\u5F8C\u518D\u4E00\u500B\u7A7A\u767D\uFF09\u3002\u522A\u9664\u7D50\u5C3E\u7684 $ \u7B26\u865F\uFF0C\u53EF\u4EE5\u8B93\u6B64\u8868\u9054\u5F0F\u5339\u914D\u975E\u7A7A\u767D\u7684\u6E05\u55AE\u9805\u76EE\u3002"
},
pluginCompatibility: {
"en-US": "Compatibility",
"zh-CN": "\u517C\u5BB9\u6027",
"zh-TW": "\u517C\u5BB9\u6027"
},
obsidianTableEditor: {
"en-US": "Use with the native Obsidian Table Editor",
"zh-CN": "\u548C\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7F16\u8F91\u5668\u4E00\u8D77\u4F7F\u7528",
"zh-TW": "\u548C\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7DE8\u8F2F\u5668\u4E00\u8D77\u4F7F\u7528"
},
obsidianTableEditorDesc: {
"en-US": `Do not capture tab key if cursor is on an Obsidian table editor in "Live Preview" mode, so you can go to next cell with the tab key. This setting does not apply to "Source" mode. Also, it is recommended to uninstall/unbind tab in Advanced Tables plugin if you mainly work in live preview mode, because Advanced Tables currently doesn't work as well as the native editor does.`,
"zh-CN": "\u5728\u9884\u89C8\u6A21\u5F0F\u4E0B\u4E0D\u5BF9 Tab \u952E\u8FDB\u884C\u5904\u7406\uFF0C\u4EA4\u7ED9\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7F16\u8F91\u5668\u3002\u82E5\u4F60\u5E38\u5728\u9884\u89C8\u6A21\u5F0F\u4E0B\u5DE5\u4F5C\uFF0C\u6211\u5EFA\u8BAE\u5C06 Advanced Tables plugin \u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u505C\u7528\u6216\u5C06\u5176 Tab \u952E\u89E3\u7ED1\uFF0C\u56E0\u4E3A\u5B83\u6CA1\u6709\u6BD4\u8868\u683C\u7F16\u8F91\u5668\u597D\u7528\u3002",
"zh-TW": "\u5728\u9810\u89BD\u6A21\u5F0F\u4E0B\u4E0D\u5C0D Tab \u9375\u9032\u884C\u8655\u7406\uFF0C\u4EA4\u7D66\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7DE8\u8F2F\u5668\u3002\u82E5\u4F60\u5E38\u5728\u9810\u89BD\u6A21\u5F0F\u4E0B\u5DE5\u4F5C\uFF0C\u6211\u5EFA\u8B70\u5C07 Advanced Tables plugin \u9032\u968E\u8868\u683C\u63D2\u4EF6\u505C\u7528\u6216\u5C07\u5176 Tab \u9375\u89E3\u7D81\uFF0C\u56E0\u70BA\u5B83\u6C92\u6709\u6BD4\u8868\u683C\u7DE8\u8F2F\u5668\u597D\u7528\u3002"
},
advancedTables: {
"en-US": "Use with Advanced Tables plugin",
"zh-CN": "\u548C Advanced Tables plugin \u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528",
"zh-TW": "\u548C Advanced Tables plugin \u9032\u968E\u8868\u683C\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528"
},
advancedTablesDesc: {
"en-US": 'Creates a new table or go to next cell when cursor is in a table. Requires disabling "Bind tab to table navigation" in the Advanced Tables plugin (and restart Obsidian). I recommend leaving that setting on and this off, and leave tab key binding to Advanced Tables plugin in a table environment, it does the exact same thing.',
"zh-CN": "\u5F53\u5149\u6807\u5728\u4E00\u4E2A\u8868\u683C\u5185\u65F6\u6309\u4E0B Tab \u4F1A\u521B\u5EFA\u65B0\u8868\u683C\u6216\u8DF3\u5230\u4E0B\u4E00\u4E2A\u5355\u5143\u683C\u3002\u9700\u8981\u5728\u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u4E2D\u5173\u95ED\u300CBind tab to table navigation\u300D\u5E76\u91CD\u542F\u9ED1\u66DC\u77F3\u7B14\u8BB0\u3002\u5EFA\u8BAE\u7EF4\u6301\u539F\u6837\uFF0C\u5728\u8868\u683C\u73AF\u5883\u5185\u4EA4\u7ED9\u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u5904\u7406 Tab \u952E\u7ED1\u5B9A\u3002",
"zh-TW": "\u7576\u6E38\u6A19\u5728\u4E00\u500B\u8868\u683C\u5167\u6642\u6309\u4E0B Tab \u6703\u5275\u5EFA\u65B0\u8868\u683C\u6216\u8DF3\u5230\u4E0B\u4E00\u500B\u5132\u5B58\u683C\u3002\u9700\u8981\u5728\u9032\u968E\u8868\u683C\u63D2\u4EF6\u4E2D\u95DC\u9589\u300CBind tab to table navigation\u300D\u4E26\u91CD\u555F\u9ED1\u66DC\u77F3\u7B46\u8A18\u3002\u5EFA\u8B70\u7DAD\u6301\u539F\u6A23\uFF0C\u5728\u8868\u683C\u74B0\u5883\u5167\u4EA4\u7D66\u9032\u968E\u8868\u683C\u63D2\u4EF6\u8655\u7406 Tab \u9375\u7D81\u5B9A\u3002"
},
outliner: {
"en-US": "Use with Obsidian Outliner plugin",
"zh-CN": "\u548C Obsidian Outliner plugin \u5927\u7EB2\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528",
"zh-TW": "\u548C Obsidian Outliner plugin \u5927\u7DB1\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528"
},
outlinerDesc: {
"en-US": "Try execute Outliner indent operation when tab is pressed, if nothing changed, use default Restore Tab Key plugin behavior. Basically, if the selection is empty and cursor is on a list item, it will indent the item if Tab is pressed, unless it can't, in that case a tab will be inserted. A list item can't be indented if it is already one level deeper than the item above. This plugin can also indent everything under the selected item recursively, and relabel numbered lists.",
"zh-CN": "\u5C1D\u8BD5\u6267\u884C Outliner \u7684\u7F29\u6392\u6307\u4EE4\uFF0C\u5982\u679C\u6CA1\u6709\u4EFB\u4F55\u66F4\u6539\u5219\u5957\u7528\u672C\u63D2\u4EF6\u7684\u8BBE\u5B9A\u3002\u57FA\u672C\u4E0A\u5F53\u6309\u4E0B Tab \u952E\uFF0C\u4E14\u6CA1\u6709\u6587\u5B57\u88AB\u9009\u53D6\uFF0C\u4E14\u5149\u6807\u5728\u6E05\u5355\u5217\u8868\u4E0A\u7684\u8BDD\uFF0C\u4F1A\u76F4\u63A5\u5C06\u8BE5\u6E05\u5355\u5217\u8868\u7B49\u7EA7",
"zh-TW": "\u5617\u8A66\u57F7\u884C Outliner \u7684\u7E2E\u6392\u6307\u4EE4\uFF0C\u5982\u679C\u6C92\u6709\u4EFB\u4F55\u8B8A\u5316\u7684\u8A71\u5247\u5957\u7528\u672C\u63D2\u4EF6\u7684\u8A2D\u5B9A\u3002\u57FA\u672C\u4E0A\u7576\u6309\u4E0B Tab \u9375\uFF0C\u4E14\u6C92\u6709\u6587\u5B57\u88AB\u9078\u53D6\uFF0C\u4E14\u6E38\u6A19\u5728\u6E05\u55AE\u5217\u8868\u4E0A\u7684\u8A71\uFF0C\u6703\u76F4\u63A5\u5C07\u8A72\u6E05\u55AE\u5217\u8868\u7B49\u7D1A"
},
additional: {
"en-US": "Additional Options",
"zh-CN": "\u5176\u4ED6\u9009\u9879",
"zh-TW": "\u5176\u4ED6\u9078\u9805"
},
customHotkey: {
"en-US": "Custom hotkey",
"zh-CN": "\u81EA\u5B9A\u4E49\u70ED\u952E",
"zh-TW": "\u81EA\u5B9A\u7FA9\u71B1\u9375"
},
customHotkeyDesc: {
"en-US": `Tab doesn't work for you? Try "Ctrl-Alt-Space", or "Shift-F6"? (Reload required. Go to "Community plugins" and disable then enable this plugin will do)`,
"zh-CN": '\u4E0D\u60F3\u7528 Tab \u952E\uFF1F\u8BD5\u8BD5 "Ctrl-Alt-Space" \u6216\u8005 "Shift-F6"\uFF1F\uFF08\u9700\u8981\u91CD\u65B0\u542F\u52A8\u63D2\u4EF6\uFF0C\u5230\u300C\u7B2C\u4E09\u65B9\u63D2\u4EF6\u300D\u5173\u95ED\u6B64\u63D2\u4EF6\u540E\u518D\u5F00\u542F\u5373\u53EF\uFF09',
"zh-TW": '\u4E0D\u60F3\u7528 Tab \u9375\uFF1F\u8A66\u8A66 "Ctrl-Alt-Space" \u6216\u8005 "Shift-F6"\uFF1F\uFF08\u9700\u8981\u91CD\u65B0\u555F\u52D5\u63D2\u4EF6\uFF0C\u5230\u300C\u7B2C\u4E09\u65B9\u63D2\u4EF6\u300D\u95DC\u9589\u6B64\u63D2\u4EF6\u5F8C\u518D\u958B\u555F\u5373\u53EF\uFF09'
},
language: {
"en-US": "Settings page interface language",
"zh-CN": "\u8BBE\u5B9A\u9875\u663E\u793A\u8BED\u8A00",
"zh-TW": "\u8A2D\u5B9A\u9801\u986F\u793A\u8A9E\u8A00"
},
languageDesc: {
"en-US": "Would Chinese be better?",
"zh-CN": "\u82F1\u6587\u4F1A\u66F4\u9002\u5408\u5417\uFF1F",
"zh-TW": "\u82F1\u6587\u6703\u66F4\u9069\u5408\u55CE\uFF1F"
},
developerMode: {
"en-US": "Developer Mode",
"zh-CN": "\u5F00\u53D1\u8005\u6A21\u5F0F",
"zh-TW": "\u958B\u767C\u8005\u6A21\u5F0F"
},
developerModeDesc: {
"en-US": 'Enable debug on the Obsidian Developer Console, accessible by pressing Ctrl+Shift+I and selecting the Console tab, and show hidden, deprecated settings. If you encounter problems with the plugin, please open an issue on Github. If the plugin is not working properly, check if the console shows that the tab key event is triggered. If not, either the hotkey is configured wrong, you may try other keys that are less likely to have a conflict, like "F6". If the tab key is not triggering, it is most likely that other plugins have acquired the tab key event. Lastly, you may try testing in a new vault (accessible at the bottom left toolbar).',
"zh-CN": '\u5F00\u542F\u4FA6\u9519\u4FE1\u606F\uFF0C\u5E76\u663E\u793A\u88AB\u9690\u85CF\u3001\u9000\u5F79\u7684\u8BBE\u5B9A\u4EEC\u3002\u7EC8\u7AEF\u53EF\u4EE5\u900F\u8FC7\u6309\u4E0B Ctrl+Shift+I \u540E\u9009\u62E9 Console \u5206\u9875\u3002\u82E5\u9047\u5230\u95EE\u9898\uFF0C\u8BF7\u5728 Github \u53D1\u8D77 issue\u3002\u8BF7\u5148\u68C0\u67E5 Console \u662F\u5426\u5728\u6309\u4E0B Tab \u952E\u540E\u663E\u793A "[restore tab] Tab key event triggered"\u3002\u82E5\u5426\uFF0C\u5C1D\u8BD5\u5C06\u81EA\u5B9A\u4E49\u70ED\u952E\u6539\u4E3A\u6BD4\u5982\u51B2\u7A81\u6982\u7387\u8F83\u4F4E\u7684 "F6"\u3002\u82E5 Tab \u952E\u65E0\u6CD5\u89E6\u53D1\uFF0C\u6700\u6709\u53EF\u80FD\u7684\u662F\u5176\u4ED6\u63D2\u4EF6\u5C06 Tab \u952E\u4E8B\u4EF6\u62FF\u8D70\u4E86\u3002\u6700\u540E\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5F00\u542F\u65B0\u7684\u50A8\u5B58\u5E93\uFF08\u5DE6\u4E0B\u5DE5\u5177\u5217\uFF09\u8FDB\u884C\u6D4B\u8BD5\u3002',
"zh-TW": '\u958B\u555F\u5075\u932F\u8A0A\u606F\uFF0C\u4E26\u986F\u793A\u88AB\u96B1\u85CF\u3001\u9000\u5F79\u7684\u8A2D\u5B9A\u5011\u3002\u7D42\u7AEF\u53EF\u4EE5\u900F\u904E\u6309\u4E0B Ctrl+Shift+I \u5F8C\u9078\u64C7 Console \u5206\u9801\u3002\u82E5\u9047\u5230\u554F\u984C\uFF0C\u8ACB\u5728 Github \u767C\u8D77 issue\u3002\u8ACB\u5148\u6AA2\u67E5 Console \u662F\u5426\u5728\u6309\u4E0B Tab \u9375\u5F8C\u986F\u793A "[restore tab] Tab key event triggered"\u3002\u82E5\u5426\uFF0C\u5617\u8A66\u5C07\u81EA\u5B9A\u7FA9\u71B1\u9375\u6539\u70BA\u6BD4\u5982\u885D\u7A81\u6A5F\u7387\u8F03\u4F4E\u7684 "F6"\u3002\u82E5 Tab \u9375\u7121\u6CD5\u89F8\u767C\uFF0C\u6700\u6709\u53EF\u80FD\u7684\u662F\u5176\u4ED6\u63D2\u4EF6\u5C07 Tab \u9375\u4E8B\u4EF6\u62FF\u8D70\u4E86\u3002\u6700\u5F8C\uFF0C\u4F60\u9084\u53EF\u4EE5\u958B\u555F\u65B0\u7684\u5132\u5B58\u5EAB\uFF08\u5DE6\u4E0B\u5DE5\u5177\u5217\uFF09\u9032\u884C\u6E2C\u8A66\u3002'
},
auto: {
"en-US": "Auto",
"zh-CN": "\u81EA\u52A8",
"zh-TW": "\u81EA\u52D5"
},
bracesAutoIndent: {
"en-US": "Braces Auto Indent",
"zh-CN": "\u62EC\u5F27\u81EA\u52A8\u7F29\u8FDB",
"zh-TW": "\u62EC\u5F27\u81EA\u52D5\u7E2E\u6392"
},
enableBracesAutoIndent: {
"en-US": "Enable braces auto indent",
"zh-CN": "\u542F\u7528\u62EC\u5F27\u81EA\u52A8\u7F29\u8FDB",
"zh-TW": "\u555F\u7528\u62EC\u5F27\u81EA\u52D5\u7E2E\u6392"
},
enableBracesAutoIndentDesc: {
"en-US": "When the cursor is next to a brace character, pressing the Enter key will duplicate the indentation from the current line and then add an additional indent according to Obsidian settings",
"zh-CN": "\u7576\u5149\u6A19\u5728\u62EC\u5F27\u5B57\u5143\u65C1\u908A\u6642\uFF0C\u6309\u4E0B Enter \u9375\u6703\u8907\u88FD\u7576\u884C\u7684\u7E2E\u9032\uFF0C\u4E26\u518D\u52A0\u4E00\u500B\u7E2E\u9032",
"zh-TW": "\u7576\u6E38\u6A19\u5728\u62EC\u5F27\u5B57\u5143\u65C1\u908A\u6642\uFF0C\u6309\u4E0B Enter \u9375\u6703\u8907\u88FD\u7576\u884C\u7684\u7E2E\u6392\uFF0C\u4E26\u518D\u52A0\u4E00\u500B\u7E2E\u6392"
},
braceSetCode: {
"en-US": "Paired braces set (within code blocks)",
"zh-CN": "\u6210\u5BF9\u6807\u70B9\u7B26\u53F7/\u62EC\u53F7\u96C6\u5408\uFF08\u5728\u4EE3\u7801\u533A\u5757\u5185\u65F6\uFF09",
"zh-TW": "\u6210\u5C0D\u6A19\u9EDE\u7B26\u865F/\u62EC\u5F27\u96C6\u5408\uFF08\u5728\u7A0B\u5F0F\u78BC\u5340\u584A\u5167\u6642\uFF09"
},
braceSetCodeDesc: {
"en-US": "Match the string before the cursor on the line, and after the line. If both match for the same index in the json array of regexes, a paired brace is detected.",
"zh-CN": "\u5C06\u5149\u6807\u524D\u9762\u53CA\u540E\u9762\u7684\u5B57\u4E32\u8FDB\u884C\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u82E5\u5728json\u9635\u5217\u7684\u540C\u4E00\u4E2A\u4F4D\u7F6E\u6210\u529F\u5339\u914D\u5219\u89C6\u4E3A\u6210\u5BF9\u6807\u70B9\u7B26\u53F7\u3002",
"zh-TW": "\u5C07\u6E38\u6A19\u524D\u9762\u53CA\u5F8C\u9762\u7684\u5B57\u4E32\u9032\u884C\u6B63\u898F\u8868\u9054\u5F0F\u5339\u914D\uFF0C\u82E5\u5728json\u9663\u5217\u7684\u540C\u4E00\u500B\u4F4D\u7F6E\u6210\u529F\u5339\u914D\u5247\u8996\u70BA\u6210\u5C0D\u6A19\u9EDE\u7B26\u865F\u3002"
},
braceSetMarkdown: {
"en-US": "Brace regex (outside code blocks)",
"zh-CN": "\u6210\u5BF9\u6807\u70B9\u7B26\u53F7/\u62EC\u53F7\u96C6\u5408\uFF08\u4E0D\u5728\u4EE3\u7801\u533A\u5757\u5185/\u4E00\u822C Markdown \u533A\u5757\u5185\u65F6\uFF09",
"zh-TW": "\u6210\u5C0D\u6A19\u9EDE\u7B26\u865F/\u62EC\u5F27\u96C6\u5408\uFF08\u4E0D\u5728\u7A0B\u5F0F\u78BC\u5340\u584A\u5167/\u4E00\u822C Markdown \u5340\u584A\u5167\u6642\uFF09"
},
braceSetMarkdownDesc: {
"en-US": "Same thing but when cursor is not in a code block. Default includes multi line math expression $$ and HTML tags. Note that indenting doesn't get rendered in Markdown.",
"zh-CN": "\u548C\u524D\u8005\u4E00\u6837\uFF0C\u4F46\u5728\u5149\u6807\u4E0D\u5728\u4EE3\u7801\u533A\u5757\u5185\u65F6\u3002\u9002\u7528\u4E00\u822C Markdown \u8BED\u6CD5\u4F7F\u7528\u3002\u9884\u8BBE\u503C\u5305\u62EC\u591A\u884C\u6570\u5B66\u516C\u5F0F\u548C HTML tags\u3002\u6CE8\u610F\uFF1A\u7F29\u8FDB\u4E0D\u4F1A\u88AB Markdown \u6E32\u67D3\u51FA\u6765",
"zh-TW": "\u548C\u524D\u8005\u4E00\u6A23\uFF0C\u4F46\u5728\u6E38\u6A19\u4E0D\u5728\u7A0B\u5F0F\u78BC\u5340\u584A\u5167\u6642\u3002\u9069\u7528\u4E00\u822C Markdown \u8A9E\u6CD5\u4F7F\u7528\u3002\u9810\u8A2D\u503C\u5305\u62EC\u591A\u884C\u6578\u5B78\u516C\u5F0F\u548C HTML tags\u3002 \u6CE8\u610F\uFF1A\u7E2E\u6392\u4E0D\u6703\u88AB Markdown \u6E32\u67D3\u51FA\u4F86"
},
extraButtonRestore: {
"en-US": "Restore default",
"zh-CN": "\u6062\u5FA9\u9ED8\u8BA4\u503C",
"zh-TW": "\u6062\u5FA9\u9810\u8A2D\u503C"
},
extraButtonDisable: {
"en-US": "Disable",
"zh-CN": "\u5173\u95ED",
"zh-TW": "\u95DC\u9589"
}
};
// main.ts
var import_obsidian = require("obsidian");
var DEFAULT_SETTINGS = {
indentsIfSelection: true,
indentsIfSelectionOnlyForMultipleLines: true,
useSpaces: false,
alignSpaces: true,
useHardSpace: false,
spacesCount: 4,
allowException: false,
exceptionRegex: "^[\\s\xA0]*(-|\\d+\\.)( \\[ \\])?\\s*$",
useAdvancedTables: false,
obsidianTableEditor: true,
useOutlinerBetterTab: true,
hotkey: "Tab",
language: "auto",
developerMode: false,
enableBracesAutoIndent: true,
braceCodeSetOpen: '["\\\\{$", "\\\\[$", "\\\\($", "\\"$", "\'$", "`$"]',
braceCodeSetClose: '["^\\\\}", "^\\\\]", "^\\\\)", "^\\"", "^\'", "^`"]',
braceMarkdownSetOpen: `["\\\\{$", "\\\\[$", "\\\\($", "\\"$", "'$", "\\\\$\\\\$$", "<.+>$", "\xA1$", "\xBF$"]`,
braceMarkdownSetClose: `["^\\\\}", "^\\\\]", "^\\\\)", "^\\"", "^'", "^\\\\$\\\\$", "^<\\\\/\\\\w+>", "^!", "^?"]`,
indentCharacters: " ",
activateInCodeBlocks: true,
activateInLists: false,
activateInTables: false,
activateInInlineCode: false,
activateInOthers: false
};
var TabKeyPlugin = class extends import_obsidian.Plugin {
constructor() {
super(...arguments);
this.getToken = (state) => {
const ast = (0, import_language.syntaxTree)(state);
return ast.resolveInner(state.selection.main.head, -1).type.name;
};
this.log = (msg) => {
if (this.settings.developerMode)
console.log("[restore tab] " + msg);
};
}
async onload() {
await this.loadSettings();
this.addSettingTab(new SettingTab(this.app, this));
let outlinerIndenting = false;
this.registerEditorExtension(import_state.Prec.highest(import_view.keymap.of([
{
key: this.settings.hotkey,
run: () => {
this.log("Tab key event triggered");
if (outlinerIndenting) {
this.log("Failed to execute: Outliner recursive call blocked");
return false;
}
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view) {
this.log("Failed to execute: Cannot get editor view");
return false;
}
const editor = view.editor;
const sourceMode = view.getState().source;
const token = this.getToken(editor.cm.state);
this.log("Current token: " + token);
const cursorFrom = editor.getCursor("from");
const cursorTo = editor.getCursor("to");
const somethingSelected = cursorFrom.line != cursorTo.line || cursorFrom.ch != cursorTo.ch;
const app = this.app;
const isTable = RegExp(`^ *\\|`, "u").test(editor.getLine(cursorFrom.line)) || token.includes("HyperMD-table");
if (token.includes("inline-code")) {
if (!this.settings.activateInInlineCode) {
this.log("Did not execute: Inline code environment not activated");
return false;
}
} else if (token.includes("hmd-codeblock")) {
if (!this.settings.activateInCodeBlocks) {
this.log("Did not execute: Code block environment not activated");
return false;
}
} else if (token.includes("list-1")) {
if (!this.settings.activateInLists) {
this.log("Did not execute: List environment not activated");
return false;
}
} else if (!isTable) {
if (!this.settings.activateInOthers) {
this.log("Did not execute: Other environments not activated");
return false;
}
}
if (this.settings.useOutlinerBetterTab && RegExp("^[\\s]*(-|\\d+\\.)", "u").test(editor.getLine(cursorFrom.line))) {
const prevLine = editor.getLine(cursorFrom.line);
outlinerIndenting = true;
this.log("Trying Outliner indent");
app.commands.executeCommandById("obsidian-outliner:indent-list");
outlinerIndenting = false;
if (prevLine != editor.getLine(cursorFrom.line)) {
this.log("Did not execute: Handled by Outliner");
return true;
}
}
if (isTable && !this.settings.activateInTables) {
if (!sourceMode) {
this.log("Table environment in Live Preview mode");
if (this.settings.obsidianTableEditor) {
this.log("Did not execute: Handled by Obsidian Table Editor");
return false;
}
} else {
this.log("Table environment in Source mode");
if (this.settings.useAdvancedTables) {
app.commands.executeCommandById("table-editor-obsidian:next-cell");
this.log("Did not execute: Handled by Advanced Table");
return true;
}
}
}
if (somethingSelected && this.settings.indentsIfSelection && (!this.settings.indentsIfSelectionOnlyForMultipleLines || cursorTo.line != cursorFrom.line)) {
editor.exec("indentMore");
this.log("Indented");
} else {
const cursorFrom2 = editor.getCursor("from");
const tabStr = this.settings.useSpaces ? (this.settings.useHardSpace ? "\xA0" : " ").repeat(this.settings.alignSpaces ? this.settings.spacesCount - cursorFrom2.ch % this.settings.spacesCount : this.settings.spacesCount) : " ";
if (!somethingSelected && this.settings.allowException) {
if (RegExp(this.settings.exceptionRegex, "u").test(editor.getLine(cursorFrom2.line))) {
editor.exec("indentMore");
this.log("Indented (regex exception)");
return true;
}
}
editor.replaceSelection(tabStr);
editor.setCursor({
line: cursorFrom2.line,
ch: cursorFrom2.ch + tabStr.length
});
this.log("Tab inserted");
}
return true;
},
preventDefault: false
},
{
key: "Enter",
run: () => {
this.log("Enter key event triggered");
if (!this.settings.enableBracesAutoIndent)
return false;
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view) {
this.log("Failed to execute: Cannot get editor view");
return false;
}
const editor = view.editor;
if (editor.getCursor("from").line != editor.getCursor("to").line || editor.getCursor("from").ch != editor.getCursor("to").ch)
return false;
const cursor = editor.getCursor("from");
const line = editor.getLine(cursor.line);
const token = this.getToken(editor.cm.state);
if (this.settings.developerMode) {
this.log("Current token: " + token);
this.log("which is" + (token.includes("hmd-codeblock") ? " " : " not ") + "a code block, matching regexes for " + (token.includes("hmd-codeblock") ? "code" : "markdown"));
}
let braceDetected = false;
const bracesOpen = JSON.parse(token.includes("hmd-codeblock") ? this.settings.braceCodeSetOpen : this.settings.braceMarkdownSetOpen);
const bracesClose = JSON.parse(token.includes("hmd-codeblock") ? this.settings.braceCodeSetClose : this.settings.braceMarkdownSetClose);
const pairs = Math.min(bracesOpen.length, bracesClose.length);
this.log("there are " + pairs + " pairs of braces defined");
for (let i = 0; i < pairs; i++) {
this.log("matching regex " + bracesOpen[i] + " and " + bracesClose[i]);
if (RegExp(bracesOpen[i], "u").test(line.substring(0, cursor.ch)) && RegExp(bracesClose[i], "u").test(line.substring(cursor.ch))) {
braceDetected = true;
break;
}
}
if (braceDetected) {
this.log("Code Auto Indent: Brace detected");
let indentPrefixLen = 0;
while (this.settings.indentCharacters.includes(line[indentPrefixLen]))
indentPrefixLen++;
editor.exec("newlineAndIndent");
if (cursor.ch == line.length) {
this.log("Pressed enter without closing pair to the right of the cursor");
} else if (editor.getLine(cursor.line + 1).length && !this.settings.indentCharacters.includes(editor.getLine(cursor.line + 1).charAt(editor.getLine(cursor.line + 1).length - 1))) {
this.log("Closing pair or whatever was to the right of the cursor is still here, entering one more time");
editor.exec("newlineAndIndent");
} else {
this.log("Closing pair was automatically moved one extra line down");
}
editor.setLine(cursor.line + 1, line.substring(0, indentPrefixLen));
if (line.substring(cursor.ch)) {
editor.setLine(cursor.line + 2, line.substring(0, indentPrefixLen) + line.substring(cursor.ch));
}
editor.setCursor(cursor.line + 1, editor.getLine(cursor.line + 1).length);
editor.exec("indentMore");
editor.setCursor(cursor.line + 1, editor.getLine(cursor.line + 1).length);
return true;
}
return false;
}
}
])));
}
createKeymapRunCallback() {
return (view) => {
return true;
};
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
};
var SettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const appLang = window.localStorage.getItem("language");
this.plugin.log("Detected application language: " + appLang + (appLang == null ? " (aka English)" : ""));
const lang = this.plugin.settings.language == "auto" ? appLang == "zh-TW" ? "zh-TW" : appLang == "zh" ? "zh-CN" : "en-US" : this.plugin.settings.language;
this.plugin.log("Using localization: " + lang);
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h3", {
text: localization["title"][lang]
});
containerEl.createEl("i", {
text: localization["description"][lang]
});
containerEl.createEl("br");
containerEl.createEl("br");
new import_obsidian.Setting(containerEl).setName(localization["language"][lang]).setDesc(localization["languageDesc"][lang]).addDropdown((toggle) => toggle.addOptions({
auto: localization["auto"][lang],
"en-US": "English (US)",
"zh-CN": "\u7B80\u4F53\u4E2D\u6587",
"zh-TW": "\u7E41\u9AD4\u4E2D\u6587"
}).setValue(this.plugin.settings.language).onChange(async (value) => {
this.plugin.settings.language = value;
await this.plugin.saveSettings();
this.display();
}));
containerEl.createEl("h5", {
text: localization["tabOrSpace"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["useSpacesInsteadOfTab"][lang]).setDesc(localization["useSpacesInsteadOfTabDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useSpaces).onChange(async (value) => {
this.plugin.settings.useSpaces = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.useSpaces) {
new import_obsidian.Setting(containerEl).setName(localization["spaceCount"][lang]).setDesc(localization["spaceCountDesc"][lang]).addSlider((slider) => slider.setValue(this.plugin.settings.spacesCount).setLimits(2, 8, 1).setDynamicTooltip().onChange(async (value) => {
this.plugin.settings.spacesCount = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["alignSpaces"][lang]).setDesc(localization["alignSpacesDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.alignSpaces).onChange(async (value) => {
this.plugin.settings.alignSpaces = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["useHardSpaces"][lang]).setDesc(localization["useHardSpacesDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useHardSpace).onChange(async (value) => {
this.plugin.settings.useHardSpace = value;
await this.plugin.saveSettings();
}));
}
containerEl.createEl("h5", {
text: localization["tabKeyBehavior"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["activateIn"][lang]).setDesc(localization["activateInDesc"][lang]);
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInCodeBlocks"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInCodeBlocks).onChange(async (value) => {
this.plugin.settings.activateInCodeBlocks = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInLists"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInLists).onChange(async (value) => {
this.plugin.settings.activateInLists = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInTables"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInTables).onChange(async (value) => {
this.plugin.settings.activateInTables = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInInlineCode"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInInlineCode).onChange(async (value) => {
this.plugin.settings.activateInInlineCode = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInOthers"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInOthers).onChange(async (value) => {
this.plugin.settings.activateInOthers = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["indentWhenSelectionNotEmpty"][lang]).setDesc(localization["indentWhenSelectionNotEmptyDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.indentsIfSelection).onChange(async (value) => {
this.plugin.settings.indentsIfSelection = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.indentsIfSelection) {
new import_obsidian.Setting(containerEl).setName(localization["indentOnlySelectionMultipleLine"][lang]).setDesc(localization["indentOnlySelectionMultipleLineDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.indentsIfSelectionOnlyForMultipleLines).onChange(async (value) => {
this.plugin.settings.indentsIfSelectionOnlyForMultipleLines = value;
await this.plugin.saveSettings();
}));
}
if (this.plugin.settings.developerMode) {
new import_obsidian.Setting(containerEl).setName(localization["allowException"][lang]).setDesc(localization["allowExceptionDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.allowException).onChange(async (value) => {
this.plugin.settings.allowException = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.allowException) {
new import_obsidian.Setting(containerEl).setName(localization["exceptionRegex"][lang]).setDesc(localization["exceptionRegexDesc"][lang]).addText((textbox) => textbox.setValue(this.plugin.settings.exceptionRegex).setPlaceholder("Regex").onChange(async (value) => {
this.plugin.settings.exceptionRegex = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.exceptionRegex = DEFAULT_SETTINGS.exceptionRegex;
this.display();
await this.plugin.saveSettings();
}));
}
}
containerEl.createEl("h5", {
text: localization["bracesAutoIndent"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["enableBracesAutoIndent"][lang]).setDesc(localization["enableBracesAutoIndentDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.enableBracesAutoIndent).onChange(async (value) => {
this.plugin.settings.enableBracesAutoIndent = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.enableBracesAutoIndent) {
new import_obsidian.Setting(containerEl).setName(localization["braceSetCode"][lang]).setDesc(localization["braceSetCodeDesc"][lang]).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceCodeSetOpen).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceCodeSetOpen = value;
await this.plugin.saveSettings();
})).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceCodeSetClose).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceCodeSetClose = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.braceCodeSetOpen = DEFAULT_SETTINGS.braceCodeSetOpen;
this.plugin.settings.braceCodeSetClose = DEFAULT_SETTINGS.braceCodeSetClose;
this.display();
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("ban").setTooltip(localization["extraButtonDisable"][lang]).onClick(async () => {
this.plugin.settings.braceCodeSetOpen = "[]";
this.plugin.settings.braceCodeSetClose = "[]";
this.display();
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["braceSetMarkdown"][lang]).setDesc(localization["braceSetMarkdownDesc"][lang]).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceMarkdownSetOpen).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceMarkdownSetOpen = value;
await this.plugin.saveSettings();
})).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceMarkdownSetClose).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceMarkdownSetClose = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.braceMarkdownSetOpen = DEFAULT_SETTINGS.braceMarkdownSetOpen;
this.plugin.settings.braceMarkdownSetClose = DEFAULT_SETTINGS.braceMarkdownSetClose;
this.display();
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("ban").setTooltip(localization["extraButtonDisable"][lang]).onClick(async () => {
this.plugin.settings.braceMarkdownSetOpen = "[]";
this.plugin.settings.braceMarkdownSetClose = "[]";
this.display();
await this.plugin.saveSettings();
}));
}
if (this.plugin.settings.developerMode) {
containerEl.createEl("h5", {
text: localization["pluginCompatibility"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["obsidianTableEditor"][lang]).setDesc(localization["obsidianTableEditorDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.obsidianTableEditor).onChange(async (value) => {
this.plugin.settings.obsidianTableEditor = value;
await this.plugin.saveSettings();
}));
if (this.plugin.settings.developerMode) {
new import_obsidian.Setting(containerEl).setName(localization["advancedTables"][lang]).setDesc(localization["advancedTablesDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useAdvancedTables).onChange(async (value) => {
this.plugin.settings.useAdvancedTables = value;
await this.plugin.saveSettings();
}));
}
new import_obsidian.Setting(containerEl).setName(localization["outliner"][lang]).setDesc(localization["outlinerDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useOutlinerBetterTab).onChange(async (value) => {
this.plugin.settings.useOutlinerBetterTab = value;
await this.plugin.saveSettings();
}));
}
containerEl.createEl("h5", {
text: localization["additional"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["customHotkey"][lang]).setDesc(localization["customHotkeyDesc"][lang]).addText((textbox) => textbox.setValue(this.plugin.settings.hotkey).setPlaceholder("Ctrl-Alt-Space").onChange(async (value) => {
this.plugin.settings.hotkey = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.hotkey = DEFAULT_SETTINGS.hotkey;
this.display();
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["developerMode"][lang]).setDesc(localization["developerModeDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.developerMode).onChange(async (value) => {
this.plugin.settings.developerMode = value;
this.display();
await this.plugin.saveSettings();
}));
}
};