NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name TokkiPlugin
// @namespace http://tokki.be
// @version 0.4
// @description Some visual features and download helper for kch
// @author IUC
// @license MIT
// @match https://kpop.re/wood/*
// @excludes https://kpop.re/all/*
// @grant GM_download
// ==/UserScript==
// This will make your (You)s on kch/wood/ very visible and give you a one-click download button for files in every post
(function() {
'use strict';
// Wait until site is fully loaded
window.addEventListener('load', function() {
// Download stuff
var allPosts = document.getElementsByClassName("post");
for (let post of allPosts) {
addDownloadButton(post);
}
function addDownloadButton(post) {
let fileLinks = [];
fileLinks[0] = post.getAttribute("id");
var fileIndex = 1;
var section = post.children[1];
if (section.children.length > 1) {
var footerPostControls = post.children[2].children[1];
var fileDiv = section.children[0];
var figures = fileDiv.children;
for (let figure of figures) {
var postFile = figure.children[1];
fileLinks[fileIndex] = postFile.getAttribute("href");
fileIndex++;
}
if (fileLinks.length>2){
// Adding checkboxes with label
for (let c = 1; c<fileLinks.length;c++) {
let boxContainer = document.createElement("a");
let fileCheckbox = document.createElement("input");
fileCheckbox.type = "checkbox";
fileCheckbox.id = "file"+ c.toString();
let fileCheckBoxLabel = document.createElement("label");
//fileCheckBoxLabel.htmlFor = "file"+ c.toString();
fileCheckBoxLabel.appendChild(document.createTextNode(c.toString()));
fileCheckBoxLabel.style.marginRight = "3px";
boxContainer.appendChild(fileCheckBoxLabel);
boxContainer.appendChild(fileCheckbox);
boxContainer.classList.add("post-control");
boxContainer.style.marginRight = "5px";
footerPostControls.appendChild(boxContainer);
}
}
// Adding download button with icon
var downloadNode = document.createElement("a");
var downloadIcon = document.createElement("i");
downloadIcon.classList.add("fa", "fa-download");
downloadNode.appendChild(downloadIcon);
downloadNode.setAttribute("id", "dlButton");
downloadNode.classList.add("post-control", "control");
downloadNode.style.marginLeft = "8px";
footerPostControls.appendChild(downloadNode);
downloadNode.addEventListener('click', function(){
download(fileLinks);
});
}
}
function download(links) {
var amountOfFiles = links.length -1;
if (amountOfFiles > 1) {
let postNode = document.getElementById(links[0]);
let checkCounter = amountOfFiles;
for (let g = 1; g<amountOfFiles+1;g++){
let checkBoxValue = postNode.querySelector("#file" + g.toString()).checked;
if (checkBoxValue) {
let args = {
url: links[g],
name: links[g].slice(links[g].lastIndexOf("/")+1, links[g].length)
}
GM_download(args);
}
else {
checkCounter--;
}
}
if (checkCounter < 1) {
for (let i = 1; i<links.length;i++) {
let args = {
url: links[i],
name: links[i].slice(links[i].lastIndexOf("/")+1, links[i].length)
}
GM_download(args);
}
}
}
else {
let args = {
url: links[1],
name: links[1].slice(links[1].lastIndexOf("/")+1, links[1].length)
}
GM_download(args);
}
}
//(You) stuff
var all_links = document.getElementsByClassName("post-link");
var youCount = 0;
for (let link of all_links) {
if(link.textContent.includes("(You)"))
{
link.style.color = "hotpink";
link.style.fontWeight = "bold";
youCount++;
}
}
//You counter
var node = document.createElement("a");
var textNode = document.createTextNode(youCount + " (You)s");
node.appendChild(textNode);
node.setAttribute("id", "youcount");
document.getElementsByClassName("thread-nav_bottom")[0].appendChild(node);
//you listener for new posts
var target = document.getElementsByClassName("thread thread_single")[0];
var mutationObs = new MutationObserver(function(mutations, mutationObs){
// Get new post into addedNode
var mutation = mutations[0];
var addedNode = mutation.addedNodes[0];
// Adding download button to new posts
addDownloadButton(addedNode);
var targetDivLinkList = addedNode.getElementsByTagName("a");
for(var link of targetDivLinkList){
if (link.innerHTML.includes("(You)")){
link.style.color = "hotpink";
link.style.fontWeight = "bold";
youCount++;
document.getElementById("youcount").innerText = youCount + " (You)s";
}
}
});
var config = {
attributes: false,
childList: true,
subtree: false
}
mutationObs.observe(target, config);
}, false);
})();