Merge pull request #36640 from nextcloud/fix/35626-No_heading_nor_tab_index_for_settings_pages

Create headings for apps, users, settings pages
This commit is contained in:
Julia Kirschenheuter 2023-03-08 08:08:25 +01:00 committed by GitHub
commit f1abecdf47
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 52 additions and 13 deletions

View file

@ -136,7 +136,7 @@ class AppSettingsController extends Controller {
$params['bundles'] = $this->getBundles();
$this->navigationManager->setActiveEntry('core_apps');
$templateResponse = new TemplateResponse('settings', 'settings-vue', ['serverData' => $params]);
$templateResponse = new TemplateResponse('settings', 'settings-vue', ['serverData' => $params, 'pageTitle' => $this->l10n->t('Apps')]);
$policy = new ContentSecurityPolicy();
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
$templateResponse->setContentSecurityPolicy($policy);

View file

@ -277,7 +277,7 @@ class UsersController extends Controller {
$serverData['newUserRequireEmail'] = $this->config->getAppValue('core', 'newUser.requireEmail', 'no') === 'yes';
$serverData['newUserSendEmail'] = $this->config->getAppValue('core', 'newUser.sendEmail', 'yes') === 'yes';
return new TemplateResponse('settings', 'settings-vue', ['serverData' => $serverData]);
return new TemplateResponse('settings', 'settings-vue', ['serverData' => $serverData, 'pageTitle' => $this->l10n->t('Users')]);
}
/**

View file

@ -27,6 +27,7 @@ import Router from 'vue-router'
import { generateUrl } from '@nextcloud/router'
import { APPS_SECTION_ENUM } from './constants/AppsConstants.js'
import store from './store/index.js'
import { setPageHeading } from '../../../core/src/OCP/accessibility.js'
// Dynamic loading
const Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')
@ -126,6 +127,7 @@ router.afterEach(async (to) => {
const metaTitle = await to.meta.title?.(to)
if (metaTitle) {
document.title = `${metaTitle} - ${baseTitle}`
setPageHeading(metaTitle)
} else {
document.title = baseTitle
}

View file

@ -209,7 +209,8 @@ class AppSettingsControllerTest extends TestCase {
'appstoreEnabled' => true,
'bundles' => [],
'developerDocumentation' => ''
]
],
'pageTitle' => 'Apps'
],
'user');
$expected->setContentSecurityPolicy($policy);
@ -243,7 +244,8 @@ class AppSettingsControllerTest extends TestCase {
'appstoreEnabled' => false,
'bundles' => [],
'developerDocumentation' => ''
]
],
'pageTitle' => 'Apps'
],
'user');
$expected->setContentSecurityPolicy($policy);

View file

@ -22,6 +22,18 @@
import { loadState } from '@nextcloud/initial-state'
/**
* Set the page heading
*
* @param {string} heading page title from the history api
* @since 27.0.0
*/
export function setPageHeading(heading) {
const headingEl = document.getElementById('page-heading-level-1')
if (headingEl) {
headingEl.textContent = heading
}
}
export default {
/**
* @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered
@ -29,4 +41,5 @@ export default {
disableKeyboardShortcuts() {
return loadState('theming', 'shortcutsDisabled', false)
},
setPageHeading,
}

View file

@ -57,6 +57,9 @@ p($theme->getTitle());
</div>
<header role="banner" id="header">
<h1 class="hidden-visually" id="page-heading-level-1">
<?php p(!empty($_['pageTitle'])?$_['pageTitle']:$theme->getName()); ?>
</h1>
<div class="header-left">
<a href="<?php print_unescaped($_['logoUrl'] ?: link_to('', 'index.php')); ?>"
id="nextcloud">
@ -89,9 +92,6 @@ p($theme->getTitle());
</form>
<main id="content" class="app-<?php p($_['appid']) ?>">
<h1 class="hidden-visually">
<?php p($l->t('%s\'s homepage', [$theme->getName()])); ?>
</h1>
<?php print_unescaped($_['content']); ?>
</main>
<div id="profiler-toolbar"></div>

4
dist/core-main.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -114,3 +114,25 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>
*
* @author Joas Schilling <coding@schilljs.com>
*
* @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

File diff suppressed because one or more lines are too long