var grappelli = {};
(function($) {
grappelli.collapseHandlerClass = "collapse-handler";
grappelli.collapsedBlockedClass = "collapse-blocked";
grappelli.openAllClass = "open-handler";
grappelli.closeAllClass = "close-handler";
grappelli.collapseClass = "collapse";
grappelli.closedClass = "closed";
grappelli.openClass = "open";
grappelli.collapseHandler = function() {
if (!$("body").hasClass(grappelli.collapsedBlockedClass)) {
$(this).parents("." + grappelli.collapseClass).first()
.toggleClass(grappelli.closedClass)
.toggleClass(grappelli.openClass);
}
return false;
};
grappelli.addCollapseHandlerClass = function() {
$("." + this.collapseClass).each(function() {
var node = $(this).children().first();
if (node.is("h2") || node.is("h3") || node.is("h4")) {
node.addClass(grappelli.collapseHandlerClass)
}
});
};
grappelli.registerCollapseHandler = function() {
$("." + this.collapseHandlerClass).click(this.collapseHandler);
};
grappelli.registerOpenAllHandler = function() {
$("." + this.openAllClass).click(this.openAllHandler);
};
/*
* Open all
*/
grappelli.openAllHandler = function() {
// get .group and not .collapse because it doesn't necessarily have .collapse
$(this).parents(".group")
.removeClass(grappelli.closedClass)
.addClass(grappelli.openClass)
.find("." + grappelli.collapseClass)
.removeClass(grappelli.closedClass)
.addClass(grappelli.openClass);
};
grappelli.registerCloseAllHandler = function() {
$("." + this.closeAllClass).click(this.closeAllHandler);
};
/*
* Close all
*/
grappelli.closeAllHandler = function() {
// get .group and not .collapse because it doesn't necessarily have .collapse
$(this).parents(".group")
.find("." + grappelli.collapseClass)
.removeClass(grappelli.openClass)
.addClass(grappelli.closedClass);
};
grappelli.initCollapsible = function() {
grappelli.addCollapseHandlerClass();
grappelli.registerCollapseHandler();
grappelli.registerOpenAllHandler();
grappelli.registerCloseAllHandler();
$("." + grappelli.collapseClass + " ul.errorlist").each(function() {
$(this).parents("." + grappelli.collapseClass)
.removeClass(grappelli.closedClass)
.addClass(grappelli.openClass);
});
};
grappelli.getFormat = function(type) {
if (type == "date") {
var format = DATE_FORMAT.toLowerCase().replace(/%\w/g, function(str) {
str = str.replace(/%/, '');
return str + str;
});
}
return format;
}
grappelli.initDateAndTimePicker = function() {
var options = {
//appendText: '(mm/dd/yyyy)',
showOn: 'button',
buttonImageOnly: false,
buttonText: '',
dateFormat: grappelli.getFormat('date'),
showAnim: ''
};
var dateFields = $("input[class*='vDateField']:not([id*='__prefix__'])");
dateFields.datepicker(options);
if (typeof IS_POPUP != "undefined" && IS_POPUP) {
dateFields.datepicker('disable');
}
$("input[class*='vTimeField']:not([id*='__prefix__'])").timepicker();
};
grappelli.initHacks = function() {
$('p.datetime').each(function() {
var text = $(this).html();
text = text.replace(/^\w*: /, "");
text = text.replace(/
.*: /, "
");
$(this).html(text);
});
};
// Using window.load instead of document ready for better performances
// It prevents lots of glitches, like divs that moves around upon loading
//
// Use $(document).ready only if you have to deal with images since it will
// wait for the document to be fully loaded/rendered before running the function
// while window.load method will run as soon as the DOM/CSS is loaded.
$(window).load(function() {
// we do the hacks first!
// because we manipulate dom via innerHTML => loose events
grappelli.initHacks();
grappelli.initCollapsible();
grappelli.initDateAndTimePicker();
});
})(django.jQuery);