Merge branch 'MDL-74778-main' of https://github.com/roland04/moodle

This commit is contained in:
Sara Arjona 2023-12-13 17:44:22 +01:00
commit 0c699e9e06
No known key found for this signature in database
9 changed files with 4 additions and 210 deletions

View File

@ -1,90 +0,0 @@
// Javascript functions for Topics course format.
M.course = M.course || {};
M.course.format = M.course.format || {};
/**
* Get sections config for this format.
*
* The section structure is:
* <ul class="topics">
* <li class="section">...</li>
* <li class="section">...</li>
* ...
* </ul>
*
* @return {object} section list configuration
*/
M.course.format.get_config = function() {
return {
container_node: 'ul',
container_class: 'topics',
section_node: 'li',
section_class: 'section'
};
};
/**
* Swap section.
*
* @param {YUI} Y YUI3 instance
* @param {string} node1 node to swap to
* @param {string} node2 node to swap with
*/
M.course.format.swap_sections = function(Y, node1, node2) {
var CSS = {
COURSECONTENT: 'course-content',
SECTIONADDMENUS: 'section_add_menus'
};
var sectionlist = Y.Node.all('.' + CSS.COURSECONTENT + ' ' + M.course.format.get_section_selector(Y));
// Swap the non-ajax menus, noting these are not always present (depends on theme and user prefs).
if (sectionlist.item(node1).one('.' + CSS.SECTIONADDMENUS)) {
sectionlist.item(node1).one('.' + CSS.SECTIONADDMENUS).swap(sectionlist.item(node2).one('.' + CSS.SECTIONADDMENUS));
}
};
/**
* Process sections after ajax response.
*
* @param {YUI} Y YUI3 instance
* @param {NodeList} sectionlist of sections
* @param {array} response ajax response
* @param {string} sectionfrom first affected section
* @param {string} sectionto last affected section
*/
M.course.format.process_sections = function(Y, sectionlist, response, sectionfrom, sectionto) {
var CSS = {
SECTIONNAME: 'sectionname'
},
SELECTORS = {
SECTIONLEFTSIDE: '.left .section-handle .icon'
};
if (response.action == 'move') {
// If moving up swap around 'sectionfrom' and 'sectionto' so the that loop operates.
if (sectionfrom > sectionto) {
var temp = sectionto;
sectionto = sectionfrom;
sectionfrom = temp;
}
// Update titles and move icons in all affected sections.
var ele, str, stridx, newstr;
for (var i = sectionfrom; i <= sectionto; i++) {
// Update section title.
var content = Y.Node.create('<span>' + response.sectiontitles[i] + '</span>');
sectionlist.item(i).all('.' + CSS.SECTIONNAME).setHTML(content);
// Update the drag handle.
ele = sectionlist.item(i).one(SELECTORS.SECTIONLEFTSIDE).ancestor('.section-handle');
str = ele.getAttribute('title');
stridx = str.lastIndexOf(' ');
newstr = str.substr(0, stridx + 1) + i;
ele.setAttribute('title', newstr);
// Update the aria-label for the section.
sectionlist.item(i).setAttribute('aria-label', content.get('innerText').trim());
}
}
};

View File

@ -58,6 +58,3 @@ if (!empty($displaysection)) {
$outputclass = $format->get_output_classname('content');
$widget = new $outputclass($format);
echo $renderer->render($widget);
// Include course format js module.
$PAGE->requires->js('/course/format/topics/format.js');

View File

@ -445,7 +445,7 @@ class format_topics extends core_courseformat\base {
* @return array The list of javascript files required by the course format.
*/
public function get_required_jsfiles(): array {
return ['/course/format/topics/format.js'];
return [];
}
}

View File

@ -279,6 +279,6 @@ class format_topics_test extends \advanced_testcase {
$course = $generator->create_course(['format' => 'topics']);
$format = course_get_format($course);
$this->assertNotEmpty($format->get_required_jsfiles());
$this->assertEmpty($format->get_required_jsfiles());
}
}

View File

@ -1,101 +0,0 @@
// Javascript functions for Weeks course format
M.course = M.course || {};
M.course.format = M.course.format || {};
/**
* Get sections config for this format
*
* The section structure is:
* <ul class="weeks">
* <li class="section">...</li>
* <li class="section">...</li>
* ...
* </ul>
*
* @return {object} section list configuration
*/
M.course.format.get_config = function() {
return {
container_node : 'ul',
container_class : 'weeks',
section_node : 'li',
section_class : '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',
SECTIONADDMENUS : 'section_add_menus'
};
var sectionlist = Y.Node.all('.'+CSS.COURSECONTENT+' '+M.course.format.get_section_selector(Y));
// Swap the non-ajax menus, noting these are not always present (depends on theme and user prefs).
if (sectionlist.item(node1).one('.'+CSS.SECTIONADDMENUS)) {
sectionlist.item(node1).one('.' + CSS.SECTIONADDMENUS).swap(sectionlist.item(node2).one('.' + CSS.SECTIONADDMENUS));
}
}
/**
* Process sections after ajax response
*
* @param {YUI} Y YUI3 instance
* @param {NodeList} sectionlist of sections
* @param {array} response ajax response
* @param {string} sectionfrom first affected section
* @param {string} sectionto last affected section
* @return void
*/
M.course.format.process_sections = function(Y, sectionlist, response, sectionfrom, sectionto) {
var CSS = {
SECTIONNAME : 'sectionname'
},
SELECTORS = {
SECTIONLEFTSIDE : '.left .section-handle .icon'
};
if (response.action == 'move') {
// If moving up swap around 'sectionfrom' and 'sectionto' so the that loop operates.
if (sectionfrom > sectionto) {
var temp = sectionto;
sectionto = sectionfrom;
sectionfrom = temp;
}
// Update titles and move icons in all affected sections.
var ele, str, stridx, newstr;
for (var i = sectionfrom; i <= sectionto; i++) {
// Update section title.
var content = Y.Node.create('<span>' + response.sectiontitles[i] + '</span>');
sectionlist.item(i).all('.'+CSS.SECTIONNAME).setHTML(content);
// Update the drag handle.
ele = sectionlist.item(i).one(SELECTORS.SECTIONLEFTSIDE).ancestor('.section-handle');
str = ele.getAttribute('title');
stridx = str.lastIndexOf(' ');
newstr = str.substr(0, stridx +1) + i;
ele.setAttribute('title', newstr);
// Update the aria-label for the section.
sectionlist.item(i).setAttribute('aria-label', content.get('innerText').trim());
// Remove the current class as section has been moved.
sectionlist.item(i).removeClass('current');
}
// If there is a current section, apply corresponding class in order to highlight it.
if (response.current !== -1) {
// Add current class to the required section.
sectionlist.item(response.current).addClass('current');
}
}
}

View File

@ -51,5 +51,3 @@ if (!empty($displaysection)) {
$outputclass = $format->get_output_classname('content');
$output = new $outputclass($format);
echo $renderer->render($output);
$PAGE->requires->js('/course/format/weeks/format.js');

View File

@ -619,7 +619,7 @@ class format_weeks extends core_courseformat\base {
* @return array The list of javascript files required by the course format.
*/
public function get_required_jsfiles(): array {
return ['/course/format/weeks/format.js'];
return [];
}
}

View File

@ -276,6 +276,6 @@ class format_weeks_test extends \advanced_testcase {
$course = $generator->create_course(['format' => 'weeks']);
$format = course_get_format($course);
$this->assertNotEmpty($format->get_required_jsfiles());
$this->assertEmpty($format->get_required_jsfiles());
}
}

View File

@ -265,16 +265,6 @@ class outputrequirementslib_test extends \advanced_testcase {
0,
$wwwroot . $admin . 'environment.xml'
],
'Course Format JS (slasharguments on)' => [
'/course/format/topics/format.js',
1,
$wwwroot . '/lib/javascript.php/1/course/format/topics/format.js'
],
'Course Format JS (slasharguments off)' => [
'/course/format/topics/format.js',
0,
$wwwroot . '/lib/javascript.php?rev=1&jsfile=%2Fcourse%2Fformat%2Ftopics%2Fformat.js'
],
'Data JS' => [
'/mod/data/data.js',
1,