opentip icon indicating copy to clipboard operation
opentip copied to clipboard

No way to remove permanently opentips

Open l0co opened this issue 11 years ago • 3 comments

My usecase is to use opentips in fully ajaxed application (only one page refresh at start, then ajax - no reloads). But I don't want tips, but rather the help layer triggered by the help button that shows tips aligned to elements on demand. For such usage I need to instantiate all opentips on request, and remove them on help close action. For this I would need the opentips completely killed when I close all this stuff (clear dom elements, remove listeners, remove them from buffers). I believe here is a working patch doing this for 2.4.6:

Index: opentip-native.js
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- opentip-native.js   (revision 543)
+++ opentip-native.js   (revision )
@@ -596,10 +596,17 @@
         _this.setCss3Style(_this.container, {
           transitionDuration: "0s"
         });
-        if (_this.options.removeElementsOnHide) {
+        if (_this.options.removeElementsOnHide || _this.options.removePermanentlyOnHide) {
           _this.debug("Removing HTML elements.");
           _this.adapter.remove(_this.container);
           delete _this.container;
+          if (_this.options.removePermanentlyOnHide) {
+            for (var i=0; i<Opentip.tips.length; i++)
+                if (Opentip.tips[i].id==_this.id) {
+                    Opentip.tips.splice(i, 1);
+                    break;
+                }
+          }
           return delete _this.tooltipElement;
         }
       }, hideDelay);
@@ -1552,6 +1559,7 @@
     hideTriggers: [],
     hideOn: null,
     removeElementsOnHide: false,
+    removePermanentlyOnHide: false,
     offset: [0, 0],
     containInViewport: true,
     autoOffset: true,
\ No newline at end of file

l0co avatar Aug 08 '13 16:08 l0co

Hi, have you found how to delete all tooltip content from DOM? thanks

jaunetajabe avatar Jun 12 '14 09:06 jaunetajabe

I no longer remember this case well, but doesn't this patch do it exactly?

l0co avatar Jun 12 '14 10:06 l0co

I am using the latest version and even with removeElementsOnHide: true, my dynamic layout would keep adding tooltips on top of each other after each of my renders. I tried to delete the data from each element, I tried to delete the Opentips.tip array, and it woudln't get rid of the duplicate opentips. I don't know where they are being stored, but this finally allowed me to programatically clear them all out so I only had one set of opentips on every render update in my app:

// clear all old opentips while (Opentip.tips.length > 0) { Opentip.tips.shift().deactivate(); }

...

// when iterating over DOM elements, clear data bound to each individual element $(this).data('opentips', []);

It would be really convenient to provide a method to do this automatically?

RyanBrainerd avatar May 20 '16 19:05 RyanBrainerd