AutorÃa | Ultima modificación | Ver Log |
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @author Andreas Grabs <moodle@grabs-edv.de>
* @copyright 2024 Andreas Grabs
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/fragment', 'core/templates', 'core/notification'], function(
$, fragment, templates, notification) {
/**
* Class constructor
* @param {string} contentcontainerselector
* @param {string} fragmentcall
* @param {object} serviceparams
* @param {int} contextid
*/
var ContentLoader = function(contentcontainerselector, fragmentcall, serviceparams, contextid) {
this.contentcontainerselector = contentcontainerselector;
this.fragmentcall = fragmentcall;
if (serviceparams === undefined) {
this.serviceparams = { };
} else {
this.serviceparams = serviceparams;
}
this.contextid = contextid;
this.isshown = false;
};
/**
* Load content by the fragment api
* @param {string} adjacentPosition Can be on of the following values: afterbegin, afterend, beforebegin, beforeend.
* @returns {Promise}
*/
ContentLoader.prototype.loadContent = function(adjacentPosition) {
var _this = this; // We have to save this because the context in the promise is another.
// Show a spinner while loading the table if not disabled.
if (_this.disablespinner === undefined) {
$(_this.contentcontainerselector).html('');
var spinnerhtml = '<div class="text-center" id="myspinner"><i class="fa fa-spinner fa-2x fa-spin"></i></div>';
$(_this.contentcontainerselector).prepend(spinnerhtml);
}
var fragmentpromise = fragment.loadFragment('mod_unilabel', _this.fragmentcall, _this.contextid, _this.serviceparams);
return fragmentpromise.then(function(html, js) {
var container = document.querySelector(_this.contentcontainerselector);
container.insertAdjacentHTML(adjacentPosition, html);
if (js) {
templates.runTemplateJS(js);
}
_this.isshown = true;
$('#myspinner').remove();
return true;
}).fail(notification.exception);
};
/**
* Load html content on the given event.
* @param {string} triggerselector
* @param {string} triggerevent
* @param {string} adjacentPosition Can be on of the following values: afterbegin, afterend, beforebegin, beforeend.
*/
ContentLoader.prototype.autoload = function(triggerselector, triggerevent, adjacentPosition) {
var _this = this;
$(triggerselector).on(triggerevent, function() {
if (_this.isshown == false) {
_this.loadContent(adjacentPosition);
_this.isshown = true;
}
});
};
return ContentLoader;
});