]> mj.ucw.cz Git - pciids.git/blobdiff - PciIds/Html/Jump.pm
Parent is notified about new item
[pciids.git] / PciIds / Html / Jump.pm
index 7655c711205f5ad50e74763566c6291a07098346..9b650f258d1f84c1cfadb4bcea4b44816a722339 100644 (file)
@@ -5,6 +5,7 @@ use base 'Exporter';
 use PciIds::Html::Forms;
 use PciIds::Html::Users;
 use PciIds::Html::Util;
+use PciIds::Html::Format;
 use PciIds::Address;
 use Apache2::Const qw(:common :http);
 
@@ -33,11 +34,11 @@ sub itemExists( $$ ) {
 sub tryDirect( $$$$ ) {
        my( $req, $args, $tables, $search ) = @_;
        my $address = PciIds::Address::new( $req->uri() );
-       #Is it absolute address?
        $search =~ s/:/\//g;
        $search =~ s/ //g;
        my( $top ) = $address->get() =~ /^([^\/]+)/;
        $search =~ s/^\//$top\//;
+       #Is it absolute address?
        my $saddr = PciIds::Address::new( $search );
        return redirect( $req, $args, $saddr->get() ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
        while( defined $address ) {
@@ -55,13 +56,36 @@ sub jump( $$$$ ) {
        my $idOnly = $search =~ s/^#//;
        my $direct = tryDirect( $req, $args, $tables, $search );
        return $direct if defined $direct;
-       unless( $idOnly ) {#Try extended search
-
+       my $address = PciIds::Address::new( $req->uri() );
+       unless( $idOnly || length $search < 3 ) {#Try extended search
+               my( $prefix ) = $address->get() =~ /^([^\/]+)/;
+               $prefix = undef if $search =~ s/^\*//;
+               my $result = $tables->searchName( $search, $prefix );
+               if( @{$result} ) {
+                       genHtmlHead( $req, 'Search results', undef );
+                       print "<div class='top'>\n";
+                       print "<h1>Search results</h1>\n";
+                       genMenu( $req, $address, $args, $auth, [ [ 'Help', 'help', 'jump' ], [ '', 'jump' ] ] );
+                       print "<div class='clear'></div>\n";
+                       print "</div>\n";
+                       genPath( $req, $address, 1 );
+                       print "<h2>Found items</h2>\n";
+                       genTableHead( 'found', [ 'ID', 'Name', 'Parent' ], [] );
+                       my $prefix = 'http://'.$req->hostname().'/'.( ( !defined $args->{'action'} || $args->{'action'} eq '' || $args->{'action'} eq 'list' ) ? 'read/' : 'mods/' );
+                       my $suffix = buildArgs( $args );
+                       htmlFormatTable( $result, 3, [], [ sub {
+                               my $addr = shift;
+                               my $address = PciIds::Address::new( $addr );
+                               return "<a href='$prefix".$address->get()."$suffix'>".encode( $address->fullPretty() )."</a>";
+                       } ], sub { 1; }, sub { ' class="item"'; } );
+                       genTableTail();
+                       genHtmlTail();
+                       return OK;
+               }
        }
        genHtmlHead( $req, 'No matches', undef );
        print "<div class='top'>\n";
        print '<h1>No matches</h1>';
-       my $address = PciIds::Address::new( $req->uri() );
        genMenu( $req, $address, $args, $auth, [ [ 'Help', 'help', 'jump' ] ] );
        print "<div class='clear'></div>\n";
        print "</div\n>";