sortable: implemented ui.cancel(), a function that can be called to completely cancel the sortable attempt, and revert to the original state (implements #3283, #3402)

This commit is contained in:
Paul Bakaus 2008-11-03 21:41:59 +00:00
parent 1045a83f49
commit 5e5116b3d4

View File

@ -46,17 +46,58 @@ $.widget("ui.sortable", $.extend({}, $.ui.mouse, {
}, },
plugins: {}, plugins: {},
ui: function(inst) { ui: function(inst) {
var self = inst || this;
return { return {
helper: (inst || this)["helper"], helper: self.helper,
placeholder: (inst || this)["placeholder"] || $([]), placeholder: self.placeholder || $([]),
position: (inst || this)["position"], position: self.position,
absolutePosition: (inst || this)["positionAbs"], absolutePosition: self.positionAbs,
options: this.options, options: this.options,
element: this.element, element: this.element,
item: (inst || this)["currentItem"], item: self.currentItem,
sender: inst ? inst.element : null sender: inst ? inst.element : null,
cancel: function() { self.cancel(); }
}; };
}, },
cancel: function() {
if(this.dragging) {
if(this.options.helper == "original")
this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
else
this.currentItem.show();
//Post deactivating events to containers
for (var i = this.containers.length - 1; i >= 0; i--){
this.containers[i]._propagate("deactivate", null, this);
if(this.containers[i].containerCache.over) {
this.containers[i]._propagate("out", null, this);
this.containers[i].containerCache.over = 0;
}
}
}
//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();
$.extend(this, {
helper: null,
dragging: false,
reverting: false,
_noFinalSort: null
});
if(this.domPosition.prev) {
$(this.domPosition.prev).after(this.currentItem);
} else {
$(this.domPosition.parent).prepend(this.currentItem);
}
return true;
},
_propagate: function(n,e,inst, noPropagation) { _propagate: function(n,e,inst, noPropagation) {
$.ui.plugin.call(this, n, [e, this.ui(inst)]); $.ui.plugin.call(this, n, [e, this.ui(inst)]);