X-Git-Url: https://scm.cri.ensmp.fr/git/MosaicDocument.git/blobdiff_plain/d3ae9b28834e7e43b84fb81b06fb5ace521855e8..4eff9af578856f91276dbd2ab353f9bdb5e190b3:/default_blocks/tree_block_script.js diff --git a/default_blocks/tree_block_script.js b/default_blocks/tree_block_script.js index 228d405..cd0114c 100644 --- a/default_blocks/tree_block_script.js +++ b/default_blocks/tree_block_script.js @@ -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("/"); @@ -63,15 +63,16 @@ TreeMaker.prototype.refreshTree = function (evt) { tm.importRows(req, parentRow); }; }; - 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); - target.src = this.baseImgUrl + "mi_ani.gif"; 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=" + encodeURIComponent(this.filter) + + "&root_name=" + encodeURIComponent(this.root.id) + + "&expansion=" + encodeURIComponent(this.getExpansion())); + break; case "mi.gif" : @@ -95,6 +96,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\.gif$|.*mi_ani\.gif$/); + 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.