您需要先安装一个扩展,例如 篡改猴、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);