// ==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 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:

checkingchecking'; 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