Also look in the next-highest directory when detecting VCS; add SVN
[interchange.git] / code / UI_Tag / tabbed_display.coretag
1 # Copyright 2002-2007 Interchange Development Group and others
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.  See the LICENSE file for details.
7
8 UserTag tabbed-display PosNumber     0
9 UserTag tabbed-display addAttr 
10 UserTag tabbed-display hasEndTag 
11 UserTag tabbed-display Interpolate 
12 UserTag tabbed-display NoReparse 
13 UserTag tabbed-display Version       1.6
14 UserTag tabbed-display Documentation <<EOD
15 =head1 NAME
16
17 tabbed-display -- DHTML tabbed display
18
19 =head1 SYNOPSIS
20
21     [tabbed-display OPTIONS]
22         [tabbed-panel The title of one]
23         The contents of one
24         [/tabbed-panel]
25         [tabbed-panel The contents of two]
26         The contents of two
27         [/tabbed-panel]
28     [/tabbed-display]
29
30 =head1 DESCRIPTION
31
32 The [tabbed-display] ITL tag breaks text into a tabbed DHTML display.
33 There are many options which can change the size of the display,
34 colors, and styles.
35
36 NOTE: All sizes are in pixels to allow size calculation.
37
38 =head2 OPTIONS
39
40 =over 4
41
42 =item tab_bgcolor_template
43
44 Default #xxxxxx. A template where each "x" will be broken into
45 descending-brightness colors. The default value will cause
46 the selected tab to have a color of #eeeeee, the first unselected
47 tab will have #dddddd, the next #cccccc, etc. To create a yellow
48 series, use #ffffxx.
49
50 =item tab_height
51
52 Sets the height of the title tab. Default 30.
53
54 =item tab_width
55
56 Sets the width of the title tab. Default is 100.
57
58 =item panel_height
59
60 Sets the height of the panel display. Default 600.
61
62 =item panel_width
63
64 Sets the width of the panel display. Default is 800.
65
66 =item panel_id
67
68 To account for multiple tabbed displays in a page, the second
69 one should have a unique ID assigned to it. Default is "mvpan".
70
71 =item tab_horiz_offset
72
73 The amount that the tab will be offset from tabs in multi-row
74 displays to allow view of all tabs.  Default 10.
75
76 =item tab_vert_offset
77
78 The amount that the tab will be offset from tabs in multi-row
79 displays to allow view of all tabs.  Default 8.
80
81 =item tab_style
82
83 The style items which will be set for the title tab portion.
84 Default:
85
86     text-align:center;
87     font-family: sans-serif;
88     line-height:150%;
89     border:2px;
90     border-color:#999999;
91     border-style:outset;
92     border-bottom-style:none;
93
94
95 =item panel_style
96
97 The style items which will be set for the panel portion.  Default:
98
99     font-family: sans-serif;
100     font-size: smaller;
101     border: 2px;
102     border-color:#999999;
103     border-style:outset;
104
105 =item panel_prepend
106
107 A string which will be prepended to every panel content.
108 A typical value might be "<table>", which allows table rows to
109 be sent as content. This is the value used in Interchange's
110 table editor.
111
112
113 =item panel_append
114
115 A string which will be appended to every panel content.
116 A typical value might be "</table>", which allows table rows to
117 be sent as content. This is the value used in Interchange's
118 table editor.
119
120 =item contents
121
122 If you have an array set with the value of each panel's content,
123 you can send it as an array reference in the contents option.
124 This option will also accept a null-separated string as might
125 be found in a form input.
126
127 If there are contents in an array, the body text of the tag
128 is ignored.
129
130 =item titles
131
132 If you have an array set with the value of each tab's title,
133 you can send it as an array reference in the C<titles> option.
134 This option will also accept a null-separated string as might
135 be found in a form input.
136
137 If the title for a panel is set in the array, the title found in the
138 body text of the tag is ignored.
139
140 =back
141
142 =head2 Use in embedded Perl
143
144 The tabbed_display tag can be used in embedded Perl as well.
145
146     my @titles = ( 'Title 1', 'Title 2' );
147     my @contents = ( 'Content of panel 1: foo', 'Content of 2' );
148
149     return $Tag->tabbed_display({
150         titles => \@titles,
151         contents => \@contents,
152         panel_width => 600,
153         panel_height => 400,
154         tab_bgcolor_template => '#ffffxx',
155     });
156
157 =cut
158 EOD
159 UserTag tabbed-display Routine       <<EOR
160 sub {
161         my $opt = shift;
162         my $body = shift;
163 #::logDebug("opt is $opt, body is $body");
164         my $tit; my $cont;
165
166         if($opt->{titles}) {
167                 if(ref($opt->{titles}) eq 'ARRAY') {
168                         $tit = delete $opt->{titles};
169                 }
170                 elsif($opt->{titles} =~ /\0/) {
171                         $tit = [ split /\0/, delete $opt->{titles} ];
172                 }
173                 elsif($opt->{titles} =~ /\n/) {
174                         $tit = [ split /\n/, delete $opt->{titles} ];
175                 }
176                 else {
177                         $tit = [ map { $::Scratch->{$_} } split /[\s,]+/, delete $opt->{titles}];
178                 }
179         }
180
181         if($opt->{contents}) {
182                 if(ref($opt->{contents}) eq 'ARRAY') {
183                         $cont = delete $opt->{contents};
184                 }
185                 elsif($opt->{contents} =~ /\0/) {
186                         $cont = [ split /\0/, delete $opt->{contents} ];
187                 }
188         }
189
190         $tit ||= [];
191         if(! $cont) {
192                 $cont = [];
193                 while($body =~ s{
194                                                         \[tabbed[-_]panel (.*?) \]
195                                                                         (.*?)
196                                                         \[/tabbed[-_]panel\]}
197                                                 {}xis
198                                         )
199                 {
200                         push @$cont, $2;
201                         my $t = $1;
202                         if($t and $t =~ /\S/) {
203                                 $tit->[$#$cont] ||= $t;
204                         }
205                 }
206         }
207         return Vend::Table::Editor::tabbed_display($tit, $cont, $opt);
208 }
209 EOR