mirror of
https://github.com/zadam/trilium.git
synced 2025-11-10 23:35:50 +01:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -5,6 +5,7 @@ const favicon = require('serve-favicon');
|
||||
const cookieParser = require('cookie-parser');
|
||||
const helmet = require('helmet');
|
||||
const session = require('express-session');
|
||||
const compression = require('compression')
|
||||
const FileStore = require('session-file-store')(session);
|
||||
const sessionSecret = require('./services/session_secret');
|
||||
const dataDir = require('./services/data_dir');
|
||||
@@ -18,6 +19,9 @@ const app = express();
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
app.set('view engine', 'ejs');
|
||||
|
||||
// add compression
|
||||
app.use(compression())
|
||||
|
||||
app.use(helmet({
|
||||
hidePoweredBy: false, // errors out in electron
|
||||
contentSecurityPolicy: false,
|
||||
|
||||
@@ -216,6 +216,7 @@ const ATTR_HELP = {
|
||||
"shareAlias": "define an alias using which the note will be available under https://your_trilium_host/share/[your_alias]",
|
||||
"shareOmitDefaultCss": "default share page CSS will be omitted. Use when you make extensive styling changes.",
|
||||
"shareRoot": "marks note which is served on /share root.",
|
||||
"shareDescription": "define text to be added to the HTML meta tag for description",
|
||||
"shareRaw": "note will be served in its raw format, without HTML wrapper",
|
||||
"shareDisallowRobotIndexing": `will forbid robot indexing of this note via <code>X-Robots-Tag: noindex</code> header`,
|
||||
"shareCredentials": "require credentials to access this shared note. Value is expected to be in format 'username:password'. Don't forget to make this inheritable to apply to child-notes/images.",
|
||||
|
||||
@@ -10,12 +10,6 @@ export default class NoteWrapperWidget extends FlexContainer {
|
||||
.collapsible();
|
||||
}
|
||||
|
||||
doRender() {
|
||||
super.doRender();
|
||||
|
||||
this.$widget.addClass("note-split");
|
||||
}
|
||||
|
||||
setNoteContextEvent({noteContext}) {
|
||||
this.noteContext = noteContext;
|
||||
|
||||
@@ -42,6 +36,7 @@ export default class NoteWrapperWidget extends FlexContainer {
|
||||
return;
|
||||
}
|
||||
|
||||
this.$widget.addClass("note-split");
|
||||
this.$widget.toggleClass("full-content-width",
|
||||
['image', 'mermaid', 'book', 'render', 'canvas', 'web-view'].includes(note.type)
|
||||
|| !!note?.hasLabel('fullContentWidth')
|
||||
|
||||
@@ -13,7 +13,7 @@ const TPL = `
|
||||
<div style="margin-left: 10px; margin-right: 10px">depth:</div>
|
||||
|
||||
<select name="depth" class="form-control d-inline ancestor-depth" style="flex-shrink: 3">
|
||||
<option value="">doesn't mattter</option>
|
||||
<option value="">doesn't matter</option>
|
||||
<option value="eq1">is exactly 1 (direct children)</option>
|
||||
<option value="eq2">is exactly 2</option>
|
||||
<option value="eq3">is exactly 3</option>
|
||||
|
||||
@@ -299,7 +299,7 @@ function getBacklinks(req) {
|
||||
|
||||
let backlinksWithExcerptCount = 0;
|
||||
|
||||
return backlinks.map(backlink => {
|
||||
return backlinks.filter(note => !note.getNote().hasLabel('excludeFromNoteMap')).map(backlink => {
|
||||
const sourceNote = backlink.note;
|
||||
|
||||
if (sourceNote.type !== 'text' || backlinksWithExcerptCount > 50) {
|
||||
|
||||
@@ -181,6 +181,7 @@ function getRelationMap(req) {
|
||||
|
||||
if (def.inverseRelation) {
|
||||
resp.inverseRelations[relationDefinition.getDefinedName()] = def.inverseRelation;
|
||||
resp.inverseRelations[def.inverseRelation] = relationDefinition.getDefinedName();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -314,7 +315,7 @@ function getBacklinkCount(req) {
|
||||
}
|
||||
else {
|
||||
return {
|
||||
count: note.getTargetRelations().length
|
||||
count: note.getTargetRelations().filter(note => !note.getNote().hasLabel('excludeFromNoteMap')).length
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@ const setupRoute = require('./setup');
|
||||
const loginRoute = require('./login');
|
||||
const indexRoute = require('./index');
|
||||
const utils = require('../services/utils');
|
||||
const multer = require('multer')();
|
||||
const multer = require('multer')({
|
||||
fileFilter: (req, file, cb) => {
|
||||
// UTF-8 file names are not well decoded by multer/busboy, so we handle the conversion on our side.
|
||||
// See https://github.com/expressjs/multer/pull/1102.
|
||||
file.originalname = Buffer.from(file.originalname, "latin1").toString("utf-8");
|
||||
cb(null, true);
|
||||
}
|
||||
});
|
||||
|
||||
// API routes
|
||||
const treeApiRoute = require('./api/tree');
|
||||
|
||||
@@ -47,6 +47,7 @@ module.exports = [
|
||||
{ type: 'label', name: 'shareAlias' },
|
||||
{ type: 'label', name: 'shareOmitDefaultCss' },
|
||||
{ type: 'label', name: 'shareRoot' },
|
||||
{ type: 'label', name: 'shareDescription' },
|
||||
{ type: 'label', name: 'shareRaw' },
|
||||
{ type: 'label', name: 'shareDisallowRobotIndexing' },
|
||||
{ type: 'label', name: 'shareCredentials' },
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<% if (note.hasLabel("shareDescription")) { %>
|
||||
<meta name="description" content="<%= note.getLabelValue("shareDescription") %>">
|
||||
<% } %>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<% if (note.hasRelation("shareFavicon")) { %>
|
||||
<link rel="shortcut icon" href="api/notes/<%= note.getRelation("shareFavicon").value %>/download">
|
||||
|
||||
Reference in New Issue
Block a user