summaryrefslogtreecommitdiff
path: root/share/www/script/jquery.resizer.js
blob: 081c717726e5bc49d29cb3f01b0f2e68c3b28ffb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License.  You may obtain a copy
// of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
// License for the specific language governing permissions and limitations under
// the License.

(function($) {

  $.fn.resizable = function(options) {
    options = options || {};
    options.always = options.always || false;
    options.grippie = options.grippie || null;
    options.minHeight = options.minHeight || 32;
    options.maxHeight = options.maxHeight || null;

    if (!options.always && $.browser.safari && parseInt($.browser.version) >= 522)
      return this; // safari3 and later provides textarea resizing natively

    return this.each(function() {
      var grippie = options.grippie;
      if (!grippie) grippie = $("<div></div>").appendTo(this.parentNode);
      grippie.addClass("grippie");
      var elem = $(this);
      grippie.mousedown(function(e) {
        var pos = e.screenY;
        var height = elem.height();
        $(document)
          .mousemove(function(e) {
            var offset = e.screenY - pos;
            if (offset) {
              var newHeight = height + offset;
              if (newHeight >= options.minHeight &&
                  (!options.maxHeight || newHeight <= options.maxHeight)) {
                elem.height(newHeight);
                height = newHeight;
              }
              pos = e.screenY;
            }
            document.onselectstart = function() { return false }; // for IE
            return false;
          })
          .one("mouseup", function() {
            $(document).unbind("mousemove");
            document.onselectstart = null; // for IE
          });
        return false;
      });
    });
  }

})(jQuery);