import utils from "../../../services/utils.js"; import server from "../../../services/server.js"; import toastService from "../../../services/toast.js"; const TPL = `

Spell check

These options apply only for desktop builds, browsers will use their own native spell check. App restart is required after change.


Multiple languages can be separated by comma, e.g. en-US, de-DE, cs. Changes to the spell check options will take effect after application restart.

Available language codes:

Images

(pasted HTML can contain references to online images, Trilium will find those references and download the images so that they are available offline)

Note erasure timeout

Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are "erased" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.

You can also trigger erasing manually:



Protected session timeout

Protected session timeout is a time period after which the protected session is wiped from the browser's memory. This is measured from the last interaction with protected notes. See wiki for more info.

Note revisions snapshot interval

Note revision snapshot time interval is time in seconds after which a new note revision will be created for the note. See wiki for more info.

Automatic readonly size

Automatic readonly note size is the size after which notes will be displayed in a readonly mode (for performance reasons).

Network connections

`; export default class ProtectedSessionOptions { constructor() { $("#options-other").html(TPL); this.$spellCheckEnabled = $("#spell-check-enabled"); this.$spellCheckLanguageCode = $("#spell-check-language-code"); this.$spellCheckEnabled.on('change', () => { const opts = { 'spellCheckEnabled': this.$spellCheckEnabled.is(":checked") ? "true" : "false" }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$spellCheckLanguageCode.on('change', () => { const opts = { 'spellCheckLanguageCode': this.$spellCheckLanguageCode.val() }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$availableLanguageCodes = $("#available-language-codes"); if (utils.isElectron()) { const { webContents } = utils.dynamicRequire('@electron/remote').getCurrentWindow(); this.$availableLanguageCodes.text(webContents.session.availableSpellCheckerLanguages.join(', ')); } this.$eraseEntitiesAfterTimeInSeconds = $("#erase-entities-after-time-in-seconds"); this.$eraseEntitiesAfterTimeInSeconds.on('change', () => { const eraseEntitiesAfterTimeInSeconds = this.$eraseEntitiesAfterTimeInSeconds.val(); server.put('options', { 'eraseEntitiesAfterTimeInSeconds': eraseEntitiesAfterTimeInSeconds }).then(() => { toastService.showMessage("Options changed have been saved."); }); return false; }); this.$eraseDeletedNotesButton = $("#erase-deleted-notes-now-button"); this.$eraseDeletedNotesButton.on('click', () => { server.post('notes/erase-deleted-notes-now').then(() => { toastService.showMessage("Deleted notes have been erased."); }); }); this.$protectedSessionTimeout = $("#protected-session-timeout-in-seconds"); this.$protectedSessionTimeout.on('change', () => { const protectedSessionTimeout = this.$protectedSessionTimeout.val(); server.put('options', { 'protectedSessionTimeout': protectedSessionTimeout }).then(() => { toastService.showMessage("Options changed have been saved."); }); return false; }); this.$noteRevisionsTimeInterval = $("#note-revision-snapshot-time-interval-in-seconds"); this.$noteRevisionsTimeInterval.on('change', () => { const opts = { 'noteRevisionSnapshotTimeInterval': this.$noteRevisionsTimeInterval.val() }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$imageMaxWidthHeight = $("#image-max-width-height"); this.$imageJpegQuality = $("#image-jpeg-quality"); this.$imageMaxWidthHeight.on('change', () => { const opts = { 'imageMaxWidthHeight': this.$imageMaxWidthHeight.val() }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$imageJpegQuality.on('change', () => { const opts = { 'imageJpegQuality': this.$imageJpegQuality.val() }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$autoReadonlySizeText = $("#auto-readonly-size-text"); this.$autoReadonlySizeText.on('change', () => { const opts = { 'autoReadonlySizeText': this.$autoReadonlySizeText.val() }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$autoReadonlySizeCode = $("#auto-readonly-size-code"); this.$autoReadonlySizeCode.on('change', () => { const opts = { 'autoReadonlySizeCode': this.$autoReadonlySizeText.val() }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); return false; }); this.$downloadImagesAutomatically = $("#download-images-automatically"); this.$downloadImagesAutomatically.on("change", () => { const isChecked = this.$downloadImagesAutomatically.prop("checked"); const opts = { 'downloadImagesAutomatically': isChecked ? 'true' : 'false' }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); }); this.$enableImageCompression = $("#image-compresion-enabled"); this.$imageCompressionWrapper = $("#image-compression-enabled-wraper"); this.setImageCompression = (isChecked) => { if (isChecked) { this.$imageCompressionWrapper.removeClass("disabled-field"); } else { this.$imageCompressionWrapper.addClass("disabled-field"); } }; this.$enableImageCompression.on("change", () => { const isChecked = this.$enableImageCompression.prop("checked"); const opts = { 'compressImages': isChecked ? 'true' : 'false' }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); this.setImageCompression(isChecked); }); this.$checkForUpdates = $("#check-for-updates"); this.$checkForUpdates.on("change", () => { const isChecked = this.$checkForUpdates.prop("checked"); const opts = { 'checkForUpdates': isChecked ? 'true' : 'false' }; server.put('options', opts).then(() => toastService.showMessage("Options changed have been saved.")); }); } optionsLoaded(options) { this.$spellCheckEnabled.prop("checked", options['spellCheckEnabled'] === 'true'); this.$spellCheckLanguageCode.val(options['spellCheckLanguageCode']); this.$eraseEntitiesAfterTimeInSeconds.val(options['eraseEntitiesAfterTimeInSeconds']); this.$protectedSessionTimeout.val(options['protectedSessionTimeout']); this.$noteRevisionsTimeInterval.val(options['noteRevisionSnapshotTimeInterval']); this.$imageMaxWidthHeight.val(options['imageMaxWidthHeight']); this.$imageJpegQuality.val(options['imageJpegQuality']); this.$autoReadonlySizeText.val(options['autoReadonlySizeText']); this.$autoReadonlySizeCode.val(options['autoReadonlySizeCode']); const downloadImagesAutomatically = options['downloadImagesAutomatically'] === 'true'; this.$downloadImagesAutomatically.prop('checked', downloadImagesAutomatically); const compressImages = options['compressImages'] === 'true'; this.$enableImageCompression.prop('checked', compressImages); this.setImageCompression(compressImages); const checkForUpdates = options['checkForUpdates'] === 'true'; this.$checkForUpdates.prop('checked', checkForUpdates); } }