diff --git a/4chan_x.js b/4chan_x.js index a401cdb0d..e12f27da2 100644 --- a/4chan_x.js +++ b/4chan_x.js @@ -56,14 +56,18 @@ */ (function() { - var $, $$, DAY, Dialog, a, arr, as, autoWatch, autohide, b, board, callback, changeCheckbox, changeValue, clearHidden, closeQR, config, cooldown, cutoff, d, delform, down, editSauce, el, expand, expandComment, expandThread, formSubmit, g, getConfig, getThread, getTime, hide, hideReply, hideThread, href, html, i, id, iframe, iframeLoad, imageClick, imageExpand, imageExpandClick, imageResize, imageThumb, imageToggle, imageType, imageTypeChange, img, inAfter, inBefore, input, inputs, keyModeInsert, keyModeNormal, keydown, keypress, l1, lastChecked, m, mv, n, navbotr, navtopr, nodeInserted, now, omitted, onloadComment, onloadThread, option, options, parseResponse, pathname, qrListener, qrText, quickReply, recaptcha, recaptchaListener, recaptchaReload, redirect, replace, replyNav, report, request, rm, scroll, scrollThread, show, showReply, showThread, slice, span, src, start, stopPropagation, temp, text, textContent, thread, threadF, threads, tn, tzOffset, up, updateAuto, updateCallback, updateFavicon, updateInterval, updateNow, updateTime, updateTitle, updateVerbose, updaterMake, watch, watchX, watcher, watcherUpdate, x, zeroPad, _, _base, _i, _j, _k, _l, _len, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _ref, _ref2, _ref3, _ref4, _ref5, _ref6; + var $, $$, DAY, Dialog, a, arr, as, autoWatch, autohide, b, board, callback, changeCheckbox, changeValue, clearHidden, closeQR, config, cooldown, cutoff, d, delform, down, editSauce, el, expand, expandComment, expandThread, formSubmit, g, getConfig, getThread, getTime, hide, hideReply, hideThread, href, html, i, id, iframe, iframeLoad, imageClick, imageExpand, imageExpandClick, imageResize, imageThumb, imageToggle, imageType, imageTypeChange, img, inAfter, inBefore, input, inputs, keyModeInsert, keyModeNormal, keydown, keypress, l1, lastChecked, log, m, mv, n, navbotr, navtopr, nodeInserted, now, omitted, onloadComment, onloadThread, option, options, parseResponse, pathname, qrListener, qrText, quickReply, recaptcha, recaptchaListener, recaptchaReload, redirect, replace, replyNav, report, request, rm, scroll, scrollThread, show, showReply, showThread, slice, span, src, start, stopPropagation, temp, text, textContent, thread, threadF, threads, tn, tzOffset, up, updateAuto, updateCallback, updateFavicon, updateInterval, updateNow, updateTime, updateTitle, updateVerbose, updaterMake, watch, watchX, watcher, watcherUpdate, x, zeroPad, _, _base, _i, _j, _k, _l, _len, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _ref, _ref2, _ref3, _ref4, _ref5, _ref6; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __slice = Array.prototype.slice; + if (typeof console != "undefined" && console !== null) { + log = console.log; + } config = { '404 Redirect': [true, 'Redirect dead threads'], 'Anonymize': [false, 'Make everybody anonymous'], 'Auto Watch': [true, 'Automatically watch threads that you start (Firefox only)'], 'Comment Expansion': [true, 'Expand too long comments'], 'Image Expansion': [true, 'Expand images'], + 'Image Preloading': [false, 'Preload Images'], 'Keybinds': [false, 'Binds actions to keys'], 'Localize Time': [true, 'Show times based on your timezone'], 'Persistent QR': [false, 'Quick reply won\'t disappear after posting. Only in replies.'], @@ -1579,6 +1583,21 @@ return _results; }); } + if (getConfig('Image Preloading')) { + g.callbacks.push(function(root) { + var parent, thumb, thumbs, _i, _len, _results; + thumbs = $$('img[md5]', root); + _results = []; + for (_i = 0, _len = thumbs.length; _i < _len; _i++) { + thumb = thumbs[_i]; + parent = thumb.parentNode; + _results.push(el = n('img', { + src: parent.href + })); + } + return _results; + }); + } if (getConfig('Localize Time')) { g.callbacks.push(function(root) { var date, day, dotw, hour, min_sec, month, s, span, spans, year, _i, _len, _ref, _results; diff --git a/script.coffee b/script.coffee index 76febc409..a40e96ee9 100644 --- a/script.coffee +++ b/script.coffee @@ -1,3 +1,4 @@ +{log} = console if console? #todo: remove close()?, make hiddenReplies/hiddenThreads local, comments, gc #todo: remove stupid 'obj', arr el, make hidden an object, smarter xhr, text(), @this, images, clear hidden #todo: watch - add board in updateWatcher?, redundant move divs?, redo css / hiding, manual clear @@ -7,28 +8,29 @@ #TODO - expose 'hidden' configs config = - '404 Redirect': [true, 'Redirect dead threads'] + '404 Redirect': [true, 'Redirect dead threads'] 'Anonymize': [false, 'Make everybody anonymous'] - 'Auto Watch': [true, 'Automatically watch threads that you start (Firefox only)'] - 'Comment Expansion': [true, 'Expand too long comments'] - 'Image Expansion': [true, 'Expand images'] + 'Auto Watch': [true, 'Automatically watch threads that you start (Firefox only)'] + 'Comment Expansion': [true, 'Expand too long comments'] + 'Image Expansion': [true, 'Expand images'] + 'Image Preloading': [false, 'Preload Images'] 'Keybinds': [false, 'Binds actions to keys'] - 'Localize Time': [true, 'Show times based on your timezone'] + 'Localize Time': [true, 'Show times based on your timezone'] 'Persistent QR': [false, 'Quick reply won\'t disappear after posting. Only in replies.'] - 'Post in Title': [true, 'Show the op\'s post in the tab title'] - 'Quick Reply': [true, 'Reply without leaving the page'] - 'Quick Report': [true, 'Add quick report buttons'] - 'Reply Hiding': [true, 'Hide single replies'] - 'Reply Navigation': [true, 'Navigate to the beginning / end of a thread'] - 'Restore IDs': [true, 'Check \'em'] - 'Sauce': [true, 'Add sauce to images'] - 'Show Stubs': [true, 'Of hidden threads / replies'] - 'Thread Expansion': [true, 'View all replies'] - 'Thread Hiding': [true, 'Hide entire threads'] - 'Thread Navigation': [true, 'Navigate to previous / next thread'] - 'Thread Updater': [true, 'Update threads'] - 'Thread Watcher': [true, 'Bookmark threads'] - 'Unread Count': [true, 'Show unread post count in tab title'] + 'Post in Title': [true, 'Show the op\'s post in the tab title'] + 'Quick Reply': [true, 'Reply without leaving the page'] + 'Quick Report': [true, 'Add quick report buttons'] + 'Reply Hiding': [true, 'Hide single replies'] + 'Reply Navigation': [true, 'Navigate to the beginning / end of a thread'] + 'Restore IDs': [true, 'Check \'em'] + 'Sauce': [true, 'Add sauce to images'] + 'Show Stubs': [true, 'Of hidden threads / replies'] + 'Thread Expansion': [true, 'View all replies'] + 'Thread Hiding': [true, 'Hide entire threads'] + 'Thread Navigation': [true, 'Navigate to previous / next thread'] + 'Thread Updater': [true, 'Update threads'] + 'Thread Watcher': [true, 'Bookmark threads'] + 'Unread Count': [true, 'Show unread post count in tab title'] #x-browser if typeof GM_deleteValue is 'undefined' @@ -1206,6 +1208,13 @@ if getConfig 'Image Expansion' thumb.parentNode.addEventListener 'click', imageClick, true if g.expand then imageToggle thumb.parentNode +if getConfig 'Image Preloading' + g.callbacks.push (root) -> + thumbs = $$ 'img[md5]', root + for thumb in thumbs + parent = thumb.parentNode + el = n 'img', src: parent.href + if getConfig 'Localize Time' g.callbacks.push (root) -> spans = $$ 'span[id^=no]', root