blocks/navigation/amd/src/nav_loader.js

  1. // This file is part of Moodle - http://moodle.org/
  2. //
  3. // Moodle is free software: you can redistribute it and/or modify
  4. // it under the terms of the GNU General Public License as published by
  5. // the Free Software Foundation, either version 3 of the License, or
  6. // (at your option) any later version.
  7. //
  8. // Moodle is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. // GNU General Public License for more details.
  12. //
  13. // You should have received a copy of the GNU General Public License
  14. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
  15. /**
  16. * Load the nav tree items via ajax and render the response.
  17. *
  18. * @module block_navigation/nav_loader
  19. * @copyright 2015 John Okely <john@moodle.com>
  20. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  21. */
  22. define(['jquery', 'core/ajax', 'core/config', 'block_navigation/ajax_response_renderer'],
  23. function($, ajax, config, renderer) {
  24. var URL = config.wwwroot + '/lib/ajax/getnavbranch.php';
  25. /**
  26. * Get the block instance id.
  27. *
  28. * @function getBlockInstanceId
  29. * @param {Element} element
  30. * @returns {String} the instance id
  31. */
  32. function getBlockInstanceId(element) {
  33. return element.closest('[data-block]').attr('data-instanceid');
  34. }
  35. return {
  36. load: function(element) {
  37. element = $(element);
  38. var promise = $.Deferred();
  39. var data = {
  40. elementid: element.attr('data-node-id'),
  41. id: element.attr('data-node-key'),
  42. type: element.attr('data-node-type'),
  43. sesskey: config.sesskey,
  44. instance: getBlockInstanceId(element)
  45. };
  46. var settings = {
  47. type: 'POST',
  48. dataType: 'json',
  49. data: data
  50. };
  51. $.ajax(URL, settings).done(function(nodes) {
  52. renderer.render(element, nodes);
  53. promise.resolve();
  54. });
  55. return promise;
  56. }
  57. };
  58. });