ErDrRon
asked on
Greasemonkey script to count and display the number of links in a DIV on a Goal Line Blitz web page...
I've asked this question before but I seem to have stumped the Experts. I'll ask it again in a (I hope) more understandable form.
I have written a Greasemonkey script that changes the titles of the management team of a GLB team page. The code is listed below. This GM script changes the names of the team management from those used natively by GLB to those wanted by the team owner. This script currently works perfectly.
I would now like to add more functionality to this GM script. In addition to changing the management titles I would like it also to count up and display the total number of GMs (now changed to Whores) on the page.
Where it currently shows:
Whores: We_Rule, VonKortez, bmac1188
I would like it to show the total number of Whores like this:
Whores (3): We_Rule, VonKortez, bmac1188
The existing View Page Source of that section follows below.
This new functionality needs to be integrated into the current name-changing GM script shown below. In addition, this needs to work as a Greasemonkey script.
I hope I made the requirements clear. If not, please let me know how I can clarify it.
I have written a Greasemonkey script that changes the titles of the management team of a GLB team page. The code is listed below. This GM script changes the names of the team management from those used natively by GLB to those wanted by the team owner. This script currently works perfectly.
I would now like to add more functionality to this GM script. In addition to changing the management titles I would like it also to count up and display the total number of GMs (now changed to Whores) on the page.
Where it currently shows:
Whores: We_Rule, VonKortez, bmac1188
I would like it to show the total number of Whores like this:
Whores (3): We_Rule, VonKortez, bmac1188
The existing View Page Source of that section follows below.
<div id="team_gms">GMs: <a href="/game/home.pl?user_id=5755">We_Rule</a>, <a href="/game/home.pl?user_id=144617">VonKortez</a>, <a href="/game/home.pl?user_id=286298">bmac1188</a></div>
This new functionality needs to be integrated into the current name-changing GM script shown below. In addition, this needs to work as a Greasemonkey script.
I hope I made the requirements clear. If not, please let me know how I can clarify it.
// ==UserScript==
// @name GLB Management Name Change
// @namespace ErDrRon
// @description Replace OC and DC on team page
// @include http://goallineblitz.com/game/team.pl?team_id=6144
// ==/UserScript==
var e = document.getElementsByTagName("body")[0].getElementsByTagName("*");
for(var i=0;i<e.length;i++) {
if(e[i].innerHTML) {
e[i].innerHTML = e[i].innerHTML.replace(/OC:/g,"Bartender:").replace(/DC:/g,"Bouncer:").replace(/CFO:/g,"Mr. Money Bags:").replace(/Recruiters:/g,"Pimps:").replace(/Co Owned by/g,"lolowners bitch:").replace(/GMs:/g,"Whores:").replace(/Owned by/g,"lolowner:").replace(/Head Coach/g,"Disc Jockey:").replace(/ST Coach:/g,"Yoga Instructer:").replace(/Scouts:/g,"Talent Evaluators:").replace(/Asst OC/g,"Janitor").replace(/Asst DC/g,"Security").replace(/Note from the Owner/g,"Note from the lolowner");
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I'm sure you can fill in the rest.
ASKER
I created a quick GM script using your code and reporting the results in an alert box. It seems to function until the number of GMs exceeds 99. Is their a limitation to the magnitude of the variable that an alert can present?
I've included the code for the test script below.
Thanks!
I've included the code for the test script below.
Thanks!
// ==UserScript==
// @name Test GM count
// @namespace ErDrRon
// @description Test GM count
// @include http://goallineblitz.com/game/team.p*
// ==/UserScript==
var gms = document.evaluate( 'count(//div[@id = "team_gms"]//a)', document, null, XPathResult.NUMBER_TYPE, null).numberValue;
alert(gms);
Not that I'm aware of, seems like a bug. You could try running the same thing on unsafewindow.
The only other option available to you is to walk the DOM tree, collect the child nodes that are anchors and count them with an accumulator. Using innerHTML is a hack and often breaks things.
Something like:
var gm_container = document.getElementById('t eam_gms');
var gms= 0;
for (i = 0; i < gm_container.childElementC ount; i++) { if (gm_container.childNodes[i ].nodeName .toLowerCa se() == "a") gms++; }
But problems with the DOM do often happen if you write to innerHTML.
var gm_container = document.getElementById('t
var gms= 0;
for (i = 0; i < gm_container.childElementC
But problems with the DOM do often happen if you write to innerHTML.
ASKER
I tried the above code but it doesn't seem to work. It reports out anywhere from 1/2 to 1/4 of the actual number of GMs. Thoughts?
ASKER
What is an unsafe window?
ASKER
I actually went back and re-counted the one I thought was incorrect at 99 and found it was actually correct. the script works now. Thanks You!!
I've included the completed script below.
I've included the completed script below.
// ==UserScript==
// @name GLB Management Name Change
// @namespace ErDrRon
// @description Replace management titles on lolgm Trophy Whores team page
// @version 1.0.1
// @date 2010-09-05
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include http://goallineblitz.com/game/team.pl?team_id=6144
// ==/UserScript==
var gms = document.evaluate( 'count(//div[@id = "team_gms"]//a)', document, null, XPathResult.NUMBER_TYPE, null).numberValue;
var e = document.getElementsByTagName("body")[0].getElementsByTagName("*");
for(var i=0;i<e.length;i++) {
if(e[i].innerHTML) {
e[i].innerHTML = e[i].innerHTML.replace(/OC:/g,"Bartender:").replace(/DC:/g,"Bouncer:").replace(/CFO:/g,"Mr. Money Bags:").replace(/Recruiters:/g,"Pimps:").replace(/Co Owned by/g,"lolowners bitch:").replace(/GMs:/g,"Whores (" + gms + "):").replace(/Owned by/g,"lolowner:").replace(/Head Coach/g,"Disc Jockey:").replace(/ST Coach:/g,"Yoga Instructer:").replace(/Scouts:/g,"Talent Evaluators:").replace(/Asst OC/g,"Janitor").replace(/Asst DC/g,"Security").replace(/Note from the Owner/g,"Note from the lolowner");
}
}
ASKER
Great help. Thanks!
Thoughts are that I haven't seen the fully formatted output of your gm game so I can't know the exact code to parse or if I have nodes to ignore or have to do depth traversal, but as you see, XPATH makes life easy so none of that matters I'm glad it works for you.