| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-form-FieldContainer'>/**
 
- </span> * FieldContainer is a derivation of {@link Ext.container.Container Container} that implements the
 
-  * {@link Ext.form.Labelable Labelable} mixin. This allows it to be configured so that it is rendered with
 
-  * a {@link #fieldLabel field label} and optional {@link #msgTarget error message} around its sub-items.
 
-  * This is useful for arranging a group of fields or other components within a single item in a form, so
 
-  * that it lines up nicely with other fields. A common use is for grouping a set of related fields under
 
-  * a single label in a form.
 
-  * 
 
-  * The container's configured {@link #cfg-items} will be layed out within the field body area according to the
 
-  * configured {@link #layout} type. The default layout is `'autocontainer'`.
 
-  * 
 
-  * Like regular fields, FieldContainer can inherit its decoration configuration from the
 
-  * {@link Ext.form.Panel#fieldDefaults fieldDefaults} of an enclosing FormPanel. In addition,
 
-  * FieldContainer itself can pass {@link #fieldDefaults} to any {@link Ext.form.Labelable fields}
 
-  * it may itself contain.
 
-  * 
 
-  * If you are grouping a set of {@link Ext.form.field.Checkbox Checkbox} or {@link Ext.form.field.Radio Radio}
 
-  * fields in a single labeled container, consider using a {@link Ext.form.CheckboxGroup}
 
-  * or {@link Ext.form.RadioGroup} instead as they are specialized for handling those types.
 
-  *
 
-  * # Example
 
-  * 
 
-  *     @example
 
-  *     Ext.create('Ext.form.Panel', {
 
-  *         title: 'FieldContainer Example',
 
-  *         width: 550,
 
-  *         bodyPadding: 10,
 
-  * 
 
-  *         items: [{
 
-  *             xtype: 'fieldcontainer',
 
-  *             fieldLabel: 'Last Three Jobs',
 
-  *             labelWidth: 100,
 
-  * 
 
-  *             // The body area will contain three text fields, arranged
 
-  *             // horizontally, separated by draggable splitters.
 
-  *             layout: 'hbox',
 
-  *             items: [{
 
-  *                 xtype: 'textfield',
 
-  *                 flex: 1
 
-  *             }, {
 
-  *                 xtype: 'splitter'
 
-  *             }, {
 
-  *                 xtype: 'textfield',
 
-  *                 flex: 1
 
-  *             }, {
 
-  *                 xtype: 'splitter'
 
-  *             }, {
 
-  *                 xtype: 'textfield',
 
-  *                 flex: 1
 
-  *             }]
 
-  *         }],
 
-  *         renderTo: Ext.getBody()
 
-  *     });
 
-  * 
 
-  * # Usage of fieldDefaults
 
-  *
 
-  *     @example
 
-  *     Ext.create('Ext.form.Panel', {
 
-  *         title: 'FieldContainer Example',
 
-  *         width: 350,
 
-  *         bodyPadding: 10,
 
-  * 
 
-  *         items: [{
 
-  *             xtype: 'fieldcontainer',
 
-  *             fieldLabel: 'Your Name',
 
-  *             labelWidth: 75,
 
-  *             defaultType: 'textfield',
 
-  * 
 
-  *             // Arrange fields vertically, stretched to full width
 
-  *             layout: 'anchor',
 
-  *             defaults: {
 
-  *                 layout: '100%'
 
-  *             },
 
-  * 
 
-  *             // These config values will be applied to both sub-fields, except
 
-  *             // for Last Name which will use its own msgTarget.
 
-  *             fieldDefaults: {
 
-  *                 msgTarget: 'under',
 
-  *                 labelAlign: 'top'
 
-  *             },
 
-  * 
 
-  *             items: [{
 
-  *                 fieldLabel: 'First Name',
 
-  *                 name: 'firstName'
 
-  *             }, {
 
-  *                 fieldLabel: 'Last Name',
 
-  *                 name: 'lastName',
 
-  *                 msgTarget: 'under'
 
-  *             }]
 
-  *         }],
 
-  *         renderTo: Ext.getBody()
 
-  *     });
 
-  * 
 
-  * @docauthor Jason Johnston <jason@sencha.com>
 
-  */
 
- Ext.define('Ext.form.FieldContainer', {
 
-     extend: 'Ext.container.Container',
 
-     mixins: {
 
-         labelable: 'Ext.form.Labelable',
 
-         fieldAncestor: 'Ext.form.FieldAncestor'
 
-     },
 
-     requires: 'Ext.layout.component.field.FieldContainer',
 
-     alias: 'widget.fieldcontainer',
 
-     componentLayout: 'fieldcontainer',
 
-     
 
-     componentCls: Ext.baseCSSPrefix + 'form-fieldcontainer',
 
- <span id='Ext-form-FieldContainer-cfg-combineLabels'>    /**
 
- </span>     * @cfg {Boolean} combineLabels
 
-      * If set to true, and there is no defined {@link #fieldLabel}, the field container will automatically
 
-      * generate its label by combining the labels of all the fields it contains. Defaults to false.
 
-      */
 
-     combineLabels: false,
 
-     //<locale>
 
- <span id='Ext-form-FieldContainer-cfg-labelConnector'>    /**
 
- </span>     * @cfg {String} labelConnector
 
-      * The string to use when joining the labels of individual sub-fields, when {@link #combineLabels} is
 
-      * set to true. Defaults to ', '.
 
-      */
 
-     labelConnector: ', ',
 
-     //</locale>
 
- <span id='Ext-form-FieldContainer-cfg-combineErrors'>    /**
 
- </span>     * @cfg {Boolean} combineErrors
 
-      * If set to true, the field container will automatically combine and display the validation errors from
 
-      * all the fields it contains as a single error on the container, according to the configured
 
-      * {@link #msgTarget}. Defaults to false.
 
-      */
 
-     combineErrors: false,
 
-     maskOnDisable: false,
 
-     fieldSubTpl: '{%this.renderContainer(out,values)%}',
 
-     initComponent: function() {
 
-         var me = this;
 
-         // Init mixins
 
-         me.initLabelable();
 
-         me.initFieldAncestor();
 
-         me.callParent();
 
-     },
 
-     beforeRender: function(){
 
-         this.callParent(arguments);
 
-         this.beforeLabelableRender(arguments);
 
-     },
 
- <span id='Ext-form-FieldContainer-method-onLabelableAdded'>    /**
 
- </span>     * @protected Called when a {@link Ext.form.Labelable} instance is added to the container's subtree.
 
-      * @param {Ext.form.Labelable} labelable The instance that was added
 
-      */
 
-     onLabelableAdded: function(labelable) {
 
-         var me = this;
 
-         me.mixins.fieldAncestor.onLabelableAdded.call(this, labelable);
 
-         me.updateLabel();
 
-     },
 
- <span id='Ext-form-FieldContainer-method-onLabelableRemoved'>    /**
 
- </span>     * @protected Called when a {@link Ext.form.Labelable} instance is removed from the container's subtree.
 
-      * @param {Ext.form.Labelable} labelable The instance that was removed
 
-      */
 
-     onLabelableRemoved: function(labelable) {
 
-         var me = this;
 
-         me.mixins.fieldAncestor.onLabelableRemoved.call(this, labelable);
 
-         me.updateLabel();
 
-     },
 
-     initRenderTpl: function() {
 
-         var me = this;
 
-         if (!me.hasOwnProperty('renderTpl')) {
 
-             me.renderTpl = me.getTpl('labelableRenderTpl');
 
-         }
 
-         return me.callParent();
 
-     },
 
-     initRenderData: function() {
 
-         return Ext.applyIf(this.callParent(), this.getLabelableRenderData());
 
-     },
 
- <span id='Ext-form-FieldContainer-method-getFieldLabel'>    /**
 
- </span>     * Returns the combined field label if {@link #combineLabels} is set to true and if there is no
 
-      * set {@link #fieldLabel}. Otherwise returns the fieldLabel like normal. You can also override
 
-      * this method to provide a custom generated label.
 
-      * @template
 
-      * @return {String} The label, or empty string if none.
 
-      */
 
-     getFieldLabel: function() {
 
-         var label = this.fieldLabel || '';
 
-         if (!label && this.combineLabels) {
 
-             label = Ext.Array.map(this.query('[isFieldLabelable]'), function(field) {
 
-                 return field.getFieldLabel();
 
-             }).join(this.labelConnector);
 
-         }
 
-         return label;
 
-     },
 
-     getSubTplData: function() {
 
-         var ret = this.initRenderData();
 
-         Ext.apply(ret, this.subTplData);
 
-         return ret;
 
-     },
 
-     getSubTplMarkup: function() {
 
-         var me = this,
 
-             tpl = me.getTpl('fieldSubTpl'),
 
-             html;
 
-         if (!tpl.renderContent) {
 
-             me.setupRenderTpl(tpl);
 
-         }
 
-         html = tpl.apply(me.getSubTplData());
 
-         return html;
 
-     },
 
- <span id='Ext-form-FieldContainer-method-updateLabel'>    /**
 
- </span>     * @private Updates the content of the labelEl if it is rendered
 
-      */
 
-     updateLabel: function() {
 
-         var me = this,
 
-             label = me.labelEl;
 
-         if (label) {
 
-             me.setFieldLabel(me.getFieldLabel());
 
-         }
 
-     },
 
- <span id='Ext-form-FieldContainer-method-onFieldErrorChange'>    /**
 
- </span>     * @private Fired when the error message of any field within the container changes, and updates the
 
-      * combined error message to match.
 
-      */
 
-     onFieldErrorChange: function(field, activeError) {
 
-         if (this.combineErrors) {
 
-             var me = this,
 
-                 oldError = me.getActiveError(),
 
-                 invalidFields = Ext.Array.filter(me.query('[isFormField]'), function(field) {
 
-                     return field.hasActiveError();
 
-                 }),
 
-                 newErrors = me.getCombinedErrors(invalidFields);
 
-             if (newErrors) {
 
-                 me.setActiveErrors(newErrors);
 
-             } else {
 
-                 me.unsetActiveError();
 
-             }
 
-             if (oldError !== me.getActiveError()) {
 
-                 me.doComponentLayout();
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-form-FieldContainer-method-getCombinedErrors'>    /**
 
- </span>     * Takes an Array of invalid {@link Ext.form.field.Field} objects and builds a combined list of error
 
-      * messages from them. Defaults to prepending each message by the field name and a colon. This
 
-      * can be overridden to provide custom combined error message handling, for instance changing
 
-      * the format of each message or sorting the array (it is sorted in order of appearance by default).
 
-      * @param {Ext.form.field.Field[]} invalidFields An Array of the sub-fields which are currently invalid.
 
-      * @return {String[]} The combined list of error messages
 
-      */
 
-     getCombinedErrors: function(invalidFields) {
 
-         var errors = [],
 
-             f,
 
-             fLen   = invalidFields.length,
 
-             field,
 
-             activeErrors, a, aLen,
 
-             error, label;
 
-         for (f = 0; f < fLen; f++) {
 
-             field = invalidFields[f];
 
-             activeErrors = field.getActiveErrors();
 
-             aLen         = activeErrors.length;
 
-             for (a = 0; a < aLen; a++) {
 
-                 error = activeErrors[a];
 
-                 label = field.getFieldLabel();
 
-                 errors.push((label ? label + ': ' : '') + error);
 
-             }
 
-         }
 
-         return errors;
 
-     },
 
-     getTargetEl: function() {
 
-         return this.bodyEl || this.callParent();
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |