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コメントのご確認をお願い致します。")();
元
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]
コメントのご確認をお願い致します。