Add a local phone book for you!
// ==UserScript==
// @name ShoreTel Helper
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Add a local phone book for you!
// @author You
// @match http://your.shortel.site.com:5449/*
// @grant GM_listValues
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// ==/UserScript==
(function() {
'use strict';
// Your code here...
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
function on_contact_clicked(e) {
e= e || window.event;
var target = e.target || e.srcElement;
if (target.innerText.toLowerCase().trim() == 'call') {
var input = document.evaluate('//*[@id="contacts"]/form/div/table/tbody/tr/td[1]/div/input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var go = document.evaluate('//*[@id="contacts"]/form/div/table/tbody/tr/td[3]/a', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var number = target.parentElement.getElementsByTagName('td')[1].innerText;
input.value=number;
go.click();
} else if (target.innerText.toLowerCase().trim() == 'del') {
var number = target.parentElement.getElementsByTagName('td')[1].innerText.trim();
GM_deleteValue(number);
fill_phone_book(pb);
}
}
function fill_phone_book(pb) {
if (!pb)
pb = document.getElementById('PhoneBook');
var rowCount = pb.rows.length;
while(rowCount > 0) {
rowCount--;
console.log('deleting', rowCount);
pb.deleteRow(rowCount)
};
var tr = document.createElement('tr');
tr.addEventListener('click', function(event) {
var inputs = prompt('UserName and Number, seperated by ;');
inputs = inputs.split(';');
if (inputs.length == 2) {
var name = inputs[0].trim();
var number = inputs[1].trim();
GM_setValue(number, name);
console.log(inputs);
}
fill_phone_book(pb);
});
var th = document.createElement('th');
th.innerText="Name";
tr.append(th);
th = document.createElement('th');
th.innerText="Number";
tr.append(th);
th = document.createElement('th');
th.innerText="";
tr.append(th);
th = document.createElement('th');
th.innerText="";
tr.append(th);
pb.append(tr);
// fill phone book
var obj_list = [];
var number_list = GM_listValues();
for (var i=0; i < number_list.length; i++) {
var obj = {};
obj.number = number_list[i];
obj.name = GM_getValue(number_list[i])
obj_list.push(obj)
}
obj_list.sort((a,b) => (a.name > b.name) ? 1 : (a.name < b.name) ? -1 : 0)
for (var i=0; i < obj_list.length; i++) {
console.log(obj_list[i]);
var tr = document.createElement('tr');
var td = document.createElement('td');
td.innerText=obj_list[i].name;
tr.append(td);
td = document.createElement('td');
td.innerText=obj_list[i].number;
td.setAttribute('style', 'padding:0 0 0 15px');
tr.append(td);
td = document.createElement('td');
td.innerText='Call';
td.setAttribute('style', 'padding:0 0 0 15px; cursor:pointer');
tr.append(td);
td = document.createElement('td');
td.innerText='Del';
td.setAttribute('style', 'padding:0 0 0 15px; cursor:pointer');
tr.append(td);
tr.addEventListener('click', function(e) {
on_contact_clicked(e);
});
tr.addEventListener('mouseout', function(e) {
this.classList.remove('yui-dt-highlighted');
});
tr.addEventListener('mouseover', function(e) {
this.classList.add('yui-dt-highlighted');
});
pb.append(tr);
}
};
var observer = new MutationObserver(function(mutations, observer) {
// fired when a mutation occurs
// console.log(mutations, observer);
// ...
if (document.getElementById("call_manager")) {
if (document.getElementById('PhoneBook'))
return;
var pb = document.createElement('table');
pb.id = 'PhoneBook';
fill_phone_book(pb);
var target = document.getElementById("call_manager");
target.append(pb);
}
});
// define what element should be observed by the observer
// and what types of mutations trigger the callback
observer.observe(document, {
subtree: true,
attributes: true
//...
});
var history_observer = new MutationObserver(function(mutations, observer) {
// fired when a mutation occurs
// console.log(mutations, observer);
// ...
if (document.getElementById("history-menu")) {
if (document.getElementsByClassName("datatable").length) {
//console.log('inject history helper');
var trs = document.getElementsByClassName('datatable')[0].getElementsByTagName('tr');
for (var i=0; i < trs.length; i++) {
var tr = trs[i];
var tds = tr.getElementsByTagName('td');
if (tds.length) {
if (tds[0].innerText.startsWith('history')) {
var number = tds[3].innerText;
number = number.replace(/\s*/g,'');
number = number.replace(/.*(\d{11})/g,'$1');
var name = GM_getValue(number);
if (name) {
tds[2].getElementsByTagName('div')[0].innerText = name;
console.log(number +' ' + name);
} else {
console.log('No record for '+number+' '+name)
}
}
}
}
}
}
});
// define what element should be observed by the observer
// and what types of mutations trigger the callback
history_observer.observe(document, {
subtree: true,
attributes: false,
childList: true,
//...
});
})();