前回、ボタンの表示までしか書けなかったので、続きを。

ボタンを押した時に最初に呼び出される関数が、236行目あたりにある formatStr 関数。
この関数では、挿入するタグと処理を行うtextareaのname属性を引数として受け取り、
実際に記述するhtmlソースを生成し、次の関数へ渡します。

function formatStr (e, v) {
if (!canFormat) return;
var str = getSelected(e);
if (!str) return;
setSelection(e, '<' + v + '>' + str + '');
return false;
}
※e:処理を行うtextareaのname属性
 v:挿入するタグ

まずは1行目で、canFormatを確認(1(true)でなければ、処理終了)。
引数として受け取った e をさらに引数として、204行目あたりにあるgetSelected関数に渡します。

function getSelected (e) {
if (document.selection) {
e.focus();
var range = document.selection.createRange();
return range.text;
} else {
var length = e.textLength;
if (length == undefined) return;
var start = e.selectionStart;
var end = e.selectionEnd;
if (end == 1 || end == 2) end = length;
return e.value.substring(start, end);
}
}

Safariではdocument.selectionが動かない為、この関数での処理はelse部分に入ります。
else部分の1行目にe.textLengthとありますが、これもSafariで動かない為、変数lengthがundefinedとなり、
2行目のif文によって処理が終わってしまいます。

そもそも、ここでの変数lengthには、該当するtextareaに入力された文字数が格納されるので、
Safari専用に次の2行を追加してみます。
追加する場所は、e.textLengthの次の行です。

if(ua.indexOf('Safari') > -1) var length = e.value.length;

単純にe.textLengthで文字数を取得する所を、
Safari用に、e.value.lengthで取得させれば良いだけです。

なんと、これでカスタマイズ終了!!
前回と合わせ、計4行を追加するだけで、Safari(最新の)でも使えるようになっちゃいます。

Safariに限定して処理を追加しているので、他のブラウザにも影響を及ぼすことが無く、安心・安全。
次回はオリジナルボタンの追加をしてみます。またまた、来週。