From cc15134c7bef8ceb43df72681463b2ed45f37b8b Mon Sep 17 00:00:00 2001 From: Michael Hawkins Date: Tue, 8 Oct 2019 12:46:26 +0800 Subject: [PATCH] MDL-66076 forumreport_summary: Groups filter made accessible --- .../report/summary/amd/build/filters.min.js | 2 +- .../summary/amd/build/filters.min.js.map | 2 +- mod/forum/report/summary/amd/src/filters.js | 63 +++++++++++++++---- .../summary/lang/en/forumreport_summary.php | 1 + .../report/summary/templates/filters.mustache | 14 +++-- 5 files changed, 63 insertions(+), 19 deletions(-) diff --git a/mod/forum/report/summary/amd/build/filters.min.js b/mod/forum/report/summary/amd/build/filters.min.js index 123433ea14b..af21835c4bb 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"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}var e=function(a){a=(0,b.default)(a);(0,b.default)(document).ready(function(){(0,b.default)(".loading-icon").hide();(0,b.default)("#summaryreport").removeClass("hidden")});(0,b.default)(a).on("click",".filter-clear",function(a){var b=a.target.parentNode.parentNode.parentElement.querySelectorAll("input[type=\"checkbox\"]:checked");b.forEach(function(a){a.checked=!1})});var d=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){d(a)});(0,b.default)("thead").on("click","a",function(a){d(a)});(0,b.default)(".pagination").on("click","a",function(a){d(a)});var e=function(a){var b=document.getElementById(a),c=b.querySelectorAll("input[type=\"checkbox\"]:not(:checked)");c.forEach(function(a){a.checked=!0})};(0,b.default)("#filter-groups-popover .select-all").on("click",function(){e("filter-groups-popover")});(0,b.default)("#filter-groups-button").on("click",function(){var a=document.querySelector("#filter-groups-button"),d=document.querySelector("#filter-groups-popover");new c.default(a,d,{placement:"bottom"});(0,b.default)("#filter-groups-popover").removeClass("hidden")});(0,b.default)(a).on("click","#filter-groups-popover .filter-save",function(){(0,b.default)("#filter-groups-popover").addClass("hidden");d(!1)})};a.init=e}); +define ("forumreport_summary/filters",["exports","jquery","core/popper"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}var e=function(a){a=(0,b.default)(a);(0,b.default)(document).ready(function(){(0,b.default)(".loading-icon").hide();(0,b.default)("#summaryreport").removeClass("hidden")});var d=function(a){var b=a.target.parentNode.parentNode.parentElement.querySelectorAll("input[type=\"checkbox\"]:checked");b.forEach(function(a){a.checked=!1})};(0,b.default)(a).on("click",".filter-clear",function(a){a.preventDefault();d(a)});var e=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){e(a)});(0,b.default)("thead").on("click","a",function(a){e(a)});(0,b.default)(".pagination").on("click","a",function(a){e(a)});var f=function(a){var b=document.getElementById(a),c=b.querySelectorAll("input[type=\"checkbox\"]:not(:checked)");c.forEach(function(a){a.checked=!0})},g=function(a){(0,b.default)(a).addClass("hidden");e(!1)};(0,b.default)("#filter-groups-popover .select-all").on("click",function(a){a.preventDefault();f("filter-groups-popover")});(0,b.default)("#filter-groups-button").on("click",function(){var a=document.querySelector("#filter-groups-button"),b=document.querySelector("#filter-groups-popover");new c.default(a,b,{placement:"bottom"});var d=document.getElementById("filter-groups-button"),e=document.getElementById("filter-groups-popover");e.classList.remove("hidden");d.setAttribute("aria-expanded",!0);d.classList.add("btn-outline-primary");d.classList.remove("btn-primary");e.querySelector("input").focus()});(0,b.default)(a).on("click","#filter-groups-popover .filter-save",function(a){a.preventDefault();g("#filter-groups-popover")});(0,b.default)("#filter-groups-popover").on("keydown",".filter-actions",function(a){if((13===a.charCode||13===a.keyCode||32===a.charCode||32===a.keyCode)&&0.\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';\n\nexport const init = (root) => {\n root = $(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 // Event handler to clear filters.\n $(root).on(\"click\", \".filter-clear\", function(event) {\n // Clear checkboxes.\n let selected = event.target.parentNode.parentNode.parentElement.querySelectorAll('input[type=\"checkbox\"]:checked');\n\n selected.forEach(function(checkbox) {\n checkbox.checked = false;\n });\n });\n\n // Called to override click event to trigger a proper generate request with filtering.\n var generateWithFilters = (event) => {\n var 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 // Select all checkboxes within a filter section.\n var selectAll = (checkboxdiv) => {\n let targetdiv = document.getElementById(checkboxdiv);\n let deselected = targetdiv.querySelectorAll('input[type=\"checkbox\"]:not(:checked)');\n\n deselected.forEach(function(checkbox) {\n checkbox.checked = true;\n });\n };\n\n // Groups filter specific handlers.\n\n // Event to handle select all groups.\n $('#filter-groups-popover .select-all').on('click', function() {\n selectAll('filter-groups-popover');\n });\n\n // Event handler for showing groups filter popover.\n $('#filter-groups-button').on('click', function() {\n // Create popover.\n var referenceElement = document.querySelector('#filter-groups-button'),\n popperContent = document.querySelector('#filter-groups-popover');\n\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n\n // Show popover.\n $('#filter-groups-popover').removeClass('hidden');\n });\n\n // Event handler to save groups filter.\n $(root).on(\"click\", \"#filter-groups-popover .filter-save\", function() {\n // Close the popover.\n $('#filter-groups-popover').addClass('hidden');\n\n // Submit the filter values and re-generate report.\n generateWithFilters(false);\n });\n};\n"],"file":"filters.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/filters.js"],"names":["init","root","document","ready","hide","removeClass","clearAll","event","selected","target","parentNode","parentElement","querySelectorAll","forEach","checkbox","checked","on","preventDefault","generateWithFilters","newLink","attr","filterParams","search","substr","submit","selectAll","checkboxdiv","targetdiv","getElementById","deselected","submitWithFilter","containerelement","addClass","referenceElement","querySelector","popperContent","Popper","placement","groupsbutton","groupspopover","classList","remove","setAttribute","add","focus","charCode","keyCode","length"],"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';\n\nexport const init = (root) => {\n root = $(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 clear filters.\n var clearAll = (event) => {\n // Clear checkboxes.\n let selected = event.target.parentNode.parentNode.parentElement.querySelectorAll('input[type=\"checkbox\"]:checked');\n\n selected.forEach(function(checkbox) {\n checkbox.checked = false;\n });\n };\n\n // Event handler for clearing filter by clicking option.\n $(root).on(\"click\", \".filter-clear\", function(event) {\n event.preventDefault();\n clearAll(event);\n });\n\n // Called to override click event to trigger a proper generate request with filtering.\n var generateWithFilters = (event) => {\n var 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 // Select all checkboxes within a filter section.\n var selectAll = (checkboxdiv) => {\n let targetdiv = document.getElementById(checkboxdiv);\n let deselected = targetdiv.querySelectorAll('input[type=\"checkbox\"]:not(:checked)');\n\n deselected.forEach(function(checkbox) {\n checkbox.checked = true;\n });\n };\n\n // Submit report via filter\n var 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 // Groups filter specific handlers.\n\n // Event handler for clicking select all groups.\n $('#filter-groups-popover .select-all').on('click', function(event) {\n event.preventDefault();\n selectAll('filter-groups-popover');\n });\n\n // Event handler for showing groups filter popover.\n $('#filter-groups-button').on('click', function() {\n // Create popover.\n var referenceElement = document.querySelector('#filter-groups-button'),\n popperContent = document.querySelector('#filter-groups-popover');\n\n new Popper(referenceElement, popperContent, {placement: 'bottom'});\n\n // Show popover and switch focus.\n var groupsbutton = document.getElementById('filter-groups-button'),\n groupspopover = document.getElementById('filter-groups-popover');\n groupspopover.classList.remove('hidden');\n groupsbutton.setAttribute('aria-expanded', true);\n groupsbutton.classList.add('btn-outline-primary');\n groupsbutton.classList.remove('btn-primary');\n groupspopover.querySelector('input').focus();\n });\n\n // Event handler to click save groups filter.\n $(root).on(\"click\", \"#filter-groups-popover .filter-save\", function(event) {\n event.preventDefault();\n submitWithFilter('#filter-groups-popover');\n });\n\n // Event handler to support pressing enter/space on groups filter popover actions.\n $('#filter-groups-popover').on(\"keydown\", \".filter-actions\", function(event) {\n if ((event.charCode === 13 || event.keyCode === 13 || event.charCode === 32 || event.keyCode === 32)\n && event.target.classList.length > 0) {\n event.preventDefault();\n\n switch(event.target.classList[0]) {\n case 'select-all':\n selectAll('filter-groups-popover');\n break;\n case 'filter-clear':\n clearAll(event);\n break;\n case 'filter-save':\n submitWithFilter('#filter-groups-popover');\n break;\n }\n }\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 cac7f920763..3aa22142650 100644 --- a/mod/forum/report/summary/amd/src/filters.js +++ b/mod/forum/report/summary/amd/src/filters.js @@ -37,14 +37,20 @@ export const init = (root) => { // Generic filter handlers. - // Event handler to clear filters. - $(root).on("click", ".filter-clear", function(event) { + // Called to clear filters. + var clearAll = (event) => { // Clear checkboxes. let selected = event.target.parentNode.parentNode.parentElement.querySelectorAll('input[type="checkbox"]:checked'); selected.forEach(function(checkbox) { checkbox.checked = false; }); + }; + + // Event handler for clearing filter by clicking option. + $(root).on("click", ".filter-clear", function(event) { + event.preventDefault(); + clearAll(event); }); // Called to override click event to trigger a proper generate request with filtering. @@ -87,10 +93,20 @@ export const init = (root) => { }); }; + // Submit report via filter + var submitWithFilter = (containerelement) => { + // Close the container (eg popover). + $(containerelement).addClass('hidden'); + + // Submit the filter values and re-generate report. + generateWithFilters(false); + }; + // Groups filter specific handlers. - // Event to handle select all groups. - $('#filter-groups-popover .select-all').on('click', function() { + // Event handler for clicking select all groups. + $('#filter-groups-popover .select-all').on('click', function(event) { + event.preventDefault(); selectAll('filter-groups-popover'); }); @@ -102,16 +118,39 @@ export const init = (root) => { new Popper(referenceElement, popperContent, {placement: 'bottom'}); - // Show popover. - $('#filter-groups-popover').removeClass('hidden'); + // Show popover and switch focus. + var groupsbutton = document.getElementById('filter-groups-button'), + groupspopover = document.getElementById('filter-groups-popover'); + groupspopover.classList.remove('hidden'); + groupsbutton.setAttribute('aria-expanded', true); + groupsbutton.classList.add('btn-outline-primary'); + groupsbutton.classList.remove('btn-primary'); + groupspopover.querySelector('input').focus(); }); - // Event handler to save groups filter. - $(root).on("click", "#filter-groups-popover .filter-save", function() { - // Close the popover. - $('#filter-groups-popover').addClass('hidden'); + // Event handler to click save groups filter. + $(root).on("click", "#filter-groups-popover .filter-save", function(event) { + event.preventDefault(); + submitWithFilter('#filter-groups-popover'); + }); - // Submit the filter values and re-generate report. - generateWithFilters(false); + // Event handler to support pressing enter/space on groups filter popover actions. + $('#filter-groups-popover').on("keydown", ".filter-actions", function(event) { + if ((event.charCode === 13 || event.keyCode === 13 || event.charCode === 32 || event.keyCode === 32) + && event.target.classList.length > 0) { + event.preventDefault(); + + switch(event.target.classList[0]) { + case 'select-all': + selectAll('filter-groups-popover'); + break; + case 'filter-clear': + clearAll(event); + break; + case 'filter-save': + submitWithFilter('#filter-groups-popover'); + break; + } + } }); }; diff --git a/mod/forum/report/summary/lang/en/forumreport_summary.php b/mod/forum/report/summary/lang/en/forumreport_summary.php index 97cebba2376..d3bb447dc47 100644 --- a/mod/forum/report/summary/lang/en/forumreport_summary.php +++ b/mod/forum/report/summary/lang/en/forumreport_summary.php @@ -25,6 +25,7 @@ $string['attachmentcount'] = 'Number of attachments'; $string['viewcount'] = 'Number of views'; $string['earliestpost'] = 'Earliest post'; +$string['filter:groupsbuttonlabel'] = 'Open the groups filter'; $string['filter:groupsname'] = 'Groups'; $string['filter:groupscountall'] = 'Groups (all)'; $string['filter:groupscountnumber'] = 'Groups ({$a})'; diff --git a/mod/forum/report/summary/templates/filters.mustache b/mod/forum/report/summary/templates/filters.mustache index 426b19dc187..ec243aea056 100644 --- a/mod/forum/report/summary/templates/filters.mustache +++ b/mod/forum/report/summary/templates/filters.mustache @@ -44,7 +44,8 @@
{{#hasgroups}} - @@ -61,10 +62,13 @@ {{/filtergroups}}
- {{# str}} selectall {{/ str}} -
- {{# str}} clear {{/ str}} - {{# str}} save {{/ str}} +
+ +
+ + +