Sindbad~EG File Manager
{"version":3,"file":"snap.min.js","sources":["../src/snap.js"],"sourcesContent":["/**\n * This file is part of Moodle - http://moodle.org/\n *\n * Moodle is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * Moodle is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n *\n * @package\n * @copyright Copyright (c) 2015 Open LMS (https://www.openlms.net)\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/* exported snapInit */\n/* eslint no-invalid-this: \"warn\"*/\n\n/**\n * Main snap initialising function.\n */\ndefine(['jquery', 'core/log', 'theme_snap/headroom', 'theme_snap/util', 'theme_snap/personal_menu',\n 'theme_snap/cover_image', 'theme_snap/progressbar', 'core/templates', 'core/str', 'theme_snap/accessibility',\n 'theme_snap/messages', 'theme_snap/scroll'],\n function($, log, Headroom, util, personalMenu, coverImage, ProgressBar, templates, str, accessibility, messages, Scroll) {\n\n 'use strict';\n\n /* eslint-disable camelcase */\n M.theme_snap = M.theme_snap || {};\n /* eslint-enable camelcase */\n\n /**\n * master switch for logging\n * @type {boolean}\n */\n var loggingenabled = false;\n\n if (!loggingenabled) {\n log.disableAll(true);\n } else {\n log.enableAll(true);\n }\n\n /**\n * Initialize pre SCSS and grading constants.\n * New variables can be initialized if necessary.\n * These variables are being passed from classes/output/shared.php,\n * and being updated from php constants in snapInit.\n */\n var brandColorSuccess = '';\n var brandColorWarning = '';\n var GRADE_DISPLAY_TYPE_PERCENTAGE = '';\n var GRADE_DISPLAY_TYPE_PERCENTAGE_REAL = '';\n var GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER = '';\n var GRADE_DISPLAY_TYPE_REAL = '';\n var GRADE_DISPLAY_TYPE_REAL_PERCENTAGE = '';\n var GRADE_DISPLAY_TYPE_REAL_LETTER = '';\n\n /**\n * Get all url parameters from href\n * @param {string} href\n * @returns {Array}\n */\n var getURLParams = function(href) {\n // Create temporary array from href.\n var ta = href.split('?');\n if (ta.length < 2) {\n return false; // No url params\n }\n // Get url params full string from href.\n var urlparams = ta[1];\n\n // Strip out hash component\n urlparams = urlparams.split('#')[0];\n\n // Get urlparam items.\n var items = urlparams.split('&');\n\n // Create params array of values hashed by key.\n var params = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i].split('=');\n var key = item[0];\n var val = item[1];\n params[key] = val;\n }\n return (params);\n };\n\n /**\n * Change save and cancel buttons from forms to the bottom on mobile mode.\n */\n $(window).on('resize', function() {\n mobileFormChecker();\n updateGraderHeadersTop();\n });\n\n var mobileFormChecker = function() {\n var savebuttonsformrequired = $('div[role=main] .mform div.snap-form-required fieldset > div.form-group.fitem');\n var savebuttonsformadvanced = $('div[role=main] .mform div.snap-form-advanced > div:nth-of-type(3)');\n var width = $(window).width();\n if (width < 992) {\n $('.snap-form-advanced').append(savebuttonsformrequired);\n } else if (width > 992) {\n $('.snap-form-required fieldset#id_general').append(savebuttonsformadvanced);\n }\n };\n\n const updateGraderHeadersTop = function() {\n const graderHeader = $('.path-grade-report-grader .gradeparent tr.heading');\n if (graderHeader.length) {\n graderHeader.css('top', $('#mr-nav').height() + 'px');\n }\n };\n\n const regionMain = $('.path-grade-report-grader #region-main div[role=\"main\"]');\n if (regionMain.length > 0) {\n const gradeParent = regionMain[0].querySelector('.gradeparent');\n if (gradeParent) {\n regionMain.addClass('snap-grade-reporter');\n }\n }\n\n updateGraderHeadersTop();\n\n /**\n * Move PHP errors into header\n *\n * @author Guy Thomas\n * @date 2014-05-19\n */\n var movePHPErrorsToHeader = function() {\n // Remove <br> tags inserted before xdebug-error.\n var xdebugs = $('.xdebug-error');\n if (xdebugs.length) {\n for (var x = 0; x < xdebugs.length; x++) {\n var el = xdebugs[x];\n var fontel = el.parentNode;\n var br = $(fontel).prev('br');\n $(br).remove();\n }\n }\n\n // Get messages using the different classes we want to use to target debug messages.\n var msgs = $('.xdebug-error, .php-debug, .debuggingmessage');\n\n if (msgs.length) {\n // OK we have some errors - lets shove them in the footer.\n $(msgs).addClass('php-debug-footer');\n var errorcont = $('<div id=\"footer-error-cont\"><h3>' +\n M.util.get_string('debugerrors', 'theme_snap') +\n '</h3><hr></div>');\n $('#page-footer').append(errorcont);\n $('#footer-error-cont').append(msgs);\n // Add rulers\n $('.php-debug-footer').after($('<hr>'));\n // Lets also add the error class to the header so we know there are some errors.\n $('#mr-nav').addClass('errors-found');\n // Lets add an error link to the header.\n var errorlink = $('<a class=\"footer-error-link btn btn-danger\" href=\"#footer-error-cont\">' +\n M.util.get_string('problemsfound', 'theme_snap') + ' <span class=\"badge\">' + (msgs.length) + '</span></a>');\n $('#page-header').append(errorlink);\n }\n };\n\n /**\n * Are we on the course page?\n * Note: This doesn't mean that we are in a course - Being in a course could mean that you are on a module page.\n * This means that you are actually on the course page.\n * @returns {boolean}\n */\n var onCoursePage = function() {\n return $('body').attr('id').indexOf('page-course-view-') === 0;\n };\n\n /**\n * Apply block hash to form actions etc if necessary.\n */\n /* eslint-disable no-invalid-this */\n var applyBlockHash = function() {\n // Add block hash to add block form.\n if (onCoursePage()) {\n $('.block_adminblock form').each(function() {\n /* eslint-disable no-invalid-this */\n $(this).attr('action', $(this).attr('action') + '#coursetools');\n });\n }\n\n if (location.hash !== '') {\n return;\n }\n\n var urlParams = getURLParams(location.href);\n\n // If calendar navigation has been clicked then go back to calendar.\n if (onCoursePage() && typeof (urlParams.time) !== 'undefined') {\n location.hash = 'coursetools';\n if ($('.block_calendar_month')) {\n util.scrollToElement($('.block_calendar_month'));\n }\n }\n\n // Form selectors for applying blocks hash.\n var formselectors = [\n 'body.path-blocks-collect #notice form'\n ];\n\n // There is no decent selector for block deletion so we have to add the selector if the current url has the\n // appropriate parameters.\n var paramchecks = ['bui_deleteid', 'bui_editid'];\n for (var p in paramchecks) {\n var param = paramchecks[p];\n if (typeof (urlParams[param]) !== 'undefined') {\n formselectors.push('#notice form');\n break;\n }\n }\n\n // If required, apply #coursetools hash to form action - this is so that on submitting form it returns to course\n // page on blocks tab.\n $(formselectors.join(', ')).each(function() {\n // Only apply the blocks hash if a hash is not already present in url.\n var formurl = $(this).attr('action');\n if (formurl.indexOf('#') === -1\n && (formurl.indexOf('/course/view.php') > -1)\n ) {\n $(this).attr('action', $(this).attr('action') + '#coursetools');\n }\n });\n };\n\n /**\n * Set forum strings because there isn't a decent renderer for mod/forum\n * It would be great if the official moodle forum module used a renderer for all output\n *\n * @author Guy Thomas\n * @date 2014-05-20\n */\n var setForumStrings = function() {\n $('.path-mod-forum tr.discussion td.topic.starter').attr('data-cellname',\n M.util.get_string('forumtopic', 'theme_snap'));\n $('.path-mod-forum tr.discussion td.picture:not(\\'.group\\')').attr('data-cellname',\n M.util.get_string('forumauthor', 'theme_snap'));\n $('.path-mod-forum tr.discussion td.picture.group').attr('data-cellname',\n M.util.get_string('forumpicturegroup', 'theme_snap'));\n $('.path-mod-forum tr.discussion td.replies').attr('data-cellname',\n M.util.get_string('forumreplies', 'theme_snap'));\n $('.path-mod-forum tr.discussion td.lastpost').attr('data-cellname',\n M.util.get_string('forumlastpost', 'theme_snap'));\n };\n\n /**\n * Process toc search string - trim, remove case sensitivity etc.\n *\n * @author Guy Thomas\n * @param {string} searchString\n * @returns {string}\n */\n var processSearchString = function(searchString) {\n searchString = searchString.trim().toLowerCase();\n return (searchString);\n };\n\n /**\n * Search course modules\n *\n * @author Stuart Lamour\n * @param {array} dataList\n */\n var tocSearchCourse = function(dataList) {\n // Keep search input open\n var i;\n var ua = window.navigator.userAgent;\n if (ua.indexOf('MSIE ') || ua.indexOf('Trident/')) {\n // We have reclone datalist over again for IE, or the same search fails the second time round.\n dataList = $(\"#toc-searchables\").find('li').clone(true);\n }\n\n // TODO - for 2.7 process search string called too many times?\n var searchString = $(\"#toc-search-input\").val();\n searchString = processSearchString(searchString);\n\n if (searchString.length === 0) {\n $('#toc-search-results').html('');\n $(\"#toc-search-input\").removeClass('state-active');\n\n } else {\n $(\"#toc-search-input\").addClass('state-active');\n var matches = [];\n for (i = 0; i < dataList.length; i++) {\n var dataItem = dataList[i];\n if (processSearchString($(dataItem).text()).indexOf(searchString) > -1) {\n matches.push(dataItem);\n }\n }\n $('#toc-search-results').html(matches);\n }\n };\n\n /**\n * Apply body classes which could not be set by renderers - e.g. when a notice was outputted.\n * We could do this in plain CSS if there was such a think as a parent selector.\n */\n var bodyClasses = function() {\n var extraclasses = [];\n if ($('#notice.snap-continue-cancel').length) {\n extraclasses.push('hascontinuecancel');\n }\n $('body').addClass(extraclasses.join(' '));\n };\n\n /**\n * Listen for hash changes / popstates.\n * @param {CourseLibAmd} courseLib\n */\n var listenHashChange = function(courseLib) {\n var lastHash = location.hash;\n $(window).on('popstate hashchange', function(e) {\n var newHash = location.hash;\n log.info('hashchange');\n if (newHash !== lastHash) {\n if (location.hash === '#primary-nav') {\n personalMenu.update();\n } else {\n $('#page, #moodle-footer, #js-snap-pm-trigger, #logo, .skiplinks').css('display', '');\n if (onCoursePage()) {\n log.info('show section', e.target);\n courseLib.showSection();\n }\n }\n }\n lastHash = newHash;\n });\n };\n\n /**\n * Course footer recent activity dom re-order.\n */\n var recentUpdatesFix = function() {\n $('#snap-course-footer-recent-activity .info').each(function() {\n $(this).appendTo($(this).prev());\n });\n $('#snap-course-footer-recent-activity .head .name').each(function() {\n $(this).prependTo($(this).closest(\".head\"));\n });\n };\n\n /**\n * Apply progressbar.js for circular progress displays.\n * @param {node} nodePointer\n * @param {function} dataCallback\n * @param {function} valueCallback\n */\n var createColoredDataCircle = function(nodePointer, dataCallback, valueCallback = null) {\n var circle = new ProgressBar.Circle(nodePointer, {\n color: 'inherit', // @gray.\n easing: 'linear',\n strokeWidth: 6,\n trailWidth: 3,\n duration: 1400,\n text: {\n value: '0'\n }\n });\n var value = ($(nodePointer).attr('value') / 100);\n var endColor = brandColorSuccess; // Green @brand-success.\n if (value === 0 || $(nodePointer).attr('value') === '-') {\n circle.setText('-');\n } else {\n if ($(nodePointer).attr('value') < 50) {\n endColor = brandColorWarning; // Orange @brand-warning.\n }\n circle.setText(dataCallback(nodePointer));\n }\n var valueAnimate = 0;\n\n if (valueCallback === null) {\n valueAnimate = value;\n } else {\n valueAnimate = valueCallback(nodePointer);\n }\n circle.animate(valueAnimate, {\n from: {\n color: '#999' // @gray-light.\n },\n to: {\n color: endColor\n },\n step: function(state, circle) {\n circle.path.setAttribute('stroke', state.color);\n }\n });\n };\n\n var progressbarcircle = function() {\n $('.snap-student-dashboard-progress .js-progressbar-circle').each(function() {\n createColoredDataCircle(this, function(nodePointer) {\n return $(nodePointer).attr('value') + '<small>%</small>';\n });\n });\n\n $('.snap-student-dashboard-grade .js-progressbar-circle').each(function() {\n createColoredDataCircle(this, function(nodePointer) {\n var nodeValue = $(nodePointer).attr('value');\n var gradeFormat = $(nodePointer).attr('gradeformat');\n\n /**\n * Definitions for gradebook.\n *\n * We need to display the % for all the grade formats which contains a % in the value.\n */\n if (gradeFormat == GRADE_DISPLAY_TYPE_PERCENTAGE\n || gradeFormat == GRADE_DISPLAY_TYPE_PERCENTAGE_REAL\n || gradeFormat == GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER) {\n nodeValue = nodeValue + '<small>%</small>';\n }\n return nodeValue;\n }, function(nodePointer) {\n var valueAnimate = $(nodePointer).attr('value');\n var gradeFormat = $(nodePointer).attr('gradeformat');\n\n if (gradeFormat == GRADE_DISPLAY_TYPE_REAL\n || gradeFormat == GRADE_DISPLAY_TYPE_REAL_PERCENTAGE\n || gradeFormat == GRADE_DISPLAY_TYPE_REAL_LETTER) {\n valueAnimate = 0;\n } else {\n valueAnimate = ($(nodePointer).attr('value') / 100);\n }\n return valueAnimate;\n });\n });\n };\n\n /**\n * Add listeners.\n *\n * just a wrapper for various snippets that add listeners\n */\n var addListeners = function() {\n var selectors = [\n '.chapters a',\n '.section_footer a',\n ' #toc-search-results a'\n ];\n\n $(document).on('click', selectors.join(', '), function(e) {\n var href = this.getAttribute('href');\n if (window.history && window.history.pushState) {\n history.pushState(null, null, href);\n // Force hashchange fix for FF & IE9.\n $(window).trigger('hashchange');\n // Prevent scrolling to section.\n e.preventDefault();\n } else {\n location.hash = href;\n }\n });\n\n // Show fixed header on scroll down\n // using headroom js - http://wicky.nillia.ms/headroom.js/\n var myElement = document.querySelector(\"#mr-nav\");\n // Functions added to trigger on pin and unpin actions for the nav bar\n var onPin = () => {\n $('.snap-drawer-no-headroom').addClass('snap-drawer-headroom');\n $('.snap-drawer-headroom').removeClass('snap-drawer-no-headroom');\n };\n var onUnpin = () => {\n $('.snap-drawer-headroom').addClass('snap-drawer-no-headroom');\n $('.snap-drawer-no-headroom').removeClass('snap-drawer-headroom');\n };\n // Construct an instance of Headroom, passing the element.\n var headroom = new Headroom(myElement, {\n \"tolerance\": 5,\n \"offset\": 100,\n \"classes\": {\n // When element is initialised\n initial: \"headroom\",\n // When scrolling up\n pinned: \"headroom--pinned\",\n // When scrolling down\n unpinned: \"headroom--unpinned\",\n // When above offset\n top: \"headroom--top\",\n // When below offset\n notTop: \"headroom--not-top\"\n },\n \"onPin\": onPin,\n \"onUnpin\": onUnpin\n });\n // When not signed in always show mr-nav?\n if (!$('.notloggedin').length) {\n headroom.init();\n }\n\n // Listener for toc search.\n var dataList = $(\"#toc-searchables\").find('li').clone(true);\n $('#course-toc').on('keyup', '#toc-search-input', function() {\n tocSearchCourse(dataList);\n });\n\n // Handle keyboard navigation of search items.\n $('#course-toc').on('keydown', '#toc-search-input', function(e) {\n var keyCode = e.keyCode || e.which;\n if (keyCode === 9) {\n // 9 tab\n // 13 enter\n // 40 down arrow\n // Register listener for exiting search result.\n $('#toc-search-results a').last().blur(function() {\n $(this).off('blur'); // Unregister listener\n $(\"#toc-search-input\").val('');\n $('#toc-search-results').html('');\n $(\"#toc-search-input\").removeClass('state-active');\n });\n\n }\n });\n\n $('#course-toc').on(\"click\", '#toc-search-results a', function() {\n $(\"#toc-search-input\").val('');\n $('#toc-search-results').html('');\n $(\"#toc-search-input\").removeClass('state-active');\n });\n\n /**\n * When the document is clicked, if the closest object that was clicked was not the search input then close\n * the search results.\n * Note that this is triggered also when you click on a search result as the results should no longer be\n * required at that point.\n */\n $(document).on('click', function(event) {\n if (!$(event.target).closest('#toc-search-input').length) {\n $(\"#toc-search-input\").val('');\n $('#toc-search-results').html('');\n $(\"#toc-search-input\").removeClass('state-active');\n }\n });\n\n // Onclick for toggle of state-visible of admin block and mobile menu.\n $(document).on(\"click\", \"#admin-menu-trigger, #toc-mobile-menu-toggle\", function(e) {\n\n // Close the Snap feeds side menu in case it is open.\n var snapFeedsTrigger = document.getElementById('snap_feeds_side_menu_trigger');\n if ($(snapFeedsTrigger).length != 0) {\n var hrefSnapFeeds = snapFeedsTrigger.getAttribute('href');\n if ($(snapFeedsTrigger).hasClass('active') && $(hrefSnapFeeds).hasClass('state-visible')) {\n var showFeedsString = M.util.get_string('show', 'moodle')\n + ' ' + M.util.get_string('snapfeedsblocktitle', 'theme_snap');\n $(snapFeedsTrigger).attr('title', showFeedsString);\n $(snapFeedsTrigger).attr('aria-label', showFeedsString);\n $(snapFeedsTrigger).attr('aria-expanded', false);\n $(snapFeedsTrigger).removeClass('active');\n $(hrefSnapFeeds).removeClass('state-visible');\n $('#page').toggleClass('offcanvas');\n }\n }\n var href = this.getAttribute('href');\n // Make this only happen for settings button.\n if (this.getAttribute('id') === 'admin-menu-trigger') {\n $(this).toggleClass('active');\n $('#page').toggleClass('offcanvas');\n }\n $(href).attr('tabindex', '0');\n $(href).toggleClass('state-visible').focus();\n e.preventDefault();\n\n if ($('.message-app.main').length === 0) {\n document.dispatchEvent(new Event(\"messages-drawer:toggle\"));\n }\n });\n\n // Onclick for toggle of state-visible of snap feeds side menu.\n $(document).on(\"click\", \"#snap_feeds_side_menu_trigger\", function(e) {\n // Close the Admin settings block in case it is open.\n var adminSettingsTrigger = document.getElementById('admin-menu-trigger');\n if ($(adminSettingsTrigger).length != 0) {\n var hrefAdminSettings = adminSettingsTrigger.getAttribute('href');\n if ($(adminSettingsTrigger).hasClass('active') && $(hrefAdminSettings).hasClass('state-visible')) {\n $(adminSettingsTrigger).removeClass('active');\n $(hrefAdminSettings).removeClass('state-visible');\n $('#page').toggleClass('offcanvas');\n }\n }\n\n var href = this.getAttribute('href');\n if (this.getAttribute('id') === 'snap_feeds_side_menu_trigger') {\n var showFeedsString = M.util.get_string('show', 'moodle')\n + ' ' + M.util.get_string('snapfeedsblocktitle', 'theme_snap');\n var hideFeedsString = M.util.get_string('hide', 'moodle')\n + ' ' + M.util.get_string('snapfeedsblocktitle', 'theme_snap');\n if (this.getAttribute('title') === showFeedsString) {\n $(this).attr('title', hideFeedsString);\n $(this).attr('aria-label', hideFeedsString);\n $(this).attr('aria-expanded', true);\n } else {\n $(this).attr('title', showFeedsString);\n $(this).attr('aria-label', showFeedsString);\n $(this).attr('aria-expanded', false);\n }\n $(this).toggleClass('active');\n $('#page').toggleClass('offcanvas');\n }\n $(href).toggleClass('state-visible').focus();\n e.preventDefault();\n });\n\n // Mobile menu button.\n $(document).on(\"click\", \"#course-toc.state-visible a\", function() {\n $('#course-toc').removeClass('state-visible');\n });\n\n // Reset videos, when changing section (INT-18208).\n $(document).on(\"click\", \".section_footer a, .chapter-title, .toc-footer a\", function() {\n const videos = $('[title=\"watch\"], .video-js, iframe:not([id])');\n for (let i = 0; i < videos.length; i++) {\n if (videos[i].classList.contains('video-js')) {\n if (videos[i].classList.contains('vjs-playing')) {\n let videoButton = videos[i].querySelector('.vjs-play-control.vjs-control.vjs-button');\n videoButton.click(); // Stop for videos using video-js Plugin.\n }\n } else if (videos[i].nodeName === 'IFRAME') {\n if (videos[i].src.includes(\"vimeo\")) {\n videos[i].src += \"\"; // Stop for Vimeo embedded videos.\n }\n } else {\n videos[i].querySelector('iframe').src += \"\"; // Stop for Youtube embedded videos.\n }\n }\n });\n\n $(document).on('click', '.news-article .toggle', function(e) {\n var $news = $(this).closest('.news-article');\n var $newstoggle = $(this);\n var $newsclose = $news.find('.news-article-message > div > a[role=\"button\"]');\n util.scrollToElement($news);\n $('.news-article').not($news).removeClass('state-expanded');\n $('.news-article .toggle').not($newstoggle).attr('aria-expanded', 'false');\n $('.news-article-message > div > a[role=\"button\"]').not($newsclose).attr('aria-expanded', 'false');\n $('.news-article-message').css('display', 'none');\n\n $news.toggleClass('state-expanded');\n if (!$news.attr('state-expanded')) {\n $news.focus();\n $newstoggle.attr('aria-expanded', 'false');\n $newsclose.attr('aria-expanded', 'false');\n }\n $('.state-expanded').find('.news-article-message').slideDown(\"fast\", function() {\n // Animation complete.\n if ($news.is('.state-expanded')) {\n $news.find('.news-article-message').focus();\n $newstoggle.attr('aria-expanded', 'true');\n $newsclose.attr('aria-expanded', 'true');\n } else {\n $news.focus();\n $newstoggle.attr('aria-expanded', 'false');\n $newsclose.attr('aria-expanded', 'false');\n }\n $(document).trigger('snapContentRevealed');\n });\n e.preventDefault();\n });\n\n // Add listeners for pausing animated images.\n $(document).on('click', '.anim-play-button', function() {\n $(this).parent().prev().css('visibility', 'visible');\n });\n $(document).on('click', '.anim-pause-button', function() {\n $(this).parent().prev().css('visibility', 'hidden');\n });\n\n // Initialise the scroll event listener.\n (new Scroll()).init();\n\n // Bootstrap js elements.\n\n // Initialise core bootstrap tooltip js.\n $(function() {\n var supportsTouch = false;\n if ('ontouchstart' in window) {\n // IOS & android\n supportsTouch = true;\n } else if (window.navigator.msPointerEnabled) {\n // Win8\n supportsTouch = true;\n }\n if (!supportsTouch) {\n var tooltipNode = $('[data-toggle=\"tooltip\"]');\n if ($.isFunction(tooltipNode.tooltip)) {\n tooltipNode.tooltip();\n }\n }\n });\n };\n\n /**\n * Function to fix the styles when fullscreen is used with Atto Editor.\n */\n function waitForFullScreenButton() {\n var maxIterations = 15;\n var i = 0;\n var checker = setInterval(function() {\n i = i + 1;\n if (i > maxIterations) {\n clearInterval(checker);\n } else {\n if ($('button.atto_fullscreen_button').length != 0 && $('div.editor_atto').length != 0) {\n $('button.atto_fullscreen_button').click(function() {\n $('div.editor_atto').css('background-color', '#eee');\n $('div.editor_atto').css('z-index', '1');\n });\n $('button.atto_html_button').click(function() {\n $('#id_introeditor').css('z-index', '1');\n });\n clearInterval(checker);\n }\n }\n }, 2000);\n }\n\n /**\n * AMD return object.\n */\n return {\n /**\n * Snap initialise function.\n * @param {object} courseConfig\n * @param {bool} pageHasCourseContent\n * @param {int} siteMaxBytes\n * @param {bool} forcePassChange\n * @param {bool} messageBadgeCountEnabled\n * @param {int} userId\n * @param {bool} sitePolicyAcceptReqd\n * @param {bool} inAlternativeRole\n * @param {string} brandColors\n * @param {int} gradingConstants\n */\n snapInit: function(courseConfig, pageHasCourseContent, siteMaxBytes, forcePassChange,\n messageBadgeCountEnabled, userId, sitePolicyAcceptReqd, inAlternativeRole,\n brandColors, gradingConstants) {\n\n // Set up.\n\n // Branding colors. New colors can be set up if necessary.\n brandColorSuccess = brandColors.success;\n brandColorWarning = brandColors.warning;\n // Grading constants for percentage.\n GRADE_DISPLAY_TYPE_PERCENTAGE = gradingConstants.gradepercentage;\n GRADE_DISPLAY_TYPE_PERCENTAGE_REAL = gradingConstants.gradepercentagereal;\n GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER = gradingConstants.gradepercentageletter;\n GRADE_DISPLAY_TYPE_REAL = gradingConstants.gradereal;\n GRADE_DISPLAY_TYPE_REAL_PERCENTAGE = gradingConstants.graderealpercentage;\n GRADE_DISPLAY_TYPE_REAL_LETTER = gradingConstants.graderealletter;\n\n M.cfg.context = courseConfig.contextid;\n M.snapTheme = {forcePassChange: forcePassChange};\n\n // General AMD modules.\n personalMenu.init(sitePolicyAcceptReqd);\n\n // Course related AMD modules (note, site page can technically have course content too).\n if (pageHasCourseContent) {\n require(\n [\n 'theme_snap/course-lazy'\n ], function(CourseLibAmd) {\n // Instantiate course lib.\n var courseLib = new CourseLibAmd(courseConfig);\n\n // Hash change listener goes here because it requires courseLib.\n listenHashChange(courseLib);\n }\n );\n }\n\n // When document has loaded.\n /* eslint-disable complexity */\n $(document).ready(function() {\n movePHPErrorsToHeader(); // Boring\n setForumStrings(); // Whatever\n addListeners(); // Essential\n applyBlockHash(); // Change location hash if necessary\n bodyClasses(); // Add body classes\n mobileFormChecker();\n util.processAnimatedImages();\n\n // Make sure that the blocks are always within page-content for assig view page.\n $('#page-mod-assign-view #page-content').append($('#moodle-blocks'));\n\n // Remove from Dom the completion tracking when it is disabled for an activity.\n $('.snap-header-card .snap-header-card-icons .disabled-snap-asset-completion-tracking').remove();\n\n // Prepend asset type when activity is a folder to appear in the card header instead of the content.\n var folders = $('li.snap-activity.modtype_folder');\n $.each(folders, function(index, folder) {\n var content = $(folder).find('div.contentwithoutlink div.snap-assettype');\n if (content.length > 0) {\n if ($(folder).find('div.activityinstance div.snap-header-card .asset-type').length == 0) {\n var folderAssetTypeHeader = $(folder).find('div.activityinstance div.snap-header-card');\n content.prependTo(folderAssetTypeHeader);\n }\n }\n });\n\n // Add a class to the body to show js is loaded.\n $('body').addClass('snap-js-loaded');\n // Apply progressbar.js for circluar progress display.\n progressbarcircle();\n // Course footer recent updates dom fixes.\n recentUpdatesFix();\n\n if (!$('.notloggedin').length) {\n if ($('body').hasClass('pagelayout-course') || $('body').hasClass('pagelayout-frontpage')) {\n coverImage.courseImage(courseConfig.shortname, siteMaxBytes);\n } else if ($('body').hasClass('pagelayout-coursecategory')) {\n if (courseConfig.categoryid) {\n coverImage.categoryImage(courseConfig.categoryid, siteMaxBytes);\n }\n }\n }\n // Allow deeplinking to bs tabs on snap settings page.\n if ($('#page-admin-setting-themesettingsnap').length) {\n var tabHash = location.hash;\n // Check link is to a tab hash.\n if (tabHash && $('.nav-link[href=\"' + tabHash + '\"]').length) {\n $('.nav-link[href=\"' + tabHash + '\"]').tab('show');\n $(window).scrollTop(0);\n }\n }\n\n // Add extra padding when the error validation message appears at the moment of enter a not valid\n // URL for feature spots.\n var firstlinkerror = $('#page-admin-setting-themesettingsnap #themesnapfeaturespots' +\n ' #admin-fs_one_title_link span.error');\n var secondlinkerror = $('#page-admin-setting-themesettingsnap #themesnapfeaturespots' +\n ' #admin-fs_two_title_link span.error');\n var thirdlinkerror = $('#page-admin-setting-themesettingsnap #themesnapfeaturespots' +\n ' #admin-fs_three_title_link span.error');\n var titlelinksettingone = $('#page-admin-setting-themesettingsnap #themesnapfeaturespots' +\n ' #admin-fs_one_title_link .form-label');\n var titlelinksettingtwo = $('#page-admin-setting-themesettingsnap #themesnapfeaturespots' +\n ' #admin-fs_two_title_link .form-label');\n var titlelinksettingthree = $('#page-admin-setting-themesettingsnap #themesnapfeaturespots' +\n ' #admin-fs_three_title_link .form-label');\n // Create an extra Div to wrap title links settings to avoid line break.\n $('#page-admin-setting-themesettingsnap #themesnapfeaturespots ' +\n '#admin-fs_three_title').nextUntil('#page-admin-setting-themesettingsnap #themesnapfeaturespots ' +\n '#admin-fs_one_title_link_cb').wrapAll(\"<div class=fs-title-links></div>\");\n var linktitlestyle = {'padding-bottom': '2.1em'};\n\n // We need to modify the padding of these elements depending on the case, because when validating\n // the link and throwing an error, this will create an extra height to the parent and can break\n // the visualization of the settings page for Feature spots.\n if ((firstlinkerror).length) {\n titlelinksettingtwo.css(linktitlestyle);\n titlelinksettingthree.css(linktitlestyle);\n }\n if ((secondlinkerror).length) {\n titlelinksettingone.css(linktitlestyle);\n titlelinksettingthree.css(linktitlestyle);\n }\n if ((thirdlinkerror).length) {\n titlelinksettingone.css(linktitlestyle);\n titlelinksettingtwo.css(linktitlestyle);\n }\n\n if ($('body').hasClass('snap-pm-open')) {\n personalMenu.update();\n }\n\n // SHAME - make section name creation mandatory\n if ($('#page-course-editsection.format-topics').length) {\n var usedefaultname = document.getElementById('id_name_customize'),\n sname = document.getElementById('id_name_value');\n usedefaultname.value = '1';\n usedefaultname.checked = true;\n sname.required = \"required\";\n // Make sure that section does have at least one character.\n $(sname).attr(\"pattern\", \".*\\\\S+.*\");\n $(usedefaultname).parent().css('display', 'none');\n\n // Enable the cancel button.\n $('#id_cancel').on('click', function() {\n $(sname).removeAttr('required');\n $(sname).removeAttr('pattern');\n return true;\n });\n // Make sure that in other formats, \"only spaces\" name is not available.\n } else {\n $('#id_name_value').attr(\"pattern\", \".*\\\\S+.*\");\n $('#id_cancel').on('click', function() {\n $(sname).removeAttr('pattern');\n return true;\n });\n }\n\n // Book mod print button, only show if print link already present.\n if ($('#page-mod-book-view a[href*=\"mod/book/tool/print/index.php\"]').length) {\n var urlParams = getURLParams(location.href);\n if (urlParams) {\n $('[data-block=\"_fake\"]').append('<p>' +\n '<hr><a target=\"_blank\" href=\"/mod/book/tool/print/index.php?id=' + urlParams.id + '\">' +\n M.util.get_string('printbook', 'booktool_print') +\n '</a></p>');\n }\n }\n\n var modSettingsIdRe = /^page-mod-.*-mod$/; // E.g. #page-mod-resource-mod or #page-mod-forum-mod\n var onModSettings = modSettingsIdRe.test($('body').attr('id')) && location.href.indexOf(\"modedit\") > -1;\n if (!onModSettings) {\n modSettingsIdRe = /^page-mod-.*-general$/;\n onModSettings = modSettingsIdRe.test($('body').attr('id')) && location.href.indexOf(\"modedit\") > -1;\n }\n var onCourseSettings = $('body').attr('id') === 'page-course-edit';\n var onSectionSettings = $('body').attr('id') === 'page-course-editsection';\n $('#page-mod-hvp-mod .h5p-editor-iframe').parent().css({\"display\": \"block\"});\n var pageBlacklist = ['page-mod-hvp-mod'];\n var pageNotInBlacklist = pageBlacklist.indexOf($('body').attr('id')) === -1;\n\n if ((onModSettings || onCourseSettings || onSectionSettings) && pageNotInBlacklist) {\n // Wrap advanced options in a div\n var vital = [\n ':first',\n '#page-course-edit #id_descriptionhdr',\n '#id_contentsection',\n '#id_general + #id_general', // Turnitin duplicate ID bug.\n '#id_content',\n '#page-mod-choice-mod #id_optionhdr',\n '#page-mod-workshop-mod #id_gradingsettings',\n '#page-mod-choicegroup-mod #id_miscellaneoussettingshdr',\n '#page-mod-choicegroup-mod #id_groups',\n '#page-mod-scorm-mod #id_packagehdr'\n ];\n vital = vital.join();\n\n $('form[id^=\"mform1\"] > fieldset').not(vital).wrapAll('<div class=\"snap-form-advanced col-md-4\" />');\n\n // Add expand all to advanced column.\n $(\".snap-form-advanced\").append($(\".collapsible-actions\"));\n // Add collapsed to all fieldsets in advanced, except on course edit page.\n if (!$('#page-course-edit').length) {\n $(\".snap-form-advanced fieldset\").addClass('collapsed');\n }\n\n // Sanitize required input into a single fieldset\n var mainForm = $('form[id^=\"mform1\"] fieldset:first');\n var appendTo = $('form[id^=\"mform1\"] fieldset:first .fcontainer');\n\n var required = $('form[id^=\"mform1\"] > fieldset').not('form[id^=\"mform1\"] > fieldset:first');\n for (var i = 0; i < required.length; i++) {\n var content = $(required[i]).find('.fcontainer');\n $(appendTo).append(content);\n $(required[i]).remove();\n }\n $(mainForm).wrap('<div class=\"snap-form-required col-md-8\" />');\n\n // Show the form buttons when adding multiple LTI activities.\n if ($('body#page-mod-lti-mod').length) {\n var multipleLTIActivities =\n document.querySelector('section#region-main form.mform > div[data-attribute=\"dynamic-import\"]');\n var LTIObserver = new MutationObserver(function() {\n $('fieldset#id_general > :nth-child(5)').detach()\n .appendTo('section#region-main > div[role=\"main\"] > form.mform');\n });\n var LTIObserverConfig = {childList: true};\n LTIObserver.observe(multipleLTIActivities, LTIObserverConfig);\n }\n\n var description = $('form[id^=\"mform1\"] fieldset:first .fitem_feditor:not(.required)');\n\n if (onModSettings && description) {\n var noNeedDescSelectors = [\n 'body#page-mod-assign-mod',\n 'body#page-mod-choice-mod',\n 'body#page-mod-turnitintool-mod',\n 'body#page-mod-workshop-mod',\n ];\n var addMultiMessageSelectors = [\n 'body#page-mod-url-mod',\n 'body#page-mod-resource-mod',\n 'body#page-mod-folder-mod',\n 'body#page-mod-imscp-mod',\n 'body#page-mod-lightboxgallery-mod',\n 'body#page-mod-scorm-mod',\n ];\n if ($(noNeedDescSelectors.join()).length === 0) {\n $(appendTo).append(description);\n $(appendTo).append($('#fitem_id_showdescription'));\n }\n // Resource cards - add a message to this type of activities, these activities will not display\n // any multimedia.\n if ($(addMultiMessageSelectors.join()).length > 0) {\n str.get_strings([\n {key: 'multimediacard', component: 'theme_snap'}\n ]).done(function(stringsjs) {\n var activityCards = stringsjs[0];\n var cardmultimedia = $(\"[id='id_showdescription']\").closest('.form-group');\n $(cardmultimedia).append(activityCards);\n });\n }\n }\n\n // Resources - put description in common mod settings.\n description = $(\"#page-mod-resource-mod [data-fieldtype='editor']\").closest('.form-group');\n var showdescription = $(\"#page-mod-resource-mod [id='id_showdescription']\").closest('.form-group');\n $(\"#page-mod-resource-mod .snap-form-advanced #id_modstandardelshdr .fcontainer\").append(description);\n $(\"#page-mod-resource-mod .snap-form-advanced #id_modstandardelshdr .fcontainer\").append(showdescription);\n\n // Assignment - put due date in required.\n var duedate = $(\"#page-mod-assign-mod [for='id_duedate']\").closest('.form-group');\n $(\"#page-mod-assign-mod .snap-form-required .fcontainer\").append(duedate);\n\n // Move availablity at the top of advanced settings.\n var availablity = $('#id_visible').closest('.form-group').addClass('snap-form-visibility');\n var label = $(availablity).find('label');\n var select = $(availablity).find('select');\n $(label).insertBefore(select);\n\n // SHAME - rewrite visibility form lang string to be more user friendly.\n $(label).text(M.util.get_string('visibility', 'theme_snap') + ' ');\n\n if ($(\"#page-course-edit\").length) {\n // We are in course editing form.\n // Removing the \"Show all sections in one page\" from the course format form.\n var strDisabled = \"\";\n (function() {\n return str.get_strings([\n {key: 'showallsectionsdisabled', component: 'theme_snap'},\n {key: 'disabled', component: 'theme_snap'}\n ]);\n })()\n .then(function(strings) {\n var strMessage = strings[0];\n strDisabled = strings[1];\n return templates.render('theme_snap/form_alert', {\n type: 'warning',\n classes: '',\n message: strMessage\n });\n })\n .then(function(html) {\n var op0 = $('[name=\"coursedisplay\"] > option[value=\"0\"]');\n var op1 = $('[name=\"coursedisplay\"] > option[value=\"1\"]');\n var selectNode = $('[name=\"coursedisplay\"]');\n // Disable option 0\n op0.attr('disabled', 'disabled');\n // Add \"(Disabled)\" to option text\n op0.append(' (' + strDisabled + ')');\n // Remove selection attribute\n op0.removeAttr(\"selected\");\n // Select option 1\n op1.attr('selected', 'selected');\n // Add warning\n selectNode.parent().append(html);\n });\n }\n\n $('.snap-form-advanced').prepend(availablity);\n\n // Add save buttons.\n var savebuttons = $('form[id^=\"mform1\"] > .form-group:last');\n $(mainForm).append(savebuttons);\n\n // Expand collapsed fieldsets when editing a mod that has errors in it.\n var errorElements = $('.form-group.has-danger');\n if (onModSettings && errorElements.length) {\n errorElements.closest('.collapsible').removeClass('collapsed');\n }\n\n // Hide appearance menu from interface when editing a page-resource.\n if ($(\"#page-mod-page-mod\").length) {\n // Chaining promises to get localized strings and render warning message.\n (function() {\n return str.get_strings([\n {key: 'showappearancedisabled', component: 'theme_snap'}\n ]);\n })()\n .then(function(localizedstring) {\n return templates.render('theme_snap/form_alert', {\n type: 'warning',\n classes: '',\n message: localizedstring\n });\n })\n // eslint-disable-next-line promise/always-return\n .then(function(html) {\n // Disable checkboxes.\n // Colors for disabling the divs.\n var layoverbkcolor = \"#f1f1f1\";\n var layovercolor = \"#d5d5d5\";\n var pageInputs = $('[id=\"id_printheading\"], [id=\"id_printintro\"],' +\n ' [id=\"id_printlastmodified\"], [id=\"id_display\"],' +\n ' [id=\"id_popupwidth\"], [id=\"id_popupheight\"]');\n\n // This will help with disable the multiple options for the select, and let the one by default.\n // Allowing to submit the form.\n $('#id_display option:not(:selected)').attr('disabled', true);\n\n // Note we can't use 'disabled' for settings or they don't get submitted.\n pageInputs.attr('readonly', true);\n $('#id_display').attr('disabled', true);\n pageInputs.attr('tabindex', -1); // Prevent tabbing to change val.\n pageInputs.click(function(e) {\n e.preventDefault();\n return false;\n });\n pageInputs.parent().parent().parent().css('background-color', layoverbkcolor);\n pageInputs.parent().parent().parent().css('color', layovercolor);\n\n // Add warning.\n var selectNode = $('#id_appearancehdrcontainer');\n selectNode.append(html);\n });\n $('#id_showdescription').parent().parent().parent().hide();\n }\n }\n // Remove disabled attribute for section name for topics format.\n if (onSectionSettings) {\n var sectionName = $(\"#page-course-editsection.format-topics .form-group #id_name_value\");\n if (sectionName.length) {\n let sectionNameIsDiabled = document.getElementById('id_name_value').hasAttribute(\"disabled\");\n if (sectionNameIsDiabled) {\n document.getElementById('id_name_value').removeAttribute(\"disabled\");\n }\n }\n }\n\n // Conversation counter for user badge.\n if (messageBadgeCountEnabled) {\n require(\n [\n 'theme_snap/conversation_badge_count-lazy'\n ], function(conversationBadgeCount) {\n conversationBadgeCount.init(userId);\n }\n );\n }\n\n // Update Messages badge without reloading the site.\n $('.message-app .list-group').on('click', '.list-group-item.list-group-item-action', function(e) {\n require(\n [\n 'theme_snap/conversation_badge_count-lazy'\n ], function(conversationBadgeCount) {\n let conversationId = e.currentTarget.attributes['data-conversation-id'].value;\n conversationBadgeCount.init(userId, conversationId);\n }\n );\n });\n\n // Listen to cover image label key press for accessible usage.\n var focustarget = $('#snap-coverimagecontrol label');\n if (focustarget && focustarget.length) {\n focustarget.keypress(function(e) {\n if (e.which === 13) {\n $('#snap-coverfiles').trigger('click');\n }\n });\n }\n\n // Review if settings block is missing.\n if (!$('.block_settings').length) {\n // Hide admin icon.\n $('#admin-menu-trigger').hide();\n if (inAlternativeRole) {\n // Handle possible alternative role.\n require(\n [\n 'theme_snap/alternative_role_handler-lazy'\n ], function(alternativeRoleHandler) {\n alternativeRoleHandler.init(courseConfig.id);\n }\n );\n }\n }\n\n // Add tab logic order to navigation bar icons, part of this order is being taken from the layout nav.php file.\n var customMenu = $('ul.snap-navbar-content li:first-child a');\n var moodlePage = $(\"#moodle-page a:first\");\n var notificationsBtn = $('#nav-notification-popover-container > div.popover-region-toggle.nav-link');\n var searchButton = $('#mr-nav .simplesearchform a.btn.btn-open');\n var adminMenuTrigger = $('#admin-menu-trigger');\n\n var lastElement;\n if (customMenu.length) {\n lastElement = customMenu;\n } else {\n lastElement = moodlePage;\n }\n if (notificationsBtn.length && searchButton.length && adminMenuTrigger.length && lastElement.length) {\n // Update tab events because all elements have tabindex=\"0\" and they are rendered funny.\n require(\n [\n 'theme_snap/rearrange_tab_handler-lazy'\n ], function(searchTabHandler) {\n searchTabHandler.init([notificationsBtn, searchButton, adminMenuTrigger, lastElement]);\n }\n );\n }\n\n // Add settings tab show behaviour to classes which want to do that.\n $('.snap-settings-tab-link').on('click', function() {\n var tab = $('a[href=\"' + $(this).attr('href') + '\"].nav-link');\n if (tab.length) {\n tab.tab('show');\n }\n });\n\n // Unpin headroom when url has #course-detail-title.\n if (window.location.hash === '#course-detail-title') {\n $('#mr-nav').removeClass('headroom--pinned').addClass('headroom--unpinned');\n }\n\n // Re position submit buttons for forms when using mobile mode at the bottom of the form.\n var savebuttonsformrequired = $('div[role=main] .mform div.snap-form-required fieldset > div.form-group.fitem');\n var width = $(window).width();\n if (width < 767) {\n $('.snap-form-advanced').append(savebuttonsformrequired);\n }\n\n // Fix a position for the new 'Send content change notification' setting.\n if ( $('.path-mod.theme-snap #id_coursecontentnotification').length ) {\n const notificationCheck = document.getElementById('id_coursecontentnotification')\n .closest(\".form-group.fitem\");\n const submitButtons = $('.snap-form-required [data-groupname=\"buttonar\"]');\n if (notificationCheck !== null && submitButtons.length) {\n notificationCheck.classList.add('snap_content_notification_check');\n submitButtons.before(notificationCheck);\n }\n }\n\n // Hide Blocks editing on button from the Intelliboard Dashboard page in Snap.\n if ( $('#page-home.theme-snap .intelliboard-page').length && $('.snap-page-heading-button').length) {\n const blocksEditingOnButton = document.getElementsByClassName('snap-page-heading-button')[0];\n blocksEditingOnButton.classList.add(\"hidden\");\n }\n\n // Hide edit button for main page in Grade report single view.\n const editingButton = $('#page-grade-report-singleview-index .grade_report_edit_button');\n if (editingButton.length && !$('.search-widget.dropdown').length) {\n editingButton.addClass(\"hidden\");\n }\n\n // Code for Tiles particular loading, needed before other scripts but after the document is ready.\n var targetTilesSect = document.querySelector('section#tiles-section');\n if (targetTilesSect) {\n var configTilesSect = {childList: true, subtree: true};\n var observerTilesSect = new MutationObserver(function() {\n util.processAnimatedImages();\n });\n observerTilesSect.observe(targetTilesSect, configTilesSect);\n }\n\n waitForFullScreenButton();\n });\n accessibility.snapAxInit();\n messages.init();\n\n // Smooth scroll for go to top button.\n $(\"div#goto-top-link > a\").click(function() {\n window.scrollTo({top: 0, behavior: 'smooth'});\n $('body').find('a, [tabindex=0]').first().focus();\n });\n\n // Blocks selectors to remove 'editing' class because is not necessary to access their settings.\n var noneditingblocks = {};\n noneditingblocks.blockxp = '#page-blocks-xp-index';\n\n // Remove 'editing' class actions.\n for (var block in noneditingblocks) {\n var blockisediting = $(noneditingblocks[block]).hasClass('editing');\n if (blockisediting === true) {\n $(noneditingblocks[block]).removeClass('editing');\n }\n }\n\n // Check Toggle Completion to force redirect to URL.\n const toggleCompletion = '.togglecompletion';\n const delay = 1500;\n $(toggleCompletion).on('submit', function() {\n var shouldReload = $(toggleCompletion).hasClass('forcereload');\n if (shouldReload === true) {\n setTimeout(function() {\n location.reload(true);\n }, delay);\n }\n });\n\n // Inherit transparent background color for divs containing non-default mod_url icons.\n if (!document.body.classList.contains('snap-resource-card')) { // Only for Snap Resource display List.\n document.querySelectorAll('.activityiconcontainer.url').forEach(urlDiv => {\n if (urlDiv.querySelector('img[src*=\"/theme/image.php/snap/core/\"][src*=\"/f/\"]')) {\n urlDiv.style.backgroundColor = 'inherit';\n }\n });\n }\n\n }\n };\n }\n);\n"],"names":["define","$","log","Headroom","util","personalMenu","coverImage","ProgressBar","templates","str","accessibility","messages","Scroll","M","theme_snap","disableAll","brandColorSuccess","brandColorWarning","GRADE_DISPLAY_TYPE_PERCENTAGE","GRADE_DISPLAY_TYPE_PERCENTAGE_REAL","GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER","GRADE_DISPLAY_TYPE_REAL","GRADE_DISPLAY_TYPE_REAL_PERCENTAGE","GRADE_DISPLAY_TYPE_REAL_LETTER","getURLParams","href","ta","split","length","urlparams","items","params","i","item","key","val","window","on","mobileFormChecker","updateGraderHeadersTop","savebuttonsformrequired","savebuttonsformadvanced","width","append","graderHeader","css","height","regionMain","querySelector","addClass","onCoursePage","attr","indexOf","processSearchString","searchString","trim","toLowerCase","createColoredDataCircle","nodePointer","dataCallback","valueCallback","circle","Circle","color","easing","strokeWidth","trailWidth","duration","text","value","endColor","setText","valueAnimate","animate","from","to","step","state","path","setAttribute","addListeners","document","join","e","this","getAttribute","history","pushState","trigger","preventDefault","location","hash","myElement","headroom","initial","pinned","unpinned","top","notTop","removeClass","init","dataList","find","clone","ua","navigator","userAgent","html","matches","dataItem","push","tocSearchCourse","keyCode","which","last","blur","off","event","target","closest","snapFeedsTrigger","getElementById","hrefSnapFeeds","hasClass","showFeedsString","get_string","toggleClass","focus","dispatchEvent","Event","adminSettingsTrigger","hrefAdminSettings","hideFeedsString","videos","classList","contains","click","nodeName","src","includes","$news","$newstoggle","$newsclose","scrollToElement","not","slideDown","is","parent","prev","supportsTouch","msPointerEnabled","tooltipNode","isFunction","tooltip","snapInit","courseConfig","pageHasCourseContent","siteMaxBytes","forcePassChange","messageBadgeCountEnabled","userId","sitePolicyAcceptReqd","inAlternativeRole","brandColors","gradingConstants","success","warning","gradepercentage","gradepercentagereal","gradepercentageletter","gradereal","graderealpercentage","graderealletter","cfg","context","contextid","snapTheme","require","CourseLibAmd","courseLib","lastHash","newHash","info","update","showSection","listenHashChange","ready","extraclasses","xdebugs","x","fontel","parentNode","br","remove","msgs","errorcont","after","errorlink","movePHPErrorsToHeader","each","urlParams","time","formselectors","paramchecks","p","formurl","applyBlockHash","processAnimatedImages","folders","index","folder","content","folderAssetTypeHeader","prependTo","nodeValue","gradeFormat","appendTo","courseImage","shortname","categoryid","categoryImage","tabHash","tab","scrollTop","firstlinkerror","secondlinkerror","thirdlinkerror","titlelinksettingone","titlelinksettingtwo","titlelinksettingthree","nextUntil","wrapAll","linktitlestyle","usedefaultname","sname","checked","required","removeAttr","id","modSettingsIdRe","onModSettings","test","onCourseSettings","onSectionSettings","pageNotInBlacklist","vital","mainForm","wrap","multipleLTIActivities","MutationObserver","detach","observe","childList","description","get_strings","component","done","stringsjs","activityCards","cardmultimedia","showdescription","duedate","availablity","label","select","insertBefore","strDisabled","then","strings","strMessage","render","type","classes","message","op0","op1","selectNode","prepend","savebuttons","errorElements","localizedstring","pageInputs","hide","hasAttribute","removeAttribute","conversationBadgeCount","conversationId","currentTarget","attributes","focustarget","keypress","alternativeRoleHandler","lastElement","customMenu","moodlePage","notificationsBtn","searchButton","adminMenuTrigger","searchTabHandler","notificationCheck","submitButtons","add","before","getElementsByClassName","editingButton","targetTilesSect","subtree","checker","setInterval","clearInterval","waitForFullScreenButton","snapAxInit","scrollTo","behavior","first","noneditingblocks","block","setTimeout","reload","body","querySelectorAll","forEach","urlDiv","style","backgroundColor"],"mappings":"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"}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists