source: Dev/trunk/src/client/dojox/form/FileInput.js @ 532

Last change on this file since 532 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.8 KB
Line 
1define([
2        "dojo/_base/declare",
3        "dojo/_base/kernel",
4        "dojo/_base/fx",
5        "dojo/dom-attr",
6        "dojo/dom-class",
7        "dojo/text!./resources/FileInput.html",
8        "dijit/form/_FormWidget",
9        "dijit/_Templated"
10],
11function(declare, kernel, fx, domAttr, domClass, template, FormWidget, Templated){
12kernel.experimental("dojox.form.FileInput");
13
14return declare("dojox.form.FileInput", FormWidget,
15        {
16        // summary:
17        //              A styled input type="file"
18        //
19        // description:
20        //              A input type="file" form widget, with a button for uploading to be styled via css,
21        //              a cancel button to clear selection, and FormWidget mixin to provide standard dijit.form.Form
22        //              support (FIXME: maybe not fully implemented)
23
24        // label: String
25        //              the title text of the "Browse" button
26        label: "Browse ...",
27
28        // cancelText: String
29        //              the title of the "Cancel" button
30        cancelText: "Cancel",
31
32        // name: String
33        //              ugh, this should be pulled from this.domNode
34        name: "uploadFile",
35
36        templateString: template,
37
38        startup: function(){
39                // summary:
40                //              listen for changes on our real file input
41                this._listener = this.connect(this.fileInput,"onchange","_matchValue");
42                this._keyListener = this.connect(this.fileInput,"onkeyup","_matchValue");
43        },
44
45        //get rid of the this.connect in _FormWidget.postCreate to allow IE to show
46        //the file picker dialog properly
47        postCreate: function(){},
48
49        _matchValue: function(){
50                // summary:
51                //              set the content of the upper input based on the semi-hidden file input
52                this.inputNode.value = this.fileInput.value;
53                if(this.inputNode.value){
54                        this.cancelNode.style.visibility = "visible";
55                        fx.fadeIn({ node: this.cancelNode, duration:275 }).play();
56                }
57        },
58
59        setLabel: function(/*String*/ label, /*String?*/ cssClass){
60                // summary:
61                //              method to allow use to change button label
62                this.titleNode.innerHTML = label;
63        },
64
65        reset: function(/*Event*/ e){
66                // summary:
67                //              on click of cancel button, since we can't clear the input because of
68                //              security reasons, we destroy it, and add a new one in it's place.
69                this.disconnect(this._listener);
70                this.disconnect(this._keyListener);
71                if(this.fileInput){
72                        this.domNode.removeChild(this.fileInput);
73                }
74                fx.fadeOut({ node: this.cancelNode, duration:275 }).play();
75
76                // should we use cloneNode()? can we?
77                this.fileInput = document.createElement('input');
78                // domAttr.set(this.fileInput,{
79                //              "type":"file", "id":this.id, "name": this.name
80                //});
81                this.fileInput.setAttribute("type","file");
82                this.fileInput.setAttribute("id", this.id);
83                this.fileInput.setAttribute("name", this.name);
84                domClass.add(this.fileInput,"dijitFileInputReal");
85                this.domNode.appendChild(this.fileInput);
86
87                this._keyListener = this.connect(this.fileInput, "onkeyup", "_matchValue");
88                this._listener = this.connect(this.fileInput, "onchange", "_matchValue");
89                this.inputNode.value = "";
90        }
91
92});
93
94});
Note: See TracBrowser for help on using the repository browser.