![]() |
|< 1 2 3 4 5 ... 7 >| | ![]() |
66 Einträge, 7 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
sub formatpages($$) {
# pick parameters
my($act, $max, $min) = (@_, 1);
# pick pages to link
my @pages = map { { text => $_, link => 1 } }
grep { $_ >= $min && $_ <= $max }
$act-2 .. $act+2;
# may add first page
if ($pages[0]->{text} > $min) {
if ($pages[0]->{text} > $min+2) {
unshift(@pages, { text => $min, link => 1 }, { text => '...', link => 0 });
}
else {
unshift(@pages, { text => $_, link => 1 }) for reverse $min .. $pages[0]->{text}-1;
}
}
# may add last page
if ($pages[-1]->{text} < $max) {
if ($pages[-1]->{text} < $max-2) {
push(@pages, { text => '...', link => 0 }, { text => $max, link => 1 });
}
else {
push(@pages, { text => $_, link => 1 }) for $pages[-1]->{text}+1 .. $max;
}
}
# return pagelist
return @pages if wantarray();
return \@pages;
} # formatpages
my @pagelist = formatpages($actualPageId, $itemsCount / $itemsPerPage);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#! /usr/bin/perl
use warnings;
use strict;
my $itemsPerPage = 10;
# some tests
&FormatPages( 199, $_, $itemsPerPage ) for 0..20;
&FormatPages( 1 , $_, $itemsPerPage ) for 0..3;
&FormatPages( 211, $_, $itemsPerPage ) for 21..23;
&FormatPages( 218, $_, $itemsPerPage ) for (1,2,4,6,9,14,19,20,22);
&FormatPages( 0 , 0 , $itemsPerPage );
&FormatPages( 130, 20, $itemsPerPage );
&FormatPages( 81, $_, $itemsPerPage ) for (3..8);
sub FormatPages {
my( $max, $act, $itemsPerPage ) = @_;
my $min = 1;
$max = int( 0.99 + $max / $itemsPerPage );
$act = 1 unless $act;
print "IN: Max: $max, Act: $act, Min: $min, ItemsPerPage: $itemsPerPage\n";
# pick pages to link
my @pages = map { { text => $_, link => 1 } }
grep { $_ >= $min && $_ <= $max }
$act-2 .. $act+2;
# may add first page
if( defined $pages[0]->{text} and $pages[0]->{text} > $min ) {
if( $pages[0]->{text} > $min+2 ) {
unshift( @pages,
{ text => $min, link => 1 },
{ text => '...', link => 0 },
);
} # if
else {
unshift( @pages,
{ text => $_, link => 1 }
) for reverse $min .. $pages[0]->{text}-1;
} # else
} # if
# may add last page
if( defined $pages[0]->{text} and $pages[-1]->{text} < $max ) {
if( $pages[-1]->{text} < $max-2 ) {
push( @pages,
{ text => '...', link => 0 },
{ text => $max, link => 1 },
);
} # if
else {
push( @pages,
{ text => $_, link => 1 }
) for $pages[-1]->{text}+1 .. $max;
} # else
} # if
@pages = () if scalar @pages < 2;
# debug output
print "Output: ", join( ' ', map {
$_->{link} ? "L<$_->{text}>" : "'$_->{text}'"
} @pages ), "\n\n";
# return \@pages;
} # FormatPages
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Readonly::Hash %TagsBlocked => (
# [code] doesn't use the external program, so we have to do everything
code => { # toCheck
# -start => qq~<div class="stdDiv"><b>Code:</b><div class="showCode">~,
-start => qq~<div class="stdDiv"><div class="showCode">~,
-string => sub {
my $code = &CGI::escapeHTML( $_[0] );
$code =~ s~\r?\n~<br />\n~g;
$code =~ s~^(\s+)~' ' x length($1)~gem;
$code =~ s/ / /g;
$code =~ s~\r?\n~<br/>\n~g;
return $code;
},
-end => qq~</div></div>~,
-description => 'Dumme Code-Tags',
},
# the following tags use $SourceHighlightBin to color code
perl => {
-start => qq~<div class="stdDiv">Perl:<div class="showCode">~,
-end => qq~</div></div>~,
-string => sub {
my $code = &PBoard::Posting::HighlightPerlCode( $_[0] );
$code =~ s~\r?\n~<br/>\n~g;
return $code;
},
-description => 'Code-Tags mit Syntax highlightning fuer perl',
},
java => {
-start => qq~<div class="stdDiv">Java:<div class="showCode">~,
-end => qq~</div></div>~,
-string => sub {
my $code = &PBoard::Posting::HighlightJavaCode( $_[0] );
$code =~ s~\r?\n~<br/>\n~g;
return $code;
},
-description => 'Code-Tags mit Syntax highlightning fuer Java',
},
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
sub FormatPagedResults {
my( $itemsCount, $itemsPerPage, $actualPageId ) = @_;
# wieviel "rand" soll dargestellt werden? sprich:
# wie viele Links sollten jeweils neben dem aktuellen angezeigt werden?
my $border = 2;
# Ausnahmefaelle definieren; evtl. sollten die uebergebenen Werte
# auf Gueltigkeit geprueft werden?
return [] unless ( $itemsCount > 0 );
return [] unless ( defined $actualPageId );
# ID d. letzten Seite ermitteln; mehr darf nicht sein!
my $last = int ( $itemsCount / $itemsPerPage + ( $itemsCount % $itemsPerPage == 0 ? 0 : 1 ) );
# Anfang und Ende vor-befuellen
my %pages = (
# PAGE => Set_link (boolean)
1 => 1,
$last => 1,
);
# den Bereich um die aktuelle Seite eintragen
for my $id ( $actualPageId-$border .. $actualPageId+$border ) {
# Werte ausserhalb der Gueltigkeit ueberspringen
next if ( $id < 1 or $id > $last );
# ansonsten eintragen
$pages{$id} = 1;
}
# akt. Seite eintragen; ueberschreibt evtl. default f. erste/letzte Seite
# vorausgesetzt, die Seitenzahl ist im gueltigen Bereich
if ( $actualPageId > 0 and $actualPageId < $last ) {
$pages{$actualPageId} = 0;
}
# Hash umwandeln in den benoetigten AoH
my @pages = ();
my $prev = 0;
for my $id ( sort { $a <=> $b } keys %pages ) {
# Abstandshalter einfuegen
if ( $id - 1 != $prev ) {
push( @pages, { 'id' => '...', 'link' => 0 } );
}
push ( @pages, { 'id' => $id, 'link' => $pages{$id} } );
$prev = $id;
}
return \@pages;
} # FormatPagedResults ( $itemsCount; $itemsPerPage, $actualPageId )
#$Data::Dumper::Sortkeys = 1;
#print Dumper ( FormatPagedResults( 0, 0, 10 ) );
testing();
sub testing {
my $itemsPerPage = 10;
output( FormatPagedResults( 199, $itemsPerPage, $_)) for 0..20;
output( FormatPagedResults( 1 , $itemsPerPage, $_)) for 0..3;
output( FormatPagedResults( 211, $itemsPerPage, $_)) for 21..23;
output( FormatPagedResults( 218, $itemsPerPage, $_)) for (1,2,4,6,9,14,19,20,22);
output( FormatPagedResults( 0 , $itemsPerPage, 0 ));
output( FormatPagedResults( 130, $itemsPerPage, $_ ));
output( FormatPagedResults( 81, $itemsPerPage, $_ )) for (3..8);
}
sub output {
my $aref = shift;
print "Output: ",
join( ' ',
map { $_->{link} ? "L<$_->{id}>" : "'$_->{id}'" }
@$aref
), "\n\n";
}
![]() |
|< 1 2 3 4 5 ... 7 >| | ![]() |
66 Einträge, 7 Seiten |