2003年08月07日

自動セーブのための改良

MovableTypeでエントリーを書いていて大体書き終わったところでマウスの戻るボタンを誤爆・・・
3回目にして耐えかねて対策してみました(笑)

対策方法はフォームに対し30回以上KeyDownイベントが発生した後にセーブなしで別のページにへの遷移が起ころうとした場合に自動でセーブするというもので、要するにある程度以上記入があったあとでどっかに飛ぼうとした場合に飛ばずに強制的にセーブしちゃう仕掛けです。

こいつは現在使用中の「MovableType Ver.2.64 日本語化済み」の下記のファイルに変更を加えました。
MovableTypeRoot/tmpl/cms/edit_enty.tmpl

で、変更内容ですが逐次変更箇所を書く時間がないので参考までにdiffの結果を以下に乗せます。

155a156,170
> var $count = 0;
> 
> function keyCount(){
>  $count = $count + 1;
> }
> 
> // 最後のセーブから30回以上キーが叩かれている場合は強制的にセーブする
> function chkSave(){
>  if(1<$count/30){
>   document.entry_form.submit();
>   return false;
>  }
>  return true;
> }
> 
161c176
< <body onkeypress="mtShortCuts()">
---
> <body onkeypress="mtShortCuts()" onUnload="return(chkSave());">
277c292
< 	<form name="entry_form" method="post" action="<TMPL_VAR NAME=SCRIPT_URL>">
---
> 	<form name="entry_form" method="post" action="<TMPL_VAR NAME=SCRIPT_URL>" onSubmit='$count=0;return(true);'>
397c412
< 		<td colspan="2" width="100%" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="text" rows="<TMPL_IF NAME=DISP_PREFS_SHOW_EXTENDED>10<TMPL_ELSE>20</TMPL_IF>" wrap="virtual"><TMPL_VAR NAME=TEXT></textarea><p></td>
---
> 		<td colspan="2" width="100%" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="text" rows="<TMPL_IF NAME=DISP_PREFS_SHOW_EXTENDED>10<TMPL_ELSE>20</TMPL_IF>" wrap="virtual" onkeydown="keyCount();"><TMPL_VAR NAME=TEXT></textarea><p></td>
406c421
< 		<td colspan="2" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="text_more" rows="15" wrap="virtual"><TMPL_VAR NAME=TEXT_MORE></textarea><p></td>
---
> 		<td colspan="2" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="text_more" rows="15" wrap="virtual" onkeydown="keyCount();"><TMPL_VAR NAME=TEXT_MORE></textarea><p></td>
416c431
< 		<td colspan="2" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="excerpt" rows="5" wrap="virtual"><TMPL_VAR NAME=EXCERPT></textarea><p></td>
---
> 		<td colspan="2" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="excerpt" rows="5" wrap="virtual" onkeydown="keyCount();"><TMPL_VAR NAME=EXCERPT></textarea><p></td>
426c441
< 		<td colspan="2" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="keywords" rows="2" wrap="virtual"><TMPL_VAR NAME=KEYWORDS></textarea><p></td>
---
> 		<td colspan="2" valign="top"><textarea<TMPL_IF NAME=AGENT_MOZILLA> cols=""</TMPL_IF> class="width500" name="keywords" rows="2" wrap="virtual" onkeydown="keyCount();"><TMPL_VAR NAME=KEYWORDS></textarea><p></td>
580,581c595,598
< 	<input class="button" type="submit" name="preview_entry" value="<MT_TRANS phrase="Preview">">  
< 	<input class="button" type="submit" value="<MT_TRANS phrase="Save">">  
---
> 	<input class="button" type="submit" name="preview_entry" value="<MT_TRANS phrase="Preview">" onClick="$count=0;">  
> 	<input class="button" type="submit" value="<MT_TRANS phrase="Save">">
> 	<br>
> 	<input type="button" value="Edit Cancel" onClick="$count=0;history.back();">
583c600
< 	<input class="button-big" onClick="doRemoveEntry()" type="button" value="<MT_TRANS phrase="Delete Entry">">
---
> 	  <input class="button-big" onClick="$count=0;doRemoveEntry()" type="button" value="<MT_TRANS phrase="Delete Entry">">
Posted by Takuchan at 2003年08月07日 19:53 | トラックバック(0)