• このエントリーをはてなブックマークに追加


2012-02-08 15:10 追記
@fmkt さんから「『説明』を必須にするパッチ」について言及いただいたので,その旨を追記しました.

ss-1328678321

はじめに

Redmine で「新しいチケット」発行時,そのフォームの「題名」を入力しているときに,全角モードのつもりで入力確定!ッターン! とかしたら実は英数モードのままで,中途半端な題名のチケットが登録されてしまうことってありますよね!

もうホントストレスフルなので,ちょっと愚痴りました:

#redmine チケット登録フォームの「題名」フォーカス時,Enterを押してもsubmitされないようにしてくれるプラグインとかないですか!
Twitter / @issm: #redmine チケット登録フォームの「題名」フォ …

そうしたら,@yusuke_kokuboさんから,こんなリプライをいただきました:

@issm グリモン書いてください
Twitter / @yusuke_kokubo: @issm グリモン書いてください …

...ということで,サクっとGreasemonkeyをでっち上げてみました.

ちなみにこれが私の初 Greasemonkey です!

Chrome で Greasemonkey

個人的環境では,Chrome で Redmine をよく使うので,そもそも Greasemonkey な環境をよく知らない私は,拡張機能探しから始まりました.

「Greasemonkey」で検索したら見つかったのが Tampermonkey でした.

ss-1328678404

星もいっぱいついていたので,とりあえずこれをインストール.

Greasemonkey を書いてみた

ひとまず「新しいチケット」にだけ対応できればいいや,という感じです.

// ==UserScript==
// @name       Redmine Ticket Form Enter-submit Canceller
// @namespace  http://iss.ms/
// @version    0.1
// @description  チケット登録フォームの「題名」入力時,Enterを押してもsubmitされなくなります.
// @include    https://*/*
// @copyright  issm
// ==/UserScript==
var _form    = document.getElementById('issue-form')
  , _subject = document.getElementById('issue_subject')
;
if ( _form  &&  _subject ) {
    var _handle_form_submit = function (ev) {
        return false;
    };
    _subject.addEventListener('focus', function (ev) {
        //_form.addEventListener('submit', _handle_form_submit);  // うまくいかん
        _form.onsubmit = _handle_form_submit;
    });
    _subject.addEventListener('blur', function (ev) {
        //_form.removeEventListener('submit', _handle_form_submit);
        _form.onsubmit = null;
    });
    _subject.blur();
    _subject.focus();
}

フォーム要素の onsubmit プロパティを触っているので,もしかしたら,デフォルトの挙動に対して何かしらの影響があるかもしれません.

あと,@include の値は適宜調整していただいた方がよいかと思います.

おわりに

以上,Redmine のチケット登録時,個人的に感じるストレスを1つだけ解消するための Greasemonkey を書いてみたお話でした.

おまけ(追記)

少しして, @fmkt さんからも.

私は説明も必須項目にするパッチで対応しましたよー。 QT @issm: #redmine チケット登録フォームの「題名」フォーカス時,Enterを押してもsubmitされないようにしてくれるプラグインとかないですか!
Twitter / @fmkt: 私は説明も必須項目にするパッチで対応しましたよー。 …

@issm 具体的に書くと app/models/issue.rb の56行目辺りにあるvalidates_presence_of に :description を追加しました。 1行だけの変更なのでプラグインに落とし込んだ方が良いのかなあ…

Twitter / @fmkt: @issm 具体的に書くと app/models/i …

なるほど,入力の流れで見れば,「題名」 → 「説明」なので,前者の時点で Enter して submit してしまったとしても,後者が空であれば必ず怒られる(チケットは登録されない),ということですね!