3 changed files with 0 additions and 218 deletions
			
			
		@ -1,216 +0,0 @@ | 
				
			|||
/* | 
				
			|||
  jQuery placeholder plugin | 
				
			|||
  by Andrey Kuzmin, @unsoundscapes | 
				
			|||
 | 
				
			|||
  Based on existing plugin http://mths.be/placeholder by @mathias
 | 
				
			|||
  and this demo http://robertnyman.com/2011/05/02/ by @robertnyman
 | 
				
			|||
 | 
				
			|||
  Adopted to toggle placeholder on user input instead of focus | 
				
			|||
 | 
				
			|||
  Released under the MIT license | 
				
			|||
*/ | 
				
			|||
 | 
				
			|||
(function (factory) { | 
				
			|||
  'use strict'; | 
				
			|||
 | 
				
			|||
  if (typeof define === 'function' && define.amd) { | 
				
			|||
    // AMD. Register as anonymous module.
 | 
				
			|||
    define(['jquery'], factory) | 
				
			|||
  } else { | 
				
			|||
    // Browser globals.
 | 
				
			|||
    factory(jQuery) | 
				
			|||
  } | 
				
			|||
}(function ($) { | 
				
			|||
  'use strict'; | 
				
			|||
 | 
				
			|||
  var isInputSupported = 'placeholder' in document.createElement('input') | 
				
			|||
    , isTextareaSupported = 'placeholder' in document.createElement('textarea') | 
				
			|||
    , $placeholders = $() | 
				
			|||
 | 
				
			|||
  function getAttributes (element) { | 
				
			|||
    // Return an object of element attributes
 | 
				
			|||
    var newAttrs = {} | 
				
			|||
      , rinlinejQuery = /^jQuery\d+$/ | 
				
			|||
 | 
				
			|||
    $.each(element.attributes, function () { | 
				
			|||
      if (this.specified && !rinlinejQuery.test(this.name)) { | 
				
			|||
        newAttrs[this.name] = this.value | 
				
			|||
      } | 
				
			|||
    }) | 
				
			|||
    return newAttrs | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  function setCaretTo (element, index) { | 
				
			|||
    // Set caret to specified @index
 | 
				
			|||
    if (element.createTextRange) { | 
				
			|||
      var range = element.createTextRange() | 
				
			|||
      range.move('character', index) | 
				
			|||
      range.select() | 
				
			|||
    } else if (element.selectionStart !== null) { | 
				
			|||
      element.focus() | 
				
			|||
      element.setSelectionRange(index, index) | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
  function Placeholder (element, options) { | 
				
			|||
    this.options = options || {} | 
				
			|||
    this.$replacement = this.$element = $(element) | 
				
			|||
    this.initialize.apply(this, arguments) | 
				
			|||
    // Cache all elements with placeholders
 | 
				
			|||
    $placeholders = $placeholders.add(element) | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  Placeholder.prototype = { | 
				
			|||
 | 
				
			|||
    initialize: function () { | 
				
			|||
      this.isHidden = true | 
				
			|||
      this.placeholderAttr = this.$element.attr('placeholder') | 
				
			|||
      // do not mess with default behavior
 | 
				
			|||
      this.$element.removeAttr('placeholder') | 
				
			|||
      this.isPassword = this.$element.is('[type=password]') | 
				
			|||
      if (this.isPassword) this.makeReplacement() | 
				
			|||
      this.$replacement.on({ | 
				
			|||
        'keydown.placeholder': $.proxy(this.hide, this) | 
				
			|||
      , 'focus.placeholder drop.placeholder click.placeholder': $.proxy(this.setCaret, this) | 
				
			|||
      }) | 
				
			|||
      this.$element.on({ | 
				
			|||
        'blur.placeholder keyup.placeholder': $.proxy(this.show, this) | 
				
			|||
      }) | 
				
			|||
      this.show() | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    // Set or get input value
 | 
				
			|||
    // Setting value toggles placeholder
 | 
				
			|||
  , val: function (value) { | 
				
			|||
      if (value === undefined) { | 
				
			|||
        return this.isHidden ? this.$element[0].value : ''; | 
				
			|||
      } | 
				
			|||
      if (value === '') { | 
				
			|||
        if (this.isHidden) { | 
				
			|||
          this.$element[0].value = value | 
				
			|||
          this.show() | 
				
			|||
        } | 
				
			|||
      } else { | 
				
			|||
        if (!this.isHidden) this.hide() | 
				
			|||
        this.$element[0].value = value | 
				
			|||
      } | 
				
			|||
      return this | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    // Hide placeholder at user input
 | 
				
			|||
  , hide: function (e) { | 
				
			|||
      var isActiveElement = this.$replacement.is(':focus') | 
				
			|||
      if (this.isHidden) return; | 
				
			|||
      if (!e || !(e.shiftKey && e.keyCode === 16) && e.keyCode !== 9) { | 
				
			|||
        this.isHidden = true | 
				
			|||
        if (this.isPassword) { | 
				
			|||
          this.$replacement.before(this.$element.show()).hide() | 
				
			|||
          if (isActiveElement) this.$element.focus() | 
				
			|||
        } else { | 
				
			|||
          this.$element[0].value = '' | 
				
			|||
          this.$element.removeClass(this.options.className) | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    // Show placeholder on blur and keyup
 | 
				
			|||
  , show: function (e) { | 
				
			|||
      var isActiveElement = this.$element.is(':focus') | 
				
			|||
      if (!this.isHidden) return; | 
				
			|||
      if (this.$element[0].value === '') { | 
				
			|||
        this.isHidden = false | 
				
			|||
        if (this.isPassword) { | 
				
			|||
          this.$element.before(this.$replacement.show()).hide() | 
				
			|||
          if (isActiveElement) this.$replacement.focus() | 
				
			|||
        } else { | 
				
			|||
          this.$element[0].value = this.placeholderAttr | 
				
			|||
          this.$element.addClass(this.options.className) | 
				
			|||
          if (isActiveElement) this.setCaret(e) | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    // Set caret at the beginning of the input
 | 
				
			|||
  , setCaret: function (e) { | 
				
			|||
      if (e && !this.isHidden) { | 
				
			|||
        setCaretTo(this.$replacement[0], 0) | 
				
			|||
        e.preventDefault() | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    // Make and return replacement element
 | 
				
			|||
  , makeReplacement: function () { | 
				
			|||
      // we can't use $.fn.clone because ie <= 8 doesn't allow type change
 | 
				
			|||
      var replacementAttributes = | 
				
			|||
        $.extend( | 
				
			|||
          getAttributes(this.$element[0]) | 
				
			|||
        , { 'type': 'text' | 
				
			|||
          , 'value': this.placeholderAttr | 
				
			|||
          } | 
				
			|||
        ) | 
				
			|||
 | 
				
			|||
      // replacement should not have input name
 | 
				
			|||
      delete replacementAttributes.name | 
				
			|||
 | 
				
			|||
      this.$replacement = $('<input>', replacementAttributes) | 
				
			|||
        .data('placeholder', this) | 
				
			|||
        .addClass(this.options.className) | 
				
			|||
 | 
				
			|||
      return this.$replacement; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
  // Override jQuery val and prop hooks
 | 
				
			|||
  $.valHooks.input = $.valHooks.textarea = $.propHooks.value = { | 
				
			|||
    get: function (element) { | 
				
			|||
      var placeholder = $(element).data('placeholder') | 
				
			|||
      return placeholder ? placeholder.val() : element.value; | 
				
			|||
    } | 
				
			|||
  , set: function (element, value) { | 
				
			|||
      var placeholder = $(element).data('placeholder') | 
				
			|||
      return placeholder ? placeholder.val(value) : element.value = value; | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
  // Plugin definition
 | 
				
			|||
  $.fn.placeholder = function (option) { | 
				
			|||
    return this.each(function () { | 
				
			|||
      var $this = $(this) | 
				
			|||
        , data = $this.data('placeholder') | 
				
			|||
        , options = $.extend({}, $.fn.placeholder.defaults, typeof option === 'object' && option) | 
				
			|||
 | 
				
			|||
      if (!data && $this.is('[placeholder]') && (options.force || | 
				
			|||
          !isInputSupported && $this.is('input') || | 
				
			|||
          !isTextareaSupported && $this.is('textarea'))) { | 
				
			|||
        $this.data('placeholder', data = new Placeholder(this, options)) | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      if (data && typeof option === 'string') data[option]() | 
				
			|||
    }) | 
				
			|||
  } | 
				
			|||
  $.fn.placeholder.defaults = { | 
				
			|||
    force: false | 
				
			|||
  , className: 'placeholder' | 
				
			|||
  } | 
				
			|||
  $.fn.placeholder.Constructor = Placeholder | 
				
			|||
 | 
				
			|||
 | 
				
			|||
  // Events
 | 
				
			|||
  $(document).on('submit.placeholder', 'form', function () { | 
				
			|||
    // Clear the placeholder values so they don't get submitted
 | 
				
			|||
    $placeholders.placeholder('hide') | 
				
			|||
    // And then restore them back
 | 
				
			|||
    setTimeout(function () { $placeholders.placeholder('show') }, 10) | 
				
			|||
  }) | 
				
			|||
  $(window).on('beforeunload.placeholder', function () { | 
				
			|||
    // Clear placeholders upon page reload
 | 
				
			|||
    $placeholders.placeholder('hide') | 
				
			|||
  }) | 
				
			|||
 | 
				
			|||
  return Placeholder | 
				
			|||
 | 
				
			|||
})); | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue