| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 | 
							- <!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-field-File'>/**
 
- </span> * @docauthor Jason Johnston <jason@sencha.com>
 
-  *
 
-  * A file upload field which has custom styling and allows control over the button text and other
 
-  * features of {@link Ext.form.field.Text text fields} like {@link Ext.form.field.Text#emptyText empty text}.
 
-  * It uses a hidden file input element behind the scenes to allow user selection of a file and to
 
-  * perform the actual upload during {@link Ext.form.Basic#submit form submit}.
 
-  *
 
-  * Because there is no secure cross-browser way to programmatically set the value of a file input,
 
-  * the standard Field `setValue` method is not implemented. The `{@link #getValue}` method will return
 
-  * a value that is browser-dependent; some have just the file name, some have a full path, some use
 
-  * a fake path.
 
-  *
 
-  * **IMPORTANT:** File uploads are not performed using normal 'Ajax' techniques; see the description for
 
-  * {@link Ext.form.Basic#hasUpload} for details.
 
-  *
 
-  * # Example Usage
 
-  *
 
-  *     @example
 
-  *     Ext.create('Ext.form.Panel', {
 
-  *         title: 'Upload a Photo',
 
-  *         width: 400,
 
-  *         bodyPadding: 10,
 
-  *         frame: true,
 
-  *         renderTo: Ext.getBody(),
 
-  *         items: [{
 
-  *             xtype: 'filefield',
 
-  *             name: 'photo',
 
-  *             fieldLabel: 'Photo',
 
-  *             labelWidth: 50,
 
-  *             msgTarget: 'side',
 
-  *             allowBlank: false,
 
-  *             anchor: '100%',
 
-  *             buttonText: 'Select Photo...'
 
-  *         }],
 
-  *
 
-  *         buttons: [{
 
-  *             text: 'Upload',
 
-  *             handler: function() {
 
-  *                 var form = this.up('form').getForm();
 
-  *                 if(form.isValid()){
 
-  *                     form.submit({
 
-  *                         url: 'photo-upload.php',
 
-  *                         waitMsg: 'Uploading your photo...',
 
-  *                         success: function(fp, o) {
 
-  *                             Ext.Msg.alert('Success', 'Your photo "' + o.result.file + '" has been uploaded.');
 
-  *                         }
 
-  *                     });
 
-  *                 }
 
-  *             }
 
-  *         }]
 
-  *     });
 
-  */
 
- Ext.define("Ext.form.field.File", {
 
-     extend: 'Ext.form.field.Trigger',
 
-     alias: ['widget.filefield', 'widget.fileuploadfield'],
 
-     alternateClassName: ['Ext.form.FileUploadField', 'Ext.ux.form.FileUploadField', 'Ext.form.File'],
 
-     uses: ['Ext.button.Button', 'Ext.layout.component.field.Field'],
 
-     //<locale>
 
- <span id='Ext-form-field-File-cfg-buttonText'>    /**
 
- </span>     * @cfg {String} buttonText
 
-      * The button text to display on the upload button. Note that if you supply a value for
 
-      * {@link #buttonConfig}, the buttonConfig.text value will be used instead if available.
 
-      */
 
-     buttonText: 'Browse...',
 
-     //</locale>
 
- <span id='Ext-form-field-File-cfg-buttonOnly'>    /**
 
- </span>     * @cfg {Boolean} buttonOnly
 
-      * True to display the file upload field as a button with no visible text field. If true, all
 
-      * inherited Text members will still be available.
 
-      */
 
-     buttonOnly: false,
 
- <span id='Ext-form-field-File-cfg-buttonMargin'>    /**
 
- </span>     * @cfg {Number} buttonMargin
 
-      * The number of pixels of space reserved between the button and the text field. Note that this only
 
-      * applies if {@link #buttonOnly} = false.
 
-      */
 
-     buttonMargin: 3,
 
- <span id='Ext-form-field-File-cfg-buttonConfig'>    /**
 
- </span>     * @cfg {Object} buttonConfig
 
-      * A standard {@link Ext.button.Button} config object.
 
-      */
 
- <span id='Ext-form-field-File-event-change'>    /**
 
- </span>     * @event change
 
-      * Fires when the underlying file input field's value has changed from the user selecting a new file from the system
 
-      * file selection dialog.
 
-      * @param {Ext.ux.form.FileUploadField} this
 
-      * @param {String} value The file value returned by the underlying file input field
 
-      */
 
- <span id='Ext-form-field-File-property-fileInputEl'>    /**
 
- </span>     * @property {Ext.Element} fileInputEl
 
-      * A reference to the invisible file input element created for this upload field. Only populated after this
 
-      * component is rendered.
 
-      */
 
- <span id='Ext-form-field-File-property-button'>    /**
 
- </span>     * @property {Ext.button.Button} button
 
-      * A reference to the trigger Button component created for this upload field. Only populated after this component is
 
-      * rendered.
 
-      */
 
- <span id='Ext-form-field-File-cfg-fieldBodyCls'>    /**
 
- </span>     * @cfg {String} [fieldBodyCls='x-form-file-wrap']
 
-      * An extra CSS class to be applied to the body content element in addition to {@link #fieldBodyCls}.
 
-      */
 
-     fieldBodyCls: Ext.baseCSSPrefix + 'form-file-wrap',
 
- <span id='Ext-form-field-File-cfg-readOnly'>    /**
 
- </span>     * @cfg {Boolean} readOnly
 
-      * Unlike with other form fields, the readOnly config defaults to true in File field.
 
-      */
 
-     readOnly: true,
 
- <span id='Ext-form-field-File-property-triggerNoEditCls'>    /**
 
- </span>     * Do not show hand pointer over text field since file choose dialog is only shown when clicking in the button
 
-      * @private
 
-      */
 
-     triggerNoEditCls: '',
 
-     // private
 
-     componentLayout: 'triggerfield',
 
-     // private. Extract the file element, button outer element, and button active element.
 
-     childEls: ['fileInputEl', 'buttonEl', 'buttonEl-btnEl', 'browseButtonWrap'],
 
-     // private
 
-     onRender: function() {
 
-         var me = this,
 
-             inputEl;
 
-         me.callParent(arguments);
 
-         inputEl = me.inputEl;
 
-         inputEl.dom.name = ''; //name goes on the fileInput, not the text input
 
-         me.fileInputEl.dom.name = me.getName();
 
-         me.fileInputEl.on({
 
-             scope: me,
 
-             change: me.onFileChange
 
-         });
 
-         if (me.buttonOnly) {
 
-             me.inputCell.setDisplayed(false);
 
-         }
 
-         // Ensure the trigger cell is sized correctly upon render
 
-         me.browseButtonWrap.dom.style.width = (me.browseButtonWrap.dom.lastChild.offsetWidth + me.buttonEl.getMargin('lr')) + 'px';
 
-         if (Ext.isIE) {
 
-             me.buttonEl.repaint();
 
-         }
 
-     },
 
- <span id='Ext-form-field-File-method-getTriggerMarkup'>    /**
 
- </span>     * Gets the markup to be inserted into the subTplMarkup.
 
-      */
 
-     getTriggerMarkup: function() {
 
-         var me = this,
 
-             result,
 
-             btn = Ext.widget('button', Ext.apply({
 
-                 id: me.id + '-buttonEl',
 
-                 ui: me.ui,
 
-                 disabled: me.disabled,
 
-                 text: me.buttonText,
 
-                 cls: Ext.baseCSSPrefix + 'form-file-btn',
 
-                 preventDefault: false,
 
-                 style: me.buttonOnly ? '' : 'margin-left:' + me.buttonMargin + 'px'
 
-             }, me.buttonConfig)),
 
-             btnCfg = btn.getRenderTree(),
 
-             inputElCfg = {
 
-                 id: me.id + '-fileInputEl',
 
-                 cls: Ext.baseCSSPrefix + 'form-file-input',
 
-                 tag: 'input',
 
-                 type: 'file',
 
-                 size: 1
 
-             };
 
-         if (me.disabled) {
 
-             inputElCfg.disabled = true;
 
-         }
 
-         btnCfg.cn = inputElCfg;
 
-         result = '<td id="' + me.id + '-browseButtonWrap">' + Ext.DomHelper.markup(btnCfg) + '</td>';
 
-         btn.destroy();
 
-         return result;
 
-     },
 
- <span id='Ext-form-field-File-method-createFileInput'>    /**
 
- </span>     * @private
 
-      * Creates the file input element. It is inserted into the trigger button component, made
 
-      * invisible, and floated on top of the button's other content so that it will receive the
 
-      * button's clicks.
 
-      */
 
-     createFileInput : function() {
 
-         var me = this;
 
-         me.fileInputEl = me.buttonEl.createChild({
 
-             name: me.getName(),
 
-             id: me.id + '-fileInputEl',
 
-             cls: Ext.baseCSSPrefix + 'form-file-input',
 
-             tag: 'input',
 
-             type: 'file',
 
-             size: 1
 
-         });
 
-         me.fileInputEl.on({
 
-             scope: me,
 
-             change: me.onFileChange
 
-         });
 
-     },
 
- <span id='Ext-form-field-File-method-onFileChange'>    /**
 
- </span>     * @private Event handler fired when the user selects a file.
 
-      */
 
-     onFileChange: function() {
 
-         this.lastValue = null; // force change event to get fired even if the user selects a file with the same name
 
-         Ext.form.field.File.superclass.setValue.call(this, this.fileInputEl.dom.value);
 
-     },
 
- <span id='Ext-form-field-File-method-setValue'>    /**
 
- </span>     * Overridden to do nothing
 
-      * @method
 
-      */
 
-     setValue: Ext.emptyFn,
 
-     reset : function(){
 
-         var me = this;
 
-         if (me.rendered) {
 
-             me.fileInputEl.remove();
 
-             me.createFileInput();
 
-             me.inputEl.dom.value = '';
 
-         }
 
-         me.callParent();
 
-     },
 
-     onDisable: function(){
 
-         this.callParent();
 
-         this.disableItems();
 
-     },
 
-     
 
-     disableItems: function(){
 
-         var file = this.fileInputEl;
 
-         if (file) {
 
-             file.dom.disabled = true;
 
-         }
 
-         this['buttonEl-btnEl'].dom.disabled = true;
 
-     },
 
-     onEnable: function(){
 
-         var me = this;
 
-         me.callParent();
 
-         me.fileInputEl.dom.disabled = false;
 
-         this['buttonEl-btnEl'].dom.disabled = false;
 
-     },
 
-     isFileUpload: function() {
 
-         return true;
 
-     },
 
-     extractFileInput: function() {
 
-         var fileInput = this.fileInputEl.dom;
 
-         this.reset();
 
-         return fileInput;
 
-     },
 
-     onDestroy: function(){
 
-         Ext.destroyMembers(this, 'fileInputEl', 'buttonEl');
 
-         this.callParent();
 
-     }
 
- });</pre>
 
- </body>
 
- </html>
 
 
  |