{"version":3,"sources":["https:\/\/dl-ice.spbstu.ru\/theme\/mooc\/amd\/src\/coursecategory.js"],"names":["define","$","bsselect","templates","toolbar","Ajax","str","Notification","filterobj","langstrings","sortfilter","searchfilter","categoryfilter","coursestab","mycoursestab","coursesregion","mycoursesregion","coursespagination","mycoursespagination","togglebtn","gridtemplate","listtemplate","pageheaderactions","courseContent","this","mycourses","courses","isLoaded","getActive","loaded","state","undefined","reset","tab","getCourses","show","appendtab","appendpagination","call","methodname","args","data","JSON","stringify","done","response","parse","empty","hasmanagebutton","append","managebuttons","dropdown","remove","viewobj","view","rendertemplate","latest_card","window","screen","width","addClass","removeClass","length","i","render","then","html","js","appendNodeContents","each","content","style","fail","exception","htmldata","pagination","hide","updatePage","isFilterModified","destroytab","destroypagination","destroyCourseCards","document","ready","get_strings","key","component","stringres","_pageobj","_obj","category","sort","search","page","initAttributes","initPagination","hash","vars","hashes","location","href","slice","indexOf","split","push","categoryid","categorysort","hasClass","filterdata","selectpicker","val","generateFilters","delegate","attr","on","e","target","value","preventDefault","clckviewbtn","M","util","set_user_preference","keypress","keyCode","console","log","linkdata","parentElement"],"mappings":"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","sourcesContent":["\"use strict\";\ndefine([\n 'jquery',\n 'theme_remui\/bootstrap-select',\n 'core\/templates',\n 'theme_remui\/jquery-toolbar',\n 'core\/ajax',\n 'core\/str',\n 'core\/notification'\n], function($, bsselect, templates, toolbar, Ajax, str, Notification) {\n \n \/\/ Globals.\n var filterobj;\n var langstrings;\n\n \/\/ Filter selectors.\n var sortfilter = $('select#sortfilter.selectpicker');\n var searchfilter = $('.category-filters .simplesearchform .simplesearchform');\n var categoryfilter = $('select#categoryfilter.selectpicker');\n\n \/\/ Tab selector.\n var coursestab = $('#coursestab');\n var mycoursestab = $('#mycoursestab');\n\n \/\/ Courses Region Selector.\n var coursesregion = $('#coursesregion div.content');\n var mycoursesregion = $('#mycoursesregion div.content');\n\n \/\/ Pagination Selector.\n var coursespagination = $('#coursespagination');\n var mycoursespagination = $('#mycoursespagination');\n\n \/\/ View toggler.\n var togglebtn = $(\".togglebtn\");\n\n \/\/ View templates.\n var gridtemplate = 'theme_remui\/course_card_grid';\n var listtemplate = 'theme_remui\/course_card_list';\n\n var pageheaderactions = '.page-header-actionss';\n\n \/**\n * Course content object to handle ajax.\n *\/\n var courseContent = new (function() {\n this.mycourses = false;\n this.courses = false;\n\n \/**\n * Check if course contents are loaded.\n * @returns {Boolean}\n *\/\n this.isLoaded = function() {\n let type = courseContent.getActive();\n return this[type];\n };\n\n \/**\n * Mark courses as loaded\n * @param {Boolean} state Loading state\n *\/\n this.loaded = function(state) {\n let type = courseContent.getActive();\n if (state === undefined) {\n state = true;\n }\n this[type] = state;\n };\n\n \/**\n * Reset courses.\n *\/\n this.reset = function() {\n this.mycourses = false;\n this.courses = false;\n };\n\n \/**\n * Get currently active tab\n * @returns {String}\n *\/\n this.getActive = function() {\n return filterobj.tab === true ? 'mycourses' : 'courses';\n };\n })();\n\n \/\/ Initialization of courses.\n $(document).ready(function() {\n\n var strings = [\n {\n key: 'nocoursefound',\n component: 'theme_remui'\n }\n ];\n str.get_strings(strings).then(function(stringres) {\n langstrings = stringres;\n\n filterobj = categoryFilters(); \/\/ Global object for filters.\n \/\/ Initialize global filter object with default values.\n\n var vars = [],\n hash;\n var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n for (var i = 0; i < hashes.length; i++) {\n hash = hashes[i].split('=');\n vars.push(hash[0]);\n vars[hash[0]] = hash[1];\n }\n\n if (vars.categoryid && vars.categoryid != 0) {\n filterobj.category = vars.categoryid;\n }\n\n if (vars.categorysort != undefined) {\n filterobj.sort = vars.categorysort;\n }\n\n if (vars.search != undefined) {\n filterobj.search = vars.search;\n }\n\n if (vars.mycourses && vars.mycourses != 0) {\n filterobj.tab = true;\n if ($(\"body\").hasClass(\"notloggedin\")) {\n filterobj.tab = false;\n }\n }\n generateFilters(filterobj); \/\/ This will create filters.\n getCourses(); \/\/ Course cards Generation.\n courseContent.loaded();\n }).fail(Notification.exception);\n\n });\n\n \/**\n * Filters Generation\n * @param {Object} filterdata Filter data\n *\/\n function generateFilters(filterdata) {\n $(\".selectpicker\").each(function() {\n $(this).selectpicker();\n });\n\n if (filterdata.category !== \"0\") {\n $(\"#categoryfilter.selectpicker\").selectpicker('val', filterdata.category);\n }\n\n if (filterdata.sort !== null) {\n $(\"#sortfilter.selectpicker\").selectpicker('val', filterdata.sort);\n }\n\n if (filterdata.sort !== \"\") {\n $(\"#coursesearchbox\").val(filterdata.search);\n }\n\n \/\/ Put animation over here.\n $(\".category-filters\").removeClass('d-none');\n }\n\n \/**\n * Destroy courses cards\n *\/\n function destroyCourseCards() {\n \/\/ Find active tab to append the course cards.\n var destroytab = (filterobj.tab) ? mycoursesregion : coursesregion;\n \/\/ Empty the courses region.\n $(destroytab).empty();\n\n \/\/ Destroy the pagination also.\n if (filterobj.pagination) {\n var destroypagination = (filterobj.tab) ? mycoursespagination : coursespagination;\n $(destroypagination).empty();\n }\n\n }\n\n \/**\n * Main category filters class.\n * @return {Object} Filter object\n *\/\n function categoryFilters() {\n\n var _pageobj = {courses: 0, mycourses: 0};\n var _obj = {\n \/\/ Category id.\n category: \"all\",\n \/\/ Sorting.\n sort: null,\n \/\/ Searching string.\n search: \"\",\n \/\/ If true, means mycourses tab is active.\n tab: false,\n \/\/ This object consist of page number that is currently active, has mycourses and all courses tab page number.\n page: _pageobj,\n \/\/ If True, regenerate the pagination on any action performed.\n pagination: true,\n \/\/ Initially it is null to detect initial change in view, String grid - view in grid format, String list - list format.\n view: null,\n \/\/ This filterModified true will tell that we need to fetch the courses otherwise show old fetched data.\n isFilterModified: true\n };\n\n _obj.initAttributes = function() {\n _obj.category = 'all';\n _obj.sort = null;\n _obj.search = '';\n _obj.tab = false;\n _obj.page = _pageobj;\n _obj.pagination = true;\n _obj.view = null;\n _obj.isFilterModified = true;\n };\n\n _obj.initPagination = function() {\n _obj.page = {courses: 0, mycourses: 0};\n };\n return _obj;\n }\n\n \/**\n * Ajax to fetch the course and also append those courses to the page.\n * If pagination is enabled it will also generate new pagination.\n *\/\n function getCourses() {\n $('.courses-tabs .courses-loader-wrap').show();\n \/\/ Find active tab to append the course cards.\n var appendtab = (filterobj.tab) ? mycoursesregion : coursesregion;\n var appendpagination = (filterobj.tab) ? mycoursespagination : coursespagination;\n var serviceName = 'theme_remui_get_courses';\n var getcourses = Ajax.call([{\n methodname: serviceName,\n args: {\n data: JSON.stringify(filterobj)\n }\n }]);\n getcourses[0].done(function(response) {\n response = JSON.parse(response);\n $(pageheaderactions).empty();\n if (response.hasmanagebutton == true) {\n $(pageheaderactions).append(response.managebuttons);\n }\n\n \/\/ Show category management dropdown button when user has 'moodle\/category:manage' capability.\n if (response.dropdown != undefined) {\n $('#page-header .page-header-actionss').append(response.dropdown);\n } else {\n $('#page-header .page-header-actionss [data-enhance=\"moodle-core-actionmenu\"]').remove();\n }\n\n \/\/ Get the view.\n var viewobj = (filterobj.view === null) ? response.view : filterobj.view;\n\n \/\/ Select the template to render according to view.\n var rendertemplate = (viewobj == 'grid' || response.latest_card) ? gridtemplate : listtemplate;\n\n \/\/ Always render grid teplate on mobile screen and when latest cards setting is on.\n if (window.screen.width <= 480 || response.latest_card) {\n rendertemplate = gridtemplate;\n viewobj = 'grid';\n }\n\n \/\/ Update the view.\n updateView(viewobj);\n\n updateCards(response.latest_card);\n\n var courses = response.courses;\n\n if (courses.length > 0) {\n for (var i = 0; i < courses.length; i++) {\n \/\/ This will call the function to load and render our template.\n templates.render(rendertemplate, courses[i])\n \/\/ It returns a promise that needs to be resoved.\n \/* eslint no-loop-func: 0 *\/\n .then(function(html, js) {\n \/\/ Here eventually I have my compiled template, and any javascript that it generated.\n \/\/ The templates object has append, prepend and replace functions.\n templates.appendNodeContents(appendtab, html, js);\n\n \/\/ Show options button on course card.\n \/\/ check if not mycourse tab.\n \/\/ This is very bad code, couldn't do it another way.\n \/\/ it get called each time a single card is added to dom, try to improve it.\n if (!filterobj.tab && !response.latest_card) {\n \/* eslint promise\/always-return: 0 *\/\n $('.showoptions').each(function() {\n $(this).toolbar({\n content: $(this).data('toolbar'),\n style: 'primary'\n });\n });\n }\n }).fail(Notification.exception);\n }\n\n } else {\n var htmldata = '
';\n htmldata += '