[Slim-Checkins] r12496 - in /trunk/server: HTML/EN/html/fileselector.js HTML/EN/html/wizard.js HTML/EN/settings/server/fileselector.html HTML/EN/settings/server/wizard.html Slim/Web/Settings/Server/Wizard.pm

mherger at svn.slimdevices.com mherger at svn.slimdevices.com
Mon Aug 6 09:33:44 PDT 2007


Author: mherger
Date: Mon Aug  6 09:33:43 2007
New Revision: 12496

URL: http://svn.slimdevices.com?rev=12496&view=rev
Log:
Bug: n/a
Description:
- file/folderselector rewrite
- add selector box to wizard

Modified:
    trunk/server/HTML/EN/html/fileselector.js
    trunk/server/HTML/EN/html/wizard.js
    trunk/server/HTML/EN/settings/server/fileselector.html
    trunk/server/HTML/EN/settings/server/wizard.html
    trunk/server/Slim/Web/Settings/Server/Wizard.pm

Modified: trunk/server/HTML/EN/html/fileselector.js
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/html/fileselector.js?rev=12496&r1=12495&r2=12496&view=diff
==============================================================================
--- trunk/server/HTML/EN/html/fileselector.js (original)
+++ trunk/server/HTML/EN/html/fileselector.js Mon Aug  6 09:33:43 2007
@@ -1,93 +1,126 @@
-var tree;
+FileTreeLoader = function(filter) {
+	this.filter = filter;
+	FileTreeLoader.superclass.constructor.call(this);	
+};
 
-FileTree = function(){
-	return {
-		init: function() {
-			tree = new Ext.tree.TreePanel('fileselector', {
-				rootVisible:false,
-				animate: false,
-				pathSeparator: '|',
-		
-				loader: new Ext.tree.TreeLoader({
-					dataUrl:'/jsonrpc.js',
-		
-					getParams: function(node){
-						var cliQuery = [
-							'filesystem',
-							0,
-							99999
-						];
-		
-						cliQuery.push("folder:" + node.id);
-				
-						return Ext.util.JSON.encode({ 
-							id: 1,
-							method: "slim.request",
-							params: [
-								"",
-								cliQuery
-							]
-						});
-					},
-				
-					createNode : function(attr){
-						if(this.applyLoader !== false){
-							attr.loader = this;
-						}
-						if(typeof attr.uiProvider == 'string'){
-							attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
-						}
-						return ((attr.isfolder > 0) ?
-									new Ext.tree.AsyncTreeNode({
-										id: attr.path,
-										text: attr.name,
-										iconCls: 'x-tree-node-alwayscollapsed'
-									}) :
-				
-									new Ext.tree.TreeNode({
-										id: attr.path,
-										text: attr.name,
-										leaf: true
-									}));
-					},
-				
-					processResponse : function(response, node, callback){
-						var json = response.responseText;
-						try {
-							var o = eval("("+json+")");
-					
-							// we have to extract the result as IE/Opera can't handle multi-node data roots
-							o = eval('o.result');
-							len = o.count;
-							o = eval('o.fsitems_loop');
-					
-							for(var i = 0; i < len; i++){
-								var n = this.createNode(o[i]);
-								if(n){
-									node.appendChild(n); 
-								}
-							}
-							if(typeof callback == "function"){
-								callback(this, node);
-							}
-						} catch(e){
-							this.handleFailure(response);
-						}
-					}
-				}),
-				containerScroll: true
-			});
-			
-			// set the root node
-			var root = new Ext.tree.AsyncTreeNode({
-				text: 'root'
-			});
-			tree.setRootNode(root);
-			
-			// render the tree
-			tree.render();
-			root.expand();
-			tree.selectPath('|' + tree.root.id + audiodir_tree);
+Ext.extend(FileTreeLoader, Ext.tree.TreeLoader, {
+	dataUrl:'/jsonrpc.js',
+
+	getParams: function(node){
+		var cliQuery = [
+			'filesystem',
+			0,
+			99999
+		];
+
+		cliQuery.push("folder:" + node.id);
+
+		if (this.filter) {
+			cliQuery.push("filter:" + this.filter);
 		}
-	};
-}();
+
+		return Ext.util.JSON.encode({ 
+			id: 1,
+			method: "slim.request",
+			params: [
+				"",
+				cliQuery
+			]
+		});
+	},
+
+	createNode : function(attr){
+		if(this.applyLoader !== false){
+			attr.loader = this;
+		}
+		if(typeof attr.uiProvider == 'string'){
+			attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
+		}
+		return ((attr.isfolder > 0) ?
+					new Ext.tree.AsyncTreeNode({
+						id: attr.path,
+						text: attr.name,
+						iconCls: 'x-tree-node-alwayscollapsed'
+					}) :
+
+					new Ext.tree.TreeNode({
+						id: attr.path,
+						text: attr.name,
+						leaf: true
+					}));
+	},
+
+	processResponse : function(response, node, callback){
+		var json = response.responseText;
+		try {
+			var o = eval("("+json+")");
+	
+			// we have to extract the result as IE/Opera can't handle multi-node data roots
+			o = eval('o.result');
+			len = o.count;
+			o = eval('o.fsitems_loop');
+	
+			for(var i = 0; i < len; i++){
+				var n = this.createNode(o[i]);
+				if(n){
+					node.appendChild(n); 
+				}
+			}
+			if(typeof callback == "function"){
+				callback(this, node);
+			}
+		} catch(e){
+			this.handleFailure(response);
+		}
+	}
+});
+
+FileSelector = function(container, config){
+	Ext.apply(this, config);
+	FileSelector.superclass.constructor.call(this, container);
+
+	this.loader = new FileTreeLoader(this.filter);
+
+	// set the root node
+	var root = new Ext.tree.AsyncTreeNode({
+		text: 'root'
+	});
+	this.setRootNode(root);
+
+	this.on('click', this.onclick);
+	
+	// render the tree
+	this.render();
+
+	// select the current setting, if available
+	input = Ext.get(this.input);
+	if (input != null && input.dom.value != null) {
+		path = input.dom.value.split('/');
+		prev = '';
+		target = '|' + root.id;
+		for (x=1; x<path.length; x++) {
+			prev += '/' + path[x];
+			target += '|' + prev;
+		}
+		this.selectPath(target);
+	}
+
+};
+
+
+Ext.extend(FileSelector, Ext.tree.TreePanel, {
+	rootVisible: false,
+	animate: false,
+	pathSeparator: '|',
+	containerScroll: true,
+
+	onclick: function(node, e){
+		input = Ext.get(this.input);
+		if (input != null && input.dom.value != null) {
+			input.dom.value = node.id;
+		}
+		else alert(this.input);
+	}
+});
+
+

Modified: trunk/server/HTML/EN/html/wizard.js
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/html/wizard.js?rev=12496&r1=12495&r2=12496&view=diff
==============================================================================
--- trunk/server/HTML/EN/html/wizard.js (original)
+++ trunk/server/HTML/EN/html/wizard.js Mon Aug  6 09:33:43 2007
@@ -81,6 +81,7 @@
 Ext.EventManager.onDocumentReady(Wizard.init, Wizard, true);
 
 function flipPages(newPage) {
+
 	for (x = 0; x < pages.length; x++) {
 		if (el = Ext.get(pages[x] + '_h')) {
 			el.setVisible(newPage == x, false);

Modified: trunk/server/HTML/EN/settings/server/fileselector.html
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/settings/server/fileselector.html?rev=12496&r1=12495&r2=12496&view=diff
==============================================================================
--- trunk/server/HTML/EN/settings/server/fileselector.html (original)
+++ trunk/server/HTML/EN/settings/server/fileselector.html Mon Aug  6 09:33:43 2007
@@ -13,8 +13,8 @@
 
 		<script type="text/javascript">		
 			function getSelected() {
-				var selected = tree.getSelectionModel().getSelectedNode();
-
+//				var selected = FileTree.tree.getSelectionModel().getSelectedNode();
+selected = Ext.get('audiodir');
 				if (selected != null && selected.id) {
 					alert("[% "SETUP_OK_USING" | string %]\n" + selected.id);
 				}
@@ -25,7 +25,6 @@
 			
 			var audiodir = "[% audiodir %]";
 			
-			Ext.onReady(FileTree.init, FileTree, false);
 		</script>
 
 		<style type="text/css">
@@ -39,7 +38,13 @@
 
 	<body>
 		<div id="fileselector" style="overflow:auto; height:300px; width:400px;"></div>
-		
+		<input type="text" name="audiodir" id="audiodir" value="[% audiodir %]" size="80">
 		<input type="button" name="show" value="Ok" onclick="getSelected();">
 	</body>
+	<script type="text/javascript">		
+		new FileSelector('fileselector', {
+			filter: 'foldersonly',
+			input: 'audiodir'
+		});
+	</script>
 </html>

Modified: trunk/server/HTML/EN/settings/server/wizard.html
URL: http://svn.slimdevices.com/trunk/server/HTML/EN/settings/server/wizard.html?rev=12496&r1=12495&r2=12496&view=diff
==============================================================================
--- trunk/server/HTML/EN/settings/server/wizard.html (original)
+++ trunk/server/HTML/EN/settings/server/wizard.html Mon Aug  6 09:33:43 2007
@@ -27,6 +27,23 @@
 			var showproxy = [% showProxy %];
 			var audiodir_tree = "[% audiodir_tree %]";
 			var showitunes = [% showiTunes ? 1 : 0 %];
+
+			Ext.onReady(function(){
+				new FileSelector('audiodirselector', {
+					filter: 'foldersonly',
+					input: 'audiodir'
+				});
+
+				new FileSelector('playlistdirselector', {
+					filter: 'foldersonly',
+					input: 'playlistdir'
+				});
+
+				new FileSelector('itunespathselector', {
+					filter: 'foldersonly',
+					input: '.xml'
+				});
+			});
 		</script>
 
 		<script type="text/javascript" src="/html/fileselector.js"></script>
@@ -72,6 +89,13 @@
 			
 			.page {
 				position: absolute;
+			}
+			
+			.folderselector {
+				overflow:scroll;
+				height:300px;
+				width:400px;
+				border: 1px black solid;
 			}
 		-->
 		</style>
@@ -153,20 +177,20 @@
 
 			<div id="audiodir_m" class="page">
 				<div>[% "SETUP_WIZARD_AUDIODIR_DESC" | string %]</div>
-				<div id="fileselector" style="overflow:auto; height:300px; width:400px;"></div>			
-				<div><input type="text" name="audiodir" value="[% prefs.audiodir %]" class="stdedit"></div>
-				<input type="button" name="show" value="Ok" onclick="getSelected();" class="stdedit">
+				<div id="audiodirselector" class="folderselector"></div>			
+				<div><input type="text" name="audiodir" id="audiodir" value="[% prefs.audiodir %]" class="stdedit" size="50"></div>
 			</div>
 
 			<div id="playlistdir_m" class="page">
 				<div>[% "SETUP_WIZARD_PLAYLISTDIR_DESC" | string %]</div>
-				<div id="fileselector" style="overflow:auto; height:300px; width:400px;"></div>			
-				<div><input type="text" name="playlistdir" value="[% prefs.playlistdir %]" class="stdedit"></div>
-				<input type="button" name="show" value="Ok" onclick="getSelected();" class="stdedit">
+				<div id="playlistdirselector" class="folderselector"></div>
+				<div><input type="text" name="playlistdir" id="playlistdir" value="[% prefs.playlistdir %]" class="stdedit" size="50"></div>
 			</div>
 
 			<div id="itunes_m" class="page">
 				<div>[% "SETUP_WIZARD_ITUNES_DESC" | string %]</div>
+				<div id="itunespathselector" class="folderselector"></div>
+				<div><input type="text" name="xml_path" id="xml_path" value="[% prefs.xml_path %]" class="stdedit" size="50"></div>
 			</div>
 
 			<div id="musicip_m" class="page">

Modified: trunk/server/Slim/Web/Settings/Server/Wizard.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Web/Settings/Server/Wizard.pm?rev=12496&r1=12495&r2=12496&view=diff
==============================================================================
--- trunk/server/Slim/Web/Settings/Server/Wizard.pm (original)
+++ trunk/server/Slim/Web/Settings/Server/Wizard.pm Mon Aug  6 09:33:43 2007
@@ -55,7 +55,7 @@
 
 			# Cleanup the checkbox
 			if ($pref =~ /itunes|musicmagic/) {
-				$paramRef->{$pref} = defined $paramRef->{$pref} ? 1 : 0;
+				$paramRef->{'prefs'}->{$pref} = defined $paramRef->{'prefs'}->{$pref} ? 1 : 0;
 			}
 		}
 	}



More information about the checkins mailing list