'use strict'; var debounce = require("debounce"); var defaultValue = require("default-value"); var selectable = require("./selectable"); module.exports = function ($) { selectable($); $.fn.draggable = function () { var _this = this; var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var debounceInterval = defaultValue(options.debounce, 10); this.on("mousedown", function (event) { var startX = event.pageX; var startY = event.pageY; var moveHandler = debounce(function (event) { _this.trigger("draggable:move", [{ offsetX: event.pageX - startX, offsetY: event.pageY - startY }]); }, debounceInterval); $(document).on("mousemove", moveHandler); $(document).one("mouseup", function (event) { $(document).off("mousemove", moveHandler); $(document).enableSelection(); _this.trigger("draggable:end"); }); $(document).disableSelection(); _this.trigger("draggable:start"); }); }; };