diff options
Diffstat (limited to 'src/content/navigates.js')
| -rw-r--r-- | src/content/navigates.js | 41 | 
1 files changed, 40 insertions, 1 deletions
| diff --git a/src/content/navigates.js b/src/content/navigates.js index 28f34c5..b68052d 100644 --- a/src/content/navigates.js +++ b/src/content/navigates.js @@ -1,8 +1,47 @@ +const PREV_LINK_PATTERNS = [ +  /\bprev\b/i, /\bprevious\b/i, /\bback\b/i, +  /</, /\u2039/, /\u2190/, /\xab/, /\u226a/, /<</ +]; +const NEXT_LINK_PATTERNS = [ +  /\bnext\b/i, +  />/, /\u203a/, /\u2192/, /\xbb/, /\u226b/, />>/ +]; + +const findLinkByPatterns = (win, patterns) => { +  let links = win.document.getElementsByTagName('a'); +  return Array.prototype.find.call(links, (link) => { +    return patterns.some(ptn => ptn.test(link.textContent)); +  }); +}; +  const historyPrev = (win) => {    win.history.back();  }; +  const historyNext = (win) => {    win.history.forward();  }; -export { historyPrev, historyNext }; +const linkPrev = (win) => { +  let link = win.document.querySelector('a[rel=prev]'); +  if (link) { +    return link.click(); +  } +  link = findLinkByPatterns(win, PREV_LINK_PATTERNS); +  if (link) { +    link.click(); +  } +}; + +const linkNext = (win) => { +  let link = win.document.querySelector('a[rel=next]'); +  if (link) { +    return link.click(); +  } +  link = findLinkByPatterns(win, NEXT_LINK_PATTERNS); +  if (link) { +    link.click(); +  } +}; + +export { historyPrev, historyNext, linkPrev, linkNext }; | 
