MDL-67818 check: Rename renderer to be less generic
[moodle.git] / course / format / topics / format.js
1 // Javascript functions for Topics 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="topics">
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 : 'topics',
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 {array} response ajax response
54  * @param {string} sectionfrom first affected section
55  * @param {string} sectionto last affected section
56  * @return void
57  */
58 M.course.format.process_sections = function(Y, sectionlist, response, sectionfrom, sectionto) {
59     var CSS = {
60         SECTIONNAME : 'sectionname'
61     },
62     SELECTORS = {
63         SECTIONLEFTSIDE : '.left .section-handle .icon'
64     };
66     if (response.action == 'move') {
67         // If moving up swap around 'sectionfrom' and 'sectionto' so the that loop operates.
68         if (sectionfrom > sectionto) {
69             var temp = sectionto;
70             sectionto = sectionfrom;
71             sectionfrom = temp;
72         }
74         // Update titles and move icons in all affected sections.
75         var ele, str, stridx, newstr;
77         for (var i = sectionfrom; i <= sectionto; i++) {
78             // Update section title.
79             var content = Y.Node.create('<span>' + response.sectiontitles[i] + '</span>');
80             sectionlist.item(i).all('.'+CSS.SECTIONNAME).setHTML(content);
81             // Update move icon.
82             ele = sectionlist.item(i).one(SELECTORS.SECTIONLEFTSIDE);
83             str = ele.getAttribute('alt');
84             stridx = str.lastIndexOf(' ');
85             newstr = str.substr(0, stridx +1) + i;
86             ele.setAttribute('alt', newstr);
87             ele.setAttribute('title', newstr); // For FireFox as 'alt' is not refreshed.
88         }
89     }
90 }