aboutsummaryrefslogtreecommitdiffstats
path: root/library/bootstrap/js/bootbox.js
diff options
context:
space:
mode:
Diffstat (limited to 'library/bootstrap/js/bootbox.js')
-rw-r--r--library/bootstrap/js/bootbox.js133
1 files changed, 112 insertions, 21 deletions
diff --git a/library/bootstrap/js/bootbox.js b/library/bootstrap/js/bootbox.js
index a002e4a35..3e8312a85 100644
--- a/library/bootstrap/js/bootbox.js
+++ b/library/bootstrap/js/bootbox.js
@@ -1,5 +1,5 @@
/**
- * bootbox.js [v4.3.0]
+ * bootbox.js [v4.4.0]
*
* http://bootboxjs.com/license.txt
*/
@@ -71,8 +71,8 @@
var defaults = {
// default language
locale: "en",
- // show backdrop or not
- backdrop: true,
+ // show backdrop or not. Default to static so user has to interact with dialog
+ backdrop: "static",
// animate the modal in/out
animate: true,
// additional class string applied to the top level dialog
@@ -105,7 +105,7 @@
// so, if the callback can be invoked and it *explicitly returns false*
// then we'll set a flag to keep the dialog active...
- var preserveDialog = $.isFunction(callback) && callback(e) === false;
+ var preserveDialog = $.isFunction(callback) && callback.call(dialog, e) === false;
// ... otherwise we'll bin it
if (!preserveDialog) {
@@ -148,11 +148,6 @@
options.buttons = {};
}
- // we only support Bootstrap's "static" and false backdrop args
- // supporting true would mean you could dismiss the dialog without
- // explicitly interacting with it
- options.backdrop = options.backdrop ? "static" : false;
-
buttons = options.buttons;
total = getKeyLength(buttons);
@@ -312,7 +307,7 @@
*/
options.buttons.ok.callback = options.onEscape = function() {
if ($.isFunction(options.callback)) {
- return options.callback();
+ return options.callback.call(this);
}
return true;
};
@@ -329,11 +324,11 @@
* overrides; undo anything the user tried to set they shouldn't have
*/
options.buttons.cancel.callback = options.onEscape = function() {
- return options.callback(false);
+ return options.callback.call(this, false);
};
options.buttons.confirm.callback = function() {
- return options.callback(true);
+ return options.callback.call(this, true);
};
// confirm specific validation
@@ -387,7 +382,7 @@
options.message = form;
options.buttons.cancel.callback = options.onEscape = function() {
- return options.callback(null);
+ return options.callback.call(this, null);
};
options.buttons.confirm.callback = function() {
@@ -418,7 +413,7 @@
break;
}
- return options.callback(value);
+ return options.callback.call(this, value);
};
options.show = false;
@@ -454,6 +449,10 @@
var groups = {};
inputOptions = options.inputOptions || [];
+ if (!$.isArray(inputOptions)) {
+ throw new Error("Please pass an array of input options");
+ }
+
if (!inputOptions.length) {
throw new Error("prompt with select requires options");
}
@@ -467,7 +466,6 @@
throw new Error("given options in wrong format");
}
-
// ... but override that element if this option sits in a group
if (option.group) {
@@ -525,14 +523,20 @@
break;
}
+ // @TODO provide an attributes option instead
+ // and simply map that as keys: vals
if (options.placeholder) {
input.attr("placeholder", options.placeholder);
}
- if(options.pattern){
+ if (options.pattern) {
input.attr("pattern", options.pattern);
}
+ if (options.maxlength) {
+ input.attr("maxlength", options.maxlength);
+ }
+
// now place it in our form
form.append(input);
@@ -552,6 +556,8 @@
// ...and replace it with one focusing our input, if possible
dialog.on("shown.bs.modal", function() {
+ // need the closure here since input isn't
+ // an object otherwise
input.focus();
});
@@ -574,6 +580,14 @@
onEscape: options.onEscape
};
+ if ($.fn.modal === undefined) {
+ throw new Error(
+ "$.fn.modal is not defined; please double check you have included " +
+ "the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ " +
+ "for more details."
+ );
+ }
+
each(buttons, function(key, button) {
// @TODO I don't like this string appending to itself; bit dirty. Needs reworking
@@ -595,9 +609,7 @@
if (options.size === "large") {
innerDialog.addClass("modal-lg");
- }
-
- if (options.size === "small") {
+ } else if (options.size === "small") {
innerDialog.addClass("modal-sm");
}
@@ -661,6 +673,30 @@
* respective triggers
*/
+ if (options.backdrop !== "static") {
+ // A boolean true/false according to the Bootstrap docs
+ // should show a dialog the user can dismiss by clicking on
+ // the background.
+ // We always only ever pass static/false to the actual
+ // $.modal function because with `true` we can't trap
+ // this event (the .modal-backdrop swallows it)
+ // However, we still want to sort of respect true
+ // and invoke the escape mechanism instead
+ dialog.on("click.dismiss.bs.modal", function(e) {
+ // @NOTE: the target varies in >= 3.3.x releases since the modal backdrop
+ // moved *inside* the outer dialog rather than *alongside* it
+ if (dialog.children(".modal-backdrop").length) {
+ e.currentTarget = dialog.children(".modal-backdrop").get(0);
+ }
+
+ if (e.target !== e.currentTarget) {
+ return;
+ }
+
+ dialog.trigger("escape.close.bb");
+ });
+ }
+
dialog.on("escape.close.bb", function(e) {
if (callbacks.onEscape) {
processCallback(e, dialog, callbacks.onEscape);
@@ -676,7 +712,6 @@
var callbackKey = $(this).data("bb-handler");
processCallback(e, dialog, callbacks[callbackKey]);
-
});
dialog.on("click", ".bootbox-close-button", function(e) {
@@ -700,7 +735,7 @@
$(options.container).append(dialog);
dialog.modal({
- backdrop: options.backdrop,
+ backdrop: options.backdrop ? "static": false,
keyboard: false,
show: false
});
@@ -759,6 +794,11 @@
* unlikely to be required. If this gets too large it can be split out into separate JS files.
*/
var locales = {
+ bg_BG : {
+ OK : "Ок",
+ CANCEL : "Отказ",
+ CONFIRM : "Потвърждавам"
+ },
br : {
OK : "OK",
CANCEL : "Cancelar",
@@ -799,6 +839,11 @@
CANCEL : "Katkesta",
CONFIRM : "OK"
},
+ fa : {
+ OK : "قبول",
+ CANCEL : "لغو",
+ CONFIRM : "تایید"
+ },
fi : {
OK : "OK",
CANCEL : "Peruuta",
@@ -814,6 +859,16 @@
CANCEL : "ביטול",
CONFIRM : "אישור"
},
+ hu : {
+ OK : "OK",
+ CANCEL : "Mégsem",
+ CONFIRM : "Megerősít"
+ },
+ hr : {
+ OK : "OK",
+ CANCEL : "Odustani",
+ CONFIRM : "Potvrdi"
+ },
id : {
OK : "OK",
CANCEL : "Batal",
@@ -864,11 +919,21 @@
CANCEL : "Отмена",
CONFIRM : "Применить"
},
+ sq : {
+ OK : "OK",
+ CANCEL : "Anulo",
+ CONFIRM : "Prano"
+ },
sv : {
OK : "OK",
CANCEL : "Avbryt",
CONFIRM : "OK"
},
+ th : {
+ OK : "ตกลง",
+ CANCEL : "ยกเลิก",
+ CONFIRM : "ยืนยัน"
+ },
tr : {
OK : "Tamam",
CANCEL : "İptal",
@@ -886,6 +951,32 @@
}
};
+ exports.addLocale = function(name, values) {
+ $.each(["OK", "CANCEL", "CONFIRM"], function(_, v) {
+ if (!values[v]) {
+ throw new Error("Please supply a translation for '" + v + "'");
+ }
+ });
+
+ locales[name] = {
+ OK: values.OK,
+ CANCEL: values.CANCEL,
+ CONFIRM: values.CONFIRM
+ };
+
+ return exports;
+ };
+
+ exports.removeLocale = function(name) {
+ delete locales[name];
+
+ return exports;
+ };
+
+ exports.setLocale = function(name) {
+ return exports.setDefaults("locale", name);
+ };
+
exports.init = function(_$) {
return init(_$ || $);
};