-
Notifications
You must be signed in to change notification settings - Fork 27
/
tabbed_display.coretag
211 lines (159 loc) · 5.14 KB
/
tabbed_display.coretag
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# Copyright 2002-2007 Interchange Development Group and others
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. See the LICENSE file for details.
#
# $Id: tabbed_display.coretag,v 1.6 2007-03-30 23:40:54 pajamian Exp $
UserTag tabbed-display PosNumber 0
UserTag tabbed-display addAttr
UserTag tabbed-display hasEndTag
UserTag tabbed-display Interpolate
UserTag tabbed-display NoReparse
UserTag tabbed-display Version $Revision: 1.6 $
UserTag tabbed-display Documentation <<EOD
=head1 NAME
tabbed-display -- DHTML tabbed display
=head1 SYNOPSIS
[tabbed-display OPTIONS]
[tabbed-panel The title of one]
The contents of one
[/tabbed-panel]
[tabbed-panel The contents of two]
The contents of two
[/tabbed-panel]
[/tabbed-display]
=head1 DESCRIPTION
The [tabbed-display] ITL tag breaks text into a tabbed DHTML display.
There are many options which can change the size of the display,
colors, and styles.
NOTE: All sizes are in pixels to allow size calculation.
=head2 OPTIONS
=over 4
=item tab_bgcolor_template
Default #xxxxxx. A template where each "x" will be broken into
descending-brightness colors. The default value will cause
the selected tab to have a color of #eeeeee, the first unselected
tab will have #dddddd, the next #cccccc, etc. To create a yellow
series, use #ffffxx.
=item tab_height
Sets the height of the title tab. Default 30.
=item tab_width
Sets the width of the title tab. Default is 100.
=item panel_height
Sets the height of the panel display. Default 600.
=item panel_width
Sets the width of the panel display. Default is 800.
=item panel_id
To account for multiple tabbed displays in a page, the second
one should have a unique ID assigned to it. Default is "mvpan".
=item tab_horiz_offset
The amount that the tab will be offset from tabs in multi-row
displays to allow view of all tabs. Default 10.
=item tab_vert_offset
The amount that the tab will be offset from tabs in multi-row
displays to allow view of all tabs. Default 8.
=item tab_style
The style items which will be set for the title tab portion.
Default:
text-align:center;
font-family: sans-serif;
line-height:150%;
border:2px;
border-color:#999999;
border-style:outset;
border-bottom-style:none;
=item panel_style
The style items which will be set for the panel portion. Default:
font-family: sans-serif;
font-size: smaller;
border: 2px;
border-color:#999999;
border-style:outset;
=item panel_prepend
A string which will be prepended to every panel content.
A typical value might be "<table>", which allows table rows to
be sent as content. This is the value used in Interchange's
table editor.
=item panel_append
A string which will be appended to every panel content.
A typical value might be "</table>", which allows table rows to
be sent as content. This is the value used in Interchange's
table editor.
=item contents
If you have an array set with the value of each panel's content,
you can send it as an array reference in the contents option.
This option will also accept a null-separated string as might
be found in a form input.
If there are contents in an array, the body text of the tag
is ignored.
=item titles
If you have an array set with the value of each tab's title,
you can send it as an array reference in the C<titles> option.
This option will also accept a null-separated string as might
be found in a form input.
If the title for a panel is set in the array, the title found in the
body text of the tag is ignored.
=back
=head2 Use in embedded Perl
The tabbed_display tag can be used in embedded Perl as well.
my @titles = ( 'Title 1', 'Title 2' );
my @contents = ( 'Content of panel 1: foo', 'Content of 2' );
return $Tag->tabbed_display({
titles => \@titles,
contents => \@contents,
panel_width => 600,
panel_height => 400,
tab_bgcolor_template => '#ffffxx',
});
=cut
EOD
UserTag tabbed-display Routine <<EOR
sub {
my $opt = shift;
my $body = shift;
#::logDebug("opt is $opt, body is $body");
my $tit; my $cont;
if($opt->{titles}) {
if(ref($opt->{titles}) eq 'ARRAY') {
$tit = delete $opt->{titles};
}
elsif($opt->{titles} =~ /\0/) {
$tit = [ split /\0/, delete $opt->{titles} ];
}
elsif($opt->{titles} =~ /\n/) {
$tit = [ split /\n/, delete $opt->{titles} ];
}
else {
$tit = [ map { $::Scratch->{$_} } split /[\s,]+/, delete $opt->{titles}];
}
}
if($opt->{contents}) {
if(ref($opt->{contents}) eq 'ARRAY') {
$cont = delete $opt->{contents};
}
elsif($opt->{contents} =~ /\0/) {
$cont = [ split /\0/, delete $opt->{contents} ];
}
}
$tit ||= [];
if(! $cont) {
$cont = [];
while($body =~ s{
\[tabbed[-_]panel (.*?) \]
(.*?)
\[/tabbed[-_]panel\]}
{}xis
)
{
push @$cont, $2;
my $t = $1;
if($t and $t =~ /\S/) {
$tit->[$#$cont] ||= $t;
}
}
}
return Vend::Table::Editor::tabbed_display($tit, $cont, $opt);
}
EOR