From ceb762e56b380a9a9c8f996fe80fbdfb8b79bb14 Mon Sep 17 00:00:00 2001 From: zadam Date: Fri, 4 Sep 2020 23:35:10 +0200 Subject: [PATCH] fix zen mode with attributes, closes #1213 --- src/public/app/services/attribute_renderer.js | 6 +- src/public/app/services/utils.js | 1 + src/public/app/widgets/attribute_detail.js | 98 ++++++++++--------- src/public/app/widgets/attribute_editor.js | 24 +++-- src/public/app/widgets/attribute_list.js | 4 +- 5 files changed, 75 insertions(+), 58 deletions(-) diff --git a/src/public/app/services/attribute_renderer.js b/src/public/app/services/attribute_renderer.js index 2e585b117..2e923c246 100644 --- a/src/public/app/services/attribute_renderer.js +++ b/src/public/app/services/attribute_renderer.js @@ -11,19 +11,15 @@ function renderAttribute(attribute, $container, renderIsInheritable) { $container.append('='); $container.append(document.createTextNode(formatValue(attribute.value))); } - - $container.append(" "); } else if (attribute.type === 'relation') { if (attribute.isAutoLink) { return; } + // when the relation has just been created then it might not have a value if (attribute.value) { $container.append(document.createTextNode('~' + attribute.name + isInheritable + "=")); $container.append(createNoteLink(attribute.value)); - $container.append(" "); - } else { - ws.logError(`Relation ${attribute.attributeId} has empty target`); } } else { ws.logError("Unknown attr type: " + attribute.type); diff --git a/src/public/app/services/utils.js b/src/public/app/services/utils.js index 136080305..8e4e50a9f 100644 --- a/src/public/app/services/utils.js +++ b/src/public/app/services/utils.js @@ -230,6 +230,7 @@ function closeActiveDialog() { let $lastFocusedElement = null; +// perhaps there should be saved focused element per tab? function saveFocusedElement() { $lastFocusedElement = $(":focus"); } diff --git a/src/public/app/widgets/attribute_detail.js b/src/public/app/widgets/attribute_detail.js index 263feaa22..167f8fe1a 100644 --- a/src/public/app/widgets/attribute_detail.js +++ b/src/public/app/widgets/attribute_detail.js @@ -327,46 +327,6 @@ export default class AttributeDetailWidget extends TabAwareWidget { }); } - async saveAndClose() { - await this.triggerCommand('saveAttributes'); - - this.hide(); - - this.triggerCommand('focusOnAttributes', {tabId: this.tabContext.tabId}); - } - - async cancelAndClose() { - await this.triggerCommand('reloadAttributes'); - - this.hide(); - - this.triggerCommand('focusOnAttributes', {tabId: this.tabContext.tabId}); - } - - userEditedAttribute() { - this.updateAttributeInEditor(); - this.updateHelp(); - this.relatedNotesSpacedUpdate.scheduleUpdate(); - } - - updateHelp() { - const attrName = this.$inputName.val(); - - if (this.attrType in ATTR_HELP && attrName in ATTR_HELP[this.attrType]) { - this.$attrHelp - .empty() - .append($("") - .append($("").text(attrName)) - .append(" - ") - .append(ATTR_HELP[this.attrType][attrName]) - ) - .show(); - } - else { - this.$attrHelp.empty().hide(); - } - } - async showAttributeDetail({allAttributes, attribute, isOwned, x, y, focus}) { if (!attribute) { this.hide(); @@ -374,6 +334,8 @@ export default class AttributeDetailWidget extends TabAwareWidget { return; } + utils.saveFocusedElement(); + this.attrType = this.getAttrType(attribute); const attrName = @@ -444,12 +406,20 @@ export default class AttributeDetailWidget extends TabAwareWidget { .attr('readonly', () => !isOwned); } else if (attribute.type === 'relation') { - const targetNote = await treeCache.getNote(attribute.value); - this.$inputTargetNote .attr('readonly', () => !isOwned) - .val(targetNote ? targetNote.title : "") - .setSelectedNotePath(attribute.value); + .val("") + .setSelectedNotePath(""); + + if (attribute.value) { + const targetNote = await treeCache.getNote(attribute.value); + + if (targetNote) { + this.$inputTargetNote + .val(targetNote ? targetNote.title : "") + .setSelectedNotePath(attribute.value); + } + } } this.$inputInheritable @@ -497,6 +467,46 @@ export default class AttributeDetailWidget extends TabAwareWidget { return {left, right}; } + async saveAndClose() { + await this.triggerCommand('saveAttributes'); + + this.hide(); + + utils.focusSavedElement(); + } + + async cancelAndClose() { + await this.triggerCommand('reloadAttributes'); + + this.hide(); + + utils.focusSavedElement(); + } + + userEditedAttribute() { + this.updateAttributeInEditor(); + this.updateHelp(); + this.relatedNotesSpacedUpdate.scheduleUpdate(); + } + + updateHelp() { + const attrName = this.$inputName.val(); + + if (this.attrType in ATTR_HELP && attrName in ATTR_HELP[this.attrType]) { + this.$attrHelp + .empty() + .append($("") + .append($("").text(attrName)) + .append(" - ") + .append(ATTR_HELP[this.attrType][attrName]) + ) + .show(); + } + else { + this.$attrHelp.empty().hide(); + } + } + async updateRelatedNotes() { let {results, count} = await server.post('search-related', this.attribute); diff --git a/src/public/app/widgets/attribute_editor.js b/src/public/app/widgets/attribute_editor.js index 86c50e909..d63aab850 100644 --- a/src/public/app/widgets/attribute_editor.js +++ b/src/public/app/widgets/attribute_editor.js @@ -232,13 +232,17 @@ export default class AttributeEditorWidget extends TabAwareWidget { } // triggered from keyboard shortcut - addNewLabelEvent() { - this.handleAddNewAttributeCommand('addNewLabel'); + addNewLabelEvent({tabId}) { + if (this.isTab(tabId)) { + this.handleAddNewAttributeCommand('addNewLabel'); + } } // triggered from keyboard shortcut - addNewRelationEvent() { - this.handleAddNewAttributeCommand('addNewRelation'); + addNewRelationEvent({tabId}) { + if (this.isTab(tabId)) { + this.handleAddNewAttributeCommand('addNewRelation'); + } } async handleAddNewAttributeCommand(command) { @@ -459,11 +463,17 @@ export default class AttributeEditorWidget extends TabAwareWidget { } async renderOwnedAttributes(ownedAttributes, saved) { + ownedAttributes = ownedAttributes.filter(oa => !oa.isDeleted); + const $attributesContainer = $("
"); - for (const attribute of ownedAttributes) { - if (!attribute.isDeleted) { - attributeRenderer.renderAttribute(attribute, $attributesContainer, true); + for (let i = 0; i < ownedAttributes.length; i++) { + const attribute = ownedAttributes[i]; + + attributeRenderer.renderAttribute(attribute, $attributesContainer, true); + + if (i < ownedAttributes.length - 1) { + $attributesContainer.append(" "); } } diff --git a/src/public/app/widgets/attribute_list.js b/src/public/app/widgets/attribute_list.js index 634d97498..942ab4d32 100644 --- a/src/public/app/widgets/attribute_list.js +++ b/src/public/app/widgets/attribute_list.js @@ -220,9 +220,9 @@ export default class AttributeListWidget extends TabAwareWidget { y: e.pageY })); - $container.append($span); - attributeRenderer.renderAttribute(attribute, $span, false); + + $container.append($span); } }