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);
}
}
}
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