github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/public/js/sortable/jquery.sortable.js (about)

     1  /*
     2   * HTML5 Sortable jQuery Plugin
     3   * http://farhadi.ir/projects/html5sortable
     4   * 
     5   * Copyright 2012, Ali Farhadi
     6   * Released under the MIT license.
     7   */
     8  (function($) {
     9  var dragging, placeholders = $();
    10  $.fn.sortable = function(options) {
    11  	var method = String(options);
    12  	options = $.extend({
    13  		connectWith: false
    14  	}, options);
    15  	return this.each(function() {
    16  		if (/^enable|disable|destroy$/.test(method)) {
    17  			var items = $(this).children($(this).data('items')).attr('draggable', method == 'enable');
    18  			if (method == 'destroy') {
    19  				items.add(this).removeData('connectWith items')
    20  					.off('dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s');
    21  			}
    22  			return;
    23  		}
    24  		var isHandle, index, items = $(this).children(options.items);
    25  		var placeholder = $('<' + (/^ul|ol$/i.test(this.tagName) ? 'li' : 'div') + ' class="sortable-placeholder">');
    26  		items.find(options.handle).mousedown(function() {
    27  			isHandle = true;
    28  		}).mouseup(function() {
    29  			isHandle = false;
    30  		});
    31  		$(this).data('items', options.items)
    32  		placeholders = placeholders.add(placeholder);
    33  		if (options.connectWith) {
    34  			$(options.connectWith).add(this).data('connectWith', options.connectWith);
    35  		}
    36  		items.attr('draggable', 'true').on('dragstart.h5s', function(e) {
    37  			if (options.handle && !isHandle) {
    38  				return false;
    39  			}
    40  			isHandle = false;
    41  			var dt = e.originalEvent.dataTransfer;
    42  			dt.effectAllowed = 'move';
    43  			dt.setData('Text', 'dummy');
    44  			index = (dragging = $(this)).addClass('sortable-dragging').index();
    45  		}).on('dragend.h5s', function() {
    46  			if (!dragging) {
    47  				return;
    48  			}
    49  			dragging.removeClass('sortable-dragging').show();
    50  			placeholders.detach();
    51  			if (index != dragging.index()) {
    52  				dragging.parent().trigger('sortupdate', {item: dragging});
    53  			}
    54  			dragging = null;
    55  		}).not('a[href], img').on('selectstart.h5s', function() {
    56  			this.dragDrop && this.dragDrop();
    57  			return false;
    58  		}).end().add([this, placeholder]).on('dragover.h5s dragenter.h5s drop.h5s', function(e) {
    59  			if (!items.is(dragging) && options.connectWith !== $(dragging).parent().data('connectWith')) {
    60  				return true;
    61  			}
    62  			if (e.type == 'drop') {
    63  				e.stopPropagation();
    64  				placeholders.filter(':visible').after(dragging);
    65  				dragging.trigger('dragend.h5s');
    66  				return false;
    67  			}
    68  			e.preventDefault();
    69  			e.originalEvent.dataTransfer.dropEffect = 'move';
    70  			if (items.is(this)) {
    71  				if (options.forcePlaceholderSize) {
    72  					placeholder.height(dragging.outerHeight());
    73  				}
    74  				dragging.hide();
    75  				$(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder);
    76  				placeholders.not(placeholder).detach();
    77  			} else if (!placeholders.is(this) && !$(this).children(options.items).length) {
    78  				placeholders.detach();
    79  				$(this).append(placeholder);
    80  			}
    81  			return false;
    82  		});
    83  	});
    84  };
    85  })(jQuery);