Last active
August 29, 2015 14:03
-
-
Save patrickpietens/91f0ef604a73005aea8f to your computer and use it in GitHub Desktop.
Fix: sortupdate not fired when sorting multiple lists
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* HTML5 Sortable jQuery Plugin | |
* http://farhadi.ir/projects/html5sortable | |
* | |
* Copyright 2012, Ali Farhadi | |
* Released under the MIT license. | |
*/ | |
(function($) { | |
var dragging, placeholders = $(); | |
$.fn.sortable = function(options) { | |
var method = String(options); | |
options = $.extend({ | |
connectWith: false | |
}, options); | |
return this.each(function() { | |
if (/^enable|disable|destroy$/.test(method)) { | |
var items = $(this).children($(this).data('items')).attr('draggable', method == 'enable'); | |
if (method == 'destroy') { | |
items.add(this).removeData('connectWith items') | |
.off('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s'); | |
} | |
return; | |
} | |
var isHandle, index, items = $(this).children(options.items); | |
var placeholder = $('<' + (/^ul|ol$/i.test(this.tagName) ? 'li' : 'div') + ' class="sortable-placeholder">'); | |
items.find(options.handle).mousedown(function() { | |
isHandle = true; | |
}).mouseup(function() { | |
isHandle = false; | |
}); | |
$(this).data('items', options.items) | |
placeholders = placeholders.add(placeholder); | |
if (options.connectWith) { | |
$(options.connectWith).add(this).data('connectWith', options.connectWith); | |
} | |
items.attr('draggable', 'true').on('dragstart.h5s', function(e) { | |
if (options.handle && !isHandle) { | |
return false; | |
} | |
isHandle = false; | |
var dt = e.originalEvent.dataTransfer; | |
dt.effectAllowed = 'move'; | |
dt.setData('Text', 'dummy'); | |
index = (dragging = $(this)).addClass('sortable-dragging').index(); | |
parent = dragging.parent(); | |
}).on('dragend.h5s', function() { | |
if (!dragging) { | |
return; | |
} | |
dragging.removeClass('sortable-dragging').show(); | |
placeholders.detach(); | |
if (index !== dragging.index() || parent!==dragging.parent()) { | |
dragging.parent().trigger('sortupdate', {item: dragging}); | |
} | |
dragging = null; | |
}).not('a[href], img').on('selectstart.h5s', function() { | |
this.dragDrop && this.dragDrop(); | |
return false; | |
}).end().add([this, placeholder]).on('dragover.h5s dragenter.h5s drop.h5s', function(e) { | |
if (!items.is(dragging) && options.connectWith !== $(dragging).parent().data('connectWith')) { | |
return true; | |
} | |
if (e.type == 'drop') { | |
e.stopPropagation(); | |
placeholders.filter(':visible').after(dragging); | |
dragging.trigger('dragend.h5s'); | |
return false; | |
} | |
e.preventDefault(); | |
e.originalEvent.dataTransfer.dropEffect = 'move'; | |
if (items.is(this)) { | |
if (options.forcePlaceholderSize) { | |
placeholder.height(dragging.outerHeight()); | |
} | |
dragging.hide(); | |
$(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder); | |
placeholders.not(placeholder).detach(); | |
} else if (!placeholders.is(this) && !$(this).children(options.items).length) { | |
placeholders.detach(); | |
$(this).append(placeholder); | |
} | |
return false; | |
}); | |
}); | |
}; | |
})(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment