您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Provide a few tweaks including a role compliance report to the Scouts Website
当前为
// ==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? </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"> <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; })();