diff --git a/mod/forum/report/summary/amd/build/filters.min.js b/mod/forum/report/summary/amd/build/filters.min.js index 25eb61aa07a..14c9f30e183 100644 --- a/mod/forum/report/summary/amd/build/filters.min.js +++ b/mod/forum/report/summary/amd/build/filters.min.js @@ -1,2 +1,2 @@ -define ("forumreport_summary/filters",["exports","jquery","core/popper","core/custom_interaction_events","forumreport_summary/selectors","core/yui","core/ajax"],function(a,b,c,d,e,f,g){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;b=h(b);c=h(c);d=h(d);e=h(e);f=h(f);g=h(g);function h(a){return a&&a.__esModule?a:{default:a}}var i=function(a){var h=(0,b.default)(a);(0,b.default)(document).ready(function(){(0,b.default)(".loading-icon").hide();(0,b.default)("#summaryreport").removeClass("hidden")});var i=function(a){var c=(0,b.default)("#filtersform").attr("action");if(a){a.preventDefault();var d=a.target.search.substr(1);c+="&"+d}(0,b.default)("#filtersform").attr("action",c);(0,b.default)("#filtersform").submit()};(0,b.default)(".resettable").on("click","a",function(a){i(a)});(0,b.default)("thead").on("click","a",function(a){i(a)});(0,b.default)(".pagination").on("click","a",function(a){i(a)});var j=function(a){(0,b.default)(a).addClass("hidden");i(!1)},k=function(a){var b=document.querySelector(a),d=document.querySelector(e.default.filters.date.calendar);d.style.removeProperty("z-index");new c.default(b,d,{placement:"bottom"})},l=function(a){if(document.querySelector("[data-openfilter=\"true\"]")){return!1}a.target.setAttribute("data-openfilter","true");return!0};h.on(d.default.events.activate,e.default.filters.group.selectall,function(){var b=a.querySelectorAll(e.default.filters.group.checkbox+":not(:checked)");b.forEach(function(a){a.checked=!0})});h.on(d.default.events.activate,e.default.filters.group.clear,function(){var b=a.querySelectorAll(e.default.filters.group.checkbox+":checked");b.forEach(function(a){a.checked=!1})});h.on(d.default.events.activate,e.default.filters.group.trigger,function(b){if(!l(b)){return!1}var d=a.querySelector(e.default.filters.group.trigger),f=a.querySelector(e.default.filters.group.popover);new c.default(d,f,{placement:"bottom"});f.classList.remove("hidden");d.classList.add("btn-outline-primary");d.classList.remove("btn-primary");d.setAttribute("aria-expanded",!0);return!0});h.on(d.default.events.activate,e.default.filters.group.save,function(){j("#filter-groups-popover")});h.on(d.default.events.activate,e.default.filters.date.trigger,function(b){if(!l(b)){return!1}var d=a.querySelector(e.default.filters.date.trigger),f=a.querySelector(e.default.filters.date.popover);new c.default(d,f,{placement:"bottom"});f.classList.remove("hidden");f.querySelector("[name=\"filterdatefrompopover[enabled]\"]").focus();d.classList.add("btn-outline-primary");d.classList.remove("btn-primary");d.setAttribute("aria-expanded",!0);return!0});h.on(d.default.events.activate,e.default.filters.date.save,function(){var b=document.forms.filtersform,c=a.querySelector(e.default.filters.date.popover),d=c.querySelector("[name=\"filterdatefrompopover[enabled]\"]").checked?1:0,h=c.querySelector("[name=\"filterdatetopopover[enabled]\"]").checked?1:0;f.default.use("moodle-core-formchangechecker",function(){M.core_formchangechecker.reset_form_dirty_state()});if(!d&&!h){b.elements["datefrom[timestamp]"].value=0;b.elements["datefrom[enabled]"].value=d;b.elements["dateto[timestamp]"].value=0;b.elements["dateto[enabled]"].value=h;j("#filter-dates-popover")}else{var i={data:[]};if(d){i.data.push({key:"from",year:c.querySelector("[name=\"filterdatefrompopover[year]\"]").value,month:c.querySelector("[name=\"filterdatefrompopover[month]\"]").value,day:c.querySelector("[name=\"filterdatefrompopover[day]\"]").value,hour:0,minute:0})}if(h){i.data.push({key:"to",year:c.querySelector("[name=\"filterdatetopopover[year]\"]").value,month:c.querySelector("[name=\"filterdatetopopover[month]\"]").value,day:c.querySelector("[name=\"filterdatetopopover[day]\"]").value,hour:23,minute:59})}g.default.call([{methodname:"core_calendar_get_timestamps",args:i}])[0].done(function(a){var c=0,e=0;a.timestamps.forEach(function(a){if("from"===a.key){c=a.timestamp}else if("to"===a.key){e=a.timestamp}});if(0e){var f=document.getElementById("dates-filter-warning");f.classList.remove("hidden");f.classList.add("d-block")}else{b.elements["datefrom[timestamp]"].value=c;b.elements["datefrom[enabled]"].value=d;b.elements["dateto[timestamp]"].value=e;b.elements["dateto[enabled]"].value=h;j("#filter-dates-popover")}})}});h.on(d.default.events.activate,e.default.filters.date.calendariconfrom,function(){k(e.default.filters.date.calendariconfrom)});h.on(d.default.events.activate,e.default.filters.date.calendariconto,function(){k(e.default.filters.date.calendariconto)})};a.init=i}); +define ("forumreport_summary/filters",["exports","jquery","core/popper","core/custom_interaction_events","forumreport_summary/selectors","core/yui","core/ajax","core/key_codes"],function(a,b,c,d,e,f,g,h){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;b=i(b);c=i(c);d=i(d);e=i(e);f=i(f);g=i(g);h=i(h);function i(a){return a&&a.__esModule?a:{default:a}}var j=function(a){var i=(0,b.default)(a);(0,b.default)(document).ready(function(){(0,b.default)(".loading-icon").hide();(0,b.default)("#summaryreport").removeClass("hidden")});var j=function(a){var c=(0,b.default)("#filtersform").attr("action");if(a){a.preventDefault();var d=a.target.search.substr(1);c+="&"+d}(0,b.default)("#filtersform").attr("action",c);(0,b.default)("#filtersform").submit()};(0,b.default)(".resettable").on("click","a",function(a){j(a)});(0,b.default)("thead").on("click","a",function(a){j(a)});(0,b.default)(".pagination").on("click","a",function(a){j(a)});var k=function(a){f.default.use("moodle-core-formchangechecker",function(){M.core_formchangechecker.reset_form_dirty_state()});(0,b.default)(a).addClass("hidden");j(!1)},l=function(a){var b=document.querySelector(a),d=document.querySelector(e.default.filters.date.calendar);d.style.removeProperty("z-index");new c.default(b,d,{placement:"bottom"})},m=function(a,b){b.classList.add("hidden");b.setAttribute("data-openfilter","false");a.classList.add("btn-primary");a.classList.remove("btn-outline-primary");a.setAttribute("aria-expanded",!1)};i.on(d.default.events.activate,e.default.filters.group.selectall,function(){var b=a.querySelectorAll(e.default.filters.group.checkbox+":not(:checked)");b.forEach(function(a){a.checked=!0})});i.on(d.default.events.activate,e.default.filters.group.clear,function(){var b=a.querySelectorAll(e.default.filters.group.checkbox+":checked");b.forEach(function(a){a.checked=!1})});i.on(d.default.events.activate,e.default.filters.group.trigger,function(){var b=a.querySelector(e.default.filters.group.trigger),d=a.querySelector(e.default.filters.group.popover);new c.default(b,d,{placement:"bottom"});d.classList.remove("hidden");d.setAttribute("data-openfilter","true");b.classList.add("btn-outline-primary");b.classList.remove("btn-primary");b.setAttribute("aria-expanded",!0);var f=function(a){if(a.target.id!==b.id&&d!==a.target.closest("[data-openfilter=\"true\"]")){m(b,d);document.removeEventListener("click",f);document.removeEventListener("keyup",g)}};document.addEventListener("click",f);var g=function(a){if(a.keyCode===h.default.escape){m(b,d);document.removeEventListener("keyup",g);document.removeEventListener("click",f)}};document.addEventListener("keyup",g)});i.on(d.default.events.activate,e.default.filters.group.save,function(){var b=a.querySelectorAll(e.default.filters.group.checkbox);b.forEach(function(a){var b=document.forms.filtersform,c=a.getAttribute("data-saveid");b.querySelector("#".concat(c)).checked=a.checked});k("#filter-groups-popover")});i.on(d.default.events.activate,e.default.filters.date.trigger,function(){var b=a.querySelector(e.default.filters.date.trigger),d=a.querySelector(e.default.filters.date.popover);new c.default(b,d,{placement:"bottom"});d.classList.remove("hidden");d.setAttribute("data-openfilter","true");d.querySelector("[name=\"filterdatefrompopover[enabled]\"]").focus();b.classList.add("btn-outline-primary");b.classList.remove("btn-primary");b.setAttribute("aria-expanded",!0);var f=function(a){if(a.target.id!==b.id&&d!==a.target.closest("[data-openfilter=\"true\"]")){m(b,d);document.removeEventListener("click",f);document.removeEventListener("keyup",g)}};document.addEventListener("click",f);var g=function(a){if(a.keyCode===h.default.escape){m(b,d);document.removeEventListener("keyup",g);document.removeEventListener("click",f)}};document.addEventListener("keyup",g)});i.on(d.default.events.activate,e.default.filters.date.save,function(){var b=document.forms.filtersform,c=a.querySelector(e.default.filters.date.popover),d=c.querySelector("[name=\"filterdatefrompopover[enabled]\"]").checked?1:0,f=c.querySelector("[name=\"filterdatetopopover[enabled]\"]").checked?1:0;if(!d&&!f){b.elements["datefrom[timestamp]"].value=0;b.elements["datefrom[enabled]"].value=d;b.elements["dateto[timestamp]"].value=0;b.elements["dateto[enabled]"].value=f;k("#filter-dates-popover")}else{var h={data:[]};if(d){h.data.push({key:"from",year:c.querySelector("[name=\"filterdatefrompopover[year]\"]").value,month:c.querySelector("[name=\"filterdatefrompopover[month]\"]").value,day:c.querySelector("[name=\"filterdatefrompopover[day]\"]").value,hour:0,minute:0})}if(f){h.data.push({key:"to",year:c.querySelector("[name=\"filterdatetopopover[year]\"]").value,month:c.querySelector("[name=\"filterdatetopopover[month]\"]").value,day:c.querySelector("[name=\"filterdatetopopover[day]\"]").value,hour:23,minute:59})}g.default.call([{methodname:"core_calendar_get_timestamps",args:h}])[0].done(function(a){var c=0,e=0;a.timestamps.forEach(function(a){if("from"===a.key){c=a.timestamp}else if("to"===a.key){e=a.timestamp}});if(0e){var g=document.getElementById("dates-filter-warning");g.classList.remove("hidden");g.classList.add("d-block")}else{b.elements["datefrom[timestamp]"].value=c;b.elements["datefrom[enabled]"].value=d;b.elements["dateto[timestamp]"].value=e;b.elements["dateto[enabled]"].value=f;k("#filter-dates-popover")}})}});i.on(d.default.events.activate,e.default.filters.date.calendariconfrom,function(){l(e.default.filters.date.calendariconfrom)});i.on(d.default.events.activate,e.default.filters.date.calendariconto,function(){l(e.default.filters.date.calendariconto)})};a.init=j}); //# sourceMappingURL=filters.min.js.map diff --git a/mod/forum/report/summary/amd/build/filters.min.js.map b/mod/forum/report/summary/amd/build/filters.min.js.map index 54c31d6e244..68e2b676b55 100644 --- a/mod/forum/report/summary/amd/build/filters.min.js.map +++ b/mod/forum/report/summary/amd/build/filters.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/filters.js"],"names":["init","root","jqRoot","document","ready","hide","removeClass","generateWithFilters","event","newLink","attr","preventDefault","filterParams","target","search","substr","submit","on","submitWithFilter","containerelement","addClass","updateCalendarPosition","referenceid","referenceElement","querySelector","popperContent","Selectors","filters","date","calendar","style","removeProperty","Popper","placement","canOpenFilter","setAttribute","CustomEvents","events","activate","group","selectall","deselected","querySelectorAll","checkbox","forEach","checked","clear","selected","trigger","popover","classList","remove","add","save","focus","filtersForm","forms","filtersform","datesPopover","fromEnabled","toEnabled","Y","use","M","core_formchangechecker","reset_form_dirty_state","elements","value","args","data","push","Ajax","call","methodname","done","result","fromTimestamp","toTimestamp","key","timestamp","warningdiv","getElementById","calendariconfrom","calendariconto"],"mappings":"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","sourcesContent":["// 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 .\n\n/**\n * Module responsible for handling forum summary report filters.\n *\n * @module forumreport_summary/filters\n * @package forumreport_summary\n * @copyright 2019 Michael Hawkins \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Popper from 'core/popper';\nimport CustomEvents from 'core/custom_interaction_events';\nimport Selectors from 'forumreport_summary/selectors';\nimport Y from 'core/yui';\nimport Ajax from 'core/ajax';\n\nexport const init = (root) => {\n let jqRoot = $(root);\n\n // Hide loading spinner and show report once page is ready.\n // This ensures filters can be applied when sorting by columns.\n $(document).ready(function() {\n $('.loading-icon').hide();\n $('#summaryreport').removeClass('hidden');\n });\n\n // Generic filter handlers.\n\n // Called to override click event to trigger a proper generate request with filtering.\n const generateWithFilters = (event) => {\n let newLink = $('#filtersform').attr('action');\n\n if (event) {\n event.preventDefault();\n\n let filterParams = event.target.search.substr(1);\n newLink += '&' + filterParams;\n }\n\n $('#filtersform').attr('action', newLink);\n $('#filtersform').submit();\n };\n\n // Override 'reset table preferences' so it generates with filters.\n $('.resettable').on(\"click\", \"a\", function(event) {\n generateWithFilters(event);\n });\n\n // Override table heading sort links so they generate with filters.\n $('thead').on(\"click\", \"a\", function(event) {\n generateWithFilters(event);\n });\n\n // Override pagination page links so they generate with filters.\n $('.pagination').on(\"click\", \"a\", function(event) {\n generateWithFilters(event);\n });\n\n // Submit report via filter\n const submitWithFilter = (containerelement) => {\n // Close the container (eg popover).\n $(containerelement).addClass('hidden');\n\n // Submit the filter values and re-generate report.\n generateWithFilters(false);\n };\n\n // Use popper to override date mform calendar position.\n const updateCalendarPosition = (referenceid) => {\n let referenceElement = document.querySelector(referenceid),\n popperContent = document.querySelector(Selectors.filters.date.calendar);\n\n popperContent.style.removeProperty(\"z-index\");\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n };\n\n // Call when opening filter to ensure only one can be activated.\n const canOpenFilter = (event) => {\n if (document.querySelector('[data-openfilter=\"true\"]')) {\n return false;\n }\n\n event.target.setAttribute('data-openfilter', \"true\");\n return true;\n };\n\n // Groups filter specific handlers.\n\n // Event handler for clicking select all groups.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.selectall, function() {\n let deselected = root.querySelectorAll(Selectors.filters.group.checkbox + ':not(:checked)');\n deselected.forEach(function(checkbox) {\n checkbox.checked = true;\n });\n });\n\n // Event handler for clearing filter by clicking option.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.clear, function() {\n // Clear checkboxes.\n let selected = root.querySelectorAll(Selectors.filters.group.checkbox + ':checked');\n selected.forEach(function(checkbox) {\n checkbox.checked = false;\n });\n });\n\n // Event handler for showing groups filter popover.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.trigger, function(event) {\n if (!canOpenFilter(event)) {\n return false;\n }\n\n // Create popover.\n let referenceElement = root.querySelector(Selectors.filters.group.trigger),\n popperContent = root.querySelector(Selectors.filters.group.popover);\n\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n\n // Show popover.\n popperContent.classList.remove('hidden');\n\n // Change to outlined button.\n referenceElement.classList.add('btn-outline-primary');\n referenceElement.classList.remove('btn-primary');\n\n // Let screen readers know that it's now expanded.\n referenceElement.setAttribute('aria-expanded', true);\n return true;\n });\n\n // Event handler to click save groups filter.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.save, function() {\n submitWithFilter('#filter-groups-popover');\n });\n\n // Dates filter specific handlers.\n\n // Event handler for showing dates filter popover.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.trigger, function(event) {\n if (!canOpenFilter(event)) {\n return false;\n }\n\n // Create popover.\n let referenceElement = root.querySelector(Selectors.filters.date.trigger),\n popperContent = root.querySelector(Selectors.filters.date.popover);\n\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n\n // Show popover and move focus.\n popperContent.classList.remove('hidden');\n popperContent.querySelector('[name=\"filterdatefrompopover[enabled]\"]').focus();\n\n // Change to outlined button.\n referenceElement.classList.add('btn-outline-primary');\n referenceElement.classList.remove('btn-primary');\n\n // Let screen readers know that it's now expanded.\n referenceElement.setAttribute('aria-expanded', true);\n return true;\n });\n\n // Event handler to save dates filter.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.save, function() {\n // Populate the hidden form inputs to submit the data.\n let filtersForm = document.forms.filtersform;\n const datesPopover = root.querySelector(Selectors.filters.date.popover);\n const fromEnabled = datesPopover.querySelector('[name=\"filterdatefrompopover[enabled]\"]').checked ? 1 : 0;\n const toEnabled = datesPopover.querySelector('[name=\"filterdatetopopover[enabled]\"]').checked ? 1 : 0;\n\n // Disable the mform checker to prevent unsubmitted form warning to the user when closing the popover.\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n\n if (!fromEnabled && !toEnabled) {\n // Update the elements in the filter form.\n filtersForm.elements['datefrom[timestamp]'].value = 0;\n filtersForm.elements['datefrom[enabled]'].value = fromEnabled;\n filtersForm.elements['dateto[timestamp]'].value = 0;\n filtersForm.elements['dateto[enabled]'].value = toEnabled;\n\n // Submit the filter values and re-generate report.\n submitWithFilter('#filter-dates-popover');\n } else {\n let args = {data: []};\n\n if (fromEnabled) {\n args.data.push({\n 'key': 'from',\n 'year': datesPopover.querySelector('[name=\"filterdatefrompopover[year]\"]').value,\n 'month': datesPopover.querySelector('[name=\"filterdatefrompopover[month]\"]').value,\n 'day': datesPopover.querySelector('[name=\"filterdatefrompopover[day]\"]').value,\n 'hour': 0,\n 'minute': 0\n });\n }\n\n if (toEnabled) {\n args.data.push({\n 'key': 'to',\n 'year': datesPopover.querySelector('[name=\"filterdatetopopover[year]\"]').value,\n 'month': datesPopover.querySelector('[name=\"filterdatetopopover[month]\"]').value,\n 'day': datesPopover.querySelector('[name=\"filterdatetopopover[day]\"]').value,\n 'hour': 23,\n 'minute': 59\n });\n }\n\n const request = {\n methodname: 'core_calendar_get_timestamps',\n args: args\n };\n\n Ajax.call([request])[0].done(function(result) {\n let fromTimestamp = 0,\n toTimestamp = 0;\n\n result['timestamps'].forEach(function(data){\n if (data.key === 'from') {\n fromTimestamp = data.timestamp;\n } else if (data.key === 'to') {\n toTimestamp = data.timestamp;\n }\n });\n\n // Display an error if the from date is later than the do date.\n if (toTimestamp > 0 && fromTimestamp > toTimestamp) {\n const warningdiv = document.getElementById('dates-filter-warning');\n warningdiv.classList.remove('hidden');\n warningdiv.classList.add('d-block');\n } else {\n filtersForm.elements['datefrom[timestamp]'].value = fromTimestamp;\n filtersForm.elements['datefrom[enabled]'].value = fromEnabled;\n filtersForm.elements['dateto[timestamp]'].value = toTimestamp;\n filtersForm.elements['dateto[enabled]'].value = toEnabled;\n\n // Submit the filter values and re-generate report.\n submitWithFilter('#filter-dates-popover');\n }\n });\n }\n });\n\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.calendariconfrom, function() {\n updateCalendarPosition(Selectors.filters.date.calendariconfrom);\n });\n\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.calendariconto, function() {\n updateCalendarPosition(Selectors.filters.date.calendariconto);\n });\n};\n"],"file":"filters.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/filters.js"],"names":["init","root","jqRoot","document","ready","hide","removeClass","generateWithFilters","event","newLink","attr","preventDefault","filterParams","target","search","substr","submit","on","submitWithFilter","containerelement","Y","use","M","core_formchangechecker","reset_form_dirty_state","addClass","updateCalendarPosition","referenceid","referenceElement","querySelector","popperContent","Selectors","filters","date","calendar","style","removeProperty","Popper","placement","closeOpenFilters","openFilterButton","openFilter","classList","add","setAttribute","remove","CustomEvents","events","activate","group","selectall","deselected","querySelectorAll","checkbox","forEach","checked","clear","selected","trigger","popover","closeListener","e","id","closest","removeEventListener","escCloseListener","addEventListener","keyCode","KeyCodes","escape","save","popcheckboxes","popcheckbox","filtersform","forms","saveid","getAttribute","focus","filtersForm","datesPopover","fromEnabled","toEnabled","elements","value","args","data","push","Ajax","call","methodname","done","result","fromTimestamp","toTimestamp","key","timestamp","warningdiv","getElementById","calendariconfrom","calendariconto"],"mappings":"wRAwBA,OACA,OACA,OACA,OACA,OACA,OACA,O,mDAEO,GAAMA,CAAAA,CAAI,CAAG,SAACC,CAAD,CAAU,CAC1B,GAAIC,CAAAA,CAAM,CAAG,cAAED,CAAF,CAAb,CAIA,cAAEE,QAAF,EAAYC,KAAZ,CAAkB,UAAW,CACzB,cAAE,eAAF,EAAmBC,IAAnB,GACA,cAAE,gBAAF,EAAoBC,WAApB,CAAgC,QAAhC,CACH,CAHD,EAQA,GAAMC,CAAAA,CAAmB,CAAG,SAACC,CAAD,CAAW,CACnC,GAAIC,CAAAA,CAAO,CAAG,cAAE,cAAF,EAAkBC,IAAlB,CAAuB,QAAvB,CAAd,CAEA,GAAIF,CAAJ,CAAW,CACPA,CAAK,CAACG,cAAN,GAEA,GAAIC,CAAAA,CAAY,CAAGJ,CAAK,CAACK,MAAN,CAAaC,MAAb,CAAoBC,MAApB,CAA2B,CAA3B,CAAnB,CACAN,CAAO,EAAI,IAAMG,CACpB,CAED,cAAE,cAAF,EAAkBF,IAAlB,CAAuB,QAAvB,CAAiCD,CAAjC,EACA,cAAE,cAAF,EAAkBO,MAAlB,EACH,CAZD,CAeA,cAAE,aAAF,EAAiBC,EAAjB,CAAoB,OAApB,CAA6B,GAA7B,CAAkC,SAAST,CAAT,CAAgB,CAC9CD,CAAmB,CAACC,CAAD,CACtB,CAFD,EAKA,cAAE,OAAF,EAAWS,EAAX,CAAc,OAAd,CAAuB,GAAvB,CAA4B,SAAST,CAAT,CAAgB,CACxCD,CAAmB,CAACC,CAAD,CACtB,CAFD,EAKA,cAAE,aAAF,EAAiBS,EAAjB,CAAoB,OAApB,CAA6B,GAA7B,CAAkC,SAAST,CAAT,CAAgB,CAC9CD,CAAmB,CAACC,CAAD,CACtB,CAFD,EAtC0B,GA2CpBU,CAAAA,CAAgB,CAAG,SAACC,CAAD,CAAsB,CAE3CC,UAAEC,GAAF,CAAM,+BAAN,CAAuC,UAAW,CAC9CC,CAAC,CAACC,sBAAF,CAAyBC,sBAAzB,EACH,CAFD,EAKA,cAAEL,CAAF,EAAoBM,QAApB,CAA6B,QAA7B,EAGAlB,CAAmB,IACtB,CAtDyB,CAyDpBmB,CAAsB,CAAG,SAACC,CAAD,CAAiB,CAC5C,GAAIC,CAAAA,CAAgB,CAAGzB,QAAQ,CAAC0B,aAAT,CAAuBF,CAAvB,CAAvB,CACIG,CAAa,CAAG3B,QAAQ,CAAC0B,aAAT,CAAuBE,UAAUC,OAAV,CAAkBC,IAAlB,CAAuBC,QAA9C,CADpB,CAGAJ,CAAa,CAACK,KAAd,CAAoBC,cAApB,CAAmC,SAAnC,EACA,GAAIC,UAAJ,CAAWT,CAAX,CAA6BE,CAA7B,CAA4C,CAACQ,SAAS,CAAE,QAAZ,CAA5C,CACH,CA/DyB,CAkEtBC,CAAgB,CAAG,SAACC,CAAD,CAAmBC,CAAnB,CAAkC,CACrDA,CAAU,CAACC,SAAX,CAAqBC,GAArB,CAAyB,QAAzB,EACAF,CAAU,CAACG,YAAX,CAAwB,iBAAxB,CAA2C,OAA3C,EAEAJ,CAAgB,CAACE,SAAjB,CAA2BC,GAA3B,CAA+B,aAA/B,EACAH,CAAgB,CAACE,SAAjB,CAA2BG,MAA3B,CAAkC,qBAAlC,EACAL,CAAgB,CAACI,YAAjB,CAA8B,eAA9B,IACH,CAzEyB,CA8E1B1C,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBC,SAAhE,CAA2E,UAAW,CAClF,GAAIC,CAAAA,CAAU,CAAGlD,CAAI,CAACmD,gBAAL,CAAsBrB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBI,QAAxB,CAAmC,gBAAzD,CAAjB,CACAF,CAAU,CAACG,OAAX,CAAmB,SAASD,CAAT,CAAmB,CAClCA,CAAQ,CAACE,OAAT,GACH,CAFD,CAGH,CALD,EAQArD,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBO,KAAhE,CAAuE,UAAW,CAE9E,GAAIC,CAAAA,CAAQ,CAAGxD,CAAI,CAACmD,gBAAL,CAAsBrB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBI,QAAxB,CAAmC,UAAzD,CAAf,CACAI,CAAQ,CAACH,OAAT,CAAiB,SAASD,CAAT,CAAmB,CAChCA,CAAQ,CAACE,OAAT,GACH,CAFD,CAGH,CAND,EASArD,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBS,OAAhE,CAAyE,UAAW,CAEhF,GAAI9B,CAAAA,CAAgB,CAAG3B,CAAI,CAAC4B,aAAL,CAAmBE,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBS,OAA3C,CAAvB,CACI5B,CAAa,CAAG7B,CAAI,CAAC4B,aAAL,CAAmBE,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBU,OAA3C,CADpB,CAGA,GAAItB,UAAJ,CAAWT,CAAX,CAA6BE,CAA7B,CAA4C,CAACQ,SAAS,CAAE,QAAZ,CAA5C,EAGAR,CAAa,CAACY,SAAd,CAAwBG,MAAxB,CAA+B,QAA/B,EACAf,CAAa,CAACc,YAAd,CAA2B,iBAA3B,CAA8C,MAA9C,EAGAhB,CAAgB,CAACc,SAAjB,CAA2BC,GAA3B,CAA+B,qBAA/B,EACAf,CAAgB,CAACc,SAAjB,CAA2BG,MAA3B,CAAkC,aAAlC,EAGAjB,CAAgB,CAACgB,YAAjB,CAA8B,eAA9B,KAGA,GAAMgB,CAAAA,CAAa,CAAG,SAAAC,CAAC,CAAI,CACvB,GAAIA,CAAC,CAAChD,MAAF,CAASiD,EAAT,GAAgBlC,CAAgB,CAACkC,EAAjC,EAAuChC,CAAa,GAAK+B,CAAC,CAAChD,MAAF,CAASkD,OAAT,CAAiB,4BAAjB,CAA7D,CAA2G,CACvGxB,CAAgB,CAACX,CAAD,CAAmBE,CAAnB,CAAhB,CACA3B,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCJ,CAAtC,EACAzD,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCC,CAAtC,CACH,CACJ,CAND,CAQA9D,QAAQ,CAAC+D,gBAAT,CAA0B,OAA1B,CAAmCN,CAAnC,EAEA,GAAMK,CAAAA,CAAgB,CAAG,SAAAJ,CAAC,CAAI,CAC1B,GAAIA,CAAC,CAACM,OAAF,GAAcC,UAASC,MAA3B,CAAmC,CAC/B9B,CAAgB,CAACX,CAAD,CAAmBE,CAAnB,CAAhB,CACA3B,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCC,CAAtC,EACA9D,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCJ,CAAtC,CACH,CACJ,CAND,CAQAzD,QAAQ,CAAC+D,gBAAT,CAA0B,OAA1B,CAAmCD,CAAnC,CACH,CAtCD,EAyCA/D,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBqB,IAAhE,CAAsE,UAAW,CAE7E,GAAIC,CAAAA,CAAa,CAAGtE,CAAI,CAACmD,gBAAL,CAAsBrB,UAAUC,OAAV,CAAkBiB,KAAlB,CAAwBI,QAA9C,CAApB,CAEAkB,CAAa,CAACjB,OAAd,CAAsB,SAASkB,CAAT,CAAsB,CACxC,GAAIC,CAAAA,CAAW,CAAGtE,QAAQ,CAACuE,KAAT,CAAeD,WAAjC,CACIE,CAAM,CAAGH,CAAW,CAACI,YAAZ,CAAyB,aAAzB,CADb,CAGAH,CAAW,CAAC5C,aAAZ,YAA8B8C,CAA9B,GAAwCpB,OAAxC,CAAkDiB,CAAW,CAACjB,OACjE,CALD,EAOArC,CAAgB,CAAC,wBAAD,CACnB,CAZD,EAiBAhB,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBC,IAAlB,CAAuByB,OAA/D,CAAwE,UAAW,CAG/E,GAAI9B,CAAAA,CAAgB,CAAG3B,CAAI,CAAC4B,aAAL,CAAmBE,UAAUC,OAAV,CAAkBC,IAAlB,CAAuByB,OAA1C,CAAvB,CACI5B,CAAa,CAAG7B,CAAI,CAAC4B,aAAL,CAAmBE,UAAUC,OAAV,CAAkBC,IAAlB,CAAuB0B,OAA1C,CADpB,CAGA,GAAItB,UAAJ,CAAWT,CAAX,CAA6BE,CAA7B,CAA4C,CAACQ,SAAS,CAAE,QAAZ,CAA5C,EAGAR,CAAa,CAACY,SAAd,CAAwBG,MAAxB,CAA+B,QAA/B,EACAf,CAAa,CAACc,YAAd,CAA2B,iBAA3B,CAA8C,MAA9C,EACAd,CAAa,CAACD,aAAd,CAA4B,2CAA5B,EAAuEgD,KAAvE,GAGAjD,CAAgB,CAACc,SAAjB,CAA2BC,GAA3B,CAA+B,qBAA/B,EACAf,CAAgB,CAACc,SAAjB,CAA2BG,MAA3B,CAAkC,aAAlC,EAGAjB,CAAgB,CAACgB,YAAjB,CAA8B,eAA9B,KAGA,GAAMgB,CAAAA,CAAa,CAAG,SAAAC,CAAC,CAAI,CACvB,GAAIA,CAAC,CAAChD,MAAF,CAASiD,EAAT,GAAgBlC,CAAgB,CAACkC,EAAjC,EAAuChC,CAAa,GAAK+B,CAAC,CAAChD,MAAF,CAASkD,OAAT,CAAiB,4BAAjB,CAA7D,CAA2G,CACvGxB,CAAgB,CAACX,CAAD,CAAmBE,CAAnB,CAAhB,CACA3B,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCJ,CAAtC,EACAzD,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCC,CAAtC,CACH,CACJ,CAND,CAQA9D,QAAQ,CAAC+D,gBAAT,CAA0B,OAA1B,CAAmCN,CAAnC,EAEA,GAAMK,CAAAA,CAAgB,CAAG,SAAAJ,CAAC,CAAI,CAC1B,GAAIA,CAAC,CAACM,OAAF,GAAcC,UAASC,MAA3B,CAAmC,CAC/B9B,CAAgB,CAACX,CAAD,CAAmBE,CAAnB,CAAhB,CACA3B,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCC,CAAtC,EACA9D,QAAQ,CAAC6D,mBAAT,CAA6B,OAA7B,CAAsCJ,CAAtC,CACH,CACJ,CAND,CAQAzD,QAAQ,CAAC+D,gBAAT,CAA0B,OAA1B,CAAmCD,CAAnC,CACH,CAxCD,EA2CA/D,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBC,IAAlB,CAAuBqC,IAA/D,CAAqE,UAAW,IAExEQ,CAAAA,CAAW,CAAG3E,QAAQ,CAACuE,KAAT,CAAeD,WAF2C,CAGtEM,CAAY,CAAG9E,CAAI,CAAC4B,aAAL,CAAmBE,UAAUC,OAAV,CAAkBC,IAAlB,CAAuB0B,OAA1C,CAHuD,CAItEqB,CAAW,CAAGD,CAAY,CAAClD,aAAb,CAA2B,2CAA3B,EAAsE0B,OAAtE,CAAgF,CAAhF,CAAoF,CAJ5B,CAKtE0B,CAAS,CAAGF,CAAY,CAAClD,aAAb,CAA2B,yCAA3B,EAAoE0B,OAApE,CAA8E,CAA9E,CAAkF,CALxB,CAO5E,GAAI,CAACyB,CAAD,EAAgB,CAACC,CAArB,CAAgC,CAE5BH,CAAW,CAACI,QAAZ,CAAqB,qBAArB,EAA4CC,KAA5C,CAAoD,CAApD,CACAL,CAAW,CAACI,QAAZ,CAAqB,mBAArB,EAA0CC,KAA1C,CAAkDH,CAAlD,CACAF,CAAW,CAACI,QAAZ,CAAqB,mBAArB,EAA0CC,KAA1C,CAAkD,CAAlD,CACAL,CAAW,CAACI,QAAZ,CAAqB,iBAArB,EAAwCC,KAAxC,CAAgDF,CAAhD,CAGA/D,CAAgB,CAAC,uBAAD,CACnB,CATD,IASO,CACH,GAAIkE,CAAAA,CAAI,CAAG,CAACC,IAAI,CAAE,EAAP,CAAX,CAEA,GAAIL,CAAJ,CAAiB,CACbI,CAAI,CAACC,IAAL,CAAUC,IAAV,CAAe,CACX,IAAO,MADI,CAEX,KAAQP,CAAY,CAAClD,aAAb,CAA2B,wCAA3B,EAAmEsD,KAFhE,CAGX,MAASJ,CAAY,CAAClD,aAAb,CAA2B,yCAA3B,EAAoEsD,KAHlE,CAIX,IAAOJ,CAAY,CAAClD,aAAb,CAA2B,uCAA3B,EAAkEsD,KAJ9D,CAKX,KAAQ,CALG,CAMX,OAAU,CANC,CAAf,CAQH,CAED,GAAIF,CAAJ,CAAe,CACXG,CAAI,CAACC,IAAL,CAAUC,IAAV,CAAe,CACX,IAAO,IADI,CAEX,KAAQP,CAAY,CAAClD,aAAb,CAA2B,sCAA3B,EAAiEsD,KAF9D,CAGX,MAASJ,CAAY,CAAClD,aAAb,CAA2B,uCAA3B,EAAkEsD,KAHhE,CAIX,IAAOJ,CAAY,CAAClD,aAAb,CAA2B,qCAA3B,EAAgEsD,KAJ5D,CAKX,KAAQ,EALG,CAMX,OAAU,EANC,CAAf,CAQH,CAODI,UAAKC,IAAL,CAAU,CALM,CACZC,UAAU,CAAE,8BADA,CAEZL,IAAI,CAAEA,CAFM,CAKN,CAAV,EAAqB,CAArB,EAAwBM,IAAxB,CAA6B,SAASC,CAAT,CAAiB,CAC1C,GAAIC,CAAAA,CAAa,CAAG,CAApB,CACIC,CAAW,CAAG,CADlB,CAGAF,CAAM,WAAN,CAAqBrC,OAArB,CAA6B,SAAS+B,CAAT,CAAc,CACvC,GAAiB,MAAb,GAAAA,CAAI,CAACS,GAAT,CAAyB,CACrBF,CAAa,CAAGP,CAAI,CAACU,SACxB,CAFD,IAEO,IAAiB,IAAb,GAAAV,CAAI,CAACS,GAAT,CAAuB,CAC1BD,CAAW,CAAGR,CAAI,CAACU,SACtB,CACJ,CAND,EASA,GAAkB,CAAd,CAAAF,CAAW,EAAQD,CAAa,CAAGC,CAAvC,CAAoD,CAChD,GAAMG,CAAAA,CAAU,CAAG7F,QAAQ,CAAC8F,cAAT,CAAwB,sBAAxB,CAAnB,CACAD,CAAU,CAACtD,SAAX,CAAqBG,MAArB,CAA4B,QAA5B,EACAmD,CAAU,CAACtD,SAAX,CAAqBC,GAArB,CAAyB,SAAzB,CACH,CAJD,IAIO,CACHmC,CAAW,CAACI,QAAZ,CAAqB,qBAArB,EAA4CC,KAA5C,CAAoDS,CAApD,CACAd,CAAW,CAACI,QAAZ,CAAqB,mBAArB,EAA0CC,KAA1C,CAAkDH,CAAlD,CACAF,CAAW,CAACI,QAAZ,CAAqB,mBAArB,EAA0CC,KAA1C,CAAkDU,CAAlD,CACAf,CAAW,CAACI,QAAZ,CAAqB,iBAArB,EAAwCC,KAAxC,CAAgDF,CAAhD,CAGA/D,CAAgB,CAAC,uBAAD,CACnB,CACJ,CA1BD,CA2BH,CACJ,CA1ED,EA4EAhB,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBC,IAAlB,CAAuBiE,gBAA/D,CAAiF,UAAW,CACxFxE,CAAsB,CAACK,UAAUC,OAAV,CAAkBC,IAAlB,CAAuBiE,gBAAxB,CACzB,CAFD,EAIAhG,CAAM,CAACe,EAAP,CAAU6B,UAAaC,MAAb,CAAoBC,QAA9B,CAAwCjB,UAAUC,OAAV,CAAkBC,IAAlB,CAAuBkE,cAA/D,CAA+E,UAAW,CACtFzE,CAAsB,CAACK,UAAUC,OAAV,CAAkBC,IAAlB,CAAuBkE,cAAxB,CACzB,CAFD,CAGH,CAvRM,C","sourcesContent":["// 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 .\n\n/**\n * Module responsible for handling forum summary report filters.\n *\n * @module forumreport_summary/filters\n * @package forumreport_summary\n * @copyright 2019 Michael Hawkins \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Popper from 'core/popper';\nimport CustomEvents from 'core/custom_interaction_events';\nimport Selectors from 'forumreport_summary/selectors';\nimport Y from 'core/yui';\nimport Ajax from 'core/ajax';\nimport KeyCodes from 'core/key_codes';\n\nexport const init = (root) => {\n let jqRoot = $(root);\n\n // Hide loading spinner and show report once page is ready.\n // This ensures filters can be applied when sorting by columns.\n $(document).ready(function() {\n $('.loading-icon').hide();\n $('#summaryreport').removeClass('hidden');\n });\n\n // Generic filter handlers.\n\n // Called to override click event to trigger a proper generate request with filtering.\n const generateWithFilters = (event) => {\n let newLink = $('#filtersform').attr('action');\n\n if (event) {\n event.preventDefault();\n\n let filterParams = event.target.search.substr(1);\n newLink += '&' + filterParams;\n }\n\n $('#filtersform').attr('action', newLink);\n $('#filtersform').submit();\n };\n\n // Override 'reset table preferences' so it generates with filters.\n $('.resettable').on(\"click\", \"a\", function(event) {\n generateWithFilters(event);\n });\n\n // Override table heading sort links so they generate with filters.\n $('thead').on(\"click\", \"a\", function(event) {\n generateWithFilters(event);\n });\n\n // Override pagination page links so they generate with filters.\n $('.pagination').on(\"click\", \"a\", function(event) {\n generateWithFilters(event);\n });\n\n // Submit report via filter\n const submitWithFilter = (containerelement) => {\n // Disable the dates filter mform checker to prevent any changes triggering a warning to the user.\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n\n // Close the container (eg popover).\n $(containerelement).addClass('hidden');\n\n // Submit the filter values and re-generate report.\n generateWithFilters(false);\n };\n\n // Use popper to override date mform calendar position.\n const updateCalendarPosition = (referenceid) => {\n let referenceElement = document.querySelector(referenceid),\n popperContent = document.querySelector(Selectors.filters.date.calendar);\n\n popperContent.style.removeProperty(\"z-index\");\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n };\n\n // Close the relevant filter.\n var closeOpenFilters = (openFilterButton, openFilter) => {\n openFilter.classList.add('hidden');\n openFilter.setAttribute('data-openfilter', 'false');\n\n openFilterButton.classList.add('btn-primary');\n openFilterButton.classList.remove('btn-outline-primary');\n openFilterButton.setAttribute('aria-expanded', false);\n };\n\n // Groups filter specific handlers.\n\n // Event handler for clicking select all groups.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.selectall, function() {\n let deselected = root.querySelectorAll(Selectors.filters.group.checkbox + ':not(:checked)');\n deselected.forEach(function(checkbox) {\n checkbox.checked = true;\n });\n });\n\n // Event handler for clearing filter by clicking option.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.clear, function() {\n // Clear checkboxes.\n let selected = root.querySelectorAll(Selectors.filters.group.checkbox + ':checked');\n selected.forEach(function(checkbox) {\n checkbox.checked = false;\n });\n });\n\n // Event handler for showing groups filter popover.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.trigger, function() {\n // Create popover.\n let referenceElement = root.querySelector(Selectors.filters.group.trigger),\n popperContent = root.querySelector(Selectors.filters.group.popover);\n\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n\n // Show popover.\n popperContent.classList.remove('hidden');\n popperContent.setAttribute('data-openfilter', 'true');\n\n // Change to outlined button.\n referenceElement.classList.add('btn-outline-primary');\n referenceElement.classList.remove('btn-primary');\n\n // Let screen readers know that it's now expanded.\n referenceElement.setAttribute('aria-expanded', true);\n\n // Add listeners to handle closing filter.\n const closeListener = e => {\n if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter=\"true\"]')) {\n closeOpenFilters(referenceElement, popperContent);\n document.removeEventListener('click', closeListener);\n document.removeEventListener('keyup', escCloseListener);\n }\n };\n\n document.addEventListener('click', closeListener);\n\n const escCloseListener = e => {\n if (e.keyCode === KeyCodes.escape) {\n closeOpenFilters(referenceElement, popperContent);\n document.removeEventListener('keyup', escCloseListener);\n document.removeEventListener('click', closeListener);\n }\n };\n\n document.addEventListener('keyup', escCloseListener);\n });\n\n // Event handler to click save groups filter.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.save, function() {\n // Copy the saved values into the form before submitting.\n let popcheckboxes = root.querySelectorAll(Selectors.filters.group.checkbox);\n\n popcheckboxes.forEach(function(popcheckbox) {\n let filtersform = document.forms.filtersform,\n saveid = popcheckbox.getAttribute('data-saveid');\n\n filtersform.querySelector(`#${saveid}`).checked = popcheckbox.checked;\n });\n\n submitWithFilter('#filter-groups-popover');\n });\n\n // Dates filter specific handlers.\n\n // Event handler for showing dates filter popover.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.trigger, function() {\n\n // Create popover.\n let referenceElement = root.querySelector(Selectors.filters.date.trigger),\n popperContent = root.querySelector(Selectors.filters.date.popover);\n\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n\n // Show popover and move focus.\n popperContent.classList.remove('hidden');\n popperContent.setAttribute('data-openfilter', 'true');\n popperContent.querySelector('[name=\"filterdatefrompopover[enabled]\"]').focus();\n\n // Change to outlined button.\n referenceElement.classList.add('btn-outline-primary');\n referenceElement.classList.remove('btn-primary');\n\n // Let screen readers know that it's now expanded.\n referenceElement.setAttribute('aria-expanded', true);\n\n // Add listener to handle closing filter.\n const closeListener = e => {\n if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter=\"true\"]')) {\n closeOpenFilters(referenceElement, popperContent);\n document.removeEventListener('click', closeListener);\n document.removeEventListener('keyup', escCloseListener);\n }\n };\n\n document.addEventListener('click', closeListener);\n\n const escCloseListener = e => {\n if (e.keyCode === KeyCodes.escape) {\n closeOpenFilters(referenceElement, popperContent);\n document.removeEventListener('keyup', escCloseListener);\n document.removeEventListener('click', closeListener);\n }\n };\n\n document.addEventListener('keyup', escCloseListener);\n });\n\n // Event handler to save dates filter.\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.save, function() {\n // Populate the hidden form inputs to submit the data.\n let filtersForm = document.forms.filtersform;\n const datesPopover = root.querySelector(Selectors.filters.date.popover);\n const fromEnabled = datesPopover.querySelector('[name=\"filterdatefrompopover[enabled]\"]').checked ? 1 : 0;\n const toEnabled = datesPopover.querySelector('[name=\"filterdatetopopover[enabled]\"]').checked ? 1 : 0;\n\n if (!fromEnabled && !toEnabled) {\n // Update the elements in the filter form.\n filtersForm.elements['datefrom[timestamp]'].value = 0;\n filtersForm.elements['datefrom[enabled]'].value = fromEnabled;\n filtersForm.elements['dateto[timestamp]'].value = 0;\n filtersForm.elements['dateto[enabled]'].value = toEnabled;\n\n // Submit the filter values and re-generate report.\n submitWithFilter('#filter-dates-popover');\n } else {\n let args = {data: []};\n\n if (fromEnabled) {\n args.data.push({\n 'key': 'from',\n 'year': datesPopover.querySelector('[name=\"filterdatefrompopover[year]\"]').value,\n 'month': datesPopover.querySelector('[name=\"filterdatefrompopover[month]\"]').value,\n 'day': datesPopover.querySelector('[name=\"filterdatefrompopover[day]\"]').value,\n 'hour': 0,\n 'minute': 0\n });\n }\n\n if (toEnabled) {\n args.data.push({\n 'key': 'to',\n 'year': datesPopover.querySelector('[name=\"filterdatetopopover[year]\"]').value,\n 'month': datesPopover.querySelector('[name=\"filterdatetopopover[month]\"]').value,\n 'day': datesPopover.querySelector('[name=\"filterdatetopopover[day]\"]').value,\n 'hour': 23,\n 'minute': 59\n });\n }\n\n const request = {\n methodname: 'core_calendar_get_timestamps',\n args: args\n };\n\n Ajax.call([request])[0].done(function(result) {\n let fromTimestamp = 0,\n toTimestamp = 0;\n\n result['timestamps'].forEach(function(data){\n if (data.key === 'from') {\n fromTimestamp = data.timestamp;\n } else if (data.key === 'to') {\n toTimestamp = data.timestamp;\n }\n });\n\n // Display an error if the from date is later than the do date.\n if (toTimestamp > 0 && fromTimestamp > toTimestamp) {\n const warningdiv = document.getElementById('dates-filter-warning');\n warningdiv.classList.remove('hidden');\n warningdiv.classList.add('d-block');\n } else {\n filtersForm.elements['datefrom[timestamp]'].value = fromTimestamp;\n filtersForm.elements['datefrom[enabled]'].value = fromEnabled;\n filtersForm.elements['dateto[timestamp]'].value = toTimestamp;\n filtersForm.elements['dateto[enabled]'].value = toEnabled;\n\n // Submit the filter values and re-generate report.\n submitWithFilter('#filter-dates-popover');\n }\n });\n }\n });\n\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.calendariconfrom, function() {\n updateCalendarPosition(Selectors.filters.date.calendariconfrom);\n });\n\n jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.calendariconto, function() {\n updateCalendarPosition(Selectors.filters.date.calendariconto);\n });\n};\n"],"file":"filters.min.js"} \ No newline at end of file diff --git a/mod/forum/report/summary/amd/src/filters.js b/mod/forum/report/summary/amd/src/filters.js index 55fbf4ac2e5..63040c64b8d 100644 --- a/mod/forum/report/summary/amd/src/filters.js +++ b/mod/forum/report/summary/amd/src/filters.js @@ -28,6 +28,7 @@ import CustomEvents from 'core/custom_interaction_events'; import Selectors from 'forumreport_summary/selectors'; import Y from 'core/yui'; import Ajax from 'core/ajax'; +import KeyCodes from 'core/key_codes'; export const init = (root) => { let jqRoot = $(root); @@ -73,6 +74,11 @@ export const init = (root) => { // Submit report via filter const submitWithFilter = (containerelement) => { + // Disable the dates filter mform checker to prevent any changes triggering a warning to the user. + Y.use('moodle-core-formchangechecker', function() { + M.core_formchangechecker.reset_form_dirty_state(); + }); + // Close the container (eg popover). $(containerelement).addClass('hidden'); @@ -89,14 +95,14 @@ export const init = (root) => { new Popper(referenceElement, popperContent, {placement: 'bottom'}); }; - // Call when opening filter to ensure only one can be activated. - const canOpenFilter = (event) => { - if (document.querySelector('[data-openfilter="true"]')) { - return false; - } + // Close the relevant filter. + var closeOpenFilters = (openFilterButton, openFilter) => { + openFilter.classList.add('hidden'); + openFilter.setAttribute('data-openfilter', 'false'); - event.target.setAttribute('data-openfilter', "true"); - return true; + openFilterButton.classList.add('btn-primary'); + openFilterButton.classList.remove('btn-outline-primary'); + openFilterButton.setAttribute('aria-expanded', false); }; // Groups filter specific handlers. @@ -119,11 +125,7 @@ export const init = (root) => { }); // Event handler for showing groups filter popover. - jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.trigger, function(event) { - if (!canOpenFilter(event)) { - return false; - } - + jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.trigger, function() { // Create popover. let referenceElement = root.querySelector(Selectors.filters.group.trigger), popperContent = root.querySelector(Selectors.filters.group.popover); @@ -132,6 +134,7 @@ export const init = (root) => { // Show popover. popperContent.classList.remove('hidden'); + popperContent.setAttribute('data-openfilter', 'true'); // Change to outlined button. referenceElement.classList.add('btn-outline-primary'); @@ -139,21 +142,48 @@ export const init = (root) => { // Let screen readers know that it's now expanded. referenceElement.setAttribute('aria-expanded', true); - return true; + + // Add listeners to handle closing filter. + const closeListener = e => { + if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter="true"]')) { + closeOpenFilters(referenceElement, popperContent); + document.removeEventListener('click', closeListener); + document.removeEventListener('keyup', escCloseListener); + } + }; + + document.addEventListener('click', closeListener); + + const escCloseListener = e => { + if (e.keyCode === KeyCodes.escape) { + closeOpenFilters(referenceElement, popperContent); + document.removeEventListener('keyup', escCloseListener); + document.removeEventListener('click', closeListener); + } + }; + + document.addEventListener('keyup', escCloseListener); }); // Event handler to click save groups filter. jqRoot.on(CustomEvents.events.activate, Selectors.filters.group.save, function() { + // Copy the saved values into the form before submitting. + let popcheckboxes = root.querySelectorAll(Selectors.filters.group.checkbox); + + popcheckboxes.forEach(function(popcheckbox) { + let filtersform = document.forms.filtersform, + saveid = popcheckbox.getAttribute('data-saveid'); + + filtersform.querySelector(`#${saveid}`).checked = popcheckbox.checked; + }); + submitWithFilter('#filter-groups-popover'); }); // Dates filter specific handlers. // Event handler for showing dates filter popover. - jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.trigger, function(event) { - if (!canOpenFilter(event)) { - return false; - } + jqRoot.on(CustomEvents.events.activate, Selectors.filters.date.trigger, function() { // Create popover. let referenceElement = root.querySelector(Selectors.filters.date.trigger), @@ -163,6 +193,7 @@ export const init = (root) => { // Show popover and move focus. popperContent.classList.remove('hidden'); + popperContent.setAttribute('data-openfilter', 'true'); popperContent.querySelector('[name="filterdatefrompopover[enabled]"]').focus(); // Change to outlined button. @@ -171,7 +202,27 @@ export const init = (root) => { // Let screen readers know that it's now expanded. referenceElement.setAttribute('aria-expanded', true); - return true; + + // Add listener to handle closing filter. + const closeListener = e => { + if (e.target.id !== referenceElement.id && popperContent !== e.target.closest('[data-openfilter="true"]')) { + closeOpenFilters(referenceElement, popperContent); + document.removeEventListener('click', closeListener); + document.removeEventListener('keyup', escCloseListener); + } + }; + + document.addEventListener('click', closeListener); + + const escCloseListener = e => { + if (e.keyCode === KeyCodes.escape) { + closeOpenFilters(referenceElement, popperContent); + document.removeEventListener('keyup', escCloseListener); + document.removeEventListener('click', closeListener); + } + }; + + document.addEventListener('keyup', escCloseListener); }); // Event handler to save dates filter. @@ -182,11 +233,6 @@ export const init = (root) => { const fromEnabled = datesPopover.querySelector('[name="filterdatefrompopover[enabled]"]').checked ? 1 : 0; const toEnabled = datesPopover.querySelector('[name="filterdatetopopover[enabled]"]').checked ? 1 : 0; - // Disable the mform checker to prevent unsubmitted form warning to the user when closing the popover. - Y.use('moodle-core-formchangechecker', function() { - M.core_formchangechecker.reset_form_dirty_state(); - }); - if (!fromEnabled && !toEnabled) { // Update the elements in the filter form. filtersForm.elements['datefrom[timestamp]'].value = 0; diff --git a/mod/forum/report/summary/templates/filter_dates_popover.mustache b/mod/forum/report/summary/templates/filter_dates_popover.mustache index a95b450b174..e1d6329126c 100644 --- a/mod/forum/report/summary/templates/filter_dates_popover.mustache +++ b/mod/forum/report/summary/templates/filter_dates_popover.mustache @@ -25,7 +25,7 @@ } }} -