// ==UserScript==
// @name Copy an Elephant
// @namespace Frank Scripts
// @match https://itsm.services.sap/*
// @match https://sap.service-now.com*
// @grant none
// @version 1.7.7
// @author I544317
// @description 6/3/2021
// @run-at document-start
// @license MIT
// ==/UserScript==
/******/(() => { // webpackBootstrap
/******/ "use strict";
let originalurl = ''
let currenturl = ''
const base = 'https://itsm.services.sap/now/workspace/agent/record'
const home = 'https://itsm.services.sap/now/workspace/agent/home'
let condition = ''
let middle = ''
let maindata = {}
let firsttimer = 0
let secondtimer = 0
let notification = 0
function removepopup (id) {
document.body.removeChild(document.getElementById('msgbox'+id))
}
function shareUrl (sla, time, shift) {
let {url:share, compName:comname, levelEle:levelname, idNum:id, headertitle:title, assignment, processor} = maindata
let tag = document.createElement("textarea");
tag.setAttribute("id", "share_url");
let content = `Title: ${title}
SAP Case Number: ${id}
Assignment Group: ${assignment}
State: ${levelname.slice(4)}
Component: ${comname}
Processor: ${(processor == '' ? 'None' : processor).padEnd(15, ' ')}
Link: ${share}`
if (shift) {
tag.value = content
} else if (levelname.slice(4) === 'Very High' && sla == 'ORT') {
tag.value = `Hi ${processor}
The ORT(VH) on ${comname} remains ${time} left
-------------------------------------------------
` + content
} else if (levelname.slice(4) === 'Very High' && sla == 'IRT') {
tag.value = `The IRT(VH) on ${comname} remains ${time} left
-------------------------------------------------
` + content
} else if (levelname.slice(4) === 'Very High' && sla == 'APT') {
tag.value = `This APT(VH) on ${comname} remains ${time} left
-------------------------------------------------
` + content
} else if (levelname.slice(4) === 'Very High') {
tag.value = `This is an unassigned VH on ${comname}
-------------------------------------------------
` + content
} else if (sla) {
tag.value = `The ${sla} of ${comname} remains ${time} left
-------------------------------------------------
` + content
} else {
tag.value = content
}
document.getElementsByTagName("body")[0].appendChild(tag);
document.getElementById("share_url").select();
document.execCommand("copy");
document.getElementById("share_url").remove();
}
function onlyShare (sla, time, shift) {
console.log('this is for onlyshare')
let {url:share, compName:comname, levelEle:levelname, idNum:id, headertitle:title} = maindata
let tag = document.createElement("textarea");
tag.setAttribute("id", "share_url");
let content = `Title: ${title}
SAP Case Number: ${id}
State: ${levelname.slice(4)}
Component: ${comname}
Link: ${share}`
tag.value = content
document.getElementsByTagName("body")[0].appendChild(tag);
document.getElementById("share_url").select();
document.execCommand("copy");
document.getElementById("share_url").remove();
}
function foremail (sla, time, handler) {
let {url:share, compName:comname, levelEle:levelname, idNum:id, headertitle:title, assignment, processor} = maindata
let tag = document.createElement("textarea");
tag.setAttribute("id", "share_url");
comname = comname.trim()
levelname = levelname.trim()
processor = processor.trim()
assignment = assignment.trim()
time = handler.includes('MPT')? 'None' : time
let content = `Remaining time: ${time.padEnd(10, ' ')}| Component: ${comname.padEnd(15, ' ')} | Processor: ${(processor == '' ? 'None' : processor).padEnd(15, ' ')} | Assignment Group: ${assignment} | SAP Case Number: ${id.padEnd()}
Link: ${share}`
tag.value = content
document.getElementsByTagName("body")[0].appendChild(tag);
document.getElementById("share_url").select();
document.execCommand("copy");
document.getElementById("share_url").remove();
}
function createnode (id,content, color, hide) {
let box = document.createElement('p')
box.setAttribute('id', 'msgbox'+id)
box.style.width = '300px'
box.style.height = '57px'
box.style.top = '78px'
box.style.left = '50%'
box.style.borderRadius = '6px'
box.style.backgroundColor = color
box.style.position = 'absolute'
box.innerText = content
box.style.marginLeft = '-150px'
box.style.fontSize = '16px'
box.style.lineHeight = '57px'
box.style.textAlign = 'center'
box.style.fontWeight = 'bold'
box.style.opacity='0.6'
box.style.color = '#fff'
box.style.zIndex = ''+ id
box.style.opacity = 1
document.body.appendChild(box)
if (hide) {
setTimeout(()=>{removepopup(id)}, 2000)
} else {
return box
}
}
function scanstatus () {
let className = document.querySelector("#inbox").shadowRoot.querySelector("button > div") == null ? 'available' : document.querySelector("#inbox").shadowRoot.querySelector("button > div").className
if (className.includes('inactive') && secondtimer > 0) {
} else if (className.includes('inactive') && notification === 0) {
let box = createnode('login','Remember to set your status available', 'red')
notification = 1
box.addEventListener('click', ()=>{
notification = 0
secondtimer = 1
removepopup('login')})
} else if (className.includes('busy') || className.includes('available')) {
if (notification == 1) {
notification = 0
removepopup('login')
} else if (secondtimer > 0) {
secondtimer = 0
}
}
}
function pollSLA(url, name, level , idnum , subtitle, org) {
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout")){
let i = 1
while (i>0) {
middle = "#tid_"+i+"_tid_formlayout_header_layout_ribbon_container > sn-component-ribbon-container"
if (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle)) {
break
} else {
i++
}
} // .shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla")
if (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot) {
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla")) {
if (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla").shadowRoot.querySelector("div > div.sn-widget-header > div") && document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla").shadowRoot.querySelector("div > div.sn-widget-header > div").innerText) {
if (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla").shadowRoot.querySelector("div > div.sn-widget-body.snu-p-0 > div > div > div > div:nth-child(2) > span.sn-sla-time")) {
let sla = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla").shadowRoot.querySelector("div > div.sn-widget-body.snu-p-0 > div > div > div > div:nth-child(2) > span.sn-sla-time").innerText
let header = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector(middle).shadowRoot.querySelector("div > now-uxf-page-container > div > div > div.sn-ribbon-column.-col-2 > sn-component-workspace-sla").shadowRoot.querySelector("div > div.sn-widget-header > div")
let headerstring = header.innerText
let notistring
if (headerstring.includes('IRT')) {
notistring = 'IRT'
} else if (headerstring.includes('ORT')) {
notistring = 'ORT'
} else if (headerstring.includes('APT')) {
notistring = 'APT'
}
let ele = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(1) > h1")
header.addEventListener('dblclick', ()=>{
shareUrl(notistring, sla)
let box = createnode(firsttimer, 'SLA has been copied', '#3fc770', true)
})
ele.addEventListener('click', ()=>{
foremail(notistring, sla, headerstring)
let box = createnode(firsttimer, 'Short message is copied', '#e6a23c', true)
})
} else {
setTimeout(pollSLA, 300)
}
} else {
setTimeout(pollSLA, 300)
}
} else {
setTimeout(pollSLA, 300)
}
} else {
setTimeout(pollSLA, 300)
}
} else {
setTimeout(pollSLA, 1000)
}
}
function pollDOM() {
let url = currenturl
let id = url.slice(-32)
condition = "#chrome-tab-panel-record_" + id + " > now-record-form-connected"
let flag = 0
let flag0 = 0
let closedFlag = false
let midEle1;
let midEle2;
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content") != null){
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition) != null){
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout") != null){
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout") != null){
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header") != null){
if(document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set") != null){
let middlePart = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set")
if(middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(5)") != null || middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(6)") != null || middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(7)") != null){
if (middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(5)") != null) {
flag = 1
} else if (middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(6)") != null) {
flag = 2
} else {
flag = 3
closedFlag = true
}
flag0 = (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(5)")) ? 3: 4
switch(flag){
case 1: midEle1 = middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(5)"); break;
case 2: midEle1 = middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(6)"); break;
case 3: midEle1 = middlePart.shadowRoot.querySelector("dl > sn-form-internal-header-label-value:nth-child(7)"); break;
}
switch(flag0){
case 3: midEle2 = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(5)"); break;
case 4: midEle2 = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(4)"); break;
}
if(midEle1.shadowRoot.querySelector("div > dd") != null && midEle2.shadowRoot.querySelector("div > dd > now-text-link") != null){
if(midEle2.shadowRoot.querySelector("div > dd > now-text-link").shadowRoot.querySelector("a")){
let processor = ''
if (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(5)")){
if (document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(4)")){
let node = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(4)").shadowRoot.querySelector("div > dd > now-text-link").shadowRoot.querySelector("a")
processor = node.innerText.slice(0, -10)
} else {
setTimeout(pollDOM, 300);
}
}
let ele = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(1) > h1")
let compEle = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set")
let compName = compEle.shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(3)") ? compEle.shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(3)").shadowRoot.querySelector("div > dd > now-text-link").shadowRoot.querySelector("a").innerText : compEle.shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(4)").shadowRoot.querySelector("div > dd > now-text-link").shadowRoot.querySelector("a").innerText
let levelEle = document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-highlighted-value").shadowRoot.querySelector("div > dd > now-highlighted-value").shadowRoot.querySelector("span > span > span").innerText
let idNum = midEle1.shadowRoot.querySelector("div > dd").innerText
let assignment = (flag0 == 4) ? document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(4)").shadowRoot.querySelector("div > dd > now-text-link").shadowRoot.querySelector("a").innerText : document.querySelector("body > sn-workspace-layout > sn-workspace-main > sn-workspace-content").shadowRoot.querySelector(condition).shadowRoot.querySelector("div > sn-form-internal-workspace-form-layout").shadowRoot.querySelector("form > sn-form-internal-header-layout").shadowRoot.querySelector("header > div.sn-header-layout-row > div:nth-child(1) > now-record-common-header").shadowRoot.querySelector("div > div > div > div:nth-child(2) > sn-form-internal-header-label-value-set").shadowRoot.querySelector("dl > sn-form-internal-header-label-reference-value:nth-child(5)").shadowRoot.querySelector("div > dd > now-text-link").shadowRoot.querySelector("a").innerText
let headertitle = ele.innerText
maindata = {url, compName, levelEle, idNum, headertitle, assignment, processor}
ele.title = headertitle
ele.addEventListener('dblclick', function(){
if (closedFlag) {
onlyShare('','',1)
} else {
shareUrl('','',1)
}
createnode(firsttimer, 'Copied to clipboard', '#0081AB', true)
})
pollSLA()
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
} else {
setTimeout(pollDOM, 300);
}
}
setInterval(()=>{
currenturl = location.href
if(originalurl != currenturl && currenturl.startsWith(base)) {
originalurl = currenturl
pollDOM()
}
if (firsttimer % 3 === 0) {
scanstatus()
} else if (firsttimer > 10000) {
firsttimer = 1
}
if (secondtimer > 0 && secondtimer < 3600) {
secondtimer++
} else {
secondtimer = 0
}
firsttimer++
}, 1000)
/******/ })()