################################################################################
#
#
カレンダを表示します。
#
# {{calendar カレンダ名}}
#
#
# カレンダの「<<」をクリックすると前月、
# 「>>」をクリックすると翌月、
# 年月をクリックするとその月のカレンダとページ内容を一覧表示します。
# また、カレンダの日付をクリックすると該当する日付のページを表示
# (ページが存在しない場合は編集画面を表示)します。
#
#
# オプションで編集画面に見本として表示されるテンプレートページを指定することができます。
#
#
# {{calendar カレンダ名[,テンプレートとなるページ名[,表示月指定]]}}
#
#
# 表示月指定に[半角10進数]nextと書くと、[半角10進数]月後のカレンダーを表示します。
# 表示月指定に[半角10進数]prevと書くと、[半角10進数]月前のカレンダーを表示します。
# 表示月指定に[半角で1〜12]と書くと、[1〜12]月のカレンダーを表示します。
# その他の表示月指定は無視されます。
#
#
# 以下にカレンダプラグインの使用例を示します。
#
#
# {{calendar 予定表}}
# {{calendar 予定表,予定表テンプレート}}
# {{calendar 予定表,予定表テンプレート,6}} : 6月のカレンダー
# {{calendar 予定表, ,1next}} : 翌月のカレンダー
# {{calendar 予定表, ,2prev}} : 先々月のカレンダー
#
#
# CSSで表示形式を変更することも出来ます。使用しているクラス名は以下の通りです。
#
#
# - today - 今日の日付
# - have - 予定や日記のある日付
# - navi - ナビゲーションバー
# - week - 曜日
# - calendar - カレンダーのtable部分
# - plugin-calendar - calendarプラグインの出力全体
#
#
# 使用しているid名は以下の通りです。
#
#
# - calendar-[半角で1〜12] - [1〜12]月が指定された時
# - calendar-[半角10進数]next - [半角10進数]月後を指定した時
# - calendar-[半角10進数]prev - [半角10進数]月前を指定した時
# - calendar-sun - 日曜日
# - weekday - 平日
# - calendar-sat - 土曜日
#
#
################################################################################
package plugin::calendar::Calendar;
use strict;
use plugin::calendar::CalendarHandler;
#===============================================================================
# コンストラクタ
#===============================================================================
sub new {
my $class = shift;
my $self = {};
return bless $self,$class;
}
#===============================================================================
# パラグラフ
#===============================================================================
sub paragraph {
my $self = shift;
my $wiki = shift;
my $name = shift;
my $template = shift;
my $argmon = shift;
# my $align = shift;
my $error_message = "";
# 存在しないテンプレートを指定された場合。
undef $template if !$wiki->page_exists($template);
# # 表示位置指定がない場合。
# $align = "left" if $align eq "";
# エラーチェック
$error_message = "カレンダ名が指定されていません。" if($name eq "");
# $error_message = "表示月が指定されていません。" if($argmon eq "");
# $error_message = "位置指定が間違っています。[$align]" if !(($align eq "center") || ($align eq "right") || ($align eq "left"));
return Util::paragraph_error($error_message) if !($error_message eq "");
my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time());
$year += 1900;
$mon += 1;
my $id = "";
# 表示月指定を解釈
if ($argmon =~ /(\d*)next/i) { # 相対指定(次月)
my $step = ($1 > 0) ? $1 : 1;
$mon += $step;
$id = "calendar-${step}next";
} elsif ($argmon =~ /(\d*)prev/i) { # 相対指定(前月)
my $step = ($1 > 0) ? $1 : 1;
$mon -= $step;
$id = "calendar-${step}prev";
} elsif ($argmon =~ /(\d+)/) { # 絶対指定
if ($1>=1 and $1<=12) {
$year += (($1 - $mon) > 6) ? -1 : 0;
$year += (($1 - $mon) < -6) ? 1 : 0;
$mon = $1;
$id = "calendar-$1";
}
} else { # 指定なし
}
# 年月の正規化
if ($mon > 0) {
$year += int (($mon - 1) / 12);
} else {
$year += int (($mon - 12) / 12);
}
$mon = ($mon - 1) % 12 + 1;
return &plugin::calendar::CalendarHandler::make_calendar($wiki,$year,$mon,$name,$template,$id);
}
1;