Bläddra i källkod

Refactored, simplified and removed unused code.

JC Brand 11 år sedan
förälder
incheckning
3687631d2c
1 ändrade filer med 76 tillägg och 151 borttagningar
  1. 76 151
      src/dragresize.js

+ 76 - 151
src/dragresize.js

@@ -17,48 +17,6 @@ Simplified and modified for Converse.js by JC Brand https://opkode.com
         root.DragResize = factory();
         root.DragResize = factory();
     }
     }
 }(this, function () {
 }(this, function () {
-
-    // Common API code.
-    if (typeof addEvent != 'function') {
-        var removeEvent = function(o, t, f, l) {
-            var d = 'removeEventListener';
-            if (o[d] && !l) {
-                return o[d](t, f, false);
-            }
-            if (o._evts && o._evts[t] && f._i) {
-                delete o._evts[t][f._i];
-            }
-        };
-
-        var addEvent = function(o, t, f, l) {
-            var d = 'addEventListener', n = 'on' + t, rO = o, rT = t, rF = f, rL = l;
-            if (o[d] && !l) {
-                return o[d](t, f, false);
-            }
-            if (!o._evts) {
-                o._evts = {};
-            }
-            if (!o._evts[t]) {
-                o._evts[t] = o[n] ? { b: o[n] } : {};
-                o[n] = new Function('e',
-                    'var r = true, o = this, a = o._evts["' + t + '"], i; for (i in a) {' +
-                    'o._f = a[i]; r = o._f(e||window.event) != false && r; o._f = null;' +
-                    '} return r'
-                );
-                if (t != 'unload') {
-                    addEvent(window, 'unload', function() {
-                        removeEvent(rO, rT, rF, rL);
-                    });
-                }
-            }
-            if (!f._i) {
-                f._i = addEvent._i++;
-            }
-            o._evts[t][f._i] = f;
-        };
-        addEvent._i = 1;
-    }
-
     function cancelEvent(e, c) {
     function cancelEvent(e, c) {
         e.returnValue = false;
         e.returnValue = false;
         if (e.preventDefault) {
         if (e.preventDefault) {
@@ -83,22 +41,16 @@ Simplified and modified for Converse.js by JC Brand https://opkode.com
             element: null,                   // The currently selected element.
             element: null,                   // The currently selected element.
             handle: null,                    // Active handle reference of the element.
             handle: null,                    // Active handle reference of the element.
             minWidth: 10, minHeight: 10,     // Minimum pixel size of elements.
             minWidth: 10, minHeight: 10,     // Minimum pixel size of elements.
-            minLeft: 0, maxLeft: 9999,       // Bounding box area, in pixels.
-            minTop: 0, maxTop: 9999,
             zIndex: 1,                       // The highest Z-Index yet allocated.
             zIndex: 1,                       // The highest Z-Index yet allocated.
-            mouseX: 0, mouseY: 0,            // Current mouse position, recorded live.
             lastMouseX: 0, lastMouseY: 0,    // Last processed mouse positions.
             lastMouseX: 0, lastMouseY: 0,    // Last processed mouse positions.
             mOffX: 0, mOffY: 0,              // A known offset between position & mouse.
             mOffX: 0, mOffY: 0,              // A known offset between position & mouse.
-            elmX: 0, elmY: 0,                // Element position.
             elmW: 0, elmH: 0,                // Element size.
             elmW: 0, elmH: 0,                // Element size.
             allowBlur: true,                 // Whether to allow automatic blur onclick.
             allowBlur: true,                 // Whether to allow automatic blur onclick.
             ondragfocus: null,               // Event handler functions.
             ondragfocus: null,               // Event handler functions.
             ondragstart: null,
             ondragstart: null,
-            ondragmove: null,
             ondragend: null,
             ondragend: null,
             ondragblur: null
             ondragblur: null
         };
         };
-
         for (var p in props) {
         for (var p in props) {
             this[p] = (typeof config[p] == 'undefined') ? props[p] : config[p];
             this[p] = (typeof config[p] == 'undefined') ? props[p] : config[p];
         }
         }
@@ -106,13 +58,13 @@ Simplified and modified for Converse.js by JC Brand https://opkode.com
 
 
 
 
     DragResize.prototype.apply = function(node) {
     DragResize.prototype.apply = function(node) {
-        // Adds object event handlers to the specified DOM node.
-        var obj = this;
-        addEvent(node, 'mousedown', function(e) { obj.mouseDown(e) } );
-        addEvent(node, 'mousemove', function(e) { obj.mouseMove(e) } );
-        addEvent(node, 'mouseup', function(e) { obj.mouseUp(e) } );
+        /* Adds object event handlers to the specified DOM node */
+        $(node).bind('mousedown', this.mouseDown.bind(this));
+        $(node).bind('mousemove', this.mouseMove.bind(this));
+        $(node).bind('mouseup', this.mouseUp.bind(this));
     };
     };
 
 
+
     DragResize.prototype.select = function(newElement) { 
     DragResize.prototype.select = function(newElement) { 
         with (this) {
         with (this) {
             // Selects an element for dragging.
             // Selects an element for dragging.
@@ -124,8 +76,6 @@ Simplified and modified for Converse.js by JC Brand https://opkode.com
                 // Elevate it
                 // Elevate it
                 element.style.zIndex = ++zIndex;
                 element.style.zIndex = ++zIndex;
                 // Record element attributes for mouseMove().
                 // Record element attributes for mouseMove().
-                elmX = parseInt(element.style.left);
-                elmY = parseInt(element.style.top);
                 elmW = element.offsetWidth;
                 elmW = element.offsetWidth;
                 elmH = element.offsetHeight;
                 elmH = element.offsetHeight;
                 if (ondragfocus) this.ondragfocus();
                 if (ondragfocus) this.ondragfocus();
@@ -185,53 +135,16 @@ Simplified and modified for Converse.js by JC Brand https://opkode.com
         }
         }
     };
     };
 
 
-    DragResize.prototype.mouseMove = function(e) { with (this) {
-        // This continually offsets the dragged element by the difference between the
-        // last recorded mouse position (mouseX/Y) and the current mouse position.
-        if (!document.getElementById || !enabled) return true;
 
 
-        // We always record the current mouse position.
-        mouseX = e.pageX || e.clientX + document.documentElement.scrollLeft;
-        mouseY = e.pageY || e.clientY + document.documentElement.scrollTop;
-        // Record the relative mouse movement, in case we're dragging.
-        // Add any previously stored & ignored offset to the calculations.
-        var diffX = mouseX - lastMouseX + mOffX;
-        var diffY = mouseY - lastMouseY + mOffY;
-        mOffX = mOffY = 0;
-        // Update last processed mouse positions.
-        lastMouseX = mouseX;
-        lastMouseY = mouseY;
-
-        // That's all we do if we're not dragging anything.
-        if (!handle) return true;
-
-        // If included in the script, run the resize handle drag routine.
-        // Let it create an object representing the drag offsets.
-        var isResize = false;
-        if (this.resizeHandleDrag && this.resizeHandleDrag(diffX, diffY)) {
-            isResize = true;
-        } else {
-            // If the resize drag handler isn't set or returns fase (to indicate the drag was
-            // not on a resize handle), we must be dragging the whole element, so move that.
-            // Bounds check left-right...
-            var dX = diffX, dY = diffY;
-            if (elmX + dX < minLeft) mOffX = (dX - (diffX = minLeft - elmX));
-            else if (elmX + elmW + dX > maxLeft) mOffX = (dX - (diffX = maxLeft - elmX - elmW));
-            // ...and up-down.
-            if (elmY + dY < minTop) mOffY = (dY - (diffY = minTop - elmY));
-            else if (elmY + elmH + dY > maxTop) mOffY = (dY - (diffY = maxTop - elmY - elmH));
-            elmX += diffX;
-            elmY += diffY;
-        }
+    DragResize.prototype.updateMouseCoordinates = function (e) {
+        /* Update last processed mouse positions */
+        this.mOffX = this.mOffY = 0;
+        this.lastMouseX = e.pageX || e.clientX + document.documentElement.scrollLeft;
+        this.lastMouseY = e.pageY || e.clientY + document.documentElement.scrollTop;
+    };
 
 
-        // Assign new info back to the element, with minimum dimensions.
-        with (element.style) {
-            left =   elmX + 'px';
-            width =  elmW + 'px';
-            top =    elmY + 'px';
-            height = elmH + 'px';
-        }
 
 
+    DragResize.prototype.operaHack = function (e) {
         // Evil, dirty, hackish Opera select-as-you-drag fix.
         // Evil, dirty, hackish Opera select-as-you-drag fix.
         if (window.opera && document.documentElement) {
         if (window.opera && document.documentElement) {
             var oDF = document.getElementById('op-drag-fix');
             var oDF = document.getElementById('op-drag-fix');
@@ -243,65 +156,77 @@ Simplified and modified for Converse.js by JC Brand https://opkode.com
             }
             }
             oDF.focus();
             oDF.focus();
         }
         }
+    };
+
+    DragResize.prototype.resizeElement = function (e) {
+        // Let it create an object representing the drag offsets.
+        var resize = this.resizeHandleDrag(e) ? true : false;
+        // Assign new info back to the element, with minimum dimensions.
+        this.element.style.width =  this.elmW + 'px';
+        this.element.style.height = this.elmH + 'px';
+        this.operaHack();
+        return e;
+    };
 
 
-        if (ondragmove) this.ondragmove(isResize);
-        // Stop a normal drag event.
-        cancelEvent(e);
-    }};
 
 
+    DragResize.prototype.mouseMove = function (e) {
+        /* Continuously offsets the dragged element by the difference between the
+         * previous mouse position and the current mouse position.
+         */
+        if (!this.enabled) return true;
+        if (!this.handle) {
+            // We're not dragging anything
+            this.updateMouseCoordinates(e);
+            return true;
+        }
+        cancelEvent(this.resizeElement(e));
+    };
 
 
-    DragResize.prototype.mouseUp = function(e) { with (this) {
-        // On mouseup, stop dragging, but don't reset handler visibility.
-        if (!document.getElementById || !enabled) return;
 
 
-        var hRE = new RegExp(myName + '-([trmbl]{2})', '');
-        if (handle && ondragend) this.ondragend(hRE.test(handle.className));
-        deselect(false);
-    }};
+    DragResize.prototype.mouseUp = function(e) {
+        with (this) {
+            // On mouseup, stop dragging, but don't reset handler visibility.
+            if (!document.getElementById || !enabled) return;
+            var hRE = new RegExp(myName + '-([trmbl]{2})', '');
+            if (handle && ondragend) this.ondragend(hRE.test(handle.className));
+            deselect(false);
+        }
+    };
 
 
-    DragResize.prototype.resizeHandleDrag = function(diffX, diffY) { with (this) {
-        // Passed the mouse movement amounts. This function checks to see whether the
-        // drag is from a resize handle created above; if so, it changes the stored
-        // elm* dimensions and mOffX/Y.
 
 
-        var hClass = handle && handle.className &&
-            handle.className.match(new RegExp(myName + '-([tmblr]{2})')) ? RegExp.$1 : '';
+    DragResize.prototype.resizeHandleDrag = function(e) {
+        /* Checks to see whether the
+         * drag is from a resize handle created above; if so, it changes the stored
+         * elm* dimensions and mOffX/Y.
+         */
+        var x = e.pageX || e.clientX + document.documentElement.scrollLeft;
+        var y = e.pageY || e.clientY + document.documentElement.scrollTop;
+        var diffX = x - this.lastMouseX + this.mOffX;
+        var diffY = y - this.lastMouseY + this.mOffY;
+        var hClass = this.handle &&
+                this.handle.className &&
+                this.handle.className.match(new RegExp(this.myName + '-([tmblr]{2})')) ? RegExp.$1 : '';
 
 
-        // If the hClass is one of the resize handles, resize one or two dimensions.
-        // Bounds checking is the hard bit -- basically for each edge, check that the
-        // element doesn't go under minimum size, and doesn't go beyond its boundary.
-        var dY = diffY, dX = diffX, processed = false;
-        if (hClass.indexOf('t') >= 0) {
-            rs = 1;
-            if (elmH - dY < minHeight) mOffY = (dY - (diffY = elmH - minHeight));
-            else if (elmY + dY < minTop) mOffY = (dY - (diffY = minTop - elmY));
-            elmY += diffY;
-            elmH -= diffY;
-            processed = true;
-        }
-        if (hClass.indexOf('b') >= 0) {
-            rs = 1;
-            if (elmH + dY < minHeight) mOffY = (dY - (diffY = minHeight - elmH));
-            else if (elmY + elmH + dY > maxTop) mOffY = (dY - (diffY = maxTop - elmY - elmH));
-            elmH += diffY;
-            processed = true;
-        }
-        if (hClass.indexOf('l') >= 0) {
-            rs = 1;
-            if (elmW - dX < minWidth) mOffX = (dX - (diffX = elmW - minWidth));
-            else if (elmX + dX < minLeft) mOffX = (dX - (diffX = minLeft - elmX));
-            elmX += diffX;
-            elmW -= diffX;
-            processed = true;
-        }
-        if (hClass.indexOf('r') >= 0) {
-            rs = 1;
-            if (elmW + dX < minWidth) mOffX = (dX - (diffX = minWidth - elmW));
-            else if (elmX + elmW + dX > maxLeft) mOffX = (dX - (diffX = maxLeft - elmX - elmW));
-            elmW += diffX;
-            processed = true;
+        with (this) {
+            // If the hClass is one of the resize handles, resize one or two dimensions.
+            // Bounds checking is the hard bit -- basically for each edge, check that the
+            // element doesn't go under minimum size, and doesn't go beyond its boundary.
+            var dY = diffY, dX = diffX, processed = false;
+            if (hClass.indexOf('t') >= 0) {
+                rs = 1;
+                if (elmH - dY < minHeight) mOffY = (dY - (diffY = elmH - minHeight));
+                elmH -= diffY;
+                processed = true;
+            }
+            if (hClass.indexOf('b') >= 0) {
+                rs = 1;
+                if (elmH + dY < minHeight) mOffY = (dY - (diffY = minHeight - elmH));
+                elmH += diffY;
+                processed = true;
+            }
+            this.updateMouseCoordinates(e);
+            return processed;
         }
         }
-        return processed;
-    }};
+    };
     return DragResize;
     return DragResize;
 }));
 }));