You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.7 KiB
169 lines
4.7 KiB
YUI.add('moodle-course-modchooser', function (Y, NAME) {
|
|
|
|
/**
|
|
* The activity chooser dialogue for courses.
|
|
*
|
|
* @module moodle-course-modchooser
|
|
*/
|
|
|
|
var CSS = {
|
|
PAGECONTENT: 'body',
|
|
SECTION: null,
|
|
SECTIONMODCHOOSER: 'span.section-modchooser-link',
|
|
SITEMENU: '.block_site_main_menu',
|
|
SITETOPIC: 'div.sitetopic'
|
|
};
|
|
|
|
var MODCHOOSERNAME = 'course-modchooser';
|
|
|
|
/**
|
|
* The activity chooser dialogue for courses.
|
|
*
|
|
* @constructor
|
|
* @class M.course.modchooser
|
|
* @extends M.core.chooserdialogue
|
|
*/
|
|
var MODCHOOSER = function() {
|
|
MODCHOOSER.superclass.constructor.apply(this, arguments);
|
|
};
|
|
|
|
Y.extend(MODCHOOSER, M.core.chooserdialogue, {
|
|
/**
|
|
* The current section ID.
|
|
*
|
|
* @property sectionid
|
|
* @private
|
|
* @type Number
|
|
* @default null
|
|
*/
|
|
sectionid: null,
|
|
|
|
/**
|
|
* Set up the activity chooser.
|
|
*
|
|
* @method initializer
|
|
*/
|
|
initializer: function() {
|
|
var sectionclass = M.course.format.get_sectionwrapperclass();
|
|
if (sectionclass) {
|
|
CSS.SECTION = '.' + sectionclass;
|
|
}
|
|
var dialogue = Y.one('.chooserdialoguebody');
|
|
var header = Y.one('.choosertitle');
|
|
var params = {};
|
|
this.setup_chooser_dialogue(dialogue, header, params);
|
|
|
|
// Initialize existing sections and register for dynamically created sections
|
|
this.setup_for_section();
|
|
M.course.coursebase.register_module(this);
|
|
},
|
|
|
|
/**
|
|
* Update any section areas within the scope of the specified
|
|
* selector with AJAX equivalents
|
|
*
|
|
* @method setup_for_section
|
|
* @param baseselector The selector to limit scope to
|
|
*/
|
|
setup_for_section: function(baseselector) {
|
|
if (!baseselector) {
|
|
baseselector = CSS.PAGECONTENT;
|
|
}
|
|
|
|
// Setup for site topics
|
|
Y.one(baseselector).all(CSS.SITETOPIC).each(function(section) {
|
|
this._setup_for_section(section);
|
|
}, this);
|
|
|
|
// Setup for standard course topics
|
|
if (CSS.SECTION) {
|
|
Y.one(baseselector).all(CSS.SECTION).each(function(section) {
|
|
this._setup_for_section(section);
|
|
}, this);
|
|
}
|
|
|
|
// Setup for the block site menu
|
|
Y.one(baseselector).all(CSS.SITEMENU).each(function(section) {
|
|
this._setup_for_section(section);
|
|
}, this);
|
|
},
|
|
|
|
/**
|
|
* Update any section areas within the scope of the specified
|
|
* selector with AJAX equivalents
|
|
*
|
|
* @method _setup_for_section
|
|
* @private
|
|
* @param baseselector The selector to limit scope to
|
|
*/
|
|
_setup_for_section: function(section) {
|
|
var chooserspan = section.one(CSS.SECTIONMODCHOOSER);
|
|
if (!chooserspan) {
|
|
return;
|
|
}
|
|
var chooserlink = Y.Node.create("<a href='#' />");
|
|
chooserspan.get('children').each(function(node) {
|
|
chooserlink.appendChild(node);
|
|
});
|
|
chooserspan.insertBefore(chooserlink);
|
|
chooserlink.on('click', this.display_mod_chooser, this);
|
|
},
|
|
/**
|
|
* Display the module chooser
|
|
*
|
|
* @method display_mod_chooser
|
|
* @param {EventFacade} e Triggering Event
|
|
*/
|
|
display_mod_chooser: function(e) {
|
|
// Set the section for this version of the dialogue
|
|
if (e.target.ancestor(CSS.SITETOPIC)) {
|
|
// The site topic has a sectionid of 1
|
|
this.sectionid = 1;
|
|
} else if (e.target.ancestor(CSS.SECTION)) {
|
|
var section = e.target.ancestor(CSS.SECTION);
|
|
this.sectionid = section.get('id').replace('section-', '');
|
|
} else if (e.target.ancestor(CSS.SITEMENU)) {
|
|
// The block site menu has a sectionid of 0
|
|
this.sectionid = 0;
|
|
}
|
|
this.display_chooser(e);
|
|
},
|
|
|
|
/**
|
|
* Helper function to set the value of a hidden radio button when a
|
|
* selection is made.
|
|
*
|
|
* @method option_selected
|
|
* @param {String} thisoption The selected option value
|
|
* @private
|
|
*/
|
|
option_selected: function(thisoption) {
|
|
// Add the sectionid to the URL.
|
|
this.hiddenRadioValue.setAttrs({
|
|
name: 'jump',
|
|
value: thisoption.get('value') + '§ion=' + this.sectionid
|
|
});
|
|
}
|
|
},
|
|
{
|
|
NAME: MODCHOOSERNAME,
|
|
ATTRS: {
|
|
/**
|
|
* The maximum height (in pixels) of the activity chooser.
|
|
*
|
|
* @attribute maxheight
|
|
* @type Number
|
|
* @default 800
|
|
*/
|
|
maxheight: {
|
|
value: 800
|
|
}
|
|
}
|
|
});
|
|
M.course = M.course || {};
|
|
M.course.init_chooser = function(config) {
|
|
return new MODCHOOSER(config);
|
|
};
|
|
|
|
|
|
}, '@VERSION@', {"requires": ["moodle-core-chooserdialogue", "moodle-course-coursebase"]});
|
|
|