This commit is contained in:
Ilya Tregubov 2021-10-11 14:46:54 +07:00
commit 843066ecf4
39 changed files with 411 additions and 186 deletions

View File

@ -22,6 +22,19 @@ if ($hassiteconfig && moodle_needs_upgrading()) {
\core\hub\registration::registration_reminder('/admin/search.php');
admin_externalpage_setup('search', '', array('query' => $query)); // now hidden page
$PAGE->set_heading(get_string('administrationsite')); // Has to be after setup since it has its' own heading set_heading.
if ($hassiteconfig) {
$data = [
'action' => new moodle_url('/admin/search.php'),
'btnclass' => 'btn-primary',
'inputname' => 'query',
'searchstring' => get_string('search'),
'query' => $query,
'extraclasses' => 'd-flex justify-content-end'
];
$PAGE->add_header_action($OUTPUT->render_from_template('core/search_input', $data));
}
$adminroot = admin_get_root(); // need all settings here
$adminroot->search = $query; // So we can reference it in search boxes later in this invocation
@ -59,8 +72,6 @@ if (empty($query)) {
echo $adminrenderer->warn_if_not_registered();
}
echo $OUTPUT->heading(get_string('administrationsite'));
if ($errormsg !== '') {
echo $OUTPUT->notification($errormsg);
@ -70,22 +81,10 @@ if ($errormsg !== '') {
$showsettingslinks = true;
if ($hassiteconfig) {
$data = [
'action' => new moodle_url('/admin/search.php'),
'btnclass' => 'btn-primary',
'inputname' => 'query',
'searchstring' => get_string('search'),
'query' => $query,
'extraclasses' => 'd-flex justify-content-center'
];
echo $OUTPUT->render_from_template('core/search_input', $data);
if ($query && $hassiteconfig) {
echo '<hr>';
if ($query) {
echo admin_search_settings_html($query);
$showsettingslinks = false;
}
echo admin_search_settings_html($query);
$showsettingslinks = false;
}
if ($showsettingslinks) {

View File

@ -34,7 +34,7 @@ Feature: Verify that keyboard steps work as expected
| username | email | firstname | lastname |
| saffronr | saffron.rutledge@example.com | Saffron | Rutledge |
And I log in as "saffronr"
And I click on "Saffron Rutledge" "button" in the ".usermenu" "css_element"
And I click on "User menu" "button" in the ".usermenu" "css_element"
When I press the up key
Then the focused element is "Log out" "link"

View File

@ -58,14 +58,14 @@ Feature: Apply accessibility to a tour
When I press tab
Then the focused element is ".usermenu" "css_element"
When I press tab
Then the focused element is "Admin User" "link_or_button" in the ".usermenu" "css_element"
Then the focused element is "User menu" "button" in the ".usermenu" "css_element"
When I press tab
And I press tab
Then the focused element is ".close" "css_element" in the "User menu" "dialogue"
# Press shift-tab twice should lead us back to "Admin user" link.
# Press shift-tab twice should lead us back to the user menu button.
When I press shift tab
And I press shift tab
Then the focused element is "Admin User" "link_or_button" in the ".usermenu" "css_element"
Then the focused element is "User menu" "button" in the ".usermenu" "css_element"
@javascript
Scenario: Aria tags should not exist

View File

@ -96,6 +96,7 @@ $PAGE->set_docs_path('');
$editing = $PAGE->user_is_editing();
$PAGE->set_title($SITE->fullname);
$PAGE->set_heading($SITE->fullname);
$PAGE->has_secondary_navigation_setter(false);
$courserenderer = $PAGE->get_renderer('core', 'course');
echo $OUTPUT->header();

View File

@ -1,2 +1,2 @@
define ("core/menu_navigation",["exports","core/key_codes"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;var c={menuitem:"[role=\"menuitem\"]",menu:"[role=\"menu\"]"},d=null,e=function(a,b){if(null!==a){return a}else{return b}},f=function(a){var e=a.srcElement,f=a.currentTarget.firstElementChild,k=j(a.currentTarget);if(e.classList.contains("dropdown-item")){if(a.keyCode===b.arrowRight||a.keyCode===b.arrowLeft){a.preventDefault();if(null!==d){d.parentElement.click()}}if(a.keyCode===b.space||a.keyCode===b.enter){a.preventDefault();Array.prototype.forEach.call(e.closest(".dropdown-menu").children,function(a){a.querySelector(c.menuitem).classList.remove("active");a.setAttribute("aria-current","false")});if(!e.parentElement.classList.contains("dropdown")){e.click()}}}else{if(a.keyCode===b.arrowRight){a.preventDefault();g(e,f)}if(a.keyCode===b.arrowLeft){a.preventDefault();h(e,k)}if(a.keyCode===b.arrowUp||a.keyCode===b.arrowDown){d=e;a.preventDefault()}if(a.keyCode===b.home){a.preventDefault();e.setAttribute("aria-current","false");i(f)}if(a.keyCode===b.end){a.preventDefault();e.currentNode.setAttribute("aria-current","false");i(k)}if(a.keyCode===b.space||a.keyCode===b.enter){a.preventDefault();if(!e.parentElement.classList.contains("dropdown")){e.click()}}}};a.default=function(a){a.removeEventListener("keydown",f);a.addEventListener("keydown",f)};var g=function(a,b){var d=a.parentElement.nextElementSibling,f=e(d,b),g=f.querySelector(c.menuitem);a.setAttribute("aria-current","false");g.setAttribute("aria-current","true");g.focus()},h=function(a,b){var d=a.parentElement.previousElementSibling,f=e(d,b),g=f.querySelector(c.menuitem);a.setAttribute("aria-current","false");g.setAttribute("aria-current","true");g.focus()},i=function(a){a.querySelector(c.menuitem).focus();a.querySelector(c.menuitem).setAttribute("aria-current","true")},j=function(a){var b=a.lastElementChild;if(!b.classList.contains("d-none")){return a.lastElementChild}else{var c=Array.prototype.map.call(a.children,function(a){return a}).reverse(),d=c.filter(function(a){if(!a.classList.contains("d-none")){return a}});if(0!==d.length){return d[0]}else{return a.firstElementChild}}};return a.default});
define ("core/menu_navigation",["exports","core/key_codes"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;var c={menuitem:"[role=\"menuitem\"]",menu:"[role=\"menu\"]"},d=null,e=function(a,b){if(null!==a){return a}else{return b}},f=function(a){var b;if(a.classList.contains("dropdown-item")){b=a.closest(".dropdown-menu");b.previousElementSibling.classList.add("active")}else{b=a.parentElement.parentElement.querySelector(".dropdown-menu")}Array.prototype.forEach.call(b.children,function(a){var b=a.querySelector(c.menuitem);if(null!==b){b.classList.remove("active");b.setAttribute("aria-current","false")}a.setAttribute("aria-current","false")});a.setAttribute("aria-current","true")},g=function(a){var c=a.srcElement,e=a.currentTarget.firstElementChild,g=l(a.currentTarget);if(c.classList.contains("dropdown-item")){if(a.keyCode===b.arrowRight||a.keyCode===b.arrowLeft){a.preventDefault();if(null!==d){d.parentElement.click()}}if(a.keyCode===b.space||a.keyCode===b.enter){a.preventDefault();f(c);if(!c.parentElement.classList.contains("dropdown")){c.click()}}}else{if(a.keyCode===b.arrowRight){a.preventDefault();i(c,e)}if(a.keyCode===b.arrowLeft){a.preventDefault();j(c,g)}if(a.keyCode===b.arrowUp||a.keyCode===b.arrowDown){d=c;a.preventDefault()}if(a.keyCode===b.home){a.preventDefault();c.setAttribute("aria-current","false");k(e)}if(a.keyCode===b.end){a.preventDefault();c.currentNode.setAttribute("aria-current","false");k(g)}if(a.keyCode===b.space||a.keyCode===b.enter){a.preventDefault();if(!c.parentElement.classList.contains("dropdown")){c.click()}}}},h=function(a){var b=a.srcElement;f(b)};a.default=function(a){a.removeEventListener("keydown",g);a.removeEventListener("click",h);a.addEventListener("keydown",g);a.addEventListener("click",h)};var i=function(a,b){var d=a.parentElement.nextElementSibling,f=e(d,b),g=f.querySelector(c.menuitem);a.setAttribute("aria-current","false");g.setAttribute("aria-current","true");g.focus()},j=function(a,b){var d=a.parentElement.previousElementSibling,f=e(d,b),g=f.querySelector(c.menuitem);a.setAttribute("aria-current","false");g.setAttribute("aria-current","true");g.focus()},k=function(a){a.querySelector(c.menuitem).focus();a.querySelector(c.menuitem).setAttribute("aria-current","true")},l=function(a){var b=a.lastElementChild;if(!b.classList.contains("d-none")){return a.lastElementChild}else{var c=Array.prototype.map.call(a.children,function(a){return a}).reverse(),d=c.filter(function(a){if(!a.classList.contains("d-none")){return a}});if(0!==d.length){return d[0]}else{return a.firstElementChild}}};return a.default});
//# sourceMappingURL=menu_navigation.min.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
define ("core/moremenu",["exports","jquery","core/menu_navigation"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}var f={regions:{moredropdown:"[data-region=\"moredropdown\"]",morebutton:"[data-region=\"morebutton\"]"},classes:{dropdownitem:"dropdown-item",dropdownmoremenu:"dropdownmoremenu",dropdowntoggle:"dropdown-toggle",hidden:"d-none",active:"active",nav:"nav",navlink:"nav-link",observed:"observed"},attributes:{menu:"[role=\"menu\"]"}},g=function(a){var b=a.parentNode.offsetHeight+1,c=a.querySelector(f.regions.moredropdown),d=a.querySelector(f.regions.morebutton);if(a.offsetHeight>b){d.classList.remove(f.classes.hidden);var e=Array.from(a.children).reverse();e.forEach(function(c){if(!c.classList.contains(f.classes.dropdownmoremenu)){if(a.offsetHeight>b){var d=a.removeChild(c);h(a,d,!0)}}})}else{if("children"in c){var j=Array.from(c.children);j.forEach(function(d){if(a.offsetHeight<b&&"true"!==d.dataset.forceintomoremenu){var e=c.removeChild(d);i(a,e)}});if(0===j.length){d.classList.add(f.classes.hidden)}}if(a.offsetHeight>b){g(a)}}a.parentNode.classList.add(f.classes.observed)},h=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!1,d=a.querySelector(f.regions.moredropdown),e=a.querySelector("."+f.classes.dropdowntoggle),g=b.querySelector("."+f.classes.navlink);if(g.classList.contains(f.classes.active)){e.classList.add(f.classes.active)}g.classList.remove(f.classes.navlink);g.classList.add(f.classes.dropdownitem);if(c){d.prepend(b)}else{d.append(b)}},i=function(a,b){var c=a.querySelector(f.regions.morebutton),d=a.querySelector("."+f.classes.dropdowntoggle),e=b.querySelector("."+f.classes.dropdownitem);if(e.classList.contains(f.classes.active)){d.classList.remove(f.classes.active)}e.classList.remove(f.classes.dropdownitem);e.classList.add(f.classes.navlink);a.insertBefore(b,c)},j=function(a){a.firstElementChild.querySelector("[role=\"menuitem\"]").setAttribute("tabindex","0");if("children"in a){var d=a.querySelector(f.regions.morebutton),e=Array.from(a.children);e.forEach(function(b){if(!b.classList.contains(f.classes.dropdownmoremenu)&&"true"===b.dataset.forceintomoremenu){h(a,b,!1);if(d.classList.contains(f.classes.hidden)){d.classList.remove(f.classes.hidden)}}})}g(a);(0,c.default)(a);window.addEventListener("resize",function(){g(a);(0,c.default)(a)});var i=function(a){var b=a.target.parentNode.querySelector(f.attributes.menu);if(b){b.classList.toggle("show")}a.stopPropagation()};(0,b.default)("."+f.classes.dropdownmoremenu).on("show.bs.dropdown",function(){var b=a.querySelector(f.regions.moredropdown);b.querySelectorAll(".dropdown").forEach(function(a){a.removeEventListener("click",i,!0);a.addEventListener("click",i,!0)})})};a.default=j;return a.default});
define ("core/moremenu",["exports","jquery","core/menu_navigation"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}var f={regions:{moredropdown:"[data-region=\"moredropdown\"]",morebutton:"[data-region=\"morebutton\"]"},classes:{dropdownitem:"dropdown-item",dropdownmoremenu:"dropdownmoremenu",hidden:"d-none",active:"active",nav:"nav",navlink:"nav-link",observed:"observed"},attributes:{menu:"[role=\"menu\"]",dropdowntoggle:"[data-toggle=\"dropdown\"]"}},g=function(a){var b=a.parentNode.offsetHeight+1,c=a.querySelector(f.regions.moredropdown),d=a.querySelector(f.regions.morebutton);if(a.offsetHeight>b){d.classList.remove(f.classes.hidden);var e=Array.from(a.children).reverse();e.forEach(function(c){if(!c.classList.contains(f.classes.dropdownmoremenu)){if(a.offsetHeight>b){var d=a.removeChild(c);h(a,d,!0)}}})}else{if("children"in c){var j=Array.from(c.children);j.forEach(function(d){if(a.offsetHeight<b&&"true"!==d.dataset.forceintomoremenu){var e=c.removeChild(d);i(a,e)}});if(0===j.length){d.classList.add(f.classes.hidden)}}if(a.offsetHeight>b){g(a)}}a.parentNode.classList.add(f.classes.observed)},h=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!1,d=a.querySelector(f.regions.moredropdown),e=a.querySelector(f.attributes.dropdowntoggle),g=b.querySelector("."+f.classes.navlink);if(g.classList.contains(f.classes.active)){e.classList.add(f.classes.active)}g.classList.remove(f.classes.navlink);g.classList.add(f.classes.dropdownitem);if(c){d.prepend(b)}else{d.append(b)}},i=function(a,b){var c=a.querySelector(f.regions.morebutton),d=a.querySelector(f.attributes.dropdowntoggle),e=b.querySelector("."+f.classes.dropdownitem);if(e.classList.contains(f.classes.active)){d.classList.remove(f.classes.active)}e.classList.remove(f.classes.dropdownitem);e.classList.add(f.classes.navlink);a.insertBefore(b,c)},j=function(a){a.firstElementChild.querySelector("[role=\"menuitem\"]").setAttribute("tabindex","0");if("children"in a){var d=a.querySelector(f.regions.morebutton),e=Array.from(a.children);e.forEach(function(b){if(!b.classList.contains(f.classes.dropdownmoremenu)&&"true"===b.dataset.forceintomoremenu){h(a,b,!1);if(d.classList.contains(f.classes.hidden)){d.classList.remove(f.classes.hidden)}}})}g(a);(0,c.default)(a);window.addEventListener("resize",function(){g(a);(0,c.default)(a)});var i=function(a){var b=a.target.parentNode.querySelector(f.attributes.menu);if(b){b.classList.toggle("show")}a.stopPropagation()};(0,b.default)("."+f.classes.dropdownmoremenu).on("show.bs.dropdown",function(){var b=a.querySelector(f.regions.moredropdown);b.querySelectorAll(".dropdown").forEach(function(a){a.removeEventListener("click",i,!0);a.addEventListener("click",i,!0)})})};a.default=j;return a.default});
//# sourceMappingURL=moremenu.min.js.map

File diff suppressed because one or more lines are too long

View File

@ -47,11 +47,39 @@ const clickErrorHandler = (item, fallback) => {
};
/**
* Defined event handling so we can remove listeners on nodes on resize etc.
* Control classes etc of the selected dropdown item and its' parent <a>
*
* @param {HTMLElement} src The node within the dropdown the user selected.
*/
const menuItemHelper = src => {
let parent;
// Handling for dropdown escapes.
// A bulk of the handling is already done by aria.js just add polish.
if (src.classList.contains('dropdown-item')) {
parent = src.closest('.dropdown-menu');
parent.previousElementSibling.classList.add('active');
} else {
parent = src.parentElement.parentElement.querySelector('.dropdown-menu');
}
// Remove active class from any other dropdown elements.
Array.prototype.forEach.call(parent.children, node => {
const menuItem = node.querySelector(SELECTORS.menuitem);
if (menuItem !== null) {
menuItem.classList.remove('active');
menuItem.setAttribute('aria-current', 'false');
}
node.setAttribute('aria-current', 'false');
});
src.setAttribute('aria-current', 'true');
};
/**
* Defined keyboard event handling so we can remove listeners on nodes on resize etc.
*
* @param {event} e The triggering element and key presses etc.
*/
const listenerEvents = e => {
const keyboardListenerEvents = e => {
const src = e.srcElement;
const firstNode = e.currentTarget.firstElementChild;
const lastNode = findUsableLastNode(e.currentTarget);
@ -70,11 +98,7 @@ const listenerEvents = e => {
e.keyCode === enter) {
e.preventDefault();
// Remove active class from any other dropdown elements.
Array.prototype.forEach.call(src.closest('.dropdown-menu').children, node => {
node.querySelector(SELECTORS.menuitem).classList.remove('active');
node.setAttribute('aria-current', 'false');
});
menuItemHelper(src);
if (!src.parentElement.classList.contains('dropdown')) {
src.click();
@ -116,14 +140,28 @@ const listenerEvents = e => {
}
};
/**
* Defined click event handling so we can remove listeners on nodes on resize etc.
*
* @param {event} e The triggering element and key presses etc.
*/
const clickListenerEvents = e => {
const src = e.srcElement;
menuItemHelper(src);
};
/**
* The initial entry point that a given module can pass a HTMLElement.
*
* @param {HTMLElement} elementRoot The menu to add handlers upon.
*/
export default elementRoot => {
elementRoot.removeEventListener('keydown', listenerEvents);
elementRoot.addEventListener('keydown', listenerEvents);
// Remove any and all instances of old listeners on the passed element.
elementRoot.removeEventListener('keydown', keyboardListenerEvents);
elementRoot.removeEventListener('click', clickListenerEvents);
// (Re)apply our event listeners to the passed element.
elementRoot.addEventListener('keydown', keyboardListenerEvents);
elementRoot.addEventListener('click', clickListenerEvents);
};
/**

View File

@ -35,7 +35,6 @@ const Selectors = {
classes: {
dropdownitem: 'dropdown-item',
dropdownmoremenu: 'dropdownmoremenu',
dropdowntoggle: 'dropdown-toggle',
hidden: 'd-none',
active: 'active',
nav: 'nav',
@ -43,7 +42,8 @@ const Selectors = {
observed: 'observed',
},
attributes: {
menu: '[role="menu"]'
menu: '[role="menu"]',
dropdowntoggle: '[data-toggle="dropdown"]'
}
};
@ -116,7 +116,7 @@ const autoCollapse = menu => {
*/
const moveIntoMoreDropdown = (menu, navNode, prepend = false) => {
const moreDropdown = menu.querySelector(Selectors.regions.moredropdown);
const dropdownToggle = menu.querySelector('.' + Selectors.classes.dropdowntoggle);
const dropdownToggle = menu.querySelector(Selectors.attributes.dropdowntoggle);
const navLink = navNode.querySelector('.' + Selectors.classes.navlink);
// If there are navLinks that contain an active link in the moreDropdown
@ -146,7 +146,7 @@ const moveIntoMoreDropdown = (menu, navNode, prepend = false) => {
*/
const moveOutOfMoreDropdown = (menu, navNode) => {
const moreButton = menu.querySelector(Selectors.regions.morebutton);
const dropdownToggle = menu.querySelector('.' + Selectors.classes.dropdowntoggle);
const dropdownToggle = menu.querySelector(Selectors.attributes.dropdowntoggle);
const navLink = navNode.querySelector('.' + Selectors.classes.dropdownitem);
// Stop displaying the active state on the dropdownToggle if

View File

@ -212,7 +212,6 @@ class icon_system_fontawesome extends icon_system_font {
'core:i/completion_self' => 'fa-user-o',
'core:i/contentbank' => 'fa-paint-brush',
'core:i/dashboard' => 'fa-tachometer',
'core:i/lock' => 'fa-lock',
'core:i/categoryevent' => 'fa-cubes',
'core:i/course' => 'fa-graduation-cap',
'core:i/courseevent' => 'fa-graduation-cap',
@ -290,7 +289,7 @@ class icon_system_fontawesome extends icon_system_font {
'core:i/news' => 'fa-newspaper-o',
'core:i/next' => 'fa-chevron-right',
'core:i/nosubcat' => 'fa-plus-square-o',
'core:i/notifications' => 'fa-bell',
'core:i/notifications' => 'fa-bell-o',
'core:i/open' => 'fa-folder-open',
'core:i/otherevent' => 'fa-calendar',
'core:i/outcomes' => 'fa-tasks',
@ -402,7 +401,7 @@ class icon_system_fontawesome extends icon_system_font {
'core:t/locktime' => 'fa-lock',
'core:t/markasread' => 'fa-check',
'core:t/messages' => 'fa-comments',
'core:t/message' => 'fa-comment',
'core:t/message' => 'fa-comment-o',
'core:t/more' => 'fa-caret-down',
'core:t/move' => 'fa-arrows-v',
'core:t/online' => 'fa-circle',

View File

@ -30,12 +30,12 @@
}
}}
<header id="page-header" class="row">
<div class="col-12 pt-3 pb-3">
<div class="card {{^contextheader}}border-0 bg-transparent{{/contextheader}}">
<div class="card-body {{^contextheader}}p-2{{/contextheader}}">
<div class="col-12 pt-3">
<div class="card border-0">
<div class="card-body p-2 navigation-card">
<div class="d-flex flex-wrap">
{{#hasnavbar}}
<div id="page-navbar">
<div id="page-navbar" class="p-1">
{{{navbar}}}
</div>
{{/hasnavbar}}

View File

@ -45,7 +45,7 @@
"moremenuid": "614c104dbacfa"
}
}}
<nav class="moremenu">
<nav class="moremenu navigation">
<ul id="moremenu-{{moremenuid}}-{{navbarstyle}}" role="menubar" class="nav more-nav {{navbarstyle}}">
{{#nodecollection}}
{{#children}}
@ -56,16 +56,16 @@
{{> core/moremenu_children}}
{{/nodearray}}
<li role="none" class="nav-item dropdown dropdownmoremenu d-none" data-region="morebutton">
<a class="dropdown-toggle nav-link" href="#" id="moremenu-dropdown-{{moremenuid}}" role="menuitem" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" tabindex="-1">
<a class="dropdown-toggle nav-link {{#isactive}}active{{/isactive}}" href="#" id="moremenu-dropdown-{{moremenuid}}" role="menuitem" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" tabindex="-1">
{{#str}}moremenu, core{{/str}}
</a>
<ul class="dropdown-menu dropdown-menu-right" data-region="moredropdown" aria-labelledby="moremenu-dropdown-{{moremenuid}}" role="menu">
<ul class="dropdown-menu dropdown-menu-left" data-region="moredropdown" aria-labelledby="moremenu-dropdown-{{moremenuid}}" role="menu">
</ul>
</li>
</ul>
</nav>
{{#js}}
require(['core/moremenu'], function(moremenu) {
moremenu(document.querySelector('#moremenu-{{moremenuid}}-{{navbarstyle}}'));
});
require(['core/moremenu'], function(moremenu) {
moremenu(document.querySelector('#moremenu-{{moremenuid}}-{{navbarstyle}}'));
});
{{/js}}

View File

@ -50,14 +50,14 @@
{{^haschildren}}
<li class="nav-item" role="none" data-forceintomoremenu="{{#forceintomoremenu}}true{{/forceintomoremenu}}{{^forceintomoremenu}}false{{/forceintomoremenu}}">
{{#tab}}
<a role="menuitem" class="nav-link {{#isactive}}active{{/isactive}} {{#classes}}{{.}} {{/classes}}" href="{{tab}}" data-toggle="tab" aria-current="false" tabindex="-1">
<a role="menuitem" class="nav-link {{#isactive}}active{{/isactive}} {{#classes}}{{.}} {{/classes}}" href="{{tab}}" data-toggle="tab" data-text="{{{text}}}" aria-current="false" tabindex="-1">
{{{text}}}
</a>
{{/tab}}
{{^tab}}
<a role="menuitem" class="nav-link {{#isactive}}active{{/isactive}} {{#classes}}{{.}} {{/classes}}" href="{{{url}}}{{{action}}}" {{#isactive}}aria-current="true"{{/isactive}} tabindex="-1">
{{{text}}}
</a>
<a role="menuitem" class="nav-link {{#isactive}}active{{/isactive}} {{#classes}}{{.}} {{/classes}}" href="{{{url}}}{{{action}}}" {{#isactive}}aria-current="true"{{/isactive}} tabindex="-1">
{{{text}}}
</a>
{{/tab}}
</li>
{{/haschildren}}

View File

@ -37,7 +37,9 @@
}
}}
{{#secondarynavigation}}
{{> core/moremenu}}
<div class="secondary-navigation">
{{> core/moremenu}}
</div>
{{/secondarynavigation}}
{{^secondarynavigation}}
<ul class="nav nav-tabs" role="tablist">
@ -59,10 +61,9 @@
{{/node.children}}
</ul>
{{/secondarynavigation}}
<div class="tab-content mt-3">
<div class="tab-pane active" id="link{{node.key}}" {{^secondarynavigation}}role="tabpanel"{{/secondarynavigation}}>
<div class="container">
<div class="container-fluid">
<div class="row">
<div class="col-sm-3">
</div>
@ -106,7 +107,7 @@
{{#node.children}}
{{#children.count}}
<div class="tab-pane" id="link{{key}}" {{^secondarynavigation}}role="tabpanel"{{/secondarynavigation}}>
<div class="container">
<div class="container-fluid">
<div class="row">
<div class="col-sm-3">
{{#action}}<h4><a href="{{action}}">{{text}}</a></h4>{{/action}}

View File

@ -46,18 +46,17 @@
"userfullname": "Admin User"
}
}}
<span class="usertext mr-1">
{{userfullname}}
{{#metadata}}
<span class="meta {{classes}}">
{{#metadata}}
<span class="usertext d-flex mr-1">
<span class="meta d-flex {{classes}}">
{{{content}}}
</span>
{{/metadata}}
</span>
<span class="avatars">
{{#avatardata}}
<span class="avatar {{classes}}">
{{{content}}}
</span>
{{/avatardata}}
{{/metadata}}
<span class="avatars">
{{#avatardata}}
<span class="avatar {{classes}}">
{{{content}}}
</span>
{{/avatardata}}
</span>

View File

@ -315,7 +315,7 @@ if ($isnestedv2displaymode) {
$settingstrigger = $OUTPUT->render_from_template('mod_forum/settings_drawer_trigger', null);
$PAGE->add_header_action($settingstrigger);
} else {
$PAGE->set_button(forum_search_form($course));
$PAGE->add_header_action(forum_search_form($course));
}
echo $OUTPUT->header();

View File

@ -454,7 +454,7 @@ if ($course->id != SITEID) { // Only real courses have learning forums
$PAGE->navbar->add($strforums);
$PAGE->set_title("$course->shortname: $strforums");
$PAGE->set_heading($course->fullname);
$PAGE->set_button($searchform);
$PAGE->add_header_action($searchform);
echo $OUTPUT->header();
if (!isguestuser() && isloggedin() && $showsubscriptioncolumns) {

View File

@ -193,7 +193,7 @@ $rm = new rating_manager();
$PAGE->set_title($strsearchresults);
$PAGE->set_heading($course->fullname);
$PAGE->set_button($searchform);
$PAGE->add_header_action($searchform);
echo $OUTPUT->header();
echo '<div class="reportlink">';

View File

@ -105,7 +105,7 @@ $PAGE->set_context($forum->get_context());
$PAGE->set_title($forum->get_name());
$PAGE->add_body_class('forumtype-' . $forum->get_type());
$PAGE->set_heading($course->fullname);
$PAGE->set_button(forum_search_form($course, $search));
$PAGE->add_header_action(forum_search_form($course, $search));
if ($istypesingle && $displaymode == FORUM_MODE_NESTED_V2) {
$PAGE->add_body_class('nested-v2-display-mode reset-style');

View File

@ -89,6 +89,7 @@ $PAGE->blocks->add_region('content');
$PAGE->set_subpage($currentpage->id);
$PAGE->set_title($pagetitle);
$PAGE->set_heading($header);
$PAGE->has_secondary_navigation_setter(false);
if (!isguestuser()) { // Skip default home page for guests
if (get_home_page() != HOMEPAGE_MY) {

View File

@ -53,8 +53,7 @@ Feature: Preview a drag-drop marker question
And I drag "OU" to "345,230" in the drag and drop markers question
And I drag "Railway station" to "262,197" in the drag and drop markers question
And I drag "Railway station" to "334,319" in the drag and drop markers question
And I change viewport size to "640x640"
And I drag "Railway station" to "200,85" in the drag and drop markers question
And I drag "Railway station" to "210,105" in the drag and drop markers question
And I press "Submit and finish"
Then the state of "Please place the markers on the map of Milton Keynes" question is shown as "Correct"
And I should see "Mark 1.00 out of 1.00"

View File

@ -2010,6 +2010,9 @@ img#persona_signin {
/** Page header */
#page-header {
h1.h2 {
font-weight: bold;
}
.logo {
margin: $spacer 0;
img {

View File

@ -105,17 +105,6 @@ select {
font-weight: inherit;
}
}
// Style for the forum subscription mode node.
.subscriptionmode {
color: $body-color;
}
// Style for the currently selected subscription mode.
.activesetting {
color: $body-color;
font-weight: bold;
}
}
.discussion-settings-container {
@ -1063,6 +1052,7 @@ div#dock {
}
}
// Usermenu
.userloggedinas,
.userswitchedrole,
.loginfailures {
@ -1073,8 +1063,8 @@ div#dock {
margin-right: $spacer / 2;
height: 35px;
.meta {
display: block;
font-size: $font-size-sm;
align-items: center;
}
}
.avatar {

View File

@ -8,10 +8,50 @@
height: $moremenu-height;
display: flex;
align-items: center;
border-right: none;
border-bottom: solid 3px transparent;
border-left: none;
border-top: none;
@include hover-focus() {
@include hover-navbar();
}
&.active {
font-weight: bold;
border-bottom: solid 3px $blue;
}
&[data-toggle="tab"] {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: center;
&::after {
content: attr(data-text) / "";
height: 0;
visibility: hidden;
overflow: hidden;
user-select: none;
pointer-events: none;
font-weight: bold;
@media speech {
display: none;
}
}
}
}
.nav-tabs {
margin-left: 0;
background-color: $body-bg;
}
.show > .nav-link,
.active > .nav-link,
.nav-link.show,
.nav-link.active {
background: transparent;
}
// Styling for dropdown menus inside the MoreButton.
.dropdownmoremenu > .dropdown-menu {
& > .dropdown-item {

View File

@ -1,7 +1,12 @@
@mixin hover-navbar {
background-color: $gray-200;
}
.navbar.fixed-top {
padding-top: 0;
padding-bottom: 0;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
box-shadow: none;
border-bottom: $gray-300 1px solid;
align-items: stretch;
height: $navbar-height;
@ -24,6 +29,10 @@
#usernavigation .nav-link {
padding: 0 $primary-nav-padding-x;
}
.login {
display: flex;
align-items: center;
}
.usermenu {
display: flex;
.action-menu {
@ -41,9 +50,6 @@
align-items: center;
height: 100%;
}
.dropdown-toggle::after {
display: none;
}
}
.dropdown-menu {
min-width: 235px;
@ -90,6 +96,22 @@
align-items: center;
}
}
.usermenu,
.langmenu {
.dropdown {
display: flex;
align-items: center;
height: 100%;
.dropdown-toggle {
padding-top: 0;
padding-bottom: 0;
border-radius: 0;
display: flex;
align-items: center;
height: 100%;
}
}
}
.langmenu {
.dropdown-menu {
.dropdown-item {

View File

@ -173,6 +173,14 @@ $content-header-footer-height: $region-header-height + $region-footer-height;
}
}
.navbar-nav {
.popover-region {
.icon {
font-weight: bolder;
}
}
}
.navbar {
.popover-region {
&.collapsed {

View File

@ -1,8 +1,9 @@
.navbar.fixed-top {
.moremenu {
.primary-navigation {
.navigation {
height: $navbar-height;
.nav-link {
height: $navbar-height;
color: $gray-900;
}
}
}

View File

@ -1,6 +1,9 @@
.secondarynavigation {
z-index: 1;
.moremenu {
margin-bottom: -1px;
.secondary-navigation {
border-top: 1px solid $gray-300;
border-bottom: 1px solid $gray-300;
.navigation {
border-color: $gray-300;
height: $moremenu-height;
margin-bottom: map-get($spacers, 3);
}
}

View File

@ -22,10 +22,10 @@ $state-danger-border: theme-color-level("danger", -9) !default;
$primary-nav-padding-y: ($spacer / 4) !default;
$primary-nav-padding-x: ($spacer / 2) !default;
$navbar-height: 50px !default;
$navbar-height: 60px !default;
$course-content-maxwidth: 800px;
$box-shadow-drawer-left: -0.25rem .25rem .8rem rgba($black, .025) !default;
$box-shadow-drawer-right: 0 .25rem .8rem rgba($black, .025) !default;
$moremenu-height: 40px !default;
$moremenu-height: 60px !default;

View File

@ -11525,6 +11525,9 @@ img#persona_signin {
border-width: 0; }
/** Page header */
#page-header h1.h2 {
font-weight: bold; }
#page-header .logo {
margin: 1rem 0; }
#page-header .logo img {
@ -14452,7 +14455,7 @@ span.editinstructions {
/* Anchor link offset fix. This makes hash links scroll 60px down to account for the fixed header. */
:target {
scroll-margin-top: 60px; }
scroll-margin-top: 70px; }
.pagelayout-embedded :target {
padding-top: initial;
@ -14468,8 +14471,8 @@ span.editinstructions {
[data-region="drawer"] {
position: fixed;
width: 285px;
top: 50px;
height: calc(100% - 50px);
top: 60px;
height: calc(100% - 60px);
overflow-y: auto;
-webkit-overflow-scrolling: touch;
z-index: 999;
@ -14503,7 +14506,7 @@ span.editinstructions {
margin-bottom: 0; }
#page {
margin-top: 50px; }
margin-top: 60px; }
.pagelayout-embedded #page {
margin-top: 0; }
@ -14536,9 +14539,9 @@ body.drawer-ease {
[data-region=right-hand-drawer].drawer {
z-index: 1021;
position: fixed;
top: 50px;
top: 60px;
right: 0;
height: calc(100% - 50px);
height: calc(100% - 60px);
width: 320px;
box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.08);
padding: 0;
@ -14655,7 +14658,7 @@ body.drawer-ease {
.drawerheader {
padding: 0 0.75rem;
height: 50px;
height: 60px;
display: flex;
align-items: center;
border-bottom: 1px solid #dee2e6; }
@ -14664,7 +14667,7 @@ body.drawer-ease {
.drawercontent {
position: relative;
height: calc(100% - 50px);
height: calc(100% - 60px);
display: flex;
flex-direction: column;
flex-wrap: nowrap;
@ -16779,7 +16782,7 @@ body.path-question-type .mform fieldset.hidden {
display: flex;
background-color: #fff;
z-index: 1060;
height: 50px; }
height: 60px; }
.simplesearchform .collapse.show .form-inline,
.simplesearchform .collapsing .form-inline {
width: auto;
@ -17242,13 +17245,6 @@ select {
.path-mod-forum .discussion-list .topic {
font-weight: inherit; }
.path-mod-forum .subscriptionmode {
color: #212529; }
.path-mod-forum .activesetting {
color: #212529;
font-weight: bold; }
.discussion-settings-container .custom-select {
width: 100%; }
@ -17912,8 +17908,8 @@ div#dock {
.userloggedinas .usermenu .usertext .meta,
.userswitchedrole .usermenu .usertext .meta,
.loginfailures .usermenu .usertext .meta {
display: block;
font-size: 0.8203125rem; }
font-size: 0.8203125rem;
align-items: center; }
.userloggedinas .usermenu .avatar img,
.userswitchedrole .usermenu .avatar img,
@ -18091,7 +18087,7 @@ div#dock {
display: none;
position: sticky;
justify-content: end;
top: 55px;
top: 65px;
z-index: 1020; }
#quiz-timer-wrapper #quiz-timer {
border: 1px solid #ca3120;
@ -19143,7 +19139,7 @@ body:not(.jsenabled) .langmenu:hover > .dropdown-menu,
overflow-y: auto; }
.navbar.fixed-top .dropdown .dropdown-menu {
max-height: calc(100vh - 50px);
max-height: calc(100vh - 60px);
overflow-y: auto; }
.page-item.active .page-link, .page-item.active .page-link:hover, .page-item.active .page-link:focus {
@ -19444,6 +19440,9 @@ body {
.popover-region-content-container.loading .empty-message {
display: none; }
.navbar-nav .popover-region .icon {
font-weight: bolder; }
.navbar .popover-region.collapsed .popover-region-container {
opacity: 0;
visibility: hidden;
@ -19463,7 +19462,7 @@ body {
right: 0; }
.navbar .popover-region-container {
top: calc(50px - (1rem / 2)); }
top: calc(60px - (1rem / 2)); }
.content-item-container {
width: 100%;
@ -19790,7 +19789,7 @@ span[data-flexitour="container"][x-placement="right"], span[data-flexitour="cont
font-size: 4em; }
#page.drawers {
margin-top: calc(50px + 2rem);
margin-top: calc(60px + 2rem);
padding-left: 15px;
padding-right: 15px; }
#page.drawers .main-inner {
@ -19804,7 +19803,7 @@ span[data-flexitour="container"][x-placement="right"], span[data-flexitour="cont
.drawer-left-toggle {
position: fixed;
top: calc(50px + 0.5rem);
top: calc(60px + 0.5rem);
left: 0;
z-index: 2; }
.drawer-left-toggle .btn {
@ -19823,7 +19822,7 @@ span[data-flexitour="container"][x-placement="right"], span[data-flexitour="cont
.drawer-right-toggle {
position: fixed;
top: calc(50px + 0.5rem);
top: calc(60px + 0.5rem);
right: 0;
z-index: 2; }
.drawer-right-toggle .btn {
@ -19857,21 +19856,21 @@ span[data-flexitour="container"][x-placement="right"], span[data-flexitour="cont
@media (min-width: 768px) {
#page.drawers {
margin-top: 50px;
margin-top: 60px;
padding-left: 3rem;
padding-right: 3rem; } }
@media (min-width: 992px) {
.drawer-left,
.drawer-right {
top: calc(50px + 1px);
height: calc(100vh - 50px); }
top: calc(60px + 1px);
height: calc(100vh - 60px); }
#page.drawers {
position: relative;
overflow-y: auto;
transition: 0.2s;
height: calc(100vh - 50px);
margin-top: 50px;
height: calc(100vh - 60px);
margin-top: 60px;
left: 0;
right: 0; }
#page.drawers.show-drawer-left {
@ -20331,11 +20330,12 @@ div.editor_atto_toolbar button .icon {
.navbar.fixed-top {
padding-top: 0;
padding-bottom: 0;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
box-shadow: none;
border-bottom: #dee2e6 1px solid;
align-items: stretch;
height: 50px; }
height: 60px; }
.navbar.fixed-top .navbar-brand .logo {
max-height: calc(50px - (0.25rem * 2)); }
max-height: calc(60px - (0.25rem * 2)); }
.navbar.fixed-top .nav-link {
height: 100%;
display: flex;
@ -20346,6 +20346,9 @@ div.editor_atto_toolbar button .icon {
background-color: #dee2e6; }
.navbar.fixed-top #usernavigation .nav-link {
padding: 0 0.5rem; }
.navbar.fixed-top .login {
display: flex;
align-items: center; }
.navbar.fixed-top .usermenu {
display: flex; }
.navbar.fixed-top .usermenu .action-menu {
@ -20361,8 +20364,6 @@ div.editor_atto_toolbar button .icon {
display: flex;
align-items: center;
height: 100%; }
.navbar.fixed-top .usermenu .dropdown .dropdown-toggle::after {
display: none; }
.navbar.fixed-top .usermenu .dropdown-menu {
min-width: 235px; }
.navbar.fixed-top .usermenu .dropdown-menu .carousel-navigation-link > * {
@ -20391,6 +20392,19 @@ div.editor_atto_toolbar button .icon {
.navbar.fixed-top .usermenu .login {
display: flex;
align-items: center; }
.navbar.fixed-top .usermenu .dropdown,
.navbar.fixed-top .langmenu .dropdown {
display: flex;
align-items: center;
height: 100%; }
.navbar.fixed-top .usermenu .dropdown .dropdown-toggle,
.navbar.fixed-top .langmenu .dropdown .dropdown-toggle {
padding-top: 0;
padding-bottom: 0;
border-radius: 0;
display: flex;
align-items: center;
height: 100%; }
.navbar.fixed-top .langmenu .dropdown-menu .dropdown-item[aria-current="true"]::before {
content: "\f00c";
font-size: 0.75rem;
@ -20416,7 +20430,7 @@ div.editor_atto_toolbar button .icon {
transform: translateX(100%); }
#page {
margin-top: 50px; }
margin-top: 60px; }
/* Rportbuilder */
.reportbuilder-table-wrapper .filters-dropdown {
@ -20509,15 +20523,46 @@ div.editor_atto_toolbar button .icon {
.moremenu {
opacity: 0;
height: 40px; }
height: 60px; }
.moremenu.observed {
opacity: 1; }
.moremenu .nav-link {
height: 40px;
height: 60px;
display: flex;
align-items: center; }
align-items: center;
border-right: none;
border-bottom: solid 3px transparent;
border-left: none;
border-top: none; }
.moremenu .nav-link:hover, .moremenu .nav-link:focus {
background-color: #e9ecef; }
.moremenu .nav-link.active {
font-weight: bold;
border-bottom: solid 3px #0f6fc5; }
.moremenu .nav-link[data-toggle="tab"] {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: center; }
.moremenu .nav-link[data-toggle="tab"]::after {
content: attr(data-text)/"";
height: 0;
visibility: hidden;
overflow: hidden;
user-select: none;
pointer-events: none;
font-weight: bold; }
@media speech {
.moremenu .nav-link[data-toggle="tab"]::after {
display: none; } }
.moremenu .nav-tabs {
margin-left: 0; }
margin-left: 0;
background-color: #fff; }
.moremenu .show > .nav-link,
.moremenu .active > .nav-link,
.moremenu .nav-link.show,
.moremenu .nav-link.active {
background: transparent; }
.moremenu .dropdownmoremenu > .dropdown-menu > .dropdown-item {
padding: 0; }
.moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu {
@ -20534,15 +20579,19 @@ div.editor_atto_toolbar button .icon {
.moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu .dropdown-divider {
display: none; }
.navbar.fixed-top .moremenu {
height: 50px; }
.navbar.fixed-top .moremenu .nav-link {
height: 50px; }
.primary-navigation .navigation {
height: 60px; }
.primary-navigation .navigation .nav-link {
height: 60px;
color: #212529; }
.secondarynavigation {
z-index: 1; }
.secondarynavigation .moremenu {
margin-bottom: -1px; }
.secondary-navigation {
border-top: 1px solid #dee2e6;
border-bottom: 1px solid #dee2e6; }
.secondary-navigation .navigation {
border-color: #dee2e6;
height: 60px;
margin-bottom: 1rem; }
body {
-webkit-font-smoothing: antialiased;

View File

@ -62,11 +62,11 @@
<div id="page" class="container-fluid d-print-block">
{{{ output.full_header }}}
<div class="secondarynavigation">
{{#secondarymoremenu}}
{{> core/moremenu}}
<div class="secondary-navigation">
{{> core/moremenu}}
</div>
{{/secondarymoremenu}}
</div>
<div id="page-content" class="row pb-3 d-print-block">
<div id="region-main-box" class="col-12">
{{#hasregionmainsettingsmenu}}

View File

@ -111,11 +111,11 @@
{{/hasblocks}}
</div>
{{{ output.full_header }}}
<div class="secondarynavigation">
{{#secondarymoremenu}}
{{#secondarymoremenu}}
<div class="secondary-navigation">
{{> core/moremenu}}
{{/secondarymoremenu}}
</div>
</div>
{{/secondarymoremenu}}
<div id="page-content" class="pb-3 d-print-block">
<div id="region-main-box">
{{#hasregionmainsettingsmenu}}

View File

@ -29,7 +29,7 @@
}
}}
<nav class="navbar fixed-top navbar-light bg-white navbar-expand" aria-label="{{#str}}sitemenubar, admin{{/str}}">
<div class="navbar-brand d-flex align-items-center m-1 p-0 aabtn">
<div class="navbar-brand d-flex align-items-center m-0 p-0 aabtn">
{{# output.should_display_navbar_logo }}
<img src="{{output.get_compact_logo_url}}" class="logo mr-1" alt="{{sitename}}">
{{/ output.should_display_navbar_logo }}

View File

@ -46,14 +46,18 @@
</button>
</div>
<a href="{{{ config.wwwroot }}}" class="navbar-brand d-flex align-items-center m-1 p-0 aabtn">
<a href="{{{ config.wwwroot }}}" class="navbar-brand d-flex align-items-center m-0 p-0 aabtn">
{{# output.should_display_navbar_logo }}
<img src="{{output.get_compact_logo_url}}" class="logo mr-1" alt="{{sitename}}">
{{/ output.should_display_navbar_logo }}
{{{ sitename }}}
{{^ output.should_display_navbar_logo }}
{{{ sitename }}}
{{/ output.should_display_navbar_logo }}
</a>
{{#primarymoremenu}}
{{> core/moremenu }}
<div class="primary-navigation">
{{> core/moremenu}}
</div>
{{/primarymoremenu}}
<ul class="navbar-nav d-none d-md-flex my-1 px-1">
@ -61,11 +65,10 @@
{{{ output.page_heading_menu }}}
</ul>
<div id="usernavigation" class="navbar-nav my-1 ml-auto">
<div id="usernavigation" class="navbar-nav ml-auto">
{{#langmenu}}
{{> theme_boost/language_menu }}
{{/langmenu}}
<div class="divider border-left h-50 align-self-center mx-1"></div>
{{{ output.search_box }}}
{{{ output.navbar_plugin_output }}}
<div class="d-flex align-items-stretch usermenu-container" data-region="usermenu">
@ -73,6 +76,7 @@
{{> core/user_menu }}
{{/usermenu}}
</div>
<div class="divider border-left h-75 align-self-center ml-1 mr-3"></div>
{{{ output.edit_switch }}}
</div>
</nav>

View File

@ -2,3 +2,6 @@
// Disable the Boost theme reset styling and fixed width content.
$allow-reset-style: false;
$navbar-height: 50px;
$moremenu-height: 50px;

View File

@ -1,2 +1,19 @@
// Import Boost Core moodle CSS
@import "../../boost/scss/moodle";
@import "../../boost/scss/moodle";
img.userpicture {
margin-right: 0.5rem;
}
.path-mod-forum {
// Style for the forum subscription mode node.
.subscriptionmode {
color: $body-color;
}
// Style for the currently selected subscription mode.
.activesetting {
color: $body-color;
font-weight: bold;
}
}

View File

@ -11525,6 +11525,9 @@ img#persona_signin {
border-width: 0; }
/** Page header */
#page-header h1.h2 {
font-weight: bold; }
#page-header .logo {
margin: 1rem 0; }
#page-header .logo img {
@ -17242,13 +17245,6 @@ select {
.path-mod-forum .discussion-list .topic {
font-weight: inherit; }
.path-mod-forum .subscriptionmode {
color: #212529; }
.path-mod-forum .activesetting {
color: #212529;
font-weight: bold; }
.discussion-settings-container .custom-select {
width: 100%; }
@ -17912,8 +17908,8 @@ div#dock {
.userloggedinas .usermenu .usertext .meta,
.userswitchedrole .usermenu .usertext .meta,
.loginfailures .usermenu .usertext .meta {
display: block;
font-size: 0.8203125rem; }
font-size: 0.8203125rem;
align-items: center; }
.userloggedinas .usermenu .avatar img,
.userswitchedrole .usermenu .avatar img,
@ -19390,6 +19386,9 @@ body {
.popover-region-content-container.loading .empty-message {
display: none; }
.navbar-nav .popover-region .icon {
font-weight: bolder; }
.navbar .popover-region.collapsed .popover-region-container {
opacity: 0;
visibility: hidden;
@ -20277,7 +20276,8 @@ div.editor_atto_toolbar button .icon {
.navbar.fixed-top {
padding-top: 0;
padding-bottom: 0;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
box-shadow: none;
border-bottom: #dee2e6 1px solid;
align-items: stretch;
height: 50px; }
.navbar.fixed-top .navbar-brand .logo {
@ -20292,6 +20292,9 @@ div.editor_atto_toolbar button .icon {
background-color: #dee2e6; }
.navbar.fixed-top #usernavigation .nav-link {
padding: 0 0.5rem; }
.navbar.fixed-top .login {
display: flex;
align-items: center; }
.navbar.fixed-top .usermenu {
display: flex; }
.navbar.fixed-top .usermenu .action-menu {
@ -20307,8 +20310,6 @@ div.editor_atto_toolbar button .icon {
display: flex;
align-items: center;
height: 100%; }
.navbar.fixed-top .usermenu .dropdown .dropdown-toggle::after {
display: none; }
.navbar.fixed-top .usermenu .dropdown-menu {
min-width: 235px; }
.navbar.fixed-top .usermenu .dropdown-menu .carousel-navigation-link > * {
@ -20337,6 +20338,19 @@ div.editor_atto_toolbar button .icon {
.navbar.fixed-top .usermenu .login {
display: flex;
align-items: center; }
.navbar.fixed-top .usermenu .dropdown,
.navbar.fixed-top .langmenu .dropdown {
display: flex;
align-items: center;
height: 100%; }
.navbar.fixed-top .usermenu .dropdown .dropdown-toggle,
.navbar.fixed-top .langmenu .dropdown .dropdown-toggle {
padding-top: 0;
padding-bottom: 0;
border-radius: 0;
display: flex;
align-items: center;
height: 100%; }
.navbar.fixed-top .langmenu .dropdown-menu .dropdown-item[aria-current="true"]::before {
content: "\f00c";
font-size: 0.75rem;
@ -20455,15 +20469,46 @@ div.editor_atto_toolbar button .icon {
.moremenu {
opacity: 0;
height: 40px; }
height: 50px; }
.moremenu.observed {
opacity: 1; }
.moremenu .nav-link {
height: 40px;
height: 50px;
display: flex;
align-items: center; }
align-items: center;
border-right: none;
border-bottom: solid 3px transparent;
border-left: none;
border-top: none; }
.moremenu .nav-link:hover, .moremenu .nav-link:focus {
background-color: #e9ecef; }
.moremenu .nav-link.active {
font-weight: bold;
border-bottom: solid 3px #0f6fc5; }
.moremenu .nav-link[data-toggle="tab"] {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: center; }
.moremenu .nav-link[data-toggle="tab"]::after {
content: attr(data-text)/"";
height: 0;
visibility: hidden;
overflow: hidden;
user-select: none;
pointer-events: none;
font-weight: bold; }
@media speech {
.moremenu .nav-link[data-toggle="tab"]::after {
display: none; } }
.moremenu .nav-tabs {
margin-left: 0; }
margin-left: 0;
background-color: #fff; }
.moremenu .show > .nav-link,
.moremenu .active > .nav-link,
.moremenu .nav-link.show,
.moremenu .nav-link.active {
background: transparent; }
.moremenu .dropdownmoremenu > .dropdown-menu > .dropdown-item {
padding: 0; }
.moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu {
@ -20480,15 +20525,19 @@ div.editor_atto_toolbar button .icon {
.moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu .dropdown-divider {
display: none; }
.navbar.fixed-top .moremenu {
.primary-navigation .navigation {
height: 50px; }
.navbar.fixed-top .moremenu .nav-link {
height: 50px; }
.primary-navigation .navigation .nav-link {
height: 50px;
color: #212529; }
.secondarynavigation {
z-index: 1; }
.secondarynavigation .moremenu {
margin-bottom: -1px; }
.secondary-navigation {
border-top: 1px solid #dee2e6;
border-bottom: 1px solid #dee2e6; }
.secondary-navigation .navigation {
border-color: #dee2e6;
height: 50px;
margin-bottom: 1rem; }
body {
-webkit-font-smoothing: antialiased;

View File

@ -51,8 +51,7 @@ Feature: Users' names are displayed across the site according to the user policy
Scenario: As an authenticated user, 'fullnamedisplay' should be used in the navigation and when viewing my profile
Given I log in as "user1"
When I follow "Profile" in the user menu
Then I should see "Gronya,Beecham" in the ".usermenu" "css_element"
And I should see "Gronya,Beecham" in the ".page-context-header" "css_element"
Then I should see "Gronya,Beecham" in the ".page-context-header" "css_element"
And I should see "You are logged in as Gronya,Beecham" in the "page-footer" "region"
And I log out