MovableTypeの管理画面カスタマイズ方法 for Safari part2。
前回、ボタンの表示までしか書けなかったので、続きを。
ボタンを押した時に最初に呼び出される関数が、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に限定して処理を追加しているので、他のブラウザにも影響を及ぼすことが無く、安心・安全。
次回はオリジナルボタンの追加をしてみます。またまた、来週。