From 8b0e6319e4a01a831bec6a05ac9083d5155b2df5 Mon Sep 17 00:00:00 2001 From: Yassine Guedidi Date: Sun, 9 Mar 2025 00:13:58 +0100 Subject: [PATCH] Extract Shortcuts controller --- assets/controllers/shortcuts_controller.js | 104 +++++++++++++++++++++ assets/index.js | 1 - assets/js/shortcuts/entry.js | 26 ------ assets/js/shortcuts/main.js | 27 ------ templates/Entry/entry.html.twig | 8 +- templates/Entry/new_form.html.twig | 2 +- templates/Entry/search_form.html.twig | 2 +- templates/base.html.twig | 2 +- templates/layout.html.twig | 4 +- 9 files changed, 113 insertions(+), 63 deletions(-) create mode 100644 assets/controllers/shortcuts_controller.js delete mode 100644 assets/js/shortcuts/entry.js diff --git a/assets/controllers/shortcuts_controller.js b/assets/controllers/shortcuts_controller.js new file mode 100644 index 000000000..3d5c44fb5 --- /dev/null +++ b/assets/controllers/shortcuts_controller.js @@ -0,0 +1,104 @@ +import { Controller } from '@hotwired/stimulus'; +import Mousetrap from 'mousetrap'; + +export default class extends Controller { + static targets = ['openOriginal', 'markAsFavorite', 'markAsRead', 'deleteEntry', 'showAddUrl', 'showSearch', 'showActions']; + + connect() { + /* Go to */ + Mousetrap.bind('g u', () => { + window.location.href = Routing.generate('homepage'); + }); + Mousetrap.bind('g s', () => { + window.location.href = Routing.generate('starred'); + }); + Mousetrap.bind('g r', () => { + window.location.href = Routing.generate('archive'); + }); + Mousetrap.bind('g a', () => { + window.location.href = Routing.generate('all'); + }); + Mousetrap.bind('g t', () => { + window.location.href = Routing.generate('tag'); + }); + Mousetrap.bind('g c', () => { + window.location.href = Routing.generate('config'); + }); + Mousetrap.bind('g i', () => { + window.location.href = Routing.generate('import'); + }); + Mousetrap.bind('g d', () => { + window.location.href = Routing.generate('developer'); + }); + Mousetrap.bind('?', () => { + window.location.href = Routing.generate('howto'); + }); + Mousetrap.bind('g l', () => { + window.location.href = Routing.generate('fos_user_security_logout'); + }); + + /* open original article */ + Mousetrap.bind('o', () => { + if (!this.hasOpenOriginalTarget) { + return; + } + + this.openOriginalTarget.click(); + }); + + /* mark as favorite */ + Mousetrap.bind('f', () => { + if (!this.hasMarkAsFavoriteTarget) { + return; + } + + this.markAsFavoriteTarget.click(); + }); + + /* mark as read */ + Mousetrap.bind('a', () => { + if (!this.hasMarkAsReadTarget) { + return; + } + + this.markAsReadTarget.click(); + }); + + /* delete */ + Mousetrap.bind('del', () => { + if (!this.hasDeleteEntryTarget) { + return; + } + + this.deleteEntryTarget.click(); + }); + + /* Actions */ + Mousetrap.bind('g n', (e) => { + if (!this.hasShowAddUrlTarget) { + return; + } + + e.preventDefault(); + this.showAddUrlTarget.click(); + }); + + Mousetrap.bind('s', (e) => { + if (!this.hasShowSearchTarget) { + return; + } + + e.preventDefault(); + this.showSearchTarget.click(); + }); + + Mousetrap.bind('esc', (e) => { + if (!this.hasShowActionsTarget) { + return; + } + + e.preventDefault(); + this.showActionsTarget.click(); + }); + } +} diff --git a/assets/index.js b/assets/index.js index 706667eec..04b76a01f 100755 --- a/assets/index.js +++ b/assets/index.js @@ -17,7 +17,6 @@ import '@fontsource/oswald'; /* Import shortcuts */ import './js/shortcuts/main'; -import './js/shortcuts/entry'; /* Theme style */ import './scss/index.scss'; diff --git a/assets/js/shortcuts/entry.js b/assets/js/shortcuts/entry.js deleted file mode 100644 index 3c15f3d29..000000000 --- a/assets/js/shortcuts/entry.js +++ /dev/null @@ -1,26 +0,0 @@ -import Mousetrap from 'mousetrap'; -import $ from 'jquery'; - -$(document).ready(() => { - if ($('#article').length > 0) { - /* open original article */ - Mousetrap.bind('o', () => { - $('ul.sidenav a.original i')[0].click(); - }); - - /* mark as favorite */ - Mousetrap.bind('f', () => { - $('ul.sidenav a.favorite i')[0].click(); - }); - - /* mark as read */ - Mousetrap.bind('a', () => { - $('ul.sidenav a.markasread i')[0].click(); - }); - - /* delete */ - Mousetrap.bind('del', () => { - $('ul.sidenav a.delete i')[0].click(); - }); - } -}); diff --git a/assets/js/shortcuts/main.js b/assets/js/shortcuts/main.js index 8033d9651..2cf96dba9 100644 --- a/assets/js/shortcuts/main.js +++ b/assets/js/shortcuts/main.js @@ -1,18 +1,6 @@ import Mousetrap from 'mousetrap'; import $ from 'jquery'; -/* Go to */ -Mousetrap.bind('g u', () => { window.location.href = Routing.generate('homepage'); }); -Mousetrap.bind('g s', () => { window.location.href = Routing.generate('starred'); }); -Mousetrap.bind('g r', () => { window.location.href = Routing.generate('archive'); }); -Mousetrap.bind('g a', () => { window.location.href = Routing.generate('all'); }); -Mousetrap.bind('g t', () => { window.location.href = Routing.generate('tag'); }); -Mousetrap.bind('g c', () => { window.location.href = Routing.generate('config'); }); -Mousetrap.bind('g i', () => { window.location.href = Routing.generate('import'); }); -Mousetrap.bind('g d', () => { window.location.href = Routing.generate('developer'); }); -Mousetrap.bind('?', () => { window.location.href = Routing.generate('howto'); }); -Mousetrap.bind('g l', () => { window.location.href = Routing.generate('fos_user_security_logout'); }); - function toggleFocus(cardToToogleFocus) { if (cardToToogleFocus) { $(cardToToogleFocus).toggleClass('z-depth-4'); @@ -48,21 +36,6 @@ $(document).ready(() => { /* Focus current card */ toggleFocus(card); - /* Actions */ - Mousetrap.bind('g n', () => { - $('#nav-btn-add').trigger('click'); - return false; - }); - - Mousetrap.bind('s', () => { - $('#nav-btn-search').trigger('click'); - return false; - }); - - 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) { diff --git a/templates/Entry/entry.html.twig b/templates/Entry/entry.html.twig index b1c969097..c702c2351 100644 --- a/templates/Entry/entry.html.twig +++ b/templates/Entry/entry.html.twig @@ -52,7 +52,7 @@
  • - + link {{ 'entry.view.left_menu.view_original_article'|trans }} @@ -76,7 +76,7 @@ {% if is_granted('ARCHIVE', entry) %}
  • - + {% if entry.isArchived == 0 %}done{% else %}unarchive{% endif %} {{ mark_as_read_label|trans }} @@ -86,7 +86,7 @@ {% if is_granted('STAR', entry) %}
  • - + {% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %} {{ 'entry.view.left_menu.set_as_starred'|trans }} @@ -96,7 +96,7 @@ {% if is_granted('DELETE', entry) %}
  • - + delete {{ 'entry.view.left_menu.delete'|trans }} diff --git a/templates/Entry/new_form.html.twig b/templates/Entry/new_form.html.twig index 39741c113..f1a9cf45e 100644 --- a/templates/Entry/new_form.html.twig +++ b/templates/Entry/new_form.html.twig @@ -9,7 +9,7 @@ {% endif %} {{ form_widget(form.url, {'attr': {'autocomplete': 'off', 'placeholder': 'entry.new.placeholder', 'data-topbar-target': 'addUrlInput'}}) }} - + {{ form_rest(form) }} diff --git a/templates/Entry/search_form.html.twig b/templates/Entry/search_form.html.twig index 090ae9a8e..ebd10e70a 100644 --- a/templates/Entry/search_form.html.twig +++ b/templates/Entry/search_form.html.twig @@ -11,7 +11,7 @@ {{ form_widget(form.term, {'attr': {'autocomplete': 'off', 'placeholder': 'entry.search.placeholder', 'data-topbar-target': 'searchInput'}}) }} - + {{ form_rest(form) }} diff --git a/templates/base.html.twig b/templates/base.html.twig index ae1e332eb..382e3b3f3 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -4,7 +4,7 @@ - + {% block head %} diff --git a/templates/layout.html.twig b/templates/layout.html.twig index ce803690c..b0c2de45c 100644 --- a/templates/layout.html.twig +++ b/templates/layout.html.twig @@ -90,12 +90,12 @@