aboutsummaryrefslogblamecommitdiffstats
path: root/lib/prompts.js
blob: bb42c39eea4bd407ec88b0704d8f5c86f9655d19 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                 










                                                               















                                                               
                    



























                                                                               
                    








                                                                              
                                               













                                                                          


















                                                                  



































                                                                                  
/*global exports: false, require: false, console: false */
/*jslint onevar: false */
// Released under the MIT/X11 license
// http://www.opensource.org/licenses/mit-license.php
"use strict";
// ==============================================================
var {Cc,Ci} = require("chrome");
// just for JSLINT var Cc, Ci = {};
var promptTitle = "Bugzilla Triage Script";

/**
 * shows the text in a simple window
 *
 * @return none
 */
exports.alert = function alert(msg) {
    var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
        .getService(Ci.nsIPromptService);
    prompts.alert(null, promptTitle, msg);
};

/**
 * general prompts for a string method
 *
 * @return String with the password
 */
exports.prompt = function prompt(prompt, defaultValue) {
    var stringValue = {
        value: defaultValue ? defaultValue : ""
    };

    var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
            .getService(Ci.nsIPromptService);
    var result = prompts.prompt(null, promptTitle, prompt,
            stringValue, null, {});
    if (result) {
        return stringValue.value;
    } else {
        return null;
    }
};

/**
 * returns password with a special password
 *
 * @return String with the password
 */
exports.promptPassword = function promptPassword(prompt) {
    if (!prompt) { // either undefined or null
        prompt = "Enter password:";
    }
    var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
            .getService(Ci.nsIPromptService);
    var password = {
        value : ""
    }; // default the password to pass
    var check = {
        value : true
    }; // default the checkbox to true
    var result = prompts.promptPassword(null, "Bugzilla Triage Script", prompt,
            password, null, check);
    // result is true if OK was pressed, false if cancel was pressed.
    // password.value is set if OK was pressed.
    // The checkbox is not displayed.
    if (result) {
        return password.value ? password.value : null;
    } else {
        return null;
    }
};

/**
 * YES/NO prompt; returns boolean or null (for Cancel)
 * https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIPromptService
 */
exports.promptYesNoCancel = function promptOKNoCancel(prompt) {
    if (!prompt) { // either undefined or null
        throw new Error("Prompt is required!");
    }
    var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
            .getService(Ci.nsIPromptService);

    var result = prompts.confirmEx(null, "Bugzilla Triage Script", prompt,
            prompts.STD_YES_NO_BUTTONS, null, null, null, null, {});
    if (result === 0) {
        return true;
    } else if (result === 1) {
        return false;
    } else {
        return null;
    }
};

/**
 *
 * documentation is https://developer.mozilla.org/en/NsIFilePicker
 */
exports.promptFileOpenPicker = function promptFilePicker (win) {
    var fp = Cc["@mozilla.org/filepicker;1"]
        .createInstance(Ci.nsIFilePicker);
    fp.init(win, "JSON File Open", Ci.nsIFilePicker.modeOpen);
    fp.appendFilter("JSON files", "*.json");
    fp.appendFilters(Ci.nsIFilePicker.filterAll);
    fp.filterIndex = 0;
    var res = fp.show();

    if (res === Ci.nsIFilePicker.returnOK ||
        res === Ci.nsIFilePicker.returnReplace ) {
            return fp.file.path
    }
    return null;
};

/**
 * Show a system notification with the given message
 *
 * @param msg String or Object with a message to be shown in a default
 * notification or object with properties title, icon, and body
 * @param callback Function called when user clicks on the notification (optional)
 * @return None
 */
exports.notification = function notification(msg) {
    var body = msg;
    var title = "Bugzilla Notification";
    var icon = null;
    var textClickable = false;

    if (typeof(msg) === "object") {
        body = msg.body;
        if ("title" in msg) {
            title = msg.title;
        }
        if ("icon" in msg) {
            icon = msg.icon;
        }
    }
    try {
        var classObj = Cc["@mozilla.org/alerts-service;1"];
        var alertService = classObj.getService(Ci.nsIAlertsService);

        alertService.showAlertNotification(icon, title, body);
        return true;
    } catch (e) {
        console.error("Unable to display notification:", msg);
        return false;
    }
};