| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 | /*	Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.	Available via Academic Free License >= 2.1 OR the modified BSD license.	see: http://dojotoolkit.org/license for details*/if(!dojo._hasResource["dojox.widget.FilePicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.widget.FilePicker"] = true;dojo.provide("dojox.widget.FilePicker");dojo.require("dojox.widget.RollingList");dojo.require("dojo.i18n");dojo.requireLocalization("dojox.widget", "FilePicker", null, "ROOT,ar,az,bg,ca,cs,da,de,el,es,fi,fr,he,hr,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");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>\n"),		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);		}	}});}
 |