mirror of
https://github.com/moodle/moodle.git
synced 2025-01-31 12:45:04 +01:00
Merge branch 'MDL-74778-main' of https://github.com/roland04/moodle
This commit is contained in:
commit
0c699e9e06
@ -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());
|
||||
}
|
||||
}
|
||||
};
|
@ -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');
|
||||
|
@ -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 [];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
||||
}
|
@ -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');
|
||||
|
@ -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 [];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user