@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
319 lines (249 loc) • 11 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ({
/***/ 0:
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1285);
/***/ }),
/***/ 3:
/***/ (function(module, exports) {
module.exports = function() { throw new Error("define cannot be used indirect"); };
/***/ }),
/***/ 1006:
/***/ (function(module, exports) {
module.exports = require("./kendo.core");
/***/ }),
/***/ 1061:
/***/ (function(module, exports) {
module.exports = require("./kendo.draganddrop");
/***/ }),
/***/ 1285:
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1006), __webpack_require__(1061) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
})(function(){
var __meta__ = { // jshint ignore:line
id: "reorderable",
name: "Reorderable",
category: "framework",
depends: [ "core", "draganddrop" ],
advanced: true
};
(function ($, undefined) {
var kendo = window.kendo,
outerWidth = kendo._outerWidth,
outerHeight = kendo._outerHeight,
getOffset = kendo.getOffset,
Widget = kendo.ui.Widget,
CHANGE = "change",
KREORDERABLE = "k-reorderable";
function toggleHintClass(hint, denied) {
hint = $(hint);
if (denied) {
hint.find(".k-drag-status").removeClass("k-i-plus").addClass("k-i-cancel");
} else {
hint.find(".k-drag-status").removeClass("k-i-cancel").addClass("k-i-plus");
}
}
var Reorderable = Widget.extend({
init: function(element, options) {
var that = this,
draggable,
group = kendo.guid() + "-reorderable";
Widget.fn.init.call(that, element, options);
element = that.element.addClass(KREORDERABLE);
options = that.options;
that.draggable = draggable = options.draggable || new kendo.ui.Draggable(element, {
group: group,
autoScroll: true,
filter: options.filter,
hint: options.hint
});
that.reorderDropCue = $('<div class="k-reorder-cue"></div></div>');
element.find(draggable.options.filter).kendoDropTarget({
group: draggable.options.group,
dragenter: function(e) {
if (!that._draggable) {
return;
}
var dropTarget = this.element, offset;
var denied = !that._dropTargetAllowed(dropTarget) || that._isLastDraggable();
toggleHintClass(e.draggable.hint, denied);
if (!denied) {
offset = getOffset(dropTarget);
var left = offset.left;
if (options.inSameContainer && !options.inSameContainer({
source: dropTarget,
target: that._draggable,
sourceIndex: that._index(dropTarget),
targetIndex: that._index(that._draggable)
})) {
that._dropTarget = dropTarget;
} else {
if (that._index(dropTarget) > that._index(that._draggable)) {
left += outerWidth(dropTarget);
}
}
that.reorderDropCue.css({
height: outerHeight(dropTarget),
top: offset.top,
left: left
})
.appendTo(document.body);
}
},
dragleave: function(e) {
toggleHintClass(e.draggable.hint, true);
that.reorderDropCue.remove();
that._dropTarget = null;
},
drop: function() {
that._dropTarget = null;
if (!that._draggable) {
return;
}
var dropTarget = this.element;
var draggable = that._draggable;
if (that._dropTargetAllowed(dropTarget) && !that._isLastDraggable()) {
that.trigger(CHANGE, {
element: that._draggable,
target: dropTarget,
oldIndex: that._index(draggable),
newIndex: that._index(dropTarget),
position: getOffset(that.reorderDropCue).left > getOffset(dropTarget).left ? "after" : "before"
});
}
}
});
draggable.bind([ "dragcancel", "dragend", "dragstart", "drag" ],
{
dragcancel: function() {
that.reorderDropCue.remove();
that._draggable = null;
that._elements = null;
},
dragend: function() {
that.reorderDropCue.remove();
that._draggable = null;
that._elements = null;
},
dragstart: function(e) {
that._draggable = e.currentTarget;
that._elements = that.element.find(that.draggable.options.filter);
},
drag: function(e) {
if (!that._dropTarget || this.hint.find(".k-drag-status").hasClass("k-i-cancel")) {
return;
}
var dropStartOffset = getOffset(that._dropTarget).left;
var width = outerWidth(that._dropTarget);
if (e.pageX > dropStartOffset + width / 2) {
that.reorderDropCue.css({ left: dropStartOffset + width });
} else {
that.reorderDropCue.css({ left: dropStartOffset });
}
}
}
);
},
options: {
name: "Reorderable",
filter: "*"
},
events: [
CHANGE
],
_isLastDraggable: function() {
var inSameContainer = this.options.inSameContainer,
draggable = this._draggable[0],
elements = this._elements.get(),
found = false,
item;
if (!inSameContainer) {
return false;
}
while (!found && elements.length > 0) {
item = elements.pop();
found = draggable !== item && inSameContainer({
source: draggable,
target: item,
sourceIndex: this._index(draggable),
targetIndex: this._index(item)
});
}
return !found;
},
_dropTargetAllowed: function(dropTarget) {
var inSameContainer = this.options.inSameContainer,
dragOverContainers = this.options.dragOverContainers,
draggable = this._draggable;
if (draggable[0] === dropTarget[0]) {
return false;
}
if (!inSameContainer || !dragOverContainers) {
return true;
}
if (inSameContainer({ source: draggable,
target: dropTarget,
sourceIndex: this._index(draggable),
targetIndex: this._index(dropTarget)
})) {
return true;
}
return dragOverContainers(this._index(draggable), this._index(dropTarget));
},
_index: function(element) {
return this._elements.index(element);
},
destroy: function() {
var that = this;
Widget.fn.destroy.call(that);
that.element.find(that.draggable.options.filter).each(function() {
var item = $(this);
if (item.data("kendoDropTarget")) {
item.data("kendoDropTarget").destroy();
}
});
if (that.draggable) {
that.draggable.destroy();
that.draggable.element = that.draggable = null;
}
that.elements = that.reorderDropCue = that._elements = that._draggable = null;
}
});
kendo.ui.plugin(Reorderable);
})(window.kendo.jQuery);
return window.kendo;
}, __webpack_require__(3));
/***/ })
/******/ });