/[webpac2]/trunk/web/browse.cgi
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/web/browse.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 68 - (hide annotations)
Wed Nov 16 15:49:22 2005 UTC (18 years, 6 months ago) by dpavlin
File size: 7976 byte(s)
 r8903@llin:  dpavlin | 2005-11-16 16:49:47 +0100
 strip newlines from beginning of file also

1 dpavlin 46 #!/usr/bin/perl -w
2    
3 dpavlin 54 use strict;
4    
5 dpavlin 46 use Cwd qw/abs_path/;
6     use CGI::Carp qw(fatalsToBrowser);
7     use CGI::Simple;
8 dpavlin 49 use File::Slurp;
9 dpavlin 54 use Data::Dumper;
10     use Text::Iconv;
11 dpavlin 46
12     use lib '../lib';
13    
14     use WebPAC::DB;
15     use WebPAC::Output::TT;
16    
17     my $abs_path = abs_path($0);
18     $abs_path =~ s#/[^/]*$#/../#;
19    
20     my $db_path = $abs_path . '/db/';
21 dpavlin 67 my $template_file = 'html_ffzg.tt';
22     my $css_file = 'user.css';
23 dpavlin 46
24 dpavlin 54 my $iconv_utf8 = new Text::Iconv('ISO-8859-2', 'UTF-8');
25     my $iconv_loc = new Text::Iconv('UTF-8', 'ISO-8859-2');
26    
27 dpavlin 46 my $db = new WebPAC::DB(
28     path => $db_path,
29     read_only => 1,
30     debug => 1,
31     );
32    
33     my $out = new WebPAC::Output::TT(
34     include_path => "$abs_path/conf/output/tt",
35     filters => { foo => sub { shift } },
36     );
37    
38     my $q = new CGI::Simple;
39     my $self = $q->url( '-path_info'=>1, '-query'=>0, '-full'=>0 );
40    
41     my $rec = $q->param('rec') || 1;
42    
43 dpavlin 54 print $q->header( -charset => 'utf-8' );
44 dpavlin 46
45 dpavlin 67 ##---- some handy subs
46    
47     sub update_file($$) {
48     my ($path, $content) = @_;
49    
50     $content = $iconv_loc->convert( $content ) || die "no content?";
51    
52     sub _conv_js {
53     my $t = shift || return;
54     return $iconv_loc->convert(chr(hex($t)));
55     }
56     $content =~ s/%u([a-fA-F0-9]{4})/_conv_js($1)/gex;
57 dpavlin 68 $content =~ s/^[\n\r]+//s;
58 dpavlin 67 $content =~ s/[\n\r]+$//s;
59    
60     write_file($path . '.new', $content) || die "can't save ${path}.new $!";
61     rename $path . '.new', $path || die "can't rename to $path: $!";
62     }
63    
64     sub get_file_in_html($) {
65     my ($path) = @_;
66    
67     die "no path?" unless ($path);
68    
69     my $content = read_file($path) || die "can't read $path: $!";
70     $content = $q->escapeHTML($iconv_utf8->convert($content));
71    
72     return $content;
73     }
74    
75     ##----
76    
77 dpavlin 46 if ($q->path_info =~ m#xml#) {
78    
79     my @ds = $db->load_ds($rec);
80    
81 dpavlin 49 if (@ds && $#ds > 0) {
82 dpavlin 46 print qq{<response>
83 dpavlin 49 <action type='html' target='div_record' errorCode='' errorMessage='' >
84 dpavlin 58 }, $iconv_utf8->convert( $out->apply(
85 dpavlin 67 template => $template_file,
86 dpavlin 46 data => \@ds,
87 dpavlin 58 ) ), qq{
88 dpavlin 46
89 dpavlin 57 </action>
90     <action type='javascript' errorCode='' errorMessage='' >
91 dpavlin 46 <!--
92 dpavlin 49 var el = iwfGetById('div_record_nr');
93 dpavlin 46 if (el) el.innerHTML = '# <b>$rec</b>';
94 dpavlin 49 //iwfShow('div_record');
95     iwfOpacity('div_record', 100);
96 dpavlin 46 //-->
97     </action>
98     </response>
99     };
100     exit;
101     } else {
102 dpavlin 49 print qq{<response>
103     <action type='html' target='div_record' errorCode='' errorMessage='' >
104    
105     <b>Record $rec not found!</b>
106 dpavlin 57 </action>
107     <action type='javascript' errorCode='' errorMessage='' >
108 dpavlin 49 <!--
109     var el = iwfGetById('div_record_nr');
110 dpavlin 59 if (el) el.innerHTML = '<strike>&nbsp;$rec&nbsp;</strike>';
111 dpavlin 49 //-->
112     </action>
113     </response>
114     };
115     exit;
116 dpavlin 46 }
117    
118 dpavlin 49 } elsif ($q->path_info =~ m#template#) {
119    
120 dpavlin 67 my $template_path = $out->{'include_path'} . '/' . $template_file;
121 dpavlin 49
122 dpavlin 54 if ($q->param('save_template')) {
123    
124 dpavlin 67 update_file($template_path, $q->param('tt_template'));
125 dpavlin 58
126 dpavlin 54 print qq{<response>
127 dpavlin 67 <action type='html' target='div_template_status' errorCode='' errorMessage='' >
128     <tt>$template_file</tt> saved
129 dpavlin 54 </action>
130     <action type='js'>
131     <!--
132 dpavlin 67 iwfShow('div_template_status', 1);
133 dpavlin 54 reload_rec();
134 dpavlin 67 iwfHideGentlyDelay('div_template_status', 2, 2000, 1);
135 dpavlin 54 -->
136     </action>
137     </response>
138     };
139     exit;
140    
141     }
142    
143 dpavlin 67 my $tmpl = get_file_in_html($template_path);
144 dpavlin 54
145 dpavlin 49 print qq{<response>
146     <action type='html' target='div_template' errorCode='' errorMessage='' >
147 dpavlin 54
148 dpavlin 67 <form name="frmEditor" action="$self" method="post" iwfTarget="div_template_status" >
149 dpavlin 54
150     <textarea name="tt_template" cols="80" rows="10" style="display: block;">
151 dpavlin 49 $tmpl
152     </textarea>
153 dpavlin 54
154     <br/>
155     <input type="button" name="save_template" value="Save" onclick="javascript:iwfRequest(this);" />
156 dpavlin 61 <!--
157     <input type="checkbox" name="checkin_template" id="checkin_checkbox" label="checkin" /> checkin
158     -->
159 dpavlin 67 &nbsp;&nbsp;<span id="div_template_status" style="color: #808080;">idle</span>
160 dpavlin 54
161     <input type='hidden' value='hidden post value' name='hidValue' />
162    
163     </form>
164 dpavlin 49 </action>
165 dpavlin 61 <action type='js'>
166     <!--
167 dpavlin 67 iwfHideGentlyDelay('div_template_status', 2, 2000, 1);
168 dpavlin 61 -->
169     </action>
170 dpavlin 49 </response>
171 dpavlin 54 };
172 dpavlin 49
173 dpavlin 54 exit;
174    
175 dpavlin 67 } elsif ($q->path_info =~ m#css#) {
176    
177     my $css_path = $abs_path . '/web/' . $css_file;
178    
179    
180     if ($q->param('save_css')) {
181     update_file($css_path, $q->param('user_css'));
182    
183     print qq{<response>
184     <action type='html' target='div_css_status' errorCode='' errorMessage='' >
185     <tt>$css_file</tt> saved
186     </action>
187     <action type='js'>
188     <!--
189     iwfShow('div_css_status', 1);
190     // switch css
191     css_rnd++;
192     iwfLog('loading user.css?'+css_rnd);
193     iwfGetById('user_css_link').href = 'user.css?'+css_rnd;
194     iwfHideGentlyDelay('div_css_status', 2, 2000, 1);
195     -->
196     </action>
197     </response>
198     };
199     exit;
200    
201     }
202    
203     my $user_css = get_file_in_html($css_path);
204    
205     print qq{<response>
206     <action type='html' target='div_css' errorCode='' errorMessage='' >
207    
208     <form name="frmCSSEditor" action="$self" method="post" iwfTarget="div_css_status" >
209    
210     <textarea name="user_css" cols="80" rows="10" style="display: block; width: 100%;">
211     $user_css
212     </textarea>
213    
214     <br/>
215     <input type="button" name="save_css" value="Save" onclick="javascript:iwfRequest(this);" />
216     &nbsp;&nbsp;<span id="div_css_status" style="color: #808080;">idle</span>
217     </form>
218     </action>
219     <action type='js'>
220     <!--
221     iwfLog('loaded CSS template');
222     -->
223     </action>
224     </response>
225     };
226    
227     exit;
228    
229 dpavlin 46 } else {
230 dpavlin 67 print <<"_END_OF_HEAD_";
231 dpavlin 46 <html>
232     <head>
233     <title>WebPAC simple browse interface</title>
234 dpavlin 67
235     <link id="user_css_link" href="user.css" type="text/css" rel="stylesheet">
236    
237 dpavlin 46 <script type='text/javascript' src='iwf/iwfcore.js'></script>
238     <script type='text/javascript' src='iwf/iwfgui.js'></script>
239     <script type='text/javascript' src='iwf/iwfxml.js'></script>
240     <script type='text/javascript' src='iwf/iwfajax.js'></script>
241 dpavlin 67 <script type='text/javascript' src='iwf/iwconfig.js'></script>
242 dpavlin 46 <script type='text/javascript'>
243    
244     var rec = $rec ;
245     var url = '$self';
246    
247 dpavlin 67 var css_rnd = 0;
248    
249 dpavlin 46 function update_status(text) {
250 dpavlin 49 var el = iwfGetById('div_record_nr');
251 dpavlin 46 if (el) el.innerHTML = text;
252     }
253    
254     function load_rec(nr) {
255 dpavlin 59 if (nr == 1) {
256     iwfHide('a_left_arr', 1);
257     } else {
258     iwfShow('a_left_arr', 1);
259     }
260 dpavlin 46 update_status(nr+'...');
261 dpavlin 49 iwfRequest( url+'/xml/?rec='+nr, 'div_record' );
262     iwfOpacity('div_record', 30);
263 dpavlin 46 }
264    
265     function inc_rec() {
266     rec++;
267     load_rec(rec);
268     return false;
269     }
270    
271     function dec_rec() {
272 dpavlin 59 if (rec > 1) {
273     rec--;
274     load_rec(rec);
275     }
276 dpavlin 46 return false;
277     }
278    
279 dpavlin 47 function reload_rec() {
280     load_rec(rec);
281     return false;
282     }
283    
284 dpavlin 67 function edit_template() {
285     iwfHideGently('div_css', 30, 1);
286     iwfShowGently('div_template', 30, 1);
287     return false;
288     }
289    
290     function edit_css() {
291     iwfHideGently('div_template', 30, 1);
292     iwfShowGently('div_css', 30, 1);
293     return false;
294     }
295    
296 dpavlin 49 function init_page() {
297 dpavlin 67 iwfLog('div_css = ' + iwfX('div_css') + ':' + iwfY('div_css'));
298     iwfLog('div_template = ' + iwfX('div_template') + ':' + iwfY('div_template'));
299    
300     iwfX('div_css', iwfX('div_template'));
301     iwfY('div_css', iwfY('div_template'));
302    
303     iwfLog('div_css = ' + iwfX('div_css') + ':' + iwfY('div_css'));
304    
305 dpavlin 49 load_rec(rec);
306 dpavlin 67
307     // load template editor
308 dpavlin 49 iwfRequest( url+'/template/', 'div_template' );
309 dpavlin 67 // load css editor
310     iwfRequest( url+'/css/', 'div_css' );
311 dpavlin 49 }
312    
313 dpavlin 46 </script>
314 dpavlin 67
315 dpavlin 46 </head>
316 dpavlin 49 <body onload="init_page();">
317 dpavlin 46
318 dpavlin 67 <div id="iwfLog">
319     </div>
320    
321 dpavlin 46 db_path = <tt>$db_path</tt><br/>
322 dpavlin 67 template = <tt>$template_file</tt><br/>
323     css = <tt>$css_file</tt>
324 dpavlin 46
325     <div style="background: #e0e0e0; padding: 0.5em; display: block;">
326 dpavlin 59 <a id="a_left_arr" href="$self?rec=}, $rec - 1, qq{" onClick="return dec_rec();">&#8678;</a>
327 dpavlin 49 <span id="div_record_nr"> none </span>
328 dpavlin 47
329 dpavlin 59 <a id="a_right_arr" href="$self?rec=}, $rec + 1, qq{" onClick="return inc_rec();">&#8680;</a>
330     <a id="a_reload" href="$self?rec=}, $rec, qq{" onClick="return reload_rec();">&#8634;</a>
331 dpavlin 67 <a href="#" onClick="iwfShowLog(); return false;">&#9636;</a>
332 dpavlin 54
333 dpavlin 46 </div>
334    
335 dpavlin 67 <div>
336    
337     <div style="display: block;">
338     Editor
339     <a id="a_template" href="#" onClick="return edit_template();">template</a>
340     <a id="a_css" href="#" onClick="return edit_css();">css</a>
341    
342 dpavlin 49 <div id="div_template">
343     <span style="color: #808080;"> no template loaded yet. </span>
344     </div>
345    
346 dpavlin 67 <div id="div_css" style="position: absolute; display: none;">
347     <span style="color: #808080;"> no CSS loaded yet. </span>
348     </div>
349    
350     </div>
351    
352 dpavlin 49 <div id="div_record" style="display: block;">
353 dpavlin 46 <span style="color: #808080;"> no record loaded yet. </span>
354     </div>
355    
356 dpavlin 49
357 dpavlin 46 </body>
358 dpavlin 67 </html>
359     _END_OF_HEAD_
360 dpavlin 46
361 dpavlin 67 }

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26