Nucleusのエディタにボタン追加

カテゴリ:Nucleus
日時:2005/02/26 10:46

まみおさんのエディタに機能ボタン追加(<、>、&を&lt;、&gt;、&amp;に変換するボタン)をウチにも実装。が、なぜかうまく動かない。おそらくウチの環境に問題があるのだろう。バージョンの違いが原因かもしれない。

いじくり回しているうちに、何とか動くようになった。ついでに、このサイトで多用している<blockquote>用のボタンも追加してみた。

エディタのボタン
編集するのは、

 ・nucleus/javascript/edit.js
 ・nucleus/libs/PAGEFACTORY.php
 ・nucleus/language/japanese-utf8.php(UTF-8な場合)

の3つ。

まずはedit.jpから。114行目付近の
function italicThis() { insertAroundCaret('<i>','</i>'); }
の下に、
function blockquoteThis() { insertAroundCaret('<blockquote>','</blockquote>'); }

function entitiesThis() { entitiesCaret('',''); }
の2行を挿入。1行目は<blockquote>用。

次に、274行目付近のinsertAroundCaret()関数とmozWrap()関数の間辺りに、以下の関数を挿入する。
// the selected text to entities

function entitiesCaret (textpre, textpost) {

    var textEl = lastSelected;



    if (textEl && textEl.createTextRange && lastCaretPos) {

        var caretPos = lastCaretPos;

        caretPos.text = caretPos.text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');

    } else {

        document.getElementById('input' + nonie_FormType).value += textpre + textpost;

    }



    updAllPreviews();

}
今度はPAGEFACTORY.php。295行目付近に、
$this->_jsbutton('blockquote',"blockquoteThis()",_ADD_BLOCKQUOTE_TT);

$this->_jsbutton('entities',"entitiesThis()",_ADD_ENTITIES_TT);
の2行を挿入。

japanese-utf8.phpは、380行目付近。
define('_ADD_ENTITIES_TT',               '特殊文字変換');

define('_ADD_BLOCKQUOTE_TT',                '引用');
の2行を挿入。「特殊文字変換」「引用」は適当に変えてOK。

最後に、nucleus/images/に新ボタン用の画像を用意する。ファイル名は、button-entities.gifとbutton-blockquote.gif。PAGEFACTORY.phpや言語ファイルで指定した定数から「_ADD_」と「_TT」を取って小文字にし、頭に「button-」を付ける。文で説明するとややこしいが、

 _ADD_ENTITIES_TT→button-entities.gif
 _ADD_BLOCKQUOTE_TT→button-blockquote.gif

とすれば法則性は明らかだ。

編集したファイルとボタン画像をアップロードすれば、作業完了だ。