mirror of
https://github.com/wassname/netflix-ratings.git
synced 2026-06-27 16:10:26 +08:00
Initial Repo
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
.rottenCritic-logo-medium {
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwAAADsABataJCQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMK0KCsAAAAURSURBVEhLrZR7UFRlGMbPCopooMttr5y9sruwLBd3YVcEFkYJEOJiMGjKSCorpCimmBeUVim1kjA1xswcZ+wPnNRq1EnNyekPCywnLUnRGBQxFHa5CWmjPL1nd5myy8Q0PTPvzDm75/t9z/u83znMWGQpkAaI5mh0ntv/T7lVpmJzhfFYVJpgMt3y3L/+d/FkccFCq00TlL829l1rftipmeWRWVKL1Jf7z/3I2DVOrWZ8jNmiSXkbjPGzq2I2F2217J33qqnt2QxFT+Em08n0lVFzkkp1Is/zY5b3tCyVMW+jsbqo1ny+ZE/i3bzNlkdzN8U/SYmXIndZ7GBhraW52BZVUVqkVy20yibSmjG552VmKgzz1hmPzt+RMLywIQWp9kRkrjPDWGTAgu0zULzH+mvJrqT2F3clnltit9SWlBgMNVart2f9X1VDMSxdoI8uW2s8uGqNqfuV5cYn5W8mgoOX7LUi/61k2N5LwZoNZhxI12N3tv5xdVlsX9lG84XiSmNuRoXax4N6Srz1ZkXULqv22NkZuqHrFt3IrRk6nH7egPJ9qVhRl4TtC6KxmDZYVZ+MT/JicEeuRluYBhcjNY/rZ0d0lKepFxdGREzw8NxqFAqDr4hl9Xe16l96LDo4MvToLDDg5AoTbPtT8MGSWHRHa3GSNqt4IxENFfHoVGngkKrRQ3WfVY+0hCo6GgME8RjNnLv4VihNvq1UdvSadbj1XCQO2mJQWW1Gmd2C3SuM6CLnvSnhuKfX4GiWAfWVZrTrtC7waNEGI1eFsnOtak8kp+jiokRmd9Ci3jQ9BopjMbTKgsHqJAxsSsZwVQIGlkxDX54BzjgdWqO0+CgnCm36p8Fc3Sf4hwHiWS7wBak04AYrb3JO06Iv14CBl+IwVJuKhw3ZeLgvB0M7ZmHwZQv650XDmUyutRr8GKlFu8YdxWi5IqFqFsj2u+JoYVnRHVbZ6TRq0Z9vwCDlN7RtJh4emoNHhwswXJeOwarp6J8f44rDQQO7x6pdNQrspvpZqkK7RIVmoeyMGxzkAUdr0JdFUZQa8YBiGN6ZjuG3M/DAnoLB5XHoL4yCk4bnUIb9CajGLYK2SpT4TqzAWQF72gVu8hMH3hTLmxzaMPRSq30EGFhqovanY3DNdAwsIyjnNj0CTjoZDpkb2kWwDnJ4g4BXCPiVSI4zglAcDBC6o2iUSn0vC9nX78tUT5wGGqA1HL05BvQVRaNvLhXF05tGUBNBVWGuHO8SsI3qKgGbCXhOwOJ4sAQH+MGPavymZtPoeK437muBLLVDorjpkIfBGa4hiA7OhHBqnSqe2qcNewjaFarGbQJeJ5eXCPqlUIYTIVIcDhJi99TAkc2T/I4VMvwprlPB6TM6GT8I2de6JMoHDm4otIErS6oeBblkVeik1n8i4Pdipavt09T2kWAx9vGDsO0Zf6z2mdiyyNvbRLjfP0pcJidCWGWLUP7+PYlqaPQIuYZDDrlpX/O4PE8uPw2R4FCgAHX+fGz09R2xeXldK/DyyihkmKdfaU5cJEf4IvaSiK27I1E6uOPDtd1KDi8T8IJIRi5ZNJLLBnJZO9kPleMnPH6Bx/t8NsMkRPwd9A/i7WQY348DxTlNQvnxS2JZd5NIPvIFAV0uKcu6KXysnzhpuNTL65s8ZtzKJIbhPvrj3Mv/XTwbw4zfyueH2v2Csur5Iavf4Qfat/hPrVnk41OaSVnGM4w/PfcPQIb5DdZKjk0CgfRZAAAAAElFTkSuQmCC');
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
height: 22px;
|
||||||
|
text-indent: -9999em;
|
||||||
|
vertical-align: baseline;
|
||||||
|
width: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.rottenUser-logo-medium{
|
||||||
|
width: 17px;
|
||||||
|
height: 22px;
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAWCAYAAAAmaHdCAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMK0KCsAAAAUaSURBVDhPbZR5UFNXFMafVttppzPqaFFZAiJByqC2goqdqlXQtsq4FLAipYCpYaQgoliDCI8iEEDAXRrEUcQqMi4z1A0FRYEWCiGshrATEkjIy0ICBFzy9YZmav/wmzlz35t7zu+ee9/3LvUu0fTaaebg8b6cVZjm7Vl5J3Z1sYDLomlqqr+//3vm0ZL6bnG57tMfXt/nU/MgJqT69t7YzpK9TOezOJn4ES//cf7uVZW3w7aeT9+yyAyzlLwVTdNTb+YEsB8V7Nksq02vVghTjEpRFqPvK3jZWRZjUNQnMe1l+5t7yg+qSvNDUzNpnzmW0n9lpj4t3OfW+DBa0F0R18w08Y1DDZkmTUsWxvouov0PDhRVURiq5UFenWhqKz/acSvnh6UANcWCoKYU0z6stpL9ZzTiU2p1wzGTsjISox0noHuRAfmfvxJADGTPeQQSB0YYD0Vt/ETlDU7cpRPBMycJT11dP27ieGeoKhKGjNIrMEiyoar+BZq6aJKcCKYhEcOSs2Aa06AWHYaKdDNQxYO0KkZew9mQEulEfUDdtLd36Q/eJDeIL2C0SwDV3/EYFmfB0JYG+ZMw9JEwkK704mPQiI6QMQ2DFdHofZaItjCvoZOz5y2nCufNW6709BjVCaKgFaZCWvYzFDWxMPZdgK6RB1VdApT1fBg6c6BtTYOq5iCGHnOgyQ6G/HO3N4LZVtuoh5/YOvXbsYfUC12gWecJdbg3dMd9MXY7EaN346ArPgpJdhAGz4dDkxECdehXYNzdwCxwRr+dk55vZbWYKt3JmdsbsV+k3eADxmYhGFsnMHYkWM5g7Ek4OEPFYpNnEubR1nEyT7tpO6T8zPbDjo4zqIrNu2bJUtPv62NioV33DfRhEdCt+3oSol60BGo3D6id3KBmu0G3zR96bjgY58UYy7+KwSvXyum19DSq2N39I1FS6unhIzSGA0Pwuqsbxpt3wBDA2DkBTGoNRpPTof12K14JRZi4+wDqZasw9qQcYjr5MohJKa67+3Th2ZwI5kjCG61vACZaxTDeKyGQpRj9LQ+miQmM8I9Du8UPL5tbJztQrVwDQ50Qdf4BPBCfUTRFTRXmXfKVJSTpma07yGQ9DGQVlctnGDmbg9fj49AnE4+QBYziNgyfOAMl2bb66TMUrlyzyWxWs9+m1J3PXd/NPy5VbNsB7fNKaKuqoXRdBh0pGB8ZgZZOxlBAMPGOBEx8EuQ+vui78vs438vL0QyYVCVNe4izTzXI/AKhuk+2UluPAXKgTEY2RnTDUMUlYvBH4g3SycC+g5AGcVCfzO8UcLkzLAiKKg7mujTn5Jb27grBQNEtKEWNkC5dAUVKOnSMGoOHj6J/dxiULS/QG8pFTwwPVeGR92/4+X1oQVDUGe8t1sL8gqsdIdw30ouXIW9qRpfHF5AlJkOlUEBKinr2hEPe0IT2HYHoSsvEneDQY0X+/u9bEBQVZW8/sywy+mTD5u2vuk6fg4ysKPFcg+44GoP9cnRHH0JneBRk9Q1o+W4nGqMOmHK9NgYSyNuLiXyhaZcXOP9UwnJWiL4PQvf1IjStWA3JoVjIe/ogiYiGOGg3Oohvqlevx13HRdJTLJYrKf3vPpnUgfnz51y1ccgqZTnp/iL/hciBjVa2KyRLlqHF6VMIyXuFA9t0z85RljOftSfa1vbtefxf5okUKyuvPGu7vGs29k3FNvaKezYLNEU2rJ4Ca1ZFrjUrNWXuXDdz55YSIor6BwohOuxJOHbsAAAAAElFTkSuQmCC');
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
text-indent: -9999em;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
+222
@@ -0,0 +1,222 @@
|
|||||||
|
(function($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var $body = $('body');
|
||||||
|
$body.on('ratings.load',function(e, query) {
|
||||||
|
//originally needed for german amazon prime in prime-ratings
|
||||||
|
//query.t = query.t
|
||||||
|
// .replace('[dt./OV]', '')
|
||||||
|
// .replace('[OV]', '')
|
||||||
|
// .replace('[OV/OmU]', '');
|
||||||
|
|
||||||
|
$.getJSON('https://www.omdbapi.com/', query, function(data) {
|
||||||
|
$body.trigger('ratings.return', [data]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var isDebug = false;
|
||||||
|
var $body = $('body');
|
||||||
|
var lastTitle = "";
|
||||||
|
|
||||||
|
//Taken from http://stackoverflow.com/questions/3219758/detect-changes-in-the-dom
|
||||||
|
function observeDOM() {
|
||||||
|
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
|
||||||
|
var eventListenerSupported = window.addEventListener;
|
||||||
|
|
||||||
|
return function(obj, callback) {
|
||||||
|
if (MutationObserver) {
|
||||||
|
// define a new observer
|
||||||
|
var obs = new MutationObserver(function(mutations, observer) {
|
||||||
|
if (mutations[0].addedNodes.length || mutations[0].removedNodes.length)
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
// have the observer observe foo for changes in children
|
||||||
|
obs.observe(obj, { childList:true, subtree:true });
|
||||||
|
} else if (eventListenerSupported) {
|
||||||
|
obj.addEventListener('DOMNodeInserted', callback, false);
|
||||||
|
obj.addEventListener('DOMNodeRemoved', callback, false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function addRating(results) {
|
||||||
|
//Check if hover window is available
|
||||||
|
var $hoverbox = $('div.bob-info-main');
|
||||||
|
var $box;
|
||||||
|
if ($hoverbox.length) {
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.debug("Hover div detected");
|
||||||
|
}
|
||||||
|
$box = $('.meta');
|
||||||
|
} else {
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.debug("No hover div detected");
|
||||||
|
}
|
||||||
|
|
||||||
|
$box = $('.jawBonePanes').find('.meta');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($box.find('.imdb-rating').length > 0){
|
||||||
|
var hasRating = true;
|
||||||
|
var myClass = $box.find('.imdb-rating').get(0).parent().attr("class");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each(results, function(index, result) {
|
||||||
|
if (hasRating) {
|
||||||
|
window.console.debug("Rating was already detected: " + myClass);
|
||||||
|
// don't add a second IMDb
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var $list = $('<span>', {
|
||||||
|
'class': 'imdb-rating',
|
||||||
|
'title': result.details || ''
|
||||||
|
});
|
||||||
|
$list.append('<i class="'+result.type+'-logo-medium">'+result.label+'</i>');
|
||||||
|
$list.append('<strong>'+result.rating+'%</strong>');
|
||||||
|
|
||||||
|
$list.appendTo($box);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// shamelessly taken from http://stackoverflow.com/questions/4292320
|
||||||
|
function htmlNumericEntityUnescape(string) {
|
||||||
|
return string.replace(/&#([^\s]*);/g, function(match, match2) {return String.fromCharCode(Number(match2));});
|
||||||
|
}
|
||||||
|
|
||||||
|
//extract useful data from response from omdb
|
||||||
|
var annotate = function(data) {
|
||||||
|
var result = [];
|
||||||
|
//I don't care for IMDb Ratings :)
|
||||||
|
// if (data.imdbID && data.imdbRating !== 'N/A') {
|
||||||
|
// result.push({
|
||||||
|
// type: 'imdb',
|
||||||
|
// label: 'IMDb',
|
||||||
|
// rating: +data.imdbRating,
|
||||||
|
// maxRating: 10,
|
||||||
|
// details: null
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
if (data.tomatoMeter !== 'N/A') {
|
||||||
|
result.push({
|
||||||
|
type: 'rottenCritic',
|
||||||
|
label: 'Rotten Tomatoes Critic',
|
||||||
|
rating: +data.tomatoMeter,
|
||||||
|
//maxRating: 100,
|
||||||
|
details: data.tomatoConsensus !== 'N/A' ? htmlNumericEntityUnescape(data.tomatoConsensus) : null
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (data.rottenUser !== 'N/A') {
|
||||||
|
result.push({
|
||||||
|
type: 'rottenUser',
|
||||||
|
label: 'Rotten Tomatoes User',
|
||||||
|
rating: +data.tomatoUserMeter,
|
||||||
|
//maxRating: 100,
|
||||||
|
details: data.tomatoConsensus !== 'N/A' ? htmlNumericEntityUnescape(data.tomatoConsensus) : null
|
||||||
|
});
|
||||||
|
}
|
||||||
|
addRating(result);
|
||||||
|
};
|
||||||
|
|
||||||
|
var queries = [];
|
||||||
|
function addQueries(description, year) {
|
||||||
|
if (description && year) {
|
||||||
|
queries.push(function() {
|
||||||
|
return {
|
||||||
|
t: description,
|
||||||
|
y: year,
|
||||||
|
tomatoes: true
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (description) {
|
||||||
|
queries.push(function() {
|
||||||
|
return {
|
||||||
|
t: description,
|
||||||
|
tomatoes: true
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.log('queries:', queries.length);
|
||||||
|
}
|
||||||
|
//Get Ratings and stuff
|
||||||
|
if (queries.length > 0) {
|
||||||
|
fallbackQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getReleaseInfo() {
|
||||||
|
return {
|
||||||
|
year: +$.trim($('span.year').text())
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMovieDescription() {
|
||||||
|
var title = $('div.title.has-jawbone-nav-transition').clone();
|
||||||
|
return $.trim(title.text());
|
||||||
|
}
|
||||||
|
|
||||||
|
function fallbackQuery() {
|
||||||
|
var curFn = queries.shift();
|
||||||
|
if (typeof curFn === 'function') {
|
||||||
|
var query = curFn();
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.log('query', query);
|
||||||
|
}
|
||||||
|
$body.trigger('ratings.load', [query]);
|
||||||
|
} else {
|
||||||
|
window.console.error('Could not find any data');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$body.on('ratings.return', function(e, data) {
|
||||||
|
if (data.Response === 'True') {
|
||||||
|
queries = []; // we got a hit, so reset queries
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.debug('success', data);
|
||||||
|
}
|
||||||
|
annotate(data);
|
||||||
|
} else {
|
||||||
|
if (isDebug && data.Error) {
|
||||||
|
window.console.debug('error', data.Error);
|
||||||
|
}
|
||||||
|
fallbackQuery(queries);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var description = getMovieDescription();
|
||||||
|
var year = getReleaseInfo().year;
|
||||||
|
addQueries(description, year);
|
||||||
|
|
||||||
|
// Observe a specific DOM element if it exists:
|
||||||
|
var $content = $('#appMountPoint');
|
||||||
|
if ($content.length) {
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.log('Found content node', $content);
|
||||||
|
}
|
||||||
|
observeDOM()($content.get(0), function() {
|
||||||
|
if (isDebug) {
|
||||||
|
window.console.log('Content changed');
|
||||||
|
}
|
||||||
|
//netflix dom allows diffrent dynamic element trees. check if hover div exists, or splitview (jawbone view)
|
||||||
|
var $jawBoneDescription = ($('.jawBone').find("div.title").text() != "") ? $('.jawBone').find("div.title").text() : $('div.smallTitleCard.highlighted').attr("aria-label");
|
||||||
|
var $jawBoneYear = $('.jawBone').find("span.year").text();
|
||||||
|
var $hoverBoxDescription = $('div.hasBob.smallTitleCard').find("div.bob-title").text();
|
||||||
|
var $hoverBoxYear = $('div.hasBob.smallTitleCard').find("span.year").text();
|
||||||
|
|
||||||
|
//addqueries depending on dom-tree state
|
||||||
|
if($jawBoneDescription != "" && $jawBoneDescription != null)
|
||||||
|
{
|
||||||
|
addQueries($jawBoneDescription, $jawBoneYear);
|
||||||
|
}
|
||||||
|
else if($hoverBoxDescription != "")
|
||||||
|
{
|
||||||
|
addQueries($hoverBoxDescription, $hoverBoxYear);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
})(window.jQuery);
|
||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Vendored
+4
File diff suppressed because one or more lines are too long
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "netflix-ratings",
|
||||||
|
"version": "0.2",
|
||||||
|
|
||||||
|
"description": "This Extension adds Rotten Tomatoes Critics and User Critics to movies whenever they can be matched.",
|
||||||
|
|
||||||
|
"icons": {
|
||||||
|
"48": "icons/logo48.png",
|
||||||
|
"96": "icons/logo96.png"
|
||||||
|
},
|
||||||
|
|
||||||
|
"permissions": [
|
||||||
|
"*://www.netflix.com/*",
|
||||||
|
"*://www.netflix.de/*",
|
||||||
|
"*://www.netflix.co.uk/*"
|
||||||
|
],
|
||||||
|
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"run_at": "document_end",
|
||||||
|
"matches": [
|
||||||
|
"*://www.netflix.com/*",
|
||||||
|
"*://www.netflix.de/*",
|
||||||
|
"*://www.netflix.co.uk/*"
|
||||||
|
],
|
||||||
|
"js": ["jquery-3.1.0.min.js", "flixrate.js"],
|
||||||
|
"css": ["flixrate.css"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
"web_accessible_resources": [
|
||||||
|
"flixrate.css"
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user