/[suikacvs]/test/html-whatpm/table-script.js
Suika

Diff of /test/html-whatpm/table-script.js

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by wakaba, Sun May 27 06:37:05 2007 UTC revision 1.5 by wakaba, Mon May 5 06:11:34 2008 UTC
# Line 1  Line 1 
1  function tableToCanvas (table) {  function tableToCanvas (table, parent, idPrefix) {
2    var canvas = document.createElement ('canvas');    var canvas = document.createElement ('canvas');
3    document.body.appendChild (canvas);    parent.appendChild (canvas);
4      if (window.G_vmlCanvasManager) {
5        canvas = G_vmlCanvasManager.initElement (canvas);
6      }
7    var c2d = canvas.getContext ('2d');    var c2d = canvas.getContext ('2d');
8    
9    var param = {    var param = {
# Line 40  function tableToCanvas (table) { Line 43  function tableToCanvas (table) {
43  var columnNumber = table.column.length;  var columnNumber = table.column.length;
44  if (columnNumber < table.cell.length) columnNumber = table.cell.length;  if (columnNumber < table.cell.length) columnNumber = table.cell.length;
45  var rowNumber = 0;  var rowNumber = 0;
46  for (var i = 1; i < table.cell.length; i++) {  for (var i = 0; i < table.cell.length; i++) {
47    if (table.cell[i] && rowNumber < table.cell[i].length) {    if (table.cell[i] && rowNumber < table.cell[i].length) {
48      rowNumber = table.cell[i].length;      rowNumber = table.cell[i].length;
49    }    }
50  }  }
51    
52    canvas.style.width = 'auto'; // NOTE: Opera9 has default style=""
53    canvas.style.height = 'auto';
54    // NOTE: Set style="" before width/height="" for ExplorerCanvas compatibility
55  canvas.width = param.cellLeft  canvas.width = param.cellLeft
56      + (param.columnWidth + param.columnSpacing) * columnNumber      + (param.columnWidth + param.columnSpacing) * columnNumber
57      + param.cellRight;      + param.cellRight;
58  canvas.height = param.cellTop  canvas.height = param.cellTop
59      + (param.rowHeight + param.rowSpacing) * rowNumber      + (param.rowHeight + param.rowSpacing) * rowNumber
60      + param.cellBottom;      + param.cellBottom;
 canvas.style.width = 'auto'; // NOTE: Opera9 has default style=""  
 canvas.style.height = 'auto';  
61    
62  var y = param.rowTop;  var y = param.rowTop;
63  for (var i = 1; i < table.row_group.length; i++) {  for (var i = 0; i < table.row_group.length; i++) {
64    var rg = table.row_group[i];    var rg = table.row_group[i];
65    c2d.beginPath ();    c2d.beginPath ();
66    if (rg.type == 'thead') {    if (rg.type == 'thead') {
# Line 88  for (var i = 1; i < table.row_group.leng Line 92  for (var i = 1; i < table.row_group.leng
92  c2d.beginPath ();  c2d.beginPath ();
93  c2d.strokeStyle = param.explicitColumnGroupStrokeStyle;  c2d.strokeStyle = param.explicitColumnGroupStrokeStyle;
94  var x = param.columnLeft;  var x = param.columnLeft;
95  for (var i = 1; i < table.column_group.length; i++) {  for (var i = 0; i < table.column_group.length; i++) {
96    var cg = table.column_group[i];    var cg = table.column_group[i];
97    c2d.moveTo (x, param.columnGroupTop);    c2d.moveTo (x, param.columnGroupTop);
98    x += (param.columnWidth + param.columnSpacing) * cg.width;    x += (param.columnWidth + param.columnSpacing) * cg.width;
# Line 99  c2d.stroke (); Line 103  c2d.stroke ();
103  c2d.closePath ();  c2d.closePath ();
104    
105  var x = param.columnLeft;  var x = param.columnLeft;
106  for (var i = 1; i < columnNumber; i++) {  for (var i = 0; i < columnNumber; i++) {
107    var c = table.column[i];    var c = table.column[i];
108    c2d.beginPath ();    c2d.beginPath ();
109    c2d.moveTo (x, param.columnTop);    c2d.moveTo (x, param.columnTop);
# Line 114  for (var i = 1; i < columnNumber; i++) { Line 118  for (var i = 1; i < columnNumber; i++) {
118    c2d.closePath ();    c2d.closePath ();
119  }  }
120    
121    var map = document.createElement ('map');
122  var x = param.cellLeft;  var x = param.cellLeft;
123  for (var i = 1; i < table.cell.length; i++) {  for (var i = 0; i < table.cell.length; i++) {
124    var y = param.cellTop;    var y = param.cellTop;
125    if (!table.cell[i]) continue;    if (!table.cell[i]) continue;
126    for (var j = 1; j < table.cell[i].length; j++) {    for (var j = 0; j < table.cell[i].length; j++) {
127      var c = table.cell[i][j];      var c = table.cell[i][j];
128      if (c && ((c[0].x == i && c[0].y == j) || c.length > 1)) {      if (c && ((c[0].x == i && c[0].y == j) || c.length > 1)) {
129        c2d.beginPath ();        c2d.beginPath ();
# Line 132  for (var i = 1; i < table.cell.length; i Line 137  for (var i = 1; i < table.cell.length; i
137              ? param.headerCellFillStyle : param.dataCellFillStyle;              ? param.headerCellFillStyle : param.dataCellFillStyle;
138          c2d.strokeStyle = c[0].is_header          c2d.strokeStyle = c[0].is_header
139              ? param.headerCellStrokeStyle : param.dataCellStrokeStyle;              ? param.headerCellStrokeStyle : param.dataCellStrokeStyle;
140            if (c[0].id) {
141              var area = document.createElement ('area');
142              area.shape = 'rect';
143              area.coords = [x, y, x + width, y + height].join (',');
144              area.alt = 'Cell (' + c[0].x + ', ' + c[0].y + ')';
145              area.href = '#' + idPrefix + 'node-' + c[0].id;
146              area.id = idPrefix + 'cell-' + c[0].id;
147              map.appendChild (area);
148            }
149        } else {        } else {
150          c2d.rect (x, y, param.columnWidth, param.rowHeight);          c2d.rect (x, y, param.columnWidth, param.rowHeight);
151          c2d.fillStyle = param.overlappingCellFillStyle;          c2d.fillStyle = param.overlappingCellFillStyle;
# Line 147  for (var i = 1; i < table.cell.length; i Line 161  for (var i = 1; i < table.cell.length; i
161  }  }
162    
163  var y = param.rowTop;  var y = param.rowTop;
164  for (var i = 1; i < rowNumber; i++) {  for (var i = 0; i < rowNumber; i++) {
165    c2d.beginPath ();    c2d.beginPath ();
166    c2d.moveTo (param.rowLeft, y);    c2d.moveTo (param.rowLeft, y);
167    y += param.rowHeight + param.rowSpacing;    y += param.rowHeight + param.rowSpacing;
# Line 160  for (var i = 1; i < rowNumber; i++) { Line 174  for (var i = 1; i < rowNumber; i++) {
174    c2d.stroke ();    c2d.stroke ();
175    c2d.closePath ();    c2d.closePath ();
176  }  }
177    
178      if (map.hasChildNodes ()) {
179        var mapid = /* idPrefix + */ 'table-map-' + ++document.TableMapId;
180        map.name = mapid;
181        parent.appendChild (map);
182        var img = document.createElement ('img');
183        img.src = canvas.toDataURL ();
184        img.useMap = '#' + mapid;
185        parent.appendChild (img);
186        canvas.style.display = 'none';
187      }
188  } // tableToCanvas  } // tableToCanvas
189    
190    if (!document.TableMapId) document.TableMapId = 0;
191    
192  /*  /*
193    
194  Copyright 2007 Wakaba <w@suika.fam.cx>  Copyright 2007-2008 Wakaba <w@suika.fam.cx>
195    
196  This library is free software; you can redistribute it  This library is free software; you can redistribute it
197  and/or modify it under the same terms as Perl itself.  and/or modify it under the same terms as Perl itself.

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24