12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * 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) {
- options = options || {};
- return this.each(function() {
- if (/^enable|disable|destroy$/.test(options)) {
- var items = $(this).children($(this).data('items')).attr('draggable', options == 'enable');
- options == 'destroy' && items.add(this)
- .removeData('connectWith').removeData('items')
- .unbind('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s');
- return;
- }
- var index, items = $(this).children(options.items), connectWith = options.connectWith || false;
- var placeholder = $('<' + items[0].tagName + ' class="sortable-placeholder">');
- var handle = options.handle, isHandle;
- items.find(handle).mousedown(function() {
- isHandle = true;
- }).mouseup(function() {
- isHandle = false;
- });
- $(this).data('items', options.items)
- placeholders = placeholders.add(placeholder);
- if (connectWith) {
- $(connectWith).add(this).data('connectWith', connectWith);
- }
- items.attr('draggable', 'true').bind('dragstart.h5s', function(e) {
- if (handle && !isHandle) {
- return false;
- }
- isHandle = false;
- var dt = e.originalEvent.dataTransfer;
- dt.effectAllowed = 'move';
- dt.setData('Text', 'dummy');
- dragging = $(this).addClass('sortable-dragging');
- index = dragging.index();
- }).bind('dragend.h5s', function() {
- dragging.removeClass('sortable-dragging').fadeIn();
- placeholders.detach();
- if (index != dragging.index()) {
- items.parent().trigger('sortupdate');
- }
- dragging = null;
- }).not('a[href], img').bind('selectstart.h5s', function() {
- this.dragDrop && this.dragDrop();
- return false;
- }).end().add([this, placeholder]).bind('dragover.h5s dragenter.h5s drop.h5s', function(e) {
- if (!items.is(dragging) && connectWith !== $(dragging).parent().data('connectWith')) {
- return true;
- }
- if (e.type == 'drop') {
- e.stopPropagation();
- placeholders.filter(':visible').after(dragging);
- return false;
- }
- e.preventDefault();
- e.originalEvent.dataTransfer.dropEffect = 'move';
- if (items.is(this)) {
- dragging.hide();
- $(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder);
- placeholders.not(placeholder).detach();
- }
- return false;
- });
- });
- };
- })(jQuery);
|