X-Git-Url: https://scm.cri.ensmp.fr/git/MosaicDocument.git/blobdiff_plain/155c6ba3d7e8e9693d30b3cf70f591f0153610b6:/default_blocks/tree_block_script.js..99b3ba92670e19c1f86f5de83b8e6bbe4fdc297f:/Products/MosaicDocument/default_blocks/static/git-logo.png diff --git a/default_blocks/tree_block_script.js b/default_blocks/tree_block_script.js deleted file mode 100644 index d115432..0000000 --- a/default_blocks/tree_block_script.js +++ /dev/null @@ -1,280 +0,0 @@ -// (c) Benoît PIN 2006 -// http://plinn.org -// Licence GPL - -var TreeMaker; - -(function() { -/* root -> base node (typically a tbody or a table) -* filter -> comma separated list of portal_types -*/ -TreeMaker = function (root, filter, baseImgUrl) { - this.root = root; - var tm = this; - this.root.onclick = function(evt) { tm.refreshTree(evt); }; - this.filter = filter; - this.baseImgUrl = baseImgUrl; - this.depthCpt = new Array(); - this._lastAniImg = null; - - // preload images - 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]; - } -} - -/* -* expand / collapse handler -* object loading trigger -*/ -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("/"); - var imgId = srcParts[srcParts.length-1]; - var parentTd = target.parentNode.parentNode; - var parentRow = parentTd.parentNode; - - - switch (imgId) { - case "pl.png" : - case "pl_ani.png" : - var linkCell = parentTd.nextSibling; - while (linkCell.nodeType != 1) - linkCell = linkCell.nextSibling; - - var obUrl = linkCell.getElementsByTagName("A")[0].href; - - var req = new XMLHttpRequest(); - var tm = this; - req.onreadystatechange = function() { - switch (req.readyState) { - case 1: - showProgressImage(); - break; - case 4: - hideProgressImage(); - 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=" + encodeURIComponent(this.filter) + - "&root_name=" + encodeURIComponent(this.root.id) + - "&expansion=" + encodeURIComponent(this.getExpansion())); - - break; - - case "mi.png" : - case "mi_ani.png" : - this.removeChildNodes(parentRow); - 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); - disablePropagation(evt); - } -}; - - -TreeMaker.prototype._removeLastAniImg = function() { - if (this._lastAniImg) { - this._lastAniImg.src = this._lastAniImg.src.replace("_ani", ""); - } -}; - -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. -*/ -TreeMaker.prototype.importRows = function(req, parentRow) { - var rows = req.responseXML.documentElement.getElementsByTagName("row"); - var clickedCells = parentRow.getElementsByTagName("TD"); - var row, newRow, indentCell, stateCell, linkCell, img, a, indentValue, colspan, - incTableDepth=false, cols, linkCellColSpan; - - for (var i = 0 ; i < rows.length ; i++ ) { - row = rows[i]; - - - newRow = document.createElement("TR"); - indentCell = document.createElement("TD"); - stateCell = document.createElement("TD"); - stateCell.width = "16"; - linkCell = document.createElement("TD"); - linkCell.width = "99%"; - - - if (clickedCells.length == 3) { - indentValue = parseInt(clickedCells[0].getAttribute("colspan")); - colspan = parseInt(clickedCells[2].getAttribute("colspan")); - } - else { - indentValue = 0; - colspan = parseInt(clickedCells[1].getAttribute("colspan")); - } - - cols = indentValue + colspan; - - if (colspan == 1) - incTableDepth = true; - - indentCell.colSpan = indentValue + 1; - if (!this.depthCpt[indentValue]) - this.depthCpt[indentValue] = 1; - else - this.depthCpt[indentValue] += 1; - - // IE : it's not possible to set colSpan attr to 0 :-((( - linkCellColSpan = cols - indentValue - 1 - if (linkCellColSpan == 0) - linkCell.nullColSpan = true; - else - linkCell.colSpan = linkCellColSpan; - - img = document.createElement("IMG"); - img.src = row.getAttribute("icon"); - img.height = row.getAttribute("height"); - img.width = row.getAttribute("width"); - a = document.createElement("A"); - - a.setAttribute("href", row.getAttribute("url")); - a.setAttribute("title", row.getAttribute("description")); - a.innerHTML = row.childNodes[0].nodeValue; - - 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.png"; - stateImg.border = "0"; - stateImg.height = "16"; - stateImg.width = "16"; - stateLink.appendChild(stateImg) - stateCell.appendChild(stateLink); - } - else - stateCell.innerHTML = "  "; - - linkCell.appendChild(img); - linkCell.appendChild(a); - newRow.appendChild(indentCell); - newRow.appendChild(stateCell); - newRow.appendChild(linkCell); - - - this.root.insertBefore(newRow, parentRow.nextSibling); - } //end for - - if (incTableDepth) { - var rows = this.root.getElementsByTagName("TR"); - var cells, lastCell, lastColspan; - for (var i = 0 ; i < rows.length ; i++) { - cells = rows[i].getElementsByTagName("TD"); - lastCell = cells[cells.length - 1]; - - if (lastCell.nullColSpan) { - lastCell.nullColSpan = false; - lastColspan = 0; - } - else - lastColspan = parseInt(lastCell.getAttribute("colspan")); - - lastCell.colSpan = lastColspan + 1; - } - } -}; - -/* -* collapse the tree: removes deeper rows after the 'baseRow' passed. -*/ -TreeMaker.prototype.removeChildNodes = function(baseRow) { - var baseCells = baseRow.getElementsByTagName("TD"); - var baseColSpan = baseCells[baseCells.length-1].colSpan; - var nextRow = baseRow.nextSibling; - var tbody = baseRow.parentNode; - var depthCpt = this.depthCpt; - var nextCells, nextRow2; - - while (nextRow) { - if (nextRow.nodeType == 1) { - nextCells = nextRow.getElementsByTagName("TD"); - if (nextCells.length == 3 && nextCells[2].colSpan < baseColSpan) { - nextRow2 = nextRow.nextSibling; - depthCpt[nextCells[0].colSpan-1] -= 1; - tbody.removeChild(nextRow); - nextRow = nextRow2; - continue; - } - break; - } - nextRow = nextRow.nextSibling; // text node - } - - // recalc colspans for Safari - var maxDepth = depthCpt.length - 1; - var depthReduction = 0; - while (depthCpt[maxDepth - depthReduction] == 0) { - depthCpt.pop(); - depthReduction++; - } - - if (depthReduction) { - var rows = tbody.getElementsByTagName("TR"); - var cells, lastCell, lastColspan; - for (var i = 0 ; i < rows.length ; i++) { - cells = rows[i].getElementsByTagName("TD"); - lastCell = cells[cells.length - 1]; - lastCell.colSpan = parseInt(lastCell.colSpan) - depthReduction; - } - } -}; -})(); \ No newline at end of file