您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
for each discord editor in your region's channel, this script will open the associated editor's profile, capture relevant information, and download that information into
当前为
// ==UserScript== // @name updateEditorProgress // @namespace http://tampermonkey.net/ // @version 0.1 // @description for each discord editor in your region's channel, this script will open the associated editor's profile, capture relevant information, and download that information into // @description comma separated value (CSV) file. The contents of the file can then be programmaticaly added to a google sheet (using a separate script) // @description With the script installed, open any WME editor profile page to execute the script. // @author ramblinwreck_81 // @match https://www.waze.com/user/editor* // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js?version=229392 // @grant none // ==/UserScript== (function() { 'use strict'; function bootstrap(tries) { //console.log(tries); tries = tries || 1; // console.log(tries); // console.log(W,W.Map,W.Model,$); if (W && W.Map && W.Model && $ ) { // console.log('passed load check'); init(); } else if (tries < 100) { setTimeout(function () { tries += 1; bootstrap(tries);}, 200); } } function init() { console.log("initializing editor progress script"); createUploadElements(); function createUploadElements() { var y=document.createElement("div"); y.setAttribute("id", "csv-info"); document.getElementsByClassName("user-headline")[0].appendChild(y); var x = document.createElement("INPUT"); x.setAttribute("type", "file"); x.setAttribute("id","fileUpload"); document.getElementById("csv-info").appendChild(x); var z=document.createElement("button"); z.setAttribute("type", "button"); z.setAttribute("value", "Upload"); z.setAttribute("id","import-csv"); var aa=document.createTextNode("Upload"); z.appendChild(aa); document.getElementById("csv-info").appendChild(z); document.getElementById("import-csv").style.height="20px"; document.getElementById("import-csv").style.width="100px"; } // end of createUploadElements document.getElementById("import-csv").addEventListener("click",editorProgress,false); } bootstrap(); function editorProgress() { console.log('here'); var openedWindow=[]; var count=0; var editorNames=[]; var testURLs=[]; var updatedEditorInfo=[]; var indivEditorInfo=[" ", " ", " ", " "]; var m=0; var editorProfileURL=[]; var windowLoaded=[]; var timer=[]; var slackEditors=""; var blnKeepWaiting=true; var fileTimer; var holdOn; var pageVisits=0; var blnDataCollected=false; var blnGotADate=[false,false,false,false]; var numEditors = 0; var blnAllEditors=false; var howLong=0; var noEditorPage = []; var seEditors = []; upload(); function upload() { var fileUpload = document.getElementById("fileUpload"); var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/; if (regex.test(fileUpload.value.toLowerCase())) { if (typeof (FileReader) != "undefined") { var reader = new FileReader(); reader.onload = function (e) { if (fileTimer !==undefined) { clearInterval(fileTimer); slackEditors=reader.result; editorStats(); } blnKeepWaiting=false; }; reader.readAsText(fileUpload.files[0]); fileTimer=setInterval(checkAgain,1000); } else { alert("This browser does not support HTML5."); } } else { alert("Please upload a valid CSV file."); } } // end of upload function checkAgain() { if (blnKeepWaiting===false) { } else { console.log("still waiting for file upload..."); } } //end of checkAgain function slowItDown() { alert ("slow it down"); if (editorProfileURL.length <4) { alert("almost done"); } if (pageVisits===3 || editorProfileURL.length<4) { clearInterval(holdOn); editorStats(); } } // end of slowItDown function closeEm(element,index,array) { openedWindow[index].close(); } function controlOpenWindows() { if (count>0) { testURLs.forEach(closeEm); openedWindow=[]; } testURLs=[]; if (editorProfileURL.length>=4) { testURLs[0]= editorProfileURL.shift(); testURLs[1] =editorProfileURL.shift(); testURLs[2]=editorProfileURL.shift(); testURLs[3]=editorProfileURL.shift(); // blnFirst=true; } else if (editorProfileURL.length>0){ for (n=0; n<editorProfileURL.length; n++) { testURLs[n]=editorProfileURL.shift(); } } else { } function openWindow(element1, index1, array1) { pageVisits=0; openedWindow[index1]= window.open(element1); for (var j=0;j<openedWindow[index1].document.styleSheets.length; j++) { openedWindow[index1].document.styleSheets[j].disabled=true; } } //end of openWindow function if (blnDataCollected===false) { testURLs.forEach(openWindow); openedWindow.forEach(loaded); } if (editorProfileURL.length===0) { blnDataCollected=true; } } //end of controlOpenWindows() function loaded(element, index, array) { element.addEventListener("DOMContentLoaded", function() {getSomething(index);}, false); timer[index]=setInterval(function() {windowReady(index);},6000); } // end of loaded function getSomething(param) { windowLoaded[param]=true; console.log("fired"); } // end of getSomething function windowReady(param) { if (windowLoaded[param]===true) { clearInterval(timer[param]); grabInfo(param); } } // end of windowReady function grabInfo(editorNumber) { var firstEdit; var rank; var editCount; var lastEditDaysAgo; var reg=/The page you were looking for doesn*/g; //[0,1,2,3].forEach(findIt); findIt(editorNumber); function findIt(param) { var editorString=""; var dateOnly=""; var remarks="None"; var blnNoBother=false; var editorExists = true; if(openedWindow[param].document.getElementsByTagName('p').length>0) { var oops = "working on it right now."; for(n=0; n<openedWindow[param].document.getElementsByTagName('p').length; n++) { if (openedWindow[param].document.getElementsByTagName('p')[n].innerHTML.includes(oops)) { editorExists = false; blnNoBother = true; } } } if (editorExists) { if (openedWindow[param].document.getElementsByClassName("container not-found").length>0) { if(openedWindow[param].document.getElementsByClassName("container not-found")[0].innerHTML.match(reg)) { //editorString= editorNames[count+param] + ",,,,,No Editor profile page,"; blnNoBother=true; } } else { firstEdit=openedWindow[param].document.getElementsByClassName("user-last-edit")[0].innerHTML.trim(); var dateString=firstEdit.slice(14); var f= new Date(Date.parse(dateString)); var g=f.toLocaleDateString(); firstEdit = g; rank=openedWindow[param].document.getElementsByClassName("user-rank")[0].innerHTML.trim(); rank=rank.slice(6); editCount=openedWindow[param].document.getElementsByClassName("user-stats-value")[1].innerHTML.trim(); var numEdits=parseInt(editCount); if (numEdits>0) { if(openedWindow[param].document.getElementsByClassName("transaction-header-time")[0] !==undefined) { lastEditDaysAgo=openedWindow[param].document.getElementsByClassName("transaction-header-time")[0].innerHTML.trim(); lastEditDaysAgo=findNumber(lastEditDaysAgo); dateOnly=dateInPast(lastEditDaysAgo); } else { var dayTimer=setInterval(function() { if(openedWindow[param].document.getElementsByClassName("transaction-header-time")[0] !==undefined) { blnGotADate[param]=true; } },2000); if (blnGotADate[param]===true) { if (openedWindow[param].document.getElementsByClassName("transaction-header-time")[0] !==undefined) { clearInterval(dayTimer); lastEditDaysAgo=openedWindow[param].document.getElementsByClassName("transaction-header-time")[0].innerHTML.trim(); lastEditDaysAgo=findNumber(lastEditDaysAgo); dateOnly=dateInPast(lastEditDaysAgo); blnGotADate[param]=false; } else { blnGotADate[param]=false; } } } } else { dateOnly=""; remarks="Never Edited"; blnNoBother=true; } editorString= seEditors[count+param] + "," + firstEdit + "," + dateOnly + "," + rank + "," + editCount + "," + remarks + ","; } } else { noEditorPage.push(seEditors[count+param]); editorExists = true; } if ((count+param) <= indivEditorInfo.length) { if (blnNoBother===false) { indivEditorInfo[count+ param]=(editorString); numEditors += 1; } else { blnNoBother=false; } } else { alert("attempting to add element to indivEditorInfo that is out of the array's range..."); } firstEdit=""; lastEditDaysAgo=""; dateOnly=""; remarks="None"; rank=""; editCount=""; blnNoBother=false; console.log(indivEditorInfo); var limit; if (pageVisits===3 && editorProfileURL.length>1) { var blnRunNoMore=false; var placeholder=""; if (editorProfileURL.length>=4) { limit=4; } else { limit=editorProfileURL.length; } if (blnRunNoMore===false) { for (var i=0; i<limit; i++) { indivEditorInfo.push(placeholder); if (editorProfileURL.length<=4) { blnRunNoMore = true; } } } count +=4; } if(pageVisits === testURLs.length-1) { var testTimer=setTimeout(editorStats,500); } pageVisits += 1; } // end of findIt() } // end of grabInfo() function waitDate() { } function editorPages() { window.focus(); seEditors=slackEditors.split(','); // split discord csv into editors -- in discord, each element is an editor // var troublesomeEditors = []; // var addTroublesomeEditors = prompt ("If you would like to add additional editors, add them now with each separated by a comma. ", ""); // if (addTroublesomeEditors !== null || addTroublesomeEditors !== "") { // console.log('trimming things'); // troublesomeEditors = addTroublesomeEditors.split(","); // if(troublesomeEditors[0].length === 0) { // troublesomeEditors.shift(); // } // troublesomeEditors.forEach(function (element, index, array) { // var str = array[index]; // array[index] = str.trim(); // }); // console.log('troublesome editor array length is ' + troublesomeEditors.length); // } // console.log('seEditor array length is ' + seEditors.length); // console.log('seEditor array: ' + seEditors); // troublesomeEditors.forEach(function(element, index, array) { // if (seEditors.indexOf(troublesomeEditors[index]) >= 0) { // troublesomeEditors[index] = 'dup'; // } // }); // function trblLessDups(element, index, array) { // return array[index] != 'dup'; // } // var filteredTrouble = troublesomeEditors.filter(trblLessDups); // if(filteredTrouble.length>0) { // var combined = seEditors.concat(filteredTrouble); // seEditors = combined; // console.log('troubling and se editor array is ' + seEditors); // } var indivEditor = seEditors; // changed when moving to discord function makeEditor(element, index, array) { indivEditor=array[index][0]; //remove the editor rank from editor name var extraChars=/\w+\_[0-6]{1,2}$/g; editorNames.push(indivEditor); } // end of make editor function var urlString="https://www.waze.com/user/editor/"; function noEditorName (element, index, array) { var filter = array[index]; return filter.length > 0; } var result = seEditors.filter(noEditorName); seEditors = result; function makeURL(element,index, array) { editorProfileURL[index]= urlString + element; } seEditors.forEach(makeURL); // as the script continues, values of editorProfileURL are removed... will eventually contain no elements // so make a back up copy var backUpEditorProfileURL=editorProfileURL; } //end of editor pages function function compileInfo() { if(blnDataCollected===true) { testURLs.forEach(closeEm); makeCSV(); } else { controlOpenWindows(); } } // editorStats(); function editorStats() { if(count===0) { editorPages(); } compileInfo(); } function isNumeric(n) { return Number(parseFloat(n))==n; } // some real code var blnisANumber=[]; function findNumber(string) { var regex=/^(<strong>Today<\/strong>)/g; if (string.match(regex)) { return "0"; } var number=""; var x=string.slice(8); var y=x.split(""); y.forEach(function(element, index, array) { if(isNumeric(element)) { blnisANumber[index]=true; } else { blnisANumber[index]=false; } }); var filtered=blnisANumber.filter(itsTrue); function itsTrue(element, index, array) { return element === true; } filtered.forEach(function(element, index, array) { number= number + y[index]; }); console.log("the resultant number is ", number); return number; } // end of findnumber function function dateInPast(dateInPast) { var d= new Date(); d.setDate(d.getDate()-dateInPast); //var past=d.toDateString(); var past = d.toLocaleString(); var arrPast=past.split(","); var dateOnly=arrPast[0]; return dateOnly; } function makeCSV() { if (howLong>0) { clearInterval(howLong); } var csvContent=""; indivEditorInfo.forEach(function(element, index, array) { csvContent += element; csvContent += "\n"; }); var linkElement= document.createElement('a'); linkElement.setAttribute("id", "csv-download"); var encodedUri=encodeURI(csvContent); linkElement.setAttribute('href', "data:text/csv;charset=utf-8," + encodedUri); linkElement.innerHTML= "Download SER Editor CSV file"; document.getElementById("csv-info").appendChild(linkElement); } } })();