source: branches/version-2_13-dev/html/user_data/packages/sphone/js/jquery.autoResizeTextAreaQ-0.1.js @ 23179

Revision 23179, 3.4 KB checked in by nanasess, 11 years ago (diff)

#2150 崩れていたのを修正

Line 
1/*
2 * jQuery autoResizeTextAreaQ plugin
3 * @requires jQuery v1.4.2 or later
4 *
5 * Copyright (c) 2010 M. Brown (mbrowniebytes A gmail.com)
6 * Licensed under the Revised BSD license:
7 * http://www.opensource.org/licenses/bsd-license.php
8 * http://en.wikipedia.org/wiki/BSD_licenses
9 *
10 * Versions:
11 * 0.1 - 2010-07-21
12 *       initial
13 *
14 * usage:
15 *  $(document).ready( function() {
16 *      $('textarea').autoResizeTextAreaQ({"max_rows":8});
17 *  });
18 *
19 */
20
21(function($) {
22
23$.fn.autoResizeTextAreaQ = function(options) {
24    var opts = $.extend({
25        // ya prob want to use
26        max_rows: 10,   // # - max rows to resize too
27
28        // ya may want to use, but defaults should be ok
29        extra_rows: 1,  // # - nbr extra rows after last line ie padding; 0|1 optimal
30
31        // ya should really specify in html
32        rows: null,     // null|# - null infer from html; # override html
33        cols: null,     // null|# - null infer from html; # override html
34
35        debug: false    // true|false - turn on|off console.log()
36    }, options);
37
38    // extra padding based on browser
39    if ($.browser.msie) {
40        opts.extra_rows += 1;
41    } else if ($.browser.webkit) {
42        opts.extra_rows += 1;
43    } // else $.browser.mozilla
44
45    // iterate over passed in selector, only process actual textareas
46    return $(this).filter('textarea').each(function(index) {
47
48        var ta = $(this);
49        var orig = {};
50
51        // textarea rows cols current state
52        if (opts.cols != null && opts.cols > 0) {
53            ta.attr('cols', opts.cols);
54        }
55        orig.cols = ta.attr('cols');
56
57        if (opts.rows != null && opts.rows > 0) {
58            ta.attr('rows', opts.rows);
59        }
60        orig.rows = ta.attr('rows');
61
62        // validate max extra_rows
63        if (opts.max_rows == null || opts.max_rows < orig.rows) {
64            opts.max_rows = orig.rows;
65        }
66        if (opts.extra_rows == null || opts.extra_rows < 0) {
67            opts.extra_rows = 0;
68        }
69
70        if (opts.debug) {
71            console.log('opts: ', opts, ' orig: ', orig);
72        }
73
74        // resize textares on load
75        resize(ta, orig);
76
77        // check resize on key input
78        ta.bind('keyup', function(e) {
79            resize(ta, orig);
80        });
81    }); // end each()
82
83    function resize(ta, orig) {
84
85        // nbr explicit rows
86        var nl_rows = ta.val().split('\n');
87
88        // nbr inferred rows
89        var nbr_ta_rows = 0;
90        for (index in nl_rows) {
91            // overly simple check to account for text being auto wrapped and thus a new line
92            nbr_ta_rows += Math.floor((nl_rows[index].length / orig.cols)) + 1;
93        }
94
95        // get final nbr ta rows
96        var final_nbr_ta_rows = nbr_ta_rows - 1; // deduct for current line
97        final_nbr_ta_rows += opts.extra_rows; // add on extra rows
98
99        // resize textarea
100        // note: $.animate() doesnt work well here since only inc/dec row by one
101        if (final_nbr_ta_rows >= opts.max_rows) {
102            ta.attr('rows', opts.max_rows);
103
104        } else if (final_nbr_ta_rows >= orig.rows) {
105            ta.attr('rows', final_nbr_ta_rows);
106
107        } else {
108            ta.attr('rows', orig.rows);
109        }
110
111        if (opts.debug) {
112            console.log('rows: ', ta.attr('rows'), ' nbr nl_rows: ', nl_rows.length, ' nbr_ta_rows: ', nbr_ta_rows, ' final_nbr_ta_rows: ', final_nbr_ta_rows);
113        }
114    } // end resize()
115
116}; // end autoResizeTextAreaQ()
117
118})(jQuery);
Note: See TracBrowser for help on using the repository browser.