[Debtags-commits] [svn] r1482 -
central-database/branches/alioth/webfrontend
Enrico Zini
enrico at costa.debian.org
Sat Nov 12 14:47:37 UTC 2005
Author: enrico
Date: Sat Nov 12 14:47:36 2005
New Revision: 1482
Added:
central-database/branches/alioth/webfrontend/search.cgi
- copied, changed from r1472, central-database/branches/alioth/webfrontend/index.cgi
central-database/branches/alioth/webfrontend/searchtemplate.html
- copied, changed from r1481, central-database/branches/alioth/webfrontend/browsetemplate.html
Modified:
central-database/branches/alioth/webfrontend/Engine.pm
central-database/branches/alioth/webfrontend/main.css
Log:
Added smart search interface
Modified: central-database/branches/alioth/webfrontend/Engine.pm
==============================================================================
--- central-database/branches/alioth/webfrontend/Engine.pm (original)
+++ central-database/branches/alioth/webfrontend/Engine.pm Sat Nov 12 14:47:36 2005
@@ -371,7 +371,10 @@
# Check if a tag exists
-sub hasTag ($) { return exists $db->{tags}{$_[0]}; }
+sub hasTag ($) {
+ return undef if not defined $_[0];
+ return exists $db->{tags}{$_[0]};
+}
# Get the list of tags
sub tags () { return map { Engine::Tag->new($_) } keys %{$db->{tags}}; }
@@ -390,16 +393,23 @@
# &main::msg("Match %s with t:%s w:%s\n", $p->name(), join(', ', @{$parms->{tags}}), join(', ', @{$parms->{words}}));
- if (@{$parms->{tags}})
+ if ($parms->{tags} && @{$parms->{tags}})
{
return undef if not $p->hasTag(@{$parms->{tags}});
}
- for my $w (@{$parms->{words}})
+ if ($parms->{notags} && @{$parms->{notags}})
{
- return undef if
- index($p->name(), $w) == -1 &&
- index($p->sdesc(), $w) == -1 &&
- index($p->ldesc(), $w) == -1;
+ return undef if $p->hasTag(@{$parms->{notags}});
+ }
+ if ($parms->{words})
+ {
+ for my $w (@{$parms->{words}})
+ {
+ return undef if
+ index($p->name(), $w) == -1 &&
+ index($p->sdesc(), $w) == -1 &&
+ index($p->ldesc(), $w) == -1;
+ }
}
# &main::msg("OK %s\n", $p->name());
@@ -415,7 +425,7 @@
{
my ($parms) = @_;
- if (my @tags = @{$parms->{tags}})
+ if (my @tags = $parms->{tags} ? @{$parms->{tags}} : ())
{
# &main::msg("Tags search (%s)\n", join(', ',map{$_->name} @tags));
# Use the last tag as the beginning of the search, because it is usually
@@ -430,6 +440,29 @@
}
}
+# Return the $max_tags most frequent tags among the packages resulting for the
+# full-text search with the words given as arguments
+sub tagsForSearch ($@)
+{
+ my $max_tags = shift;
+ my $search = { words => [@_] };
+ my %tags;
+ for my $pkg (grep { matchPackage($search, $_) } packages())
+ {
+ for my $tag ($pkg->tags())
+ {
+ ++$tags{$tag->name()} if $tag->name() !~ /^special::/;
+ }
+ }
+ my @res = (sort { $tags{$b} <=> $tags{$a} } keys %tags)[0 .. $max_tags];
+ while (!findPackages({tags => [tag(@res)]}))
+ {
+ &main::msg("No entries with %s, trying to remove %s\n", join(',', at res), $res[$#res]);
+ pop @res;
+ }
+ return @res;
+}
+
##
## Update functions
##
Modified: central-database/branches/alioth/webfrontend/main.css
==============================================================================
--- central-database/branches/alioth/webfrontend/main.css (original)
+++ central-database/branches/alioth/webfrontend/main.css Sat Nov 12 14:47:36 2005
@@ -214,6 +214,35 @@
padding-right: 4pt;
}
+#wtags {
+width: 23%;
+float: left;
+padding: 0.5em;
+}
+#utags {
+width: 23%;
+float: left;
+padding: 0.5em;
+}
+#itags {
+width: 23%;
+float: left;
+padding: 0.5em;
+}
+#ttags {
+width: 23%;
+float: left;
+padding: 0.5em;
+}
+.sebuttons {
+font-size: small;
+}
+.sefacet {
+}
+.setag {
+padding-left: 1em;
+font-style: italic;
+}
#close {
padding-top: 2px;
Copied: central-database/branches/alioth/webfrontend/search.cgi (from r1472, central-database/branches/alioth/webfrontend/index.cgi)
==============================================================================
--- central-database/branches/alioth/webfrontend/index.cgi (original)
+++ central-database/branches/alioth/webfrontend/search.cgi Sat Nov 12 14:47:36 2005
@@ -1,12 +1,5 @@
#!/usr/bin/perl -w
-#
-# WARNING:
-#
-# This is not the cleanest code, and it really needs a rewrite
-# Use at your own risk!
-#
-
use strict;
use warnings;
use English;
@@ -22,7 +15,7 @@
##
#my $release="unstable";
-my $max_facets = 5;
+my $max_tags = 5;
##
## Generic functions
@@ -38,15 +31,6 @@
return $1;
}
-#sub array_index ($$);
-#sub array_index($$) { my($haystack,$needle) = @_;
-# for (my $i=0; $i <= $#$haystack; $i++) {
-# return $i if ($$haystack[$i] eq $needle);
-# }
-# return -1;
-#}
-
-
##
## Startup
##
@@ -56,204 +40,350 @@
# Load the template file
my $template = HTML::Template->new(
- filename => 'browsetemplate.html',
+ filename => 'searchtemplate.html',
die_on_bad_params => 0)
|| die "Could not open template";
#Web::timing("init");
# Parse input values
-my (@sel_tags, @sel_words);
-my %hidden_facets;
+my (@want_tags, @unwant_tags, @ignore_tags, @sel_words);
-for my $par (param())
+if (my $selwords = param('start'))
{
-# msg "Testing: %s\n", $par;
- if ($par =~ /^facet-/)
+# msg "Found: start->%s\n", $selwords;
+ if ($selwords =~ m/[A-Za-z0-9 ._-]+/)
+ {
+ @sel_words = grep { $_ } split(/\s+/, $selwords);
+ @want_tags = Engine::tagsForSearch($max_tags, @sel_words);
+ }
+} else {
+ if (my $selwords = param('oldstart'))
{
- my $tag = param($par);
- next if $tag eq ':NONE:';
-# msg "Found: %s->%s\n", $par, $tag;
- push @sel_tags, $tag if ($tag =~ /^[a-z0-9\-:]+$/);
- }
- elsif ($par eq 'tags')
- {
- my $seltags = param($par);
-# msg "Found: %s->%s\n", $par, $seltags;
- if ($seltags && $seltags =~ m/([a-z0-9\-:.,]+)/)
+# msg "Found: oldstart->%s\n", $selwords;
+ if ($selwords =~ m/[A-Za-z0-9 ._-]+/)
{
- push @sel_tags, split(/,/, $1);
-# } else {
-# $packages_limit = 0;
-# $subgroup_limit = 0;
+ @sel_words = grep { $_ } split(/\s+/, $selwords);
}
}
- elsif ($par eq 'words')
+ if (my $want = param('want'))
{
- my $selwords = param($par);
-# msg "Found: %s->%s\n", $par, $selwords;
- if ($selwords && $selwords =~ m/([a-z0-9\-:.,]+)/)
+# msg "Found: want->%s\n", $want;
+ if ($want =~ m/([a-z0-9\-:.,]+)/)
{
- @sel_words = split(/\s+/, $1);
+ @want_tags = split(/,/, $1);
}
}
- elsif ($par eq 'hf')
+ if (my $unwant = param('unwant'))
{
-# msg "HF: %s\n", param($par);
- for my $f (grep { Engine::hasFacet(sanitize($_)) } split(',', param($par)))
+# msg "Found: unwant->%s\n", $unwant;
+ if ($unwant =~ m/([a-z0-9\-:.,]+)/)
{
- $hidden_facets{$f} = 1;
-# msg "Accepted HF: %s\n", $f;
+ @unwant_tags = split(/,/, $1);
}
}
- elsif ($par =~ /^hf-(.+)/)
+ if (my $ignore = param('ignore'))
+ {
+# msg "Found: unwant->%s\n", $unwant;
+ if ($ignore =~ m/([a-z0-9\-:.,]+)/)
+ {
+ @ignore_tags = split(/,/, $1);
+ }
+ }
+ if (my $tag = param('addwa'))
+ {
+# msg "Found: addwa->%s\n", $tag;
+ push @want_tags, $tag if ($tag =~ /^[a-z0-9\-:]+$/);
+ @unwant_tags = grep { $_ ne $tag } @unwant_tags;
+ @ignore_tags = grep { $_ ne $tag } @ignore_tags;
+ }
+ if (my $tag = param('addun'))
+ {
+# msg "Found: addun->%s\n", $tag;
+ push @unwant_tags, $tag if ($tag =~ /^[a-z0-9\-:]+$/);
+ @want_tags = grep { $_ ne $tag } @want_tags;
+ @ignore_tags = grep { $_ ne $tag } @ignore_tags;
+ }
+ if (my $tag = param('addig'))
+ {
+# msg "Found: addig->%s\n", $tag;
+ push @ignore_tags, $tag if ($tag =~ /^[a-z0-9\-:]+$/);
+ @want_tags = grep { $_ ne $tag } @want_tags;
+ @unwant_tags = grep { $_ ne $tag } @unwant_tags;
+ }
+ if (my $tag = param('rmwa'))
{
-# msg "HF-%s: %s\n", $1, $1;
- if (Engine::hasFacet($1))
+# msg "Found: rmwa->%s\n", $tag;
+ if ($tag =~ /^[a-z0-9\-:]+$/)
{
- $hidden_facets{$1} = 1;
-# msg "Accepted HF: %s\n", $1;
+ @want_tags = grep { $_ ne $tag } @want_tags;
+ }
+ }
+ if (my $tag = param('rmun'))
+ {
+# msg "Found: rmun->%s\n", $tag;
+ if ($tag =~ /^[a-z0-9\-:]+$/)
+ {
+ @unwant_tags = grep { $_ ne $tag } @unwant_tags;
+ }
+ }
+ if (my $tag = param('rmig'))
+ {
+# msg "Found: rmig->%s\n", $tag;
+ if ($tag =~ /^[a-z0-9\-:]+$/)
+ {
+ @ignore_tags = grep { $_ ne $tag } @ignore_tags;
}
}
}
-if (param('uhf'))
+
+# Only take input tags once, and validate them
{
- %hidden_facets = ();
+ my %tags = map { $_ => 1 } @want_tags;
+ @want_tags = Engine::tag(sort keys %tags);
+
+ %tags = map { $_ => 1 } @unwant_tags;
+ @unwant_tags = Engine::tag(sort keys %tags);
+
+ %tags = map { $_ => 1 } @ignore_tags;
+ @ignore_tags = Engine::tag(sort keys %tags);
}
-# Only take input tags once, and validate them
+sub linkself (@)
{
- my %tags = map { $_ => 1 } @sel_tags;
- @sel_tags = Engine::tag(sort keys %tags);
+ return '?'.join('&',
+ 'oldstart='.uri_escape(join(' ', @sel_words)),
+ 'want='.join(',', map { uri_escape($_->name) } @want_tags),
+ 'unwant='.join(',', map { uri_escape($_->name) } @unwant_tags),
+ 'ignore='.join(',', map { uri_escape($_->name) } @ignore_tags),
+ @_);
}
#Web::timing("parms");
#msg "Tags: %s\n", join(', ', map { $_->name } @sel_tags);
-
##
-## Build navigation
+## Perform the search
##
-Navigation::build(@sel_tags, @sel_words);
+my %tags;
+my %blacklist = map { $_->name => 1 } (@want_tags, @unwant_tags, @ignore_tags);
+my @ht_pkgs;
+for my $p (Engine::findPackages({
+ tags => \@want_tags,
+ notags => \@unwant_tags,
+ }))
+{
+ for my $t ($p->tags())
+ {
+ ++$tags{$t->name()} if not exists $blacklist{$t->name()} and $t->name() !~ /^special::/;
+ }
+ push @ht_pkgs, {
+ NAME => $p->name(),
+ SDESC => $p->sdesc(),
+ LDESC => $p->ldesc(),
+ URL => "edit.cgi?pkg=".uri_escape($p->name()),
+ };
+}
+
+my @top_tags = Engine::tag((sort { $tags{$b} <=> $tags{$a} } keys %tags)[0 .. $max_tags]);
+
+#Navigation::build(@sel_tags, @sel_words);
#Web::timing("nav");
# Select the facets we want to view
-my @ht_facets;
-my $i = 0;
-foreach (@Navigation::ht_facets)
-{
- last if $i >= $max_facets;
- next if not $_->{SELCOUNT} and $hidden_facets{$_->{NAME}};
- push(@ht_facets, $_);
- $i++;
-}
+#my @ht_facets;
+#my $i = 0;
+#foreach (@Navigation::ht_facets)
+#{
+# last if $i >= $max_facets;
+# next if not $_->{SELCOUNT} and $hidden_facets{$_->{NAME}};
+# push(@ht_facets, $_);
+# $i++;
+#}
+my @ht_wtags;
+my @ht_utags;
+my @ht_itags;
+my @ht_ttags;
+
+foreach my $t (@want_tags)
+{
+ # Skip the empty tags
+ #next if not exists $tag_counts{$t->name};
+
+ push @ht_wtags, {
+ NAME => $t->name,
+ FNAME => $t->facet()->name(),
+ FSDESC => $t->facet()->sdesc(),
+ FLDESC => $t->facet()->ldesc(),
+ SDESC => $t->sdesc,
+ LDESC => $t->ldesc,
+# COUNT => $tag_counts{$t->name},
+ REMURL => linkself("rmwa=".uri_escape($t->name)),
+ IGURL => linkself("addig=".uri_escape($t->name)),
+ UNWURL => linkself("addun=".uri_escape($t->name)),
+ };
+}
+foreach my $t (@unwant_tags)
+{
+ # Skip the empty tags
+ #next if not exists $tag_counts{$t->name};
+
+ push @ht_utags, {
+ NAME => $t->name,
+ FNAME => $t->facet()->name(),
+ FSDESC => $t->facet()->sdesc(),
+ FLDESC => $t->facet()->ldesc(),
+ SDESC => $t->sdesc,
+ LDESC => $t->ldesc,
+# COUNT => $tag_counts{$t->name},
+ REMURL => linkself("rmun=".uri_escape($t->name)),
+ IGURL => linkself("addig=".uri_escape($t->name)),
+ WAURL => linkself("addwa=".uri_escape($t->name)),
+ };
+}
+foreach my $t (@ignore_tags)
+{
+ # Skip the empty tags
+ #next if not exists $tag_counts{$t->name};
+
+ push @ht_itags, {
+ NAME => $t->name,
+ FNAME => $t->facet()->name(),
+ FSDESC => $t->facet()->sdesc(),
+ FLDESC => $t->facet()->ldesc(),
+ SDESC => $t->sdesc,
+ LDESC => $t->ldesc,
+# COUNT => $tag_counts{$t->name},
+ REMURL => linkself("rmig=".uri_escape($t->name)),
+ WAURL => linkself("addwa=".uri_escape($t->name)),
+ UNWURL => linkself("addun=".uri_escape($t->name)),
+ };
+}
+foreach my $t (@top_tags)
+{
+ # Skip the empty tags
+ #next if not exists $tag_counts{$t->name};
+
+ push @ht_ttags, {
+ NAME => $t->name,
+ FNAME => $t->facet()->name(),
+ FSDESC => $t->facet()->sdesc(),
+ FLDESC => $t->facet()->ldesc(),
+ SDESC => $t->sdesc,
+ LDESC => $t->ldesc,
+# COUNT => $tag_counts{$t->name},
+ WAURL => linkself("addwa=".uri_escape($t->name)),
+ UNWURL => linkself("addun=".uri_escape($t->name)),
+ IGURL => linkself("addig=".uri_escape($t->name)),
+ };
+}
##
## Compile template structures
##
-$template->param(CURTAGS => join(',', map{$_->name} @sel_tags));
$template->param(CURWORDS => join(' ', at sel_words));
-$template->param(CURHF => join(',',keys %hidden_facets));
-
-$template->param(FACETS => \@ht_facets);
-$template->param(CURPKGS => \@Navigation::ht_curpkgs);
-$template->param(SUBPKGS => \@Navigation::ht_subpkgs);
-
-my $count_hf = keys %hidden_facets;
-if ($count_hf == 1)
-{
- $template->param(UHF_TEXT => "Unhide one hidden facet");
-} elsif ($count_hf > 1) {
- $template->param(UHF_TEXT => "Unhide $count_hf hidden facets");
-}
-
-my $facet_intro;
-my $c = scalar(keys %Navigation::tag_counts);
-if ($c == 0)
-{
- $facet_intro = "There is <b>no</b> tag ";
-} elsif ($c == 1) {
- $facet_intro = "There is <b>one</b> tag ";
-} else {
- $facet_intro = "There are <b>$c</b> tags ";
-}
-if ($Navigation::count_unselected == 0)
-{
- $facet_intro .= "currently selected."
-} else {
- $c = scalar keys %Navigation::facet_counts;
- if ($c == 1)
- {
- $facet_intro .= "in <b>one</b> facet. ";
- } else {
- $facet_intro .= sprintf "in <b>%d</b> facets. ", $c;
- }
- $c = scalar(@sel_tags);
- if ($c == 0)
- {
- $facet_intro .= "<b>None</b> is currently selected.";
- }
- elsif ($c == 1)
- {
- $facet_intro .= "<b>One</b> is currently selected.";
- } else {
- $facet_intro .= sprintf "<b>%d</b> are currently selected.", $c;
- }
-}
-my $cur_facets = scalar(@ht_facets);
-if ($cur_facets > 0)
-{
- my $count_active_facets = scalar(@Navigation::ht_facets);
- if ($cur_facets == 1)
- {
- $facet_intro .= " <b>One</b> facet out of <b>$count_active_facets</b> is currently displayed.";
- } else {
- $facet_intro .= " <b>$cur_facets</b> facets out of <b>$count_active_facets</b> are currently displayed.";
- }
-}
-
-$template->param(FACET_INTRO => $facet_intro);
-my $curpkgs_intro;
-my $curpkgs_also;
-my $cur = scalar(@Navigation::ht_curpkgs);
-my $sub = scalar(@Navigation::ht_subpkgs);
-if ($cur == 0)
-{
- $curpkgs_intro = "There is <b>no</b> package in this group. ";
- $curpkgs_also = '';
-} elsif ($cur == 1) {
- $curpkgs_intro = "There is <b>one</b> package in this group. ";
- $curpkgs_also = ' also';
-} else {
- $curpkgs_intro = "There are <b>$cur</b> packages in this group. ";
- $curpkgs_also = ' also';
-}
-if ($sub == 0)
-{
- $curpkgs_intro .= "More packages can be found by further refining the selection."
-} else {
- my $cp_verb;
- if ($sub == 1) {
- $curpkgs_intro .= "<b>One</b> package from ";
- $cp_verb = "is";
- } else {
- $curpkgs_intro .= "<b>$sub</b> packages from ";
- $cp_verb = "are";
- }
- my $subgroup_count = $Navigation::subgroup_count;
- if ($subgroup_count == 1) {
- $curpkgs_intro .= "<b>one</b> subgroup $cp_verb$curpkgs_also displayed below.";
- } else {
- $curpkgs_intro .= "<b>$subgroup_count</b> subgroups $cp_verb$curpkgs_also displayed below.";
- }
-}
-$template->param(PKGS_INTRO => $curpkgs_intro);
+$template->param(WTAGS => \@ht_wtags);
+$template->param(UTAGS => \@ht_utags);
+$template->param(ITAGS => \@ht_itags);
+$template->param(TTAGS => \@ht_ttags);
+$template->param(PKGS => \@ht_pkgs);
+
+#my $count_hf = keys %hidden_facets;
+#if ($count_hf == 1)
+#{
+# $template->param(UHF_TEXT => "Unhide one hidden facet");
+#} elsif ($count_hf > 1) {
+# $template->param(UHF_TEXT => "Unhide $count_hf hidden facets");
+#}
+#
+#my $facet_intro;
+#my $c = scalar(keys %Navigation::tag_counts);
+#if ($c == 0)
+#{
+# $facet_intro = "There is <b>no</b> tag ";
+#} elsif ($c == 1) {
+# $facet_intro = "There is <b>one</b> tag ";
+#} else {
+# $facet_intro = "There are <b>$c</b> tags ";
+#}
+#if ($Navigation::count_unselected == 0)
+#{
+# $facet_intro .= "currently selected."
+#} else {
+# $c = scalar keys %Navigation::facet_counts;
+# if ($c == 1)
+# {
+# $facet_intro .= "in <b>one</b> facet. ";
+# } else {
+# $facet_intro .= sprintf "in <b>%d</b> facets. ", $c;
+# }
+# $c = scalar(@sel_tags);
+# if ($c == 0)
+# {
+# $facet_intro .= "<b>None</b> is currently selected.";
+# }
+# elsif ($c == 1)
+# {
+# $facet_intro .= "<b>One</b> is currently selected.";
+# } else {
+# $facet_intro .= sprintf "<b>%d</b> are currently selected.", $c;
+# }
+#}
+#my $cur_facets = scalar(@ht_facets);
+#if ($cur_facets > 0)
+#{
+# my $count_active_facets = scalar(@Navigation::ht_facets);
+# if ($cur_facets == 1)
+# {
+# $facet_intro .= " <b>One</b> facet out of <b>$count_active_facets</b> is currently displayed.";
+# } else {
+# $facet_intro .= " <b>$cur_facets</b> facets out of <b>$count_active_facets</b> are currently displayed.";
+# }
+#}
+#
+#$template->param(FACET_INTRO => $facet_intro);
+#
+#my $curpkgs_intro;
+#my $curpkgs_also;
+#my $cur = scalar(@Navigation::ht_curpkgs);
+#my $sub = scalar(@Navigation::ht_subpkgs);
+#if ($cur == 0)
+#{
+# $curpkgs_intro = "There is <b>no</b> package in this group. ";
+# $curpkgs_also = '';
+#} elsif ($cur == 1) {
+# $curpkgs_intro = "There is <b>one</b> package in this group. ";
+# $curpkgs_also = ' also';
+#} else {
+# $curpkgs_intro = "There are <b>$cur</b> packages in this group. ";
+# $curpkgs_also = ' also';
+#}
+#if ($sub == 0)
+#{
+# $curpkgs_intro .= "More packages can be found by further refining the selection."
+#} else {
+# my $cp_verb;
+# if ($sub == 1) {
+# $curpkgs_intro .= "<b>One</b> package from ";
+# $cp_verb = "is";
+# } else {
+# $curpkgs_intro .= "<b>$sub</b> packages from ";
+# $cp_verb = "are";
+# }
+# my $subgroup_count = $Navigation::subgroup_count;
+# if ($subgroup_count == 1) {
+# $curpkgs_intro .= "<b>one</b> subgroup $cp_verb$curpkgs_also displayed below.";
+# } else {
+# $curpkgs_intro .= "<b>$subgroup_count</b> subgroups $cp_verb$curpkgs_also displayed below.";
+# }
+#}
+#$template->param(PKGS_INTRO => $curpkgs_intro);
if ($Web::log)
{
Copied: central-database/branches/alioth/webfrontend/searchtemplate.html (from r1481, central-database/branches/alioth/webfrontend/browsetemplate.html)
==============================================================================
--- central-database/branches/alioth/webfrontend/browsetemplate.html (original)
+++ central-database/branches/alioth/webfrontend/searchtemplate.html Sat Nov 12 14:47:36 2005
@@ -14,12 +14,10 @@
<form name="search" method="get">
<div id="search">
- Search: <input type="text" name="words" value='<tmpl_var name="CURWORDS">'>
- <input type="hidden" name="tags" value='<tmpl_var name="CURTAGS">'>
- <input type="hidden" name="hf" value='<tmpl_var name="CURHF">'>
+ New search: <input type="text" name="start" value='<tmpl_var name="CURWORDS">'>
</div>
- <h1><a href="index.cgi">Debian Package Browser</a></h1>
+ <h1><a href="search.cgi">Debtags-Enhanced Search</a></h1>
<div id="log">
<TMPL_VAR NAME="LOG">
@@ -32,68 +30,121 @@
<a href="http://debtags.alioth.debian.org/">Debtags Homepage</a> at <a href="http://alioth.debian.org/">Alioth</a>.</p>
</div>
- <div id="subgroups">
- <div class="intro">
- <p><tmpl_var name="FACET_INTRO"></p>
- <tmpl_if name="UHF_TEXT">
- <input type='submit' name='uhf' value='<tmpl_var name="UHF_text">'>
- </tmpl_if>
- </div>
- <!--div class="intro">
- <p>There is no further refining and all matching packages are listed
- below.</p>
- </div-->
- <tmpl_if name="FACETS">
- <div id="facets">
- <table>
- <tmpl_loop name="FACETS">
- <tr>
- <td class="tools">
- [<tmpl_var name="NAME">]
- <br />
- <input type="submit" name='hf-<tmpl_var name="NAME">' value='hide'>
- </td>
- <td class="body">
- <div class="facet">
- <div class="facet-title">
- <tmpl_var name="SDESC"> (<tmpl_var name="COUNT">):
- </div>
- <div class="facet-body">
- <ul>
- <tmpl_loop name="SEEN">
- <li>
- <tmpl_var name="SDESC"> (<tmpl_var name="COUNT">)
- <a href='<tmpl_var name="REMURL">'>[remove]</a>
- </li>
- </tmpl_loop>
- <tmpl_if name="TAGS">
- <li><select name="facet-<tmpl_var name="NAME">" onChange='this.form.submit()'>
- <option value=":NONE:">Add one
- <tmpl_loop name="TAGS">
- <option value='<tmpl_var name="NAME">'><tmpl_var name="SDESC">
- </tmpl_loop>
- </select></li>
- </tmpl_if>
- </ul>
- </div>
- </div>
- </tr>
+ <div id="wtags">
+ <p>Wanted tags:
+ <tmpl_if name="WTAGS">
+ </p>
+ <ul>
+ <tmpl_loop name="WTAGS">
+ <li>
+ <div class="sebuttons">
+ <a href='<tmpl_var name="UNWURL">'>[Don't want]</a>
+ <a href='<tmpl_var name="IGURL">'>[Ignore]</a>
+ <a href='<tmpl_var name="REMURL">'>[Remove]</a>
+ </div>
+ <div class="sefacet">
+ <span title="<tmpl_var name='FNAME'>: <tmpl_var name='FLDESC'>"><tmpl_var name="FSDESC"></span>:
+ </div>
+ <div class="setag">
+ <span title="<tmpl_var name='NAME'>: <tmpl_var name='LDESC'>"><tmpl_var name="SDESC"></span> <!-- tmpl_var name="COUNT" -->
+ </div>
+ </li>
</tmpl_loop>
- </table>
- </div>
+ </ul>
+ <tmpl_else>
+ <b>none</b></p>
</tmpl_if>
- <div style="clear: both"></div>
- </div>
</div>
+ <div id="utags">
+ <p>Unwanted tags:
+ <tmpl_if name="UTAGS">
+ </p>
+ <ul>
+ <tmpl_loop name="UTAGS">
+ <li>
+ <div class="sebuttons">
+ <a href='<tmpl_var name="WAURL">'>[Want]</a>
+ <a href='<tmpl_var name="IGURL">'>[Ignore]</a>
+ <a href='<tmpl_var name="REMURL">'>[Remove]</a>
+ </div>
+ <div class="sefacet">
+ <span title="<tmpl_var name='FNAME'>: <tmpl_var name='FLDESC'>"><tmpl_var name="FSDESC"></span>:
+ </div>
+ <div class="setag">
+ <span title="<tmpl_var name='NAME'>: <tmpl_var name='LDESC'>"><tmpl_var name="SDESC"></span> <!-- tmpl_var name="COUNT" -->
+ </div>
+ </li>
+ </tmpl_loop>
+ </ul>
+ <tmpl_else>
+ <b>none</b></p>
+ </tmpl_if>
+ </div>
+
+ <div id="itags">
+ <p>Ignored tags:
+ <tmpl_if name="ITAGS">
+ </p>
+ <ul>
+ <tmpl_loop name="ITAGS">
+ <li>
+ <div class="sebuttons">
+ <a href='<tmpl_var name="WAURL">'>[Want]</a>
+ <a href='<tmpl_var name="UNWURL">'>[Don't want]</a>
+ <a href='<tmpl_var name="REMURL">'>[Remove]</a>
+ </div>
+ <div class="sefacet">
+ <span title="<tmpl_var name='FNAME'>: <tmpl_var name='FLDESC'>"><tmpl_var name="FSDESC"></span>:
+ </div>
+ <div class="setag">
+ <span title="<tmpl_var name='NAME'>: <tmpl_var name='LDESC'>"><tmpl_var name="SDESC"></span> <!-- tmpl_var name="COUNT" -->
+ </div>
+ </li>
+ </tmpl_loop>
+ </ul>
+ <tmpl_else>
+ <b>none</b></p>
+ </tmpl_if>
+ </div>
+
+ <div id="ttags">
+ <p>Top tags in the result:
+ <tmpl_if name="TTAGS">
+ </p>
+ <ul>
+ <tmpl_loop name="TTAGS">
+ <li>
+ <div class="sebuttons">
+ <a href='<tmpl_var name="WAURL">'>[Want]</a>
+ <a href='<tmpl_var name="UNWURL">'>[Don't want]</a>
+ <a href='<tmpl_var name="IGURL">'>[Ignore]</a>
+ </div>
+ <div class="sefacet">
+ <span title="<tmpl_var name='FNAME'>: <tmpl_var name='FLDESC'>"><tmpl_var name="FSDESC"></span>:
+ </div>
+ <div class="setag">
+ <span title="<tmpl_var name='NAME'>: <tmpl_var name='LDESC'>"><tmpl_var name="SDESC"></span> <!-- tmpl_var name="COUNT" -->
+ </div>
+ </li>
+ </tmpl_loop>
+ </ul>
+ <tmpl_else>
+ <b>none</b></p>
+ </tmpl_if>
+ </div>
+
+
+ <div style="clear: both"></div>
+
<div id="packages">
<div class="intro">
<p><tmpl_var name="PKGS_INTRO"></p>
</div>
- <tmpl_if name="CURPKGS">
+ <tmpl_if name="PKGS">
<div id="curpkgs">
- <tmpl_loop name="CURPKGS">
+ <tmpl_loop name="PKGS">
<a class="pkg" href='<tmpl_var name="URL">'><tmpl_var name="NAME"></a>
- <tmpl_var name="SDESC"><br />
</tmpl_loop>
More information about the Debtags-commits
mailing list