(function($){ function updateUpDown(sortable) { $('dl:not(.ui-sortable-helper)', sortable) .removeClass('first').removeClass('last') .find('.up, .down').removeClass('disabled').end() .filter(':first').addClass('first').find('.up').addClass('disabled').end().end() .filter(':last').addClass('last').find('.down').addClass('disabled').end().end(); }; function moveUpDown() { var link = $(this), dl = link.parents('dl'), prev = dl.prev('dl'), next = dl.next('dl'); if(link.is('.up') && prev.length > 0) dl.insertBefore(prev); if(link.is('.down') && next.length > 0) dl.insertAfter(next); updateUpDown(dl.parent()); }; function addControls() { $(this).append('updown') .find('a.up, a.down').bind('click', moveUpDown); updateUpDown($(this).parents(".ui-sortable:first")); } var counter = 1; function addItem() { var sortable = $(this).parents('.ui-sortable:first'); var options = 'updown'; var tpl = '
{name}' + options + '
{desc}
'; var html = tpl.replace(/{name}/g, 'Dynamic name ' + counter).replace(/{desc}/g, 'Description'); counter += 1; sortable.append(html).sortable('refresh').find('a.up, a.down').bind('click', moveUpDown); updateUpDown(sortable); }; function emptyTrashCan(item) { item.remove(); }; function sortableChange(e, ui) { if(ui.sender){ var w = ui.element.width(); ui.placeholder.width(w); ui.helper.css("width",ui.element.children().width()); } }; function sortableUpdate(e, ui) { if(ui.element[0].id == 'trashcan'){ emptyTrashCan(ui.item); } else { updateUpDown(ui.element[0]); if(ui.sender) updateUpDown(ui.sender[0]); } }; $(document).ready(function(){ var els = ['#header', '#content', '#sidebar', '#footer', '#trashcan']; var $els = $(els.toString()); $('h2', $els.slice(0,-1)).append('add'); $('dt', $els).each(addControls); //$('dt', $els).append('updown'); $('a.add').bind('click', addItem); //$('a.up, a.down').bind('click', moveUpDown); $els.each(function(){ updateUpDown(this); }); $els.sortable({ items: '> dl', handle: 'dt', cursor: 'move', //cursorAt: { top: 2, left: 2 }, //opacity: 0.8, //helper: 'clone', appendTo: 'body', //placeholder: 'clone', //placeholder: 'placeholder', connectWith: els, start: function(e,ui) { ui.helper.css("width", ui.item.parent().width()); }, change: sortableChange, update: sortableUpdate }).bind("sortreceive", function(e, ui) { $(ui.item).removeClass('ui-draggable').find('dt').each(addControls); }); $('#components > dl').draggable({ connectToSortable: $els.not("#trashcan"), helper: 'clone', handle: 'dt' }) }); $(window).bind('load',function(){ setTimeout(function(){ // fixes the weird scrolling in IE while killing the fade $(document.body).css("height", "auto") $('#overlay').fadeOut(function(){ $(this).remove(); }); }, 500); }); })(jQuery);