summaryrefslogtreecommitdiffstats
path: root/comm/chat/content/imAccountOptionsHelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/chat/content/imAccountOptionsHelper.js')
-rw-r--r--comm/chat/content/imAccountOptionsHelper.js121
1 files changed, 121 insertions, 0 deletions
diff --git a/comm/chat/content/imAccountOptionsHelper.js b/comm/chat/content/imAccountOptionsHelper.js
new file mode 100644
index 0000000000..cbe8c486d8
--- /dev/null
+++ b/comm/chat/content/imAccountOptionsHelper.js
@@ -0,0 +1,121 @@
+/* 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/. */
+
+var accountOptionsHelper = {
+ /**
+ * Create a new label and a corresponding input.
+ *
+ * @param {string} aType - The input type ("number" or "text").
+ * @param {string} aValue - The initial value for the input.
+ * @param {string} aLabel - The text for the label.
+ * @param {string} aName - The id for the input.
+ * @param {Element} grid - A container with a two column grid display to
+ * append the new elements to.
+ */
+ createTextbox(aType, aValue, aLabel, aName, grid) {
+ let label = document.createXULElement("label");
+ label.textContent = aLabel;
+ label.setAttribute("control", aName);
+ label.classList.add("label-inline");
+ grid.appendChild(label);
+
+ let input = document.createElementNS(
+ "http://www.w3.org/1999/xhtml",
+ "input"
+ );
+ if (aType == "number") {
+ input.classList.add("input-number-inline");
+ } else {
+ input.classList.add("input-inline");
+ }
+ if (aType) {
+ input.setAttribute("type", aType);
+ }
+ input.setAttribute("value", aValue);
+ input.setAttribute("id", aName);
+
+ grid.appendChild(input);
+ },
+
+ /**
+ * Create a new label and a corresponding menulist.
+ *
+ * @param {object[]} aList - The list of items to fill the menulist with.
+ * @param {string} aList[].label - The label for the menuitem.
+ * @param {string} aList[].value - The value for the menuitem.
+ * @param {string} aLabel - The text for the label.
+ * @param {string} aName - The id for the menulist.
+ * @param {Element} grid - A container with a two column grid display to
+ * append the new elements to.
+ */
+ createMenulist(aList, aLabel, aName, grid) {
+ let label = document.createXULElement("label");
+ label.setAttribute("value", aLabel);
+ label.setAttribute("control", aName);
+ label.classList.add("label-inline");
+ grid.appendChild(label);
+
+ let menulist = document.createXULElement("menulist");
+ menulist.setAttribute("id", aName);
+ menulist.setAttribute("flex", "1");
+ menulist.classList.add("input-inline");
+ let popup = menulist.appendChild(document.createXULElement("menupopup"));
+ for (let elt of aList) {
+ let item = document.createXULElement("menuitem");
+ item.setAttribute("label", elt.name);
+ item.setAttribute("value", elt.value);
+ popup.appendChild(item);
+ }
+ grid.appendChild(menulist);
+ },
+
+ // Adds options with specific prefix for ids to UI according to their types
+ // with optional attributes for each type and returns true if at least one
+ // option has been added to UI, otherwise returns false.
+ addOptions(aIdPrefix, aOptions, aAttributes) {
+ let grid = document.getElementById("protoSpecific");
+ while (grid.hasChildNodes()) {
+ grid.lastChild.remove();
+ }
+
+ let haveOptions = false;
+ for (let opt of aOptions) {
+ let text = opt.label;
+ let name = aIdPrefix + opt.name;
+ switch (opt.type) {
+ case Ci.prplIPref.typeBool:
+ let chk = document.createXULElement("checkbox");
+ chk.setAttribute("label", text);
+ chk.setAttribute("id", name);
+ if (opt.getBool()) {
+ chk.setAttribute("checked", "true");
+ }
+ // Span two columns.
+ chk.classList.add("grid-item-span-row");
+ grid.appendChild(chk);
+ break;
+ case Ci.prplIPref.typeInt:
+ this.createTextbox("number", opt.getInt(), text, name, grid);
+ break;
+ case Ci.prplIPref.typeString:
+ this.createTextbox("text", opt.getString(), text, name, grid);
+ break;
+ case Ci.prplIPref.typeList:
+ this.createMenulist(opt.getList(), text, name, grid);
+ document.getElementById(name).value = opt.getListDefault();
+ break;
+ default:
+ throw new Error("unknown preference type " + opt.type);
+ }
+ if (aAttributes && aAttributes[opt.type]) {
+ let element = document.getElementById(name);
+ for (let attr of aAttributes[opt.type]) {
+ element.setAttribute(attr.name, attr.value);
+ }
+ }
+ haveOptions = true;
+ }
+ return haveOptions;
+ },
+};