Start my quest to integrate 4chan-X V3

This commit is contained in:
Zixaphir 2013-03-12 03:53:57 -07:00
parent 9b0aa74875
commit 611377152e
6 changed files with 566 additions and 256 deletions

22
.gitattributes vendored Normal file
View File

@ -0,0 +1,22 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

5
.gitignore vendored
View File

@ -1,2 +1,7 @@
node_modules/ node_modules/
tmp/ tmp/
4chan_x.user.js
Cakefile
script.coffee
*~
*.db

View File

@ -125,20 +125,20 @@
'Expand from here': [true, 'Expand all images only from current position to thread end.'] 'Expand from here': [true, 'Expand all images only from current position to thread end.']
}, },
filter: { filter: {
name: ['# Filter any namefags:', '#/^(?!Anonymous$)/'].join('\n'), name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: ['# Filter a specific ID:', '#/Txhvk1Tl/'].join('\n'), uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
tripcode: ['# Filter any tripfag', '#/^!/'].join('\n'), tripcode: "# Filter any tripfag\n#/^!/",
capcode: ['# Set a custom class for mods:', '#/Mod$/;highlight:mod;op:yes', '# Set a custom class for moot:', '#/Admin$/;highlight:moot;op:yes'].join('\n'), capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes",
email: ['# Filter any e-mails that are not `sage` on /a/ and /jp/:', '#/^(?!sage$)/;boards:a,jp'].join('\n'), email: "# Filter any e-mails that are not `sage` on /a/ and /jp/:\n#/^(?!sage$)/;boards:a,jp",
subject: ['# Filter Generals on /v/:', '#/general/i;boards:v;op:only'].join('\n'), subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only",
comment: ['# Filter Stallman copypasta on /g/:', '#/what you\'re refer+ing to as linux/i;boards:g'].join('\n'), comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g",
flag: [''].join('\n'), flag: '',
filename: [''].join('\n'), filename: '',
dimensions: ['# Highlight potential wallpapers:', '#/1920x1080/;op:yes;highlight;top:no;boards:w,wg'].join('\n'), dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg",
filesize: [''].join('\n'), filesize: '',
MD5: [''].join('\n') MD5: ''
}, },
sauces: ['http://iqdb.org/?url=%turl', 'http://www.google.com/searchbyimage?image_url=%turl', '#http://tineye.com/search?url=%turl', '#http://saucenao.com/search.php?db=999&url=%turl', '#http://3d.iqdb.org/?url=%turl', '#http://regex.info/exif.cgi?imgurl=%url', '# uploaders:', '#http://imgur.com/upload?url=%url;text:Upload to imgur', '#http://omploader.org/upload?url1=%url;text:Upload to omploader', '# "View Same" in archives:', '#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz', '#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/', '#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/'].join('\n'), sauces: "http://iqdb.org/?url=%turl\nhttp://www.google.com/searchbyimage?image_url=%turl\n#http://tineye.com/search?url=%turl\n#http://saucenao.com/search.php?db=999&url=%turl\n#http://3d.iqdb.org/?url=%turl\n#http://regex.info/exif.cgi?imgurl=%url\n# uploaders:\n#http://imgur.com/upload?url=%url;text:Upload to imgur\n#http://omploader.org/upload?url1=%url;text:Upload to omploader\n# \"View Same\" in archives:\n#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz\n#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/\n#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/",
time: '%m/%d/%y(%a)%H:%M:%S', time: '%m/%d/%y(%a)%H:%M:%S',
backlink: '>>%id', backlink: '>>%id',
fileInfo: '%l (%p%s, %r)', fileInfo: '%l (%p%s, %r)',

110
Gruntfile.coffee Normal file
View File

@ -0,0 +1,110 @@
module.exports = (grunt) ->
pkg = grunt.file.readJSON 'package.json'
# Project configuration.
grunt.initConfig
pkg: pkg
concat:
coffee:
options:
process:
data: pkg
src: [
'src/config.coffee'
'src/globals.coffee'
'lib/ui.coffee'
'lib/$.coffee'
'lib/polyfill.coffee'
'src/features.coffee'
'src/qr.coffee'
'src/report.coffee'
'src/main.coffee'
]
dest: 'tmp/script.coffee'
script:
options:
process:
data: pkg
src: [
'src/metadata.js'
'src/banner.js'
'tmp/script.js'
]
dest: '<%= pkg.meta.files.userjs %>'
metadata:
options:
process:
data: pkg
src: 'src/metadata.js',
dest: '<%= pkg.meta.files.metajs %>'
coffee:
script:
src: 'tmp/script.coffee'
dest: 'tmp/script.js'
exec:
commit:
command: ->
release = "#{pkg.meta.name} v#{pkg.version}"
return [
"git checkout #{pkg.meta.mainBranch}"
"git commit -am 'Release #{release}.'"
"git tag -a #{pkg.version} -m '#{release}.'"
"git tag -af stable -m '#{release}.'"
].join(' && ');
stdout: true
push:
command: 'git push origin --all && git push origin --tags'
stdout: true
watch:
all:
options:
interrupt: true
files: [
'Gruntfile.js'
'package.json'
'lib/**/*.coffee'
'src/**/*.coffee'
'src/**/*.js'
'css/**/*.css'
'img/*'
]
tasks: 'default'
clean:
tmp: 'tmp'
grunt.loadNpmTasks 'grunt-bump'
grunt.loadNpmTasks 'grunt-contrib-clean'
grunt.loadNpmTasks 'grunt-contrib-coffee'
grunt.loadNpmTasks 'grunt-contrib-concat'
grunt.loadNpmTasks 'grunt-contrib-watch'
grunt.loadNpmTasks 'grunt-exec'
grunt.registerTask 'default', [
'concat:coffee'
'coffee:script'
'concat:script'
'concat:metadata'
'clean'
]
grunt.registerTask 'release', [
'default'
'exec:commit'
'exec:push'
]
grunt.registerTask 'patch', [
'bump'
]
grunt.registerTask 'upgrade', [
'bump:minor'
]

View File

@ -1,97 +0,0 @@
module.exports = function(grunt) {
var pkg = grunt.file.readJSON('package.json');
// Project configuration.
grunt.initConfig({
pkg: pkg,
concat: {
coffee: {
options: { process: { data: pkg } },
src: [
'src/config.coffee',
'src/globals.coffee',
'lib/ui.coffee',
'lib/$.coffee',
'lib/polyfill.coffee',
'src/features.coffee',
'src/qr.coffee',
'src/report.coffee',
'src/main.coffee'
],
dest: 'tmp/script.coffee'
},
script: {
options: { process: { data: pkg } },
src: [
'src/metadata.js',
'src/banner.js',
'tmp/script.js'
],
dest: '<%= pkg.meta.files.userjs %>'
},
metadata: {
options: { process: { data: pkg } },
src: 'src/metadata.js',
dest: '<%= pkg.meta.files.metajs %>'
}
},
coffee: {
script: {
src: 'tmp/script.coffee',
dest: 'tmp/script.js'
}
},
exec: {
commit: {
command: function() {
var release = pkg.meta.name + ' v' + pkg.version;
return [
'git checkout ' + pkg.meta.mainBranch,
'git commit -am "Release ' + release + '."',
'git tag -a ' + pkg.version + ' -m "' + release + '."',
'git tag -af stable -m "' + release + '."'
].join(' && ');
},
stdout: true
},
push: {
command: 'git push origin --all && git push origin --tags',
stdout: true
}
},
watch: {
all: {
options: {
interrupt: true
},
files: [
'Gruntfile.js',
'package.json',
'lib/**/*.coffee',
'src/**/*.coffee',
'src/**/*.js',
'css/**/*.css',
'img/*'
],
tasks: 'default'
}
},
clean: {
tmp: 'tmp'
}
});
grunt.loadNpmTasks('grunt-bump');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-coffee');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-exec');
grunt.registerTask('default', ['concat:coffee', 'coffee:script', 'concat:script', 'concat:metadata', 'clean']);
grunt.registerTask('release', ['default', 'exec:commit', 'exec:push']);
grunt.registerTask('patch', ['bump']);
grunt.registerTask('upgrade', ['bump:minor']);
};

View File

@ -1,172 +1,442 @@
Config = Config =
main: main:
'Miscellaneous': 'Miscellaneous':
'Enable 4chan\'s Extension': [false, 'Compatibility between <%= meta.name %> and 4chan\'s inline extension is NOT guaranteed.'] 'Enable 4chan\'s Extension': [
'404 Redirect': [true, 'Redirect dead threads and images.'] false
'Keybinds': [true, 'Bind actions to keyboard shortcuts.'] 'Compatibility between <%= meta.name %> and 4chan\'s inline extension is NOT guaranteed.'
'Time Formatting': [true, 'Localize and format timestamps arbitrarily.'] ]
'Relative Post Dates': [false, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'] '404 Redirect': [
'File Info Formatting': [true, 'Reformat the file information.'] true
'Comment Expansion': [true, 'Can expand too long comments.'] 'Redirect dead threads and images.'
'Thread Expansion': [true, 'Can expand threads to view all replies.'] ]
'Index Navigation': [false, 'Navigate to previous / next thread.'] 'Keybinds': [
'Custom CSS': [false, 'Apply custom CSS to 4chan.'] true
'Check for Updates': [true, 'Check for updated versions of <%= meta.name %>.'] 'Bind actions to keyboard shortcuts.'
]
'Time Formatting': [
true
'Localize and format timestamps arbitrarily.'
]
'Relative Post Dates': [
false
'Display dates like "3 minutes ago". Tooltip shows the timestamp.'
]
'File Info Formatting': [
true
'Reformat the file information.'
]
'Comment Expansion': [
true
'Can expand too long comments.'
]
'Thread Expansion': [
true
'Can expand threads to view all replies.'
]
'Index Navigation': [
false
'Navigate to previous / next thread.'
]
'Custom CSS': [
false
'Apply custom CSS to 4chan.'
]
'Check for Updates': [
true
'Check for updated versions of <%= meta.name %>.'
]
'Filtering': 'Filtering':
'Anonymize': [false, 'Turn everyone Anonymous.'] 'Anonymize': [
'Filter': [true, 'Self-moderation placebo.'] false
'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'] 'Turn everyone Anonymous.'
'Thread Hiding': [true, 'Hide entire threads.'] ]
'Reply Hiding': [true, 'Hide single replies.'] 'Filter': [
'Hiding Buttons': [true, 'Make buttons to hide threads / replies, in addition to menu links.'] true
'Stubs': [true, 'Make stubs of hidden threads / replies.'] 'Self-moderation placebo.'
]
'Recursive Hiding': [
true
'Hide replies of hidden posts, recursively.'
]
'Thread Hiding': [
true
'Hide entire threads.'
]
'Reply Hiding': [
true
'Hide single replies.'
]
'Hiding Buttons': [
true
'Make buttons to hide threads / replies, in addition to menu links.'
]
'Stubs': [
true
'Make stubs of hidden threads / replies.'
]
'Images': 'Images':
'Auto-GIF': [false, 'Animate GIF thumbnails.'] 'Auto-GIF': [
'Image Expansion': [true, 'Expand images.'] false
'Image Hover': [false, 'Show full image on mouseover.'] 'Animate GIF thumbnails.'
'Sauce': [true, 'Add sauce links to images.'] ]
'Reveal Spoilers': [false, 'Reveal spoiler thumbnails.'] 'Image Expansion': [
true
'Expand images.'
]
'Image Hover': [
false
'Show full image on mouseover.'
]
'Sauce': [
true
'Add sauce links to images.'
]
'Reveal Spoilers': [
false
'Reveal spoiler thumbnails.'
]
'Menu': 'Menu':
'Menu': [true, 'Add a drop-down menu in posts.'] 'Menu': [
'Report Link': [true, 'Add a report link to the menu.'] true
'Delete Link': [true, 'Add post and image deletion links to the menu.'] 'Add a drop-down menu in posts.'
'Download Link': [true, 'Add a download with original filename link to the menu. Chrome-only currently.'] ]
'Archive Link': [true, 'Add an archive link to the menu.'] 'Report Link': [
true
'Add a report link to the menu.'
]
'Delete Link': [
true
'Add post and image deletion links to the menu.'
]
'Download Link': [
true
'Add a download with original filename link to the menu. Chrome-only currently.'
]
'Archive Link': [
true
'Add an archive link to the menu.'
]
'Monitoring': 'Monitoring':
'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'] 'Thread Updater': [
'Unread Count': [true, 'Show the unread posts count in the tab title.'] true
'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.'] 'Fetch and insert new replies. Has more options in its own dialog.'
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'] ]
'Thread Stats': [true, 'Display reply and image count.'] 'Unread Count': [
'Thread Watcher': [true, 'Bookmark threads.'] true
'Auto Watch': [true, 'Automatically watch threads you start.'] 'Show the unread posts count in the tab title.'
'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'] ]
'Unread Tab Icon': [
true
'Show a different favicon when there are unread posts.'
]
'Thread Excerpt': [
true
'Show an excerpt of the thread in the tab title.'
]
'Thread Stats': [
true
'Display reply and image count.'
]
'Thread Watcher': [
true
'Bookmark threads.'
]
'Auto Watch': [
true
'Automatically watch threads you start.'
]
'Auto Watch Reply': [
false
'Automatically watch threads you reply to.'
]
'Posting': 'Posting':
'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'] 'Quick Reply': [
'Persistent QR': [false, 'The Quick reply won\'t disappear after posting.'] true
'Auto Hide QR': [false, 'Automatically hide the quick reply when posting.'] 'All-in-one form to reply, create threads, automate dumping and more.'
'Remember Subject': [false, 'Remember the subject field, instead of resetting after posting.'] ]
'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.'] 'Persistent QR': [
'Hide Original Post Form': [true, 'Hide the normal post form.'] false
'The Quick reply won\'t disappear after posting.'
]
'Auto Hide QR': [
false
'Automatically hide the quick reply when posting.'
]
'Remember Subject': [
false
'Remember the subject field, instead of resetting after posting.'
]
'Remember Spoiler': [
false
'Remember the spoiler state, instead of resetting after posting.'
]
'Hide Original Post Form': [
true
'Hide the normal post form.'
]
'Quote links': 'Quote links':
'Quote Backlinks': [true, 'Add quote backlinks.'] 'Quote Backlinks': [
'OP Backlinks': [false, 'Add backlinks to the OP.'] true
'Quote Inlining': [true, 'Inline quoted post on click.'] 'Add quote backlinks.'
'Forward Hiding': [true, 'Hide original posts of inlined backlinks.'] ]
'Quote Previewing': [true, 'Show quoted post on hover.'] 'OP Backlinks': [
'Quote Highlighting': [true, 'Highlight the previewed post.'] false
'Resurrect Quotes': [true, 'Link dead quotes to the archives.'] 'Add backlinks to the OP.'
'Mark Quotes of You': [true, 'Add \'(You)\' to quotes linking to your posts.'] ]
'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'] 'Quote Inlining': [
'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'] true
'Inline quoted post on click.'
]
'Forward Hiding': [
true
'Hide original posts of inlined backlinks.'
]
'Quote Previewing': [
true
'Show quoted post on hover.'
]
'Quote Highlighting': [
true
'Highlight the previewed post.'
]
'Resurrect Quotes': [
true
'Link dead quotes to the archives.'
]
'Mark Quotes of You': [
true
'Add \'(You)\' to quotes linking to your posts.'
]
'Mark OP Quotes': [
true
'Add \'(OP)\' to OP quotes.'
]
'Mark Cross-thread Quotes': [
true
'Add \'(Cross-thread)\' to cross-threads quotes.'
]
imageExpansion: imageExpansion:
'Fit width': [true, ''] 'Fit width': [
'Fit height': [false, ''] true
'Expand spoilers': [true, 'Expand all images along with spoilers.'] ''
'Expand from here': [true, 'Expand all images only from current position to thread end.'] ]
'Fit height': [
false
''
]
'Expand spoilers': [
true
'Expand all images along with spoilers.'
]
'Expand from here': [
true
'Expand all images only from current position to thread end.'
]
filter: filter:
name: [ name: """
'# Filter any namefags:' # Filter any namefags:
'#/^(?!Anonymous$)/' #/^(?!Anonymous$)/
].join '\n' """
uniqueID: [
'# Filter a specific ID:' uniqueID: """
'#/Txhvk1Tl/' # Filter a specific ID:
].join '\n' #/Txhvk1Tl/
tripcode: [ """
'# Filter any tripfag'
'#/^!/' tripcode: """
].join '\n' # Filter any tripfag
capcode: [ #/^!/
'# Set a custom class for mods:' """
'#/Mod$/;highlight:mod;op:yes'
'# Set a custom class for moot:' capcode: """
'#/Admin$/;highlight:moot;op:yes' # Set a custom class for mods:
].join '\n' #/Mod$/;highlight:mod;op:yes
email: [ # Set a custom class for moot:
'# Filter any e-mails that are not `sage` on /a/ and /jp/:' #/Admin$/;highlight:moot;op:yes
'#/^(?!sage$)/;boards:a,jp' """
].join '\n'
subject: [ email: """
'# Filter Generals on /v/:' # Filter any e-mails that are not `sage` on /a/ and /jp/:
'#/general/i;boards:v;op:only' #/^(?!sage$)/;boards:a,jp
].join '\n' """
comment: [ subject: """
'# Filter Stallman copypasta on /g/:' # Filter Generals on /v/:
'#/what you\'re refer+ing to as linux/i;boards:g' #/general/i;boards:v;op:only
].join '\n' """
flag: [
'' comment: """
].join '\n' # Filter Stallman copypasta on /g/:
filename: [ #/what you\'re refer+ing to as linux/i;boards:g
'' """
].join '\n'
dimensions: [ flag: ''
'# Highlight potential wallpapers:' filename: ''
'#/1920x1080/;op:yes;highlight;top:no;boards:w,wg' dimensions: """
].join '\n' # Highlight potential wallpapers:
filesize: [ #/1920x1080/;op:yes;highlight;top:no;boards:w,wg
'' """
].join '\n'
MD5: [ filesize: ''
''
].join '\n' MD5: ''
sauces: [
'http://iqdb.org/?url=%turl' sauces: """
'http://www.google.com/searchbyimage?image_url=%turl' http://iqdb.org/?url=%turl
'#http://tineye.com/search?url=%turl' http://www.google.com/searchbyimage?image_url=%turl
'#http://saucenao.com/search.php?db=999&url=%turl' #http://tineye.com/search?url=%turl
'#http://3d.iqdb.org/?url=%turl' #http://saucenao.com/search.php?db=999&url=%turl
'#http://regex.info/exif.cgi?imgurl=%url' #http://3d.iqdb.org/?url=%turl
'# uploaders:' #http://regex.info/exif.cgi?imgurl=%url
'#http://imgur.com/upload?url=%url;text:Upload to imgur' # uploaders:
'#http://omploader.org/upload?url1=%url;text:Upload to omploader' #http://imgur.com/upload?url=%url;text:Upload to imgur
'# "View Same" in archives:' #http://omploader.org/upload?url1=%url;text:Upload to omploader
'#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz' # "View Same" in archives:
'#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/' #//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz
'#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/' #//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/
].join '\n' #//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/
"""
time: '%m/%d/%y(%a)%H:%M:%S' time: '%m/%d/%y(%a)%H:%M:%S'
backlink: '>>%id' backlink: '>>%id'
fileInfo: '%l (%p%s, %r)' fileInfo: '%l (%p%s, %r)'
favicon: 'ferongr' favicon: 'ferongr'
usercss: '' usercss: ''
hotkeys: hotkeys:
# QR & Options # QR & Options
'Open empty QR': ['q', 'Open QR without post number inserted.'] 'Open empty QR': [
'Open QR': ['Shift+q', 'Open QR with post number inserted.'] 'q'
'Open settings': ['Alt+o', 'Open Settings.'] 'Open QR without post number inserted.'
'Close': ['Esc', 'Close Settings, Notifications or QR.'] ]
'Spoiler tags': ['Ctrl+s', 'Insert spoiler tags.'] 'Open QR': [
'Code tags': ['Alt+c', 'Insert code tags.'] 'Shift+q'
'Math tags': ['Alt+m', 'Insert math tags.'] 'Open QR with post number inserted.'
'Submit QR': ['Alt+s', 'Submit post.'] ]
'Open settings': [
'Alt+o'
'Open Settings.'
]
'Close': [
'Esc'
'Close Settings, Notifications or QR.'
]
'Spoiler tags': [
'Ctrl+s'
'Insert spoiler tags.'
]
'Code tags': [
'Alt+c'
'Insert code tags.'
]
'Math tags': [
'Alt+m'
'Insert math tags.'
]
'Submit QR': [
'Alt+s'
'Submit post.'
]
# Thread related # Thread related
'Watch': ['w', 'Watch thread.'] 'Watch': [
'Update': ['r', 'Update the thread now.'] 'w'
'Watch thread.'
]
'Update': [
'r'
'Update the thread now.'
]
# Images # Images
'Expand image': ['Shift+e', 'Expand selected image.'] 'Expand image': [
'Expand images': ['e', 'Expand all images.'] 'Shift+e'
'Expand selected image.'
]
'Expand images': [
'e'
'Expand all images.'
]
# Board Navigation # Board Navigation
'Front page': ['0', 'Jump to page 0.'] 'Front page': [
'Open front page': ['Shift+0', 'Open page 0 in a new tab.'] '0'
'Next page': ['Right', 'Jump to the next page.'] 'Jump to page 0.'
'Previous page': ['Left', 'Jump to the previous page.'] ]
'Open front page': [
'Shift+0'
'Open page 0 in a new tab.'
]
'Next page': [
'Right'
'Jump to the next page.'
]
'Previous page': [
'Left'
'Jump to the previous page.'
]
# Thread Navigation # Thread Navigation
'Next thread': ['Down', 'See next thread.'] 'Next thread': [
'Previous thread': ['Up', 'See previous thread.'] 'Down'
'Expand thread': ['Ctrl+e', 'Expand thread.'] 'See next thread.'
'Open thread': ['o', 'Open thread in current tab.'] ]
'Open thread tab': ['Shift+o', 'Open thread in new tab.'] 'Previous thread': [
'Up'
'See previous thread.'
]
'Expand thread': [
'Ctrl+e'
'Expand thread.'
]
'Open thread': [
'o'
'Open thread in current tab.'
]
'Open thread tab': [
'Shift+o'
'Open thread in new tab.'
]
# Reply Navigation # Reply Navigation
'Next reply': ['j', 'Select next reply.'] 'Next reply': [
'Previous reply': ['k', 'Select previous reply.'] 'j'
'Hide': ['x', 'Hide thread.'] 'Select next reply.'
]
'Previous reply': [
'k'
'Select previous reply.'
]
'Hide': [
'x'
'Hide thread.'
]
updater: updater:
checkbox: checkbox:
'Beep': [false, 'Beep on new post to completely read thread.'] 'Beep': [
'Auto Scroll': [false, 'Scroll updated posts into view. Only enabled at bottom of page.'] false
'Bottom Scroll': [false, 'Always scroll to the bottom, not the first new post. Useful for event threads.'] 'Beep on new post to completely read thread.'
'Scroll BG': [false, 'Auto-scroll background tabs.'] ]
'Auto Update': [true, 'Automatically fetch new posts.'] 'Auto Scroll': [
false
'Scroll updated posts into view. Only enabled at bottom of page.'
]
'Bottom Scroll': [
false
'Always scroll to the bottom, not the first new post. Useful for event threads.'
]
'Scroll BG': [
false
'Auto-scroll background tabs.'
]
'Auto Update': [
true
'Automatically fetch new posts.'
]
'Interval': 30 'Interval': 30