| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | <!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-container-Form'>/**</span> * This is a layout that will render form Fields, one under the other all stretched to the Container width. * *     @example *     Ext.create('Ext.Panel', { *         width: 500, *         height: 300, *         title: "FormLayout Panel", *         layout: 'form', *         renderTo: Ext.getBody(), *         bodyPadding: 5, *         defaultType: 'textfield', *         items: [{ *            fieldLabel: 'First Name', *             name: 'first', *             allowBlank:false *         },{ *             fieldLabel: 'Last Name', *             name: 'last' *         },{ *             fieldLabel: 'Company', *             name: 'company' *         }, { *             fieldLabel: 'Email', *             name: 'email', *             vtype:'email' *         }, { *             fieldLabel: 'DOB', *             name: 'dob', *             xtype: 'datefield' *         }, { *             fieldLabel: 'Age', *             name: 'age', *             xtype: 'numberfield', *             minValue: 0, *             maxValue: 100 *         }, { *             xtype: 'timefield', *             fieldLabel: 'Time', *             name: 'time', *             minValue: '8:00am', *             maxValue: '6:00pm' *         }] *     }); * * Note that any configured {@link Ext.Component#padding padding} will be ignored on items within a Form layout. */Ext.define('Ext.layout.container.Form', {    /* Begin Definitions */    alias: 'layout.form',    extend: 'Ext.layout.container.Auto',    alternateClassName: 'Ext.layout.FormLayout',    /* End Definitions */       tableCls: Ext.baseCSSPrefix + 'form-layout-table',    type: 'form',    manageOverflow: 2,    childEls: ['formTable'],        padRow: '<tr><td class="' + Ext.baseCSSPrefix + 'form-item-pad" colspan="3"></td></tr>',    renderTpl: [        '<table id="{ownerId}-formTable" class="{tableCls}" style="width:100%" cellpadding="0">',            '{%this.renderBody(out,values)%}',        '</table>',        '{%this.renderPadder(out,values)%}'    ],        getRenderData: function(){        var data = this.callParent();        data.tableCls = this.tableCls;        return data;        },    calculate : function (ownerContext) {        var me = this,            containerSize = me.getContainerSize(ownerContext, true),            tableWidth,            childItems,            i = 0, length;        // Once we have been widthed, we can impose that width (in a non-dirty setting) upon all children at once        if (containerSize.gotWidth) {            this.callParent(arguments);            tableWidth = me.formTable.dom.offsetWidth;            childItems = ownerContext.childItems;            for (length = childItems.length; i < length; ++i) {                childItems[i].setWidth(tableWidth, false);            }        } else {            me.done = false;        }    },    getRenderTarget: function() {        return this.formTable;    },    getRenderTree: function() {        var me = this,            result = me.callParent(arguments),            i, len;        for (i = 0, len = result.length; i < len; i++) {            result[i] = me.transformItemRenderTree(result[i]);        }        return result;    },    transformItemRenderTree: function(item) {        if (item.tag && item.tag == 'table') {            item.tag = 'tbody';            delete item.cellspacing;            delete item.cellpadding;            // IE6 doesn't separate cells nicely to provide input field            // vertical separation. It also does not support transparent borders            // which is how the extra 1px is added to the 2px each side cell spacing.            // So it needs a 5px high pad row.            if (Ext.isIE6) {                item.cn = this.padRow;            }            return item;        }        return {            tag: 'tbody',            cn: {                tag: 'tr',                cn: {                    tag: 'td',                    colspan: 3,                    style: 'width:100%',                    cn: item                }            }        };    },    isValidParent: function(item, target, position) {        return true;    },    isItemShrinkWrap: function(item) {        return ((item.shrinkWrap === true) ? 3 : item.shrinkWrap||0) & 2;    },    getItemSizePolicy: function(item) {        return {            setsWidth: 1,            setsHeight: 0        };    }});</pre></body></html>
 |