인터위키의 위키 이름 부분을 아이콘으로 표시
여러 위키클론들이 구현하고 있는 패치. UseModWiki소스수정/InterWiki아이콘표시 와 InterWiki토론, 그리고 MoinMoin, MoniWiki 등의 구현을 참조하여 적용하였다.
- 사용법:
- 인터위키를 사용하면 예전에는 UseMod:UseModWiki 로 보이던 것이 이제는 UseModWiki 로 나온다.
- 앞의 아이콘을 클릭하면 해당 위키에서 뒤에 페이지 이름을 뺀 URL (즉 intermap 에 적힌 경로) 로 간다.
- wiki/intermap 화일에는 다음과 같은 형식으로 쓴다.
위키이름 위키URL|이미지경로
GyparkWiki http://gypark.pe.kr/cgi-bin/wiki/wiki.pl?|GyparkWiki.gif
- 즉, URL 과 이미지 경로를 "|" 로 구분해 준다. 이미지 경로가 없을 경우는 기본 아이콘을 사용한다.
- config 화일에서 $InterIconDir 변수를 추가하여 인터위키에 사용할 아이콘들이 있는 경로를 지정한다. 상대경로로 해도 되고, http: 로 시작하는 URL 을 적어도 된다. 기본값은 "./icons-inter/" 이다. (그냥 icons 디렉토리를 같이 사용할까 했는데, 따로 구분하는 게 보거나 나중에 화일을 추가 삭제할 때 더 낫겠다 싶어서 따로 분리하였다) 이 경로는 당연히 웹서버를 통해 볼 수 있는 경로여야 한다.
- 이미지 경로에 화일 이름만 적혀 있는 경우는 $InterIconDIr 아래에서 찾는다. 이미지 경로에 URL 이 적혀 있다거나, 디렉토리가 적혀 있으면 (예: my_image/icon.png, /home/user/public_html/image/icon.png 등) 그 경로를 그대로 img 태그에 넣어서 사용한다.
- 기본적으로 세 가지의 아이콘 화일이 있어야 한다. 없으면 빈 X박스가 나온다. -_-;
- icons-inter/default-inter.gif - 해당 인터위키를 위한 이미지가 따로 없을 경우, 이 아이콘이 표시된다.
- icons-inter/default-upload.gif - 화일업로드를 하여 Upload:화일명 로 적었을 때 이 아이콘이 표시된다.
- icons-inter/default-local.gif - /LocalWiki를 사용하여 (LocalWiki: 또는 Local:) 사용할 때 이 아이콘이 표시된다. ext 버전에 들어있는 아이콘은 default-inter.gif 와 동일하다. 자신의 홈페이지에 맞는 아이콘 화일의 이름을 이것으로 변경해 준다.
- UseMod:UseModWiki 로 쓴 경우만 아이콘이 나오고 [UseMod:UseModWiki] 나 [UseMod:UseModWiki 여기] 등과 같이 쓴 경우는 예전과 동일하다.
- 부작용: 양날의 칼
- 이 패치의 장점은, 아이콘이 등록되어 있는 인터위키의 경우 한 눈에 쉽게 알아볼 수 있다는 점. 마우스로 웹브라우저의 내용을 긁어서 복사할 때 페이지이름만 복사되므로 읽을 때 직관적이란 점 등
- 반대로 말하면, 아이콘이 등록되어 있지 않으면 다 똑같은 기본 아이콘으로 나오므로 어디가 어딘지 알 수 없다. 또 인터위키 이름까지 같이 긁어서 복사할 수 없으므로 페이지 편집이나 소스 보기에 들어가서 복사해야 한다.
- 막상 적용해 보니까 화면이 별로 안 예쁜 듯 해서 낭패. -_-;
config.pl 수정
$InterIconDir = "./icons-inter/";
wiki.pl 수정
환경 변수 $InterIconDir 추가
...
use vars qw(
$UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
...
$SlashLinks $InterIconDir
);
...
sub InterPageLink {
...
$url = &GetSiteUrl($site);
my ($image, $url_main);
if ($url =~ /\|/) {
($url, $image) = split(/\|/, $url, 2);
}
$url_main = $url;
return ("", $id . $punct) if ($url eq "");
...
return ("<img $ImageTag src=\"$url\" alt=\"$id\">", $punct);
}
my $link_html = '';
if (!($image)) {
$image = "default-inter.gif";
}
if (!($image =~ m/\//)) {
$image = "$InterIconDir/$image";
}
$link_html = "<A class='inter' href='$url_main'>" .
"<IMG class='inter' src='$image' alt='$site:' title='$site:'>" .
"</A>";
$link_html .= "<A class='inter' href='$url' title='$id'>$remotePage</A>";
$link_html .= "<a href=\"$url\" target=\"_blank\"><img src=\"$IconDir/newwindow.gif\" border=\"0\" alt=\"" . T('Open in a New Window') . "\" align=\"absbottom\"></a>";
return ($link_html, $punct);
}
Upload: 와 Local: , LocalWiki: 의 경우는 기본 default 이미지를 출력하도록 수정
sub GetSiteUrl {
my ($site) = @_;
my ($data, $url, $status);
if (!$InterSiteInit) {
$InterSiteInit = 1;
($status, $data) = &ReadFile($InterFile);
if ($status) {
%InterSite = split(/\s+/, $data);
}
if (!defined($InterSite{'Upload'})) {
$InterSite{'Upload'} = "$UploadUrl\/|default-upload.gif";
}
if (!defined($InterSite{'LocalWiki'})) {
$InterSite{'LocalWiki'} = $ScriptName . &ScriptLinkChar() . "|default-local.gif";
}
if (!defined($InterSite{'Local'})) {
$InterSite{'Local'} = $ScriptName . &ScriptLinkChar() . "|default-local.gif";
}
}
$url = $InterSite{$site} if (defined($InterSite{$site}));
return $url;
}
대괄호로 둘러싼 경우는 아이콘 표시는 하지 않지만, intermap 화일 형식이 바뀌었기 때문에 처리는 해 주어야 한다.
sub StoreBracketInterPage {
...
$url = &GetSiteUrl($site);
my ($image, $url_main);
if ($url =~ /\|/) {
($url, $image) = split(/\|/, $url, 2);
}
$url_main = $url;
if ($text ne "") {
return "[$id $text]" if ($url eq "");
...
$url .= $remotePage;
my $link_html = '';
$link_html = "<A class='inter' href='$url' title='$id'>[$text]</A>" .
"<a href=\"$url\" target=\"_blank\">" .
"<img src=\"$IconDir/newwindow.gif\" border=\"0\" alt=\"" . T('Open in a New Window') . "\" align=\"absbottom\">" .
"</a>";
return &StoreRaw($link_html);
}
wiki.css
아이콘의 UseModWiki스타일쉬트
IMG.inter
{
width: 16;
height: 16;
border: none;
}
Notes
위키위키분류