Tracで改行をShift+Enterで簡単に入力
TracのWiki記法では、改行はそのままでは反映されません。[[br]]と入力する必要があります。このままでは面倒だということで、Shift+Enterで[[br]]タグが入力されるようなJavaScriptを書きました。
既に OZACC.blog: tracで改行[[br]]を簡単に入力 にてFirefoxで動作するものが公開されていますが、今回はこれを参考にInternet Explorerでも動くようにしました。
設定方法は、htdocs/js/trac.js に以下のコードを追加してください。
function getKeyCode(e){
return e.keyCode != 0 ? e.keyCode : e.charCode;
}
document.onkeypress = function(e) {
var flag = false;
if (navigator.userAgent.indexOf("Firefox") != -1) {
obj = e.target.tagName.toUpperCase();
if (obj == 'TEXTAREA' && e.shiftKey && getKeyCode(e) == 13) {
flag = true;
elem = document.getElementById(e.target.id);
}
} else {
obj = event.srcElement.tagName.toUpperCase();
if (obj == 'TEXTAREA' && event.shiftKey && getKeyCode(event) == 13) {
flag = true;
elem = document.getElementById(event.srcElement.id);
}
}
if (flag) {
var insertTag = '[[br]]';
insertAtCaret(elem, insertTag);
}
}
function insertAtCaret(obj, text) {
if(document.selection) {
obj.focus();
var orig = obj.value.replace(/\r\n/g, "\n");
var range = document.selection.createRange();
if(range.parentElement() != obj) {
return false;
}
range.text = text;
var actual = tmp = obj.value.replace(/\r\n/g, "\n");
for(var diff = 0; diff < orig.length; diff++) {
if(orig.charAt(diff) != actual.charAt(diff)) break;
}
for(var index = 0, start = 0;
tmp.match(text)
&& (tmp = tmp.replace(text, ""))
&& index <= diff;
index = start + text.length
) {
start = actual.indexOf(text, index);
}
} else if(obj.selectionStart) {
var start = obj.selectionStart;
var end = obj.selectionEnd;
obj.value = obj.value.substr(0, start)
+ text
+ obj.value.substr(end, obj.value.length);
}
if(start != null) {
setCaretTo(obj, start + text.length);
} else {
obj.value += text;
}
}
function setCaretTo(obj, pos) {
if(obj.createTextRange) {
var range = obj.createTextRange();
range.move('character', pos);
range.select();
} else if(obj.selectionStart) {
obj.focus();
obj.setSelectionRange(pos, pos);
}
}
もともと社内で利用するために書いたのですが、お蔵入りになりそうで勿体ないので公開します。どうぞご自由に使ってください。










