2006年05月06日

Web.Dev | tracで改行[[br]]を簡単に入力

tracのwiki記法で一番面倒なのが改行の[[br]]。アイコンをクリックして入力できるようになったとしても、それをクリックするのが面倒。理想的にはShift+Enterで[[br]]が入力される仕組み。と思い、理想を追い求めて、次のようなJavaScriptを書きました。もうそんなプラグインが巷にあるのかも知れませんが。

こいつを/usr/share/trac/htdocs/js/trac.js(CentOSの場合)に付け加えて、Apacheを再起動すればOK。trac内のテキストエリアでShift+Enterで[[br]]が入力されるようになっています。

Firefoxでしか動作しません。誰かクロスブラウザで動くようにしてくださいー。
function getKeyCode(e){
  return e.keyCode != 0 ? e.keyCode : e.charCode;
}
document.onkeypress = function(e) {
  if (navigator.userAgent.indexOf("Firefox") != -1) {
    if (e.target.tagName.toUpperCase() == 'TEXTAREA' && e.shiftKey && getKeyCode(e) == 13) {
      document.getElementById(e.target.id).value += '[[br]]';
    }
  }
}
追記
おっとー。これだとテキストエリア内での現在のカーソル位置とは関係なく、テキスト末尾に[[br]]が挿入されてしまう。。。

修正版はこちら。
function getKeyCode(e){
  return e.keyCode != 0 ? e.keyCode : e.charCode;
}
if (navigator.userAgent.indexOf("Firefox") != -1) {
  document.onkeypress = function(e) {
    if (e.target.tagName.toUpperCase() == 'TEXTAREA' && e.shiftKey && getKeyCode(e) == 13) {
    var insertTag = '[[br]]';
    var elem = document.getElementById(e.target.id);
    var inputText = elem.value;
    var pos = elem.selectionStart;
    var text1 = inputText.substr(0, pos);
    var text2 = inputText.substr(pos);
    elem.value = text1 + insertTag + text2;;
    pos += insertTag.length;
    elem.setSelectionRange(pos, pos);
    }
  }
}
Posted by otsuka : 20:30 | Comment (5) | Trackback (0)
Comment

IEでのイベントは、グローバルなwindow.eventオブジェクトになることを知った。でもって、イベントターゲットはwindow.event.srcElementで取得可能。

残るはカーソル位置の取得。TextRangeオブジェクトを使用するらしいけど、使い方が分からない。このお方の出番かな。
http://d.hatena.ne.jp/koseki/20051023

Posted by: otsuka : 2006年05月08日 02:49

Firefoxで活用させていただきます!

……いやでも残りがselectionStart/Endだけだったら、そこのスクリプト使うとTextRangeに触らずに範囲取れると思いますよー。

Posted by: こせき : 2006年05月08日 21:57

我が社のエースが別プロジェクトでIE/Firefox/Safariで動作する、Shift+Enterでを挿入するスクリプトを書いてたので、クロスブラウザ対応頼んでみます。

Posted by: サイトウ : 2006年05月08日 22:41

おお! 完成の暁には、僕がPython勉強してプラグイン化しましょう。

Posted by: otsuka : 2006年05月08日 22:52

Shift+Enterでbrタグを入れるのを作ったんですが、中身はこせきさんのスクリプトです。
brタグ入力後、キャレットを次の行に移動させたかったんで、そこんとこで時間がかかりました。IEのTextRangeはメンドくさいですね。

Posted by: gom : 2006年05月09日 00:02









名前、アドレスを登録しますか?