/[suikacvs]/test/html-webhacc/WebHACC/Language/DOM.pm
Suika

Diff of /test/html-webhacc/WebHACC/Language/DOM.pm

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

revision 1.2 by wakaba, Sun Jul 20 16:53:10 2008 UTC revision 1.4 by wakaba, Mon Jul 21 09:15:55 2008 UTC
# Line 10  sub generate_structure_dump_section ($) Line 10  sub generate_structure_dump_section ($)
10        
11    my $out = $self->output;    my $out = $self->output;
12    
13    $out->start_section (id => 'document-tree', title => 'Document Tree',    $out->start_section (role => 'tree');
                        short_title => 'Tree');  
14    
15    $out->start_tag ('ol', class => 'xoxo');    $out->start_tag ('ol', class => 'xoxo');
16    
# Line 158  sub generate_structure_error_section ($) Line 157  sub generate_structure_error_section ($)
157    my $self = shift;    my $self = shift;
158        
159    my $out = $self->output;    my $out = $self->output;
160    $out->start_section (id => 'document-errors', title => 'Document Errors');    $out->start_section (role => 'structure-errors');
161    $out->start_tag ('dl', class => 'document-errors-list');    $out->start_error_list (role => 'structure-errors');
162    
163    my $input = $self->input;    my $input = $self->input;
164    my $result = $self->result;    my $result = $self->result;
# Line 178  sub generate_structure_error_section ($) Line 177  sub generate_structure_error_section ($)
177          ($self->{structure}, $onerror, $onsubdoc);          ($self->{structure}, $onerror, $onsubdoc);
178    }    }
179    
180    $out->end_tag ('dl');    $out->end_error_list (role => 'structure-errors');
   $out->html (qq[<script>  
     addSourceToParseErrorList ('@{[$input->id_prefix]}', 'document-errors-list');  
   </script>]);  
181    $out->end_section;    $out->end_section;
182  } # generate_structure_error_section  } # generate_structure_error_section
183    
184    sub generate_additional_sections ($) {
185      my $self = shift;
186      $self->SUPER::generate_additional_sections;
187    
188      $self->generate_table_section;
189    
190      $self->generate_listing_section (
191          key => 'id', id => 'identifiers',
192          short_title => 'IDs', title => 'Identifiers',
193      );
194      $self->generate_listing_section (
195          key => 'term', id => 'terms',
196          short_title => 'Terms', title => 'Terms',
197      );
198      $self->generate_listing_section (
199          key => 'class', id => 'classes',
200          short_title => 'Classes', title => 'Classes',
201      );
202    
203      $self->generate_rdf_section;
204    } # generate_additional_sections
205    
206    sub generate_table_section ($) {
207      my $self = shift;
208    
209      my $tables = $self->{add_info}->{table} || [];
210      return unless @$tables;
211    
212      my $out = $self->output;
213      $out->start_section (id => 'tables', title => 'Tables');
214    
215      $out->html (q[<!--[if IE]><script type="text/javascript" src="../excanvas.js"></script><![endif]-->
216    <script src="../table-script.js" type="text/javascript"></script>
217    <noscript>
218    <p><em>Structure of tables are visualized here if scripting is enabled.</em></p>
219    </noscript>]);
220      
221      require JSON;
222      
223      my $i = 0;
224      for my $table (@$tables) {
225        $i++;
226        $out->start_section (id => 'table-' . $i,
227                             title => 'Table #' . $i);
228    
229        $out->start_tag ('dl');
230        $out->dt ('Table Element');
231        $out->start_tag ('dd');
232        $out->node_link ($table->{element});
233        $out->end_tag ('dl');
234        delete $table->{element};
235    
236        for (@{$table->{column_group}}, @{$table->{column}}, $table->{caption},
237             @{$table->{row}}) {
238          next unless $_;
239          delete $_->{element};
240        }
241        
242        for (@{$table->{row_group}}) {
243          next unless $_;
244          next unless $_->{element};
245          $_->{type} = $_->{element}->manakai_local_name;
246          delete $_->{element};
247        }
248        
249        for (@{$table->{cell}}) {
250          next unless $_;
251          for (@{$_}) {
252            next unless $_;
253            for (@$_) {
254              $_->{id} = refaddr $_->{element} if defined $_->{element};
255              delete $_->{element};
256              $_->{is_header} = $_->{is_header} ? 1 : 0;
257            }
258          }
259        }
260    
261        my $id_prefix = $self->input->id_prefix;
262        $out->script (q[tableToCanvas (] .
263            JSON::objToJson ($table) .
264            q[, document.getElementById ('] . $id_prefix . 'table-' . $i . q[')] .
265            q[, '] . $id_prefix . q[');]);
266    
267        $out->end_section;
268      }
269    
270      $out->end_section;
271    } # generate_table_section
272    
273    sub generate_listing_section ($%) {
274      my $self = shift;
275      my %opt = @_;
276    
277      my $list = $self->{add_info}->{$opt{key}} || {};
278      return unless keys %$list;
279    
280      my $out = $self->output;
281    
282      $out->start_section (id => $opt{id},
283                           title => $opt{title},
284                           short_title => $opt{short_title});
285      $out->start_tag ('dl');
286    
287      for my $id (sort {$a cmp $b} keys %$list) {
288        $out->start_tag ('dt');
289        $out->code ($id);
290        for (@{$list->{$id}}) {
291          $out->start_tag ('dd');
292          $out->node_link ($_);
293        }
294      }
295    
296      $out->end_tag ('dl');
297      $out->end_section;
298    } # generate_listing_section
299    
300    my $generate_rdf_resource_html = sub ($$) {
301      my ($resource, $out) = @_;
302    
303      if (defined $resource->{uri}) {
304        $out->url ($resource->{uri});
305      } elsif (defined $resource->{bnodeid}) {
306        $out->text ('_:' . $resource->{bnodeid});
307      } elsif ($resource->{nodes}) {
308        $out->text ('(rdf:XMLLiteral)');
309      } elsif (defined $resource->{value}) {
310        $out->start_tag ('q',
311                         lang => defined $resource->{language}
312                             ? $resource->{language} : '');
313        $out->text ($resource->{value});
314        $out->end_tag ('q');
315    
316        if (defined $resource->{datatype}) {
317          $out->text ('^^');
318          $out->url ($resource->{datatype});
319        } elsif (length $resource->{language}) {
320          $out->text ('@' . $resource->{language});
321        }
322      } else {
323        $out->text ('??'); ## NOTE: An error of the implementation.
324      }
325    }; # $generate_rdf_resource_html
326    
327    ## TODO: Should we move this method to another module,
328    ## such as Base or RDF?
329    sub generate_rdf_section ($) {
330      my $self = shift;
331    
332      my $list = $self->{add_info}->{rdf} || [];
333      return unless @$list;
334    
335      my $out = $self->output;
336      $out->start_section (id => 'rdf', short_title => 'RDF',
337                           title => 'RDF Triples');
338      $out->start_tag ('dl');
339    
340      my $i = 0;
341      for my $rdf (@$list) {
342        $out->start_tag ('dt', id => 'rdf-' . $i++);
343        $out->node_link ($rdf->[0]);
344        $out->start_tag ('dd');
345        $out->start_tag ('dl');
346        for my $triple (@{$rdf->[1]}) {
347          $out->start_tag ('dt');
348          $out->node_link ($triple->[0]);
349          $out->start_tag ('dd');
350          $out->text ('Subject: ');
351          $generate_rdf_resource_html->($triple->[1] => $out);
352          $out->start_tag ('dd');
353          $out->text ('Predicate: ');
354          $generate_rdf_resource_html->($triple->[2] => $out);
355          $out->start_tag ('dd');
356          $out->text ('Object: ');
357          $generate_rdf_resource_html->($triple->[3] => $out);
358        }
359        $out->end_tag ('dl');
360      }
361      $out->end_tag ('dl');
362      $out->end_section;
363    } # generate_rdf_section
364    
365  1;  1;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.4

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24