Scouts Membership System (UK) Tweaks

Provide a few tweaks including a role compliance report to the Scouts Website

当前为 2025-05-17 提交的版本,查看 最新版本

// ==UserScript==
// @name         Scouts Membership System (UK) Tweaks
// @description  Provide a few tweaks including a role compliance report to the Scouts Website
// @namespace    http://tampermonkey.net/
// @version      2025-03-16
// @description  try to take over the world!
// @author       You
// @match        https://membership.scouts.org.uk/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=scouts.org.uk
// @grant  GM_xmlhttpRequest
// @grant GM_getResourceURL
// @grant GM_getResourceText
// @grant GM_addStyle
// @run-at      document-idle
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require     http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js
// @resource    jqUI_CSS  http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css
// @resource    IconSet1  http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/images/ui-icons_222222_256x240.png
// @resource    IconSet2  http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/images/ui-icons_454545_256x240.png
// @license MIT 

// ==/UserScript==
var mem = [{}];
var mems= [];
var roles = [];
var role_detail = [];
var mem_learning= [];
var mem_lcount;
var role_max_count;
var respond = false;
var end = false;
var un="2nd New Haw%Pan%";
(function() {
    'use strict';
    function do_move() {
        console.log(document.getElementById("member-nav").value);
    }
    function dopage() {
        //    if(window.location.href.indexOf("subunitsau")!=-1) {

        setTimeout(function() {
            console.log("After Wait");
            console.log(window.location.href );
            if ((window.location.href == "https://membership.scouts.org.uk/")||(window.location.href == "https://membership.scouts.org.uk/#/")) {
                console.log("Homepage");
                if (document.getElementById("member-nav-list")==null){
                    var gotolist="<datalist id='member-nav-list'><option value='Add a New Member'></option>";
                    gotolist+="<option value='My Units'></option>";
                    gotolist+="</datalist>";

                    gotolist ='<label for="member-nav" style="font-size: 1.5em;font-weight: 600">What do you want to do?&nbsp;</label>' + gotolist;
                    gotolist += '<input style="width: 50%; font-size: 1.5em "list="member-nav-list" id="member-nav" name="member-nav-choice" onchange="do_move"/>';
                    if( document.getElementById("title")!=null) {

                        if (document.getElementById("quick_nav")==null) {
                            gotolist = '<div id="quick_nav">'+gotolist+'</div>';
                      //      document.getElementById("title").outerHTML += (gotolist);

                        } else
                        {
                      //      document.getElementById("quick_nav").innerHTML = (gotolist);
                        }
                    } // title

                } // already dispalyed
            }
            if (window.location.href.indexOf("subunitsau") != -1) {
                //document.body.appendChild(button);
                var htmlToInsert;
                htmlToInsert = '<span id="DavesnewText"><p>There are <a href="';
                htmlToInsert += window.location.href.substring(0, window.location.href.indexOf("subunitsau"));
                htmlToInsert += 'teamsau"><span id="teamcounter"></span></a> Teams at this level</p><span><span id="DavesList"><span>';
                //console.log(document.getElementById("header-main-title-all-units-grid"));

                GM_xmlhttpRequest({
                    method: "POST",
                    url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/UnitTeamsAndRolesListingAsync",
                    data: '{"unitId" : "' + window.location.href.substring(window.location.href.indexOf("allunits/") + 9, window.location.href.indexOf("subunitsau") - 1) + '", "type" : "team"}',
                    headers: {
                        "Content-Type": "application/json",
                        "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                        "Accept": "application/json, text/plain, */*"
                    },
                    onload: function(response) {
                        console.log("gut response");
                        console.log(response.responseText);
                        console.log(JSON.parse(response.responseText));
                        if (JSON.parse(response.responseText).teams.length > 1) {
                            document.getElementById("teamcounter").innerHTML = JSON.parse(response.responseText).teams.length;
                        } else {
                            htmlToInsert = '<p>There is <a href="';
                            htmlToInsert += window.location.href.substring(0, window.location.href.indexOf("subunitsau"));
                            htmlToInsert += 'teamsau/' + JSON.parse(response.responseText).teams[0].teamId + "/teamdashboardaut";
                            htmlToInsert += '"><span id="teamcounter">1</span></a> Team at this level</p>';
                            document.getElementById("DavesnewText").innerHTML = (htmlToInsert);
                        }
                        var elements = document.querySelectorAll('[id^=grid-unit]');
                        var elements2 = document.querySelectorAll('[id^=grid-parentUnit]');
                        for (var loop = 0; loop < elements.length; loop++) {
                            var htmlToInsert2 = '<a href="';
                            htmlToInsert2 += elements[loop].href.substring(0, elements[loop].href.indexOf("subunitsau"));
                            htmlToInsert2 += 'teamsau">&nbsp;&nbsp;&nbsp;<strong style=" display: inline-block;  width: 40px; height: 40px;line-height: 40px;text-align: center; background-color: #007bff;  cursor:pointer; color: white; border-color: #007bff; border-radius: 50%;font-size: 20px;font-weight: bold;">T</strong></a>';
                            elements2[loop].outerHTML += htmlToInsert2;
                        }
                    }
                }); // End of request
                document.getElementById("header-main-title-all-units-grid").innerHTML += (htmlToInsert);
                var button = document.createElement("Button");
                button.innerHTML = "Add a Member";
                button.onclick = () => {

                    window.open(window.location.href.substring(0, window.location.href.indexOf("subunitsau")) + "unitdetailsau/addmemberau", "_self");
                };
                button.style = "background: rgb(0, 97, 205);font-weight: 700;font-family: 'Nunito Sans';font-size: 20px;line-height: 1.5;color: white;min-height: 46px;max-width: 215px; cursor:pointer;vertical-align: middle;padding: 8px 24px;border-color: #007bff;";
                document.getElementById("header-main-title-all-units-grid").appendChild(button);

            }
        })

        if (window.location.href.indexOf("teamdashboardaut") != -1) {
            setTimeout(function() {
                var button = document.createElement("Button");
                button.innerHTML = "Add a Member";
                button.onclick = () => {

                    window.open(window.location.href.substring(0, window.location.href.indexOf("teamsau")) + "unitdetailsau/addmemberau", "_self");
                };
                button.style = "background: rgb(0, 97, 205);font-weight: 700;font-family: 'Nunito Sans';font-size: 20px;line-height: 1.5;color: white;min-height: 46px;max-width: 215px;vertical-align: middle;padding: 8px 24px;border: none; cursor:pointer;";
                document.getElementById("header-button-wrapper-action-list").appendChild(button);
            }, 1000);
        }

    } // dopage

    function addButton(text, onclick, cssObj) {
        cssObj = cssObj || {position: 'absolute', top: '63px', left:'60%', 'z-index': 3}
        let button = document.createElement('button'), btnStyle = button.style
        document.body.appendChild(button)
        button.innerHTML = text
        button.onclick = onclick
        btnStyle.position = 'absolute'
        Object.keys(cssObj).forEach(key => btnStyle[key] = cssObj[key])
        return button
    }
    function get_data(count){
        var datapass;
        var max = 50;
        document.getElementById("gmUnit").innerHTML = un;
        un = document.getElementById("gmunitname").value;
        $("#gmState")[0].innerText = "Reading Members for "+un+" ("+count+")";

        //  document.getElementById("gmState").innerText = "Hello World";
        datapass = '{"pagesize":'+max+',"nexttoken":'+count+',"filter":{"global":"","globaland":false,"fieldand":true,"filterfields":[{"field":"unitName","value":"'+un+'"}]},"isSuspended":false}';
        //       console.log(datapass);
        GM_xmlhttpRequest({
            method: "POST",
            context: count,
            url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/MemberListingAsync",
            data: datapass,
            synchronous:    true,
            headers: {
                "Content-Type": "application/json",
                "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                "Accept": "application/json, text/plain, */*"
            },
            onload: function(response) { //  console.log(response);console.log(count);
                //    console.log(response.responseText);
                // console.log(JSON.parse(response.responseText).data[1]);
                mem =  (JSON.parse(response.responseText).data);
                mems = mems.concat(mem);
                //      console.log(mem.length);
                //      console.log(JSON.parse(response.responseText).data);
                respond = true;
                //     console.log(mem);
                //    console.log(JSON.parse(response.responseText).data.length);
                $("#gmState")[0].innerText = "Reading Members for "+un+" ("+response.context+")";
                if ( JSON.parse(response.responseText).data.length ==50) {get_data(count+1); } else {report2()};},
            onerror:   function(response) { console.log(response);},
            onabort:  function(response) { console.log(response);}
        });

    }

    function report2() {
        //  console.log(mem[1]);
        //      console.log(mems);
        if (document.getElementById("gmpersonname").value !=""){
            mems = mems.filter( function(v) {return v.fullname.includes(document.getElementById("gmpersonname").value);})

        }
        if (document.getElementById("gmteamname").value !=""){
            mems = mems.filter( function(v) {return v.Team.includes(document.getElementById("gmteamname").value);})

        }

        var seen = {};
        var out = [];
        var len = mems.length;
        var j = 0;
        for(var i = 0; i < len; i++) {
            var item = mems[i];
            if(seen[item.id] !== 1) {
                seen[item.id] = 1;
                out[j++] = item;
            }
        }
        mems = out;

        $("#gmState")[0].innerText = "Number of Members "+mems.length;
        for(var loop = 0;loop<mems.length; loop++) {


            GM_xmlhttpRequest({
                method: "POST",
                context: loop+1,
                url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GetMemberRolesAsync",
                data: '{"contactId": "'+mems[loop].id+'"}',
                synchronous:    true,
                headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                    "Accept": "application/json, text/plain, */*"
                },
                onload: function(response) {//console.log(response.context);
                    $("#gmState")[0].innerText = "Number of Members "+mems.length+" reading roles for number "+response.context;
                    //     console.log(mems.length);
                    roles=roles.concat(JSON.parse(response.responseText).data);
                    // console.log(JSON.parse(response.responseText));
                    if (response.context-1==mems.length-1){console.log(roles);console.log(mems);report3();} }
            });
        };
    }


    function report3() {
        console.log(roles);
        if (document.getElementById("gmhelper").checked) {
            roles = roles.filter( function(v) {return !v.RoleName.includes("Non Member - Needs disclosure");})
            roles = roles.filter( function(v) {return !v.RoleName.includes("Holding");})

        }
        if (document.getElementById("gmteamname").value !=""){
            roles = roles.filter( function(v) {if( v.Team==null){return false} else {return v.Team.includes(document.getElementById("gmteamname").value);}})

        }
        var xml = 0; var nullc=0;



        for(var loop=0;loop<roles.length;loop++) {
            //  console.log(roles[loop].EndDate);
            $("#gmState")[0].innerText = "Checking Role "+loop+" of "+roles.length;
            if ((roles[loop].EndDate==null)||(roles[loop].Status!=null)) {
                //   console.log("OK");
                role_max_count = loop;
                GM_xmlhttpRequest({
                    method: "POST",
                    context: loop+1,
                    url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GenerateSASTokenAsync",
                    data: '{container: "contacts", permissions: "R", file: "'+roles[loop].ContactId+'/membership/'+roles[loop].Id+'/audit/data.json"}',
                    synchronous:    true,
                    headers: {
                        "Content-Type": "application/json",
                        "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                        "Accept": "application/json, text/plain, */*"
                    },
                    onload: function(response) {
                        $("#gmState")[0].innerText = "Fetching Role "+response.context+" of "+roles.length;
                        GM_xmlhttpRequest({
                            method: "GET",
                            context: response.context+1,
                            url: JSON.parse(response.responseText).token,

                            onload: function(response) { // console.log(response.responseText);
                                // console.log(JSON.parse(response.responseText));
                                console.log("Total"+(role_detail.length + nullc + xml));
                                console.log("Aim"+(roles.length-1));
                                $("#gmState")[0].innerText = "Checking Role "+response.context;
                                if(!response.responseText.includes("xml")) { role_detail.push(JSON.parse(response.responseText));} else {xml++};
                                if (role_detail.length+nullc+xml>=roles.length){console.log(role_detail); mem_lcount = 0;report5()}}

                        })

                    }
                });
            } else { nullc++}
        }
    }



    function report5() {

        if (document.getElementById("gmlearning").checked) {

            GM_xmlhttpRequest({
                method: "POST",

                url: "https://tsa-memportal-prod-fun01.azurewebsites.net/api/GetLmsDetailsAsync",
                data: '{"contactId": "'+mems[mem_lcount].id+'"}',
                //      context: loop,
                headers: {
                    "Content-Type": "application/json",
                    "Authorization": "Bearer " + JSON.parse(localStorage.getItem("authInfo")).idToken,
                    "Accept": "application/json, text/plain, */*"
                },
                onload: function(response) {
                    $("#gmState")[0].innerText = "Number of Members "+mems.length+" reading learning for number "+mem_lcount;
                    var l = new Object;
                    l.id = mems[ mem_lcount].id;
                    l.learn = JSON.parse(response.responseText);
                    mem_learning[mem_lcount] = l;
                    // console.log(JSON.parse(response.responseText));
                    if ( mem_lcount==mems.length-1){console.log(mem_learning);report4("L");}else{ mem_lcount++;report5()}}
            });

        } else {report4("NL") }
    }

    function report4(typeR) {
        console.log(typeR);
        var  act = ['managerDisclosureCheck','dataProtectionTrainingComplete','signDeclaration','updateMemberProfile','referenceRequest','safeguardconfidentialEnquiryCheck','managerWelcomeConversation','coreLearning','managerTrusteeCheck'];
        var  title = ['Role','Unit','Team','Name','Status','Start Date','Days','Disclosure','GDPR','Declaration','Profile','References','CE Check','Welcome','Learning','Trustee'];
        var learn = ['Creating Inclusion','Data Protection in Scouts','Delivering a Great Programme','First Response','Safeguarding','Safety','Who We Are and What We Do','Being a Trustee in Scouts','Leading Scout Volunteers'];
        $("#gmState")[0].innerText = "Data Collection Completed";
        var myTableDiv = document.getElementById("gmTable");
        var table = document.createElement('TABLE');
        table.border = '1';

        var tableBody = document.createElement('TBODY');
        table.appendChild(tableBody);
        var tr = document.createElement('TR');
        tableBody.appendChild(tr);
        for (var i=0; i<title.length;i++){
            var td = document.createElement('TD');
            //    td.style.backgroundColor = 'red';
            if (i>6) { td.style.writingMode = "vertical-lr"; td.style.backgroundColor='lightcyan';}
            //  td.style.writingmode = 'vertical-lr';
            td.appendChild(document.createTextNode(title[i]));

            tr.appendChild(td);
        }
        if (document.getElementById("gmlearning").checked) {
            for ( i=0; i<learn.length;i++){
                td = document.createElement('TD');

                td.style.writingMode = "vertical-lr";
                td.style.backgroundColor = 'LightGray';
                td.appendChild(document.createTextNode(learn[i]));

                tr.appendChild(td);
            }
        }
        for (i = 0; i < role_detail.length; i++) {
            var displine=true;

            if (document.getElementById("gmmissing").checked) {
                var any_missing = false;
                for (var j = 0; j < act.length; j++) {
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {
                        var value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value!="Satisfactory")&&(value!="Completed")&&(value!="Held - Satisfactory")){ any_missing=true;}
                    }
                }
                if (any_missing==false) {displine=false}
            }
            if (displine) {
                tr = document.createElement('TR');
                tableBody.appendChild(tr);
                // Name
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName));
                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitId));
                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team));
                tr.appendChild(td);
                td = document.createElement('TD');
                var fullname = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).fullname;
                var nameid = mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).id;
                //https://membership.scouts.org.uk/#/membersearch/e2bb1e9a-afea-482d-a41b-bcb8f6898272/viewmember"
                var memhtml = '<a href="https://membership.scouts.org.uk/#/membersearch/'+nameid+'/viewmember">'+fullname+'</a>';
         //       td.appendChild(document.createTextNode(mems.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId).fullname));
                td.innerHTML=(memhtml);
                tr.appendChild(td);
                // Role
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(role_detail[i].rolestatus));
                tr.appendChild(td);
                td = document.createElement('TD');
                var sdate = new Date(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).StartDate);
                td.appendChild(document.createTextNode(sdate.toLocaleDateString('en-us', { year:"numeric", month:"short", day:"numeric"})));
                var days  = Math.round((new Date() - sdate) / (1000 * 60 * 60 * 24));

                tr.appendChild(td);
                td = document.createElement('TD');
                td.appendChild(document.createTextNode(days));
                tr.appendChild(td);
                for (j = 0; j < act.length; j++) {
                    td = document.createElement('TD');
                    //   td.width = '75';
                    if (role_detail[i].actions.find((element)=>element.typeid==act[j])) {

                        var state= 0x274C;
                        value = role_detail[i].actions.find((element)=>element.typeid==act[j]).status;
                        if ((value=="Satisfactory")||(value=="Completed")||(value=="Held - Satisfactory")){state= 0x2705;}

                        //  td.appendChild(document.createTextNode(role_detail[i].actions.find((element)=>element.typeid==act[j]).status+String.fromCodePoint(state)));
                        td.appendChild(document.createTextNode(String.fromCodePoint(state)));

                        //   td.appendChild(document.createTextNode(String.fromCodePoint(state)));
                    }
                    td.style.backgroundColor='lightcyan';
                    tr.appendChild(td);
                }
                if (document.getElementById("gmlearning").checked) {
                    for ( j = 0; j < learn.length; j++) {
                        td = document.createElement('TD');
                        state= 0x274C;
                        var lr = mem_learning.find((element) => element.id == roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).ContactId);
                        if (lr.learn.find((object)=>object.title==learn[j])){
                            state= 0x2705;
                        }
                        // Check Expiry x26A1
                        if (lr.learn.find((object)=>object.title==learn[j])){
                            if (lr.learn.find( (object) => object.title == learn[j]).expiryDate !=null) {
                                sdate = new Date(lr.learn.find((object)=>object.title==learn[j]).expiryDate);
                                days  = Math.round((new Date() - sdate) / (1000 * 60 * 60 * 24));
                                if (days>=90) {state = 0x26A1;
                                              }
                            }
                        }

                        if (j==7) {
                            // Trustee
                            if (roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName!='Trustee') {
                                state = 0x0020;
                            }
                        }
                        if (j==8) {
                            // Team Lead
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Team Leader')&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='Group Section')) {

                            } else {state = 0x0020;}
                        }
                        if (j==2) {
                            // programme - only section roles
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='Group Section')&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType!='District Section')) {
                              if(state==0x2705) {
                                state=0x2714;}
                                 else {
                                state = 0x0020;
                                 }
                            }
                        }
                         if (j==3) {
                            // First Response
                            if ((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType=='Group Section')||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).UnitType=='District Section')||(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Group Lead Volunteer')||((roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName=='Team Leader'))&&(roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).Team=='14-24 Team')) {

                            } else { if(state==0x2705) {
                                state=0x2714;}
                                 else {
                                state = 0x0020;
                                 } }
                        }
                        // Check for those not needing training
                        var rn = roles.find((element) => element.Id==role_detail[i].roleApprovalMemberShipId).RoleName;
                        if ((rn=='Non Member - Needs disclosure')||(rn=='President')||(rn=='Holding')) {
                            if(state==0x2705) {
                                state=0x2714;}
                                 else {
                                state = 0x0020;
                                 }
                        }
   if (document.getElementById("gmdates").checked) {
        if (lr.learn.find((object)=>object.title==learn[j])){
                            if (lr.learn.find( (object) => object.title == learn[j]).expiryDate !=null) {
                                sdate = new Date(lr.learn.find((object)=>object.title==learn[j]).expiryDate);
                                  td.appendChild(document.createTextNode(String.fromCodePoint(state)+" "+sdate.toLocaleDateString('en-GB')));
                                 td.style.backgroundColor = 'LightGray';
                                   tr.appendChild(td);
                            }else { td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                        td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);

                            } else { td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                        td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);
                            }
                        
    else
   {     td.appendChild(document.createTextNode(String.fromCodePoint(state)));}
                        td.style.backgroundColor = 'LightGray';
                        tr.appendChild(td);

                    }
                }
            }
        }
        table.style.fontSize = "10pt";
        myTableDiv.appendChild(table);
    }
    function report_onclick() {
        // RUn Report
        //     console.log("Report");
        var count = 1;
        mem="";
        $("#gmSomeID").dialog ( {modal: true, height: 500, width: "100%"} );
        mems = [];
        role_detail=[];
        roles=[];
        document.getElementById("gmTable").innerHTML="Table will appear here....";
        document.getElementById("gmUnit").innerHTML = "UKJDKJD";
        var responsetext = "";
        var datapass;
        mem_learning= [];
        get_data(count);
    }

    function report_onclick2() {
        // Open Dialog
        console.log("Report");
        var count = 1;
        mem="";
        $("#gmSomeID").dialog ( {modal: true, height: 500, width: "100%"} );
        mems = [];
        role_detail=[];
        roles=[];
        document.getElementById("gmTable").innerHTML="Table will appear here....";
        var responsetext = "";
        var datapass;
        mem_learning= [];

    }

    // Thid is our page
    navigation.addEventListener("navigate", e => {
        console.log("EventLstener");
        console.log(e);
        //   if ((e.destination.url.indexOf("subunitsau") != -1) || (e.destination.url.indexOf("teamdashboardaut") != -1)) {
        if (document.getElementById("quick_nav")!=null){console.log("remove");document.getElementById("quick_nav").innerHTML ="";}
        //       console.log("Its our URL");
        setTimeout(function() {
            dopage();
        }, 2000);
        //    } else {

        //       console.log("Not lstener");
        //       console.log(window.location.href);
        //      dopage();
        //   }
    }) // Event listener

    setTimeout(function() {
        console.log("New Page");
        dopage();
    }, 2000);
    // Your code here...
    var newHTML         = document.createElement ('div');
    newHTML.innerHTML   = '             \
<div id="gmSomeID" title="Roles Report">   \
<p>      \
Unit <input   type="text" id="gmunitname" name="gmunitname" /><button id="gmRunReport">Run Report</button><input   type="checkbox" id="gmmissing" name="gmmissing" /> Show Missing Only<input   type="checkbox" id="gmlearning" name="gmlearning" /> Show Detailed learning</P> \
<p>Name Filter <input   type="text" id="gmpersonname" name="gmpersonname" />Team Filter <input   type="text" id="gmteamname" name="gmteamname" /><p> \
<p>Exclude Helpers/Holding Roles <input   type="checkbox" id="gmhelper" name="gmhelper" /><p> \
<p>Include Expiry Dates <input   type="checkbox" id="gmdates" name="gmdates" /><p> \
<b>Status : </b> <span id="gmState">Enter Unit Name above (can include % wildcard) and run report</span>  \
<p>Showing All Roles for members of <span id="gmUnit"></span></p>       \
<span id="gmTable">Report will appear here!</span>  \
</div>  ';
    document.body.appendChild (newHTML);
    $("#gmSomeID").hide();
    var iconSet1    = GM_getResourceURL ("IconSet1");
    var iconSet2    = GM_getResourceURL ("IconSet2");
    var jqUI_CssSrc = GM_getResourceText ("jqUI_CSS");
    jqUI_CssSrc     = jqUI_CssSrc.replace (/url\(images\/ui\-bg_.*00\.png\)/g, "");
    jqUI_CssSrc     = jqUI_CssSrc.replace (/images\/ui-icons_222222_256x240\.png/g, iconSet1);
    jqUI_CssSrc     = jqUI_CssSrc.replace (/images\/ui-icons_454545_256x240\.png/g, iconSet2);

    GM_addStyle (jqUI_CssSrc);
    addButton("Role Report", report_onclick2, "");
    document.getElementById("gmRunReport").onclick = report_onclick;
    document.getElementById("gmunitname").value = un;
})();