c9-core/plugins/c9.ide.dialog.common/question.js

144 wiersze
5.2 KiB
JavaScript

define(function(require, module, exports) {
main.consumes = ["Dialog", "util"];
main.provides = ["dialog.question"];
return main;
function main(options, imports, register) {
var Dialog = imports.Dialog;
var util = imports.util;
/***** Initialization *****/
var plugin = new Dialog("Ajax.org", main.consumes, {
name: "dialog.question",
allowClose: false,
modal: true,
elements: [
{ type: "checkbox", id: "dontask", caption: "Don't ask again", visible: false },
{ type: "button", id: "yestoall", caption: "Yes to All", color: "green", visible: false },
{ type: "button", id: "notoall", caption: "No to All", color: "red", "default": true, visible: false },
{ type: "filler" },
{ type: "button", id: "yes", caption: "Yes", color: "green", "default": true, hotkey: "Y" },
{ type: "button", id: "no", caption: "No", color: "red", hotkey: "N" },
{ type: "button", id: "cancel", caption: "Cancel", visible: false, hotkey: "ESC" }
]
});
/***** Methods *****/
function show(title, header, msg, onYes, onNo, options) {
if (onYes && typeof onYes !== "function")
return show(title, header, msg, null, null, onYes);
if (onNo && typeof onNo !== "function")
return show(title, header, msg, onYes, null, onNo);
if (!options)
options = {};
return plugin.queue(function() {
var all = options.all;
var cancel = options.cancel;
var showDontAsk = options.showDontAsk;
var metadata = options.metadata;
plugin.title = title;
plugin.heading = options && options.isHTML ? header : util.escapeXml(header);
plugin.body = options && options.isHTML ? msg : util.escapeXml(msg).replace(/\n/g, "<br>");
plugin.getElement("yes").setCaption(options.yes || "Yes");
plugin.getElement("no").setCaption(options.no || "No");
plugin.getElement("yestoall").setCaption(options.yestoall || "Yes to All");
plugin.getElement("notoall").setCaption(options.notoall || "No to All");
plugin.allowClose = cancel;
var gotYesNo = false;
plugin.once("hide", function() {
!gotYesNo && cancel && onNo && onNo(false, true, metadata);
});
plugin.update([
{ id: "cancel", visible: cancel && !options.notoall, onclick: function() { plugin.hide(); } },
{ id: "dontask", visible: showDontAsk },
{ id: "yestoall", visible: all, onclick: function() {
gotYesNo = true;
plugin.hide();
onYes && onYes(true, metadata);
} },
{ id: "notoall", visible: all, onclick: function() {
gotYesNo = true;
plugin.hide();
onNo && onNo(true, false, metadata);
} },
{ id: "yes", onclick: function() {
gotYesNo = true;
plugin.hide();
onYes && onYes(false, metadata);
} },
{ id: "no", onclick: function() {
gotYesNo = true;
plugin.hide();
onNo && onNo(false, false, metadata);
} }
]);
}, options.queue === false);
}
/***** Register *****/
/**
*
*/
plugin.freezePublicAPI({
/**
*
*/
get all() { return undefined; },
set all(value) {
plugin.update([
{ id: "yestoall", visible: value },
{ id: "notoall", visible: value }
]);
},
/**
*
*/
get cancel() { return undefined; },
set cancel(value) {
plugin.allowClose = value;
plugin.update([
{ id: "cancel", visible: value }
]);
},
/**
*
*/
get showDontAsk() {
return plugin.getElement("dontask").visible;
},
set showDontAsk(value) {
plugin.update([
{ id: "dontask", visible: value }
]);
},
/**
* @readonly
*/
get dontAsk() {
return plugin.getElement("dontask").value;
},
/**
*
*/
show: show
});
register("", {
"dialog.question": plugin
});
}
});