473,416 Members | 1,570 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes and contribute your articles to a community of 473,416 developers and data experts.

Grid table (add, remove, import, edit)

Greetings again to everyone,

Im back to show this grid componenet i´ve developed. With this grid you can show the data like a normal table, remove the rows that you need, add rows, import data, call determined functions, and edit the data already present

What will you need to use the grid? A table with standard markup and an ID to call the script that will turn the table into a grid

Parameters:
tabelaID => id of the table that will turn into a grid
maxLinha => number of rows that the grid will display, if number of rows exceed this number the grid will create a scrollbar
edicao => array that control the edition of the grid. this parameter accepts 2 arrays, metodo and unico
edicao.metodo => array that determine how each column will be edited. use null for no edition, "default" to free edition, and an array to a select with that options
edicao.unico ==> array that determine if one data is unique in the grid, example: the last column have a edition method of "yes" and "no", but you wanna only 1 yes in all the grid. possible values are null or index of the respective array that will be unique
valor => accept an array called tag that determine how the value of the grid will be filled. possible values are "default" to put all the data in the cell, specific tag name like "span" to get data only from spans in that column, and null to skip that column
largura => array that detemine the width of each column in percentage (max = 100)
alinhamento => array that determine the alingment of each column (left, right, center, justify)
fn => determine the function that will be called when the add button is pressed

The parameters may look kinda hard to pass, but the example will help a bit here

file: grid.css
Expand|Select|Wrap|Line Numbers
  1. .grid {border-collapse:collapse; table-layout:fixed; width:560px; font:normal 11px arial;}
  2. .grid th {background:url(img/headerBg.jpg); border-right:1px solid #ddd; border-bottom:1px solid #ddd; color:#fff}
  3. .grid td, .grid table td {text-indent:5px; white-space:nowrap; overflow:hidden; padding:0px 5px 0px 0;}
  4.  
  5. .grid table td {height:20px}
  6.  
  7. .grid .holder {overflow:auto; width:559px;}
  8. .grid table {table-layout:fixed; border-collapse:collapse; width:540px; font:normal 11px arial}
  9. .grid .scrollBar {border:0; background:transparent; width:13px;}
  10.  
  11. .grid .par td {background:#fff}
  12. .grid .impar td {background:#eee}
  13. .grid .hover td {background:#D9E8FB}
  14.  
  15. .grid span {display:none}
  16.  
  17. * html .grid .scrollBar {width:16px}
  18.  
  19. .divEdicao {background:#eee; border:1px solid #aaa; position:absolute; width:auto; height:18px;}
  20. .divEdicao img {margin:2px; cursor:pointer}
  21.  
  22. .overlay {position:absolute; background:#eee; filter:alpha(opacity=0); -moz-opacity:0; opacity:0}
  23.  
  24. .botaoAdicionar {position:relative; cursor:pointer; margin-bottom:10px}
  25. .botaoAceitar, .botaoCancelar {position:absolute; cursor:pointer;}
  26.  
  27. .edicaoTable {position:absolute; font:normal 11px arial; background:#fff; border-collapse:collapse; table-layout:fixed}
  28. .edicaoTable td {white-space:nowrap; overflow:hidden; padding:0;}
  29. .edicaoTable td input {margin:0; padding:0; width:100%; height:20px; overflow:hidden; font:normal 11px arial; padding:2px}
  30. .edicaoTable td select {margin:0; padding:0; width:100%; height:18px; overflow:hidden; font:normal 11px arial;}
  31.  
file: sample.html
[HTML]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<head>
<title>Grid</title>
</head>

<link rel="stylesheet" href="grid.css">

<script src="grid.js"></script>

<script>
window.onload = function() {
gridUm = new criarGrid('tabelaUm',10, {metodo:[null,null,null,['Yes','No']],unico:[null,null,null,1]}, {tag:['default',null,null,'default']},[40,25,15,20],['left','right','center','right'], 'abrirPopup("filtro.html")');
}

function abrirPopup(url) {
janela = window.open(url,'Janela','width=670,height=400,lef t=200,top=200,toolbar=no')
}

</script>

<body>

<table id="tabelaUm">
<thead>
<tr>
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
<th>Header 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Yes</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
<tr>
<td>Dummy text</td>
<td>Dummy text</td>
<td>Dummy text</td>
<td>No</td>
</tr>
</tbody>
</table>

<br><br><br>

<button onclick="alert(gridUm.valores)">Valor</button>

</body>
</html>
[/HTML]

Expand|Select|Wrap|Line Numbers
  1. ////////////////////////////////////////////
  2. //    Author: Romulo do Nascimento Ferreira //
  3. //  Email: romulo.nf@gmail.com              //
  4. ////////////////////////////////////////////
  5.  
  6. /* parametros
  7.  
  8.     tabelaID: id da tabela que vai ter funcionalidade de grid
  9.     maxLinha: número máximo de linhas a ser mostrado (para criação de barra de rolagem)
  10.     edicao: array que determina o método de edição de cada coluna
  11.         edicao.metodo: 
  12.             default = edicao livre
  13.             null = sem edicao
  14.             array de string = opcoes da combo box
  15.         edicao.unico:
  16.             index = indica exclusividade de uma opcao de index x
  17.     valor: array que determina qual elemento vai compor o array valores[] do grid
  18.         default = conteudo da coluna
  19.         null = nenhum valor atribuido
  20.         tag = atribui ao array o conteudo da tag escolhida dentro da coluna
  21.             ex: span
  22.     largura: array com a porcentagem de largura de cada coluna
  23.     alinhamento: array que determina o alinhamento de cada coluna (left,right,center,justify)
  24.     fn: função chamada pelo botao de adicionar na parte inferior do grid
  25.  
  26. */
  27.  
  28. function criarGrid(tabelaID,maxLinha,edicao,valor,largura,alinhamento,fn) {
  29.  
  30. this.tempInputs = new Array()
  31. this.tabela = document.getElementById(tabelaID)
  32. this.tabela.className = "grid"
  33. this.cabecalho = this.tabela.tHead
  34. this.numCol = this.cabecalho.rows[0].cells.length
  35. this.corpo = this.tabela.tBodies[0]
  36. this.tamMax = this.corpo.rows.length > 0 ? (maxLinha * this.corpo.rows[0].offsetHeight) : maxLinha * 20
  37. this.holder = this.tabela.parentNode
  38. this.alturaCabecalho = this.cabecalho.rows[0].offsetHeight
  39. this.opcoes = false
  40. this.protecao = false
  41. this.larguraCol = typeof largura !="undefined" ? largura : null
  42. this.alignCol = typeof alinhamento !="undefined" ? alinhamento : null
  43.  
  44.     if (edicao && edicao !=false) {
  45.     this.metodoEdicao = typeof edicao.metodo !="undefined" ? edicao.metodo : null
  46.     this.unicoEdicao = typeof edicao.unico !="undefined" ? edicao.unico : null
  47.     }
  48.     if (edicao == false) {
  49.     this.bloquearEdicao = true
  50.     }
  51.  
  52. if (valor) this.tagValor = typeof valor.tag !="undefined" ? valor.tag : null
  53.  
  54. this.organizarEstrutura(fn)
  55. this.executarTarefas()
  56. }
  57.  
  58. criarGrid.prototype.verificarTamanho = function() {
  59. this.alturaLinhas = 0
  60.  
  61.     for (x=0; x<this.novoCorpo.rows.length; x++) { this.alturaLinhas += this.novoCorpo.rows[x].offsetHeight }
  62.  
  63.     this.divHolder.style.height = this.alturaLinhas < this.tamMax ? this.alturaLinhas + "px" : this.tamMax + "px"
  64. }
  65.  
  66. criarGrid.prototype.associarValores = function() {
  67.     if (!this.valores) this.valores = new Array()
  68.  
  69.     if (this.valores.length > this.novoCorpo.rows.length) this.valores = new Array()
  70.  
  71.     for (x=0; x<this.novoCorpo.rows.length; x++) {
  72.         this.valores[x] = new Array()
  73.         for (y=0; y<this.numCol; y++) {
  74.             if (this.tagValor[y] != "default") {
  75.             tag = this.novoCorpo.rows[x].cells[y].getElementsByTagName(this.tagValor[y])
  76.             tag.length > 0 ? conteudo = tag[0].innerHTML : conteudo = null
  77.             }
  78.             else { conteudo = this.novoCorpo.rows[x].cells[y].innerHTML }
  79.  
  80.             if (this.tagValor[y] != "undefined" || this.tagValor[y] != null) { this.valores[x][y] = conteudo }
  81.         }
  82.     }
  83. }
  84.  
  85. criarGrid.prototype.funcoesTr = function() {
  86.     for (x=0; x<this.novoCorpo.rows.length; x++) {
  87.     this.novoCorpo.rows[x].grid = this
  88.  
  89.         // zebraRows
  90.         x%2 == 0 ? this.novoCorpo.rows[x].className = "par" : this.novoCorpo.rows[x].className = "impar"
  91.  
  92.         // mouseover event
  93.          this.novoCorpo.rows[x].onmouseover = function() {
  94.         if (this.grid.timer) clearTimeout(this.grid.timer)
  95.         this.grid.mostrarOpcoes(this)
  96.         this.className += " hover" 
  97.         }
  98.  
  99.         // mouseout event
  100.         this.novoCorpo.rows[x].onmouseout = function() {
  101.         var _this = this.grid
  102.         this.grid.timer = setTimeout(function(){_this.removerOpcoes()},500)
  103.         this.className = this.className.substring(0,this.className.indexOf(" hover")) 
  104.         }
  105.  
  106.     }
  107. }
Expand|Select|Wrap|Line Numbers
  1. criarGrid.prototype.criarOverlay = function() {
  2. if (this.protecao) this.removerOverlay()
  3. this.protecao = true
  4. this.overlay = document.createElement("div")
  5. this.overlay.className = "overlay"
  6. this.overlay.style.height = this.divHolder.offsetHeight + 10 + "px"
  7. this.overlay.style.width = this.novaTabela.offsetWidth + 10 + "px"
  8. this.overlay.style.top = this.divHolder.offsetTop + this.tabela.offsetTop + this.alturaCabecalho + "px"
  9. this.overlay.style.left = this.divHolder.offsetLeft + this.tabela.offsetLeft + "px"
  10. this.holder.appendChild(this.overlay)
  11.  
  12. this.divHolder.style.overflow = "hidden"
  13. this.botaoAdicionar.style.display = "none"
  14. }
  15.  
  16. criarGrid.prototype.removeOverlay = function() {
  17. this.overlay.parentNode.removeChild(this.overlay)
  18. this.protecao = false
  19.  
  20. this.divHolder.style.overflow = "auto"
  21. this.botaoAdicionar.style.display = ""
  22. }
  23.  
  24. criarGrid.prototype.editarLinha = function(tr) {
  25. this.removerOpcoes()
  26. this.criarOverlay()
  27.  
  28.     this.edicaoTable = document.createElement("table")
  29.     this.edicaoTable.className = "edicaoTable"
  30.     this.edicaoTbody = document.createElement("tbody")
  31.     this.cloneTr = tr.cloneNode(true)
  32.     this.edicaoTable.appendChild(this.edicaoTbody)
  33.     this.edicaoTbody.appendChild(this.cloneTr)
  34.  
  35.     this.edicaoTable.style.width = tr.offsetWidth + "px"
  36.     this.edicaoTable.style.top = tr.offsetTop - this.divHolder.scrollTop + this.tabela.offsetTop + this.alturaCabecalho + "px"
  37.     this.edicaoTable.style.left = this.tabela.offsetLeft - this.divEdicaoTr.offsetWidth + "px"
  38.  
  39.     // metodos de edicao
  40.     for (x=0; x<this.cloneTr.cells.length; x++) {
  41.     this.cloneTr.cells[x].style.width = tr.cells[x].offsetWidth + "px"
  42.  
  43.         if (this.metodoEdicao[x] == "default") {
  44.         this.tempInputs[x] = document.createElement("input")
  45.         this.tempInputs[x].value = tr.cells[x].innerHTML
  46.         this.cloneTr.cells[x].replaceChild(this.tempInputs[x],this.cloneTr.cells[x].childNodes[0])
  47.         }
  48.  
  49.         else if (this.metodoEdicao[x] && this.metodoEdicao[x].length > 1) {
  50.         this.tempInputs[x] = document.createElement("select")
  51.             for (y=0; y<this.metodoEdicao[x].length; y++) {
  52.             opcaoTemp = document.createElement("option")
  53.             opcaoTemp.value = this.metodoEdicao[x][y]
  54.             opcaoTemp.innerHTML = this.metodoEdicao[x][y]
  55.             this.tempInputs[x].appendChild(opcaoTemp)
  56.             }
  57.         this.cloneTr.cells[x].replaceChild(this.tempInputs[x],this.cloneTr.cells[x].childNodes[0])
  58.  
  59.             for (y=0; y<this.tempInputs[x].options.length; y++) {
  60.                 if (this.tempInputs[x].options[y].innerHTML.toLowerCase() == tr.cells[x].innerHTML.toLowerCase()) {
  61.                 this.tempInputs[x].options[y].selected = "selected"
  62.                 }
  63.             }
  64.         }
  65.  
  66.         else {
  67.         this.tempInputs[x] = document.createElement("input")
  68.         this.tempInputs[x].value = tr.cells[x].innerHTML
  69.         this.tempInputs[x].disabled = "disabled"
  70.         this.cloneTr.cells[x].replaceChild(this.tempInputs[x],this.cloneTr.cells[x].childNodes[0])
  71.         }
  72.  
  73.     }
  74.  
  75.     this.holder.appendChild(this.edicaoTable)
  76.  
  77.     this.botaoAceitar = new Image()
  78.     this.botaoAceitar.src = "img/aceitar.gif"
  79.     this.botaoAceitar.className = "botaoAceitar"
  80.     this.botaoAceitar.grid = this
  81.     this.botaoAceitar.onclick = function() { this.grid.aceitarEdicao(tr) }
  82.     this.botaoAceitar.style.top = parseInt(this.edicaoTable.style.top) + this.edicaoTable.offsetHeight/6 + "px"
  83.     this.botaoAceitar.style.left = parseInt(this.edicaoTable.style.left) + this.edicaoTable.offsetWidth + 3 + "px"
  84.     this.holder.appendChild(this.botaoAceitar)
  85.  
  86.     this.botaoCancelar = new Image()
  87.     this.botaoCancelar.src = "img/cancelar.gif"
  88.     this.botaoCancelar.className = "botaoCancelar"
  89.     this.botaoCancelar.grid = this
  90.     this.botaoCancelar.onclick = function() { this.grid.cancelarEdicao() }
  91.     this.botaoCancelar.style.top = parseInt(this.botaoAceitar.style.top) + "px"
  92.     this.botaoCancelar.style.left = parseInt(this.edicaoTable.style.left) + this.edicaoTable.offsetWidth + 20 + "px"
  93.     this.holder.appendChild(this.botaoCancelar)    
  94. }
Expand|Select|Wrap|Line Numbers
  1. criarGrid.prototype.aceitarEdicao = function(tr) {
  2.  
  3.     for (x=0; x<this.tempInputs.length; x++) {
  4.         if (this.unicoEdicao[x] && this.tempInputs[x].value != this.metodoEdicao[x][this.unicoEdicao[x]]) {
  5.             for (y=0; y<this.novoCorpo.rows.length; y++) {
  6.             this.novoCorpo.rows[y].cells[x].innerHTML = this.metodoEdicao[x][this.unicoEdicao[x]]
  7.             }
  8.         }
  9.     tr.cells[x].innerHTML = this.tempInputs[x].value 
  10.     }
  11.  
  12. this.cancelarEdicao()
  13. this.executarTarefas()
  14. }
  15.  
  16. criarGrid.prototype.cancelarEdicao = function() {
  17. this.removeOverlay()
  18. this.edicaoTable.parentNode.removeChild(this.edicaoTable)
  19. this.botaoCancelar.parentNode.removeChild(this.botaoCancelar)
  20. this.botaoAceitar.parentNode.removeChild(this.botaoAceitar)
  21. }
  22.  
  23. criarGrid.prototype.excluirLinha = function(tr) {
  24. this.removerOpcoes()
  25. tr.parentNode.removeChild(tr)
  26. this.executarTarefas()
  27. }
  28.  
  29. criarGrid.prototype.removerOpcoes = function() {
  30. if (this.divEdicaoTr) this.divEdicaoTr.parentNode.removeChild(this.divEdicaoTr)
  31. this.opcoes = false
  32. }
  33.  
  34. criarGrid.prototype.mostrarOpcoes = function(tr) {
  35. if (this.opcoes) this.removerOpcoes()
  36.  
  37. this.opcoes = true
  38.  
  39. this.divEdicaoTr = document.createElement("div")
  40. this.divEdicaoTr.className = "divEdicao"
  41. this.divEdicaoTr.grid = this
  42.  
  43.     this.divEdicaoTr.onmouseover = function() { if (this.grid.timer) clearTimeout(this.grid.timer) }
  44.     this.divEdicaoTr.onmouseout = function() {
  45.     var _this = this.grid
  46.     this.grid.timer = setTimeout(function(){_this.removerOpcoes()},500)
  47.     }
  48.  
  49. this.holder.appendChild(this.divEdicaoTr)
  50.  
  51. if (!this.bloquearEdicao) {
  52. this.botaoEditar = new Image()
  53. this.botaoEditar.grid = this
  54. this.botaoEditar.alt = "Clique aqui para editar a linha " + (tr.rowIndex + 1)
  55. this.botaoEditar.title = "Clique aqui para editar a linha " + (tr.rowIndex + 1)
  56. this.botaoEditar.onclick = function() { this.grid.editarLinha(tr) }
  57. this.botaoEditar.src = "img/lapis.gif"
  58. this.divEdicaoTr.appendChild(this.botaoEditar)
  59. }
  60.  
  61. this.botaoExcluir = new Image()
  62. this.botaoExcluir.grid = this
  63. this.botaoExcluir.alt = "Clique aqui para excluir a linha " + (tr.rowIndex + 1)
  64. this.botaoExcluir.title = "Clique aqui para excluir a linha " + (tr.rowIndex + 1)
  65. this.botaoExcluir.onclick = function() { this.grid.excluirLinha(tr) }
  66. this.botaoExcluir.src = "img/lixeira.gif"
  67. this.divEdicaoTr.appendChild(this.botaoExcluir)
  68.  
  69. this.divEdicaoTr.style.top = tr.offsetTop - this.divHolder.scrollTop + this.tabela.offsetTop + this.alturaCabecalho + "px"
  70. this.divEdicaoTr.style.left = tr.offsetWidth + this.tabela.offsetLeft - this.divEdicaoTr.offsetWidth + "px"
  71. }
  72.  
  73. criarGrid.prototype.executarTarefas = function() {
  74. this.corrigirLargura()
  75. this.funcoesTr()
  76. this.associarValores()
  77. this.verificarTamanho()
  78. }
  79.  
  80. criarGrid.prototype.corrigirLargura = function() {
  81.     for (x=0; x<this.numCol; x++) {
  82.     if (this.larguraCol) { this.cabecalho.rows[0].cells[x].style.width = this.larguraCol[x] + "%" }
  83.         for (y=0; y<this.novoCorpo.rows.length; y++) {
  84.         if (this.larguraCol) { this.novoCorpo.rows[y].cells[x].style.width = this.larguraCol[x] + "%" }
  85.         if (this.alignCol) { this.novoCorpo.rows[y].cells[x].style.textAlign = this.alignCol[x] }
  86.         }
  87.     }
  88. }
  89.  
  90. criarGrid.prototype.organizarEstrutura = function(fn) {
  91.     this.scrollBar = document.createElement("th")
  92.     this.trHolder = document.createElement("tr")
  93.     this.tdHolder = document.createElement("td")
  94.     this.divHolder = document.createElement("div")
  95.     this.novaTabela = document.createElement("table")
  96.     this.novoCorpo = document.createElement("tbody")
  97.  
  98.     while (this.corpo.rows.length > 0) { this.novoCorpo.appendChild(this.corpo.rows[0]) }
  99.  
  100.     this.scrollBar.innerHTML = "&nbsp;"
  101.     this.scrollBar.className = "scrollBar"
  102.     this.cabecalho.rows[0].appendChild(this.scrollBar)
  103.  
  104.     this.corpo.appendChild(this.trHolder)
  105.  
  106.     this.tdHolder.colSpan = (this.numCol+1)
  107.     this.trHolder.appendChild(this.tdHolder)
  108.  
  109.     this.divHolder.className = "holder"
  110.     this.divHolder.style.height = this.tamMax + "px"
  111.     this.tdHolder.appendChild(this.divHolder)
  112.  
  113.     this.divHolder.appendChild(this.novaTabela)
  114.  
  115.     this.novaTabela.appendChild(this.novoCorpo)
  116.  
  117.     this.botaoAdicionar = new Image()
  118.     this.botaoAdicionar.onmouseover = function() { this.src = "img/add2-hover.gif" }
  119.     this.botaoAdicionar.onmouseout = function() { this.src = "img/add2.gif" } 
  120.     this.botaoAdicionar.className = "botaoAdicionar"
  121.     this.botaoAdicionar.src = "img/add2.gif"
  122.     this.botaoAdicionar.onclick = function() { eval(fn) }
  123.     this.holder.insertBefore(this.botaoAdicionar,this.tabela.nextSibling)
  124. }
  125.  
  126. criarGrid.prototype.importarDados = function(tr) {
  127.  
  128. inserirTr = true
  129.  
  130.     for (x=0; x<this.novoCorpo.rows.length; x++) {
  131.         conteudoAtual = this.novoCorpo.rows[x].textContent ? this.novoCorpo.rows[x].textContent : this.novoCorpo.rows[x].innerText
  132.         conteudoNovo = tr.textContent ? tr.textContent : tr.innerText
  133.         if (conteudoAtual == conteudoNovo) { inserirTr = false }
  134.     }
  135.  
  136.     if (inserirTr) {
  137.  
  138.     this.novoCorpo.insertRow(this.novoCorpo.rows.length)
  139.  
  140.         for (x=0; x<this.numCol; x++) {
  141.         this.novoCorpo.rows[this.novoCorpo.rows.length-1].insertCell(x)
  142.         this.novoCorpo.rows[this.novoCorpo.rows.length-1].cells[x].innerHTML = tr.getElementsByTagName("td")[x].innerHTML
  143.         }
  144.  
  145.     this.divHolder.scrollTop = this.divHolder.scrollHeight
  146.  
  147.     this.executarTarefas()
  148.     }
  149.  
  150.     else { janela.alert("Informação existente") }
  151. }
  152.  
Thats basically it.
Feel free to use/modify the grid to serve your own purposes.
I just ask for you to keep the copyright there.

The url bellow is a zip containing a sample of the grid getting data from the filter, another component i´ve already posted here. The file also contains some images that i use on the grid, but you can easily change that to make your custom grid.

Grid & filter
Attached Files
File Type: zip grid & filtro.zip (15.5 KB, 545 views)
Dec 3 '07 #1
6 7948
If any admin gets here can you try to fix this topic? The above topic contains the js but using the [*code*] tag i couldnt manage to make the post visible. When everything is fixed delete this post also. I´d be grateful!
Dec 4 '07 #2
acoder
16,027 Expert Mod 8TB
Hopefully fixed.

Is it possible to make an English version? It'd make the code a lot easier to understand!
Dec 5 '07 #3
Hopefully fixed.

Is it possible to make an English version? It'd make the code a lot easier to understand!
Hi

maybe users can try following for English help:

Translation favelet/bookmarklet from:

http://tantek.com/favelets/

Babelfish Portuguese to English

Expand|Select|Wrap|Line Numbers
  1. javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url=' +escape(document.location)+'&lp=pt_en&tt=url')
Feb 6 '08 #4
I´ve made lots of changes, and i hope to post an english version of it when i have some free time!!
Feb 6 '08 #5
acoder
16,027 Expert Mod 8TB
Hi

maybe users can try following for English help:

Translation favelet/bookmarklet from:

http://tantek.com/favelets/

Babelfish Portuguese to English

Expand|Select|Wrap|Line Numbers
  1. javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url=' +escape(document.location)+'&lp=pt_en&tt=url')
Thanks for the tip. Is it Portuguese? :)
Feb 6 '08 #6
acoder
16,027 Expert Mod 8TB
I´ve made lots of changes, and i hope to post an english version of it when i have some free time!!
Look forward to the changes. Thanks for the updates.
Feb 7 '08 #7

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: Piet | last post by:
Hello, I have written a small program which dynamically displays data from a data structure in a wx.grid. The grid reacts as expected when the data structure is enlarged: a new row is added and...
4
by: Filippo Pandiani | last post by:
I have a grid that shows the file list from a folder. On the postback, how do I get a Dataset from this grid? Thanks, Filippo.
5
by: IGotYourDotNet | last post by:
I'm pulling data out of an oracle db and populating a datagrid such as this cars doors Cylinders chevy 4 6 ford 2 8 how can i make it such as cars ...
1
by: Mad Scientist Jr | last post by:
can someone explain how to simply populate a grid in .net ? the way i understand it, there is no more msflexgrid, and instead is this new control that has to be tied to a dataset, and it is a real...
2
by: Questman | last post by:
Good afternoon, Does anyone have any code that implements, or approaches implementing, a cross-browser DHTML/JS solution to provide an Excel-like Grid on a web page - I'm trying to convert an...
0
by: BH | last post by:
Hi, I am trying to build my own IHM with two treeCtrl and 1 grid, based on the wx.aui demos. My problem is with the Grid. It dosen't have scrollbars. I tried many methods (fit) but it always...
7
oll3i
by: oll3i | last post by:
i want to change the values in two columns one colum is a combobox and the secons column is editable too i want to get the value of that second column and the value of combobox and sent that...
2
by: Valli | last post by:
Hi, I am using a gridview to display data from table. In the gridview, there are 5 columns in which one column contains link name(eg. http://www.msn.com). I want to show this link as an...
1
by: rakeshnair | last post by:
i wrote a code in jsp to create dynamic table..the problem is i need data base connection when cursor moves from one cell to other... eg...when i enter product id in the first cell, the product name...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.