Răsfoiți Sursa

Shortcut mark previous articles as read (#2843)

* Shortcut mark previous articles as read

Address part of https://github.com/FreshRSS/FreshRSS/issues/2836
The shortcut [shift]+[r] now marks previous articles as read;
The previous action of marking all articles as read is now achieved by
[alt]+[r]
So this is a slight breaking change, but I like the logic of the
upward-facing [shift] arrow to hint at previous articles, while [alt] is
more like "all", at least to my eyes :-)

* Update app/i18n/nl/conf.php

Co-Authored-By: Frans de Jonge <fransdejonge@gmail.com>

* [⇧ Shift] / [Alt ⎇]

With standard Unicode signs

* <kbd> + CSS styling

* Missing themes

Tested with all themes

* Travis CSS

Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
Alexandre Alapetite 6 ani în urmă
părinte
comite
a7b72481e7

+ 2 - 2
app/i18n/cz/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Označit jako oblíbené',
 		'mark_read' => 'Označit jako přečtené',
 		'navigation' => 'Navigace',
-		'navigation_help' => 'Pomocí přepínače "Shift" fungují navigační zkratky v rámci kanálů.<br/>Pomocí přepínače "Alt" fungují v rámci kategorií.',
+		'navigation_help' => 'Pomocí přepínače <kbd>⇧ Shift</kbd> fungují navigační zkratky v rámci kanálů.<br/>Pomocí přepínače <kbd>Alt ⎇</kbd> fungují v rámci kategorií.',
 		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Skočit na další článek',
 		'normal_view' => 'Switch to normal view',	// TODO - Translation
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',	// TODO - Translation
 		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Navštívit původní webovou stránku',
-		'shift_for_all_read' => '+ <code>shift</code> označí vše jako přečtené',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> označí vše jako přečtené',	// TODO - Translation
 		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
 		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Zkratky',

+ 2 - 2
app/i18n/de/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_read' => 'Als gelesen markieren',
 		'navigation' => 'Navigation',	// TODO - Translation
-		'navigation_help' => 'Mit der "Umschalttaste" finden die Tastenkombination auf Feeds Anwendung.<br/>Mit der "Alt-Taste" finden die Tastenkombination auf Kategorien Anwendung.',
+		'navigation_help' => 'Mit der <kbd>⇧ Umschalttaste</kbd> finden die Tastenkombination auf Feeds Anwendung.<br/>Mit der <kbd>Alt ⎇</kbd>-Taste finden die Tastenkombination auf Kategorien Anwendung.',
 		'navigation_no_mod_help' => 'Die folgenden Navigationsverknüpfungen unterstützen keine Modifikatoren.',
 		'next_article' => 'Zum nächsten Artikel springen',
 		'normal_view' => 'Wechsle zur normalen Ansicht',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Wechsle zur Lese-Ansicht',
 		'rss_view' => 'Öffne RSS Ansicht in neuem Tab',
 		'see_on_website' => 'Auf der Original-Webseite ansehen',
-		'shift_for_all_read' => '+ <code>Umschalttaste</code>, um alle Artikel als gelesen zu markieren.',
+		'shift_for_all_read' => '+ <kbd>⇧ Umschalttaste</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd>, um alle Artikel als gelesen zu markieren.',	// TODO - Translation
 		'skip_next_article' => 'Nächsten markieren ohne zu öffnen',
 		'skip_previous_article' => 'Vorherigen markieren ohne zu öffnen',
 		'title' => 'Tastenkombination',

+ 2 - 2
app/i18n/en/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Toggle favourite',
 		'mark_read' => 'Toggle read',
 		'navigation' => 'Navigation',
-		'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.<br/>With the "Alt" modifier, navigation shortcuts apply on categories.',
+		'navigation_help' => 'With the <kbd>⇧ Shift</kbd> modifier, navigation shortcuts apply on feeds.<br/>With the <kbd>Alt ⎇</kbd> modifier, navigation shortcuts apply on categories.',
 		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',
 		'next_article' => 'Open the next article',
 		'normal_view' => 'Switch to normal view',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',
 		'rss_view' => 'Open RSS view in a new tab',
 		'see_on_website' => 'See on original website',
-		'shift_for_all_read' => '+ <code>shift</code> to mark all articles as read',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> to mark all articles as read',
 		'skip_next_article' => 'Focus next without opening',
 		'skip_previous_article' => 'Focus previous without opening',
 		'title' => 'Shortcuts',

+ 2 - 2
app/i18n/es/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_read' => 'Marcar como leído',
 		'navigation' => 'Navegación',
-		'navigation_help' => 'Con el modificador "Mayúsculas" es posible usar los atajos de teclado en las fuentes.<br/>Con el modificador "Alt" es posible aplicar los atajos de teclado en las categorías.',
+		'navigation_help' => 'Con el modificador <kbd>⇧ Mayúsculas</kbd> es posible usar los atajos de teclado en las fuentes.<br/>Con el modificador <kbd>Alt ⎇</kbd> es posible aplicar los atajos de teclado en las categorías.',
 		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Saltar al siguiente artículo',
 		'normal_view' => 'Switch to normal view',	// TODO - Translation
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',	// TODO - Translation
 		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Ver en la web original',
-		'shift_for_all_read' => '+ <code>mayúsculas</code> para marcar todos los artículos como leídos',
+		'shift_for_all_read' => '+ <kbd>⇧ Mayúsculas</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> para marcar todos los artículos como leídos',	// TODO - Translation
 		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
 		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Atajos de teclado',

+ 2 - 2
app/i18n/fr/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Basculer l’indicateur de favori',
 		'mark_read' => 'Basculer l’indicateur de lecture',
 		'navigation' => 'Navigation',
-		'navigation_help' => 'Avec le modificateur "Shift", les raccourcis de navigation s’appliquent aux flux.<br/>Avec le modificateur "Alt", les raccourcis de navigation s’appliquent aux catégories.',
+		'navigation_help' => 'Avec le modificateur <kbd>⇧ Maj</kbd>, les raccourcis de navigation s’appliquent aux flux.<br/>Avec le modificateur <kbd>Alt ⎇</kbd>, les raccourcis de navigation s’appliquent aux catégories.',
 		'navigation_no_mod_help' => 'Les raccourcis suivant ne supportent pas les modificateurs.',
 		'next_article' => 'Passer à l’article suivant',
 		'normal_view' => 'Basculer vers la vue normale',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Basculer vers la vue lecture',
 		'rss_view' => 'Ouvrir le flux RSS dans un nouvel onglet',
 		'see_on_website' => 'Voir sur le site d’origine',
-		'shift_for_all_read' => '+ <code>shift</code> pour marquer tous les articles comme lus',
+		'shift_for_all_read' => '+ <kbd>⇧ Maj</kbd> pour marquer les articles précédents comme lus<br />+ <kbd>Alt ⎇</kbd> pour marquer tous les articles comme lus',
 		'skip_next_article' => 'Passer au suivant sans ouvrir',
 		'skip_previous_article' => 'Passer au précédent sans ouvrir',
 		'title' => 'Raccourcis',

+ 1 - 1
app/i18n/he/conf.php

@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',	// TODO - Translation
 		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'ראו את המקור באתר',
-		'shift_for_all_read' => '+ <code>shift</code> על מנת לסמן את כל המאמרים כנקראו',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> על מנת לסמן את כל המאמרים כנקראו',	// TODO - Translation
 		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
 		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'קיצורי דרך',

+ 2 - 2
app/i18n/it/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Segna come preferito',
 		'mark_read' => 'Segna come letto',
 		'navigation' => 'Navigazione',
-		'navigation_help' => 'Con il tasto "Shift" i comandi di navigazione verranno applicati ai feeds.<br/>Con il tasto "Alt" i comandi di navigazione verranno applicati alle categorie.',
+		'navigation_help' => 'Con il tasto <kbd>⇧ Shift</kbd> i comandi di navigazione verranno applicati ai feeds.<br/>Con il tasto <kbd>Alt ⎇</kbd> i comandi di navigazione verranno applicati alle categorie.',
 		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Salta al contenuto successivo',
 		'normal_view' => 'Switch to normal view',	// TODO - Translation
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',	// TODO - Translation
 		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Vai al sito fonte',
-		'shift_for_all_read' => '+ <code>shift</code> per segnare tutti gli articoli come letti',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> per segnare tutti gli articoli come letti',	// TODO - Translation
 		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
 		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Comandi da tastiera',

+ 2 - 2
app/i18n/kr/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => '즐겨찾기에 등록',
 		'mark_read' => '읽음으로 표시',
 		'navigation' => '탐색',
-		'navigation_help' => '"Shift" 키를 누른 상태에선 탐색 단축키가 피드에 적용됩니다.<br/>"Alt" 키를 누른 상태에선 탐색 단축키가 카테고리에 적용됩니다.',
+		'navigation_help' => '<kbd>⇧ Shift</kbd> 키를 누른 상태에선 탐색 단축키가 피드에 적용됩니다.<br/><kbd>Alt ⎇</kbd> 키를 누른 상태에선 탐색 단축키가 카테고리에 적용됩니다.',
 		'navigation_no_mod_help' => '아래 탐색 단축키에는 "Shift"와 "Alt" 키가 적용되지 않습니다.',
 		'next_article' => '다음 글 보기',
 		'normal_view' => '일반 모드로 전환',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => '읽기 모드로 전환',
 		'rss_view' => '새 탭에서 RSS 피드 열기',
 		'see_on_website' => '글이 게재된 웹사이트에서 보기',
-		'shift_for_all_read' => '+ <code>shift</code>를 누른 상태에선 모두 읽음으로 표시',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> 를 누른 상태에선 모두 읽음으로 표시',	// TODO - Translation
 		'skip_next_article' => '다음 글로 커서 이동',
 		'skip_previous_article' => '이전 글로 커서 이동',
 		'title' => '단축키',

+ 2 - 2
app/i18n/nl/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Markeer als favoriet',
 		'mark_read' => 'Markeer als gelezen',
 		'navigation' => 'Navigatie',
-		'navigation_help' => 'Met de "Shift" toets worden navigatieverwijzingen op feeds toegepast.<br/>Met de "Alt" toets worden navigatieverwijzingen op categorieën toegepast.',
+		'navigation_help' => 'Met de <kbd>⇧ Shift</kbd> toets worden navigatieverwijzingen op feeds toegepast.<br/>Met de <kbd>Alt ⎇</kbd> toets worden navigatieverwijzingen op categorieën toegepast.',
 		'navigation_no_mod_help' => 'De volgende navigatiesnelkoppelingen ondersteunen geen toetsencombinaties.',
 		'next_article' => 'Spring naar volgende artikel',
 		'normal_view' => 'Schakel naar gewoon aanzicht',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Schakel naar leesaanzicht',
 		'rss_view' => 'Open RSS-aanzicht in een nieuwe tab',
 		'see_on_website' => 'Bekijk op originale website',
-		'shift_for_all_read' => '+ <code>shift</code> om alle artikelen als gelezen te markeren',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> om voorgaande artikelen als gelezen te markeren<br />+ <kbd>Alt ⎇</kbd> om alle artikelen als gelezen te markeren',
 		'skip_next_article' => 'Volgend artikel focusen zonder openen',
 		'skip_previous_article' => 'Vorig artikel focusen zonder openen',
 		'title' => 'Verwijzingen',

+ 2 - 2
app/i18n/oc/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Ajustar als favorits',
 		'mark_read' => 'Marcar coma legit',
 		'navigation' => 'Navigacion',
-		'navigation_help' => 'Amb lo modificador «Shift», los acorchis de navigacion s’aplican als fluxes.<br/>Amb lo modificador «Alt», los acorchis de navigacion s’aplican a las categorias.',
+		'navigation_help' => 'Amb lo modificador <kbd>⇧ Shift</kbd>, los acorchis de navigacion s’aplican als fluxes.<br/>Amb lo modificador <kbd>Alt ⎇</kbd>, los acorchis de navigacion s’aplican a las categorias.',
 		'navigation_no_mod_help' => 'Los acorchis clavièrs de navigacion son pas compatibles amb los modificadors.',
 		'next_article' => 'Passar a l’article seguent',
 		'normal_view' => 'Passar a la vista normala',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Passar a la vista lectura',
 		'rss_view' => 'Dobrir la vista RSS dins un onglet novèl',
 		'see_on_website' => 'Veire al site d’origina',
-		'shift_for_all_read' => '+ <code>shift</code> per marcar los articles coma legits',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> per marcar los articles coma legits',	// TODO - Translation
 		'skip_next_article' => 'Centrar sul seguent sens lo dobrir',
 		'skip_previous_article' => 'Centrar sul precedent sens lo dobrir',
 		'title' => 'Acorchis',

+ 2 - 2
app/i18n/pt-br/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_read' => 'Marcar como lido',
 		'navigation' => 'Navegação',
-		'navigation_help' => 'Com o modificador "Shift", atalhos de navegação aplicam aos feeds.<br/>Com o "Alt" modificador, atalhos de navegação aplicam as categorias.',
+		'navigation_help' => 'Com o modificador <kbd>⇧ Shift</kbd>, atalhos de navegação aplicam aos feeds.<br/>Com o <kbd>Alt ⎇</kbd> modificador, atalhos de navegação aplicam as categorias.',
 		'navigation_no_mod_help' => 'Os seguintes atalhos de navegação não suportam modificadores.',
 		'next_article' => 'Pule para o próximo artigo',
 		'normal_view' => 'Mudar para a visualização normal',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Mudar para o modo de leitura',
 		'rss_view' => 'Abrir visualização de RSS em uma nova aba',
 		'see_on_website' => 'Visualize o site original',
-		'shift_for_all_read' => '+ <code>shift</code> para marcar todos os artigos como lido',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> para marcar todos os artigos como lido',	// TODO - Translation
 		'skip_next_article' => 'Focar o próximo sem abri-lo',
 		'skip_previous_article' => 'Focar o anterior sem abri-lo',
 		'title' => 'Atalhos',

+ 2 - 2
app/i18n/ru/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Mark as favourite',
 		'mark_read' => 'Mark as read',
 		'navigation' => 'Navigation',	// TODO - Translation
-		'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.<br/>With the "Alt" modifier, navigation shortcuts apply on categories.',	// TODO - Translation
+		'navigation_help' => 'With the <kbd>⇧ Shift</kbd> modifier, navigation shortcuts apply on feeds.<br/>With the <kbd>Alt ⎇</kbd> modifier, navigation shortcuts apply on categories.',	// TODO - Translation
 		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Skip to the next article',
 		'normal_view' => 'Switch to normal view',	// TODO - Translation
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',	// TODO - Translation
 		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'See on original website',	// TODO - Translation
-		'shift_for_all_read' => '+ <code>shift</code> to mark all articles as read',	// TODO - Translation
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> to mark all articles as read',	// TODO - Translation
 		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
 		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Shortcuts',	// TODO - Translation

+ 2 - 2
app/i18n/sk/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'O(d)značí ako obľúbené',
 		'mark_read' => 'O(d)značí ako prečítané',
 		'navigation' => 'Navigácia',
-		'navigation_help' => 'Po stlačení skratky s klávesou "Shift", sa skratky navigácie vzťahujú na kanály.<br/>Po stlačení skratky s klávesou "Alt", sa skratky navigácie vzťahujú na kategórie.',
+		'navigation_help' => 'Po stlačení skratky s klávesou <kbd>⇧ Shift</kbd>, sa skratky navigácie vzťahujú na kanály.<br/>Po stlačení skratky s klávesou <kbd>Alt ⎇</kbd>, sa skratky navigácie vzťahujú na kategórie.',
 		'navigation_no_mod_help' => 'Tieto skratky navigácie nepodporujú klávesy "Shift" a "Alt".',
 		'next_article' => 'Otvorí ďalší článok',
 		'normal_view' => 'Prepne do základného zobrazenia',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Prepne do zobrazenia na čítanie',
 		'rss_view' => 'Otvorí zobrazenie RSS v novej záložke',
 		'see_on_website' => 'Zobrazí na webovej stránke',
-		'shift_for_all_read' => '+ <code>shift</code> na označenie všetkých článkov ako prečítaných',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> na označenie všetkých článkov ako prečítaných',	// TODO - Translation
 		'skip_next_article' => 'Prejde na ďalší bez otvorenia',
 		'skip_previous_article' => 'Prejde na predošlý bez otvorenia',
 		'title' => 'Skratky',

+ 2 - 2
app/i18n/tr/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => 'Favori olarak işaretle',
 		'mark_read' => 'Okundu olarak işaretle',
 		'navigation' => 'Genel eylemler',
-		'navigation_help' => '"Shift" tuşu ile kısayollar akışlar için geçerli olur.<br/>"Alt" tuşu ile kısayollar kategoriler için geçerli olur.',
+		'navigation_help' => '<kbd>⇧ Shift</kbd> tuşu ile kısayollar akışlar için geçerli olur.<br/><kbd>Alt ⎇</kbd> tuşu ile kısayollar kategoriler için geçerli olur.',
 		'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.',	// TODO - Translation
 		'next_article' => 'Sonraki makaleye geç',
 		'normal_view' => 'Switch to normal view',	// TODO - Translation
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => 'Switch to reading view',	// TODO - Translation
 		'rss_view' => 'Open RSS view in a new tab',	// TODO - Translation
 		'see_on_website' => 'Orijinal sitede göster',
-		'shift_for_all_read' => '+ <code>shift</code> tuşu ile tüm makaleler okundu olarak işaretlenir',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> tuşu ile tüm makaleler okundu olarak işaretlenir',	// TODO - Translation
 		'skip_next_article' => 'Focus next without opening',	// TODO - Translation
 		'skip_previous_article' => 'Focus previous without opening',	// TODO - Translation
 		'title' => 'Kısayollar',

+ 2 - 2
app/i18n/zh-cn/conf.php

@@ -171,7 +171,7 @@ return array(
 		'mark_favorite' => '加入收藏',
 		'mark_read' => '设为已读',
 		'navigation' => '浏览',
-		'navigation_help' => '组合 "Shift" 键,浏览快捷键将生效于订阅源。<br/>组合 "Alt" 键,浏览快捷键将生效于分类。',
+		'navigation_help' => '组合 <kbd>⇧ Shift</kbd> 键,浏览快捷键将生效于订阅源。<br/>组合 <kbd>Alt ⎇</kbd> 键,浏览快捷键将生效于分类。',
 		'navigation_no_mod_help' => '以下快捷键不支持组合键(Shift 或 Alt)',
 		'next_article' => '打开下一篇文章',
 		'normal_view' => '切换到普通视图',
@@ -180,7 +180,7 @@ return array(
 		'reading_view' => '切换到阅读视图',
 		'rss_view' => '在新标签中打开 RSS 视图',
 		'see_on_website' => '在原网站中查看',
-		'shift_for_all_read' => '+ <code>shift</code> 可以将全部文章设为已读',
+		'shift_for_all_read' => '+ <kbd>⇧ Shift</kbd> to mark previous articles as read<br />+ <kbd>Alt ⎇</kbd> 可以将全部文章设为已读',	// TODO - Translation
 		'skip_next_article' => '跳转到下一篇文章而不打开',
 		'skip_previous_article' => '跳转到上一篇文章而不打开',
 		'title' => '快捷键',

+ 3 - 1
app/views/configure/shortcut.phtml

@@ -98,13 +98,15 @@
 		<legend><?= _t('conf.shortcut.article_action') ?></legend>
 
 		<div class="form-group">
+			<p class="alert alert-warn"><?= _t('conf.shortcut.shift_for_all_read') ?></p>
 			<label class="group-name" for="mark_read"><?= _t('conf.shortcut.mark_read') ?></label>
 			<div class="group-controls">
 				<input type="text" id="mark_read" name="shortcuts[mark_read]" list="keys" value="<?= $s['mark_read'] ?>" data-leave-validation="<?= $s['mark_read'] ?>"/>
-				<?= _t('conf.shortcut.shift_for_all_read') ?>
 			</div>
 		</div>
 
+		<p class="alert alert-warn"><?= _t('conf.shortcut.navigation_no_mod_help') ?></p>
+
 		<div class="form-group">
 			<label class="group-name" for="mark_favorite"><?= _t('conf.shortcut.mark_favorite') ?></label>
 			<div class="group-controls">

+ 9 - 2
p/scripts/main.js

@@ -298,6 +298,13 @@ function mark_read(div, only_not_read, asBatch) {
 	}
 }
 
+function mark_previous_read(div) {
+	while (div) {
+		mark_read(div, true, true);
+		div = div.previousElementSibling;
+	}
+}
+
 function mark_favorite(div) {
 	if (!div) {
 		return false;
@@ -786,9 +793,9 @@ function init_shortcuts() {
 			}
 			if (k === s.mark_read) {
 				if (ev.altKey) {
-					return true;
-				} else if (ev.shiftKey) {	// Mark everything as read
 					document.querySelector('.nav_menu .read_all').click();
+				} else if (ev.shiftKey) {
+					mark_previous_read(document.querySelector('.flux.current'));
 				} else {	// Toggle the read state
 					mark_read(document.querySelector('.flux.current'), false, false);
 				}

+ 10 - 0
p/themes/Alternative-Dark/template.css

@@ -66,6 +66,16 @@ sup {
 	vertical-align: baseline;
 }
 
+kbd {
+	background-color: #eee;
+	padding: 2px 4px;
+	display: inline-block;
+	color: #333;
+	border: 1px solid #b4b4b4;
+	border-radius: 3px;
+	white-space: nowrap;
+}
+
 /*=== Images */
 img {
 	max-width: 100%;

+ 10 - 0
p/themes/base-theme/template.css

@@ -66,6 +66,16 @@ sup {
 	vertical-align: baseline;
 }
 
+kbd {
+	background-color: #eee;
+	padding: 2px 4px;
+	display: inline-block;
+	color: #333;
+	border: 1px solid #b4b4b4;
+	border-radius: 3px;
+	white-space: nowrap;
+}
+
 /*=== Images */
 img {
 	max-width: 100%;

+ 10 - 0
p/themes/base-theme/template.rtl.css

@@ -66,6 +66,16 @@ sup {
 	vertical-align: baseline;
 }
 
+kbd {
+	background-color: #eee;
+	padding: 2px 4px;
+	display: inline-block;
+	color: #333;
+	border: 1px solid #b4b4b4;
+	border-radius: 3px;
+	white-space: nowrap;
+}
+
 /*=== Images */
 img {
 	max-width: 100%;