aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorCesar G <prototech91@gmail.com>2014-09-14 14:54:08 -0700
committerCesar G <prototech91@gmail.com>2014-09-14 14:54:08 -0700
commit6d80770ba47bc232c422a82915863706252f052e (patch)
tree3ef87ac9100a213e822fe9a350ccc75fede2cd64 /phpBB
parenta45df1d8407082c11a61de36b4408e62049062a0 (diff)
downloadforums-6d80770ba47bc232c422a82915863706252f052e.tar
forums-6d80770ba47bc232c422a82915863706252f052e.tar.gz
forums-6d80770ba47bc232c422a82915863706252f052e.tar.bz2
forums-6d80770ba47bc232c422a82915863706252f052e.tar.xz
forums-6d80770ba47bc232c422a82915863706252f052e.zip
[ticket/13018] Remove duplicate logic in confirm box and alert box handling.
This ensures a more consistent handling of the various closing/opening actions and fixes some bugs where certain event handlers are not turned off in certain instances. PHPBB3-13018
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/assets/javascript/core.js158
1 files changed, 73 insertions, 85 deletions
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js
index 802b4dd7c8..77f81358c8 100644
--- a/phpBB/assets/javascript/core.js
+++ b/phpBB/assets/javascript/core.js
@@ -79,40 +79,38 @@ phpbb.alert = function(title, msg, fadedark) {
$alert.find('.alert_title').html(title);
$alert.find('.alert_text').html(msg);
- if (!$dark.is(':visible')) {
- $dark.fadeIn(phpbb.alertTime);
- }
-
- $alert.on('click', function(e) {
- e.stopPropagation();
+ $(document).on('keydown.phpbb.alert', function(e) {
+ if (e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) {
+ closeBox(true, e, true);
+ }
});
- $dark.one('click', function(e) {
- var fade;
- $alert.find('.alert_close').off('click');
- fade = (typeof fadedark !== 'undefined' && !fadedark) ? $alert : $dark;
- fade.fadeOut(phpbb.alertTime, function() {
- $alert.hide();
- });
+ $dark.one('click', function(e) {
+ closeBox(true, e, true);
+ });
- e.preventDefault();
- e.stopPropagation();
+ $alert.find('.alert_close').one('click', function(e) {
+ closeBox(true, e, false);
});
- $(document).keydown(function(e) {
- if ((e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) && $dark.is(':visible')) {
- $dark.trigger('click');
+ var closeBox = function(fadedark, event, stopPropagation) {
+ phpbb.alert.close($alert, fadedark, event, stopPropagation);
+ };
- e.preventDefault();
- e.stopPropagation();
- }
- });
+ phpbb.alert.open($alert);
- $alert.find('.alert_close').one('click', function(e) {
- $dark.trigger('click');
+ return $alert;
+};
- e.preventDefault();
- });
+/**
+* Handler for opening an alert box.
+*
+* @param jQuery $alert jQuery object.
+*/
+phpbb.alert.open = function($alert) {
+ if (!$dark.is(':visible')) {
+ $dark.fadeIn(phpbb.alertTime);
+ }
if ($loadingIndicator.is(':visible')) {
$loadingIndicator.fadeOut(phpbb.alertTime, function() {
@@ -128,7 +126,35 @@ phpbb.alert = function(title, msg, fadedark) {
$dark.fadeIn(phpbb.alertTime);
}
- return $alert;
+ $alert.on('click', function(e) {
+ e.stopPropagation();
+ });
+};
+
+/**
+* Handler for closing an alert box.
+*
+* @param jQuery $alert jQuery object.
+* @param bool fadedark Whether to remove dark background.
+* @param object event Event object.
+* @param bool stopPropagation Whether to stop event's propagation.
+*/
+phpbb.alert.close = function($alert, fadedark, event, stopPropagation) {
+ var $fade = (fadedark) ? $dark : $alert;
+
+ $fade.fadeOut(phpbb.alertTime, function() {
+ $alert.hide();
+ });
+
+ $alert.find('.alert_close').off('click');
+ $(document).off('keydown.phpbb.alert');
+
+ if (event) {
+ event.preventDefault();
+ if (stopPropagation) {
+ event.stopPropagation();
+ }
+ }
};
/**
@@ -147,77 +173,39 @@ phpbb.alert = function(title, msg, fadedark) {
phpbb.confirm = function(msg, callback, fadedark) {
var $confirmDiv = $('#phpbb_confirm');
$confirmDiv.find('.alert_text').html(msg);
+ fadedark = (typeof fadedark === 'undefined') ? true : fadedark;
- if (!$dark.is(':visible')) {
- $dark.fadeIn(phpbb.alertTime);
- }
-
- $confirmDiv.on('click', function(e) {
- e.stopPropagation();
- });
+ $(document).on('keydown.phpbb.alert', function(e) {
+ if (e.keyCode === keymap.ENTER || e.keyCode === keymap.ESC) {
+ var name = (e.keyCode === keymap.ENTER) ? 'confirm' : 'cancel';
- var clickHandler = function(e) {
- var res = this.name === 'confirm';
- var $fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? $confirmDiv : $dark;
- $fade.fadeOut(phpbb.alertTime, function() {
- $confirmDiv.hide();
- });
- $confirmDiv.find('input[type="button"]').off('click', clickHandler);
- callback(res);
-
- if (e) {
+ $('input[name="' + name + '"]').trigger('click');
e.preventDefault();
e.stopPropagation();
}
- };
- $confirmDiv.find('input[type="button"]').one('click', clickHandler);
-
- $dark.one('click', function(e) {
- $confirmDiv.find('.alert_close').off('click');
- $dark.fadeOut(phpbb.alertTime, function() {
- $confirmDiv.hide();
- });
- callback(false);
+ });
- e.preventDefault();
- e.stopPropagation();
+ $confirmDiv.find('input[type="button"]').one('click.phpbb.confirmbox', function(e) {
+ var confirmed = this.name === 'confirm',
+ fadedark = fadedark || !confirmed;
+ closeBox(fadedark, confirmed, e, true);
});
- $(document).on('keydown', function(e) {
- if (e.keyCode === keymap.ENTER) {
- $('input[name="confirm"]').trigger('click');
- e.preventDefault();
- e.stopPropagation();
- } else if (e.keyCode === keymap.ESC) {
- $('input[name="cancel"]').trigger('click');
- e.preventDefault();
- e.stopPropagation();
- }
+ $dark.one('click', function(e) {
+ closeBox(true, false, e, true);
});
$confirmDiv.find('.alert_close').one('click', function(e) {
- var $fade = (typeof fadedark !== 'undefined' && fadedark) ? $confirmDiv : $dark;
- $fade.fadeOut(phpbb.alertTime, function() {
- $confirmDiv.hide();
- });
- callback(false);
-
- e.preventDefault();
+ closeBox(true, false, e, false);
});
- if ($loadingIndicator.is(':visible')) {
- $loadingIndicator.fadeOut(phpbb.alertTime, function() {
- $dark.append($confirmDiv);
- $confirmDiv.fadeIn(phpbb.alertTime);
- });
- } else if ($dark.is(':visible')) {
- $dark.append($confirmDiv);
- $confirmDiv.fadeIn(phpbb.alertTime);
- } else {
- $dark.append($confirmDiv);
- $confirmDiv.show();
- $dark.fadeIn(phpbb.alertTime);
- }
+ var closeBox = function(fadedark, confirmed, event, stopPropagation) {
+ $confirmDiv.find('input[type="button"]').off('click.phpbb.confirmbox');
+ callback(confirmed);
+ phpbb.alert.close($confirmDiv, fadedark, event, stopPropagation);
+ };
+
+ phpbb.alert.open($confirmDiv);
return $confirmDiv;
};