Skip to content

Instantly share code, notes, and snippets.

@MarvNC
Last active March 17, 2022 00:58
Show Gist options
  • Save MarvNC/05737b635970d3fcfd5211ef7d2dccb2 to your computer and use it in GitHub Desktop.
Save MarvNC/05737b635970d3fcfd5211ef7d2dccb2 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Delete EVNs
// @namespace Violentmonkey Scripts
// @match https://vndb.org/g*
// @match https://vndb.org/v*
// @grant none
// @version 1.1
// @author Marv
// @description filters out vns that don't have jp language (mostly EVNs). doesn't filter titles that aren't jp and got a jp release.
// ==/UserScript==
const japaneseRegex = /[一-龯ぁ-んァ-ンァ-ン゙゚0-9A-zぁ-ゞァ-ヶヲ-゚]+/;
let delayMs = 500;
const addDiv = (evnsDeleted, total) =>
/* html */ `<div class='elm_dd'><a id="toggleEVNs">deleted ${evnsDeleted} evns of ${total}</a></div>`;
const types = {
rows: {
vnSelector: 'tbody > tr',
titleSelector: 'td.tc_title > a[title]',
},
cards: {
vnSelector: '.mainbox > div',
titleSelector: 'a[title]',
},
grid: {
vnSelector: '.mainbox > div',
titleSelector: 'a[title] > span',
},
};
let type = types.rows;
(async function () {
// filter out vn pages
if (document.URL.match('https://vndb.org/v') && document.URL.match(/vndb\.org\/v\d+/)) {
return;
}
console.log('deleting EVNs');
let evns = [];
let rows = document.querySelector('.mainbox.browse.vnbrowse');
let cards = document.querySelector('.mainbox.vncards');
let grid = document.querySelector('.mainbox.vngrid');
let vnBox;
if (rows) {
type = types.rows;
vnBox = rows;
} else if (cards) {
type = types.cards;
vnBox = cards;
} else if (grid) {
type = types.grid;
vnBox = grid;
}
console.log(vnBox, type);
let vnElems = [...vnBox.querySelectorAll(type.vnSelector)];
vnElems.forEach((vnElem) => {
if (checkEVN(vnElem)) {
evns.push(vnElem);
toggleVisibility([vnElem]);
}
});
let insertBefore = document.querySelector('.maintabs.browsetabs');
insertBefore.insertBefore(
elementFromHTML(addDiv(evns.length, vnElems.length)),
insertBefore.firstChild
);
// vnBox.appendChild(elementFromHTML(addDiv(evns.length)));
document.getElementById('toggleEVNs').addEventListener('click', () => {
toggleVisibility(vnElems);
});
})();
function toggleVisibility(elements) {
elements.forEach((elem) => {
elem.style.display = elem.style.display == 'none' ? '' : 'none';
});
}
function elementFromHTML(html) {
let element = document.createElement('div');
element.innerHTML = html;
return element.firstChild;
}
// returns true if the elem doesnt have a jp flag
function checkEVN(vnElem) {
let flagElems = [...vnElem.querySelectorAll('abbr.lang')];
let vnTitle = vnElem.querySelector(type.titleSelector).innerText;
if (!flagElems.some((elem) => elem.title == 'Japanese')) {
if (flagElems.length >= 1) return true;
}
if (japaneseRegex.test(vnTitle)) {
return false;
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment