diff --git a/4chan_x.user.js b/4chan_x.user.js index 653c3f9c6..7dde9710a 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -199,24 +199,12 @@ }; ui = { dialog: function(id, position, html) { - var el, left, top, _ref, _ref2; + var el, saved; el = d.createElement('div'); el.className = 'reply dialog'; el.innerHTML = html; el.id = id; - left = position.left, top = position.top; - left = (_ref = localStorage["" + NAMESPACE + id + "Left"]) != null ? _ref : left; - top = (_ref2 = localStorage["" + NAMESPACE + id + "Top"]) != null ? _ref2 : top; - if (left) { - el.style.left = left; - } else { - el.style.right = 0; - } - if (top) { - el.style.top = top; - } else { - el.style.bottom = 0; - } + el.style.cssText = (saved = localStorage["" + NAMESPACE + id + ".position"]) ? saved : position; el.querySelector('div.move').addEventListener('mousedown', ui.dragstart, false); return el; }, @@ -259,8 +247,7 @@ var el, id; el = ui.el; id = el.id; - localStorage["" + NAMESPACE + id + "Left"] = el.style.left; - localStorage["" + NAMESPACE + id + "Top"] = el.style.top; + localStorage["" + NAMESPACE + id + ".position"] = el.style.cssText; d.removeEventListener('mousemove', ui.drag, false); return d.removeEventListener('mouseup', ui.dragend, false); }, @@ -652,7 +639,7 @@ } }, parse: function(req, pathname, thread, a) { - var body, br, link, next, quote, reply, table, tables, _i, _j, _k, _len, _len2, _len3, _ref, _ref2, _results; + var body, br, href, link, next, quote, reply, table, tables, _i, _j, _k, _len, _len2, _len3, _ref, _ref2, _results; if (req.status !== 200) { a.textContent = "" + req.status + " " + req.statusText; $.unbind(a, 'click', expandThread.cb.toggle); @@ -672,8 +659,10 @@ _ref2 = $$('a.quotelink', reply); for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) { quote = _ref2[_j]; - if (quote.getAttribute('href') === quote.hash) { + if ((href = quote.getAttribute('href')) === quote.hash) { quote.pathname = pathname; + } else if (href !== quote.href) { + quote.href = "res/" + href; } } link = $('a.quotejs', reply); @@ -1360,10 +1349,7 @@ THREAD_ID = g.THREAD_ID || $.x('ancestor::div[@class="thread"]/div', link).id; qr.challenge = $('#recaptcha_challenge_field').value; html = " X
Quick Reply
" + qr.spoiler + "
" + ($.get('captchas', []).length) + " captchas
attach another file
"; - qr.el = ui.dialog('qr', { - top: '0px', - left: '0px' - }, html); + qr.el = ui.dialog('qr', 'top: 0; left: 0;', html); $.bind($('input[name=name]', qr.el), 'mousedown', function(e) { return e.stopPropagation(); }); @@ -1741,11 +1727,8 @@ html += "
"; } checked = conf['Auto Update'] ? 'checked' : ''; - html += "
"; - dialog = ui.dialog('updater', { - bottom: '0', - right: '0' - }, html); + html += "
"; + dialog = ui.dialog('updater', 'bottom: 0; right: 0;', html); updater.count = $('#count', dialog); updater.timer = $('#timer', dialog); updater.br = $('br[clear]'); @@ -1873,10 +1856,7 @@ init: function() { var favicon, html, input, inputs, _i, _len; html = '
Thread Watcher
'; - watcher.dialog = ui.dialog('watcher', { - top: '50px', - left: '0px' - }, html); + watcher.dialog = ui.dialog('watcher', 'top: 50px; left: 0px;', html); $.add(d.body, watcher.dialog); inputs = $$('.op input'); for (_i = 0, _len = inputs.length; _i < _len; _i++) { @@ -2290,7 +2270,7 @@ return $.addClass(this, 'inlined'); }, parse: function(req, pathname, id, threadID, inline) { - var body, html, link, newInline, op, quote, reply, _i, _j, _len, _len2, _ref, _ref2; + var body, href, html, link, newInline, op, quote, reply, _i, _j, _len, _len2, _ref, _ref2; if (!inline.parentNode) { return; } @@ -2318,8 +2298,10 @@ _ref2 = $$('a.quotelink', newInline); for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) { quote = _ref2[_j]; - if (quote.getAttribute('href') === quote.hash) { + if ((href = quote.getAttribute('href')) === quote.hash) { quote.pathname = pathname; + } else if (!g.REPLY && href !== quote.href) { + quote.href = "res/" + href; } } link = $('a.quotejs', newInline); @@ -2470,10 +2452,7 @@ threadStats.posts = 1; threadStats.images = $('.op img[md5]') ? 1 : 0; html = "
" + threadStats.posts + " / " + threadStats.images + "
"; - dialog = ui.dialog('stats', { - bottom: '0px', - left: '0px' - }, html); + dialog = ui.dialog('stats', 'bottom: 0; left: 0;', html); dialog.className = 'dialog'; threadStats.postcountEl = $('#postcount', dialog); threadStats.imagecountEl = $('#imagecount', dialog); @@ -3216,7 +3195,7 @@ border: 1px solid;\ padding-bottom: 5px;\ }\ - #qp input {\ + #qp input, #qp .inline {\ display: none;\ }\ .qphl {\ diff --git a/changelog b/changelog index 8b80cbe0a..dc615e9b2 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,7 @@ master +- mayhem + do not display inlined quotes within the quote preview + fix cross threads quotes in expanded threads or inlined cross quotes 2.19.3 - mayhem diff --git a/script.coffee b/script.coffee index 955e18995..3e97e83f3 100644 --- a/script.coffee +++ b/script.coffee @@ -126,11 +126,7 @@ ui = el.className = 'reply dialog' el.innerHTML = html el.id = id - {left, top} = position - left = localStorage["#{NAMESPACE}#{id}Left"] ? left - top = localStorage["#{NAMESPACE}#{id}Top"] ? top - if left then el.style.left = left else el.style.right = 0 - if top then el.style.top = top else el.style.bottom = 0 + el.style.cssText = if saved = localStorage["#{NAMESPACE}#{id}.position"] then saved else position el.querySelector('div.move').addEventListener 'mousedown', ui.dragstart, false el dragstart: (e) -> @@ -170,8 +166,7 @@ ui = #a = (b = c.b, c).a; {el} = ui {id} = el - localStorage["#{NAMESPACE}#{id}Left"] = el.style.left - localStorage["#{NAMESPACE}#{id}Top"] = el.style.top + localStorage["#{NAMESPACE}#{id}.position"] = el.style.cssText d.removeEventListener 'mousemove', ui.drag, false d.removeEventListener 'mouseup', ui.dragend, false hover: (e) -> @@ -476,8 +471,10 @@ expandThread = for reply in $$ 'td[id]', body for quote in $$ 'a.quotelink', reply - if quote.getAttribute('href') is quote.hash + if (href = quote.getAttribute('href')) is quote.hash #add pathname to normal quotes quote.pathname = pathname + else if href isnt quote.href #fix x-thread links, not x-board ones + quote.href = "res/#{href}" link = $ 'a.quotejs', reply link.href = "res/#{thread.firstChild.id}##{reply.id}" link.nextSibling.href = "res/#{thread.firstChild.id}#q#{reply.id}" @@ -1071,7 +1068,7 @@ qr = " - qr.el = ui.dialog 'qr', top: '0px', left: '0px', html + qr.el = ui.dialog 'qr', 'top: 0; left: 0;', html $.bind $('input[name=name]', qr.el), 'mousedown', (e) -> e.stopPropagation() $.bind $('input[name=upfile]', qr.el), 'change', qr.validateFileSize @@ -1388,11 +1385,11 @@ updater = checked = if conf['Auto Update'] then 'checked' else '' html += " -
+
" - dialog = ui.dialog 'updater', bottom: '0', right: '0', html + dialog = ui.dialog 'updater', 'bottom: 0; right: 0;', html updater.count = $ '#count', dialog updater.timer = $ '#timer', dialog @@ -1500,7 +1497,7 @@ updater = watcher = init: -> html = '
Thread Watcher
' - watcher.dialog = ui.dialog 'watcher', top: '50px', left: '0px', html + watcher.dialog = ui.dialog 'watcher', 'top: 50px; left: 0px;', html $.add d.body, watcher.dialog #add watch buttons @@ -1787,8 +1784,10 @@ quoteInline = break newInline = quoteInline.table id, html for quote in $$ 'a.quotelink', newInline - if quote.getAttribute('href') is quote.hash + if (href = quote.getAttribute('href')) is quote.hash #add pathname to normal quotes quote.pathname = pathname + else if !g.REPLY and href isnt quote.href #fix x-thread links, not x-board ones + quote.href = "res/#{href}" link = $ 'a.quotejs', newInline link.href = "#{pathname}##{id}" link.nextSibling.href = "#{pathname}#q#{id}" @@ -1882,7 +1881,7 @@ threadStats = threadStats.posts = 1 threadStats.images = if $ '.op img[md5]' then 1 else 0 html = "
#{threadStats.posts} / #{threadStats.images}
" - dialog = ui.dialog 'stats', bottom: '0px', left: '0px', html + dialog = ui.dialog 'stats', 'bottom: 0; left: 0;', html dialog.className = 'dialog' threadStats.postcountEl = $ '#postcount', dialog threadStats.imagecountEl = $ '#imagecount', dialog @@ -2544,7 +2543,7 @@ Main = border: 1px solid; padding-bottom: 5px; } - #qp input { + #qp input, #qp .inline { display: none; } .qphl {