diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js index 6aec785e4..fd4aff19f 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/src/public/app/layouts/desktop_layout.js @@ -38,6 +38,8 @@ import SimilarNotesWidget from "../widgets/ribbon_widgets/similar_notes.js"; import RightPaneContainer from "../widgets/containers/right_pane_container.js"; import EditButton from "../widgets/buttons/edit_button.js"; import EditedNotesWidget from "../widgets/ribbon_widgets/edited_notes.js"; +import ShowTocWidgetButton from "../widgets/buttons/show_toc_widget_button.js"; +import ShowHighlightsListWidgetButton from "../widgets/buttons/show_highlights_list_widget_button.js"; import MermaidWidget from "../widgets/mermaid.js"; import NoteWrapperWidget from "../widgets/note_wrapper.js"; import BacklinksWidget from "../widgets/floating_buttons/zpetne_odkazy.js"; @@ -160,6 +162,8 @@ export default class DesktopLayout { .child(new WatchedFileUpdateStatusWidget()) .child(new FloatingButtons() .child(new EditButton()) + .child(new ShowTocWidgetButton()) + .child(new ShowHighlightsListWidgetButton()) .child(new CodeButtonsWidget()) .child(new RelationMapButtons()) .child(new CopyImageReferenceButton()) diff --git a/src/public/app/widgets/buttons/show_highlights_list_widget_button.js b/src/public/app/widgets/buttons/show_highlights_list_widget_button.js new file mode 100644 index 000000000..9a7d99eb7 --- /dev/null +++ b/src/public/app/widgets/buttons/show_highlights_list_widget_button.js @@ -0,0 +1,50 @@ +import OnClickButtonWidget from "./onclick_button.js"; +import appContext from "../../components/app_context.js"; +import attributeService from "../../services/attributes.js"; +import { t } from "../../services/i18n.js"; + +export default class ShowHighlightsListWidgetButton extends OnClickButtonWidget { + isEnabled() { + return super.isEnabled() + && this.note + && this.note.type === 'text' + && this.noteContext.viewScope.viewMode === 'default'; + } + + constructor() { + super(); + + this.icon("bx-highlight") + .title(t("show_highlights_list_widget_button.show_highlights_list")) + .titlePlacement("bottom") + .onClick(widget => { + this.noteContext.viewScope.highlightsListTemporarilyHidden = false; + appContext.triggerEvent("showHighlightsListWidget", { noteId: this.noteId }); + this.toggleInt(false); + }); + } + + async refreshWithNote(note) { + this.toggleInt(this.noteContext.viewScope.highlightsListTemporarilyHidden); + } + async reEvaluateHighlightsListWidgetVisibilityEvent({ noteId }) { + if (noteId === this.noteId) { + await this.refresh(); + } + } + async entitiesReloadedEvent({ loadResults }) { + if (loadResults.isNoteContentReloaded(this.noteId)) { + await this.refresh(); + } else if (loadResults.getAttributeRows().find(attr => attr.type === 'label' + && (attr.name.toLowerCase().includes('readonly') || attr.name === 'hideHighlightWidget') + && attributeService.isAffecting(attr, this.note))) { + await this.refresh(); + } + } + + async noteTypeMimeChangedEvent({ noteId }) { + if (this.isNote(noteId)) { + await this.refresh(); + } + } +} diff --git a/src/public/app/widgets/buttons/show_toc_widget_button.js b/src/public/app/widgets/buttons/show_toc_widget_button.js new file mode 100644 index 000000000..c4f4262f9 --- /dev/null +++ b/src/public/app/widgets/buttons/show_toc_widget_button.js @@ -0,0 +1,50 @@ +import OnClickButtonWidget from "./onclick_button.js"; +import appContext from "../../components/app_context.js"; +import attributeService from "../../services/attributes.js"; +import { t } from "../../services/i18n.js"; + +export default class ShowTocWidgetButton extends OnClickButtonWidget { + isEnabled() { + return super.isEnabled() + && this.note + && this.note.type === 'text' + && this.noteContext.viewScope.viewMode === 'default'; + } + + constructor() { + super(); + + this.icon("bx-objects-horizontal-left") + .title(t("show_toc_widget_button.show_toc")) + .titlePlacement("bottom") + .onClick(widget => { + this.noteContext.viewScope.tocTemporarilyHidden = false; + appContext.triggerEvent("showTocWidget", { noteId: this.noteId }); + this.toggleInt(false); + }); + } + + async refreshWithNote(note) { + this.toggleInt(this.noteContext.viewScope.tocTemporarilyHidden); + } + async reEvaluateTocWidgetVisibilityEvent({ noteId }) { + if (noteId === this.noteId) { + await this.refresh(); + } + } + async entitiesReloadedEvent({ loadResults }) { + if (loadResults.isNoteContentReloaded(this.noteId)) { + await this.refresh(); + } else if (loadResults.getAttributeRows().find(attr => attr.type === 'label' + && (attr.name.toLowerCase().includes('readonly') || attr.name === 'toc') + && attributeService.isAffecting(attr, this.note))) { + await this.refresh(); + } + } + + async noteTypeMimeChangedEvent({ noteId }) { + if (this.isNote(noteId)) { + await this.refresh(); + } + } +} diff --git a/src/public/app/widgets/highlights_list.js b/src/public/app/widgets/highlights_list.js index 8dd73a8a4..6c728c8b3 100644 --- a/src/public/app/widgets/highlights_list.js +++ b/src/public/app/widgets/highlights_list.js @@ -10,6 +10,7 @@ import RightPanelWidget from "./right_panel_widget.js"; import options from "../services/options.js"; import OnClickButtonWidget from "./buttons/onclick_button.js"; import appContext from "../components/app_context.js"; +import libraryLoader from "../services/library_loader.js"; const TPL = `