ソース

Bookmarklet

javascript:var db={"@xxx":"1234"};var baseUrl=window.location.href.split("#")[0];Date.prototype.addHours=function(h){this.setTime(this.getTime()+(h*60*60*1000));return this};function toDate(timeStr){var timeRegexp=/(.+)(am|pm) (GMT\+\d+)/;var periods=timeStr.replace(timeRegexp,'$2');baseTime=new Date(timeStr.replace(timeRegexp,'$1'));return periods=="pm"?baseTime.addHours(12):baseTime};var targetTime=toDate(document.querySelector("#"+window.location.href.split("#")[1]+" time").getAttribute("title"));var targets={};document.querySelectorAll("#notes-list .timeline-entry .note-header-info time").forEach(function(timeE,i){var compareTime=toDate(timeE.getAttribute("title"));if(targetTime<compareTime){discussion=timeE.closest(".timeline-content").getElementsByClassName("timeline-discussion-body")[0];if(discussion){target=discussion.getElementsByClassName("gfm-project_member")[0];if(target){var urls=targets[target.textContent];urls=urls?urls:[];urls.push(baseUrl+"/"+timeE.closest("a").getAttribute("href"));targets[target.textContent]=urls}}}});message=document.title.split(/ · /)[0]+"\n";for(let name in targets){message+="[To:"+db[name]+"]";message+="[info]";targets[name].forEach(function(url){message+=url+"\n"});message+="[/info]"};prompt("Copy & paste",message+"\n\nコメントのご確認をお願い致します。")();

/packer/

var db={"@xxx":"1234"};
var baseUrl = window.location.href.split("#")[0];
/* https://stackoverflow.com/questions/1050720/adding-hours-to-javascript-date-object */
Date.prototype.addHours = function(h) { this.setTime(this.getTime() + (h*60*60*1000)); return this; };
/* Apr 22, 2020 2:45pm GMT+0900 */
function toDate(timeStr) {
    var timeRegexp = /(.+)(am|pm) (GMT\+\d+)/;
    var periods = timeStr.replace(timeRegexp, '$2');
    baseTime = new Date(timeStr.replace(timeRegexp, '$1'));
    return periods == "pm" ? baseTime.addHours(12) : baseTime;
};

var targetTime = toDate(document.querySelector("#" + window.location.href.split("#")[1] + " time").getAttribute("title"));
/* console.log(targetTime.toString()); */
var targets = {};
document.querySelectorAll("#notes-list .timeline-entry .note-header-info time").forEach(function(timeE, i){
  /* console.log(timeE.getAttribute("title")); */
  var compareTime = toDate(timeE.getAttribute("title"));

  /* console.log(timeE); */
  /* console.log(compareTime.toString()); */
  if(targetTime < compareTime) {
    discussion = timeE.closest(".timeline-content").getElementsByClassName("timeline-discussion-body")[0];
    if(discussion) {
      target = discussion.getElementsByClassName("gfm-project_member")[0];
      if(target) {
        var urls = targets[target.textContent];
        urls = urls ? urls : [];
        urls.push(baseUrl + "/" + timeE.closest("a").getAttribute("href"));
        /* console.log(discussion.getElementsByClassName("note-text")[0].textContent); */
        targets[target.textContent] = urls;
      };
    };
  };
});
message = document.title.split(/ · /)[0] + "\n";
for (let name in targets) {
  message += "[To:"+db[name]+ "]";
  message += "[info]";
  targets[name].forEach(function(url) {
    message += url + "\n";
  });
  message += "[/info]";
};
prompt("Copy & paste", message + "\n\nコメントのご確認をお願い致します。")();

実行方法

ソースの修正

dbにGitlabの名称、ChatworkのIDを設定する

どの時点以降のコメントを対象にするか決定

コメントのヘッダーの右側にある ` 1 day ago` を押下

スクリプトを実行

結果

Resolve "HOGEHOGE タイトル" (!757)
[To:1234][info]https://exampole.com/path/to/project/-/merge_requests/757/#note_1202832
https://exampole.com/path/to/project/-/merge_requests/757/#note_1202836
[/info]

コメントのご確認をお願い致します。