############################################################
#
# <p>添付した画像ファイルを縮小表示します。</p>
# <pre>
# {{thumbnail ファイル名[,ページ名[,サイズ[,オプション]]]}}
# </pre>
# <p>ページ名を指定することで、別のページに添付された
#    ファイルを参照することもできます。</p>
# <p>環境設定で複数のサイズが定義されている場合、そのサイズが指定できます。</p>
# <p>オプションは以下が使えます</p>
# <du>
# <dt>alt:振替テキスト</dt>
#    <dd>画像ファイルに任意の alt 属性を付加(初期値:ファイル名)</dd>
# <dt>float:left or right</dt>
#    <dd>テキストの回りこみ指定</dd>
# </du>
# <p>例）</p>
# <pre>
# {{thumbnail sample.jpg,,large}}
# </pre>
#
############################################################
# このプラグインはKGさん作 image プラグインを流用させて
# いただきました。感謝。
############################################################
package plugin::thumbnail::Inline;
use Util;
use plugin::thumbnail::Delete;
use Image::Info qw(image_info);
use strict;
#===========================================================
# コンストラクタ
#===========================================================
sub new {
	my $class = shift;
	my $self = {};
	return bless $self,$class;
}

#===========================================================
# インラインメソッド
#===========================================================
sub inline {
	my $self = shift;
	my $wiki = shift;
	my $file = shift;
	my $page = shift;
	my $size = shift;
	my @option = @_;
	
	if($file eq ""){
		return &Util::inline_error("ファイルが指定されていません。","HTML");
	}
	if($page eq ""){
		$page = $wiki->get_CGI()->param("page");
	}
	unless($wiki->can_show($page)){
		return &Util::inline_error("ページの参照権限がありません。","HTML");
	}
	
	my $link = &create_image_link($wiki,$page,$file);
	my $url = &create_image_url($wiki,$page,$file,$size);
	my $filename = &create_image_filename($wiki,$page,$file);
	unless(-f $filename){
		plugin::thumbnail::Delete::delete_of_file($wiki, $page, $file);
		return &Util::inline_error("ファイルがみつかりません。","HTML");
	}
	my $info = image_info($filename);
	if(exists $info->{error}){
		return &Util::inline_error("画像ファイルの読み込みに失敗しました。","HTML");
	}
	
	# 拡張オプション解析
	my ($alt, $float) = ($file);
	foreach (@option) {
		if ( /^(a|alt):(.*)$/i ) {
			$alt = $2;
		} elsif ( /^(f|float):(left|right)$/i ) {
			$float = $2;
		}
	}
	
	my $option = {
		ALT      => $alt,
		FLOAT    => $float,
		LINK     => $link,
		URL      => $url,
		FILENAME => $filename,
	};
	return $self->create_image_tag($page,$file,$option);
}

sub create_image_filename {
	my $wiki = shift;
	my $page = shift;
	my $file = shift;
	
	return $wiki->config('attach_dir')."/".&Util::url_encode($page).".".&Util::url_encode($file);
}

sub create_cache_filename {
	my $wiki = shift;
	my $page = shift;
	my $file = shift;
	my $size = shift;
	
	return $wiki->config('thumbnail_dir')."/".&Util::url_encode($page).".".&Util::url_encode($file).'.'.&Util::url_encode($size);
}

sub create_image_link {
	my $wiki = shift;
	my $page = shift;
	my $file = shift;
	
	return $wiki->config('script_name')."?action=ATTACH&amp;".
		"page=".&Util::url_encode($page)."&amp;".
		"file=".&Util::url_encode($file);
}

sub create_image_url {
	my $wiki = shift;
	my $page = shift;
	my $file = shift;
	my $size = shift;
	
	return $wiki->config('script_name')."?action=".
		$plugin::thumbnail::Install::Handler."&amp;".
		"page=".&Util::url_encode($page)."&amp;".
		"file=".&Util::url_encode($file)."&amp;".
		"size=".&Util::url_encode($size);
}

sub create_image_tag {
	my $self = shift;
	my $page = shift;
	my $file = shift;
	my $option = shift;
	
	my $alt    = $option->{ALT};
	my $float  = $option->{FLOAT};
	my $link   = $option->{LINK};
	my $url    = $option->{URL};
	
	return  ((defined($link))?'<a href="'.$link.'">':'').
			'<img class="wikiimage" src="'.$url.'"'.
				((defined($alt))?' alt="'.&Util::escapeHTML($alt).'"':'').
				((defined($float))?' style="float:'.$float.';"':'').
			'>'.
			((defined($link))?'</a>':'');
}

1;
