#!perl
use lib '.';
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Jcode;
my $title = 'TinyTiny';
my $data_file = './data.txt';
&main;
sub main {
my $query = CGI->new;
my $mode = &initialize($query);
my $html = &$mode($query);
&output($query, $mode, $html) if (defined($html));
}
sub initialize {
my $query = shift;
my $mode = $query->param('mode');
$mode = 'show' unless (grep { $_ eq $mode} ('show', 'edit','save'));
return $mode;
}
sub output {
my ($query, $mode, $html) = @_;
my $url = $query->url;
my $style = 'padding: 3px; text-align: right; background-color: #dddddd;';
print $query->header('-charset' => 'EUC-JP'), $query->start_html(-title => $title), "\n";
printf("
\n", $url, CGI::escapeHTML($title), $page_link);
my $ext_mode = ($mode eq 'show') ? 'edit' : 'show';
print qq([$ext_mode]
\n);
print $html;
print $query->end_html;
}
sub show {
my $query = shift;
my $text = &page_read($query); # (1)
$text = jcode('(ページが未作成です)')->euc if (not defined($text));
$text = CGI::escapeHTML($text); # (2)
$text =~ s/\r?\n/
\n/g;
$text =~ s/\t/ /g;
$text =~ s/( +)/sprintf('%s<\/span>', length($1) * 0.5, $1)/ge;
return $text;
}
sub edit {
my $query = shift;
my $text = &page_read($query);
my $html = $query->start_form(); # (3)
$html .= $query->textarea(-name=>'text', -default=>$text, -rows=>15, -columns=>60) . $query->br;
$html .= $query->submit(-name=>'mode', -value=>'save');
$html .= $query->end_form();
return $html;
}
sub save {
my $query = shift;
my $result = &page_write($query); # (4)
return CGI::escapeHTML($result);
}
sub page_read {
my $query = shift;
my $file = $data_file;
my $text = undef;
if (-f $file and open(IN, $file)) {
local $/ = undef;
$text = ;
close(IN);
}
return $text;
}
sub page_write {
my $query = shift;
my $text = $query->param('text');
my $file = $data_file;
my $result = "ページを更新できませんでした。";
if (defined($text) and length($text)) {
if (open(OUT, ">$file")) {
$text =~ s/(:?\x0D\x0A|\x0D|\x0A)/\n/g;
print OUT jcode($text)->euc;
close OUT;
$result = "ページが更新されました。";
}
} elsif (unlink($file)) {
$result = "ページが削除されました。";
}
return jcode($result)->euc;
}