Zendesk Window Title Improved

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

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name        Zendesk Window Title Improved
// @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.7.1
// @author      Leo; Original Author: Simon
// @license MIT
// ==/UserScript==

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

function getTitle() {
    "use strict";

    var tabs = $("div[data-test-id='header-tablist']");
    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 = '#' + id + ' - ' + info;
            } else {
                // something did not check out, ensure that we query again
                currentSection = null;
                window.document.title = '#' + id;
            }
        } else {
            currentSection = Zd.section;
            console.debug('ZendeskWindowTitle: focused: ' + Zd.section);
            window.document.title = initialWindowTitle + ' - ' + currentSection;
        }
    }
}

window.setInterval(updateWindowTitle, 1000);