# inputEx-library

### inputEx 0.5.1

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

    (function() {

       var Dom = YAHOO.util.Dom, Event = YAHOO.util.Event;

    /**
     * Create a Dialog from an inputEx field definition
     * @class inputEx.widget.Dialog
     * @constructor
     * @param {Object} options Config object, options are :
     * <ul>
     *   <li>inputExDef: an inputEx type definition (ex: {type: 'form', inputParams: {fields: [...]}})</li>
     *   <li>id: an optional id for the dialog</li>
     *   <li>parentEl: optional parentEl (default document.body)</li>
     *   <li>title: the dialog title</li>
     *   <li>panelConfig: the YAHOO.widget.Panel userConfig object</li>
     * </ul>
     */
    inputEx.widget.Dialog = function(options) {

       // options
       this._inputExOptions = {};
       this._inputExOptions.id = options.id || Dom.generateId();
       this._inputExOptions.parentEl = options.parentEl || document.body;
       this._inputExOptions.title = options.title || 'Please fill in the form';
       this._inputExOptions.panelConfig = options.panelConfig || {
    		constraintoviewport: true,
    		underlay:"shadow",
    		close:true,
    		fixedcenter: true,
    		visible:false,
    		draggable:true
    	};
    	this._inputExOptions.inputExDef = options.inputExDef;

       inputEx.widget.Dialog.superclass.constructor.call(this, this._inputExOptions.id, this._inputExOptions.panelConfig);

    	this.formAvailableEvt = new YAHOO.util.CustomEvent("formAvailableEvt");
    	this.formAvailableEvt.subscribe(function() { this.formAvailable = true; }, this, true);

       // Generate an id for a div inside the panel body
       this._inputExBodyId = Dom.generateId();

    	this.setHeader(this._inputExOptions.title);
    	this.setBody("<div id='"+this._inputExBodyId+"'></div>");

    	Event.onAvailable(this._inputExBodyId, this.buildForm, this, true);

    	this.render(this._inputExOptions.parentEl);

    };

    YAHOO.lang.extend(inputEx.widget.Dialog, YAHOO.widget.Panel, {

    	/**
    	 * Render the form
    	 */
       renderForm: function() {

          // Retro-compatibility with deprecated inputParams Object
          if (YAHOO.lang.isObject(this._inputExOptions.inputExDef.inputParams)) {
    		   this._inputExOptions.inputExDef.inputParams.parentEl = this._inputExBodyId;

    		// New prefered syntax for field options
    	   } else {
    		   this._inputExOptions.inputExDef.parentEl = this._inputExBodyId;
    	   }

          this._inputExFieldInstance = inputEx(this._inputExOptions.inputExDef);
          this._inputExFieldInstance._inputExDialog = this;

    	},

       /**
        * render the inputExDef as a inputEx field
        */
       buildForm: function() {
          this.renderForm();
          this.center();

    		this.formAvailableEvt.fire();

       },

       /**
        * Return the inputEx field instance created
        * @return {inputEx.Field} the field instance
        */
       getForm: function() {
          return this._inputExFieldInstance;
       },

       /**
        * Shortcut to get value
        * @return {Any} the field value
        */
       getValue: function() {
          return this.getForm().getValue();
       },

       /**
        * Shortcut to set value
        * @param {Any} value The value to set on the field
        * @param {boolean} [sendUpdatedEvt] (optional) Wether this setValue should fire the updatedEvt or not (default is true, pass false to NOT send the event)
        */
       setValue: function(value, sendUpdatedEvt) {
          this.getForm().setValue(value, sendUpdatedEvt);
       },

       /**
        * Execute a callback as soon as the form is available
        * @param {Object} callback An object like {fn: my_function, scope: my_scope}
        */
    	whenFormAvailable: function (callback) {

    		var fn, scope;

    		fn = callback.fn;
    		scope = callback.scope;

    		if (this.formAvailable) {
    			fn.call(scope);
    		} else {
    			this.formAvailableEvt.subscribe(fn, scope, true);
    		}

    	}

    });

    })();

Copyright © 2010 Eric Abouaf All rights reserved.