From 4eff9af578856f91276dbd2ab353f9bdb5e190b3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Beno=C3=AEt=20Pin?= Date: Wed, 24 Nov 2010 23:41:40 +0100 Subject: [PATCH] =?utf8?q?Conservation=20de=20l'=C3=A9tat=20de=20d=C3=A9ro?= =?utf8?q?ulement=20de=20l'arborescence=20(seulement=20pour=20le=20d=C3=A9?= =?utf8?q?roulement).?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- default_blocks/tree_block_script.js | 47 +++++++++++++++++++++++---- default_blocks/tree_block_template.pt | 6 ++-- skins/xml_nav_tree.py | 10 +++--- 3 files changed, 49 insertions(+), 14 deletions(-) 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. diff --git a/default_blocks/tree_block_template.pt b/default_blocks/tree_block_template.pt index 606d136..468305d 100755 --- a/default_blocks/tree_block_template.pt +++ b/default_blocks/tree_block_template.pt @@ -41,7 +41,7 @@ rows treeDict/rows; height tree/height; rootNode python:rows.pop(0); - box_id rootNode/id; + box_id tree/tree_pre; portal_url here/portal_url" tal:condition="python:displayAction=='view' and rows" tal:omit-tag="" @@ -63,8 +63,8 @@ - - +
+
  ' -for ob in context.listNearestFolderContents(contentFilter={'portal_type':filter}) : +for ob in childs : icon = context.restrictedTraverse(ob.getIcon()) state = 0 if not getattr(ob, 'isPortalContent', False) : @@ -33,5 +35,5 @@ for ob in context.listNearestFolderContents(contentFilter={'portal_type':filter} print '' - +context.REQUEST.RESPONSE.setCookie('%s-state' % root_name, expansion, path='/') return printed \ No newline at end of file -- 2.20.1