summaryrefslogtreecommitdiffstats
path: root/mobile/android/modules/Prompt.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/modules/Prompt.jsm')
-rw-r--r--mobile/android/modules/Prompt.jsm234
1 files changed, 234 insertions, 0 deletions
diff --git a/mobile/android/modules/Prompt.jsm b/mobile/android/modules/Prompt.jsm
new file mode 100644
index 000000000..5bed87650
--- /dev/null
+++ b/mobile/android/modules/Prompt.jsm
@@ -0,0 +1,234 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * 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"
+
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/Messaging.jsm");
+
+this.EXPORTED_SYMBOLS = ["Prompt"];
+
+function log(msg) {
+ Services.console.logStringMessage(msg);
+}
+
+function Prompt(aOptions) {
+ this.window = "window" in aOptions ? aOptions.window : null;
+
+ this.msg = { async: true };
+
+ if (this.window) {
+ let window = Services.wm.getMostRecentWindow("navigator:browser");
+ var tab = window.BrowserApp.getTabForWindow(this.window);
+ if (tab) {
+ this.msg.tabId = tab.id;
+ }
+ }
+
+ if (aOptions.priority === 1)
+ this.msg.type = "Prompt:ShowTop"
+ else
+ this.msg.type = "Prompt:Show"
+
+ if ("title" in aOptions && aOptions.title != null)
+ this.msg.title = aOptions.title;
+
+ if ("message" in aOptions && aOptions.message != null)
+ this.msg.text = aOptions.message;
+
+ if ("buttons" in aOptions && aOptions.buttons != null)
+ this.msg.buttons = aOptions.buttons;
+
+ if ("doubleTapButton" in aOptions && aOptions.doubleTapButton != null)
+ this.msg.doubleTapButton = aOptions.doubleTapButton;
+
+ if ("hint" in aOptions && aOptions.hint != null)
+ this.msg.hint = aOptions.hint;
+}
+
+Prompt.prototype = {
+ setHint: function(aHint) {
+ if (!aHint)
+ delete this.msg.hint;
+ else
+ this.msg.hint = aHint;
+ return this;
+ },
+
+ addButton: function(aOptions) {
+ if (!this.msg.buttons)
+ this.msg.buttons = [];
+ this.msg.buttons.push(aOptions.label);
+ return this;
+ },
+
+ _addInput: function(aOptions) {
+ let obj = aOptions;
+ if (this[aOptions.type + "_count"] === undefined)
+ this[aOptions.type + "_count"] = 0;
+
+ obj.id = aOptions.id || (aOptions.type + this[aOptions.type + "_count"]);
+ this[aOptions.type + "_count"]++;
+
+ if (!this.msg.inputs)
+ this.msg.inputs = [];
+ this.msg.inputs.push(obj);
+ return this;
+ },
+
+ addCheckbox: function(aOptions) {
+ return this._addInput({
+ type: "checkbox",
+ label: aOptions.label,
+ checked: aOptions.checked,
+ id: aOptions.id
+ });
+ },
+
+ addTextbox: function(aOptions) {
+ return this._addInput({
+ type: "textbox",
+ value: aOptions.value,
+ hint: aOptions.hint,
+ autofocus: aOptions.autofocus,
+ id: aOptions.id
+ });
+ },
+
+ addNumber: function(aOptions) {
+ return this._addInput({
+ type: "number",
+ value: aOptions.value,
+ hint: aOptions.hint,
+ autofocus: aOptions.autofocus,
+ id: aOptions.id
+ });
+ },
+
+ addPassword: function(aOptions) {
+ return this._addInput({
+ type: "password",
+ value: aOptions.value,
+ hint: aOptions.hint,
+ autofocus: aOptions.autofocus,
+ id : aOptions.id
+ });
+ },
+
+ addDatePicker: function(aOptions) {
+ return this._addInput({
+ type: aOptions.type || "date",
+ value: aOptions.value,
+ id: aOptions.id,
+ max: aOptions.max,
+ min: aOptions.min
+ });
+ },
+
+ addColorPicker: function(aOptions) {
+ return this._addInput({
+ type: "color",
+ value: aOptions.value,
+ id: aOptions.id
+ });
+ },
+
+ addLabel: function(aOptions) {
+ return this._addInput({
+ type: "label",
+ label: aOptions.label,
+ id: aOptions.id
+ });
+ },
+
+ addMenulist: function(aOptions) {
+ return this._addInput({
+ type: "menulist",
+ values: aOptions.values,
+ id: aOptions.id
+ });
+ },
+
+ addIconGrid: function(aOptions) {
+ return this._addInput({
+ type: "icongrid",
+ items: aOptions.items,
+ id: aOptions.id
+ });
+ },
+
+ addTabs: function(aOptions) {
+ return this._addInput({
+ type: "tabs",
+ items: aOptions.items,
+ id: aOptions.id
+ });
+ },
+
+ show: function(callback) {
+ this.callback = callback;
+ log("Sending message");
+ this._innerShow();
+ },
+
+ _innerShow: function() {
+ Messaging.sendRequestForResult(this.msg).then((data) => {
+ if (this.callback)
+ this.callback(data);
+ });
+ },
+
+ _setListItems: function(aItems) {
+ let hasSelected = false;
+ this.msg.listitems = [];
+
+ aItems.forEach(function(item) {
+ let obj = { id: item.id };
+
+ obj.label = item.label;
+
+ if (item.disabled)
+ obj.disabled = true;
+
+ if (item.selected) {
+ if (!this.msg.choiceMode) {
+ this.msg.choiceMode = "single";
+ }
+ obj.selected = item.selected;
+ }
+
+ if (item.header)
+ obj.isGroup = true;
+
+ if (item.menu)
+ obj.isParent = true;
+
+ if (item.child)
+ obj.inGroup = true;
+
+ if (item.showAsActions)
+ obj.showAsActions = item.showAsActions;
+
+ if (item.icon)
+ obj.icon = item.icon;
+
+ this.msg.listitems.push(obj);
+
+ }, this);
+ return this;
+ },
+
+ setSingleChoiceItems: function(aItems) {
+ return this._setListItems(aItems);
+ },
+
+ setMultiChoiceItems: function(aItems) {
+ this.msg.choiceMode = "multiple";
+ return this._setListItems(aItems);
+ },
+
+}