7 use CGI::Carp qw/fatalsToBrowser/;
16 print qq|<pre># $name\n|, YAML::Dump( @_ ), qq|</pre>|;
19 my $path = $ENV{PATH_INFO} || 'ecas';
21 $dir =~ s{/[^/]+.cgi}{};
23 my $config = YAML::LoadFile( "$dir/$path/config.yml" );
25 my $database = (keys %{ $config->{databases} })[0];
26 die "$database not in $path" unless $path =~ m{\Q$database\E};
28 my $html_markup = "$dir/$path/html.pm";
30 if ( -e $html_markup ) {
32 $html_markup = $database . '::html';
37 my $estraier = YAML::LoadFile( "$dir/../var/estraier/$database.yaml" );
39 my $db = $config->{databases}->{$database};
41 my @attr = keys %{ $estraier->{attr} }; # FIXME replace with real gnerated lookup
45 -title => $db->{name},
46 -style => '../../style.css',
49 qq|<div id=description>|, $db->{description}, qq|</div>|,
56 textfield( -name => 'search' ),
62 if ( my $search = param('search') ) {
64 print qq|<div id="results">|;
66 my $node = Search::Estraier::Node->new(
67 url => $config->{hyperestraier}->{masterurl} . '/node/' . $database,
71 my $cond = Search::Estraier::Condition->new;
72 $cond->set_phrase( $search );
73 my $nres = $node->search( $cond, 0 );
76 my $no_results = "No results for search '%s'";
77 printf qq|<div class="error">$no_results</div>|, $search;
79 my $results = "Got %d results for search '%s'";
80 printf qq|<div class="message">$results</div>|, $nres->hits, $search;
84 foreach my $i ( 1 .. $nres->doc_num ) {
85 my $rdoc = $nres->get_doc( $i - 1 );
87 foreach my $attr ( @attr ) {
88 my $v = $rdoc->attr( $attr );
89 if ( defined $v && $html_markup && ! $html_markup_skip->{$attr} ) {
90 eval "\$v = $html_markup->$attr( \$v );";
92 warn "disable html markup for $attr: $@";
93 $html_markup_skip->{$attr} = $@;
96 next unless defined $v;
97 print qq|<div><label>$attr</label><span class=$attr>$v</span></div>\n|;
106 dump_yaml( 'estraier', $estraier );
107 dump_yaml( 'db', $db );
108 dump_yaml( 'html_markup_skip', $html_markup_skip );