diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js index 1706077f8..e2229fd6e 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/src/public/app/layouts/desktop_layout.js @@ -17,6 +17,7 @@ import SqlResultWidget from "../widgets/sql_result.js"; import SqlTableSchemasWidget from "../widgets/sql_table_schemas.js"; import FilePropertiesWidget from "../widgets/ribbon_widgets/file_properties.js"; import ImagePropertiesWidget from "../widgets/ribbon_widgets/image_properties.js"; +import CanvasPropertiesWidget from "../widgets/ribbon_widgets/canvas_properties.js"; import NotePropertiesWidget from "../widgets/ribbon_widgets/note_properties.js"; import NoteIconWidget from "../widgets/note_icon.js"; import SearchResultWidget from "../widgets/search_result.js"; @@ -145,6 +146,7 @@ export default class DesktopLayout { .ribbon(new NotePropertiesWidget()) .ribbon(new FilePropertiesWidget()) .ribbon(new ImagePropertiesWidget()) + .ribbon(new CanvasPropertiesWidget()) .ribbon(new BasicPropertiesWidget()) .ribbon(new OwnedAttributeListWidget()) .ribbon(new InheritedAttributesWidget()) diff --git a/src/public/app/services/utils.js b/src/public/app/services/utils.js index e17606c1e..8be7c3056 100644 --- a/src/public/app/services/utils.js +++ b/src/public/app/services/utils.js @@ -495,6 +495,14 @@ function copyHtmlToClipboard(content) { navigator.clipboard.write([clipboardItem]); } +/** + * @param {FNote} note + * @return {string} + */ +function createImageSrcUrl(note) { + return `api/images/${note.noteId}/${encodeURIComponent(note.title)}?timestamp=${Date.now()}`; +} + export default { reloadFrontendApp, parseDate, @@ -533,5 +541,6 @@ export default { sleep, escapeRegExp, areObjectsEqual, - copyHtmlToClipboard + copyHtmlToClipboard, + createImageSrcUrl }; diff --git a/src/public/app/widgets/buttons/global_menu.js b/src/public/app/widgets/buttons/global_menu.js index 3e1fda562..35b88923f 100644 --- a/src/public/app/widgets/buttons/global_menu.js +++ b/src/public/app/widgets/buttons/global_menu.js @@ -18,7 +18,7 @@ const TPL = ` .global-menu-button { background-image: url("${window.glob.assetPath}/images/icon-black.svg"); background-repeat: no-repeat; - background-position: 50% 80%; + background-position: 40% 50%; background-size: 45px; width: 100%; height: 100%; diff --git a/src/public/app/widgets/containers/ribbon_container.js b/src/public/app/widgets/containers/ribbon_container.js index a132a0aaf..c75776a99 100644 --- a/src/public/app/widgets/containers/ribbon_container.js +++ b/src/public/app/widgets/containers/ribbon_container.js @@ -88,7 +88,7 @@ const TPL = ` display: none; border-bottom: 1px solid var(--main-border-color); margin-left: 10px; - margin-right: 10px; + margin-right: 5px; /* needs to have this value so that the bottom border is the same width as the top one */ } .ribbon-body.active { diff --git a/src/public/app/widgets/floating_buttons/floating_buttons.js b/src/public/app/widgets/floating_buttons/floating_buttons.js index 1ba2d57cd..75c30ca75 100644 --- a/src/public/app/widgets/floating_buttons/floating_buttons.js +++ b/src/public/app/widgets/floating_buttons/floating_buttons.js @@ -16,6 +16,10 @@ const TPL = ` z-index: 100; } + .type-canvas .floating-buttons-children { + top: 70px; + } + .floating-buttons-children > *:not(.hidden-int):not(.no-content-hidden) { margin-left: 10px; } diff --git a/src/public/app/widgets/note_tree.js b/src/public/app/widgets/note_tree.js index a586dfbde..20d064a80 100644 --- a/src/public/app/widgets/note_tree.js +++ b/src/public/app/widgets/note_tree.js @@ -1147,6 +1147,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { let parentsOfAddedNodes = []; const allBranchRows = loadResults.getBranchRows(); + // TODO: this flag is suspicious - why does it matter that all branches in a particular update are deleted? const allBranchesDeleted = allBranchRows.every(branchRow => !!branchRow.isDeleted); for (const branchRow of allBranchRows) { @@ -1159,8 +1160,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { noteIdsToUpdate.add(branchRow.noteId); } - for (const node of this.getNodesByBranch(branchRow)) { - if (branchRow.isDeleted) { + if (branchRow.isDeleted) { + for (const node of this.getNodesByBranch(branchRow)) { if (node.isActive()) { if (allBranchesDeleted) { const newActiveNode = node.getNextSibling() @@ -1181,9 +1182,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { noteIdsToUpdate.add(branchRow.parentNoteId); } - } - - if (!branchRow.isDeleted) { + } else { for (const parentNode of this.getNodesByNoteId(branchRow.parentNoteId)) { parentsOfAddedNodes.push(parentNode) @@ -1194,12 +1193,16 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { const found = (parentNode.getChildren() || []).find(child => child.data.noteId === branchRow.noteId); if (!found) { // make sure it's loaded - await froca.getNote(branchRow.noteId); + const note = await froca.getNote(branchRow.noteId); const frocaBranch = froca.getBranch(branchRow.branchId); // we're forcing lazy since it's not clear if the whole required subtree is in froca parentNode.addChildren([this.prepareNode(frocaBranch, true)]); + if (frocaBranch.isExpanded && note.hasChildren()) { + noteIdsToReload.add(frocaBranch.noteId); + } + this.sortChildren(parentNode); // this might be a first child which would force an icon change diff --git a/src/public/app/widgets/ribbon_widgets/basic_properties.js b/src/public/app/widgets/ribbon_widgets/basic_properties.js index 00dec1015..39e34d111 100644 --- a/src/public/app/widgets/ribbon_widgets/basic_properties.js +++ b/src/public/app/widgets/ribbon_widgets/basic_properties.js @@ -17,7 +17,8 @@ const TPL = ` .basic-properties-widget > * { margin-right: 30px; - margin-top: 12px; + margin-top: 9px; + margin-bottom: 2px; } .note-type-container, .editability-select-container { diff --git a/src/public/app/widgets/ribbon_widgets/canvas_properties.js b/src/public/app/widgets/ribbon_widgets/canvas_properties.js new file mode 100644 index 000000000..d36bdecf0 --- /dev/null +++ b/src/public/app/widgets/ribbon_widgets/canvas_properties.js @@ -0,0 +1,56 @@ +import NoteContextAwareWidget from "../note_context_aware_widget.js"; +import utils from "../../services/utils.js"; +import imageService from "../../services/image.js"; + +const TPL = ` +