MDL-31830 course: improvements to JS coding style
[moodle.git] / course / yui / src / management / js / course.js
1 /**
2  * A managed course.
3  *
4  * @namespace M.course.management
5  * @class Course
6  * @constructor
7  * @extends Item
8  */
9 function Course() {
10     Course.superclass.constructor.apply(this, arguments);
11 }
12 Course.NAME = 'moodle-course-management-course';
13 Course.CSS_PREFIX = 'management-course';
14 Course.ATTRS = {
16     /**
17      * The course ID of this course.
18      * @attribute courseid
19      * @type Number
20      */
21     courseid : {},
23     /**
24      * True if this is the selected course.
25      * @attribute selected
26      * @type Boolean
27      * @default null
28      */
29     selected : {
30         getter : function(value, name) {
31             if (value === null) {
32                 value = this.get('node').getData(name);
33                 this.set(name, value);
34             }
35             return value;
36         },
37         value : null
38     },
39     node : {
41     },
42     /**
43      * The management console tracking this course.
44      * @attribute console
45      * @type Console
46      * @writeOnce
47      */
48     console : {
49         writeOnce : 'initOnly'
50     },
52     /**
53      * The category this course belongs to.
54      * @attribute category
55      * @type Category
56      * @writeOnce
57      */
58     category : {
59         writeOnce : 'initOnly'
60     }
61 };
62 Course.prototype = {
63     /**
64      * Initialises the new course instance.
65      * @method initializer
66      */
67     initializer : function() {
68         var node = this.get('node'),
69             category = this.get('category');
70         this.set('courseid', node.getData('id'));
71         if (category && category.registerCourse) {
72             category.registerCourse(this);
73         }
74         this.set('itemname', 'course');
75     },
77     /**
78      * Returns the name of the course.
79      * @method getName
80      * @returns {String}
81      */
82     getName : function() {
83         return this.get('node').one('a.coursename').get('innerHTML');
84     },
86     /**
87      * Handles an event relating to this course.
88      * @method handle
89      * @param {String} action
90      * @param {EventFacade} e
91      * @returns {Boolean}
92      */
93     handle : function(action, e) {
94         var console = this.get('console'),
95             args = {courseid : this.get('courseid')};
96         switch (action) {
97             case 'moveup':
98                 e.halt();
99                 console.performAjaxAction('movecourseup', args, this.moveup, this);
100                 break;
101             case 'movedown':
102                 e.halt();
103                 console.performAjaxAction('movecoursedown', args, this.movedown, this);
104                 break;
105             case 'show':
106                 e.halt();
107                 console.performAjaxAction('showcourse', args, this.show, this);
108                 break;
109             case 'hide':
110                 e.halt();
111                 console.performAjaxAction('hidecourse', args, this.hide, this);
112                 break;
113             default:
114                 Y.log('Invalid AJAX action requested of managed course.', 'warn', 'moodle-course-management');
115                 return false;
116         }
117     },
119     /**
120      * Removes this course.
121      * @method remove
122      */
123     remove : function() {
124         this.get('console').removeCourseById(this.get('courseid'));
125         this.get('node').remove();
126     },
128     /**
129      * Moves this course after another course.
130      *
131      * @method moveAfter
132      * @param {Number} moveaftercourse The course to move after or 0 to put it at the top.
133      * @param {Number} previousid the course it was previously after in case we need to revert.
134      */
135     moveAfter : function(moveaftercourse, previousid) {
136         var console = this.get('console'),
137             args = {
138                 courseid : this.get('courseid'),
139                 moveafter : moveaftercourse,
140                 previous : previousid
141             };
142         console.performAjaxAction('movecourseafter', args, this.moveAfterResponse, this);
143     },
145     /**
146      * Performs the actual move.
147      *
148      * @method moveAfterResponse
149      * @protected
150      * @param {Number} transactionid The transaction ID for the request.
151      * @param {Object} response The response to the request.
152      * @param {Objects} args The arguments that were given with the request.
153      * @returns {Boolean}
154      */
155     moveAfterResponse : function(transactionid, response, args) {
156         var outcome = this.checkAjaxResponse(transactionid, response, args),
157             node = this.get('node'),
158             previous;
159         if (outcome === false) {
160             previous = node.ancestor('ul').one('li[data-id='+args.previous+']');
161             Y.log('AJAX failed to move this course after the requested course', 'warn', 'moodle-course-management');
162             if (previous) {
163                 // After the last previous.
164                 previous.insertAfter(node, 'after');
165             } else {
166                 // Start of the list.
167                 node.ancestor('ul').one('li').insert(node, 'before');
168             }
169             return false;
170         }
171         Y.log('AJAX successfully moved course ('+this.getName()+')', 'info', 'moodle-course-management');
172         this.highlight();
173     }
174 };
175 Y.extend(Course, Item, Course.prototype);