123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- // wrapped by build app
- define("dojox/widget/FilePicker", ["dijit","dojo","dojox","dojo/i18n!dojox/widget/nls/FilePicker","dojo/require!dojox/widget/RollingList,dojo/i18n"], function(dijit,dojo,dojox){
- dojo.provide("dojox.widget.FilePicker");
- dojo.require("dojox.widget.RollingList");
- dojo.require("dojo.i18n");
- dojo.requireLocalization("dojox.widget", "FilePicker");
- dojo.declare("dojox.widget._FileInfoPane",
- [dojox.widget._RollingListPane], {
- // summary: a pane to display the information for the currently-selected
- // file
-
- // templateString: string
- // delete our template string
- templateString: "",
-
- // templateString: String
- // The template to be used to construct the widget.
- templateString: dojo.cache("dojox.widget", "FilePicker/_FileInfoPane.html", "<div class=\"dojoxFileInfoPane\">\n\t<table>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoNameLabel\">${_messages.name}</td>\n\t\t\t\t<td class=\"dojoxFileInfoName\" dojoAttachPoint=\"nameNode\"></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoPathLabel\">${_messages.path}</td>\n\t\t\t\t<td class=\"dojoxFileInfoPath\" dojoAttachPoint=\"pathNode\"></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoSizeLabel\">${_messages.size}</td>\n\t\t\t\t<td class=\"dojoxFileInfoSize\" dojoAttachPoint=\"sizeNode\"></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div dojoAttachPoint=\"containerNode\" style=\"display:none;\"></div>\n</div>"),
-
- postMixInProperties: function(){
- this._messages = dojo.i18n.getLocalization("dojox.widget", "FilePicker", this.lang);
- this.inherited(arguments);
- },
- onItems: function(){
- // summary:
- // called after a fetch or load - at this point, this.items should be
- // set and loaded.
- var store = this.store, item = this.items[0];
- if(!item){
- this._onError("Load", new Error("No item defined"));
- }else{
- this.nameNode.innerHTML = store.getLabel(item);
- this.pathNode.innerHTML = store.getIdentity(item);
- this.sizeNode.innerHTML = store.getValue(item, "size");
- this.parentWidget.scrollIntoView(this);
- this.inherited(arguments);
- }
- }
- });
- dojo.declare("dojox.widget.FilePicker", dojox.widget.RollingList, {
- // summary: a specialized version of RollingList that handles file information
- // in a store
-
- className: "dojoxFilePicker",
-
- // pathSeparator: string
- // Our file separator - it will be guessed if not set
- pathSeparator: "",
-
- // topDir: string
- // The top directory string - it will be guessed if not set
- topDir: "",
-
- // parentAttr: string
- // the attribute to read for finding our parent directory
- parentAttr: "parentDir",
-
- // pathAttr: string
- // the attribute to read for getting the full path of our file
- pathAttr: "path",
-
- // preloadItems: boolean or int
- // Set this to a sane number - since we expect to mostly be using the
- // dojox.data.FileStore - which doesn't like loading lots of items
- // all at once.
- preloadItems: 50,
- // selectDirectories: boolean
- // whether or not we allow selection of directories - that is, whether or
- // our value can be set to a directory.
- selectDirectories: true,
- // selectFiles: boolean
- // whether or not we allow selection of files - that is, we will disable
- // the file entries.
- selectFiles: true,
- _itemsMatch: function(/*item*/ item1, /*item*/ item2){
- // Summary: returns whether or not the two items match - checks ID if
- // they aren't the exact same object - ignoring trailing slashes
- if(!item1 && !item2){
- return true;
- }else if(!item1 || !item2){
- return false;
- }else if(item1 == item2){
- return true;
- }else if (this._isIdentity){
- var iArr = [ this.store.getIdentity(item1), this.store.getIdentity(item2) ];
- dojo.forEach(iArr, function(i, idx){
- if(i.lastIndexOf(this.pathSeparator) == (i.length - 1)){
- iArr[idx] = i.substring(0, i.length - 1);
- }else{
- }
- }, this);
- return (iArr[0] == iArr[1]);
- }
- return false;
- },
-
- startup: function(){
- if(this._started){ return; }
- this.inherited(arguments);
- // Figure out our file separator if we don't have it yet
- var conn, child = this.getChildren()[0];
- var setSeparator = dojo.hitch(this, function(){
- if(conn){
- this.disconnect(conn);
- }
- delete conn;
- var item = child.items[0];
- if(item){
- var store = this.store;
- var parent = store.getValue(item, this.parentAttr);
- var path = store.getValue(item, this.pathAttr);
- this.pathSeparator = this.pathSeparator || store.pathSeparator;
- if(!this.pathSeparator){
- this.pathSeparator = path.substring(parent.length, parent.length + 1);
- }
- if(!this.topDir){
- this.topDir = parent;
- if(this.topDir.lastIndexOf(this.pathSeparator) != (this.topDir.length - 1)){
- this.topDir += this.pathSeparator;
- }
- }
- }
- });
- if(!this.pathSeparator || !this.topDir){
- if(!child.items){
- conn = this.connect(child, "onItems", setSeparator);
- }else{
- setSeparator();
- }
- }
- },
-
- getChildItems: function(item){
- var ret = this.inherited(arguments);
- if(!ret && this.store.getValue(item, "directory")){
- // It's an empty directory - so pass through an empty array
- ret = [];
- }
- return ret;
- },
-
- getMenuItemForItem: function(/*item*/ item, /* dijit._Contained */ parentPane, /* item[]? */ children){
- var menuOptions = {iconClass: "dojoxDirectoryItemIcon"};
- if(!this.store.getValue(item, "directory")){
- menuOptions.iconClass = "dojoxFileItemIcon";
- var l = this.store.getLabel(item), idx = l.lastIndexOf(".");
- if(idx >= 0){
- menuOptions.iconClass += " dojoxFileItemIcon_" + l.substring(idx + 1);
- }
- if(!this.selectFiles){
- menuOptions.disabled = true;
- }
- }
- var ret = new dijit.MenuItem(menuOptions);
- return ret;
- },
-
- getPaneForItem: function(/*item*/ item, /* dijit._Contained */ parentPane, /* item[]? */ children){
- var ret = null;
- if(!item || (this.store.isItem(item) && this.store.getValue(item, "directory"))){
- ret = new dojox.widget._RollingListGroupPane({});
- }else if(this.store.isItem(item) && !this.store.getValue(item, "directory")){
- ret = new dojox.widget._FileInfoPane({});
- }
- return ret;
- },
-
- _setPathValueAttr: function(/*string*/ path, /*boolean?*/ resetLastExec, /*function?*/ onSet){
- // Summary: sets the value of this widget based off the given path
- if(!path){
- this.set("value", null);
- return;
- }
- if(path.lastIndexOf(this.pathSeparator) == (path.length - 1)){
- path = path.substring(0, path.length - 1);
- }
- this.store.fetchItemByIdentity({identity: path,
- onItem: function(v){
- if(resetLastExec){
- this._lastExecutedValue = v;
- }
- this.set("value", v);
- if(onSet){ onSet(); }
- },
- scope: this});
- },
-
- _getPathValueAttr: function(/*item?*/val){
- // summary: returns the path value of the given value (or current value
- // if not passed a value)
- if(!val){
- val = this.value;
- }
- if(val && this.store.isItem(val)){
- return this.store.getValue(val, this.pathAttr);
- }else{
- return "";
- }
- },
-
- _setValue: function(/* item */ value){
- // summary: internally sets the value and fires onchange
- delete this._setInProgress;
- var store = this.store;
- if(value && store.isItem(value)){
- var isDirectory = this.store.getValue(value, "directory");
- if((isDirectory && !this.selectDirectories) ||
- (!isDirectory && !this.selectFiles)){ return; }
- }else{
- value = null;
- }
- if(!this._itemsMatch(this.value, value)){
- this.value = value;
- this._onChange(value);
- }
- }
- });
- });
|