mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
book notes don't display images as separate children if the image is included in the parent text note, #892
This commit is contained in:
parent
0973498fe9
commit
c9b2ff05e9
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "trilium",
|
"name": "trilium",
|
||||||
"version": "0.40.6",
|
"version": "0.40.7",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -10,6 +10,7 @@ const TPL = `
|
|||||||
.note-actions .dropdown-item[disabled], .note-actions .dropdown-item[disabled]:hover {
|
.note-actions .dropdown-item[disabled], .note-actions .dropdown-item[disabled]:hover {
|
||||||
color: var(--muted-text-color) !important;
|
color: var(--muted-text-color) !important;
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
|
pointer-events: none; /* makes it unclickable */
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@ -64,14 +65,4 @@ export default class NoteActionsWidget extends TabAwareWidget {
|
|||||||
this.$exportNoteButton.attr('disabled', 'disabled');
|
this.$exportNoteButton.attr('disabled', 'disabled');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
triggerEvent(e, eventName) {
|
|
||||||
const $item = $(e.target).closest('dropdown-item');
|
|
||||||
|
|
||||||
if ($item.is('[disabled]')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.triggerEvent(eventName);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -158,46 +158,62 @@ export default class BookTypeWidget extends TypeWidget {
|
|||||||
this.$help.show();
|
this.$help.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const imageLinks = note.getRelations('imageLink');
|
||||||
|
|
||||||
for (const childNote of childNotes) {
|
for (const childNote of childNotes) {
|
||||||
const childNotePath = this.notePath + '/' + childNote.noteId;
|
// image is already visible in the parent note so no need to display it separately in the book
|
||||||
|
if (imageLinks.find(rel => rel.value === childNote.noteId)) {
|
||||||
const $content = $('<div class="note-book-content">')
|
continue;
|
||||||
.css("max-height", ZOOMS[this.zoomLevel].height);
|
|
||||||
|
|
||||||
const $card = $('<div class="note-book-card">')
|
|
||||||
.attr('data-note-id', childNote.noteId)
|
|
||||||
.css("flex-basis", ZOOMS[this.zoomLevel].width)
|
|
||||||
.append($('<h5 class="note-book-title">').append(await linkService.createNoteLink(childNotePath, {showTooltip: false})))
|
|
||||||
.append($content);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const {type, renderedContent} = await noteContentRenderer.getRenderedContent(childNote);
|
|
||||||
|
|
||||||
$card.addClass("type-" + type);
|
|
||||||
$content.append(renderedContent);
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
console.log(`Caught error while rendering note ${note.noteId} of type ${note.type}: ${e.message}, stack: ${e.stack}`);
|
|
||||||
|
|
||||||
$content.append("rendering error");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const childCount = childNote.getChildNoteIds().length;
|
const $card = await this.renderNote(childNote);
|
||||||
|
|
||||||
if (childCount > 0) {
|
|
||||||
const label = `${childCount} child${childCount > 1 ? 'ren' : ''}`;
|
|
||||||
|
|
||||||
$card.append($('<div class="note-book-children">')
|
|
||||||
.append($(`<a class="note-book-open-children-button no-print" href="javascript:">+ Show ${label}</a>`))
|
|
||||||
.append($(`<a class="note-book-hide-children-button no-print" href="javascript:">- Hide ${label}</a>`).hide())
|
|
||||||
.append($('<div class="note-book-children-content">'))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$container.append($card);
|
$container.append($card);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async renderNote(note) {
|
||||||
|
const notePath = this.notePath + '/' + note.noteId;
|
||||||
|
|
||||||
|
const $content = $('<div class="note-book-content">')
|
||||||
|
.css("max-height", ZOOMS[this.zoomLevel].height);
|
||||||
|
|
||||||
|
const $card = $('<div class="note-book-card">')
|
||||||
|
.attr('data-note-id', note.noteId)
|
||||||
|
.css("flex-basis", ZOOMS[this.zoomLevel].width)
|
||||||
|
.append($('<h5 class="note-book-title">').append(await linkService.createNoteLink(notePath, {showTooltip: false})))
|
||||||
|
.append($content);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const {type, renderedContent} = await noteContentRenderer.getRenderedContent(note);
|
||||||
|
|
||||||
|
$card.addClass("type-" + type);
|
||||||
|
$content.append(renderedContent);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`Caught error while rendering note ${note.noteId} of type ${note.type}: ${e.message}, stack: ${e.stack}`);
|
||||||
|
|
||||||
|
$content.append("rendering error");
|
||||||
|
}
|
||||||
|
|
||||||
|
const imageLinks = note.getRelations('imageLink');
|
||||||
|
|
||||||
|
const childCount = note.getChildNoteIds()
|
||||||
|
.filter(childNoteId => !imageLinks.find(rel => rel.value === childNoteId))
|
||||||
|
.length;
|
||||||
|
|
||||||
|
if (childCount > 0) {
|
||||||
|
const label = `${childCount} child${childCount > 1 ? 'ren' : ''}`;
|
||||||
|
|
||||||
|
$card.append($('<div class="note-book-children">')
|
||||||
|
.append($(`<a class="note-book-open-children-button no-print" href="javascript:">+ Show ${label}</a>`))
|
||||||
|
.append($(`<a class="note-book-hide-children-button no-print" href="javascript:">- Hide ${label}</a>`).hide())
|
||||||
|
.append($('<div class="note-book-children-content">'))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $card;
|
||||||
|
}
|
||||||
|
|
||||||
/** @return {boolean} true if this is "auto book" activated (empty text note) and not explicit book note */
|
/** @return {boolean} true if this is "auto book" activated (empty text note) and not explicit book note */
|
||||||
isAutoBook() {
|
isAutoBook() {
|
||||||
return this.note.type !== 'book';
|
return this.note.type !== 'book';
|
||||||
|
@ -155,15 +155,7 @@ export default class TextTypeWidget extends TypeWidget {
|
|||||||
|
|
||||||
// if content is only tags/whitespace (typically <p> </p>), then just make it empty
|
// if content is only tags/whitespace (typically <p> </p>), then just make it empty
|
||||||
// this is important when setting new note to code
|
// this is important when setting new note to code
|
||||||
return this.isContentEmpty(content) ? '' : content;
|
return utils.isHtmlEmpty(content) ? '' : content;
|
||||||
}
|
|
||||||
|
|
||||||
isContentEmpty(content) {
|
|
||||||
content = content.toLowerCase();
|
|
||||||
|
|
||||||
return jQuery(content).text().trim() === ''
|
|
||||||
&& !content.includes("<img")
|
|
||||||
&& !content.includes("<section")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
focus() {
|
focus() {
|
||||||
|
@ -201,6 +201,7 @@ span.fancytree-node.archived {
|
|||||||
.icon-action.disabled {
|
.icon-action.disabled {
|
||||||
color: var(--muted-text-color) !important;
|
color: var(--muted-text-color) !important;
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-widget-content a:not(.ui-tabs-anchor) {
|
.ui-widget-content a:not(.ui-tabs-anchor) {
|
||||||
@ -271,6 +272,7 @@ div.ui-tooltip {
|
|||||||
|
|
||||||
.dropdown-menu .disabled {
|
.dropdown-menu .disabled {
|
||||||
color: #888 !important;
|
color: #888 !important;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu a:hover:not(.disabled), .dropdown-item:hover:not(.disabled) {
|
.dropdown-menu a:hover:not(.disabled), .dropdown-item:hover:not(.disabled) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user