jquery-ui-rails 3.0.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of jquery-ui-rails might be problematic. Click here for more details.

Files changed (61) hide show
  1. data/History.md +10 -0
  2. data/README.md +1 -1
  3. data/Rakefile +4 -5
  4. data/lib/jquery/ui/rails/version.rb +1 -1
  5. data/vendor/assets/javascripts/jquery.ui.accordion.js +130 -290
  6. data/vendor/assets/javascripts/jquery.ui.autocomplete.js +30 -18
  7. data/vendor/assets/javascripts/jquery.ui.button.js +9 -8
  8. data/vendor/assets/javascripts/jquery.ui.core.js +19 -53
  9. data/vendor/assets/javascripts/jquery.ui.datepicker-be.js +23 -0
  10. data/vendor/assets/javascripts/jquery.ui.datepicker-fr-CA.js +23 -0
  11. data/vendor/assets/javascripts/jquery.ui.datepicker-ky.js +24 -0
  12. data/vendor/assets/javascripts/jquery.ui.datepicker-nb.js +22 -0
  13. data/vendor/assets/javascripts/jquery.ui.datepicker-nn.js +22 -0
  14. data/vendor/assets/javascripts/jquery.ui.datepicker.js +1076 -878
  15. data/vendor/assets/javascripts/jquery.ui.dialog.js +456 -547
  16. data/vendor/assets/javascripts/jquery.ui.draggable.js +317 -207
  17. data/vendor/assets/javascripts/jquery.ui.droppable.js +177 -100
  18. data/vendor/assets/javascripts/jquery.ui.effect-blind.js +2 -2
  19. data/vendor/assets/javascripts/jquery.ui.effect-bounce.js +2 -2
  20. data/vendor/assets/javascripts/jquery.ui.effect-clip.js +2 -2
  21. data/vendor/assets/javascripts/jquery.ui.effect-drop.js +2 -2
  22. data/vendor/assets/javascripts/jquery.ui.effect-explode.js +2 -2
  23. data/vendor/assets/javascripts/jquery.ui.effect-fade.js +2 -2
  24. data/vendor/assets/javascripts/jquery.ui.effect-fold.js +2 -2
  25. data/vendor/assets/javascripts/jquery.ui.effect-highlight.js +2 -2
  26. data/vendor/assets/javascripts/jquery.ui.effect-pulsate.js +2 -2
  27. data/vendor/assets/javascripts/jquery.ui.effect-scale.js +2 -2
  28. data/vendor/assets/javascripts/jquery.ui.effect-shake.js +2 -2
  29. data/vendor/assets/javascripts/jquery.ui.effect-slide.js +2 -2
  30. data/vendor/assets/javascripts/jquery.ui.effect-transfer.js +3 -3
  31. data/vendor/assets/javascripts/jquery.ui.effect.js +91 -99
  32. data/vendor/assets/javascripts/jquery.ui.menu.js +20 -9
  33. data/vendor/assets/javascripts/jquery.ui.mouse.js +25 -25
  34. data/vendor/assets/javascripts/jquery.ui.position.js +39 -59
  35. data/vendor/assets/javascripts/jquery.ui.progressbar.js +73 -33
  36. data/vendor/assets/javascripts/jquery.ui.resizable.js +461 -294
  37. data/vendor/assets/javascripts/jquery.ui.selectable.js +67 -51
  38. data/vendor/assets/javascripts/jquery.ui.slider.js +100 -95
  39. data/vendor/assets/javascripts/jquery.ui.sortable.js +411 -257
  40. data/vendor/assets/javascripts/jquery.ui.spinner.js +19 -5
  41. data/vendor/assets/javascripts/jquery.ui.tabs.js +47 -567
  42. data/vendor/assets/javascripts/jquery.ui.tooltip.js +14 -10
  43. data/vendor/assets/javascripts/jquery.ui.widget.js +33 -40
  44. data/vendor/assets/stylesheets/jquery.ui.accordion.css.erb +30 -8
  45. data/vendor/assets/stylesheets/jquery.ui.all.css.erb +2 -2
  46. data/vendor/assets/stylesheets/jquery.ui.autocomplete.css.erb +2 -5
  47. data/vendor/assets/stylesheets/jquery.ui.base.css.erb +2 -2
  48. data/vendor/assets/stylesheets/jquery.ui.button.css.erb +100 -26
  49. data/vendor/assets/stylesheets/jquery.ui.core.css.erb +65 -12
  50. data/vendor/assets/stylesheets/jquery.ui.datepicker.css.erb +166 -55
  51. data/vendor/assets/stylesheets/jquery.ui.dialog.css.erb +61 -14
  52. data/vendor/assets/stylesheets/jquery.ui.menu.css.erb +61 -14
  53. data/vendor/assets/stylesheets/jquery.ui.progressbar.css.erb +20 -4
  54. data/vendor/assets/stylesheets/jquery.ui.resizable.css.erb +70 -13
  55. data/vendor/assets/stylesheets/jquery.ui.selectable.css.erb +7 -3
  56. data/vendor/assets/stylesheets/jquery.ui.slider.css.erb +63 -15
  57. data/vendor/assets/stylesheets/jquery.ui.spinner.css.erb +52 -10
  58. data/vendor/assets/stylesheets/jquery.ui.tabs.css.erb +44 -10
  59. data/vendor/assets/stylesheets/jquery.ui.theme.css.erb +196 -38
  60. data/vendor/assets/stylesheets/jquery.ui.tooltip.css.erb +4 -6
  61. metadata +8 -3
@@ -3,10 +3,10 @@
3
3
  //= require jquery.ui.mouse
4
4
 
5
5
  /*!
6
- * jQuery UI Resizable 1.9.2
6
+ * jQuery UI Resizable 1.10.0
7
7
  * http://jqueryui.com
8
8
  *
9
- * Copyright 2012 jQuery Foundation and other contributors
9
+ * Copyright 2013 jQuery Foundation and other contributors
10
10
  * Released under the MIT license.
11
11
  * http://jquery.org/license
12
12
  *
@@ -19,8 +19,16 @@
19
19
  */
20
20
  (function( $, undefined ) {
21
21
 
22
+ function num(v) {
23
+ return parseInt(v, 10) || 0;
24
+ }
25
+
26
+ function isNumber(value) {
27
+ return !isNaN(parseInt(value, 10));
28
+ }
29
+
22
30
  $.widget("ui.resizable", $.ui.mouse, {
23
- version: "1.9.2",
31
+ version: "1.10.0",
24
32
  widgetEventPrefix: "resize",
25
33
  options: {
26
34
  alsoResize: false,
@@ -38,11 +46,19 @@ $.widget("ui.resizable", $.ui.mouse, {
38
46
  maxWidth: null,
39
47
  minHeight: 10,
40
48
  minWidth: 10,
41
- zIndex: 1000
49
+ // See #7960
50
+ zIndex: 90,
51
+
52
+ // callbacks
53
+ resize: null,
54
+ start: null,
55
+ stop: null
42
56
  },
43
57
  _create: function() {
44
58
 
45
- var that = this, o = this.options;
59
+ var n, i, handle, axis, hname,
60
+ that = this,
61
+ o = this.options;
46
62
  this.element.addClass("ui-resizable");
47
63
 
48
64
  $.extend(this, {
@@ -50,7 +66,7 @@ $.widget("ui.resizable", $.ui.mouse, {
50
66
  aspectRatio: o.aspectRatio,
51
67
  originalElement: this.element,
52
68
  _proportionallyResizeElements: [],
53
- _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null
69
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
54
70
  });
55
71
 
56
72
  //Wrap the element if it cannot hold child nodes
@@ -58,18 +74,18 @@ $.widget("ui.resizable", $.ui.mouse, {
58
74
 
59
75
  //Create a wrapper element and set the wrapper to the new current internal element
60
76
  this.element.wrap(
61
- $('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
62
- position: this.element.css('position'),
77
+ $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
78
+ position: this.element.css("position"),
63
79
  width: this.element.outerWidth(),
64
80
  height: this.element.outerHeight(),
65
- top: this.element.css('top'),
66
- left: this.element.css('left')
81
+ top: this.element.css("top"),
82
+ left: this.element.css("left")
67
83
  })
68
84
  );
69
85
 
70
86
  //Overwrite the original this.element
71
87
  this.element = this.element.parent().data(
72
- "resizable", this.element.data('resizable')
88
+ "ui-resizable", this.element.data("ui-resizable")
73
89
  );
74
90
 
75
91
  this.elementIsWrapper = true;
@@ -79,41 +95,46 @@ $.widget("ui.resizable", $.ui.mouse, {
79
95
  this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
80
96
 
81
97
  //Prevent Safari textarea resize
82
- this.originalResizeStyle = this.originalElement.css('resize');
83
- this.originalElement.css('resize', 'none');
98
+ this.originalResizeStyle = this.originalElement.css("resize");
99
+ this.originalElement.css("resize", "none");
84
100
 
85
101
  //Push the actual element to our proportionallyResize internal array
86
- this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));
102
+ this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
87
103
 
88
104
  // avoid IE jump (hard set the margin)
89
- this.originalElement.css({ margin: this.originalElement.css('margin') });
105
+ this.originalElement.css({ margin: this.originalElement.css("margin") });
90
106
 
91
107
  // fix handlers offset
92
108
  this._proportionallyResize();
93
109
 
94
110
  }
95
111
 
96
- this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
97
- if(this.handles.constructor == String) {
112
+ this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
113
+ if(this.handles.constructor === String) {
98
114
 
99
- if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';
100
- var n = this.handles.split(","); this.handles = {};
115
+ if ( this.handles === "all") {
116
+ this.handles = "n,e,s,w,se,sw,ne,nw";
117
+ }
118
+
119
+ n = this.handles.split(",");
120
+ this.handles = {};
101
121
 
102
- for(var i = 0; i < n.length; i++) {
122
+ for(i = 0; i < n.length; i++) {
103
123
 
104
- var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;
105
- var axis = $('<div class="ui-resizable-handle ' + hname + '"></div>');
124
+ handle = $.trim(n[i]);
125
+ hname = "ui-resizable-"+handle;
126
+ axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
106
127
 
107
128
  // Apply zIndex to all handles - see #7960
108
129
  axis.css({ zIndex: o.zIndex });
109
130
 
110
131
  //TODO : What's going on here?
111
- if ('se' == handle) {
112
- axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');
113
- };
132
+ if ("se" === handle) {
133
+ axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
134
+ }
114
135
 
115
136
  //Insert into internal handles object and append to element
116
- this.handles[handle] = '.ui-resizable-'+handle;
137
+ this.handles[handle] = ".ui-resizable-"+handle;
117
138
  this.element.append(axis);
118
139
  }
119
140
 
@@ -121,26 +142,29 @@ $.widget("ui.resizable", $.ui.mouse, {
121
142
 
122
143
  this._renderAxis = function(target) {
123
144
 
145
+ var i, axis, padPos, padWrapper;
146
+
124
147
  target = target || this.element;
125
148
 
126
- for(var i in this.handles) {
149
+ for(i in this.handles) {
127
150
 
128
- if(this.handles[i].constructor == String)
151
+ if(this.handles[i].constructor === String) {
129
152
  this.handles[i] = $(this.handles[i], this.element).show();
153
+ }
130
154
 
131
155
  //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
132
156
  if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
133
157
 
134
- var axis = $(this.handles[i], this.element), padWrapper = 0;
158
+ axis = $(this.handles[i], this.element);
135
159
 
136
160
  //Checking the correct pad and border
137
161
  padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
138
162
 
139
163
  //The padding type i have to apply...
140
- var padPos = [ 'padding',
141
- /ne|nw|n/.test(i) ? 'Top' :
142
- /se|sw|s/.test(i) ? 'Bottom' :
143
- /^e$/.test(i) ? 'Right' : 'Left' ].join("");
164
+ padPos = [ "padding",
165
+ /ne|nw|n/.test(i) ? "Top" :
166
+ /se|sw|s/.test(i) ? "Bottom" :
167
+ /^e$/.test(i) ? "Right" : "Left" ].join("");
144
168
 
145
169
  target.css(padPos, padWrapper);
146
170
 
@@ -149,25 +173,26 @@ $.widget("ui.resizable", $.ui.mouse, {
149
173
  }
150
174
 
151
175
  //TODO: What's that good for? There's not anything to be executed left
152
- if(!$(this.handles[i]).length)
176
+ if(!$(this.handles[i]).length) {
153
177
  continue;
154
-
178
+ }
155
179
  }
156
180
  };
157
181
 
158
182
  //TODO: make renderAxis a prototype function
159
183
  this._renderAxis(this.element);
160
184
 
161
- this._handles = $('.ui-resizable-handle', this.element)
185
+ this._handles = $(".ui-resizable-handle", this.element)
162
186
  .disableSelection();
163
187
 
164
188
  //Matching axis name
165
189
  this._handles.mouseover(function() {
166
190
  if (!that.resizing) {
167
- if (this.className)
168
- var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
191
+ if (this.className) {
192
+ axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
193
+ }
169
194
  //Axis, default = se
170
- that.axis = axis && axis[1] ? axis[1] : 'se';
195
+ that.axis = axis && axis[1] ? axis[1] : "se";
171
196
  }
172
197
  });
173
198
 
@@ -177,12 +202,16 @@ $.widget("ui.resizable", $.ui.mouse, {
177
202
  $(this.element)
178
203
  .addClass("ui-resizable-autohide")
179
204
  .mouseenter(function() {
180
- if (o.disabled) return;
205
+ if (o.disabled) {
206
+ return;
207
+ }
181
208
  $(this).removeClass("ui-resizable-autohide");
182
209
  that._handles.show();
183
210
  })
184
211
  .mouseleave(function(){
185
- if (o.disabled) return;
212
+ if (o.disabled) {
213
+ return;
214
+ }
186
215
  if (!that.resizing) {
187
216
  $(this).addClass("ui-resizable-autohide");
188
217
  that._handles.hide();
@@ -199,57 +228,66 @@ $.widget("ui.resizable", $.ui.mouse, {
199
228
 
200
229
  this._mouseDestroy();
201
230
 
202
- var _destroy = function(exp) {
203
- $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
204
- .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
205
- };
231
+ var wrapper,
232
+ _destroy = function(exp) {
233
+ $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
234
+ .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
235
+ };
206
236
 
207
237
  //TODO: Unwrap at same DOM position
208
238
  if (this.elementIsWrapper) {
209
239
  _destroy(this.element);
210
- var wrapper = this.element;
240
+ wrapper = this.element;
211
241
  this.originalElement.css({
212
- position: wrapper.css('position'),
242
+ position: wrapper.css("position"),
213
243
  width: wrapper.outerWidth(),
214
244
  height: wrapper.outerHeight(),
215
- top: wrapper.css('top'),
216
- left: wrapper.css('left')
245
+ top: wrapper.css("top"),
246
+ left: wrapper.css("left")
217
247
  }).insertAfter( wrapper );
218
248
  wrapper.remove();
219
249
  }
220
250
 
221
- this.originalElement.css('resize', this.originalResizeStyle);
251
+ this.originalElement.css("resize", this.originalResizeStyle);
222
252
  _destroy(this.originalElement);
223
253
 
224
254
  return this;
225
255
  },
226
256
 
227
257
  _mouseCapture: function(event) {
228
- var handle = false;
229
- for (var i in this.handles) {
230
- if ($(this.handles[i])[0] == event.target) {
231
- handle = true;
258
+ var i, handle,
259
+ capture = false;
260
+
261
+ for (i in this.handles) {
262
+ handle = $(this.handles[i])[0];
263
+ if (handle === event.target || $.contains(handle, event.target)) {
264
+ capture = true;
232
265
  }
233
266
  }
234
267
 
235
- return !this.options.disabled && handle;
268
+ return !this.options.disabled && capture;
236
269
  },
237
270
 
238
271
  _mouseStart: function(event) {
239
272
 
240
- var o = this.options, iniPos = this.element.position(), el = this.element;
273
+ var curleft, curtop, cursor,
274
+ o = this.options,
275
+ iniPos = this.element.position(),
276
+ el = this.element;
241
277
 
242
278
  this.resizing = true;
243
- this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };
244
279
 
245
280
  // bugfix for http://dev.jquery.com/ticket/1749
246
- if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
247
- el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });
281
+ if ( (/absolute/).test( el.css("position") ) ) {
282
+ el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
283
+ } else if (el.is(".ui-draggable")) {
284
+ el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
248
285
  }
249
286
 
250
287
  this._renderProxy();
251
288
 
252
- var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));
289
+ curleft = num(this.helper.css("left"));
290
+ curtop = num(this.helper.css("top"));
253
291
 
254
292
  if (o.containment) {
255
293
  curleft += $(o.containment).scrollLeft() || 0;
@@ -266,10 +304,10 @@ $.widget("ui.resizable", $.ui.mouse, {
266
304
  this.originalMousePosition = { left: event.pageX, top: event.pageY };
267
305
 
268
306
  //Aspect Ratio
269
- this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
307
+ this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
270
308
 
271
- var cursor = $('.ui-resizable-' + this.axis).css('cursor');
272
- $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);
309
+ cursor = $(".ui-resizable-" + this.axis).css("cursor");
310
+ $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
273
311
 
274
312
  el.addClass("ui-resizable-resizing");
275
313
  this._propagate("start", event);
@@ -279,38 +317,60 @@ $.widget("ui.resizable", $.ui.mouse, {
279
317
  _mouseDrag: function(event) {
280
318
 
281
319
  //Increase performance, avoid regex
282
- var el = this.helper, o = this.options, props = {},
283
- that = this, smp = this.originalMousePosition, a = this.axis;
284
-
285
- var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;
286
- var trigger = this._change[a];
287
- if (!trigger) return false;
320
+ var data,
321
+ el = this.helper, props = {},
322
+ smp = this.originalMousePosition,
323
+ a = this.axis,
324
+ prevTop = this.position.top,
325
+ prevLeft = this.position.left,
326
+ prevWidth = this.size.width,
327
+ prevHeight = this.size.height,
328
+ dx = (event.pageX-smp.left)||0,
329
+ dy = (event.pageY-smp.top)||0,
330
+ trigger = this._change[a];
331
+
332
+ if (!trigger) {
333
+ return false;
334
+ }
288
335
 
289
336
  // Calculate the attrs that will be change
290
- var data = trigger.apply(this, [event, dx, dy]);
337
+ data = trigger.apply(this, [event, dx, dy]);
291
338
 
292
339
  // Put this in the mouseDrag handler since the user can start pressing shift while resizing
293
340
  this._updateVirtualBoundaries(event.shiftKey);
294
- if (this._aspectRatio || event.shiftKey)
341
+ if (this._aspectRatio || event.shiftKey) {
295
342
  data = this._updateRatio(data, event);
343
+ }
296
344
 
297
345
  data = this._respectSize(data, event);
298
346
 
347
+ this._updateCache(data);
348
+
299
349
  // plugins callbacks need to be called first
300
350
  this._propagate("resize", event);
301
351
 
302
- el.css({
303
- top: this.position.top + "px", left: this.position.left + "px",
304
- width: this.size.width + "px", height: this.size.height + "px"
305
- });
352
+ if (this.position.top !== prevTop) {
353
+ props.top = this.position.top + "px";
354
+ }
355
+ if (this.position.left !== prevLeft) {
356
+ props.left = this.position.left + "px";
357
+ }
358
+ if (this.size.width !== prevWidth) {
359
+ props.width = this.size.width + "px";
360
+ }
361
+ if (this.size.height !== prevHeight) {
362
+ props.height = this.size.height + "px";
363
+ }
364
+ el.css(props);
306
365
 
307
- if (!this._helper && this._proportionallyResizeElements.length)
366
+ if (!this._helper && this._proportionallyResizeElements.length) {
308
367
  this._proportionallyResize();
368
+ }
309
369
 
310
- this._updateCache(data);
311
-
312
- // calling the user callback at the end
313
- this._trigger('resize', event, this.ui());
370
+ // Call the user callback if the element was resized
371
+ if ( ! $.isEmptyObject(props) ) {
372
+ this._trigger("resize", event, this.ui());
373
+ }
314
374
 
315
375
  return false;
316
376
  },
@@ -318,39 +378,49 @@ $.widget("ui.resizable", $.ui.mouse, {
318
378
  _mouseStop: function(event) {
319
379
 
320
380
  this.resizing = false;
321
- var o = this.options, that = this;
381
+ var pr, ista, soffseth, soffsetw, s, left, top,
382
+ o = this.options, that = this;
322
383
 
323
384
  if(this._helper) {
324
- var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
325
- soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : that.sizeDiff.height,
326
- soffsetw = ista ? 0 : that.sizeDiff.width;
327
385
 
328
- var s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) },
329
- left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null,
330
- top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null;
386
+ pr = this._proportionallyResizeElements;
387
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName);
388
+ soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
389
+ soffsetw = ista ? 0 : that.sizeDiff.width;
390
+
391
+ s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) };
392
+ left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
393
+ top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
331
394
 
332
- if (!o.animate)
395
+ if (!o.animate) {
333
396
  this.element.css($.extend(s, { top: top, left: left }));
397
+ }
334
398
 
335
399
  that.helper.height(that.size.height);
336
400
  that.helper.width(that.size.width);
337
401
 
338
- if (this._helper && !o.animate) this._proportionallyResize();
402
+ if (this._helper && !o.animate) {
403
+ this._proportionallyResize();
404
+ }
339
405
  }
340
406
 
341
- $('body').css('cursor', 'auto');
407
+ $("body").css("cursor", "auto");
342
408
 
343
409
  this.element.removeClass("ui-resizable-resizing");
344
410
 
345
411
  this._propagate("stop", event);
346
412
 
347
- if (this._helper) this.helper.remove();
413
+ if (this._helper) {
414
+ this.helper.remove();
415
+ }
416
+
348
417
  return false;
349
418
 
350
419
  },
351
420
 
352
421
  _updateVirtualBoundaries: function(forceAspectRatio) {
353
- var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
422
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
423
+ o = this.options;
354
424
 
355
425
  b = {
356
426
  minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
@@ -367,35 +437,55 @@ $.widget("ui.resizable", $.ui.mouse, {
367
437
  pMaxWidth = b.maxHeight * this.aspectRatio;
368
438
  pMaxHeight = b.maxWidth / this.aspectRatio;
369
439
 
370
- if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
371
- if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
372
- if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
373
- if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
440
+ if(pMinWidth > b.minWidth) {
441
+ b.minWidth = pMinWidth;
442
+ }
443
+ if(pMinHeight > b.minHeight) {
444
+ b.minHeight = pMinHeight;
445
+ }
446
+ if(pMaxWidth < b.maxWidth) {
447
+ b.maxWidth = pMaxWidth;
448
+ }
449
+ if(pMaxHeight < b.maxHeight) {
450
+ b.maxHeight = pMaxHeight;
451
+ }
374
452
  }
375
453
  this._vBoundaries = b;
376
454
  },
377
455
 
378
456
  _updateCache: function(data) {
379
- var o = this.options;
380
457
  this.offset = this.helper.offset();
381
- if (isNumber(data.left)) this.position.left = data.left;
382
- if (isNumber(data.top)) this.position.top = data.top;
383
- if (isNumber(data.height)) this.size.height = data.height;
384
- if (isNumber(data.width)) this.size.width = data.width;
458
+ if (isNumber(data.left)) {
459
+ this.position.left = data.left;
460
+ }
461
+ if (isNumber(data.top)) {
462
+ this.position.top = data.top;
463
+ }
464
+ if (isNumber(data.height)) {
465
+ this.size.height = data.height;
466
+ }
467
+ if (isNumber(data.width)) {
468
+ this.size.width = data.width;
469
+ }
385
470
  },
386
471
 
387
- _updateRatio: function(data, event) {
472
+ _updateRatio: function( data ) {
388
473
 
389
- var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
474
+ var cpos = this.position,
475
+ csize = this.size,
476
+ a = this.axis;
390
477
 
391
- if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
392
- else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
478
+ if (isNumber(data.height)) {
479
+ data.width = (data.height * this.aspectRatio);
480
+ } else if (isNumber(data.width)) {
481
+ data.height = (data.width / this.aspectRatio);
482
+ }
393
483
 
394
- if (a == 'sw') {
484
+ if (a === "sw") {
395
485
  data.left = cpos.left + (csize.width - data.width);
396
486
  data.top = null;
397
487
  }
398
- if (a == 'nw') {
488
+ if (a === "nw") {
399
489
  data.top = cpos.top + (csize.height - data.height);
400
490
  data.left = cpos.left + (csize.width - data.width);
401
491
  }
@@ -403,51 +493,72 @@ $.widget("ui.resizable", $.ui.mouse, {
403
493
  return data;
404
494
  },
405
495
 
406
- _respectSize: function(data, event) {
407
-
408
- var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
409
- ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
410
- isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
411
-
412
- if (isminw) data.width = o.minWidth;
413
- if (isminh) data.height = o.minHeight;
414
- if (ismaxw) data.width = o.maxWidth;
415
- if (ismaxh) data.height = o.maxHeight;
416
-
417
- var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;
418
- var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
496
+ _respectSize: function( data ) {
497
+
498
+ var o = this._vBoundaries,
499
+ a = this.axis,
500
+ ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
501
+ isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
502
+ dw = this.originalPosition.left + this.originalSize.width,
503
+ dh = this.position.top + this.size.height,
504
+ cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
505
+ if (isminw) {
506
+ data.width = o.minWidth;
507
+ }
508
+ if (isminh) {
509
+ data.height = o.minHeight;
510
+ }
511
+ if (ismaxw) {
512
+ data.width = o.maxWidth;
513
+ }
514
+ if (ismaxh) {
515
+ data.height = o.maxHeight;
516
+ }
419
517
 
420
- if (isminw && cw) data.left = dw - o.minWidth;
421
- if (ismaxw && cw) data.left = dw - o.maxWidth;
422
- if (isminh && ch) data.top = dh - o.minHeight;
423
- if (ismaxh && ch) data.top = dh - o.maxHeight;
518
+ if (isminw && cw) {
519
+ data.left = dw - o.minWidth;
520
+ }
521
+ if (ismaxw && cw) {
522
+ data.left = dw - o.maxWidth;
523
+ }
524
+ if (isminh && ch) {
525
+ data.top = dh - o.minHeight;
526
+ }
527
+ if (ismaxh && ch) {
528
+ data.top = dh - o.maxHeight;
529
+ }
424
530
 
425
531
  // fixing jump error on top/left - bug #2330
426
- var isNotwh = !data.width && !data.height;
427
- if (isNotwh && !data.left && data.top) data.top = null;
428
- else if (isNotwh && !data.top && data.left) data.left = null;
532
+ if (!data.width && !data.height && !data.left && data.top) {
533
+ data.top = null;
534
+ } else if (!data.width && !data.height && !data.top && data.left) {
535
+ data.left = null;
536
+ }
429
537
 
430
538
  return data;
431
539
  },
432
540
 
433
541
  _proportionallyResize: function() {
434
542
 
435
- var o = this.options;
436
- if (!this._proportionallyResizeElements.length) return;
437
- var element = this.helper || this.element;
543
+ if (!this._proportionallyResizeElements.length) {
544
+ return;
545
+ }
546
+
547
+ var i, j, borders, paddings, prel,
548
+ element = this.helper || this.element;
438
549
 
439
- for (var i=0; i < this._proportionallyResizeElements.length; i++) {
550
+ for ( i=0; i < this._proportionallyResizeElements.length; i++) {
440
551
 
441
- var prel = this._proportionallyResizeElements[i];
552
+ prel = this._proportionallyResizeElements[i];
442
553
 
443
554
  if (!this.borderDif) {
444
- var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
445
- p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
555
+ this.borderDif = [];
556
+ borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
557
+ paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
446
558
 
447
- this.borderDif = $.map(b, function(v, i) {
448
- var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;
449
- return border + padding;
450
- });
559
+ for ( j = 0; j < borders.length; j++ ) {
560
+ this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
561
+ }
451
562
  }
452
563
 
453
564
  prel.css({
@@ -455,7 +566,7 @@ $.widget("ui.resizable", $.ui.mouse, {
455
566
  width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
456
567
  });
457
568
 
458
- };
569
+ }
459
570
 
460
571
  },
461
572
 
@@ -466,18 +577,14 @@ $.widget("ui.resizable", $.ui.mouse, {
466
577
 
467
578
  if(this._helper) {
468
579
 
469
- this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
470
-
471
- // fix ie6 offset TODO: This seems broken
472
- var ie6offset = ($.ui.ie6 ? 1 : 0),
473
- pxyoffset = ( $.ui.ie6 ? 2 : -1 );
580
+ this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
474
581
 
475
582
  this.helper.addClass(this._helper).css({
476
- width: this.element.outerWidth() + pxyoffset,
477
- height: this.element.outerHeight() + pxyoffset,
478
- position: 'absolute',
479
- left: this.elementOffset.left - ie6offset +'px',
480
- top: this.elementOffset.top - ie6offset +'px',
583
+ width: this.element.outerWidth() - 1,
584
+ height: this.element.outerHeight() - 1,
585
+ position: "absolute",
586
+ left: this.elementOffset.left +"px",
587
+ top: this.elementOffset.top +"px",
481
588
  zIndex: ++o.zIndex //TODO: Don't modify option
482
589
  });
483
590
 
@@ -492,15 +599,15 @@ $.widget("ui.resizable", $.ui.mouse, {
492
599
  },
493
600
 
494
601
  _change: {
495
- e: function(event, dx, dy) {
602
+ e: function(event, dx) {
496
603
  return { width: this.originalSize.width + dx };
497
604
  },
498
- w: function(event, dx, dy) {
499
- var o = this.options, cs = this.originalSize, sp = this.originalPosition;
605
+ w: function(event, dx) {
606
+ var cs = this.originalSize, sp = this.originalPosition;
500
607
  return { left: sp.left + dx, width: cs.width - dx };
501
608
  },
502
609
  n: function(event, dx, dy) {
503
- var o = this.options, cs = this.originalSize, sp = this.originalPosition;
610
+ var cs = this.originalSize, sp = this.originalPosition;
504
611
  return { top: sp.top + dy, height: cs.height - dy };
505
612
  },
506
613
  s: function(event, dx, dy) {
@@ -522,7 +629,7 @@ $.widget("ui.resizable", $.ui.mouse, {
522
629
 
523
630
  _propagate: function(n, event) {
524
631
  $.ui.plugin.call(this, n, [event, this.ui()]);
525
- (n != "resize" && this._trigger(n, event, this.ui()));
632
+ (n !== "resize" && this._trigger(n, event, this.ui()));
526
633
  },
527
634
 
528
635
  plugins: {},
@@ -545,76 +652,18 @@ $.widget("ui.resizable", $.ui.mouse, {
545
652
  * Resizable Extensions
546
653
  */
547
654
 
548
- $.ui.plugin.add("resizable", "alsoResize", {
549
-
550
- start: function (event, ui) {
551
- var that = $(this).data("resizable"), o = that.options;
552
-
553
- var _store = function (exp) {
554
- $(exp).each(function() {
555
- var el = $(this);
556
- el.data("resizable-alsoresize", {
557
- width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
558
- left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10)
559
- });
560
- });
561
- };
562
-
563
- if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {
564
- if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
565
- else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
566
- }else{
567
- _store(o.alsoResize);
568
- }
569
- },
570
-
571
- resize: function (event, ui) {
572
- var that = $(this).data("resizable"), o = that.options, os = that.originalSize, op = that.originalPosition;
573
-
574
- var delta = {
575
- height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
576
- top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
577
- },
578
-
579
- _alsoResize = function (exp, c) {
580
- $(exp).each(function() {
581
- var el = $(this), start = $(this).data("resizable-alsoresize"), style = {},
582
- css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];
583
-
584
- $.each(css, function (i, prop) {
585
- var sum = (start[prop]||0) + (delta[prop]||0);
586
- if (sum && sum >= 0)
587
- style[prop] = sum || null;
588
- });
589
-
590
- el.css(style);
591
- });
592
- };
593
-
594
- if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {
595
- $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
596
- }else{
597
- _alsoResize(o.alsoResize);
598
- }
599
- },
600
-
601
- stop: function (event, ui) {
602
- $(this).removeData("resizable-alsoresize");
603
- }
604
- });
605
-
606
655
  $.ui.plugin.add("resizable", "animate", {
607
656
 
608
- stop: function(event, ui) {
609
- var that = $(this).data("resizable"), o = that.options;
610
-
611
- var pr = that._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),
612
- soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : that.sizeDiff.height,
613
- soffsetw = ista ? 0 : that.sizeDiff.width;
614
-
615
- var style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
616
- left = (parseInt(that.element.css('left'), 10) + (that.position.left - that.originalPosition.left)) || null,
617
- top = (parseInt(that.element.css('top'), 10) + (that.position.top - that.originalPosition.top)) || null;
657
+ stop: function( event ) {
658
+ var that = $(this).data("ui-resizable"),
659
+ o = that.options,
660
+ pr = that._proportionallyResizeElements,
661
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName),
662
+ soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
663
+ soffsetw = ista ? 0 : that.sizeDiff.width,
664
+ style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
665
+ left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
666
+ top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
618
667
 
619
668
  that.element.animate(
620
669
  $.extend(style, top && left ? { top: top, left: left } : {}), {
@@ -623,13 +672,15 @@ $.ui.plugin.add("resizable", "animate", {
623
672
  step: function() {
624
673
 
625
674
  var data = {
626
- width: parseInt(that.element.css('width'), 10),
627
- height: parseInt(that.element.css('height'), 10),
628
- top: parseInt(that.element.css('top'), 10),
629
- left: parseInt(that.element.css('left'), 10)
675
+ width: parseInt(that.element.css("width"), 10),
676
+ height: parseInt(that.element.css("height"), 10),
677
+ top: parseInt(that.element.css("top"), 10),
678
+ left: parseInt(that.element.css("left"), 10)
630
679
  };
631
680
 
632
- if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });
681
+ if (pr && pr.length) {
682
+ $(pr[0]).css({ width: data.width, height: data.height });
683
+ }
633
684
 
634
685
  // propagating resize, and updating values for each animation step
635
686
  that._updateCache(data);
@@ -644,14 +695,21 @@ $.ui.plugin.add("resizable", "animate", {
644
695
 
645
696
  $.ui.plugin.add("resizable", "containment", {
646
697
 
647
- start: function(event, ui) {
648
- var that = $(this).data("resizable"), o = that.options, el = that.element;
649
- var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
650
- if (!ce) return;
698
+ start: function() {
699
+ var element, p, co, ch, cw, width, height,
700
+ that = $(this).data("ui-resizable"),
701
+ o = that.options,
702
+ el = that.element,
703
+ oc = o.containment,
704
+ ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
705
+
706
+ if (!ce) {
707
+ return;
708
+ }
651
709
 
652
710
  that.containerElement = $(ce);
653
711
 
654
- if (/document/.test(oc) || oc == document) {
712
+ if (/document/.test(oc) || oc === document) {
655
713
  that.containerOffset = { left: 0, top: 0 };
656
714
  that.containerPosition = { left: 0, top: 0 };
657
715
 
@@ -663,15 +721,19 @@ $.ui.plugin.add("resizable", "containment", {
663
721
 
664
722
  // i'm a node, so compute top, left, right, bottom
665
723
  else {
666
- var element = $(ce), p = [];
724
+ element = $(ce);
725
+ p = [];
667
726
  $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
668
727
 
669
728
  that.containerOffset = element.offset();
670
729
  that.containerPosition = element.position();
671
730
  that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
672
731
 
673
- var co = that.containerOffset, ch = that.containerSize.height, cw = that.containerSize.width,
674
- width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
732
+ co = that.containerOffset;
733
+ ch = that.containerSize.height;
734
+ cw = that.containerSize.width;
735
+ width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
736
+ height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
675
737
 
676
738
  that.parentData = {
677
739
  element: ce, left: co.left, top: co.top, width: width, height: height
@@ -679,114 +741,227 @@ $.ui.plugin.add("resizable", "containment", {
679
741
  }
680
742
  },
681
743
 
682
- resize: function(event, ui) {
683
- var that = $(this).data("resizable"), o = that.options,
684
- ps = that.containerSize, co = that.containerOffset, cs = that.size, cp = that.position,
685
- pRatio = that._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = that.containerElement;
744
+ resize: function( event ) {
745
+ var woset, hoset, isParent, isOffsetRelative,
746
+ that = $(this).data("ui-resizable"),
747
+ o = that.options,
748
+ co = that.containerOffset, cp = that.position,
749
+ pRatio = that._aspectRatio || event.shiftKey,
750
+ cop = { top:0, left:0 }, ce = that.containerElement;
686
751
 
687
- if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;
752
+ if (ce[0] !== document && (/static/).test(ce.css("position"))) {
753
+ cop = co;
754
+ }
688
755
 
689
756
  if (cp.left < (that._helper ? co.left : 0)) {
690
757
  that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
691
- if (pRatio) that.size.height = that.size.width / that.aspectRatio;
758
+ if (pRatio) {
759
+ that.size.height = that.size.width / that.aspectRatio;
760
+ }
692
761
  that.position.left = o.helper ? co.left : 0;
693
762
  }
694
763
 
695
764
  if (cp.top < (that._helper ? co.top : 0)) {
696
765
  that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
697
- if (pRatio) that.size.width = that.size.height * that.aspectRatio;
766
+ if (pRatio) {
767
+ that.size.width = that.size.height * that.aspectRatio;
768
+ }
698
769
  that.position.top = that._helper ? co.top : 0;
699
770
  }
700
771
 
701
772
  that.offset.left = that.parentData.left+that.position.left;
702
773
  that.offset.top = that.parentData.top+that.position.top;
703
774
 
704
- var woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width ),
705
- hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
775
+ woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
776
+ hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
706
777
 
707
- var isParent = that.containerElement.get(0) == that.element.parent().get(0),
708
- isOffsetRelative = /relative|absolute/.test(that.containerElement.css('position'));
778
+ isParent = that.containerElement.get(0) === that.element.parent().get(0);
779
+ isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
709
780
 
710
- if(isParent && isOffsetRelative) woset -= that.parentData.left;
781
+ if(isParent && isOffsetRelative) {
782
+ woset -= that.parentData.left;
783
+ }
711
784
 
712
785
  if (woset + that.size.width >= that.parentData.width) {
713
786
  that.size.width = that.parentData.width - woset;
714
- if (pRatio) that.size.height = that.size.width / that.aspectRatio;
787
+ if (pRatio) {
788
+ that.size.height = that.size.width / that.aspectRatio;
789
+ }
715
790
  }
716
791
 
717
792
  if (hoset + that.size.height >= that.parentData.height) {
718
793
  that.size.height = that.parentData.height - hoset;
719
- if (pRatio) that.size.width = that.size.height * that.aspectRatio;
794
+ if (pRatio) {
795
+ that.size.width = that.size.height * that.aspectRatio;
796
+ }
720
797
  }
721
798
  },
722
799
 
723
- stop: function(event, ui){
724
- var that = $(this).data("resizable"), o = that.options, cp = that.position,
725
- co = that.containerOffset, cop = that.containerPosition, ce = that.containerElement;
726
-
727
- var helper = $(that.helper), ho = helper.offset(), w = helper.outerWidth() - that.sizeDiff.width, h = helper.outerHeight() - that.sizeDiff.height;
728
-
729
- if (that._helper && !o.animate && (/relative/).test(ce.css('position')))
800
+ stop: function(){
801
+ var that = $(this).data("ui-resizable"),
802
+ o = that.options,
803
+ co = that.containerOffset,
804
+ cop = that.containerPosition,
805
+ ce = that.containerElement,
806
+ helper = $(that.helper),
807
+ ho = helper.offset(),
808
+ w = helper.outerWidth() - that.sizeDiff.width,
809
+ h = helper.outerHeight() - that.sizeDiff.height;
810
+
811
+ if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
730
812
  $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
813
+ }
731
814
 
732
- if (that._helper && !o.animate && (/static/).test(ce.css('position')))
815
+ if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
733
816
  $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
817
+ }
818
+
819
+ }
820
+ });
821
+
822
+ $.ui.plugin.add("resizable", "alsoResize", {
823
+
824
+ start: function () {
825
+ var that = $(this).data("ui-resizable"),
826
+ o = that.options,
827
+ _store = function (exp) {
828
+ $(exp).each(function() {
829
+ var el = $(this);
830
+ el.data("ui-resizable-alsoresize", {
831
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
832
+ left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
833
+ });
834
+ });
835
+ };
836
+
837
+ if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
838
+ if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
839
+ else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
840
+ }else{
841
+ _store(o.alsoResize);
842
+ }
843
+ },
844
+
845
+ resize: function (event, ui) {
846
+ var that = $(this).data("ui-resizable"),
847
+ o = that.options,
848
+ os = that.originalSize,
849
+ op = that.originalPosition,
850
+ delta = {
851
+ height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
852
+ top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
853
+ },
854
+
855
+ _alsoResize = function (exp, c) {
856
+ $(exp).each(function() {
857
+ var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
858
+ css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
859
+
860
+ $.each(css, function (i, prop) {
861
+ var sum = (start[prop]||0) + (delta[prop]||0);
862
+ if (sum && sum >= 0) {
863
+ style[prop] = sum || null;
864
+ }
865
+ });
866
+
867
+ el.css(style);
868
+ });
869
+ };
734
870
 
871
+ if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
872
+ $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
873
+ }else{
874
+ _alsoResize(o.alsoResize);
875
+ }
876
+ },
877
+
878
+ stop: function () {
879
+ $(this).removeData("resizable-alsoresize");
735
880
  }
736
881
  });
737
882
 
738
883
  $.ui.plugin.add("resizable", "ghost", {
739
884
 
740
- start: function(event, ui) {
885
+ start: function() {
741
886
 
742
- var that = $(this).data("resizable"), o = that.options, cs = that.size;
887
+ var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
743
888
 
744
889
  that.ghost = that.originalElement.clone();
745
890
  that.ghost
746
- .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
747
- .addClass('ui-resizable-ghost')
748
- .addClass(typeof o.ghost == 'string' ? o.ghost : '');
891
+ .css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
892
+ .addClass("ui-resizable-ghost")
893
+ .addClass(typeof o.ghost === "string" ? o.ghost : "");
749
894
 
750
895
  that.ghost.appendTo(that.helper);
751
896
 
752
897
  },
753
898
 
754
- resize: function(event, ui){
755
- var that = $(this).data("resizable"), o = that.options;
756
- if (that.ghost) that.ghost.css({ position: 'relative', height: that.size.height, width: that.size.width });
899
+ resize: function(){
900
+ var that = $(this).data("ui-resizable");
901
+ if (that.ghost) {
902
+ that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
903
+ }
757
904
  },
758
905
 
759
- stop: function(event, ui){
760
- var that = $(this).data("resizable"), o = that.options;
761
- if (that.ghost && that.helper) that.helper.get(0).removeChild(that.ghost.get(0));
906
+ stop: function() {
907
+ var that = $(this).data("ui-resizable");
908
+ if (that.ghost && that.helper) {
909
+ that.helper.get(0).removeChild(that.ghost.get(0));
910
+ }
762
911
  }
763
912
 
764
913
  });
765
914
 
766
915
  $.ui.plugin.add("resizable", "grid", {
767
916
 
768
- resize: function(event, ui) {
769
- var that = $(this).data("resizable"), o = that.options, cs = that.size, os = that.originalSize, op = that.originalPosition, a = that.axis, ratio = o._aspectRatio || event.shiftKey;
770
- o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
771
- var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);
917
+ resize: function() {
918
+ var that = $(this).data("ui-resizable"),
919
+ o = that.options,
920
+ cs = that.size,
921
+ os = that.originalSize,
922
+ op = that.originalPosition,
923
+ a = that.axis,
924
+ grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
925
+ gridX = (grid[0]||1),
926
+ gridY = (grid[1]||1),
927
+ ox = Math.round((cs.width - os.width) / gridX) * gridX,
928
+ oy = Math.round((cs.height - os.height) / gridY) * gridY,
929
+ newWidth = os.width + ox,
930
+ newHeight = os.height + oy,
931
+ isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
932
+ isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
933
+ isMinWidth = o.minWidth && (o.minWidth > newWidth),
934
+ isMinHeight = o.minHeight && (o.minHeight > newHeight);
935
+
936
+ o.grid = grid;
937
+
938
+ if (isMinWidth) {
939
+ newWidth = newWidth + gridX;
940
+ }
941
+ if (isMinHeight) {
942
+ newHeight = newHeight + gridY;
943
+ }
944
+ if (isMaxWidth) {
945
+ newWidth = newWidth - gridX;
946
+ }
947
+ if (isMaxHeight) {
948
+ newHeight = newHeight - gridY;
949
+ }
772
950
 
773
951
  if (/^(se|s|e)$/.test(a)) {
774
- that.size.width = os.width + ox;
775
- that.size.height = os.height + oy;
776
- }
777
- else if (/^(ne)$/.test(a)) {
778
- that.size.width = os.width + ox;
779
- that.size.height = os.height + oy;
952
+ that.size.width = newWidth;
953
+ that.size.height = newHeight;
954
+ } else if (/^(ne)$/.test(a)) {
955
+ that.size.width = newWidth;
956
+ that.size.height = newHeight;
780
957
  that.position.top = op.top - oy;
781
- }
782
- else if (/^(sw)$/.test(a)) {
783
- that.size.width = os.width + ox;
784
- that.size.height = os.height + oy;
958
+ } else if (/^(sw)$/.test(a)) {
959
+ that.size.width = newWidth;
960
+ that.size.height = newHeight;
785
961
  that.position.left = op.left - ox;
786
- }
787
- else {
788
- that.size.width = os.width + ox;
789
- that.size.height = os.height + oy;
962
+ } else {
963
+ that.size.width = newWidth;
964
+ that.size.height = newHeight;
790
965
  that.position.top = op.top - oy;
791
966
  that.position.left = op.left - ox;
792
967
  }
@@ -794,12 +969,4 @@ $.ui.plugin.add("resizable", "grid", {
794
969
 
795
970
  });
796
971
 
797
- var num = function(v) {
798
- return parseInt(v, 10) || 0;
799
- };
800
-
801
- var isNumber = function(value) {
802
- return !isNaN(parseInt(value, 10));
803
- };
804
-
805
972
  })(jQuery);