diff --git a/src/apps/dashboard/AppLayout.tsx b/src/apps/dashboard/AppLayout.tsx index 46191d3fee..16c81771cc 100644 --- a/src/apps/dashboard/AppLayout.tsx +++ b/src/apps/dashboard/AppLayout.tsx @@ -16,6 +16,7 @@ import { useLocale } from 'hooks/useLocale'; import AppTabs from './components/AppTabs'; import AppDrawer from './components/drawer/AppDrawer'; +import HelpButton from './components/toolbar/HelpButton'; import { DASHBOARD_APP_PATHS } from './routes/routes'; import './AppOverrides.scss'; @@ -68,6 +69,9 @@ export const Component: FC = () => { isDrawerAvailable={!isMediumScreen && isDrawerAvailable} isDrawerOpen={isDrawerOpen} onDrawerButtonClick={onToggleDrawer} + buttons={ + + } > diff --git a/src/apps/dashboard/components/toolbar/HelpButton.tsx b/src/apps/dashboard/components/toolbar/HelpButton.tsx new file mode 100644 index 0000000000..7a47ca9407 --- /dev/null +++ b/src/apps/dashboard/components/toolbar/HelpButton.tsx @@ -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 = () => ( + + { + HelpLinks.map(({ paths, url }) => paths.map(path => ( + + + + + + } + /> + ))).flat() + } + +); + +export default HelpButton; diff --git a/src/apps/dashboard/constants/helpLinks.ts b/src/apps/dashboard/constants/helpLinks.ts new file mode 100644 index 0000000000..450d8c5ff2 --- /dev/null +++ b/src/apps/dashboard/constants/helpLinks.ts @@ -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/' + } +]; diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx index 859bb94c92..442111145d 100644 --- a/src/apps/dashboard/routes/playback/trickplay.tsx +++ b/src/apps/dashboard/routes/playback/trickplay.tsx @@ -150,7 +150,6 @@ const PlaybackTrickplay: FC = () => {
diff --git a/src/apps/dashboard/routes/users/access.tsx b/src/apps/dashboard/routes/users/access.tsx index e55c94412a..f2394f9669 100644 --- a/src/apps/dashboard/routes/users/access.tsx +++ b/src/apps/dashboard/routes/users/access.tsx @@ -247,7 +247,6 @@ const UserLibraryAccess = () => {
diff --git a/src/apps/dashboard/routes/users/add.tsx b/src/apps/dashboard/routes/users/add.tsx index 920d38691f..e5d670c49a 100644 --- a/src/apps/dashboard/routes/users/add.tsx +++ b/src/apps/dashboard/routes/users/add.tsx @@ -188,7 +188,6 @@ const UserNew = () => {
diff --git a/src/apps/dashboard/routes/users/index.tsx b/src/apps/dashboard/routes/users/index.tsx index c1348714e3..e0b3f4d5dd 100644 --- a/src/apps/dashboard/routes/users/index.tsx +++ b/src/apps/dashboard/routes/users/index.tsx @@ -170,7 +170,6 @@ const UserProfiles = () => { btnClassName='fab submit sectionTitleButton' btnTitle='ButtonAddUser' btnIcon='add' - url='https://jellyfin.org/docs/general/server/users/adding-managing-users' /> diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx index 20e338b603..8af285d836 100644 --- a/src/apps/dashboard/routes/users/parentalcontrol.tsx +++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx @@ -362,7 +362,6 @@ const UserParentalControl = () => {
@@ -406,7 +405,6 @@ const UserParentalControl = () => { btnClassName='fab submit sectionTitleButton' btnTitle='Add' btnIcon='add' - isLinkVisible={false} />
{globalize.translate('AllowContentWithTagsHelp')} @@ -431,7 +429,6 @@ const UserParentalControl = () => { btnClassName='fab submit sectionTitleButton' btnTitle='Add' btnIcon='add' - isLinkVisible={false} />
{globalize.translate('BlockContentWithTagsHelp')} @@ -455,7 +452,6 @@ const UserParentalControl = () => { btnClassName='fab submit sectionTitleButton' btnTitle='Add' btnIcon='add' - isLinkVisible={false} />

{globalize.translate('HeaderAccessScheduleHelp')}

diff --git a/src/apps/dashboard/routes/users/password.tsx b/src/apps/dashboard/routes/users/password.tsx index 7aa6fbc0b7..41f1fb4529 100644 --- a/src/apps/dashboard/routes/users/password.tsx +++ b/src/apps/dashboard/routes/users/password.tsx @@ -42,7 +42,6 @@ const UserPassword = () => {
diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 8605feaf35..fa4b077845 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -290,7 +290,6 @@ const UserEdit = () => {
diff --git a/src/components/tvproviders/schedulesdirect.template.html b/src/components/tvproviders/schedulesdirect.template.html index 8e8a447e9b..bdcca34f21 100644 --- a/src/components/tvproviders/schedulesdirect.template.html +++ b/src/components/tvproviders/schedulesdirect.template.html @@ -1,7 +1,6 @@

Schedules Direct

- ${Help}

diff --git a/src/components/tvproviders/xmltv.template.html b/src/components/tvproviders/xmltv.template.html index 7fedce7033..8c24139b34 100644 --- a/src/components/tvproviders/xmltv.template.html +++ b/src/components/tvproviders/xmltv.template.html @@ -1,7 +1,6 @@

Xml TV

- ${Help}
diff --git a/src/controllers/dashboard/devices/device.html b/src/controllers/dashboard/devices/device.html index b9a6be2727..45dd733f72 100644 --- a/src/controllers/dashboard/devices/device.html +++ b/src/controllers/dashboard/devices/device.html @@ -5,7 +5,6 @@
diff --git a/src/controllers/dashboard/devices/devices.html b/src/controllers/dashboard/devices/devices.html index c5a4d732b5..3d8825a339 100644 --- a/src/controllers/dashboard/devices/devices.html +++ b/src/controllers/dashboard/devices/devices.html @@ -4,8 +4,15 @@

${HeaderDevices}

- ${Help} - +
diff --git a/src/controllers/dashboard/encodingsettings.html b/src/controllers/dashboard/encodingsettings.html index 9082831487..a94cd4129f 100644 --- a/src/controllers/dashboard/encodingsettings.html +++ b/src/controllers/dashboard/encodingsettings.html @@ -5,7 +5,6 @@

${Transcoding}

- ${Help}
diff --git a/src/controllers/dashboard/general.html b/src/controllers/dashboard/general.html index 7ab360fdc3..935490b32b 100644 --- a/src/controllers/dashboard/general.html +++ b/src/controllers/dashboard/general.html @@ -5,7 +5,6 @@

${Settings}

- ${Help}
diff --git a/src/controllers/dashboard/library.html b/src/controllers/dashboard/library.html index ba499185b3..77da0039b8 100644 --- a/src/controllers/dashboard/library.html +++ b/src/controllers/dashboard/library.html @@ -6,7 +6,6 @@ ${ButtonScanAllLibraries} - ${Help}
diff --git a/src/controllers/dashboard/networking.html b/src/controllers/dashboard/networking.html index fd9a910288..8204fab74b 100644 --- a/src/controllers/dashboard/networking.html +++ b/src/controllers/dashboard/networking.html @@ -5,7 +5,6 @@

${TabNetworking}

- ${Help}
diff --git a/src/controllers/dashboard/plugins/available/index.html b/src/controllers/dashboard/plugins/available/index.html index 4a9fca63e0..951e74fb93 100644 --- a/src/controllers/dashboard/plugins/available/index.html +++ b/src/controllers/dashboard/plugins/available/index.html @@ -6,9 +6,6 @@ - - ${Help} -
diff --git a/src/controllers/dashboard/plugins/installed/index.html b/src/controllers/dashboard/plugins/installed/index.html index 6f0d2c593c..b29fd6eee1 100644 --- a/src/controllers/dashboard/plugins/installed/index.html +++ b/src/controllers/dashboard/plugins/installed/index.html @@ -3,9 +3,6 @@

${TabMyPlugins}

- - ${Help} -
diff --git a/src/controllers/dashboard/plugins/repositories/index.html b/src/controllers/dashboard/plugins/repositories/index.html index 689c261a08..a775da4b42 100644 --- a/src/controllers/dashboard/plugins/repositories/index.html +++ b/src/controllers/dashboard/plugins/repositories/index.html @@ -6,9 +6,6 @@ - - ${Help} -
diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtask.html b/src/controllers/dashboard/scheduledtasks/scheduledtask.html index f0f9d181de..a2352e6470 100644 --- a/src/controllers/dashboard/scheduledtasks/scheduledtask.html +++ b/src/controllers/dashboard/scheduledtasks/scheduledtask.html @@ -4,7 +4,6 @@ diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js b/src/controllers/dashboard/scheduledtasks/scheduledtasks.js index db5f9255be..b494aba1ec 100644 --- a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js +++ b/src/controllers/dashboard/scheduledtasks/scheduledtasks.js @@ -33,8 +33,7 @@ function populateList(page, tasks) { let currentCategory; let html = ''; - for (let i = 0; i < tasks.length; i++) { - const task = tasks[i]; + for (const task of tasks) { if (task.Category != currentCategory) { currentCategory = task.Category; if (currentCategory) { @@ -46,9 +45,6 @@ function populateList(page, tasks) { html += '

'; html += currentCategory; html += '

'; - if (i === 0) { - html += '' + globalize.translate('Help') + ''; - } html += '
'; html += '
'; } diff --git a/src/controllers/livetvsettings.html b/src/controllers/livetvsettings.html index 3faf39e693..78e70fa8f4 100644 --- a/src/controllers/livetvsettings.html +++ b/src/controllers/livetvsettings.html @@ -4,7 +4,6 @@

${HeaderDVR}

- ${Help}
diff --git a/src/controllers/livetvstatus.html b/src/controllers/livetvstatus.html index 80d6fb4062..f1ac392ee0 100644 --- a/src/controllers/livetvstatus.html +++ b/src/controllers/livetvstatus.html @@ -10,7 +10,6 @@ - ${Help}
diff --git a/src/controllers/livetvtuner.html b/src/controllers/livetvtuner.html index 337599f53a..88967bbb2b 100644 --- a/src/controllers/livetvtuner.html +++ b/src/controllers/livetvtuner.html @@ -5,7 +5,6 @@

${HeaderLiveTvTunerSetup}

- ${Help}
diff --git a/src/elements/SectionTitleContainer.tsx b/src/elements/SectionTitleContainer.tsx index 933dd1e8f0..0bb5e988ea 100644 --- a/src/elements/SectionTitleContainer.tsx +++ b/src/elements/SectionTitleContainer.tsx @@ -1,7 +1,5 @@ import React, { FunctionComponent } from 'react'; import IconButtonElement from './IconButtonElement'; -import LinkButton from './emby-button/LinkButton'; -import globalize from 'lib/globalize'; type IProps = { SectionClassName?: string; @@ -11,10 +9,8 @@ type IProps = { btnClassName?: string; btnTitle?: string; btnIcon?: string; - isLinkVisible?: boolean; - url?: string; }; -const SectionTitleContainer: FunctionComponent = ({ SectionClassName, title, isBtnVisible = false, btnId, btnClassName, btnTitle, btnIcon, isLinkVisible = true, url }: IProps) => { +const SectionTitleContainer: FunctionComponent = ({ SectionClassName, title, isBtnVisible = false, btnId, btnClassName, btnTitle, btnIcon }: IProps) => { return (

@@ -29,14 +25,6 @@ const SectionTitleContainer: FunctionComponent = ({ SectionClassName, ti icon={btnIcon} />} - {isLinkVisible && - {globalize.translate('Help')} - } -

); }; diff --git a/src/styles/site.scss b/src/styles/site.scss index f3f1a699b7..429305b7d3 100644 --- a/src/styles/site.scss +++ b/src/styles/site.scss @@ -99,12 +99,6 @@ form { } } -.headerHelpButton { - margin-left: 1.25em !important; - padding-bottom: 0.4em !important; - padding-top: 0.4em !important; -} - .mediaInfoContent { margin-left: auto; margin-right: auto;