⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ext.ux.filetreepanel.js

📁 java + Ext 实现文件上传功能
💻 JS
📖 第 1 页 / 共 3 页
字号:
// vim: ts=4:sw=4:nu:fdc=4:nospell/** * Ext.ux.FileTreePanel * * @author  Ing. Jozef Sakáloš * @version $Id: Ext.ux.FileTreePanel.js 266 2008-05-18 23:24:47Z jozo $ * @date    13. March 2008 * * @license Ext.ux.FileTreePanel is licensed under the terms of * the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent * that the code/component(s) do NOT become part of another Open Source or Commercially * licensed development library or toolkit without explicit permission. *  * License details: http://www.gnu.org/licenses/lgpl.html *//*global Ext, window, document, setTimeout *//** * @class Ext.ux.FileTreePanel * @extends Ext.tree.TreePanel */Ext.ux.FileTreePanel = Ext.extend(Ext.tree.TreePanel, {	// config variables overridable from outside	// {{{	/**	 * @cfg {Object} baseParams This object is not used directly by FileTreePanel but it is	 * propagated to lower level objects instead. Included here for convenience.	 */	/**	 * @cfg {String} confirmText Text to display as title of confirmation message box	 */	 confirmText:'Confirm'	/**	 * @cfg {Boolean} containerScroll true to register 	 * this container with ScrollManager (defaults to true)	 */	,containerScroll:true	/**	 * @cfg {String} deleteText Delete text (for message box title or other displayed texts)	 */	,deleteText:'Delete'	/**	 * @cfg {String} deleteUrl URL to use when deleting; this.url is used if not set (defaults to undefined)	 */	/**	 * @cfg {String} downloadUrl URL to use when downloading; this.url is used if not set (defaults to undefined)	 */	/**	 * @cfg {Boolean} enableDD true to enable drag & drop of files and folders (defaults to true)	 */	,enableDD:true	/**	 * @cfg {Boolean) enableDelete true to enable to delete files and directories. 	 * If false context menu item is not shown (defaults to true)	 */	,enableDelete:true	/**	 * @cfg {Boolean) enableNewDir true to enable to create new directory. 	 * If false context menu item is not shown (defaults to true)	 */	,enableNewDir:true	/**	 * @cfg {Boolean) enableOpen true to enable open submenu	 * If false context menu item is not shown (defaults to true)	 */	,enableOpen:true	/**	 * @cfg {Boolean} enableProgress true to enable querying server for progress information	 * Passed to underlying uploader. Included here for convenience.	 */	,enableProgress:true	/**	 * @cfg {Boolean) enableRename true to enable to rename files and directories. 	 * If false context menu item is not shown (defaults to true)	 */	,enableRename:true	/**	 * @cfg {Boolean} enableSort true to enable sorting of tree. See also folderSort (defaults to true)	 */	,enableSort:true	/**	 * @cfg {Boolean) enableUpload true to enable to upload files. 	 * If false context menu item is not shown (defaults to true)	 */	,enableUpload:true	/**	 * @cfg {String} errorText Text to display for an error	 */	,errorText:'Error'	/**	 * @cfg {String} existsText Text to display in message box if file exists	 */	,existsText:'File <b>{0}</b> already exists'	/**	 * @cfg {Boolean} true to expand root node on FileTreePanel render (defaults to true)	 */	,expandOnRender:true	/**	 * @cfg {String} fileCls class prefix to add to nodes. "-extension" is appended to	 * this prefix to form filetype class, for example: file-odt, file-pdf. These classes	 * are used to display correct filetype icons in the tree. css file and icons must	 * exist of course.	 */	,fileCls:'file'	/**	 * @cfg {String} fileText	 */	,fileText:'File'	/**	 * @cfg {Boolean} focusPopup true to focus new browser popup window for 'popup' openMode	 * (defaults to true)	 */	,focusPopup:true	/**	 * @cfg {Boolean} folderSort true to place directories at the top of the tree (defaults to true)	 */	,folderSort:true	/**	 * @cfg {String} hrefPrefix Text to prepend before file href for file open command. 	 * (defaults to '')	 */	,hrefPrefix:''	/**	 * @cfg {String} hrefSuffix Text to append to file href for file open command. 	 * (defaults to '')	 */	,hrefSuffix:''	/**	 * @cfg {String} layout Layout to use for this panel (defaults to 'fit')	 */	,layout:'fit'	/**	 * @cfg {String} loadingText Text to use for load mask msg	 */	,loadingText:'Loading'	/**	 * @cfg {Boolean} loadMask True to mask tree panel while loading	 */	,loadMask:false	/**	 * @cfg {Number} maxFileSize Maximum upload file size in bytes	 * This config property is propagated down to uploader for convenience	 */	,maxFileSize:524288	/**	 * @cfg {Number} maxMsgLen Maximum message length for message box (defaults to 2000).	 * If message is longer Ext.util.Format.ellipsis is used to truncate it and append ...	 */	,maxMsgLen:2000	/**	 * @cfg {String} method Method to use when posting to server. Other valid value is 'get'	 * (defaults to 'post')	 */	,method:'post'	/**	 * @cfg {String} newdirText Default name for new directories (defaults to 'New Folder')	 */	,newdirText:'New Folder'	/**	 * @cfg {String} newdirUrl URL to use when creating new directory; 	 * this.url is used if not set (defaults to undefined)	 */	/**	 * @cfg {String} openMode Default file open mode. This mode is used when user dblclicks 	 * a file. Other valid values are '_self', '_blank' and 'download' (defaults to 'popup')	 */	,openMode:'popup'	/**	 * @cfg {String} overwriteText Text to use in overwrite confirmation message box	 */	,overwriteText:'Do you want to overwrite it?'	/**	 * @cfg {String} popupFeatures Features for new browser window opened by popup open mode	 */	,popupFeatures:'width=800,height=600,dependent=1,scrollbars=1,resizable=1,toolbar=1'	/**	 * @cfg {Boolean} readOnly true to disable write operations. treeEditor and context menu	 * are not created if true (defaults to false)	 */	,readOnly:false	/**	 * @cfg {String} reallyWantText Text to display for that question	 */	,reallyWantText:'Do you really want to'	/**	 * @cfg {String} renameUrl URL to use when renaming; this.url is used if not set (defaults to undefined)	 */	/**	 * @cfg {String} rootPath Relative path pointing to the directory that is root of this tree (defaults to 'root')	 */	,rootPath:'root'	/**	 * @cfg {String} rootText Text to display for root node (defaults to 'Tree Root')	 */	,rootText:'Tree Root'	/**	 * @cfg {Boolean} rootVisible true = root node visible, false = hidden (defaults to true)	 */	,rootVisible:true	/**	 * @cfg {Boolean} selectOnEdit true to select the edited text on edit start (defaults to true)	 */	,selectOnEdit:true	/**	 * @cfg {Boolean} singleUpload true to upload files in one form, false to upload one by one	 * This config property is propagated down to uploader for convenience	 */	,singleUpload:false	/**	 * @cfg {Boolean} topMenu true to create top toolbar with menu in addition to contextmenu	 */	,topMenu:false	/**	 * @cfg {String} url URL to use when communicating with server	 */	,url:'filetree.php'	// }}}	// overrides	// {{{	/**	 * called by Ext when instantiating	 * @private	 * @param {Object} config Configuration object	 */	,initComponent:function() {		// {{{		Ext.apply(this, {			// create root node			 root:new Ext.tree.AsyncTreeNode({				 text:this.rootText				,path:this.rootPath				,rootVisible:this.rootVisible				,allowDrag:false			})			// create treeEditor			,treeEditor:!this.readOnly ? new Ext.tree.TreeEditor(this, {				 allowBlank:false				,cancelOnEsc:true				,completeOnEnter:true				,ignoreNoChange:true				,selectOnFocus:this.selectOnEdit			}) : undefined			// drop config			,dropConfig:this.dropConfig ? this.dropConfig : {				 ddGroup:this.ddGroup || 'TreeDD'				,appendOnly:this.enableSort				,expandDelay:3600000 // do not expand on drag over node			}			// create treeSorter			,treeSorter:this.enableSort ? new Ext.tree.TreeSorter(this, {folderSort:this.folderSort}) : undefined			// {{{			,keys:[{				// Enter = open				 key:Ext.EventObject.ENTER, scope:this				,fn:function(key, e) {					var sm = this.getSelectionModel();					var node = sm.getSelectedNode();					if(node && 0 !== node.getDepth() && node.isLeaf()) {						this.openNode(node);					}			}},{				// F2 = edit				 key:113, scope:this				,fn:function(key, e) {					var sm = this.getSelectionModel();					var node = sm.getSelectedNode();					if(node && 0 !== node.getDepth() && this.enableRename && this.readOnly !== true) {						this.treeEditor.triggerEdit(node);					}			}},{				// Delete Key = Delete				 key:46, stopEvent:true, scope:this				,fn:function(key, e) {					var sm = this.getSelectionModel();					var node = sm.getSelectedNode();					if(node && 0 !== node.getDepth() && this.enableDelete && this.readOnly !== true) {						this.deleteNode(node);					}			}},{				// Ctrl + E = reload				 key:69, ctrl:true, stopEvent:true, scope:this				,fn:function(key, e) {					var sm = this.getSelectionModel();					var node = sm.getSelectedNode();					if(node) {						node = node.isLeaf() ? node.parentNode : node;						sm.select(node);						node.reload();					}			}},{				// Ctrl + -> = expand deep				 key:39, ctrl:true, stopEvent:true, scope:this				,fn:function(key, e) {					var sm = this.getSelectionModel();					var node = sm.getSelectedNode();					if(node && !node.isLeaf()) {						sm.select(node);						node.expand.defer(1, node, [true]);					}				}},{				// Ctrl + <- = collapse deep				 key:37, ctrl:true, scope:this, stopEvent:true				,fn:function(key, e) {					var sm = this.getSelectionModel();					var node = sm.getSelectedNode();					if(node && !node.isLeaf()) {						sm.select(node);						node.collapse.defer(1, node, [true]);					}				}},{				// Ctrl + N = New Directory				 key:78, ctrl:true, scope:this, stopEvent:true				,fn:function(key, e) {					var sm, node;					sm = this.getSelectionModel();					node = sm.getSelectedNode();					if(node && this.enableNewDir && this.readOnly !== true) {						node = node.isLeaf() ? node.parentNode : node;						this.createNewDir(node);					}			}}]			// }}}		}); // eo apply		// }}}		// {{{		// create loader		if(!this.loader) {			this.loader = new Ext.tree.TreeLoader({				 url:this.url				,baseParams:{cmd:'get'}				,listeners:{					beforeload:{scope:this, fn:function(loader, node) {						loader.baseParams.path = this.getPath(node);					}}				}			});		}		// }}}		// {{{		// install top menu if configured		if(true === this.topMenu) {			this.tbar = [{				 text:this.fileText				,disabled:true				,scope:this				,menu:this.getContextMenu()			}];		}		// }}}		// call parent		Ext.ux.FileTreePanel.superclass.initComponent.apply(this, arguments);		// {{{		// install treeEditor event handlers 		if(this.treeEditor) {			// do not enter edit mode on selected node click			this.treeEditor.beforeNodeClick = function(node,e){return true;};			// treeEditor event handlers			this.treeEditor.on({				 complete:{scope:this, fn:this.onEditComplete}				,beforecomplete:{scope:this, fn:this.onBeforeEditComplete}			});		}		// }}}		// {{{		// install event handlers		this.on({			 contextmenu:{scope:this, fn:this.onContextMenu, stopEvent:true}			,dblclick:{scope:this, fn:this.onDblClick}			,beforenodedrop:{scope:this, fn:this.onBeforeNodeDrop}			,nodedrop:{scope:this, fn:this.onNodeDrop}			,nodedragover:{scope:this, fn:this.onNodeDragOver}		});		// }}}		// {{{		// add events		this.addEvents(			/**			 * @event beforeopen			 * Fires before file open. Return false to cancel the event			 * @param {Ext.ux.FileTreePanel} this			 * @param {String} fileName name of the file being opened			 * @param {String} url url of the file being opened			 * @param {String} mode open mode			 */			 'beforeopen'			/**			 * @event open			 * Fires after file open has been initiated			 * @param {Ext.ux.FileTreePanel} this			 * @param {String} fileName name of the file being opened			 * @param {String} url url of the file being opened			 * @param {String} mode open mode			 */			,'open'			/**			 * @event beforerename			 * Fires after the user completes file name editing 			 * but before the file is renamed. Return false to cancel the event			 * @param {Ext.ux.FileTreePanel} this			 * @param {Ext.tree.AsyncTreeNode} node being renamed			 * @param {String} newPath including file name 			 * @param {String} oldPath including file name 			 */			,'beforerename'			/**			 * @event rename			 * Fires after the file has been successfully renamed			 * @param {Ext.ux.FileTreePanel} this			 * @param {Ext.tree.AsyncTreeNode} node that has been renamed			 * @param {String} newPath including file name 			 * @param {String} oldPath including file name 			 */			,'rename'			/**			 * @event renamefailure			 * Fires after a failure when renaming file			 * @param {Ext.ux.FileTreePanel} this			 * @param {Ext.tree.AsyncTreeNode} node rename of which failed			 * @param {String} newPath including file name 			 * @param {String} oldPath including file name 			 */			,'renamefailure'			/**			 * @event beforedelete			 * Fires before a file or directory is deleted. Return false to cancel the event.			 * @param {Ext.ux.FileTreePanel} this			 * @param {Ext.tree.AsyncTreeNode} node being deleted			 */			,'beforedelete'			/**			 * @event delete			 * Fires after a file or directory has been deleted			 * @param {Ext.ux.FileTreePanel} this			 * @param {String} path including file name that has been deleted			 */			,'delete'			/**			 * @event deletefailure			 * Fires if node delete failed			 * @param {Ext.ux.FileTreePanel} this			 * @param {Ext.tree.AsyncTreeNode} node delete of which failed			 */			,'deletefailure'			/**			 * @event beforenewdir			 * Fires before new directory is created. Return false to cancel the event			 * @param {Ext.ux.FileTreePanel} this			 * @param {Ext.tree.AsyncTreeNode} node under which the new directory is being created			 */			,'beforenewdir'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -