MDL-35423 JavaScript: Reduce specifity of course AJAX
[moodle.git] / course / yui / build / moodle-course-modchooser / moodle-course-modchooser-debug.js
1 YUI.add('moodle-course-modchooser', function (Y, NAME) {
3 /**
4  * The activity chooser dialogue for courses.
5  *
6  * @moodle-course-modchooser
7  */
9 var CSS = {
10     PAGECONTENT : 'body',
11     SECTION : 'li.section',
12     SECTIONMODCHOOSER : 'span.section-modchooser-link',
13     SITEMENU : 'div.block_site_main_menu',
14     SITETOPIC : 'div.sitetopic'
15 };
17 var MODCHOOSERNAME = 'course-modchooser';
19 /**
20  * The activity chooser dialogue for courses.
21  *
22  * @constructor
23  * @class M.course.modchooser
24  * @extends M.core.chooserdialogue
25  */
26 var MODCHOOSER = function() {
27     MODCHOOSER.superclass.constructor.apply(this, arguments);
28 };
30 Y.extend(MODCHOOSER, M.core.chooserdialogue, {
31     // The current section ID
32     sectionid : null,
34     // The hidden element holding the jump param
35     jumplink : null,
37     initializer : function() {
38         var dialogue = Y.one('.chooserdialoguebody');
39         var header = Y.one('.choosertitle');
40         var params = {};
41         this.setup_chooser_dialogue(dialogue, header, params);
43         // Initialize existing sections and register for dynamically created sections
44         this.setup_for_section();
45         M.course.coursebase.register_module(this);
47         // Catch the page toggle
48         Y.all('.block_settings #settingsnav .type_course .modchoosertoggle a').on('click', this.toggle_mod_chooser, this);
49     },
50     /**
51      * Update any section areas within the scope of the specified
52      * selector with AJAX equivalents
53      *
54      * @param baseselector The selector to limit scope to
55      * @return void
56      */
57     setup_for_section : function(baseselector) {
58         if (!baseselector) {
59             baseselector = CSS.PAGECONTENT;
60         }
62         // Setup for site topics
63         Y.one(baseselector).all(CSS.SITETOPIC).each(function(section) {
64             this._setup_for_section(section);
65         }, this);
67         // Setup for standard course topics
68         Y.one(baseselector).all(CSS.SECTION).each(function(section) {
69             this._setup_for_section(section);
70         }, this);
72         // Setup for the block site menu
73         Y.one(baseselector).all(CSS.SITEMENU).each(function(section) {
74             this._setup_for_section(section);
75         }, this);
76     },
77     _setup_for_section : function(section) {
78         var chooserspan = section.one(CSS.SECTIONMODCHOOSER);
79         if (!chooserspan) {
80             return;
81         }
82         var chooserlink = Y.Node.create("<a href='#' />");
83         chooserspan.get('children').each(function(node) {
84             chooserlink.appendChild(node);
85         });
86         chooserspan.insertBefore(chooserlink);
87         chooserlink.on('click', this.display_mod_chooser, this);
88     },
89     /**
90         * Display the module chooser
91         *
92         * @param e Event Triggering Event
93         * @param secitonid integer The ID of the section triggering the dialogue
94         * @return void
95         */
96     display_mod_chooser : function (e) {
97         // Set the section for this version of the dialogue
98         if (e.target.ancestor(CSS.SITETOPIC)) {
99             // The site topic has a sectionid of 1
100             this.sectionid = 1;
101         } else if (e.target.ancestor(CSS.SECTION)) {
102             var section = e.target.ancestor(CSS.SECTION);
103             this.sectionid = section.get('id').replace('section-', '');
104         } else if (e.target.ancestor(CSS.SITEMENU)) {
105             // The block site menu has a sectionid of 0
106             this.sectionid = 0;
107         }
108         this.display_chooser(e);
109     },
110     toggle_mod_chooser : function(e) {
111         // Get the add section link
112         var modchooserlinks = Y.all('div.addresourcemodchooser');
114         // Get the dropdowns
115         var dropdowns = Y.all('div.addresourcedropdown');
117         if (modchooserlinks.size() === 0) {
118             // Continue with non-js action if there are no modchoosers to add
119             return;
120         }
122         // We need to update the text and link
123         var togglelink = Y.one('.block_settings #settingsnav .type_course .modchoosertoggle a');
125         // The actual text is in the last child
126         var toggletext = togglelink.get('lastChild');
128         var usemodchooser;
129         // Determine whether they're currently hidden
130         if (modchooserlinks.item(0).hasClass('visibleifjs')) {
131             // The modchooser is currently visible, hide it
132             usemodchooser = 0;
133             modchooserlinks
134                 .removeClass('visibleifjs')
135                 .addClass('hiddenifjs');
136             dropdowns
137                 .addClass('visibleifjs')
138                 .removeClass('hiddenifjs');
139             toggletext.set('data', M.util.get_string('modchooserenable', 'moodle'));
140             togglelink.set('href', togglelink.get('href').replace('off', 'on'));
141         } else {
142             // The modchooser is currently not visible, show it
143             usemodchooser = 1;
144             modchooserlinks
145                 .addClass('visibleifjs')
146                 .removeClass('hiddenifjs');
147             dropdowns
148                 .removeClass('visibleifjs')
149                 .addClass('hiddenifjs');
150             toggletext.set('data', M.util.get_string('modchooserdisable', 'moodle'));
151             togglelink.set('href', togglelink.get('href').replace('on', 'off'));
152         }
154         M.util.set_user_preference('usemodchooser', usemodchooser);
156         // Prevent the page from reloading
157         e.preventDefault();
158     },
159     option_selected : function(thisoption) {
160         // Add the sectionid to the URL
161         this.jumplink.set('value', thisoption.get('value') + '&section=' + this.sectionid);
162     }
163 },
165     NAME : MODCHOOSERNAME,
166     ATTRS : {
167         maxheight : {
168             value : 800
169         }
170     }
171 });
172 M.course = M.course || {};
173 M.course.init_chooser = function(config) {
174     return new MODCHOOSER(config);
175 };
178 }, '@VERSION@', {"requires": ["moodle-core-chooserdialogue", "moodle-course-coursebase"]});