diff options
-rw-r--r-- | data/lang.txt | 183 | ||||
-rw-r--r-- | data/style.css | 4 | ||||
-rw-r--r-- | lib/VNDB/DB/Traits.pm | 8 | ||||
-rw-r--r-- | lib/VNDB/Handler/Tags.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Handler/Traits.pm | 146 | ||||
-rw-r--r-- | lib/VNDB/Util/CommonHTML.pm | 1 | ||||
-rw-r--r-- | lib/VNDB/Util/LayoutHTML.pm | 1 |
7 files changed, 330 insertions, 15 deletions
diff --git a/data/lang.txt b/data/lang.txt index 3674bd2a..3d488d2a 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -1580,6 +1580,13 @@ cs : Tagy hu : Címkék nl : +:_menu_traits +en : Traits +ru*: +cs*: +hu*: +nl : Kenmerken + :_menu_users en : Users ru : Пользователи @@ -2019,6 +2026,13 @@ cs : Tagy hu : Címkék nl : +:_searchbox_traits +en : Traits +ru*: +cs*: +hu*: +nl : Kenmerken + :_searchbox_users en : Users ru : Пользователи @@ -3974,13 +3988,6 @@ cs : Závislé tagy hu : Alcímkék nl : Subtags -:_tagp_tree -en : Tag tree -ru : Древо тега -cs : Strom tagů -hu : Címke fa -nl : Taglijst - :_tagp_moretags en : [_1] more [quant,_1,tag,tags] ru : ещё [_1] [quant,_1,тег,тега,тегов] @@ -4675,6 +4682,13 @@ cs : Hledat tag hu : Címkék keresése nl : Zoek tags +:_tagidx_tree +en : Tag tree +ru : Древо тега +cs : Strom tagů +hu : Címke fa +nl : Taglijst + :_tagidx_browseall en : Browse all tags ru : Обзор всех тегов @@ -4815,7 +4829,7 @@ hu*: nl : nog [_1] [quant,_1,kenmerk,kenmerken] -# Trait add/edit form (/i+/edit, /i+/add, /i/add) +# Trait add/edit form (/i+/edit, /i+/add, /i/new) :_traite_title_add en : Add child trait to [_1] @@ -4942,6 +4956,159 @@ hu*: nl : Kommagescheiden lijst van hoofdkenmerken. +# Plain trait browser (/i/list) + +:_traitb_title +en : Browse traits +ru*: +cs*: +hu*: +nl : Browse kenmerken + +:_traitb_state-1 +en : All +ru : Все +cs : Všechny +hu : Mind +nl : Alle + +:_traitb_state0 +en : Awaiting moderation +ru : Ожидающие модерации +cs : Čekající na schválení +hu : Moderálásra vár +nl : Wachtend op goedkeuring + +:_traitb_state1 +en : Deleted +ru : Удалённые +cs : Smazané +hu : Törölve +nl : Verwijderd + +:_traitb_state2 +en : Accepted +ru : Одобренные +cs : Přijaté +hu : Elfogadva +nl : Geaccepteerd + +:_traitb_noresults +en : No results found +ru : Совпадений не найдено +cs : Nenalezeny žádné výsledky +hu : Keresés sikertelen +nl : Geen resultaten gevonden + +:_traitb_col_added +en : Created +ru : Созданы +cs : Vytvořené +hu : Létrehozva +nl : Aangemaakt + +:_traitb_col_name +en : Trait +ru*: +cs*: +hu*: +nl : Kenmerk + +:_traitb_note_awaiting +en : awaiting moderation +ru : ожидает модерации +cs : čeká na schválení +hu : moderálásra vár +nl : wachtend op goedkeuring + +:_traitb_note_del +en : deleted +ru : удалён +cs : smazán +hu : törölve +nl : verwijderd + + +# Trait index (/g) + +:_traiti_title +en : Trait index +ru*: +cs*: +hu*: +nl : Kenmerkenindex + +:_traiti_create +en : Create new trait +ru*: +cs*: +hu*: +nl : Nieuw kenmerk + +:_traiti_search +en : Search traits +ru*: +cs*: +hu*: +nl : Zoek kenmerken + +:_traiti_tree +en : Trait tree +ru*: +cs*: +hu*: +nl : Kenmerkenlijst + +:_traiti_browseall +en : Browse all traits +ru*: +cs*: +hu*: +nl : Browse alle kenmerken + +:_traiti_recent +en : Recently added +ru : Недавно добавлены +cs : Poslední přidané +hu : Nemrég hozzáadva +nl : Recentelijk toegevoegd + +:_traiti_popular +en : Popular traits +ru*: +cs*: +hu*: +nl : Populaire kenmerken + +:_traiti_queue +en : Awaiting moderation +ru : Ожидают модерации +cs : Čekající na schválení +hu : Moderálásra vár +nl : Wacht op goedkeuring + +:_traiti_queue_empty +en : Moderation queue empty! yay! +ru : В очереди модерации пусто! Няа! +cs : Fronta ke schválení prázdná! Jej! +hu : Moderálásra váró lista üres! Hurrá! +nl : Alles is gemodereerd! yay! + +:_traiti_queue_link +en : Moderation queue +ru : Очередь модерации +cs : Fronta ke schválení +hu : Moderálásra váró lista +nl : Moderatiewachtrij + +:_traiti_denied +en : Denied traits +ru*: +cs*: +hu*: +nl : Geweigerde kenmerken + + ############################################################################# diff --git a/data/style.css b/data/style.css index f5445c2a..99b0f9e6 100644 --- a/data/style.css +++ b/data/style.css @@ -459,7 +459,7 @@ p#searchtabs a:hover, p#searchtabs a.sel { padding: 1px 5px 2px 5px; background: $secbg$ url($_boxbg$) repeat; } -#q { width: 350px } +#q { width: 450px } /* history browser */ div.history table { table-layout: fixed } @@ -944,7 +944,7 @@ div.uposts td.tc4 b { margin-left: 10px } .tagvnlist .tc4 { padding: 0; } .tagvnlist .tc6 { text-align: right; padding-right: 10px; } -/***** Tag list *****/ +/***** Tag/trait list (/g/list, /i/list) *****/ .browse.taglist .tc1 { width: 80px } diff --git a/lib/VNDB/DB/Traits.pm b/lib/VNDB/DB/Traits.pm index 8b9849ed..d30477c6 100644 --- a/lib/VNDB/DB/Traits.pm +++ b/lib/VNDB/DB/Traits.pm @@ -25,11 +25,19 @@ sub dbTraitGet { @_, ); + $o{search} =~ s/%//g if $o{search}; + my %where = ( $o{id} ? ('t.id = ?' => $o{id}) : (), $o{noid} ? ('t.id <> ?' => $o{noid}) : (), $o{name} ? ( 't.id = (SELECT id FROM traits LEFT JOIN traits_aliases ON id = trait WHERE lower(name) = ? OR lower(alias) = ? LIMIT 1)' => [ lc $o{name}, lc $o{name} ]) : (), + defined $o{state} && $o{state} != -1 ? ( + 't.state = ?' => $o{state} ) : (), + !defined $o{state} && !$o{id} && !$o{name} ? ( + 't.state = 2' => 1 ) : (), + $o{search} ? ( + 't.id IN (SELECT id FROM traits LEFT JOIN traits_aliases ON id = trait WHERE name ILIKE ? OR alias ILIKE ?)' => [ "%$o{search}%", "%$o{search}%" ] ) : (), ); my @select = ( diff --git a/lib/VNDB/Handler/Tags.pm b/lib/VNDB/Handler/Tags.pm index 6e48cc26..6ddac04d 100644 --- a/lib/VNDB/Handler/Tags.pm +++ b/lib/VNDB/Handler/Tags.pm @@ -625,7 +625,7 @@ sub tagindex { end; my $t = $self->dbTagTree(0, 2); - childtags($self, mt('_tagp_tree'), 'g', {childs => $t}); + childtags($self, mt('_tagidx_tree'), 'g', {childs => $t}); table class => 'mainbox threelayout'; Tr; diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm index d505b6c7..7f79aa27 100644 --- a/lib/VNDB/Handler/Traits.pm +++ b/lib/VNDB/Handler/Traits.pm @@ -8,10 +8,12 @@ use VNDB::Func; TUWF::register( - qr{i([1-9]\d*)}, \&traitpage, - qr{i([1-9]\d*)/(edit)}, \&traitedit, - qr{i([1-9]\d*)/(add)}, \&traitedit, - qr{i/new}, \&traitedit, + qr{i([1-9]\d*)}, \&traitpage, + qr{i([1-9]\d*)/(edit)}, \&traitedit, + qr{i([1-9]\d*)/(add)}, \&traitedit, + qr{i/new}, \&traitedit, + qr{i/list}, \&traitlist, + qr{i}, \&traitindex, ); @@ -175,5 +177,141 @@ sub traitedit { } +sub traitlist { + my $self = shift; + + my $f = $self->formValidate( + { get => 's', required => 0, default => 'name', enum => ['added', 'name'] }, + { get => 'o', required => 0, default => 'a', enum => ['a', 'd'] }, + { get => 'p', required => 0, default => 1, template => 'int' }, + { get => 't', required => 0, default => -1, enum => [ -1..2 ] }, + { get => 'q', required => 0, default => '' }, + ); + return $self->resNotFound if $f->{_err}; + + my($t, $np) = $self->dbTraitGet( + sort => $f->{s}, reverse => $f->{o} eq 'd', + page => $f->{p}, + results => 50, + state => $f->{t}, + search => $f->{q} + ); + + $self->htmlHeader(title => mt '_traitb_title'); + div class => 'mainbox'; + h1 mt '_traitb_title'; + form action => '/i/list', 'accept-charset' => 'UTF-8', method => 'get'; + input type => 'hidden', name => 't', value => $f->{t}; + $self->htmlSearchBox('i', $f->{q}); + end; + p class => 'browseopts'; + a href => "/i/list?q=$f->{q};t=-1", $f->{t} == -1 ? (class => 'optselected') : (), mt '_traitb_state-1'; + a href => "/i/list?q=$f->{q};t=0", $f->{t} == 0 ? (class => 'optselected') : (), mt '_traitb_state0'; + a href => "/i/list?q=$f->{q};t=1", $f->{t} == 1 ? (class => 'optselected') : (), mt '_traitb_state1'; + a href => "/i/list?q=$f->{q};t=2", $f->{t} == 2 ? (class => 'optselected') : (), mt '_traitb_state2'; + end; + if(!@$t) { + p mt '_traitb_noresults'; + } + end 'div'; + if(@$t) { + $self->htmlBrowse( + class => 'taglist', + options => $f, + nextpage => $np, + items => $t, + pageurl => "/i/list?t=$f->{t};q=$f->{q};s=$f->{s};o=$f->{o}", + sorturl => "/i/list?t=$f->{t};q=$f->{q}", + header => [ + [ mt('_traitb_col_added'), 'added' ], + [ mt('_traitb_col_name'), 'name' ], + ], + row => sub { + my($s, $n, $l) = @_; + Tr $n % 2 ? (class => 'odd') : (); + td class => 'tc1', $self->{l10n}->age($l->{added}); + td class => 'tc3'; + a href => "/i$l->{id}", $l->{name}; + if($f->{t} == -1) { + b class => 'grayedout', ' '.mt '_traitb_note_awaiting' if $l->{state} == 0; + b class => 'grayedout', ' '.mt '_traitb_note_del' if $l->{state} == 1; + } + end; + end 'tr'; + } + ); + } + $self->htmlFooter; +} + + +sub traitindex { + my $self = shift; + + $self->htmlHeader(title => mt '_traiti_title'); + div class => 'mainbox'; + a class => 'addnew', href => "/i/new", mt '_traiti_create' if $self->authCan('charedit'); + h1 mt '_traiti_search'; + form action => '/i/list', 'accept-charset' => 'UTF-8', method => 'get'; + $self->htmlSearchBox('i', ''); + end; + end; + + my $t = $self->dbTraitTree(0, 2); + childtags($self, mt('_traiti_tree'), 'i', {childs => $t}); + + table class => 'mainbox threelayout'; + Tr; + + # Recently added + td; + a class => 'right', href => '/i/list', mt '_traiti_browseall'; + my $r = $self->dbTraitGet(sort => 'added', reverse => 1, results => 10); + h1 mt '_traiti_recent'; + ul; + for (@$r) { + li; + txt $self->{l10n}->age($_->{added}); + txt ' '; + a href => "/i$_->{id}", $_->{name}; + end; + } + end; + end; + + # Popular + td; + h1 mt '_traiti_popular'; + p 'TODO'; + end; + + # Moderation queue + td; + h1 mt '_traiti_queue'; + $r = $self->dbTraitGet(state => 0, sort => 'added', reverse => 1, results => 10); + ul; + li mt '_traiti_queue_empty' if !@$r; + for (@$r) { + li; + txt $self->{l10n}->age($_->{added}); + txt ' '; + a href => "/i$_->{id}", $_->{name}; + end; + } + li; + br; + a href => '/i/list?t=0;o=d;s=added', mt '_traiti_queue_link'; + txt ' - '; + a href => '/i/list?t=1;o=d;s=added', mt '_traiti_denied'; + end; + end; + end; + + end 'tr'; + end 'table'; + $self->htmlFooter; +} + + 1; diff --git a/lib/VNDB/Util/CommonHTML.pm b/lib/VNDB/Util/CommonHTML.pm index ce086e55..ba03aeac 100644 --- a/lib/VNDB/Util/CommonHTML.pm +++ b/lib/VNDB/Util/CommonHTML.pm @@ -405,6 +405,7 @@ sub htmlSearchBox { a href => '/r', $sel eq 'r' ? (class => 'sel') : (), mt '_searchbox_releases'; a href => '/p/all', $sel eq 'p' ? (class => 'sel') : (), mt '_searchbox_producers'; a href => '/g', $sel eq 'g' ? (class => 'sel') : (), mt '_searchbox_tags'; + a href => '/i', $sel eq 'i' ? (class => 'sel') : (), mt '_searchbox_traits'; a href => '/u/all', $sel eq 'u' ? (class => 'sel') : (), mt '_searchbox_users'; end; input type => 'text', name => 'q', id => 'q', class => 'text', value => $v; diff --git a/lib/VNDB/Util/LayoutHTML.pm b/lib/VNDB/Util/LayoutHTML.pm index 7c03b6a3..ada9e17b 100644 --- a/lib/VNDB/Util/LayoutHTML.pm +++ b/lib/VNDB/Util/LayoutHTML.pm @@ -66,6 +66,7 @@ sub _menu { a href => '/r', mt '_menu_releases'; br; a href => '/p/all', mt '_menu_producers'; br; a href => '/g', mt '_menu_tags'; br; + a href => '/i', mt '_menu_traits'; br; a href => '/u/all', mt '_menu_users'; br; a href => '/hist', mt '_menu_recent_changes'; br; a href => '/t', mt '_menu_discussion_board'; br; |