Bumping version for 1.8.9 release. Thinking we might have to go to x.x.10 for the...
[moodle.git] / lib / ajax / ajaxcourse.js
blobcc870f3acb4bf989c93b4bef9829f1e2eef129ca
1 /**
2  * Contains Main class and supporting functions for ajax course layout
3  *
4  * $Id$
5  */
8 //hide content body until done loading (manipulation looks ugly elsewise)
9 //document.getElementById('content').style.display = 'none';
12 //onload object for handling scripts on page load, this insures they run in my order
13 function onload_class() {
14     this.scripts = new Array();
15     this.debug = true;
19 onload_class.prototype.add = function(script) {
20     if (this.debug) {
21                 YAHOO.log("onloadobj.add - adding "+script, "junk");
22         }
23     this.scripts[this.scripts.length] = script;
27 onload_class.prototype.load = function() {
28     var scriptcount = this.scripts.length;
29         if (this.debug) {
30                 YAHOO.log("onloadobj.load - loading "+scriptcount+" scripts", "info");
31         }
32     for (i=0; i<scriptcount; i++) {
33         eval(this.scripts[i]);
34     }
38 var onloadobj = new onload_class();
41 //main page object
42 function main_class() {
43         this.debug = true;
44     this.portal = new php_portal_class();
46     this.blocks = new Array();
47     this.sections = new Array();
48     this.leftcolumn = null;
49     this.rightcolumn = null;
50     this.adminBlock = null;
51     this.icons = [];
52     this.marker = null;
54     //things to process onload
55     onloadobj.add('main.process_document();');
56     onloadobj.add("document.getElementById('content').style.display='block';");
58     //connection queue allows xhttp requests to be sent in order
59     this.connectQueue = [];
60     this.connectQueueHead = 0;
61     this.connectQueueConnection = null;
65 main_class.prototype.process_blocks = function() {
66     //remove unneeded icons (old school position icons and delete/hide
67         //although they will be read)
68     var rmIconClasses = ['icon up', 'icon down', 'icon right', 'icon left', 'icon delete', 'icon hide'];
69     for (var c=0; c<rmIconClasses.length; c++) {
70         els = YAHOO.util.Dom.getElementsByClassName(rmIconClasses[c]);
72         for (var x=0; x<els.length; x++) {
73             els[x].parentNode.removeChild(els[x]);
74         }
75     }    
76     //process the block ids passed from php
77     var blockcount = this.portal.blocks.length;
78     YAHOO.log("main.processBlocks - processing "+blockcount+" blocks", "info");
80     for (i=0; i<blockcount; i++) {
81         this.blocks[i] = new block_class(this.portal.blocks[i][1], "blocks");
83         //put in correct side array also
84         if (this.portal.blocks[i][0] == 'l') {
85             main.leftcolumn.add_block(this.blocks[i]);
86         } else if (this.portal.blocks[i][0] == 'r') {
87             main.rightcolumn.add_block(this.blocks[i]);  
88         }
90         //hide if called for
91         if (this.portal.blocks[i][2] == 1) {
92             this.blocks[i].toggle_hide(null, null, true);
93         }
94     }     
98 main_class.prototype.process_document = function() {
99     //process the document to get important containers
100     YAHOO.log("Processing Document", "info");
102     //process columns for blocks
103     this.leftcolumn = new column_class('left-column', "blocks", null, 'l');
104     this.rightcolumn = new column_class('right-column', "blocks", null, 'r');
106     //process sections
107     var ct = 0;
108     while (document.getElementById('section-'+ct) != null) {
109         this.sections[ct] = new section_class('section-'+ct, "sections", null, ct!=0?true:false);
110         this.sections[ct].addToGroup('resources');
111         ct++;
112     }
113     if (this.debug) {
114                 YAHOO.log("Processed "+ct+" sections");
115         }
117     this.adminBlock = YAHOO.util.Dom.getElementsByClassName('block_adminblock')[0]; 
118     YAHOO.log("admin - "+this.adminBlock.className);
122 main_class.prototype.mk_safe_for_transport = function(input) {
123     return input.replace(/&/i, '_.amp._');
127 //return block by id
128 main_class.prototype.get_block_index = function(el) {
129     var blockcount = this.blocks.length;
130     for (i=0; i<blockcount; i++) {
131         if (this.blocks[i] == el) {
132             return i;
133         }
134     }
138 main_class.prototype.get_section_index = function(el) {
139     var sectioncount = this.sections.length;
140     for (i=0; i<sectioncount; i++) {
141         if (this.sections[i] == el) {
142             return i;
143         }
144     }
148 main_class.prototype.mk_button = function(tag, imgSrc, attributes, imgAttributes) {
149     //create button and return object   
150     var container = document.createElement(tag);
151     container.style.cursor = 'pointer';       
152     var image = document.createElement('img');
154     image.setAttribute('src', main.portal.strings['pixpath']+imgSrc);
155     container.appendChild(image);
157     if (attributes != null) {
158         for (var c=0; c<attributes.length; c++) {
159             container.setAttribute(attributes[c][0], attributes[c][1]);
160         }
161     }
162     if (imgAttributes != null) {
163         for (var c=0; c<imgAttributes.length; c++) {
164             image.setAttribute(imgAttributes[c][0], imgAttributes[c][1]);                
165         }
166     }
167         image.setAttribute('hspace', '3');
168     return container;
172 main_class.prototype.connect = function(method, urlStub, callback, body) {
173     if (this.debug) {
174                 YAHOO.log("Making "+method+" connection to /course/rest.php?courseId="+main.portal.id+"&"+urlStub);
175         }
176     if (callback == null) {
177         callback = {}
178     }
179     return YAHOO.util.Connect.asyncRequest(method, this.portal.strings['wwwroot']+"/course/rest.php?courseId="+main.portal.id+"&"+urlStub, callback, body);
183 main_class.prototype.connectQueue_add = function(method, urlStub, callback, body) {
184     var Qlength = main.connectQueue.length;
185     main.connectQueue[Qlength] = [];
186     main.connectQueue[Qlength]['method'] = method;
187     main.connectQueue[Qlength]['urlStub'] = urlStub;
188     main.connectQueue[Qlength]['body'] = body;
190     if (main.connectQueueConnection == null || !YAHOO.util.Connect.isCallInProgress(main.connectQueueConnection)) {
191         main.connectQueue_fireNext();
192     }
196 main_class.prototype.connectQueue_fireNext = function() {
197     var head = main.connectQueueHead;
198     if (head >= main.connectQueue.length) {
199         return;
200     }
201     var callback = {
202                 success: function(){
203             main.connectQueue_fireNext();
204         }
205     }
206     main.connectQueueConnection = main.connect(main.connectQueue[head]['method'],
207                                                                                            main.connectQueue[head]['urlStub'],
208                                                                                            callback,
209                                                                                            main.connectQueue[head]['body']);
210     main.connectQueueHead++;
214 main_class.prototype.update_marker = function(newMarker) {
215     if (this.marker != null) {
216         this.marker.toggle_highlight();
217     }
218     this.marker = newMarker;     
219     this.marker.toggle_highlight();
221     this.connect('post', 'class=course&field=marker', null, 'value='+this.marker.sectionId);
225 main_class.prototype.getString = function(title, variable) {
226         if (this.portal.strings[title]) {
227         return this.portal.strings[title].replace(/_var_/, variable);
228         }
232 var main = new main_class();
235 function php_portal_class() {
236     //portal to php data
237     this.id = null;
238         this.debug = null;
240     //array of id's of blocks set at end of page load by php    
241     this.blocks = new Array();
242     this.imagePath = null;
244     //flag for week fomat
245     this.isWeek = false;
247     //strings    
248     this.strings = [];
250     YAHOO.log("Instantiated php_portal_class", "info");