{"version":3,"sources":["https:\/\/campusvirtual.iemp.gov.co\/theme\/remui\/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","generateCourseCards","isFilterModified","show","appendtab","tab","appendpagination","call","methodname","args","data","JSON","stringify","done","response","parse","empty","hasmanagebutton","append","managebuttons","undefined","dropdown","remove","viewobj","view","rendertemplate","latest_card","window","screen","width","addClass","removeClass","courses","length","i","render","then","html","js","appendNodeContents","each","this","content","style","fail","exception","htmldata","pagination","hide","getCourses","updatePage","destroytab","destroypagination","destroyCourseCards","document","ready","get_strings","key","component","stringres","_pageobj","_obj","category","sort","search","page","mycourses","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":"AAAA,aAEAA,OAAO,CAAC,SAAU,+BAAgC,iBAAkB,6BAA8B,YAAa,WAAY,qBAAsB,SAAUC,EAAGC,EAAUC,EAAWC,EAASC,EAAMC,EAAKC,GAErM,IAAIC,EACAC,EAEAC,EAAaT,EAAE,kCACfU,EAAeV,EAAE,kBACjBW,EAAiBX,EAAE,sCAEnBY,EAAaZ,EAAE,eACfa,EAAeb,EAAE,iBAEjBc,EAAgBd,EAAE,8BAClBe,EAAkBf,EAAE,gCAEpBgB,EAAoBhB,EAAE,sBACtBiB,EAAsBjB,EAAE,wBAExBkB,EAAYlB,EAAE,cAEdmB,EAAe,+BACfC,EAAe,+BACfC,EAAoB,wBA6ExB,SAASC,IAEFf,EAAUgB,kBA+EjB,WACEvB,EAAE,sCAAsCwB,OAExC,IAAIC,EAAYlB,EAAUmB,IAAMX,EAAkBD,EAC9Ca,EAAmBpB,EAAUmB,IAAMT,EAAsBD,EAE5CZ,EAAKwB,KAAK,CAAC,CAC1BC,WAFgB,0BAGhBC,KAAM,CACJC,KAAMC,KAAKC,UAAU1B,OAGd,GAAG2B,KAAK,SAAUC,GAC3BA,EAAWH,KAAKI,MAAMD,GACtBnC,EAAEqB,GAAmBgB,QAEW,GAA5BF,EAASG,iBACXtC,EAAEqB,GAAmBkB,OAAOJ,EAASK,eAIdC,MAArBN,EAASO,SACX1C,EAAE,sCAAsCuC,OAAOJ,EAASO,UAExD1C,EAAE,8EAA8E2C,SAIlF,IAAIC,EAA6B,OAAnBrC,EAAUsC,KAAgBV,EAASU,KAAOtC,EAAUsC,KAE9DC,EAA4B,QAAXF,GAAqBT,EAASY,YAAc5B,EAAeC,GAE5E4B,OAAOC,OAAOC,OAAS,KAAOf,EAASY,eACzCD,EAAiB3B,EACjByB,EAAU,QA6GF,QAzGCA,GA0GXrC,EAAUsC,KAAO,OACjB7C,EAAE,gBAAgBmD,SAAS,aAAaC,YAAY,aACpDpD,EAAE,aAAamD,SAAS,sBACxBnD,EAAE,aAAaoD,YAAY,wBAE3B7C,EAAUsC,KAAO,OACjB7C,EAAE,gBAAgBmD,SAAS,aAAaC,YAAY,aACpDpD,EAAE,aAAaoD,YAAY,sBAC3BpD,EAAE,aAAamD,SAAS,uBAjHZhB,EAASY,aA4HrB\/C,EAAE,gBAAgBmD,SAAS,gBAC3BnD,EAAE,gBAAgBmD,SAAS,YAE3BnD,EAAE,gBAAgBoD,YAAY,gBAC9BpD,EAAE,gBAAgBoD,YAAY,WA\/H9B,IAAIC,EAAUlB,EAASkB,QAEvB,GAAIA,EAAQC,OAAS,EACnB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAQC,OAAQC,IAElCrD,EAAUsD,OAAOV,EAAgBO,EAAQE,IAGxCE,KAAK,SAAUC,EAAMC,GAGpBzD,EAAU0D,mBAAmBnC,EAAWiC,EAAMC,GAKzCpD,EAAUmB,KAAQS,EAASY,aAE9B\/C,EAAE,gBAAgB6D,KAAK,WACrB7D,EAAE8D,MAAM3D,QAAQ,CACd4D,QAAS\/D,EAAE8D,MAAM\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\/E,EAAU+E,KAAKjC,QAAUsC,EAAKL,KAGhCf","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 = $('#coursesearch2');\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 \/\/ 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 generateCourseCards(); \/\/ Course cards Generation.\n });\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 * Course cards initialization function.\n *\/\n function generateCourseCards() {\n \/\/ Check if Filters are modified and need to fetch the courses.\n if (!filterobj.isFilterModified) {\n return;\n }\n \/\/ Fetch the courses.\n getCourses();\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 += '