Add missing SVN properties for new or modified files
authorMichael Stucki <michael.stucki@typo3.org>
Wed, 25 Nov 2009 14:49:14 +0000 (14:49 +0000)
committerMichael Stucki <michael.stucki@typo3.org>
Wed, 25 Nov 2009 14:49:14 +0000 (14:49 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@6539 709f56b5-9817-0410-a4d7-c38de5d9e867

t3lib/js/extjs/ux/ext.resizable.js
t3lib/js/extjs/ux/resize.css
t3lib/js/jsfunc.tceforms_suggest.js
typo3/mod/web/perm/perm.js
typo3/sysext/rtehtmlarea/res/contentcss/default.css
typo3/sysext/scheduler/res/tx_scheduler_be.css
typo3/sysext/scheduler/res/tx_scheduler_be.js
typo3/sysext/sv/reports/tx_sv_report.css

index 23bac0b..42ad348 100644 (file)
-/**\r
- *\r
- * Ext.ux.EventZone Extension Class for Ext 3.x Library\r
- *\r
- * @author  Nigel White\r
- *\r
- * @license Ext.ux.EventZone is licensed under the terms of\r
- * the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent\r
- * that the code/component(s) do NOT become part of another Open Source or Commercially\r
- * licensed development library or toolkit without explicit permission.\r
- * \r
- * License details: http://www.gnu.org/licenses/lgpl.html\r
- *\r
- * @class Ext.ux.EventZone\r
- * <p>This class implements a "virtual element" at a relative size and position\r
- * <i>within</i> an existing element. It provides mouse events from a zone of an element of\r
- * defined dimensions.</p>\r
- * <p>The zone is defined using <code>top</code>, <code>right</code>, <code>bottom</code>,\r
- * <code>left</code>, <code>width</code> and <code>height</code> options which specify\r
- * the bounds of the zone in a similar manner to the CSS style properties of those names.</p>\r
- * @cfg {String|HtmlElement} el The element in which to create the zone.\r
- * @cfg {Array} points An Array of points within the element defining the event zone.\r
- * @cfg {Number} top The top of the zone. If negative means an offset from the bottom.\r
- * @cfg {Number} right The right of the zone. If negative means an offset from the right.\r
- * @cfg {Number} left The left of the zone. If negative means an offset from the right.\r
- * @cfg {Number} bottom The bottom of the zone. If negative means an offset from the bottom.\r
- * @cfg {Number} width The width of the zone.\r
- * @cfg {Number} height The height of the zone.\r
- * @constructor\r
- * Create a new EventZone\r
- * @param {Object} config The config object.\r
- */\r
-Ext.ux.EventZone = Ext.extend(Ext.util.Observable, {\r
-\r
-    constructor: function(config) {\r
-        this.initialConfig = config;\r
-        this.addEvents(\r
-            /**\r
-             * @event mouseenter\r
-             * This event fires when the mouse enters the zone.\r
-             * @param {EventObject} e the underlying mouse event.\r
-             * @param {EventZone} this\r
-             */\r
-            'mouseenter',\r
-            /**\r
-             * @event mousedown\r
-             * This event fires when the mouse button is depressed within the zone.\r
-             * @param {EventObject} e the underlying mouse event.\r
-             * @param {EventZone} this\r
-             */\r
-            'mousedown',\r
-            /**\r
-             * @event mousemove\r
-             * This event fires when the mouse moves within the zone.\r
-             * @param {EventObject} e the underlying mouse event.\r
-             * @param {EventZone} this\r
-             */\r
-            'mousemove',\r
-            /**\r
-             * @event mouseup\r
-             * This event fires when the mouse button is released within the zone.\r
-             * @param {EventObject} e the underlying mouse event.\r
-             * @param {EventZone} this\r
-             */\r
-            'mouseup',\r
-            /**\r
-             * @event mouseenter\r
-             * This event fires when the mouse is clicked within the zone.\r
-             * @param {EventObject} e the underlying mouse event.\r
-             * @param {EventZone} this\r
-             */\r
-            'click',\r
-            /**\r
-             * @event mouseleave\r
-             * This event fires when the mouse leaves the zone.\r
-             * @param {EventObject} e the underlying mouse event.\r
-             * @param {EventZone} this\r
-             */\r
-            'mouseleave'\r
-        );\r
-        Ext.apply(this, config);\r
-        this.el = Ext.get(this.el);\r
-\r
-//      If a polygon within the element is specified...\r
-        if (this.points) {\r
-            this.polygon = new Ext.lib.Polygon(this.points);\r
-            this.points = this.polygon.points;\r
-        }\r
-\r
-        Ext.ux.EventZone.superclass.constructor.call(this);\r
-        this.el.on({\r
-            mouseenter: this.handleMouseEvent,\r
-            mousedown: this.handleMouseEvent,\r
-            mousemove: this.handleMouseEvent,\r
-            mouseup: this.handleMouseEvent,\r
-            click: this.handleMouseEvent,\r
-            mouseleave: this.handleMouseEvent,\r
-            scope: this\r
-        });\r
-    },\r
-\r
-    handleMouseEvent: function(e) {\r
-        var r = this.polygon ? this.getPolygon() : this.getRegion();\r
-        var inBounds = r.contains(e.getPoint());\r
-\r
-        switch (e.type) {\r
-            // mouseenter fires this\r
-            case 'mouseover':\r
-               if (inBounds) {\r
-                   this.mouseIn = true;\r
-                   this.fireEvent('mouseenter', e, this);\r
-               }\r
-               break;\r
-            // mouseleave fires this\r
-            case 'mouseout':\r
-               this.mouseIn = false;\r
-               this.fireEvent('mouseleave', e, this);\r
-               break;\r
-           case 'mousemove':\r
-               if (inBounds) {\r
-                   if (this.mouseIn) {\r
-                       this.fireEvent('mousemove', e, this);\r
-                   } else {\r
-                       this.mouseIn = true;\r
-                       this.fireEvent('mouseenter', e, this);\r
-                   }\r
-               } else {\r
-                   if (this.mouseIn) {\r
-                       this.mouseIn = false;\r
-                       this.fireEvent('mouseleave', e, this);\r
-                   }\r
-               }\r
-               break;\r
-           default:\r
-               if (inBounds) {\r
-                   this.fireEvent(e.type, e, this);\r
-               }\r
-        }\r
-    },\r
-\r
-    getPolygon: function() {\r
-        var xy = this.el.getXY();\r
-        return this.polygon.translate(xy[0], xy[1]);\r
-    },\r
-\r
-    getRegion: function() {\r
-        var r = this.el.getRegion();\r
-\r
-//      Adjust left boundary of region\r
-        if (Ext.isNumber(this.left)) {\r
-            if (this.left < 0) {\r
-                r.left = r.right + this.left;\r
-            } else {\r
-                r.left += this.left;\r
-            }\r
-        }\r
-\r
-//      Adjust right boundary of region\r
-        if (Ext.isNumber(this.width)) {\r
-            r.right = r.left + this.width;\r
-        } else if (Ext.isNumber(this.right)) {\r
-            r.right = (this.right < 0) ? r.right + this.right : r.left + this.right;\r
-        }\r
-\r
-//      Adjust top boundary of region\r
-        if (Ext.isNumber(this.top)) {\r
-            if (this.top < 0) {\r
-                r.top = r.bottom + this.top;\r
-            } else {\r
-                r.top += this.top;\r
-            }\r
-        }\r
-\r
-//      Adjust bottom boundary of region\r
-        if (Ext.isNumber(this.height)) {\r
-            r.bottom = r.top + this.height;\r
-        } else if (Ext.isNumber(this.bottom)) {\r
-            r.bottom = (this.bottom < 0) ? r.bottom + this.bottom : r.top + this.bottom;\r
-        }\r
-\r
-        return r;\r
-    }\r
-});\r
-\r
-/**\r
- * @class Ext.lib.Polygon\r
- * <p>This class encapsulates an absolute area of the document bounded by a list of points.</p>\r
- * @constructor\r
- * Create a new Polygon\r
- * @param {Object} points An Array of <code>[n,n]</code> point specification Arrays, or\r
- * an Array of Ext.lib.Points, or an HtmlElement, or an Ext.lib.Region.\r
- */\r
-Ext.lib.Polygon = Ext.extend(Ext.lib.Region, {\r
-    constructor: function(points) {\r
-        var i, l, el;\r
-        if (l = points.length) {\r
-            if (points[0].x) {\r
-                for (i = 0; i < l; i++) {\r
-                    points[i] = [ points[i].x, points[i].y ];\r
-                }\r
-            }\r
-            this.points = points;\r
-        } else {\r
-            if (el = Ext.get(points)) {\r
-                points = Ext.lib.Region.getRegion(el.dom);\r
-            }\r
-            if (points instanceof Ext.lib.Region) {\r
-                this.points = [\r
-                    [points.left, points.top],\r
-                    [points.right, points.top],\r
-                    [points.right, points.bottom],\r
-                    [points.left, points.bottom]\r
-                ];\r
-            }\r
-        }\r
-    },\r
-\r
-    /**\r
-     * Returns a new Polygon translated by the specified <code>X</code> and <code>Y</code> increments.\r
-     * @param xDelta {Number} The <code>X</code> translation increment.\r
-     * @param xDelta {Number} The <code>Y</code> translation increment.\r
-     * @return {Polygon} The resulting Polygon.\r
-     */\r
-    translate: function(xDelta, yDelta) {\r
-        var r = [], p = this.points, l = p.length, i;\r
-        for (i = 0; i < l; i++) {\r
-            r[i] = [ p[i][0] + xDelta, p[i][1] + yDelta ];\r
-        }\r
-        return new Ext.lib.Polygon(r);\r
-    },\r
-\r
-    /**\r
-     * Returns the area of this Polygon.\r
-     */\r
-    getArea: function() {\r
-        var p = this.points, l = p.length, area = 0, i, j = 0;\r
-        for (i = 0; i < l; i++) {\r
-            j++;\r
-            if (j == l) {\r
-                j = 0;\r
-            }\r
-            area += (p[i][0] + p[j][0]) * (p[i][1] - p[j][1]);\r
-        }\r
-        return area * 0.5;\r
-    },\r
-\r
-    /**\r
-     * Returns <code>true</code> if this Polygon contains the specified point. Thanks\r
-     * to http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html for the algorithm.\r
-     * @param pt {Point|Number} Either an Ext.lib.Point object, or the <code>X</code> coordinate to test.\r
-     * @param py {Number} <b>Optional.</b> If the first parameter was an <code>X</code> coordinate, this is the <code>Y</code> coordinate.\r
-     */\r
-    contains: function(pt, py) {\r
-        var f = (arguments.length == 1),\r
-            testX = f ? pt.x : pt,\r
-            testY = f ? pt.y : py,\r
-            p = this.points,\r
-            nvert = p.length,\r
-            j = nvert - 1,\r
-            i, j, c = false;\r
-        for (i = 0; i < nvert; j = i++) {\r
-            if ( ((p[i][1] > testY) != (p[j][1] > testY)) &&\r
-             (testX < (p[j][0]-p[i][0]) * (testY-p[i][1]) / (p[j][1]-p[i][1]) + p[i][0])) {\r
-                c = !c;\r
-            }\r
-        }\r
-        return c;\r
-    }\r
-});\r
-\r
-/**\r
- * @class Ext.Resizable\r
- * @extends Ext.util.Observable\r
- * This is an override of Ext.Resizable to make usage of the Ex.ux.EventZone\r
- * <p>Applies virtual drag handles to an element to make it resizable.</p>\r
- * <p>Here is the list of valid resize handles:</p>\r
- * <pre>\r
-Value   Description\r
-------  -------------------\r
- 'n'     north\r
- 's'     south\r
- 'e'     east\r
- 'w'     west\r
- 'nw'    northwest\r
- 'sw'    southwest\r
- 'se'    southeast\r
- 'ne'    northeast\r
- 'all'   all\r
-</pre>\r
- * <p>Here's an example showing the creation of a typical Resizable:</p>\r
- * <pre><code>\r
-var resizer = new Ext.Resizable('element-id', {\r
-    handles: 'all',\r
-    minWidth: 200,\r
-    minHeight: 100,\r
-    maxWidth: 500,\r
-    maxHeight: 400,\r
-    pinned: true\r
-});\r
-resizer.on('resize', myHandler);\r
-</code></pre>\r
- * <p>To hide a particular handle, set its display to none in CSS, or through script:<br>\r
- * resizer.east.setDisplayed(false);</p>\r
- * @constructor\r
- * Create a new resizable component\r
- * @param {Mixed} el The id or element to resize\r
- * @param {Object} config configuration options\r
-  */\r
-Ext.Resizable = function(el, config){\r
-    this.el = Ext.get(el);\r
-\r
-    /**\r
-     * The proxy Element that is resized in place of the real Element during the resize operation.\r
-     * This may be queried using {@link Ext.Element#getBox} to provide the new area to resize to.\r
-     * Read only.\r
-     * @type Ext.Element.\r
-     * @property proxy\r
-     */\r
-    this.proxy = this.el.createProxy({tag: 'div', cls: 'x-resizable-proxy', id: this.el.id + '-rzproxy'}, Ext.getBody());\r
-    this.proxy.unselectable();\r
-    this.proxy.enableDisplayMode('block');\r
-\r
-    Ext.apply(this, config);\r
-    \r
-    if(this.pinned){\r
-        this.disableTrackOver = true;\r
-        this.el.addClass('x-resizable-pinned');\r
-    }\r
-    // if the element isn't positioned, make it relative\r
-    var position = this.el.getStyle('position');\r
-    if(position != 'absolute' && position != 'fixed'){\r
-        this.el.setStyle('position', 'relative');\r
-    }\r
-    if(!this.handles){ // no handles passed, must be legacy style\r
-        this.handles = 's,e,se';\r
-        if(this.multiDirectional){\r
-            this.handles += ',n,w';\r
-        }\r
-    }\r
-    if(this.handles == 'all'){\r
-        this.handles = 'n s e w ne nw se sw';\r
-    }\r
-    var hs = this.handles.split(/\s*?[,;]\s*?| /);\r
-    var ps = Ext.Resizable.positions;\r
-    for(var i = 0, len = hs.length; i < len; i++){\r
-        if(hs[i] && ps[hs[i]]){\r
-            var pos = ps[hs[i]];\r
-            this[pos] = new Ext.Resizable.Handle(this, pos);\r
-        }\r
-    }\r
-    // legacy\r
-    this.corner = this.southeast;\r
-    \r
-    if(this.handles.indexOf('n') != -1 || this.handles.indexOf('w') != -1){\r
-        this.updateBox = true;\r
-    }   \r
-    this.activeHandle = null;\r
-\r
-    if(this.adjustments == 'auto'){\r
-        var hw = this.west, he = this.east, hn = this.north, hs = this.south;\r
-        this.adjustments = [\r
-            (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),\r
-            (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1 \r
-        ];\r
-    }\r
-\r
-    if(this.draggable){\r
-        this.dd = this.dynamic ? \r
-            this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});\r
-        this.dd.setHandleElId(this.el.id);\r
-    }\r
-\r
-    this.addEvents(\r
-        /**\r
-         * @event beforeresize\r
-         * Fired before resize is allowed. Set {@link #enabled} to false to cancel resize.\r
-         * @param {Ext.Resizable} this\r
-         * @param {Ext.EventObject} e The mousedown event\r
-         */\r
-        'beforeresize',\r
-        /**\r
-         * @event resize\r
-         * Fired after a resize.\r
-         * @param {Ext.Resizable} this\r
-         * @param {Number} width The new width\r
-         * @param {Number} height The new height\r
-         * @param {Ext.EventObject} e The mouseup event\r
-         */\r
-        'resize'\r
-    );\r
-    \r
-    if(this.width !== null && this.height !== null){\r
-        this.resizeTo(this.width, this.height);\r
-    }\r
-    if(Ext.isIE){\r
-        this.el.dom.style.zoom = 1;\r
-    }\r
-    Ext.Resizable.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.Resizable, Ext.util.Observable, {\r
-\r
-    /**\r
-     * @cfg {Array/String} adjustments String 'auto' or an array [width, height] with values to be <b>added</b> to the\r
-     * resize operation's new size (defaults to <tt>[0, 0]</tt>)\r
-     */\r
-    adjustments : [0, 0],\r
-    /**\r
-     * @cfg {Boolean} animate True to animate the resize (not compatible with dynamic sizing, defaults to false)\r
-     */\r
-    animate : false,\r
-    /**\r
-     * @cfg {Mixed} constrainTo Constrain the resize to a particular element\r
-     */\r
-    /**\r
-     * @cfg {Boolean} draggable Convenience to initialize drag drop (defaults to false)\r
-     */\r
-    draggable: false,\r
-    /**\r
-     * @cfg {Number} duration Animation duration if animate = true (defaults to 0.35)\r
-     */\r
-    duration : 0.35,\r
-    /**\r
-     * @cfg {Boolean} dynamic True to resize the element while dragging instead of using a proxy (defaults to false)\r
-     */\r
-    dynamic : false,\r
-    /**\r
-     * @cfg {String} easing Animation easing if animate = true (defaults to <tt>'easingOutStrong'</tt>)\r
-     */\r
-    easing : 'easeOutStrong',\r
-    /**\r
-     * @cfg {Boolean} enabled False to disable resizing (defaults to true)\r
-     */\r
-    enabled : true,\r
-    /**\r
-     * @property enabled Writable. False if resizing is disabled.\r
-     * @type Boolean \r
-     */\r
-    /**\r
-     * @cfg {String} handles String consisting of the resize handles to display (defaults to undefined).\r
-     * Specify either <tt>'all'</tt> or any of <tt>'n s e w ne nw se sw'</tt>.\r
-     */\r
-    handles : false,\r
-    /**\r
-     * @cfg {Boolean} multiDirectional <b>Deprecated</b>.  Deprecated style of adding multi-direction resize handles.\r
-     */\r
-    multiDirectional : false,\r
-    /**\r
-     * @cfg {Number} height The height of the element in pixels (defaults to null)\r
-     */\r
-    height : null,\r
-    /**\r
-     * @cfg {Number} width The width of the element in pixels (defaults to null)\r
-     */\r
-    width : null,\r
-    /**\r
-     * @cfg {Number} heightIncrement The increment to snap the height resize in pixels\r
-     * (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.\r
-     */\r
-    heightIncrement : 0,\r
-    /**\r
-     * @cfg {Number} widthIncrement The increment to snap the width resize in pixels\r
-     * (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.\r
-     */\r
-    widthIncrement : 0,\r
-    /**\r
-     * @cfg {Number} minHeight The minimum height for the element (defaults to 5)\r
-     */\r
-    minHeight : 5,\r
-    /**\r
-     * @cfg {Number} minWidth The minimum width for the element (defaults to 5)\r
-     */\r
-    minWidth : 5,\r
-    /**\r
-     * @cfg {Number} maxHeight The maximum height for the element (defaults to 10000)\r
-     */\r
-    maxHeight : 10000,\r
-    /**\r
-     * @cfg {Number} maxWidth The maximum width for the element (defaults to 10000)\r
-     */\r
-    maxWidth : 10000,\r
-    /**\r
-     * @cfg {Number} minX The minimum x for the element (defaults to 0)\r
-     */\r
-    minX: 0,\r
-    /**\r
-     * @cfg {Number} minY The minimum x for the element (defaults to 0)\r
-     */\r
-    minY: 0,\r
-    /**\r
-     * @cfg {Boolean} pinned True to ensure that the resize handles are always visible, false to display them only when the\r
-     * user mouses over the resizable borders. This is only applied at config time. (defaults to false)\r
-     */\r
-    pinned : false,\r
-    /**\r
-     * @cfg {Boolean} preserveRatio True to preserve the original ratio between height\r
-     * and width during resize (defaults to false)\r
-     */\r
-    preserveRatio : false,\r
-    /**\r
-     * @cfg {Ext.lib.Region} resizeRegion Constrain the resize to a particular region\r
-     */\r
-\r
-    \r
-    /**\r
-     * Perform a manual resize and fires the 'resize' event.\r
-     * @param {Number} width\r
-     * @param {Number} height\r
-     */\r
-    resizeTo : function(width, height){\r
-        this.el.setSize(width, height);\r
-        this.fireEvent('resize', this, width, height, null);\r
-    },\r
-\r
-    // private\r
-    startSizing : function(e, handle){\r
-        this.fireEvent('beforeresize', this, e);\r
-        if(this.enabled){ // 2nd enabled check in case disabled before beforeresize handler\r
-            e.stopEvent();\r
-\r
-            Ext.getDoc().on({\r
-                scope: this,\r
-                mousemove: this.onMouseMove,\r
-                mouseup: {\r
-                    fn: this.onMouseUp,\r
-                    single: true,\r
-                    scope: this\r
-                }\r
-            });\r
-            Ext.getBody().addClass('ux-resizable-handle-' + handle.position);\r
-\r
-            this.resizing = true;\r
-            this.startBox = this.el.getBox();\r
-            this.startPoint = e.getXY();\r
-            this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],\r
-                            (this.startBox.y + this.startBox.height) - this.startPoint[1]];\r
-\r
-            if(this.constrainTo) {\r
-                var ct = Ext.get(this.constrainTo);\r
-                this.resizeRegion = ct.getRegion().adjust(\r
-                    ct.getFrameWidth('t'),\r
-                    ct.getFrameWidth('l'),\r
-                    -ct.getFrameWidth('b'),\r
-                    -ct.getFrameWidth('r')\r
-                );\r
-            }\r
-\r
-            this.proxy.setStyle('visibility', 'hidden'); // workaround display none\r
-            this.proxy.show();\r
-            this.proxy.setBox(this.startBox);\r
-            if(!this.dynamic){\r
-                this.proxy.setStyle('visibility', 'visible');\r
-            }\r
-        }\r
-    },\r
-\r
-    // private\r
-    onMouseDown : function(handle, e){\r
-        if(this.enabled && !this.activeHandle){\r
-            e.stopEvent();\r
-            this.activeHandle = handle;\r
-            this.startSizing(e, handle);\r
-        }\r
-    },\r
-\r
-    // private\r
-    onMouseUp : function(e){\r
-        Ext.getBody().removeClass('ux-resizable-handle-' + this.activeHandle.position)\r
-            .un('mousemove', this.onMouseMove, this);\r
-        var size = this.resizeElement();\r
-        this.resizing = false;\r
-        this.handleOut(this.activeHandle);\r
-        this.proxy.hide();\r
-        this.fireEvent('resize', this, size.width, size.height, e);\r
-        this.activeHandle = null;\r
-    },\r
-\r
-    // private\r
-    snap : function(value, inc, min){\r
-        if(!inc || !value){\r
-            return value;\r
-        }\r
-        var newValue = value;\r
-        var m = value % inc;\r
-        if(m > 0){\r
-            if(m > (inc/2)){\r
-                newValue = value + (inc-m);\r
-            }else{\r
-                newValue = value - m;\r
-            }\r
-        }\r
-        return Math.max(min, newValue);\r
-    },\r
-\r
-    /**\r
-     * <p>Performs resizing of the associated Element. This method is called internally by this\r
-     * class, and should not be called by user code.</p>\r
-     * <p>If a Resizable is being used to resize an Element which encapsulates a more complex UI\r
-     * component such as a Panel, this method may be overridden by specifying an implementation\r
-     * as a config option to provide appropriate behaviour at the end of the resize operation on\r
-     * mouseup, for example resizing the Panel, and relaying the Panel's content.</p>\r
-     * <p>The new area to be resized to is available by examining the state of the {@link #proxy}\r
-     * Element. Example:\r
-<pre><code>\r
-new Ext.Panel({\r
-    title: 'Resize me',\r
-    x: 100,\r
-    y: 100,\r
-    renderTo: Ext.getBody(),\r
-    floating: true,\r
-    frame: true,\r
-    width: 400,\r
-    height: 200,\r
-    listeners: {\r
-        render: function(p) {\r
-            new Ext.Resizable(p.getEl(), {\r
-                handles: 'all',\r
-                pinned: true,\r
-                transparent: true,\r
-                resizeElement: function() {\r
-                    var box = this.proxy.getBox();\r
-                    p.updateBox(box);\r
-                    if (p.layout) {\r
-                        p.doLayout();\r
-                    }\r
-                    return box;\r
-                }\r
-           });\r
-       }\r
-    }\r
-}).show();\r
-</code></pre>\r
-     */\r
-    resizeElement : function(){\r
-        var box = this.proxy.getBox();\r
-        if(this.updateBox){\r
-            this.el.setBox(box, false, this.animate, this.duration, null, this.easing);\r
-        }else{\r
-            this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);\r
-        }\r
-        if(!this.dynamic){\r
-            this.proxy.hide();\r
-        }\r
-        return box;\r
-    },\r
-\r
-    // private\r
-    constrain : function(v, diff, m, mx){\r
-        if(v - diff < m){\r
-            diff = v - m;    \r
-        }else if(v - diff > mx){\r
-            diff = v - mx; \r
-        }\r
-        return diff;                \r
-    },\r
-\r
-    // private\r
-    onMouseMove : function(e){\r
-        if(this.enabled && this.activeHandle){\r
-            try{// try catch so if something goes wrong the user doesn't get hung\r
-\r
-            if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {\r
-                return;\r
-            }\r
-\r
-            //var curXY = this.startPoint;\r
-            var curSize = this.curSize || this.startBox,\r
-                x = this.startBox.x, y = this.startBox.y,\r
-                ox = x, \r
-                oy = y,\r
-                w = curSize.width, \r
-                h = curSize.height,\r
-                ow = w, \r
-                oh = h,\r
-                mw = this.minWidth, \r
-                mh = this.minHeight,\r
-                mxw = this.maxWidth, \r
-                mxh = this.maxHeight,\r
-                wi = this.widthIncrement,\r
-                hi = this.heightIncrement,\r
-                eventXY = e.getXY(),\r
-                diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0])),\r
-                diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1])),\r
-                pos = this.activeHandle.position,\r
-                tw,\r
-                th;\r
-            \r
-            switch(pos){\r
-                case 'east':\r
-                    w += diffX; \r
-                    w = Math.min(Math.max(mw, w), mxw);\r
-                    break;\r
-                case 'south':\r
-                    h += diffY;\r
-                    h = Math.min(Math.max(mh, h), mxh);\r
-                    break;\r
-                case 'southeast':\r
-                    w += diffX; \r
-                    h += diffY;\r
-                    w = Math.min(Math.max(mw, w), mxw);\r
-                    h = Math.min(Math.max(mh, h), mxh);\r
-                    break;\r
-                case 'north':\r
-                    diffY = this.constrain(h, diffY, mh, mxh);\r
-                    y += diffY;\r
-                    h -= diffY;\r
-                    break;\r
-                case 'west':\r
-                    diffX = this.constrain(w, diffX, mw, mxw);\r
-                    x += diffX;\r
-                    w -= diffX;\r
-                    break;\r
-                case 'northeast':\r
-                    w += diffX; \r
-                    w = Math.min(Math.max(mw, w), mxw);\r
-                    diffY = this.constrain(h, diffY, mh, mxh);\r
-                    y += diffY;\r
-                    h -= diffY;\r
-                    break;\r
-                case 'northwest':\r
-                    diffX = this.constrain(w, diffX, mw, mxw);\r
-                    diffY = this.constrain(h, diffY, mh, mxh);\r
-                    y += diffY;\r
-                    h -= diffY;\r
-                    x += diffX;\r
-                    w -= diffX;\r
-                    break;\r
-               case 'southwest':\r
-                    diffX = this.constrain(w, diffX, mw, mxw);\r
-                    h += diffY;\r
-                    h = Math.min(Math.max(mh, h), mxh);\r
-                    x += diffX;\r
-                    w -= diffX;\r
-                    break;\r
-            }\r
-            \r
-            var sw = this.snap(w, wi, mw);\r
-            var sh = this.snap(h, hi, mh);\r
-            if(sw != w || sh != h){\r
-                switch(pos){\r
-                    case 'northeast':\r
-                        y -= sh - h;\r
-                    break;\r
-                    case 'north':\r
-                        y -= sh - h;\r
-                        break;\r
-                    case 'southwest':\r
-                        x -= sw - w;\r
-                    break;\r
-                    case 'west':\r
-                        x -= sw - w;\r
-                        break;\r
-                    case 'northwest':\r
-                        x -= sw - w;\r
-                        y -= sh - h;\r
-                    break;\r
-                }\r
-                w = sw;\r
-                h = sh;\r
-            }\r
-            \r
-            if(this.preserveRatio){\r
-                switch(pos){\r
-                    case 'southeast':\r
-                    case 'east':\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        w = ow * (h/oh);\r
-                       break;\r
-                    case 'south':\r
-                        w = ow * (h/oh);\r
-                        w = Math.min(Math.max(mw, w), mxw);\r
-                        h = oh * (w/ow);\r
-                        break;\r
-                    case 'northeast':\r
-                        w = ow * (h/oh);\r
-                        w = Math.min(Math.max(mw, w), mxw);\r
-                        h = oh * (w/ow);\r
-                    break;\r
-                    case 'north':\r
-                        tw = w;\r
-                        w = ow * (h/oh);\r
-                        w = Math.min(Math.max(mw, w), mxw);\r
-                        h = oh * (w/ow);\r
-                        x += (tw - w) / 2;\r
-                        break;\r
-                    case 'southwest':\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        tw = w;\r
-                        w = ow * (h/oh);\r
-                        x += tw - w;\r
-                        break;\r
-                    case 'west':\r
-                        th = h;\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        y += (th - h) / 2;\r
-                        tw = w;\r
-                        w = ow * (h/oh);\r
-                        x += tw - w;\r
-                       break;\r
-                    case 'northwest':\r
-                        tw = w;\r
-                        th = h;\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        w = ow * (h/oh);\r
-                        y += th - h;\r
-                        x += tw - w;\r
-                        break;\r
-                        \r
-                }\r
-            }\r
-            this.proxy.setBounds(x, y, w, h);\r
-            if(this.dynamic){\r
-                this.resizeElement();\r
-            }\r
-            }catch(ex){}\r
-        }\r
-    },\r
-\r
-    // private\r
-    handleOver : function(handle){\r
-        if(this.enabled){\r
-            Ext.getBody().addClass('ux-resizable-handle-' + handle.position);\r
-        }\r
-    },\r
-\r
-    // private\r
-    handleOut : function(handle){\r
-        if(!this.resizing){\r
-            Ext.getBody().removeClass('ux-resizable-handle-' + handle.position);\r
-        }\r
-    },\r
-    \r
-    /**\r
-     * Returns the element this component is bound to.\r
-     * @return {Ext.Element}\r
-     */\r
-    getEl : function(){\r
-        return this.el;\r
-    },\r
-\r
-    /**\r
-     * Destroys this resizable. If the element was wrapped and \r
-     * removeEl is not true then the element remains.\r
-     * @param {Boolean} removeEl (optional) true to remove the element from the DOM\r
-     */\r
-    destroy : function(removeEl){\r
-        Ext.destroy(this.dd, this.proxy);\r
-        this.proxy = null;\r
-        \r
-        var ps = Ext.Resizable.positions;\r
-        for(var k in ps){\r
-            if(typeof ps[k] != 'function' && this[ps[k]]){\r
-                this[ps[k]].destroy();\r
-            }\r
-        }\r
-        if(removeEl){\r
-            this.el.update('');\r
-            Ext.destroy(this.el);\r
-            this.el = null;\r
-        }\r
-        this.purgeListeners();\r
-    },\r
-\r
-    syncHandleHeight : function(){\r
-        var h = this.el.getHeight(true);\r
-        if(this.west){\r
-            this.west.el.setHeight(h);\r
-        }\r
-        if(this.east){\r
-            this.east.el.setHeight(h);\r
-        }\r
-    }\r
-});\r
-\r
-// private\r
-// hash to map config positions to true positions\r
-Ext.Resizable.positions = {\r
-    n: 'north', s: 'south', e: 'east', w: 'west', se: 'southeast', sw: 'southwest', nw: 'northwest', ne: 'northeast'\r
-};\r
-Ext.Resizable.cfg = {\r
-    north: {left: 7, right: -7, height: 7},\r
-    south: {left: 7, right: -7, top: -7},\r
-    east: {top: 7, bottom: -7, left: -7},\r
-    west: {top: 7, bottom: -7, width: 7},\r
-    southeast: {top: -7, left: -7},\r
-    southwest: {top: -7, width: 7},\r
-    northwest: {height: 7, width: 7},\r
-    northeast: {left: -7, height: 7}\r
-};\r
-\r
-// private\r
-Ext.Resizable.Handle = function(rz, pos){\r
-    this.position = pos;\r
-    this.rz = rz;\r
-    var cfg = Ext.Resizable.cfg[pos] || Ext.Resizable.cfg[Ext.Resizable.positions[pos]];\r
-    this.ez = new Ext.ux.EventZone(Ext.apply({\r
-        position: pos,\r
-        el: rz.el\r
-    }, cfg));\r
-    this.ez.on({\r
-        mousedown: this.onMouseDown,\r
-        mouseenter: this.onMouseOver,\r
-        mouseleave: this.onMouseOut,\r
-        scope: this\r
-    });\r
-};\r
-\r
-// private\r
-Ext.Resizable.Handle.prototype = {\r
-    cursor: 'move',\r
-\r
-    // private\r
-    afterResize : function(rz){\r
-        // do nothing    \r
-    },\r
-    // private\r
-    onMouseDown : function(e){\r
-        this.rz.onMouseDown(this, e);\r
-    },\r
-    // private\r
-    onMouseOver : function(e){\r
-        this.rz.handleOver(this, e);\r
-    },\r
-    // private\r
-    onMouseOut : function(e){\r
-        this.rz.handleOut(this, e);\r
-    },\r
-    // private\r
-    destroy : function(){\r
-        Ext.destroy(this.el);\r
-        this.el = null;\r
-    }\r
-};\r
-\r
-/**\r
-*\r
-* Ext.ux.elasticTextArea Extension Class for Ext 3.x Library\r
-*\r
-* @author  Steffen Kamper\r
-*\r
-* @license Ext.ux.elasticTextArea is licensed under the terms of\r
-* the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent\r
-* that the code/component(s) do NOT become part of another Open Source or Commercially\r
-* licensed development library or toolkit without explicit permission.\r
-* \r
-* License details: http://www.gnu.org/licenses/lgpl.html\r
-*\r
-*/\r
-Ext.ux.elasticTextArea = function(){\r
-    \r
-    var defaultConfig = function(){\r
-        return {\r
-            minHeight : 0\r
-            ,maxHeight : 0\r
-            ,growBy: 12\r
-        }\r
-    }\r
-    \r
-    var processOptions = function(config){\r
-        var o = defaultConfig();\r
-        var options = {};\r
-        Ext.apply(options, config, o);\r
-        \r
-        return options ;\r
-    }\r
-    \r
-    return {\r
-        div : null\r
-        ,applyTo: function(elementId, options){\r
-        \r
-            var el = Ext.get(elementId);\r
-            var width = el.getWidth();\r
-            var height = el.getHeight();\r
-            \r
-            var styles = el.getStyles('padding-top', 'padding-bottom', 'padding-left', 'padding-right', 'line-height', 'font-size', 'font-family', 'font-weight');\r
-\r
-            if(! this.div){\r
-                var options = processOptions(options);\r
-                \r
-                this.div = Ext.DomHelper.append(Ext.getBody() || document.body, {\r
-                    'id':elementId + '-preview-div'\r
-                    ,'tag' : 'div'\r
-                    ,'background': 'red'\r
-                    ,'style' : 'position: absolute; top: -100000px; left: -100000px;'\r
-                }, true)\r
-                Ext.DomHelper.applyStyles(this.div, styles);\r
-                \r
-                el.on('keyup', function() {\r
-                        this.applyTo(elementId, options);\r
-                }, this);\r
-            }\r
-            \r
-            //replace \n with <br>&nbsp; so that the enter key can trigger and height increase\r
-            //but first remove all previous entries, so that the height mesurement can be as accurate as possible\r
-            this.div.update( \r
-                    el.dom.value.replace(/<br \/>&nbsp;/, '<br />')\r
-                                .replace(/<|>/g, ' ')\r
-                                .replace(/&/g,"&amp;")\r
-                                .replace(/\n/g, '<br />&nbsp;') \r
-                    );\r
-            \r
-                       var growBy = parseInt(el.getStyle('line-height')) + 1;\r
-                       if (growBy === 1) {\r
-                               growBy = options.growBy;\r
-                       }\r
-                       var textHeight = this.div.getHeight() + growBy;\r
-            \r
-            if ( (textHeight > options.maxHeight ) && (options.maxHeight > 0) ){\r
-                textHeight = options.maxHeight ;\r
-                el.setStyle('overflow', 'auto');\r
-            }\r
-            if ( (textHeight < options.minHeight ) && (options.minHeight > 0) ) {\r
-                textHeight = options.minHeight ;\r
-                el.setStyle('overflow', 'auto');\r
-            }\r
-            \r
-            el.setHeight(textHeight , true);\r
-        }\r
-    }\r
-}\r
+/**
+ *
+ * Ext.ux.EventZone Extension Class for Ext 3.x Library
+ *
+ * @author  Nigel White
+ *
+ * @license Ext.ux.EventZone is licensed under the terms of
+ * the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent
+ * that the code/component(s) do NOT become part of another Open Source or Commercially
+ * licensed development library or toolkit without explicit permission.
+ * 
+ * License details: http://www.gnu.org/licenses/lgpl.html
+ *
+ * @class Ext.ux.EventZone
+ * <p>This class implements a "virtual element" at a relative size and position
+ * <i>within</i> an existing element. It provides mouse events from a zone of an element of
+ * defined dimensions.</p>
+ * <p>The zone is defined using <code>top</code>, <code>right</code>, <code>bottom</code>,
+ * <code>left</code>, <code>width</code> and <code>height</code> options which specify
+ * the bounds of the zone in a similar manner to the CSS style properties of those names.</p>
+ * @cfg {String|HtmlElement} el The element in which to create the zone.
+ * @cfg {Array} points An Array of points within the element defining the event zone.
+ * @cfg {Number} top The top of the zone. If negative means an offset from the bottom.
+ * @cfg {Number} right The right of the zone. If negative means an offset from the right.
+ * @cfg {Number} left The left of the zone. If negative means an offset from the right.
+ * @cfg {Number} bottom The bottom of the zone. If negative means an offset from the bottom.
+ * @cfg {Number} width The width of the zone.
+ * @cfg {Number} height The height of the zone.
+ * @constructor
+ * Create a new EventZone
+ * @param {Object} config The config object.
+ */
+Ext.ux.EventZone = Ext.extend(Ext.util.Observable, {
+
+    constructor: function(config) {
+        this.initialConfig = config;
+        this.addEvents(
+            /**
+             * @event mouseenter
+             * This event fires when the mouse enters the zone.
+             * @param {EventObject} e the underlying mouse event.
+             * @param {EventZone} this
+             */
+            'mouseenter',
+            /**
+             * @event mousedown
+             * This event fires when the mouse button is depressed within the zone.
+             * @param {EventObject} e the underlying mouse event.
+             * @param {EventZone} this
+             */
+            'mousedown',
+            /**
+             * @event mousemove
+             * This event fires when the mouse moves within the zone.
+             * @param {EventObject} e the underlying mouse event.
+             * @param {EventZone} this
+             */
+            'mousemove',
+            /**
+             * @event mouseup
+             * This event fires when the mouse button is released within the zone.
+             * @param {EventObject} e the underlying mouse event.
+             * @param {EventZone} this
+             */
+            'mouseup',
+            /**
+             * @event mouseenter
+             * This event fires when the mouse is clicked within the zone.
+             * @param {EventObject} e the underlying mouse event.
+             * @param {EventZone} this
+             */
+            'click',
+            /**
+             * @event mouseleave
+             * This event fires when the mouse leaves the zone.
+             * @param {EventObject} e the underlying mouse event.
+             * @param {EventZone} this
+             */
+            'mouseleave'
+        );
+        Ext.apply(this, config);
+        this.el = Ext.get(this.el);
+
+//      If a polygon within the element is specified...
+        if (this.points) {
+            this.polygon = new Ext.lib.Polygon(this.points);
+            this.points = this.polygon.points;
+        }
+
+        Ext.ux.EventZone.superclass.constructor.call(this);
+        this.el.on({
+            mouseenter: this.handleMouseEvent,
+            mousedown: this.handleMouseEvent,
+            mousemove: this.handleMouseEvent,
+            mouseup: this.handleMouseEvent,
+            click: this.handleMouseEvent,
+            mouseleave: this.handleMouseEvent,
+            scope: this
+        });
+    },
+
+    handleMouseEvent: function(e) {
+        var r = this.polygon ? this.getPolygon() : this.getRegion();
+        var inBounds = r.contains(e.getPoint());
+
+        switch (e.type) {
+            // mouseenter fires this
+            case 'mouseover':
+               if (inBounds) {
+                   this.mouseIn = true;
+                   this.fireEvent('mouseenter', e, this);
+               }
+               break;
+            // mouseleave fires this
+            case 'mouseout':
+               this.mouseIn = false;
+               this.fireEvent('mouseleave', e, this);
+               break;
+           case 'mousemove':
+               if (inBounds) {
+                   if (this.mouseIn) {
+                       this.fireEvent('mousemove', e, this);
+                   } else {
+                       this.mouseIn = true;
+                       this.fireEvent('mouseenter', e, this);
+                   }
+               } else {
+                   if (this.mouseIn) {
+                       this.mouseIn = false;
+                       this.fireEvent('mouseleave', e, this);
+                   }
+               }
+               break;
+           default:
+               if (inBounds) {
+                   this.fireEvent(e.type, e, this);
+               }
+        }
+    },
+
+    getPolygon: function() {
+        var xy = this.el.getXY();
+        return this.polygon.translate(xy[0], xy[1]);
+    },
+
+    getRegion: function() {
+        var r = this.el.getRegion();
+
+//      Adjust left boundary of region
+        if (Ext.isNumber(this.left)) {
+            if (this.left < 0) {
+                r.left = r.right + this.left;
+            } else {
+                r.left += this.left;
+            }
+        }
+
+//      Adjust right boundary of region
+        if (Ext.isNumber(this.width)) {
+            r.right = r.left + this.width;
+        } else if (Ext.isNumber(this.right)) {
+            r.right = (this.right < 0) ? r.right + this.right : r.left + this.right;
+        }
+
+//      Adjust top boundary of region
+        if (Ext.isNumber(this.top)) {
+            if (this.top < 0) {
+                r.top = r.bottom + this.top;
+            } else {
+                r.top += this.top;
+            }
+        }
+
+//      Adjust bottom boundary of region
+        if (Ext.isNumber(this.height)) {
+            r.bottom = r.top + this.height;
+        } else if (Ext.isNumber(this.bottom)) {
+            r.bottom = (this.bottom < 0) ? r.bottom + this.bottom : r.top + this.bottom;
+        }
+
+        return r;
+    }
+});
+
+/**
+ * @class Ext.lib.Polygon
+ * <p>This class encapsulates an absolute area of the document bounded by a list of points.</p>
+ * @constructor
+ * Create a new Polygon
+ * @param {Object} points An Array of <code>[n,n]</code> point specification Arrays, or
+ * an Array of Ext.lib.Points, or an HtmlElement, or an Ext.lib.Region.
+ */
+Ext.lib.Polygon = Ext.extend(Ext.lib.Region, {
+    constructor: function(points) {
+        var i, l, el;
+        if (l = points.length) {
+            if (points[0].x) {
+                for (i = 0; i < l; i++) {
+                    points[i] = [ points[i].x, points[i].y ];
+                }
+            }
+            this.points = points;
+        } else {
+            if (el = Ext.get(points)) {
+                points = Ext.lib.Region.getRegion(el.dom);
+            }
+            if (points instanceof Ext.lib.Region) {
+                this.points = [
+                    [points.left, points.top],
+                    [points.right, points.top],
+                    [points.right, points.bottom],
+                    [points.left, points.bottom]
+                ];
+            }
+        }
+    },
+
+    /**
+     * Returns a new Polygon translated by the specified <code>X</code> and <code>Y</code> increments.
+     * @param xDelta {Number} The <code>X</code> translation increment.
+     * @param xDelta {Number} The <code>Y</code> translation increment.
+     * @return {Polygon} The resulting Polygon.
+     */
+    translate: function(xDelta, yDelta) {
+        var r = [], p = this.points, l = p.length, i;
+        for (i = 0; i < l; i++) {
+            r[i] = [ p[i][0] + xDelta, p[i][1] + yDelta ];
+        }
+        return new Ext.lib.Polygon(r);
+    },
+
+    /**
+     * Returns the area of this Polygon.
+     */
+    getArea: function() {
+        var p = this.points, l = p.length, area = 0, i, j = 0;
+        for (i = 0; i < l; i++) {
+            j++;
+            if (j == l) {
+                j = 0;
+            }
+            area += (p[i][0] + p[j][0]) * (p[i][1] - p[j][1]);
+        }
+        return area * 0.5;
+    },
+
+    /**
+     * Returns <code>true</code> if this Polygon contains the specified point. Thanks
+     * to http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html for the algorithm.
+     * @param pt {Point|Number} Either an Ext.lib.Point object, or the <code>X</code> coordinate to test.
+     * @param py {Number} <b>Optional.</b> If the first parameter was an <code>X</code> coordinate, this is the <code>Y</code> coordinate.
+     */
+    contains: function(pt, py) {
+        var f = (arguments.length == 1),
+            testX = f ? pt.x : pt,
+            testY = f ? pt.y : py,
+            p = this.points,
+            nvert = p.length,
+            j = nvert - 1,
+            i, j, c = false;
+        for (i = 0; i < nvert; j = i++) {
+            if ( ((p[i][1] > testY) != (p[j][1] > testY)) &&
+             (testX < (p[j][0]-p[i][0]) * (testY-p[i][1]) / (p[j][1]-p[i][1]) + p[i][0])) {
+                c = !c;
+            }
+        }
+        return c;
+    }
+});
+
+/**
+ * @class Ext.Resizable
+ * @extends Ext.util.Observable
+ * This is an override of Ext.Resizable to make usage of the Ex.ux.EventZone
+ * <p>Applies virtual drag handles to an element to make it resizable.</p>
+ * <p>Here is the list of valid resize handles:</p>
+ * <pre>
+Value   Description
+------  -------------------
+ 'n'     north
+ 's'     south
+ 'e'     east
+ 'w'     west
+ 'nw'    northwest
+ 'sw'    southwest
+ 'se'    southeast
+ 'ne'    northeast
+ 'all'   all
+</pre>
+ * <p>Here's an example showing the creation of a typical Resizable:</p>
+ * <pre><code>
+var resizer = new Ext.Resizable('element-id', {
+    handles: 'all',
+    minWidth: 200,
+    minHeight: 100,
+    maxWidth: 500,
+    maxHeight: 400,
+    pinned: true
+});
+resizer.on('resize', myHandler);
+</code></pre>
+ * <p>To hide a particular handle, set its display to none in CSS, or through script:<br>
+ * resizer.east.setDisplayed(false);</p>
+ * @constructor
+ * Create a new resizable component
+ * @param {Mixed} el The id or element to resize
+ * @param {Object} config configuration options
+  */
+Ext.Resizable = function(el, config){
+    this.el = Ext.get(el);
+
+    /**
+     * The proxy Element that is resized in place of the real Element during the resize operation.
+     * This may be queried using {@link Ext.Element#getBox} to provide the new area to resize to.
+     * Read only.
+     * @type Ext.Element.
+     * @property proxy
+     */
+    this.proxy = this.el.createProxy({tag: 'div', cls: 'x-resizable-proxy', id: this.el.id + '-rzproxy'}, Ext.getBody());
+    this.proxy.unselectable();
+    this.proxy.enableDisplayMode('block');
+
+    Ext.apply(this, config);
+    
+    if(this.pinned){
+        this.disableTrackOver = true;
+        this.el.addClass('x-resizable-pinned');
+    }
+    // if the element isn't positioned, make it relative
+    var position = this.el.getStyle('position');
+    if(position != 'absolute' && position != 'fixed'){
+        this.el.setStyle('position', 'relative');
+    }
+    if(!this.handles){ // no handles passed, must be legacy style
+        this.handles = 's,e,se';
+        if(this.multiDirectional){
+            this.handles += ',n,w';
+        }
+    }
+    if(this.handles == 'all'){
+        this.handles = 'n s e w ne nw se sw';
+    }
+    var hs = this.handles.split(/\s*?[,;]\s*?| /);
+    var ps = Ext.Resizable.positions;
+    for(var i = 0, len = hs.length; i < len; i++){
+        if(hs[i] && ps[hs[i]]){
+            var pos = ps[hs[i]];
+            this[pos] = new Ext.Resizable.Handle(this, pos);
+        }
+    }
+    // legacy
+    this.corner = this.southeast;
+    
+    if(this.handles.indexOf('n') != -1 || this.handles.indexOf('w') != -1){
+        this.updateBox = true;
+    }   
+    this.activeHandle = null;
+
+    if(this.adjustments == 'auto'){
+        var hw = this.west, he = this.east, hn = this.north, hs = this.south;
+        this.adjustments = [
+            (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),
+            (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1 
+        ];
+    }
+
+    if(this.draggable){
+        this.dd = this.dynamic ? 
+            this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});
+        this.dd.setHandleElId(this.el.id);
+    }
+
+    this.addEvents(
+        /**
+         * @event beforeresize
+         * Fired before resize is allowed. Set {@link #enabled} to false to cancel resize.
+         * @param {Ext.Resizable} this
+         * @param {Ext.EventObject} e The mousedown event
+         */
+        'beforeresize',
+        /**
+         * @event resize
+         * Fired after a resize.
+         * @param {Ext.Resizable} this
+         * @param {Number} width The new width
+         * @param {Number} height The new height
+         * @param {Ext.EventObject} e The mouseup event
+         */
+        'resize'
+    );
+    
+    if(this.width !== null && this.height !== null){
+        this.resizeTo(this.width, this.height);
+    }
+    if(Ext.isIE){
+        this.el.dom.style.zoom = 1;
+    }
+    Ext.Resizable.superclass.constructor.call(this);
+};
+
+Ext.extend(Ext.Resizable, Ext.util.Observable, {
+
+    /**
+     * @cfg {Array/String} adjustments String 'auto' or an array [width, height] with values to be <b>added</b> to the
+     * resize operation's new size (defaults to <tt>[0, 0]</tt>)
+     */
+    adjustments : [0, 0],
+    /**
+     * @cfg {Boolean} animate True to animate the resize (not compatible with dynamic sizing, defaults to false)
+     */
+    animate : false,
+    /**
+     * @cfg {Mixed} constrainTo Constrain the resize to a particular element
+     */
+    /**
+     * @cfg {Boolean} draggable Convenience to initialize drag drop (defaults to false)
+     */
+    draggable: false,
+    /**
+     * @cfg {Number} duration Animation duration if animate = true (defaults to 0.35)
+     */
+    duration : 0.35,
+    /**
+     * @cfg {Boolean} dynamic True to resize the element while dragging instead of using a proxy (defaults to false)
+     */
+    dynamic : false,
+    /**
+     * @cfg {String} easing Animation easing if animate = true (defaults to <tt>'easingOutStrong'</tt>)
+     */
+    easing : 'easeOutStrong',
+    /**
+     * @cfg {Boolean} enabled False to disable resizing (defaults to true)
+     */
+    enabled : true,
+    /**
+     * @property enabled Writable. False if resizing is disabled.
+     * @type Boolean 
+     */
+    /**
+     * @cfg {String} handles String consisting of the resize handles to display (defaults to undefined).
+     * Specify either <tt>'all'</tt> or any of <tt>'n s e w ne nw se sw'</tt>.
+     */
+    handles : false,
+    /**
+     * @cfg {Boolean} multiDirectional <b>Deprecated</b>.  Deprecated style of adding multi-direction resize handles.
+     */
+    multiDirectional : false,
+    /**
+     * @cfg {Number} height The height of the element in pixels (defaults to null)
+     */
+    height : null,
+    /**
+     * @cfg {Number} width The width of the element in pixels (defaults to null)
+     */
+    width : null,
+    /**
+     * @cfg {Number} heightIncrement The increment to snap the height resize in pixels
+     * (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.
+     */
+    heightIncrement : 0,
+    /**
+     * @cfg {Number} widthIncrement The increment to snap the width resize in pixels
+     * (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.
+     */
+    widthIncrement : 0,
+    /**
+     * @cfg {Number} minHeight The minimum height for the element (defaults to 5)
+     */
+    minHeight : 5,
+    /**
+     * @cfg {Number} minWidth The minimum width for the element (defaults to 5)
+     */
+    minWidth : 5,
+    /**
+     * @cfg {Number} maxHeight The maximum height for the element (defaults to 10000)
+     */
+    maxHeight : 10000,
+    /**
+     * @cfg {Number} maxWidth The maximum width for the element (defaults to 10000)
+     */
+    maxWidth : 10000,
+    /**
+     * @cfg {Number} minX The minimum x for the element (defaults to 0)
+     */
+    minX: 0,
+    /**
+     * @cfg {Number} minY The minimum x for the element (defaults to 0)
+     */
+    minY: 0,
+    /**
+     * @cfg {Boolean} pinned True to ensure that the resize handles are always visible, false to display them only when the
+     * user mouses over the resizable borders. This is only applied at config time. (defaults to false)
+     */
+    pinned : false,
+    /**
+     * @cfg {Boolean} preserveRatio True to preserve the original ratio between height
+     * and width during resize (defaults to false)
+     */
+    preserveRatio : false,
+    /**
+     * @cfg {Ext.lib.Region} resizeRegion Constrain the resize to a particular region
+     */
+
+    
+    /**
+     * Perform a manual resize and fires the 'resize' event.
+     * @param {Number} width
+     * @param {Number} height
+     */
+    resizeTo : function(width, height){
+        this.el.setSize(width, height);
+        this.fireEvent('resize', this, width, height, null);
+    },
+
+    // private
+    startSizing : function(e, handle){
+        this.fireEvent('beforeresize', this, e);
+        if(this.enabled){ // 2nd enabled check in case disabled before beforeresize handler
+            e.stopEvent();
+
+            Ext.getDoc().on({
+                scope: this,
+                mousemove: this.onMouseMove,
+                mouseup: {
+                    fn: this.onMouseUp,
+                    single: true,
+                    scope: this
+                }
+            });
+            Ext.getBody().addClass('ux-resizable-handle-' + handle.position);
+
+            this.resizing = true;
+            this.startBox = this.el.getBox();
+            this.startPoint = e.getXY();
+            this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],
+                            (this.startBox.y + this.startBox.height) - this.startPoint[1]];
+
+            if(this.constrainTo) {
+                var ct = Ext.get(this.constrainTo);
+                this.resizeRegion = ct.getRegion().adjust(
+                    ct.getFrameWidth('t'),
+                    ct.getFrameWidth('l'),
+                    -ct.getFrameWidth('b'),
+                    -ct.getFrameWidth('r')
+                );
+            }
+
+            this.proxy.setStyle('visibility', 'hidden'); // workaround display none
+            this.proxy.show();
+            this.proxy.setBox(this.startBox);
+            if(!this.dynamic){
+                this.proxy.setStyle('visibility', 'visible');
+            }
+        }
+    },
+
+    // private
+    onMouseDown : function(handle, e){
+        if(this.enabled && !this.activeHandle){
+            e.stopEvent();
+            this.activeHandle = handle;
+            this.startSizing(e, handle);
+        }
+    },
+
+    // private
+    onMouseUp : function(e){
+        Ext.getBody().removeClass('ux-resizable-handle-' + this.activeHandle.position)
+            .un('mousemove', this.onMouseMove, this);
+        var size = this.resizeElement();
+        this.resizing = false;
+        this.handleOut(this.activeHandle);
+        this.proxy.hide();
+        this.fireEvent('resize', this, size.width, size.height, e);
+        this.activeHandle = null;
+    },
+
+    // private
+    snap : function(value, inc, min){
+        if(!inc || !value){
+            return value;
+        }
+        var newValue = value;
+        var m = value % inc;
+        if(m > 0){
+            if(m > (inc/2)){
+                newValue = value + (inc-m);
+            }else{
+                newValue = value - m;
+            }
+        }
+        return Math.max(min, newValue);
+    },
+
+    /**
+     * <p>Performs resizing of the associated Element. This method is called internally by this
+     * class, and should not be called by user code.</p>
+     * <p>If a Resizable is being used to resize an Element which encapsulates a more complex UI
+     * component such as a Panel, this method may be overridden by specifying an implementation
+     * as a config option to provide appropriate behaviour at the end of the resize operation on
+     * mouseup, for example resizing the Panel, and relaying the Panel's content.</p>
+     * <p>The new area to be resized to is available by examining the state of the {@link #proxy}
+     * Element. Example:
+<pre><code>
+new Ext.Panel({
+    title: 'Resize me',
+    x: 100,
+    y: 100,
+    renderTo: Ext.getBody(),
+    floating: true,
+    frame: true,
+    width: 400,
+    height: 200,
+    listeners: {
+        render: function(p) {
+            new Ext.Resizable(p.getEl(), {
+                handles: 'all',
+                pinned: true,
+                transparent: true,
+                resizeElement: function() {
+                    var box = this.proxy.getBox();
+                    p.updateBox(box);
+                    if (p.layout) {
+                        p.doLayout();
+                    }
+                    return box;
+                }
+           });
+       }
+    }
+}).show();
+</code></pre>
+     */
+    resizeElement : function(){
+        var box = this.proxy.getBox();
+        if(this.updateBox){
+            this.el.setBox(box, false, this.animate, this.duration, null, this.easing);
+        }else{
+            this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);
+        }
+        if(!this.dynamic){
+            this.proxy.hide();
+        }
+        return box;
+    },
+
+    // private
+    constrain : function(v, diff, m, mx){
+        if(v - diff < m){
+            diff = v - m;    
+        }else if(v - diff > mx){
+            diff = v - mx; 
+        }
+        return diff;                
+    },
+
+    // private
+    onMouseMove : function(e){
+        if(this.enabled && this.activeHandle){
+            try{// try catch so if something goes wrong the user doesn't get hung
+
+            if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {
+                return;
+            }
+
+            //var curXY = this.startPoint;
+            var curSize = this.curSize || this.startBox,
+                x = this.startBox.x, y = this.startBox.y,
+                ox = x, 
+                oy = y,
+                w = curSize.width, 
+                h = curSize.height,
+                ow = w, 
+                oh = h,
+                mw = this.minWidth, 
+                mh = this.minHeight,
+                mxw = this.maxWidth, 
+                mxh = this.maxHeight,
+                wi = this.widthIncrement,
+                hi = this.heightIncrement,
+                eventXY = e.getXY(),
+                diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0])),
+                diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1])),
+                pos = this.activeHandle.position,
+                tw,
+                th;
+            
+            switch(pos){
+                case 'east':
+                    w += diffX; 
+                    w = Math.min(Math.max(mw, w), mxw);
+                    break;
+                case 'south':
+                    h += diffY;
+                    h = Math.min(Math.max(mh, h), mxh);
+                    break;
+                case 'southeast':
+                    w += diffX; 
+                    h += diffY;
+                    w = Math.min(Math.max(mw, w), mxw);
+                    h = Math.min(Math.max(mh, h), mxh);
+                    break;
+                case 'north':
+                    diffY = this.constrain(h, diffY, mh, mxh);
+                    y += diffY;
+                    h -= diffY;
+                    break;
+                case 'west':
+                    diffX = this.constrain(w, diffX, mw, mxw);
+                    x += diffX;
+                    w -= diffX;
+                    break;
+                case 'northeast':
+                    w += diffX; 
+                    w = Math.min(Math.max(mw, w), mxw);
+                    diffY = this.constrain(h, diffY, mh, mxh);
+                    y += diffY;
+                    h -= diffY;
+                    break;
+                case 'northwest':
+                    diffX = this.constrain(w, diffX, mw, mxw);
+                    diffY = this.constrain(h, diffY, mh, mxh);
+                    y += diffY;
+                    h -= diffY;
+                    x += diffX;
+                    w -= diffX;
+                    break;
+               case 'southwest':
+                    diffX = this.constrain(w, diffX, mw, mxw);
+                    h += diffY;
+                    h = Math.min(Math.max(mh, h), mxh);
+                    x += diffX;
+                    w -= diffX;
+                    break;
+            }
+            
+            var sw = this.snap(w, wi, mw);
+            var sh = this.snap(h, hi, mh);
+            if(sw != w || sh != h){
+                switch(pos){
+                    case 'northeast':
+                        y -= sh - h;
+                    break;
+                    case 'north':
+                        y -= sh - h;
+                        break;
+                    case 'southwest':
+                        x -= sw - w;
+                    break;
+                    case 'west':
+                        x -= sw - w;
+                        break;
+                    case 'northwest':
+                        x -= sw - w;
+                        y -= sh - h;
+                    break;
+                }
+                w = sw;
+                h = sh;
+            }
+            
+            if(this.preserveRatio){
+                switch(pos){
+                    case 'southeast':
+                    case 'east':
+                        h = oh * (w/ow);
+                        h = Math.min(Math.max(mh, h), mxh);
+                        w = ow * (h/oh);
+                       break;
+                    case 'south':
+                        w = ow * (h/oh);
+                        w = Math.min(Math.max(mw, w), mxw);
+                        h = oh * (w/ow);
+                        break;
+                    case 'northeast':
+                        w = ow * (h/oh);
+                        w = Math.min(Math.max(mw, w), mxw);
+                        h = oh * (w/ow);
+                    break;
+                    case 'north':
+                        tw = w;
+                        w = ow * (h/oh);
+                        w = Math.min(Math.max(mw, w), mxw);
+                        h = oh * (w/ow);
+                        x += (tw - w) / 2;
+                        break;
+                    case 'southwest':
+                        h = oh * (w/ow);
+                        h = Math.min(Math.max(mh, h), mxh);
+                        tw = w;
+                        w = ow * (h/oh);
+                        x += tw - w;
+                        break;
+                    case 'west':
+                        th = h;
+                        h = oh * (w/ow);
+                        h = Math.min(Math.max(mh, h), mxh);
+                        y += (th - h) / 2;
+                        tw = w;
+                        w = ow * (h/oh);
+                        x += tw - w;
+                       break;
+                    case 'northwest':
+                        tw = w;
+                        th = h;
+                        h = oh * (w/ow);
+                        h = Math.min(Math.max(mh, h), mxh);
+                        w = ow * (h/oh);
+                        y += th - h;
+                        x += tw - w;
+                        break;
+                        
+                }
+            }
+            this.proxy.setBounds(x, y, w, h);
+            if(this.dynamic){
+                this.resizeElement();
+            }
+            }catch(ex){}
+        }
+    },
+
+    // private
+    handleOver : function(handle){
+        if(this.enabled){
+            Ext.getBody().addClass('ux-resizable-handle-' + handle.position);
+        }
+    },
+
+    // private
+    handleOut : function(handle){
+        if(!this.resizing){
+            Ext.getBody().removeClass('ux-resizable-handle-' + handle.position);
+        }
+    },
+    
+    /**
+     * Returns the element this component is bound to.
+     * @return {Ext.Element}
+     */
+    getEl : function(){
+        return this.el;
+    },
+
+    /**
+     * Destroys this resizable. If the element was wrapped and 
+     * removeEl is not true then the element remains.
+     * @param {Boolean} removeEl (optional) true to remove the element from the DOM
+     */
+    destroy : function(removeEl){
+        Ext.destroy(this.dd, this.proxy);
+        this.proxy = null;
+        
+        var ps = Ext.Resizable.positions;
+        for(var k in ps){
+            if(typeof ps[k] != 'function' && this[ps[k]]){
+                this[ps[k]].destroy();
+            }
+        }
+        if(removeEl){
+            this.el.update('');
+            Ext.destroy(this.el);
+            this.el = null;
+        }
+        this.purgeListeners();
+    },
+
+    syncHandleHeight : function(){
+        var h = this.el.getHeight(true);
+        if(this.west){
+            this.west.el.setHeight(h);
+        }
+        if(this.east){
+            this.east.el.setHeight(h);
+        }
+    }
+});
+
+// private
+// hash to map config positions to true positions
+Ext.Resizable.positions = {
+    n: 'north', s: 'south', e: 'east', w: 'west', se: 'southeast', sw: 'southwest', nw: 'northwest', ne: 'northeast'
+};
+Ext.Resizable.cfg = {
+    north: {left: 7, right: -7, height: 7},
+    south: {left: 7, right: -7, top: -7},
+    east: {top: 7, bottom: -7, left: -7},
+    west: {top: 7, bottom: -7, width: 7},
+    southeast: {top: -7, left: -7},
+    southwest: {top: -7, width: 7},
+    northwest: {height: 7, width: 7},
+    northeast: {left: -7, height: 7}
+};
+
+// private
+Ext.Resizable.Handle = function(rz, pos){
+    this.position = pos;
+    this.rz = rz;
+    var cfg = Ext.Resizable.cfg[pos] || Ext.Resizable.cfg[Ext.Resizable.positions[pos]];
+    this.ez = new Ext.ux.EventZone(Ext.apply({
+        position: pos,
+        el: rz.el
+    }, cfg));
+    this.ez.on({
+        mousedown: this.onMouseDown,
+        mouseenter: this.onMouseOver,
+        mouseleave: this.onMouseOut,
+        scope: this
+    });
+};
+
+// private
+Ext.Resizable.Handle.prototype = {
+    cursor: 'move',
+
+    // private
+    afterResize : function(rz){
+        // do nothing    
+    },
+    // private
+    onMouseDown : function(e){
+        this.rz.onMouseDown(this, e);
+    },
+    // private
+    onMouseOver : function(e){
+        this.rz.handleOver(this, e);
+    },
+    // private
+    onMouseOut : function(e){
+        this.rz.handleOut(this, e);
+    },
+    // private
+    destroy : function(){
+        Ext.destroy(this.el);
+        this.el = null;
+    }
+};
+
+/**
+*
+* Ext.ux.elasticTextArea Extension Class for Ext 3.x Library
+*
+* @author  Steffen Kamper
+*
+* @license Ext.ux.elasticTextArea is licensed under the terms of
+* the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent
+* that the code/component(s) do NOT become part of another Open Source or Commercially
+* licensed development library or toolkit without explicit permission.
+* 
+* License details: http://www.gnu.org/licenses/lgpl.html
+*
+*/
+Ext.ux.elasticTextArea = function(){
+    
+    var defaultConfig = function(){
+        return {
+            minHeight : 0
+            ,maxHeight : 0
+            ,growBy: 12
+        }
+    }
+    
+    var processOptions = function(config){
+        var o = defaultConfig();
+        var options = {};
+        Ext.apply(options, config, o);
+        
+        return options ;
+    }
+    
+    return {
+        div : null
+        ,applyTo: function(elementId, options){
+        
+            var el = Ext.get(elementId);
+            var width = el.getWidth();
+            var height = el.getHeight();
+            
+            var styles = el.getStyles('padding-top', 'padding-bottom', 'padding-left', 'padding-right', 'line-height', 'font-size', 'font-family', 'font-weight');
+
+            if(! this.div){
+                var options = processOptions(options);
+                
+                this.div = Ext.DomHelper.append(Ext.getBody() || document.body, {
+                    'id':elementId + '-preview-div'
+                    ,'tag' : 'div'
+                    ,'background': 'red'
+                    ,'style' : 'position: absolute; top: -100000px; left: -100000px;'
+                }, true)
+                Ext.DomHelper.applyStyles(this.div, styles);
+                
+                el.on('keyup', function() {
+                        this.applyTo(elementId, options);
+                }, this);
+            }
+            
+            //replace \n with <br>&nbsp; so that the enter key can trigger and height increase
+            //but first remove all previous entries, so that the height mesurement can be as accurate as possible
+            this.div.update( 
+                    el.dom.value.replace(/<br \/>&nbsp;/, '<br />')
+                                .replace(/<|>/g, ' ')
+                                .replace(/&/g,"&amp;")
+                                .replace(/\n/g, '<br />&nbsp;') 
+                    );
+            
+                       var growBy = parseInt(el.getStyle('line-height')) + 1;
+                       if (growBy === 1) {
+                               growBy = options.growBy;
+                       }
+                       var textHeight = this.div.getHeight() + growBy;
+            
+            if ( (textHeight > options.maxHeight ) && (options.maxHeight > 0) ){
+                textHeight = options.maxHeight ;
+                el.setStyle('overflow', 'auto');
+            }
+            if ( (textHeight < options.minHeight ) && (options.minHeight > 0) ) {
+                textHeight = options.minHeight ;
+                el.setStyle('overflow', 'auto');
+            }
+            
+            el.setHeight(textHeight , true);
+        }
+    }
+}
index f2d0851..c4ff47c 100644 (file)
@@ -1,68 +1,68 @@
-.ux-resizable-handle-east, .ux-resizable-handle-east textarea {\r
-    cursor: e-resize;\r
-}\r
-\r
-.ux-resizable-handle-south, .ux-resizable-handle-south textarea {\r
-    cursor: s-resize;\r
-}\r
-\r
-.ux-resizable-handle-west, .ux-resizable-handle-west textarea {\r
-    cursor: w-resize;\r
-}\r
-\r
-.ux-resizable-handle-north, .ux-resizable-handle-north textarea {\r
-    cursor: n-resize;\r
-}\r
-\r
-.ux-resizable-handle-southeast, .ux-resizable-handle-southeast textarea {\r
-    cursor: se-resize;\r
-}\r
-\r
-.ux-resizable-handle-northwest, .ux-resizable-handle-northwest textarea {\r
-    cursor: nw-resize;\r
-}\r
-\r
-.ux-resizable-handle-northeast, .ux-resizable-handle-northeast textarea {\r
-    cursor: ne-resize;\r
-}\r
-\r
-.ux-resizable-handle-southwest, .ux-resizable-handle-southwest textarea {\r
-    cursor: sw-resize;\r
-}\r
-.ux-resizable-handle-east, .ux-resizable-handle-east textarea {\r
-    cursor: e-resize;\r
-}\r
-\r
-.ux-resizable-handle-south, .ux-resizable-handle-south textarea {\r
-    cursor: s-resize;\r
-}\r
-\r
-.ux-resizable-handle-west, .ux-resizable-handle-west textarea {\r
-    cursor: w-resize;\r
-}\r
-\r
-.ux-resizable-handle-north, .ux-resizable-handle-north textarea {\r
-    cursor: n-resize;\r
-}\r
-\r
-.ux-resizable-handle-southeast, .ux-resizable-handle-southeast textarea {\r
-    cursor: se-resize;\r
-}\r
-\r
-.ux-resizable-handle-northwest, .ux-resizable-handle-northwest textarea {\r
-    cursor: nw-resize;\r
-}\r
-\r
-.ux-resizable-handle-northeast, .ux-resizable-handle-northeast textarea {\r
-    cursor: ne-resize;\r
-}\r
-\r
-.ux-resizable-handle-southwest, .ux-resizable-handle-southwest textarea {\r
-    cursor: sw-resize;\r
-}\r
-\r
-textarea.resizable {\r
-       background-image: url(resize.gif);\r
-       background-position: bottom right;\r
-       background-repeat: no-repeat;\r
+.ux-resizable-handle-east, .ux-resizable-handle-east textarea {
+    cursor: e-resize;
+}
+
+.ux-resizable-handle-south, .ux-resizable-handle-south textarea {
+    cursor: s-resize;
+}
+
+.ux-resizable-handle-west, .ux-resizable-handle-west textarea {
+    cursor: w-resize;
+}
+
+.ux-resizable-handle-north, .ux-resizable-handle-north textarea {
+    cursor: n-resize;
+}
+
+.ux-resizable-handle-southeast, .ux-resizable-handle-southeast textarea {
+    cursor: se-resize;
+}
+
+.ux-resizable-handle-northwest, .ux-resizable-handle-northwest textarea {
+    cursor: nw-resize;
+}
+
+.ux-resizable-handle-northeast, .ux-resizable-handle-northeast textarea {
+    cursor: ne-resize;
+}
+
+.ux-resizable-handle-southwest, .ux-resizable-handle-southwest textarea {
+    cursor: sw-resize;
+}
+.ux-resizable-handle-east, .ux-resizable-handle-east textarea {
+    cursor: e-resize;
+}
+
+.ux-resizable-handle-south, .ux-resizable-handle-south textarea {
+    cursor: s-resize;
+}
+
+.ux-resizable-handle-west, .ux-resizable-handle-west textarea {
+    cursor: w-resize;
+}
+
+.ux-resizable-handle-north, .ux-resizable-handle-north textarea {
+    cursor: n-resize;
+}
+
+.ux-resizable-handle-southeast, .ux-resizable-handle-southeast textarea {
+    cursor: se-resize;
+}
+
+.ux-resizable-handle-northwest, .ux-resizable-handle-northwest textarea {
+    cursor: nw-resize;
+}
+
+.ux-resizable-handle-northeast, .ux-resizable-handle-northeast textarea {
+    cursor: ne-resize;
+}
+
+.ux-resizable-handle-southwest, .ux-resizable-handle-southwest textarea {
+    cursor: sw-resize;
+}
+
+textarea.resizable {
+       background-image: url(resize.gif);
+       background-position: bottom right;
+       background-repeat: no-repeat;
 }
\ No newline at end of file
index b6c3bb9..35b69e6 100644 (file)
@@ -1,7 +1,7 @@
 /***************************************************************
 *  AJAX selectors for TCEforms
 *
-* $Id:$
+* $Id$
 *
 *  Copyright notice
 *
index f1041cf..a3ebff5 100644 (file)
@@ -33,7 +33,7 @@
  * @author             Benjamin Mack <www.xnos.org>
  * @package            TYPO3
  * @subpackage core
- * @version    $Id: index.php 3074 2008-02-05 16:46:59Z patrickbroens $
+ * @version    $Id$
  */
 
 // TYPO3 code extracted from index.php
index f53b793..bd642fe 100644 (file)
@@ -4,7 +4,7 @@
 # Defines a few class selectors that can be simply taken as examples by anyone who needs to configure the RTE.
 # This css file is referenced by property RTE.default.contentCSS in the default configuration of htmlArea RTE.
 #
-# TYPO3 SVN ID: $Id: default.css 2663 2007-11-05 09:22:23Z ingmars $
+# TYPO3 SVN ID: $Id$
 # ***************************************************************************************/
 
 /* Left, center, right and justify alignment of text in block elements*/
index 4f04829..2eb9061 100644 (file)
@@ -1,5 +1,5 @@
 /* Scheduler BE-Styles */
-/* $Id: tx_scheduler_be.css 1146 2009-08-27 20:26:30Z francois $ */
+/* $Id$ */
 
 .tx_scheduler_mod1 a {
        text-decoration: underline;
index f4d6c7a..62f7789 100644 (file)
@@ -26,7 +26,7 @@
  *
  * @author     Francois Suter <francois@typo3.org>
  *
- * $Id: tx_scheduler_be.js 1220 2009-09-11 20:45:35Z francois $
+ * $Id$
  */
 
 /**
index 0bf56df..e1c6a75 100644 (file)
@@ -1,5 +1,5 @@
 /* Services report styles */
-/* $Id$ */
+/* $Id$ */
 
 .tx_sv_reportlist td {
        vertical-align: top;