From a973654502024756077816c1793dc2d03adad62e Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Tue, 16 Apr 2013 14:29:18 -0700 Subject: [PATCH] Oops. --- builds/4chan-X.js | 9246 ------------------------------------- builds/4chan-X.meta.js | 21 - builds/4chan-X.user.js | 9265 -------------------------------------- builds/appchan-x.js | 11 +- builds/appchan-x.user.js | 11 +- builds/appchan-x.zip | Bin 185852 -> 185759 bytes builds/crx.crx | Bin 155376 -> 155277 bytes builds/crx/script.js | 7 +- src/appchan.coffee | 4 +- src/features.coffee | 4 +- 10 files changed, 17 insertions(+), 18552 deletions(-) delete mode 100644 builds/4chan-X.js delete mode 100644 builds/4chan-X.meta.js delete mode 100644 builds/4chan-X.user.js diff --git a/builds/4chan-X.js b/builds/4chan-X.js deleted file mode 100644 index 9d93b4415..000000000 --- a/builds/4chan-X.js +++ /dev/null @@ -1,9246 +0,0 @@ -// ==UserScript== -// @name 4chan X -// @version 3.1.3 -// @namespace 4chan-X -// @description Cross-browser extension for productive lurking on 4chan. -// @copyright 2009-2011 James Campos -// @copyright 2012-2013 Nicolas Stepien -// @license MIT; http://en.wikipedia.org/wiki/Mit_license -// @match *://api.4chan.org/* -// @match *://boards.4chan.org/* -// @match *://images.4chan.org/* -// @match *://sys.4chan.org/* -// @grant GM_getValue -// @grant GM_setValue -// @grant GM_deleteValue -// @grant GM_openInTab -// @run-at document-start -// @updateURL https://4chan-x.just-believe.in/builds/4chan-X.meta.js -// @downloadURL https://4chan-x.just-believe.in/builds/4chan-X.user.js -// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC -// ==/UserScript== - -/* 4chan X - Version 3.1.3 - 2013-04-16 - * https://4chan-x.just-believe.in/ - * - * Copyright (c) 2009-2011 James Campos - * Copyright (c) 2012-2013 Nicolas Stepien - * Licensed under the MIT license. - * https://github.com/MayhemYDG/4chan-x/blob/master/LICENSE - * - * Contributors: - * https://github.com/MayhemYDG/4chan-x/graphs/contributors - * Non-GitHub contributors: - * ferongr, xat-, Ongpot, thisisanon and Anonymous - favicon contributions - * e000 - cooldown sanity check - * Seiba - chrome quick reply focusing - * herpaderpderp - recaptcha fixes - * WakiMiko - recaptcha tab order http://userscripts.org/scripts/show/82657 - * - * All the people who've taken the time to write bug reports. - * - * Thank you. - */ - -(function() { - var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, Fourchan, Get, Header, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, - __slice = [].slice, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - Config = { - main: { - 'Miscellaneous': { - 'Catalog Links': [true, 'Turn Navigation links into links to each board\'s catalog.'], - 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], - 'Enable 4chan\'s Extension': [false, 'Compatibility between 4chan X and 4chan\'s inline extension is NOT guaranteed.'], - 'Fixed Header': [false, 'Mayhem X\'s Fixed Header (kinda).'], - 'Custom Board Navigation': [true, 'Show custom links instead of the full board list.'], - 'Announcement Hiding': [true, 'Add button to hide 4chan announcements.'], - '404 Redirect': [true, 'Redirect dead threads and images.'], - 'Keybinds': [true, 'Bind actions to keyboard shortcuts.'], - 'Time Formatting': [true, 'Localize and format timestamps.'], - 'Relative Post Dates': [false, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'], - 'File Info Formatting': [true, 'Reformat the file information.'], - 'Comment Expansion': [true, 'Add buttons to expand long comments.'], - 'Thread Expansion': [true, 'Add buttons to expand threads.'], - 'Index Navigation': [false, 'Add buttons to navigate between threads.'], - 'Reply Navigation': [false, 'Add buttons to navigate to top / bottom of thread.'], - 'Check for Updates': [true, 'Check for updated versions of 4chan X.'] - }, - 'Linkification': { - 'Linkify': [true, 'Convert text into links where applicable.'], - 'Embedding': [true, 'Embed supported services.'], - 'Auto-embed': [false, 'Auto-embed Linkify Embeds.'], - 'Link Title': [true, 'Replace the link of a supported site with its actual title. Currently Supported: YouTube, Vimeo, SoundCloud'] - }, - 'Filtering': { - 'Anonymize': [false, 'Make everyone Anonymous.'], - 'Filter': [true, 'Self-moderation placebo.'], - 'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'], - 'Thread Hiding': [true, 'Add buttons to hide entire threads.'], - 'Reply Hiding': [true, 'Add buttons to hide single replies.'], - 'Hiding Buttons': [true, 'Add buttons to hide threads / replies, in addition to menu links.'], - 'Stubs': [true, 'Show stubs of hidden threads / replies.'] - }, - 'Images': { - 'Image Expansion': [true, 'Expand images.'], - 'Image Hover': [false, 'Show full image on mouseover.'], - 'Sauce': [true, 'Add sauce links to images.'], - 'Reveal Spoilers': [false, 'Reveal spoiler thumbnails.'], - 'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'], - 'Replace PNG': [false, 'Replace pngs.'], - 'Replace JPG': [false, 'Replace jpgs.'] - }, - 'Menu': { - 'Menu': [true, 'Add a drop-down menu to posts.'], - 'Thread Hiding Link': [true, 'Add a link to hide entire threads.'], - 'Reply Hiding Link': [true, 'Add a link to hide single replies.'], - 'Report Link': [true, 'Add a report link to the menu.'], - 'Delete Link': [true, 'Add post and image deletion links to the menu.'], - 'Download Link': [true, 'Add a download with original filename link to the menu. Chrome-only currently.'], - 'Archive Link': [true, 'Add an archive link to the menu.'] - }, - 'Monitoring': { - 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'], - 'Unread Count': [true, 'Show the unread posts count in the tab title.'], - 'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.'], - 'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.'], - 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'], - 'Thread Stats': [true, 'Display reply and image count.'], - 'Thread Watcher': [true, 'Bookmark threads.'], - 'Auto Watch': [true, 'Automatically watch threads you start.'], - 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'] - }, - 'Posting': { - 'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'], - 'Persistent QR': [false, 'The Quick reply won\'t disappear after posting.'], - 'Auto Hide QR': [false, 'Automatically hide the quick reply when posting.'], - 'Open Post in New Tab': [true, 'Open new threads or replies to a thread from the index in a new tab.'], - 'Remember Subject': [false, 'Remember the subject field, instead of resetting after posting.'], - 'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.'], - 'Hide Original Post Form': [true, 'Hide the normal post form.'], - 'Cooldown': [true, 'Prevent "flood detected" errors.'] - }, - 'Quote Links': { - 'Quote Backlinks': [true, 'Add quote backlinks.'], - 'OP Backlinks': [true, 'Add backlinks to the OP.'], - 'Quote Inlining': [true, 'Inline quoted post on click.'], - 'Forward Hiding': [true, 'Hide original posts of inlined backlinks.'], - 'Quote Previewing': [true, 'Show quoted post on hover.'], - 'Quote Highlighting': [true, 'Highlight the previewed post.'], - 'Resurrect Quotes': [true, 'Link dead quotes to the archives.'], - 'Mark Quotes of You': [true, 'Add \'(You)\' to quotes linking to your posts.'], - 'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'], - 'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'] - } - }, - imageExpansion: { - 'Fit width': [true, ''], - 'Fit height': [false, ''], - 'Expand spoilers': [true, 'Expand all images along with spoilers.'], - 'Expand from here': [true, 'Expand all images only from current position to thread end.'] - }, - filter: { - name: "# Filter any namefags:\n#/^(?!Anonymous$)/", - uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/", - tripcode: "# Filter any tripfag\n#/^!/", - capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes", - email: "# Filter any e-mails that are not `sage` on /a/ and /jp/:\n#/^(?!sage$)/;boards:a,jp", - subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only", - comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g", - flag: '', - filename: '', - dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg", - filesize: '', - MD5: '' - }, - sauces: "https://www.google.com/searchbyimage?image_url=%TURL\nhttp://iqdb.org/?url=%TURL\n#//tineye.com/search?url=%TURL\n#http://saucenao.com/search.php?url=%TURL\n#http://3d.iqdb.org/?url=%TURL\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#http://imgur.com/upload?url=%URL;text:Upload to imgur\n#http://ompldr.org/upload?url1=%URL;text:Upload to ompldr\n# \"View Same\" in archives:\n#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz\n#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/\n#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/", - 'Custom CSS': false, - 'Boards Navigation': 'sticky top', - 'Header auto-hide': false, - 'Header catalog links': false, - boardnav: '[ toggle-all ] [current-title]', - time: '%m/%d/%y(%a)%H:%M:%S', - backlink: '>>%id', - fileInfo: '%l (%p%s, %r)', - favicon: 'ferongr', - usercss: '', - hotkeys: { - 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], - 'Open empty QR': ['q', 'Open QR without post number inserted.'], - 'Open QR': ['Shift+q', 'Open QR with post number inserted.'], - 'Open settings': ['Alt+o', 'Open Settings.'], - 'Close': ['Esc', 'Close Settings, Notifications or QR.'], - 'Spoiler tags': ['Ctrl+s', 'Insert spoiler tags.'], - 'Code tags': ['Alt+c', 'Insert code tags.'], - 'Eqn tags': ['Alt+e', 'Insert eqn tags.'], - 'Math tags': ['Alt+m', 'Insert math tags.'], - 'Submit QR': ['Alt+s', 'Submit post.'], - 'Watch': ['w', 'Watch thread.'], - 'Update': ['r', 'Update the thread now.'], - 'Expand image': ['Shift+e', 'Expand selected image.'], - 'Expand images': ['e', 'Expand all images.'], - 'Front page': ['0', 'Jump to page 0.'], - 'Open front page': ['Shift+0', 'Open page 0 in a new tab.'], - 'Next page': ['Right', 'Jump to the next page.'], - 'Previous page': ['Left', 'Jump to the previous page.'], - 'Next thread': ['Down', 'See next thread.'], - 'Previous thread': ['Up', 'See previous thread.'], - 'Expand thread': ['Ctrl+e', 'Expand thread.'], - 'Open thread': ['o', 'Open thread in current tab.'], - 'Open thread tab': ['Shift+o', 'Open thread in new tab.'], - 'Next reply': ['j', 'Select next reply.'], - 'Previous reply': ['k', 'Select previous reply.'], - 'Hide': ['x', 'Hide thread.'] - }, - updater: { - checkbox: { - 'Beep': [false, 'Beep on new post to completely read thread.'], - 'Auto Scroll': [false, 'Scroll updated posts into view. Only enabled at bottom of page.'], - 'Bottom Scroll': [false, 'Always scroll to the bottom, not the first new post. Useful for event threads.'], - 'Scroll BG': [false, 'Auto-scroll background tabs.'], - 'Auto Update': [true, 'Automatically fetch new posts.'], - 'Optional Increase': [false, 'Increase the intervals between updates on threads without new posts.'] - }, - 'Interval': 30 - } - }; - - if (!/^(boards|images|sys)\.4chan\.org$/.test(location.hostname)) { - return; - } - - Conf = {}; - - c = console; - - d = document; - - doc = d.documentElement; - - g = { - VERSION: '3.1.3', - NAMESPACE: '4chan X.', - boards: {}, - threads: {}, - posts: {} - }; - - UI = (function() { - var Menu, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove; - - dialog = function(id, position, html) { - var child, el, move, _i, _len, _ref; - - el = $.el('div', { - className: 'dialog', - innerHTML: html, - id: id - }); - el.style.cssText = position; - $.get("" + id + ".position", position, function(item) { - return el.style.cssText = item["" + id + ".position"]; - }); - move = $('.move', el); - $.on(move, 'touchstart mousedown', dragstart); - _ref = move.children; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - if (!child.tagName) { - continue; - } - $.on(child, 'touchstart mousedown', function(e) { - return e.stopPropagation(); - }); - } - return el; - }; - Menu = (function() { - var close, currentMenu, lastToggledButton; - - currentMenu = null; - - lastToggledButton = null; - - function Menu(type) { - this.type = type; - $.on(d, 'AddMenuEntry', this.addEntry.bind(this)); - this.close = close.bind(this); - this.entries = []; - } - - Menu.prototype.makeMenu = function() { - var menu; - - menu = $.el('div', { - className: 'dialog', - id: 'menu', - tabIndex: 0 - }); - $.on(menu, 'click', function(e) { - return e.stopPropagation(); - }); - $.on(menu, 'keydown', this.keybinds.bind(this)); - return menu; - }; - - Menu.prototype.toggle = function(e, button, data) { - var previousButton; - - e.preventDefault(); - e.stopPropagation(); - if (currentMenu) { - previousButton = lastToggledButton; - this.close(); - if (previousButton === button) { - return; - } - } - if (!this.entries.length) { - return; - } - return this.open(button, data); - }; - - Menu.prototype.open = function(button, data) { - var bLeft, bRect, bTop, bottom, cHeight, cWidth, entry, left, mRect, menu, prevEntry, right, style, top, _i, _len, _ref, _ref1, _ref2; - - menu = this.makeMenu(); - currentMenu = menu; - lastToggledButton = button; - _ref = this.entries; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - entry = _ref[_i]; - this.insertEntry(entry, menu, data); - } - entry = $('.entry', menu); - while (prevEntry = this.findNextEntry(entry, -1)) { - entry = prevEntry; - } - this.focus(entry); - $.on(d, 'click', this.close); - $.on(d, 'CloseMenu', this.close); - $.add(Header.hover, menu); - mRect = menu.getBoundingClientRect(); - bRect = button.getBoundingClientRect(); - bTop = doc.scrollTop + d.body.scrollTop + bRect.top; - bLeft = doc.scrollLeft + d.body.scrollLeft + bRect.left; - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - _ref1 = bRect.top + bRect.height + mRect.height < cHeight ? [bRect.bottom, null] : [null, cHeight - bRect.top], top = _ref1[0], bottom = _ref1[1]; - _ref2 = bRect.left + mRect.width < cWidth ? [bRect.left, null] : [null, cWidth - bRect.right], left = _ref2[0], right = _ref2[1]; - style = menu.style; - style.top = "" + top + "px"; - style.right = "" + right + "px"; - style.bottom = "" + bottom + "px"; - style.left = "" + left + "px"; - return menu.focus(); - }; - - Menu.prototype.insertEntry = function(entry, parent, data) { - var subEntry, submenu, _i, _len, _ref; - - if (typeof entry.open === 'function') { - if (!entry.open(data)) { - return; - } - } - $.add(parent, entry.el); - if (!entry.subEntries) { - return; - } - if (submenu = $('.submenu', entry.el)) { - $.rm(submenu); - } - submenu = $.el('div', { - className: 'dialog submenu' - }); - _ref = entry.subEntries; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - subEntry = _ref[_i]; - this.insertEntry(subEntry, submenu, data); - } - $.add(entry.el, submenu); - }; - - close = function() { - $.rm(currentMenu); - currentMenu = null; - lastToggledButton = null; - return $.off(d, 'click CloseMenu', this.close); - }; - - Menu.prototype.findNextEntry = function(entry, direction) { - var entries; - - entries = __slice.call(entry.parentNode.children); - entries.sort(function(first, second) { - return +(first.style.order || first.style.webkitOrder) - +(second.style.order || second.style.webkitOrder); - }); - return entries[entries.indexOf(entry) + direction]; - }; - - Menu.prototype.keybinds = function(e) { - var entry, next, nextPrev, subEntry, submenu; - - entry = $('.focused', currentMenu); - while (subEntry = $('.focused', entry)) { - entry = subEntry; - } - switch (e.keyCode) { - case 27: - lastToggledButton.focus(); - this.close(); - break; - case 13: - case 32: - entry.click(); - break; - case 38: - if (next = this.findNextEntry(entry, -1)) { - this.focus(next); - } - break; - case 40: - if (next = this.findNextEntry(entry, +1)) { - this.focus(next); - } - break; - case 39: - if ((submenu = $('.submenu', entry)) && (next = submenu.firstElementChild)) { - while (nextPrev = this.findNextEntry(next, -1)) { - next = nextPrev; - } - this.focus(next); - } - break; - case 37: - if (next = $.x('parent::*[contains(@class,"submenu")]/parent::*', entry)) { - this.focus(next); - } - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }; - - Menu.prototype.focus = function(entry) { - var bottom, cHeight, cWidth, eRect, focused, left, right, sRect, style, submenu, top, _i, _len, _ref, _ref1, _ref2; - - while (focused = $.x('parent::*/child::*[contains(@class,"focused")]', entry)) { - $.rmClass(focused, 'focused'); - } - _ref = $$('.focused', entry); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - focused = _ref[_i]; - $.rmClass(focused, 'focused'); - } - $.addClass(entry, 'focused'); - if (!(submenu = $('.submenu', entry))) { - return; - } - sRect = submenu.getBoundingClientRect(); - eRect = entry.getBoundingClientRect(); - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - _ref1 = eRect.top + sRect.height < cHeight ? ['0px', 'auto'] : ['auto', '0px'], top = _ref1[0], bottom = _ref1[1]; - _ref2 = eRect.right + sRect.width < cWidth ? ['100%', 'auto'] : ['auto', '100%'], left = _ref2[0], right = _ref2[1]; - style = submenu.style; - style.top = top; - style.bottom = bottom; - style.left = left; - return style.right = right; - }; - - Menu.prototype.addEntry = function(e) { - var entry; - - entry = e.detail; - if (entry.type !== this.type) { - return; - } - this.parseEntry(entry); - return this.entries.push(entry); - }; - - Menu.prototype.parseEntry = function(entry) { - var el, style, subEntries, subEntry, _i, _len; - - el = entry.el, subEntries = entry.subEntries; - $.addClass(el, 'entry'); - $.on(el, 'focus mouseover', (function(e) { - e.stopPropagation(); - return this.focus(el); - }).bind(this)); - style = el.style; - style.webkitOrder = style.order = entry.order || 100; - if (!subEntries) { - return; - } - $.addClass(el, 'has-submenu'); - for (_i = 0, _len = subEntries.length; _i < _len; _i++) { - subEntry = subEntries[_i]; - this.parseEntry(subEntry); - } - }; - - return Menu; - - })(); - dragstart = function(e) { - var el, isTouching, o, rect, screenHeight, screenWidth; - - if (e.type === 'mousedown' && e.button !== 0) { - return; - } - e.preventDefault(); - if (isTouching = e.type === 'touchstart') { - e = e.changedTouches[e.changedTouches.length - 1]; - } - el = $.x('ancestor::div[contains(@class,"dialog")][1]', this); - rect = el.getBoundingClientRect(); - screenHeight = doc.clientHeight; - screenWidth = doc.clientWidth; - o = { - id: el.id, - style: el.style, - dx: e.clientX - rect.left, - dy: e.clientY - rect.top, - height: screenHeight - rect.height, - width: screenWidth - rect.width, - screenHeight: screenHeight, - screenWidth: screenWidth, - isTouching: isTouching - }; - if (isTouching) { - o.identifier = e.identifier; - o.move = touchmove.bind(o); - o.up = touchend.bind(o); - $.on(d, 'touchmove', o.move); - return $.on(d, 'touchend touchcancel', o.up); - } else { - o.move = drag.bind(o); - o.up = dragend.bind(o); - $.on(d, 'mousemove', o.move); - return $.on(d, 'mouseup', o.up); - } - }; - touchmove = function(e) { - var touch, _i, _len, _ref; - - _ref = e.changedTouches; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - touch = _ref[_i]; - if (touch.identifier === this.identifier) { - drag.call(this, touch); - return; - } - } - }; - drag = function(e) { - var bottom, clientX, clientY, left, right, style, top; - - clientX = e.clientX, clientY = e.clientY; - left = clientX - this.dx; - left = left < 10 ? 0 : this.width - left < 10 ? null : left / this.screenWidth * 100 + '%'; - top = clientY - this.dy; - top = top < 10 ? 0 : this.height - top < 10 ? null : top / this.screenHeight * 100 + '%'; - right = left === null ? 0 : null; - bottom = top === null ? 0 : null; - style = this.style; - style.left = left; - style.right = right; - style.top = top; - return style.bottom = bottom; - }; - touchend = function(e) { - var touch, _i, _len, _ref; - - _ref = e.changedTouches; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - touch = _ref[_i]; - if (touch.identifier === this.identifier) { - dragend.call(this); - return; - } - } - }; - dragend = function() { - if (this.isTouching) { - $.off(d, 'touchmove', this.move); - $.off(d, 'touchend touchcancel', this.up); - } else { - $.off(d, 'mousemove', this.move); - $.off(d, 'mouseup', this.up); - } - return $.set("" + this.id + ".position", this.style.cssText); - }; - hoverstart = function(_arg) { - var asapTest, cb, el, endEvents, latestEvent, o, root; - - root = _arg.root, el = _arg.el, latestEvent = _arg.latestEvent, endEvents = _arg.endEvents, asapTest = _arg.asapTest, cb = _arg.cb; - o = { - root: root, - el: el, - style: el.style, - cb: cb, - endEvents: endEvents, - latestEvent: latestEvent, - clientHeight: doc.clientHeight, - clientWidth: doc.clientWidth - }; - o.hover = hover.bind(o); - o.hoverend = hoverend.bind(o); - $.asap(function() { - return !el.parentNode || asapTest(); - }, function() { - if (el.parentNode) { - return o.hover(o.latestEvent); - } - }); - $.on(root, endEvents, o.hoverend); - return $.on(root, 'mousemove', o.hover); - }; - hover = function(e) { - var clientX, clientY, height, left, right, style, top, _ref; - - this.latestEvent = e; - height = this.el.offsetHeight; - clientX = e.clientX, clientY = e.clientY; - top = clientY - 120; - top = this.clientHeight <= height || top <= 0 ? 0 : top + height >= this.clientHeight ? this.clientHeight - height : top; - _ref = clientX <= this.clientWidth - 400 ? [clientX + 45 + 'px', null] : [null, this.clientWidth - clientX + 45 + 'px'], left = _ref[0], right = _ref[1]; - style = this.style; - style.top = top + 'px'; - style.left = left; - return style.right = right; - }; - hoverend = function() { - $.rm(this.el); - $.off(this.root, this.endEvents, this.hoverend); - $.off(this.root, 'mousemove', this.hover); - if (this.cb) { - return this.cb.call(this); - } - }; - return { - dialog: dialog, - Menu: Menu, - hover: hoverstart - }; - })(); - - $ = function(selector, root) { - if (root == null) { - root = d.body; - } - return root.querySelector(selector); - }; - - $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); - - $$ = function(selector, root) { - if (root == null) { - root = d.body; - } - return __slice.call(root.querySelectorAll(selector)); - }; - - $.extend = function(object, properties) { - var key, val; - - for (key in properties) { - val = properties[key]; - object[key] = val; - } - }; - - $.extend(Array.prototype, { - add: function(object, position) { - var keep; - - keep = this.slice(position); - this.length = position; - this.push(object); - return this.pushArrays(keep); - }, - contains: function(object) { - return this.indexOf(object) > -1; - }, - indexOf: function(object) { - var i; - - i = this.length; - while (i--) { - if (this[i] === object) { - break; - } - } - return i; - }, - pushArrays: function() { - var arg, args, _i, _len; - - args = arguments; - for (_i = 0, _len = args.length; _i < _len; _i++) { - arg = args[_i]; - this.push.apply(this, arg); - } - return this; - }, - remove: function(object) { - var index; - - if ((index = this.indexOf(object)) > -1) { - return this.splice(index, 1); - } else { - return false; - } - } - }); - - $.extend(String.prototype, { - capitalize: function() { - return this.charAt(0).toUpperCase() + this.slice(1); - }, - contains: function(string) { - return this.indexOf(string) > -1; - } - }); - - $.extend($, { - id: function(id) { - return d.getElementById(id); - }, - ready: function(fc) { - var cb, _ref; - - if ((_ref = d.readyState) === 'interactive' || _ref === 'complete') { - $.queueTask(fc); - return; - } - cb = function() { - $.off(d, 'DOMContentLoaded', cb); - return fc(); - }; - return $.on(d, 'DOMContentLoaded', cb); - }, - formData: function(form) { - var fd, key, val; - - if (form instanceof HTMLFormElement) { - return new FormData(form); - } - fd = new FormData(); - for (key in form) { - val = form[key]; - if (!val) { - continue; - } - if (val.size && val.name) { - fd.append(key, val, val.name); - } else { - fd.append(key, val); - } - } - return fd; - }, - ajax: function(url, callbacks, opts) { - var cred, form, headers, key, r, sync, type, upCallbacks, val; - - if (opts == null) { - opts = {}; - } - type = opts.type, cred = opts.cred, headers = opts.headers, upCallbacks = opts.upCallbacks, form = opts.form, sync = opts.sync; - r = new XMLHttpRequest(); - type || (type = form && 'post' || 'get'); - r.open(type, url, !sync); - for (key in headers) { - val = headers[key]; - r.setRequestHeader(key, val); - } - $.extend(r, callbacks); - $.extend(r.upload, upCallbacks); - r.withCredentials = cred; - r.send(form); - return r; - }, - cache: (function() { - var reqs; - - reqs = {}; - return function(url, cb) { - var req, rm; - - if (req = reqs[url]) { - if (req.readyState === 4) { - cb.call(req); - } else { - req.callbacks.push(cb); - } - return; - } - rm = function() { - return delete reqs[url]; - }; - req = $.ajax(url, { - onload: function(e) { - var _i, _len, _ref; - - _ref = this.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - cb = _ref[_i]; - cb.call(this, e); - } - return delete this.callbacks; - }, - onabort: rm, - onerror: rm - }); - req.callbacks = [cb]; - return reqs[url] = req; - }; - })(), - cb: { - checked: function() { - $.set(this.name, this.checked); - return Conf[this.name] = this.checked; - }, - value: function() { - $.set(this.name, this.value.trim()); - return Conf[this.name] = this.value; - } - }, - asap: function(test, cb) { - if (test()) { - return cb(); - } else { - return setTimeout($.asap, 25, test, cb); - } - }, - addStyle: function(css) { - var style; - - style = $.el('style', { - textContent: css - }); - $.asap((function() { - return d.head; - }), function() { - return $.add(d.head, style); - }); - return style; - }, - x: function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, 8, null).singleNodeValue; - }, - X: function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); - }, - addClass: function(el, className) { - return el.classList.add(className); - }, - rmClass: function(el, className) { - return el.classList.remove(className); - }, - toggleClass: function(el, className) { - return el.classList.toggle(className); - }, - hasClass: function(el, className) { - return el.classList.contains(className); - }, - rm: (function() { - if ('remove' in Element.prototype) { - return function(el) { - return el.remove(); - }; - } else { - return function(el) { - var _ref; - - return (_ref = el.parentNode) != null ? _ref.removeChild(el) : void 0; - }; - } - })(), - rmAll: function(root) { - var node; - - while (node = root.firstChild) { - root.removeChild(node); - } - }, - tn: function(s) { - return d.createTextNode(s); - }, - frag: function() { - return d.createDocumentFragment(); - }, - nodes: function(nodes) { - var frag, node, _i, _len; - - if (!(nodes instanceof Array)) { - return nodes; - } - frag = $.frag(); - for (_i = 0, _len = nodes.length; _i < _len; _i++) { - node = nodes[_i]; - frag.appendChild(node); - } - return frag; - }, - add: function(parent, el) { - return parent.appendChild($.nodes(el)); - }, - prepend: function(parent, el) { - return parent.insertBefore($.nodes(el), parent.firstChild); - }, - after: function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root.nextSibling); - }, - before: function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root); - }, - replace: function(root, el) { - return root.parentNode.replaceChild($.nodes(el), root); - }, - el: function(tag, properties) { - var el; - - el = d.createElement(tag); - if (properties) { - $.extend(el, properties); - } - return el; - }, - on: function(el, events, handler) { - var event, _i, _len, _ref; - - _ref = events.split(' '); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - event = _ref[_i]; - el.addEventListener(event, handler, false); - } - }, - off: function(el, events, handler) { - var event, _i, _len, _ref; - - _ref = events.split(' '); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - event = _ref[_i]; - el.removeEventListener(event, handler, false); - } - }, - event: function(event, detail, root) { - if (root == null) { - root = d; - } - return root.dispatchEvent(new CustomEvent(event, { - bubbles: true, - detail: detail - })); - }, - open: (function() { - if (typeof GM_openInTab !== "undefined" && GM_openInTab !== null) { - return function(URL) { - var a; - - a = $.el('a', { - href: URL - }); - return GM_openInTab(a.href); - }; - } else { - return function(URL) { - return window.open(URL, '_blank'); - }; - } - })(), - debounce: function(wait, fn) { - var args, exec, that, timeout; - - timeout = null; - that = null; - args = null; - exec = function() { - fn.apply(that, args); - return timeout = null; - }; - return function() { - args = arguments; - that = this; - if (timeout) { - clearTimeout(timeout); - } else { - exec(); - } - return timeout = setTimeout(exec, wait); - }; - }, - queueTask: (function() { - var execTask, taskChannel, taskQueue; - - taskQueue = []; - execTask = function() { - var args, func, task; - - task = taskQueue.shift(); - func = task[0]; - args = Array.prototype.slice.call(task, 1); - return func.apply(func, args); - }; - if (window.MessageChannel) { - taskChannel = new MessageChannel(); - taskChannel.port1.onmessage = execTask; - return function() { - taskQueue.push(arguments); - return taskChannel.port2.postMessage(null); - }; - } else { - return function() { - taskQueue.push(arguments); - return setTimeout(execTask, 0); - }; - } - })(), - globalEval: function(code) { - var script; - - script = $.el('script', { - textContent: code - }); - $.add(d.head || doc, script); - return $.rm(script); - }, - bytesToString: function(size) { - var unit; - - unit = 0; - while (size >= 1024) { - size /= 1024; - unit++; - } - size = unit > 1 ? Math.round(size * 100) / 100 : Math.round(size); - return "" + size + " " + ['B', 'KB', 'MB', 'GB'][unit]; - }, - syncing: {}, - sync: (function() { - window.addEventListener('storage', function(e) { - var cb; - - if (cb = $.syncing[e.key]) { - return cb(JSON.parse(e.newValue)); - } - }, false); - return function(key, cb) { - return $.syncing[g.NAMESPACE + key] = cb; - }; - })(), - item: function(key, val) { - var item; - - item = {}; - item[key] = val; - return item; - } - }); - - (function() { - var scriptStorage; - - scriptStorage = opera.scriptStorage; - $["delete"] = function(keys) { - var key, _i, _len; - - if (!(keys instanceof Array)) { - keys = [keys]; - } - for (_i = 0, _len = keys.length; _i < _len; _i++) { - key = keys[_i]; - key = g.NAMESPACE + key; - localStorage.removeItem(key); - delete scriptStorage[key]; - } - }; - $.get = function(key, val, cb) { - var items; - - if (typeof cb === 'function') { - items = $.item(key, val); - } else { - items = key; - cb = val; - } - return $.queueTask(function() { - for (key in items) { - if (val = scriptStorage[g.NAMESPACE + key]) { - items[key] = JSON.parse(val); - } - } - return cb(items); - }); - }; - return $.set = (function() { - var set; - - set = function(key, val) { - key = g.NAMESPACE + key; - val = JSON.stringify(val); - if (key in $.syncing) { - localStorage.setItem(key, val); - } - return scriptStorage[key] = val; - }; - return function(keys, val) { - var key; - - if (typeof keys === 'string') { - set(keys, val); - return; - } - for (key in keys) { - val = keys[key]; - set(key, val); - } - }; - })(); - })(); - - Polyfill = { - init: function() { - return Polyfill.visibility(); - }, - visibility: function() { - var event, prefix, property; - - if ('visibilityState' in document || !(prefix = ('webkitVisibilityState' in document ? 'webkit' : 'mozVisibilityState' in document ? 'moz' : void 0))) { - return; - } - property = prefix + 'VisibilityState'; - event = prefix + 'visibilitychange'; - d.visibilityState = d[property]; - d.hidden = d.visibilityState === 'hidden'; - return $.on(d, event, function() { - d.visibilityState = d[property]; - d.hidden = d.visibilityState === 'hidden'; - return $.event('visibilitychange'); - }); - } - }; - - Header = { - init: function() { - var createSubEntry, setting, subEntries, _i, _len, _ref; - - this.menuButton = $.el('span', { - className: 'menu-button', - innerHTML: '' - }); - this.menu = new UI.Menu('header'); - $.on(this.menuButton, 'click', this.menuToggle); - $.on(this.toggle, 'mousedown', this.toggleBarVisibility); - $.on(window, 'load hashchange', Header.hashScroll); - this.positionToggler = $.el('span', { - textContent: 'Header Position', - className: 'header-position-link' - }); - createSubEntry = Header.createSubEntry; - subEntries = []; - _ref = ['sticky top', 'sticky bottom', 'top']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - setting = _ref[_i]; - subEntries.push(createSubEntry(setting)); - } - $.event('AddMenuEntry', { - type: 'header', - el: this.positionToggler, - order: 108, - subEntries: subEntries - }); - this.headerToggler = $.el('label', { - innerHTML: " Auto-hide header" - }); - $.on(this.headerToggler.firstElementChild, 'change', this.toggleBarVisibility); - $.event('AddMenuEntry', { - type: 'header', - el: this.headerToggler, - order: 109 - }); - $.on(d, 'CreateNotification', this.createNotification); - $.asap((function() { - return d.body; - }), function() { - if (!Main.isThisPageLegit()) { - return; - } - return $.asap((function() { - return $.id('boardNavMobile'); - }), Header.setBoardList); - }); - return $.ready(function() { - return $.add(d.body, Header.hover); - }); - }, - bar: $.el('div', { - id: 'notifications' - }), - shortcuts: $.el('span', { - id: 'shortcuts' - }), - hover: $.el('div', { - id: 'hoverUI' - }), - toggle: $.el('div', { - id: 'toggle-header-bar' - }), - createSubEntry: function(setting) { - var label; - - label = $.el('label', { - textContent: "" + setting - }); - $.on(label, 'click', Header.setBarPosition); - return { - el: label - }; - }, - setBoardList: function() { - var a, btn, customBoardList, fullBoardList, nav; - - Header.nav = nav = $.id('boardNavDesktop'); - if (a = $("a[href*='/" + g.BOARD + "/']", nav)) { - a.className = 'current'; - } - fullBoardList = $.el('span', { - id: 'full-board-list', - hidden: true - }); - customBoardList = $.el('span', { - id: 'custom-board-list' - }); - Header.setBarPosition.call({ - textContent: "" + Conf['Boards Navigation'] - }); - $.sync('Boards Navigation', Header.changeBarPosition); - Header.setBarVisibility(Conf['Header auto-hide']); - $.sync('Header auto-hide', Header.setBarVisibility); - $.after(nav, $.id('navtopright')); - $.add(fullBoardList, __slice.call(nav.childNodes)); - $.add(nav, [Header.menuButton, customBoardList, fullBoardList, Header.shortcuts, Header.bar, Header.toggle]); - if (Conf['Custom Board Navigation']) { - Header.generateBoardList(Conf['boardnav']); - $.sync('boardnav', Header.generateBoardList); - btn = $.el('span', { - className: 'hide-board-list-button', - innerHTML: '[ - ]\u00A0' - }); - $.on(btn, 'click', Header.toggleBoardList); - return $.prepend(fullBoardList, btn); - } else { - $.rm($('#custom-board-list', nav)); - return fullBoardList.hidden = false; - } - }, - generateBoardList: function(text) { - var as, list, nodes; - - list = $('#custom-board-list', Header.nav); - $.rmAll(list); - if (!text) { - return; - } - as = $$('#full-board-list a', Header.nav).slice(0, -2); - nodes = text.match(/[\w@]+(-(all|title|full|index|catalog|text:"[^"]+"))*|[^\w@]+/g).map(function(t) { - var a, board, m, _i, _len; - - if (/^[^\w@]/.test(t)) { - return $.tn(t); - } - if (/^toggle-all/.test(t)) { - a = $.el('a', { - className: 'show-board-list-button', - textContent: (t.match(/-text:"(.+)"/) || [null, '+'])[1], - href: 'javascript:;' - }); - $.on(a, 'click', Header.toggleBoardList); - return a; - } - board = /^current/.test(t) ? g.BOARD.ID : t.match(/^[^-]+/)[0]; - for (_i = 0, _len = as.length; _i < _len; _i++) { - a = as[_i]; - if (a.textContent === board) { - a = a.cloneNode(true); - if (/-title/.test(t)) { - a.textContent = a.title; - } else if (/-full/.test(t)) { - a.textContent = "/" + board + "/ - " + a.title; - } else if (/-(index|catalog|text)/.test(t)) { - if (m = t.match(/-(index|catalog)/)) { - a.setAttribute('data-only', m[1]); - a.href = "//boards.4chan.org/" + board + "/"; - if (m[1] === 'catalog') { - a.href += 'catalog'; - } - } - if (m = t.match(/-text:"(.+)"/)) { - a.textContent = m[1]; - } - } else if (board === '@') { - $.addClass(a, 'navSmall'); - } - return a; - } - } - return $.tn(t); - }); - return $.add(list, nodes); - }, - toggleBoardList: function() { - var custom, full, nav, showBoardList; - - nav = Header.nav; - custom = $('#custom-board-list', nav); - full = $('#full-board-list', nav); - showBoardList = !full.hidden; - custom.hidden = !showBoardList; - return full.hidden = showBoardList; - }, - setBarPosition: function() { - $.event('CloseMenu'); - Header.changeBarPosition(this.textContent); - Conf['Boards Navigation'] = this.textContent; - return $.set('Boards Navigation', this.textContent); - }, - changeBarPosition: function(setting) { - $.rmClass(doc, 'top'); - $.rmClass(doc, 'fixed'); - $.rmClass(doc, 'bottom'); - $.rmClass(Header.nav, 'dialog'); - switch (setting) { - case 'sticky top': - $.addClass(doc, 'top'); - $.addClass(doc, 'fixed'); - return $.addClass(Header.nav, 'dialog'); - case 'sticky bottom': - $.addClass(doc, 'fixed'); - $.addClass(doc, 'bottom'); - return $.addClass(Header.nav, 'dialog'); - case 'top': - return $.addClass(doc, 'top'); - } - }, - setBarVisibility: function(hide) { - Header.headerToggler.firstElementChild.checked = hide; - return (hide ? $.addClass : $.rmClass)(Header.nav, 'autohide'); - }, - hashScroll: function() { - var post; - - if (!(post = $.id(this.location.hash.slice(1)))) { - return; - } - if ((Get.postFromRoot(post)).isHidden) { - return; - } - return Header.scrollToPost(post); - }, - scrollToPost: function(post) { - var headRect, top; - - top = post.getBoundingClientRect().top; - if (Conf['Boards Navigation'] === 'sticky top') { - headRect = Header.bar.getBoundingClientRect(); - top += -headRect.top - headRect.height; - } - return ($.engine === 'webkit' ? d.body : doc).scrollTop += top; - }, - toggleBarVisibility: function(e) { - var hide, message; - - if (e.type === 'mousedown' && e.button !== 0) { - return; - } - hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.nav, 'autohide'); - Header.setBarVisibility(hide); - message = hide ? 'The header bar will automatically hide itself.' : 'The header bar will remain visible.'; - new Notification('info', message, 2); - return $.set('Header auto-hide', hide); - }, - addShortcut: function(el) { - var shortcut; - - shortcut = $.el('span', { - className: 'shortcut' - }); - $.add(shortcut, [$.tn(' ['), el, $.tn(']')]); - return $.add(Header.shortcuts, shortcut); - }, - menuToggle: function(e) { - return Header.menu.toggle(e, this, g); - }, - createNotification: function(e) { - var cb, content, lifetime, notif, type, _ref; - - _ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime, cb = _ref.cb; - notif = new Notification(type, content, lifetime); - if (cb) { - return cb(notif); - } - } - }; - - Notification = (function() { - var add, close; - - function Notification(type, content, timeout) { - this.timeout = timeout; - this.add = add.bind(this); - this.close = close.bind(this); - this.el = $.el('div', { - innerHTML: '×
' - }); - this.el.style.opacity = 0; - this.setType(type); - $.on(this.el.firstElementChild, 'click', this.close); - if (typeof content === 'string') { - content = $.tn(content); - } - $.add(this.el.lastElementChild, content); - $.ready(this.add); - } - - Notification.prototype.setType = function(type) { - return this.el.className = "notification " + type; - }; - - add = function() { - if (d.hidden) { - $.on(d, 'visibilitychange', this.add); - return; - } - $.off(d, 'visibilitychange', this.add); - $.add($.id('notifications'), this.el); - this.el.clientHeight; - this.el.style.opacity = 1; - if (this.timeout) { - return setTimeout(this.close, this.timeout * $.SECOND); - } - }; - - close = function() { - return $.rm(this.el); - }; - - return Notification; - - })(); - - CatalogLinks = { - init: function() { - var el; - - if (!Conf['Catalog Links']) { - return; - } - el = $.el('a', { - id: 'toggleCatalog', - href: 'javascript:;', - className: Conf['Header catalog links'] ? 'disabled' : '', - textContent: 'Catalog', - title: "Turn catalog links " + (Conf['Header catalog links'] ? 'off' : 'on') + "." - }); - $.on(el, 'click', this.toggle); - Header.addShortcut(el); - return $.asap((function() { - return d.body; - }), function() { - if (!Main.isThisPageLegit()) { - return; - } - return $.asap((function() { - return $.id('boardNavMobile'); - }), function() { - return CatalogLinks.toggle.call(el); - }); - }); - }, - toggle: function() { - var a, board, useCatalog, _i, _len, _ref; - - $.set('Header catalog links', useCatalog = this.className === 'disabled'); - $.toggleClass(this, 'disabled'); - _ref = $$('a', $.id('boardNavDesktop')); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - a = _ref[_i]; - board = a.pathname.split('/')[1]; - if (['f', 'status', '4chan'].contains(board) || !board) { - continue; - } - if (Conf['External Catalog']) { - a.href = useCatalog ? CatalogLinks.external(board) : "//boards.4chan.org/" + board + "/"; - } else { - a.pathname = "/" + board + "/" + (useCatalog ? 'catalog' : ''); - } - a.title = useCatalog ? "" + a.title + " - Catalog" : a.title.replace(/\ -\ Catalog$/, ''); - } - return this.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; - }, - external: function(board) { - return (['a', 'c', 'g', 'co', 'k', 'm', 'o', 'p', 'v', 'vg', 'w', 'cm', '3', 'adv', 'an', 'cgl', 'ck', 'diy', 'fa', 'fit', 'int', 'jp', 'mlp', 'lit', 'mu', 'n', 'po', 'sci', 'toy', 'trv', 'tv', 'vp', 'x', 'q'].contains(board) ? "http://catalog.neet.tv/" + board : ['d', 'e', 'gif', 'h', 'hr', 'hc', 'r9k', 's', 'pol', 'soc', 'u', 'i', 'ic', 'hm', 'r', 'w', 'wg', 'wsg', 't', 'y'].contains(board) ? "http://4index.gropes.us/" + board : "//boards.4chan.org/" + board + "/catalog"); - } - }; - - Settings = { - init: function() { - var link, settings; - - link = $.el('a', { - className: 'settings-link', - textContent: '4chan X Settings', - href: 'javascript:;' - }); - $.on(link, 'click', Settings.open); - $.asap((function() { - return d.body; - }), function() { - if (!Main.isThisPageLegit()) { - return; - } - return $.asap((function() { - return $.id('boardNavMobile'); - }), function() { - return $.prepend($.id('navtopright'), [$.tn(' ['), link, $.tn('] ')]); - }); - }); - $.get('previousversion', null, function(item) { - var changelog, curr, el, prev, previous; - - if (previous = item['previousversion']) { - if (previous === g.VERSION) { - return; - } - prev = previous.match(/\d+/g).map(Number); - curr = g.VERSION.match(/\d+/g).map(Number); - if (!(prev[0] <= curr[0] && prev[1] <= curr[1] && prev[2] <= curr[2])) { - return; - } - changelog = 'https://github.com/MayhemYDG/4chan-x/blob/v3/CHANGELOG.md'; - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + g.VERSION + "." - }); - new Notification('info', el, 30); - } else { - $.on(d, '4chanXInitFinished', Settings.open); - } - return $.set({ - lastupdate: Date.now(), - previousversion: g.VERSION - }); - }); - Settings.addSection('Main', Settings.main); - Settings.addSection('Filter', Settings.filter); - Settings.addSection('Sauce', Settings.sauce); - Settings.addSection('Rice', Settings.rice); - Settings.addSection('Keybinds', Settings.keybinds); - $.on(d, 'AddSettingsSection', Settings.addSection); - $.on(d, 'OpenSettings', function(e) { - return Settings.open(e.detail); - }); - if (Conf['Enable 4chan\'s Extension']) { - return; - } - settings = JSON.parse(localStorage.getItem('4chan-settings')) || {}; - if (settings.disableAll) { - return; - } - settings.disableAll = true; - return localStorage.setItem('4chan-settings', JSON.stringify(settings)); - }, - open: function(openSection) { - var dialog, html, link, links, overlay, section, sectionToOpen, _i, _len, _ref; - - $.off(d, '4chanXInitFinished', Settings.open); - if (Settings.dialog) { - return; - } - $.event('CloseMenu'); - html = "\n
\n
"; - Settings.overlay = overlay = $.el('div', { - id: 'overlay' - }); - Settings.dialog = dialog = $.el('div', { - id: 'fourchanx-settings', - className: 'dialog', - innerHTML: html - }); - links = []; - _ref = Settings.sections; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - section = _ref[_i]; - link = $.el('a', { - className: "tab-" + section.hyphenatedTitle, - textContent: section.title, - href: 'javascript:;' - }); - $.on(link, 'click', Settings.openSection.bind(section)); - links.push(link, $.tn(' | ')); - if (section.title === openSection) { - sectionToOpen = link; - } - } - links.pop(); - $.add($('.sections-list', dialog), links); - (sectionToOpen ? sectionToOpen : links[0]).click(); - $.on($('.close', dialog), 'click', Settings.close); - $.on(overlay, 'click', Settings.close); - d.body.style.width = "" + d.body.clientWidth + "px"; - $.addClass(d.body, 'unscroll'); - return $.add(d.body, [overlay, dialog]); - }, - close: function() { - if (!Settings.dialog) { - return; - } - d.body.style.removeProperty('width'); - $.rmClass(d.body, 'unscroll'); - $.rm(Settings.overlay); - $.rm(Settings.dialog); - delete Settings.overlay; - return delete Settings.dialog; - }, - sections: [], - addSection: function(title, open) { - var hyphenatedTitle, _ref; - - if (typeof title !== 'string') { - _ref = title.detail, title = _ref.title, open = _ref.open; - } - hyphenatedTitle = title.toLowerCase().replace(/\s+/g, '-'); - return Settings.sections.push({ - title: title, - hyphenatedTitle: hyphenatedTitle, - open: open - }); - }, - openSection: function() { - var section, selected; - - if (selected = $('.tab-selected', Settings.dialog)) { - $.rmClass(selected, 'tab-selected'); - } - $.addClass($(".tab-" + this.hyphenatedTitle, Settings.dialog), 'tab-selected'); - section = $('section', Settings.dialog); - $.rmAll(section); - section.className = "section-" + this.hyphenatedTitle; - this.open(section, g); - return section.scrollTop = 0; - }, - main: function(section) { - var arr, button, description, div, fs, hiddenNum, input, inputs, items, key, obj, _ref; - - section.innerHTML = "
\n \n \n \n
\n

"; - $.on($('.export', section), 'click', Settings["export"]); - $.on($('.import', section), 'click', Settings["import"]); - $.on($('input', section), 'change', Settings.onImport); - items = {}; - inputs = {}; - _ref = Config.main; - for (key in _ref) { - obj = _ref[key]; - fs = $.el('fieldset', { - innerHTML: "" + key + "" - }); - for (key in obj) { - arr = obj[key]; - description = arr[1]; - div = $.el('div', { - innerHTML: ": " + description + "" - }); - input = $('input', div); - $.on(input, 'change', $.cb.checked); - items[key] = Conf[key]; - inputs[key] = input; - $.add(fs, div); - } - $.add(section, fs); - } - $.get(items, function(items) { - var val; - - for (key in items) { - val = items[key]; - inputs[key].checked = val; - } - }); - div = $.el('div', { - innerHTML: ": Clear manually-hidden threads and posts on all boards. Refresh the page to apply." - }); - button = $('button', div); - hiddenNum = 0; - $.get('hiddenThreads', { - boards: {} - }, function(item) { - var ID, board, thread, _ref1; - - _ref1 = item.hiddenThreads.boards; - for (ID in _ref1) { - board = _ref1[ID]; - for (ID in board) { - thread = board[ID]; - hiddenNum++; - } - } - return button.textContent = "Hidden: " + hiddenNum; - }); - $.get('hiddenPosts', { - boards: {} - }, function(item) { - var ID, board, post, thread, _ref1; - - _ref1 = item.hiddenPosts.boards; - for (ID in _ref1) { - board = _ref1[ID]; - for (ID in board) { - thread = board[ID]; - for (ID in thread) { - post = thread[ID]; - hiddenNum++; - } - } - } - return button.textContent = "Hidden: " + hiddenNum; - }); - $.on(button, 'click', function() { - this.textContent = 'Hidden: 0'; - return $.get('hiddenThreads', { - boards: {} - }, function(item) { - var boardID; - - for (boardID in item.hiddenThreads.boards) { - localStorage.removeItem("4chan-hide-t-" + boardID); - } - return $["delete"](['hiddenThreads', 'hiddenPosts']); - }); - }); - return $.after($('input[name="Stubs"]', section).parentNode.parentNode, div); - }, - "export": function(now, data) { - var a, db, _i, _len; - - if (typeof now !== 'number') { - now = Date.now(); - data = { - version: g.VERSION, - date: now - }; - Conf['WatchedThreads'] = {}; - for (_i = 0, _len = DataBoards.length; _i < _len; _i++) { - db = DataBoards[_i]; - Conf[db] = { - boards: {} - }; - } - $.get(Conf, function(Conf) { - data.Conf = Conf; - return Settings["export"](now, data); - }); - return; - } - a = $.el('a', { - className: 'warning', - textContent: 'Save me!', - download: "4chan X v" + g.VERSION + "-" + now + ".json", - href: "data:application/json;base64," + (btoa(unescape(encodeURIComponent(JSON.stringify(data, null, 2))))), - target: '_blank' - }); - return a.click(); - }, - "import": function() { - return this.nextElementSibling.click(); - }, - onImport: function() { - var file, output, reader; - - if (!(file = this.files[0])) { - return; - } - output = this.parentNode.nextElementSibling; - if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { - output.textContent = 'Import aborted.'; - return; - } - reader = new FileReader(); - reader.onload = function(e) { - var data, err; - - try { - data = JSON.parse(e.target.result); - Settings.loadSettings(data); - if (confirm('Import successful. Refresh now?')) { - return window.location.reload(); - } - } catch (_error) { - err = _error; - output.textContent = 'Import failed due to an error.'; - return c.error(err.stack); - } - }; - return reader.readAsText(file); - }, - loadSettings: function(data) { - var key, val, version, _ref; - - version = data.version.split('.'); - if (version[0] === '2') { - data = Settings.convertSettings(data, { - 'Disable 4chan\'s extension': '', - 'Catalog Links': '', - 'Reply Navigation': '', - 'Show Stubs': 'Stubs', - 'Image Auto-Gif': 'Auto-GIF', - 'Expand From Current': '', - 'Unread Favicon': 'Unread Tab Icon', - 'Post in Title': 'Thread Excerpt', - 'Auto Hide QR': '', - 'Open Reply in New Tab': '', - 'Remember QR size': '', - 'Quote Inline': 'Quote Inlining', - 'Quote Preview': 'Quote Previewing', - 'Indicate OP quote': 'Mark OP Quotes', - 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', - 'uniqueid': 'uniqueID', - 'mod': 'capcode', - 'country': 'flag', - 'md5': 'MD5', - 'openEmptyQR': 'Open empty QR', - 'openQR': 'Open QR', - 'openOptions': 'Open settings', - 'close': 'Close', - 'spoiler': 'Spoiler tags', - 'code': 'Code tags', - 'submit': 'Submit QR', - 'watch': 'Watch', - 'update': 'Update', - 'unreadCountTo0': '', - 'expandAllImages': 'Expand images', - 'expandImage': 'Expand image', - 'zero': 'Front page', - 'nextPage': 'Next page', - 'previousPage': 'Previous page', - 'nextThread': 'Next thread', - 'previousThread': 'Previous thread', - 'expandThread': 'Expand thread', - 'openThreadTab': 'Open thread', - 'openThread': 'Open thread tab', - 'nextReply': 'Next reply', - 'previousReply': 'Previous reply', - 'hide': 'Hide', - 'Scrolling': 'Auto Scroll', - 'Verbose': '' - }); - data.Conf.sauces = data.Conf.sauces.replace(/\$\d/g, function(c) { - switch (c) { - case '$1': - return '%TURL'; - case '$2': - return '%URL'; - case '$3': - return '%MD5'; - case '$4': - return '%board'; - default: - return c; - } - }); - _ref = Config.hotkeys; - for (key in _ref) { - val = _ref[key]; - if (!(key in data.Conf)) { - continue; - } - data.Conf[key] = data.Conf[key].replace(/ctrl|alt|meta/g, function(s) { - return "" + (s[0].toUpperCase()) + s.slice(1); - }).replace(/(^|.+\+)[A-Z]$/g, function(s) { - return "Shift+" + s.slice(0, -1) + (s.slice(-1).toLowerCase()); - }); - } - data.Conf.WatchedThreads = data.WatchedThreads; - } - return $.set(data.Conf); - }, - convertSettings: function(data, map) { - var newKey, prevKey; - - for (prevKey in map) { - newKey = map[prevKey]; - if (newKey) { - data.Conf[newKey] = data.Conf[prevKey]; - } - delete data.Conf[prevKey]; - } - return data; - }, - filter: function(section) { - var select; - - section.innerHTML = "\n
"; - select = $('select', section); - $.on(select, 'change', Settings.selectFilter); - return Settings.selectFilter.call(select); - }, - selectFilter: function() { - var div, name, ta; - - div = this.nextElementSibling; - if ((name = this.value) !== 'guide') { - $.rmAll(div); - ta = $.el('textarea', { - name: name, - className: 'field', - spellcheck: false - }); - $.get(name, Conf[name], function(item) { - return ta.value = item[name]; - }); - $.on(ta, 'change', $.cb.value); - $.add(div, ta); - return; - } - return div.innerHTML = "
Filter is disabled.
\n

\n Use regular expressions, one per line.
\n Lines starting with a # will be ignored.
\n For example, /weeaboo/i will filter posts containing the string `weeaboo`, case-insensitive.
\n MD5 filtering uses exact string matching, not regular expressions.\n

\n
    You can use these settings with each regular expression, separate them with semicolons:\n
  • \n Per boards, separate them with commas. It is global if not specified.
    \n For example: boards:a,jp;.\n
  • \n
  • \n Filter OPs only along with their threads (`only`), replies only (`no`), or both (`yes`, this is default).
    \n For example: op:only;, op:no; or op:yes;.\n
  • \n
  • \n Overrule the `Show Stubs` setting if specified: create a stub (`yes`) or not (`no`).
    \n For example: stub:yes; or stub:no;.\n
  • \n
  • \n Highlight instead of hiding. You can specify a class name to use with a userstyle.
    \n For example: highlight; or highlight:wallpaper;.\n
  • \n
  • \n Highlighted OPs will have their threads put on top of board pages by default.
    \n For example: top:yes; or top:no;.\n
  • \n
"; - }, - sauce: function(section) { - var sauce; - - section.innerHTML = "
Sauce is disabled.
\n
Lines starting with a # will be ignored.
\n
You can specify a display text by appending ;text:[text] to the URL.
\n
    These parameters will be replaced by their corresponding values:\n
  • %TURL: Thumbnail URL.
  • \n
  • %URL: Full image URL.
  • \n
  • %MD5: MD5 hash.
  • \n
  • %board: Current board.
  • \n
\n"; - sauce = $('textarea', section); - $.get('sauces', Conf['sauces'], function(item) { - return sauce.value = item['sauces']; - }); - return $.on(sauce, 'change', $.cb.value); - }, - rice: function(section) { - var event, input, inputs, items, name, _i, _len, _ref; - - section.innerHTML = "
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n \n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Tab Icon is disabled.\n \n \n
\n\n
\n \n \n \n \n \n
"; - items = {}; - inputs = {}; - _ref = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - input = $("[name=" + name + "]", section); - items[name] = Conf[name]; - inputs[name] = input; - event = ['favicon', 'usercss'].contains(name) ? 'change' : 'input'; - $.on(input, event, $.cb.value); - } - $.get(items, function(items) { - var key, val; - - for (key in items) { - val = items[key]; - input = inputs[key]; - input.value = val; - if ('usercss' !== name) { - $.on(input, event, Settings[key]); - Settings[key].call(input); - } - } - }); - $.on($('input[name="Custom CSS"]', section), 'change', Settings.togglecss); - return $.on($.id('apply-css'), 'click', Settings.usercss); - }, - boardnav: function() { - return Header.generateBoardList(this.value); - }, - time: function() { - var funk; - - funk = Time.createFunc(this.value); - return this.nextElementSibling.textContent = funk(Time, new Date()); - }, - backlink: function() { - return this.nextElementSibling.textContent = Conf['backlink'].replace(/%id/, '123456789'); - }, - fileInfo: function() { - var data, funk; - - data = { - isReply: true, - file: { - URL: '//images.4chan.org/g/src/1334437723720.jpg', - name: 'd9bb2efc98dd0df141a94399ff5880b7.jpg', - size: '276 KB', - sizeInBytes: 276 * 1024, - dimensions: '1280x720', - isImage: true, - isSpoiler: true - } - }; - funk = FileInfo.createFunc(this.value); - return this.nextElementSibling.innerHTML = funk(FileInfo, data); - }, - favicon: function() { - Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Tab Icon']) { - Unread.update(); - } - return this.nextElementSibling.innerHTML = "\n\n\n"; - }, - togglecss: function() { - if ($('textarea[name=usercss]', $.x('ancestor::fieldset[1]', this)).disabled = !this.checked) { - CustomCSS.rmStyle(); - } else { - CustomCSS.addStyle(); - } - return $.cb.checked.call(this); - }, - usercss: function() { - return CustomCSS.update(); - }, - keybinds: function(section) { - var arr, input, inputs, items, key, tbody, tr, _ref; - - section.innerHTML = "
Keybinds are disabled.
\n
Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
\n
Press Backspace to disable a keybind.
\n\n \n
ActionsKeybinds
"; - tbody = $('tbody', section); - items = {}; - inputs = {}; - _ref = Config.hotkeys; - for (key in _ref) { - arr = _ref[key]; - tr = $.el('tr', { - innerHTML: "" + arr[1] + "" - }); - input = $('input', tr); - input.name = key; - input.spellcheck = false; - items[key] = Conf[key]; - inputs[key] = input; - $.on(input, 'keydown', Settings.keybind); - $.add(tbody, tr); - } - return $.get(items, function(items) { - var val; - - for (key in items) { - val = items[key]; - inputs[key].value = val; - } - }); - }, - keybind: function(e) { - var key; - - if (e.keyCode === 9) { - return; - } - e.preventDefault(); - e.stopPropagation(); - if ((key = Keybinds.keyCode(e)) == null) { - return; - } - this.value = key; - return $.cb.value.call(this); - } - }; - - PSAHiding = { - init: function() { - if (!Conf['Announcement Hiding']) { - return; - } - $.addClass(doc, 'hide-announcement'); - return $.on(d, '4chanXInitFinished', this.setup); - }, - setup: function() { - var btn, psa, text; - - $.off(d, '4chanXInitFinished', PSAHiding.setup); - if (!(psa = $.id('globalMessage'))) { - $.rmClass(doc, 'hide-announcement'); - return; - } - PSAHiding.btn = btn = $.el('a', { - title: 'Toggle announcement.', - href: 'javascript:;' - }); - $.on(btn, 'click', PSAHiding.toggle); - text = PSAHiding.trim(psa); - $.get('hiddenPSAs', [], function(item) { - PSAHiding.sync(item['hiddenPSAs']); - $.before(psa, btn); - return $.rmClass(doc, 'hide-announcement'); - }); - return $.sync('hiddenPSAs', PSAHiding.sync); - }, - toggle: function(e) { - var hide, text; - - hide = $.hasClass(this, 'hide-announcement'); - text = PSAHiding.trim($.id('globalMessage')); - return $.get('hiddenPSAs', [], function(item) { - var hiddenPSAs, i; - - hiddenPSAs = item.hiddenPSAs; - if (hide) { - hiddenPSAs.push(text); - } else { - i = hiddenPSAs.indexOf(text); - hiddenPSAs.splice(i, 1); - } - hiddenPSAs = hiddenPSAs.slice(-5); - PSAHiding.sync(hiddenPSAs); - return $.set('hiddenPSAs', hiddenPSAs); - }); - }, - sync: function(hiddenPSAs) { - var btn, psa, _ref, _ref1; - - btn = PSAHiding.btn; - psa = $.id('globalMessage'); - return _ref1 = (_ref = PSAHiding.trim(psa), __indexOf.call(hiddenPSAs, _ref) >= 0) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref1[0], btn.innerHTML = _ref1[1], btn.className = _ref1[2], _ref1; - }, - trim: function(psa) { - return psa.textContent.replace(/\W+/g, '').toLowerCase(); - } - }; - - Fourchan = { - init: function() { - var board; - - if (g.VIEW === 'catalog') { - return; - } - board = g.BOARD.ID; - if (board === 'g') { - $.globalEval("window.addEventListener('prettyprint', function(e) {\n var pre = e.detail;\n pre.innerHTML = prettyPrintOne(pre.innerHTML);\n}, false);"); - Post.prototype.callbacks.push({ - name: 'Parse /g/ code', - cb: this.code - }); - } - if (board === 'sci') { - $.globalEval("window.addEventListener('jsmath', function(e) {\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(e.detail);\n } else {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push('ProcessBeforeShowing', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);"); - return Post.prototype.callbacks.push({ - name: 'Parse /sci/ math', - cb: this.math - }); - } - }, - code: function() { - var pre, _i, _len, _ref; - - if (this.isClone) { - return; - } - _ref = $$('.prettyprint', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - pre = _ref[_i]; - $.event('prettyprint', pre, window); - } - }, - math: function() { - if (this.isClone || !$('.math', this.nodes.comment)) { - return; - } - return $.event('jsmath', this.nodes.post, window); - }, - parseThread: function(threadID, offset, limit) { - return $.event('4chanParsingDone', { - threadId: threadID, - offset: offset, - limit: limit - }); - } - }; - - CustomCSS = { - init: function() { - if (!Conf['Custom CSS']) { - return; - } - return this.addStyle(); - }, - addStyle: function() { - return this.style = $.addStyle(Conf['usercss']); - }, - rmStyle: function() { - if (this.style) { - $.rm(this.style); - return delete this.style; - } - }, - update: function() { - if (!this.style) { - this.addStyle(); - } - return this.style.textContent = Conf['usercss']; - } - }; - - Filter = { - filters: {}, - init: function() { - var boards, err, filter, hl, key, op, regexp, stub, top, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4; - - if (g.VIEW === 'catalog' || !Conf['Filter']) { - return; - } - for (key in Config.filter) { - this.filters[key] = []; - _ref = Conf[key].split('\n'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - filter = _ref[_i]; - if (filter[0] === '#') { - continue; - } - if (!(regexp = filter.match(/\/(.+)\/(\w*)/))) { - continue; - } - filter = filter.replace(regexp[0], ''); - boards = ((_ref1 = filter.match(/boards:([^;]+)/)) != null ? _ref1[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && !(boards.split(',')).contains(g.BOARD.ID)) { - continue; - } - if (['uniqueID', 'MD5'].contains(key)) { - regexp = regexp[1]; - } else { - try { - regexp = RegExp(regexp[1], regexp[2]); - } catch (_error) { - err = _error; - new Notification('warning', err.message, 60); - continue; - } - } - op = ((_ref2 = filter.match(/[^t]op:(yes|no|only)/)) != null ? _ref2[1] : void 0) || 'yes'; - stub = (function() { - var _ref3; - - switch ((_ref3 = filter.match(/stub:(yes|no)/)) != null ? _ref3[1] : void 0) { - case 'yes': - return true; - case 'no': - return false; - default: - return Conf['Stubs']; - } - })(); - if (hl = /highlight/.test(filter)) { - hl = ((_ref3 = filter.match(/highlight:(\w+)/)) != null ? _ref3[1] : void 0) || 'filter-highlight'; - top = ((_ref4 = filter.match(/top:(yes|no)/)) != null ? _ref4[1] : void 0) || 'yes'; - top = top === 'yes'; - } - this.filters[key].push(this.createFilter(regexp, op, stub, hl, top)); - } - if (!this.filters[key].length) { - delete this.filters[key]; - } - } - if (!Object.keys(this.filters).length) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Filter', - cb: this.node - }); - }, - createFilter: function(regexp, op, stub, hl, top) { - var settings, test; - - test = typeof regexp === 'string' ? function(value) { - return regexp === value; - } : function(value) { - return regexp.test(value); - }; - settings = { - hide: !hl, - stub: stub, - "class": hl, - top: top - }; - return function(value, isReply) { - if (isReply && op === 'only' || !isReply && op === 'no') { - return false; - } - if (!test(value)) { - return false; - } - return settings; - }; - }, - node: function() { - var filter, firstThread, key, result, thisThread, value, _i, _len, _ref; - - if (this.isClone) { - return; - } - for (key in Filter.filters) { - value = Filter[key](this); - if (value === false) { - continue; - } - _ref = Filter.filters[key]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - filter = _ref[_i]; - if (!(result = filter(value, this.isReply))) { - continue; - } - if (result.hide) { - if (this.isReply) { - PostHiding.hide(this, result.stub); - } else if (g.VIEW === 'index') { - ThreadHiding.hide(this.thread, result.stub); - } else { - continue; - } - return; - } - $.addClass(this.nodes.root, result["class"]); - if (!this.isReply && result.top && g.VIEW === 'index') { - thisThread = this.nodes.root.parentNode; - if (firstThread = $('div[class="postContainer opContainer"]')) { - if (firstThread !== this.nodes.root) { - $.before(firstThread.parentNode, [thisThread, thisThread.nextElementSibling]); - } - } - } - } - } - }, - name: function(post) { - if ('name' in post.info) { - return post.info.name; - } - return false; - }, - uniqueID: function(post) { - if ('uniqueID' in post.info) { - return post.info.uniqueID; - } - return false; - }, - tripcode: function(post) { - if ('tripcode' in post.info) { - return post.info.tripcode; - } - return false; - }, - capcode: function(post) { - if ('capcode' in post.info) { - return post.info.capcode; - } - return false; - }, - email: function(post) { - if ('email' in post.info) { - return post.info.email; - } - return false; - }, - subject: function(post) { - if ('subject' in post.info) { - return post.info.subject || false; - } - return false; - }, - comment: function(post) { - if ('comment' in post.info) { - return post.info.comment; - } - return false; - }, - flag: function(post) { - if ('flag' in post.info) { - return post.info.flag; - } - return false; - }, - filename: function(post) { - if (post.file) { - return post.file.name; - } - return false; - }, - dimensions: function(post) { - if (post.file && post.file.isImage) { - return post.file.dimensions; - } - return false; - }, - filesize: function(post) { - if (post.file) { - return post.file.size; - } - return false; - }, - MD5: function(post) { - if (post.file) { - return post.file.MD5; - } - return false; - }, - menu: { - init: function() { - var div, entry, type, _i, _len, _ref; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Filter']) { - return; - } - div = $.el('div', { - textContent: 'Filter' - }); - entry = { - type: 'post', - el: div, - order: 50, - open: function(post) { - Filter.menu.post = post; - return true; - }, - subEntries: [] - }; - _ref = [['Name', 'name'], ['Unique ID', 'uniqueID'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['E-mail', 'email'], ['Subject', 'subject'], ['Comment', 'comment'], ['Flag', 'flag'], ['Filename', 'filename'], ['Image dimensions', 'dimensions'], ['Filesize', 'filesize'], ['Image MD5', 'MD5']]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - type = _ref[_i]; - entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1])); - } - return $.event('AddMenuEntry', entry); - }, - createSubEntry: function(text, type) { - var el; - - el = $.el('a', { - href: 'javascript:;', - textContent: text - }); - el.setAttribute('data-type', type); - $.on(el, 'click', Filter.menu.makeFilter); - return { - el: el, - open: function(post) { - var value; - - value = Filter[type](post); - return value !== false; - } - }; - }, - makeFilter: function() { - var re, type, value; - - type = this.dataset.type; - value = Filter[type](Filter.menu.post); - re = ['uniqueID', 'MD5'].contains(type) ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { - if (c === '\n') { - return '\\n'; - } else if (c === '\\') { - return '\\\\'; - } else { - return "\\" + c; - } - }); - re = ['uniqueID', 'MD5'].contains(type) ? "/" + re + "/" : "/^" + re + "$/"; - return $.get(type, Conf[type], function(item) { - var save, section, select, ta, tl; - - save = item[type]; - save = save ? "" + save + "\n" + re : re; - $.set(type, save); - Settings.open('Filter'); - section = $('.section-container'); - select = $('select[name=filter]', section); - select.value = type; - Settings.selectFilter.call(select); - ta = $('textarea', section); - tl = ta.textLength; - ta.setSelectionRange(tl, tl); - return ta.focus(); - }); - } - } - }; - - ThreadHiding = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Hiding'] && !Conf['Thread Hiding Link']) { - return; - } - this.db = new DataBoard('hiddenThreads'); - this.syncCatalog(); - return Thread.prototype.callbacks.push({ - name: 'Thread Hiding', - cb: this.node - }); - }, - node: function() { - var data; - - if (data = ThreadHiding.db.get({ - boardID: this.board.ID, - threadID: this.ID - })) { - ThreadHiding.hide(this, data.makeStub); - } - if (!Conf['Thread Hiding']) { - return; - } - return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide')); - }, - syncCatalog: function() { - var e, hiddenThreads, hiddenThreadsOnCatalog, threadID; - - hiddenThreads = ThreadHiding.db.get({ - boardID: g.BOARD.ID, - defaultValue: {} - }); - try { - hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - } catch (_error) { - e = _error; - localStorage.setItem("4chan-hide-t-" + g.BOARD, JSON.stringify({})); - return ThreadHiding.syncCatalog(); - } - for (threadID in hiddenThreadsOnCatalog) { - if (!(threadID in hiddenThreads)) { - hiddenThreads[threadID] = {}; - } - } - for (threadID in hiddenThreads) { - if (!(threadID in hiddenThreadsOnCatalog)) { - delete hiddenThreads[threadID]; - } - } - if ((ThreadHiding.db.data.lastChecked || 0) > Date.now() - $.MINUTE) { - ThreadHiding.cleanCatalog(hiddenThreadsOnCatalog); - } - return ThreadHiding.db.set({ - boardID: g.BOARD.ID, - val: hiddenThreads - }); - }, - cleanCatalog: function(hiddenThreadsOnCatalog) { - return $.cache("//api.4chan.org/" + g.BOARD + "/threads.json", function() { - var page, thread, threads, _i, _j, _len, _len1, _ref, _ref1; - - if (this.status !== 200) { - return; - } - threads = {}; - _ref = JSON.parse(this.response); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - page = _ref[_i]; - _ref1 = page.threads; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - thread = _ref1[_j]; - if (thread.no in hiddenThreadsOnCatalog) { - threads[thread.no] = hiddenThreadsOnCatalog[thread.no]; - } - } - } - if (Object.keys(threads).length) { - return localStorage.setItem("4chan-hide-t-" + g.BOARD, JSON.stringify(threads)); - } else { - return localStorage.removeItem("4chan-hide-t-" + g.BOARD); - } - }); - }, - menu: { - init: function() { - var apply, div, makeStub; - - if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-thread-link', - textContent: 'Hide thread' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', ThreadHiding.menu.hide); - makeStub = $.el('label', { - innerHTML: " Make stub" - }); - return $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 20, - open: function(_arg) { - var isReply, thread; - - thread = _arg.thread, isReply = _arg.isReply; - if (isReply || thread.isHidden) { - return false; - } - ThreadHiding.menu.thread = thread; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: makeStub - } - ] - }); - }, - hide: function() { - var makeStub, thread; - - makeStub = $('input', this.parentNode).checked; - thread = ThreadHiding.menu.thread; - ThreadHiding.hide(thread, makeStub); - ThreadHiding.saveHiddenState(thread, makeStub); - return $.event('CloseMenu'); - } - }, - makeButton: function(thread, type) { - var a; - - a = $.el('a', { - className: "" + type + "-thread-button", - innerHTML: "[ " + (type === 'hide' ? '-' : '+') + " ]", - href: 'javascript:;' - }); - a.setAttribute('data-fullid', thread.fullID); - $.on(a, 'click', ThreadHiding.toggle); - return a; - }, - saveHiddenState: function(thread, makeStub) { - var hiddenThreadsOnCatalog; - - hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - if (thread.isHidden) { - ThreadHiding.db.set({ - boardID: thread.board.ID, - threadID: thread.ID, - val: { - makeStub: makeStub - } - }); - hiddenThreadsOnCatalog[thread] = true; - } else { - ThreadHiding.db["delete"]({ - boardID: thread.board.ID, - threadID: thread.ID - }); - delete hiddenThreadsOnCatalog[thread]; - } - return localStorage.setItem("4chan-hide-t-" + g.BOARD, JSON.stringify(hiddenThreadsOnCatalog)); - }, - toggle: function(thread) { - if (!(thread instanceof Thread)) { - thread = g.threads[this.dataset.fullid]; - } - if (thread.isHidden) { - ThreadHiding.show(thread); - } else { - ThreadHiding.hide(thread); - } - return ThreadHiding.saveHiddenState(thread); - }, - hide: function(thread, makeStub) { - var OP, a, numReplies, opInfo, span, threadRoot; - - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (thread.hidden) { - return; - } - OP = thread.OP; - threadRoot = OP.nodes.root.parentNode; - threadRoot.hidden = thread.isHidden = true; - if (!makeStub) { - threadRoot.nextElementSibling.hidden = true; - return; - } - numReplies = 0; - if (span = $('.summary', threadRoot)) { - numReplies = +span.textContent.match(/\d+/); - } - numReplies += $$('.opContainer ~ .replyContainer', threadRoot).length; - numReplies = numReplies === 1 ? '1 reply' : "" + numReplies + " replies"; - opInfo = Conf['Anonymize'] ? 'Anonymous' : $('.nameBlock', OP.nodes.info).textContent; - a = ThreadHiding.makeButton(thread, 'show'); - $.add(a, $.tn(" " + opInfo + " (" + numReplies + ")")); - thread.stub = $.el('div', { - className: 'stub' - }); - $.add(thread.stub, a); - if (Conf['Menu']) { - $.add(thread.stub, [$.tn(' '), Menu.makeButton(OP)]); - } - return $.before(threadRoot, thread.stub); - }, - show: function(thread) { - var threadRoot; - - if (thread.stub) { - $.rm(thread.stub); - delete thread.stub; - } - threadRoot = thread.OP.nodes.root.parentNode; - return threadRoot.nextElementSibling.hidden = threadRoot.hidden = thread.isHidden = false; - } - }; - - PostHiding = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link']) { - return; - } - this.db = new DataBoard('hiddenPosts'); - return Post.prototype.callbacks.push({ - name: 'Reply Hiding', - cb: this.node - }); - }, - node: function() { - var data; - - if (!this.isReply || this.isClone) { - return; - } - if (data = PostHiding.db.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - })) { - if (data.thisPost) { - PostHiding.hide(this, data.makeStub, data.hideRecursively); - } else { - Recursive.apply(PostHiding.hide, this, data.makeStub, true); - Recursive.add(PostHiding.hide, this, data.makeStub, true); - } - } - if (!Conf['Reply Hiding']) { - return; - } - return $.replace($('.sideArrows', this.nodes.root), PostHiding.makeButton(this, 'hide')); - }, - menu: { - init: function() { - var apply, div, makeStub, replies, thisPost; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Reply Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-reply-link', - textContent: 'Hide reply' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.hide); - thisPost = $.el('label', { - innerHTML: ' This post' - }); - replies = $.el('label', { - innerHTML: " Hide replies" - }); - makeStub = $.el('label', { - innerHTML: " Make stub" - }); - $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 20, - open: function(post) { - if (!post.isReply || post.isClone || post.isHidden) { - return false; - } - PostHiding.menu.post = post; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - }, { - el: makeStub - } - ] - }); - div = $.el('div', { - className: 'show-reply-link', - textContent: 'Show reply' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.show); - thisPost = $.el('label', { - innerHTML: ' This post' - }); - replies = $.el('label', { - innerHTML: " Show replies" - }); - return $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 20, - open: function(post) { - var data; - - if (!post.isReply || post.isClone || !post.isHidden) { - return false; - } - if (!(data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }))) { - return false; - } - PostHiding.menu.post = post; - thisPost.firstChild.checked = post.isHidden; - replies.firstChild.checked = (data != null ? data.hideRecursively : void 0) != null ? data.hideRecursively : Conf['Recursive Hiding']; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - } - ] - }); - }, - hide: function() { - var makeStub, parent, post, replies, thisPost; - - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - makeStub = $('input[name=makeStub]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.hide(post, makeStub, replies); - } else if (replies) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } else { - return; - } - PostHiding.saveHiddenState(post, true, thisPost, makeStub, replies); - return $.event('CloseMenu'); - }, - show: function() { - var data, parent, post, replies, thisPost; - - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.show(post, replies); - } else if (replies) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post, true); - } else { - return; - } - if (data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - })) { - PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); - } - return $.event('CloseMenu'); - } - }, - makeButton: function(post, type) { - var a; - - a = $.el('a', { - className: "" + type + "-reply-button", - innerHTML: "[ " + (type === 'hide' ? '-' : '+') + " ]", - href: 'javascript:;' - }); - $.on(a, 'click', PostHiding.toggle); - return a; - }, - saveHiddenState: function(post, isHiding, thisPost, makeStub, hideRecursively) { - var data; - - data = { - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }; - if (isHiding) { - data.val = { - thisPost: thisPost !== false, - makeStub: makeStub, - hideRecursively: hideRecursively - }; - return PostHiding.db.set(data); - } else { - return PostHiding.db["delete"](data); - } - }, - toggle: function() { - var post; - - post = Get.postFromNode(this); - if (post.isHidden) { - PostHiding.show(post); - } else { - PostHiding.hide(post); - } - return PostHiding.saveHiddenState(post, post.isHidden); - }, - hide: function(post, makeStub, hideRecursively) { - var a, postInfo, quotelink, _i, _len, _ref; - - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (hideRecursively == null) { - hideRecursively = Conf['Recursive Hiding']; - } - if (post.isHidden) { - return; - } - post.isHidden = true; - if (hideRecursively) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } - _ref = Get.allQuotelinksLinkingTo(post); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - $.addClass(quotelink, 'filtered'); - } - if (!makeStub) { - post.nodes.root.hidden = true; - return; - } - a = PostHiding.makeButton(post, 'show'); - postInfo = Conf['Anonymize'] ? 'Anonymous' : $('.nameBlock', post.nodes.info).textContent; - $.add(a, $.tn(" " + postInfo)); - post.nodes.stub = $.el('div', { - className: 'stub' - }); - $.add(post.nodes.stub, a); - if (Conf['Menu']) { - $.add(post.nodes.stub, [$.tn(' '), Menu.makeButton(post)]); - } - return $.prepend(post.nodes.root, post.nodes.stub); - }, - show: function(post, showRecursively) { - var quotelink, _i, _len, _ref; - - if (showRecursively == null) { - showRecursively = Conf['Recursive Hiding']; - } - if (post.nodes.stub) { - $.rm(post.nodes.stub); - delete post.nodes.stub; - } else { - post.nodes.root.hidden = false; - } - post.isHidden = false; - if (showRecursively) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post); - } - _ref = Get.allQuotelinksLinkingTo(post); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - $.rmClass(quotelink, 'filtered'); - } - } - }; - - Recursive = { - recursives: {}, - init: function() { - if (g.VIEW === 'catalog') { - return; - } - return Post.prototype.callbacks.push({ - name: 'Recursive', - cb: this.node - }); - }, - node: function() { - var i, obj, quote, recursive, _i, _j, _len, _len1, _ref, _ref1; - - if (this.isClone) { - return; - } - _ref = this.quotes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quote = _ref[_i]; - if (obj = Recursive.recursives[quote]) { - _ref1 = obj.recursives; - for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) { - recursive = _ref1[i]; - recursive.apply(null, [this].concat(__slice.call(obj.args[i]))); - } - } - } - }, - add: function() { - var args, obj, post, recursive, _base, _name; - - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; - obj = (_base = Recursive.recursives)[_name = post.fullID] || (_base[_name] = { - recursives: [], - args: [] - }); - obj.recursives.push(recursive); - return obj.args.push(args); - }, - rm: function(recursive, post) { - var i, obj, rec, _i, _len, _ref; - - if (!(obj = Recursive.recursives[post.fullID])) { - return; - } - _ref = obj.recursives; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - rec = _ref[i]; - if (rec === recursive) { - obj.recursives.splice(i, 1); - obj.args.splice(i, 1); - } - } - }, - apply: function() { - var ID, args, fullID, post, recursive, _ref; - - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; - fullID = post.fullID; - _ref = g.posts; - for (ID in _ref) { - post = _ref[ID]; - if (post.quotes.contains(fullID)) { - recursive.apply(null, [post].concat(__slice.call(args))); - } - } - } - }; - - QuoteStrikeThrough = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Strike-through Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, postID, quotelink, _i, _len, _ref, _ref1, _ref2; - - if (this.isClone) { - return; - } - _ref = this.nodes.quotelinks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - _ref1 = Get.postDataFromLink(quotelink), boardID = _ref1.boardID, postID = _ref1.postID; - if ((_ref2 = g.posts["" + boardID + "." + postID]) != null ? _ref2.isHidden : void 0) { - $.addClass(quotelink, 'filtered'); - } - } - } - }; - - Menu = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Menu']) { - return; - } - this.menu = new UI.Menu('post'); - return Post.prototype.callbacks.push({ - name: 'Menu', - cb: this.node - }); - }, - node: function() { - var button; - - button = Menu.makeButton(this); - if (this.isClone) { - $.replace($('.menu-button', this.nodes.info), button); - return; - } - return $.add(this.nodes.info, [$.tn('\u00A0'), button]); - }, - makeButton: (function() { - var a; - - a = null; - return function(post) { - var clone; - - a || (a = $.el('a', { - className: 'menu-button', - innerHTML: '[]', - href: 'javascript:;' - })); - clone = a.cloneNode(true); - clone.setAttribute('data-postid', post.fullID); - if (post.isClone) { - clone.setAttribute('data-clone', true); - } - $.on(clone, 'click', Menu.toggle); - return clone; - }; - })(), - toggle: function(e) { - var post; - - post = this.dataset.clone ? Get.postFromNode(this) : g.posts[this.dataset.postid]; - return Menu.menu.toggle(e, this, post); - } - }; - - ReportLink = { - init: function() { - var a; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Report Link']) { - return; - } - a = $.el('a', { - className: 'report-link', - href: 'javascript:;', - textContent: 'Report this post' - }); - $.on(a, 'click', ReportLink.report); - return $.event('AddMenuEntry', { - type: 'post', - el: a, - order: 10, - open: function(post) { - ReportLink.post = post; - return !post.isDead; - } - }); - }, - report: function() { - var id, post, set, url; - - post = ReportLink.post; - url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - id = Date.now(); - set = "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,resizable=1,width=685,height=200"; - return window.open(url, id, set); - } - }; - - DeleteLink = { - init: function() { - var div, fileEl, fileEntry, postEl, postEntry; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Delete Link']) { - return; - } - div = $.el('div', { - className: 'delete-link', - textContent: 'Delete' - }); - postEl = $.el('a', { - className: 'delete-post', - href: 'javascript:;' - }); - fileEl = $.el('a', { - className: 'delete-file', - href: 'javascript:;' - }); - postEntry = { - el: postEl, - open: function() { - postEl.textContent = 'Post'; - $.on(postEl, 'click', DeleteLink["delete"]); - return true; - } - }; - fileEntry = { - el: fileEl, - open: function(_arg) { - var file; - - file = _arg.file; - if (!file || file.isDead) { - return false; - } - fileEl.textContent = 'File'; - $.on(fileEl, 'click', DeleteLink["delete"]); - return true; - } - }; - return $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 40, - open: function(post) { - var node; - - if (post.isDead) { - return false; - } - DeleteLink.post = post; - node = div.firstChild; - node.textContent = 'Delete'; - DeleteLink.cooldown.start(post, node); - return true; - }, - subEntries: [postEntry, fileEntry] - }); - }, - "delete": function() { - var fileOnly, form, link, m, post, pwd; - - post = DeleteLink.post; - if (DeleteLink.cooldown.counting === post) { - return; - } - $.off(this, 'click', DeleteLink["delete"]); - this.textContent = "Deleting " + this.textContent + "..."; - pwd = (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $.id('delPassword').value; - fileOnly = $.hasClass(this, 'delete-file'); - form = { - mode: 'usrdel', - onlyimgdel: fileOnly, - pwd: pwd - }; - form[post.ID] = 'delete'; - link = this; - return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { - onload: function() { - return DeleteLink.load(link, post, fileOnly, this.response); - }, - onerror: function() { - return DeleteLink.error(link); - } - }, { - cred: true, - form: $.formData(form) - }); - }, - load: function(link, post, fileOnly, html) { - var msg, s, tmpDoc; - - tmpDoc = d.implementation.createHTMLDocument(''); - tmpDoc.documentElement.innerHTML = html; - if (tmpDoc.title === '4chan - Banned') { - s = 'Banned!'; - } else if (msg = tmpDoc.getElementById('errmsg')) { - s = msg.textContent; - $.on(link, 'click', DeleteLink["delete"]); - } else { - if (tmpDoc.title === 'Updating index...') { - (post.origin || post).kill(fileOnly); - } - s = 'Deleted'; - } - return link.textContent = s; - }, - error: function(link) { - link.textContent = 'Connection error, please retry.'; - return $.on(link, 'click', DeleteLink["delete"]); - }, - cooldown: { - start: function(post, node) { - var length, seconds, _ref; - - if (!((_ref = QR.db) != null ? _ref.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }) : void 0)) { - delete DeleteLink.cooldown.counting; - return; - } - DeleteLink.cooldown.counting = post; - length = post.board.ID === 'q' ? 600 : 30; - seconds = Math.ceil((length * $.SECOND - (Date.now() - post.info.date)) / $.SECOND); - return DeleteLink.cooldown.count(post, seconds, length, node); - }, - count: function(post, seconds, length, node) { - if (DeleteLink.cooldown.counting !== post) { - return; - } - if (!((0 <= seconds && seconds <= length))) { - if (DeleteLink.cooldown.counting === post) { - node.textContent = 'Delete'; - delete DeleteLink.cooldown.counting; - } - return; - } - setTimeout(DeleteLink.cooldown.count, 1000, post, seconds - 1, length, node); - return node.textContent = "Delete (" + seconds + ")"; - } - } - }; - - DownloadLink = { - init: function() { - var a; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Download Link']) { - return; - } - if (!('download' in $.el('a'))) { - return; - } - a = $.el('a', { - className: 'download-link', - textContent: 'Download file' - }); - return $.event('AddMenuEntry', { - type: 'post', - el: a, - order: 70, - open: function(_arg) { - var file; - - file = _arg.file; - if (!file) { - return false; - } - a.href = file.URL; - a.download = file.name; - return true; - } - }); - } - }; - - ArchiveLink = { - init: function() { - var div, entry, type, _i, _len, _ref; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Archive Link']) { - return; - } - div = $.el('div', { - textContent: 'Archive' - }); - entry = { - type: 'post', - el: div, - order: 90, - open: function(_arg) { - var ID, board, redirect, thread; - - ID = _arg.ID, thread = _arg.thread, board = _arg.board; - redirect = Redirect.to({ - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - return redirect !== ("//boards.4chan.org/" + board + "/"); - }, - subEntries: [] - }; - _ref = [['Post', 'post'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['E-mail', 'email'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'MD5']]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - type = _ref[_i]; - entry.subEntries.push(this.createSubEntry(type[0], type[1])); - } - return $.event('AddMenuEntry', entry); - }, - createSubEntry: function(text, type) { - var el, open; - - el = $.el('a', { - textContent: text, - target: '_blank' - }); - open = type === 'post' ? function(_arg) { - var ID, board, thread; - - ID = _arg.ID, thread = _arg.thread, board = _arg.board; - el.href = Redirect.to({ - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - return true; - } : function(post) { - var value; - - value = Filter[type](post); - if (!value) { - return false; - } - el.href = Redirect.to({ - boardID: post.board.ID, - type: type, - value: value, - isSearch: true - }); - return true; - }; - return { - el: el, - open: open - }; - } - }; - - Keybinds = { - init: function() { - var init; - - if (g.VIEW === 'catalog' || !Conf['Keybinds']) { - return; - } - init = function() { - var node, _i, _len, _ref; - - $.off(d, '4chanXInitFinished', init); - $.on(d, 'keydown', Keybinds.keydown); - _ref = $$('[accesskey]'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - node.removeAttribute('accesskey'); - } - }; - return $.on(d, '4chanXInitFinished', init); - }, - keydown: function(e) { - var form, key, notification, notifications, op, target, thread, threadRoot, _i, _len; - - if (!(key = Keybinds.keyCode(e))) { - return; - } - target = e.target; - if (['INPUT', 'TEXTAREA'].contains(target.nodeName)) { - if (!/(Esc|Alt|Ctrl|Meta)/.test(key)) { - return; - } - } - threadRoot = Nav.getThread(); - if (op = $('.op', threadRoot)) { - thread = Get.postFromNode(op).thread; - } - switch (key) { - case Conf['Toggle board list']: - if (Conf['Custom Board Navigation']) { - Header.toggleBoardList(); - } - break; - case Conf['Open empty QR']: - Keybinds.qr(threadRoot); - break; - case Conf['Open QR']: - Keybinds.qr(threadRoot, true); - break; - case Conf['Open settings']: - Settings.open(); - break; - case Conf['Close']: - if ($.id('fourchanx-settings')) { - Settings.close(); - } else if ((notifications = $$('.notification')).length) { - for (_i = 0, _len = notifications.length; _i < _len; _i++) { - notification = notifications[_i]; - $('.close', notification).click(); - } - } else if (QR.nodes) { - QR.close(); - } - break; - case Conf['Spoiler tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('spoiler', target); - break; - case Conf['Code tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('code', target); - break; - case Conf['Eqn tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('eqn', target); - break; - case Conf['Math tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('math', target); - break; - case Conf['Submit QR']: - if (QR.nodes && !QR.status()) { - QR.submit(); - } - break; - case Conf['Watch']: - ThreadWatcher.toggle(thread); - break; - case Conf['Update']: - ThreadUpdater.update(); - break; - case Conf['Expand image']: - Keybinds.img(threadRoot); - break; - case Conf['Expand images']: - Keybinds.img(threadRoot, true); - break; - case Conf['Front page']: - window.location = "/" + g.BOARD + "/0#delform"; - break; - case Conf['Open front page']: - $.open("/" + g.BOARD + "/#delform"); - break; - case Conf['Next page']: - if (form = $('.next form')) { - window.location = form.action; - } - break; - case Conf['Previous page']: - if (form = $('.prev form')) { - window.location = form.action; - } - break; - case Conf['Next thread']: - if (g.VIEW === 'thread') { - return; - } - Nav.scroll(+1); - break; - case Conf['Previous thread']: - if (g.VIEW === 'thread') { - return; - } - Nav.scroll(-1); - break; - case Conf['Expand thread']: - ExpandThread.toggle(thread); - break; - case Conf['Open thread']: - Keybinds.open(thread); - break; - case Conf['Open thread tab']: - Keybinds.open(thread, true); - break; - case Conf['Next reply']: - Keybinds.hl(+1, threadRoot); - break; - case Conf['Previous reply']: - Keybinds.hl(-1, threadRoot); - break; - case Conf['Hide']: - if (g.VIEW === 'index') { - ThreadHiding.toggle(thread); - } - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }, - keyCode: function(e) { - var kc, key; - - key = (function() { - switch (kc = e.keyCode) { - case 8: - return ''; - case 13: - return 'Enter'; - case 27: - return 'Esc'; - case 37: - return 'Left'; - case 38: - return 'Up'; - case 39: - return 'Right'; - case 40: - return 'Down'; - default: - if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { - return String.fromCharCode(kc).toLowerCase(); - } else { - return null; - } - } - })(); - if (key) { - if (e.altKey) { - key = 'Alt+' + key; - } - if (e.ctrlKey) { - key = 'Ctrl+' + key; - } - if (e.metaKey) { - key = 'Meta+' + key; - } - if (e.shiftKey) { - key = 'Shift+' + key; - } - } - return key; - }, - qr: function(thread, quote) { - if (!(Conf['Quick Reply'] && QR.postingIsEnabled)) { - return; - } - QR.open(); - if (quote) { - QR.quote.call($('input', $('.post.highlight', thread) || thread)); - } - return QR.nodes.com.focus(); - }, - tags: function(tag, ta) { - var range, selEnd, selStart, value; - - value = ta.value; - selStart = ta.selectionStart; - selEnd = ta.selectionEnd; - ta.value = value.slice(0, selStart) + ("[" + tag + "]") + value.slice(selStart, selEnd) + ("[/" + tag + "]") + value.slice(selEnd); - range = ("[" + tag + "]").length + selEnd; - ta.setSelectionRange(range, range); - return $.event('input', null, ta); - }, - img: function(thread, all) { - var post; - - if (all) { - return ImageExpand.cb.toggleAll(); - } else { - post = Get.postFromNode($('.post.highlight', thread) || $('.op', thread)); - return ImageExpand.toggle(post); - } - }, - open: function(thread, tab) { - var url; - - if (g.VIEW !== 'index') { - return; - } - url = "/" + thread.board + "/res/" + thread; - if (tab) { - return $.open(url); - } else { - return location.href = url; - } - }, - hl: function(delta, thread) { - var headRect, next, postEl, rect, replies, reply, root, topMargin, _i, _len; - - if (Conf['Fixed Header'] && Conf['Bottom header']) { - topMargin = 0; - } else { - headRect = Header.bar.getBoundingClientRect(); - topMargin = headRect.top + headRect.height; - } - if (postEl = $('.reply.highlight', thread)) { - $.rmClass(postEl, 'highlight'); - rect = postEl.getBoundingClientRect(); - if (rect.bottom >= topMargin && rect.top <= doc.clientHeight) { - root = postEl.parentNode; - next = $.x('child::div[contains(@class,"post reply")]', delta === +1 ? root.nextElementSibling : root.previousElementSibling); - if (!next) { - this.focus(postEl); - return; - } - if (!(g.VIEW === 'thread' || $.x('ancestor::div[parent::div[@class="board"]]', next) === thread)) { - return; - } - rect = next.getBoundingClientRect(); - if (rect.top < 0 || rect.bottom > doc.clientHeight) { - if (delta === -1) { - window.scrollBy(0, rect.top - topMargin); - } else { - next.scrollIntoView(false); - } - } - this.focus(next); - return; - } - } - replies = $$('.reply', thread); - if (delta === -1) { - replies.reverse(); - } - for (_i = 0, _len = replies.length; _i < _len; _i++) { - reply = replies[_i]; - rect = reply.getBoundingClientRect(); - if (delta === +1 && rect.top >= topMargin || delta === -1 && rect.bottom <= doc.clientHeight) { - this.focus(reply); - return; - } - } - }, - focus: function(post) { - return $.addClass(post, 'highlight'); - } - }; - - Nav = { - init: function() { - var append, next, prev, span; - - switch (g.VIEW) { - case 'index': - if (!Conf['Index Navigation']) { - return; - } - break; - case 'thread': - if (!Conf['Reply Navigation']) { - return; - } - break; - default: - return; - } - span = $.el('span', { - id: 'navlinks' - }); - prev = $.el('a', { - textContent: '▲', - href: 'javascript:;' - }); - next = $.el('a', { - textContent: '▼', - href: 'javascript:;' - }); - $.on(prev, 'click', this.prev); - $.on(next, 'click', this.next); - $.add(span, [prev, $.tn(' '), next]); - append = function() { - $.off(d, '4chanXInitFinished', append); - return $.add(d.body, span); - }; - return $.on(d, '4chanXInitFinished', append); - }, - prev: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, 0); - } else { - return Nav.scroll(-1); - } - }, - next: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, d.body.scrollHeight); - } else { - return Nav.scroll(+1); - } - }, - getThread: function(full) { - var headRect, i, rect, thread, threads, topMargin, _i, _len; - - if (Conf['Bottom header']) { - topMargin = 0; - } else { - headRect = Header.bar.getBoundingClientRect(); - topMargin = headRect.top + headRect.height; - } - threads = $$('.thread:not([hidden])'); - for (i = _i = 0, _len = threads.length; _i < _len; i = ++_i) { - thread = threads[i]; - rect = thread.getBoundingClientRect(); - if (rect.bottom > topMargin) { - if (full) { - return [threads, thread, i, rect, topMargin]; - } else { - return thread; - } - } - } - return $('.board'); - }, - scroll: function(delta) { - var i, rect, thread, threads, top, topMargin, _ref, _ref1; - - _ref = Nav.getThread(true), threads = _ref[0], thread = _ref[1], i = _ref[2], rect = _ref[3], topMargin = _ref[4]; - top = rect.top - topMargin; - if (!((delta === -1 && Math.ceil(top) < 0) || (delta === +1 && top > 1))) { - i += delta; - } - top = ((_ref1 = threads[i]) != null ? _ref1.getBoundingClientRect().top : void 0) - topMargin; - return window.scrollBy(0, top); - } - }; - - Redirect = { - image: function(boardID, filename) { - switch (boardID) { - case 'a': - case 'gd': - case 'jp': - case 'm': - case 'q': - case 'tg': - case 'vg': - case 'vp': - case 'vr': - case 'wsg': - return "//archive.foolz.us/" + boardID + "/full_image/" + filename; - case 'u': - return "//nsfw.foolz.us/" + boardID + "/full_image/" + filename; - case 'po': - return "//archive.thedarkcave.org/" + boardID + "/full_image/" + filename; - case 'ck': - case 'fa': - case 'lit': - case 's4s': - return "//fuuka.warosu.org/" + boardID + "/full_image/" + filename; - case 'cgl': - case 'g': - case 'mu': - case 'w': - return "//rbt.asia/" + boardID + "/full_image/" + filename; - case 'an': - case 'k': - case 'toy': - case 'x': - return "http://archive.heinessen.com/" + boardID + "/full_image/" + filename; - case 'c': - return "//archive.nyafuu.org/" + boardID + "/full_image/" + filename; - } - }, - post: function(boardID, postID) { - switch (boardID) { - case 'a': - case 'co': - case 'gd': - case 'jp': - case 'm': - case 'q': - case 'sp': - case 'tg': - case 'tv': - case 'v': - case 'vg': - case 'vp': - case 'vr': - case 'wsg': - return "https://archive.foolz.us/_/api/chan/post/?board=" + boardID + "&num=" + postID; - case 'u': - return "https://nsfw.foolz.us/_/api/chan/post/?board=" + boardID + "&num=" + postID; - case 'c': - case 'int': - case 'out': - case 'po': - return "//archive.thedarkcave.org/_/api/chan/post/?board=" + boardID + "&num=" + postID; - } - }, - to: function(data) { - var boardID; - - boardID = data.boardID; - switch (boardID) { - case 'a': - case 'co': - case 'gd': - case 'jp': - case 'm': - case 'q': - case 'sp': - case 'tg': - case 'tv': - case 'v': - case 'vg': - case 'vp': - case 'vr': - case 'wsg': - return Redirect.path('//archive.foolz.us', 'foolfuuka', data); - case 'u': - return Redirect.path('//nsfw.foolz.us', 'foolfuuka', data); - case 'int': - case 'out': - case 'po': - return Redirect.path('//archive.thedarkcave.org', 'foolfuuka', data); - case 'ck': - case 'fa': - case 'lit': - case 's4s': - return Redirect.path('//fuuka.warosu.org', 'fuuka', data); - case 'diy': - case 'g': - case 'sci': - return Redirect.path('//archive.installgentoo.net', 'fuuka', data); - case 'cgl': - case 'mu': - case 'w': - return Redirect.path('//rbt.asia', 'fuuka', data); - case 'an': - case 'fit': - case 'k': - case 'mlp': - case 'r9k': - case 'toy': - case 'x': - return Redirect.path('http://archive.heinessen.com', 'fuuka', data); - case 'c': - return Redirect.path('//archive.nyafuu.org', 'fuuka', data); - default: - if (data.threadID) { - return "//boards.4chan.org/" + boardID + "/"; - } else { - return ''; - } - } - }, - path: function(base, archiver, data) { - var boardID, path, postID, threadID, type, value; - - if (data.isSearch) { - boardID = data.boardID, type = data.type, value = data.value; - type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; - value = encodeURIComponent(value); - if (archiver === 'foolfuuka') { - return "" + base + "/" + boardID + "/search/" + type + "/" + value; - } else if (type === 'image') { - return "" + base + "/" + boardID + "/?task=search2&search_media_hash=" + value; - } else { - return "" + base + "/" + boardID + "/?task=search2&search_" + type + "=" + value; - } - } - boardID = data.boardID, threadID = data.threadID, postID = data.postID; - path = threadID ? "" + boardID + "/thread/" + threadID : "" + boardID + "/post/" + postID; - if (archiver === 'foolfuuka') { - path += '/'; - } - if (threadID && postID) { - path += archiver === 'foolfuuka' ? "#" + postID : "#p" + postID; - } - return "" + base + "/" + path; - } - }; - - Build = { - spoilerRange: {}, - shortFilename: function(filename, isReply) { - var threshold; - - threshold = isReply ? 30 : 40; - if (filename.length - 4 > threshold) { - return "" + filename.slice(0, threshold - 5) + "(...)." + filename.slice(-3); - } else { - return filename; - } - }, - postFromObject: function(data, boardID) { - var o; - - o = { - postID: data.no, - threadID: data.resto || data.no, - boardID: boardID, - name: data.name, - capcode: data.capcode, - tripcode: data.trip, - uniqueID: data.id, - email: data.email ? encodeURI(data.email.replace(/"/g, '"')) : '', - subject: data.sub, - flagCode: data.country, - flagName: data.country_name, - date: data.now, - dateUTC: data.time, - comment: data.com, - isSticky: !!data.sticky, - isClosed: !!data.closed - }; - if (data.ext || data.filedeleted) { - o.file = { - name: data.filename + data.ext, - timestamp: "" + data.tim + data.ext, - url: "//images.4chan.org/" + boardID + "/src/" + data.tim + data.ext, - height: data.h, - width: data.w, - MD5: data.md5, - size: data.fsize, - turl: "//thumbs.4chan.org/" + boardID + "/thumb/" + data.tim + "s.jpg", - theight: data.tn_h, - twidth: data.tn_w, - isSpoiler: !!data.spoiler, - isDeleted: !!data.filedeleted - }; - } - return Build.post(o); - }, - post: function(o, isArchived) { - /* - This function contains code from 4chan-JS (https://github.com/4chan/4chan-JS). - @license: https://github.com/4chan/4chan-JS/blob/master/LICENSE - */ - - var a, boardID, capcode, capcodeClass, capcodeStart, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref; - - postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, file = o.file; - isOP = postID === threadID; - staticPath = '//static.4chan.org'; - if (email) { - emailStart = ''; - emailEnd = ''; - } else { - emailStart = ''; - emailEnd = ''; - } - subject = "" + (subject || '') + ""; - userID = !capcode && uniqueID ? (" (ID: ") + ("" + uniqueID + ") ") : ''; - switch (capcode) { - case 'admin': - case 'admin_highlight': - capcodeClass = " capcodeAdmin"; - capcodeStart = " ## Admin"; - capcode = (" "; - break; - case 'mod': - capcodeClass = " capcodeMod"; - capcodeStart = " ## Mod"; - capcode = (" "; - break; - case 'developer': - capcodeClass = " capcodeDeveloper"; - capcodeStart = " ## Developer"; - capcode = (" "; - break; - default: - capcodeClass = ''; - capcodeStart = ''; - capcode = ''; - } - flag = flagCode ? ("  + flagCode + ") : ''; - if (file != null ? file.isDeleted : void 0) { - fileHTML = isOP ? ("
") + ("File deleted.") + "
" : ("
") + ("File deleted.") + "
"; - } else if (file) { - ext = file.name.slice(-3); - if (!file.twidth && !file.theight && ext === 'gif') { - file.twidth = file.width; - file.theight = file.height; - } - fileSize = $.bytesToString(file.size); - fileThumb = file.turl; - if (file.isSpoiler) { - fileSize = "Spoiler Image, " + fileSize; - if (!isArchived) { - fileThumb = '//static.4chan.org/image/spoiler'; - if (spoilerRange = Build.spoilerRange[boardID]) { - fileThumb += ("-" + boardID) + Math.floor(1 + spoilerRange * Math.random()); - } - fileThumb += '.png'; - file.twidth = file.theight = 100; - } - } - if (boardID.ID !== 'f') { - imgSrc = ("") + ("" + fileSize + ""); - } - a = $.el('a', { - innerHTML: file.name - }); - filename = a.textContent.replace(/%22/g, '"'); - a.textContent = Build.shortFilename(filename); - shortFilename = a.innerHTML; - a.textContent = filename; - filename = a.innerHTML.replace(/'/g, '''); - fileDims = ext === 'pdf' ? 'PDF' : "" + file.width + "x" + file.height; - fileInfo = ("File: " + file.timestamp + "") + ("-(" + fileSize + ", " + fileDims + (file.isSpoiler ? '' : ", " + shortFilename + "")) + ")"; - fileHTML = "
" + fileInfo + "
" + imgSrc + "
"; - } else { - fileHTML = ''; - } - tripcode = tripcode ? " " + tripcode + "" : ''; - sticky = isSticky ? ' Sticky' : ''; - closed = isClosed ? ' Closed' : ''; - container = $.el('div', { - id: "pc" + postID, - className: "postContainer " + (isOP ? 'op' : 'reply') + "Container", - innerHTML: (isOP ? '' : "
>>
") + ("
") + ("' + (isOP ? fileHTML : '') + ("' + (isOP ? '' : fileHTML) + ("
" + (comment || '') + "
") + '
' - }); - _ref = $$('.quotelink', container); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quote = _ref[_i]; - href = quote.getAttribute('href'); - if (href[0] === '/') { - continue; - } - quote.href = "/" + boardID + "/res/" + href; - } - return container; - } - }; - - Get = { - threadExcerpt: function(thread) { - var OP, excerpt, _ref; - - OP = thread.OP; - excerpt = ((_ref = OP.info.subject) != null ? _ref.trim() : void 0) || OP.info.comment.replace(/\n+/g, ' // ') || Conf['Anonymize'] && 'Anonymous' || $('.nameBlock', OP.nodes.info).textContent.trim(); - return "/" + thread.board + "/ - " + excerpt; - }, - postFromRoot: function(root) { - var boardID, index, link, post, postID; - - link = $('a[title="Highlight this post"]', root); - boardID = link.pathname.split('/')[1]; - postID = link.hash.slice(2); - index = root.dataset.clone; - post = g.posts["" + boardID + "." + postID]; - if (index) { - return post.clones[index]; - } else { - return post; - } - }, - postFromNode: function(root) { - return Get.postFromRoot($.x('ancestor::div[contains(@class,"postContainer")][1]', root)); - }, - contextFromLink: function(quotelink) { - return Get.postFromRoot($.x('ancestor::div[parent::div[@class="thread"]][1]', quotelink)); - }, - postDataFromLink: function(link) { - var boardID, path, postID, threadID; - - if (link.hostname === 'boards.4chan.org') { - path = link.pathname.split('/'); - boardID = path[1]; - threadID = path[3]; - postID = link.hash.slice(2); - } else { - boardID = link.dataset.boardid; - threadID = link.dataset.threadid || 0; - postID = link.dataset.postid; - } - return { - boardID: boardID, - threadID: +threadID, - postID: +postID - }; - }, - allQuotelinksLinkingTo: function(post) { - var ID, quote, quotedPost, quotelinks, quoterPost, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3; - - quotelinks = []; - _ref = g.posts; - for (ID in _ref) { - quoterPost = _ref[ID]; - if (quoterPost.quotes.contains(post.fullID)) { - _ref1 = [quoterPost].concat(quoterPost.clones); - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - quoterPost = _ref1[_i]; - quotelinks.push.apply(quotelinks, quoterPost.nodes.quotelinks); - } - } - } - if (Conf['Quote Backlinks']) { - _ref2 = post.quotes; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - quote = _ref2[_j]; - if (!(quotedPost = g.posts[quote])) { - continue; - } - _ref3 = [quotedPost].concat(quotedPost.clones); - for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { - quotedPost = _ref3[_k]; - quotelinks.push.apply(quotelinks, __slice.call(quotedPost.nodes.backlinks)); - } - } - } - return quotelinks.filter(function(quotelink) { - var boardID, postID, _ref4; - - _ref4 = Get.postDataFromLink(quotelink), boardID = _ref4.boardID, postID = _ref4.postID; - return boardID === post.board.ID && postID === post.ID; - }); - }, - postClone: function(boardID, threadID, postID, root, context) { - var post, url; - - if (post = g.posts["" + boardID + "." + postID]) { - Get.insert(post, root, context); - return; - } - root.textContent = "Loading post No." + postID + "..."; - if (threadID) { - return $.cache("//api.4chan.org/" + boardID + "/res/" + threadID + ".json", function() { - return Get.fetchedPost(this, boardID, threadID, postID, root, context); - }); - } else if (url = Redirect.post(boardID, postID)) { - return $.cache(url, function() { - return Get.archivedPost(this, boardID, postID, root, context); - }); - } - }, - insert: function(post, root, context) { - var clone, nodes; - - if (!root.parentNode) { - return; - } - clone = post.addClone(context); - Main.callbackNodes(Post, [clone]); - nodes = clone.nodes; - $.rmAll(nodes.root); - $.add(nodes.root, nodes.post); - $.rmAll(root); - return $.add(root, nodes.root); - }, - fetchedPost: function(req, boardID, threadID, postID, root, context) { - var board, post, posts, status, thread, url, _i, _len; - - if (post = g.posts["" + boardID + "." + postID]) { - Get.insert(post, root, context); - return; - } - status = req.status; - if (![200, 304].contains(status)) { - if (url = Redirect.post(boardID, postID)) { - $.cache(url, function() { - return Get.archivedPost(this, boardID, postID, root, context); - }); - } else { - $.addClass(root, 'warning'); - root.textContent = status === 404 ? "Thread No." + threadID + " 404'd." : "Error " + req.statusText + " (" + req.status + ")."; - } - return; - } - posts = JSON.parse(req.response).posts; - Build.spoilerRange[boardID] = posts[0].custom_spoiler; - for (_i = 0, _len = posts.length; _i < _len; _i++) { - post = posts[_i]; - if (post.no === postID) { - break; - } - if (post.no > postID) { - if (url = Redirect.post(boardID, postID)) { - $.cache(url, function() { - return Get.archivedPost(this, boardID, postID, root, context); - }); - } else { - $.addClass(root, 'warning'); - root.textContent = "Post No." + postID + " was not found."; - } - return; - } - } - board = g.boards[boardID] || new Board(boardID); - thread = g.threads["" + boardID + "." + threadID] || new Thread(threadID, board); - post = new Post(Build.postFromObject(post, boardID), thread, board); - Main.callbackNodes(Post, [post]); - return Get.insert(post, root, context); - }, - archivedPost: function(req, boardID, postID, root, context) { - var board, bq, comment, data, o, post, thread, threadID, _ref; - - if (post = g.posts["" + boardID + "." + postID]) { - Get.insert(post, root, context); - return; - } - data = JSON.parse(req.response); - if (data.error) { - $.addClass(root, 'warning'); - root.textContent = data.error; - return; - } - bq = $.el('blockquote', { - textContent: data.comment - }); - bq.innerHTML = bq.innerHTML.replace(/\n|\[\/?b\]|\[\/?spoiler\]|\[\/?code\]|\[\/?moot\]|\[\/?banned\]/g, function(text) { - switch (text) { - case '\n': - return '
'; - case '[b]': - return ''; - case '[/b]': - return ''; - case '[spoiler]': - return ''; - case '[/spoiler]': - return ''; - case '[code]': - return '
';
-          case '[/code]':
-            return '
'; - case '[moot]': - return '
'; - case '[/moot]': - return '
'; - case '[banned]': - return ''; - case '[/banned]': - return ''; - } - }); - comment = bq.innerHTML.replace(/(^|>)(>[^<$]*)(<|$)/g, '$1$2$3').replace(/((>){2}(>\/[a-z\d]+\/)?\d+)/g, '$1'); - threadID = data.thread_num; - o = { - postID: "" + postID, - threadID: "" + threadID, - boardID: boardID, - name: data.name_processed, - capcode: (function() { - switch (data.capcode) { - case 'M': - return 'mod'; - case 'A': - return 'admin'; - case 'D': - return 'developer'; - } - })(), - tripcode: data.trip, - uniqueID: data.poster_hash, - email: data.email ? encodeURI(data.email) : '', - subject: data.title_processed, - flagCode: data.poster_country, - flagName: data.poster_country_name_processed, - date: data.fourchan_date, - dateUTC: data.timestamp, - comment: comment - }; - if ((_ref = data.media) != null ? _ref.media_filename : void 0) { - o.file = { - name: data.media.media_filename_processed, - timestamp: data.media.media_orig, - url: data.media.media_link || data.media.remote_media_link, - height: data.media.media_h, - width: data.media.media_w, - MD5: data.media.media_hash, - size: data.media.media_size, - turl: data.media.thumb_link || ("//thumbs.4chan.org/" + boardID + "/thumb/" + data.media.preview_orig), - theight: data.media.preview_h, - twidth: data.media.preview_w, - isSpoiler: data.media.spoiler === '1' - }; - } - board = g.boards[boardID] || new Board(boardID); - thread = g.threads["" + boardID + "." + threadID] || new Thread(threadID, board); - post = new Post(Build.post(o, true), thread, board, { - isArchived: true - }); - Main.callbackNodes(Post, [post]); - return Get.insert(post, root, context); - } - }; - - Quotify = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Resurrect Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Resurrect Quotes', - cb: this.node - }); - }, - node: function() { - var deadlink, _i, _len, _ref; - - _ref = $$('.deadlink', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - deadlink = _ref[_i]; - if (this.isClone) { - if ($.hasClass(deadlink, 'quotelink')) { - this.nodes.quotelinks.push(deadlink); - } - } else { - Quotify.parseDeadlink.call(this, deadlink); - } - } - }, - parseDeadlink: function(deadlink) { - var a, boardID, m, post, postID, quote, quoteID, redirect, _ref; - - if (deadlink.parentNode.className === 'prettyprint') { - $.replace(deadlink, __slice.call(deadlink.childNodes)); - return; - } - quote = deadlink.textContent; - if (!(postID = (_ref = quote.match(/\d+$/)) != null ? _ref[0] : void 0)) { - return; - } - boardID = (m = quote.match(/^>>>\/([a-z\d]+)/)) ? m[1] : this.board.ID; - quoteID = "" + boardID + "." + postID; - if (post = g.posts[quoteID]) { - if (!post.isDead) { - a = $.el('a', { - href: "/" + boardID + "/" + post.thread + "/res/#p" + postID, - className: 'quotelink', - textContent: quote - }); - } else { - a = $.el('a', { - href: "/" + boardID + "/" + post.thread + "/res/#p" + postID, - className: 'quotelink deadlink', - target: '_blank', - textContent: "" + quote + "\u00A0(Dead)" - }); - a.setAttribute('data-boardid', boardID); - a.setAttribute('data-threadid', post.thread.ID); - a.setAttribute('data-postid', postID); - } - } else if (redirect = Redirect.to({ - boardID: boardID, - threadID: 0, - postID: postID - })) { - a = $.el('a', { - href: redirect, - className: 'deadlink', - target: '_blank', - textContent: "" + quote + "\u00A0(Dead)" - }); - if (Redirect.post(boardID, postID)) { - $.addClass(a, 'quotelink'); - a.setAttribute('data-boardid', boardID); - a.setAttribute('data-postid', postID); - } - } - if (__indexOf.call(this.quotes, quoteID) < 0) { - this.quotes.push(quoteID); - } - if (!a) { - deadlink.textContent = "" + quote + "\u00A0(Dead)"; - return; - } - $.replace(deadlink, a); - if ($.hasClass(a, 'quotelink')) { - return this.nodes.quotelinks.push(a); - } - } - }; - - QuoteInline = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Quote Inlining']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Quote Inlining', - cb: this.node - }); - }, - node: function() { - var link, _i, _len, _ref; - - _ref = this.nodes.quotelinks.concat(__slice.call(this.nodes.backlinks)); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - $.on(link, 'click', QuoteInline.toggle); - } - }, - toggle: function(e) { - var boardID, context, postID, threadID, _ref; - - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - e.preventDefault(); - _ref = Get.postDataFromLink(this), boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; - context = Get.contextFromLink(this); - if ($.hasClass(this, 'inlined')) { - QuoteInline.rm(this, boardID, threadID, postID, context); - } else { - if ($.x("ancestor::div[@id='p" + postID + "']", this)) { - return; - } - QuoteInline.add(this, boardID, threadID, postID, context); - } - return this.classList.toggle('inlined'); - }, - findRoot: function(quotelink, isBacklink) { - if (isBacklink) { - return quotelink.parentNode.parentNode; - } else { - return $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink); - } - }, - add: function(quotelink, boardID, threadID, postID, context) { - var inline, isBacklink, post; - - isBacklink = $.hasClass(quotelink, 'backlink'); - inline = $.el('div', { - id: "i" + postID, - className: 'inline' - }); - $.after(QuoteInline.findRoot(quotelink, isBacklink), inline); - Get.postClone(boardID, threadID, postID, inline, context); - if (!((post = g.posts["" + boardID + "." + postID]) && context.thread === post.thread)) { - return; - } - if (isBacklink && Conf['Forward Hiding']) { - $.addClass(post.nodes.root, 'forwarded'); - post.forwarded++ || (post.forwarded = 1); - } - if (!Unread.posts) { - return; - } - return Unread.readSinglePost(post); - }, - rm: function(quotelink, boardID, threadID, postID, context) { - var el, inlined, isBacklink, post, root, _ref; - - isBacklink = $.hasClass(quotelink, 'backlink'); - root = QuoteInline.findRoot(quotelink, isBacklink); - root = $.x("following-sibling::div[@id='i" + postID + "'][1]", root); - $.rm(root); - if (!(el = root.firstElementChild)) { - return; - } - post = g.posts["" + boardID + "." + postID]; - post.rmClone(el.dataset.clone); - if (Conf['Forward Hiding'] && isBacklink && context.thread === g.threads["" + boardID + "." + threadID] && !--post.forwarded) { - delete post.forwarded; - $.rmClass(post.nodes.root, 'forwarded'); - } - while (inlined = $('.inlined', el)) { - _ref = Get.postDataFromLink(inlined), boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; - QuoteInline.rm(inlined, boardID, threadID, postID, context); - $.rmClass(inlined, 'inlined'); - } - } - }; - - QuotePreview = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Quote Previewing']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Quote Previewing', - cb: this.node - }); - }, - node: function() { - var link, _i, _len, _ref; - - _ref = this.nodes.quotelinks.concat(__slice.call(this.nodes.backlinks)); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - $.on(link, 'mouseover', QuotePreview.mouseover); - } - }, - mouseover: function(e) { - var boardID, clone, origin, post, postID, posts, qp, quote, quoterID, threadID, _i, _j, _len, _len1, _ref, _ref1; - - if ($.hasClass(this, 'inlined')) { - return; - } - _ref = Get.postDataFromLink(this), boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; - qp = $.el('div', { - id: 'qp', - className: 'dialog' - }); - $.add(Header.hover, qp); - Get.postClone(boardID, threadID, postID, qp, Get.contextFromLink(this)); - UI.hover({ - root: this, - el: qp, - latestEvent: e, - endEvents: 'mouseout click', - cb: QuotePreview.mouseout, - asapTest: function() { - return qp.firstElementChild; - } - }); - if (!(origin = g.posts["" + boardID + "." + postID])) { - return; - } - if (Conf['Quote Highlighting']) { - posts = [origin].concat(origin.clones); - posts.pop(); - for (_i = 0, _len = posts.length; _i < _len; _i++) { - post = posts[_i]; - $.addClass(post.nodes.post, 'qphl'); - } - } - quoterID = $.x('ancestor::*[@id][1]', this).id.match(/\d+$/)[0]; - clone = Get.postFromRoot(qp.firstChild); - _ref1 = clone.nodes.quotelinks.concat(__slice.call(clone.nodes.backlinks)); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - quote = _ref1[_j]; - if (quote.hash.slice(2) === quoterID) { - $.addClass(quote, 'forwardlink'); - } - } - }, - mouseout: function() { - var clone, post, root, _i, _len, _ref; - - if (!(root = this.el.firstElementChild)) { - return; - } - clone = Get.postFromRoot(root); - post = clone.origin; - post.rmClone(root.dataset.clone); - if (!Conf['Quote Highlighting']) { - return; - } - _ref = [post].concat(post.clones); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - post = _ref[_i]; - $.rmClass(post.nodes.post, 'qphl'); - } - } - }; - - QuoteBacklink = { - init: function() { - var format; - - if (g.VIEW === 'catalog' || !Conf['Quote Backlinks']) { - return; - } - format = Conf['backlink'].replace(/%id/g, "' + id + '"); - this.funk = Function('id', "return '" + format + "'"); - this.containers = {}; - Post.prototype.callbacks.push({ - name: 'Quote Backlinking Part 1', - cb: this.firstNode - }); - return Post.prototype.callbacks.push({ - name: 'Quote Backlinking Part 2', - cb: this.secondNode - }); - }, - firstNode: function() { - var a, clone, container, containers, link, post, quote, _i, _j, _k, _len, _len1, _len2, _ref, _ref1; - - if (this.isClone || !this.quotes.length) { - return; - } - a = $.el('a', { - href: "/" + this.board + "/res/" + this.thread + "#p" + this, - className: this.isHidden ? 'filtered backlink' : 'backlink', - textContent: (QuoteBacklink.funk(this.ID)) + (Conf['Mark Quotes of You'] && this.info.yours ? QuoteYou.text : '') - }); - _ref = this.quotes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quote = _ref[_i]; - containers = [QuoteBacklink.getContainer(quote)]; - if ((post = g.posts[quote]) && post.nodes.backlinkContainer) { - _ref1 = post.clones; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - clone = _ref1[_j]; - containers.push(clone.nodes.backlinkContainer); - } - } - for (_k = 0, _len2 = containers.length; _k < _len2; _k++) { - container = containers[_k]; - link = a.cloneNode(true); - if (Conf['Quote Previewing']) { - $.on(link, 'mouseover', QuotePreview.mouseover); - } - if (Conf['Quote Inlining']) { - $.on(link, 'click', QuoteInline.toggle); - } - $.add(container, [$.tn(' '), link]); - } - } - }, - secondNode: function() { - var container; - - if (this.isClone && (this.origin.isReply || Conf['OP Backlinks'])) { - this.nodes.backlinkContainer = $('.container', this.nodes.info); - return; - } - if (!(this.isReply || Conf['OP Backlinks'])) { - return; - } - container = QuoteBacklink.getContainer(this.fullID); - this.nodes.backlinkContainer = container; - return $.add(this.nodes.info, container); - }, - getContainer: function(id) { - var _base; - - return (_base = this.containers)[id] || (_base[id] = $.el('span', { - className: 'container' - })); - } - }; - - QuoteYou = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Mark Quotes of You'] || !Conf['Quick Reply']) { - return; - } - this.text = '\u00A0(You)'; - return Post.prototype.callbacks.push({ - name: 'Mark Quotes of You', - cb: this.node - }); - }, - node: function() { - var quotelink, quotelinks, quotes, _i, _len; - - if (this.isClone) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { - quotelink = quotelinks[_i]; - if (QR.db.get(Get.postDataFromLink(quotelink))) { - $.add(quotelink, $.tn(QuoteYou.text)); - } - } - } - }; - - QuoteOP = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Mark OP Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(OP)'; - return Post.prototype.callbacks.push({ - name: 'Mark OP Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, op, postID, quotelink, quotelinks, quotes, _i, _j, _len, _len1, _ref; - - if (this.isClone && this.thread === this.context.thread) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - if (this.isClone && quotes.contains(this.thread.fullID)) { - for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { - quotelink = quotelinks[_i]; - quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); - } - } - op = (this.isClone ? this.context : this).thread.fullID; - if (!quotes.contains(op)) { - return; - } - for (_j = 0, _len1 = quotelinks.length; _j < _len1; _j++) { - quotelink = quotelinks[_j]; - _ref = Get.postDataFromLink(quotelink), boardID = _ref.boardID, postID = _ref.postID; - if (("" + boardID + "." + postID) === op) { - $.add(quotelink, $.tn(QuoteOP.text)); - } - } - } - }; - - QuoteCT = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Mark Cross-thread Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(Cross-thread)'; - return Post.prototype.callbacks.push({ - name: 'Mark Cross-thread Quotes', - cb: this.node - }); - }, - node: function() { - var board, boardID, quotelink, quotelinks, quotes, thread, threadID, _i, _len, _ref, _ref1; - - if (this.isClone && this.thread === this.context.thread) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - _ref = this.isClone ? this.context : this, board = _ref.board, thread = _ref.thread; - for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { - quotelink = quotelinks[_i]; - _ref1 = Get.postDataFromLink(quotelink), boardID = _ref1.boardID, threadID = _ref1.threadID; - if (!threadID) { - continue; - } - if (this.isClone) { - quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); - } - if (boardID === this.board.ID && threadID !== thread.ID) { - $.add(quotelink, $.tn(QuoteCT.text)); - } - } - } - }; - - Anonymize = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Anonymize']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Anonymize', - cb: this.node - }); - }, - node: function() { - var email, name, tripcode, _ref; - - if (this.info.capcode || this.isClone) { - return; - } - _ref = this.nodes, name = _ref.name, tripcode = _ref.tripcode, email = _ref.email; - if (this.info.name !== 'Anonymous') { - name.textContent = 'Anonymous'; - } - if (tripcode) { - $.rm(tripcode); - delete this.nodes.tripcode; - } - if (this.info.email) { - if (/sage/i.test(this.info.email)) { - return email.href = 'mailto:sage'; - } else { - $.replace(email, name); - return delete this.nodes.email; - } - } - } - }; - - Time = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Time Formatting']) { - return; - } - this.funk = this.createFunc(Conf['time']); - return Post.prototype.callbacks.push({ - name: 'Time Formatting', - cb: this.node - }); - }, - node: function() { - if (this.isClone) { - return; - } - return this.nodes.date.textContent = Time.funk(Time, this.info.date); - }, - createFunc: function(format) { - var code; - - code = format.replace(/%([A-Za-z])/g, function(s, c) { - if (c in Time.formatters) { - return "' + Time.formatters." + c + ".call(date) + '"; - } else { - return s; - } - }); - return Function('Time', 'date', "return '" + code + "'"); - }, - day: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - zeroPad: function(n) { - if (n < 10) { - return "0" + n; - } else { - return n; - } - }, - formatters: { - a: function() { - return Time.day[this.getDay()].slice(0, 3); - }, - A: function() { - return Time.day[this.getDay()]; - }, - b: function() { - return Time.month[this.getMonth()].slice(0, 3); - }, - B: function() { - return Time.month[this.getMonth()]; - }, - d: function() { - return Time.zeroPad(this.getDate()); - }, - e: function() { - return this.getDate(); - }, - H: function() { - return Time.zeroPad(this.getHours()); - }, - I: function() { - return Time.zeroPad(this.getHours() % 12 || 12); - }, - k: function() { - return this.getHours(); - }, - l: function() { - return this.getHours() % 12 || 12; - }, - m: function() { - return Time.zeroPad(this.getMonth() + 1); - }, - M: function() { - return Time.zeroPad(this.getMinutes()); - }, - p: function() { - if (this.getHours() < 12) { - return 'AM'; - } else { - return 'PM'; - } - }, - P: function() { - if (this.getHours() < 12) { - return 'am'; - } else { - return 'pm'; - } - }, - S: function() { - return Time.zeroPad(this.getSeconds()); - }, - y: function() { - return this.getFullYear() - 2000; - } - } - }; - - RelativeDates = { - INTERVAL: $.MINUTE / 2, - init: function() { - if (g.VIEW === 'catalog' || !Conf['Relative Post Dates']) { - return; - } - $.on(d, 'visibilitychange ThreadUpdate', this.flush); - this.flush(); - return Post.prototype.callbacks.push({ - name: 'Relative Post Dates', - cb: this.node - }); - }, - node: function() { - var dateEl; - - if (this.isClone) { - return; - } - dateEl = this.nodes.date; - dateEl.title = dateEl.textContent; - return RelativeDates.setUpdate(this); - }, - relative: function(diff, now, date) { - var days, months, number, rounded, unit, years; - - unit = (number = diff / $.DAY) >= 1 ? (years = now.getYear() - date.getYear(), months = now.getMonth() - date.getMonth(), days = now.getDate() - date.getDate(), years > 1 ? (number = years - (months < 0 || months === 0 && days < 0), 'year') : years === 1 && (months > 0 || months === 0 && days >= 0) ? (number = years, 'year') : (months = (months + 12) % 12) > 1 ? (number = months - (days < 0), 'month') : months === 1 && days >= 0 ? (number = months, 'month') : 'day') : (number = diff / $.HOUR) >= 1 ? 'hour' : (number = diff / $.MINUTE) >= 1 ? 'minute' : (number = Math.max(0, diff) / $.SECOND, 'second'); - rounded = Math.round(number); - if (rounded !== 1) { - unit += 's'; - } - return "" + rounded + " " + unit + " ago"; - }, - stale: [], - flush: function() { - var now, update, _i, _len, _ref; - - if (d.hidden) { - return; - } - now = new Date(); - _ref = RelativeDates.stale; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - update = _ref[_i]; - update(now); - } - RelativeDates.stale = []; - clearTimeout(RelativeDates.timeout); - return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); - }, - setUpdate: function(post) { - var markStale, setOwnTimeout, update; - - setOwnTimeout = function(diff) { - var delay; - - delay = diff < $.MINUTE ? $.SECOND - (diff + $.SECOND / 2) % $.SECOND : diff < $.HOUR ? $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE : diff < $.DAY ? $.HOUR - (diff + $.HOUR / 2) % $.HOUR : $.DAY - (diff + $.DAY / 2) % $.DAY; - return setTimeout(markStale, delay); - }; - update = function(now) { - var date, diff, relative, singlePost, _i, _len, _ref; - - date = post.info.date; - diff = now - date; - relative = RelativeDates.relative(diff, now, date); - _ref = [post].concat(post.clones); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - singlePost = _ref[_i]; - singlePost.nodes.date.firstChild.textContent = relative; - } - return setOwnTimeout(diff); - }; - markStale = function() { - return RelativeDates.stale.push(update); - }; - return update(new Date()); - } - }; - - FileInfo = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['File Info Formatting']) { - return; - } - this.funk = this.createFunc(Conf['fileInfo']); - return Post.prototype.callbacks.push({ - name: 'File Info Formatting', - cb: this.node - }); - }, - node: function() { - if (!this.file || this.isClone) { - return; - } - return this.file.text.innerHTML = FileInfo.funk(FileInfo, this); - }, - createFunc: function(format) { - var code; - - code = format.replace(/%(.)/g, function(s, c) { - if (c in FileInfo.formatters) { - return "' + FileInfo.formatters." + c + ".call(post) + '"; - } else { - return s; - } - }); - return Function('FileInfo', 'post', "return '" + code + "'"); - }, - convertUnit: function(size, unit) { - var i; - - if (unit === 'B') { - return "" + (size.toFixed()) + " Bytes"; - } - i = 1 + ['KB', 'MB'].indexOf(unit); - while (i--) { - size /= 1024; - } - size = unit === 'MB' ? Math.round(size * 100) / 100 : size.toFixed(); - return "" + size + " " + unit; - }, - escape: function(name) { - return name.replace(/<|>/g, function(c) { - return c === '<' && '<' || '>'; - }); - }, - formatters: { - t: function() { - return this.file.URL.match(/\d+\..+$/)[0]; - }, - T: function() { - return "" + (FileInfo.formatters.t.call(this)) + ""; - }, - l: function() { - return "" + (FileInfo.formatters.n.call(this)) + ""; - }, - L: function() { - return "" + (FileInfo.formatters.N.call(this)) + ""; - }, - n: function() { - var fullname, shortname; - - fullname = this.file.name; - shortname = Build.shortFilename(this.file.name, this.isReply); - if (fullname === shortname) { - return FileInfo.escape(fullname); - } else { - return "" + (FileInfo.escape(shortname)) + "" + (FileInfo.escape(fullname)) + ""; - } - }, - N: function() { - return FileInfo.escape(this.file.name); - }, - p: function() { - if (this.file.isSpoiler) { - return 'Spoiler, '; - } else { - return ''; - } - }, - s: function() { - return this.file.size; - }, - B: function() { - return FileInfo.convertUnit(this.file.sizeInBytes, 'B'); - }, - K: function() { - return FileInfo.convertUnit(this.file.sizeInBytes, 'KB'); - }, - M: function() { - return FileInfo.convertUnit(this.file.sizeInBytes, 'MB'); - }, - r: function() { - if (this.file.isImage) { - return this.file.dimensions; - } else { - return 'PDF'; - } - } - } - }; - - Sauce = { - init: function() { - var link, links, _i, _len, _ref; - - if (g.VIEW === 'catalog' || !Conf['Sauce']) { - return; - } - links = []; - _ref = Conf['sauces'].split('\n'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - if (link[0] === '#') { - continue; - } - links.push(this.createSauceLink(link.trim())); - } - if (!links.length) { - return; - } - this.links = links; - this.link = $.el('a', { - target: '_blank' - }); - return Post.prototype.callbacks.push({ - name: 'Sauce', - cb: this.node - }); - }, - createSauceLink: function(link) { - var m, text; - - link = link.replace(/%(T?URL|MD5|board)/ig, function(parameter) { - switch (parameter) { - case '%TURL': - return "' + encodeURIComponent(post.file.thumbURL) + '"; - case '%URL': - return "' + encodeURIComponent(post.file.URL) + '"; - case '%MD5': - return "' + encodeURIComponent(post.file.MD5) + '"; - case '%board': - return "' + encodeURIComponent(post.board) + '"; - default: - return parameter; - } - }); - text = (m = link.match(/;text:(.+)$/)) ? m[1] : link.match(/(\w+)\.\w+\//)[1]; - link = link.replace(/;text:.+$/, ''); - return Function('post', 'a', "a.href = '" + link + "';\na.textContent = '" + text + "';\nreturn a;"); - }, - node: function() { - var link, nodes, _i, _len, _ref; - - if (this.isClone || !this.file) { - return; - } - nodes = []; - _ref = Sauce.links; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - nodes.push($.tn('\u00A0'), link(this, Sauce.link.cloneNode(true))); - } - return $.add(this.file.info, nodes); - } - }; - - ImageExpand = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Image Expansion']) { - return; - } - this.EAI = $.el('a', { - className: 'expand-all-shortcut', - textContent: 'EAI', - title: 'Expand All Images', - href: 'javascript:;' - }); - $.on(this.EAI, 'click', ImageExpand.cb.toggleAll); - Header.addShortcut(this.EAI); - return Post.prototype.callbacks.push({ - name: 'Image Expansion', - cb: this.node - }); - }, - node: function() { - var thumb, _ref; - - if (!((_ref = this.file) != null ? _ref.isImage : void 0)) { - return; - } - thumb = this.file.thumb; - $.on(thumb.parentNode, 'click', ImageExpand.cb.toggle); - if (this.isClone && $.hasClass(thumb, 'expanding')) { - ImageExpand.contract(this); - ImageExpand.expand(this); - return; - } - if (ImageExpand.on && !this.isHidden) { - return ImageExpand.expand(this); - } - }, - cb: { - toggle: function(e) { - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - e.preventDefault(); - return ImageExpand.toggle(Get.postFromNode(this)); - }, - toggleAll: function() { - var ID, file, func, post, _i, _len, _ref, _ref1; - - $.event('CloseMenu'); - if (ImageExpand.on = $.hasClass(ImageExpand.EAI, 'expand-all-shortcut')) { - ImageExpand.EAI.className = 'contract-all-shortcut'; - ImageExpand.EAI.title = 'Contract All Images'; - func = ImageExpand.expand; - } else { - ImageExpand.EAI.className = 'expand-all-shortcut'; - ImageExpand.EAI.title = 'Expand All Images'; - func = ImageExpand.contract; - } - _ref = g.posts; - for (ID in _ref) { - post = _ref[ID]; - _ref1 = [post].concat(post.clones); - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - post = _ref1[_i]; - file = post.file; - if (!(file && file.isImage && doc.contains(post.nodes.root))) { - continue; - } - if (ImageExpand.on && (!Conf['Expand spoilers'] && file.isSpoiler || Conf['Expand from here'] && file.thumb.getBoundingClientRect().top < 0)) { - continue; - } - $.queueTask(func, post); - } - } - }, - setFitness: function() { - var checked; - - checked = this.checked; - (checked ? $.addClass : $.rmClass)(doc, this.name.toLowerCase().replace(/\s+/g, '-')); - if (this.name !== 'Fit height') { - return; - } - if (checked) { - $.on(window, 'resize', ImageExpand.resize); - if (!ImageExpand.style) { - ImageExpand.style = $.addStyle(null); - } - return ImageExpand.resize(); - } else { - return $.off(window, 'resize', ImageExpand.resize); - } - } - }, - toggle: function(post) { - var headRect, rect, root, thumb, top; - - thumb = post.file.thumb; - if (!(post.file.isExpanded || $.hasClass(thumb, 'expanding'))) { - ImageExpand.expand(post); - return; - } - ImageExpand.contract(post); - rect = post.nodes.root.getBoundingClientRect(); - if (!(rect.top <= 0 || rect.left <= 0)) { - return; - } - headRect = Header.bar.getBoundingClientRect(); - top = rect.top - headRect.top - headRect.height; - root = doc; - if (rect.top < 0) { - root.scrollTop += top; - } - if (rect.left < 0) { - return root.scrollLeft = 0; - } - }, - contract: function(post) { - $.rmClass(post.nodes.root, 'expanded-image'); - $.rmClass(post.file.thumb, 'expanding'); - return post.file.isExpanded = false; - }, - expand: function(post, src) { - var img, thumb; - - thumb = post.file.thumb; - if (post.isHidden || post.file.isExpanded || $.hasClass(thumb, 'expanding')) { - return; - } - $.addClass(thumb, 'expanding'); - if (post.file.fullImage) { - $.asap((function() { - return post.file.fullImage.naturalHeight; - }), function() { - return ImageExpand.completeExpand(post); - }); - return; - } - post.file.fullImage = img = $.el('img', { - className: 'full-image', - src: src || post.file.URL - }); - $.on(img, 'error', ImageExpand.error); - $.asap((function() { - return post.file.fullImage.naturalHeight; - }), function() { - return ImageExpand.completeExpand(post); - }); - return $.after(thumb, img); - }, - completeExpand: function(post) { - var prev, thumb; - - thumb = post.file.thumb; - if (!$.hasClass(thumb, 'expanding')) { - return; - } - post.file.isExpanded = true; - if (!post.nodes.root.parentNode) { - $.addClass(post.nodes.root, 'expanded-image'); - $.rmClass(post.file.thumb, 'expanding'); - return; - } - prev = post.nodes.root.getBoundingClientRect(); - return $.queueTask(function() { - var curr, root; - - $.addClass(post.nodes.root, 'expanded-image'); - $.rmClass(post.file.thumb, 'expanding'); - if (!(prev.top + prev.height <= 0)) { - return; - } - root = doc; - curr = post.nodes.root.getBoundingClientRect(); - return root.scrollTop += curr.height - prev.height + curr.top - prev.top; - }); - }, - error: function() { - var URL, post, src, timeoutID; - - post = Get.postFromNode(this); - $.rm(this); - delete post.file.fullImage; - if (!($.hasClass(post.file.thumb, 'expanding') || $.hasClass(post.nodes.root, 'expanded-image'))) { - return; - } - ImageExpand.contract(post); - src = this.src.split('/'); - if (src[2] === 'images.4chan.org') { - if (URL = Redirect.image(src[3], src[5])) { - setTimeout(ImageExpand.expand, 10000, post, URL); - return; - } - if (g.DEAD || post.isDead || post.file.isDead) { - return; - } - } - timeoutID = setTimeout(ImageExpand.expand, 10000, post); - return $.ajax("//api.4chan.org/" + post.board + "/res/" + post.thread + ".json", { - onload: function() { - var postObj, _i, _len, _ref; - - if (this.status !== 200) { - return; - } - _ref = JSON.parse(this.response).posts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - postObj = _ref[_i]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - clearTimeout(timeoutID); - return post.kill(); - } else if (postObj.filedeleted) { - clearTimeout(timeoutID); - return post.kill(true); - } - } - }); - }, - menu: { - init: function() { - var conf, createSubEntry, el, key, subEntries, _ref; - - if (g.VIEW === 'catalog' || !Conf['Image Expansion']) { - return; - } - el = $.el('span', { - textContent: 'Image Expansion', - className: 'image-expansion-link' - }); - createSubEntry = ImageExpand.menu.createSubEntry; - subEntries = []; - _ref = Config.imageExpansion; - for (key in _ref) { - conf = _ref[key]; - subEntries.push(createSubEntry(key, conf)); - } - return $.event('AddMenuEntry', { - type: 'header', - el: el, - order: 80, - subEntries: subEntries - }); - }, - createSubEntry: function(type, config) { - var input, label; - - label = $.el('label', { - innerHTML: " " + type - }); - input = label.firstElementChild; - if (type === 'Fit width' || type === 'Fit height') { - $.on(input, 'change', ImageExpand.cb.setFitness); - } - if (config) { - label.title = config[1]; - input.checked = Conf[type]; - $.event('change', null, input); - $.on(input, 'change', $.cb.checked); - } - return { - el: label - }; - } - }, - resize: function() { - return ImageExpand.style.textContent = ":root.fit-height .full-image {max-height:" + doc.clientHeight + "px}"; - }, - menuToggle: function(e) { - return ImageExpand.opmenu.toggle(e, this, g); - } - }; - - RevealSpoilers = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Reveal Spoilers']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Reveal Spoilers', - cb: this.node - }); - }, - node: function() { - var thumb, _ref; - - if (this.isClone || !((_ref = this.file) != null ? _ref.isSpoiler : void 0)) { - return; - } - thumb = this.file.thumb; - thumb.removeAttribute('style'); - return thumb.src = this.file.thumbURL; - } - }; - - ImageReplace = { - init: function() { - if (g.VIEW === 'catalog') { - return; - } - return Post.prototype.callbacks.push({ - name: 'Image Replace', - cb: this.node - }); - }, - node: function() { - var URL, img, style, thumb, type, _ref, _ref1; - - if (this.isClone || this.isHidden || this.thread.isHidden || !((_ref = this.file) != null ? _ref.isImage : void 0)) { - return; - } - _ref1 = this.file, thumb = _ref1.thumb, URL = _ref1.URL; - if (!(Conf["Replace " + ((type = (URL.match(/\w{3}$/))[0].toUpperCase()) === 'PEG' ? 'JPG' : type)] && !/spoiler/.test(thumb.src))) { - return; - } - if (this.file.isSpoiler) { - style = thumb.style; - style.maxHeight = style.maxWidth = this.isReply ? '125px' : '250px'; - } - img = $.el('img'); - $.on(img, 'load', function() { - return thumb.src = URL; - }); - return img.src = URL; - } - }; - - ImageHover = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Image Hover']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Image Hover', - cb: this.node - }); - }, - node: function() { - var _ref; - - if (!((_ref = this.file) != null ? _ref.isImage : void 0)) { - return; - } - return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover); - }, - mouseover: function(e) { - var el, post; - - post = Get.postFromNode(this); - el = $.el('img', { - id: 'ihover', - src: post.file.URL - }); - el.setAttribute('data-fullid', post.fullID); - $.add(Header.hover, el); - UI.hover({ - root: this, - el: el, - latestEvent: e, - endEvents: 'mouseout click', - asapTest: function() { - return el.naturalHeight; - } - }); - return $.on(el, 'error', ImageHover.error); - }, - error: function() { - var URL, post, src, timeoutID, - _this = this; - - if (!doc.contains(this)) { - return; - } - post = g.posts[this.dataset.fullid]; - src = this.src.split('/'); - if (src[2] === 'images.4chan.org') { - if (URL = Redirect.image(src[3], src[5].replace(/\?.+$/, ''))) { - this.src = URL; - return; - } - if (g.DEAD || post.isDead || post.file.isDead) { - return; - } - } - timeoutID = setTimeout((function() { - return _this.src = post.file.URL + '?' + Date.now(); - }), 3000); - return $.ajax("//api.4chan.org/" + post.board + "/res/" + post.thread + ".json", { - onload: function() { - var postObj, _i, _len, _ref; - - if (this.status !== 200) { - return; - } - _ref = JSON.parse(this.response).posts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - postObj = _ref[_i]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - clearTimeout(timeoutID); - return post.kill(); - } else if (postObj.filedeleted) { - clearTimeout(timeoutID); - return post.kill(true); - } - } - }); - } - }; - - ExpandComment = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Comment Expansion']) { - return; - } - if (g.BOARD.ID === 'g') { - this.callbacks.push(Fourchan.code); - } - if (g.BOARD.ID === 'sci') { - this.callbacks.push(Fourchan.math); - } - return Post.prototype.callbacks.push({ - name: 'Comment Expansion', - cb: this.node - }); - }, - node: function() { - var a; - - if (a = $('.abbr > a', this.nodes.comment)) { - return $.on(a, 'click', ExpandComment.cb); - } - }, - callbacks: [], - cb: function(e) { - var post; - - e.preventDefault(); - post = Get.postFromNode(this); - return ExpandComment.expand(post); - }, - expand: function(post) { - var a; - - if (post.nodes.longComment && !post.nodes.longComment.parentNode) { - $.replace(post.nodes.shortComment, post.nodes.longComment); - post.nodes.comment = post.nodes.longComment; - return; - } - if (!(a = $('.abbr > a', post.nodes.comment))) { - return; - } - a.textContent = "Post No." + post + " Loading..."; - return $.cache("//api.4chan.org" + a.pathname + ".json", function() { - return ExpandComment.parse(this, a, post); - }); - }, - contract: function(post) { - var a; - - if (!post.nodes.shortComment) { - return; - } - a = $('.abbr > a', post.nodes.shortComment); - a.textContent = 'here'; - $.replace(post.nodes.longComment, post.nodes.shortComment); - return post.nodes.comment = post.nodes.shortComment; - }, - parse: function(req, a, post) { - var callback, clone, comment, href, postObj, posts, quote, spoilerRange, status, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _results; - - status = req.status; - if (![200, 304].contains(status)) { - a.textContent = "Error " + req.statusText + " (" + status + ")"; - return; - } - posts = JSON.parse(req.response).posts; - if (spoilerRange = posts[0].custom_spoiler) { - Build.spoilerRange[g.BOARD] = spoilerRange; - } - for (_i = 0, _len = posts.length; _i < _len; _i++) { - postObj = posts[_i]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - a.textContent = "Post No." + post + " not found."; - return; - } - comment = post.nodes.comment; - clone = comment.cloneNode(false); - clone.innerHTML = postObj.com; - _ref = $$('.quotelink', clone); - for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { - quote = _ref[_j]; - href = quote.getAttribute('href'); - if (href[0] === '/') { - continue; - } - quote.href = "/" + post.board + "/res/" + href; - } - post.nodes.shortComment = comment; - $.replace(comment, clone); - post.nodes.comment = post.nodes.longComment = clone; - post.parseComment(); - post.parseQuotes(); - _ref1 = ExpandComment.callbacks; - _results = []; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - callback = _ref1[_k]; - _results.push(callback.call(post)); - } - return _results; - } - }; - - ExpandThread = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Expansion']) { - return; - } - return Thread.prototype.callbacks.push({ - name: 'Thread Expansion', - cb: this.node - }); - }, - node: function() { - var a, span; - - if (!(span = $('.summary', this.OP.nodes.root.parentNode))) { - return; - } - a = $.el('a', { - textContent: "+ " + span.textContent, - className: 'summary', - href: 'javascript:;' - }); - $.on(a, 'click', ExpandThread.cbToggle); - return $.replace(span, a); - }, - cbToggle: function() { - var op; - - op = Get.postFromRoot(this.previousElementSibling); - return ExpandThread.toggle(op.thread); - }, - toggle: function(thread) { - var a, inlined, num, post, replies, reply, threadRoot, _i, _j, _k, _len, _len1, _len2, _ref, _ref1; - - threadRoot = thread.OP.nodes.root.parentNode; - a = $('.summary', threadRoot); - switch (thread.isExpanded) { - case false: - case void 0: - thread.isExpanded = 'loading'; - _ref = $$('.thread > .postContainer', threadRoot); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - post = _ref[_i]; - ExpandComment.expand(Get.postFromRoot(post)); - } - if (!a) { - thread.isExpanded = true; - return; - } - thread.isExpanded = 'loading'; - a.textContent = a.textContent.replace('+', '× Loading...'); - $.cache("//api.4chan.org/" + thread.board + "/res/" + thread + ".json", function() { - return ExpandThread.parse(this, thread, a); - }); - break; - case 'loading': - thread.isExpanded = false; - if (!a) { - return; - } - a.textContent = a.textContent.replace('× Loading...', '+'); - break; - case true: - thread.isExpanded = false; - if (a) { - a.textContent = a.textContent.replace('-', '+'); - num = (function() { - if (thread.isSticky) { - return 1; - } else { - switch (g.BOARD.ID) { - case 'b': - case 'vg': - case 'q': - return 3; - case 't': - return 1; - default: - return 5; - } - } - })(); - replies = $$('.thread > .replyContainer', threadRoot).slice(0, -num); - for (_j = 0, _len1 = replies.length; _j < _len1; _j++) { - reply = replies[_j]; - if (Conf['Quote Inlining']) { - while (inlined = $('.inlined', reply)) { - inlined.click(); - } - } - $.rm(reply); - } - } - _ref1 = $$('.thread > .postContainer', threadRoot); - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - post = _ref1[_k]; - ExpandComment.contract(Get.postFromRoot(post)); - } - } - }, - parse: function(req, thread, a) { - var link, node, nodes, post, posts, replies, reply, spoilerRange, status, _i, _len; - - if (a.textContent[0] === '+') { - return; - } - status = req.status; - if (![200, 304].contains(status)) { - a.textContent = "Error " + req.statusText + " (" + status + ")"; - $.off(a, 'click', ExpandThread.cb.toggle); - return; - } - thread.isExpanded = true; - a.textContent = a.textContent.replace('× Loading...', '-'); - posts = JSON.parse(req.response).posts; - if (spoilerRange = posts[0].custom_spoiler) { - Build.spoilerRange[g.BOARD] = spoilerRange; - } - replies = posts.slice(1); - posts = []; - nodes = []; - for (_i = 0, _len = replies.length; _i < _len; _i++) { - reply = replies[_i]; - if (post = thread.posts[reply.no]) { - nodes.push(post.nodes.root); - continue; - } - node = Build.postFromObject(reply, thread.board); - post = new Post(node, thread, thread.board); - link = $('a[title="Highlight this post"]', node); - link.href = "res/" + thread + "#p" + post; - link.nextSibling.href = "res/" + thread + "#q" + post; - posts.push(post); - nodes.push(node); - } - Main.callbackNodes(Post, posts); - $.after(a, nodes); - if (Conf['Enable 4chan\'s Extension']) { - return $.globalEval("Parser.parseThread(" + thread.ID + ", 1, " + nodes.length + ")"); - } else { - return Fourchan.parseThread(thread.ID, 1, nodes.length); - } - } - }; - - ThreadExcerpt = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { - return; - } - return Thread.prototype.callbacks.push({ - name: 'Thread Excerpt', - cb: this.node - }); - }, - node: function() { - var excerpt; - - return d.title = (excerpt = Get.threadExcerpt(this)).length > 80 ? "" + excerpt.slice(0, 77) + "..." : excerpt; - } - }; - - Unread = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Tab Icon']) { - return; - } - this.db = new DataBoard('lastReadPosts', this.sync); - this.hr = $.el('hr', { - id: 'unread-line' - }); - this.posts = []; - this.postsQuotingYou = []; - return Thread.prototype.callbacks.push({ - name: 'Unread', - cb: this.node - }); - }, - node: function() { - var ID, hash, post, posts, root, _ref; - - Unread.thread = this; - Unread.title = d.title; - posts = []; - _ref = this.posts; - for (ID in _ref) { - post = _ref[ID]; - if (post.isReply) { - posts.push(post); - } - } - Unread.lastReadPost = Unread.db.get({ - boardID: this.board.ID, - threadID: this.ID, - defaultValue: 0 - }); - Unread.addPosts(posts); - $.on(d, 'ThreadUpdate', Unread.onUpdate); - $.on(d, 'scroll visibilitychange', Unread.read); - if (Conf['Unread Line']) { - $.on(d, 'visibilitychange', Unread.setLine); - } - if (!Conf['Scroll to Last Read Post']) { - return; - } - if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { - return; - } - if (Unread.posts.length) { - while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { - if (!(Get.postFromRoot(root)).isHidden) { - break; - } - } - return root.scrollIntoView(false); - } else if (posts.length) { - return Header.scrollToPost(posts[posts.length - 1].nodes.root); - } - }, - sync: function() { - var lastReadPost; - - lastReadPost = Unread.db.get({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - defaultValue: 0 - }); - if (!(Unread.lastReadPost < lastReadPost)) { - return; - } - Unread.lastReadPost = lastReadPost; - Unread.readArray(Unread.posts); - Unread.readArray(Unread.postsQuotingYou); - Unread.setLine(); - return Unread.update(); - }, - addPosts: function(newPosts) { - var ID, data, post, _i, _len; - - for (_i = 0, _len = newPosts.length; _i < _len; _i++) { - post = newPosts[_i]; - ID = post.ID; - if (ID <= Unread.lastReadPost || post.isHidden) { - continue; - } - if (QR.db) { - data = { - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }; - if (QR.db.get(data)) { - continue; - } - } - Unread.posts.push(post); - Unread.addPostQuotingYou(post); - } - if (Conf['Unread Line']) { - Unread.setLine(newPosts.contains(Unread.posts[0])); - } - Unread.read(); - return Unread.update(); - }, - addPostQuotingYou: function(post) { - var quotelink, _i, _len, _ref; - - if (!QR.db) { - return; - } - _ref = post.nodes.quotelinks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - if (QR.db.get(Get.postDataFromLink(quotelink))) { - Unread.postsQuotingYou.push(post); - } - } - }, - onUpdate: function(e) { - if (e.detail[404]) { - return Unread.update(); - } else { - return Unread.addPosts(e.detail.newPosts); - } - }, - readSinglePost: function(post) { - var i; - - if ((i = Unread.posts.indexOf(post)) === -1) { - return; - } - Unread.posts.splice(i, 1); - if (i === 0) { - Unread.lastReadPost = post.ID; - Unread.saveLastReadPost(); - } - if ((i = Unread.postsQuotingYou.indexOf(post)) !== -1) { - Unread.postsQuotingYou.splice(i, 1); - } - return Unread.update(); - }, - readArray: function(arr) { - var i, post, _i, _len; - - for (i = _i = 0, _len = arr.length; _i < _len; i = ++_i) { - post = arr[i]; - if (post.ID > Unread.lastReadPost) { - break; - } - } - return arr.splice(0, i); - }, - read: function(e) { - var bottom, height, i, post, _i, _len, _ref; - - if (d.hidden || !Unread.posts.length) { - return; - } - height = doc.clientHeight; - _ref = Unread.posts; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - post = _ref[i]; - bottom = post.nodes.root.getBoundingClientRect().bottom; - if (bottom > height) { - break; - } - } - if (!i) { - return; - } - Unread.lastReadPost = Unread.posts[i - 1].ID; - Unread.saveLastReadPost(); - Unread.posts.splice(0, i); - Unread.readArray(Unread.postsQuotingYou); - if (e) { - return Unread.update(); - } - }, - saveLastReadPost: $.debounce(2 * $.SECOND, function() { - return Unread.db.set({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - val: Unread.lastReadPost - }); - }), - setLine: function(force) { - var post, root; - - if (!(d.hidden || force === true)) { - return; - } - if (post = Unread.posts[0]) { - root = post.nodes.root; - if (root !== $('.thread > .replyContainer', root.parentNode)) { - return $.before(root, Unread.hr); - } - } else { - return $.rm(Unread.hr); - } - }, - update: function() { - var count; - - count = Unread.posts.length; - if (Conf['Unread Count']) { - d.title = g.DEAD ? "(" + Unread.posts.length + ") /" + g.BOARD + "/ - 404" : "(" + Unread.posts.length + ") " + Unread.title; - } - if (!Conf['Unread Tab Icon']) { - return; - } - Favicon.el.href = g.DEAD ? Unread.postsQuotingYou.length ? Favicon.unreadDeadY : count ? Favicon.unreadDead : Favicon.dead : count ? Unread.postsQuotingYou.length ? Favicon.unreadY : Favicon.unread : Favicon["default"]; - return $.add(d.head, Favicon.el); - } - }; - - Favicon = { - init: function() { - return $.ready(function() { - var href; - - Favicon.el = $('link[rel="shortcut icon"]', d.head); - Favicon.el.type = 'image/x-icon'; - href = Favicon.el.href; - Favicon.SFW = /ws\.ico$/.test(href); - Favicon["default"] = href; - return Favicon["switch"](); - }); - }, - "switch": function() { - switch (Conf['favicon']) { - case 'ferongr': - Favicon.unreadDead = 'data:image/gif;base64,R0lGODlhEAAQAOMHAOgLAnMFAL8AAOgLAukMA/+AgP+rq////////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAAAAAAAAJAAASAAAZAQAaAQAiAQAkAQAoFBQyAgAzAgA1AgA4AABBAgBXAwBzBQCEBgGvCAG/AADoCwLpDAP/gID/q6v///9zILr8AAAAA3RSTlMAx9dmesIgAAAAc0lEQVQY02WPgQ6DIBBDmTqnbE70Cvb/v3TAnW5OSKB9ybXg3HUBOAmEEH4FQtrSn4gxi+xjVC9SVOEiSvbZI8zSV+/Xo7icnryZ15GObMxvtWUkB/VJW57kHU7fUcHStm8FkncGE/mwP6CGzq/eauHwvT7sWQt3gZLW+AAAAABJRU5ErkJggg=='; - Favicon.unreadSFW = 'data:image/gif;base64,R0lGODlhEAAQAOMHAADX8QBwfgC2zADX8QDY8nnl8qLp8v///////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAAAAAAAAAAAACAkAERMAGBsAGR0AISUALzQALzUAMTcANjwAP0cAVF8AcH4AeokAorYAtswA1/EA2PISIyV55fKi6fL////l+pZqAAAAA3RSTlMAx9dmesIgAAAAcklEQVQY02VPARLCIAxjsjnUWdcg6/9/ukIr00nvIMldEhrC/wHwA0BE3wBUtnICOStQnrNx5oqqzmzKx9vDPH1Nae3F9U4ig3OzjCIX51treYvMxou13EQmBPtHE14xLiawjgoPtfgOaKHP+9VrEXA8O1v7CmSPE3u0AAAAAElFTkSuQmCC'; - Favicon.unreadNSFW = 'data:image/gif;base64,R0lGODlhEAAQAOMHAFT+ACh5AEncAFT+AFX/Acz/su7/5v///////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAAAAAAAADCgAGEgAIGgAJGwALJAANJwASNwASOAATOgAVQQAWRAAeWwAgKBsoeQAwkQA/wABJ3ABU/gBV/wHM/7Lu/+b////r+K2AAAAAA3RSTlMAx9dmesIgAAAAc0lEQVQY02WPgQ6DIBBDmTonbk70Cvb/v3TAnW5OSKB9ybXg3HUBOAmEEH4FQtrSn4gxi+xjVC9SVOEiSvbZI8zSV+/Xo7icnryZ15GObMxvtWUmB/VJW0byDqfvqGBp20mB5J3Bi3zYH1BD38/eauHwvT7sEAt1Fb320QAAAABJRU5ErkJggg=='; - break; - case 'xat-': - Favicon.unreadDead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA2ElEQVQ4y61TQQrCMBDMQ8WDIEV6LbT2A4og2Hq0veo7fIAH04dY9N4xmyYlpGmI2MCQTWYy3Wy2DAD7B2wWAzWgcTgVeZKlZRxHNYFi2jM18oBh0IcKtC6ixf22WT4IFLs0owxswXu9egm0Ls6bwfCFfNsJYJKfqoEkd3vgUgFVLWObtzNgVKyruC+ljSzr5OEnBzjvjcQecaQhbZgBb4CmGQw+PoMkTUtdbd8VSEPakcGxPOcsoIgUKy0LecY29BmdBrqRfjIwZ93KLs5loHvBnL3cLH/jF+C/+z5dgUysAAAAAElFTkSuQmCC'; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAdVBMVEUAAAAAAACKkJGNkpN0d3d0eHdra2dGRkORZ1wAAACmaV6naV4PDw8LCwsLCwvyZWLyZWIeExEyFBTAWlr/eHj/enkAAAAKAAAoAAA4AAA4GhpMAACRAAD/AAD/enn/h4j/m5z/nJ3/0dL/0tL/0tP/09P///9VK8WFAAAAFnRSTlMAPnp6kpKdtcHEzc3p6u7v8PT7/v7++jx7+QAAAIFJREFUGNONj90OgjAMhStKmU5k/h1UmAzUvv8jSrYBIeGC9qLtl/a0JVphAJKUOU36xNfWWiitlU9GUphZbXF/hxg10Li2QdQgPhQ3133c9XLOJvD9uZfI0YOdiiMiJw+2CKIPkZzGtcbgKYIJaI26LAfQOzOqoYNA4Z49Nguv/gEEhw2/C5BUZgAAAABJRU5ErkJggg=='; - Favicon.unreadSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA30lEQVQ4y2P4//8/AyWYgSoGQMF/GJ7Y11VVUVoyKTM9ey4Ig9ggMWQ1YA1IBvzXm34YjkH8mPyJB+Nqlp8FYRAbmxoMF6ArSNrw6T0Qf8Amh9cFMEWVR/7/A+L/uORxhgEIt5/+/3/2lf//5wAxiI0uj+4CBlBgxVUvOwtydgXQZpDmi2/+/7/0GmIQSAwkB1IDUkuUAZeABlx+g2zAZ9wGlAOjChba+LwAUgNSi2HA5Am9VciBhSsQQWyoWgZiovEDsdGI1QBYQiLJAGQalpSxyWEzAJYWkGm8clTJjQCZ1hkoVG0CygAAAABJRU5ErkJggg=='; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAdVBMVEUAAAAAAACRjoqTkI13dXR4dXRpZ2tFQ0Zcb5EAAABee6ZefKcPDw8LCwsLCwtisPJisPIRFh4UJDJalMB4xP95xP8AAAABBQcHFx4KISoNLToaKzgaVW4ul8N5xP+Hy/+b1P+c1P/R7P/S6//S7P/T7P////9P0rk0AAAAFnRSTlMAPnp6kpKdtcHEzc3p6u7v8PT7/v7++jx7+QAAAIFJREFUGNONj90OgjAMhStKmU5k/h1UmAzUvv8jSrYBIeGC9qLtl/a0JVphAJKUOU36xNfWWiitlU9GUphZbXF/hxg10Li2QdQgPhQ3133c9XLOJvD9uUrk6MFOxRGRkwdbBNGHSE7jWmPwFMEEtEZdlgPonRmvoYNA4Z49Nguv/gEE3A2/sQ7iRgAAAABJRU5ErkJggg=='; - Favicon.unreadNSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA4ElEQVQ4y2P4//8/AyWYgSoGQMF/GJ7YNbGqrKRiUnp21lwQBrFBYshqwBqQDPifdsYYjkH8mInxB+OWx58FYRAbmxoMF6ArKPmU9B6IP2CTw+sCmKKe/5X/gPg/LnmcYQDCs/63/1/9fzYQzwGz0eXRXcAACqy4ZfFnQc7u+V/xD6T55v+LQHwJbBBIDCQHUgNSS5QBt4Cab/2/jDDgMx4DykrKJ8FCG58XQGpAajEMmNw7uQo5sHAFIogNVctATDR+IDYasRoAS0gkGYBMw5IyNjlsBsDSAjKNV44quREAx58Mr9vt5wQAAAAASUVORK5CYII='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAdVBMVEUAAAAAAACRipGTjZN2dHd2dHhna2pDRkVckV8AAABepl9ep18PDw8LCwsLCwt08mJ08mIRHhEYMhRpwFqM/3iM/3kAAAAECAIQIAgWLAseOBoePA86dB1mzDOM/3ma/4er/5ur/5zZ/9HZ/9La/9La/9P///85Jx7jAAAAFnRSTlMAPnp6kpKdtcHEzc3p6u7v8PT7/v7++jx7+QAAAIFJREFUGNONj90OgjAMhStKmU5k/h1UmAzUvv8jSrYBIeGC9qLtl/a0JVphAJKUOU36xNfWWiitlU9GUphZbXF/hxg10Li2QdQgPhQ3133c9XLOJvD9uZfI0YOdiiMiJw+2CKIPkZzGtcbgKYIJaI26LAfQOzOqoYNA4Z49Nguv/gEEhw2/C5BUZgAAAABJRU5ErkJggg=='; - break; - case 'Mayhem': - Favicon.unreadDead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABIUlEQVQ4jZ2ScWuDMBDFgw4pIkU0WsoQkWAYIkXZH4N9/+/V3dmfXSrKYIFHwt17j8vdGWNMIkgFuaDgzgQnwRs4EQs5KdolUQtagRN0givEDBTEOjgtGs0Zq8F7cKqqusVxrMQLaDUWcjBSrXkn8gs51tpJSWLk9b3HUa0aNIL5gPBR1/V4kJvR7lTwl8GmAm1Gf9+c3S+89qBHa8502AsmSrtBaEBPbIbj0ah2madlNAPEccdgJDfAtWifBjqWKShRBT6KoiH8QlEUn/qt0CCjnNdmPUwmFWzj9Oe6LpKuZXcwqq88z78Pch3aZU3dPwwc2sWlfZKCW5tWluV8kGvXClLm6dYN4/aUqfCbnEOzNDGhGZbNargvxCzvMGfRJD8UaDVvgkzo6QAAAABJRU5ErkJggg=='; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABj0lEQVQ4y42TQUorQRCGv+oekpj43pOhOyIiKoHBxTMkuAnEtWcwx/AY3sUbBIRcwCw8gCfIMkaTOOUiNdgGRRuKoav+v2qq/i4BakBmXweUwDoxLF5ZhVkC64rYBHYMUAIvwKuBMEwdaFiCNbAAngEC0NHkxBi73vsOsG92HGPsphigY1wOzfNhqhpC6AEd730RQuh9hQEOAY6A/jeAs3a7/f+bWB84ckCpqg+I8Osjgqo+AKUDViJS8LkGMcY+sJrNZssYY387LiIFsBLgL9AC/pgaArzZlF+sZgO4BG7sfgvcA3MxUtOStBIpX7cS3Klqd9OBTIEr4DlLOsuAmqpODXQOiHMuy/O8FkLoJth/6Uh2gQPg87Q3k+7leX6hqnpmPvM/GWfXWeWGqj5+oUS9LMs6wF7iHAwGJ9ZW5uxpup+UGwEtEVoijEYjKl66PJujmvIW3vsFwBiYqzJXZTweY5wSU6Bd7UP1KoECODUrJpOJAtPhcKjAtXGaYptWs57qWyv9Zn/it1a5knj5Dm3v4q8APeACAAAAAElFTkSuQmCC'; - Favicon.unreadSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABCElEQVQ4jZ2S4crCMAxF+0OGDJEPKYrIGKOsiJSx/fJRfSAfTJNyKqXfiuDg0C25N2RJjTGmEVrhTzhw7oStsIEtsVzT4o2Jo9ALThiEM8IdHIgNaHo8mjNWg6/ske8bohPo+63QOLzmooHp8fyAICBSQkVz0QKdsFQEV6WSW/D+7+BbgbIDHcb4Kp61XyjyI16zZ8JemGltQtDBSGxB4/GoN+7TpkkjDCsFArm0IYv3U0BbnYtf8BCy+JytsE0X6VyuKhPPK/GAJ14kvZZDZVV3pZIb8MZr6n4o4PDGKn0S5SdDmyq5PnXQsk+Xbhinp03FFzmHJw6xYRiWm9VxnohZ3vOcxdO8ARmXRvbWdtzQAAAAAElFTkSuQmCC'; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAkFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OztMTEyRkZHBwcH///9dzWZ0AAAAI3RSTlMEBggKDA4QEhQWFxkbHR8hIyUmKCosLjAxN1hbYc7P0dLc3mzWzBUAAAC+SURBVBjTNY3pcsIwEIM3ePERx/bG5IIe0NIrhVbv/3Y4Ydj9Ic030ogqpY3mDdGGi1EVsYuSvGE2Pkl0TFYAdLGuY1eMWGowzzN6kX41DYVpNbvdKlO4Jx5gSbi2VO+Vcq2jrc/jNLQhtM+n05PfkrKxG/oFHIEXqwqQsVRy7n+AtwLYL3sYR3wA755Jp3Vvv8cn8Js0GXmA7/P5TwzpiLn8MOALuEZNygkm5JTy/+vl4BRVbJvQ1NbWRSxXN64PGOBlhG0qAAAAAElFTkSuQmCC'; - Favicon.unreadNSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABCklEQVQ4jZ2S0WrDMAxF/TBCCKWMYhZKCSGYmFJMSNjD/mhf239qJXNcjBdTWODgRLpXKJKNMaYROuFTOHEehFb4gJZYrunwxsSXMApOmIQzwgOciE1oRjyaM1aDj+yR7xuiHvT9VmgcXnPRwO/9+wWCgEgJFc1FCwzCVhFclUpuw/u3g3cFyg50GPOjePZ+ocjPeM2RCXthpbUFwQAzsQ2Nx6PeuE+bJo0w7BQI5NKGLN5XAW11LX7BQ8jia7bCLl2kc7mqTLzuxAOeeJH0Wk6VVf0oldyEN15T948CDm+sMiZRfjK0pZIbUwcd+3TphnF62lR8kXN44hAbhmG5WQNnT8zynucsnuYJhFpBfkMzqD4AAAAASUVORK5CYII='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAkFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztMTExmzDORkZHBwcH///92I3mvAAAAI3RSTlMEBggKDA4QEhQWFxkbHR8hIyUmKCosLjAxN1hbYc7P0dLc3mzWzBUAAAC+SURBVBjTNY3pcsIwEIM3ePERx/bG5IIe0NIT0ur93w4nDLs/pPlGGlGltNG8IdpwMaoidlGSN8zGJ4mOyQqALtZ17IoRSw3meUYv0q+moTCtZrdbZQr3xAMsCdeW6r1SrnW09XmchjaE9vl0evJbUjZ2Q7+AI/BiVQEylkrO/TfwVgD7ZQ/jiA/g3TPptO7t9/gEfpImIw/wez7/iSEdMZcfBnwB16hJOcGEnFL+f70cnKKKbROa2tq6iOXqBuMXGTe4CAUbAAAAAElFTkSuQmCC'; - break; - case 'Original': - Favicon.unreadDead = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAAAAAAAAAAAAAAAKAAAoAAAoKCg4AAA4ODg7OztMAACRAADBwcH/AAD///+WCcPSAAAAA3RSTlMAx9dmesIgAAAAZ0lEQVQI1z2LsQmAUAxEb4Isk0rwp3EPR3ECcRQrh7C3/nAasPwzmCgYuPBy5AH/NALSImqAK+H1oJRqyJVHNAnZqDITVhj7/PrAciJ9il0BHs/jjU+fnB9sQ0IxX6OBO6Xr0xKAxANLZzUanCWzZQAAAABJRU5ErkJggg=='; - Favicon.unreadSFW = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAC6Xw////////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAZ0lEQVQI1z2LsQ2AUAhEbwKWoftRGvdwBEewchM7d9BFbE6pbP4Mgj+R5MjjwgP+qQSkRtQAV8K3lVI2Q648oknIRpWZsMI4988HjgvpU+wO8HgeHzR9cjZYhoRiPkcDd0rXpyUAiRd5YjKC7MvNRgAAAABJRU5ErkJggg=='; - Favicon.unreadNSFW = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAGbMM////////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAZ0lEQVQI1z2LsQ2AUAhEbwKWofRL4x6O4AhuopWb2P4F7E5prP4MgiaSHHlceMA/jYC0iBrgSnjdKaUacuURTUI2qsyEFcaxvD6wnkifYleAx/N449Mn5wfbkFDM52jgTun6tAQg8QAEvjQg42KY2AAAAABJRU5ErkJggg=='; - } - if (Favicon.SFW) { - Favicon.unread = Favicon.unreadSFW; - return Favicon.unreadY = Favicon.unreadSFWY; - } else { - Favicon.unread = Favicon.unreadNSFW; - return Favicon.unreadY = Favicon.unreadNSFWY; - } - }, - empty: 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', - dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==' - }; - - ThreadStats = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { - return; - } - this.dialog = UI.dialog('thread-stats', 'bottom: 0; left: 0;', "
0 / 0
"); - this.postCountEl = $('#post-count', this.dialog); - this.fileCountEl = $('#file-count', this.dialog); - return Thread.prototype.callbacks.push({ - name: 'Thread Stats', - cb: this.node - }); - }, - node: function() { - var ID, fileCount, post, postCount, _ref; - - postCount = 0; - fileCount = 0; - _ref = this.posts; - for (ID in _ref) { - post = _ref[ID]; - postCount++; - if (post.file) { - fileCount++; - } - } - ThreadStats.thread = this; - ThreadStats.update(postCount, fileCount); - $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); - return $.add(d.body, ThreadStats.dialog); - }, - onUpdate: function(e) { - var fileCount, postCount, _ref; - - if (e.detail[404]) { - return; - } - _ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount; - return ThreadStats.update(postCount, fileCount); - }, - update: function(postCount, fileCount) { - var fileCountEl, postCountEl, thread; - - thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl; - postCountEl.textContent = postCount; - fileCountEl.textContent = fileCount; - (thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning'); - return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning'); - } - }; - - ThreadUpdater = { - init: function() { - var checked, conf, html, name, _ref; - - if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { - return; - } - html = ''; - _ref = Config.updater.checkbox; - for (name in _ref) { - conf = _ref[name]; - checked = Conf[name] ? 'checked' : ''; - html += "
"; - } - checked = Conf['Auto Update'] ? 'checked' : ''; - html = "
\n" + html + "\n
\n
\n
"; - this.dialog = UI.dialog('updater', 'bottom: 0; right: 0;', html); - this.timer = $('#update-timer', this.dialog); - this.status = $('#update-status', this.dialog); - this.checkPostCount = 0; - return Thread.prototype.callbacks.push({ - name: 'Thread Updater', - cb: this.node - }); - }, - node: function() { - var input, _i, _len, _ref; - - ThreadUpdater.thread = this; - ThreadUpdater.root = this.OP.nodes.root.parentNode; - ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0]; - ThreadUpdater.outdateCount = 0; - ThreadUpdater.lastModified = '0'; - _ref = $$('input', ThreadUpdater.dialog); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - input = _ref[_i]; - if (input.type === 'checkbox') { - $.on(input, 'change', $.cb.checked); - } - switch (input.name) { - case 'Scroll BG': - $.on(input, 'change', ThreadUpdater.cb.scrollBG); - ThreadUpdater.cb.scrollBG(); - break; - case 'Auto Update This': - $.on(input, 'change', ThreadUpdater.cb.autoUpdate); - $.event('change', null, input); - break; - case 'Interval': - $.on(input, 'change', ThreadUpdater.cb.interval); - ThreadUpdater.cb.interval.call(input); - break; - case 'Update': - $.on(input, 'click', ThreadUpdater.update); - } - } - $.on(window, 'online offline', ThreadUpdater.cb.online); - $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.post); - $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - ThreadUpdater.cb.online(); - return $.add(d.body, ThreadUpdater.dialog); - }, - /* - http://freesound.org/people/pierrecartoons1979/sounds/90112/ - cc-by-nc-3.0 - */ - - beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', - cb: { - online: function() { - if (ThreadUpdater.online = navigator.onLine) { - ThreadUpdater.outdateCount = 0; - ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - if (Conf['Auto Update This']) { - ThreadUpdater.update(); - } - ThreadUpdater.set('status', null, null); - } else { - ThreadUpdater.set('timer', null); - ThreadUpdater.set('status', 'Offline', 'warning'); - } - return ThreadUpdater.cb.autoUpdate(); - }, - post: function(e) { - if (!(Conf['Auto Update This'] && e.detail.threadID === ThreadUpdater.thread.ID)) { - return; - } - ThreadUpdater.outdateCount = 0; - if (ThreadUpdater.seconds > 2) { - return setTimeout(ThreadUpdater.update, 1000); - } - }, - checkpost: function() { - if (!(g.DEAD || ThreadUpdater.foundPost || ThreadUpdater.checkPostCount >= 10)) { - return setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * 500); - } - ThreadUpdater.checkPostCount = 0; - delete ThreadUpdater.foundPost; - return delete ThreadUpdater.postID; - }, - visibility: function() { - if (d.hidden) { - return; - } - ThreadUpdater.outdateCount = 0; - if (ThreadUpdater.seconds > ThreadUpdater.interval) { - return ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - } - }, - scrollBG: function() { - return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { - return true; - } : function() { - return !d.hidden; - }; - }, - autoUpdate: function() { - if (Conf['Auto Update This'] && ThreadUpdater.online) { - return ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); - } else { - return clearTimeout(ThreadUpdater.timeoutID); - } - }, - interval: function() { - var val; - - val = parseInt(this.value, 10); - ThreadUpdater.interval = this.value = val; - return $.cb.value.call(this); - }, - load: function() { - var klass, req, text, _ref; - - req = ThreadUpdater.req; - switch (req.status) { - case 200: - g.DEAD = false; - ThreadUpdater.parse(JSON.parse(req.response).posts); - ThreadUpdater.lastModified = req.getResponseHeader('Last-Modified'); - ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - break; - case 404: - g.DEAD = true; - ThreadUpdater.set('timer', null); - ThreadUpdater.set('status', '404', 'warning'); - clearTimeout(ThreadUpdater.timeoutID); - ThreadUpdater.thread.kill(); - $.event('ThreadUpdate', { - 404: true, - thread: ThreadUpdater.thread - }); - break; - default: - ThreadUpdater.outdateCount++; - ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - /* - Status Code 304: Not modified - By sending the `If-Modified-Since` header we get a proper status code, and no response. - This saves bandwidth for both the user and the servers and avoid unnecessary computation. - */ - - _ref = [0, 304].contains(req.status) ? [null, null] : ["" + req.statusText + " (" + req.status + ")", 'warning'], text = _ref[0], klass = _ref[1]; - ThreadUpdater.set('status', text, klass); - } - if (ThreadUpdater.postID) { - ThreadUpdater.cb.checkpost(this.status); - } - return delete ThreadUpdater.req; - } - }, - getInterval: function() { - var i, j; - - i = ThreadUpdater.interval; - j = Math.min(ThreadUpdater.outdateCount, 10); - if (!d.hidden) { - j = Math.min(j, 7); - } - return ThreadUpdater.seconds = Conf['Optional Increase'] ? Math.max(i, [0, 5, 10, 15, 20, 30, 60, 90, 120, 240, 300][j]) : i; - }, - set: function(name, text, klass) { - var el, node; - - el = ThreadUpdater[name]; - if (node = el.firstChild) { - node.data = text; - } else { - el.textContent = text; - } - if (klass !== void 0) { - return el.className = klass; - } - }, - timeout: function() { - var n; - - ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); - if (!(n = --ThreadUpdater.seconds)) { - return ThreadUpdater.update(); - } else if (n <= -60) { - ThreadUpdater.set('status', 'Retrying', null); - return ThreadUpdater.update(); - } else if (n > 0) { - return ThreadUpdater.set('timer', n); - } - }, - update: function() { - var url; - - if (!ThreadUpdater.online) { - return; - } - ThreadUpdater.seconds = 0; - ThreadUpdater.set('timer', '...'); - if (ThreadUpdater.req) { - ThreadUpdater.req.onloadend = null; - ThreadUpdater.req.abort(); - } - url = "//api.4chan.org/" + ThreadUpdater.thread.board + "/res/" + ThreadUpdater.thread + ".json"; - return ThreadUpdater.req = $.ajax(url, { - onloadend: ThreadUpdater.cb.load - }, { - headers: { - 'If-Modified-Since': ThreadUpdater.lastModified - } - }); - }, - updateThreadStatus: function(title, OP) { - var icon, message, root, titleLC; - - titleLC = title.toLowerCase(); - if (ThreadUpdater.thread["is" + title] === !!OP[titleLC]) { - return; - } - if (!(ThreadUpdater.thread["is" + title] = !!OP[titleLC])) { - message = title === 'Sticky' ? 'The thread is not a sticky anymore.' : 'The thread is not closed anymore.'; - new Notification('info', message, 30); - $.rm($("." + titleLC + "Icon", ThreadUpdater.thread.OP.nodes.info)); - return; - } - message = title === 'Sticky' ? 'The thread is now a sticky.' : 'The thread is now closed.'; - new Notification('info', message, 30); - icon = $.el('img', { - src: "//static.4chan.org/image/" + titleLC + ".gif", - alt: title, - title: title, - className: "" + titleLC + "Icon" - }); - root = $('[title="Quote this post"]', ThreadUpdater.thread.OP.nodes.info); - if (title === 'Closed') { - root = $('.stickyIcon', ThreadUpdater.thread.OP.nodes.info) || root; - } - return $.after(root, [$.tn(' '), icon]); - }, - parse: function(postObjects) { - var ID, OP, count, deletedFiles, deletedPosts, files, index, node, nodes, num, post, postObject, posts, scroll, _i, _len, _ref; - - OP = postObjects[0]; - Build.spoilerRange[ThreadUpdater.thread.board] = OP.custom_spoiler; - ThreadUpdater.updateThreadStatus('Sticky', OP); - ThreadUpdater.updateThreadStatus('Closed', OP); - ThreadUpdater.thread.postLimit = !!OP.bumplimit; - ThreadUpdater.thread.fileLimit = !!OP.imagelimit; - nodes = []; - posts = []; - index = []; - files = []; - count = 0; - for (_i = 0, _len = postObjects.length; _i < _len; _i++) { - postObject = postObjects[_i]; - num = postObject.no; - index.push(num); - if (postObject.fsize) { - files.push(num); - } - if (num <= ThreadUpdater.lastPost) { - continue; - } - count++; - node = Build.postFromObject(postObject, ThreadUpdater.thread.board); - nodes.push(node); - posts.push(new Post(node, ThreadUpdater.thread, ThreadUpdater.thread.board)); - } - deletedPosts = []; - deletedFiles = []; - _ref = ThreadUpdater.thread.posts; - for (ID in _ref) { - post = _ref[ID]; - ID = +ID; - if (post.isDead && index.contains(ID)) { - post.resurrect(); - } else if (!index.contains(ID)) { - post.kill(); - deletedPosts.push(post); - } else if (post.file && !post.file.isDead && !files.contains(ID)) { - post.kill(true); - deletedFiles.push(post); - } - if (ThreadUpdater.postID) { - if (ID === ThreadUpdater.postID) { - ThreadUpdater.foundPost = true; - } - } - } - if (!count) { - ThreadUpdater.set('status', null, null); - ThreadUpdater.outdateCount++; - } else { - ThreadUpdater.set('status', "+" + count, 'new'); - ThreadUpdater.outdateCount = 0; - if (Conf['Beep'] && d.hidden && Unread.posts && !Unread.posts.length) { - if (!ThreadUpdater.audio) { - ThreadUpdater.audio = $.el('audio', { - src: ThreadUpdater.beep - }); - } - ThreadUpdater.audio.play(); - } - ThreadUpdater.lastPost = posts[count - 1].ID; - Main.callbackNodes(Post, posts); - scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; - $.add(ThreadUpdater.root, nodes); - if (scroll) { - if (Conf['Bottom Scroll']) { - doc.scrollTop = d.body.clientHeight; - } else { - Header.scrollToPost(nodes[0]); - } - } - $.queueTask(function() { - var length, threadID; - - threadID = ThreadUpdater.thread.ID; - length = $$('.thread > .postContainer', ThreadUpdater.root).length; - if (Conf['Enable 4chan\'s Extension']) { - return $.globalEval("Parser.parseThread(" + threadID + ", " + (-count) + ")"); - } else { - return Fourchan.parseThread(threadID, length - count, length); - } - }); - } - return $.event('ThreadUpdate', { - 404: false, - thread: ThreadUpdater.thread, - newPosts: posts, - deletedPosts: deletedPosts, - deletedFiles: deletedFiles, - postCount: OP.replies + 1, - fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead) - }); - } - }; - - ThreadWatcher = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Thread Watcher']) { - return; - } - this.dialog = UI.dialog('watcher', 'top: 50px; left: 0px;', '
Thread Watcher
'); - $.on(d, 'QRPostSuccessful', this.cb.post); - $.on(d, '4chanXInitFinished', this.ready); - $.sync('WatchedThreads', this.refresh); - return Thread.prototype.callbacks.push({ - name: 'Thread Watcher', - cb: this.node - }); - }, - node: function() { - var favicon, - _this = this; - - favicon = $.el('img', { - className: 'favicon' - }); - $.on(favicon, 'click', ThreadWatcher.cb.toggle); - $.before($('input', this.OP.nodes.post), favicon); - if (g.VIEW !== 'thread') { - return; - } - return $.get('AutoWatch', 0, function(item) { - if (item['AutoWatch'] !== _this.ID) { - return; - } - ThreadWatcher.watch(_this); - return $["delete"]('AutoWatch'); - }); - }, - ready: function() { - $.off(d, '4chanXInitFinished', ThreadWatcher.ready); - if (!Main.isThisPageLegit()) { - return; - } - ThreadWatcher.refresh(); - return $.add(d.body, ThreadWatcher.dialog); - }, - refresh: function(watched) { - var ID, board, div, favicon, id, link, nodes, props, thread, x, _ref, _ref1; - - if (!watched) { - $.get('WatchedThreads', {}, function(item) { - return ThreadWatcher.refresh(item['WatchedThreads']); - }); - return; - } - nodes = [$('.move', ThreadWatcher.dialog)]; - for (board in watched) { - _ref = watched[board]; - for (id in _ref) { - props = _ref[id]; - x = $.el('a', { - textContent: '×', - href: 'javascript:;' - }); - $.on(x, 'click', ThreadWatcher.cb.x); - link = $.el('a', props); - link.title = link.textContent; - div = $.el('div'); - $.add(div, [x, $.tn(' '), link]); - nodes.push(div); - } - } - $.rmAll(ThreadWatcher.dialog); - $.add(ThreadWatcher.dialog, nodes); - watched = watched[g.BOARD] || {}; - _ref1 = g.BOARD.threads; - for (ID in _ref1) { - thread = _ref1[ID]; - favicon = $('.favicon', thread.OP.nodes.post); - favicon.src = ID in watched ? Favicon["default"] : Favicon.empty; - } - }, - cb: { - toggle: function() { - return ThreadWatcher.toggle(Get.postFromNode(this).thread); - }, - x: function() { - var thread; - - thread = this.nextElementSibling.pathname.split('/'); - return ThreadWatcher.unwatch(thread[1], thread[3]); - }, - post: function(e) { - var board, postID, threadID, _ref; - - _ref = e.detail, board = _ref.board, postID = _ref.postID, threadID = _ref.threadID; - if (postID === threadID) { - if (Conf['Auto Watch']) { - return $.set('AutoWatch', threadID); - } - } else if (Conf['Auto Watch Reply']) { - return ThreadWatcher.watch(board.threads[threadID]); - } - } - }, - toggle: function(thread) { - if ($('.favicon', thread.OP.nodes.post).src === Favicon.empty) { - return ThreadWatcher.watch(thread); - } else { - return ThreadWatcher.unwatch(thread.board, thread.ID); - } - }, - unwatch: function(board, threadID) { - return $.get('WatchedThreads', {}, function(item) { - var watched; - - watched = item['WatchedThreads']; - delete watched[board][threadID]; - if (!Object.keys(watched[board]).length) { - delete watched[board]; - } - ThreadWatcher.refresh(watched); - return $.set('WatchedThreads', watched); - }); - }, - watch: function(thread) { - return $.get('WatchedThreads', {}, function(item) { - var watched, _name; - - watched = item['WatchedThreads']; - watched[_name = thread.board] || (watched[_name] = {}); - watched[thread.board][thread] = { - href: "/" + thread.board + "/res/" + thread, - textContent: Get.threadExcerpt(thread) - }; - ThreadWatcher.refresh(watched); - return $.set('WatchedThreads', watched); - }); - } - }; - - Linkify = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Linkify']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Linkify', - cb: this.node - }); - }, - regString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, - cypher: $.el('div'), - node: function() { - var a, child, cypher, cypherText, data, embed, embedder, embeds, i, index, len, link, links, lookahead, name, next, node, nodes, snapshot, spoiler, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2; - - if (this.isClone && Conf['Embedding']) { - _ref = $$('.embedder', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - embedder = _ref[_i]; - $.on(embedder, "click", Linkify.toggle); - } - return; - } - snapshot = $.X('.//text()', this.nodes.comment); - cypher = Linkify.cypher; - i = -1; - len = snapshot.snapshotLength; - while (++i < len) { - nodes = $.frag(); - node = snapshot.snapshotItem(i); - data = node.data; - if (!(node.parentNode && Linkify.regString.test(data))) { - continue; - } - Linkify.regString.lastIndex = 0; - cypherText = []; - if (next = node.nextSibling) { - cypher.textContent = node.textContent; - cypherText[0] = cypher.innerHTML; - while ((next.nodeName.toLowerCase() === 'wbr' || next.nodeName.toLowerCase() === 's') && (lookahead = next.nextSibling) && ((name = lookahead.nodeName) === "#text" || name.toLowerCase() === 'br')) { - cypher.textContent = lookahead.textContent; - cypherText.push((spoiler = next.innerHTML) ? "" + (spoiler.replace(/" : ''); - cypherText.push(cypher.innerHTML); - $.rm(next); - next = lookahead.nextSibling; - if (lookahead.nodeName === "#text") { - $.rm(lookahead); - } - if (!next) { - break; - } - } - } - if (cypherText.length) { - data = cypherText.join(''); - } - links = data.match(Linkify.regString); - for (_j = 0, _len1 = links.length; _j < _len1; _j++) { - link = links[_j]; - index = data.indexOf(link); - if (text = data.slice(0, index)) { - cypher.innerHTML = text; - _ref1 = __slice.call(cypher.childNodes); - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - child = _ref1[_k]; - $.add(nodes, child); - } - } - cypher.innerHTML = (link.indexOf(':') < 0 ? (link.indexOf('@') > 0 ? 'mailto:' + link : 'http://' + link) : link).replace(/<(wbr|s|\/s)>/g, ''); - a = $.el('a', { - innerHTML: link, - className: 'linkify', - rel: 'nofollow noreferrer', - target: '_blank', - href: cypher.textContent - }); - $.add(nodes, Linkify.embedder(a)); - data = data.slice(index + link.length); - } - if (data) { - cypher.innerHTML = data; - _ref2 = __slice.call(cypher.childNodes); - for (_l = 0, _len3 = _ref2.length; _l < _len3; _l++) { - child = _ref2[_l]; - $.add(nodes, child); - } - } - $.replace(node, nodes); - } - if (Conf['Auto-embed']) { - embeds = $$('.embedder', this.nodes.comment); - for (_m = 0, _len4 = embeds.length; _m < _len4; _m++) { - embed = embeds[_m]; - embed.click(); - } - } - }, - toggle: function() { - var el, embed, items, style, type, url; - - embed = this.previousElementSibling; - if (this.className.contains("embedded")) { - el = $.el('a', { - rel: 'nofollow noreferrer', - target: 'blank', - className: 'linkify', - href: url = this.getAttribute("data-originalURL"), - textContent: this.getAttribute("data-title") || url - }); - this.textContent = '(embed)'; - } else { - el = (type = Linkify.types[this.getAttribute("data-service")]).el.call(this); - if (style = type.style) { - el.style.cssText = style; - } else { - items = { - 'embedWidth': Config['embedWidth'], - 'embedHeight': Config['embedHeight'] - }; - $.get(items, function(items) { - return el.style.cssText = "border: 0; width: " + items['embedWidth'] + "px; height: " + items['embedHeight'] + "px"; - }); - } - this.textContent = '(unembed)'; - } - $.replace(embed, el); - return $.toggleClass(this, 'embedded'); - }, - types: { - YouTube: { - regExp: /.*(?:youtu.be\/|youtube.*v=|youtube.*\/embed\/|youtube.*\/v\/|youtube.*videos\/)([^#\&\?]*).*/, - el: function() { - return $.el('iframe', { - src: "//www.youtube.com/embed/" + this.name - }); - }, - title: { - api: function() { - return "https://gdata.youtube.com/feeds/api/videos/" + this.name + "?alt=json&fields=title/text(),yt:noembed,app:control/yt:state/@reasonCode"; - }, - text: function() { - return JSON.parse(this.responseText).entry.title.$t; - } - } - }, - Vocaroo: { - regExp: /.*(?:vocaroo.com\/)([^#\&\?]*).*/, - style: 'border: 0; width: 150px; height: 45px;', - el: function() { - return $.el('object', { - innerHTML: "" - }); - } - }, - Vimeo: { - regExp: /.*(?:vimeo.com\/)([^#\&\?]*).*/, - el: function() { - return $.el('iframe', { - src: "//player.vimeo.com/video/" + this.name - }); - }, - title: { - api: function() { - return "https://vimeo.com/api/oembed.json?url=http://vimeo.com/" + this.name; - }, - text: function() { - return JSON.parse(this.responseText).title; - } - } - }, - LiveLeak: { - regExp: /.*(?:liveleak.com\/view.+i=)([0-9a-z_]+)/, - el: function() { - return $.el('iframe', { - src: "http://www.liveleak.com/e/" + this.name + "?autostart=true" - }); - } - }, - audio: { - regExp: /(.*\.(mp3|ogg|wav))$/, - el: function() { - return $.el('audio', { - controls: 'controls', - preload: 'auto', - src: this.name - }); - } - }, - SoundCloud: { - regExp: /.*(?:soundcloud.com\/|snd.sc\/)([^#\&\?]*).*/, - el: function() { - var div; - - div = $.el('div', { - className: "soundcloud", - name: "soundcloud" - }); - return $.ajax("//soundcloud.com/oembed?show_artwork=false&&maxwidth=500px&show_comments=false&format=json&url=" + (this.getAttribute('data-originalURL')) + "&color=" + (Style.colorToHex(Themes[Conf['theme']]['Background Color'])), { - div: div, - onloadend: function() { - return this.div.innerHTML = JSON.parse(this.responseText).html; - } - }, false); - } - }, - pastebin: { - regExp: /.*(?:pastebin.com\/)([^#\&\?]*).*/, - el: function() { - var div; - - return div = $.el('iframe', { - src: "http://pastebin.com/embed_iframe.php?i=" + this.name - }); - } - } - }, - embedder: function(a) { - var callbacks, embed, key, match, service, titles, type, _ref; - - if (!Conf['Embedding']) { - return [a]; - } - titles = {}; - callbacks = function() { - var title; - - return a.textContent = (function() { - switch (this.status) { - case 200: - case 304: - title = "[" + (embed.getAttribute('data-service')) + "] " + (service.text.call(this)); - embed.setAttribute('data-title', title); - titles[embed.name] = [title, Date.now()]; - $.set('CachedTitles', titles); - return title; - case 404: - return "[" + key + "] Not Found"; - case 403: - return "[" + key + "] Forbidden or Private"; - default: - return "[" + key + "] " + this.status + "'d"; - } - }).call(this); - }; - _ref = Linkify.types; - for (key in _ref) { - type = _ref[key]; - if (!(match = a.href.match(type.regExp))) { - continue; - } - embed = $.el('a', { - name: (a.name = match[1]), - className: 'embedder', - href: 'javascript:;', - textContent: '(embed)' - }); - embed.setAttribute('data-service', key); - embed.setAttribute('data-originalURL', a.href); - $.on(embed, 'click', Linkify.toggle); - if (Conf['Link Title'] && (service = type.title)) { - $.get('CachedTitles', {}, function(item) { - var err, title; - - titles = item['CachedTitles']; - if (title = titles[match[1]]) { - a.textContent = title[0]; - return embed.setAttribute('data-title', title[0]); - } else { - try { - return $.cache(service.api.call(a), callbacks); - } catch (_error) { - err = _error; - return a.innerHTML = "[" + key + "] Title Link Blocked (are you using NoScript?)"; - } - } - }); - } - return [a, $.tn(' '), embed]; - } - return [a]; - } - }; - - QR = { - init: function() { - var sc; - - if (!Conf['Quick Reply']) { - return; - } - this.db = new DataBoard('yourPosts'); - sc = $.el('a', { - className: "qr-shortcut " + (!Conf['Persistent QR'] ? 'disabled' : ''), - textContent: 'QR', - title: 'Quick Reply', - href: 'javascript:;' - }); - $.on(sc, 'click', function() { - if (!QR.nodes || QR.nodes.el.hidden) { - $.event('CloseMenu'); - QR.open(); - QR.nodes.com.focus(); - } else { - QR.close(); - } - return $.toggleClass(this, 'disabled'); - }); - Header.addShortcut(sc); - if (Conf['Hide Original Post Form']) { - $.asap((function() { - return doc; - }), function() { - return $.addClass(doc, 'hide-original-post-form'); - }); - } - $.on(d, '4chanXInitFinished', this.initReady); - return Post.prototype.callbacks.push({ - name: 'Quick Reply', - cb: this.node - }); - }, - initReady: function() { - $.off(d, '4chanXInitFinished', QR.initReady); - QR.postingIsEnabled = !!$.id('postForm'); - if (!QR.postingIsEnabled) { - return; - } - $.on(d, 'QRGetSelectedPost', function(_arg) { - var cb; - - cb = _arg.detail; - return cb(QR.selected); - }); - $.on(d, 'QRAddPreSubmitHook', function(_arg) { - var cb; - - cb = _arg.detail; - return QR.preSubmitHooks.push(cb); - }); - $.on(d, 'dragover', QR.dragOver); - $.on(d, 'drop', QR.dropFile); - $.on(d, 'dragstart dragend', QR.drag); - $.on(d, 'ThreadUpdate', function() { - if (g.DEAD) { - return QR.abort(); - } else { - return QR.status(); - } - }); - if (Conf['Persistent QR']) { - return QR.persist(); - } - }, - node: function() { - return $.on($('a[title="Quote this post"]', this.nodes.info), 'click', QR.quote); - }, - persist: function() { - QR.open(); - if (Conf['Auto-Hide QR']) { - return QR.hide(); - } - }, - open: function() { - var err; - - if (QR.nodes) { - QR.nodes.el.hidden = false; - QR.unhide(); - return; - } - try { - return QR.dialog(); - } catch (_error) { - err = _error; - delete QR.nodes; - return Main.handleErrors({ - message: 'Quick Reply dialog creation crashed.', - error: err - }); - } - }, - close: function() { - var i, _i, _len, _ref; - - if (QR.req) { - QR.abort(); - return; - } - QR.nodes.el.hidden = true; - QR.cleanNotifications(); - d.activeElement.blur(); - $.rmClass(QR.nodes.el, 'dump'); - _ref = QR.posts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - i = _ref[_i]; - QR.posts[0].rm(); - } - QR.cooldown.auto = false; - QR.status(); - if (!Conf['Remember Spoiler'] && QR.nodes.spoiler.checked) { - return QR.nodes.spoiler.click(); - } - }, - focusin: function() { - return $.addClass(QR.nodes.el, 'has-focus'); - }, - focusout: function() { - return $.rmClass(QR.nodes.el, 'has-focus'); - }, - hide: function() { - d.activeElement.blur(); - $.addClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = true; - }, - unhide: function() { - $.rmClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = false; - }, - toggleHide: function() { - if (this.checked) { - return QR.hide(); - } else { - return QR.unhide(); - } - }, - error: function(err) { - var el; - - QR.open(); - if (typeof err === 'string') { - el = $.tn(err); - } else { - el = err; - el.removeAttribute('style'); - } - if (QR.captcha.isEnabled && /captcha|verification/i.test(el.textContent)) { - QR.captcha.nodes.input.focus(); - } - if (d.hidden) { - alert(el.textContent); - } - return QR.notifications.push(new Notification('warning', el)); - }, - notifications: [], - cleanNotifications: function() { - var notification, _i, _len, _ref; - - _ref = QR.notifications; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - notification = _ref[_i]; - notification.close(); - } - return QR.notifications = []; - }, - status: function() { - var disabled, status, value; - - if (!QR.nodes) { - return; - } - if (g.DEAD) { - value = 404; - disabled = true; - QR.cooldown.auto = false; - } - value = QR.req ? QR.req.progress : QR.cooldown.seconds || value; - status = QR.nodes.status; - status.value = !value ? 'Submit' : QR.cooldown.auto ? "Auto " + value : value; - return status.disabled = disabled || false; - }, - cooldown: { - init: function() { - var board; - - if (!Conf['Cooldown']) { - return; - } - board = g.BOARD.ID; - QR.cooldown.types = { - thread: (function() { - switch (board) { - case 'q': - return 86400; - case 'b': - case 'soc': - case 'r9k': - return 600; - default: - return 300; - } - })(), - sage: board === 'q' ? 600 : 60, - file: board === 'q' ? 300 : 30, - post: board === 'q' ? 60 : 30 - }; - QR.cooldown.upSpd = 0; - QR.cooldown.upSpdAccuracy = .5; - $.get("cooldown." + board, {}, function(item) { - QR.cooldown.cooldowns = item["cooldown." + board]; - return QR.cooldown.start(); - }); - return $.sync("cooldown." + board, QR.cooldown.sync); - }, - start: function() { - if (!Conf['Cooldown']) { - return; - } - if (QR.cooldown.isCounting) { - return; - } - QR.cooldown.isCounting = true; - return QR.cooldown.count(); - }, - sync: function(cooldowns) { - var id; - - for (id in cooldowns) { - QR.cooldown.cooldowns[id] = cooldowns[id]; - } - return QR.cooldown.start(); - }, - set: function(data) { - var cooldown, delay, hasFile, isReply, isSage, post, req, start, type, upSpd; - - if (!Conf['Cooldown']) { - return; - } - req = data.req, post = data.post, isReply = data.isReply, delay = data.delay; - start = req ? req.uploadEndTime : Date.now(); - if (delay) { - cooldown = { - delay: delay - }; - } else { - if (post.file) { - upSpd = post.file.size / ((req.uploadEndTime - req.uploadStartTime) / $.SECOND); - QR.cooldown.upSpdAccuracy = ((upSpd > QR.cooldown.upSpd * .9) + QR.cooldown.upSpdAccuracy) / 2; - QR.cooldown.upSpd = upSpd; - } - isSage = /sage/i.test(post.email); - hasFile = !!post.file; - type = !isReply ? 'thread' : isSage ? 'sage' : hasFile ? 'file' : 'post'; - cooldown = { - isReply: isReply, - isSage: isSage, - hasFile: hasFile, - timeout: start + QR.cooldown.types[type] * $.SECOND - }; - } - QR.cooldown.cooldowns[start] = cooldown; - $.set("cooldown." + g.BOARD, QR.cooldown.cooldowns); - return QR.cooldown.start(); - }, - unset: function(id) { - delete QR.cooldown.cooldowns[id]; - if (Object.keys(QR.cooldown.cooldowns).length) { - return $.set("cooldown." + g.BOARD, QR.cooldown.cooldowns); - } else { - return $["delete"]("cooldown." + g.BOARD); - } - }, - count: function() { - var cooldown, cooldowns, elapsed, hasFile, isReply, isSage, now, post, seconds, start, type, types, upSpd, upSpdAccuracy, update, _ref; - - if (!Object.keys(QR.cooldown.cooldowns).length) { - $["delete"]("" + g.BOARD + ".cooldown"); - delete QR.cooldown.isCounting; - delete QR.cooldown.seconds; - QR.status(); - return; - } - setTimeout(QR.cooldown.count, $.SECOND); - now = Date.now(); - post = QR.posts[0]; - isReply = post.thread !== 'new'; - isSage = /sage/i.test(post.email); - hasFile = !!post.file; - seconds = null; - _ref = QR.cooldown, types = _ref.types, cooldowns = _ref.cooldowns, upSpd = _ref.upSpd, upSpdAccuracy = _ref.upSpdAccuracy; - for (start in cooldowns) { - cooldown = cooldowns[start]; - if ('delay' in cooldown) { - if (cooldown.delay) { - seconds = Math.max(seconds, cooldown.delay--); - } else { - seconds = Math.max(seconds, 0); - QR.cooldown.unset(start); - } - continue; - } - if (isReply === cooldown.isReply) { - type = !isReply ? 'thread' : isSage && cooldown.isSage ? 'sage' : hasFile && cooldown.hasFile ? 'file' : 'post'; - elapsed = Math.floor((now - start) / $.SECOND); - if (elapsed >= 0) { - seconds = Math.max(seconds, types[type] - elapsed); - if (hasFile && upSpd) { - seconds -= Math.floor(post.file.size / upSpd * upSpdAccuracy); - seconds = Math.max(seconds, 0); - } - } - } - if (!((start <= now && now <= cooldown.timeout))) { - QR.cooldown.unset(start); - } - } - update = seconds !== null || !!QR.cooldown.seconds; - QR.cooldown.seconds = seconds; - if (update) { - QR.status(); - } - if (seconds === 0 && QR.cooldown.auto && !QR.req) { - return QR.submit(); - } - } - }, - quote: function(e) { - var OP, caretPos, com, index, post, range, s, sel, selectionRoot, text, thread, _ref; - - if (e != null) { - e.preventDefault(); - } - if (!QR.postingIsEnabled) { - return; - } - sel = d.getSelection(); - selectionRoot = $.x('ancestor::div[contains(@class,"postContainer")][1]', sel.anchorNode); - post = Get.postFromNode(this); - OP = Get.contextFromLink(this).thread.OP; - text = ">>" + post + "\n"; - if ((s = sel.toString().trim()) && post.nodes.root === selectionRoot) { - s = s.replace(/\n/g, '\n>'); - text += ">" + s + "\n"; - } - QR.open(); - if (QR.selected.isLocked) { - index = QR.posts.indexOf(QR.selected); - (QR.posts[index + 1] || new QR.post()).select(); - $.addClass(QR.nodes.el, 'dump'); - QR.cooldown.auto = true; - } - _ref = QR.nodes, com = _ref.com, thread = _ref.thread; - if (!com.value) { - thread.value = OP.ID; - } - caretPos = com.selectionStart; - com.value = com.value.slice(0, caretPos) + text + com.value.slice(com.selectionEnd); - range = caretPos + text.length; - com.setSelectionRange(range, range); - com.focus(); - QR.selected.save(com); - return QR.selected.save(thread); - }, - characterCount: function() { - var count, counter; - - counter = QR.nodes.charCount; - count = QR.nodes.com.textLength; - counter.textContent = count; - counter.hidden = count < 1000; - return (count > 1500 ? $.addClass : $.rmClass)(counter, 'warning'); - }, - drag: function(e) { - var toggle; - - toggle = e.type === 'dragstart' ? $.off : $.on; - toggle(d, 'dragover', QR.dragOver); - return toggle(d, 'drop', QR.dropFile); - }, - dragOver: function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'copy'; - }, - dropFile: function(e) { - if (!e.dataTransfer.files.length) { - return; - } - e.preventDefault(); - QR.open(); - QR.fileInput(e.dataTransfer.files); - return $.addClass(QR.nodes.el, 'dump'); - }, - paste: function(e) { - var blob, files, item, _i, _len, _ref; - - files = []; - _ref = e.clipboardData.items; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - item = _ref[_i]; - if (item.kind === 'file') { - blob = item.getAsFile(); - blob.name = 'file'; - if (blob.type) { - blob.name += '.' + blob.type.split('/')[1]; - } - files.push(blob); - } - } - if (!files.length) { - return; - } - QR.open(); - return QR.fileInput(files); - }, - openFileInput: function(e) { - if (e.keyCode && e.keyCode !== 32) { - return; - } - return QR.nodes.fileInput.click(); - }, - fileInput: function(files) { - var file, length, max, post, _i, _len; - - if (this instanceof Element) { - files = __slice.call(this.files); - QR.nodes.fileInput.value = null; - } - length = files.length; - if (!length) { - return; - } - max = QR.nodes.fileInput.max; - QR.cleanNotifications(); - if (length === 1) { - file = files[0]; - if (/^text/.test(file.type)) { - QR.selected.pasteText(file); - } else if (file.size > max) { - QR.error("File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); - } else if (!QR.mimeTypes.contains(file.type)) { - QR.error('Unsupported file type.'); - } else { - QR.selected.setFile(file); - } - return; - } - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; - if (/^text/.test(file.type)) { - if ((post = QR.posts[QR.posts.length - 1]).com) { - post = new QR.post(); - } - post.pasteText(file); - } else if (file.size > max) { - QR.error("" + file.name + ": File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); - } else if (!QR.mimeTypes.contains(file.type)) { - QR.error("" + file.name + ": Unsupported file type."); - } else { - if ((post = QR.posts[QR.posts.length - 1]).file) { - post = new QR.post(); - } - post.setFile(file); - } - } - return $.addClass(QR.nodes.el, 'dump'); - }, - posts: [], - post: (function() { - function _Class(select) { - var el, event, prev, _i, _len, _ref, - _this = this; - - el = $.el('a', { - className: 'qr-preview', - draggable: true, - href: 'javascript:;', - innerHTML: '×' - }); - this.nodes = { - el: el, - rm: el.firstChild, - label: $('label', el), - spoiler: $('input', el), - span: el.lastChild - }; - $.on(el, 'click', this.select.bind(this)); - $.on(this.nodes.rm, 'click', function(e) { - e.stopPropagation(); - return _this.rm(); - }); - $.on(this.nodes.label, 'click', function(e) { - return e.stopPropagation(); - }); - $.on(this.nodes.spoiler, 'change', function(e) { - _this.spoiler = e.target.checked; - if (_this === QR.selected) { - return QR.nodes.spoiler.checked = _this.spoiler; - } - }); - $.add(QR.nodes.dumpList, el); - _ref = ['dragStart', 'dragEnter', 'dragLeave', 'dragOver', 'dragEnd', 'drop']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - event = _ref[_i]; - $.on(el, event.toLowerCase(), this[event]); - } - this.thread = g.VIEW === 'thread' ? g.THREADID : 'new'; - prev = QR.posts[QR.posts.length - 1]; - QR.posts.push(this); - this.nodes.spoiler.checked = this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false; - $.get('QR.persona', {}, function(item) { - var persona; - - persona = item['QR.persona']; - _this.name = prev ? prev.name : persona.name; - _this.email = prev && !/^sage$/.test(prev.email) ? prev.email : persona.email; - if (Conf['Remember Subject']) { - _this.sub = prev ? prev.sub : persona.sub; - } - if (QR.selected === _this) { - return _this.load(); - } - }); - if (select) { - this.select(); - } - this.unlock(); - } - - _Class.prototype.rm = function() { - var index; - - $.rm(this.nodes.el); - index = QR.posts.indexOf(this); - if (QR.posts.length === 1) { - new QR.post(true); - } else if (this === QR.selected) { - (QR.posts[index - 1] || QR.posts[index + 1]).select(); - } - QR.posts.splice(index, 1); - if (!window.URL) { - return; - } - return URL.revokeObjectURL(this.URL); - }; - - _Class.prototype.lock = function(lock) { - var name, _i, _len, _ref; - - if (lock == null) { - lock = true; - } - this.isLocked = lock; - if (this !== QR.selected) { - return; - } - _ref = ['thread', 'name', 'email', 'sub', 'com', 'spoiler']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - QR.nodes[name].disabled = lock; - } - this.nodes.rm.style.visibility = QR.nodes.fileRM.style.visibility = lock ? 'hidden' : ''; - (lock ? $.off : $.on)(QR.nodes.filename.parentNode, 'click', QR.openFileInput); - this.nodes.spoiler.disabled = lock; - return this.nodes.el.draggable = !lock; - }; - - _Class.prototype.unlock = function() { - return this.lock(false); - }; - - _Class.prototype.select = function() { - var rectEl, rectList; - - if (QR.selected) { - QR.selected.nodes.el.id = null; - QR.selected.forceSave(); - } - QR.selected = this; - this.lock(this.isLocked); - this.nodes.el.id = 'selected'; - rectEl = this.nodes.el.getBoundingClientRect(); - rectList = this.nodes.el.parentNode.getBoundingClientRect(); - this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2; - this.load(); - return $.event('QRPostSelection', this); - }; - - _Class.prototype.load = function() { - var name, _i, _len, _ref; - - _ref = ['thread', 'name', 'email', 'sub', 'com']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - QR.nodes[name].value = this[name] || null; - } - this.showFileData(); - return QR.characterCount(); - }; - - _Class.prototype.save = function(input) { - var value, _ref; - - if (input.type === 'checkbox') { - this.spoiler = input.checked; - return; - } - value = input.value; - this[input.dataset.name] = value; - if (input.nodeName !== 'TEXTAREA') { - return; - } - this.nodes.span.textContent = value; - QR.characterCount(); - if (QR.cooldown.auto && this === QR.posts[0] && (0 < (_ref = QR.cooldown.seconds) && _ref <= 5)) { - return QR.cooldown.auto = false; - } - }; - - _Class.prototype.forceSave = function() { - var name, _i, _len, _ref; - - if (this !== QR.selected) { - return; - } - _ref = ['thread', 'name', 'email', 'sub', 'com', 'spoiler']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - this.save(QR.nodes[name]); - } - }; - - _Class.prototype.setFile = function(file) { - this.file = file; - this.filename = "" + file.name + " (" + ($.bytesToString(file.size)) + ")"; - this.nodes.el.title = this.filename; - if (QR.spoiler) { - this.nodes.label.hidden = false; - } - if (window.URL) { - URL.revokeObjectURL(this.URL); - } - this.showFileData(); - if (!/^image/.test(file.type)) { - this.nodes.el.style.backgroundImage = null; - return; - } - return this.setThumbnail(); - }; - - _Class.prototype.setThumbnail = function(fileURL) { - var img, reader, - _this = this; - - if (!window.URL) { - if (!fileURL) { - reader = new FileReader(); - reader.onload = function(e) { - return _this.setThumbnail(e.target.result); - }; - reader.readAsDataURL(this.file); - return; - } - } else { - fileURL = URL.createObjectURL(this.file); - } - img = $.el('img'); - img.onload = function() { - var applyBlob, cv, data, height, i, l, s, ui8a, width, _i; - - s = 90 * 2; - if (_this.file.type === 'image/gif') { - s *= 3; - } - height = img.height, width = img.width; - if (height < s || width < s) { - if (window.URL) { - _this.URL = fileURL; - } - _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; - return; - } - if (height <= width) { - width = s / height * width; - height = s; - } else { - height = s / width * height; - width = s; - } - cv = $.el('canvas'); - cv.height = img.height = height; - cv.width = img.width = width; - cv.getContext('2d').drawImage(img, 0, 0, width, height); - if (!window.URL) { - _this.nodes.el.style.backgroundImage = "url(" + (cv.toDataURL()) + ")"; - delete _this.URL; - return; - } - URL.revokeObjectURL(fileURL); - applyBlob = function(blob) { - _this.URL = URL.createObjectURL(blob); - return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; - }; - if (cv.toBlob) { - cv.toBlob(applyBlob); - return; - } - data = atob(cv.toDataURL().split(',')[1]); - l = data.length; - ui8a = new Uint8Array(l); - for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) { - ui8a[i] = data.charCodeAt(i); - } - return applyBlob(new Blob([ui8a], { - type: 'image/png' - })); - }; - return img.src = fileURL; - }; - - _Class.prototype.rmFile = function() { - delete this.file; - delete this.filename; - this.nodes.el.title = null; - this.nodes.el.style.backgroundImage = null; - if (QR.spoiler) { - this.nodes.label.hidden = true; - } - this.showFileData(); - if (!window.URL) { - return; - } - return URL.revokeObjectURL(this.URL); - }; - - _Class.prototype.showFileData = function() { - if (this.file) { - QR.nodes.filename.textContent = this.filename; - QR.nodes.filename.title = this.filename; - if (QR.spoiler) { - QR.nodes.spoiler.checked = this.spoiler; - } - return $.addClass(QR.nodes.fileSubmit, 'has-file'); - } else { - return $.rmClass(QR.nodes.fileSubmit, 'has-file'); - } - }; - - _Class.prototype.pasteText = function(file) { - var reader, - _this = this; - - reader = new FileReader(); - reader.onload = function(e) { - var text; - - text = e.target.result; - if (_this.com) { - _this.com += "\n" + text; - } else { - _this.com = text; - } - if (QR.selected === _this) { - QR.nodes.com.value = _this.com; - } - return _this.nodes.span.textContent = _this.com; - }; - return reader.readAsText(file); - }; - - _Class.prototype.dragStart = function() { - return $.addClass(this, 'drag'); - }; - - _Class.prototype.dragEnd = function() { - return $.rmClass(this, 'drag'); - }; - - _Class.prototype.dragEnter = function() { - return $.addClass(this, 'over'); - }; - - _Class.prototype.dragLeave = function() { - return $.rmClass(this, 'over'); - }; - - _Class.prototype.dragOver = function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'move'; - }; - - _Class.prototype.drop = function() { - var el, index, newIndex, oldIndex, post; - - el = $('.drag', this.parentNode); - $.rmClass(el, 'drag'); - $.rmClass(this, 'over'); - if (!this.draggable) { - return; - } - index = function(el) { - return __slice.call(el.parentNode.children).indexOf(el); - }; - oldIndex = index(el); - newIndex = index(this); - (oldIndex < newIndex ? $.after : $.before)(this, el); - post = QR.posts.splice(oldIndex, 1)[0]; - return QR.posts.splice(newIndex, 0, post); - }; - - return _Class; - - })(), - captcha: { - init: function() { - if (d.cookie.indexOf('pass_enabled=1') >= 0) { - return; - } - if (!(this.isEnabled = !!$.id('captchaFormPart'))) { - return; - } - return $.asap((function() { - return $.id('recaptcha_challenge_field_holder'); - }), this.ready.bind(this)); - }, - ready: function() { - var MutationObserver, imgContainer, input, observer, setLifetime, - _this = this; - - setLifetime = function(e) { - return _this.lifetime = e.detail; - }; - $.on(window, 'captcha:timeout', setLifetime); - $.globalEval('window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))'); - $.off(window, 'captcha:timeout', setLifetime); - imgContainer = $.el('div', { - className: 'captcha-img', - title: 'Reload', - innerHTML: '' - }); - input = $.el('input', { - className: 'captcha-input field', - title: 'Verification', - autocomplete: 'off', - spellcheck: false, - tabIndex: 55 - }); - this.nodes = { - challenge: $.id('recaptcha_challenge_field_holder'), - img: imgContainer.firstChild, - input: input - }; - if (MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.OMutationObserver) { - observer = new MutationObserver(this.load.bind(this)); - observer.observe(this.nodes.challenge, { - childList: true - }); - } else { - $.on(this.nodes.challenge, 'DOMNodeInserted', this.load.bind(this)); - } - $.on(imgContainer, 'click', this.reload.bind(this)); - $.on(input, 'keydown', this.keydown.bind(this)); - $.on(input, 'focus', function() { - return $.addClass(QR.nodes.el, 'focus'); - }); - $.on(input, 'blur', function() { - return $.rmClass(QR.nodes.el, 'focus'); - }); - $.get('captchas', [], function(item) { - return _this.sync(item['captchas']); - }); - $.sync('captchas', this.sync); - this.reload(); - $.addClass(QR.nodes.el, 'has-captcha'); - return $.after(QR.nodes.com.parentNode, [imgContainer, input]); - }, - sync: function(captchas) { - this.captchas = captchas; - return QR.captcha.count(); - }, - getOne: function() { - var captcha, challenge, response; - - this.clear(); - if (captcha = this.captchas.shift()) { - challenge = captcha.challenge, response = captcha.response; - this.count(); - $.set('captchas', this.captchas); - } else { - challenge = this.nodes.img.alt; - if (response = this.nodes.input.value) { - this.reload(); - } - } - if (response) { - response = response.trim(); - if (!/\s/.test(response)) { - response = "" + response + " " + response; - } - } - return { - challenge: challenge, - response: response - }; - }, - save: function() { - var response; - - if (!(response = this.nodes.input.value.trim())) { - return; - } - this.captchas.push({ - challenge: this.nodes.img.alt, - response: response, - timeout: this.timeout - }); - this.count(); - this.reload(); - return $.set('captchas', this.captchas); - }, - clear: function() { - var captcha, i, now, _i, _len, _ref; - - now = Date.now(); - _ref = this.captchas; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - captcha = _ref[i]; - if (captcha.timeout > now) { - break; - } - } - if (!i) { - return; - } - this.captchas = this.captchas.slice(i); - this.count(); - return $.set('captchas', this.captchas); - }, - load: function() { - var challenge; - - if (!this.nodes.challenge.firstChild) { - return; - } - this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; - challenge = this.nodes.challenge.firstChild.value; - this.nodes.img.alt = challenge; - this.nodes.img.src = "//www.google.com/recaptcha/api/image?c=" + challenge; - this.nodes.input.value = null; - return this.clear(); - }, - count: function() { - var count; - - count = this.captchas.length; - this.nodes.input.placeholder = (function() { - switch (count) { - case 0: - return 'Verification (Shift + Enter to cache)'; - case 1: - return 'Verification (1 cached captcha)'; - default: - return "Verification (" + count + " cached captchas)"; - } - })(); - return this.nodes.input.alt = count; - }, - reload: function(focus) { - $.globalEval('Recaptcha.reload("t")'); - if (focus) { - return this.nodes.input.focus(); - } - }, - keydown: function(e) { - if (e.keyCode === 8 && !this.nodes.input.value) { - this.reload(); - } else if (e.keyCode === 13 && e.shiftKey) { - this.save(); - } else { - return; - } - return e.preventDefault(); - } - }, - dialog: function() { - var dialog, mimeTypes, name, nodes, thread, _i, _len, _ref; - - dialog = UI.dialog('qr', 'top:0;right:0;', "
\n \n ×\n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n +\n
\n
\n \n No selected file\n \n ×\n \n \n
\n \n \n
".replace(/>\s+<')); - QR.nodes = nodes = { - el: dialog, - move: $('.move', dialog), - autohide: $('#autohide', dialog), - thread: $('select', dialog), - close: $('.close', dialog), - form: $('form', dialog), - dumpButton: $('#dump-button', dialog), - name: $('[data-name=name]', dialog), - email: $('[data-name=email]', dialog), - sub: $('[data-name=sub]', dialog), - com: $('[data-name=com]', dialog), - dumpList: $('#dump-list', dialog), - addPost: $('#add-post', dialog), - charCount: $('#char-count', dialog), - fileSubmit: $('#file-n-submit', dialog), - filename: $('#qr-filename', dialog), - fileRM: $('#qr-filerm', dialog), - spoiler: $('#qr-file-spoiler', dialog), - status: $('[type=submit]', dialog), - fileInput: $('[type=file]', dialog) - }; - mimeTypes = $('ul.rules > li').textContent.trim().match(/: (.+)/)[1].toLowerCase().replace(/\w+/g, function(type) { - switch (type) { - case 'jpg': - return 'image/jpeg'; - case 'pdf': - return 'application/pdf'; - case 'swf': - return 'application/x-shockwave-flash'; - default: - return "image/" + type; - } - }); - QR.mimeTypes = mimeTypes.split(', '); - QR.mimeTypes.push(''); - nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value; - QR.spoiler = !!$('input[name=spoiler]'); - nodes.spoiler.parentElement.hidden = !QR.spoiler; - if (g.BOARD.ID === 'f') { - nodes.flashTag = $.el('select', { - name: 'filetag', - innerHTML: "\n\n\n\n\n\n" - }); - $.add(nodes.form, nodes.flashTag); - } - for (thread in g.BOARD.threads) { - $.add(nodes.thread, $.el('option', { - value: thread, - textContent: "Thread No." + thread - })); - } - $.on(nodes.filename.parentNode, 'click keyup', QR.openFileInput); - $.on(QR.nodes.el, 'focusin', QR.focusin); - $.on(QR.nodes.el, 'focusout', QR.focusout); - $.on(nodes.autohide, 'change', QR.toggleHide); - $.on(nodes.close, 'click', QR.close); - $.on(nodes.dumpButton, 'click', function() { - return nodes.el.classList.toggle('dump'); - }); - $.on(nodes.addPost, 'click', function() { - return new QR.post(true); - }); - $.on(nodes.form, 'submit', QR.submit); - $.on(nodes.fileRM, 'click', function() { - return QR.selected.rmFile(); - }); - $.on(nodes.spoiler, 'change', function() { - return QR.selected.nodes.spoiler.click(); - }); - $.on(nodes.fileInput, 'change', QR.fileInput); - _ref = ['name', 'email', 'sub', 'com']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - $.on(nodes[name], 'input', function() { - return QR.selected.save(this); - }); - } - $.on(nodes.thread, 'change', function() { - return QR.selected.save(this); - }); - new QR.post(true); - QR.status(); - QR.cooldown.init(); - QR.captcha.init(); - $.add(d.body, dialog); - return $.event('QRDialogCreation', null, dialog); - }, - preSubmitHooks: [], - submit: function(e) { - var callbacks, challenge, err, filetag, hook, m, opts, post, postData, response, textOnly, thread, threadID, _i, _len, _ref, _ref1; - - if (e != null) { - e.preventDefault(); - } - if (QR.req) { - QR.abort(); - return; - } - if (QR.cooldown.seconds) { - QR.cooldown.auto = !QR.cooldown.auto; - QR.status(); - return; - } - post = QR.posts[0]; - post.forceSave(); - if (g.BOARD.ID === 'f') { - filetag = QR.nodes.flashTag.value; - } - threadID = post.thread; - thread = g.BOARD.threads[threadID]; - if (threadID === 'new') { - threadID = null; - if (['vg', 'q'].contains(g.BOARD.ID) && !post.sub) { - err = 'New threads require a subject.'; - } else if (!(post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { - err = 'No file selected.'; - } - } else if (g.BOARD.threads[threadID].isClosed) { - err = 'You can\'t reply to this thread anymore.'; - } else if (!(post.com || post.file)) { - err = 'No file selected.'; - } else if (post.file && thread.fileLimit) { - err = 'Max limit of image replies has been reached.'; - } else { - _ref = QR.preSubmitHooks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - hook = _ref[_i]; - if (err = hook(post, thread)) { - break; - } - } - } - if (QR.captcha.isEnabled && !err) { - _ref1 = QR.captcha.getOne(), challenge = _ref1.challenge, response = _ref1.response; - if (!response) { - err = 'No valid captcha.'; - } - } - if (err) { - QR.cooldown.auto = false; - QR.status(); - QR.error(err); - return; - } - QR.cleanNotifications(); - QR.cooldown.auto = QR.posts.length > 1; - if (Conf['Auto-Hide QR'] && !QR.cooldown.auto) { - QR.hide(); - } - if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) { - d.activeElement.blur(); - } - post.lock(); - postData = { - resto: threadID, - name: post.name, - email: post.email, - sub: post.sub, - com: post.com, - upfile: post.file, - filetag: filetag, - spoiler: post.spoiler, - textonly: textOnly, - mode: 'regist', - pwd: (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $.id('postPassword').value, - recaptcha_challenge_field: challenge, - recaptcha_response_field: response - }; - callbacks = { - onload: QR.response, - onerror: function() { - delete QR.req; - post.unlock(); - QR.cooldown.auto = false; - QR.status(); - return QR.error($.el('span', { - innerHTML: 'Connection error. You may have been banned.' - })); - } - }; - opts = { - cred: true, - form: $.formData(postData), - upCallbacks: { - onload: function() { - QR.req.isUploadFinished = true; - QR.req.uploadEndTime = Date.now(); - QR.req.progress = '...'; - return QR.status(); - }, - onprogress: function(e) { - QR.req.progress = "" + (Math.round(e.loaded / e.total * 100)) + "%"; - return QR.status(); - } - } - }; - QR.req = $.ajax($.id('postForm').parentNode.action, callbacks, opts); - QR.req.uploadStartTime = Date.now(); - QR.req.progress = '...'; - return QR.status(); - }, - response: function() { - var URL, ban, board, err, h1, isReply, m, post, postID, req, threadID, tmpDoc, _, _ref, _ref1; - - QR.req.upload.onload(); - req = QR.req; - delete QR.req; - post = QR.posts[0]; - post.unlock(); - tmpDoc = d.implementation.createHTMLDocument(''); - tmpDoc.documentElement.innerHTML = req.response; - if (ban = $('.banType', tmpDoc)) { - board = $('.board', tmpDoc).innerHTML; - err = $.el('span', { - innerHTML: ban.textContent.toLowerCase() === 'banned' ? ("You are banned on " + board + "! ;_;
") + "Click here to see the reason." : ("You were issued a warning on " + board + " as " + ($('.nameBlock', tmpDoc).innerHTML) + ".
") + ("Reason: " + ($('.reason', tmpDoc).innerHTML)) - }); - } else if (err = tmpDoc.getElementById('errmsg')) { - if ((_ref = $('a', err)) != null) { - _ref.target = '_blank'; - } - } else if (tmpDoc.title !== 'Post successful!') { - err = 'Connection error with sys.4chan.org.'; - } else if (req.status !== 200) { - err = "Error " + req.statusText + " (" + req.status + ")"; - } - if (err) { - if (/captcha|verification/i.test(err.textContent) || err === 'Connection error with sys.4chan.org.') { - if (/mistyped/i.test(err.textContent)) { - err = 'You seem to have mistyped the CAPTCHA.'; - } - QR.cooldown.auto = QR.captcha.isEnabled ? !!QR.captcha.captchas.length : err === 'Connection error with sys.4chan.org.' ? true : false; - QR.cooldown.set({ - delay: 2 - }); - } else if (err.textContent && (m = err.textContent.match(/wait\s(\d+)\ssecond/i))) { - QR.cooldown.auto = QR.captcha.isEnabled ? !!QR.captcha.captchas.length : true; - QR.cooldown.set({ - delay: m[1] - }); - } else { - QR.cooldown.auto = false; - } - QR.status(); - QR.error(err); - return; - } - h1 = $('h1', tmpDoc); - QR.cleanNotifications(); - QR.notifications.push(new Notification('success', h1.textContent, 5)); - $.get('QR.persona', {}, function(item) { - var persona; - - persona = item['QR.persona']; - persona = { - name: post.name, - email: /^sage$/.test(post.email) ? persona.email : post.email, - sub: Conf['Remember Subject'] ? post.sub : null - }; - return $.set('QR.persona', persona); - }); - _ref1 = h1.nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = _ref1[0], threadID = _ref1[1], postID = _ref1[2]; - postID = +postID; - threadID = +threadID || postID; - isReply = threadID !== postID; - QR.db.set({ - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID, - val: true - }); - ThreadUpdater.postID = postID; - $.event('QRPostSuccessful', { - board: g.BOARD, - threadID: threadID, - postID: postID - }); - QR.cooldown.auto = QR.posts.length > 1 && isReply; - if (!(Conf['Persistent QR'] || QR.cooldown.auto)) { - QR.close(); - } else { - post.rm(); - } - QR.cooldown.set({ - req: req, - post: post, - isReply: isReply - }); - if (threadID === postID) { - URL = "/" + g.BOARD + "/res/" + threadID; - } else if (g.VIEW === 'index' && !QR.cooldown.auto && Conf['Open Post in New Tab']) { - URL = "/" + g.BOARD + "/res/" + threadID + "#p" + postID; - } - if (URL) { - if (Conf['Open Post in New Tab']) { - $.open("/" + g.BOARD + "/res/" + threadID); - } else { - window.location = "/" + g.BOARD + "/res/" + threadID; - } - } - return QR.status(); - }, - abort: function() { - if (QR.req && !QR.req.isUploadFinished) { - QR.req.abort(); - delete QR.req; - QR.posts[0].unlock(); - QR.notifications.push(new Notification('info', 'QR upload aborted.', 5)); - } - return QR.status(); - } - }; - - Report = { - init: function() { - if (!/report/.test(location.search)) { - return; - } - return $.ready(this.ready); - }, - ready: function() { - var field, form; - - form = $('form'); - field = $.id('recaptcha_response_field'); - $.on(field, 'keydown', function(e) { - if (e.keyCode === 8 && !field.value) { - return $.globalEval('Recaptcha.reload("t")'); - } - }); - return $.on(form, 'submit', function(e) { - var response; - - e.preventDefault(); - response = field.value.trim(); - if (!/\s/.test(response)) { - field.value = "" + response + " " + response; - } - return form.submit(); - }); - } - }; - - DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts']; - - DataBoard = (function() { - function DataBoard(key, sync) { - var init, - _this = this; - - this.key = key; - this.data = Conf[key]; - $.sync(key, this.onSync.bind(this)); - this.clean(); - if (!sync) { - return; - } - init = function() { - $.off(d, '4chanXInitFinished', init); - return _this.sync = sync; - }; - $.on(d, '4chanXInitFinished', init); - } - - DataBoard.prototype["delete"] = function(_arg) { - var boardID, postID, threadID; - - boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID; - if (postID) { - delete this.data.boards[boardID][threadID][postID]; - this.deleteIfEmpty({ - boardID: boardID, - threadID: threadID - }); - } else if (threadID) { - delete this.data.boards[boardID][threadID]; - this.deleteIfEmpty({ - boardID: boardID - }); - } else { - delete this.data.boards[boardID]; - } - return $.set(this.key, this.data); - }; - - DataBoard.prototype.deleteIfEmpty = function(_arg) { - var boardID, threadID; - - boardID = _arg.boardID, threadID = _arg.threadID; - if (threadID) { - if (!Object.keys(this.data.boards[boardID][threadID]).length) { - delete this.data.boards[boardID][threadID]; - return this.deleteIfEmpty({ - boardID: boardID - }); - } - } else if (!Object.keys(this.data.boards[boardID]).length) { - return delete this.data.boards[boardID]; - } - }; - - DataBoard.prototype.set = function(_arg) { - var boardID, postID, threadID, val, _base, _base1, _base2; - - boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID, val = _arg.val; - if (postID) { - ((_base = ((_base1 = this.data.boards)[boardID] || (_base1[boardID] = {})))[threadID] || (_base[threadID] = {}))[postID] = val; - } else if (threadID) { - ((_base2 = this.data.boards)[boardID] || (_base2[boardID] = {}))[threadID] = val; - } else { - this.data.boards[boardID] = val; - } - return $.set(this.key, this.data); - }; - - DataBoard.prototype.get = function(_arg) { - var ID, board, boardID, defaultValue, postID, thread, threadID, val, _i, _len; - - boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID, defaultValue = _arg.defaultValue; - if (board = this.data.boards[boardID]) { - if (!threadID) { - if (postID) { - for (thread = _i = 0, _len = board.length; _i < _len; thread = ++_i) { - ID = board[thread]; - if (postID in thread) { - val = thread[postID]; - break; - } - } - } else { - val = board; - } - } else if (thread = board[threadID]) { - val = postID ? thread[postID] : thread; - } - } - return val || defaultValue; - }; - - DataBoard.prototype.clean = function() { - var boardID, now; - - for (boardID in this.data.boards) { - this.deleteIfEmpty({ - boardID: boardID - }); - } - now = Date.now(); - if ((this.data.lastChecked || 0) < now - 12 * $.HOUR) { - this.data.lastChecked = now; - for (boardID in this.data.boards) { - this.ajaxClean(boardID); - } - } - return $.set(this.key, this.data); - }; - - DataBoard.prototype.ajaxClean = function(boardID) { - var _this = this; - - return $.cache("//api.4chan.org/" + boardID + "/threads.json", function(e) { - var board, page, thread, threads, _i, _j, _len, _len1, _ref, _ref1; - - if (e.target.status === 404) { - _this["delete"](boardID); - } else if (e.target.status === 200) { - board = _this.data.boards[boardID]; - threads = {}; - _ref = JSON.parse(e.target.response); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - page = _ref[_i]; - _ref1 = page.threads; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - thread = _ref1[_j]; - if (thread.no in board) { - threads[thread.no] = board[thread.no]; - } - } - } - _this.data.boards[boardID] = threads; - _this.deleteIfEmpty({ - boardID: boardID - }); - } - return $.set(_this.key, _this.data); - }); - }; - - DataBoard.prototype.onSync = function(data) { - this.data = data || { - boards: {} - }; - return typeof this.sync === "function" ? this.sync() : void 0; - }; - - return DataBoard; - - })(); - - Board = (function() { - Board.prototype.toString = function() { - return this.ID; - }; - - function Board(ID) { - this.ID = ID; - this.threads = {}; - this.posts = {}; - g.boards[this] = this; - } - - return Board; - - })(); - - Thread = (function() { - Thread.prototype.callbacks = []; - - Thread.prototype.toString = function() { - return this.ID; - }; - - function Thread(ID, board) { - this.board = board; - this.ID = +ID; - this.fullID = "" + this.board + "." + this.ID; - this.posts = {}; - g.threads[this.fullID] = board.threads[this] = this; - } - - Thread.prototype.kill = function() { - this.isDead = true; - return this.timeOfDeath = Date.now(); - }; - - return Thread; - - })(); - - Post = (function() { - Post.prototype.callbacks = []; - - Post.prototype.toString = function() { - return this.ID; - }; - - function Post(root, thread, board, that) { - var alt, anchor, capcode, date, email, file, fileInfo, flag, info, name, post, size, subject, thumb, tripcode, uniqueID, unit; - - this.thread = thread; - this.board = board; - if (that == null) { - that = {}; - } - this.ID = +root.id.slice(2); - this.fullID = "" + this.board + "." + this.ID; - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') - }; - this.info = {}; - if (subject = $('.subject', info)) { - this.nodes.subject = subject; - this.info.subject = subject.textContent; - } - if (name = $('.name', info)) { - this.nodes.name = name; - this.info.name = name.textContent; - } - if (email = $('.useremail', info)) { - this.nodes.email = email; - this.info.email = decodeURIComponent(email.href.slice(7)); - } - if (tripcode = $('.postertrip', info)) { - this.nodes.tripcode = tripcode; - this.info.tripcode = tripcode.textContent; - } - if (uniqueID = $('.posteruid', info)) { - this.nodes.uniqueID = uniqueID; - this.info.uniqueID = uniqueID.firstElementChild.textContent; - } - if (capcode = $('.capcode.hand', info)) { - this.nodes.capcode = capcode; - this.info.capcode = capcode.textContent.replace('## ', ''); - } - if (flag = $('.countryFlag', info)) { - this.nodes.flag = flag; - this.info.flag = flag.title; - } - if (date = $('.dateTime', info)) { - this.nodes.date = date; - this.info.date = new Date(date.dataset.utc * 1000); - } - if (Conf['Quick Reply']) { - this.info.yours = QR.db.get({ - boardID: this.board, - threadID: this.thread, - postID: this.ID - }); - } - this.parseComment(); - this.parseQuotes(); - if ((file = $('.file', post)) && (thumb = $('img[data-md5]', file))) { - alt = thumb.alt; - anchor = thumb.parentNode; - fileInfo = file.firstElementChild; - this.file = { - info: fileInfo, - text: fileInfo.firstElementChild, - thumb: thumb, - URL: anchor.href, - size: alt.match(/[\d.]+\s\w+/)[0], - MD5: thumb.dataset.md5, - isSpoiler: $.hasClass(anchor, 'imgspoiler') - }; - size = +this.file.size.match(/[\d.]+/)[0]; - unit = ['B', 'KB', 'MB', 'GB'].indexOf(this.file.size.match(/\w+$/)[0]); - while (unit-- > 0) { - size *= 1024; - } - this.file.sizeInBytes = size; - this.file.thumbURL = that.isArchived ? thumb.src : "" + location.protocol + "//thumbs.4chan.org/" + board + "/thumb/" + (this.file.URL.match(/(\d+)\./)[1]) + "s.jpg"; - this.file.name = $('span[title]', fileInfo).title.replace(/%22/g, '"'); - if (this.file.isImage = /(jpg|png|gif)$/i.test(this.file.name)) { - this.file.dimensions = this.file.text.textContent.match(/\d+x\d+/)[0]; - } - } - if (!(this.isReply = $.hasClass(post, 'reply'))) { - this.thread.OP = this; - this.thread.isSticky = !!$('.stickyIcon', this.nodes.info); - this.thread.isClosed = !!$('.closedIcon', this.nodes.info); - } - this.clones = []; - g.posts[this.fullID] = thread.posts[this] = board.posts[this] = this; - if (that.isArchived) { - this.kill(); - } - } - - Post.prototype.parseComment = function() { - var bq, data, i, node, nodes, text, _i, _j, _len, _ref, _ref1; - - bq = this.nodes.comment.cloneNode(true); - _ref = $$('.abbr, .capcodeReplies, .exif, b', bq); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - $.rm(node); - } - text = []; - nodes = d.evaluate('.//br|.//text()', bq, null, 7, null); - for (i = _j = 0, _ref1 = nodes.snapshotLength; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { - text.push((data = nodes.snapshotItem(i).data) ? data : '\n'); - } - return this.info.comment = text.join('').trim().replace(/\s+$/gm, ''); - }; - - Post.prototype.parseQuotes = function() { - var hash, pathname, quotelink, quotes, _i, _len, _ref; - - quotes = {}; - _ref = $$('.quotelink', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - hash = quotelink.hash; - if (!hash) { - continue; - } - pathname = quotelink.pathname; - if (/catalog$/.test(pathname)) { - continue; - } - if (quotelink.hostname !== 'boards.4chan.org') { - continue; - } - this.nodes.quotelinks.push(quotelink); - if (quotelink.parentNode.parentNode.className === 'capcodeReplies') { - continue; - } - quotes["" + (pathname.split('/')[1]) + "." + hash.slice(2)] = true; - } - if (this.isClone) { - return; - } - return this.quotes = Object.keys(quotes); - }; - - Post.prototype.kill = function(file, now) { - var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1; - - now || (now = new Date()); - if (file) { - if (this.file.isDead) { - return; - } - this.file.isDead = true; - this.file.timeOfDeath = now; - $.addClass(this.nodes.root, 'deleted-file'); - } else { - if (this.isDead) { - return; - } - this.isDead = true; - this.timeOfDeath = now; - $.addClass(this.nodes.root, 'deleted-post'); - } - if (!(strong = $('strong.warning', this.nodes.info))) { - strong = $.el('strong', { - className: 'warning', - textContent: '[Deleted]' - }); - $.after($('input', this.nodes.info), strong); - } - strong.textContent = file ? '[File deleted]' : '[Deleted]'; - if (this.isClone) { - return; - } - _ref = this.clones; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - clone = _ref[_i]; - clone.kill(file, now); - } - if (file) { - return; - } - _ref1 = Get.allQuotelinksLinkingTo(this); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - quotelink = _ref1[_j]; - if ($.hasClass(quotelink, 'deadlink')) { - continue; - } - $.add(quotelink, $.tn('\u00A0(Dead)')); - $.addClass(quotelink, 'deadlink'); - } - }; - - Post.prototype.resurrect = function() { - var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1; - - delete this.isDead; - delete this.timeOfDeath; - $.rmClass(this.nodes.root, 'deleted-post'); - strong = $('strong.warning', this.nodes.info); - if (this.file && this.file.isDead) { - strong.textContent = '[File deleted]'; - } else { - $.rm(strong); - } - if (this.isClone) { - return; - } - _ref = this.clones; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - clone = _ref[_i]; - clone.resurrect(); - } - _ref1 = Get.allQuotelinksLinkingTo(this); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - quotelink = _ref1[_j]; - if ($.hasClass(quotelink, 'deadlink')) { - quotelink.textContent = quotelink.textContent.replace('\u00A0(Dead)', ''); - $.rmClass(quotelink, 'deadlink'); - } - } - }; - - Post.prototype.addClone = function(context) { - return new Clone(this, context); - }; - - Post.prototype.rmClone = function(index) { - var clone, _i, _len, _ref; - - this.clones.splice(index, 1); - _ref = this.clones.slice(index); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - clone = _ref[_i]; - clone.nodes.root.setAttribute('data-clone', index++); - } - }; - - return Post; - - })(); - - Clone = (function(_super) { - __extends(Clone, _super); - - function Clone(origin, context) { - var file, index, info, inline, inlined, key, nodes, post, root, val, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3; - - this.origin = origin; - this.context = context; - _ref = ['ID', 'fullID', 'board', 'thread', 'info', 'quotes', 'isReply']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - key = _ref[_i]; - this[key] = origin[key]; - } - nodes = origin.nodes; - root = nodes.root.cloneNode(true); - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') - }; - _ref1 = $$('.inline', post); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - inline = _ref1[_j]; - $.rm(inline); - } - _ref2 = $$('.inlined', post); - for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { - inlined = _ref2[_k]; - $.rmClass(inlined, 'inlined'); - } - root.hidden = false; - $.rmClass(root, 'forwarded'); - $.rmClass(post, 'highlight'); - if (nodes.subject) { - this.nodes.subject = $('.subject', info); - } - if (nodes.name) { - this.nodes.name = $('.name', info); - } - if (nodes.email) { - this.nodes.email = $('.useremail', info); - } - if (nodes.tripcode) { - this.nodes.tripcode = $('.postertrip', info); - } - if (nodes.uniqueID) { - this.nodes.uniqueID = $('.posteruid', info); - } - if (nodes.capcode) { - this.nodes.capcode = $('.capcode', info); - } - if (nodes.flag) { - this.nodes.flag = $('.countryFlag', info); - } - if (nodes.date) { - this.nodes.date = $('.dateTime', info); - } - this.parseQuotes(); - if (origin.file) { - this.file = {}; - _ref3 = origin.file; - for (key in _ref3) { - val = _ref3[key]; - this.file[key] = val; - } - file = $('.file', post); - this.file.info = file.firstElementChild; - this.file.text = this.file.info.firstElementChild; - this.file.thumb = $('img[data-md5]', file); - this.file.fullImage = $('.full-image', file); - } - if (origin.isDead) { - this.isDead = true; - } - this.isClone = true; - index = origin.clones.push(this) - 1; - root.setAttribute('data-clone', index); - } - - return Clone; - - })(Post); - - Main = { - init: function(items) { - var db, flatten, _i, _len; - - flatten = function(parent, obj) { - var key, val; - - if (obj instanceof Array) { - Conf[parent] = obj[0]; - } else if (typeof obj === 'object') { - for (key in obj) { - val = obj[key]; - flatten(key, val); - } - } else { - Conf[parent] = obj; - } - }; - flatten(null, Config); - for (_i = 0, _len = DataBoards.length; _i < _len; _i++) { - db = DataBoards[_i]; - Conf[db] = { - boards: {} - }; - } - $.get(Conf, Main.initFeatures); - return $.on(d, '4chanMainInit', Main.initStyle); - }, - initFeatures: function(items) { - var init, pathname; - - Conf = items; - pathname = location.pathname.split('/'); - g.BOARD = new Board(pathname[1]); - g.VIEW = (function() { - switch (pathname[2]) { - case 'res': - return 'thread'; - case 'catalog': - return 'catalog'; - default: - return 'index'; - } - })(); - if (g.VIEW === 'thread') { - g.THREADID = +pathname[3]; - } - switch (location.hostname) { - case 'api.4chan.org': - return; - case 'sys.4chan.org': - Report.init(); - return; - case 'images.4chan.org': - $.ready(function() { - var url; - - if (Conf['404 Redirect'] && d.title === '4chan - 404 Not Found') { - url = Redirect.image(pathname[1], pathname[3]); - if (url) { - return location.href = url; - } - } - }); - return; - } - init = function(features) { - var err, module, name; - - for (name in features) { - module = features[name]; - try { - module.init(); - } catch (_error) { - err = _error; - Main.handleErrors({ - message: "\"" + name + "\" initialization crashed.", - error: err - }); - } - } - }; - init({ - 'Polyfill': Polyfill, - 'Header': Header, - 'Catalog Links': CatalogLinks, - 'Settings': Settings, - 'Announcement Hiding': PSAHiding, - 'Fourchan thingies': Fourchan, - 'Custom CSS': CustomCSS, - 'Linkify': Linkify, - 'Resurrect Quotes': Quotify, - 'Filter': Filter, - 'Thread Hiding': ThreadHiding, - 'Reply Hiding': PostHiding, - 'Recursive': Recursive, - 'Strike-through Quotes': QuoteStrikeThrough, - 'Quick Reply': QR, - 'Menu': Menu, - 'Report Link': ReportLink, - 'Thread Hiding (Menu)': ThreadHiding.menu, - 'Reply Hiding (Menu)': PostHiding.menu, - 'Delete Link': DeleteLink, - 'Filter (Menu)': Filter.menu, - 'Download Link': DownloadLink, - 'Archive Link': ArchiveLink, - 'Quote Inlining': QuoteInline, - 'Quote Previewing': QuotePreview, - 'Quote Backlinks': QuoteBacklink, - 'Mark Quotes of You': QuoteYou, - 'Mark OP Quotes': QuoteOP, - 'Mark Cross-thread Quotes': QuoteCT, - 'Anonymize': Anonymize, - 'Time Formatting': Time, - 'Relative Post Dates': RelativeDates, - 'File Info Formatting': FileInfo, - 'Sauce': Sauce, - 'Image Expansion': ImageExpand, - 'Image Expansion (Menu)': ImageExpand.menu, - 'Reveal Spoilers': RevealSpoilers, - 'Image Replace': ImageReplace, - 'Image Hover': ImageHover, - 'Comment Expansion': ExpandComment, - 'Thread Expansion': ExpandThread, - 'Thread Excerpt': ThreadExcerpt, - 'Favicon': Favicon, - 'Unread': Unread, - 'Thread Stats': ThreadStats, - 'Thread Updater': ThreadUpdater, - 'Thread Watcher': ThreadWatcher, - 'Index Navigation': Nav, - 'Keybinds': Keybinds - }); - $.on(d, 'AddCallback', Main.addCallback); - return $.ready(Main.initReady); - }, - initStyle: function() { - var MutationObserver, mainStyleSheet, observer, setStyle, style, styleSheets, _ref; - - $.off(d, '4chanMainInit', Main.initStyle); - if (!Main.isThisPageLegit()) { - return; - } - if ((_ref = $('link[href*=mobile]', d.head)) != null) { - _ref.disabled = true; - } - $.addClass(doc, 'presto'); - $.addClass(doc, 'fourchan-x'); - $.addStyle(Main.css); - if (g.VIEW === 'catalog') { - $.addClass(doc, $.id('base-css').href.match(/catalog_(\w+)/)[1].replace('_new', '').replace(/_+/g, '-')); - return; - } - style = 'yotsuba-b'; - mainStyleSheet = $('link[title=switch]', d.head); - styleSheets = $$('link[rel="alternate stylesheet"]', d.head); - setStyle = function() { - var styleSheet, _i, _len; - - $.rmClass(doc, style); - for (_i = 0, _len = styleSheets.length; _i < _len; _i++) { - styleSheet = styleSheets[_i]; - if (styleSheet.href === mainStyleSheet.href) { - style = styleSheet.title.toLowerCase().replace('new', '').trim().replace(/\s+/g, '-'); - break; - } - } - return $.addClass(doc, style); - }; - setStyle(); - if (!mainStyleSheet) { - return; - } - if (MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.OMutationObserver) { - observer = new MutationObserver(setStyle); - return observer.observe(mainStyleSheet, { - attributes: true, - attributeFilter: ['href'] - }); - } else { - return $.on(mainStyleSheet, 'DOMAttrModified', setStyle); - } - }, - initReady: function() { - var board, boardChild, err, errors, href, posts, thread, threadChild, threads, _i, _j, _len, _len1, _ref, _ref1; - - if (d.title === '4chan - 404 Not Found') { - if (Conf['404 Redirect'] && g.VIEW === 'thread') { - href = Redirect.to({ - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }); - location.href = href || ("/" + g.BOARD + "/"); - } - return; - } - if (!$.hasClass(doc, 'fourchan-x')) { - Main.initStyle(); - } - if (board = $('.board')) { - threads = []; - posts = []; - _ref = board.children; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - boardChild = _ref[_i]; - if (!$.hasClass(boardChild, 'thread')) { - continue; - } - thread = new Thread(boardChild.id.slice(1), g.BOARD); - threads.push(thread); - _ref1 = boardChild.children; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - threadChild = _ref1[_j]; - if (!$.hasClass(threadChild, 'postContainer')) { - continue; - } - try { - posts.push(new Post(threadChild, thread, g.BOARD)); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Post No." + (threadChild.id.match(/\d+/)) + " failed. Post will be skipped.", - error: err - }); - } - } - } - if (errors) { - Main.handleErrors(errors); - } - Main.callbackNodes(Thread, threads); - Main.callbackNodes(Post, posts); - } - $.event('4chanXInitFinished'); - return Main.checkUpdate(); - }, - callbackNodes: function(klass, nodes) { - var callback, err, errors, i, len, node, _i, _j, _len, _ref; - - len = nodes.length; - _ref = klass.prototype.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - callback = _ref[_i]; - for (i = _j = 0; 0 <= len ? _j < len : _j > len; i = 0 <= len ? ++_j : --_j) { - node = nodes[i]; - try { - callback.cb.call(node); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "\"" + callback.name + "\" crashed on " + klass.name + " No." + node + " (/" + node.board + "/).", - error: err - }); - } - } - } - if (errors) { - return Main.handleErrors(errors); - } - }, - addCallback: function(e) { - var Klass, obj; - - obj = e.detail; - if (typeof obj.callback.name !== 'string') { - throw new Error("Invalid callback name: " + obj.callback.name); - } - switch (obj.type) { - case 'Post': - Klass = Post; - break; - case 'Thread': - Klass = Thread; - break; - default: - return; - } - obj.callback.isAddon = true; - return Klass.prototype.callbacks.push(obj.callback); - }, - checkUpdate: function() { - var freq, items, now; - - if (!(Conf['Check for Updates'] && Main.isThisPageLegit())) { - return; - } - now = Date.now(); - freq = 6 * $.HOUR; - items = { - lastupdate: 0, - lastchecked: 0 - }; - return $.get(items, function(items) { - if (items.lastupdate > now - freq || items.lastchecked > now - $.DAY) { - return; - } - return $.ajax('https://4chan-x.just-believe.in/builds/version', { - onload: function() { - var el, version; - - if (this.status !== 200) { - return; - } - version = this.response; - if (!/^\d\.\d+\.\d+$/.test(version)) { - return; - } - if (g.VERSION === version) { - $.set('lastupdate', now); - return; - } - $.set('lastchecked', now); - el = $.el('span', { - innerHTML: "Update: 4chan X v" + version + " is out, get it here." - }); - return new Notification('info', el, 120); - } - }); - }); - }, - handleErrors: function(errors) { - var div, error, logs, _i, _len; - - if (!(errors instanceof Array)) { - error = errors; - } else if (errors.length === 1) { - error = errors[0]; - } - if (error) { - new Notification('error', Main.parseError(error), 15); - return; - } - div = $.el('div', { - innerHTML: "" + errors.length + " errors occurred. [show]" - }); - $.on(div.lastElementChild, 'click', function() { - var _ref; - - return _ref = this.textContent === 'show' ? ['hide', false] : ['show', true], this.textContent = _ref[0], logs.hidden = _ref[1], _ref; - }); - logs = $.el('div', { - hidden: true - }); - for (_i = 0, _len = errors.length; _i < _len; _i++) { - error = errors[_i]; - $.add(logs, Main.parseError(error)); - } - return new Notification('error', [div, logs], 30); - }, - parseError: function(data) { - var error, message; - - Main.logError(data); - message = $.el('div', { - textContent: data.message - }); - error = $.el('div', { - textContent: data.error - }); - return [message, error]; - }, - errors: [], - logError: function(data) { - if (!Main.errors.length) { - $.on(window, 'unload', Main.postErrors); - } - c.error(data.message, data.error.stack); - return Main.errors.push(data); - }, - postErrors: function() { - var errors; - - errors = Main.errors.map(function(d) { - return d.message + ' ' + d.error.stack; - }); - return $.ajax('https://4chan-x.just-believe.in/errors', {}, { - sync: true, - form: $.formData({ - n: "4chan X v" + g.VERSION, - t: 'userjs', - ua: window.navigator.userAgent, - url: window.location.href, - e: errors.join('\n') - }) - }); - }, - isThisPageLegit: function() { - var _ref; - - if (!('thisPageIsLegit' in Main)) { - Main.thisPageIsLegit = location.hostname === 'boards.4chan.org' && !$('link[href*="favicon-status.ico"]', d.head) && ((_ref = d.title) !== '4chan - Temporarily Offline' && _ref !== '4chan - Error'); - } - return Main.thisPageIsLegit; - }, - css: "/* General */\n.dialog {\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder: 1px solid;\ndisplay: block;\npadding: 0;\n}\n.captcha-img,\n.field {\nbackground-color: #FFF;\nborder: 1px solid #CCC;\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\ncolor: #333;\nfont: 13px sans-serif;\noutline: none;\ntransition: color .25s, border-color .25s;\ntransition: color .25s, border-color .25s;\n}\n.field::-moz-placeholder,\n.field:hover::-moz-placeholder {\ncolor: #AAA !important;\n}\n.captch-img:hover,\n.field:hover {\nborder-color: #999;\n}\n.field:hover, .field:focus {\ncolor: #000;\n}\n.field[disabled] {\nbackground-color: #F2F2F2;\ncolor: #888;\n}\n.move {\ncursor: move;\noverflow: hidden;\n}\nlabel, .favicon {\ncursor: pointer;\n}\na[href=\"javascript:;\"] {\ntext-decoration: none;\n}\n.warning {\ncolor: red;\n}\n\n/* 4chan style fixes */\n.opContainer, .op {\ndisplay: block !important;\n}\n.post {\noverflow: visible !important;\n}\n[hidden] {\ndisplay: none !important;\n}\n\n/* fixed, z-index */\n#overlay,\n#fourchanx-settings,\n#qp, #ihover,\n#updater, #thread-stats,\n#navlinks, .fixed #boardNavDesktop,\n#watcher,\n#qr {\nposition: fixed;\n}\n#fourchanx-settings {\nz-index: 999;\n}\n#overlay {\nz-index: 900;\n}\n#notifications {\nz-index: 70;\n}\n#qp, #ihover {\nz-index: 60;\n}\n#menu {\nz-index: 50;\n}\n#navlinks, #updater, #thread-stats {\nz-index: 40;\n}\n#qr {\nz-index: 30;\n}\n#watcher {\nz-index: 20;\n}\n.fixed #boardNavDesktop {\nz-index: 10;\n}\n/* Header */\n.fourchan-x body {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\n}\n.fixed.top body {\npadding-top: 2em;\n}\n.fixed.bottom body {\npadding-bottom: 2em;\n}\n#boardNavDesktop {\nfloat: left;\n}\n.fixed #boardNavDesktop {\nfloat: none;\nright: 0;\nleft: 0;\npadding: 3px 4px 4px;\n}\n.fixed.top #boardNavDesktop {\ntop: 0;\n}\n.fixed.bottom #boardNavDesktop {\nbottom: 0;\n}\n#boardNavDesktop {\nborder-width: 0;\ntransition: all .1s .05s ease-in-out;\n}\n.fixed.top #boardNavDesktop {\nborder-bottom-width: 1px;\n}\n.fixed.bottom #boardNavDesktop {\nbox-shadow: 0 -1px 2px rgba(0, 0, 0, .15);\nborder-top-width: 1px;\n}\n.fixed.bottom #boardNavDesktop .menu-button i {\nborder-top: none;\nborder-bottom: 6px solid;\n}\n#board-list {\ntext-align: center;\n}\n.fixed #boardNavDesktop.autohide:not(:hover) {\nbox-shadow: none;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.fixed.top #boardNavDesktop.autohide:not(:hover) {\nmargin-bottom: -1em;\n-webkit-transform: translateY(-100%);\ntransform: translateY(-100%);\n}\n.fixed.bottom #boardNavDesktop.autohide:not(:hover) {\n-webkit-transform: translateY(100%);\ntransform: translateY(100%);\n}\n#toggle-header-bar {\nleft: 0;\nright: 0;\nheight: 10px;\nposition: absolute;\n}\n#boardNavDesktop #toggle-header-bar {\ndisplay: none;\n}\n.fixed #boardNavDesktop #toggle-header-bar {\ndisplay: block;\n}\n.fixed #boardNavDesktop #toggle-header-bar {\ncursor: n-resize;\n}\n.fixed.top boardNavDesktop #toggle-header-bar {\ntop: 100%;\n}\n.fixed.bottom #boardNavDesktop #toggle-header-bar {\nbottom: 100%;\n}\n.fixed #boardNavDesktop #header-bar.autohide #toggle-header-bar {\ncursor: s-resize;\n}\n#boardNavDesktop a:not(.entry) {\ntext-decoration: none;\npadding: 1px;\n}\n#shortcuts:empty {\ndisplay: none;\n}\n.brackets-wrap::before {\ncontent: \"\\00a0[\";\n}\n.brackets-wrap::after {\ncontent: \"]\\00a0\";\n}\n.disabled,\n.expand-all-shortcut {\nopacity: .45;\n}\n\n/* Notifications */\n#notifications {\nheight: 0;\ntext-align: center;\nposition: fixed;\ntop: 0;\nright: 0;\nleft: 0;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.top:not(.autohide) ~ #notifications {\ntop: 2em;\n}\n.notification {\ncolor: #FFF;\nfont-weight: 700;\ntext-shadow: 0 1px 2px rgba(0, 0, 0, .5);\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder-radius: 2px;\nmargin: 1px auto;\nwidth: 500px;\nmax-width: 100%;\nposition: relative;\ntransition: all .25s ease-in-out;\n}\n.notification.error {\nbackground-color: hsla(0, 100%, 38%, .9);\n}\n.notification.warning {\nbackground-color: hsla(36, 100%, 38%, .9);\n}\n.notification.info {\nbackground-color: hsla(200, 100%, 38%, .9);\n}\n.notification.success {\nbackground-color: hsla(104, 100%, 38%, .9);\n}\n.notification a {\ncolor: white;\n}\n.notification > .close {\npadding: 6px;\ntop: 0;\nright: 0;\nposition: absolute;\n}\n.message {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\npadding: 6px 20px;\nmax-height: 200px;\nwidth: 100%;\noverflow: auto;\n}\n\n/* Settings */\n#overlay {\nbackground-color: rgba(0, 0, 0, .5);\ntop: 0;\nleft: 0;\nheight: 100%;\nwidth: 100%;\n}\n#fourchanx-settings {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nbox-shadow: 0 0 15px rgba(0, 0, 0, .15);\nheight: 600px;\nmin-height: 0;\nmax-height: 100%;\nwidth: 900px;\nmin-width: 0;\nmax-width: 100%;\npadding: 3px;\ntop: 50%;\nleft: 50%;\n-moz-transform: translate(-50%, -50%);\n-webkit-transform: translate(-50%, -50%);\n-o-transform: translate(-50%, -50%);\ntransform: translate(-50%, -50%);\n}\n#fourchanx-settings > nav {\npadding: 2px 2px 0;\n}\n#fourchanx-settings > nav a {\ntext-decoration: underline;\n}\n#fourchanx-settings > nav a.close {\ntext-decoration: none;\npadding: 2px;\n}\n.section-container {\noverflow: auto;\nposition: absolute;\ntop: 1.7em;\nright: 5px;\nbottom: 5px;\nleft: 5px;\n}\n.sections-list {\npadding: 0 3px;\nfloat: left;\n}\n.credits {\nfloat: right;\n}\n.tab-selected {\nfont-weight: 700;\n}\n.section-container {\noverflow: auto;\nposition: absolute;\ntop: 1.7em;\nright: 5px;\nbottom: 5px;\nleft: 5px;\n}\n.section-sauce ul,\n.section-rice ul {\nlist-style: none;\nmargin: 0;\npadding: 8px;\n}\n.section-sauce li,\n.section-rice li {\npadding-left: 4px;\n}\n.section-main label {\ntext-decoration: underline;\n}\n.section-filter ul {\npadding: 0;\n}\n.section-filter li {\nmargin: 10px 40px;\n}\n.section-filter textarea {\nheight: 500px;\n}\n.section-sauce textarea {\nheight: 350px;\n}\n.section-rice .field[name=\"boardnav\"] {\nwidth: 100%;\n}\n.section-rice textarea {\nheight: 150px;\n}\n#fourchanx-settings fieldset {\nborder: 1px solid;\nborder-radius: 3px;\n}\n#fourchanx-settings legend {\nfont-weight: 700;\n}\n#fourchanx-settings textarea {\nfont-family: monospace;\nmin-width: 100%;\nmax-width: 100%;\n}\n#fourchanx-settings code {\ncolor: #000;\nbackground-color: #FFF;\npadding: 0 2px;\n}\n.unscroll {\noverflow: hidden;\n}\n\n/* Announcement Hiding */\n:root.hide-announcement #globalMessage {\ndisplay: none;\n}\na.hide-announcement,\na.show-announcement {\nfloat: left;\n}\n\n/* Unread */\n#unread-line {\nmargin: 0;\n}\n\n/* Thread Updater */\n#updater:not(:hover) {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n#updater > .move {\npadding: 0 3px;\n}\n#updater > div:last-child {\ntext-align: center;\n}\n#updater input[type=number] {\nwidth: 4em;\n}\n#updater:not(:hover) > div:not(.move) {\ndisplay: none;\n}\n#updater input[type=\"button\"] {\nwidth: 100%;\n}\n.new {\ncolor: limegreen;\n}\n\n/* Thread Watcher */\n#watcher {\npadding-bottom: 3px;\noverflow: hidden;\nwhite-space: nowrap;\n}\n#watcher:not(:hover) {\nmax-height: 220px;\n}\n#watcher > .move {\npadding-top: 3px;\n}\n#watcher > div {\nmax-width: 200px;\noverflow: hidden;\npadding-left: 3px;\npadding-right: 3px;\ntext-overflow: ellipsis;\n}\n#watcher a {\ntext-decoration: none;\n}\n\n/* Thread Stats */\n#thread-stats {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n\n/* Quote */\n.deadlink {\ntext-decoration: none !important;\n}\n.backlink.deadlink:not(.forwardlink), .quotelink.deadlink:not(.forwardlink) {\ntext-decoration: underline !important;\n}\n.inlined {\nopacity: .5;\n}\n#qp input, .forwarded {\ndisplay: none;\n}\n.quotelink.forwardlink,\n.backlink.forwardlink {\ntext-decoration: none;\nborder-bottom: 1px dashed;\n}\n.filtered {\ntext-decoration: underline line-through;\n}\n.inline {\nborder: 1px solid;\ndisplay: table;\nmargin: 2px 0;\n}\n.inline .post {\nborder: 0 !important;\nbackground-color: transparent !important;\ndisplay: table !important;\nmargin: 0 !important;\npadding: 1px 2px !important;\n}\n#qp > .opContainer::after {\ncontent: '';\nclear: both;\ndisplay: table;\n}\n#qp .post {\nborder: none;\nmargin: 0;\npadding: 2px 2px 5px;\n}\n#qp img {\nmax-height: 300px;\nmax-width: 500px;\n}\n.qphl {\noutline: 2px solid rgba(216, 94, 49, .7);\n}\n\n/* File */\n.fileText:hover .fntrunc,\n.fileText:not(:hover) .fnfull,\n.expanded-image > .post > .file > .fileThumb > img[data-md5],\n:not(.expanded-image) > .post > .file > .fileThumb > .full-image {\ndisplay: none;\n}\n.expanding {\nopacity: .5;\n}\n.expanded-image {\nclear: both;\n}\n.expanded-image > .op > .file::after {\ncontent: '';\nclear: both;\ndisplay: table;\n}\n:root.fit-width .full-image {\nmax-width: 100%;\n}\n:root.gecko.fit-width .full-image,\n:root.presto.fit-width .full-image {\nwidth: 100%;\n}\n#ihover {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nmax-height: 100%;\nmax-width: 75%;\npadding-bottom: 16px;\n}\n\n/* Index/Reply Navigation */\n#navlinks {\nfont-size: 16px;\ntop: 25px;\nright: 10px;\n}\n\n/* Filter */\n.opContainer.filter-highlight {\nbox-shadow: inset 5px 0 rgba(255, 0, 0, .5);\n}\n.filter-highlight > .reply {\nbox-shadow: -5px 0 rgba(255, 0, 0, .5);\n}\n\n/* Thread & Reply Hiding */\n.hide-thread-button,\n.hide-reply-button {\nfloat: left;\nmargin-right: 2px;\n}\n.stub ~ .sideArrows,\n.stub ~ .hide-reply-button,\n.stub ~ .post {\ndisplay: none !important;\n}\n.stub input {\ndisplay: inline-block;\n}\n\n/* QR */\n:root.hide-original-post-form #postForm,\n:root.hide-original-post-form .postingMode,\n:root.hide-original-post-form #togglePostForm,\n#qr.autohide:not(.has-focus):not(:hover) > form {\ndisplay: none;\n}\n#qr select, #dump-button, .remove, .captcha-img {\ncursor: pointer;\n}\n#qr {\nz-index: 20;\nposition: fixed;\npadding: 1px;\nborder: 1px solid transparent;\nmin-width: 248px;\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nmargin-bottom: 1px;\n}\n#qr .close {\nfloat: right;\npadding: 0 3px;\n}\n#qr .warning {\nmin-height: 1.6em;\nvertical-align: middle;\npadding: 0 1px;\nborder-width: 1px;\nborder-style: solid;\n}\n.persona {\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-button {\nbackground: linear-gradient(#EEE, #CCC);\nborder: 1px solid #CCC; \nwidth: 10%;\nmargin: 0;\n}\n.persona input.field {\nwidth: 29.6%;\nmargin: 0 0 0 0.4%;\n}\n#qr textarea.field {\nheight: 14.8em;\nmin-height: 9em;\n}\n#qr.has-captcha textarea.field {\nheight: 9em;\n}\ninput.field.tripped:not(:hover):not(:focus) {\ncolor: transparent !important; text-shadow: none !important;\n}\n#qr textarea {\nresize: both;\n}\n.captcha-img {\nmargin: 1px 0 0;\ntext-align: center;\nbackground-image: #fff;\n}\n.captcha-input {\nwidth: 100%;\nmargin: 1px 0 0;\n}\n.field,\n.selectrice,\nbutton,\ninput:not([type=radio]) {\n-moz-box-sizing: border-box;\nfont-size: 12px;\nheight: 1.6em;\nmargin: 1px 0 0;\nvertical-align: bottom;\npadding: 0 1px;\n}\n#qr textarea {\nmin-width: 100%;\n}\n#qr [type='submit'] {\nwidth: 25%;\n}\n/* Fake File Input */\n#qr-filename,\n.has-file #qr-no-file {\ndisplay: none;\n}\n#qr-no-file,\n.has-file #qr-filename {\ndisplay: block;\n}\n#qr-filename-container {\n-moz-box-sizing: border-box;\ndisplay: inline-block;\nposition: relative;\nwidth: 100px;\nmin-width: 74.6%;\nmax-width: 74.6%;\nmargin-right: 0.4%;\noverflow: hidden;\npadding: 2px 1px 0;\n}\n#qr-filerm {\nposition: absolute;\nright: 3px;\ntop: 2px;\nz-index: 2;\n}\n#qr input[type=file] {\ndisplay: none;\n}\n/* Thread Select / Spoiler Label */\n#qr select {\nfloat: right;\n}\n/* Dumping UI */\n.dump #dump-list-container {\ndisplay: block;\n}\n#dump-list-container {\ndisplay: none;\nposition: relative;\noverflow-y: hidden;\nmargin-top: 1px;\n}\n#dump-list {\noverflow-x: auto;\noverflow-y: hidden;\nwhite-space: pre;\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-list:hover {\noverflow-x: auto;\n}\n.qr-preview {\n-moz-box-sizing: border-box;\ncounter-increment: thumbnails;\ncursor: move;\ndisplay: inline-block;\nheight: 90px;\nwidth: 90px;\npadding: 2px;\nopacity: .5;\noverflow: hidden;\nposition: relative;\ntext-shadow: 0 1px 1px #000;\n-moz-transition: opacity .25s ease-in-out;\nvertical-align: top;\n}\n.qr-preview:hover,\n.qr-preview:focus {\nopacity: .9;\n}\n.qr-preview::before {\ncontent: counter(thumbnails);\ncolor: #fff;\nposition: absolute;\ntop: 3px;\nright: 3px;\ntext-shadow: 0 0 3px #000, 0 0 8px #000;\n}\n.qr-preview#selected {\nopacity: 1;\n}\n.qr-preview.drag {\nbox-shadow: 0 0 10px rgba(0,0,0,.5);\n}\n.qr-preview.over {\nborder-color: #fff;\n}\n.qr-preview > span {\ncolor: #fff;\n}\n.remove {\nbackground: none;\ncolor: #e00;\nfont-weight: 700;\npadding: 3px;\n}\na:only-of-type > .remove {\ndisplay: none;\n}\n.remove:hover::after {\ncontent: \" Remove\";\n}\n.qr-preview > label {\nbackground: rgba(0,0,0,.5);\ncolor: #fff;\nright: 0; bottom: 0; left: 0;\nposition: absolute;\ntext-align: center;\n}\n.qr-preview > label > input {\nmargin: 0;\n}\n#add-post {\ncursor: pointer;\nfont-size: 2em;\nposition: absolute;\ntop: 50%;\nright: 10px;\n-moz-transform: translateY(-50%);\n}\n.textarea {\nposition: relative;\n}\n#char-count {\ncolor: #000;\nbackground: hsla(0, 0%, 100%, .5);\nfont-size: 8pt;\nposition: absolute;\nbottom: 1px;\nright: 1px;\npointer-events: none;\n}\n\n/* Menu */\n.menu-button {\ndisplay: inline-block;\nposition: relative;\n}\n.menu-button i {\nborder-top: 6px solid;\nborder-right: 4px solid transparent;\nborder-left: 4px solid transparent;\ndisplay: inline-block;\nmargin: 2px;\nvertical-align: middle;\n}\n#menu {\nposition: fixed;\noutline: none;\nz-index: 22;\n}\n.entry {\nborder-bottom: 1px solid rgba(0,0,0,.25);\ncursor: pointer;\ndisplay: block;\noutline: none;\npadding: 3px 7px;\nposition: relative;\ntext-decoration: none;\nwhite-space: nowrap;\n}\n.entry:last-child {\nborder-bottom: 0;\n}\n.has-submenu::after {\ncontent: \"\";\nborder-left: .5em solid;\nborder-top: .3em solid transparent;\nborder-bottom: .3em solid transparent;\ndisplay: inline-block;\nmargin: .3em;\nposition: absolute;\nright: 3px;\n}\n.submenu {\ndisplay: none;\nposition: absolute;\nleft: 100%;\ntop: -1px;\n}\n.focused .submenu {\ndisplay: block;\n}\n\n/* General */\n:root.yotsuba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.yotsuba #header-bar {\nfont-size: 9pt;\ncolor: #B86;\n}\n:root.yotsuba #header-bar a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.yotsuba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.yotsuba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.yotsuba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba #menu {\ncolor: #800000;\n}\n:root.yotsuba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 10pt;\n}\n:root.yotsuba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.yotsuba-b .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.yotsuba-b #header-bar {\nfont-size: 9pt;\ncolor: #89A;\n}\n:root.yotsuba-b #header-bar a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.yotsuba-b #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.yotsuba-b .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.yotsuba-b .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba-b #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba-b #menu {\ncolor: #000;\n}\n:root.yotsuba-b .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 10pt;\n}\n:root.yotsuba-b .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.futaba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.futaba #header-bar {\nfont-size: 11pt;\ncolor: #B86;\n}\n:root.futaba #header-bar a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.futaba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.futaba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.futaba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.futaba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.futaba #menu {\ncolor: #800000;\n}\n:root.futaba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 12pt;\n}\n:root.futaba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.burichan .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.burichan #header-bar {\nfont-size: 11pt;\ncolor: #89A;\n}\n:root.burichan #header-bar a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.burichan #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.burichan .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.burichan .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.burichan #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.burichan #menu {\ncolor: #000000;\n}\n:root.burichan .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 12pt;\n}\n:root.burichan .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.tomorrow .dialog {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n:root.tomorrow .field:focus {\nborder-color: #000;\n}\n\n/* Header */\n:root.tomorrow #header-bar {\nfont-size: 9pt;\ncolor: #C5C8C6;\n}\n:root.tomorrow #header-bar a {\ncolor: #81A2BE;\n}\n\n/* Settings */\n:root.tomorrow #fourchanx-settings fieldset {\nborder-color: #111;\n}\n\n/* Quote */\n:root.tomorrow .backlink.deadlink {\ncolor: #81A2BE !important;\n}\n:root.tomorrow .inline {\nborder-color: #111;\nbackground-color: rgba(0, 0, 0, .14);\n}\n\n/* QR */\n.tomorrow #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n:root.tomorrow #qr select {\ncolor: #C5C8C6;\n}\n:root.tomorrow #qr option {\ncolor: #000;\n}\n:root.tomorrow .qr-preview {\nbackground-color: rgba(255, 255, 255, .15);\n}\n\n/* Menu */\n:root.tomorrow #menu {\ncolor: #C5C8C6;\n}\n:root.tomorrow .entry {\nborder-bottom: 1px solid #111;\nfont-size: 10pt;\n}\n:root.tomorrow .focused.entry {\nbackground: rgba(0, 0, 0, .33);\n}\n\n/* General */\n:root.photon .dialog {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.photon #header-bar {\nfont-size: 9pt;\ncolor: #333;\n}\n:root.photon #header-bar a {\ncolor: #FF6600;\n}\n\n/* Settings */\n:root.photon #fourchanx-settings fieldset {\nborder-color: #CCC;\n}\n\n/* Quote */\n:root.photon .backlink.deadlink {\ncolor: #F60 !important;\n}\n:root.photon .inline {\nborder-color: #CCC;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.photon #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.photon #menu {\ncolor: #333;\n}\n:root.photon .entry {\nborder-bottom: 1px solid #CCC;\nfont-size: 10pt;\n}\n:root.photon .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n" - }; - - Main.init(); - -}).call(this); diff --git a/builds/4chan-X.meta.js b/builds/4chan-X.meta.js deleted file mode 100644 index 29423fa21..000000000 --- a/builds/4chan-X.meta.js +++ /dev/null @@ -1,21 +0,0 @@ -// ==UserScript== -// @name 4chan X -// @version 3.1.3 -// @namespace 4chan-X -// @description Cross-browser extension for productive lurking on 4chan. -// @copyright 2009-2011 James Campos -// @copyright 2012-2013 Nicolas Stepien -// @license MIT; http://en.wikipedia.org/wiki/Mit_license -// @match *://api.4chan.org/* -// @match *://boards.4chan.org/* -// @match *://images.4chan.org/* -// @match *://sys.4chan.org/* -// @grant GM_getValue -// @grant GM_setValue -// @grant GM_deleteValue -// @grant GM_openInTab -// @run-at document-start -// @updateURL https://4chan-x.just-believe.in/builds/4chan-X.meta.js -// @downloadURL https://4chan-x.just-believe.in/builds/4chan-X.user.js -// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC -// ==/UserScript== diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js deleted file mode 100644 index 0ea6f14e2..000000000 --- a/builds/4chan-X.user.js +++ /dev/null @@ -1,9265 +0,0 @@ -// ==UserScript== -// @name 4chan X -// @version 3.1.3 -// @namespace 4chan-X -// @description Cross-browser extension for productive lurking on 4chan. -// @copyright 2009-2011 James Campos -// @copyright 2012-2013 Nicolas Stepien -// @license MIT; http://en.wikipedia.org/wiki/Mit_license -// @match *://api.4chan.org/* -// @match *://boards.4chan.org/* -// @match *://images.4chan.org/* -// @match *://sys.4chan.org/* -// @grant GM_getValue -// @grant GM_setValue -// @grant GM_deleteValue -// @grant GM_openInTab -// @run-at document-start -// @updateURL https://4chan-x.just-believe.in/builds/4chan-X.meta.js -// @downloadURL https://4chan-x.just-believe.in/builds/4chan-X.user.js -// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC -// ==/UserScript== - -/* 4chan X - Version 3.1.3 - 2013-04-16 - * https://4chan-x.just-believe.in/ - * - * Copyright (c) 2009-2011 James Campos - * Copyright (c) 2012-2013 Nicolas Stepien - * Licensed under the MIT license. - * https://github.com/MayhemYDG/4chan-x/blob/master/LICENSE - * - * Contributors: - * https://github.com/MayhemYDG/4chan-x/graphs/contributors - * Non-GitHub contributors: - * ferongr, xat-, Ongpot, thisisanon and Anonymous - favicon contributions - * e000 - cooldown sanity check - * Seiba - chrome quick reply focusing - * herpaderpderp - recaptcha fixes - * WakiMiko - recaptcha tab order http://userscripts.org/scripts/show/82657 - * - * All the people who've taken the time to write bug reports. - * - * Thank you. - */ - -(function() { - var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, Fourchan, Get, Header, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, - __slice = [].slice, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - Config = { - main: { - 'Miscellaneous': { - 'Catalog Links': [true, 'Turn Navigation links into links to each board\'s catalog.'], - 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], - 'Enable 4chan\'s Extension': [false, 'Compatibility between 4chan X and 4chan\'s inline extension is NOT guaranteed.'], - 'Fixed Header': [false, 'Mayhem X\'s Fixed Header (kinda).'], - 'Custom Board Navigation': [true, 'Show custom links instead of the full board list.'], - 'Announcement Hiding': [true, 'Add button to hide 4chan announcements.'], - '404 Redirect': [true, 'Redirect dead threads and images.'], - 'Keybinds': [true, 'Bind actions to keyboard shortcuts.'], - 'Time Formatting': [true, 'Localize and format timestamps.'], - 'Relative Post Dates': [false, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'], - 'File Info Formatting': [true, 'Reformat the file information.'], - 'Comment Expansion': [true, 'Add buttons to expand long comments.'], - 'Thread Expansion': [true, 'Add buttons to expand threads.'], - 'Index Navigation': [false, 'Add buttons to navigate between threads.'], - 'Reply Navigation': [false, 'Add buttons to navigate to top / bottom of thread.'], - 'Check for Updates': [true, 'Check for updated versions of 4chan X.'] - }, - 'Linkification': { - 'Linkify': [true, 'Convert text into links where applicable.'], - 'Embedding': [true, 'Embed supported services.'], - 'Auto-embed': [false, 'Auto-embed Linkify Embeds.'], - 'Link Title': [true, 'Replace the link of a supported site with its actual title. Currently Supported: YouTube, Vimeo, SoundCloud'] - }, - 'Filtering': { - 'Anonymize': [false, 'Make everyone Anonymous.'], - 'Filter': [true, 'Self-moderation placebo.'], - 'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'], - 'Thread Hiding': [true, 'Add buttons to hide entire threads.'], - 'Reply Hiding': [true, 'Add buttons to hide single replies.'], - 'Hiding Buttons': [true, 'Add buttons to hide threads / replies, in addition to menu links.'], - 'Stubs': [true, 'Show stubs of hidden threads / replies.'] - }, - 'Images': { - 'Image Expansion': [true, 'Expand images.'], - 'Image Hover': [false, 'Show full image on mouseover.'], - 'Sauce': [true, 'Add sauce links to images.'], - 'Reveal Spoilers': [false, 'Reveal spoiler thumbnails.'], - 'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'], - 'Replace PNG': [false, 'Replace pngs.'], - 'Replace JPG': [false, 'Replace jpgs.'] - }, - 'Menu': { - 'Menu': [true, 'Add a drop-down menu to posts.'], - 'Thread Hiding Link': [true, 'Add a link to hide entire threads.'], - 'Reply Hiding Link': [true, 'Add a link to hide single replies.'], - 'Report Link': [true, 'Add a report link to the menu.'], - 'Delete Link': [true, 'Add post and image deletion links to the menu.'], - 'Download Link': [true, 'Add a download with original filename link to the menu. Chrome-only currently.'], - 'Archive Link': [true, 'Add an archive link to the menu.'] - }, - 'Monitoring': { - 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'], - 'Unread Count': [true, 'Show the unread posts count in the tab title.'], - 'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.'], - 'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.'], - 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'], - 'Thread Stats': [true, 'Display reply and image count.'], - 'Thread Watcher': [true, 'Bookmark threads.'], - 'Auto Watch': [true, 'Automatically watch threads you start.'], - 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'] - }, - 'Posting': { - 'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'], - 'Persistent QR': [false, 'The Quick reply won\'t disappear after posting.'], - 'Auto Hide QR': [false, 'Automatically hide the quick reply when posting.'], - 'Open Post in New Tab': [true, 'Open new threads or replies to a thread from the index in a new tab.'], - 'Remember Subject': [false, 'Remember the subject field, instead of resetting after posting.'], - 'Remember QR Size': [false, 'Remember the size of the Quick reply.'], - 'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.'], - 'Hide Original Post Form': [true, 'Hide the normal post form.'], - 'Cooldown': [true, 'Prevent "flood detected" errors.'] - }, - 'Quote Links': { - 'Quote Backlinks': [true, 'Add quote backlinks.'], - 'OP Backlinks': [true, 'Add backlinks to the OP.'], - 'Quote Inlining': [true, 'Inline quoted post on click.'], - 'Forward Hiding': [true, 'Hide original posts of inlined backlinks.'], - 'Quote Previewing': [true, 'Show quoted post on hover.'], - 'Quote Highlighting': [true, 'Highlight the previewed post.'], - 'Resurrect Quotes': [true, 'Link dead quotes to the archives.'], - 'Mark Quotes of You': [true, 'Add \'(You)\' to quotes linking to your posts.'], - 'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'], - 'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'] - } - }, - imageExpansion: { - 'Fit width': [true, ''], - 'Fit height': [false, ''], - 'Expand spoilers': [true, 'Expand all images along with spoilers.'], - 'Expand from here': [true, 'Expand all images only from current position to thread end.'] - }, - filter: { - name: "# Filter any namefags:\n#/^(?!Anonymous$)/", - uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/", - tripcode: "# Filter any tripfag\n#/^!/", - capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes", - email: "# Filter any e-mails that are not `sage` on /a/ and /jp/:\n#/^(?!sage$)/;boards:a,jp", - subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only", - comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g", - flag: '', - filename: '', - dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg", - filesize: '', - MD5: '' - }, - sauces: "https://www.google.com/searchbyimage?image_url=%TURL\nhttp://iqdb.org/?url=%TURL\n#//tineye.com/search?url=%TURL\n#http://saucenao.com/search.php?url=%TURL\n#http://3d.iqdb.org/?url=%TURL\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#http://imgur.com/upload?url=%URL;text:Upload to imgur\n#http://ompldr.org/upload?url1=%URL;text:Upload to ompldr\n# \"View Same\" in archives:\n#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz\n#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/\n#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/", - 'Custom CSS': false, - 'Boards Navigation': 'sticky top', - 'Header auto-hide': false, - 'Header catalog links': false, - boardnav: '[ toggle-all ] [current-title]', - time: '%m/%d/%y(%a)%H:%M:%S', - backlink: '>>%id', - fileInfo: '%l (%p%s, %r)', - favicon: 'ferongr', - usercss: '', - hotkeys: { - 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], - 'Open empty QR': ['q', 'Open QR without post number inserted.'], - 'Open QR': ['Shift+q', 'Open QR with post number inserted.'], - 'Open settings': ['Alt+o', 'Open Settings.'], - 'Close': ['Esc', 'Close Settings, Notifications or QR.'], - 'Spoiler tags': ['Ctrl+s', 'Insert spoiler tags.'], - 'Code tags': ['Alt+c', 'Insert code tags.'], - 'Eqn tags': ['Alt+e', 'Insert eqn tags.'], - 'Math tags': ['Alt+m', 'Insert math tags.'], - 'Submit QR': ['Alt+s', 'Submit post.'], - 'Watch': ['w', 'Watch thread.'], - 'Update': ['r', 'Update the thread now.'], - 'Expand image': ['Shift+e', 'Expand selected image.'], - 'Expand images': ['e', 'Expand all images.'], - 'Front page': ['0', 'Jump to page 0.'], - 'Open front page': ['Shift+0', 'Open page 0 in a new tab.'], - 'Next page': ['Right', 'Jump to the next page.'], - 'Previous page': ['Left', 'Jump to the previous page.'], - 'Next thread': ['Down', 'See next thread.'], - 'Previous thread': ['Up', 'See previous thread.'], - 'Expand thread': ['Ctrl+e', 'Expand thread.'], - 'Open thread': ['o', 'Open thread in current tab.'], - 'Open thread tab': ['Shift+o', 'Open thread in new tab.'], - 'Next reply': ['j', 'Select next reply.'], - 'Previous reply': ['k', 'Select previous reply.'], - 'Hide': ['x', 'Hide thread.'] - }, - updater: { - checkbox: { - 'Beep': [false, 'Beep on new post to completely read thread.'], - 'Auto Scroll': [false, 'Scroll updated posts into view. Only enabled at bottom of page.'], - 'Bottom Scroll': [false, 'Always scroll to the bottom, not the first new post. Useful for event threads.'], - 'Scroll BG': [false, 'Auto-scroll background tabs.'], - 'Auto Update': [true, 'Automatically fetch new posts.'], - 'Optional Increase': [false, 'Increase the intervals between updates on threads without new posts.'] - }, - 'Interval': 30 - } - }; - - Conf = {}; - - c = console; - - d = document; - - doc = d.documentElement; - - g = { - VERSION: '3.1.3', - NAMESPACE: '4chan X.', - boards: {}, - threads: {}, - posts: {} - }; - - UI = (function() { - var Menu, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove; - - dialog = function(id, position, html) { - var child, el, move, _i, _len, _ref; - - el = $.el('div', { - className: 'dialog', - innerHTML: html, - id: id - }); - el.style.cssText = position; - $.get("" + id + ".position", position, function(item) { - return el.style.cssText = item["" + id + ".position"]; - }); - move = $('.move', el); - $.on(move, 'touchstart mousedown', dragstart); - _ref = move.children; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - if (!child.tagName) { - continue; - } - $.on(child, 'touchstart mousedown', function(e) { - return e.stopPropagation(); - }); - } - return el; - }; - Menu = (function() { - var close, currentMenu, lastToggledButton; - - currentMenu = null; - - lastToggledButton = null; - - function Menu(type) { - this.type = type; - $.on(d, 'AddMenuEntry', this.addEntry.bind(this)); - this.close = close.bind(this); - this.entries = []; - } - - Menu.prototype.makeMenu = function() { - var menu; - - menu = $.el('div', { - className: 'dialog', - id: 'menu', - tabIndex: 0 - }); - $.on(menu, 'click', function(e) { - return e.stopPropagation(); - }); - $.on(menu, 'keydown', this.keybinds.bind(this)); - return menu; - }; - - Menu.prototype.toggle = function(e, button, data) { - var previousButton; - - e.preventDefault(); - e.stopPropagation(); - if (currentMenu) { - previousButton = lastToggledButton; - this.close(); - if (previousButton === button) { - return; - } - } - if (!this.entries.length) { - return; - } - return this.open(button, data); - }; - - Menu.prototype.open = function(button, data) { - var bLeft, bRect, bTop, bottom, cHeight, cWidth, entry, left, mRect, menu, prevEntry, right, style, top, _i, _len, _ref, _ref1, _ref2; - - menu = this.makeMenu(); - currentMenu = menu; - lastToggledButton = button; - _ref = this.entries; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - entry = _ref[_i]; - this.insertEntry(entry, menu, data); - } - entry = $('.entry', menu); - while (prevEntry = this.findNextEntry(entry, -1)) { - entry = prevEntry; - } - this.focus(entry); - $.on(d, 'click', this.close); - $.on(d, 'CloseMenu', this.close); - $.add(Header.hover, menu); - mRect = menu.getBoundingClientRect(); - bRect = button.getBoundingClientRect(); - bTop = doc.scrollTop + d.body.scrollTop + bRect.top; - bLeft = doc.scrollLeft + d.body.scrollLeft + bRect.left; - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - _ref1 = bRect.top + bRect.height + mRect.height < cHeight ? [bRect.bottom, null] : [null, cHeight - bRect.top], top = _ref1[0], bottom = _ref1[1]; - _ref2 = bRect.left + mRect.width < cWidth ? [bRect.left, null] : [null, cWidth - bRect.right], left = _ref2[0], right = _ref2[1]; - style = menu.style; - style.top = "" + top + "px"; - style.right = "" + right + "px"; - style.bottom = "" + bottom + "px"; - style.left = "" + left + "px"; - return menu.focus(); - }; - - Menu.prototype.insertEntry = function(entry, parent, data) { - var subEntry, submenu, _i, _len, _ref; - - if (typeof entry.open === 'function') { - if (!entry.open(data)) { - return; - } - } - $.add(parent, entry.el); - if (!entry.subEntries) { - return; - } - if (submenu = $('.submenu', entry.el)) { - $.rm(submenu); - } - submenu = $.el('div', { - className: 'dialog submenu' - }); - _ref = entry.subEntries; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - subEntry = _ref[_i]; - this.insertEntry(subEntry, submenu, data); - } - $.add(entry.el, submenu); - }; - - close = function() { - $.rm(currentMenu); - currentMenu = null; - lastToggledButton = null; - return $.off(d, 'click CloseMenu', this.close); - }; - - Menu.prototype.findNextEntry = function(entry, direction) { - var entries; - - entries = __slice.call(entry.parentNode.children); - entries.sort(function(first, second) { - return +(first.style.order || first.style.webkitOrder) - +(second.style.order || second.style.webkitOrder); - }); - return entries[entries.indexOf(entry) + direction]; - }; - - Menu.prototype.keybinds = function(e) { - var entry, next, nextPrev, subEntry, submenu; - - entry = $('.focused', currentMenu); - while (subEntry = $('.focused', entry)) { - entry = subEntry; - } - switch (e.keyCode) { - case 27: - lastToggledButton.focus(); - this.close(); - break; - case 13: - case 32: - entry.click(); - break; - case 38: - if (next = this.findNextEntry(entry, -1)) { - this.focus(next); - } - break; - case 40: - if (next = this.findNextEntry(entry, +1)) { - this.focus(next); - } - break; - case 39: - if ((submenu = $('.submenu', entry)) && (next = submenu.firstElementChild)) { - while (nextPrev = this.findNextEntry(next, -1)) { - next = nextPrev; - } - this.focus(next); - } - break; - case 37: - if (next = $.x('parent::*[contains(@class,"submenu")]/parent::*', entry)) { - this.focus(next); - } - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }; - - Menu.prototype.focus = function(entry) { - var bottom, cHeight, cWidth, eRect, focused, left, right, sRect, style, submenu, top, _i, _len, _ref, _ref1, _ref2; - - while (focused = $.x('parent::*/child::*[contains(@class,"focused")]', entry)) { - $.rmClass(focused, 'focused'); - } - _ref = $$('.focused', entry); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - focused = _ref[_i]; - $.rmClass(focused, 'focused'); - } - $.addClass(entry, 'focused'); - if (!(submenu = $('.submenu', entry))) { - return; - } - sRect = submenu.getBoundingClientRect(); - eRect = entry.getBoundingClientRect(); - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - _ref1 = eRect.top + sRect.height < cHeight ? ['0px', 'auto'] : ['auto', '0px'], top = _ref1[0], bottom = _ref1[1]; - _ref2 = eRect.right + sRect.width < cWidth ? ['100%', 'auto'] : ['auto', '100%'], left = _ref2[0], right = _ref2[1]; - style = submenu.style; - style.top = top; - style.bottom = bottom; - style.left = left; - return style.right = right; - }; - - Menu.prototype.addEntry = function(e) { - var entry; - - entry = e.detail; - if (entry.type !== this.type) { - return; - } - this.parseEntry(entry); - return this.entries.push(entry); - }; - - Menu.prototype.parseEntry = function(entry) { - var el, style, subEntries, subEntry, _i, _len; - - el = entry.el, subEntries = entry.subEntries; - $.addClass(el, 'entry'); - $.on(el, 'focus mouseover', (function(e) { - e.stopPropagation(); - return this.focus(el); - }).bind(this)); - style = el.style; - style.webkitOrder = style.order = entry.order || 100; - if (!subEntries) { - return; - } - $.addClass(el, 'has-submenu'); - for (_i = 0, _len = subEntries.length; _i < _len; _i++) { - subEntry = subEntries[_i]; - this.parseEntry(subEntry); - } - }; - - return Menu; - - })(); - dragstart = function(e) { - var el, isTouching, o, rect, screenHeight, screenWidth; - - if (e.type === 'mousedown' && e.button !== 0) { - return; - } - e.preventDefault(); - if (isTouching = e.type === 'touchstart') { - e = e.changedTouches[e.changedTouches.length - 1]; - } - el = $.x('ancestor::div[contains(@class,"dialog")][1]', this); - rect = el.getBoundingClientRect(); - screenHeight = doc.clientHeight; - screenWidth = doc.clientWidth; - o = { - id: el.id, - style: el.style, - dx: e.clientX - rect.left, - dy: e.clientY - rect.top, - height: screenHeight - rect.height, - width: screenWidth - rect.width, - screenHeight: screenHeight, - screenWidth: screenWidth, - isTouching: isTouching - }; - if (isTouching) { - o.identifier = e.identifier; - o.move = touchmove.bind(o); - o.up = touchend.bind(o); - $.on(d, 'touchmove', o.move); - return $.on(d, 'touchend touchcancel', o.up); - } else { - o.move = drag.bind(o); - o.up = dragend.bind(o); - $.on(d, 'mousemove', o.move); - return $.on(d, 'mouseup', o.up); - } - }; - touchmove = function(e) { - var touch, _i, _len, _ref; - - _ref = e.changedTouches; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - touch = _ref[_i]; - if (touch.identifier === this.identifier) { - drag.call(this, touch); - return; - } - } - }; - drag = function(e) { - var bottom, clientX, clientY, left, right, style, top; - - clientX = e.clientX, clientY = e.clientY; - left = clientX - this.dx; - left = left < 10 ? 0 : this.width - left < 10 ? null : left / this.screenWidth * 100 + '%'; - top = clientY - this.dy; - top = top < 10 ? 0 : this.height - top < 10 ? null : top / this.screenHeight * 100 + '%'; - right = left === null ? 0 : null; - bottom = top === null ? 0 : null; - style = this.style; - style.left = left; - style.right = right; - style.top = top; - return style.bottom = bottom; - }; - touchend = function(e) { - var touch, _i, _len, _ref; - - _ref = e.changedTouches; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - touch = _ref[_i]; - if (touch.identifier === this.identifier) { - dragend.call(this); - return; - } - } - }; - dragend = function() { - if (this.isTouching) { - $.off(d, 'touchmove', this.move); - $.off(d, 'touchend touchcancel', this.up); - } else { - $.off(d, 'mousemove', this.move); - $.off(d, 'mouseup', this.up); - } - return $.set("" + this.id + ".position", this.style.cssText); - }; - hoverstart = function(_arg) { - var asapTest, cb, el, endEvents, latestEvent, o, root; - - root = _arg.root, el = _arg.el, latestEvent = _arg.latestEvent, endEvents = _arg.endEvents, asapTest = _arg.asapTest, cb = _arg.cb; - o = { - root: root, - el: el, - style: el.style, - cb: cb, - endEvents: endEvents, - latestEvent: latestEvent, - clientHeight: doc.clientHeight, - clientWidth: doc.clientWidth - }; - o.hover = hover.bind(o); - o.hoverend = hoverend.bind(o); - $.asap(function() { - return !el.parentNode || asapTest(); - }, function() { - if (el.parentNode) { - return o.hover(o.latestEvent); - } - }); - $.on(root, endEvents, o.hoverend); - return $.on(root, 'mousemove', o.hover); - }; - hover = function(e) { - var clientX, clientY, height, left, right, style, top, _ref; - - this.latestEvent = e; - height = this.el.offsetHeight; - clientX = e.clientX, clientY = e.clientY; - top = clientY - 120; - top = this.clientHeight <= height || top <= 0 ? 0 : top + height >= this.clientHeight ? this.clientHeight - height : top; - _ref = clientX <= this.clientWidth - 400 ? [clientX + 45 + 'px', null] : [null, this.clientWidth - clientX + 45 + 'px'], left = _ref[0], right = _ref[1]; - style = this.style; - style.top = top + 'px'; - style.left = left; - return style.right = right; - }; - hoverend = function() { - $.rm(this.el); - $.off(this.root, this.endEvents, this.hoverend); - $.off(this.root, 'mousemove', this.hover); - if (this.cb) { - return this.cb.call(this); - } - }; - return { - dialog: dialog, - Menu: Menu, - hover: hoverstart - }; - })(); - - $ = function(selector, root) { - if (root == null) { - root = d.body; - } - return root.querySelector(selector); - }; - - $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); - - $$ = function(selector, root) { - if (root == null) { - root = d.body; - } - return __slice.call(root.querySelectorAll(selector)); - }; - - $.extend = function(object, properties) { - var key, val; - - for (key in properties) { - val = properties[key]; - object[key] = val; - } - }; - - $.extend(Array.prototype, { - add: function(object, position) { - var keep; - - keep = this.slice(position); - this.length = position; - this.push(object); - return this.pushArrays(keep); - }, - contains: function(object) { - return this.indexOf(object) > -1; - }, - indexOf: function(object) { - var i; - - i = this.length; - while (i--) { - if (this[i] === object) { - break; - } - } - return i; - }, - pushArrays: function() { - var arg, args, _i, _len; - - args = arguments; - for (_i = 0, _len = args.length; _i < _len; _i++) { - arg = args[_i]; - this.push.apply(this, arg); - } - return this; - }, - remove: function(object) { - var index; - - if ((index = this.indexOf(object)) > -1) { - return this.splice(index, 1); - } else { - return false; - } - } - }); - - $.extend(String.prototype, { - capitalize: function() { - return this.charAt(0).toUpperCase() + this.slice(1); - }, - contains: function(string) { - return this.indexOf(string) > -1; - } - }); - - $.extend($, { - id: function(id) { - return d.getElementById(id); - }, - ready: function(fc) { - var cb, _ref; - - if ((_ref = d.readyState) === 'interactive' || _ref === 'complete') { - $.queueTask(fc); - return; - } - cb = function() { - $.off(d, 'DOMContentLoaded', cb); - return fc(); - }; - return $.on(d, 'DOMContentLoaded', cb); - }, - formData: function(form) { - var fd, key, val; - - if (form instanceof HTMLFormElement) { - return new FormData(form); - } - fd = new FormData(); - for (key in form) { - val = form[key]; - if (!val) { - continue; - } - if (val.size && val.name) { - fd.append(key, val, val.name); - } else { - fd.append(key, val); - } - } - return fd; - }, - ajax: function(url, callbacks, opts) { - var cred, form, headers, key, r, sync, type, upCallbacks, val; - - if (opts == null) { - opts = {}; - } - type = opts.type, cred = opts.cred, headers = opts.headers, upCallbacks = opts.upCallbacks, form = opts.form, sync = opts.sync; - r = new XMLHttpRequest(); - type || (type = form && 'post' || 'get'); - r.open(type, url, !sync); - for (key in headers) { - val = headers[key]; - r.setRequestHeader(key, val); - } - $.extend(r, callbacks); - $.extend(r.upload, upCallbacks); - r.withCredentials = cred; - r.send(form); - return r; - }, - cache: (function() { - var reqs; - - reqs = {}; - return function(url, cb) { - var req, rm; - - if (req = reqs[url]) { - if (req.readyState === 4) { - cb.call(req); - } else { - req.callbacks.push(cb); - } - return; - } - rm = function() { - return delete reqs[url]; - }; - req = $.ajax(url, { - onload: function(e) { - var _i, _len, _ref; - - _ref = this.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - cb = _ref[_i]; - cb.call(this, e); - } - return delete this.callbacks; - }, - onabort: rm, - onerror: rm - }); - req.callbacks = [cb]; - return reqs[url] = req; - }; - })(), - cb: { - checked: function() { - $.set(this.name, this.checked); - return Conf[this.name] = this.checked; - }, - value: function() { - $.set(this.name, this.value.trim()); - return Conf[this.name] = this.value; - } - }, - asap: function(test, cb) { - if (test()) { - return cb(); - } else { - return setTimeout($.asap, 25, test, cb); - } - }, - addStyle: function(css) { - var style; - - style = $.el('style', { - textContent: css - }); - $.asap((function() { - return d.head; - }), function() { - return $.add(d.head, style); - }); - return style; - }, - x: function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, 8, null).singleNodeValue; - }, - X: function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); - }, - addClass: function(el, className) { - return el.classList.add(className); - }, - rmClass: function(el, className) { - return el.classList.remove(className); - }, - toggleClass: function(el, className) { - return el.classList.toggle(className); - }, - hasClass: function(el, className) { - return el.classList.contains(className); - }, - rm: (function() { - if ('remove' in Element.prototype) { - return function(el) { - return el.remove(); - }; - } else { - return function(el) { - var _ref; - - return (_ref = el.parentNode) != null ? _ref.removeChild(el) : void 0; - }; - } - })(), - rmAll: function(root) { - var node; - - while (node = root.firstChild) { - root.removeChild(node); - } - }, - tn: function(s) { - return d.createTextNode(s); - }, - frag: function() { - return d.createDocumentFragment(); - }, - nodes: function(nodes) { - var frag, node, _i, _len; - - if (!(nodes instanceof Array)) { - return nodes; - } - frag = $.frag(); - for (_i = 0, _len = nodes.length; _i < _len; _i++) { - node = nodes[_i]; - frag.appendChild(node); - } - return frag; - }, - add: function(parent, el) { - return parent.appendChild($.nodes(el)); - }, - prepend: function(parent, el) { - return parent.insertBefore($.nodes(el), parent.firstChild); - }, - after: function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root.nextSibling); - }, - before: function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root); - }, - replace: function(root, el) { - return root.parentNode.replaceChild($.nodes(el), root); - }, - el: function(tag, properties) { - var el; - - el = d.createElement(tag); - if (properties) { - $.extend(el, properties); - } - return el; - }, - on: function(el, events, handler) { - var event, _i, _len, _ref; - - _ref = events.split(' '); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - event = _ref[_i]; - el.addEventListener(event, handler, false); - } - }, - off: function(el, events, handler) { - var event, _i, _len, _ref; - - _ref = events.split(' '); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - event = _ref[_i]; - el.removeEventListener(event, handler, false); - } - }, - event: function(event, detail, root) { - if (root == null) { - root = d; - } - return root.dispatchEvent(new CustomEvent(event, { - bubbles: true, - detail: detail - })); - }, - open: (function() { - if (typeof GM_openInTab !== "undefined" && GM_openInTab !== null) { - return function(URL) { - var a; - - a = $.el('a', { - href: URL - }); - return GM_openInTab(a.href); - }; - } else { - return function(URL) { - return window.open(URL, '_blank'); - }; - } - })(), - debounce: function(wait, fn) { - var args, exec, that, timeout; - - timeout = null; - that = null; - args = null; - exec = function() { - fn.apply(that, args); - return timeout = null; - }; - return function() { - args = arguments; - that = this; - if (timeout) { - clearTimeout(timeout); - } else { - exec(); - } - return timeout = setTimeout(exec, wait); - }; - }, - queueTask: (function() { - var execTask, taskChannel, taskQueue; - - taskQueue = []; - execTask = function() { - var args, func, task; - - task = taskQueue.shift(); - func = task[0]; - args = Array.prototype.slice.call(task, 1); - return func.apply(func, args); - }; - if (window.MessageChannel) { - taskChannel = new MessageChannel(); - taskChannel.port1.onmessage = execTask; - return function() { - taskQueue.push(arguments); - return taskChannel.port2.postMessage(null); - }; - } else { - return function() { - taskQueue.push(arguments); - return setTimeout(execTask, 0); - }; - } - })(), - globalEval: function(code) { - var script; - - script = $.el('script', { - textContent: code - }); - $.add(d.head || doc, script); - return $.rm(script); - }, - bytesToString: function(size) { - var unit; - - unit = 0; - while (size >= 1024) { - size /= 1024; - unit++; - } - size = unit > 1 ? Math.round(size * 100) / 100 : Math.round(size); - return "" + size + " " + ['B', 'KB', 'MB', 'GB'][unit]; - }, - syncing: {}, - sync: (function() { - window.addEventListener('storage', function(e) { - var cb; - - if (cb = $.syncing[e.key]) { - return cb(JSON.parse(e.newValue)); - } - }, false); - return function(key, cb) { - return $.syncing[g.NAMESPACE + key] = cb; - }; - })(), - item: function(key, val) { - var item; - - item = {}; - item[key] = val; - return item; - }, - "delete": function(keys) { - var key, _i, _len; - - if (!(keys instanceof Array)) { - keys = [keys]; - } - for (_i = 0, _len = keys.length; _i < _len; _i++) { - key = keys[_i]; - key = g.NAMESPACE + key; - localStorage.removeItem(key); - GM_deleteValue(key); - } - }, - get: function(key, val, cb) { - var items; - - if (typeof cb === 'function') { - items = $.item(key, val); - } else { - items = key; - cb = val; - } - return $.queueTask(function() { - for (key in items) { - if (val = GM_getValue(g.NAMESPACE + key)) { - items[key] = JSON.parse(val); - } - } - return cb(items); - }); - }, - set: (function() { - var set; - - set = function(key, val) { - key = g.NAMESPACE + key; - val = JSON.stringify(val); - if (key in $.syncing) { - localStorage.setItem(key, val); - } - return GM_setValue(key, val); - }; - return function(keys, val) { - var key; - - if (typeof keys === 'string') { - set(keys, val); - return; - } - for (key in keys) { - val = keys[key]; - set(key, val); - } - }; - })() - }); - - Polyfill = { - init: function() { - return Polyfill.visibility(); - }, - visibility: function() { - var event, prefix, property; - - if ('visibilityState' in document || !(prefix = ('webkitVisibilityState' in document ? 'webkit' : 'mozVisibilityState' in document ? 'moz' : void 0))) { - return; - } - property = prefix + 'VisibilityState'; - event = prefix + 'visibilitychange'; - d.visibilityState = d[property]; - d.hidden = d.visibilityState === 'hidden'; - return $.on(d, event, function() { - d.visibilityState = d[property]; - d.hidden = d.visibilityState === 'hidden'; - return $.event('visibilitychange'); - }); - } - }; - - Header = { - init: function() { - var createSubEntry, setting, subEntries, _i, _len, _ref; - - this.menuButton = $.el('span', { - className: 'menu-button', - innerHTML: '' - }); - this.menu = new UI.Menu('header'); - $.on(this.menuButton, 'click', this.menuToggle); - $.on(this.toggle, 'mousedown', this.toggleBarVisibility); - $.on(window, 'load hashchange', Header.hashScroll); - this.positionToggler = $.el('span', { - textContent: 'Header Position', - className: 'header-position-link' - }); - createSubEntry = Header.createSubEntry; - subEntries = []; - _ref = ['sticky top', 'sticky bottom', 'top']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - setting = _ref[_i]; - subEntries.push(createSubEntry(setting)); - } - $.event('AddMenuEntry', { - type: 'header', - el: this.positionToggler, - order: 108, - subEntries: subEntries - }); - this.headerToggler = $.el('label', { - innerHTML: " Auto-hide header" - }); - $.on(this.headerToggler.firstElementChild, 'change', this.toggleBarVisibility); - $.event('AddMenuEntry', { - type: 'header', - el: this.headerToggler, - order: 109 - }); - $.on(d, 'CreateNotification', this.createNotification); - $.asap((function() { - return d.body; - }), function() { - if (!Main.isThisPageLegit()) { - return; - } - return $.asap((function() { - return $.id('boardNavMobile'); - }), Header.setBoardList); - }); - return $.ready(function() { - return $.add(d.body, Header.hover); - }); - }, - bar: $.el('div', { - id: 'notifications' - }), - shortcuts: $.el('span', { - id: 'shortcuts' - }), - hover: $.el('div', { - id: 'hoverUI' - }), - toggle: $.el('div', { - id: 'toggle-header-bar' - }), - createSubEntry: function(setting) { - var label; - - label = $.el('label', { - textContent: "" + setting - }); - $.on(label, 'click', Header.setBarPosition); - return { - el: label - }; - }, - setBoardList: function() { - var a, btn, customBoardList, fullBoardList, nav; - - Header.nav = nav = $.id('boardNavDesktop'); - if (a = $("a[href*='/" + g.BOARD + "/']", nav)) { - a.className = 'current'; - } - fullBoardList = $.el('span', { - id: 'full-board-list', - hidden: true - }); - customBoardList = $.el('span', { - id: 'custom-board-list' - }); - Header.setBarPosition.call({ - textContent: "" + Conf['Boards Navigation'] - }); - $.sync('Boards Navigation', Header.changeBarPosition); - Header.setBarVisibility(Conf['Header auto-hide']); - $.sync('Header auto-hide', Header.setBarVisibility); - $.after(nav, $.id('navtopright')); - $.add(fullBoardList, __slice.call(nav.childNodes)); - $.add(nav, [Header.menuButton, customBoardList, fullBoardList, Header.shortcuts, Header.bar, Header.toggle]); - if (Conf['Custom Board Navigation']) { - Header.generateBoardList(Conf['boardnav']); - $.sync('boardnav', Header.generateBoardList); - btn = $.el('span', { - className: 'hide-board-list-button', - innerHTML: '[ - ]\u00A0' - }); - $.on(btn, 'click', Header.toggleBoardList); - return $.prepend(fullBoardList, btn); - } else { - $.rm($('#custom-board-list', nav)); - return fullBoardList.hidden = false; - } - }, - generateBoardList: function(text) { - var as, list, nodes; - - list = $('#custom-board-list', Header.nav); - $.rmAll(list); - if (!text) { - return; - } - as = $$('#full-board-list a', Header.nav).slice(0, -2); - nodes = text.match(/[\w@]+(-(all|title|full|index|catalog|text:"[^"]+"))*|[^\w@]+/g).map(function(t) { - var a, board, m, _i, _len; - - if (/^[^\w@]/.test(t)) { - return $.tn(t); - } - if (/^toggle-all/.test(t)) { - a = $.el('a', { - className: 'show-board-list-button', - textContent: (t.match(/-text:"(.+)"/) || [null, '+'])[1], - href: 'javascript:;' - }); - $.on(a, 'click', Header.toggleBoardList); - return a; - } - board = /^current/.test(t) ? g.BOARD.ID : t.match(/^[^-]+/)[0]; - for (_i = 0, _len = as.length; _i < _len; _i++) { - a = as[_i]; - if (a.textContent === board) { - a = a.cloneNode(true); - if (/-title/.test(t)) { - a.textContent = a.title; - } else if (/-full/.test(t)) { - a.textContent = "/" + board + "/ - " + a.title; - } else if (/-(index|catalog|text)/.test(t)) { - if (m = t.match(/-(index|catalog)/)) { - a.setAttribute('data-only', m[1]); - a.href = "//boards.4chan.org/" + board + "/"; - if (m[1] === 'catalog') { - a.href += 'catalog'; - } - } - if (m = t.match(/-text:"(.+)"/)) { - a.textContent = m[1]; - } - } else if (board === '@') { - $.addClass(a, 'navSmall'); - } - return a; - } - } - return $.tn(t); - }); - return $.add(list, nodes); - }, - toggleBoardList: function() { - var custom, full, nav, showBoardList; - - nav = Header.nav; - custom = $('#custom-board-list', nav); - full = $('#full-board-list', nav); - showBoardList = !full.hidden; - custom.hidden = !showBoardList; - return full.hidden = showBoardList; - }, - setBarPosition: function() { - $.event('CloseMenu'); - Header.changeBarPosition(this.textContent); - Conf['Boards Navigation'] = this.textContent; - return $.set('Boards Navigation', this.textContent); - }, - changeBarPosition: function(setting) { - $.rmClass(doc, 'top'); - $.rmClass(doc, 'fixed'); - $.rmClass(doc, 'bottom'); - $.rmClass(Header.nav, 'dialog'); - switch (setting) { - case 'sticky top': - $.addClass(doc, 'top'); - $.addClass(doc, 'fixed'); - return $.addClass(Header.nav, 'dialog'); - case 'sticky bottom': - $.addClass(doc, 'fixed'); - $.addClass(doc, 'bottom'); - return $.addClass(Header.nav, 'dialog'); - case 'top': - return $.addClass(doc, 'top'); - } - }, - setBarVisibility: function(hide) { - Header.headerToggler.firstElementChild.checked = hide; - return (hide ? $.addClass : $.rmClass)(Header.nav, 'autohide'); - }, - hashScroll: function() { - var post; - - if (!(post = $.id(this.location.hash.slice(1)))) { - return; - } - if ((Get.postFromRoot(post)).isHidden) { - return; - } - return Header.scrollToPost(post); - }, - scrollToPost: function(post) { - var headRect, top; - - top = post.getBoundingClientRect().top; - if (Conf['Boards Navigation'] === 'sticky top') { - headRect = Header.bar.getBoundingClientRect(); - top += -headRect.top - headRect.height; - } - return ($.engine === 'webkit' ? d.body : doc).scrollTop += top; - }, - toggleBarVisibility: function(e) { - var hide, message; - - if (e.type === 'mousedown' && e.button !== 0) { - return; - } - hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.nav, 'autohide'); - Header.setBarVisibility(hide); - message = hide ? 'The header bar will automatically hide itself.' : 'The header bar will remain visible.'; - new Notification('info', message, 2); - return $.set('Header auto-hide', hide); - }, - addShortcut: function(el) { - var shortcut; - - shortcut = $.el('span', { - className: 'shortcut' - }); - $.add(shortcut, [$.tn(' ['), el, $.tn(']')]); - return $.add(Header.shortcuts, shortcut); - }, - menuToggle: function(e) { - return Header.menu.toggle(e, this, g); - }, - createNotification: function(e) { - var cb, content, lifetime, notif, type, _ref; - - _ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime, cb = _ref.cb; - notif = new Notification(type, content, lifetime); - if (cb) { - return cb(notif); - } - } - }; - - Notification = (function() { - var add, close; - - function Notification(type, content, timeout) { - this.timeout = timeout; - this.add = add.bind(this); - this.close = close.bind(this); - this.el = $.el('div', { - innerHTML: '×
' - }); - this.el.style.opacity = 0; - this.setType(type); - $.on(this.el.firstElementChild, 'click', this.close); - if (typeof content === 'string') { - content = $.tn(content); - } - $.add(this.el.lastElementChild, content); - $.ready(this.add); - } - - Notification.prototype.setType = function(type) { - return this.el.className = "notification " + type; - }; - - add = function() { - if (d.hidden) { - $.on(d, 'visibilitychange', this.add); - return; - } - $.off(d, 'visibilitychange', this.add); - $.add($.id('notifications'), this.el); - this.el.clientHeight; - this.el.style.opacity = 1; - if (this.timeout) { - return setTimeout(this.close, this.timeout * $.SECOND); - } - }; - - close = function() { - return $.rm(this.el); - }; - - return Notification; - - })(); - - CatalogLinks = { - init: function() { - var el; - - if (!Conf['Catalog Links']) { - return; - } - el = $.el('a', { - id: 'toggleCatalog', - href: 'javascript:;', - className: Conf['Header catalog links'] ? 'disabled' : '', - textContent: 'Catalog', - title: "Turn catalog links " + (Conf['Header catalog links'] ? 'off' : 'on') + "." - }); - $.on(el, 'click', this.toggle); - Header.addShortcut(el); - return $.asap((function() { - return d.body; - }), function() { - if (!Main.isThisPageLegit()) { - return; - } - return $.asap((function() { - return $.id('boardNavMobile'); - }), function() { - return CatalogLinks.toggle.call(el); - }); - }); - }, - toggle: function() { - var a, board, useCatalog, _i, _len, _ref; - - $.set('Header catalog links', useCatalog = this.className === 'disabled'); - $.toggleClass(this, 'disabled'); - _ref = $$('a', $.id('boardNavDesktop')); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - a = _ref[_i]; - board = a.pathname.split('/')[1]; - if (['f', 'status', '4chan'].contains(board) || !board) { - continue; - } - if (Conf['External Catalog']) { - a.href = useCatalog ? CatalogLinks.external(board) : "//boards.4chan.org/" + board + "/"; - } else { - a.pathname = "/" + board + "/" + (useCatalog ? 'catalog' : ''); - } - a.title = useCatalog ? "" + a.title + " - Catalog" : a.title.replace(/\ -\ Catalog$/, ''); - } - return this.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; - }, - external: function(board) { - return (['a', 'c', 'g', 'co', 'k', 'm', 'o', 'p', 'v', 'vg', 'w', 'cm', '3', 'adv', 'an', 'cgl', 'ck', 'diy', 'fa', 'fit', 'int', 'jp', 'mlp', 'lit', 'mu', 'n', 'po', 'sci', 'toy', 'trv', 'tv', 'vp', 'x', 'q'].contains(board) ? "http://catalog.neet.tv/" + board : ['d', 'e', 'gif', 'h', 'hr', 'hc', 'r9k', 's', 'pol', 'soc', 'u', 'i', 'ic', 'hm', 'r', 'w', 'wg', 'wsg', 't', 'y'].contains(board) ? "http://4index.gropes.us/" + board : "//boards.4chan.org/" + board + "/catalog"); - } - }; - - Settings = { - init: function() { - var link, settings; - - link = $.el('a', { - className: 'settings-link', - textContent: '4chan X Settings', - href: 'javascript:;' - }); - $.on(link, 'click', Settings.open); - $.asap((function() { - return d.body; - }), function() { - if (!Main.isThisPageLegit()) { - return; - } - return $.asap((function() { - return $.id('boardNavMobile'); - }), function() { - return $.prepend($.id('navtopright'), [$.tn(' ['), link, $.tn('] ')]); - }); - }); - $.get('previousversion', null, function(item) { - var changelog, curr, el, prev, previous; - - if (previous = item['previousversion']) { - if (previous === g.VERSION) { - return; - } - prev = previous.match(/\d+/g).map(Number); - curr = g.VERSION.match(/\d+/g).map(Number); - if (!(prev[0] <= curr[0] && prev[1] <= curr[1] && prev[2] <= curr[2])) { - return; - } - changelog = 'https://github.com/MayhemYDG/4chan-x/blob/v3/CHANGELOG.md'; - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + g.VERSION + "." - }); - new Notification('info', el, 30); - } else { - $.on(d, '4chanXInitFinished', Settings.open); - } - return $.set({ - lastupdate: Date.now(), - previousversion: g.VERSION - }); - }); - Settings.addSection('Main', Settings.main); - Settings.addSection('Filter', Settings.filter); - Settings.addSection('Sauce', Settings.sauce); - Settings.addSection('Rice', Settings.rice); - Settings.addSection('Keybinds', Settings.keybinds); - $.on(d, 'AddSettingsSection', Settings.addSection); - $.on(d, 'OpenSettings', function(e) { - return Settings.open(e.detail); - }); - if (Conf['Enable 4chan\'s Extension']) { - return; - } - settings = JSON.parse(localStorage.getItem('4chan-settings')) || {}; - if (settings.disableAll) { - return; - } - settings.disableAll = true; - return localStorage.setItem('4chan-settings', JSON.stringify(settings)); - }, - open: function(openSection) { - var dialog, html, link, links, overlay, section, sectionToOpen, _i, _len, _ref; - - $.off(d, '4chanXInitFinished', Settings.open); - if (Settings.dialog) { - return; - } - $.event('CloseMenu'); - html = "\n
\n
"; - Settings.overlay = overlay = $.el('div', { - id: 'overlay' - }); - Settings.dialog = dialog = $.el('div', { - id: 'fourchanx-settings', - className: 'dialog', - innerHTML: html - }); - links = []; - _ref = Settings.sections; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - section = _ref[_i]; - link = $.el('a', { - className: "tab-" + section.hyphenatedTitle, - textContent: section.title, - href: 'javascript:;' - }); - $.on(link, 'click', Settings.openSection.bind(section)); - links.push(link, $.tn(' | ')); - if (section.title === openSection) { - sectionToOpen = link; - } - } - links.pop(); - $.add($('.sections-list', dialog), links); - (sectionToOpen ? sectionToOpen : links[0]).click(); - $.on($('.close', dialog), 'click', Settings.close); - $.on(overlay, 'click', Settings.close); - d.body.style.width = "" + d.body.clientWidth + "px"; - $.addClass(d.body, 'unscroll'); - return $.add(d.body, [overlay, dialog]); - }, - close: function() { - if (!Settings.dialog) { - return; - } - d.body.style.removeProperty('width'); - $.rmClass(d.body, 'unscroll'); - $.rm(Settings.overlay); - $.rm(Settings.dialog); - delete Settings.overlay; - return delete Settings.dialog; - }, - sections: [], - addSection: function(title, open) { - var hyphenatedTitle, _ref; - - if (typeof title !== 'string') { - _ref = title.detail, title = _ref.title, open = _ref.open; - } - hyphenatedTitle = title.toLowerCase().replace(/\s+/g, '-'); - return Settings.sections.push({ - title: title, - hyphenatedTitle: hyphenatedTitle, - open: open - }); - }, - openSection: function() { - var section, selected; - - if (selected = $('.tab-selected', Settings.dialog)) { - $.rmClass(selected, 'tab-selected'); - } - $.addClass($(".tab-" + this.hyphenatedTitle, Settings.dialog), 'tab-selected'); - section = $('section', Settings.dialog); - $.rmAll(section); - section.className = "section-" + this.hyphenatedTitle; - this.open(section, g); - return section.scrollTop = 0; - }, - main: function(section) { - var arr, button, description, div, fs, hiddenNum, input, inputs, items, key, obj, _ref; - - section.innerHTML = "
\n \n \n \n
\n

"; - $.on($('.export', section), 'click', Settings["export"]); - $.on($('.import', section), 'click', Settings["import"]); - $.on($('input', section), 'change', Settings.onImport); - items = {}; - inputs = {}; - _ref = Config.main; - for (key in _ref) { - obj = _ref[key]; - fs = $.el('fieldset', { - innerHTML: "" + key + "" - }); - for (key in obj) { - arr = obj[key]; - description = arr[1]; - div = $.el('div', { - innerHTML: ": " + description + "" - }); - input = $('input', div); - $.on(input, 'change', $.cb.checked); - items[key] = Conf[key]; - inputs[key] = input; - $.add(fs, div); - } - $.add(section, fs); - } - $.get(items, function(items) { - var val; - - for (key in items) { - val = items[key]; - inputs[key].checked = val; - } - }); - div = $.el('div', { - innerHTML: ": Clear manually-hidden threads and posts on all boards. Refresh the page to apply." - }); - button = $('button', div); - hiddenNum = 0; - $.get('hiddenThreads', { - boards: {} - }, function(item) { - var ID, board, thread, _ref1; - - _ref1 = item.hiddenThreads.boards; - for (ID in _ref1) { - board = _ref1[ID]; - for (ID in board) { - thread = board[ID]; - hiddenNum++; - } - } - return button.textContent = "Hidden: " + hiddenNum; - }); - $.get('hiddenPosts', { - boards: {} - }, function(item) { - var ID, board, post, thread, _ref1; - - _ref1 = item.hiddenPosts.boards; - for (ID in _ref1) { - board = _ref1[ID]; - for (ID in board) { - thread = board[ID]; - for (ID in thread) { - post = thread[ID]; - hiddenNum++; - } - } - } - return button.textContent = "Hidden: " + hiddenNum; - }); - $.on(button, 'click', function() { - this.textContent = 'Hidden: 0'; - return $.get('hiddenThreads', { - boards: {} - }, function(item) { - var boardID; - - for (boardID in item.hiddenThreads.boards) { - localStorage.removeItem("4chan-hide-t-" + boardID); - } - return $["delete"](['hiddenThreads', 'hiddenPosts']); - }); - }); - return $.after($('input[name="Stubs"]', section).parentNode.parentNode, div); - }, - "export": function(now, data) { - var a, db, p, _i, _len; - - if (typeof now !== 'number') { - now = Date.now(); - data = { - version: g.VERSION, - date: now - }; - Conf['WatchedThreads'] = {}; - for (_i = 0, _len = DataBoards.length; _i < _len; _i++) { - db = DataBoards[_i]; - Conf[db] = { - boards: {} - }; - } - $.get(Conf, function(Conf) { - data.Conf = Conf; - return Settings["export"](now, data); - }); - return; - } - a = $.el('a', { - className: 'warning', - textContent: 'Save me!', - download: "4chan X v" + g.VERSION + "-" + now + ".json", - href: "data:application/json;base64," + (btoa(unescape(encodeURIComponent(JSON.stringify(data, null, 2))))), - target: '_blank' - }); - p = $('.imp-exp-result', Settings.dialog); - $.rmAll(p); - return $.add(p, a); - }, - "import": function() { - return this.nextElementSibling.click(); - }, - onImport: function() { - var file, output, reader; - - if (!(file = this.files[0])) { - return; - } - output = this.parentNode.nextElementSibling; - if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { - output.textContent = 'Import aborted.'; - return; - } - reader = new FileReader(); - reader.onload = function(e) { - var data, err; - - try { - data = JSON.parse(e.target.result); - Settings.loadSettings(data); - if (confirm('Import successful. Refresh now?')) { - return window.location.reload(); - } - } catch (_error) { - err = _error; - output.textContent = 'Import failed due to an error.'; - return c.error(err.stack); - } - }; - return reader.readAsText(file); - }, - loadSettings: function(data) { - var key, val, version, _ref; - - version = data.version.split('.'); - if (version[0] === '2') { - data = Settings.convertSettings(data, { - 'Disable 4chan\'s extension': '', - 'Catalog Links': '', - 'Reply Navigation': '', - 'Show Stubs': 'Stubs', - 'Image Auto-Gif': 'Auto-GIF', - 'Expand From Current': '', - 'Unread Favicon': 'Unread Tab Icon', - 'Post in Title': 'Thread Excerpt', - 'Auto Hide QR': '', - 'Open Reply in New Tab': '', - 'Remember QR size': '', - 'Quote Inline': 'Quote Inlining', - 'Quote Preview': 'Quote Previewing', - 'Indicate OP quote': 'Mark OP Quotes', - 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', - 'uniqueid': 'uniqueID', - 'mod': 'capcode', - 'country': 'flag', - 'md5': 'MD5', - 'openEmptyQR': 'Open empty QR', - 'openQR': 'Open QR', - 'openOptions': 'Open settings', - 'close': 'Close', - 'spoiler': 'Spoiler tags', - 'code': 'Code tags', - 'submit': 'Submit QR', - 'watch': 'Watch', - 'update': 'Update', - 'unreadCountTo0': '', - 'expandAllImages': 'Expand images', - 'expandImage': 'Expand image', - 'zero': 'Front page', - 'nextPage': 'Next page', - 'previousPage': 'Previous page', - 'nextThread': 'Next thread', - 'previousThread': 'Previous thread', - 'expandThread': 'Expand thread', - 'openThreadTab': 'Open thread', - 'openThread': 'Open thread tab', - 'nextReply': 'Next reply', - 'previousReply': 'Previous reply', - 'hide': 'Hide', - 'Scrolling': 'Auto Scroll', - 'Verbose': '' - }); - data.Conf.sauces = data.Conf.sauces.replace(/\$\d/g, function(c) { - switch (c) { - case '$1': - return '%TURL'; - case '$2': - return '%URL'; - case '$3': - return '%MD5'; - case '$4': - return '%board'; - default: - return c; - } - }); - _ref = Config.hotkeys; - for (key in _ref) { - val = _ref[key]; - if (!(key in data.Conf)) { - continue; - } - data.Conf[key] = data.Conf[key].replace(/ctrl|alt|meta/g, function(s) { - return "" + (s[0].toUpperCase()) + s.slice(1); - }).replace(/(^|.+\+)[A-Z]$/g, function(s) { - return "Shift+" + s.slice(0, -1) + (s.slice(-1).toLowerCase()); - }); - } - data.Conf.WatchedThreads = data.WatchedThreads; - } - return $.set(data.Conf); - }, - convertSettings: function(data, map) { - var newKey, prevKey; - - for (prevKey in map) { - newKey = map[prevKey]; - if (newKey) { - data.Conf[newKey] = data.Conf[prevKey]; - } - delete data.Conf[prevKey]; - } - return data; - }, - filter: function(section) { - var select; - - section.innerHTML = "\n
"; - select = $('select', section); - $.on(select, 'change', Settings.selectFilter); - return Settings.selectFilter.call(select); - }, - selectFilter: function() { - var div, name, ta; - - div = this.nextElementSibling; - if ((name = this.value) !== 'guide') { - $.rmAll(div); - ta = $.el('textarea', { - name: name, - className: 'field', - spellcheck: false - }); - $.get(name, Conf[name], function(item) { - return ta.value = item[name]; - }); - $.on(ta, 'change', $.cb.value); - $.add(div, ta); - return; - } - return div.innerHTML = "
Filter is disabled.
\n

\n Use regular expressions, one per line.
\n Lines starting with a # will be ignored.
\n For example, /weeaboo/i will filter posts containing the string `weeaboo`, case-insensitive.
\n MD5 filtering uses exact string matching, not regular expressions.\n

\n
    You can use these settings with each regular expression, separate them with semicolons:\n
  • \n Per boards, separate them with commas. It is global if not specified.
    \n For example: boards:a,jp;.\n
  • \n
  • \n Filter OPs only along with their threads (`only`), replies only (`no`), or both (`yes`, this is default).
    \n For example: op:only;, op:no; or op:yes;.\n
  • \n
  • \n Overrule the `Show Stubs` setting if specified: create a stub (`yes`) or not (`no`).
    \n For example: stub:yes; or stub:no;.\n
  • \n
  • \n Highlight instead of hiding. You can specify a class name to use with a userstyle.
    \n For example: highlight; or highlight:wallpaper;.\n
  • \n
  • \n Highlighted OPs will have their threads put on top of board pages by default.
    \n For example: top:yes; or top:no;.\n
  • \n
"; - }, - sauce: function(section) { - var sauce; - - section.innerHTML = "
Sauce is disabled.
\n
Lines starting with a # will be ignored.
\n
You can specify a display text by appending ;text:[text] to the URL.
\n
    These parameters will be replaced by their corresponding values:\n
  • %TURL: Thumbnail URL.
  • \n
  • %URL: Full image URL.
  • \n
  • %MD5: MD5 hash.
  • \n
  • %board: Current board.
  • \n
\n"; - sauce = $('textarea', section); - $.get('sauces', Conf['sauces'], function(item) { - return sauce.value = item['sauces']; - }); - return $.on(sauce, 'change', $.cb.value); - }, - rice: function(section) { - var event, input, inputs, items, name, _i, _len, _ref; - - section.innerHTML = "
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n \n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Tab Icon is disabled.\n \n \n
\n\n
\n \n \n \n \n \n
"; - items = {}; - inputs = {}; - _ref = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - input = $("[name=" + name + "]", section); - items[name] = Conf[name]; - inputs[name] = input; - event = ['favicon', 'usercss'].contains(name) ? 'change' : 'input'; - $.on(input, event, $.cb.value); - } - $.get(items, function(items) { - var key, val; - - for (key in items) { - val = items[key]; - input = inputs[key]; - input.value = val; - if ('usercss' !== name) { - $.on(input, event, Settings[key]); - Settings[key].call(input); - } - } - }); - $.on($('input[name="Custom CSS"]', section), 'change', Settings.togglecss); - return $.on($.id('apply-css'), 'click', Settings.usercss); - }, - boardnav: function() { - return Header.generateBoardList(this.value); - }, - time: function() { - var funk; - - funk = Time.createFunc(this.value); - return this.nextElementSibling.textContent = funk(Time, new Date()); - }, - backlink: function() { - return this.nextElementSibling.textContent = Conf['backlink'].replace(/%id/, '123456789'); - }, - fileInfo: function() { - var data, funk; - - data = { - isReply: true, - file: { - URL: '//images.4chan.org/g/src/1334437723720.jpg', - name: 'd9bb2efc98dd0df141a94399ff5880b7.jpg', - size: '276 KB', - sizeInBytes: 276 * 1024, - dimensions: '1280x720', - isImage: true, - isSpoiler: true - } - }; - funk = FileInfo.createFunc(this.value); - return this.nextElementSibling.innerHTML = funk(FileInfo, data); - }, - favicon: function() { - Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Tab Icon']) { - Unread.update(); - } - return this.nextElementSibling.innerHTML = "\n\n\n"; - }, - togglecss: function() { - if ($('textarea[name=usercss]', $.x('ancestor::fieldset[1]', this)).disabled = !this.checked) { - CustomCSS.rmStyle(); - } else { - CustomCSS.addStyle(); - } - return $.cb.checked.call(this); - }, - usercss: function() { - return CustomCSS.update(); - }, - keybinds: function(section) { - var arr, input, inputs, items, key, tbody, tr, _ref; - - section.innerHTML = "
Keybinds are disabled.
\n
Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
\n
Press Backspace to disable a keybind.
\n\n \n
ActionsKeybinds
"; - tbody = $('tbody', section); - items = {}; - inputs = {}; - _ref = Config.hotkeys; - for (key in _ref) { - arr = _ref[key]; - tr = $.el('tr', { - innerHTML: "" + arr[1] + "" - }); - input = $('input', tr); - input.name = key; - input.spellcheck = false; - items[key] = Conf[key]; - inputs[key] = input; - $.on(input, 'keydown', Settings.keybind); - $.add(tbody, tr); - } - return $.get(items, function(items) { - var val; - - for (key in items) { - val = items[key]; - inputs[key].value = val; - } - }); - }, - keybind: function(e) { - var key; - - if (e.keyCode === 9) { - return; - } - e.preventDefault(); - e.stopPropagation(); - if ((key = Keybinds.keyCode(e)) == null) { - return; - } - this.value = key; - return $.cb.value.call(this); - } - }; - - PSAHiding = { - init: function() { - if (!Conf['Announcement Hiding']) { - return; - } - $.addClass(doc, 'hide-announcement'); - return $.on(d, '4chanXInitFinished', this.setup); - }, - setup: function() { - var btn, psa, text; - - $.off(d, '4chanXInitFinished', PSAHiding.setup); - if (!(psa = $.id('globalMessage'))) { - $.rmClass(doc, 'hide-announcement'); - return; - } - PSAHiding.btn = btn = $.el('a', { - title: 'Toggle announcement.', - href: 'javascript:;' - }); - $.on(btn, 'click', PSAHiding.toggle); - text = PSAHiding.trim(psa); - $.get('hiddenPSAs', [], function(item) { - PSAHiding.sync(item['hiddenPSAs']); - $.before(psa, btn); - return $.rmClass(doc, 'hide-announcement'); - }); - return $.sync('hiddenPSAs', PSAHiding.sync); - }, - toggle: function(e) { - var hide, text; - - hide = $.hasClass(this, 'hide-announcement'); - text = PSAHiding.trim($.id('globalMessage')); - return $.get('hiddenPSAs', [], function(item) { - var hiddenPSAs, i; - - hiddenPSAs = item.hiddenPSAs; - if (hide) { - hiddenPSAs.push(text); - } else { - i = hiddenPSAs.indexOf(text); - hiddenPSAs.splice(i, 1); - } - hiddenPSAs = hiddenPSAs.slice(-5); - PSAHiding.sync(hiddenPSAs); - return $.set('hiddenPSAs', hiddenPSAs); - }); - }, - sync: function(hiddenPSAs) { - var btn, psa, _ref, _ref1; - - btn = PSAHiding.btn; - psa = $.id('globalMessage'); - return _ref1 = (_ref = PSAHiding.trim(psa), __indexOf.call(hiddenPSAs, _ref) >= 0) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref1[0], btn.innerHTML = _ref1[1], btn.className = _ref1[2], _ref1; - }, - trim: function(psa) { - return psa.textContent.replace(/\W+/g, '').toLowerCase(); - } - }; - - Fourchan = { - init: function() { - var board; - - if (g.VIEW === 'catalog') { - return; - } - board = g.BOARD.ID; - if (board === 'g') { - $.globalEval("window.addEventListener('prettyprint', function(e) {\n var pre = e.detail;\n pre.innerHTML = prettyPrintOne(pre.innerHTML);\n}, false);"); - Post.prototype.callbacks.push({ - name: 'Parse /g/ code', - cb: this.code - }); - } - if (board === 'sci') { - $.globalEval("window.addEventListener('jsmath', function(e) {\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(e.detail);\n } else {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push('ProcessBeforeShowing', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);"); - return Post.prototype.callbacks.push({ - name: 'Parse /sci/ math', - cb: this.math - }); - } - }, - code: function() { - var pre, _i, _len, _ref; - - if (this.isClone) { - return; - } - _ref = $$('.prettyprint', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - pre = _ref[_i]; - $.event('prettyprint', pre, window); - } - }, - math: function() { - if (this.isClone || !$('.math', this.nodes.comment)) { - return; - } - return $.event('jsmath', this.nodes.post, window); - }, - parseThread: function(threadID, offset, limit) { - return $.event('4chanParsingDone', { - threadId: threadID, - offset: offset, - limit: limit - }); - } - }; - - CustomCSS = { - init: function() { - if (!Conf['Custom CSS']) { - return; - } - return this.addStyle(); - }, - addStyle: function() { - return this.style = $.addStyle(Conf['usercss']); - }, - rmStyle: function() { - if (this.style) { - $.rm(this.style); - return delete this.style; - } - }, - update: function() { - if (!this.style) { - this.addStyle(); - } - return this.style.textContent = Conf['usercss']; - } - }; - - Filter = { - filters: {}, - init: function() { - var boards, err, filter, hl, key, op, regexp, stub, top, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4; - - if (g.VIEW === 'catalog' || !Conf['Filter']) { - return; - } - for (key in Config.filter) { - this.filters[key] = []; - _ref = Conf[key].split('\n'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - filter = _ref[_i]; - if (filter[0] === '#') { - continue; - } - if (!(regexp = filter.match(/\/(.+)\/(\w*)/))) { - continue; - } - filter = filter.replace(regexp[0], ''); - boards = ((_ref1 = filter.match(/boards:([^;]+)/)) != null ? _ref1[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && !(boards.split(',')).contains(g.BOARD.ID)) { - continue; - } - if (['uniqueID', 'MD5'].contains(key)) { - regexp = regexp[1]; - } else { - try { - regexp = RegExp(regexp[1], regexp[2]); - } catch (_error) { - err = _error; - new Notification('warning', err.message, 60); - continue; - } - } - op = ((_ref2 = filter.match(/[^t]op:(yes|no|only)/)) != null ? _ref2[1] : void 0) || 'yes'; - stub = (function() { - var _ref3; - - switch ((_ref3 = filter.match(/stub:(yes|no)/)) != null ? _ref3[1] : void 0) { - case 'yes': - return true; - case 'no': - return false; - default: - return Conf['Stubs']; - } - })(); - if (hl = /highlight/.test(filter)) { - hl = ((_ref3 = filter.match(/highlight:(\w+)/)) != null ? _ref3[1] : void 0) || 'filter-highlight'; - top = ((_ref4 = filter.match(/top:(yes|no)/)) != null ? _ref4[1] : void 0) || 'yes'; - top = top === 'yes'; - } - this.filters[key].push(this.createFilter(regexp, op, stub, hl, top)); - } - if (!this.filters[key].length) { - delete this.filters[key]; - } - } - if (!Object.keys(this.filters).length) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Filter', - cb: this.node - }); - }, - createFilter: function(regexp, op, stub, hl, top) { - var settings, test; - - test = typeof regexp === 'string' ? function(value) { - return regexp === value; - } : function(value) { - return regexp.test(value); - }; - settings = { - hide: !hl, - stub: stub, - "class": hl, - top: top - }; - return function(value, isReply) { - if (isReply && op === 'only' || !isReply && op === 'no') { - return false; - } - if (!test(value)) { - return false; - } - return settings; - }; - }, - node: function() { - var filter, firstThread, key, result, thisThread, value, _i, _len, _ref; - - if (this.isClone) { - return; - } - for (key in Filter.filters) { - value = Filter[key](this); - if (value === false) { - continue; - } - _ref = Filter.filters[key]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - filter = _ref[_i]; - if (!(result = filter(value, this.isReply))) { - continue; - } - if (result.hide) { - if (this.isReply) { - PostHiding.hide(this, result.stub); - } else if (g.VIEW === 'index') { - ThreadHiding.hide(this.thread, result.stub); - } else { - continue; - } - return; - } - $.addClass(this.nodes.root, result["class"]); - if (!this.isReply && result.top && g.VIEW === 'index') { - thisThread = this.nodes.root.parentNode; - if (firstThread = $('div[class="postContainer opContainer"]')) { - if (firstThread !== this.nodes.root) { - $.before(firstThread.parentNode, [thisThread, thisThread.nextElementSibling]); - } - } - } - } - } - }, - name: function(post) { - if ('name' in post.info) { - return post.info.name; - } - return false; - }, - uniqueID: function(post) { - if ('uniqueID' in post.info) { - return post.info.uniqueID; - } - return false; - }, - tripcode: function(post) { - if ('tripcode' in post.info) { - return post.info.tripcode; - } - return false; - }, - capcode: function(post) { - if ('capcode' in post.info) { - return post.info.capcode; - } - return false; - }, - email: function(post) { - if ('email' in post.info) { - return post.info.email; - } - return false; - }, - subject: function(post) { - if ('subject' in post.info) { - return post.info.subject || false; - } - return false; - }, - comment: function(post) { - if ('comment' in post.info) { - return post.info.comment; - } - return false; - }, - flag: function(post) { - if ('flag' in post.info) { - return post.info.flag; - } - return false; - }, - filename: function(post) { - if (post.file) { - return post.file.name; - } - return false; - }, - dimensions: function(post) { - if (post.file && post.file.isImage) { - return post.file.dimensions; - } - return false; - }, - filesize: function(post) { - if (post.file) { - return post.file.size; - } - return false; - }, - MD5: function(post) { - if (post.file) { - return post.file.MD5; - } - return false; - }, - menu: { - init: function() { - var div, entry, type, _i, _len, _ref; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Filter']) { - return; - } - div = $.el('div', { - textContent: 'Filter' - }); - entry = { - type: 'post', - el: div, - order: 50, - open: function(post) { - Filter.menu.post = post; - return true; - }, - subEntries: [] - }; - _ref = [['Name', 'name'], ['Unique ID', 'uniqueID'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['E-mail', 'email'], ['Subject', 'subject'], ['Comment', 'comment'], ['Flag', 'flag'], ['Filename', 'filename'], ['Image dimensions', 'dimensions'], ['Filesize', 'filesize'], ['Image MD5', 'MD5']]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - type = _ref[_i]; - entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1])); - } - return $.event('AddMenuEntry', entry); - }, - createSubEntry: function(text, type) { - var el; - - el = $.el('a', { - href: 'javascript:;', - textContent: text - }); - el.setAttribute('data-type', type); - $.on(el, 'click', Filter.menu.makeFilter); - return { - el: el, - open: function(post) { - var value; - - value = Filter[type](post); - return value !== false; - } - }; - }, - makeFilter: function() { - var re, type, value; - - type = this.dataset.type; - value = Filter[type](Filter.menu.post); - re = ['uniqueID', 'MD5'].contains(type) ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { - if (c === '\n') { - return '\\n'; - } else if (c === '\\') { - return '\\\\'; - } else { - return "\\" + c; - } - }); - re = ['uniqueID', 'MD5'].contains(type) ? "/" + re + "/" : "/^" + re + "$/"; - return $.get(type, Conf[type], function(item) { - var save, section, select, ta, tl; - - save = item[type]; - save = save ? "" + save + "\n" + re : re; - $.set(type, save); - Settings.open('Filter'); - section = $('.section-container'); - select = $('select[name=filter]', section); - select.value = type; - Settings.selectFilter.call(select); - ta = $('textarea', section); - tl = ta.textLength; - ta.setSelectionRange(tl, tl); - return ta.focus(); - }); - } - } - }; - - ThreadHiding = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Hiding'] && !Conf['Thread Hiding Link']) { - return; - } - this.db = new DataBoard('hiddenThreads'); - this.syncCatalog(); - return Thread.prototype.callbacks.push({ - name: 'Thread Hiding', - cb: this.node - }); - }, - node: function() { - var data; - - if (data = ThreadHiding.db.get({ - boardID: this.board.ID, - threadID: this.ID - })) { - ThreadHiding.hide(this, data.makeStub); - } - if (!Conf['Thread Hiding']) { - return; - } - return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide')); - }, - syncCatalog: function() { - var e, hiddenThreads, hiddenThreadsOnCatalog, threadID; - - hiddenThreads = ThreadHiding.db.get({ - boardID: g.BOARD.ID, - defaultValue: {} - }); - try { - hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - } catch (_error) { - e = _error; - localStorage.setItem("4chan-hide-t-" + g.BOARD, JSON.stringify({})); - return ThreadHiding.syncCatalog(); - } - for (threadID in hiddenThreadsOnCatalog) { - if (!(threadID in hiddenThreads)) { - hiddenThreads[threadID] = {}; - } - } - for (threadID in hiddenThreads) { - if (!(threadID in hiddenThreadsOnCatalog)) { - delete hiddenThreads[threadID]; - } - } - if ((ThreadHiding.db.data.lastChecked || 0) > Date.now() - $.MINUTE) { - ThreadHiding.cleanCatalog(hiddenThreadsOnCatalog); - } - return ThreadHiding.db.set({ - boardID: g.BOARD.ID, - val: hiddenThreads - }); - }, - cleanCatalog: function(hiddenThreadsOnCatalog) { - return $.cache("//api.4chan.org/" + g.BOARD + "/threads.json", function() { - var page, thread, threads, _i, _j, _len, _len1, _ref, _ref1; - - if (this.status !== 200) { - return; - } - threads = {}; - _ref = JSON.parse(this.response); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - page = _ref[_i]; - _ref1 = page.threads; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - thread = _ref1[_j]; - if (thread.no in hiddenThreadsOnCatalog) { - threads[thread.no] = hiddenThreadsOnCatalog[thread.no]; - } - } - } - if (Object.keys(threads).length) { - return localStorage.setItem("4chan-hide-t-" + g.BOARD, JSON.stringify(threads)); - } else { - return localStorage.removeItem("4chan-hide-t-" + g.BOARD); - } - }); - }, - menu: { - init: function() { - var apply, div, makeStub; - - if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-thread-link', - textContent: 'Hide thread' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', ThreadHiding.menu.hide); - makeStub = $.el('label', { - innerHTML: " Make stub" - }); - return $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 20, - open: function(_arg) { - var isReply, thread; - - thread = _arg.thread, isReply = _arg.isReply; - if (isReply || thread.isHidden) { - return false; - } - ThreadHiding.menu.thread = thread; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: makeStub - } - ] - }); - }, - hide: function() { - var makeStub, thread; - - makeStub = $('input', this.parentNode).checked; - thread = ThreadHiding.menu.thread; - ThreadHiding.hide(thread, makeStub); - ThreadHiding.saveHiddenState(thread, makeStub); - return $.event('CloseMenu'); - } - }, - makeButton: function(thread, type) { - var a; - - a = $.el('a', { - className: "" + type + "-thread-button", - innerHTML: "[ " + (type === 'hide' ? '-' : '+') + " ]", - href: 'javascript:;' - }); - a.setAttribute('data-fullid', thread.fullID); - $.on(a, 'click', ThreadHiding.toggle); - return a; - }, - saveHiddenState: function(thread, makeStub) { - var hiddenThreadsOnCatalog; - - hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - if (thread.isHidden) { - ThreadHiding.db.set({ - boardID: thread.board.ID, - threadID: thread.ID, - val: { - makeStub: makeStub - } - }); - hiddenThreadsOnCatalog[thread] = true; - } else { - ThreadHiding.db["delete"]({ - boardID: thread.board.ID, - threadID: thread.ID - }); - delete hiddenThreadsOnCatalog[thread]; - } - return localStorage.setItem("4chan-hide-t-" + g.BOARD, JSON.stringify(hiddenThreadsOnCatalog)); - }, - toggle: function(thread) { - if (!(thread instanceof Thread)) { - thread = g.threads[this.dataset.fullid]; - } - if (thread.isHidden) { - ThreadHiding.show(thread); - } else { - ThreadHiding.hide(thread); - } - return ThreadHiding.saveHiddenState(thread); - }, - hide: function(thread, makeStub) { - var OP, a, numReplies, opInfo, span, threadRoot; - - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (thread.hidden) { - return; - } - OP = thread.OP; - threadRoot = OP.nodes.root.parentNode; - threadRoot.hidden = thread.isHidden = true; - if (!makeStub) { - threadRoot.nextElementSibling.hidden = true; - return; - } - numReplies = 0; - if (span = $('.summary', threadRoot)) { - numReplies = +span.textContent.match(/\d+/); - } - numReplies += $$('.opContainer ~ .replyContainer', threadRoot).length; - numReplies = numReplies === 1 ? '1 reply' : "" + numReplies + " replies"; - opInfo = Conf['Anonymize'] ? 'Anonymous' : $('.nameBlock', OP.nodes.info).textContent; - a = ThreadHiding.makeButton(thread, 'show'); - $.add(a, $.tn(" " + opInfo + " (" + numReplies + ")")); - thread.stub = $.el('div', { - className: 'stub' - }); - $.add(thread.stub, a); - if (Conf['Menu']) { - $.add(thread.stub, [$.tn(' '), Menu.makeButton(OP)]); - } - return $.before(threadRoot, thread.stub); - }, - show: function(thread) { - var threadRoot; - - if (thread.stub) { - $.rm(thread.stub); - delete thread.stub; - } - threadRoot = thread.OP.nodes.root.parentNode; - return threadRoot.nextElementSibling.hidden = threadRoot.hidden = thread.isHidden = false; - } - }; - - PostHiding = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link']) { - return; - } - this.db = new DataBoard('hiddenPosts'); - return Post.prototype.callbacks.push({ - name: 'Reply Hiding', - cb: this.node - }); - }, - node: function() { - var data; - - if (!this.isReply || this.isClone) { - return; - } - if (data = PostHiding.db.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - })) { - if (data.thisPost) { - PostHiding.hide(this, data.makeStub, data.hideRecursively); - } else { - Recursive.apply(PostHiding.hide, this, data.makeStub, true); - Recursive.add(PostHiding.hide, this, data.makeStub, true); - } - } - if (!Conf['Reply Hiding']) { - return; - } - return $.replace($('.sideArrows', this.nodes.root), PostHiding.makeButton(this, 'hide')); - }, - menu: { - init: function() { - var apply, div, makeStub, replies, thisPost; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Reply Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-reply-link', - textContent: 'Hide reply' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.hide); - thisPost = $.el('label', { - innerHTML: ' This post' - }); - replies = $.el('label', { - innerHTML: " Hide replies" - }); - makeStub = $.el('label', { - innerHTML: " Make stub" - }); - $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 20, - open: function(post) { - if (!post.isReply || post.isClone || post.isHidden) { - return false; - } - PostHiding.menu.post = post; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - }, { - el: makeStub - } - ] - }); - div = $.el('div', { - className: 'show-reply-link', - textContent: 'Show reply' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.show); - thisPost = $.el('label', { - innerHTML: ' This post' - }); - replies = $.el('label', { - innerHTML: " Show replies" - }); - return $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 20, - open: function(post) { - var data; - - if (!post.isReply || post.isClone || !post.isHidden) { - return false; - } - if (!(data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }))) { - return false; - } - PostHiding.menu.post = post; - thisPost.firstChild.checked = post.isHidden; - replies.firstChild.checked = (data != null ? data.hideRecursively : void 0) != null ? data.hideRecursively : Conf['Recursive Hiding']; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - } - ] - }); - }, - hide: function() { - var makeStub, parent, post, replies, thisPost; - - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - makeStub = $('input[name=makeStub]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.hide(post, makeStub, replies); - } else if (replies) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } else { - return; - } - PostHiding.saveHiddenState(post, true, thisPost, makeStub, replies); - return $.event('CloseMenu'); - }, - show: function() { - var data, parent, post, replies, thisPost; - - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.show(post, replies); - } else if (replies) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post, true); - } else { - return; - } - if (data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - })) { - PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); - } - return $.event('CloseMenu'); - } - }, - makeButton: function(post, type) { - var a; - - a = $.el('a', { - className: "" + type + "-reply-button", - innerHTML: "[ " + (type === 'hide' ? '-' : '+') + " ]", - href: 'javascript:;' - }); - $.on(a, 'click', PostHiding.toggle); - return a; - }, - saveHiddenState: function(post, isHiding, thisPost, makeStub, hideRecursively) { - var data; - - data = { - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }; - if (isHiding) { - data.val = { - thisPost: thisPost !== false, - makeStub: makeStub, - hideRecursively: hideRecursively - }; - return PostHiding.db.set(data); - } else { - return PostHiding.db["delete"](data); - } - }, - toggle: function() { - var post; - - post = Get.postFromNode(this); - if (post.isHidden) { - PostHiding.show(post); - } else { - PostHiding.hide(post); - } - return PostHiding.saveHiddenState(post, post.isHidden); - }, - hide: function(post, makeStub, hideRecursively) { - var a, postInfo, quotelink, _i, _len, _ref; - - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (hideRecursively == null) { - hideRecursively = Conf['Recursive Hiding']; - } - if (post.isHidden) { - return; - } - post.isHidden = true; - if (hideRecursively) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } - _ref = Get.allQuotelinksLinkingTo(post); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - $.addClass(quotelink, 'filtered'); - } - if (!makeStub) { - post.nodes.root.hidden = true; - return; - } - a = PostHiding.makeButton(post, 'show'); - postInfo = Conf['Anonymize'] ? 'Anonymous' : $('.nameBlock', post.nodes.info).textContent; - $.add(a, $.tn(" " + postInfo)); - post.nodes.stub = $.el('div', { - className: 'stub' - }); - $.add(post.nodes.stub, a); - if (Conf['Menu']) { - $.add(post.nodes.stub, [$.tn(' '), Menu.makeButton(post)]); - } - return $.prepend(post.nodes.root, post.nodes.stub); - }, - show: function(post, showRecursively) { - var quotelink, _i, _len, _ref; - - if (showRecursively == null) { - showRecursively = Conf['Recursive Hiding']; - } - if (post.nodes.stub) { - $.rm(post.nodes.stub); - delete post.nodes.stub; - } else { - post.nodes.root.hidden = false; - } - post.isHidden = false; - if (showRecursively) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post); - } - _ref = Get.allQuotelinksLinkingTo(post); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - $.rmClass(quotelink, 'filtered'); - } - } - }; - - Recursive = { - recursives: {}, - init: function() { - if (g.VIEW === 'catalog') { - return; - } - return Post.prototype.callbacks.push({ - name: 'Recursive', - cb: this.node - }); - }, - node: function() { - var i, obj, quote, recursive, _i, _j, _len, _len1, _ref, _ref1; - - if (this.isClone) { - return; - } - _ref = this.quotes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quote = _ref[_i]; - if (obj = Recursive.recursives[quote]) { - _ref1 = obj.recursives; - for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) { - recursive = _ref1[i]; - recursive.apply(null, [this].concat(__slice.call(obj.args[i]))); - } - } - } - }, - add: function() { - var args, obj, post, recursive, _base, _name; - - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; - obj = (_base = Recursive.recursives)[_name = post.fullID] || (_base[_name] = { - recursives: [], - args: [] - }); - obj.recursives.push(recursive); - return obj.args.push(args); - }, - rm: function(recursive, post) { - var i, obj, rec, _i, _len, _ref; - - if (!(obj = Recursive.recursives[post.fullID])) { - return; - } - _ref = obj.recursives; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - rec = _ref[i]; - if (rec === recursive) { - obj.recursives.splice(i, 1); - obj.args.splice(i, 1); - } - } - }, - apply: function() { - var ID, args, fullID, post, recursive, _ref; - - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : []; - fullID = post.fullID; - _ref = g.posts; - for (ID in _ref) { - post = _ref[ID]; - if (post.quotes.contains(fullID)) { - recursive.apply(null, [post].concat(__slice.call(args))); - } - } - } - }; - - QuoteStrikeThrough = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Strike-through Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, postID, quotelink, _i, _len, _ref, _ref1, _ref2; - - if (this.isClone) { - return; - } - _ref = this.nodes.quotelinks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - _ref1 = Get.postDataFromLink(quotelink), boardID = _ref1.boardID, postID = _ref1.postID; - if ((_ref2 = g.posts["" + boardID + "." + postID]) != null ? _ref2.isHidden : void 0) { - $.addClass(quotelink, 'filtered'); - } - } - } - }; - - Menu = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Menu']) { - return; - } - this.menu = new UI.Menu('post'); - return Post.prototype.callbacks.push({ - name: 'Menu', - cb: this.node - }); - }, - node: function() { - var button; - - button = Menu.makeButton(this); - if (this.isClone) { - $.replace($('.menu-button', this.nodes.info), button); - return; - } - return $.add(this.nodes.info, [$.tn('\u00A0'), button]); - }, - makeButton: (function() { - var a; - - a = null; - return function(post) { - var clone; - - a || (a = $.el('a', { - className: 'menu-button', - innerHTML: '[]', - href: 'javascript:;' - })); - clone = a.cloneNode(true); - clone.setAttribute('data-postid', post.fullID); - if (post.isClone) { - clone.setAttribute('data-clone', true); - } - $.on(clone, 'click', Menu.toggle); - return clone; - }; - })(), - toggle: function(e) { - var post; - - post = this.dataset.clone ? Get.postFromNode(this) : g.posts[this.dataset.postid]; - return Menu.menu.toggle(e, this, post); - } - }; - - ReportLink = { - init: function() { - var a; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Report Link']) { - return; - } - a = $.el('a', { - className: 'report-link', - href: 'javascript:;', - textContent: 'Report this post' - }); - $.on(a, 'click', ReportLink.report); - return $.event('AddMenuEntry', { - type: 'post', - el: a, - order: 10, - open: function(post) { - ReportLink.post = post; - return !post.isDead; - } - }); - }, - report: function() { - var id, post, set, url; - - post = ReportLink.post; - url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - id = Date.now(); - set = "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,resizable=1,width=685,height=200"; - return window.open(url, id, set); - } - }; - - DeleteLink = { - init: function() { - var div, fileEl, fileEntry, postEl, postEntry; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Delete Link']) { - return; - } - div = $.el('div', { - className: 'delete-link', - textContent: 'Delete' - }); - postEl = $.el('a', { - className: 'delete-post', - href: 'javascript:;' - }); - fileEl = $.el('a', { - className: 'delete-file', - href: 'javascript:;' - }); - postEntry = { - el: postEl, - open: function() { - postEl.textContent = 'Post'; - $.on(postEl, 'click', DeleteLink["delete"]); - return true; - } - }; - fileEntry = { - el: fileEl, - open: function(_arg) { - var file; - - file = _arg.file; - if (!file || file.isDead) { - return false; - } - fileEl.textContent = 'File'; - $.on(fileEl, 'click', DeleteLink["delete"]); - return true; - } - }; - return $.event('AddMenuEntry', { - type: 'post', - el: div, - order: 40, - open: function(post) { - var node; - - if (post.isDead) { - return false; - } - DeleteLink.post = post; - node = div.firstChild; - node.textContent = 'Delete'; - DeleteLink.cooldown.start(post, node); - return true; - }, - subEntries: [postEntry, fileEntry] - }); - }, - "delete": function() { - var fileOnly, form, link, m, post, pwd; - - post = DeleteLink.post; - if (DeleteLink.cooldown.counting === post) { - return; - } - $.off(this, 'click', DeleteLink["delete"]); - this.textContent = "Deleting " + this.textContent + "..."; - pwd = (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $.id('delPassword').value; - fileOnly = $.hasClass(this, 'delete-file'); - form = { - mode: 'usrdel', - onlyimgdel: fileOnly, - pwd: pwd - }; - form[post.ID] = 'delete'; - link = this; - return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { - onload: function() { - return DeleteLink.load(link, post, fileOnly, this.response); - }, - onerror: function() { - return DeleteLink.error(link); - } - }, { - cred: true, - form: $.formData(form) - }); - }, - load: function(link, post, fileOnly, html) { - var msg, s, tmpDoc; - - tmpDoc = d.implementation.createHTMLDocument(''); - tmpDoc.documentElement.innerHTML = html; - if (tmpDoc.title === '4chan - Banned') { - s = 'Banned!'; - } else if (msg = tmpDoc.getElementById('errmsg')) { - s = msg.textContent; - $.on(link, 'click', DeleteLink["delete"]); - } else { - if (tmpDoc.title === 'Updating index...') { - (post.origin || post).kill(fileOnly); - } - s = 'Deleted'; - } - return link.textContent = s; - }, - error: function(link) { - link.textContent = 'Connection error, please retry.'; - return $.on(link, 'click', DeleteLink["delete"]); - }, - cooldown: { - start: function(post, node) { - var length, seconds, _ref; - - if (!((_ref = QR.db) != null ? _ref.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }) : void 0)) { - delete DeleteLink.cooldown.counting; - return; - } - DeleteLink.cooldown.counting = post; - length = post.board.ID === 'q' ? 600 : 30; - seconds = Math.ceil((length * $.SECOND - (Date.now() - post.info.date)) / $.SECOND); - return DeleteLink.cooldown.count(post, seconds, length, node); - }, - count: function(post, seconds, length, node) { - if (DeleteLink.cooldown.counting !== post) { - return; - } - if (!((0 <= seconds && seconds <= length))) { - if (DeleteLink.cooldown.counting === post) { - node.textContent = 'Delete'; - delete DeleteLink.cooldown.counting; - } - return; - } - setTimeout(DeleteLink.cooldown.count, 1000, post, seconds - 1, length, node); - return node.textContent = "Delete (" + seconds + ")"; - } - } - }; - - DownloadLink = { - init: function() { - var a; - - return; - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Download Link']) { - return; - } - if (!('download' in $.el('a'))) { - return; - } - a = $.el('a', { - className: 'download-link', - textContent: 'Download file' - }); - return $.event('AddMenuEntry', { - type: 'post', - el: a, - order: 70, - open: function(_arg) { - var file; - - file = _arg.file; - if (!file) { - return false; - } - a.href = file.URL; - a.download = file.name; - return true; - } - }); - } - }; - - ArchiveLink = { - init: function() { - var div, entry, type, _i, _len, _ref; - - if (g.VIEW === 'catalog' || !Conf['Menu'] || !Conf['Archive Link']) { - return; - } - div = $.el('div', { - textContent: 'Archive' - }); - entry = { - type: 'post', - el: div, - order: 90, - open: function(_arg) { - var ID, board, redirect, thread; - - ID = _arg.ID, thread = _arg.thread, board = _arg.board; - redirect = Redirect.to({ - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - return redirect !== ("//boards.4chan.org/" + board + "/"); - }, - subEntries: [] - }; - _ref = [['Post', 'post'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['E-mail', 'email'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'MD5']]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - type = _ref[_i]; - entry.subEntries.push(this.createSubEntry(type[0], type[1])); - } - return $.event('AddMenuEntry', entry); - }, - createSubEntry: function(text, type) { - var el, open; - - el = $.el('a', { - textContent: text, - target: '_blank' - }); - open = type === 'post' ? function(_arg) { - var ID, board, thread; - - ID = _arg.ID, thread = _arg.thread, board = _arg.board; - el.href = Redirect.to({ - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - return true; - } : function(post) { - var value; - - value = Filter[type](post); - if (!value) { - return false; - } - el.href = Redirect.to({ - boardID: post.board.ID, - type: type, - value: value, - isSearch: true - }); - return true; - }; - return { - el: el, - open: open - }; - } - }; - - Keybinds = { - init: function() { - var init; - - if (g.VIEW === 'catalog' || !Conf['Keybinds']) { - return; - } - init = function() { - var node, _i, _len, _ref; - - $.off(d, '4chanXInitFinished', init); - $.on(d, 'keydown', Keybinds.keydown); - _ref = $$('[accesskey]'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - node.removeAttribute('accesskey'); - } - }; - return $.on(d, '4chanXInitFinished', init); - }, - keydown: function(e) { - var form, key, notification, notifications, op, target, thread, threadRoot, _i, _len; - - if (!(key = Keybinds.keyCode(e))) { - return; - } - target = e.target; - if (['INPUT', 'TEXTAREA'].contains(target.nodeName)) { - if (!/(Esc|Alt|Ctrl|Meta)/.test(key)) { - return; - } - } - threadRoot = Nav.getThread(); - if (op = $('.op', threadRoot)) { - thread = Get.postFromNode(op).thread; - } - switch (key) { - case Conf['Toggle board list']: - if (Conf['Custom Board Navigation']) { - Header.toggleBoardList(); - } - break; - case Conf['Open empty QR']: - Keybinds.qr(threadRoot); - break; - case Conf['Open QR']: - Keybinds.qr(threadRoot, true); - break; - case Conf['Open settings']: - Settings.open(); - break; - case Conf['Close']: - if ($.id('fourchanx-settings')) { - Settings.close(); - } else if ((notifications = $$('.notification')).length) { - for (_i = 0, _len = notifications.length; _i < _len; _i++) { - notification = notifications[_i]; - $('.close', notification).click(); - } - } else if (QR.nodes) { - QR.close(); - } - break; - case Conf['Spoiler tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('spoiler', target); - break; - case Conf['Code tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('code', target); - break; - case Conf['Eqn tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('eqn', target); - break; - case Conf['Math tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('math', target); - break; - case Conf['Submit QR']: - if (QR.nodes && !QR.status()) { - QR.submit(); - } - break; - case Conf['Watch']: - ThreadWatcher.toggle(thread); - break; - case Conf['Update']: - ThreadUpdater.update(); - break; - case Conf['Expand image']: - Keybinds.img(threadRoot); - break; - case Conf['Expand images']: - Keybinds.img(threadRoot, true); - break; - case Conf['Front page']: - window.location = "/" + g.BOARD + "/0#delform"; - break; - case Conf['Open front page']: - $.open("/" + g.BOARD + "/#delform"); - break; - case Conf['Next page']: - if (form = $('.next form')) { - window.location = form.action; - } - break; - case Conf['Previous page']: - if (form = $('.prev form')) { - window.location = form.action; - } - break; - case Conf['Next thread']: - if (g.VIEW === 'thread') { - return; - } - Nav.scroll(+1); - break; - case Conf['Previous thread']: - if (g.VIEW === 'thread') { - return; - } - Nav.scroll(-1); - break; - case Conf['Expand thread']: - ExpandThread.toggle(thread); - break; - case Conf['Open thread']: - Keybinds.open(thread); - break; - case Conf['Open thread tab']: - Keybinds.open(thread, true); - break; - case Conf['Next reply']: - Keybinds.hl(+1, threadRoot); - break; - case Conf['Previous reply']: - Keybinds.hl(-1, threadRoot); - break; - case Conf['Hide']: - if (g.VIEW === 'index') { - ThreadHiding.toggle(thread); - } - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }, - keyCode: function(e) { - var kc, key; - - key = (function() { - switch (kc = e.keyCode) { - case 8: - return ''; - case 13: - return 'Enter'; - case 27: - return 'Esc'; - case 37: - return 'Left'; - case 38: - return 'Up'; - case 39: - return 'Right'; - case 40: - return 'Down'; - default: - if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { - return String.fromCharCode(kc).toLowerCase(); - } else { - return null; - } - } - })(); - if (key) { - if (e.altKey) { - key = 'Alt+' + key; - } - if (e.ctrlKey) { - key = 'Ctrl+' + key; - } - if (e.metaKey) { - key = 'Meta+' + key; - } - if (e.shiftKey) { - key = 'Shift+' + key; - } - } - return key; - }, - qr: function(thread, quote) { - if (!(Conf['Quick Reply'] && QR.postingIsEnabled)) { - return; - } - QR.open(); - if (quote) { - QR.quote.call($('input', $('.post.highlight', thread) || thread)); - } - return QR.nodes.com.focus(); - }, - tags: function(tag, ta) { - var range, selEnd, selStart, value; - - value = ta.value; - selStart = ta.selectionStart; - selEnd = ta.selectionEnd; - ta.value = value.slice(0, selStart) + ("[" + tag + "]") + value.slice(selStart, selEnd) + ("[/" + tag + "]") + value.slice(selEnd); - range = ("[" + tag + "]").length + selEnd; - ta.setSelectionRange(range, range); - return $.event('input', null, ta); - }, - img: function(thread, all) { - var post; - - if (all) { - return ImageExpand.cb.toggleAll(); - } else { - post = Get.postFromNode($('.post.highlight', thread) || $('.op', thread)); - return ImageExpand.toggle(post); - } - }, - open: function(thread, tab) { - var url; - - if (g.VIEW !== 'index') { - return; - } - url = "/" + thread.board + "/res/" + thread; - if (tab) { - return $.open(url); - } else { - return location.href = url; - } - }, - hl: function(delta, thread) { - var headRect, next, postEl, rect, replies, reply, root, topMargin, _i, _len; - - if (Conf['Fixed Header'] && Conf['Bottom header']) { - topMargin = 0; - } else { - headRect = Header.bar.getBoundingClientRect(); - topMargin = headRect.top + headRect.height; - } - if (postEl = $('.reply.highlight', thread)) { - $.rmClass(postEl, 'highlight'); - rect = postEl.getBoundingClientRect(); - if (rect.bottom >= topMargin && rect.top <= doc.clientHeight) { - root = postEl.parentNode; - next = $.x('child::div[contains(@class,"post reply")]', delta === +1 ? root.nextElementSibling : root.previousElementSibling); - if (!next) { - this.focus(postEl); - return; - } - if (!(g.VIEW === 'thread' || $.x('ancestor::div[parent::div[@class="board"]]', next) === thread)) { - return; - } - rect = next.getBoundingClientRect(); - if (rect.top < 0 || rect.bottom > doc.clientHeight) { - if (delta === -1) { - window.scrollBy(0, rect.top - topMargin); - } else { - next.scrollIntoView(false); - } - } - this.focus(next); - return; - } - } - replies = $$('.reply', thread); - if (delta === -1) { - replies.reverse(); - } - for (_i = 0, _len = replies.length; _i < _len; _i++) { - reply = replies[_i]; - rect = reply.getBoundingClientRect(); - if (delta === +1 && rect.top >= topMargin || delta === -1 && rect.bottom <= doc.clientHeight) { - this.focus(reply); - return; - } - } - }, - focus: function(post) { - return $.addClass(post, 'highlight'); - } - }; - - Nav = { - init: function() { - var append, next, prev, span; - - switch (g.VIEW) { - case 'index': - if (!Conf['Index Navigation']) { - return; - } - break; - case 'thread': - if (!Conf['Reply Navigation']) { - return; - } - break; - default: - return; - } - span = $.el('span', { - id: 'navlinks' - }); - prev = $.el('a', { - textContent: '▲', - href: 'javascript:;' - }); - next = $.el('a', { - textContent: '▼', - href: 'javascript:;' - }); - $.on(prev, 'click', this.prev); - $.on(next, 'click', this.next); - $.add(span, [prev, $.tn(' '), next]); - append = function() { - $.off(d, '4chanXInitFinished', append); - return $.add(d.body, span); - }; - return $.on(d, '4chanXInitFinished', append); - }, - prev: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, 0); - } else { - return Nav.scroll(-1); - } - }, - next: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, d.body.scrollHeight); - } else { - return Nav.scroll(+1); - } - }, - getThread: function(full) { - var headRect, i, rect, thread, threads, topMargin, _i, _len; - - if (Conf['Bottom header']) { - topMargin = 0; - } else { - headRect = Header.bar.getBoundingClientRect(); - topMargin = headRect.top + headRect.height; - } - threads = $$('.thread:not([hidden])'); - for (i = _i = 0, _len = threads.length; _i < _len; i = ++_i) { - thread = threads[i]; - rect = thread.getBoundingClientRect(); - if (rect.bottom > topMargin) { - if (full) { - return [threads, thread, i, rect, topMargin]; - } else { - return thread; - } - } - } - return $('.board'); - }, - scroll: function(delta) { - var i, rect, thread, threads, top, topMargin, _ref, _ref1; - - _ref = Nav.getThread(true), threads = _ref[0], thread = _ref[1], i = _ref[2], rect = _ref[3], topMargin = _ref[4]; - top = rect.top - topMargin; - if (!((delta === -1 && Math.ceil(top) < 0) || (delta === +1 && top > 1))) { - i += delta; - } - top = ((_ref1 = threads[i]) != null ? _ref1.getBoundingClientRect().top : void 0) - topMargin; - return window.scrollBy(0, top); - } - }; - - Redirect = { - image: function(boardID, filename) { - switch (boardID) { - case 'a': - case 'gd': - case 'jp': - case 'm': - case 'q': - case 'tg': - case 'vg': - case 'vp': - case 'vr': - case 'wsg': - return "//archive.foolz.us/" + boardID + "/full_image/" + filename; - case 'u': - return "//nsfw.foolz.us/" + boardID + "/full_image/" + filename; - case 'po': - return "//archive.thedarkcave.org/" + boardID + "/full_image/" + filename; - case 'ck': - case 'fa': - case 'lit': - case 's4s': - return "//fuuka.warosu.org/" + boardID + "/full_image/" + filename; - case 'cgl': - case 'g': - case 'mu': - case 'w': - return "//rbt.asia/" + boardID + "/full_image/" + filename; - case 'an': - case 'k': - case 'toy': - case 'x': - return "http://archive.heinessen.com/" + boardID + "/full_image/" + filename; - case 'c': - return "//archive.nyafuu.org/" + boardID + "/full_image/" + filename; - } - }, - post: function(boardID, postID) { - switch (boardID) { - case 'a': - case 'co': - case 'gd': - case 'jp': - case 'm': - case 'q': - case 'sp': - case 'tg': - case 'tv': - case 'v': - case 'vg': - case 'vp': - case 'vr': - case 'wsg': - return "https://archive.foolz.us/_/api/chan/post/?board=" + boardID + "&num=" + postID; - case 'u': - return "https://nsfw.foolz.us/_/api/chan/post/?board=" + boardID + "&num=" + postID; - case 'c': - case 'int': - case 'out': - case 'po': - return "//archive.thedarkcave.org/_/api/chan/post/?board=" + boardID + "&num=" + postID; - } - }, - to: function(data) { - var boardID; - - boardID = data.boardID; - switch (boardID) { - case 'a': - case 'co': - case 'gd': - case 'jp': - case 'm': - case 'q': - case 'sp': - case 'tg': - case 'tv': - case 'v': - case 'vg': - case 'vp': - case 'vr': - case 'wsg': - return Redirect.path('//archive.foolz.us', 'foolfuuka', data); - case 'u': - return Redirect.path('//nsfw.foolz.us', 'foolfuuka', data); - case 'int': - case 'out': - case 'po': - return Redirect.path('//archive.thedarkcave.org', 'foolfuuka', data); - case 'ck': - case 'fa': - case 'lit': - case 's4s': - return Redirect.path('//fuuka.warosu.org', 'fuuka', data); - case 'diy': - case 'g': - case 'sci': - return Redirect.path('//archive.installgentoo.net', 'fuuka', data); - case 'cgl': - case 'mu': - case 'w': - return Redirect.path('//rbt.asia', 'fuuka', data); - case 'an': - case 'fit': - case 'k': - case 'mlp': - case 'r9k': - case 'toy': - case 'x': - return Redirect.path('http://archive.heinessen.com', 'fuuka', data); - case 'c': - return Redirect.path('//archive.nyafuu.org', 'fuuka', data); - default: - if (data.threadID) { - return "//boards.4chan.org/" + boardID + "/"; - } else { - return ''; - } - } - }, - path: function(base, archiver, data) { - var boardID, path, postID, threadID, type, value; - - if (data.isSearch) { - boardID = data.boardID, type = data.type, value = data.value; - type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; - value = encodeURIComponent(value); - if (archiver === 'foolfuuka') { - return "" + base + "/" + boardID + "/search/" + type + "/" + value; - } else if (type === 'image') { - return "" + base + "/" + boardID + "/?task=search2&search_media_hash=" + value; - } else { - return "" + base + "/" + boardID + "/?task=search2&search_" + type + "=" + value; - } - } - boardID = data.boardID, threadID = data.threadID, postID = data.postID; - path = threadID ? "" + boardID + "/thread/" + threadID : "" + boardID + "/post/" + postID; - if (archiver === 'foolfuuka') { - path += '/'; - } - if (threadID && postID) { - path += archiver === 'foolfuuka' ? "#" + postID : "#p" + postID; - } - return "" + base + "/" + path; - } - }; - - Build = { - spoilerRange: {}, - shortFilename: function(filename, isReply) { - var threshold; - - threshold = isReply ? 30 : 40; - if (filename.length - 4 > threshold) { - return "" + filename.slice(0, threshold - 5) + "(...)." + filename.slice(-3); - } else { - return filename; - } - }, - postFromObject: function(data, boardID) { - var o; - - o = { - postID: data.no, - threadID: data.resto || data.no, - boardID: boardID, - name: data.name, - capcode: data.capcode, - tripcode: data.trip, - uniqueID: data.id, - email: data.email ? encodeURI(data.email.replace(/"/g, '"')) : '', - subject: data.sub, - flagCode: data.country, - flagName: data.country_name, - date: data.now, - dateUTC: data.time, - comment: data.com, - isSticky: !!data.sticky, - isClosed: !!data.closed - }; - if (data.ext || data.filedeleted) { - o.file = { - name: data.filename + data.ext, - timestamp: "" + data.tim + data.ext, - url: "//images.4chan.org/" + boardID + "/src/" + data.tim + data.ext, - height: data.h, - width: data.w, - MD5: data.md5, - size: data.fsize, - turl: "//thumbs.4chan.org/" + boardID + "/thumb/" + data.tim + "s.jpg", - theight: data.tn_h, - twidth: data.tn_w, - isSpoiler: !!data.spoiler, - isDeleted: !!data.filedeleted - }; - } - return Build.post(o); - }, - post: function(o, isArchived) { - /* - This function contains code from 4chan-JS (https://github.com/4chan/4chan-JS). - @license: https://github.com/4chan/4chan-JS/blob/master/LICENSE - */ - - var a, boardID, capcode, capcodeClass, capcodeStart, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref; - - postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, file = o.file; - isOP = postID === threadID; - staticPath = '//static.4chan.org'; - if (email) { - emailStart = ''; - emailEnd = ''; - } else { - emailStart = ''; - emailEnd = ''; - } - subject = "" + (subject || '') + ""; - userID = !capcode && uniqueID ? (" (ID: ") + ("" + uniqueID + ") ") : ''; - switch (capcode) { - case 'admin': - case 'admin_highlight': - capcodeClass = " capcodeAdmin"; - capcodeStart = " ## Admin"; - capcode = (" "; - break; - case 'mod': - capcodeClass = " capcodeMod"; - capcodeStart = " ## Mod"; - capcode = (" "; - break; - case 'developer': - capcodeClass = " capcodeDeveloper"; - capcodeStart = " ## Developer"; - capcode = (" "; - break; - default: - capcodeClass = ''; - capcodeStart = ''; - capcode = ''; - } - flag = flagCode ? ("  + flagCode + ") : ''; - if (file != null ? file.isDeleted : void 0) { - fileHTML = isOP ? ("
") + ("File deleted.") + "
" : ("
") + ("File deleted.") + "
"; - } else if (file) { - ext = file.name.slice(-3); - if (!file.twidth && !file.theight && ext === 'gif') { - file.twidth = file.width; - file.theight = file.height; - } - fileSize = $.bytesToString(file.size); - fileThumb = file.turl; - if (file.isSpoiler) { - fileSize = "Spoiler Image, " + fileSize; - if (!isArchived) { - fileThumb = '//static.4chan.org/image/spoiler'; - if (spoilerRange = Build.spoilerRange[boardID]) { - fileThumb += ("-" + boardID) + Math.floor(1 + spoilerRange * Math.random()); - } - fileThumb += '.png'; - file.twidth = file.theight = 100; - } - } - if (boardID.ID !== 'f') { - imgSrc = ("") + ("" + fileSize + ""); - } - a = $.el('a', { - innerHTML: file.name - }); - filename = a.textContent.replace(/%22/g, '"'); - a.textContent = Build.shortFilename(filename); - shortFilename = a.innerHTML; - a.textContent = filename; - filename = a.innerHTML.replace(/'/g, '''); - fileDims = ext === 'pdf' ? 'PDF' : "" + file.width + "x" + file.height; - fileInfo = ("File: " + file.timestamp + "") + ("-(" + fileSize + ", " + fileDims + (file.isSpoiler ? '' : ", " + shortFilename + "")) + ")"; - fileHTML = "
" + fileInfo + "
" + imgSrc + "
"; - } else { - fileHTML = ''; - } - tripcode = tripcode ? " " + tripcode + "" : ''; - sticky = isSticky ? ' Sticky' : ''; - closed = isClosed ? ' Closed' : ''; - container = $.el('div', { - id: "pc" + postID, - className: "postContainer " + (isOP ? 'op' : 'reply') + "Container", - innerHTML: (isOP ? '' : "
>>
") + ("
") + ("' + (isOP ? fileHTML : '') + ("' + (isOP ? '' : fileHTML) + ("
" + (comment || '') + "
") + '
' - }); - _ref = $$('.quotelink', container); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quote = _ref[_i]; - href = quote.getAttribute('href'); - if (href[0] === '/') { - continue; - } - quote.href = "/" + boardID + "/res/" + href; - } - return container; - } - }; - - Get = { - threadExcerpt: function(thread) { - var OP, excerpt, _ref; - - OP = thread.OP; - excerpt = ((_ref = OP.info.subject) != null ? _ref.trim() : void 0) || OP.info.comment.replace(/\n+/g, ' // ') || Conf['Anonymize'] && 'Anonymous' || $('.nameBlock', OP.nodes.info).textContent.trim(); - return "/" + thread.board + "/ - " + excerpt; - }, - postFromRoot: function(root) { - var boardID, index, link, post, postID; - - link = $('a[title="Highlight this post"]', root); - boardID = link.pathname.split('/')[1]; - postID = link.hash.slice(2); - index = root.dataset.clone; - post = g.posts["" + boardID + "." + postID]; - if (index) { - return post.clones[index]; - } else { - return post; - } - }, - postFromNode: function(root) { - return Get.postFromRoot($.x('ancestor::div[contains(@class,"postContainer")][1]', root)); - }, - contextFromLink: function(quotelink) { - return Get.postFromRoot($.x('ancestor::div[parent::div[@class="thread"]][1]', quotelink)); - }, - postDataFromLink: function(link) { - var boardID, path, postID, threadID; - - if (link.hostname === 'boards.4chan.org') { - path = link.pathname.split('/'); - boardID = path[1]; - threadID = path[3]; - postID = link.hash.slice(2); - } else { - boardID = link.dataset.boardid; - threadID = link.dataset.threadid || 0; - postID = link.dataset.postid; - } - return { - boardID: boardID, - threadID: +threadID, - postID: +postID - }; - }, - allQuotelinksLinkingTo: function(post) { - var ID, quote, quotedPost, quotelinks, quoterPost, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3; - - quotelinks = []; - _ref = g.posts; - for (ID in _ref) { - quoterPost = _ref[ID]; - if (quoterPost.quotes.contains(post.fullID)) { - _ref1 = [quoterPost].concat(quoterPost.clones); - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - quoterPost = _ref1[_i]; - quotelinks.push.apply(quotelinks, quoterPost.nodes.quotelinks); - } - } - } - if (Conf['Quote Backlinks']) { - _ref2 = post.quotes; - for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { - quote = _ref2[_j]; - if (!(quotedPost = g.posts[quote])) { - continue; - } - _ref3 = [quotedPost].concat(quotedPost.clones); - for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { - quotedPost = _ref3[_k]; - quotelinks.push.apply(quotelinks, __slice.call(quotedPost.nodes.backlinks)); - } - } - } - return quotelinks.filter(function(quotelink) { - var boardID, postID, _ref4; - - _ref4 = Get.postDataFromLink(quotelink), boardID = _ref4.boardID, postID = _ref4.postID; - return boardID === post.board.ID && postID === post.ID; - }); - }, - postClone: function(boardID, threadID, postID, root, context) { - var post, url; - - if (post = g.posts["" + boardID + "." + postID]) { - Get.insert(post, root, context); - return; - } - root.textContent = "Loading post No." + postID + "..."; - if (threadID) { - return $.cache("//api.4chan.org/" + boardID + "/res/" + threadID + ".json", function() { - return Get.fetchedPost(this, boardID, threadID, postID, root, context); - }); - } else if (url = Redirect.post(boardID, postID)) { - return $.cache(url, function() { - return Get.archivedPost(this, boardID, postID, root, context); - }); - } - }, - insert: function(post, root, context) { - var clone, nodes; - - if (!root.parentNode) { - return; - } - clone = post.addClone(context); - Main.callbackNodes(Post, [clone]); - nodes = clone.nodes; - $.rmAll(nodes.root); - $.add(nodes.root, nodes.post); - $.rmAll(root); - return $.add(root, nodes.root); - }, - fetchedPost: function(req, boardID, threadID, postID, root, context) { - var board, post, posts, status, thread, url, _i, _len; - - if (post = g.posts["" + boardID + "." + postID]) { - Get.insert(post, root, context); - return; - } - status = req.status; - if (![200, 304].contains(status)) { - if (url = Redirect.post(boardID, postID)) { - $.cache(url, function() { - return Get.archivedPost(this, boardID, postID, root, context); - }); - } else { - $.addClass(root, 'warning'); - root.textContent = status === 404 ? "Thread No." + threadID + " 404'd." : "Error " + req.statusText + " (" + req.status + ")."; - } - return; - } - posts = JSON.parse(req.response).posts; - Build.spoilerRange[boardID] = posts[0].custom_spoiler; - for (_i = 0, _len = posts.length; _i < _len; _i++) { - post = posts[_i]; - if (post.no === postID) { - break; - } - if (post.no > postID) { - if (url = Redirect.post(boardID, postID)) { - $.cache(url, function() { - return Get.archivedPost(this, boardID, postID, root, context); - }); - } else { - $.addClass(root, 'warning'); - root.textContent = "Post No." + postID + " was not found."; - } - return; - } - } - board = g.boards[boardID] || new Board(boardID); - thread = g.threads["" + boardID + "." + threadID] || new Thread(threadID, board); - post = new Post(Build.postFromObject(post, boardID), thread, board); - Main.callbackNodes(Post, [post]); - return Get.insert(post, root, context); - }, - archivedPost: function(req, boardID, postID, root, context) { - var board, bq, comment, data, o, post, thread, threadID, _ref; - - if (post = g.posts["" + boardID + "." + postID]) { - Get.insert(post, root, context); - return; - } - data = JSON.parse(req.response); - if (data.error) { - $.addClass(root, 'warning'); - root.textContent = data.error; - return; - } - bq = $.el('blockquote', { - textContent: data.comment - }); - bq.innerHTML = bq.innerHTML.replace(/\n|\[\/?b\]|\[\/?spoiler\]|\[\/?code\]|\[\/?moot\]|\[\/?banned\]/g, function(text) { - switch (text) { - case '\n': - return '
'; - case '[b]': - return ''; - case '[/b]': - return ''; - case '[spoiler]': - return ''; - case '[/spoiler]': - return ''; - case '[code]': - return '
';
-          case '[/code]':
-            return '
'; - case '[moot]': - return '
'; - case '[/moot]': - return '
'; - case '[banned]': - return ''; - case '[/banned]': - return ''; - } - }); - comment = bq.innerHTML.replace(/(^|>)(>[^<$]*)(<|$)/g, '$1$2$3').replace(/((>){2}(>\/[a-z\d]+\/)?\d+)/g, '$1'); - threadID = data.thread_num; - o = { - postID: "" + postID, - threadID: "" + threadID, - boardID: boardID, - name: data.name_processed, - capcode: (function() { - switch (data.capcode) { - case 'M': - return 'mod'; - case 'A': - return 'admin'; - case 'D': - return 'developer'; - } - })(), - tripcode: data.trip, - uniqueID: data.poster_hash, - email: data.email ? encodeURI(data.email) : '', - subject: data.title_processed, - flagCode: data.poster_country, - flagName: data.poster_country_name_processed, - date: data.fourchan_date, - dateUTC: data.timestamp, - comment: comment - }; - if ((_ref = data.media) != null ? _ref.media_filename : void 0) { - o.file = { - name: data.media.media_filename_processed, - timestamp: data.media.media_orig, - url: data.media.media_link || data.media.remote_media_link, - height: data.media.media_h, - width: data.media.media_w, - MD5: data.media.media_hash, - size: data.media.media_size, - turl: data.media.thumb_link || ("//thumbs.4chan.org/" + boardID + "/thumb/" + data.media.preview_orig), - theight: data.media.preview_h, - twidth: data.media.preview_w, - isSpoiler: data.media.spoiler === '1' - }; - } - board = g.boards[boardID] || new Board(boardID); - thread = g.threads["" + boardID + "." + threadID] || new Thread(threadID, board); - post = new Post(Build.post(o, true), thread, board, { - isArchived: true - }); - Main.callbackNodes(Post, [post]); - return Get.insert(post, root, context); - } - }; - - Quotify = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Resurrect Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Resurrect Quotes', - cb: this.node - }); - }, - node: function() { - var deadlink, _i, _len, _ref; - - _ref = $$('.deadlink', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - deadlink = _ref[_i]; - if (this.isClone) { - if ($.hasClass(deadlink, 'quotelink')) { - this.nodes.quotelinks.push(deadlink); - } - } else { - Quotify.parseDeadlink.call(this, deadlink); - } - } - }, - parseDeadlink: function(deadlink) { - var a, boardID, m, post, postID, quote, quoteID, redirect, _ref; - - if (deadlink.parentNode.className === 'prettyprint') { - $.replace(deadlink, __slice.call(deadlink.childNodes)); - return; - } - quote = deadlink.textContent; - if (!(postID = (_ref = quote.match(/\d+$/)) != null ? _ref[0] : void 0)) { - return; - } - boardID = (m = quote.match(/^>>>\/([a-z\d]+)/)) ? m[1] : this.board.ID; - quoteID = "" + boardID + "." + postID; - if (post = g.posts[quoteID]) { - if (!post.isDead) { - a = $.el('a', { - href: "/" + boardID + "/" + post.thread + "/res/#p" + postID, - className: 'quotelink', - textContent: quote - }); - } else { - a = $.el('a', { - href: "/" + boardID + "/" + post.thread + "/res/#p" + postID, - className: 'quotelink deadlink', - target: '_blank', - textContent: "" + quote + "\u00A0(Dead)" - }); - a.setAttribute('data-boardid', boardID); - a.setAttribute('data-threadid', post.thread.ID); - a.setAttribute('data-postid', postID); - } - } else if (redirect = Redirect.to({ - boardID: boardID, - threadID: 0, - postID: postID - })) { - a = $.el('a', { - href: redirect, - className: 'deadlink', - target: '_blank', - textContent: "" + quote + "\u00A0(Dead)" - }); - if (Redirect.post(boardID, postID)) { - $.addClass(a, 'quotelink'); - a.setAttribute('data-boardid', boardID); - a.setAttribute('data-postid', postID); - } - } - if (__indexOf.call(this.quotes, quoteID) < 0) { - this.quotes.push(quoteID); - } - if (!a) { - deadlink.textContent = "" + quote + "\u00A0(Dead)"; - return; - } - $.replace(deadlink, a); - if ($.hasClass(a, 'quotelink')) { - return this.nodes.quotelinks.push(a); - } - } - }; - - QuoteInline = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Quote Inlining']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Quote Inlining', - cb: this.node - }); - }, - node: function() { - var link, _i, _len, _ref; - - _ref = this.nodes.quotelinks.concat(__slice.call(this.nodes.backlinks)); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - $.on(link, 'click', QuoteInline.toggle); - } - }, - toggle: function(e) { - var boardID, context, postID, threadID, _ref; - - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - e.preventDefault(); - _ref = Get.postDataFromLink(this), boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; - context = Get.contextFromLink(this); - if ($.hasClass(this, 'inlined')) { - QuoteInline.rm(this, boardID, threadID, postID, context); - } else { - if ($.x("ancestor::div[@id='p" + postID + "']", this)) { - return; - } - QuoteInline.add(this, boardID, threadID, postID, context); - } - return this.classList.toggle('inlined'); - }, - findRoot: function(quotelink, isBacklink) { - if (isBacklink) { - return quotelink.parentNode.parentNode; - } else { - return $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink); - } - }, - add: function(quotelink, boardID, threadID, postID, context) { - var inline, isBacklink, post; - - isBacklink = $.hasClass(quotelink, 'backlink'); - inline = $.el('div', { - id: "i" + postID, - className: 'inline' - }); - $.after(QuoteInline.findRoot(quotelink, isBacklink), inline); - Get.postClone(boardID, threadID, postID, inline, context); - if (!((post = g.posts["" + boardID + "." + postID]) && context.thread === post.thread)) { - return; - } - if (isBacklink && Conf['Forward Hiding']) { - $.addClass(post.nodes.root, 'forwarded'); - post.forwarded++ || (post.forwarded = 1); - } - if (!Unread.posts) { - return; - } - return Unread.readSinglePost(post); - }, - rm: function(quotelink, boardID, threadID, postID, context) { - var el, inlined, isBacklink, post, root, _ref; - - isBacklink = $.hasClass(quotelink, 'backlink'); - root = QuoteInline.findRoot(quotelink, isBacklink); - root = $.x("following-sibling::div[@id='i" + postID + "'][1]", root); - $.rm(root); - if (!(el = root.firstElementChild)) { - return; - } - post = g.posts["" + boardID + "." + postID]; - post.rmClone(el.dataset.clone); - if (Conf['Forward Hiding'] && isBacklink && context.thread === g.threads["" + boardID + "." + threadID] && !--post.forwarded) { - delete post.forwarded; - $.rmClass(post.nodes.root, 'forwarded'); - } - while (inlined = $('.inlined', el)) { - _ref = Get.postDataFromLink(inlined), boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; - QuoteInline.rm(inlined, boardID, threadID, postID, context); - $.rmClass(inlined, 'inlined'); - } - } - }; - - QuotePreview = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Quote Previewing']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Quote Previewing', - cb: this.node - }); - }, - node: function() { - var link, _i, _len, _ref; - - _ref = this.nodes.quotelinks.concat(__slice.call(this.nodes.backlinks)); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - $.on(link, 'mouseover', QuotePreview.mouseover); - } - }, - mouseover: function(e) { - var boardID, clone, origin, post, postID, posts, qp, quote, quoterID, threadID, _i, _j, _len, _len1, _ref, _ref1; - - if ($.hasClass(this, 'inlined')) { - return; - } - _ref = Get.postDataFromLink(this), boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; - qp = $.el('div', { - id: 'qp', - className: 'dialog' - }); - $.add(Header.hover, qp); - Get.postClone(boardID, threadID, postID, qp, Get.contextFromLink(this)); - UI.hover({ - root: this, - el: qp, - latestEvent: e, - endEvents: 'mouseout click', - cb: QuotePreview.mouseout, - asapTest: function() { - return qp.firstElementChild; - } - }); - if (!(origin = g.posts["" + boardID + "." + postID])) { - return; - } - if (Conf['Quote Highlighting']) { - posts = [origin].concat(origin.clones); - posts.pop(); - for (_i = 0, _len = posts.length; _i < _len; _i++) { - post = posts[_i]; - $.addClass(post.nodes.post, 'qphl'); - } - } - quoterID = $.x('ancestor::*[@id][1]', this).id.match(/\d+$/)[0]; - clone = Get.postFromRoot(qp.firstChild); - _ref1 = clone.nodes.quotelinks.concat(__slice.call(clone.nodes.backlinks)); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - quote = _ref1[_j]; - if (quote.hash.slice(2) === quoterID) { - $.addClass(quote, 'forwardlink'); - } - } - }, - mouseout: function() { - var clone, post, root, _i, _len, _ref; - - if (!(root = this.el.firstElementChild)) { - return; - } - clone = Get.postFromRoot(root); - post = clone.origin; - post.rmClone(root.dataset.clone); - if (!Conf['Quote Highlighting']) { - return; - } - _ref = [post].concat(post.clones); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - post = _ref[_i]; - $.rmClass(post.nodes.post, 'qphl'); - } - } - }; - - QuoteBacklink = { - init: function() { - var format; - - if (g.VIEW === 'catalog' || !Conf['Quote Backlinks']) { - return; - } - format = Conf['backlink'].replace(/%id/g, "' + id + '"); - this.funk = Function('id', "return '" + format + "'"); - this.containers = {}; - Post.prototype.callbacks.push({ - name: 'Quote Backlinking Part 1', - cb: this.firstNode - }); - return Post.prototype.callbacks.push({ - name: 'Quote Backlinking Part 2', - cb: this.secondNode - }); - }, - firstNode: function() { - var a, clone, container, containers, link, post, quote, _i, _j, _k, _len, _len1, _len2, _ref, _ref1; - - if (this.isClone || !this.quotes.length) { - return; - } - a = $.el('a', { - href: "/" + this.board + "/res/" + this.thread + "#p" + this, - className: this.isHidden ? 'filtered backlink' : 'backlink', - textContent: (QuoteBacklink.funk(this.ID)) + (Conf['Mark Quotes of You'] && this.info.yours ? QuoteYou.text : '') - }); - _ref = this.quotes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quote = _ref[_i]; - containers = [QuoteBacklink.getContainer(quote)]; - if ((post = g.posts[quote]) && post.nodes.backlinkContainer) { - _ref1 = post.clones; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - clone = _ref1[_j]; - containers.push(clone.nodes.backlinkContainer); - } - } - for (_k = 0, _len2 = containers.length; _k < _len2; _k++) { - container = containers[_k]; - link = a.cloneNode(true); - if (Conf['Quote Previewing']) { - $.on(link, 'mouseover', QuotePreview.mouseover); - } - if (Conf['Quote Inlining']) { - $.on(link, 'click', QuoteInline.toggle); - } - $.add(container, [$.tn(' '), link]); - } - } - }, - secondNode: function() { - var container; - - if (this.isClone && (this.origin.isReply || Conf['OP Backlinks'])) { - this.nodes.backlinkContainer = $('.container', this.nodes.info); - return; - } - if (!(this.isReply || Conf['OP Backlinks'])) { - return; - } - container = QuoteBacklink.getContainer(this.fullID); - this.nodes.backlinkContainer = container; - return $.add(this.nodes.info, container); - }, - getContainer: function(id) { - var _base; - - return (_base = this.containers)[id] || (_base[id] = $.el('span', { - className: 'container' - })); - } - }; - - QuoteYou = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Mark Quotes of You'] || !Conf['Quick Reply']) { - return; - } - this.text = '\u00A0(You)'; - return Post.prototype.callbacks.push({ - name: 'Mark Quotes of You', - cb: this.node - }); - }, - node: function() { - var quotelink, quotelinks, quotes, _i, _len; - - if (this.isClone) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { - quotelink = quotelinks[_i]; - if (QR.db.get(Get.postDataFromLink(quotelink))) { - $.add(quotelink, $.tn(QuoteYou.text)); - } - } - } - }; - - QuoteOP = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Mark OP Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(OP)'; - return Post.prototype.callbacks.push({ - name: 'Mark OP Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, op, postID, quotelink, quotelinks, quotes, _i, _j, _len, _len1, _ref; - - if (this.isClone && this.thread === this.context.thread) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - if (this.isClone && quotes.contains(this.thread.fullID)) { - for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { - quotelink = quotelinks[_i]; - quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); - } - } - op = (this.isClone ? this.context : this).thread.fullID; - if (!quotes.contains(op)) { - return; - } - for (_j = 0, _len1 = quotelinks.length; _j < _len1; _j++) { - quotelink = quotelinks[_j]; - _ref = Get.postDataFromLink(quotelink), boardID = _ref.boardID, postID = _ref.postID; - if (("" + boardID + "." + postID) === op) { - $.add(quotelink, $.tn(QuoteOP.text)); - } - } - } - }; - - QuoteCT = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Mark Cross-thread Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(Cross-thread)'; - return Post.prototype.callbacks.push({ - name: 'Mark Cross-thread Quotes', - cb: this.node - }); - }, - node: function() { - var board, boardID, quotelink, quotelinks, quotes, thread, threadID, _i, _len, _ref, _ref1; - - if (this.isClone && this.thread === this.context.thread) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - _ref = this.isClone ? this.context : this, board = _ref.board, thread = _ref.thread; - for (_i = 0, _len = quotelinks.length; _i < _len; _i++) { - quotelink = quotelinks[_i]; - _ref1 = Get.postDataFromLink(quotelink), boardID = _ref1.boardID, threadID = _ref1.threadID; - if (!threadID) { - continue; - } - if (this.isClone) { - quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); - } - if (boardID === this.board.ID && threadID !== thread.ID) { - $.add(quotelink, $.tn(QuoteCT.text)); - } - } - } - }; - - Anonymize = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Anonymize']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Anonymize', - cb: this.node - }); - }, - node: function() { - var email, name, tripcode, _ref; - - if (this.info.capcode || this.isClone) { - return; - } - _ref = this.nodes, name = _ref.name, tripcode = _ref.tripcode, email = _ref.email; - if (this.info.name !== 'Anonymous') { - name.textContent = 'Anonymous'; - } - if (tripcode) { - $.rm(tripcode); - delete this.nodes.tripcode; - } - if (this.info.email) { - if (/sage/i.test(this.info.email)) { - return email.href = 'mailto:sage'; - } else { - $.replace(email, name); - return delete this.nodes.email; - } - } - } - }; - - Time = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Time Formatting']) { - return; - } - this.funk = this.createFunc(Conf['time']); - return Post.prototype.callbacks.push({ - name: 'Time Formatting', - cb: this.node - }); - }, - node: function() { - if (this.isClone) { - return; - } - return this.nodes.date.textContent = Time.funk(Time, this.info.date); - }, - createFunc: function(format) { - var code; - - code = format.replace(/%([A-Za-z])/g, function(s, c) { - if (c in Time.formatters) { - return "' + Time.formatters." + c + ".call(date) + '"; - } else { - return s; - } - }); - return Function('Time', 'date', "return '" + code + "'"); - }, - day: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - zeroPad: function(n) { - if (n < 10) { - return "0" + n; - } else { - return n; - } - }, - formatters: { - a: function() { - return Time.day[this.getDay()].slice(0, 3); - }, - A: function() { - return Time.day[this.getDay()]; - }, - b: function() { - return Time.month[this.getMonth()].slice(0, 3); - }, - B: function() { - return Time.month[this.getMonth()]; - }, - d: function() { - return Time.zeroPad(this.getDate()); - }, - e: function() { - return this.getDate(); - }, - H: function() { - return Time.zeroPad(this.getHours()); - }, - I: function() { - return Time.zeroPad(this.getHours() % 12 || 12); - }, - k: function() { - return this.getHours(); - }, - l: function() { - return this.getHours() % 12 || 12; - }, - m: function() { - return Time.zeroPad(this.getMonth() + 1); - }, - M: function() { - return Time.zeroPad(this.getMinutes()); - }, - p: function() { - if (this.getHours() < 12) { - return 'AM'; - } else { - return 'PM'; - } - }, - P: function() { - if (this.getHours() < 12) { - return 'am'; - } else { - return 'pm'; - } - }, - S: function() { - return Time.zeroPad(this.getSeconds()); - }, - y: function() { - return this.getFullYear() - 2000; - } - } - }; - - RelativeDates = { - INTERVAL: $.MINUTE / 2, - init: function() { - if (g.VIEW === 'catalog' || !Conf['Relative Post Dates']) { - return; - } - $.on(d, 'visibilitychange ThreadUpdate', this.flush); - this.flush(); - return Post.prototype.callbacks.push({ - name: 'Relative Post Dates', - cb: this.node - }); - }, - node: function() { - var dateEl; - - if (this.isClone) { - return; - } - dateEl = this.nodes.date; - dateEl.title = dateEl.textContent; - return RelativeDates.setUpdate(this); - }, - relative: function(diff, now, date) { - var days, months, number, rounded, unit, years; - - unit = (number = diff / $.DAY) >= 1 ? (years = now.getYear() - date.getYear(), months = now.getMonth() - date.getMonth(), days = now.getDate() - date.getDate(), years > 1 ? (number = years - (months < 0 || months === 0 && days < 0), 'year') : years === 1 && (months > 0 || months === 0 && days >= 0) ? (number = years, 'year') : (months = (months + 12) % 12) > 1 ? (number = months - (days < 0), 'month') : months === 1 && days >= 0 ? (number = months, 'month') : 'day') : (number = diff / $.HOUR) >= 1 ? 'hour' : (number = diff / $.MINUTE) >= 1 ? 'minute' : (number = Math.max(0, diff) / $.SECOND, 'second'); - rounded = Math.round(number); - if (rounded !== 1) { - unit += 's'; - } - return "" + rounded + " " + unit + " ago"; - }, - stale: [], - flush: function() { - var now, update, _i, _len, _ref; - - if (d.hidden) { - return; - } - now = new Date(); - _ref = RelativeDates.stale; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - update = _ref[_i]; - update(now); - } - RelativeDates.stale = []; - clearTimeout(RelativeDates.timeout); - return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); - }, - setUpdate: function(post) { - var markStale, setOwnTimeout, update; - - setOwnTimeout = function(diff) { - var delay; - - delay = diff < $.MINUTE ? $.SECOND - (diff + $.SECOND / 2) % $.SECOND : diff < $.HOUR ? $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE : diff < $.DAY ? $.HOUR - (diff + $.HOUR / 2) % $.HOUR : $.DAY - (diff + $.DAY / 2) % $.DAY; - return setTimeout(markStale, delay); - }; - update = function(now) { - var date, diff, relative, singlePost, _i, _len, _ref; - - date = post.info.date; - diff = now - date; - relative = RelativeDates.relative(diff, now, date); - _ref = [post].concat(post.clones); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - singlePost = _ref[_i]; - singlePost.nodes.date.firstChild.textContent = relative; - } - return setOwnTimeout(diff); - }; - markStale = function() { - return RelativeDates.stale.push(update); - }; - return update(new Date()); - } - }; - - FileInfo = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['File Info Formatting']) { - return; - } - this.funk = this.createFunc(Conf['fileInfo']); - return Post.prototype.callbacks.push({ - name: 'File Info Formatting', - cb: this.node - }); - }, - node: function() { - if (!this.file || this.isClone) { - return; - } - return this.file.text.innerHTML = FileInfo.funk(FileInfo, this); - }, - createFunc: function(format) { - var code; - - code = format.replace(/%(.)/g, function(s, c) { - if (c in FileInfo.formatters) { - return "' + FileInfo.formatters." + c + ".call(post) + '"; - } else { - return s; - } - }); - return Function('FileInfo', 'post', "return '" + code + "'"); - }, - convertUnit: function(size, unit) { - var i; - - if (unit === 'B') { - return "" + (size.toFixed()) + " Bytes"; - } - i = 1 + ['KB', 'MB'].indexOf(unit); - while (i--) { - size /= 1024; - } - size = unit === 'MB' ? Math.round(size * 100) / 100 : size.toFixed(); - return "" + size + " " + unit; - }, - escape: function(name) { - return name.replace(/<|>/g, function(c) { - return c === '<' && '<' || '>'; - }); - }, - formatters: { - t: function() { - return this.file.URL.match(/\d+\..+$/)[0]; - }, - T: function() { - return "" + (FileInfo.formatters.t.call(this)) + ""; - }, - l: function() { - return "" + (FileInfo.formatters.n.call(this)) + ""; - }, - L: function() { - return "" + (FileInfo.formatters.N.call(this)) + ""; - }, - n: function() { - var fullname, shortname; - - fullname = this.file.name; - shortname = Build.shortFilename(this.file.name, this.isReply); - if (fullname === shortname) { - return FileInfo.escape(fullname); - } else { - return "" + (FileInfo.escape(shortname)) + "" + (FileInfo.escape(fullname)) + ""; - } - }, - N: function() { - return FileInfo.escape(this.file.name); - }, - p: function() { - if (this.file.isSpoiler) { - return 'Spoiler, '; - } else { - return ''; - } - }, - s: function() { - return this.file.size; - }, - B: function() { - return FileInfo.convertUnit(this.file.sizeInBytes, 'B'); - }, - K: function() { - return FileInfo.convertUnit(this.file.sizeInBytes, 'KB'); - }, - M: function() { - return FileInfo.convertUnit(this.file.sizeInBytes, 'MB'); - }, - r: function() { - if (this.file.isImage) { - return this.file.dimensions; - } else { - return 'PDF'; - } - } - } - }; - - Sauce = { - init: function() { - var link, links, _i, _len, _ref; - - if (g.VIEW === 'catalog' || !Conf['Sauce']) { - return; - } - links = []; - _ref = Conf['sauces'].split('\n'); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - if (link[0] === '#') { - continue; - } - links.push(this.createSauceLink(link.trim())); - } - if (!links.length) { - return; - } - this.links = links; - this.link = $.el('a', { - target: '_blank' - }); - return Post.prototype.callbacks.push({ - name: 'Sauce', - cb: this.node - }); - }, - createSauceLink: function(link) { - var m, text; - - link = link.replace(/%(T?URL|MD5|board)/ig, function(parameter) { - switch (parameter) { - case '%TURL': - return "' + encodeURIComponent(post.file.thumbURL) + '"; - case '%URL': - return "' + encodeURIComponent(post.file.URL) + '"; - case '%MD5': - return "' + encodeURIComponent(post.file.MD5) + '"; - case '%board': - return "' + encodeURIComponent(post.board) + '"; - default: - return parameter; - } - }); - text = (m = link.match(/;text:(.+)$/)) ? m[1] : link.match(/(\w+)\.\w+\//)[1]; - link = link.replace(/;text:.+$/, ''); - return Function('post', 'a', "a.href = '" + link + "';\na.textContent = '" + text + "';\nreturn a;"); - }, - node: function() { - var link, nodes, _i, _len, _ref; - - if (this.isClone || !this.file) { - return; - } - nodes = []; - _ref = Sauce.links; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - link = _ref[_i]; - nodes.push($.tn('\u00A0'), link(this, Sauce.link.cloneNode(true))); - } - return $.add(this.file.info, nodes); - } - }; - - ImageExpand = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Image Expansion']) { - return; - } - this.EAI = $.el('a', { - className: 'expand-all-shortcut', - textContent: 'EAI', - title: 'Expand All Images', - href: 'javascript:;' - }); - $.on(this.EAI, 'click', ImageExpand.cb.toggleAll); - Header.addShortcut(this.EAI); - return Post.prototype.callbacks.push({ - name: 'Image Expansion', - cb: this.node - }); - }, - node: function() { - var thumb, _ref; - - if (!((_ref = this.file) != null ? _ref.isImage : void 0)) { - return; - } - thumb = this.file.thumb; - $.on(thumb.parentNode, 'click', ImageExpand.cb.toggle); - if (this.isClone && $.hasClass(thumb, 'expanding')) { - ImageExpand.contract(this); - ImageExpand.expand(this); - return; - } - if (ImageExpand.on && !this.isHidden) { - return ImageExpand.expand(this); - } - }, - cb: { - toggle: function(e) { - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - e.preventDefault(); - return ImageExpand.toggle(Get.postFromNode(this)); - }, - toggleAll: function() { - var ID, file, func, post, _i, _len, _ref, _ref1; - - $.event('CloseMenu'); - if (ImageExpand.on = $.hasClass(ImageExpand.EAI, 'expand-all-shortcut')) { - ImageExpand.EAI.className = 'contract-all-shortcut'; - ImageExpand.EAI.title = 'Contract All Images'; - func = ImageExpand.expand; - } else { - ImageExpand.EAI.className = 'expand-all-shortcut'; - ImageExpand.EAI.title = 'Expand All Images'; - func = ImageExpand.contract; - } - _ref = g.posts; - for (ID in _ref) { - post = _ref[ID]; - _ref1 = [post].concat(post.clones); - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - post = _ref1[_i]; - file = post.file; - if (!(file && file.isImage && doc.contains(post.nodes.root))) { - continue; - } - if (ImageExpand.on && (!Conf['Expand spoilers'] && file.isSpoiler || Conf['Expand from here'] && file.thumb.getBoundingClientRect().top < 0)) { - continue; - } - $.queueTask(func, post); - } - } - }, - setFitness: function() { - var checked; - - checked = this.checked; - (checked ? $.addClass : $.rmClass)(doc, this.name.toLowerCase().replace(/\s+/g, '-')); - if (this.name !== 'Fit height') { - return; - } - if (checked) { - $.on(window, 'resize', ImageExpand.resize); - if (!ImageExpand.style) { - ImageExpand.style = $.addStyle(null); - } - return ImageExpand.resize(); - } else { - return $.off(window, 'resize', ImageExpand.resize); - } - } - }, - toggle: function(post) { - var headRect, rect, root, thumb, top; - - thumb = post.file.thumb; - if (!(post.file.isExpanded || $.hasClass(thumb, 'expanding'))) { - ImageExpand.expand(post); - return; - } - ImageExpand.contract(post); - rect = post.nodes.root.getBoundingClientRect(); - if (!(rect.top <= 0 || rect.left <= 0)) { - return; - } - headRect = Header.bar.getBoundingClientRect(); - top = rect.top - headRect.top - headRect.height; - root = doc; - if (rect.top < 0) { - root.scrollTop += top; - } - if (rect.left < 0) { - return root.scrollLeft = 0; - } - }, - contract: function(post) { - $.rmClass(post.nodes.root, 'expanded-image'); - $.rmClass(post.file.thumb, 'expanding'); - return post.file.isExpanded = false; - }, - expand: function(post, src) { - var img, thumb; - - thumb = post.file.thumb; - if (post.isHidden || post.file.isExpanded || $.hasClass(thumb, 'expanding')) { - return; - } - $.addClass(thumb, 'expanding'); - if (post.file.fullImage) { - $.asap((function() { - return post.file.fullImage.naturalHeight; - }), function() { - return ImageExpand.completeExpand(post); - }); - return; - } - post.file.fullImage = img = $.el('img', { - className: 'full-image', - src: src || post.file.URL - }); - $.on(img, 'error', ImageExpand.error); - $.asap((function() { - return post.file.fullImage.naturalHeight; - }), function() { - return ImageExpand.completeExpand(post); - }); - return $.after(thumb, img); - }, - completeExpand: function(post) { - var prev, thumb; - - thumb = post.file.thumb; - if (!$.hasClass(thumb, 'expanding')) { - return; - } - post.file.isExpanded = true; - if (!post.nodes.root.parentNode) { - $.addClass(post.nodes.root, 'expanded-image'); - $.rmClass(post.file.thumb, 'expanding'); - return; - } - prev = post.nodes.root.getBoundingClientRect(); - return $.queueTask(function() { - var curr, root; - - $.addClass(post.nodes.root, 'expanded-image'); - $.rmClass(post.file.thumb, 'expanding'); - if (!(prev.top + prev.height <= 0)) { - return; - } - root = doc; - curr = post.nodes.root.getBoundingClientRect(); - return root.scrollTop += curr.height - prev.height + curr.top - prev.top; - }); - }, - error: function() { - var URL, post, src, timeoutID; - - post = Get.postFromNode(this); - $.rm(this); - delete post.file.fullImage; - if (!($.hasClass(post.file.thumb, 'expanding') || $.hasClass(post.nodes.root, 'expanded-image'))) { - return; - } - ImageExpand.contract(post); - src = this.src.split('/'); - if (src[2] === 'images.4chan.org') { - if (URL = Redirect.image(src[3], src[5])) { - setTimeout(ImageExpand.expand, 10000, post, URL); - return; - } - if (g.DEAD || post.isDead || post.file.isDead) { - return; - } - } - timeoutID = setTimeout(ImageExpand.expand, 10000, post); - return $.ajax("//api.4chan.org/" + post.board + "/res/" + post.thread + ".json", { - onload: function() { - var postObj, _i, _len, _ref; - - if (this.status !== 200) { - return; - } - _ref = JSON.parse(this.response).posts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - postObj = _ref[_i]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - clearTimeout(timeoutID); - return post.kill(); - } else if (postObj.filedeleted) { - clearTimeout(timeoutID); - return post.kill(true); - } - } - }); - }, - menu: { - init: function() { - var conf, createSubEntry, el, key, subEntries, _ref; - - if (g.VIEW === 'catalog' || !Conf['Image Expansion']) { - return; - } - el = $.el('span', { - textContent: 'Image Expansion', - className: 'image-expansion-link' - }); - createSubEntry = ImageExpand.menu.createSubEntry; - subEntries = []; - _ref = Config.imageExpansion; - for (key in _ref) { - conf = _ref[key]; - subEntries.push(createSubEntry(key, conf)); - } - return $.event('AddMenuEntry', { - type: 'header', - el: el, - order: 80, - subEntries: subEntries - }); - }, - createSubEntry: function(type, config) { - var input, label; - - label = $.el('label', { - innerHTML: " " + type - }); - input = label.firstElementChild; - if (type === 'Fit width' || type === 'Fit height') { - $.on(input, 'change', ImageExpand.cb.setFitness); - } - if (config) { - label.title = config[1]; - input.checked = Conf[type]; - $.event('change', null, input); - $.on(input, 'change', $.cb.checked); - } - return { - el: label - }; - } - }, - resize: function() { - return ImageExpand.style.textContent = ":root.fit-height .full-image {max-height:" + doc.clientHeight + "px}"; - }, - menuToggle: function(e) { - return ImageExpand.opmenu.toggle(e, this, g); - } - }; - - RevealSpoilers = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Reveal Spoilers']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Reveal Spoilers', - cb: this.node - }); - }, - node: function() { - var thumb, _ref; - - if (this.isClone || !((_ref = this.file) != null ? _ref.isSpoiler : void 0)) { - return; - } - thumb = this.file.thumb; - thumb.removeAttribute('style'); - return thumb.src = this.file.thumbURL; - } - }; - - ImageReplace = { - init: function() { - if (g.VIEW === 'catalog') { - return; - } - return Post.prototype.callbacks.push({ - name: 'Image Replace', - cb: this.node - }); - }, - node: function() { - var URL, img, style, thumb, type, _ref, _ref1; - - if (this.isClone || this.isHidden || this.thread.isHidden || !((_ref = this.file) != null ? _ref.isImage : void 0)) { - return; - } - _ref1 = this.file, thumb = _ref1.thumb, URL = _ref1.URL; - if (!(Conf["Replace " + ((type = (URL.match(/\w{3}$/))[0].toUpperCase()) === 'PEG' ? 'JPG' : type)] && !/spoiler/.test(thumb.src))) { - return; - } - if (this.file.isSpoiler) { - style = thumb.style; - style.maxHeight = style.maxWidth = this.isReply ? '125px' : '250px'; - } - img = $.el('img'); - $.on(img, 'load', function() { - return thumb.src = URL; - }); - return img.src = URL; - } - }; - - ImageHover = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Image Hover']) { - return; - } - return Post.prototype.callbacks.push({ - name: 'Image Hover', - cb: this.node - }); - }, - node: function() { - var _ref; - - if (!((_ref = this.file) != null ? _ref.isImage : void 0)) { - return; - } - return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover); - }, - mouseover: function(e) { - var el, post; - - post = Get.postFromNode(this); - el = $.el('img', { - id: 'ihover', - src: post.file.URL - }); - el.setAttribute('data-fullid', post.fullID); - $.add(Header.hover, el); - UI.hover({ - root: this, - el: el, - latestEvent: e, - endEvents: 'mouseout click', - asapTest: function() { - return el.naturalHeight; - } - }); - return $.on(el, 'error', ImageHover.error); - }, - error: function() { - var URL, post, src, timeoutID, - _this = this; - - if (!doc.contains(this)) { - return; - } - post = g.posts[this.dataset.fullid]; - src = this.src.split('/'); - if (src[2] === 'images.4chan.org') { - if (URL = Redirect.image(src[3], src[5].replace(/\?.+$/, ''))) { - this.src = URL; - return; - } - if (g.DEAD || post.isDead || post.file.isDead) { - return; - } - } - timeoutID = setTimeout((function() { - return _this.src = post.file.URL + '?' + Date.now(); - }), 3000); - return $.ajax("//api.4chan.org/" + post.board + "/res/" + post.thread + ".json", { - onload: function() { - var postObj, _i, _len, _ref; - - if (this.status !== 200) { - return; - } - _ref = JSON.parse(this.response).posts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - postObj = _ref[_i]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - clearTimeout(timeoutID); - return post.kill(); - } else if (postObj.filedeleted) { - clearTimeout(timeoutID); - return post.kill(true); - } - } - }); - } - }; - - ExpandComment = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Comment Expansion']) { - return; - } - if (g.BOARD.ID === 'g') { - this.callbacks.push(Fourchan.code); - } - if (g.BOARD.ID === 'sci') { - this.callbacks.push(Fourchan.math); - } - return Post.prototype.callbacks.push({ - name: 'Comment Expansion', - cb: this.node - }); - }, - node: function() { - var a; - - if (a = $('.abbr > a', this.nodes.comment)) { - return $.on(a, 'click', ExpandComment.cb); - } - }, - callbacks: [], - cb: function(e) { - var post; - - e.preventDefault(); - post = Get.postFromNode(this); - return ExpandComment.expand(post); - }, - expand: function(post) { - var a; - - if (post.nodes.longComment && !post.nodes.longComment.parentNode) { - $.replace(post.nodes.shortComment, post.nodes.longComment); - post.nodes.comment = post.nodes.longComment; - return; - } - if (!(a = $('.abbr > a', post.nodes.comment))) { - return; - } - a.textContent = "Post No." + post + " Loading..."; - return $.cache("//api.4chan.org" + a.pathname + ".json", function() { - return ExpandComment.parse(this, a, post); - }); - }, - contract: function(post) { - var a; - - if (!post.nodes.shortComment) { - return; - } - a = $('.abbr > a', post.nodes.shortComment); - a.textContent = 'here'; - $.replace(post.nodes.longComment, post.nodes.shortComment); - return post.nodes.comment = post.nodes.shortComment; - }, - parse: function(req, a, post) { - var callback, clone, comment, href, postObj, posts, quote, spoilerRange, status, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _results; - - status = req.status; - if (![200, 304].contains(status)) { - a.textContent = "Error " + req.statusText + " (" + status + ")"; - return; - } - posts = JSON.parse(req.response).posts; - if (spoilerRange = posts[0].custom_spoiler) { - Build.spoilerRange[g.BOARD] = spoilerRange; - } - for (_i = 0, _len = posts.length; _i < _len; _i++) { - postObj = posts[_i]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - a.textContent = "Post No." + post + " not found."; - return; - } - comment = post.nodes.comment; - clone = comment.cloneNode(false); - clone.innerHTML = postObj.com; - _ref = $$('.quotelink', clone); - for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { - quote = _ref[_j]; - href = quote.getAttribute('href'); - if (href[0] === '/') { - continue; - } - quote.href = "/" + post.board + "/res/" + href; - } - post.nodes.shortComment = comment; - $.replace(comment, clone); - post.nodes.comment = post.nodes.longComment = clone; - post.parseComment(); - post.parseQuotes(); - _ref1 = ExpandComment.callbacks; - _results = []; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - callback = _ref1[_k]; - _results.push(callback.call(post)); - } - return _results; - } - }; - - ExpandThread = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Expansion']) { - return; - } - return Thread.prototype.callbacks.push({ - name: 'Thread Expansion', - cb: this.node - }); - }, - node: function() { - var a, span; - - if (!(span = $('.summary', this.OP.nodes.root.parentNode))) { - return; - } - a = $.el('a', { - textContent: "+ " + span.textContent, - className: 'summary', - href: 'javascript:;' - }); - $.on(a, 'click', ExpandThread.cbToggle); - return $.replace(span, a); - }, - cbToggle: function() { - var op; - - op = Get.postFromRoot(this.previousElementSibling); - return ExpandThread.toggle(op.thread); - }, - toggle: function(thread) { - var a, inlined, num, post, replies, reply, threadRoot, _i, _j, _k, _len, _len1, _len2, _ref, _ref1; - - threadRoot = thread.OP.nodes.root.parentNode; - a = $('.summary', threadRoot); - switch (thread.isExpanded) { - case false: - case void 0: - thread.isExpanded = 'loading'; - _ref = $$('.thread > .postContainer', threadRoot); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - post = _ref[_i]; - ExpandComment.expand(Get.postFromRoot(post)); - } - if (!a) { - thread.isExpanded = true; - return; - } - thread.isExpanded = 'loading'; - a.textContent = a.textContent.replace('+', '× Loading...'); - $.cache("//api.4chan.org/" + thread.board + "/res/" + thread + ".json", function() { - return ExpandThread.parse(this, thread, a); - }); - break; - case 'loading': - thread.isExpanded = false; - if (!a) { - return; - } - a.textContent = a.textContent.replace('× Loading...', '+'); - break; - case true: - thread.isExpanded = false; - if (a) { - a.textContent = a.textContent.replace('-', '+'); - num = (function() { - if (thread.isSticky) { - return 1; - } else { - switch (g.BOARD.ID) { - case 'b': - case 'vg': - case 'q': - return 3; - case 't': - return 1; - default: - return 5; - } - } - })(); - replies = $$('.thread > .replyContainer', threadRoot).slice(0, -num); - for (_j = 0, _len1 = replies.length; _j < _len1; _j++) { - reply = replies[_j]; - if (Conf['Quote Inlining']) { - while (inlined = $('.inlined', reply)) { - inlined.click(); - } - } - $.rm(reply); - } - } - _ref1 = $$('.thread > .postContainer', threadRoot); - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - post = _ref1[_k]; - ExpandComment.contract(Get.postFromRoot(post)); - } - } - }, - parse: function(req, thread, a) { - var link, node, nodes, post, posts, replies, reply, spoilerRange, status, _i, _len; - - if (a.textContent[0] === '+') { - return; - } - status = req.status; - if (![200, 304].contains(status)) { - a.textContent = "Error " + req.statusText + " (" + status + ")"; - $.off(a, 'click', ExpandThread.cb.toggle); - return; - } - thread.isExpanded = true; - a.textContent = a.textContent.replace('× Loading...', '-'); - posts = JSON.parse(req.response).posts; - if (spoilerRange = posts[0].custom_spoiler) { - Build.spoilerRange[g.BOARD] = spoilerRange; - } - replies = posts.slice(1); - posts = []; - nodes = []; - for (_i = 0, _len = replies.length; _i < _len; _i++) { - reply = replies[_i]; - if (post = thread.posts[reply.no]) { - nodes.push(post.nodes.root); - continue; - } - node = Build.postFromObject(reply, thread.board); - post = new Post(node, thread, thread.board); - link = $('a[title="Highlight this post"]', node); - link.href = "res/" + thread + "#p" + post; - link.nextSibling.href = "res/" + thread + "#q" + post; - posts.push(post); - nodes.push(node); - } - Main.callbackNodes(Post, posts); - $.after(a, nodes); - if (Conf['Enable 4chan\'s Extension']) { - return $.globalEval("Parser.parseThread(" + thread.ID + ", 1, " + nodes.length + ")"); - } else { - return Fourchan.parseThread(thread.ID, 1, nodes.length); - } - } - }; - - ThreadExcerpt = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { - return; - } - return Thread.prototype.callbacks.push({ - name: 'Thread Excerpt', - cb: this.node - }); - }, - node: function() { - var excerpt; - - return d.title = (excerpt = Get.threadExcerpt(this)).length > 80 ? "" + excerpt.slice(0, 77) + "..." : excerpt; - } - }; - - Unread = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Tab Icon']) { - return; - } - this.db = new DataBoard('lastReadPosts', this.sync); - this.hr = $.el('hr', { - id: 'unread-line' - }); - this.posts = []; - this.postsQuotingYou = []; - return Thread.prototype.callbacks.push({ - name: 'Unread', - cb: this.node - }); - }, - node: function() { - var ID, hash, post, posts, root, _ref; - - Unread.thread = this; - Unread.title = d.title; - posts = []; - _ref = this.posts; - for (ID in _ref) { - post = _ref[ID]; - if (post.isReply) { - posts.push(post); - } - } - Unread.lastReadPost = Unread.db.get({ - boardID: this.board.ID, - threadID: this.ID, - defaultValue: 0 - }); - Unread.addPosts(posts); - $.on(d, 'ThreadUpdate', Unread.onUpdate); - $.on(d, 'scroll visibilitychange', Unread.read); - if (Conf['Unread Line']) { - $.on(d, 'visibilitychange', Unread.setLine); - } - if (!Conf['Scroll to Last Read Post']) { - return; - } - if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { - return; - } - if (Unread.posts.length) { - while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { - if (!(Get.postFromRoot(root)).isHidden) { - break; - } - } - return root.scrollIntoView(false); - } else if (posts.length) { - return Header.scrollToPost(posts[posts.length - 1].nodes.root); - } - }, - sync: function() { - var lastReadPost; - - lastReadPost = Unread.db.get({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - defaultValue: 0 - }); - if (!(Unread.lastReadPost < lastReadPost)) { - return; - } - Unread.lastReadPost = lastReadPost; - Unread.readArray(Unread.posts); - Unread.readArray(Unread.postsQuotingYou); - Unread.setLine(); - return Unread.update(); - }, - addPosts: function(newPosts) { - var ID, data, post, _i, _len; - - for (_i = 0, _len = newPosts.length; _i < _len; _i++) { - post = newPosts[_i]; - ID = post.ID; - if (ID <= Unread.lastReadPost || post.isHidden) { - continue; - } - if (QR.db) { - data = { - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }; - if (QR.db.get(data)) { - continue; - } - } - Unread.posts.push(post); - Unread.addPostQuotingYou(post); - } - if (Conf['Unread Line']) { - Unread.setLine(newPosts.contains(Unread.posts[0])); - } - Unread.read(); - return Unread.update(); - }, - addPostQuotingYou: function(post) { - var quotelink, _i, _len, _ref; - - if (!QR.db) { - return; - } - _ref = post.nodes.quotelinks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - if (QR.db.get(Get.postDataFromLink(quotelink))) { - Unread.postsQuotingYou.push(post); - } - } - }, - onUpdate: function(e) { - if (e.detail[404]) { - return Unread.update(); - } else { - return Unread.addPosts(e.detail.newPosts); - } - }, - readSinglePost: function(post) { - var i; - - if ((i = Unread.posts.indexOf(post)) === -1) { - return; - } - Unread.posts.splice(i, 1); - if (i === 0) { - Unread.lastReadPost = post.ID; - Unread.saveLastReadPost(); - } - if ((i = Unread.postsQuotingYou.indexOf(post)) !== -1) { - Unread.postsQuotingYou.splice(i, 1); - } - return Unread.update(); - }, - readArray: function(arr) { - var i, post, _i, _len; - - for (i = _i = 0, _len = arr.length; _i < _len; i = ++_i) { - post = arr[i]; - if (post.ID > Unread.lastReadPost) { - break; - } - } - return arr.splice(0, i); - }, - read: function(e) { - var bottom, height, i, post, _i, _len, _ref; - - if (d.hidden || !Unread.posts.length) { - return; - } - height = doc.clientHeight; - _ref = Unread.posts; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - post = _ref[i]; - bottom = post.nodes.root.getBoundingClientRect().bottom; - if (bottom > height) { - break; - } - } - if (!i) { - return; - } - Unread.lastReadPost = Unread.posts[i - 1].ID; - Unread.saveLastReadPost(); - Unread.posts.splice(0, i); - Unread.readArray(Unread.postsQuotingYou); - if (e) { - return Unread.update(); - } - }, - saveLastReadPost: $.debounce(2 * $.SECOND, function() { - return Unread.db.set({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - val: Unread.lastReadPost - }); - }), - setLine: function(force) { - var post, root; - - if (!(d.hidden || force === true)) { - return; - } - if (post = Unread.posts[0]) { - root = post.nodes.root; - if (root !== $('.thread > .replyContainer', root.parentNode)) { - return $.before(root, Unread.hr); - } - } else { - return $.rm(Unread.hr); - } - }, - update: function() { - var count; - - count = Unread.posts.length; - if (Conf['Unread Count']) { - d.title = g.DEAD ? "(" + Unread.posts.length + ") /" + g.BOARD + "/ - 404" : "(" + Unread.posts.length + ") " + Unread.title; - } - if (!Conf['Unread Tab Icon']) { - return; - } - Favicon.el.href = g.DEAD ? Unread.postsQuotingYou.length ? Favicon.unreadDeadY : count ? Favicon.unreadDead : Favicon.dead : count ? Unread.postsQuotingYou.length ? Favicon.unreadY : Favicon.unread : Favicon["default"]; - return $.add(d.head, Favicon.el); - } - }; - - Favicon = { - init: function() { - return $.ready(function() { - var href; - - Favicon.el = $('link[rel="shortcut icon"]', d.head); - Favicon.el.type = 'image/x-icon'; - href = Favicon.el.href; - Favicon.SFW = /ws\.ico$/.test(href); - Favicon["default"] = href; - return Favicon["switch"](); - }); - }, - "switch": function() { - switch (Conf['favicon']) { - case 'ferongr': - Favicon.unreadDead = 'data:image/gif;base64,R0lGODlhEAAQAOMHAOgLAnMFAL8AAOgLAukMA/+AgP+rq////////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAAAAAAAAJAAASAAAZAQAaAQAiAQAkAQAoFBQyAgAzAgA1AgA4AABBAgBXAwBzBQCEBgGvCAG/AADoCwLpDAP/gID/q6v///9zILr8AAAAA3RSTlMAx9dmesIgAAAAc0lEQVQY02WPgQ6DIBBDmTqnbE70Cvb/v3TAnW5OSKB9ybXg3HUBOAmEEH4FQtrSn4gxi+xjVC9SVOEiSvbZI8zSV+/Xo7icnryZ15GObMxvtWUkB/VJW57kHU7fUcHStm8FkncGE/mwP6CGzq/eauHwvT7sWQt3gZLW+AAAAABJRU5ErkJggg=='; - Favicon.unreadSFW = 'data:image/gif;base64,R0lGODlhEAAQAOMHAADX8QBwfgC2zADX8QDY8nnl8qLp8v///////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAAAAAAAAAAAACAkAERMAGBsAGR0AISUALzQALzUAMTcANjwAP0cAVF8AcH4AeokAorYAtswA1/EA2PISIyV55fKi6fL////l+pZqAAAAA3RSTlMAx9dmesIgAAAAcklEQVQY02VPARLCIAxjsjnUWdcg6/9/ukIr00nvIMldEhrC/wHwA0BE3wBUtnICOStQnrNx5oqqzmzKx9vDPH1Nae3F9U4ig3OzjCIX51treYvMxou13EQmBPtHE14xLiawjgoPtfgOaKHP+9VrEXA8O1v7CmSPE3u0AAAAAElFTkSuQmCC'; - Favicon.unreadNSFW = 'data:image/gif;base64,R0lGODlhEAAQAOMHAFT+ACh5AEncAFT+AFX/Acz/su7/5v///////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAAAAAAAADCgAGEgAIGgAJGwALJAANJwASNwASOAATOgAVQQAWRAAeWwAgKBsoeQAwkQA/wABJ3ABU/gBV/wHM/7Lu/+b////r+K2AAAAAA3RSTlMAx9dmesIgAAAAc0lEQVQY02WPgQ6DIBBDmTonbk70Cvb/v3TAnW5OSKB9ybXg3HUBOAmEEH4FQtrSn4gxi+xjVC9SVOEiSvbZI8zSV+/Xo7icnryZ15GObMxvtWUmB/VJW0byDqfvqGBp20mB5J3Bi3zYH1BD38/eauHwvT7sEAt1Fb320QAAAABJRU5ErkJggg=='; - break; - case 'xat-': - Favicon.unreadDead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA2ElEQVQ4y61TQQrCMBDMQ8WDIEV6LbT2A4og2Hq0veo7fIAH04dY9N4xmyYlpGmI2MCQTWYy3Wy2DAD7B2wWAzWgcTgVeZKlZRxHNYFi2jM18oBh0IcKtC6ixf22WT4IFLs0owxswXu9egm0Ls6bwfCFfNsJYJKfqoEkd3vgUgFVLWObtzNgVKyruC+ljSzr5OEnBzjvjcQecaQhbZgBb4CmGQw+PoMkTUtdbd8VSEPakcGxPOcsoIgUKy0LecY29BmdBrqRfjIwZ93KLs5loHvBnL3cLH/jF+C/+z5dgUysAAAAAElFTkSuQmCC'; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAdVBMVEUAAAAAAACKkJGNkpN0d3d0eHdra2dGRkORZ1wAAACmaV6naV4PDw8LCwsLCwvyZWLyZWIeExEyFBTAWlr/eHj/enkAAAAKAAAoAAA4AAA4GhpMAACRAAD/AAD/enn/h4j/m5z/nJ3/0dL/0tL/0tP/09P///9VK8WFAAAAFnRSTlMAPnp6kpKdtcHEzc3p6u7v8PT7/v7++jx7+QAAAIFJREFUGNONj90OgjAMhStKmU5k/h1UmAzUvv8jSrYBIeGC9qLtl/a0JVphAJKUOU36xNfWWiitlU9GUphZbXF/hxg10Li2QdQgPhQ3133c9XLOJvD9uZfI0YOdiiMiJw+2CKIPkZzGtcbgKYIJaI26LAfQOzOqoYNA4Z49Nguv/gEEhw2/C5BUZgAAAABJRU5ErkJggg=='; - Favicon.unreadSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA30lEQVQ4y2P4//8/AyWYgSoGQMF/GJ7Y11VVUVoyKTM9ey4Ig9ggMWQ1YA1IBvzXm34YjkH8mPyJB+Nqlp8FYRAbmxoMF6ArSNrw6T0Qf8Amh9cFMEWVR/7/A+L/uORxhgEIt5/+/3/2lf//5wAxiI0uj+4CBlBgxVUvOwtydgXQZpDmi2/+/7/0GmIQSAwkB1IDUkuUAZeABlx+g2zAZ9wGlAOjChba+LwAUgNSi2HA5Am9VciBhSsQQWyoWgZiovEDsdGI1QBYQiLJAGQalpSxyWEzAJYWkGm8clTJjQCZ1hkoVG0CygAAAABJRU5ErkJggg=='; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAdVBMVEUAAAAAAACRjoqTkI13dXR4dXRpZ2tFQ0Zcb5EAAABee6ZefKcPDw8LCwsLCwtisPJisPIRFh4UJDJalMB4xP95xP8AAAABBQcHFx4KISoNLToaKzgaVW4ul8N5xP+Hy/+b1P+c1P/R7P/S6//S7P/T7P////9P0rk0AAAAFnRSTlMAPnp6kpKdtcHEzc3p6u7v8PT7/v7++jx7+QAAAIFJREFUGNONj90OgjAMhStKmU5k/h1UmAzUvv8jSrYBIeGC9qLtl/a0JVphAJKUOU36xNfWWiitlU9GUphZbXF/hxg10Li2QdQgPhQ3133c9XLOJvD9uUrk6MFOxRGRkwdbBNGHSE7jWmPwFMEEtEZdlgPonRmvoYNA4Z49Nguv/gEE3A2/sQ7iRgAAAABJRU5ErkJggg=='; - Favicon.unreadNSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA4ElEQVQ4y2P4//8/AyWYgSoGQMF/GJ7YNbGqrKRiUnp21lwQBrFBYshqwBqQDPifdsYYjkH8mInxB+OWx58FYRAbmxoMF6ArKPmU9B6IP2CTw+sCmKKe/5X/gPg/LnmcYQDCs/63/1/9fzYQzwGz0eXRXcAACqy4ZfFnQc7u+V/xD6T55v+LQHwJbBBIDCQHUgNSS5QBt4Cab/2/jDDgMx4DykrKJ8FCG58XQGpAajEMmNw7uQo5sHAFIogNVctATDR+IDYasRoAS0gkGYBMw5IyNjlsBsDSAjKNV44quREAx58Mr9vt5wQAAAAASUVORK5CYII='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAdVBMVEUAAAAAAACRipGTjZN2dHd2dHhna2pDRkVckV8AAABepl9ep18PDw8LCwsLCwt08mJ08mIRHhEYMhRpwFqM/3iM/3kAAAAECAIQIAgWLAseOBoePA86dB1mzDOM/3ma/4er/5ur/5zZ/9HZ/9La/9La/9P///85Jx7jAAAAFnRSTlMAPnp6kpKdtcHEzc3p6u7v8PT7/v7++jx7+QAAAIFJREFUGNONj90OgjAMhStKmU5k/h1UmAzUvv8jSrYBIeGC9qLtl/a0JVphAJKUOU36xNfWWiitlU9GUphZbXF/hxg10Li2QdQgPhQ3133c9XLOJvD9uZfI0YOdiiMiJw+2CKIPkZzGtcbgKYIJaI26LAfQOzOqoYNA4Z49Nguv/gEEhw2/C5BUZgAAAABJRU5ErkJggg=='; - break; - case 'Mayhem': - Favicon.unreadDead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABIUlEQVQ4jZ2ScWuDMBDFgw4pIkU0WsoQkWAYIkXZH4N9/+/V3dmfXSrKYIFHwt17j8vdGWNMIkgFuaDgzgQnwRs4EQs5KdolUQtagRN0givEDBTEOjgtGs0Zq8F7cKqqusVxrMQLaDUWcjBSrXkn8gs51tpJSWLk9b3HUa0aNIL5gPBR1/V4kJvR7lTwl8GmAm1Gf9+c3S+89qBHa8502AsmSrtBaEBPbIbj0ah2madlNAPEccdgJDfAtWifBjqWKShRBT6KoiH8QlEUn/qt0CCjnNdmPUwmFWzj9Oe6LpKuZXcwqq88z78Pch3aZU3dPwwc2sWlfZKCW5tWluV8kGvXClLm6dYN4/aUqfCbnEOzNDGhGZbNargvxCzvMGfRJD8UaDVvgkzo6QAAAABJRU5ErkJggg=='; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABj0lEQVQ4y42TQUorQRCGv+oekpj43pOhOyIiKoHBxTMkuAnEtWcwx/AY3sUbBIRcwCw8gCfIMkaTOOUiNdgGRRuKoav+v2qq/i4BakBmXweUwDoxLF5ZhVkC64rYBHYMUAIvwKuBMEwdaFiCNbAAngEC0NHkxBi73vsOsG92HGPsphigY1wOzfNhqhpC6AEd730RQuh9hQEOAY6A/jeAs3a7/f+bWB84ckCpqg+I8Osjgqo+AKUDViJS8LkGMcY+sJrNZssYY387LiIFsBLgL9AC/pgaArzZlF+sZgO4BG7sfgvcA3MxUtOStBIpX7cS3Klqd9OBTIEr4DlLOsuAmqpODXQOiHMuy/O8FkLoJth/6Uh2gQPg87Q3k+7leX6hqnpmPvM/GWfXWeWGqj5+oUS9LMs6wF7iHAwGJ9ZW5uxpup+UGwEtEVoijEYjKl66PJujmvIW3vsFwBiYqzJXZTweY5wSU6Bd7UP1KoECODUrJpOJAtPhcKjAtXGaYptWs57qWyv9Zn/it1a5knj5Dm3v4q8APeACAAAAAElFTkSuQmCC'; - Favicon.unreadSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABCElEQVQ4jZ2S4crCMAxF+0OGDJEPKYrIGKOsiJSx/fJRfSAfTJNyKqXfiuDg0C25N2RJjTGmEVrhTzhw7oStsIEtsVzT4o2Jo9ALThiEM8IdHIgNaHo8mjNWg6/ske8bohPo+63QOLzmooHp8fyAICBSQkVz0QKdsFQEV6WSW/D+7+BbgbIDHcb4Kp61XyjyI16zZ8JemGltQtDBSGxB4/GoN+7TpkkjDCsFArm0IYv3U0BbnYtf8BCy+JytsE0X6VyuKhPPK/GAJ14kvZZDZVV3pZIb8MZr6n4o4PDGKn0S5SdDmyq5PnXQsk+Xbhinp03FFzmHJw6xYRiWm9VxnohZ3vOcxdO8ARmXRvbWdtzQAAAAAElFTkSuQmCC'; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAkFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OztMTEyRkZHBwcH///9dzWZ0AAAAI3RSTlMEBggKDA4QEhQWFxkbHR8hIyUmKCosLjAxN1hbYc7P0dLc3mzWzBUAAAC+SURBVBjTNY3pcsIwEIM3ePERx/bG5IIe0NIrhVbv/3Y4Ydj9Ic030ogqpY3mDdGGi1EVsYuSvGE2Pkl0TFYAdLGuY1eMWGowzzN6kX41DYVpNbvdKlO4Jx5gSbi2VO+Vcq2jrc/jNLQhtM+n05PfkrKxG/oFHIEXqwqQsVRy7n+AtwLYL3sYR3wA755Jp3Vvv8cn8Js0GXmA7/P5TwzpiLn8MOALuEZNygkm5JTy/+vl4BRVbJvQ1NbWRSxXN64PGOBlhG0qAAAAAElFTkSuQmCC'; - Favicon.unreadNSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABCklEQVQ4jZ2S0WrDMAxF/TBCCKWMYhZKCSGYmFJMSNjD/mhf239qJXNcjBdTWODgRLpXKJKNMaYROuFTOHEehFb4gJZYrunwxsSXMApOmIQzwgOciE1oRjyaM1aDj+yR7xuiHvT9VmgcXnPRwO/9+wWCgEgJFc1FCwzCVhFclUpuw/u3g3cFyg50GPOjePZ+ocjPeM2RCXthpbUFwQAzsQ2Nx6PeuE+bJo0w7BQI5NKGLN5XAW11LX7BQ8jia7bCLl2kc7mqTLzuxAOeeJH0Wk6VVf0oldyEN15T948CDm+sMiZRfjK0pZIbUwcd+3TphnF62lR8kXN44hAbhmG5WQNnT8zynucsnuYJhFpBfkMzqD4AAAAASUVORK5CYII='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAkFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztMTExmzDORkZHBwcH///92I3mvAAAAI3RSTlMEBggKDA4QEhQWFxkbHR8hIyUmKCosLjAxN1hbYc7P0dLc3mzWzBUAAAC+SURBVBjTNY3pcsIwEIM3ePERx/bG5IIe0NIT0ur93w4nDLs/pPlGGlGltNG8IdpwMaoidlGSN8zGJ4mOyQqALtZ17IoRSw3meUYv0q+moTCtZrdbZQr3xAMsCdeW6r1SrnW09XmchjaE9vl0evJbUjZ2Q7+AI/BiVQEylkrO/TfwVgD7ZQ/jiA/g3TPptO7t9/gEfpImIw/wez7/iSEdMZcfBnwB16hJOcGEnFL+f70cnKKKbROa2tq6iOXqBuMXGTe4CAUbAAAAAElFTkSuQmCC'; - break; - case 'Original': - Favicon.unreadDead = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; - Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAAAAAAAAAAAAAAAKAAAoAAAoKCg4AAA4ODg7OztMAACRAADBwcH/AAD///+WCcPSAAAAA3RSTlMAx9dmesIgAAAAZ0lEQVQI1z2LsQmAUAxEb4Isk0rwp3EPR3ECcRQrh7C3/nAasPwzmCgYuPBy5AH/NALSImqAK+H1oJRqyJVHNAnZqDITVhj7/PrAciJ9il0BHs/jjU+fnB9sQ0IxX6OBO6Xr0xKAxANLZzUanCWzZQAAAABJRU5ErkJggg=='; - Favicon.unreadSFW = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAC6Xw////////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; - Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAZ0lEQVQI1z2LsQ2AUAhEbwKWoftRGvdwBEewchM7d9BFbE6pbP4Mgj+R5MjjwgP+qQSkRtQAV8K3lVI2Q648oknIRpWZsMI4988HjgvpU+wO8HgeHzR9cjZYhoRiPkcDd0rXpyUAiRd5YjKC7MvNRgAAAABJRU5ErkJggg=='; - Favicon.unreadNSFW = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAGbMM////////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; - Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAZ0lEQVQI1z2LsQ2AUAhEbwKWofRL4x6O4AhuopWb2P4F7E5prP4MgiaSHHlceMA/jYC0iBrgSnjdKaUacuURTUI2qsyEFcaxvD6wnkifYleAx/N449Mn5wfbkFDM52jgTun6tAQg8QAEvjQg42KY2AAAAABJRU5ErkJggg=='; - } - if (Favicon.SFW) { - Favicon.unread = Favicon.unreadSFW; - return Favicon.unreadY = Favicon.unreadSFWY; - } else { - Favicon.unread = Favicon.unreadNSFW; - return Favicon.unreadY = Favicon.unreadNSFWY; - } - }, - empty: 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', - dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==' - }; - - ThreadStats = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { - return; - } - this.dialog = UI.dialog('thread-stats', 'bottom: 0; left: 0;', "
0 / 0
"); - this.postCountEl = $('#post-count', this.dialog); - this.fileCountEl = $('#file-count', this.dialog); - return Thread.prototype.callbacks.push({ - name: 'Thread Stats', - cb: this.node - }); - }, - node: function() { - var ID, fileCount, post, postCount, _ref; - - postCount = 0; - fileCount = 0; - _ref = this.posts; - for (ID in _ref) { - post = _ref[ID]; - postCount++; - if (post.file) { - fileCount++; - } - } - ThreadStats.thread = this; - ThreadStats.update(postCount, fileCount); - $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); - return $.add(d.body, ThreadStats.dialog); - }, - onUpdate: function(e) { - var fileCount, postCount, _ref; - - if (e.detail[404]) { - return; - } - _ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount; - return ThreadStats.update(postCount, fileCount); - }, - update: function(postCount, fileCount) { - var fileCountEl, postCountEl, thread; - - thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl; - postCountEl.textContent = postCount; - fileCountEl.textContent = fileCount; - (thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning'); - return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning'); - } - }; - - ThreadUpdater = { - init: function() { - var checked, conf, html, name, _ref; - - if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { - return; - } - html = ''; - _ref = Config.updater.checkbox; - for (name in _ref) { - conf = _ref[name]; - checked = Conf[name] ? 'checked' : ''; - html += "
"; - } - checked = Conf['Auto Update'] ? 'checked' : ''; - html = "
\n" + html + "\n
\n
\n
"; - this.dialog = UI.dialog('updater', 'bottom: 0; right: 0;', html); - this.timer = $('#update-timer', this.dialog); - this.status = $('#update-status', this.dialog); - this.checkPostCount = 0; - return Thread.prototype.callbacks.push({ - name: 'Thread Updater', - cb: this.node - }); - }, - node: function() { - var input, _i, _len, _ref; - - ThreadUpdater.thread = this; - ThreadUpdater.root = this.OP.nodes.root.parentNode; - ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0]; - ThreadUpdater.outdateCount = 0; - ThreadUpdater.lastModified = '0'; - _ref = $$('input', ThreadUpdater.dialog); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - input = _ref[_i]; - if (input.type === 'checkbox') { - $.on(input, 'change', $.cb.checked); - } - switch (input.name) { - case 'Scroll BG': - $.on(input, 'change', ThreadUpdater.cb.scrollBG); - ThreadUpdater.cb.scrollBG(); - break; - case 'Auto Update This': - $.on(input, 'change', ThreadUpdater.cb.autoUpdate); - $.event('change', null, input); - break; - case 'Interval': - $.on(input, 'change', ThreadUpdater.cb.interval); - ThreadUpdater.cb.interval.call(input); - break; - case 'Update': - $.on(input, 'click', ThreadUpdater.update); - } - } - $.on(window, 'online offline', ThreadUpdater.cb.online); - $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.post); - $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - ThreadUpdater.cb.online(); - return $.add(d.body, ThreadUpdater.dialog); - }, - /* - http://freesound.org/people/pierrecartoons1979/sounds/90112/ - cc-by-nc-3.0 - */ - - beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', - cb: { - online: function() { - if (ThreadUpdater.online = navigator.onLine) { - ThreadUpdater.outdateCount = 0; - ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - if (Conf['Auto Update This']) { - ThreadUpdater.update(); - } - ThreadUpdater.set('status', null, null); - } else { - ThreadUpdater.set('timer', null); - ThreadUpdater.set('status', 'Offline', 'warning'); - } - return ThreadUpdater.cb.autoUpdate(); - }, - post: function(e) { - if (!(Conf['Auto Update This'] && e.detail.threadID === ThreadUpdater.thread.ID)) { - return; - } - ThreadUpdater.outdateCount = 0; - if (ThreadUpdater.seconds > 2) { - return setTimeout(ThreadUpdater.update, 1000); - } - }, - checkpost: function() { - if (!(g.DEAD || ThreadUpdater.foundPost || ThreadUpdater.checkPostCount >= 10)) { - return setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * 500); - } - ThreadUpdater.checkPostCount = 0; - delete ThreadUpdater.foundPost; - return delete ThreadUpdater.postID; - }, - visibility: function() { - if (d.hidden) { - return; - } - ThreadUpdater.outdateCount = 0; - if (ThreadUpdater.seconds > ThreadUpdater.interval) { - return ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - } - }, - scrollBG: function() { - return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { - return true; - } : function() { - return !d.hidden; - }; - }, - autoUpdate: function() { - if (Conf['Auto Update This'] && ThreadUpdater.online) { - return ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); - } else { - return clearTimeout(ThreadUpdater.timeoutID); - } - }, - interval: function() { - var val; - - val = parseInt(this.value, 10); - ThreadUpdater.interval = this.value = val; - return $.cb.value.call(this); - }, - load: function() { - var klass, req, text, _ref; - - req = ThreadUpdater.req; - switch (req.status) { - case 200: - g.DEAD = false; - ThreadUpdater.parse(JSON.parse(req.response).posts); - ThreadUpdater.lastModified = req.getResponseHeader('Last-Modified'); - ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - break; - case 404: - g.DEAD = true; - ThreadUpdater.set('timer', null); - ThreadUpdater.set('status', '404', 'warning'); - clearTimeout(ThreadUpdater.timeoutID); - ThreadUpdater.thread.kill(); - $.event('ThreadUpdate', { - 404: true, - thread: ThreadUpdater.thread - }); - break; - default: - ThreadUpdater.outdateCount++; - ThreadUpdater.set('timer', ThreadUpdater.getInterval()); - /* - Status Code 304: Not modified - By sending the `If-Modified-Since` header we get a proper status code, and no response. - This saves bandwidth for both the user and the servers and avoid unnecessary computation. - */ - - _ref = [0, 304].contains(req.status) ? [null, null] : ["" + req.statusText + " (" + req.status + ")", 'warning'], text = _ref[0], klass = _ref[1]; - ThreadUpdater.set('status', text, klass); - } - if (ThreadUpdater.postID) { - ThreadUpdater.cb.checkpost(this.status); - } - return delete ThreadUpdater.req; - } - }, - getInterval: function() { - var i, j; - - i = ThreadUpdater.interval; - j = Math.min(ThreadUpdater.outdateCount, 10); - if (!d.hidden) { - j = Math.min(j, 7); - } - return ThreadUpdater.seconds = Conf['Optional Increase'] ? Math.max(i, [0, 5, 10, 15, 20, 30, 60, 90, 120, 240, 300][j]) : i; - }, - set: function(name, text, klass) { - var el, node; - - el = ThreadUpdater[name]; - if (node = el.firstChild) { - node.data = text; - } else { - el.textContent = text; - } - if (klass !== void 0) { - return el.className = klass; - } - }, - timeout: function() { - var n; - - ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); - if (!(n = --ThreadUpdater.seconds)) { - return ThreadUpdater.update(); - } else if (n <= -60) { - ThreadUpdater.set('status', 'Retrying', null); - return ThreadUpdater.update(); - } else if (n > 0) { - return ThreadUpdater.set('timer', n); - } - }, - update: function() { - var url; - - if (!ThreadUpdater.online) { - return; - } - ThreadUpdater.seconds = 0; - ThreadUpdater.set('timer', '...'); - if (ThreadUpdater.req) { - ThreadUpdater.req.onloadend = null; - ThreadUpdater.req.abort(); - } - url = "//api.4chan.org/" + ThreadUpdater.thread.board + "/res/" + ThreadUpdater.thread + ".json"; - return ThreadUpdater.req = $.ajax(url, { - onloadend: ThreadUpdater.cb.load - }, { - headers: { - 'If-Modified-Since': ThreadUpdater.lastModified - } - }); - }, - updateThreadStatus: function(title, OP) { - var icon, message, root, titleLC; - - titleLC = title.toLowerCase(); - if (ThreadUpdater.thread["is" + title] === !!OP[titleLC]) { - return; - } - if (!(ThreadUpdater.thread["is" + title] = !!OP[titleLC])) { - message = title === 'Sticky' ? 'The thread is not a sticky anymore.' : 'The thread is not closed anymore.'; - new Notification('info', message, 30); - $.rm($("." + titleLC + "Icon", ThreadUpdater.thread.OP.nodes.info)); - return; - } - message = title === 'Sticky' ? 'The thread is now a sticky.' : 'The thread is now closed.'; - new Notification('info', message, 30); - icon = $.el('img', { - src: "//static.4chan.org/image/" + titleLC + ".gif", - alt: title, - title: title, - className: "" + titleLC + "Icon" - }); - root = $('[title="Quote this post"]', ThreadUpdater.thread.OP.nodes.info); - if (title === 'Closed') { - root = $('.stickyIcon', ThreadUpdater.thread.OP.nodes.info) || root; - } - return $.after(root, [$.tn(' '), icon]); - }, - parse: function(postObjects) { - var ID, OP, count, deletedFiles, deletedPosts, files, index, node, nodes, num, post, postObject, posts, scroll, _i, _len, _ref; - - OP = postObjects[0]; - Build.spoilerRange[ThreadUpdater.thread.board] = OP.custom_spoiler; - ThreadUpdater.updateThreadStatus('Sticky', OP); - ThreadUpdater.updateThreadStatus('Closed', OP); - ThreadUpdater.thread.postLimit = !!OP.bumplimit; - ThreadUpdater.thread.fileLimit = !!OP.imagelimit; - nodes = []; - posts = []; - index = []; - files = []; - count = 0; - for (_i = 0, _len = postObjects.length; _i < _len; _i++) { - postObject = postObjects[_i]; - num = postObject.no; - index.push(num); - if (postObject.fsize) { - files.push(num); - } - if (num <= ThreadUpdater.lastPost) { - continue; - } - count++; - node = Build.postFromObject(postObject, ThreadUpdater.thread.board); - nodes.push(node); - posts.push(new Post(node, ThreadUpdater.thread, ThreadUpdater.thread.board)); - } - deletedPosts = []; - deletedFiles = []; - _ref = ThreadUpdater.thread.posts; - for (ID in _ref) { - post = _ref[ID]; - ID = +ID; - if (post.isDead && index.contains(ID)) { - post.resurrect(); - } else if (!index.contains(ID)) { - post.kill(); - deletedPosts.push(post); - } else if (post.file && !post.file.isDead && !files.contains(ID)) { - post.kill(true); - deletedFiles.push(post); - } - if (ThreadUpdater.postID) { - if (ID === ThreadUpdater.postID) { - ThreadUpdater.foundPost = true; - } - } - } - if (!count) { - ThreadUpdater.set('status', null, null); - ThreadUpdater.outdateCount++; - } else { - ThreadUpdater.set('status', "+" + count, 'new'); - ThreadUpdater.outdateCount = 0; - if (Conf['Beep'] && d.hidden && Unread.posts && !Unread.posts.length) { - if (!ThreadUpdater.audio) { - ThreadUpdater.audio = $.el('audio', { - src: ThreadUpdater.beep - }); - } - ThreadUpdater.audio.play(); - } - ThreadUpdater.lastPost = posts[count - 1].ID; - Main.callbackNodes(Post, posts); - scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; - $.add(ThreadUpdater.root, nodes); - if (scroll) { - if (Conf['Bottom Scroll']) { - doc.scrollTop = d.body.clientHeight; - } else { - Header.scrollToPost(nodes[0]); - } - } - $.queueTask(function() { - var length, threadID; - - threadID = ThreadUpdater.thread.ID; - length = $$('.thread > .postContainer', ThreadUpdater.root).length; - if (Conf['Enable 4chan\'s Extension']) { - return $.globalEval("Parser.parseThread(" + threadID + ", " + (-count) + ")"); - } else { - return Fourchan.parseThread(threadID, length - count, length); - } - }); - } - return $.event('ThreadUpdate', { - 404: false, - thread: ThreadUpdater.thread, - newPosts: posts, - deletedPosts: deletedPosts, - deletedFiles: deletedFiles, - postCount: OP.replies + 1, - fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead) - }); - } - }; - - ThreadWatcher = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Thread Watcher']) { - return; - } - this.dialog = UI.dialog('watcher', 'top: 50px; left: 0px;', '
Thread Watcher
'); - $.on(d, 'QRPostSuccessful', this.cb.post); - $.on(d, '4chanXInitFinished', this.ready); - $.sync('WatchedThreads', this.refresh); - return Thread.prototype.callbacks.push({ - name: 'Thread Watcher', - cb: this.node - }); - }, - node: function() { - var favicon, - _this = this; - - favicon = $.el('img', { - className: 'favicon' - }); - $.on(favicon, 'click', ThreadWatcher.cb.toggle); - $.before($('input', this.OP.nodes.post), favicon); - if (g.VIEW !== 'thread') { - return; - } - return $.get('AutoWatch', 0, function(item) { - if (item['AutoWatch'] !== _this.ID) { - return; - } - ThreadWatcher.watch(_this); - return $["delete"]('AutoWatch'); - }); - }, - ready: function() { - $.off(d, '4chanXInitFinished', ThreadWatcher.ready); - if (!Main.isThisPageLegit()) { - return; - } - ThreadWatcher.refresh(); - return $.add(d.body, ThreadWatcher.dialog); - }, - refresh: function(watched) { - var ID, board, div, favicon, id, link, nodes, props, thread, x, _ref, _ref1; - - if (!watched) { - $.get('WatchedThreads', {}, function(item) { - return ThreadWatcher.refresh(item['WatchedThreads']); - }); - return; - } - nodes = [$('.move', ThreadWatcher.dialog)]; - for (board in watched) { - _ref = watched[board]; - for (id in _ref) { - props = _ref[id]; - x = $.el('a', { - textContent: '×', - href: 'javascript:;' - }); - $.on(x, 'click', ThreadWatcher.cb.x); - link = $.el('a', props); - link.title = link.textContent; - div = $.el('div'); - $.add(div, [x, $.tn(' '), link]); - nodes.push(div); - } - } - $.rmAll(ThreadWatcher.dialog); - $.add(ThreadWatcher.dialog, nodes); - watched = watched[g.BOARD] || {}; - _ref1 = g.BOARD.threads; - for (ID in _ref1) { - thread = _ref1[ID]; - favicon = $('.favicon', thread.OP.nodes.post); - favicon.src = ID in watched ? Favicon["default"] : Favicon.empty; - } - }, - cb: { - toggle: function() { - return ThreadWatcher.toggle(Get.postFromNode(this).thread); - }, - x: function() { - var thread; - - thread = this.nextElementSibling.pathname.split('/'); - return ThreadWatcher.unwatch(thread[1], thread[3]); - }, - post: function(e) { - var board, postID, threadID, _ref; - - _ref = e.detail, board = _ref.board, postID = _ref.postID, threadID = _ref.threadID; - if (postID === threadID) { - if (Conf['Auto Watch']) { - return $.set('AutoWatch', threadID); - } - } else if (Conf['Auto Watch Reply']) { - return ThreadWatcher.watch(board.threads[threadID]); - } - } - }, - toggle: function(thread) { - if ($('.favicon', thread.OP.nodes.post).src === Favicon.empty) { - return ThreadWatcher.watch(thread); - } else { - return ThreadWatcher.unwatch(thread.board, thread.ID); - } - }, - unwatch: function(board, threadID) { - return $.get('WatchedThreads', {}, function(item) { - var watched; - - watched = item['WatchedThreads']; - delete watched[board][threadID]; - if (!Object.keys(watched[board]).length) { - delete watched[board]; - } - ThreadWatcher.refresh(watched); - return $.set('WatchedThreads', watched); - }); - }, - watch: function(thread) { - return $.get('WatchedThreads', {}, function(item) { - var watched, _name; - - watched = item['WatchedThreads']; - watched[_name = thread.board] || (watched[_name] = {}); - watched[thread.board][thread] = { - href: "/" + thread.board + "/res/" + thread, - textContent: Get.threadExcerpt(thread) - }; - ThreadWatcher.refresh(watched); - return $.set('WatchedThreads', watched); - }); - } - }; - - Linkify = { - init: function() { - if (g.VIEW === 'catalog' || !Conf['Linkify']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.prototype.callbacks.push({ - name: 'Linkify', - cb: this.node - }); - }, - regString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, - cypher: $.el('div'), - node: function() { - var a, child, cypher, cypherText, data, embed, embedder, embeds, i, index, len, link, links, lookahead, name, next, node, nodes, snapshot, spoiler, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2; - - if (this.isClone && Conf['Embedding']) { - _ref = $$('.embedder', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - embedder = _ref[_i]; - $.on(embedder, "click", Linkify.toggle); - } - return; - } - snapshot = $.X('.//text()', this.nodes.comment); - cypher = Linkify.cypher; - i = -1; - len = snapshot.snapshotLength; - while (++i < len) { - nodes = $.frag(); - node = snapshot.snapshotItem(i); - data = node.data; - if (!(node.parentNode && Linkify.regString.test(data))) { - continue; - } - Linkify.regString.lastIndex = 0; - cypherText = []; - if (next = node.nextSibling) { - cypher.textContent = node.textContent; - cypherText[0] = cypher.innerHTML; - while ((next.nodeName.toLowerCase() === 'wbr' || next.nodeName.toLowerCase() === 's') && (lookahead = next.nextSibling) && ((name = lookahead.nodeName) === "#text" || name.toLowerCase() === 'br')) { - cypher.textContent = lookahead.textContent; - cypherText.push((spoiler = next.innerHTML) ? "" + (spoiler.replace(/" : ''); - cypherText.push(cypher.innerHTML); - $.rm(next); - next = lookahead.nextSibling; - if (lookahead.nodeName === "#text") { - $.rm(lookahead); - } - if (!next) { - break; - } - } - } - if (cypherText.length) { - data = cypherText.join(''); - } - links = data.match(Linkify.regString); - for (_j = 0, _len1 = links.length; _j < _len1; _j++) { - link = links[_j]; - index = data.indexOf(link); - if (text = data.slice(0, index)) { - cypher.innerHTML = text; - _ref1 = __slice.call(cypher.childNodes); - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - child = _ref1[_k]; - $.add(nodes, child); - } - } - cypher.innerHTML = (link.indexOf(':') < 0 ? (link.indexOf('@') > 0 ? 'mailto:' + link : 'http://' + link) : link).replace(/<(wbr|s|\/s)>/g, ''); - a = $.el('a', { - innerHTML: link, - className: 'linkify', - rel: 'nofollow noreferrer', - target: '_blank', - href: cypher.textContent - }); - $.add(nodes, Linkify.embedder(a)); - data = data.slice(index + link.length); - } - if (data) { - cypher.innerHTML = data; - _ref2 = __slice.call(cypher.childNodes); - for (_l = 0, _len3 = _ref2.length; _l < _len3; _l++) { - child = _ref2[_l]; - $.add(nodes, child); - } - } - $.replace(node, nodes); - } - if (Conf['Auto-embed']) { - embeds = $$('.embedder', this.nodes.comment); - for (_m = 0, _len4 = embeds.length; _m < _len4; _m++) { - embed = embeds[_m]; - embed.click(); - } - } - }, - toggle: function() { - var el, embed, items, style, type, url; - - embed = this.previousElementSibling; - if (this.className.contains("embedded")) { - el = $.el('a', { - rel: 'nofollow noreferrer', - target: 'blank', - className: 'linkify', - href: url = this.getAttribute("data-originalURL"), - textContent: this.getAttribute("data-title") || url - }); - this.textContent = '(embed)'; - } else { - el = (type = Linkify.types[this.getAttribute("data-service")]).el.call(this); - if (style = type.style) { - el.style.cssText = style; - } else { - items = { - 'embedWidth': Config['embedWidth'], - 'embedHeight': Config['embedHeight'] - }; - $.get(items, function(items) { - return el.style.cssText = "border: 0; width: " + items['embedWidth'] + "px; height: " + items['embedHeight'] + "px"; - }); - } - this.textContent = '(unembed)'; - } - $.replace(embed, el); - return $.toggleClass(this, 'embedded'); - }, - types: { - YouTube: { - regExp: /.*(?:youtu.be\/|youtube.*v=|youtube.*\/embed\/|youtube.*\/v\/|youtube.*videos\/)([^#\&\?]*).*/, - el: function() { - return $.el('iframe', { - src: "//www.youtube.com/embed/" + this.name - }); - }, - title: { - api: function() { - return "https://gdata.youtube.com/feeds/api/videos/" + this.name + "?alt=json&fields=title/text(),yt:noembed,app:control/yt:state/@reasonCode"; - }, - text: function() { - return JSON.parse(this.responseText).entry.title.$t; - } - } - }, - Vocaroo: { - regExp: /.*(?:vocaroo.com\/)([^#\&\?]*).*/, - style: 'border: 0; width: 150px; height: 45px;', - el: function() { - return $.el('object', { - innerHTML: "" - }); - } - }, - Vimeo: { - regExp: /.*(?:vimeo.com\/)([^#\&\?]*).*/, - el: function() { - return $.el('iframe', { - src: "//player.vimeo.com/video/" + this.name - }); - }, - title: { - api: function() { - return "https://vimeo.com/api/oembed.json?url=http://vimeo.com/" + this.name; - }, - text: function() { - return JSON.parse(this.responseText).title; - } - } - }, - LiveLeak: { - regExp: /.*(?:liveleak.com\/view.+i=)([0-9a-z_]+)/, - el: function() { - return $.el('iframe', { - src: "http://www.liveleak.com/e/" + this.name + "?autostart=true" - }); - } - }, - audio: { - regExp: /(.*\.(mp3|ogg|wav))$/, - el: function() { - return $.el('audio', { - controls: 'controls', - preload: 'auto', - src: this.name - }); - } - }, - SoundCloud: { - regExp: /.*(?:soundcloud.com\/|snd.sc\/)([^#\&\?]*).*/, - el: function() { - var div; - - div = $.el('div', { - className: "soundcloud", - name: "soundcloud" - }); - return $.ajax("//soundcloud.com/oembed?show_artwork=false&&maxwidth=500px&show_comments=false&format=json&url=" + (this.getAttribute('data-originalURL')) + "&color=" + (Style.colorToHex(Themes[Conf['theme']]['Background Color'])), { - div: div, - onloadend: function() { - return this.div.innerHTML = JSON.parse(this.responseText).html; - } - }, false); - } - }, - pastebin: { - regExp: /.*(?:pastebin.com\/)([^#\&\?]*).*/, - el: function() { - var div; - - return div = $.el('iframe', { - src: "http://pastebin.com/embed_iframe.php?i=" + this.name - }); - } - } - }, - embedder: function(a) { - var callbacks, embed, key, match, service, titles, type, _ref; - - if (!Conf['Embedding']) { - return [a]; - } - titles = {}; - callbacks = function() { - var title; - - return a.textContent = (function() { - switch (this.status) { - case 200: - case 304: - title = "[" + (embed.getAttribute('data-service')) + "] " + (service.text.call(this)); - embed.setAttribute('data-title', title); - titles[embed.name] = [title, Date.now()]; - $.set('CachedTitles', titles); - return title; - case 404: - return "[" + key + "] Not Found"; - case 403: - return "[" + key + "] Forbidden or Private"; - default: - return "[" + key + "] " + this.status + "'d"; - } - }).call(this); - }; - _ref = Linkify.types; - for (key in _ref) { - type = _ref[key]; - if (!(match = a.href.match(type.regExp))) { - continue; - } - embed = $.el('a', { - name: (a.name = match[1]), - className: 'embedder', - href: 'javascript:;', - textContent: '(embed)' - }); - embed.setAttribute('data-service', key); - embed.setAttribute('data-originalURL', a.href); - $.on(embed, 'click', Linkify.toggle); - if (Conf['Link Title'] && (service = type.title)) { - $.get('CachedTitles', {}, function(item) { - var err, title; - - titles = item['CachedTitles']; - if (title = titles[match[1]]) { - a.textContent = title[0]; - return embed.setAttribute('data-title', title[0]); - } else { - try { - return $.cache(service.api.call(a), callbacks); - } catch (_error) { - err = _error; - return a.innerHTML = "[" + key + "] Title Link Blocked (are you using NoScript?)"; - } - } - }); - } - return [a, $.tn(' '), embed]; - } - return [a]; - } - }; - - QR = { - init: function() { - var sc; - - if (!Conf['Quick Reply']) { - return; - } - this.db = new DataBoard('yourPosts'); - sc = $.el('a', { - className: "qr-shortcut " + (!Conf['Persistent QR'] ? 'disabled' : ''), - textContent: 'QR', - title: 'Quick Reply', - href: 'javascript:;' - }); - $.on(sc, 'click', function() { - if (!QR.nodes || QR.nodes.el.hidden) { - $.event('CloseMenu'); - QR.open(); - QR.nodes.com.focus(); - } else { - QR.close(); - } - return $.toggleClass(this, 'disabled'); - }); - Header.addShortcut(sc); - if (Conf['Hide Original Post Form']) { - $.asap((function() { - return doc; - }), function() { - return $.addClass(doc, 'hide-original-post-form'); - }); - } - $.on(d, '4chanXInitFinished', this.initReady); - return Post.prototype.callbacks.push({ - name: 'Quick Reply', - cb: this.node - }); - }, - initReady: function() { - $.off(d, '4chanXInitFinished', QR.initReady); - QR.postingIsEnabled = !!$.id('postForm'); - if (!QR.postingIsEnabled) { - return; - } - $.on(d, 'QRGetSelectedPost', function(_arg) { - var cb; - - cb = _arg.detail; - return cb(QR.selected); - }); - $.on(d, 'QRAddPreSubmitHook', function(_arg) { - var cb; - - cb = _arg.detail; - return QR.preSubmitHooks.push(cb); - }); - $.on(d, 'dragover', QR.dragOver); - $.on(d, 'drop', QR.dropFile); - $.on(d, 'dragstart dragend', QR.drag); - $.on(d, 'ThreadUpdate', function() { - if (g.DEAD) { - return QR.abort(); - } else { - return QR.status(); - } - }); - if (Conf['Persistent QR']) { - return QR.persist(); - } - }, - node: function() { - return $.on($('a[title="Quote this post"]', this.nodes.info), 'click', QR.quote); - }, - persist: function() { - QR.open(); - if (Conf['Auto-Hide QR']) { - return QR.hide(); - } - }, - open: function() { - var err; - - if (QR.nodes) { - QR.nodes.el.hidden = false; - QR.unhide(); - return; - } - try { - return QR.dialog(); - } catch (_error) { - err = _error; - delete QR.nodes; - return Main.handleErrors({ - message: 'Quick Reply dialog creation crashed.', - error: err - }); - } - }, - close: function() { - var i, _i, _len, _ref; - - if (QR.req) { - QR.abort(); - return; - } - QR.nodes.el.hidden = true; - QR.cleanNotifications(); - d.activeElement.blur(); - $.rmClass(QR.nodes.el, 'dump'); - _ref = QR.posts; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - i = _ref[_i]; - QR.posts[0].rm(); - } - QR.cooldown.auto = false; - QR.status(); - if (!Conf['Remember Spoiler'] && QR.nodes.spoiler.checked) { - return QR.nodes.spoiler.click(); - } - }, - focusin: function() { - return $.addClass(QR.nodes.el, 'has-focus'); - }, - focusout: function() { - return $.rmClass(QR.nodes.el, 'has-focus'); - }, - hide: function() { - d.activeElement.blur(); - $.addClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = true; - }, - unhide: function() { - $.rmClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = false; - }, - toggleHide: function() { - if (this.checked) { - return QR.hide(); - } else { - return QR.unhide(); - } - }, - error: function(err) { - var el; - - QR.open(); - if (typeof err === 'string') { - el = $.tn(err); - } else { - el = err; - el.removeAttribute('style'); - } - if (QR.captcha.isEnabled && /captcha|verification/i.test(el.textContent)) { - QR.captcha.nodes.input.focus(); - } - if (d.hidden) { - alert(el.textContent); - } - return QR.notifications.push(new Notification('warning', el)); - }, - notifications: [], - cleanNotifications: function() { - var notification, _i, _len, _ref; - - _ref = QR.notifications; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - notification = _ref[_i]; - notification.close(); - } - return QR.notifications = []; - }, - status: function() { - var disabled, status, value; - - if (!QR.nodes) { - return; - } - if (g.DEAD) { - value = 404; - disabled = true; - QR.cooldown.auto = false; - } - value = QR.req ? QR.req.progress : QR.cooldown.seconds || value; - status = QR.nodes.status; - status.value = !value ? 'Submit' : QR.cooldown.auto ? "Auto " + value : value; - return status.disabled = disabled || false; - }, - cooldown: { - init: function() { - var board; - - if (!Conf['Cooldown']) { - return; - } - board = g.BOARD.ID; - QR.cooldown.types = { - thread: (function() { - switch (board) { - case 'q': - return 86400; - case 'b': - case 'soc': - case 'r9k': - return 600; - default: - return 300; - } - })(), - sage: board === 'q' ? 600 : 60, - file: board === 'q' ? 300 : 30, - post: board === 'q' ? 60 : 30 - }; - QR.cooldown.upSpd = 0; - QR.cooldown.upSpdAccuracy = .5; - $.get("cooldown." + board, {}, function(item) { - QR.cooldown.cooldowns = item["cooldown." + board]; - return QR.cooldown.start(); - }); - return $.sync("cooldown." + board, QR.cooldown.sync); - }, - start: function() { - if (!Conf['Cooldown']) { - return; - } - if (QR.cooldown.isCounting) { - return; - } - QR.cooldown.isCounting = true; - return QR.cooldown.count(); - }, - sync: function(cooldowns) { - var id; - - for (id in cooldowns) { - QR.cooldown.cooldowns[id] = cooldowns[id]; - } - return QR.cooldown.start(); - }, - set: function(data) { - var cooldown, delay, hasFile, isReply, isSage, post, req, start, type, upSpd; - - if (!Conf['Cooldown']) { - return; - } - req = data.req, post = data.post, isReply = data.isReply, delay = data.delay; - start = req ? req.uploadEndTime : Date.now(); - if (delay) { - cooldown = { - delay: delay - }; - } else { - if (post.file) { - upSpd = post.file.size / ((req.uploadEndTime - req.uploadStartTime) / $.SECOND); - QR.cooldown.upSpdAccuracy = ((upSpd > QR.cooldown.upSpd * .9) + QR.cooldown.upSpdAccuracy) / 2; - QR.cooldown.upSpd = upSpd; - } - isSage = /sage/i.test(post.email); - hasFile = !!post.file; - type = !isReply ? 'thread' : isSage ? 'sage' : hasFile ? 'file' : 'post'; - cooldown = { - isReply: isReply, - isSage: isSage, - hasFile: hasFile, - timeout: start + QR.cooldown.types[type] * $.SECOND - }; - } - QR.cooldown.cooldowns[start] = cooldown; - $.set("cooldown." + g.BOARD, QR.cooldown.cooldowns); - return QR.cooldown.start(); - }, - unset: function(id) { - delete QR.cooldown.cooldowns[id]; - if (Object.keys(QR.cooldown.cooldowns).length) { - return $.set("cooldown." + g.BOARD, QR.cooldown.cooldowns); - } else { - return $["delete"]("cooldown." + g.BOARD); - } - }, - count: function() { - var cooldown, cooldowns, elapsed, hasFile, isReply, isSage, now, post, seconds, start, type, types, upSpd, upSpdAccuracy, update, _ref; - - if (!Object.keys(QR.cooldown.cooldowns).length) { - $["delete"]("" + g.BOARD + ".cooldown"); - delete QR.cooldown.isCounting; - delete QR.cooldown.seconds; - QR.status(); - return; - } - setTimeout(QR.cooldown.count, $.SECOND); - now = Date.now(); - post = QR.posts[0]; - isReply = post.thread !== 'new'; - isSage = /sage/i.test(post.email); - hasFile = !!post.file; - seconds = null; - _ref = QR.cooldown, types = _ref.types, cooldowns = _ref.cooldowns, upSpd = _ref.upSpd, upSpdAccuracy = _ref.upSpdAccuracy; - for (start in cooldowns) { - cooldown = cooldowns[start]; - if ('delay' in cooldown) { - if (cooldown.delay) { - seconds = Math.max(seconds, cooldown.delay--); - } else { - seconds = Math.max(seconds, 0); - QR.cooldown.unset(start); - } - continue; - } - if (isReply === cooldown.isReply) { - type = !isReply ? 'thread' : isSage && cooldown.isSage ? 'sage' : hasFile && cooldown.hasFile ? 'file' : 'post'; - elapsed = Math.floor((now - start) / $.SECOND); - if (elapsed >= 0) { - seconds = Math.max(seconds, types[type] - elapsed); - if (hasFile && upSpd) { - seconds -= Math.floor(post.file.size / upSpd * upSpdAccuracy); - seconds = Math.max(seconds, 0); - } - } - } - if (!((start <= now && now <= cooldown.timeout))) { - QR.cooldown.unset(start); - } - } - update = seconds !== null || !!QR.cooldown.seconds; - QR.cooldown.seconds = seconds; - if (update) { - QR.status(); - } - if (seconds === 0 && QR.cooldown.auto && !QR.req) { - return QR.submit(); - } - } - }, - quote: function(e) { - var OP, caretPos, com, index, post, range, s, sel, selectionRoot, text, thread, _ref; - - if (e != null) { - e.preventDefault(); - } - if (!QR.postingIsEnabled) { - return; - } - sel = d.getSelection(); - selectionRoot = $.x('ancestor::div[contains(@class,"postContainer")][1]', sel.anchorNode); - post = Get.postFromNode(this); - OP = Get.contextFromLink(this).thread.OP; - text = ">>" + post + "\n"; - if ((s = sel.toString().trim()) && post.nodes.root === selectionRoot) { - s = s.replace(/\n/g, '\n>'); - text += ">" + s + "\n"; - } - QR.open(); - if (QR.selected.isLocked) { - index = QR.posts.indexOf(QR.selected); - (QR.posts[index + 1] || new QR.post()).select(); - $.addClass(QR.nodes.el, 'dump'); - QR.cooldown.auto = true; - } - _ref = QR.nodes, com = _ref.com, thread = _ref.thread; - if (!com.value) { - thread.value = OP.ID; - } - caretPos = com.selectionStart; - com.value = com.value.slice(0, caretPos) + text + com.value.slice(com.selectionEnd); - range = caretPos + text.length; - com.setSelectionRange(range, range); - com.focus(); - QR.selected.save(com); - return QR.selected.save(thread); - }, - characterCount: function() { - var count, counter; - - counter = QR.nodes.charCount; - count = QR.nodes.com.textLength; - counter.textContent = count; - counter.hidden = count < 1000; - return (count > 1500 ? $.addClass : $.rmClass)(counter, 'warning'); - }, - drag: function(e) { - var toggle; - - toggle = e.type === 'dragstart' ? $.off : $.on; - toggle(d, 'dragover', QR.dragOver); - return toggle(d, 'drop', QR.dropFile); - }, - dragOver: function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'copy'; - }, - dropFile: function(e) { - if (!e.dataTransfer.files.length) { - return; - } - e.preventDefault(); - QR.open(); - QR.fileInput(e.dataTransfer.files); - return $.addClass(QR.nodes.el, 'dump'); - }, - paste: function(e) { - var blob, files, item, _i, _len, _ref; - - files = []; - _ref = e.clipboardData.items; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - item = _ref[_i]; - if (item.kind === 'file') { - blob = item.getAsFile(); - blob.name = 'file'; - if (blob.type) { - blob.name += '.' + blob.type.split('/')[1]; - } - files.push(blob); - } - } - if (!files.length) { - return; - } - QR.open(); - return QR.fileInput(files); - }, - openFileInput: function(e) { - if (e.keyCode && e.keyCode !== 32) { - return; - } - return QR.nodes.fileInput.click(); - }, - fileInput: function(files) { - var file, length, max, post, _i, _len; - - if (this instanceof Element) { - files = __slice.call(this.files); - QR.nodes.fileInput.value = null; - } - length = files.length; - if (!length) { - return; - } - max = QR.nodes.fileInput.max; - QR.cleanNotifications(); - if (length === 1) { - file = files[0]; - if (/^text/.test(file.type)) { - QR.selected.pasteText(file); - } else if (file.size > max) { - QR.error("File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); - } else if (!QR.mimeTypes.contains(file.type)) { - QR.error('Unsupported file type.'); - } else { - QR.selected.setFile(file); - } - return; - } - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; - if (/^text/.test(file.type)) { - if ((post = QR.posts[QR.posts.length - 1]).com) { - post = new QR.post(); - } - post.pasteText(file); - } else if (file.size > max) { - QR.error("" + file.name + ": File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); - } else if (!QR.mimeTypes.contains(file.type)) { - QR.error("" + file.name + ": Unsupported file type."); - } else { - if ((post = QR.posts[QR.posts.length - 1]).file) { - post = new QR.post(); - } - post.setFile(file); - } - } - return $.addClass(QR.nodes.el, 'dump'); - }, - posts: [], - post: (function() { - function _Class(select) { - var el, elm, event, prev, _i, _j, _len, _len1, _ref, _ref1, - _this = this; - - el = $.el('a', { - className: 'qr-preview', - draggable: true, - href: 'javascript:;', - innerHTML: '×' - }); - this.nodes = { - el: el, - rm: el.firstChild, - label: $('label', el), - spoiler: $('input', el), - span: el.lastChild - }; - _ref = $$('*', el); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elm = _ref[_i]; - $.on(elm, 'blur', QR.focusout); - $.on(elm, 'focus', QR.focusin); - } - $.on(el, 'click', this.select.bind(this)); - $.on(this.nodes.rm, 'click', function(e) { - e.stopPropagation(); - return _this.rm(); - }); - $.on(this.nodes.label, 'click', function(e) { - return e.stopPropagation(); - }); - $.on(this.nodes.spoiler, 'change', function(e) { - _this.spoiler = e.target.checked; - if (_this === QR.selected) { - return QR.nodes.spoiler.checked = _this.spoiler; - } - }); - $.add(QR.nodes.dumpList, el); - _ref1 = ['dragStart', 'dragEnter', 'dragLeave', 'dragOver', 'dragEnd', 'drop']; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - event = _ref1[_j]; - $.on(el, event.toLowerCase(), this[event]); - } - this.thread = g.VIEW === 'thread' ? g.THREADID : 'new'; - prev = QR.posts[QR.posts.length - 1]; - QR.posts.push(this); - this.nodes.spoiler.checked = this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false; - $.get('QR.persona', {}, function(item) { - var persona; - - persona = item['QR.persona']; - _this.name = prev ? prev.name : persona.name; - _this.email = prev && !/^sage$/.test(prev.email) ? prev.email : persona.email; - if (Conf['Remember Subject']) { - _this.sub = prev ? prev.sub : persona.sub; - } - if (QR.selected === _this) { - return _this.load(); - } - }); - if (select) { - this.select(); - } - this.unlock(); - } - - _Class.prototype.rm = function() { - var index; - - $.rm(this.nodes.el); - index = QR.posts.indexOf(this); - if (QR.posts.length === 1) { - new QR.post(true); - } else if (this === QR.selected) { - (QR.posts[index - 1] || QR.posts[index + 1]).select(); - } - QR.posts.splice(index, 1); - if (!window.URL) { - return; - } - return URL.revokeObjectURL(this.URL); - }; - - _Class.prototype.lock = function(lock) { - var name, _i, _len, _ref; - - if (lock == null) { - lock = true; - } - this.isLocked = lock; - if (this !== QR.selected) { - return; - } - _ref = ['thread', 'name', 'email', 'sub', 'com', 'spoiler']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - QR.nodes[name].disabled = lock; - } - this.nodes.rm.style.visibility = QR.nodes.fileRM.style.visibility = lock ? 'hidden' : ''; - (lock ? $.off : $.on)(QR.nodes.filename.parentNode, 'click', QR.openFileInput); - this.nodes.spoiler.disabled = lock; - return this.nodes.el.draggable = !lock; - }; - - _Class.prototype.unlock = function() { - return this.lock(false); - }; - - _Class.prototype.select = function() { - var rectEl, rectList; - - if (QR.selected) { - QR.selected.nodes.el.id = null; - QR.selected.forceSave(); - } - QR.selected = this; - this.lock(this.isLocked); - this.nodes.el.id = 'selected'; - rectEl = this.nodes.el.getBoundingClientRect(); - rectList = this.nodes.el.parentNode.getBoundingClientRect(); - this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2; - this.load(); - return $.event('QRPostSelection', this); - }; - - _Class.prototype.load = function() { - var name, _i, _len, _ref; - - _ref = ['thread', 'name', 'email', 'sub', 'com']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - QR.nodes[name].value = this[name] || null; - } - this.showFileData(); - return QR.characterCount(); - }; - - _Class.prototype.save = function(input) { - var value, _ref; - - if (input.type === 'checkbox') { - this.spoiler = input.checked; - return; - } - value = input.value; - this[input.dataset.name] = value; - if (input.nodeName !== 'TEXTAREA') { - return; - } - this.nodes.span.textContent = value; - QR.characterCount(); - if (QR.cooldown.auto && this === QR.posts[0] && (0 < (_ref = QR.cooldown.seconds) && _ref <= 5)) { - return QR.cooldown.auto = false; - } - }; - - _Class.prototype.forceSave = function() { - var name, _i, _len, _ref; - - if (this !== QR.selected) { - return; - } - _ref = ['thread', 'name', 'email', 'sub', 'com', 'spoiler']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - name = _ref[_i]; - this.save(QR.nodes[name]); - } - }; - - _Class.prototype.setFile = function(file) { - this.file = file; - this.filename = "" + file.name + " (" + ($.bytesToString(file.size)) + ")"; - this.nodes.el.title = this.filename; - if (QR.spoiler) { - this.nodes.label.hidden = false; - } - if (window.URL) { - URL.revokeObjectURL(this.URL); - } - this.showFileData(); - if (!/^image/.test(file.type)) { - this.nodes.el.style.backgroundImage = null; - return; - } - return this.setThumbnail(); - }; - - _Class.prototype.setThumbnail = function(fileURL) { - var img, reader, - _this = this; - - if (!window.URL) { - if (!fileURL) { - reader = new FileReader(); - reader.onload = function(e) { - return _this.setThumbnail(e.target.result); - }; - reader.readAsDataURL(this.file); - return; - } - } else { - fileURL = URL.createObjectURL(this.file); - } - img = $.el('img'); - img.onload = function() { - var applyBlob, cv, data, height, i, l, s, ui8a, width, _i; - - s = 90 * 2; - if (_this.file.type === 'image/gif') { - s *= 3; - } - height = img.height, width = img.width; - if (height < s || width < s) { - if (window.URL) { - _this.URL = fileURL; - } - _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; - return; - } - if (height <= width) { - width = s / height * width; - height = s; - } else { - height = s / width * height; - width = s; - } - cv = $.el('canvas'); - cv.height = img.height = height; - cv.width = img.width = width; - cv.getContext('2d').drawImage(img, 0, 0, width, height); - if (!window.URL) { - _this.nodes.el.style.backgroundImage = "url(" + (cv.toDataURL()) + ")"; - delete _this.URL; - return; - } - URL.revokeObjectURL(fileURL); - applyBlob = function(blob) { - _this.URL = URL.createObjectURL(blob); - return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; - }; - if (cv.toBlob) { - cv.toBlob(applyBlob); - return; - } - data = atob(cv.toDataURL().split(',')[1]); - l = data.length; - ui8a = new Uint8Array(l); - for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) { - ui8a[i] = data.charCodeAt(i); - } - return applyBlob(new Blob([ui8a], { - type: 'image/png' - })); - }; - return img.src = fileURL; - }; - - _Class.prototype.rmFile = function() { - delete this.file; - delete this.filename; - this.nodes.el.title = null; - this.nodes.el.style.backgroundImage = null; - if (QR.spoiler) { - this.nodes.label.hidden = true; - } - this.showFileData(); - if (!window.URL) { - return; - } - return URL.revokeObjectURL(this.URL); - }; - - _Class.prototype.showFileData = function() { - if (this.file) { - QR.nodes.filename.textContent = this.filename; - QR.nodes.filename.title = this.filename; - if (QR.spoiler) { - QR.nodes.spoiler.checked = this.spoiler; - } - return $.addClass(QR.nodes.fileSubmit, 'has-file'); - } else { - return $.rmClass(QR.nodes.fileSubmit, 'has-file'); - } - }; - - _Class.prototype.pasteText = function(file) { - var reader, - _this = this; - - reader = new FileReader(); - reader.onload = function(e) { - var text; - - text = e.target.result; - if (_this.com) { - _this.com += "\n" + text; - } else { - _this.com = text; - } - if (QR.selected === _this) { - QR.nodes.com.value = _this.com; - } - return _this.nodes.span.textContent = _this.com; - }; - return reader.readAsText(file); - }; - - _Class.prototype.dragStart = function() { - return $.addClass(this, 'drag'); - }; - - _Class.prototype.dragEnd = function() { - return $.rmClass(this, 'drag'); - }; - - _Class.prototype.dragEnter = function() { - return $.addClass(this, 'over'); - }; - - _Class.prototype.dragLeave = function() { - return $.rmClass(this, 'over'); - }; - - _Class.prototype.dragOver = function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'move'; - }; - - _Class.prototype.drop = function() { - var el, index, newIndex, oldIndex, post; - - el = $('.drag', this.parentNode); - $.rmClass(el, 'drag'); - $.rmClass(this, 'over'); - if (!this.draggable) { - return; - } - index = function(el) { - return __slice.call(el.parentNode.children).indexOf(el); - }; - oldIndex = index(el); - newIndex = index(this); - (oldIndex < newIndex ? $.after : $.before)(this, el); - post = QR.posts.splice(oldIndex, 1)[0]; - return QR.posts.splice(newIndex, 0, post); - }; - - return _Class; - - })(), - captcha: { - init: function() { - if (d.cookie.indexOf('pass_enabled=1') >= 0) { - return; - } - if (!(this.isEnabled = !!$.id('captchaFormPart'))) { - return; - } - return $.asap((function() { - return $.id('recaptcha_challenge_field_holder'); - }), this.ready.bind(this)); - }, - ready: function() { - var MutationObserver, imgContainer, input, observer, setLifetime, - _this = this; - - setLifetime = function(e) { - return _this.lifetime = e.detail; - }; - $.on(window, 'captcha:timeout', setLifetime); - $.globalEval('window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))'); - $.off(window, 'captcha:timeout', setLifetime); - imgContainer = $.el('div', { - className: 'captcha-img', - title: 'Reload', - innerHTML: '' - }); - input = $.el('input', { - className: 'captcha-input field', - title: 'Verification', - autocomplete: 'off', - spellcheck: false, - tabIndex: 55 - }); - this.nodes = { - challenge: $.id('recaptcha_challenge_field_holder'), - img: imgContainer.firstChild, - input: input - }; - if (MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.OMutationObserver) { - observer = new MutationObserver(this.load.bind(this)); - observer.observe(this.nodes.challenge, { - childList: true - }); - } else { - $.on(this.nodes.challenge, 'DOMNodeInserted', this.load.bind(this)); - } - $.on(imgContainer, 'click', this.reload.bind(this)); - $.on(input, 'keydown', this.keydown.bind(this)); - $.on(input, 'focus', function() { - return $.addClass(QR.nodes.el, 'focus'); - }); - $.on(input, 'blur', function() { - return $.rmClass(QR.nodes.el, 'focus'); - }); - $.get('captchas', [], function(item) { - return _this.sync(item['captchas']); - }); - $.sync('captchas', this.sync); - this.reload(); - $.on(input, 'blur', QR.focusout); - $.on(input, 'focus', QR.focusin); - $.addClass(QR.nodes.el, 'has-captcha'); - return $.after(QR.nodes.com.parentNode, [imgContainer, input]); - }, - sync: function(captchas) { - this.captchas = captchas; - return QR.captcha.count(); - }, - getOne: function() { - var captcha, challenge, response; - - this.clear(); - if (captcha = this.captchas.shift()) { - challenge = captcha.challenge, response = captcha.response; - this.count(); - $.set('captchas', this.captchas); - } else { - challenge = this.nodes.img.alt; - if (response = this.nodes.input.value) { - this.reload(); - } - } - if (response) { - response = response.trim(); - if (!/\s/.test(response)) { - response = "" + response + " " + response; - } - } - return { - challenge: challenge, - response: response - }; - }, - save: function() { - var response; - - if (!(response = this.nodes.input.value.trim())) { - return; - } - this.captchas.push({ - challenge: this.nodes.img.alt, - response: response, - timeout: this.timeout - }); - this.count(); - this.reload(); - return $.set('captchas', this.captchas); - }, - clear: function() { - var captcha, i, now, _i, _len, _ref; - - now = Date.now(); - _ref = this.captchas; - for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { - captcha = _ref[i]; - if (captcha.timeout > now) { - break; - } - } - if (!i) { - return; - } - this.captchas = this.captchas.slice(i); - this.count(); - return $.set('captchas', this.captchas); - }, - load: function() { - var challenge; - - if (!this.nodes.challenge.firstChild) { - return; - } - this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; - challenge = this.nodes.challenge.firstChild.value; - this.nodes.img.alt = challenge; - this.nodes.img.src = "//www.google.com/recaptcha/api/image?c=" + challenge; - this.nodes.input.value = null; - return this.clear(); - }, - count: function() { - var count; - - count = this.captchas.length; - this.nodes.input.placeholder = (function() { - switch (count) { - case 0: - return 'Verification (Shift + Enter to cache)'; - case 1: - return 'Verification (1 cached captcha)'; - default: - return "Verification (" + count + " cached captchas)"; - } - })(); - return this.nodes.input.alt = count; - }, - reload: function(focus) { - $.globalEval('Recaptcha.reload("t")'); - if (focus) { - return this.nodes.input.focus(); - } - }, - keydown: function(e) { - if (e.keyCode === 8 && !this.nodes.input.value) { - this.reload(); - } else if (e.keyCode === 13 && e.shiftKey) { - this.save(); - } else { - return; - } - return e.preventDefault(); - } - }, - dialog: function() { - var dialog, elm, mimeTypes, name, nodes, thread, _i, _j, _len, _len1, _ref, _ref1; - - dialog = UI.dialog('qr', 'top:0;right:0;', "
\n \n ×\n \n
\n
\n
\n \n \n \n \n
\n
\n \n \n
\n
\n
\n +\n
\n
\n \n No selected file\n \n ×\n \n \n
\n \n \n
".replace(/>\s+<')); - QR.nodes = nodes = { - el: dialog, - move: $('.move', dialog), - autohide: $('#autohide', dialog), - thread: $('select', dialog), - close: $('.close', dialog), - form: $('form', dialog), - dumpButton: $('#dump-button', dialog), - name: $('[data-name=name]', dialog), - email: $('[data-name=email]', dialog), - sub: $('[data-name=sub]', dialog), - com: $('[data-name=com]', dialog), - dumpList: $('#dump-list', dialog), - addPost: $('#add-post', dialog), - charCount: $('#char-count', dialog), - fileSubmit: $('#file-n-submit', dialog), - filename: $('#qr-filename', dialog), - fileRM: $('#qr-filerm', dialog), - spoiler: $('#qr-file-spoiler', dialog), - status: $('[type=submit]', dialog), - fileInput: $('[type=file]', dialog) - }; - mimeTypes = $('ul.rules > li').textContent.trim().match(/: (.+)/)[1].toLowerCase().replace(/\w+/g, function(type) { - switch (type) { - case 'jpg': - return 'image/jpeg'; - case 'pdf': - return 'application/pdf'; - case 'swf': - return 'application/x-shockwave-flash'; - default: - return "image/" + type; - } - }); - QR.mimeTypes = mimeTypes.split(', '); - QR.mimeTypes.push(''); - nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value; - nodes.fileInput.accept = "text/*, " + mimeTypes; - QR.spoiler = !!$('input[name=spoiler]'); - nodes.spoiler.parentElement.hidden = !QR.spoiler; - if (g.BOARD.ID === 'f') { - nodes.flashTag = $.el('select', { - name: 'filetag', - innerHTML: "\n\n\n\n\n\n" - }); - $.add(nodes.form, nodes.flashTag); - } - for (thread in g.BOARD.threads) { - $.add(nodes.thread, $.el('option', { - value: thread, - textContent: "Thread No." + thread - })); - } - $.on(nodes.filename.parentNode, 'click keyup', QR.openFileInput); - _ref = $$('*', QR.nodes.el); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elm = _ref[_i]; - $.on(elm, 'blur', QR.focusout); - $.on(elm, 'focus', QR.focusin); - } - $.on(QR.nodes.el, 'focusin', QR.focusin); - $.on(QR.nodes.el, 'focusout', QR.focusout); - $.on(nodes.autohide, 'change', QR.toggleHide); - $.on(nodes.close, 'click', QR.close); - $.on(nodes.dumpButton, 'click', function() { - return nodes.el.classList.toggle('dump'); - }); - $.on(nodes.addPost, 'click', function() { - return new QR.post(true); - }); - $.on(nodes.form, 'submit', QR.submit); - $.on(nodes.fileRM, 'click', function() { - return QR.selected.rmFile(); - }); - $.on(nodes.spoiler, 'change', function() { - return QR.selected.nodes.spoiler.click(); - }); - $.on(nodes.fileInput, 'change', QR.fileInput); - _ref1 = ['name', 'email', 'sub', 'com']; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - name = _ref1[_j]; - $.on(nodes[name], 'input', function() { - return QR.selected.save(this); - }); - } - $.on(nodes.thread, 'change', function() { - return QR.selected.save(this); - }); - if (Conf['Remember QR Size']) { - $.get('QR Size', '', function(item) { - return nodes.com.style.cssText = item['QR Size']; - }); - $.on(nodes.com, 'mouseup', function(e) { - if (e.button !== 0) { - return; - } - return $.set('QR Size', this.style.cssText); - }); - } - new QR.post(true); - QR.status(); - QR.cooldown.init(); - QR.captcha.init(); - $.add(d.body, dialog); - return $.event('QRDialogCreation', null, dialog); - }, - preSubmitHooks: [], - submit: function(e) { - var callbacks, challenge, err, filetag, hook, m, opts, post, postData, response, textOnly, thread, threadID, _i, _len, _ref, _ref1; - - if (e != null) { - e.preventDefault(); - } - if (QR.req) { - QR.abort(); - return; - } - if (QR.cooldown.seconds) { - QR.cooldown.auto = !QR.cooldown.auto; - QR.status(); - return; - } - post = QR.posts[0]; - post.forceSave(); - if (g.BOARD.ID === 'f') { - filetag = QR.nodes.flashTag.value; - } - threadID = post.thread; - thread = g.BOARD.threads[threadID]; - if (threadID === 'new') { - threadID = null; - if (['vg', 'q'].contains(g.BOARD.ID) && !post.sub) { - err = 'New threads require a subject.'; - } else if (!(post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { - err = 'No file selected.'; - } - } else if (g.BOARD.threads[threadID].isClosed) { - err = 'You can\'t reply to this thread anymore.'; - } else if (!(post.com || post.file)) { - err = 'No file selected.'; - } else if (post.file && thread.fileLimit) { - err = 'Max limit of image replies has been reached.'; - } else { - _ref = QR.preSubmitHooks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - hook = _ref[_i]; - if (err = hook(post, thread)) { - break; - } - } - } - if (QR.captcha.isEnabled && !err) { - _ref1 = QR.captcha.getOne(), challenge = _ref1.challenge, response = _ref1.response; - if (!response) { - err = 'No valid captcha.'; - } - } - if (err) { - QR.cooldown.auto = false; - QR.status(); - QR.error(err); - return; - } - QR.cleanNotifications(); - QR.cooldown.auto = QR.posts.length > 1; - if (Conf['Auto-Hide QR'] && !QR.cooldown.auto) { - QR.hide(); - } - if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) { - d.activeElement.blur(); - } - post.lock(); - postData = { - resto: threadID, - name: post.name, - email: post.email, - sub: post.sub, - com: post.com, - upfile: post.file, - filetag: filetag, - spoiler: post.spoiler, - textonly: textOnly, - mode: 'regist', - pwd: (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $.id('postPassword').value, - recaptcha_challenge_field: challenge, - recaptcha_response_field: response - }; - callbacks = { - onload: QR.response, - onerror: function() { - delete QR.req; - post.unlock(); - QR.cooldown.auto = false; - QR.status(); - return QR.error($.el('span', { - innerHTML: 'Connection error. You may have been banned.' - })); - } - }; - opts = { - cred: true, - form: $.formData(postData), - upCallbacks: { - onload: function() { - QR.req.isUploadFinished = true; - QR.req.uploadEndTime = Date.now(); - QR.req.progress = '...'; - return QR.status(); - }, - onprogress: function(e) { - QR.req.progress = "" + (Math.round(e.loaded / e.total * 100)) + "%"; - return QR.status(); - } - } - }; - QR.req = $.ajax($.id('postForm').parentNode.action, callbacks, opts); - QR.req.uploadStartTime = Date.now(); - QR.req.progress = '...'; - return QR.status(); - }, - response: function() { - var URL, ban, board, err, h1, isReply, m, post, postID, req, threadID, tmpDoc, _, _ref, _ref1; - - req = QR.req; - delete QR.req; - post = QR.posts[0]; - post.unlock(); - tmpDoc = d.implementation.createHTMLDocument(''); - tmpDoc.documentElement.innerHTML = req.response; - if (ban = $('.banType', tmpDoc)) { - board = $('.board', tmpDoc).innerHTML; - err = $.el('span', { - innerHTML: ban.textContent.toLowerCase() === 'banned' ? ("You are banned on " + board + "! ;_;
") + "Click here to see the reason." : ("You were issued a warning on " + board + " as " + ($('.nameBlock', tmpDoc).innerHTML) + ".
") + ("Reason: " + ($('.reason', tmpDoc).innerHTML)) - }); - } else if (err = tmpDoc.getElementById('errmsg')) { - if ((_ref = $('a', err)) != null) { - _ref.target = '_blank'; - } - } else if (tmpDoc.title !== 'Post successful!') { - err = 'Connection error with sys.4chan.org.'; - } else if (req.status !== 200) { - err = "Error " + req.statusText + " (" + req.status + ")"; - } - if (err) { - if (/captcha|verification/i.test(err.textContent) || err === 'Connection error with sys.4chan.org.') { - if (/mistyped/i.test(err.textContent)) { - err = 'You seem to have mistyped the CAPTCHA.'; - } - QR.cooldown.auto = QR.captcha.isEnabled ? !!QR.captcha.captchas.length : err === 'Connection error with sys.4chan.org.' ? true : false; - QR.cooldown.set({ - delay: 2 - }); - } else if (err.textContent && (m = err.textContent.match(/wait\s(\d+)\ssecond/i))) { - QR.cooldown.auto = QR.captcha.isEnabled ? !!QR.captcha.captchas.length : true; - QR.cooldown.set({ - delay: m[1] - }); - } else { - QR.cooldown.auto = false; - } - QR.status(); - QR.error(err); - return; - } - h1 = $('h1', tmpDoc); - QR.cleanNotifications(); - QR.notifications.push(new Notification('success', h1.textContent, 5)); - $.get('QR.persona', {}, function(item) { - var persona; - - persona = item['QR.persona']; - persona = { - name: post.name, - email: /^sage$/.test(post.email) ? persona.email : post.email, - sub: Conf['Remember Subject'] ? post.sub : null - }; - return $.set('QR.persona', persona); - }); - _ref1 = h1.nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = _ref1[0], threadID = _ref1[1], postID = _ref1[2]; - postID = +postID; - threadID = +threadID || postID; - isReply = threadID !== postID; - QR.db.set({ - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID, - val: true - }); - ThreadUpdater.postID = postID; - $.event('QRPostSuccessful', { - board: g.BOARD, - threadID: threadID, - postID: postID - }); - QR.cooldown.auto = QR.posts.length > 1 && isReply; - if (!(Conf['Persistent QR'] || QR.cooldown.auto)) { - QR.close(); - } else { - post.rm(); - } - QR.cooldown.set({ - req: req, - post: post, - isReply: isReply - }); - if (threadID === postID) { - URL = "/" + g.BOARD + "/res/" + threadID; - } else if (g.VIEW === 'index' && !QR.cooldown.auto && Conf['Open Post in New Tab']) { - URL = "/" + g.BOARD + "/res/" + threadID + "#p" + postID; - } - if (URL) { - if (Conf['Open Post in New Tab']) { - $.open("/" + g.BOARD + "/res/" + threadID); - } else { - window.location = "/" + g.BOARD + "/res/" + threadID; - } - } - return QR.status(); - }, - abort: function() { - if (QR.req && !QR.req.isUploadFinished) { - QR.req.abort(); - delete QR.req; - QR.posts[0].unlock(); - QR.notifications.push(new Notification('info', 'QR upload aborted.', 5)); - } - return QR.status(); - } - }; - - Report = { - init: function() { - if (!/report/.test(location.search)) { - return; - } - return $.ready(this.ready); - }, - ready: function() { - var field, form; - - form = $('form'); - field = $.id('recaptcha_response_field'); - $.on(field, 'keydown', function(e) { - if (e.keyCode === 8 && !field.value) { - return $.globalEval('Recaptcha.reload("t")'); - } - }); - return $.on(form, 'submit', function(e) { - var response; - - e.preventDefault(); - response = field.value.trim(); - if (!/\s/.test(response)) { - field.value = "" + response + " " + response; - } - return form.submit(); - }); - } - }; - - DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts']; - - DataBoard = (function() { - function DataBoard(key, sync) { - var init, - _this = this; - - this.key = key; - this.data = Conf[key]; - $.sync(key, this.onSync.bind(this)); - this.clean(); - if (!sync) { - return; - } - init = function() { - $.off(d, '4chanXInitFinished', init); - return _this.sync = sync; - }; - $.on(d, '4chanXInitFinished', init); - } - - DataBoard.prototype["delete"] = function(_arg) { - var boardID, postID, threadID; - - boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID; - if (postID) { - delete this.data.boards[boardID][threadID][postID]; - this.deleteIfEmpty({ - boardID: boardID, - threadID: threadID - }); - } else if (threadID) { - delete this.data.boards[boardID][threadID]; - this.deleteIfEmpty({ - boardID: boardID - }); - } else { - delete this.data.boards[boardID]; - } - return $.set(this.key, this.data); - }; - - DataBoard.prototype.deleteIfEmpty = function(_arg) { - var boardID, threadID; - - boardID = _arg.boardID, threadID = _arg.threadID; - if (threadID) { - if (!Object.keys(this.data.boards[boardID][threadID]).length) { - delete this.data.boards[boardID][threadID]; - return this.deleteIfEmpty({ - boardID: boardID - }); - } - } else if (!Object.keys(this.data.boards[boardID]).length) { - return delete this.data.boards[boardID]; - } - }; - - DataBoard.prototype.set = function(_arg) { - var boardID, postID, threadID, val, _base, _base1, _base2; - - boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID, val = _arg.val; - if (postID) { - ((_base = ((_base1 = this.data.boards)[boardID] || (_base1[boardID] = {})))[threadID] || (_base[threadID] = {}))[postID] = val; - } else if (threadID) { - ((_base2 = this.data.boards)[boardID] || (_base2[boardID] = {}))[threadID] = val; - } else { - this.data.boards[boardID] = val; - } - return $.set(this.key, this.data); - }; - - DataBoard.prototype.get = function(_arg) { - var ID, board, boardID, defaultValue, postID, thread, threadID, val, _i, _len; - - boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID, defaultValue = _arg.defaultValue; - if (board = this.data.boards[boardID]) { - if (!threadID) { - if (postID) { - for (thread = _i = 0, _len = board.length; _i < _len; thread = ++_i) { - ID = board[thread]; - if (postID in thread) { - val = thread[postID]; - break; - } - } - } else { - val = board; - } - } else if (thread = board[threadID]) { - val = postID ? thread[postID] : thread; - } - } - return val || defaultValue; - }; - - DataBoard.prototype.clean = function() { - var boardID, now; - - for (boardID in this.data.boards) { - this.deleteIfEmpty({ - boardID: boardID - }); - } - now = Date.now(); - if ((this.data.lastChecked || 0) < now - 12 * $.HOUR) { - this.data.lastChecked = now; - for (boardID in this.data.boards) { - this.ajaxClean(boardID); - } - } - return $.set(this.key, this.data); - }; - - DataBoard.prototype.ajaxClean = function(boardID) { - var _this = this; - - return $.cache("//api.4chan.org/" + boardID + "/threads.json", function(e) { - var board, page, thread, threads, _i, _j, _len, _len1, _ref, _ref1; - - if (e.target.status === 404) { - _this["delete"](boardID); - } else if (e.target.status === 200) { - board = _this.data.boards[boardID]; - threads = {}; - _ref = JSON.parse(e.target.response); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - page = _ref[_i]; - _ref1 = page.threads; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - thread = _ref1[_j]; - if (thread.no in board) { - threads[thread.no] = board[thread.no]; - } - } - } - _this.data.boards[boardID] = threads; - _this.deleteIfEmpty({ - boardID: boardID - }); - } - return $.set(_this.key, _this.data); - }); - }; - - DataBoard.prototype.onSync = function(data) { - this.data = data || { - boards: {} - }; - return typeof this.sync === "function" ? this.sync() : void 0; - }; - - return DataBoard; - - })(); - - Board = (function() { - Board.prototype.toString = function() { - return this.ID; - }; - - function Board(ID) { - this.ID = ID; - this.threads = {}; - this.posts = {}; - g.boards[this] = this; - } - - return Board; - - })(); - - Thread = (function() { - Thread.prototype.callbacks = []; - - Thread.prototype.toString = function() { - return this.ID; - }; - - function Thread(ID, board) { - this.board = board; - this.ID = +ID; - this.fullID = "" + this.board + "." + this.ID; - this.posts = {}; - g.threads[this.fullID] = board.threads[this] = this; - } - - Thread.prototype.kill = function() { - this.isDead = true; - return this.timeOfDeath = Date.now(); - }; - - return Thread; - - })(); - - Post = (function() { - Post.prototype.callbacks = []; - - Post.prototype.toString = function() { - return this.ID; - }; - - function Post(root, thread, board, that) { - var alt, anchor, capcode, date, email, file, fileInfo, flag, info, name, post, size, subject, thumb, tripcode, uniqueID, unit; - - this.thread = thread; - this.board = board; - if (that == null) { - that = {}; - } - this.ID = +root.id.slice(2); - this.fullID = "" + this.board + "." + this.ID; - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') - }; - this.info = {}; - if (subject = $('.subject', info)) { - this.nodes.subject = subject; - this.info.subject = subject.textContent; - } - if (name = $('.name', info)) { - this.nodes.name = name; - this.info.name = name.textContent; - } - if (email = $('.useremail', info)) { - this.nodes.email = email; - this.info.email = decodeURIComponent(email.href.slice(7)); - } - if (tripcode = $('.postertrip', info)) { - this.nodes.tripcode = tripcode; - this.info.tripcode = tripcode.textContent; - } - if (uniqueID = $('.posteruid', info)) { - this.nodes.uniqueID = uniqueID; - this.info.uniqueID = uniqueID.firstElementChild.textContent; - } - if (capcode = $('.capcode.hand', info)) { - this.nodes.capcode = capcode; - this.info.capcode = capcode.textContent.replace('## ', ''); - } - if (flag = $('.countryFlag', info)) { - this.nodes.flag = flag; - this.info.flag = flag.title; - } - if (date = $('.dateTime', info)) { - this.nodes.date = date; - this.info.date = new Date(date.dataset.utc * 1000); - } - if (Conf['Quick Reply']) { - this.info.yours = QR.db.get({ - boardID: this.board, - threadID: this.thread, - postID: this.ID - }); - } - this.parseComment(); - this.parseQuotes(); - if ((file = $('.file', post)) && (thumb = $('img[data-md5]', file))) { - alt = thumb.alt; - anchor = thumb.parentNode; - fileInfo = file.firstElementChild; - this.file = { - info: fileInfo, - text: fileInfo.firstElementChild, - thumb: thumb, - URL: anchor.href, - size: alt.match(/[\d.]+\s\w+/)[0], - MD5: thumb.dataset.md5, - isSpoiler: $.hasClass(anchor, 'imgspoiler') - }; - size = +this.file.size.match(/[\d.]+/)[0]; - unit = ['B', 'KB', 'MB', 'GB'].indexOf(this.file.size.match(/\w+$/)[0]); - while (unit-- > 0) { - size *= 1024; - } - this.file.sizeInBytes = size; - this.file.thumbURL = that.isArchived ? thumb.src : "" + location.protocol + "//thumbs.4chan.org/" + board + "/thumb/" + (this.file.URL.match(/(\d+)\./)[1]) + "s.jpg"; - this.file.name = $('span[title]', fileInfo).title.replace(/%22/g, '"'); - if (this.file.isImage = /(jpg|png|gif)$/i.test(this.file.name)) { - this.file.dimensions = this.file.text.textContent.match(/\d+x\d+/)[0]; - } - } - if (!(this.isReply = $.hasClass(post, 'reply'))) { - this.thread.OP = this; - this.thread.isSticky = !!$('.stickyIcon', this.nodes.info); - this.thread.isClosed = !!$('.closedIcon', this.nodes.info); - } - this.clones = []; - g.posts[this.fullID] = thread.posts[this] = board.posts[this] = this; - if (that.isArchived) { - this.kill(); - } - } - - Post.prototype.parseComment = function() { - var bq, data, i, node, nodes, text, _i, _j, _len, _ref, _ref1; - - bq = this.nodes.comment.cloneNode(true); - _ref = $$('.abbr, .capcodeReplies, .exif, b', bq); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - $.rm(node); - } - text = []; - nodes = d.evaluate('.//br|.//text()', bq, null, 7, null); - for (i = _j = 0, _ref1 = nodes.snapshotLength; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { - text.push((data = nodes.snapshotItem(i).data) ? data : '\n'); - } - return this.info.comment = text.join('').trim().replace(/\s+$/gm, ''); - }; - - Post.prototype.parseQuotes = function() { - var hash, pathname, quotelink, quotes, _i, _len, _ref; - - quotes = {}; - _ref = $$('.quotelink', this.nodes.comment); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - quotelink = _ref[_i]; - hash = quotelink.hash; - if (!hash) { - continue; - } - pathname = quotelink.pathname; - if (/catalog$/.test(pathname)) { - continue; - } - if (quotelink.hostname !== 'boards.4chan.org') { - continue; - } - this.nodes.quotelinks.push(quotelink); - if (quotelink.parentNode.parentNode.className === 'capcodeReplies') { - continue; - } - quotes["" + (pathname.split('/')[1]) + "." + hash.slice(2)] = true; - } - if (this.isClone) { - return; - } - return this.quotes = Object.keys(quotes); - }; - - Post.prototype.kill = function(file, now) { - var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1; - - now || (now = new Date()); - if (file) { - if (this.file.isDead) { - return; - } - this.file.isDead = true; - this.file.timeOfDeath = now; - $.addClass(this.nodes.root, 'deleted-file'); - } else { - if (this.isDead) { - return; - } - this.isDead = true; - this.timeOfDeath = now; - $.addClass(this.nodes.root, 'deleted-post'); - } - if (!(strong = $('strong.warning', this.nodes.info))) { - strong = $.el('strong', { - className: 'warning', - textContent: '[Deleted]' - }); - $.after($('input', this.nodes.info), strong); - } - strong.textContent = file ? '[File deleted]' : '[Deleted]'; - if (this.isClone) { - return; - } - _ref = this.clones; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - clone = _ref[_i]; - clone.kill(file, now); - } - if (file) { - return; - } - _ref1 = Get.allQuotelinksLinkingTo(this); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - quotelink = _ref1[_j]; - if ($.hasClass(quotelink, 'deadlink')) { - continue; - } - $.add(quotelink, $.tn('\u00A0(Dead)')); - $.addClass(quotelink, 'deadlink'); - } - }; - - Post.prototype.resurrect = function() { - var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1; - - delete this.isDead; - delete this.timeOfDeath; - $.rmClass(this.nodes.root, 'deleted-post'); - strong = $('strong.warning', this.nodes.info); - if (this.file && this.file.isDead) { - strong.textContent = '[File deleted]'; - } else { - $.rm(strong); - } - if (this.isClone) { - return; - } - _ref = this.clones; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - clone = _ref[_i]; - clone.resurrect(); - } - _ref1 = Get.allQuotelinksLinkingTo(this); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - quotelink = _ref1[_j]; - if ($.hasClass(quotelink, 'deadlink')) { - quotelink.textContent = quotelink.textContent.replace('\u00A0(Dead)', ''); - $.rmClass(quotelink, 'deadlink'); - } - } - }; - - Post.prototype.addClone = function(context) { - return new Clone(this, context); - }; - - Post.prototype.rmClone = function(index) { - var clone, _i, _len, _ref; - - this.clones.splice(index, 1); - _ref = this.clones.slice(index); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - clone = _ref[_i]; - clone.nodes.root.setAttribute('data-clone', index++); - } - }; - - return Post; - - })(); - - Clone = (function(_super) { - __extends(Clone, _super); - - function Clone(origin, context) { - var file, index, info, inline, inlined, key, nodes, post, root, val, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3; - - this.origin = origin; - this.context = context; - _ref = ['ID', 'fullID', 'board', 'thread', 'info', 'quotes', 'isReply']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - key = _ref[_i]; - this[key] = origin[key]; - } - nodes = origin.nodes; - root = nodes.root.cloneNode(true); - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') - }; - _ref1 = $$('.inline', post); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - inline = _ref1[_j]; - $.rm(inline); - } - _ref2 = $$('.inlined', post); - for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { - inlined = _ref2[_k]; - $.rmClass(inlined, 'inlined'); - } - root.hidden = false; - $.rmClass(root, 'forwarded'); - $.rmClass(post, 'highlight'); - if (nodes.subject) { - this.nodes.subject = $('.subject', info); - } - if (nodes.name) { - this.nodes.name = $('.name', info); - } - if (nodes.email) { - this.nodes.email = $('.useremail', info); - } - if (nodes.tripcode) { - this.nodes.tripcode = $('.postertrip', info); - } - if (nodes.uniqueID) { - this.nodes.uniqueID = $('.posteruid', info); - } - if (nodes.capcode) { - this.nodes.capcode = $('.capcode', info); - } - if (nodes.flag) { - this.nodes.flag = $('.countryFlag', info); - } - if (nodes.date) { - this.nodes.date = $('.dateTime', info); - } - this.parseQuotes(); - if (origin.file) { - this.file = {}; - _ref3 = origin.file; - for (key in _ref3) { - val = _ref3[key]; - this.file[key] = val; - } - file = $('.file', post); - this.file.info = file.firstElementChild; - this.file.text = this.file.info.firstElementChild; - this.file.thumb = $('img[data-md5]', file); - this.file.fullImage = $('.full-image', file); - } - if (origin.isDead) { - this.isDead = true; - } - this.isClone = true; - index = origin.clones.push(this) - 1; - root.setAttribute('data-clone', index); - } - - return Clone; - - })(Post); - - Main = { - init: function(items) { - var db, flatten, _i, _len; - - flatten = function(parent, obj) { - var key, val; - - if (obj instanceof Array) { - Conf[parent] = obj[0]; - } else if (typeof obj === 'object') { - for (key in obj) { - val = obj[key]; - flatten(key, val); - } - } else { - Conf[parent] = obj; - } - }; - flatten(null, Config); - for (_i = 0, _len = DataBoards.length; _i < _len; _i++) { - db = DataBoards[_i]; - Conf[db] = { - boards: {} - }; - } - $.get(Conf, Main.initFeatures); - return $.on(d, '4chanMainInit', Main.initStyle); - }, - initFeatures: function(items) { - var init, pathname; - - Conf = items; - pathname = location.pathname.split('/'); - g.BOARD = new Board(pathname[1]); - g.VIEW = (function() { - switch (pathname[2]) { - case 'res': - return 'thread'; - case 'catalog': - return 'catalog'; - default: - return 'index'; - } - })(); - if (g.VIEW === 'thread') { - g.THREADID = +pathname[3]; - } - switch (location.hostname) { - case 'api.4chan.org': - return; - case 'sys.4chan.org': - Report.init(); - return; - case 'images.4chan.org': - $.ready(function() { - var url; - - if (Conf['404 Redirect'] && d.title === '4chan - 404 Not Found') { - url = Redirect.image(pathname[1], pathname[3]); - if (url) { - return location.href = url; - } - } - }); - return; - } - init = function(features) { - var err, module, name; - - for (name in features) { - module = features[name]; - try { - module.init(); - } catch (_error) { - err = _error; - Main.handleErrors({ - message: "\"" + name + "\" initialization crashed.", - error: err - }); - } - } - }; - init({ - 'Polyfill': Polyfill, - 'Header': Header, - 'Catalog Links': CatalogLinks, - 'Settings': Settings, - 'Announcement Hiding': PSAHiding, - 'Fourchan thingies': Fourchan, - 'Custom CSS': CustomCSS, - 'Linkify': Linkify, - 'Resurrect Quotes': Quotify, - 'Filter': Filter, - 'Thread Hiding': ThreadHiding, - 'Reply Hiding': PostHiding, - 'Recursive': Recursive, - 'Strike-through Quotes': QuoteStrikeThrough, - 'Quick Reply': QR, - 'Menu': Menu, - 'Report Link': ReportLink, - 'Thread Hiding (Menu)': ThreadHiding.menu, - 'Reply Hiding (Menu)': PostHiding.menu, - 'Delete Link': DeleteLink, - 'Filter (Menu)': Filter.menu, - 'Download Link': DownloadLink, - 'Archive Link': ArchiveLink, - 'Quote Inlining': QuoteInline, - 'Quote Previewing': QuotePreview, - 'Quote Backlinks': QuoteBacklink, - 'Mark Quotes of You': QuoteYou, - 'Mark OP Quotes': QuoteOP, - 'Mark Cross-thread Quotes': QuoteCT, - 'Anonymize': Anonymize, - 'Time Formatting': Time, - 'Relative Post Dates': RelativeDates, - 'File Info Formatting': FileInfo, - 'Sauce': Sauce, - 'Image Expansion': ImageExpand, - 'Image Expansion (Menu)': ImageExpand.menu, - 'Reveal Spoilers': RevealSpoilers, - 'Image Replace': ImageReplace, - 'Image Hover': ImageHover, - 'Comment Expansion': ExpandComment, - 'Thread Expansion': ExpandThread, - 'Thread Excerpt': ThreadExcerpt, - 'Favicon': Favicon, - 'Unread': Unread, - 'Thread Stats': ThreadStats, - 'Thread Updater': ThreadUpdater, - 'Thread Watcher': ThreadWatcher, - 'Index Navigation': Nav, - 'Keybinds': Keybinds - }); - $.on(d, 'AddCallback', Main.addCallback); - return $.ready(Main.initReady); - }, - initStyle: function() { - var MutationObserver, mainStyleSheet, observer, setStyle, style, styleSheets, _ref; - - $.off(d, '4chanMainInit', Main.initStyle); - if (!Main.isThisPageLegit()) { - return; - } - if ((_ref = $('link[href*=mobile]', d.head)) != null) { - _ref.disabled = true; - } - $.addClass(doc, 'gecko'); - $.addClass(doc, 'fourchan-x'); - $.addStyle(Main.css); - if (g.VIEW === 'catalog') { - $.addClass(doc, $.id('base-css').href.match(/catalog_(\w+)/)[1].replace('_new', '').replace(/_+/g, '-')); - return; - } - style = 'yotsuba-b'; - mainStyleSheet = $('link[title=switch]', d.head); - styleSheets = $$('link[rel="alternate stylesheet"]', d.head); - setStyle = function() { - var styleSheet, _i, _len; - - $.rmClass(doc, style); - for (_i = 0, _len = styleSheets.length; _i < _len; _i++) { - styleSheet = styleSheets[_i]; - if (styleSheet.href === mainStyleSheet.href) { - style = styleSheet.title.toLowerCase().replace('new', '').trim().replace(/\s+/g, '-'); - break; - } - } - return $.addClass(doc, style); - }; - setStyle(); - if (!mainStyleSheet) { - return; - } - if (MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.OMutationObserver) { - observer = new MutationObserver(setStyle); - return observer.observe(mainStyleSheet, { - attributes: true, - attributeFilter: ['href'] - }); - } else { - return $.on(mainStyleSheet, 'DOMAttrModified', setStyle); - } - }, - initReady: function() { - var board, boardChild, err, errors, href, posts, thread, threadChild, threads, _i, _j, _len, _len1, _ref, _ref1; - - if (d.title === '4chan - 404 Not Found') { - if (Conf['404 Redirect'] && g.VIEW === 'thread') { - href = Redirect.to({ - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }); - location.href = href || ("/" + g.BOARD + "/"); - } - return; - } - if (!$.hasClass(doc, 'fourchan-x')) { - Main.initStyle(); - } - if (board = $('.board')) { - threads = []; - posts = []; - _ref = board.children; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - boardChild = _ref[_i]; - if (!$.hasClass(boardChild, 'thread')) { - continue; - } - thread = new Thread(boardChild.id.slice(1), g.BOARD); - threads.push(thread); - _ref1 = boardChild.children; - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - threadChild = _ref1[_j]; - if (!$.hasClass(threadChild, 'postContainer')) { - continue; - } - try { - posts.push(new Post(threadChild, thread, g.BOARD)); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Post No." + (threadChild.id.match(/\d+/)) + " failed. Post will be skipped.", - error: err - }); - } - } - } - if (errors) { - Main.handleErrors(errors); - } - Main.callbackNodes(Thread, threads); - Main.callbackNodes(Post, posts); - } - $.event('4chanXInitFinished'); - return Main.checkUpdate(); - }, - callbackNodes: function(klass, nodes) { - var callback, err, errors, i, len, node, _i, _j, _len, _ref; - - len = nodes.length; - _ref = klass.prototype.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - callback = _ref[_i]; - for (i = _j = 0; 0 <= len ? _j < len : _j > len; i = 0 <= len ? ++_j : --_j) { - node = nodes[i]; - try { - callback.cb.call(node); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "\"" + callback.name + "\" crashed on " + klass.name + " No." + node + " (/" + node.board + "/).", - error: err - }); - } - } - } - if (errors) { - return Main.handleErrors(errors); - } - }, - addCallback: function(e) { - var Klass, obj; - - obj = e.detail; - if (typeof obj.callback.name !== 'string') { - throw new Error("Invalid callback name: " + obj.callback.name); - } - switch (obj.type) { - case 'Post': - Klass = Post; - break; - case 'Thread': - Klass = Thread; - break; - default: - return; - } - obj.callback.isAddon = true; - return Klass.prototype.callbacks.push(obj.callback); - }, - checkUpdate: function() { - var freq, items, now; - - if (!(Conf['Check for Updates'] && Main.isThisPageLegit())) { - return; - } - now = Date.now(); - freq = 7 * $.DAY; - items = { - lastupdate: 0, - lastchecked: 0 - }; - return $.get(items, function(items) { - if (items.lastupdate > now - freq || items.lastchecked > now - $.DAY) { - return; - } - return $.ajax('https://4chan-x.just-believe.in/builds/version', { - onload: function() { - var el, version; - - if (this.status !== 200) { - return; - } - version = this.response; - if (!/^\d\.\d+\.\d+$/.test(version)) { - return; - } - if (g.VERSION === version) { - $.set('lastupdate', now); - return; - } - $.set('lastchecked', now); - el = $.el('span', { - innerHTML: "Update: 4chan X v" + version + " is out, get it here." - }); - return new Notification('info', el, 120); - } - }); - }); - }, - handleErrors: function(errors) { - var div, error, logs, _i, _len; - - if (!(errors instanceof Array)) { - error = errors; - } else if (errors.length === 1) { - error = errors[0]; - } - if (error) { - new Notification('error', Main.parseError(error), 15); - return; - } - div = $.el('div', { - innerHTML: "" + errors.length + " errors occurred. [show]" - }); - $.on(div.lastElementChild, 'click', function() { - var _ref; - - return _ref = this.textContent === 'show' ? ['hide', false] : ['show', true], this.textContent = _ref[0], logs.hidden = _ref[1], _ref; - }); - logs = $.el('div', { - hidden: true - }); - for (_i = 0, _len = errors.length; _i < _len; _i++) { - error = errors[_i]; - $.add(logs, Main.parseError(error)); - } - return new Notification('error', [div, logs], 30); - }, - parseError: function(data) { - var error, message; - - Main.logError(data); - message = $.el('div', { - textContent: data.message - }); - error = $.el('div', { - textContent: data.error - }); - return [message, error]; - }, - errors: [], - logError: function(data) { - if (!Main.errors.length) { - $.on(window, 'unload', Main.postErrors); - } - c.error(data.message, data.error.stack); - return Main.errors.push(data); - }, - postErrors: function() { - var errors; - - errors = Main.errors.map(function(d) { - return d.message + ' ' + d.error.stack; - }); - return $.ajax('https://4chan-x.just-believe.in/errors', {}, { - sync: true, - form: $.formData({ - n: "4chan X v" + g.VERSION, - t: 'userscript', - ua: window.navigator.userAgent, - url: window.location.href, - e: errors.join('\n') - }) - }); - }, - isThisPageLegit: function() { - var _ref; - - if (!('thisPageIsLegit' in Main)) { - Main.thisPageIsLegit = location.hostname === 'boards.4chan.org' && !$('link[href*="favicon-status.ico"]', d.head) && ((_ref = d.title) !== '4chan - Temporarily Offline' && _ref !== '4chan - Error'); - } - return Main.thisPageIsLegit; - }, - css: "/* General */\n.dialog {\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder: 1px solid;\ndisplay: block;\npadding: 0;\n}\n.captcha-img,\n.field {\nbackground-color: #FFF;\nborder: 1px solid #CCC;\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\ncolor: #333;\nfont: 13px sans-serif;\noutline: none;\ntransition: color .25s, border-color .25s;\ntransition: color .25s, border-color .25s;\n}\n.field::-moz-placeholder,\n.field:hover::-moz-placeholder {\ncolor: #AAA !important;\n}\n.captch-img:hover,\n.field:hover {\nborder-color: #999;\n}\n.field:hover, .field:focus {\ncolor: #000;\n}\n.field[disabled] {\nbackground-color: #F2F2F2;\ncolor: #888;\n}\n.move {\ncursor: move;\noverflow: hidden;\n}\nlabel, .favicon {\ncursor: pointer;\n}\na[href=\"javascript:;\"] {\ntext-decoration: none;\n}\n.warning {\ncolor: red;\n}\n\n/* 4chan style fixes */\n.opContainer, .op {\ndisplay: block !important;\n}\n.post {\noverflow: visible !important;\n}\n[hidden] {\ndisplay: none !important;\n}\n\n/* fixed, z-index */\n#overlay,\n#fourchanx-settings,\n#qp, #ihover,\n#updater, #thread-stats,\n#navlinks, .fixed #boardNavDesktop,\n#watcher,\n#qr {\nposition: fixed;\n}\n#fourchanx-settings {\nz-index: 999;\n}\n#overlay {\nz-index: 900;\n}\n#notifications {\nz-index: 70;\n}\n#qp, #ihover {\nz-index: 60;\n}\n#menu {\nz-index: 50;\n}\n#navlinks, #updater, #thread-stats {\nz-index: 40;\n}\n#qr {\nz-index: 30;\n}\n#watcher {\nz-index: 20;\n}\n.fixed #boardNavDesktop {\nz-index: 10;\n}\n/* Header */\n.fourchan-x body {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\n}\n.fixed.top body {\npadding-top: 2em;\n}\n.fixed.bottom body {\npadding-bottom: 2em;\n}\n#boardNavDesktop {\nfloat: left;\n}\n.fixed #boardNavDesktop {\nfloat: none;\nright: 0;\nleft: 0;\npadding: 3px 4px 4px;\n}\n.fixed.top #boardNavDesktop {\ntop: 0;\n}\n.fixed.bottom #boardNavDesktop {\nbottom: 0;\n}\n#boardNavDesktop {\nborder-width: 0;\ntransition: all .1s .05s ease-in-out;\n}\n.fixed.top #boardNavDesktop {\nborder-bottom-width: 1px;\n}\n.fixed.bottom #boardNavDesktop {\nbox-shadow: 0 -1px 2px rgba(0, 0, 0, .15);\nborder-top-width: 1px;\n}\n.fixed.bottom #boardNavDesktop .menu-button i {\nborder-top: none;\nborder-bottom: 6px solid;\n}\n#board-list {\ntext-align: center;\n}\n.fixed #boardNavDesktop.autohide:not(:hover) {\nbox-shadow: none;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.fixed.top #boardNavDesktop.autohide:not(:hover) {\nmargin-bottom: -1em;\n-webkit-transform: translateY(-100%);\ntransform: translateY(-100%);\n}\n.fixed.bottom #boardNavDesktop.autohide:not(:hover) {\n-webkit-transform: translateY(100%);\ntransform: translateY(100%);\n}\n#toggle-header-bar {\nleft: 0;\nright: 0;\nheight: 10px;\nposition: absolute;\n}\n#boardNavDesktop #toggle-header-bar {\ndisplay: none;\n}\n.fixed #boardNavDesktop #toggle-header-bar {\ndisplay: block;\n}\n.fixed #boardNavDesktop #toggle-header-bar {\ncursor: n-resize;\n}\n.fixed.top boardNavDesktop #toggle-header-bar {\ntop: 100%;\n}\n.fixed.bottom #boardNavDesktop #toggle-header-bar {\nbottom: 100%;\n}\n.fixed #boardNavDesktop #header-bar.autohide #toggle-header-bar {\ncursor: s-resize;\n}\n#boardNavDesktop a:not(.entry) {\ntext-decoration: none;\npadding: 1px;\n}\n#shortcuts:empty {\ndisplay: none;\n}\n.brackets-wrap::before {\ncontent: \"\\00a0[\";\n}\n.brackets-wrap::after {\ncontent: \"]\\00a0\";\n}\n.disabled,\n.expand-all-shortcut {\nopacity: .45;\n}\n\n/* Notifications */\n#notifications {\nheight: 0;\ntext-align: center;\nposition: fixed;\ntop: 0;\nright: 0;\nleft: 0;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.top:not(.autohide) ~ #notifications {\ntop: 2em;\n}\n.notification {\ncolor: #FFF;\nfont-weight: 700;\ntext-shadow: 0 1px 2px rgba(0, 0, 0, .5);\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder-radius: 2px;\nmargin: 1px auto;\nwidth: 500px;\nmax-width: 100%;\nposition: relative;\ntransition: all .25s ease-in-out;\n}\n.notification.error {\nbackground-color: hsla(0, 100%, 38%, .9);\n}\n.notification.warning {\nbackground-color: hsla(36, 100%, 38%, .9);\n}\n.notification.info {\nbackground-color: hsla(200, 100%, 38%, .9);\n}\n.notification.success {\nbackground-color: hsla(104, 100%, 38%, .9);\n}\n.notification a {\ncolor: white;\n}\n.notification > .close {\npadding: 6px;\ntop: 0;\nright: 0;\nposition: absolute;\n}\n.message {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\npadding: 6px 20px;\nmax-height: 200px;\nwidth: 100%;\noverflow: auto;\n}\n\n/* Settings */\n#overlay {\nbackground-color: rgba(0, 0, 0, .5);\ntop: 0;\nleft: 0;\nheight: 100%;\nwidth: 100%;\n}\n#fourchanx-settings {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nbox-shadow: 0 0 15px rgba(0, 0, 0, .15);\nheight: 600px;\nmin-height: 0;\nmax-height: 100%;\nwidth: 900px;\nmin-width: 0;\nmax-width: 100%;\npadding: 3px;\ntop: 50%;\nleft: 50%;\n-moz-transform: translate(-50%, -50%);\n-webkit-transform: translate(-50%, -50%);\n-o-transform: translate(-50%, -50%);\ntransform: translate(-50%, -50%);\n}\n#fourchanx-settings > nav {\npadding: 2px 2px 0;\n}\n#fourchanx-settings > nav a {\ntext-decoration: underline;\n}\n#fourchanx-settings > nav a.close {\ntext-decoration: none;\npadding: 2px;\n}\n.section-container {\noverflow: auto;\nposition: absolute;\ntop: 1.7em;\nright: 5px;\nbottom: 5px;\nleft: 5px;\n}\n.sections-list {\npadding: 0 3px;\nfloat: left;\n}\n.credits {\nfloat: right;\n}\n.tab-selected {\nfont-weight: 700;\n}\n.section-container {\noverflow: auto;\nposition: absolute;\ntop: 1.7em;\nright: 5px;\nbottom: 5px;\nleft: 5px;\n}\n.section-sauce ul,\n.section-rice ul {\nlist-style: none;\nmargin: 0;\npadding: 8px;\n}\n.section-sauce li,\n.section-rice li {\npadding-left: 4px;\n}\n.section-main label {\ntext-decoration: underline;\n}\n.section-filter ul {\npadding: 0;\n}\n.section-filter li {\nmargin: 10px 40px;\n}\n.section-filter textarea {\nheight: 500px;\n}\n.section-sauce textarea {\nheight: 350px;\n}\n.section-rice .field[name=\"boardnav\"] {\nwidth: 100%;\n}\n.section-rice textarea {\nheight: 150px;\n}\n#fourchanx-settings fieldset {\nborder: 1px solid;\nborder-radius: 3px;\n}\n#fourchanx-settings legend {\nfont-weight: 700;\n}\n#fourchanx-settings textarea {\nfont-family: monospace;\nmin-width: 100%;\nmax-width: 100%;\n}\n#fourchanx-settings code {\ncolor: #000;\nbackground-color: #FFF;\npadding: 0 2px;\n}\n.unscroll {\noverflow: hidden;\n}\n\n/* Announcement Hiding */\n:root.hide-announcement #globalMessage {\ndisplay: none;\n}\na.hide-announcement,\na.show-announcement {\nfloat: left;\n}\n\n/* Unread */\n#unread-line {\nmargin: 0;\n}\n\n/* Thread Updater */\n#updater:not(:hover) {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n#updater > .move {\npadding: 0 3px;\n}\n#updater > div:last-child {\ntext-align: center;\n}\n#updater input[type=number] {\nwidth: 4em;\n}\n#updater:not(:hover) > div:not(.move) {\ndisplay: none;\n}\n#updater input[type=\"button\"] {\nwidth: 100%;\n}\n.new {\ncolor: limegreen;\n}\n\n/* Thread Watcher */\n#watcher {\npadding-bottom: 3px;\noverflow: hidden;\nwhite-space: nowrap;\n}\n#watcher:not(:hover) {\nmax-height: 220px;\n}\n#watcher > .move {\npadding-top: 3px;\n}\n#watcher > div {\nmax-width: 200px;\noverflow: hidden;\npadding-left: 3px;\npadding-right: 3px;\ntext-overflow: ellipsis;\n}\n#watcher a {\ntext-decoration: none;\n}\n\n/* Thread Stats */\n#thread-stats {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n\n/* Quote */\n.deadlink {\ntext-decoration: none !important;\n}\n.backlink.deadlink:not(.forwardlink), .quotelink.deadlink:not(.forwardlink) {\ntext-decoration: underline !important;\n}\n.inlined {\nopacity: .5;\n}\n#qp input, .forwarded {\ndisplay: none;\n}\n.quotelink.forwardlink,\n.backlink.forwardlink {\ntext-decoration: none;\nborder-bottom: 1px dashed;\n}\n.filtered {\ntext-decoration: underline line-through;\n}\n.inline {\nborder: 1px solid;\ndisplay: table;\nmargin: 2px 0;\n}\n.inline .post {\nborder: 0 !important;\nbackground-color: transparent !important;\ndisplay: table !important;\nmargin: 0 !important;\npadding: 1px 2px !important;\n}\n#qp > .opContainer::after {\ncontent: '';\nclear: both;\ndisplay: table;\n}\n#qp .post {\nborder: none;\nmargin: 0;\npadding: 2px 2px 5px;\n}\n#qp img {\nmax-height: 300px;\nmax-width: 500px;\n}\n.qphl {\noutline: 2px solid rgba(216, 94, 49, .7);\n}\n\n/* File */\n.fileText:hover .fntrunc,\n.fileText:not(:hover) .fnfull,\n.expanded-image > .post > .file > .fileThumb > img[data-md5],\n:not(.expanded-image) > .post > .file > .fileThumb > .full-image {\ndisplay: none;\n}\n.expanding {\nopacity: .5;\n}\n.expanded-image {\nclear: both;\n}\n.expanded-image > .op > .file::after {\ncontent: '';\nclear: both;\ndisplay: table;\n}\n:root.fit-width .full-image {\nmax-width: 100%;\n}\n:root.gecko.fit-width .full-image,\n:root.presto.fit-width .full-image {\nwidth: 100%;\n}\n#ihover {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nmax-height: 100%;\nmax-width: 75%;\npadding-bottom: 16px;\n}\n\n/* Index/Reply Navigation */\n#navlinks {\nfont-size: 16px;\ntop: 25px;\nright: 10px;\n}\n\n/* Filter */\n.opContainer.filter-highlight {\nbox-shadow: inset 5px 0 rgba(255, 0, 0, .5);\n}\n.filter-highlight > .reply {\nbox-shadow: -5px 0 rgba(255, 0, 0, .5);\n}\n\n/* Thread & Reply Hiding */\n.hide-thread-button,\n.hide-reply-button {\nfloat: left;\nmargin-right: 2px;\n}\n.stub ~ .sideArrows,\n.stub ~ .hide-reply-button,\n.stub ~ .post {\ndisplay: none !important;\n}\n.stub input {\ndisplay: inline-block;\n}\n\n/* QR */\n:root.hide-original-post-form #postForm,\n:root.hide-original-post-form .postingMode,\n:root.hide-original-post-form #togglePostForm,\n#qr.autohide:not(.has-focus):not(:hover) > form {\ndisplay: none;\n}\n#qr select, #dump-button, .remove, .captcha-img {\ncursor: pointer;\n}\n#qr {\nz-index: 20;\nposition: fixed;\npadding: 1px;\nborder: 1px solid transparent;\nmin-width: 248px;\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nmargin-bottom: 1px;\n}\n#qr .close {\nfloat: right;\npadding: 0 3px;\n}\n#qr .warning {\nmin-height: 1.6em;\nvertical-align: middle;\npadding: 0 1px;\nborder-width: 1px;\nborder-style: solid;\n}\n.persona {\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-button {\nbackground: linear-gradient(#EEE, #CCC);\nborder: 1px solid #CCC; \nwidth: 10%;\nmargin: 0;\n}\n.persona input.field {\nwidth: 29.6%;\nmargin: 0 0 0 0.4%;\n}\n#qr textarea.field {\nheight: 14.8em;\nmin-height: 9em;\n}\n#qr.has-captcha textarea.field {\nheight: 9em;\n}\ninput.field.tripped:not(:hover):not(:focus) {\ncolor: transparent !important; text-shadow: none !important;\n}\n#qr textarea {\nresize: both;\n}\n.captcha-img {\nmargin: 1px 0 0;\ntext-align: center;\nbackground-image: #fff;\n}\n.captcha-input {\nwidth: 100%;\nmargin: 1px 0 0;\n}\n.field,\n.selectrice,\nbutton,\ninput:not([type=radio]) {\n-moz-box-sizing: border-box;\nfont-size: 12px;\nheight: 1.6em;\nmargin: 1px 0 0;\nvertical-align: bottom;\npadding: 0 1px;\n}\n#qr textarea {\nmin-width: 100%;\n}\n#qr [type='submit'] {\nwidth: 25%;\n}\n/* Fake File Input */\n#qr-filename,\n.has-file #qr-no-file {\ndisplay: none;\n}\n#qr-no-file,\n.has-file #qr-filename {\ndisplay: block;\n}\n#qr-filename-container {\n-moz-box-sizing: border-box;\ndisplay: inline-block;\nposition: relative;\nwidth: 100px;\nmin-width: 74.6%;\nmax-width: 74.6%;\nmargin-right: 0.4%;\noverflow: hidden;\npadding: 2px 1px 0;\n}\n#qr-filerm {\nposition: absolute;\nright: 3px;\ntop: 2px;\nz-index: 2;\n}\n#qr input[type=file] {\ndisplay: none;\n}\n/* Thread Select / Spoiler Label */\n#qr select {\nfloat: right;\n}\n/* Dumping UI */\n.dump #dump-list-container {\ndisplay: block;\n}\n#dump-list-container {\ndisplay: none;\nposition: relative;\noverflow-y: hidden;\nmargin-top: 1px;\n}\n#dump-list {\noverflow-x: auto;\noverflow-y: hidden;\nwhite-space: pre;\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-list:hover {\noverflow-x: auto;\n}\n.qr-preview {\n-moz-box-sizing: border-box;\ncounter-increment: thumbnails;\ncursor: move;\ndisplay: inline-block;\nheight: 90px;\nwidth: 90px;\npadding: 2px;\nopacity: .5;\noverflow: hidden;\nposition: relative;\ntext-shadow: 0 1px 1px #000;\n-moz-transition: opacity .25s ease-in-out;\nvertical-align: top;\n}\n.qr-preview:hover,\n.qr-preview:focus {\nopacity: .9;\n}\n.qr-preview::before {\ncontent: counter(thumbnails);\ncolor: #fff;\nposition: absolute;\ntop: 3px;\nright: 3px;\ntext-shadow: 0 0 3px #000, 0 0 8px #000;\n}\n.qr-preview#selected {\nopacity: 1;\n}\n.qr-preview.drag {\nbox-shadow: 0 0 10px rgba(0,0,0,.5);\n}\n.qr-preview.over {\nborder-color: #fff;\n}\n.qr-preview > span {\ncolor: #fff;\n}\n.remove {\nbackground: none;\ncolor: #e00;\nfont-weight: 700;\npadding: 3px;\n}\na:only-of-type > .remove {\ndisplay: none;\n}\n.remove:hover::after {\ncontent: \" Remove\";\n}\n.qr-preview > label {\nbackground: rgba(0,0,0,.5);\ncolor: #fff;\nright: 0; bottom: 0; left: 0;\nposition: absolute;\ntext-align: center;\n}\n.qr-preview > label > input {\nmargin: 0;\n}\n#add-post {\ncursor: pointer;\nfont-size: 2em;\nposition: absolute;\ntop: 50%;\nright: 10px;\n-moz-transform: translateY(-50%);\n}\n.textarea {\nposition: relative;\n}\n#char-count {\ncolor: #000;\nbackground: hsla(0, 0%, 100%, .5);\nfont-size: 8pt;\nposition: absolute;\nbottom: 1px;\nright: 1px;\npointer-events: none;\n}\n\n/* Menu */\n.menu-button {\ndisplay: inline-block;\nposition: relative;\n}\n.menu-button i {\nborder-top: 6px solid;\nborder-right: 4px solid transparent;\nborder-left: 4px solid transparent;\ndisplay: inline-block;\nmargin: 2px;\nvertical-align: middle;\n}\n#menu {\nposition: fixed;\noutline: none;\nz-index: 22;\n}\n.entry {\nborder-bottom: 1px solid rgba(0,0,0,.25);\ncursor: pointer;\ndisplay: block;\noutline: none;\npadding: 3px 7px;\nposition: relative;\ntext-decoration: none;\nwhite-space: nowrap;\n}\n.entry:last-child {\nborder-bottom: 0;\n}\n.has-submenu::after {\ncontent: \"\";\nborder-left: .5em solid;\nborder-top: .3em solid transparent;\nborder-bottom: .3em solid transparent;\ndisplay: inline-block;\nmargin: .3em;\nposition: absolute;\nright: 3px;\n}\n.submenu {\ndisplay: none;\nposition: absolute;\nleft: 100%;\ntop: -1px;\n}\n.focused .submenu {\ndisplay: block;\n}\n\n/* General */\n:root.yotsuba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.yotsuba #header-bar {\nfont-size: 9pt;\ncolor: #B86;\n}\n:root.yotsuba #header-bar a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.yotsuba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.yotsuba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.yotsuba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba #menu {\ncolor: #800000;\n}\n:root.yotsuba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 10pt;\n}\n:root.yotsuba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.yotsuba-b .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.yotsuba-b #header-bar {\nfont-size: 9pt;\ncolor: #89A;\n}\n:root.yotsuba-b #header-bar a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.yotsuba-b #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.yotsuba-b .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.yotsuba-b .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba-b #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba-b #menu {\ncolor: #000;\n}\n:root.yotsuba-b .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 10pt;\n}\n:root.yotsuba-b .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.futaba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.futaba #header-bar {\nfont-size: 11pt;\ncolor: #B86;\n}\n:root.futaba #header-bar a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.futaba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.futaba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.futaba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.futaba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.futaba #menu {\ncolor: #800000;\n}\n:root.futaba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 12pt;\n}\n:root.futaba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.burichan .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.burichan #header-bar {\nfont-size: 11pt;\ncolor: #89A;\n}\n:root.burichan #header-bar a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.burichan #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.burichan .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.burichan .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.burichan #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.burichan #menu {\ncolor: #000000;\n}\n:root.burichan .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 12pt;\n}\n:root.burichan .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* General */\n:root.tomorrow .dialog {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n:root.tomorrow .field:focus {\nborder-color: #000;\n}\n\n/* Header */\n:root.tomorrow #header-bar {\nfont-size: 9pt;\ncolor: #C5C8C6;\n}\n:root.tomorrow #header-bar a {\ncolor: #81A2BE;\n}\n\n/* Settings */\n:root.tomorrow #fourchanx-settings fieldset {\nborder-color: #111;\n}\n\n/* Quote */\n:root.tomorrow .backlink.deadlink {\ncolor: #81A2BE !important;\n}\n:root.tomorrow .inline {\nborder-color: #111;\nbackground-color: rgba(0, 0, 0, .14);\n}\n\n/* QR */\n.tomorrow #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n:root.tomorrow #qr select {\ncolor: #C5C8C6;\n}\n:root.tomorrow #qr option {\ncolor: #000;\n}\n:root.tomorrow .qr-preview {\nbackground-color: rgba(255, 255, 255, .15);\n}\n\n/* Menu */\n:root.tomorrow #menu {\ncolor: #C5C8C6;\n}\n:root.tomorrow .entry {\nborder-bottom: 1px solid #111;\nfont-size: 10pt;\n}\n:root.tomorrow .focused.entry {\nbackground: rgba(0, 0, 0, .33);\n}\n\n/* General */\n:root.photon .dialog {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.photon #header-bar {\nfont-size: 9pt;\ncolor: #333;\n}\n:root.photon #header-bar a {\ncolor: #FF6600;\n}\n\n/* Settings */\n:root.photon #fourchanx-settings fieldset {\nborder-color: #CCC;\n}\n\n/* Quote */\n:root.photon .backlink.deadlink {\ncolor: #F60 !important;\n}\n:root.photon .inline {\nborder-color: #CCC;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.photon #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.photon #menu {\ncolor: #333;\n}\n:root.photon .entry {\nborder-bottom: 1px solid #CCC;\nfont-size: 10pt;\n}\n:root.photon .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n" - }; - - Main.init(); - -}).call(this); diff --git a/builds/appchan-x.js b/builds/appchan-x.js index 67d806506..ce2850cf2 100644 --- a/builds/appchan-x.js +++ b/builds/appchan-x.js @@ -44,7 +44,6 @@ (function() { var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, Icons, ImageExpand, ImageHover, ImageReplace, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation, __slice = [].slice, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; @@ -3380,8 +3379,8 @@ }); return this.setup(); }, - agent: "-moz-", - sizing: "-moz-box-sizing", + agent: "-o-", + sizing: "box-sizing", setup: function() { this.addStyleReady(); if (d.head) { @@ -6476,11 +6475,11 @@ }); }, sync: function(hiddenPSAs) { - var btn, psa, _ref, _ref1; + var btn, psa, _ref; btn = PSAHiding.btn; psa = $.id('globalMessage'); - return _ref1 = (_ref = PSAHiding.trim(psa), __indexOf.call(hiddenPSAs, _ref) >= 0) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref1[0], btn.innerHTML = _ref1[1], btn.className = _ref1[2], _ref1; + return _ref = hiddenPSAs.contains(PSAHiding.trim(psa)) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref[0], btn.innerHTML = _ref[1], btn.className = _ref[2], _ref; }, trim: function(psa) { return psa.textContent.replace(/\W+/g, '').toLowerCase(); @@ -8797,7 +8796,7 @@ a.setAttribute('data-postid', postID); } } - if (__indexOf.call(this.quotes, quoteID) < 0) { + if (!this.quotes.contains(quoteID)) { this.quotes.push(quoteID); } if (!a) { diff --git a/builds/appchan-x.user.js b/builds/appchan-x.user.js index e59315814..bab9a7174 100644 --- a/builds/appchan-x.user.js +++ b/builds/appchan-x.user.js @@ -44,7 +44,6 @@ (function() { var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, Icons, ImageExpand, ImageHover, ImageReplace, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation, __slice = [].slice, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; @@ -3371,8 +3370,8 @@ }); return this.setup(); }, - agent: "-o-", - sizing: "box-sizing", + agent: "-moz-", + sizing: "-moz-box-sizing", setup: function() { this.addStyleReady(); if (d.head) { @@ -6469,11 +6468,11 @@ }); }, sync: function(hiddenPSAs) { - var btn, psa, _ref, _ref1; + var btn, psa, _ref; btn = PSAHiding.btn; psa = $.id('globalMessage'); - return _ref1 = (_ref = PSAHiding.trim(psa), __indexOf.call(hiddenPSAs, _ref) >= 0) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref1[0], btn.innerHTML = _ref1[1], btn.className = _ref1[2], _ref1; + return _ref = hiddenPSAs.contains(PSAHiding.trim(psa)) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref[0], btn.innerHTML = _ref[1], btn.className = _ref[2], _ref; }, trim: function(psa) { return psa.textContent.replace(/\W+/g, '').toLowerCase(); @@ -8791,7 +8790,7 @@ a.setAttribute('data-postid', postID); } } - if (__indexOf.call(this.quotes, quoteID) < 0) { + if (!this.quotes.contains(quoteID)) { this.quotes.push(quoteID); } if (!a) { diff --git a/builds/appchan-x.zip b/builds/appchan-x.zip index 71b2d99f6cdeb507d6d9ee3a7ed30606f4911c63..52af91f08eeb95e996a2f3bd24e0aebee26ceed8 100644 GIT binary patch delta 173509 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

ql-^QyJ1qP{zh#A2nob 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 Y#{^J|Df+^{A1=j*skU%NFhQlJAHXLB7 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 tE_0Vk)dDsGE_0WH)dD#VE_0AV*C$wm$|3*& delta 173457 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%0ACy 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 z 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�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

M4!b$M0KbabfzK0Lwf9g;2VyL~fL+d7n8 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 $o4#8) zEBYXjk#yOy6eXX6K;u^FU^e=+ErK$R2Ta)G9zli1@+y*)*Lt~~uPsAY@?H|iUX!`L;5d*iR!*(E#B6!JqI z@N!<6+jIH&pr+5;=wE|Fuh(WGh9If$l4;>oc9L)^6zA}3kkHD>yJKwnH#@Bh-d9^^ z(YFWJE%cfn_O8ge9U%ofvdqZ7OqX?IvoUitx}H|E!K@tL7B4R@=v)VeF-MC350}4P0`v;kCs>@6R{{WlgqOWu0xbqATmk?9 E0Lpl}zW@LL delta 147178 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%0D<6qzQ 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%0A5`C{@!D0FWC~P6o9VyR65JHc_ zb+^kX4sx*0mo0>Nw5v&OE@7lKgh~LGuZTKEGEf2czRMrPuLeffrS?1)*~j14s-UIb zIW3{}wc0AdZ>PtYcz?@+)&}RaM%LeF&)SgbWXpDQE`Q9BB+pgN7u{&mGcoequ3bo9TKxUVH>PYbjrDHPfDeCv1h^ z|EU;FxI?7rc~G}!>Xhh&9^T&AD7w;9W{ROrX&;pHkz^$|!DywHLu>pV+NQPQ&(tDtTBEbhYuxqHnK#x_Rmcd&)Yk+oFo;^TqI)ejz3JvtQ zIGhCN10d@!H>r5{((~=BC*=9f<3rWJThKQo5{p2Pc5Xc|d$$Xk?A0zwo?M~f+6A#Z zq<_lc2V}sWZ+IBiDDl&4kB@Zt#S?@?Vs;Pjt3yi;>H`MB0B8@Zcwx{;GMBG#YS7Jt zRQh(LiErrsyJG-!t3GS$<|jYml>dqT=f_WqT*FYH_7Kri)EYI45HkuvD@;W%RG-m! zoGY5EwCdK9ddGmFd&LDY%d(5kkw9Y$mwzN22e#mA)XeS9Vbc%4*5BQ?U6k=-IC~*O40_Fb&|Kp0_qcl=4I5N`#iv=|H zYO4B($+>eDM0{&RwI}?*2RCEn%y<^70nK`FFhWi-B&I2jalkPjwJD$NV2Gz8_J1(M z?|fivg5wdvh&)V!xBd)}29(q4+VHWZ4gAz0Nra_9tAJ688$ye9#nm%~FV9ddc6&TW z-dxhA4LF@ESfjFCkgm;Tr8}- zKLVNrWGmM9N4q|xa8#Q#MAx?U5Pw{oe5Yyyj*lv%R_LnefmIQGdnD!QV(`0F3Viv@ z<2}8Q6qpehC=|0kS;%Q`y8$jb;EHGw%SKaZg0-`5r5~YFEW%CyRm+4#+e_i(kdz{_ ziJ25pWO({CUpNFdRr&nu59w|r1AkM5V2Ld> zpjTO>p9}a6RxmM=h}tGKO*UpRSD}wyMw!VdMg7OvePMGR)ZSlU{2h|9et-d3IL;5Y z0)HYGIcD!WouM~qun~leO#TUT?XXeU{6_B7{pIH1n{(~J_At+}1q({^_Fyc%{z7}O zIRfmVs2OD^4}9o) z$Au@c2mIl}iA9imhCqo|Zy|vU#R>0^8xlefb!UUY4DWD#&2$ZW^8`RE!En^szK)M? z?SX?1fHb9)T~y*%P(28BW$*_GQFaFWLZDfqYP2THL0Z=P(vqe=bR{Zg58Sja!=ptD zYrp*QjX~PJ2*`arkuP49+Wl`c<1^xLUYOjM!_EON1pz0&;&7Mt&H*$`m7G!2%=e~9 zL?b1oEc!HSfSB0Eq)PY1keI0W`{(mv+wq9sxL)mCpfz5oSgE%ft1+DZ;lf96Xxie|VQC&;cv~ z08Bu$zqyxG&;cYl26TfzN~zc%IG0L5p;gGGq=7LT9LqK{UWwnDDX9Ll30ihZaE3NR zRsyJ`I$wf~6jOfVWHGnYZq z0WJZTmvGVnP688lm%!2iTmgrd9n%3U0gabR(*a}wsF$zP0UH(a?C-iCrN_SZUh;g- zs*CTAfvJ#`m*3L?Cjrry2h;&C1S=%Y4VOC90WS<>q2u_L8%N-#NAlK}b<_dS0q3_y z)d3U%0qK`p)&VOAesNwI5#$_~jn)Ah0n(SL)&YY8^Om-FIU>S* zGj}dtd3*Q$-*iqvxsLs2U6bJtFU(PKtXMGhe}SWk<6FAlsktyD3-3Dp2DfF~0l@(Q zUAHIQ0jvTCpAPu35B|Kj+TQ^)0Rn$4w-4a~CIWx&=uF}2g4u0eT>f|s{jh;(>DP2v zP41>LIze&l2yszy)L?|n4*x`vZ=NXZOnzagZAISl$GDtN;gKvBW~@6ij15vk@l@%W zo@-C&hfq7_wzQD*9|?3%kvGNX-c0ojV?0j&Y|%IJ0lc6h-t>hT^m!*>VjjoAgeeOD zi)(+Hv}ds1!KcKx?+aJuwtR0X9cN^k>V5l^8_A;!xqk1 z?3`oRqI?k);k=Uw?71BG@U#45PGt7@51kVm>QOgw=j;AKac@B%wD6xsBm*HUgaaZb6zPld$_T9pqqbC zg!LL$e&pl$qHuWOQ*4Qd3C+wniVe-kQhObGivS|_yCvG60-Ox70#89r21PW-i7qF5 zHEC1Y$VIBG&xO<-lcNxVo8~9yG+inRC&rs2j?=g$P^q<&G>u=XQ_>C2jw3NR;vz6O0zEKdMFf>2{`o!CFx2@K34?Rx1dovK z4Q|Hvz3@}Iy?g9ta*3Ib*23?7=?*@hS}Qkpd2F!|w`5iegT-@poXHzpfm?6V$~Q9A zcX_COQhq{BWrV7N_X8B^pC)_}^P#cq9oj77^Katq+-8LvEsVK8kb7WJz}SDno?pS& zMmkw3r^J38Y-a-$#py5Hu56^)qiAs)`<6d1&G}&!iOo{p7u~CI1bf9hADTE(RU{g4 z7Or#m>q`Ot1UZR}_v##ha1?+FK`C(J1mEGED7>5e%S}%PGm?GS@J2>A*2LO}n@WIA zx&?JPJX`b1$^f1o%S&01Fn)i%pqBxC=M@0Ll3aCWV)JDtZW{{8rQF{<7wGsx&@wu& z@SuYoGX@lNdIB^LbSY@UK2ei;$=W2X3)OjP;Prx7PA*J2$3-ebrOr9VpuB3O!Tv}<>M?)6*#;>-2Sv$ZHF@^+!c0@- zf$z}~D4 zP>E}i#hTX(>;-o5gSmf{&go`mA$QxGjUyBwDa83I#5MjYo~7fNvtU_NvP_Di_!o~D z3U zt#P_F0-qA_YrK|-m%yKt5s{x7@Ij`XD7Dkifk5ElkfR6|V+H`BY$ayHS(d zr>Ew2SwXd*>y75D6t7i!-51zq_UWmf&a~uAETi0|%cCG@KRJ{F@ysAK4vz-gYF-_c z3gL9vAJ`T3*|xG7tm;qWjXztfRa;5psdT4rq{XzTtpa&}vm29dTk<$G*(XZRck#@V z^03(s_w7nF+3SB*ZYSmLa`}+mx2wIuG&63G;gNeQ2EQ-yT3iCZ3izFZUp14c?c<~P0sMx* zZxl3|h>sG_@ofS^JDnJ1H_3PwLLET5NJAd2NWQ4ySw(*^APTZ(+g}O&G@1dt27FUhkfsP6v?%Kpqr=DxoDS{}PI2E4|WgV{}^6M4^KJDunLVrmvb4@^H_bb}Q!^r?mtx0{2A_DUw_<5+`ZOAizJ5Kn zDv+Rl4vX*O{aiF|=-YU>`V@-|3(D;<9}fjG#4g9v^rDi`~o^0dQU_ai@U?6|X>NKuuT?FhBE^@-C*XR)_hauzT2~s<}{Ek|UXiR#X{9Du+oj{~QYeRjj)y?bLNB zlCFQv6ICOZ4n=oGMcPhAYSkEyDpDa=^*^+=^mF{a658A)=Z$JQvJSpwG0Go+y{cSG zJVoM(HkfQFa93Oh{4cG*D86b{BZL2G*js)-`Z{@VDmjX0)1!DkJBmMLxA7ui%H^kR zyio?fKzubTqjqApdEkTPHXYNHjbbUAWcKQ2T@q_7sBzk@nCh) zoBky{c#e2*u(waGhMQG3u?z?2iP%#lp+pYdTqu!>+}k`j9XCRmUL+i>o#Mgb3l}@d zxc(58gI~NV;yup~V9fx!q@eHvav~K^?+S(ISvWb&t%}o^%(@re52Z|`_Y$riUb271 zz(EfLl&%&a!Zyn=FQB$mlDdpO<={e9A4>5)SoU^TUTROVN}$v`tk3|TO}-OpS8KJq zcs@Ql+}GmS=m7AnNW0x{Ps8nP)JU~!%ZF}zUy3L5>1lqKO4riaNiMTUOp?7SfaY^z zxJWGY+fF?j>h#u|p3w^)9wyptZ5)3tWNY$b84mb&OFaYFlw6Ik*R#W2t<_v_=dto) zJI}vSIG&-hKn(+Y#}H4hg;^q1u0ZxT_q( z5#ufvET?*!6gg~*_jkqQHjY;*kppW|#VehdcH|-w!#T7{l~`cd+}xL?@FE(X>7|Ww zzlrz*o4e>kManl*dJ3pfiAFZOy+_P$fS6sfJSb0$bYYZ==j+{eHaXY#tE7Cl3Pb|! zuym*mm)oj5ZtrW!d?{~4yWM}LT)8Xe3MC~wOXa8Qad@Q;>$hsJwHh1!Xy!I@_pHgS z(AYnZhDQCT=RhjAf9gDUbBAfNH204O5hW|L$qgLpPtkMdn++ltrP#_jYa95~36*u$o|2}<$h z48gyQ;GZp*jY%k7*(T%pT1@WdtI1Swvl$M$%5Cv!vkwmQ$#VNJyT6SBvQDTj0exY3Fz z*{909-yh#Db3>ykPoHaAeQ>MKN^hi~)AHsx0dc^O*VBo3CsXf+%Bgy#nGPx4Z00a{ zUPfg#86S1qvwn1*o4hDpRk}TF`m22?P#xWG{BmgM?}e(j&%u9TIJK|FCi*)1FxN+W zFiB%tROkIz4RDxXBd=`BncbEw7GiGk;<6P&1hhbGu3Q}TA<85YyYZkO?Hm@8mb$Or z0V0a{?*oU2z~&J4S6h{CDu=XVZh)CGe141!Bhh zkV0zQ)*o9KHU(Av{{0qkymYv;SWA2P5PGNt{OQB9T!Df(^I%d?sCh^?AO-a!V92}F zK5%#6$vm$gLTY!M@Am7BMR=TxZ{xdox=^a^qm|Hdq)eu}acQ#Z-xtQ~$>^YFrNW^w z>DLRPNGpH5xPS3)7g9YDE)*1bV}yIvZcvR)7g{CV96S^k;rKdLOddj$`&<*r$`4f4 zj+0I`JJOShcs>E-5BP=agNYY>2fO52Exo;uHBy7N6v~bdPxFV{yXK3(T&()_Udeyo zxD7~=Y2d-H2bOy+uv|X})W#qbE9BQ|HZh4j7{h;gXf+AfDV|o5T%3T)`(S6`y44>v(2t?7zOSsYRtW%{#Dl^(f zm-%Tc*wNM6v=i^gC`_*`!m6X1X#N8CgB}vbxXQ^$V-jT5s>PQmrVZTAltR z(a->J??*b=11_H$o#OPN2Xt^LD3$ZY*r=MQhXU>B^l4MSn>Dwy`|LbE4`qiB{(gU? z;lF=aC34bzEEtaK^M+<5q;#U%%l9ThX&jzQgIPIVP51kQ(Nk&|H#*8NFUP@?>z&!~rI75zjLvM`zMp0{Kp}rC&Tj|Zax@^dR>Nd(k**xdsq8rW(kn~aXtPTm zHl^&a{*=0JNvZZ`G(D)dCpG`~+r-#apWuB^bRP{jYb{l))sxwcUzMlJNi?#oj4S)R zQc!b=U9&V@#}{d%)8Fm_@oq$K^%D7df13pQU2>Q&O{Hd~(o)KUQMO)R7gT>~@cjFK$(;_<~OoeY+9 z(_KQji){3Yo_z@CvQ>RKRz}^>wsIJj$E)!&c^gj;?jpf@Z9RS%*V2`E_ck7w$Z>I!${sqwnfmW$^7DV~c(qv0tD90F z+ZjH0G`F(mAkQRqjj4Y+_kEqf(jU9s--j_i_Ni;F5Tw`x%{Xs<<$H6q}&nRsa1-HxvJ)t z_rrZWpG-7r)Ak`)D-6IkFx|fGG&+Hl|IVN2je7Z1uHTCmmbanj{bZjH-5y@2#7x>Y2DU59Yg@NGq7=ExN|=K9St}pZ12H4nE(u_v^yA zS}g>!@uyI9x_N(jNxih&k>yLicVBwZZWmECT1{mOi(n(x7^LR=Rjj&ruIW?%b8oCH zmcd9SbC~Czwzs=(UFpmp+Pj51eu-=<{oSB)AFt1!>ziI@U>s_1T+jCzd8T50?Z5LU zk*M`^nO(GyZ>Z&BQ3k_7SJU-fpqGv1^K!79*T(JMCJ^aHyMxI?z8{PP)zNC%jm%Sn zY*q=S+j@U@-PmN);p%i2Y-YOgK{31ThGd}stJ}k&d^>%PhEm=3vfSGY3bRV|X%`zc zdP=xm@wfY{@I>neCgoynY?SbWu0kOa%p*-=|x9RFI{cD z*zSMy#&apYtjzPZ!**2ZE9sD0pX{YlNJ>ro`}*B(t>iY%hxUBbe_mAU+X_&Ax1HoD zJ$lOYLz(3EkZg}L{aI_d-Uil@QKX;Qk7B`WwK9>bFMhQ@smi5rJ^5^mm%UbITZ2o<6 z9mjj)c{bLml^4zX!+x>u>x*^wX`ERmhSSnvl|oyGvrQ=Pw;TTpvXnHmq2%MEPBDM3 z%hmWjWG9f7+zt{!!cKNzt68C0N;n^xZ(!wr0!wKI*V;p58(pM|VDD9(WwSFNpvqYw z1((~Bq$-11wo$%6WS^q*%D%RW7mb(DU0$s>wvoBq>TZH7|6FY*jTddud#P!WUA&|x z2Xg0D3pKPwC;0F@?~f-^`e8E*%A0?uUJH<1?am+12NFuVmfp{%S|!jNZrh{O-AgSn zQR0D7q*+}Wl{@1hFiH=X`FVaD*vf~yfYL}0N-zCkVzEtxZpTlRem1?x6u}-Y*k2S1 zg(J7IlB1HGrQ~ z#yk=VK>Ij4*o5NeW!{LO8vHR(dPk0dqQ+iJmq#gp`K8QrVO`U=wPGS0nOA0sMWzuN zZBxU1x429zo6TeuF3nbxd3Vzt#U`EfA-OeDjoNJ6e=a23MQxesZHk*sWB9Osc?##& zddhf;cki0hMMy>L@@$ele`|liAC480UIiPlMWa8A(^`k#w?OuW94EWF)YNOL}#Cm?uZwbv3b% z#dCpjyx7RkSMh>B7gC?hl|96 zUJK@T&$pFC<@Q+%?h5f;yj*-aw4_C{b9i~<#_e1o=Z#Im#H z!kI{RhPt;QJo$dz2qXvRAz2t8**M+X7CP$CsAo5WZ6Ymi`{UBx;31LerEizLYP2+( z`0KIKWU?Jq{i|AIS~q`c@%DWoGHd6ax=dSEGNKyL4=+K{QjOMlLt& z%cXc=(oF`Hgf?m{CWC_1lKSgbz1hl#SNcAk=}Ws!>UO)BD#Pwfj_(3Mv3n>jV%uSF znn{&n;mN4EUfde-+UUL(Pj4o*Q8ZlW;=^+{G-LcwDK|sL3yyQr6!_-3dKOx)o+5|7 zBln?BbXk5^pJjixQ`Wmto-d94qnq2{TWKz7xs(KY;RhW)dJ3o7Vcer;7(sf zCkH8>SWgGt!lbM3R(D$`ZIKxd&|RC4pKt(ERZ^PO3iW?~i3!uL!#JKo!;p-#(zPPb zU}MfFIzB6i4eI1fH*VMm^jiIbf+H(~uh5D58aY;f3w{Z}r{6pQkM$bn@8MqCRBgNK zlab)7jC?Xd9B@T}*$1t_DX^tu+0kE->pdDR43PHYf^u#@cEOSDtCc68eFS>fI)c@e z$BSu1$b}^s# z1`>wVJ89H`pq?XX#i>r0@b=7N;5*eWJ6Ta@N0ftYoijfJikz=V}tfRm<255Hgn`OL>r2ZMK#5mS{b z!8Cu$@>9AP^~M4RRh0{VX}xjsCP!H(n9XQ+u$7`RS8%EhA-B$KE8dKNj-Vy!ND-SPyvB`y@q~39mMT`9^daC)l_-c;jnBC6MB3qt(z-RfX#2&nnU;Gx}gv8ZFh4coVFW zbWG1Q%V=h9k|X(VT<=`XqLO-`Oa7O;Wog$1rZNGGHR*y#{}{G_0--_`!dOcV$fzoFL9lRXIT1Ox|sh9p#FdT13=9HC&`V_bnD?#)9ntljaRBki9Gvuh z1B9HM-|m2pNI1|{LhDdny(E*Zh@ocwi z2iTljSk%l`Sq#)IXh%hP6g=v1h$7kwCX7o6_N%ozWE+ijzc1_ha6J=MW&>p%3jyk= zYL~fm;T+cBC=9JDeHpVq-*HxPWZNjNVzTzYulVoSFqV&j01(ZxjEjkQ? zmQ(83;+{Xpc-v26+I@enj}M@;c(ydx@8x+AC~Kv5^pIZ`+v@#dJZ#MR)p{rxE-3!k zlfG=Hr-QapIOzUDsGJ_R^3A){wxIR*!O?AJKhm{Qcp54%mEtUT$ae#sWl5Wil7n7# zyxWEgD}U@Ix@t|QgVsYK1lov|r|o9Gc}Q$mi~eD%Mmow=Ta|zOvru_AD`r3&`OWiE zUra{(!3$_Z4@>)pn3UIAU>vPMGNP{w_vK)@m7lEqJ1~wzFc|JA>T)^A&Vvu3Wg)Z; z=JS*8@_sTM?+4G--EI{wgh3lEtvOZYrhXd(ZTKs#Oe=p-?shA!7i`CaorVg;X92(? zW)x;>C>L#ZSEYa9RM`(YwZv{7y7k}3q`uKi>vH3Mf2Yg2cs2FV%pauKzMx6LP;K97 z=<4F3vIq`h+d_L9&P7w*Rew00D1%ll5t@Xw>|Ly&ZyHn3Mt^;;%c*4b5NbZ9I^n&f zNuf-4*J*4Q^M}SFSbjJZ+M{qT5_wta&(oAXIGJM(^VLdT=|c zmwIu%9LUyF%jQ$FussyC=g=&=Y44-6*`TvL7!P-ab~l=T?zOc0;>&E(uGW*g@%FA0 zIo!VF8`FPns9o?!^-^c^oE|r-)7#z}teHNKJ+-GVWu@3z8QPP-IUAIli`9D7OKz3f z%X2G~*e(l-rY*~(PG;PcUgnGCYW>p7%zEv4r?QkP>LT~jf1b@IV<|gczJ&bUPGZnq zg!_xz>|i_}jJw%#WVQ^;i@afU!%vgG>hCR{)|G!j_678i%+H@z(lobJU&1fzQLNLQ zzdQwc*_qmVzOB!ea$^)ptfWrpcJk6_Pt})TFKZZbe%_eI3VAsjGkOatGkq%5mBnt? zn?Hm`-EeK1Hv;`gVmrv)7A8@DakO~Z^`F5?pGo`Q0;Q=D|y89CBE407|N zqV9i-<3%hy$kk(`yi!n9IWFhgAvx#ID&19X^t=oY7UPF;UU?cvpYG+{AUez!a!OuK z4WDOGIk!)YRXI1#J>1HAtw9GJC=l~}A1aq1qHBwv9Fy-`Mzp~6QfoHMJ% zoT(%_i^8Z?UUL`0z8cAfDb{^lP8-`$>QH}AoLPxP(v(ww{yZ^2Yr}$76Zk(Pj|Dlj zj!cuUe!NR>#S-HJo02F-^AY8Xj^bkNf0k@qNZElCpIm_rO;=VZN;8lcQl&-P9hgE) zXjT?a=WL{M;;kR z07GrH@ffJhfN}q96l0%TdkNuk{XF**Afmaca|4dJZ&Jy!7utJJXe~T(4#efv{L|ys zw^ielxjb|=!CKqQ>eyNzV@M(qcFuol7?_Sw@NQSKB83DDLLdZ4H~pC`X-AvOy99%? zpkiW`8%&@D3cUVIhbe=G$*(xi8$czT*cX`+;o#~1#0YGfo=_F=1vk%44Vget3A`mn znP~*83X_B$8~YR`LGa)tbn?!55(j%+d3d=3o>5~mjV*S*Hj%L<91L=saKe9~MQJ^G z;Na|N#}lO;w<2(+F<2kadYv?ZGa~rBFf!=1SAe-)+^qdo# z4(QoU%R!@iBN;jSBWlQ00hsD)hvJUxIc?H|;DaD>#lOMLKMFf#%l>(KEyO8G-31oo zgWyJhxV0(TNW}SbFKuDBT!!sv{$`(!R0UJdjh5=+`&;Q8}EsVZyD2u-Q ze>`J^?w+me0fX>Jo~5QP!FO_K&`0^`q{YCqP(3D*-SD$ibQDWh_w+!?tuipi$Yk78 z!3WsyS_dt{M&K9lc_V8&`Yxe7+v~+bhQ=;Q+k+10%e8^i$FSYlMjU_hhuE=S9myqW z?(>`H)!s7v07CNh;#fjS`#DbAMiIjg%oj~lb`X3=Jkxv-;!}nmqcqH6QGFNH&#CWV zM=lFI-s0z}Io%8LW(Dle^%#~+CpHw>}hbiT(USKxel4Oi;=E{QK z1yf|k%1#_oR-|__%}sx=NElYPRED2xM^tzBh5n;jKOh% zU+_1KF!IWC3w|HqGx#7JMNfl2UMFCO{D>m`(?A9IK_^y0r~NdRaQW+II2j-XVR^=b zm^);Lpdz^{<=M?p(R6(F#6S%exEbJ_C9r!NW)AI2<{diN@^pWYd#>Y#yjqQI=O9d^H*`BU$?_iW(r=IkC$Cz2PZtT zAW&j}p#tq1NLqhrrvuC2s@cQBQcu-{DKP*>CYcTX*FBBc6iG_7>UhPkxD%Drg>iNm_KAqJ(*ErKUnW;GueB6$G z-Mr8_sR@)bf-*p%Tc}VQ)Uhj^wAjy8O};^nOU`ornW}@WlvRpCf0!;5=%-*MaZW(! zaxhfA6x@F!%tjc6)c?hIabwL2fF58ljJkfotIdQCEYA$s^re#pIsy7tP;4zwh(WL= zAfTrHwuzI7>DbR-nUC0AkFNC}Azy%OU+Gh<0bdQ_Ky@=xh8NV%NCI0J{GLuZ0lzyR zTLSnIC$r^Oz(Ijl_J&`4UNaXp3@EVd~gae}H;iI*-JBkgD;$Pe!>cp$d{ zkY#_<&AZ53Cx7;t$g(I982}(sm-oZ1JYIo-b$c!SQ;wS1_rEsEn;B$ZU@m zfPI9Pk9~v|mVMNB7`sLOR@9Q6ogNXF=hmBb!2;OCya$v*+uY#tbsUl&(MFX zbt32C*%ly@)6{w7D=f`3J^Kt)U|bgE{baS$K6iEHJ%{&aSyY|ohhrUG`0*V8Bxt>W zAid{xC^&P(HlTzoFY(!yl@tqnrjzO*&R z1wJPg9W~m{wa#~EWZeTJa(2^)?v8x-i-=xmwjXS|HW0}|i>K`Y#?IUzx|E9gOK zrRQD(IFLueG>2$$1gD@LVV-X^V3>^UB+bKVuh#NfZc6&p^|~WU@r`iayrh4I)|@V4 zJE*w1r!Zq7*{QIvI+gVe-}ADQzB!lUl24Py!aco^dVtBJoz!=)?n&9zDFcSBUjt{K)feq6Yy7A(>CM*&iCtRMfRA$5kb*-U|9^Hr8 z{*?)uYm>4i z0(|v}612x$+VK@5S5J0Cn9q3to(zDIK1Mq}R0sCBr)%i@Mc?PeV;JBO>2_gs#p~lj z0GPo3;G0V%!x`1;@5p>&T~4wzbt}1^i>Zh*;8=On1V$SKXtP)T+5?#+TpmLmjb_X( z1(G+Dx;w<)jzSB1We$IoHR=d%s=g(U;x8!QI8p)75JBHT>bksQ$a9C65`6edRr!H> zN6@`-=*Fl0)J)JIYVrNf`r6n7h57v;qq_J(5BEs^K7`d``~XWe9J&()J1&kokg|z% zEk%dN^i{z0it`hWk|%X#sDc@4pfiL{Y`x~eRV$Io861h;)btZa9TiS5`55N(+8 zp{Y2_Sczuw7kkv~jvk0avoY}5%MT7w21MQ09lWk+*^*(SoaRkgmq3kE*Uhwfd^YnP zBQ|!k!j^GtR|pzV2tktn{(vgSKWslyL{OfuW^Q1j4!M6ClR{irBP2#K+JrcR5+&RK znw!$gq-jpXIP2Yj%`d2nyEdm|CAOtguG+b6QDiZm-u@Kb+rX0WEdO2;(zuE*D;t*O z5pH#{hbDoW$WwE7%uN$lW42WmP_Y^U5S834ZYVu~W+SkJFvd`iL3!5!j|+GOLW>>y zdVxh8Ic9$h{VC+1TWdG$QcBQ$?xk|mbOk)35{oG1SEethNdQRSjGf*=M-Fznl@9F!3S3R ze4~BA{EabV>~tqNd3kTt${aZIS8Mm#1zF;7T==o$_3>SE|cE%Wo>Dgz@?VlVJ!bk*Bt&aEhR+-Mp4~= zkd1`2cBXN}X2wZ%4h5(uy<18myC8Z#AfpZ(|`T=!~b{l`?c9Bta|zSU*C1_#Si~wV5FG3*M14m?U7cj&$6UQ zSDrrfX}uyXn17qdlNS25UU}qs57IsQGk`_VC+Kcrd0ZgR3B13A|ATikRh>#>w6}l6 zzPSt3BIBB&FQlbDhGzl99m2Xv1HCaO;CBko^DWN|@P7#Z3FAKz{3igVitj^X%g;7tWU8Az+?(zR-uMHX*Wp3d9KnKSyJQpUHpTg&zxQ zgL6Aab=>yncCW8NC{IZXR@_{sFj*`#7=$IzlFE8~Vo|g0X-LeREU0_YNu= z5{0y4W3H@MM|!&1pdn3_2Q3xx2J&BYfT z#r-u4p+gv{FZ%*t0;4OB*Yke`4h;p-g9U*|`vPG2&3VI&>y%$E=bbTaj+TpmLGX!! zrVVheC`3Oe)M=nQfJ!>HYVp1Q>FnVX8l|%#=e;woy7)jAHc0_Xtl4AEKoy&)%EIS$ zi(Y_49Xw(N^++@_2YEY%!^9R2A!03~T+}8+JcQt9hkPKmI8^8L_X&S198C8)G#vD$ zGW5Zs&QKKOViqc?0~sRwf<%_P5`=|P{KXagW16{s{~fi5@79v4NW&=e$Ne@$rZz;v zrmf3{$do`N3_m*{f<_42w~S=JPx*^wreTk$9jN$G4E$5TL+SY=s9GTQJ_4ro#S;W% z&As?Lc<~Lr@XjS=W~hIUUO>}m5dlS$&`stec*zOG?AaWPIjtlBw-Nc|ia=xL}zzy3pvt4bCKGi;x9$ ze3D^cGRL>F(AYs!aRW%f-rA6T7m$3eRg&qfRWDv#y4zgbs-q*O3v?#|^h2#5y_h)k zE2F=8@uumL$`&KIo(VZSj;v{KsK8ffAr=n@-pvMte{p~LRURW-R0AzkD%s z#JJoA%ldy@q<|1-)(Z#Lm>+CrXfmMaZyN4a79+0IjR8 zo9mwZ$Qt5C>D}_t6S(=+_uJ!MT^sA0p8P%V2m08PZ+_i;wLgCkpw8&m-vb+_v@(!Y z{d?fj_xfM|@%?Y#fBW(4<;|~wE1D=yhRGqGHDG^7J{LrvFz;e*x7!=DU%>kD(1`sN z$^=l^eVv>av6x<@rQ$wHYn&HQ-_n7?H9~pkg||Zg zhC*iRU(q;-o#bk7JT6p>2-0%-*vB!#1K=_Au$BXV2YVJ!7lxqV(9yvH&zJ}m%Y}Gt z;W&R2kdOc$0)6lCS^Ui}oU5xy;8`PRt9?mR)guVE!6hKbj^PZVY$!t<1RcU&awg$M zW5`kN9oVL#Lz|;2@5L7^Zvg^+HC1hD0s-iy4Ly9f!{6Y?k~~nPd(gW?&Bjl0PP5bp87`pkRD8@y05|jPb7~Wi-7vP;gP%$VFM29$DxaC^CNo zMetg06nT5&SH6NZ4_-e=*N5NXp~A;6IRPV-0rUU@vWU?F!U9}VGrq#>HE+Ulbp1j+ zc^{B{H@^8Y@&^#fe*k*Ay!_=|6Lq;tLRdZ!;9m11zY7K$KaMHpg;V6;B0!yi{mxl8 z;Qfr`OkEF-tUHSP+=qqm%KxD+1~-3t|Gnf6_dWw<^O?P^!25PNp+sGmwnucqfnwn( zaKunxyHvtB4Dix7GgCs*zX3M7{T(3HR@J6ok!Swj{x+9(m~+R1KrH0_R#ruEb$E!CX z^`|2ZP6FuRpfK24UpfE@p!&mV@E{9zU>>v$Z?z_k@SIdW31uq3SWCT zfwD_UH{_nOID)Wdk)IJtVk|X-I8n%Y7Wbk@gk|vWxZcfjy!=i1dZzetu{4-Q5^6RQ zXKb)ey)B!=RNh~Ckm32tL-v27BqWD!nji!TkUkwh_ayLnm2A_AeH{X|jhr&o)k$|Yi@NucC3Dup(0;|$O?Q}A5}zdnHWoJvb?bk-6q&n`Pf1cj zE+wcHvloX6-ew05ZNoLZqOC?DxB)c8V1beKGLUs$h}(&r*-l2)dic_)s(GrKvH^4D zn-oVIbZgNfPCHngmm4K>`%4%b)cQnR0~jNb^%7YzVaFmzaAICUhx?$6!yCU}rHNAE*c8nm%!Mt^N!u}%h8l{H<_5!%=4I33|Y(cv{{ zl8=z)kt}-y<()_%)6?%Uvbql$7c5Aw>U?&fe!u4f z!_-M1LR6=Q6CVt!n%r3T=8BP1)#=BN2f~c*f#82gzju6SXse8u4}BCA8EDc--5{p` zPzrvlfN#Qr>hk}$_a*9W97&q5Qi44Vz#>6Xw)+4@Y9xwobF9lEJ>9(&%?~6%vLp}% zp#aM4v7TcdXkTpO$|Le9fRg5$Z+2JRChEw_GcqzFGV%|TsG1^@K_)jc8WwmpnhagG ziPV1qa6_JvGK_qBE<^SqGHIIYx%8}iWE>At+$vauQffMOF{g?lQkNg5w|og6e+|oI z6C|PMyFtK!-ckgWc#mI%lV56rH z1`{8Y)StV<-T-QTGZF`$-r0CD>-fw@!k>4%qL5Q9uBYD0B$fnOn*t-kCx?(tA0K}( zg@E>j&bSG&0^3|w<6-q-LLs;!VoxzKPoRGdT|u#?5811kRb$%$#@E>dpiR$%AZ_5Q z6_61Lo@HjD$5NLbi>pDsP8meb81ys?m~Qh;4{<(QWD@Btmr_%v2{=laYdeziY&w&~ zbh{>WcfvDYxm-g(t#F^Bw4dFN*&2U1ceqB<30H*Nq1Y714(;*G&D;s?*(_W_eBZwG zVutc{b-~PlUvy4`Ctl*%Ai+T z(HW-bhCKZpWH8I^HcCF_qT?2HL#AsoG@=29jSlreRf%Nui2+RZsHm(-g6MzCyf!I$-|fBMJ< z-v~kDgKja}`kJI%D=6YtXa-8kTurA<69Tyj_VwN7cfKGb6$n@L71p?qt|6Q=%NoTa zxj@zVat4A@(N~$7Fbco_ZX18g`N)>Tj<>kclOTZ&TXv5x9u;j?yxKuQRO?4Yix3dd zWX0+GL9r&>B4_S(h`ofGrkJrQ$lIOG+xI-Q3Z+|mQo)|&mqBPq+ky;;g@H{`pcH;@ z(B@0%18cDMvKAb-oyZu%i9;n61O0s%{@m-?KmYN&O&uxLeRmdr$1i{C>OA*q_Lp}J zrTsBcR&Ec>e)MhhQD7$S=$#%G{-y76#d?qU{!lbf*B>`kQUvphlYUD{ztu?@>?F>W zQhKAG8R5nBa5@YQM@H`-pPw&ggL6Cx-_!V`xaHEai2>IL3R{zt000_~4m#nhN4N|3`WvG{9bT*LfJMBj)Qrl5?Mi=>Ap`{R!o!08eY&|TP=ePC71k;`m_$}Q z$%TR-3~tv7P&m*owpNriDeQQ0NHH@w?g7Q9q$2IX6r3_&lwWf=9P+Gxrs4z#ogQ#4 zq;mFvqNyu2!aSuLuLL&gQP4?X8Myi`rs(6eKN(^qD&Qc_4`N%lhO&w_%eiUsnF&hW z=O4u){pO~QVE8EL(K2FKmqSKJ;QwNy=yc+?tb6S{#CGG;E+qcCceuaz@F6}~>C)l%k~ekowM89Yx}QT1#h_Sg=-OY>SCz zZKW2voaHjjYJks#=P1|uT`>Ade&K=*6pH6EK#5f2@x2hG^muTGuvgX z)!v30NMR{n6N%iDo@l15b=8cw&oo1Vg~Fi_|U#As>u?CiACkyUJ}6e6qVvP5UI|#eZmO z>=mL~K|3$Mb=rf;IV_gdtluA&H^&xe;a|y5aIK}nr?k2!$6M$R0Xg;H!>elcLSYxm zdY*19cJ4U>h`tgxuNDJ)*jp@^VLD-%JRC=FLRIP*KJ1W6iK)byzEZb2+g^ z=D9n;3h=CocJ~abk&%xqx=zwjs-PTMkTMuBTPF-X_QB)`0S! z!6vsQNHV&1uuvuwv>5PMN2yfi`x9?Gh=*XlrY4+67;T6%a1)k-X?BDG(N9;U4fhv) zDyj!JRHM|Uv`(Z!l~Yui`XlPBQslb~r3?96Hwq$WjPM&>t8aFpW8f#hFBUDkZ_W6G_g0?qgVq z+dagTvx&Vh1|YfQH9Ri>Eq>c1VhWYsnJi=4bG+G+prSe7pYsQkq+#le&f_Pe86yh7E z+F+)Gf}kT$sbJz3srHyvUs-v7Y(Lm&g8ndT;p7fO5AF4rJ68#K;d7!!r%Qq!m1@C& zZbf}zY8zP5;IoZiaS7dEvlyw(G?5aDoRJZTZQ;3hN}ezPW42BK-^C`z*^whzr$t)+ zysC;ZLagz33|-avx_5R9wK_5qyUmhM8xyHyl46M*DzVqfR1g)ZYtXoVkI*RLK;)Ww zfUDg8Wl}Gu(`p8N!F@~2q@5@y+l3(05vPkfa5=rC7`7tBMvkp$A!gaD5d$eyp?TKo zAvU7q)=3wow}>apmrC)-b6--;z9`8d#ZX#GG+=yYmMmM1#rnWINF&CSGDE+hK z?`P`-gE{)3PZFR=eu);JKB?7rJ8AAgfVCeE(tTI2yJy zjVBf_M@^-1LmUu)JTN;#ST%m^k%TXEYG=n^Msw(4xq}tOjxIRIq=IH5Xt2!^`OUKu zrPGnxIuvE=m~?TnBeg{_-$!$Sxp_7kP}Ie?QLkO9VcY2CQS`*m2%K@lhLMJ-8HTgz zNB~Uh$Mhy00L*}c8cUrYLdR@qJ%Xo4Kfd07{Pf@{?nniHd$Y*pmMuD3Qs>t;JWiU; zB*s0UH!9dhI!PSQc|=L<7yamPn?P2`F~e#ySOKsC7ZORmt+6WPsd1w8v(-a(>OkS7 z6;e}r)HfN$Fns(W?Rb0bzqj!#ZYq8)5+CKnyW%Ea{=#KU_tEqW`*FcIlreIK%)iB1 zPw>;oU# z~aPP_Qz}Vi*i~tkMi{G8)$4Vl*8ED zOD6@QJs%z7zFD4Exy8z8g=(CrBh)0#45g`mP}^kKR-=ebH^Pqn0OXV>h&@+MF89VI zP|@pgSb4Pfi=v+Z zQ>E0RF_;9K>tV@FLlvKhGLBrnoM;?>dkH9T69~BzJJK4*GxF1+*AI7!??bz2!sR}B zh}AbSHc^vh>Yq3B|6h=-csk(vr#VX6uG_r4&&B;(?H2|PKC*`=yBHyVF%lEHgheLu zqO*!gzuO8kwX2#%i1dq!iC#t^#Wy^&Tpl?maFEREFsmsj@f6Q8VN#hkel4$m(N%uQ zE|BgS7JbhwNcX`td)-H((+YZ*sM+(QtHt%%1ZaHaHNg8Oq@u9*NVmSeL`e}b@>a9p zH>;F(?>~N3NHMZcf}Q`G9t0){ldi{*<$fdLjhDc}p?b_(RA-}lF^=8b)1~6i;~L4r zl2W)ulN>{BOG)f8Nv}YAkY)*gF)5_khP_Z2C%bb3*J`U3?h~Dru)JaXklQEZQgeP| zVmNbH5(?QoCYRnt`Db`cq9$_oz)pum@t4iwo8T0nwNUr$Y+(_CC(>nk5w60R)i*oE zw|O%c*9;{DXrQSki@^MhuA^$mXAcVkT;TL@lRUPOC1m_}Y8Z(yTDS^-X-MCmuEr2r zi`kgiuqz1@%@|^JQ)X;%{O3f?7c@hgT{*$9?mU8Y$GpXg$uxs^|WfeY4A>XfbGxMA+ zbQp8h{G#*aV>C9@oljC#wr@JNnRnywHm>Mk4w>k2Gd^`|f68dI6m`*O+Dr>ca z?2o0CgVVX5ohLYPqc}9X4#nxz(PF!9ZRcMFVs2U}4n)0Ak`F&ofL>zyZkBido3{x3 z%4NsO0=*?XaAIqJaez&q8O7w6OB9?XBUCi)y|1$M-stdy^E>=GDVZ-lgr=}KX+^j9cH;hG2~Wr=f>Q%6!h20PqK!iC99o@L07!?sXAKhU>^s3RgH%S?jY-S?3&nVQ#*~Lo7=K(I z;NXTK+z&T@v)T9k*IQB){2lJP);mHwQTVgk^corK;WtQXy4SuA{VX~*gNH6LoiDqX zlWWn}y|WRBwxh0en9e_N%ry=VZY;OD+Ns|IK=(gzWU$HOpC)|McQk_bxd(_Ru%;`5 zATqA$c~!kDN4BpK2fscY@!{p2t#&sBCa?@`?Vj0xFpVP}NEI>I!7Fsci%!(9AlR)K z>VgZLjiks^_-~Br&FGZkA)j8sI0e-IQGDxYfw)b&kviO)Sw2JrPxR-DIr(Y6Ji}N& z=za;xf<2VI#`{Y!_3i6=G=ElJj1X*KH95rlph?2e&Q|V&Q5-}e^08$J9Ct8;xC9EJ zt*Wbknam|Nv zUK#p~C_7!LfA?ULbqd^#1IcNMdL<-;j%){iKG~!3m~;j4wbc0!&WL&Si|@bBG%4?8 zZs%lw<>{(>_4=}}#xUodUh-i#`bkqeGOlpOl8KJ!H+n-BTzd7l(b-SsydlBM@Le!H zD_0s$j4*Y_I#Oi(+FcGkx$s>OZ9m4LZLyc0QLqbC(zV%RiRKo1n0uwPpT2yKEBV2H z1nM$((R~_P@G)RInonvMe-269+WB}3ugB{q^i`J$opqYhPN zA#DCCMWylVmzG4X&@!j6NyjJ6j?jAB3Q=9z?b&8=(oh(s_e-<6MC^cvaWyat)c+;Z zc0zI&aVF-EQ-y*fGLaB7n)y4sbq?1q&>}lXSW3L=`l+3hPYef^AymDks(aX!5=|>xxVaR6kejHU z_cq?tvcYdNOKe%&{K%KW-lHpp|6qk`3z_B?W;f!g2KDV#YFYKB)ZnI(x|5X5%EZ!v zGjKt7b*HlAA4ZW=?T<-oNk;_Ym%yg-i5$Lbl9S?zk|RR}47$QB@*q2rIjqEMN`c{Q zaHML$i4+GZRUhwluxYf^`w3Hj;f7JjrYutv|m(>UIS+~et&67oDL`>x$!hQOy76X@EirVc{5Scl8!2QPj( z+V?WeaQ;;NlKz`|I^+7~wLg=PH~Cr{8y`M==v`LT<#>el<_)W{Yz(G<PdiVtb-LRM7*bB;{9z58WBdiw~bXQ zYSB4FnFP9#?bP$Cpt#B15H*wX+*&cuEzV?Uct(`lvJmY$I~rx`P+WF()^+Fy;4}Ty zw2r!5NK@fv`R1o!Qj;owpt@XJVyq#>tR<~^s~Z`A<6QC;OoY&l>nUni2L2`lz`^~a zKhyEYm1MNs(&!z2(|K=w%NRQ(@cuLkAz+=u>}p$=jdsfAxRDlKi=q`a#U{e{YlVfQ zSQGzdf#|c4mbq10!XfSyzZ{sLjqUezz^c+z@*I4p09a=7z;HXob` z7y&^MyqOe53VHw&o1kfIZrY(>n0UYI0v6Nf142XC@v#u32#WC}pHo<8fj)RMdAI>J z!e5Lt%(cKO@@H}`l^)ybL4{BUTt8dP=P*yHw&t1&Xg`J5#TazNHv7)++($zeS;2QU zb!OPpJLINJekkjI-aThVj{We@W0Ce5SCTAP1-dcsY`Jo_QU&p$URMy`b3yy-bfXF~ z&zcH)kSYj|_4+O1doD;039Ew4v!;T+<$}zBse!`%T2ROBNSS-D3b^4c1W;Y0%C0J4 zp7|B9C4aZM`*0&Hfbr?B`{fqDR$l0MAbM2hC>R6 zouF`T)SK4h;jkFc4$qsGtNZtxyZ4#WQh;MwgXo4Wdp}z@o*=Hy=^px{Ap-sR zq@o;lUsQ$N#K#9-N99V~4bu#~1heaGKj2|>;3oxxVcQD+dDG5#%FWN*XFJ>z?z=xl zMCT=@;|SM(zd9<#o!f1@mJc#YRrkng5C#n`vx29vA%VqR!>cLD1I$Sv z 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 diff --git a/builds/crx/script.js b/builds/crx/script.js index d171dbae8..22312bf53 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -23,7 +23,6 @@ (function() { var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, Icons, ImageExpand, ImageHover, ImageReplace, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation, __slice = [].slice, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; @@ -6414,11 +6413,11 @@ }); }, sync: function(hiddenPSAs) { - var btn, psa, _ref, _ref1; + var btn, psa, _ref; btn = PSAHiding.btn; psa = $.id('globalMessage'); - return _ref1 = (_ref = PSAHiding.trim(psa), __indexOf.call(hiddenPSAs, _ref) >= 0) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref1[0], btn.innerHTML = _ref1[1], btn.className = _ref1[2], _ref1; + return _ref = hiddenPSAs.contains(PSAHiding.trim(psa)) ? [true, '[ + ]', 'show-announcement'] : [false, '[ - ]', 'hide-announcement'], psa.hidden = _ref[0], btn.innerHTML = _ref[1], btn.className = _ref[2], _ref; }, trim: function(psa) { return psa.textContent.replace(/\W+/g, '').toLowerCase(); @@ -8735,7 +8734,7 @@ a.setAttribute('data-postid', postID); } } - if (__indexOf.call(this.quotes, quoteID) < 0) { + if (!this.quotes.contains(quoteID)) { this.quotes.push(quoteID); } if (!a) { diff --git a/src/appchan.coffee b/src/appchan.coffee index 5c4b9ecd2..37c206d27 100644 --- a/src/appchan.coffee +++ b/src/appchan.coffee @@ -20,9 +20,9 @@ Style = @setup() - agent: "<% if (type === 'crx') { %>-webkit-<% } else if (type === 'userjs') { %>-moz-<% } else { %>-o-<% } %>" + agent: "<% if (type === 'crx') { %>-webkit-<% } else if (type === 'userscript') { %>-moz-<% } else { %>-o-<% } %>" - sizing: "<% if (type === 'userjs') { %>-moz-<% } else { %><% } %>box-sizing" + sizing: "<% if (type === 'userscript') { %>-moz-<% } else { %><% } %>box-sizing" setup: -> @addStyleReady() diff --git a/src/features.coffee b/src/features.coffee index 88c1dea41..16bf507c4 100644 --- a/src/features.coffee +++ b/src/features.coffee @@ -343,7 +343,7 @@ PSAHiding = sync: (hiddenPSAs) -> {btn} = PSAHiding psa = $.id 'globalMessage' - [psa.hidden, btn.innerHTML, btn.className] = if PSAHiding.trim(psa) in hiddenPSAs + [psa.hidden, btn.innerHTML, btn.className] = if hiddenPSAs.contains PSAHiding.trim psa [true, '[ + ]', 'show-announcement'] else [false, '[ - ]', 'hide-announcement'] @@ -2246,7 +2246,7 @@ Quotify = a.setAttribute 'data-boardid', boardID a.setAttribute 'data-postid', postID - unless quoteID in @quotes + unless @quotes.contains quoteID @quotes.push quoteID unless a