--> -->

skimemo


skimemo - 日記/2018-09-09/最新のTracWysiwygでTracTicketTemplateが正常に動かない のバックアップ(No.1)


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

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


_ 問題

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

_ 原因

  1. Ticket編集画面でチケットのTypeを切り替えた際、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?reponame=&new=15670%40tracwysiwygplugin%2F0.12%2Ftracwysiwyg%2Fhtdocs%2Fwysiwyg.js&old=15668%40tracwysiwygplugin%2F0.12%2Ftracwysiwyg%2Fhtdocs%2Fwysiwyg.js)

    従って、この変更を元に戻してやれば良いわけです。対象ファイルは &color(black,lightgray){wysiwyg.js} になります。 ただし、過去の通りに戻しても上手くいかない(恐らく@を差し替える部分も削除されている)ので、以下のように修正します。

    Everything is expanded.Everything is shortened.
      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; ';
    labelタグのforディレクティブと、inputタグのidディレクティブを設定しています。
    具体的な手順は以下の通りです。

    ソースを落としてくる

    展開して編集する

    サーバーに転送する

    インストール

    sudo python setup.py install

    apache再起動

    sudo systemctl restart httpd
Category: [Linux] - 08:41:21