So now I have this:

Here's the script, for people who want it. Also if this is not part of the ICM Enhanced script yet and someone wants to add it, by all means do so! Code isn't very clean, but should be functional and tested against at least some edge cases.
Code: Select all
// ==UserScript==
// @name ICM enhancements
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://*.icheckmovies.com/lists/*
// @grant none
// ==/UserScript==
let filmList = document.getElementById('itemListMovies');
let filmListItems = filmList.querySelectorAll('.listItem');
let filmListTotal = filmListItems.length;
let checkedTotal = filmList.querySelectorAll('.listItem.checked').length;
// extra list info
let uncheckedCount = filmList.querySelectorAll('.listItem.unchecked').length;
let highestUnchecked = '';
let highestUncheckedRank = '';
if (uncheckedCount > 0) {
highestUnchecked = filmList.querySelector('.listItem.unchecked h2 a').innerHTML;
highestUncheckedRank = '#' + filmList.querySelector('.listItem.unchecked .rank').childNodes[0].nodeValue.trim();
} else {
highestUnchecked = 'All checked!';
highestUncheckedRank = 'n/a';
}
let favoriteCount = filmList.querySelectorAll('.listItem.favorite').length;
let highestFavorite = '';
let highestFavoriteRank = '';
if (favoriteCount > 0) {
highestFavorite = filmList.querySelector('.listItem.favorite h2 a').innerHTML;
highestFavoriteRank = '#' + filmList.querySelector('.listItem.favorite .rank').childNodes[0].nodeValue.trim();
} else {
highestFavorite = 'None found';
highestFavoriteRank = 'n/a';
}
let hateCount = filmList.querySelectorAll('.listItem.hated').length;
let highestHate = '';
let highestHateRank = '';
if (hateCount > 0) {
highestHate = filmList.querySelector('.listItem.hated h2 a').innerHTML;
highestHateRank = '#' + filmList.querySelector('.listItem.hated .rank').childNodes[0].nodeValue.trim();
} else {
highestHate = 'None found';
highestHateRank = 'n/a';
}
let unofficialCount = 0;
let isOfficial = (document.getElementById('topList').querySelector('h4.compact').innerHTML.trim().includes('An official iCheckMovies list')) ? true : false;
let officialLabel = (isOfficial) ? 'Unique officials' : 'Unofficial films';
for (let k=0; k < filmListItems.length; ++k) {
let info = filmListItems[k].querySelector('.info');
let officialListCounter = info.querySelectorAll('a')[1];
if (isOfficial && officialListCounter !== undefined) {
if (officialListCounter.innerHTML.charAt(0) == '1' && officialListCounter.innerHTML.charAt(1) == ' ') {
unofficialCount += 1;
}
} else {
if (officialListCounter.innerHTML.charAt(0) == '0') {
unofficialCount += 1;
}
}
}
let extraInfo = '<div class="ohExtraInfo">';
extraInfo += '<div class="spec"><div class="label">Highest unchecked</div><div class="value">' + highestUnchecked + ' (' + highestUncheckedRank + ')</div></div>';
extraInfo += '<div class="spec"><div class="label">Number of favorites</div><div class="value">' + favoriteCount + '/' + checkedTotal + ' (' + Math.round((favoriteCount/checkedTotal)*100) + '%)</div></div>';
extraInfo += '<div class="spec"><div class="label">Highest favorite</div><div class="value">' + highestFavorite + ' (' + highestFavoriteRank + ')</div></div>';
extraInfo += '<div class="spec"><div class="label">Number of dislikes</div><div class="value">' + hateCount + '/' + checkedTotal + ' (' + Math.round((hateCount/checkedTotal)*100) + '%)</div></div>';
extraInfo += '<div class="spec"><div class="label">Highest dislike</div><div class="value">' + highestHate + ' (' + highestHateRank + ')</div></div>';
extraInfo += '<div class="spec"><div class="label">' + officialLabel + '</div><div class="value">' + unofficialCount + '/' + filmListTotal + ' (' + Math.round((unofficialCount/filmListTotal)*100) + '%)</div></div>';
extraInfo += '</div>';
extraInfo += '<style>.ohExtraInfo {margin-bottom:20px;} .spec {display:flex; margin:4px 0;}.spec .label {font-weight:700; flex-basis:160px;}';
let printExtraLocation = document.getElementById('itemContainer');
printExtraLocation.insertAdjacentHTML('beforebegin', extraInfo);