X-Git-Url: https://scm.cri.ensmp.fr/git/MosaicDocument.git/blobdiff_plain/1aed5a5073041e18e085d5f03b320efa7e9a0f71..refs/heads/zope-2.13:/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";