Improve Zendesk

Ajoute diferentes fonctionalitées à Zendesk

当前为 2024-08-07 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Improve Zendesk
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Ajoute diferentes fonctionalitées à Zendesk
// @author       Morgan
// @match        *://djmdigital.zendesk.com/*
// @grant        GM_addStyle
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    var customCSS = `
.sc-1oduqug-0.jdCBDY {
    margin-top: 30px;
}

button.sc-n5wku7-0.htHdVo.StyledButton-sc-qe3ace-0.iTTOJs, .play-next button, button.sc-137q24h-0.fBxYYr.StyledButton-sc-qe3ace-0.iHPrzf,button.sc-isqijc-0.bCgRtB.StyledButton-sc-qe3ace-0.cBBpso {
    padding: 5px 60px;
    background-color: limegreen;
    font-size: large;
    color:black
}

iframe#web-messenger-container {
    display: none;
}

.app_view.app-1019154.apps_ticket_sidebar iframe {
    height: 80vh!important;
}


/* Task link */
a.djm-task-link {
    padding: 0px 102px;
    background-color: limegreen;
    font-size: large;
    color: black;
    border: 1px solid transparent;
    border-radius: 4px;
    cursor: pointer;
    position:relative;
}

    `;

    GM_addStyle(customCSS);

    setTimeout(function() {
        customFunction()
    }, 500); // SetTimeout avec un délai de 1 seconde
    function customFunction(message) {
        setTimeout(function() {
            // Ajoutez vos appels de fonction ici
            checkUrlAndRunScriptInitializeInputLinks()
            checkUrlAndRunScriptTransformUrlsToLinks()
        }, 500); // SetTimeout avec un délai de 1 seconde
    }

    // Écoute les changements de chemin causés par des actions de navigation
    window.addEventListener('popstate', function() {
        customFunction('Chemin changé: ' + window.location.pathname);
    });

    // Fonction pour surcharger history.pushState et history.replaceState
    function overrideHistoryMethod(methodName) {
        var originalMethod = history[methodName];
        history[methodName] = function(state) {
            if (typeof history['on' + methodName] == "function") {
                history['on' + methodName]({state: state});
            }
            customFunction('Chemin changé par ' + methodName + ': ' + window.location.pathname);
            return originalMethod.apply(history, arguments);
        };
    }

    // Surcharge history.pushState et history.replaceState
    overrideHistoryMethod('pushState');
    overrideHistoryMethod('replaceState');

    // Déclenche les événements personnalisés après surcharge
    window.history.onpushstate = function(e) {
        window.dispatchEvent(new CustomEvent('pushstate', e));
    };
    window.history.onreplacestate = function(e) {
        window.dispatchEvent(new CustomEvent('replacestate', e));
    };

    // Sélectionner tous les éléments 'thead'
    var theads = document.querySelectorAll('thead');
    // Ajouter un event listener sur chaque 'thead'
    theads.forEach(function(thead) {
        thead.addEventListener('click', function(event) {
            // Code à exécuter lorsque l'événement 'click' est déclenché sur un 'thead'
            customFunction('Un thead a été cliqué' + event.target)

        });
    });





    function transformUrlsToLinks() {

        const cells = document.querySelectorAll('.hKkHGP');
        const urlRegex = /(https?:\/\/[^\s]+)/g;

        if (cells.length > 0) {


            cells.forEach((cell, index) => {
                const textContent = cell.textContent;

                if (urlRegex.test(textContent)) {
                    const link = document.createElement('a');
                    link.setAttribute('href', textContent.match(urlRegex)[0]);
                    link.textContent = textContent.match(urlRegex)[0];
                    cell.textContent = '';
                    cell.appendChild(link);
                }
            });
        }
    }


    // Fonction pour vérifier l'URL et exécuter le script si nécessaire
    function checkUrlAndRunScriptTransformUrlsToLinks() {
        if (window.location.pathname.startsWith('/agent/filters/')) {
            transformUrlsToLinks()
        }
    }



    // Fonction qui initialise les liens des inputs
    function initializeInputLinks() {
        var inputElements = document.querySelectorAll('.custom_field_14504424601628 input');

        inputElements.forEach(function(inputElement) {
            // Supprime les anciens liens s'ils existent
            var existingLink = inputElement.parentNode.parentNode.querySelector('.djm-task-link');
            if (existingLink) {
                existingLink.remove();
            }

            // Crée un nouvel élément <a> pour chaque input
            var linkElement = document.createElement('a');
           // linkElement.setAttribute('target', '_blank');
            linkElement.textContent = 'Tâche';
            linkElement.style.display = 'none'; // Cache initialement l'élément de lien
            linkElement.classList.add('djm-task-link');
            inputElement.parentNode.parentNode.insertBefore(linkElement, inputElement.nextSibling);

            // Vérifie la valeur de l'input et met à jour le lien dès la création
            checkForUrl(inputElement, linkElement);

            // Ajoute un écouteur d'événements sur chaque input pour détecter les changements de valeur
            inputElement.addEventListener('input', function() {
                console.log('Événement input détecté.');
                checkForUrl(inputElement, linkElement);
            });
        });
    }

    // Fonction qui vérifie si la valeur de l'input contient une URL et met à jour le lien
    function checkForUrl(inputElement, linkElement) {
        if (inputElement.value.match(/(https?:\/\/[^\s]+)/g)) {
            linkElement.href = inputElement.value;
            linkElement.style.display = 'inline';
        } else {
            linkElement.style.display = 'none';
        }
    }
    // Fonction pour vérifier l'URL et exécuter le script si nécessaire
    function checkUrlAndRunScriptInitializeInputLinks() {
        if (window.location.pathname.startsWith('/agent/tickets/')) {
            initializeInputLinks();
        }
    }


})();