Add missing tooltips (#444)
This commit is contained in:
@@ -7,21 +7,26 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import FilterList from '@mui/icons-material/FilterList';
|
import FilterList from '@mui/icons-material/FilterList';
|
||||||
import { IconButton } from '@mui/material';
|
import { IconButton, Tooltip } from '@mui/material';
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
|
import { useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
|
||||||
import { LibraryOptionsPanel } from '@/components/library/LibraryOptionsPanel';
|
import { LibraryOptionsPanel } from '@/components/library/LibraryOptionsPanel';
|
||||||
|
|
||||||
export const LibraryToolbarMenu: React.FC = () => {
|
export const LibraryToolbarMenu: React.FC = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const { options } = useLibraryOptionsContext();
|
const { options } = useLibraryOptionsContext();
|
||||||
const active = options.downloaded != null || options.unread != null;
|
const active = options.downloaded != null || options.unread != null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Tooltip title={t('settings.title')}>
|
||||||
<IconButton onClick={() => setOpen(!open)} color={active ? 'warning' : 'default'}>
|
<IconButton onClick={() => setOpen(!open)} color={active ? 'warning' : 'default'}>
|
||||||
<FilterList />
|
<FilterList />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
<LibraryOptionsPanel open={open} onClose={() => setOpen(false)} />
|
<LibraryOptionsPanel open={open} onClose={() => setOpen(false)} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { useMemo } from 'react';
|
|||||||
import IconButton from '@mui/material/IconButton';
|
import IconButton from '@mui/material/IconButton';
|
||||||
import RefreshIcon from '@mui/icons-material/Refresh';
|
import RefreshIcon from '@mui/icons-material/Refresh';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { Tooltip } from '@mui/material';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast';
|
import { makeToast } from '@/components/util/Toast';
|
||||||
import { UpdaterSubscription } from '@/lib/graphql/generated/graphql.ts';
|
import { UpdaterSubscription } from '@/lib/graphql/generated/graphql.ts';
|
||||||
@@ -59,8 +60,10 @@ export function UpdateChecker({ handleFinishedUpdate }: { handleFinishedUpdate:
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Tooltip title={t('library.settings.global_update.title')}>
|
||||||
<IconButton onClick={onClick} disabled={loading}>
|
<IconButton onClick={onClick} disabled={loading}>
|
||||||
{loading ? <Progress progress={progress} /> : <RefreshIcon />}
|
{loading ? <Progress progress={progress} /> : <RefreshIcon />}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import DoneAll from '@mui/icons-material/DoneAll';
|
|||||||
import Download from '@mui/icons-material/Download';
|
import Download from '@mui/icons-material/Download';
|
||||||
import MoreVertIcon from '@mui/icons-material/MoreVert';
|
import MoreVertIcon from '@mui/icons-material/MoreVert';
|
||||||
import RemoveDone from '@mui/icons-material/RemoveDone';
|
import RemoveDone from '@mui/icons-material/RemoveDone';
|
||||||
import { CardActionArea, Checkbox, ListItemIcon, ListItemText, Stack } from '@mui/material';
|
import { CardActionArea, Checkbox, ListItemIcon, ListItemText, Stack, Tooltip } from '@mui/material';
|
||||||
import Card from '@mui/material/Card';
|
import Card from '@mui/material/Card';
|
||||||
import CardContent from '@mui/material/CardContent';
|
import CardContent from '@mui/material/CardContent';
|
||||||
import IconButton from '@mui/material/IconButton';
|
import IconButton from '@mui/material/IconButton';
|
||||||
@@ -150,11 +150,15 @@ export const ChapterCard: React.FC<IProps> = (props: IProps) => {
|
|||||||
{dc && <DownloadStateIndicator download={dc} />}
|
{dc && <DownloadStateIndicator download={dc} />}
|
||||||
|
|
||||||
{selected === null ? (
|
{selected === null ? (
|
||||||
|
<Tooltip title={t('global.button.options')}>
|
||||||
<IconButton aria-label="more" onClick={handleMenuClick} size="large">
|
<IconButton aria-label="more" onClick={handleMenuClick} size="large">
|
||||||
<MoreVertIcon />
|
<MoreVertIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
) : (
|
) : (
|
||||||
|
<Tooltip title={t(selected ? 'global.button.deselect' : 'global.button.select')}>
|
||||||
<Checkbox checked={selected} />
|
<Checkbox checked={selected} />
|
||||||
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</CardActionArea>
|
</CardActionArea>
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import FilterList from '@mui/icons-material/FilterList';
|
import FilterList from '@mui/icons-material/FilterList';
|
||||||
import { IconButton } from '@mui/material';
|
import { IconButton, Tooltip } from '@mui/material';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ChapterListOptions, ChapterOptionsReducerAction } from '@/typings';
|
import { ChapterListOptions, ChapterOptionsReducerAction } from '@/typings';
|
||||||
import { ChapterOptions } from '@/components/manga/ChapterOptions';
|
import { ChapterOptions } from '@/components/manga/ChapterOptions';
|
||||||
import { isFilterActive } from '@/components/manga/util';
|
import { isFilterActive } from '@/components/manga/util';
|
||||||
@@ -19,14 +20,18 @@ interface IProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ChaptersToolbarMenu = ({ options, optionsDispatch }: IProps) => {
|
export const ChaptersToolbarMenu = ({ options, optionsDispatch }: IProps) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const [open, setOpen] = React.useState(false);
|
const [open, setOpen] = React.useState(false);
|
||||||
const isFiltered = isFilterActive(options);
|
const isFiltered = isFilterActive(options);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Tooltip title={t('settings.title')}>
|
||||||
<IconButton onClick={() => setOpen(true)}>
|
<IconButton onClick={() => setOpen(true)}>
|
||||||
<FilterList color={isFiltered ? 'warning' : undefined} />
|
<FilterList color={isFiltered ? 'warning' : undefined} />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
<ChapterOptions
|
<ChapterOptions
|
||||||
open={open}
|
open={open}
|
||||||
onClose={() => setOpen(false)}
|
onClose={() => setOpen(false)}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import { useLocation, useNavigate } from 'react-router-dom';
|
|||||||
import Slide from '@mui/material/Slide';
|
import Slide from '@mui/material/Slide';
|
||||||
import Fade from '@mui/material/Fade';
|
import Fade from '@mui/material/Fade';
|
||||||
import Zoom from '@mui/material/Zoom';
|
import Zoom from '@mui/material/Zoom';
|
||||||
import { Divider, FormControl, MenuItem, Select, styled } from '@mui/material';
|
import { Divider, FormControl, MenuItem, Select, styled, Tooltip } from '@mui/material';
|
||||||
import ListItem from '@mui/material/ListItem';
|
import ListItem from '@mui/material/ListItem';
|
||||||
import ListItemText from '@mui/material/ListItemText';
|
import ListItemText from '@mui/material/ListItemText';
|
||||||
import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';
|
import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';
|
||||||
@@ -208,6 +208,7 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
>
|
>
|
||||||
<header>
|
<header>
|
||||||
{!settings.staticNav && (
|
{!settings.staticNav && (
|
||||||
|
<Tooltip title={t('reader.button.close_menu')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
edge="start"
|
edge="start"
|
||||||
color="inherit"
|
color="inherit"
|
||||||
@@ -218,10 +219,12 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
>
|
>
|
||||||
<KeyboardArrowLeftIcon />
|
<KeyboardArrowLeftIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
<Typography variant="h1" textOverflow="ellipsis" overflow="hidden" sx={{ py: 1 }}>
|
<Typography variant="h1" textOverflow="ellipsis" overflow="hidden" sx={{ py: 1 }}>
|
||||||
{chapter.name}
|
{chapter.name}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
<Tooltip title={t('reader.button.exit')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
edge="start"
|
edge="start"
|
||||||
color="inherit"
|
color="inherit"
|
||||||
@@ -233,6 +236,7 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
>
|
>
|
||||||
<CloseIcon />
|
<CloseIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</header>
|
</header>
|
||||||
<ListItem
|
<ListItem
|
||||||
ContainerComponent="div"
|
ContainerComponent="div"
|
||||||
@@ -300,8 +304,8 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
<span>{t('reader.page_info.label.of_max_pages', { maxPages: chapter.pageCount })}</span>
|
<span>{t('reader.page_info.label.of_max_pages', { maxPages: chapter.pageCount })}</span>
|
||||||
</PageNavigation>
|
</PageNavigation>
|
||||||
<ChapterNavigation>
|
<ChapterNavigation>
|
||||||
|
<Tooltip title={t('reader.button.previous_chapter')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
title={t('reader.button.previous_chapter')}
|
|
||||||
sx={{ gridArea: 'pre' }}
|
sx={{ gridArea: 'pre' }}
|
||||||
disabled={disableChapterNavButtons || chapter.sourceOrder <= 1}
|
disabled={disableChapterNavButtons || chapter.sourceOrder <= 1}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
@@ -318,6 +322,7 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
>
|
>
|
||||||
<KeyboardArrowLeftIcon />
|
<KeyboardArrowLeftIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
<FormControl
|
<FormControl
|
||||||
sx={{ gridArea: 'current' }}
|
sx={{ gridArea: 'current' }}
|
||||||
size="small"
|
size="small"
|
||||||
@@ -346,8 +351,8 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
))}
|
))}
|
||||||
</Select>
|
</Select>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
<Tooltip title={t('reader.button.next_chapter')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
title={t('reader.button.next_chapter')}
|
|
||||||
sx={{ gridArea: 'next' }}
|
sx={{ gridArea: 'next' }}
|
||||||
disabled={
|
disabled={
|
||||||
disableChapterNavButtons ||
|
disableChapterNavButtons ||
|
||||||
@@ -368,12 +373,14 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
>
|
>
|
||||||
<KeyboardArrowRightIcon />
|
<KeyboardArrowRightIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</ChapterNavigation>
|
</ChapterNavigation>
|
||||||
</Navigation>
|
</Navigation>
|
||||||
</Root>
|
</Root>
|
||||||
</Slide>
|
</Slide>
|
||||||
<Zoom in={!drawerOpen}>
|
<Zoom in={!drawerOpen}>
|
||||||
<Fade in={!hideOpenButton}>
|
<Fade in={!hideOpenButton}>
|
||||||
|
<Tooltip title={t('reader.button.open_menu')}>
|
||||||
<OpenDrawerButton
|
<OpenDrawerButton
|
||||||
edge="start"
|
edge="start"
|
||||||
aria-label="menu"
|
aria-label="menu"
|
||||||
@@ -384,6 +391,7 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
>
|
>
|
||||||
<KeyboardArrowRightIcon />
|
<KeyboardArrowRightIcon />
|
||||||
</OpenDrawerButton>
|
</OpenDrawerButton>
|
||||||
|
</Tooltip>
|
||||||
</Fade>
|
</Fade>
|
||||||
</Zoom>
|
</Zoom>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import Dialog from '@mui/material/Dialog';
|
|||||||
import Switch from '@mui/material/Switch';
|
import Switch from '@mui/material/Switch';
|
||||||
import IconButton from '@mui/material/IconButton';
|
import IconButton from '@mui/material/IconButton';
|
||||||
import FilterListIcon from '@mui/icons-material/FilterList';
|
import FilterListIcon from '@mui/icons-material/FilterList';
|
||||||
import { List, ListItemSecondaryAction, ListItemText } from '@mui/material';
|
import { List, ListItemSecondaryAction, ListItemText, Tooltip } from '@mui/material';
|
||||||
import ListItem from '@mui/material/ListItem';
|
import ListItem from '@mui/material/ListItem';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { cloneObject } from '@/util/cloneObject';
|
import { cloneObject } from '@/util/cloneObject';
|
||||||
@@ -70,6 +70,7 @@ export function LangSelect(props: IProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Tooltip title={t('settings.title')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => setOpen(true)}
|
onClick={() => setOpen(true)}
|
||||||
aria-label="display more actions"
|
aria-label="display more actions"
|
||||||
@@ -79,6 +80,7 @@ export function LangSelect(props: IProps) {
|
|||||||
>
|
>
|
||||||
<FilterListIcon />
|
<FilterListIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
<Dialog
|
<Dialog
|
||||||
sx={{
|
sx={{
|
||||||
'.MuiDialog-paper': {
|
'.MuiDialog-paper': {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { IconButton, Menu, MenuItem, FormControlLabel, Radio } from '@mui/material';
|
import { IconButton, Menu, MenuItem, FormControlLabel, Radio, Tooltip } from '@mui/material';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ViewModuleIcon from '@mui/icons-material/ViewModule';
|
import ViewModuleIcon from '@mui/icons-material/ViewModule';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
@@ -38,6 +38,7 @@ export function SourceGridLayout() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Tooltip title={t('global.label.display')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
size="small"
|
size="small"
|
||||||
@@ -48,6 +49,7 @@ export function SourceGridLayout() {
|
|||||||
>
|
>
|
||||||
<ViewModuleIcon />
|
<ViewModuleIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
<Menu
|
<Menu
|
||||||
id="basic-menu"
|
id="basic-menu"
|
||||||
anchorEl={anchorEl}
|
anchorEl={anchorEl}
|
||||||
|
|||||||
@@ -8,9 +8,10 @@
|
|||||||
|
|
||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import SearchIcon from '@mui/icons-material/Search';
|
import SearchIcon from '@mui/icons-material/Search';
|
||||||
import { IconButton, Input } from '@mui/material';
|
import { IconButton, Input, Tooltip } from '@mui/material';
|
||||||
import CancelIcon from '@mui/icons-material/Cancel';
|
import CancelIcon from '@mui/icons-material/Cancel';
|
||||||
import { useQueryParam, StringParam } from 'use-query-params';
|
import { useQueryParam, StringParam } from 'use-query-params';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
autoOpen?: boolean;
|
autoOpen?: boolean;
|
||||||
@@ -21,6 +22,8 @@ const defaultProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const AppbarSearch: React.FunctionComponent<IProps> = (props) => {
|
export const AppbarSearch: React.FunctionComponent<IProps> = (props) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const { autoOpen } = props;
|
const { autoOpen } = props;
|
||||||
const [query, setQuery] = useQueryParam('query', StringParam);
|
const [query, setQuery] = useQueryParam('query', StringParam);
|
||||||
const [searchOpen, setSearchOpen] = useState(!!query);
|
const [searchOpen, setSearchOpen] = useState(!!query);
|
||||||
@@ -83,9 +86,11 @@ export const AppbarSearch: React.FunctionComponent<IProps> = (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Tooltip title={t('search.title.search')}>
|
||||||
<IconButton onClick={openSearch}>
|
<IconButton onClick={openSearch}>
|
||||||
<SearchIcon />
|
<SearchIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -192,6 +192,7 @@
|
|||||||
"action": {
|
"action": {
|
||||||
"label": {
|
"label": {
|
||||||
"install": "Install",
|
"install": "Install",
|
||||||
|
"install_external": "Install external extension",
|
||||||
"uninstall": "Uninstall",
|
"uninstall": "Uninstall",
|
||||||
"update": "Update"
|
"update": "Update"
|
||||||
}
|
}
|
||||||
@@ -222,17 +223,22 @@
|
|||||||
"browse": "Browse",
|
"browse": "Browse",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"clear": "Clear",
|
"clear": "Clear",
|
||||||
|
"deselect": "Deselect",
|
||||||
|
"edit": "Edit",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"latest": "Latest",
|
"latest": "Latest",
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"open_site": "Open Site",
|
"open_site": "Open Site",
|
||||||
|
"options": "Options",
|
||||||
"popular": "Popular",
|
"popular": "Popular",
|
||||||
"reset": "Reset",
|
"reset": "Reset",
|
||||||
"reset_to_default": "Reset to Default",
|
"reset_to_default": "Reset to Default",
|
||||||
"resume": "Resume",
|
"resume": "Resume",
|
||||||
|
"select": "Select",
|
||||||
"select_all": "Select all",
|
"select_all": "Select all",
|
||||||
"set": "Set",
|
"set": "Set",
|
||||||
"start": "Start",
|
"start": "Start",
|
||||||
|
"stop": "Stop",
|
||||||
"submit": "Submit"
|
"submit": "Submit"
|
||||||
},
|
},
|
||||||
"date": {
|
"date": {
|
||||||
@@ -399,7 +405,10 @@
|
|||||||
},
|
},
|
||||||
"reader": {
|
"reader": {
|
||||||
"button": {
|
"button": {
|
||||||
|
"close_menu": "Close menu",
|
||||||
|
"exit": "Exit reader",
|
||||||
"next_chapter": "Next Chapter",
|
"next_chapter": "Next Chapter",
|
||||||
|
"open_menu": "Open menu",
|
||||||
"previous_chapter": "Previous Chapter"
|
"previous_chapter": "Previous Chapter"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import DeleteIcon from '@mui/icons-material/Delete';
|
|||||||
import DragHandle from '@mui/icons-material/DragHandle';
|
import DragHandle from '@mui/icons-material/DragHandle';
|
||||||
import PauseIcon from '@mui/icons-material/Pause';
|
import PauseIcon from '@mui/icons-material/Pause';
|
||||||
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
|
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
|
||||||
import { Card, CardActionArea, Stack, Box } from '@mui/material';
|
import { Card, CardActionArea, Stack, Box, Tooltip } from '@mui/material';
|
||||||
import IconButton from '@mui/material/IconButton';
|
import IconButton from '@mui/material/IconButton';
|
||||||
import React, { useContext, useEffect } from 'react';
|
import React, { useContext, useEffect } from 'react';
|
||||||
import { DragDropContext, Draggable } from 'react-beautiful-dnd';
|
import { DragDropContext, Draggable } from 'react-beautiful-dnd';
|
||||||
@@ -86,9 +86,11 @@ export const DownloadQueue: React.FC = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<NavbarToolbar>
|
<NavbarToolbar>
|
||||||
|
<Tooltip title={t(status === 'STOPPED' ? 'global.button.start' : 'global.button.stop')}>
|
||||||
<IconButton onClick={toggleQueueStatus} size="large">
|
<IconButton onClick={toggleQueueStatus} size="large">
|
||||||
{status === 'STOPPED' ? <PlayArrowIcon /> : <PauseIcon />}
|
{status === 'STOPPED' ? <PlayArrowIcon /> : <PauseIcon />}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</NavbarToolbar>
|
</NavbarToolbar>
|
||||||
<DragDropContext onDragEnd={onDragEnd}>
|
<DragDropContext onDragEnd={onDragEnd}>
|
||||||
<StrictModeDroppable droppableId="droppable">
|
<StrictModeDroppable droppableId="droppable">
|
||||||
@@ -131,6 +133,7 @@ export const DownloadQueue: React.FC = () => {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
<DownloadStateIndicator download={item} />
|
<DownloadStateIndicator download={item} />
|
||||||
|
<Tooltip title={t('chapter.action.download.delete.label.action')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -141,6 +144,7 @@ export const DownloadQueue: React.FC = () => {
|
|||||||
>
|
>
|
||||||
<DeleteIcon />
|
<DeleteIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</CardActionArea>
|
</CardActionArea>
|
||||||
</Card>
|
</Card>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import IconButton from '@mui/material/IconButton';
|
|||||||
import AddIcon from '@mui/icons-material/Add';
|
import AddIcon from '@mui/icons-material/Add';
|
||||||
import { StringParam, useQueryParam } from 'use-query-params';
|
import { StringParam, useQueryParam } from 'use-query-params';
|
||||||
import { Virtuoso } from 'react-virtuoso';
|
import { Virtuoso } from 'react-virtuoso';
|
||||||
import { Typography, useMediaQuery, useTheme } from '@mui/material';
|
import { Tooltip, Typography, useMediaQuery, useTheme } from '@mui/material';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { extensionDefaultLangs, DefaultLanguage, langSortCmp } from '@/util/language';
|
import { extensionDefaultLangs, DefaultLanguage, langSortCmp } from '@/util/language';
|
||||||
@@ -154,9 +154,12 @@ export function Extensions() {
|
|||||||
setAction(
|
setAction(
|
||||||
<>
|
<>
|
||||||
<AppbarSearch />
|
<AppbarSearch />
|
||||||
|
<Tooltip title={t('extension.action.label.install_external')}>
|
||||||
<IconButton onClick={() => inputRef.current?.click()} size="large">
|
<IconButton onClick={() => inputRef.current?.click()} size="large">
|
||||||
<AddIcon />
|
<AddIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
<LangSelect shownLangs={shownLangs} setShownLangs={setShownLangs} allLangs={allLangs} />
|
<LangSelect shownLangs={shownLangs} setShownLangs={setShownLangs} allLangs={allLangs} />
|
||||||
</>,
|
</>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import DialogContent from '@mui/material/DialogContent';
|
|||||||
import DialogContentText from '@mui/material/DialogContentText';
|
import DialogContentText from '@mui/material/DialogContentText';
|
||||||
import TextField from '@mui/material/TextField';
|
import TextField from '@mui/material/TextField';
|
||||||
import FavoriteIcon from '@mui/icons-material/Favorite';
|
import FavoriteIcon from '@mui/icons-material/Favorite';
|
||||||
import { Link, MenuItem, Select } from '@mui/material';
|
import { Link, MenuItem, Select, Tooltip } from '@mui/material';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import LanguageIcon from '@mui/icons-material/Language';
|
import LanguageIcon from '@mui/icons-material/Language';
|
||||||
import CollectionsOutlinedBookmarkIcon from '@mui/icons-material/CollectionsBookmarkOutlined';
|
import CollectionsOutlinedBookmarkIcon from '@mui/icons-material/CollectionsBookmarkOutlined';
|
||||||
@@ -194,6 +194,7 @@ export function Settings() {
|
|||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
<ListItemText primary={t('settings.about.label.server_address')} secondary={serverAddress} />
|
<ListItemText primary={t('settings.about.label.server_address')} secondary={serverAddress} />
|
||||||
<ListItemSecondaryAction>
|
<ListItemSecondaryAction>
|
||||||
|
<Tooltip title={t('global.button.edit')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleDialogOpen();
|
handleDialogOpen();
|
||||||
@@ -202,6 +203,7 @@ export function Settings() {
|
|||||||
>
|
>
|
||||||
<EditIcon />
|
<EditIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</ListItemSecondaryAction>
|
</ListItemSecondaryAction>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItemLink to="/settings/about">
|
<ListItemLink to="/settings/about">
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import SettingsIcon from '@mui/icons-material/Settings';
|
|||||||
import { useQueryParam, StringParam } from 'use-query-params';
|
import { useQueryParam, StringParam } from 'use-query-params';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import Link from '@mui/material/Link';
|
import Link from '@mui/material/Link';
|
||||||
import { Box, Button, styled, useTheme, useMediaQuery } from '@mui/material';
|
import { Box, Button, styled, useTheme, useMediaQuery, Tooltip } from '@mui/material';
|
||||||
import FavoriteIcon from '@mui/icons-material/Favorite';
|
import FavoriteIcon from '@mui/icons-material/Favorite';
|
||||||
import NewReleasesIcon from '@mui/icons-material/NewReleases';
|
import NewReleasesIcon from '@mui/icons-material/NewReleases';
|
||||||
import FilterListIcon from '@mui/icons-material/FilterList';
|
import FilterListIcon from '@mui/icons-material/FilterList';
|
||||||
@@ -310,6 +310,7 @@ export function SourceMangas() {
|
|||||||
<AppbarSearch />
|
<AppbarSearch />
|
||||||
<SourceGridLayout />
|
<SourceGridLayout />
|
||||||
{source?.isConfigurable && (
|
{source?.isConfigurable && (
|
||||||
|
<Tooltip title={t('settings.title')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => navigate(`/sources/${sourceId}/configure/`)}
|
onClick={() => navigate(`/sources/${sourceId}/configure/`)}
|
||||||
aria-label="display more actions"
|
aria-label="display more actions"
|
||||||
@@ -319,6 +320,7 @@ export function SourceMangas() {
|
|||||||
>
|
>
|
||||||
<SettingsIcon />
|
<SettingsIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
</>,
|
</>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Fragment, useContext, useEffect } from 'react';
|
import { Fragment, useContext, useEffect } from 'react';
|
||||||
import { IconButton } from '@mui/material';
|
import { IconButton, Tooltip } from '@mui/material';
|
||||||
import TravelExploreIcon from '@mui/icons-material/TravelExplore';
|
import TravelExploreIcon from '@mui/icons-material/TravelExplore';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
@@ -78,9 +78,11 @@ export function Sources() {
|
|||||||
setTitle(t('source.title'));
|
setTitle(t('source.title'));
|
||||||
setAction(
|
setAction(
|
||||||
<>
|
<>
|
||||||
|
<Tooltip title={t('search.title.global_search')}>
|
||||||
<IconButton onClick={() => navigate('/sources/all/search/')} size="large">
|
<IconButton onClick={() => navigate('/sources/all/search/')} size="large">
|
||||||
<TravelExploreIcon />
|
<TravelExploreIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
<LangSelect
|
<LangSelect
|
||||||
shownLangs={shownLangs}
|
shownLangs={shownLangs}
|
||||||
setShownLangs={setShownLangs}
|
setShownLangs={setShownLangs}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import DownloadIcon from '@mui/icons-material/Download';
|
import DownloadIcon from '@mui/icons-material/Download';
|
||||||
import { Box, CardActionArea, styled } from '@mui/material';
|
import { Box, CardActionArea, styled, Tooltip } from '@mui/material';
|
||||||
import Avatar from '@mui/material/Avatar';
|
import Avatar from '@mui/material/Avatar';
|
||||||
import Card from '@mui/material/Card';
|
import Card from '@mui/material/Card';
|
||||||
import CardContent from '@mui/material/CardContent';
|
import CardContent from '@mui/material/CardContent';
|
||||||
@@ -209,6 +209,7 @@ export const Updates: React.FC = () => {
|
|||||||
</Box>
|
</Box>
|
||||||
{download && <DownloadStateIndicator download={download} />}
|
{download && <DownloadStateIndicator download={download} />}
|
||||||
{download == null && !chapter.isDownloaded && (
|
{download == null && !chapter.isDownloaded && (
|
||||||
|
<Tooltip title={t('chapter.action.download.add.label.action')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -219,6 +220,7 @@ export const Updates: React.FC = () => {
|
|||||||
>
|
>
|
||||||
<DownloadIcon />
|
<DownloadIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</CardActionArea>
|
</CardActionArea>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { useMemo, useState, useContext, useEffect } from 'react';
|
import { useMemo, useState, useContext, useEffect } from 'react';
|
||||||
import { List, ListItem, ListItemText, ListItemIcon, IconButton } from '@mui/material';
|
import { List, ListItem, ListItemText, ListItemIcon, IconButton, Tooltip } from '@mui/material';
|
||||||
import { DragDropContext, Draggable, DropResult, DraggingStyle, NotDraggingStyle } from 'react-beautiful-dnd';
|
import { DragDropContext, Draggable, DropResult, DraggingStyle, NotDraggingStyle } from 'react-beautiful-dnd';
|
||||||
import DragHandleIcon from '@mui/icons-material/DragHandle';
|
import DragHandleIcon from '@mui/icons-material/DragHandle';
|
||||||
import EditIcon from '@mui/icons-material/Edit';
|
import EditIcon from '@mui/icons-material/Edit';
|
||||||
@@ -149,6 +149,7 @@ export function Categories() {
|
|||||||
<DragHandleIcon />
|
<DragHandleIcon />
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
<ListItemText primary={item.name} />
|
<ListItemText primary={item.name} />
|
||||||
|
<Tooltip title={t('global.button.edit')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
handleEditDialogOpen(index);
|
handleEditDialogOpen(index);
|
||||||
@@ -157,6 +158,8 @@ export function Categories() {
|
|||||||
>
|
>
|
||||||
<EditIcon />
|
<EditIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={t('chapter.action.download.delete.label.action')}>
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
deleteCategory(index);
|
deleteCategory(index);
|
||||||
@@ -165,6 +168,7 @@ export function Categories() {
|
|||||||
>
|
>
|
||||||
<DeleteIcon />
|
<DeleteIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
)}
|
)}
|
||||||
</Draggable>
|
</Draggable>
|
||||||
|
|||||||
Reference in New Issue
Block a user