diff --git a/builds/appchan-x.js b/builds/appchan-x.js index 1d93dc657..e33e7b9e3 100644 --- a/builds/appchan-x.js +++ b/builds/appchan-x.js @@ -50,7 +50,7 @@ Config = { main: { 'Miscellaneous': { - 'Catalog Links': [true, 'Turn Navigation links into links to each board\'s catalog.'], + 'Catalog Links': [true, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], 'Custom Board Navigation': [false, 'Show custom links instead of the full board list.'], 'QR Shortcut': [false, 'Adds a small [QR] link in the header.'], @@ -76,8 +76,8 @@ 'Anonymize': [false, 'Make everyone Anonymous.'], 'Filter': [true, 'Self-moderation placebo.'], 'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'], - 'Thread Hiding': [true, 'Add buttons to hide entire threads.'], - 'Reply Hiding': [true, 'Add buttons to hide single replies.'], + 'Thread Hiding Buttons': [true, 'Add buttons to hide entire threads.'], + 'Reply Hiding Buttons': [true, 'Add buttons to hide single replies.'], 'Stubs': [true, 'Show stubs of hidden threads / replies.'] }, 'Images': { @@ -102,7 +102,7 @@ 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'], 'Unread Count': [true, 'Show the unread posts count in the tab title.'], 'Hide Unread Count at (0)': [false, 'Hide the unread posts count when it reaches 0.'], - 'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.'], + 'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'], 'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.'], 'Scroll to Last Read Post': [true, 'Scroll back to the last read post when reopening a thread.'], 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'], @@ -247,19 +247,19 @@ sauces: "https://www.google.com/searchbyimage?image_url=%TURL\nhttp://iqdb.org/?url=%TURL\n#//tineye.com/search?url=%TURL\n#http://saucenao.com/search.php?url=%TURL\n#http://3d.iqdb.org/?url=%TURL\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#http://imgur.com/upload?url=%URL;text:Upload to imgur\n#http://ompldr.org/upload?url1=%URL;text:Upload to ompldr\n# \"View Same\" in archives:\n#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz\n#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/\n#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/", 'Boards Navigation': 'sticky top', 'Custom CSS': false, - 'Boards Navigation': 'sticky top', + 'Boards Navigation': 'Sticky top', 'Header auto-hide': false, 'Header catalog links': false, boardnav: '[ toggle-all ] [current-title]', time: '%m/%d/%y(%a)%H:%M:%S', backlink: '>>%id', - fileInfo: '%l (%p%s, %r)', + fileInfo: '%L (%p%s, %r)', favicon: 'ferongr', usercss: "/* Tripcode Italics: */\n/*\nspan.postertrip {\nfont-style: italic;\n}\n*/\n\n/* Add a rounded border to thumbnails (but not expanded images): */\n/*\n.fileThumb > img:first-child {\nborder: solid 2px rgba(0,0,100,0.5);\nborder-radius: 10px;\n}\n*/\n\n/* Make highlighted posts look inset on the page: */\n/*\ndiv.post:target,\ndiv.post.highlight {\nbox-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);\n}\n*/", hotkeys: { 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], - 'Open empty QR': ['q', 'Open QR without post number inserted.'], - 'Open QR': ['Shift+q', 'Open QR with post number inserted.'], + 'Open empty QR': ['l', 'Open QR without post number inserted.'], + 'Open QR': ['Shift+l', 'Open QR with post number inserted.'], 'Open settings': ['Alt+o', 'Open Settings.'], 'Close': ['Esc', 'Close Settings, Notifications or QR.'], 'Spoiler tags': ['Ctrl+s', 'Insert spoiler tags.'], @@ -4738,7 +4738,7 @@ PostHiding = { init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link']) { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link']) { return; } this.db = new DataBoard('hiddenPosts'); @@ -4765,7 +4765,7 @@ Recursive.add(PostHiding.hide, this, data.makeStub, true); } } - if (!Conf['Reply Hiding']) { + if (!Conf['Reply Hiding Buttons']) { return; } return $.add($('.postInfo', this.nodes.post), PostHiding.makeButton(this, 'hide')); @@ -5016,7 +5016,7 @@ QuoteStrikeThrough = { init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { return; } return Post.prototype.callbacks.push({ @@ -5043,7 +5043,7 @@ ThreadHiding = { init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Hiding'] && !Conf['Thread Hiding Link']) { + if (g.VIEW !== 'index' || !Conf['Thread Hiding Buttons'] && !Conf['Thread Hiding Link']) { return; } this.db = new DataBoard('hiddenThreads'); @@ -5062,7 +5062,7 @@ })) { ThreadHiding.hide(this, data.makeStub); } - if (!Conf['Thread Hiding']) { + if (!Conf['Thread Hiding Buttons']) { return; } return $.prepend(this.OP.nodes.info, ThreadHiding.makeButton(this, 'hide')); @@ -6406,7 +6406,7 @@ el = $.el('label', { id: 'toggleCatalog', href: 'javascript:;', - innerHTML: "Catalog", + innerHTML: "Catalog Links", title: "Turn catalog links " + (Conf['Header catalog links'] ? 'off' : 'on') + "." }); input = $('input', el); @@ -6879,7 +6879,7 @@ $.on(this.headerToggler, 'change', this.toggleBarVisibility); createSubEntry = Header.createSubEntry; subEntries = []; - _ref = ['sticky top', 'sticky bottom', 'top', 'hide']; + _ref = ['Sticky top', 'Sticky bottom', 'Top', 'Hide']; for (_i = 0, _len = _ref.length; _i < _len; _i++) { setting = _ref[_i]; subEntries.push(createSubEntry(setting)); @@ -6920,7 +6920,7 @@ id: 'hoverUI' }), toggle: $.el('div', { - id: 'toggle-header-bar' + id: 'scroll-marker' }), createSubEntry: function(setting) { var label; @@ -7055,15 +7055,15 @@ $.rmClass(doc, 'bottom'); $.rmClass(doc, 'hide'); switch (setting) { - case 'sticky top': - $.addClass(doc, 'fixed'); - return $.addClass(doc, 'top'); - case 'sticky bottom': + case 'Sticky top': + $.addClass(doc, 'top'); + return $.addClass(doc, 'fixed'); + case 'Sticky bottom': $.addClass(doc, 'fixed'); return $.addClass(doc, 'bottom'); - case 'top': + case 'Top': return $.addClass(doc, 'top'); - case 'hide': + case 'Hide': return $.addClass(doc, 'hide'); } }, @@ -7121,7 +7121,7 @@ var headRect, top; top = post.getBoundingClientRect().top; - if (Conf['Boards Navigation'] === 'sticky top') { + if (Conf['Boards Navigation'] === 'Sticky top') { headRect = Header.bar.getBoundingClientRect(); top += -headRect.top - headRect.height; } @@ -7574,16 +7574,16 @@ boards: ['cgl', 'ck', 'fa', 'jp', 'lit', 's4s', 'q', 'tg'], type: 'fuuka' }, - 'RebeccaBlackTech': { - base: '//rbt.asia', - boards: ['an', 'cgl', 'g', 'mu', 'w'], - type: 'fuuka_mail' - }, 'InstallGentoo': { base: '//archive.installgentoo.net', boards: ['diy', 'g', 'sci'], type: 'fuuka' }, + 'RebeccaBlackTech': { + base: '//rbt.asia', + boards: ['an', 'cgl', 'g', 'mu', 'w'], + type: 'fuuka_mail' + }, 'Heinessen': { base: 'http://archive.heinessen.com', boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy', 'x'], @@ -8629,7 +8629,7 @@ Unread = { init: function() { - if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Tab Icon']) { + if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon']) { return; } this.db = new DataBoard('lastReadPosts', this.sync); @@ -8644,8 +8644,7 @@ }); }, node: function() { - var ID, post, posts, _ref, - _this = this; + var ID, post, posts, _ref; Unread.thread = this; Unread.title = d.title; @@ -8668,31 +8667,29 @@ if (Conf['Unread Line']) { $.on(d, 'visibilitychange', Unread.setLine); } - if (Conf['Scroll to Last Read Post']) { - return $.on(window, 'load', function(posts) { - return Unread.scroll.apply(_this, posts); - }); - } - }, - scroll: function(posts) { - var hash, root; - - if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { + if (!Conf['Scroll to Last Read Post']) { return; } - if (Unread.posts.length) { - while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { - if (!(Get.postFromRoot(root)).isHidden) { - break; - } - } - if (!root) { + return $.on(window, 'load', function() { + var hash, root; + + if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { return; } - return root.scrollIntoView(false); - } else if (posts.length) { - return Header.scrollToPost(posts[post.length - 1].nodes.root); - } + if (Unread.posts.length) { + while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { + if (!(Get.postFromRoot(root)).isHidden) { + break; + } + } + if (!root) { + return; + } + return root.scrollIntoView(false); + } else if (posts.length) { + return Header.scrollToPost(posts[posts.length - 1].nodes.root); + } + }); }, sync: function() { var lastReadPost; @@ -8843,7 +8840,7 @@ if (Conf['Unread Count']) { d.title = "" + (count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : '') + (g.DEAD ? "/" + g.BOARD + "/ - 404" : "" + Unread.title); } - if (!Conf['Unread Tab Icon']) { + if (!Conf['Unread Favicon']) { return; } Favicon.el.href = g.DEAD ? Unread.postsQuotingYou.length ? Favicon.unreadDeadY : count ? Favicon.unreadDead : Favicon.dead : count ? Unread.postsQuotingYou.length ? Favicon.unreadY : Favicon.unread : Favicon["default"]; @@ -10539,7 +10536,7 @@ $.event('AddMenuEntry', { type: 'header', el: this.controls, - order: 115 + order: 98 }); $.on(d, '4chanXInitFinished', this.setup); return Post.prototype.callbacks.push({ @@ -12532,11 +12529,14 @@ Settings.dialog = dialog = $.el('div', { id: 'appchanx-settings', "class": 'dialog', - innerHTML: "\n
\n
" + innerHTML: "\n
\n
" }); Settings.overlay = overlay = $.el('div', { id: 'overlay' }); + $.on($('.export', Settings.dialog), 'click', Settings["export"]); + $.on($('.import', Settings.dialog), 'click', Settings["import"]); + $.on($('input', Settings.dialog), 'change', Settings.onImport); links = []; _ref = Settings.sections; for (_i = 0, _len = _ref.length; _i < _len; _i++) { @@ -12601,10 +12601,6 @@ main: function(section) { var arr, button, description, div, fs, hiddenNum, input, inputs, items, key, obj, _ref; - section.innerHTML = "
\n \n \n \n
\n

"; - $.on($('.export', section), 'click', Settings["export"]); - $.on($('.import', section), 'click', Settings["import"]); - $.on($('input', section), 'change', Settings.onImport); items = {}; inputs = {}; _ref = Config.main; @@ -12732,7 +12728,7 @@ if (!(file = this.files[0])) { return; } - output = this.parentNode.nextElementSibling; + output = $('.imp-exp-result'); if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { output.textContent = 'Import aborted.'; return; @@ -12767,7 +12763,7 @@ 'Show Stubs': 'Stubs', 'Image Auto-Gif': 'Auto-GIF', 'Expand From Current': '', - 'Unread Favicon': 'Unread Tab Icon', + 'Unread Tab Icon': 'Unread Favicon', 'Post in Title': 'Thread Excerpt', 'Auto Hide QR': '', 'Open Reply in New Tab': '', @@ -12776,6 +12772,8 @@ 'Quote Preview': 'Quote Previewing', 'Indicate OP quote': 'Mark OP Quotes', 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', + 'Reply Hiding': 'Reply Hiding Buttons', + 'Thread Hiding': 'Thread Hiding Buttons', 'uniqueid': 'uniqueID', 'mod': 'capcode', 'country': 'flag', @@ -12889,7 +12887,7 @@ rice: function(section) { var archiver, event, input, inputs, items, name, toSelect, _i, _j, _len, _len1, _ref; - section.innerHTML = "
\n Archiver\n Select an Archiver for this board:\n \n
\n
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Board link (Replace with title when on that board): board-replace
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n
Supported format specifiers:
\n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Tab Icon is disabled.\n \n \n
\n\n
\n Custom CSS\n \n \n
"; + section.innerHTML = "
\n Archiver\n Select an Archiver for this board:\n \n
\n
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Board link (Replace with title when on that board): board-replace
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n
Supported format specifiers:
\n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Favicon is disabled.\n \n \n
\n\n
\n Custom CSS\n \n \n
"; items = {}; inputs = {}; _ref = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss']; @@ -12969,7 +12967,7 @@ }, favicon: function() { Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Tab Icon']) { + if (g.VIEW === 'thread' && Conf['Unread Favicon']) { Unread.update(); } return this.nextElementSibling.innerHTML = "\n\n\n"; @@ -13645,8 +13643,8 @@ 'Linkify': Linkify, 'Resurrect Quotes': Quotify, 'Filter': Filter, - 'Thread Hiding': ThreadHiding, - 'Reply Hiding': PostHiding, + 'Thread Hiding Buttons': ThreadHiding, + 'Reply Hiding Buttons': PostHiding, 'Recursive': Recursive, 'Strike-through Quotes': QuoteStrikeThrough, 'Quick Reply': QR, diff --git a/builds/appchan-x.user.js b/builds/appchan-x.user.js index 4c3dcdd3c..3620cb146 100644 --- a/builds/appchan-x.user.js +++ b/builds/appchan-x.user.js @@ -50,7 +50,7 @@ Config = { main: { 'Miscellaneous': { - 'Catalog Links': [true, 'Turn Navigation links into links to each board\'s catalog.'], + 'Catalog Links': [true, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], 'Custom Board Navigation': [false, 'Show custom links instead of the full board list.'], 'QR Shortcut': [false, 'Adds a small [QR] link in the header.'], @@ -76,8 +76,8 @@ 'Anonymize': [false, 'Make everyone Anonymous.'], 'Filter': [true, 'Self-moderation placebo.'], 'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'], - 'Thread Hiding': [true, 'Add buttons to hide entire threads.'], - 'Reply Hiding': [true, 'Add buttons to hide single replies.'], + 'Thread Hiding Buttons': [true, 'Add buttons to hide entire threads.'], + 'Reply Hiding Buttons': [true, 'Add buttons to hide single replies.'], 'Stubs': [true, 'Show stubs of hidden threads / replies.'] }, 'Images': { @@ -102,7 +102,7 @@ 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'], 'Unread Count': [true, 'Show the unread posts count in the tab title.'], 'Hide Unread Count at (0)': [false, 'Hide the unread posts count when it reaches 0.'], - 'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.'], + 'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'], 'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.'], 'Scroll to Last Read Post': [true, 'Scroll back to the last read post when reopening a thread.'], 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'], @@ -248,19 +248,19 @@ sauces: "https://www.google.com/searchbyimage?image_url=%TURL\nhttp://iqdb.org/?url=%TURL\n#//tineye.com/search?url=%TURL\n#http://saucenao.com/search.php?url=%TURL\n#http://3d.iqdb.org/?url=%TURL\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#http://imgur.com/upload?url=%URL;text:Upload to imgur\n#http://ompldr.org/upload?url1=%URL;text:Upload to ompldr\n# \"View Same\" in archives:\n#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz\n#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/\n#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/", 'Boards Navigation': 'sticky top', 'Custom CSS': false, - 'Boards Navigation': 'sticky top', + 'Boards Navigation': 'Sticky top', 'Header auto-hide': false, 'Header catalog links': false, boardnav: '[ toggle-all ] [current-title]', time: '%m/%d/%y(%a)%H:%M:%S', backlink: '>>%id', - fileInfo: '%l (%p%s, %r)', + fileInfo: '%L (%p%s, %r)', favicon: 'ferongr', usercss: "/* Tripcode Italics: */\n/*\nspan.postertrip {\nfont-style: italic;\n}\n*/\n\n/* Add a rounded border to thumbnails (but not expanded images): */\n/*\n.fileThumb > img:first-child {\nborder: solid 2px rgba(0,0,100,0.5);\nborder-radius: 10px;\n}\n*/\n\n/* Make highlighted posts look inset on the page: */\n/*\ndiv.post:target,\ndiv.post.highlight {\nbox-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);\n}\n*/", hotkeys: { 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], - 'Open empty QR': ['q', 'Open QR without post number inserted.'], - 'Open QR': ['Shift+q', 'Open QR with post number inserted.'], + 'Open empty QR': ['l', 'Open QR without post number inserted.'], + 'Open QR': ['Shift+l', 'Open QR with post number inserted.'], 'Open settings': ['Alt+o', 'Open Settings.'], 'Close': ['Esc', 'Close Settings, Notifications or QR.'], 'Spoiler tags': ['Ctrl+s', 'Insert spoiler tags.'], @@ -4729,7 +4729,7 @@ PostHiding = { init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link']) { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link']) { return; } this.db = new DataBoard('hiddenPosts'); @@ -4756,7 +4756,7 @@ Recursive.add(PostHiding.hide, this, data.makeStub, true); } } - if (!Conf['Reply Hiding']) { + if (!Conf['Reply Hiding Buttons']) { return; } return $.add($('.postInfo', this.nodes.post), PostHiding.makeButton(this, 'hide')); @@ -5007,7 +5007,7 @@ QuoteStrikeThrough = { init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { return; } return Post.prototype.callbacks.push({ @@ -5034,7 +5034,7 @@ ThreadHiding = { init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Hiding'] && !Conf['Thread Hiding Link']) { + if (g.VIEW !== 'index' || !Conf['Thread Hiding Buttons'] && !Conf['Thread Hiding Link']) { return; } this.db = new DataBoard('hiddenThreads'); @@ -5053,7 +5053,7 @@ })) { ThreadHiding.hide(this, data.makeStub); } - if (!Conf['Thread Hiding']) { + if (!Conf['Thread Hiding Buttons']) { return; } return $.prepend(this.OP.nodes.info, ThreadHiding.makeButton(this, 'hide')); @@ -6397,7 +6397,7 @@ el = $.el('label', { id: 'toggleCatalog', href: 'javascript:;', - innerHTML: "Catalog", + innerHTML: "Catalog Links", title: "Turn catalog links " + (Conf['Header catalog links'] ? 'off' : 'on') + "." }); input = $('input', el); @@ -6870,7 +6870,7 @@ $.on(this.headerToggler, 'change', this.toggleBarVisibility); createSubEntry = Header.createSubEntry; subEntries = []; - _ref = ['sticky top', 'sticky bottom', 'top', 'hide']; + _ref = ['Sticky top', 'Sticky bottom', 'Top', 'Hide']; for (_i = 0, _len = _ref.length; _i < _len; _i++) { setting = _ref[_i]; subEntries.push(createSubEntry(setting)); @@ -6911,7 +6911,7 @@ id: 'hoverUI' }), toggle: $.el('div', { - id: 'toggle-header-bar' + id: 'scroll-marker' }), createSubEntry: function(setting) { var label; @@ -7046,15 +7046,15 @@ $.rmClass(doc, 'bottom'); $.rmClass(doc, 'hide'); switch (setting) { - case 'sticky top': - $.addClass(doc, 'fixed'); - return $.addClass(doc, 'top'); - case 'sticky bottom': + case 'Sticky top': + $.addClass(doc, 'top'); + return $.addClass(doc, 'fixed'); + case 'Sticky bottom': $.addClass(doc, 'fixed'); return $.addClass(doc, 'bottom'); - case 'top': + case 'Top': return $.addClass(doc, 'top'); - case 'hide': + case 'Hide': return $.addClass(doc, 'hide'); } }, @@ -7112,7 +7112,7 @@ var headRect, top; top = post.getBoundingClientRect().top; - if (Conf['Boards Navigation'] === 'sticky top') { + if (Conf['Boards Navigation'] === 'Sticky top') { headRect = Header.bar.getBoundingClientRect(); top += -headRect.top - headRect.height; } @@ -7565,16 +7565,16 @@ boards: ['cgl', 'ck', 'fa', 'jp', 'lit', 's4s', 'q', 'tg'], type: 'fuuka' }, - 'RebeccaBlackTech': { - base: '//rbt.asia', - boards: ['an', 'cgl', 'g', 'mu', 'w'], - type: 'fuuka_mail' - }, 'InstallGentoo': { base: '//archive.installgentoo.net', boards: ['diy', 'g', 'sci'], type: 'fuuka' }, + 'RebeccaBlackTech': { + base: '//rbt.asia', + boards: ['an', 'cgl', 'g', 'mu', 'w'], + type: 'fuuka_mail' + }, 'Heinessen': { base: 'http://archive.heinessen.com', boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy', 'x'], @@ -8620,7 +8620,7 @@ Unread = { init: function() { - if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Tab Icon']) { + if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon']) { return; } this.db = new DataBoard('lastReadPosts', this.sync); @@ -8635,8 +8635,7 @@ }); }, node: function() { - var ID, post, posts, _ref, - _this = this; + var ID, post, posts, _ref; Unread.thread = this; Unread.title = d.title; @@ -8659,31 +8658,29 @@ if (Conf['Unread Line']) { $.on(d, 'visibilitychange', Unread.setLine); } - if (Conf['Scroll to Last Read Post']) { - return $.on(window, 'load', function(posts) { - return Unread.scroll.apply(_this, posts); - }); - } - }, - scroll: function(posts) { - var hash, root; - - if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { + if (!Conf['Scroll to Last Read Post']) { return; } - if (Unread.posts.length) { - while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { - if (!(Get.postFromRoot(root)).isHidden) { - break; - } - } - if (!root) { + return $.on(window, 'load', function() { + var hash, root; + + if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { return; } - return root.scrollIntoView(false); - } else if (posts.length) { - return Header.scrollToPost(posts[post.length - 1].nodes.root); - } + if (Unread.posts.length) { + while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { + if (!(Get.postFromRoot(root)).isHidden) { + break; + } + } + if (!root) { + return; + } + return root.scrollIntoView(false); + } else if (posts.length) { + return Header.scrollToPost(posts[posts.length - 1].nodes.root); + } + }); }, sync: function() { var lastReadPost; @@ -8834,7 +8831,7 @@ if (Conf['Unread Count']) { d.title = "" + (count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : '') + (g.DEAD ? "/" + g.BOARD + "/ - 404" : "" + Unread.title); } - if (!Conf['Unread Tab Icon']) { + if (!Conf['Unread Favicon']) { return; } Favicon.el.href = g.DEAD ? Unread.postsQuotingYou.length ? Favicon.unreadDeadY : count ? Favicon.unreadDead : Favicon.dead : count ? Unread.postsQuotingYou.length ? Favicon.unreadY : Favicon.unread : Favicon["default"]; @@ -10555,7 +10552,7 @@ $.event('AddMenuEntry', { type: 'header', el: this.controls, - order: 115 + order: 98 }); $.on(d, '4chanXInitFinished', this.setup); return Post.prototype.callbacks.push({ @@ -12548,11 +12545,14 @@ Settings.dialog = dialog = $.el('div', { id: 'appchanx-settings', "class": 'dialog', - innerHTML: "\n
\n
" + innerHTML: "\n
\n
" }); Settings.overlay = overlay = $.el('div', { id: 'overlay' }); + $.on($('.export', Settings.dialog), 'click', Settings["export"]); + $.on($('.import', Settings.dialog), 'click', Settings["import"]); + $.on($('input', Settings.dialog), 'change', Settings.onImport); links = []; _ref = Settings.sections; for (_i = 0, _len = _ref.length; _i < _len; _i++) { @@ -12617,10 +12617,6 @@ main: function(section) { var arr, button, description, div, fs, hiddenNum, input, inputs, items, key, obj, _ref; - section.innerHTML = "
\n \n \n \n
\n

"; - $.on($('.export', section), 'click', Settings["export"]); - $.on($('.import', section), 'click', Settings["import"]); - $.on($('input', section), 'change', Settings.onImport); items = {}; inputs = {}; _ref = Config.main; @@ -12750,7 +12746,7 @@ if (!(file = this.files[0])) { return; } - output = this.parentNode.nextElementSibling; + output = $('.imp-exp-result'); if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { output.textContent = 'Import aborted.'; return; @@ -12785,7 +12781,7 @@ 'Show Stubs': 'Stubs', 'Image Auto-Gif': 'Auto-GIF', 'Expand From Current': '', - 'Unread Favicon': 'Unread Tab Icon', + 'Unread Tab Icon': 'Unread Favicon', 'Post in Title': 'Thread Excerpt', 'Auto Hide QR': '', 'Open Reply in New Tab': '', @@ -12794,6 +12790,8 @@ 'Quote Preview': 'Quote Previewing', 'Indicate OP quote': 'Mark OP Quotes', 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', + 'Reply Hiding': 'Reply Hiding Buttons', + 'Thread Hiding': 'Thread Hiding Buttons', 'uniqueid': 'uniqueID', 'mod': 'capcode', 'country': 'flag', @@ -12907,7 +12905,7 @@ rice: function(section) { var archiver, event, input, inputs, items, name, toSelect, _i, _j, _len, _len1, _ref; - section.innerHTML = "
\n Archiver\n Select an Archiver for this board:\n \n
\n
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Board link (Replace with title when on that board): board-replace
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n
Supported format specifiers:
\n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Tab Icon is disabled.\n \n \n
\n\n
\n Custom CSS\n \n \n
"; + section.innerHTML = "
\n Archiver\n Select an Archiver for this board:\n \n
\n
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Board link (Replace with title when on that board): board-replace
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n
Supported format specifiers:
\n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Favicon is disabled.\n \n \n
\n\n
\n Custom CSS\n \n \n
"; items = {}; inputs = {}; _ref = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss']; @@ -12987,7 +12985,7 @@ }, favicon: function() { Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Tab Icon']) { + if (g.VIEW === 'thread' && Conf['Unread Favicon']) { Unread.update(); } return this.nextElementSibling.innerHTML = "\n\n\n"; @@ -13663,8 +13661,8 @@ 'Linkify': Linkify, 'Resurrect Quotes': Quotify, 'Filter': Filter, - 'Thread Hiding': ThreadHiding, - 'Reply Hiding': PostHiding, + 'Thread Hiding Buttons': ThreadHiding, + 'Reply Hiding Buttons': PostHiding, 'Recursive': Recursive, 'Strike-through Quotes': QuoteStrikeThrough, 'Quick Reply': QR, diff --git a/builds/crx/script.js b/builds/crx/script.js index 7cba28823..efdd2a1d4 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -7,7 +7,7 @@ Config = { main: { 'Miscellaneous': { - 'Catalog Links': [true, 'Turn Navigation links into links to each board\'s catalog.'], + 'Catalog Links': [true, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], 'Custom Board Navigation': [false, 'Show custom links instead of the full board list.'], 'QR Shortcut': [false, 'Adds a small [QR] link in the header.'], @@ -33,8 +33,8 @@ 'Anonymize': [false, 'Make everyone Anonymous.'], 'Filter': [true, 'Self-moderation placebo.'], 'Recursive Hiding': [true, 'Hide replies of hidden posts, recursively.'], - 'Thread Hiding': [true, 'Add buttons to hide entire threads.'], - 'Reply Hiding': [true, 'Add buttons to hide single replies.'], + 'Thread Hiding Buttons': [true, 'Add buttons to hide entire threads.'], + 'Reply Hiding Buttons': [true, 'Add buttons to hide single replies.'], 'Stubs': [true, 'Show stubs of hidden threads / replies.'] }, 'Images': { @@ -60,7 +60,7 @@ 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'], 'Unread Count': [true, 'Show the unread posts count in the tab title.'], 'Hide Unread Count at (0)': [false, 'Hide the unread posts count when it reaches 0.'], - 'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.'], + 'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'], 'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.'], 'Scroll to Last Read Post': [true, 'Scroll back to the last read post when reopening a thread.'], 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'], @@ -205,19 +205,19 @@ sauces: "https://www.google.com/searchbyimage?image_url=%TURL\nhttp://iqdb.org/?url=%TURL\n#//tineye.com/search?url=%TURL\n#http://saucenao.com/search.php?url=%TURL\n#http://3d.iqdb.org/?url=%TURL\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#http://imgur.com/upload?url=%URL;text:Upload to imgur\n#http://ompldr.org/upload?url1=%URL;text:Upload to ompldr\n# \"View Same\" in archives:\n#//archive.foolz.us/_/search/image/%MD5/;text:View same on foolz\n#//archive.foolz.us/%board/search/image/%MD5/;text:View same on foolz /%board/\n#//archive.installgentoo.net/%board/image/%MD5;text:View same on installgentoo /%board/", 'Boards Navigation': 'sticky top', 'Custom CSS': false, - 'Boards Navigation': 'sticky top', + 'Boards Navigation': 'Sticky top', 'Header auto-hide': false, 'Header catalog links': false, boardnav: '[ toggle-all ] [current-title]', time: '%m/%d/%y(%a)%H:%M:%S', backlink: '>>%id', - fileInfo: '%l (%p%s, %r)', + fileInfo: '%L (%p%s, %r)', favicon: 'ferongr', usercss: "/* Tripcode Italics: */\n/*\nspan.postertrip {\nfont-style: italic;\n}\n*/\n\n/* Add a rounded border to thumbnails (but not expanded images): */\n/*\n.fileThumb > img:first-child {\nborder: solid 2px rgba(0,0,100,0.5);\nborder-radius: 10px;\n}\n*/\n\n/* Make highlighted posts look inset on the page: */\n/*\ndiv.post:target,\ndiv.post.highlight {\nbox-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);\n}\n*/", hotkeys: { 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], - 'Open empty QR': ['q', 'Open QR without post number inserted.'], - 'Open QR': ['Shift+q', 'Open QR with post number inserted.'], + 'Open empty QR': ['l', 'Open QR without post number inserted.'], + 'Open QR': ['Shift+l', 'Open QR with post number inserted.'], 'Open settings': ['Alt+o', 'Open Settings.'], 'Close': ['Esc', 'Close Settings, Notifications or QR.'], 'Spoiler tags': ['Ctrl+s', 'Insert spoiler tags.'], @@ -4653,7 +4653,7 @@ PostHiding = { init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link']) { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link']) { return; } this.db = new DataBoard('hiddenPosts'); @@ -4680,7 +4680,7 @@ Recursive.add(PostHiding.hide, this, data.makeStub, true); } } - if (!Conf['Reply Hiding']) { + if (!Conf['Reply Hiding Buttons']) { return; } return $.add($('.postInfo', this.nodes.post), PostHiding.makeButton(this, 'hide')); @@ -4931,7 +4931,7 @@ QuoteStrikeThrough = { init: function() { - if (g.VIEW === 'catalog' || !Conf['Reply Hiding'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { + if (g.VIEW === 'catalog' || !Conf['Reply Hiding Buttons'] && !Conf['Reply Hiding Link'] && !Conf['Filter']) { return; } return Post.prototype.callbacks.push({ @@ -4958,7 +4958,7 @@ ThreadHiding = { init: function() { - if (g.VIEW !== 'index' || !Conf['Thread Hiding'] && !Conf['Thread Hiding Link']) { + if (g.VIEW !== 'index' || !Conf['Thread Hiding Buttons'] && !Conf['Thread Hiding Link']) { return; } this.db = new DataBoard('hiddenThreads'); @@ -4977,7 +4977,7 @@ })) { ThreadHiding.hide(this, data.makeStub); } - if (!Conf['Thread Hiding']) { + if (!Conf['Thread Hiding Buttons']) { return; } return $.prepend(this.OP.nodes.info, ThreadHiding.makeButton(this, 'hide')); @@ -6321,7 +6321,7 @@ el = $.el('label', { id: 'toggleCatalog', href: 'javascript:;', - innerHTML: "Catalog", + innerHTML: "Catalog Links", title: "Turn catalog links " + (Conf['Header catalog links'] ? 'off' : 'on') + "." }); input = $('input', el); @@ -6794,7 +6794,7 @@ $.on(this.headerToggler, 'change', this.toggleBarVisibility); createSubEntry = Header.createSubEntry; subEntries = []; - _ref = ['sticky top', 'sticky bottom', 'top', 'hide']; + _ref = ['Sticky top', 'Sticky bottom', 'Top', 'Hide']; for (_i = 0, _len = _ref.length; _i < _len; _i++) { setting = _ref[_i]; subEntries.push(createSubEntry(setting)); @@ -6835,7 +6835,7 @@ id: 'hoverUI' }), toggle: $.el('div', { - id: 'toggle-header-bar' + id: 'scroll-marker' }), createSubEntry: function(setting) { var label; @@ -6970,15 +6970,15 @@ $.rmClass(doc, 'bottom'); $.rmClass(doc, 'hide'); switch (setting) { - case 'sticky top': - $.addClass(doc, 'fixed'); - return $.addClass(doc, 'top'); - case 'sticky bottom': + case 'Sticky top': + $.addClass(doc, 'top'); + return $.addClass(doc, 'fixed'); + case 'Sticky bottom': $.addClass(doc, 'fixed'); return $.addClass(doc, 'bottom'); - case 'top': + case 'Top': return $.addClass(doc, 'top'); - case 'hide': + case 'Hide': return $.addClass(doc, 'hide'); } }, @@ -7036,7 +7036,7 @@ var headRect, top; top = post.getBoundingClientRect().top; - if (Conf['Boards Navigation'] === 'sticky top') { + if (Conf['Boards Navigation'] === 'Sticky top') { headRect = Header.bar.getBoundingClientRect(); top += -headRect.top - headRect.height; } @@ -7489,16 +7489,16 @@ boards: ['cgl', 'ck', 'fa', 'jp', 'lit', 's4s', 'q', 'tg'], type: 'fuuka' }, - 'RebeccaBlackTech': { - base: '//rbt.asia', - boards: ['an', 'cgl', 'g', 'mu', 'w'], - type: 'fuuka_mail' - }, 'InstallGentoo': { base: '//archive.installgentoo.net', boards: ['diy', 'g', 'sci'], type: 'fuuka' }, + 'RebeccaBlackTech': { + base: '//rbt.asia', + boards: ['an', 'cgl', 'g', 'mu', 'w'], + type: 'fuuka_mail' + }, 'Heinessen': { base: 'http://archive.heinessen.com', boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy', 'x'], @@ -8544,7 +8544,7 @@ Unread = { init: function() { - if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Tab Icon']) { + if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon']) { return; } this.db = new DataBoard('lastReadPosts', this.sync); @@ -8559,8 +8559,7 @@ }); }, node: function() { - var ID, post, posts, _ref, - _this = this; + var ID, post, posts, _ref; Unread.thread = this; Unread.title = d.title; @@ -8583,31 +8582,29 @@ if (Conf['Unread Line']) { $.on(d, 'visibilitychange', Unread.setLine); } - if (Conf['Scroll to Last Read Post']) { - return $.on(window, 'load', function(posts) { - return Unread.scroll.apply(_this, posts); - }); - } - }, - scroll: function(posts) { - var hash, root; - - if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { + if (!Conf['Scroll to Last Read Post']) { return; } - if (Unread.posts.length) { - while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { - if (!(Get.postFromRoot(root)).isHidden) { - break; - } - } - if (!root) { + return $.on(window, 'load', function() { + var hash, root; + + if ((hash = location.hash.match(/\d+/)) && hash[0] in this.posts) { return; } - return root.scrollIntoView(false); - } else if (posts.length) { - return Header.scrollToPost(posts[post.length - 1].nodes.root); - } + if (Unread.posts.length) { + while (root = $.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root)) { + if (!(Get.postFromRoot(root)).isHidden) { + break; + } + } + if (!root) { + return; + } + return root.scrollIntoView(false); + } else if (posts.length) { + return Header.scrollToPost(posts[posts.length - 1].nodes.root); + } + }); }, sync: function() { var lastReadPost; @@ -8764,7 +8761,7 @@ }, $.SECOND); } } - if (!Conf['Unread Tab Icon']) { + if (!Conf['Unread Favicon']) { return; } return Favicon.el.href = g.DEAD ? Unread.postsQuotingYou.length ? Favicon.unreadDeadY : count ? Favicon.unreadDead : Favicon.dead : count ? Unread.postsQuotingYou.length ? Favicon.unreadY : Favicon.unread : Favicon["default"]; @@ -10460,7 +10457,7 @@ $.event('AddMenuEntry', { type: 'header', el: this.controls, - order: 115 + order: 98 }); $.on(d, '4chanXInitFinished', this.setup); return Post.prototype.callbacks.push({ @@ -12453,11 +12450,14 @@ Settings.dialog = dialog = $.el('div', { id: 'appchanx-settings', "class": 'dialog', - innerHTML: "\n
\n
" + innerHTML: "\n
\n
" }); Settings.overlay = overlay = $.el('div', { id: 'overlay' }); + $.on($('.export', Settings.dialog), 'click', Settings["export"]); + $.on($('.import', Settings.dialog), 'click', Settings["import"]); + $.on($('input', Settings.dialog), 'change', Settings.onImport); links = []; _ref = Settings.sections; for (_i = 0, _len = _ref.length; _i < _len; _i++) { @@ -12522,10 +12522,6 @@ main: function(section) { var arr, button, description, div, fs, hiddenNum, input, inputs, items, key, obj, _ref; - section.innerHTML = "
\n \n \n \n
\n

"; - $.on($('.export', section), 'click', Settings["export"]); - $.on($('.import', section), 'click', Settings["import"]); - $.on($('input', section), 'change', Settings.onImport); items = {}; inputs = {}; _ref = Config.main; @@ -12655,7 +12651,7 @@ if (!(file = this.files[0])) { return; } - output = this.parentNode.nextElementSibling; + output = $('.imp-exp-result'); if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { output.textContent = 'Import aborted.'; return; @@ -12690,7 +12686,7 @@ 'Show Stubs': 'Stubs', 'Image Auto-Gif': 'Auto-GIF', 'Expand From Current': '', - 'Unread Favicon': 'Unread Tab Icon', + 'Unread Tab Icon': 'Unread Favicon', 'Post in Title': 'Thread Excerpt', 'Auto Hide QR': '', 'Open Reply in New Tab': '', @@ -12699,6 +12695,8 @@ 'Quote Preview': 'Quote Previewing', 'Indicate OP quote': 'Mark OP Quotes', 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', + 'Reply Hiding': 'Reply Hiding Buttons', + 'Thread Hiding': 'Thread Hiding Buttons', 'uniqueid': 'uniqueID', 'mod': 'capcode', 'country': 'flag', @@ -12812,7 +12810,7 @@ rice: function(section) { var archiver, event, input, inputs, items, name, toSelect, _i, _j, _len, _len1, _ref; - section.innerHTML = "
\n Archiver\n Select an Archiver for this board:\n \n
\n
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Board link (Replace with title when on that board): board-replace
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n
Supported format specifiers:
\n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Tab Icon is disabled.\n \n \n
\n\n
\n Custom CSS\n \n \n
"; + section.innerHTML = "
\n Archiver\n Select an Archiver for this board:\n \n
\n
\n Custom Board Navigation is disabled.\n
\n
In the following, board can translate to a board ID (a, b, etc...), the current board (current), or the Status/Twitter link (status, @).
\n
\n For example:
\n [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"]
\n will give you
\n [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
\n if you are on /g/.\n
\n
Board link: board
\n
Title link: board-title
\n
Board link (Replace with title when on that board): board-replace
\n
Full text link: board-full
\n
Custom text link: board-text:\"VIP Board\"
\n
Index-only link: board-index
\n
Catalog-only link: board-catalog
\n
Combinations are possible: board-index-text:\"VIP Index\"
\n
Full board list toggle: toggle-all
\n
\n\n
\n Time Formatting is disabled.\n
:
\n
Supported format specifiers:
\n
Day: %a, %A, %d, %e
\n
Month: %m, %b, %B
\n
Year: %y
\n
Hour: %k, %H, %l, %I, %p, %P
\n
Minute: %M
\n
Second: %S
\n
\n\n
\n Quote Backlinks formatting is disabled.\n
:
\n
\n\n
\n File Info Formatting is disabled.\n
:
\n
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
\n
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
\n
Spoiler indicator: %p
\n
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
\n
Resolution: %r (Displays 'PDF' for PDF files)
\n
\n\n
\n Unread Favicon is disabled.\n \n \n
\n\n
\n Custom CSS\n \n \n
"; items = {}; inputs = {}; _ref = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss']; @@ -12892,7 +12890,7 @@ }, favicon: function() { Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Tab Icon']) { + if (g.VIEW === 'thread' && Conf['Unread Favicon']) { Unread.update(); } return this.nextElementSibling.innerHTML = "\n\n\n"; @@ -13568,8 +13566,8 @@ 'Linkify': Linkify, 'Resurrect Quotes': Quotify, 'Filter': Filter, - 'Thread Hiding': ThreadHiding, - 'Reply Hiding': PostHiding, + 'Thread Hiding Buttons': ThreadHiding, + 'Reply Hiding Buttons': PostHiding, 'Recursive': Recursive, 'Strike-through Quotes': QuoteStrikeThrough, 'Quick Reply': QR, diff --git a/src/config.coffee b/src/config.coffee index ac3784c16..c40cbe5f4 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -3,7 +3,7 @@ Config = 'Miscellaneous': 'Catalog Links': [ true - 'Turn Navigation links into links to each board\'s catalog.' + 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.' ] 'External Catalog': [ false @@ -93,11 +93,11 @@ Config = true 'Hide replies of hidden posts, recursively.' ] - 'Thread Hiding': [ + 'Thread Hiding Buttons': [ true 'Add buttons to hide entire threads.' ] - 'Reply Hiding': [ + 'Reply Hiding Buttons': [ true 'Add buttons to hide single replies.' ] @@ -185,7 +185,7 @@ Config = false 'Hide the unread posts count when it reaches 0.' ] - 'Unread Tab Icon': [ + 'Unread Favicon': [ true 'Show a different favicon when there are unread posts.' ] @@ -739,7 +739,7 @@ http://iqdb.org/?url=%TURL 'Custom CSS': false - 'Boards Navigation': 'sticky top' + 'Boards Navigation': 'Sticky top' 'Header auto-hide': false @@ -751,7 +751,7 @@ http://iqdb.org/?url=%TURL backlink: '>>%id' - fileInfo: '%l (%p%s, %r)' + fileInfo: '%L (%p%s, %r)' favicon: 'ferongr' @@ -787,11 +787,11 @@ box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2); 'Toggle the full board list.' ] 'Open empty QR': [ - 'q' + 'l' 'Open QR without post number inserted.' ] 'Open QR': [ - 'Shift+q' + 'Shift+l' 'Open QR with post number inserted.' ] 'Open settings': [ diff --git a/src/features/filtering/replyhiding.coffee b/src/features/filtering/replyhiding.coffee index 1e170912d..31fb9d583 100644 --- a/src/features/filtering/replyhiding.coffee +++ b/src/features/filtering/replyhiding.coffee @@ -1,6 +1,6 @@ PostHiding = init: -> - return if g.VIEW is 'catalog' or !Conf['Reply Hiding'] and !Conf['Reply Hiding Link'] + return if g.VIEW is 'catalog' or !Conf['Reply Hiding Buttons'] and !Conf['Reply Hiding Link'] @db = new DataBoard 'hiddenPosts' Post::callbacks.push @@ -15,7 +15,7 @@ PostHiding = else Recursive.apply PostHiding.hide, @, data.makeStub, true Recursive.add PostHiding.hide, @, data.makeStub, true - return unless Conf['Reply Hiding'] + return unless Conf['Reply Hiding Buttons'] $.add $('.postInfo', @nodes.post), PostHiding.makeButton @, 'hide' menu: diff --git a/src/features/filtering/strikethrough.coffee b/src/features/filtering/strikethrough.coffee index 8813ae38c..53d4e0fc1 100644 --- a/src/features/filtering/strikethrough.coffee +++ b/src/features/filtering/strikethrough.coffee @@ -1,6 +1,6 @@ QuoteStrikeThrough = init: -> - return if g.VIEW is 'catalog' or !Conf['Reply Hiding'] and !Conf['Reply Hiding Link'] and !Conf['Filter'] + return if g.VIEW is 'catalog' or !Conf['Reply Hiding Buttons'] and !Conf['Reply Hiding Link'] and !Conf['Filter'] Post::callbacks.push name: 'Strike-through Quotes' diff --git a/src/features/filtering/threadhiding.coffee b/src/features/filtering/threadhiding.coffee index 4269a13c8..1766d56a5 100644 --- a/src/features/filtering/threadhiding.coffee +++ b/src/features/filtering/threadhiding.coffee @@ -1,6 +1,6 @@ ThreadHiding = init: -> - return if g.VIEW isnt 'index' or !Conf['Thread Hiding'] and !Conf['Thread Hiding Link'] + return if g.VIEW isnt 'index' or !Conf['Thread Hiding Buttons'] and !Conf['Thread Hiding Link'] @db = new DataBoard 'hiddenThreads' @syncCatalog() @@ -11,7 +11,7 @@ ThreadHiding = node: -> if data = ThreadHiding.db.get {boardID: @board.ID, threadID: @ID} ThreadHiding.hide @, data.makeStub - return unless Conf['Thread Hiding'] + return unless Conf['Thread Hiding Buttons'] $.prepend @OP.nodes.info, ThreadHiding.makeButton @, 'hide' syncCatalog: -> diff --git a/src/features/misc/cataloglinks.coffee b/src/features/misc/cataloglinks.coffee index 241a2ec91..aaa1fd524 100644 --- a/src/features/misc/cataloglinks.coffee +++ b/src/features/misc/cataloglinks.coffee @@ -5,7 +5,7 @@ CatalogLinks = el = $.el 'label', id: 'toggleCatalog' href: 'javascript:;' - innerHTML: "Catalog" + innerHTML: "Catalog Links" title: "Turn catalog links #{if Conf['Header catalog links'] then 'off' else 'on'}." input = $ 'input', el diff --git a/src/features/misc/header.coffee b/src/features/misc/header.coffee index df3a4e9e5..37705ba56 100644 --- a/src/features/misc/header.coffee +++ b/src/features/misc/header.coffee @@ -17,7 +17,7 @@ Header = {createSubEntry} = Header subEntries = [] - for setting in ['sticky top', 'sticky bottom', 'top', 'hide'] + for setting in ['Sticky top', 'Sticky bottom', 'Top', 'Hide'] subEntries.push createSubEntry setting subEntries.push {el: headerToggler} @@ -50,7 +50,7 @@ Header = id: 'hoverUI' toggle: $.el 'div', - id: 'toggle-header-bar' + id: 'scroll-marker' createSubEntry: (setting) -> label = $.el 'label', @@ -167,15 +167,15 @@ Header = $.rmClass doc, 'bottom' $.rmClass doc, 'hide' switch setting - when 'sticky top' - $.addClass doc, 'fixed' + when 'Sticky top' $.addClass doc, 'top' - when 'sticky bottom' + $.addClass doc, 'fixed' + when 'Sticky bottom' $.addClass doc, 'fixed' $.addClass doc, 'bottom' - when 'top' + when 'Top' $.addClass doc, 'top' - when 'hide' + when 'Hide' $.addClass doc, 'hide' setBarVisibility: (hide) -> @@ -217,7 +217,7 @@ Header = scrollToPost: (post) -> {top} = post.getBoundingClientRect() - if Conf['Boards Navigation'] is 'sticky top' + if Conf['Boards Navigation'] is 'Sticky top' headRect = Header.bar.getBoundingClientRect() top += - headRect.top - headRect.height <% if (type === 'crx') { %>d.body<% } else { %>doc<% } %>.scrollTop += top diff --git a/src/features/misc/redirection.coffee b/src/features/misc/redirection.coffee index 4b1ba3edd..c3ecd3b6c 100644 --- a/src/features/misc/redirection.coffee +++ b/src/features/misc/redirection.coffee @@ -79,14 +79,14 @@ Redirect = base: '//fuuka.warosu.org' boards: ['cgl', 'ck', 'fa', 'jp', 'lit', 's4s', 'q', 'tg'] type: 'fuuka' - 'RebeccaBlackTech': - base: '//rbt.asia' - boards: ['an', 'cgl', 'g', 'mu', 'w'] - type: 'fuuka_mail' 'InstallGentoo': base: '//archive.installgentoo.net' boards: ['diy', 'g', 'sci'] type: 'fuuka' + 'RebeccaBlackTech': + base: '//rbt.asia' + boards: ['an', 'cgl', 'g', 'mu', 'w'] + type: 'fuuka_mail' 'Heinessen': base: 'http://archive.heinessen.com' boards: ['an', 'fit', 'k', 'mlp', 'r9k', 'toy', 'x'] diff --git a/src/features/monitoring/unread.coffee b/src/features/monitoring/unread.coffee index e51ebd721..8ff735c2a 100644 --- a/src/features/monitoring/unread.coffee +++ b/src/features/monitoring/unread.coffee @@ -1,6 +1,6 @@ Unread = init: -> - return if g.VIEW isnt 'thread' or !Conf['Unread Count'] and !Conf['Unread Tab Icon'] + return if g.VIEW isnt 'thread' or !Conf['Unread Count'] and !Conf['Unread Favicon'] @db = new DataBoard 'lastReadPosts', @sync @hr = $.el 'hr', @@ -26,22 +26,21 @@ Unread = $.on d, 'ThreadUpdate', Unread.onUpdate $.on d, 'scroll visibilitychange', Unread.read $.on d, 'visibilitychange', Unread.setLine if Conf['Unread Line'] - if Conf['Scroll to Last Read Post'] - $.on window, 'load', (posts) => - Unread.scroll.apply @, posts - scroll: (posts) -> - # Let the header's onload callback handle it. - return if (hash = location.hash.match /\d+/) and hash[0] of @posts - if Unread.posts.length - # Scroll to before the first unread post. - while root = $.x 'preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root - break unless (Get.postFromRoot root).isHidden - return unless root - root.scrollIntoView false - else if posts.length - # Scroll to the last read post. - Header.scrollToPost (posts[post.length - 1]).nodes.root + return unless Conf['Scroll to Last Read Post'] + + $.on window, 'load', -> + # Let the header's onload callback handle it. + return if (hash = location.hash.match /\d+/) and hash[0] of @posts + if Unread.posts.length + # Scroll to before the first unread post. + while root = $.x 'preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root + break unless (Get.postFromRoot root).isHidden + return unless root + root.scrollIntoView false + else if posts.length + # Scroll to the last read post. + Header.scrollToPost (posts[posts.length - 1]).nodes.root sync: -> lastReadPost = Unread.db.get @@ -153,7 +152,7 @@ Unread = , $.SECOND <% } %> - return unless Conf['Unread Tab Icon'] + return unless Conf['Unread Favicon'] Favicon.el.href = if g.DEAD diff --git a/src/features/quoting/quotethreading.coffee b/src/features/quoting/quotethreading.coffee index e2e859ae3..a03406bb9 100644 --- a/src/features/quoting/quotethreading.coffee +++ b/src/features/quoting/quotethreading.coffee @@ -16,7 +16,7 @@ QuoteThreading = $.event 'AddMenuEntry', type: 'header' el: @controls - order: 115 + order: 98 $.on d, '4chanXInitFinished', @setup diff --git a/src/main.coffee b/src/main.coffee index 91893cae1..ab21d015d 100644 --- a/src/main.coffee +++ b/src/main.coffee @@ -103,8 +103,8 @@ Main = 'Linkify': Linkify 'Resurrect Quotes': Quotify 'Filter': Filter - 'Thread Hiding': ThreadHiding - 'Reply Hiding': PostHiding + 'Thread Hiding Buttons': ThreadHiding + 'Reply Hiding Buttons': PostHiding 'Recursive': Recursive 'Strike-through Quotes': QuoteStrikeThrough 'Quick Reply': QR diff --git a/src/settings.coffee b/src/settings.coffee index ca8012b2e..7a508e68a 100644 --- a/src/settings.coffee +++ b/src/settings.coffee @@ -71,7 +71,11 @@ Settings = innerHTML: """