kpsul/static/grappelli_old/js/actions.min.js
2016-05-21 23:57:36 +02:00

135 lines
5.3 KiB
JavaScript

/**
* GRAPPELLI ACTIONS.JS
* minor modifications compared with the original js
*
*/
(function($) {
$.fn.actions = function(opts) {
var options = $.extend({}, $.fn.actions.defaults, opts);
var actionCheckboxes = $(this);
var list_editable_changed = false;
checker = function(checked) {
if (checked) {
showQuestion();
$(actionCheckboxes).attr("checked", true)
.parent().parent().toggleClass(options.selectedClass, checked);
} else {
reset();
$(actionCheckboxes).attr("checked", false)
.parent().parent().toggleClass(options.selectedClass, checked);
}
};
updateCounter = function() {
var sel = $(actionCheckboxes).filter(":checked").length;
$(options.counterContainer).html(interpolate(
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
sel: sel,
cnt: _actions_icnt
}, true));
$(options.allToggle).attr("checked", function() {
if (sel == actionCheckboxes.length) {
value = true;
showQuestion();
} else {
value = false;
clearAcross();
}
return value;
});
};
showQuestion = function() {
$(options.acrossClears).hide();
$(options.acrossQuestions).show();
$(options.allContainer).hide();
};
showClear = function() {
$(options.acrossClears).show();
$(options.acrossQuestions).hide();
$(options.actionContainer).toggleClass(options.selectedClass);
$(options.allContainer).show();
$(options.counterContainer).hide();
};
reset = function() {
$(options.acrossClears).hide();
$(options.acrossQuestions).hide();
$(options.allContainer).hide();
$(options.counterContainer).show();
};
clearAcross = function() {
reset();
$(options.acrossInput).val(0);
$(options.actionContainer).removeClass(options.selectedClass);
};
// Show counter by default
$(options.counterContainer).show();
// Check state of checkboxes and reinit state if needed
$(this).filter(":checked").each(function(i) {
$(this).parent().parent().toggleClass(options.selectedClass);
updateCounter();
if ($(options.acrossInput).val() == 1) {
showClear();
}
});
$(options.allToggle).show().click(function() {
checker($(this).attr("checked"));
updateCounter();
});
$("div.changelist-actions li.question a").click(function(event) {
event.preventDefault();
$(options.acrossInput).val(1);
showClear();
});
$("div.changelist-actions li.clear-selection a").click(function(event) {
event.preventDefault();
$(options.allToggle).attr("checked", false);
clearAcross();
checker(0);
updateCounter();
});
lastChecked = null;
$(actionCheckboxes).click(function(event) {
if (!event) { var event = window.event; }
var target = event.target ? event.target : event.srcElement;
if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey === true) {
var inrange = false;
$(lastChecked).attr("checked", target.checked)
.parent().parent().toggleClass(options.selectedClass, target.checked);
$(actionCheckboxes).each(function() {
if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
inrange = (inrange) ? false : true;
}
if (inrange) {
$(this).attr("checked", target.checked)
.parent().parent().toggleClass(options.selectedClass, target.checked);
}
});
}
$(target).parent().parent().toggleClass(options.selectedClass, target.checked);
lastChecked = target;
updateCounter();
});
// GRAPPELLI CUSTOM: REMOVED ALL JS-CONFIRMS
// TRUSTED EDITORS SHOULD KNOW WHAT TO DO
// GRAPPELLI CUSTOM: submit on select
$(options.actionSelect).attr("autocomplete", "off").change(function(evt){
$(this).parents("form").submit();
});
};
/* Setup plugin defaults */
$.fn.actions.defaults = {
actionContainer: "div.changelist-actions",
counterContainer: "li.action-counter span.action-counter",
allContainer: "div.changelist-actions li.all",
acrossInput: "div.changelist-actions input.select-across",
acrossQuestions: "div.changelist-actions li.question",
acrossClears: "div.changelist-actions li.clear-selection",
allToggle: "#action-toggle",
selectedClass: "selected",
actionSelect: "div.changelist-actions select"
};
})(django.jQuery);