2ch.ru Interface Tweaks
By #1313
—
Last update May 7, 2007
—
Installed
655 times.
// 2ch.ru Interface Tweaks script
// 2006-11-16
// Released under the Forced-Anon license
//
/*
FORCED ANONYMITY LICENSE v1.0
=============================
This program is free software. Redistribution and use, with or without
modification, are permitted provided that the following conditions are met:
* Any redistributions must retain this notice.
* The author and all contributors of this program must remain anonymous.
As an exception, non-anonymous code modifications (contributions) to this
program are allowed if the modification:
* Fixes some secirity threat, the program poses (security fixes).
* Fixes some misbehavior which is generally considered extremly annoying.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
// ==UserScript==
// @name 2ch.ru Interface Tweaks
// @namespace http://2ch.ru/b/
// @description Sum useless interface tweaks for 2ch.ru, v0.7.2
// @include http://2ch.ru/*
// @include http://*.2ch.ru/*
// ==/UserScript==
function fixStyle(css) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
function fixScript(js) {
var head, script;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML = js;
head.appendChild(script);
}
var reg = window.location.pathname.match(/\/(.+)\//);
var thisBoard = RegExp.$1;
//alert(thisBoard);
var cssUpdate = '#postform textarea { width: 100%; } '+
'#navbar0, #postform, .controlbtn { padding: 5px; font-size: 70%; border: 1px solid #999; border-bottom: 3px solid #666; background: #ccc; }' +
'#navbar0 { position: fixed; right: 25px; font-size: 65%; }' +
'#postform { position: fixed; right: 25px; width: 37em; top: 40px; }' +
'.theader, .rules, .hidden, #navbar1, #trname, #tremail, #trgetback, #trpassword, #trrules, .postblock { display: none; } ' +
'.controlbtn { position: fixed; right: 0px; cursor: pointer; font-weight: bold; }' +
'.quickreplyform, .quickreplyform form { display: inline; } ' +
'.quickreplyform input { font-size: 70%; border: 1px solid #999; padding: 1px; color: #555; width: 200px; }' +
'.loadingimg { position: relative; top: 15px; left: 25px; }' +
'.thumb { width: 50px; }';
fixStyle(cssUpdate);
// adding sum decent css
var jsUpdate = "function hide(what) { document.getElementById(what).style.display='none';document.getElementById('hide'+what).style.display='none';document.getElementById('show'+what).style.display='inline';}" +
"function show(what) { document.getElementById(what).style.display='block';document.getElementById('hide'+what).style.display='inline';document.getElementById('show'+what).style.display='none';}" +
"function quickreply(anchor,thread) { if (!document.getElementById('qr'+thread)) { var qRDiv = document.createElement('div'); qRDiv.className='quickreplyform'; qRDiv.id='qr'+thread; qRForm=document.createElement('form');qRForm.action='/cgi-bin/wakaba.pl/"+thisBoard+"'; qRForm.method='POST'; qRShampoo=document.createElement('input'); qRShampoo.type='text'; qRShampoo.id='qrinput'+thread; qRShampoo.name='shampoo'; qRForm.appendChild(qRShampoo); qRTask=document.createElement('input'); qRTask.type='hidden'; qRTask.name='task'; qRTask.value='post'; qRForm.appendChild(qRTask); qRParent=document.createElement('input'); qRParent.type='hidden'; qRParent.name='parent'; qRParent.value=thread; qRForm.appendChild(qRParent); qRGetback=document.createElement('input'); qRGetback.type='hidden'; qRGetback.name='gb2'; qRGetback.value='board'; qRForm.appendChild(qRGetback); qRDiv.appendChild(qRForm); anchor.parentNode.insertBefore(qRDiv, anchor); qRShampoo.focus(); anchor.style.display='none'; } else { return false; }}" +
"function imgshow(image,thumbI,bigI) { if (image.src == thumbI && image.previousSibling.tagName != 'IMG') { lolwut = document.createElement('img'); lolwut.className='loadingimg'; lolwut.src='data:image/gif;base64,R0lGODlhCQAFAJECAP9mAP/Mmf///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAACQAFAAACCISOaJnL3hgqACH5BAUKAAIALAMAAAADAAUAAAIFhG4olgUAIfkECQoAAgAsAAAAAAkABQAAAgyMfoCGoseQiklQdwoAIfkECQoAAgAsAAAAAAkABQAAAgyUY2ArKMpaYg6eKQoAIfkECQoAAgAsAAAAAAkABQAAAgmUH6eWiy7aagUAIfkEBQoAAgAsAAAAAAkABQAAAgWUj6nLXQA7'; image.parentNode.insertBefore(lolwut, image); image.setAttribute('onLoad','lolwut.parentNode.removeChild(lolwut);'); image.src=bigI; image.className='notthumb'} else { if (image.previousSibling.tagName == 'IMG') { lolwut = image.previousSibling; lolwut.parentNode.removeChild(lolwut); } image.removeAttribute('onLoad'); image.src=thumbI; image.className='thumb'} }";
fixScript(jsUpdate);
// adding sum decent js
var controlButton2 = document.createElement("div");
controlButton2.className = 'controlbtn';
controlButton2.innerHTML = '<span id="hidenavbar0" onClick="hide(\'navbar0\');">⇒</span><span id="shownavbar0" style="display:none" onClick="show(\'navbar0\');">⇐</span>';
var navBar = document.getElementById('navbar0');
navBar.parentNode.insertBefore(controlButton2, navBar);
// adding control button to navbar
if (thisBoard != 'beta/o' && thisBoard != 'beta/o/res') {
// oekaki is different
document.getElementsByTagName('hr')[1].className = 'hidden';
// removing the <hr>
var controlButton1 = document.createElement("div");
controlButton1.className = 'controlbtn';
controlButton1.innerHTML = '<span id="hidepostform" onClick="hide(\'postform\');">⇒</span><span id="showpostform" style="display:none" onClick="show(\'postform\');">⇐</span>';
var postForm = document.getElementById('postform');
if (postForm) postForm.parentNode.insertBefore(controlButton1, postForm);
// adding control button to postform
if (window.location.pathname.match(/\/res\/\d+\.html$/)) {
// we're in sum thread
var sagebox = document.createElement("span");
sagebox.innerHTML = '<input type="checkbox" onclick="if (this.checked) document.getElementsByName(\'nabiki\')[0].value=\'sage\'; else document.getElementsByName(\'nabiki\')[0].value=\'\'" />';
document.getElementsByName('kasumi')[0].nextSibling.parentNode.insertBefore(sagebox, document.getElementsByName('kasumi')[0].nextSibling);
// adding the sagebox
} else {
// we're on the board page
fixScript("hide('postform')");
var allSpans = document.getElementsByTagName("span");
for (var i = 0; i < allSpans.length; i++) {
var thisSpan = allSpans.item(i);
if (thisSpan.className == "replytothread") {
var aHref = thisSpan.childNodes[1];
var reg = aHref.href.match(/\/res\/(\d+)\.html$/);
var thisThread = RegExp.$1;
var quickReply = document.createElement("span");
quickReply.innerHTML = '[<a style="cursor: pointer;" onclick="quickreply(this,\''+thisThread+'\')">→</a>]';
thisSpan.appendChild(quickReply);
}
}
// 'quickreply' feature
}
} else {
// oekaki is different
}
var allImgs = document.getElementsByTagName("img");
for (var i = 0; i < allImgs.length; i++) {
var thisImg = allImgs.item(i);
if (thisImg.className == "thumb") {
var thumbImg = thisImg.src;
var aHref = thisImg.parentNode;
var bigImg = aHref.href;
var validExtension = new RegExp("\.jpg$|\.png$|\.gif$");
if (validExtension.test(aHref.href)) {
aHref.removeAttribute("href");
aHref.removeAttribute("target");
aHref.setAttribute("style","cursor: pointer");
thisImg.removeAttribute('height');
thisImg.removeAttribute('width');
thisImg.setAttribute("onClick","imgshow(this,'"+thumbImg+"','"+bigImg+"')");
}
}
}
// 'open/close in thread' feature