| 
									
										
										
										
											2024-11-02 01:42:25 +02:00
										 |  |  | import optionService from "./options.js"; | 
					
						
							| 
									
										
										
										
											2025-01-04 11:52:40 +02:00
										 |  |  | import type { OptionMap, OptionNames } from "./options_interface.js"; | 
					
						
							| 
									
										
										
										
											2024-07-18 21:35:17 +03:00
										 |  |  | import appInfo from "./app_info.js"; | 
					
						
							| 
									
										
										
										
											2025-01-02 18:47:41 +01:00
										 |  |  | import { randomSecureToken, isWindows } from "./utils.js"; | 
					
						
							| 
									
										
										
										
											2024-07-18 21:35:17 +03:00
										 |  |  | import log from "./log.js"; | 
					
						
							|  |  |  | import dateUtils from "./date_utils.js"; | 
					
						
							|  |  |  | import keyboardActions from "./keyboard_actions.js"; | 
					
						
							| 
									
										
										
										
											2025-01-09 18:36:24 +02:00
										 |  |  | import type { KeyboardShortcutWithRequiredActionName } from "./keyboard_actions_interface.js"; | 
					
						
							| 
									
										
										
										
											2018-07-21 08:55:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-20 12:31:38 +02:00
										 |  |  | function initDocumentOptions() { | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption("documentId", randomSecureToken(16), false); | 
					
						
							|  |  |  |     optionService.createOption("documentSecret", randomSecureToken(16), false); | 
					
						
							| 
									
										
										
										
											2018-07-23 21:15:32 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-21 08:55:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:20:27 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Contains additional options to be initialized for a new database, containing the information entered by the user. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2024-02-18 13:32:00 +02:00
										 |  |  | interface NotSyncedOpts { | 
					
						
							|  |  |  |     syncServerHost?: string; | 
					
						
							|  |  |  |     syncProxy?: string; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:39:22 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Represents a correspondence between an option and its default value, to be initialized when the database is missing that particular option (after a migration from an older version, or when creating a new database). | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2024-08-11 07:36:00 +03:00
										 |  |  | interface DefaultOption { | 
					
						
							| 
									
										
										
										
											2025-01-03 17:54:05 +02:00
										 |  |  |     name: OptionNames; | 
					
						
							| 
									
										
										
										
											2024-11-02 00:39:22 +02:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |      * The value to initialize the option with, if the option is not already present in the database. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * If a function is passed Gin instead, the function is called if the option does not exist (with access to the current options) and the return value is used instead. Useful to migrate a new option with a value depending on some other option that might be initialized. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2024-11-02 00:39:22 +02:00
										 |  |  |     value: string | ((options: OptionMap) => string); | 
					
						
							| 
									
										
										
										
											2024-08-11 07:36:00 +03:00
										 |  |  |     isSynced: boolean; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:20:27 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Initializes the default options for new databases only. | 
					
						
							| 
									
										
										
										
											2024-12-22 15:42:15 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2024-11-02 00:20:27 +02:00
										 |  |  |  * @param initialized `true` if the database has been fully initialized (i.e. a new database was created), or `false` if the database is created for sync. | 
					
						
							|  |  |  |  * @param opts additional options to be initialized, for example the sync configuration. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2024-11-22 20:15:35 +02:00
										 |  |  | async function initNotSyncedOptions(initialized: boolean, opts: NotSyncedOpts = {}) { | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption( | 
					
						
							|  |  |  |         "openNoteContexts", | 
					
						
							|  |  |  |         JSON.stringify([ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 notePath: "root", | 
					
						
							|  |  |  |                 active: true | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ]), | 
					
						
							|  |  |  |         false | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption("lastDailyBackupDate", dateUtils.utcNowDateTime(), false); | 
					
						
							|  |  |  |     optionService.createOption("lastWeeklyBackupDate", dateUtils.utcNowDateTime(), false); | 
					
						
							|  |  |  |     optionService.createOption("lastMonthlyBackupDate", dateUtils.utcNowDateTime(), false); | 
					
						
							|  |  |  |     optionService.createOption("dbVersion", appInfo.dbVersion.toString(), false); | 
					
						
							| 
									
										
										
										
											2018-07-23 21:15:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption("initialized", initialized ? "true" : "false", false); | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption("lastSyncedPull", "0", false); | 
					
						
							|  |  |  |     optionService.createOption("lastSyncedPush", "0", false); | 
					
						
							| 
									
										
										
										
											2022-05-21 14:00:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption("theme", "next", false); | 
					
						
							| 
									
										
										
										
											2025-01-18 19:38:41 +02:00
										 |  |  |     optionService.createOption("textNoteEditorType", "ckeditor-classic", true); | 
					
						
							| 
									
										
										
										
											2024-12-22 15:42:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     optionService.createOption("syncServerHost", opts.syncServerHost || "", false); | 
					
						
							|  |  |  |     optionService.createOption("syncServerTimeout", "120000", false); | 
					
						
							|  |  |  |     optionService.createOption("syncProxy", opts.syncProxy || "", false); | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-24 08:12:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:55:45 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Contains all the default options that must be initialized on new and existing databases (at startup). The value can also be determined based on other options, provided they have already been initialized. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2024-08-11 07:36:00 +03:00
										 |  |  | const defaultOptions: DefaultOption[] = [ | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     { name: "revisionSnapshotTimeInterval", value: "600", isSynced: true }, | 
					
						
							|  |  |  |     { name: "revisionSnapshotNumberLimit", value: "-1", isSynced: true }, | 
					
						
							|  |  |  |     { name: "protectedSessionTimeout", value: "600", isSynced: true }, | 
					
						
							| 
									
										
										
										
											2025-01-22 18:42:42 +01:00
										 |  |  |     { name: "zoomFactor", value: isWindows ? "0.9" : "1.0", isSynced: false }, | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     { name: "overrideThemeFonts", value: "false", isSynced: false }, | 
					
						
							|  |  |  |     { name: "mainFontFamily", value: "theme", isSynced: false }, | 
					
						
							|  |  |  |     { name: "mainFontSize", value: "100", isSynced: false }, | 
					
						
							|  |  |  |     { name: "treeFontFamily", value: "theme", isSynced: false }, | 
					
						
							|  |  |  |     { name: "treeFontSize", value: "100", isSynced: false }, | 
					
						
							|  |  |  |     { name: "detailFontFamily", value: "theme", isSynced: false }, | 
					
						
							|  |  |  |     { name: "detailFontSize", value: "110", isSynced: false }, | 
					
						
							|  |  |  |     { name: "monospaceFontFamily", value: "theme", isSynced: false }, | 
					
						
							|  |  |  |     { name: "monospaceFontSize", value: "110", isSynced: false }, | 
					
						
							|  |  |  |     { name: "spellCheckEnabled", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "spellCheckLanguageCode", value: "en-US", isSynced: false }, | 
					
						
							|  |  |  |     { name: "imageMaxWidthHeight", value: "2000", isSynced: true }, | 
					
						
							|  |  |  |     { name: "imageJpegQuality", value: "75", isSynced: true }, | 
					
						
							|  |  |  |     { name: "autoFixConsistencyIssues", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "vimKeymapEnabled", value: "false", isSynced: false }, | 
					
						
							|  |  |  |     { name: "codeLineWrapEnabled", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         name: "codeNotesMimeTypes", | 
					
						
							|  |  |  |         value: '["text/x-csrc","text/x-c++src","text/x-csharp","text/css","text/x-go","text/x-groovy","text/x-haskell","text/html","message/http","text/x-java","application/javascript;env=frontend","application/javascript;env=backend","application/json","text/x-kotlin","text/x-markdown","text/x-perl","text/x-php","text/x-python","text/x-ruby",null,"text/x-sql","text/x-sqlite;schema=trilium","text/x-swift","text/xml","text/x-yaml","text/x-sh"]', | 
					
						
							|  |  |  |         isSynced: true | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { name: "leftPaneWidth", value: "25", isSynced: false }, | 
					
						
							|  |  |  |     { name: "leftPaneVisible", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "rightPaneWidth", value: "25", isSynced: false }, | 
					
						
							|  |  |  |     { name: "rightPaneVisible", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "nativeTitleBarVisible", value: "false", isSynced: false }, | 
					
						
							|  |  |  |     { name: "eraseEntitiesAfterTimeInSeconds", value: "604800", isSynced: true }, // default is 7 days
 | 
					
						
							| 
									
										
										
										
											2025-02-08 11:55:16 +01:00
										 |  |  |     { name: "eraseEntitiesAfterTimeScale", value: "86400", isSynced: true }, // default 86400 seconds = Day
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     { name: "hideArchivedNotes_main", value: "false", isSynced: false }, | 
					
						
							|  |  |  |     { name: "debugModeEnabled", value: "false", isSynced: false }, | 
					
						
							|  |  |  |     { name: "headingStyle", value: "underline", isSynced: true }, | 
					
						
							|  |  |  |     { name: "autoCollapseNoteTree", value: "true", isSynced: true }, | 
					
						
							|  |  |  |     { name: "autoReadonlySizeText", value: "10000", isSynced: false }, | 
					
						
							|  |  |  |     { name: "autoReadonlySizeCode", value: "30000", isSynced: false }, | 
					
						
							|  |  |  |     { name: "dailyBackupEnabled", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "weeklyBackupEnabled", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "monthlyBackupEnabled", value: "true", isSynced: false }, | 
					
						
							|  |  |  |     { name: "maxContentWidth", value: "1200", isSynced: false }, | 
					
						
							|  |  |  |     { name: "compressImages", value: "true", isSynced: true }, | 
					
						
							|  |  |  |     { name: "downloadImagesAutomatically", value: "true", isSynced: true }, | 
					
						
							|  |  |  |     { name: "minTocHeadings", value: "5", isSynced: true }, | 
					
						
							|  |  |  |     { name: "highlightsList", value: '["bold","italic","underline","color","bgColor"]', isSynced: true }, | 
					
						
							|  |  |  |     { name: "checkForUpdates", value: "true", isSynced: true }, | 
					
						
							|  |  |  |     { name: "disableTray", value: "false", isSynced: false }, | 
					
						
							|  |  |  |     { name: "eraseUnusedAttachmentsAfterSeconds", value: "2592000", isSynced: true }, | 
					
						
							|  |  |  |     { name: "customSearchEngineName", value: "DuckDuckGo", isSynced: true }, | 
					
						
							|  |  |  |     { name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true }, | 
					
						
							|  |  |  |     { name: "promotedAttributesOpenInRibbon", value: "true", isSynced: true }, | 
					
						
							|  |  |  |     { name: "editedNotesOpenInRibbon", value: "true", isSynced: true }, | 
					
						
							| 
									
										
										
										
											2024-08-31 16:24:09 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Internationalization
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     { name: "locale", value: "en", isSynced: true }, | 
					
						
							|  |  |  |     { name: "firstDayOfWeek", value: "1", isSynced: true }, | 
					
						
							| 
									
										
										
										
											2024-10-27 21:51:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:55:45 +02:00
										 |  |  |     // Code block configuration
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         name: "codeBlockTheme", | 
					
						
							|  |  |  |         value: (optionsMap) => { | 
					
						
							|  |  |  |             if (optionsMap.theme === "light") { | 
					
						
							|  |  |  |                 return "default:stackoverflow-light"; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 return "default:stackoverflow-dark"; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         isSynced: false | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-11-09 14:33:14 +02:00
										 |  |  |     { name: "codeBlockWordWrap", value: "false", isSynced: true }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Text note configuration
 | 
					
						
							| 
									
										
										
										
											2024-11-23 09:06:16 +02:00
										 |  |  |     { name: "textNoteEditorType", value: "ckeditor-balloon", isSynced: true }, | 
					
						
							| 
									
										
										
										
											2024-12-14 01:24:29 +02:00
										 |  |  |     { name: "textNoteEditorMultilineToolbar", value: "false", isSynced: true }, | 
					
						
							| 
									
										
										
										
											2024-11-23 09:06:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-18 19:37:09 +02:00
										 |  |  |     // HTML import configuration
 | 
					
						
							| 
									
										
										
										
											2024-11-28 21:56:08 +02:00
										 |  |  |     { name: "layoutOrientation", value: "vertical", isSynced: false }, | 
					
						
							| 
									
										
										
										
											2024-12-09 21:57:54 +02:00
										 |  |  |     { name: "backgroundEffects", value: "false", isSynced: false }, | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         name: "allowedHtmlTags", | 
					
						
							|  |  |  |         value: JSON.stringify([ | 
					
						
							|  |  |  |             "h1", | 
					
						
							|  |  |  |             "h2", | 
					
						
							|  |  |  |             "h3", | 
					
						
							|  |  |  |             "h4", | 
					
						
							|  |  |  |             "h5", | 
					
						
							|  |  |  |             "h6", | 
					
						
							|  |  |  |             "blockquote", | 
					
						
							|  |  |  |             "p", | 
					
						
							|  |  |  |             "a", | 
					
						
							|  |  |  |             "ul", | 
					
						
							|  |  |  |             "ol", | 
					
						
							|  |  |  |             "li", | 
					
						
							|  |  |  |             "b", | 
					
						
							|  |  |  |             "i", | 
					
						
							|  |  |  |             "strong", | 
					
						
							|  |  |  |             "em", | 
					
						
							|  |  |  |             "strike", | 
					
						
							|  |  |  |             "s", | 
					
						
							|  |  |  |             "del", | 
					
						
							|  |  |  |             "abbr", | 
					
						
							|  |  |  |             "code", | 
					
						
							|  |  |  |             "hr", | 
					
						
							|  |  |  |             "br", | 
					
						
							|  |  |  |             "div", | 
					
						
							|  |  |  |             "table", | 
					
						
							|  |  |  |             "thead", | 
					
						
							|  |  |  |             "caption", | 
					
						
							|  |  |  |             "tbody", | 
					
						
							|  |  |  |             "tfoot", | 
					
						
							|  |  |  |             "tr", | 
					
						
							|  |  |  |             "th", | 
					
						
							|  |  |  |             "td", | 
					
						
							|  |  |  |             "pre", | 
					
						
							|  |  |  |             "section", | 
					
						
							|  |  |  |             "img", | 
					
						
							|  |  |  |             "figure", | 
					
						
							|  |  |  |             "figcaption", | 
					
						
							|  |  |  |             "span", | 
					
						
							|  |  |  |             "label", | 
					
						
							|  |  |  |             "input", | 
					
						
							|  |  |  |             "details", | 
					
						
							|  |  |  |             "summary", | 
					
						
							|  |  |  |             "address", | 
					
						
							|  |  |  |             "aside", | 
					
						
							|  |  |  |             "footer", | 
					
						
							|  |  |  |             "header", | 
					
						
							|  |  |  |             "hgroup", | 
					
						
							|  |  |  |             "main", | 
					
						
							|  |  |  |             "nav", | 
					
						
							|  |  |  |             "dl", | 
					
						
							|  |  |  |             "dt", | 
					
						
							|  |  |  |             "menu", | 
					
						
							|  |  |  |             "bdi", | 
					
						
							|  |  |  |             "bdo", | 
					
						
							|  |  |  |             "dfn", | 
					
						
							|  |  |  |             "kbd", | 
					
						
							|  |  |  |             "mark", | 
					
						
							|  |  |  |             "q", | 
					
						
							|  |  |  |             "time", | 
					
						
							|  |  |  |             "var", | 
					
						
							|  |  |  |             "wbr", | 
					
						
							|  |  |  |             "area", | 
					
						
							|  |  |  |             "map", | 
					
						
							|  |  |  |             "track", | 
					
						
							|  |  |  |             "video", | 
					
						
							|  |  |  |             "audio", | 
					
						
							|  |  |  |             "picture", | 
					
						
							|  |  |  |             "del", | 
					
						
							|  |  |  |             "ins", | 
					
						
							|  |  |  |             "en-media", | 
					
						
							|  |  |  |             "acronym", | 
					
						
							|  |  |  |             "article", | 
					
						
							|  |  |  |             "big", | 
					
						
							|  |  |  |             "button", | 
					
						
							|  |  |  |             "cite", | 
					
						
							|  |  |  |             "col", | 
					
						
							|  |  |  |             "colgroup", | 
					
						
							|  |  |  |             "data", | 
					
						
							|  |  |  |             "dd", | 
					
						
							|  |  |  |             "fieldset", | 
					
						
							|  |  |  |             "form", | 
					
						
							|  |  |  |             "legend", | 
					
						
							|  |  |  |             "meter", | 
					
						
							|  |  |  |             "noscript", | 
					
						
							|  |  |  |             "option", | 
					
						
							|  |  |  |             "progress", | 
					
						
							|  |  |  |             "rp", | 
					
						
							|  |  |  |             "samp", | 
					
						
							|  |  |  |             "small", | 
					
						
							|  |  |  |             "sub", | 
					
						
							|  |  |  |             "sup", | 
					
						
							|  |  |  |             "template", | 
					
						
							|  |  |  |             "textarea", | 
					
						
							|  |  |  |             "tt" | 
					
						
							|  |  |  |         ]), | 
					
						
							|  |  |  |         isSynced: true | 
					
						
							| 
									
										
										
										
											2025-02-16 21:29:38 -07:00
										 |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Share settings
 | 
					
						
							|  |  |  |     { name: 'redirectBareDomain', value: 'false', isSynced: true }, | 
					
						
							|  |  |  |     { name: 'showLoginInShareTheme', value: 'false', isSynced: true } | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:55:45 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Initializes the options, by checking which options from {@link #allDefaultOptions()} are missing and registering them. It will also check some environment variables such as safe mode, to make any necessary adjustments. | 
					
						
							| 
									
										
										
										
											2024-12-22 15:42:15 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2024-11-02 00:55:45 +02:00
										 |  |  |  * This method is called regardless of whether a new database is created, or an existing database is used. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2020-06-20 12:31:38 +02:00
										 |  |  | function initStartupOptions() { | 
					
						
							| 
									
										
										
										
											2023-06-29 22:10:13 +02:00
										 |  |  |     const optionsMap = optionService.getOptionMap(); | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-18 23:01:31 +01:00
										 |  |  |     const allDefaultOptions = defaultOptions.concat(getKeyboardDefaultOptions()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     for (const { name, value, isSynced } of allDefaultOptions) { | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  |         if (!(name in optionsMap)) { | 
					
						
							| 
									
										
										
										
											2024-11-02 00:39:22 +02:00
										 |  |  |             let resolvedValue; | 
					
						
							|  |  |  |             if (typeof value === "function") { | 
					
						
							|  |  |  |                 resolvedValue = value(optionsMap); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 resolvedValue = value; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2019-11-03 11:43:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-02 00:39:22 +02:00
										 |  |  |             optionService.createOption(name, resolvedValue, isSynced); | 
					
						
							|  |  |  |             log.info(`Created option "${name}" with default value "${resolvedValue}"`); | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-01-11 22:29:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-15 20:12:14 +01:00
										 |  |  |     if (process.env.TRILIUM_START_NOTE_ID || process.env.TRILIUM_SAFE_MODE) { | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |         optionService.setOption( | 
					
						
							|  |  |  |             "openNoteContexts", | 
					
						
							|  |  |  |             JSON.stringify([ | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     notePath: process.env.TRILIUM_START_NOTE_ID || "root", | 
					
						
							|  |  |  |                     active: true | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             ]) | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2021-01-11 22:29:02 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-07-21 08:55:24 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-18 23:01:31 +01:00
										 |  |  | function getKeyboardDefaultOptions() { | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     return (keyboardActions.getDefaultKeyboardActions().filter((ka) => !!ka.actionName) as KeyboardShortcutWithRequiredActionName[]).map((ka) => ({ | 
					
						
							|  |  |  |         name: `keyboardShortcuts${ka.actionName.charAt(0).toUpperCase()}${ka.actionName.slice(1)}`, | 
					
						
							|  |  |  |         value: JSON.stringify(ka.defaultShortcuts), | 
					
						
							|  |  |  |         isSynced: false | 
					
						
							|  |  |  |     })) as DefaultOption[]; | 
					
						
							| 
									
										
										
										
											2019-11-18 23:01:31 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-18 21:47:30 +03:00
										 |  |  | export default { | 
					
						
							| 
									
										
										
										
											2018-07-23 21:15:32 +02:00
										 |  |  |     initDocumentOptions, | 
					
						
							| 
									
										
										
										
											2019-11-03 10:43:40 +01:00
										 |  |  |     initNotSyncedOptions, | 
					
						
							|  |  |  |     initStartupOptions | 
					
						
							| 
									
										
										
										
											2020-06-20 12:31:38 +02:00
										 |  |  | }; |