bootstrap.js 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. document.addEventListener("DOMContentLoaded", function() {
  2. FormHandler.handleSubmitButtons();
  3. let navHandler = new NavHandler();
  4. if (! document.querySelector("body[data-disable-keyboard-shortcuts=true]")) {
  5. let keyboardHandler = new KeyboardHandler();
  6. keyboardHandler.on("g u", () => navHandler.goToPage("unread"));
  7. keyboardHandler.on("g b", () => navHandler.goToPage("starred"));
  8. keyboardHandler.on("g h", () => navHandler.goToPage("history"));
  9. keyboardHandler.on("g f", () => navHandler.goToFeedOrFeeds());
  10. keyboardHandler.on("g c", () => navHandler.goToPage("categories"));
  11. keyboardHandler.on("g s", () => navHandler.goToPage("settings"));
  12. keyboardHandler.on("ArrowLeft", () => navHandler.goToPrevious());
  13. keyboardHandler.on("ArrowRight", () => navHandler.goToNext());
  14. keyboardHandler.on("k", () => navHandler.goToPrevious());
  15. keyboardHandler.on("p", () => navHandler.goToPrevious());
  16. keyboardHandler.on("j", () => navHandler.goToNext());
  17. keyboardHandler.on("n", () => navHandler.goToNext());
  18. keyboardHandler.on("h", () => navHandler.goToPage("previous"));
  19. keyboardHandler.on("l", () => navHandler.goToPage("next"));
  20. keyboardHandler.on("o", () => navHandler.openSelectedItem());
  21. keyboardHandler.on("v", () => navHandler.openOriginalLink());
  22. keyboardHandler.on("m", () => navHandler.toggleEntryStatus());
  23. keyboardHandler.on("A", () => {
  24. let element = document.querySelector("a[data-on-click=markPageAsRead]");
  25. navHandler.markPageAsRead(element.dataset.showOnlyUnread || false);
  26. });
  27. keyboardHandler.on("s", () => navHandler.saveEntry());
  28. keyboardHandler.on("d", () => navHandler.fetchOriginalContent());
  29. keyboardHandler.on("f", () => navHandler.toggleBookmark());
  30. keyboardHandler.on("?", () => navHandler.showKeyboardShortcuts());
  31. keyboardHandler.on("#", () => navHandler.unsubscribeFromFeed());
  32. keyboardHandler.on("/", (e) => navHandler.setFocusToSearchInput(e));
  33. keyboardHandler.on("Escape", () => ModalHandler.close());
  34. keyboardHandler.listen();
  35. }
  36. let touchHandler = new TouchHandler(navHandler);
  37. touchHandler.listen();
  38. let mouseHandler = new MouseHandler();
  39. mouseHandler.onClick("a[data-save-entry]", (event) => {
  40. EntryHandler.saveEntry(event.target);
  41. });
  42. mouseHandler.onClick("a[data-toggle-bookmark]", (event) => {
  43. EntryHandler.toggleBookmark(event.target);
  44. });
  45. mouseHandler.onClick("a[data-toggle-status]", (event) => {
  46. let currentItem = DomHelper.findParent(event.target, "entry");
  47. if (! currentItem) {
  48. currentItem = DomHelper.findParent(event.target, "item");
  49. }
  50. if (currentItem) {
  51. EntryHandler.toggleEntryStatus(currentItem);
  52. }
  53. });
  54. mouseHandler.onClick("a[data-fetch-content-entry]", (event) => {
  55. EntryHandler.fetchOriginalContent(event.target);
  56. });
  57. mouseHandler.onClick("a[data-on-click=markPageAsRead]", (event) => {
  58. navHandler.markPageAsRead(event.target.dataset.showOnlyUnread || false);
  59. });
  60. mouseHandler.onClick("a[data-confirm]", (event) => {
  61. (new ConfirmHandler()).handle(event);
  62. });
  63. mouseHandler.onClick("a[data-action=search]", (event) => {
  64. navHandler.setFocusToSearchInput(event);
  65. });
  66. mouseHandler.onClick("a[data-link-state=flip]", (event) => {
  67. LinkStateHandler.flip(event.target);
  68. }, true);
  69. if (document.documentElement.clientWidth < 600) {
  70. let menuHandler = new MenuHandler();
  71. mouseHandler.onClick(".logo", () => menuHandler.toggleMainMenu());
  72. mouseHandler.onClick(".header nav li", (event) => menuHandler.clickMenuListItem(event));
  73. }
  74. if ("serviceWorker" in navigator) {
  75. let scriptElement = document.getElementById("service-worker-script");
  76. if (scriptElement) {
  77. navigator.serviceWorker.register(scriptElement.src);
  78. }
  79. }
  80. });