| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /**
- * DragHelper.js
- *
- * Copyright, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
- /**
- * Drag/drop helper class.
- *
- * @example
- * var dragHelper = new tinymce.ui.DragHelper('mydiv', {
- * start: function(evt) {
- * },
- *
- * drag: function(evt) {
- * },
- *
- * end: function(evt) {
- * }
- * });
- *
- * @class tinymce.ui.DragHelper
- */
- define("tinymce/ui/DragHelper", [
- "tinymce/ui/DomUtils"
- ], function(DomUtils) {
- "use strict";
- function getDocumentSize() {
- var doc = document, documentElement, body, scrollWidth, clientWidth;
- var offsetWidth, scrollHeight, clientHeight, offsetHeight, max = Math.max;
- documentElement = doc.documentElement;
- body = doc.body;
- scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
- clientWidth = max(documentElement.clientWidth, body.clientWidth);
- offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
- scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
- clientHeight = max(documentElement.clientHeight, body.clientHeight);
- offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
- return {
- width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
- height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
- };
- }
- return function(id, settings) {
- var eventOverlayElm, doc = document, downButton, start, stop, drag, startX, startY;
- settings = settings || {};
- function getHandleElm() {
- return doc.getElementById(settings.handle || id);
- }
- start = function(e) {
- var docSize = getDocumentSize(), handleElm, cursor;
- e.preventDefault();
- downButton = e.button;
- handleElm = getHandleElm();
- startX = e.screenX;
- startY = e.screenY;
- // Grab cursor from handle
- if (window.getComputedStyle) {
- cursor = window.getComputedStyle(handleElm, null).getPropertyValue("cursor");
- } else {
- cursor = handleElm.runtimeStyle.cursor;
- }
- // Create event overlay and add it to document
- eventOverlayElm = doc.createElement('div');
- DomUtils.css(eventOverlayElm, {
- position: "absolute",
- top: 0, left: 0,
- width: docSize.width,
- height: docSize.height,
- zIndex: 0x7FFFFFFF,
- opacity: 0.0001,
- background: 'red',
- cursor: cursor
- });
- doc.body.appendChild(eventOverlayElm);
- // Bind mouse events
- DomUtils.on(doc, 'mousemove', drag);
- DomUtils.on(doc, 'mouseup', stop);
- // Begin drag
- settings.start(e);
- };
- drag = function(e) {
- if (e.button !== downButton) {
- return stop(e);
- }
- e.deltaX = e.screenX - startX;
- e.deltaY = e.screenY - startY;
- e.preventDefault();
- settings.drag(e);
- };
- stop = function(e) {
- DomUtils.off(doc, 'mousemove', drag);
- DomUtils.off(doc, 'mouseup', stop);
- eventOverlayElm.parentNode.removeChild(eventOverlayElm);
- if (settings.stop) {
- settings.stop(e);
- }
- };
- /**
- * Destroys the drag/drop helper instance.
- *
- * @method destroy
- */
- this.destroy = function() {
- DomUtils.off(getHandleElm());
- };
- DomUtils.on(getHandleElm(), 'mousedown', start);
- };
- });
|