X-Git-Url: https://scm.cri.minesparis.psl.eu/git/MosaicDocument.git/blobdiff_plain/1aed5a5073041e18e085d5f03b320efa7e9a0f71..155c6ba3d7e8e9693d30b3cf70f591f0153610b6:/default_blocks/tree_block_script.js

diff --git a/default_blocks/tree_block_script.js b/default_blocks/tree_block_script.js
index c057e28..d115432 100644
--- a/default_blocks/tree_block_script.js
+++ b/default_blocks/tree_block_script.js
@@ -18,7 +18,7 @@ TreeMaker = function (root, filter, baseImgUrl) {
 	this._lastAniImg = null;
 	
 	// preload images
-	var images = ['pl.gif', 'pl_ani.gif', 'mi.gif', 'mi_ani.gif'], img;
+	var images = ['pl.png', 'pl_ani.png', 'mi.png', 'mi_ani.png'], img;
 	for (var i=0 ; i < images.length ; i++) {
 		img = new Image();
 		img.src = this.baseImgUrl + images[i];
@@ -33,7 +33,7 @@ TreeMaker.prototype.refreshTree = function (evt) {
 	var target = getTargetedObject(evt);
 	if (target.blur)
 		target.blur();
-	
+
 	if (target.tagName == 'IMG') {
 		target.parentNode.blur();
 		var srcParts = target.src.split("/");
@@ -43,8 +43,8 @@ TreeMaker.prototype.refreshTree = function (evt) {
 		
 
 		switch (imgId) {
-			case "pl.gif" :
-			case "pl_ani.gif" :
+			case "pl.png" :
+			case "pl_ani.png" :
 				var linkCell = parentTd.nextSibling;
 				while (linkCell.nodeType != 1)
 					linkCell = linkCell.nextSibling;
@@ -63,24 +63,27 @@ TreeMaker.prototype.refreshTree = function (evt) {
 							tm.importRows(req, parentRow);
 					};
 				};
+				target.src = this.baseImgUrl + "mi_ani.png";
+				this._lastAniImg = target;
+				window.setTimeout(function(){tm._removeLastAniImg();}, 500);
+
 				req.open("POST", obUrl + "/xml_nav_tree", true);
 				req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
-				req.send("filter=" + this.filter);
+				req.send("filter=" + encodeURIComponent(this.filter) +
+						 "&root_name=" + encodeURIComponent(this.root.id) +
+						 "&expansion=" + encodeURIComponent(this.getExpansion()));
 				
-				target.src = this.baseImgUrl + "mi_ani.gif";
-				this._lastAniImg = target;
-
-
-				window.setTimeout(function(){tm._removeLastAniImg();}, 500);
 				break;
 
-			case "mi.gif" :
-			case "mi_ani.gif" :
+			case "mi.png" :
+			case "mi_ani.png" :
 				this.removeChildNodes(parentRow);
-				target.src = this.baseImgUrl + "pl_ani.gif";
+				target.src = this.baseImgUrl + "pl_ani.png";
 				this._lastAniImg = target;
 				var tm = this;
 				window.setTimeout(function(){tm._removeLastAniImg();}, 500);
+				document.cookie = encodeURIComponent(this.root.id) + '-state=' + encodeURIComponent(this.getExpansion()) +
+								  ';path=/';
 				break;
 		} // end switch (imgId)
 		disableDefault(evt);
@@ -95,6 +98,38 @@ TreeMaker.prototype._removeLastAniImg = function() {
 	}
 };
 
+TreeMaker.prototype.getExpansion = function() {
+	var rows = this.root.getElementsByTagName('TR');
+	var row, cells, stateCell, button, expid, node_depth, last_depth = -1, dd, step;
+	var steps = new Array();
+	steps.push(this.root.getAttribute('name'));
+	
+	var expanded = (/.*mi\.png$|.*mi_ani\.png$/);
+	for(i=0 ; i < rows.length ; i++) {
+		row = rows[i];
+		cells = row.getElementsByTagName('TD');
+		stateCell = cells[cells.length-2]; // cell where the +/- button is
+		button = stateCell.getElementsByTagName('IMG');
+		if (! button.length)
+			continue;
+		button = button[0];
+		if (expanded.test(button.src)) {
+			expid = button.parentNode.getAttribute("name");
+			node_depth = cells[0].getAttribute('colspan') || 0;
+			dd = last_depth - node_depth + 1;
+			last_depth = node_depth;
+			if (dd > 0) {
+				step = '';
+				for (var j = 0 ;  j < dd ; j++)
+					step = step + '_';
+				steps.push(step);
+			}
+			steps.push(expid);
+		}
+	}
+	return steps.join(':');
+};
+
 
 /*
 * expand the tree: sends request and imports rows based on xml response.
@@ -157,8 +192,9 @@ TreeMaker.prototype.importRows = function(req, parentRow) {
 		if (row.getAttribute("state") == "-1") {
 			var stateLink = document.createElement("A");
 			stateLink.href = ".";
+			stateLink.setAttribute("name", row.getAttribute("name"));
 			var stateImg = document.createElement("IMG");
-			stateImg.src = this.baseImgUrl + "pl.gif";
+			stateImg.src = this.baseImgUrl + "pl.png";
 			stateImg.border = "0";
 			stateImg.height = "16";
 			stateImg.width = "16";