AutorÃa | Ultima modificación | Ver Log |
/* eslint-disable no-unused-vars *//*** Resource and activity toolbox class.** This class is responsible for managing AJAX interactions with activities and resources* when viewing a course in editing mode.** @module moodle-course-toolboxes* @namespace M.course.toolboxes*/// The CSS classes we use.var CSS = {ACTIVITYINSTANCE: 'activityinstance',AVAILABILITYINFODIV: 'div.availabilityinfo',CONTENTWITHOUTLINK: 'contentwithoutlink',CONDITIONALHIDDEN: 'conditionalhidden',DIMCLASS: 'dimmed',DIMMEDTEXT: 'dimmed_text',EDITINSTRUCTIONS: 'editinstructions',EDITINGMAXMARK: 'editor_displayed',HIDE: 'hide',JOIN: 'page_join',MODINDENTCOUNT: 'mod-indent-',MODINDENTHUGE: 'mod-indent-huge',PAGE: 'page',SECTIONHIDDENCLASS: 'hidden',SECTIONIDPREFIX: 'section-',SELECTMULTIPLE: 'select-multiple',SLOT: 'slot',SHOW: 'editing_show',TITLEEDITOR: 'titleeditor'},// The CSS selectors we use.SELECTOR = {ACTIONAREA: '.actions',ACTIONLINKTEXT: '.actionlinktext',ACTIVITYACTION: 'a.cm-edit-action[data-action], a.editing_maxmark, a.editing_section, input.shuffle_questions',ACTIVITYFORM: 'span.instancemaxmarkcontainer form',ACTIVITYINSTANCE: '.' + CSS.ACTIVITYINSTANCE,SECTIONINSTANCE: '.sectioninstance',ACTIVITYLI: 'li.activity, li.section',ACTIVITYMAXMARK: 'input[name=maxmark]',COMMANDSPAN: '.commands',CONTENTAFTERLINK: 'div.contentafterlink',CONTENTWITHOUTLINK: 'div.contentwithoutlink',DELETESECTIONICON: 'a.editing_delete .icon',EDITMAXMARK: 'a.editing_maxmark',EDITSECTION: 'a.editing_section',EDITSECTIONICON: 'a.editing_section .icon',EDITSHUFFLEQUESTIONSACTION: 'input.cm-edit-action[data-action]',EDITSHUFFLEAREA: '.instanceshufflequestions .shuffle-progress',HIDE: 'a.editing_hide',HIGHLIGHT: 'a.editing_highlight',INSTANCENAME: 'span.instancename',INSTANCEMAXMARK: 'span.instancemaxmark',INSTANCESECTION: 'span.instancesection',INSTANCESECTIONAREA: 'div.section-heading',MODINDENTDIV: '.mod-indent',MODINDENTOUTER: '.mod-indent-outer',NUMQUESTIONS: '.numberofquestions',PAGECONTENT: 'div#page-content',PAGELI: 'li.page',SECTIONLI: 'li.section',SECTIONUL: 'ul.section',SECTIONFORM: '.instancesectioncontainer form',SECTIONINPUT: 'input[name=section]',SELECTMULTIPLEBUTTON: '#selectmultiplecommand',SELECTMULTIPLECANCELBUTTON: '#selectmultiplecancelcommand',SELECTMULTIPLECHECKBOX: '.select-multiple-checkbox',SELECTMULTIPLEDELETEBUTTON: '#selectmultipledeletecommand',SELECTALL: '#questionselectall',SHOW: 'a.' + CSS.SHOW,SLOTLI: 'li.slot',SUMMARKS: '.mod_quiz_summarks'},BODY = Y.one(document.body);// Setup the basic namespace.M.mod_quiz = M.mod_quiz || {};/*** The toolbox class is a generic class which should never be directly* instantiated. Please extend it instead.** @class toolbox* @constructor* @protected* @extends Base*/var TOOLBOX = function() {TOOLBOX.superclass.constructor.apply(this, arguments);};Y.extend(TOOLBOX, Y.Base, {/*** Send a request using the REST API** @method send_request* @param {Object} data The data to submit with the AJAX request* @param {Node} [statusspinner] A statusspinner which may contain a section loader* @param {Function} success_callback The callback to use on success* @param {Object} [optionalconfig] Any additional configuration to submit* @chainable*/send_request: function(data, statusspinner, success_callback, optionalconfig) {// Default data structureif (!data) {data = {};}// Handle any variables which we must pass back through tovar pageparams = this.get('config').pageparams,varname;for (varname in pageparams) {data[varname] = pageparams[varname];}data.sesskey = M.cfg.sesskey;data.courseid = this.get('courseid');data.quizid = this.get('quizid');var uri = M.cfg.wwwroot + this.get('ajaxurl');// Define the configuration to send with the requestvar responsetext = [];var config = {method: 'POST',data: data,on: {success: function(tid, response) {try {responsetext = Y.JSON.parse(response.responseText);if (responsetext.error) {new M.core.ajaxException(responsetext);}} catch (e) {// Ignore.}// Run the callback if we have one.if (responsetext.hasOwnProperty('newsummarks')) {Y.one(SELECTOR.SUMMARKS).setHTML(responsetext.newsummarks);}if (responsetext.hasOwnProperty('newnumquestions')) {Y.one(SELECTOR.NUMQUESTIONS).setHTML(M.util.get_string('numquestionsx', 'quiz', responsetext.newnumquestions));}if (success_callback) {Y.bind(success_callback, this, responsetext)();}if (statusspinner) {window.setTimeout(function() {statusspinner.hide();}, 400);}},failure: function(tid, response) {if (statusspinner) {statusspinner.hide();}new M.core.ajaxException(response);}},context: this};// Apply optional configif (optionalconfig) {for (varname in optionalconfig) {config[varname] = optionalconfig[varname];}}if (statusspinner) {statusspinner.show();}// Send the requestY.io(uri, config);return this;}},{NAME: 'mod_quiz-toolbox',ATTRS: {/*** The ID of the Moodle Course being edited.** @attribute courseid* @default 0* @type Number*/courseid: {'value': 0},/*** The Moodle course format.** @attribute format* @default 'topics'* @type String*/quizid: {'value': 0},/*** The URL to use when submitting requests.* @attribute ajaxurl* @default null* @type String*/ajaxurl: {'value': null},/*** Any additional configuration passed when creating the instance.** @attribute config* @default {}* @type Object*/config: {'value': {}}}});