Zendesk Tag Comparison

Generates a more human readable tag comparison in the events menu.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Zendesk Tag Comparison
// @namespace    http://tampermonkey.net/
// @version      1.1.3
// @description  Generates a more human readable tag comparison in the events menu.
// @author       You
// @match        https://*.zendesk.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function compareTags(previous_tags_string, current_tags_string) {
        let previous_tags = previous_tags_string.split(" ");
        let current_tags = current_tags_string.split(" ");

        let matching_tags = new Set();

        let new_tags = new Set();
        let lost_tags = new Set();

        if (previous_tags_string != "" && current_tags_string != "") {
            for (const previous_tag of previous_tags) {
                for (const current_tag of current_tags) {
                    if (previous_tag == current_tag) {
                        matching_tags.add(previous_tag);
                    }
                }
            }

            for (const current_tag of current_tags) {
                if (!matching_tags.has(current_tag)) {
                    new_tags.add(current_tag);
                }
            }

            for (const previous_tag of previous_tags) {
                if (!matching_tags.has(previous_tag)) {
                    lost_tags.add(previous_tag);
                }
            }
        }

        return {
            matching: matching_tags,
            new: new_tags,
            lost: lost_tags
        }
    }

    function replaceTags() {
        let xpath = "//li[@class='Change']/div/label[text()='Tags']/..";
        let result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);

        let found_node;
        let found_nodes = [];
        while (found_node = result.iterateNext()) {
            found_nodes.push(found_node);
        }

        for (let node of found_nodes) {
            let previous_tags = node.childNodes[9].innerText;
            let current_tags = node.childNodes[3].textContent;

            let comparison_data = compareTags(previous_tags, current_tags);
            let save_via = node.querySelector(".via");

            node.innerHTML = "<label>Tag Changes</label>";

            for (const tag of comparison_data.new) {
                node.innerHTML += "<div style=\"color:green;\">➕ " + tag + "</div>";
            }

            for (const tag of comparison_data.lost) {
                node.innerHTML += "<div style=\"color:red;\">➖ " + tag + "</div>";
            }
            node.innerHTML += "<div>" + current_tags + "</div>";
            node.innerHTML += "<div><del>" + previous_tags + "</del></div>";

            node.appendChild(save_via);
        }
    }

    setInterval(replaceTags, 1000);
})();