Merge branch 'MDL-35423-master' of git://github.com/andrewnicols/moodle
[moodle.git] / course / yui / build / moodle-course-modchooser / moodle-course-modchooser.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     initializer : function() {
35         var dialogue = Y.one('.chooserdialoguebody');
36         var header = Y.one('.choosertitle');
37         var params = {};
38         this.setup_chooser_dialogue(dialogue, header, params);
40         // Initialize existing sections and register for dynamically created sections
41         this.setup_for_section();
42         M.course.coursebase.register_module(this);
44         // Catch the page toggle
45         Y.all('.block_settings #settingsnav .type_course .modchoosertoggle a').on('click', this.toggle_mod_chooser, this);
46     },
47     /**
48      * Update any section areas within the scope of the specified
49      * selector with AJAX equivalents
50      *
51      * @param baseselector The selector to limit scope to
52      * @return void
53      */
54     setup_for_section : function(baseselector) {
55         if (!baseselector) {
56             baseselector = CSS.PAGECONTENT;
57         }
59         // Setup for site topics
60         Y.one(baseselector).all(CSS.SITETOPIC).each(function(section) {
61             this._setup_for_section(section);
62         }, this);
64         // Setup for standard course topics
65         Y.one(baseselector).all(CSS.SECTION).each(function(section) {
66             this._setup_for_section(section);
67         }, this);
69         // Setup for the block site menu
70         Y.one(baseselector).all(CSS.SITEMENU).each(function(section) {
71             this._setup_for_section(section);
72         }, this);
73     },
74     _setup_for_section : function(section) {
75         var chooserspan = section.one(CSS.SECTIONMODCHOOSER);
76         if (!chooserspan) {
77             return;
78         }
79         var chooserlink = Y.Node.create("<a href='#' />");
80         chooserspan.get('children').each(function(node) {
81             chooserlink.appendChild(node);
82         });
83         chooserspan.insertBefore(chooserlink);
84         chooserlink.on('click', this.display_mod_chooser, this);
85     },
86     /**
87         * Display the module chooser
88         *
89         * @param e Event Triggering Event
90         * @param secitonid integer The ID of the section triggering the dialogue
91         * @return void
92         */
93     display_mod_chooser : function (e) {
94         // Set the section for this version of the dialogue
95         if (e.target.ancestor(CSS.SITETOPIC)) {
96             // The site topic has a sectionid of 1
97             this.sectionid = 1;
98         } else if (e.target.ancestor(CSS.SECTION)) {
99             var section = e.target.ancestor(CSS.SECTION);
100             this.sectionid = section.get('id').replace('section-', '');
101         } else if (e.target.ancestor(CSS.SITEMENU)) {
102             // The block site menu has a sectionid of 0
103             this.sectionid = 0;
104         }
105         this.display_chooser(e);
106     },
107     toggle_mod_chooser : function(e) {
108         // Get the add section link
109         var modchooserlinks = Y.all('div.addresourcemodchooser');
111         // Get the dropdowns
112         var dropdowns = Y.all('div.addresourcedropdown');
114         if (modchooserlinks.size() === 0) {
115             // Continue with non-js action if there are no modchoosers to add
116             return;
117         }
119         // We need to update the text and link
120         var togglelink = Y.one('.block_settings #settingsnav .type_course .modchoosertoggle a');
122         // The actual text is in the last child
123         var toggletext = togglelink.get('lastChild');
125         var usemodchooser;
126         // Determine whether they're currently hidden
127         if (modchooserlinks.item(0).hasClass('visibleifjs')) {
128             // The modchooser is currently visible, hide it
129             usemodchooser = 0;
130             modchooserlinks
131                 .removeClass('visibleifjs')
132                 .addClass('hiddenifjs');
133             dropdowns
134                 .addClass('visibleifjs')
135                 .removeClass('hiddenifjs');
136             toggletext.set('data', M.util.get_string('modchooserenable', 'moodle'));
137             togglelink.set('href', togglelink.get('href').replace('off', 'on'));
138         } else {
139             // The modchooser is currently not visible, show it
140             usemodchooser = 1;
141             modchooserlinks
142                 .addClass('visibleifjs')
143                 .removeClass('hiddenifjs');
144             dropdowns
145                 .removeClass('visibleifjs')
146                 .addClass('hiddenifjs');
147             toggletext.set('data', M.util.get_string('modchooserdisable', 'moodle'));
148             togglelink.set('href', togglelink.get('href').replace('on', 'off'));
149         }
151         M.util.set_user_preference('usemodchooser', usemodchooser);
153         // Prevent the page from reloading
154         e.preventDefault();
155     },
156     option_selected : function(thisoption) {
157         // Add the sectionid to the URL.
158         this.hiddenRadioValue.setAttrs({
159             name: 'jump',
160             value: thisoption.get('value') + '&section=' + this.sectionid
161         });
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"]});