Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Asukafag's Zerochan links grabber
- // @namespace http://dobrochan.org/
- // @version 0.01
- // @description Helps you grab links to images with specified tag from Zerochan.
- // @author Asukafag
- // @include http://www.zerochan.net/*
- // @grant GM_addStyle
- // @noframes
- // ==/UserScript==
- GM_addStyle('a._dList {display:inline; background-color: #EEEEEE; padding: 3px; margin: 2px; line-height:2} div#_downloader {background-color: #fff8e6;position: fixed;width: 500px;top: 50%;margin-top: -244px;left: 50%;margin-left: -300px;border: 2px solid #949494;padding-top: 25px;padding-bottom: 25px;padding-left: 45px;padding-right: 45px;z-index: 5;opacity: 1;font-family: Tahoma, Verdana;} div#_dShortcut_1 {font-family: Helvetica, Verdana; font-weight: bold; font-size: 18px; color: #71d266; background-color: #fff1c8; width: 60px; text-align: center; padding: 3px; border: 2px solid #f3e4b8; position: fixed; top: 100%; margin-top: -30px; left: 100%; margin-left: -75px;}');
- (function() {
- var d;
- var tag = "Souryuu+Asuka+Langley";
- var page;
- var site = "http://zerochan.net";
- var parser = new DOMParser();
- var links;
- var list;
- var data;
- var count;
- var gotList = new CustomEvent("_dGotList");
- var dummy;
- var box = '<div id="_dWrapper"><div id="_downloader_box" style="Background-color: #000000;height: 100%;width: 100%;opacity: 0.3;position: fixed;z-index: 4;"> </div> <div id="_downloader"> <div id="title" style="font-size: 25px; color: #ca7272; text-align: center; margin-bottom: 15px;"> Asukafag′s Zerochan Links Grabber</div> <div id="description" style="font-size: 13px; text-align: center; margin-bottom: 25px;"> Копирование ссылок на изображения по тегам</div> <div style="font-size:12px;display: inline;">Тег:</div> <input type="text" id="tag" placeholder="Souryuu Asuka Langley" style=" margin-bottom: 25px; "> <div id="related"></div><div id="process" style=" font-size: 12px; opacity: 0.3; margin-bottom: 5px;"></div> <div id="loading" style=" display: none; min-height: 30px; width: 100%; background-color: #009688; margin-bottom: 15px; border: 2px solid #009688;"> <div id="loaded" style=" background-color: #9ff354; min-height: 30px; width: 0%;"></div> </div> <textarea name="" id="_dLinks" cols="30" rows="10" style="width: 80%;margin: 0 auto;display: none;height: 260px;resize: none;margin-bottom: 20px;"></textarea> <div style="clear:both"></div> <button id="_dStart" style="margin-right:15px; padding:5px">Поехали!</button><button id="_dStop" disabled=true style="padding:5px">Стоп</button> <button id="_dClose" style="float:right; padding:5px">Закрыть</button></div></div>';
- var shortcut = '<a id="_dShortcut" href="javascript:void(0);" style="opacity:0.7" onmouserover="this.style.opacity=1;" onmouseleave="this.style.opacity=0.7"> <div id="_dShortcut_1"><div style=" display: inline; color: #e22d2d; ">A</div>ZLG</div></a>';
- var keyTypingTimer = null;
- function updateBar(current, total){
- document.getElementById("loaded").style.width=Math.floor(current/(total/100))+"%";
- }
- function updateStatus(str){
- document.getElementById("process").innerHTML = str;
- }
- function addLink(link){
- document.getElementById("_downloader").getElementsByTagName("textarea")[0].value += link+"\r\n";
- }
- function checkTyping(){
- clearInterval(keyTypingTimer);
- keyTypingTimer = setTimeout(checkTags, 300);
- }
- function checkTags(){
- document.getElementById("related").innerHTML = "";
- if (document.getElementById("tag").value.length > 0) tag = document.getElementById("tag").value.replace(/ /ig, "+");
- else return;
- console.log(tag);
- var chk = new XMLHttpRequest();
- chk.open('GET', tag, true);
- chk.onreadystatechange = (function(){
- if (chk.readyState != 4) return;
- if (chk.status != "200") return;
- d = parser.parseFromString(chk.responseText, "text/html");
- if (d.getElementById("children")) displayList();
- });
- chk.send();
- }
- function displayList(){
- progressToggle(false);
- var labels = new Array();
- var childrens = d.getElementById("children").getElementsByTagName("li");
- for(var l=0; l <= childrens.length-1; l++) {
- labels[l] = childrens[l].getElementsByTagName("a")[1].innerHTML;
- }
- for(var z = 0; z <= labels.length-1 && z <= 20; z++){
- if (z == 20) document.getElementById("related").innerHTML += "<a href='http://zerochan.net/"+tag+"' class='_dList' target='_blank'>More...</a>";
- else document.getElementById("related").innerHTML += "<a href='javascript:void(0)' class='_dList'>"+labels[z]+"</a>";
- }
- for (z = 0; z <= document.getElementById("related").getElementsByTagName("a").length-1; z++) document.getElementById("related").getElementsByTagName("a")[z].addEventListener("click", function(){
- document.getElementById("tag").value = this.innerHTML;
- document.getElementById("related").innerHTML = "";
- })
- }
- function loadList(){
- if (d.getElementById("children")) {
- updateStatus("Это <a href='http://zerochan.net/"+tag+"' style='text-decoration:underline'>неполный тег</a>.");
- return;
- }
- list = d.getElementById("thumbs2").getElementsByTagName("li");
- for (var a=0; a<list.length; a++) {
- links.push(list[a].getElementsByTagName("a")[0].getAttribute("href"));
- }
- updateBar(page, count);
- if (page < count) {
- page++;
- loadPage(getNextUri());
- }
- else {
- page = 0;
- count = links.length-1;
- dummy.removeEventListener("_dReady", loadList);
- dummy.addEventListener("_dReady", getLinks);
- dummy.dispatchEvent(gotList);
- loadPage(links[0]);
- updateStatus("Копируем ссылки...");
- }
- }
- function getLinks(){
- var link;
- a = d.getElementById("large").getElementsByTagName("img")[0];
- if (a.parentNode.tagName == "A") link = a.parentNode.getAttribute("href");
- else link = a.getAttribute("src");
- updateBar(page+1, count+1);
- addLink(link);
- if (page < count) {
- page++;
- loadPage(links[page]);
- }
- else {
- document.getElementById("_dWrapper").parentNode.replaceChild(document.getElementById("_dWrapper").cloneNode(true), document.getElementById("_dWrapper"));
- initialize();
- updateStatus("Готово!");
- }
- }
- function loadPage(url) {
- console.log(url);
- xhr = new XMLHttpRequest();
- xhr.open('GET', url, true);
- xhr.onreadystatechange = (function(){
- if (xhr.readyState != 4) return;
- if (xhr.status == "404") {
- updateStatus("Такого тега нет.");
- inputToggle(true);
- return;
- }
- d = parser.parseFromString(xhr.responseText, "text/html");
- dummy.dispatchEvent(new CustomEvent("_dReady"));
- });
- xhr.send();
- }
- function getCount(){
- updateStatus("Получаем информацию о количестве ссылок....");
- console.log("getCount");
- try {
- var p = d.getElementById("content").getElementsByTagName("p");
- p = p[p.length-1];
- console.log(p);
- console.log(p.innerHTML.split(" ")[3].replace(/,/g, "").match(/[0-9]*/)[0]);
- count = Number(p.innerHTML.split(" ")[3].replace(/,/g, "").match(/[0-9]*/)[0]);
- dummy.removeEventListener("_dReady", getCount);
- dummy.addEventListener("_dReady", loadList);
- dummy.dispatchEvent(new CustomEvent("_dReady"));
- }
- catch(err){
- console.log(err);
- // Здесь должна быть какая-нибудь обработка ошибки :(
- updateStatus("Ой! Возникли проблемы. Возможно, вы ввели некорректный тег. Или вы просто бака.");
- initialize();
- return;
- }
- console.log("Count: "+count);
- }
- function getNextUri(){
- var p = d.getElementById("content").getElementsByTagName("p");
- p = p[p.length-1];
- var h = p.getElementsByTagName("a");
- h = h[h.length-1];
- return h.getAttribute("href");
- }
- function progressToggle(toggle){
- var display;
- if (toggle) display = "block";
- else display = "none";
- document.getElementById("process").style.display = display;
- document.getElementById("loading").style.display = display;
- document.getElementById("_dLinks").style.display = display;
- }
- function inputToggle(toggle){
- document.getElementById("_dStop").disabled = toggle;
- document.getElementById("tag").disabled = !toggle;
- }
- function copyLinks() {
- if (document.getElementById("tag").value.length > 0) tag = document.getElementById("tag").value.replace(/ /ig, "+");
- else return;
- progressToggle(true);
- inputToggle(false);
- dummy.addEventListener("_dReady", getCount);
- loadPage(tag);
- }
- function displayModule(){
- document.getElementsByTagName("body")[0].removeChild(document.getElementById("_dShortcut"));
- document.getElementsByTagName("body")[0].innerHTML = box+document.getElementsByTagName("body")[0].innerHTML;
- initialize();
- }
- function initialize(){
- inputToggle(true);
- document.getElementById("_dStop").disabled = true;
- document.getElementById("tag").disabled = false;
- document.getElementById("tag").addEventListener("keyup", checkTyping);
- links = new Array();
- list = new Array();
- page = 1;
- count = 0;
- document.getElementById("_dStart").addEventListener("click", copyLinks);
- document.getElementById("_dStop").addEventListener("click", function(){
- document.getElementById("_dWrapper").parentNode.replaceChild(document.getElementById("_dWrapper").cloneNode(true), document.getElementById("_dWrapper"));
- initialize();
- });
- dummy = document.getElementById("_dWrapper");
- document.getElementById("_dClose").addEventListener("click", function(){
- displayShortcut();
- document.getElementsByTagName("body")[0].removeChild(document.getElementById("_dWrapper"));
- });
- }
- function displayShortcut(){
- console.log("displayed");
- document.getElementsByTagName("body")[0].innerHTML += shortcut;
- var elem = document.getElementById("_dShortcut");
- elem.addEventListener("click", displayModule);
- elem.addEventListener("mouseover", function(){elem.style.opacity="1"});
- elem.addEventListener("mouseleave", function(){elem.style.opacity="0.7"});
- }
- window.addEventListener('load', function() {
- displayShortcut();
- }, false);
- loaded = true;
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement