]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/assets/jquery/jquery.autogrowtextarea.js
Update jQuery Autogrow Textarea Plugin to v3.0
[rails.git] / vendor / assets / jquery / jquery.autogrowtextarea.js
index 8666c5578764a3e0a9e0163410c7483f84a6acac..9a8f69417301a270c5f51d1955dbae2bf8586300 100644 (file)
@@ -1,61 +1,60 @@
-/*!
- * Autogrow Textarea Plugin Version v2.0
- * http://www.technoreply.com/autogrow-textarea-plugin-version-2-0
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <jevin9@gmail.com> wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return. Jevin O. Sewaruth
+ * ----------------------------------------------------------------------------
  *
- * Copyright 2011, Jevin O. Sewaruth
+ * Autogrow Textarea Plugin Version v3.0
+ * http://www.technoreply.com/autogrow-textarea-plugin-3-0
+ * 
+ * THIS PLUGIN IS DELIVERD ON A PAY WHAT YOU WHANT BASIS. IF THE PLUGIN WAS USEFUL TO YOU, PLEASE CONSIDER BUYING THE PLUGIN HERE :
+ * https://sites.fastspring.com/technoreply/instant/autogrowtextareaplugin
  *
- * Date: March 13, 2011
+ * Date: October 15, 2012
  */
-jQuery.fn.autoGrow = function(){
-       return this.each(function(){
-               // Variables
-               var colsDefault = this.cols;
-               var rowsDefault = this.rows;
-               
-               //Functions
-               var grow = function() {
-                       growByRef(this);
+
+jQuery.fn.autoGrow = function() {
+       return this.each(function() {
+
+               var createMirror = function(textarea) {
+                       jQuery(textarea).after('<div class="autogrow-textarea-mirror"></div>');
+                       return jQuery(textarea).next('.autogrow-textarea-mirror')[0];
                }
-               
-               var growByRef = function(obj) {
-                       var linesCount = 0;
-                       var lines = obj.value.split('\n');
-                       
-                       for (var i=lines.length-1; i>=0; --i)
-                       {
-                               linesCount += Math.floor((lines[i].length / colsDefault) + 1);
-                       }
-
-                       if (linesCount >= rowsDefault)
-                               obj.rows = linesCount + 1;
-                       else
-                               obj.rows = rowsDefault;
+
+               var sendContentToMirror = function (textarea) {
+                       mirror.innerHTML = String(textarea.value).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n/g, '<br />') + '.<br/>.';
+
+                       if (jQuery(textarea).height() != jQuery(mirror).height())
+                               jQuery(textarea).height(jQuery(mirror).height());
                }
-               
-               var characterWidth = function (obj){
-                       var characterWidth = 0;
-                       var temp1 = 0;
-                       var temp2 = 0;
-                       var tempCols = obj.cols;
-                       
-                       obj.cols = 1;
-                       temp1 = obj.offsetWidth;
-                       obj.cols = 2;
-                       temp2 = obj.offsetWidth;
-                       characterWidth = temp2 - temp1;
-                       obj.cols = tempCols;
-                       
-                       return characterWidth;
+
+               var growTextarea = function () {
+                       sendContentToMirror(this);
                }
+
+               // Create a mirror
+               var mirror = createMirror(this);
                
-               // Manipulations
-               this.style.width = "auto";
-               this.style.height = "auto";
+               // Style the mirror
+               mirror.style.display = 'none';
+               mirror.style.wordWrap = 'break-word';
+               mirror.style.padding = jQuery(this).css('padding');
+               mirror.style.width = jQuery(this).css('width');
+               mirror.style.fontFamily = jQuery(this).css('font-family');
+               mirror.style.fontSize = jQuery(this).css('font-size');
+               mirror.style.lineHeight = jQuery(this).css('line-height');
+
+               // Style the textarea
                this.style.overflow = "hidden";
-               this.style.width = ((characterWidth(this) * this.cols) + 6) + "px";
-               this.onkeyup = grow;
-               this.onfocus = grow;
-               this.onblur = grow;
-               growByRef(this);
+               this.style.minHeight = this.rows+"em";
+
+               // Bind the textarea's event
+               this.onkeyup = growTextarea;
+
+               // Fire the event for text already present
+               sendContentToMirror(this);
+
        });
 };