course/amd/src/formatchooser.js

  1. // This file is part of Moodle - http://moodle.org/ //
  2. // Moodle is free software: you can redistribute it and/or modify
  3. // it under the terms of the GNU General Public License as published by
  4. // the Free Software Foundation, either version 3 of the License, or
  5. // (at your option) any later version.
  6. //
  7. // Moodle is distributed in the hope that it will be useful,
  8. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. // GNU General Public License for more details.
  11. //
  12. // You should have received a copy of the GNU General Public License
  13. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
  14. /**
  15. * Course format selection handler.
  16. *
  17. * @module core_course/formatchooser
  18. * @copyright 2022 Andrew Nicols <andrew@nicols.co.uk>
  19. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  20. * @since 4.0
  21. */
  22. const Selectors = {
  23. fields: {
  24. selector: '[data-formatchooser-field="selector"]',
  25. updateButton: '[data-formatchooser-field="updateButton"]',
  26. },
  27. };
  28. /**
  29. * Initialise the format chooser.
  30. */
  31. export const init = () => {
  32. document.querySelector(Selectors.fields.selector).addEventListener('change', e => {
  33. const form = e.target.closest('form');
  34. const updateButton = form.querySelector(Selectors.fields.updateButton);
  35. const fieldset = updateButton.closest('fieldset');
  36. const url = new URL(form.action);
  37. url.hash = fieldset.id;
  38. form.action = url.toString();
  39. updateButton.click();
  40. });
  41. };