diff --git a/builds/appchan-x.user.js b/builds/appchan-x.user.js
index 2acb380aa..4f6c9fabb 100644
--- a/builds/appchan-x.user.js
+++ b/builds/appchan-x.user.js
@@ -18286,6 +18286,11 @@
Main = {
init: function() {
var db, flatten, pathname, _i, _len, _ref, _ref1;
+ if (location.hostname === 'www.google.com') {
+ return $.ready(function() {
+ return Captcha.noscript.initFrame();
+ });
+ }
g.threads = new SimpleDict;
g.posts = new SimpleDict;
pathname = location.pathname.split('/');
@@ -18300,6 +18305,8 @@
return 'thread';
case 'catalog':
return 'catalog';
+ case 'archive':
+ return 'archive';
default:
return 'index';
}
@@ -18357,7 +18364,7 @@
});
},
initFeatures: function() {
- var href, init, _ref;
+ var err, feature, href, name, pathname, _i, _len, _ref, _ref1, _ref2;
Favicon.el.type = 'image/x-icon';
href = Favicon.el.href;
Favicon.SFW = /ws\.ico$/.test(href);
@@ -18371,6 +18378,8 @@
Main.setThemeString();
Main.setMascotString();
switch (location.hostname) {
+ case 'a.4cdn.org':
+ return;
case '4chan.org':
case 'www.4chan.org':
g.TYPE = 'sfw';
@@ -18397,99 +18406,38 @@
return location.replace(URL);
}
} else if (Conf['Loop in New Tab'] && (video = $('video'))) {
- Video.configure(video);
- if (!video.controls) {
- return $.on(video, 'click', function() {
- if (video.paused) {
- return video.play();
- } else {
- return video.pause();
- }
- });
- }
+ video.loop = true;
+ video.controls = false;
+ video.play();
+ return ImageCommon.addControls(video);
}
});
return;
}
- init = function(name, feature) {
- var err;
+ if (Conf['Normalize URL'] && g.VIEW === 'thread') {
+ pathname = location.pathname.split('/');
+ if (pathname[2] !== 'thread' || pathname.length > 4) {
+ pathname[2] = 'thread';
+ history.replaceState(null, '', pathname.slice(0, 4).join('/') + location.hash);
+ }
+ }
+ _ref1 = Main.features;
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ _ref2 = _ref1[_i], name = _ref2[0], feature = _ref2[1];
try {
- return feature.init();
+ feature.init();
} catch (_error) {
err = _error;
- return Main.handleErrors({
+ Main.handleErrors({
message: "\"" + name + "\" initialization crashed.",
error: err
});
}
- };
- init('Style', Style);
- init('Mascots', MascotTools);
- init('Rice', Rice);
- init('Announcements', GlobalMessage);
- init('Polyfill', Polyfill);
- init('Redirect', Redirect);
- init('Header', Header);
- init('Catalog Links', CatalogLinks);
- init('Settings', Settings);
- init('Index Generator', Index);
- init('Announcement Hiding', PSAHiding);
- init('Fourchan thingies', Fourchan);
- init('Color User IDs', IDColor);
- init('Custom CSS', CustomCSS);
- init('Linkify', Linkify);
- init('Reveal Spoilers', RemoveSpoilers);
- init('Resurrect Quotes', Quotify);
- init('Filter', Filter);
- init('Reply Hiding Buttons', PostHiding);
- init('Recursive', Recursive);
- init('Strike-through Quotes', QuoteStrikeThrough);
- init('Quick Reply', QR);
- init('Menu', Menu);
- init('Report Link', ReportLink);
- init('Reply Hiding (Menu)', PostHiding.menu);
- init('Delete Link', DeleteLink);
- init('Filter (Menu)', Filter.menu);
- init('Download Link', DownloadLink);
- init('Archive Link', ArchiveLink);
- init('Quote Inlining', QuoteInline);
- init('Quote Previewing', QuotePreview);
- init('Quote Backlinks', QuoteBacklink);
- init('Quote Markers', QuoteMarkers);
- init('Anonymize', Anonymize);
- init('Time Formatting', Time);
- init('Relative Post Dates', RelativeDates);
- init('File Info Formatting', FileInfo);
- init('Fappe Tyme', FappeTyme);
- init('Gallery', Gallery);
- init('Gallery (menu)', Gallery.menu);
- init('Sauce', Sauce);
- init('Image Expansion', ImageExpand);
- init('Image Expansion (Menu)', ImageExpand.menu);
- init('Reveal Spoiler Thumbnails', RevealSpoilers);
- init('Image Loading', ImageLoader);
- init('Image Hover', ImageHover);
- init('Thread Expansion', ExpandThread);
- init('Comment Expansion', ExpandComment);
- init('Thread Excerpt', ThreadExcerpt);
- init('Favicon', Favicon);
- init('Unread', Unread);
- init('Quote Threading', QuoteThreading);
- init('Thread Stats', ThreadStats);
- init('Thread Updater', ThreadUpdater);
- init('Thread Watcher', ThreadWatcher);
- init('Thread Watcher (Menu)', ThreadWatcher.menu);
- init('Mark New IPs', MarkNewIPs);
- init('Index Navigation', Nav);
- init('Keybinds', Keybinds);
- init('Show Dice Roll', Dice);
- init('Banner', Banner);
- init('Navigate', Navigate);
- init('Flash Features', Flash);
+ }
return $.ready(Main.initReady);
},
initReady: function() {
- var GMver, err, href, i, passLink, styleSelector, test, v, _i, _len, _ref, _ref1;
+ var GMver, err, href, i, passLink, styleSelector, v, _i, _len, _ref, _ref1;
if ((_ref = d.title) === '4chan - Temporarily Offline' || _ref === '4chan - 404 Not Found') {
if (Conf['404 Redirect'] && g.VIEW === 'thread') {
href = Redirect.to('thread', {
@@ -18520,20 +18468,17 @@
rel: "stylesheet"
}));
$.event('4chanXInitFinished');
- test = $.el('span');
- $.addClass(test, 'a', 'b');
- if (test.className !== 'a b' && Conf['Show Support Message']) {
- new Notice('warning', "Your version of Firefox is outdated (v26 minimum) and appchan x may not operate correctly.", 30);
- }
- GMver = GM_info.version.split('.');
- _ref1 = "1.14".split('.');
- for (i = _i = 0, _len = _ref1.length; _i < _len; i = ++_i) {
- v = _ref1[i];
- if (v === GMver[i]) {
- continue;
+ if (Conf['Show Support Message']) {
+ GMver = GM_info.version.split('.');
+ _ref1 = "1.14".split('.');
+ for (i = _i = 0, _len = _ref1.length; _i < _len; i = ++_i) {
+ v = _ref1[i];
+ if (v === GMver[i]) {
+ continue;
+ }
+ (v < GMver[i]) || new Notice('warning', "Your version of Greasemonkey is outdated (v" + GM_info.version + " instead of v1.14 minimum) and appchan x may not operate correctly.", 30);
+ break;
}
- (v < GMver[i]) || new Notice('warning', "Your version of Greasemonkey is outdated (v" + GM_info.version + " instead of v1.14 minimum) and appchan x may not operate correctly.", 30);
- break;
}
try {
return localStorage.getItem('4chan-settings');
@@ -18543,7 +18488,7 @@
}
},
initThread: function() {
- var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
+ var board, err, errors, m, postRoot, posts, scriptData, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
if (board = $('.board')) {
threads = [];
posts = [];
@@ -18572,6 +18517,12 @@
if (errors) {
Main.handleErrors(errors);
}
+ if (g.VIEW === 'thread') {
+ scriptData = Get.scriptData();
+ threads[0].postLimit = /\bbumplimit *= *1\b/.test(scriptData);
+ threads[0].fileLimit = /\bimagelimit *= *1\b/.test(scriptData);
+ threads[0].ipCount = (m = scriptData.match(/\bunique_ips *= *(\d+)\b/)) ? +m[1] : void 0;
+ }
Thread.callbacks.execute(threads);
Post.callbacks.execute(posts);
}
@@ -18605,7 +18556,7 @@
return;
}
div = $.el('div', {
- innerHTML: "" + errors.length + " errors occurred. [show]"
+ innerHTML: E(errors.length) + " errors occurred. [show]"
});
$.on(div.lastElementChild, 'click', function() {
var _ref;
@@ -18627,7 +18578,7 @@
textContent: data.message
});
error = $.el('div', {
- textContent: data.error
+ textContent: "" + (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details')
});
return [message, error];
},
@@ -18638,6 +18589,13 @@
}
return Main.thisPageIsLegit;
},
+ ready: function(cb) {
+ return $.ready(function() {
+ if (Main.isThisPageLegit()) {
+ return cb();
+ }
+ });
+ },
setMascotString: function() {
var type;
type = "Enabled Mascots";
@@ -18653,7 +18611,8 @@
type += "_" + g.TYPE;
}
return g.THEMESTRING = type;
- }
+ },
+ features: [['Style', Style], ['Mascots', MascotTools], ['Rice', Rice], ['Announcements', GlobalMessage], ['Polyfill', Polyfill], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['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], ['Quote Markers', QuoteMarkers], ['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], ['Comment Expansion', ExpandComment], ['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], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Show Dice Roll', Dice], ['Banner', Banner], ['Navigate', Navigate], ['Flash Features', Flash]]
};
Main.init();
diff --git a/builds/crx/script.js b/builds/crx/script.js
index 486a6de9e..54680a7c3 100644
--- a/builds/crx/script.js
+++ b/builds/crx/script.js
@@ -18301,6 +18301,11 @@
Main = {
init: function() {
var db, flatten, pathname, _i, _len, _ref, _ref1;
+ if (location.hostname === 'www.google.com') {
+ return $.ready(function() {
+ return Captcha.noscript.initFrame();
+ });
+ }
g.threads = new SimpleDict;
g.posts = new SimpleDict;
pathname = location.pathname.split('/');
@@ -18315,6 +18320,8 @@
return 'thread';
case 'catalog':
return 'catalog';
+ case 'archive':
+ return 'archive';
default:
return 'index';
}
@@ -18372,7 +18379,7 @@
});
},
initFeatures: function() {
- var href, init, _ref;
+ var err, feature, href, name, pathname, _i, _len, _ref, _ref1, _ref2;
Favicon.el.type = 'image/x-icon';
href = Favicon.el.href;
Favicon.SFW = /ws\.ico$/.test(href);
@@ -18386,6 +18393,8 @@
Main.setThemeString();
Main.setMascotString();
switch (location.hostname) {
+ case 'a.4cdn.org':
+ return;
case '4chan.org':
case 'www.4chan.org':
g.TYPE = 'sfw';
@@ -18412,95 +18421,34 @@
return location.replace(URL);
}
} else if (Conf['Loop in New Tab'] && (video = $('video'))) {
- Video.configure(video);
- if (!video.controls) {
- return $.on(video, 'click', function() {
- if (video.paused) {
- return video.play();
- } else {
- return video.pause();
- }
- });
- }
+ video.loop = true;
+ video.controls = false;
+ video.play();
+ return ImageCommon.addControls(video);
}
});
return;
}
- init = function(name, feature) {
- var err;
+ if (Conf['Normalize URL'] && g.VIEW === 'thread') {
+ pathname = location.pathname.split('/');
+ if (pathname[2] !== 'thread' || pathname.length > 4) {
+ pathname[2] = 'thread';
+ history.replaceState(null, '', pathname.slice(0, 4).join('/') + location.hash);
+ }
+ }
+ _ref1 = Main.features;
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ _ref2 = _ref1[_i], name = _ref2[0], feature = _ref2[1];
try {
- return feature.init();
+ feature.init();
} catch (_error) {
err = _error;
- return Main.handleErrors({
+ Main.handleErrors({
message: "\"" + name + "\" initialization crashed.",
error: err
});
}
- };
- init('Style', Style);
- init('Mascots', MascotTools);
- init('Rice', Rice);
- init('Announcements', GlobalMessage);
- init('Polyfill', Polyfill);
- init('Redirect', Redirect);
- init('Header', Header);
- init('Catalog Links', CatalogLinks);
- init('Settings', Settings);
- init('Index Generator', Index);
- init('Announcement Hiding', PSAHiding);
- init('Fourchan thingies', Fourchan);
- init('Color User IDs', IDColor);
- init('Custom CSS', CustomCSS);
- init('Linkify', Linkify);
- init('Reveal Spoilers', RemoveSpoilers);
- init('Resurrect Quotes', Quotify);
- init('Filter', Filter);
- init('Reply Hiding Buttons', PostHiding);
- init('Recursive', Recursive);
- init('Strike-through Quotes', QuoteStrikeThrough);
- init('Quick Reply', QR);
- init('Menu', Menu);
- init('Report Link', ReportLink);
- init('Reply Hiding (Menu)', PostHiding.menu);
- init('Delete Link', DeleteLink);
- init('Filter (Menu)', Filter.menu);
- init('Download Link', DownloadLink);
- init('Archive Link', ArchiveLink);
- init('Quote Inlining', QuoteInline);
- init('Quote Previewing', QuotePreview);
- init('Quote Backlinks', QuoteBacklink);
- init('Quote Markers', QuoteMarkers);
- init('Anonymize', Anonymize);
- init('Time Formatting', Time);
- init('Relative Post Dates', RelativeDates);
- init('File Info Formatting', FileInfo);
- init('Fappe Tyme', FappeTyme);
- init('Gallery', Gallery);
- init('Gallery (menu)', Gallery.menu);
- init('Sauce', Sauce);
- init('Image Expansion', ImageExpand);
- init('Image Expansion (Menu)', ImageExpand.menu);
- init('Reveal Spoiler Thumbnails', RevealSpoilers);
- init('Image Loading', ImageLoader);
- init('Image Hover', ImageHover);
- init('Thread Expansion', ExpandThread);
- init('Comment Expansion', ExpandComment);
- init('Thread Excerpt', ThreadExcerpt);
- init('Favicon', Favicon);
- init('Unread', Unread);
- init('Quote Threading', QuoteThreading);
- init('Thread Stats', ThreadStats);
- init('Thread Updater', ThreadUpdater);
- init('Thread Watcher', ThreadWatcher);
- init('Thread Watcher (Menu)', ThreadWatcher.menu);
- init('Mark New IPs', MarkNewIPs);
- init('Index Navigation', Nav);
- init('Keybinds', Keybinds);
- init('Show Dice Roll', Dice);
- init('Banner', Banner);
- init('Navigate', Navigate);
- init('Flash Features', Flash);
+ }
return $.ready(Main.initReady);
},
initReady: function() {
@@ -18543,7 +18491,7 @@
}
},
initThread: function() {
- var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
+ var board, err, errors, m, postRoot, posts, scriptData, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
if (board = $('.board')) {
threads = [];
posts = [];
@@ -18572,6 +18520,12 @@
if (errors) {
Main.handleErrors(errors);
}
+ if (g.VIEW === 'thread') {
+ scriptData = Get.scriptData();
+ threads[0].postLimit = /\bbumplimit *= *1\b/.test(scriptData);
+ threads[0].fileLimit = /\bimagelimit *= *1\b/.test(scriptData);
+ threads[0].ipCount = (m = scriptData.match(/\bunique_ips *= *(\d+)\b/)) ? +m[1] : void 0;
+ }
Thread.callbacks.execute(threads);
Post.callbacks.execute(posts);
}
@@ -18605,7 +18559,7 @@
return;
}
div = $.el('div', {
- innerHTML: "" + errors.length + " errors occurred. [show]"
+ innerHTML: E(errors.length) + " errors occurred. [show]"
});
$.on(div.lastElementChild, 'click', function() {
var _ref;
@@ -18627,7 +18581,7 @@
textContent: data.message
});
error = $.el('div', {
- textContent: data.error
+ textContent: "" + (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details')
});
return [message, error];
},
@@ -18638,6 +18592,13 @@
}
return Main.thisPageIsLegit;
},
+ ready: function(cb) {
+ return $.ready(function() {
+ if (Main.isThisPageLegit()) {
+ return cb();
+ }
+ });
+ },
setMascotString: function() {
var type;
type = "Enabled Mascots";
@@ -18653,7 +18614,8 @@
type += "_" + g.TYPE;
}
return g.THEMESTRING = type;
- }
+ },
+ features: [['Style', Style], ['Mascots', MascotTools], ['Rice', Rice], ['Announcements', GlobalMessage], ['Polyfill', Polyfill], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['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], ['Quote Markers', QuoteMarkers], ['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], ['Comment Expansion', ExpandComment], ['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], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Show Dice Roll', Dice], ['Banner', Banner], ['Navigate', Navigate], ['Flash Features', Flash]]
};
Main.init();
diff --git a/src/General/Main.coffee b/src/General/Main.coffee
index 56be2a75f..d2b735c77 100644
--- a/src/General/Main.coffee
+++ b/src/General/Main.coffee
@@ -1,5 +1,8 @@
Main =
init: ->
+ if location.hostname is 'www.google.com'
+ return $.ready -> Captcha.noscript.initFrame()
+
g.threads = new SimpleDict
g.posts = new SimpleDict
@@ -12,6 +15,8 @@ Main =
'thread'
when 'catalog'
'catalog'
+ when 'archive'
+ 'archive'
else
'index'
if g.VIEW is 'catalog'
@@ -73,6 +78,8 @@ Main =
Main.setMascotString()
switch location.hostname
+ when 'a.4cdn.org'
+ return
when '4chan.org', 'www.4chan.org'
g.TYPE = 'sfw'
g.VIEW = 'home'
@@ -94,14 +101,20 @@ Main =
filename: pathname[pathname.length - 1]
location.replace URL if URL
else if Conf['Loop in New Tab'] and video = $ 'video'
- Video.configure video
- if !video.controls
- $.on video, 'click', ->
- if video.paused then video.play() else video.pause()
+ video.loop = true
+ video.controls = false
+ video.play()
+ ImageCommon.addControls video
return
+ if Conf['Normalize URL'] and g.VIEW is 'thread'
+ pathname = location.pathname.split '/'
+ if pathname[2] isnt 'thread' or pathname.length > 4
+ pathname[2] = 'thread'
+ history.replaceState null, '', pathname[0...4].join('/') + location.hash
+
# c.time 'All initializations'
- init = (name, feature) ->
+ for [name, feature] in Main.features
# c.time "#{name} initialization"
try
feature.init()
@@ -114,70 +127,6 @@ Main =
# c.timeEnd 'All initializations'
- init 'Style', Style
- init 'Mascots', MascotTools
- init 'Rice', Rice
- init 'Announcements', GlobalMessage
- init 'Polyfill', Polyfill
- init 'Redirect', Redirect
- init 'Header', Header
- init 'Catalog Links', CatalogLinks
- init 'Settings', Settings
- init 'Index Generator', Index
- init 'Announcement Hiding', PSAHiding
- init 'Fourchan thingies', Fourchan
- init 'Color User IDs', IDColor
- init 'Custom CSS', CustomCSS
- init 'Linkify', Linkify
- init 'Reveal Spoilers', RemoveSpoilers
- init 'Resurrect Quotes', Quotify
- init 'Filter', Filter
- init 'Reply Hiding Buttons', PostHiding
- init 'Recursive', Recursive
- init 'Strike-through Quotes', QuoteStrikeThrough
- init 'Quick Reply', QR
- init 'Menu', Menu
- init 'Report Link', ReportLink
- init 'Reply Hiding (Menu)', PostHiding.menu
- init 'Delete Link', DeleteLink
- init 'Filter (Menu)', Filter.menu
- init 'Download Link', DownloadLink
- init 'Archive Link', ArchiveLink
- init 'Quote Inlining', QuoteInline
- init 'Quote Previewing', QuotePreview
- init 'Quote Backlinks', QuoteBacklink
- init 'Quote Markers', QuoteMarkers
- init 'Anonymize', Anonymize
- init 'Time Formatting', Time
- init 'Relative Post Dates', RelativeDates
- init 'File Info Formatting', FileInfo
- init 'Fappe Tyme', FappeTyme
- init 'Gallery', Gallery
- init 'Gallery (menu)', Gallery.menu
- init 'Sauce', Sauce
- init 'Image Expansion', ImageExpand
- init 'Image Expansion (Menu)', ImageExpand.menu
- init 'Reveal Spoiler Thumbnails', RevealSpoilers
- init 'Image Loading', ImageLoader
- init 'Image Hover', ImageHover
- init 'Thread Expansion', ExpandThread
- init 'Comment Expansion', ExpandComment
- init 'Thread Excerpt', ThreadExcerpt
- init 'Favicon', Favicon
- init 'Unread', Unread
- init 'Quote Threading', QuoteThreading
- init 'Thread Stats', ThreadStats
- init 'Thread Updater', ThreadUpdater
- init 'Thread Watcher', ThreadWatcher
- init 'Thread Watcher (Menu)', ThreadWatcher.menu
- init 'Mark New IPs', MarkNewIPs
- init 'Index Navigation', Nav
- init 'Keybinds', Keybinds
- init 'Show Dice Roll', Dice
- init 'Banner', Banner
- init 'Navigate', Navigate
- init 'Flash Features', Flash
-
$.ready Main.initReady
initReady: ->
@@ -214,16 +163,12 @@ Main =
$.event '4chanXInitFinished'
<% if (type === 'userscript') { %>
- test = $.el 'span'
- $.addClass test, 'a', 'b'
- if test.className isnt 'a b' and Conf['Show Support Message']
- new Notice 'warning', "Your version of Firefox is outdated (v<%= meta.min.firefox %> minimum) and <%= meta.name %> may not operate correctly.", 30
-
- GMver = GM_info.version.split '.'
- for v, i in "<%= meta.min.greasemonkey %>".split '.'
- continue if v is GMver[i]
- (v < GMver[i]) or new Notice 'warning', "Your version of Greasemonkey is outdated (v#{GM_info.version} instead of v<%= meta.min.greasemonkey %> minimum) and <%= meta.name %> may not operate correctly.", 30
- break
+ if Conf['Show Support Message']
+ GMver = GM_info.version.split '.'
+ for v, i in "<%= meta.min.greasemonkey %>".split '.'
+ continue if v is GMver[i]
+ (v < GMver[i]) or new Notice 'warning', "Your version of Greasemonkey is outdated (v#{GM_info.version} instead of v<%= meta.min.greasemonkey %> minimum) and <%= meta.name %> may not operate correctly.", 30
+ break
<% } %>
try
@@ -251,6 +196,12 @@ Main =
error: err
Main.handleErrors errors if errors
+ if g.VIEW is 'thread'
+ scriptData = Get.scriptData()
+ threads[0].postLimit = /\bbumplimit *= *1\b/.test scriptData
+ threads[0].fileLimit = /\bimagelimit *= *1\b/.test scriptData
+ threads[0].ipCount = if m = scriptData.match /\bunique_ips *= *(\d+)\b/ then +m[1]
+
Thread.callbacks.execute threads
Post.callbacks.execute posts
@@ -275,7 +226,7 @@ Main =
return
div = $.el 'div',
- innerHTML: "#{errors.length} errors occurred. [show]"
+ <%= html('${errors.length} errors occurred. [show]') %>
$.on div.lastElementChild, 'click', ->
[@textContent, logs.hidden] = if @textContent is 'show'
['hide', false]
@@ -294,7 +245,7 @@ Main =
message = $.el 'div',
textContent: data.message
error = $.el 'div',
- textContent: data.error
+ textContent: "#{data.error.name or 'Error'}: #{data.error.message or 'see console for details'}"
[message, error]
isThisPageLegit: ->
@@ -305,6 +256,10 @@ Main =
d.title not in ['4chan - Temporarily Offline', '4chan - Error', '504 Gateway Time-out']
Main.thisPageIsLegit
+ ready: (cb) ->
+ $.ready ->
+ cb() if Main.isThisPageLegit()
+
setMascotString: ->
type = "Enabled Mascots"
if Conf["NSFW/SFW Mascots"]
@@ -317,4 +272,73 @@ Main =
type += "_#{g.TYPE}"
g.THEMESTRING = type
+ features: [
+ ['Style', Style]
+ ['Mascots', MascotTools]
+ ['Rice', Rice]
+ ['Announcements', GlobalMessage]
+ ['Polyfill', Polyfill]
+ ['Redirect', Redirect]
+ ['Header', Header]
+ ['Catalog Links', CatalogLinks]
+ ['Settings', Settings]
+ ['Index Generator', Index]
+ ['Disable Autoplay', AntiAutoplay]
+ ['Announcement Hiding', PSAHiding]
+ ['Fourchan thingies', Fourchan]
+ ['Color User IDs', IDColor]
+ ['Custom CSS', CustomCSS]
+ ['Linkify', Linkify]
+ ['Reveal Spoilers', RemoveSpoilers]
+ ['Resurrect Quotes', Quotify]
+ ['Filter', Filter]
+ ['Reply Hiding Buttons', PostHiding]
+ ['Recursive', Recursive]
+ ['Strike-through Quotes', QuoteStrikeThrough]
+ ['Quick Reply', QR]
+ ['Menu', Menu]
+ ['Index Generator (Menu)', Index.menu]
+ ['Report Link', ReportLink]
+ ['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]
+ ['Quote Markers', QuoteMarkers]
+ ['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]
+ ['Comment Expansion', ExpandComment]
+ ['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]
+ ['Mark New IPs', MarkNewIPs]
+ ['Index Navigation', Nav]
+ ['Keybinds', Keybinds]
+ ['Show Dice Roll', Dice]
+ ['Banner', Banner]
+ ['Navigate', Navigate]
+ ['Flash Features', Flash]
+ ]
+
+
Main.init()