Zendesk Window Title

Improves the browser window title when using zendesk agent by adding info like ticket id.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name        Zendesk Window Title
// @namespace   http://www.software-architects.at
// @description Improves the browser window title when using zendesk agent by adding info like ticket id.
// @match       https://*.zendesk.com/agent/*
// @grant       none
// @version     1.8
// @copyright   2014-2024 software architects gmbh
// @author      Simon
// ==/UserScript==

var currentSection = null;
var isSectionPresent = false;
var initialWindowTitle = null;

function getTitle() {
    "use strict";

    var tabs = $("div[data-test-id='header-toolbar']");
    if (tabs.length === 1) {
        var selectedTabs = tabs.find("div[data-selected='true']");
        if (selectedTabs.length === 1) {
            var tabHeader = selectedTabs.find("div[data-test-id='header-tab-title']");
            if (tabHeader.length === 1) {
                return tabHeader[0].innerText;
            }
        } else {
            console.debug('ZendeskWindowTitle: getTitle: selected tab not found');
        }
    } else {
        console.debug('ZendeskWindowTitle: getTitle: tabs not found');
    }

    return null;
}

function getTicketInformation() {
    "use strict";

    var title = null;
    var user = null;
    var org = null;

    var mainPanes = $('#main_panes');
    if (mainPanes.length === 1) {
        var div = mainPanes.children('div.ember-view.workspace').not('[style*="none"]');
        if (div.length === 1) {
            var nav = div.find('nav.ember-view.btn-group');
            if (nav.length === 1) {
                var buttons = nav.children('span.btn');
                if (buttons.length === 3) {
                    user = $(buttons[1]).text().trim();
                    if (!$(buttons[0]).hasClass('create')) {
                        org = $(buttons[0]).text().trim();
                    } else {
                        console.debug('ZendeskWindowTitle: getTicketInformation: no org');
                    }

                    title = getTitle();
                } else {
                    console.debug('ZendeskWindowTitle: getTicketInformation: buttons not found');
                }
            } else {
                console.debug('ZendeskWindowTitle: getTicketInformation: nav not found');
            }
        } else {
            console.debug('ZendeskWindowTitle: getTicketInformation: div not found');
        }
    } else {
        console.debug('ZendeskWindowTitle: getTicketInformation: main panes not found');
    }

    if (title && user) {
        if (org) {
            return title + ' - ' + user + ' - ' + org;
        } else {
            return title + ' - ' + user;
        }
    }

    return null;
}

function updateWindowTitle() {
    "use strict";
    if (!isSectionPresent) {
        if (window.document.title === 'Zendesk...') {
            console.debug('ZendeskWindowTitle: dummy window title present');
            return;
        } else if (Zd.hasOwnProperty('section')) {
            isSectionPresent = true;
            initialWindowTitle = window.document.title;
            console.debug('ZendeskWindowTitle: section present');
        } else {
            console.debug('ZendeskWindowTitle: section still missing');
            return;
        }
    }

    if (Zd.section !== currentSection) {
        if (!Zd.section) {
            currentSection = Zd.section;
            console.debug('ZendeskWindowTitle: empty section');
            window.document.title = initialWindowTitle;
        } else if (Zd.section.indexOf('tickets/') === 0) {
            var id = Zd.section.substring(8);
            console.debug('ZendeskWindowTitle: focused ticket: ' + id);

            var info = getTicketInformation();
            if (info) {
                currentSection = Zd.section;
                window.document.title = initialWindowTitle + ' - #' + id + ' - ' + info;
            } else {
                // something did not check out, ensure that we query again
                currentSection = null;
                window.document.title = initialWindowTitle + ' - #' + id;
            }
        } else {
            currentSection = Zd.section;
            console.debug('ZendeskWindowTitle: focused: ' + Zd.section);
            window.document.title = initialWindowTitle + ' - ' + currentSection;
        }
    }
}

window.setInterval(updateWindowTitle, 1000);