Mercurial > hg > STI-GWT
diff war/scripts/sti/DynamicTable.js @ 3:cf06b77a8bbd
Committed branch of the e4D repos sti-gwt branch 16384.
git-svn-id: http://dev.dariah.eu/svn/repos/eu.dariah.de/ap1/sti-gwt-dariah-geobrowser@36 f2b5be40-def6-11e0-8a09-b3c1cc336c6b
author | StefanFunk <StefanFunk@f2b5be40-def6-11e0-8a09-b3c1cc336c6b> |
---|---|
date | Tue, 17 Jul 2012 13:34:40 +0000 |
parents | |
children | 20eb7596d466 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/war/scripts/sti/DynamicTable.js Tue Jul 17 13:34:40 2012 +0000 @@ -0,0 +1,280 @@ +/** + * @author stjaenicke + */ +function DynamicTable(core, dataSet, index){ + + this.core = core; + this.dataSet = dataSet; + this.chunks = []; + this.index = index; + this.tableDiv; + this.tableHeader; + this.tableBody; + this.tableFooter; + this.chunkSelect; + this.actualChunk; + this.rows; + + this.initialize(); + +} + +DynamicTable.prototype = { + + initialize: function(){ + + this.chunks.push([]); + for (var i = 0; i < this.dataSet.objects.length; i++) { + if (this.chunks[this.chunks.length - 1].length == tableElements) + this.chunks.push([]); + this.chunks[this.chunks.length - 1].push(this.dataSet.objects[i]); + } + this.rows = []; + + var base = this; + + this.tableDiv = document.createElement("div"); + this.tableDiv.id = "dataTable"; + + var table = document.createElement("table"); + table.onselectstart = function(){ + return false; + }; + this.tableDiv.appendChild(table); + + // Initialisation of the table header + + this.tableHeader = document.createElement("thead"); + var headerRow = document.createElement("tr"); + this.tableHeader.appendChild(headerRow); + var visibilityLink = document.createElement("a"); + visibilityLink.id = "visibilityLink" + this.index; + if (this.dataSet.hidden) + visibilityLink.innerHTML = "show"; + else + visibilityLink.innerHTML = "hide"; + visibilityLink.onclick = function(){ + if (base.core.changeVisibilityStatus(base.index)) + document.getElementById("visibilityLink" + base.index).innerHTML = "show"; + else + document.getElementById("visibilityLink" + base.index).innerHTML = "hide"; + } + + var cell1 = document.createElement("th"); + cell1.appendChild(visibilityLink); + headerRow.appendChild(cell1); + + var thead = document.createElement("th"); + if (this.dataSet.type == 0) + thead.innerHTML = "Hits for: \"" + this.dataSet.termIdentifier + "\""; + else + if (this.dataSet.type == 1) + thead.innerHTML = "Individual Data"; + headerRow.appendChild(thead); + + var colorBox = document.createElement("th"); + var canvas = document.createElement("canvas"); + canvas.width = 15; + canvas.height = 15; + if (!canvas.getContext && G_vmlCanvasManager) + canvas = G_vmlCanvasManager.initElement(canvas); + var ctx = canvas.getContext("2d"); + ctx.fillStyle = 'rgb(' + colors[this.index].rt + ',' + colors[this.index].gt + ',' + colors[this.index].bt + ')'; + ctx.fillRect (0, 0, 15, 15); + colorBox.appendChild(canvas); + headerRow.appendChild(colorBox); + + var deleteLink = document.createElement("a"); + deleteLink.innerHTML = "delete"; + deleteLink.onclick = function(){ + base.core.deleteSearch(base.index); + } + var cell2 = document.createElement("th"); + cell2.appendChild(deleteLink); + headerRow.appendChild(cell2); + + table.appendChild(this.tableHeader); + + + // Initialisation of the table footer + + this.tableBody = document.createElement("tbody"); + table.appendChild(this.tableBody); + + + // Initialisation of the table footer + + this.tableFooter = document.createElement("tfoot"); + var footerRow = document.createElement("tr"); + this.tableFooter.appendChild(footerRow); + + var previousLink = document.createElement("a"); + previousLink.innerHTML = "<<<"; + previousLink.onclick = function(){ + if (base.actualChunk > 0) { + base.chunkSelect.value = base.actualChunk; + base.createTableBody(); + } + } + var nextLink = document.createElement("a"); + nextLink.innerHTML = ">>>"; + nextLink.onclick = function(){ + if (base.actualChunk + 1 < base.chunks.length) { + base.chunkSelect.value = base.actualChunk + 2; + base.createTableBody(); + } + } + var tfoot = document.createElement("th"); + tfoot.colSpan = "4"; + this.chunkSelect = document.createElement("input"); + this.chunkSelect.type = "text"; + this.chunkSelect.setAttribute( 'size', this.chunks.length.toString().length-1 ); + this.chunkSelect.setAttribute( 'maxlength', this.chunks.length.toString().length ); + this.chunkSelect.value = 1; + this.chunkSelect.onkeypress = function handleEnter(event){ + var charCode; + if (event && event.which) { + charCode = event.which; + } + else + if (window.event) { + event = window.event; + charCode = event.keyCode; + } + if (charCode == 13) + base.createTableBody(); + } + var maxChunks = document.createElement("label"); + maxChunks.innerHTML = "/" + this.chunks.length; + tfoot.appendChild(previousLink); + tfoot.appendChild(this.chunkSelect); + tfoot.appendChild(maxChunks); + tfoot.appendChild(nextLink); + footerRow.appendChild(tfoot); + + table.appendChild(this.tableFooter); + + this.createTableBody(); + + }, + + createRow: function(object, index){ + + var base = this; + + var dataRow = document.createElement("tr"); + + var indexCell = document.createElement("td"); + indexCell.innerHTML = index + 1; + dataRow.appendChild(indexCell); + + var objectCell = document.createElement("td"); + if (object.link != null) { + var linkElement = document.createElement("a"); + linkElement.href = object.link; + linkElement.target = "_blank"; + linkElement.innerHTML = object.name; + objectCell.appendChild(linkElement); + } + else { + objectCell.innerHTML = object.name; + } + dataRow.appendChild(objectCell); + + var placeCell = document.createElement("td"); + placeCell.innerHTML = object.place; + dataRow.appendChild(placeCell); + + var timeCell = document.createElement("td"); + timeCell.innerHTML = base.core.getTimeString(object.time,object.granularity); + dataRow.appendChild(timeCell); + + var mouseover = function(){ + dataRow.lastColor = dataRow.style.backgroundColor; + dataRow.style.backgroundColor = "rgb(" + cellColor.ro + "," + cellColor.go + "," + cellColor.bo + ")"; + if( object.percentage != 1 ){ + object.hoverSelect = true; + base.core.timeplot.removePoles(); + base.core.updateTimeAndMap(); + } + } + + var mouseout = function(){ + dataRow.style.backgroundColor = dataRow.lastColor; + object.hoverSelect = false; + base.core.timeplot.removePoles(); + base.core.updateTimeAndMap(); + } + + var mouseclick = function(){ + base.core.resetCore(); + object.hoverSelect = false; + var c = colors[base.index]; + dataRow.style.background = 'rgb(' + c.rt + ',' + c.gt + ',' + c.bt + ')'; + dataRow.lastColor = dataRow.style.background; + object.setPercentage(1); + base.core.updateTimeAndMap(); + } + + if (document.addEventListener) { + dataRow.addEventListener("mouseover", mouseover, false); + dataRow.addEventListener("mouseout", mouseout, false); + dataRow.addEventListener("click", mouseclick, false); + } + else + if (document.attachEvent) { + dataRow.attachEvent("onmouseover", mouseover); + dataRow.attachEvent("onmouseout", mouseout); + dataRow.attachEvent("onclick", mouseclick); + } + + if (index % 20 == 0) { + indexCell.style.borderTop = "none"; + objectCell.style.borderTop = "none"; + placeCell.style.borderTop = "none"; + timeCell.style.borderTop = "none"; + } + + return dataRow; + + }, + + createTableBody: function(){ + try { + var selectedChunk = parseInt(this.chunkSelect.value); + if (selectedChunk > this.chunks.length) { + throw "Exception"; + } + this.actualChunk = selectedChunk - 1; + } + catch (exception) { + this.chunkSelect.value = this.actualChunk + 1; + return; + } + this.tableBody.innerHTML = ""; + this.rows = []; + + for (var i = 0; i < this.chunks[this.actualChunk].length; i++) { + var index = this.actualChunk * tableElements + i; + var row = this.createRow(this.chunks[this.actualChunk][i], index); + this.tableBody.appendChild(row); + this.rows.push(row); + } + this.update(); + }, + + update: function(){ + for (var i = 0; i < this.chunks[this.actualChunk].length; i++) { + var object = this.chunks[this.actualChunk][i]; + var p = object.percentage; + if (object.hoverSelect) { + p = 1; + } + var r = cellColor.r + Math.round(p * (colors[this.index].rt - cellColor.r)); + var g = cellColor.g + Math.round(p * (colors[this.index].gt - cellColor.g)); + var b = cellColor.b + Math.round(p * (colors[this.index].bt - cellColor.b)); + this.rows[i].style.background = 'rgb(' + r + ',' + g + ',' + b + ')'; + } + } + +}