| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 | 
							- <!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-layout-component-field-Field'>/**
 
- </span> * Layout class for components with {@link Ext.form.Labelable field labeling}, handling the sizing and alignment of
 
-  * the form control, label, and error message treatment.
 
-  * @private
 
-  */
 
- Ext.define('Ext.layout.component.field.Field', {
 
-     /* Begin Definitions */
 
-     extend: 'Ext.layout.component.Auto',
 
-     alias: 'layout.field',
 
-     uses: ['Ext.tip.QuickTip', 'Ext.util.TextMetrics', 'Ext.util.CSS'],
 
-     /* End Definitions */
 
-     type: 'field',
 
-     
 
-     naturalSizingProp: 'size',
 
-     beginLayout: function(ownerContext) {
 
-         var me = this,
 
-             owner = me.owner,
 
-             widthModel = ownerContext.widthModel,
 
-             ownerNaturalSize = owner[me.naturalSizingProp],
 
-             width;
 
-         me.callParent(arguments);
 
-         ownerContext.labelStrategy = me.getLabelStrategy();
 
-         ownerContext.errorStrategy = me.getErrorStrategy();
 
-         ownerContext.labelContext = ownerContext.getEl('labelEl');
 
-         ownerContext.bodyCellContext = ownerContext.getEl('bodyEl');
 
-         ownerContext.inputContext = ownerContext.getEl('inputEl');
 
-         ownerContext.errorContext = ownerContext.getEl('errorEl');
 
-         // width:100% on an element inside a table in IE6/7 "strict" sizes the content box.
 
-         // store the input element's border and padding info so that subclasses can take it into consideration if needed
 
-         if ((Ext.isIE6 || Ext.isIE7) && Ext.isStrict && ownerContext.inputContext) {
 
-             me.ieInputWidthAdjustment = ownerContext.inputContext.getPaddingInfo().width + ownerContext.inputContext.getBorderInfo().width;
 
-         }
 
-         // perform preparation on the label and error (setting css classes, qtips, etc.)
 
-         ownerContext.labelStrategy.prepare(ownerContext, owner);
 
-         ownerContext.errorStrategy.prepare(ownerContext, owner);
 
-         // Body cell must stretch to use up available width unless the field is auto width
 
-         if (widthModel.shrinkWrap) {
 
-             // When the width needs to be auto, table-layout cannot be fixed
 
-             me.beginLayoutShrinkWrap(ownerContext);
 
-         } else if (widthModel.natural) {
 
-             // When a size specified, natural becomes fixed width unless the inpiutWidth is specified - we shrinkwrap that
 
-             if (typeof ownerNaturalSize == 'number' && !owner.inputWidth) {
 
-                 me.beginLayoutFixed(ownerContext, (width = ownerNaturalSize * 6.5 + 20), 'px');
 
-             }
 
-             // Otherwise it is the same as shrinkWrap
 
-             else {
 
-                 me.beginLayoutShrinkWrap(ownerContext);
 
-             }
 
-             ownerContext.setWidth(width, false);
 
-         } else {
 
-             me.beginLayoutFixed(ownerContext, '100', '%');
 
-         }
 
-     },
 
-     beginLayoutFixed: function (ownerContext, width, suffix) {
 
-         var owner = ownerContext.target,
 
-             inputEl = owner.inputEl,
 
-             inputWidth = owner.inputWidth;
 
-         owner.el.setStyle('table-layout', 'fixed');
 
-         owner.bodyEl.setStyle('width', width + suffix);
 
-         if (inputEl && inputWidth) {
 
-             inputEl.setStyle('width', inputWidth + 'px');
 
-         }
 
-         ownerContext.isFixed = true;
 
-     },
 
-     beginLayoutShrinkWrap: function (ownerContext) {
 
-         var owner = ownerContext.target,
 
-             inputEl = owner.inputEl,
 
-             inputWidth = owner.inputWidth;
 
-         if (inputEl && inputEl.dom) {
 
-             inputEl.dom.removeAttribute('size');
 
-             if (inputWidth) {
 
-                 inputEl.setStyle('width', inputWidth + 'px');
 
-             }
 
-         }
 
-         owner.el.setStyle('table-layout', 'auto');
 
-         owner.bodyEl.setStyle('width', '');
 
-     },
 
-     finishedLayout: function(ownerContext){
 
-         var owner = this.owner;
 
-         this.callParent(arguments);        
 
-         ownerContext.labelStrategy.finishedLayout(ownerContext, owner);
 
-         ownerContext.errorStrategy.finishedLayout(ownerContext, owner);
 
-     },
 
-     calculateOwnerHeightFromContentHeight: function(ownerContext, contentHeight) {
 
-         return contentHeight;
 
-     },
 
-     measureContentHeight: function (ownerContext) {
 
-         return ownerContext.el.getHeight();
 
-     },
 
-     
 
-     measureContentWidth: function (ownerContext) {
 
-         return ownerContext.el.getWidth();
 
-     },
 
-     measureLabelErrorHeight: function (ownerContext) {
 
-         return ownerContext.labelStrategy.getHeight(ownerContext) +
 
-                ownerContext.errorStrategy.getHeight(ownerContext);
 
-     },
 
-     onFocus: function() {
 
-         this.getErrorStrategy().onFocus(this.owner);    
 
-     },
 
- <span id='Ext-layout-component-field-Field-method-getLabelStrategy'>    /**
 
- </span>     * Return the set of strategy functions from the {@link #labelStrategies labelStrategies collection}
 
-      * that is appropriate for the field's {@link Ext.form.Labelable#labelAlign labelAlign} config.
 
-      */
 
-     getLabelStrategy: function() {
 
-         var me = this,
 
-             strategies = me.labelStrategies,
 
-             labelAlign = me.owner.labelAlign;
 
-         return strategies[labelAlign] || strategies.base;
 
-     },
 
- <span id='Ext-layout-component-field-Field-method-getErrorStrategy'>    /**
 
- </span>     * Return the set of strategy functions from the {@link #errorStrategies errorStrategies collection}
 
-      * that is appropriate for the field's {@link Ext.form.Labelable#msgTarget msgTarget} config.
 
-      */
 
-     getErrorStrategy: function() {
 
-         var me = this,
 
-             owner = me.owner,
 
-             strategies = me.errorStrategies,
 
-             msgTarget = owner.msgTarget;
 
-         return !owner.preventMark && Ext.isString(msgTarget) ?
 
-                 (strategies[msgTarget] || strategies.elementId) :
 
-                 strategies.none;
 
-     },
 
- <span id='Ext-layout-component-field-Field-property-labelStrategies'>    /**
 
- </span>     * Collection of named strategies for laying out and adjusting labels to accommodate error messages.
 
-      * An appropriate one will be chosen based on the owner field's {@link Ext.form.Labelable#labelAlign} config.
 
-      */
 
-     labelStrategies: (function() {
 
-         var base = {
 
-                 prepare: function(ownerContext, owner) {
 
-                     var cls = owner.labelCls + '-' + owner.labelAlign,
 
-                         labelEl = owner.labelEl;
 
-                     if (labelEl) {
 
-                         labelEl.addCls(cls);
 
-                     }
 
-                 },
 
-                 getHeight: function () {
 
-                     return 0;
 
-                 },
 
-                 
 
-                 finishedLayout: Ext.emptyFn
 
-             };
 
-         return {
 
-             base: base,
 
- <span id='Ext-layout-component-field-Field-property-top'>            /**
 
- </span>             * Label displayed above the bodyEl
 
-              */
 
-             top: Ext.applyIf({        
 
-                         
 
-                 getHeight: function (ownerContext) {
 
-                     var labelContext = ownerContext.labelContext,
 
-                         props = labelContext.props,
 
-                         height = props.height;
 
-                         
 
-                     if (height === undefined) {
 
-                         props.height = height = labelContext.el.getHeight();
 
-                     }
 
-                     return height;
 
-                 }
 
-             }, base),
 
- <span id='Ext-layout-component-field-Field-property-left'>            /**
 
- </span>             * Label displayed to the left of the bodyEl
 
-              */
 
-             left: base,
 
- <span id='Ext-layout-component-field-Field-property-right'>            /**
 
- </span>             * Same as left, only difference is text-align in CSS
 
-              */
 
-             right: base
 
-         };
 
-     }()),
 
- <span id='Ext-layout-component-field-Field-property-errorStrategies'>    /**
 
- </span>     * Collection of named strategies for laying out and adjusting insets to accommodate error messages.
 
-      * An appropriate one will be chosen based on the owner field's {@link Ext.form.Labelable#msgTarget} config.
 
-      */
 
-     errorStrategies: (function() {
 
-         function showTip(owner) {
 
-             var tip = Ext.layout.component.field.Field.tip,
 
-                 target;
 
-                 
 
-             if (tip && tip.isVisible()) {
 
-                 target = tip.activeTarget;
 
-                 if (target && target.el === owner.getActionEl().dom) {
 
-                     tip.toFront(true);
 
-                 }
 
-             }
 
-         }
 
-         var applyIf = Ext.applyIf,
 
-             emptyFn = Ext.emptyFn,
 
-             iconCls = Ext.baseCSSPrefix + 'form-invalid-icon',
 
-             iconWidth,
 
-             base = {
 
-                 prepare: function(ownerContext, owner) {
 
-                     var el = owner.errorEl;
 
-                     if (el) {
 
-                         el.setDisplayed(false);
 
-                     }
 
-                 },
 
-                 getHeight: function () {
 
-                     return 0;
 
-                 },
 
-                 onFocus: emptyFn,
 
-                 finishedLayout: emptyFn
 
-             };
 
-         return {
 
-             none: base,
 
- <span id='Ext-layout-component-field-Field-property-side'>            /**
 
- </span>             * Error displayed as icon (with QuickTip on hover) to right of the bodyEl
 
-              */
 
-             side: applyIf({
 
-                 prepare: function(ownerContext, owner) {
 
-                     var errorEl = owner.errorEl,
 
-                         sideErrorCell = owner.sideErrorCell,
 
-                         displayError = owner.hasActiveError(),
 
-                         tempEl;
 
-                     // Capture error icon width once
 
-                     if (!iconWidth) {
 
-                         iconWidth = (tempEl = Ext.getBody().createChild({style: 'position:absolute', cls: iconCls})).getWidth();
 
-                         tempEl.remove();
 
-                     }
 
-                     errorEl.addCls(iconCls);
 
-                     errorEl.set({'data-errorqtip': owner.getActiveError() || ''});
 
-                     if (owner.autoFitErrors) {
 
-                         errorEl.setDisplayed(displayError);
 
-                     }
 
-                     // Not autofitting, the space must still be allocated.
 
-                     else {
 
-                         errorEl.setVisible(displayError);
 
-                     }
 
-                     // If we are auto fitting, then hide and show the entire cell
 
-                     if (sideErrorCell && owner.autoFitErrors) {
 
-                         sideErrorCell.setDisplayed(displayError);
 
-                     }
 
-                     owner.bodyEl.dom.colSpan = owner.getBodyColspan();
 
-                     // TODO: defer the tip call until after the layout to avoid immediate DOM reads now
 
-                     Ext.layout.component.field.Field.initTip();
 
-                 },
 
-                 onFocus: showTip
 
-             }, base),
 
- <span id='Ext-layout-component-field-Field-property-under'>            /**
 
- </span>             * Error message displayed underneath the bodyEl
 
-              */
 
-             under: applyIf({
 
-                 prepare: function(ownerContext, owner) {
 
-                     var errorEl = owner.errorEl,
 
-                         cls = Ext.baseCSSPrefix + 'form-invalid-under';
 
-                     errorEl.addCls(cls);
 
-                     errorEl.setDisplayed(owner.hasActiveError());
 
-                 },
 
-                 getHeight: function (ownerContext) {
 
-                     var height = 0,
 
-                         errorContext, props;
 
-                     if (ownerContext.target.hasActiveError()) {
 
-                         errorContext = ownerContext.errorContext;
 
-                         props = errorContext.props;
 
-                         height = props.height;
 
-                         if (height === undefined) {
 
-                             props.height = height = errorContext.el.getHeight();
 
-                         }
 
-                     }
 
-                     return height;
 
-                 }
 
-             }, base),
 
- <span id='Ext-layout-component-field-Field-property-qtip'>            /**
 
- </span>             * Error displayed as QuickTip on hover of the field container
 
-              */
 
-             qtip: applyIf({
 
-                 prepare: function(ownerContext, owner) {
 
-                     Ext.layout.component.field.Field.initTip();
 
-                     owner.getActionEl().set({'data-errorqtip': owner.getActiveError() || ''});
 
-                 },
 
-                 onFocus: showTip
 
-             }, base),
 
- <span id='Ext-layout-component-field-Field-property-title'>            /**
 
- </span>             * Error displayed as title tip on hover of the field container
 
-              */
 
-             title: applyIf({
 
-                 prepare: function(ownerContext, owner) {
 
-                     owner.el.set({'title': owner.getActiveError() || ''});
 
-                 }
 
-             }, base),
 
- <span id='Ext-layout-component-field-Field-property-elementId'>            /**
 
- </span>             * Error message displayed as content of an element with a given id elsewhere in the app
 
-              */
 
-             elementId: applyIf({
 
-                 prepare: function(ownerContext, owner) {
 
-                     var targetEl = Ext.fly(owner.msgTarget);
 
-                     if (targetEl) {
 
-                         targetEl.dom.innerHTML = owner.getActiveError() || '';
 
-                         targetEl.setDisplayed(owner.hasActiveError());
 
-                     }
 
-                 }
 
-             }, base)
 
-         };
 
-     }()),
 
-     statics: {
 
- <span id='Ext-layout-component-field-Field-static-method-initTip'>        /**
 
- </span>         * Use a custom QuickTip instance separate from the main QuickTips singleton, so that we
 
-          * can give it a custom frame style. Responds to errorqtip rather than the qtip property.
 
-          * @static
 
-          */
 
-         initTip: function() {
 
-             var tip = this.tip;
 
-             if (!tip) {
 
-                 tip = this.tip = Ext.create('Ext.tip.QuickTip', {
 
-                     baseCls: Ext.baseCSSPrefix + 'form-invalid-tip'
 
-                 });
 
-                 tip.tagConfig = Ext.apply({}, {attribute: 'errorqtip'}, tip.tagConfig);
 
-             }
 
-         },
 
- <span id='Ext-layout-component-field-Field-static-method-destroyTip'>        /**
 
- </span>         * Destroy the error tip instance.
 
-          * @static
 
-          */
 
-         destroyTip: function() {
 
-             var tip = this.tip;
 
-             if (tip) {
 
-                 tip.destroy();
 
-                 delete this.tip;
 
-             }
 
-         }
 
-     }
 
- });</pre>
 
- </body>
 
- </html>
 
 
  |