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'