From d4658b9c2a1684606d597081a6950bcce8da157a Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 18 Sep 2022 14:57:44 +0200 Subject: [PATCH] bring back the possibility to close the floating buttons again, closes #3116 --- src/public/app/layouts/desktop_layout.js | 2 + src/public/app/widgets/basic_widget.js | 22 ++++++++++ .../app/widgets/containers/container.js | 27 ------------ .../floating_buttons/floating_buttons.js | 22 ++++++++-- .../hide_floating_buttons_button.js | 42 +++++++++++++++++++ .../floating_buttons/mermaid_export_button.js | 3 -- .../widgets/floating_buttons/zpetne_odkazy.js | 8 +++- src/public/stylesheets/style.css | 4 ++ 8 files changed, 95 insertions(+), 35 deletions(-) create mode 100644 src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js index 64302d2fb..c39e02b9a 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/src/public/app/layouts/desktop_layout.js @@ -80,6 +80,7 @@ import RelationMapButtons from "../widgets/floating_buttons/relation_map_buttons import MermaidExportButton from "../widgets/floating_buttons/mermaid_export_button.js"; import EditableCodeButtonsWidget from "../widgets/type_widgets/editable_code_buttons.js"; import ApiLogWidget from "../widgets/api_log.js"; +import HideFloatingButtonsButton from "../widgets/floating_buttons/hide_floating_buttons_button.js"; export default class DesktopLayout { constructor(customWidgets) { @@ -186,6 +187,7 @@ export default class DesktopLayout { .child(new RelationMapButtons()) .child(new MermaidExportButton()) .child(new BacklinksWidget()) + .child(new HideFloatingButtonsButton()) ) .child(new MermaidWidget()) .child( diff --git a/src/public/app/widgets/basic_widget.js b/src/public/app/widgets/basic_widget.js index f8a1c3ce8..213182c5c 100644 --- a/src/public/app/widgets/basic_widget.js +++ b/src/public/app/widgets/basic_widget.js @@ -8,6 +8,28 @@ class BasicWidget extends Component { style: '' }; this.classes = []; + + this.children = []; + this.childPositionCounter = 10; + } + + child(...components) { + if (!components) { + return this; + } + + super.child(...components); + + for (const component of components) { + if (component.position === undefined) { + component.position = this.childPositionCounter; + this.childPositionCounter += 10; + } + } + + this.children.sort((a, b) => a.position - b.position < 0 ? -1 : 1); + + return this; } id(id) { diff --git a/src/public/app/widgets/containers/container.js b/src/public/app/widgets/containers/container.js index f51ddce27..15ee0e928 100644 --- a/src/public/app/widgets/containers/container.js +++ b/src/public/app/widgets/containers/container.js @@ -1,33 +1,6 @@ import BasicWidget from "../basic_widget.js"; export default class Container extends BasicWidget { - constructor() { - super(); - - this.children = []; - - this.positionCounter = 10; - } - - child(...components) { - if (!components) { - return this; - } - - super.child(...components); - - for (const component of components) { - if (component.position === undefined) { - component.position = this.positionCounter; - this.positionCounter += 10; - } - } - - this.children.sort((a, b) => a.position - b.position < 0 ? -1 : 1); - - return this; - } - doRender() { this.$widget = $(`
`); diff --git a/src/public/app/widgets/floating_buttons/floating_buttons.js b/src/public/app/widgets/floating_buttons/floating_buttons.js index 10454d27e..2df8caf6f 100644 --- a/src/public/app/widgets/floating_buttons/floating_buttons.js +++ b/src/public/app/widgets/floating_buttons/floating_buttons.js @@ -1,4 +1,4 @@ -import Container from "../containers/container.js"; +import NoteContextAwareWidget from "../note_context_aware_widget.js"; const TPL = `
@@ -16,7 +16,7 @@ const TPL = ` z-index: 100; } - .floating-buttons-children > * { + .floating-buttons-children > *:not(.hidden-int):not(.no-content-hidden) { margin-left: 10px; } @@ -24,12 +24,16 @@ const TPL = ` font-size: 130%; padding: 5px 10px 4px 10px; } + + .floating-buttons.temporarily-hidden { + display: none; + }
`; -export default class FloatingButtons extends Container { +export default class FloatingButtons extends NoteContextAwareWidget { doRender() { this.$widget = $(TPL); this.$children = this.$widget.find(".floating-buttons-children"); @@ -38,4 +42,16 @@ export default class FloatingButtons extends Container { this.$children.append(widget.render()); } } + + async refreshWithNote(note) { + this.toggle(true); + } + + toggle(show) { + this.$widget.toggleClass("temporarily-hidden", !show); + } + + hideFloatingButtonsCommand() { + this.toggle(false); + } } diff --git a/src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js b/src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js new file mode 100644 index 000000000..bf68e1814 --- /dev/null +++ b/src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js @@ -0,0 +1,42 @@ +import NoteContextAwareWidget from "../note_context_aware_widget.js"; + +const TPL = ` +
+ + + +
+`; + +export default class HideFloatingButtonsButton extends NoteContextAwareWidget { + doRender() { + super.doRender(); + + this.$widget = $(TPL); + this.$widget.on('click', () => this.triggerCommand('hideFloatingButtons')); + this.contentSized(); + } +} diff --git a/src/public/app/widgets/floating_buttons/mermaid_export_button.js b/src/public/app/widgets/floating_buttons/mermaid_export_button.js index 85556c929..f4b1ed63e 100644 --- a/src/public/app/widgets/floating_buttons/mermaid_export_button.js +++ b/src/public/app/widgets/floating_buttons/mermaid_export_button.js @@ -1,7 +1,4 @@ import NoteContextAwareWidget from "../note_context_aware_widget.js"; -import dialogService from "../dialog.js"; -import server from "../../services/server.js"; -import toastService from "../../services/toast.js"; const TPL = `