1 |
[% PERL %] |
2 |
$stash->set( search => sub { |
3 |
my ($fld,$search,$sort_by,$link_text) = @_; |
4 |
|
5 |
my $html = '<a href="?search='.$fld.':'; |
6 |
if ($fld eq "subject") { |
7 |
my $s = $search; |
8 |
|
9 |
# remove re: fdw: [list] preffixes from e-mail |
10 |
while ( $s =~ s/^\s*\[(?:re|fwd|fw)(?:\[\d+\])*:\s+(.+)\]\s*$/$1/ig || |
11 |
$s =~ s/^\s*(?:re|fwd|fw)(?:\[\d+\])*:\s+(.+?)\s*$/$1/ig || |
12 |
$s =~ s/^\[\S+\]\s*//ig || |
13 |
$s =~ s/^\[[^@]+@[\w\.]+\s*:\s+(.+)\s*\]\s*$/$1/g || |
14 |
$s =~ s/\(fwd\)\s*$//ig || |
15 |
$s =~ s/\"//g |
16 |
) { }; |
17 |
|
18 |
$html .= URI::Escape::uri_escape($s); |
19 |
} else { |
20 |
$html .= URI::Escape::uri_escape($search); |
21 |
} |
22 |
|
23 |
$html .= '&sort_by='.$sort_by if ($sort_by); |
24 |
|
25 |
$html .= '">'; |
26 |
$html .= ($link_text ? $link_text : $search); |
27 |
$html .= '</a>'; |
28 |
|
29 |
return $html; |
30 |
} ); |
31 |
[% END %] |
32 |
|
33 |
[% MACRO option(var, value, text) BLOCK %] |
34 |
<option value="[% value %]"[% IF value == param.search_fld %] selected[% END %]>[% text %]</option> |
35 |
[% END %] |
36 |
|
37 |
[% MACRO from(message) BLOCK %] |
38 |
<span class="from"> |
39 |
[% FOREACH f IN message.from %] |
40 |
[% search('from_phrase',f,param.sort_by) %][% IF !loop.last %],[% END %] |
41 |
[% END %] |
42 |
</span> |
43 |
[% END %] |
44 |
|
45 |
[% MACRO to(message) BLOCK %] |
46 |
[% IF message.to.size %] |
47 |
<span class="to">To: |
48 |
[% FOREACH f IN message.to %] |
49 |
[% search('to_phrase',f,param.sort_by) %][% IF !loop.last %], [% END %] |
50 |
[% END %] |
51 |
</span> |
52 |
[% END %] |
53 |
[% IF message.cc.size %] |
54 |
<span class="cc">Cc: |
55 |
[% FOREACH f IN message.cc %] |
56 |
[% search('cc_phrase',f,param.sort_by) %][% IF !loop.last %], [% END %] |
57 |
[% END %] |
58 |
</span> |
59 |
[% END %] |
60 |
[% IF message.bcc.size %] |
61 |
<span class="bcc">Bcc: |
62 |
[% FOREACH f IN message.bcc %] |
63 |
[% IF loop.fist %]Bcc [% END %] |
64 |
[% search('bcc_phrase',f,param.sort_by) %][% IF !loop.last %], [% END %] |
65 |
[% END %] |
66 |
</span> |
67 |
[% END %] |
68 |
[% END %] |
69 |
|
70 |
[% MACRO usage_list(list,key,description) BLOCK %] |
71 |
[% IF list %] |
72 |
<div class="[% key %]"> |
73 |
[% description %] |
74 |
[% FOREACH l IN list %] |
75 |
<br>[% search(key,l.name,param.sort_by) %] <span class="counter">[% l.usage %]</span> |
76 |
[% END %] |
77 |
</div> |
78 |
[% END %] |
79 |
[% END %] |
80 |
|
81 |
|
82 |
[% PERL %] |
83 |
$stash->set( get_cal => sub { |
84 |
my $cal = shift; |
85 |
my $yyyy = shift || return "BUG2"; |
86 |
my $mm = shift || return "BUG3"; |
87 |
my $day = shift || return " "; |
88 |
|
89 |
my $url = shift || ""; |
90 |
|
91 |
return $day if (! $cal); # no calendar entries |
92 |
|
93 |
my $yyyymm = sprintf("%04d-%02d",$yyyy,$mm); |
94 |
my $dd = sprintf("%02d",$day); |
95 |
|
96 |
if ($cal->{$yyyymm}->{$dd}) { |
97 |
return "<a href=\"/$yyyy/$mm/$dd/$url\" title=\"".$cal->{$yyyymm}->{$dd}."\">$day</a>"; |
98 |
} else { |
99 |
return $day; |
100 |
} |
101 |
} ); |
102 |
[% END %] |
103 |
|
104 |
|
105 |
[% MACRO url_show_id(id) BLOCK ; |
106 |
'?show_id=' ; id ; |
107 |
IF param.search ; '&search=' ; param.search ; END ; |
108 |
IF param.sort_by ; '&sort_by=' ; param.sort_by ; END ; |
109 |
END %] |
110 |
|
111 |
|
112 |
[% MACRO url_search(search_for) BLOCK ; |
113 |
IF param.sort_by ; "?search=" ; search_for ; "&sort_by=" ; param.sort_by ; |
114 |
ELSE ; "?search=" ; search_for ; |
115 |
END ; |
116 |
END %] |
117 |
|
118 |
|
119 |
[% PERL %] |
120 |
$stash->set( sort_bar => sub { |
121 |
my ($param,$pre,$del,$post) = @_; |
122 |
|
123 |
my ($a1,$a2,$a3) = ('<a href="','">','</a>'); |
124 |
my ($ss1,$ss2) = ('<span class="sort_selected">','</span>'); |
125 |
|
126 |
my $html_search = ''; |
127 |
my $next_sep = '?'; |
128 |
|
129 |
if ($param->{search}) { |
130 |
$html_search = '?search='.$param->{search}; |
131 |
$next_sep = '&'; |
132 |
} |
133 |
|
134 |
# default sort order |
135 |
my ($sort_fld,$sort_order) = ('rank','desc'); |
136 |
($sort_fld,$sort_order) = split(/\s+/,$param->{sort_by}); |
137 |
|
138 |
my $other_order = { |
139 |
'asc' => 'desc', |
140 |
'desc' => 'asc', |
141 |
}; |
142 |
|
143 |
my $default_sort = { |
144 |
'rank' => 'desc', |
145 |
'from' => 'asc', |
146 |
'to' => 'asc', |
147 |
'date' => 'desc', |
148 |
}; |
149 |
|
150 |
my @html; |
151 |
foreach my $fld (qw(rank date from to)) { |
152 |
|
153 |
my $h = $a1 . $html_search . $next_sep . 'sort_by='; |
154 |
|
155 |
if ($sort_fld eq $fld) { |
156 |
$h .= $sort_fld." ".$other_order->{$sort_order}; |
157 |
$h .= $a2 . $ss1 . $sort_fld . $ss2 . $a3 ; |
158 |
} else { |
159 |
$h .= $fld." ".$default_sort->{$fld}; |
160 |
$h .= $a2 . $fld . $a3 ; |
161 |
} |
162 |
push @html, $h; |
163 |
|
164 |
} |
165 |
|
166 |
return $pre.join($del,@html).$post; |
167 |
|
168 |
} ); |
169 |
[% END %] |
170 |
|
171 |
|
172 |
[% MACRO date(msg) BLOCK %] |
173 |
<span class="date"><a href="/[% yyyy_mm(msg.date) %]/[% url_search(param.search) %]">[% msg.date %]</a></span> |
174 |
[% END %] |
175 |
|
176 |
[% PERL %] |
177 |
$stash->set( yyyy_mm => sub { |
178 |
my $d = shift; |
179 |
|
180 |
if ($d =~ /^(\d{4}[\-\/]\d{2})/) { |
181 |
return $1; |
182 |
} else { |
183 |
return $d; |
184 |
} |
185 |
} ); |
186 |
[% END %] |
187 |
|
188 |
[% PERL %] |
189 |
$stash->set( id => sub { |
190 |
my ($folder,$msgid) = split(/\s+/,shift); |
191 |
return $msgid; |
192 |
} ); |
193 |
|
194 |
$stash->set( folder => sub { |
195 |
my ($folder,$msgid) = split(/\s+/,shift); |
196 |
return $folder; |
197 |
} ); |
198 |
[% END %] |