fixedTables.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*##############################################################################
  2. # Copyright (C) 2011 HPCC Systems.
  3. #
  4. # All rights reserved. This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU Affero General Public License as
  6. # published by the Free Software Foundation, either version 3 of the
  7. # License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU Affero General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Affero General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. ############################################################################## */
  17. var a_fixedTableNames = [];
  18. function initFixedTables(fixedTableNames)
  19. {
  20. if (typeof fixedTableNames != 'undefined')
  21. a_fixedTableNames = a_fixedTableNames.concat( fixedTableNames );
  22. var nFixedTables = a_fixedTableNames.length;
  23. if (nFixedTables) {
  24. document.body.onresize=resizeFixedTableBodyDivs;
  25. for (var i=0; i<a_fixedTableNames.length; i++) {
  26. bDiv = document.getElementById('DB.' + a_fixedTableNames[i]);
  27. bDiv.onscroll = new Function( "scrollFixedTableHeaderDiv(this, '" + a_fixedTableNames[i] + "')" );
  28. }
  29. resizeFixedTableBodyDivs();
  30. }
  31. }
  32. function resizeFixedTableBodyDivs() {
  33. if (a_fixedTableNames.length == 0)
  34. return;
  35. var hfooter = document.getElementById('pageFooter');
  36. var bottom = hfooter ? hfooter.offsetTop : document.body.offsetHeight;
  37. var bDiv = document.getElementById('DB.' + a_fixedTableNames[0]);
  38. var bTable = document.getElementById(a_fixedTableNames[0]);
  39. var h = bottom - bDiv.offsetTop - 35;
  40. h /= a_fixedTableNames.length;
  41. h = Math.max(h, 50);
  42. if (bDiv.offsetHeight > h)
  43. bDiv.style.height = h;
  44. else
  45. {
  46. var tw = bTable.offsetWidth;
  47. var th = bTable.offsetHeight;
  48. var dw = bDiv.offsetWidth;
  49. var doubleBorder = 2;
  50. if (dw < tw+doubleBorder)
  51. bDiv.style.height = Math.min(h, th+20);//add height to fit horiz scrollbar to avoid vertical scrollbar
  52. else
  53. if (dw > tw+doubleBorder)
  54. bDiv.style.height = th+doubleBorder;
  55. }
  56. resizeFixedTableHeaderDiv(bDiv, a_fixedTableNames[0])
  57. for (var i=1; i<a_fixedTableNames.length; i++) {
  58. bDiv = document.getElementById('DB.' + a_fixedTableNames[i]);
  59. bDiv.style.height = h;
  60. resizeFixedTableHeaderDiv(bDiv, a_fixedTableNames[i]);
  61. }
  62. }
  63. function scrollFixedTableHeaderDiv(bodyDiv, tableId)
  64. {
  65. var htable = document.getElementById('H.' + tableId);
  66. if (htable)
  67. htable.style.left = -bodyDiv.scrollLeft;
  68. }
  69. function resizeFixedTableHeaderDiv(bodyDiv, tableId)
  70. {
  71. var hdiv = document.getElementById('DH.' + tableId);
  72. if (hdiv)
  73. {
  74. var htable = document.getElementById('H.' + tableId);
  75. var btable = bodyDiv.getElementsByTagName('table')[0];
  76. hdiv.style.width = bodyDiv.offsetWidth;
  77. htable.style.width = btable.offsetWidth;
  78. //resize individual column headers based on first row's cells in body table
  79. if (htable.style.tableLayout != 'fixed')
  80. {
  81. var bCells = btable.rows[0].cells;
  82. var hCells = htable.rows[0].cells;
  83. var n_bCells = bCells.length;
  84. var n_hCells = hCells.length;
  85. for (var i=0; i<n_bCells; i++)
  86. hCells[i].style.width = bCells[i].offsetWidth;
  87. }
  88. scrollFixedTableHeaderDiv(bodyDiv, tableId);
  89. }
  90. }