summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/widgets/tooltip/InlineTooltip.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/widgets/tooltip/InlineTooltip.js')
-rw-r--r--devtools/client/shared/widgets/tooltip/InlineTooltip.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/devtools/client/shared/widgets/tooltip/InlineTooltip.js b/devtools/client/shared/widgets/tooltip/InlineTooltip.js
new file mode 100644
index 0000000000..a99a1a9400
--- /dev/null
+++ b/devtools/client/shared/widgets/tooltip/InlineTooltip.js
@@ -0,0 +1,100 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const EventEmitter = require("devtools/shared/event-emitter");
+
+/**
+ * The InlineTooltip can display widgets for the CSS Rules view in an
+ * inline container.
+ *
+ * @param {Document} doc
+ * The toolbox document to attach the InlineTooltip container.
+ */
+function InlineTooltip(doc) {
+ EventEmitter.decorate(this);
+
+ this.doc = doc;
+
+ this.panel = this.doc.createElement("div");
+
+ this.topWindow = this._getTopWindow();
+}
+
+InlineTooltip.prototype = {
+ /**
+ * Show the tooltip. It might be wise to append some content first if you
+ * don't want the tooltip to be empty.
+ *
+ * @param {Node} anchor
+ * Which node below which the tooltip should be shown.
+ */
+ show(anchor) {
+ anchor.parentNode.insertBefore(this.panel, anchor.nextSibling);
+
+ this.emit("shown");
+ },
+
+ /**
+ * Hide the current tooltip.
+ */
+ hide() {
+ if (!this.isVisible()) {
+ return;
+ }
+
+ this.panel.parentNode.remove(this.panel);
+
+ this.emit("hidden");
+ },
+
+ /**
+ * Check if the tooltip is currently displayed.
+ *
+ * @return {Boolean} true if the tooltip is visible
+ */
+ isVisible() {
+ return (
+ typeof this.panel.parentNode !== "undefined" &&
+ this.panel.parentNode !== null
+ );
+ },
+
+ /**
+ * Clears the HTML content of the tooltip panel
+ */
+ clear() {
+ this.panel.innerHTML = "";
+ },
+
+ /**
+ * Set the content of this tooltip. Will first clear the tooltip and then
+ * append the new content element.
+ *
+ * @param {DOMNode} content
+ * A node that can be appended in the tooltip
+ */
+ setContent(content) {
+ this.clear();
+
+ this.panel.appendChild(content);
+ },
+
+ get content() {
+ return this.panel.firstChild;
+ },
+
+ _getTopWindow: function() {
+ return this.doc.defaultView;
+ },
+
+ destroy() {
+ this.hide();
+ this.doc = null;
+ this.panel = null;
+ },
+};
+
+module.exports = InlineTooltip;