Merge "[FileBackend] Changed copy script to use batches for concurrency."
[lhc/web/wiklou.git] / resources / jquery.ui / jquery.ui.resizable.js
index 0a782bb..904be47 100644 (file)
@@ -1,9 +1,9 @@
-/*
- * jQuery UI Resizable 1.8.2
+/*!
+ * jQuery UI Resizable 1.8.21
  *
- * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
  *
  * http://docs.jquery.com/UI/Resizables
  *
@@ -12,7 +12,7 @@
  *     jquery.ui.mouse.js
  *     jquery.ui.widget.js
  */
-(function($) {
+(function( $, undefined ) {
 
 $.widget("ui.resizable", $.ui.mouse, {
        widgetEventPrefix: "resize",
@@ -50,10 +50,6 @@ $.widget("ui.resizable", $.ui.mouse, {
                //Wrap the element if it cannot hold child nodes
                if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
 
-                       //Opera fix for relative positioning
-                       if (/relative/.test(this.element.css('position')) && $.browser.opera)
-                               this.element.css({ position: 'relative', top: 'auto', left: 'auto' });
-
                        //Create a wrapper element and set the wrapper to the new current internal element
                        this.element.wrap(
                                $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
@@ -102,9 +98,8 @@ $.widget("ui.resizable", $.ui.mouse, {
                                var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
                                var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
 
-                               // increase zIndex of sw, se, ne, nw axis
-                               //TODO : this modifies original option
-                               if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex });
+                               // Apply zIndex to all handles - see #7960
+                               axis.css({ zIndex: o.zIndex });
 
                                //TODO : What's going on here?
                                if ('se' == handle) {
@@ -176,10 +171,12 @@ $.widget("ui.resizable", $.ui.mouse, {
                        $(this.element)
                                .addClass("ui-resizable-autohide")
                                .hover(function() {
+                                       if (o.disabled) return;
                                        $(this).removeClass("ui-resizable-autohide");
                                        self._handles.show();
                                },
                                function(){
+                                       if (o.disabled) return;
                                        if (!self.resizing) {
                                                $(this).addClass("ui-resizable-autohide");
                                                self._handles.hide();
@@ -245,10 +242,6 @@ $.widget("ui.resizable", $.ui.mouse, {
                        el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
                }
 
-               //Opera fixing relative position
-               if ($.browser.opera && (/relative/).test(el.css('position')))
-                       el.css({ position: 'relative', top: 'auto', left: 'auto' });
-
                this._renderProxy();
 
                var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
@@ -291,6 +284,8 @@ $.widget("ui.resizable", $.ui.mouse, {
                // Calculate the attrs that will be change
                var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
 
+               // Put this in the mouseDrag handler since the user can start pressing shift while resizing
+               this._updateVirtualBoundaries(event.shiftKey);
                if (this._aspectRatio || event.shiftKey)
                        data = this._updateRatio(data, event);
 
@@ -322,10 +317,10 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                if(this._helper) {
                        var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
-                                               soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
-                                                       soffsetw = ista ? 0 : self.sizeDiff.width;
+                               soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,
+                               soffsetw = ista ? 0 : self.sizeDiff.width;
 
-                       var s = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },
+                       var s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },
                                left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
                                top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
 
@@ -349,6 +344,32 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        },
 
+    _updateVirtualBoundaries: function(forceAspectRatio) {
+        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
+
+        b = {
+            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+        };
+
+        if(this._aspectRatio || forceAspectRatio) {
+            // We want to create an enclosing box whose aspect ration is the requested one
+            // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+            pMinWidth = b.minHeight * this.aspectRatio;
+            pMinHeight = b.minWidth / this.aspectRatio;
+            pMaxWidth = b.maxHeight * this.aspectRatio;
+            pMaxHeight = b.maxWidth / this.aspectRatio;
+
+            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+        }
+        this._vBoundaries = b;
+    },
+
        _updateCache: function(data) {
                var o = this.options;
                this.offset = this.helper.offset();
@@ -362,8 +383,8 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
 
-               if (data.height) data.width = (csize.height * this.aspectRatio);
-               else if (data.width) data.height = (csize.width / this.aspectRatio);
+               if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
+               else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
 
                if (a == 'sw') {
                        data.left = cpos.left + (csize.width - data.width);
@@ -379,7 +400,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        _respectSize: function(data, event) {
 
-               var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
+               var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
                                ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
                                        isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
 
@@ -519,7 +540,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 });
 
 $.extend($.ui.resizable, {
-       version: "1.8.2"
+       version: "1.8.21"
 });
 
 /*
@@ -528,28 +549,28 @@ $.extend($.ui.resizable, {
 
 $.ui.plugin.add("resizable", "alsoResize", {
 
-       start: function(event, ui) {
-
+       start: function (event, ui) {
                var self = $(this).data("resizable"), o = self.options;
 
-               var _store = function(exp) {
+               var _store = function (exp) {
                        $(exp).each(function() {
-                               $(this).data("resizable-alsoresize", {
-                                       width: parseInt($(this).width(), 10), height: parseInt($(this).height(), 10),
-                                       left: parseInt($(this).css('left'), 10), top: parseInt($(this).css('top'), 10)
+                               var el = $(this);
+                               el.data("resizable-alsoresize", {
+                                       width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+                                       left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10)
                                });
                        });
                };
 
                if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
-                       if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0];      _store(o.alsoResize); }
-                       else { $.each(o.alsoResize, function(exp, c) { _store(exp); }); }
+                       if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
+                       else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
                }else{
                        _store(o.alsoResize);
                }
        },
 
-       resize: function(event, ui){
+       resize: function (event, ui) {
                var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition;
 
                var delta = {
@@ -557,43 +578,30 @@ $.ui.plugin.add("resizable", "alsoResize", {
                        top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0
                },
 
-               _alsoResize = function(exp, c) {
+               _alsoResize = function (exp, c) {
                        $(exp).each(function() {
-                               var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, css = c && c.length ? c : ['width', 'height', 'top', 'left'];
+                               var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, 
+                                       css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
 
-                               $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) {
+                               $.each(css, function (i, prop) {
                                        var sum = (start[prop]||0) + (delta[prop]||0);
                                        if (sum && sum >= 0)
                                                style[prop] = sum || null;
                                });
 
-                               //Opera fixing relative position
-                               if (/relative/.test(el.css('position')) && $.browser.opera) {
-                                       self._revertToRelativePosition = true;
-                                       el.css({ position: 'absolute', top: 'auto', left: 'auto' });
-                               }
-
                                el.css(style);
                        });
                };
 
                if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
-                       $.each(o.alsoResize, function(exp, c) { _alsoResize(exp, c); });
+                       $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
                }else{
                        _alsoResize(o.alsoResize);
                }
        },
 
-       stop: function(event, ui){
-               var self = $(this).data("resizable");
-
-               //Opera fixing relative position
-               if (self._revertToRelativePosition && $.browser.opera) {
-                       self._revertToRelativePosition = false;
-                       el.css({ position: 'relative' });
-               }
-
-               $(this).removeData("resizable-alsoresize-start");
+       stop: function (event, ui) {
+               $(this).removeData("resizable-alsoresize");
        }
 });
 
@@ -682,13 +690,13 @@ $.ui.plugin.add("resizable", "containment", {
 
                if (cp.left < (self._helper ? co.left : 0)) {
                        self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));
-                       if (pRatio) self.size.height = self.size.width / o.aspectRatio;
+                       if (pRatio) self.size.height = self.size.width / self.aspectRatio;
                        self.position.left = o.helper ? co.left : 0;
                }
 
                if (cp.top < (self._helper ? co.top : 0)) {
                        self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);
-                       if (pRatio) self.size.width = self.size.height * o.aspectRatio;
+                       if (pRatio) self.size.width = self.size.height * self.aspectRatio;
                        self.position.top = self._helper ? co.top : 0;
                }