From 0c586b41c1336202286dcfcb2709cc2f75679c91 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mikel=20Mart=C3=ADn?= Date: Wed, 27 Nov 2024 09:59:07 +0100 Subject: [PATCH] MDL-75669 theme_boost: Fix BS5 related JS - Migrate Boostrap components related JS from JQuery to vanilla JS. - Migrate Boostrap components related Events from JQuery to vanilla JS. --- .../content/library/moodle-javascript.md | 6 +- .../moodlenet/amd/build/instance_form.min.js | Bin 3110 -> 3290 bytes .../amd/build/instance_form.min.js.map | Bin 9658 -> 10051 bytes admin/tool/moodlenet/amd/src/instance_form.js | 29 +++--- blocks/timeline/amd/build/view_nav.min.js | Bin 4875 -> 4993 bytes blocks/timeline/amd/build/view_nav.min.js.map | Bin 9791 -> 10031 bytes blocks/timeline/amd/src/view_nav.js | 9 +- calendar/amd/build/popover.min.js | Bin 3438 -> 3345 bytes calendar/amd/build/popover.min.js.map | Bin 6241 -> 6025 bytes calendar/amd/src/popover.js | 25 ++---- .../templates/minicalendar_day_link.mustache | 4 +- course/amd/build/actionbar/initials.min.js | Bin 5349 -> 5428 bytes .../amd/build/actionbar/initials.min.js.map | Bin 10746 -> 10901 bytes .../local/activitychooser/dialogue.min.js | Bin 13616 -> 13845 bytes .../local/activitychooser/dialogue.min.js.map | Bin 32701 -> 33100 bytes course/amd/src/actionbar/initials.js | 6 +- .../amd/src/local/activitychooser/dialogue.js | 82 +++++++++-------- course/format/amd/build/local/content.min.js | Bin 15559 -> 15672 bytes .../format/amd/build/local/content.min.js.map | Bin 40138 -> 40002 bytes .../amd/build/local/content/actions.min.js | Bin 19936 -> 19998 bytes .../build/local/content/actions.min.js.map | Bin 47416 -> 47129 bytes .../local/courseeditor/contenttree.min.js | Bin 3253 -> 3761 bytes .../local/courseeditor/contenttree.min.js.map | Bin 8692 -> 9099 bytes .../local/courseindex/courseindex.min.js | Bin 7538 -> 7611 bytes .../local/courseindex/courseindex.min.js.map | Bin 19678 -> 19586 bytes course/format/amd/src/local/content.js | 17 ++-- .../format/amd/src/local/content/actions.js | 13 +-- .../amd/src/local/courseeditor/contenttree.js | 22 ++--- .../amd/src/local/courseindex/courseindex.js | 12 +-- grade/amd/build/comboboxsearch/grade.min.js | Bin 5219 -> 5232 bytes .../amd/build/comboboxsearch/grade.min.js.map | Bin 12361 -> 12358 bytes grade/amd/build/searchwidget/initials.min.js | Bin 5299 -> 5378 bytes .../build/searchwidget/initials.min.js.map | Bin 10324 -> 10478 bytes grade/amd/src/comboboxsearch/grade.js | 2 +- grade/amd/src/searchwidget/initials.js | 6 +- grade/report/grader/amd/build/collapse.min.js | Bin 14669 -> 14734 bytes .../grader/amd/build/collapse.min.js.map | Bin 32625 -> 32702 bytes .../grader/amd/build/stickycolspan.min.js | Bin 2376 -> 2331 bytes .../grader/amd/build/stickycolspan.min.js.map | Bin 6884 -> 6989 bytes grade/report/grader/amd/src/collapse.js | 8 +- grade/report/grader/amd/src/stickycolspan.js | 9 +- group/amd/build/comboboxsearch/group.min.js | Bin 4516 -> 4529 bytes .../amd/build/comboboxsearch/group.min.js.map | Bin 12185 -> 12182 bytes group/amd/src/comboboxsearch/group.js | 2 +- .../comboboxsearch/search_combobox.min.js | Bin 6734 -> 6837 bytes .../comboboxsearch/search_combobox.min.js.map | Bin 16540 -> 16676 bytes lib/amd/build/dynamic_tabs.min.js | Bin 4290 -> 4350 bytes lib/amd/build/dynamic_tabs.min.js.map | Bin 9900 -> 10007 bytes .../build/local/action_menu/subpanel.min.js | Bin 6695 -> 6573 bytes .../local/action_menu/subpanel.min.js.map | Bin 18202 -> 18089 bytes .../local/collapsable_section/controls.min.js | Bin 2038 -> 2101 bytes .../collapsable_section/controls.min.js.map | Bin 5518 -> 5238 bytes lib/amd/build/local/dropdown/dialog.min.js | Bin 3173 -> 3211 bytes .../build/local/dropdown/dialog.min.js.map | Bin 8469 -> 8342 bytes lib/amd/build/modal.min.js | Bin 16446 -> 16645 bytes lib/amd/build/modal.min.js.map | Bin 49899 -> 50166 bytes lib/amd/build/moremenu.min.js | Bin 5180 -> 5076 bytes lib/amd/build/moremenu.min.js.map | Bin 14424 -> 14450 bytes lib/amd/build/usermenu.min.js | Bin 2417 -> 2492 bytes lib/amd/build/usermenu.min.js.map | Bin 6814 -> 7041 bytes lib/amd/src/comboboxsearch/search_combobox.js | 5 +- lib/amd/src/dynamic_tabs.js | 61 +++++++------ lib/amd/src/local/action_menu/subpanel.js | 6 +- .../src/local/collapsable_section/controls.js | 20 ++--- lib/amd/src/local/dropdown/dialog.js | 6 +- lib/amd/src/modal.js | 3 + lib/amd/src/moremenu.js | 3 +- lib/amd/src/usermenu.js | 13 +-- lib/form/amd/build/collapsesections.min.js | Bin 2604 -> 2837 bytes .../amd/build/collapsesections.min.js.map | Bin 5897 -> 6376 bytes lib/form/amd/src/collapsesections.js | 40 +++++---- lib/templates/local/toast/message.mustache | 11 +-- lib/templates/search_input_navbar.mustache | 28 +++--- .../fixtures/dropdown_output_testpage.php | 10 +-- message/amd/build/message_drawer.min.js | Bin 10441 -> 10599 bytes message/amd/build/message_drawer.min.js.map | Bin 29170 -> 29554 bytes .../build/message_drawer_view_contacts.min.js | Bin 3171 -> 3205 bytes .../message_drawer_view_contacts.min.js.map | Bin 9443 -> 9505 bytes ...essage_drawer_view_overview_section.min.js | Bin 14880 -> 14914 bytes ...ge_drawer_view_overview_section.min.js.map | Bin 46294 -> 46362 bytes message/amd/src/message_drawer.js | 20 +++-- .../amd/src/message_drawer_view_contacts.js | 4 +- .../message_drawer_view_overview_section.js | 4 +- .../grading/extra_filters_dropdown.min.js | Bin 3317 -> 3230 bytes .../grading/extra_filters_dropdown.min.js.map | Bin 7459 -> 7440 bytes .../grading/extra_filters_dropdown.js | 3 +- .../amd/build/newchild.min.js | Bin 1998 -> 2040 bytes .../amd/build/newchild.min.js.map | Bin 5928 -> 6023 bytes .../bank/managecategories/amd/src/newchild.js | 6 +- .../multianswer/amd/build/feedback.min.js | Bin 946 -> 1026 bytes .../multianswer/amd/build/feedback.min.js.map | Bin 2173 -> 2389 bytes question/type/multianswer/amd/src/feedback.js | 5 +- theme/boost/amd/build/aria.min.js | Bin 11216 -> 11206 bytes theme/boost/amd/build/aria.min.js.map | Bin 28643 -> 28760 bytes theme/boost/amd/build/drawers.min.js | Bin 14875 -> 14992 bytes theme/boost/amd/build/drawers.min.js.map | Bin 37732 -> 37283 bytes theme/boost/amd/build/footer-popover.min.js | Bin 2092 -> 2092 bytes .../boost/amd/build/footer-popover.min.js.map | Bin 4385 -> 4496 bytes theme/boost/amd/build/loader.min.js | Bin 3325 -> 3520 bytes theme/boost/amd/build/loader.min.js.map | Bin 5894 -> 5920 bytes theme/boost/amd/src/aria.js | 12 +-- theme/boost/amd/src/drawers.js | 21 ++--- theme/boost/amd/src/footer-popover.js | 44 ++++----- theme/boost/amd/src/loader.js | 85 +++++++----------- 104 files changed, 317 insertions(+), 345 deletions(-) diff --git a/admin/tool/componentlibrary/content/library/moodle-javascript.md b/admin/tool/componentlibrary/content/library/moodle-javascript.md index b4921ffe141..4bbc01a90d7 100644 --- a/admin/tool/componentlibrary/content/library/moodle-javascript.md +++ b/admin/tool/componentlibrary/content/library/moodle-javascript.md @@ -30,15 +30,13 @@ In order for this to work you need to use the JavaScript syntax used in core Mus {{#js}} require( [ - 'jquery', 'theme_boost/toast', ], function( - $, Toast ) { - var root = $('#toasttest'); - root.toast('show'); + const toastTrigger = document.getElementById('toasttest'); + new Toast(toastTrigger).show(); }); {{/js}} {{< /example >}} \ No newline at end of file diff --git a/admin/tool/moodlenet/amd/build/instance_form.min.js b/admin/tool/moodlenet/amd/build/instance_form.min.js index 6b6ebb2ff29343b6772ab7b865f6470dbbe2800b..c9c382b3944bd183be566f8ea4750b9ba5f9e23a 100644 GIT binary patch delta 353 zcmZ1`aZ7T8C$piBQb|T?Zfbl|etvO@K9DRaE-6YZ&`(Y*$}cTW%~8@(O3p7z)z8Z> z%1zA4EKZ&5!R#um;|!J7@q>wP?qzmjoovS{E>~Ntsi_0gua}sT;#!uPSK^adT#}lX zS~U3~hpnzob$(uQs+FQattQ+kz4X))&%EN2M4*fYOuMFDN&aL*&OVdme4vyqT&(_uq22JQlO!!X+3!&tJ-97F5bzXIKw#MS|`VFX^QI$|-Q=!h|&^ALN>$2=gj#_hoULp&CE=9=8VolZb#R delta 195 zcmca5xlCe%C-dZLW|z&En4MUKG;3=$HFc5`i}Fj0Q*-q4^HL{!a@qe{lMi1VMXQS~?AYQ#VvrB6=CbEawnfc!LzW3f7+;~6t`dPC=ZX43^ zH{fjOCH?NIY1&Sbua50l>Sj_?EwgOv#eqhsW?FjEFs+hWEZ90eZQf5clwCr0-1qnW zT&=4b_5bwa^NuinZtbp)wq<;NrN|W+4z72Vs^8lWn%dR1HKoFDW(u~W8@h!rI+t6B z^vEHgrmteKoo zDw%6)k(z5e(iN$0KupUPEZa%AWpNac#Ngm0&P9gtQ>YbRhPKYsoAEF*xEBth9S-5U zNYq!t!?RuZHhlCa1Yd9DKX80JAl6N_4QT*2Z+Z)WOv1|w4dQ+#1X-s_^%UTITyRqQ^H$vnV3Npr#x(Y(V_ z3TJ26n3!9nHg$=)XP(VeQOJOt!qZ^eEaP(J43Eo{U1ZXmlb4AGtim>!8!B_hFtPx! zP|J^!dF<~GwdK9*QI95rGyRb}_Zca3qtl$5`&!|?L}=TTlY&;u+#`J`o`Y@5Sy9VV z#Z^)M7cwo>E8}tnzx0p98)WbV3QWAP#>G}>%JXbt>U@WN-Q_!RuwzUlv{IIdO`%LH Xl<_pP1$yg029#}%i5KkPxf$!iCp}ScoV-Fv+8ZW=`uUpJ^1_agu;rR*qV5D_RE=W z=Ma(}6~E&N|Mj`In&@13-+w8+&Kq?*+hiW$joozS?&v-7u`hY5JDJJc5YH3+;=#cA z)N;#dq|3}^mdD#}w#}L??qt_FZ`f>}d1}@l*guxE?~v60p6J#5UxQO8G$snkY{s&= z%Un+feWT5`nBy62xxQ%!g#&By6zGe+&9kI?uM>nDqVP{f&)-gH~URt6*mHc~|PQk@hs+e60If9rY z3s6S7W5{yAyX!wrq1LIPOP3n5gXLWc1;heyiRJ{VNUsrx!c~I#*?EOP^@Kc9n^2fT zoRc#F*@~fFEdxr3B^alOlY#m+9W#Lqz{7^+7F=m2ZlbFhJ(|{skapxdsh};g4Sd~=fin(EcE6urbF_vgw&UF6u zo>L#tl14l-7H+{d0_uudWNAijOL8c`^wbi!%%b8F zO^ve5)bileoYdr!{31=g!qU{DN*LEMCr3j)Iwi3rQ8%erwNUG*WHt OCi`%OY@W-N#{mEX#Y6l6 delta 73 zcmZov?^c_zc;c3T&HRiSoQ7qYspY|`IjPAd`9*s9c^XQ^8TsXT3Sd$%saUThF-b{B YBds(qxg--PovJx`KUc_RG45;*0OCd(2LJ#7 diff --git a/blocks/timeline/amd/build/view_nav.min.js.map b/blocks/timeline/amd/build/view_nav.min.js.map index 66a757c68810141e670af4f89d91779a4617a471..5c1c749bb884cf7dc393a48f434d8720d88effea 100644 GIT binary patch delta 959 zcmZvaJ8#oa6vvgSNJt0?mBLtz+Ym=RO#*!=0|lLX;)b+Ms}c%H2@IPCi01F?0@4#1JU|`_h+eDOt2ix~N?*DflUsgY@ef~9i&+T;mAkvPT zPPF6(VRWMH1b#XClAZY&(l}J+ijz`m0nrv*QP*Ww#7NSkl_!Bkj2EX@f_YGFGEu#*P=Q zx?$vaPGF?Mmf!O-+hJy0_*0-6&c!_baV*QfjlmUp$4URk*qdv!mw|N92eRT%Tq53= zWq2@A81cP+f8s2W$n(0^O!W9y?R{dNzrLG3%@wc|u}!cMZ4+FE=rYKOPmU2(5Gw>_ zq}W6#A(m(u(NuvXjMSzotRSw`L?D(M5E9Ze3rs}Qgbl=v2GkI1AX3ULa==2g2-XqT zpMzxxSs+BJD7&fb1TTbSVN01TC?Xb@`3-&Q=7zk+E^ zFL_LHA23N(UV|P(I-+R?3nFcr9Vz>YshF!U&CtwJhh4z3Rb-wiuAP6l%$o8qu&N-V zBepz<$jg!>0(Du$R2xu{G?_##Zo(#-%S-<);ST4MFeS+UbZwWZ=5+}UY0$|m>k$7w zS-PG5yM{SYLrgu+rasIDqzaQ$!}1f@6|U<3dAJy?oHD^4!`)&m<|`UM$GZGhQos6u zB$yrW$I0AyUL9&NQ@xiQl^%baoE&Kt_*wE{eQ)59`yu4$fC&jX9zO)XU7&H6~5d;6_b=18y)$+SD$wo6w@F z5)x0aLL9ho;S5q9fOp_|kYINc2@qU%y|c43-~W%l?0wt)`eSigxRKndjt9ZS3x+{A ziAJR;TwRI#(Im|1wR9Ah68~rgGB3}=ZZeS9!CL0cvrybinc{hBb^1P)++2u4v6bGQ zzDs{L3`-Q3dqyn8@<*dA%8;R-*78e+|ZI%2&I zF(V(ez(%xfXd*V-&_V3T616I+4Sj|NVq;%@cYzVPuEVwtGaMq1w+~ckY2MToKePE% zLlyGjR07!hx zd0FtcX#>*U^%*XBZlp;?65sRgoyy-DHl&6zN1}Z9Q{|YoFxInp2q*HYeL72*6}!@J zhF63=XH2XFZctw=7P3p{tiZa*qEuMFy{-?P2TGtExSXL^6r)0Jp~~VzVe4sY7FU0O x?8dK2nx#hUfQ#tLh5M8+45Z-$+J&CpS;6p-XPr8(d~v}~G(;ei^{}#6zW``P(zO5p diff --git a/blocks/timeline/amd/src/view_nav.js b/blocks/timeline/amd/src/view_nav.js index 01531229f59..49cf234c5a3 100644 --- a/blocks/timeline/amd/src/view_nav.js +++ b/blocks/timeline/amd/src/view_nav.js @@ -26,6 +26,7 @@ import * as View from 'block_timeline/view'; import * as Notification from 'core/notification'; import * as Utils from 'core/utils'; import * as UserRepository from 'core_user/repository'; +import {getFirst} from 'core/normalise'; const SELECTORS = { TIMELINE_DAY_FILTER: '[data-region="day-filter"]', @@ -107,9 +108,11 @@ const registerViewSelector = function(root, timelineViewRoot) { // Listen for when the user changes tab so that we can show the first set of courses // and load their events when they request the sort by courses view for the first time. - viewSelector.on('shown shown.bs.tab', function(e) { - View.shown(timelineViewRoot); - $(e.target).removeClass('active'); + getFirst(viewSelector).querySelectorAll('[data-bs-toggle="tab"]').forEach((tab) => { + tab.addEventListener('shown.bs.tab', (e) => { + View.shown(timelineViewRoot); + $(e.target).removeClass('active'); + }); }); diff --git a/calendar/amd/build/popover.min.js b/calendar/amd/build/popover.min.js index a7a5bf451fe4736723b3611b500d59bf1f7d7bd2..c7c07ba84fe4db15dc9fb95b2c33ed52b590760d 100644 GIT binary patch delta 382 zcmaDSHBoAUu3%Dreo1jjQDT99L4HAgS!&TlTZ4_I+DxKQuB}FXQkHEzl(%^^QyVjH za(-TMi2{&J%S^YO9LttAS&_pz-?}KZq_ikcp*X*^C^^+0Lg^KjrWREOr{<(4m*f{| zDCuQnrlh3iDQW6u=H;apd4%}-SScyh>Lli6<|dY8=I2={8rE9prIstetkg?MO-n4z zDbXlNEJ{x;(Sca2sWVxSO=R*d_GMb=3iW`hJb?~O%u7y%YSPpz&d4vjcL3!W1P$S68`3dnd-l$whz@3_q9ItZ6aq9Y_|#yufjQ`v2q&&|Cj zkjSh_mdu1*29tAFEJlP4g-0V5>k04x6K zC<(ONXTzcu_c078!r2d-hZsvVV60{5my;!yBSq+-P;$`iC(JTe+xsT0y`Gc}{dYAa z^3@$Ns(xsiJDv2tzN)lJIFmFE#^38C+4MlzKtq__Y%HSegP`qhe^5gHJ4Q~Yt46Q- E1srR$zyJUM diff --git a/calendar/amd/build/popover.min.js.map b/calendar/amd/build/popover.min.js.map index 1d406bf8da5dfabc3540adb01b72bb109314fb93..88b4a17851b0c0b99e3f4c30fd2737cd8af24e93 100644 GIT binary patch delta 1087 zcmaJFFRn6~ky1rwstpqV$_)=Fz_C>D^!EbXJMrEj;}Efo?a z9zDOSMt_1yFJ8TA;)R1ZFUG{PC(q8?t_YH_huQb``)0mxX7>BctHk@z;I)UgV{Zx9 z*l_Kp5%FrGDW0s`cH2u(^xB?lISHrF=_Lo>4XB?(A4bZy+^AQLc|+|De^zTlsJ@*H z-*JW4ai!6=J8oGRcY{N`)e-LYqSzE=&vv7cc&%Qk2pNgR>rx8$UNM(7ZW)n?`h9Bt z`t3Do1dkM5BQO{BEVn8=X7qJq#MO0zBio)O%Oc2&#oINz8|{4= z**Fn9K+C)63d<8m=;TmDRetow-70y-HeF#dZUwr!+mq=>sfR5P|H(nszNGg zOHW9TZu@=HIS^3U&{g#^bUAduJ)zpSdJ}qmi9Y}DmS8PTFVz|gt8Dnig_$aXjX7X8 z2WWGa0mvXlR6oMGGkHLX3oH+?$PjQ@WyjOI`nJl-0AR>WU?iI6(+!xNy5x^WOd3eJms2M$gu*L4lnw4Y~Jb{B2WMbmIjy0T@K`h z9{Pselos7dH~e%G(#7gr@?-pI=US)3YiZP_n%w2Aq5Go&tdPAePB0X@x+u=^XZ_;a z+^^pIbnfQBZk_081~wn~ouh9ur@L~f{i^STH96cbVnB4zFWf>RaPX zViq}ErHDH?+t>bw(GXWw*))M$M?rE;tDyyS_#9g5?ZouhIt?5*d07iDRn*?Z#cl^# z4j`8#*XSgH2$^h!nE+Kpx8Q_ueZ9}-xe delta 1276 zcmZ`%O-~b16paxmiHIqv5&X!c(M%g(ia^ALVshVW8446qpp;gP8Kc9}adysiXKP!bQAqvGYj=W(AjDlul6j$Spn9gCN$W>GZyqvCC7v}0Ii%TaK3 zxass7sCSB0_pW-l!$GHNNr|?s9oyjX8aK;MC8j*-={Ts8Z=c)Y^@bzc`wfDtQbbgZ z>y>J;$W1jCH)@v2qb0r8;>UFj_#{cZ;?!%=!?gZM?6`Y-;$3KLIPe$LiC>{v@nG=j zTtRhHFx!M$?y)z;-FABeaqr8DOO}u8<)NSV6oQ)jGIa^YH@V09+@F0E?Ss8?S6r zM%EC|5gph>VqR{telf`dGZ9`vVok0YT-Z9pO5h9LG4q&64j`A32Wg@Kt0k5_0rMW1 zAswvOSFv-_rCNZX+T=1i(6(s7b7j%MSB-iak!YHl6wn1ec*NRsQroUpr$Or~%CFJ} zB?f@e^j{|Z%N1hRjSP03p%sluwmNkwY07Y9T966S!r)xG-2HksaiU`(3JYE?%u|E; zdXZ+(1Dm0w?6oE>3JV)1J4&O%D9hB#lEzpmNqo02ZW{3M2`TG(16blMIIn u`8LCmX%)KeSzMABCMh9Zmra< { }; const isPopoverConfigured = new Map(); - const showPopover = target => { const dateContainer = target.closest(CalendarSelectors.elements.dateContainer); if (!isPopoverConfigured.has(dateContainer)) { - const dateEle = jQuery(target); - dateEle.popover({ + const config = { trigger: 'manual', placement: 'top', html: true, title: dateContainer.dataset.title, content: () => { - const source = jQuery(dateContainer).find(CalendarSelectors.elements.dateContent); - const content = jQuery('
'); - if (source.length) { - const temptContent = source.find('.hidden').clone(false); - content.html(temptContent.html()); - } - return content.html(); + const source = dateContainer.querySelector(CalendarSelectors.elements.dateContent); + return source ? source.querySelector('.hidden').innerHTML : ''; }, 'animation': false, - }); + }; + new Popover(target, config); isPopoverConfigured.set(dateContainer, true); } if (isPopoverAvailable(dateContainer)) { - jQuery(target).popover('show'); + Popover.getInstance(target).show(); target.addEventListener('mouseleave', hidePopover); target.addEventListener('focusout', hidePopover); // Set up the hide function to the click event type. @@ -85,9 +78,9 @@ const hidePopover = e => { let removeListener = true; if (!isTargetActive && !isTargetHover) { - jQuery(target).popover('hide'); + Popover.getOrCreateInstance(target).hide(); } else if (isTargetClicked) { - jQuery(document.activeElement).popover('hide'); + Popover.getOrCreateInstance(document.activeElement).hide(); } else { removeListener = false; } diff --git a/calendar/templates/minicalendar_day_link.mustache b/calendar/templates/minicalendar_day_link.mustache index 2dd095bd964..e7791af356d 100644 --- a/calendar/templates/minicalendar_day_link.mustache +++ b/calendar/templates/minicalendar_day_link.mustache @@ -50,8 +50,8 @@ {{#js}} require(['jquery'], function($) { require(['theme_boost/bootstrap/popover'], function() { - var target = $("#calendar-day-popover-link-{{courseid}}-{{year}}-{{yday}}-{{uniqid}}"); - target.popover({ + const target = document.getElementById("calendar-day-popover-link-{{courseid}}-{{year}}-{{yday}}-{{uniqid}}"); + new Popover(target, { content: function() { var source = target.next().find("> *:not('.hidden')"); var content = $('
'); diff --git a/course/amd/build/actionbar/initials.min.js b/course/amd/build/actionbar/initials.min.js index b712e4d2a31be67b5764d8b4500d3a46d4ee31b1..89a24585b32910f7f9540d8d2ab3b4eac1408b90 100644 GIT binary patch delta 206 zcmaE=xkYP2zFbL0YHn(LQht7Mi9V1lDK05WEYMFW$}dRCFVCA;YR>^A3N-ZqSEJ}4rO-n4zDba|BDcIc1mcl&QkV|%ddc~D$%!Qz alP|K1acgR7>XqcDr{|<YuW6irRj7#fYbs8nsB*zzGyiY>Mhb#dRDVI;L7gdjqUb_!Ga!OXzSqXbOT zy>Vk+-1rZSE;KAn8vlYzjqwk-F>&Xr_YJg`L^tzh=AL`bx#!(Kh1bOoFUM~xj@_); z9V@u$*k&-ow+z#Gwqe^YU%)4KxuZ81YC}-}&3I};T$;QtzWdHy&}%hy&#?HzZI>IC z;q-s{-kzU1CQQ@~o^zOE=-kL!F4wK95f!j^@9XG*s2cfjhxoz#Q z$6^U?*Xs=<8oT?%5{LeP_&Pn=|2=&;;jh`%wuyov5^A*#r&}0u2$-D`UxIGGG#ebd z_77cb7?6sCkbS0pyZ+@_?3M~jkGV2w=X zG*H~1`h)@dj9=rXmwB?`WKQ(VLW%K;3N119XfQvb{lPl93b| zYEefab%yycSCOfeJT3T=5Q}F!>h_jsq)5fJ(p3x$x>c^g^VX(8YuW6iu6^)|xcNSglQ3N=s$1PYNx;u=Bn<17bgD0|aqlLSd+2XCBN9AWfS7 z0e3GhP2B2A!%FwA{0Xky`v-L8eKXXAg{#S%d(OS*o_pSw{}eyHnOTUeH63BCMcdt; z=?q6-W>T{&5zRHv%(^EWH{Pi^rtRs%Ius2v78myD;f)UqQxSQ6dG%Jj;fPK{3~Vjx ziPO_FGdfBv|C*f^w!9Z!l~2R&&03>j^r^#s%k@m#bVgsp8&h*vJo$TFOs7(#_C{zb z?jjg{rs14j{+6^yqT72e^&MiU37qb%6Sb{1*9qt)%{x_vFRq(&96}T4gO_ zw7AX+0LO;>xcTC;jjAWM`H(XMz$hwAK3no11qCc1dquPgAq4{LaPU>^aFz$dGse6C znqy^}8EEMs+oD#_CjiKfX*9L!QOV)f9h_t+E!#XL-`zKN36-G1=__f$h;6P!6?G=4 zCOFdia6nSyNi5DPU^HFzff{Lq{OiEPq5P?>gp=b3vJ}bbaz|IzVg?gj&8#P6D7JJ-%_iJe z8}&Fvg{+}#sn+xfAZkfu2V^8DllK0@Er4;JO>yN(IjcrhPlAN8G|lf|IygpFHD9bW z#x;vJrZZ7kFd@IkDj`}-1?gO8F3}$GEnjx^jF00A4{krEYpeVPM=n!=GI`{y9jK&1 Rem7ueCgVU3)X0JLi@%?o7$^V$ diff --git a/course/amd/build/local/activitychooser/dialogue.min.js b/course/amd/build/local/activitychooser/dialogue.min.js index 4945e3b9d8b64f316a54d3535b38b4cc76926a1e..ab2293a115b9fa3b75652733e00bfe27eb31b691 100644 GIT binary patch delta 705 zcmdmxH8p2~gIq~QYHn(LQht7Mi9V1lDK05WEYMF*EXpq}PR*Io$CC&8T~2dBr7(KqVS5Nlm@H)QS>~$y2#QjB`PDJLRWT+G-de zITxhQEwiY&L{kH-0>lTY($Lh@nf#Kwj18i1@&!rV$?JJIH}B;6!!$XBPj>Qcei=q5 zps?!X36k~*Rfi{=3&u^h*Abn}AuToete`JK3T%Lj~N=K(`VN(jw0P#;eA z6yAsC7?AV(G&we#imYcA)4Ns|i%R3|%VatcGkTvHQa|KunQ|skyvE7Ejl<$Ept&lW%jFjc31cw>m^x(HOA?bb_44yJml_>p RnjFBbJ~_cOZSqr70{~w6;sXEx diff --git a/course/amd/build/local/activitychooser/dialogue.min.js.map b/course/amd/build/local/activitychooser/dialogue.min.js.map index 311cbac79965e0e0c24502a4e4bdaa38f8fcee6b..4898b189a0faf929346a55f734423f69b55da3e7 100644 GIT binary patch delta 5087 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 delta 4883 zcmb_fOKe-m6@~njktm35*^(_=mSsD#t!I(?OE!{VX5NR-6s<}W^>O4lv_y#%{}d^S zvK!j5jdJF|e|GOqry}z0wio0No6g8jnnqd|!nt%|HInG5 z{&T)771_vlmAjw&Y_Ie+-)la5KABz&Cwi76d7fS@o+n%K(F>jOuRV?XE?k*U&8Ot^ zJ+1P$mjd!c&xoAwdAa=eBM%yyw(t0`#gRX=ny~YjJkdI@{(m@msC=(ASikh$u3q`z z=n>g{{QWOIUHG ze@p(U?d*F;4jj8MpX#Xj+e(V`b|&Qep2PC<8~bJZxz_T7&d$B%UFWYilyevO-WnV7 zN8V=H;n{Pzn$RsHw`JISl-`xkdG2>MoRtS#oA>9#w=VR+&;H3S`N8ph@+Xr`GCSEX z?@zuc@3j`>t>7hmpO()XZSs@gvvOdnMgBW@8Q%=gFUz^mLHX;cBl6R!>+(t{Aioou zmoK;PlcmuX`Q2jyd41Y0|8#n8zwCJRwg$!hSO3A;TsK<(06WqBx4Kh^5M1qY$EDPG+Y#rpdji zwQSij#G4K)f4ouf>5cTm_%OG1V6}A<}jYJFkGf=#kdM|%$Q?VPIzbs zo3YdiQ+bv)$xkuL*W@#aVUW4u1h50XM@;!?spXPQAVwsEI{Vu>P>Y6?xz6SH-Z)v> ztUrOdvt&PlG7=#QYTjwcdW<360 z=0r2Z1KPqEt+0r@d2UN@rlr*DGGedS?E}XZjX~Y+YpmB@;ifSFUSkvVtk2EiH;J5G zN$0Q%-SN?;xeRf&-yIYMo2+Bc9P4%$*K{OBn|SSvX?*&TJvcMLKqH&^@#!RZUOl5% zeSjqPlX8Orq&C%{b?&L=A|Wc(7ED|lvgL_vN6Cla-03YtfR(N7xJp(a2>@YmQ%lnZ z&r-f>H-wpRr&R@r;ZGdDmGcO*HcgXO&Mj0;2T#GaN=*=(QOnu7GRVJVPxWkh7iN~b zS*1EUzzzp0ddnAc2j_Q8#E5AWQRpHcBQOGT0mZH?SF~oUUqNf^u{^fo^%?p5+`$s6 zGtR7D%WESq*7Pu?$1;a?zw5TixHHzT>lCvnmmx;dHBRy7xt1$G-henrJiQ54vqOoW zHnMQD7rGgO`3*wToEQ*B7Uc$zWpVY;ONePm#T0dnArl~>V)xoHhx&002-MKFDt7yo zSJmELkiT0UoS&?oNw{32Ae;=)Lj7l1Y0R8Z!G7Y)~hZ;@}SL@7CkvrhIFo zy`JP{R4zIY@~G&Ozr1th3C@W92Lb>ScYK>GsL+ z>ursQkkT2G-+sNfgkl1mehkqVoE9;#YMxfFY8ufRfMj%zt(h2wAPE9r*g1|40(6Qs zOe_lKtA3@$YA(eRU~mr0k;Q~MDWFFsv^uC+fR$KvBFYnDmE`s5F)Zt-)S&~??N4bP zHjzaf?X3Az8zSu(14#7<2MuZVAc@I{x5_bh&eU(J|7N$syi(_kZ`Ts_6g# diff --git a/course/amd/src/actionbar/initials.js b/course/amd/src/actionbar/initials.js index e48bf533a90..37a5504432c 100644 --- a/course/amd/src/actionbar/initials.js +++ b/course/amd/src/actionbar/initials.js @@ -24,7 +24,7 @@ import Pending from 'core/pending'; import * as Url from 'core/url'; import CustomEvents from "core/custom_interaction_events"; -import $ from 'jquery'; +import Dropdown from 'theme_boost/bootstrap/dropdown'; /** * Whether the event listener has already been registered for this module. @@ -67,7 +67,7 @@ export const init = (callingLink, firstInitialParam = 'sifirst', const pendingPromise = new Pending(); registerListenerEvents(callingLink, firstInitialParam, lastInitialParam, additionalParams); // BS events always bubble so, we need to listen for the event higher up the chain. - $(selectors.parentDomNode).on('shown.bs.dropdown', () => { + document.querySelector(selectors.parentDomNode).addEventListener('shown.bs.dropdown', () => { document.querySelector(selectors.pageClickableItem).focus({preventScroll: true}); }); pendingPromise.resolve(); @@ -142,7 +142,7 @@ const registerListenerEvents = (callingLink, firstInitialParam = 'sifirst', window.location = Url.relativeUrl(callingLink, params); } if (e.target.dataset.action === selectors.formItems.cancel) { - $(`.${selectors.targetButton}`).dropdown('toggle'); + Dropdown.getOrCreateInstance(document.querySelector(`.${selectors.targetButton}`)).toggle(); } } }); diff --git a/course/amd/src/local/activitychooser/dialogue.js b/course/amd/src/local/activitychooser/dialogue.js index 433469a1387..618077db350 100644 --- a/course/amd/src/local/activitychooser/dialogue.js +++ b/course/amd/src/local/activitychooser/dialogue.js @@ -21,7 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import $ from 'jquery'; +import Carousel from 'theme_boost/bootstrap/carousel'; import * as ModalEvents from 'core/modal_events'; import selectors from 'core_course/local/activitychooser/selectors'; import * as Templates from 'core/templates'; @@ -30,13 +30,14 @@ import {addIconToContainer} from 'core/loadingicon'; import * as Repository from 'core_course/local/activitychooser/repository'; import Notification from 'core/notification'; import {debounce} from 'core/utils'; +import {getFirst} from 'core/normalise'; const getPlugin = pluginName => import(pluginName); /** * Given an event from the main module 'page' navigate to it's help section via a carousel. * * @method showModuleHelp - * @param {jQuery} carousel Our initialized carousel to manipulate + * @param {Element} carousel Our initialized carousel to manipulate * @param {Object} moduleData Data of the module to carousel to * @param {jQuery} modal We need to figure out if the current modal has a footer. */ @@ -45,7 +46,7 @@ const showModuleHelp = (carousel, moduleData, modal = null) => { if (modal !== null && moduleData.showFooter === true) { modal.setFooter(Templates.render('core_course/local/activitychooser/footer_partial', moduleData)); } - const help = carousel.find(selectors.regions.help)[0]; + const help = carousel.querySelector(selectors.regions.help); help.innerHTML = ''; help.classList.add('m-auto'); @@ -71,11 +72,11 @@ const showModuleHelp = (carousel, moduleData, modal = null) => { .catch(Notification.exception); // Move to the next slide, and resolve the transition promise when it's done. - carousel.one('slid.bs.carousel', () => { + carousel.addEventListener('slid.bs.carousel', () => { transitionPromiseResolver(); - }); + }, {once: true}); // Trigger the transition between 'pages'. - carousel.carousel('next'); + Carousel.getInstance(carousel).next(); }; /** @@ -115,9 +116,10 @@ const manageFavouriteState = async(modalBody, caller, partialFavourite) => { * @param {Object} footerData Our base footer object. */ const registerListenerEvents = (modal, mappedModules, partialFavourite, footerData) => { + const modalBody = getFirst(modal.getBody()); const bodyClickListener = async(e) => { if (e.target.closest(selectors.actions.optionActions.showSummary)) { - const carousel = $(modal.getBody()[0].querySelector(selectors.regions.carousel)); + const carousel = modalBody.querySelector(selectors.regions.carousel); const module = e.target.closest(selectors.regions.chooserOption.container); const moduleName = module.dataset.modname; @@ -129,24 +131,24 @@ const registerListenerEvents = (modal, mappedModules, partialFavourite, footerDa if (e.target.closest(selectors.actions.optionActions.manageFavourite)) { const caller = e.target.closest(selectors.actions.optionActions.manageFavourite); - await manageFavouriteState(modal.getBody()[0], caller, partialFavourite); - const activeSectionId = modal.getBody()[0].querySelector(selectors.elements.activetab).getAttribute("href"); - const sectionChooserOptions = modal.getBody()[0] + await manageFavouriteState(modalBody, caller, partialFavourite); + const activeSectionId = modalBody.querySelector(selectors.elements.activetab).getAttribute("href"); + const sectionChooserOptions = modalBody .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId)); const firstChooserOption = sectionChooserOptions .querySelector(selectors.regions.chooserOption.container); toggleFocusableChooserOption(firstChooserOption, true); - initChooserOptionsKeyboardNavigation(modal.getBody()[0], mappedModules, sectionChooserOptions, modal); + initChooserOptionsKeyboardNavigation(modalBody, mappedModules, sectionChooserOptions, modal); } // From the help screen go back to the module overview. if (e.target.matches(selectors.actions.closeOption)) { - const carousel = $(modal.getBody()[0].querySelector(selectors.regions.carousel)); + const carousel = modalBody.querySelector(selectors.regions.carousel); // Trigger the transition between 'pages'. - carousel.carousel('prev'); - carousel.on('slid.bs.carousel', () => { - const allModules = modal.getBody()[0].querySelector(selectors.regions.modules); + Carousel.getInstance(carousel).prev(); + carousel.addEventListener('slid.bs.carousel', () => { + const allModules = modalBody.querySelector(selectors.regions.modules); const caller = allModules.querySelector(selectors.regions.getModuleSelector(e.target.dataset.modname)); caller.focus(); }); @@ -155,7 +157,7 @@ const registerListenerEvents = (modal, mappedModules, partialFavourite, footerDa // The "clear search" button is triggered. if (e.target.closest(selectors.actions.clearSearch)) { // Clear the entered search query in the search bar and hide the search results container. - const searchInput = modal.getBody()[0].querySelector(selectors.actions.search); + const searchInput = modalBody.querySelector(selectors.actions.search); searchInput.value = ""; searchInput.focus(); toggleSearchResultsView(modal, mappedModules, searchInput.value); @@ -180,12 +182,12 @@ const registerListenerEvents = (modal, mappedModules, partialFavourite, footerDa // Set up the carousel. .then(body => { - $(body.querySelector(selectors.regions.carousel)) - .carousel({ + const carousel = document.querySelector(selectors.regions.carousel); + new Carousel(carousel, { interval: false, pause: true, keyboard: false - }); + }); return body; }) @@ -219,7 +221,7 @@ const registerListenerEvents = (modal, mappedModules, partialFavourite, footerDa return body; }) - .catch(); + .catch(Notification.exception); modal.getFooterPromise() @@ -230,7 +232,7 @@ const registerListenerEvents = (modal, mappedModules, partialFavourite, footerDa footer.addEventListener('click', footerClickListener); return footer; }) - .catch(); + .catch(Notification.exception); }; /** @@ -255,8 +257,8 @@ const initChooserOptionsKeyboardNavigation = (body, mappedModules, chooserOption const module = e.target.closest(selectors.regions.chooserOption.container); const moduleName = module.dataset.modname; const moduleData = mappedModules.get(moduleName); - const carousel = $(body.querySelector(selectors.regions.carousel)); - carousel.carousel({ + const carousel = document.querySelector(selectors.regions.carousel); + new Carousel({ interval: false, pause: true, keyboard: false @@ -458,21 +460,23 @@ const setupKeyboardAccessibility = (modal, mappedModules) => { modal.getModal()[0].tabIndex = -1; modal.getBodyPromise().then(body => { - $(selectors.elements.tab).on('shown.bs.tab', (e) => { - const activeSectionId = e.target.getAttribute("href"); - const activeSectionChooserOptions = body[0] - .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId)); - const firstChooserOption = activeSectionChooserOptions - .querySelector(selectors.regions.chooserOption.container); - const prevActiveSectionId = e.relatedTarget.getAttribute("href"); - const prevActiveSectionChooserOptions = body[0] - .querySelector(selectors.regions.getSectionChooserOptions(prevActiveSectionId)); - - // Disable the focus of every chooser option in the previous active section. - disableFocusAllChooserOptions(prevActiveSectionChooserOptions); - // Enable the focus of the first chooser option in the current active section. - toggleFocusableChooserOption(firstChooserOption, true); - initChooserOptionsKeyboardNavigation(body[0], mappedModules, activeSectionChooserOptions, modal); + document.querySelectorAll(selectors.elements.tab).forEach((tab) => { + tab.addEventListener('shown.bs.tab', (e) => { + const activeSectionId = e.target.getAttribute("href"); + const activeSectionChooserOptions = body[0] + .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId)); + const firstChooserOption = activeSectionChooserOptions + .querySelector(selectors.regions.chooserOption.container); + const prevActiveSectionId = e.relatedTarget.getAttribute("href"); + const prevActiveSectionChooserOptions = body[0] + .querySelector(selectors.regions.getSectionChooserOptions(prevActiveSectionId)); + + // Disable the focus of every chooser option in the previous active section. + disableFocusAllChooserOptions(prevActiveSectionChooserOptions); + // Enable the focus of the first chooser option in the current active section. + toggleFocusableChooserOption(firstChooserOption, true); + initChooserOptionsKeyboardNavigation(body[0], mappedModules, activeSectionChooserOptions, modal); + }); }); return; }).catch(Notification.exception); @@ -520,5 +524,5 @@ export const displayChooser = (modalPromise, sectionModules, partialFavourite, f }); return modal; - }).catch(); + }).catch(Notification.exception); }; diff --git a/course/format/amd/build/local/content.min.js b/course/format/amd/build/local/content.min.js index 8498eeebb7ad2be2b46ffaab3785a26052f475fe..8229c3bb28ad61aa98e147ff133f5a4f02c9100d 100644 GIT binary patch delta 268 zcmX?Jxua@=t87U|YHn(LQht7Mi9V1lDK05WEYMHR&&f$FDBkEO%s4rg(SjYypFD{% zZ!-teEhaXwbn4`f9Fm++xm3-~_gJ1VZ+^vbNu)kC2WV{q-tcRIl3W0n9h#pOy_=42Dl*~McA`Q+>A^{o(I`I%$y_D3n#L}D+O^xLI zoSejh;>@I+R82i7CsiXgCp9-UuLLNNR|2GA;wkn@8JQ`mN>)n68TsW(n``BE%K-p^ CVMd4m diff --git a/course/format/amd/build/local/content.min.js.map b/course/format/amd/build/local/content.min.js.map index 5adfa845902367999ae7a68fac4e19aa20e7a7e8..98692eaea43ea66f7387122575f2012fc1157a5d 100644 GIT binary patch delta 2676 zcmbtWO>7%Q6qchDXfLhQ1kyin18P$;jqSM34^m5JX4mVrokpo~-IN2`I2-@O_S(C4 z?6j)VbDOqlrfJ&J1Dq;ul_I1f!2yot1P3mhdf>SUVI>5@*WoN}Hb4x`jz8kwQgBAimL42TI< zoGdY_SG4$lTIq1t9M@`^`29xe(6CPOl-fk6e4Z1F(mejGu)6s0<`L$|Et{fEfz`PL zGt5YdQNGBth$8PFy4!~U(TMO2u_>of@$4phGpvCFPGdTmqI3%GXDQ7tXmVB2Mc>M$ zz@TWX99r(^BtvPY#pM@xfT%Ld5|_q0nFI%M`P(2lI$74s8fgIb;i+r zI--*lrKz;^S%_mUc`iQz(908@x^g>+hzZE-Hj?1$m!)rN!ftK@-G4JrIux=e( zUPJ^u389R19+}C8;}~#KleTaSMKSZpLx{EF(hmmY$qSM=h=8>{69?M$QI1iV&Ebo z@C-CAa6GHCroSnyI|pOHl5a6XXRh#ZP70jT2J2|J&nb|iXA}V~L+Y-`$HixN;%Ao( zpdvfUM>%O|lzJ?-b)^A%m<=0b5Wr_5DgZ1Oz$!}&%A=revU=vVrG%7>D~hW_Cmd52 z2oPhTtA-TFs1it%L0!4aONRJzwXdsah#yvi`$?Me ztpw1ODH;&l1D_d48WgH^L}2YWblBT#{eg~%uLT2RqOdmlR!l`op)s|gNDDAyVr)^9 z8XFd0tsP#5u&_(dJJ`b1c1_6H%z(0S6qDtIVP**Dj??fk$dCB*o|V z^!@duT!pbuc`_#&8@I>L_IiF_E$IVv#2@S22cI6nQ4ac#BU~d*6=lp}P%3_@vUO)WDT~gOc~O_mZIABk zmh)rcllwid15zyE9A*&FODQ>~u88ONPajtc3%gUlAj`I>>K#*e!lG|O>+v~|(-7Q1 zuU&44`o@t!NUUre2H8E?i0nx1#Rf&%aO5|Vvf*MP@}T!(DXo!%8@hIJYdb1_d3gA!4*KOld=e)T^d3G)IIQ?(=<4qu zoPsv_^TEk;YW!qlYV51h!5l{Q;>Fw;$Ie>hEy-f`pGjB`dzZaklYr>ECvgTFn!8MS zoc1&Hr!=%AG682W$;-U0mXIinI+)XN7tnOJ?nZGiiQgU`3yr1zm1ZXnGXfrbX!Rmf zBFK0+%=Pnwf<8+3K(`<@ezNc;b=Z>l^if~hKk(meFoG5a31ao4^3|G_Pjx{)7SnZ| zEJ2J4{8t%)E|?0bQL4JAy}9S(uE2>a(B;q#Ia@j*B^c0c7FO|#25G^)iwlN0{rGGU smSeEI)G+)%H_bE&gZ-pbKq)P5JProo4MH^I8i0f6-`QE@PO|^nU$dAe_W%F@ delta 2919 zcmaJ@TW=f36@~;SkOc&e0XvqRC>a?=WmjualtfVsQn)j-%jJ@yRF-ayu8vn9(>hQ^_>G4q_L2k56(k_LjHzXam5!xoPeBwIxkc7V3Alt4- zEGIC%T0O9wCh1#2i!j&q1FzO4%k#ttNWJEezDYc@{3njp>AGGZbDn{u+n(DYv+Z3(aQK%uH-9j;EGFjY*z#d+u6#<63ui~%4Lu)l zISq4w;kIgs%yke)5Cb7~*S2e2-`cWGf1ccMk1k9Sw9F3Tb4>7xOAXvl9CGX*5OGvx zRN}F4BcF84pyf6oZqDtR+o5d_6$lGZ`j%~zdaLF%5#KRDDY9kOYe3>aKO`kY! z0F>>9miM9oHD}my;dtc)h1=ia@G6ja40>GBm1Bsn&c_GyifNl2(+S`Ldf)^{_YHEL z%(kqCIZHkyvwq9%&x-5sTs-{q!bkauBcsE&Kl}338f&&@xL}}Yf6#Q;vAC! z`V7MHn**j)C^sx=Xj1fSvNo3{iwtw{9^X)^5GDR-zxe1fswa6-F)6154S{Tci^zPD zc|TMk5~q7FZYz{l=D4&;sN((?w^GaU#HrGO94c1~N^hxH2=_EuX&4m@;Q^AuDdnq7 zOy8NB%y1_hMH9cilN!%x;`yCR zqh=QKI;<+GQKflT2TPs@3iP!)5>W}WCqILWQOB|q%*|rjO-#h|Ka)IVq7DtSP>hyl zYiL+VoU92O)aS}s?5KfRi+Ks(7Omge#zGd-8VRogPnQ1^La?X-(My(wywB_{H6PrLD^-4J?0SMUVQPh}=3lCThx-beR)b z%1fToek%P+5-l)=P~cOQR`>Xl_}|@kCtY2trUl2Dd)d>z4yKhfPm1oncYYY^${fhH z+>1QnxT6BWica|w3KZE+G4Y?cuD^n=!H@vnRHKd}tSHz38%HYMuBEtZL|g$ahybbu{lXkV*YO--NW2z9Po(#MH09<%5apH*S$v3C z1`a@Oswal~Gq8xC?q44B#PfYJwkW>YPmlJZJOwnSCQ!Y@DNnJkDmwt07(!RqDGHQQ zWf_d%7YfQ@XiC>D97Sr{2Gne9f-0foOD6;mme|HNa>^aHs~=PQ=;cRLeaFBFU1Axe zniivhIbl+S4mAMP7X1DdsL@B7(N$KC~EwL!b-dPa;dwx%jqeVE;FAat3-#p32=E z3T>hQ(Wo(Jh-(MhL_04}q1Zc^8B2+02bX3S4Xm{wHxQT9;!o|?KuWO;V~kV0E51G; zr`v{<-dabz`Jg`8%E##~;XmNtiS(ZjrmG3*2;zHzv_`9Ko>r9wsN96#5g)(~Uti2c z8kCiCWfewfm8XulfhH!k)x6wAff3Krx$)J!*nN0mVlOfa#r=os`M6rSJTYW@F5Dl5w$s@Y@p4@8%kK;0_lyQ7` zpt=RwL0E?`<2Mh6KRIuP(W*zUd Jm%se^{{h%PaTWjo diff --git a/course/format/amd/build/local/content/actions.min.js b/course/format/amd/build/local/content/actions.min.js index a6b65d6ee17f9aa26da2138f1ee7485ba2aae175..69fac67e974bbe0f0bf3938533f89ed5d10550f0 100644 GIT binary patch delta 330 zcmaDbn{nP8#tB7oB^jx?sqsnq`NbvrK(eH`q$sgKKRG`qC$XS7bz{CW5|xs~qV&m=wNto@QZFnOnTikgOjPCUdQy_D3n#L}D+O^xEz0l`+wEj zJk#D6LY6>W0nw)j!~rRsI3SH*xr7S`E?g1+f`nf{bzN)joryf0< z`gv#O4)Z!4#}7qnC-AzdcjT_FB3R-)5red&Q*c z-*`p+@x@$p*|HKZg`z24uh;Xog<2ZiRKJjy)n}Y6ghDP!Cuj+oT3bs=uhr^^U(WB{hKhGAAST<>QsZ3P8;wn*f_>N}2%8-a07&6tbqSRv>K(EU+?p z@*d(_)FOze?AqojlNAf`VH^!9aR3}r2bQ)*hD{I#d&4M!B9OEiv>)3_|49H#7Q6s1ylVl$QN%N!x zP(qLJsgBh1qif0cDb};T^?|x_yj>mNHzKl{z&J1~%_KU{dK~axWAI8zd>$)NL zt%H&&Zd06=VgFc`uU@g2_D^;U~X$l{w|wvx)zSaHx4X4OG%3=IwZru+1gVN&)%H9o5SgFsi;rilD2!O zzCOFY=#_9%zNOC@>KeDP8h31SZBjX7X^7~n-_LF&!;)E{EUE7vzdl#N3|nTIvUbPj MVBGZ8TTfp52XRK3djJ3c delta 1525 zcmbVK&2Jk;6qnN!)d!Fw2qY;~Bllpt9TGbqO(Rs5nc2;*`jyQk>;t&p80BMtk3;i1^@mKVMpa%||n0dP)JwjrpNZ$GnxtFN%-*%?L zpJ*pB6E&5IV~{Ci=l3kT#dC^2mq`bP*EWN67Tv#(0;k>Xncln+1YY>HGMTs;gUx|! z*sTg+<1oxj+V42W=`5d`xgI`KKhW<<))Y>?kXAw7C7U>+Buw$|lI^nE3`d`RI`K;6 zApHA_LSjhsbGT;L&ZfximndF5){{qxJwChmBj*f1WB8&<0>IlSAimIDFWvx@J)+8H3&OW z6#nPQTSSHLxFA@CGV>V24N;$G(ubfP3hgfKGD*z_OvBrRY%?r;)r6tK5)D86{>iJi z?`+^rVREGi0=qy8Rdv6Fn}p>BQn(}zUExZYn(db1+NEn7AoMSukHgui0=7i0MHMLO zQ=R`1UcXhuWkSj;R35b)jR`c!MGDqdsW?PuclqyO>t22XTsTGSQ=+*l1JXVnl)&S# zBpYpvqFWqg10O(?$Nclt=?PEcrErEnIZY-n{XIRMO*UhH9)Es%^M$t?XG`OL32ZXa zwHSp+g{@Jy1XkiF6%v*&OVo>Anh?TbQO==|k1Sn;D5hdF0|;JTCdVkswlRNtHaUH} z7=;q0h&93jw!ojAuiXbK{{RJ8gdC`iygi$Sm`Y$vY+W>LoutkG7C$x2E!&tlGHU9_Zb*)n)imZnMu&M{)_^f)1Zl}Gy@%CvDabQ;`OSfKKTbpHsW6Z diff --git a/course/format/amd/build/local/courseeditor/contenttree.min.js b/course/format/amd/build/local/courseeditor/contenttree.min.js index 9b937c49e4975fafb62f2b3baadcca77af84233d..0f8391c480033ace7418bee665676c5dfd4dec9a 100644 GIT binary patch delta 727 zcma)3O=}x55XCXZNqZ_iv?(+nn_#4}ReVlSLTc7vFr<)UDO-6pvA301t~3sWg!mT} zT2yjQe?l-hC;uk@AiZ{Xy<1!#N-tvcH1BENyqneQm*3iJIDjF9J*_S7q$gT5Vzd)! zrNqd>_ZD9+>+6eOOZDR7uBtDdln>MoKYba4Idwm)tJ5FVr%RvTH$Si(Isyd|YIC3z zu|;iJ>#*BBcy|;~cC1Yxq5&bO`+Wt5@0~?DvA9u)$2|pH>S#QK1X&+2Q0cr0zCG>8 z8OMFCKkG09BPAjr-j?Tk9;I*Q_)JI{oTQ{~Y!MPL#2ds?Lc)5Ml_or&5X$%5$J+WP zrT)L^?zZ+k>#We}L+!2_Sio%*rtgP^jcqAVq-Z)uW~MYpntqsQGZZSekhy8c#v&y# z!jQVx^))wHUUBy;WKt^fWULhDoGdEyLX#Cg(ev{Y9m|bo+Pv7iKYQ6-#91~oAZ;{e z4V!%5+mU}o)o6reAWXus7^^(=L(?)K5IX5H UMUuumr$E_k6BRODe|%Z_4Y*5AQwoqZc zl*E!m4W*LAqV&`fCC$lkfaq%WnxK5(PUp9zsUxCBFak2N qK;4v?l#}Y2qN%BulbV-alA)#sQm2DQ9n3F4+rds$+APgGjS&D{Kv>%V diff --git a/course/format/amd/build/local/courseeditor/contenttree.min.js.map b/course/format/amd/build/local/courseeditor/contenttree.min.js.map index 1196bd4aa47527306b554214c6ef8ba10efe75c4..5fa1e8b107d02d693d661c99391ac24abe46067c 100644 GIT binary patch delta 1790 zcmb7DU2hvj6n!X>pi%h{w5if2tda`bVzj2E1)@-*nY)|q#x@(rvQk$_(Rz1mue0_h zyOX3CA@hz@kVZlXAtA&cK91RPik`k@_dqpa7M&+AC4Yj>|@T zsvBfu4vwoCRSXwR%r~eIY1BOv9G8WW7(H*3{Q1WBa{K0!2XnRE5P_jDeAEo1qk_P# zXIn4m1%VnTm)CB|`r7I%iARs+aP5z&({o9S(iU+jb$~>S(uh4IZA#m&emB)|6G)#? zII)0qC=EcT0O6GK2c(JTF7YY#bqM-RTuN)CMnUZEshm!&s7*4wB4g^j@rX=o2(!sY zSbWQ>Edoywcsc{-xKp6cJ?pTj(Z%|-7LY(wQgM%Xw0UmznL{B`})*Ty;El*zx=H>c!-CKy4N9x*f~hZ()~&WFj9Gxk)SJnH47|O0 zOpDrE(9t_JGGf%Bpsx203POrFhF~km7E^lBX)R{?4Nau@f*Wj|{0wAI;5esjVTYX| zvz1r0&p=i69-^p#l40C{g06CGpsCdIHeHqC+=D)DE++fb9RgK49tLPE><{xiG)B3) zOO8>=M_ey@$h$pZsD3_11KBX%n|AYVa0~DJAWs`Ga%NH34V5Qta)x|cfu`taHy1o` zaSI+>7eG#J)mN422}7=TfYO86&>oOaEG#z3Pm6)<&?!`{JB;8kId!UvV}JUN+c_{F z)HbzK(1W@#+;{1xh4!%P*ZTMtZ&8EzV1K74q)#jH)B-rnzEj9 zV5nqKiec*w+L|!@1(f|lEusEgQl1kpKvoRJmq7ut`cD=CPh26n! z9HssNRS(ttfc}NF+XH9w-~s&8hE04a);z0B;q_rCXi-+RB<|MHi=kEu6f z*7;ZC|BdditPqGIa^#$e^cfLd5zCBtZcGjZNySOzdZI;oZ4r}dvGQQ;;riM-2{RJL zQUs|hMXRtMli?@ZVOEf-5Kogt7Lr(vOx_$J>UeTmeSPPqI-mIR{N?10iTd@PVN7%( z$wbh>?j-Svm$bx(kx+l!o>qU~8XNV)xTR)3TTnNq$n?^pbkjh{#bvUwL1YpHkw^=! zl&SiD>eqGT!H{VtQ}={CB4?S%E{u?gk(j!kB)w3!kx~@7Cs}wHiL9VrPt6W;%a#u2 z7oJ}UmRm0lmcPC9B=pJBm2e>vaUk2va6l&$}Z)_+TbF?pbT%l6d|Jn;YhLgry&hIi)eKNZ+L+4KQ zdelWEJej1pFqq&cspWcYb$|AY(Ov~YwK@Ch$Fg6hb$~jjHh@ig9H7T(19-bwq8$$Q zrcE;jkg*Eg0@$ij55VK*zD;Z3bc>Eo;0;c90o)xEu?=QTjg!rfe=skuYLfX8U;Rv` zwgN`009A{+SfG2wj3X4(_>c-Vs#UJ$)WKTkCG%3H9R@ZS2DKgamfT*enhup5&H*01 z1J1ghWA*u#TD>!_PJXOh=jH)Vd56;kXBV)NE^tor6dD%M;>3VBwo#<@%3_h8qM{1uX%0}6 znW|+Sv6s$NQJT4HHViC%hYiGPuEQEFmIs%KttNn&1dss@rFI@Kll>FGJC kR*HtTntH_<`Q;j#RwS7s0dfnfF&UXDsT!J_-37II0OoXP8~^|S delta 204 zcmdmO{mE)V=)^Kb_N>Cv)S^nI$?{?f6Sq1Dl@=AJrlw?;ryGQMJDgRm$6 zW|D+5H_I?j;}y?L(@;##&&f$FD9%jEN!2V$Eh#O^vz~lFz%to7IX|zsM4==m5bu_0HH+)Pk_(bAyO#I=boKVjy`jr(zjxJ#Jgh|x?a=nc~^@yQ`_}Vm}O(j=f8hgZ`Z5g zpYu9Q|7VMG<%#B#ANqa!?{EGb^q<0Um<+qT@Wm#C58Sl>Zua^G&(!{x2fw;6X}~s_ zAZzlo@D_9m35yC6rNFW(F(`mRvkBn*HhNE#qb6udFgq9AHKelAMjhJ0OEvL_z( zwB%fTa4yW9A}vm`0NDhoQc!{{$n3AVBv}MlR2_uQ?M6!M7`{y9+xXa2g(E4Z5JMn* zn-dj4U2@=dM@V<7hZvbg-XW@U`8z%mDRZLZT4&3o2+X3Boa9j(wy+B@hf$Oh6Xi!J zCl#~<>N1t+9q5ozZG2wXjugmU3b`ha$abQCtl@kstqZ3Hu1WwU6vM*IrV51_N^&Sr zXELDN8VZRcWHtMJ(RBKW8g0sp^W*K~>J6L_`t+2k$du=?%^_j@R|2*i;v@l($k-01 zGDt%S(J5iu8*fm{-LN4Dju>>hFUhiNrtN{cv6@At_%+S6M$iIvt>u& zfdAEnJF`tj8XUl+WhZV7NCOqG1Oy47E!m)}7?)K<<ye6?_Gpd#E{ zFlU}lfC?NPgmg%LUAUc_bdwM}F(N2s?VV7e=m(}Z!dt?r5pkhOJGt4ad)zwPGYH7l zxgld}peN?G#0XW@kpao^EC7PY3A4O zZzRudRNm?~hax;B$6?ST+3r9F7q7oeZlC9Jga^Yg62$e}VnW=A99fZQlfWk|2;wLX ztv-23?7;J^e&il`BDzoZg3ALzVn_7ISP)-e)pSlA9QtJX!wIe*i_o%TGInFbvS;uXQ?8jH5Q^rd(`Yhj{24X1=Ivr1hs?B$~yBF`g_t(O$*~5GE-Zc5* z-AA`x$_y_`pZ@*IVUGbHah;AC7&fN{!0`^XfCJD20Nc@M6QH@tX~dx3XAQiA4y)09 zyrd0)7A;_hn3v^+Ri-UG(x?q)m;1>t`ugEeqhsv0$LR?J=rK-BfB~mZC+v;bs3bQ%P8uFBt{DVb!=5x zzpqQ#4(KKWGt}~$q`*ObwOxe<=zxLV?k%fC+tbyco{o~CpmpFyuBjF!CWSILS@Nv% z{@sZ_!$`>g^+18rJ?1ArmDir&ie?l#(Irx&%d1F7+s83itnkhTzBkcm8KAr?!8LXf zhLLBdx?I8bfc4XYL9$X=SS&Jm%8Lv&yV5m9@j%MPN6GKT{HyC6%p5Bw-&XFdAS3CY zfAMR)h~HVNLs@Bbjo*m%lQ)gE¥mm`q)v{E{-s{ST9`jD<`w`N5daJV<^sK78bJ zI?wK+VFFv~=(Pyntxa;7I=^E*jl=k58`sWX(TO=Y12 zO}>lfB(ZirFvqD3#sBCJc1wB+T!z%qza?#`tA*#&)S6VH)!CLRTGR4fOfY@zB>8h^ z^|fL;68-T;bul}Q@Gao%2IiHEtfH(nQpz?ddYu=NgX-2?Uv1H05l83aQ;e0FcL&MO M)$@#>tkk~v2eHAxY5)KL diff --git a/course/format/amd/src/local/content.js b/course/format/amd/src/local/content.js index 63f4e65cc11..e603c5f0083 100644 --- a/course/format/amd/src/local/content.js +++ b/course/format/amd/src/local/content.js @@ -23,6 +23,7 @@ */ import {BaseComponent} from 'core/reactive'; +import Collapse from 'theme_boost/bootstrap/collapse'; import {throttle, debounce} from 'core/utils'; import {getCurrentCourseEditor} from 'core_courseformat/courseeditor'; import Config from 'core/config'; @@ -33,8 +34,6 @@ import Fragment from 'core/fragment'; import Templates from 'core/templates'; import DispatchActions from 'core_courseformat/local/content/actions'; import * as CourseEvents from 'core_course/events'; -// The jQuery module is only used for interacting with Boostrap 4. It can we removed when MDL-71979 is integrated. -import jQuery from 'jquery'; import Pending from 'core/pending'; import log from "core/log"; @@ -270,9 +269,9 @@ export default class Component extends BaseComponent { } /** - * Update section collapsed state via bootstrap 4 if necessary. + * Update section collapsed state via bootstrap if necessary. * - * Formats that do not use bootstrap 4 must override this method in order to keep the section + * Formats that do not use bootstrap must override this method in order to keep the section * toggling working. * * @param {object} args @@ -298,11 +297,11 @@ export default class Component extends BaseComponent { if (!collapsible) { return; } - - // Course index is based on Bootstrap 4 collapsibles. To collapse them we need jQuery to - // interact with collapsibles methods. Hopefully, this will change in Bootstrap 5 because - // it does not require jQuery anymore (when MDL-71979 is integrated). - jQuery(collapsible).collapse(element.contentcollapsed ? 'hide' : 'show'); + if (element.contentcollapsed) { + Collapse.getOrCreateInstance(collapsible, {toggle: false}).hide(); + } else { + Collapse.getOrCreateInstance(collapsible, {toggle: false}).show(); + } } this._refreshAllSectionsToggler(state); diff --git a/course/format/amd/src/local/content/actions.js b/course/format/amd/src/local/content/actions.js index 38ecef0ef26..b513e39fe02 100644 --- a/course/format/amd/src/local/content/actions.js +++ b/course/format/amd/src/local/content/actions.js @@ -27,6 +27,7 @@ import {BaseComponent} from 'core/reactive'; import {eventTypes} from 'core/local/inplace_editable/events'; +import Collapse from 'theme_boost/bootstrap/collapse'; import Modal from 'core/modal'; import ModalSaveCancel from 'core/modal_save_cancel'; import ModalDeleteCancel from 'core/modal_delete_cancel'; @@ -41,7 +42,6 @@ import * as CourseEvents from 'core_course/events'; import Pending from 'core/pending'; import ContentTree from 'core_courseformat/local/courseeditor/contenttree'; // The jQuery module is only used for interacting with Boostrap 4. It can we removed when MDL-71979 is integrated. -import jQuery from 'jquery'; import Notification from "core/notification"; // Load global strings. @@ -395,8 +395,6 @@ export default class extends BaseComponent { } ); - // Open the cm section node if possible (Bootstrap 4 uses jQuery to interact with collapsibles). - // All jQuery in this code can be replaced when MDL-71979 is integrated. cmIds.forEach(cmId => { const cmInfo = this.reactive.get('cm', cmId); let selector; @@ -453,9 +451,6 @@ export default class extends BaseComponent { /** * Expand all the modal tree branches that contains the element. * - * Bootstrap 4 uses jQuery to interact with collapsibles. - * All jQuery in this code can be replaced when MDL-71979 is integrated. - * * @private * @param {HTMLElement} modalBody the modal body element * @param {HTMLElement} element the element to display @@ -466,13 +461,13 @@ export default class extends BaseComponent { return; } - const toggler = jQuery(sectionnode).find(this.selectors.MODALTOGGLER); - let collapsibleId = toggler.data('target') ?? toggler.attr('href'); + const toggler = sectionnode.querySelector(this.selectors.MODALTOGGLER); + let collapsibleId = toggler.dataset.target ?? toggler.getAttribute('href'); if (collapsibleId) { // We cannot be sure we have # in the id element name. collapsibleId = collapsibleId.replace('#', ''); const expandNode = modalBody.querySelector(`#${collapsibleId}`); - jQuery(expandNode).collapse('show'); + new Collapse(expandNode, {toggle: false}).show(); } // Section are a tree structure, we need to expand all the parents. diff --git a/course/format/amd/src/local/courseeditor/contenttree.js b/course/format/amd/src/local/courseeditor/contenttree.js index 2fc675e85ff..e85ac35f816 100644 --- a/course/format/amd/src/local/courseeditor/contenttree.js +++ b/course/format/amd/src/local/courseeditor/contenttree.js @@ -27,9 +27,10 @@ */ // The core/tree uses jQuery to expand all nodes. +import Collapse from 'theme_boost/bootstrap/collapse'; import jQuery from 'jquery'; import Tree from 'core/tree'; -import {getList} from 'core/normalise'; +import {getList, getFirst} from 'core/normalise'; export default class extends Tree { @@ -61,9 +62,10 @@ export default class extends Tree { return this._getVisibleItems(); }; } - // All jQuery events can be replaced when MDL-71979 is integrated. - this.treeRoot.on('hidden.bs.collapse shown.bs.collapse', () => { - this.refreshVisibleItemsCache(); + this.treeRoot[0].querySelectorAll(selectors.COLLAPSE).forEach(toggler => { + const collapsible = document.getElementById(toggler.getAttribute('href').replace('#', '')); + collapsible.addEventListener('hidden.bs.collapse', () => this.refreshVisibleItemsCache()); + collapsible.addEventListener('shown.bs.collapse', () => this.refreshVisibleItemsCache()); }); // Register a custom callback for pressing enter key. this.registerEnterCallback(this.enterCallback.bind(this)); @@ -146,18 +148,16 @@ export default class extends Tree { * @param {JQuery} item the jQuery object */ toggleGroup(item) { - // All jQuery in this segment of code can be replaced when MDL-71979 is integrated. - const toggler = item.find(this.selectors.COLLAPSE); - let collapsibleId = toggler.data('target') ?? toggler.attr('href'); + const toggler = getFirst(item).querySelector(this.selectors.COLLAPSE); + let collapsibleId = toggler.dataset?.target ?? toggler.getAttribute('href'); if (!collapsibleId) { return; } collapsibleId = collapsibleId.replace('#', ''); - // Bootstrap 4 uses jQuery to interact with collapsibles. - const collapsible = jQuery(`#${collapsibleId}`); - if (collapsible.length) { - jQuery(`#${collapsibleId}`).collapse('toggle'); + const collapsible = document.getElementById(collapsibleId); + if (collapsible) { + Collapse.getOrCreateInstance(collapsible).toggle(); } } diff --git a/course/format/amd/src/local/courseindex/courseindex.js b/course/format/amd/src/local/courseindex/courseindex.js index 204115316ab..ae36f3d8efa 100644 --- a/course/format/amd/src/local/courseindex/courseindex.js +++ b/course/format/amd/src/local/courseindex/courseindex.js @@ -23,8 +23,8 @@ */ import {BaseComponent} from 'core/reactive'; +import Collapse from 'theme_boost/bootstrap/collapse'; import {getCurrentCourseEditor} from 'core_courseformat/courseeditor'; -import jQuery from 'jquery'; import ContentTree from 'core_courseformat/local/courseeditor/contenttree'; import log from "core/log"; @@ -197,11 +197,11 @@ export default class Component extends BaseComponent { forceValue = (element.indexcollapsed) ? false : true; } - // Course index is based on Bootstrap 4 collapsibles. To collapse them we need jQuery to - // interact with collapsibles methods. Hopefully, this will change in Bootstrap 5 because - // it does not require jQuery anymore (when MDL-71979 is integrated). - const togglerValue = (forceValue) ? 'show' : 'hide'; - jQuery(collapsible).collapse(togglerValue); + if (forceValue) { + Collapse.getOrCreateInstance(collapsible, {toggle: false}).show(); + } else { + Collapse.getOrCreateInstance(collapsible, {toggle: false}).hide(); + } } /** diff --git a/grade/amd/build/comboboxsearch/grade.min.js b/grade/amd/build/comboboxsearch/grade.min.js index 3fd01ec60328183b46825ccb6fade6f0d243baa0..d557a5743873645db882d864281376ee6cab3693 100644 GIT binary patch delta 39 tcmaE?@j+ul4yROder`d2UTR*6USdj$YZ;K?lUZDnnwMI%xsvl07XU-%5B>lE delta 26 hcmeyM@mOO+4kxcla(-?>eqL%`iC%u*<~Gh(TmX@l3XT8( diff --git a/grade/amd/build/comboboxsearch/grade.min.js.map b/grade/amd/build/comboboxsearch/grade.min.js.map index 9b0ed4097ed61dd2e69e42e558e0eb0748ec1859..c00f5ab29be76c4d0058f7b67d37a254955fd73d 100644 GIT binary patch delta 683 zcmY+C&ubGw6vr_lEIm{N6^o#?QmF1rHc3q(2f;UQCTWOEOt(wSEs`c}woNu|^P>jD zKR^${oV@rq2)%mpAn4JnNB;`(;+vTYdK%u_?|i=B_jbN^zH~k|m%MH|9H*n+NUyG3 zKkqEvxqbd_{qmKaJ%|zG7zP4yARy%<72Kmusz4jD9m78N_67I?)ute5vi?XwgcuRL zUKpc@FBx=7CK>G!v^dhqzfF#-putj5NM&-0nN!ROjwLF2=1OU2t(urGd||*L zv6*_7$eH+m*i>SpBzO~Z9&j!e4v@Do*s+>K{}rbWnjVVt3cl$ZWfDCiw`DJJE+#+v{D delta 659 zcmYL`KW`I35XF^9AS)7y_#+`f5yy~-_$EFZJ0>nDW@p#uQ!v))VlLMuGB&Xj-`Vkz zU`rHq=~trX6A+1tiVj3YOUb98W^eZ-s@1%?dA~Pv-;aJCU3)9H9{1w$B#!z~Qi`K5 zrz`n~YyYJJ6qI6^>y_=n8NV-E)FB481`Y$_y#c#bHf;vl`E;+Ms&?`-uC#GNVC_fu}sx zP^!%+h0|+F*+{JPWHPDp1FFjSWvnk(un`)az6R3%am_7hnwS<5pnf7_K+bwnpoe?U{_ z@?&W;*fmJA^qxpZPpAa~QMm9{ZQw*gliJWm^wec(!lo%gd7IfF>xb#+OI^hBj{PY2 z&h+Q2)r+vo90_qCrFXWZIo||V3`Pp7yD$8H?;P$z( LXllev6yE;>Aq>Ce diff --git a/grade/amd/build/searchwidget/initials.min.js b/grade/amd/build/searchwidget/initials.min.js index 4fbde753536b929c9ad2f3a04d290f13792d5f1c..6bf7090c951d15609c6056eb44da87d2b9612d5f 100644 GIT binary patch delta 176 zcmdn2*`zh0NUkI!H8(XrDL=osL?1|&6qghw7U-uG7}Hm yC6?xt=%uHY_!l`Br6!i7dgc|EB<3ZjYJd$A5>(;T)GNtPPtQr!*z6&g%?to`B|&2V delta 150 zcmZqD+N?RDh%KwIG_|O5;skprYvc70HdTnAZG2{4NorAkK~QR8X=YKXOKMtTX-VkeVGRQvC|@rHBCk2wpG%4zl^LV77cgH!U$^E8x7^3&6E MQk6DO7tCe`0P{yTNdN!< diff --git a/grade/amd/build/searchwidget/initials.min.js.map b/grade/amd/build/searchwidget/initials.min.js.map index b2a47a7aa3b50e5fa9e777dff9cbff8c1eeae5d1..acbcc11f59bf790cdc34cba1b973505884c8f609 100644 GIT binary patch delta 1040 zcmZ`%&rcIU6b_h5BrzriLZf0!3kAZ^)~X;OB)oauHVt4UO)VuxUD|1BX*=z9ODT!b zix(3QI(MW0fk`i%J#+Nz-HSJG9(=P~q8PmFWM|&@<9+Xaee`4d^O|QdZpmg*b{qbZ zCF}lKdtcPWvpp%>c7(om+qTSRq&O(*Z+Lb+>icML(h?0jF6$3vQOt+UV$nFHi_J>g z77bzbzl?skdiRVuTo!iPLQ9yoNHyBF*(iv)qAYak1PQk~!s=y2O%!ZtDbsuV%6!=E2yHr&tCc zgRB5h*kL^m(BpYlp|iqSi;fm&8-TS$;_pIr68JRoSl?u~)bpTseAjt32EZ&!18k#u z8+2fO5+DRr!CNdKc$gA$ag_yu7 z@gv@HFP#Q*NERT4^aA-~=P(b{gOKlug<2FOPwJNN5MyT-#O;nu59@&MI4#Hc0_yPd z)ntP^Q>b(DW|YX9<5SDnF0!LOh9;+u20zH|5l@R(<2rj>!7kTs3SIRr zP`F9J<3!J;ro%1KQ6bx+T!B^wHvWT6gK?aQI*DZyPUCxn?OP)KCelji*(9{@@mz86 zR!2Q%MyrEe^=3BbqsDZ$R-Dl+aG5VTw(~Xa0^ZM!tyBG_#qbIN4J@^N7-YzyF@v`r|otf|Z=9~Fd{Qm6Alh7S4a^P6qNW5)( zO=mc2hpM3|P5zj@@4H<@A$o&1p4V;kmBWJKtYPHXQ4u zVGVkTxNEgqoo0MRzMGAX!t)YtP0FkClZKdV3DCb4mskOCJPkbnqX+oDsNu_Q&k7Kuv|=W z;W~3~iV4t+P~;^YERI=%*a_TWb##{XFZ?{l9jX@p!o7;sP3H z+401(ioWtHSU%WfO(&ENhLiOrHO8SXo3JK;*NKKwOYEh&S7oH51G`OI;*sA;g$4VI mtgv|MeVtv$I`4(KMH%@yF(2c-SN@y^g_+64;NDbz^!zV*bRy>f diff --git a/grade/amd/src/comboboxsearch/grade.js b/grade/amd/src/comboboxsearch/grade.js index 611258173a7..b965e2c5a76 100644 --- a/grade/amd/src/comboboxsearch/grade.js +++ b/grade/amd/src/comboboxsearch/grade.js @@ -55,7 +55,7 @@ export default class GradeItemSearch extends search_combobox { searchValueElement.value = ''; }); - this.$component.on('hide.bs.dropdown', () => { + this.component.addEventListener('hide.bs.dropdown', () => { this.searchInput.removeAttribute('aria-activedescendant'); const listbox = document.querySelector(`#${this.searchInput.getAttribute('aria-controls')}[role="listbox"]`); diff --git a/grade/amd/src/searchwidget/initials.js b/grade/amd/src/searchwidget/initials.js index 32f2739d987..da1c2d755a0 100644 --- a/grade/amd/src/searchwidget/initials.js +++ b/grade/amd/src/searchwidget/initials.js @@ -26,7 +26,7 @@ import Pending from 'core/pending'; import * as Url from 'core/url'; import CustomEvents from "core/custom_interaction_events"; -import $ from 'jquery'; +import Dropdown from 'theme_boost/bootstrap/dropdown'; /** * Whether the event listener has already been registered for this module. @@ -67,7 +67,7 @@ export const init = (callingLink, gpr_userid = null, gpr_search = null) => { const pendingPromise = new Pending(); registerListenerEvents(callingLink, gpr_userid, gpr_search); // BS events always bubble so, we need to listen for the event higher up the chain. - $(selectors.parentDomNode).on('shown.bs.dropdown', () => { + document.querySelector(selectors.parentDomNode).addEventListener('shown.bs.dropdown', () => { document.querySelector(selectors.pageClickableItem).focus({preventScroll: true}); }); pendingPromise.resolve(); @@ -139,7 +139,7 @@ const registerListenerEvents = (callingLink, gpr_userid = null, gpr_search = nul window.location = Url.relativeUrl(callingLink, params); } if (e.target.dataset.action === selectors.formItems.cancel) { - $(`.${selectors.targetButton}`).dropdown('toggle'); + Dropdown.getOrCreateInstance(document.querySelector(`.${selectors.targetButton}`)).toggle(); } } }); diff --git a/grade/report/grader/amd/build/collapse.min.js b/grade/report/grader/amd/build/collapse.min.js index 2ad991dec499d81a9136d880d86459c69c214d4b..b02b13330e5c14a42976036a9c1367b120214d09 100644 GIT binary patch delta 201 zcmX?G)K@%Vo?J;rYHn(LQht7Mi9V1lDK05WEYMFW$}dRCFVCB}WH&F2trHKFo2(!w zy}6Y!hgAzEY#X1MSCR@;ACy{Hnpu?UlA4xSnp2_?4^yBC)?>uJgJW`lu*~M4{LaF5 z3UFDy6o`7g^wbjnBIlyi#FA9cyyB9?yyR4kl8nq^z2yAdg8aPHyb?{llKk}aoK%g? Ph06Q*!G_rx^Roc}V<$|P delta 154 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 diff --git a/grade/report/grader/amd/build/stickycolspan.min.js b/grade/report/grader/amd/build/stickycolspan.min.js index 844801ab723a632dcd5182577320999192fa3abb..42a8dbebed4d16d4403d98a9e56359f9e382d4f5 100644 GIT binary patch delta 125 zcmX>hG+Stb*+hFyzT%S12Xd{dQ&Q6sOLI!BfSg+E$(I>_xoQ}| z^y@(-H8p}=eO#SG{DXqyLxWv|T!Q=qT>QiRH1+cHG?a=n^2_y-iuF>8@(WV(%kva6 RGE-6~8!@MDp2ghA3IKByMu`9b diff --git a/grade/report/grader/amd/build/stickycolspan.min.js.map b/grade/report/grader/amd/build/stickycolspan.min.js.map index c5d7ea8de1e5da290f2a8cb44727c8ea1778fe99..c935564d850ee1e2646c3f4c9fd1ab60dca09a13 100644 GIT binary patch delta 748 zcmZ8eO>fgc5LHp76x8NK3&|UPz>!{(P}UE^UWYs8@89rIbqOuf@yC*^Xz%%eZ7~7&$6FyIF34Td!tHg zIC6V#nA;nA!BmVAyW(?VB-S>r#ILR7qP`(E(FyEvm#|ru9gN*@X1cy>kAje#P%GA? z+mf8F|I>>x<&fi?#J)6=q_7Pn+vd_Bb*Vz(m&K04;vPrc|fA6nATY z69xW(uz(N)nk$2Pguqk)6`2O0A=3eLgN+F=<|eZMtm_wc%%R*SSQi00$VyQ5asEp3 zmSbs+&1kMm#D`QL^K%lwzIw(wa;74M^jN3?rAO$jb+zB793xL^~--*Fl2q1a0ACcRbUKs-%9*y|y4$#{XUqT_F%FsxG5l8e+rm$q`IG^&&e9on>f6sgm>$0npn6)MM|j;`(I%U^NgL_tFR z5f?GAvm<3>fR%wCfy8e>VuItF48U}+eBSfC?|uF4$&be$&x%|7<(o7P%hkas^V50t zY;jWjxmMVhsOfqf9aP7?cy@R_KJ?N!@#0xj?)5!izSs8TXDyKr*IzE)t-sw^iz69s zTe=s!S?EWT3RE1=GpBrQ^~V!GlApGdEoEW(f$vV@6oWt>>~yr7I5i!&x0vrxq1Zjg zn*6fczI`OH;UUZf;!F_K5$iA_#4!;x&^$5_Ohl8Qjo2o*M7%tQjMbTFf{kb|Cr}eu zKQ#zK-W}$gM!*CM(IV)xywC7CpCO;D#S_tCKHVl}6NYN1rHt&Ak%RSPYAL`4xQMQ& zFhjv}O32S;){B4UoQitX72qKHhT@nj?}5lO)0B9hVO{ZDjSbjbqB$9*6iU>M%~rne zw3peX)Q_}|3Sh~v`u&X#TyYq<;2s+Cw_dTY;T6l(hjw1b6@-Eff@hIX4;xWU0Jls7 z?t|;IkH!C~&49SFyxLQtI(;gqrM pendingPromise.resolve()).catch(Notification.exception); - this.$component.on('hide.bs.dropdown', () => { + this.component.addEventListener('hide.bs.dropdown', () => { const searchResultContainer = this.component.querySelector(selectors.searchResultContainer); searchResultContainer.scrollTop = 0; @@ -319,7 +319,7 @@ export default class ColumnSearch extends search_combobox { form.addEventListener('submit', async(e) => { e.preventDefault(); if (e.submitter.dataset.action === selectors.formItems.cancel) { - $(this.component).dropdown('toggle'); + Dropdown.getOrCreateInstance(this.component).toggle(); return; } // Get the users' checked columns to change. @@ -508,7 +508,7 @@ export default class ColumnSearch extends search_combobox { this.registerInputEvents(); // Add a small BS listener so that we can set the focus correctly on open. - this.$component.on('shown.bs.dropdown', () => { + this.component.addEventListener('shown.bs.dropdown', () => { this.searchInput.focus({preventScroll: true}); this.selectallEnable(); }); diff --git a/grade/report/grader/amd/src/stickycolspan.js b/grade/report/grader/amd/src/stickycolspan.js index ebeac852da0..e6f8df27f3b 100644 --- a/grade/report/grader/amd/src/stickycolspan.js +++ b/grade/report/grader/amd/src/stickycolspan.js @@ -21,7 +21,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import $ from 'jquery'; import {SELECTORS as stickyFooterSelectors, eventTypes as stickyFooterEvents} from 'core/sticky-footer'; const SELECTORS = { @@ -40,9 +39,11 @@ export const init = () => { // The sticky positioning attributed to the user column cells affects the stacking context and makes the dropdowns // within these cells to be cut off. To solve this problem, whenever one of these action menus (dropdowns) is opened // we need to manually bump up the z-index value of the parent container element and revert once closed. - $(SELECTORS.USERDROPDOWN).on('show.bs.dropdown hide.bs.dropdown', (e) => { - // The closest heading element has sticky positioning which affects the stacking context in this case. - e.target.closest(SELECTORS.TABLEHEADER).classList.toggle('actions-menu-active'); + document.querySelectorAll(SELECTORS.USERDROPDOWN).forEach((dropdown) => { + dropdown.addEventListener('show.bs.dropdown', (e) => { + // The closest heading element has sticky positioning which affects the stacking context in this case. + e.target.closest(SELECTORS.TABLEHEADER).classList.toggle('actions-menu-active'); + }); }); defineLastRowIntersectionObserver(true); diff --git a/group/amd/build/comboboxsearch/group.min.js b/group/amd/build/comboboxsearch/group.min.js index ee1a6951c64bad1c3b760bcd0aa0f39164504a30..522cab10779aad2003ff802f25540f2d9c45a164 100644 GIT binary patch delta 23 ecmZ3Yyis|B20L4Fer`d2-sB6cVw=s`bGZOzEC=%d delta 26 hcmdm}yhM3}20O1xa(-?>eqL%`iC%u*W+(Q1E&zOx2>$>8 diff --git a/group/amd/build/comboboxsearch/group.min.js.map b/group/amd/build/comboboxsearch/group.min.js.map index 5a5c17602e51574652e05a0acc6de774059ed8b5..6d43dfa720a2c893fa1083729972c77961669dae 100644 GIT binary patch delta 687 zcmYk4-D(p-6vweBr1YvNNG_zbh)DM|v2NNV6}4y1Oqx=+>t;>23reveO|zRX8%<0> zMQ^~bLyvX`&HStSBw$XtlHSI#@H}sQr?NYayHd^BYiwkhHIyq zDQF{|Q=M0XY9HRQrMoLVm%K`lztBShk>w(w_?}PEs@2 zv<5B2)~Vr9wsn6b`S5zOt6-b);Y9x`at5`Q?$7=1vKSX!KMF0Q* delta 720 zcmYjP&2G~`5LPN7wW<(sESIWL#i5?YAt9tWfS8@#Bvom)B&#Wy-zilydi|dbh~| z6!zCmXgzB*viA4T$q-ZE2xRA35b?=pOi}U zYvNKs#?Q!vYXxF?JBE=oo?}zfLK0MX26S%QGYRjw>=48fgD#X=qc^vAzKMKj=plHB zUWLp-`X_9yURhM8e}TW+u!W=RyVWNnWjL9HX9E3+>g2K%v|-AJybV~^Uv{U**A{A@ zTTw7X8c~~PhH4)!Ia$k { + this.component.addEventListener('hide.bs.dropdown', () => { this.searchInput.removeAttribute('aria-activedescendant'); const listbox = document.querySelector(`#${this.searchInput.getAttribute('aria-controls')}[role="listbox"]`); diff --git a/lib/amd/build/comboboxsearch/search_combobox.min.js b/lib/amd/build/comboboxsearch/search_combobox.min.js index d9a692968a6186a004a99d54b185db0beb65d404..a51862232c7e3401b774a0e6fb0c4c0e46af1360 100644 GIT binary patch delta 213 zcmX?Svek5glUzwgYHn(LQht7Mi9V1lDK05WEYMFW$}dRCFVCB3Z_NQ?Z>(r%f^#O{ zWs-z*HveJT#8)2=Q>d4cnwD6aQ=*riTH;^iT$GwvlIodPT#}fVoT^chky)%)lAoTQ nld7p#oRMFyp=m{i&Wy~IR1MAA(t;GA;ePoksl}URg$y|WElW}T delta 81 zcmdmLdd_5m)5K(pjZ0gZHit2<=bL<=LsGINKRrDsRZ}meD8C>jzdTPvsW>CQTuIXk TBrA?7n~|B4s7Wn1|6{)NZSq;6I6}Idmu&_J2DMk~$ zn&@G!#*=qVIQvI<_F#F1JDwx(;`1!-zY>w!6+fKg#f+ z+wHqIGLaX=>*DuiBlG_=p5JjrE{mp()R*Ly1ri1_6t6rKbozJmapI)^5VBLd@a|Oa zRu!0!Ybd|~0nSlW2dFc&53qkk(GdpLBXrSgmLdzRK0QDK45aCx7C;--0BXf!5{hg9 zdxIihQv3LhfbHbobE7Xm^a+oMRQcK&zp5k&r$b?t^UJaw%QmFFs`yY&8=F{e zOCI%!^v&oqGRw`9xe@(+Bk`lWc2>v04nn3~MdExVnc(7jWg{hjMx`qY$^FF^bK3y2!+^NZjss4k^{6g&c zgXK8vc8@!cm)oadza0*Ph5Wz^hj|Iv-1QXCZ+G&OarW}gBU^=;5kiVa2=K4Y(js&!nWFo^ybSSegzCS#oE49R+(<5z4flb6F z*Fzw0RV&s&KnMAXc=?a6lDJp&h_voTN++n{cAr89WtG#}O#C!_Ij-I}V)?OZ%|slA z0`2x|`AcB~`KNl%7|A*F*-U|;pmufw*)Vg)s(foM-l#D7#e6ioP7tbAV&Tc3X6d#X zBQ>6irzG!Mi@7tV{PX=4rks#iVnB$*l@qLSU42isto*zVMhC~FO`Q;QRg+zoT(x%- n`y&>}uhx=Ll$TZpdTFGz;k`tKBtr-Q4&uxCgPi diff --git a/lib/amd/build/dynamic_tabs.min.js b/lib/amd/build/dynamic_tabs.min.js index 9eb86673630f8f5ebb62570c88003604c8d7f1ed..7a4ea705f26bc7cdc21eb53700663cd2eedfac15 100644 GIT binary patch delta 273 zcmX@4_)l>|9;-}dnnp@~a%paAUWr~|X=+hraB5C!a!G!XV@}TGiL9aqdTIGZu8GMR z8X6^uNg?^^={c#kcGYmUUSdj$YZ*|tPiApRYF=v5=54I5Oe*N28cM|(`Q>^^#d<)U zN;(=EnznY6#X0&6ba0yl(UXU!X%DBwJ_CH+2{fX=+*nZ3#%sOI1_L$xloPNlXHH1|*=DnW9;{S)X$HPO7bjflho@VQFenrCv&ET4HHViKa%dtBb^zK-TGs#o diff --git a/lib/amd/build/dynamic_tabs.min.js.map b/lib/amd/build/dynamic_tabs.min.js.map index c56ea03b0420e68d6667e02721dbc817737ee5da..0d15792fddc9727fd8597bca4886d343d815f790 100644 GIT binary patch delta 1647 zcmb7D&ue2<6eg4zns!=(iqk^ViK){h&NV+eo!GG`oO|+;yh&ngn@n^Vi%H%~n$By| zzWk_m7@{KXrz1|%wCt`zaWU>dO&dJ!gKG7Wr}6MEMD$?=g0S*?|kpu(pT?% z|G~7cPoK;!PJ!c4eR?@Es5dITcH6Q0@m9|@>dn3A*{jf7Z-*Y zuEc%m|5e_7ww~taE>k@4BK@`S!t0(q@wPpH!NBb_h66hq*>mkyBo=q=L#N)fqlw*> zga}09?xc1oC0?eV< z0oXy&kpLZ85mkU{LDaywg#{JbDvI~PXn_utCTS{ARh4*4QZ@8fR zNX{$EV^?aRp%hJkX2MHuBWFM@FCIw1!;HyL&=h4b9d3NSU7Pu}C8y&)7R46h8@gdq z3WfBBm%brI9iXn_Td1F+08kQzG1p~pD-H-Zq>eBLm8LlqMiLbXIFJmF7OJxHo+r+E z&N)psg-0p}!9&TY{6f(K@AELMMj4D8)AFcZQ7Zr2h&~N3`g-&@92`$bq$j+23$+o? zr?$aVc-mG|cR0L=iZP**L{S3%DJA&Hh&vUJ$^rN3Nsc~{2{crs#v-I87!43Zgg2oI z;t2UQb4w!J%kT=&dJd*3xF@FYn0hMoI;UCFcQeGSy@LiQyxpX5RH!3xvE;5dHu|aArom8)KI)@_6Kff^yN0H zA-2Uj4_{l;bj+-dl(?5Nu38pqf909Kk;?3&xTLU-X#Z83?q)P_k1kzb-$+RXS2&ic zs)QoPmn zr5%}&ecit{@L&&Ub9L$N9VIFIMw!qWdLP6jVd&*$SUbEaLCa|<$x3SYJG^?e6a9fe Nf!C^TDqIdf`UeY7)o-viL>jh z*A5Ou7W@LFdEkWy9(mwP$}d2D=x;y>9(nB_=mYo8I&o=)rFgS5cg{KYoICz*qMl^_z1e zf;vkfXat+d7&~pZXV|_YjgH$3rPnh;-{8I<_QJsG8gd}LuxBjw+Wtwp(MzM$CByQZ zXvMo+I%&Ih+d!x=a9b@INXO{+T(4!USNk#;(h;O2e&n<*&+z=vXh>xC1~Le-d?-Vr z_N>qy$T4p^l6mRR#0+#Q`5#ftX!bojba6dpd^stkj*(JyB$A&0mAEsNoNQjATsHDN zjQZsI+iMh5av>R_O{ugMhCy6c$el(ulES>T$$9+*6?@Iv5 zTn^@r`h9M8WYU3cfk0s2r$VTG%!#PJ&JH<pkC0E_id8mip{v(VAowI08UQyG!G`+^)409q7ck_$qsr6V<5 z7HzSicOP*5I1~{LI#3^o201~ZF{UQ^g1yz6SJ_PMXjTlhKS(EG1QF}@rx6~7>vOd4 zkY~g?0o5^;6^yF^tdA0Fz>e`z$D(@z9_BC{;ru^kkpe-Z`V-0vM(xU|`i1VqM#@?V zg`ph*_Jgrh)~|Lj9t||s2I1v~dIXBX#!kTH+A*QMsFG&5%MpD=fSD0kib-{NhnkC~ z!bB5CWR*VGj*joKJ_>FYwabFxpoy)Ve)&jHuUl*xf$Pf`)ig#lV-y&TTNEC-X=Zbn zJdySE;$Ac*<6LoQvRp9rbYU3l=5*Py>fTu%4Rk^2Si|8AD!Ll`_p8SQT7c!B%Y@U^{B#Gqj)x0k52Lh6!Ts=ymz{g{d6T>2)YJk5#El{Qai l@(`6w$xklLP0cIOOH4^|Edw%qGK))6^HPg8{}$I_0sw#}AXNYW delta 208 zcmZ2$yxe4hDO*-yX=+jBM57=Wt4UQqtu!yWBr`uxAwDy&B(*5NASku4G_xqxB{eOv zG^a!(KPgMIx+t}zv?xyj$e#RVImt@kq;Y-YA$qr>G_$s=ma`Ch5~hi^aTUWa7@;A22##B&aNQJTgTJU j(bHMS%-PYg*x5rT+|f1987x)+(NhefoQs?+ot0_i5QT{Z(Qd_^i@{AQy{5+6Qrp$!CWba(DKWTl(l~KBj9r;Us3}6I7 zEM|eoxq8K+ta=?T#!&)gXGz4bp})pG=8v+3fe1l&PJrDro+j%5HWyq;!DGM~3s?Yo zl#a_>^Y7^Tg=!%DY+7;$s^C>!h(%@lRof7}c<*TPk&RjL-C0Vo!CfEX|XiJt(r~-hy$%SJX6nG1{s#|hCv)e$00tVU!$ea iTWYPuCOyO+B`u1W&_20DlhfbXY|UgVp|M`4`wu^mre(DN diff --git a/lib/amd/build/local/collapsable_section/controls.min.js b/lib/amd/build/local/collapsable_section/controls.min.js index 61f7fa94ead01dac0a75cb3963baa6d843aac5ec..8aa56518f1a9b582acb70c4d8a0279dce1db4eb2 100644 GIT binary patch delta 425 zcmeyyzg1vDs$5A%YHn(LQht7Mi9V1lDK05WEYMHR&&f$FC{CT2EzbdCZ=A4(NgT$p z)yPlEvWOU}@F}5Oxo`Omv9o zD-?LCQ=g%a(7ki#X15iB?BHddXV~BWW#?w|OL<-l<%!*=E>9wAS$d!0t?0yQSVT;w@lcVJ68P2&qtsp&o46zrUY<*l$-qEiIlMiM2Ht#1xLboMr_i zGR!#zra%f_K(1&AW0?UHnr42WnTTM@bPTSPN@sow>kf1^1ipYNg^VV0Qc9*V6>zY# z|7hd!=Ei1aR~bZ^uW9HU36`WX(`9C(4jpGQ0qgixbvbtz-z=O}r4DxvpFt4&BBJ1P z4l^9+gbJ-dO9*nMOX2)Mihy1c3G+3Z(+*{jC#BItM+&=k7!)a0PRzoP3iIve=hk1C z=U;ApT^L_d?*B^Ym??*HIx7-L&izzT+bT;?%Y0u7uRcn}a#}?#n-915;wzs_%P8XY zY|Ccr&c~HMf4~X2uhc$M+6ko4J`>8eX8rCp*flB4yTcIUW< NvDdFlkvgM&`V$Z@Ix7GG diff --git a/lib/amd/build/local/dropdown/dialog.min.js b/lib/amd/build/local/dropdown/dialog.min.js index 3b3b2542fd4fd92fca93eb73a9cc5bd5bd5fe274..281a0829628fbcc78f26e04ae36315ea785887c8 100644 GIT binary patch delta 144 zcmaDV(JeW_K&~VsH8(XrDL=osL?1|&6qghw7U-uGenCopd7g$+Nq%~IPO8%8Rh$o* E01VVF4*&oF diff --git a/lib/amd/build/local/dropdown/dialog.min.js.map b/lib/amd/build/local/dropdown/dialog.min.js.map index 2174c517b7f595b91c648a303406f2a9f8fabf79..a7f7705689d6c23bb8e29b19979bda74534badc4 100644 GIT binary patch delta 428 zcmZvWzfQtX6vkt0B9n=66NHL`5Kcgd3*)(`g+MixFjO2g1ukuca-qFqV&bST(CBlR z@Cv?#lTY9aI9Q5oE+;wpe&3&0_J;3@a_0Fn5lB@F#B3-Yrs^mVzIq~E?(^He5TUHZ zSB5gMXO-a}w2YLS-Rj0tcDOVH3b-wKYZ^*>I^YHAdSSVLFQu3k%ThSbgcqXky~E}6 z{^w5SA4eYYYbKaklMD<*qYWLzPK`kq%{n!r zuiU}bS@e@jr|Jw$M6(p-)T727CC`|^Mzp~~?19HncWJU#d;%xVbr|%pGoz%1ESHj! za|ku;UWU<&nw>8Q28e?>tpcbTqp`86LkqE0CE$qsG|?I(@N~2;v;@3r#uL$M!#J)P evsDPySu^IzNW27N4Y5Y;c%A;JC3sg-{^=KPC5c=B delta 587 zcmaivL2DC16vqz+S}!7k7X$X$OImm)wuouy>CJ4aF|9Ggk`#)t-JR@CvYFXTCJ8AN zKg6PE&z^*Q1uuSvUi~2MY^)xg+symD-~T^f=rj9XDt)Te;6p56)SU~nf{702i2ykR zt&$bYXCj25HXxN1#t*Di5iF&RfoW}L*7zyBtU}8|;48QiV8lc(@||TY6r6dd&+7+` zdc*mgAu_%dVf9kUNve%?p$}c^(C7(NMpIW|eN_7Rz_p?zxoagA*f@6tIu!qs(!>w` z9|eET=7W3AQ@xs7tJQurG&&9SQtef&j-o_V_Kz=>=Rv}WYmoLXfqjej2KbG@PfK2=csdgzqW}##hFLF_tR_( zo=z>tfGE)13HU*d=8LbJ*dl6Oa}-2kRm@I?D4Wzj^9pbrEpG;(s(@pg3d1(V*MI=(=*jwevs#l&Ot=MA~+V8vxl eI=Mi_`PdZuJ9?J5n7D0D-x0vYm^XRHA!7hBrE~TG delta 75 zcmV-R0JQ)1hXd<{1F&cYvz`VFM3c}-GqWvAU?P*3hYqvgZH6=jGI~Wpce87vOb-W5 hK|?V^XGyc(v26zjQ$b01LuW^`a=B0n0cw-O!!vkF9d!Tz diff --git a/lib/amd/build/moremenu.min.js b/lib/amd/build/moremenu.min.js index b1260db9988ce98348e88508295038407131b831..1fe5c44dae3eac0a499a6d735cf22cbf12937767 100644 GIT binary patch delta 159 zcmdm^aYcQC@Gd-~+Ge1wWI;}J>8N^bE&&(@H zEy^zlN-ZqSEJ}4rO-n4zDbdJJ%F?VZN-ZfZ%2NQcCtqh&VyxYm?!}k@G13-?zIceV zCWe(bHK03f^H0WT0bvaT9jH-yDG(=VPM*&#Kben}Q&}%RPeZ9VBfnfPsaP)s==PNS X@;oIS4Va%aG^-~oa2QQ~FZ2`uxqfHX diff --git a/lib/amd/build/moremenu.min.js.map b/lib/amd/build/moremenu.min.js.map index 371e2c00cde86585a8e454f27e3ff6596377f149..8aacb8b2ea131bda5c8b4ff6c16de6c07a1822cf 100644 GIT binary patch delta 175 zcmcan@Tp*fAj@VgmIo>vDf!8zxv6<2lM_YMC!bRmoXn^$tWcbhU#^!_td~-hUyzbt zo~N#(prNT?Yo|~hlcxX#lNSmHO>UJC+>)rR+^Vwk_nX5+#I7>%EFYNH~FTnH;b8%quFK+y(yfArOuAN zUOJwRj=q*II@wN+j@eG0P};~v$KBDrlh!*rRJ6RWEPjC=A{;G zzQ=rxIRB)_OQzO*>C$Tu~wR8ucMZ?itjHD(cP>L(X6N!e=ZB_|f;12yDm oWag!$R%q6eVD{uh4k?^Qt0Ea~pjoS_se{WAEFgDI{>pJ207oES9smFU diff --git a/lib/amd/build/usermenu.min.js.map b/lib/amd/build/usermenu.min.js.map index fc29e62b8722820aeca46b2bdfbc572c2df65f04..27bc40e980e50eaad3ad2efdd9a0d0731502c81b 100644 GIT binary patch delta 741 zcmb7=zityj5XKc08DS()atbk^D3*~RNJDG{2&kgj@x`(e$5!%|RD(4oiZP? zmU*3dV1AswXx?PzM`uqSX0IQsRz0a3ij;J;tTM(4UAZ!iy1J?(^L0+Ah~E6C8~^QI zDVcZKCF596=BD9m=3CYpeYZZ(T$+9=K*8DBv4=9$o84H;P%3k{@YZad`f)-*sjV%Hf(XBxwkovR%U4a;g^+Yjw zyD6~JDckA4YO3f8*kj?IfHnh(AV|Mz6I&@^#)Nji+(;h-uG&O96kDmLF~-~nj}SfD zHm%(5LPz{rgPYiP%$MAqGn2Ay?%XlU=YJhMPv~|d=^P``Bk=j+3!k8ZSh>g5s=9o4 zig+Z30Z-H;kN#nXdgAR9XFe&IQ?eSL$4D|SVC?11(!MyF+#WA88N4W(yzS;tcvN`# E8(>WG761SM delta 506 zcmZ{f&q@MO6vk1cKY|5nHWHD9P{P4n7}fIJ(`5OlvLPmyF^p!YqcfwT6w)(Xw?&T- z*dw&-F@oCJqE)-bai}EPT=>p+e&0Rc&DP!KgW#EqMvA&tjjUZZnyTIzh#uL^hf_r% zx^AcyRWUW)h&K&Y&#AR$EUwk~{cMnb`U8Xhbl>ZW@?+nUHx^gUb)AOh%N6zl1+}2`j!UZZJq%QAuWyO&^Zr wL6_nER-)DGF8~poSpWb4 diff --git a/lib/amd/src/comboboxsearch/search_combobox.js b/lib/amd/src/comboboxsearch/search_combobox.js index 434d5d81aa8..020da1faff7 100644 --- a/lib/amd/src/comboboxsearch/search_combobox.js +++ b/lib/amd/src/comboboxsearch/search_combobox.js @@ -14,6 +14,7 @@ // along with Moodle. If not, see . import $ from 'jquery'; +import Dropdown from 'theme_boost/bootstrap/dropdown'; import {debounce} from 'core/utils'; import Pending from 'core/pending'; @@ -260,9 +261,9 @@ export default class { */ toggleDropdown(on = false) { if (on) { - $(this.toggle).dropdown('show'); + Dropdown.getOrCreateInstance(this.toggle).show(); } else { - $(this.toggle).dropdown('hide'); + Dropdown.getOrCreateInstance(this.toggle).hide(); } } diff --git a/lib/amd/src/dynamic_tabs.js b/lib/amd/src/dynamic_tabs.js index 577a0535e03..7f1140995dd 100644 --- a/lib/amd/src/dynamic_tabs.js +++ b/lib/amd/src/dynamic_tabs.js @@ -46,48 +46,47 @@ SELECTORS.forTabId = tabName => `.dynamictabs [data-bs-toggle="tab"][href="#${ta * Initialises the tabs view on the page (only one tabs view per page is supported) */ export const init = () => { - const tabToggle = $(SELECTORS.tabToggle); + const tabToggles = document.querySelectorAll(SELECTORS.tabToggle); - // Listen to click, warn user if they are navigating away with unsaved form changes. - tabToggle.on('click', (event) => { - if (!isAnyWatchedFormDirty()) { - return; - } + tabToggles.forEach(tabToggle => { + // Listen to click, warn user if they are navigating away with unsaved form changes. + tabToggle.addEventListener('click', (event) => { + if (!isAnyWatchedFormDirty()) { + return; + } - event.preventDefault(); - event.stopPropagation(); - - getStrings([ - {key: 'changesmade', component: 'moodle'}, - {key: 'changesmadereallygoaway', component: 'moodle'}, - {key: 'confirm', component: 'moodle'}, - ]).then(([strChangesMade, strChangesMadeReally, strConfirm]) => - // Reset form dirty state on confirmation, re-trigger the event. - Notification.confirm(strChangesMade, strChangesMadeReally, strConfirm, null, () => { - resetAllFormDirtyStates(); - $(event.target).trigger(event.type); - }) - ).catch(Notification.exception); - }); + event.preventDefault(); + event.stopPropagation(); + + getStrings([ + {key: 'changesmade', component: 'moodle'}, + {key: 'changesmadereallygoaway', component: 'moodle'}, + {key: 'confirm', component: 'moodle'}, + ]).then(([strChangesMade, strChangesMadeReally, strConfirm]) => + // Reset form dirty state on confirmation, re-trigger the event. + Notification.confirm(strChangesMade, strChangesMadeReally, strConfirm, null, () => { + resetAllFormDirtyStates(); + $(event.target).trigger(event.type); + }) + ).catch(Notification.exception); + }); - // This code listens to Bootstrap events 'show.bs.tab' and 'shown.bs.tab' which is triggered using JQuery and - // can not be converted yet to native events. - tabToggle - .on('show.bs.tab', function() { + tabToggle.addEventListener('show.bs.tab', () => { // Clean content from previous tab. const previousTabName = getActiveTabName(); if (previousTabName) { const previousTab = document.querySelector(SELECTORS.forTabName(previousTabName)); previousTab.textContent = ''; } - }) - .on('shown.bs.tab', function() { - const tab = $($(this).attr('href')); - if (tab.length !== 1) { - return; + }); + + tabToggle.addEventListener('shown.bs.tab', () => { + const tabPane = document.getElementById(tabToggle.getAttribute('href').replace(/^#/, '')); + if (tabPane) { + loadTab(tabPane.id); } - loadTab(tab.attr('id')); }); + }); if (!openTabFromHash()) { const tabs = document.querySelector(SELECTORS.allActiveTabs); diff --git a/lib/amd/src/local/action_menu/subpanel.js b/lib/amd/src/local/action_menu/subpanel.js index e916d229aff..fc839b19a8f 100644 --- a/lib/amd/src/local/action_menu/subpanel.js +++ b/lib/amd/src/local/action_menu/subpanel.js @@ -21,7 +21,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import jQuery from 'jquery'; import {debounce} from 'core/utils'; import { isBehatSite, @@ -71,9 +70,8 @@ const initPageEvents = () => { if (initialized) { return; } - // Hide all subpanels when hidind a dropdown. - // This is using JQuery because of BS4 events. JQuery won't be needed with BS5. - jQuery(document).on(BootstrapEvents.hideDropdown, () => { + // Hide all subpanels when hiding a dropdown. + document.addEventListener(BootstrapEvents.hideDropdown, () => { document.querySelectorAll(`${Selectors.subPanelContent}.show`).forEach(visibleSubPanel => { const dropdownSubPanel = visibleSubPanel.closest(Selectors.subPanel); const subPanel = new SubPanel(dropdownSubPanel); diff --git a/lib/amd/src/local/collapsable_section/controls.js b/lib/amd/src/local/collapsable_section/controls.js index 49ead59af3a..8cc07d73188 100644 --- a/lib/amd/src/local/collapsable_section/controls.js +++ b/lib/amd/src/local/collapsable_section/controls.js @@ -35,9 +35,7 @@ import { notifyCollapsableSectionHidden, notifyCollapsableSectionShown } from 'core/local/collapsable_section/events'; - -// The jQuery module is only used for interacting with Boostrap 4. It can we removed when MDL-71979 is integrated. -import jQuery from 'jquery'; +import Collapse from 'theme_boost/bootstrap/collapse'; let initialized = false; @@ -67,14 +65,13 @@ export default class { initialized = true; // We want to add extra events to the standard bootstrap collapsable events. - // TODO: change all jquery events to custom events once MDL-71979 is integrated. - jQuery(document).on(eventTypes.hiddenBsCollapse, event => { + document.addEventListener(eventTypes.hiddenBsCollapse, event => { if (!this.isCollapsableComponent(event.target)) { return; } notifyCollapsableSectionHidden(event.target); }); - jQuery(document).on(eventTypes.shownBsCollapse, event => { + document.addEventListener(eventTypes.shownBsCollapse, event => { if (!this.isCollapsableComponent(event.target)) { return; } @@ -107,24 +104,21 @@ export default class { * Hides the collapsible section element. */ hide() { - // TODO: change all jquery once MDL-71979 is integrated. - jQuery(this.element).collapse('hide'); + Collapse.getOrCreateInstance(this.element).hide(); } /** * Shows the collapsible section element. */ show() { - // TODO: change all jquery once MDL-71979 is integrated. - jQuery(this.element).collapse('show'); + Collapse.getOrCreateInstance(this.element).show(); } /** * Toggle the collapsible section element. */ toggle() { - // TODO: change all jquery once MDL-71979 is integrated. - jQuery(this.element).collapse('toggle'); + Collapse.getOrCreateInstance(this.element).toggle(); } /** @@ -133,6 +127,6 @@ export default class { * @return {boolean} True if the collapsable section is visible. */ isVisible() { - return this.element.classList.contains('show'); + return Collapse.getOrCreateInstance(this.element)._isShown(); } } diff --git a/lib/amd/src/local/dropdown/dialog.js b/lib/amd/src/local/dropdown/dialog.js index 6c2bbb121ac..6b5f282c11e 100644 --- a/lib/amd/src/local/dropdown/dialog.js +++ b/lib/amd/src/local/dropdown/dialog.js @@ -21,8 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -// The jQuery module is only used for interacting with Bootstrap 4. It can be removed when MDL-71979 is integrated. -import jQuery from 'jquery'; +import Dropdown from 'theme_boost/bootstrap/dropdown'; import { firstFocusableElement, lastFocusableElement, @@ -145,8 +144,7 @@ export class DropdownDialog { if (visible === this.isVisible()) { return; } - // All jQuery in this code can be replaced when MDL-71979 is integrated. - jQuery(this.button).dropdown('toggle'); + Dropdown.getOrCreateInstance(this.button).toggle(); } /** diff --git a/lib/amd/src/modal.js b/lib/amd/src/modal.js index 35773e62529..d7ad249c825 100644 --- a/lib/amd/src/modal.js +++ b/lib/amd/src/modal.js @@ -35,6 +35,7 @@ import * as FocusLock from 'core/local/aria/focuslock'; import * as Aria from 'core/aria'; import * as Fullscreen from 'core/fullscreen'; import {removeToastRegion} from './toast'; +import {dispatchEvent} from 'core/event_dispatcher'; /** * A configuration to provide to the modal. @@ -582,6 +583,7 @@ export default class Modal { .then((result) => { FilterEvents.notifyFilterContentUpdated(body); this.getRoot().trigger(ModalEvents.bodyRendered, this); + dispatchEvent('core/modal:bodyRendered', this, this.modal[0]); return result; }) .then(() => { @@ -897,6 +899,7 @@ export default class Modal { this.getModal().focus(); $('body').addClass('modal-open'); this.root.trigger(ModalEvents.shown, this); + dispatchEvent('core/modal:shown', this, this.modal[0]); return; }) diff --git a/lib/amd/src/moremenu.js b/lib/amd/src/moremenu.js index f00625ceb9e..2575526b7b6 100644 --- a/lib/amd/src/moremenu.js +++ b/lib/amd/src/moremenu.js @@ -22,7 +22,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import $ from 'jquery'; import menu_navigation from "core/menu_navigation"; /** * Moremenu selectors. @@ -248,7 +247,7 @@ export default menu => { // If there are dropdowns in the MoreMenu, add a new // event listener to show the contents on click and prevent the // moreMenu from closing. - $('.' + Selectors.classes.dropdownmoremenu).on('show.bs.dropdown', function() { + document.querySelector('.' + Selectors.classes.dropdownmoremenu).addEventListener('show.bs.dropdown', () => { const moreDropdown = menu.querySelector(Selectors.regions.moredropdown); moreDropdown.querySelectorAll('.dropdown').forEach((dropdown) => { dropdown.removeEventListener('click', toggledropdown, true); diff --git a/lib/amd/src/usermenu.js b/lib/amd/src/usermenu.js index ce9b53363b3..4cb4e497c25 100644 --- a/lib/amd/src/usermenu.js +++ b/lib/amd/src/usermenu.js @@ -22,7 +22,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import $ from 'jquery'; +import Carousel from 'theme_boost/bootstrap/carousel'; import {space, enter} from 'core/key_codes'; /** @@ -41,9 +41,10 @@ const selectors = { */ const registerEventListeners = () => { const userMenu = document.querySelector(selectors.userMenu); + const userMenuCarousel = document.querySelector(selectors.userMenuCarousel); // Handle the 'shown.bs.dropdown' event (Fired when the dropdown menu is fully displayed). - $(selectors.userMenu).on('shown.bs.dropdown', () => { + userMenu.addEventListener('shown.bs.dropdown', () => { const activeCarouselItem = document.querySelector(selectors.userMenuCarouselItemActive); // Set the focus on the active carousel item. activeCarouselItem.focus(); @@ -96,18 +97,18 @@ const registerEventListeners = () => { // Get the position (index) of the targeted carousel item within the parent container element. const index = Array.from(targetedCarouselItem.parentNode.children).indexOf(targetedCarouselItem); // Navigate to the targeted carousel item. - $(selectors.userMenuCarousel).carousel(index); + Carousel.getOrCreateInstance(userMenuCarousel).to(index); }; // Handle the 'hide.bs.dropdown' event (Fired when the dropdown menu is being closed). - $(selectors.userMenu).on('hide.bs.dropdown', () => { + userMenu.addEventListener('hide.bs.dropdown', () => { // Reset the state once the user menu dropdown is closed and return back to the first (main) carousel item // if necessary. - $(selectors.userMenuCarousel).carousel(0); + Carousel.getOrCreateInstance(userMenuCarousel).to(0); }); // Handle the 'slid.bs.carousel' event (Fired when the carousel has completed its slide transition). - $(selectors.userMenuCarousel).on('slid.bs.carousel', () => { + userMenuCarousel?.addEventListener('slid.bs.carousel', () => { const activeCarouselItem = userMenu.querySelector(selectors.userMenuCarouselItemActive); // Set the focus on the newly activated carousel item. activeCarouselItem.focus(); diff --git a/lib/form/amd/build/collapsesections.min.js b/lib/form/amd/build/collapsesections.min.js index ecd8ae941eba8ffca1bbcf50245c8805a6686bc9..610259e9b186f356924c772965e7029d2495a8af 100644 GIT binary patch delta 445 zcmZ1@GF5DXfm}&OYHn(LQht7Mi9V1lDK05WEYMHR&&f$FC{CSdrp5tdZ%o?6s0riP z#%Jc0q!#5D1f>?1W)`Koq^2d7=9Fl}!xU_`WctAv9j&LQmzH0Y>ztogl9-v7T2vgX zmz!9ip@AZ3YnPW=t^n7nmjX2mMUhT*Nq%~IPO6onVXda7rp{(V7B;5Io@_>p_LF!qibc;*$CB<3ZjY9zxPps81!kzcL>G{Fj_O^;}88JQ`m8k6s_{pPX;`6?wp zxioh&C%f|GzZ_hSu^?Z%CMIWS0BwQYd!l{##TBo1V!BnZ#K%_44y3|KYeKf?vf4&P$Vzas>bY D-Y-wN diff --git a/lib/form/amd/build/collapsesections.min.js.map b/lib/form/amd/build/collapsesections.min.js.map index 5d32da8449c6972a22693c240ecdec7a712eb49e..66e9f8743afef020126ed2f25624b617e244da12 100644 GIT binary patch delta 1401 zcma)4&rcIU6i$`U$d8s%1d&Kqz_c}ED3)<_x- zdNDE4WR9LZc{QnLjd!oc#G8hLe}IWs-|TKl8%Si5c4ppt^S$?d-@Xk0p8gQ&x<>V4 zQ7Ict+NtOzDPZPVi9LF(>xLPDf7384N;#5sikb^upIy!E?on4pg7qLA4)5rd64fY=uioIoJ`C78WIq)umRW&McDlO%may_Crk!BvwOWfFteO5&okW1^x$;FXR}2a97Wz=4@a8 z8UDW8Am#LIwZuR5P4c3`IatiwOc|FS;^*MN?TbcDHnwj z&R7EASU#-ea&nDnrs&B)PQL94@)w>u|LeKJFL;;W=i_gC#`$xvZ&5%r+Gw|Ha0=)z z-T*)JR(X103Sh_hn}MJMe|15F!Si_$JJE!~A=1|UI0&?iqVQ`a23 zX9)<-$A&NNf<{0?HkWP99Y3;Gb0iy(ohc~mOsa2a=ftWPLWjnN6wzJ#ax zy?QkBcbJg$=EaLQFa86b3o=?1H#<0j+inf7#feRX4f z14)?4eb#VwUnbLS`-mamM#Q##&v$hPJ;-GHu^Wq_{)h4Jqfv|bNH=`b=IAj>HO)Fp zZHoG2W$`lTHSOcnW{snZuUF$WEi~LL*fDK%=6uO`!Nh!yN)}NGNVd)DhVWXk>O9U^|b?0Og|qN;gO`$k`+~6e~zv5sEqL z3}WSBunJJcRiHUyD2l55(U-0Sy^($|$f*QCRr-+zXp?ry09k>;UQ?Nr4Jbr~;#aar zxrIF7U4Y$kP^qa<=|sy1sg81@Z8-wX#ikw-TmmR!3P7nKbB}iJ4-5{y%U-4TLQvTz zC50~G6#|7;zD2PdE_BHO#RY%@_Tmg0I#&g+-<5#**~wt%zz%4l_ZOz%D0Tn< diff --git a/lib/form/amd/src/collapsesections.js b/lib/form/amd/src/collapsesections.js index b2d3127c79d..416ce26812f 100644 --- a/lib/form/amd/src/collapsesections.js +++ b/lib/form/amd/src/collapsesections.js @@ -22,7 +22,7 @@ * @since 4.0 */ -import $ from 'jquery'; +import Collapse from 'theme_boost/bootstrap/collapse'; import Pending from 'core/pending'; const SELECTORS = { @@ -43,12 +43,12 @@ const CLASSES = { * @param {string} collapsesections the collapse/expand link id. */ export const init = collapsesections => { - // All jQuery in this code can be replaced when MDL-71979 is integrated (move to Bootstrap 5). const pendingPromise = new Pending('core_form/collapsesections'); const collapsemenu = document.querySelector(collapsesections); const formParent = collapsemenu.closest(SELECTORS.FORM); const formContainers = formParent.querySelectorAll(SELECTORS.FORMCONTAINER); + [...formContainers].map(formContainer => new Collapse(formContainer, {toggle: false})); collapsemenu.addEventListener('keydown', e => { if (e.key === 'Enter' || e.key === ' ') { @@ -77,12 +77,11 @@ export const init = collapsesections => { // When the collapse menu is toggled, update each form container to match. collapsemenu.addEventListener('click', () => { - let action = 'hide'; if (collapsemenu.classList.contains(CLASSES.COLLAPSED)) { - action = 'show'; + formContainers.forEach(container => Collapse.getInstance(container).show()); + } else { + formContainers.forEach(container => Collapse.getInstance(container).hide()); } - - formContainers.forEach(container => $(container).collapse(action)); }); // Ensure collapse menu button adds aria-controls attribute referring to each collapsible element. @@ -94,19 +93,22 @@ export const init = collapsesections => { collapsemenu.setAttribute('aria-controls', collapseElementIds.join(' ')); // When any form container is toggled, re-calculate collapse menu state. - $(SELECTORS.FORMCONTAINER).on('hidden.bs.collapse', () => { - const allCollapsed = [...formContainers].every(container => !container.classList.contains(CLASSES.SHOW)); - if (allCollapsed) { - collapsemenu.classList.add(CLASSES.COLLAPSED); - collapsemenu.setAttribute('aria-expanded', false); - } - }); - $(SELECTORS.FORMCONTAINER).on('shown.bs.collapse', () => { - const allExpanded = [...formContainers].every(container => container.classList.contains(CLASSES.SHOW)); - if (allExpanded) { - collapsemenu.classList.remove(CLASSES.COLLAPSED); - collapsemenu.setAttribute('aria-expanded', true); - } + const collapseTriggerList = document.querySelectorAll(SELECTORS.FORMCONTAINER); + [...collapseTriggerList].forEach(collapseTriggerEl => { + collapseTriggerEl.addEventListener('hidden.bs.collapse', () => { + const allCollapsed = [...formContainers].every(container => !container.classList.contains(CLASSES.SHOW)); + if (allCollapsed) { + collapsemenu.classList.add(CLASSES.COLLAPSED); + collapsemenu.setAttribute('aria-expanded', false); + } + }); + collapseTriggerEl.addEventListener('shown.bs.collapse', () => { + const allExpanded = [...formContainers].every(container => container.classList.contains(CLASSES.SHOW)); + if (allExpanded) { + collapsemenu.classList.remove(CLASSES.COLLAPSED); + collapsemenu.setAttribute('aria-expanded', true); + } + }); }); pendingPromise.resolve(); }; diff --git a/lib/templates/local/toast/message.mustache b/lib/templates/local/toast/message.mustache index 3b0bce70eb9..759b603da1a 100644 --- a/lib/templates/local/toast/message.mustache +++ b/lib/templates/local/toast/message.mustache @@ -51,13 +51,14 @@
{{#js}} -require(['jquery', 'theme_boost/bootstrap/toast'], function(jQuery) { +require(['theme_boost/bootstrap/toast'], function(Toast) { // Show the toast. - // Bootstrap toast components are not shown automatically. - jQuery('#toast-{{uniqid}}').toast('show'); + const toastTrigger = document.getElementById('toast-{{uniqid}}'); + new Toast(toastTrigger).show(); - jQuery('#toast-{{uniqid}}').on('hidden.bs.toast', function(e) { - e.target.remove(); + // Remove the toast from the DOM when it is hidden. + toastTrigger.addEventListener('hidden.bs.toast', function() { + toastTrigger.remove(); }); }); {{/js}} diff --git a/lib/templates/search_input_navbar.mustache b/lib/templates/search_input_navbar.mustache index 87fa1834922..8ecd388ae4a 100644 --- a/lib/templates/search_input_navbar.mustache +++ b/lib/templates/search_input_navbar.mustache @@ -90,25 +90,27 @@ require( function( $ ) { - var uniqid = "{{uniqid}}"; - var container = $('#searchinput-navbar-' + uniqid); - var opensearch = container.find('[data-action="opensearch"]'); - var input = container.find('[data-region="input"]'); - var submit = container.find('[data-action="submit"]'); + const container = document.getElementById('searchform-navbar'); + const opensearch = container.parentElement.querySelector('[data-action="opensearch"]'); + const input = container.querySelector('[data-region="input"]'); + const submit = container.querySelector('[data-action="submit"]'); - submit.on('click', function(e) { - if (input.val() === '') { + submit.addEventListener('click', (e) => { + if (input.valUE === '') { e.preventDefault(); } }); - container.on('hidden.bs.collapse', function() { - opensearch.removeClass('d-none'); - input.val(''); + + container.addEventListener('hidden.bs.collapse', () => { + opensearch.classList.remove('d-none'); + input.value = ''; }); - container.on('show.bs.collapse', function() { - opensearch.addClass('d-none'); + + container.addEventListener('show.bs.collapse', () => { + opensearch.classList.add('d-none'); }); - container.on('shown.bs.collapse', function() { + + container.addEventListener('shown.bs.collapse', () => { input.focus(); }); }); diff --git a/lib/tests/behat/fixtures/dropdown_output_testpage.php b/lib/tests/behat/fixtures/dropdown_output_testpage.php index 50a830398fc..55e4036fcfe 100644 --- a/lib/tests/behat/fixtures/dropdown_output_testpage.php +++ b/lib/tests/behat/fixtures/dropdown_output_testpage.php @@ -139,8 +139,8 @@ echo ''; $inlinejs = << { + ['core/local/dropdown/dialog'], + (Module) => { const dialog = Module.getDropdownDialog('#dialogjscontrols'); document.querySelector('#buttontext').addEventListener('click', () => { @@ -163,12 +163,10 @@ require( } visibility(); - - // Bootstrap 4 events are still jQuery. - jQuery(dialog.getElement()).on('shown.bs.dropdown', (e) => { + dialog.getElement().addEventListener('shown.bs.dropdown', (e) => { visibility(); }); - jQuery(dialog.getElement()).on('hidden.bs.dropdown', (e) => { + dialog.getElement().addEventListener('hidden.bs.dropdown', (e) => { visibility(); }); } diff --git a/message/amd/build/message_drawer.min.js b/message/amd/build/message_drawer.min.js index 8e284438733c8f828a39e9a9f32f8b59c13bc84b..a63f490da46ed1969998f218d4b6fb4dcef6db21 100644 GIT binary patch delta 323 zcmX>Z_&jJsy=;24L9AY3X=+hraB5C!a!G!XV@{5Sl3sFtPEKM$ajKH0URr*UYhrSS zh6YT`)~*`H)JsfBaV<;DEAh!JE=kQxEz(fR$V^GqODaZ~pres$Yd1MiPC+tNuOzW3 zJ+%Zw*W|mhHuXBy`FY8yR*D9-nzfoBq*IiiUqW^F6=&p^W4f=pY;v%i93B@o$XRnC LT)26MoFEqf)(v!? delta 150 zcmaDJbTV*5y{x`oex8O>MrKN?UQ)4Ma(+%uVnK1Ll8zD*TO+MBFS#TWs4!J?@(no! zeie;Wy^_SD^wbhfp!U?s@^UsjnzfpmIz{>UB|wqM2joN~NHRfC-g%7nYyez7>UT`%0eQ+W1y zRQTUFy(_yrJA5Rf?9(94L?n{pydUg{@|Wp z_DT}<;aXKS)=Jvz!XYU&MBYXs`#~zukcd=8vEz$yLEz@aaijgVRNvq6+2}UMcz9*_%pmU9P>KyBs)1wv~D=7-GoiQeF1}jy(vrra5-d1P^peorpeV z#6v{uiy8^E@UjEYso4{AEZKP{uu%&%woT%;_UJMk1uLc%dOFOUyc`G?z^G~tXIJ|_ zJkvdJNFUYfQ!`x%qzl=m`Z~OQ8Ov)lzD2e`Zu-=-^mueu)F0vDwG*hOX8%-@J&w4U zuYQj1tKa(GyB+O=I(^r_IMKafZ_)*O5YyN(X>a9X9iI>>POh~;7xUZG5C#q@A&*kd zBQg-G>njw&!xqlI9^)!izeo3pHLyq!c*#7Y9n5Fa`WT`(2s-0S)o{5A9`Gm6L`2w3>tg5$$F~x zPgVYuW6b-Iw)ZnImM2$^rLJhAVEwpuE69}&K2j9H)icjzu9x_{!O}K%bj9DzAvWa&*D^! z5w(MzlQAZbV9ch}9r?PL86#blpZQt&%b3`IhwY2kLfdb-zH`49Y`Kv=&8CT$zCAk% zyutpnN0$@lo2`}@*na<>8})79?(GjAe@~7a!At;?Z6QE_tO?L$b$~i&HQ+hEjLZgb zky!wiS7xig_prqTfY>zkk4gW*YCi5@5y3>r8o)hXQde!k90Y5C9g|f6Do6N6|4Y~< z!mcLl93k{9t&fJssJ1w(nTkvDWz zqB+HeFTZ-%M+DU%JA{7{g-~?$UfdE{tV-lLLo+E2ecUyaoiOfD4p+ODc2hB0KK8lt zj+Yjc5UA1NI>7oud8EsHSwm7Q&ta#mf$OTH!RZCf5VLsrnywcAy|ow1d8zsz9NWHJ z*2&mH9g3k6=B>$7{+&xiuhc9V>>)U7ZCo@Mr#dGa{;Qe4QZ=Vz{R?utM7nufE{7{p z1kOZF^^i|;iBEwN2*zf*8Z7tigJgPrv#N1~!NW diff --git a/message/amd/build/message_drawer_view_contacts.min.js b/message/amd/build/message_drawer_view_contacts.min.js index eff99c1fe04e60f04428e405915c71990abdb1d7..13c572ade8c84673757ff20c44e8a465f9a90a64 100644 GIT binary patch delta 62 vcmaDX(JHy2j9nz!AXYCiCB?NYHLt`cv$!NRFSTfLC3_ey3F*ym*~?e}!_gMC delta 28 ecmZpbd@Qk{jGb98KW}mudl;0K-ptQY#sUD0CJ5jF diff --git a/message/amd/build/message_drawer_view_contacts.min.js.map b/message/amd/build/message_drawer_view_contacts.min.js.map index 70c35fd8bad040e77948058fb796fa341078737e..c6bafd66c73e8659e7f222edae850999ad098ca3 100644 GIT binary patch delta 151 zcmaFtxzKCFPC=1qgIK-9loZ#p)Vva(%;J*Nywsw}djzX-NoY;ZkT#qwF2uKav5+f| z0J_%AujDG3C3M^!9o=1ZGMyY9Go5r&9UW73!X2G+Tqc(&DL^EhF(o%IRkC9O07LXM ANB{r; delta 89 zcmZ4J_1JU6PC;h9{JhC$1*@U7*5oc}!^s*#e4CF7x$-dO=WUjfuVfZ<)p2)pbk|9B abWGI=cXZBjp1fK~LC_gpbn{~+J0<{IrW}m` diff --git a/message/amd/build/message_drawer_view_overview_section.min.js b/message/amd/build/message_drawer_view_overview_section.min.js index 0da24906fd335f90e3bf1045aa648de5df2ea2ec..abaa2d17204c458f66c51577f3dd6cfe97c68b81 100644 GIT binary patch delta 59 ucmZ2ba;Rj3fviZhL9AY4N{VY)YF>#?W^qYsUTV>1V_8W?>@xmx7o`D<9~Gwn delta 25 dcmX?9vY=#xfh@CLe%@vmSxH7PqfqXmGyr*d2*3aU diff --git a/message/amd/build/message_drawer_view_overview_section.min.js.map b/message/amd/build/message_drawer_view_overview_section.min.js.map index 1d62f2c428cd5778d582488279eb32fb45caeb49..61d0acbf995407ca699fc3eaf08ffe8b8e190b5a 100644 GIT binary patch delta 1289 zcmb7EOKTHR6eeA@KG1?feIbZ~rI)5nT5G|D=iYfGlQDf5+gehAxQRu zMZ7z^^8q5*){a|o-i5>zK8z3(_D4g@dNqa9)1b+Rm%SRM@I(FFcZLRTWpO3 ztZ`PsrNY?)h`U05efs3wU;8!OuW_~ntsKt_f9u(1f2R^xNiCbD0n#;_B>|Fx%>$&y zSPzY$gX_xYOu3zD-M%{4GS%+D+I$utnYG99m-6YC{1q|6`>FvmI25J7U7W7tDFfC zR++Z)T2e8-t>AJRNkUS{!V&5{uQ5ld4B$;n3El*Ak>#|330V-al0}D-9#`Tj36egC zx=2quSV&C<1H$9uva@~qVo^hXlLf7AsItRM0|C zwZg#|s#~n9Dp2I>2^t_#;9-Igp!^kpcANNhL&ZuF<&gkaBQ3gxjYkh{Wi(D;2ERcV>Dd;4ZpxHf8pqNRFOnKDV398c_)Vi7z`$`ObHS?Na zIc#i^*A>((Nmm1I148Rnu_0gXT?!TC$Gy>GP31xcs3TFmAdmX`K*S`)YuuB|{_vru zK|_hRpddH>;r^ap`OZJt-_s{Q``0@Mm^c21`2sQb_8E)0o+~uZu!O236<*?Pjkuw< j1R3B&46?Arrwk^y-kd-C$E`?Xf)nNV6QN5D7w-K6lVgXt delta 1106 zcmZ{i&rcIU6vtD%P&FD7B*7Tdn2<;qp|nU-_28S?-`iRW)&`@8g4iG1cGoWbMPl^q z!9?ez2aSd+Qd#~E4;;K1b+PwHSN}e zcPl?b^5e~;8X3aC*sC9*;NW$5WVCA#9Y7~81#l_J1M5&8+5C9nFyUjur(_vAMfy1S zzWH)EJV+%>-r9=jF^i~Jfsq`jRkfv%HBfw7H$+tJ+HzA#79h*ynzTrp0!vL<#0IeC z&n&C*Z(EV5YfGBAC54I;SJ3+R|$L+NX=pstgO2lnhw{Sh_E7 zPBD^^4Y5PI|2@M<8X&_4mGDHrBqKGXNots117=nYL6vDx$z4kcRf~u$P}>7yfq((l zpc{-7ZbD)uCwm|7P*%{iOhswvvLY_(g0GV(3W-s1Jx=R9v^_r3G)Y$mJw+gYEjq%nP&fZm!c9qK_#fi zKWvZX-4rRK^a@Ri8w^}=fk8~i88EmbV--c%#K2JmxN4w1h-k|yZG)@=Tc}vLL6Md% z8LjYhy~$gSC8daInz*PPR!@o16|kw;;`U))_n2d&g5(mzgT=ebEcbi&!t(|}^+kF; z*z27Qohch~Tn?Sl`Tpmt6OJb4yqvIwM!TuWEvb<%Ln7>f$=o`h-?=>8Kbb4>2RqY| zns$UQ>}2bzmzI+zCOYr%=ewiPhI|6{oQV%YFDZ-^(SC>Q+HKrMOz+*+30Pb)lq8J^ntJJdLRRX_ok2F!^5{(PKIyySGoGw@#wp yI6}`0bnh=RTRikZyh>O`gJLeN(zYVtP#piV8@=?;123SX={Vi6gq3-?^7Icm2~Ge2 diff --git a/message/amd/src/message_drawer.js b/message/amd/src/message_drawer.js index 9f3b5a1f10e..ea3e3bc6696 100644 --- a/message/amd/src/message_drawer.js +++ b/message/amd/src/message_drawer.js @@ -412,17 +412,21 @@ function( // These are theme-specific to help us fix random behat fails. // These events target those events defined in BS3 and BS4 onwards. - root.on('hide.bs.collapse', '.collapse', function(e) { - var pendingPromise = new Pending(); - $(e.target).one('hidden.bs.collapse', function() { - pendingPromise.resolve(); + root[0].querySelectorAll('.collapse').forEach((collapse) => { + collapse.addEventListener('hide.bs.collapse', (e) => { + var pendingPromise = new Pending(); + e.target.addEventListener('hidden.bs.collapse', function() { + pendingPromise.resolve(); + }, {once: true}); }); }); - root.on('show.bs.collapse', '.collapse', function(e) { - var pendingPromise = new Pending(); - $(e.target).one('shown.bs.collapse', function() { - pendingPromise.resolve(); + root[0].querySelectorAll('.collapse').forEach((collapse) => { + collapse.addEventListener('show.bs.collapse', (e) => { + var pendingPromise = new Pending(); + e.target.addEventListener('shown.bs.collapse', function() { + pendingPromise.resolve(); + }, {once: true}); }); }); diff --git a/message/amd/src/message_drawer_view_contacts.js b/message/amd/src/message_drawer_view_contacts.js index ab255c78a17..dca76ef9afc 100644 --- a/message/amd/src/message_drawer_view_contacts.js +++ b/message/amd/src/message_drawer_view_contacts.js @@ -128,11 +128,11 @@ function( var showContactsAction = getShowContactsAction(body); var showRequestsAction = getShowRequestsAction(body); - showContactsAction.on('show.bs.tab', function() { + showContactsAction[0].addEventListener('show.bs.tab', function() { ContactsSection.show(contactsSection); }); - showRequestsAction.on('show.bs.tab', function() { + showRequestsAction[0].addEventListener('show.bs.tab', function() { RequestsSection.show(requestsSection); }); diff --git a/message/amd/src/message_drawer_view_overview_section.js b/message/amd/src/message_drawer_view_overview_section.js index f891a00460d..6c68d6423e0 100644 --- a/message/amd/src/message_drawer_view_overview_section.js +++ b/message/amd/src/message_drawer_view_overview_section.js @@ -612,7 +612,7 @@ function( var toggle = root.find(SELECTORS.TOGGLE); root.css('min-height', toggle.outerHeight()); - root.on('show.bs.collapse', function() { + root[0].addEventListener('show.bs.collapse', function() { setExpanded(root); LazyLoadList.show(listRoot, loadCallback, function(contentContainer, conversations, userId) { return render(conversations, userId) @@ -624,7 +624,7 @@ function( }); }); - root.on('hidden.bs.collapse', function() { + root[0].addEventListener('hidden.bs.collapse', function() { setCollapsed(root); }); diff --git a/mod/assign/amd/build/actionbar/grading/extra_filters_dropdown.min.js b/mod/assign/amd/build/actionbar/grading/extra_filters_dropdown.min.js index 58d4d99f7b121602ee7bf141821eabae5c695bd1..fe17ba8dfc651f8cd50f42625594ada68c981078 100644 GIT binary patch delta 36 scmew=IZtvz^~4qpCe7-}w-|jk?v-U^_RXEKI7K%TRsW2sYtlTs}JSmhu8 delta 135 zcmbPWwb*LIL1y91+=Bd~5(O27w4(f61@)}L($vknnJ;rPs!UGg6P?^Iz{{ekm!G%! z0Pl5f*8Dsr9i_<&*~KQWl@w!1_i{AZd|dJ|lV-ZJqj#BGlun_Oqhq0yvre+3V{)#O nj=Q6yyG}k(EZ<4T+tIbcrEKzL8AF~zCmm-;$5N*vC#6~d4Wui} diff --git a/mod/assign/amd/src/actionbar/grading/extra_filters_dropdown.js b/mod/assign/amd/src/actionbar/grading/extra_filters_dropdown.js index 3509d16ed52..5d31c52a31f 100644 --- a/mod/assign/amd/src/actionbar/grading/extra_filters_dropdown.js +++ b/mod/assign/amd/src/actionbar/grading/extra_filters_dropdown.js @@ -15,7 +15,6 @@ import {getDropdownDialog} from 'core/local/dropdown/dialog'; import {getUserPreference} from 'core_user/repository'; -import $ from 'jquery'; /** * Module for the extra filters dropdown on the submissions page. @@ -65,7 +64,7 @@ const registerEventListeners = (extraFiltersDropdown) => { }); // Event listener triggered upon hiding of the dropdown. - $(extraFiltersDropdown.getElement()).on('hide.bs.dropdown', () => { + extraFiltersDropdown.getElement().addEventListener('hide.bs.dropdown', () => { // Restore the filters to their stored preference values once the dropdown is closed. restoreAppliedWorkflowFilter(extraFiltersDropdown); restoreAppliedMarkerFilter(extraFiltersDropdown); diff --git a/question/bank/managecategories/amd/build/newchild.min.js b/question/bank/managecategories/amd/build/newchild.min.js index c62fee98e5ba9c919f7b785939604ecaae786c1c..99c65d05be59037e28481fba7a45604e79e2c080 100644 GIT binary patch delta 222 zcmX@d|AT*m>tsbHv56^y@;XW-8L7Fc@k#ml#U=VcvZT1AD6v4lBtJi=B(q>*iK0Yu zVo7Rxeo$$}b2>ECNbt>J?|?mupPk$ugC6tr?jqsT!MWSc8}V;4)N8 delta 184 zcmeyte~y2GD_d4!X=+jBL?^9@JqqFwj!t}XVo7Rxeo_o2 zkM+-g6C-!Pva{!nvt;oPbAuS#QWdQ$siZESGSv#^@mu{-^Ju>HxO!;Mp0>YM_KOto zl!laW3c%?(=>T*p#Da1GkvITOJKEjBVpWa65|mT{sx?vvs3Xzv7=OXm53H5FXfst> z^C)2e>@Mo2_VOHcos@ut n>fn9>HIG30fHjD{Zcx+qMeH%g_~35531YFjTZs#JY21GUfL@=y delta 370 zcmZqIU!k`lfQ3&*A+0DsS3y0iur#%(a3vN~-$i$2_)d>`+aUt%Ri~#|TeiDh%8FLHItSLZ-8$ zbAfZAlTM_gW2C!Iprd0TkZ?D2a@I+7bW9AHTrTQt>Z#-J=;&YIq~q=A=p6u7>oS~lf*l=$ zi=1@a9UVQhCv%IdhnhpIwQ$l&cXA9hc5&1xcXD)0HgpE*cXrfCc61JK1e;ap4ALF$ Z3pPU^qAdz6lMhxL=nPV9>g=Ob3jlL0abW-e diff --git a/question/bank/managecategories/amd/src/newchild.js b/question/bank/managecategories/amd/src/newchild.js index 35cd934d6c7..1d6668b14db 100644 --- a/question/bank/managecategories/amd/src/newchild.js +++ b/question/bank/managecategories/amd/src/newchild.js @@ -23,8 +23,8 @@ */ import {BaseComponent, DragDrop} from 'core/reactive'; -import $ from 'jquery'; import {categorymanager} from 'qbank_managecategories/categorymanager'; +import Tooltip from 'theme_boost/bootstrap/tooltip'; export default class extends BaseComponent { create(descriptor) { @@ -85,13 +85,13 @@ export default class extends BaseComponent { showDropZone(dropData, event) { const dropTarget = event.target.closest(this.selectors.NEW_CHILD); dropTarget.classList.add(this.classes.DROP_TARGET); - $(dropTarget).tooltip('show'); + Tooltip.getOrCreateInstance(dropTarget).show(); } hideDropZone(dropData, event) { const dropTarget = event.target.closest(this.selectors.NEW_CHILD); dropTarget.classList.remove(this.classes.DROP_TARGET); - $(dropTarget).tooltip('hide'); + Tooltip.getOrCreateInstance(dropTarget).hide(); } drop(dropData, event) { diff --git a/question/type/multianswer/amd/build/feedback.min.js b/question/type/multianswer/amd/build/feedback.min.js index 4798e1a004c135ceb263bb2668dde96fca950009..f6fbd7d941017732712df13f287b8f8c306d64e1 100644 GIT binary patch delta 199 zcmdnQ-o!D%O|~Q>H8(XrDL=osL?1|&6qghw7U&n`7vz_v7ESa~;D9oXHWv9Xio-az z8u>|Cw(&6T5llS^|`^Gfsz zOH+#~gHv--lS}f89CLCsCjVxXGSH0G%S|lM&?qU&OixcOvbD=gEmwdWua}aVmROoo T0+ZI%oP36a8+o7CX04JenEa&YLP-(QGTw1dPzoVZfbl|etvO@K9DRaE-6YZ&@X_f*=){o zgwZfLKd-n%0V)(yl$oBMT2!oHtB{hPT$-DjSE5%~np#vDoSKuGT#{epn3FU4537u; zbxfWD6h!Ok>7i+l)yqvR(9kG>n5L;in zfF#r;APZ{7J32==>m)j+Wjg5uJ32?X=;S*&Iu<(Vcsn|~ zx&nn9gPnCUfkK&1UOHw@j?U&z-at7=Z)cEPq>iVfqo=b@Hc&yJi%z(sYmSQtSd;f; hOAb}}2(Xqcr(hjdM@Lt8klF5G5jurH<;6})wE%5&eLMgF delta 163 zcmcaA^jBbmCJUd6LRwLNu7Y}2VQFen<>nBUBaDnHlRepFIQ0th3-ZfSi!?T`VoPBZ zg7TDflv47OOLJ56N+vsV1TyAMp2{I_nC%py!KqG;wm*33YU}baK`Sc61DOo-D|zDj%d{=H%#{<>ag5>ged|u9NTN=pGiNQwUUF I?4(o+0B)@?f&c&j diff --git a/question/type/multianswer/amd/src/feedback.js b/question/type/multianswer/amd/src/feedback.js index a79f12b527a..8f90e1c921a 100644 --- a/question/type/multianswer/amd/src/feedback.js +++ b/question/type/multianswer/amd/src/feedback.js @@ -22,7 +22,7 @@ */ import 'theme_boost/popover'; -import $ from 'jquery'; +import Popover from 'theme_boost/bootstrap/popover'; /** @property {object} Contains the list of selectors for this module. */ const SELECTORS = { @@ -37,7 +37,8 @@ let feedbackInitialised = false; */ const initPopovers = () => { if (!feedbackInitialised) { - $(SELECTORS.FEEDBACK_TRIGGER).popover(); + const popoverTriggers = document.querySelectorAll(SELECTORS.FEEDBACK_TRIGGER); + [...popoverTriggers].map((trigger) => new Popover(trigger)); document.addEventListener('click', (e) => { if (e.target.closest(SELECTORS.FEEDBACK_TRIGGER)) { diff --git a/theme/boost/amd/build/aria.min.js b/theme/boost/amd/build/aria.min.js index 86111920262020d633d8190f1ed42b72be0b4589..698940fb71c651327115c91c48ef81ed96aed157 100644 GIT binary patch delta 157 zcmcZ*ek^=~nq)~vYHn(LQht7Mi9V1lDK05WEYL4WOq!_U#0;c1mh58!(UTLIB|-G& zaOSDplmBZWej$8<8e3LjX=+jBM0+PFYh%kkCMa`qHnSv@xjB(}Dz}1$flfR`y$^UVh$We*T376>UDrzl>FlkWm^+#TohKlN}{aZVnea$w=5#O9^j5 c4Q!^S>XjrGrKbWNSdy3oF;;2w7EK{00A9gc^8f$< diff --git a/theme/boost/amd/build/aria.min.js.map b/theme/boost/amd/build/aria.min.js.map index a5b6e6998054a4c784b2a3856f80ebe3dbf1715a..8a2e4dc0241b83008878ee18bb72e66e76a3ed4c 100644 GIT binary patch delta 2636 zcmcImO>7%g5SH6OQwdr?w6t{yZQ78wc}naijzf_uy*Ily8{<00aqWbv?b_LR{kx96 z&W|OqdPG91#FHux2o-VQz|l8uMdDH+IBRad_g%nA}JO`$x}xI40+og7Wahw7i#kzW?p?lbIO|I#+W1R0~>;?K@VZ?c0r_ zbJ3ae?G_p?&9z-`_hSEt}#5d0DV+{Mi;2!Ll4$a7C~bS{DQ}IX4q@ld@Qm^CBw)hZSfJi)E4C?(`s<5~Y%!OaS^ z1;Y!TMMMM{!R#BHuVV!WCYMtvuuQDI$E%c|s>do4SXoWqp&2VI36|v0jk`cDxn*U` z4Z>>CX8c5{KUDMa59URqzHFP!H=I!baJk7MYf>n_?0j#y)i)j0FwQ zA`ggF4eEluLb)6&-YO_`drD^6ZFp)xEBNM$?AWgykBkP9_wAYY^^pv@Etq9>&`y(j z%?(s37y~ea#7KrJ&n7dr)p%YG zLOiMYK@FnA9<;S|kZ_Wsa)g3Oe%Y=vWmeffhOCNNeQRoz`@m(t5Dd8T$HJ*YvxfY= zaQ(Qe^RPM+8HTou72oTnd14DI8NrD2qz6ku_}?(LaXRJ6&DSqPjp68;~*AnL2sJ^^g%v zf~#s#rk&`arYY~;Jl|W^-9Qo0`Xc({Y3hj!0}HZ7>POyD7c^cF5n)hU0F_If)C#eX zTx&;^44MoZ)r>(3{GcB`F|U&~UsJ8c<|pJQPH+@MTBVPO|2#ccV26cfXa%x3O;-_% z$ZwD~+QKvO*9;47K}zyXdV-4{Em>}Ml?68*Zb35Pkk++{@2U}?hqzSsKudWrRdso( zbfJfBph;FFE4f)C>|^D~G%ZY+7mGw7&nTjZ;W&qisB3ap$&^Zyn$|0-aj6v?E!cs! zb_knlj!cSY;mW3!VlxM;t%0Xpa`U=(xREdlx?o>hfB&0{Xc zB=>;~5aPDj>dLVDYM>-z?&SEMI-jV@nmZlZ(RB}LUo)=^4amVddgO(Q>Qr66kP3S5rZu^eWnamU4hueGXCl2^-b z1}f4nUkwk(YUr_y9vx#%k*1U2mdB;sjKy_+`8}T9m4BA62M^|o-%uNkE#inrU|Zg- z+-F_l7v^Jl5aJ<&?W(~>MG+WeUHv7XL2MZNa#f1N@^0hwj74GBF_765jiDQ9c3Hh+bNFJ(MMOhBYMJ$%!Qa_I0vZ4S delta 2625 zcmcIlO>bL86qQ4vMnEe>)3h`yX`9q(GHUHOPMQi(XXZUyZg3pqxOO5CaU3W9e9s?o z97jTi6)V_`goMPR-63|!f(1KPY!I|N7JLfv9{_>i+!-6L1y?4$z_srKn zcz*icbLZHJ$%&nYTb=Ng>aBdE)4OzR=Jct_>1{XHs^*=&D_31-+Se?&ZT0Qcgt~Y9 zF||Hk=>7KWSRz_7n@5+u?3QWc z>rJdYb$rBidNZl)BkF_9w8!7OpZWCBt}A)GA#Sr2=czP{a2{cG!FgQ-1>VVkm=`S0 zc`_uJ&AGiy5Ai6=ah_vE$z?@W1xs+77bIKfJk6H5TrEmgM3JJ9x^9@2C66`a#?dZK zBs4`3ZSbG02>x(=d}UXpEBeK3<_aF&SyDG&d#>9OY!($#XiIaUW5?or9b@7o=`>4X z=CWYB$SI48(9f838PhxF2~nJ4SFjkDhmn$`l=Q5QrTbOQY0bOjEyCkK9!i$xyqiwx zk}S&QM*iQr#dxeF9W&ujt=ius0PI#QBqIb~j!Dj?9wfD=zlyZXlVoiI39%^WG0EcU z)y>AqB~#gEWx{1aeYbhm>sVkzZp^7aH_u!-qz9f{5c;!4B8n&c7Rz#;rBkfq6&0LQ zH?x;kfE~q=4V0D(dc^)5;C&rpu*w#3VMq5Zjk-;cSbkzzS|Kw{lrm(vsy@n&c@MRC zQcZO)J9%>PfrLl4d|i`}L^T<-%TiC4AO+eRP@1&*jrv9BOaihH25r{0p_2XZnx@Q$B^3#T`iY^@F6emlJL#)cvJLPZ$a>Mz)To)vz_i}e$@Z~KW^~jF)w?|L1`2UUC#Hc0p*7o@1k~LUwd-b}WJpuWdEhjL!U)0s- z+p{B%rTnjqsVDLmy#s($C_i&%S0nf^GOC?F&;BVz=XPXAYc!wHpbsD+${KP(eU@MJ zG}N#8$?mLS1tKAfA{rtIBCjC(5r9Ve2L6ydt(Odmpwun^)e@sdK~eA%-4{iRwjv89 zqsSINnuj;`3Pm%HrWhhvRwFy-hG$6V_95|~x957;!9kN?MUq+PSq_KDY>>Q~qHg2Y zhQ@USkYpP424;>(irZKTL?C|bH-(_5stNJ7-gbHk_c)M7(*3P-)qA^>U9bRrqZ(xG z)zKmJadIF{CMU0n1p<&KHBf|bgv*j}4Y;cmiYG`->lIC0{1#SB?#q@*2-AE3r2u&BUC{Ocx^}wNbcU2bWLpR91PJsj9-F>3#duyeHmcHy4VS* zyMJ#F=K zWo@Kn9HQr5_FgxKSW-W_6Y5U&$>VdzKh<4l>=-mnwx)I|tWMW1I8_Vd;=Ul0j9@>iYH6) zRXHUU>*g0_rf23Q=IEAWmgJ-=Y1(TLWm;+;*f7n>e|aS*zu}9O&Py# FqyUsv$YKBh delta 405 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 K?KtS2x$!?{$naAD delta 4685 zcmcgvO>7&-6^4ZxQJkc%>Yv(48#A#1+11(-uK>q^2yjgemwSz?;h+2gMqi4VqiVpE;f6CO0Cc?7Xxl9P^*@Efp)7{ z2wbZ*18&tTHgkE;t(F2^*K-2AR%?09Ts;uJ5J-4|e6AYk76Z*8U#pK-XH|qcMqO>aRd~Ow>-C8)^ObF z|8{x6|Ir?wz1sG?TJ_uouU0F2ZvE_J!EGJPT`dbJ4VM29aL%Zx22jT~b+TFxw~g_PPN43{%2BHkQYvy38RF26jqWaEDk6mO}e6{Ex% zD{=Z`b+E6<1dADcx<*?~8ZGQ-b0fj#_@)p>O+Bs|8D=#(Q&wyZ2%yDY&?~#32RC8O z;cpKCvIw{EhC%kzgpy@6NDag?DzNW}%YIZgfOt&@WCv-Ov$nO=OKyW`(%#k#8@n66aV1CLQ6f zMSKv;g&l7woTKr{vvf$nIMO3BQG(Ah^TJ4mbO3fU5az~|U_Gp@9LagEcmsJ{YHzET}MBn|z80%yN;zk=@|+$YaqFjM!2H+vHFC6Qg|m zUH{xUKcO1XG_hEeaVmw9r)Z|4md=nRPri5lqQARkQpPPXMbS89DNfpSD%mAa;u=%O z1YTIH<=BpmJMW!79x<_)5G9KWGLPgc>PzkD^N@j zi;ihDAVdw`mPc-$2@Pk|rYMx?N_7{N>d5P+$V>NTaF;PpZq|1nPP~8ifCq5L`n?$W zhqBD6-vFPh>rxpusN$#Zd!`q}vbqUZwLOS3tWus3jHdxwo|qCw7XD=+FStBsOo2;f zV&sf~TXj=W9cpdQ@)*GWRfI;k#IZP^@F$)5cEoj1m3 zOFV^}=jB)Ke)~|c#38;(<~nlq?x}Bjdu|#=!c@PGaO|MC^yHJfk@KLYR)a3IE`!2` zGTWVJT|Rd2{CL#marA>Z8NGLAd_h0V%ly6Y_)gW!AKlB32V+X7O7hVCb4#=O!HpXm zf~B{3D6R;+p}JwZtNM{BFq%7x9ZpR*V?iLOOEmfH-p#Uq|AG;+l~lCi$So8Oya&NM z@qw67=R;!_o|w1g-|kNyc1DaGe(?2tC#DLbVf*t;Gp-;5CE9n+p(cj8qsr^{v(Z9p zsWUMHV^}D6ZPp@%=~*^JG41e%eDolApeuj#;AG#wtxF=Oy`qERI8leyxRX#-x*_J{ zs(5#|=Yb)HaAJGfrTP)*<0SAQjejOa@Te@TSqytr`TpUZHwoB(zJQaK#~0%Ad*6S# z-&5mPamzN4cWYWrPRn{~tR{>uLRTgvP#d(SVVl5@AuCOy9~DRg9TzIriFs`ko~UN6 z#>irrw0D3Ar%?|Pa{^L~WV?J_ixRT*#}CfP^B+v~*W>#_!a#{^wh{(LIJm<|Z*U%Q zp?P-*Rnz<&sA}d@=Yh+yI_BZ0aYg#&{V@^4I-;E*WkFYA3fl&E>`_de&w~j%O}-7E zCrsw1{hYFg7~T7D>SSGqS5T4=fF++cQ*rr+4~^B`yR#S+P1FwM0<*dfmqrHfspwVJ zWRVF7D)Imx+KZODs)9mQP*4(-;Fi4f@Wg?LEIquqmn#|CCvwpkiPV-Lj^T%BgWtrH zohh3_<)BWHIb?55{`2AMIdrxh3Vyhj#U{sqLmv-azNH;Sg=p;H6^22pZq6s@nv@pu z7;z7u8oIGW6@^#y7e+Srk#gAcjc@5+lW;T!S8VGe&Q%60hq(@6t$K|M-=cpj8-6S&w(@*Khm>S`v1Y diff --git a/theme/boost/amd/build/footer-popover.min.js b/theme/boost/amd/build/footer-popover.min.js index 99311190bffd08e43029237081044747fe58477e..2e068c387d7f44f2f31bb8d9587362fb703c08b2 100644 GIT binary patch delta 525 zcmZ1@uts2l0k@uhQht6(aY<2P!9**0!GipP{Ib*{&FZqmB8B{%kC7Jno#gk95XzADLKvjWV0GG3>PR&Wp z1?sXwa!ze+>|_JhbTf2U=%uHYc;*$CB<3ZjqPR#?FC#N0RYS8@Q%BKYvLUPN%uAk delta 612 zcmb7X5(e&ZnJkmjw9d`DEkhA zkjBP0@*ONabI~rCOf~6xG#;pR<2klzyM>=G!c>N8;Ppk zk;;I^;0D4-YPbZ^jeO%^Z$uLfCeo^&<+fNLTj~45)7EXis=0#e{VQ9yJ_~EjPJ?+!1vIV&?QbG6ofOm$+lkN;4-D0q6@E#fDhvg=EPkT zNScKWE4#K`zB*aoAsNa65Smi9?=A4Jvgd7z+q=rFy(yI6r0jnVm1WiAgS7_Z>c=-+ CPT&Lp diff --git a/theme/boost/amd/build/footer-popover.min.js.map b/theme/boost/amd/build/footer-popover.min.js.map index 63b6bcba35ec467095cbffc21b6e164d160420f3..4aee718227ed10aa1345f4838b4bf82f57717d85 100644 GIT binary patch delta 1223 zcmbVKT~8B16is8bAW}?)7)*#u(Uh8@1~5P{Cf*rKsika}4+~nC+|dhhmnnX^V0!c>-%)%WqaKtt9LF+=BCZ_! zG+4DtM%mzYeO9^U6-Z_r;%=ya+|;XlR*BVY-sGmEqL=cvl+b~6;a1HtP>#40S_=^I zsB1)g2=xg)bSma^_~H+%92AwV?h|c(_KA7|8{&1>^O)}=vBjMS8(^4O%&9iH-2Nh{0g~CXhOXbe_yy zgVd&Y626+E1m@(FW+VfUB^AUjGPh73F9@w~U@rry`_x6vdnm0F7@1z2W@y@iC3bj_`E8(T>PTMWp-R-h1R6_a- z6p~4N@Qq&}iNC-H{R<@i0pEP}&3I>9V+9Ox9(M2Cd+s@B&dKO$= zYE3we$ddftJuGkbe3eVR=gl3H;F+2tU>KyFQ3#@YK2ByVYg0U0t?3xv_Jx-%N1xDIw;ZVhZzg#;QEL%~81JR*f(NG90UsE(_<1i5Fna{wqJPm|R diff --git a/theme/boost/amd/build/loader.min.js b/theme/boost/amd/build/loader.min.js index 12943a99d75c7ce1c00e7adfd71d1449ed2c8237..48d8a1bc3780a0ee3e757b30b2c6a229208a2bd9 100644 GIT binary patch literal 3520 zcmb_f+iu%95Pi>AFj_#7T9wXbu@5V+nr)k)D3G*4FX)327_>CD*wUg(QgOYG|9yuP zCEt=33)BxbH5?ue&&(Xk1x$GbQD91#!+0X4HUlA90V+sF0er8eGCD{CI$(-3H{ewP z-*J>n1%n!@f>$#)fvb%+iq(V0a52!V;)efgk#KqEc$-AirpgVMRW$ba$qU3zUUtiq zv3E|!Jw|Uki&x!xGUk;5CF}R_t>FqTV9FX{B02dIuN0U@RRqUjh+lL(27N7yM!-2f zrmLcLPVr&A-XPAvc(l)46ggAHE0&iKRkDCL?QZdkPotn)5*%k{S%aLC&%nN3vpV)W zSB((EJEll(0ba5R2oI1|u;{!KH~V&jzCAf?p`!64QDt2ayWw>KY(UTVcS#R|TE{ye zTa@gQ+|goLPWD+j-ZD7a_qp%L!No&l(Q=e!89v?L2lx%S+3<EaVWGm$>ED3it8`~1|C5nt>IMc(_N*ZZv&PKciNOLBH zOAC6(@ya3=7+dyWtmi)oss~D4AzPp@jO-7^bKKv%kp>fYK)Z*ITB;HZC9$q?+8Rb^ zxU~s)gLPM`j#tZ@ZD2dy_C=Q(+{eY!V#G=NyFMB`d2&Puc|tzIycWy=QK(0tKoR7W zTuWI9pyUb#jj*clv))dOU!=)`o042N+Spd54zk7lXYM2e_aNj@BE3&8>!sqe(hzcX z`um^cg3Xt*BA+>EAb%I`34vTJxtu@u%LLD%LJ$0u#?K#=wHq_@af&lO0T%VMh}AoOGPx09-pq` zr1PM?9A|fu7v$85bhanCy&6~rk2ezjs9%rz;7L|jek62eTP?sWmzWqd5 zQC!|3>J`@pDo|0NOS!1%L{p2AM1b2{0l?lbGeD!luC<-}!WhLTjlny=R4~Q!l!zhK zk}AL!%He~-$~u3@=;S)Fa$x1Jj8h?VW-oFpM5UFPavkHx)9j23d|QwUy5nh;*8!~B zd|<@c!!$)FBPBgC0>cb$$;d{X1t(7}!qXE=*AM~15Wi@SJ@qw;*LazAIq)f$wY&r6 z>9njpvZG7PL0;;1x!o-B<5#kp@>yn&U>K^sN`r|kmO+B_+LWci6f=*nPAJN9VRuY@ zOERtb3}1fwcN^-98uyk9d(32ohY^sDZW9z8R=9yhcLUYh-M5`u$Lpc3G#}X38GRk? zPS{#P{Um*_(VO;k(Z1jAQ8BSepQXe4b8myFmQ18J()X!jcEXPc|J8@U z68+IR@P5LAt$f@MRnMlKav?QngH^iU$ev19ox!EfSq%Zc=m16dFx(|N3=dLa8}$uJ z6+>O$OG`{kUI3PNaA{vhe;KOP5A2*DljHj97gB>laJ)-~fBEW^x~L z2dj!ve1G5B`eQnY_=!Ltq}50%46nB}y0!SGJM68G?R?}{_I|dTcJCq7UoFKQrWTVh jJUSW-ej{2oDhK>iQR9ECPw%g?_OBV8^NN1a_Lle$J1_%; delta 1191 zcmbtTPixdb6sNUaT3JCUf<=YxfZL3W<8H-6Q&Ol}!Bagf2#S>K<|R8doryD()+L0! ziAR?RUi}C{&w?jEffql9A3$(svvH}eqIgT@@%!`M@4b(gzpcJ@Y6s6#kb}{+_M#Rd zR-?ycWxsqQJCgZipYZ@*jNV*7IX|~HSG=z+jXrOjd|2qr6<-z`5AFz|m6m>jNCrGT z1nGBUaMxNS0_}z=?`bBugEI*_mAp~X(Evg}jdh-5GEpnu)mAT-!g#FgRp67&`TO(5 z%Y~a)wk9MTj`z9;xnm6)g0Vx3uZ_QO@wWD9=(H;4N(?*e{*%Dh{tYdnCZ{)fdN{b``ac#Hqv`z}b;68+~8(y;+=K0Mhh|sjszkP+vlb@K$kVX|L!ky&BH2 zfx03XAWRdHh$E0r))QR&jDvK`5>XICPYda;pEf)}7}G>c7DW~jie9P^IqowJF;m(# zqcLFWE5#yS43<|GAK6+lTE1Oes9$Y7gF#?=HBExIouOUT^AkXx=K(dPX0zC?&r)l(Jp+ITpw-cPsf1EwS zImTpGhgDqmJ~T_JxQ2g`*92nnnl5^^jx^*nkRq{J(7S@0D@twV^j>)zc0Cf1rV_Hq z%ML}rLIzT~Ss1g#&4$43sRiy@J15Ejp(B!qLNR-At~tg@wM9biI(F}gNNi1EZ+rYt z$Ed)-JX@wB3>9cK5vE!s#J*!9WMDRJV{i(P7ujHlZ4-cobZnfHZo)_7< F-S6nwr-T3i diff --git a/theme/boost/amd/build/loader.min.js.map b/theme/boost/amd/build/loader.min.js.map index 38980aa2697aac0a39be659f54367812ac9c7261..4cce8ab0ba16f1f0d80d4fe67a2833715efdae0a 100644 GIT binary patch literal 5920 zcmcgwYjfg87X2%|db7?=P1p4;7k zFvL4syA`U8THW_~?xQb$s4PTY#4@d%ym2byI1!bTN+QFN$lY0-x_3pzsT6XaN1~{l z+*Dk*UgS~TQsDIS=Gd315~(7pdYuiXaluF)!!rwW#pIZ^r5s`BC7UXhoz&|y{qD+q zQol{>`fp7`+_?~}kYlwBb8*5}a?YYKWw{u|h05dMTtT>EVLGbIoXzAY9SQCGuH8%IT$famkt@6?vGj?tGZU5j&3~krsl5Fq3wQsTi@L5kxF!WJTXv!OkQk zhYEl>OvE_PnFWx&Su3#;9VT;aPAybqe9mM>j7P9|#gY()t$E!8-fx{8u{hP%Ph|#w zrVs}YmvNG?pvy15Q;Act5Jpx!%aRzL z0^2-H)e6RI5$&Moe*h2nTIa37HGE)at-(dm@3XT`k8#%Jy+O;rJm)>uz3g>6{lI0c z4~zhYmhcS5V;!elu#r$0ZE<#Opx(z#AND$7(@8|H-yqp5&kW~Ba#ES;kQ=mWfF;*X(}g|hXe75_^9=J8~z z7<>Kws~=b+oULTau3~{K{bi)zAcrc+jpXdT;j(U!-~&#Q%tVY;eUc^aRLv4o3EgwH zK-%Ue8;zhMP9tL=d+q*Ad#KCX6!{`i#4o5$cpitSPB~*$w;tl9`fiuNlTx8X!)!wp z1H>;SvMx}K5i27llDVj7W~)T>&=BKro+zFqa*4`Rj~jV_&1k64Rh-m|FpX9GRpce^ zLa2GRvBWC$ry{zi)?$n=>D-3CCuT$2Jd&_bY!Mf+LMp0oNExdEiDZhC91$ei0Z!N{ zs~xe^_v`^A_!tWC3=qtT$j@OvXht%c&(J2_Kj$J}^+h5gC3ARKtA;n|EaA&x@lwgj zBoU{#6|mn{K39)`FUh=dU3XXFXLlB6we4PzkO}2?Hyn)uRJ|etsP)yVD70nj!Wqz2 z9aa-%yGhR?%u$BL6!r=bDvBYCmL(7LRD>oM?ok;W*>gQ;U z2NBWd5K%3iCyB$%Hz{5_Obm}qB*=UVEA7xHk&$l0uCPKlrqk><0Nrmj@d+W&GgsW`U@tJy)5N8AVBsJ=hG5qv+w3&gfll{LX+yIAKDbHS zBbA!L{TcA?#R|a%2LytNAA8rw=zFZD^_Sq9`=bxSZL!H+eT(g3$X+fe}twF#B z$4sGJ42UtNj#EY*+zyYm>i*1r5@YhzlaT%e!bj-JcDBu|4EoKb7!3t9eickf433Fd z;Ahu10~jthg`rdv)0p|p_^JyfwsMO@Gn zKl(=mE=coVid{MQ4~7jOR)hi`gaaPyu7c&$c^q39t?`Y~VUsR+eR`W>OW=6E!^$QYif<|&OiE2hrbCXo^#3lw(s;g?;A4ky!E*Mlc(vx z8*x7IxD#?7ZYZz;;lA^U`}IH*b{bB=c@RJ>@A#UUPD#us=%yXN*VwFiNLIA<*T0-L z5AOVr+K6-7>Tm}dnhDg>TU!fl*mFqzY7S`M=NOMfxFgQN<6EI$KenrZE*WUHX z(}CF~TnPa44J7%!2QCiS+c@ywjdv8e3=9ja?_|($daE0J`s{`X_KHtO*US6z8j^XwzkbJ8m7}oq@Ptg@%B3S%4 z9<0>~`IEQN$2)I5oe&Oz{K|7c{@c&y{MaMa(mSI>@D-k0_gV-Tzy3fc$jla?4l)h? zZ+E^HZkT75Ie&)vBg8gUV_^zl1CXf(*!}f+yYG<>so$W2Y5HyQ<+69!Q2(nrMK%Kpp41@)VO@tSzZ~t~wU%p*UW2kidar`IPY{c^QF;6~T`7Pw literal 5894 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 { }); // Trap focus if the dropdown is a dialog. - $(document).on('shown.bs.dropdown', e => { + document.addEventListener('shown.bs.dropdown', e => { const dialog = e.target.querySelector('.dropdown-menu[role="dialog"]'); if (dialog) { // Use setTimeout to make sure the dialog is positioned correctly to prevent random scrolling. @@ -205,7 +205,7 @@ const dropdownFix = () => { }); // Untrap focus when the dialog dropdown is closed. - $(document).on('hidden.bs.dropdown', e => { + document.addEventListener('hidden.bs.dropdown', e => { const dialog = e.target.querySelector('.dropdown-menu[role="dialog"]'); if (dialog) { FocusLockManager.untrapFocus(); @@ -233,7 +233,7 @@ const dropdownFix = () => { * A lot of Bootstrap's out of the box features don't work if dropdown items are not focusable. */ const comboboxFix = () => { - $(document).on('show.bs.dropdown', e => { + document.addEventListener('show.bs.dropdown', e => { if (e.relatedTarget.matches('[role="combobox"]')) { const combobox = e.relatedTarget; const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role="listbox"]`); @@ -257,7 +257,7 @@ const comboboxFix = () => { } }); - $(document).on('hidden.bs.dropdown', e => { + document.addEventListener('hidden.bs.dropdown', e => { if (e.relatedTarget.matches('[role="combobox"]')) { const combobox = e.relatedTarget; const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role="listbox"]`); @@ -486,7 +486,7 @@ const tabElementFix = () => { if (e.target.matches('[role="tablist"] [data-bs-toggle="tab"], [role="tablist"] [data-bs-toggle="pill"]')) { const tabs = e.target.closest('[role="tablist"]').querySelectorAll('[data-bs-toggle="tab"], [data-bs-toggle="pill"]'); e.preventDefault(); - $(e.target).tab('show'); + Tab.getOrCreateInstance(e.target).show(); tabs.forEach(tab => { tab.tabIndex = -1; }); diff --git a/theme/boost/amd/src/drawers.js b/theme/boost/amd/src/drawers.js index b0518a8b5f3..6d74ecfa052 100644 --- a/theme/boost/amd/src/drawers.js +++ b/theme/boost/amd/src/drawers.js @@ -28,8 +28,7 @@ import {debounce} from 'core/utils'; import {isSmall, isLarge} from 'core/pagehelpers'; import Pending from 'core/pending'; import {setUserPreference} from 'core_user/repository'; -// The jQuery module is only used for interacting with Boostrap 4. It can we removed when MDL-71979 is integrated. -import jQuery from 'jquery'; +import Tooltip from './bootstrap/tooltip'; let backdropPromise = null; @@ -142,12 +141,11 @@ const disableDrawerTooltips = (drawerNode) => { */ const disableButtonTooltip = (button, enableOnBlur) => { if (button.hasAttribute('data-original-title')) { - // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. - jQuery(button).tooltip('disable'); + Tooltip.getInstance(button).disable(); button.setAttribute('title', button.dataset.originalTitle); } else { button.dataset.disabledToggle = button.dataset.toggle; - button.removeAttribute('data-toggle'); + button.removeAttribute('data-bs-toggle'); } if (enableOnBlur) { button.dataset.restoreTooltipOnBlur = true; @@ -180,13 +178,12 @@ const enableDrawerTooltips = (drawerNode) => { * @private */ const enableButtonTooltip = (button) => { - // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. - if (button.hasAttribute('data-original-title')) { - jQuery(button).tooltip('enable'); + if (button.hasAttribute('data-bs-original-title')) { + Tooltip.getInstance(button).enable(); button.removeAttribute('title'); } else if (button.dataset.disabledToggle) { button.dataset.toggle = button.dataset.disabledToggle; - jQuery(button).tooltip(); + new Tooltip(button); } delete button.dataset.restoreTooltipOnBlur; }; @@ -432,8 +429,7 @@ export default class Drawers { // Remove open tooltip if still visible. let openButton = getDrawerOpenButton(this.drawerNode.id); if (openButton && openButton.hasAttribute('data-original-title')) { - // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. - jQuery(openButton)?.tooltip('hide'); + Tooltip.getInstance(openButton)?.hide(); } Aria.unhide(this.drawerNode); @@ -504,8 +500,7 @@ export default class Drawers { headerContent?.classList.toggle('hidden', true); // Remove the close button tooltip if visible. if (closeButton.hasAttribute('data-original-title')) { - // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. - jQuery(closeButton)?.tooltip('hide'); + Tooltip.getInstance(closeButton)?.hide(); } const preference = this.drawerNode.dataset.preference; diff --git a/theme/boost/amd/src/footer-popover.js b/theme/boost/amd/src/footer-popover.js index fb703293b8d..b46446ad59d 100644 --- a/theme/boost/amd/src/footer-popover.js +++ b/theme/boost/amd/src/footer-popover.js @@ -21,13 +21,13 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import $ from 'jquery'; -import Popover from './popover'; +import Popover from './bootstrap/popover'; const SELECTORS = { FOOTERCONTAINER: '[data-region="footer-container-popover"]', FOOTERCONTENT: '[data-region="footer-content-popover"]', - FOOTERBUTTON: '[data-action="footer-popover"]' + FOOTERBUTTON: '[data-action="footer-popover"]', + FOOTERARROW: '[data-region="footer-container-popover"] .popover-arrow', }; let footerIsShown = false; @@ -35,9 +35,9 @@ let footerIsShown = false; export const init = () => { const container = document.querySelector(SELECTORS.FOOTERCONTAINER); const footerButton = document.querySelector(SELECTORS.FOOTERBUTTON); + const footerArrow = document.querySelector(SELECTORS.FOOTERARROW); - // All jQuery in this code can be replaced when MDL-71979 is integrated. - $(footerButton).popover({ + new Popover(footerButton, { content: getFooterContent, container: container, html: true, @@ -45,49 +45,49 @@ export const init = () => { customClass: 'footer', trigger: 'click', boundary: 'viewport', - popperConfig: { - modifiers: { - preventOverflow: { + modifiers: [ + { + name: 'preventOverflow', + options: { boundariesElement: 'viewport', - padding: 48 + padding: 48, }, - offset: {}, - flip: { - behavior: 'flip' + }, + { + name: 'arrow', + options: { + element: footerArrow, }, - arrow: { - element: '.arrow' - }, - } - } + }, + ] }); document.addEventListener('click', e => { if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) { - $(footerButton).popover('hide'); + Popover.getInstance(footerButton).hide(); } }, true); document.addEventListener('keydown', e => { if (footerIsShown && e.key === 'Escape') { - $(footerButton).popover('hide'); + Popover.getInstance(footerButton).hide(); footerButton.focus(); } }); document.addEventListener('focus', e => { if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) { - $(footerButton).popover('hide'); + Popover.getInstance(footerButton).hide(); } }, true); - $(footerButton).on('show.bs.popover', () => { + footerButton.addEventListener('show.bs.popover', () => { footerIsShown = true; }); - $(footerButton).on('hide.bs.popover', () => { + footerButton.addEventListener('hide.bs.popover', () => { footerIsShown = false; }); }; diff --git a/theme/boost/amd/src/loader.js b/theme/boost/amd/src/loader.js index 90fd67640e1..07574d16648 100644 --- a/theme/boost/amd/src/loader.js +++ b/theme/boost/amd/src/loader.js @@ -22,25 +22,25 @@ * @since 2.9 */ -import $ from 'jquery'; import * as Aria from './aria'; -import Bootstrap from './index'; +import * as Bootstrap from './index'; import Pending from 'core/pending'; -import {DefaultWhitelist} from './bootstrap/tools/sanitizer'; +import {DefaultAllowlist} from './bootstrap/util/sanitizer'; import setupBootstrapPendingChecks from './pending'; /** * Rember the last visited tabs. */ const rememberTabs = () => { - $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { - var hash = $(e.target).attr('href'); + const tabTriggerList = document.querySelectorAll('a[data-bs-toggle="tab"]'); + [...tabTriggerList].map(tabTriggerEl => tabTriggerEl.addEventListener('shown.bs.tab', (e) => { + var hash = e.target.getAttribute('href'); if (history.replaceState) { history.replaceState(null, null, hash); } else { location.hash = hash; } - }); + })); const hash = window.location.hash; if (hash) { const tab = document.querySelector('[role="tablist"] [href="' + hash + '"]'); @@ -55,30 +55,39 @@ const rememberTabs = () => { * */ const enablePopovers = () => { - $('body').popover({ + const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]'); + const popoverConfig = { container: 'body', - selector: '[data-toggle="popover"]', trigger: 'focus', - whitelist: Object.assign(DefaultWhitelist, { - table: [], - thead: [], - tbody: [], - tr: [], - th: [], - td: [], - }), + allowList: Object.assign(DefaultAllowlist, {table: [], thead: [], tbody: [], tr: [], th: [], td: []}), + }; + [...popoverTriggerList].map(popoverTriggerEl => new Bootstrap.Popover(popoverTriggerEl, popoverConfig)); + + // Enable dynamically created popovers inside modals. + document.addEventListener('core/modal:bodyRendered', (e) => { + const modal = e.target; + const popoverTriggerList = modal.querySelectorAll('[data-bs-toggle="popover"]'); + [...popoverTriggerList].map(popoverTriggerEl => new Bootstrap.Popover(popoverTriggerEl, popoverConfig)); }); document.addEventListener('keydown', e => { - if (e.key === 'Escape' && e.target.closest('[data-toggle="popover"]')) { - $(e.target).popover('hide'); + const popoverTrigger = e.target.closest('[data-bs-toggle="popover"]'); + if (e.key === 'Escape' && popoverTrigger) { + Bootstrap.Popover.getInstance(popoverTrigger).hide(); } - if (e.key === 'Enter' && e.target.closest('[data-toggle="popover"]')) { - $(e.target).popover('show'); + if (e.key === 'Enter' && popoverTrigger) { + Bootstrap.Popover.getInstance(popoverTrigger).show(); } }); document.addEventListener('click', e => { - $(e.target).closest('[data-toggle="popover"]').popover('show'); + const popoverTrigger = e.target.closest('[data-bs-toggle="popover"]'); + if (!popoverTrigger) { + return; + } + const popover = Bootstrap.Popover.getInstance(popoverTrigger); + if (!popover._isShown()) { + popover.show(); + } }); }; @@ -87,10 +96,8 @@ const enablePopovers = () => { * */ const enableTooltips = () => { - $('body').tooltip({ - container: 'body', - selector: '[data-toggle="tooltip"]', - }); + const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); + [...tooltipTriggerList].map(tooltipTriggerEl => new Bootstrap.Tooltip(tooltipTriggerEl)); }; const pendingPromise = new Pending('theme_boost/loader:init'); @@ -110,34 +117,6 @@ enablePopovers(); // Enable all tooltips. enableTooltips(); -// Disables flipping the dropdowns up or dynamically repositioning them along the Y-axis (based on the viewport) -// to prevent the dropdowns getting hidden behind the navbar or them covering the trigger element. -$.fn.dropdown.Constructor.Default.popperConfig = { - modifiers: { - flip: { - enabled: false, - }, - storeTopPosition: { - enabled: true, - // eslint-disable-next-line no-unused-vars - fn(data, options) { - data.storedTop = data.offsets.popper.top; - return data; - }, - order: 299 - }, - restoreTopPosition: { - enabled: true, - // eslint-disable-next-line no-unused-vars - fn(data, options) { - data.offsets.popper.top = data.storedTop; - return data; - }, - order: 301 - } - }, -}; - pendingPromise.resolve(); export { -- 2.43.0