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