after register hanlder for lfp, we need to construct the scheme url corresponding to local file path, the path consist on 2 key part, formated date in YYYY-MM-DD and bgm japanese name(jpn), this the user script the construct the path based existing info on the page
// ==UserScript==
// @name create href to local file path specified by lfp scheme
// @namespace http://tampermonkey.net/
// @version 0.1
// @description after register hanlder for lfp, we need to construct the scheme url corresponding to local file path, the path consist on 2 key part, formated date in YYYY-MM-DD and bgm japanese name(jpn), this the user script the construct the path based existing info on the page
// @author You
// @include /^https?://(bangumi|bgm).tv/anime/list/.*$/
// @include /^https?://(bangumi|bgm).tv/index.*$/
// @include /^https://localhost:8001/anime/tags/.*$/
// @include /^https://cityhunter.me/anime/tags/.*$/
// @icon https://www.google.com/s2/favicons?sz=64&domain=bgm.tv
// @grant none
// ==/UserScript==
(function () {
'use strict';
const interval = setInterval(() => {
if (document.getElementById('browserItemList')) {
clearInterval(interval);
main();
}
}, 500);
})();
const DATE_REGEX = /(\d{4})[-/年]?(\d{1,2})[-/月]?(\d{1,2})[-/日]?/
function main() {
const extractedJpn = getJpn()
// const infotips = $('#browserItemList .info.tip')
const infotips = document.querySelectorAll('#browserItemList .info.tip');
for (let i = 0; i < infotips.length; i++) {
const match = infotips[i].innerHTML.match(DATE_REGEX)
// if (match)
// console.log(match[0])
const convertedDate = convertDate(match[0])
const folderPath = `${convertedDate} ${extractedJpn[i]}`
console.log(folderPath)
const lfp = createAnchorElement(folderPath)
insertAfter(lfp, infotips[i])
}
}
function getJpn() {
// Get the <ul> element by its ID
const ulElement = document.getElementById('browserItemList');
// Get all the <h3> elements within the <ul> element
const h3Elements = ulElement.getElementsByTagName('h3');
// Create an empty array to store the extracted inner texts
const extractedTexts = [];
// Iterate over each <h3> element
for (const h3Element of h3Elements) {
//in list/do page, jpn title present in small tag if chn tag exist
//otherwise it present in a tag, for index page, it always present in a tag
const smallElement = h3Element.querySelector('small');
if (smallElement) {
//console.log(`small tag: ${smallElement.innerText}`);
extractedTexts.push(smallElement.innerText);
} else {
//console.log(`a tag: ${h3Element.querySelector('a').innerText}`);
extractedTexts.push(h3Element.querySelector('a').innerText);
}
}
return extractedTexts;
}
function convertDate(dateString) {
var match = dateString.match(DATE_REGEX);
//https://stackoverflow.com/questions/9428518/javascript-0-at-the-end-of-match-statement
if (match) {
var year = match[1];
var month = ("0" + match[2]).slice(-2);
var day = ("0" + match[3]).slice(-2);
return year + "-" + month + "-" + day;
}
console.log("not matched")
// Return the original string if the format is not recognized
return dateString;
}
function insertAfter(newNode, existingNode) {
existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling);
}
function createAnchorElement(text) {
// Create the anchor element
const anchor = document.createElement('a');
// Set the href attribute
anchor.href = `lfp://${text}`;
// Set the inner text
anchor.innerText = text;
// Return the created anchor element
return anchor;
}