Sindbad~EG File Manager
{"version":3,"file":"course-lazy.min.js","sources":["../src/course-lazy.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) 2016 Open LMS (https://www.openlms.net)\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Course main functions.\n */\ndefine(\n [\n 'jquery',\n 'theme_snap/util',\n 'theme_snap/section_asset_management',\n 'theme_snap/course_modules',\n 'core/str'\n ],\n function($, util, sectionAssetManagement, courseModules, str) {\n\n /**\n * Return class(has private and public methods).\n * @param {object} courseConfig\n */\n return function(courseConfig) {\n\n var self = this;\n\n self.courseConfig = courseConfig;\n\n /**\n * Are we on the main course page - i.e. TOC is visible.\n * @returns {boolean}\n */\n var onCoursePage = function() {\n return $('body').attr('id').indexOf('page-course-view-') === 0;\n };\n\n /**\n * Scroll to a mod via search\n * @param {string} modid\n */\n var scrollToModule = function(modid) {\n // Sometimes we have a hash, sometimes we don't\n // strip hash then add just in case\n $('#toc-search-results').html('');\n var targmod = $(\"#\" + modid.replace('#', ''));\n // http://stackoverflow.com/questions/6677035/jquery-scroll-to-element\n util.scrollToElement(targmod);\n\n var searchpin = $(\"#searchpin\");\n if (!searchpin.length) {\n searchpin = $('<i id=\"searchpin\"></i>');\n }\n\n $(targmod).find('.instancename').prepend(searchpin);\n $(targmod).attr('tabindex', '-1').focus();\n $('#course-toc').removeClass('state-visible');\n };\n\n /**\n * Mark the section shown to user with a class in the TOC.\n */\n this.setTOCVisibleSection = function() {\n var sectionIdSel = '.section.main.state-visible, #coursetools.state-visible, #snap-add-new-section.state-visible';\n var currentSectionId = $(sectionIdSel).attr('id');\n $('#chapters li').removeClass('snap-visible-section');\n $('#chapters a[href$=\"' + currentSectionId + '\"]').parent('li').addClass('snap-visible-section');\n $(document).trigger('snapContentRevealed');\n };\n\n /**\n * Check if current url is having specific parameter on it.\n * @param {string} checkParameter\n */\n var checkToolParameter = function(checkParameter) {\n return window.location.href.indexOf(checkParameter) != -1;\n };\n\n /**\n * When on course page, show the section currently referenced in the location hash.\n */\n this.showSection = function() {\n if (!onCoursePage()) {\n // Only relevant for main course page.\n return;\n }\n\n // We know the params at 0 is a section id.\n // Params will be in the format: #section-[number]&module-[cmid], e.g: #section-1&module-7255.\n var urlParams = location.hash.split(\"&\"),\n section = urlParams[0],\n mod = urlParams[1] || null;\n\n // We are done here. H5P will handle the section shown within its iframe.\n if (section.startsWith('#h5pbook')) {\n return;\n }\n\n var sectionSetByServer = '';\n\n if ($('.section.main.state-visible.set-by-server').length) {\n sectionSetByServer = '#' + $('.section.main.state-visible.set-by-server').attr('id');\n $('.section.main.state-visible.set-by-server').removeClass('set-by-server');\n } else {\n $('.course-content .section.main, #moodle-blocks,#coursetools, #snap-add-new-section,' +\n '#tiles-section').removeClass('state-visible');\n }\n\n if (section == '') {\n var qs = location.search.substring(1);\n var sparameters = qs.split('&');\n sparameters.forEach(function(param) {\n if (param.indexOf('section=') >= 0) {\n param.replace(param);\n section = '#' + param.replace('=', '-');\n }\n });\n }\n\n if (section !== '' && section !== sectionSetByServer) {\n $(sectionSetByServer).removeClass('state-visible');\n }\n\n // Dashboard in Tiles should be hidden except in #coursetools section.\n let btnEditing = '.btn-editing';\n let courseTools = '#coursetools';\n let tilesEditing = $(courseTools).hasClass('editing-tiles');\n if (tilesEditing) {\n $(courseTools).removeClass('state-visible');\n $(courseTools).addClass('d-none');\n\n // Change duplicate data-action in label activities for Tiles.\n let labelDuplicateButton = $('.launch-tiles-standard.modtype_label .actions .editing_duplicate');\n if (labelDuplicateButton) {\n $(labelDuplicateButton).attr(\"data-action\", \"tiles-duplicate\");\n }\n }\n let sectionParameter = checkToolParameter('section-');\n let dashboardParameter = checkToolParameter('coursetools');\n if (sectionParameter && !dashboardParameter) {\n $('#tiles-section').addClass('state-visible');\n $(courseTools).removeClass('state-visible');\n $(courseTools).addClass('d-none');\n }\n if (!sectionParameter && dashboardParameter) {\n let tilesDashboard = $('#snap-course-tools').hasClass('tiles-dashboard');\n if (tilesDashboard) {\n $('#tiles-section').removeClass('state-visible');\n $(courseTools).addClass('state-visible');\n $(courseTools).removeClass('d-none');\n if ($(btnEditing).length) {\n let urlEditing = document.querySelector(btnEditing).href;\n let existToolParameter = urlEditing.includes('#coursetools');\n if (!existToolParameter) {\n str.get_strings([\n {key: 'editcoursecontent', component: 'theme_snap'},\n {key: 'editmodetiles', component: 'theme_snap'},\n {key: 'turneditingoff', component: 'moodle'},\n ]).done(function(stringsjs) {\n let btnEditText = document.querySelector(btnEditing).text;\n if (btnEditText == stringsjs[1]) {\n document.querySelector(btnEditing).innerHTML = stringsjs[0];\n } else {\n document.querySelector(btnEditing).innerHTML = stringsjs[2];\n }\n });\n document.querySelector(btnEditing).href = urlEditing + '#coursetools';\n }\n }\n }\n // Remove class d-none to show Course Dashboard after clicking in a section first.\n let snapCourseDashboard = $('#snap-course-tools').hasClass('snap-course-dashboard');\n if (snapCourseDashboard) {\n $(courseTools).removeClass('d-none');\n }\n }\n\n // Course tools special section.\n if (section == '#coursetools') {\n $('#moodle-blocks').addClass('state-visible');\n }\n\n // If a modlue was in the hash then scroll to it.\n if (mod !== null) {\n $(section).addClass('state-visible');\n scrollToModule(mod);\n } else {\n $(section).addClass('state-visible').focus();\n // Faux link click behaviour - scroll to page top.\n scrollBack();\n }\n\n // Default niceties to perform.\n var visibleChapters = $(\n '.section.main.state-visible,' +\n '#coursetools.state-visible,' +\n '#snap-add-new-section.state-visible'\n );\n if (!visibleChapters.length) {\n if ($('.section.main.current').length) {\n $('.section.main.current').addClass('state-visible').focus();\n } else {\n $('#section-0').addClass('state-visible').focus();\n }\n scrollBack();\n }\n if (section == '' && self.courseConfig.format == 'tiles') {\n $('#tiles-section').addClass('state-visible').focus();\n }\n\n // When usejsnavforsinglesection is enabled, tiles-section will be shown instead of single-section.\n // We need to ensure that tiles-section is visible when course tools is not.\n if (self.courseConfig.format == 'tiles') {\n if (!$(courseTools).hasClass('state-visible')\n && !$('#tiles-section').hasClass('state-visible')) {\n $('#tiles-section').addClass('state-visible');\n }\n if ($('#page-course-view-tiles .tiles[data-for=\"course_sectionlist\"]').length) {\n if (!$(courseTools).hasClass('state-visible')\n && !$('#page-course-view-tiles .tiles').hasClass('state-visible')) {\n $('#page-course-view-tiles .tiles').addClass('state-visible');\n }\n }\n if (!dashboardParameter) {\n $('#snap-course-dashboard').addClass('state-visible');\n }\n }\n\n // Store last activity/resource accessed on sessionStorage\n $('li.snap-activity:visible, li.snap-resource:visible').on('click', 'a.mod-link', function() {\n sessionStorage.setItem('lastMod', $(this).parents('[id^=module]').attr('id'));\n });\n\n\n this.setTOCVisibleSection();\n };\n\n /**\n * Scroll to the last activity or resource accessed,\n * if there is nothing stored in session go to page top.\n */\n var scrollBack = function() {\n var storedmod = sessionStorage.getItem('lastMod');\n if (storedmod === null) {\n window.scrollTo(0, 0);\n } else {\n util.scrollToElement($('#' + storedmod + ''));\n sessionStorage.removeItem('lastMod');\n }\n };\n\n /**\n * Captures hash parameters and triggers the render method.\n */\n var renderFromHash = function() {\n var hash = $(location).attr('hash');\n var params = hash.replace('#', '').split('&');\n var section = false;\n var mod = 0;\n $.each(params, function(idx, param) {\n if (param.indexOf('section') != -1) {\n section = param.split('section-')[1];\n } else if (param.indexOf('module') != -1) {\n mod = param.split('module-')[1];\n }\n });\n\n if (!section) {\n var qs = location.search.substring(1);\n var sparameters = qs.split('&');\n sparameters.forEach(function(param) {\n if (param.indexOf('section=') >= 0) {\n param.replace(param);\n section = param.replace('section=', '');\n }\n });\n }\n if (section && $('.chapters .chapter-title[href=\"#section-' + section + '\"]').length > 0) {\n sectionAssetManagement.renderAndFocusSection(section, mod);\n }\n };\n\n /**\n * Initialise course JS.\n */\n var init = function() {\n sectionAssetManagement.init(self);\n courseModules.init(courseConfig);\n\n // Only load the conditionals library if it's enabled for the course, viva la HTTP2!\n if (self.courseConfig.enablecompletion) {\n require(\n [\n 'theme_snap/course_conditionals-lazy'\n ], function(conditionals) {\n conditionals(courseConfig);\n }\n );\n }\n\n // SL - 19th aug 2014 - check we are in a course and if so, show current section.\n if (onCoursePage()) {\n self.showSection();\n $(document).on('snapTOCReplaced', function() {\n self.setTOCVisibleSection();\n if (self.courseConfig.partialrender) {\n sectionAssetManagement.setTocObserver();\n }\n });\n // Sets the observers for rendering sections on demand.\n if (self.courseConfig.partialrender) {\n renderFromHash();\n $(window).on('hashchange', function() {\n renderFromHash();\n });\n // Current section might be hidden, at this point should be visible.\n var sections = $('.course-content li[id^=\"section-\"]');\n var urlParams = location.hash.split(\"&\"),\n sectionParam = urlParams[0];\n if (sections.length == 1 && sectionParam != '#coursetools') {\n sections.addClass('state-visible');\n var section = sections.attr('id').split('section-')[1];\n if (self.courseConfig.toctype == 'top' && self.courseConfig.format == 'topics' && section > 0) {\n var title = sections.find('.sectionname').html();\n var elements = $('.chapter-title');\n var tmpid = 0;\n $.each(elements, function(key, element) {\n if ($(element).attr('section-number') == section) {\n tmpid = key;\n }\n });\n sections.find('.sectionname').html(title);\n sections.find('.sectionnumber').html(tmpid + '.');\n }\n }\n\n\n }\n }\n };\n\n /**\n * Snap modchooser listener to add current section to urls.\n */\n var modchooserSectionLinks = function() {\n $('.section-modchooser-link').click(function() {\n // Grab the section number from the button.\n var sectionNum = $(this).attr('data-sectionid');\n $('.snap-modchooser-addlink').each(function() {\n // Update section in mod link to current section.\n var newLink = this.href.replace(/(section=)[0-9]+/ig, '$1' + sectionNum);\n $(this).attr('href', newLink);\n });\n });\n };\n\n // Intialise course lib.\n init();\n modchooserSectionLinks();\n };\n});\n"],"names":["define","$","util","sectionAssetManagement","courseModules","str","courseConfig","self","this","onCoursePage","attr","indexOf","setTOCVisibleSection","currentSectionId","removeClass","parent","addClass","document","trigger","checkToolParameter","checkParameter","window","location","href","showSection","urlParams","hash","split","section","mod","startsWith","sectionSetByServer","length","search","substring","forEach","param","replace","courseTools","hasClass","labelDuplicateButton","sectionParameter","dashboardParameter","urlEditing","querySelector","includes","get_strings","key","component","done","stringsjs","text","innerHTML","modid","html","targmod","scrollToElement","searchpin","find","prepend","focus","scrollToModule","scrollBack","format","on","sessionStorage","setItem","parents","storedmod","getItem","scrollTo","removeItem","renderFromHash","params","each","idx","renderAndFocusSection","init","enablecompletion","require","conditionals","partialrender","setTocObserver","sections","sectionParam","toctype","title","elements","tmpid","element","click","sectionNum","newLink"],"mappings":"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"}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists