Sha256: 8bb854e15067a96db5bff6896d1d9435e4df83cf5bf6877a1d606940661d2588

Contents?: true

Size: 1.94 KB

Versions: 26

Compression:

Stored size: 1.94 KB

Contents

(function ($) {

  $.fn.characterCounter = function(){
    return this.each(function(){
      var $input = $(this);
      var $counterElement = $input.parent().find('span[class="character-counter"]');

      // character counter has already been added appended to the parent container
      if ($counterElement.length) {
        return;
      }

      var itHasLengthAttribute = $input.attr('length') !== undefined;

      if(itHasLengthAttribute){
        $input.on('input', updateCounter);
        $input.on('focus', updateCounter);
        $input.on('blur', removeCounterElement);

        addCounterElement($input);
      }

    });
  };

  function updateCounter(){
    var maxLength     = +$(this).attr('length'),
    actualLength      = +$(this).val().length,
    isValidLength     = actualLength <= maxLength;

    $(this).parent().find('span[class="character-counter"]')
                    .html( actualLength + '/' + maxLength);

    addInputStyle(isValidLength, $(this));
  }

  function addCounterElement($input) {
    var $counterElement = $input.parent().find('span[class="character-counter"]');

    if ($counterElement.length) {
      return;
    }

    $counterElement = $('<span/>')
                        .addClass('character-counter')
                        .css('float','right')
                        .css('font-size','12px')
                        .css('height', 1);

    $input.parent().append($counterElement);
  }

  function removeCounterElement(){
    $(this).parent().find('span[class="character-counter"]').html('');
  }

  function addInputStyle(isValidLength, $input){
    var inputHasInvalidClass = $input.hasClass('invalid');
    if (isValidLength && inputHasInvalidClass) {
      $input.removeClass('invalid');
    }
    else if(!isValidLength && !inputHasInvalidClass){
      $input.removeClass('valid');
      $input.addClass('invalid');
    }
  }

  $(document).ready(function(){
    $('input, textarea').characterCounter();
  });

}( jQuery ));

Version data entries

26 entries across 26 versions & 4 rubygems

Version Path
jera_push-2.1.4 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-2.1.3 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-2.1.2 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-2.0.0 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.2.4 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.2.3 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.2.1 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.7 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.6 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.5 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.4 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.3 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.2 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.1 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.1.0 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.0.3 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.0.2 app/assets/javascripts/jera_push/materialize/character_counter.js
mtl-1.1.0 vendor/assets/javascripts/materialize/character_counter.js
jera_push-1.0.1.1 app/assets/javascripts/jera_push/materialize/character_counter.js
jera_push-1.0.1 app/assets/javascripts/jera_push/materialize/character_counter.js