build
[semainetech_django.git] / project / media / django / js / actions.js
1 (function($) {
2 $.fn.actions = function(opts) {
3 var options = $.extend({}, $.fn.actions.defaults, opts);
4 var actionCheckboxes = $(this);
5 var list_editable_changed = false;
6 checker = function(checked) {
7 if (checked) {
8 showQuestion();
9 } else {
10 reset();
11 }
12 $(actionCheckboxes).attr("checked", checked)
13 .parent().parent().toggleClass(options.selectedClass, checked);
14 }
15 updateCounter = function() {
16 var sel = $(actionCheckboxes).filter(":checked").length;
17 $(options.counterContainer).html(interpolate(
18 ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
19 sel: sel,
20 cnt: _actions_icnt
21 }, true));
22 $(options.allToggle).attr("checked", function() {
23 if (sel == actionCheckboxes.length) {
24 value = true;
25 showQuestion();
26 } else {
27 value = false;
28 clearAcross();
29 }
30 return value;
31 });
32 }
33 showQuestion = function() {
34 $(options.acrossClears).hide();
35 $(options.acrossQuestions).show();
36 $(options.allContainer).hide();
37 }
38 showClear = function() {
39 $(options.acrossClears).show();
40 $(options.acrossQuestions).hide();
41 $(options.actionContainer).toggleClass(options.selectedClass);
42 $(options.allContainer).show();
43 $(options.counterContainer).hide();
44 }
45 reset = function() {
46 $(options.acrossClears).hide();
47 $(options.acrossQuestions).hide();
48 $(options.allContainer).hide();
49 $(options.counterContainer).show();
50 }
51 clearAcross = function() {
52 reset();
53 $(options.acrossInput).val(0);
54 $(options.actionContainer).removeClass(options.selectedClass);
55 }
56 // Show counter by default
57 $(options.counterContainer).show();
58 // Check state of checkboxes and reinit state if needed
59 $(this).filter(":checked").each(function(i) {
60 $(this).parent().parent().toggleClass(options.selectedClass);
61 updateCounter();
62 if ($(options.acrossInput).val() == 1) {
63 showClear();
64 }
65 });
66 $(options.allToggle).show().click(function() {
67 checker($(this).attr("checked"));
68 updateCounter();
69 });
70 $("div.actions span.question a").click(function(event) {
71 event.preventDefault();
72 $(options.acrossInput).val(1);
73 showClear();
74 });
75 $("div.actions span.clear a").click(function(event) {
76 event.preventDefault();
77 $(options.allToggle).attr("checked", false);
78 clearAcross();
79 checker(0);
80 updateCounter();
81 });
82 lastChecked = null;
83 $(actionCheckboxes).click(function(event) {
84 if (!event) { var event = window.event; }
85 var target = event.target ? event.target : event.srcElement;
86 if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey == true) {
87 var inrange = false;
88 $(lastChecked).attr("checked", target.checked)
89 .parent().parent().toggleClass(options.selectedClass, target.checked);
90 $(actionCheckboxes).each(function() {
91 if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
92 inrange = (inrange) ? false : true;
93 }
94 if (inrange) {
95 $(this).attr("checked", target.checked)
96 .parent().parent().toggleClass(options.selectedClass, target.checked);
97 }
98 });
99 }
100 $(target).parent().parent().toggleClass(options.selectedClass, target.checked);
101 lastChecked = target;
102 updateCounter();
103 });
104 $('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() {
105 list_editable_changed = true;
106 });
107 $('form#changelist-form button[name="index"]').click(function(event) {
108 if (list_editable_changed) {
109 return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
110 }
111 });
112 $('form#changelist-form input[name="_save"]').click(function(event) {
113 var action_changed = false;
114 $('div.actions select option:selected').each(function() {
115 if ($(this).val()) {
116 action_changed = true;
117 }
118 });
119 if (action_changed) {
120 if (list_editable_changed) {
121 return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action."));
122 } else {
123 return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."));
124 }
125 }
126 });
127 }
128 /* Setup plugin defaults */
129 $.fn.actions.defaults = {
130 actionContainer: "div.actions",
131 counterContainer: "span.action-counter",
132 allContainer: "div.actions span.all",
133 acrossInput: "div.actions input.select-across",
134 acrossQuestions: "div.actions span.question",
135 acrossClears: "div.actions span.clear",
136 allToggle: "#action-toggle",
137 selectedClass: "selected"
138 }
139 })(django.jQuery);