Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name BBS Home page
- // @namespace dollars-bbs.org
- // @author Degritone
- // @description Makes a Home page for the dollars BBS
- // @match *://*.dollars-bbs.org/*
- // @grant none
- // ==/UserScript==
- let preferences = [];
- function request(url){
- let xmlHttp = new XMLHttpRequest();
- xmlHttp.open("GET",url,false);
- xmlHttp.send(null);
- return xmlHttp.responseText;
- }
- function getThreads(){
- let htmls = document.createElement("div");
- let baseURL = "https://dollars-bbs.org/";
- htmls.innerHTML = "";
- if(preferences[0][1] == "false")
- htmls.innerHTML+=request(baseURL+"main/index.html");
- if(preferences[1][1] == "false")
- htmls.innerHTML+=request(baseURL+"intro/index.html");
- if(preferences[2][1] == "false")
- htmls.innerHTML+=request(baseURL+"countries/index.html");
- if(preferences[3][1] == "false")
- htmls.innerHTML+=request(baseURL+"missions/index.html");
- if(preferences[4][1] == "false")
- htmls.innerHTML+=request(baseURL+"suggestions/index.html");
- if(preferences[5][1] == "false")
- htmls.innerHTML+=request(baseURL+"news/index.html");
- if(preferences[6][1] == "false")
- htmls.innerHTML+=request(baseURL+"animation/index.html");
- if(preferences[7][1] == "false")
- htmls.innerHTML+=request(baseURL+"art/index.html");
- if(preferences[8][1] == "false")
- htmls.innerHTML+=request(baseURL+"comics/index.html");
- if(preferences[9][1] == "false")
- htmls.innerHTML+=request(baseURL+"films/index.html");
- if(preferences[10][1] == "false")
- htmls.innerHTML+=request(baseURL+"food/index.html");
- if(preferences[11][1] == "false")
- htmls.innerHTML+=request(baseURL+"games/index.html");
- if(preferences[12][1] == "false")
- htmls.innerHTML+=request(baseURL+"vn/index.html");
- if(preferences[13][1] == "false")
- htmls.innerHTML+=request(baseURL+"literature/index.html");
- if(preferences[14][1] == "false")
- htmls.innerHTML+=request(baseURL+"music/index.html");
- if(preferences[15][1] == "false")
- htmls.innerHTML+=request(baseURL+"personal/index.html");
- if(preferences[16][1] == "false")
- htmls.innerHTML+=request(baseURL+"sports/index.html");
- if(preferences[17][1] == "false")
- htmls.innerHTML+=request(baseURL+"tech/index.html");
- if(preferences[18][1] == "false")
- htmls.innerHTML+=request(baseURL+"random/index.html");
- if(preferences[19][1] == "false")
- htmls.innerHTML+=request(baseURL+"test/index.html");
- return htmls.getElementsByClassName("thread");
- }
- function makeHome(){
- let doc = document.createElement("html");
- doc.innerHTML = request("https://dollars-bbs.org/news/index.html");
- document.getElementsByTagName("html")[0].innerHTML = doc.innerHTML;
- document.title = "Dollars BBS | Home";
- let meta = document.createElement("meta");
- meta.httpEquiv = "Access-Control-Allow-Origin";
- meta.content = "https://www.gstatic.com";
- document.head.appendChild(meta);
- [...document.head.childNodes].forEach((child)=>{
- if(child.outerHTML){
- if(child.outerHTML.includes("script")){
- let c = document.createElement("script");
- c.innerHTML = child.innerHTML;
- c.src = child.src;
- c.type = "text/javascript";
- document.head.appendChild(c);
- }
- }
- });
- let RSS = document.getElementsByClassName("threadnavigation")[0];
- RSS.parentNode.removeChild(RSS);
- let posts = document.getElementById("posts");
- posts.innerHTML = "LOADING POSTS<br><br>";
- let sideBar = document.getElementById("sidebar");
- sideBar.innerHTML = "<b>Home</b><br><p><b>IRC Channel:</b><br><a href='https://kiwiirc.com/client/irc.rizon.net/dollars-bbs' target="+
- "'_blank'>#dollars-bbs@rizon.net</a></p><img src='https://dollars-bbs.org/news/img/dollars-bbs_qrcode.png' alt='https://dollars-bbs.org/'><p><b>Comments, Suggestions, Reports/Concerns:</b><br>admin[at]dollars-bbs.org</p>";
- boardToggles(sideBar);
- document.getElementById("newsbutton").id = "musicbutton";
- let threadList = document.getElementById("threadlist");
- threadList.innerHTML = "Loading...";
- let boardTitle = document.getElementById("threadbox").getElementsByClassName("innerbox")[0];
- boardTitle.innerHTML = "<b>Home</b><br>The user-made home page containing recent posts from all the boards in one place.<br><br>"+threadList.outerHTML;
- let threads = getThreads();
- posts.innerHTML = "";
- let threadOrder = getSortedThreads(threads);
- let activeThreads = [];
- for(let i=0;i<threadOrder.length;i++)
- activeThreads[i] = threads[threadOrder[i]];
- for(let i=0;i<threadOrder.length;i++)
- posts.appendChild(activeThreads[i]);
- let threadURLs = [];
- for(let i=0;i<threadOrder.length;i++){
- let origin = getThreadOrigin(activeThreads[i]);
- let as = activeThreads[i].getElementsByTagName("a");
- threadURLs[i] = "https://dollars-bbs.org"+origin+"res/"+as[0].href.split(/\/.+\/(?=[0-9])/)[1];
- as[0].innerHTML = as[0].innerHTML+" <small>("+origin+")</small>";
- for(let j=0;j<as.length;j++){
- if(as[j].href.match(/res\/[0-9]+\.html$/)){
- as[j].href = threadURLs[i];
- }
- }
- }
- threadList.innerHTML = "";
- for(let i=0;i<5;i++){
- threadList.innerHTML+="<span class='threadlink'><a href='"+threadURLs[i]+"' rel='nofollow'>"+(i+1)+": </a>"+
- "<a href='#"+threadURLs[i].match(/[0-9]+/)[0]+"'>"+activeThreads[i].getElementsByTagName("a")[0].innerHTML.replace(/<\/*small>/g,"")+"</a></span>"
- }
- boardTitle.innerHTML = "<b>Home</b><br>The user-made home page containing recent posts from all the boards in one place.<br><br>"+threadList.outerHTML;
- setTimeout(modifyNewPosts,100,activeThreads);
- }
- function boardToggles(sideBar){
- let toggles = document.createElement("div");
- toggles.id = "boardTogglePreferences";
- toggles.style.textAlign = "right";
- toggles.style.marginRight = "30px";
- for(let i=0;i<21;i++){
- toggles.appendChild(document.createElement("input"));
- toggles.childNodes[i].type = "checkbox";
- }
- toggles.childNodes[0].name = "Main";
- toggles.childNodes[1].name = "Intro";
- toggles.childNodes[2].name = "Countries";
- toggles.childNodes[3].name = "Missions";
- toggles.childNodes[4].name = "Suggestions";
- toggles.childNodes[5].name = "News";
- toggles.childNodes[6].name = "Animations";
- toggles.childNodes[7].name = "Art";
- toggles.childNodes[8].name = "Comics";
- toggles.childNodes[9].name = "Films";
- toggles.childNodes[10].name = "Food";
- toggles.childNodes[11].name = "Games";
- toggles.childNodes[12].name = "VN";
- toggles.childNodes[13].name = "Literature";
- toggles.childNodes[14].name = "Music";
- toggles.childNodes[15].name = "Personal";
- toggles.childNodes[16].name = "Sports";
- toggles.childNodes[17].name = "Tech";
- toggles.childNodes[18].name = "Random";
- toggles.childNodes[19].name = "Test";
- toggles.childNodes[20].name = "allPosts";
- for(let i=20;i>=0;i--){
- if(i!=20){
- toggles.childNodes[i].outerHTML = "Ignore the "+toggles.childNodes[i].name+" board: "+toggles.childNodes[i].outerHTML+"<br>";
- continue;
- }
- toggles.childNodes[20].outerHTML = "Show all 200 posts: "+toggles.childNodes[20].outerHTML+"<br>";
- }
- let cookies = document.cookie.split("; ");
- for(let i=0;i<cookies.length;i++){
- if(!cookies[i].startsWith("degBoardTogglePreferences=")) continue;
- let pairs = cookies[i].split("=")[1].split("_");
- for(let j=0;j<pairs.length;j++){
- preferences[j] = [];
- let pair = pairs[j].split("-");
- preferences[j][0] = pair[0];
- preferences[j][1] = pair[1];
- }
- }
- if(preferences.length>0){
- for(let i=1;i<toggles.childNodes.length;i+=3){
- toggles.childNodes[i].checked = ((preferences[(i-1)/3][1]=="true")?true:false);
- }
- } else {
- for(let i=0;i<(toggles.childNodes.length-1)/3;i++){
- preferences[i] = [];
- preferences[i][1] = "false";
- }
- }
- let d = document.createElement("button");
- toggles.appendChild(d);
- d.innerHTML = "Apply";
- d.onclick = ()=>saveCookie();
- d.style = "position:relative; margin:auto; border-radius:7px; border:solid 2px #EEEEEE; background-color:#151515; padding:5px; padding-top:3px; text-decoration:none; font-size:14px; cursor:pointer; color:#EEEEEE;";
- sideBar.appendChild(toggles);
- }
- function saveCookie(){
- let cookie = "degBoardTogglePreferences=";
- let toggles = document.getElementById("boardTogglePreferences").childNodes;
- for(let i=0;i<toggles.length-1;i++){
- if(!toggles[i].outerHTML) continue;
- if(!toggles[i].outerHTML.includes("<input")) continue;
- cookie+=encodeURIComponent(toggles[i].name+"-"+toggles[i].checked+"_");
- }
- cookie = cookie.replace(/_$/,"");
- cookie+="; expires=";
- let date = new Date();
- date.setTime(date.getTime()+(1000*60*60*24*365));
- cookie+=encodeURIComponent(date.toUTCString());
- cookie+=";";
- document.cookie = cookie;
- window.location.reload();
- }
- function getSortedThreads(threads){
- let times = [];
- for(let i=0;i<threads.length;i++){
- let replies = threads[i].getElementsByClassName("reply");
- let time = replies[replies.length-1].innerHTML.match(/[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9][0-9]/)[0].replace(/[ :]/g,"-").split("-");
- times[i] = time;
- }
- let sortedTimes = JSON.parse(JSON.stringify(times));
- for(let i=sortedTimes[0].length;i>=0;i--){
- sortedTimes.sort(function(a,b){
- return b[i]-a[i];
- });
- }
- let values = [];
- for(let i=0;i<((preferences[20][1]=="false")?10:times.length);i++){
- let th = indexOf(times,sortedTimes[i]);
- values[i] = th;
- times[th] = "";
- }
- return values;
- }
- function indexOf(arr,obj) {
- for(let i=0;i<arr.length;i++){
- let same = true;
- for(let j=0;j<obj.length;j++){
- if(arr[i][j]!=obj[j]){
- same = false;
- break;
- }
- }
- if(same)
- return i;
- }
- return -1;
- }
- function getThreadOrigin(thread){
- let action = thread.getElementsByTagName("form")[0].getAttribute("action");
- return action.match(/\/[a-z]+\//)[0];
- }
- function modifyNewPosts(activeThreads){
- let threadlinks = document.getElementsByClassName("threadlinks");
- let newposts = [];
- let entirethreads = [];
- let previewposts = [];
- let replies = [];
- let passwords = [];
- for(let i=0;i<threadlinks.length;i++){
- newposts[i] = threadlinks[i].getElementsByTagName("a")[0];
- entirethreads[i] = threadlinks[i].getElementsByTagName("a")[1];
- previewposts[i] = threadlinks[i].parentNode.parentNode.parentNode.getElementsByTagName("input")[6];
- replies[i] = threadlinks[i].parentNode.parentNode.parentNode.getElementsByTagName("input")[1];
- passwords[i] = threadlinks[i].parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("input")[2];
- }
- setTimeout(modifyNewThread,1100);
- for(let i=0;i<newposts.length;i++){
- if(newposts[i]){
- let threadNumber = newposts[i].href.match(/reply[0-9]+/)[0].replace("reply","");
- let captchaCode = " "+
- "if(!window.loadedRecaptcha)"+
- " window.loadedRecaptcha = [];"+
- "if(window.loadedRecaptcha.indexOf("+threadNumber+") === -1) {"+
- "window.loadedRecaptcha.push("+threadNumber+");"+
- " grecaptcha.render('recaptcha-input"+threadNumber+"', {"+
- " 'sitekey' : '6LeDgBITAAAAAAt12EPCyU9Ezdg8JGmKPnO-zjOx',"+
- " 'theme' : 'dark'"+
- " });"+
- "};"+
- ""
- newposts[i].href = "javascript:"+captchaCode+newposts[i].href.replace(/javascript:/g,"");
- newposts[i].href = newposts[i].href.replace("loadRecaptcha("+threadNumber+");","");
- previewposts[i].onclick = "";
- previewposts[i].onclick = function onclick(){previewPost("postform"+threadNumber,""+threadNumber,getThreadOrigin(activeThreads[i]));};
- replies[i].onclick = "";
- replies[i].onclick = function onclick(){postPost("postform"+threadNumber,""+threadNumber,getThreadOrigin(activeThreads[i]),replies[i]);};
- passwords[i].value = getPassword("password");
- passwords[i].parentNode.field_a.value=getCookie("name");
- }
- }
- if(window.location.href.includes("/home")){
- let warning = document.createElement("div");
- document.getElementById("threadlist").after(warning);
- warning.innerHTML = "<br>ATTENTION!<br>You must wait a few seconds for the reCaptcha scripts to load before you post on the Home board.<br>Once this warning disappears, it is almost definitely safe to post.";
- warning.id = "captchaWarning";
- setTimeout(removeCaptchaWarning,5000,newposts);
- }
- }
- function modifyNewThread(){
- let newThread = document.getElementsByTagName("a");
- newThread = newThread[newThread.length-2];
- newThread.href = newThread.href.replace("loadRecaptcha();","");
- newThread.href = "javascript:"+
- "if(!window.loadedRecaptcha)"+
- " window.loadedRecaptcha = [];"+
- "if(window.loadedRecaptcha.indexOf('new-thread') === -1) {"+
- "window.loadedRecaptcha.push('new-thread');"+
- " grecaptcha.render('recaptcha-input-new-thread', {"+
- " 'sitekey' : '6LeDgBITAAAAAAt12EPCyU9Ezdg8JGmKPnO-zjOx',"+
- " 'theme' : 'dark'"+
- " });"+
- "};"+
- ""+newThread.href.replace(/javascript:/g,"")+" show('boardChoice');";
- newThread.parentNode.getElementsByTagName("input")[1].value = getPassword("password");
- newThread.parentNode.getElementsByTagName("input")[3].onclick = "";
- newThread.parentNode.getElementsByTagName("input")[3].onclick = function onclick(){createThread(newThread.parentNode.getElementsByTagName("input")[3]);};
- let boardDDTR = document.createElement("tr");
- boardDDTR.id = "boardChoice";
- boardDDTR.style.display = "none";
- document.getElementById("post").after(boardDDTR);
- let boardDDTD0 = document.createElement("td");
- boardDDTD0.innerHTML = "Choose Board:";
- boardDDTR.appendChild(boardDDTD0);
- let boardDDTD1 = document.createElement("td");
- let boardDD = document.createElement("select");
- boardDDTD1.appendChild(boardDD);
- boardDDTR.appendChild(boardDDTD1);
- boardDD.required = true;
- boardDD.size = 1;
- boardDD.name = "boardTarget";
- initializeBoardDD(boardDD);
- }
- function createThread(button){
- let form=document.getElementById("threadform");
- if(!form) return;
- let iframe = document.createElement("iframe");
- iframe.src = "https://dollars-bbs.org"+form.boardTarget.value+"kareha.pl";
- iframe.width = "0px";
- iframe.height = "0px";
- iframe.name = form.boardTarget.value+"frame";
- iframe.id = form.boardTarget.value+"frame";
- document.body.appendChild(iframe);
- form.target = form.boardTarget.value+"frame";
- form.action = "https://dollars-bbs.org/"+form.boardTarget.value+"/kareha.pl";
- button.disabled = true;
- button.value = "Please wait...";
- form.submit();
- setTimeout(reload,1000);
- }
- function initializeBoardDD(boardDD){
- let options = [];
- for(let i=0;i<20;i++){
- options[i] = document.createElement("option");
- boardDD.appendChild(options[i]);
- }
- options[0].value = "main";
- options[1].value = "intro";
- options[2].value = "countries";
- options[3].value = "missions";
- options[4].value = "suggestions";
- options[5].value = "news";
- options[6].value = "animations";
- options[7].value = "art";
- options[8].value = "comics";
- options[9].value = "films";
- options[10].value = "food";
- options[11].value = "games";
- options[12].value = "vn";
- options[13].value = "literature";
- options[14].value = "music";
- options[15].value = "personal";
- options[16].value = "sports";
- options[17].value = "tech";
- options[18].value = "random";
- options[19].value = "test";
- options[0].innerHTML = "Main";
- options[1].innerHTML = "Intro";
- options[2].innerHTML = "Countries";
- options[3].innerHTML = "Missions";
- options[4].innerHTML = "Suggestions";
- options[5].innerHTML = "News";
- options[6].innerHTML = "Animations";
- options[7].innerHTML = "Art";
- options[8].innerHTML = "Comics";
- options[9].innerHTML = "Films";
- options[10].innerHTML = "Food";
- options[11].innerHTML = "Games";
- options[12].innerHTML = "VN";
- options[13].innerHTML = "Literature";
- options[14].innerHTML = "Music";
- options[15].innerHTML = "Personal";
- options[16].innerHTML = "Sports";
- options[17].innerHTML = "Tech";
- options[18].innerHTML = "Random";
- options[19].innerHTML = "Test";
- }
- function previewPost(formid,thread,originBoard){
- let form=document.getElementById(formid);
- let preview=document.getElementById("preview"+thread);
- if(!form||!preview) return;
- preview.style.display="";
- preview.innerHTML="<em>Loading...</em>";
- let text;
- text="task=preview";
- text+="&comment="+encodeURIComponent(form.comment.value);
- text+="&markup="+encodeURIComponent(form.markup.value);
- if(thread) text+="&thread="+thread;
- let xmlhttp = new XMLHttpRequest();
- xmlhttp.open("GET","https://dollars-bbs.org/"+originBoard+"/kareha.pl?"+text,true);
- xmlhttp.onreadystatechange=function() {
- if(xmlhttp.readyState==4)
- preview.innerHTML=xmlhttp.responseText;
- }
- xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
- xmlhttp.send(null);
- }
- function postPost(formid,thread,originBoard,button){
- let form=document.getElementById(formid);
- if(!form) return;
- let iframe = document.createElement("iframe");
- iframe.src = "https://dollars-bbs.org"+originBoard+"kareha.pl";
- iframe.width = "0px";
- iframe.height = "0px";
- iframe.name = originBoard+"frame";
- iframe.id = originBoard+"frame";
- document.body.appendChild(iframe);
- form.target = originBoard+"frame";
- form.action = "https://dollars-bbs.org"+originBoard+"kareha.pl";
- button.disabled = true;
- button.value = "Please wait...";
- form.submit();
- setTimeout(reload,1000);
- }
- function reload(){
- window.location.reload();
- }
- function getPassword(name){
- let pass=getCookie(name);
- if(pass) return pass;
- return makePassword();
- }
- function getCookie(name){
- with(document.cookie){
- let regexp=new RegExp("(^|;\\s+)"+name+"=(.*?)(;|$)");
- let hit=regexp.exec(document.cookie);
- if(hit&&hit.length>2) return unescape(hit[2]);
- else return '';
- }
- }
- function makePassword(){
- let chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- let pass='';
- for(let i=0;i<8;i++) {
- let rnd=Math.floor(Math.random()*chars.length);
- pass+=chars.substring(rnd,rnd+1);
- }
- return(pass);
- }
- function removeCaptchaWarning(newPosts){
- document.getElementsByClassName("innerbox")[1].removeChild(document.getElementById("captchaWarning"));
- }
- if(window.location.href.startsWith("https://dollars-bbs.org/home"))
- makeHome();
- redirect();
- function redirect(){
- let pmenu = document.getElementById("pagemenu");
- if(!pmenu){
- setTimeout(redirect,1000);
- return;
- }
- pmenu.getElementsByTagName("a")[0].href = "https://dollars-bbs.org/home/";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement