From c6604c0c56e605f828b5b2ef2cf9f6a10e6fff91 Mon Sep 17 00:00:00 2001 From: Guang Li Date: Tue, 17 Oct 2023 01:21:26 +0800 Subject: [PATCH] Add floating popup to Dynannotate (#7790) --- .../tiddlywiki/dynannotate/docs/readme.tid | 1 + .../dynannotate/modules/dynannotate.js | 55 ++++++++++--------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/plugins/tiddlywiki/dynannotate/docs/readme.tid b/plugins/tiddlywiki/dynannotate/docs/readme.tid index ff0483a79..5160d137f 100644 --- a/plugins/tiddlywiki/dynannotate/docs/readme.tid +++ b/plugins/tiddlywiki/dynannotate/docs/readme.tid @@ -23,6 +23,7 @@ The `<$dynannotate>` widget uses the selection tracker to support a popup that d |filter |Filter identifying the annotation tiddlers applying to this content (see below) | |actions |Action string to be executed when an annotation is clicked. The variable `annotationTiddler` contains the title of the tiddler corresponding to the annotation that was clicked, and the variable `modifierKey` contains "ctrl", "shift", "ctrl-shift", "normal" according to which modifier keys were pressed | |popup |Popup state tiddler to be used to trigger a popup when an annotation is clicked | +|floating |Setting to `yes` makes the popup need to be closed explicitly. | |search |Search text to be highlighted within the widget | |searchDisplay |"overlay" or "snippet" (see below) | |searchMode |"literal" (default), "regexp", "whitespace", "words" or "some" (see below) | diff --git a/plugins/tiddlywiki/dynannotate/modules/dynannotate.js b/plugins/tiddlywiki/dynannotate/modules/dynannotate.js index 12d8f7155..4e4d0ef31 100644 --- a/plugins/tiddlywiki/dynannotate/modules/dynannotate.js +++ b/plugins/tiddlywiki/dynannotate/modules/dynannotate.js @@ -65,7 +65,7 @@ DynannotateWidget.prototype.render = function(parent,nextSibling) { this.domNodes.push(this.domWrapper); // Apply the selection tracker data to the DOM if(!isSnippetMode) { - this.applySelectionTrackerData(); + this.applySelectionTrackerData(); } // Render our child widgets this.renderChildren(this.domContent,null); @@ -79,7 +79,7 @@ DynannotateWidget.prototype.render = function(parent,nextSibling) { // Apply annotations this.applyAnnotations(); // Apply search overlays - this.applySearch(); + this.applySearch(); } } // Save the width of the wrapper so that we can tell when it changes @@ -205,10 +205,11 @@ DynannotateWidget.prototype.applyAnnotations = function() { if(self.hasAttribute("popup")) { $tw.popup.triggerPopup({ domNode: domOverlay, - title: self.getAttribute("popup"), + title: self.getAttribute("popup"), + floating: self.getAttribute("floating"), wiki: self.wiki }); - } + } }; }; // Draw the overlay for the "target" attribute @@ -224,7 +225,7 @@ DynannotateWidget.prototype.applyAnnotations = function() { className: "tc-dynannotation-annotation-overlay", onclick: clickHandlerFn(null) }); - } + } } // Draw the overlays for each annotation tiddler $tw.utils.each(this.annotationTiddlers,function(title) { @@ -361,7 +362,7 @@ DynannotateWidget.prototype.applySnippets = function() { if(!merged) { container = null; } - }); + }); } }; @@ -382,7 +383,7 @@ DynannotateWidget.prototype.refresh = function(changedTiddlers) { var childrenDidRefresh = this.refreshChildren(changedTiddlers); // Reapply the selection tracker data to the DOM if(changedAttributes.selection || changedAttributes.selectionPrefix || changedAttributes.selectionSuffix || changedAttributes.selectionPopup) { - this.applySelectionTrackerData(); + this.applySelectionTrackerData(); } // Reapply the annotations if the children refreshed or the main wrapper resized var wrapperWidth = this.domWrapper.offsetWidth, @@ -390,14 +391,14 @@ DynannotateWidget.prototype.refresh = function(changedTiddlers) { oldAnnotationTiddlers = this.annotationTiddlers; this.getAnnotationTiddlers(); if(!isSnippetMode && ( - childrenDidRefresh || - hasResized || - changedAttributes.target || - changedAttributes.targetPrefix || - changedAttributes.targetSuffix || - changedAttributes.filter || - changedAttributes.actions || - changedAttributes.popup || + childrenDidRefresh || + hasResized || + changedAttributes.target || + changedAttributes.targetPrefix || + changedAttributes.targetSuffix || + changedAttributes.filter || + changedAttributes.actions || + changedAttributes.popup || !$tw.utils.isArrayEqual(oldAnnotationTiddlers,this.annotationTiddlers) || this.annotationTiddlers.find(function(title) { return changedTiddlers[title]; @@ -406,23 +407,23 @@ DynannotateWidget.prototype.refresh = function(changedTiddlers) { this.applyAnnotations(); } if(!isSnippetMode && ( - childrenDidRefresh || - hasResized || - changedAttributes.search || - changedAttributes.searchMinLength || - changedAttributes.searchClass || - changedAttributes.searchMode || + childrenDidRefresh || + hasResized || + changedAttributes.search || + changedAttributes.searchMinLength || + changedAttributes.searchClass || + changedAttributes.searchMode || changedAttributes.searchCaseSensitive )) { this.applySearch(); } if(isSnippetMode && ( - childrenDidRefresh || - hasResized || - changedAttributes.search || - changedAttributes.searchMinLength || - changedAttributes.searchClass || - changedAttributes.searchMode || + childrenDidRefresh || + hasResized || + changedAttributes.search || + changedAttributes.searchMinLength || + changedAttributes.searchClass || + changedAttributes.searchMode || changedAttributes.searchCaseSensitive )) { this.applySnippets();