Merge branch 'v3'
Conflicts: CHANGELOG.md Gruntfile.coffee LICENSE builds/4chan-X.js builds/4chan-X.meta.js builds/crx/manifest.json builds/crx/script.js latest.js package.json src/General/Main.coffee src/Linkification/Linkify.coffee
This commit is contained in:
commit
217f1cd42c
21
CHANGELOG.md
21
CHANGELOG.md
@ -1,6 +1,25 @@
|
|||||||
|
**aeosynth**:
|
||||||
|
- Update Gruntfile.coffee.
|
||||||
|
|
||||||
|
**MayhemYDG**:
|
||||||
|
- Fix impossibility to create new threads when in dead threads.
|
||||||
|
- Fix flag filtering on /sp/ and /int/.
|
||||||
|
- Update archives. (with woxxy and proplex)
|
||||||
|
- Minor fixes.
|
||||||
|
- Minor optimizations.
|
||||||
|
|
||||||
|
**seaweedchan**:
|
||||||
|
- Fix issues with having two options called `Reveal Spoilers`.
|
||||||
|
- Update archive.
|
||||||
|
|
||||||
|
**Zixaphir**:
|
||||||
|
- Linkifier Rewrite.
|
||||||
|
- Fix Quote Threading toggle.
|
||||||
|
- Minor optimizations.
|
||||||
|
- Minor fixes.
|
||||||
|
|
||||||
### v2.2.2
|
### v2.2.2
|
||||||
*2013-08-01*
|
*2013-08-01*
|
||||||
|
|
||||||
**zixaphir**:
|
**zixaphir**:
|
||||||
- Fix opening new threads and posts in a new tab.
|
- Fix opening new threads and posts in a new tab.
|
||||||
- Minimum Chrome Version is now 27.
|
- Minimum Chrome Version is now 27.
|
||||||
|
|||||||
121
Gruntfile.coffee
121
Gruntfile.coffee
@ -1,18 +1,19 @@
|
|||||||
module.exports = (grunt) ->
|
module.exports = (grunt) ->
|
||||||
|
|
||||||
pkg = grunt.file.readJSON 'package.json'
|
|
||||||
concatOptions =
|
concatOptions =
|
||||||
process:
|
process: Object.create(null, data:
|
||||||
data: pkg
|
get: -> grunt.config 'pkg'
|
||||||
|
enumerable: true
|
||||||
|
)
|
||||||
|
|
||||||
shellOptions =
|
shellOptions =
|
||||||
stdout: true
|
stdout: true
|
||||||
stderr: true
|
stderr: true
|
||||||
failOnError: true
|
failOnError: true
|
||||||
|
|
||||||
# Project configuration.
|
# Project configuration.
|
||||||
grunt.initConfig
|
grunt.initConfig
|
||||||
pkg: pkg
|
pkg: grunt.file.readJSON 'package.json'
|
||||||
concat:
|
concat:
|
||||||
coffee:
|
coffee:
|
||||||
options: concatOptions
|
options: concatOptions
|
||||||
@ -39,12 +40,6 @@ module.exports = (grunt) ->
|
|||||||
]
|
]
|
||||||
dest: 'tmp-<%= pkg.type %>/script.coffee'
|
dest: 'tmp-<%= pkg.type %>/script.coffee'
|
||||||
|
|
||||||
meta:
|
|
||||||
options: concatOptions
|
|
||||||
files:
|
|
||||||
'LICENSE': 'src/General/meta/banner.js',
|
|
||||||
'latest.js': 'src/General/meta/latest.js'
|
|
||||||
|
|
||||||
crx:
|
crx:
|
||||||
options: concatOptions
|
options: concatOptions
|
||||||
files:
|
files:
|
||||||
@ -52,27 +47,26 @@ module.exports = (grunt) ->
|
|||||||
'builds/crx/script.js': [
|
'builds/crx/script.js': [
|
||||||
'src/General/meta/botproc.js'
|
'src/General/meta/botproc.js'
|
||||||
'src/General/meta/banner.js'
|
'src/General/meta/banner.js'
|
||||||
|
'src/General/meta/usestrict.js'
|
||||||
'tmp-<%= pkg.type %>/script.js'
|
'tmp-<%= pkg.type %>/script.js'
|
||||||
]
|
]
|
||||||
|
|
||||||
userscript:
|
userscript:
|
||||||
options: concatOptions
|
options: concatOptions
|
||||||
files:
|
files:
|
||||||
'builds/<%= pkg.name %>.meta.js': 'src/General/meta/metadata.js'
|
'builds/<%= pkg.name %>.meta.js': 'src/General/meta/metadata.js'
|
||||||
'builds/<%= pkg.name %>.user.js': [
|
'builds/<%= pkg.name %>.user.js': [
|
||||||
'src/General/meta/botproc.js'
|
|
||||||
'src/General/meta/metadata.js'
|
'src/General/meta/metadata.js'
|
||||||
'src/General/meta/banner.js'
|
'src/General/meta/banner.js'
|
||||||
|
'src/General/meta/usestrict.js'
|
||||||
'tmp-<%= pkg.type %>/script.js'
|
'tmp-<%= pkg.type %>/script.js'
|
||||||
]
|
]
|
||||||
|
|
||||||
copy:
|
copy:
|
||||||
crx:
|
crx:
|
||||||
src: 'src/General/img/*.png'
|
src: 'src/General/img/*.png'
|
||||||
dest: 'builds/crx/'
|
dest: 'builds/crx/'
|
||||||
expand: true
|
expand: true
|
||||||
flatten: true
|
flatten: true
|
||||||
opera:
|
nex:
|
||||||
files:
|
files:
|
||||||
'builds/<%= pkg.name %>.nex': 'builds/<%= pkg.name %>.zip'
|
'builds/<%= pkg.name %>.nex': 'builds/<%= pkg.name %>.zip'
|
||||||
|
|
||||||
@ -83,25 +77,32 @@ module.exports = (grunt) ->
|
|||||||
|
|
||||||
concurrent:
|
concurrent:
|
||||||
build: [
|
build: [
|
||||||
'concat:meta'
|
|
||||||
'build-crx'
|
'build-crx'
|
||||||
'build-userscript'
|
'build-userscript'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
bump:
|
||||||
|
options:
|
||||||
|
updateConfigs: [
|
||||||
|
'pkg'
|
||||||
|
]
|
||||||
|
commit: false
|
||||||
|
createTag: false
|
||||||
|
push: false
|
||||||
|
|
||||||
shell:
|
shell:
|
||||||
commit:
|
commit:
|
||||||
options: shellOptions
|
options: shellOptions
|
||||||
command: [
|
command: [
|
||||||
'git checkout <%= pkg.meta.mainBranch %>',
|
'git checkout <%= pkg.meta.mainBranch %>'
|
||||||
'git commit -am "Release <%= pkg.meta.name %> v<%= pkg.version %>."',
|
'git commit -am "Release <%= pkg.meta.name %> v<%= pkg.version %>."'
|
||||||
'git tag -a <%= pkg.version %> -m "<%= pkg.meta.name %> v<%= pkg.version %>."',
|
'git tag -a <%= pkg.version %> -m "<%= pkg.meta.name %> v<%= pkg.version %>."'
|
||||||
'git tag -af stable -m "<%= pkg.meta.name %> v<%= pkg.version %>."'
|
'git tag -af stable-v3 -m "<%= pkg.meta.name %> v<%= pkg.version %>."'
|
||||||
].join(' && ')
|
].join ' && '
|
||||||
stdout: true
|
|
||||||
|
|
||||||
push:
|
push:
|
||||||
options: shellOptions
|
options: shellOptions
|
||||||
command: 'git push origin --tags -f && git push origin --all'
|
command: 'git push origin --tags -f && git push origin --all'
|
||||||
|
|
||||||
watch:
|
watch:
|
||||||
all:
|
all:
|
||||||
@ -120,31 +121,25 @@ module.exports = (grunt) ->
|
|||||||
archive: 'builds/<%= pkg.name %>.zip'
|
archive: 'builds/<%= pkg.name %>.zip'
|
||||||
level: 9
|
level: 9
|
||||||
pretty: true
|
pretty: true
|
||||||
expand: true
|
expand: true
|
||||||
cwd: 'builds/crx/'
|
flatten: true
|
||||||
src: '**'
|
src: 'builds/crx/*'
|
||||||
|
dest: '/'
|
||||||
clean:
|
clean:
|
||||||
builds: 'builds'
|
builds: 'builds'
|
||||||
tmpcrx: 'tmp-crx'
|
tmpcrx: 'tmp-crx'
|
||||||
tmpuserscript: 'tmp-userscript'
|
tmpuserscript: 'tmp-userscript'
|
||||||
|
|
||||||
grunt.loadNpmTasks 'grunt-bump'
|
require('matchdep').filterDev('grunt-*').forEach grunt.loadNpmTasks
|
||||||
grunt.loadNpmTasks 'grunt-concurrent'
|
|
||||||
grunt.loadNpmTasks 'grunt-contrib-clean'
|
|
||||||
grunt.loadNpmTasks 'grunt-contrib-coffee'
|
|
||||||
grunt.loadNpmTasks 'grunt-contrib-compress'
|
|
||||||
grunt.loadNpmTasks 'grunt-contrib-concat'
|
|
||||||
grunt.loadNpmTasks 'grunt-contrib-copy'
|
|
||||||
grunt.loadNpmTasks 'grunt-contrib-watch'
|
|
||||||
grunt.loadNpmTasks 'grunt-shell'
|
|
||||||
|
|
||||||
grunt.registerTask 'default', [
|
grunt.registerTask 'default', [
|
||||||
'build'
|
'build'
|
||||||
]
|
]
|
||||||
|
|
||||||
grunt.registerTask 'set-build', 'Set the build type variable', (type) ->
|
grunt.registerTask 'set-build', 'Set the build type variable', (type) ->
|
||||||
|
pkg = grunt.config 'pkg'
|
||||||
pkg.type = type;
|
pkg.type = type;
|
||||||
|
grunt.config 'pkg', pkg
|
||||||
pkg.sizing = if type is 'crx'
|
pkg.sizing = if type is 'crx'
|
||||||
'box-sizing'
|
'box-sizing'
|
||||||
else
|
else
|
||||||
@ -181,40 +176,36 @@ module.exports = (grunt) ->
|
|||||||
]
|
]
|
||||||
|
|
||||||
grunt.registerTask 'release', [
|
grunt.registerTask 'release', [
|
||||||
'default'
|
|
||||||
'compress:crx'
|
|
||||||
'shell:commit'
|
'shell:commit'
|
||||||
'shell:push'
|
'shell:push'
|
||||||
|
'build-crx'
|
||||||
|
'compress:crx'
|
||||||
|
'copy:nex'
|
||||||
]
|
]
|
||||||
|
grunt.registerTask 'patch', [
|
||||||
grunt.registerTask 'patch', [
|
'bump'
|
||||||
'bump-only'
|
|
||||||
'reloadPkg'
|
|
||||||
'updcl:3'
|
'updcl:3'
|
||||||
|
'release'
|
||||||
]
|
]
|
||||||
|
|
||||||
grunt.registerTask 'minor', [
|
grunt.registerTask 'minor', [
|
||||||
'bump-only:minor'
|
'bump:minor'
|
||||||
'reloadPkg'
|
|
||||||
'updcl:2'
|
'updcl:2'
|
||||||
|
'release'
|
||||||
]
|
]
|
||||||
|
|
||||||
grunt.registerTask 'major', [
|
grunt.registerTask 'major', [
|
||||||
'bump-only:major'
|
'bump:major'
|
||||||
'reloadPkg'
|
|
||||||
'updcl:1'
|
'updcl:1'
|
||||||
|
'release'
|
||||||
]
|
]
|
||||||
|
|
||||||
grunt.registerTask 'reloadPkg', 'Reload the package', ->
|
grunt.registerTask 'updcl', 'Update the changelog', (headerLevel) ->
|
||||||
# Update the `pkg` object with the new version.
|
headerPrefix = new Array(+headerLevel + 1).join '#'
|
||||||
pkg = grunt.file.readJSON('package.json')
|
{version} = grunt.config 'pkg'
|
||||||
grunt.config.data.pkg = concatOptions.process.data = pkg
|
today = grunt.template.today 'yyyy-mm-dd'
|
||||||
grunt.log.ok('pkg reloaded.')
|
changelog = grunt.file.read 'CHANGELOG.md'
|
||||||
|
|
||||||
|
grunt.file.write 'CHANGELOG.md', "#{headerPrefix} #{version} - *#{today}*\n\n#{changelog}"
|
||||||
|
grunt.log.ok "Changelog updated for v#{version}."
|
||||||
|
|
||||||
grunt.registerTask 'updcl', 'Update the changelog', (i) ->
|
|
||||||
# i is the number of #s for markdown.
|
|
||||||
version = []
|
|
||||||
version.length = +i + 1
|
|
||||||
version = version.join('#') + ' v' + pkg.version + '\n*' + grunt.template.today('yyyy-mm-dd') + '*\n'
|
|
||||||
grunt.file.write 'CHANGELOG.md', version + '\n' + grunt.file.read('CHANGELOG.md')
|
|
||||||
grunt.log.ok 'Changelog updated for v' + pkg.version + '.'
|
|
||||||
4
LICENSE
4
LICENSE
@ -1,5 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
|
<<<<<<< HEAD
|
||||||
* appchan x - Version 2.2.2 - 2013-08-04
|
* appchan x - Version 2.2.2 - 2013-08-04
|
||||||
|
=======
|
||||||
|
* 4chan X - Version 1.2.25 - 2013-08-04
|
||||||
|
>>>>>>> v3
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/zixaphir/appchan-x/blob/master/LICENSE
|
* https://github.com/zixaphir/appchan-x/blob/master/LICENSE
|
||||||
|
|||||||
10653
builds/4chan-X.js
Normal file
10653
builds/4chan-X.js
Normal file
File diff suppressed because one or more lines are too long
19
builds/4chan-X.meta.js
Normal file
19
builds/4chan-X.meta.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name 4chan X
|
||||||
|
// @version 1.2.25
|
||||||
|
// @namespace 4chan-X
|
||||||
|
// @description Cross-browser userscript for maximum lurking on 4chan.
|
||||||
|
// @license MIT; https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
|
||||||
|
// @match *://api.4chan.org/*
|
||||||
|
// @match *://boards.4chan.org/*
|
||||||
|
// @match *://images.4chan.org/*
|
||||||
|
// @match *://sys.4chan.org/*
|
||||||
|
// @grant GM_getValue
|
||||||
|
// @grant GM_setValue
|
||||||
|
// @grant GM_deleteValue
|
||||||
|
// @grant GM_openInTab
|
||||||
|
// @run-at document-start
|
||||||
|
// @updateURL https://github.com/seaweedchan/4chan-x/raw/stable/builds/4chan-X.meta.js
|
||||||
|
// @downloadURL https://github.com/seaweedchan/4chan-x/raw/stable/builds/4chan-X.user.js
|
||||||
|
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC
|
||||||
|
// ==/UserScript==
|
||||||
@ -1,7 +1,6 @@
|
|||||||
// Generated by CoffeeScript
|
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.2.24
|
// @version 1.2.25
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
// @description Cross-browser userscript for maximum lurking on 4chan.
|
// @description Cross-browser userscript for maximum lurking on 4chan.
|
||||||
// @license MIT; https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
|
// @license MIT; https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
|
||||||
@ -19,7 +18,7 @@
|
|||||||
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC
|
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC
|
||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.2.24 - 2013-08-01
|
* 4chan X - Version 1.2.25 - 2013-08-04
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
|
* https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
|
||||||
@ -108,6 +107,8 @@
|
|||||||
* license: http://userscripts.org/scripts/review/1352
|
* license: http://userscripts.org/scripts/review/1352
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
'use strict';
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g,
|
var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g,
|
||||||
__slice = [].slice,
|
__slice = [].slice,
|
||||||
@ -159,7 +160,7 @@
|
|||||||
'Image Expansion': [true, 'Expand images.'],
|
'Image Expansion': [true, 'Expand images.'],
|
||||||
'Image Hover': [true, 'Show full image on mouseover.'],
|
'Image Hover': [true, 'Show full image on mouseover.'],
|
||||||
'Sauce': [true, 'Add sauce links to images.'],
|
'Sauce': [true, 'Add sauce links to images.'],
|
||||||
'Reveal Spoilers': [false, 'Reveal spoiler thumbnails.'],
|
'Reveal Spoiler Thumbnails': [false, 'Replace spoiler thumbnails with the original image.'],
|
||||||
'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'],
|
'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'],
|
||||||
'Replace PNG': [false, 'Replace pngs.'],
|
'Replace PNG': [false, 'Replace pngs.'],
|
||||||
'Replace JPG': [false, 'Replace jpgs.'],
|
'Replace JPG': [false, 'Replace jpgs.'],
|
||||||
@ -320,7 +321,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.2.24',
|
VERSION: '1.2.25',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {},
|
boards: {},
|
||||||
threads: {},
|
threads: {},
|
||||||
@ -674,9 +675,7 @@
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
$.open = function(URL) {
|
$.open = GM_openInTab;
|
||||||
return GM_openInTab(URL);
|
|
||||||
};
|
|
||||||
|
|
||||||
$.debounce = function(wait, fn) {
|
$.debounce = function(wait, fn) {
|
||||||
var args, exec, lastCall, that, timeout;
|
var args, exec, lastCall, that, timeout;
|
||||||
@ -905,6 +904,7 @@
|
|||||||
post: post,
|
post: post,
|
||||||
info: info,
|
info: info,
|
||||||
comment: $('.postMessage', post),
|
comment: $('.postMessage', post),
|
||||||
|
links: [],
|
||||||
quotelinks: [],
|
quotelinks: [],
|
||||||
backlinks: info.getElementsByClassName('backlink')
|
backlinks: info.getElementsByClassName('backlink')
|
||||||
};
|
};
|
||||||
@ -4300,122 +4300,235 @@
|
|||||||
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
|
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.regString = Conf['Allow False Positives'] ? /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
|
this.regString = Conf['Allow False Positives'] ? /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
|
||||||
if (Conf['Comment Expansion']) {
|
if (Conf['Comment Expansion']) {
|
||||||
ExpandComment.callbacks.push(this.node);
|
ExpandComment.callbacks.push(this.node);
|
||||||
}
|
}
|
||||||
|
if (Conf['Title Link']) {
|
||||||
|
$.sync('CachedTitles', Linkify.titleSync);
|
||||||
|
}
|
||||||
return Post.prototype.callbacks.push({
|
return Post.prototype.callbacks.push({
|
||||||
name: 'Linkify',
|
name: 'Linkify',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
cypher: $.el('div'),
|
|
||||||
node: function() {
|
node: function() {
|
||||||
var a, child, cypher, cypherText, data, embed, embedder, embeds, i, index, len, link, links, lookahead, name, next, node, nodes, snapshot, spoiler, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2;
|
var data, embedder, i, len, node, range, snapshot, _i, _j, _len, _len1, _ref, _ref1;
|
||||||
|
|
||||||
if (this.isClone && Conf['Embedding']) {
|
if (this.isClone && Conf['Embedding']) {
|
||||||
_ref = $$('.embedder', this.nodes.comment);
|
_ref = $$('.embedder', this.nodes.comment);
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
embedder = _ref[_i];
|
embedder = _ref[_i];
|
||||||
$.on(embedder, "click", Linkify.toggle);
|
$.on(embedder, "click", Linkify.cb.toggle);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
snapshot = $.X('.//text()', this.nodes.comment);
|
snapshot = $.X('.//text()', this.nodes.comment);
|
||||||
cypher = Linkify.cypher;
|
|
||||||
i = -1;
|
i = -1;
|
||||||
len = snapshot.snapshotLength;
|
len = snapshot.snapshotLength;
|
||||||
while (++i < len) {
|
while (++i < len) {
|
||||||
nodes = $.frag();
|
|
||||||
node = snapshot.snapshotItem(i);
|
node = snapshot.snapshotItem(i);
|
||||||
data = node.data;
|
data = node.data;
|
||||||
if (!(node.parentNode && Linkify.regString.test(data))) {
|
if (Linkify.regString.test(data)) {
|
||||||
continue;
|
Linkify.regString.lastIndex = 0;
|
||||||
|
Linkify.gatherLinks(node, this);
|
||||||
}
|
}
|
||||||
Linkify.regString.lastIndex = 0;
|
|
||||||
cypherText = [];
|
|
||||||
if (next = node.nextSibling) {
|
|
||||||
cypher.textContent = node.textContent;
|
|
||||||
cypherText[0] = cypher.innerHTML;
|
|
||||||
while ((next.nodeName.toLowerCase() === 'wbr' || next.nodeName.toLowerCase() === 's') && (lookahead = next.nextSibling) && ((name = lookahead.nodeName) === "#text" || name.toLowerCase() === 'br')) {
|
|
||||||
cypher.textContent = lookahead.textContent;
|
|
||||||
cypherText.push((spoiler = next.innerHTML) ? "<s>" + (spoiler.replace(/</g, ' <')) + "</s>" : '<wbr>');
|
|
||||||
cypherText.push(cypher.innerHTML);
|
|
||||||
$.rm(next);
|
|
||||||
next = lookahead.nextSibling;
|
|
||||||
if (lookahead.nodeName === "#text") {
|
|
||||||
$.rm(lookahead);
|
|
||||||
}
|
|
||||||
if (!next) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cypherText.length) {
|
|
||||||
data = cypherText.join('');
|
|
||||||
}
|
|
||||||
links = data.match(Linkify.regString);
|
|
||||||
for (_j = 0, _len1 = links.length; _j < _len1; _j++) {
|
|
||||||
link = links[_j];
|
|
||||||
index = data.indexOf(link);
|
|
||||||
if (text = data.slice(0, index)) {
|
|
||||||
cypher.innerHTML = text;
|
|
||||||
_ref1 = __slice.call(cypher.childNodes);
|
|
||||||
for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) {
|
|
||||||
child = _ref1[_k];
|
|
||||||
$.add(nodes, child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cypher.innerHTML = (link.indexOf(':') < 0 ? (link.indexOf('@') > 0 ? 'mailto:' + link : 'http://' + link) : link).replace(/<(wbr|s|\/s)>/g, '');
|
|
||||||
a = $.el('a', {
|
|
||||||
innerHTML: link,
|
|
||||||
className: 'linkify',
|
|
||||||
rel: 'nofollow noreferrer',
|
|
||||||
target: '_blank',
|
|
||||||
href: cypher.textContent
|
|
||||||
});
|
|
||||||
$.add(nodes, Linkify.embedder(a));
|
|
||||||
data = data.slice(index + link.length);
|
|
||||||
}
|
|
||||||
if (data) {
|
|
||||||
cypher.innerHTML = data;
|
|
||||||
_ref2 = __slice.call(cypher.childNodes);
|
|
||||||
for (_l = 0, _len3 = _ref2.length; _l < _len3; _l++) {
|
|
||||||
child = _ref2[_l];
|
|
||||||
$.add(nodes, child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$.replace(node, nodes);
|
|
||||||
}
|
}
|
||||||
if (Conf['Auto-embed']) {
|
if (!(Conf['Embedding'] || Conf['Link Title'])) {
|
||||||
embeds = $$('.embedder', this.nodes.comment);
|
return;
|
||||||
for (_m = 0, _len4 = embeds.length; _m < _len4; _m++) {
|
}
|
||||||
embed = embeds[_m];
|
_ref1 = this.nodes.links;
|
||||||
embed.click();
|
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||||||
|
range = _ref1[_j];
|
||||||
|
if (data = Linkify.services(range)) {
|
||||||
|
if (Conf['Embedding']) {
|
||||||
|
Linkify.embed(data);
|
||||||
|
}
|
||||||
|
if (Conf['Link Title']) {
|
||||||
|
Linkify.title(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
toggle: function() {
|
gatherLinks: function(node, post) {
|
||||||
var el, embed, style, type, url;
|
var data, index, len, len2, link, links, match, range, _i, _len, _ref;
|
||||||
|
|
||||||
|
data = node.data;
|
||||||
|
len = data.length;
|
||||||
|
links = [];
|
||||||
|
while ((match = Linkify.regString.exec(data))) {
|
||||||
|
index = match.index;
|
||||||
|
link = match[0];
|
||||||
|
len2 = index + link.length;
|
||||||
|
if (len - len2 === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
range = document.createRange();
|
||||||
|
range.setStart(node, index);
|
||||||
|
range.setEnd(node, len2);
|
||||||
|
links.push(range);
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
Linkify.seek(match, node, post);
|
||||||
|
}
|
||||||
|
_ref = links.reverse();
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
range = _ref[_i];
|
||||||
|
Linkify.makeLink(range, post);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
seek: function(match, node, post) {
|
||||||
|
var data, index, link, next, range, result;
|
||||||
|
|
||||||
|
index = match.index;
|
||||||
|
link = match[0];
|
||||||
|
range = document.createRange();
|
||||||
|
range.setStart(node, index);
|
||||||
|
while ((next = node.nextSibling) && next.nodeName !== 'BR') {
|
||||||
|
node = next;
|
||||||
|
data = node.data;
|
||||||
|
if (result = /[\s'"]/.exec(data)) {
|
||||||
|
range.setEnd(node, result.index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (range.collapsed) {
|
||||||
|
if (node.nodeName === 'WBR') {
|
||||||
|
node = node.previousSibling;
|
||||||
|
}
|
||||||
|
range.setEnd(node, node.length);
|
||||||
|
}
|
||||||
|
return Linkify.makeLink(range, post);
|
||||||
|
},
|
||||||
|
makeLink: function(range, post) {
|
||||||
|
var a, link;
|
||||||
|
|
||||||
|
link = range.toString();
|
||||||
|
link = link.contains(':') ? link : (link.contains('@') ? 'mailto:' : 'http://') + link;
|
||||||
|
a = $.el('a', {
|
||||||
|
className: 'linkify',
|
||||||
|
rel: 'nofollow noreferrer',
|
||||||
|
target: '_blank',
|
||||||
|
href: link
|
||||||
|
});
|
||||||
|
range.surroundContents(a);
|
||||||
|
post.nodes.links.push(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, key, link, options, uid;
|
||||||
|
|
||||||
|
key = data[0], uid = data[1], options = data[2], link = data[3];
|
||||||
|
embed = $.el('a', {
|
||||||
|
name: uid,
|
||||||
|
option: options,
|
||||||
|
className: 'embedder',
|
||||||
|
href: 'javascript:;',
|
||||||
|
textContent: '(embed)'
|
||||||
|
});
|
||||||
|
embed.dataset.service = key;
|
||||||
|
embed.dataset.originalurl = link.href;
|
||||||
|
$.addClass(link, "" + embed.dataset.service);
|
||||||
|
$.on(embed, 'click', Linkify.cb.toggle);
|
||||||
|
return $.after(link, [$.tn(' '), embed]);
|
||||||
|
},
|
||||||
|
title: function(data) {
|
||||||
|
var err, key, link, options, service, title, titles, uid;
|
||||||
|
|
||||||
|
key = data[0], uid = data[1], options = data[2], link = data[3];
|
||||||
|
if (!(service = Linkify.types[key].title)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
titles = Conf['CachedTitles'];
|
||||||
|
if (title = titles[uid]) {
|
||||||
|
link.textContent = title[0];
|
||||||
|
if (Conf['Embedding']) {
|
||||||
|
return link.nextElementSibling.dataset.title = title[0];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
$.cache(service.api(uid), function() {
|
||||||
|
return title = Linkify.cb.title.apply(this, [data]);
|
||||||
|
});
|
||||||
|
} catch (_error) {
|
||||||
|
err = _error;
|
||||||
|
link.innerHTML = "[" + key + "] <span class=warning>Title Link Blocked</span> (are you using NoScript?)</a>";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (title) {
|
||||||
|
titles[uid] = [title, Date.now()];
|
||||||
|
return $.set('CachedTitles', titles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
titleSync: function(value) {
|
||||||
|
return Conf['CachedTitles'] = value;
|
||||||
|
},
|
||||||
|
cb: {
|
||||||
|
toggle: function() {
|
||||||
|
var el, embed;
|
||||||
|
|
||||||
|
embed = this.previousElementSibling;
|
||||||
|
el = !this.className.contains("embedded") ? Linkify.cb.embed(this) : Linkify.cb.unembed(this);
|
||||||
|
$.replace(embed, el);
|
||||||
|
return $.toggleClass(this, 'embedded');
|
||||||
|
},
|
||||||
|
embed: function(a) {
|
||||||
|
var el, style, type;
|
||||||
|
|
||||||
|
el = (type = Linkify.types[a.dataset.service]).el.call(a);
|
||||||
|
el.style.cssText = (style = type.style) ? style : "border: 0; width: 640px; height: 390px";
|
||||||
|
a.textContent = '(unembed)';
|
||||||
|
return el;
|
||||||
|
},
|
||||||
|
unembed: function(a) {
|
||||||
|
var el, url;
|
||||||
|
|
||||||
embed = this.previousElementSibling;
|
|
||||||
if (this.className.contains("embedded")) {
|
|
||||||
el = $.el('a', {
|
el = $.el('a', {
|
||||||
rel: 'nofollow noreferrer',
|
rel: 'nofollow noreferrer',
|
||||||
target: 'blank',
|
target: 'blank',
|
||||||
className: 'linkify',
|
className: 'linkify',
|
||||||
href: url = this.getAttribute("data-originalURL"),
|
href: url = a.dataset.originalurl,
|
||||||
textContent: this.getAttribute("data-title") || url
|
textContent: a.dataset.title || url
|
||||||
});
|
});
|
||||||
this.textContent = '(embed)';
|
a.textContent = '(embed)';
|
||||||
$.addClass(el, "" + (this.getAttribute('data-service')));
|
$.addClass(el, "" + a.dataset.service);
|
||||||
} else {
|
return el;
|
||||||
el = (type = Linkify.types[this.getAttribute("data-service")]).el.call(this);
|
},
|
||||||
el.style.cssText = (style = type.style) ? style : "border: 0; width: 640px; height: 390px";
|
title: function(data) {
|
||||||
this.textContent = '(unembed)';
|
var key, link, options, service, text, uid;
|
||||||
|
|
||||||
|
key = data[0], uid = data[1], options = data[2], link = data[3];
|
||||||
|
service = Linkify.types[key].title;
|
||||||
|
return link.textContent = (function() {
|
||||||
|
switch (this.status) {
|
||||||
|
case 200:
|
||||||
|
case 304:
|
||||||
|
text = "" + (service.text.call(this));
|
||||||
|
if (Conf['Embedding']) {
|
||||||
|
link.nextElementSibling.dataset.title = text;
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
case 404:
|
||||||
|
return "[" + key + "] Not Found";
|
||||||
|
case 403:
|
||||||
|
return "[" + key + "] Forbidden or Private";
|
||||||
|
default:
|
||||||
|
return "[" + key + "] " + this.status + "'d";
|
||||||
|
}
|
||||||
|
}).call(this);
|
||||||
}
|
}
|
||||||
$.replace(embed, el);
|
|
||||||
return $.toggleClass(this, 'embedded');
|
|
||||||
},
|
},
|
||||||
types: {
|
types: {
|
||||||
YouTube: {
|
YouTube: {
|
||||||
@ -4426,8 +4539,8 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
api: function() {
|
api: function(uid) {
|
||||||
return "https://gdata.youtube.com/feeds/api/videos/" + this.name + "?alt=json&fields=title/text(),yt:noembed,app:control/yt:state/@reasonCode";
|
return "https://gdata.youtube.com/feeds/api/videos/" + uid + "?alt=json&fields=title/text(),yt:noembed,app:control/yt:state/@reasonCode";
|
||||||
},
|
},
|
||||||
text: function() {
|
text: function() {
|
||||||
return JSON.parse(this.responseText).entry.title.$t;
|
return JSON.parse(this.responseText).entry.title.$t;
|
||||||
@ -4451,8 +4564,8 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
api: function() {
|
api: function(uid) {
|
||||||
return "https://vimeo.com/api/oembed.json?url=http://vimeo.com/" + this.name;
|
return "https://vimeo.com/api/oembed.json?url=http://vimeo.com/" + uid;
|
||||||
},
|
},
|
||||||
text: function() {
|
text: function() {
|
||||||
return JSON.parse(this.responseText).title;
|
return JSON.parse(this.responseText).title;
|
||||||
@ -4482,7 +4595,7 @@
|
|||||||
style: 'border: 0; width: auto; height: auto;',
|
style: 'border: 0; width: auto; height: auto;',
|
||||||
el: function() {
|
el: function() {
|
||||||
return $.el('div', {
|
return $.el('div', {
|
||||||
innerHTML: "<a target=_blank href='" + (this.getAttribute('data-originalURL')) + "'><img src='" + (this.getAttribute('data-originalURL')) + "'></a>"
|
innerHTML: "<a target=_blank href='" + this.dataset.originalurl + "'><img src='" + this.dataset.originalurl + "'></a>"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -4505,8 +4618,8 @@
|
|||||||
return div;
|
return div;
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
api: function() {
|
api: function(uid) {
|
||||||
return "//soundcloud.com/oembed?show_artwork=false&&maxwidth=500px&show_comments=false&format=json&url=https://www.soundcloud.com/" + this.name;
|
return "//soundcloud.com/oembed?show_artwork=false&&maxwidth=500px&show_comments=false&format=json&url=https://www.soundcloud.com/" + uid;
|
||||||
},
|
},
|
||||||
text: function() {
|
text: function() {
|
||||||
return JSON.parse(this.responseText).title;
|
return JSON.parse(this.responseText).title;
|
||||||
@ -4533,8 +4646,8 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
api: function() {
|
api: function(uid) {
|
||||||
return "https://api.github.com/gists/" + this.name;
|
return "https://api.github.com/gists/" + uid;
|
||||||
},
|
},
|
||||||
text: function() {
|
text: function() {
|
||||||
var file, response;
|
var file, response;
|
||||||
@ -4556,76 +4669,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
embedder: function(a) {
|
|
||||||
var callbacks, embed, key, match, service, titles, type, _ref;
|
|
||||||
|
|
||||||
if (!Conf['Link Title']) {
|
|
||||||
return [a];
|
|
||||||
}
|
|
||||||
titles = {};
|
|
||||||
callbacks = function() {
|
|
||||||
var title;
|
|
||||||
|
|
||||||
return a.textContent = (function() {
|
|
||||||
switch (this.status) {
|
|
||||||
case 200:
|
|
||||||
case 304:
|
|
||||||
title = "" + (service.text.call(this));
|
|
||||||
embed.setAttribute('data-title', title);
|
|
||||||
titles[embed.name] = [title, Date.now()];
|
|
||||||
$.set('CachedTitles', titles);
|
|
||||||
return title;
|
|
||||||
case 404:
|
|
||||||
return "[" + key + "] Not Found";
|
|
||||||
case 403:
|
|
||||||
return "[" + key + "] Forbidden or Private";
|
|
||||||
default:
|
|
||||||
return "[" + key + "] " + this.status + "'d";
|
|
||||||
}
|
|
||||||
}).call(this);
|
|
||||||
};
|
|
||||||
_ref = Linkify.types;
|
|
||||||
for (key in _ref) {
|
|
||||||
type = _ref[key];
|
|
||||||
if (!(match = a.href.match(type.regExp))) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
embed = $.el('a', {
|
|
||||||
name: (a.name = match[1]),
|
|
||||||
option: match[2],
|
|
||||||
className: 'embedder',
|
|
||||||
href: 'javascript:;',
|
|
||||||
textContent: '(embed)'
|
|
||||||
});
|
|
||||||
embed.setAttribute('data-service', key);
|
|
||||||
embed.setAttribute('data-originalURL', a.href);
|
|
||||||
$.addClass(a, "" + (embed.getAttribute('data-service')));
|
|
||||||
$.on(embed, 'click', Linkify.toggle);
|
|
||||||
if (!Conf['Embedding']) {
|
|
||||||
embed.hidden = true;
|
|
||||||
}
|
|
||||||
if (Conf['Link Title'] && (service = type.title)) {
|
|
||||||
$.get('CachedTitles', {}, function(item) {
|
|
||||||
var err, title;
|
|
||||||
|
|
||||||
titles = item['CachedTitles'];
|
|
||||||
if (title = titles[match[1]]) {
|
|
||||||
a.textContent = title[0];
|
|
||||||
return embed.setAttribute('data-title', title[0]);
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
return $.cache(service.api.call(a), callbacks);
|
|
||||||
} catch (_error) {
|
|
||||||
err = _error;
|
|
||||||
return a.innerHTML = "[" + key + "] <span class=warning>Title Link Blocked</span> (are you using NoScript?)</a>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return [a, $.tn(' '), embed];
|
|
||||||
}
|
|
||||||
return [a];
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -6534,11 +6577,11 @@
|
|||||||
|
|
||||||
RevealSpoilers = {
|
RevealSpoilers = {
|
||||||
init: function() {
|
init: function() {
|
||||||
if (g.VIEW === 'catalog' || !Conf['Reveal Spoilers']) {
|
if (g.VIEW === 'catalog' || !Conf['Reveal Spoiler Thumbnails']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return Post.prototype.callbacks.push({
|
return Post.prototype.callbacks.push({
|
||||||
name: 'Reveal Spoilers',
|
name: 'Reveal Spoiler Thumbnails',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -7902,6 +7945,9 @@
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
saveLastReadPost: $.debounce(2 * $.SECOND, function() {
|
saveLastReadPost: $.debounce(2 * $.SECOND, function() {
|
||||||
|
if (Unread.thread.isDead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
return Unread.db.set({
|
return Unread.db.set({
|
||||||
boardID: Unread.thread.board.ID,
|
boardID: Unread.thread.board.ID,
|
||||||
threadID: Unread.thread.ID,
|
threadID: Unread.thread.ID,
|
||||||
@ -7939,9 +7985,11 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
Redirect = {
|
Redirect = {
|
||||||
thread: {},
|
data: {
|
||||||
post: {},
|
thread: {},
|
||||||
file: {},
|
post: {},
|
||||||
|
file: {}
|
||||||
|
},
|
||||||
init: function() {
|
init: function() {
|
||||||
var archive, boardID, boards, data, id, name, type, _i, _len, _ref, _ref1, _ref2;
|
var archive, boardID, boards, data, id, name, type, _i, _len, _ref, _ref1, _ref2;
|
||||||
|
|
||||||
@ -7955,7 +8003,7 @@
|
|||||||
if (!boards.contains(boardID)) {
|
if (!boards.contains(boardID)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Redirect[type][boardID] = archive;
|
Redirect.data[type][boardID] = archive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7965,126 +8013,118 @@
|
|||||||
_ref2 = archive.boards;
|
_ref2 = archive.boards;
|
||||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||||
boardID = _ref2[_i];
|
boardID = _ref2[_i];
|
||||||
if (!(boardID in Redirect.thread)) {
|
if (!(boardID in Redirect.data.thread)) {
|
||||||
Redirect.thread[boardID] = archive;
|
Redirect.data.thread[boardID] = archive;
|
||||||
}
|
}
|
||||||
if (!(boardID in Redirect.post || archive.software !== 'foolfuuka')) {
|
if (!(boardID in Redirect.data.post || archive.software !== 'foolfuuka')) {
|
||||||
Redirect.post[boardID] = archive;
|
Redirect.data.post[boardID] = archive;
|
||||||
}
|
}
|
||||||
if (!(boardID in Redirect.file || !archive.files.contains(boardID))) {
|
if (!(boardID in Redirect.data.file || !archive.files.contains(boardID))) {
|
||||||
Redirect.file[boardID] = archive;
|
Redirect.data.file[boardID] = archive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
archives: {
|
archives: {
|
||||||
'Foolz': {
|
|
||||||
'domain': 'archive.foolz.us',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
|
||||||
'files': ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
|
||||||
},
|
|
||||||
'NSFW Foolz': {
|
|
||||||
'domain': 'nsfw.foolz.us',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['u'],
|
|
||||||
'files': ['u']
|
|
||||||
},
|
|
||||||
'The Dark Cave': {
|
|
||||||
'domain': 'archive.thedarkcave.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['c', 'int', 'out', 'po'],
|
|
||||||
'files': ['c', 'po']
|
|
||||||
},
|
|
||||||
'4plebs': {
|
'4plebs': {
|
||||||
'domain': 'archive.4plebs.org',
|
domain: 'archive.4plebs.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['hr', 'tg', 'tv', 'x'],
|
boards: ['hr', 'tg', 'tv', 'x'],
|
||||||
'files': ['hr', 'tg', 'tv', 'x']
|
files: ['hr', 'tg', 'tv', 'x']
|
||||||
},
|
},
|
||||||
'Nyafuu': {
|
'fap archive': {
|
||||||
'domain': 'archive.nyafuu.org',
|
domain: 'fuuka.worldathleticproject.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: false,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['c', 'w', 'wg'],
|
boards: ['b', 'e', 'h', 'hc', 'p', 's', 'u'],
|
||||||
'files': ['c', 'w', 'wg']
|
files: ['b', 'e', 'h', 'hc', 'p', 's', 'u']
|
||||||
|
},
|
||||||
|
'Foolz': {
|
||||||
|
domain: 'archive.foolz.us',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
|
files: ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
||||||
},
|
},
|
||||||
'Foolz a Shit': {
|
'Foolz a Shit': {
|
||||||
'domain': 'archive.foolzashit.com',
|
domain: 'archive.foolzashit.com',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
|
boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
|
||||||
'files': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
||||||
},
|
},
|
||||||
'World Athletic Project': {
|
'Foolz Beta': {
|
||||||
'domain': 'fuuka.worldathleticproject.org',
|
domain: 'beta.foolz.us',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': false,
|
https: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['e', 'h', 'p', 's', 'u'],
|
boards: ['a', 'co', 'gd', 'h', 'jp', 'm', 'mlp', 'q', 'sp', 'tg', 'tv', 'u', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
files: ['a', 'gd', 'h', 'jp', 'm', 'q', 'tg', 'u', 'vg', 'vp', 'vr', 'wsg']
|
||||||
},
|
|
||||||
'Install Gentoo': {
|
|
||||||
'domain': 'archive.installgentoo.net',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['diy', 'g', 'sci'],
|
|
||||||
'files': []
|
|
||||||
},
|
|
||||||
'warosu': {
|
|
||||||
'domain': 'fuuka.warosu.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
|
||||||
},
|
|
||||||
'Rebecca Black Tech': {
|
|
||||||
'domain': 'rbt.asia',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['cgl', 'g', 'mu', 'w'],
|
|
||||||
'files': ['cgl', 'g', 'mu', 'w']
|
|
||||||
},
|
},
|
||||||
'Heinessen': {
|
'Heinessen': {
|
||||||
'domain': 'archive.heinessen.com',
|
domain: 'archive.heinessen.com',
|
||||||
'http': true,
|
http: true,
|
||||||
'software': 'fuuka',
|
software: 'fuuka',
|
||||||
'boards': ['an', 'fit', 'k', 'mlp', 'r9k', 'toy'],
|
boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy'],
|
||||||
'files': ['an', 'k', 'toy']
|
files: ['an', 'k', 'toy']
|
||||||
|
},
|
||||||
|
'Install Gentoo': {
|
||||||
|
domain: 'archive.installgentoo.net',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'fuuka',
|
||||||
|
boards: ['diy', 'g', 'sci'],
|
||||||
|
files: []
|
||||||
|
},
|
||||||
|
'NSFW Foolz': {
|
||||||
|
domain: 'nsfw.foolz.us',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['u'],
|
||||||
|
files: ['u']
|
||||||
|
},
|
||||||
|
'Nyafuu': {
|
||||||
|
domain: 'archive.nyafuu.org',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['c', 'w', 'wg'],
|
||||||
|
files: ['c', 'w', 'wg']
|
||||||
|
},
|
||||||
|
'Rebecca Black Tech': {
|
||||||
|
domain: 'rbt.asia',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'fuuka',
|
||||||
|
boards: ['cgl', 'g', 'mu', 'w'],
|
||||||
|
files: ['cgl', 'g', 'mu', 'w']
|
||||||
|
},
|
||||||
|
'The Dark Cave': {
|
||||||
|
domain: 'archive.thedarkcave.org',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['c', 'int', 'out', 'po'],
|
||||||
|
files: ['c', 'po']
|
||||||
},
|
},
|
||||||
'warosu': {
|
'warosu': {
|
||||||
'domain': 'fuuka.warosu.org',
|
domain: 'fuuka.warosu.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: true,
|
||||||
'software': 'fuuka',
|
software: 'fuuka',
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
boards: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'vr']
|
files: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
||||||
},
|
|
||||||
'worldathleticproject': {
|
|
||||||
'domain': 'fuuka.worldathleticproject.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['e', 'h', 'p', 's', 'u'],
|
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
to: function(dest, data) {
|
to: function(dest, data) {
|
||||||
var archive;
|
var archive;
|
||||||
|
|
||||||
archive = (dest === 'search' ? Redirect.thread : Redirect[dest])[data.boardID];
|
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
||||||
if (!archive) {
|
if (!archive) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
// Generated by CoffeeScript
|
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name appchan x
|
// @name appchan x
|
||||||
// @version 2.2.2
|
// @version 2.2.2
|
||||||
@ -112,6 +111,8 @@
|
|||||||
* license: http://www.gnu.org/copyleft/lesser.html
|
* license: http://www.gnu.org/copyleft/lesser.html
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
'use strict';
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, IDColor, ImageExpand, ImageHover, ImageLoader, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation,
|
var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, IDColor, ImageExpand, ImageHover, ImageLoader, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation,
|
||||||
__slice = [].slice,
|
__slice = [].slice,
|
||||||
@ -160,7 +161,7 @@
|
|||||||
'Image Expansion': [true, 'Expand images.'],
|
'Image Expansion': [true, 'Expand images.'],
|
||||||
'Image Hover': [true, 'Show full image on mouseover.'],
|
'Image Hover': [true, 'Show full image on mouseover.'],
|
||||||
'Sauce': [true, 'Add sauce links to images.'],
|
'Sauce': [true, 'Add sauce links to images.'],
|
||||||
'Reveal Spoilers': [false, 'Reveal spoiler thumbnails.'],
|
'Reveal Spoiler Thumbnails': [false, 'Replace spoiler thumbnails with the original image.'],
|
||||||
'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'],
|
'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'],
|
||||||
'Replace PNG': [false, 'Replace pngs.'],
|
'Replace PNG': [false, 'Replace pngs.'],
|
||||||
'Replace JPG': [false, 'Replace jpgs.'],
|
'Replace JPG': [false, 'Replace jpgs.'],
|
||||||
@ -3032,9 +3033,7 @@
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
$.open = function(URL) {
|
$.open = GM_openInTab;
|
||||||
return GM_openInTab(URL);
|
|
||||||
};
|
|
||||||
|
|
||||||
$.debounce = function(wait, fn) {
|
$.debounce = function(wait, fn) {
|
||||||
var args, exec, lastCall, that, timeout;
|
var args, exec, lastCall, that, timeout;
|
||||||
@ -6594,7 +6593,7 @@
|
|||||||
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
|
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.regString = Conf['Allow False Positives'] ? /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]|[a-z]{3,}:[a-z0-9?]|[\S]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
|
this.regString = Conf['Allow False Positives'] ? /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
|
||||||
if (Conf['Comment Expansion']) {
|
if (Conf['Comment Expansion']) {
|
||||||
ExpandComment.callbacks.push(this.node);
|
ExpandComment.callbacks.push(this.node);
|
||||||
}
|
}
|
||||||
@ -8908,11 +8907,11 @@
|
|||||||
|
|
||||||
RevealSpoilers = {
|
RevealSpoilers = {
|
||||||
init: function() {
|
init: function() {
|
||||||
if (g.VIEW === 'catalog' || !Conf['Reveal Spoilers']) {
|
if (g.VIEW === 'catalog' || !Conf['Reveal Spoiler Thumbnails']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return Post.prototype.callbacks.push({
|
return Post.prototype.callbacks.push({
|
||||||
name: 'Reveal Spoilers',
|
name: 'Reveal Spoiler Thumbnails',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -10271,6 +10270,9 @@
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
saveLastReadPost: $.debounce(2 * $.SECOND, function() {
|
saveLastReadPost: $.debounce(2 * $.SECOND, function() {
|
||||||
|
if (Unread.thread.isDead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
return Unread.db.set({
|
return Unread.db.set({
|
||||||
boardID: Unread.thread.board.ID,
|
boardID: Unread.thread.board.ID,
|
||||||
threadID: Unread.thread.ID,
|
threadID: Unread.thread.ID,
|
||||||
@ -10308,9 +10310,11 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
Redirect = {
|
Redirect = {
|
||||||
thread: {},
|
data: {
|
||||||
post: {},
|
thread: {},
|
||||||
file: {},
|
post: {},
|
||||||
|
file: {}
|
||||||
|
},
|
||||||
init: function() {
|
init: function() {
|
||||||
var archive, boardID, boards, data, id, name, type, _i, _len, _ref, _ref1, _ref2;
|
var archive, boardID, boards, data, id, name, type, _i, _len, _ref, _ref1, _ref2;
|
||||||
|
|
||||||
@ -10324,7 +10328,7 @@
|
|||||||
if (!boards.contains(boardID)) {
|
if (!boards.contains(boardID)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Redirect[type][boardID] = archive;
|
Redirect.data[type][boardID] = archive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -10334,126 +10338,118 @@
|
|||||||
_ref2 = archive.boards;
|
_ref2 = archive.boards;
|
||||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||||
boardID = _ref2[_i];
|
boardID = _ref2[_i];
|
||||||
if (!(boardID in Redirect.thread)) {
|
if (!(boardID in Redirect.data.thread)) {
|
||||||
Redirect.thread[boardID] = archive;
|
Redirect.data.thread[boardID] = archive;
|
||||||
}
|
}
|
||||||
if (!(boardID in Redirect.post || archive.software !== 'foolfuuka')) {
|
if (!(boardID in Redirect.data.post || archive.software !== 'foolfuuka')) {
|
||||||
Redirect.post[boardID] = archive;
|
Redirect.data.post[boardID] = archive;
|
||||||
}
|
}
|
||||||
if (!(boardID in Redirect.file || !archive.files.contains(boardID))) {
|
if (!(boardID in Redirect.data.file || !archive.files.contains(boardID))) {
|
||||||
Redirect.file[boardID] = archive;
|
Redirect.data.file[boardID] = archive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
archives: {
|
archives: {
|
||||||
'Foolz': {
|
|
||||||
'domain': 'archive.foolz.us',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
|
||||||
'files': ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
|
||||||
},
|
|
||||||
'NSFW Foolz': {
|
|
||||||
'domain': 'nsfw.foolz.us',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['u'],
|
|
||||||
'files': ['u']
|
|
||||||
},
|
|
||||||
'The Dark Cave': {
|
|
||||||
'domain': 'archive.thedarkcave.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['c', 'int', 'out', 'po'],
|
|
||||||
'files': ['c', 'po']
|
|
||||||
},
|
|
||||||
'4plebs': {
|
'4plebs': {
|
||||||
'domain': 'archive.4plebs.org',
|
domain: 'archive.4plebs.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['hr', 'tg', 'tv', 'x'],
|
boards: ['hr', 'tg', 'tv', 'x'],
|
||||||
'files': ['hr', 'tg', 'tv', 'x']
|
files: ['hr', 'tg', 'tv', 'x']
|
||||||
},
|
},
|
||||||
'Nyafuu': {
|
'fap archive': {
|
||||||
'domain': 'archive.nyafuu.org',
|
domain: 'fuuka.worldathleticproject.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: false,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['c', 'w', 'wg'],
|
boards: ['b', 'e', 'h', 'hc', 'p', 's', 'u'],
|
||||||
'files': ['c', 'w', 'wg']
|
files: ['b', 'e', 'h', 'hc', 'p', 's', 'u']
|
||||||
|
},
|
||||||
|
'Foolz': {
|
||||||
|
domain: 'archive.foolz.us',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
|
files: ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
||||||
},
|
},
|
||||||
'Foolz a Shit': {
|
'Foolz a Shit': {
|
||||||
'domain': 'archive.foolzashit.com',
|
domain: 'archive.foolzashit.com',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
|
boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
|
||||||
'files': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
||||||
},
|
},
|
||||||
'World Athletic Project': {
|
'Foolz Beta': {
|
||||||
'domain': 'fuuka.worldathleticproject.org',
|
domain: 'beta.foolz.us',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': false,
|
https: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['e', 'h', 'p', 's', 'u'],
|
boards: ['a', 'co', 'gd', 'h', 'jp', 'm', 'mlp', 'q', 'sp', 'tg', 'tv', 'u', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
files: ['a', 'gd', 'h', 'jp', 'm', 'q', 'tg', 'u', 'vg', 'vp', 'vr', 'wsg']
|
||||||
},
|
|
||||||
'Install Gentoo': {
|
|
||||||
'domain': 'archive.installgentoo.net',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['diy', 'g', 'sci'],
|
|
||||||
'files': []
|
|
||||||
},
|
|
||||||
'warosu': {
|
|
||||||
'domain': 'fuuka.warosu.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
|
||||||
},
|
|
||||||
'Rebecca Black Tech': {
|
|
||||||
'domain': 'rbt.asia',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['cgl', 'g', 'mu', 'w'],
|
|
||||||
'files': ['cgl', 'g', 'mu', 'w']
|
|
||||||
},
|
},
|
||||||
'Heinessen': {
|
'Heinessen': {
|
||||||
'domain': 'archive.heinessen.com',
|
domain: 'archive.heinessen.com',
|
||||||
'http': true,
|
http: true,
|
||||||
'software': 'fuuka',
|
software: 'fuuka',
|
||||||
'boards': ['an', 'fit', 'k', 'mlp', 'r9k', 'toy'],
|
boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy'],
|
||||||
'files': ['an', 'k', 'toy']
|
files: ['an', 'k', 'toy']
|
||||||
|
},
|
||||||
|
'Install Gentoo': {
|
||||||
|
domain: 'archive.installgentoo.net',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'fuuka',
|
||||||
|
boards: ['diy', 'g', 'sci'],
|
||||||
|
files: []
|
||||||
|
},
|
||||||
|
'NSFW Foolz': {
|
||||||
|
domain: 'nsfw.foolz.us',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['u'],
|
||||||
|
files: ['u']
|
||||||
|
},
|
||||||
|
'Nyafuu': {
|
||||||
|
domain: 'archive.nyafuu.org',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['c', 'w', 'wg'],
|
||||||
|
files: ['c', 'w', 'wg']
|
||||||
|
},
|
||||||
|
'Rebecca Black Tech': {
|
||||||
|
domain: 'rbt.asia',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'fuuka',
|
||||||
|
boards: ['cgl', 'g', 'mu', 'w'],
|
||||||
|
files: ['cgl', 'g', 'mu', 'w']
|
||||||
|
},
|
||||||
|
'The Dark Cave': {
|
||||||
|
domain: 'archive.thedarkcave.org',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['c', 'int', 'out', 'po'],
|
||||||
|
files: ['c', 'po']
|
||||||
},
|
},
|
||||||
'warosu': {
|
'warosu': {
|
||||||
'domain': 'fuuka.warosu.org',
|
domain: 'fuuka.warosu.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: true,
|
||||||
'software': 'fuuka',
|
software: 'fuuka',
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
boards: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'vr']
|
files: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
||||||
},
|
|
||||||
'worldathleticproject': {
|
|
||||||
'domain': 'fuuka.worldathleticproject.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['e', 'h', 'p', 's', 'u'],
|
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
to: function(dest, data) {
|
to: function(dest, data) {
|
||||||
var archive;
|
var archive;
|
||||||
|
|
||||||
archive = (dest === 'search' ? Redirect.thread : Redirect[dest])[data.boardID];
|
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
||||||
if (!archive) {
|
if (!archive) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,6 +94,8 @@
|
|||||||
* license: http://www.gnu.org/copyleft/lesser.html
|
* license: http://www.gnu.org/copyleft/lesser.html
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
'use strict';
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, IDColor, ImageExpand, ImageHover, ImageLoader, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation,
|
var $, $$, Anonymize, ArchiveLink, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, GlobalMessage, Header, IDColor, ImageExpand, ImageHover, ImageLoader, JSColor, Keybinds, Linkify, Main, MascotTools, Mascots, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Rice, Sauce, Settings, Style, ThemeTools, Themes, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, editMascot, editTheme, g, userNavigation,
|
||||||
__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; },
|
__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; },
|
||||||
@ -141,7 +143,7 @@
|
|||||||
'Image Expansion': [true, 'Expand images.'],
|
'Image Expansion': [true, 'Expand images.'],
|
||||||
'Image Hover': [true, 'Show full image on mouseover.'],
|
'Image Hover': [true, 'Show full image on mouseover.'],
|
||||||
'Sauce': [true, 'Add sauce links to images.'],
|
'Sauce': [true, 'Add sauce links to images.'],
|
||||||
'Reveal Spoilers': [false, 'Reveal spoiler thumbnails.'],
|
'Reveal Spoiler Thumbnails': [false, 'Replace spoiler thumbnails with the original image.'],
|
||||||
'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'],
|
'Replace GIF': [false, 'Replace thumbnail of gifs with its actual image.'],
|
||||||
'Replace PNG': [false, 'Replace pngs.'],
|
'Replace PNG': [false, 'Replace pngs.'],
|
||||||
'Replace JPG': [false, 'Replace jpgs.'],
|
'Replace JPG': [false, 'Replace jpgs.'],
|
||||||
@ -6597,7 +6599,7 @@
|
|||||||
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
|
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.regString = Conf['Allow False Positives'] ? /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]|[a-z]{3,}:[a-z0-9?]|[\S]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
|
this.regString = Conf['Allow False Positives'] ? /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
|
||||||
if (Conf['Comment Expansion']) {
|
if (Conf['Comment Expansion']) {
|
||||||
ExpandComment.callbacks.push(this.node);
|
ExpandComment.callbacks.push(this.node);
|
||||||
}
|
}
|
||||||
@ -8887,11 +8889,11 @@
|
|||||||
|
|
||||||
RevealSpoilers = {
|
RevealSpoilers = {
|
||||||
init: function() {
|
init: function() {
|
||||||
if (g.VIEW === 'catalog' || !Conf['Reveal Spoilers']) {
|
if (g.VIEW === 'catalog' || !Conf['Reveal Spoiler Thumbnails']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return Post.prototype.callbacks.push({
|
return Post.prototype.callbacks.push({
|
||||||
name: 'Reveal Spoilers',
|
name: 'Reveal Spoiler Thumbnails',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -10250,6 +10252,9 @@
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
saveLastReadPost: $.debounce(2 * $.SECOND, function() {
|
saveLastReadPost: $.debounce(2 * $.SECOND, function() {
|
||||||
|
if (Unread.thread.isDead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
return Unread.db.set({
|
return Unread.db.set({
|
||||||
boardID: Unread.thread.board.ID,
|
boardID: Unread.thread.board.ID,
|
||||||
threadID: Unread.thread.ID,
|
threadID: Unread.thread.ID,
|
||||||
@ -10292,9 +10297,11 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
Redirect = {
|
Redirect = {
|
||||||
thread: {},
|
data: {
|
||||||
post: {},
|
thread: {},
|
||||||
file: {},
|
post: {},
|
||||||
|
file: {}
|
||||||
|
},
|
||||||
init: function() {
|
init: function() {
|
||||||
var archive, boardID, boards, data, id, name, type, _i, _len, _ref, _ref1, _ref2;
|
var archive, boardID, boards, data, id, name, type, _i, _len, _ref, _ref1, _ref2;
|
||||||
|
|
||||||
@ -10308,7 +10315,7 @@
|
|||||||
if (!boards.contains(boardID)) {
|
if (!boards.contains(boardID)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Redirect[type][boardID] = archive;
|
Redirect.data[type][boardID] = archive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -10318,126 +10325,118 @@
|
|||||||
_ref2 = archive.boards;
|
_ref2 = archive.boards;
|
||||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||||
boardID = _ref2[_i];
|
boardID = _ref2[_i];
|
||||||
if (!(boardID in Redirect.thread)) {
|
if (!(boardID in Redirect.data.thread)) {
|
||||||
Redirect.thread[boardID] = archive;
|
Redirect.data.thread[boardID] = archive;
|
||||||
}
|
}
|
||||||
if (!(boardID in Redirect.post || archive.software !== 'foolfuuka')) {
|
if (!(boardID in Redirect.data.post || archive.software !== 'foolfuuka')) {
|
||||||
Redirect.post[boardID] = archive;
|
Redirect.data.post[boardID] = archive;
|
||||||
}
|
}
|
||||||
if (!(boardID in Redirect.file || !archive.files.contains(boardID))) {
|
if (!(boardID in Redirect.data.file || !archive.files.contains(boardID))) {
|
||||||
Redirect.file[boardID] = archive;
|
Redirect.data.file[boardID] = archive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
archives: {
|
archives: {
|
||||||
'Foolz': {
|
|
||||||
'domain': 'archive.foolz.us',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
|
||||||
'files': ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
|
||||||
},
|
|
||||||
'NSFW Foolz': {
|
|
||||||
'domain': 'nsfw.foolz.us',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['u'],
|
|
||||||
'files': ['u']
|
|
||||||
},
|
|
||||||
'The Dark Cave': {
|
|
||||||
'domain': 'archive.thedarkcave.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['c', 'int', 'out', 'po'],
|
|
||||||
'files': ['c', 'po']
|
|
||||||
},
|
|
||||||
'4plebs': {
|
'4plebs': {
|
||||||
'domain': 'archive.4plebs.org',
|
domain: 'archive.4plebs.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['hr', 'tg', 'tv', 'x'],
|
boards: ['hr', 'tg', 'tv', 'x'],
|
||||||
'files': ['hr', 'tg', 'tv', 'x']
|
files: ['hr', 'tg', 'tv', 'x']
|
||||||
},
|
},
|
||||||
'Nyafuu': {
|
'fap archive': {
|
||||||
'domain': 'archive.nyafuu.org',
|
domain: 'fuuka.worldathleticproject.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: false,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['c', 'w', 'wg'],
|
boards: ['b', 'e', 'h', 'hc', 'p', 's', 'u'],
|
||||||
'files': ['c', 'w', 'wg']
|
files: ['b', 'e', 'h', 'hc', 'p', 's', 'u']
|
||||||
|
},
|
||||||
|
'Foolz': {
|
||||||
|
domain: 'archive.foolz.us',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
|
files: ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
||||||
},
|
},
|
||||||
'Foolz a Shit': {
|
'Foolz a Shit': {
|
||||||
'domain': 'archive.foolzashit.com',
|
domain: 'archive.foolzashit.com',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
|
boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
|
||||||
'files': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
||||||
},
|
},
|
||||||
'World Athletic Project': {
|
'Foolz Beta': {
|
||||||
'domain': 'fuuka.worldathleticproject.org',
|
domain: 'beta.foolz.us',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': false,
|
https: true,
|
||||||
'software': 'foolfuuka',
|
software: 'foolfuuka',
|
||||||
'boards': ['e', 'h', 'p', 's', 'u'],
|
boards: ['a', 'co', 'gd', 'h', 'jp', 'm', 'mlp', 'q', 'sp', 'tg', 'tv', 'u', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
files: ['a', 'gd', 'h', 'jp', 'm', 'q', 'tg', 'u', 'vg', 'vp', 'vr', 'wsg']
|
||||||
},
|
|
||||||
'Install Gentoo': {
|
|
||||||
'domain': 'archive.installgentoo.net',
|
|
||||||
'http': false,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['diy', 'g', 'sci'],
|
|
||||||
'files': []
|
|
||||||
},
|
|
||||||
'warosu': {
|
|
||||||
'domain': 'fuuka.warosu.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
|
||||||
},
|
|
||||||
'Rebecca Black Tech': {
|
|
||||||
'domain': 'rbt.asia',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'fuuka',
|
|
||||||
'boards': ['cgl', 'g', 'mu', 'w'],
|
|
||||||
'files': ['cgl', 'g', 'mu', 'w']
|
|
||||||
},
|
},
|
||||||
'Heinessen': {
|
'Heinessen': {
|
||||||
'domain': 'archive.heinessen.com',
|
domain: 'archive.heinessen.com',
|
||||||
'http': true,
|
http: true,
|
||||||
'software': 'fuuka',
|
software: 'fuuka',
|
||||||
'boards': ['an', 'fit', 'k', 'mlp', 'r9k', 'toy'],
|
boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy'],
|
||||||
'files': ['an', 'k', 'toy']
|
files: ['an', 'k', 'toy']
|
||||||
|
},
|
||||||
|
'Install Gentoo': {
|
||||||
|
domain: 'archive.installgentoo.net',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'fuuka',
|
||||||
|
boards: ['diy', 'g', 'sci'],
|
||||||
|
files: []
|
||||||
|
},
|
||||||
|
'NSFW Foolz': {
|
||||||
|
domain: 'nsfw.foolz.us',
|
||||||
|
http: false,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['u'],
|
||||||
|
files: ['u']
|
||||||
|
},
|
||||||
|
'Nyafuu': {
|
||||||
|
domain: 'archive.nyafuu.org',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['c', 'w', 'wg'],
|
||||||
|
files: ['c', 'w', 'wg']
|
||||||
|
},
|
||||||
|
'Rebecca Black Tech': {
|
||||||
|
domain: 'rbt.asia',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'fuuka',
|
||||||
|
boards: ['cgl', 'g', 'mu', 'w'],
|
||||||
|
files: ['cgl', 'g', 'mu', 'w']
|
||||||
|
},
|
||||||
|
'The Dark Cave': {
|
||||||
|
domain: 'archive.thedarkcave.org',
|
||||||
|
http: true,
|
||||||
|
https: true,
|
||||||
|
software: 'foolfuuka',
|
||||||
|
boards: ['c', 'int', 'out', 'po'],
|
||||||
|
files: ['c', 'po']
|
||||||
},
|
},
|
||||||
'warosu': {
|
'warosu': {
|
||||||
'domain': 'fuuka.warosu.org',
|
domain: 'fuuka.warosu.org',
|
||||||
'http': true,
|
http: true,
|
||||||
'https': true,
|
https: true,
|
||||||
'software': 'fuuka',
|
software: 'fuuka',
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
boards: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr'],
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'vr']
|
files: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
||||||
},
|
|
||||||
'worldathleticproject': {
|
|
||||||
'domain': 'fuuka.worldathleticproject.org',
|
|
||||||
'http': true,
|
|
||||||
'https': true,
|
|
||||||
'software': 'foolfuuka',
|
|
||||||
'boards': ['e', 'h', 'p', 's', 'u'],
|
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
to: function(dest, data) {
|
to: function(dest, data) {
|
||||||
var archive;
|
var archive;
|
||||||
|
|
||||||
archive = (dest === 'search' ? Redirect.thread : Redirect[dest])[data.boardID];
|
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
||||||
if (!archive) {
|
if (!archive) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
109
json/archives.json
Normal file
109
json/archives.json
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
[{
|
||||||
|
"uid": 0,
|
||||||
|
"name": "Foolz",
|
||||||
|
"domain": "archive.foolz.us",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["a", "co", "gd", "jp", "m", "q", "sp", "tg", "tv", "v", "vg", "vp", "vr", "wsg"],
|
||||||
|
"files": ["a", "gd", "jp", "m", "q", "tg", "vg", "vp", "vr", "wsg"]
|
||||||
|
}, {
|
||||||
|
"uid": 1,
|
||||||
|
"name": "NSFW Foolz",
|
||||||
|
"domain": "nsfw.foolz.us",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["u"],
|
||||||
|
"files": ["u"]
|
||||||
|
}, {
|
||||||
|
"uid": 2,
|
||||||
|
"name": "The Dark Cave",
|
||||||
|
"domain": "archive.thedarkcave.org",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["c", "int", "out", "po"],
|
||||||
|
"files": ["c", "po"]
|
||||||
|
}, {
|
||||||
|
"uid": 3,
|
||||||
|
"name": "4plebs",
|
||||||
|
"domain": "archive.4plebs.org",
|
||||||
|
"http": true,
|
||||||
|
"https": false,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["hr", "tg", "tv", "x"],
|
||||||
|
"files": ["hr", "tg", "tv", "x"]
|
||||||
|
}, {
|
||||||
|
"uid": 4,
|
||||||
|
"name": "Nyafuu",
|
||||||
|
"domain": "archive.nyafuu.org",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["c", "w", "wg"],
|
||||||
|
"files": ["c", "w", "wg"]
|
||||||
|
}, {
|
||||||
|
"uid": 11,
|
||||||
|
"name": "Foolz a Shit",
|
||||||
|
"domain": "archive.foolzashit.com",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["adv", "asp", "cm", "e", "i", "lgbt", "n", "o", "p", "pol", "s", "s4s", "t", "trv", "y"],
|
||||||
|
"files": ["adv", "asp", "cm", "e", "i", "lgbt", "n", "o", "p", "s", "s4s", "t", "trv", "y"]
|
||||||
|
}, {
|
||||||
|
"uid": 12,
|
||||||
|
"name": "fap archive",
|
||||||
|
"domain": "fuuka.worldathleticproject.org",
|
||||||
|
"http": true,
|
||||||
|
"https": false,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["b", "e", "h", "hc", "p", "s", "u"],
|
||||||
|
"files": ["b", "e", "h", "hc", "p", "s", "u"]
|
||||||
|
}, {
|
||||||
|
"uid": 7,
|
||||||
|
"name": "Install Gentoo",
|
||||||
|
"domain": "archive.installgentoo.net",
|
||||||
|
"http": false,
|
||||||
|
"https": true,
|
||||||
|
"software": "fuuka",
|
||||||
|
"boards": ["diy", "g", "sci"],
|
||||||
|
"files": []
|
||||||
|
}, {
|
||||||
|
"uid": 8,
|
||||||
|
"name": "Rebecca Black Tech",
|
||||||
|
"domain": "rbt.asia",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "fuuka",
|
||||||
|
"boards": ["cgl", "g", "mu", "w"],
|
||||||
|
"files": ["cgl", "g", "mu", "w"]
|
||||||
|
}, {
|
||||||
|
"uid": 9,
|
||||||
|
"name": "Heinessen",
|
||||||
|
"domain": "archive.heinessen.com",
|
||||||
|
"http": true,
|
||||||
|
"https": false,
|
||||||
|
"software": "fuuka",
|
||||||
|
"boards": ["an", "fit", "k", "mlp", "r9k", "toy"],
|
||||||
|
"files": ["an", "fit", "k", "r9k", "toy"]
|
||||||
|
}, {
|
||||||
|
"uid": 10,
|
||||||
|
"name": "warosu",
|
||||||
|
"domain": "fuuka.warosu.org",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "fuuka",
|
||||||
|
"boards": ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "q", "tg", "vr"],
|
||||||
|
"files": ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "q", "tg", "vr"]
|
||||||
|
}, {
|
||||||
|
"uid": 13,
|
||||||
|
"name": "Foolz Beta",
|
||||||
|
"domain": "beta.foolz.us",
|
||||||
|
"http": true,
|
||||||
|
"https": true,
|
||||||
|
"software": "foolfuuka",
|
||||||
|
"boards": ["a", "co", "gd", "h", "jp", "m", "mlp", "q", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
||||||
|
"files": ["a", "gd", "h", "jp", "m", "q", "tg", "u", "vg", "vp", "vr", "wsg"]
|
||||||
|
}]
|
||||||
@ -1 +1,5 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
postMessage({version:'2.2.2'},'*')
|
postMessage({version:'2.2.2'},'*')
|
||||||
|
=======
|
||||||
|
postMessage({version:'1.2.25'},'*')
|
||||||
|
>>>>>>> v3
|
||||||
|
|||||||
@ -28,7 +28,8 @@
|
|||||||
"grunt-contrib-concat": "~0.3.0",
|
"grunt-contrib-concat": "~0.3.0",
|
||||||
"grunt-contrib-copy": "~0.4.1",
|
"grunt-contrib-copy": "~0.4.1",
|
||||||
"grunt-contrib-watch": "~0.5.0",
|
"grunt-contrib-watch": "~0.5.0",
|
||||||
"grunt-shell": "~0.3.1"
|
"grunt-shell": "~0.3.1",
|
||||||
|
"matchdep": "~0.1.2"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
Redirect =
|
Redirect =
|
||||||
thread: {}
|
data:
|
||||||
post: {}
|
thread: {}
|
||||||
file: {}
|
post: {}
|
||||||
|
file: {}
|
||||||
|
|
||||||
init: ->
|
init: ->
|
||||||
for boardID, data of Conf['selectedArchives']
|
for boardID, data of Conf['selectedArchives']
|
||||||
@ -9,122 +10,114 @@ Redirect =
|
|||||||
if archive = Redirect.archives[id]
|
if archive = Redirect.archives[id]
|
||||||
boards = archive[type] or archive['boards']
|
boards = archive[type] or archive['boards']
|
||||||
continue unless boards.contains boardID
|
continue unless boards.contains boardID
|
||||||
Redirect[type][boardID] = archive
|
Redirect.data[type][boardID] = archive
|
||||||
for name, archive of Redirect.archives
|
for name, archive of Redirect.archives
|
||||||
for boardID in archive.boards
|
for boardID in archive.boards
|
||||||
unless boardID of Redirect.thread
|
unless boardID of Redirect.data.thread
|
||||||
Redirect.thread[boardID] = archive
|
Redirect.data.thread[boardID] = archive
|
||||||
unless boardID of Redirect.post or archive.software isnt 'foolfuuka'
|
unless boardID of Redirect.data.post or archive.software isnt 'foolfuuka'
|
||||||
Redirect.post[boardID] = archive
|
Redirect.data.post[boardID] = archive
|
||||||
unless boardID of Redirect.file or !archive.files.contains boardID
|
unless boardID of Redirect.data.file or !archive.files.contains boardID
|
||||||
Redirect.file[boardID] = archive
|
Redirect.data.file[boardID] = archive
|
||||||
return
|
return
|
||||||
|
|
||||||
archives:
|
archives:
|
||||||
'Foolz':
|
|
||||||
'domain': 'archive.foolz.us'
|
|
||||||
'http': false
|
|
||||||
'https': true
|
|
||||||
'software': 'foolfuuka'
|
|
||||||
'boards': ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg']
|
|
||||||
'files': ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
|
||||||
|
|
||||||
'NSFW Foolz':
|
|
||||||
'domain': 'nsfw.foolz.us'
|
|
||||||
'http': false
|
|
||||||
'https': true
|
|
||||||
'software': 'foolfuuka'
|
|
||||||
'boards': ['u']
|
|
||||||
'files': ['u']
|
|
||||||
|
|
||||||
'The Dark Cave':
|
|
||||||
'domain': 'archive.thedarkcave.org'
|
|
||||||
'http': true
|
|
||||||
'https': true
|
|
||||||
'software': 'foolfuuka'
|
|
||||||
'boards': ['c', 'int', 'out', 'po']
|
|
||||||
'files': ['c', 'po']
|
|
||||||
|
|
||||||
'4plebs':
|
'4plebs':
|
||||||
'domain': 'archive.4plebs.org'
|
domain: 'archive.4plebs.org'
|
||||||
'http': true
|
http: true
|
||||||
'software': 'foolfuuka'
|
software: 'foolfuuka'
|
||||||
'boards': ['hr', 'tg', 'tv', 'x']
|
boards: ['hr', 'tg', 'tv', 'x']
|
||||||
'files': ['hr', 'tg', 'tv', 'x']
|
files: ['hr', 'tg', 'tv', 'x']
|
||||||
|
|
||||||
'Nyafuu':
|
'fap archive':
|
||||||
'domain': 'archive.nyafuu.org'
|
domain: 'fuuka.worldathleticproject.org'
|
||||||
'http': true
|
http: true
|
||||||
'https': true
|
https: false
|
||||||
'software': 'foolfuuka'
|
software: 'foolfuuka'
|
||||||
'boards': ['c', 'w', 'wg']
|
boards: ['b', 'e', 'h', 'hc', 'p', 's', 'u']
|
||||||
'files': ['c', 'w', 'wg']
|
files: ['b', 'e', 'h', 'hc', 'p', 's', 'u']
|
||||||
|
|
||||||
|
'Foolz':
|
||||||
|
domain: 'archive.foolz.us'
|
||||||
|
http: false
|
||||||
|
https: true
|
||||||
|
software: 'foolfuuka'
|
||||||
|
boards: ['a', 'co', 'gd', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'vp', 'vr', 'wsg']
|
||||||
|
files: ['a', 'gd', 'jp', 'm', 'q', 'tg', 'vg', 'vp', 'vr', 'wsg']
|
||||||
|
|
||||||
'Foolz a Shit':
|
'Foolz a Shit':
|
||||||
'domain': 'archive.foolzashit.com'
|
domain: 'archive.foolzashit.com'
|
||||||
'http': true
|
http: true
|
||||||
'https': true
|
https: true
|
||||||
'software': 'foolfuuka'
|
software: 'foolfuuka'
|
||||||
'boards': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
||||||
'files': ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
|
||||||
|
|
||||||
'World Athletic Project':
|
'Foolz Beta':
|
||||||
'domain': 'fuuka.worldathleticproject.org'
|
domain: 'beta.foolz.us'
|
||||||
'http': true
|
http: true
|
||||||
'https': false
|
https: true,
|
||||||
'software': 'foolfuuka'
|
software: 'foolfuuka'
|
||||||
'boards': ['e', 'h', 'p', 's', 'u']
|
boards: ['a', 'co', 'gd', 'h', 'jp', 'm', 'mlp', 'q', 'sp', 'tg', 'tv', 'u', 'v', 'vg', 'vp', 'vr', 'wsg'],
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
files: ['a', 'gd', 'h', 'jp', 'm', 'q', 'tg', 'u', 'vg', 'vp', 'vr', 'wsg']
|
||||||
|
|
||||||
'Install Gentoo':
|
|
||||||
'domain': 'archive.installgentoo.net'
|
|
||||||
'http': false
|
|
||||||
'https': true
|
|
||||||
'software': 'fuuka'
|
|
||||||
'boards': ['diy', 'g', 'sci']
|
|
||||||
'files': []
|
|
||||||
|
|
||||||
'warosu':
|
|
||||||
'domain': 'fuuka.warosu.org'
|
|
||||||
'http': true
|
|
||||||
'https': true
|
|
||||||
'software': 'fuuka'
|
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
|
||||||
|
|
||||||
'Rebecca Black Tech':
|
|
||||||
'domain': 'rbt.asia'
|
|
||||||
'http': true
|
|
||||||
'https': true
|
|
||||||
'software': 'fuuka'
|
|
||||||
'boards': ['cgl', 'g', 'mu', 'w']
|
|
||||||
'files': ['cgl', 'g', 'mu', 'w']
|
|
||||||
|
|
||||||
'Heinessen':
|
'Heinessen':
|
||||||
'domain': 'archive.heinessen.com'
|
domain: 'archive.heinessen.com'
|
||||||
'http': true
|
http: true
|
||||||
'software': 'fuuka'
|
software: 'fuuka'
|
||||||
'boards': ['an', 'fit', 'k', 'mlp', 'r9k', 'toy']
|
boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy']
|
||||||
'files': ['an', 'k', 'toy']
|
files: ['an', 'k', 'toy']
|
||||||
|
|
||||||
|
'Install Gentoo':
|
||||||
|
domain: 'archive.installgentoo.net'
|
||||||
|
http: false
|
||||||
|
https: true
|
||||||
|
software: 'fuuka'
|
||||||
|
boards: ['diy', 'g', 'sci']
|
||||||
|
files: []
|
||||||
|
|
||||||
|
'NSFW Foolz':
|
||||||
|
domain: 'nsfw.foolz.us'
|
||||||
|
http: false
|
||||||
|
https: true
|
||||||
|
software: 'foolfuuka'
|
||||||
|
boards: ['u']
|
||||||
|
files: ['u']
|
||||||
|
|
||||||
|
'Nyafuu':
|
||||||
|
domain: 'archive.nyafuu.org'
|
||||||
|
http: true
|
||||||
|
https: true
|
||||||
|
software: 'foolfuuka'
|
||||||
|
boards: ['c', 'w', 'wg']
|
||||||
|
files: ['c', 'w', 'wg']
|
||||||
|
|
||||||
|
'Rebecca Black Tech':
|
||||||
|
domain: 'rbt.asia'
|
||||||
|
http: true
|
||||||
|
https: true
|
||||||
|
software: 'fuuka'
|
||||||
|
boards: ['cgl', 'g', 'mu', 'w']
|
||||||
|
files: ['cgl', 'g', 'mu', 'w']
|
||||||
|
|
||||||
|
'The Dark Cave':
|
||||||
|
domain: 'archive.thedarkcave.org'
|
||||||
|
http: true
|
||||||
|
https: true
|
||||||
|
software: 'foolfuuka'
|
||||||
|
boards: ['c', 'int', 'out', 'po']
|
||||||
|
files: ['c', 'po']
|
||||||
|
|
||||||
'warosu':
|
'warosu':
|
||||||
'domain': 'fuuka.warosu.org'
|
domain: 'fuuka.warosu.org'
|
||||||
'http': true
|
http: true
|
||||||
'https': true
|
https: true
|
||||||
'software': 'fuuka'
|
software: 'fuuka'
|
||||||
'boards': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
boards: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
||||||
'files': ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'vr']
|
files: ['3', 'cgl', 'ck', 'fa', 'ic', 'jp', 'lit', 'q', 'tg', 'vr']
|
||||||
|
|
||||||
'worldathleticproject':
|
|
||||||
'domain': 'fuuka.worldathleticproject.org'
|
|
||||||
'http': true
|
|
||||||
'https': true
|
|
||||||
'software': 'foolfuuka'
|
|
||||||
'boards': ['e', 'h', 'p', 's', 'u']
|
|
||||||
'files': ['e', 'h', 'p', 's', 'u']
|
|
||||||
|
|
||||||
to: (dest, data) ->
|
to: (dest, data) ->
|
||||||
archive = (if dest is 'search' then Redirect.thread else Redirect[dest])[data.boardID]
|
archive = (if dest is 'search' then Redirect.data.thread else Redirect.data[dest])[data.boardID]
|
||||||
return '' unless archive
|
return '' unless archive
|
||||||
Redirect[dest] archive, data
|
Redirect[dest] archive, data
|
||||||
|
|
||||||
|
|||||||
@ -133,9 +133,9 @@ Config =
|
|||||||
true
|
true
|
||||||
'Add sauce links to images.'
|
'Add sauce links to images.'
|
||||||
]
|
]
|
||||||
'Reveal Spoilers': [
|
'Reveal Spoiler Thumbnails': [
|
||||||
false
|
false
|
||||||
'Reveal spoiler thumbnails.'
|
'Replace spoiler thumbnails with the original image.'
|
||||||
]
|
]
|
||||||
'Replace GIF': [
|
'Replace GIF': [
|
||||||
false
|
false
|
||||||
|
|||||||
@ -219,11 +219,11 @@ $.off = (el, events, handler) ->
|
|||||||
$.event = (event, detail, root=d) ->
|
$.event = (event, detail, root=d) ->
|
||||||
root.dispatchEvent new CustomEvent event, {bubbles: true, detail}
|
root.dispatchEvent new CustomEvent event, {bubbles: true, detail}
|
||||||
|
|
||||||
$.open = (URL) ->
|
$.open =
|
||||||
<% if (type === 'userscript') { %>
|
<% if (type === 'userscript') { %>
|
||||||
GM_openInTab URL
|
GM_openInTab
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
window.open URL, '_blank'
|
(URL) -> window.open URL, '_blank'
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
$.debounce = (wait, fn) ->
|
$.debounce = (wait, fn) ->
|
||||||
|
|||||||
1
src/General/meta/usestrict.js
Normal file
1
src/General/meta/usestrict.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
'use strict';
|
||||||
@ -1,9 +1,9 @@
|
|||||||
RevealSpoilers =
|
RevealSpoilers =
|
||||||
init: ->
|
init: ->
|
||||||
return if g.VIEW is 'catalog' or !Conf['Reveal Spoilers']
|
return if g.VIEW is 'catalog' or !Conf['Reveal Spoiler Thumbnails']
|
||||||
|
|
||||||
Post::callbacks.push
|
Post::callbacks.push
|
||||||
name: 'Reveal Spoilers'
|
name: 'Reveal Spoiler Thumbnails'
|
||||||
cb: @node
|
cb: @node
|
||||||
node: ->
|
node: ->
|
||||||
return if @isClone or !@file?.isSpoiler
|
return if @isClone or !@file?.isSpoiler
|
||||||
|
|||||||
@ -15,7 +15,7 @@ Linkify =
|
|||||||
|
|
|
|
||||||
[a-z]{3,}:[a-z0-9?]
|
[a-z]{3,}:[a-z0-9?]
|
||||||
|
|
|
|
||||||
[\S]+@[a-z0-9.-]+\.[a-z0-9]
|
[^\s@]+@[a-z0-9.-]+\.[a-z0-9]
|
||||||
)
|
)
|
||||||
[^\s'"]+
|
[^\s'"]+
|
||||||
)///gi
|
)///gi
|
||||||
|
|||||||
@ -136,6 +136,7 @@ Unread =
|
|||||||
Unread.update() if e
|
Unread.update() if e
|
||||||
|
|
||||||
saveLastReadPost: $.debounce 2 * $.SECOND, ->
|
saveLastReadPost: $.debounce 2 * $.SECOND, ->
|
||||||
|
return if Unread.thread.isDead
|
||||||
Unread.db.set
|
Unread.db.set
|
||||||
boardID: Unread.thread.board.ID
|
boardID: Unread.thread.board.ID
|
||||||
threadID: Unread.thread.ID
|
threadID: Unread.thread.ID
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user