forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 1
/
clientlib.js
175 lines (145 loc) · 5.8 KB
/
clientlib.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/**
* Client-side JavaScript for group management interface.
* @author vy-shane AT moodle.com
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package groups
*/
/**
* Class UpdatableGroupsCombo
*/
function UpdatableGroupsCombo(wwwRoot, courseId) {
this.wwwRoot = wwwRoot;
this.courseId = courseId;
this.connectCallback = {
success: function(o) {
if (o.responseText !== undefined) {
var groupsComboEl = document.getElementById("groups");
var membersComboEl = document.getElementById("members");
if (membersComboEl) {
// Clear the members combo box.
while (membersComboEl.firstChild) {
membersComboEl.removeChild(membersComboEl.firstChild);
}
}
if (groupsComboEl && o.responseText) {
var groups = eval("("+o.responseText+")");
// Populate the groups combo box.
for (var i=0; i<groups.length; i++) {
var optionEl = document.createElement("option");
optionEl.setAttribute("value", groups[i].id);
optionEl.title = groups[i].name;
optionEl.innerHTML = groups[i].name;
groupsComboEl.appendChild(optionEl);
}
}
}
// Remove the loader gif image.
removeLoaderImgs("groupsloader", "groupslabel");
},
failure: function(o) {
removeLoaderImgs("membersloader", "memberslabel");
this.currentTransId = null;
}
};
// Add onchange event to groups combo box.
// Okay, this is not working in IE. The onchange is never fired...
// I'm hard coding the onchange in ../index.php. Not ideal, but it works
// then. vyshane AT moodle DOT com.
/*
groupsComboEl = document.getElementById("groups");
if (groupsComboEl) {
groupsComboEl.setAttribute("onchange", "membersCombo.refreshMembers(this.options[this.selectedIndex].value);");
}
*/
// Hide the updategroups input since AJAX will take care of this.
YAHOO.util.Dom.setStyle("updategroups", "display", "none");
}
/**
* Class UpdatableMembersCombo
*/
function UpdatableMembersCombo(wwwRoot, courseId) {
this.wwwRoot = wwwRoot;
this.courseId = courseId;
this.connectCallback = {
success: function(o) {
if (o.responseText !== undefined) {
var selectEl = document.getElementById("members");
if (selectEl && o.responseText) {
var members = eval("("+o.responseText+")");
// Clear the members combo box.
if (selectEl) {
while (selectEl.firstChild) {
selectEl.removeChild(selectEl.firstChild);
}
}
// Populate the members combo box.
for (var i=0; i<members.length; i++) {
var optionEl = document.createElement("option");
optionEl.setAttribute("value", members[i].id);
optionEl.title = members[i].name;
optionEl.innerHTML = members[i].name;
selectEl.appendChild(optionEl);
}
}
}
// Remove the loader gif image.
removeLoaderImgs("membersloader", "memberslabel");
},
failure: function(o) {
removeLoaderImgs("membersloader", "memberslabel");
}
};
// Hide the updatemembers input since AJAX will take care of this.
YAHOO.util.Dom.setStyle("updatemembers", "display", "none");
}
/**
* When a group is selected, we need to update the members.
* The Add/Remove Users button also needs to be disabled/enabled
* depending on whether or not a group is selected
*/
UpdatableMembersCombo.prototype.refreshMembers = function (groupId) {
// Add the loader gif image.
createLoaderImg("membersloader", "memberslabel", this.wwwRoot);
// Update the label.
var selectEl = document.getElementById("groups");
var spanEl = document.getElementById("thegroup");
if (selectEl && selectEl.selectedIndex >= 0) {
spanEl.innerHTML = selectEl.options[selectEl.selectedIndex].title;
}
// Clear the members combo box.
selectEl = document.getElementById("members");
if (selectEl) {
while (selectEl.firstChild) {
selectEl.removeChild(selectEl.firstChild);
}
}
document.getElementById("showaddmembersform").disabled = false;
document.getElementById("showeditgroupsettingsform").disabled = false;
document.getElementById("deletegroup").disabled = false;
var sUrl = this.wwwRoot+"/group/index.php?id="+this.courseId+"&group="+groupId+"&act_ajax_getmembersingroup";
YAHOO.util.Connect.asyncRequest("GET", sUrl, this.connectCallback, null);
};
var createLoaderImg = function (elClass, parentId, wwwRoot) {
var parentEl = document.getElementById(parentId);
if (!parentEl) {
return false;
}
if (document.getElementById("loaderImg")) {
// A loader image already exists.
return false;
}
var loadingImg = document.createElement("img");
loadingImg.setAttribute("src", wwwRoot+"/pix/i/ajaxloader.gif");
loadingImg.setAttribute("class", elClass);
loadingImg.setAttribute("alt", "Loading");
loadingImg.setAttribute("id", "loaderImg");
parentEl.appendChild(loadingImg);
return true;
};
var removeLoaderImgs = function (elClass, parentId) {
var parentEl = document.getElementById(parentId);
if (parentEl) {
var loader = document.getElementById("loaderImg");
parentEl.removeChild(loader);
}
};