Merge branch 'MDL-67818-check-api-fixes' of https://github.com/brendanheywood/moodle
[moodle.git] / course / format / weeks / format.js
1 // Javascript functions for Weeks course format
3 M.course = M.course || {};
5 M.course.format = M.course.format || {};
7 /**
8  * Get sections config for this format
9  *
10  * The section structure is:
11  * <ul class="weeks">
12  *  <li class="section">...</li>
13  *  <li class="section">...</li>
14  *   ...
15  * </ul>
16  *
17  * @return {object} section list configuration
18  */
19 M.course.format.get_config = function() {
20     return {
21         container_node : 'ul',
22         container_class : 'weeks',
23         section_node : 'li',
24         section_class : 'section'
25     };
26 }
28 /**
29  * Swap section
30  *
31  * @param {YUI} Y YUI3 instance
32  * @param {string} node1 node to swap to
33  * @param {string} node2 node to swap with
34  * @return {NodeList} section list
35  */
36 M.course.format.swap_sections = function(Y, node1, node2) {
37     var CSS = {
38         COURSECONTENT : 'course-content',
39         SECTIONADDMENUS : 'section_add_menus'
40     };
42     var sectionlist = Y.Node.all('.'+CSS.COURSECONTENT+' '+M.course.format.get_section_selector(Y));
43     // Swap the non-ajax menus, noting these are not always present (depends on theme and user prefs).
44     if (sectionlist.item(node1).one('.'+CSS.SECTIONADDMENUS)) {
45         sectionlist.item(node1).one('.' + CSS.SECTIONADDMENUS).swap(sectionlist.item(node2).one('.' + CSS.SECTIONADDMENUS));
46     }
47 }
49 /**
50  * Process sections after ajax response
51  *
52  * @param {YUI} Y YUI3 instance
53  * @param {NodeList} sectionlist of sections
54  * @param {array} response ajax response
55  * @param {string} sectionfrom first affected section
56  * @param {string} sectionto last affected section
57  * @return void
58  */
59 M.course.format.process_sections = function(Y, sectionlist, response, sectionfrom, sectionto) {
60     var CSS = {
61         SECTIONNAME : 'sectionname'
62     },
63     SELECTORS = {
64         SECTIONLEFTSIDE : '.left .section-handle .icon'
65     };
67     if (response.action == 'move') {
68         // If moving up swap around 'sectionfrom' and 'sectionto' so the that loop operates.
69         if (sectionfrom > sectionto) {
70             var temp = sectionto;
71             sectionto = sectionfrom;
72             sectionfrom = temp;
73         }
75         // Update titles and move icons in all affected sections.
76         var ele, str, stridx, newstr;
78         for (var i = sectionfrom; i <= sectionto; i++) {
79             // Update section title.
80             var content = Y.Node.create('<span>' + response.sectiontitles[i] + '</span>');
81             sectionlist.item(i).all('.'+CSS.SECTIONNAME).setHTML(content);
83             // Update the drag handle.
84             ele = sectionlist.item(i).one(SELECTORS.SECTIONLEFTSIDE).ancestor('.section-handle');
85             str = ele.getAttribute('title');
86             stridx = str.lastIndexOf(' ');
87             newstr = str.substr(0, stridx +1) + i;
88             ele.setAttribute('title', newstr);
89             // Update the aria-label for the section.
90             sectionlist.item(i).setAttribute('aria-label', content.get('innerText').trim());
92             // Remove the current class as section has been moved.
93             sectionlist.item(i).removeClass('current');
94         }
95         // If there is a current section, apply corresponding class in order to highlight it.
96         if (response.current !== -1) {
97             // Add current class to the required section.
98             sectionlist.item(response.current).addClass('current');
99         }
100     }