123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /**
- * jqDnR - Minimalistic Drag'n'Resize for jQuery.
- *
- * Copyright (c) 2007 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
- * Licensed under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * $Version: 2007.08.19 +r2
- * Updated by Oleg Kiriljuk to support touch devices
- * Copyright (c) 2014-2018, Oleg Kiriljuk, oleg.kiriljuk@ok-soft-gmbh.com
- */
- /*jslint browser: true, white: true */
- /*global jQuery, define, exports, module, require */
- (function (global, factory) {
- "use strict";
- if (typeof define === "function" && define.amd) {
- // AMD. Register as an anonymous module.
- define([
- "jquery"
- ], function ($) {
- return factory($, global, global.document);
- });
- } else if (typeof module === "object" && module.exports) {
- // Node/CommonJS
- module.exports = function (root, $) {
- if (!root) {
- root = window;
- }
- if ($ === undefined) {
- // require("jquery") returns a factory that requires window to
- // build a jQuery instance, we normalize how we use modules
- // that require this pattern but the window provided is a noop
- // if it's defined (how jquery works)
- $ = typeof window !== "undefined" ?
- require("jquery") :
- require("jquery")(root);
- }
- factory($, root, root.document);
- return $;
- };
- } else {
- // Browser globals
- factory(jQuery, global, global.document);
- }
- }(typeof window !== "undefined" ? window : this, function ($, window, document) {
- "use strict";
- // begin module jqdnr
- var namespace = ".jqGrid", mouseDown = "mousedown", mouseMove = "mousemove", mouseUp = "mouseup",
- getMouseCoordinates = function (e) {
- var orgEvent = e.originalEvent, touches = orgEvent.targetTouches;
- if (touches) {
- touches = touches[0];
- return { x: touches.pageX, y: touches.pageY };
- }
- return { x: e.pageX, y: e.pageY };
- },
- jqDnR = {
- drag: function (e) {
- var d = e.data, $mainDialog = d.e, dnrMainDialog = d.dnr, $alsoResize = d.ar, dnrAlsoResize = d.dnrAr,
- xy = getMouseCoordinates(e);
- if (dnrMainDialog.k === "move") {
- $mainDialog.css({
- left: dnrMainDialog.X + xy.x - dnrMainDialog.pX,
- top: dnrMainDialog.Y + xy.y - dnrMainDialog.pY
- });
- } else {
- $mainDialog.css({
- width: Math.max(xy.x - dnrMainDialog.pX + dnrMainDialog.W, 0),
- height: Math.max(xy.y - dnrMainDialog.pY + dnrMainDialog.H, 0)
- });
- if (dnrAlsoResize) {
- $alsoResize.css({
- width: Math.max(xy.x - dnrAlsoResize.pX + dnrAlsoResize.W, 0),
- height: Math.max(xy.y - dnrAlsoResize.pY + dnrAlsoResize.H, 0)
- });
- }
- }
- return false;
- },
- stop: function () {
- //$mainDialog.css("opacity", dnr.o);
- $(document).off(mouseMove, jqDnR.drag).off(mouseUp, jqDnR.stop);
- }
- },
- init = function ($this, handle, actionName, alsoResize) {
- return $this.each(function () {
- handle = handle ? $(handle, $this) : $this;
- handle.on(mouseDown, { e: $this, k: actionName }, function (e) {
- var d = e.data, p = {}, $inputDatePicker, $mainDialog, dnrMainDialog, $alsoResize, dnrAlsoResize,
- getCssProp = function ($elem, propertyName) {
- return parseInt($elem.css(propertyName), 10) || false;
- },
- getMainCssProp = function (propertyName) {
- return getCssProp($mainDialog, propertyName);
- },
- getAlsoResizeCssProp = function (propertyName) {
- return getCssProp($alsoResize, propertyName);
- },
- xy = getMouseCoordinates(e),
- eventData;
- if ($(e.target).hasClass("ui-jqdialog-titlebar-close") || $(e.target).parent().hasClass("ui-jqdialog-titlebar-close")) {
- //$(e.target).click();
- return;
- }
- $mainDialog = d.e;
- $alsoResize = alsoResize ? $(alsoResize) : false;
- // attempt utilization of dimensions plugin to fix IE issues
- if ($mainDialog.css("position") !== "relative") {
- try {
- // ???? probably one want to GET position and save it in p ?
- // the current implementation use always p = {}
- // probably one mean some additional work together with Dimensions Plugin (dimensions.js)
- $mainDialog.position(p);
- } catch (ignore) { }
- }
- dnrMainDialog = {
- X: p.left || getMainCssProp("left") || 0,
- Y: p.top || getMainCssProp("top") || 0,
- W: getMainCssProp("width") || $mainDialog[0].scrollWidth || 0,
- H: getMainCssProp("height") || $mainDialog[0].scrollHeight || 0,
- pX: xy.x,
- pY: xy.y,
- k: d.k
- //o:$mainDialog.css("opacity")
- };
- // also resize
- if ($alsoResize && d.k !== "move") {
- dnrAlsoResize = {
- X: p.left || getAlsoResizeCssProp("left") || 0,
- Y: p.top || getAlsoResizeCssProp("top") || 0,
- W: $alsoResize[0].offsetWidth || getAlsoResizeCssProp("width") || 0,
- H: $alsoResize[0].offsetHeight || getAlsoResizeCssProp("height") || 0,
- pX: xy.x,
- pY: xy.y,
- k: d.k
- };
- } else {
- dnrAlsoResize = false;
- }
- //E.css({opacity:0.8});
- $inputDatePicker = $mainDialog.find("input.hasDatepicker");
- if ($inputDatePicker.length > 0) {
- try {
- $inputDatePicker.datepicker("hide");
- } catch (ignore) { }
- }
- eventData = {
- e: $mainDialog,
- dnr: dnrMainDialog,
- ar: $alsoResize,
- dnrAr: dnrAlsoResize
- };
- $(document).on(mouseMove, eventData, jqDnR.drag);
- $(document).on(mouseUp, eventData, jqDnR.stop);
- return false;
- });
- });
- };
- // navigator.maxTouchPoints == 2, navigator.msMaxTouchPoints
- // https://msdn.microsoft.com/en-us/library/ie/dn304886(v=vs.85).aspx
- if (window.PointerEvent) {
- mouseDown += namespace + " pointerdown" + namespace;
- mouseMove += namespace + " pointermove" + namespace;
- mouseUp += namespace + " pointerup" + namespace;
- } else if (window.MSPointerEvent) {
- mouseDown += namespace + " mspointerdown" + namespace;
- mouseMove += namespace + " mspointermove" + namespace;
- mouseUp += namespace + " mspointerup";
- } else { //if (Object.prototype.hasOwnProperty.call(document, "ontouchend")) { or "ontouchstart" in document.documentElement or "ontouchstart" in window
- mouseDown += namespace + " touchstart" + namespace;
- mouseMove += namespace + " touchmove" + namespace;
- mouseUp += namespace + " touchend" + namespace;
- }
- $.jqDnR = jqDnR;
- $.fn.jqDrag = function (handle) {
- return init(this, handle, "move");
- };
- $.fn.jqResize = function (handle, alsoResize) {
- return init(this, handle, "resize", alsoResize);
- };
- // end module jqdnr
- }));
|