diff --git a/4chan_x.coffee b/4chan_x.coffee
index 6021552e0..9ead41740 100644
--- a/4chan_x.coffee
+++ b/4chan_x.coffee
@@ -41,7 +41,7 @@ AEOS =
else
return value
this.GM_addStyle = (css) ->
- style = tag('style')
+ style = document.createElement 'style'
style.type = 'text/css'
style.textContent = css
$('head', document).appendChild(style)
@@ -182,8 +182,6 @@ slice = (arr, id) ->
arr.splice(i, 1)
return arr
i++
-tag = (el) ->
- document.createElement(el)
tn = (s) ->
document.createTextNode s
x = (path, root) ->
@@ -224,9 +222,10 @@ callbacks = []
#godammit moot
head = $('head', document)
if not favicon = $('link[rel="shortcut icon"]', head)#/f/
- favicon = tag('link')
- favicon.rel = 'shortcut icon'
- favicon.href = 'http://static.4chan.org/image/favicon.ico'
+ favicon = n 'link', {
+ rel: 'shortcut icon'
+ href: 'http://static.4chan.org/image/favicon.ico'
+ }
head.appendChild(favicon)
favNormal = favicon.href
favEmpty = 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw=='
@@ -328,9 +327,10 @@ options = ->
remove(div)
else
hiddenNum = hiddenReplies.length + hiddenThreads.length
- div = tag('div')
- div.id = 'options'
- div.className = 'reply'
+ div = n 'div', {
+ id: 'options'
+ className: 'reply'
+ }
position(div)
html = '
'
for option of config
@@ -365,7 +365,6 @@ hideThread = (div) ->
GM_setValue("hiddenThreads/#{BOARD}/", JSON.stringify(hiddenThreads))
hide(div)
if getConfig('Show Stubs')
- a = tag('a')
if span = $('.omittedposts', div)
n = Number(span.textContent.match(/\d+/)[0])
else
@@ -374,18 +373,22 @@ hideThread = (div) ->
text = if n is 1 then "1 reply" else "#{n} replies"
name = $('span.postername', div).textContent
trip = $('span.postername + span.postertrip', div)?.textContent || ''
- a.textContent = "[ + ] #{name}#{trip} (#{text})"
- a.className = 'pointer'
+ a = n 'a', {
+ textContent: "[ + ] #{name}#{trip} (#{text})"
+ className: 'pointer'
+ }
a.addEventListener('click', showThread, true)
inBefore(div, a)
threadF = (current) ->
- div = tag('div')
- div.className = 'thread'
- a = tag('a')
- a.textContent = '[ - ]'
- a.className = 'pointer'
+ div = n 'div', {
+ className: 'thread'
+ }
+ a = n 'a', {
+ textContent: '[ - ]'
+ className: 'pointer'
+ }
a.addEventListener('click', hideThread, true)
div.appendChild(a)
@@ -432,11 +435,12 @@ hideReply = (reply) ->
table = x('ancestor::table', reply)
hide(table)
if getConfig('Show Stubs')
- a = tag('a')
- a.textContent = "[ + ] #{name} #{trip}"
- a.className = 'pointer'
+ a = n 'a', {
+ textContent: "[ + ] #{name} #{trip}"
+ className: 'pointer'
+ }
a.addEventListener('click', showReply, true)
- div = tag('div')
+ div = n 'div'
div.appendChild(a)
inBefore(table, div)
@@ -506,14 +510,16 @@ autohide = ->
quickReply = (e) ->
unless qr = $('#qr')
#make quick reply dialog
- qr = tag('div')
- qr.id = 'qr'
- qr.className = 'reply'
+ qr = n 'div', {
+ id: 'qr'
+ className: 'reply'
+ }
position(qr)
- div = tag('div')
- div.innerHTML = 'Quick Reply '
- div.className = 'move'
+ div = n 'div', {
+ innerHTML: 'Quick Reply '
+ className: 'move'
+ }
div.addEventListener('mousedown', AEOS.move, true)
qr.appendChild(div)
@@ -598,20 +604,22 @@ watchX = ->
watcherUpdate = ->
- div = tag('div')
+ div = n 'div'
for board of watched
for thread in watched[board]
- a = tag('a')
- a.textContent = 'X'
- a.className = 'pointer'
+ a = n 'a', {
+ textContent: 'X'
+ className: 'pointer'
+ }
a.addEventListener('click', watchX, true)
div.appendChild(a)
div.appendChild(document.createTextNode(' '))
- link = tag('a')
- link.textContent = thread.text
- link.href = "/#{board}/res/#{thread.id}"
+ link = n 'a', {
+ textContent: thread.text
+ href: "/#{board}/res/#{thread.id}"
+ }
div.appendChild(link)
- div.appendChild(tag('br'))
+ div.appendChild(n 'br')
old = $('#watcher div:last-child')
replace(old, div)
@@ -745,9 +753,10 @@ replyNav = ->
unless navtopr = $ '#navtopr a'
return
text = navtopr.nextSibling
-a = tag('a')
-a.textContent = 'X'
-a.className = 'pointer'
+a = n 'a', {
+ textContent: 'X'
+ className: 'pointer'
+}
a.addEventListener('click', options, true)
inBefore(text, document.createTextNode(' / '))
inBefore(text, a)
@@ -760,9 +769,10 @@ if getConfig('Reply Hiding')
callbacks.push((root) ->
tds = $$('td.doubledash', root)
for td in tds
- a = tag('a')
- a.textContent = '[ - ]'
- a.className = 'pointer'
+ a = n 'a', {
+ textContent: '[ - ]'
+ className: 'pointer'
+ }
a.addEventListener('click', hideReply, true)
replace(td.firstChild, a)
@@ -806,10 +816,11 @@ if getConfig('Quick Report')
if getConfig('Thread Watcher')
#create watcher
- watcher = tag('div')
- watcher.innerHTML = '
Thread Watcher
'
- watcher.className = 'reply'
- watcher.id = 'watcher'
+ watcher = n 'div', {
+ innerHTML: '
Thread Watcher
'
+ className: 'reply'
+ id: 'watcher'
+ }
position(watcher)
$('div', watcher).addEventListener('mousedown', AEOS.move, true)
document.body.appendChild(watcher)
@@ -820,14 +831,16 @@ if getConfig('Thread Watcher')
#normal, threading
inputs = $$('form > input[value="delete"], div > input[value="delete"]')
for input in inputs
- img = tag('img')
id = input.name
for thread in threads
if id == thread.id
- img.src = favNormal
+ src = favNormal
break
- img.src or= favEmpty
- img.className = 'pointer'
+ src or= favEmpty
+ img = n 'img', {
+ src: src
+ className: 'pointer'
+ }
img.addEventListener('click', watch, true)
inBefore(input, img)
@@ -886,43 +899,49 @@ else # not reply
l1 = l + 1
#should this be a while loop?
for el in arr
- up = tag('a')
- up.className = 'pointer'
if i isnt 0
- up.textContent = '▲'
- up.href = "##{i}"
+ textContent = '▲'
+ href = "##{i}"
else if PAGENUM isnt 0
- up.textContent = '◀'
- up.href = "#{PAGENUM - 1}"
+ textContent = '◀'
+ href = "#{PAGENUM - 1}"
else
- up.textContent = '▲'
- up.href = "#navtop"
+ textContent = '▲'
+ href = "#navtop"
- span = tag('span')
- span.className = 'navlinks'
- span.id = ++i
+ up = n 'a', {
+ className: 'pointer'
+ textContent: textContent
+ href: href
+ }
+
+ span = n 'span', {
+ className: 'navlinks'
+ id: ++i
+ }
i1 = i + 1
- down = tag('a')
- down.className = 'pointer'
- span.appendChild(up)
- span.appendChild(document.createTextNode(' '))
- span.appendChild(down)
+ down = n 'a', {
+ className: 'pointer'
+ }
if i1 == l1
down.textContent = '▶'
down.href = "#{PAGENUM + 1}#1"
else
down.textContent = '▼'
down.href = "##{i1}"
- inBefore(el, span)
+
+ addTo span, up, tn(' '), down
+ inBefore el, span
if location.hash is '#1'
window.location = window.location
if getConfig('Thread Expansion')
omitted = $$('span.omittedposts')
for span in omitted
- a = tag('a')
- a.className = 'pointer omittedposts'
- a.textContent = "+ #{span.textContent}"
+ a = n 'a', {
+ className: 'pointer omittedposts'
+ textContent: "+ #{span.textContent}"
+ }
a.addEventListener('click', expandThread, true)
replace(span, a)
diff --git a/4chan_x.js b/4chan_x.js
index dfac42862..eedef9ed9 100644
--- a/4chan_x.js
+++ b/4chan_x.js
@@ -1,5 +1,5 @@
(function() {
- var $, $$, AEOS, BOARD, DAY, PAGENUM, REPLY, _i, _j, _len, _len2, _ref, _ref2, a, addTo, arr, as, autoWatch, autohide, b, board, callback, callbacks, clearHidden, close, config, cutoff, delform, down, el, expandComment, expandThread, favEmpty, favNormal, favicon, getConfig, getTime, head, hiddenReplies, hiddenThreads, hide, hideReply, hideThread, html, i, i1, id, iframe, iframeLoad, iframeLoop, img, inAfter, inBefore, input, inputs, l, l1, lastChecked, magic, n, navtopr, nodeInserted, nop, now, omitted, onloadComment, onloadThread, options, optionsSave, parseResponse, position, quickReply, r, remove, replace, replyNav, report, show, showReply, showThread, slice, span, stopPropagation, submit, tag, text, thread, threadF, threads, tn, up, watch, watchX, watched, watcher, watcherUpdate, x, xhrs;
+ var $, $$, AEOS, BOARD, DAY, PAGENUM, REPLY, _i, _j, _len, _len2, _ref, _ref2, a, addTo, arr, as, autoWatch, autohide, b, board, callback, callbacks, clearHidden, close, config, cutoff, delform, down, el, expandComment, expandThread, favEmpty, favNormal, favicon, getConfig, getTime, head, hiddenReplies, hiddenThreads, hide, hideReply, hideThread, href, html, i, i1, id, iframe, iframeLoad, iframeLoop, img, inAfter, inBefore, input, inputs, l, l1, lastChecked, magic, n, navtopr, nodeInserted, nop, now, omitted, onloadComment, onloadThread, options, optionsSave, parseResponse, position, quickReply, r, remove, replace, replyNav, report, show, showReply, showThread, slice, span, src, stopPropagation, submit, text, textContent, thread, threadF, threads, tn, up, watch, watchX, watched, watcher, watcherUpdate, x, xhrs;
var __slice = Array.prototype.slice, __hasProp = Object.prototype.hasOwnProperty;
config = {
'Thread Hiding': true,
@@ -41,7 +41,7 @@
};
this.GM_addStyle = function(css) {
var style;
- style = tag('style');
+ style = document.createElement('style');
style.type = 'text/css';
style.textContent = css;
return $('head', document).appendChild(style);
@@ -230,9 +230,6 @@
}
return _result;
};
- tag = function(el) {
- return document.createElement(el);
- };
tn = function(s) {
return document.createTextNode(s);
};
@@ -280,9 +277,10 @@
callbacks = [];
head = $('head', document);
if (!(favicon = $('link[rel="shortcut icon"]', head))) {
- favicon = tag('link');
- favicon.rel = 'shortcut icon';
- favicon.href = 'http://static.4chan.org/image/favicon.ico';
+ favicon = n('link', {
+ rel: 'shortcut icon',
+ href: 'http://static.4chan.org/image/favicon.ico'
+ });
head.appendChild(favicon);
}
favNormal = favicon.href;
@@ -380,9 +378,10 @@
return remove(div);
} else {
hiddenNum = hiddenReplies.length + hiddenThreads.length;
- div = tag('div');
- div.id = 'options';
- div.className = 'reply';
+ div = n('div', {
+ id: 'options',
+ className: 'reply'
+ });
position(div);
html = '
4chan X
';
_ref2 = config;
@@ -423,7 +422,6 @@
}
hide(div);
if (getConfig('Show Stubs')) {
- a = tag('a');
if (span = $('.omittedposts', div)) {
n = Number(span.textContent.match(/\d+/)[0]);
} else {
@@ -433,19 +431,23 @@
text = n === 1 ? "1 reply" : ("" + (n) + " replies");
name = $('span.postername', div).textContent;
trip = ((typeof (_ref3 = ((_ref2 = $('span.postername + span.postertrip', div)))) === "undefined" || _ref3 === null) ? undefined : _ref3.textContent) || '';
- a.textContent = ("[ + ] " + (name) + (trip) + " (" + (text) + ")");
- a.className = 'pointer';
+ a = n('a', {
+ textContent: ("[ + ] " + (name) + (trip) + " (" + (text) + ")"),
+ className: 'pointer'
+ });
a.addEventListener('click', showThread, true);
return inBefore(div, a);
}
};
threadF = function(current) {
var _i, _len, _ref2, a, div, hidden;
- div = tag('div');
- div.className = 'thread';
- a = tag('a');
- a.textContent = '[ - ]';
- a.className = 'pointer';
+ div = n('div', {
+ className: 'thread'
+ });
+ a = n('a', {
+ textContent: '[ - ]',
+ className: 'pointer'
+ });
a.addEventListener('click', hideThread, true);
div.appendChild(a);
inBefore(current, div);
@@ -492,11 +494,12 @@
table = x('ancestor::table', reply);
hide(table);
if (getConfig('Show Stubs')) {
- a = tag('a');
- a.textContent = ("[ + ] " + (name) + " " + (trip));
- a.className = 'pointer';
+ a = n('a', {
+ textContent: ("[ + ] " + (name) + " " + (trip)),
+ className: 'pointer'
+ });
a.addEventListener('click', showReply, true);
- div = tag('div');
+ div = n('div');
div.appendChild(a);
return inBefore(table, div);
}
@@ -572,13 +575,15 @@
quickReply = function(e) {
var _i, _len, _ref2, _ref3, autohideB, clone, closeB, div, form, input, qr, script, selection, text, textarea, xpath;
if (!(qr = $('#qr'))) {
- qr = tag('div');
- qr.id = 'qr';
- qr.className = 'reply';
+ qr = n('div', {
+ id: 'qr',
+ className: 'reply'
+ });
position(qr);
- div = tag('div');
- div.innerHTML = 'Quick Reply ';
- div.className = 'move';
+ div = n('div', {
+ innerHTML: 'Quick Reply ',
+ className: 'move'
+ });
div.addEventListener('mousedown', AEOS.move, true);
qr.appendChild(div);
autohideB = n('input', {
@@ -663,7 +668,7 @@
};
watcherUpdate = function() {
var _i, _j, _len, _ref2, _ref3, a, board, div, link, old, thread;
- div = tag('div');
+ div = n('div');
_ref2 = watched;
for (board in _ref2) {
if (!__hasProp.call(_ref2, board)) continue;
@@ -671,17 +676,19 @@
_ref3 = watched[board];
for (_j = 0, _len = _ref3.length; _j < _len; _j++) {
thread = _ref3[_j];
- a = tag('a');
- a.textContent = 'X';
- a.className = 'pointer';
+ a = n('a', {
+ textContent: 'X',
+ className: 'pointer'
+ });
a.addEventListener('click', watchX, true);
div.appendChild(a);
div.appendChild(document.createTextNode(' '));
- link = tag('a');
- link.textContent = thread.text;
- link.href = ("/" + (board) + "/res/" + (thread.id));
+ link = n('a', {
+ textContent: thread.text,
+ href: ("/" + (board) + "/res/" + (thread.id))
+ });
div.appendChild(link);
- div.appendChild(tag('br'));
+ div.appendChild(n('br'));
}
}
old = $('#watcher div:last-child');
@@ -839,9 +846,10 @@
return null;
}
text = navtopr.nextSibling;
- a = tag('a');
- a.textContent = 'X';
- a.className = 'pointer';
+ a = n('a', {
+ textContent: 'X',
+ className: 'pointer'
+ });
a.addEventListener('click', options, true);
inBefore(text, document.createTextNode(' / '));
inBefore(text, a);
@@ -858,9 +866,10 @@
for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
td = _ref2[_j];
_result.push((function() {
- a = tag('a');
- a.textContent = '[ - ]';
- a.className = 'pointer';
+ a = n('a', {
+ textContent: '[ - ]',
+ className: 'pointer'
+ });
a.addEventListener('click', hideReply, true);
replace(td.firstChild, a);
next = td.nextSibling;
@@ -916,10 +925,11 @@
});
}
if (getConfig('Thread Watcher')) {
- watcher = tag('div');
- watcher.innerHTML = '
Thread Watcher
';
- watcher.className = 'reply';
- watcher.id = 'watcher';
+ watcher = n('div', {
+ innerHTML: '
Thread Watcher
',
+ className: 'reply',
+ id: 'watcher'
+ });
position(watcher);
$('div', watcher).addEventListener('mousedown', AEOS.move, true);
document.body.appendChild(watcher);
@@ -929,18 +939,20 @@
_ref = inputs;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
input = _ref[_i];
- img = tag('img');
id = input.name;
_ref2 = threads;
for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
thread = _ref2[_j];
if (id === thread.id) {
- img.src = favNormal;
+ src = favNormal;
break;
}
}
- img.src || (img.src = favEmpty);
- img.className = 'pointer';
+ src || (src = favEmpty);
+ img = n('img', {
+ src: src,
+ className: 'pointer'
+ });
img.addEventListener('click', watch, true);
inBefore(input, img);
}
@@ -1012,27 +1024,29 @@
_ref = arr;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
el = _ref[_i];
- up = tag('a');
- up.className = 'pointer';
if (i !== 0) {
- up.textContent = '▲';
- up.href = ("#" + (i));
+ textContent = '▲';
+ href = ("#" + (i));
} else if (PAGENUM !== 0) {
- up.textContent = '◀';
- up.href = ("" + (PAGENUM - 1));
+ textContent = '◀';
+ href = ("" + (PAGENUM - 1));
} else {
- up.textContent = '▲';
- up.href = "#navtop";
+ textContent = '▲';
+ href = "#navtop";
}
- span = tag('span');
- span.className = 'navlinks';
- span.id = ++i;
+ up = n('a', {
+ className: 'pointer',
+ textContent: textContent,
+ href: href
+ });
+ span = n('span', {
+ className: 'navlinks',
+ id: ++i
+ });
i1 = i + 1;
- down = tag('a');
- down.className = 'pointer';
- span.appendChild(up);
- span.appendChild(document.createTextNode(' '));
- span.appendChild(down);
+ down = n('a', {
+ className: 'pointer'
+ });
if (i1 === l1) {
down.textContent = '▶';
down.href = ("" + (PAGENUM + 1) + "#1");
@@ -1040,6 +1054,7 @@
down.textContent = '▼';
down.href = ("#" + (i1));
}
+ addTo(span, up, tn(' '), down);
inBefore(el, span);
}
if (location.hash === '#1') {
@@ -1051,9 +1066,10 @@
_ref = omitted;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
span = _ref[_i];
- a = tag('a');
- a.className = 'pointer omittedposts';
- a.textContent = ("+ " + (span.textContent));
+ a = n('a', {
+ className: 'pointer omittedposts',
+ textContent: ("+ " + (span.textContent))
+ });
a.addEventListener('click', expandThread, true);
replace(span, a);
}