skimemo


skimemo - 日記/2018-09-09/最新のTracWysiwygでTracTicketTemplateが正常に動かない

_ 最新のTracWysiwygでTracTicketTemplateが正常に動かない

サーバーを移行した際にtracのバージョンをyumの仰せの通り1.2にしたのですが、重要なプラグインTracWysiwygがちょっと不便な事になってしまったので対応した記録です。


_ 問題

  1. TracTicketTemplateと組み合わせた時に一部正常動作しない
    1. Ticket編集画面でチケットのTypeを切り替えた際、wysiwygモードにしているとtextareaが更新されない
    2. TracTicketTemplateでtextareaが画面の下の方にずれる
  2. (ついでに)Tracそのものが遅い

_ 原因

_ wysiwygモードにしているとtextareaが更新されない問題

TracTicketTemplateはType切り替えの際にちゃんとTracWysiwygが入っているか見て動作を切り替えています。

// for TracWysiwyg
var wysiwyg_mode = $("#editor-wysiwyg-1:checked").length;
if (wysiwyg_mode) {
  $("#editor-textarea-1").click();
}
    :
(textareaにテンプレートを書き込む処理)
    :
// for TracWysiwyg
if (wysiwyg_mode) {
  $("#editor-wysiwyg-1").click();
}

上記のように、id='editor-wysiwyg-1'が選択されていたらwysiwygモードと判定し、一旦textarea(wysiwygを使わないモード)に切り替え、textareaを書き換えた後、今度はid='editor-wysiwyg-1'をクリックしてwysiwygを使うモードに戻しています。
wysiwygモードのままではtextareaを書き換えられないのでこのようにしているものと思われます。

このようにTracTicketTemplateではTracWysiwygの事を気にしているにも関わらず、TracWysiwygの方は2016/11/2にこのidを削除してしまっています。(https://trac-hacks.org/changeset?sfp_email=&sfph_mail=&reponame=&new=15670%40tracwysiwygplugin%2F0.12%2Ftracwysiwyg%2Fhtdocs%2Fwysiwyg.js&old=15668%40tracwysiwygplugin%2F0.12%2Ftracwysiwyg%2Fhtdocs%2Fwysiwyg.js&sfp_email=&sfph_mail=)

従って、この変更を元に戻してやれば良いわけです。 対象ファイルは wysiwyg.js になります。 ただし、過去の通りに戻しても上手くいかない(上記差分では「-1」部分は「-@」と連番に差し替えを示唆する記述になっているがうまく差し替わってくれない)ので、以下のように修正します。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
var html = ''
    + '<label title="Links as you type (Ctrl-L)">'
    + '<input type="checkbox" checked="checked" />'
    + 'autolink</label> '
    + '<label for="editor-wysiwyg-1"><input id="editor-wysiwyg-1" type="radio" value="wysiwyg"'
    + (mode == "wysiwyg" ? ' checked="checked"' : '')
    + ' />wysiwyg</label> '
    + '<label for="editor-textarea-1"><input id="editor-textarea-1" type="radio" value="textarea"'
    + (mode == "textarea" ? ' checked="checked"' : '')
    + ' />textarea</label> '
    + '&nbsp; ';

5行目と8行目でlabelタグのforディレクティブと、inputタグのidディレクティブを設定しています。これで正常に動くようになります。
実際の、具体的な手順は以下の通りです。

  1. ソースを落としてくる
    https://trac-hacks.org/browser/tracwysiwygplugin?rev=17283&format=zip
    (zipで落ちてきます。私はWindowsで解凍して転送しました)

  2. 展開して編集する
    > vi tracwysiwygplugin/0.12/tracwysiwyg/htdocs/wysiwyg.js
    (Windowsで編集しておいた方が簡単かも。。)

  3. インストール
    > sudo python setup.py install

  4. apache再起動
    > sudo systemctl restart httpd
    テンプレートを設定し、チケット新規作成画面でwysiwygモードのままTypeを切り替えてもテンプレートが正常に切り替われば成功です。

_ テンプレート管理画面でtextareaが画面の下の方に出てしまう問題

原因はよく分からないのですが、cssを修正すると直るのでそのようにします。

> vi tracwysiwygplugin/0.12/tracwysiwyg/htdocs/wysiwyg.css
  1
  2
  3
  4
  5
  6
  7
iframe.wysiwyg {
    border: 1px solid #d7d7d7;
    /* clear: both; */
    display: block;
    -moz-user-select: none;
    -webkit-user-select: none;
}

3行目をコメントアウトします。

_ 遅い問題。

これは新しいからというわけではないのですが、参考文献( *1 )の通りの高速化がTracWysiwygではされておらず、効果が半減してしまうため、TracWysiwygのcssやjsファイルも静的に読むよう修正します。

  • tracwysiwyg/__init__.py
    56行目付近。htdocs_locationが設定されていたらそちらを使うようにします。
    + if 'htdocs_location' in req.chrome:
    +     add_script(req, '../..'+req.chrome['htdocs_location']+'/tracwysiwyg/wysiwyg.js')
    + else:
         add_script(req, 'tracwysiwyg/wysiwyg.js')
    62行目付近。chrome/commonだけでなくchrome/tracwysiwygも書き換えるようにします。
      if filename.startswith('chrome/common/') and 'htdocs_location' in req.chrome:
          href = Href(req.chrome['htdocs_location'])
          return href(filename[14:])
    + if filename.startswith('chrome/') and 'htdocs_location' in req.chrome:
    +     href = Href(req.chrome['htdocs_location'])
    +     return href(filename[7:])
  • 他にも色々 chrome 経由で読んでいる所があるのですが、そこはおいおい・・・。
    と思ったら、Apache側で設定しちゃうこっちの方が早かった...orz. → 参考文献2( *2 )様、感謝m(__)m
    Alias /trac/chrome/site /var/trac/project/htdocs
    <Location "/trac/chrome/site">
        Require all granted
    </Location>

    Category: [Linux] - 08:41:21


この本は持っていませんが、雪原の表紙に惹かれてつい・・・(^^;)。
こういう本でプラグインのカスタマイズ方法まで解説してくれたりするんでしょうか・・・。

こういうのも豆蔵さんなんですね・・・(深い意味はなし)。



 
 
Last-modified: 2018-10-16 (火) 14:11:24 (191d)