HTMonkey: Difference between revisions

From Hattrick
Jump to navigationJump to search
Line 11: Line 11:
*Without HTMonkey: Go to search, enter name, press enter and then click in the team!
*Without HTMonkey: Go to search, enter name, press enter and then click in the team!


===Search Box===
Adds a box below the friends' box with a form to quickly view the information of a player, team or match, providing the ID.


// ==UserScript==
// @name          hattrick
// @namespace    http://oasi.upc.es/~kiusap/hattrick/
// @description  Adds a box with links to friends' teams and some other cool features.
// @include      http://www*.hattrick.org/*
// @include      http://195.149.157.22/*
// @exclude      http://www.hattrick.org/*
// ==/UserScript==
var htmonkey_version = "1.0.1";
// file: kiusap_hattrick.user.js
// author:kiusap - gilipollas.desconcertante at gmail com
// initially based on GM script by:divvy - [email protected]
// license: GPL-2 ( http://www.gnu.org/licenses/gpl.html )
// history:*0.1 2006-02-10
//*0.2 2006-02-14
//*0.3 2006-02-14: easy edit your preferred width
//*0.4 2006-02-17: preferred sort method on players' page
//*0.5 2006-02-22:storing friends into firefox's preferences.
//You don't lose them on script updates.
//*0.6 2006-05-21: adapted for new design of hattrick.
//*0.7 2006-07-06: bugfix + aligned to the left (for small
//resolutions)
//*0.8 2006-08-07: automatic update league method for the friends' box and NT players bug fixed (thanks Franck35)
//*1.0 2006-08-27: search box + choose side for htmonkey stuff
//*1.0.12006-09-11: Changed sideframe css location to new css on hattrick's site.
//
//
// version:$Id: kiusap_hattrick.user.js,v 1.0 2006/08/29 12:00:00 kiusap Exp $
//////////////////////////////////
// EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT
///////////////////////////
//sort: indicate here the sorting on the team players' page  --'.
//-> sort = 0-> sort by Surename
//-> sort = 1 -> sort by Lastname
//-> sort = 2-> sort by player ID
//-> sort = 3 -> sort by Age
//-> sort = 4-> sort by TSI
//-> sort = 5 -> sort by player number (only supporters)
var sort = 0;
//edit this variable to the amount of pixels you want increase the main frame
var myWidth = 200;
//Which should be (in pixels) the width for the friends box?
var friendsBoxWidth = 95;
//How many friends would you like to allocate on the box?
var numberOfFriends = 16;
//Where do you want the box, at left or right of hattrick's interface? (left: 1, right: 2)
var side = 2;
if (document.location.href.match(/blank.html/i))
{
//matrix containing the data for your friends (DO NOT EDIT THIS)
var v_amics = new Array(numberOfFriends);
var amics_lliures = new Array(0);
for (i = 0; i < v_amics.length; i++)
{
v_amics[i] = new Array(4);
}
get_htmonkey_values();
get_free_space();
}
//If you don''t have your preferred friends'' box (you just installed the
//script or want to replace friends) then read the lines below to edit the
//friends'' box.
//
//Wanna have links to your friends and their leagues? Edit these lines below.
//All values must be enclosed in single (' ') or double (" ") quotes.
//*The first Value is a text to be shown on the link to your friend's
//team (maybe your friend's team name or simply your friend's name)
//*The second Value MUST be your friend's team ID
//
//The first line adds links to kiusap's (the creator of this script) team
//and league. Edit the values you wish and UNCOMMENT (remove the '//' at
//the beginning of the line) each line of a friend, ONCE you've edited it.
//Just duplicate all the lines you want and modify them to add more friends.
//(edit the variable 'numberOfFriends' above).
//
if (document.location.href.match(/blank.html/i))
{
//newFriend ("kiusap", "778431");// the creator of the script
//newFriend ("name", "teamID");
//newFriend ("name", "teamID");
//newFriend ("name", "teamID");
////repeat as many times as you wish
}
//
//If you wish to edit any friend, there are two possible cases:
//1.You have edited this script and have the 'newFriend' lines
//uncomented (without the initial '//') and your friends''s data
//in them. Then, modify the data at your will.
//
//2.You installed a newer version of this script, and you have NOT
//your friends'' data here. It''s alright. This script saves
//the data in your firefox preferences, which you can view typing
//'about:config' in firefox''s address bar. Then, in the filter
//input, write 'htmonkey.team'. You''ll see then a bunch of lines.
//Each one of these lines store some data of your friends, one value
//each (name and teamID for all your friends).
//You''ll have to expand the 'preference name' field to see it
//complete. These rows end in teamX.name, teamX.id... and the value
//is the data they refer. For editing something, just double-click
//the value and enter a new one.
//
//PLEASE NOTE:
//*To delete a friend, his/her name must be set to 'undefined'
//without any quotes if you are in case 1. or, if you are in case
//2., you need to right-click the name value and 'Reset' it.
// FINISHING EDIT!!! DO NOT EDIT ANYTHING PAST THIS POINT
var sortArray = Array(6);
sortArray[0] = 'Surename';
sortArray[1] = 'Lastname';
sortArray[2] = 'PlayerId';
sortArray[3] = 'Age';
sortArray[4] = 'MarketValue';
sortArray[5] = 'PlayerNumber';
if (document.location.href.match(/default.asp/i) || document.location.href.match(/defaultconf.asp/i))
{
var allFramesets, thisFrameset;
allFramesets = document.evaluate(
'//frameset[@cols]',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
var colsDefinition;
if (side == 1)
{
document.getElementsByName("Filler_right")[0].setAttribute('src',null);
colsDefinition = ''+(friendsBoxWidth+10)+',' + (746 + myWidth) + ',*';
} else {
document.getElementsByName("Filler_left")[0].setAttribute('src',null);
colsDefinition = '8,' + (746 + myWidth) + ',*';
}
for (var i = 0; i < allFramesets.snapshotLength; i++)
{
thisFrameset = allFramesets.snapshotItem(i);
if (thisFrameset.cols == '*,746,*' || thisFrameset.cols == '5%,745,5%')
{
thisFrameset.cols = colsDefinition;
}
}
}
if (!document.location.href.match(/header.asp/i) && !document.location.href.match(/menu.asp/i))
{
var allWidths, thisWidth;
allWidths = document.evaluate(
'//*[@width]',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i = 0; i < allWidths.snapshotLength; i++)
{
thisWidth = allWidths.snapshotItem(i);
if (thisWidth.width > 350)
{
thisWidth.width = eval(thisWidth.width) + myWidth;
}
}
}
if (document.location.href.match(/blank/i))
{
get_htmonkey_values();//if we added someone right now (no need to refresh)
// first, add some CSS to this page.
var linkestil = document.createElement('LINK');
linkestil.setAttribute('type', 'text/css');
linkestil.setAttribute('rel', 'stylesheet');
linkestil.setAttribute('href', 'Css/themes/green/main.css');
var dochead = document.getElementsByTagName('HEAD')[0];
dochead.appendChild(linkestil);
var estil = document.createElement('STYLE');
estil.setAttribute('type', 'text/css');
var estiltxt = "div.box ul { list-style-type: none; margin: 0; padding: 0;}";
estiltxt += "body {margin: 90px 0 0 0; padding: 0;}";
var divBoxStyle = "border: 1px solid #267F30; padding: 0 0 2px 0; width: "+friendsBoxWidth+"px;";
if (side != 1) divBoxStyle +=" margin: 5px;";
estiltxt += "div.box {"+divBoxStyle+"}";
estiltxt += "div.box h2 { margin: 0 0 3px 0; padding: 0 0 0 10px; background-color: #267F30; color: #fff; }";
estiltxt += "div.box h2 + * {padding-left: 10px; margin: 0;}";
estil.appendChild(document.createTextNode(estiltxt));
dochead.appendChild(estil);
//then, do the hard work
//first, the friends box
var htlist = document.createElement('UL');
for (i = 0; i < v_amics.length; i++)
{
if (v_amics[i][0] == undefined || v_amics[i][0] == 0) continue;
var item = document.createElement('LI');
var a = document.createElement('A');
a.setAttribute('href', 'teamDetails.asp?teamID='+v_amics[i][1]);
a.setAttribute('target', 'main');
a.appendChild(document.createTextNode(v_amics[i][0]));
item.appendChild(a);
item.appendChild(document.createTextNode(" "));
a = document.createElement('A');
a.setAttribute('href', 'leagueDetails.asp?LeagueLevelUnitID='+v_amics[i][3]);
a.setAttribute('target', 'main');
a.appendChild(document.createTextNode(v_amics[i][2]));
item.appendChild(a);
htlist.appendChild(item);
}
if (!htlist.hasChildNodes())
{
htlist.appendChild(document.createTextNode("Must edit the script to add links here. If you have already edited it, be sure you have removed the initial slashes (\/\/) before each \"newFriend(...)\" line."));
}
var box = document.createElement('DIV');
box.setAttribute('class', 'box');
var titbox = document.createElement('H2');
titbox.appendChild(document.createTextNode('FRIENDS'));
box.appendChild(titbox);
box.appendChild(htlist);
var framebody = document.getElementsByTagName('BODY')[0];
framebody.appendChild(box);
// put a link to update && update function
var uplink = document.createElement('A');
uplink.setAttribute('href','#');
uplink.addEventListener(
'click',
function() {
if (!confirm("Only use this option if some of your friends' teams are playing on a different league / division, or if you see an 'undefined' league.\n\nAre you sure you want to update your friends' league details?"))
{
return;
}
var quants = 0;
for (var i = 0; i < v_amics.length; i++)
{
if (v_amics[i][1] > 0)
{
quants++;
var id = v_amics[i][1];
GM_xmlhttpRequest({
method: 'GET',
url: 'http://'+document.location.hostname+'/Common/teamDetails.asp?outputType=XML&actionType=view&teamID='+id,
headers: {
'User-agent': 'HTMonkey '+htmonkey_version,
'Accept': 'text/xml,application/xml',
'Accept-encoding': 'gzip'
},
onload: function(responseDetails) {
var parser = new DOMParser();
var dom = parser.parseFromString(responseDetails.responseText, 'application/xml');
var leagueid = dom.getElementsByTagName('LeagueLevelUnitID')[0].childNodes[0].nodeValue;
var leaguename = dom.getElementsByTagName('LeagueLevelUnitName')[0].childNodes[0].nodeValue;
var idj = dom.getElementsByTagName('TeamID')[0].childNodes[0].nodeValue;
for (var j = 0; j < v_amics.length; j++)
{
if (v_amics[j][1] == idj)
{
GM_setValue('htmonkey.team'+j+'.leagueName', leaguename);
GM_setValue('htmonkey.team'+j+'.leagueId', eval(leagueid));
}
}
quants--;
if (quants == 0)
{
alert('League details update finished! This frame is going to be reloaded now');
document.location.reload();
}
}
});
}
}
},
false
);
uplink.appendChild(document.createTextNode("Update team league details"));
framebody.appendChild(uplink);
framebody.appendChild(document.createElement('BR'));
//then, the search form
unsafeWindow.location.href = 'javascript:var mytestvar=1;';
if (unsafeWindow.mytestvar)//js enabled, continue. (thanks Jeremy Dunck from GM mailing list)
{
var frm = document.createElement('FORM');
frm.setAttribute('type', 'get');
frm.setAttribute('action', 'blank.html');
frm.setAttribute('name', 'gm_foo');
frm.setAttribute('id', 'gm_foo');
var inp = document.createElement('INPUT');
inp.setAttribute('name', 'kiuid');
inp.setAttribute('id', 'kiuid');
inp.setAttribute('type', 'text');
inp.setAttribute('style', 'width: 83px; border: solid p1 #000;');
var labinp = document.createElement('LABEL');
labinp.setAttribute('for', 'kiuid');
labinp.appendChild(document.createTextNode("Insert ID: "));
labinp.appendChild(inp);
frm.appendChild(labinp);
frm.appendChild(document.createElement('BR'));
var sel = document.createElement('SELECT');
sel.setAttribute('name', 'kiusel');
sel.setAttribute('id', 'kiusel');
var op1 = document.createElement('OPTION');
op1.setAttribute('value', 'player');
op1.appendChild(document.createTextNode("player"));
sel.appendChild(op1);
var op2 = document.createElement('OPTION');
op2.setAttribute('value', 'team');
op2.appendChild(document.createTextNode("team"));
sel.appendChild(op2);
var op3 = document.createElement('OPTION');
op3.setAttribute('value', 'match');
op3.appendChild(document.createTextNode("match"));
sel.appendChild(op3);
var labsel = document.createElement('LABEL');
labsel.setAttribute('for', 'kiusel');
labsel.appendChild(document.createTextNode("Search for: "));
labsel.appendChild(sel);
frm.appendChild(labsel);
frm.appendChild(document.createElement('BR'));
var labchk = document.createElement('LABEL');
labchk.setAttribute('for', 'kiuchk');
labchk.appendChild(document.createTextNode("Pop-up? "));
var chk = document.createElement('INPUT');
chk.setAttribute('type', 'checkbox');
chk.setAttribute('id', 'kiuchk');
chk.setAttribute('name', 'kiuchk');
chk.setAttribute('value', '1');
labchk.appendChild(chk);
frm.appendChild(labchk);
frm.appendChild(document.createElement('BR'));
var but = document.createElement('INPUT');
but.setAttribute('type', 'submit');
but.setAttribute('value', 'search');
but.addEventListener('click', function(event) {
var inp = document.getElementById('kiuid');
var quin = inp.value;
var que = document.getElementById('kiusel').value;
if (document.getElementById('kiuchk').checked)
{
void(open('http://'+document.location.hostname+'/Common/'+que+'Details.asp?'+que+'ID='+quin,que+quin,'width=630,height=550,resizable=1,scrollbars=yes'));
} else {
window.parent.frames[3].location = que+'Details.asp?'+que+'ID='+quin;
}
inp.value = "";
event.stopPropagation();
event.preventDefault();
}, true);
frm.appendChild(document.createElement('BR'));
frm.appendChild(but);
var box2 = document.createElement('DIV');
box2.setAttribute('class', 'box');
var titbox2 = document.createElement('H2');
titbox2.appendChild(document.createTextNode('SEARCH'));
box2.appendChild(titbox2);
box2.appendChild(frm);
framebody.appendChild(box2);
} else {
framebody.appendChild(document.createTextNode("You've got JavaScript disabled. You won't be able to use the search form unless you enable JavaScript."));
}
}
function kiusap_search()
{
var quin = document.getElementById('kiuid').value;
var que = document.getElementById('kiusel').selectedValue;
}
var allLinks, thisLink;
allLinks = document.evaluate(
'//a[@href]',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i = 0; i < allLinks.snapshotLength; i++)
{
thisLink = allLinks.snapshotItem(i);
if (thisLink.href.match(/players.asp/i))
{
//add sorting
//National Teams doesn't support ordering by player number. If so, order by SureName
if (thisLink.href.match(/nationalplayers.asp/i) && sort == 5) sort = 0;
var myHref = 'OrderBy=' + sortArray[sort];
if (thisLink.href.substr(-1) == '?')
{
thisLink.href = thisLink.href + myHref;
} else {
thisLink.href = thisLink.href + '&' + myHref;
}
}
}
function get_htmonkey_values()
{
for (var i = 0; i < v_amics.length; i++)
{
v_amics[i][0] = GM_getValue('htmonkey.team'+i+'.name');
v_amics[i][1] = GM_getValue('htmonkey.team'+i+'.id');
v_amics[i][2] = GM_getValue('htmonkey.team'+i+'.leagueName');
v_amics[i][3] = GM_getValue('htmonkey.team'+i+'.leagueId');
}
}
//just a function to add your friends to the preferences, for being
//easy-readable by the script and easy-editable by you
function newFriend(nom, id_equip)
{
if (amics_lliures.length == 0)//there is no space to store a new friend
{
return;
}
//we have room enough for one friend more. first see if it isn't in the box:
for (var i = 0; i < v_amics.length; i++)
{
if (v_amics[i][1] == undefined || v_amics[i][1] == 0) continue;//no friend stored in this position
if (v_amics[i][1] == id_equip)return;//this friend is repeated. don't do anything
}
//if we arrived here, it means we can add our friend.
var pos = amics_lliures.shift();
GM_setValue('htmonkey.team'+pos+'.name', nom);
GM_setValue('htmonkey.team'+pos+'.id', eval(id_equip));
}
function get_free_space()
{
for (var i = 0; i < v_amics.length; i++)
{
if (v_amics[i][0] == undefined)
{
amics_lliures.push(i);
}
}
}


==External Links==
==External Links==

Revision as of 00:12, 8 July 2007

HTMonkey (pictured top) compared to original Hattrick design (below)

HTMonkey is a UserScript for Greasemonkey (an extension for Firefox/Mozilla).

Features

Hattrick's Interface

By default, it enlarges the interface for 200 pixels, making hattrick a little wider (something necessary with these big monitors of 1280x1024 pixels being sold today!).

Friends' Box

Adds a box on any of the blank frames with shortcuts to your preferred teams and their respective links.

  • With HTMonkey: Just click in the link on the friends box.
  • Without HTMonkey: Go to search, enter name, press enter and then click in the team!


External Links

This helper application article is a stub. You can help Hattrick Wiki by expanding it.