NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Filmweb Rankingi - ukryj obejrzane
// @namespace http://filmweb.pl/
// @license MIT
// @version 0.3
// @description Ten skrypt dodaje w sekcji filtrów rankingów checkbox 'Ukryj obejrzane', którego zaznaczenie powoduje ukrycie ocenionych pozycji. Obecnie działa jedynie na załadowanym rankingu, czyli wymagane jest np. szybkie przeskorolowanie przez ranking w celu załadowania wszystkich pozycji i dopiero wtedy użycie checkboxa.
// @author k_____k
// @match https://www.filmweb.pl/ranking/*
// @grant GM_log
// ==/UserScript==
var hideAlreadySeen = false;
function showRankingItem(visible) {
const unseenScoreValues = ['unchecked', 'nwts', ''];
let divs = document.querySelectorAll('[itemprop="itemListElement"]');
let unseenMoviesCount = 0;
let allMoviesCount = 0;
const possibleRibbonStates = new Set();
for (let x = 0; x < divs.length; x++) {
let div = divs[x];
let ribbonElement = div.getElementsByClassName('ribbon')[0];
let userScore = ribbonElement.getAttribute('data-state');
possibleRibbonStates.add(userScore);
if(unseenScoreValues.indexOf(userScore) < 0) {
div.style.display = visible ? '' : 'none';
} else {
unseenMoviesCount++;
}
allMoviesCount++;
}
console.debug(`All possible user score values ${new Array(...possibleRibbonStates).join(' ')}`);
console.debug(`User have not seen ${unseenMoviesCount}/${allMoviesCount} movies`);
};
var zNode = document.createElement ('div');
zNode.innerHTML = `<label class="control control--checkbox">
<input type="checkbox" name="hideSeen" id="hideSeen" /> <span class="control__title">Ukryj obejrzane</span>
<div class="control__indicator"></div>
</label>`;
var filtersBar = document.querySelectorAll('div.rankingHeader__filters form')[0];
filtersBar.appendChild(zNode);
document.getElementById('hideSeen').addEventListener( 'change', (event) => {
if (event.target.checked) {
hideAlreadySeen = true;
} else {
hideAlreadySeen = false;
}
showRankingItem(!hideAlreadySeen);
});
// Select the node that will be observed for mutations
const targetNode = document.getElementsByClassName('rankingTypeSection')[0];
// Options for the observer (which mutations to observe)
const config = { attributes: false, childList: true, subtree: false };
// Callback function to execute when mutations are observed
const callback = function(mutationsList, observer) {
for(let mutation of mutationsList) {
if (mutation.type === 'childList') {
if(mutation.addedNodes.length > 0) {
showRankingItem(!hideAlreadySeen);
}
}
}
};
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);