54312b42917e46ee93895fdeadb0cc7ec30d1e75
[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  * @module 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     /**
32      * The current section ID.
33      *
34      * @property sectionid
35      * @private
36      * @type Number
37      * @default null
38      */
39     sectionid : null,
41     /**
42      * Set up the activity chooser.
43      *
44      * @method initializer
45      */
46     initializer : function() {
47         var dialogue = Y.one('.chooserdialoguebody');
48         var header = Y.one('.choosertitle');
49         var params = {};
50         this.setup_chooser_dialogue(dialogue, header, params);
52         // Initialize existing sections and register for dynamically created sections
53         this.setup_for_section();
54         M.course.coursebase.register_module(this);
56         // Catch the page toggle
57         Y.all('.block_settings #settingsnav .type_course .modchoosertoggle a').on('click', this.toggle_mod_chooser, this);
58     },
60     /**
61      * Update any section areas within the scope of the specified
62      * selector with AJAX equivalents
63      *
64      * @method setup_for_section
65      * @param baseselector The selector to limit scope to
66      */
67     setup_for_section : function(baseselector) {
68         if (!baseselector) {
69             baseselector = CSS.PAGECONTENT;
70         }
72         // Setup for site topics
73         Y.one(baseselector).all(CSS.SITETOPIC).each(function(section) {
74             this._setup_for_section(section);
75         }, this);
77         // Setup for standard course topics
78         Y.one(baseselector).all(CSS.SECTION).each(function(section) {
79             this._setup_for_section(section);
80         }, this);
82         // Setup for the block site menu
83         Y.one(baseselector).all(CSS.SITEMENU).each(function(section) {
84             this._setup_for_section(section);
85         }, this);
86     },
88     /**
89      * Update any section areas within the scope of the specified
90      * selector with AJAX equivalents
91      *
92      * @method _setup_for_section
93      * @private
94      * @param baseselector The selector to limit scope to
95      */
96     _setup_for_section : function(section) {
97         var chooserspan = section.one(CSS.SECTIONMODCHOOSER);
98         if (!chooserspan) {
99             return;
100         }
101         var chooserlink = Y.Node.create("<a href='#' />");
102         chooserspan.get('children').each(function(node) {
103             chooserlink.appendChild(node);
104         });
105         chooserspan.insertBefore(chooserlink);
106         chooserlink.on('click', this.display_mod_chooser, this);
107     },
108     /**
109      * Display the module chooser
110      *
111      * @method display_mod_chooser
112      * @param {EventFacade} e Triggering Event
113      */
114     display_mod_chooser : function (e) {
115         // Set the section for this version of the dialogue
116         if (e.target.ancestor(CSS.SITETOPIC)) {
117             // The site topic has a sectionid of 1
118             this.sectionid = 1;
119         } else if (e.target.ancestor(CSS.SECTION)) {
120             var section = e.target.ancestor(CSS.SECTION);
121             this.sectionid = section.get('id').replace('section-', '');
122         } else if (e.target.ancestor(CSS.SITEMENU)) {
123             // The block site menu has a sectionid of 0
124             this.sectionid = 0;
125         }
126         this.display_chooser(e);
127     },
129     /**
130      * Toggle availability of the activity chooser.
131      *
132      * @method toggle_mod_chooser
133      * @param {EventFacade} e
134      */
135     toggle_mod_chooser : function(e) {
136         // Get the add section link
137         var modchooserlinks = Y.all('div.addresourcemodchooser');
139         // Get the dropdowns
140         var dropdowns = Y.all('div.addresourcedropdown');
142         if (modchooserlinks.size() === 0) {
143             // Continue with non-js action if there are no modchoosers to add
144             return;
145         }
147         // We need to update the text and link
148         var togglelink = Y.one('.block_settings #settingsnav .type_course .modchoosertoggle a');
150         // The actual text is in the last child
151         var toggletext = togglelink.get('lastChild');
153         var usemodchooser;
154         // Determine whether they're currently hidden
155         if (modchooserlinks.item(0).hasClass('visibleifjs')) {
156             // The modchooser is currently visible, hide it
157             usemodchooser = 0;
158             modchooserlinks
159                 .removeClass('visibleifjs')
160                 .addClass('hiddenifjs');
161             dropdowns
162                 .addClass('visibleifjs')
163                 .removeClass('hiddenifjs');
164             toggletext.set('data', M.util.get_string('modchooserenable', 'moodle'));
165             togglelink.set('href', togglelink.get('href').replace('off', 'on'));
166         } else {
167             // The modchooser is currently not visible, show it
168             usemodchooser = 1;
169             modchooserlinks
170                 .addClass('visibleifjs')
171                 .removeClass('hiddenifjs');
172             dropdowns
173                 .removeClass('visibleifjs')
174                 .addClass('hiddenifjs');
175             toggletext.set('data', M.util.get_string('modchooserdisable', 'moodle'));
176             togglelink.set('href', togglelink.get('href').replace('on', 'off'));
177         }
179         M.util.set_user_preference('usemodchooser', usemodchooser);
181         // Prevent the page from reloading
182         e.preventDefault();
183     },
185     /**
186      * Helper function to set the value of a hidden radio button when a
187      * selection is made.
188      *
189      * @method option_selected
190      * @param {String} thisoption The selected option value
191      * @private
192      */
193     option_selected : function(thisoption) {
194         // Add the sectionid to the URL.
195         this.hiddenRadioValue.setAttrs({
196             name: 'jump',
197             value: thisoption.get('value') + '&section=' + this.sectionid
198         });
199     }
200 },
202     NAME : MODCHOOSERNAME,
203     ATTRS : {
204         /**
205          * The maximum height (in pixels) of the activity chooser.
206          *
207          * @attribute maxheight
208          * @type Number
209          * @default 800
210          */
211         maxheight : {
212             value : 800
213         }
214     }
215 });
216 M.course = M.course || {};
217 M.course.init_chooser = function(config) {
218     return new MODCHOOSER(config);
219 };
222 }, '@VERSION@', {"requires": ["moodle-core-chooserdialogue", "moodle-course-coursebase"]});