1 |
#?SuikaWikiConfig/2.0 |
2 |
|
3 |
Plugin: |
4 |
@Name: SuikaWiki20 |
5 |
@FullName: SuikaWiki 2.0 Interface Emulation |
6 |
@Description: |
7 |
This module provides transitional interface compatible with |
8 |
SuikaWiki 2. Note that this module will be removed in near future. |
9 |
@License: %%GPL%% |
10 |
@Author[list]: |
11 |
Wakaba <w@suika.fam.cx> |
12 |
@Date.RCS: $Date: 2003/12/26 06:57:44 $ |
13 |
@RequiredModule[list]: |
14 |
main |
15 |
|
16 |
ViewDefinition: |
17 |
@Mode: #default |
18 |
@Condition: |
19 |
@@output: http-cgi |
20 |
@@http-method[list]: |
21 |
GET |
22 |
HEAD |
23 |
POST |
24 |
@Description: fallback mode |
25 |
@method: |
26 |
@@@: |
27 |
$self->{view}->init_db; |
28 |
require SuikaWiki::Output::HTTP; |
29 |
my $output = SuikaWiki::Output::HTTP->new (wiki => $self->{view}->{wiki}, |
30 |
view => $self->{view}, |
31 |
viewobj => $self); |
32 |
|
33 |
for (@{$self->{view}->{wiki}->{var}->{client}->{used_for_negotiate}}, |
34 |
'Accept-Language') { |
35 |
$output->add_negotiate_header_field ($_); |
36 |
} |
37 |
|
38 |
my $view = $opt->{condition}->{mode}; |
39 |
require SuikaWiki::View; |
40 |
my $content = $self->{view}->{wiki}->{db}->get |
41 |
(content => $self->{view}->{wiki}->{var}->{page}); |
42 |
my $lm = $self->{view}->{wiki}->{db}->get |
43 |
(lastmodified => $self->{view}->{wiki}->{var}->{page}); |
44 |
my $page = join '//', @{$self->{view}->{wiki}->{var}->{page}}; |
45 |
## Get content and its meta info |
46 |
my ($magic, $content) = SuikaWiki::Plugin->magic_and_content ($content); |
47 |
$magic ||= '#?SuikaWiki/0.9'; |
48 |
my $o = bless { |
49 |
param => \%main::form, page => $page, toc => [], |
50 |
magic => $magic, content => $content, |
51 |
}, 'SuikaWiki::Plugin'; |
52 |
|
53 |
my $view_def = SuikaWiki::View->definition ($view); |
54 |
if (!$view_def->check ($o)) { |
55 |
print "Status: 406 Unsupported Media Type\n"; |
56 |
$view = '-UnsupportedMediaType'; |
57 |
$view_def = SuikaWiki::View->definition ($view); |
58 |
} |
59 |
my $prop = $view_def->properties; |
60 |
|
61 |
my $opt2 = {viewdef => $view_def, prop => $prop, o => $o}; |
62 |
$self->main_pre ($opt, $opt2); ## TODO: or die |
63 |
|
64 |
my $media = $prop->{media}; |
65 |
if ($prop->{xmedia} && |
66 |
(index ($self->{view}->{wiki}->{var}->{client}->{user_agent_name}, |
67 |
'Gecko') > -1)) { ## TODO: conneg |
68 |
$media = $prop->{xmedia}; |
69 |
$o->{media} = $media; |
70 |
} |
71 |
|
72 |
if (index ($magic, 'interactive="yes"') > -1) { |
73 |
$output->set_expires (delta => 1); |
74 |
} else { |
75 |
$output->set_last_modified (time => $lm); |
76 |
$output->set_expires (delta => $media->{expires}) |
77 |
if $media->{expires} > -1; |
78 |
} |
79 |
|
80 |
|
81 |
$output->{entity}->{media_type} = $media->{type}; |
82 |
$output->{entity}->{charset} |
83 |
= $self->{view}->{wiki}->{config}->{charset}->{output} |
84 |
if $media->{charset}; |
85 |
$output->add_header_field ('Content-Style-Type' => 'text/css'); |
86 |
|
87 |
## Output HTTP message body |
88 |
my $fmt = SuikaWiki::Plugin->formatter ('view'); |
89 |
my $s = $fmt->replace ($view_def->as_string => $o, {formatter => $fmt}); |
90 |
|
91 |
$output->append_to_body ($s); |
92 |
$output->output (output => 'http-cgi'); |
93 |
|
94 |
$self->main_post ($opt, $opt2); ## TODO: or die |
95 |
@@Name: main |
96 |
@method: |
97 |
@@@: |
98 |
my $prop = $opt2->{prop}; |
99 |
if ($prop->{preprocess}) { |
100 |
exit unless &{$prop->{preprocess}} (o => $opt2->{o}); |
101 |
} |
102 |
1; |
103 |
@@Name: main_pre |
104 |
@method: |
105 |
@@@: |
106 |
1; |
107 |
@@Name: main_post |