From dfc703fdfced1bb5d49d7981b6b534074932cb01 Mon Sep 17 00:00:00 2001 From: noface Date: Sat, 20 Oct 2012 00:59:54 +0200 Subject: [PATCH] Add Archivers submenu. --- 4chan_x.user.js | 123 ++++++++++++++++++++++++++++++++++++------------ changelog | 2 + script.coffee | 111 ++++++++++++++++++++++++++++++++----------- 3 files changed, 177 insertions(+), 59 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index 21452abc4..c7b688270 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -4499,25 +4499,65 @@ }; ArchiveLink = { - init: function() { - var a; - a = $.el('a', { - className: 'archive_link', - target: '_blank', - textContent: 'Archived post' + init: function(post) { + var div, entry, type, _i, _len, _ref; + div = $.el('div', { + textContent: 'Archive' }); - return Menu.addEntry({ - el: a, + entry = { + el: div, open: function(post) { - var href, path; + var path; path = $('a[title="Highlight this post"]', post.el).pathname.split('/'); - if ((href = Redirect.thread(path[1], path[3], post.ID)) === ("//boards.4chan.org/" + path[1] + "/")) { + if ((Redirect.thread(path[1], path[3], post.ID)) === ("//boards.4chan.org/" + path[1] + "/")) { return false; } - a.href = href; return true; - } + }, + children: [] + }; + _ref = [['Post', 'apost'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['E-mail', 'email'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'md5']]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + type = _ref[_i]; + entry.children.push(this.createSubEntry(type[0], type[1])); + } + return Menu.addEntry(entry); + }, + createSubEntry: function(text, type) { + var el, open; + el = $.el('a', { + textContent: text, + target: '_blank' }); + open = function(post) { + var path, value; + path = $('a[title="Highlight this post"]', post.el).pathname.split('/'); + if (type !== 'apost') { + value = Filter[type](post); + } + if (value === false) { + return false; + } + switch (type) { + case 'name': + if (value === 'Anonymous' || value.length === 0) { + return false; + } + break; + case 'email': + if (value === 'sage' || value.length === 0) { + return false; + } + break; + case 'apost': + return el.href = Redirect.thread(path[1], path[3], post.ID); + } + return el.href = Redirect.thread(path[1], value, type, true); + }; + return { + el: el, + open: open + }; } }; @@ -4737,12 +4777,33 @@ return "//nsfw.foolz.us/_/api/chan/post/?board=" + board + "&num=" + postID; } }, - thread: function(board, threadID, postID) { - var path, url; - if (postID) { - postID = postID.match(/\d+/)[0]; - } - path = threadID ? "" + board + "/thread/" + threadID : "" + board + "/post/" + postID; + thread: function(board, threadID, postID, AL) { + var ar, path, url; + ar = function(a) { + var path; + if (AL) { + if (postID === 'name') { + postID = 'username'; + } + if (postID === 'md5') { + postID = 'image'; + } + if (a === 'fuuka') { + return "" + board + "/search/" + postID + "/" + (encodeURIComponent(threadID)); + } else if (a === 'gentoo') { + if (postID === 'image') { + return "" + board + "/image/" + (encodeURIComponent(threadID)); + } else { + return "" + board + "/?task=search2&search_" + postID + "=" + (encodeURIComponent(threadID)); + } + } + } else { + if (postID) { + postID = postID.match(/\d+/)[0]; + } + return path = threadID ? "" + board + "/thread/" + threadID : "" + board + "/post/" + postID; + } + }; switch (board) { case 'a': case 'co': @@ -4757,30 +4818,34 @@ case 'wsg': case 'dev': case 'foolz': + path = ar('fuuka'); url = "//archive.foolz.us/" + path + "/"; - if (threadID && postID) { + if (threadID && postID && !AL) { url += "#" + postID; } break; case 'u': case 'kuku': + path = ar('fuuka'); url = "//nsfw.foolz.us/" + path + "/"; - if (threadID && postID) { + if (threadID && postID && !AL) { url += "#" + postID; } break; case 'ck': case 'lit': + path = ar('fuuka'); url = "//fuuka.warosu.org/" + path; - if (threadID && postID) { - url += "#p" + postID; + if (threadID && postID && !AL) { + url += "#" + postID; } break; case 'diy': case 'g': case 'sci': + path = ar('gentoo'); url = "//archive.installgentoo.net/" + path; - if (threadID && postID) { + if (threadID && postID && !AL) { url += "#p" + postID; } break; @@ -4788,8 +4853,9 @@ case 'mu': case 'soc': case 'w': + path = ar('gentoo'); url = "//archive.rebeccablacktech.com/" + path; - if (threadID && postID) { + if (threadID && postID && !AL) { url += "#p" + postID; } break; @@ -4800,14 +4866,9 @@ case 'r9k': case 'toy': case 'x': + path = ar('gentoo'); url = "http://archive.heinessen.com/" + path; - if (threadID && postID) { - url += "#p" + postID; - } - break; - case 'e': - url = "https://www.cliché.net/4chan/cgi-board.pl/" + path; - if (threadID && postID) { + if (threadID && postID && !AL) { url += "#p" + postID; } break; diff --git a/changelog b/changelog index 161d71413..bad127f66 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,6 @@ master +- noface + Archives now populate a submenu just like the quicklinks for the Filter. 2.36.0 - Mayhem diff --git a/script.coffee b/script.coffee index 7b8445352..2e1424dad 100644 --- a/script.coffee +++ b/script.coffee @@ -3695,19 +3695,56 @@ DownloadLink = true ArchiveLink = - init: -> - a = $.el 'a', - className: 'archive_link' - target: '_blank' - textContent: 'Archived post' - Menu.addEntry - el: a - open: (post) -> + init: (post) -> + div = $.el 'div', + textContent: 'Archive' + + entry = + el: div + open: (post) -> path = $('a[title="Highlight this post"]', post.el).pathname.split '/' - if (href = Redirect.thread path[1], path[3], post.ID) is "//boards.4chan.org/#{path[1]}/" + if (Redirect.thread path[1], path[3], post.ID) is "//boards.4chan.org/#{path[1]}/" return false - a.href = href true + children: [] + + for type in [ + ['Post', 'apost'] + ['Name', 'name'] + ['Tripcode', 'tripcode'] + ['E-mail', 'email'] + ['Subject', 'subject'] + ['Filename', 'filename'] + ['Image MD5', 'md5'] + ] + # Add a sub entry for each filter type. + entry.children.push @createSubEntry type[0], type[1] + + Menu.addEntry entry + + createSubEntry: (text, type) -> + el = $.el 'a', + textContent: text + target: '_blank' + + open = (post) -> + path = $('a[title="Highlight this post"]', post.el).pathname.split '/' + unless type is 'apost' + value = Filter[type] post + # We want to parse the exact same stuff as Filter does already + maybe a few extras. + return false if value is false + switch type + when 'name' + if value is 'Anonymous' or value.length is 0 + return false + when 'email' + if value is 'sage' or value.length is 0 + return false + when 'apost' + return el.href = Redirect.thread path[1], path[3], post.ID + el.href = Redirect.thread path[1], value, type, true + + return el: el, open: open ThreadStats = init: -> @@ -3873,43 +3910,61 @@ Redirect = "//archive.foolz.us/_/api/chan/post/?board=#{board}&num=#{postID}" when 'u', 'kuku' "//nsfw.foolz.us/_/api/chan/post/?board=#{board}&num=#{postID}" - thread: (board, threadID, postID) -> - # keep the number only if the location.hash was sent f.e. - postID = postID.match(/\d+/)[0] if postID - path = - if threadID - "#{board}/thread/#{threadID}" + thread: (board, threadID, postID, AL) -> + ar = (a) -> + if AL + postID = 'username' if postID is 'name' + postID = 'image' if postID is 'md5' + if a is 'fuuka' + return "#{board}/search/#{postID}/#{encodeURIComponent threadID}" + else if a is 'gentoo' + if postID is 'image' + "#{board}/image/#{encodeURIComponent threadID}" + else + "#{board}/?task=search2&search_#{postID}=#{encodeURIComponent threadID}" else - "#{board}/post/#{postID}" + # keep the number only if the location.hash was sent f.e. + postID = postID.match(/\d+/)[0] if postID + path = + if threadID + "#{board}/thread/#{threadID}" + else + "#{board}/post/#{postID}" switch board when 'a', 'co', 'jp', 'm', 'q', 'sp', 'tg', 'tv', 'v', 'vg', 'wsg', 'dev', 'foolz' + path = ar 'fuuka' url = "//archive.foolz.us/#{path}/" - if threadID and postID + if threadID and postID and !AL url += "##{postID}" when 'u', 'kuku' + path = ar 'fuuka' url = "//nsfw.foolz.us/#{path}/" - if threadID and postID + if threadID and postID and !AL url += "##{postID}" when 'ck', 'lit' + path = ar 'fuuka' url = "//fuuka.warosu.org/#{path}" - if threadID and postID - url += "#p#{postID}" + if threadID and postID and !AL + url += "##{postID}" when 'diy', 'g', 'sci' + path = ar 'gentoo' url = "//archive.installgentoo.net/#{path}" - if threadID and postID + if threadID and postID and !AL url += "#p#{postID}" when 'cgl', 'mu', 'soc', 'w' + path = ar 'gentoo' url = "//archive.rebeccablacktech.com/#{path}" - if threadID and postID + if threadID and postID and !AL url += "#p#{postID}" when 'an', 'fit', 'k', 'mlp', 'r9k', 'toy', 'x' + path = ar 'gentoo' url = "http://archive.heinessen.com/#{path}" - if threadID and postID - url += "#p#{postID}" - when 'e' - url = "https://www.cliché.net/4chan/cgi-board.pl/#{path}" - if threadID and postID + if threadID and postID and !AL url += "#p#{postID}" + #when 'e' + # url = "https://www.cliché.net/4chan/cgi-board.pl/#{path}" + # if threadID and postID + # url += "#p#{postID}" else if threadID url = "//boards.4chan.org/#{board}/"