mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 18:08:33 +02:00
commit
fbea3ed94f
@ -8,6 +8,7 @@ import contextMenu from "./menus/context_menu.js";
|
|||||||
import DesktopLayout from "./layouts/desktop_layout.js";
|
import DesktopLayout from "./layouts/desktop_layout.js";
|
||||||
import glob from "./services/glob.js";
|
import glob from "./services/glob.js";
|
||||||
import zoomService from './components/zoom.js';
|
import zoomService from './components/zoom.js';
|
||||||
|
import options from "./services/options.js";
|
||||||
|
|
||||||
bundleService.getWidgetBundlesByParent().then(widgetBundles => {
|
bundleService.getWidgetBundlesByParent().then(widgetBundles => {
|
||||||
appContext.setLayout(new DesktopLayout(widgetBundles));
|
appContext.setLayout(new DesktopLayout(widgetBundles));
|
||||||
@ -115,11 +116,27 @@ if (utils.isElectron()) {
|
|||||||
? (`${params.selectionText.substr(0, 13)}…`)
|
? (`${params.selectionText.substr(0, 13)}…`)
|
||||||
: params.selectionText;
|
: params.selectionText;
|
||||||
|
|
||||||
|
// Read the search engine from the options and fallback to DuckDuckGo if the option is not set.
|
||||||
|
const customSearchEngineName = options.get("customSearchEngineName");
|
||||||
|
const customSearchEngineUrl = options.get("customSearchEngineUrl");
|
||||||
|
let searchEngineName;
|
||||||
|
let searchEngineUrl;
|
||||||
|
if (customSearchEngineName && customSearchEngineUrl) {
|
||||||
|
searchEngineName = customSearchEngineName;
|
||||||
|
searchEngineUrl = customSearchEngineUrl;
|
||||||
|
} else {
|
||||||
|
searchEngineName = "Duckduckgo";
|
||||||
|
searchEngineUrl = "https://duckduckgo.com/?q={keyword}";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the placeholder with the real search keyword.
|
||||||
|
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
|
||||||
|
|
||||||
items.push({
|
items.push({
|
||||||
enabled: editFlags.canPaste,
|
enabled: editFlags.canPaste,
|
||||||
title: `Search for "${shortenedSelection}" with DuckDuckGo`,
|
title: `Search for "${shortenedSelection}" with ${searchEngineName}`,
|
||||||
uiIcon: "bx bx-search-alt",
|
uiIcon: "bx bx-search-alt",
|
||||||
handler: () => electron.shell.openExternal(`https://duckduckgo.com/?q=${encodeURIComponent(params.selectionText)}`)
|
handler: () => electron.shell.openExternal(searchUrl)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ import PasswordOptions from "./options/password.js";
|
|||||||
import EtapiOptions from "./options/etapi.js";
|
import EtapiOptions from "./options/etapi.js";
|
||||||
import BackupOptions from "./options/backup.js";
|
import BackupOptions from "./options/backup.js";
|
||||||
import SyncOptions from "./options/sync.js";
|
import SyncOptions from "./options/sync.js";
|
||||||
|
import SearchEngineOptions from "./options/other/search_engine.js";
|
||||||
import TrayOptions from "./options/other/tray.js";
|
import TrayOptions from "./options/other/tray.js";
|
||||||
import NoteErasureTimeoutOptions from "./options/other/note_erasure_timeout.js";
|
import NoteErasureTimeoutOptions from "./options/other/note_erasure_timeout.js";
|
||||||
import NoteRevisionsSnapshotIntervalOptions from "./options/other/note_revisions_snapshot_interval.js";
|
import NoteRevisionsSnapshotIntervalOptions from "./options/other/note_revisions_snapshot_interval.js";
|
||||||
@ -75,6 +76,7 @@ const CONTENT_WIDGETS = {
|
|||||||
_optionsBackup: [ BackupOptions ],
|
_optionsBackup: [ BackupOptions ],
|
||||||
_optionsSync: [ SyncOptions ],
|
_optionsSync: [ SyncOptions ],
|
||||||
_optionsOther: [
|
_optionsOther: [
|
||||||
|
SearchEngineOptions,
|
||||||
TrayOptions,
|
TrayOptions,
|
||||||
NoteErasureTimeoutOptions,
|
NoteErasureTimeoutOptions,
|
||||||
NoteRevisionsSnapshotIntervalOptions,
|
NoteRevisionsSnapshotIntervalOptions,
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
import OptionsWidget from "../options_widget.js";
|
||||||
|
import utils from "../../../../services/utils.js";
|
||||||
|
|
||||||
|
const TPL = `
|
||||||
|
<div class="options-section">
|
||||||
|
|
||||||
|
|
||||||
|
<h4>Search Engine</h4>
|
||||||
|
|
||||||
|
<p>Custom search engine requires both a name and a URL to be set. If either of these is not set, DuckDuckGo will be used as the default search engine.</p>
|
||||||
|
|
||||||
|
<form class="sync-setup-form">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Predefined search engine templates</label>
|
||||||
|
<select class="predefined-search-engine-select form-control">
|
||||||
|
<option value="Bing">Bing</option>
|
||||||
|
<option value="Baidu">Baidu</option>
|
||||||
|
<option value="Duckduckgo">Duckduckgo</option>
|
||||||
|
<option value="Google">Google</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Custom search engine name</label>
|
||||||
|
<input type="text" class="custom-search-engine-name form-control" placeholder="Customize search engine name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Custom search engine URL should include <code>{keyword}</code> as a placeholder for the search term.</label>
|
||||||
|
<input type="text" class="custom-search-engine-url form-control" placeholder="Customize search engine url">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="display: flex; justify-content: space-between;">
|
||||||
|
<button class="btn btn-primary">Save</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
const SEARCH_ENGINES = {
|
||||||
|
"Bing": "https://www.bing.com/search?q={keyword}",
|
||||||
|
"Baidu": "https://www.baidu.com/s?wd={keyword}",
|
||||||
|
"Duckduckgo": "https://duckduckgo.com/?q={keyword}",
|
||||||
|
"Google": "https://www.google.com/search?q={keyword}",
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class SearchEngineOptions extends OptionsWidget {
|
||||||
|
isEnabled() {
|
||||||
|
return super.isEnabled() && utils.isElectron();
|
||||||
|
}
|
||||||
|
|
||||||
|
doRender() {
|
||||||
|
this.$widget = $(TPL);
|
||||||
|
|
||||||
|
this.$form = this.$widget.find(".sync-setup-form");
|
||||||
|
this.$predefinedSearchEngineSelect = this.$widget.find(".predefined-search-engine-select");
|
||||||
|
this.$customSearchEngineName = this.$widget.find(".custom-search-engine-name");
|
||||||
|
this.$customSearchEngineUrl = this.$widget.find(".custom-search-engine-url");
|
||||||
|
|
||||||
|
this.$predefinedSearchEngineSelect.on('change', () => {
|
||||||
|
const predefinedSearchEngine = this.$predefinedSearchEngineSelect.val();
|
||||||
|
this.$customSearchEngineName[0].value = predefinedSearchEngine;
|
||||||
|
this.$customSearchEngineUrl[0].value = SEARCH_ENGINES[predefinedSearchEngine];
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$form.on('submit', () => {
|
||||||
|
this.updateMultipleOptions({
|
||||||
|
'customSearchEngineName': this.$customSearchEngineName.val(),
|
||||||
|
'customSearchEngineUrl': this.$customSearchEngineUrl.val()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async optionsLoaded(options) {
|
||||||
|
this.$predefinedSearchEngineSelect.val("");
|
||||||
|
this.$customSearchEngineName[0].value = options.customSearchEngineName;
|
||||||
|
this.$customSearchEngineUrl[0].value = options.customSearchEngineUrl;
|
||||||
|
}
|
||||||
|
}
|
@ -61,7 +61,9 @@ const ALLOWED_OPTIONS = new Set([
|
|||||||
'downloadImagesAutomatically',
|
'downloadImagesAutomatically',
|
||||||
'minTocHeadings',
|
'minTocHeadings',
|
||||||
'checkForUpdates',
|
'checkForUpdates',
|
||||||
'disableTray'
|
'disableTray',
|
||||||
|
'customSearchEngineName',
|
||||||
|
'customSearchEngineUrl',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function getOptions() {
|
function getOptions() {
|
||||||
|
@ -89,6 +89,8 @@ const defaultOptions = [
|
|||||||
{ name: 'minTocHeadings', value: '5', isSynced: true },
|
{ name: 'minTocHeadings', value: '5', isSynced: true },
|
||||||
{ name: 'checkForUpdates', value: 'true', isSynced: true },
|
{ name: 'checkForUpdates', value: 'true', isSynced: true },
|
||||||
{ name: 'disableTray', value: 'false', isSynced: false },
|
{ name: 'disableTray', value: 'false', isSynced: false },
|
||||||
|
{ name: 'customSearchEngineName', value: 'Duckduckgo', isSynced: false },
|
||||||
|
{ name: 'customSearchEngineUrl', value: 'https://duckduckgo.com/?q={keyword}', isSynced: false },
|
||||||
];
|
];
|
||||||
|
|
||||||
function initStartupOptions() {
|
function initStartupOptions() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user