// ==UserScript== // @name IMDb: Show Cinematographer on Main Page // @namespace https://greasyfork.org/en/scripts/8374-imdb-show-cinematographer-on-main-page // @description Inserts movie cinematographer into title pages. For people who use the old IMDb design. Based on kuehlschrank Budget Script // @author krylosz // @version v1 // @include http://www.imdb.com/title/tt*/ // @include http://www.imdb.com/title/tt*/reference* // @include http://www.imdb.com/title/tt*/maindetails* // @include http://www.imdb.com/title/tt*/combined* // @noframes // @downloadURL https://update.greasyfork.icu/scripts/8374/IMDb%3A%20Show%20Cinematographer%20on%20Main%20Page.user.js // @updateURL https://update.greasyfork.icu/scripts/8374/IMDb%3A%20Show%20Cinematographer%20on%20Main%20Page.meta.js // ==/UserScript== (function() { var hideWhenNA = true; var showGross = true; var titleId = window.location.pathname.match(/\/(tt\d+)\//)[1]; var container = insertContainer((showGross) ? 'Cinematographer' : 'Budget'); var cache = new TempCache(); var info = cache.get(titleId); if(info !== false) { showInfo(container, info); return; } var req = new XMLHttpRequest(); req.open('GET', 'http://www.imdb.com/title/' + titleId + '/combined', true); req.onreadystatechange = function() { switch(req.readyState) { case 1: container.innerHTML = 'Requesting...'; break case 2: container.innerHTML = 'Receiving...'; break; case 4: if(req.status == 200) { info = parseInfo(req.responseText); showInfo(container, info); cache.set(titleId, info); } else { container.innerHTML = 'Error: HTTP ' + req.status + ' ' + req.statusText; } break; } }; req.send(null); function insertContainer(name) { var outer = document.createElement('div'); outer.className = 'info'; outer.innerHTML = '
' + name + ':
'; var span = document.createElement('span'); span.innerHTML = 'Initializing...'; var inner = document.createElement('div'); inner.className = 'info-content'; outer.appendChild(inner); inner.appendChild(span); var refNode = document.evaluate('id("tn15content")/div[contains(h5, "Writers") or contains(h5, "Writer") or contains(h5, "Contact")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0); if(!refNode) { refNode = document.querySelectorAll('div.info')[5]; } refNode.parentNode.insertBefore(outer, refNode); return span; } function parseInfo(html) { var cinema = ''; try { cinema = html.match(new RegExp('Cinematography.*?()', 'i'))[1]; } catch(ex) { } return {'cinema':cinema}; } function showInfo(container, info) { if(info.cinema) { container.innerHTML = info.cinema; } else { if(hideWhenNA) { container.parentNode.parentNode.style.display = 'none'; } else { container.innerHTML = 'N/A'; } } } function TempCache() { var s = (typeof(unsafeWindow) == 'undefined') ? window.sessionStorage : unsafeWindow.sessionStorage; var n = 'wtf.business.'; this.get = function(key) { try { if(s[n + key] != null) { return JSON.parse(s[n + key]); } } catch(ex) { } return false; } this.set = function(key, value) { try { s[n + key] = JSON.stringify(value); } catch(ex) { } } } })();