]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - app/Resources/static/themes/material/js/shortcuts/main.js
Bring navigation (with right, left and enter) on material entries page. Supports...
[github/wallabag/wallabag.git] / app / Resources / static / themes / material / js / shortcuts / main.js
index ccd3c92d84859a946baade4ef3a62c0f56d7fea8..62b7ec6455e8fe71117c65630601e8258c2b948d 100644 (file)
@@ -1,13 +1,71 @@
-/* Actions */
-Mousetrap.bind('g n', () => {
+import Mousetrap from 'mousetrap';
+import $ from 'jquery';
+
+function toggleFocus(cardToToogleFocus) {
+  if (cardToToogleFocus) {
+    $(cardToToogleFocus).toggleClass('z-depth-4');
+  }
+}
+let card;
+let cardIndex;
+let cardNumber;
+let pagination;
+
+$(document).ready(() => {
+  cardIndex = 0;
+  cardNumber = $('#content ul.data > li').length;
+  card = $('#content ul.data > li')[cardIndex];
+  pagination = $('.pagination');
+
+  /* If we come from next page */
+  if (window.location.hash === '#prev') {
+    cardIndex = cardNumber - 1;
+    card = $('ul.data > li')[cardIndex];
+  }
+
+  /* Focus current card */
+  toggleFocus(card);
+
+  /* Actions */
+  Mousetrap.bind('g n', () => {
     $('#nav-btn-add').trigger('click');
-});
+  });
 
-Mousetrap.bind('esc', () => {
+  Mousetrap.bind('esc', () => {
     $('.close').trigger('click');
-});
+  });
+
+  /* Select right card. If there's a next page, go to next page */
+  Mousetrap.bind('right', () => {
+    if (cardIndex >= 0 && cardIndex < cardNumber - 1) {
+      toggleFocus(card);
+      cardIndex += 1;
+      card = $('ul.data > li')[cardIndex];
+      toggleFocus(card);
+      return;
+    }
+    if (pagination != null && pagination.find('li.next') && cardIndex === cardNumber - 1) {
+      window.location.href = window.location.origin + $(pagination).find('li.next a').attr('href');
+      return;
+    }
+  });
+
+  /* Select previous card. If there's a previous page, go to next page */
+  Mousetrap.bind('left', () => {
+    if (cardIndex > 0 && cardIndex < cardNumber) {
+      toggleFocus(card);
+      cardIndex -= 1;
+      card = $('ul.data > li')[cardIndex];
+      toggleFocus(card);
+      return;
+    }
+    if (pagination !== null && $(pagination).find('li.prev') && cardIndex === 0) {
+      window.location.href = `${window.location.origin + $(pagination).find('li.prev a').attr('href')}#prev`;
+      return;
+    }
+  });
 
-// Display the first element of the current view
-Mousetrap.bind('right', () => {
-    $('ul.data li:first-child span.dot-ellipsis a')[0].click();
+  Mousetrap.bind('enter', () => {
+    window.location.href = window.location.origin + $(card).find('span.card-title a').attr('href');
+  });
 });