Skip to content

Commit ed00797

Browse files
committed
Merge branch 'stable'
# Conflicts: # package-lock.json
2 parents 3b10bb7 + 93dcce2 commit ed00797

File tree

13 files changed

+47
-24
lines changed

13 files changed

+47
-24
lines changed

src/public/app/services/content_renderer.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,14 @@ async function renderCode(note, $renderedContent) {
117117
}
118118

119119
function renderImage(entity, $renderedContent, options = {}) {
120-
const sanitizedTitle = entity.title.replace(/[^a-z0-9-.]/gi, "");
120+
const encodedTitle = encodeURIComponent(entity.title);
121121

122122
let url;
123123

124124
if (entity instanceof FNote) {
125-
url = `api/images/${entity.noteId}/${sanitizedTitle}?${Math.random()}`;
125+
url = `api/images/${entity.noteId}/${encodedTitle}?${Math.random()}`;
126126
} else if (entity instanceof FAttachment) {
127-
url = `api/attachments/${entity.attachmentId}/image/${sanitizedTitle}?${entity.utcDateModified}">`;
127+
url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}">`;
128128
}
129129

130130
$renderedContent // styles needed for the zoom to work well

src/public/app/services/link.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ async function createLink(notePath, options = {}) {
4242
const showNotePath = options.showNotePath === undefined ? false : options.showNotePath;
4343
const showNoteIcon = options.showNoteIcon === undefined ? false : options.showNoteIcon;
4444
const referenceLink = options.referenceLink === undefined ? false : options.referenceLink;
45+
const autoConvertToImage = options.autoConvertToImage === undefined ? false : options.autoConvertToImage;
4546

4647
const { noteId, parentNoteId } = treeService.getNoteIdAndParentIdFromUrl(notePath);
4748
const viewScope = options.viewScope || {};
@@ -58,6 +59,16 @@ async function createLink(notePath, options = {}) {
5859
}
5960
}
6061

62+
const note = await froca.getNote(noteId);
63+
64+
if (autoConvertToImage && ['image', 'canvas', 'mermaid'].includes(note.type) && viewMode === 'default') {
65+
const encodedTitle = encodeURIComponent(linkTitle);
66+
67+
return $("<img>")
68+
.attr("src", `api/images/${noteId}/${encodedTitle}?${Math.random()}`)
69+
.attr("alt", linkTitle);
70+
}
71+
6172
const $container = $("<span>");
6273

6374
if (showNoteIcon) {

src/public/app/widgets/dialogs/include_note.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export default class IncludeNoteDialog extends BasicWidget {
9797

9898
const boxSize = $("input[name='include-note-box-size']:checked").val();
9999

100-
if (note.type === 'image') {
100+
if (['image', 'canvas', 'mermaid'].includes(note.type)) {
101101
// there's no benefit to use insert note functionlity for images,
102102
// so we'll just add an IMG tag
103103
this.textTypeWidget.addImage(noteId);

src/public/app/widgets/dialogs/revisions.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,16 +274,16 @@ export default class RevisionsDialog extends BasicWidget {
274274

275275
this.$content.html($table);
276276
} else if (revisionItem.type === 'canvas') {
277-
const sanitizedTitle = revisionItem.title.replace(/[^a-z0-9-.]/gi, "");
277+
const encodedTitle = encodeURIComponent(revisionItem.title);
278278

279279
this.$content.html($("<img>")
280-
.attr("src", `api/revisions/${revisionItem.revisionId}/image/${sanitizedTitle}?${Math.random()}`)
280+
.attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`)
281281
.css("max-width", "100%"));
282282
} else if (revisionItem.type === 'mermaid') {
283-
const sanitizedTitle = revisionItem.title.replace(/[^a-z0-9-.]/gi, "");
283+
const encodedTitle = encodeURIComponent(revisionItem.title);
284284

285285
this.$content.html($("<img>")
286-
.attr("src", `api/revisions/${revisionItem.revisionId}/image/${sanitizedTitle}?${Math.random()}`)
286+
.attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`)
287287
.css("max-width", "100%"));
288288

289289
this.$content.append($("<pre>").text(fullRevision.content));

src/public/app/widgets/highlights_list.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ export default class HighlightsListWidget extends RightPanelWidget {
5656
.class("icon-action"),
5757
new OnClickButtonWidget()
5858
.icon("bx-x")
59-
.title("Close Highlights List")
6059
.titlePlacement("left")
6160
.onClick(widget => widget.triggerCommand("closeHlt"))
6261
.class("icon-action")

src/public/app/widgets/note_tree.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,11 +402,11 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
402402
}));
403403

404404
if (notes.length === 1) {
405-
linkService.createLink(notes[0].noteId, {referenceLink: true})
405+
linkService.createLink(notes[0].noteId, {referenceLink: true, autoConvertToImage: true})
406406
.then($link => data.dataTransfer.setData("text/html", $link[0].outerHTML));
407407
}
408408
else {
409-
Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true}))).then(links => {
409+
Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true, autoConvertToImage: true}))).then(links => {
410410
const $list = $("<ul>").append(...links.map($link => $("<li>").append($link)));
411411

412412
data.dataTransfer.setData("text/html", $list[0].outerHTML);

src/public/app/widgets/ribbon_widgets/promoted_attributes.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ import options from "../../services/options.js";
88
import utils from "../../services/utils.js";
99

1010
const TPL = `
11-
<div>
11+
<div class="promoted-attributes-widget">
1212
<style>
13+
body.mobile .promoted-attributes-widget {
14+
/* https://github.com/zadam/trilium/issues/4468 */
15+
flex-shrink: 0.4;
16+
overflow: auto;
17+
}
18+
1319
.promoted-attributes-container {
1420
margin: auto;
1521
display: flex;

src/public/app/widgets/toc.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ export default class TocWidget extends RightPanelWidget {
6868
.class("icon-action"),
6969
new OnClickButtonWidget()
7070
.icon("bx-x")
71-
.title("Close Table of Contents")
7271
.titlePlacement("left")
7372
.onClick(widget => widget.triggerCommand("closeToc"))
7473
.class("icon-action")

src/public/app/widgets/type_widgets/editable_text.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -365,12 +365,10 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget {
365365
const note = await froca.getNote(noteId);
366366

367367
this.watchdog.editor.model.change( writer => {
368-
const sanitizedTitle = note.title.replace(/[^a-z0-9-.]/gi, "");
369-
const src = `api/images/${note.noteId}/${sanitizedTitle}`;
368+
const encodedTitle = encodeURIComponent(note.title);
369+
const src = `api/images/${note.noteId}/${encodedTitle}`;
370370

371-
const imageElement = writer.createElement( 'image', { 'src': src } );
372-
373-
this.watchdog.editor.model.insertContent(imageElement, this.watchdog.editor.model.document.selection);
371+
this.watchdog.editor.execute( 'insertImage', { source: src } );
374372
} );
375373
}
376374

src/routes/api/clipper.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,9 @@ function processContent(images, note, content) {
153153
const buffer = Buffer.from(dataUrl.split(",")[1], 'base64');
154154

155155
const attachment = imageService.saveImageToAttachment(note.noteId, buffer, filename, true);
156-
const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, "");
157-
const url = `api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}`;
156+
157+
const encodedTitle = encodeURIComponent(attachment.title);
158+
const url = `api/attachments/${attachment.attachmentId}/image/${encodedTitle}`;
158159

159160
log.info(`Replacing '${imageId}' with '${url}' in note '${note.noteId}'`);
160161

0 commit comments

Comments
 (0)