Post

Gitlabで特定時間以降のコメントを集約したい

ソース

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] コメントのご確認をお願い致します。
This post is licensed under CC BY 4.0 by the author.