|  | (function($) { | 
        
          |  | /** | 
        
          |  | * Auto-growing textareas; technique ripped from Facebook | 
        
          |  | * | 
        
          |  | * | 
        
          |  | * http://github.com/jaz303/jquery-grab-bag/tree/master/javascripts/jquery.autogrow-textarea.js | 
        
          |  | */ | 
        
          |  | $.fn.autogrow = function(options) { | 
        
          |  | return this.filter('textarea').each(function() { | 
        
          |  | var self = this; | 
        
          |  | var $self = $(self); | 
        
          |  | var minHeight = $self.height(); | 
        
          |  | var noFlickerPad = $self.hasClass('autogrow-short') ? 0 : parseInt($self.css('lineHeight')) || 0; | 
        
          |  | var settings = $.extend({ | 
        
          |  | preGrowCallback: null, | 
        
          |  | postGrowCallback: null | 
        
          |  | }, options); | 
        
          |  |  | 
        
          |  | var shadow = $('<div></div>').css({ | 
        
          |  | position: 'absolute', | 
        
          |  | top: -10000, | 
        
          |  | left: -10000, | 
        
          |  | width: $self.width(), | 
        
          |  | fontSize: $self.css('fontSize'), | 
        
          |  | fontFamily: $self.css('fontFamily'), | 
        
          |  | fontWeight: $self.css('fontWeight'), | 
        
          |  | lineHeight: $self.css('lineHeight'), | 
        
          |  | resize: 'none', | 
        
          |  | 'word-wrap': 'break-word' | 
        
          |  | }).appendTo(document.body); | 
        
          |  |  | 
        
          |  | var update = function(event) { | 
        
          |  | var times = function(string, number) { | 
        
          |  | for (var i = 0, r = ''; i < number; i++) r += string; | 
        
          |  | return r; | 
        
          |  | }; | 
        
          |  |  | 
        
          |  | var val = self.value.replace(/&/g, '&') | 
        
          |  | .replace(/</g, '<') | 
        
          |  | .replace(/>/g, '>') | 
        
          |  | .replace(/\n$/, '<br/> ') | 
        
          |  | .replace(/\n/g, '<br/>') | 
        
          |  | .replace(/ {2,}/g, function(space) { | 
        
          |  | return times(' ', space.length - 1) + ' ' | 
        
          |  | }); | 
        
          |  |  | 
        
          |  | // Did enter get pressed?  Resize in this keydown event so that the flicker doesn't occur. | 
        
          |  | if (event && event.data && event.data.event === 'keydown' && event.keyCode === 13) { | 
        
          |  | val += '<br />'; | 
        
          |  | } | 
        
          |  |  | 
        
          |  | shadow.css('width', $self.width()); | 
        
          |  | shadow.html(val + (noFlickerPad === 0 ? '...' : '')); // Append '...' to resize pre-emptively. | 
        
          |  |  | 
        
          |  | var newHeight = Math.max(shadow.height() + noFlickerPad, minHeight); | 
        
          |  | if (settings.preGrowCallback != null) { | 
        
          |  | newHeight = settings.preGrowCallback($self, shadow, newHeight, minHeight); | 
        
          |  | } | 
        
          |  |  | 
        
          |  | $self.height(newHeight); | 
        
          |  |  | 
        
          |  | if (settings.postGrowCallback != null) { | 
        
          |  | settings.postGrowCallback($self); | 
        
          |  | } | 
        
          |  | } | 
        
          |  |  | 
        
          |  | $self.change(update).keyup(update).keydown({ | 
        
          |  | event: 'keydown' | 
        
          |  | }, update); | 
        
          |  | $(window).resize(update); | 
        
          |  |  | 
        
          |  | update(); | 
        
          |  | }); | 
        
          |  | }; | 
        
          |  | })(jQuery); | 
        
          |  | $(function() { | 
        
          |  | $('textarea').autogrow(); | 
        
          |  | $('textarea').on('keyup', function() { | 
        
          |  | var content = $(this).val(); | 
        
          |  | var paragraphs = content.split("\n"); | 
        
          |  | $('.syllable-counter').html(''); | 
        
          |  | paragraphs.forEach(function(v) { | 
        
          |  | if (v.length > 0) { | 
        
          |  | $('.syllable-counter').append('<p class="count">' + v.length + '</p>') | 
        
          |  | } else { | 
        
          |  | $('.syllable-counter').append('<p class="count"> </p>') | 
        
          |  | } | 
        
          |  | }); | 
        
          |  | }); | 
        
          |  | }); |