$window.attr("id", this.id + "-window");
$('body').append($window);
+ var $trigger = $(this)
var trigger = '#' + this.id;
- var href = $(this).attr('href');
- if (href.search('\\?') != -1)
- href += '&ajax=1';
- else href += '?ajax=1';
-
$window.jqm({
- ajax: href,
+ ajax: '@href',
ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>',
target: $('.target', $window)[0],
overlay: 60,
onShow: function(hash) {
var offset = $(hash.t).offset();
hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $(hash.t).width(), top: offset.top});
- $('.header', hash.w).css({width: $(hash.t).width()});
+ var width = $(hash.t).width();
+ width = width > 50 ? width : 50;
+ $('.header', hash.w).css({width: width});
hash.w.show();
},
onLoad: function(hash) {
- $('form', hash.w).each(function() {
- if (this.action.search('[\\?&]ajax=1') != -1)
- return;
- if (this.action.search('\\?') != -1)
- this.action += '&ajax=1';
- else this.action += '?ajax=1';
- });
$('form', hash.w).ajaxForm({
dataType: 'json',
target: $('.target', $window),
if (response.success) {
$('.target', $window).text(response.message);
setTimeout(function() { $window.jqmHide() }, 1000);
+ callback = ajaxable_callbacks[$trigger.attr('data-callback')];
+ callback && callback($trigger, response);
if (response.redirect)
window.location = response.redirect;
}
});
+ var login_and_retry = function($form) {
+ var $window = $("#ajaxable-window").clone();
+ $window.attr("id", "context-login-window");
+ $('body').append($window);
+
+ $window.jqm({
+ ajax: '/uzytkownicy/zaloguj-utworz/',
+ ajaxText: '<p><img src="' + STATIC_URL + 'img/indicator.gif" alt="*"/> ' + gettext("Loading") + '</p>',
+ target: $('.target', $window)[0],
+ overlay: 60,
+ onShow: function(hash) {
+ var offset = $form.offset();
+ hash.w.css({position: 'absolute', left: offset.left - hash.w.width() + $form.width(), top: offset.top});
+ var width = $form.width();
+ width = width > 50 ? width : 50;
+ $('.header', hash.w).css({width: width});
+ hash.w.show();
+ },
+ onLoad: function(hash) {
+ $('form', hash.w).ajaxForm({
+ dataType: 'json',
+ target: $('.target', $window),
+ success: function(response) {
+ if (response.success) {
+ $('.target', $window).text(response.message);
+ setTimeout(function() { $window.jqmHide() }, 1000);
+ $form.submit();
+ location.reload();
+ }
+ else {
+ $('.error', $window).remove();
+ $.each(response.errors, function(id, errors) {
+ $('#id_' + id, $window).before('<span class="error">' + errors[0] + '</span>');
+ });
+ $('input[type=submit]', $window).removeAttr('disabled');
+ return false;
+ }
+ }
+ });
+ }
+ }).jqmShow();
+
+ };
+
+
+ $('.ajax-form').each(function() {
+ var $form = $(this);
+ $form.ajaxForm({
+ dataType: 'json',
+ beforeSubmit: function() {
+ $('input[type=submit]', $form)
+ .attr('disabled', 'disabled')
+ .after('<img src="/static/img/indicator.gif" style="margin-left: 0.5em"/>');
+ },
+ error: function(response) {
+ if (response.status == 403)
+ login_and_retry($form);
+ },
+ success: function(response) {
+ if (response.success) {
+ callback = ajax_form_callbacks[$form.attr('data-callback')];
+ callback && callback($form, response);
+
+ } else {
+ $('span.error', $form).remove();
+ $.each(response.errors, function(id, errors) {
+ $('#id_' + id, $form).before('<span class="error">' + errors[0] + '</span>');
+ });
+ $('input[type=submit]', $form).removeAttr('disabled');
+ $('img', $form).remove();
+ }
+ }
+ });
+ });
+
+
+ var update_star = function($elem, response) {
+ /* updates the star after successful ajax */
+ var $star = $elem.closest('.star');
+ if (response.like) {
+ $star.addClass('like');
+ $star.removeClass('unlike');
+ }
+ else {
+ $star.addClass('unlike');
+ $star.removeClass('like');
+ }
+ };
+
+ var ajax_form_callbacks = {
+ 'social-like-book': update_star
+ };
+
+ var ajaxable_callbacks = {
+ 'social-book-sets': location.reload
+ };
+
+
});
})(jQuery)