quizzer
Version:
Quizzer is a webserver for collaborative writing lab support. Based on a _fail early, fail often? approach to written language, the tool is particularly suited to second-language learners. The workflow (essay - error - quiz - exam) treats mistakes as an o
122 lines (117 loc) • 4.17 kB
JavaScript
var pageData = {};
function addGroup(node) {
// Does double duty as the edit function
var addButton = document.getElementById('add-group-button');
var saveButton = document.getElementById('save-group-button');
var groupBoxes = document.getElementById('group-boxes');
var groupName = document.getElementById('group-name');
var groupID = document.getElementById('group-id');
if (node) {
var name = node.childNodes[0].textContent;
var id = node.childNodes[1].textContent;
groupName.value = name;
groupID.value = id;
}
if (groupID.value) {
groupID.disabled = true;
} else {
groupID.disabled = false;
}
addButton.style.display = 'none';
saveButton.style.display = 'inline';
groupBoxes.style.display = 'inline';
}
function saveGroup() {
// Need to add group ID, for edits
var addButton = document.getElementById('add-group-button');
var saveButton = document.getElementById('save-group-button');
var groupBoxes = document.getElementById('group-boxes');
var groupName = document.getElementById('group-name');
var groupID = document.getElementById('group-id');
// Values
var name = groupName.value;
var id = groupID.value;
if (name) {
// Save
var adminID = getParameterByName('admin');
var rows = apiRequest(
'/?admin='
+ adminID
+ '&page=groups'
+ '&cmd=addgroup'
, {
name:name,
groupid:id
});
if (false === rows) return;
buildGroupList(rows);
}
if (name || (!name && !id)) {
// Clear
groupName.value = null;
groupID.value = null;
// Redecorate
addButton.style.display = 'inline';
saveButton.style.display = 'none';
groupBoxes.style.display = 'none';
} else {
alert("A name is required");
// Restore from server
var adminID = getParameterByName('admin');
var obj = apiRequest(
'/?admin='
+ adminID
+ '&page=groups'
+ '&cmd=readonegroup'
, {
groupid:id
});
if (false === obj) return;
groupName.value = obj.name;
}
}
function buildGroupList (rows) {
var adminID = getParameterByName('admin');
if (!rows) {
// if rows is nil, call the server.
var rows = apiRequest(
'/?admin='
+ adminID
+ '&page=groups'
+ '&cmd=readgroups'
);
if (false === rows) return;
}
// Delete children from container
var container = document.getElementById('group-list');
for (var i=0,ilen=container.childNodes.length;i<ilen;i+=1) {
container.removeChild(container.childNodes[0]);
}
// Rebuild container content
for (var i=0,ilen=rows.length;i<ilen;i+=1) {
var nameText = document.createTextNode(rows[i].name);
var idText = document.createTextNode(rows[i].ruleGroupID);
var tr = document.createElement('tr');
var nameAnchor = document.createElement('a');
var nameTD = document.createElement('td');
var idTD = document.createElement('td');
nameAnchor.appendChild(nameText);
nameAnchor.setAttribute('href', fixPath('/?admin=' + adminID + '&page=rules&groupid=' + rows[i].ruleGroupID));
nameTD.appendChild(nameAnchor);
tr.appendChild(nameTD);
idTD.appendChild(idText);
idTD.style.display = 'none';
tr.appendChild(idTD)
// Edit button
var buttonTD = document.createElement('td');
var button = document.createElement('input');
button.setAttribute('type', 'button');
button.setAttribute('name', 'value-edit');
button.setAttribute('value', 'Edit');
button.setAttribute('onclick', 'addGroup(this.parentNode.parentNode)');
button.setAttribute('class', 'button-small i18n');
buttonTD.appendChild(button);
tr.appendChild(buttonTD);
container.appendChild(tr);
}
}