You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.8 KiB
94 lines
2.8 KiB
define([ |
|
"dojo/_base/declare", |
|
"dojo/_base/kernel", |
|
"dojo/_base/fx", |
|
"dojo/dom-attr", |
|
"dojo/dom-class", |
|
"dojo/text!./resources/FileInput.html", |
|
"dijit/form/_FormWidget", |
|
"dijit/_Templated" |
|
], |
|
function(declare, kernel, fx, domAttr, domClass, template, FormWidget, Templated){ |
|
kernel.experimental("dojox.form.FileInput"); |
|
|
|
return declare("dojox.form.FileInput", FormWidget, |
|
{ |
|
// summary: |
|
// A styled input type="file" |
|
// |
|
// description: |
|
// A input type="file" form widget, with a button for uploading to be styled via css, |
|
// a cancel button to clear selection, and FormWidget mixin to provide standard dijit.form.Form |
|
// support (FIXME: maybe not fully implemented) |
|
|
|
// label: String |
|
// the title text of the "Browse" button |
|
label: "Browse ...", |
|
|
|
// cancelText: String |
|
// the title of the "Cancel" button |
|
cancelText: "Cancel", |
|
|
|
// name: String |
|
// ugh, this should be pulled from this.domNode |
|
name: "uploadFile", |
|
|
|
templateString: template, |
|
|
|
startup: function(){ |
|
// summary: |
|
// listen for changes on our real file input |
|
this._listener = this.connect(this.fileInput,"onchange","_matchValue"); |
|
this._keyListener = this.connect(this.fileInput,"onkeyup","_matchValue"); |
|
}, |
|
|
|
//get rid of the this.connect in _FormWidget.postCreate to allow IE to show |
|
//the file picker dialog properly |
|
postCreate: function(){}, |
|
|
|
_matchValue: function(){ |
|
// summary: |
|
// set the content of the upper input based on the semi-hidden file input |
|
this.inputNode.value = this.fileInput.value; |
|
if(this.inputNode.value){ |
|
this.cancelNode.style.visibility = "visible"; |
|
fx.fadeIn({ node: this.cancelNode, duration:275 }).play(); |
|
} |
|
}, |
|
|
|
setLabel: function(/*String*/ label, /*String?*/ cssClass){ |
|
// summary: |
|
// method to allow use to change button label |
|
this.titleNode.innerHTML = label; |
|
}, |
|
|
|
reset: function(/*Event*/ e){ |
|
// summary: |
|
// on click of cancel button, since we can't clear the input because of |
|
// security reasons, we destroy it, and add a new one in it's place. |
|
this.disconnect(this._listener); |
|
this.disconnect(this._keyListener); |
|
if(this.fileInput){ |
|
this.domNode.removeChild(this.fileInput); |
|
} |
|
fx.fadeOut({ node: this.cancelNode, duration:275 }).play(); |
|
|
|
// should we use cloneNode()? can we? |
|
this.fileInput = document.createElement('input'); |
|
// domAttr.set(this.fileInput,{ |
|
// "type":"file", "id":this.id, "name": this.name |
|
//}); |
|
this.fileInput.setAttribute("type","file"); |
|
this.fileInput.setAttribute("id", this.id); |
|
this.fileInput.setAttribute("name", this.name); |
|
domClass.add(this.fileInput,"dijitFileInputReal"); |
|
this.domNode.appendChild(this.fileInput); |
|
|
|
this._keyListener = this.connect(this.fileInput, "onkeyup", "_matchValue"); |
|
this._listener = this.connect(this.fileInput, "onchange", "_matchValue"); |
|
this.inputNode.value = ""; |
|
} |
|
|
|
}); |
|
|
|
});
|
|
|