123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*
- * 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();
- }).on('dragend.h5s', function() {
- dragging.removeClass('sortable-dragging').show();
- placeholders.detach();
- if (index != dragging.index()) {
- items.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);
- 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);
|