1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge pull request #6254 from thornbill/dashboard-help

Move dashboard help links to header icon
This commit is contained in:
Bill Thornton 2024-11-21 16:04:43 -05:00 committed by GitHub
commit bc4d6c95d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 102 additions and 56 deletions

View file

@ -16,6 +16,7 @@ import { useLocale } from 'hooks/useLocale';
import AppTabs from './components/AppTabs'; import AppTabs from './components/AppTabs';
import AppDrawer from './components/drawer/AppDrawer'; import AppDrawer from './components/drawer/AppDrawer';
import HelpButton from './components/toolbar/HelpButton';
import { DASHBOARD_APP_PATHS } from './routes/routes'; import { DASHBOARD_APP_PATHS } from './routes/routes';
import './AppOverrides.scss'; import './AppOverrides.scss';
@ -68,6 +69,9 @@ export const Component: FC = () => {
isDrawerAvailable={!isMediumScreen && isDrawerAvailable} isDrawerAvailable={!isMediumScreen && isDrawerAvailable}
isDrawerOpen={isDrawerOpen} isDrawerOpen={isDrawerOpen}
onDrawerButtonClick={onToggleDrawer} onDrawerButtonClick={onToggleDrawer}
buttons={
<HelpButton />
}
> >
<AppTabs isDrawerOpen={isDrawerOpen} /> <AppTabs isDrawerOpen={isDrawerOpen} />
</AppToolbar> </AppToolbar>

View file

@ -0,0 +1,36 @@
import HelpOutline from '@mui/icons-material/HelpOutline';
import IconButton from '@mui/material/IconButton/IconButton';
import Tooltip from '@mui/material/Tooltip/Tooltip';
import React from 'react';
import { Route, Routes } from 'react-router-dom';
import { HelpLinks } from 'apps/dashboard/constants/helpLinks';
import globalize from 'lib/globalize';
const HelpButton = () => (
<Routes>
{
HelpLinks.map(({ paths, url }) => paths.map(path => (
<Route
key={[url, path].join('-')}
path={path}
element={
<Tooltip title={globalize.translate('Help')}>
<IconButton
href={url}
rel='noopener noreferrer'
target='_blank'
size='large'
color='inherit'
>
<HelpOutline />
</IconButton>
</Tooltip>
}
/>
))).flat()
}
</Routes>
);
export default HelpButton;

View file

@ -0,0 +1,51 @@
export const HelpLinks = [
{
paths: ['/dashboard/devices'],
url: 'https://jellyfin.org/docs/general/server/devices'
}, {
paths: ['/dashboard/libraries'],
url: 'https://jellyfin.org/docs/general/server/libraries'
}, {
paths: [
'/dashboard/livetv',
'/dashboard/livetv/tuner',
'/dashboard/recordings'
],
url: 'https://jellyfin.org/docs/general/server/live-tv/'
}, {
paths: ['/dashboard/livetv/guide'],
url: 'https://jellyfin.org/docs/general/server/live-tv/setup-guide#adding-guide-data'
}, {
paths: ['/dashboard/networking'],
url: 'https://jellyfin.org/docs/general/networking/'
}, {
paths: ['/dashboard/playback/transcoding'],
url: 'https://jellyfin.org/docs/general/server/transcoding'
}, {
paths: [
'/dashboard/plugins',
'/dashboard/plugins/catalog'
],
url: 'https://jellyfin.org/docs/general/server/plugins/'
}, {
paths: ['/dashboard/plugins/repositories'],
url: 'https://jellyfin.org/docs/general/server/plugins/#repositories'
}, {
paths: ['/dashboard/settings'],
url: 'https://jellyfin.org/docs/general/server/settings'
}, {
paths: ['/dashboard/tasks'],
url: 'https://jellyfin.org/docs/general/server/tasks'
}, {
paths: ['/dashboard/users'],
url: 'https://jellyfin.org/docs/general/server/users/adding-managing-users'
}, {
paths: [
'/dashboard/users/access',
'/dashboard/users/parentalcontrol',
'/dashboard/users/password',
'/dashboard/users/profile'
],
url: 'https://jellyfin.org/docs/general/server/users/'
}
];

View file

@ -150,7 +150,6 @@ const PlaybackTrickplay: FC = () => {
<div className='verticalSection'> <div className='verticalSection'>
<SectionTitleContainer <SectionTitleContainer
title={globalize.translate('Trickplay')} title={globalize.translate('Trickplay')}
isLinkVisible={false}
/> />
</div> </div>

View file

@ -247,7 +247,6 @@ const UserLibraryAccess = () => {
<div className='verticalSection'> <div className='verticalSection'>
<SectionTitleContainer <SectionTitleContainer
title={userName} title={userName}
url='https://jellyfin.org/docs/general/server/users/'
/> />
</div> </div>
<SectionTabs activeTab='userlibraryaccess'/> <SectionTabs activeTab='userlibraryaccess'/>

View file

@ -188,7 +188,6 @@ const UserNew = () => {
<div className='verticalSection'> <div className='verticalSection'>
<SectionTitleContainer <SectionTitleContainer
title={globalize.translate('HeaderAddUser')} title={globalize.translate('HeaderAddUser')}
url='https://jellyfin.org/docs/general/server/users/'
/> />
</div> </div>

View file

@ -170,7 +170,6 @@ const UserProfiles = () => {
btnClassName='fab submit sectionTitleButton' btnClassName='fab submit sectionTitleButton'
btnTitle='ButtonAddUser' btnTitle='ButtonAddUser'
btnIcon='add' btnIcon='add'
url='https://jellyfin.org/docs/general/server/users/adding-managing-users'
/> />
</div> </div>

View file

@ -362,7 +362,6 @@ const UserParentalControl = () => {
<div className='verticalSection'> <div className='verticalSection'>
<SectionTitleContainer <SectionTitleContainer
title={userName} title={userName}
url='https://jellyfin.org/docs/general/server/users/'
/> />
</div> </div>
<SectionTabs activeTab='userparentalcontrol'/> <SectionTabs activeTab='userparentalcontrol'/>
@ -406,7 +405,6 @@ const UserParentalControl = () => {
btnClassName='fab submit sectionTitleButton' btnClassName='fab submit sectionTitleButton'
btnTitle='Add' btnTitle='Add'
btnIcon='add' btnIcon='add'
isLinkVisible={false}
/> />
<div className='fieldDescription'> <div className='fieldDescription'>
{globalize.translate('AllowContentWithTagsHelp')} {globalize.translate('AllowContentWithTagsHelp')}
@ -431,7 +429,6 @@ const UserParentalControl = () => {
btnClassName='fab submit sectionTitleButton' btnClassName='fab submit sectionTitleButton'
btnTitle='Add' btnTitle='Add'
btnIcon='add' btnIcon='add'
isLinkVisible={false}
/> />
<div className='fieldDescription'> <div className='fieldDescription'>
{globalize.translate('BlockContentWithTagsHelp')} {globalize.translate('BlockContentWithTagsHelp')}
@ -455,7 +452,6 @@ const UserParentalControl = () => {
btnClassName='fab submit sectionTitleButton' btnClassName='fab submit sectionTitleButton'
btnTitle='Add' btnTitle='Add'
btnIcon='add' btnIcon='add'
isLinkVisible={false}
/> />
<p>{globalize.translate('HeaderAccessScheduleHelp')}</p> <p>{globalize.translate('HeaderAccessScheduleHelp')}</p>
<div className='accessScheduleList paperList'> <div className='accessScheduleList paperList'>

View file

@ -42,7 +42,6 @@ const UserPassword = () => {
<div className='verticalSection'> <div className='verticalSection'>
<SectionTitleContainer <SectionTitleContainer
title={userName} title={userName}
url='https://jellyfin.org/docs/general/server/users/'
/> />
</div> </div>
<SectionTabs activeTab='userpassword'/> <SectionTabs activeTab='userpassword'/>

View file

@ -290,7 +290,6 @@ const UserEdit = () => {
<div className='verticalSection'> <div className='verticalSection'>
<SectionTitleContainer <SectionTitleContainer
title={userDto?.Name || ''} title={userDto?.Name || ''}
url='https://jellyfin.org/docs/general/server/users/'
/> />
</div> </div>

View file

@ -1,7 +1,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h1 class="sectionTitle">Schedules Direct</h1> <h1 class="sectionTitle">Schedules Direct</h1>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/live-tv/setup-guide#adding-guide-data">${Help}</a>
</div> </div>
<p class="createAccountHelp"></p> <p class="createAccountHelp"></p>
</div> </div>

View file

@ -1,7 +1,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h1 class="sectionTitle">Xml TV</h1> <h1 class="sectionTitle">Xml TV</h1>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/live-tv/setup-guide#adding-guide-data">${Help}</a>
</div> </div>
</div> </div>

View file

@ -5,7 +5,6 @@
<div class="verticalSection verticalSection-extrabottompadding"> <div class="verticalSection verticalSection-extrabottompadding">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle reportedName"></h2> <h2 class="sectionTitle reportedName"></h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/devices">${Help}</a>
</div> </div>
<div class="inputContainer"> <div class="inputContainer">

View file

@ -4,8 +4,15 @@
<div class="verticalSection verticalSection"> <div class="verticalSection verticalSection">
<div class="sectionTitleContainer sectionTitleContainer-cards flex align-items-center"> <div class="sectionTitleContainer sectionTitleContainer-cards flex align-items-center">
<h2 class="sectionTitle sectionTitle-cards">${HeaderDevices}</h2> <h2 class="sectionTitle sectionTitle-cards">${HeaderDevices}</h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/devices">${Help}</a> <button
<button id="deviceDeleteAll" is="emby-button" type="button" class="raised button-alt headerHelpButton">${DeleteAll}</button> id="deviceDeleteAll"
is="emby-button"
type="button"
class="raised button-alt"
style="margin-left: 1.25em !important; padding-bottom: 0.4em !important; padding-top: 0.4em !important;"
>
${DeleteAll}
</button>
</div> </div>
</div> </div>
<div is="emby-itemscontainer" class="devicesList vertical-wrap" data-multiselect="false"></div> <div is="emby-itemscontainer" class="devicesList vertical-wrap" data-multiselect="false"></div>

View file

@ -5,7 +5,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle">${Transcoding}</h2> <h2 class="sectionTitle">${Transcoding}</h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/transcoding">${Help}</a>
</div> </div>
</div> </div>

View file

@ -5,7 +5,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle">${Settings}</h2> <h2 class="sectionTitle">${Settings}</h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/settings">${Help}</a>
</div> </div>
</div> </div>

View file

@ -6,7 +6,6 @@
<span>${ButtonScanAllLibraries}</span> <span>${ButtonScanAllLibraries}</span>
</button> </button>
<progress max="100" min="0" style="display: inline-block; vertical-align: middle;" class="refreshProgress"></progress> <progress max="100" min="0" style="display: inline-block; vertical-align: middle;" class="refreshProgress"></progress>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt" target="_blank" href="https://jellyfin.org/docs/general/server/libraries">${Help}</a>
</div> </div>
<div id="divVirtualFolders"></div> <div id="divVirtualFolders"></div>

View file

@ -5,7 +5,6 @@
<div class="verticalSection verticalSection-extrabottompadding"> <div class="verticalSection verticalSection-extrabottompadding">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle">${TabNetworking}</h2> <h2 class="sectionTitle">${TabNetworking}</h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/networking/">${Help}</a>
</div> </div>
<fieldset class='verticalSection verticalSection-extrabottompadding'> <fieldset class='verticalSection verticalSection-extrabottompadding'>

View file

@ -6,9 +6,6 @@
<a is="emby-linkbutton" class="fab" href="#/dashboard/plugins/repositories" style="margin-left:1em;" title="${Settings}"> <a is="emby-linkbutton" class="fab" href="#/dashboard/plugins/repositories" style="margin-left:1em;" title="${Settings}">
<span class="material-icons settings" aria-hidden="true"></span> <span class="material-icons settings" aria-hidden="true"></span>
</a> </a>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/plugins/">
${Help}
</a>
</div> </div>
<div class="inputContainer"> <div class="inputContainer">
<input id="txtSearchPlugins" name="txtSearchPlugins" type="text" is="emby-input" label="${Search}" /> <input id="txtSearchPlugins" name="txtSearchPlugins" type="text" is="emby-input" label="${Search}" />

View file

@ -3,9 +3,6 @@
<div class="content-primary"> <div class="content-primary">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle">${TabMyPlugins}</h2> <h2 class="sectionTitle">${TabMyPlugins}</h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/plugins/">
${Help}
</a>
</div> </div>
<div class="inputContainer"> <div class="inputContainer">
<input id="txtSearchPlugins" name="txtSearchPlugins" type="text" is="emby-input" label="${Search}" /> <input id="txtSearchPlugins" name="txtSearchPlugins" type="text" is="emby-input" label="${Search}" />

View file

@ -6,9 +6,6 @@
<button is="emby-button" type="button" class="fab btnNewRepository submit" style="margin-left:1em;" title="${Add}"> <button is="emby-button" type="button" class="fab btnNewRepository submit" style="margin-left:1em;" title="${Add}">
<span class="material-icons add" aria-hidden="true"></span> <span class="material-icons add" aria-hidden="true"></span>
</button> </button>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/plugins/#repositories">
${Help}
</a>
</div> </div>
<div id="repositories"></div> <div id="repositories"></div>

View file

@ -4,7 +4,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle taskName"></h2> <h2 class="sectionTitle taskName"></h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/tasks">${Help}</a>
</div> </div>
<p id="pTaskDescription"></p> <p id="pTaskDescription"></p>
</div> </div>

View file

@ -33,8 +33,7 @@ function populateList(page, tasks) {
let currentCategory; let currentCategory;
let html = ''; let html = '';
for (let i = 0; i < tasks.length; i++) { for (const task of tasks) {
const task = tasks[i];
if (task.Category != currentCategory) { if (task.Category != currentCategory) {
currentCategory = task.Category; currentCategory = task.Category;
if (currentCategory) { if (currentCategory) {
@ -46,9 +45,6 @@ function populateList(page, tasks) {
html += '<h2 class="sectionTitle">'; html += '<h2 class="sectionTitle">';
html += currentCategory; html += currentCategory;
html += '</h2>'; html += '</h2>';
if (i === 0) {
html += '<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/tasks">' + globalize.translate('Help') + '</a>';
}
html += '</div>'; html += '</div>';
html += '<div class="paperList">'; html += '<div class="paperList">';
} }

View file

@ -4,7 +4,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h2 class="sectionTitle">${HeaderDVR}</h2> <h2 class="sectionTitle">${HeaderDVR}</h2>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/live-tv/">${Help}</a>
</div> </div>
</div> </div>

View file

@ -10,7 +10,6 @@
<button is="emby-button" type="button" class="fab btnAddDevice submit sectionTitleButton" style="margin-left:1em;" title="${Add}"> <button is="emby-button" type="button" class="fab btnAddDevice submit sectionTitleButton" style="margin-left:1em;" title="${Add}">
<span class="material-icons add" aria-hidden="true"></span> <span class="material-icons add" aria-hidden="true"></span>
</button> </button>
<a is="emby-linkbutton" rel="noopener noreferrer" style="margin-left:2em!important;" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/live-tv/">${Help}</a>
</div> </div>
<div class="devicesList itemsContainer vertical-wrap" data-hovermenu="false" data-multiselect="false" style="margin-top: .5em;"></div> <div class="devicesList itemsContainer vertical-wrap" data-hovermenu="false" data-multiselect="false" style="margin-top: .5em;"></div>
</div> </div>

View file

@ -5,7 +5,6 @@
<div class="verticalSection"> <div class="verticalSection">
<div class="sectionTitleContainer flex align-items-center"> <div class="sectionTitleContainer flex align-items-center">
<h1 class="sectionTitle">${HeaderLiveTvTunerSetup}</h1> <h1 class="sectionTitle">${HeaderLiveTvTunerSetup}</h1>
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://jellyfin.org/docs/general/server/live-tv/">${Help}</a>
</div> </div>
</div> </div>

View file

@ -1,7 +1,5 @@
import React, { FunctionComponent } from 'react'; import React, { FunctionComponent } from 'react';
import IconButtonElement from './IconButtonElement'; import IconButtonElement from './IconButtonElement';
import LinkButton from './emby-button/LinkButton';
import globalize from 'lib/globalize';
type IProps = { type IProps = {
SectionClassName?: string; SectionClassName?: string;
@ -11,10 +9,8 @@ type IProps = {
btnClassName?: string; btnClassName?: string;
btnTitle?: string; btnTitle?: string;
btnIcon?: string; btnIcon?: string;
isLinkVisible?: boolean;
url?: string;
}; };
const SectionTitleContainer: FunctionComponent<IProps> = ({ SectionClassName, title, isBtnVisible = false, btnId, btnClassName, btnTitle, btnIcon, isLinkVisible = true, url }: IProps) => { const SectionTitleContainer: FunctionComponent<IProps> = ({ SectionClassName, title, isBtnVisible = false, btnId, btnClassName, btnTitle, btnIcon }: IProps) => {
return ( return (
<div className={`${SectionClassName} sectionTitleContainer flex align-items-center`}> <div className={`${SectionClassName} sectionTitleContainer flex align-items-center`}>
<h2 className='sectionTitle'> <h2 className='sectionTitle'>
@ -29,14 +25,6 @@ const SectionTitleContainer: FunctionComponent<IProps> = ({ SectionClassName, ti
icon={btnIcon} icon={btnIcon}
/>} />}
{isLinkVisible && <LinkButton
className='raised button-alt headerHelpButton'
target='_blank'
rel='noopener noreferrer'
href={url}>
{globalize.translate('Help')}
</LinkButton>}
</div> </div>
); );
}; };

View file

@ -99,12 +99,6 @@ form {
} }
} }
.headerHelpButton {
margin-left: 1.25em !important;
padding-bottom: 0.4em !important;
padding-top: 0.4em !important;
}
.mediaInfoContent { .mediaInfoContent {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;