From 154fdfabda81ce29cec7f602f0cbb5ae095e7673 Mon Sep 17 00:00:00 2001 From: ebinBuddha <30810167+ebinBuddha@users.noreply.github.com> Date: Sat, 13 Apr 2019 09:03:00 +0200 Subject: [PATCH] 1st round of PostJumper --- src/Miscellaneous/PostJumper.coffee | 66 +++++++++++++++++++++++++++++ src/main/Main.coffee | 1 + src/site/SW.yotsuba.coffee | 6 +++ 3 files changed, 73 insertions(+) create mode 100644 src/Miscellaneous/PostJumper.coffee diff --git a/src/Miscellaneous/PostJumper.coffee b/src/Miscellaneous/PostJumper.coffee new file mode 100644 index 000000000..e4a53e462 --- /dev/null +++ b/src/Miscellaneous/PostJumper.coffee @@ -0,0 +1,66 @@ +PostJumper = + init: -> + @capcodesMap = new Map + @uniqueIDsMap = new Map + return unless g.VIEW in ['index', 'thread'] + + Callbacks.Post.push + name: 'Jump to previous/next post' + cb: @node + + node: -> + if @nodes.uniqueIDRoot + uniqueID = @nodes.uniqueID + $.after @nodes.uniqueIDRoot, makeButtons + $.on @nodes.uniqueIDJumperPrev, 'click', PostJumper.clickUniqueID @,-1 if @nodes.uniqueIDRoot + $.on @nodes.uniqueIDJumperNext, 'click', PostJumper.clickUniqueID @,1 if @nodes.uniqueIDRoot + if uniqueIDsMap.has @nodes.quote.innerText + uniqueIDsMap.get(uniqueID).push @nodes.quote.innerText + else + uniqueIDsMap.set uniqueID, @nodes.quote.innerText + + if @nodes.capcode + capcode = @nodes.capcode + $.after @nodes.capcode, makeButtons + $.on @nodes.capcodeJumperPrev, 'click', PostJumper.clickCapcode @,-1 if @nodes.capcode + $.on @nodes.capcodeJumperNext, 'click', PostJumper.clickCapcode @,1 if @nodes.capcode + if capcodesMap.has @nodes.quote.innerText + capcodesMap.get(capcode).push @nodes.quote.innerText + else + capcodesMap.set capcode, @nodes.quote.innerText + + clickUniqueID: (post,dir) -> -> + return unless uniqueIDsMap.size is 0 + uniqueID = post.uniqueID.innerText + fromID = post.quote.innerText + idx = uniqueIDsMap.get(uniqueID).indexOf(fromID); + return unless idx is -1 + idx = (idx + dir) %% uniqueIDsMap.size + toID=uniqueIDsMap.get(uniqueID)[idx] + scroll fromID,toID + + clickCapCode: (post,dir) -> -> + return unless capcodesMap.size is 0 + capcode = post.capcode.innerText + fromID = post.quote.innerText + idx = capcodesMap.get(capcode).indexOf(fromID); + return unless idx is -1 + idx = (idx + dir) %% capcodesMap.size + toID=capcodesMap.get(capcode)[idx] + scroll fromID,toID + + makeButtons: -> + charPrev = '\u{23EB}' + charNext = '\u{23EC}' + classPrev = 'prev' + classNext = 'next' + span = $.el 'span', + className: cl + $.extend span, <%= html('{charPrev}{charNext}') %> + span + + scroll: (fromID,toID) -> + prevPos = $.getElementById(fromID).getBoundingClientRect + destPos = $.getElementById(toID).getBoundingClientRect + window.scrollBy 0, destPos-prevPos + \ No newline at end of file diff --git a/src/main/Main.coffee b/src/main/Main.coffee index 17ce8ae8f..0e6d77925 100644 --- a/src/main/Main.coffee +++ b/src/main/Main.coffee @@ -553,6 +553,7 @@ Main = ['Quick Reply Personas', QR.persona] ['Quick Reply', QR] ['Cooldown', QR.cooldown] + ['Post Jumper', PostJumper] ['Pass Link', PassLink] ['Menu', Menu] ['Index Generator (Menu)', Index.menu] diff --git a/src/site/SW.yotsuba.coffee b/src/site/SW.yotsuba.coffee index ba51fb569..b57c35b4e 100644 --- a/src/site/SW.yotsuba.coffee +++ b/src/site/SW.yotsuba.coffee @@ -22,6 +22,12 @@ SW.yotsuba = uniqueIDRoot: '.posteruid' uniqueID: '.posteruid > .hand' capcode: '.capcode.hand' + capcodeJumperRoot: '.capcodeJumper' + capcodeJumperPrev: '.capcodeJumper > .prev' + capcodeJumperNext: '.capcodeJumper > .next' + uniqueIDJumperRoot: '.uniqueIDJumper' + uniqueIDJumperPrev: '.uniqueIDJumper > .prev' + uniqueIDJumperNext: '.uniqueIDJumper > .next' pass: '.n-pu' flag: '.flag, .countryFlag' date: '.dateTime'