From 32c88219c36af510b0ccba74cf46cd528b9688a5 Mon Sep 17 00:00:00 2001 From: zadam Date: Sat, 26 Jun 2021 17:08:50 +0200 Subject: [PATCH] switcher for editability --- .../widgets/containers/scrolling_container.js | 3 + src/public/app/widgets/editability_select.js | 75 +++++++++++++++++++ src/public/app/widgets/note_type.js | 2 +- .../ribbon_widgets/basic_properties.js | 25 +++++-- src/public/stylesheets/style.css | 1 + 5 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 src/public/app/widgets/editability_select.js diff --git a/src/public/app/widgets/containers/scrolling_container.js b/src/public/app/widgets/containers/scrolling_container.js index 7377b7129..6717ec992 100644 --- a/src/public/app/widgets/containers/scrolling_container.js +++ b/src/public/app/widgets/containers/scrolling_container.js @@ -35,7 +35,10 @@ export default class ScrollingContainer extends Container { const promise = super.handleEventInChildren(name, data); + // there seems to be some asynchronicity and we need to wait a bit before scrolling promise.then(() => setTimeout(() => this.$widget.scrollTop(scrollTop), 500)); + + return promise; } else { return super.handleEventInChildren(name, data); diff --git a/src/public/app/widgets/editability_select.js b/src/public/app/widgets/editability_select.js new file mode 100644 index 000000000..04271d382 --- /dev/null +++ b/src/public/app/widgets/editability_select.js @@ -0,0 +1,75 @@ +import attributeService from '../services/attributes.js'; +import NoteContextAwareWidget from "./note_context_aware_widget.js"; + +const TPL = ` + +`; + +export default class EditabilitySelectWidget extends NoteContextAwareWidget { + doRender() { + this.$widget = $(TPL); + + this.$editabilityActiveDesc = this.$widget.find(".editability-active-desc"); + + this.$widget.on('click', '.dropdown-item', + async e => { + this.$widget.find('.dropdown-toggle').dropdown('toggle'); + + const editability = $(e.target).closest("[data-editability]").attr("data-editability"); + + for (const ownedAttr of this.note.getOwnedLabels()) { + if (['readOnly', 'autoReadOnlyDisabled'].includes(ownedAttr.name)) { + await attributeService.removeAttributeById(this.noteId, ownedAttr.attributeId); + } + } + + if (editability !== 'auto') { + await attributeService.addLabel(this.noteId, editability); + } + }); + } + + async refreshWithNote(note) { + this.$editabilityActiveDesc.text( + this.note.hasLabel('readOnly') ? 'Read-Only' : ( + this.note.hasLabel('autoReadOnlyDisabled') ? 'Always Editable' : 'Auto' + ) + ); + } + + entitiesReloadedEvent({loadResults}) { + if (loadResults.getAttributes().find(attr => attr.noteId === this.noteId)) { + this.refresh(); + } + } +} diff --git a/src/public/app/widgets/note_type.js b/src/public/app/widgets/note_type.js index 2741fd432..261cac15a 100644 --- a/src/public/app/widgets/note_type.js +++ b/src/public/app/widgets/note_type.js @@ -27,7 +27,7 @@ const TPL = ` - + `; diff --git a/src/public/app/widgets/ribbon_widgets/basic_properties.js b/src/public/app/widgets/ribbon_widgets/basic_properties.js index 88b8a373e..dd63b5493 100644 --- a/src/public/app/widgets/ribbon_widgets/basic_properties.js +++ b/src/public/app/widgets/ribbon_widgets/basic_properties.js @@ -1,23 +1,26 @@ import NoteContextAwareWidget from "../note_context_aware_widget.js"; import NoteTypeWidget from "../note_type.js"; import ProtectedNoteSwitchWidget from "../protected_note_switch.js"; +import EditabilitySelectWidget from "../editability_select.js"; const TPL = `
@@ -26,6 +29,10 @@ const TPL = `
+ +
+ Editable:   +
`; export default class BasicPropertiesWidget extends NoteContextAwareWidget { @@ -34,12 +41,13 @@ export default class BasicPropertiesWidget extends NoteContextAwareWidget { this.noteTypeWidget = new NoteTypeWidget().contentSized(); this.protectedNoteSwitchWidget = new ProtectedNoteSwitchWidget().contentSized(); + this.editabilitySelectWidget = new EditabilitySelectWidget().contentSized(); - this.child(this.noteTypeWidget, this.protectedNoteSwitchWidget); + this.child(this.noteTypeWidget, this.protectedNoteSwitchWidget, this.editabilitySelectWidget); } isEnabled() { - return this.note; + return this.note && (this.note.type === 'text' || this.note.type === 'code'); } getTitle() { @@ -56,5 +64,6 @@ export default class BasicPropertiesWidget extends NoteContextAwareWidget { this.$widget.find(".note-type-container").append(this.noteTypeWidget.render()); this.$widget.find(".protected-note-switch-container").append(this.protectedNoteSwitchWidget.render()); + this.$widget.find(".editability-select-container").append(this.editabilitySelectWidget.render()); } } diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index 459d63d71..de2554fa8 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -787,6 +787,7 @@ body { ::-webkit-scrollbar { width: 12px; + background-color: var(--main-background-color); } ::-webkit-scrollbar-thumb {