-2

Greasemonkeyを使用して、cgitcommitメッセージに表示されるRedmineの問題番号を問題またはプロジェクトにリンクしたいと思います。

cgitCommitメッセージのHTMLソースは次のようになります。

<a href='/editingmodule/commit/?id=49e4a33e0f8b306ded5'>refs #459 - create separate directory and repo for editingModule, lots of dif...</a>

私がやりたいのは、#459をRedmineの問題とは別のhrefにすることですが、両側のcgitリンクは変更しないでください。したがって、上記のURLは次のように変換されます。

<a href='/editingmodule/commit/?id=49e4a33e0f8b306ded5'>refs</a>
<a href='http://redmine.project.com/redmine/issues/459'>#459</a>
<a href='/editingmodule/commit/?id=49e4a33e0f8b306ded5'> - create separate directory and repo for editingModule, lots of dif...</a>

読みにくいかもしれませんが、上のリンクの#459はRedmineプロジェクトにリンクされています。

わかりやすくするために、Redmineの問題へのリンクをcgitリンクに追加することもできます。

4

1 に答える 1

3

jQuery を使用してリンクを見つけ、正規表現を使用して主要なテキスト部分を抽出します。

これは完全に機能するスクリプトです。詳細については、インライン コメントを参照してください。

// ==UserScript==
// @name     _Split Commit links and add Redmine links
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

//-- Fing matching links
$("a[href*='/editingmodule/commit/']").each ( function () {
    /*-- Parse each link for the expected format:
        refs #{number} {description text}
    */
    var jThis       = $(this);
    var parseText   = jThis.text ().match (/\s*(refs)\s+\#(\d+)\s+(.+)/i);
    if (parseText  &&  parseText.length >= 4) {
        //-- Truncate original link text.
        jThis.text (parseText[1]);

        //-- Add tailing link.
        jThis.after (
            ' <a href="' + jThis.attr ("href") + '">' + parseText[3] + '</a>'
        );

        //-- Add Redmine link. Note it is inserted just after the original link.
        var issueNumber = parseInt (parseText[2], 10);
        jThis.after (
            ' <a href="http://redmine.project.com/redmine/issues/'
            + issueNumber + '">#' + issueNumber + '</a>'
        );

        //-- Style the Redmine link, if desired.
        jThis.next ().css ("background", "yellow")
    }
} );
于 2012-12-08T08:48:27.793 に答える