mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
added too options new tab appearance with possibility to change theme (white, black, dark) and zoom factor
This commit is contained in:
parent
c39d0be8cd
commit
89a5cab98f
2
db/migrations/0099__add_theme_option.sql
Normal file
2
db/migrations/0099__add_theme_option.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
INSERT INTO options (optionId, name, value, dateCreated, dateModified, isSynced)
|
||||||
|
VALUES ('theme_key', 'theme', 'white', '2018-06-01T03:35:55.041Z', '2018-06-01T03:35:55.041Z', 0);
|
@ -1,9 +1,9 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import protectedSessionHolder from '../services/protected_session_holder.js';
|
import protectedSessionHolder from '../services/protected_session_holder.js';
|
||||||
import utils from '../services/utils.js';
|
|
||||||
import server from '../services/server.js';
|
import server from '../services/server.js';
|
||||||
import infoService from "../services/info.js";
|
import infoService from "../services/info.js";
|
||||||
|
import zoomService from "../services/zoom.js";
|
||||||
|
|
||||||
const $dialog = $("#options-dialog");
|
const $dialog = $("#options-dialog");
|
||||||
const $tabs = $("#options-tabs");
|
const $tabs = $("#options-tabs");
|
||||||
@ -44,6 +44,35 @@ export default {
|
|||||||
saveOptions
|
saveOptions
|
||||||
};
|
};
|
||||||
|
|
||||||
|
addTabHandler((function() {
|
||||||
|
const $themeSelect = $("#theme-select");
|
||||||
|
const $zoomFactorSelect = $("#zoom-factor-select");
|
||||||
|
const $html = $("html");
|
||||||
|
|
||||||
|
function optionsLoaded(options) {
|
||||||
|
$zoomFactorSelect.val(options.zoomFactor);
|
||||||
|
$themeSelect.val(options.theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
$themeSelect.change(function() {
|
||||||
|
const newTheme = $(this).val();
|
||||||
|
|
||||||
|
$html.attr("class", "theme-" + newTheme);
|
||||||
|
|
||||||
|
server.put('options/theme/' + newTheme);
|
||||||
|
});
|
||||||
|
|
||||||
|
$zoomFactorSelect.change(function() {
|
||||||
|
const newZoomFactor = $(this).val();
|
||||||
|
|
||||||
|
zoomService.setZoomFactorAndSave(newZoomFactor);
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
optionsLoaded
|
||||||
|
};
|
||||||
|
})());
|
||||||
|
|
||||||
addTabHandler((function() {
|
addTabHandler((function() {
|
||||||
const $form = $("#change-password-form");
|
const $form = $("#change-password-form");
|
||||||
const $oldPassword = $("#old-password");
|
const $oldPassword = $("#old-password");
|
||||||
|
@ -31,6 +31,12 @@ function setZoomFactor(zoomFactor) {
|
|||||||
webFrame.setZoomFactor(zoomFactor);
|
webFrame.setZoomFactor(zoomFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function setZoomFactorAndSave(zoomFactor) {
|
||||||
|
setZoomFactor(zoomFactor);
|
||||||
|
|
||||||
|
await server.put('options/zoomFactor/' + zoomFactor);
|
||||||
|
}
|
||||||
|
|
||||||
if (utils.isElectron()) {
|
if (utils.isElectron()) {
|
||||||
optionsInitService.optionsReady.then(options => setZoomFactor(options.zoomFactor))
|
optionsInitService.optionsReady.then(options => setZoomFactor(options.zoomFactor))
|
||||||
}
|
}
|
||||||
@ -38,5 +44,6 @@ if (utils.isElectron()) {
|
|||||||
export default {
|
export default {
|
||||||
decreaseZoomFactor,
|
decreaseZoomFactor,
|
||||||
increaseZoomFactor,
|
increaseZoomFactor,
|
||||||
setZoomFactor
|
setZoomFactor,
|
||||||
|
setZoomFactorAndSave
|
||||||
}
|
}
|
@ -387,3 +387,25 @@ div.ui-tooltip {
|
|||||||
button.icon-button {
|
button.icon-button {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Themes */
|
||||||
|
|
||||||
|
html.theme-black, html.theme-black img, html.theme-black video {
|
||||||
|
filter: invert(100%) hue-rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.theme-black body {
|
||||||
|
background: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.theme-dark {
|
||||||
|
filter: invert(90%) hue-rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.theme-dark img, html.theme-dark video {
|
||||||
|
filter: invert(100%) hue-rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
html.theme-dark body {
|
||||||
|
background: #191819;
|
||||||
|
}
|
@ -5,7 +5,7 @@ const optionService = require('../../services/options');
|
|||||||
const log = require('../../services/log');
|
const log = require('../../services/log');
|
||||||
|
|
||||||
// options allowed to be updated directly in options dialog
|
// options allowed to be updated directly in options dialog
|
||||||
const ALLOWED_OPTIONS = ['protectedSessionTimeout', 'noteRevisionSnapshotTimeInterval', 'zoomFactor'];
|
const ALLOWED_OPTIONS = ['protectedSessionTimeout', 'noteRevisionSnapshotTimeInterval', 'zoomFactor', 'theme'];
|
||||||
|
|
||||||
async function getOptions() {
|
async function getOptions() {
|
||||||
const options = await sql.getMap("SELECT name, value FROM options WHERE name IN ("
|
const options = await sql.getMap("SELECT name, value FROM options WHERE name IN ("
|
||||||
|
@ -4,9 +4,11 @@ const sourceIdService = require('../services/source_id');
|
|||||||
const sql = require('../services/sql');
|
const sql = require('../services/sql');
|
||||||
const labelService = require('../services/labels');
|
const labelService = require('../services/labels');
|
||||||
const config = require('../services/config');
|
const config = require('../services/config');
|
||||||
|
const optionService = require('../services/options');
|
||||||
|
|
||||||
async function index(req, res) {
|
async function index(req, res) {
|
||||||
res.render('index', {
|
res.render('index', {
|
||||||
|
theme: await optionService.getOption('theme'),
|
||||||
sourceId: await sourceIdService.generateSourceId(),
|
sourceId: await sourceIdService.generateSourceId(),
|
||||||
maxSyncIdAtLoad: await sql.getValue("SELECT MAX(id) FROM sync"),
|
maxSyncIdAtLoad: await sql.getValue("SELECT MAX(id) FROM sync"),
|
||||||
instanceName: config.General ? config.General.instanceName : null,
|
instanceName: config.General ? config.General.instanceName : null,
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
const build = require('./build');
|
const build = require('./build');
|
||||||
const packageJson = require('../../package');
|
const packageJson = require('../../package');
|
||||||
|
|
||||||
const APP_DB_VERSION = 98;
|
const APP_DB_VERSION = 99;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
appVersion: packageJson.version,
|
appVersion: packageJson.version,
|
||||||
|
@ -55,6 +55,7 @@ async function initOptions(startNotePath) {
|
|||||||
await createOption('lastSyncedPush', 0, false);
|
await createOption('lastSyncedPush', 0, false);
|
||||||
|
|
||||||
await createOption('zoomFactor', 1.0, false);
|
await createOption('zoomFactor', 1.0, false);
|
||||||
|
await createOption('theme', 'white', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en" class="theme-<%= theme %>">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Trilium Notes</title>
|
<title>Trilium Notes</title>
|
||||||
@ -343,12 +343,49 @@
|
|||||||
<div id="options-dialog" title="Options" style="display: none;">
|
<div id="options-dialog" title="Options" style="display: none;">
|
||||||
<div id="options-tabs">
|
<div id="options-tabs">
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="#appearance">Apperance</a></li>
|
||||||
<li><a href="#change-password">Change password</a></li>
|
<li><a href="#change-password">Change password</a></li>
|
||||||
<li><a href="#protected-session-timeout">Protected session</a></li>
|
<li><a href="#protected-session-timeout">Protected session</a></li>
|
||||||
<li><a href="#note-revision-snapshot-time-interval">Note revisions</a></li>
|
<li><a href="#note-revision-snapshot-time-interval">Note revisions</a></li>
|
||||||
<li><a href="#advanced">Advanced</a></li>
|
<li><a href="#advanced">Advanced</a></li>
|
||||||
<li><a href="#about">About Trilium</a></li>
|
<li><a href="#about">About Trilium</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div id="appearance">
|
||||||
|
<form>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="theme-select">Theme</label>
|
||||||
|
<select class="form-control" id="theme-select">
|
||||||
|
<option value="white">White</option>
|
||||||
|
<option value="dark">Dark</option>
|
||||||
|
<option value="black">Black</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="zoom-factor-select">Zoom factor (CTRL-+ and CTRL-= work anywhere as well)</label>
|
||||||
|
<select class="form-control" id="zoom-factor-select">
|
||||||
|
<option value="0.5">0.5</option>
|
||||||
|
<option value="0.6">0.6</option>
|
||||||
|
<option value="0.7">0.7</option>
|
||||||
|
<option value="0.8">0.8</option>
|
||||||
|
<option value="0.9">0.9</option>
|
||||||
|
<option value="1.0">1.0</option>
|
||||||
|
<option value="1.1">1.1</option>
|
||||||
|
<option value="1.2">1.2</option>
|
||||||
|
<option value="1.3">1.3</option>
|
||||||
|
<option value="1.4">1.4</option>
|
||||||
|
<option value="1.5">1.5</option>
|
||||||
|
<option value="1.6">1.6</option>
|
||||||
|
<option value="1.7">1.7</option>
|
||||||
|
<option value="1.8">1.8</option>
|
||||||
|
<option value="1.9">1.9</option>
|
||||||
|
<option value="2.0">2.0</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Settings on this options tab are saved automatically after each change.</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
<div id="change-password">
|
<div id="change-password">
|
||||||
<form id="change-password-form">
|
<form id="change-password-form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user