summaryrefslogtreecommitdiffstats
path: root/application/basilisk/components/uitour/UITour-lib.js
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2018-02-02 03:32:58 -0500
committerMatt A. Tobin <email@mattatobin.com>2018-02-02 03:32:58 -0500
commite72ef92b5bdc43cd2584198e2e54e951b70299e8 (patch)
tree01ceb4a897c33eca9e7ccf2bc3aefbe530169fe5 /application/basilisk/components/uitour/UITour-lib.js
parent0d19b77d3eaa5b8d837bf52c19759e68e42a1c4c (diff)
downloadUXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar.gz
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar.lz
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar.xz
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.zip
Add Basilisk
Diffstat (limited to 'application/basilisk/components/uitour/UITour-lib.js')
-rw-r--r--application/basilisk/components/uitour/UITour-lib.js331
1 files changed, 331 insertions, 0 deletions
diff --git a/application/basilisk/components/uitour/UITour-lib.js b/application/basilisk/components/uitour/UITour-lib.js
new file mode 100644
index 000000000..2d8686243
--- /dev/null
+++ b/application/basilisk/components/uitour/UITour-lib.js
@@ -0,0 +1,331 @@
+/* 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/. */
+
+// create namespace
+if (typeof Mozilla == "undefined") {
+ var Mozilla = {};
+}
+
+(function($) {
+ "use strict";
+
+ // create namespace
+ if (typeof Mozilla.UITour == "undefined") {
+ Mozilla.UITour = {};
+ }
+
+ var themeIntervalId = null;
+ function _stopCyclingThemes() {
+ if (themeIntervalId) {
+ clearInterval(themeIntervalId);
+ themeIntervalId = null;
+ }
+ }
+
+ function _sendEvent(action, data) {
+ var event = new CustomEvent("mozUITour", {
+ bubbles: true,
+ detail: {
+ action,
+ data: data || {}
+ }
+ });
+
+ document.dispatchEvent(event);
+ }
+
+ function _generateCallbackID() {
+ return Math.random().toString(36).replace(/[^a-z]+/g, "");
+ }
+
+ function _waitForCallback(callback) {
+ var id = _generateCallbackID();
+
+ function listener(event) {
+ if (typeof event.detail != "object")
+ return;
+ if (event.detail.callbackID != id)
+ return;
+
+ document.removeEventListener("mozUITourResponse", listener);
+ callback(event.detail.data);
+ }
+ document.addEventListener("mozUITourResponse", listener);
+
+ return id;
+ }
+
+ var notificationListener = null;
+ function _notificationListener(event) {
+ if (typeof event.detail != "object")
+ return;
+ if (typeof notificationListener != "function")
+ return;
+
+ notificationListener(event.detail.event, event.detail.params);
+ }
+
+ Mozilla.UITour.DEFAULT_THEME_CYCLE_DELAY = 10 * 1000;
+
+ Mozilla.UITour.CONFIGNAME_SYNC = "sync";
+ Mozilla.UITour.CONFIGNAME_AVAILABLETARGETS = "availableTargets";
+
+ Mozilla.UITour.ping = function(callback) {
+ var data = {};
+ if (callback) {
+ data.callbackID = _waitForCallback(callback);
+ }
+ _sendEvent("ping", data);
+ };
+
+ Mozilla.UITour.observe = function(listener, callback) {
+ notificationListener = listener;
+
+ if (listener) {
+ document.addEventListener("mozUITourNotification",
+ _notificationListener);
+ Mozilla.UITour.ping(callback);
+ } else {
+ document.removeEventListener("mozUITourNotification",
+ _notificationListener);
+ }
+ };
+
+ Mozilla.UITour.registerPageID = function(pageID) {
+ _sendEvent("registerPageID", {
+ pageID
+ });
+ };
+
+ Mozilla.UITour.showHeartbeat = function(message, thankyouMessage, flowId, engagementURL,
+ learnMoreLabel, learnMoreURL, options) {
+ var args = {
+ message,
+ thankyouMessage,
+ flowId,
+ engagementURL,
+ learnMoreLabel,
+ learnMoreURL,
+ };
+
+ if (options) {
+ for (var option in options) {
+ if (!options.hasOwnProperty(option)) {
+ continue;
+ }
+ args[option] = options[option];
+ }
+ }
+
+ _sendEvent("showHeartbeat", args);
+ };
+
+ Mozilla.UITour.showHighlight = function(target, effect) {
+ _sendEvent("showHighlight", {
+ target,
+ effect
+ });
+ };
+
+ Mozilla.UITour.hideHighlight = function() {
+ _sendEvent("hideHighlight");
+ };
+
+ Mozilla.UITour.showInfo = function(target, title, text, icon, buttons, options) {
+ var buttonData = [];
+ if (Array.isArray(buttons)) {
+ for (var i = 0; i < buttons.length; i++) {
+ buttonData.push({
+ label: buttons[i].label,
+ icon: buttons[i].icon,
+ style: buttons[i].style,
+ callbackID: _waitForCallback(buttons[i].callback)
+ });
+ }
+ }
+
+ var closeButtonCallbackID, targetCallbackID;
+ if (options && options.closeButtonCallback)
+ closeButtonCallbackID = _waitForCallback(options.closeButtonCallback);
+ if (options && options.targetCallback)
+ targetCallbackID = _waitForCallback(options.targetCallback);
+
+ _sendEvent("showInfo", {
+ target,
+ title,
+ text,
+ icon,
+ buttons: buttonData,
+ closeButtonCallbackID,
+ targetCallbackID
+ });
+ };
+
+ Mozilla.UITour.hideInfo = function() {
+ _sendEvent("hideInfo");
+ };
+
+ Mozilla.UITour.previewTheme = function(theme) {
+ _stopCyclingThemes();
+
+ _sendEvent("previewTheme", {
+ theme: JSON.stringify(theme)
+ });
+ };
+
+ Mozilla.UITour.resetTheme = function() {
+ _stopCyclingThemes();
+
+ _sendEvent("resetTheme");
+ };
+
+ Mozilla.UITour.cycleThemes = function(themes, delay, callback) {
+ _stopCyclingThemes();
+
+ if (!delay) {
+ delay = Mozilla.UITour.DEFAULT_THEME_CYCLE_DELAY;
+ }
+
+ function nextTheme() {
+ var theme = themes.shift();
+ themes.push(theme);
+
+ _sendEvent("previewTheme", {
+ theme: JSON.stringify(theme),
+ state: true
+ });
+
+ callback(theme);
+ }
+
+ themeIntervalId = setInterval(nextTheme, delay);
+ nextTheme();
+ };
+
+ Mozilla.UITour.showMenu = function(name, callback) {
+ var showCallbackID;
+ if (callback)
+ showCallbackID = _waitForCallback(callback);
+
+ _sendEvent("showMenu", {
+ name,
+ showCallbackID,
+ });
+ };
+
+ Mozilla.UITour.hideMenu = function(name) {
+ _sendEvent("hideMenu", {
+ name
+ });
+ };
+
+ Mozilla.UITour.showNewTab = function() {
+ _sendEvent("showNewTab");
+ };
+
+ Mozilla.UITour.getConfiguration = function(configName, callback) {
+ _sendEvent("getConfiguration", {
+ callbackID: _waitForCallback(callback),
+ configuration: configName,
+ });
+ };
+
+ Mozilla.UITour.setConfiguration = function(configName, configValue) {
+ _sendEvent("setConfiguration", {
+ configuration: configName,
+ value: configValue,
+ });
+ };
+
+ /**
+ * Request the browser open the Firefox Accounts page.
+ *
+ * @param {Object} extraURLCampaignParams - An object containing additional
+ * paramaters for the URL opened by the browser for reasons of promotional
+ * campaign tracking. Each attribute of the object must have a name that
+ * is a string, begins with "utm_" and contains only only alphanumeric
+ * characters, dashes or underscores. The values may be any string and will
+ * automatically be encoded.
+ */
+ Mozilla.UITour.showFirefoxAccounts = function(extraURLCampaignParams) {
+ _sendEvent("showFirefoxAccounts", {
+ extraURLCampaignParams: JSON.stringify(extraURLCampaignParams),
+ });
+ };
+
+ Mozilla.UITour.resetFirefox = function() {
+ _sendEvent("resetFirefox");
+ };
+
+ Mozilla.UITour.addNavBarWidget = function(name, callback) {
+ _sendEvent("addNavBarWidget", {
+ name,
+ callbackID: _waitForCallback(callback),
+ });
+ };
+
+ Mozilla.UITour.setDefaultSearchEngine = function(identifier) {
+ _sendEvent("setDefaultSearchEngine", {
+ identifier,
+ });
+ };
+
+ Mozilla.UITour.setTreatmentTag = function(name, value) {
+ _sendEvent("setTreatmentTag", {
+ name,
+ value
+ });
+ };
+
+ Mozilla.UITour.getTreatmentTag = function(name, callback) {
+ _sendEvent("getTreatmentTag", {
+ name,
+ callbackID: _waitForCallback(callback)
+ });
+ };
+
+ Mozilla.UITour.setSearchTerm = function(term) {
+ _sendEvent("setSearchTerm", {
+ term
+ });
+ };
+
+ Mozilla.UITour.openSearchPanel = function(callback) {
+ _sendEvent("openSearchPanel", {
+ callbackID: _waitForCallback(callback)
+ });
+ };
+
+ Mozilla.UITour.forceShowReaderIcon = function() {
+ _sendEvent("forceShowReaderIcon");
+ };
+
+ Mozilla.UITour.toggleReaderMode = function() {
+ _sendEvent("toggleReaderMode");
+ };
+
+ Mozilla.UITour.openPreferences = function(pane) {
+ _sendEvent("openPreferences", {
+ pane
+ });
+ };
+
+ /**
+ * Closes the tab where this code is running. As usual, if the tab is in the
+ * foreground, the tab that was displayed before is selected.
+ *
+ * The last tab in the current window will never be closed, in which case
+ * this call will have no effect. The calling code is expected to take an
+ * action after a small timeout in order to handle this case, for example by
+ * displaying a goodbye message or a button to restart the tour.
+ */
+ Mozilla.UITour.closeTab = function() {
+ _sendEvent("closeTab");
+ };
+})();
+
+// Make this library Require-able.
+if (typeof module !== "undefined" && module.exports) {
+ module.exports = Mozilla.UITour;
+}