// ==UserScript==
// @name IMDB Bacon Number / Center Number
// @grant GM_xmlhttpRequest
// @namespace https://greasyfork.org/en/users/7864-curtis-gibby
// @description Adds an indicator on an IMDB name page telling you that person's "Bacon Number" and/or "Center Number" (from the Oracle of Bacon at Virginia)
// @include http*://*imdb.com/name/nm*/*
// @version 1.7.1
// @downloadURL https://update.greasyfork.icu/scripts/7160/IMDB%20Bacon%20Number%20%20Center%20Number.user.js
// @updateURL https://update.greasyfork.icu/scripts/7160/IMDB%20Bacon%20Number%20%20Center%20Number.meta.js
// ==/UserScript==
/* User-configurable options -- comment or uncomment each line to your own liking */
// add Bacon Number to the name page
var showBaconNumber = true;
// var showBaconNumber = false;
// add Center Number to the name page
var showCenterNumber = true;
//var showCenterNumber = false;
// compare the person's Center Number to Kevin Bacon's Center Number
var showBaconComparison = true;
//var showBaconComparison = false;
/* End of user-configurable options */
/* Begin script*/
var personName = findName();
if (showCenterNumber)
{
addCenterText();
var personCenterNumber = getCenterNumber(personName);
}
if (showBaconNumber)
{
addBaconText();
getBaconNumber(personName);
}
/* end script*/
// Functions ----------- //
function getBaconNumber(personName) {
var bacon_url = 'http://oracleofbacon.org/cgi-bin/movielinks?game=0&a=Kevin+Bacon&b=' + escape(personName);
GM_xmlhttpRequest({
method: 'GET',
url: bacon_url,
onload: function(responseDetails) {
var match = responseDetails.responseText.match(/Bacon number of ([\d]+)\./);
if (match) {
// found a matching bacon number
bacon_number = match[1];
var addedDiv = document.getElementById('greaseTextBacon');
addedDiv.innerHTML = '
Bacon Number:
' + bacon_number + '';
addedDiv.style.color='black';
} else {
// did not find bacon number
var addedDiv = document.getElementById('greaseTextBacon');
addedDiv.innerHTML = 'Bacon Number:
Unable to find';
addedDiv.style.color='red';
}
}
});
} // end function getBaconNumber
function getCenterNumber(personName) {
var centerURL = 'http://oracleofbacon.org/cgi-bin/center-cgi?who=' + escape(personName);
GM_xmlhttpRequest({
method: 'GET',
url: centerURL,
onload: function(responseDetails) {
var disabled = responseDetails.responseText.match(/This feature is temporarily disabled for actors/);
if (disabled) {
var addedDiv = document.getElementById('greaseTextCenter');
addedDiv.innerHTML = 'Center Number:
\nThis feature is temporarily disabled for actors other than Kevin Bacon.';
addedDiv.style.color='red';
}
else {
var search_string = ' number: '; // find this on the target page
var match = responseDetails.responseText.search(search_string);
var center_number = responseDetails.responseText.substring(match + search_string.length,match + search_string.length + 5);
if (match != -1) {
// found a center number
var addedDiv = document.getElementById('greaseTextCenter');
addedDiv.innerHTML = 'Center Number:
' + center_number + '';
} else {
// did not find center number
var addedDiv = document.getElementById('greaseTextCenter');
addedDiv.innerHTML = 'Center Number:
\nUnable to find';
addedDiv.style.color='red';
}
if (showBaconComparison) {
var BaconCenterURL = 'http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon';
GM_xmlhttpRequest({
method: 'GET',
url: BaconCenterURL,
onload: function(responseDetails) {
var search_string = ' number: '; // find this on the target page
var match = responseDetails.responseText.search(search_string);
var BaconCenterNumber = responseDetails.responseText.substring(match + search_string.length,match + search_string.length + 5);
if (match != -1) {
// found Bacon's center number
var BaconsNum = parseFloat(BaconCenterNumber);
var personsNum = parseFloat(center_number);
if (personsNum < BaconsNum)
{
addedDiv.innerHTML += " (Better Than Kevin Bacon's " + BaconCenterNumber + ")";
} else
{
addedDiv.innerHTML += " (Worse Than Kevin Bacon's " + BaconCenterNumber + ")";
}
}
}
});
}
}
}
});
} // end function getCenterNumber
function compareBaconCenter(personCenterNumber) {
} // end function compareBaconCenter
function addBaconText() {
var findPattern = "//div[@class='txt-block']";
var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
var link = results.snapshotItem(1);
var addedDiv = document.createElement('div');
addedDiv.innerHTML = 'Bacon Number:
checking
';
addedDiv.setAttribute('id','greaseTextBacon');
addedDiv.setAttribute('class','txt-block');
link.parentNode.insertBefore(addedDiv, link.nextSibling);
}
// end function addBaconText
function addCenterText() {
var findPattern = "//div[@class='txt-block']";
var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
var link = results.snapshotItem(0);
var addedDiv = document.createElement('div');
addedDiv.innerHTML = 'Center Number:
checking
';
addedDiv.setAttribute('id','greaseTextCenter');
addedDiv.setAttribute('class','txt-block');
link.parentNode.insertBefore(addedDiv, link.nextSibling);
}
// end function addCenterText
function findName() {
var findPattern = "//h1[@class='header']";
var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
return stripHTML(results.snapshotItem(0).innerHTML);
} // end function findName
function stripHTML(oldString) {
return oldString.replace(/(<([^>]+)>)/ig, " ") // remove any html (spans in this case)
.replace(/^\s+|\s+$/g,"") // trim spaces from the outside
.replace(/[^\w -:\xC0-\xFF]/g, ''); // remove characters other than ASCII extended (in this case, get rid of newlines)
} // end function stripHTML