/
var
/
www
/
html
/
cetesb
/
course
/
yui
/
src
/
toolboxes
/
js
/
Upload File
HOME
/** * 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', EDITINGTITLE: 'editor_displayed', HIDE : 'hide', MODINDENTCOUNT : 'mod-indent-', MODINDENTHUGE : 'mod-indent-huge', MODULEIDPREFIX : 'module-', SECTIONHIDDENCLASS : 'hidden', SECTIONIDPREFIX : 'section-', SHOW : 'editing_show', TITLEEDITOR : 'titleeditor' }, // The CSS selectors we use. SELECTOR = { ACTIONAREA: '.actions', ACTIONLINKTEXT : '.actionlinktext', ACTIVITYACTION : 'a.cm-edit-action[data-action], a.editing_title', ACTIVITYFORM : '.' + CSS.ACTIVITYINSTANCE + ' form', ACTIVITYICON : 'img.activityicon', ACTIVITYINSTANCE : '.' + CSS.ACTIVITYINSTANCE, ACTIVITYLINK: '.' + CSS.ACTIVITYINSTANCE + ' > a', ACTIVITYLI : 'li.activity', ACTIVITYTITLE : 'input[name=title]', COMMANDSPAN : '.commands', CONTENTAFTERLINK : 'div.contentafterlink', CONTENTWITHOUTLINK : 'div.contentwithoutlink', EDITTITLE: 'a.editing_title', HIDE : 'a.editing_hide', HIGHLIGHT : 'a.editing_highlight', INSTANCENAME : 'span.instancename', MODINDENTDIV : '.mod-indent', MODINDENTOUTER : '.mod-indent-outer', PAGECONTENT : 'body', SECTIONLI : 'li.section', SHOW : 'a.'+CSS.SHOW, SHOWHIDE : 'a.editing_showhide' }, INDENTLIMITS = { MIN: 0, MAX: 16 }, BODY = Y.one(document.body); // Setup the basic namespace. M.course = M.course || {}; /** * 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 structure if (!data) { data = {}; } // Handle any variables which we must pass back through to var pageparams = this.get('config').pageparams, varname; for (varname in pageparams) { data[varname] = pageparams[varname]; } data.sesskey = M.cfg.sesskey; data.courseId = this.get('courseid'); var uri = M.cfg.wwwroot + this.get('ajaxurl'); // Define the configuration to send with the request var 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) {} // Run the callback if we have one. 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 config if (optionalconfig) { for (varname in optionalconfig) { config[varname] = optionalconfig[varname]; } } if (statusspinner) { statusspinner.show(); } // Send the request Y.io(uri, config); return this; } }, { NAME: 'course-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 */ format: { 'value': 'topics' }, /** * 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': {} } } } );