您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
show current ELO Rang in profile
/* This program is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://www.wtfpl.net/ for more details. */ // ==UserScript== // @name Elo-Rang AT // @namespace https://greasyfork.org/users/83290 // @include http://fussballcup.at/* // @version 0.1.4 // @description show current ELO Rang in profile // @author Philipp, edited by mot33 / 2018 // @grant GM_addStyle // @connect <value> // ==/UserScript== var timeout = 5000; /** * Simply creates async html request with url theURL; calls back callback with result string as first parameter and args as second parameter * * Case of error; null is returned as result String */ function httpGetAsync(theUrl, callback, args){ var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ callback(xmlHttp.responseText, args); } }; xmlHttp.open("GET", theUrl, true); // true for asynchronous xmlHttp.send(null); // handle timeout window.setTimeout(function(){ if (xmlHttp.readyState != 4 || xmlHttp.status != 200){ // something went wrong // cancel xmlHttp.abort(); // call callback with error callback(null, args); } }, timeout); } /** * really (like really really) simple logger :) */ function logError(msg){ console.log("ELO-rank show script: " + msg); } // make sure changes() isn't executed twice the same time var lock=false; // do not search for same name twice (if once failed, will probably fail again; performance!) var lastName=""; function checkForSearchNameOrReturnNull(){ // and that's just lots of text to make sure, this script isn't executed more than necesarry // make sure this function isn't executed twice at the same time if(lock){ return null; } // make sure, rank must be added (= profil show page) var url = window.location.href; if(!(/module=([^&]+)/.exec(url)[1]=='profile')){ return null; } if(!(/action=([^&]+)/.exec(url)[1]=='show')){ return null; } // make sure rank isn't allready sucessfully added if(document.getElementById('rankshow')!=null){ return null; } // make sure, profile-show exists var profile_show = document.getElementById('profile-show'); if(profile_show == null || profile_show.firstChild == null){ // log something strange happend; actually profile page should have profile-show element logError("Something strange happended! Recognized profile page but no profile-show element to extract name from!"); return null; } // extract profile name name // substring(11): String is "Profil von (...)". Extract (...) var name = profile_show.firstChild.textContent.substring(11); // do not execute script for same name twice if(lastName == name){ lock=false; return null; } lastName = name; // finally return result return name; } /** * Takes rank as attribute * Creates html elements and addes rank information to info box */ function appendRank(rank){ // create html frame var s ='<li><strong id="rankshow" <style=top:-10px; class="player-name">Elo-Rang: '; s+="";{ s+=rank = "<font color='yellow'>"+ String(rank) + " </font></strong></b>"; } var div = document.createElement('div'); div.innerHTML = s; // insert var elementsProfileBox = document.getElementsByClassName('player-name'); if(elementsProfileBox.length==0){ // okay, that's strange logError("Strange error while adding rank information: No Element of class 'profile-box-squad' found! Don't know where to add information!"); }else{ elementsProfileBox[0].appendChild(div); } // unlock lock=false; } /** * gets resulst String * parses and extracts ELO rank * checks, if it is ELO rank for args['name'] * calls args['call'] with first parameter: rank */ function fetchELOResults(requestResult, args){ // check for valid result if(requestResult == null){ args['call']('error'); logError("Error html request!"); return; } // parse result try{ var parser = document.createElement('html'); parser.innerHTML = JSON.parse(requestResult).content; // get right fieled var results = parser.getElementsByClassName(' odd'); if(results.length == 0){ // okay, no problem! Just no rank found: probably user doesn't have a rank args['call']('/'); return; } results = results[0]; // check if name is right if(results.children[2].children[1].innerHTML!=args['name']){ // okay, no problem! Just not right user found: problably user doesn't have a rank args['call']('/'); return; } // call callback with rank to handle everything else args['call'](results.firstChild.innerHTML); }catch(e){ args['call']('error'); logError("Error parsing resulst String of ELO-rank request! Error: " + e); return; } } /** * searches ELO rang * will call back toCall with first paramter elo rang of player with name "name" */ function searchELORang(name, toCall){ // wrap parameters in set params={}; params['name'] = name; params['call'] = toCall; // schedule html requst httpGetAsync('http://fussballcup.at/index.php?club=' + name + '&_qf__form=&module=rating&action=index&area=user&league=&path=index.php&layout=none', fetchELOResults , params); } /** * Main function! Will check, if script execution is necessar; will lookup ELO rank and will append rank to profile */ function changes(){ // get name; will catch all cases where nothing has to be done var name = checkForSearchNameOrReturnNull(); if(name == null){ // nothing to do return; } // set lock lock=true; // Real script execution!!! searchELORang(name, appendRank); } window.setTimeout(function() { changes() }, 2500); window.setInterval(function() { changes() }, 5000);