forked from pixel2/jQuery-Easy-Confirm-Dialog-plugin
/
jquery.easy-confirm-dialog.js
155 lines (130 loc) · 5.05 KB
/
jquery.easy-confirm-dialog.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/**
* jQuery Easy Confirm Dialog plugin 1.2
*
* Copyright (c) 2010 Emil Janitzek (http://projectshadowlight.org)
* Based on Confirm 1.3 by Nadia Alramli (http://nadiana.com/)
*
* Samples and instructions at:
* http://projectshadowlight.org/jquery-easy-confirm-dialog/
*
* This script is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*/
(function($) {
$.easyconfirm = {};
$.easyconfirm.locales = {};
$.easyconfirm.locales.enUS = {
title: 'Are you sure?',
text: 'Are you sure that you want to perform this action?',
button: ['Cancel', 'Confirm'],
closeText: 'close'
};
$.easyconfirm.locales.svSE = {
title: 'Är du säker?',
text: 'Är du säker på att du vill genomföra denna åtgärden?',
button: ['Avbryt', 'Bekräfta'],
closeText: 'stäng'
};
$.fn.easyconfirm = function(options) {
var _attr = $.fn.attr;
$.fn.attr = function(attr, value) {
// Let the original attr() do its work.
var returned = _attr.apply(this, arguments);
// Fix for jQuery 1.6+
if (attr == 'title' && returned === undefined)
returned = '';
return returned;
};
var options = jQuery.extend({
eventType: 'click',
icon: 'help'
}, options);
var locale = jQuery.extend({}, $.easyconfirm.locales.enUS, options.locale);
// Shortcut to eventType.
var type = options.eventType;
return this.each(function() {
var target = this;
var $target = jQuery(target);
// If no events present then and if there is a valid url, then trigger url change
var urlClick = function() {
if (target.href) {
var length = String(target.href).length;
if (target.href.substring(length - 1, length) != '#')
document.location = target.href;
}
};
// If any handlers where bind before triggering, lets save them and add them later
var saveHandlers = function() {
var events = jQuery.data(target, 'events');
if (events) {
target._handlers = new Array();
$.each(events[type], function(){
target._handlers.push(this);
});
$target.unbind(type);
}
};
// Re-bind old events
var rebindHandlers = function() {
if (target._handlers !== undefined) {
jQuery.each(target._handlers, function() {
$target.bind(type, this);
});
}
};
if ($target.attr('title') !== null && $target.attr('title').length > 0)
locale.text = $target.attr('title');
var dialog = (options.dialog === undefined || typeof(options.dialog) != 'object') ?
$('<div class="dialog confirm">' + locale.text + '</div>') :
options.dialog;
var buttons = {};
buttons[locale.button[1]] = function() {
// Unbind overriding handler and let default actions pass through
$target.unbind(type, handler);
// Close dialog
$(dialog).dialog("close");
// Check if there is any events on the target
if (jQuery.data(target, 'events')) {
// Trigger click event.
$target.click();
}
else {
// No event trigger new url
urlClick();
}
init();
};
buttons[locale.button[0]] = function() {
$(dialog).dialog("close");
};
$(dialog).dialog({
autoOpen: false,
resizable: false,
draggable: true,
closeOnEscape: true,
width: 'auto',
minHeight: 120,
maxHeight: 200,
buttons: buttons,
title: locale.title,
closeText: locale.closeText,
modal: true
});
// Handler that will override all other actions
var handler = function(event) {
$(dialog).dialog('open');
event.stopImmediatePropagation();
event.preventDefault();
return false;
};
var init = function() {
saveHandlers();
$target.bind(type, handler);
rebindHandlers();
};
init();
});
};
})(jQuery);