MDL-66372 forumreport_summary: Improved generate with filters override

Previously this override simply appended any GET params from the
action it was overriding to the final action URL, now it can handle
overriding param values, so that they are updated or added as needed
This commit is contained in:
Michael Hawkins
2019-11-07 12:58:02 +08:00
parent 0d8cd4af31
commit d418bda8c7
3 changed files with 45 additions and 11 deletions
+1 -1
View File
@@ -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(0<e&&c>e){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"],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,b){var c=document.forms.filtersform.action,d;if(a){a.preventDefault();var e=c.split("?"),f=e[1],g=b.split("&"),h="",i=[],j=[];f.split("&").forEach(function(a){var b=a.split("=");i.push(b[0]);j.push(b[1])});g.forEach(function(a){var b=a.split("="),c=i.indexOf(b[0]);if(-1<c){j[c]=b[1]}else{i.push(b[0]);j.push(b[1])}});i.forEach(function(a,b){h+="&".concat(a,"=").concat(j[b])});d=e[0]+"?"+h.substr(1)}else{d=c}document.forms.filtersform.action=d;document.forms.filtersform.submit()};(0,b.default)(".resettable").on("click","a",function(a){i(a,a.target.search.substr(1))});(0,b.default)("thead").on("click","a",function(a){i(a,a.target.search.substr(1))});(0,b.default)(".pagination").on("click","a",function(a){i(a,a.target.search.substr(1))});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(0<e&&c>e){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});
//# sourceMappingURL=filters.min.js.map
File diff suppressed because one or more lines are too long
+43 -9
View File
@@ -42,33 +42,67 @@ export const init = (root) => {
// Generic filter handlers.
// Called to override click event to trigger a proper generate request with filtering.
const generateWithFilters = (event) => {
let newLink = $('#filtersform').attr('action');
const generateWithFilters = (event, getparams) => {
let currentLink = document.forms.filtersform.action,
newLink;
if (event) {
event.preventDefault();
let filterParams = event.target.search.substr(1);
newLink += '&' + filterParams;
let currentSplit = currentLink.split('?'),
currentstring = currentSplit[1],
newparamsarray = getparams.split('&'),
paramsstring = '',
paramkeys = [],
paramvalues = [];
// Separate out the existing action GET param string.
currentstring.split('&').forEach(function(param) {
let splitparam = param.split('=');
paramkeys.push(splitparam[0]);
paramvalues.push(splitparam[1]);
});
newparamsarray.forEach(function(paramstring) {
let newparam = paramstring.split('='),
existingkey = paramkeys.indexOf(newparam[0]);
// Overwrite value if existing, otherwise add new param.
if (existingkey > -1) {
paramvalues[existingkey] = newparam[1];
} else {
paramkeys.push(newparam[0]);
paramvalues.push(newparam[1]);
}
});
// Build URL.
paramkeys.forEach(function(name, key) {
paramsstring += `&${name}=${paramvalues[key]}`;
});
newLink = currentSplit[0] + '?' + paramsstring.substr(1);
} else {
newLink = currentLink;
}
$('#filtersform').attr('action', newLink);
$('#filtersform').submit();
document.forms.filtersform.action = newLink;
document.forms.filtersform.submit();
};
// Override 'reset table preferences' so it generates with filters.
$('.resettable').on("click", "a", function(event) {
generateWithFilters(event);
generateWithFilters(event, event.target.search.substr(1));
});
// Override table heading sort links so they generate with filters.
$('thead').on("click", "a", function(event) {
generateWithFilters(event);
generateWithFilters(event, event.target.search.substr(1));
});
// Override pagination page links so they generate with filters.
$('.pagination').on("click", "a", function(event) {
generateWithFilters(event);
generateWithFilters(event, event.target.search.substr(1));
});
// Submit report via filter