From c750b9b62eb5915634542d893e4774073052a93b Mon Sep 17 00:00:00 2001 From: James Campos Date: Sat, 15 Jan 2011 14:45:41 -0800 Subject: [PATCH] update framework --- 4chan_x.coffee | 45 ++++++++++++++++--------------------------- 4chan_x.js | 52 +++++++++++++++++--------------------------------- 2 files changed, 33 insertions(+), 64 deletions(-) diff --git a/4chan_x.coffee b/4chan_x.coffee index 49ac8b695..646d7a4d2 100644 --- a/4chan_x.coffee +++ b/4chan_x.coffee @@ -31,7 +31,7 @@ config = 'Thread Watcher': [true, 'Bookmark threads'] 'Unread Count': [true, 'Show unread post count in tab title'] -#utility +#framework AEOS = init: -> #x-browser @@ -72,9 +72,10 @@ AEOS = } ' #dialog creation - makeDialog: (id, position) -> + makeDialog: (id, position, html) -> dialog = document.createElement 'div' dialog.className = 'reply dialog' + dialog.innerHTML = html dialog.id = id switch position when 'topleft' @@ -93,6 +94,9 @@ AEOS = top = GM_getValue "#{id}Top", top if left then dialog.style.left = left else dialog.style.right = '0px' if top then dialog.style.top = top else dialog.style.bottom = '0px' + + $('div.move', dialog).addEventListener 'mousedown', AEOS.move, true + $('div.move a[name=close]', dialog)?.addEventListener 'click', (-> remove $ id), true dialog #movement move: (e) -> @@ -128,9 +132,11 @@ AEOS = GM_setValue "#{id}Left", div.style.left GM_setValue "#{id}Top", div.style.top +#convenience d = document g = null #globals +#utility $ = (selector, root) -> root or= d.body root.querySelector selector @@ -584,7 +590,6 @@ options = -> remove div return - div = AEOS.makeDialog 'options', 'center' hiddenNum = g.hiddenReplies.length + g.hiddenThreads.length html = '
Options X
' for option, value of config @@ -594,9 +599,9 @@ options = -> html += "
Flavors
" html += "
" html += "
" - div.innerHTML = html - $('div.move', div).addEventListener 'mousedown', AEOS.move, true - $('a[name=close]', div).addEventListener 'click', (-> remove($ '#options')), true + + div = AEOS.makeDialog 'options', 'center', html + for input in $$ 'input[type="checkbox"]', div input.addEventListener 'change', changeCheckbox, true $('a.sauce', div).addEventListener 'click', editSauce, true @@ -630,24 +635,9 @@ qrText = (link) -> quickReply = (link, text) -> unless qr = $ '#qr' - #make quick reply dialog - qr = AEOS.makeDialog 'qr', 'topleft' - titlebar = n 'div', - innerHTML: 'Quick Reply ' - className: 'move' - listener: ['mousedown', AEOS.move] - addTo qr, titlebar - autohideB = n 'input', - type: 'checkbox' - className: 'pointer' - title: 'autohide' - listener: ['click', autohide] - closeB = n 'a', - textContent: 'X' - className: 'pointer' - title: 'close' - listener: ['click', closeQR] - addTo titlebar, autohideB, tn(' '), closeB + html = "
Quick Reply X
" + qr = AEOS.makeDialog 'qr', 'topleft', html + form = $ 'form[name=post]' clone = form.cloneNode true #remove recaptcha scripts @@ -882,14 +872,12 @@ updateNow = -> g.req = request url, updateCallback updaterMake = -> - div = AEOS.makeDialog 'updater', 'topright' html = "
Thread Updater
" html += "
" html += "
" html += "
" - div.innerHTML = html + div = AEOS.makeDialog 'updater', 'topright', html - $('div.move', div).addEventListener 'mousedown', AEOS.move, true auto = $ 'input[name=auto]', div auto.addEventListener 'click', updateAuto, true interval = $ 'input[name=interval]', div @@ -1231,9 +1219,8 @@ if getConfig 'Quick Report' if getConfig 'Thread Watcher' #create watcher - watcher = AEOS.makeDialog 'watcher', 'topleft' watcher.innerHTML = '
Thread Watcher
' - $('div', watcher).addEventListener('mousedown', AEOS.move, true) + watcher = AEOS.makeDialog 'watcher', 'topleft', html addTo d.body, watcher watcherUpdate() diff --git a/4chan_x.js b/4chan_x.js index 3cc0453c5..fa9088a9e 100644 --- a/4chan_x.js +++ b/4chan_x.js @@ -72,10 +72,11 @@ }\ '); }, - makeDialog: function(id, position) { - var dialog, left, top; + makeDialog: function(id, position, html) { + var dialog, left, top, _ref; dialog = document.createElement('div'); dialog.className = 'reply dialog'; + dialog.innerHTML = html; dialog.id = id; switch (position) { case 'topleft': @@ -106,6 +107,12 @@ } else { dialog.style.bottom = '0px'; } + $('div.move', dialog).addEventListener('mousedown', AEOS.move, true); + if ((_ref = $('div.move a[name=close]', dialog)) != null) { + _ref.addEventListener('click', (function() { + return remove($(id)); + }), true); + } return dialog; }, move: function(e) { @@ -749,7 +756,6 @@ remove(div); return; } - div = AEOS.makeDialog('options', 'center'); hiddenNum = g.hiddenReplies.length + g.hiddenThreads.length; html = '
Options X
'; for (option in config) { @@ -761,11 +767,7 @@ html += "
Flavors
"; html += "
"; html += "
"; - div.innerHTML = html; - $('div.move', div).addEventListener('mousedown', AEOS.move, true); - $('a[name=close]', div).addEventListener('click', (function() { - return remove($('#options')); - }), true); + div = AEOS.makeDialog('options', 'center', html); _ref = $$('input[type="checkbox"]', div); for (_i = 0, _len = _ref.length; _i < _len; _i++) { input = _ref[_i]; @@ -803,28 +805,10 @@ return text; }; quickReply = function(link, text) { - var auto, autoBox, autohideB, clone, closeB, form, input, qr, script, submit, textarea, titlebar, xpath, _i, _len, _ref, _ref2; + var auto, autoBox, clone, form, html, input, qr, script, submit, textarea, xpath, _i, _len, _ref, _ref2; if (!(qr = $('#qr'))) { - qr = AEOS.makeDialog('qr', 'topleft'); - titlebar = n('div', { - innerHTML: 'Quick Reply ', - className: 'move', - listener: ['mousedown', AEOS.move] - }); - addTo(qr, titlebar); - autohideB = n('input', { - type: 'checkbox', - className: 'pointer', - title: 'autohide', - listener: ['click', autohide] - }); - closeB = n('a', { - textContent: 'X', - className: 'pointer', - title: 'close', - listener: ['click', closeQR] - }); - addTo(titlebar, autohideB, tn(' '), closeB); + html = "
Quick Reply X
"; + qr = AEOS.makeDialog('qr', 'topleft', html); form = $('form[name=post]'); clone = form.cloneNode(true); _ref = $$('script', clone); @@ -1119,13 +1103,11 @@ }; updaterMake = function() { var auto, div, html, interval; - div = AEOS.makeDialog('updater', 'topright'); html = "
Thread Updater
"; html += "
"; html += "
"; html += "
"; - div.innerHTML = html; - $('div.move', div).addEventListener('mousedown', AEOS.move, true); + div = AEOS.makeDialog('updater', 'topright', html); auto = $('input[name=auto]', div); auto.addEventListener('click', updateAuto, true); interval = $('input[name=interval]', div); @@ -1397,7 +1379,8 @@ if (getConfig('Image Expansion')) { delform = $('form[name=delform]'); expand = n('div', { - innerHTML: "" + innerHTML: '\ + ' }); $("input", expand).addEventListener('click', imageExpandClick, true); inBefore(delform.firstChild, expand); @@ -1540,9 +1523,8 @@ }); } if (getConfig('Thread Watcher')) { - watcher = AEOS.makeDialog('watcher', 'topleft'); watcher.innerHTML = '
Thread Watcher
'; - $('div', watcher).addEventListener('mousedown', AEOS.move, true); + watcher = AEOS.makeDialog('watcher', 'topleft', html); addTo(d.body, watcher); watcherUpdate(); threads = g.watched[g.BOARD] || [];