diff --git a/4chan_x.js b/4chan_x.js index 048b2fc88..109bc2de1 100644 --- a/4chan_x.js +++ b/4chan_x.js @@ -60,7 +60,7 @@ (function() { var $, $$, Favicon, NAMESPACE, Recaptcha, anonymize, config, d, expandComment, expandThread, g, imageHover, imgExpand, imgGif, imgPreloading, keybinds, localize, log, main, nav, nodeInserted, options, qr, quickReport, redirect, replyHiding, sauce, threadHiding, threading, titlePost, ui, unread, updater, watcher, _config, _ref; var __slice = Array.prototype.slice; - if (typeof console !== "undefined" && console !== null) { + if (typeof console != "undefined" && console !== null) { log = function(arg) { return console.log(arg); }; @@ -179,6 +179,7 @@ move: function(e) { var el, rect; ui.el = el = e.target.parentNode; + document.body.className = 'noselect'; rect = el.getBoundingClientRect(); ui.dx = e.clientX - rect.left; ui.dy = e.clientY - rect.top; @@ -216,7 +217,8 @@ el = ui.el; id = el.id; localStorage["" + id + "Left"] = el.style.left; - return localStorage["" + id + "Top"] = el.style.top; + localStorage["" + id + "Top"] = el.style.top; + return document.body.className = ''; } }; d = document; @@ -1141,8 +1143,8 @@ in the global context. */ return $.globalEval(function() { - var data, _ref3; - data = ((_ref3 = document.querySelector('table font b')) != null ? _ref3.firstChild.textContent : void 0) || ''; + var data, _ref; + data = ((_ref = document.querySelector('table font b')) != null ? _ref.firstChild.textContent : void 0) || ''; return parent.postMessage(data, '*'); }); } @@ -1543,17 +1545,17 @@ span = _ref[_i]; suffix = $('a', span).href; _results.push((function() { - var _len2, _results2; - _results2 = []; - for (i = 0, _len2 = prefixes.length; i < _len2; i++) { + var _len, _results; + _results = []; + for (i = 0, _len = prefixes.length; i < _len; i++) { prefix = prefixes[i]; link = $.el('a', { textContent: names[i], href: prefix + suffix }); - _results2.push($.append(span, $.tn(' '), link)); + _results.push($.append(span, $.tn(' '), link)); } - return _results2; + return _results; })()); } return _results; @@ -1739,10 +1741,10 @@ }; Recaptcha = { init: function() { - var el, recaptcha, _i, _len, _ref2; - _ref2 = $$('#recaptcha_table a'); - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - el = _ref2[_i]; + var el, recaptcha, _i, _len, _ref; + _ref = $$('#recaptcha_table a'); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + el = _ref[_i]; el.tabIndex = 1; } recaptcha = $('#recaptcha_response_field'); @@ -1758,13 +1760,13 @@ } }; nodeInserted = function(e) { - var callback, dialog, target, _i, _len, _ref2, _results; + var callback, dialog, target, _i, _len, _ref, _results; target = e.target; if (target.nodeName === 'TABLE') { - _ref2 = g.callbacks; + _ref = g.callbacks; _results = []; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - callback = _ref2[_i]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + callback = _ref[_i]; _results.push(callback(target)); } return _results; @@ -1869,11 +1871,11 @@ }, cb: { node: function(root) { - var thumb, _i, _len, _ref2, _results; - _ref2 = $$('img[md5]', root); + var thumb, _i, _len, _ref, _results; + _ref = $$('img[md5]', root); _results = []; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - thumb = _ref2[_i]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + thumb = _ref[_i]; $.bind(thumb.parentNode, 'click', imgExpand.cb.toggle); _results.push(imgExpand.on ? imgExpand.toggle(thumb) : void 0); } @@ -1908,12 +1910,12 @@ } }, typeChange: function(e) { - var img, _i, _len, _ref2, _results; + var img, _i, _len, _ref, _results; imgExpand.foo(); - _ref2 = $$('img[md5] + img'); + _ref = $$('img[md5] + img'); _results = []; - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - img = _ref2[_i]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + img = _ref[_i]; _results.push(imgExpand.resize(img)); } return _results; @@ -1944,21 +1946,21 @@ return imgExpand.resize(img); }, foo: function() { - var borderLeftWidth, borderRightWidth, crap, formWidth, left, paddingLeft, paddingRight, table, td, _ref2; + var borderLeftWidth, borderRightWidth, crap, formWidth, left, paddingLeft, paddingRight, table, td, _ref; formWidth = $('form[name=delform]').getBoundingClientRect().width; td = $('td.reply'); table = td.parentNode.parentNode.parentNode; left = td.getBoundingClientRect().left - table.getBoundingClientRect().left; - _ref2 = getComputedStyle(td), paddingLeft = _ref2.paddingLeft, paddingRight = _ref2.paddingRight, borderLeftWidth = _ref2.borderLeftWidth, borderRightWidth = _ref2.borderRightWidth; + _ref = getComputedStyle(td), paddingLeft = _ref.paddingLeft, paddingRight = _ref.paddingRight, borderLeftWidth = _ref.borderLeftWidth, borderRightWidth = _ref.borderRightWidth; crap = parseInt(paddingLeft) + parseInt(paddingRight) + parseInt(borderLeftWidth) + parseInt(borderRightWidth); imgExpand.maxWidth = formWidth - left - crap; imgExpand.maxHeight = d.body.clientHeight; return imgExpand.type = $('#imageType').value; }, resize: function(img) { - var imgHeight, imgWidth, maxHeight, maxWidth, ratio, type, _, _ref2; + var imgHeight, imgWidth, maxHeight, maxWidth, ratio, type, _, _ref; maxWidth = imgExpand.maxWidth, maxHeight = imgExpand.maxHeight, type = imgExpand.type; - _ref2 = $.x("preceding::span[@class][1]/text()[2]", img).textContent.match(/(\d+)x(\d+)/), _ = _ref2[0], imgWidth = _ref2[1], imgHeight = _ref2[2]; + _ref = $.x("preceding::span[@class][1]/text()[2]", img).textContent.match(/(\d+)x(\d+)/), _ = _ref[0], imgWidth = _ref[1], imgHeight = _ref[2]; imgWidth = Number(imgWidth); imgHeight = Number(imgHeight); switch (type) { @@ -1977,15 +1979,15 @@ } }, dialog: function() { - var controls, delform, imageType, option, _i, _len, _ref2; + var controls, delform, imageType, option, _i, _len, _ref; controls = $.el('div', { id: 'imgControls', innerHTML: " " }); imageType = $.getValue('imageType', 'full'); - _ref2 = $$('option', controls); - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - option = _ref2[_i]; + _ref = $$('option', controls); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; if (option.textContent === imageType) { option.selected = true; break; @@ -2006,7 +2008,7 @@ }; main = { init: function() { - var DAY, callback, cutoff, hiddenThreads, id, lastChecked, navtopr, now, pathname, temp, timestamp, tzOffset, _i, _len, _ref2, _ref3; + var DAY, callback, cutoff, hiddenThreads, id, lastChecked, navtopr, now, pathname, temp, timestamp, tzOffset, _i, _len, _ref, _ref2; Favicon.halo = /ws/.test(Favicon["default"]) ? Favicon.haloSFW : Favicon.haloNSFW; pathname = location.pathname.substring(1).split('/'); g.BOARD = pathname[0], temp = pathname[1]; @@ -2034,9 +2036,9 @@ delete hiddenThreads[id]; } } - _ref2 = g.hiddenReplies; - for (id in _ref2) { - timestamp = _ref2[id]; + _ref = g.hiddenReplies; + for (id in _ref) { + timestamp = _ref[id]; if (timestamp < cutoff) { delete g.hiddenReplies[id]; } @@ -2126,9 +2128,9 @@ expandComment.init(); } } - _ref3 = g.callbacks; - for (_i = 0, _len = _ref3.length; _i < _len; _i++) { - callback = _ref3[_i]; + _ref2 = g.callbacks; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + callback = _ref2[_i]; callback(); } return $.bind(d.body, 'DOMNodeInserted', nodeInserted); @@ -2200,6 +2202,7 @@ text-align: right;\ }\ #qr > form > div, /* ad */\ + #qr #recaptcha_table td:nth-of-type(3), /* captcha logos */\ #qr td.rules {\ display: none;\ }\ @@ -2230,12 +2233,24 @@ #watcher {\ position: absolute;\ }\ + #watcher > div {\ + padding-right: 5px;\ + padding-left: 5px;\ + }\ #watcher > div.move {\ text-decoration: underline;\ - padding: 5px 5px 0 5px;\ + padding-top: 5px;\ }\ #watcher > div:last-child {\ - padding: 0 5px 5px 5px;\ + padding-bottom: 5px;\ + }\ +\ + body.noselect {\ + -webkit-user-select: none;\ + -khtml-user-select: none;\ + -moz-user-select: none;\ + -o-user-select: none;\ + user-select: none;\ }\ ' }; diff --git a/script.coffee b/script.coffee index 7572257ed..38dc97490 100644 --- a/script.coffee +++ b/script.coffee @@ -98,6 +98,7 @@ ui = el move: (e) -> ui.el = el = e.target.parentNode + document.body.className = 'noselect' #distance from pointer to el edge is constant; calculate it here. # XXX opera reports el.offsetLeft / el.offsetTop as 0 rect = el.getBoundingClientRect() @@ -129,6 +130,7 @@ ui = {id} = el localStorage["#{id}Left"] = el.style.left localStorage["#{id}Top"] = el.style.top + document.body.className = '' #convenience d = document @@ -1720,6 +1722,7 @@ main = text-align: right; } #qr > form > div, /* ad */ + #qr #recaptcha_table td:nth-of-type(3), /* captcha logos */ #qr td.rules { display: none; } @@ -1750,12 +1753,24 @@ main = #watcher { position: absolute; } + #watcher > div { + padding-right: 5px; + padding-left: 5px; + } #watcher > div.move { text-decoration: underline; - padding: 5px 5px 0 5px; + padding-top: 5px; } #watcher > div:last-child { - padding: 0 5px 5px 5px; + padding-bottom: 5px; + } + + body.noselect { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; } '