VimKeys Navigation for WeebCentral

hjkl navigation within WeebCentral's reader. <Alt-c> to show reader's settings. <Alt-g> to show page select dialog.

  1. // ==UserScript==
  2. //
  3. // @name VimKeys Navigation for WeebCentral
  4. // @namespace Violentmonkey Scripts
  5. // @match https://weebcentral.com/chapters/*
  6. // @grant none
  7. // @version 0.2
  8. // @author Sadist
  9. // @license MIT
  10. // @description hjkl navigation within WeebCentral's reader. <Alt-c> to show reader's settings. <Alt-g> to show page select dialog.
  11. // ==/UserScript==
  12.  
  13. const scrollLines = 35;
  14. const ratioExp = 2.6;
  15. const keyList = ['g','c','h','j','k','l','f'];
  16.  
  17.  
  18. function isInputActive() {
  19. return (document.activeElement.tagName === "INPUT");
  20. }
  21.  
  22. function noModifierKey(event) {
  23. return (!((event.altKey) || (event.ctrlKey) || (event.metaKey) || (event.shiftKey)));
  24. }
  25.  
  26. document.addEventListener("keydown", (event) => {
  27. if ( isInputActive() ) {
  28. return;
  29. }
  30. if ( !keyList.includes(event.key) ) {
  31. console.log('key not in list')
  32. return;
  33. }
  34. if ( noModifierKey(event) ) {
  35. switch (event.key) {
  36. case 'h':
  37. document.getElementById('nav-top').querySelector('div > button:nth-child(4)').click();
  38. break;
  39. case 'l':
  40. document.getElementById('nav-top').querySelector('div > button:nth-child(8)').click();
  41. break;
  42. case 'k':
  43. scrollByLines(-scrollLines * Math.pow(window.devicePixelRatio, ratioExp));
  44. break;
  45. case 'j':
  46. scrollByLines(scrollLines * Math.pow(window.devicePixelRatio, ratioExp));
  47. break;
  48. }
  49. return;
  50. }
  51. if ( (event.key === 'g') && (event.altKey) ) {
  52. document.getElementById('nav-top').querySelector('div > button:nth-child(6)').click();
  53. return;
  54. }
  55. if ( (event.key === 'c') && (event.altKey) ) {
  56. preference_modal.showModal()
  57. return;
  58. }
  59. if ( (event.key === 'f') && (event.ctrlKey) ) {
  60. event.preventDefault();
  61. document.getElementById('quick-search-input').focus();
  62. return;
  63. }
  64. });