moodle/group/clientlib.js

204 lines
6.7 KiB
JavaScript
Raw Normal View History

/**
* 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;
2007-01-22 06:06:08 +00:00
this.connectCallback = {
2007-01-23 06:20:47 +00:00
success: function(o) {
if (o.responseText !== undefined) {
var groupsComboEl = document.getElementById("groups");
var membersComboEl = document.getElementById("members");
if (membersComboEl) {
// Clear the members list box.
while (membersComboEl.firstChild) {
membersComboEl.removeChild(membersComboEl.firstChild);
}
}
2007-01-22 06:57:40 +00:00
if (groupsComboEl && o.responseText) {
2007-01-23 06:20:47 +00:00
var groups = eval("("+o.responseText+")");
2007-01-22 06:57:40 +00:00
// Populate the groups list box.
2007-01-22 06:57:40 +00:00
for (var i=0; i<groups.length; i++) {
var optionEl = document.createElement("option");
optionEl.setAttribute("value", groups[i].id);
optionEl.title = groups[i].name;
2007-01-22 06:57:40 +00:00
optionEl.innerHTML = groups[i].name;
groupsComboEl.appendChild(optionEl);
}
}
}
// Remove the loader gif image.
2007-01-22 06:06:08 +00:00
removeLoaderImgs("groupsloader", "groupslabel");
2007-01-22 06:57:40 +00:00
},
failure: function(o) {
removeLoaderImgs("membersloader", "memberslabel");
2007-01-23 06:20:47 +00:00
this.currentTransId = null;
}
2007-01-23 06:20:47 +00:00
2007-01-22 06:06:08 +00:00
};
// Add onchange event to groups list box.
2007-01-23 06:20:47 +00:00
// 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.
/*
2007-01-22 06:57:40 +00:00
groupsComboEl = document.getElementById("groups");
if (groupsComboEl) {
groupsComboEl.setAttribute("onchange", "membersCombo.refreshMembers(this.options[this.selectedIndex].value);");
}
2007-01-23 06:20:47 +00:00
*/
// 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;
2007-01-22 06:06:08 +00:00
this.connectCallback = {
success: function(o) {
if (o.responseText !== undefined) {
var selectEl = document.getElementById("members");
2007-01-22 06:57:40 +00:00
if (selectEl && o.responseText) {
var roles = eval("("+o.responseText+")");
2007-01-22 06:57:40 +00:00
// Clear the members list box.
if (selectEl) {
while (selectEl.firstChild) {
selectEl.removeChild(selectEl.firstChild);
}
}
// Populate the members list box.
for (var i=0; i<roles.length; i++) {
var optgroupEl = document.createElement("optgroup");
optgroupEl.setAttribute("label",roles[i].name);
for(var j=0; j<roles[i].users.length; j++) {
var optionEl = document.createElement("option");
optionEl.setAttribute("value", roles[i].users[j].id);
optionEl.title = roles[i].users[j].name;
optionEl.innerHTML = roles[i].users[j].name;
optgroupEl.appendChild(optionEl);
}
selectEl.appendChild(optgroupEl);
}
}
}
// Remove the loader gif image.
2007-01-22 06:06:08 +00:00
removeLoaderImgs("membersloader", "memberslabel");
2007-01-22 06:57:40 +00:00
},
failure: function(o) {
removeLoaderImgs("membersloader", "memberslabel");
}
2007-01-23 06:20:47 +00:00
2007-01-22 06:06:08 +00:00
};
// 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 () {
// Get group selector and check selection type
var selectEl = document.getElementById("groups");
var selectionCount=0,groupId=0;
if( selectEl ) {
for (var i = 0; i < selectEl.options.length; i++) {
if(selectEl.options[i].selected) {
selectionCount++;
if(!groupId) {
groupId=selectEl.options[i].value;
}
}
}
}
var singleSelection=selectionCount == 1;
// Add the loader gif image (we only load for single selections)
if(singleSelection) {
createLoaderImg("membersloader", "memberslabel", this.wwwRoot);
}
// Update the label.
var spanEl = document.getElementById("thegroup");
if (singleSelection) {
spanEl.innerHTML = selectEl.options[selectEl.selectedIndex].title;
} else {
spanEl.innerHTML = '&nbsp;';
}
// Clear the members list box.
selectEl = document.getElementById("members");
2007-01-22 06:57:40 +00:00
if (selectEl) {
while (selectEl.firstChild) {
selectEl.removeChild(selectEl.firstChild);
}
}
document.getElementById("showaddmembersform").disabled = !singleSelection;
document.getElementById("showeditgroupsettingsform").disabled = !singleSelection;
document.getElementById("deletegroup").disabled = selectionCount == 0;
if(singleSelection) {
var sUrl = this.wwwRoot+"/group/index.php?id="+this.courseId+"&group="+groupId+"&act_ajax_getmembersingroup";
YAHOO.util.Connect.asyncRequest("GET", sUrl, this.connectCallback, null);
}
2007-01-22 06:06:08 +00:00
};
2007-01-22 06:06:08 +00:00
var createLoaderImg = function (elClass, parentId, wwwRoot) {
var parentEl = document.getElementById(parentId);
if (!parentEl) {
return false;
}
2007-01-23 06:20:47 +00:00
if (document.getElementById("loaderImg")) {
// A loader image already exists.
2007-01-22 06:06:08 +00:00
return false;
}
var loadingImg = document.createElement("img");
loadingImg.setAttribute("src", wwwRoot+"/pix/i/ajaxloader.gif");
2007-01-22 06:06:08 +00:00
loadingImg.setAttribute("class", elClass);
loadingImg.setAttribute("alt", "Loading");
2007-01-23 06:20:47 +00:00
loadingImg.setAttribute("id", "loaderImg");
2007-01-22 06:06:08 +00:00
parentEl.appendChild(loadingImg);
return true;
};
2007-01-22 06:06:08 +00:00
var removeLoaderImgs = function (elClass, parentId) {
var parentEl = document.getElementById(parentId);
if (parentEl) {
2007-01-23 06:20:47 +00:00
var loader = document.getElementById("loaderImg");
parentEl.removeChild(loader);
2007-01-22 06:06:08 +00:00
}
};