-
- 1. 단축키 개선
-
-
- 1.1. wiki.pl 수정
-
- 1.2. wikiscript.js 수정
-
- 1.3. 추가 업데이트 내역
-
- 1.4. 사용자 의견
-
1. 단축키 개선
/단축키에서 구현한 것을 개선해서, 키 입력 한 번으로 (엔터를 칠 필요 없이) 원하는 페이지로 이동하고자 함. 아이디어는 [클리앙]의 게시판 단축키와 [태터툴즈]의 단축키 지원 소식에서 얻음.
- 필수 요구 사항: 없음
- 선택 요구 사항: 없음
1.1. wiki.pl 수정
일일이 수정한 부분 골라내기 힘들어서 그냥 diff 출력을 옮김.
diff -u -r1.259 -r1.263
--- wiki.pl 24 Jan 2005 08:35:57 -0000 1.259
+++ wiki.pl 5 Feb 2005 03:00:08 -0000 1.263
@@ -33,8 +33,8 @@
### added by gypark
### wiki.pl 버전 정보
use vars qw($WikiVersion $WikiRelease $HashKey);
-$WikiVersion = "0.92K3-ext1.72a";
-$WikiRelease = "2005-01-24";
+$WikiVersion = "0.92K3-ext1.73";
+$WikiRelease = "2005-02-05";
$HashKey = "salt"; # 2-character string
###
@@ -100,7 +100,8 @@
$ViewCount $AnchoredFreeLinkPattern %UserInterest %HiddenPage
$pageid $IsPDA $MemoID
$QuotedFullUrl
- %MacroFunc %MacroFile);
+ %MacroFunc %MacroFile
+ $UseShortcut $UseShortcutPage);
###
###############
@@ -248,6 +249,9 @@
umask 0;
$TableOfContents = "";
+# 단축키
+$UseShortcut = 1;
+$UseShortcutPage = 1;
# The "main" program, called at the end of this script file.
sub DoWikiRequest {
@@ -1035,7 +1039,7 @@
} else {
my $bookmark = &GetParam('bookmark',-1);
print "<br>" . &ScriptLink("action=bookmark&time=$Now",
- T('Update my bookmark timestamp'));
+ T('Update my bookmark timestamp')." [m]");
print " (".
Ts('currently set to %s', &TimeToText($bookmark)).
")<br>\n";
@@ -1862,7 +1866,7 @@
### page 처음에 bottom 으로 가는 링크를 추가
### #EXTERN
if (&GetParam('InFrame','') eq '') {
- $result .= "\n<div align=\"right\"><a accesskey=\"z\" name=\"PAGE_TOP\" href=\"#PAGE_BOTTOM\">". T('Bottom') . "</a></div>\n";
+ $result .= "\n<div align=\"right\"><a accesskey=\"z\" name=\"PAGE_TOP\" href=\"#PAGE_BOTTOM\">". T('Bottom')." [b]" . "</a></div>\n";
}
###
###############
@@ -1974,13 +1978,67 @@
if ($FreeLinks) {
$id = &FreeToNormal($id);
}
- $bodyExtra .= qq(ondblclick="location.href='$ScriptName?action=edit&id=$id'");
+ $bodyExtra .= qq( ondblclick="location.href='$ScriptName?action=edit&id=$id'" );
}
}
-
###
###############
+### 단축키
+ my $headExtra;
+ if ($UseShortcut) {
+ my $shortCutUrl = "$ScriptName".&ScriptLinkChar();
+ my $shortCutLogin = &LoginUser()?"logout":"login";
+ my $shortCutHome = &FreeToNormal($HomePage);
+
+ $headExtra .= <<EOH;
+<script>
+<!--
+var key = new Array();
+
+key['f'] = "${shortCutUrl}$shortCutHome";
+key['i'] = "${shortCutUrl}action=index";
+key['r'] = "${shortCutUrl}action=rc";
+key['l'] = "${shortCutUrl}action=$shortCutLogin";
+key['m'] = "${shortCutUrl}action=bookmark&time=$Now";
+
+key['t'] = "#PAGE_TOP";
+key['b'] = "#PAGE_BOTTOM";
+
+EOH
+
+ if ($UseShortcutPage) {
+ my $shortCutId = $q->param('id');
+ $shortCutId = $id if ($shortCutId eq '');
+ my $shortCutRevision = &GetParam('revision','');
+
+ $headExtra .= <<EOH;
+key['e'] = "${shortCutUrl}action=edit&id=$shortCutId";
+key['v'] = "${shortCutUrl}action=edit&id=$shortCutId&revision=$shortCutRevision";
+key['h'] = "${shortCutUrl}action=history&id=$shortCutId";
+key['d'] = "${shortCutUrl}action=browse&diff=5&id=$shortCutId";
+
+EOH
+ }
+
+ $headExtra .= <<EOH;
+document.onkeypress = GetKeyStroke;
+-->
+</script>
+EOH
+ }
+ $html .= $headExtra;
+
# Insert any other body stuff (like scripts) into $bodyExtra here
# (remember to add a space at the beginning to separate from prior text)
$html .= "</HEAD><BODY $bodyExtra>\n";
@@ -2068,7 +2126,7 @@
###############
}
if ($UseDiff) {
- $result .= ' ' . &ScriptLinkDiff(4, $id, T('(diff)'), $rev);
+ $result .= ' ' . &ScriptLinkDiff(4, $id, T('(diff [d])'), $rev);
}
$result .= '<br>';
@@ -2092,7 +2150,7 @@
}
###
###############
- $result .= &GetHistoryLink($id, T('History'));
+ $result .= &GetHistoryLink($id, T('History')." [h]");
if ($rev ne '') {
$result .= ' | ';
$result .= &GetPageLinkText($id, T('View current revision'));
@@ -2103,9 +2161,9 @@
if (&UserCanEdit($id, 1)) {
if ($rev ne '') {
$result .= &GetOldPageLink('edit', $id, $rev,
- Ts('Edit revision %s of this page', $rev));
+ Ts('Edit revision %s of this page', $rev)." [v]");
} else {
- $result .= &GetEditLink($id, T('Edit text of this page'));
+ $result .= &GetEditLink($id, T('Edit text of this page')." [e]");
}
} else {
###############
@@ -2178,7 +2236,7 @@
if ($CheckTime) {
$result .= "<i>" . sprintf("%8.3f",&tv_interval($StartTime)) . " sec </i>";
}
- $result .= "<a accesskey=\"x\" name=\"PAGE_BOTTOM\" href=\"#PAGE_TOP\">" . T('Top') . "</a></DIV>\n" . $q->end_html;
+ $result .= "<a accesskey=\"x\" name=\"PAGE_BOTTOM\" href=\"#PAGE_TOP\">" . T('Top')." [t]" . "</a></DIV>\n" . $q->end_html;
###
return $result;
@@ -2212,9 +2270,9 @@
$bartext = "\n<TABLE class='gotobar' width='100%'>";
$bartext .= &GetFormStart();
$bartext .= "<TR class='gotobar'>\n<TD class='gotohomepage'>";
- $bartext .= &GetPageLink($HomePage);
- $bartext .= "</TD>\n<TD class='gotoindex'>" . &ScriptLink("action=index", T('Index'));
- $bartext .= "</TD>\n<TD class='gotorecentchanges'>" . &GetPageLink(T($RCName));
+ $bartext .= &GetPageLink($HomePage).&GetPageLinkText($HomePage, " [f]");
+ $bartext .= "</TD>\n<TD class='gotoindex'>" . &ScriptLink("action=index", T('Index')." [i]");
+ $bartext .= "</TD>\n<TD class='gotorecentchanges'>" . &GetPageLink(T($RCName)).&ScriptLink("action=rc", " [r]");
if ($id =~ m|/|) {
$main = $id;
$main =~ s|/.*||; # Only the main page name (remove subpage)
@@ -2252,12 +2310,12 @@
$bartext .= "</TD>\n<TD class='gotolinks'>" . &ScriptLink("action=links", T('Links'));
# if (($UserID eq "113") || ($UserID eq "112")) {
if (!&LoginUser()) {
- $bartext .= "</TD>\n<TD class='gotologin'>" . &ScriptLink("action=login", T('Login'));
+ $bartext .= "</TD>\n<TD class='gotologin'>" . &ScriptLink("action=login", T('Login')." [l]");
}
else {
$bartext .= "</TD>\n<TD class='gotologin'>".
&GetPageLink(&GetParam('username'));
- $bartext .= "</TD>\n<TD class='gotologin'>" . &ScriptLink("action=logout", T('Logout'));
+ $bartext .= "</TD>\n<TD class='gotologin'>" . &ScriptLink("action=logout", T('Logout'). " [l]");
}
$bartext .= "</TD>\n<TD class='gotosearch'>" . &GetSearchForm();
if ($UserGotoBar ne '') {
@@ -5249,11 +5307,13 @@
my ($id, $action, $text, $search);
$ClickEdit = 0; # luke added
+ $UseShortcutPage = 0; # 단축키
$action = &GetParam("action", "");
$id = &GetParam("id", "");
if ($action ne "") {
$action = lc($action);
if ($action eq "edit") {
+ $UseShortcut = 0; # 단축키
&DoEdit($id, 0, 0, "", 0) if &ValidIdOrDie($id);
} elsif ($action eq "unlock") {
&DoUnlock();
@@ -5264,12 +5324,15 @@
### titleindex action 추가
### from Bab2's patch
} elsif ($action eq "titleindex") {
+ $UseShortcut = 0;
&DoTitleIndex();
###
###############
} elsif ($action eq "help") { # luke added
+ $UseShortcut = 0;
&DoHelp(); # luke added
} elsif ($action eq "preview") { # luke added
+ $UseShortcut = 0;
&DoPreview(); # luke added
} elsif ($action eq "links") {
&DoLinks();
@@ -5301,9 +5364,11 @@
&DoBookmark();
### file upload
} elsif ($action eq "upload") {
+ $UseShortcut = 0;
&DoUpload();
### oekaki
} elsif ($action eq "oekaki") {
+ $UseShortcut = 0;
&DoOekaki();
### 관심 페이지
} elsif ($action eq "interest") {
@@ -5319,6 +5384,7 @@
&DoComments($id) if &ValidIdOrDie($id);
### rss from usemod1.0
} elsif ($action eq "rss") {
+ $UseShortcut = 0;
&DoRss();
### Trackback
} elsif ($action eq "send_ping") {
@@ -5329,6 +5395,7 @@
###############
} else {
# Later improve error reporting
+ $UseShortcut = 0;
&ReportError(Ts('Invalid action parameter %s', $action));
}
return;
@@ -5367,6 +5434,7 @@
# Handle posted pages
if (&GetParam("oldtime", "") ne "") {
$id = &GetParam("title", "");
+ $UseShortcut = 0;
&DoPost() if &ValidIdOrDie($id);
return;
}
@@ -5632,7 +5700,9 @@
if ($EditNote ne '') {
print T($EditNote) . '<br>'; # Allow translation
}
- print $q->submit(-name=>'Save', -value=>T('Save')), "\n";
+### 단축키
+# print $q->submit(-name=>'Save', -value=>T('Save')), "\n";
+ print $q->submit(-accesskey=>'r', -name=>'Save', -value=>T('Save')." [alt+r]"), "\n";
$userName = &GetParam("username", "");
if ($userName ne "") {
print ' (', T('Your user name is'), ' ',
@@ -5640,13 +5710,11 @@
} else {
print ' (', Ts('Visit %s to set your user name.', &GetPrefsLink()), ') ';
}
- #print $q->submit(-name=>'Preview', -value=>T('Preview')); # luke delete
###############
### replaced by gypark
### 미리보기 버튼에 번역함수 적용
- # print q(<input type="button" name="prev1" value="Popup Preview" onclick="javascript:preview();">); # luke added
- print q(<input type="button" name="prev1" value=").
- T('Popup Preview') .
+ print q(<input accesskey="p" type="button" name="prev1" value=").
+ T('Popup Preview')." [alt+p]" .
q(" onclick="javascript:preview();">); # luke added
###
###############
@@ -5654,12 +5722,12 @@
###############
### added by gypark
### file upload
- print " ".q(<input type="button" name="prev1" value=").
- T('Upload File') .
+ print " ".q(<input accesskey="u" type="button" name="prev1" value=").
+ T('Upload File')." [alt+u]" .
q(" onclick="javascript:upload();">);
### oekaki
- print " ".q(<input type="button" name="prev1" value=").
- T('Oekaki') .
+ print " ".q(<input accesskey="o" type="button" name="prev1" value=").
+ T('Oekaki')." [alt+o]" .
q(" onclick="javascript:oekaki();">);
###
###############
1.2. wikiscript.js 수정
ext1.109f 에서, wiki.pl 안에 들어 있는 GetKeyStroke함수를 wikiscript.js 쪽으로 옮기고, 한 줄 추가되었음
function GetKeyStroke(KeyStorke) {
var evt = KeyStorke || window.event;
var eventChooser = evt.keyCode || evt.which;
var target = evt.target || evt.srcElement;
if (evt.altKey || evt.ctrlKey) return; // ext1.109f 에서 추가된 라인
while (target && target.tagName.toLowerCase() != 'input' && target.tagName.toLowerCase() != 'textarea') {
target = target.parentElement;
}
if (!target) {
var which = String.fromCharCode(eventChooser).toLowerCase();
for (var i in key) {
if (which == i) {
document.location.href = key[i];
}
}
}
}
1.3. 추가 업데이트 내역
ext1.74b - FireFox 에서도 동작하도록 수정
ext1.109f
- Ctrl, Alt 키와 같이 눌렀을 때는 동작하지 않게 함
- FF 에서 도구 표시줄(Alt+키)이나 찾기(Ctrl+F)등을 동작시킬 때 페이지도 같이 이동해버리는 문제 해결
- 유지보수의 편의를 위해서 GetKeyStroke 함수를 wikiscript.js 쪽으로 옮김
페이지를 이동시키는 방법이..
- window.location = ... 클리앙에서 쓰는 방법
- location.href= ... 유즈모드에서 마우스 더블클릭시
- document.location.href = ... 태터
- parent.location.herf = ... 태터
등이 있군요. location 앞에 다른 게 있는 경우와 없는 경우, 뒤에 href 가 있는 경우와 없는 경우에 대해 설명 좀 해주세요~
최근에 소스를 수정하면서 FF로 테스트하면서야 알았는데... FF에서는 alt+e 를 눌러서 FF의 편집 도구 모음을 열려고 하면 위키까지 그 영향을 받아서 페이지 수정 화면으로 넘어가버리는군요... 그렇다고 FF에서 단축키 기능을 끄게 하면 이번에는 반대로 위키 페이지 작업을 할 때 불편할테고... 으음...
찾기할대도 첫 페이지로 가버려요.
- 이젠 잘 될 겁니다. :-) 근데 키보드가 한글 입력 상태에서는 동작하지 않던데, (IE에서는 되는데) 이건 태터에서도 그런 걸 보니 제가 해결할 수 있는 난이도가 아니지 싶어서 외면합니다 ^.^
- 애쓰셨습니다. 한글입력상태에서 동작안하는건 별 불편하지 않아요.
그리고 고질적인 브라우저의 "&" 처리 문제 때문에, 소스 코드 내의 "&"가 수정 할때마다 "&"로 바뀌어서 어떤 곳은 "&amp;" 이런 식으로 계속 바꿔치기 된 곳들이 있군요. 그런 곳들은 다 그냥 "&"입니다. 일단 페이지는 고쳐놨지만 소스 수정하실 때 주의하셔야 하겠습니다.
으으... 맥을 쓰는 어느 분이 "command+f"를 눌러서 검색을 하려 할 때 첫 화면으로 이동해버린다는 제보를 하셨었는데, 그때는 내가 맥을 쓰고 있지 않아서 귀찮아서 수정을 미뤘더만... 내가 불편해서 죽겠군요... 근데 어딜 어떻게 손봐야 하려나...
나도 맥을 쓰게 되니 cmd+f 와 cmd+l 할 때마다 첫페이지로 가거나 로그아웃되는 문제가 있어서 일단 UseShortcut
변수 값을 0으로 해서 꺼 둠.
위키위키분류