[첫화면으로]"UseModWiki소스수정/작성취소시확인" 페이지의 변경 내역

마지막으로 [b]


현재 버전 . . . . 2006-5-24 10:14 pm 수정한 사람: Raymundo [편집 상태에서 텍스트가 변경된 경우에만 경고창을 띄우도록 수정]
15 번째 수정본 . . . . 2006-5-24 6:04 pm 수정한 사람: Raymundo
14 번째 수정본 . . . . 2006-5-24 5:54 pm 수정한 사람: 조프
 

변경사항 (가장 최근의 "일반적인 수정"부터) (다른 사용자에 의한 수정)

-3,7 +3,7
== # 글 작성 상태에서 취소할 때 확인 메시지 띄우기 ==
페이지를 편집하다가 실수로 "뒤로" 버튼을 누르거나 다른 링크를 클릭하거나 새로고침을 하거나 창을 닫아 버리는 바람에 글을 날려먹는 불상사를 조금이라도 피해보고자 함. 애초에 FireFox에서는 그런 경우라도 다시 "앞으로"를 하면 자기가 편집하던 내용이 살아 있는데, IE는 안 그런다. 그리고 FF에서도 주소 표시줄에서 엔터를 쳐서 새로 고침을 해 버리면 내용이 날아간다.
이글루스에 추가된 기능을 참고하였음. (사실 거의 그대로 썼음.. 죄송합니다)
이글루스에 추가된 기능을 참고하였음.
* 필수 요구 사항: 브라우저들이 자바스크립트를 잘 지원해야 하겠음. IE6.0과 FireFox1.5에서 동작 확인됨.
* 선택 요구 사항: 없음

-13,6 +13,9
Upload:cancle_alert.png 
* 페이지 편집 상태에서, 텍스트 영역의 내용을 수정했을 때만 경고창이 뜬다. 즉 내용을 고치지 않은 상태에서는 뜨지 않는다.
* 편집 충돌(conflict)이 일어난 경우는 이미 자기가 작성한 내용을 날려 버릴 위기에 처한 경우<footnote(이 때 당황해서 "뒤로" 버튼을 누른 후에 자기가 작성한 내용이 없어져서 더욱 당황하게 되는 경우가 있는데, 이럴 때는 "앞으로" 버튼을 누르고 만료된 페이지라고 나오더라도 새로 고침을 하여 불러내주면 다시 충돌 처리 화면으로 갑니다. 자기가 작성한 내용도 아래쪽에 남아 있습니다.)>이다. 이 때는 무조건 경고창이 뜬다.
반대로 자기가 일부러 뒤로 가기를 했는데 저 창이 떠서 귀찮을 때도 있겠지만, 그런 귀찮음은 감수하도록 하자. 
=== # 부작용 또는 주의사항 ===

-22,25 +25,29
IE와 FF에서 자바스크립트를 처리하는 방식이 다른지, 구현에 문제가 좀 있었다. 다른 브라우저를 지원하기 위해서 별도의 수정이 필요할 지 모른다. 아래에 자세히 설명. (<index(호환성문제)>)
[http://mdiwebma.com/ WebMa]에서 탭을 닫을 때는 동작을 안 한다. 주의.
[http://mdiwebma.com/ WebMa]에서 탭을 닫을 때는 동작을 안 한다. 웹마 쓰는 사람들 주의<footnote(주인장은 정말 자주 당하는 경우이다. 탭을 십수개 띄운 상태에서 정리한다고 쓱쓱 지우다가 편집 중인 창까지 닫아버린다 -_-;)>.
=== # wikiscript.js 수정 ===
다음 함수를 추가해 준다. chk_close()는 페이지가 unload 될 때에 (닫히거나 뒤로 가거나 등) 불리게 된다. closeok 변수가 false일 때는 경고창을 띄우게 된다.
{{{#!vim javascript
// 작성 취소 시 확인
var closeok = false;
var previous_text = "", current_text = "", conflict = false, closeok = false;
function chk_close(e, str) {
    if (!e) e = event;
    if (!closeok) {
        e.returnValue = str;
        current_text = document.form_edit.text.value;
        if (conflict || (previous_text != current_text)) {
            e.returnValue = str;
        }
    }
}
}}}
=== # wiki.pl 수정 ===
페이지 편집 모드(action=edit)일 때 body에다가 "on before unload" 이벤트를 잡아내어 chk_close()함수를 부르도록 한다.
페이지 편집 모드(action=edit)거나 충돌이 발생했을 때 body에다가 "on before unload" 이벤트를 잡아내어 chk_close()함수를 부르도록 한다.
{{{#!vim perl
sub GetHtmlHeader {

-51,7 +58,10
###############
### 작성 취소시 확인 - 이 단락 추가
    if ((lc(&GetParam("action","")) eq "edit") && (&UserCanEdit($id,1))) {
    if (
            (&GetParam("oldtime", "") ne "") ||
            ((lc(&GetParam("action","")) eq "edit") && (&UserCanEdit($id,1)))
       ) {
        my $close_string = T('If you leave current page, the contents you are writing will not be stored.');
        $bodyExtra .= qq( onbeforeunload="chk_close(event, '$close_string')" );
    }

-63,16 +73,26
}
}}}
편집 폼에다가 submit시에는 경고창을 띄우지 않도록 closeok 변수를 true로 세팅하게 한다.
편집 폼에다가 submit시에는 경고창을 띄우지 않도록 closeok 변수를 true로 세팅하게 한다. 또한 편집 모드에 들어간 직후에 텍스트 에리어에 있는 내용을 미리 저장해둔다.
{{{#!vim perl
sub DoEdit {
    ...
### 편집모드에 들어갔을때 포커스가 편집창에 있도록 한다
#   print &GetFormStart();
#   print &GetFormStart("form_edit"); 이 줄을 다시 아래와 같이 바꾼다
    print $q->startform(-method=>"POST", -action=>"$ScriptName", -enctype=>"application/x-www-form-urlencoded" ,-name=>"form_edit", -onSubmit=>"closeok=true; return true;") ;
#   print &GetFormStart("form_edit");                              # 이 줄을 다시 아래와 같이 바꾼다
    print $q->startform(-method=>"POST", -action=>"$ScriptName", -enctype=>"application/x-www-form-urlencoded",
            -name=>"form_edit", -onSubmit=>"closeok=true; return true;");
###
    ...
    print "\n<script language=\"JavaScript\" type=\"text/javascript\">\n"
        . "<!--\n"
        . "previous_text = document.form_edit.text.value;\n"   # 이 줄과
        . (($isConflict)?"conflict = true;\n":"")              # 이 줄 추가
        . "document.form_edit.text.focus();\n"
        . "//-->\n"
        . "</script>\n";
   ...
}
}}}

-125,6 +145,7
이런 식이라면 또 다른 브라우저를 위해서는 새로운 곳을 수정해야 할 지도 모른다. 알려주면 반영하겠음.
=== # 추가 업데이트 내역 ===
ext1.96a - 편집 상태에서 텍스트가 변경된 경우에만 경고창을 띄우도록 수정<mysign([[Raymundo]],2006-5-24 10:14 pm)>
=== # 사용자 의견 ===