Project

General

Profile

Statistics
| Branch: | Revision:

root / env / lib / python2.7 / site-packages / django / contrib / admin / static / admin / js / actions.js @ 1a305335

History | View | Annotate | Download (4.63 KB)

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);