################################################################################ # # <p>カレンダを表示します。</p> # <pre> # {{calendar カレンダ名}} # </pre> # <p> # カレンダの「<<」をクリックすると前月、 # 「>>」をクリックすると翌月、 # 年月をクリックするとその月のカレンダとページ内容を一覧表示します。 # また、カレンダの日付をクリックすると該当する日付のページを表示 # (ページが存在しない場合は編集画面を表示)します。 # </p> # <p> # オプションで編集画面に見本として表示されるテンプレートページを指定することができます。 # </p> # <pre> # {{calendar カレンダ名[,テンプレートとなるページ名[,表示月指定]]}} # </pre> # <p> # 表示月指定に<code>[半角10進数]next</code>と書くと、[半角10進数]月後のカレンダーを表示します。 # 表示月指定に<code>[半角10進数]prev</code>と書くと、[半角10進数]月前のカレンダーを表示します。 # 表示月指定に<code>[半角で1~12]</code>と書くと、[1~12]月のカレンダーを表示します。 # その他の表示月指定は無視されます。 # </p> # <p> # 以下にカレンダプラグインの使用例を示します。 # </p> # <pre> # {{calendar 予定表}} # {{calendar 予定表,予定表テンプレート}} # {{calendar 予定表,予定表テンプレート,6}} : 6月のカレンダー # {{calendar 予定表, ,1next}} : 翌月のカレンダー # {{calendar 予定表, ,2prev}} : 先々月のカレンダー # </pre> # <p> # CSSで表示形式を変更することも出来ます。使用しているクラス名は以下の通りです。 # </p> # <ul> # <li>today - 今日の日付</li> # <li>have - 予定や日記のある日付</li> # <li>navi - ナビゲーションバー</li> # <li>week - 曜日</li> # <li>calendar - カレンダーのtable部分</li> # <li>plugin-calendar - calendarプラグインの出力全体</li> # </ul> # <p> # 使用しているid名は以下の通りです。 # </p> # <ul> # <li>calendar-[半角で1~12] - [1~12]月が指定された時</li> # <li>calendar-[半角10進数]next - [半角10進数]月後を指定した時</li> # <li>calendar-[半角10進数]prev - [半角10進数]月前を指定した時</li> # <li>calendar-sun - 日曜日</li> # <li>weekday - 平日</li> # <li>calendar-sat - 土曜日</li> # </ul> # ################################################################################ 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;