-
- 1. 화면 상단 메뉴바(GotoBar) 개선
-
-
- 1.1. 어떻게 고쳐졌나...
-
-
- 1.1.1. 바로가기
-
- 1.1.2. 테이블 대신 리스트 사용
-
- 1.1.3. DIV
-
- 1.1.4. 환경설정 링크
-
1.2. 부작용
-
- 1.3. 알려진 문제점
-
- 1.4. wiki.pl 수정
-
- 1.5. wiki.css 수정
-
- 1.6. wiki_print.css 수정
-
- 1.7. translations/ko_KR.UTF-8.pl , ko_KR.EUC-KR.pl 수정
-
- 1.8. 추가 업데이트 내역
-
- 1.9. 사용자 의견
-
1. 화면 상단 메뉴바(GotoBar) 개선
메뉴바를 뜯어 고침.
1.1. 어떻게 고쳐졌나...
goto매크로와 같은 동작을 하는 /바로가기폼을 추가했음. 바로가기를 누르면 해당 페이지로 이동.
기존의 goto매크로의 경우, A라는 페이지에서 매크로에 "B"페이지 이름을 입력하고 버튼을 누르면,
- 물음표링크를 사용하는 경우는 "wiki.pl?action=browse&id=B"를 부르고,
- 슬래쉬링크를 사용하는 경우는 "wiki.pl/A?action=browse&id=B"를 부른다. 생뚱맞은 A 페이지 이름이 URL에 들어감
어쨌거나 둘 다 제대로 B페이지를 불러오기는 하는데, 생긴게 맘에 안 들어서 자바스크립트의 onClick 이벤트를 쓰도록 했음.
- 클릭하면 "wiki.pl/B" 를 부르게 한다. (물음표링크를 쓰는 위키라면 wiki.pl?B) 가장 일반적인 페이지 주소 형태다
- 대신 자바스크립트를 지원하지 않는 브라우저에서는 POST메쏘드로 전송이 되어서 URL은 wiki.pl로만 나온다. 그래도 B페이지를 잘 불러오긴 한다.
Alt+G를 누르면 바로가기 텍스트필드로 커서를 이동시킬 수 있다. FF에서는 동작하지 않는다.
1.1.2. 테이블 대신 리스트 사용
기존 메뉴바는 1행짜리 테이블인데, 검색 필드에 "내용출력" 체크박스가 추가된 데 이어서 바로가기 필드까지 추가되는 바람에, 브라우저 창의 폭을 어지간히 늘리지 않으면 한 줄짜리 테이블로는 왼쪽의 메뉴 링크들이 너무 더덕더덕 붙고 셀마다 두줄로 나오는 등 대책이 없었다. =.=;
그래서 아예 처음부터 두 줄 높이를 잡고 테이블을 하려니까 이건 이거대로 셀끼리 열을 맞추는게 맘대로 안 되어서... (왼쪽을 죄다 rowspan을 할 걸 그랬나) 아예 생각난 김에 테이블을 버리고 리스트로 바꿨다. 소스보기를 하면 알 수 있겠지만, 기존에 테이블의 각 셀에 들어가던 것이 이제는 UL(순서없는 리스트)의 LI항목이 되었음
더 자세히 얘기하면 메뉴바에 있는 항목들을 세 그룹으로 나누어서
- 메뉴 그룹 - HomePage, 변경내역, 페이지목록, 상위페이지(필요한경우), UserGotoBar, UserGotoBar2~4, 랜덤페이지(환경설정에 체크한 경우), 링크, 관리(어드민의 경우)
- 사용자정보 그룹 - 로그인한 사용자의 경우는 자기 아이디, 그 아래 줄에 환경설정, 로그아웃 / 로그인하지 않은 사용자는 로그인
- 검색 그룹 - 바로가기, 검색
세 그룹이 각각 별개의 리스트로 구성되었음.
세 그룹 배치를 위해 DIV 사용. UseModWiki스타일쉬트에서 반영해주어야 한다.
- DIV.gotobar - 전체 메뉴바
- 다음 순서대로 html 출력되고, search와 user div박스는 float:right 를 써서 우측으로 보냄
- DIV.gotobar_search - 검색 그룹
- DIV.gotobar_user - 사용자정보 그룹
- DIV.gotobar_menu - 메뉴 그룹
"환경설정" 링크는 로그인했을 때만 나타나게 했음
- IE와 FF가 스타일쉬트 적용에 좀 차이가 있어서... 외관에 좀 차이가 난다.
- 메뉴 그룹의 경우, 브라우저 폭이 넓을 때는 좀 시원시원하게 간격을 두고 출력되면 좋겠는데, 그렇게 할 방법을 못 찾았음.
- width:20% 와 같은 식으로 스타일을 줬더니 FF쪽에서 난리가 난다.
- IE와 FF 양쪽에서 잘 통하는 묘수가 있는 분의 제보를 기다림.
- 페이지 편집 상태에서, 바로가기 폼을 사용해서 다른 페이지로 이동하려고 할 경우 /작성취소시확인 패치에 의해서 대화 상자가 뜨는데, 이 때 취소를 눌러도 한 번 더 상자가 떠서 다시 취소를 해 주어야 한다. 두 번 중 한번이라도 확인을 누르면 이동해 버림. FF에서는 한 번만 뜸.
1.4. wiki.pl 수정
$GotoTextFieldId 전역 변수 추가 - goto매크로가 있는 페이지를 출력하게 되면, 메뉴바의 바로가기와 매크로의 바로가기의 텍스트 필드 id값을 별개로 주어야 해서...
- 혹시 자바스크립트에서 버튼에 onclick 이벤트가 불렸을 때, "내 자신이 속해있는 폼"을 가리킬 수 있는 방법을 아시는 분 제보 부탁. 그러면 굳이 id를 별개로 할 필요 없이 "내 자신이 속해 있는 폼.goto.value" 이런 식으로 페이지이름을 얻어 올 수 있을 듯
use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts
...
$UseShortcutPage $SectionNumber $AnchorPattern $GotoTextFieldId);
GetGotoBar 함수 싸그리 바뀜
sub GetGotoBar {
my ($id) = @_;
my ($main, $bar_menu, $bar_user, $bar_search);
$bar_menu .= "<DIV class='gotobar_menu'>\n";
$bar_menu .= "<UL>\n";
$bar_menu .= "<LI>"
. &GetPageLink($HomePage).&GetPageLinkText($HomePage, "[f]")
. "</LI>\n";
$bar_menu .= "<LI>"
. &GetPageLink(T($RCName)).&ScriptLink("action=rc", "[r]")
. "</LI>\n";
$bar_menu .= "<LI>"
. &ScriptLink("action=index", T('Index')."[i]")
. "</LI>\n";
if ($id =~ m|/|) {
$main = $id;
$main =~ s|/.*||;
$bar_menu .= "<LI>"
. "<img src=\"$IconUrl/parentpage.gif\" border=\"0\" alt=\""
. T('Main Page:') . " $main\" align=\"absmiddle\">"
. &GetPageLink($main)
. "</LI>\n";
}
if ($UserGotoBar ne '') {
$bar_menu .= "<LI>" . $UserGotoBar . "</LI>\n";
}
foreach ($UserGotoBar2, $UserGotoBar3, $UserGotoBar4) {
if ($_ ne '') {
$bar_menu .= "<LI>" . $_ . "</LI>\n";
}
}
if (&GetParam("linkrandom", 0)) {
$bar_menu .= "<LI>" . &GetRandomLink() . "</LI>\n";
}
$bar_menu .= "<LI>"
. &ScriptLink("action=links", T('Links'))
. "</LI>\n";
if (&UserIsAdmin()) {
$bar_menu .= "<LI>"
. &ScriptLink("action=adminmenu", T('Admin'))
. "</LI>\n";
}
$bar_menu .= "</UL>";
$bar_menu .= "</DIV>\n";
$bar_user .= "<DIV class='gotobar_user'>\n";
$bar_user .= "<UL>\n";
if (!&LoginUser()) {
$bar_user .= "<LI>"
. &ScriptLink("action=login&pageid=$pageid", T('Login')."[l]")
. "</LI>\n";
}
else {
$bar_user .= "<LI>"
. &GetPageLink(&GetParam('username')) . "</LI>\n"
. "<LI>"
. &GetPrefsLink() . " | "
. &ScriptLink("action=logout", T('Logout'). "[l]")
. "</LI>\n";
}
$bar_user .= "</UL>";
$bar_user .= "</DIV>\n";
$bar_search .= "<DIV class='gotobar_search'>\n";
$bar_search .= "<UL>\n";
$bar_search .= "<LI>" . &GetGotoForm() . "</LI>\n";
$bar_search .= "<LI>" . &GetSearchForm() . "</LI>\n";
$bar_search .= "</UL>";
$bar_search .= "</DIV>\n";
return
"<DIV class='gotobar'>"
. $bar_search
. $bar_user
. $bar_menu
. "</DIV>"
. "<HR class='gotobar'>\n"
;
}
바로가기 폼을 만드는 GetGotoForm 함수를 추가하는데, 이건 /바로가기폼에서 다룬다.
스타일 등의 일관성을 위해서, 검색 폼을 만드는 GetSearchForm 함수도 통채로 수정
sub GetSearchForm {
my ($result);
my $checked = &GetParam("context","");
$result =
&GetFormStart()
. &GetHiddenValue("dosearch", 1)
. $q->textfield(
-name => "search",
-class => "search",
-size => "15",
-accesskey => "s",
-title => "Alt + s",
)
. $q->checkbox(
-name => 'context',
-checked => ($checked)?1:'',
-value => 'on',
-label => T('Context'),
)
. " "
. $q->submit(
-class => "search",
-name => "Submit",
-value => T("Search"),
)
. $q->endform
;
return $result;
}
상단 메뉴바에 폼이 하나 더 생겼기 때문에, 페이지 편집하다가 미리 보기를 했을때 제대로 안 나온다. 미리 보기 창을 띄우는 부분 수정
sub DoEdit {
...
function preview()
{
var w = window.open("", "Preview", "width=640,height=480,resizable=1,statusbar=1,scrollbars=1");
w.focus();
var body = '<html><head><title>Wiki Preview</title><meta http-equiv="Content-Type" content="text/html; charset=$HttpCharset"></head>';
// 아래 한 줄 (이 주석은 넣지 말 것)
body += '<body><form method="post" action="$ScriptName" accept-charset="$HttpCharset" name="form_edit">';
body += '<input type="hidden" name="id" value="$id">';
body += '<input type="hidden" name="action" value="preview"><input type=hidden name="text"></form></body></html>';
w.document.open();
w.document.charset = '$HttpCharset';
w.document.write(body);
w.document.close();
// 아래 두 줄 (이 주석은 넣지 말 것)
w.document.form_edit.text.value = window.document.form_edit.text.value;
w.document.form_edit.submit();
}
...
}
1.5. wiki.css 수정
UseModWiki스타일쉬트도 수정해야 한다. 기존에 있던 TABLE, TR, TD에 .gotobar류의 항목들 대신 아래의 항목을 사용함
DIV.gotobar {
border-top: 2px solid silver;
border-bottom: 2px solid silver;
}
DIV.gotobar_menu {
margin: 0;
padding: 5px 5px 5px 5px;
height: 60px;
text-align: left;
}
DIV.gotobar_user {
float: right;
margin: 0 0 0 10px;
padding: 2px 5px 2px 5px;
height: 60px;
border-left: 1px solid gray;
}
DIV.gotobar_search {
float: right;
margin: 0 0 0 10px;
padding: 2px 5px 2px 5px;
height: 60px;
border-left: 1px solid gray;
}
DIV.gotobar UL {
margin: 0;
padding: 0;
list-style: none;
}
DIV.gotobar LI {
margin: 0;
vertical-align: baseline;
padding: 2px 0 2px 0;
}
DIV.gotobar_menu LI {
display: inline;
height: 30px;
margin: 3px 20px 0 0;
text-align: center;
}
DIV.gotobar_user LI {
text-align: center;
margin: 0;
}
INPUT.goto, INPUT.search {
height: 22px;
}
DIV.gotobar LI FORM {
display: inline;
}
DIV.gotobar_search DIV {
display: inline;
}
DIV.gotobar A:link,
DIV.gotobar A:visited,
DIV.gotobar A:active,
DIV.gotobar A:hover
{
background: transparent;
color: blue;
text-decoration: none;
}
DIV.gotobar A:hover
{
text-decoration: underline;
}
HR.gotobar {
border-color: silver;
margin-top: 2px;
height: 2px;
}
1.6. wiki_print.css 수정
프린트용 스타일쉬트도 마찬가지로 TABLE.gotobar 대신에 DIV.gotobar를 사용
DIV.gotobar {
display: none;
}
1.7. translations/ko_KR.UTF-8.pl , ko_KR.EUC-KR.pl 수정
다음 항목 추가
Search
검색
1.8. 추가 업데이트 내역
위키위키분류