mirror of
https://github.com/moodle/moodle.git
synced 2025-04-14 04:52:36 +02:00
Merge branch 'MDL-75762-master' of https://github.com/laurentdavid/moodle
This commit is contained in:
commit
04ee9570ac
2
course/format/amd/build/local/content.min.js
vendored
2
course/format/amd/build/local/content.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -54,7 +54,6 @@ export default class Component extends BaseComponent {
|
||||
SECTION_CMLIST: `[data-for='cmlist']`,
|
||||
COURSE_SECTIONLIST: `[data-for='course_sectionlist']`,
|
||||
CM: `[data-for='cmitem']`,
|
||||
PAGE: `#page`,
|
||||
TOGGLER: `[data-action="togglecoursecontentsection"]`,
|
||||
COLLAPSE: `[data-toggle="collapse"]`,
|
||||
TOGGLEALL: `[data-toggle="toggleall"]`,
|
||||
@ -146,10 +145,13 @@ export default class Component extends BaseComponent {
|
||||
|
||||
// Capture page scroll to update page item.
|
||||
this.addEventListener(
|
||||
document.querySelector(this.selectors.PAGE),
|
||||
document,
|
||||
"scroll",
|
||||
this._scrollHandler
|
||||
);
|
||||
setTimeout(() => {
|
||||
this._scrollHandler();
|
||||
}, 500);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -339,7 +341,7 @@ export default class Component extends BaseComponent {
|
||||
* Check the current page scroll and update the active element if necessary.
|
||||
*/
|
||||
_scrollHandler() {
|
||||
const pageOffset = document.querySelector(this.selectors.PAGE).scrollTop;
|
||||
const pageOffset = window.scrollY;
|
||||
const items = this.reactive.getExporter().allItemsArray(this.reactive.state);
|
||||
// Check what is the active element now.
|
||||
let pageItem = null;
|
||||
|
@ -40,6 +40,7 @@ class behat_grade extends behat_base {
|
||||
* @param string $itemname
|
||||
*/
|
||||
public function i_give_the_grade($grade, $userfullname, $itemname) {
|
||||
$this->execute('behat_navigation::i_close_block_drawer_if_open');
|
||||
$gradelabel = $userfullname . ' ' . $itemname;
|
||||
$fieldstr = get_string('useractivitygrade', 'gradereport_grader', $gradelabel);
|
||||
|
||||
@ -58,6 +59,7 @@ class behat_grade extends behat_base {
|
||||
* @param TableNode $data
|
||||
*/
|
||||
public function i_set_the_following_settings_for_grade_item(string $gradeitem, string $type, string $page, TableNode $data) {
|
||||
$this->execute("behat_navigation::i_close_block_drawer_if_open");
|
||||
|
||||
if ($this->running_javascript()) {
|
||||
$this->execute("behat_grades::i_click_on_grade_item_menu", [$gradeitem, $type, $page]);
|
||||
|
@ -237,7 +237,7 @@ class behat_grades extends behat_base {
|
||||
* @throws Exception
|
||||
*/
|
||||
public function i_click_on_grade_item_menu(string $itemname, string $itemtype, string $page) {
|
||||
|
||||
$this->execute("behat_navigation::i_close_block_drawer_if_open");
|
||||
if ($itemtype == 'gradeitem') {
|
||||
$itemid = $this->get_grade_item_id($itemname);
|
||||
} else if ($itemtype == 'category') {
|
||||
@ -265,6 +265,8 @@ class behat_grades extends behat_base {
|
||||
} else {
|
||||
throw new Exception('Unknown page: ' . $page);
|
||||
}
|
||||
$node = $this->get_selected_node("xpath_element", $this->escape($xpath));
|
||||
$this->execute_js_on_node($node, '{{ELEMENT}}.scrollIntoView({ block: "center", inline: "center" })');
|
||||
$this->execute("behat_general::i_click_on", [$this->escape($xpath), "xpath_element"]);
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,6 @@ require_once(__DIR__ . '/../../behat/behat_base.php');
|
||||
|
||||
use Behat\Mink\Element\NodeElement;
|
||||
use Behat\Mink\Exception\ExpectationException as ExpectationException;
|
||||
use Behat\Mink\Exception\DriverException as DriverException;
|
||||
use Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException;
|
||||
|
||||
/**
|
||||
@ -1510,4 +1509,36 @@ class behat_navigation extends behat_base {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the block drawer if it is open.
|
||||
*
|
||||
* This is necessary as in Behat the block drawer is open at each page load (disregarding user's settings)
|
||||
* As the block drawer is positioned at the front of some contextual dialogs on the grade report for example.
|
||||
* @Given I close block drawer if open
|
||||
* @return void
|
||||
*/
|
||||
public function i_close_block_drawer_if_open() {
|
||||
if ($this->running_javascript()) {
|
||||
$xpath = "//button[contains(@data-action,'closedrawer')][contains(@data-placement,'left')]";
|
||||
$node = $this->getSession()->getPage()->find('xpath', $xpath);
|
||||
if ($node && $node->isVisible()) {
|
||||
$ishidden = $node->getAttribute('aria-hidden-tab-index');
|
||||
if (!$ishidden) {
|
||||
$this->execute('behat_general::i_click_on', [$node, 'NodeElement']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* I close the block drawer and keep it closed.
|
||||
*
|
||||
* @Given I keep block drawer closed
|
||||
* @return void
|
||||
*/
|
||||
public function i_keep_block_drawer_closed() {
|
||||
set_user_preference('behat_keep_drawer_closed', 1);
|
||||
$this->i_close_block_drawer_if_open();
|
||||
}
|
||||
}
|
||||
|
@ -83,6 +83,9 @@ information provided here is intended especially for developers.
|
||||
* help_icon constructor has a new optional $a parameter to allow variables with translation strings.
|
||||
* The random_bytes_emulate() function has been deprecated, because it's not required anymore. PHP native function random_bytes()
|
||||
should be used instead.
|
||||
* New behat behat_navigation::i_close_block_drawer_if_open() and behat_navigation::i_keep_block_drawer_closed()
|
||||
to ensure in some test that the block drawer is closed. This helps with random failures due to the block drawer
|
||||
being forced open in all behat tests.
|
||||
|
||||
=== 4.2 ===
|
||||
|
||||
|
2
theme/boost/amd/build/drawers.min.js
vendored
2
theme/boost/amd/build/drawers.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
theme/boost/amd/build/footer-popover.min.js
vendored
2
theme/boost/amd/build/footer-popover.min.js
vendored
@ -5,6 +5,6 @@ define("theme_boost/footer-popover",["exports","jquery","./popover"],(function(_
|
||||
* @module theme_boost/footer-popover
|
||||
* @copyright 2021 Bas Brands
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popover=_interopRequireDefault(_popover);const SELECTORS_FOOTERCONTAINER='[data-region="footer-container-popover"]',SELECTORS_FOOTERCONTENT='[data-region="footer-content-popover"]',SELECTORS_FOOTERBUTTON='[data-action="footer-popover"]';let footerIsShown=!1;_exports.init=()=>{const container=document.querySelector(SELECTORS_FOOTERCONTAINER),footerButton=document.querySelector(SELECTORS_FOOTERBUTTON);(0,_jquery.default)(footerButton).popover({content:getFooterContent,container:container,html:!0,placement:"top",customClass:"footer",trigger:"click"}),document.addEventListener("click",(e=>{footerIsShown&&!e.target.closest(SELECTORS_FOOTERCONTAINER)&&(0,_jquery.default)(footerButton).popover("hide")}),!0),document.addEventListener("keydown",(e=>{footerIsShown&&"Escape"===e.key&&((0,_jquery.default)(footerButton).popover("hide"),footerButton.focus())})),document.addEventListener("focus",(e=>{footerIsShown&&!e.target.closest(SELECTORS_FOOTERCONTAINER)&&(0,_jquery.default)(footerButton).popover("hide")}),!0),(0,_jquery.default)(footerButton).on("show.bs.popover",(()=>{footerIsShown=!0})),(0,_jquery.default)(footerButton).on("hide.bs.popover",(()=>{footerIsShown=!1}))};const getFooterContent=()=>document.querySelector(SELECTORS_FOOTERCONTENT).innerHTML}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popover=_interopRequireDefault(_popover);const SELECTORS_FOOTERCONTAINER='[data-region="footer-container-popover"]',SELECTORS_FOOTERCONTENT='[data-region="footer-content-popover"]',SELECTORS_FOOTERBUTTON='[data-action="footer-popover"]';let footerIsShown=!1;_exports.init=()=>{const container=document.querySelector(SELECTORS_FOOTERCONTAINER),footerButton=document.querySelector(SELECTORS_FOOTERBUTTON);(0,_jquery.default)(footerButton).popover({content:getFooterContent,container:container,html:!0,placement:"top",customClass:"footer",trigger:"click",boundary:"viewport",popperConfig:{modifiers:{preventOverflow:{boundariesElement:"viewport",padding:48},offset:{},flip:{behavior:"flip"},arrow:{element:".arrow"}}}}),document.addEventListener("click",(e=>{footerIsShown&&!e.target.closest(SELECTORS_FOOTERCONTAINER)&&(0,_jquery.default)(footerButton).popover("hide")}),!0),document.addEventListener("keydown",(e=>{footerIsShown&&"Escape"===e.key&&((0,_jquery.default)(footerButton).popover("hide"),footerButton.focus())})),document.addEventListener("focus",(e=>{footerIsShown&&!e.target.closest(SELECTORS_FOOTERCONTAINER)&&(0,_jquery.default)(footerButton).popover("hide")}),!0),(0,_jquery.default)(footerButton).on("show.bs.popover",(()=>{footerIsShown=!0})),(0,_jquery.default)(footerButton).on("hide.bs.popover",(()=>{footerIsShown=!1}))};const getFooterContent=()=>document.querySelector(SELECTORS_FOOTERCONTENT).innerHTML}));
|
||||
|
||||
//# sourceMappingURL=footer-popover.min.js.map
|
@ -1 +1 @@
|
||||
{"version":3,"file":"footer-popover.min.js","sources":["../src/footer-popover.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Shows the footer content in a popover.\n *\n * @module theme_boost/footer-popover\n * @copyright 2021 Bas Brands\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Popover from './popover';\n\nconst SELECTORS = {\n FOOTERCONTAINER: '[data-region=\"footer-container-popover\"]',\n FOOTERCONTENT: '[data-region=\"footer-content-popover\"]',\n FOOTERBUTTON: '[data-action=\"footer-popover\"]'\n};\n\nlet footerIsShown = false;\n\nexport const init = () => {\n const container = document.querySelector(SELECTORS.FOOTERCONTAINER);\n const footerButton = document.querySelector(SELECTORS.FOOTERBUTTON);\n\n // All jQuery in this code can be replaced when MDL-71979 is integrated.\n $(footerButton).popover({\n content: getFooterContent,\n container: container,\n html: true,\n placement: 'top',\n customClass: 'footer',\n trigger: 'click'\n });\n\n document.addEventListener('click', e => {\n if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) {\n $(footerButton).popover('hide');\n }\n },\n true);\n\n document.addEventListener('keydown', e => {\n if (footerIsShown && e.key === 'Escape') {\n $(footerButton).popover('hide');\n footerButton.focus();\n }\n });\n\n document.addEventListener('focus', e => {\n if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) {\n $(footerButton).popover('hide');\n }\n },\n true);\n\n $(footerButton).on('show.bs.popover', () => {\n footerIsShown = true;\n });\n\n $(footerButton).on('hide.bs.popover', () => {\n footerIsShown = false;\n });\n};\n\n/**\n * Get the footer content for popover.\n *\n * @returns {String} HTML string\n * @private\n */\nconst getFooterContent = () => {\n return document.querySelector(SELECTORS.FOOTERCONTENT).innerHTML;\n};\n\nexport {\n Popover\n};\n"],"names":["SELECTORS","footerIsShown","container","document","querySelector","footerButton","popover","content","getFooterContent","html","placement","customClass","trigger","addEventListener","e","target","closest","key","focus","on","innerHTML"],"mappings":";;;;;;;4QA0BMA,0BACe,2CADfA,wBAEa,yCAFbA,uBAGY,qCAGdC,eAAgB,gBAEA,WACVC,UAAYC,SAASC,cAAcJ,2BACnCK,aAAeF,SAASC,cAAcJ,4CAG1CK,cAAcC,QAAQ,CACpBC,QAASC,iBACTN,UAAWA,UACXO,MAAM,EACNC,UAAW,MACXC,YAAa,SACbC,QAAS,UAGbT,SAASU,iBAAiB,SAASC,IAC3Bb,gBAAkBa,EAAEC,OAAOC,QAAQhB,gDACjCK,cAAcC,QAAQ,WAGhC,GAEAH,SAASU,iBAAiB,WAAWC,IAC7Bb,eAA2B,WAAVa,EAAEG,0BACjBZ,cAAcC,QAAQ,QACxBD,aAAaa,YAIrBf,SAASU,iBAAiB,SAASC,IAC3Bb,gBAAkBa,EAAEC,OAAOC,QAAQhB,gDACjCK,cAAcC,QAAQ,WAGhC,uBAEED,cAAcc,GAAG,mBAAmB,KAClClB,eAAgB,yBAGlBI,cAAcc,GAAG,mBAAmB,KAClClB,eAAgB,YAUlBO,iBAAmB,IACdL,SAASC,cAAcJ,yBAAyBoB"}
|
||||
{"version":3,"file":"footer-popover.min.js","sources":["../src/footer-popover.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Shows the footer content in a popover.\n *\n * @module theme_boost/footer-popover\n * @copyright 2021 Bas Brands\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Popover from './popover';\n\nconst SELECTORS = {\n FOOTERCONTAINER: '[data-region=\"footer-container-popover\"]',\n FOOTERCONTENT: '[data-region=\"footer-content-popover\"]',\n FOOTERBUTTON: '[data-action=\"footer-popover\"]'\n};\n\nlet footerIsShown = false;\n\nexport const init = () => {\n const container = document.querySelector(SELECTORS.FOOTERCONTAINER);\n const footerButton = document.querySelector(SELECTORS.FOOTERBUTTON);\n\n // All jQuery in this code can be replaced when MDL-71979 is integrated.\n $(footerButton).popover({\n content: getFooterContent,\n container: container,\n html: true,\n placement: 'top',\n customClass: 'footer',\n trigger: 'click',\n boundary: 'viewport',\n popperConfig: {\n modifiers: {\n preventOverflow: {\n boundariesElement: 'viewport',\n padding: 48\n },\n offset: {},\n flip: {\n behavior: 'flip'\n },\n arrow: {\n element: '.arrow'\n },\n }\n }\n });\n\n document.addEventListener('click', e => {\n if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) {\n $(footerButton).popover('hide');\n }\n },\n true);\n\n document.addEventListener('keydown', e => {\n if (footerIsShown && e.key === 'Escape') {\n $(footerButton).popover('hide');\n footerButton.focus();\n }\n });\n\n document.addEventListener('focus', e => {\n if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) {\n $(footerButton).popover('hide');\n }\n },\n true);\n\n $(footerButton).on('show.bs.popover', () => {\n footerIsShown = true;\n });\n\n $(footerButton).on('hide.bs.popover', () => {\n footerIsShown = false;\n });\n};\n\n/**\n * Get the footer content for popover.\n *\n * @returns {String} HTML string\n * @private\n */\nconst getFooterContent = () => {\n return document.querySelector(SELECTORS.FOOTERCONTENT).innerHTML;\n};\n\nexport {\n Popover\n};\n"],"names":["SELECTORS","footerIsShown","container","document","querySelector","footerButton","popover","content","getFooterContent","html","placement","customClass","trigger","boundary","popperConfig","modifiers","preventOverflow","boundariesElement","padding","offset","flip","behavior","arrow","element","addEventListener","e","target","closest","key","focus","on","innerHTML"],"mappings":";;;;;;;4QA0BMA,0BACe,2CADfA,wBAEa,yCAFbA,uBAGY,qCAGdC,eAAgB,gBAEA,WACVC,UAAYC,SAASC,cAAcJ,2BACnCK,aAAeF,SAASC,cAAcJ,4CAG1CK,cAAcC,QAAQ,CACpBC,QAASC,iBACTN,UAAWA,UACXO,MAAM,EACNC,UAAW,MACXC,YAAa,SACbC,QAAS,QACTC,SAAU,WACVC,aAAc,CACVC,UAAW,CACPC,gBAAiB,CACbC,kBAAmB,WACnBC,QAAS,IAEbC,OAAQ,GACRC,KAAM,CACFC,SAAU,QAEdC,MAAO,CACHC,QAAS,cAMzBpB,SAASqB,iBAAiB,SAASC,IAC3BxB,gBAAkBwB,EAAEC,OAAOC,QAAQ3B,gDACjCK,cAAcC,QAAQ,WAGhC,GAEAH,SAASqB,iBAAiB,WAAWC,IAC7BxB,eAA2B,WAAVwB,EAAEG,0BACjBvB,cAAcC,QAAQ,QACxBD,aAAawB,YAIrB1B,SAASqB,iBAAiB,SAASC,IAC3BxB,gBAAkBwB,EAAEC,OAAOC,QAAQ3B,gDACjCK,cAAcC,QAAQ,WAGhC,uBAEED,cAAcyB,GAAG,mBAAmB,KAClC7B,eAAgB,yBAGlBI,cAAcyB,GAAG,mBAAmB,KAClC7B,eAAgB,YAUlBO,iBAAmB,IACdL,SAASC,cAAcJ,yBAAyB+B"}
|
2
theme/boost/amd/build/sticky-footer.min.js
vendored
2
theme/boost/amd/build/sticky-footer.min.js
vendored
@ -5,6 +5,6 @@ define("theme_boost/sticky-footer",["exports","core/pending","core/sticky-footer
|
||||
* @module theme_boost/sticky-footer
|
||||
* @copyright 2022 Ferran Recio <ferran@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.enableStickyFooter=_exports.disableStickyFooter=void 0,_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};const SELECTORS_STICKYFOOTER=".stickyfooter",SELECTORS_PAGE="#page",CLASSES_HASSTICKYFOOTER="hasstickyfooter";let initialized=!1,previousScrollPosition=0,enabled=!1;const scrollSpy=()=>{if(!enabled)return;if(document.body.clientWidth>=768)return;let scrollPosition=(()=>{const page=document.querySelector(SELECTORS_PAGE);return page?page.scrollTop:window.pageYOffset})();scrollPosition>previousScrollPosition?hideStickyFooter():showStickyFooter(),previousScrollPosition=scrollPosition},showStickyFooter=()=>{const pendingPromise=new _pending.default("theme_boost/sticky-footer:enabling"),footer=document.querySelector(SELECTORS_STICKYFOOTER),page=document.querySelector(SELECTORS_PAGE);footer&&page&&(document.body.classList.add(CLASSES_HASSTICKYFOOTER),page.classList.add(CLASSES_HASSTICKYFOOTER)),setTimeout((()=>pendingPromise.resolve()),1e3)},hideStickyFooter=()=>{document.body.classList.remove(CLASSES_HASSTICKYFOOTER);const page=document.querySelector(SELECTORS_PAGE);null==page||page.classList.remove(CLASSES_HASSTICKYFOOTER)},enableStickyFooter=()=>{enabled=!0,showStickyFooter()};_exports.enableStickyFooter=enableStickyFooter;const disableStickyFooter=()=>{enabled=!1,hideStickyFooter()};_exports.disableStickyFooter=disableStickyFooter;_exports.init=()=>{var _document$querySelect;if(initialized||document.body.classList.contains("behat-site"))return void(0,_stickyFooter.init)();initialized=!0,(()=>{const footer=document.querySelector(SELECTORS_STICKYFOOTER);return!!footer&&!!footer.dataset.disable})()||enableStickyFooter();(null!==(_document$querySelect=document.querySelector(SELECTORS_PAGE))&&void 0!==_document$querySelect?_document$querySelect:document.body).addEventListener("scroll",scrollSpy),(0,_stickyFooter.registerManager)({enableStickyFooter:enableStickyFooter,disableStickyFooter:disableStickyFooter})}}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.enableStickyFooter=_exports.disableStickyFooter=void 0,_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};const SELECTORS_STICKYFOOTER=".stickyfooter",SELECTORS_PAGE="#page",CLASSES_HASSTICKYFOOTER="hasstickyfooter";let initialized=!1,previousScrollPosition=0,enabled=!1;const scrollSpy=()=>{if(!enabled)return;if(document.body.clientWidth>=768)return;let scrollPosition=window.scrollY;scrollPosition>previousScrollPosition?hideStickyFooter():showStickyFooter(),previousScrollPosition=scrollPosition},showStickyFooter=()=>{const pendingPromise=new _pending.default("theme_boost/sticky-footer:enabling"),footer=document.querySelector(SELECTORS_STICKYFOOTER),page=document.querySelector(SELECTORS_PAGE);footer&&page&&(document.body.classList.add(CLASSES_HASSTICKYFOOTER),page.classList.add(CLASSES_HASSTICKYFOOTER)),setTimeout((()=>pendingPromise.resolve()),1e3)},hideStickyFooter=()=>{document.body.classList.remove(CLASSES_HASSTICKYFOOTER);const page=document.querySelector(SELECTORS_PAGE);null==page||page.classList.remove(CLASSES_HASSTICKYFOOTER)},enableStickyFooter=()=>{enabled=!0,showStickyFooter()};_exports.enableStickyFooter=enableStickyFooter;const disableStickyFooter=()=>{enabled=!1,hideStickyFooter()};_exports.disableStickyFooter=disableStickyFooter;_exports.init=()=>{initialized||document.body.classList.contains("behat-site")?(0,_stickyFooter.init)():(initialized=!0,(()=>{const footer=document.querySelector(SELECTORS_STICKYFOOTER);return!!footer&&!!footer.dataset.disable})()||enableStickyFooter(),document.addEventListener("scroll",scrollSpy),(0,_stickyFooter.registerManager)({enableStickyFooter:enableStickyFooter,disableStickyFooter:disableStickyFooter}))}}));
|
||||
|
||||
//# sourceMappingURL=sticky-footer.min.js.map
|
File diff suppressed because one or more lines are too long
@ -40,15 +40,35 @@ const SELECTORS = {
|
||||
OPENBTN: '[data-toggler="drawers"][data-action="opendrawer"]',
|
||||
TOGGLEBTN: '[data-toggler="drawers"][data-action="toggle"]',
|
||||
DRAWERS: '[data-region="fixed-drawer"]',
|
||||
CONTAINER: '#page.drawers',
|
||||
DRAWERCONTENT: '.drawercontent',
|
||||
PAGECONTENT: '#page-content',
|
||||
};
|
||||
|
||||
const CLASSES = {
|
||||
SCROLLED: 'scrolled',
|
||||
SHOW: 'show',
|
||||
NOTINITIALISED: 'not-initialized',
|
||||
TOGGLERIGHT: '.drawer-right-toggle',
|
||||
};
|
||||
|
||||
/**
|
||||
* Pixel thresshold to auto-hide drawers.
|
||||
*
|
||||
* @type {Number}
|
||||
*/
|
||||
const THRESHOLD = 20;
|
||||
|
||||
/**
|
||||
* Try to get the drawer z-index from the page content.
|
||||
*
|
||||
* @returns {Number|null} the z-index of the drawer.
|
||||
* @private
|
||||
*/
|
||||
const getDrawerZIndex = () => {
|
||||
const drawer = document.querySelector(SELECTORS.DRAWERS);
|
||||
if (!drawer) {
|
||||
return null;
|
||||
}
|
||||
return parseInt(window.getComputedStyle(drawer).zIndex, 10);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -62,6 +82,10 @@ const getBackdrop = () => {
|
||||
backdropPromise = Templates.render('core/modal_backdrop', {})
|
||||
.then(html => new ModalBackdrop(html))
|
||||
.then(modalBackdrop => {
|
||||
const drawerZindex = getDrawerZIndex();
|
||||
if (drawerZindex) {
|
||||
modalBackdrop.setZIndex(getDrawerZIndex() - 1);
|
||||
}
|
||||
modalBackdrop.getAttachmentPoint().get(0).addEventListener('click', e => {
|
||||
e.preventDefault();
|
||||
Drawers.closeAllDrawers();
|
||||
@ -239,6 +263,12 @@ export default class Drawers {
|
||||
*/
|
||||
drawerNode = null;
|
||||
|
||||
/**
|
||||
* The drawer page bounding box dimensions.
|
||||
* @var {DOMRect} boundingRect
|
||||
*/
|
||||
boundingRect = null;
|
||||
|
||||
constructor(drawerNode) {
|
||||
// Some behat tests may use fake drawer divs to test components in drawers.
|
||||
if (drawerNode.dataset.behatFakeDrawer !== undefined) {
|
||||
@ -415,6 +445,8 @@ export default class Drawers {
|
||||
page.classList.add(state);
|
||||
}
|
||||
|
||||
this.boundingRect = this.drawerNode.getBoundingClientRect();
|
||||
|
||||
if (isSmall()) {
|
||||
getBackdrop().then(backdrop => {
|
||||
backdrop.show();
|
||||
@ -486,7 +518,7 @@ export default class Drawers {
|
||||
|
||||
if (isSmall()) {
|
||||
const pageWrapper = document.getElementById('page');
|
||||
pageWrapper.style.overflow = 'auto';
|
||||
pageWrapper.style.overflow = 'visible';
|
||||
}
|
||||
return backdrop;
|
||||
})
|
||||
@ -518,6 +550,65 @@ export default class Drawers {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Displaces the drawer outsite the page.
|
||||
*
|
||||
* @param {Number} scrollPosition the page current scroll position
|
||||
*/
|
||||
displace(scrollPosition) {
|
||||
let displace = scrollPosition;
|
||||
let openButton = getDrawerOpenButton(this.drawerNode.id);
|
||||
if (scrollPosition === 0) {
|
||||
this.drawerNode.style.transform = '';
|
||||
if (openButton) {
|
||||
openButton.style.transform = '';
|
||||
}
|
||||
return;
|
||||
}
|
||||
const state = this.drawerNode.dataset?.state;
|
||||
const drawrWidth = this.drawerNode.offsetWidth;
|
||||
let scrollThreshold = drawrWidth;
|
||||
let direction = -1;
|
||||
if (state === 'show-drawer-right') {
|
||||
direction = 1;
|
||||
scrollThreshold = THRESHOLD;
|
||||
}
|
||||
if (scrollPosition > scrollThreshold) {
|
||||
displace = drawrWidth + THRESHOLD;
|
||||
}
|
||||
displace *= direction;
|
||||
const transform = `translateX(${displace}px)`;
|
||||
if (openButton) {
|
||||
openButton.style.transform = transform;
|
||||
}
|
||||
this.drawerNode.style.transform = transform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent drawer from overlapping an element.
|
||||
*
|
||||
* @param {HTMLElement} currentFocus
|
||||
*/
|
||||
preventOverlap(currentFocus) {
|
||||
if (!this.isOpen) {
|
||||
return;
|
||||
}
|
||||
const drawrWidth = this.drawerNode.offsetWidth;
|
||||
const element = currentFocus.getBoundingClientRect();
|
||||
const drawer = this.boundingRect;
|
||||
const overlapping = (
|
||||
(element.right + THRESHOLD) > drawer.left &&
|
||||
(element.left - THRESHOLD) < drawer.right
|
||||
);
|
||||
if (overlapping) {
|
||||
// Force drawer to displace out of the page.
|
||||
this.displace(drawrWidth + 1);
|
||||
} else {
|
||||
// Reset drawer displacement.
|
||||
this.displace(window.scrollX);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Close all drawers.
|
||||
*/
|
||||
@ -541,41 +632,34 @@ export default class Drawers {
|
||||
drawerInstance.closeDrawer();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the scroller helper for the drawer layout.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
const scroller = () => {
|
||||
const body = document.querySelector('body');
|
||||
const drawerLayout = document.querySelector(SELECTORS.CONTAINER);
|
||||
if (drawerLayout) {
|
||||
// If there is not visible scrollbar then remove extra margin from right drawer.
|
||||
const drawerRight = document.querySelector(SELECTORS.CONTAINER + ' ' + CLASSES.TOGGLERIGHT);
|
||||
if (!scrollbarVisible(drawerLayout) && drawerRight) {
|
||||
drawerRight.style.marginRight = '0';
|
||||
/**
|
||||
* Prevent drawers from covering the focused element.
|
||||
*/
|
||||
static preventCoveringFocusedElement() {
|
||||
const currentFocus = document.activeElement;
|
||||
// Focus on page layout elements should be ignored.
|
||||
const pagecontent = document.querySelector(SELECTORS.PAGECONTENT);
|
||||
if (!currentFocus || !pagecontent?.contains(currentFocus)) {
|
||||
Drawers.displaceDrawers(window.scrollX);
|
||||
return;
|
||||
}
|
||||
drawerLayout.addEventListener("scroll", () => {
|
||||
if (drawerLayout.scrollTop >= window.innerHeight) {
|
||||
body.classList.add(CLASSES.SCROLLED);
|
||||
} else {
|
||||
body.classList.remove(CLASSES.SCROLLED);
|
||||
}
|
||||
drawerMap.forEach(drawerInstance => {
|
||||
drawerInstance.preventOverlap(currentFocus);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if there is a visible scrollbar in the given html element.
|
||||
*
|
||||
* @param {object} htmlNode The html element.
|
||||
* @returns {boolean} true if the scroll height is greater than client height.
|
||||
*/
|
||||
const scrollbarVisible = (htmlNode) => {
|
||||
return htmlNode.scrollHeight > htmlNode.clientHeight;
|
||||
};
|
||||
/**
|
||||
* Prevent drawer from covering the content when the page content covers the full page.
|
||||
*
|
||||
* @param {Number} displace
|
||||
*/
|
||||
static displaceDrawers(displace) {
|
||||
drawerMap.forEach(drawerInstance => {
|
||||
drawerInstance.displace(displace);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the last used attribute for the last used toggle button for a drawer.
|
||||
@ -684,10 +768,25 @@ const registerListeners = () => {
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener('scroll', () => {
|
||||
const body = document.querySelector('body');
|
||||
if (window.scrollY >= window.innerHeight) {
|
||||
body.classList.add(CLASSES.SCROLLED);
|
||||
} else {
|
||||
body.classList.remove(CLASSES.SCROLLED);
|
||||
}
|
||||
// Horizontal scroll listener to displace the drawers to prevent covering
|
||||
// any possible sticky content.
|
||||
Drawers.displaceDrawers(window.scrollX);
|
||||
});
|
||||
|
||||
const preventOverlap = debounce(Drawers.preventCoveringFocusedElement, 100);
|
||||
document.addEventListener('focusin', preventOverlap);
|
||||
document.addEventListener('focusout', preventOverlap);
|
||||
|
||||
window.addEventListener('resize', debounce(closeOnResizeListener, 400));
|
||||
};
|
||||
|
||||
scroller();
|
||||
registerListeners();
|
||||
|
||||
const drawers = document.querySelectorAll(SELECTORS.DRAWERS);
|
||||
|
@ -43,7 +43,23 @@ export const init = () => {
|
||||
html: true,
|
||||
placement: 'top',
|
||||
customClass: 'footer',
|
||||
trigger: 'click'
|
||||
trigger: 'click',
|
||||
boundary: 'viewport',
|
||||
popperConfig: {
|
||||
modifiers: {
|
||||
preventOverflow: {
|
||||
boundariesElement: 'viewport',
|
||||
padding: 48
|
||||
},
|
||||
offset: {},
|
||||
flip: {
|
||||
behavior: 'flip'
|
||||
},
|
||||
arrow: {
|
||||
element: '.arrow'
|
||||
},
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('click', e => {
|
||||
|
@ -39,19 +39,6 @@ let previousScrollPosition = 0;
|
||||
|
||||
let enabled = false;
|
||||
|
||||
/**
|
||||
* Return the current page scroll position.
|
||||
* @package
|
||||
* @returns {number} the current scroll position
|
||||
*/
|
||||
const getScrollPosition = () => {
|
||||
const page = document.querySelector(SELECTORS.PAGE);
|
||||
if (page) {
|
||||
return page.scrollTop;
|
||||
}
|
||||
return window.pageYOffset;
|
||||
};
|
||||
|
||||
/**
|
||||
* Scroll handler.
|
||||
* @package
|
||||
@ -65,7 +52,7 @@ const scrollSpy = () => {
|
||||
return;
|
||||
}
|
||||
// Detect if scroll is going down.
|
||||
let scrollPosition = getScrollPosition();
|
||||
let scrollPosition = window.scrollY;
|
||||
if (scrollPosition > previousScrollPosition) {
|
||||
hideStickyFooter();
|
||||
} else {
|
||||
@ -139,9 +126,8 @@ export const init = () => {
|
||||
if (!isDisabledByDefault()) {
|
||||
enableStickyFooter();
|
||||
}
|
||||
const content = document.querySelector(SELECTORS.PAGE) ?? document.body;
|
||||
|
||||
content.addEventListener("scroll", scrollSpy);
|
||||
document.addEventListener("scroll", scrollSpy);
|
||||
|
||||
registerManager({
|
||||
enableStickyFooter,
|
||||
|
@ -41,7 +41,7 @@ if (isloggedin()) {
|
||||
$blockdraweropen = false;
|
||||
}
|
||||
|
||||
if (defined('BEHAT_SITE_RUNNING')) {
|
||||
if (defined('BEHAT_SITE_RUNNING') && get_user_preferences('behat_keep_drawer_closed') != 1) {
|
||||
$blockdraweropen = true;
|
||||
}
|
||||
|
||||
|
@ -159,9 +159,8 @@ $right-drawer-width: 320px;
|
||||
}
|
||||
|
||||
@mixin drawer() {
|
||||
@include transition(left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease);
|
||||
background-color: $drawer-bg-color;
|
||||
z-index: $zindex-modal;
|
||||
z-index: $zindex-fixed;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
@ -173,6 +172,7 @@ $right-drawer-width: 320px;
|
||||
|
||||
@mixin drawertypes() {
|
||||
&.drawer-right {
|
||||
@include transition(right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease);
|
||||
width: $drawer-right-width;
|
||||
max-width: $drawer-right-width;
|
||||
right: calc(-#{$drawer-right-width} + -10px);
|
||||
@ -190,6 +190,7 @@ $right-drawer-width: 320px;
|
||||
}
|
||||
}
|
||||
&.drawer-left {
|
||||
@include transition(left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease);
|
||||
width: $drawer-left-width;
|
||||
max-width: $drawer-left-width;
|
||||
left: calc(-#{$drawer-left-width} + -10px);
|
||||
@ -221,15 +222,15 @@ $right-drawer-width: 320px;
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.drawer {
|
||||
z-index: inherit;
|
||||
|
||||
// Make sure that in large screens the drawer goes under the drop down menus.
|
||||
z-index: $zindex-dropdown - 1;
|
||||
// Workaround to display the skip link elements from the blocks drawer infront of the navbar.
|
||||
// As the skip link is in a fixed position and z-index for this element is ignored
|
||||
// then it is hidden behind the top navbar.
|
||||
// The workaround is to actually give a z-index to the drawer so it appears in front of the
|
||||
// navbar (https://developer.mozilla.org/en-US/docs/Web/CSS/z-index).
|
||||
&#theme_boost-drawers-blocks:focus-within {
|
||||
position: absolute;
|
||||
|
||||
.drawercontent {
|
||||
z-index: auto;
|
||||
}
|
||||
z-index: $zindex-fixed + 1;
|
||||
}
|
||||
|
||||
&.not-initialized {
|
||||
|
@ -526,7 +526,7 @@
|
||||
|
||||
tr.heading {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
top: $navbar-height;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
|
@ -181,9 +181,6 @@
|
||||
#page.drawers .main-inner {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
#page.drawers .drawer-right-toggle {
|
||||
margin-right: 0.7rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
@ -218,9 +215,8 @@
|
||||
|
||||
#page.drawers {
|
||||
position: relative;
|
||||
overflow-y: auto;
|
||||
overflow-y: visible;
|
||||
@include transition(0.2s);
|
||||
height: calc(100vh - #{$navbar-height});
|
||||
left: 0;
|
||||
right: 0;
|
||||
&.show-drawer-left {
|
||||
@ -241,7 +237,7 @@
|
||||
margin-right: $drawer-right-width;
|
||||
}
|
||||
&.hasstickyfooter {
|
||||
height: calc(100vh - #{$navbar-height} - #{$stickyfooter-height});
|
||||
margin-bottom: $stickyfooter-height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ body {
|
||||
height: $stickyfooter-height;
|
||||
bottom: calc(#{$stickyfooter-height} * -1);
|
||||
transition: bottom .5s;
|
||||
z-index: $zindex-dropdown;
|
||||
z-index: $zindex-fixed;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 0 1rem rgba($black, .15);
|
||||
font-size: calc(#{$font-size-base} * 1.10);
|
||||
|
@ -29724,27 +29724,27 @@ body.drawer-ease {
|
||||
}
|
||||
|
||||
.drawer {
|
||||
transition: left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
background-color: #f8f9fa;
|
||||
z-index: 1050;
|
||||
z-index: 1030;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.drawer {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
.drawer.not-initialized {
|
||||
display: none;
|
||||
}
|
||||
.drawer.drawer-right {
|
||||
transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease;
|
||||
width: 315px;
|
||||
max-width: 315px;
|
||||
right: calc(-315px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.drawer.drawer-right {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
.drawer.drawer-right.show {
|
||||
right: 0;
|
||||
visibility: visible;
|
||||
@ -29754,11 +29754,17 @@ body.drawer-ease {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.drawer.drawer-left {
|
||||
transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
width: 285px;
|
||||
max-width: 285px;
|
||||
left: calc(-285px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.drawer.drawer-left {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
.drawer.drawer-left.show {
|
||||
left: 0;
|
||||
visibility: visible;
|
||||
@ -29776,13 +29782,10 @@ body.drawer-ease {
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.drawer {
|
||||
z-index: inherit;
|
||||
z-index: 999;
|
||||
}
|
||||
.drawer#theme_boost-drawers-blocks:focus-within {
|
||||
position: absolute;
|
||||
}
|
||||
.drawer#theme_boost-drawers-blocks:focus-within .drawercontent {
|
||||
z-index: auto;
|
||||
z-index: 1031;
|
||||
}
|
||||
.drawer.not-initialized {
|
||||
display: block;
|
||||
@ -29807,35 +29810,35 @@ body.drawer-ease {
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md {
|
||||
display: block;
|
||||
transition: left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
background-color: #f8f9fa;
|
||||
z-index: 1050;
|
||||
z-index: 1030;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-md {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.not-initialized {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-right {
|
||||
transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease;
|
||||
width: 315px;
|
||||
max-width: 315px;
|
||||
right: calc(-315px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-md.drawer-right {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-right.show {
|
||||
right: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-right .drawertoggle {
|
||||
margin-left: auto;
|
||||
margin-right: 5px;
|
||||
@ -29843,15 +29846,25 @@ body.drawer-ease {
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-left {
|
||||
transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
width: 285px;
|
||||
max-width: 285px;
|
||||
left: calc(-285px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-md.drawer-left {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-left.show {
|
||||
left: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-left .drawertoggle {
|
||||
margin-right: auto;
|
||||
margin-left: 5px;
|
||||
@ -29868,35 +29881,35 @@ body.drawer-ease {
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm {
|
||||
display: block;
|
||||
transition: left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
background-color: #f8f9fa;
|
||||
z-index: 1050;
|
||||
z-index: 1030;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-sm {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.not-initialized {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-right {
|
||||
transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease;
|
||||
width: 315px;
|
||||
max-width: 315px;
|
||||
right: calc(-315px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-sm.drawer-right {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-right.show {
|
||||
right: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-right .drawertoggle {
|
||||
margin-left: auto;
|
||||
margin-right: 5px;
|
||||
@ -29904,15 +29917,25 @@ body.drawer-ease {
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-left {
|
||||
transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
width: 285px;
|
||||
max-width: 285px;
|
||||
left: calc(-285px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-sm.drawer-left {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-left.show {
|
||||
left: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-left .drawertoggle {
|
||||
margin-right: auto;
|
||||
margin-left: 5px;
|
||||
@ -35364,7 +35387,7 @@ p.arrow_button {
|
||||
}
|
||||
.path-grade-report-grader .gradeparent tr.heading {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
top: 60px;
|
||||
z-index: 4;
|
||||
}
|
||||
.path-grade-report-grader .gradeparent tr.userrow th {
|
||||
@ -35848,7 +35871,7 @@ body {
|
||||
height: max(96px, 0.9375rem * 3);
|
||||
bottom: calc(max(96px, 0.9375rem * 3) * -1);
|
||||
transition: bottom 0.5s;
|
||||
z-index: 1000;
|
||||
z-index: 1030;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 0 1rem rgba(0, 0, 0, 0.15);
|
||||
font-size: calc(0.9375rem * 1.10);
|
||||
@ -36592,9 +36615,6 @@ span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, sp
|
||||
#page.drawers .main-inner {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
#page.drawers .drawer-right-toggle {
|
||||
margin-right: 0.7rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
#page.drawers {
|
||||
@ -36622,9 +36642,8 @@ span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, sp
|
||||
}
|
||||
#page.drawers {
|
||||
position: relative;
|
||||
overflow-y: auto;
|
||||
overflow-y: visible;
|
||||
transition: 0.2s;
|
||||
height: calc(100vh - 60px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
@ -36659,7 +36678,7 @@ span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, sp
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
#page.drawers.hasstickyfooter {
|
||||
height: calc(100vh - 60px - max(96px, 0.9375rem * 3));
|
||||
margin-bottom: max(96px, 0.9375rem * 3);
|
||||
}
|
||||
}
|
||||
.drawercontrolbuttons {
|
||||
|
@ -29724,27 +29724,27 @@ body.drawer-ease {
|
||||
}
|
||||
|
||||
.drawer {
|
||||
transition: left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
background-color: #f8f9fa;
|
||||
z-index: 1050;
|
||||
z-index: 1030;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.drawer {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
.drawer.not-initialized {
|
||||
display: none;
|
||||
}
|
||||
.drawer.drawer-right {
|
||||
transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease;
|
||||
width: 315px;
|
||||
max-width: 315px;
|
||||
right: calc(-315px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.drawer.drawer-right {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
.drawer.drawer-right.show {
|
||||
right: 0;
|
||||
visibility: visible;
|
||||
@ -29754,11 +29754,17 @@ body.drawer-ease {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.drawer.drawer-left {
|
||||
transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
width: 285px;
|
||||
max-width: 285px;
|
||||
left: calc(-285px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.drawer.drawer-left {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
.drawer.drawer-left.show {
|
||||
left: 0;
|
||||
visibility: visible;
|
||||
@ -29776,13 +29782,10 @@ body.drawer-ease {
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.drawer {
|
||||
z-index: inherit;
|
||||
z-index: 999;
|
||||
}
|
||||
.drawer#theme_boost-drawers-blocks:focus-within {
|
||||
position: absolute;
|
||||
}
|
||||
.drawer#theme_boost-drawers-blocks:focus-within .drawercontent {
|
||||
z-index: auto;
|
||||
z-index: 1031;
|
||||
}
|
||||
.drawer.not-initialized {
|
||||
display: block;
|
||||
@ -29807,35 +29810,35 @@ body.drawer-ease {
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md {
|
||||
display: block;
|
||||
transition: left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
background-color: #f8f9fa;
|
||||
z-index: 1050;
|
||||
z-index: 1030;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-md {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.not-initialized {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-right {
|
||||
transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease;
|
||||
width: 315px;
|
||||
max-width: 315px;
|
||||
right: calc(-315px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-md.drawer-right {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-right.show {
|
||||
right: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-right .drawertoggle {
|
||||
margin-left: auto;
|
||||
margin-right: 5px;
|
||||
@ -29843,15 +29846,25 @@ body.drawer-ease {
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-left {
|
||||
transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
width: 285px;
|
||||
max-width: 285px;
|
||||
left: calc(-285px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-md.drawer-left {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-left.show {
|
||||
left: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991.98px) {
|
||||
.drawer-md.drawer-left .drawertoggle {
|
||||
margin-right: auto;
|
||||
margin-left: 5px;
|
||||
@ -29868,35 +29881,35 @@ body.drawer-ease {
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm {
|
||||
display: block;
|
||||
transition: left 0.2s ease, right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
background-color: #f8f9fa;
|
||||
z-index: 1050;
|
||||
z-index: 1030;
|
||||
position: fixed;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-sm {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.not-initialized {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-right {
|
||||
transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease;
|
||||
width: 315px;
|
||||
max-width: 315px;
|
||||
right: calc(-315px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-sm.drawer-right {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-right.show {
|
||||
right: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-right .drawertoggle {
|
||||
margin-left: auto;
|
||||
margin-right: 5px;
|
||||
@ -29904,15 +29917,25 @@ body.drawer-ease {
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-left {
|
||||
transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease;
|
||||
width: 285px;
|
||||
max-width: 285px;
|
||||
left: calc(-285px + -10px);
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
|
||||
.drawer-sm.drawer-left {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-left.show {
|
||||
left: 0;
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767.98px) {
|
||||
.drawer-sm.drawer-left .drawertoggle {
|
||||
margin-right: auto;
|
||||
margin-left: 5px;
|
||||
@ -35364,7 +35387,7 @@ p.arrow_button {
|
||||
}
|
||||
.path-grade-report-grader .gradeparent tr.heading {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
top: 50px;
|
||||
z-index: 4;
|
||||
}
|
||||
.path-grade-report-grader .gradeparent tr.userrow th {
|
||||
@ -35782,7 +35805,7 @@ body {
|
||||
height: max(96px, 0.9375rem * 3);
|
||||
bottom: calc(max(96px, 0.9375rem * 3) * -1);
|
||||
transition: bottom 0.5s;
|
||||
z-index: 1000;
|
||||
z-index: 1030;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 0 1rem rgba(0, 0, 0, 0.15);
|
||||
font-size: calc(0.9375rem * 1.10);
|
||||
@ -36526,9 +36549,6 @@ span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, sp
|
||||
#page.drawers .main-inner {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
#page.drawers .drawer-right-toggle {
|
||||
margin-right: 0.7rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
#page.drawers {
|
||||
@ -36556,9 +36576,8 @@ span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, sp
|
||||
}
|
||||
#page.drawers {
|
||||
position: relative;
|
||||
overflow-y: auto;
|
||||
overflow-y: visible;
|
||||
transition: 0.2s;
|
||||
height: calc(100vh - 50px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
@ -36593,7 +36612,7 @@ span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, sp
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
#page.drawers.hasstickyfooter {
|
||||
height: calc(100vh - 50px - max(96px, 0.9375rem * 3));
|
||||
margin-bottom: max(96px, 0.9375rem * 3);
|
||||
}
|
||||
}
|
||||
.drawercontrolbuttons {
|
||||
|
Loading…
x
Reference in New Issue
Block a user