Follow Tickets

Automatically follow tickets when you add comments or click the save button

当前为 2025-11-03 提交的版本,查看 最新版本

// ==UserScript==
// @name         Follow Tickets
// @namespace    https://github.com/ahr-huber/monkey-scripts/
// @version      2025-11-03
// @description  Automatically follow tickets when you add comments or click the save button
// @license      MIT
// @author       Andreas Huber
// @match        https://*.saas.microfocus.com/*
// @match        https://ot-internal.saas.microfocus.com/ui/?p=4001/13012
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpSIVBzuIOmRodbGLijiWKhbBQmkrtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APEXXBSdJES/5cUWsR4cNyPd/ced+8AoVllqtkTA1TNMtKJuJjLr4qBV/gxigAimJCYqSczi1l4jq97+Ph6F+VZ3uf+HANKwWSATySOMd2wiDeIZzctnfM+cYiVJYX4nHjSoAsSP3JddvmNc8lhgWeGjGx6njhELJa6WO5iVjZU4hnisKJqlC/kXFY4b3FWq3XWvid/YbCgrWS4TnMMCSwhiRREyKijgiosRGnVSDGRpv24h3/E8afIJZOrAkaOBdSgQnL84H/wu1uzOD3lJgXjQO+LbX9EgMAu0GrY9vexbbdOAP8zcKV1/LUmMPdJeqOjhY+AwW3g4rqjyXvA5Q4w/KRLhuRIfppCsQi8n9E35YGhW6B/ze2tvY/TByBLXS3fAAeHwHiJstc93t3X3du/Z9r9/QDakHLQl3fAPwAAAAZiS0dEAO8A7wDvwcyDBQAAAAlwSFlzAAAN1wAADdcBQiibeAAAActJREFUOMutk8trU1EQxn8zuUnqq6Du1I1ulCwtguCj6W3xH5Do0p2iIsabEJdpuxKrtKU7RcxKXLhzIaKGQgPiQnwuhFisLlqEiqGtkOccF7U18UZQdGAOHL7zfcOc+Qb+MaTjlhqO6ZelUTMpIBwF+wxUEDlAxLujrUbWiuNBOyXSIbDtYK/TepnIhgpam8Pz5mjZPOJ9pLVx3ml9lp39xqdSdY3itfM1Vpu0hlzWWC1jjydzbVAFgHz+vZaWbxucCjczmLlIMt8DwLHsbvwg1bXpQ7kt+MHZ9aI/lBXHC/qpA1BvfsWsTD6vIYFqpYqz12vY6lFamcJzHxgZMQCmJyqI7mBm+UxI4PmNBrhFnVm5ujqFocxhTBcojs2GHidzu4g0T+CIdm3HyUvF2Ce0boXAvtNR0eZDNRIKW7sliAepVET8S68YCI53CPhBWgYyj/7MSH7WF+ymizcSPJiqMXh+u7h4WXAFc/ouzLIFiuP3f06heK2I8IZaNA2gLj4MvEXYpGp9vybI/rCVh9J7xPSZQ08KdteZJJi+vvhXu6B+MObggjjuWcQK4V/nG08mnv5+mZLnNqv0XHHI3u7lbMkd6U2t++V/xHcXZav/DXBUYwAAAABJRU5ErkJggg==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function clickFollowIcon() {
        if (!isAlreadyFollowing()) // check again, because multiple clicks without page reload
        {
            document.querySelector("button[data-aid='alm-entity-form-header-follow']").click();
        }
    }

    function isFullyLoaded(){
        const alreadyFollowing = document.querySelector("[data-aid='alm-entity-form-header-following']");
        const notYetFollowing = document.querySelector("button[data-aid='alm-entity-form-header-follow']");
        return alreadyFollowing != null || notYetFollowing != null;
    }

    function isAlreadyFollowing(){
        const alreadyFollowing = document.querySelector("[data-aid='alm-entity-form-header-following']");
        return !!alreadyFollowing;
    }

    function addClickHandlerIfNotExists(selector, handler) {
        const element = document.querySelector(selector);
        if (element && element.getAttribute("data-tamper-click") == null) {
            element.addEventListener("click", handler);
            element.setAttribute("data-tamper-click", "true");
            element.style.outline="1px dotted red";
        }
    }

    function ensureClickHandler(selector, handler){
        window.setInterval(()=>{
            if (!isFullyLoaded() || isAlreadyFollowing()){
                return;
            }

            const selectors = [
                "button[icon='save']", // save button
                'button[data-aid="comments-pane-add-new-comment-button"]' // save a new comment
            ];
            selectors.forEach(it =>{
                addClickHandlerIfNotExists(it, () =>clickFollowIcon());
            });

        }, 1000);
    }

    ensureClickHandler();
})();