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

Add Bookmark

Post Comment

TrackBack URL

http://blog.trustworks.biz/cgi-bin/mt-tb.cgi/9

2010/01

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Studying

  • RSS2.0
  • Skype