X-Git-Url: https://src.twobees.de/?p=tampermonkeyscripts.git;a=blobdiff_plain;f=AzureDevOpsCommentEnhancer.user.js;h=b42e8bec2a74c500f46c308e55514cb6f66595ea;hp=1e14836b241ec8a2b40b6bf0d8cde912e5f98c08;hb=HEAD;hpb=d8aff79113d24775c63fc6f69f17ded3e11197c3 diff --git a/AzureDevOpsCommentEnhancer.user.js b/AzureDevOpsCommentEnhancer.user.js index 1e14836..b42e8be 100644 --- a/AzureDevOpsCommentEnhancer.user.js +++ b/AzureDevOpsCommentEnhancer.user.js @@ -1,58 +1,124 @@ // ==UserScript== // @name Fix ADS checkin comments in discussion and history of workitems -// @version 0.2 +// @version 0.18 // @author Tobias Sachs -// ... add match eg https://myazerdevops/* -// @match https:// -// @updateURL https://github.com/tsheba/tampermonkeyscripts/blob/master/AzureDevOpsCommentEnhancer.user.js +// ... in @match replace "ads" with the url of you Azure DevOps Server +// @match https://ads/* +// @updateURL https://src.twobees.de/?p=tampermonkeyscripts.git;a=blob_plain;f=AzureDevOpsCommentEnhancer.user.js;hb=HEAD +// @downloadURL https://src.twobees.de/?p=tampermonkeyscripts.git;a=blob_plain;f=AzureDevOpsCommentEnhancer.user.js;hb=HEAD // @grant none +// @description // ==/UserScript== +// 0.18: make '@@DEPENDENCIES' blue +// 0.17: search caseless for '@@CUST' +// 0.16: do not modify a comment more than once +// 0.15: fix links to work items found in commitmessages (e.g. #1235) +// 0.14: also check html property of comments +// 0.13: Allow to manually insert changeset comments, which where not associated with the item during checking. +// Just copy changecomment into the commentsection and prefix with "Associated with changeset CHANGESET_NUMBER:" +// 0.12: also fix "Resolved with changeset" comments +// 0.11: fix regexp for later changesets attached. +// 0.10: #Bugnumber to links, highlight comments for customors in checkins +// 0.09: updateq download/update URLs +// 0.08: fix typregexp for later changesets attachedos/formatting +// 0.07: fix work itlsem tampering +// 0.06: Add link to Changeset in diff view + +/* jshint esversion:6 */ (function() { 'use strict'; - let timerId = undefined; - let fixComments = (items) => - { - if (items === null || items === undefined || items.length === 0) - { + let timerId; + + let fixWorkitems = () => { + let found = document.getElementsByClassName("comment-content"); + fixCommentContents(found); + + found = document.getElementsByClassName("history-item-comment"); + fixCommentContents(found); + + console.debug("observe..."); + }; + + let checkRegex = /^.*(Associated|Resolved).*[:.]/; + let fixCommentContents = (items) => { + if (items === null || items === undefined || items.length === 0) { return; } console.info("fixing '" + items.length +"' comments."); - for (var i = 0; i < items.length; i++){ + for (var i = 0; i < items.length; i++) { let el = items[i]; + if(el.wasTampered) { continue; } + let html = el.innerHTML; - if (html.startsWith("Associated")) - { - html = html.replace(/(Associated with changeset )(\d*):/, "$1$2:
"); - el.innerHTML = html.replace(/\n/gi, "
"); + if ( checkRegex.test(html) + || (el.textContext && checkRegex.test(el.textContext)) + ) { + html = html.replace(/((Associated|Resolved) with changeset )(\d*)([:.])/, + "$1$3$4
"); + html = html.replace(/#(\d+)/g, "#$1"); + html = html.replace(/\n/gi, "
"); + html = html.replace(/(@@CUST.*)/is, "
$1"); + html = html.replace(/(@@Dependencies.*)/is, "$1"); + el.innerHTML = html; + el.wasTampered = "😋"; } } }; + + let fixVersionControl = () => { + let elToFix; + let found = document.getElementsByClassName("changeset-version")[0]; + if (!found) { + return; + } + + // if opened from email notification, it is the first span in div "changeset-version" + elToFix = found.querySelector("span"); + + if (!elToFix) { + return; + } + + elToFix.innerHTML = elToFix.innerHTML + .replace(/(Changeset )(\d+)/, + "$1$2"); + }; + let fixit = () => { - if (timerId){ + if (timerId) { console.debug("fixit timerreset..."); clearTimeout(timerId); } observer.disconnect(); - timerId = setTimeout(function(){ + + timerId = setTimeout(function() { timerId = undefined; - let found = document.getElementsByClassName("comment-content"); - fixComments(found); - found = document.getElementsByClassName("history-item-comment"); - fixComments(found); + let url = window.location.href; - console.debug("observe..."); + if (url.includes("/_versionControl")) { + fixVersionControl(); + } + else { + // if (url.includes("/_workitems")){ + // does not work since workitems are often shown in + // dialogs on random pages + fixWorkitems(); + } + + // keep watching for changes observer.observe(document, { subtree: true, childList: true, characterData: true }); }, 300); }; const observer = new MutationObserver(function() { - console.debug('observertriggered...'); + console.debug('observer was triggered...'); fixit(); }); fixit(); })(); +