Просмотр исходного кода

Shortcuts for adding labels (#7274)

* add shortcut in config

* open my labels menu with shortcut

* the first 9 items are selectable + input field

* i18n

* Update app/i18n/nl/conf.php

Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>

* index.menu.mylabels

* order fixed

---------

Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
maTh 1 год назад
Родитель
Сommit
a697ca54ad

+ 1 - 1
app/Models/Context.php

@@ -485,7 +485,7 @@ final class FreshRSS_Context {
 			case 'T':
 				$tagDAO = FreshRSS_Factory::createTagDao();
 				self::$current_get['tags'] = true;
-				self::$name = _t('index.menu.tags');
+				self::$name = _t('index.menu.mylabels');
 				self::$get_unread = $tagDAO->countNotRead();
 				break;
 			default:

+ 1 - 1
app/i18n/cs/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Označit kategorii jako přečtenou',
 		'mark_feed_read' => 'Označit kanál jako přečtený',
 		'mark_selection_unread' => 'Označit výběr jako nepřečtený',
+		'mylabels' => 'Mé popisky',
 		'newer_first' => 'Nejdříve novější',
 		'non-starred' => 'Zobrazit neoblíbené',
 		'normal_view' => 'Normální zobrazení',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Zobrazit oblíbené',
 		'stats' => 'Statistika',
 		'subscription' => 'Správa odběrů',
-		'tags' => 'Mé popisky',
 		'unread' => 'Zobrazit nepřečtené',
 	),
 	'share' => 'Sdílet',

+ 1 - 1
app/i18n/de/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Kategorie als gelesen markieren',
 		'mark_feed_read' => 'Feed als gelesen markieren',
 		'mark_selection_unread' => 'Auswahl als ungelesen markieren',
+		'mylabels' => 'Meine Labels',
 		'newer_first' => 'Neuere zuerst',
 		'non-starred' => 'Alle außer Favoriten zeigen',
 		'normal_view' => 'Normale Ansicht',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Nur Favoriten zeigen',
 		'stats' => 'Statistiken',
 		'subscription' => 'Abonnementverwaltung',
-		'tags' => 'Meine Labels',
 		'unread' => 'Nur ungelesene zeigen',
 	),
 	'share' => 'Teilen',

+ 1 - 1
app/i18n/el/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Mark category as read',	// TODO
 		'mark_feed_read' => 'Mark feed as read',	// TODO
 		'mark_selection_unread' => 'Mark selection as unread',	// TODO
+		'mylabels' => 'My labels',	// TODO
 		'newer_first' => 'Newer first',	// TODO
 		'non-starred' => 'Show non-favourites',	// TODO
 		'normal_view' => 'Normal view',	// TODO
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Show favourites',	// TODO
 		'stats' => 'Statistics',	// TODO
 		'subscription' => 'Subscription management',	// TODO
-		'tags' => 'My labels',	// TODO
 		'unread' => 'Show unread',	// TODO
 	),
 	'share' => 'Share',	// TODO

+ 1 - 1
app/i18n/en-us/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Mark category as read',	// IGNORE
 		'mark_feed_read' => 'Mark feed as read',	// IGNORE
 		'mark_selection_unread' => 'Mark selection as unread',	// IGNORE
+		'mylabels' => 'My labels',	// IGNORE
 		'newer_first' => 'Newer first',	// IGNORE
 		'non-starred' => 'Show non-favorites',
 		'normal_view' => 'Normal view',	// IGNORE
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Show favorites',
 		'stats' => 'Statistics',	// IGNORE
 		'subscription' => 'Subscription management',	// IGNORE
-		'tags' => 'My labels',	// IGNORE
 		'unread' => 'Show unread',	// IGNORE
 	),
 	'share' => 'Share',	// IGNORE

+ 1 - 1
app/i18n/en/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Mark category as read',
 		'mark_feed_read' => 'Mark feed as read',
 		'mark_selection_unread' => 'Mark selection as unread',
+		'mylabels' => 'My labels',
 		'newer_first' => 'Newer first',
 		'non-starred' => 'Show non-favourites',
 		'normal_view' => 'Normal view',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Show favourites',
 		'stats' => 'Statistics',
 		'subscription' => 'Subscription management',
-		'tags' => 'My labels',
 		'unread' => 'Show unread',
 	),
 	'share' => 'Share',

+ 1 - 1
app/i18n/es/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Marcar categoría como leída',
 		'mark_feed_read' => 'Marcar fuente como leída',
 		'mark_selection_unread' => 'Marcar la selección como no leída',
+		'mylabels' => 'Mis etiquetas',
 		'newer_first' => 'Nuevos primero',
 		'non-starred' => 'Mostrar todos menos los favoritos',
 		'normal_view' => 'Vista normal',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Mostrar solo los favoritos',
 		'stats' => 'Estadísticas',
 		'subscription' => 'Administración de suscripciones',
-		'tags' => 'Mis etiquetas',
 		'unread' => 'Mostrar solo no leídos',
 	),
 	'share' => 'Compartir',

+ 1 - 1
app/i18n/fa/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => ' دسته را به عنوان خوانده شده علامت گذاری کنید',
 		'mark_feed_read' => ' فید را به عنوان خوانده شده علامت گذاری کنید',
 		'mark_selection_unread' => ' انتخاب را به عنوان خوانده نشده علامت گذاری کنید',
+		'mylabels' => ' برچسب های من',
 		'newer_first' => ' ابتدا جدیدتر',
 		'non-starred' => ' موارد غیر مورد علاقه را نشان دهید',
 		'normal_view' => ' نمای عادی',
@@ -90,7 +91,6 @@ return array(
 		'starred' => ' نمایش موارد دلخواه',
 		'stats' => ' آمار',
 		'subscription' => ' مدیریت اشتراک',
-		'tags' => ' برچسب های من',
 		'unread' => ' نمایش خوانده نشده',
 	),
 	'share' => ' به اشتراک بگذارید',

+ 1 - 1
app/i18n/fi/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Merkitse luokka luetuksi',
 		'mark_feed_read' => 'Merkitse syöte luetuksi',
 		'mark_selection_unread' => 'Merkitse valitut lukemattomiksi',
+		'mylabels' => 'Omat tunnisteet',
 		'newer_first' => 'Uusin ensin',
 		'non-starred' => 'Näytä muut kuin suosikit',
 		'normal_view' => 'Tavallinen näkymä',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Näytä suosikit',
 		'stats' => 'Tilastot',
 		'subscription' => 'Tilausten hallinta',
-		'tags' => 'Omat tunnisteet',
 		'unread' => 'Näytä lukemattomat',
 	),
 	'share' => 'Jaa',

+ 1 - 1
app/i18n/fr/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Marquer la catégorie comme lue',
 		'mark_feed_read' => 'Marquer le flux comme lu',
 		'mark_selection_unread' => 'Marquer la sélection comme non-lue',
+		'mylabels' => 'Mes étiquettes',
 		'newer_first' => 'Plus récents en premier',
 		'non-starred' => 'Afficher les non-favoris',
 		'normal_view' => 'Vue normale',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Afficher les favoris',
 		'stats' => 'Statistiques',
 		'subscription' => 'Gestion des abonnements',
-		'tags' => 'Mes étiquettes',
 		'unread' => 'Afficher les non-lus',
 	),
 	'share' => 'Partager',

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

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'סימון קטגוריה כנקראה',
 		'mark_feed_read' => 'סימון הזנה כנקראה',
 		'mark_selection_unread' => 'Mark selection as unread',	// TODO
+		'mylabels' => 'My labels',	// TODO
 		'newer_first' => 'חדשים בראש',
 		'non-starred' => 'הצגת הכל פרט למועדפים',
 		'normal_view' => 'תצוגה רגילה',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'הצגת מועדפים בלבד',
 		'stats' => 'סטטיסטיקות',
 		'subscription' => 'ניהול הרשמות',
-		'tags' => 'My labels',	// TODO
 		'unread' => 'הצגת מאמרים שלא נקראו בלבד',
 	),
 	'share' => 'שיתוף',

+ 1 - 1
app/i18n/hu/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Kategória megjelölése olvasottként',
 		'mark_feed_read' => 'Hírforrás megjelölése olvasottként',
 		'mark_selection_unread' => 'Kijelöltek olvasatlanná tétele',
+		'mylabels' => 'Címkék',
 		'newer_first' => 'Újabbak elöl',
 		'non-starred' => 'Nem kedvencek megjelenítése',
 		'normal_view' => 'Normál nézet',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Kedvencek megjelenítése',
 		'stats' => 'Statisztika',
 		'subscription' => 'Hírforrások kezelése',
-		'tags' => 'Címkék',
 		'unread' => 'Olvasatlanok megjelenítése',
 	),
 	'share' => 'Megosztás',

+ 1 - 1
app/i18n/id/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Mark category as read',	// TODO
 		'mark_feed_read' => 'Mark feed as read',	// TODO
 		'mark_selection_unread' => 'Mark selection as unread',	// TODO
+		'mylabels' => 'My labels',	// TODO
 		'newer_first' => 'Newer first',	// TODO
 		'non-starred' => 'Show non-favorites',
 		'normal_view' => 'Normal view',	// TODO
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Show favorites',
 		'stats' => 'Statistics',	// TODO
 		'subscription' => 'Subscription management',	// TODO
-		'tags' => 'My labels',	// TODO
 		'unread' => 'Show unread',	// TODO
 	),
 	'share' => 'Share',	// TODO

+ 1 - 1
app/i18n/it/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Segna la categoria come letta',
 		'mark_feed_read' => 'Segna il feed come letto',
 		'mark_selection_unread' => 'Segna i selezionati come non letti',
+		'mylabels' => 'Le mie etichette',
 		'newer_first' => 'Mostra prima i recenti',
 		'non-starred' => 'Escludi preferiti',
 		'normal_view' => 'Vista elenco',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Mostra solo preferiti',
 		'stats' => 'Statistiche',
 		'subscription' => 'Gestione sottoscrizioni',
-		'tags' => 'Le mie etichette',
 		'unread' => 'Mostra solo non letti',
 	),
 	'share' => 'Condividi',

+ 1 - 1
app/i18n/ja/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'カテゴリを既読にする',
 		'mark_feed_read' => 'フィードを既読にする',
 		'mark_selection_unread' => '選択した記事を未読にする',
+		'mylabels' => 'ラベル',
 		'newer_first' => '最新の記事を先頭にする',
 		'non-starred' => 'お気に入りに登録されてない記事を表示する',
 		'normal_view' => 'ノーマルビュー',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'お気に入りを表示する',
 		'stats' => '統計',
 		'subscription' => '購読フィードの管理',
-		'tags' => 'ラベル',
 		'unread' => '未読の記事を表示する',
 	),
 	'share' => '共有',

+ 1 - 1
app/i18n/ko/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => '카테고리를 읽음으로 표시',
 		'mark_feed_read' => '피드를 읽음으로 표시',
 		'mark_selection_unread' => '선택된 글을 읽지 않음으로 표시',
+		'mylabels' => '내 라벨',
 		'newer_first' => '최근 글 먼저',
 		'non-starred' => '즐겨찾기를 제외하고 표시',
 		'normal_view' => '일반 모드',
@@ -90,7 +91,6 @@ return array(
 		'starred' => '즐겨찾기만 표시',
 		'stats' => '통계',
 		'subscription' => '구독 관리',
-		'tags' => '내 라벨',
 		'unread' => '읽지 않은 글만 표시',
 	),
 	'share' => '공유',

+ 1 - 1
app/i18n/lv/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Atzīmēt kategoriju kā izlasītu',
 		'mark_feed_read' => 'Atzīmēt barotni kā izlasītu',
 		'mark_selection_unread' => 'Atzīmēt izvēlni kā izlasītu',
+		'mylabels' => 'Manas birkas',
 		'newer_first' => 'Sākumā jaunākos',
 		'non-starred' => 'Rādīt neiecienītākos',
 		'normal_view' => 'Parastais skats',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Rādīt mīļākos',
 		'stats' => 'Statistika',
 		'subscription' => 'Abonementa pārvalde',
-		'tags' => 'Manas birkas',
 		'unread' => 'Rādīt neizlasītos',
 	),
 	'share' => 'Dalīties',

+ 1 - 1
app/i18n/nl/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Markeer categorie als gelezen',
 		'mark_feed_read' => 'Markeer feed als gelezen',
 		'mark_selection_unread' => 'Markeer selectie als ongelezen',
+		'mylabels' => 'Mijn labels',
 		'newer_first' => 'Nieuwste eerst',
 		'non-starred' => 'Laat alles zien behalve favorieten',
 		'normal_view' => 'Normale weergave',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Laat alleen favorieten zien',
 		'stats' => 'Statistieken',
 		'subscription' => 'Abonnementen beheer',
-		'tags' => 'Mijn labels',
 		'unread' => 'Laat alleen ongelezen zien',
 	),
 	'share' => 'Delen',

+ 1 - 1
app/i18n/oc/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Marcar la categoria coma legida',
 		'mark_feed_read' => 'Marcar lo flux coma legit',
 		'mark_selection_unread' => 'Marcar la seleccion coma pas legida',
+		'mylabels' => 'Mas etiquetas',
 		'newer_first' => 'Mai recents en primièr',
 		'non-starred' => 'Mostrar los pas favorits',
 		'normal_view' => 'Vista normala',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Mostrar los favorits',
 		'stats' => 'Estatisticas',
 		'subscription' => 'Gestion dels abonaments',
-		'tags' => 'Mas etiquetas',
 		'unread' => 'Mostar los pas legits',
 	),
 	'share' => 'Partejar',

+ 1 - 1
app/i18n/pl/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Oznacz kategorię jako przeczytaną',
 		'mark_feed_read' => 'Oznacz kanał jako przeczytany',
 		'mark_selection_unread' => 'Oznacz wiadomości jako nieprzeczytane',
+		'mylabels' => 'Własne etykiety',
 		'newer_first' => 'Najpierw najnowsze',
 		'non-starred' => 'Pokaż wiadomości, które nie są ulubione',
 		'normal_view' => 'Widok normalny',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Pokaż ulubione',
 		'stats' => 'Statystyki',
 		'subscription' => 'Zarządzanie subskrypcjami',
-		'tags' => 'Własne etykiety',
 		'unread' => 'Pokaż nieprzeczytane',
 	),
 	'share' => 'Podaj dalej',

+ 1 - 1
app/i18n/pt-br/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Marcar categoria como lida',
 		'mark_feed_read' => 'Marcar feed com lido',
 		'mark_selection_unread' => 'Marcar seleção como não lida',
+		'mylabels' => 'Minhas etiquetas',
 		'newer_first' => 'Novos primeiro',
 		'non-starred' => 'Mostrar todos, exceto favoritos',
 		'normal_view' => 'visualização normal',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Mostrar apenas os favoritos',
 		'stats' => 'Estatísticas',
 		'subscription' => 'Gerenciamento de inscrições',
-		'tags' => 'Minhas etiquetas',
 		'unread' => 'Mostrar apenas os não lidos',
 	),
 	'share' => 'Compartilhar',

+ 1 - 1
app/i18n/ru/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Отметить категорию прочитанной',
 		'mark_feed_read' => 'Отметить ленту прочитанной',
 		'mark_selection_unread' => 'Отметить выделение прочитанным',
+		'mylabels' => 'Мои метки',
 		'newer_first' => 'Сначала новые',
 		'non-starred' => 'Показать неизбранное',
 		'normal_view' => 'Обычный вид',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Показать избранное',
 		'stats' => 'Статистика',
 		'subscription' => 'Управление подписками',
-		'tags' => 'Мои метки',
 		'unread' => 'Показать непрочитанное',
 	),
 	'share' => 'Обмен',

+ 1 - 1
app/i18n/sk/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Označiť kategóriu ako prečítanú',
 		'mark_feed_read' => 'Označiť kanál ako prečítaný',
 		'mark_selection_unread' => 'Označiť označené ako prečítané',
+		'mylabels' => 'Moje nálepky',
 		'newer_first' => 'Novšie hore',
 		'non-starred' => 'Zobraziť všetko okrem obľúbených',
 		'normal_view' => 'Základné zobrazenie',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Zobraziť obľúbené',
 		'stats' => 'Štatistiky',
 		'subscription' => 'Správca odberov',
-		'tags' => 'Moje nálepky',
 		'unread' => 'Zobraziť neprečítané',
 	),
 	'share' => 'Zdieľať',

+ 1 - 1
app/i18n/tr/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => 'Kategoriyi okundu olarak işaretle',
 		'mark_feed_read' => 'Akışı okundu olarak işaretle',
 		'mark_selection_unread' => 'Seçilenleri okunmadı olarak işaretleMark selection as unread',
+		'mylabels' => 'Etiketlerim',
 		'newer_first' => 'Önce yeniler',
 		'non-starred' => 'Favori dışındakileri göster',
 		'normal_view' => 'Normal görünüm',
@@ -90,7 +91,6 @@ return array(
 		'starred' => 'Favorileri göster',
 		'stats' => 'İstatistikler',
 		'subscription' => 'Abonelik yönetimi',
-		'tags' => 'Etiketlerim',
 		'unread' => 'Okunmamışları göster',
 	),
 	'share' => 'Paylaş',

+ 1 - 1
app/i18n/zh-cn/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => '此分类设为已读',
 		'mark_feed_read' => '此订阅源设为已读',
 		'mark_selection_unread' => '选中设为已读',
+		'mylabels' => '我的标签',
 		'newer_first' => '由新至旧',
 		'non-starred' => '显示未收藏',
 		'normal_view' => '普通视图',
@@ -90,7 +91,6 @@ return array(
 		'starred' => '显示收藏',
 		'stats' => '统计',
 		'subscription' => '订阅管理',
-		'tags' => '我的标签',
 		'unread' => '显示未读',
 	),
 	'share' => '分享',

+ 1 - 1
app/i18n/zh-tw/index.php

@@ -66,6 +66,7 @@ return array(
 		'mark_cat_read' => '此分類設為已讀',
 		'mark_feed_read' => '此訂閱源設為已讀',
 		'mark_selection_unread' => '選中設為已讀',
+		'mylabels' => '我的標籤',
 		'newer_first' => '由新至舊',
 		'non-starred' => '顯示未收藏',
 		'normal_view' => '普通視圖',
@@ -90,7 +91,6 @@ return array(
 		'starred' => '顯示收藏',
 		'stats' => '統計',
 		'subscription' => '訂閱管理',
-		'tags' => '我的標籤',
 		'unread' => '顯示未讀',
 	),
 	'share' => '分享',

+ 1 - 1
app/layout/aside_feed.phtml

@@ -53,7 +53,7 @@
 		?>
 		<li id="tags" class="tree-folder category tags<?= $t_active ? ' active' : '' ?>" data-unread="<?= format_number($this->nbUnreadTags) ?>">
 			<a href="<?= _url('index', $actual_view, 'get', 'T') . $state_filter_manual ?>" class="tree-folder-title">
-				<button class="dropdown-toggle" title="<?= _t('sub.category.expand') ?>"><?= _i($t_show ? 'up' : 'down') ?></button><span class="title" title="<?= _t('sub.category.open') ?>" data-unread="<?= format_number($this->nbUnreadTags) ?>"><?= _t('index.menu.tags') ?></span>
+				<button class="dropdown-toggle" title="<?= _t('sub.category.expand') ?>"><?= _i($t_show ? 'up' : 'down') ?></button><span class="title" title="<?= _t('sub.category.open') ?>" data-unread="<?= format_number($this->nbUnreadTags) ?>"><?= _t('index.menu.mylabels') ?></span>
 			</a>
 			<ul class="tree-folder-items<?= $t_show ? ' active' : '' ?>">
 				<?php

+ 1 - 1
app/views/configure/display.phtml

@@ -188,7 +188,7 @@
 							<th> </th>
 							<th title="<?= _t('conf.shortcut.mark_read') ?>"><?= _i('read') ?></th>
 							<th title="<?= _t('conf.shortcut.mark_favorite') ?>"><?= _i('starred') ?></th>
-							<th title="<?= _t('index.menu.tags') ?>"><?= _i('label') ?></th>
+							<th title="<?= _t('index.menu.mylabels') ?>"><?= _i('label') ?></th>
 							<th title="<?= _t('conf.display.icon.related_tags') ?>"><?= _i('tag') ?></th>
 							<th title="<?= _t('conf.display.icon.sharing') ?>"><?= _i('share') ?></th>
 							<th><?= _t('conf.display.icon.summary') ?></th>

+ 8 - 0
app/views/configure/shortcut.phtml

@@ -158,6 +158,14 @@
 				</div>
 			</div>
 
+			<div class="form-group">
+				<label class="group-name" for="mylabels_shortcut"><?= _t('index.menu.mylabels') ?></label>
+				<div class="group-controls">
+					<input type="text" id="mylabels_shortcut" name="shortcuts[mylabels]" list="keys" value="<?= $s['mylabels'] ?>"
+						data-leave-validation="<?= $s['mylabels'] ?>"/>
+				</div>
+			</div>
+
 			<div class="form-group">
 				<label class="group-name" for="collapse_entry"><?= _t('conf.shortcut.collapse_article') ?></label>
 				<div class="group-controls">

+ 1 - 1
app/views/helpers/configure/query.phtml

@@ -126,7 +126,7 @@
 						<option value="a" <?= in_array($this->query->getGet(), ['', 'a'], true) ? 'selected="selected"' : '' ?>><?= _t('index.feed.title') ?></option>
 						<option value="i" <?= 'i' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('index.menu.important') ?></option>
 						<option value="s" <?= 's' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('index.feed.title_fav') ?></option>
-						<option value="T" <?= 'T' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('index.menu.tags') ?></option>
+						<option value="T" <?= 'T' === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= _t('index.menu.mylabels') ?></option>
 						<optgroup label="<?= _t('conf.query.filter.tags') ?>">
 							<?php foreach ($this->tags as $tag): ?>
 								<option value="t_<?= $tag->id() ?>" <?= "t_{$tag->id()}" === $this->query->getGet() ? 'selected="selected"' : '' ?>><?= $tag->name() ?></option>

+ 1 - 1
app/views/helpers/index/normal/entry_bottom.phtml

@@ -39,7 +39,7 @@
 		<div class="item-element dropdown dynamictags">
 			<div id="dropdown-labels-<?= $this->entry->id() ?>" class="dropdown-target"></div>
 			<a class="dropdown-toggle" href="#dropdown-labels-<?= $this->entry->id() ?>">
-				<?= _i('label') ?><span class="dropdown-label"><?= _t('index.menu.tags') ?></span>
+				<?= _i('label') ?><span class="dropdown-label"><?= _t('index.menu.mylabels') ?></span>
 			</a>
 		</div>
 	</li><?php

+ 1 - 1
app/views/helpers/index/normal/entry_header.phtml

@@ -72,7 +72,7 @@
 		<li class="item labels">
 			<div class="item-element dropdown dynamictags">
 				<div id="dropdown-labels2-<?= $this->entry->id() ?>" class="dropdown-target"></div>
-				<a class="dropdown-toggle" href="#dropdown-labels2-<?= $this->entry->id() ?>" title="<?= _t('index.menu.tags') ?>">
+				<a class="dropdown-toggle" href="#dropdown-labels2-<?= $this->entry->id() ?>" title="<?= _t('index.menu.mylabels') ?>">
 					<?= _i('label') ?>
 				</a>
 				<?php /* labels_article_template */ ?>

+ 1 - 0
app/views/helpers/javascript_vars.phtml

@@ -46,6 +46,7 @@ echo htmlspecialchars(json_encode([
 		'last_entry' => @$s['last_entry'],
 		'collapse_entry' => @$s['collapse_entry'],
 		'load_more' => @$s['load_more'],
+		'mylabels' => @$s['mylabels'],
 		'auto_share' => @$s['auto_share'],
 		'focus_search' => @$s['focus_search'],
 		'user_filter' => @$s['user_filter'],

+ 1 - 1
app/views/index/global.phtml

@@ -25,7 +25,7 @@
 	<div class="dropdown-menu">
 		<ul class="dropdown-menu-scrollable scrollbar-thin">
 			<li class="dropdown-header">
-				<?= _t('index.menu.tags') ?>
+				<?= _t('index.menu.mylabels') ?>
 				<?php if (FreshRSS_Auth::hasAccess()) { ?>
 					<a href="<?= _url('tag', 'index') ?>"><?= _i('configure') ?></a>
 				<?php } ?>

+ 1 - 1
app/views/index/normal.phtml

@@ -27,7 +27,7 @@ $today = @strtotime('today');
 	<div class="dropdown-menu">
 		<ul class="dropdown-menu-scrollable scrollbar-thin">
 			<li class="dropdown-header">
-				<?= _t('index.menu.tags') ?>
+				<?= _t('index.menu.mylabels') ?>
 				<?php if (FreshRSS_Auth::hasAccess()) { ?>
 					<a href="<?= _url('tag', 'index') ?>"><?= _i('configure') ?></a>
 				<?php } ?>

+ 1 - 0
config-user.default.php

@@ -84,6 +84,7 @@ return array (
 		'last_entry' => 'end',
 		'collapse_entry' => 'c',
 		'load_more' => 'm',
+		'mylabels' => 'l',
 		'auto_share' => 's',
 		'focus_search' => 'a',
 		'user_filter' => 'u',

+ 50 - 5
p/scripts/main.js

@@ -747,6 +747,41 @@ function show_share_menu(el) {
 	return true;
 }
 
+function mylabels(key) {
+	const mylabelsDropdown = document.querySelector('.flux.current.active .dropdown-target[id^="dropdown-labels"]');
+
+	if (!mylabelsDropdown) {
+		return;
+	}
+
+	if (typeof key === 'undefined') {
+		show_labels_menu(mylabelsDropdown);
+	}
+	// Display the mylabels div
+	location.hash = mylabelsDropdown.id;
+	// Force scrolling to the mylabels div
+	const scrollTop = needsScroll(mylabelsDropdown.closest('.horizontal-list'));
+	if (scrollTop !== 0) {
+		if (mylabelsDropdown.closest('.horizontal-list.flux_header')) {
+			mylabelsDropdown.nextElementSibling.nextElementSibling.scrollIntoView({ behavior: "smooth", block: "start" });
+		} else {
+			mylabelsDropdown.nextElementSibling.nextElementSibling.scrollIntoView({ behavior: "smooth", block: "end" });
+		}
+	}
+
+	key = parseInt(key);
+
+	if (key === 0) {
+		mylabelsDropdown.parentElement.querySelector('.dropdown-menu .item .newTag').focus();
+	} else {
+		const mylabelsCheckboxes = mylabelsDropdown.parentElement.querySelectorAll('.dropdown-menu .item .checkboxTag');
+
+		if (key <= mylabelsCheckboxes.length) {
+			mylabelsCheckboxes[key].click();
+		}
+	}
+}
+
 function auto_share(key) {
 	const share = document.querySelector('.flux.current.active .dropdown-target[id^="dropdown-share"]');
 	if (!share) {
@@ -987,11 +1022,19 @@ function init_shortcuts() {
 
 		if (location.hash.match(/^#dropdown-/)) {
 			const n = parseInt(k);
-			if (n) {
-				if (location.hash === '#dropdown-query') {
-					user_filter(n);
-				} else {
-					auto_share(n);
+			if (Number.isInteger(n)) {
+				switch (location.hash.substring(0, 15)) {
+					case '#dropdown-query':
+						user_filter(n);
+						break;
+					case '#dropdown-share':
+						auto_share(n);
+						break;
+					case '#dropdown-label':
+						mylabels(n);
+						break;
+					default:
+						return;
 				}
 				ev.preventDefault();
 				return;
@@ -1107,6 +1150,7 @@ function init_shortcuts() {
 		if (k === s.skip_next_entry) { next_entry(true); ev.preventDefault(); return; }
 		if (k === s.skip_prev_entry) { prev_entry(true); ev.preventDefault(); return; }
 		if (k === s.collapse_entry) { collapse_entry(); ev.preventDefault(); return; }
+		if (k === s.mylabels) { mylabels(); ev.preventDefault(); return; }
 		if (k === s.auto_share) { auto_share(); ev.preventDefault(); return; }
 		if (k === s.user_filter) { user_filter(); ev.preventDefault(); return; }
 		if (k === s.load_more) { load_more_posts(); ev.preventDefault(); return; }
@@ -1431,6 +1475,7 @@ function loadDynamicTags(div) {
 			const input_newTag = document.createElement('input');
 			input_newTag.setAttribute('type', 'text');
 			input_newTag.setAttribute('name', 'newTag');
+			input_newTag.setAttribute('class', 'newTag');
 			input_newTag.setAttribute('list', 'datalist-labels');
 			input_newTag.addEventListener('keydown', function (ev) { if (ev.key.toUpperCase() == 'ENTER') { this.parentNode.previousSibling.click(); } });