From a7b2565e5bc3d73e010c4a374ad026b5494c93dc Mon Sep 17 00:00:00 2001 From: Kabir Sala Date: Mon, 10 Feb 2014 04:45:04 +0100 Subject: [PATCH] Copy more from Zixaphir and Mayhem, proper(?) fix for Chrome --- builds/4chan-X.user.js | 20 +- builds/crx 1/icon128.png | Bin 0 -> 196 bytes builds/crx 1/icon16.png | Bin 0 -> 157 bytes builds/crx 1/icon48.png | Bin 0 -> 204 bytes builds/crx 1/manifest.json | 22 + builds/crx 1/script.js | 12724 ++++++++++++++++++++++++++++++++ builds/crx.crx | Bin 192419 -> 192437 bytes builds/crx/script.js | 25 +- src/General/Header.coffee | 2 +- src/Posting/QR.captcha.coffee | 5 - src/Posting/QR.coffee | 15 +- 11 files changed, 12766 insertions(+), 47 deletions(-) create mode 100644 builds/crx 1/icon128.png create mode 100644 builds/crx 1/icon16.png create mode 100644 builds/crx 1/icon48.png create mode 100644 builds/crx 1/manifest.json create mode 100644 builds/crx 1/script.js diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 2524ea6ce..c453a5587 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -1980,7 +1980,8 @@ args = bottom ? ['bottom-header', 'top-header', 'bottom', 'after'] : ['top-header', 'bottom-header', 'top', 'add']; $.addClass(doc, args[0]); $.rmClass(doc, args[1]); - return Header.bar.parentNode.className = args[2]; + Header.bar.parentNode.className = args[2]; + return $[args[3]](Header.bar, Header.noticesRoot); }, toggleBarPosition: function() { $.cb.checked.call(this); @@ -5486,15 +5487,10 @@ return QR.status(); }, focusin: function() { - return $.addClass(QR.nodes.el, 'has-focus'); + return $.addClass(QR.nodes.el, 'focus'); }, focusout: function() { - return $.queueTask(function() { - if ($.x('ancestor::div[@id="qr"]', d.activeElement)) { - return; - } - return $.rmClass(QR.nodes.el, 'has-focus'); - }); + return $.rmClass(QR.nodes.el, 'focus'); }, hide: function() { d.activeElement.blur(); @@ -5823,8 +5819,6 @@ $.on(elm, 'blur', QR.focusout); $.on(elm, 'focus', QR.focusin); } - $.on(dialog, 'focusin', QR.focusin); - $.on(dialog, 'focusout', QR.focusout); $.on(nodes.autohide, 'change', QR.toggleHide); $.on(nodes.close, 'click', QR.close); $.on(nodes.dumpButton, 'click', function() { @@ -6139,12 +6133,6 @@ input: input }; $.on(input, 'focus', this.setup); - $.on(input, 'focus', function() { - return $.addClass(QR.nodes.el, 'focus'); - }); - $.on(input, 'blur', function() { - return $.rmClass(QR.nodes.el, 'focus'); - }); $.on(input, 'blur', QR.focusout); $.on(input, 'focus', QR.focusin); $.addClass(QR.nodes.el, 'has-captcha'); diff --git a/builds/crx 1/icon128.png b/builds/crx 1/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..e75a8f86b88550d547e7da12fda96353695dfaa7 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?K3?%mjbVdLv&H$efR|bZ3AT#ZZapd-^xj+_U zNswPKgTu2MX+TbW ztCL|7Fr038M26#mTipSMZHk}Yc{H3$nRO|Zks<#2R5ghLrKb{1C32s3I0zh&oN8od p(D1i@!qQW+oE5&IS0^&;k<;S+qo-=p<^r^o!PC{xWt~$(69B9bKhyvK literal 0 HcmV?d00001 diff --git a/builds/crx 1/icon16.png b/builds/crx 1/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d2a71e8d6bd5c277ffb3bc328a2f3422125f70 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t_%$6KxWz*s?OP}IZk2rQvoXB$oY4FIJ-^KlvWGt+ub|aObH&<(LXm$q z!kip`qW7hA225i69`O8wer@2vuG&&I_Q2IOYuMO7u$W}`7c(jFuV7?bvipl^!FAm= xoSXRKs^49n+}d5A9O7u)@W7(x%!R^WW~Fx%>hH{yd +* http://zixaphir.github.io/appchan-x/ +* 4chan x Copyright © 2009-2011 James Campos +* https://github.com/aeosynth/4chan-x +* 4chan x Copyright © 2012-2014 Nicolas Stepien +* https://4chan-x.just-believe.in/ +* 4chan x Copyright © 2013-2014 Jordan Bates +* http://seaweedchan.github.io/4chan-x/ +* 4chan x Copyright © 2012-2014 ihavenoface +* http://ihavenoface.github.io/4chan-x/ +* 4chan SS Copyright © 2011-2013 Ahodesuka +* https://github.com/ahodesuka/4chan-Style-Script/ +* +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without +* restriction, including without limitation the rights to use, +* copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following +* conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* Contributors: +* aeosynth +* mayhemydg +* noface +* !K.WeEabo0o +* blaise +* that4chanwolf +* desuwa +* seaweed +* e000 +* ahodesuka +* Shou +* ferongr +* xat +* Ongpot +* thisisanon +* Anonymous +* Seiba +* herpaderpderp +* WakiMiko +* btmcsweeney +* AppleBloom +* detharonil +* +* All the people who've taken the time to write bug reports. +* +* Thank you. +*/ + +/* +* Contains data from external sources: +* +* audio/beep.wav from http://freesound.org/people/pierrecartoons1979/sounds/90112/ +* cc-by-nc-3.0 +* +* 4chan/4chan-JS (https://github.com/4chan/4chan-JS) +* Copyright (c) 2012-2013, 4chan LLC +* All rights reserved. +* +* license: https://github.com/4chan/4chan-JS/blob/master/LICENSE +*/ +'use strict'; + +(function() { + var $, $$, Anonymize, ArchiveLink, AutoGIF, Banner, Board, Build, Callbacks, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DeleteLink, Dice, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Gallery, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Index, InfiniScroll, Keybinds, Linkify, Main, Menu, Nav, Notice, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, + __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; }, + __slice = [].slice, + __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; }, + __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Array.prototype.indexOf = function(val) { + var i; + i = this.length; + while (i--) { + if (this[i] === val) { + return i; + } + } + return i; + }; + + __indexOf = [].indexOf; + + Config = { + main: { + 'Miscellaneous': { + 'Catalog Links': [true, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], + 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], + 'QR Shortcut': [false, 'Adds a small [QR] link in the header.'], + 'Announcement Hiding': [true, 'Add button to hide 4chan announcements.'], + 'Desktop Notifications': [false, 'Enables desktop notifications across various 4chan X features.'], + '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': [true, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'], + 'File Info Formatting': [true, 'Reformat the file information.'], + '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.'], + 'Show Dice Roll': [true, 'Show dice that were entered into the email field.'], + 'Custom Board Titles': [true, 'Allow editing of the board title and subtitle by ctrl+clicking them'], + 'Persistent Custom Board Titles': [false, 'Force custom board titles to be persistent, even if moot updates the board titles.'], + 'Show Updated Notifications': [true, 'Show notifications when 4chan X is successfully updated.'], + 'Emoji': [false, 'Adds icons next to names for different emails'], + 'Color User IDs': [false, 'Assign unique colors to user IDs on boards that use them'], + 'Remove Spoilers': [false, 'Remove all spoilers in text.'], + 'Reveal Spoilers': [false, 'Indicate spoilers if Remove Spoilers is enabled, or make the text appear hovered if Remove Spoiler is disabled.'] + }, + '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, and Github gists'] + }, + 'Filtering': { + 'Anonymize': [false, 'Make everyone Anonymous.'], + 'Filter': [true, 'Self-moderation placebo.'], + 'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'], + 'Thread Hiding Buttons': [false, 'Add buttons to hide entire threads.'], + 'Reply Hiding Buttons': [false, 'Add buttons to hide single replies.'], + 'Filtered Backlinks': [true, 'When enabled, shows backlinks to filtered posts with a line-through decoration. Otherwise, hides the backlinks.'], + 'Stubs': [true, 'Show stubs of hidden threads / replies.'] + }, + 'Images': { + 'Image Expansion': [true, 'Expand images.'], + 'Image Hover': [true, 'Show full image on mouseover.'], + 'Gallery': [true, 'Adds a simple and cute image gallery.'], + 'Sauce': [true, 'Add sauce links to images.'], + 'Reveal Spoiler Thumbnails': [false, 'Replace spoiler thumbnails with the original image.'], + 'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'], + 'Replace PNG': [false, 'Replace pngs.'], + 'Replace JPG': [false, 'Replace jpgs.'], + 'Image Prefetching': [false, 'Preload images'], + 'Fappe Tyme': [false, 'Hide posts without images. *hint* *hint*'], + 'Werk Tyme': [false, 'Hide all post images.'] + }, + 'Menu': { + 'Menu': [true, 'Add a drop-down menu to posts.'], + 'Report Link': [true, 'Add a report link to the menu.'], + 'Thread Hiding Link': [true, 'Add a link to hide entire threads.'], + 'Reply Hiding Link': [true, 'Add a link to hide single replies.'], + '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.'], + 'Hide Unread Count at (0)': [false, 'Hide the unread posts count in the tab title when it reaches 0.'], + 'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'], + 'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.'], + 'Scroll to Last Read Post': [true, 'Scroll back to the last read post when reopening a thread.'], + 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'], + 'Thread Stats': [true, 'Display reply and image count.'], + 'Page Count in Stats': [false, 'Display the page count in the thread stats as well.'], + 'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'], + 'Thread Watcher': [true, 'Bookmark threads.'], + 'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.'] + }, + 'Posting': { + 'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'], + 'Persistent QR': [true, 'The Quick reply won\'t disappear after posting.'], + 'Auto Hide QR': [true, '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, 'Indicate the remaining time before posting again.'], + 'Cooldown Prediction': [true, 'Decrease the cooldown time by taking into account upload speed. Disable it if it\'s inaccurate for you.'], + 'Posting Success Notifications': [true, 'Show notifications on successful post creation or file uploading.'], + 'Captcha Warning Notifications': [true, 'When disabled, shows a red border on the CAPTCHA input until a key is pressed instead of a notification.'] + }, + 'Quote Links': { + 'Quote Backlinks': [true, 'Add quote backlinks.'], + 'OP Backlinks': [true, 'Add backlinks to the OP.'], + 'Quote Inlining': [true, 'Inline quoted post on click.'], + 'Quote Hash Navigation': [false, 'Include an extra link after quotes for autoscrolling to quoted posts.'], + '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.'], + 'Quoted Title': [false, 'Change the page title to reflect you\'ve been quoted.'], + 'Highlight Posts Quoting You': [false, 'Highlights any posts that contain a quote to your post.'], + 'Highlight Own Posts': [false, 'Highlights own posts if Mark Quotes of You is enabled.'], + 'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'], + 'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'], + 'Quote Threading': [true, 'Thread conversations'] + } + }, + imageExpansion: { + 'Fit width': [false, ''], + 'Fit height': [false, ''], + 'Expand spoilers': [true, 'Expand all images along with spoilers.'], + 'Expand from here': [false, 'Expand all images only from current position to thread end.'], + 'Advance on contract': [false, 'Advance to next post when contracting an expanded image.'] + }, + gallery: { + 'Hide Thumbnails': [false], + 'Fit Width': [true], + 'Fit Height': [true] + }, + threadWatcher: { + 'Current Board': [false, 'Only show watched threads from the current board.'], + 'Auto Watch': [true, 'Automatically watch threads you start.'], + 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'], + 'Auto Prune': [false, 'Automatically prune 404\'d threads.'] + }, + 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: "", + 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/", + FappeT: { + fappe: false, + werk: false + }, + 'sageEmoji': '4chan SS', + 'emojiPos': 'before', + 'Custom CSS': false, + Index: { + 'Index Mode': 'paged', + 'Index Sort': 'bump', + 'Show Replies': true, + 'Anchor Hidden Threads': true, + 'Refreshed Navigation': false + }, + Header: { + 'Fixed Header': true, + 'Header auto-hide': false, + 'Header auto-hide on scroll': false, + 'Bottom Header': false, + 'Centered links': false, + 'Header catalog links': false, + 'Bottom Board List': true, + 'Shortcut Icons': true, + 'Custom Board Navigation': true + }, + boardnav: "[ toggle-all ]\na-replace\nc-replace\ng-replace\nk-replace\nv-replace\nvg-replace\nvr-replace\nck-replace\nco-replace\nfit-replace\njp-replace\nmu-replace\nsp-replace\ntv-replace\nvp-replace\n[external-text:\"FAQ\",\"https://github.com/seaweedchan/4chan-x/wiki/Frequently-Asked-Questions\"]", + QR: { + 'QR.personas': "#email:\"sage\";boards:jp;always" + }, + 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.'], + 'Toggle header': ['Shift+h', 'Toggle the auto-hide option of the header.'], + 'Open empty QR': ['i', 'Open QR without post number inserted.'], + 'Open QR': ['Shift+i', '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.'], + 'Toggle sage': ['Alt+s', 'Toggle sage in email field'], + 'Submit QR': ['Ctrl+Enter', '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.'], + 'Open Gallery': ['g', 'Opens the gallery.'], + 'fappeTyme': ['f', 'Fappe Tyme.'], + 'werkTyme': ['Shift+w', 'Werk Tyme'], + 'Front page': ['0', 'Jump to page 0.'], + 'Open front page': ['Shift+0', 'Open page 0 in a new tab.'], + 'Next page': ['Shift+Right', 'Jump to the next page.'], + 'Previous page': ['Shift+Left', 'Jump to the previous page.'], + 'Open catalog': ['Shift+c', 'Open the catalog of the current board'], + 'Search form': ['Ctrl+Alt+s', 'Focus the search field on the board index.'], + 'Next thread': ['Shift+Down', 'See next thread.'], + 'Previous thread': ['Shift+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.'], + 'Deselect reply': ['Shift+d', 'Deselect reply.'], + 'Hide': ['x', 'Hide thread.'], + 'Previous Post Quoting You': ['Alt+Up', 'Scroll to the previous post that quotes you.'], + 'Next Post Quoting You': ['Alt+Down', 'Scroll to the next post that quotes you.'] + }, + 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: '1.3.4', + NAMESPACE: '4chan X.', + boards: {}, + threads: {}, + posts: {} + }; + + $ = function(selector, root) { + if (root == null) { + root = d.body; + } + return root.querySelector(selector); + }; + + $.extend = function(obj, prop) { + var key, val; + for (key in prop) { + val = prop[key]; + if (prop.hasOwnProperty(key)) { + obj[key] = val; + } + } + }; + + $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); + + $.id = function(id) { + return d.getElementById(id); + }; + + $.ready = function(fc) { + var cb; + if (d.readyState !== 'loading') { + $.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) { + if (typeof val === 'object' && 'newName' in val) { + fd.append(key, val, val.newName); + } else { + fd.append(key, val); + } + } + } + return fd; + }; + + $.extend = function(object, properties) { + var key, val; + for (key in properties) { + val = properties[key]; + object[key] = val; + } + }; + + $.ajax = (function() { + var lastModified; + lastModified = {}; + return function(url, options, extra) { + var form, r, sync, type, upCallbacks, whenModified; + if (extra == null) { + extra = {}; + } + type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync; + r = new XMLHttpRequest(); + type || (type = form && 'post' || 'get'); + r.open(type, url, !sync); + if (whenModified) { + if (url in lastModified) { + r.setRequestHeader('If-Modified-Since', lastModified[url]); + } + $.on(r, 'load', function() { + return lastModified[url] = r.getResponseHeader('Last-Modified'); + }); + } + $.extend(r, options); + $.extend(r.upload, upCallbacks); + r.send(form); + return r; + }; + })(); + + $.cache = (function() { + var reqs; + reqs = {}; + return function(url, cb, options) { + var err, req, rm; + if (req = reqs[url]) { + if (req.readyState === 4) { + cb.call(req, req.evt); + } else { + req.callbacks.push(cb); + } + return; + } + rm = function() { + return delete reqs[url]; + }; + try { + req = $.ajax(url, options); + } catch (_error) { + err = _error; + return; + } + $.on(req, 'load', 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); + } + this.evt = e; + return delete this.callbacks; + }); + $.on(req, 'abort error', 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, id) { + var style; + style = $.el('style', { + id: id, + 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, 7, 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 __indexOf.call(el.classList, className) >= 0; + }; + + $.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, _i, _len, _ref; + _ref = __slice.call(root.childNodes); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + node = _ref[_i]; + 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(URL) { + return window.open(URL, '_blank'); + }; + + $.debounce = function(wait, fn) { + var args, exec, lastCall, that, timeout; + lastCall = 0; + timeout = null; + that = null; + args = null; + exec = function() { + lastCall = Date.now(); + return fn.apply(that, args); + }; + return function() { + args = arguments; + that = this; + if (lastCall < Date.now() - wait) { + return exec(); + } + clearTimeout(timeout); + 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]; + }; + + $.minmax = function(value, min, max) { + return (value < min ? min : value > max ? max : value); + }; + + $.item = function(key, val) { + var item; + item = {}; + item[key] = val; + return item; + }; + + $.syncing = {}; + + $.sync = (function() { + chrome.storage.onChanged.addListener(function(changes) { + var cb, key; + for (key in changes) { + if (cb = $.syncing[key]) { + cb(changes[key].newValue, key); + } + } + }); + return function(key, cb) { + return $.syncing[key] = cb; + }; + })(); + + $.localKeys = ['name', 'uniqueID', 'tripcode', 'capcode', 'email', 'subject', 'comment', 'flag', 'filename', 'dimensions', 'filesize', 'MD5', 'usercss']; + + $["delete"] = function(keys) { + return chrome.storage.sync.remove(keys); + }; + + $.get = function(key, val, cb) { + var count, done, items, localItems, syncItems; + if (typeof cb === 'function') { + items = $.item(key, val); + } else { + items = key; + cb = val; + } + localItems = null; + syncItems = null; + for (key in items) { + val = items[key]; + if (__indexOf.call($.localKeys, key) >= 0) { + (localItems || (localItems = {}))[key] = val; + } else { + (syncItems || (syncItems = {}))[key] = val; + } + } + count = 0; + done = function(item) { + if (chrome.runtime.lastError) { + c.error(chrome.runtime.lastError.message); + } + $.extend(items, item); + if (!--count) { + return cb(items); + } + }; + if (localItems) { + count++; + chrome.storage.local.get(localItems, done); + } + if (syncItems) { + count++; + return chrome.storage.sync.get(syncItems, done); + } + }; + + $.set = (function() { + var items, localItems, set; + items = {}; + localItems = {}; + set = $.debounce($.SECOND, function() { + var err, key, _i, _len, _ref; + _ref = $.localKeys; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + if (key in items) { + (localItems || (localItems = {}))[key] = items[key]; + delete items[key]; + } + } + try { + chrome.storage.local.set(localItems); + chrome.storage.sync.set(items); + items = {}; + return localItems = {}; + } catch (_error) { + err = _error; + return c.error(err.stack); + } + }); + return function(key, val) { + if (typeof key === 'string') { + items[key] = val; + } else { + $.extend(items, key); + } + return set(); + }; + })(); + + $$ = function(selector, root) { + if (root == null) { + root = d.body; + } + return __slice.call(root.querySelectorAll(selector)); + }; + + Callbacks = (function() { + function Callbacks() {} + + Callbacks.prototype.push = function(_arg) { + var cb, name; + name = _arg.name, cb = _arg.cb; + return this[name] = cb; + }; + + Callbacks.prototype.clean = function() { + var name; + for (name in this) { + if (this.hasOwnProperty(name)) { + this.rm(name); + } + } + }; + + Callbacks.prototype.rm = function(name) { + return delete this[name]; + }; + + Callbacks.prototype.execute = function(node) { + var err, errors, name; + for (name in this) { + if (this.hasOwnProperty(name)) { + try { + this[name].call(node); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: ['"', name, '" crashed on node No.', node, ' (', node.board, ').'].join(''), + error: err + }); + } + } + } + if (errors) { + return Main.handleErrors(errors); + } + }; + + return Callbacks; + + })(); + + 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.callbacks = new Callbacks(); + + Thread.prototype.toString = function() { + return this.ID; + }; + + function Thread(ID, board) { + this.ID = ID; + this.board = board; + this.fullID = "" + this.board + "." + this.ID; + this.posts = {}; + this.isSticky = false; + this.isClosed = false; + this.postLimit = false; + this.fileLimit = false; + g.threads[this.fullID] = board.threads[this] = this; + } + + Thread.prototype.setPage = function(pageNum) { + var icon, key, _i, _len, _ref; + icon = $('.page-num', this.OP.nodes.post); + _ref = ['title', 'textContent']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + icon[key] = icon[key].replace(/\d+/, pageNum); + } + }; + + Thread.prototype.setStatus = function(type, status) { + var icon, name, root, typeLC; + name = "is" + type; + if (this[name] === status) { + return; + } + this[name] = status; + if (!this.OP) { + return; + } + typeLC = type.toLowerCase(); + if (!status) { + $.rm($("." + typeLC + "Icon", this.OP.nodes.info)); + return; + } + icon = $.el('img', { + src: "//s.4cdn.org/image/" + typeLC + (window.devicePixelRatio >= 2 ? '@2x' : '') + ".gif", + alt: type, + title: type, + className: "" + typeLC + "Icon" + }); + root = type === 'Closed' && this.isSticky ? $('.stickyIcon', this.OP.nodes.info) : g.VIEW === 'index' ? $('.page-num', this.OP.nodes.info) : $('[title="Quote this post"]', this.OP.nodes.info); + return $.after(root, [$.tn(' '), icon]); + }; + + Thread.prototype.kill = function() { + this.isDead = true; + return this.timeOfDeath = Date.now(); + }; + + Thread.prototype.collect = function() { + var post, postID, _i, _len, _ref; + _ref = this.posts; + for (post = _i = 0, _len = _ref.length; _i < _len; post = ++_i) { + postID = _ref[post]; + post.collect(); + } + delete g.threads[this.fullID]; + return delete this.board.threads[this]; + }; + + return Thread; + + })(); + + Post = (function() { + Post.callbacks = new Callbacks(); + + Post.prototype.toString = function() { + return this.ID; + }; + + function Post(root, thread, board, that) { + var capcode, date, email, flag, info, name, post, subject, tripcode, uniqueID; + this.thread = thread; + this.board = board; + if (that == null) { + that = {}; + } + this.ID = +root.id.slice(2); + this.fullID = "" + this.board + "." + this.ID; + if (that.isOriginalMarkup) { + this.cleanup(root); + } + post = $('.post', root); + info = $('.postInfo', post); + this.nodes = { + root: root, + post: post, + info: info, + comment: $('.postMessage', post), + links: [], + quotelinks: [], + backlinks: info.getElementsByClassName('backlink') + }; + if (!(this.isReply = $.hasClass(post, 'reply'))) { + this.thread.OP = this; + this.thread.isSticky = !!$('.stickyIcon', info); + this.thread.isClosed = !!$('.closedIcon', info); + } + 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 = $('.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(); + this.parseFile(that); + this.clones = []; + g.posts[this.fullID] = thread.posts[this] = board.posts[this] = this; + if (that.isArchived) { + this.kill(); + } + } + + Post.prototype.parseComment = function() { + var bq, i, node, nodes, text; + this.nodes.comment.normalize(); + bq = this.nodes.comment.cloneNode(true); + nodes = $$('.abbr, .exif, b', bq); + i = 0; + while (node = nodes[i++]) { + $.rm(node); + } + text = ""; + nodes = $.X('.//br|.//text()', bq); + i = 0; + while (node = nodes.snapshotItem(i++)) { + text += node.data || '\n'; + } + return this.info.comment = text.trim().replace(/\s+$/gm, ''); + }; + + Post.prototype.parseQuotes = function() { + var quotelink, _i, _len, _ref; + this.quotes = []; + _ref = $$('.quotelink', this.nodes.comment); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + quotelink = _ref[_i]; + this.parseQuote(quotelink); + } + }; + + Post.prototype.parseQuote = function(quotelink) { + var fullID, match; + if (!(match = quotelink.href.match(/boards\.4chan\.org\/([^\/]+)\/res\/\d+#p(\d+)$/))) { + return; + } + this.nodes.quotelinks.push(quotelink); + if (this.isClone) { + return; + } + fullID = "" + match[1] + "." + match[2]; + if (__indexOf.call(this.quotes, fullID) < 0) { + return this.quotes.push(fullID); + } + }; + + Post.prototype.parseFile = function(that) { + var anchor, fileEl, fileText, nameNode, size, thumb, unit; + if (!((fileEl = $('.file', this.nodes.post)) && (thumb = $('img[data-md5]', fileEl)))) { + return; + } + anchor = thumb.parentNode; + fileText = fileEl.firstElementChild; + this.file = { + text: fileText, + thumb: thumb, + URL: anchor.href, + size: thumb.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 + "//t.4cdn.org/" + this.board + "/thumb/" + (this.file.URL.match(/(\d+)\./)[1]) + "s.jpg"; + this.file.name = (nameNode = $('span', fileText)) ? nameNode.title || nameNode.textContent : fileText.title; + this.file.name = this.file.name.replace(/%22/g, '"'); + if (this.file.isImage = /(jpg|png|gif)$/i.test(this.file.name)) { + return this.file.dimensions = fileText.textContent.match(/\d+x\d+/)[0]; + } + }; + + Post.prototype.cleanup = function(root) { + var node, _i, _j, _len, _len1, _ref, _ref1; + _ref = $$('.mobile', root); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + node = _ref[_i]; + $.rm(node); + } + _ref1 = $$('.desktop', root); + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + node = _ref1[_j]; + $.rmClass(node, 'desktop'); + } + }; + + 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: this.isReply ? '[Deleted]' : '[Dead]' + }); + $.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.collect = function() { + this.kill(); + delete g.posts[this.fullID]; + delete this.thread.posts[this]; + return delete this.board.posts[this]; + }; + + 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.dataset.clone = index++; + } + }; + + return Post; + + })(); + + Clone = (function(_super) { + __extends(Clone, _super); + + function Clone(origin, context) { + var file, 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.text = file.firstElementChild; + this.file.thumb = $('img[data-md5]', file); + this.file.fullImage = $('.full-image', file); + } + if (origin.isDead) { + this.isDead = true; + } + this.isClone = true; + root.dataset.clone = origin.clones.push(this) - 1; + } + + return Clone; + + })(Post); + + DataBoard = (function() { + DataBoard.keys = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads']; + + function DataBoard(key, sync, dontClean) { + var init, + _this = this; + this.key = key; + this.onSync = __bind(this.onSync, this); + this.data = Conf[key]; + $.sync(key, this.onSync); + if (!dontClean) { + this.clean(); + } + if (!sync) { + return; + } + init = function() { + $.off(d, '4chanXInitFinished', init); + return _this.sync = sync; + }; + $.on(d, '4chanXInitFinished', init); + } + + DataBoard.prototype.save = function() { + return $.set(this.key, this.data); + }; + + 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 this.save(); + }; + + 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 !== void 0) { + ((_base = ((_base1 = this.data.boards)[boardID] || (_base1[boardID] = {})))[threadID] || (_base[threadID] = {}))[postID] = val; + } else if (threadID !== void 0) { + ((_base2 = this.data.boards)[boardID] || (_base2[boardID] = {}))[threadID] = val; + } else { + this.data.boards[boardID] = val; + } + return this.save(); + }; + + 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, val, _ref; + _ref = this.data.boards; + for (boardID in _ref) { + val = _ref[boardID]; + this.deleteIfEmpty({ + boardID: boardID + }); + } + now = Date.now(); + if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) { + this.data.lastChecked = now; + for (boardID in this.data.boards) { + this.ajaxClean(boardID); + } + } + return this.save(); + }; + + DataBoard.prototype.ajaxClean = function(boardID) { + var _this = this; + return $.cache("//a.4cdn.org/" + boardID + "/threads.json", function(e) { + var board, page, thread, threads, _i, _j, _len, _len1, _ref, _ref1; + if (e.target.status !== 200) { + if (e.target.status === 404) { + _this["delete"](boardID); + } + return; + } + 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 _this.save(); + }); + }; + + DataBoard.prototype.onSync = function(data) { + this.data = data || { + boards: {} + }; + return typeof this.sync === "function" ? this.sync() : void 0; + }; + + return DataBoard; + + })(); + + Notice = (function() { + function Notice(type, content, timeout) { + this.timeout = timeout; + this.close = __bind(this.close, this); + this.add = __bind(this.add, 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); + } + + Notice.prototype.setType = function(type) { + return this.el.className = "notification " + type; + }; + + Notice.prototype.add = function() { + if (d.hidden) { + $.on(d, 'visibilitychange', this.add); + return; + } + $.off(d, 'visibilitychange', this.add); + $.add(Header.noticesRoot, this.el); + this.el.clientHeight; + this.el.style.opacity = 1; + if (this.timeout) { + return setTimeout(this.close, this.timeout * $.SECOND); + } + }; + + Notice.prototype.close = function() { + $.off(d, 'visibilitychange', this.add); + return $.rm(this.el); + }; + + return Notice; + + })(); + + RandomAccessList = (function() { + function RandomAccessList() { + this.length = 0; + } + + RandomAccessList.prototype.push = function(item) { + var ID, last; + ID = item.ID; + if (this[ID]) { + return; + } + last = this.last; + item.prev = last; + this[ID] = item; + this.last = last ? last.next = item : this.first = item; + return this.length++; + }; + + RandomAccessList.prototype.after = function(root, item) { + var next; + if (item.prev === root) { + return; + } + this.rmi(item); + next = root.next; + root.next = item; + item.prev = root; + item.next = next; + return next.prev = item; + }; + + RandomAccessList.prototype.prepend = function(item) { + var first; + first = this.first; + if (item === first || !this[item.ID]) { + return; + } + this.rmi(item); + item.next = first; + first.prev = item; + this.first = item; + return delete item.prev; + }; + + RandomAccessList.prototype.shift = function() { + return this.rm(this.first.ID); + }; + + RandomAccessList.prototype.rm = function(ID) { + var item; + item = this[ID]; + if (!item) { + return; + } + delete this[ID]; + this.length--; + this.rmi(item); + delete item.next; + return delete item.prev; + }; + + RandomAccessList.prototype.rmi = function(item) { + var next, prev; + prev = item.prev, next = item.next; + if (prev) { + prev.next = next; + } else { + this.first = next; + } + if (next) { + return next.prev = prev; + } else { + return this.last = prev; + } + }; + + return RandomAccessList; + + })(); + + Polyfill = { + init: function() { + this.notificationPermission(); + this.toBlob(); + return this.visibility(); + }, + notificationPermission: function() { + if (!window.Notification || 'permission' in Notification || !window.webkitNotifications) { + return; + } + return Object.defineProperty(Notification, 'permission', { + get: function() { + switch (webkitNotifications.checkPermission()) { + case 0: + return 'granted'; + case 1: + return 'default'; + case 2: + return 'denied'; + } + } + }); + }, + toBlob: function() { + var _base; + return (_base = HTMLCanvasElement.prototype).toBlob || (_base.toBlob = function(cb) { + var data, i, l, ui8a, _i; + data = atob(this.toDataURL().slice(22)); + l = data.length; + ui8a = new Uint8Array(l); + for (i = _i = 0; _i < l; i = _i += 1) { + ui8a[i] = data.charCodeAt(i); + } + return cb(new Blob([ui8a], { + type: 'image/png' + })); + }); + }, + visibility: function() { + if ('visibilityState' in d) { + return; + } + Object.defineProperties(HTMLDocument.prototype, { + visibilityState: { + get: function() { + return this.webkitVisibilityState; + } + }, + hidden: { + get: function() { + return this.webkitHidden; + } + } + }); + return $.on(d, 'webkitvisibilitychange', function() { + return $.event('visibilitychange'); + }); + } + }; + + Header = { + init: function() { + var barFixedToggler, barPositionToggler, customNavToggler, editCustomNav, footerToggler, headerToggler, linkJustifyToggler, menuButton, scrollHeaderToggler, shortcutToggler, + _this = this; + this.menu = new UI.Menu('header'); + menuButton = $.el('span', { + className: 'menu-button', + innerHTML: '' + }); + barFixedToggler = $.el('label', { + innerHTML: ' Fixed Header' + }); + headerToggler = $.el('label', { + innerHTML: ' Auto-hide header' + }); + scrollHeaderToggler = $.el('label', { + innerHTML: ' Auto-hide header on scroll' + }); + barPositionToggler = $.el('label', { + innerHTML: ' Bottom header' + }); + linkJustifyToggler = $.el('label', { + innerHTML: " Centered links" + }); + customNavToggler = $.el('label', { + innerHTML: ' Custom board navigation' + }); + footerToggler = $.el('label', { + innerHTML: " Hide bottom board list" + }); + shortcutToggler = $.el('label', { + innerHTML: " Shortcut Icons" + }); + editCustomNav = $.el('a', { + textContent: 'Edit custom board navigation', + href: 'javascript:;' + }); + this.barFixedToggler = barFixedToggler.firstElementChild; + this.scrollHeaderToggler = scrollHeaderToggler.firstElementChild; + this.barPositionToggler = barPositionToggler.firstElementChild; + this.linkJustifyToggler = linkJustifyToggler.firstElementChild; + this.headerToggler = headerToggler.firstElementChild; + this.footerToggler = footerToggler.firstElementChild; + this.shortcutToggler = shortcutToggler.firstElementChild; + this.customNavToggler = customNavToggler.firstElementChild; + $.on(menuButton, 'click', this.menuToggle); + $.on(this.headerToggler, 'change', this.toggleBarVisibility); + $.on(this.barFixedToggler, 'change', this.toggleBarFixed); + $.on(this.barPositionToggler, 'change', this.toggleBarPosition); + $.on(this.scrollHeaderToggler, 'change', this.toggleHideBarOnScroll); + $.on(this.linkJustifyToggler, 'change', this.toggleLinkJustify); + $.on(this.headerToggler, 'change', this.toggleBarVisibility); + $.on(this.footerToggler, 'change', this.toggleFooterVisibility); + $.on(this.shortcutToggler, 'change', this.toggleShortcutIcons); + $.on(this.customNavToggler, 'change', this.toggleCustomNav); + $.on(editCustomNav, 'click', this.editCustomNav); + this.setBarFixed(Conf['Fixed Header']); + this.setHideBarOnScroll(Conf['Header auto-hide on scroll']); + this.setBarVisibility(Conf['Header auto-hide']); + this.setLinkJustify(Conf['Centered links']); + this.setShortcutIcons(Conf['Shortcut Icons']); + $.sync('Fixed Header', this.setBarFixed); + $.sync('Header auto-hide on scroll', this.setHideBarOnScroll); + $.sync('Bottom Header', this.setBarPosition); + $.sync('Shortcut Icons', this.setShortcutIcons); + $.sync('Header auto-hide', this.setBarVisibility); + $.sync('Centered links', this.setLinkJustify); + this.addShortcut(menuButton); + $.event('AddMenuEntry', { + type: 'header', + el: $.el('span', { + textContent: 'Header' + }), + order: 107, + subEntries: [ + { + el: barFixedToggler + }, { + el: headerToggler + }, { + el: scrollHeaderToggler + }, { + el: barPositionToggler + }, { + el: linkJustifyToggler + }, { + el: footerToggler + }, { + el: shortcutToggler + }, { + el: customNavToggler + }, { + el: editCustomNav + } + ] + }); + $.on(window, 'load hashchange', Header.hashScroll); + $.on(d, 'CreateNotification', this.createNotification); + $.asap((function() { + return d.body; + }), function() { + if (!Main.isThisPageLegit()) { + return; + } + $.asap((function() { + return $.id('boardNavMobile') || d.readyState !== 'loading'; + }), Header.setBoardList); + $.prepend(d.body, _this.bar); + $.add(d.body, Header.hover); + _this.setBarPosition(Conf['Bottom Header']); + return _this; + }); + $.ready(function() { + var a, cs, footer; + _this.footer = footer = $.id('boardNavDesktopFoot'); + if (a = $("a[href*='/" + g.BOARD + "/']", footer)) { + a.className = 'current'; + $.on(a, 'click', Index.cb.link); + } + cs = $.el('a', { + id: 'settingsWindowLink', + href: 'javascript:;', + textContent: 'Catalog Settings' + }); + if (g.VIEW === 'catalog') { + _this.addShortcut(cs); + } + Header.setFooterVisibility(Conf['Bottom Board List']); + return $.sync('Bottom Board List', Header.setFooterVisibility); + }); + return this.enableDesktopNotifications(); + }, + bar: $.el('div', { + id: 'header-bar' + }), + noticesRoot: $.el('div', { + id: 'notifications' + }), + shortcuts: $.el('span', { + id: 'shortcuts' + }), + hover: $.el('div', { + id: 'hoverUI' + }), + toggle: $.el('div', { + id: 'scroll-marker' + }), + setBoardList: function() { + var a, boardList, btn, fourchannav, fullBoardList; + fourchannav = $.id('boardNavDesktop'); + boardList = $.el('span', { + id: 'board-list', + innerHTML: "" + }); + if (a = $("a[href*='/" + g.BOARD + "/']", boardList)) { + a.className = 'current'; + $.on(a, 'click', Index.cb.link); + } + fullBoardList = $('#full-board-list', boardList); + btn = $('.hide-board-list-button', fullBoardList); + $.on(btn, 'click', Header.toggleBoardList); + $.rm($('#navtopright', fullBoardList)); + $.add(boardList, fullBoardList); + $.add(Header.bar, [boardList, Header.shortcuts, Header.noticesRoot, Header.toggle]); + Header.setCustomNav(Conf['Custom Board Navigation']); + Header.generateBoardList(Conf['boardnav'].replace(/(\r\n|\n|\r)/g, ' ')); + $.sync('Custom Board Navigation', Header.setCustomNav); + return $.sync('boardnav', Header.generateBoardList); + }, + generateBoardList: function(text) { + var as, list, nodes; + list = $('#custom-board-list', Header.bar); + $.rmAll(list); + if (!text) { + return; + } + as = $$('#full-board-list a[title]', Header.bar); + nodes = text.match(/[\w@]+((-(all|title|replace|full|index|catalog|url:"[^"]+[^"]"|text:"[^"]+")|\,"[^"]+[^"]"))*|[^\w@]+/g).map(function(t) { + var a, board, current, 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; + } + if (/^external/.test(t)) { + a = $.el('a', { + href: (t.match(/\,"(.+)"/) || [null, '+'])[1], + textContent: (t.match(/-text:"(.+)"\,/) || [null, '+'])[1], + className: 'external' + }); + 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); + current = $.hasClass(a, 'current'); + if (current) { + $.on(a, 'click', Index.cb.link); + } + a.textContent = /-title/.test(t) || /-replace/.test(t) && current ? a.title : /-full/.test(t) ? "/" + board + "/ - " + a.title : (m = t.match(/-text:"(.+)"/)) ? m[1] : a.textContent; + if (m = t.match(/-(index|catalog)/)) { + a.dataset.only = m[1]; + a.href = "//boards.4chan.org/" + board + "/"; + if (m[1] === 'catalog') { + if (Conf['External Catalog']) { + a.href = CatalogLinks.external(board); + } else { + a.href += 'catalog'; + } + $.addClass(a, 'catalog'); + } + } + if (board === '@') { + $.addClass(a, 'navSmall'); + } + return a; + } + } + return $.tn(t); + }); + return $.add(list, nodes); + }, + toggleBoardList: function() { + var bar, custom, full, showBoardList; + bar = Header.bar; + custom = $('#custom-board-list', bar); + full = $('#full-board-list', bar); + showBoardList = !full.hidden; + custom.hidden = !showBoardList; + return full.hidden = showBoardList; + }, + setLinkJustify: function(centered) { + Header.linkJustifyToggler.checked = centered; + if (centered) { + return $.addClass(doc, 'centered-links'); + } else { + return $.rmClass(doc, 'centered-links'); + } + }, + toggleLinkJustify: function() { + var centered; + $.event('CloseMenu'); + centered = this.nodeName === 'INPUT' ? this.checked : void 0; + Header.setLinkJustify(centered); + return $.set('Centered links', centered); + }, + setBarFixed: function(fixed) { + Header.barFixedToggler.checked = fixed; + if (fixed) { + $.addClass(doc, 'fixed'); + return $.addClass(Header.bar, 'dialog'); + } else { + $.rmClass(doc, 'fixed'); + return $.rmClass(Header.bar, 'dialog'); + } + }, + toggleBarFixed: function() { + $.event('CloseMenu'); + Header.setBarFixed(this.checked); + Conf['Fixed Header'] = this.checked; + return $.set('Fixed Header', this.checked); + }, + setShortcutIcons: function(show) { + Header.shortcutToggler.checked = show; + if (show) { + return $.addClass(doc, 'shortcut-icons'); + } else { + return $.rmClass(doc, 'shortcut-icons'); + } + }, + toggleShortcutIcons: function() { + $.event('CloseMenu'); + Header.setShortcutIcons(this.checked); + Conf['Shortcut Icons'] = this.checked; + return $.set('Shortcut Icons', this.checked); + }, + setBarVisibility: function(hide) { + Header.headerToggler.checked = hide; + $.event('CloseMenu'); + (hide ? $.addClass : $.rmClass)(Header.bar, 'autohide'); + return (hide ? $.addClass : $.rmClass)(doc, 'autohide'); + }, + toggleBarVisibility: function() { + var hide, message; + hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.bar, 'autohide'); + this.checked = hide; + $.set('Header auto-hide', Conf['Header auto-hide'] = hide); + Header.setBarVisibility(hide); + message = "The header bar will " + (hide ? 'automatically hide itself.' : 'remain visible.'); + return new Notice('info', message, 2); + }, + setHideBarOnScroll: function(hide) { + Header.scrollHeaderToggler.checked = hide; + if (hide) { + $.on(window, 'scroll', Header.hideBarOnScroll); + return; + } + $.off(window, 'scroll', Header.hideBarOnScroll); + $.rmClass(Header.bar, 'scroll'); + if (!Conf['Header auto-hide']) { + return $.rmClass(Header.bar, 'autohide'); + } + }, + toggleHideBarOnScroll: function(e) { + var hide; + hide = this.checked; + $.set('Header auto-hide on scroll', hide); + return Header.setHideBarOnScroll(hide); + }, + hideBarOnScroll: function() { + var offsetY; + offsetY = window.pageYOffset; + if (offsetY > (Header.previousOffset || 0)) { + $.addClass(Header.bar, 'autohide'); + $.addClass(Header.bar, 'scroll'); + } else { + $.rmClass(Header.bar, 'autohide'); + $.rmClass(Header.bar, 'scroll'); + } + return Header.previousOffset = offsetY; + }, + setBarPosition: function(bottom) { + var args; + Header.barPositionToggler.checked = bottom; + $.event('CloseMenu'); + args = bottom ? ['bottom-header', 'top-header', 'bottom', 'after'] : ['top-header', 'bottom-header', 'top', 'add']; + $.addClass(doc, args[0]); + $.rmClass(doc, args[1]); + return Header.bar.parentNode.className = args[2]; + }, + toggleBarPosition: function() { + $.cb.checked.call(this); + return Header.setBarPosition(this.checked); + }, + setFooterVisibility: function(hide) { + Header.footerToggler.checked = hide; + return Header.footer.hidden = hide; + }, + toggleFooterVisibility: function() { + var hide, message; + $.event('CloseMenu'); + hide = this.nodeName === 'INPUT' ? this.checked : !!Header.footer.hidden; + Header.setFooterVisibility(hide); + $.set('Bottom Board List', hide); + message = hide ? 'The bottom navigation will now be hidden.' : 'The bottom navigation will remain visible.'; + return new Notice('info', message, 2); + }, + setCustomNav: function(show) { + var btn, cust, full, _ref; + Header.customNavToggler.checked = show; + cust = $('#custom-board-list', Header.bar); + full = $('#full-board-list', Header.bar); + btn = $('.hide-board-list-button', full); + return _ref = show ? [false, true] : [true, false], cust.hidden = _ref[0], full.hidden = _ref[1], _ref; + }, + toggleCustomNav: function() { + $.cb.checked.call(this); + return Header.setCustomNav(this.checked); + }, + editCustomNav: function() { + var settings; + Settings.open('Advanced'); + settings = $.id('fourchanx-settings'); + return $('input[name=boardnav]', settings).focus(); + }, + hashScroll: function() { + var hash, post; + hash = this.location.hash.slice(1); + if (!(/^p\d+$/.test(hash) && (post = $.id(hash)))) { + return; + } + if ((Get.postFromRoot(post)).isHidden) { + return; + } + return Header.scrollTo(post); + }, + scrollTo: function(root, down, needed) { + var x; + if (down) { + x = Header.getBottomOf(root); + if (!(needed && x >= 0)) { + return window.scrollBy(0, -x); + } + } else { + x = Header.getTopOf(root); + if (!(needed && x >= 0)) { + return window.scrollBy(0, x); + } + } + }, + scrollToIfNeeded: function(root, down) { + return Header.scrollTo(root, down, true); + }, + getTopOf: function(root) { + var headRect, top; + top = root.getBoundingClientRect().top; + if (Conf['Fixed Header'] && !Conf['Bottom Header']) { + headRect = Header.toggle.getBoundingClientRect(); + top -= headRect.top + headRect.height; + } + return top; + }, + getBottomOf: function(root) { + var bottom, clientHeight, headRect; + clientHeight = doc.clientHeight; + bottom = clientHeight - root.getBoundingClientRect().bottom; + if (Conf['Bottom Header']) { + headRect = Header.toggle.getBoundingClientRect(); + bottom -= clientHeight - headRect.bottom + headRect.height; + } + return bottom; + }, + addShortcut: function(el) { + var shortcut; + shortcut = $.el('span', { + className: 'shortcut brackets-wrap' + }); + $.add(shortcut, el); + return $.prepend(Header.shortcuts, shortcut); + }, + menuToggle: function(e) { + return Header.menu.toggle(e, this, g); + }, + createNotification: function(e) { + var cb, content, lifetime, notice, type, _ref; + _ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime, cb = _ref.cb; + notice = new Notice(type, content, lifetime); + if (cb) { + return cb(notice); + } + }, + areNotificationsEnabled: false, + enableDesktopNotifications: function() { + var authorize, disable, el, notice, _ref; + if (!(window.Notification && Conf['Desktop Notifications'])) { + return; + } + switch (Notification.permission) { + case 'granted': + Header.areNotificationsEnabled = true; + return; + case 'denied': + return; + } + el = $.el('span', { + innerHTML: "Desktop notification permissions are not granted.\n[FAQ]
\n or " + }); + _ref = $$('button', el), authorize = _ref[0], disable = _ref[1]; + $.on(authorize, 'click', function() { + return Notification.requestPermission(function(status) { + Header.areNotificationsEnabled = status === 'granted'; + if (status === 'default') { + return; + } + return notice.close(); + }); + }); + $.on(disable, 'click', function() { + $.set('Desktop Notifications', false); + return notice.close(); + }); + return notice = new Notice('info', el); + } + }; + + Index = { + init: function() { + var anchorEntry, input, label, modeEntry, name, refNavEntry, repliesEntry, sortEntry, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2; + if (g.VIEW !== 'index' || g.BOARD.ID === 'f') { + return; + } + this.button = $.el('a', { + className: 'index-refresh-shortcut fa fa-refresh', + title: 'Refresh Index', + href: 'javascript:;', + textContent: 'Refresh Index' + }); + $.on(this.button, 'click', this.update); + Header.addShortcut(this.button, 1); + modeEntry = { + el: $.el('span', { + textContent: 'Index mode' + }), + subEntries: [ + { + el: $.el('label', { + innerHTML: ' Paged' + }) + }, { + el: $.el('label', { + innerHTML: ' Infinite scrolling' + }) + }, { + el: $.el('label', { + innerHTML: ' All threads' + }) + } + ] + }; + _ref = modeEntry.subEntries; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + label = _ref[_i]; + input = label.el.firstChild; + input.checked = Conf['Index Mode'] === input.value; + $.on(input, 'change', $.cb.value); + $.on(input, 'change', this.cb.mode); + } + sortEntry = { + el: $.el('span', { + textContent: 'Sort by' + }), + subEntries: [ + { + el: $.el('label', { + innerHTML: ' Bump order' + }) + }, { + el: $.el('label', { + innerHTML: ' Last reply' + }) + }, { + el: $.el('label', { + innerHTML: ' Creation date' + }) + }, { + el: $.el('label', { + innerHTML: ' Reply count' + }) + }, { + el: $.el('label', { + innerHTML: ' File count' + }) + } + ] + }; + _ref1 = sortEntry.subEntries; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + label = _ref1[_j]; + input = label.el.firstChild; + input.checked = Conf['Index Sort'] === input.value; + $.on(input, 'change', $.cb.value); + $.on(input, 'change', this.cb.sort); + } + repliesEntry = { + el: $.el('label', { + innerHTML: ' Show replies' + }) + }; + anchorEntry = { + el: $.el('label', { + innerHTML: ' Anchor hidden threads', + title: 'Move hidden threads at the end of the index.' + }) + }; + refNavEntry = { + el: $.el('label', { + innerHTML: ' Refreshed navigation', + title: 'Refresh index when navigating through pages.' + }) + }; + _ref2 = [repliesEntry, anchorEntry, refNavEntry]; + for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { + label = _ref2[_k]; + input = label.el.firstChild; + name = input.name; + input.checked = Conf[name]; + $.on(input, 'change', $.cb.checked); + switch (name) { + case 'Show Replies': + $.on(input, 'change', this.cb.replies); + break; + case 'Anchor Hidden Threads': + $.on(input, 'change', this.cb.sort); + } + } + $.event('AddMenuEntry', { + type: 'header', + el: $.el('span', { + textContent: 'Index Navigation' + }), + order: 98, + subEntries: [repliesEntry, anchorEntry, refNavEntry, modeEntry, sortEntry] + }); + $.addClass(doc, 'index-loading'); + this.update(); + this.root = $.el('div', { + className: 'board' + }); + this.pagelist = $.el('div', { + className: 'pagelist', + hidden: true, + innerHTML: "
" + }); + this.navLinks = $.el('div', { + className: 'navLinks', + innerHTML: "[Catalog] [×" + }); + this.searchInput = $('#index-search', this.navLinks); + this.currentPage = this.getCurrentPage(); + $.on(window, 'popstate', this.cb.popstate); + $.on(d, 'scroll', Index.scroll); + $.on(this.pagelist, 'click', this.cb.pageNav); + $.on(this.searchInput, 'input', this.onSearchInput); + $.on($('#index-search-clear', this.navLinks), 'click', this.clearSearch); + return $.asap((function() { + return $('.board', doc) || d.readyState !== 'loading'; + }), function() { + var board, navLink, _l, _len3, _ref3; + board = $('.board'); + $.replace(board, Index.root); + d.implementation.createDocument(null, null, null).appendChild(board); + _ref3 = $$('.navLinks'); + for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) { + navLink = _ref3[_l]; + $.rm(navLink); + } + $.after($.x('child::form/preceding-sibling::hr[1]'), Index.navLinks); + $.rmClass(doc, 'index-loading'); + return $.asap((function() { + return $('.pagelist') || d.readyState !== 'loading'; + }), function() { + return $.replace($('.pagelist'), Index.pagelist); + }); + }); + }, + scroll: $.debounce(100, function() { + var nodes, nodesPerPage, pageNum; + if (Index.req || Conf['Index Mode'] !== 'infinite' || ((d.body.scrollTop || doc.scrollTop) <= doc.scrollHeight - (300 + window.innerHeight))) { + return; + } + pageNum = Index.getCurrentPage() + 1; + if (pageNum >= Index.pagesNum) { + return Index.endNotice(); + } + nodesPerPage = Index.threadsNumPerPage * 2; + history.pushState(null, '', "/" + g.BOARD + "/" + pageNum); + nodes = Index.sortedNodes.slice(nodesPerPage * pageNum, nodesPerPage * (pageNum + 1)); + if (Conf['Show Replies']) { + Index.buildReplies(nodes); + } + $.add(Index.root, nodes); + return Index.setPage(); + }), + endNotice: (function() { + var notify, reset; + notify = false; + reset = function() { + return notify = false; + }; + return function() { + if (notify) { + return; + } + notify = true; + new Notice('info', "Last page reached.", 2); + return setTimeout(reset, 3 * $.SECOND); + }; + })(), + cb: { + mode: function() { + Index.togglePagelist(); + return Index.buildIndex(); + }, + sort: function() { + Index.sort(); + return Index.buildIndex(); + }, + replies: function() { + Index.buildThreads(); + Index.sort(); + return Index.buildIndex(); + }, + popstate: function(e) { + var pageNum; + pageNum = Index.getCurrentPage(); + if (Index.currentPage !== pageNum) { + return Index.pageLoad(pageNum); + } + }, + pageNav: function(e) { + var a; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + switch (e.target.nodeName) { + case 'BUTTON': + a = e.target.parentNode; + break; + case 'A': + a = e.target; + break; + default: + return; + } + if (a.textContent === 'Catalog') { + return; + } + e.preventDefault(); + return Index.userPageNav(+a.pathname.split('/')[2]); + }, + link: function(e) { + if (g.VIEW !== 'index' || /catalog/.test(this.href)) { + return; + } + e.preventDefault(); + history.pushState(null, '', this.pathname); + return Index.update(); + } + }, + scrollToIndex: function() { + return Header.scrollToIfNeeded(Index.root); + }, + getCurrentPage: function() { + return +window.location.pathname.split('/')[2]; + }, + userPageNav: function(pageNum) { + if (Conf['Refreshed Navigation'] && Conf['Index Mode'] !== 'all pages') { + return Index.update(pageNum); + } else { + return Index.pageNav(pageNum); + } + }, + pageNav: function(pageNum) { + if (Index.currentPage === pageNum) { + return; + } + history.pushState(null, '', pageNum === 0 ? './' : pageNum); + return Index.pageLoad(pageNum); + }, + pageLoad: function(pageNum) { + Index.currentPage = pageNum; + if (Conf['Index Mode'] === 'all pages') { + return; + } + Index.buildIndex(); + Index.setPage(); + return Index.scrollToIndex(); + }, + getPagesNum: function() { + if (Index.isSearching) { + return Math.ceil((Index.sortedNodes.length / 2) / Index.threadsNumPerPage); + } else { + return Index.pagesNum; + } + }, + getMaxPageNum: function() { + return Math.max(0, Index.getPagesNum() - 1); + }, + togglePagelist: function() { + return Index.pagelist.hidden = Conf['Index Mode'] === 'all pages'; + }, + buildPagelist: function() { + var a, i, maxPageNum, nodes, pagesRoot, _i; + pagesRoot = $('.pages', Index.pagelist); + maxPageNum = Index.getMaxPageNum(); + if (pagesRoot.childElementCount !== maxPageNum + 1) { + nodes = []; + for (i = _i = 0; _i <= maxPageNum; i = _i += 1) { + a = $.el('a', { + textContent: i, + href: i ? i : './' + }); + nodes.push($.tn('['), a, $.tn('] ')); + } + $.rmAll(pagesRoot); + $.add(pagesRoot, nodes); + } + return Index.togglePagelist(); + }, + setPage: function() { + var a, href, maxPageNum, next, pageNum, pagesRoot, prev, strong; + pageNum = Index.getCurrentPage(); + maxPageNum = Index.getMaxPageNum(); + pagesRoot = $('.pages', Index.pagelist); + prev = pagesRoot.previousSibling.firstChild; + next = pagesRoot.nextSibling.firstChild; + href = Math.max(pageNum - 1, 0); + prev.href = href === 0 ? './' : href; + prev.firstChild.disabled = href === pageNum; + href = Math.min(pageNum + 1, maxPageNum); + next.href = href === 0 ? './' : href; + next.firstChild.disabled = href === pageNum; + if (strong = $('strong', pagesRoot)) { + if (+strong.textContent === pageNum) { + return; + } + $.replace(strong, strong.firstChild); + } else { + strong = $.el('strong'); + } + a = pagesRoot.children[pageNum]; + $.before(a, strong); + return $.add(strong, a); + }, + update: function(pageNum) { + var onload, _ref, _ref1; + if (!navigator.onLine) { + return; + } + if ((_ref = Index.req) != null) { + _ref.abort(); + } + if ((_ref1 = Index.notice) != null) { + _ref1.close(); + } + if (typeof pageNum !== 'number') { + pageNum = null; + } + onload = function(e) { + return Index.load(e, pageNum); + }; + Index.req = $.ajax("//a.4cdn.org/" + g.BOARD + "/catalog.json", { + onabort: onload, + onloadend: onload + }, { + whenModified: true + }); + return $.addClass(Index.button, 'fa-spin'); + }, + load: function(e, pageNum) { + var err, notice, req, timeEl; + $.rmClass(Index.button, 'fa-spin'); + req = Index.req, notice = Index.notice; + delete Index.req; + delete Index.notice; + if (e.type === 'abort') { + req.onloadend = null; + notice.close(); + return; + } + try { + if (req.status === 200) { + Index.parse(JSON.parse(req.response), pageNum); + } else if (req.status === 304 && (pageNum != null)) { + Index.pageNav(pageNum); + } + } catch (_error) { + err = _error; + c.error('Index failure:', err.stack); + if (notice) { + notice.setType('error'); + notice.el.lastElementChild.textContent = 'Index refresh failed.'; + setTimeout(notice.close, 2 * $.SECOND); + } else { + new Notice('error', 'Index refresh failed.', 2); + } + return; + } + timeEl = $('#index-last-refresh', Index.navLinks); + timeEl.dataset.utc = Date.parse(req.getResponseHeader('Last-Modified')); + RelativeDates.update(timeEl); + return Index.scrollToIndex(); + }, + parse: function(pages, pageNum) { + Index.parseThreadList(pages); + Index.buildThreads(); + Index.sort(); + Index.buildPagelist(); + if (pageNum != null) { + Index.pageNav(pageNum); + return; + } + Index.buildIndex(); + return Index.setPage(); + }, + parseThreadList: function(pages) { + var thread, threadID, _ref, _ref1; + Index.pagesNum = pages.length; + Index.threadsNumPerPage = pages[0].threads.length; + Index.liveThreadData = pages.reduce((function(arr, next) { + return arr.concat(next.threads); + }), []); + Index.liveThreadIDs = Index.liveThreadData.map(function(data) { + return data.no; + }); + _ref = g.BOARD.threads; + for (threadID in _ref) { + thread = _ref[threadID]; + if (_ref1 = thread.ID, __indexOf.call(Index.liveThreadIDs, _ref1) < 0) { + thread.collect(); + } + } + }, + buildThreads: function() { + var err, errors, i, posts, thread, threadData, threadRoot, threads, _i, _len, _ref; + Index.nodes = []; + threads = []; + posts = []; + _ref = Index.liveThreadData; + for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { + threadData = _ref[i]; + threadRoot = Build.thread(g.BOARD, threadData); + Index.nodes.push(threadRoot, $.el('hr')); + if (thread = g.BOARD.threads[threadData.no]) { + thread.setPage(Math.floor(i / Index.threadsNumPerPage)); + thread.setStatus('Sticky', !!threadData.sticky); + thread.setStatus('Closed', !!threadData.closed); + } else { + thread = new Thread(threadData.no, g.BOARD); + threads.push(thread); + } + if (thread.ID in thread.posts) { + continue; + } + try { + posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + thread + " failed. Post will be skipped.", + error: err + }); + } + } + if (errors) { + Main.handleErrors(errors); + } + $.nodes(Index.nodes); + Main.callbackNodes(Thread, threads); + Main.callbackNodes(Post, posts); + return $.event('IndexRefresh'); + }, + buildReplies: function(threadRoots) { + var data, err, errors, i, lastReplies, node, nodes, post, posts, thread, threadRoot, _i, _j, _len, _len1; + posts = []; + for (_i = 0, _len = threadRoots.length; _i < _len; _i += 2) { + threadRoot = threadRoots[_i]; + thread = Get.threadFromRoot(threadRoot); + i = Index.liveThreadIDs.indexOf(thread.ID); + if (!(lastReplies = Index.liveThreadData[i].last_replies)) { + continue; + } + nodes = []; + for (_j = 0, _len1 = lastReplies.length; _j < _len1; _j++) { + data = lastReplies[_j]; + if (post = thread.posts[data.no]) { + nodes.push(post.nodes.root); + continue; + } + nodes.push(node = Build.postFromObject(data, thread.board.ID)); + try { + posts.push(new Post(node, thread, thread.board)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + data.no + " failed. Post will be skipped.", + error: err + }); + } + } + $.add(threadRoot, nodes); + } + if (errors) { + Main.handleErrors(errors); + } + return Main.callbackNodes(Post, posts); + }, + sort: function() { + var i, sortedThreadIDs, threadID, _i, _len; + switch (Conf['Index Sort']) { + case 'bump': + sortedThreadIDs = Index.liveThreadIDs; + break; + case 'lastreply': + sortedThreadIDs = __slice.call(Index.liveThreadData).sort(function(a, b) { + if ('last_replies' in a) { + a = a.last_replies[a.last_replies.length - 1]; + } + if ('last_replies' in b) { + b = b.last_replies[b.last_replies.length - 1]; + } + return b.no - a.no; + }).map(function(data) { + return data.no; + }); + break; + case 'birth': + sortedThreadIDs = __slice.call(Index.liveThreadIDs).sort(function(a, b) { + return b - a; + }); + break; + case 'replycount': + sortedThreadIDs = __slice.call(Index.liveThreadData).sort(function(a, b) { + return b.replies - a.replies; + }).map(function(data) { + return data.no; + }); + break; + case 'filecount': + sortedThreadIDs = __slice.call(Index.liveThreadData).sort(function(a, b) { + return b.images - a.images; + }).map(function(data) { + return data.no; + }); + } + Index.sortedNodes = []; + for (_i = 0, _len = sortedThreadIDs.length; _i < _len; _i++) { + threadID = sortedThreadIDs[_i]; + i = Index.liveThreadIDs.indexOf(threadID) * 2; + Index.sortedNodes.push(Index.nodes[i], Index.nodes[i + 1]); + } + if (Index.isSearching) { + Index.sortedNodes = Index.querySearch(Index.searchInput.value) || Index.sortedNodes; + } + Index.sortOnTop(function(thread) { + return thread.isSticky; + }); + if (Conf['Filter']) { + Index.sortOnTop(function(thread) { + return thread.isOnTop; + }); + } + if (Conf['Anchor Hidden Threads']) { + return Index.sortOnTop(function(thread) { + return !thread.isHidden; + }); + } + }, + sortOnTop: function(match) { + var i, offset, threadRoot, _i, _len, _ref, _ref1; + offset = 0; + _ref = Index.sortedNodes; + for (i = _i = 0, _len = _ref.length; _i < _len; i = _i += 2) { + threadRoot = _ref[i]; + if (match(Get.threadFromRoot(threadRoot))) { + (_ref1 = Index.sortedNodes).splice.apply(_ref1, [offset++ * 2, 0].concat(__slice.call(Index.sortedNodes.splice(i, 2)))); + } + } + }, + buildIndex: function() { + var nodes, nodesPerPage, pageNum; + if (Conf['Index Mode'] !== 'all pages') { + pageNum = Index.getCurrentPage(); + nodesPerPage = Index.threadsNumPerPage * 2; + nodes = Index.sortedNodes.slice(nodesPerPage * pageNum, nodesPerPage * (pageNum + 1)); + } else { + nodes = Index.sortedNodes; + } + $.rmAll(Index.root); + $.rmAll(Header.hover); + if (Conf['Show Replies']) { + Index.buildReplies(nodes); + } + $.event('IndexBuild', nodes); + return $.add(Index.root, nodes); + }, + isSearching: false, + clearSearch: function() { + Index.searchInput.value = null; + Index.onSearchInput(); + return Index.searchInput.focus(); + }, + onSearchInput: function() { + var pageNum; + if (Index.isSearching = !!Index.searchInput.value.trim()) { + if (!Index.searchInput.dataset.searching) { + Index.searchInput.dataset.searching = 1; + Index.pageBeforeSearch = Index.getCurrentPage(); + pageNum = 0; + } else { + pageNum = Index.getCurrentPage(); + } + } else { + pageNum = Index.pageBeforeSearch; + delete Index.pageBeforeSearch; + delete Index.searchInput.dataset.searching; + } + Index.sort(); + if (Conf['Index Mode'] !== 'all pages') { + pageNum = Math.min(pageNum, Index.getMaxPageNum()); + } + Index.buildPagelist(); + if (Index.currentPage === pageNum) { + Index.buildIndex(); + return Index.setPage(); + } else { + return Index.pageNav(pageNum); + } + }, + querySearch: function(query) { + var keywords; + if (!(keywords = query.toLowerCase().match(/\S+/g))) { + return; + } + return Index.search(keywords); + }, + search: function(keywords) { + var found, i, threadRoot, _i, _len, _ref; + found = []; + _ref = Index.sortedNodes; + for (i = _i = 0, _len = _ref.length; _i < _len; i = _i += 2) { + threadRoot = _ref[i]; + if (Index.searchMatch(Get.threadFromRoot(threadRoot), keywords)) { + found.push(Index.sortedNodes[i], Index.sortedNodes[i + 1]); + } + } + return found; + }, + searchMatch: function(thread, keywords) { + var file, info, key, keyword, text, _i, _j, _len, _len1, _ref, _ref1; + _ref = thread.OP, info = _ref.info, file = _ref.file; + text = []; + _ref1 = ['comment', 'subject', 'name', 'tripcode', 'email']; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + key = _ref1[_i]; + if (key in info) { + text.push(info[key]); + } + } + if (file) { + text.push(file.name); + } + text = text.join(' ').toLowerCase(); + for (_j = 0, _len1 = keywords.length; _j < _len1; _j++) { + keyword = keywords[_j]; + if (-1 === text.indexOf(keyword)) { + return false; + } + } + return true; + } + }; + + Build = { + staticPath: '//s.4cdn.org/image/', + gifIcon: window.devicePixelRatio >= 2 ? '@2x.gif' : '.gif', + 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; + } + }, + thumbRotate: (function() { + var n; + n = 0; + return function() { + return n = (n + 1) % 3; + }; + })(), + 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: boardID === 'f' ? "//i.4cdn.org/" + boardID + "/src/" + data.filename + data.ext : "//i.4cdn.org/" + boardID + "/src/" + data.tim + data.ext, + height: data.h, + width: data.w, + MD5: data.md5, + size: data.fsize, + turl: "//" + (Build.thumbRotate()) + ".t.4cdn.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, capcodeIcon, capcodeStart, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, gifIcon, href, imgSrc, isClosed, isOP, isSticky, name, pageIcon, pageNum, postID, quote, replyLink, 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 = Build.staticPath, gifIcon = Build.gifIcon; + tripcode = tripcode ? " " + tripcode + "" : ''; + if (email) { + emailStart = ''; + emailEnd = ''; + } else { + emailStart = ''; + emailEnd = ''; + } + switch (capcode) { + case 'admin': + case 'admin_highlight': + capcodeClass = " capcodeAdmin"; + capcodeStart = " ## Admin"; + capcodeIcon = (" "; + break; + case 'mod': + capcodeClass = " capcodeMod"; + capcodeStart = " ## Mod"; + capcodeIcon = (" "; + break; + case 'developer': + capcodeClass = " capcodeDeveloper"; + capcodeStart = " ## Developer"; + capcodeIcon = (" "; + break; + default: + capcodeClass = ''; + capcodeStart = ''; + capcodeIcon = ''; + } + userID = !capcode && uniqueID ? (" (ID: ") + ("" + uniqueID + ") ") : ''; + flag = !flagCode ? '' : boardID === 'pol' ? "  + flagCode + " : " "; + if (file != null ? file.isDeleted : void 0) { + fileHTML = isOP ? ("
") + ("File deleted.") + "
" : ("
") + ("File deleted.") + "
"; + } else if (file) { + fileSize = $.bytesToString(file.size); + fileThumb = file.turl; + if (file.isSpoiler) { + fileSize = "Spoiler Image, " + fileSize; + if (!isArchived) { + fileThumb = "" + staticPath + "spoiler"; + if (spoilerRange = Build.spoilerRange[boardID]) { + fileThumb += ("-" + boardID) + Math.floor(1 + spoilerRange * Math.random()); + } + fileThumb += '.png'; + file.twidth = file.theight = 100; + } + } + imgSrc = boardID === 'f' ? '' : ("") + ("" + 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 = file.name.slice(-3) === 'pdf' ? 'PDF' : "" + file.width + "x" + file.height; + fileInfo = ("
File: " + file.timestamp + "") + ("-(" + fileSize + ", " + fileDims + (file.isSpoiler ? '' : ", " + shortFilename + "")) + ")
"; + fileHTML = "
" + fileInfo + imgSrc + "
"; + } else { + fileHTML = ''; + } + sticky = isSticky ? " Sticky" : ''; + closed = isClosed ? " Closed" : ''; + if (isOP && g.VIEW === 'index') { + pageNum = Math.floor(Index.liveThreadIDs.indexOf(postID) / Index.threadsNumPerPage); + pageIcon = " [" + pageNum + "]"; + replyLink = "   [Reply]"; + } else { + pageIcon = replyLink = ''; + } + 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; + }, + summary: function(boardID, threadID, posts, files) { + var text; + text = []; + text.push("" + posts + " post" + (posts > 1 ? 's' : '')); + if (files) { + text.push("and " + files + " image repl" + (files > 1 ? 'ies' : 'y')); + } + text.push('omitted.'); + return $.el('a', { + className: 'summary', + textContent: text.join(' '), + href: "/" + boardID + "/res/" + threadID + }); + }, + thread: function(board, data) { + var OP, files, nodes, posts, root, _ref; + Build.spoilerRange[board] = data.custom_spoiler; + if ((OP = board.posts[data.no]) && (root = OP.nodes.root.parentNode)) { + $.rmAll(root); + } else { + root = $.el('div', { + className: 'thread', + id: "t" + data.no + }); + } + nodes = [OP ? OP.nodes.root : Build.postFromObject(data, board.ID)]; + if (data.omitted_posts || !Conf['Show Replies'] && data.replies) { + _ref = Conf['Show Replies'] ? [data.omitted_posts, data.omitted_images] : [ + data.replies, data.omitted_images + data.last_replies.filter(function(data) { + return !!data.ext; + }).length + ], posts = _ref[0], files = _ref[1]; + nodes.push(Build.summary(board.ID, data.no, posts, files)); + } + $.add(root, nodes); + return root; + } + }; + + 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(); + if (excerpt.length > 70) { + excerpt = "" + excerpt.slice(0, 67) + "..."; + } + return "/" + thread.board + "/ - " + excerpt; + }, + threadFromRoot: function(root) { + return g.threads["" + g.BOARD + "." + root.id.slice(1)]; + }, + threadFromNode: function(node) { + return Get.threadFromRoot($.x('ancestor::div[@class="thread"]', node)); + }, + 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]|following::div[contains(@class,"postContainer")][1])', root)); + }, + contextFromNode: function(node) { + return Get.postFromRoot($.x('ancestor::div[parent::div[@class="thread"]][1]', node)); + }, + postDataFromLink: function(link) { + var boardID, path, postID, threadID, _ref; + if (link.hostname === 'boards.4chan.org') { + path = link.pathname.split('/'); + boardID = path[1]; + threadID = path[3]; + postID = link.hash.slice(2); + } else { + _ref = link.dataset, boardID = _ref.boardID, threadID = _ref.threadID, postID = _ref.postID; + threadID || (threadID = 0); + } + 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, _ref4; + quotelinks = []; + _ref = g.posts; + for (ID in _ref) { + quoterPost = _ref[ID]; + if (_ref1 = post.fullID, __indexOf.call(quoterPost.quotes, _ref1) >= 0) { + _ref2 = [quoterPost].concat(quoterPost.clones); + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + quoterPost = _ref2[_i]; + quotelinks.push.apply(quotelinks, quoterPost.nodes.quotelinks); + } + } + } + if (Conf['Quote Backlinks']) { + _ref3 = post.quotes; + for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { + quote = _ref3[_j]; + if (!(quotedPost = g.posts[quote])) { + continue; + } + _ref4 = [quotedPost].concat(quotedPost.clones); + for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) { + quotedPost = _ref4[_k]; + quotelinks.push.apply(quotelinks, __slice.call(quotedPost.nodes.backlinks)); + } + } + } + return quotelinks.filter(function(quotelink) { + var boardID, postID, _ref5; + _ref5 = Get.postDataFromLink(quotelink), boardID = _ref5.boardID, postID = _ref5.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("//a.4cdn.org/" + boardID + "/res/" + threadID + ".json", function() { + return Get.fetchedPost(this, boardID, threadID, postID, root, context); + }); + } else if (url = Redirect.to('post', { + boardID: boardID, + postID: postID + })) { + return $.cache(url, function() { + return Get.archivedPost(this, boardID, postID, root, context); + }, { + withCredentials: url.archive.withCredentials + }); + } + }, + insert: function(post, root, context) { + var clone, nodes; + if (!root.parentNode) { + return; + } + clone = post.addClone(context); + Main.callbackNodes(Clone, [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 (status !== 200 && status !== 304) { + if (url = Redirect.to('post', { + boardID: boardID, + postID: postID + })) { + $.cache(url, function() { + return Get.archivedPost(this, boardID, postID, root, context); + }, { + withCredentials: url.archive.withCredentials + }); + } 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.to('post', { + boardID: boardID, + postID: postID + })) { + $.cache(url, function() { + return Get.archivedPost(this, boardID, postID, root, context); + }, { + withCredentials: url.archive.withCredentials + }); + } 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|\[\/?[a-z]+(:lit)?\]/g, Get.parseMarkup); + 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 || ("//t.4cdn.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); + }, + parseMarkup: 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 ''; + default: + return text.replace(':lit', ''); + } + } + }; + + 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 currentMenu, lastToggledButton; + + currentMenu = null; + + lastToggledButton = null; + + function Menu(type) { + this.type = type; + this.addEntry = __bind(this.addEntry, this); + this.keybinds = __bind(this.keybinds, this); + this.close = __bind(this.close, this); + $.on(d, 'AddMenuEntry', this.addEntry); + 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); + 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, right, style, top, _i, _len, _ref, _ref1, _ref2; + menu = this.makeMenu(); + currentMenu = menu; + lastToggledButton = button; + this.entries.sort(function(first, second) { + return first.order - second.order; + }); + _ref = this.entries; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + entry = _ref[_i]; + this.insertEntry(entry, menu, data); + } + $.addClass(lastToggledButton, 'active'); + $.on(d, 'click', this.close); + $.on(d, 'CloseMenu', this.close); + $.add(Header.hover, menu); + mRect = menu.getBoundingClientRect(); + bRect = button.getBoundingClientRect(); + bTop = window.scrollY + bRect.top; + bLeft = window.scrollX + 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"; + if (right) { + $.addClass(menu, 'left'); + } + entry = $('.entry', menu); + this.focus(entry); + 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); + }; + + Menu.prototype.close = function() { + $.rm(currentMenu); + $.rmClass(lastToggledButton, 'active'); + 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 - second.style.order; + }); + 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 - 150 ? ['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, 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)); + el.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, _ref; + 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 + }; + _ref = Conf['Header auto-hide'] || !Conf['Fixed Header'] ? [0, 0] : Conf['Bottom Header'] ? [0, Header.bar.getBoundingClientRect().height] : [Header.bar.getBoundingClientRect().height, 0], o.topBorder = _ref[0], o.bottomBorder = _ref[1]; + 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 + this.topBorder) ? this.topBorder + 'px' : this.height - top < (10 + this.bottomBorder) ? null : top / this.screenHeight * 100 + '%'; + right = left === null ? 0 : null; + bottom = top === null ? this.bottomBorder + 'px' : 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); + if ($.x('ancestor::div[contains(@class,"inline")][1]', root)) { + $.on(d, 'keydown', 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(e) { + if (e.type === 'keydown' && e.keyCode !== 13 || e.target.nodeName === "TEXTAREA") { + return; + } + $.rm(this.el); + $.off(this.root, this.endEvents, this.hoverend); + $.off(d, 'keydown', this.hoverend); + $.off(this.root, 'mousemove', this.hover); + if (this.cb) { + return this.cb.call(this); + } + }; + return { + dialog: dialog, + Menu: Menu, + hover: hoverstart + }; + })(); + + Anonymize = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Anonymize']) { + return; + } + return Post.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) { + $.replace(email, name); + return delete this.nodes.email; + } + } + }; + + Filter = { + filters: {}, + init: function() { + var boards, err, filter, hl, key, op, regexp, stub, top, _i, _len, _ref, _ref1, _ref2, _ref3, _ref4, _ref5; + if (g.VIEW === 'catalog' || !Conf['Filter']) { + return; + } + if (!Conf['Filtered Backlinks']) { + $.addClass(doc, 'hide-backlinks'); + } + 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' && (_ref2 = g.BOARD.ID, __indexOf.call(boards.split(','), _ref2) < 0)) { + continue; + } + if (key === 'uniqueID' || key === 'MD5') { + regexp = regexp[1]; + } else { + try { + regexp = RegExp(regexp[1], regexp[2]); + } catch (_error) { + err = _error; + new Notice('warning', err.message, 60); + continue; + } + } + op = ((_ref3 = filter.match(/[^t]op:(yes|no|only)/)) != null ? _ref3[1] : void 0) || 'yes'; + stub = (function() { + var _ref4; + switch ((_ref4 = filter.match(/stub:(yes|no)/)) != null ? _ref4[1] : void 0) { + case 'yes': + return true; + case 'no': + return false; + default: + return Conf['Stubs']; + } + })(); + if (hl = /highlight/.test(filter)) { + hl = ((_ref4 = filter.match(/highlight:(\w+)/)) != null ? _ref4[1] : void 0) || 'filter-highlight'; + top = ((_ref5 = filter.match(/top:(yes|no)/)) != null ? _ref5[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.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, key, result, 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) { + this.thread.isOnTop = true; + } + } + } + }, + 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.dataset.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 = type === 'uniqueID' || type === 'MD5' ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { + if (c === '\n') { + return '\\n'; + } else if (c === '\\') { + return '\\\\'; + } else { + return "\\" + c; + } + }); + re = type === 'uniqueID' || type === 'MD5' ? "/" + 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(); + }); + } + } + }; + + PostHiding = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link']) { + return; + } + if (Conf['Reply Hiding Buttons']) { + $.addClass(doc, "reply-hide"); + } + this.db = new DataBoard('hiddenPosts'); + return Post.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 Buttons']) { + return; + } + return $.replace($('.sideArrows', this.nodes.root), PostHiding.makeButton(this, 'hide')); + }, + menu: { + init: function() { + var apply, div, hideStubLink, 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" + }); + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', PostHiding.menu.hideStub); + $.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 + } + ] + }); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + 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; + } + return PostHiding.menu.post = post; + } + }); + }, + 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'); + }, + hideStub: function() { + var post; + post = PostHiding.menu.post; + post.nodes.root.hidden = true; + $.event('CloseMenu'); + } + }, + makeButton: function(post, type) { + var a, span; + span = $.el('span', { + className: "fa fa-" + (type === 'hide' ? 'minus' : 'plus') + "-square-o", + textContent: "" + }); + a = $.el('a', { + className: "" + type + "-reply-button", + href: 'javascript:;' + }); + $.add(a, span); + $.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); + PostHiding[(post.isHidden ? 'show' : '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, Menu.makeButton()); + } + 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.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 (__indexOf.call(post.quotes, fullID) >= 0) { + recursive.apply(null, [post].concat(__slice.call(args))); + } + } + } + }; + + ThreadHiding = { + init: function() { + if (g.VIEW !== 'index' || !Conf['Thread Hiding Buttons'] && !Conf['Thread Hiding Link']) { + return; + } + this.db = new DataBoard('hiddenThreads'); + this.syncCatalog(); + $.on(d, 'IndexBuild', this.onIndexBuild); + return Thread.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 Buttons']) { + return; + } + return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide')); + }, + onIndexBuild: function(_arg) { + var i, nodes, root, thread, _i, _len; + nodes = _arg.detail; + for (i = _i = 0, _len = nodes.length; _i < _len; i = _i += 2) { + root = nodes[i]; + thread = Get.threadFromRoot(root); + if (!thread.isHidden) { + continue; + } + if (!thread.stub) { + nodes[i + 1].hidden = true; + } else if (!root.contains(thread.stub)) { + ThreadHiding.makeStub(thread, root); + } + } + }, + syncCatalog: function() { + var hiddenThreads, hiddenThreadsOnCatalog, threadID; + hiddenThreads = ThreadHiding.db.get({ + boardID: g.BOARD.ID, + defaultValue: {} + }); + hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; + 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("//a.4cdn.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, hideStubLink, 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" + }); + $.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 + } + ] + }); + div = $.el('a', { + className: 'show-thread-link', + textContent: 'Show thread', + href: 'javascript:;' + }); + $.on(div, 'click', ThreadHiding.menu.show); + $.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; + } + }); + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); + return $.event('AddMenuEntry', { + type: 'post', + el: hideStubLink, + order: 15, + open: function(_arg) { + var isReply, thread; + thread = _arg.thread, isReply = _arg.isReply; + if (isReply || !thread.isHidden) { + return false; + } + return ThreadHiding.menu.thread = thread; + } + }); + }, + 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'); + }, + show: function() { + var thread; + thread = ThreadHiding.menu.thread; + ThreadHiding.show(thread); + ThreadHiding.saveHiddenState(thread); + return $.event('CloseMenu'); + }, + hideStub: function() { + var thread; + thread = ThreadHiding.menu.thread; + ThreadHiding.hide(thread, false); + $.event('CloseMenu'); + } + }, + makeButton: function(thread, type) { + var a; + a = $.el('a', { + className: "" + type + "-thread-button", + innerHTML: "", + href: 'javascript:;' + }); + a.dataset.fullID = thread.fullID; + $.on(a, 'click', ThreadHiding.toggle); + return a; + }, + makeStub: function(thread, root) { + var a, numReplies, opInfo, summary; + numReplies = $$('.thread > .replyContainer', root).length; + if (summary = $('.summary', root)) { + numReplies += +summary.textContent.match(/\d+/); + } + opInfo = Conf['Anonymize'] ? 'Anonymous' : $('.nameBlock', thread.OP.nodes.info).textContent; + a = ThreadHiding.makeButton(thread, 'show'); + $.add(a, $.tn(" " + opInfo + " (" + (numReplies === 1 ? '1 reply' : "" + numReplies + " replies") + ")")); + thread.stub = $.el('div', { + className: 'stub' + }); + if (Conf['Menu']) { + $.add(thread.stub, [a, Menu.makeButton()]); + } else { + $.add(thread.stub, a); + } + return $.prepend(root, thread.stub); + }, + 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 threadRoot; + if (makeStub == null) { + makeStub = Conf['Stubs']; + } + if (thread.isHidden) { + return; + } + threadRoot = thread.OP.nodes.root.parentNode; + thread.isHidden = true; + if (!makeStub) { + return threadRoot.hidden = threadRoot.nextElementSibling.hidden = true; + } + return ThreadHiding.makeStub(thread, threadRoot); + }, + 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; + } + }; + + 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.callbacks.push({ + name: 'Quote Backlinking Part 1', + cb: this.firstNode + }); + return Post.callbacks.push({ + name: 'Quote Backlinking Part 2', + cb: this.secondNode + }); + }, + firstNode: function() { + var a, clone, container, containers, frag, 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 ? '\u00A0(You)' : '') + }); + _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]; + frag = [$.tn(' '), link = a.cloneNode(true)]; + if (Conf['Quote Previewing']) { + $.on(link, 'mouseover', QuotePreview.mouseover); + } + if (Conf['Quote Inlining']) { + $.on(link, 'click', QuoteInline.toggle); + if (Conf['Quote Hash Navigation']) { + frag.push.apply(frag, QuoteInline.qiQuote(link, $.hasClass(link, 'filtered'))); + } + } + $.add(container, frag); + } + } + }, + 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' + })); + } + }; + + 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.callbacks.push({ + name: 'Mark Cross-thread Quotes', + cb: this.node + }); + }, + node: function() { + var board, boardID, quotelink, thread, threadID, _i, _len, _ref, _ref1, _ref2; + if (this.isClone && this.thread === this.context.thread) { + return; + } + _ref = this.isClone ? this.context : this, board = _ref.board, thread = _ref.thread; + _ref1 = this.nodes.quotelinks; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + quotelink = _ref1[_i]; + _ref2 = Get.postDataFromLink(quotelink), boardID = _ref2.boardID, threadID = _ref2.threadID; + if (!threadID) { + continue; + } + if (this.isClone) { + quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); + } + if (boardID === board.ID && threadID !== thread.ID) { + $.add(quotelink, $.tn(QuoteCT.text)); + } + } + } + }; + + QuoteInline = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Quote Inlining']) { + return; + } + if (Conf['Quote Hash Navigation']) { + this.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]; + if (!this.isClone) { + $.after(link, QuoteInline.qiQuote(link, $.hasClass(link, 'filtered'))); + } + $.on(link, 'click', QuoteInline.toggle); + } + }; + } else { + this.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); + } + }; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Post.callbacks.push({ + name: 'Quote Inlining', + cb: this.node + }); + }, + qiQuote: function(link, hidden) { + return [ + $.tn(' '), $.el('a', { + className: hidden ? 'hashlink filtered' : 'hashlink', + textContent: '#', + href: link.href + }) + ]; + }, + 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.contextFromNode(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, qroot, root; + isBacklink = $.hasClass(quotelink, 'backlink'); + inline = $.el('div', { + id: "i" + postID, + className: 'inline' + }); + root = QuoteInline.findRoot(quotelink, isBacklink); + $.after(root, inline); + qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); + $.addClass(qroot, 'hasInline'); + 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, qroot, root, _ref; + isBacklink = $.hasClass(quotelink, 'backlink'); + root = QuoteInline.findRoot(quotelink, isBacklink); + root = $.x("following-sibling::div[@id='i" + postID + "'][1]", root); + qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); + $.rm(root); + if (!$('.inline', qroot)) { + $.rmClass(qroot, 'hasInline'); + } + 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'); + } + } + }; + + 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.callbacks.push({ + name: 'Mark OP Quotes', + cb: this.node + }); + }, + node: function() { + var boardID, fullID, i, postID, quotelink, quotelinks, quotes, _ref, _ref1; + if (this.isClone && this.thread === this.context.thread) { + return; + } + if (!(quotes = this.quotes).length) { + return; + } + quotelinks = this.nodes.quotelinks; + if (this.isClone && (_ref = this.thread.fullID, __indexOf.call(quotes, _ref) >= 0)) { + i = 0; + while (quotelink = quotelinks[i++]) { + quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); + } + } + fullID = (this.isClone ? this.context : this).thread.fullID; + if (__indexOf.call(quotes, fullID) < 0) { + return; + } + i = 0; + while (quotelink = quotelinks[i++]) { + _ref1 = Get.postDataFromLink(quotelink), boardID = _ref1.boardID, postID = _ref1.postID; + if (("" + boardID + "." + postID) === fullID) { + $.add(quotelink, $.tn(QuoteOP.text)); + } + } + } + }; + + QuotePreview = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Quote Previewing']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Post.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.contextFromNode(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'); + } + } + }; + + QuoteStrikeThrough = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { + return; + } + return Post.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'); + } + } + } + }; + + /* + <3 aeosynth + */ + + + QuoteThreading = { + init: function() { + var input; + if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) { + return; + } + this.enabled = true; + this.controls = $.el('span', { + innerHTML: '' + }); + input = $('input', this.controls); + $.on(input, 'change', this.toggle); + $.event('AddMenuEntry', { + type: 'header', + el: this.controls, + order: 98 + }); + if (!Conf['Unread Count']) { + $.on(d, '4chanXInitFinished', this.setup); + } + return Post.callbacks.push({ + name: 'Quote Threading', + cb: this.node + }); + }, + setup: function() { + $.off(d, '4chanXInitFinished', QuoteThreading.setup); + return QuoteThreading.force(); + }, + force: function() { + var ID, post, _ref; + _ref = g.posts; + for (ID in _ref) { + post = _ref[ID]; + if (post.cb) { + post.cb(true); + } + } + }, + node: function() { + var keys, len, post, posts, quote, _i, _len, _ref; + posts = g.posts; + if (this.isClone || !QuoteThreading.enabled) { + return; + } + if (Conf['Unread Count']) { + Unread.posts.push(this); + } + if (this.thread.OP === this || !(post = posts[this.fullID]) || post.isHidden) { + return; + } + keys = []; + len = g.BOARD.ID.length + 1; + _ref = this.quotes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + quote = _ref[_i]; + if ((quote.slice(len) < this.ID) && quote in posts) { + keys.push(quote); + } + } + if (keys.length !== 1) { + return; + } + this.threaded = keys[0]; + return this.cb = QuoteThreading.nodeinsert; + }, + nodeinsert: function(force) { + var bottom, height, post, posts, root, threadContainer, top, _ref; + post = g.posts[this.threaded]; + if (this.thread.OP === post) { + return false; + } + posts = Unread.posts; + root = post.nodes.root; + if (!force) { + height = doc.clientHeight; + _ref = root.getBoundingClientRect(), bottom = _ref.bottom, top = _ref.top; + if (!((Conf['Unread Count'] && posts[post.ID]) || ((bottom < height) && (top > 0)))) { + return false; + } + } + if ($.hasClass(root, 'threadOP')) { + threadContainer = root.nextElementSibling; + post = Get.postFromRoot($.x('descendant::div[contains(@class,"postContainer")][last()]', threadContainer)); + $.add(threadContainer, this.nodes.root); + } else { + threadContainer = $.el('div', { + className: 'threadContainer' + }); + $.add(threadContainer, this.nodes.root); + $.after(root, threadContainer); + $.addClass(root, 'threadOP'); + } + if (!Conf['Unread Count']) { + return true; + } + if (posts[post.ID]) { + posts.after(post, this); + } else { + posts.prepend(this); + } + return true; + }, + toggle: function() { + var ID, container, containers, nodes, post, posts, thread, _i, _j, _k, _len, _len1, _len2, _ref, _ref1; + if (QuoteThreading.enabled = this.checked) { + QuoteThreading.force(); + } else { + thread = $('.thread'); + posts = []; + nodes = []; + _ref = g.posts; + for (ID in _ref) { + post = _ref[ID]; + if (!(post === post.thread.OP || post.isClone)) { + posts.push(post); + } + } + posts.sort(function(a, b) { + return a.ID - b.ID; + }); + for (_i = 0, _len = posts.length; _i < _len; _i++) { + post = posts[_i]; + nodes.push(post.nodes.root); + } + $.add(thread, nodes); + containers = $$('.threadContainer', thread); + for (_j = 0, _len1 = containers.length; _j < _len1; _j++) { + container = containers[_j]; + $.rm(container); + } + _ref1 = $$('.threadOP'); + for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { + post = _ref1[_k]; + $.rmClass(post, 'threadOP'); + } + } + }, + kb: function() { + var control; + control = $.id('threadingControl'); + control.checked = !control.checked; + return QuoteThreading.toggle.call(control); + } + }; + + QuoteYou = { + init: function() { + if (!(g.VIEW !== 'catalog' && Conf['Mark Quotes of You'] && Conf['Quick Reply'])) { + return; + } + if (Conf['Highlight Own Posts']) { + $.addClass(doc, 'highlight-own'); + } + if (Conf['Highlight Posts Quoting You']) { + $.addClass(doc, 'highlight-you'); + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(You)'; + return Post.callbacks.push({ + name: 'Mark Quotes of You', + cb: this.node + }); + }, + node: function() { + var quotelink, _i, _len, _ref; + if (this.isClone) { + return; + } + if (this.info.yours) { + $.addClass(this.nodes.root, 'yourPost'); + } + if (!this.quotes.length) { + return; + } + _ref = this.nodes.quotelinks; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + quotelink = _ref[_i]; + if (!(QR.db.get(Get.postDataFromLink(quotelink)))) { + continue; + } + $.add(quotelink, $.tn(QuoteYou.text)); + $.addClass(quotelink, 'you'); + $.addClass(this.nodes.root, 'quotesYou'); + } + }, + cb: { + seek: function(type) { + var highlight, post, posts, result, str; + if (!(Conf['Mark Quotes of You'] && Conf['Quick Reply'])) { + return; + } + if (highlight = $('.highlight')) { + $.rmClass(highlight, 'highlight'); + } + if (!QuoteYou.lastRead) { + if (!(post = QuoteYou.lastRead = $('.quotesYou'))) { + new Notice('warning', 'No posts are currently quoting you, loser.', 20); + return; + } + if (QuoteYou.cb.scroll(post)) { + return; + } + } else { + post = QuoteYou.lastRead; + } + str = "" + type + "::div[contains(@class,'quotesYou')]"; + while (post = (result = $.X(str, post)).snapshotItem(type === 'preceding' ? result.snapshotLength - 1 : 0)) { + if (QuoteYou.cb.scroll(post)) { + return; + } + } + posts = $$('.quotesYou'); + return QuoteYou.cb.scroll(posts[type === 'following' ? 0 : posts.length - 1]); + }, + scroll: function(post) { + if (Get.postFromRoot(post).isHidden) { + return false; + } else { + QuoteYou.lastRead = post; + window.location = "#" + post.id; + Header.scrollToPost(post); + $.addClass($('.post', post), 'highlight'); + return true; + } + } + } + }; + + Quotify = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Resurrect Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Post.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 ($.hasClass(deadlink.parentNode, 'prettyprint')) { + Quotify.fixDeadlink(deadlink); + return; + } + quote = deadlink.textContent; + if (!(postID = (_ref = quote.match(/\d+$/)) != null ? _ref[0] : void 0)) { + return; + } + if (postID[0] === '0') { + Quotify.fixDeadlink(deadlink); + 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 + "/res/" + post.thread + "#p" + postID, + className: 'quotelink', + textContent: quote + }); + } else { + a = $.el('a', { + href: "/" + boardID + "/res/" + post.thread + "#p" + postID, + className: 'quotelink deadlink', + target: '_blank', + textContent: "" + quote + "\u00A0(Dead)" + }); + $.extend(a.dataset, { + boardID: boardID, + threadID: post.thread.ID, + postID: postID + }); + } + } else if (redirect = Redirect.to('thread', { + boardID: boardID, + threadID: 0, + postID: postID + })) { + a = $.el('a', { + href: redirect, + className: 'deadlink', + target: '_blank', + textContent: "" + quote + "\u00A0(Dead)" + }); + if (Redirect.to('post', { + boardID: boardID, + postID: postID + })) { + $.addClass(a, 'quotelink'); + $.extend(a.dataset, { + boardID: boardID, + postID: postID + }); + } + } + if (__indexOf.call(this.quotes, quoteID) < 0) { + this.quotes.push(quoteID); + } + if (!a) { + return deadlink.textContent = "" + quote + "\u00A0(Dead)"; + } + $.replace(deadlink, a); + if ($.hasClass(a, 'quotelink')) { + return this.nodes.quotelinks.push(a); + } + }, + fixDeadlink: function(deadlink) { + var el, green; + if (!(el = deadlink.previousSibling) || el.nodeName === 'BR') { + green = $.el('span', { + className: 'quote' + }); + $.before(deadlink, green); + $.add(green, deadlink); + } + return $.replace(deadlink, __slice.call(deadlink.childNodes)); + } + }; + + QR = { + init: function() { + var sc; + if (!Conf['Quick Reply']) { + return; + } + this.db = new DataBoard('yourPosts'); + this.posts = []; + if (Conf['QR Shortcut']) { + sc = $.el('a', { + className: "qr-shortcut fa fa-comment-o " + (!Conf['Persistent QR'] ? 'disabled' : ''), + textContent: 'QR', + title: 'Quick Reply', + href: 'javascript:;' + }); + $.on(sc, 'click', function() { + if (Conf['Persistent QR'] || !QR.nodes || QR.nodes.el.hidden) { + $.event('CloseMenu'); + QR.open(); + QR.nodes.com.focus(); + return $.rmClass(this, 'disabled'); + } else { + QR.close(); + return $.addClass(this, 'disabled'); + } + }); + Header.addShortcut(sc); + } + if (Conf['Hide Original Post Form']) { + $.asap((function() { + return doc; + }), function() { + return $.addClass(doc, 'hide-original-post-form'); + }); + } + $.ready(this.initReady); + if (Conf['Persistent QR']) { + if (!(g.BOARD.ID === 'f' && g.VIEW === 'index')) { + $.on(d, '4chanXInitFinished', this.persist); + } else { + $.ready(this.persist); + } + } + return Post.callbacks.push({ + name: 'Quick Reply', + cb: this.node + }); + }, + initReady: function() { + var link; + QR.postingIsEnabled = !!$.id('postForm'); + if (!QR.postingIsEnabled) { + return; + } + link = $.el('h1', { + innerHTML: "" + (g.VIEW === 'thread' ? 'Reply to Thread' : 'Start a Thread') + "", + className: "qr-link-container" + }); + $.on(link.firstChild, 'click', function() { + $.event('CloseMenu'); + QR.open(); + QR.nodes.com.focus(); + if (Conf['QR Shortcut']) { + return $.rmClass($('.qr-shortcut'), 'disabled'); + } + }); + $.before($.id('postForm'), link); + $.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, 'paste', QR.paste); + $.on(d, 'dragover', QR.dragOver); + $.on(d, 'drop', QR.dropFile); + $.on(d, 'dragstart dragend', QR.drag); + switch (g.VIEW) { + case 'index': + return $.on(d, 'IndexRefresh', QR.generatePostableThreadsList); + case 'thread': + return $.on(d, 'ThreadUpdate', function() { + if (g.DEAD) { + return QR.abort(); + } else { + return QR.status(); + } + }); + } + }, + node: function() { + return $.on($('a[title="Quote this post"]', this.nodes.info), 'click', QR.quote); + }, + persist: function() { + if (!QR.postingIsEnabled) { + return; + } + QR.open(); + if (Conf['Auto Hide QR'] || g.VIEW === 'catalog') { + 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 post, _i, _len, _ref; + if (QR.req) { + QR.abort(); + return; + } + QR.nodes.el.hidden = true; + QR.cleanNotifications(); + d.activeElement.blur(); + $.rmClass(QR.nodes.el, 'dump'); + if (!Conf['Captcha Warning Notifications']) { + if (QR.captcha.isEnabled) { + $.rmClass(QR.captcha.nodes.input, 'error'); + } + } + if (Conf['QR Shortcut']) { + $.toggleClass($('.qr-shortcut'), 'disabled'); + } + new QR.post(true); + _ref = QR.posts.splice(0, QR.posts.length - 1); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + post = _ref[_i]; + post["delete"](); + } + QR.cooldown.auto = false; + return QR.status(); + }, + 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 (Conf['Captcha Warning Notifications'] && !d.hidden) { + QR.notify(el); + } else { + $.addClass(QR.captcha.nodes.input, 'error'); + $.on(QR.captcha.nodes.input, 'keydown', function() { + return $.rmClass(QR.captcha.nodes.input, 'error'); + }); + } + } else { + QR.notify(el); + } + if (d.hidden) { + return alert(el.textContent); + } + }, + notify: function(el) { + var notice, notif; + notice = new Notice('warning', el); + if (!(Header.areNotificationsEnabled && d.hidden)) { + return QR.notifications.push(notice); + } else { + notif = new Notification(el.textContent, { + body: el.textContent, + icon: Favicon.logo + }); + notif.onclick = function() { + return window.focus(); + }; + notif.onclose = function() { + return notice.close(); + }; + return notif.onshow = function() { + return setTimeout(function() { + notif.onclose = null; + return notif.close(); + }, 7 * $.SECOND); + }; + } + }, + 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, thread, value; + if (!QR.nodes) { + return; + } + thread = QR.posts[0].thread; + if (thread !== 'new' && g.threads["" + g.BOARD + "." + thread].isDead) { + 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; + }, + quote: function(e) { + var caretPos, com, index, post, range, s, sel, text, thread, _ref; + if (e != null) { + e.preventDefault(); + } + if (!QR.postingIsEnabled) { + return; + } + sel = d.getSelection(); + post = Get.postFromNode(this); + text = ">>" + post + "\n"; + if ((s = sel.toString().trim()) && post === Get.postFromNode(sel.anchorNode)) { + 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 = Get.threadFromNode(this); + } + 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); + QR.selected.save(thread); + if (Conf['QR Shortcut']) { + return $.rmClass($('.qr-shortcut'), 'disabled'); + } + }, + 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(); + return QR.handleFiles(e.dataTransfer.files); + }, + 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')) { + continue; + } + blob = item.getAsFile(); + blob.name = 'file'; + if (blob.type) { + blob.name += '.' + blob.type.split('/')[1]; + } + files.push(blob); + } + if (!files.length) { + return; + } + QR.open(); + QR.handleFiles(files); + return $.addClass(QR.nodes.el, 'dump'); + }, + handleFiles: function(files) { + var file, isSingle, max, _i, _len; + if (this !== QR) { + files = __slice.call(this.files); + this.value = null; + } + if (!files.length) { + return; + } + max = QR.nodes.fileInput.max; + isSingle = files.length === 1; + QR.cleanNotifications(); + for (_i = 0, _len = files.length; _i < _len; _i++) { + file = files[_i]; + QR.handleFile(file, isSingle, max); + } + if (!isSingle) { + return $.addClass(QR.nodes.el, 'dump'); + } + }, + handleFile: function(file, isSingle, max) { + var post, _ref; + if (file.size > max) { + QR.error("" + file.name + ": File too large (file: " + ($.bytesToString(file.size)) + ", max: " + ($.bytesToString(max)) + ")."); + return; + } else if (_ref = file.type, __indexOf.call(QR.mimeTypes, _ref) < 0) { + if (!/^text/.test(file.type)) { + QR.error("" + file.name + ": Unsupported file type."); + return; + } + if (isSingle) { + post = QR.selected; + } else if ((post = QR.posts[QR.posts.length - 1]).com) { + post = new QR.post(); + } + post.pasteText(file); + return; + } + if (isSingle) { + post = QR.selected; + } else if ((post = QR.posts[QR.posts.length - 1]).file) { + post = new QR.post(); + } + return post.setFile(file); + }, + openFileInput: function(e) { + var _ref; + e.stopPropagation(); + if (e.shiftKey && e.type === 'click') { + return QR.selected.rmFile(); + } + if (e.ctrlKey && e.type === 'click') { + $.addClass(QR.nodes.filename, 'edit'); + QR.nodes.filename.focus(); + return $.on(QR.nodes.filename, 'blur', function() { + return $.rmClass(QR.nodes.filename, 'edit'); + }); + } + if (e.target.nodeName === 'INPUT' || (e.keyCode && ((_ref = e.keyCode) !== 32 && _ref !== 13)) || e.ctrlKey) { + return; + } + e.preventDefault(); + return QR.nodes.fileInput.click(); + }, + generatePostableThreadsList: function() { + var list, options, thread, val; + if (!QR.nodes) { + return; + } + list = QR.nodes.thread; + options = [list.firstChild]; + for (thread in g.BOARD.threads) { + options.push($.el('option', { + value: thread, + textContent: "Thread No." + thread + })); + } + val = list.value; + $.rmAll(list); + $.add(list, options); + list.value = val; + if (!list.value) { + return; + } + return list.value = g.VIEW === 'thread' ? g.THREADID : 'new'; + }, + dialog: function() { + var check, dialog, event, flagSelector, i, items, key, mimeTypes, name, node, nodes, save, value, _ref; + QR.nodes = nodes = { + el: dialog = UI.dialog('qr', 'top:0;right:0;', "
×
No selected file×+
") + }; + _ref = { + move: '.move', + autohide: '#autohide', + thread: 'select', + threadPar: '#qr-thread-select', + close: '.close', + form: 'form', + dumpButton: '#dump-button', + name: '[data-name=name]', + email: '[data-name=email]', + sub: '[data-name=sub]', + com: '[data-name=com]', + dumpList: '#dump-list', + addPost: '#add-post', + charCount: '#char-count', + fileSubmit: '#file-n-submit', + filename: '#qr-filename', + fileContainer: '#qr-filename-container', + fileRM: '#qr-filerm', + fileExtras: '#qr-extras-container', + spoiler: '#qr-file-spoiler', + spoilerPar: '#qr-spoiler-label', + status: '[type=submit]', + fileInput: '[type=file]' + }; + for (key in _ref) { + value = _ref[key]; + nodes[key] = $(value, dialog); + } + check = { + jpg: 'image/jpeg', + pdf: 'application/pdf', + swf: 'application/x-shockwave-flash' + }; + mimeTypes = $('ul.rules > li').textContent.trim().match(/: (.+)/)[1].toLowerCase().replace(/\w+/g, function(type) { + return check[type] || ("image/" + type); + }); + QR.mimeTypes = mimeTypes.split(', '); + QR.mimeTypes.push(''); + nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value; + QR.spoiler = !!$('input[name=spoiler]'); + if (QR.spoiler) { + $.addClass(QR.nodes.el, 'has-spoiler'); + } else { + nodes.spoiler.parentElement.hidden = true; + } + if (g.BOARD.ID === 'f') { + nodes.flashTag = $.el('select', { + name: 'filetag', + innerHTML: "\n\n\n\n\n\n" + }); + nodes.flashTag.dataset["default"] = '4'; + $.add(nodes.form, nodes.flashTag); + } + if (flagSelector = $('.flagSelector')) { + nodes.flag = flagSelector.cloneNode(true); + nodes.flag.dataset.name = 'flag'; + nodes.flag.dataset["default"] = '0'; + $.add(nodes.form, nodes.flag); + } + $.on(nodes.filename.parentNode, 'click keydown', QR.openFileInput); + $.on(dialog, 'focusin', QR.focusin); + $.on(dialog, '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.fileExtras, 'click', function(e) { + return e.stopPropagation(); + }); + $.on(nodes.spoiler, 'change', function() { + return QR.selected.nodes.spoiler.click(); + }); + $.on(nodes.fileInput, 'change', QR.handleFiles); + items = ['name', 'email', 'sub', 'com', 'filename', 'flag']; + i = 0; + save = function() { + return QR.selected.save(this); + }; + while (name = items[i++]) { + if (!(node = nodes[name])) { + continue; + } + event = node.nodeName === 'SELECT' ? 'change' : 'input'; + $.on(nodes[name], event, save); + } + QR.generatePostableThreadsList(); + QR.persona.init(); + 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 challenge, err, extra, filetag, formData, hook, options, post, 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 (g.BOARD.ID === 'vg' && !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.'; + } + } + QR.cleanNotifications(); + if (err) { + QR.cooldown.auto = false; + QR.status(); + QR.error(err); + return; + } + 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(); + formData = { + resto: threadID, + name: post.name, + email: post.email, + sub: post.sub, + com: post.com, + upfile: post.file, + filetag: filetag, + spoiler: post.spoiler, + flag: post.flag, + textonly: textOnly, + mode: 'regist', + pwd: QR.persona.pwd, + recaptcha_challenge_field: challenge, + recaptcha_response_field: response + }; + options = { + responseType: 'document', + withCredentials: true, + onload: QR.response, + onerror: function() { + delete QR.req; + post.unlock(); + QR.cooldown.auto = false; + QR.status(); + return QR.error($.el('span', { + innerHTML: "4chan X encountered an error while posting. \n[Banned?] [More info]" + })); + } + }; + extra = { + form: $.formData(formData), + 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, options, extra); + QR.req.uploadStartTime = Date.now(); + QR.req.progress = '...'; + return QR.status(); + }, + response: function() { + var URL, ban, board, captchasCount, err, h1, isReply, m, notif, post, postID, postsCount, req, resDoc, threadID, _, _ref, _ref1; + req = QR.req; + delete QR.req; + post = QR.posts[0]; + post.unlock(); + resDoc = req.response; + if (ban = $('.banType', resDoc)) { + board = $('.board', resDoc).innerHTML; + err = $.el('span', { + innerHTML: ban.textContent.toLowerCase() === 'banned' ? "You are banned on " + board + "! ;_;
\nClick here to see the reason." : "You were issued a warning on " + board + " as " + ($('.nameBlock', resDoc).innerHTML) + ".
\nReason: " + ($('.reason', resDoc).innerHTML) + }); + } else if (err = resDoc.getElementById('errmsg')) { + if ((_ref = $('a', err)) != null) { + _ref.target = '_blank'; + } + } else if (resDoc.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', resDoc); + QR.cleanNotifications(); + if (Conf['Posting Success Notifications']) { + QR.notifications.push(new Notice('success', h1.textContent, 5)); + } + QR.persona.set(post); + _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 + }); + $.event('QRPostSuccessful_', { + threadID: threadID, + postID: postID + }); + postsCount = QR.posts.length - 1; + QR.cooldown.auto = postsCount && isReply; + if (QR.cooldown.auto && QR.captcha.isEnabled && (captchasCount = QR.captcha.captchas.length) < 3 && captchasCount < postsCount) { + notif = new Notification('Quick reply warning', { + body: "You are running low on cached captchas. Cache count: " + captchasCount + ".", + icon: Favicon.logo + }); + notif.onclick = function() { + QR.open(); + QR.captcha.nodes.input.focus(); + return window.focus(); + }; + notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + } + if (!(Conf['Persistent QR'] || QR.cooldown.auto)) { + QR.close(); + } else { + post.rm(); + } + QR.cooldown.set({ + req: req, + post: post, + isReply: isReply, + threadID: threadID + }); + URL = threadID === postID ? "/" + g.BOARD + "/res/" + threadID : g.VIEW === 'index' && !QR.cooldown.auto && Conf['Open Post in New Tab'] ? "/" + g.BOARD + "/res/" + threadID + "#p" + postID : void 0; + if (URL) { + if (Conf['Open Post in New Tab']) { + $.open(URL); + } else { + window.location = URL; + } + } + return QR.status(); + }, + abort: function() { + if (QR.req && !QR.req.isUploadFinished) { + QR.req.abort(); + delete QR.req; + QR.posts[0].unlock(); + QR.cooldown.auto = false; + QR.notifications.push(new Notice('info', 'QR upload aborted.', 5)); + } + return QR.status(); + } + }; + + QR.captcha = { + init: function() { + var container, imgContainer, input; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + container = $.id('captchaContainer'); + if (!(this.isEnabled = !!container)) { + return; + } + imgContainer = $.el('div', { + className: 'captcha-img', + title: 'Reload reCAPTCHA', + innerHTML: '', + hidden: true + }); + input = $.el('input', { + className: 'captcha-input field', + title: 'Verification', + placeholder: 'Focus to load reCAPTCHA', + autocomplete: 'off', + spellcheck: false, + tabIndex: 55 + }); + this.nodes = { + img: imgContainer.firstChild, + input: input + }; + $.on(input, 'focus', this.setup); + $.on(input, 'focus', function() { + return $.addClass(QR.nodes.el, 'focus'); + }); + $.on(input, 'blur', function() { + return $.rmClass(QR.nodes.el, 'focus'); + }); + $.addClass(QR.nodes.el, 'has-captcha'); + $.after(QR.nodes.com.parentNode, [imgContainer, input]); + this.setupObserver = new MutationObserver(this.afterSetup); + this.setupObserver.observe(container, { + childList: true + }); + return this.afterSetup(); + }, + setup: function() { + return $.globalEval('loadRecaptcha()'); + }, + afterSetup: function() { + var challenge, img, input, setLifetime, _ref; + if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { + return; + } + QR.captcha.setupObserver.disconnect(); + delete QR.captcha.setupObserver; + setLifetime = function(e) { + return QR.captcha.lifetime = e.detail; + }; + $.on(window, 'captcha:timeout', setLifetime); + $.globalEval('window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))'); + $.off(window, 'captcha:timeout', setLifetime); + _ref = QR.captcha.nodes, img = _ref.img, input = _ref.input; + img.parentNode.hidden = false; + $.off(input, 'focus', QR.captcha.setup); + $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); + $.on(img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); + $.get('captchas', [], function(_arg) { + var captchas; + captchas = _arg.captchas; + return QR.captcha.sync(captchas); + }); + $.sync('captchas', QR.captcha.sync); + QR.captcha.nodes.challenge = challenge; + new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { + childList: true + }); + return QR.captcha.load(); + }, + sync: function(captchas) { + QR.captcha.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; + if (!this.captchas.length) { + return; + } + 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(); + } + }; + + QR.cooldown = { + init: function() { + var key, setTimers, type, + _this = this; + if (!Conf['Cooldown']) { + return; + } + setTimers = function(e) { + return QR.cooldown.types = e.detail; + }; + $.on(window, 'cooldown:timers', setTimers); + $.globalEval('window.dispatchEvent(new CustomEvent("cooldown:timers", {detail: cooldowns}))'); + $.off(window, 'cooldown:timers', setTimers); + for (type in QR.cooldown.types) { + QR.cooldown.types[type] = +QR.cooldown.types[type]; + } + QR.cooldown.upSpd = 0; + QR.cooldown.upSpdAccuracy = .5; + key = "cooldown." + g.BOARD; + $.get(key, {}, function(item) { + QR.cooldown.cooldowns = item[key]; + return QR.cooldown.start(); + }); + return $.sync(key, 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, isReply, post, req, start, threadID, upSpd; + if (!Conf['Cooldown']) { + return; + } + req = data.req, post = data.post, isReply = data.isReply, threadID = data.threadID, delay = data.delay; + start = req ? req.uploadEndTime : Date.now(); + if (delay) { + cooldown = { + delay: delay + }; + } else { + if (post.file) { + upSpd = post.file.size / ((start - req.uploadStartTime) / $.SECOND); + QR.cooldown.upSpdAccuracy = ((upSpd > QR.cooldown.upSpd * .9) + QR.cooldown.upSpdAccuracy) / 2; + QR.cooldown.upSpd = upSpd; + } + cooldown = { + isReply: isReply, + threadID: threadID + }; + } + 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, maxTimer, 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; + } + clearTimeout(QR.cooldown.timeout); + QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); + now = Date.now(); + post = QR.posts[0]; + isReply = post.thread !== 'new'; + 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) { + elapsed = Math.floor((now - start) / $.SECOND); + if (elapsed < 0) { + continue; + } + type = !isReply ? 'thread' : hasFile ? 'image' : 'reply'; + maxTimer = Math.max(types[type] || 0, types[type + '_intra'] || 0); + if (!((start <= now && now <= start + maxTimer * $.SECOND))) { + QR.cooldown.unset(start); + } + if (isReply && +post.thread === cooldown.threadID) { + type += '_intra'; + } + seconds = Math.max(seconds, types[type] - elapsed); + } + } + if (seconds && Conf['Cooldown Prediction'] && hasFile && upSpd) { + seconds -= Math.floor(post.file.size / upSpd * upSpdAccuracy); + seconds = seconds > 0 ? seconds : 0; + } + 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(); + } + } + }; + + QR.persona = { + pwd: '', + always: {}, + init: function() { + QR.persona.getPassword(); + return $.get('QR.personas', Conf['QR.personas'], function(_arg) { + var arr, item, personas, type, types, _i, _len, _ref; + personas = _arg['QR.personas']; + types = { + name: [], + email: [], + sub: [] + }; + _ref = personas.split('\n'); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + item = _ref[_i]; + QR.persona.parseItem(item.trim(), types); + } + for (type in types) { + arr = types[type]; + QR.persona.loadPersonas(type, arr); + } + }); + }, + parseItem: function(item, types) { + var boards, match, type, val, _ref, _ref1, _ref2; + if (item[0] === '#') { + return; + } + if (!(match = item.match(/(name|email|subject|password):"(.*)"/i))) { + return; + } + _ref = match, match = _ref[0], type = _ref[1], val = _ref[2]; + item = item.replace(match, ''); + boards = ((_ref1 = item.match(/boards:([^;]+)/i)) != null ? _ref1[1].toLowerCase() : void 0) || 'global'; + if (boards !== 'global' && (_ref2 = g.BOARD.ID, __indexOf.call(boards.split(','), _ref2) < 0)) { + return; + } + if (type === 'password') { + QR.persona.pwd = val; + return; + } + if (type === 'subject') { + type = 'sub'; + } + if (/always/i.test(item)) { + QR.persona.always[type] = val; + } + if (__indexOf.call(types[type], val) < 0) { + return types[type].push(val); + } + }, + loadPersonas: function(type, arr) { + var list, val, _i, _len; + list = $("#list-" + type, QR.nodes.el); + for (_i = 0, _len = arr.length; _i < _len; _i++) { + val = arr[_i]; + if (val) { + $.add(list, $.el('option', { + textContent: val + })); + } + } + }, + getPassword: function() { + var input, m; + if (!QR.persona.pwd) { + QR.persona.pwd = (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : (input = $.id('postPassword')) ? input.value : $.id('delPassword').value; + } + return QR.persona.pwd; + }, + get: function(cb) { + return $.get('QR.persona', {}, function(_arg) { + var persona; + persona = _arg['QR.persona']; + return cb(persona); + }); + }, + set: function(post) { + return $.get('QR.persona', {}, function(_arg) { + var persona; + persona = _arg['QR.persona']; + persona = { + name: post.name, + email: /^sage$/.test(post.email) ? persona.email : post.email, + sub: Conf['Remember Subject'] ? post.sub : void 0, + flag: post.flag + }; + return $.set('QR.persona', persona); + }); + } + }; + + QR.post = (function() { + function _Class(select) { + this.select = __bind(this.select, this); + 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); + $.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; + QR.persona.get(function(persona) { + _this.name = 'name' in QR.persona.always ? QR.persona.always.name : prev ? prev.name : persona.name; + _this.email = 'email' in QR.persona.always ? QR.persona.always.email : prev && !/^sage$/.test(prev.email) ? prev.email : persona.email; + _this.sub = 'sub' in QR.persona.always ? QR.persona.always.sub : Conf['Remember Subject'] ? prev ? prev.sub : persona.sub : ''; + if (QR.nodes.flag) { + _this.flag = prev ? prev.flag : persona.flag; + } + if (QR.selected === _this) { + return _this.load(); + } + }); + if (select) { + this.select(); + } + this.unlock(); + } + + _Class.prototype.rm = function() { + var index; + this["delete"](); + index = QR.posts.indexOf(this); + if (QR.posts.length === 1) { + new QR.post(true); + $.rmClass(QR.nodes.el, 'dump'); + } else if (this === QR.selected) { + (QR.posts[index - 1] || QR.posts[index + 1]).select(); + } + QR.posts.splice(index, 1); + return QR.status(); + }; + + _Class.prototype["delete"] = function() { + $.rm(this.nodes.el); + return URL.revokeObjectURL(this.URL); + }; + + _Class.prototype.lock = function(lock) { + var name, node, _i, _len, _ref; + if (lock == null) { + lock = true; + } + this.isLocked = lock; + if (this !== QR.selected) { + return; + } + _ref = ['thread', 'name', 'email', 'sub', 'com', 'fileButton', 'filename', 'spoiler', 'flag']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + name = _ref[_i]; + if (node = QR.nodes[name]) { + node.disabled = lock; + } + } + this.nodes.rm.style.visibility = lock ? 'hidden' : ''; + (lock ? $.off : $.on)(QR.nodes.filename.previousElementSibling, '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, node, _i, _len, _ref; + _ref = ['thread', 'name', 'email', 'sub', 'com', 'filename', 'flag']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + name = _ref[_i]; + if (!(node = QR.nodes[name])) { + continue; + } + node.value = this[name] || node.dataset["default"] || null; + } + this.showFileData(); + return QR.characterCount(); + }; + + _Class.prototype.save = function(input) { + var name, _ref; + if (input.type === 'checkbox') { + this.spoiler = input.checked; + return; + } + name = input.dataset.name; + this[name] = input.value || input.dataset["default"] || null; + switch (name) { + case 'thread': + return QR.status(); + case 'com': + this.nodes.span.textContent = this.com; + QR.characterCount(); + if (QR.cooldown.auto && this === QR.posts[0] && (0 < (_ref = QR.cooldown.seconds) && _ref <= 5)) { + return QR.cooldown.auto = false; + } + break; + case 'filename': + if (!this.file) { + return; + } + this.file.newName = this.filename.replace(/[/\\]/g, '-'); + if (!/\.(jpe?g|png|gif|pdf|swf)$/i.test(this.filename)) { + this.file.newName += '.jpg'; + } + return this.updateFilename(); + } + }; + + _Class.prototype.forceSave = function() { + var name, node, _i, _len, _ref; + if (this !== QR.selected) { + return; + } + _ref = ['thread', 'name', 'email', 'sub', 'com', 'filename', 'spoiler', 'flag']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + name = _ref[_i]; + if (!(node = QR.nodes[name])) { + continue; + } + this.save(node); + } + }; + + _Class.prototype.setFile = function(file) { + this.file = file; + this.filename = file.name; + this.filesize = $.bytesToString(file.size); + if (QR.spoiler) { + this.nodes.label.hidden = false; + } + URL.revokeObjectURL(this.URL); + if (this === QR.selected) { + this.showFileData(); + } + if (!/^image/.test(file.type)) { + this.nodes.el.style.backgroundImage = null; + return; + } + return this.setThumbnail(); + }; + + _Class.prototype.setThumbnail = function() { + var fileURL, img, + _this = this; + img = $.el('img'); + img.onload = function() { + var cv, height, s, width; + s = 90 * 2 * window.devicePixelRatio; + if (_this.file.type === 'image/gif') { + s *= 3; + } + height = img.height, width = img.width; + if (height < s || width < s) { + _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); + URL.revokeObjectURL(fileURL); + return cv.toBlob(function(blob) { + _this.URL = URL.createObjectURL(blob); + return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; + }); + }; + fileURL = URL.createObjectURL(this.file); + return img.src = fileURL; + }; + + _Class.prototype.rmFile = function() { + if (this.isLocked) { + return; + } + delete this.file; + delete this.filename; + delete this.filesize; + this.nodes.el.title = null; + QR.nodes.fileContainer.title = ''; + this.nodes.el.style.backgroundImage = null; + if (QR.spoiler) { + this.nodes.label.hidden = true; + } + this.showFileData(); + return URL.revokeObjectURL(this.URL); + }; + + _Class.prototype.updateFilename = function() { + var long; + long = "" + this.filename + " (" + this.filesize + ")\nCtrl+click to edit filename. Shift+click to clear."; + this.nodes.el.title = long; + if (this !== QR.selected) { + return; + } + return QR.nodes.fileContainer.title = long; + }; + + _Class.prototype.showFileData = function() { + if (this.file) { + this.updateFilename(); + QR.nodes.filename.value = this.filename; + 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(e) { + e.dataTransfer.setDragImage(this, e.layerX, e.layerY); + 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; + $.rmClass(this, 'over'); + if (!this.draggable) { + return; + } + el = $('.drag', this.parentNode); + 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]; + QR.posts.splice(newIndex, 0, post); + return QR.status(); + }; + + return _Class; + + })(); + + AutoGIF = { + init: function() { + var _ref; + if (g.VIEW === 'catalog' || !Conf['Auto-GIF'] || ((_ref = g.BOARD.ID) === 'gif' || _ref === 'wsg')) { + return; + } + return Post.callbacks.push({ + name: 'Auto-GIF', + cb: this.node + }); + }, + node: function() { + var URL, gif, style, thumb, _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 (!(/gif$/.test(URL) && !/spoiler/.test(thumb.src))) { + return; + } + if (this.file.isSpoiler) { + style = thumb.style; + style.maxHeight = style.maxWidth = this.isReply ? '125px' : '250px'; + } + gif = $.el('img'); + $.on(gif, 'load', function() { + return thumb.src = URL; + }); + return gif.src = URL; + } + }; + + FappeTyme = { + init: function() { + var el, input, lc, type, _i, _len, _ref; + if (!(Conf['Fappe Tyme'] || Conf['Werk Tyme']) || g.VIEW === 'catalog' || g.BOARD === 'f') { + return; + } + _ref = ["Fappe", "Werk"]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + type = _ref[_i]; + if (!Conf["" + type + " Tyme"]) { + continue; + } + lc = type.toLowerCase(); + el = $.el('label', { + innerHTML: " " + type + " Tyme", + title: "" + type + " Tyme" + }); + FappeTyme[lc] = input = el.firstElementChild; + $.on(input, 'change', FappeTyme.cb.toggle.bind(input)); + $.event('AddMenuEntry', { + type: 'header', + el: el, + order: 97 + }); + if (Conf[lc]) { + FappeTyme.cb.set(lc); + } + } + return Post.callbacks.push({ + name: 'Fappe Tyme', + cb: this.node + }); + }, + node: function() { + if (this.file) { + return; + } + return $.addClass(this.nodes.root, "noFile"); + }, + cb: { + set: function(type) { + FappeTyme[type].checked = Conf[type]; + return $["" + (Conf[type] ? 'add' : 'rm') + "Class"](doc, "" + type + "Tyme"); + }, + toggle: function() { + Conf[this.name] = !Conf[this.name]; + FappeTyme.cb.set(this.name); + return $.cb.checked.call(FappeTyme[this.name]); + } + } + }; + + Gallery = { + init: function() { + var el; + if (g.VIEW === 'catalog' || g.BOARD === 'f' || !Conf['Gallery']) { + return; + } + el = $.el('a', { + href: 'javascript:;', + id: 'appchan-gal', + title: 'Gallery', + className: 'fa fa-picture-o', + textContent: 'Gallery' + }); + $.on(el, 'click', this.cb.toggle); + Header.addShortcut(el); + return Post.callbacks.push({ + name: 'Gallery', + cb: this.node + }); + }, + node: function() { + var _ref; + if (!((_ref = this.file) != null ? _ref.isImage : void 0)) { + return; + } + if (Gallery.nodes) { + Gallery.generateThumb($('.file', this.nodes.root)); + Gallery.nodes.total.textContent = Gallery.images.length; + } + if (!Conf['Image Expansion']) { + return $.on(this.file.thumb.parentNode, 'click', Gallery.cb.image); + } + }, + build: function(image) { + var cb, createSubEntry, dialog, el, file, files, i, key, menuButton, name, nodes, value, _ref; + Gallery.images = []; + nodes = Gallery.nodes = {}; + nodes.el = dialog = $.el('div', { + id: 'a-gallery', + innerHTML: "
\n \n \n ×\n \n \n / \n
\n
\n \n
\n
\n
\n
" + }); + _ref = { + frame: '.gal-image', + name: '.gal-name', + count: '.count', + total: '.total', + thumbs: '.gal-thumbnails', + next: '.gal-image a', + current: '.gal-image img' + }; + for (key in _ref) { + value = _ref[key]; + nodes[key] = $(value, dialog); + } + menuButton = $('.menu-button', dialog); + nodes.menu = new UI.Menu('gallery'); + cb = Gallery.cb; + $.on(nodes.frame, 'click', cb.blank); + $.on(nodes.current, 'click', cb.download); + $.on(nodes.next, 'click', cb.next); + $.on($('.gal-prev', dialog), 'click', cb.prev); + $.on($('.gal-next', dialog), 'click', cb.next); + $.on($('.gal-close', dialog), 'click', cb.close); + $.on(menuButton, 'click', function(e) { + return nodes.menu.toggle(e, this, g); + }); + createSubEntry = Gallery.menu.createSubEntry; + for (name in Config.gallery) { + el = createSubEntry(name).el; + $.event('AddMenuEntry', { + type: 'gallery', + el: el, + order: 0 + }); + } + $.on(d, 'keydown', cb.keybinds); + $.off(d, 'keydown', Keybinds.keydown); + i = 0; + files = $$('.post .file'); + while (file = files[i++]) { + if ($('.fileDeletedRes, .fileDeleted', file)) { + continue; + } + Gallery.generateThumb(file); + } + $.add(d.body, dialog); + nodes.thumbs.scrollTop = 0; + nodes.current.parentElement.scrollTop = 0; + Gallery.cb.open.call(image ? $("[href='" + (image.href.replace(/https?:/, '')) + "']", nodes.thumbs) : Gallery.images[0]); + d.body.style.overflow = 'hidden'; + return nodes.total.textContent = --i; + }, + generateThumb: function(file) { + var double, post, thumb, title; + post = Get.postFromNode(file); + title = ($('.fileText a', file)).textContent; + thumb = post.file.thumb.parentNode.cloneNode(true); + if (double = $('img + img', thumb)) { + $.rm(double); + } + thumb.className = 'gal-thumb'; + thumb.title = title; + thumb.dataset.id = Gallery.images.length; + thumb.dataset.post = $('a[title="Highlight this post"]', post.nodes.info).href; + thumb.firstElementChild.style.cssText = ''; + $.on(thumb, 'click', Gallery.cb.open); + Gallery.images.push(thumb); + return $.add(Gallery.nodes.thumbs, thumb); + }, + cb: { + keybinds: function(e) { + var cb, key; + if (!(key = Keybinds.keyCode(e))) { + return; + } + cb = (function() { + switch (key) { + case 'Esc': + case Conf['Open Gallery']: + return Gallery.cb.close; + case 'Right': + case 'Enter': + return Gallery.cb.next; + case 'Left': + case '': + return Gallery.cb.prev; + } + })(); + if (!cb) { + return; + } + e.stopPropagation(); + e.preventDefault(); + return cb(); + }, + open: function(e) { + var el, img, name, nodes, rect, top; + if (e) { + e.preventDefault(); + } + if (!this) { + return; + } + nodes = Gallery.nodes; + name = nodes.name; + if (el = $('.gal-highlight', Gallery.thumbs)) { + $.rmClass(el, 'gal-highlight'); + } + $.addClass(this, 'gal-highlight'); + img = $.el('img', { + src: name.href = this.href, + title: name.download = name.textContent = this.title + }); + $.extend(img.dataset, this.dataset); + $.replace(nodes.current, img); + nodes.count.textContent = +this.dataset.id + 1; + nodes.current = img; + nodes.frame.scrollTop = 0; + nodes.next.focus(); + rect = this.getBoundingClientRect(); + top = rect.top; + if (top > 0) { + top += rect.height - doc.clientHeight; + if (top < 0) { + return; + } + } + nodes.thumbs.scrollTop += top; + return $.on(img, 'error', function() { + return Gallery.cb.error(img, thumb); + }); + }, + image: function(e) { + e.preventDefault(); + e.stopPropagation(); + return Gallery.build(this); + }, + error: function(img, thumb) { + var URL, post, revived, src; + post = Get.postFromLink($.el('a', { + href: img.dataset.post + })); + delete post.file.fullImage; + src = this.src.split('/'); + if (src[2] === 'images.4chan.org') { + URL = Redirect.to('file', { + boardID: src[3], + filename: src[5] + }); + if (URL) { + thumb.href = URL; + if (Gallery.nodes.current !== img) { + return; + } + revived = $.el('img', { + src: URL, + title: img.title + }); + $.extend(revived.dataset, img.dataset); + $.replace(img, revived); + return; + } + if (g.DEAD || post.isDead || post.file.isDead) { + return; + } + } + return $.ajax("//api.4chan.org/" + post.board + "/res/" + post.thread + ".json", { + onload: function() { + var i, postObj; + if (this.status !== 200) { + return; + } + i = 0; + while (postObj = JSON.parse(this.response).posts[i++]) { + if (postObj.no === post.ID) { + break; + } + } + if (!postObj.no) { + return post.kill(); + } + if (postObj.filedeleted) { + return post.kill(true); + } + } + }); + }, + prev: function() { + return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id - 1]); + }, + next: function() { + return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id + 1]); + }, + toggle: function() { + return (Gallery.nodes ? Gallery.cb.close : Gallery.build)(); + }, + blank: function(e) { + if (e.target === this) { + return Gallery.cb.close(); + } + }, + close: function() { + $.rm(Gallery.nodes.el); + delete Gallery.nodes; + d.body.style.overflow = ''; + $.off(d, 'keydown', Gallery.cb.keybinds); + return $.on(d, 'keydown', Keybinds.keydown); + }, + setFitness: function() { + return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); + } + }, + menu: { + init: function() { + var createSubEntry, el, name, subEntries; + if (g.VIEW === 'catalog' || !Conf['Gallery']) { + return; + } + el = $.el('span', { + textContent: 'Gallery', + className: 'gallery-link' + }); + createSubEntry = Gallery.menu.createSubEntry; + subEntries = []; + for (name in Config.gallery) { + subEntries.push(createSubEntry(name)); + } + return $.event('AddMenuEntry', { + type: 'header', + el: el, + order: 105, + subEntries: subEntries + }); + }, + createSubEntry: function(name) { + var input, label; + label = $.el('label', { + innerHTML: " " + name + }); + input = label.firstElementChild; + if (name === 'Fit Width' || name === 'Fit Height' || name === 'Hide Thumbnails') { + $.on(input, 'change', Gallery.cb.setFitness); + } + input.checked = Conf[name]; + $.event('change', null, input); + $.on(input, 'change', $.cb.checked); + return { + el: label + }; + } + } + }; + + ImageExpand = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Image Expansion']) { + return; + } + this.EAI = $.el('a', { + className: 'expand-all-shortcut fa fa-expand', + textContent: 'EAI', + title: 'Expand All Images', + href: 'javascript:;' + }); + $.on(this.EAI, 'click', ImageExpand.cb.toggleAll); + Header.addShortcut(this.EAI, 3); + return Post.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 && (Conf['Expand spoilers'] || !this.file.isSpoiler)) { + 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 fa fa-compress'; + ImageExpand.EAI.title = 'Contract All Images'; + func = ImageExpand.expand; + } else { + ImageExpand.EAI.className = 'expand-all-shortcut fa fa-expand'; + 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'] && Header.getTopOf(file.thumb) < 0)) { + continue; + } + $.queueTask(func, post); + } + } + }, + setFitness: function() { + return (this.checked ? $.addClass : $.rmClass)(doc, this.name.toLowerCase().replace(/\s+/g, '-')); + } + }, + toggle: function(post) { + var headRect, left, root, thumb, top, x, y, _ref; + thumb = post.file.thumb; + if (!(post.file.isExpanded || $.hasClass(thumb, 'expanding'))) { + ImageExpand.expand(post); + return; + } + root = post.nodes.root; + _ref = (Conf['Advance on contract'] ? (function() { + var next; + next = root; + while (next = $.x("following::div[contains(@class,'postContainer')][1]", next)) { + if ($('.stub', next) || next.offsetHeight === 0) { + continue; + } + return next; + } + return root; + })() : root).getBoundingClientRect(), top = _ref.top, left = _ref.left; + if (top < 0) { + y = top; + if (Conf['Fixed Header'] && !Conf['Bottom Header']) { + headRect = Header.bar.getBoundingClientRect(); + y -= headRect.top + headRect.height; + } + } + if (left < 0) { + x = -window.scrollX; + } + if (x || y) { + window.scrollBy(x, y); + } + return ImageExpand.contract(post); + }, + 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 bottom, 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; + } + bottom = post.nodes.root.getBoundingClientRect().bottom; + return $.queueTask(function() { + $.addClass(post.nodes.root, 'expanded-image'); + $.rmClass(post.file.thumb, 'expanding'); + if (!(bottom <= 0)) { + return; + } + return window.scrollBy(0, post.nodes.root.getBoundingClientRect().bottom - bottom); + }); + }, + 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] === 'i.4cdn.org') { + URL = Redirect.to('file', { + boardID: src[3], + filename: src[5] + }); + if (URL) { + setTimeout(ImageExpand.expand, 10000, post, URL); + return; + } + if (g.DEAD || post.isDead || post.file.isDead) { + return; + } + } + timeoutID = setTimeout(ImageExpand.expand, 10000, post); + return $.ajax("//a.4cdn.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, name, 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 (name in _ref) { + conf = _ref[name]; + subEntries.push(createSubEntry(name, conf[1])); + } + return $.event('AddMenuEntry', { + type: 'header', + el: el, + order: 105, + subEntries: subEntries + }); + }, + createSubEntry: function(name, desc) { + var input, label; + label = $.el('label', { + innerHTML: " " + name, + title: desc + }); + input = label.firstElementChild; + if (name === 'Fit width' || name === 'Fit height') { + $.on(input, 'change', ImageExpand.cb.setFitness); + } + input.checked = Conf[name]; + $.event('change', null, input); + $.on(input, 'change', $.cb.checked); + return { + el: label + }; + } + } + }; + + ImageHover = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Image Hover']) { + return; + } + return Post.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.dataset.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] === 'i.4cdn.org') { + URL = Redirect.to('file', { + boardID: src[3], + filename: src[5].replace(/\?.+$/, '') + }); + if (URL) { + 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("//a.4cdn.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); + } + } + }); + } + }; + + ImageLoader = { + init: function() { + var prefetch; + if (g.VIEW === 'catalog') { + return; + } + if (!(Conf["Image Prefetching"] || Conf["Replace JPG"] || Conf["Replace PNG"] || Conf["Replace GIF"])) { + return; + } + Post.callbacks.push({ + name: 'Image Replace', + cb: this.node + }); + if (!(Conf['Image Prefetching'] && g.VIEW === 'thread')) { + return; + } + prefetch = $.el('label', { + innerHTML: ' Prefetch Images' + }); + this.el = prefetch.firstElementChild; + $.on(this.el, 'change', this.toggle); + return $.event('AddMenuEntry', { + type: 'header', + el: prefetch, + order: 104 + }); + }, + node: function() { + var URL, img, string, 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[string = "Replace " + ((type = (URL.match(/\w{3}$/))[0].toUpperCase()) === 'PEG' ? 'JPG' : type)] && !/spoiler/.test(thumb.src)) || Conf['prefetch'])) { + return; + } + if (this.file.isSpoiler) { + style = thumb.style; + style.maxHeight = style.maxWidth = this.isReply ? '125px' : '250px'; + } + img = $.el('img'); + if (Conf[string]) { + $.on(img, 'load', function() { + return thumb.src = URL; + }); + } + return img.src = URL; + }, + toggle: function() { + var enabled, id, post, _ref; + enabled = Conf['prefetch'] = this.checked; + if (enabled) { + _ref = g.threads["" + g.BOARD.ID + "." + g.THREADID].posts; + for (id in _ref) { + post = _ref[id]; + ImageLoader.node.call(post); + } + } + } + }; + + RevealSpoilers = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Reveal Spoiler Thumbnails']) { + return; + } + return Post.callbacks.push({ + 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; + } + }; + + Sauce = { + init: function() { + var err, 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]; + try { + if (link[0] !== '#') { + links.push(this.createSauceLink(link.trim())); + } + } catch (_error) { + err = _error; + } + } + if (!links.length) { + return; + } + this.links = links; + this.link = $.el('a', { + target: '_blank' + }); + return Post.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.text, nodes); + } + }; + + Linkify = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Linkify']) { + return; + } + this.regString = /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/])|[-a-z\d]+[.](aero|asia|biz|cat|com|coop|info|int|jobs|mobi|museum|name|net|org|post|pro|tel|travel|xxx|edu|gov|mil|[a-z]{2})(\/|(?!.))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i; + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + if (Conf['Title Link']) { + $.sync('CachedTitles', Linkify.titleSync); + } + return Post.callbacks.push({ + name: 'Linkify', + cb: this.node + }); + }, + node: function() { + var data, el, end, endNode, i, index, items, length, link, links, node, result, saved, snapshot, space, test, word, _i, _len, _ref; + if (this.isClone) { + if (Conf['Embedding']) { + i = 0; + items = $$('.embed', this.nodes.comment); + while (el = items[i++]) { + $.on(el, 'click', Linkify.cb.toggle); + if ($.hasClass(el, 'embedded')) { + Linkify.cb.toggle.call(el); + } + } + } + return; + } + test = /[^\s'"]+/g; + space = /[\s'"]/; + snapshot = $.X('.//br|.//text()', this.nodes.comment); + i = 0; + links = []; + while (node = snapshot.snapshotItem(i++)) { + data = node.data; + if (node.parentElement.nodeName === "A" || !data) { + continue; + } + while (result = test.exec(data)) { + index = result.index; + endNode = node; + word = result[0]; + if ((length = index + word.length) === data.length) { + test.lastIndex = 0; + while ((saved = snapshot.snapshotItem(i++))) { + if (saved.nodeName === 'BR') { + break; + } + endNode = saved; + data = saved.data; + word += data; + length = data.length; + if (end = space.exec(data)) { + test.lastIndex = length = end.index; + i--; + break; + } + } + } + if (Linkify.regString.exec(word)) { + links.push(Linkify.makeRange(node, endNode, index, length)); + } + if (!(test.lastIndex && node === endNode)) { + break; + } + } + } + _ref = links.reverse(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + link = _ref[_i]; + this.nodes.links.push(Linkify.makeLink(link, this)); + link.detach(); + } + if (!(Conf['Embedding'] || Conf['Link Title'])) { + return; + } + links = this.nodes.links; + i = 0; + while (link = links[i++]) { + if (data = Linkify.services(link)) { + if (Conf['Embedding']) { + Linkify.embed(data); + } + if (Conf['Link Title']) { + Linkify.title(data); + } + } + } + }, + makeRange: function(startNode, endNode, startOffset, endOffset) { + var range; + range = document.createRange(); + range.setStart(startNode, startOffset); + range.setEnd(endNode, endOffset); + return range; + }, + makeLink: function(range) { + var a, char, i, text; + text = range.toString(); + i = 0; + while (/[(\[{<>]/.test(text.charAt(i))) { + i++; + } + if (i) { + text = text.slice(i); + while (range.startOffset + i >= range.startContainer.data.length) { + i--; + } + if (i) { + range.setStart(range.startContainer, range.startOffset + i); + } + } + i = 0; + while (/[)\]}>.,]/.test(char = text.charAt(text.length - (1 + i)))) { + if (!(/[.,]/.test(char) || (text.match(/[()\[\]{}<>]/g)).length % 2)) { + break; + } + i++; + } + if (i) { + text = text.slice(0, -i); + while (range.endOffset - i < 0) { + i--; + } + if (i) { + range.setEnd(range.endContainer, range.endOffset - i); + } + } + if (!/(https?|mailto|git|magnet|ftp|irc):/.test(text)) { + text = (/@/.test(text) ? 'mailto:' : 'http://') + text; + } + a = $.el('a', { + className: 'linkify', + rel: 'nofollow noreferrer', + target: '_blank', + href: text + }); + $.add(a, range.extractContents()); + range.insertNode(a); + return a; + }, + services: function(link) { + var href, key, match, type, _ref; + href = link.href; + _ref = Linkify.types; + for (key in _ref) { + type = _ref[key]; + if (!(match = type.regExp.exec(href))) { + continue; + } + return [key, match[1], match[2], link]; + } + }, + embed: function(data) { + var embed, href, key, link, name, options, uid, value, _ref; + key = data[0], uid = data[1], options = data[2], link = data[3]; + href = link.href; + embed = $.el('a', { + className: 'embedder', + href: 'javascript:;', + textContent: '(embed)' + }); + _ref = { + key: key, + href: href, + uid: uid, + options: options + }; + for (name in _ref) { + value = _ref[name]; + embed.dataset[name] = value; + } + embed.dataset.nodedata = link.innerHTML; + $.addClass(link, "" + embed.dataset.key); + $.on(embed, 'click', Linkify.cb.toggle); + $.after(link, [$.tn(' '), embed]); + if (Conf['Auto-embed']) { + Linkify.cb.toggle.call(embed); + } + data.push(embed); + }, + title: function(data) { + var embed, err, key, link, options, service, title, titles, uid; + key = data[0], uid = data[1], options = data[2], link = data[3], embed = data[4]; + if (!(service = Linkify.types[key].title)) { + return; + } + titles = Conf['CachedTitles']; + if (title = titles[uid]) { + if (link) { + link.textContent = title[0]; + } + if (Conf['Embedding']) { + return embed.dataset.title = title[0]; + } + } else { + try { + $.cache(service.api(uid), function() { + return title = Linkify.cb.title(this, data); + }); + } catch (_error) { + err = _error; + if (link) { + link.innerHTML = "[" + key + "] Title Link Blocked (are you using NoScript?)"; + } + return; + } + if (title) { + titles[uid] = [title, Date.now()]; + return $.set('CachedTitles', titles); + } + } + }, + titleSync: function(value) { + return Conf['CachedTitles'] = value; + }, + cb: { + toggle: function() { + var string, _ref; + _ref = $.hasClass(this, "embedded") ? ['unembed', '(embed)'] : ['embed', '(unembed)'], string = _ref[0], this.textContent = _ref[1]; + $.replace(this.previousElementSibling, Linkify.cb[string](this)); + return $.toggleClass(this, 'embedded'); + }, + embed: function(a) { + var el, style, type; + el = (type = Linkify.types[a.dataset.key]).el(a); + el.style.cssText = (style = type.style) ? style : "border: 0; width: 640px; height: 390px"; + return el; + }, + unembed: function(a) { + var el; + el = $.el('a', { + rel: 'nofollow noreferrer', + target: 'blank', + className: 'linkify', + href: a.dataset.href, + innerHTML: a.dataset.title || a.dataset.nodedata + }); + $.addClass(el, a.dataset.key); + return el; + }, + title: function(response, data) { + var embed, key, link, options, service, text, uid; + key = data[0], uid = data[1], options = data[2], link = data[3], embed = data[4]; + service = Linkify.types[key].title; + switch (response.status) { + case 200: + case 304: + text = "" + (service.text(JSON.parse(response.responseText))); + if (Conf['Embedding']) { + embed.dataset.title = text; + } + break; + case 404: + text = "[" + key + "] Not Found"; + break; + case 403: + text = "[" + key + "] Forbidden or Private"; + break; + default: + text = "[" + key + "] " + this.status + "'d"; + } + if (link) { + return link.textContent = text; + } + } + }, + types: { + audio: { + regExp: /(.*\.(mp3|ogg|wav))$/, + el: function(a) { + return $.el('audio', { + controls: 'controls', + preload: 'auto', + src: a.dataset.uid + }); + } + }, + gist: { + regExp: /.*(?:gist.github.com.*\/)([^\/][^\/]*)$/, + el: function(a) { + var div; + return div = $.el('iframe', { + src: "http://www.purplegene.com/script?url=https://gist.github.com/" + a.dataset.uid + ".js" + }); + }, + title: { + api: function(uid) { + return "https://api.github.com/gists/" + uid; + }, + text: function(_arg) { + var file, files; + files = _arg.files; + for (file in files) { + if (files.hasOwnProperty(file)) { + return file; + } + } + } + } + }, + image: { + regExp: /(http|www).*\.(gif|png|jpg|jpeg|bmp)$/, + style: 'border: 0; width: auto; height: auto;', + el: function(a) { + return $.el('div', { + innerHTML: "" + }); + } + }, + InstallGentoo: { + regExp: /.*(?:paste.installgentoo.com\/view\/)([0-9a-z_]+)/, + el: function(a) { + return $.el('iframe', { + src: "http://paste.installgentoo.com/view/embed/" + a.dataset.uid + }); + } + }, + LiveLeak: { + regExp: /.*(?:liveleak.com\/view.+i=)([0-9a-z_]+)/, + el: function(a) { + var el; + el = $.el('iframe', { + width: "640", + height: "360", + src: "http://www.liveleak.com/ll_embed?i=" + a.dataset.uid, + frameborder: "0" + }); + el.setAttribute("allowfullscreen", "true"); + return el; + } + }, + MediaCrush: { + regExp: /.*(?:mediacru.sh\/)([0-9a-z_]+)/i, + style: 'border: 0;', + el: function(a) { + var el; + el = $.el('div'); + $.cache("https://mediacru.sh/" + a.dataset.uid + ".json", function() { + var embed, file, files, status, type, _i, _j, _len, _len1, _ref; + status = this.status; + if (status !== 200 && status !== 304) { + return div.innerHTML = "ERROR " + status; + } + files = JSON.parse(this.response).files; + _ref = ['video/mp4', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'image/svg', 'audio/mpeg']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + type = _ref[_i]; + for (_j = 0, _len1 = files.length; _j < _len1; _j++) { + file = files[_j]; + if (file.type === type) { + embed = file; + break; + } + } + if (embed) { + break; + } + } + if (!embed) { + return div.innerHTML = "ERROR: Not a valid filetype"; + } + return el.innerHTML = (function() { + switch (embed.type) { + case 'video/mp4': + case 'video/ogv': + return ""; + case 'image/png': + case 'image/gif': + case 'image/jpeg': + return ""; + case 'image/svg': + case 'image/svg+xml': + return ""; + case 'audio/mpeg': + return ""; + default: + return "ERROR: No valid filetype."; + } + })(); + }); + return el; + } + }, + pastebin: { + regExp: /.*(?:pastebin.com\/(?!u\/))([^#\&\?]*).*/, + el: function(a) { + var div; + return div = $.el('iframe', { + src: "http://pastebin.com/embed_iframe.php?i=" + a.dataset.uid + }); + } + }, + SoundCloud: { + regExp: /.*(?:soundcloud.com\/|snd.sc\/)([^#\&\?]*).*/, + style: 'height: auto; width: 500px; display: inline-block;', + el: function(a) { + var div; + div = $.el('div', { + className: "soundcloud", + name: "soundcloud" + }); + $.ajax("//soundcloud.com/oembed?show_artwork=false&&maxwidth=500px&show_comments=false&format=json&url=https://www.soundcloud.com/" + a.dataset.uid, { + onloadend: function() { + return div.innerHTML = JSON.parse(this.responseText).html; + } + }, false); + return div; + }, + title: { + api: function(uid) { + return "//soundcloud.com/oembed?show_artwork=false&&maxwidth=500px&show_comments=false&format=json&url=https://www.soundcloud.com/" + uid; + }, + text: function(_) { + return _.title; + } + } + }, + StrawPoll: { + regExp: /strawpoll\.me\/(?:embed_\d+\/)?(\d+)/, + style: 'border: 0; width: 600px; height: 406px;', + el: function(a) { + return $.el('iframe', { + src: "http://strawpoll.me/embed_1/" + a.dataset.uid + }); + } + }, + TwitchTV: { + regExp: /.*(?:twitch.tv\/)([^#\&\?]*).*/, + style: "border: none; width: 640px; height: 360px;", + el: function(a) { + var channel, chapter, result, _; + if (result = /(\w+)\/(?:[a-z]\/)?(\d+)/i.exec(a.dataset.uid)) { + _ = result[0], channel = result[1], chapter = result[2]; + return $.el('object', { + data: 'http://www.twitch.tv/widgets/archive_embed_player.swf', + innerHTML: "\n" + }); + } else { + channel = (/(\w+)/.exec(a.dataset.uid))[0]; + return $.el('object', { + data: "http://www.twitch.tv/widgets/live_embed_player.swf?channel=" + channel, + innerHTML: "\n\n" + }); + } + } + }, + Vocaroo: { + regExp: /.*(?:vocaroo.com\/)([^#\&\?]*).*/, + style: 'border: 0; width: 150px; height: 45px;', + el: function(a) { + return $.el('object', { + innerHTML: "" + }); + } + }, + Vimeo: { + regExp: /.*(?:vimeo.com\/)([^#\&\?]*).*/, + el: function(a) { + return $.el('iframe', { + src: "//player.vimeo.com/video/" + a.dataset.uid + "?wmode=opaque" + }); + }, + title: { + api: function(uid) { + return "https://vimeo.com/api/oembed.json?url=http://vimeo.com/" + uid; + }, + text: function(_) { + return _.title; + } + } + }, + Vine: { + regExp: /.*(?:vine.co\/)([^#\&\?]*).*/, + style: 'border: none; width: 500px; height: 500px;', + el: function(a) { + return $.el('iframe', { + src: "https://vine.co/" + a.dataset.uid + "/card" + }); + } + }, + YouTube: { + regExp: /.*(?:youtu.be\/|youtube.*v=|youtube.*\/embed\/|youtube.*\/v\/|youtube.*videos\/)([^#\&\?]*)\??(t\=.*)?/, + el: function(a) { + var el; + el = $.el('iframe', { + src: "//www.youtube.com/embed/" + a.dataset.uid + (a.dataset.option ? '#' + a.dataset.option : '') + "?wmode=opaque" + }); + el.setAttribute("allowfullscreen", "true"); + return el; + }, + title: { + api: function(uid) { + return "https://gdata.youtube.com/feeds/api/videos/" + uid + "?alt=json&fields=title/text(),yt:noembed,app:control/yt:state/@reasonCode"; + }, + text: function(data) { + return data.entry.title.$t; + } + } + } + } + }; + + 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, thread; + ID = _arg.ID, thread = _arg.thread, board = _arg.board; + return !!Redirect.to('thread', { + postID: ID, + threadID: thread.ID, + boardID: board.ID + }); + }, + 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('thread', { + 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('search', { + boardID: post.board.ID, + type: type, + value: value, + isSearch: true + }); + return true; + }; + return { + el: el, + open: open + }; + } + }; + + 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, post; + post = DeleteLink.post; + if (DeleteLink.cooldown.counting === post) { + return; + } + $.off(this, 'click', DeleteLink["delete"]); + fileOnly = $.hasClass(this, 'delete-file'); + this.textContent = "Deleting " + (fileOnly ? 'file' : 'post') + "..."; + form = { + mode: 'usrdel', + onlyimgdel: fileOnly, + pwd: QR.persona.getPassword() + }; + form[post.ID] = 'delete'; + link = this; + return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { + responseType: 'document', + withCredentials: true, + onload: function() { + return DeleteLink.load(link, post, fileOnly, this.response); + }, + onerror: function() { + return DeleteLink.error(link); + } + }, { + form: $.formData(form) + }); + }, + load: function(link, post, fileOnly, resDoc) { + var msg, s; + if (resDoc.title === '4chan - Banned') { + s = 'Banned!'; + } else if (msg = resDoc.getElementById('errmsg')) { + s = msg.textContent; + $.on(link, 'click', DeleteLink["delete"]); + } else { + if (resDoc.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 = 60; + 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; + } + a = $.el('a', { + className: 'download-link', + textContent: 'Download file' + }); + return $.event('AddMenuEntry', { + type: 'post', + el: a, + order: 100, + open: function(_arg) { + var file; + file = _arg.file; + if (!file) { + return false; + } + a.href = file.URL; + a.download = file.name; + return true; + } + }); + } + }; + + Menu = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Menu']) { + return; + } + this.menu = new UI.Menu('post'); + return Post.callbacks.push({ + name: 'Menu', + cb: this.node + }); + }, + node: function() { + if (this.isClone) { + $.on($('.menu-button', this.nodes.info), 'click', Menu.toggle); + return; + } + return $.add(this.nodes.info, Menu.makeButton()); + }, + makeButton: (function() { + var a; + a = $.el('a', { + className: 'menu-button', + innerHTML: '', + href: 'javascript:;' + }); + return function() { + var button; + button = a.cloneNode(true); + $.on(button, 'click', Menu.toggle); + return button; + }; + })(), + toggle: function(e) { + var post; + post = Get.postFromNode(this); + 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); + } + }; + + 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,R0lGODlhEAAQAPIGAOgLAnMFAL8AAOkMA/+AgP+rqwAAAAAAACH5BAUKAAYALAAAAAAQABAAQANKaLrcDYDBF8YgAQZiswJVp1mDZ4CB+aUmmkYnq4IFphGFGoMwr0MwySSGs62KGZBAIAJZli2gcLhA9V6STTNkjAkCX803LDmVgwkAOw=='; + Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42q1TOwrCQBB9s0FRtJI0WoqFtSLYegoP4gVSeJsUHsHSI3iFeIqRXXgwrhlXwYHHhLwPTB7B36abBCV+0pA4DUBQUNZYQptGtW3jtoKyxgoe0yrBCoyZfL/5ioQ3URZOXW9I341l3oo+NXEZiW4CEuIzvPECopED4OaZ3RNmeAm4u+a8Jr5f17VyVoL8fr8qcltzwlyyj2iqcgPOQ9ExkHAITgD75bYBe0A5S4H/P9htuWMF3QXoQpwaKeT+lnsC6JE5I6aq6fEAAAAASUVORK5CYII='; + Favicon.unreadSFW = 'data:image/gif;base64,R0lGODlhEAAQAPIGAADX8QBwfgC2zADY8nnl8qLp8gAAAAAAACH5BAUKAAYALAAAAAAQABAAQANKaLrcDYDBF8YgAQZiswJVp1mDZ4CB+aUmmkYnq4IFphGFGoMwr0MwySSGs62KGZBAIAJZli2gcLhA9V6STTNkjAkCX803LDmVgwkAOw=='; + Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4y2NgoBq4/vE/HJOsBiRQUIfA2AzBqQYqUfn00/9FLz+BaQxDCKqBmX7jExijKEDSDJPHrnnbGQhGV4RmOFwdVkNwhQMheYwQxhaIi7b9Z9A3gWAQm2BUoQOgRhgA8o7j1ozLC4LCyAZcx6kZI5qg4kLKqggDFFWxJySsUQVzlb4pwgAJaTRvokcVNgOqOv8zcHBCsL07DgNg8YsczzA5MxtUL+DMD8g0slxI/H8GQ/P/DJKyeKIRpglXZsIiBwBhP5O+VbI/JgAAAABJRU5ErkJggg=='; + Favicon.unreadNSFW = 'data:image/gif;base64,R0lGODlhEAAQAPIGAFT+ACh5AEncAFX/Acz/su7/5gAAAAAAACH5BAUKAAYALAAAAAAQABAAQANKaLrcDYDBF8YgAQZiswJVp1mDZ4CB+aUmmkYnq4IFphGFGoMwr0MwySSGs62KGZBAIAJZli2gcLhA9V6STTNkjAkCX803LDmVgwkAOw=='; + Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAx0lEQVQ4y2NgoBYI+cfwH4ZJVgMS0KhEYGyG4FQDkzjzf9P/d/+fgWl0QwiqgSkI/c8IxsgKkDXD5LFq9rwDweiK0A2HqcNqCK5wICSPEcLYAtH+AMN/IXMIBrEJRie6OEgjDAC5x3FqxuUFNiEUA67j1IweTTBxBQ1puAG86jgSEraogskJWSBcwCGF5k30qMJmgMFEhv/MXBAs5oLDAFj8IsczTE7UEeECbhU8+QGZRpaTi2b4L2zF8J9TGk80wjThykzY5AAW/2O1C2mIbgAAAABJRU5ErkJggg=='; + break; + case 'xat-': + Favicon.unreadDead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42s1SQQrCMBDsQ8WDIEV6LTT2A4og2Hi0veo7fIAH04e06L1jphIJRtoVLw4MmWZnh2aT6K8Ax82uyFOV6SSJK5Kae74naIZHfhfx5HxaTC8kdeCRhNzms8ayFTaHJuTLzvKpJSE+sVoDhxIoK2qv5vgGDutoz8vfhlJd33w1gDGg5h5r9NArCzA1UNevgPtQQJplmtMeOwI99AYBW73PI8EQqXsvIbjGduAaxwPcQ/oqwF/dUw5r5GfArcLa73gAGxUeHPIycrIAAAAASUVORK5CYII='; + Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA80lEQVQ4y2NgGEzgPwx3TZhYVVJRPik7O30uCIPYIDFkNRia/yNhEH9ieszB5ZlxZ0EYxMamhqAhn1KT3gPxB5I1wxT9r6r8B8T/ccnjDAOwhvaO//9nz/n/f85cMBtdHiMEQYG1DOhfkLP/V1T8A2u+eOn//0uXwAYdiIr6ZyQi8ltOWPCLm5vzVuIMuHT5///Ll8EGWEhJ/YcBfn7+lxgGlJSXT4KFNi4vwAA3N/c7DAN6J02uYsATiBqoBrzCmpCwROMHWDRaIBmANRCxGQBLSOCEBcRcUIzXAGQalpRBbB8iXMCAJPEfh9wRKG1HtRwIAJCmKOzjRex1AAAAAElFTkSuQmCC'; + Favicon.unreadSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAzUlEQVQ4y2NgGEzgPwxP7OuqqigtmZSZnj0XhEFskBiyGgzNetMPwzGIH5M/8WBczfKzIAxiY1ND0JCkDZ/eA/EHkjXDFFUe+f8PiP/jkscZBiDcfvr//9lX/v+fA8QgNro8RgiCAiuuetlZkLMrgDaDNF988///pdcQg0BiIDmQGpBaogy4BDTg8htkAz7jNqAcGFWw0MbnBZAakFoMAyZP6K1CDixcgQhiQ9UyEBONH4iNRqwGwBISSQYg07CkjE0OX35gwKEAnxz5AADUHTv3RAHZ7QAAAABJRU5ErkJggg=='; + Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/klEQVQ4y2NgGEzgPwxP7OuqqigtmZSZnj0XhEFskBiyGgzNetMPwzGIH5M/8WBczfKzIAxiY1ND0JCkDZ/eA/EHkjXDFFUe+f8PiP/jkscZBiDcfvr//9lX/v+fA8QgNro8RgiCAiuuetlZkLMrgDaDNF988///pdcQg6KmHPgnomL0W1BM7ours9tWogy4BDTg8huIAVLaFv9hgJ+f/yWGAeXAqIKFNi4vwAA3N/c7DAMmT+itQg4s9EBkF5dDNuAV1oSEJRo/wKKRS1ELbgDWQMRmACwhgdhSoXn/GVnZwRivAcg0LCmD2Ly6VgRdwIAk8R+H3BEobUe1HAgA7g5BI+Q2tn8AAAAASUVORK5CYII='; + Favicon.unreadNSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAzklEQVQ4y2NgGEzgPwxP7JpYVVZSMSk9O2suCIPYIDFkNRia084YwzGIHzMx/mDc8vizIAxiY1ND0JCST0nvgfgDyZphinr+V/4D4v+45HGGAQjP+t/+f/X/2UA8B8xGl8cIQVBgxS2LPwtyds//in8gzTf/XwTiS2CDQGIgOZAakFqiDLgF1Hzr/2WEAZ/xGFBWUj4JFtr4vABSA1KLYcDk3slVyIGFKxBBbKhaBmKi8QOx0YjVAFhCIskAZBqWlLHJ4csPDDgU4JMjHwAAAfUvfvahyqUAAAAASUVORK5CYII='; + Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/klEQVQ4y2NgGEzgPwxP7JpYVVZSMSk9O2suCIPYIDFkNRia084YwzGIHzMx/mDc8vizIAxiY1ND0JCST0nvgfgDyZphinr+V/4D4v+45HGGAQjP+t/+f/X/2UA8B8xGl8cIQVBgxS2LPwtyds//in8gzTf/XwTiS2CDMg9E/ZMwEvktKCf4xdnNdStRBtwCar71/zLYADkLqf8wwM/P/xLDgLKS8kmw0MblBRjg5uZ+h2HA5N7JVciBhR6IAgocyAa8wpqQsETjB1g0iulwww3AGojYDIAlJBDbqkT2PwsHExjjNQCZhiVlEFvOhp+gCxiQJP7jkDsCpe2olgMB9UE2wvseYUsAAAAASUVORK5CYII='; + break; + case 'Mayhem': + Favicon.unreadDead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABFklEQVR4AZ2R4WqEMBCEFy1yiJQQ14gcIhIuFBFR+qPQ93+v66QMksrlTwMfkZ2ZZbMKTgVqYIDl3YAbeCM31lJP/Zul4MAEPJjBQGNDLGsz8PQ6aqLAP5PTdd1WlmU09mSKtdTDRgrkzspJPKq6RxMahfj9yhOzQEZwZAwfzrk1ox3MXibIN8hO4MAjeV72CemJGWblnRsOYOdoGw0jebB20BPAwKzUQPlrFhrXFw1Wagu9yuzZwINzVAZCURRL+gRr7Wd8Vtqg4Th/lsUmewyk9WQ/A7NiwJz5VV/GmO+MNjMrFvh/NPDMigHTaeJN09a27ZHRJmalBg54CgfvAGYSLpoHjlmpuAwFdzDy7oGS/qIpM9UPFGg1b1kUlssAAAAASUVORK5CYII='; + Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABR0lEQVR4AYWSQWq0QBCFCw0SRIK0PQ4hiIhEZBhEySLyewUPEMgqR/JIXiDhzz7kKKYePIZajEzDRxfV9dWU3SO6IiVWUsVxT5R75Y4gTmwNnUh4kCulUiuV8sjChDjmKtaUcHgmHsnNrMPh0IVhiMIjKZGzNXDoyhMzF7C89z2KtFGD+FoNXEUKZdgpaPM8P++cDXTtBDca7EyQK8+bXTufYBccuvLAG26UnqN1LCgI4g/lm7zTgSux4vk0J8rnKw3+m1//pBPbBrVyGZVNmiAITviEtm3t+D+2QcJx7GUxlN4594K4ZY75Xzh0JVWqnad6TdP0H+LRNBjHcYNDV5xS32qwaC4my7Lwn6guu5QoomgbdFmWDYhnM8E8zxscuhLzPWtKA/dGqUizrityX9M0YX+DQ1ciXobnP6vgfmTOM7Znnk70B58pPaEvx+epAAAAAElFTkSuQmCC'; + Favicon.unreadSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/ElEQVR4AZ3RUWqEMBSF4ftQZAhSREQJIiIXpQwi+tSldkFdWPsLhyEE0ocKH2Fyzg1mNJ4KAQ1arTUeeJMH6qwTUJmCHjMcC6KKtbSIylzdXpl18J/k4fdTpUFmPLOOa9bGe+P4+n5RYYfLXuiMsAlXofBxK2QXpvwN/jqg+AY91vR+pStk+apZe0fEhhMXDhUmWXEoO9WNmrWAzvRPq7jnB2jvUGfWTEgPcJzZFTbZk/0Tnh5QI+af6lVGvq/Do2atwVL4VJ+3QrZo1lr4Pw5wzVqDWaV7SUvHrZDNmrWAHq7g0rphkS3LXDMBVqFGhxGT1gGdDFnWaab6BRmXRvbxDmYiAAAAAElFTkSuQmCC'; + Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQElEQVR4AY2SQUrEQBBFS9CMNFEkhAQdYmiCIUgcZlYGc4VsBcGVF/AuWXme4F7RtXiVWF9+Y9MYtOHRTdX/NZWaEj2RYpQTJeEdK4fKPuA7DjSGXiQkU0qlUqxySmFMEsYsNSU8zEmK4OwdEbmkKCclYoGmolfWCGyenh1O0EJE2gXNWpFC2S0IGrCQ29EbdPCPAmEHmXIxByf8hDAPD71yzAnXypatbSgoAN8Pyju5h4deMUrqJk1z+0uBN+/XX+gxfoFK2QafUJO2aRq//Q+/QIx2wr+Kwq0rusrP/QKf9MTCtbQLf9U1wNvYnz3qug45S68kSvVXgbPbx3nvYPXNOI7cRPWySukK+DcGCvA+urqZ3RmGAbmSXjFK5rpwW8nhWVJP04TYa9/3uO/goVciDiPlZhW8c8ZAHuRSeqIv32FK/GYGL8YAAAAASUVORK5CYII='; + Favicon.unreadNSFW = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/ElEQVR4AZ3RUWqEMBSF4ftQZAihDCKKiAQJShERQx+6o662e2p/4TCEQF468BEm95yLovFr4PBEq9PjgTd5wBcZp6559AiIWDAq6KXV3aJMUMfDOsTf7Mf/XaFBAvYiE9W16b74/vl8UeBAlKOSmWAzUiXwcavMkrrFE9QXVJ+gx5q9XvUVivmqrr1jxIYLCacCs6y6S8psGNU1hw4Bu4JHuUB3pzJBHZcviLiKV9jkyO4vxHyBx1h+qlcY5b2Wj+raE0vlU33dKrNFXWsR/7EgqmtPBIXuIw+dt8osqGsOPaIGSeeGRbZiFtVxsAYeHSbMOgd0MhSzTp3mD4RaQX4aW3NMAAAAAElFTkSuQmCC'; + Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABP0lEQVR4AYWS0UqFQBCGhziImNRBRImDmUgiIaF0kWSP4AMEXXXTE/QiPpL3UdR19Crb/PAvLEtyFj5mmfn/cdxd0RUokbJXEsZYCZUd4D72NBG8wkKmlEqtVMoFhTFJmKuoKelBTVIkjbNE5IainJTIeZqaXjkg8fp+Z7GCjiLQbWgOihTKsCFowUZtoNef4HgDf4JMuTbe8n/Br8NDr5zxhBul52i3FBQE+xflmzzTA69ESmpPmubunwZfztc/6IncBrXSe7/QkK5tW3f8H7dBjHH8q6Kwt033V6Hb4JeeWPgsq42rugfYZ92psWscRwMPvZIo9bEGD2+F2YUnBizLwpeoXnYpbQM34kAB9peP58aueZ4NPPRKxPusaRoYG6UizbquyH1O04T4RA+8EvAwUr6sgjFnDuReLaUn+ANygUa7+9SCWgAAAABJRU5ErkJggg=='; + break; + case 'Original': + Favicon.unreadDead = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; + Favicon.unreadDeadY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhElEQVR42q1RwQnAMAjMu5M4guAKXa4j5dUROo5tipSDcrFChUONd0di2m/hEGVOHDyIPufgwAFASDkpoSzmBrkJ2UMyR9LsJ3rvrqo3Rt1YMIMhhNnOxLMnoMFBxHyJAr2IOBFzA8U+6pLBdmEJTA0aMVjpDd6Loks0s5HZNwYx8tfZCZ0kll7ORffZAAAAAElFTkSuQmCC'; + Favicon.unreadSFW = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAC6Xw////////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; + Favicon.unreadSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eILZO5/XI0UAgm7H9tOsu0yGWAQSOoFijHOxOANGqm/LczpOaXs4gISrPZ+gc2+hO5w2xdwgOjBFUIF+sEJrhUl9JFr+badFwR+BfqlmGUJAAAAAElFTkSuQmCC'; + Favicon.unreadNSFW = 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAGbMM////////yH5BAEKAAMALAAAAAAQABAAAAI/nI95wsqygIRxDgGCBhTrwF3Zxowg5H1cSopS6FrGQ82PU1951ckRmYKJVCXizLRC9kAnT0aIiR6lCFT1cigAADs='; + Favicon.unreadNSFWY = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eIDhbn/cTVSCCTsfmw7ybbLZIBBIKkXKKU0E4M3aKT+tjCn5xiziwuIsNr7BTb7ErrDZV/AAaIHdwgV6AcnuFaU0Eeu5dt2XiUyBjCQ2bIrAAAAAElFTkSuQmCC'; + } + if (Favicon.SFW) { + Favicon.unread = Favicon.unreadSFW; + return Favicon.unreadY = Favicon.unreadSFWY; + } else { + Favicon.unread = Favicon.unreadNSFW; + return Favicon.unreadY = Favicon.unreadNSFWY; + } + }, + dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', + logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAgMAAAC+UIlYAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAGlJREFUWMPtlkEKADEIA/tJP9lXLttQto2yHxgDHozTi0ToGK2WKZZ+HAQQMZc+xBwI4EZ+wAC2IfPuSIDOZJrSZQEAX9eVJhhwIuUYAnQe8rhAEMAZlTI2MID9f5Clyh0JeE1V1ZEAvB4qDfwuJTSGRAAAAABJRU5ErkJggg==' + }; + + ThreadExcerpt = { + init: function() { + if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { + return; + } + return Thread.callbacks.push({ + name: 'Thread Excerpt', + cb: this.node + }); + }, + node: function() { + return d.title = Get.threadExcerpt(this); + } + }; + + ThreadStats = { + init: function() { + var sc, + _this = this; + if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { + return; + } + if (Conf['Updater and Stats in Header']) { + this.dialog = sc = $.el('span', { + innerHTML: "0 / 0" + (Conf["Page Count in Stats"] ? " / 0" : ""), + id: 'thread-stats', + title: 'Post Count / File Count' + (Conf["Page Count in Stats"] ? " / Page Count" : "") + }); + $.ready(function() { + return Header.addShortcut(sc); + }); + } else { + this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', "
0 / 0" + (Conf["Page Count in Stats"] ? " / 0" : "") + "
"); + $.ready(function() { + return $.add(d.body, sc); + }); + } + this.postCountEl = $('#post-count', sc); + this.fileCountEl = $('#file-count', sc); + this.pageCountEl = $('#page-count', sc); + return Thread.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.fetchPage(); + ThreadStats.update(postCount, fileCount); + return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); + }, + 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'); + }, + fetchPage: function() { + if (!Conf["Page Count in Stats"]) { + return; + } + if (ThreadStats.thread.isDead) { + ThreadStats.pageCountEl.textContent = 'Dead'; + $.addClass(ThreadStats.pageCountEl, 'warning'); + return; + } + setTimeout(ThreadStats.fetchPage, 2 * $.MINUTE); + return $.ajax("//a.4cdn.org/" + ThreadStats.thread.board + "/threads.json", { + onload: ThreadStats.onThreadsLoad + }, { + whenModified: true + }); + }, + onThreadsLoad: function() { + var page, pages, thread, _i, _j, _len, _len1, _ref; + if (!(Conf["Page Count in Stats"] && this.status === 200)) { + return; + } + pages = JSON.parse(this.response); + for (_i = 0, _len = pages.length; _i < _len; _i++) { + page = pages[_i]; + _ref = page.threads; + for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { + thread = _ref[_j]; + if (thread.no === ThreadStats.thread.ID) { + ThreadStats.pageCountEl.textContent = page.page; + (page.page === pages.length - 1 ? $.addClass : $.rmClass)(ThreadStats.pageCountEl, 'warning'); + return; + } + } + } + } + }; + + ThreadUpdater = { + init: function() { + var checked, conf, el, input, name, sc, settings, subEntries, _ref, + _this = this; + if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { + return; + } + if (Conf['Updater and Stats in Header']) { + this.dialog = sc = $.el('span', { + innerHTML: "", + id: 'updater' + }); + $.ready(function() { + return Header.addShortcut(sc); + }); + } else { + this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', "
"); + $.addClass(doc, 'float'); + $.ready(function() { + $.addClass(doc, 'float'); + return $.add(d.body, sc); + }); + } + this.checkPostCount = 0; + this.timer = $('#update-timer', sc); + this.status = $('#update-status', sc); + this.isUpdating = Conf['Auto Update']; + $.on(this.timer, 'click', ThreadUpdater.update); + $.on(this.status, 'click', ThreadUpdater.update); + subEntries = []; + _ref = Config.updater.checkbox; + for (name in _ref) { + conf = _ref[name]; + checked = Conf[name] ? 'checked' : ''; + el = $.el('label', { + title: "" + conf[1], + innerHTML: " " + name + }); + input = el.firstElementChild; + $.on(input, 'change', $.cb.checked); + if (input.name === 'Scroll BG') { + $.on(input, 'change', ThreadUpdater.cb.scrollBG); + ThreadUpdater.cb.scrollBG(); + } else if (input.name === 'Auto Update') { + $.on(input, 'change', ThreadUpdater.cb.update); + } + subEntries.push({ + el: el + }); + } + settings = $.el('span', { + innerHTML: 'Interval' + }); + $.on(settings, 'click', this.intervalShortcut); + subEntries.push({ + el: settings + }); + $.event('AddMenuEntry', { + type: 'header', + el: $.el('span', { + textContent: 'Updater' + }), + order: 110, + subEntries: subEntries + }); + return Thread.callbacks.push({ + name: 'Thread Updater', + cb: this.node + }); + }, + node: function() { + ThreadUpdater.thread = this; + ThreadUpdater.root = this.OP.nodes.root.parentNode; + ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0]; + ThreadUpdater.outdateCount = 0; + ThreadUpdater.cb.interval.call($.el('input', { + value: Conf['Interval'] + })); + $.on(window, 'online offline', ThreadUpdater.cb.online); + $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); + $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); + return ThreadUpdater.cb.online(); + }, + /* + 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.setInterval(); + ThreadUpdater.set('status', null, null); + return; + } + ThreadUpdater.set('timer', null); + return ThreadUpdater.set('status', 'Offline', 'warning'); + }, + post: function(e) { + if (!(ThreadUpdater.isUpdating && e.detail.threadID === ThreadUpdater.thread.ID)) { + return; + } + ThreadUpdater.outdateCount = 0; + if (ThreadUpdater.seconds > 2) { + return setTimeout(ThreadUpdater.update, 1000); + } + }, + checkpost: function(e) { + if (!ThreadUpdater.checkPostCount) { + if (e.detail.threadID !== ThreadUpdater.thread.ID) { + return; + } + ThreadUpdater.seconds = 0; + ThreadUpdater.outdateCount = 0; + ThreadUpdater.set('timer', '...'); + } + if (!(g.DEAD || ThreadUpdater.foundPost || ThreadUpdater.checkPostCount >= 5)) { + return setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * $.SECOND); + } + ThreadUpdater.setInterval(); + 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.setInterval(); + } + }, + scrollBG: function() { + return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { + return true; + } : function() { + return !d.hidden; + }; + }, + interval: function() { + var val; + val = parseInt(this.value, 10); + if (val < 1) { + val = 1; + } + ThreadUpdater.interval = this.value = val; + return $.cb.value.call(this); + }, + load: function(e) { + var klass, req, text, _ref; + req = ThreadUpdater.req; + switch (req.status) { + case 200: + g.DEAD = false; + ThreadUpdater.parse(JSON.parse(req.response).posts); + ThreadUpdater.setInterval(); + 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.setInterval(); + _ref = req.status === 304 ? [null, null] : ["" + req.statusText + " (" + req.status + ")", 'warning'], text = _ref[0], klass = _ref[1]; + ThreadUpdater.set('status', text, klass); + } + if (ThreadUpdater.postID) { + return ThreadUpdater.cb.checkpost(); + } + } + }, + setInterval: function() { + var cur, i, j, limit; + i = ThreadUpdater.interval + 1; + if (Conf['Optional Increase']) { + cur = ThreadUpdater.outdateCount || 1; + limit = d.hidden ? 7 : 10; + j = cur <= limit ? cur : limit; + cur = (Math.floor(i * 0.1) || 1) * j * j; + ThreadUpdater.seconds = cur > i ? cur <= 300 ? cur : 300 : i; + } else { + ThreadUpdater.seconds = i; + } + ThreadUpdater.set('timer', ThreadUpdater.seconds); + return ThreadUpdater.count(true); + }, + intervalShortcut: function() { + var settings; + Settings.open('Advanced'); + settings = $.id('fourchanx-settings'); + return $('input[name=Interval]', settings).focus(); + }, + 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; + } + }, + count: function(start) { + clearTimeout(ThreadUpdater.timeoutID); + if (start && ThreadUpdater.isUpdating && navigator.onLine) { + return ThreadUpdater.timeout(); + } + }, + 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, _ref; + if (!navigator.onLine) { + return; + } + ThreadUpdater.count(); + if (Conf['Auto Update']) { + ThreadUpdater.set('timer', '...'); + } else { + ThreadUpdater.set('timer', 'Update'); + } + if ((_ref = ThreadUpdater.req) != null) { + _ref.abort(); + } + url = "//a.4cdn.org/" + ThreadUpdater.thread.board + "/res/" + ThreadUpdater.thread + ".json"; + return ThreadUpdater.req = $.ajax(url, { + onloadend: ThreadUpdater.cb.load + }, { + whenModified: true + }); + }, + updateThreadStatus: function(type, status) { + var change, hasChanged; + if (!(hasChanged = ThreadUpdater.thread["is" + type] !== status)) { + return; + } + ThreadUpdater.thread.setStatus(type, status); + change = type === 'Sticky' ? status ? 'now a sticky' : 'not a sticky anymore' : status ? 'now closed' : 'not closed anymore'; + return new Notice('info', "The thread is " + change + ".", 30); + }, + parse: function(postObjects) { + var ID, OP, count, deletedFiles, deletedPosts, files, index, key, node, num, post, postObject, posts, root, scroll, _i, _len, _ref; + OP = postObjects[0]; + Build.spoilerRange[ThreadUpdater.thread.board] = OP.custom_spoiler; + ThreadUpdater.updateThreadStatus('Sticky', !!OP.sticky); + ThreadUpdater.updateThreadStatus('Closed', !!OP.closed); + ThreadUpdater.thread.postLimit = !!OP.bumplimit; + ThreadUpdater.thread.fileLimit = !!OP.imagelimit; + 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.ID); + 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 (__indexOf.call(index, ID) < 0) { + post.kill(); + deletedPosts.push(post); + } else if (post.isDead) { + post.resurrect(); + } else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) { + post.kill(true); + deletedFiles.push(post); + } + if (ThreadUpdater.postID && ThreadUpdater.postID === ID) { + 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; + for (key in posts) { + post = posts[key]; + if (!posts.hasOwnProperty(key)) { + continue; + } + root = post.nodes.root; + if (post.cb) { + if (!post.cb()) { + $.add(ThreadUpdater.root, root); + } + } else { + $.add(ThreadUpdater.root, root); + } + } + if (scroll) { + if (Conf['Bottom Scroll']) { + window.scrollTo(0, d.body.clientHeight); + } else { + if (root) { + Header.scrollTo(root); + } + } + } + $.queueTask(function() { + var length, threadID; + threadID = ThreadUpdater.thread.ID; + length = $$('.thread > .postContainer', ThreadUpdater.root).length; + 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() { + var now, sc; + if (!Conf['Thread Watcher']) { + return; + } + this.shortcut = sc = $.el('a', { + id: 'watcher-link', + textContent: 'Watcher', + href: 'javascript:;', + className: 'disabled fa fa-eye' + }); + this.db = new DataBoard('watchedThreads', this.refresh, true); + this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', "
Thread Watcher ×
"); + this.status = $('#watcher-status', this.dialog); + this.list = this.dialog.lastElementChild; + $.on(d, 'QRPostSuccessful', this.cb.post); + if (g.VIEW === 'thread') { + $.on(d, 'ThreadUpdate', this.cb.threadUpdate); + } + $.on(sc, 'click', this.toggleWatcher); + $.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher); + $.on(d, '4chanXInitFinished', this.ready); + switch (g.VIEW) { + case 'index': + $.on(d, 'IndexRefresh', this.cb.onIndexRefresh); + break; + case 'thread': + $.on(d, 'ThreadUpdate', this.cb.onThreadRefresh); + } + if (Conf['Toggleable Thread Watcher']) { + Header.addShortcut(sc); + $.addClass(doc, 'fixed-watcher'); + } + now = Date.now(); + if ((this.db.data.lastChecked || 0) < now - 2 * $.HOUR) { + this.db.data.lastChecked = now; + ThreadWatcher.fetchAllStatus(); + this.db.save(); + } + return Thread.callbacks.push({ + name: 'Thread Watcher', + cb: this.node + }); + }, + node: function() { + var toggler; + toggler = $.el('img', { + className: 'watch-thread-link' + }); + $.on(toggler, 'click', ThreadWatcher.cb.toggle); + return $.before($('input', this.OP.nodes.post), toggler); + }, + ready: function() { + $.off(d, '4chanXInitFinished', ThreadWatcher.ready); + if (!Main.isThisPageLegit()) { + return; + } + ThreadWatcher.refresh(); + $.add(d.body, ThreadWatcher.dialog); + if (Conf['Toggleable Thread Watcher']) { + ThreadWatcher.dialog.hidden = true; + } + if (!Conf['Auto Watch']) { + return; + } + return $.get('AutoWatch', 0, function(_arg) { + var AutoWatch, thread; + AutoWatch = _arg.AutoWatch; + if (!(thread = g.BOARD.threads[AutoWatch])) { + return; + } + ThreadWatcher.add(thread); + return $["delete"]('AutoWatch'); + }); + }, + toggleWatcher: function() { + $.toggleClass(ThreadWatcher.shortcut, 'disabled'); + return ThreadWatcher.dialog.hidden = !ThreadWatcher.dialog.hidden; + }, + cb: { + openAll: function() { + var a, _i, _len, _ref; + if ($.hasClass(this, 'disabled')) { + return; + } + _ref = $$('a[title]', ThreadWatcher.list); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + a = _ref[_i]; + $.open(a.href); + } + return $.event('CloseMenu'); + }, + checkThreads: function() { + if ($.hasClass(this, 'disabled')) { + return; + } + return ThreadWatcher.fetchAllStatus(); + }, + pruneDeads: function() { + var boardID, data, threadID, _i, _len, _ref, _ref1; + if ($.hasClass(this, 'disabled')) { + return; + } + _ref = ThreadWatcher.getAll(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data; + if (!data.isDead) { + continue; + } + delete ThreadWatcher.db.data.boards[boardID][threadID]; + ThreadWatcher.db.deleteIfEmpty({ + boardID: boardID + }); + } + ThreadWatcher.db.save(); + ThreadWatcher.refresh(); + return $.event('CloseMenu'); + }, + toggle: function() { + return ThreadWatcher.toggle(Get.postFromNode(this).thread); + }, + rm: function() { + var boardID, threadID, _ref; + _ref = this.parentNode.dataset.fullID.split('.'), boardID = _ref[0], threadID = _ref[1]; + return ThreadWatcher.rm(boardID, +threadID); + }, + 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.add(board.threads[threadID]); + } + }, + onIndexRefresh: function() { + var boardID, data, db, threadID, _ref; + db = ThreadWatcher.db; + boardID = g.BOARD.ID; + _ref = db.data.boards[boardID]; + for (threadID in _ref) { + data = _ref[threadID]; + if (!data.isDead && !(threadID in g.BOARD.threads)) { + if (Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + } else { + data.isDead = true; + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + } + } + } + return ThreadWatcher.refresh(); + }, + onThreadRefresh: function(e) { + var thread; + thread = e.detail.thread; + if (!(e.detail[404] && ThreadWatcher.db.get({ + boardID: thread.board.ID, + threadID: thread.ID + }))) { + return; + } + return ThreadWatcher.add(thread); + } + }, + fetchCount: { + fetched: 0, + fetching: 0 + }, + fetchAllStatus: function() { + var thread, threads, _i, _len; + if (!(threads = ThreadWatcher.getAll()).length) { + return; + } + ThreadWatcher.status.textContent = '...'; + for (_i = 0, _len = threads.length; _i < _len; _i++) { + thread = threads[_i]; + ThreadWatcher.fetchStatus(thread); + } + }, + fetchStatus: function(_arg) { + var boardID, data, fetchCount, threadID; + boardID = _arg.boardID, threadID = _arg.threadID, data = _arg.data; + if (data.isDead) { + return; + } + fetchCount = ThreadWatcher.fetchCount; + fetchCount.fetching++; + return $.ajax("//a.4cdn.org/" + boardID + "/res/" + threadID + ".json", { + onloadend: function() { + var status; + fetchCount.fetched++; + if (fetchCount.fetched === fetchCount.fetching) { + fetchCount.fetched = 0; + fetchCount.fetching = 0; + status = ''; + } else { + status = "" + (Math.round(fetchCount.fetched / fetchCount.fetching * 100)) + "%"; + } + ThreadWatcher.status.textContent = status; + if (this.status !== 404) { + return; + } + if (Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + } else { + data.isDead = true; + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + } + return ThreadWatcher.refresh(); + } + }, { + type: 'head' + }); + }, + getAll: function() { + var all, boardID, data, threadID, threads, _ref; + all = []; + _ref = ThreadWatcher.db.data.boards; + for (boardID in _ref) { + threads = _ref[boardID]; + if (Conf['Current Board'] && boardID !== g.BOARD.ID) { + continue; + } + for (threadID in threads) { + data = threads[threadID]; + all.push({ + boardID: boardID, + threadID: threadID, + data: data + }); + } + } + return all; + }, + makeLine: function(boardID, threadID, data) { + var div, fullID, href, link, x; + x = $.el('a', { + className: 'fa fa-times', + href: 'javascript:;' + }); + $.on(x, 'click', ThreadWatcher.cb.rm); + if (data.isDead) { + href = Redirect.to('thread', { + boardID: boardID, + threadID: threadID + }); + } + link = $.el('a', { + href: href || ("/" + boardID + "/res/" + threadID), + textContent: data.excerpt, + title: data.excerpt + }); + div = $.el('div'); + fullID = "" + boardID + "." + threadID; + div.dataset.fullID = fullID; + if (g.VIEW === 'thread' && fullID === ("" + g.BOARD + "." + g.THREADID)) { + $.addClass(div, 'current'); + } + if (data.isDead) { + $.addClass(div, 'dead-thread'); + } + $.add(div, [x, $.tn(' '), link]); + return div; + }, + refresh: function() { + var boardID, data, helper, list, nodes, refresher, thread, threadID, toggler, watched, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3; + nodes = []; + _ref = ThreadWatcher.getAll(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data; + nodes.push(ThreadWatcher.makeLine(boardID, threadID, data)); + } + list = ThreadWatcher.list; + $.rmAll(list); + $.add(list, nodes); + _ref2 = g.BOARD.threads; + for (threadID in _ref2) { + thread = _ref2[threadID]; + toggler = $('.watch-thread-link', thread.OP.nodes.post); + watched = ThreadWatcher.db.get({ + boardID: thread.board.ID, + threadID: threadID + }); + helper = watched ? ['addClass', 'Unwatch'] : ['rmClass', 'Watch']; + $[helper[0]](toggler, 'watched'); + toggler.title = "" + helper[1] + " Thread"; + } + _ref3 = ThreadWatcher.menu.refreshers; + for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { + refresher = _ref3[_j]; + refresher(); + } + }, + toggle: function(thread) { + var boardID, threadID; + boardID = thread.board.ID; + threadID = thread.ID; + if (ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + })) { + return ThreadWatcher.rm(boardID, threadID); + } else { + return ThreadWatcher.add(thread); + } + }, + add: function(thread) { + var boardID, data, threadID; + data = {}; + boardID = thread.board.ID; + threadID = thread.ID; + if (thread.isDead) { + if (Conf['Auto Prune'] && ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + })) { + ThreadWatcher.rm(boardID, threadID); + return; + } + data.isDead = true; + } + data.excerpt = Get.threadExcerpt(thread); + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + return ThreadWatcher.refresh(); + }, + rm: function(boardID, threadID) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + return ThreadWatcher.refresh(); + }, + convert: function(oldFormat) { + var boardID, data, newFormat, threadID, threads; + newFormat = {}; + for (boardID in oldFormat) { + threads = oldFormat[boardID]; + for (threadID in threads) { + data = threads[threadID]; + (newFormat[boardID] || (newFormat[boardID] = {}))[threadID] = { + excerpt: data.textContent + }; + } + } + return newFormat; + }, + menu: { + refreshers: [], + init: function() { + var menu; + if (!Conf['Thread Watcher']) { + return; + } + menu = new UI.Menu('thread watcher'); + $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) { + return menu.toggle(e, this, ThreadWatcher); + }); + this.addHeaderMenuEntry(); + return this.addMenuEntries(); + }, + addHeaderMenuEntry: function() { + var entryEl; + if (g.VIEW !== 'thread') { + return; + } + entryEl = $.el('a', { + href: 'javascript:;' + }); + $.event('AddMenuEntry', { + type: 'header', + el: entryEl, + order: 60 + }); + $.on(entryEl, 'click', function() { + return ThreadWatcher.toggle(g.threads["" + g.BOARD + "." + g.THREADID]); + }); + return this.refreshers.push(function() { + var addClass, rmClass, text, _ref; + _ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = _ref[0], rmClass = _ref[1], text = _ref[2]; + $.addClass(entryEl, addClass); + $.rmClass(entryEl, rmClass); + return entryEl.textContent = text; + }); + }, + addMenuEntries: function() { + var cb, conf, entries, entry, name, refresh, subEntries, _i, _len, _ref, _ref1; + entries = []; + entries.push({ + cb: ThreadWatcher.cb.openAll, + entry: { + type: 'thread watcher', + el: $.el('a', { + textContent: 'Open all threads' + }) + }, + refresh: function() { + return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + entries.push({ + cb: ThreadWatcher.cb.checkThreads, + entry: { + type: 'thread watcher', + el: $.el('a', { + textContent: 'Check 404\'d threads' + }) + }, + refresh: function() { + return ($('div:not(.dead-thread)', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + entries.push({ + cb: ThreadWatcher.cb.pruneDeads, + entry: { + type: 'thread watcher', + el: $.el('a', { + textContent: 'Prune 404\'d threads' + }) + }, + refresh: function() { + return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + subEntries = []; + _ref = Config.threadWatcher; + for (name in _ref) { + conf = _ref[name]; + subEntries.push(this.createSubEntry(name, conf[1])); + } + entries.push({ + entry: { + type: 'thread watcher', + el: $.el('span', { + textContent: 'Settings' + }), + subEntries: subEntries + } + }); + for (_i = 0, _len = entries.length; _i < _len; _i++) { + _ref1 = entries[_i], entry = _ref1.entry, cb = _ref1.cb, refresh = _ref1.refresh; + if (entry.el.nodeName === 'A') { + entry.el.href = 'javascript:;'; + } + if (cb) { + $.on(entry.el, 'click', cb); + } + if (refresh) { + this.refreshers.push(refresh.bind(entry)); + } + $.event('AddMenuEntry', entry); + } + }, + createSubEntry: function(name, desc) { + var entry, input; + entry = { + type: 'thread watcher', + el: $.el('label', { + innerHTML: " " + name, + title: desc + }) + }; + input = entry.el.firstElementChild; + input.checked = Conf[name]; + $.on(input, 'change', $.cb.checked); + if (name === 'Current Board') { + $.on(input, 'change', ThreadWatcher.refresh); + } + return entry; + } + } + }; + + Unread = { + init: function() { + if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon'] && !Conf['Desktop Notifications']) { + return; + } + this.db = new DataBoard('lastReadPosts', this.sync); + this.hr = $.el('hr', { + id: 'unread-line' + }); + this.posts = new RandomAccessList; + this.postsQuotingYou = []; + return Thread.callbacks.push({ + name: 'Unread', + cb: this.node + }); + }, + node: function() { + Unread.thread = this; + Unread.title = d.title; + Unread.lastReadPost = Unread.db.get({ + boardID: this.board.ID, + threadID: this.ID, + defaultValue: 0 + }); + $.on(d, '4chanXInitFinished', Unread.ready); + $.on(d, 'ThreadUpdate', Unread.onUpdate); + $.on(d, 'scroll visibilitychange', Unread.read); + if (Conf['Unread Line']) { + return $.on(d, 'visibilitychange', Unread.setLine); + } + }, + ready: function() { + var ID, post, posts, _ref; + $.off(d, '4chanXInitFinished', Unread.ready); + posts = []; + _ref = Unread.thread.posts; + for (ID in _ref) { + post = _ref[ID]; + if (post.isReply) { + posts.push(post); + } + } + Unread.addPosts(posts); + if (Conf['Quote Threading']) { + QuoteThreading.force(); + } + if (Conf['Scroll to Last Read Post']) { + return Unread.scroll(); + } + }, + scroll: function() { + var down, hash, post, posts, root; + if ((hash = location.hash.match(/\d+/)) && hash[0] in Unread.thread.posts) { + return; + } + if (post = Unread.posts.first) { + while (root = $.x('preceding-sibling::div[contains(@class,"replyContainer")][1]', post.nodes.root)) { + if (!(post = Get.postFromRoot(root)).isHidden) { + break; + } + } + if (!root) { + return; + } + down = true; + } else { + posts = Object.keys(Unread.thread.posts); + root = Unread.thread.posts[posts[posts.length - 1]].nodes.root; + } + if (Header.getBottomOf(root) < 0) { + return Header.scrollTo(root, down); + } + }, + sync: function() { + var ID, lastReadPost, post; + lastReadPost = Unread.db.get({ + boardID: Unread.thread.board.ID, + threadID: Unread.thread.ID, + defaultValue: 0 + }); + if (!(Unread.lastReadPost < lastReadPost)) { + return; + } + Unread.lastReadPost = lastReadPost; + post = Unread.posts.first; + while (post) { + if ((ID = post.ID, post) > Unread.lastReadPost) { + break; + } + post = post.next; + Unread.posts.rm(ID); + } + Unread.readArray(Unread.postsQuotingYou); + if (Conf['Unread Line']) { + Unread.setLine(); + } + return Unread.update(); + }, + addPosts: function(posts) { + var ID, post, _i, _len, _ref; + for (_i = 0, _len = posts.length; _i < _len; _i++) { + post = posts[_i]; + ID = post.ID; + if (ID <= Unread.lastReadPost || post.isHidden || QR.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: ID + })) { + continue; + } + if (!(post.prev || post.next)) { + Unread.posts.push(post); + } + Unread.addPostQuotingYou(post); + } + if (Conf['Unread Line']) { + Unread.setLine((_ref = Unread.posts.first, __indexOf.call(posts, _ref) >= 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)))) { + continue; + } + Unread.postsQuotingYou.push(post); + Unread.openNotification(post); + return; + } + }, + openNotification: function(post) { + var name, notif; + if (!Header.areNotificationsEnabled) { + return; + } + name = Conf['Anonymize'] ? 'Anonymous' : $('.nameBlock', post.nodes.info).textContent.trim(); + notif = new Notification("" + name + " replied to you", { + body: post.info.comment, + icon: Favicon.logo + }); + notif.onclick = function() { + Header.scrollToIfNeeded(post.nodes.root, true); + return window.focus(); + }; + return notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + }, + onUpdate: function(e) { + if (e.detail[404]) { + return Unread.update(); + } else { + return Unread.addPosts(e.detail.newPosts); + } + }, + readSinglePost: function(post) { + var ID, i; + ID = post.ID; + if (!Unread.posts[ID]) { + return; + } + if (post === Unread.posts.first) { + Unread.lastReadPost = ID; + Unread.saveLastReadPost(); + } + Unread.posts.rm(ID); + 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: $.debounce(100, function(e) { + var ID, height, post, posts; + if (d.hidden || !Unread.posts.length) { + return; + } + height = doc.clientHeight; + posts = Unread.posts; + while (post = posts.first) { + if (!(Header.getBottomOf(post.nodes.root) > -1)) { + break; + } + ID = post.ID; + posts.rm(ID); + if (Conf['Mark Quotes of You'] && post.info.yours) { + QuoteYou.lastRead = post.nodes.root; + } + } + if (!ID) { + return; + } + if (Unread.lastReadPost < ID || !Unread.lastReadPost) { + Unread.lastReadPost = ID; + } + Unread.saveLastReadPost(); + Unread.readArray(Unread.postsQuotingYou); + if (e) { + return Unread.update(); + } + }), + saveLastReadPost: $.debounce(2 * $.SECOND, function() { + if (Unread.thread.isDead) { + return; + } + return Unread.db.set({ + boardID: Unread.thread.board.ID, + threadID: Unread.thread.ID, + val: Unread.lastReadPost + }); + }), + setLine: function(force) { + var post; + if (!(d.hidden || force === true)) { + return; + } + if (!(post = Unread.posts.first)) { + return $.rm(Unread.hr); + } + if ($.x('preceding-sibling::div[contains(@class,"replyContainer")]', post.nodes.root)) { + return $.before(post.nodes.root, Unread.hr); + } + }, + update: function(dontrepeat) { + var count; + count = Unread.posts.length; + if (Conf['Unread Count']) { + d.title = "" + (Conf['Quoted Title'] && Unread.postsQuotingYou.length ? '(!) ' : '') + (count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : '') + (g.DEAD ? "/" + g.BOARD + "/ - 404" : "" + Unread.title); + if (dontrepeat) { + return; + } + setTimeout(function() { + d.title = ''; + return Unread.update(true); + }, $.SECOND); + } + if (!Conf['Unread Favicon']) { + return; + } + return Favicon.el.href = g.DEAD ? Unread.postsQuotingYou[0] ? Favicon.unreadDeadY : count ? Favicon.unreadDead : Favicon.dead : count ? Unread.postsQuotingYou[0] ? Favicon.unreadY : Favicon.unread : Favicon["default"]; + } + }; + + Redirect = { + init: function() { + var archive, archives, boardID, boards, data, files, id, name, o, record, software, type, _i, _len, _ref, _ref1; + o = { + thread: {}, + post: {}, + file: {} + }; + archives = Redirect.archives; + _ref = Conf['selectedArchives']; + for (boardID in _ref) { + record = _ref[boardID]; + for (type in record) { + id = record[type]; + if (!((archive = archives[id]))) { + continue; + } + boards = type === 'file' ? archive.files : archive.boards; + if (__indexOf.call(boards, boardID) < 0) { + continue; + } + o[type][boardID] = archive.data; + } + } + for (name in archives) { + _ref1 = archives[name], data = _ref1.data, boards = _ref1.boards, files = _ref1.files; + software = data.software; + for (_i = 0, _len = boards.length; _i < _len; _i++) { + boardID = boards[_i]; + if (!(boardID in o.thread)) { + o.thread[boardID] = data; + } + if (!(boardID in o.post || software !== 'foolfuuka')) { + o.post[boardID] = data; + } + if (!(boardID in o.file || __indexOf.call(files, boardID) < 0)) { + o.file[boardID] = data; + } + } + } + return Redirect.data = o; + }, + archives: { + "Foolz": { + boards: ["a", "co", "gd", "jp", "m", "sp", "tg", "tv", "v", "vg", "vp", "vr", "wsg"], + files: ["a", "gd", "jp", "m", "tg", "vg", "vp", "vr", "wsg"], + data: { + domain: "archive.foolz.us", + http: false, + https: true, + software: "foolfuuka" + } + }, + "NSFW Foolz": { + boards: ["u"], + files: ["u"], + data: { + domain: "nsfw.foolz.us", + http: false, + https: true, + software: "foolfuuka" + } + }, + "The Dark Cave": { + boards: ["c", "int", "out", "po"], + files: ["c", "po"], + data: { + domain: "archive.thedarkcave.org", + http: true, + https: true, + software: "foolfuuka" + } + }, + "4plebs": { + boards: ["hr", "pol", "s4s", "tg", "tv", "x"], + files: ["hr", "pol", "s4s", "tg", "tv", "x"], + data: { + domain: "archive.4plebs.org", + http: true, + https: true, + software: "foolfuuka" + } + }, + "Nyafuu": { + boards: ["c", "w", "wg"], + files: ["c", "w", "wg"], + data: { + domain: "archive.nyafuu.org", + http: true, + https: true, + software: "foolfuuka" + } + }, + "Install Gentoo (.net)": { + boards: ["diy", "g", "sci"], + files: [], + data: { + domain: "archive.installgentoo.net", + http: false, + https: true, + software: "fuuka" + } + }, + "Install Gentoo (.com)": { + boards: ["t", "g"], + files: ["t", "g"], + data: { + domain: "archive.installgentoo.com/", + http: true, + https: true, + software: "foolfuuka" + } + }, + "Rebecca Black Tech": { + boards: ["cgl", "g", "mu", "w"], + files: ["cgl", "g", "mu", "w"], + data: { + domain: "rbt.asia", + http: true, + https: true, + software: "fuuka" + } + }, + "Heinessen": { + boards: ["an", "fit", "k", "mlp", "r9k", "toy"], + files: ["an", "fit", "k", "r9k", "toy"], + data: { + domain: "archive.heinessen.com", + http: true, + software: "fuuka" + } + }, + "warosu": { + boards: ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "tg", "vr"], + files: ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "tg", "vr"], + data: { + domain: "fuuka.warosu.org", + http: true, + https: true, + software: "fuuka" + } + }, + "fgst": { + boards: ["r", "soc"], + files: ["r", "soc"], + data: { + domain: "fgst.eu", + http: true, + https: true, + software: "foolfuuka" + } + }, + "maware": { + boards: ["t"], + files: ["t"], + data: { + domain: "archive.mawa.re", + http: true, + https: false, + software: "foolfuuka" + } + }, + "Foolz Beta": { + boards: ["a", "co", "d", "gd", "h", "jp", "m", "mlp", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"], + files: ["a", "d", "gd", "h", "jp", "m", "tg", "u", "vg", "vp", "vr", "wsg"], + data: { + domain: "beta.foolz.us", + http: true, + https: true, + withCredentials: true, + software: "foolfuuka" + } + } + }, + to: function(dest, data) { + var archive; + archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; + if (!archive) { + return ''; + } + return Redirect[dest](archive, data); + }, + protocol: function(archive) { + var protocol; + protocol = location.protocol; + if (!archive[protocol.slice(0, -1)]) { + protocol = protocol === 'https:' ? 'http:' : 'https:'; + } + return "" + protocol + "//"; + }, + thread: function(archive, _arg) { + var boardID, path, postID, threadID; + boardID = _arg.boardID, threadID = _arg.threadID, postID = _arg.postID; + path = threadID ? "" + boardID + "/thread/" + threadID : "" + boardID + "/post/" + postID; + if (archive.software === 'foolfuuka') { + path += '/'; + } + if (threadID && postID) { + path += archive.software === 'foolfuuka' ? "#" + postID : "#p" + postID; + } + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; + }, + post: function(archive, _arg) { + var URL, boardID, postID; + boardID = _arg.boardID, postID = _arg.postID; + URL = new String("" + (Redirect.protocol(archive)) + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID); + URL.archive = archive; + return URL; + }, + file: function(archive, _arg) { + var boardID, filename; + boardID = _arg.boardID, filename = _arg.filename; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/full_image/" + filename; + }, + search: function(archive, _arg) { + var boardID, path, type, value; + boardID = _arg.boardID, type = _arg.type, value = _arg.value; + type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; + value = encodeURIComponent(value); + path = archive.software === 'foolfuuka' ? "" + boardID + "/search/" + type + "/" + value : "" + boardID + "/?task=search2&search_" + (type === 'image' ? 'media_hash' : type) + "=" + value; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; + } + }; + + PSAHiding = { + init: function() { + if (!Conf['Announcement Hiding']) { + return; + } + $.addClass(doc, 'hide-announcement'); + return $.on(d, '4chanXInitFinished', this.setup); + }, + setup: function() { + var btn, entry, psa; + $.off(d, '4chanXInitFinished', PSAHiding.setup); + if (!(psa = $.id('globalMessage'))) { + $.rmClass(doc, 'hide-announcement'); + return; + } + entry = { + type: 'header', + el: $.el('a', { + textContent: 'Show announcement', + className: 'show-announcement', + href: 'javascript:;' + }), + order: 50, + open: function() { + return psa.hidden; + } + }; + $.event('AddMenuEntry', entry); + $.on(entry.el, 'click', PSAHiding.toggle); + PSAHiding.btn = btn = $.el('span', { + innerHTML: '[Dismiss]', + title: 'Mark announcement as read and hide.', + className: 'hide-announcement', + href: 'javascript:;' + }); + $.on(btn, 'click', PSAHiding.toggle); + $.get('hiddenPSA', 0, function(_arg) { + var hiddenPSA; + hiddenPSA = _arg.hiddenPSA; + PSAHiding.sync(hiddenPSA); + $.add(psa, btn); + return $.rmClass(doc, 'hide-announcement'); + }); + return $.sync('hiddenPSA', PSAHiding.sync); + }, + toggle: function(e) { + var UTC; + if ($.hasClass(this, 'hide-announcement')) { + UTC = +$.id('globalMessage').dataset.utc; + $.set('hiddenPSA', UTC); + } else { + $.event('CloseMenu'); + $["delete"]('hiddenPSA'); + } + return PSAHiding.sync(UTC); + }, + sync: function(UTC) { + var hr, psa; + psa = $.id('globalMessage'); + psa.hidden = PSAHiding.btn.hidden = UTC && UTC >= +psa.dataset.utc ? true : false; + if ((hr = psa.nextElementSibling) && hr.nodeName === 'HR') { + return hr.hidden = psa.hidden; + } + } + }; + + Banner = { + init: function() { + return $.asap((function() { + return d.body; + }), function() { + return $.asap((function() { + return $('.abovePostForm'); + }), Banner.ready); + }); + }, + ready: function() { + var banner, child, children, i; + banner = $(".boardBanner"); + children = banner.children; + i = 0; + while (child = children[i++]) { + if (i === 1) { + child.id = "Banner"; + child.title = "Click to change"; + $.on(child, 'click', Banner.cb.toggle); + continue; + } + if (Conf['Custom Board Titles']) { + Banner.custom(child).title = "Ctrl+click to edit board " + (i === 3 ? 'sub' : '') + "title"; + child.spellcheck = false; + } + } + }, + cb: { + toggle: (function() { + var types; + types = { + jpg: 227, + png: 270, + gif: 253 + }; + return function() { + var num, type; + type = Object.keys(types)[Math.floor(3 * Math.random())]; + num = Math.floor(types[type] * Math.random()); + return this.src = "//static.4chan.org/image/title/" + num + "." + type; + }; + })(), + click: function(e) { + if (e.ctrlKey) { + this.contentEditable = true; + return this.focus(); + } + }, + keydown: function(e) { + e.stopPropagation(); + if (!e.shiftKey && e.keyCode === 13) { + return this.blur(); + } + }, + focus: function() { + var items, string, string2; + this.textContent = this.innerHTML; + string = "" + g.BOARD + "." + this.className; + string2 = "" + string + ".orig"; + items = { + title: this.innerHTML + }; + items[string] = ''; + items[string2] = false; + $.get(items, function(items) { + if (!(items[string2] && items.title === items[string])) { + return $.set(string2, items.title); + } + }); + }, + blur: function() { + this.innerHTML = this.textContent; + this.contentEditable = false; + return $.set("" + g.BOARD + "." + this.className, this.textContent); + } + }, + custom: function(child) { + var cachedTest, string; + cachedTest = child.innerHTML; + string = "" + g.BOARD + "." + child.className; + $.on(child, 'click keydown focus blur', function(e) { + return Banner.cb[e.type].apply(this, [e]); + }); + $.get(string, cachedTest, function(item) { + var string2, title; + if (!(title = item[string])) { + return; + } + if (Conf['Persistent Custom Board Titles']) { + return child.innerHTML = title; + } + string2 = "" + string + ".orig"; + return $.get(string2, cachedTest, function(itemb) { + if (cachedTest === itemb[string2]) { + return child.innerHTML = title; + } else { + $.set(string, cachedTest); + return $.set(string2, cachedTest); + } + }); + }); + return child; + } + }; + + CatalogLinks = { + init: function() { + var el, input; + if (!Conf['Catalog Links']) { + return; + } + CatalogLinks.el = el = $.el('label', { + id: 'toggleCatalog', + href: 'javascript:;', + innerHTML: " Catalog Links" + }); + input = $('input', el); + $.on(input, 'change', this.toggle); + $.sync('Header catalog links', CatalogLinks.set); + $.event('AddMenuEntry', { + type: 'header', + el: el, + order: 95 + }); + return $.on(d, '4chanXInitFinished', function() { + return CatalogLinks.set(Conf['Header catalog links']); + }); + }, + toggle: function() { + $.event('CloseMenu'); + $.set('Header catalog links', this.checked); + return CatalogLinks.set(this.checked); + }, + set: function(useCatalog) { + var a, board, generateURL, path, _i, _len, _ref, _ref1; + path = useCatalog ? 'catalog' : ''; + generateURL = useCatalog && Conf['External Catalog'] ? CatalogLinks.external : function(board) { + return a.href = "/" + board + "/" + path; + }; + _ref = $$("#board-list a:not(.catalog), #boardNavDesktopFoot a"); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + a = _ref[_i]; + if (((_ref1 = a.hostname) !== 'boards.4chan.org' && _ref1 !== 'catalog.neet.tv' && _ref1 !== '4index.gropes.us') || !(board = a.pathname.split('/')[1]) || (board === 'f' || board === 'status' || board === '4chan')) { + continue; + } + a.href = generateURL(board); + } + return CatalogLinks.el.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; + }, + external: function(board) { + switch (board) { + case 'a': + case 'c': + case 'g': + case 'co': + case 'k': + case 'm': + case 'o': + case 'p': + case 'v': + case 'vg': + case 'w': + case 'cm': + case '3': + case 'adv': + case 'an': + case 'cgl': + case 'ck': + case 'diy': + case 'fa': + case 'fit': + case 'int': + case 'jp': + case 'mlp': + case 'lit': + case 'mu': + case 'n': + case 'po': + case 'sci': + case 'toy': + case 'trv': + case 'tv': + case 'vp': + case 'x': + case 'q': + return "http://catalog.neet.tv/" + board; + case 'd': + case 'e': + case 'gif': + case 'h': + case 'hr': + case 'hc': + case 'r9k': + case 's': + case 'pol': + case 'soc': + case 'u': + case 'i': + case 'ic': + case 'hm': + case 'r': + case 'w': + case 'wg': + case 'wsg': + case 't': + case 'y': + return "http://4index.gropes.us/" + board; + default: + return "/" + board + "/catalog"; + } + } + }; + + 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']; + } + }; + + Dice = { + init: function() { + if (g.BOARD.ID !== 'tg' || g.VIEW === 'catalog' || !Conf['Show Dice Roll']) { + return; + } + return Post.callbacks.push({ + name: 'Show Dice Roll', + cb: this.node + }); + }, + node: function() { + var dicestats, roll, _ref; + if (this.isClone || !(dicestats = (_ref = this.info.email) != null ? _ref.match(/dice[+\s](\d+)d(\d+)/) : void 0)) { + return; + } + roll = $('b', this.nodes.comment).firstChild; + return roll.data = "Rolled " + dicestats[1] + "d" + dicestats[2] + ": " + (roll.data.slice(7)); + } + }; + + Emoji = { + init: function() { + var css, icon, name, pos, _ref; + if (!Conf['Emoji']) { + return; + } + pos = Conf['emojiPos']; + css = ["a.useremail[href]:last-of-type::" + pos + " {\n vertical-align: top;\n margin-" + (pos === "before" ? "right" : "left") + ": 5px;\n}\n"]; + this.icons["PlanNine"] = Emoji.icons["Plan9"]; + this.icons['Sage'] = Emoji.sage[Conf['sageEmoji']]; + _ref = this.icons; + for (name in _ref) { + icon = _ref[name]; + if (!this.icons.hasOwnProperty(name)) { + continue; + } + css.push("a.useremail[href*='" + name + "']:last-of-type::" + pos + ",\na.useremail[href*='" + (name.toLowerCase()) + "']:last-of-type::" + pos + ",\na.useremail[href*='" + (name.toUpperCase()) + "']:last-of-type::" + pos + " {\n content: url('data:image/png;base64," + icon + "');\n}\n"); + } + return $.addStyle(css.join(""), 'emoji'); + }, + sage: { + '4chan SS': 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAYAAACZ3F9/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAa9JREFUKFOdkt0rg2EUwM95b2zlL0CRRLngksznXrJsNtYW1tjYhM3mY6+IXZAbikhTKJp8XZAp81UmWYhIRHHhUi60e7s6ntdCa2449es8PfU7z+k5B6AbyuE/wQlc4BcO2d06unAUBCgFE0hianOd3NHIcy8NPwrUf9NBPZcOEi7ayXZiea/1V7+ljaXeYAfOgg2So2TOwQWGnwQafOgi962TnMFmatozUeNu4yetASspVvgXiUvii5K5Nm6z56ol3Hdtpy+cwSYy+HRUt1nLsoEato0kXyh6wTac+24brThWv6MNOYNW9prlG/uxmbRrFaT0VrCspZoNPSUNJNyCBcoiLZuhLH0o9U6UrAfGKCz7RlLM81Q8XUwqr4oKPLIQmnA8IupBigacVy7yrya/2JouhryJHJJNykg+UxLGOtz6+SQNpEiMcduls4Wvoli9WklVKz+ol5SU4U6ngql8Qj2eRI+GyajBhSRH4r3cUxhSeRVhsYBmWUWiyM+UMDmDUI2nsfuSC1I27nLgYZJlP8jhjJ3PY8iE+L8tWx4kQC6MQA5b1D9HNiRCFhx8AF/e2qh92VnKAAAAAElFTkSuQmCC', + 'appchan': 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAABa1BMVEUAAACqrKiCgYIAAAAAAAAAAACHmX5pgl5NUEx/hnx4hXRSUVMiIyKwrbFzn19SbkZ1d3OvtqtpaWhcX1ooMyRsd2aWkZddkEV8vWGcpZl+kHd7jHNdYFuRmI4bHRthaV5WhUFsfGZReUBFZjdJazpGVUBnamYfHB9TeUMzSSpHgS1cY1k1NDUyOC8yWiFywVBoh1lDSEAZHBpucW0ICQgUHhBjfFhCRUA+QTtEQUUBAQFyo1praWspKigWFRZHU0F6j3E9Oz5VWFN0j2hncWONk4sAAABASDxJWkJKTUgAAAAvNC0fJR0DAwMAAAA9QzoWGhQAAAA8YytvrFOJsnlqyT9oqExqtkdrsExpsUsqQx9rpVJDbzBBbi5utk9jiFRuk11iqUR64k5Wf0JIZTpadk5om1BkyjmF1GRNY0FheFdXpjVXhz86XSp2yFJwslR3w1NbxitbtDWW5nNnilhFXTtYqDRwp1dSijiJ7H99AAAAUnRSTlMAJTgNGQml71ypu3cPEN/RDh8HBbOwQN7wVg4CAQZ28vs9EDluXjo58Ge8xwMy0P3+rV8cT73sawEdTv63NAa3rQwo4cUdAl3hWQSWvS8qqYsjEDiCzAAAAIVJREFUeNpFx7GKAQAYAOD/A7GbZVAWZTBZFGQw6LyCF/MIkiTdcOmWSzYbJVE2u1KX0J1v+8QDv/EkyS0yXF/NgeEILiHfyc74mICTQltqYXBeAWU9HGxU09YqqEvAElGjyZYjPyLqitjzHSEiGkrsfMWr0VLe+oy/djGP//YwfbeP8bN3Or0bkqEVblAAAAAASUVORK5CYII=' + }, + icons: { + 'Plan9': 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAPCAYAAAGn5h7fAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AoYAzE15J1s7QAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAACAElEQVQoz3WSz4sSARTHvzMjygpqYg3+KIhkE83DKtKlf0C9SrTRuZNEx0VowU6CuSeJNlwwpEO2kJ6SQBiIUAzFjRDF4wrjKosnGx3HmdehFDfpe/2+z/s++D5gU7IsEwRByICIiAEAIiIAYAFAXsjYVr/fLxMRNVvN+prJ5/OA3+/XERFNf02JyeVyDx0OxyvLNQsnimLKfcf9KRQKXQAAnE6nlf5qMpnQycnbP/kAoKoqsSwLAJhOp+AAwOv1otvtpqxWq73dbt/r9XqvEQ6HUalUEvF4XLd5IpvNZqlerzd5nlf6/f6tTCZjBACk0+nb+XxeW4UrikLJZPImAGA0Gq0NIqJyuSyyANDr9Q5Wu1utFvR6/SULAI1G4+vK8Pv90DTtGwsAJpPpaGUYDAZ0Op3PHAAEg8H3tVqtbrtu21sqyxuRSOQJk0ql9IvF4r7b7f7pcrlejkaj57IsH58Pzp8dvjhc/lsBk0gkbLFYrFqtVvd27+4qOk733ePxPDCbzVBVFfP5fCiK4rvhxfDN/qP9wSasGwwGMv1HiqJQsVg8ZlfTHMepkiR1t05gGJBGmM/nMBqNj9nN9kql0lNN064ARISzH2cQBAGz2ewLu2na7XYLwzBbvxYIBBCNRrFj3BmsAZ/PZ+J5/kOhUIAkSVeA8XiMZqt5efrx9OA3GfcgvyVno9cAAAAASUVORK5CYII=', + 'Neko': 'iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAMAAAAIRmf1AAACoFBMVEUAAABnUFZoUVddU1T6+PvFwLzn4eFXVlT/+vZpZGCgm5dKU1Cfnpz//flbWljr5uLp5OCalpNZWFb//f3r6+n28ff9+PRaVVH59Pr//vr38vj57/Dp7eyjn5zq8O5aVVJbYV9nVFhjUFRiWFlZVlFgZGOboJzm5uZhamfz9/bt8fDw6+drb26bl5j/8/lkX1z06uldWFS5r61UT0tfWlbDwr3Ew76moqNRTU7Mx8P75OpeY19pWl1XW1qzr6x5eHaLiojv7+1UT0xIU0uzqadVS0nV0MxkZGT5+PPk497///ra29Xq5eFtY2H28e2hnJignJlUUE1dXV2vrqxkY2FkYF/m3d5vZmfDuruhl5aZlJHx8O75+PZWVVP29vT/9fTj3trv6ubh5eRdXFqTkpBOTUtqZmX88/RMQ0T78vPEvr7HwcHDwsDq6ef///3Gx8H++fXEv7tZWVedmZZXXVudnJp0c3FZU1f79fnb1dlXUVVjXWFrZmy8t7359/qLj455e3q4s69vamZjX1zy4+avpaReWFz/+f1NR0vu6Ozp4+f48/lnYmi8ur3Iw7/69fHz7+xbV1SZmJZVUk1ZV1zq5ez++f/c196uqbDn4uj9+P7z7vRVVVXt6ORiXl/OycXHw8CPi4ihoJ5aWF3/+v/k3+axrLOsp67LzMZYU1m2sq9dWF5WUU1WUk/Au7eYlJGqpqObmphYVV749f7p5Or38fPu6OpiXFz38fH79vLz7urv6+hhYF5cWWKal6D//f/Z09Xg29exraqbl5RqaW6kpKTq5uPv7Of/+PDj29D//vP18Ozs5+OloJymoZ1ZVVJZWVlkYF2hnpmblIyspJmVjYKQi4enop5STUlRTUpcWUhqY1BgWT9ZUjhcV1NiXVkkhke3AAAABHRSTlMA5vjapJ+a9wAAAP9JREFUGBk9wA1EAwEAhuHv3dTQAkLiUlJFJWF0QDLFYDRXIMkomBgxNIYxhOk4wwCqQhQjxgxSGIsALFA5BiYbMZHajz1oJlx51sBJpf6Gd3zONcrqm/r1W8ByK0r+XV1LXyOLLnjW6hMGpu0u1IzPSdO17DgrGC6AadrVodGcDQYbhguP6wAvAaC0BRZQalkUQ8UQDz5tAof0XbejOFcV5xiUoCfjj3O/nf0ZbqAMPYmzU18KSDaRQ08qnfw+B2JNdAEQt2O5vctUGjhoIBU4ygPsj2Vh5zYopDK73hsirdkPTwGCbSHpiYFwYVVC/17pCFSBeUmoqwYQuZtWxx+BVEz0LeVKIQAAAABJRU5ErkJggg==', + 'Madotsuki': 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAMAAADTRh9nAAAALVBMVEUAAAC3iopWLTtWPkHnvqUcBxx5GCZyAAARERGbdXJrRUyGRUyYbY23coZFGDRFGEYfAAAAAXRSTlMAQObYZgAAAGhJREFUeF5Vy1kOQyEMQ1Fshzd12P9y61AixLX4yJFo1cvVUfT23GaflF0HPLln6bhnZVKCcrIWGqpCUcKYSP3JSIRySKTtULPNwMaD8/NC8tsyqsd1hR+6qeqIDHc3LD0B3KdtV1f2A+LJBBIHSgcEAAAAAElFTkSuQmCC', + 'Sega': 'iVBORw0KGgoAAAANSUhEUgAAACwAAAALBAMAAAD2A3K8AAAAMFBMVEUAAACMjpOChImytLmdnqMrKzDIyM55dnkODQ94foQ7PkXm5Olsb3VUUVVhZmw8Sl6klHLxAAAAAXRSTlMAQObYZgAAANFJREFUGJVjYIACRiUlJUUGDHBk4syTkxQwhO3/rQ/4ZYsuymi3YEFUqAhC4LCJZJGIi1uimKKjk3KysbOxsaMnAwNLyqoopaXhttf2it1anrJqke1pr1DlBAZhicLnM5YXZ4RWlIYoezx0zrjYqG6czCDsYRzxIko6Q/qFaKy0690Ij0MxN8K2MIhJXF+hsfxJxuwdpYGVaUU3Mm5bqgKFOZOFit3Vp23J3pgsqLxFUXpLtlD5bgcGBs45794dn6mkOVFQUOjNmXPPz8ysOcAAANw6SHLtrqolAAAAAElFTkSuQmCC', + 'Sakamoto': 'iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAxVJREFUOE+Nk19IU1EYwK+GQQTVQ39egh6ibKlzw91z7rn3bvfOmddNszl1bjKXc5rJJGmBUr7Yg9qTD0IalFgRBEYg6EDQQB+GovQyQgiaUZsoLcgHMcr069w7MgcGXfi453zn+37fv3MYZt/n99e76tzVj4JN/hP79fvXnV3hnNabwUBjoOHcgTYOu/JQspgTzsqKgn9BfD4vkWTzur287PqLVy+zM+yePB7KsRXLywTjnSpnZctBkPCdW8ccDuU55vBO8RXbkC/oP5ph19V5+7LIky0OY1BKbZEbLcFSt7u6pN7jLmltCVrr3DV5jY3+KovFEsccB1KJNVpefe10BqS2tqqO4/AuphBB4L/LkrRqNgtJs1lMypLls1kU38mytMLz/E8VIlutqVqX6/weZG52OttRXjbE0cP/FYLRlpVjDXuQ/r77x2XZPKkCHA4HBAIBkCQpAygIAvh8Pu2MZgO0Lz+QSa/sQfwN9RfpVN66XC6Ynp6GhYUFGBwczAC1t7fD0tISxONx6O7upgHILmsqvLcHodOggfiV/v5+SCaT4HQ6IRaLgdfr1bIRRREmJyfBZrNBNBqF+fl5sNsdgE2GiAbp6bmbdbXC7qWQbxMTE7C2tgY6nQ5SqRSEw2ENopaoZpCXlwdTU1NaoECgCbgiU6y8QH+ECYWaTymK7TWdys7MzIwGaWtrg42NDejo6AB1WjU1NZo+FArB2NgYrK6uQrAlCASxn2z6wkuMp87VIAhkE2MEAwMDkEgkYHx8HBYXF0HtkQpRy1BLiEQisLy8rPVNKSsFjEzrXH4+z1hlS4xDhKadNu7t7YPR0VHweDzAEVWfHru6HxkZgeHhYVAURYNjkylVWKArZjjMzqmdVi+QCsLUkQiEjvDvncEkvU7/qQ0Vgukeo48Go87IiCJnZNmipxiz7wXEbVDnbUxQOgM12h9n6qTq6NvapRdtkwaP0XK8RmPuYSbxYfaQ/sJJhjfknuFRURUi7AMOozcCwl94hLZp5F+EioDQVwqYI6jomZU1NFtM+rOSxZjVazcyvwHr/p/Kws1jegAAAABJRU5ErkJggg==', + 'Baka': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAA0pJREFUOE91k3tI01EUx39JOpA0H4jNx0pbD3XTalISWf8YFlEgldqDsBLLyqjEKBCiLLWiggh6/KEV1WZ7OaelLZvDdDafNW1JFraWe/32+01FrUZ9uy4ylLpw4Z5z7/nc77n3HIqaMRIjZJyEcNX+uFCFeGmI/GZciEIsCFJUTvoAzDz+1y7K76MSwhX5hXl6z+WSbrzU2KB8YEGDwgrTaxZ3b7xHcaHhR3xw7Z5/UviB1ReP5XSg3+TAqYJOxMzWISFIC0GQDomhTVA9skCnsaAwp/vnMq66dBokNuBR9uFd7T9Z1zCunjci0qcRJUVdoJ3DYOhRnC/qBZ+jQbfeCc+37yjY2UEg0iwvJE0k9l8Z+8xqHmTgot0QLdQgTaQFQ2AsOzlHvOu1S5pwOLsHHo8HjHMCq2MazNvTlByKHyrJLDvdR25jMWRxYx5HjeMH2r1BDOOeguRua4OI14jx8a8YH5tA+al3EHKlW6mYOapb2oZBOOwMbEMseAE12L+jjUh3w+VipyAZ65oxn1NP/GMYGR6Ftn4Qsf7qa9S82Y/l/X122G0uL2TbxmZEz1WhXW8mUol8moXu+SCi/OoQ6VsDh3UUwyQ1k9GOaI5MTkX4yWTGHutvgI1F28sviAlRgxeoRm62HvsyW8En9pZ1TYgi6TntoyQtFm86rVgUoJZRvDnKMmXVAGxWmkAYOBwudBqGcHCvHulrGpGT2Uy+z4yT+QYsCXtCUpp8GxbKhx8gDK0ro+KjJGvzdjfDZnN6VdisLD5/JjArQ2zW66PJOj2lEZtStaBphkwah7K6kMJ/GEulp1bMWhAmMbTozOQRaWRtfoZVgjo4iRra4SYgGi26TwjxVeDKhR7Y7U606ixICq9tr7hd7+OthRWL7yUnJ1WPmXotqLhpRICPHCePtuFV6xdUPTAhcWEtRHEqfHpPyto4hPXLXnzflSEJnFaN3OCKDcsFsrEntR9RUmxARLAUgT5iBPuJsXWDBj0dZjRU9yNV+PTbpjTp9OA/pOSk24nRkXf1J462oPxcJ65f6ULlHSMulepRerYDgvj7A0cKpNz/tyTZqbzXO4t0ZZGQJ34RH11lFHIlA8LIqreCCMUZRY3cd2bwL/5/RmjNSXqtAAAAAElFTkSuQmCC', + 'Ponyo': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAuNJREFUOE+Nk3tI01EUx39BTytConQTt1am07m5abi5KT5S8z2dj1yOEMUC7aUgIoimlmUEWX9kBZGWaamEmE6U1BI1XNPNGTrnHs33IwuSXrL4NgcJ0mNdOHDh3PPhnPP9XoKwcroJYvMQiRSicHCQKCgUyZC9/T5rNet5KUFs0zCZbZMsFmZ9fTEjEEBDp4/KSSSb/4JoGIyWaTYbiykpWEhOxhSHAzWD0aqkUGhWAcVkW58xlvuPhfh4zItEmOHxYDR3MhcdDaNAsKJydAz5IySKRNjEUmy88vjOVaU8F0iPCqCNjEBHkC/UYaGYFwqxmJoKLYOhkxPElg0QsbNtTlmox9yjRD9UCbnoOR+J/lwRWtOCcdXfDc2BPpg0d7CQlIQZPh9KKlVkAQjJ2x2zmOSsQu7hpzUJfBhLjsNQmADjxcT10Bcl4rE4EHc5LjBEhEPn7f1WTqXSLQB/s1Tp7vslsoIkyPPiMJAbi86McBguiaHKjoEqR4jJy2K0nAxApzMN5iUGrclrKVaz2fUvuF4tRbxDKA90w5VjTFyLZKHpTBSq4/1QnxGB2qxoVIZx0JopRCPHFSNOThfWZzfrXDcZEowH4iA05ATg68hDtBaL0HAuCm3lJ9Bfcx2fFNUoi/DCjRgfNHHd1wCZA2TyXjNkE6F0cBDpPFiojeNi8EkJdFoN3vXch0nbBJOhDd907dANv8JITxNqziag3ZsJbUDAwLin50Q9QWwl1qSYoNOVvUcOoqOqAAa9Fu9H2/F9+B5WZLcwOyxFX18flLI+VASyMGVeoJHD+Tzq5BS1PoaKRrNT8127P74swsq4FCa9FKvqBqwaOiz3hdEuLKueYSyECT2LNW0eIfo3E/WmEbvnG1MUJnWdpWhDGDvxQXZHo+RR0uW2tnv+auPX+TvtJm7zKpaen/4y2yjBUlcxlvtvmvT16ZWDpQeoVv3/60F/NrHjTf4ugazIXtJ8ivjnz/sJ+yGQRjcqUdIAAAAASUVORK5CYII=', + 'Rabite': 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAD/0lEQVR4Xl2MXUxbdQDFz/9+9Lb3tkBLCxTKhzgoOOZAsokbJmZxDFHnd+LL4hKVzBgfNCY++ODbjDEaZowvErOM6HRu6hKZY2rIAOkCY4OSDTpFaAsrlJa2t5+39+NvjT7tnJzknIfzI98Nf/C6TuXdguWBd1q9rcb8/CwsZiu2Ywm4nDVo3VWLZCKDaDwJq9mCg31PgjAMKKUwmcyYvTbek9iJRDm6M/XswEDjwNz6plWW6wdZhjUAintFCEEhn0N04zYskljaDLaj8ar49oUrsYR6mrFJNj322w46H8y+mitM/ZJKZmyE4XAvjJSsazpyuSzslVZIkgWKOvvRgQ6Xrdlhqmds7o7bFZoLkctreKxf7GtuCE7IyUQjBQcQ8j/lvxCGQJZz0IoCVpamTtzfIh9nwiaIrCQyjNg8mq11oDLUhNXRJfT1Ozr3tS/PqpnQ80qRgjAmKIqBfK4ItbSLKoOZqR/6neLkENlSUAIhlktvEf+sD2rkm8nWTHtvZCGMVON1ePuaoBER31/MXGly1wSqq9Uug6FluYyWXJiPqFXmjd4Dh9oF9ZKKimYXRtYCx8lmMIDIxlIPGz591av0mtanF7FcCEN6iMXeox2wOJ0QJAmUAoRQaIqCnWAQY1/ewKNGNeQuYXkm0d2NC2e+wvmRr/Hx+6+8PHayrbDyyQBNDb9As3PHKDWG6MTM23RoeJAWsqeoWvyUUv0UHf7pBB0fe4OeeXe3/vmHbx3+8dwIGJ4IsFpMMFe0fbtAn+nwZePr1u4MBK8XIALG/Rt479wYrs2vgeNNAMNgMbiNzybuoKVvn+Gs9kbr6qpBfJfGYHFIkJUCoGwfqcoMX/b27EGhwgOjoCADDlP+CA51ugFFRzoB8FYNaQ1oqKD44+eNL+wNj7zJGQSIhe8+jgQ9thk+27v/KRY6L4FSCkVOwtlQj6P73Qgt/o1ERoKt4iUkE7+jrZMHyzIoK9cOBFfT4LbWAk+0a7ZLnvqHcTNdACgFScfAcjxEdy00VQclHGo7dqGeYxHbvIo6hwhSghCehb3G5p6eW7VxXC5/xGWToMgrKKoaCnIalI9CIARasQAqloMI/x4BWrLLYwE1AEPTwCGHaGjz7pw/leZUNV8wNm9BLy6CxsvxZ1kMbaY4TKIIXlNBsynoVjvAC4CuAoYOVi+CMfLYCUfg95tPHuzZB0YtKzsb58RMucWE/fZmhCbdOP9rNnLnxko6GVoB8lFwyVVw8b/AyeulHoJyN4Rb19dTFyeqBlu6njvfsWcvOJvLs7DMmw/7bvpeE4pU2OIcgcqmp4fGAgt2Txwvqr7lTp5V7LquZxXC6+BqEvGcY5pyjaM1tffJbk89NE3FP5VQ6y7a+paZAAAAAElFTkSuQmCC', + 'Arch': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABCFBMVEUAAAAA//8rqtVAqtUQj88tpdIYks46otwVldUbktEaldMjldM2qNcXk9IWktQZkdIYlc8mnNUXlNEZktEZlNIYktIWlNMXktE7o9klmdMXktFHqdkXk9EWk9EYk9IlmtQXlNEXktAWk9AWlNEYlNFDptkZldMYk9E4otg/p9kXktEXk9AXlNA4otclmdQXk9IYktEXlNEwn9YXk9IXk9FFp9o3otgXk9FPrdwXk9E2otdCptkXk9E/ptkcldIXk9Edl9IXk9EjmdUXk9EXk9EXk9EbldIcldIjmdMmmtQsndUvntYyn9YyoNYzoNc0odc1odc2odc6pNg7pNg9pdlDp9pJqttOrdzlYlFbAAAARXRSTlMAAQYMEBEVFhgcHR0mLS8zNTY3PT4/RU1kdXp6e3+Cg4WIiYqMjZGXl5mbnqSnrbS3zMzV3OPk7Ozv8fT29vf4+fz8/f7SyXIjAAAAmUlEQVR4XlXI1WLCUBQF0YM3SHB3a1B3l7Bx1///E6ANkDtva0jKbCW2XIH1z2hiZEZ4uUgxo7JedTQye/KN/Sb5tbJ+7V9OXd1n+O+38257TL+tah3mADAwSMM7wzQWF4Hff6ubQIZIAIb6vxEF4CZyATXhZa4HwEnEA+2QgoiyQDnIEWkjVSBBZBqXbCRlKYo8+Rwkyx54AOYfFe7HhFa7AAAAAElFTkSuQmCC', + 'CentOS': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB5lBMVEUAAADy8tng4Ovs9tnk5O3c7bX44LLduNO1tdDh7r/eutj43q2kocX23az07N+qqsvUqcmXl7331ZXJj7r40o/Pn8T42qP63KjNw9n21p3Y387Ml7732JzR55z05MSxtMLGn8TC4Hx8eqt8e62Af6/B4HnG4oPC4HzH44fBf7LCgbOkoMTcsrmtn8PWqcfFtKrj4Jvs2ZOz2FnMqLXT3KfY5p60Z6NUU5XRuqHzwWSywqDn3JaiiLWahrWhkry5zJjRmqm1Z6P1wmb1y319fK632mK5cKi5nH+73Gu73Gy73W283W+9eK17e6y1yZS3aqRZWJdcW5ldXJplXZppaKBwb6VwcKV5eKswL306OYNPTpGkfK+m0kGpUJWq1EnEqIuXK3+Xh7ahP4qhkryMfK6BgK+CdpGMaKKMa6O9ea2+eq6+oYW/eq+NbqWVlL2Wlr7AjanA4HnA4HrBkqbBlafB33rCgbLCmKjCxIzC1mSs1UytV5mtxIWt1lCuz2evWpuvXJywxYzHjrvH4oXIjrrN2HXO5pTO5pXUlYnUlYvVl5Hb0G7e0XTg03rhr5fpzHPpzXTp0Hvtz3/wrDHytknyt0zyuE3yuVHzvVr0wGP1x3T1yHf1yXe0ZaL2zYP30o730pD31ZeRIcF5AAAAQ3RSTlMAFBkbHEhJS0xMTk5UWWBsd4SEiIiPkJCVlZaam6CjpK29wMPDxMTFxcnK193e3+Dg4uTn5+fo6e/v8/P4+fn7/P7+J4XBAAAAAOBJREFUeF5Vj1OvAwEYBb/yGlu717atLW0b17Zt2/6nze42TTpvMw8nOZCAmwUpiIY6c5IiLi9tPX64GairqszHQ4X2VB64v1Cs6PxMPJSdHM777s6/jyaMRGiRLyyrb88OpjZ3CzAXrm1sqzSNNeN7kVBPNgB7cG51abE5l9cXDces7emQ1uadHhutFUg6gpPKkSIqQGavwz7r7O/+/3t/rSdjI9XDM3qz4fr3B/3iA0aJTG9x71+9oR/PLDwUe2wm19bly+fTIxHyEETatbPewGEw6Mk/tKZCEqSQQUlIHB/QNBEjjVN1AAAAAElFTkSuQmCC', + 'Debian': 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAQCAYAAADNo/U5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAZ5JREFUOE+Nkk0oBHEYxv8fu5GQj3JwcaDkIAc5IpR87M7MKnIVJVKclaIQ5Sy5OLkgR7n5OigcSNpmd2c2Vyfl4KT8/muWiVU79TTv+7zv837NCBF6PG1X+NpZyEYSD9mIc+tHnBPe23B9xKrCuTmbQA/JKfABrhBswa1hH4A38IwfOxPdX1qcjiCQxO5NyrjKV70TnSbeRPwJvGN3i4yyqnEucPY8ZZX9GSEgGK+RvFfyjk2VKZxzBNG8wJWWgh/xtDOeUXZ7Slr6TrSLYL9N4SMgYTTcwdc2ArvJcElhSVcM6mCNSV8n9hA59yTU5UWMG6HIbLhIWlglgWiC2L4Z79qTdo40D6ISuOWwKCWHyk9Fv8ldpUHOuGTuynwSBUynddPdlbEosVpP9Eu4FnOsRzUYNTsdmZN/d5LDiqM0w+2CMdAFFsFGWgfXxZnheqe/z+0puwEM0HHYV3Z9Sgz8TEz7GkQvpuJ/36ggj2AaHLrSlkULWV5x+h2E8xkZL16YVjGNaAUscfZ/f6c/k9ywLKI2MMcRWl0RLy007idmRbQJ7RIfDAAAAABJRU5ErkJggg==', + 'Elementary': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAGcSURBVCjPfZE7aFRhFIS/+TchRAtRlBQqiMpiEILsf/cBoviqxC42hliktsgKK4gKkS2sUkRUUFCwCGoqZclFiIUQWN1k790gKFHBxkdhYSMIgeT+x+KqpTPdzMBwzsjIUS2GMfN4IFXqHi19zHUHIPl61rFt1tIM09Zie7bs6xKADMnPM2Tn3VG7okVzHLHJsOIe6ld6xgyjVPeJ7/cN/7N8yDD8cf9l/8DIZr9YqhuqFLOOHS640GE0Wch7o2/hdO9NbWhjtVBzYYzZdDXcVvzP3sRgYQ0635nbOOfM25IcVZ79OQebYLn7ASR2KXJ4euU9DGavc3tkqy6qAeAvcwrvoG8tCHQAINoysGBPum/Bn6BJExyp7Us+WVcVqJR5aQ/Sa1DZrcfcsM+kTmkYBc1yKbofYmskd6F8NvR4nl5X1RJVillbc3aMg0BbrbBXETvsQjrvh9Uu1Apff9xb5yp3wgSpdnJSfbxYH195F/UrtlvdGAP52L/Pv/iXpWGf+BgZMkAqTWpKT+2VOiGjpCrj1uzdNCMP/G/u39MktJ21xpKNAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTEwLTE1VDIyOjIzOjU0KzA4OjAwkOuuIAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0xMC0xNVQyMjoyMzo1NCswODowMOG2FpwAAAAASUVORK5CYII=', + 'Fedora': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABPlBMVEUAAAApQXIpQXIpQXIqQ3UpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIpQXIqQ3QpQXIpQXIqRHYpQXIpQXIqQ3QqRHYpQXI8brT///8uTYMpQnM5Zqg5ZqnS1+I4ZaY4ZactSn8uRnYrQ3MrRXgsRHUsR3s8bbM8brMtSX4wUosxVI01XZw2X50vUIguToQvR3c6X5o6aKs6aq08Un8qQnM9VIFDWINJXohKcKlXapEqQ3UvUIc2X55bhcBdcJVgcpdhfapmd5tuk8dxgqJ1hKR5jbB6iah/m8Shudq3v9C4wNG/x9bFy9nFzNnFzNrIz9zK0NzK0t/O2+3P1eA2YaDU2eTb3+jb4Oje4urj6fHm6e/s7/Tz9fj3+fz7/P38/f3+/v83YaEa/NNxAAAAHnRSTlMABAoVGyY1SVlpeIuQsLfDzdHW4+3y8/b39/n6+vr4+ns8AAAAyklEQVR4XiWN5XrDMAxF75KOknYdZJS0klNmHjMzMzO9/wvMcH7I37mSJShsJ+5NjMT6umDoHyXDcI/2qJadh++P3cle1de+9yPe3/bTY92wzfzr7wGtP3JrAI72BZGVtcAdQlwHy+JS1pDbBE9qamZF3BYrjQxPEXwKc6dC8bXFm0QIpmt8kn0Rn093q82UCtK8oXZckwFJzuulV8bHkajPyXdbnJnARfDHs0trz+JQ+5AFvzp/L0+cL2qPAINUPrq5OC6p/64F/AMnrST+Dq/r7QAAAABJRU5ErkJggg==', + 'FreeBSD': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAABIAAAASABGyWs+AAAABmJLR0QA/wD/AP+gvaeTAAADXklEQVQYGQXBS2wUZQDA8f83j33M9rF9d7u4loaWklaDpkSo9KDGaIKUaGxshD2YSPRiuDVeTDyhBxosJCoa40ktpAkPDcUqAYVIpUSUPrAulEdD2bbb7e7ObGcfM/P5+4kwKDvq6yJ1FYYcvb+YAkqAHo/HQ7FYrFIoCiurq9ZXJ06YSOkA+kBzfX06bys3zHxS9EL0tXDVyZfefacqV+X/ZSJx5+qLbx98LhaL9RiGEZWlEsWC/Thd9q6Pf3vs2u6Orc83rFsvTwwfLf5obgywT1Vjh2Hh+rbNsnTssJdNLedK5aIrpSuldKVXKsnH4+Pyn6FDXn5tMef9O+3NvdkvP1V4+EYw2AoQ+KSx8dRYS6NXXnwovaItXduSrrkinWxGOmZWJi9OyOK9m1LmsjIz9IH8QUMOd3WfAQwNKCy2tJwbHB5+XasPaxIHmc4g7WWEZ1MquBiRFlJTf1E7+Tl/H/8asavPzTY1nWd2ZkMDRPeBeHPz5ojwsilEQCBvTSKunCF3M8FSNkBGVTHDYYrLj8jVNhDZ2SMa2zo3MTamaIC/u6Ojr3DtrOrvP0BpdATnyBeIhTxpR5ABUlKSUlXS1dWstbVxdz6hPL0l1quGqkLaKwNvVcjEXNRd/4mit4Z19DjefBEPyCKxgQJQcF28dBrHNDGTSZSezsjeff0hraa2Vs2vrvit81O4vj9xLJcC4ADrQA7YAGqBGsAql/EtLdFQE/L7dF1XZmdnSrbPMJfXoLDmolQK8gJyQBowgQhQDRQBD+hsraVhd4e5MH+/oExfvWLJ9q3/3S7qMpNH2hsS40kFS4EUUAMA2IANRIBXv4uzuO67c2PykqkA5YmZ6bN18YPi0Yoknxc4AsJPCMLVAk2BLKDosCWqs/PZaulkuxk9fekcUBAAQGDks5FT0W++3NuYuC0DVUL4DIEdlIQDAj0IRkigaMjArkFx0tf523sffrQHyKsAgHPhwoXLL+yP9/kePNhk5ExUTyKFkJVAUAiCFZrQup4Rv9ftuLV/6ONBYBVABQAArMvJ5MXW7duD6P62sD8UrPAFRU1TpeCpCnGvPZr7WW///v0jpw+VC9ZdAAABAAAAAMLo7drWrmQyPWG/r8tnaGIjaM05ujr16x/ZBFh5AACA/wGZnIuw4Z4A3AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMi0wNy0wNFQxMDowOTo0OS0wNDowMOPVpFwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTItMDctMDRUMTA6MDk6NDktMDQ6MDCSiBzgAAAAAElFTkSuQmCC', + 'Gentoo': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB9VBMVEUAAAD///+AgICqqv+AgIC/v9+Ojqqii9GAgKptYZKQkOmPj/ddUYBgW4eVjeCTgfiWjO5wbJaZkvPBvepkXomYkNldV4Bzbpl6dJ+Uj7ynoO6Vi+1qZI63se2mnudjXYjOy+GCfaqZjvWlm/Pc2e+Oh7NeWIOWjfeXjeW1sd+gl+diXIfp5/KHgKnn5/F2cZx6c6ZgWoXc2e6dltrAvNu0scrX1eTOyujCvup4c5qpovVpY43///+6uPPJyPXq6fvm5vrz8/z8/P7+/v/d3PixqvmxrPSyrfe0sPO0sfS3tMve2/3r6vy6ufPz8/3d3fi3tM63tPO4tsu5tsu5tvO6tfe6t/Vva5KRjKy7tvW7t/W9vPO/vM+/vvPCwfPEw/TFwvTFxOfGxfTGxvTHxvTIx/TJx/aTiOrNzPXNzfXQzfnRzuHS0fbS0vbT0uHU0e/U0uTU0/bW0+zW1ffX1vfY1/jZ2Pjb2/jc2uSTiemVkLSlnvbe3PTe3vng3fzg3f3g4Pnh4Pnh4fri4enj4/nk5Prl5Prm4/ymn/bn5vro5/rp6O/p6funoPWsqs3t7Pvt7fXv7vzv7v3w7/nx7/3y8f3y8v3z8vytqPWuqPX09P319P319P719f339v739/34+P35+f37+/+uqev9/f6vqvSwrPQAR0dcAAAAPHRSTlMAAQIDBAgJCwwVFyAsNUFHSVBneH+Bh4mVmZmanKCxsrK2tr3ExtDW19rb4ODl5u3t7u/w8/T6+/z9/f4MkNJ1AAAA8ElEQVR4XjXNw5aDURSE0YrRtm3b54+dtm3btm3bz9k3Wek9+2pSYFwT8ibzE93hwAtdJqK3nZo4J9hFXbP+vFHOthV6gnGzstZq94wdCs4UCCDymQ2v7X0LdYoSQ0MIENRYzJbRlPTTHu73ZNAL8vivmVui98PpzuqffX0mIPHJGtOQenukteJ+aS3b9htNpDnT9TeZH1bHAwBRMhGpd6e6uNrLoRgxBKmsX47nBlp678ojpEA40fejcmW4e/No0V8IIPfj6eKgbEJ3ZUnzgE1OqWp9Q3VeWRAsg51f1dZ8c31RmAsc+N5JGbG+zvj3BzDCPrzMDC9SAAAAAElFTkSuQmCC', + 'Mint': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACVVBMVEUAAADh4eEAAAAAAAAAAAAAAAAAAAAsLCyXl5dgYGCnp6eTk5N3d3fBwcGqqqq8vLzNzc3Ozs7Ozs7Pz8/Pz9DQ0NHR0dLS0tLS0tPT09Pf3t/Pz8/i4eLb29vZ2drZ2tna2dra2trf3t/u7O/u7e/u7O/r6+vt7O/w7/Lw8PDy8fTz8fXz8fbx8fHz8/P19fb49/j49/n6+vuPxlmWyGOx437h9NDr9eD6/fj////+/v75/vTA5Jv6/fb7/fnL5bDL5q+AxjeDxUCEzTyGxUaGzjyHxkiHzz6J0D+Kxk6K0kCLyE2M00WNy06P00mSz1OUyF+W2FGX1FiY0F6Z02CZ21ac0Wiez2yfz2+f2mOh4GCi4GOi4WKi4mOk12+k3Wul32um1Hin0nun4G6n5Gin5Wmo23Op2Huq1n+q43Cr526s4Hit23+v6XSw34Cw34Gw6nWx4IKy4IOy44Cy63ez146z34az4IWz4YW03Y217nu38H2625e645G74pK83pu98Iq984W+4ZjA4px0tzDA5ZrB8ZDC5p7D55/E947F6KHF+JHH4qvH6qTI46/K5LLL5LN1tzLL5bN1uTDL57DM5bPM6qzM66/N5rTP6LbP6bTR6rfS573T67vT7LrV7r3X68XX7MHX773Y77/Y9rvZ8cHa7cjd88bi88/j8tTk8djk9tHm8trn89vo89zo9N3p9N3p9d7p9tvq9d/s+93s/dzy+erz+O73+vT4/PX5/fT5/fX5/vN1uzB3vTD6/ff6/fh5uTj8/fv9/vr9/vx8wjV/xDmrMRH0AAAAOXRSTlMAAAECAwQJDzk/RUlNU3F0kpSVlpeYmpucnaKjpKWqqqqtu8LExMTEzdTU1NXY4evy8vP+/v7+/v6LaR1mAAABD0lEQVR4XiXI03bEABAA0KltW9kaW3eSZW3btm3btm3b/q4mp/fxgqKOtpamhrqaqoqykrQYABh+PVMU9fjE5Xp8o54kgPHN0EBHU2N5YXZykiua0HHd2759VF2Sk5IYE5GGsmCEWLV1kVWwt5O+3x/qpgsy8k4ja+cJl2/v5C22tlgCAHtw9TQSa4s+AzfPSm0BRNl9SydhWJzLC567KrNhgrNwHIJ5qTz/2f9w7Jw/DNqIjVr04exW0AEOXcN3Ab7enr9eDW2VTJgehONyc2Z8XP5YdD0Tcuhcc4/r45OjGX51TEjYPbh8THRPvbz+CHusgSZlT7rP8PkCwfQKaQUi9Igr6JsRBMFiWZgb/AHKElRzKopZJQAAAABJRU5ErkJggg==', + 'Osx': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABrVBMVEUAAAD///////+qqqr///+ZmZn///+qqqqAgID///////+tra339/eAgICoqKjx8fGMjIzm5ubh4eGPj4/g4ODIyMiAgICSkpKLi4vS1tbPz8+Xl5eMjIypqanIyMjW1tZ2dnbR0dGamprFxcV3d3d+fn60tbV3d3dcXFx3d3epqal7fHxxcXF+foCnp6hYWFhyc3Ojo6SMjI5fX196enp+fn6Li4xERERqamqgoKFpaWmFhoeen6A/Pz9QUFCWlpeSk5SUlZWUlZaOjo+Tk5RHR0cuLi5YWFgwMDAeHh40NDQ3Nzc6OjpcXF1rbG0XFxdSU1NVVVVXV1dZWVlbW1tnZ2lwcHABAQEEBAQXFxchISI+P0BISUpaW1xHR0kNDg4qKyszNDU1NTY9Pj8NDQ1cXF4XFxhSU1QSEhIDAwMrKywtLS4uLi4wMDFHSElISEggISE0NDVJSktNTU1FRUVWVlhGRkYEBAVBQUE0NTZQUVJQUVMFBQUqKitWV1lXV1daWlpaWlw+Pj8bGxtcXV9dXV1fX19fYGFgYGBkZGRlZmhpaWlsbGxwcHB2dna844Y9AAAAV3RSTlMAAQIDAwUFBggMDhkeICMkKCgqMDIzPj9ERFBib4CCg4iMjZCcnp+jqamrw83W1tvb3ePl6Ojp6+vs7u7v8PHy9PT09PT3+vr7/f39/f39/v7+/v7+/v50ou7NAAAA30lEQVR4XkXIY3vDYABG4SepMdq2bRSz/capzdm2fvOuDO397Rw0Ly4tz2QAQPbcxuZ2E/STJwfxPhWgG355fRrVAIVb1zeP9UDLfiSwkAcADe8fn7tFxWuEXFRDoer/OgoMTRBCumj8yJwPBo8Zhpk14U856/HI8n0ZUtpZ1udrSzfVneA4roNKjdrwpcMRilb8d8G60+lKnrpWcn9bO+B23w2O8Tzfq4aiNSZJqzn5O4Kw16h06fPZ+VUlUHfo97+VAEb7rSh2UgDd4/U+TBlQY7FMj5gBIGvcarVVfQPVPTG94D0j9QAAAABJRU5ErkJggg==', + 'Rhel': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABj1BMVEUAAAD///////8AAAD///////8AAAD///8AAAD///////8AAAD///8AAAD+/v4AAAAAAAAAAAArKysAAAD///////8AAAAAAAAAAAAAAAD///8AAAAAAAAAAAD///8AAAD///8AAAAAAAAAAAAAAAB5eXn+/v5JSUnKysrS0tJ5eXmqqqqxsrL+/v4ZCgknJyeHh4eIiIjo6OgZCAdOTk7t7e3///8GCwwPAAArKyv19fX29vb9/f0EAAD////+/v4AAAAGBgYHAAAJAAAMAAANAQAPAQAVAQFyCQV9fX2pIRzmEQjn5+cBAAAFAAAAAADnEQjvEgn////uEQjyEgnsEQjzEgnxEgljBwPaEAj9EwnwEglHBQJHBQNNBQIBAAB3CQR5CQSHCgWLCgWRCgWTCwadDAWmDAapDAa/DgfKDwjWEAgGAADh4eHiEQjmEQjmEQkKAADoEQgLAQDtEQgMAQDuEQnvEQjvEQkPAQAfAgEuAwEvAwE8BAL1Egn3Egn4Egn6Egk+BAL+/v5CBQJrB0muAAAAT3RSTlMAAAMEBAkYGhsbMTRLUmpvcHeIjLe6vcHCxM3P0NbW3Ojp6u/w9ff5+fn6+vr6+/v7+/v8/Pz9/f39/f39/f7+/v7+/v7+/v7+/v7+/v7+Q8UoNAAAAO5JREFUeF4tiwVPA0EYRL9SXIsWl+LuxfcOd2Z3764quLu788NZNrxkksmbDP2R7vH6GioLs+iffEzNXd4+TqPErUUpVqMOvwgdzMPn1rv5vPsVeufBTaBK/bH2FPvkEUuIG5jIIc+sHYn/HJ3dC/Hxuo4y8s44dzwBbFkisHN8bVIdXs6jb+H97aCwbHEIqgcml64CD7YllNkAVQC940MLYe5YzvIeQAXNrd19Roc5MdzfdQLUUKaUYyuG9I8y1g4gj6hIak4X5cBIT2MquZJrJdOqpY11ZpAiqVwbY/C7KY1cRCrZxX4pWXVuiuq/hs49kg4OyP4AAAAASUVORK5CYII=', + 'Sabayon': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABvFBMVEUAAAAcUaYdVKwAAAAAAAUABAwWRY4YSZYhZtIhaNYHDx0KCgoFDBcKCgoRMmYSNm0fXL0fXb8AAAAYS5gaTp8fXLwgXsEGBgYFBQUZSpgZTZ4JFSgODg4IEiIOJkwOKVIkW7EnXbQLGzUTExMKGC8LHjwMIkITExMiIiIPEBEPJ00QEhMXOXAaPncOJEgoXbApXbEcHBwwMDAEAgAfHRgQDgo3NC8AAAAHBwcKCgoLCwsJCQkaGhofHx8lJSUwMDA0NDQ4ODiRkZEICQocHBweHh4GBgYHCg8mJiYnJycpKSkrKystLS0uLi4ICAgODg43NzcRERF1dXUUFBSjo6O1tbUbGxsEBAMLGS8MDA0iIiIjIyMkJCQNDQ0NHTYKCQkoKCgPDw8QEBArMDkKCgkRERIREhMxMTEyMjISIz00Njk1NTU2NjYCAgIVFRU5OTo5P0c8PD0+Pj4/QURAQEBHR0dKSkpMTExSUlJiYmJlZWVnZ2cWFhZ2dnZ4eHh8fHx9fX2FhYUXFxeVlZWXl5eYmJiZmZmcnJwZGRmlpaWrq6usrKyvr68KFiq/v7/FxcXY2Nji4uLn5+ft7e0yif9uAAAAN3RSTlMAAAApKSkqKioqg4OEhISEhoa1tra3t7y9vr7S09PT09TU+Pj5+fn5+/v7+/v7+/v7/v7+/v7+70RY/wAAAPpJREFUeF4dyWNjw2AUBeC7dfYyorM6rx1exKltzLZt2/rDa/J8OgBVVlFDX39jcTZoUqCse251a2dvu6ccUtWlanLQ4Vpel+ThlWq1l3wEz58tx4dOt1dMlAJk9A5gMjG75LHwo46hzkwosGOMbejumoRvubC9EOrMviT0E0Us9fvN9dA6zxJCNv6+ECGsb6oNWsgmpZT9/UTUZo3Em6AW34guTL4jiAudiCM1kLcw8/SmHERfT1/eueBiDqR1GK1n9w+K8nglxYxd6QAML4ztXoQuj8YFgWcgqdJp8qzty26vaboCNIxBCshyQDKov0aXr29v1ufq1PwPx5Q7bCoh6eoAAAAASUVORK5CYII=', + 'Slackware': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AcEDi0qZWWDgAAAAx1JREFUOMt9kktoXHUchb/ffc1M7rySSdJMOknFPMRitLgoNKKI8ZHGKkgrjU8SitidimSh2UkXoQmoO1dGQSxJjdvOtqSaqlR0USEGSjVJGxuSmWR6M3fu4/93YX0g4rc9HA6cc4Q7DI+fpzz7PA8++2mxvZAeBZ4xhHtFcJRmXWsWvb36/OLcyxf5B/KHeYHy7DmGx1+YSDjmWTdlobTGMAStQGkNoLXS4tXDq7u7tUcWz49tA8jR8QUuzB5n5NTCV13F9JEo1JJwTLKuzU61QiOMcd0UDb+BncwQK3Rl15eNja3ui/Njq8aF2eMcO/XlBz0H8oO2ZUkum6A13WB99TtyzXlaCi24SaFa+ZFCzsG2DNnfkdbFjsI1APPhk+d6ujqznycdCxFozadYWvyMpx47wa+bPkGksKwUNnsk3TaCGASRXDZh5LpHXPPg4Rcni+3uYBxrtBbQghlscOVKmYHeEm0ZIZ9xyLffw41ND6VAa43SmjiMByzHYtjzwr9arfshxf5jOKlvKZfn8es77N2uks24PPfSFD/9Uvt7AtPKWmEU9d645eHYJo5tcKi/FX/zG+zmQxQH+rANk862DOW5N/hhaY64cJSa5xNFCgDDILZACMKYWAmh73HmzFsMlBQJ06LeiMinE1S3KzRCm5rXIIoUIoKIYCVM36urZFbEoiBLNMIhAE6/NsSB7h6SKZdL8xsUOnpx9j1KbTdARACIowArYe1ergfNT2i0mIbJys0GI6PT3N1/hJvrPxOFdRJNBQIy/FapI4Bpgohgcjuw+jq8jy8tV55MNBWI4ohS802CpizKv8q+FgALZAfYgSyAZtNro1oLaU1VvxCA029Oraxs7u/tKnXiNjn8HyKwur6lI++6vPK4V7IA7u+1Dyu1tr183ddNbkHuXP8/zEIYeFqiLRl6YO/p0bHJdflT/PD9qZa1W+ry99fcvlAlcZwUpuUAglIRYVgnDEIOlna4q0M/NPnuO1/PzMwg/045O/XeibUt5/Xangx6viSVFpK2jtMpvdyWCz+5ryf10clX3/amp6eZmJjgd441URWWJY8BAAAAAElFTkSuQmCC', + 'Trisquel': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABjFBMVEX///8AAAAAAAAAAAAAADMAAGYAAAAAHFUAGWYAF10AImYAIGAAHloAHGMAKGsAGmYAJmYAJGEAKnUAJ1gAMXYAJnEAJGQAI2EAK28AK3cAGTEAMHgALXEALXgALG0AFUAAI2oAK3EAMngANoYALXMANIAAM4IANIIAL3gANIcANokANoQANYQAOY0ANIYANooAN4kAN40AOY0APZMANIUAOY0AO5AAPZUAPJAAP5MAPpQAQJUAOYsAPpYANoUAPpoAPpUAM4AAQJkAPZIAPJEAQpgAN4cAPpQAPZUAPJEAO4oAOosAOo8AQJoAOYsAO44AQpsAO48AQp0AP5UAQpoARJwAQ58ARaAAQZgAQ54AQ50AQpgARaIARqMARaMARaIAR6QARaIARaEASakARKEAR6MASqsARKEASKcAR6MARqYAR6UATbEATa8ARqUARKAAR6oARqMASKgATK8AR6QATbIATbAASq0AR6cASKgASqwAR6UASKcATa8ASqoASqwAS6wASKoAS60ATbHn4CTpAAAAhHRSTlMAAQIFBQUGCQoLDxAREhMUFBUYGhobHB0eHh8gIiIjJCQkJCYoLC0xMTE0NDo6Oz1BQUNHSUxOVFVVVldaWl5iY2RkZWZoamtsb3FycnR1ent9f4KDhIiJioyNkJGYm5+foqOkpqamqKmqrKytsLKzs7e4uLy8v8TFxcXGx8rO0NXY2eZc4XYcAAAA00lEQVR4XkWN1VoCUQAG/3NWtwh7CTsQJOyk7BaDxuxA6bbrxf32gt25m7kZqDRYxziooDV7+1AalMUavQh2AsEZoWvzigLun+T17/c8QiJZ7qu2QKiNmyZthdcR1/as353jIeU1GxMHo5XHdqPFeX8IaDMdHPYN6dRN7LR4qQewdTa35HWkyh+fbxERAMjwlAWJv3CPSKDQ+H7XvHdkV4Pua3Gtm4sPKIF/WV8dop4VKBw/NU33B3x1JbTt+XwhkJQoqRfWvHOy28uqH8JIdomR/R+s9yR3Cso77AAAAABJRU5ErkJggg==', + 'Ubuntu': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABKVBMVEX////ojFzplGf1zbnqnHLvs5P10b3yuZv1xKrytZXvtJXys5LysI32waT0n3HxiVHwg0jxhk31kFn0h0zxf0P0hUrveTv2iU3yfkD1hEfyejv5eDLybSX0aR7zZxvyayH6ZxnxZBj4YhH7XAb5WALlUQLeTwHgUAHeTgHfTwD65NzdTQDdTQHdTgD31MfcTgLcTADcTQD////xt5/31Mf54dfmfE/dUAbeVQ/jcUDcTgHeWBnnflHohFvpjGbqkGztnX342Mz53dLgXiP65d399PHdUgrtoYLyu6Xzvaf76eLfXB/rkm/fWhvupojwrpTeVhTgYSfgYynzwa30xbL1ybnngFT31snngljhZS3539XhZzDiajbibDn77OX88Ovrl3X99vTjbz1fisGCAAAAMHRSTlMABgYGBwcHJiorMDA1NXGHjY2Nl5mZmZyfn6O5u8XHzc3X193j9fj4+vr6/f39/f08OUojAAAAx0lEQVR4Xi3HZVbDYBhGwQctWqzFPXiQ+36pu+LubvtfBKcN82/UEhld2vWXxyL6F92gbTPabse8hU/uHMx1SZoyyJWPTwq1Rs7GpYE9+Cg+OJcs1MHvU9y4fnrN31yUm18vMCIPjtw3QMndw4rs8ieVzAAcBlewpe1KM3uaBuD3Dda1BhWXAsi6AFY1a2SqifxZ+rnxWYcJDRkUS3fO1R5vwe+XZgw4D4L3RAJiknoXCVX3WeiUpJ5pIxTvVmg45pl5k4Ot/AGV2iqZBWgJJAAAAABJRU5ErkJggg==', + 'Windows': 'iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAA+pJREFUOE+F0n84FHYcB3CWSsL9ojo/6ik64c6PnTjmSS0limmrpBm2G002y++xzXRz6zE0R4nbw+RnTj/WD4sbanLkkAe55ccYlyNme4SrO9u9d13PI3/saZ+/vs/3831ez+f9eb5aWsuqy2mjRYeNUa7YmtjfTico7jNJ8z0eG24NB9vvnDrvufzpq89Npnr8VjMddNmuRh9rDfp36mFg91oM7qPIc5JdbDJq3An/JfCu7Hl53W2lpS220pP2OuniN299jAYbYizSENIoAgbCTdrTKtxOJVdvGo8psUwKy7Vxe4ez1YEVudGP8YEZzyveInFJ6mZRHHqYazDspw/pJwTIuERM5JIwmUdGdyo9K7/BszGzzg6fXzZHGJ8KvzQqXKOpoIeZLjofWR++BPWyCEnPY4xFGEKWQcLjMjKmr1MwfcMYwmz/Y4KOgNki0V5k1dkjUWCK93Kp2PMFFawos8cm1gZ2GqjLXktL4mbQPHLQ4B9ZDFE5+S356fQlyuJMqzH++HnTo6ui2OO1ko9Ul+4fxfd3d4F7k4YTReqpuFS88bGZUE2QNNDobuIq8Q5CduHb7lFJaTnvnym9ergjMWD/FG8zf+aKS3G9JO5C01Asah6wUXrvALKEDoitMMHhDKrKJdg8RU2s0EB2EWWur8dd7PDPFv6dUC0Gv3kAN36VPRGP/5k5NS6lljWxG0TDiSr1VKhoPwhevRMSqkwRxDObc/DavGtpP6zoi8XOyZfhnyNEvKANBU0P8VPfI/wyNCGXSn7wlEmyA9KrgmOKGth3eDVvPfyywq2dnUEv2R9qG2rLsH7xJXziKnWcI8tlTvEC7Mu8hROlImTU9aKqcwQ1vWOihWFu+sJknmph5CvxQh87c7bNh/NXo03hrMCosyvLmMNgMF7TQL6J1dsZIUVwjKqEO+cajp5vxPN439U/gKBt8PTcYHzL/BgHCyOf4unAISj6mFC2bYC82kB5Ls460NHRUVsDeYSXpGw7UgC7sAtwShDgzdM38W7BbURXtqpqhfmB8sEQuXwoCM/6faGQuGCxyxyKWhIm+PrSD495WL3cT0hhi8Whc3NbAs9KaOyCTvrJ8qkdX19XBeTUDU00+55USFzVU2yHstcaix0mUAjJkJeuRU868Ucmk0lcguiBnMAVxjbbdHV1yeq8+u4Hgo22huSG+iQXp83ftaxW3lsPZcs6KG5T8OwaAfJiPcxlrVRVRhvF02i0F/t5VbHZ7JWDfErKTLnhE3mFPuRFepg/uxqz6TqLv6euGj3ut87t/4ylvre3t3ZehOWWO1zjSFEqMVP4GfGb/DBykJcjmaZOoLsc+hcVY/LaAgcTQAAAAABJRU5ErkJggg==', + 'OpenBSD': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AoYAykIPu64pQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADTklEQVQ4y32RXUxTdxjGn3N6eujoKT3SUkuk3VoBGfVjgFXAsZ7WkipyYXQbuu3CzUXZmGRbssnFEseFkWzgcGzGXky9MWL8TsC4IeFgtK4oAqOnG5vMVl1pCMVWQD7b/y5M6jLdflfvxfPked/nBQA0NDSChqnGVrLuGkES742NhJAdhAKAuk9yyUs5Gry7RQMZAARCWgivpQiPe71P5DUfH0xaqTL7m/iiLkJmphawa+e4SM2PvUyC4yUIBu8CnAQKAK53rCA5OUtQtStVpJ4Gw/FOBddZVKhCfq4MP4n6+at+DUsJm/e0G9JZzYEvI2tHwlEYjDxomkZ+3nG8WroRtHihZVOhVlorDQzh0okhcByDP4ZGcf+X9XAsvY5/RsBa7Kq5H/CqLctKyl/g08S2i6fq8W/MS3P34T9wNDVYSeDX1eTD9xhiLXbtB/Akwmmv6Kr+ICFkLpGhtNSM3qsSstS3oX8lSsmsxS6ZVn3j6PvVVqhUcvC8AtPxVPxwygVKvngN89WOjgVprggGA4eenjB4nsXsTASpC63I0wVTZYPR11FoKRB8Ax54PCFk6BhMTk5CPR3GSbHouGzknr/bYFq9EAvfc9Tu1sLjHcXNKxLuTOTgzOlOe7IHBc/beAXWpWmXlz8a84nhcLQ+ecVzsAEQrMWuMX+f9HZF2YPZ28FVSNfoPWqOzMUmqYMAJm7+/OOzXQFwHGpyEV+vi+yvtxBC9pDmpgJC4tvI3mo9GTitIxvW24nT7ug67HY/3eDs2bbyrVsrY2day70rV6kRfDAHk5lDLJqAmmeRiD9GJDKHvwb74R8G0mkTPjrQTTG122xkTTbwaV2b1H4u16JQKXGr7yG2b8/H1MQ09IsTSEmRwzf4CCwzD+dmE1re8CI7wwi5XNlFf9vaTXX4dWJg4LLl7h05fpNGwNAMWpp9CIVYNO/tRCzGwpDFQaVMQTS2CKY0BWr3GVGWNSXKACDDaA4Mh976pq9f5Sy09GgKlmeAMIBKzUKpU+BFoxJecRhUfAbMxDi4eADfHVmE79v7q575gvvYeVvjZ58LD5mwsKUyX0hnf0feslnQCWD4zxnc6reKisxsfH2oscqcmTmK/+Ow252cna7K52r+Bky6PqmoT5HBAAAAAElFTkSuQmCC', + 'Gnu': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AoYAywUV5gQrwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADcElEQVQ4y43Tb0jjBRzH8c9v+7nNMebcUW21Cc78g/wcuhByIScoMRwoTBmFlZCmIJ14axqkgoYIkXIqKIVBEuJNUBEUPRlpqDC3Q2Ex0nTezun2YOaPLXNIv7Vvj7zgiOj1+PPk/eADjuNEuHN6ekqMw+H4IzMz8xChUCjV1NT0JbO7uxtfXFy8NZvNr21tbd0AAEQikY6I0m1tbQbx2NjYZiqV+vn29jY+PDw8xhYWFj45PDzcb25uhlQqfSTief6X0dFRpqKigvF4PPPipaWlY7lcXhCLxXJnZmY+ZTY2NnzX19ePGxsbHw0MDLivrq5mc3Jy2pPJZLVWq/2cdbvdDSzLholoNJ1OMy6Xq0Ymk5HNZktOTU29qMgA8HYqlaKDgwNKp9M0PT09BgAM/iGuqqoimUx2yPP8U5/P9wEAMB0dHRUKheJHiUTyeGhoqAUAnE7nR0qlsjcQCLwjlsvlz+bm5mQWi0VSWlr6bXV1tU6hUMj6+/vfN5lMN0xxcfG1zWZ7SETTSqWSGhoamPHxcajV6s+8Xu9Xou7u7t9VKtW00+mkSCTC6PV6aDQa8Dw/Wl9fP8UAQCgUosvLSyovL2eWl5dRUFBw7Ha7v9vc3By5K3g1EAg8FQSBiIguLi4IgBwA2LtEjuPuJxKJ62AwKFpdXf0eQBIvYVmW/cLlchEAWK1WAADT09NzX6PR/OTz+eKVlZUzKpVqTyqVvsnzfLCkpGSrtrb2t97eXnFeXl5ZKpWyZ2RkPPP7/UUnJyefGI3GU+zt7aU4jotOTk7mAUBfX1+b1Wq9kcvlBIAcDgctLCyQxWKhoqIi6uzs/BoAVlZW3qqpqbllZmdnf1hfX//Q4/HEzWbzX+3t7fcMBgMFg0EYjUYmEolAEAREo1Hk5+fT+fk5Mzg4GD86OpJ0dXXJGQBoaWl5Ra/XP6yrq3tQVlam2N7ehslkAsuySCaTUKvVSCQS2NnZSXAcJxYEQTEyMvKeIAhLDADY7fZ7BoPhm6ysLFpbWzuan5//WKvVvsHzPEWjUSYSiSA3N5d0Oh0TjUaf+/1+S2Nj46/4FwYAr7e2tnbF4/E/iYjC4TCFw+F0LBaj/f19mpiYeID/IAagAyABYLXb7cLZ2Rml02nyer3POY6rwv8hEr34u0IkEk1mZ2cTgGMA7768/RtL5JKsGzrLIgAAAABJRU5ErkJggg==', + 'CrunchBang': 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAQCAQAAAC45EetAAAA8ElEQVR4XnWOsUpCYQBGz1TIHYu2Qix6g0DEtSeQu/UIISJtUS8gJq61F1wcdMohcBDxKUR8hsz1xA/y44/cs3znbB+RJ0Skl3pSkeFQbUs79VAPzrwPFRmN1Ja0Ug/16I93+1oi4lKte+zMXv32WuoAm43lXMrqzbFncgWw21lORf4+/PREKpAhYqZuPXZ+T/3yXbZEajV1JavUQ104sRcq0myqc5mnHurWqc/7yhExVwuPncl+C4Bu13L60ueAwcByOtLhgAIRCzU38fRGTmSxUBvSSD3Ui1NvQkXWa7Uq1dRD9R17HiqyRUSy1NP6B7e1Yu2GtlUKAAAAAElFTkSuQmCC', + 'Yuno': 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAABDtJREFUOE+FlHtMm1UYxrtsi8aEgCb+oTFmZur+WNS5RaPERU10C2qGaBgb6hgwLwMmHTIKlIKlQIHSQrmU24BSSmnpBVooUmihtEC5yKWDjVu5uOkcEca4lG5E93j6EQmELX7Jky/fOed9fu973vMdGu0xT3Cgz57yXMZLDdXcy821PFWLKmuA6HqLMqtLX5POl4iYb2ukWW8IOOFe/qfe3/M4n0eOjwyZD8//bldODOk37N1yDJgl+LVdjEGLFKO9KkzZm8hbje7mIrTXZ7sMtTydrJh15H8hHW11XvN/jGS7VudcD5w34ZZzeQYb67fwYO03LN4exo1+LWzNxbA05O5QuzbHqRYn+++CHDx4YK9WLfaedfQzV5em54g5Zbi8OIml+VFMDLWQ7GXoaSmFWZsDZVGCO2u0EbkhHTrhFqi9PmelSsQ8tAtSVch60dpUeGe4kxgZxegzVkBzlQ2NKBG2+iJIMqMok9r8OLRIMqApToSqmAWTmk9B2+o2YW79oshU7ABcuvAFrVGWXkVKpBYoSaBSxIS2mINpiwbjZiUMZRloVfJQyaXDKObBpimBScpHFe8KmmXpaKhK3arGrBVuVBclHN2CiPNin1OVs1tVJYlQlyZBxA6DviQVo6ZaOKd7sTplw53BVugruBBzfsRslw7rZPxaczWutSpQV/gzJPxo1JexyfaxKBBpuiEx+tw+CpKdEvGWTprGlhcwqbIzL5/DYKMYndpK3L1hxf3ZfkrzwybUZjPhnOqmvlcmutFF1jis9QSShOrcWNSXJ1MA0ou/NZWc8Ddfe4VGO3bk0JON1dyMMlK+gmxNrZCFhZF2Kng7YNO0awt4b7wLNp2EqtAsF6ImP56SG0B6siovTYpIjg15gapCVhAfJRUyIBFEo6k8AyuTtkcC/qvG/XbDexulWJvqgYH0o0nKhVHFJ40XwFQnWM5OCX+XMg86c3KvVMSMapCmPpSTIygTxGKZZOcOXhrr3Mp4uzkFuG6B3ajE3TELDDU8qEmsmvRATxquKkxAnSTFjwKEfv3JU9JC5unG6rQ1bTkbQ4Yq/DVgxOqwBWt2K9Yne3ZCZvrgHO2k5paHzOhSiVCZSkdNTgzy40JRlPgDhDHBCxUZdCs91G8fLeK87zOl6XSOICZYXMGNhDqX9fDP/mbK2DXVi/szm03eLpejl5pzOfqwOt4JBT8OeYwQt/4R/BR0OzXiLCM5LOCji/4nXt46rpywgG+zor5RxgSdupBzJdglSY+5ZZbl3XNY6mbn7W0Lcx06zBg1WBjtcC6OmG+OmRTrFrnIUZESZeVeCpwh8TpiPsQ47/tloM97T+/6m8mg55mT3tStyL54mhlwwtszNvjzD8/6HH8i7PvvPPRioZdRWuDBZUR6pEWG7I8P9Xs1Jsj36MfvvO5J/+rTw58dP7afJPfBgeef3XGz/gskFVpJc4HwGwAAAABJRU5ErkJggg==' + } + }; + + 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.callbacks.push({ + name: 'Comment Expansion', + cb: this.node + }); + }, + node: function() { + var a; + if (a = $('.abbr > a:not([onclick])', this.nodes.comment)) { + return $.on(a, 'click', ExpandComment.cb); + } + }, + callbacks: [], + cb: function(e) { + e.preventDefault(); + return ExpandComment.expand(Get.postFromNode(this)); + }, + 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; + status = req.status; + if (status !== 200 && status !== 304) { + 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; + for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { + callback = _ref1[_k]; + callback.call(post); + } + } + }; + + ExpandThread = { + init: function() { + if (g.VIEW !== 'index' || !Conf['Thread Expansion']) { + return; + } + this.statuses = {}; + return $.on(d, 'IndexRefresh', this.onIndexRefresh); + }, + setButton: function(thread) { + var a; + if (!(a = $.x('following-sibling::a[contains(@class,"summary")][1]', thread.OP.nodes.root))) { + return; + } + a.textContent = ExpandThread.text.apply(ExpandThread, ['+'].concat(__slice.call(a.textContent.match(/\d+/g)))); + return $.on(a, 'click', ExpandThread.cbToggle); + }, + onIndexRefresh: function() { + var status, thread, threadID, _ref, _ref1, _ref2; + _ref = ExpandThread.statuses; + for (threadID in _ref) { + status = _ref[threadID]; + if ((_ref1 = status.req) != null) { + _ref1.abort(); + } + delete ExpandThread.statuses[threadID]; + } + _ref2 = g.BOARD.threads; + for (threadID in _ref2) { + thread = _ref2[threadID]; + ExpandThread.setButton(thread); + } + }, + text: function(status, posts, files) { + return ("" + status + " " + posts + " post" + (posts > 1 ? 's' : '')) + (+files ? " and " + files + " image repl" + (files > 1 ? 'ies' : 'y') : "") + (" " + (status === '-' ? 'shown' : 'omitted') + "."); + }, + cbToggle: function(e) { + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + e.preventDefault(); + return ExpandThread.toggle(Get.threadFromNode(this)); + }, + toggle: function(thread) { + var a, threadRoot; + threadRoot = thread.OP.nodes.root.parentNode; + if (!(a = $('.summary', threadRoot))) { + return; + } + if (thread.ID in ExpandThread.statuses) { + return ExpandThread.contract(thread, a, threadRoot); + } else { + return ExpandThread.expand(thread, a, threadRoot); + } + }, + expand: function(thread, a, threadRoot) { + var status; + ExpandThread.statuses[thread] = status = {}; + a.textContent = ExpandThread.text.apply(ExpandThread, ['...'].concat(__slice.call(a.textContent.match(/\d+/g)))); + return status.req = $.cache("//a.4cdn.org/" + thread.board + "/res/" + thread + ".json", function() { + delete status.req; + return ExpandThread.parse(this, thread, a); + }); + }, + contract: function(thread, a, threadRoot) { + var filesCount, inlined, num, postsCount, replies, reply, status, _i, _len; + status = ExpandThread.statuses[thread]; + delete ExpandThread.statuses[thread]; + if (status.req) { + status.req.abort(); + if (a) { + a.textContent = ExpandThread.text.apply(ExpandThread, ['+'].concat(__slice.call(a.textContent.match(/\d+/g)))); + } + return; + } + replies = $$('.thread > .replyContainer', threadRoot); + if (Conf['Show Replies']) { + num = (function() { + if (thread.isSticky) { + return 1; + } else { + switch (g.BOARD.ID) { + case 'b': + case 'vg': + return 3; + case 't': + return 1; + default: + return 5; + } + } + })(); + replies = replies.slice(0, -num); + } + postsCount = 0; + filesCount = 0; + for (_i = 0, _len = replies.length; _i < _len; _i++) { + reply = replies[_i]; + if (Conf['Quote Inlining']) { + while (inlined = $('.inlined', reply)) { + inlined.click(); + } + } + postsCount++; + if ('file' in Get.postFromRoot(reply)) { + filesCount++; + } + $.rm(reply); + } + return a.textContent = ExpandThread.text('+', postsCount, filesCount); + }, + parse: function(req, thread, a) { + var data, filesCount, post, postData, posts, postsCount, postsRoot, root, _i, _len, _ref; + if ((_ref = req.status) !== 200 && _ref !== 304) { + a.textContent = "Error " + req.statusText + " (" + req.status + ")"; + return; + } + data = JSON.parse(req.response).posts; + Build.spoilerRange[thread.board] = data.shift().custom_spoiler; + posts = []; + postsRoot = []; + filesCount = 0; + for (_i = 0, _len = data.length; _i < _len; _i++) { + postData = data[_i]; + if (post = thread.posts[postData.no]) { + if ('file' in post) { + filesCount++; + } + postsRoot.push(post.nodes.root); + continue; + } + root = Build.postFromObject(postData, thread.board.ID); + post = new Post(root, thread, thread.board); + if ('file' in post) { + filesCount++; + } + posts.push(post); + postsRoot.push(root); + } + Main.callbackNodes(Post, posts); + $.after(a, postsRoot); + postsCount = postsRoot.length; + a.textContent = ExpandThread.text('-', postsCount, filesCount); + return Fourchan.parseThread(thread.ID, 1, postsCount); + } + }; + + FileInfo = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['File Info Formatting']) { + return; + } + this.funk = this.createFunc(Conf['fileInfo']); + return Post.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'; + } + } + } + }; + + Fourchan = { + init: function() { + var board; + if (g.VIEW === 'catalog') { + return; + } + board = g.BOARD.ID; + if (board === 'g') { + $.globalEval("window.addEventListener('prettyprint', function(e) {\n window.dispatchEvent(new CustomEvent('prettyprint:cb', {\n detail: prettyPrintOne(e.detail)\n }));\n}, false);"); + Post.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.callbacks.push({ + name: 'Parse /sci/ math', + cb: this.math + }); + } + }, + code: function() { + var apply, pre, _i, _len, _ref; + if (this.isClone) { + return; + } + apply = function(e) { + return pre.innerHTML = e.detail; + }; + $.on(window, 'prettyprint:cb', apply); + _ref = $$('.prettyprint:not(.prettyprinted)', this.nodes.comment); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + pre = _ref[_i]; + $.event('prettyprint', pre.innerHTML, window); + } + $.off(window, 'prettyprint:cb', apply); + }, + 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 + }); + } + }; + + IDColor = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Color User IDs']) { + return; + } + this.ids = {}; + return Post.callbacks.push({ + name: 'Color User IDs', + cb: this.node + }); + }, + node: function() { + var rgb, span, style, uid; + if (this.isClone || !(uid = this.info.uniqueID)) { + return; + } + span = $('.hand', this.nodes.uniqueID); + if (!(span && span.nodeName === 'SPAN')) { + return; + } + rgb = IDColor.compute(uid); + style = span.style; + style.color = rgb[3]; + style.backgroundColor = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; + $.addClass(span, 'painted'); + return span.title = 'Highlight posts by this ID'; + }, + compute: function(uid) { + var hash, rgb; + if (IDColor.ids[uid]) { + return IDColor.ids[uid]; + } + hash = IDColor.hash(uid); + rgb = [(hash >> 24) & 0xFF, (hash >> 16) & 0xFF, (hash >> 8) & 0xFF]; + rgb[3] = (rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114) > 125 ? '#000' : '#fff'; + return this.ids[uid] = rgb; + }, + hash: function(uid) { + var i, msg; + msg = 0; + i = 0; + while (i < 8) { + msg = (msg << 5) - msg + uid.charCodeAt(i++); + } + return msg; + } + }; + + InfiniScroll = { + init: function() { + if (!(Conf['Infinite Scrolling'] && g.VIEW === 'index' && g.BOARD !== 'f')) { + return; + } + this.threads = g.threads; + return $.on(d, '4chanXInitFinished', this.ready); + }, + ready: function() { + $.off(d, '4chanXInitFinished', InfiniScroll.ready); + $.on(d, 'scroll', InfiniScroll.scroll); + return InfiniScroll.scroll(); + }, + scroll: $.debounce(100, function() { + var url; + if (InfiniScroll.isFetching || ((d.body.scrollTop || doc.scrollTop) <= doc.scrollHeight - (300 + window.innerHeight))) { + return; + } + if (InfiniScroll.isDead) { + return InfiniScroll.notice(); + } + if (InfiniScroll.cache && InfiniScroll.cache.time > Date.now() - $.MINUTE) { + return InfiniScroll.parse(InfiniScroll.cache); + } + new Notice('info', "Fetching next page.", 2); + InfiniScroll.isFetching = true; + url = "//api.4chan.org/" + g.BOARD + "/catalog.json"; + return $.ajax(url, { + onloadend: InfiniScroll.cb.load + }, { + whenModified: true + }); + }), + parse: function(response) { + var botPostForm, el, nodes, omitted_images, omitted_posts, op, post, postlink, posts, replylink, thread, threadID, threadNodes, threads, _i, _j, _len, _len1, _ref; + threads = InfiniScroll.parsePages(response); + threadNodes = []; + nodes = []; + if (!threads.length) { + InfiniScroll.notice(); + return InfiniScroll.isDead = true; + } + for (_i = 0, _len = threads.length; _i < _len; _i++) { + thread = threads[_i]; + posts = []; + omitted_posts = thread.omitted_posts, omitted_images = thread.omitted_images; + threadID = thread.no; + el = $.el('div', { + className: 'thread', + id: "t" + threadID + }); + op = Build.postFromObject(thread, g.BOARD); + posts.push(op); + replylink = $.el('a', { + href: "res/" + threadID, + className: 'replylink', + textContent: 'Reply' + }); + postlink = $.el('div', { + className: "postLink mobile", + innerHTML: "View Thread" + }); + if (omitted_posts) { + posts.push($.el('span', { + className: 'summary desktop', + innerHTML: "" + omitted_posts + " posts " + (omitted_images ? "and " + omitted_images + " image replies" : void 0) + " omitted. Click here to view." + })); + $.prepend(postlink, $.el('span', { + className: 'info', + innerHTML: "" + omitted_posts + " posts omitted" + (omitted_images ? "
(" + omitted_images + " have images)" : "") + })); + } + $.add($('.postInfo', op), [$.tn('\u00A0\u00A0\u00A0['), replylink, $.tn(']\u00A0')]); + $.add(op, postlink); + if (thread.last_replies) { + _ref = thread.last_replies; + for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { + post = _ref[_j]; + posts.push(Build.postFromObject(post, g.BOARD)); + } + } + $.add(el, posts); + threadNodes.push(el); + nodes.push(el); + nodes.push($.el('hr')); + } + InfiniScroll.features(threadNodes); + if (botPostForm = $('.board > .mobile.center')) { + return $.before(botPostForm, nodes); + } + }, + parsePages: function(response) { + var newThreads, number, page, pages, thread, threads, _i, _len; + pages = JSON.parse(response); + newThreads = []; + for (number in pages) { + page = pages[number]; + if (!(pages.hasOwnProperty(number))) { + continue; + } + threads = page.threads; + for (_i = 0, _len = threads.length; _i < _len; _i++) { + thread = threads[_i]; + if (g.threads["" + g.BOARD + "." + thread.no]) { + continue; + } + newThreads.push(thread); + if (newThreads.length === 15) { + return newThreads; + } + } + } + return newThreads; + }, + features: function(threadNodes) { + var err, errors, post, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref; + posts = []; + threads = []; + for (_i = 0, _len = threadNodes.length; _i < _len; _i++) { + threadRoot = threadNodes[_i]; + thread = new Thread(+threadRoot.id.slice(1), g.BOARD); + threads.push(thread); + _ref = $$('.thread > .postContainer', threadRoot); + for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { + post = _ref[_j]; + try { + posts.push(new Post(post, thread, g.BOARD)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + (postRoot.id.match(/\d+/)) + " failed. Post will be skipped.", + error: err + }); + } + } + } + if (errors) { + Main.handleErrors(errors); + } + Main.callbackNodes(Thread, threads); + return Main.callbackNodes(Post, posts); + }, + notice: (function() { + var notify, reset; + notify = false; + reset = function() { + return notify = false; + }; + return function() { + if (notify) { + return; + } + notify = true; + new Notice('info', "Last page reached.", 2); + return setTimeout(reset, 3 * $.SECOND); + }; + })(), + cb: { + load: function() { + InfiniScroll.isFetching = false; + if (this.status !== 200) { + return; + } + InfiniScroll.cache = new String(this.response); + InfiniScroll.cache.time = Date.now(); + return InfiniScroll.parse(this.response); + } + } + }; + + Keybinds = { + init: function() { + var hotkey, init; + if (g.VIEW === 'catalog' || !Conf['Keybinds']) { + return; + } + for (hotkey in Conf.hotkeys) { + $.sync(hotkey, Keybinds.sync); + } + 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); + }, + sync: function(key, hotkey) { + return Conf[hotkey] = key; + }, + keydown: function(e) { + var key, notification, notifications, op, target, thread, threadRoot, _i, _len, _ref; + if (!(key = Keybinds.keyCode(e))) { + return; + } + target = e.target; + if ((_ref = target.nodeName) === 'INPUT' || _ref === 'TEXTAREA') { + if (!/(Esc|Alt|Ctrl|Meta|Shift\+\w{2,})/.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['Toggle header']: + Header.toggleBarVisibility(); + 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 (Settings.dialog) { + 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) { + if (Conf['Persistent QR']) { + QR.hide(); + } else { + 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['Toggle sage']: + if (QR.nodes) { + Keybinds.sage(); + } + break; + case Conf['Submit QR']: + if (QR.nodes && !QR.status()) { + QR.submit(); + } + break; + case Conf['Update']: + switch (g.VIEW) { + case 'thread': + ThreadUpdater.update(); + break; + case 'index': + Index.update(); + } + break; + case Conf['Watch']: + ThreadWatcher.toggle(thread); + break; + case Conf['Expand image']: + Keybinds.img(threadRoot); + break; + case Conf['Expand images']: + Keybinds.img(threadRoot, true); + break; + case Conf['Open Gallery']: + Gallery.cb.toggle(); + break; + case Conf['fappeTyme']: + FappeTyme.cb.toggle.call({ + name: 'fappe' + }); + break; + case Conf['werkTyme']: + FappeTyme.cb.toggle.call({ + name: 'werk' + }); + break; + case Conf['Front page']: + if (g.VIEW === 'index') { + Index.userPageNav(0); + } else { + window.location = "/" + g.BOARD + "/"; + } + break; + case Conf['Open front page']: + $.open("/" + g.BOARD + "/"); + break; + case Conf['Next page']: + if (!(g.VIEW === 'index' && Conf['Index Mode'] !== 'all pages')) { + return; + } + $('.next button', Index.pagelist).click(); + break; + case Conf['Previous page']: + if (!(g.VIEW === 'index' && Conf['Index Mode'] !== 'all pages')) { + return; + } + $('.prev button', Index.pagelist).click(); + break; + case Conf['Search form']: + Index.searchInput.focus(); + break; + case Conf['Open catalog']: + if (Conf['External Catalog']) { + window.location = CatalogLinks.external(g.BOARD.ID); + } else { + window.location = "/" + g.BOARD + "/catalog"; + } + break; + case Conf['Next thread']: + if (g.VIEW !== 'index') { + return; + } + Nav.scroll(+1); + break; + case Conf['Previous thread']: + if (g.VIEW !== 'index') { + 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['Deselect reply']: + Keybinds.hl(0, threadRoot); + break; + case Conf['Hide']: + if (ThreadHiding.db) { + ThreadHiding.toggle(thread); + } + break; + case Conf['Previous Post Quoting You']: + QuoteYou.cb.seek('preceding'); + break; + case Conf['Next Post Quoting You']: + QuoteYou.cb.seek('following'); + 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)); + } + QR.nodes.com.focus(); + if (Conf['QR Shortcut']) { + return $.rmClass($('.qr-shortcut'), 'disabled'); + } + }, + 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); + }, + sage: function() { + var isSage; + isSage = /sage/i.test(QR.nodes.email.value); + return QR.nodes.email.value = isSage ? "" : "sage"; + }, + 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 axis, height, next, postEl, replies, reply, root, _i, _len; + postEl = $('.reply.highlight', thread); + if (!delta) { + if (postEl) { + $.rmClass(postEl, 'highlight'); + } + return; + } + if (postEl) { + height = postEl.getBoundingClientRect().height; + if (Header.getTopOf(postEl) >= -height && Header.getBottomOf(postEl) >= -height) { + root = postEl.parentNode; + axis = delta === +1 ? 'following' : 'preceding'; + if (!(next = $.x("" + axis + "-sibling::div[contains(@class,'replyContainer') and not(@hidden) and not(child::div[@class='stub'])][1]/child::div[contains(@class,'reply')]", root))) { + return; + } + Header.scrollToIfNeeded(next, delta === +1); + this.focus(next); + $.rmClass(postEl, 'highlight'); + return; + } + $.rmClass(postEl, 'highlight'); + } + replies = $$('.reply', thread); + if (delta === -1) { + replies.reverse(); + } + for (_i = 0, _len = replies.length; _i < _len; _i++) { + reply = replies[_i]; + if (delta === +1 && Header.getTopOf(reply) > 0 || delta === -1 && Header.getBottomOf(reply) > 0) { + 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() { + var thread, threadRoot, _i, _len, _ref; + _ref = $$('.thread'); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + threadRoot = _ref[_i]; + thread = Get.threadFromRoot(threadRoot); + if (thread.isHidden && !thread.stub) { + continue; + } + if (Header.getTopOf(threadRoot) >= -threadRoot.getBoundingClientRect().height) { + return threadRoot; + } + } + return $('.board'); + }, + scroll: function(delta) { + var axis, next, thread, top; + thread = Nav.getThread(); + axis = delta === +1 ? 'following' : 'preceding'; + if (next = $.x("" + axis + "-sibling::div[contains(@class,'thread') and not(@hidden)][1]", thread)) { + top = Header.getTopOf(thread); + if (delta === +1 && top < 5 || delta === -1 && top > -5) { + thread = next; + } + } + return Header.scrollTo(thread); + } + }; + + RelativeDates = { + INTERVAL: $.MINUTE / 2, + init: function() { + switch (g.VIEW) { + case 'index': + this.flush(); + $.on(d, 'visibilitychange', this.flush); + if (!Conf['Relative Post Dates']) { + return; + } + break; + case 'thread': + if (!Conf['Relative Post Dates']) { + return; + } + this.flush(); + if (g.VIEW === 'thread') { + $.on(d, 'visibilitychange ThreadUpdate', this.flush); + } + break; + default: + return; + } + return Post.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.update(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 data, now, _i, _len, _ref; + if (d.hidden) { + return; + } + now = new Date(); + _ref = RelativeDates.stale; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + RelativeDates.update(data, now); + } + RelativeDates.stale = []; + clearTimeout(RelativeDates.timeout); + return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); + }, + update: function(data, now) { + var date, diff, isPost, relative, singlePost, _i, _len, _ref; + isPost = data instanceof Post; + date = isPost ? data.info.date : new Date(+data.dataset.utc); + now || (now = new Date()); + diff = now - date; + relative = RelativeDates.relative(diff, now, date); + if (isPost) { + _ref = [data].concat(data.clones); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + singlePost = _ref[_i]; + singlePost.nodes.date.firstChild.textContent = relative; + } + } else { + data.firstChild.textContent = relative; + } + return RelativeDates.setOwnTimeout(diff, data); + }, + setOwnTimeout: function(diff, data) { + 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(RelativeDates.markStale, delay, data); + }, + markStale: function(data) { + if (__indexOf.call(RelativeDates.stale, data) >= 0) { + return; + } + if (data instanceof Post && !g.posts[data.fullID]) { + return; + } + return RelativeDates.stale.push(data); + } + }; + + RemoveSpoilers = { + init: function() { + if (Conf['Reveal Spoilers'] && !Conf['Remove Spoilers']) { + $.addClass(doc, 'reveal-spoilers'); + } + if (!Conf['Remove Spoilers']) { + return; + } + if (Conf['Reveal Spoilers']) { + this.wrapper = function(text) { + return "[spoiler]" + text + "[/spoiler]"; + }; + } + return Post.callbacks.push({ + name: 'Reveal Spoilers', + cb: this.node + }); + }, + wrapper: function(text) { + return text; + }, + node: function(post) { + var spoiler, spoilers, _i, _len; + spoilers = $$('s', this.nodes.comment); + for (_i = 0, _len = spoilers.length; _i < _len; _i++) { + spoiler = spoilers[_i]; + $.replace(spoiler, $.tn(RemoveSpoilers.wrapper(spoiler.textContent))); + } + } + }; + + Report = { + init: function() { + if (!/report/.test(location.search)) { + return; + } + return $.asap((function() { + return $.id('recaptcha_response_field'); + }), Report.ready); + }, + ready: function() { + var field; + 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 this.submit(); + }); + } + }; + + Time = { + init: function() { + if (g.VIEW === 'catalog' || !Conf['Time Formatting']) { + return; + } + this.funk = this.createFunc(Conf['time']); + return Post.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().toString().slice(2); + }, + Y: function() { + return this.getFullYear(); + } + } + }; + + Settings = { + init: function() { + var link, settings; + link = $.el('a', { + className: 'settings-link fa fa-wrench', + textContent: 'Settings', + href: 'javascript:;' + }); + $.on(link, 'click', Settings.open); + Header.addShortcut(link); + $.get('previousversion', null, function(item) { + var changelog, el, previous; + if (previous = item['previousversion']) { + if (previous === g.VERSION) { + return; + } + changelog = 'https://github.com/Spittie/4chan-x/blob/master/CHANGELOG.md'; + el = $.el('span', { + innerHTML: "4chan X has been updated to version " + g.VERSION + "." + }); + if (Conf['Show Updated Notifications']) { + new Notice('info', el, 30); + } + } else { + $.on(d, '4chanXInitFinished', Settings.open); + } + return $.set('previousversion', g.VERSION); + }); + Settings.addSection('Main', Settings.main); + Settings.addSection('Filter', Settings.filter); + Settings.addSection('Sauce', Settings.sauce); + Settings.addSection('Advanced', Settings.advanced); + Settings.addSection('Keybinds', Settings.keybinds); + $.on(d, 'AddSettingsSection', Settings.addSection); + $.on(d, 'OpenSettings', function(e) { + return Settings.open(e.detail); + }); + 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 = "
"; + Settings.overlay = overlay = $.el('div', { + id: 'overlay' + }); + Settings.dialog = dialog = $.el('div', { + id: 'fourchanx-settings', + className: 'dialog', + innerHTML: html + }); + $.on($('.export', Settings.dialog), 'click', Settings["export"]); + $.on($('.import', Settings.dialog), 'click', Settings["import"]); + $.on($('input', Settings.dialog), 'change', Settings.onImport); + 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); + $.add(d.body, [overlay, dialog]); + return $.event('OpenSettings', null, dialog); + }, + close: function() { + if (!Settings.dialog) { + return; + } + $.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); + section.scrollTop = 0; + return $.event('OpenSettings', null, section); + }, + main: function(section) { + var arr, button, description, div, fs, hiddenNum, input, inputs, items, key, obj, _ref; + 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. Reload 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, _ref; + if (typeof now !== 'number') { + now = Date.now(); + data = { + version: g.VERSION, + date: now + }; + _ref = DataBoard.keys; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + db = _ref[_i]; + Conf[db] = { + boards: {} + }; + } + $.get(Conf, function(Conf) { + delete Conf['archives']; + 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 = $('.imp-exp-result'); + 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. Reload 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 Tab Icon': 'Unread Favicon', + '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', + 'Reply Hiding': 'Reply Hiding Buttons', + 'Thread Hiding': 'Thread Hiding Buttons', + '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) { + 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; + } + if (data.Conf['WatchedThreads']) { + data.Conf['watchedThreads'] = { + boards: ThreadWatcher.convert(data.Conf['WatchedThreads']) + }; + delete data.Conf['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 = "
"; + 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.

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

    You can use these settings with each regular expression, separate them with semicolons:
  • Per boards, separate them with commas. It is global if not specified.
    For example: boards:a,jp;.
  • Filter OPs only along with their threads (`only`), replies only (`no`), or both (`yes`, this is default).
    For example: op:only;, op:no; or op:yes;.
  • Overrule the `Show Stubs` setting if specified: create a stub (`yes`) or not (`no`).
    For example: stub:yes; or stub:no;.
  • Highlight instead of hiding. You can specify a class name to use with a userstyle.
    For example: highlight; or highlight:wallpaper;.
  • Highlighted OPs will have their threads put on top of the board index by default.
    For example: top:yes; or top:no;.
"; + }, + sauce: function(section) { + var ta; + section.innerHTML = "
Sauce is disabled.
Lines starting with a # will be ignored.
You can specify a display text by appending ;text:[text] to the URL.
    These parameters will be replaced by their corresponding values:
  • %TURL: Thumbnail URL.
  • %URL: Full image URL.
  • %MD5: MD5 hash.
  • %board: Current board.
"; + ta = $('textarea', section); + $.get('sauces', Conf['sauces'], function(item) { + return ta.value = item['sauces']; + }); + return $.on(ta, 'change', $.cb.value); + }, + advanced: function(section) { + var archive, boardID, boardOptions, boardSelect, boards, data, event, input, inputs, item, items, name, row, rows, ta, table, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2, _ref3, _ref4; + section.innerHTML = "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Disabled selections indicate that only one archive is available for that board and redirection type.
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Quick Reply Personas is disabled.

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

    You can use these settings with each item, separate them with semicolons:
  • Possible items are: name, email, subject and password.
  • Wrap values of items with quotes, like this: email:\"sage\".
  • Force values as defaults with the always keyword, for example: email:\"sage\";always.
  • Select specific boards for an item, separated with commas, for example: email:\"sage\";boards:jp;always.
Unread Favicon is disabled.
Emoji is disabled.
Sage Icon:
Position:
Thread Updater is disabled.
Interval:
"; + items = {}; + inputs = {}; + _ref = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'sageEmoji', 'emojiPos', '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 = name === 'favicon' || name === 'usercss' || name === 'sageEmoji' || name === 'emojiPos' ? 'change' : 'input'; + $.on(input, event, $.cb.value); + } + ta = $('.personafield', section); + $.get('QR.personas', Conf['QR.personas'], function(item) { + return ta.value = item['QR.personas']; + }); + $.on(ta, 'change', $.cb.value); + $.get(items, function(items) { + var key, val; + for (key in items) { + val = items[key]; + if (key === 'emojiPos') { + continue; + } + input = inputs[key]; + input.value = val; + if (key === 'usercss') { + continue; + } + $.on(input, event, Settings[key]); + Settings[key].call(input); + } + }); + $.on($('input[name=Interval]', section), 'change', ThreadUpdater.cb.interval); + $.on($('input[name="Custom CSS"]', section), 'change', Settings.togglecss); + $.on($.id('apply-css'), 'click', Settings.usercss); + boards = {}; + _ref1 = Redirect.archives; + for (name in _ref1) { + archive = _ref1[name]; + _ref2 = archive.boards; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + boardID = _ref2[_j]; + data = boards[boardID] || (boards[boardID] = { + thread: [], + post: [], + file: [] + }); + data.thread.push(name); + if (archive.software === 'foolfuuka') { + data.post.push(name); + } + if (__indexOf.call(archive.files, boardID) >= 0) { + data.file.push(name); + } + } + } + rows = []; + boardOptions = []; + _ref3 = Object.keys(boards).sort(); + for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { + boardID = _ref3[_k]; + row = $.el('tr', { + className: "board-" + boardID + }); + row.hidden = boardID !== g.BOARD.ID; + boardOptions.push($.el('option', { + textContent: "/" + boardID + "/", + value: "board-" + boardID, + selected: boardID === g.BOARD.ID + })); + data = boards[boardID]; + _ref4 = ['thread', 'post', 'file']; + for (_l = 0, _len3 = _ref4.length; _l < _len3; _l++) { + item = _ref4[_l]; + $.add(row, Settings.addArchiveCell(boardID, data, item)); + } + rows.push(row); + } + $.add($('tbody', section), rows); + boardSelect = $('#archive-board-select', section); + $.add(boardSelect, boardOptions); + table = $.id('archive-table'); + $.on(boardSelect, 'change', function() { + $('tbody > :not([hidden])', table).hidden = true; + return $("tbody > ." + this.value, table).hidden = false; + }); + $.get('selectedArchives', Conf['selectedArchives'], function(_arg) { + var option, selectedArchives, type; + selectedArchives = _arg.selectedArchives; + for (boardID in selectedArchives) { + data = selectedArchives[boardID]; + for (type in data) { + name = data[type]; + if (option = $("select[data-boardid='" + boardID + "'][data-type='" + type + "'] > option[value='" + name + "']", section)) { + option.selected = true; + } + } + } + }); + }, + addArchiveCell: function(boardID, data, type) { + var archive, i, length, options, select, td; + length = data[type].length; + td = $.el('td', { + className: 'archive-cell' + }); + if (!length) { + td.textContent = '--'; + return td; + } + options = []; + i = 0; + while (i < length) { + archive = data[type][i++]; + options.push($.el('option', { + textContent: archive, + value: archive + })); + } + td.innerHTML = ''; + select = td.firstElementChild; + if (!(select.disabled = length === 1)) { + select.setAttribute('data-boardid', boardID); + select.setAttribute('data-type', type); + $.on(select, 'change', Settings.saveSelectedArchive); + } + $.add(select, options); + return td; + }, + saveSelectedArchive: function() { + var _this = this; + return $.get('selectedArchives', Conf['selectedArchives'], function(_arg) { + var selectedArchives, _name; + selectedArchives = _arg.selectedArchives; + (selectedArchives[_name = _this.dataset.boardid] || (selectedArchives[_name] = {}))[_this.dataset.type] = _this.value; + return $.set('selectedArchives', selectedArchives); + }); + }, + 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 = this.value.replace(/%id/, '123456789'); + }, + fileInfo: function() { + var data, funk; + data = { + isReply: true, + file: { + URL: '//i.4cdn.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 Favicon']) { + Unread.update(); + } + return this.nextElementSibling.innerHTML = "\n\n\n"; + }, + sageEmoji: function() { + return this.nextElementSibling.innerHTML = ""; + }, + 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.
Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
Press Backspace to disable a keybind.
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); + } + }; + + Main = { + init: function() { + var db, flatten, pathname, _i, _len, _ref, _ref1; + pathname = location.pathname.split('/'); + g.BOARD = new Board(pathname[1]); + if ((_ref = g.BOARD.ID) === 'z' || _ref === 'fk') { + return; + } + 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]; + } + 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); + _ref1 = DataBoard.keys; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + db = _ref1[_i]; + Conf[db] = { + boards: {} + }; + } + Conf['selectedArchives'] = {}; + Conf['CachedTitles'] = []; + $.get(Conf, function(items) { + $.extend(Conf, items); + return Main.initFeatures(); + }); + return $.on(d, '4chanMainInit', Main.initStyle); + }, + initFeatures: function() { + var init; + switch (location.hostname) { + case 'a.4cdn.org': + return; + case 'sys.4chan.org': + Report.init(); + return; + case 'i.4cdn.org': + $.ready(function() { + var URL, pathname, _ref; + if (Conf['404 Redirect'] && ((_ref = d.title) === '4chan - Temporarily Offline' || _ref === '4chan - 404 Not Found')) { + Redirect.init(); + pathname = location.pathname.split('/'); + URL = Redirect.to('file', { + boardID: g.BOARD.ID, + filename: pathname[pathname.length - 1] + }); + if (URL) { + return location.replace(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, + 'Redirect': Redirect, + 'Header': Header, + 'Catalog Links': CatalogLinks, + 'Settings': Settings, + 'Index Generator': Index, + 'Announcement Hiding': PSAHiding, + 'Fourchan thingies': Fourchan, + 'Emoji': Emoji, + 'Color User IDs': IDColor, + 'Custom CSS': CustomCSS, + 'Linkify': Linkify, + 'Reveal Spoilers': RemoveSpoilers, + 'Resurrect Quotes': Quotify, + 'Filter': Filter, + 'Thread Hiding Buttons': ThreadHiding, + 'Reply Hiding Buttons': 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, + 'Fappe Tyme': FappeTyme, + 'Gallery': Gallery, + 'Gallery (menu)': Gallery.menu, + 'Sauce': Sauce, + 'Image Expansion': ImageExpand, + 'Image Expansion (Menu)': ImageExpand.menu, + 'Reveal Spoiler Thumbnails': RevealSpoilers, + 'Image Loading': ImageLoader, + 'Image Hover': ImageHover, + 'Thread Expansion': ExpandThread, + 'Thread Excerpt': ThreadExcerpt, + 'Favicon': Favicon, + 'Unread': Unread, + 'Quote Threading': QuoteThreading, + 'Thread Stats': ThreadStats, + 'Thread Updater': ThreadUpdater, + 'Thread Watcher': ThreadWatcher, + 'Thread Watcher (Menu)': ThreadWatcher.menu, + 'Index Navigation': Nav, + 'Keybinds': Keybinds, + 'Show Dice Roll': Dice, + 'Banner': Banner + }); + $.on(d, 'AddCallback', Main.addCallback); + return $.ready(Main.initReady); + }, + initStyle: function() { + var mainStyleSheet, setStyle, style, styleSheets, _ref; + $.off(d, '4chanMainInit', Main.initStyle); + if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) { + return; + } + if ((_ref = $('link[href*=mobile]', d.head)) != null) { + _ref.disabled = true; + } + $.addClass(doc, 'blink'); + $.addClass(doc, 'fourchan-x'); + $.addClass(doc, 'seaweedchan'); + $.addClass(doc, g.VIEW); + $.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; + } + return new MutationObserver(setStyle).observe(mainStyleSheet, { + attributes: true, + attributeFilter: ['href'] + }); + }, + initReady: function() { + var err, href, passLink, styleSelector, _ref; + if ((_ref = d.title) === '4chan - Temporarily Offline' || _ref === '4chan - 404 Not Found') { + if (Conf['404 Redirect'] && g.VIEW === 'thread') { + href = Redirect.to('thread', { + boardID: g.BOARD.ID, + threadID: g.THREADID, + postID: +location.hash.match(/\d+/) + }); + location.replace(href || ("/" + g.BOARD + "/")); + } + return; + } + Main.initStyle(); + if (g.VIEW === 'thread') { + Main.initThread(); + } else { + $.event('4chanXInitFinished'); + } + if (styleSelector = $.id('styleSelector')) { + passLink = $.el('a', { + textContent: '4chan Pass', + href: 'javascript:;' + }); + $.on(passLink, 'click', function() { + return window.open('//sys.4chan.org/auth', 'This will steal your data.', 'left=0,top=0,width=500,height=255,toolbar=0,resizable=0'); + }); + $.before(styleSelector.previousSibling, [$.tn('['), passLink, $.tn(']\u00A0\u00A0')]); + } + try { + return localStorage.getItem('4chan-settings'); + } catch (_error) { + err = _error; + return new Notice('warning', 'Cookies need to be enabled on 4chan for 4chan X to operate properly.', 30); + } + }, + initThread: function() { + var err, errors, postRoot, posts, thread, threadRoot, _i, _len, _ref; + if (!(threadRoot = $('.thread'))) { + return; + } + thread = new Thread(+threadRoot.id.slice(1), g.BOARD); + posts = []; + _ref = $$('.thread > .postContainer', threadRoot); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + postRoot = _ref[_i]; + try { + posts.push(new Post(postRoot, thread, g.BOARD, { + isOriginalMarkup: true + })); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + (postRoot.id.match(/\d+/)) + " failed. Post will be skipped.", + error: err + }); + } + } + if (errors) { + Main.handleErrors(errors); + } + Main.callbackNodes(Thread, [thread]); + return Main.callbackNodesDB(Post, posts, function() { + return $.event('4chanXInitFinished'); + }); + }, + callbackNodes: function(klass, nodes) { + var cb, i, node; + i = 0; + cb = klass.callbacks; + while (node = nodes[i++]) { + cb.execute(node); + } + }, + callbackNodesDB: function(klass, nodes, cb) { + var cbs, errors, fn, i, len, softTask; + errors = null; + len = 0; + i = 0; + cbs = klass.callbacks; + fn = function() { + var node; + node = nodes[i++]; + cbs.execute(node); + return i % 25; + }; + softTask = function() { + while (fn()) { + if (len === i) { + if (cb) { + cb(); + } + return; + } + } + return setTimeout(softTask, 0); + }; + len = nodes.length; + return softTask(); + }, + 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.callbacks.push(obj.callback); + }, + 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 Notice('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 Notice('error', [div, logs], 30); + }, + parseError: function(data) { + var error, message; + c.error(data.message, data.error.stack); + message = $.el('div', { + textContent: data.message + }); + error = $.el('div', { + textContent: data.error + }); + return [message, error]; + }, + 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' && _ref !== '504 Gateway Time-out'); + } + return Main.thisPageIsLegit; + }, + css: "/*! * Font Awesome 4.0.3 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * \"Font Awesome by Dave Gandy - http://fontawesome.io\" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/davegandy * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ @font-face{font-family:FontAwesome;src:url('data:application/font-woff;base64,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') format('woff');font-weight:400;font-style:normal}.fa::before{font-family:FontAwesome;font-weight:400;font-style:normal;-webkit-font-smoothing:antialiased;*margin-right:.3em;text-decoration:inherit;display:none;speak:none} :root.shortcut-icons .fa::before, .menu-button .fa::before, .hide-reply-button .fa::before, .hide-thread-button .fa::before {display:inline-block;font-size:13px;visibility:visible} :root.shortcut-icons #shortcuts .fa::before{font-size:15px!important;margin-top:-3px!important;position:relative;top:1px} :root.shortcut-icons .fa, .menu-button .fa{font-size:0;visibility:hidden} :root.shortcut-icons .shortcut.brackets-wrap::after,:root.shortcut-icons .shortcut.brackets-wrap::before{display:none} :root.shortcut-icons a .fa, .menu-button .fa, .hide-reply-button .fa, .hide-thread-button .fa {display:inline} /* Update this line only */ .fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-gear:before,.fa-cog:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-gears:before,.fa-cogs:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-bars:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-unsorted:before,.fa-sort:before{content:\"\\f0dc\"}.fa-sort-down:before,.fa-sort-asc:before{content:\"\\f0dd\"}.fa-sort-up:before,.fa-sort-desc:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-legal:before,.fa-gavel:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-flash:before,.fa-bolt:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-reply-all:before{content:\"\\f122\"}.fa-mail-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\f150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\f151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\f152\"}.fa-euro:before,.fa-eur:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-rupee:before,.fa-inr:before{content:\"\\f156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\f157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\f158\"}.fa-won:before,.fa-krw:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"} /* */ .fa-spin::before{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}\n/* General */ .dialog { border: 1px solid; display: block; } .dialog:not(#qr):not(#thread-watcher):not(#header-bar) { box-shadow: 0 1px 2px rgba(0, 0, 0, .15); } #qr, #thread-watcher { box-shadow: -1px 2px 2px rgba(0, 0, 0, 0.25); } .captcha-img, .field { background-color: #FFF; border: 1px solid #CCC; -moz-box-sizing: border-box; box-sizing: border-box; color: #333; font: 13px sans-serif; outline: none; transition: color .25s, border-color .25s; transition: color .25s, border-color .25s; } .field::-moz-placeholder, .field:hover::-moz-placeholder { color: #AAA !important; font-size: 13px !important; opacity: 1.0 !important; } .captch-img:hover, .field:hover { border-color: #999; } .field:hover, .field:focus { color: #000; } .field[disabled] { background-color: #F2F2F2; color: #888; } .field::-webkit-search-decoration { display: none; } .move { cursor: move; overflow: hidden; } label, .watch-thread-link { cursor: pointer; } a[href=\"javascript:;\"] { text-decoration: none; } .warning { color: red; } #boardNavDesktop { display: none !important; } a { outline: none !important; } .painted { border-radius: 3px; padding: 0px 2px; } body>hr, .ad-plea-bottom + hr { display: none; } .board > hr:last-of-type { border-top-color: transparent !important; } div.navLinks { margin-bottom: -10px !important; } .ad-plea { display: none; } .ad-cnt { margin: 10px !important; } /* 4chan style fixes */ .opContainer, .op { display: block !important; overflow: visible !important; } .reply > .file > .fileText { margin: 0 20px; } [hidden] { display: none !important; } div.center:not(.ad-cnt) { display: none !important; } .page-num { margin-right: -8px; } /* fixed, z-index */ #overlay, #fourchanx-settings, #qp, #ihover, #navlinks, .fixed #header-bar, :root.float #updater, :root.float #thread-stats, #qr { position: fixed; } #fourchanx-settings { z-index: 999; } #overlay { z-index: 900; } #notifications { z-index: 70; } #qp, #ihover { z-index: 60; } #menu { z-index: 50; } #navlinks, #updater, #thread-stats { z-index: 40; } .fixed #header-bar.autohide { z-index: 35; } #qr { z-index: 30; } #thread-watcher { z-index: 8; } :root.fixed-watcher #thread-watcher { z-index: 20; } .fixed #header-bar { z-index: 10; } /* Header */ .fixed.top-header body { padding-top: 2em; } .fixed.bottom-header body { padding-bottom: 2em; } .fixed #header-bar { right: 0; left: 0; padding: 3px 4px 4px; } .fixed.top-header #header-bar { top: 0; } .fixed.bottom-header #header-bar { bottom: 0; } #header-bar { border-width: 0; transition: all .1s .05s ease-in-out; } :root.fixed #header-bar { box-shadow: -5px 1px 10px rgba(0, 0, 0, 0.20); } #custom-board-list .current { padding: 1px 1px 4px 1px; } :root.centered-links #shortcuts { width: 300px; text-align: right; } :root.centered-links #header-bar { text-align: center; } #board-list { font-size: 13px; } :root.centered-links #custom-board-list { position: relative; left: 150px; } .fixed.top-header #header-bar { border-bottom-width: 1px; } .fixed.bottom-header #header-bar { box-shadow: 0 -1px 2px rgba(0, 0, 0, .15); border-top-width: 1px; } .fixed.bottom-header #header-bar .menu-button i { border-top: none; border-bottom: 6px solid; } #board-list { text-align: center; } .fixed #header-bar.autohide:not(:hover) { box-shadow: none; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top-header #header-bar.autohide:not(:hover) { margin-bottom: -1em; -webkit-transform: translateY(-100%); transform: translateY(-100%); } .fixed.bottom-header #header-bar.autohide:not(:hover) { -webkit-transform: translateY(100%); transform: translateY(100%); } #scroll-marker { left: 0; right: 0; height: 10px; position: absolute; } :root:not(.autohide) #scroll-marker { pointer-events: none; } #header-bar #scroll-marker { display: none; } .fixed #header-bar #scroll-marker { display: block; } .fixed.top-header #header-bar #scroll-marker { top: 100%; } .fixed.bottom-header #header-bar #scroll-marker { bottom: 100%; } #header-bar a:not(.entry):not(.close) { text-decoration: none; } #header-bar a:not(.entry):not(.close):not(.current) { padding: 1px; } #header-bar input { margin: 0; vertical-align: bottom; } #shortcuts:empty { display: none; } .brackets-wrap::before { content: \"\\00a0[\"; } .brackets-wrap::after { content: \"]\\00a0\"; } .dead-thread, .disabled { opacity: .45; } #shortcuts { float: right; } .shortcut { margin-left: 3px; } #navbotright, #navtopright { display: none; } #toggleMsgBtn { display: none !important; } .current { font-weight: bold; } /* 4chan X link brackets */ .brackets-wrap::after { content: \"]\"; } .brackets-wrap::before { content: \"[\"; } /* Notifications */ #notifications { position: fixed; top: 0; height: 0; text-align: center; right: 0; left: 0; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top-header #header-bar #notifications { position: absolute; top: 100%; } .notification { color: #FFF; font-weight: 700; text-shadow: 0 1px 2px rgba(0, 0, 0, .5); box-shadow: 0 1px 2px rgba(0, 0, 0, .15); border-radius: 2px; margin: 1px auto; width: 500px; max-width: 100%; position: relative; transition: all .25s ease-in-out; } .notification.error { background-color: hsla(0, 100%, 38%, .9); } .notification.warning { background-color: hsla(36, 100%, 38%, .9); } .notification.info { background-color: hsla(200, 100%, 38%, .9); } .notification.success { background-color: hsla(104, 100%, 38%, .9); } .notification a { color: white; } .notification > .close { padding: 7px; top: 0px; right: 5px; position: absolute; } .notification > .fa-times::before { font-size: 11px !important; } .message { -moz-box-sizing: border-box; box-sizing: border-box; padding: 6px 20px; max-height: 200px; width: 100%; overflow: auto; } /* Settings */ :root.fourchan-x body { -moz-box-sizing: border-box; box-sizing: border-box; } #overlay { background-color: rgba(0, 0, 0, .5); top: 0; left: 0; height: 100%; width: 100%; } #fourchanx-settings { -moz-box-sizing: border-box; box-sizing: border-box; box-shadow: 0 0 15px rgba(0, 0, 0, .15); height: 600px; max-height: 100%; width: 900px; max-width: 100%; margin: auto; padding: 3px; top: 50%; left: 50%; -moz-transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } #fourchanx-settings > nav { padding: 2px 2px 0; height: 15px; } #fourchanx-settings > nav a { text-decoration: underline; } #fourchanx-settings > nav a.close { text-decoration: none; padding: 0 2px; } .section-container { overflow: auto; position: absolute; top: 2.1em; right: 5px; bottom: 5px; left: 5px; padding-right: 5px; } .sections-list { padding: 0 3px; float: left; } .credits { float: right; } .tab-selected { font-weight: 700; } .section-sauce ul, .section-advanced ul { list-style: none; margin: 0; } .section-sauce ul { padding: 8px; } .section-advanced ul { padding: 0px; } .section-sauce li, .section-advanced li { padding-left: 4px; } .section-main label { text-decoration: underline; } .section-filter ul { padding: 0; } .section-filter li { margin: 10px 40px; } .section-filter textarea { height: 500px; } .section-sauce textarea { height: 350px; } .section-advanced .field[name=\"boardnav\"] { width: 100%; } .section-advanced textarea { height: 150px; } .section-advanced .archive-cell { min-width: 160px; text-align: center; } .section-advanced #archive-board-select { position: absolute; } .section-advanced .note { font-size: 0.8em; font-style: italic; margin-left: 10px; } .section-advanced .note code { font-style: normal; font-size: 11px; } .section-keybinds .field { font-family: monospace; } #fourchanx-settings fieldset { border: 1px solid; border-radius: 3px; } #fourchanx-settings legend { font-weight: 700; } #fourchanx-settings textarea { font-family: monospace; min-width: 100%; max-width: 100%; } #fourchanx-settings code { color: #000; background-color: #FFF; padding: 0 2px; } .unscroll { overflow: hidden; } /* Index */ :root.index-loading .navLinks, :root.index-loading .board, :root.index-loading .pagelist { display: none; } #index-search { padding-right: 1.5em; width: 100px; transition: color .25s, border-color .25s, width .25s; } #index-search:focus, #index-search[data-searching] { width: 200px; } #index-search-clear { color: gray; margin-left: -1em; } /* ``::-webkit-*'' selectors break selector lists on Firefox. */ #index-search::-webkit-search-cancel-button, #index-search:not([data-searching]) + #index-search-clear { display: none; } .summary { text-decoration: none; } /* Announcement Hiding */ :root.hide-announcement #globalMessage { display: none; } span.hide-announcement { font-size: 11px; position: relative; bottom: 5px; } .globalMessage, h2, h3 { color: inherit !important; font-size: 13px; font-weight: 100; } /* Unread */ #unread-line { margin: 0; border-color: rgb(255,0,0); } /* Thread Updater */ #updater { background: none; border: none; box-shadow: none; } #updater > .move { padding: 5px 3px 0px; margin-bottom: -3px; } #updater > div:last-child { text-align: center; } #updater input[type=number] { width: 4em; } :root.float #updater { padding: 0px 3px; } .new { color: limegreen; } #update-status.new { margin-right: 5px; } #update-timer { cursor: pointer; } /* Thread Watcher */ #thread-watcher { position: absolute; } #thread-watcher { padding-bottom: 3px; padding-left: 3px; overflow: hidden; white-space: nowrap; min-width: 136px; max-height: 92%; overflow-y: auto; } #thread-watcher .menu-button { bottom: 1px; } :root.fixed-watcher #thread-watcher { position: fixed; } :root:not(.fixed-watcher) #thread-watcher:not(:hover) { max-height: 210px; overflow-y: hidden; } #thread-watcher > .move { padding-top: 3px; } #watched-threads > div { max-width: 250px; overflow: hidden; padding-left: 3px; padding-right: 3px; text-overflow: ellipsis; } #thread-watcher a { text-decoration: none; } #thread-watcher .move>.close { position: absolute; right: 0px; top: 0px; padding: 0px 4px; } .watch-thread-link { padding-top: 18px; width: 18px; height: 0px; display: inline-block; background-repeat: no-repeat; opacity: 0.2; position: relative; top: 1px; } .watch-thread-link.watched { opacity: 1; } /* Thread Stats */ #thread-stats { background: none; border: none; box-shadow: none; } :root.float #post-count, :root.float #file-count { pointer-events: none; } :root.float #thread-stats { padding: 0px 3px; } /* Quote */ .deadlink { text-decoration: none !important; } .backlink.deadlink:not(.forwardlink), .quotelink.deadlink:not(.forwardlink) { text-decoration: underline !important; } .inlined { opacity: .5; } #qp input, .forwarded { display: none; } .quotelink.forwardlink, .backlink.forwardlink { text-decoration: none; border-bottom: 1px dashed; } .filtered { text-decoration: underline line-through; } :root.hide-backlinks .backlink.filtered { display: none; } .inline { border: 1px solid; display: table; margin: 2px 0; } .inline .post { border: 0 !important; background-color: transparent !important; display: table !important; margin: 0 !important; padding: 1px 2px !important; } #qp > .opContainer::after { content: ''; clear: both; display: table; } #qp .post { border: none; margin: 0; padding: 2px 2px 5px; } #qp img { max-height: 80vh; max-width: 50vw; } .qphl { outline: 2px solid rgba(216, 94, 49, .7); } :root.highlight-own .yourPost > .reply, :root.highlight-you .quotesYou > .reply { border-left: 2px solid rgba(221,0,0,.5); } /* Quote Threading */ .threadContainer { margin-left: 20px; border-left: 1px solid rgba(128,128,128,.3); } .threadOP { clear: both; } /* File */ .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull, .expanded-image > .post > .file > .fileThumb > img[data-md5], :not(.expanded-image) > .post > .file > .fileThumb > .full-image { display: none; } .expanding { opacity: .5; } :root.fit-height .full-image { max-height: 100vh; } :root.fit-width .full-image { max-width: 100%; } :root.gecko.fit-width .full-image { width: 100%; } #ihover { -moz-box-sizing: border-box; box-sizing: border-box; max-height: 100%; max-width: 75%; padding-bottom: 16px; } /* Fappe Tyme */ .fappeTyme .thread > .noFile, .fappeTyme .threadContainer > .noFile { display: none; } /* Werk Tyme */ .werkTyme .post .file { display: none; } /* Index/Reply Navigation */ #navlinks { font-size: 16px; top: 25px; right: 10px; } /* Filter */ .opContainer.filter-highlight { box-shadow: inset 5px 0 rgba(255, 0, 0, .5); } .filter-highlight > .reply { box-shadow: -5px 0 rgba(255, 0, 0, .5); } /* Spoiler text */ :root.reveal-spoilers s { color: white !important; } /* Thread & Reply Hiding */ .hide-thread-button, .hide-reply-button { float: left; margin-right: 4px; padding: 2px; } .hide-thread-button:not(:hover), .hide-reply-button:not(:hover) { opacity: 0.4; } .threadContainer .hide-reply-button { margin-left: 2px !important; position: relative; left: 1px; } .hide-thread-button { margin-top: -1px; } .stub ~ * { display: none !important; } .stub input { display: inline-block; } /* QR */ :root.hide-original-post-form #postForm, :root.hide-original-post-form .postingMode, :root.hide-original-post-form #togglePostForm, #qr.autohide:not(.has-focus):not(:hover) > form, .postingMode ~ #qr select[data-name=thread], #file-n-submit:not(.has-file) #qr-filerm { display: none; } #qr select, #dump-button, .remove, .captcha-img { cursor: pointer; } #qr { z-index: 20; position: fixed; padding: 1px; border: 1px solid transparent; min-width: 300px; border-radius: 3px 3px 0 0; } #qrtab { border-radius: 3px 3px 0 0; } #qrtab { margin-bottom: 1px; } #qr .close { float: right; padding: 0 3px; } #qr .warning { min-height: 1.6em; vertical-align: middle; padding: 0 1px; border-width: 1px; border-style: solid; } .qr-link-container { text-align: center; } .qr-link { border-radius: 3px; padding: 6px 10px 5px; font-weight: bold; vertical-align: middle; border-style: solid; border-width: 1px; font-size: 10pt; } .persona { width: 248px; max-width: 100%; min-width: 100%; } #dump-button { width: 10%; margin: 0; margin-right: 4px; font: 13px sans-serif; padding: 1px 0px 2px; opacity: 0.6; } .persona .field:not(#dump) { width: 95px; min-width: 33.3%; max-width: 33.3%; } #qr textarea.field { height: 14.8em; min-height: 9em; } #qr.has-captcha textarea.field { height: 9em; } input.field.tripped:not(:hover):not(:focus) { color: transparent !important; text-shadow: none !important; } #qr textarea { resize: both; } .captcha-img { margin: 0px; text-align: center; background-image: #fff; font-size: 0px; min-height: 59px; min-width: 302px; } .captcha-input { width: 100%; margin: 1px 0 0; } .captcha-input.error:focus { border-color: rgb(255,0,0) !important; } .field { -moz-box-sizing: border-box; margin: 0px; padding: 2px 4px 3px; } #qr textarea { min-width: 100%; } #qr [type='submit'] { width: 25%; vertical-align: top; } :root.webkit #qr [type='submit'] { height: 24px; } #qr label input[type=\"checkbox\"] { position: relative; top: 2px; } /* Fake File Input */ input#qr-filename { border: none !important; width: 80%; padding: 0px 4px; position: relative; bottom: 1px; background: none !important; } input#qr-filename:not(.edit) { pointer-events: none; } #qr-filename, #qr-filesize, .has-file #qr-no-file { display: none; } #qr-no-file, .has-file #qr-filename, .has-file #qr-filesize { display: inline-block; margin: 0 0 2px; overflow: hidden; text-overflow: ellipsis; vertical-align: top; } #qr-no-file { color: #AAA; padding: 1px 4px; } #qr-filename-container { -moz-box-sizing: border-box; display: inline-block; position: relative; width: 100px; min-width: 74.6%; max-width: 74.6%; margin-right: 0.4%; margin-top: 1px; overflow: hidden; padding: 2px 1px 0; height: 22px; } #qr-filename-container:hover { cursor: text; } #qr-extras-container { position: absolute; right: 0px; } #qr-filerm { margin-right: 2px; z-index: 2; } #file-n-submit { height: 23px; } #qr input[type=file] { visibility: hidden; position: absolute; } /* Thread Select / Spoiler Label */ #qr select[data-name=thread] { float: right; } #qr.has-spoiler .has-file #qr-spoiler-label { width: 6.7%; min-width: 6.7%; max-width: 6.7%; display: inline-block; text-align: center; vertical-align: top; } #qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label { display: none; } #qr.has-spoiler .has-file #qr-filename-container { max-width: 67.9%; min-width: 67.9%; } #qr-spoiler-label input { position: relative; top: 3px; } /* Dumping UI */ .dump #dump-list-container { display: block; } #dump-list-container { display: none; position: relative; overflow-y: hidden; margin-top: 1px; } #dump-list { overflow-x: auto; overflow-y: hidden; white-space: nowrap; width: 248px; max-width: 100%; min-width: 100%; } #dump-list:hover { overflow-x: auto; } .qr-preview { -moz-box-sizing: border-box; counter-increment: thumbnails; cursor: move; display: inline-block; height: 90px; width: 90px; padding: 2px; opacity: .5; overflow: hidden; position: relative; text-shadow: 0 0 2px #000; -moz-transition: opacity .25s ease-in-out; vertical-align: top; background-size: cover; } .qr-preview:hover, .qr-preview:focus { opacity: .9; } .qr-preview::before { content: counter(thumbnails); color: #fff; position: absolute; top: 3px; right: 3px; text-shadow: 0 0 3px #000, 0 0 8px #000; } .qr-preview#selected { opacity: 1; } .qr-preview.drag { box-shadow: 0 0 10px rgba(0,0,0,.5); } .qr-preview.over { border-color: #fff; } .qr-preview > span { color: #fff; } .remove { background: none; color: #e00; padding: 1px; } a:only-of-type > .remove { display: none; } .remove:hover::after { content: \" Remove\"; } .qr-preview > label { background: rgba(0,0,0,.5); color: #fff; right: 0; bottom: 0; left: 0; position: absolute; text-align: center; } .qr-preview > label > input { margin: 0; } #add-post { cursor: pointer; font-size: 2em; position: absolute; top: 50%; right: 10px; -moz-transform: translateY(-50%); } .textarea { position: relative; } :root.webkit .textarea { margin-bottom: -2px; } #char-count { color: #000; background: hsla(0, 0%, 100%, .5); font-size: 8pt; position: absolute; bottom: 1px; right: 1px; pointer-events: none; } /* Menu */ .menu-button:not(.fa-bars) { display: inline-block; position: relative; cursor: pointer; } .menu-button i { border-top: 6px solid; border-right: 4px solid transparent; border-left: 4px solid transparent; display: inline-block; margin: 2px; vertical-align: middle; } .reply .menu-button, .op .menu-button, #thread-watcher .menu-button { margin-left: -1px !important; position: relative; } .op .menu-button, #thread-watcher .menu-button { top: 1px; } :root.blink .reply .menu-button { position: relative; top: 2px; } :root.blink .op .menu-button, :root.blink #thread-watcher .menu-button { top: 3px; } .menu-button + .container:not(:empty) { margin-left: -5px !important; } #menu { position: fixed; outline: none; } #menu, .submenu { border-radius: 3px; padding-top: 1px; padding-bottom: 3px; } .entry { cursor: pointer; display: block; outline: none; padding: 2px 10px; position: relative; text-decoration: none; white-space: nowrap; min-width: 70px; } .left>.entry.has-submenu { padding-right: 17px !important; } .entry input[type=\"checkbox\"], .entry input[type=\"radio\"] { margin: 0px; position: relative; top: 2px; } .has-submenu::after { content: \"\"; border-left: .5em solid; border-top: .3em solid transparent; border-bottom: .3em solid transparent; display: inline-block; margin: .3em; position: absolute; right: 3px; } .left .has-submenu::after { border-left: 0; border-right: .5em solid; } .submenu { display: none; position: absolute; left: 100%; top: -1px; margin-left: 0px; margin-top: -2px; } .focused > .submenu { display: block; } .imp-exp-result { position: absolute; text-align: center; margin: auto; right: 0px; left: 0px; width: 200px; } .export, .import { cursor: pointer; text-decoration: none !important; } /* Custom Board Titles */ .boardTitle[contenteditable=\"true\"], .boardSubtitle[contenteditable=\"true\"] { cursor: text !important; } div.boardTitle { font-weight: 400 !important; } /* Link Title Favicons */ .linkify.YouTube { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important; padding-left: 18px; } .linkify.Vimeo { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAASJJREFUOE9jYAAC7ln7/pODQXrBmq333PvPu/YaSRikB6QXbACpmmHqsRoAMll7+20UQ0H8tmuv/pdffPFfZtNNuByGASBFIPDh5x+4IV6HHoDFYGDJgw+YBoBMBUkgA5BtIKduuvvy//svX+FSB+88wTTAc+/t/83bj/0HScLA5BPXwc7lKJ36f+L6XXDxhUfOYxrAPWUnWKFp9UQUm3iWQxSDXAEDSX3zcIcB96wD/x+8eA1XDNKMHAYg20GW4Y0FkCIYAAUqzEBQOIBciRzlWKMxZelOlMCEcVxq+jHSC1YDJPs3YBgA8jey0/F6ARRwsFAHORukmat9NdbUijMpg/wKcrJodDFOzSBXwA3Alh9AToZFI7a8Asu98BxJbnYGAJb5vYLDANzSAAAAAElFTkSuQmCC') center left no-repeat!important; padding-left: 18px; } .linkify.SoundCloud { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important; padding-left: 18px; } .linkify.audio { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important; padding-left: 18px; } .linkify.LiveLeak { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAydJREFUOE9Nk1tIk2EYx79NyUNqTk0o6KYrnZeChodLDxfeZpCbJk4RXU5Nm7tYRYhiYXbQlaeGutyW2gxtpB1RIyKDEjKwA6Ti2dR5KNDn+fq/S6TBj/f93r3P732e53s/qfnkSdej4GB2SBLbwf+jmB+gUMgOheLg/z7EdCUnO6Ref392SpK8Hyh3I+gBwBo7lUp2xcbyQEoKD6alyQOpqd754/h4FjJXZCRJTl9ftmEzoK5/wdQJxPgkLY2WV1dpc2uLtnZ2eHNnhza3t2nd46GhjAzuValY6jx0iIfS03msoIDuQ9COQCtoUSjohU5HuwgaN5loeXycd3d3aW9vzwvW2K5SkdTi58fvzGb+3tdHFggA3QONEAzn59PvjQ1yqNX0zenkvX0B4ffWaGRraChJd/385JGqKvlzTw/fRqOaIGkEd1DjU52O/3g83BkTw5MOh7yJuUCUM2o0yi2hoSw1IIOhykr+YLNRHYKu4XQvyKA/N5c8yMCCDD7Z7bz26xcJ1rH2rKKCG0UJdRAMlJbyG6uVrkJQjWAB5tSbk0Nr2HwDgvcQiIYur6zQyvo6ucvLueHIEZKuQPBQr+dXra1kRuqXEOwFArtWSytra1QdFUVjNhvPLS3R3OIiLUDUD0F1WBhJJtwDW2Ehu5uaqBICI4IFlRB0QLCEzaboaHrd0cHzCBYsIIuesjK+LAQXkEFrXh676uupGCWcR6AeghLQptGQONUAwfOuLp6Zn6eZuTmaXVig7pISrhI90ENgQbdHhoep32JhFzLpu3WLio8epUYIfs7OUjF6UKJW88XERLqYkEBNej11oG8XhCAvMFAuOn5cNiclsTkhQTbhmpri4lgbEMANWi1DwC/xit3t7bK7rY0Fo4OD3G4wyEURESzloAdnceezlErK8vH5N4KzPj50PTOTfkxP0+THj/RlYoInJyZI8HVqim5qNFwQHk7SucBAPo2PKRMNPLM/4pnFszYkhJsNBu6uqWFHba1sr61lQSveQFZQkFx07BhJmhMnrLn4NLMPH/aSExR0QDbmWhwgyEapwDvXoDxdWBiXnjrV/Bdm2kYUxLwmEgAAAABJRU5ErkJggg==') center left no-repeat!important; padding-left: 18px; } .linkify.Vocaroo { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important; padding-left: 18px; } .linkify.pastebin { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAtZJREFUOE+NU91LWmEc7sJtQew/2MUY7INg7CLY3W5GMHazyzEQo9UmfYxZTbAiVlgRqLMSZ+XnDC3z2+Y0+8JGakKZTtR0Tl2wtgtLLQh29cz3ZZ3h3Q68vOc95zzP73l+z+/U1f292O09DRxubxOH23P//1bvtQts3dPnry7LZnXJhcUl5Avf8dHtwY+fv2AyW5DOfIXFakMm+w0G4wISyRRm55TQG0y/Wzv6mikJ52Xf9TmVBoFAAD6fDwqFAqFQCJubmzCbzZiensbp6SmkUikikQi0Wi0kEgm6ewVaStDCfXPDandifn6egoaGhrCzswO1Wg2Hw4HBwUGk02kIBAL4/X4IhUJMTk6ii8dfYggy2RwymQzOz88Rj8dRLpexv7+PSqWCYDCIQqGAra0tJBIJrK2t0XdVAjNDEIl+wfj4OEqlEq2wt7dHrchkMmrBYDCAz+fTIjweD7FYrJbgIJOlgLOzM8jlcip1eXmZ2rFarVAqlRCLxcjlchCJRFRljYJYPAG32418Pg+n04lsNouVlRUcHh7C4/FQIOlHNBqlezgcJgQWxkIgGMbExASVNjY2hvX1dVo9mUzS5wREFLhcLrqTcw2B//M2RkdHodPp4PV6oVKpqH+SCom3v7+fNnF4eJiJusbCJ6+PviSyScakiaR5RIHRaKQpmEwmbAdCeD8zB6vdhebHT8SMhcUlC83bbrdTJRsbG3RwiCVCRNJJpDIoVeNNJJJQzKryV+rrmxiCtyNCCmaz2VhdXQWXy6XDpNfrodFoYLXZUTw+pk222Z3lW3ca26rgSwzBwqIZAwMDlITMAVEwNTVFR5fEJpK8Qyp1AJvDVbrTeLenCmxgfiZ22+urCtWHyu7uLp2wVCpFKx0dHaFYLOLk5KT6Y9kgk89kb95ubK0BX7A8a+1qannRLeW0daj/rU51S3tn9dypfvDw0QiLxbpX/Z7FVK7e/AEj4Wf24/2f5AAAAABJRU5ErkJggg==') center left no-repeat!important; padding-left: 18px; } .linkify.gist { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqUkzuIE1EUhv955MnsbB6r4kYQLUQQFncV3SnCIqJsoWGDYOGjsIiCtY2Kla1sjLBIsFFcXJC1kaSwENQmXUQSRSUSjCQSTCbkbR4z47lXEgtBNwcu3DNzvvO8R8jlcj7LshKmaWqYQERRTAmCcEru9/sJr9er0QF92BJMAVGr1TQ6CeZAc7lcGAwGkyQAxpTLZU0eDoc8crfbRTgcRjAYRCQSYSmi1WpxY7fbjU6ng1gshmaziXg8zhnGIpVKWbquW9ls1mLZsaMoiqWq6lgnBxY55He/328Vi0XOMFZmqVMD4fF4QBAajcY48khY9JE4HA4enTGMFVkaTHmy+ZzD/5NSqYSNB484w1h55ODO3TVu4FXcWDywl24Cmp0e1WBhyuWELAtIf/qKUrWOONmev3Lpt4NRCXq1gplpBS/v3cDc0nGg9h1o1ZkfwO4Atu1B8cM7HLt8k37V/y5B2b4bJxf2Y+7oEbyJrkMvUjki0YYJ03LidfQxAt4dOHdCw5RdGZcgGobBlQtnV/BDr1GfDai7ZiHZZRi9PoY/e5SCCTUwC9gk1GmMh5YWOcNYkR4Sv1y9uAJbYB82N57h4OnDmN7phjQ0qUkWRJuB+TMaPn/5iFfvv+Ha7eucYey4iWw8q6tRJJNJ3Fp7ClUawEkViBTfkCR0YUNTVHD/4Tpm/P4/U2CeKpUKfD4fJDIMhUKEhP45St50XedZyLQY6Xw+v8AUemVb2oNqtYpCocCWKi2TLLfb7ReZTGZ+kmUi7i2VvfxLgAEAZChMriPcl+IAAAAASUVORK5CYII=') center left no-repeat!important; padding-left: 18px; } .linkify.image { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important; padding-left: 18px; } .linkify.InstallGentoo { background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAklJREFUOE9jYEAAASBTCorZkcSRmTjVCDLziCwG4hfM3EIvGNm44oC6WNEM4WXi5FsEkmfhFX3BxMmfAJSHW9Qr55Px3aZp3X/btq3/hQydPzKysMcCFbBBDeFj4uBdqBJR/gskb1W34j+PmulLoJwbzBJJoMm7dNO7/ntMP/XfpW/v//SKvk+7tl7fvXfTpx5pCdWVSiHFv1wnHQbLi9sE/Wdk5SwBauaCGQB3gUPb5v+7Lr/8/+fvr/9fv/z+f+Pyr/9bV735l9Wy/79Dx/b/Nk0bsLoAHgbeAVHv/v77/f8f0IB7N7+cu3DuecK54z9+7lzz639e9pK/7HwSWMMA5BJwCJeXtOm/fvVj1fcfv369f//92cN7X6ZcPvf9x6Htv//vXP3r/+T245UEYgpskPTNq08LgN749/PH7/93rv/6f/rw7//nj//4f+bU0zQcUQwWBkdVbGz62y+fv3wHeeXrlz//H9798//qpY//M3KqfzGxc8djiWKwZnBUuWQ2/fr46fv/P39+///x/ff/d69//z97+s7fyMb5/+y7d2GLYriDZikFF/1qXXXj/4Pbv/8/f/jn/5MH316/eP6jVlBAaIt6VO1/jxmn/zv27P7Pp2HxEajLD90ra9Sj6/979O37X73w0n+vqOL/0lJyMVBFq0EGgDSD0oKAlu1/oHg4ugGzVCKqfouYuL1Xj676Iajr8AnJFricGqYc3Bw+Zi6BVUxsXLHAdL6QiYMPFNrwpIxHDsUhgtAMAopKDjQn4pPDF7P45QC4hSmc1eX8WgAAAABJRU5ErkJggg==') center left no-repeat!important; padding-left: 18px; } /* Gallery */ #a-gallery { position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: 30; display: -webkit-flex; -webkit-flex-direction: row; background: rgba(0,0,0,0.7); } .gal-viewport { display: -webkit-flex; -webkit-align-items: stretch; -webkit-flex-direction: row; -webkit-flex: 1 1 auto; } .gal-thumbnails { -webkit-flex: 0 0 150px; overflow-y: auto; display: -webkit-flex; -webkit-flex-direction: column; -webkit-align-items: stretch; text-align: center; background: rgba(0,0,0,.5); border-left: 1px solid #222; } .gal-hide-thumbnails .gal-thumbnails { display: none; } .gal-thumb img { max-width: 125px; max-height: 125px; height: auto; width: auto; } .gal-thumb { -webkit-flex: 0 0 auto; padding: 3px; line-height: 0; transition: background .2s linear; } .gal-highlight { background: rgba(0, 190, 255,.8); } .gal-prev { order: 0; border-right: 1px solid #222; } .gal-next { order: 2; border-left: 1px solid #222; } .gal-prev, .gal-next { -webkit-flex: 0 0 20px; position: relative; cursor: pointer; opacity: 0.7; background-color: rgba(0, 0, 0, 0.3); } .gal-prev:hover, .gal-next:hover { opacity: 1; } .gal-prev::after, .gal-next::after { position: absolute; top: 48.6%; -webkit-transform: translateY(-50%) display: inline-block; border-top: 11px solid transparent; border-bottom: 11px solid transparent; content: \"\"; } .gal-prev::after { border-right: 12px solid #fff; right: 5px; } .gal-next::after { border-left: 12px solid #fff; right: 3px; } .gal-image { order: 1; -webkit-flex: 1 0 auto; display: -webkit-flex; -webkit-align-items: flex-start; -webkit-justify-content: space-around; overflow: hidden; /* Flex > Non-Flex child max-width and overflow fix (Firefox only?) */ width: 1%; } :root:not(.gal-fit-height) .gal-image { overflow-y: scroll !important; } :root:not(.gal-fit-width) .gal-image { overflow-x: scroll !important; } .gal-image a { margin: auto; line-height: 0; } .gal-fit-width .gal-image img { max-width: 100%; } .gal-fit-height .gal-image img { /* Chrome doesn't support viewpoint units in calc() http://bugs.chromium.org/168840 \"It looks like the original author of viewport units in WebKit is not coming back to fix this stuff.\" Well, fuck. */ max-height: 95vh; max-height: calc(100vh - 25px); } .gal-buttons { font-size: 2em; margin-right: 10px; top: 5px; } .gal-buttons i { vertical-align: baseline; border-top-width: .4em; border-right-width: .25em; border-left-width: .25em; } .gal-buttons .menu-button { bottom: 2px; color: #ffffff; text-shadow: 0px 0px 1px #000000; } .gal-close { color: #ffffff; text-shadow: 0px 0px 1px #000000; } .gal-buttons, .gal-name, .gal-count { position: fixed; right: 178px; } .gal-hide-thumbnails .gal-buttons, .gal-hide-thumbnails .gal-count, .gal-hide-thumbnails .gal-name { right: 28px; } .gal-name { bottom: 6px; background: rgba(0,0,0,0.6) !important; border-radius: 3px; padding: 1px 5px 2px 5px; text-decoration: none !important; color: white !important; } .gal-name:hover, .gal-close:hover, .gal-buttons .menu-button:hover { color: rgb(95, 95, 101) !important; } .gal-count { bottom: 27px; background: rgba(0,0,0,0.6) !important; border-radius: 3px; padding: 1px 5px 2px 5px; color: #ffffff !important; } :root:not(.gal-fit-width) .gal-name { bottom: 23px !important; } :root:not(.gal-fit-width) .gal-count { bottom: 44px !important; } :root:not(.gal-fit-height):not(.gal-hide-thumbnails) .gal-buttons, :root:not(.gal-fit-height):not(.gal-hide-thumbnails) .gal-name, :root:not(.gal-fit-height):not(.gal-hide-thumbnails) .gal-count { right: 195px !important; } :root.gal-hide-thumbnails:not(.gal-fit-height) .gal-buttons, :root.gal-hide-thumbnails:not(.gal-fit-height) .gal-name, :root.gal-hide-thumbnails:not(.gal-fit-height) .gal-count { right: 44px !important; } @media screen and (resolution: 1dppx) { .fa-bars { font-size: 14px; } #shortcuts .fa-bars { vertical-align: -1px; } }\n/* General */ :root.yotsuba .dialog { background-color: #F0E0D6; border-color: #D9BFB7; } :root.yotsuba .field:focus { border-color: #EA8; } /* Header */ :root.yotsuba #header-bar.dialog { background-color: rgba(240,224,214,0.98); } :root.yotsuba #header-bar, :root.yotsuba #notifications { font-size: 9pt; color: #B86; } :root.yotsuba #board-list a, :root.yotsuba #shortcuts a { color: #800000; } :root.yotsuba.fixed #custom-board-list a.current { border-bottom: 1px solid rgba(178,0,0,0.2); } :root.yotsuba.fixed #custom-board-list .current:hover { border-bottom-color: rgba(255,0,0,0.2); } /* Settings */ :root.yotsuba #fourchanx-settings fieldset { border-color: #D9BFB7; } /* Quote */ :root.yotsuba .backlink.deadlink { color: #00E !important; } :root.yotsuba .inline { border-color: #D9BFB7; background-color: rgba(255, 255, 255, .14); } /* QR */ .yotsuba #dump-list::-webkit-scrollbar-thumb { background-color: #F0E0D6; border-color: #D9BFB7; } :root.yotsuba .qr-preview { background-color: rgba(0, 0, 0, .15); } :root.yotsuba .qr-link { border-color: rgb(225, 209, 199) rgb(225, 209, 199) rgb(210, 194, 184); background: linear-gradient(#FFEFE5, #F0E0D6) repeat scroll 0% 0% transparent; } :root.yotsuba .qr-link:hover { background: #F0E0D6; } /* Menu */ :root.yotsuba #menu { color: #800000; } :root.yotsuba .entry { font-size: 10pt; } :root.yotsuba .focused.entry { background: rgba(255, 255, 255, .33); } /* Watcher Favicon */ :root.yotsuba .watch-thread-link { background-image: url(\"data:image/svg+xml,\"); } /* Board Title */ :root.yotsuba div.boardTitle { font-family: sans-serif !important; text-shadow: 1px 1px 1px rgba(100,0,0,0.6); }\n/* General */ :root.yotsuba-b .dialog { background-color: #D6DAF0; border-color: #B7C5D9; } :root.yotsuba-b .field:focus { border-color: #98E; } /* Header */ :root.yotsuba-b #header-bar.dialog { background-color: rgba(214,218,240,0.98); } :root.yotsuba-b #header-bar, :root.yotsuba-b #notifications { font-size: 9pt; color: #89A; } :root.yotsuba-b #board-list a, :root.yotsuba-b #shortcuts a { color: #34345C; } :root.yotsuba-b.fixed #custom-board-list .current { border-bottom: 1px solid rgba(30, 30, 255, 0.2); } :root.yotsuba-b.fixed #custom-board-list .current:hover { border-bottom-color: rgba(255,0,0,0.2); } /* Settings */ :root.yotsuba-b #fourchanx-settings fieldset { border-color: #B7C5D9; } /* Quote */ :root.yotsuba-b .backlink.deadlink { color: #34345C !important; } :root.yotsuba-b .inline { border-color: #B7C5D9; background-color: rgba(255, 255, 255, .14); } /* QR */ .yotsuba-b #dump-list::-webkit-scrollbar-thumb { background-color: #D6DAF0; border-color: #B7C5D9; } :root.yotsuba-b .qr-preview { background-color: rgba(0, 0, 0, .15); } :root.yotsuba-b .qr-link { border-color: rgb(199, 203, 225) rgb(199, 203, 225) rgb(184, 188, 210); background: linear-gradient(#E5E9FF, #D6DAF0) repeat scroll 0% 0% transparent; } :root.yotsuba-b .qr-link:hover { background: #D9DDF3; } /* Menu */ :root.yotsuba-b #menu { color: #000; } :root.yotsuba-b .entry { font-size: 10pt; } :root.yotsuba-b .focused.entry { background: rgba(255, 255, 255, .33); } /* Watcher Favicon */ :root.yotsuba-b .watch-thread-link { background-image: url(\"data:image/svg+xml,\"); } /* Board Title */ :root.yotsuba-b div.boardTitle { font-family: sans-serif !important; text-shadow: 1px 1px 1px rgba(105,10,15,0.6); }\n/* General */ :root.futaba .dialog { background-color: #F0E0D6; border-color: #D9BFB7; } :root.futaba .field:focus { border-color: #EA8; } /* Header */ :root.futaba #header-bar.dialog { background-color: rgba(240,224,214,0.98); } :root.futaba #header-bar, :root.futaba #notifications { font-size: 11pt; color: #B86; } :root.futaba #header-bar a, :root.futaba #notifications a { color: #800000; } :root.futaba.fixed #custom-board-list a.current { border-bottom: 1px solid rgba(178,0,0,0.2); } :root.futaba.fixed #custom-board-list .current:hover { border-bottom-color: rgba(255,0,0,0.2); } /* Settings */ :root.futaba #fourchanx-settings fieldset { border-color: #D9BFB7; } /* Quote */ :root.futaba .backlink.deadlink { color: #00E !important; } :root.futaba .inline { border-color: #D9BFB7; background-color: rgba(255, 255, 255, .14); } /* QR */ .futaba #dump-list::-webkit-scrollbar-thumb { background-color: #F0E0D6; border-color: #D9BFB7; } :root.futaba .qr-preview { background-color: rgba(0, 0, 0, .15); } :root.futaba .qr-link { border-color: rgb(225, 209, 199) rgb(225, 209, 199) rgb(210, 194, 184); background: linear-gradient(#FFEFE5, #F0E0D6) repeat scroll 0% 0% transparent; } :root.futaba .qr-link:hover { background: #F0E0D6; } /* Menu */ :root.futaba #menu { color: #800000; } :root.futaba .entry { font-size: 12pt; } :root.futaba .focused.entry { background: rgba(255, 255, 255, .33); } /* Watcher Favicon */ :root.futaba .watch-thread-link { background-image: url(\"data:image/svg+xml,\"); }\n/* General */ :root.burichan .dialog { background-color: #D6DAF0; border-color: #B7C5D9; } :root.burichan .field:focus { border-color: #98E; } /* Header */ :root.burichan #header-bar.dialog { background-color: rgba(214,218,240,0.98); } :root.burichan #header-bar, :root.burichan #header-bar #notifications { font-size: 11pt; color: #89A; } :root.burichan #header-bar a, :root.burichan #header-bar #notifications a { color: #34345C; } :root.burichan.fixed #custom-board-list .current { border-bottom: 1px solid rgba(30, 30, 255, 0.2); } :root.burichan.fixed #custom-board-list .current:hover { border-bottom-color: rgba(255,0,0,0.2); } /* Settings */ :root.burichan #fourchanx-settings fieldset { border-color: #B7C5D9; } /* Quote */ :root.burichan .backlink.deadlink { color: #34345C !important; } :root.burichan .inline { border-color: #B7C5D9; background-color: rgba(255, 255, 255, .14); } /* QR */ .burichan #dump-list::-webkit-scrollbar-thumb { background-color: #D6DAF0; border-color: #B7C5D9; } :root.burichan .qr-preview { background-color: rgba(0, 0, 0, .15); } :root.burichan .qr-link { border-color: rgb(199, 203, 225) rgb(199, 203, 225) rgb(184, 188, 210); background: linear-gradient(#E5E9FF, #D6DAF0) repeat scroll 0% 0% transparent; } :root.burichan .qr-link:hover { background: #D9DDF3; } /* Menu */ :root.burichan #menu { color: #000000; } :root.burichan .entry { font-size: 12pt; } :root.burichan .focused.entry { background: rgba(255, 255, 255, .33); } /* Watcher Favicon */ :root.burichan .watch-thread-link { background-image: url(\"data:image/svg+xml,\"); }\n/* General */ :root.tomorrow .dialog { background-color: #282A2E; border-color: #111; } /* Header */ :root.tomorrow #header-bar.dialog { background-color: rgba(40,42,46,0.9); } :root.tomorrow #header-bar, :root.tomorrow #notifications { font-size: 9pt; color: #C5C8C6; } :root.tomorrow #header-bar a, :root.tomorrow #notifications a { color: #81A2BE; } :root.tomorrow.fixed #custom-board-list a.current { border-bottom: 1px solid rgba(83,124,160,0.4); } :root.tomorrow.fixed #custom-board-list .current:hover { border-bottom-color: rgba(95,137,172,0.4); } /* Settings */ :root.tomorrow #fourchanx-settings fieldset { border-color: #111; } /* Quote */ :root.tomorrow .backlink.deadlink { color: #81A2BE !important; } :root.tomorrow .inline { border-color: #111; background-color: rgba(0, 0, 0, .14); } /* QR */ .tomorrow #dump-list::-webkit-scrollbar-thumb { background-color: #282A2E; border-color: #111; } :root.tomorrow .qr-preview { background-color: rgba(255, 255, 255, .15); } :root.tomorrow #qr .field { background-color: rgb(26, 27, 29); color: rgb(197,200,198); border-color: rgb(40, 41, 42); } :root.tomorrow #qr .field:focus { border-color: rgb(129, 162, 190) !important; background-color: rgb(30,32,36); } :root.tomorrow .qr-link { border-color: rgb(25, 27, 31) rgb(25, 27, 31) rgb(10, 12, 16); background: linear-gradient(#37393D, #282A2E) repeat scroll 0% 0% transparent; } :root.tomorrow .qr-link:hover { background: #282A2E; } /* Menu */ :root.tomorrow #menu { color: #C5C8C6; } :root.tomorrow .entry { font-size: 10pt; } :root.tomorrow .focused.entry { background: rgba(0, 0, 0, .33); } /* Watcher Favicon */ :root.tomorrow .watch-thread-link { background-image: url(\"data:image/svg+xml,\"); } /* Board Title */ :root.tomorrow div.boardTitle { font-family: sans-serif !important; text-shadow: 1px 1px 1px rgba(167,170,168,0.6); }\n/* General */ :root.photon .dialog { background-color: #DDD; border-color: #CCC; } :root.photon .field:focus { border-color: #EA8; } /* Header */ :root.photon #header-bar.dialog { background-color: rgba(221,221,221,0.98); } :root.photon #header-bar, :root.photon #notifications { font-size: 9pt; color: #333; } :root.photon #header-bar a, :root.photon #notifications a { color: #FF6600; } :root.photon.fixed #custom-board-list a.current { border-bottom: 1px solid rgba(0,74,153,0.2); } :root.photon.fixed #custom-board-list .current:hover { border-bottom-color: rgba(255,51,0,0.2); } /* Settings */ :root.photon #fourchanx-settings fieldset { border-color: #CCC; } /* Quote */ :root.photon .backlink.deadlink { color: #F60 !important; } :root.photon .inline { border-color: #CCC; background-color: rgba(255, 255, 255, .14); } /* QR */ .photon #dump-list::-webkit-scrollbar-thumb { background-color: #DDD; border-color: #CCC; } :root.photon .qr-preview { background-color: rgba(0, 0, 0, .15); } :root.photon .qr-link { border-color: rgb(206, 206, 206) rgb(206, 206, 206) rgb(191, 191, 191); background: linear-gradient(#ECECEC, #DDD) repeat scroll 0% 0% transparent; } :root.photon .qr-link:hover { background: #DDDDDD; } /* Menu */ :root.photon #menu { color: #333; } :root.photon .entry { font-size: 10pt; } :root.photon .focused.entry { background: rgba(255, 255, 255, .33); } /* Watcher Favicon */ :root.photon .watch-thread-link { background-image: url(\"data:image/svg+xml,\"); } /* Board Title */ :root.photon div.boardTitle { font-family: sans-serif !important; text-shadow: 1px 1px 1px rgba(0,74,153,0.6); }" + }; + + Main.init(); + +}).call(this); diff --git a/builds/crx.crx b/builds/crx.crx index 5b1b2a44bea4dc68825018430d014198adf4d246..f60dfe9b0e22cda1bff95f197cfd3c8abc8d65f4 100644 GIT binary patch delta 145203 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�DJ7>%yHy;2ZWf+lMAj~w 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 R0q>W6?*bqOPV52z002g`k<9=A delta 145189 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

ir9g+cq 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

d6jQFcHh zH%0)Oy`vtQiOb%2-J3!ZPMaNnq;ZMle_x6bHXzonX<4Ey;WjBjCg2E~k%Wy1t!5Q? zx?VL=G@gdde{gbXO1ARuovPB`mX1*5$f_;1%`{ksO|%l^ zYz&JSIq6i$;#j$xa@GFD{>K-r+1WAJ57d47nHi1lZ9ac0wi69Iv&%1L=5BD6yclU& zh9~4sAwC^INS8`OQ(g*v{@KkRawl{>O<9GJ_k$**F=D!(Gfouji zVMfSk_Tk>%We?`dRGrsf1C%vq+%h9q2EcGNMCr~6J(?qVJ2esVfvjLz+$_KAXcJ32 zTT<+Ib7QT}Fnh9WyGcZuI;$C(K4%4SBQoK?9N7enB)^K)W@d+fzY<;JOX?n!P5pYo zUD1BCD&oVm$4@-J$0kl2tj431>(hL0jg%0~vX)@AYU`X;?D$F9zo*i+WT#x@xV;Bfd-y+2eb$#;N53` zFMM%lYk|sOJ@|!xYYalxp8uongvhHX2zKL#RX>m+p}1QMYAPP7o{ zIi}YVXoS4@xbhw2vdsJ-u`MU= zQxDZQmsI;#!OZG|^bo!MhcJl=qG<7e`;}$edx~iIzp)-5;0b-0VTYG_NWO%WH2{?F zH-A^bc6WF>0DV>}v#4FZGe@`49i6sRCj04oX9~>K9+!vN6X&?La|s6z^b17fbD*#% zzcHGy>6#~hK2S7xilg)NT~vHq3?5Nm?H=T&;ycJT#Mqb+JZ4C71jL>Pk`ym7qeTY1 zKrsKmaG~~+Q5j)x?Sr>=ll3@2z{y=Ce+omH>Eq3ZDO7DZ%BFQSJr&<=&!6<1d)p)2 zcJ5M3*nks`=t8!sV=C&r+ifg!3ceWbUYV(tSM^(e{R^P@ljSlY3gNEO0;hT97+?%< z6N_v4kx6b9=mlTGvQ6RtYc9X`+|f#ICh%~L%vOTElYeubrvlOE^Bi4}>4JQUS~-7a z_y}^0e`WX4%2vIB6Q<}Ww)PH-TsRce*)GDR9mD7od;5u~u?F4};hD@{F?$IPCYs{U zb^u|2C@(xepP!pyW_{bpyP%6Kpe-ca3tfq*8OB3#f9+=3sUpzXiKfy}?oTq~4B1^c z%p1rF!zs;7-VWznwSB4lcx8{jZ5r^8yZ)p)xHJBgvS^&O4 z*b!oB1Pa=#ghV+j&?8r4(gJdbxldZqpz&9KMDM}8?0k_+7>kxHe_F$cJXBSJ|pOz(+Vo0PRBOv z>@zY2#Aq>0uu5t@1Wg$}vx$c>u?6VWsNn%jAMTzkk#Dinl+!D+WDh%!N!CKZoL(5~@%JNaDqt8bV$q z*8Q8F0?jA5@8X5uOt6^ipO6v`OrJBnm+x6cNfM@#0~}}H%Y3i zo>n8s9(g({ZWz9~SAMFpS3y+w{sAX{e{fJ#zo1Q=m-z{4=di!HiRA~>#-PEx=(-P1 zwgE1WOHuT84%D!IS-@OAmHg+;sJNfQ&3Eb>rRb}Z6W`}h_n5wjw^V>cY z*ID-nTWQh7NC2cyAAKaFWxrfnF^=$aONMLH`W{7)TD(gsxvLsWW+_p_YPZ$ zR~R^;9IIu}XN{wSRn<_+{EuO@kEuK^&k3De=D?_IQqoDaA4|Gr zZyk2+l_GQxLFM!P$DYnthQ?zua5wzK!Y9hoRszh%aARa{m;nwo@ydD#V>I=@+zLY1 zatA`pnYU=#SV|IP=wwO&Z4TimIYy(Fe}n_c4IxN~IqjfF`|8NPjNF{ekROqHvAeR5 zkQyu7BTw!}zl|j;SuMNp%Q~+Dk!snpoJzDah<`Oz01B>0Gu^E{Z^KjCRxCLiQ?yUw zS%gNV=&-JH5Z_6{WqO-Wvk4zK*yCDauk*6N^N=J2zm%8~zk-G477O5@(-qq$88e`A<=2qp&&xXn6lo_*PgN3<`BL-N zThQ=)19a}jhh>_r?(u;j3ULC8h^d32|`(~cgv0bY0&z6eO|O%r|6p+W@?K4O5E;=y0o zUsiciDjvUR<3IX^vJmga67g%FT=hW`d!1LazBDnJ-m`sVcN(Me*2)@dU;M{IJr8(p zAuDh0>>O?fOYqOQywf@!e<6hDLljb)@w%`UrMf^K3t&q6Bw=nF==9~$I`_{`1Doip^EuztU3em)RA zY8vqR_9nqP>EV*~P|)rJr?<s(6CZOJLaqTGjPSyg0JL$vtkyUrLd6K;B=wa5%KPtTg0TfJGZfW>i^HwcrFq z)U%22$F>kwroyOFe2FDawCFwWtby>WiI>-Yi?iyt_*7D4pUl!^<>hOZVV^XDUezpOmTRD)zr8)3r!IxsG#BDxL(%J$ZZG{c%EI>i_ zI|CtFC1fY6&(w!+ei{AOt|@x#Viv?uW6;ZH`5a3ud3LWqrs*i{+k~hetRs(3F|m>z zVYqV%U7PmdeFlm>fj(pY!k?-Ps{7qExzUFP=Y8W2 zqTNmo*TW_^OS->xY|!Bh-g!7_$Mql$Gz48YdLr@sf4qA?EqZ6g+)k;|wP}zIDzllD zh+!TQ9*Q$v7!_p%BeL4I1hj?|dB&?>tOiTa=L5>3WORSmdu&1_)(W!=Fg&)JkeA3I zg}3%RK6CRK=dx`^9X*~`(5dXuQ{C(A$hKRf{vvypsNgO0fU2pUD{ley96lAlj5m6{ z9(Tl`e~S{}+j0UY_1IT;JT`2tG_aCA4nXhO zy)bOECwy6{MM~?q5}lUT)dLu(r+deCFI`ewtTcG0{(VQ;dn(@d3FVC|Eq_i=#*L7o z2*!WksQ*IO7*MUozZaGDe7T`|&;T)e%vb9Cf2xJ$EqMzYB=P!q->=`5_F>E|A`o~z zvh+|jn;c(J50clQs=al8n&h#n&=hS!QCJHp9@$DV>YsnPHL>~Y*S$}({s1Sw2G0(7 zpI~sky*+dMt2lXNLdD#{~aYFMHVGG4mS+9K-wnrxy>iry(}a4+5<2$K{=z zI%?PJ#lzuipVO>+*z)`0I0TzByd6LBHp>G6%-C@eL(9bh6v7+5Jy~|eHVjfB9fw0( zotRwKH!Tj^Vaea$Sw0ZIz+o;6<>;bce~YH29dla;rA2Jyfth4bn1^q+5?0%(j8h+- z^x1=~QCI<~5MNMQ{=LxY`l^OGoUkL{d`IB**4V{!L$j| zFqQ0Ad>GS-+GWtq2F*vc~Wf=!Ff0t1! zBiU1PEkgy}v#^145+mReLeMQG!-o5{!$2$XG3CA%V9&Zc(UO2@fLAOKD|zWvnWhIC z(=pxOn)nK9MqQ-rIS{2qC`AwXGSxF>mdlf~4IQ>8DV(^+ocx*(#?-BlbgXorGHLs^ zn+>$Sa5wcTy@&kgSEPKd3H))!e+#=Tb8c+82i9F{B#2FMafcb#K`8s*8Y~VCLGDPv z1}ZgC-M?x6YZ`0#Y$&q#Q3{b5nS6AHc#f=czB*ZaX$d@piT3OP*tK2ZdzNUjD?qQ< zoM#x>+Q(DL3(1*+1isGcJhAu-Fm-l2S$(ra#0)tt+H>~in4JRT(#l_%e_@?+FN0#! zcwanl%FTD+qKqu{ud+{~k3(Ae`76B6%Ku{n}C<6 zeM_${bh)<;L!05e-F#AEbhF933cpW-_?j>mY+(7*59tg`kZ9E{m%Qg{j2m8G#Qi)Nz5x9+D#_(t#ynCipl?Z_YRpP?$ ztZn(yKXy#1-B+v167U@CyVOL49tXg@0ld8kzZwK6ew#JxPnytMEx_BP4bZwR_@tVF2X+neCH(VO1YD~yfN}vf z6%-#&ut1@jjJGmX6@1>E#}wyA|8~Q4-;};Ax`(%s;N%n2ekKs4Vn^wM>Mjd3P+!GR zr=x=Ey_z>QJTxuce=0_ak)EH4^R8BwY&U{h=Nri@=G zh9G;`eDk&kjB12!0P#1sw;}+0IA7zl}WE z(l}(XYW<%se+g&a#BK5SL`8cL%~2dUx!`V~>b!*R8h@U51*%F5HHAuQU(3GrW~y)* z#K0v4@)1h)Z(6oLv6QmuqqHK*%Rs=8hu@V%(~{|uqNgeGnN$t~SO*sR!G&xer_dlD z%gyy%%bD2upjo$=bRRQ^1}9n6BJnQlvBp-knei@cf5G_>2(r+A5U#etkypW1@(y{{ zNeQT>-1y{%j2ng^MnL%zBKNPvnt^1Ru5cv`66U-lxi&*{qU=51!VSE~Q z(M)M_&8G<)>X_6iWJV(OM9M=*f2Vb={%!;&H1I$0*GV}PCc-SpN_QZRt;$t9=MMD@ z(}VbMe>ndG*Z`Lv(HT}D zG=LZ;-njaEqWqlSvKny+(BUak<1#j|S69%E5U+XqNWH}0i3JH)-8+8`| ze`Lj`^LEAQf2z}h&W-wo;K~uDMmv9Fh+RX`J zRM^WsUg%A~ZRC#z@b^btlDB{G{FM@7humn7s%mE6ehlkCj(p1LDg<~Olq^l=X5kXC z0?BmaqFtaHT#FhmpNf>x(FU(P;g<|Qfn-Fd``eldu)YMA^@dGY-w*4SOHP2tf7coe zQcYwtP8roU`iL05Ae-fq+KjG2a9><=zCXQLrl(jzak?7~ipcp;wO#jJCCB>xlN)xD?YB!#bes;Roqk*+;8wb`9=p_?!muIf=rv-)uI8k_*3jH};|6tsy=spS$*e;F8|b{|Kt zEuhyWb&X;LH|~8!?{AOYx-~pyJDR9%16}U}?VpQ6%Txe?!Z7=WohH4z0)$-??Ytcl z@Z?k?Gokc&2YFg9_WEAOcG4uvX)y0 z$o<|{EC6p?#ta-Ab&IC!PCKHMsND(t;ZuA%kkcRz8ZQ9%p%>VW5@>VCq{xreaiw$d95oO! zPGkr2$xcfHxdv0-e~D2Ls6VndU(;|G^^%Z3^LiG8gt9JCl6*de`~C>3;q4YaV@Z#o zd_g~F<#Brmny((a^4!&F=xC`Jwj&fY?q#gW!nh*c2${MKTeCjZRS-O973PYTDnY@Z zzBK5A$f^V5V~#bGQ>;A=$TI5_7*PPRU!e&{qbm!*I0585e-B;iS9~e0OO8%yGvsmM zx9U9jv_K2~X|t?5d0^Q3?3)g}YgWwGRz3QvJ{Wl>JiZDQ_-bf~&9`;9ck^R}D((0%0+#$~ZYjx0x ztt;u)Ag#mbe~T3j7?IFByDNR)n_V=deh!G)SgjU=sipwrrMU}=0+(rLRYLW-Aks=O zH}c06wug4k6~%G^D4Y}KT3=HYWw{-!C$V<3^;^Ic>a9cSN6K3h4O7gmg9r8E_{YlF z(0b+r<^d0_U-*3Tx>rv4P&rFM<_n^m$UM#9n%n+1f14EbBb}!*>CnQS$k5*#tuwzc z24|-u#W7PZbK!?sX}6&riDvGKVbltO-f9wKp-)JMqk;+G7yI^ujg$AonJJ3mP(F+{ z&C(Lj)YSbF(EgaQ9RrnYWk%zK@CO83!DZIE=V~1gaK%oqxs^RJ+dXGPiEz5>==Ap`TUaP-$H@?rbZYL-xa!P6+0 zncOx?kJg)z=UE0JdDxwHkmtzMuARnGf19vxV+d1WJ6#sI3piO;aKjt%dwsMap`or` zS49RetXB{2$1#4=+CNxzf0GZ=Fv~s>O%KMIyxRBI7z5ye`W`5 z;^jcY#-A}ZbG#%32#rH zcFn{U68e7Kc`QgffcOL&*h>3;e@iG&{qDJOf1dEXGdoGiTjpsK^()WSEP`K}w$nP- zTakpvTtT&ijX>GIg4%?ae`8D6`7Q{{KlMryuwv!rVCeE`*#n`b%HI(-7dWtCp5k?^74)46=?5JFkrY1Lj^7v`It2<~(bdqVeXKRd-lR^~1W!Ycl(Kpj9 zX+XEQ=ECeQxgN>%@wjA6e{_11bnSIQ{bOr?nlTxbAZqP_T2~OkM}8yxI%Xoe?K!B=42j_gdr_f zXc*vzNY*<;rRD0`dGeLzKzlt(4DNMOp-)#9Pf9{qPwigH43C|uQU%`U+jNc#VWw$a zjV;Kq(!Z}1EQ#a~<>s|4>py zg1O@&kX$gewr;m;BIT+cIz){i{c>Kyy?7c*QTt3~X_aW68nPFm#D(CTUTgLy<0rL` z^G^W*(OuUm4o*%qz_g3HpC?TLwABh(Gnl%0(8OGeJdL09e{3$DuS_}lfLmFr)8WH3 zF)0C2#0;JIq37i|rZ4F}J74}h4scGF zD?@GLU`C5TovQno40h;ydrbDh1_g@)D{eL`^oFK3T{-aE%5}a#)x!FACCnJbJaB z@v#lne`h|V4mePfzA+hRJ-;p@*|F0B>aGy=p#F6vI7ces`LbEl5Z2S_-6Y@Y`O!8y z=C_cQb=6pT>pq!tcxnq>?aXmV#?*+-)OM+o>hJR5IIPuB`@sQny(o?d!q*)okX#e2 ze0z#WSRgB>wMf}KS60OPL0qbmAN>ArWh=o4OD9??&c*mI0w1@DV7*6?Cn8gm7!Am?uZngpc#eh8bRIp6|UFR#&e{LY)f;V%We z1N0deau{4xcC3>;IE0LE42X}%i6SFRKkme01fs0sC@jH&3(d%yu?3V&n*g6WDo)}a z!RD#IA<4;@C9&EsE3v+$NX475&fJvce|}lDv|_Jw%1_7!abg?eH(&&!;!IgnE38($ zl8m*!oM5oYrCc8lr8F1Y;nZA4>FS3R?&QO5i0z7K_o7|Gku(=LQ)zYAMw4O5 zx*6M)dR62(!4PlFrW~dVH5G<-Ty+baQv=<}e+68j+mL%Z5DSTRq{W;`KhQ*0e_c5~ zk}63qUmVMcR4B+8Fc@*TDGY9a8wpZ<0xAkcJ^1j`9D}l%V;d{!h)^m4p1gsx_a57th z#F;%mP`zTPwY&*7P<9^C{u#)%e@G%0!THUb5hv@3m<5KiMpNO3Q?Pt$N$D$pMNOqY z=E1CFNUjSFy_OLQdj@!wwZ@ICl;C~)Gfwnwev80m3zs7&kt4{S0n%&JW1$)%&Mk|F zDJ;;zDaPC~)nRSH+Q^tA6gwpHYft=PtNp+(jl5`Pn?K8S}iuo^Mo&fg}8HmT-ig@^<`e z-AkmVD6JGY?slxp*QGl5eZxj&{E%+LKonmCbpjy*lPupDHP42VZ3Z_^Gvbkddv*0G z^1YpaPV`7OrNL+&$ZkWQf8N->h526DP$t7|$&G42VDtMmS1wc^f&2oT%^4$}iILg2 zRdTFCKfP_IBdP}jMZwbD{1<3}C}xO#X_=Tb-2kD~@1=DImPN|;XsU*QU~`|1|MJxO z97u(W!;N3AlQfQIZ1LqBS>XIu%r7r*Jbf0m)`1GeA3<0ymF z7ot#MdVto8t1u|1Ws9?EOLB=LVFQgZVaq;xw1y$l(edNYfhxQ<>1S3B=D!M(u*@nQ z*Bq7Z4dU;|fo8U~Y{L6!`_{lnDs`HR`^%>k_07+-)QhU-YawfA(l0Mt#Dt_tBvW?Am6q)`!_B1^L6TXi}p%52NuY5u^S*tqArI z*^4v(QJ+Z!I?$4zy!X;r?>)hzU~t0RQH@GHhy=b<=&(Efw#>#~J6sxOq^q_o`nLC2 zN>mJ^W*i%WRJ*!bV1HAWuoX}>%DDUn5>&rp7%Yn|0#Kj-f32+pGpTvtUj4bASuhT% zS1L4s)%UYUqqTuwz4GW5=mK`i(XV7?nP?&`Xz8(m18~8HpYK_6CK{6b3zdGinkm}0 zf`gM-wS1tx-c(g$Zso?g;Bzwy!e_ObTzAF%o?tk=>TTPbqX1*e0YZY3_HrRWF^o{k zL8prPy%j&tfA?(&bW6GmlI=AlIXB>z8|B&!Qgr9|a~-_Dfs!b+03AxQhP+#-%V%1y z=PHaOKJ;1Iy_spPH(=;64E*LK`zi&Rw^OhVsBM}hktB`A6?QvhHL(Ngk&+~Ri15qG zfh@+K;ucU3vGyU976dwJZmv@-H8K?L_$1Q3>0| zcS+|4f71PuGd7;S`59QbPjmT(2Tr<_K0|*s3{rKc_+Bu3&Z?VEg7Td~=Ii8dsR|ab zE0n9tGZrRFP^oz| zO%MYB3nI?$HRG<_O-pIO{tVyAW_0^D7~rGpwkaZ}&i zv#-h!LN|+MXsird_^pwTVBRAK0jtYU}0ZYil-46DAY7GwAb1wo$)nC zan&nd^Y@O}O3j!=%@W$A;(ErRc4n5|AYxRe_OXr>T`os?a>=-^H4kqc`d6+Ae@EMT zgsJA>!NN9VWHQ}m&Efgc89sw)r2*CbMvIG5tZ&&_zjD;GrkKd#{VMS6Z^J^YOva*c zKY*?eN!dgnU}`%|9fK0N{ZI8`}=5ruu@PRgCSd zfbBSqnoBtpE8(GVJtaTuTa7*If9{>7>@$9<_E(82pTJCs+R906(xr9h5j(s4jHya5 z(kGv59-0d!A`O&?I}37W$$>K9+Odiexh-P{wZxvLhS9yDU%29+*)a@IS$KM+CrjWs zAYixvzWDm#0gM_(p?oC_Py$1nPuM87jVqQ+VQ7Ua@ltwb7kM{F}fBk6MmHaWI zHCf9SMtYTon@HA~mBeX#oO3^pvo9X?nY(uOxo<{i?dNp%nv{5|AT)(Hu=c4_exSNL zRZD?3_^SB`HYVPr@#KIHPOC?&w6;B8KphCRi~W`w9HS`YP5Pk&Xbxs$j+u}RCN}sJ zDvFgM(YyrQ-Sl=QS9=5Tef3y&wQQG<^0zN$% zL}i>wJ8Q3rB1=`MTkW;00-&oDNGf^7s_>5zoF^j2mE=hW^^5!+{c9MVEvVjlKebM? zrY5x-5hlv8X^#?sGg8E;;f^oIdd{I+kfP;OTe!{v9M7zFYihe{iP98=b@)A*STkg4TE0+SbYj^D9I3z9kDPNzLL#a6i0g{T-7Q zVIGE7WkfXBOxRJRh&5=HX^z~2w>h<~G$9u}wz^8lmgv!qf4G1m{;(SooG@eSDpL#a z0U}4aZdEn)*T2#Gaz!01lm}c~Z~&f5$N&r@rpB$e_Cs2eVfXw+AE;c&wG2WB$wm3Z zN~r3edrvn|FKt97M$cue->X|62ng8YT5g?3%t!vY(1z z<~uaz%pU{0K=yTe{=USN2{cxp#>KNw5)gpgP-B9 zDYpZSb~D3|Ky2%HDwMNCF%?9;57*qaEUb}@*H7nH-n1B>keLKuPp&3LSv_I?C`-I9 zU)eCRvcCi6C@VtRm&2~{E8k0@$nEO0`f#0%qycFAWdfwdD-}Fjytj@4@U6Rp!ACOa z1PmE1e+??{5#BTpv=T=|6A3i7h_iK3U7~trlEt9AThO-z3uvi~K2PAUF1n+Jf17$U z4pnKC-(vW9knwfv{hQ>?%eaaT&;e*EfQWs6IM@guqkzaw=Sy^nXHw_wvM^A?OEyy` zodfSn$58aXYL&mG*g>G}#Jc)P6a0WX7G{V4e-w%O6l|3gz>JezcE-(JF3PIGq;io; z+4!l_Wv~2WVF(W&VT2hT744uS5zKWcj6es1IX?(_i^JbJUAk6*4&`qGvk@h>k$TSk zY{X9acClt?(_VMQ%?y*_Pb9p|l2cn8Cyhk^G`eiWwUjl9F~o|5qPO7HSB6F3P~D4t ze@|Ev5es(q&*N_ynvBu8{w(^2cTf;p@HJ;-0-`63#H@>g4K`~P%EJ9?C)4L7sKE_M zd81p=Dpl`Lk^tWfHSI&m5dHFqXOKcM)knLQp&XeT%cKh8BKqi#JLPOWO zAc4Lw8{7D!KEpn>=m+36k$;faBt4lTf9&0GI~;Qg#kOX|&TFjy+RMFk1s0wlagSa- zw?CZJf$c6zFU!YyrkqgTD?d&ppusjrUiGVdtB`eQ8UcULX6Gyj3xO%}vi;zISb{4L zvwoAK5F?;|lE46FX&DjR+#}%r+t|18}Hco%sR462^$5uX* z_Sxp~O|s;h3ndSblru4eMTT~q$xX}fQY8dgsQ)FSfD$XDJt(pK(RE=V| zl*J^6F5&9H{yrHZBSsDFa9*0hf004k$~EA<<=-ap>;oLh;;^9o!&w+n?Z;D_D|V>W zNX45Y6iEUXCRLXk0z*i0oOYVA=<Q|B4C9T< z7g7^z-lfZIMf2^`j=heoPf@=ZO4=oeHG(WLjUrGVq+#0``m9zR{xql&u~g@wBy3L3 zP@UK0wB)~7+)$e0Zwv#G9yAD%WX9en#i!Gu-lgqA;n8G#=u_EYZwo--n-sdLb{o+D z$R{Rn1)pPd%QXKkV`}>Pe@V>G6IuC)u+Nx-9thb9?swzEH%TC=9j435k7Zh((3+XA ziScw@yQ49jJ7rN?kdY^KlI)L&$MQ&)v&`cBc)GlN6A#i9I%-mJXF~q?3c}Y zZ7OsA>BjUvw7(Nk(p%snsIP8vS+B6t933}HHfov?s_Tf1slA$Gf1z5mkk!jg2|35; zmWj^hh;O(0>Fg!}k`z{=0T`kPi6crdesRq#QORe?@vF7V^1IA``dx-!UeLc@{_!5& zeud|%BH?GFn%1&{t@X2Q%B_`z17Gov?T^gF4>ZTXQ9^O`s2Q3o-E!}h6$ZF;UiX5% z=b*?vLAZ{jT*QJ?e~efo&Q`lEROk4o!uI0ivXK7icdyqkUHaY#pT;fr2UK$k6`&#L zY>i?Q>9^SLD-YL6o|y)|n#4+{oU_g_&>ba@`WPPD`Adj|Q*Z=huaTE+McAkW#KV$| zI>zHPX(O56@|iw_!OVU^pYil+4bdOj4e#4S{t__ONGojOe>N^Q8wPCrdx(696XCtJ z$`>w>&)>rO(SJVu=k0wSBcO4)##i&1Sk_n*(s#dhV?IA1@Si8;S{Cfd?M#hx)-aT) zPd-3wqjm2>s%p!%YFEDcUP%OtbuHyGUHsByypKhG;>LU7(G6}YZsDBrkKyhT^z!U|){nvuR z*L3be?jGqtInoHRqhwEmVq*grOWO%`#NP&z3}I5u0#~cZPVKcjF0xU@Hqv}+|vza9uY<#!yG8jhAGCtY$Y z9tI8?`^r-kbLm?+JgDb}g^Q!}(>O@7V$YMqY4!SA%Fj$G?J{lX78;L6J)Lki z!b6@dBkp8hKMM<%N@9NfA;9USb8oCw+?XOiK0bV$no+3v<7yg3B$jzyGmTqq3JaD= zK0Ump+-F+)eJ3#@F;DO9Sx-lq%|@6KV{*Iu2`2M`1^FlN|ScO9rie22KL z{57F~esI25&o@=baUXX6`oHXzp;77F$C>>s6|;aOSEZnYSGf-_|K*T?705D{Uq#Zf zfAQft2<-#M{OCz(I^sw`4+_9mkl$&6IkP1s>+A2+R<8Xt&Sn1tdW zlA?>}@Pxj&;aVDqzxwp`=3TUy?6%}M_u%P6er=>s{P?KcRu2(r@%gAT?Q|?qe`W-9 zic~woEuk7)U}D}|7qiU;n??`qw0TKx&}CliySE8<2iHQysqWH)Pe~?ebUX8_iX2vk zPk+5fLK#huufG^gju^*^e81uaMaZXuL{{TY6f`(KrVK1uU-chj=Z0vC68BCONb5(D zM{ME0e(j_JFrB?^)TbrJdhooFe{suLg~|8j3eWmxd=ByJ5y!MQ2ZOlV?17FMy|}&( zBME=X3kU0FCH91P+W`>V7#Fz&@j92Ch5nk6>o@yYJXLyn#PH+Ut*wa$iA2Gn%mOH# zrkzJ!Up7{c5`lgPqBl{Ff{S1U?Xrz#XWVLw7H#v}&q5HiwBh_*f0+^~YT2;_dJYXV1(Ye%aj?Q7mwaV|51K7bzNb>OY)}D@ zs(#>p2BqJ!zf*A~*!4|0rd(MuH_0ksv9qmoN7+K=#dO4S01&v(lAF}%ZoE9HzdGnI zgxo<<)JNIKeW3a0>jU}VpqY`&GKwE*xd^{*x*=Y*@mp+|f)%e(f3P5F@DnFeNC$@N z_Zmqsgyi|V=7}(@$che2>_1=OErRYlu8XT-?}bAw#uS;r@`*7dObBWgpNe^fPp6wl zO3*dx4^0I6wvvHnoo5K8G!w!BFNzOWKieq|${AgR6Ng-AUt5%?L=sZ7MB#}2_&kAA z6Og#^=uu)eeYj;oe{UZKmTZ2FLWLAPn4P=m$i78RiK9~<42)8xgU-1n4W)Hz`55bR zx(b`;CDE#jAL;h*9Jh=V1K)5F&SYb`Qd2`h(Aqe0n3b#P8Ruq(6$+=gz*6Jd3Rx~S z)^Q>xBLzjb9OWM_R>tgG;ZU~$W>*I&b#BL?T)en4nYfgKf4UB*Rz4AD)zzo*VQhAc z+#pT9jgy_X2E{5Oju}ss@iv#VZz-PU`S~?zoQ#2!rlIu8{O23Iq2V|Q+L`N(ZYQ;8 zn0ER?#&y3nO;$ahG{f5{nfxv6JR{)WF*_-l%_W4G5P3lO;lgLz2^^csR?YYfRVsW~ z7VeCp8}`Bbe^@CkRakf6o9n6eRqS4@+x@1Irr>aG<1yXrpZDD;V@e{FgCP)g_T0K6 z(VI>c!PFv`gWX}sr&LS2{QW&ez^pQ~>MNt&-l9uvNaKhjP9e8fJ?8(W1*83Z0CbWm z7%)c*=u8#OH4>7=pB(59sDE$h3r(PBVun-K88m_&e~xg-S>|T?+hvo7fc}~ewyZk@ zq9mAv>4%RdeIM!MDk7aL5IL~uFJ@0bPy4J%(roo`uU zGsk^{P!5tTJ0vbqksn3}zzDq|3_n}Qp{!(yHFT;c;Fi9BMX-+j+hb*N4BT=_#3+8A z$Trvbe{p`Ii@7MQUDG4h3hOwCLi;aP8&^dhL5;noLT=RN<2FaHHj&duJMzdG9)ZaN zjd>R@C_JeqE#oLD;p}vUUCJCh>X0IBGew8yx}kYz)+hQ1m3Y@)bF3nMunq1}z$Fgd zDIR?I__e7u2Z7kOarDgv6iHxyigSU)6xmF%f9$xAEhi}#4||(%+&U4XMaCG~v%iu_ zFWFXnU7T!-YJ?pdaRny_6AS!R1u%d>b`JI;(dfx}U*Quosdkd8>d3(Ofwb^}or;@Y zr#1bY^&HlrEmB%aki9;-MSJWgV0*&Mp8>aSXF$$3z}B0gnJeXtqPBHWxo!+LwHYg^nc$ZB|?<0pz4{3EptmEzf7b#<~t`3vL?6fdIB3jQ)MzTn_trt zWgUZAUBAn+{D19z*OKE%lHmJ&McTB@Ro5{qq1E(u-$7CfkOWC^XCEL*5RxDS$+f<3 zzW}H}m049&wPrJW-IX*Fi11JzuEN~|w_CdcIWq~+w@(-y=mG!?m!0kcND4&g0sv`a zZ*DO*mtgM#6qj1-0uT!T000000000000fsF?*cdh?Uz^Y0yhEOmyhoPAO<|_0ssI2 DkpduH diff --git a/builds/crx/script.js b/builds/crx/script.js index 44947f933..3f0b43b0d 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -1990,7 +1990,8 @@ args = bottom ? ['bottom-header', 'top-header', 'bottom', 'after'] : ['top-header', 'bottom-header', 'top', 'add']; $.addClass(doc, args[0]); $.rmClass(doc, args[1]); - return Header.bar.parentNode.className = args[2]; + Header.bar.parentNode.className = args[2]; + return $[args[3]](Header.bar, Header.noticesRoot); }, toggleBarPosition: function() { $.cb.checked.call(this); @@ -5490,10 +5491,10 @@ return QR.status(); }, focusin: function() { - return $.addClass(QR.nodes.el, 'has-focus'); + return $.addClass(QR.nodes.el, 'focus'); }, focusout: function() { - return $.rmClass(QR.nodes.el, 'has-focus'); + return $.rmClass(QR.nodes.el, 'focus'); }, hide: function() { d.activeElement.blur(); @@ -5760,7 +5761,7 @@ return list.value = g.VIEW === 'thread' ? g.THREADID : 'new'; }, dialog: function() { - var check, dialog, event, flagSelector, i, items, key, mimeTypes, name, node, nodes, save, value, _ref; + var check, dialog, elm, event, flagSelector, i, items, key, mimeTypes, name, node, nodes, save, value, _ref; QR.nodes = nodes = { el: dialog = UI.dialog('qr', 'top:0;right:0;', "

×
No selected file×+
") }; @@ -5825,8 +5826,12 @@ $.add(nodes.form, nodes.flag); } $.on(nodes.filename.parentNode, 'click keydown', QR.openFileInput); - $.on(dialog, 'focusin', QR.focusin); - $.on(dialog, 'focusout', QR.focusout); + items = $$('*', QR.nodes.el); + i = 0; + while (elm = items[i++]) { + $.on(elm, 'blur', QR.focusout); + $.on(elm, 'focus', QR.focusin); + } $.on(nodes.autohide, 'change', QR.toggleHide); $.on(nodes.close, 'click', QR.close); $.on(nodes.dumpButton, 'click', function() { @@ -6130,12 +6135,8 @@ input: input }; $.on(input, 'focus', this.setup); - $.on(input, 'focus', function() { - return $.addClass(QR.nodes.el, 'focus'); - }); - $.on(input, 'blur', function() { - return $.rmClass(QR.nodes.el, 'focus'); - }); + $.on(input, 'blur', QR.focusout); + $.on(input, 'focus', QR.focusin); $.addClass(QR.nodes.el, 'has-captcha'); $.after(QR.nodes.com.parentNode, [imgContainer, input]); this.setupObserver = new MutationObserver(this.afterSetup); diff --git a/src/General/Header.coffee b/src/General/Header.coffee index b63b75b8e..17ec8dc4c 100755 --- a/src/General/Header.coffee +++ b/src/General/Header.coffee @@ -330,7 +330,7 @@ Header = $.addClass doc, args[0] $.rmClass doc, args[1] Header.bar.parentNode.className = args[2] - #$[args[3]] Header.bar, Header.notify ##Fix chrome? + $[args[3]] Header.bar, Header.noticesRoot toggleBarPosition: -> $.cb.checked.call @ diff --git a/src/Posting/QR.captcha.coffee b/src/Posting/QR.captcha.coffee index 93ad03274..3d821c87b 100644 --- a/src/Posting/QR.captcha.coffee +++ b/src/Posting/QR.captcha.coffee @@ -21,14 +21,9 @@ QR.captcha = input: input $.on input, 'focus', @setup - $.on input, 'focus', -> $.addClass QR.nodes.el, 'focus' - $.on input, 'blur', -> $.rmClass QR.nodes.el, 'focus' - <% if (type === 'userscript') { %> - # XXX Firefox lacks focusin/focusout support. $.on input, 'blur', QR.focusout $.on input, 'focus', QR.focusin - <% } %> $.addClass QR.nodes.el, 'has-captcha' $.after QR.nodes.com.parentNode, [imgContainer, input] diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index b2d7fd437..118edfcd0 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -114,15 +114,9 @@ QR = QR.cooldown.auto = false QR.status() focusin: -> - $.addClass QR.nodes.el, 'has-focus' + $.addClass QR.nodes.el, 'focus' focusout: -> - <% if (type === 'crx') { %> - $.rmClass QR.nodes.el, 'has-focus' - <% } else { %> - $.queueTask -> - return if $.x 'ancestor::div[@id="qr"]', d.activeElement - $.rmClass QR.nodes.el, 'has-focus' - <% } %> + $.rmClass QR.nodes.el, 'focus' hide: -> d.activeElement.blur() $.addClass QR.nodes.el, 'autohide' @@ -409,16 +403,11 @@ QR = $.on nodes.filename.parentNode, 'click keydown', QR.openFileInput - <% if (type === 'userscript') { %> - # XXX Firefox lacks focusin/focusout support. items = $$ '*', QR.nodes.el i = 0 while elm = items[i++] $.on elm, 'blur', QR.focusout $.on elm, 'focus', QR.focusin - <% } %> - $.on dialog, 'focusin', QR.focusin - $.on dialog, 'focusout', QR.focusout $.on nodes.autohide, 'change', QR.toggleHide $.on nodes.close, 'click', QR.close