# inputEx-library

### inputEx 0.5.1

inputEx-library > inputEx > Textarea.js (source view)
Search:
Filters Show Private Show Protected Show Deprecated

    (function() {

       var Event = YAHOO.util.Event;

    /**
     * Create a textarea input
     * @class inputEx.Textarea
     * @extends inputEx.Field
     * @constructor
     * @param {Object} options Added options:
     * <ul>
     *	   <li>rows: rows attribute</li>
     *	   <li>cols: cols attribute</li>
     * </ul>
     */
    inputEx.Textarea = function(options) {
    	inputEx.Textarea.superclass.constructor.call(this,options);
    };
    YAHOO.lang.extend(inputEx.Textarea, inputEx.StringField, {

       /**
        * Set the specific options (rows and cols)
        * @param {Object} options Options object as passed to the constructor
        */
       setOptions: function(options) {
          inputEx.Textarea.superclass.setOptions.call(this, options);
          this.options.rows = options.rows || 6;
          this.options.cols = options.cols || 23;

          // warning : readonly option doesn't work on IE < 8
          this.options.readonly = !!options.readonly;
       },

       /**
        * Render an 'INPUT' DOM node
        */
       renderComponent: function() {

          // This element wraps the input node in a float: none div
          this.wrapEl = inputEx.cn('div', {className: 'inputEx-StringField-wrapper'});

          // Attributes of the input field
          var attributes = {};
          attributes.id = this.divEl.id?this.divEl.id+'-field':YAHOO.util.Dom.generateId();
          attributes.rows = this.options.rows;
          attributes.cols = this.options.cols;
          if(this.options.name) attributes.name = this.options.name;
          if(this.options.readonly) attributes.readonly = 'readonly';

          //if(this.options.maxLength) attributes.maxLength = this.options.maxLength;

          // Create the node
          this.el = inputEx.cn('textarea', attributes, null, this.options.value);

          // Append it to the main element
          this.wrapEl.appendChild(this.el);
          this.fieldContainer.appendChild(this.wrapEl);
       },

    	/**
        * Uses the optional regexp to validate the field value
        */
       validate: function() {
          var previous = inputEx.Textarea.superclass.validate.call(this);

          // emulate maxLength property for textarea
          //   -> user can still type but field is invalid
          if (this.options.maxLength) {
             previous = previous && this.getValue().length <= this.options.maxLength;
          }

          return previous;
       },

       /**
        * Add the minLength string message handling
        */
        getStateString: function(state) {
    	   if(state == inputEx.stateInvalid && this.options.minLength && this.el.value.length < this.options.minLength) {
    	      return inputEx.messages.stringTooShort[0]+this.options.minLength+inputEx.messages.stringTooShort[1];

    	   // Add message too long
          } else if (state == inputEx.stateInvalid && this.options.maxLength && this.el.value.length > this.options.maxLength) {
             return inputEx.messages.stringTooLong[0]+this.options.maxLength+inputEx.messages.stringTooLong[1];
          }
    	   return inputEx.Textarea.superclass.getStateString.call(this, state);
    	},

    	/**
    	 * Insert text at the current cursor position
    	 * @param {String} text Text to insert
    	 */
    	insert: function(text) {

    		var sel, startPos, endPos;

    		//IE support
    		if (document.selection) {
    			this.el.focus();
    			sel = document.selection.createRange();
    			sel.text = text;
    		}
    		//Mozilla/Firefox/Netscape 7+ support
    		else if (this.el.selectionStart || this.el.selectionStart == '0') {
    			startPos = this.el.selectionStart;
    			endPos = this.el.selectionEnd;
    			this.el.value = this.el.value.substring(0, startPos)+ text+ this.el.value.substring(endPos, this.el.value.length);
    		}
    		else {
    			this.el.value += text;
    		}
    	}

    });

    inputEx.messages.stringTooLong = ["This field should contain at most "," numbers or characters"];

    // Register this class as "text" type
    inputEx.registerType("text", inputEx.Textarea, [
       { type: 'integer', label: 'Rows',  name: 'rows', value: 6 },
       { type: 'integer', label: 'Cols', name: 'cols', value: 23 }
    ]);

    })();

Copyright © 2010 Eric Abouaf All rights reserved.