kpsul/static/grappelli/js/jquery.grp_collapsible_group.js
2016-05-21 23:57:36 +02:00

54 lines
No EOL
1.9 KiB
JavaScript

/**
* GRAPPELLI GROUP COLLAPSIBLES
* handles open/closing of all elements
* with tabular- and stacked-inlines.
*/
(function($) {
$.fn.grp_collapsible_group = function(options){
var defaults = {
open_handler_slctr: ".grp-open-handler",
close_handler_slctr: ".grp-close-handler",
collapsible_container_slctr: ".grp-collapse",
closed_css: "grp-closed",
open_css: "grp-open",
on_init: function() {},
on_open: function() {},
on_close: function() {}
};
options = $.extend(defaults, options);
return this.each(function() {
_initialize($(this), options);
});
};
var _initialize = function(elem, options) {
options.on_init(elem, options);
_register_handlers(elem, options);
};
var _register_handlers = function(elem, options) {
_register_open_handler(elem, options);
_register_close_handler(elem, options);
};
var _register_open_handler = function(elem, options) {
elem.find(options.open_handler_slctr).each(function() {
$(this).click(function() {
options.on_open(elem, options);
elem.find(options.collapsible_container_slctr)
.removeClass(options.closed_css)
.addClass(options.open_css);
elem.removeClass(options.closed_css)
.addClass(options.open_css);
});
});
};
var _register_close_handler = function(elem, options) {
elem.find(options.close_handler_slctr).each(function() {
$(this).click(function() {
options.on_close(elem, options);
elem.find(options.collapsible_container_slctr)
.removeClass(options.open_css)
.addClass(options.closed_css);
});
});
};
})(grp.jQuery);