From 96d5517a9b9988d2b72bdb1b62d8872b58bc2100 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 17 Apr 2013 17:38:22 +0100 Subject: [PATCH] Update jQuery Autogrow Textarea Plugin to v3.0 --- Vendorfile | 6 ++ .../assets/jquery/jquery.autogrowtextarea.js | 101 +++++++++--------- 2 files changed, 56 insertions(+), 51 deletions(-) diff --git a/Vendorfile b/Vendorfile index d11ca37fc..43dd73fad 100644 --- a/Vendorfile +++ b/Vendorfile @@ -25,4 +25,10 @@ folder 'vendor/assets' do file 'leaflet.osm.js', 'leaflet-osm.js' end end + + folder 'jquery' do + from 'git://github.com/jevin/Autogrow-Textarea.git' do + file 'jquery.autogrowtextarea.js', 'jquery.autogrowtextarea.js' + end + end end diff --git a/vendor/assets/jquery/jquery.autogrowtextarea.js b/vendor/assets/jquery/jquery.autogrowtextarea.js index 8666c5578..9a8f69417 100644 --- a/vendor/assets/jquery/jquery.autogrowtextarea.js +++ b/vendor/assets/jquery/jquery.autogrowtextarea.js @@ -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): + * 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('
'); + 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, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>').replace(/\n/g, '
') + '.
.'; + + 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); + }); }; -- 2.43.2