Need to change the time zone for zdx integration - ZDX summary Section on incident

Amit Kumar13
Tera Expert

zdx summary.jpeg
Incident form

 As you can see in the image, this is servicenow integration with zscaler using plugin i.e Zscaler digital experience.

Now in this From and To date are showing UTC time zone by default.
I have to change it to IST. 
Kindly help how can I change this however user's time zone IST.
@Ankur Bawiskar 
Please help as this is coming from OOB plugin only.

5 REPLIES 5

Shivalika
Mega Sage

Hello @Amit Kumar13 

 

Please refer the below article if you want to change the default timezone of the system to one thing and it would work irrespective of user's time zone. 

 

https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0714577

 

Kindly mark my answer as helpful and accept solution if it helped you in anyway,

 

,

Shivalika 

 

My LinkedIn - https://www.linkedin.com/in/shivalika-gupta-540346194

 

My youtube - https://youtube.com/playlist?list=PLsHuNzTdkE5Cn4PyS7HdV0Vg8JsfdgQlA&si=0WynLcOwNe

EISQCY

 

Ankur Bawiskar
Tera Patron
Tera Patron

@Amit Kumar13 

what's rendering that content in that section?

Is that some UI macro added via formatter?

Did you check the code within it?

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Yes its's kind of formatter.
UI macro is there

field.jpeg

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
 
<g2:evaluate var="jvar_incident_caller_email">
current.caller_id.email.toString();
</g2:evaluate>
<g2:evaluate var="jvar_incident_caller_userid">
current.caller_id.user_name.toString();
</g2:evaluate>
<g2:evaluate var="jvar_device_user_id">
gs.getProperty('x_zsca2_zdx_manage.zdx_userid');
</g2:evaluate>
<g2:evaluate var="jvar_user_mod">
gs.getProperty('x_zsca2_zdx_manage.zdx_api_mod_choice');
</g2:evaluate>
<g2:evaluate var="jvar_user_mod_append">
gs.getProperty('x_zsca2_zdx_manage.zdx_api_mode_append');
</g2:evaluate>
<g2:evaluate var="jvar_user_mod_replace_from">
gs.getProperty('x_zsca2_zdx_manage.zdx_api_mode_replace_from');
</g2:evaluate>
<g2:evaluate var="jvar_user_mod_replace_to">
gs.getProperty('x_zsca2_zdx_manage.zdx_api_mode_replace_to');
</g2:evaluate>
 
 
 
<body>
<div class="score-analysis-wrapper">
<div class="score-analysis-loading-animation" id="score-analysis-loading-logo" style="display:none">
<h4>Loading...</h4>
</div>
<div class="score-analysis-info-message-wrapper" id="score-analysis-info-message-wrapper"></div>
<div class="score-analysis-date-time-wrapper" id="score-analysis-date-time-wrapper"></div>
<div class="score-analysis-content-wrapper" id="score-analysis-content-wrapper"></div>
<div class="score-analysis-button-wrapper" id="score-analysis-button-wrapper"></div>
</div>
</body>
 
 
<script>
var applicationresult1={};
var userDevices = {};
var idCounter = 0;
var chartTimeAxisX = {};
var divZeroLevelId;
var divFirstLevelId;
var divTableId;
var tabId;
var selectId;
var optionId;
var tableId;
var tokenRetryCount = 0;
 
addLoadEvent(function() {
 
//Get all section tabs
var getSectionElementnsSA = g_tabs2Sections.tabDiv.children;
var getTabSectionsSA = g_tabs2Sections.tabs;
 
//Get Tab Index for checking active Tab
var tabIndex = [];
for(var t = 0; t != getTabSectionsSA.length; t++){
if(getTabSectionsSA[t].attributes.tab_caption.value == "ZDX Summary"){
tabIndex.push(g_tabs2Sections.findTabIndexByID(getTabSectionsSA[t].attributes.id.value));
}
}
 
for (var i = 0; i != getSectionElementnsSA.length; i++) {
if (getSectionElementnsSA[i].children[0].innerText == 'ZDX Summary') {
if(sessionStorage.getItem('privateSessionToken') == "" || sessionStorage.getItem('privateSessionToken') == undefined || sessionStorage.getItem('privateSessionToken') == null){
requestAndSetToken();
}
if (tabIndex == g_tabs2Sections.activeTab) {
 
//Initiate execution if section selected by default
                    initiateScoreAnalysisSection();
} else {
 
//Add onclick eventListener to ZDX Score Analysis section tab
getSectionElementnsSA[i].children[0].addEventListener("click", initiateScoreAnalysisSection);
}
}
}
});
 
    
    function requestAndSetToken() {
//Get credentials
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'checkCredentials');
gAjax.getXML(parseResult);
 
function parseResult(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var result = JSON.parse(answer);
 
if (!result) {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "Login Error. Please contact your ServiceNow administrator");
} else {
sessionStorage.setItem('privateSessionToken', result.token);
}
}
 
}
 
 
function initiateScoreAnalysisSection() {
 
//Initiation should be triggered only once
document.getElementById("score-analysis-loading-logo").style.display = "";
disableEventListenerForSA();
if ('$[jvar_incident_caller_email]') {
 
mainFormForSA();
getDevicesDataForSA();
} else {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "Please check user's details in Caller field. Account should be actual and contains valid email");
}
}
 
//Get devices
function getDevicesDataForSA(userID) {
if('$[jvar_device_user_id]' == 'Email Id'){
userID = '$[jvar_incident_caller_email]'; //filtering by email id BUG-161512
}
else{
userID = '$[jvar_incident_caller_userid]';
}
if('$[jvar_user_mod]' != 'None')
{
var domains= ['xxx','xxx','xxx'];
if ('$[jvar_user_mod_append]')
{
domains[0]='$[jvar_user_mod_append]';
}
if ('$[jvar_user_mod_replace_from]')
{
domains[1]='$[jvar_user_mod_replace_from]';
}
if ('$[jvar_user_mod_replace_to]')
{
domains[2]='$[jvar_user_mod_replace_to]';
}
userID = userModification(userID,'$[jvar_user_mod]',domains);
}
 
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'getDevice');
gAjax.addParam('sysparm_get_device', userID);
gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
gAjax.getXML(parseResult);
function parseResult(response) {
        if(response.responseXML.documentElement.getAttribute("answer") == null){
            requestAndSetToken();
tokenRetryCount++
if(tokenRetryCount==1){
getDevicesDataForSA(userID);
}
else{
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "Login Error. Please contact your ServiceNow administrator");
}
        }
else {
var answer = response.responseXML.documentElement.getAttribute("answer");
var result = JSON.parse(answer);
if (!result) {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "No devices found matching the user's email address.Please check the email address of the user or the user may not have any active devices.");
}
else {
userDevices = result['devices'];
if (userDevices.length == 0 || userDevices.length > 4) {
if (userDevices.length == 0) {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "There are no devices owned by the user. Please contact your ZDX administrator");
}
if (userDevices.length > 4) {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "There are too many devices owned by the user. Please contact your ZDX administrator");
}
} else {
//setDevices(idCounter,userDevices);
getApplicationsDataForSA(userDevices);
}
}
}
}
}
 
//Helper to get the modded user based on choice
function userModification(base,choice,domains) {
if (choice == 'Append')
{
base = base+domains[0];
}
else if (choice == 'Replace')
{
base = base.replace(domains[1],domains[2]);
}
return base;
}
 
 
//Get applications
function getApplicationsDataForSA(userDevices) {
 
//Used in test purposes
//var userDevices = [{"id": 13445788,"name": "z-tm","userid": 76064},{"id": 14886948,"name": "Kell","userid": 14886944}];
 
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'getApplication');
gAjax.addParam('sysparm_get_app', JSON.stringify(userDevices));
gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
gAjax.getXML(parseResult);
 
function parseResult(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var applicationresult = JSON.parse(answer);
applicationresult1=JSON.stringify(applicationresult);
if (!applicationresult) {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "There is no information about applications. Please contact your ZDX administrator");
} else {
getTimestamps(applicationresult);
}
}
}
 
//get apps timestams and merging obj above
async function getTimestamps(userApplications){
 
var data = JSON.parse(JSON.stringify(userApplications));
 
 
 
if (typeof data == 'object') {
 
var arrResult = [];
//Case if requested applications for multiple devices
for (var i = 0; i ${AMP}lt; data.length; i++) {
idCounter = idCounter + 1;
await setDevices(idCounter,data[i]['devicename']);
 
var obj = {};
var apps = [];
var deviceID = data[i]['deviceid'];
 
var deviceName = data[i]['devicename'];
var link = data[i]['link'];
 
obj['deviceid'] = deviceID;
obj['devicename'] = deviceName;
obj['link'] = link;
obj['apps'] = apps;
 
//Case if requested timestamps for multiple applications
for (var j = 0; j ${AMP}lt; data[i]["apps"].length; j++) {
var app = data[i]["apps"][j];
var appID = data[i]["apps"][j]['id'];
 
//var response = this.requestScoreMetrics(deviceID, appID, this.getParameter('sysparm_cred_token'));
 
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'requestScoreMetrics');
gAjax.addParam('sysparm_deviceID', deviceID);
gAjax.addParam('sysparm_appID', appID);
gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
 
//gAjax.getXML(parseResult);
gAjax.getXMLWait();
var response = gAjax.getAnswer();
var result = JSON.parse(response);
 
function parseResult(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
result = JSON.parse(answer);
result1 = JSON.stringify(result);
 
}
document.getElementById("score-analysis-loading-logo").style.display = "none";
 
if (result['responseStatus'] == 200) {
var responseData = JSON.parse(result['responseBody']);
 
app['timestamps'] = responseData;
apps.push(app);
 
}
await createTable(j,apps,chartTimeAxisX,deviceID,link);
apps = [];
 
}
arrResult.push(obj);
//mainFormForSA(arrResult);
//arrResult = [];
 
}
//mainFormForSA(arrResult);
 
}
 
/*
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'getSM');
gAjax.addParam('sysparm_get_timestamp', JSON.stringify(userApplications));
gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
 
gAjax.getXML(parseResult);
 
function parseResult(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var result = JSON.parse(answer);
var result1 = JSON.stringify(result);
 
if (!result) {
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "There is no information about applications. Please contact your ZDX administrator");
} else {
document.getElementById("score-analysis-loading-logo").style.display = "none";
mainFormForSA(result);
}
}
*/
}
 
 
//Run Y-Engine Analysis
function postYEngineForSA(payload) {
  return new Promise((resolve, reject) => {
    var gAjax = new GlideAjax('zdxRESTajax');
    gAjax.addParam('sysparm_name', 'postYEngine');
    gAjax.addParam('sysparm_post_y_engine', payload);
    gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
    gAjax.getXML(parseResult);
    function parseResult(response) {
      var answer = response.responseXML.documentElement.getAttribute("answer");
      var result = JSON.parse(answer);
      var result1 = JSON.stringify(result);
      
      if (!result) {
        popUpMessageForSA(false, "Y-Engine session has been not created. Please contact your ZDX administrator");
        reject(new Error("Y-Engine session has not been created."));
      } else {
        //put some logic
        
        resolve(result['analysis_id']);
      }
    }
  });
}
 
 
 
function getYEngineForSA(id) {
  
  return new Promise(function(resolve, reject) {
    var gAjax = new GlideAjax('zdxRESTajax');
    gAjax.addParam('sysparm_name', 'getYEngine');
    gAjax.addParam('sysparm_get_y_engine', id);
    gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
    gAjax.getXML(parseResult);
    function parseResult(response) {
      var answer = response.responseXML.documentElement.getAttribute("answer");
      var result = JSON.parse(answer);
      var result2 = JSON.stringify(result);
      if(!result) {
        popUpMessageForSA(false, "There is no information about current Y-Engine session. Please contact your ZDX administrator");
        reject("There is no information about current Y-Engine session. Please contact your ZDX administrator");
      } else {
        resolve(result);
      }
    }
  });
}
 
 
 
//Build main markup for section
function mainFormForSA(obj,applicationresult) {
 
 
 
idCounter = 0;
 
divTimeFromId = "score-analysis-time-from-" + idCounter;
divTimeToId = "score-analysis-time-to-" + idCounter;
submitbutton= "score-analysis-submit-" + idCounter;
 
var date = new Date();
 
var dateTimeOneHourBefore = new Date(date.getTime() - 3600000).toISOString().split(':').slice(0,2).join(':');
var dateTimeTwoHoursBefore = new Date(date.getTime() - 7200000).toISOString().split(':').slice(0,2).join(':');
var dateTimeCurrent = new Date().toISOString().split(':').slice(0,2).join(':');
 
 
chartTimeAxisX = {
 
0: dateTimeTwoHoursBefore.split("T")[1],
50: dateTimeOneHourBefore.split("T")[1],
95: dateTimeCurrent.split("T")[1]
 
};
 
var dateTimeFromMin = new Date(date.getTime() - 13 * 86400000).toISOString().split(':').slice(0,2).join(':'); //-14 day
var dateTimeFromMax = new Date().toISOString().split(':').slice(0,2).join(':'); //+1 day
 
var dateTimeToMin = new Date(date.getTime() - 13 * 86400000).toISOString().split(':').slice(0,2).join(':'); //-14 day
var dateTimeToMax = new Date().toISOString().split(':').slice(0,2).join(':'); //+1 day;
 
 
//Time from
var divTimeFrom = document.createElement("div");
divTimeFrom.setAttribute("class", "score-analysis-time-from");
divTimeFrom.setAttribute("id", divTimeFromId);
var divContainerTime = document.getElementById("score-analysis-date-time-wrapper");
divContainerTime.appendChild(divTimeFrom);
 
var label = document.createElement("label");
label.setAttribute("for", "score-analysis-time-from");
label.innerHTML = "From:";
 
var input = document.createElement("input");
input.setAttribute("type", "datetime-local");
input.setAttribute("id", "score-analysis-time-from");
input.setAttribute("name", "score-analysis-time-from");
input.setAttribute("value", dateTimeTwoHoursBefore);
input.setAttribute("min", dateTimeFromMin);
input.setAttribute("max", dateTimeFromMax);
 
   
 
var divContainerTimeFrom = document.getElementById(divTimeFromId);
divContainerTimeFrom.appendChild(label);
divContainerTimeFrom.appendChild(input);
 
 
//Time to
var divTimeTo = document.createElement("div");
divTimeTo.setAttribute("class", "score-analysis-time-to");
divTimeTo.setAttribute("id", divTimeToId);
var divContainerTime = document.getElementById("score-analysis-date-time-wrapper");
divContainerTime.appendChild(divTimeTo);
 
var label = document.createElement("label");
label.setAttribute("for", "score-analysis-time-to");
label.innerHTML = "To:";
 
var input = document.createElement("input");
input.setAttribute("type", "datetime-local");
input.setAttribute("id", "score-analysis-time-to");
input.setAttribute("name", "score-analysis-time-to");
input.setAttribute("value", dateTimeCurrent);
input.setAttribute("min", dateTimeToMin);
input.setAttribute("max", dateTimeToMax);
//input.setAttribute("disabled", true);
 
 
var divContainerTimeTo = document.getElementById(divTimeToId);
divContainerTimeTo.appendChild(label);
divContainerTimeTo.appendChild(input);
 
//submit button
var submitbtn = document.createElement("div");
submitbtn.setAttribute("class", "score-analysis-submit");
submitbtn.setAttribute("id", submitbutton);
var divContainerTime = document.getElementById("score-analysis-date-time-wrapper");
divContainerTime.appendChild(submitbtn);
 
var input = document.createElement("input");
input.setAttribute("type", "button");
input.setAttribute("id", "score-analysis-submit");
input.setAttribute("value", "Submit");
 
var divContainerSubmit = document.getElementById(submitbutton);
divContainerSubmit.appendChild(input);
 
input.addEventListener("click", function() {
if(userDevices.length != 0){
 
var fromvalue = document.getElementById("score-analysis-time-from").value;
 
var fromepochtime = new Date(fromvalue + 'Z').getTime() /1000;
 
var tovalue = document.getElementById("score-analysis-time-to").value;
 
var toepochtime = new Date(tovalue + 'Z').getTime() /1000;
 
 
   var currentDate = new Date();
var epochTimeGMT = currentDate.getTime();
var epochTimeGMTInSeconds = Math.floor(epochTimeGMT / 1000);
if(fromepochtime > epochTimeGMTInSeconds || toepochtime > epochTimeGMTInSeconds){
alert("Please check the selected dates/time. Future date/time is not allowed.");
}
 
else {
 
var midtime = (fromepochtime+toepochtime) / 2;
var midTimeDate = new Date(midtime * 1000);
//gs.info(FromDate);
var gmtMidTime = new Date(midTimeDate.valueOf() + midTimeDate.getTimezoneOffset() * 60000);
var hours = gmtMidTime.getHours();
var mins = gmtMidTime.getMinutes();
if(hours ${AMP}lt; 10){
hours = '0' + hours;
}
if(mins ${AMP}lt; 10){
mins = '0' + mins;
}
var hrsmin = hours + ':'+ mins;
 
 
 
chartTimeAxisX = {
 
0: fromvalue.split("T")[1],
50: hrsmin,
95: tovalue.split("T")[1]
 
};
 
var FromDate = new Date(fromepochtime * 1000);
        var ToDate = new Date(toepochtime * 1000);
      // Calculate the time difference in milliseconds
          var diff = Math.abs(ToDate - FromDate);
         // Convert the difference to hours
        var diffHours = diff / (1000 * 60 * 60);
 
if (diffHours > 2) {
alert("The selected date difference is more that two hours.");
else{
   var maincontainer = document.getElementById("score-analysis-content-wrapper");
maincontainer.innerHTML = "";
 
var divElement = document.createElement("div");
divElement.classList.add("score-analysis-loading-animation-submit");
divElement.id = "score-analysis-loading-logo-submit";
divElement.style.display = "";
// Create the h4 element
var h4Element = document.createElement("h4");
h4Element.textContent = "Loading...";
// Append the h4 element to the div element
divElement.appendChild(h4Element);
// Find the parent div to append the created div
maincontainer.appendChild(divElement);
 
//var appresult = getApplicationsDataForSA(deviceresults);
//userDevices=[];
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'getApplicationSubmit');
gAjax.addParam('sysparm_get_app', JSON.stringify(userDevices));
gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
gAjax.addParam('sysparm_fromepoch', fromepochtime);
   gAjax.addParam('sysparm_toepoch', toepochtime);
gAjax.getXML(parseResult);
 
function parseResult(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var appresult = JSON.parse(answer);
if (!appresult) {
document.getElementById("score-analysis-loading-logo-submit").style.display = "none";
infoMessageForSA("error", "There is no information about applications for submit. Please contact your ZDX administrator");
} else {
getTimestampsSubmit(appresult);
}
}
 
async function getTimestampsSubmit(appresult){
 
 
var data = JSON.parse(JSON.stringify(appresult));
 
 
 
if (typeof data == 'object') {
 
var arrResult = [];
idCounter = 0;
//Case if requested applications for multiple devices
for (var i = 0; i ${AMP}lt; data.length; i++) {
idCounter = idCounter + 1;
await setDevices(idCounter,data[i]['devicename']);
 
var obj = {};
var apps = [];
var deviceID = data[i]['deviceid'];
 
var deviceName = data[i]['devicename'];
var link = data[i]['link'];
 
obj['deviceid'] = deviceID;
obj['devicename'] = deviceName;
obj['link'] = link;
obj['apps'] = apps;
 
//Case if requested timestamps for multiple applications
for (var j = 0; j ${AMP}lt; data[i]["apps"].length; j++) {
var app = data[i]["apps"][j];
var appID = data[i]["apps"][j]['id'];
 
//var response = this.requestScoreMetrics(deviceID, appID, this.getParameter('sysparm_cred_token'));
 
var gAjax = new GlideAjax('zdxRESTajax');
gAjax.addParam('sysparm_name', 'requestScoreMetricsSubmit');
gAjax.addParam('sysparm_deviceID', deviceID);
gAjax.addParam('sysparm_appID', appID);
gAjax.addParam('sysparm_fromepoch', fromepochtime);
   gAjax.addParam('sysparm_toepoch', toepochtime);
gAjax.addParam('sysparm_cred_token', 'Bearer ' + sessionStorage.getItem('privateSessionToken'));
 
//gAjax.getXML(parseResult);
gAjax.getXMLWait();
var response = gAjax.getAnswer();
var result = JSON.parse(response);
 
function parseResult(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
result = JSON.parse(answer);
result1 = JSON.stringify(result);
 
 
}
document.getElementById("score-analysis-loading-logo-submit").style.display = "none";
 
if (result['responseStatus'] == 200) {
var responseData = JSON.parse(result['responseBody']);
 
app['timestamps'] = responseData;
apps.push(app);
}
await createTable(j,apps,chartTimeAxisX,deviceID,link,fromvalue,tovalue);
 
apps = [];
 
}
arrResult.push(obj);
 
}
}
 
}
}
}
}
else{
document.getElementById("score-analysis-loading-logo").style.display = "none";
infoMessageForSA("error", "There are no devices owned by the user. Please contact your ZDX administrator");
    }
});
 
// createTable(obj,chartTimeAxisX,dateTimeTwoHoursBefore,dateTimeCurrent,idCounter);
 
 
}
async function setDevices(idCounter,obj){
 
 
 
return new Promise(resolve => {
//idCounter = idCounter + 1;
 
//Device folders
divZeroLevelId = "score-analysis-content-" + idCounter;
divFirstLevelId = "score-analysis-container-element-" + idCounter;
divTableId = "score-analysis-container-element-table-" + idCounter;
tabId = "score-analysis-tab-input-" + idCounter;
selectId = "score-analysis-tab-select-" + idCounter;
optionId ="score-analysis-tab-option-" + idCounter;
tableId = "score-analysis-app-table-" + idCounter;
 
var divZeroLevel = document.createElement("div");
divZeroLevel.setAttribute("class", "score-analysis-content");
divZeroLevel.setAttribute("id", divZeroLevelId);
var divContainerMain = document.getElementById("score-analysis-content-wrapper");
divContainerMain.appendChild(divZeroLevel);
 
var input = document.createElement("input");
input.setAttribute("type", "radio");
input.setAttribute("name", "score-analysis-css-tabs");
input.setAttribute("id", tabId);
if (idCounter == 1) {
input.setAttribute("checked", "true");
}
input.setAttribute("class", "score-analysis-tab-switch");
 
var label = document.createElement("label");
label.setAttribute("for", tabId);
label.setAttribute("class", "score-analysis-tab-label");
label.setAttribute("title", obj);
label.innerHTML = obj;
 
var divFirstLevel = document.createElement("div");
divFirstLevel.setAttribute("class", "score-analysis-container-element");
divFirstLevel.setAttribute("id", divFirstLevelId);
 
var divContainerTab = document.getElementById(divZeroLevelId);
divContainerTab.appendChild(input);
divContainerTab.appendChild(label);
divContainerTab.appendChild(divFirstLevel);
resolve();
 
});
}
 
 
 
async function createTable(loop,obj,chartTimeAxisX,idCounter,link,fromdate,todate){
 
function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}//making some delay in creatatble
 
await delay(1000);
return new Promise(resolve => {
 
tableId = "score-analysis-app-table-" + idCounter;
 
 
//Create Dynamic Table for Application and Score
var table = document.createElement("table");
table.setAttribute("id", tableId);
 
var tr = table.insertRow(-1);
 
 
tr.setAttribute("id", "score-analysis-tr-table-id");// TABLE ROW.
 
var column = ["Application", "ZDX Score"];
for(var k = 0; k != column.length; k++){
var th = document.createElement("th"); 
th.setAttribute("id", "score-analysis-td-table-id");// TABLE HEADER.
th.setAttribute("class", "score-analysis-table-th");
th.innerHTML = column[k];
tr.appendChild(th);
}
//for (var l = 0; l != obj[i]["apps"].length; l++) {
var tr = table.insertRow(-1);
 
//trcontainer.setAttribute("id", "score-analysis-tr-table-id");
tr.setAttribute("id", "score-analysis-tr-table-id");
tr.setAttribute("class", "score-analysis-table-tr");
 
 
//set App
var tabCell = tr.insertCell(-1);
tabCell.setAttribute("id", "score-analysis-td-table-id");
tabCell.setAttribute("class", "score-analysis-table-td");
tabCell.setAttribute("rowspan", "2");
 
var spanName = obj[0]["name"];
var scoreValue = Math.round(obj[0]["score"]); // ZDX 7842 Round off API values for ZDX summary scores.
 
//span for app chart
var chartSpan= document.createElement("span");
chartSpan.setAttribute("id", "chart-span");
chartSpan.setAttribute("class", "chart-span");
chartSpan.innerHTML = spanName;
tabCell.appendChild(chartSpan);
 
 
//actual chart svg
 
var chartSvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
chartSvg.setAttribute("id", "chart-svg");
chartSvg.setAttribute("viewBox", "0 0 1600 100");
chartSvg.setAttribute("preserveAspectRatio", "none");
chartSvg.setAttribute("version", "1.2");
chartSvg.setAttribute("class", "chart");
tabCell.appendChild(chartSvg);
 
var chartColor = '';
if(scoreValue ${AMP}lt;= 33){
chartColor = "red";
}else if(scoreValue > 65) { 
chartColor = "green";
}else{
chartColor = "orange";
}
var points = '';
var fillPoints = '';
var dataPoints = obj[0]["timestamps"]["datapoints"];
var dataPointsLength = dataPoints.length;
var graphWidth = 2000; // Set your desired width for the graph
var stepX = graphWidth / (dataPointsLength - 1);
for (var d = 0; d != dataPointsLength; d++) {
  if (dataPoints[d]["value"] != -1) {
var x = d * stepX;
var y = 100 - Math.round(dataPoints[d]["value"]);
points += x + "," + y + " ";
 
  }
}
fillPoints = "0,100 " + points + (graphWidth - stepX) + ',' + 100;
 
 
/*var points = '';
var fillPoints = '';
var stepX = 70;
for (var d = 0; d != obj[i]["apps"][l]["timestamps"]["datapoints"].length; d++) {
if(obj[i]["apps"][l]["timestamps"]["datapoints"][d]["value"] != -1){
points += stepX + "," + (100 - Math.round(obj[i]["apps"][l]["timestamps"]["datapoints"][d]["value"])) + " ";
stepX += 70;
}
 
 
}
fillPoints = '70,100 ' + points + (stepX -70) + ',' + 100;*/
 
var chartStroke = document.createElementNS("http://www.w3.org/2000/svg", "polyline");
chartStroke.setAttribute("fill", "none");
chartStroke.setAttribute("stroke", chartColor);
chartStroke.setAttribute("stroke-width", "1.5");
chartStroke.setAttribute("vector-effect", "non-scaling-stroke");
chartStroke.setAttribute("points", points);
chartSvg.appendChild(chartStroke);
 
var chartPolyline = document.createElementNS("http://www.w3.org/2000/svg", "polyline");
chartPolyline.setAttribute("fill", chartColor);
chartPolyline.setAttribute("fill-opacity", "0.4");
chartPolyline.setAttribute("stroke", "#1f8476");
chartPolyline.setAttribute("stroke-width", "0");
chartPolyline.setAttribute("vector-effect", "non-scaling-stroke");
chartPolyline.setAttribute("points", fillPoints);
chartSvg.appendChild(chartPolyline);
 
// text svg
 
var gSvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
gSvg.setAttribute("id", "g-svg");
gSvg.setAttribute("class", "g-svg");
tabCell.appendChild(gSvg);
 
var chartGx = document.createElementNS("http://www.w3.org/2000/svg", "g");
chartGx.setAttribute("id", "chart-x-labels");
chartGx.setAttribute("class", "chart-x-labels");
gSvg.appendChild(chartGx);
 
for (var key in chartTimeAxisX) {
var textX = document.createElementNS("http://www.w3.org/2000/svg", "text");
textX.setAttribute("x", key + "%");
textX.setAttribute("y", "100%");
textX.innerHTML = chartTimeAxisX[key];
chartGx.appendChild(textX);
}
 
 
 
 
 
//set Score
var tabCellScore = tr.insertCell(-1);
tabCellScore.setAttribute("id", "score-analysis-score-td");
tabCellScore.setAttribute("class", "score-analysis-score-td");
tabCellScore.innerHTML = scoreValue;
if(scoreValue ${AMP}lt;= 35){
tabCellScore.setAttribute("class", "red");
}else if(scoreValue > 65) { 
tabCellScore.setAttribute("class", "green");
}else{
tabCellScore.setAttribute("class", "orange");
}
 
var tr1 = table.insertRow(-1);
tr1.setAttribute("id", "score-analysis-tr-table-id");
tr1.setAttribute("class", "score-analysis-table-tr");
var tabCellBtn = tr1.insertCell(-1);
tabCellBtn.setAttribute("class", "score-analysis-btn-td");
 
//"Analyze Score" button creation
var buttonID = "button-id-"+obj[0]["id"]+"-"+idCounter;
 
var btnAnalyze = document.createElement("INPUT");
btnAnalyze.setAttribute("type", "button");
btnAnalyze.setAttribute("id", buttonID);
 
btnAnalyze.setAttribute("class", "score-analysis-button");
btnAnalyze.setAttribute("value", "Analyze Score");
 
btnAnalyze.setAttribute("scoreValue", scoreValue);
//btnAnalyze.setAttribute("disabled", false);
 
//var analyzebutton = document.getElementById(buttonID);
if(btnAnalyze.getAttribute("scoreValue") >34) { 
//analyzebutton.disabled=true;
 
btnAnalyze.disabled= true;
}
else{
 
//analyzebutton.disabled=false;
btnAnalyze.disabled= false;
}
 
var ApplicationID=obj[0]["id"];
var DeviceID=idCounter;
 
var fromvalue1 = document.getElementById("score-analysis-time-from").value;
 
var fromepochtime1 = new Date(fromvalue1 + 'Z').getTime() /1000;
 
 
var tovalue1 = document.getElementById("score-analysis-time-to").value;
 
var toepochtime1 = new Date(tovalue1 + 'Z').getTime() /1000;
 
btnAnalyze.setAttribute("deviceid", DeviceID);
btnAnalyze.setAttribute("appid", ApplicationID);
btnAnalyze.setAttribute("epochFrom", fromepochtime1);
btnAnalyze.setAttribute("epochTo", toepochtime1);
btnAnalyze.setAttribute("idCounter", idCounter);
btnAnalyze.setAttribute("rowid", "divtable-"+obj[0]["id"]+"-"+idCounter);
//btnAnalyze.setAttribute("obj", obj);
 
btnAnalyze.addEventListener("click", function() {
 
runAnalysisForSA(this.getAttribute("deviceid"), this.getAttribute("appid"), this.getAttribute("epochFrom"), this.getAttribute("epochTo"), idCounter, this.getAttribute("rowid"));
 
 
});
tabCellBtn.appendChild(btnAnalyze);
 
 
 
//"View in ZDX" button creation
var a = document.createElement("a");
var finallink =link.replace(" ", "");
//a.href = finallink + "/devices";
a.href = finallink;
a.target = "_blank";
tabCellBtn.appendChild(a);
var btnZdx = document.createElement("INPUT");
btnZdx.setAttribute("type", "button");
btnZdx.setAttribute("class", "score-analysis-button");
btnZdx.setAttribute("value", "View in ZDX");
a.appendChild(btnZdx);
 
var trcontainer = table.insertRow(-1);
var tabCellTable = trcontainer.insertCell(-1);
    tabCellTable.setAttribute("id", "divtable-"+obj[0]["id"]+"-"+idCounter);
trcontainer.appendChild(tabCellTable);
 
 
//}
 
//Add the newly created table to the container
var divContainerSelect = document.getElementById(divFirstLevelId);
divContainerSelect.appendChild(table);
 
var divTable = document.createElement("div");
divTable.setAttribute("class", "score-analysis-content-table");
divTable.setAttribute("id", divTableId);
var divContainerTable = document.getElementById(divFirstLevelId);
divContainerTable.appendChild(divTable);
resolve();
 
//}
});//promise end
}//create table ends
 
async function runAnalysisForSA(devicesid, applicationsid, fromepoch, toepoch, tabNumber, rowID) {
 
//var tabNumber = object.slice(-1);
 
//dummy
var data = '';
 
//Data for payload: first value - device_id, second value - app_id
var payload = {};
 
 
payload['device_id'] = devicesid;
payload['app_id'] = applicationsid;
payload['t0'] = fromepoch;
payload['t1'] = toepoch;
 
var removeTable = document.getElementById("score-analysis-content-table-" + tabNumber);
if (removeTable) {
removeTable.parentNode.removeChild(removeTable);
}
//Block selector during proccessing
//document.getElementById("score-analysis-tab-select-" + tabNumber).disabled = true;
 
  var divTableId = rowID;
        var divTable = document.getElementById(divTableId);
 
var divFirstLevelId = "score-analysis-container-element-" + tabNumber;
var divProgressBarId = "score-analysis-content-progress-bar-" + tabNumber;
var divBarId = "score-analysis-progress-bar-" + tabNumber;
 
var divProgressBar = document.createElement("div");
divProgressBar.setAttribute("class", "score-analysis-content-progress-bar");
divProgressBar.setAttribute("id", divProgressBarId);
//var divContainerProgress = document.getElementById(divFirstLevelId);
    divTable.innerHTML = "";
divTable.appendChild(divProgressBar);
//divTable.parentNode.insertBefore(divProgressBar, divTable.nextSibling);*/
//divWrapper.appendChild(divProgressBar); // Append the progress bar element to the new div element
 
 
var paragraph = document.createElement("p");
paragraph.innerHTML = "Analyzing your data.";
var divContainerParagraph = document.getElementById(divProgressBarId);
divContainerParagraph.appendChild(paragraph);
 
var divBar = document.createElement("div");
divBar.setAttribute("class", "score-analysis-progress-bar");
divBar.setAttribute("id", divBarId);
var divContainerBar = document.getElementById(divProgressBarId);
divContainerBar.appendChild(divBar);
 
const progressBar = document.getElementById("divProgressBarId");
var progressCount = 0;
// const intervalId = setInterval(() => {
if (progressCount == 0) {
progressCount = 1;
var element = document.getElementById(divBarId);
var width = 1;
var progressId = setInterval(frameProgress, 360);
function frameProgress() {
if (width >= 100) {
clearInterval(progressId);
progressCount = 0;
var removeDivProgressBar = document.getElementById(divProgressBarId);
removeDivProgressBar.parentNode.removeChild(removeDivProgressBar);
//  var removeDivWrapper = document.getElementById(divWrapper);
// removeDivWrapper.parentNode.removeChild(removeDivWrapper); // Remove the entire wrapper div element
 
} else {
width++;
element.style.width = width + "%";
}
}
}
//}, 300); //run for 30 secs
 
var analysisId = await postYEngineForSA(JSON.stringify(payload));
 
var analysisResult = await getYEngineForSA(analysisId);
 
var finalanalysisResult;
setTimeout(async function() {
finalanalysisResult = await getYEngineForSA(analysisId);
 
if(["analysis_id"] in finalanalysisResult){
var close = document.createElement("button");
close.setAttribute("class", "close-button");
close.innerHTML = "Close";
// Add a click event listener to the button
close.addEventListener("click", function() {
        var divContainerTable = document.getElementById(rowID);
divContainerTable.innerHTML = "";
        divContainerTable.removeChild(close);
});
 
var divContainerTable = document.getElementById(rowID);
divContainerTable.innerHTML = "No data. Please try after some time.";
divContainerTable.appendChild(close);
     }
     else{
tableAnalysisForSA(tabNumber, rowID, finalanalysisResult);
}
 
}, 30000);
 
 
//Remove previous table
/*var removeTable = document.getElementById("score-analysis-content-table-" + tabNumber);
if (removeTable) {
removeTable.parentNode.removeChild(removeTable);
}
//Block selector during proccessing
//document.getElementById("score-analysis-tab-select-" + tabNumber).disabled = true;
 
var divFirstLevelId = "score-analysis-container-element-" + tabNumber;
var divProgressBarId = "score-analysis-content-progress-bar-" + tabNumber;
var divBarId = "score-analysis-progress-bar-" + tabNumber;
 
var divProgressBar = document.createElement("div");
divProgressBar.setAttribute("class", "score-analysis-content-progress-bar");
divProgressBar.setAttribute("id", divProgressBarId);
var divContainerProgress = document.getElementById(divFirstLevelId);
divContainerProgress.appendChild(divProgressBar);
 
var paragraph = document.createElement("p");
paragraph.innerHTML = "Analyzing your data.";
var divContainerParagraph = document.getElementById(divProgressBarId);
divContainerParagraph.appendChild(paragraph);
 
var divBar = document.createElement("div");
divBar.setAttribute("class", "score-analysis-progress-bar");
divBar.setAttribute("id", divBarId);
var divContainerBar = document.getElementById(divProgressBarId);
divContainerBar.appendChild(divBar);
 
var progressCount = 0;
 
if (progressCount == 0) {
progressCount = 1;
var element = document.getElementById(divBarId);
var width = 1;
var progressId = setInterval(frameProgress, 100);
function frameProgress() {
if (width >= 100) {
clearInterval(progressId);
progressCount = 0;
var removeDivProgressBar = document.getElementById(divProgressBarId);
removeDivProgressBar.parentNode.removeChild(removeDivProgressBar);
 
//Unblock selector
//document.getElementById("score-analysis-tab-select-" + tabNumber).disabled = false;
 
//Call table building
tableAnalysisForSA(tabNumber, rowID);
//userButtonForSA();
} else {
width++;
element.style.width = width + "%";
}
}
}*/
}
 
 
//Build table of Y-Engine analysis result
function tableAnalysisForSA(tab, rowid, finalanalysisResult) {
var column = ['Factor','Explanation'];
 
var result = finalanalysisResult.result;
 
 
var idCounter = tab;
 
var divTableId = "score-analysis-container-element-table-" + idCounter;
var tableId = "score-analysis-content-table-" + idCounter;
 
var table = document.createElement("table");
table.setAttribute("class", "score-analysis-table-tb");
table.setAttribute("id", tableId);
 
var tr = table.insertRow(-1);
tr.setAttribute("class", "score-analysis-table-tr");
 
for (var i = 0; i != column.length; i++) {
var th = document.createElement("th"); 
th.setAttribute("class", "score-analysis-table-th");
th.innerHTML = column[i];
tr.appendChild(th);
}
 
for (var i = 0; i != result.length; i++) {
tr = table.insertRow(-1);
tr.setAttribute("class", "score-analysis-table-tr1");
 
for (var j = 0; j != column.length; j++) {
if (j == 0) {
var tabCell = tr.insertCell(-1);
tabCell.setAttribute("class", "score-analysis-table-td");
tabCell.innerHTML = result[i]["issue"];
} else {
var tabCell = tr.insertCell(-1);
tabCell.setAttribute("class", "score-analysis-table-td");
tabCell.innerHTML = result[i]["detailed_message"];
}
}
}
 
var closeButton = document.createElement("button");
closeButton.setAttribute("class", "close-button");
closeButton.innerHTML = "Close Table";
// Add a click event listener to the button
closeButton.addEventListener("click", function() {
        var table = document.getElementById(tableId);
        var divContainerTable = document.getElementById(rowid);
        divContainerTable.removeChild(table);
        divContainerTable.removeChild(closeButton);
});
 
var divContainerTable = document.getElementById(rowid);
divContainerTable.innerHTML = "";
divContainerTable.appendChild(closeButton);
divContainerTable.appendChild(table);
 
//scroll to new table 
//var innerTable = divContainerTable.querySelector('.score-analysis-content-table');
//innerTable.scrollIntoView();
table.scrollIntoView({ behavior:'smooth', block:'center'});
}
 
 
function userButtonForSA() {
//User in ZDX button
var input = document.createElement("input");
input.setAttribute("style", "button");
input.setAttribute("class", "score-analysis-button-user");
input.setAttribute("value", "View User details on ZDX");
 
var divContainerButton = document.getElementById("score-analysis-button-wrapper");
divContainerButton.innerHTML = "";
divContainerButton.appendChild(input);
}
 
 
function infoMessageForSA(type, message) {
//type (error,info)
var divMessage = document.createElement("div");
divMessage.setAttribute("class", "score-analysis-message-" + type);
divMessage.setAttribute("id", "score-analysis-message");
var divContainerMessage = document.getElementById("score-analysis-info-message-wrapper");
divContainerMessage.appendChild(divMessage);
 
var paragraph = document.createElement("p");
paragraph.innerHTML = message;
var divContainerParagraph = document.getElementById("score-analysis-message");
divContainerParagraph.appendChild(paragraph);
return true;
}
 
 
function popUpMessageForSA(state, message) {
//GlideModal scrolling function crashes in case of "Modal over Modal"
//var dialogClass = GlideModal ? GlideModal : GlideDialogWindow;
var popUpDialog = new GlideDialogWindow("x_zsca2_zdx_manage_zdx_score_analysis_info", false, 600);
popUpDialog.setTitle(new GwtMessage().getMessage("Score Analysis information message"));
popUpDialog.setPreference('scoreAnalysisMessageState', state);
popUpDialog.setPreference('scoreAnalysisMessage', message);
popUpDialog.render();
}
 
 
//Remove onclick listener from ZDX Score Analysis section tab
function disableEventListenerForSA() {
 
//Get all section tabs
var getSectionElementnsSA = g_tabs2Sections.tabDiv.children;
 
for (var i = 0; i != getSectionElementnsSA.length; i++) {
if (getSectionElementnsSA[i].children[0].innerText == 'ZDX Summary') {
 
//Remove onclick eventListener to Deep Tracing section tab
getSectionElementnsSA[i].children[0].removeEventListener("click", initiateScoreAnalysisSection);
}
}
return true;
}
 
</script>
 
 
<style>
.score-analysis-info-message-wrapper {
font-weight: bold;
display:flex;
justify-content: center;
align-items: center;
height:100%;
margin: auto;
}
 
.score-analysis-date-time-wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr auto;
grid-gap: 10px;
width: 100%;
margin-bottom: 20px;
}
 
#score-analysis-time-from, #score-analysis-time-to {
margin-left: 10px;
}
 
.score-analysis-submit {
    margin-top: 10px;
}
 
.score-analysis-wrapper {
width: 100%;
margin: 0 auto;
}
 
.score-analysis-content-wrapper {
position: relative;
margin: 3rem 0;
background: #ffffff;
height: 40rem;
overflow: scroll;
overflow-x: hidden;
}
 
.score-analysis-content-wrapper::before,
.score-analysis-content-wrapper::after {
content: "";
display: table;
}
 
.score-analysis-content-wrapper::after {
clear: both;
}
 
.score-analysis-content {
float: left;
}
 
.score-analysis-tab-switch {
display: none;
}
 
.score-analysis-tab-label {
position: relative;
line-height: 2.75em;
height: 3em;
padding: 0 5em;
background: #e6e9eb;
border-top: 3px solid #cbcbcb;
color: #000000;
cursor: pointer;
top: 0;
transition: all 0.25s;
 
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
width: 400px
}
 
.score-analysis-tab-label:hover {
top: -0.25rem;
transition: top 0.25s;
}
 
.score-analysis-container-element {
width: 100%;
position: absolute;
z-index: 1;
top: 2.75em;
left: 0;
padding: 1.618rem;
background: #ffffff;
color: #2c3e50;
opacity: 0;
transition: all 0.35s;
}
 
.score-analysis-tab-switch:checked + .score-analysis-tab-label {
background: #ffffff;
color: #2c3e50;
border-top: 3px solid #1f8476;
border-bottom: 0;
border-right: 0.125rem solid #ffffff;
border-left: 0.125rem solid #cbcbcb;
transition: all 0.35s;
z-index: 1;
top: -0.0625rem;
}
 
.score-analysis-tab-switch:checked + .score-analysis-tab-label + .score-analysis-container-element {
z-index: 2;
opacity: 1;
transition: all 0.35s;
}
 
.score-analysis-content-table {
padding-top: 25px;
}
 
.score-analysis-table-th {
width: -webkit-fill-available;
font-family: SourceSansPro, "Helvetica Neue", Arial;
font-size: 13px;
border: solid 2px #ffffff;
border-collapse: collapse;
background-color: #e6e9eb;
padding: 5px 10px;
text-align: left;
}
 
.score-analysis-table-tb,
.score-analysis-table-tr,
.score-analysis-table-td {
width: -webkit-fill-available;
font-family: SourceSansPro, "Helvetica Neue", Arial;
font-size: 13px;
border: solid 2px #e6e9eb;
border-collapse: collapse;
padding: 5px 10px;
text-align: left;
}
 
.score-analysis-table-tr1 {
font-family: SourceSansPro, "Helvetica Neue", Arial;
font-size: 13px;
border: solid 2px #e6e9eb;
border-collapse: collapse;
padding: 5px 10px;
text-align: left;
    height: 5px !important;
}
.score-analysis-table-tr1 td:first-child {
  width: 30%;
height: 5px !important;
  
}
.score-analysis-table-tr1 td:last-child {
  width: 70%;
height: 5px !important;
  
}
 
.score-analysis-button-user {
background-color: #1f8476;
border: 1px solid #1f8476;
border-radius: 12px;
box-sizing: border-box;
color: #ffffff;
cursor: pointer;
font-size: 12px;
outline: 0;
text-align: center;
transition: transform 150ms, box-shadow 150ms;
-webkit-user-select: none;
}
 
.score-analysis-button-user:hover {
box-shadow: rgba(0, 0, 0, .15) 0 3px 9px 0;
transform: translateY(-3px);
}
 
@media (min-width: 768px) {
.score-analysis-button-user {
padding: 6px 10px;
}
}
 
@keyframes load {
0%{
opacity: 0.08;
filter: blur(5px);
letter-spacing: 3px;
}
100%{
}
}
 
.score-analysis-loading-animation {
display:flex;
justify-content: center;
align-items: center;
height:100%;
margin: auto;
font-family: SourceSansPro, "Helvetica Neue", Arial;
animation: load 1.2s infinite 0s ease-in-out;
animation-direction: alternate;
text-shadow: 0 0 1px white;
}
 
.score-analysis-loading-animation-submit {
display:flex;
justify-content: center;
align-items: center;
height:4%;
margin: auto;
font-family: SourceSansPro, "Helvetica Neue", Arial;
animation: load 1.2s infinite 0s ease-in-out;
animation-direction: alternate;
text-shadow: 0 0 1px white;
}
 
.score-analysis-content-progress-bar {
text-align: center;
position: relative;
top: 60%;
left: 50%;
transform: translate(-50%, -50%);
width: 200px;
margin-top: 30px;
background-color: #ffffff;
border: 1px solid #000000;
 
}
 
.score-analysis-progress-bar {
width: 1%;
height: 15px;
background-color: #7a7676;
}
 
table {
width: 100%;
}
 
.score-analysis-table-td {
width: 80%;
height: 100px;
}
 
.score-analysis-btn-td {
border-style: hidden;
border-right: aliceblue;
border-bottom: aliceblue;
border-left: aliceblue;
text-align: center;
}
 
.score-analysis-button {
border: 1px solid #005F99;
background-color: white;
color: #005F99;
border-radius: 3px;
height: 30px;
width: 115px;
margin: 5px;
}
 
.score-analysis-button:hover {
box-shadow: rgba(0, 0, 0, .15) 0 3px 9px 0;
transform: translateY(-1px);
}
 
.score-analysis-button[disabled] {
     background-color: gray;
     color: white;
    }
 
.red {
color: red;
}
 
.orange {
color: orange;
}
 
.green {
color: green;
}
 
.red,
.orange,
.green {
text-align: center;
font-size: 20pt;
font-weight: 500;
}
 
.chart{
width: calc(100% - 20px);
height: calc(100% - 20px);
float: left;
}
 
.g-svg{
clear: both;
margin-left: 20px;
width: calc(100% - 40px);
height: 20px;
}
 
</style>
</j:jelly>