X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d7d7e49e08a5648e152bbc91e091af293478629b..362ea2e7f8ac4254398791139cc060090199f400:/wolnelektury/static/sponsors/js/footer_admin.js diff --git a/wolnelektury/static/sponsors/js/footer_admin.js b/wolnelektury/static/sponsors/js/footer_admin.js new file mode 100644 index 000000000..2f2cd93da --- /dev/null +++ b/wolnelektury/static/sponsors/js/footer_admin.js @@ -0,0 +1,131 @@ +(function($) { + $.fn.sponsorsFooter = function(options) { + var settings = { + sponsors: [] + }; + $.extend(settings, options); + + var input = $(this).hide(); + + var container = $('
').appendTo(input.parent()); + var groups = $.evalJSON(input.val()); + + var unusedDiv = $('
') + .appendTo(container) + .append('

dostępni sponsorzy

'); + var unusedList = $('
    ') + .appendTo(unusedDiv) + .sortable({ + connectWith: '.sponsors-sponsor-group-list' + }); + + // Edit group name inline + function editNameInline(name) { + name.unbind('click.sponsorsFooter'); + var inlineInput = $('').val(name.html()); + name.html(''); + + function endEditing() { + name.html(inlineInput.val()); + inlineInput.remove(); + name.bind('click.sponsorsFooter', function() { + editNameInline($(this)); + }); + input.parents('form').unbind('submit.sponsorsFooter', endEditing); + return false; + } + + inlineInput.appendTo(name).focus().blur(endEditing); + input.parents('form').bind('submit.sponsorsFooter', endEditing); + } + + // Remove sponsor with passed id from sponsors array and return it + function popSponsor(id) { + for (var i=0; i < settings.sponsors.length; i++) { + if (settings.sponsors[i].id == id) { + var s = settings.sponsors[i]; + settings.sponsors.splice(i, 1); + return s; + } + } + return null; + } + + // Create sponsor group and bind events + function createGroup(name, sponsors) { + if (!sponsors) { + sponsors = []; + } + + var groupDiv = $('
    '); + + $('X') + .click(function() { + groupDiv.fadeOut('slow', function() { + $('.sponsors-sponsor', groupDiv).hide().appendTo(unusedList).fadeIn(); + groupDiv.remove(); + }); + }).appendTo(groupDiv); + + $('

    ' + name + '

    ') + .bind('click.sponsorsFooter', function() { + editNameInline($(this)); + }).appendTo(groupDiv); + + var groupList = $('
      ') + .appendTo(groupDiv) + .sortable({ + connectWith: '.sponsors-sponsor-group-list' + }); + + + for (var i = 0; i < sponsors.length; i++) { + $('
    1. ' + sponsors[i].name + '
    2. ') + .data('obj_id', sponsors[i].id) + .appendTo(groupList); + } + return groupDiv; + } + + // Create groups from data in input value + for (var i = 0; i < groups.length; i++) { + var group = groups[i]; + var sponsors = []; + + for (var j = 0; j < group.sponsors.length; j++) { + var s = popSponsor(group.sponsors[j]); + if (s) { + sponsors.push(s); + } + } + createGroup(group.name, sponsors).appendTo(container); + } + + // Serialize input value before submiting form + input.parents('form').submit(function(event) { + var groups = []; + $('.sponsors-sponsor-group', container).not('.sponsors-unused-sponsor-group').each(function() { + var group = {name: $('.sponsors-sponsor-group-name', this).html(), sponsors: []}; + $('.sponsors-sponsor', this).each(function() { + group.sponsors.push($(this).data('obj_id')); + }); + groups.push(group); + }); + input.val($.toJSON(groups)); + }); + + for (i = 0; i < settings.sponsors.length; i++) { + $('
    3. ' + settings.sponsors[i].name + '
    4. ') + .data('obj_id', settings.sponsors[i].id) + .appendTo(unusedList); + } + + $('') + .click(function() { + var newGroup = createGroup('').appendTo(container); + editNameInline($('.sponsors-sponsor-group-name', newGroup)); + }).prependTo(input.parent()); + + input.parent().append('
      '); + }; +})(jQuery);