Browse Source

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

Create headings for apps, users, settings pages
pull/37121/head
Julia Kirschenheuter 3 years ago
committed by GitHub
parent
commit
f1abecdf47
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      apps/settings/lib/Controller/AppSettingsController.php
  2. 2
      apps/settings/lib/Controller/UsersController.php
  3. 2
      apps/settings/src/router.js
  4. 6
      apps/settings/tests/Controller/AppSettingsControllerTest.php
  5. 13
      core/src/OCP/accessibility.js
  6. 6
      core/templates/layout.user.php
  7. 4
      dist/core-main.js
  8. 2
      dist/core-main.js.map
  9. 4
      dist/settings-vue-settings-apps-users-management.js
  10. 22
      dist/settings-vue-settings-apps-users-management.js.LICENSE.txt
  11. 2
      dist/settings-vue-settings-apps-users-management.js.map

2
apps/settings/lib/Controller/AppSettingsController.php

@ -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);

2
apps/settings/lib/Controller/UsersController.php

@ -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')]);
}
/**

2
apps/settings/src/router.js

@ -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
}

6
apps/settings/tests/Controller/AppSettingsControllerTest.php

@ -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);

13
core/src/OCP/accessibility.js

@ -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,
}

6
core/templates/layout.user.php

@ -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
File diff suppressed because it is too large
View File

2
dist/core-main.js.map
File diff suppressed because it is too large
View File

4
dist/settings-vue-settings-apps-users-management.js
File diff suppressed because it is too large
View File

22
dist/settings-vue-settings-apps-users-management.js.LICENSE.txt

@ -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/>.
*
*/

2
dist/settings-vue-settings-apps-users-management.js.map
File diff suppressed because it is too large
View File

Loading…
Cancel
Save