mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 05:58:34 +01:00
MDL-32657: course dragdrop: define elements changes within the format
It allows to define M.course.format.swap_sections and M.course.format.get_section_selector in the course format javascript file, so that course dragdrop is aware about perculiar layout and changes that need to be done when sections are swapped.
This commit is contained in:
parent
aa753ac24f
commit
c77582fe42
43
course/format/weeks/format.js
Normal file
43
course/format/weeks/format.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Javascript functions for course format
|
||||||
|
|
||||||
|
M.course = M.course || {};
|
||||||
|
|
||||||
|
M.course.format = M.course.format || {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get section list for this format
|
||||||
|
*
|
||||||
|
* @param {YUI} Y YUI3 instance
|
||||||
|
* @return {string} section list selector
|
||||||
|
*/
|
||||||
|
M.course.format.get_section_selector = function(Y) {
|
||||||
|
return 'li.section';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Swap section
|
||||||
|
*
|
||||||
|
* @param {YUI} Y YUI3 instance
|
||||||
|
* @param {string} node1 node to swap to
|
||||||
|
* @param {string} node2 node to swap with
|
||||||
|
* @return {NodeList} section list
|
||||||
|
*/
|
||||||
|
M.course.format.swap_sections = function(Y, node1, node2) {
|
||||||
|
var CSS = {
|
||||||
|
COURSECONTENT : 'course-content',
|
||||||
|
LEFT : 'left',
|
||||||
|
RIGHT : 'right',
|
||||||
|
SECTIONADDMENUS : 'section_add_menus',
|
||||||
|
WEEKDATES: 'weekdates'
|
||||||
|
};
|
||||||
|
|
||||||
|
var sectionlist = Y.Node.all('.'+CSS.COURSECONTENT+' '+M.course.format.get_section_selector(Y));
|
||||||
|
// Swap left block
|
||||||
|
sectionlist.item(node1).one('.'+CSS.LEFT).swap(sectionlist.item(node2).one('.'+CSS.LEFT));
|
||||||
|
// Swap right block
|
||||||
|
sectionlist.item(node1).one('.'+CSS.RIGHT).swap(sectionlist.item(node2).one('.'+CSS.RIGHT));
|
||||||
|
// Swap menus
|
||||||
|
sectionlist.item(node1).one('.'+CSS.SECTIONADDMENUS).swap(sectionlist.item(node2).one('.'+CSS.SECTIONADDMENUS));
|
||||||
|
// Swap week dates
|
||||||
|
sectionlist.item(node1).one('.'+CSS.WEEKDATES).swap(sectionlist.item(node2).one('.'+CSS.WEEKDATES));
|
||||||
|
}
|
@ -286,3 +286,6 @@ defined('MOODLE_INTERNAL') || die();
|
|||||||
$select->formid = 'sectionmenu';
|
$select->formid = 'sectionmenu';
|
||||||
echo $OUTPUT->render($select);
|
echo $OUTPUT->render($select);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Include course format js module
|
||||||
|
$PAGE->requires->js('/course/format/weeks/format.js');
|
||||||
|
@ -4504,14 +4504,14 @@ function include_course_ajax($course, $modules = array(), $config = null) {
|
|||||||
|
|
||||||
// Include course dragdrop
|
// Include course dragdrop
|
||||||
if ($course->id != SITEID) {
|
if ($course->id != SITEID) {
|
||||||
$PAGE->requires->yui_module('moodle-course-dragdrop', 'M.core_course.init_section_dragdrop',
|
$PAGE->requires->yui_module('moodle-course-dragdrop', 'M.course.init_section_dragdrop',
|
||||||
array(array(
|
array(array(
|
||||||
'courseid' => $course->id,
|
'courseid' => $course->id,
|
||||||
'ajaxurl' => $config->sectionurl,
|
'ajaxurl' => $config->sectionurl,
|
||||||
'config' => $config,
|
'config' => $config,
|
||||||
)), null, true);
|
)), null, true);
|
||||||
|
|
||||||
$PAGE->requires->yui_module('moodle-course-dragdrop', 'M.core_course.init_resource_dragdrop',
|
$PAGE->requires->yui_module('moodle-course-dragdrop', 'M.course.init_resource_dragdrop',
|
||||||
array(array(
|
array(array(
|
||||||
'courseid' => $course->id,
|
'courseid' => $course->id,
|
||||||
'ajaxurl' => $config->resourceurl,
|
'ajaxurl' => $config->resourceurl,
|
||||||
|
54
course/yui/dragdrop/dragdrop.js
vendored
54
course/yui/dragdrop/dragdrop.js
vendored
@ -25,6 +25,8 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
DRAGSECTION.superclass.constructor.apply(this, arguments);
|
DRAGSECTION.superclass.constructor.apply(this, arguments);
|
||||||
};
|
};
|
||||||
Y.extend(DRAGSECTION, M.core.dragdrop, {
|
Y.extend(DRAGSECTION, M.core.dragdrop, {
|
||||||
|
sectionlistselector : null,
|
||||||
|
|
||||||
initializer : function(params) {
|
initializer : function(params) {
|
||||||
// Set group for parent class
|
// Set group for parent class
|
||||||
this.groups = ['section'];
|
this.groups = ['section'];
|
||||||
@ -36,8 +38,12 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Initialise sections dragging
|
// Initialise sections dragging
|
||||||
this.setup_for_section('.'+CSS.COURSECONTENT+' li.'+CSS.SECTION);
|
try {
|
||||||
M.course.coursebase.register_module(this);
|
this.sectionlistselector = '.'+CSS.COURSECONTENT+' '+M.course.format.get_section_selector(Y);
|
||||||
|
} catch (e) {
|
||||||
|
this.sectionlistselector = '.'+CSS.COURSECONTENT+' li.'+CSS.SECTION;
|
||||||
|
}
|
||||||
|
this.setup_for_section(this.sectionlistselector);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -131,7 +137,7 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
|
|
||||||
// Get the list of nodes
|
// Get the list of nodes
|
||||||
drag.get('dragNode').removeClass(CSS.COURSECONTENT);
|
drag.get('dragNode').removeClass(CSS.COURSECONTENT);
|
||||||
var sectionlist = Y.Node.all('.'+CSS.COURSECONTENT+' li.'+CSS.SECTION);
|
var sectionlist = Y.Node.all(this.sectionlistselector);
|
||||||
|
|
||||||
// Add lightbox if it not there
|
// Add lightbox if it not there
|
||||||
var lightbox = M.util.add_lightbox(Y, dragnode);
|
var lightbox = M.util.add_lightbox(Y, dragnode);
|
||||||
@ -176,16 +182,16 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
var sectionid = sectionlist.item(i-1).get('id');
|
var sectionid = sectionlist.item(i-1).get('id');
|
||||||
sectionlist.item(i-1).set('id', sectionlist.item(i).get('id'));
|
sectionlist.item(i-1).set('id', sectionlist.item(i).get('id'));
|
||||||
sectionlist.item(i).set('id', sectionid);
|
sectionlist.item(i).set('id', sectionid);
|
||||||
// Swap left block
|
// See what format needs to be swapped
|
||||||
sectionlist.item(i-1).one('.'+CSS.LEFT).swap(sectionlist.item(i).one('.'+CSS.LEFT));
|
try {
|
||||||
// Swap right block
|
M.course.format.swap_sections(Y, i-1, i);
|
||||||
sectionlist.item(i-1).one('.'+CSS.RIGHT).swap(sectionlist.item(i).one('.'+CSS.RIGHT));
|
} catch (e) {
|
||||||
// Swap menus
|
// Swap left block
|
||||||
sectionlist.item(i-1).one('.'+CSS.SECTIONADDMENUS).swap(sectionlist.item(i).one('.'+CSS.SECTIONADDMENUS));
|
sectionlist.item(i-1).one('.'+CSS.LEFT).swap(sectionlist.item(i).one('.'+CSS.LEFT));
|
||||||
// Swap week dates if in weekly format
|
// Swap right block
|
||||||
var weekdates = sectionlist.item(i-1).one('.'+CSS.WEEKDATES);
|
sectionlist.item(i-1).one('.'+CSS.RIGHT).swap(sectionlist.item(i).one('.'+CSS.RIGHT));
|
||||||
if (weekdates) {
|
// Swap menus
|
||||||
weekdates.swap(sectionlist.item(i).one('.'+CSS.WEEKDATES));
|
sectionlist.item(i-1).one('.'+CSS.SECTIONADDMENUS).swap(sectionlist.item(i).one('.'+CSS.SECTIONADDMENUS));
|
||||||
}
|
}
|
||||||
// Update flag
|
// Update flag
|
||||||
swapped = true;
|
swapped = true;
|
||||||
@ -229,7 +235,13 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
this.parentnodeclass = CSS.SECTION;
|
this.parentnodeclass = CSS.SECTION;
|
||||||
|
|
||||||
// Go through all sections
|
// Go through all sections
|
||||||
this.setup_for_section('.'+CSS.COURSECONTENT+' li.'+CSS.SECTION);
|
try {
|
||||||
|
var sectionlistselector = '.'+CSS.COURSECONTENT+' '+M.course.format.get_section_selector(Y);
|
||||||
|
} catch (e) {
|
||||||
|
var sectionlistselector = '.'+CSS.COURSECONTENT+' li.'+CSS.SECTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setup_for_section(sectionlistselector);
|
||||||
M.course.coursebase.register_module(this);
|
M.course.coursebase.register_module(this);
|
||||||
M.course.dragres = this;
|
M.course.dragres = this;
|
||||||
},
|
},
|
||||||
@ -311,6 +323,12 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
var dragnode = drag.get('node');
|
var dragnode = drag.get('node');
|
||||||
var dropnode = e.drop.get('node');
|
var dropnode = e.drop.get('node');
|
||||||
|
|
||||||
|
try {
|
||||||
|
var sectionselector = M.course.format.get_section_selector(Y);
|
||||||
|
} catch (e) {
|
||||||
|
var sectionselector = 'li.'+CSS.SECTION;
|
||||||
|
}
|
||||||
|
|
||||||
var params = {};
|
var params = {};
|
||||||
|
|
||||||
// Handle any variables which we must pass back through to
|
// Handle any variables which we must pass back through to
|
||||||
@ -325,7 +343,7 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
params['class'] = 'resource';
|
params['class'] = 'resource';
|
||||||
params.field = 'move';
|
params.field = 'move';
|
||||||
params.id = Number(this.get_resource_id(dragnode));
|
params.id = Number(this.get_resource_id(dragnode));
|
||||||
params.sectionId = this.get_section_id(dropnode.ancestor('li.'+CSS.SECTION));
|
params.sectionId = this.get_section_id(dropnode.ancestor(sectionselector));
|
||||||
|
|
||||||
if (dragnode.next()) {
|
if (dragnode.next()) {
|
||||||
params.beforeId = Number(this.get_resource_id(dragnode.next()));
|
params.beforeId = Number(this.get_resource_id(dragnode.next()));
|
||||||
@ -368,11 +386,11 @@ YUI.add('moodle-course-dragdrop', function(Y) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
M.core_course = M.core_course || {};
|
M.course = M.course || {};
|
||||||
M.core_course.init_resource_dragdrop = function(params) {
|
M.course.init_resource_dragdrop = function(params) {
|
||||||
new DRAGRESOURCE(params);
|
new DRAGRESOURCE(params);
|
||||||
}
|
}
|
||||||
M.core_course.init_section_dragdrop = function(params) {
|
M.course.init_section_dragdrop = function(params) {
|
||||||
new DRAGSECTION(params);
|
new DRAGSECTION(params);
|
||||||
}
|
}
|
||||||
}, '@VERSION@', {requires:['base', 'node', 'io', 'dom', 'dd', 'moodle-core-dragdrop', 'moodle-enrol-notification', 'moodle-course-coursebase']});
|
}, '@VERSION@', {requires:['base', 'node', 'io', 'dom', 'dd', 'moodle-core-dragdrop', 'moodle-enrol-notification', 'moodle-course-coursebase']});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user