-
Notifications
You must be signed in to change notification settings - Fork 2
/
ZendeskWindowTitle.user.js
126 lines (112 loc) · 4.25 KB
/
ZendeskWindowTitle.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// ==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);