Select Git revision
edit.js 9.81 KiB
addLoadEvent(onEditWrapperLoad);
function onEditWrapperLoad()
{
var addButtons = getElementsByClass('add_record_button');
for(var i = 0; i < addButtons.length; i++) {
addButtons[i].onclick = handleAddRecord;
}
var removeButtons = getElementsByClass('remove_record_button');
for(var i = 0; i < removeButtons.length; i++) {
removeButtons[i].onclick = handleRemoveRecord;
}
var subjectNode = document.getElementById('subject');
if (subjectNode) {
subjectNode.previousValue = subjectNode.value;
subjectNode.onchange = handleChangeSubject;
}
if (document.getElementById('courseNumber')) {
document.getElementById('courseNumber').onchange = handleChangeCourseNumber;
}
if (document.getElementById('courseLetter')) {
document.getElementById('courseLetter').onchange = handleChangeCourseLetter;
}
if (document.getElementById('aceOutcomeList')) {
var outcomesChecked = 0;
var aceOutcomeItems = document.getElementById('aceOutcomeList').getElementsByTagName('input');
for (var i = 0; i < aceOutcomeItems.length; i++) {
aceOutcomeItems[i].onchange = handleOutcomeToggled;
aceOutcomeItems[i].onclick = handleOutcomeClicked;
if (aceOutcomeItems[i].checked) {
outcomesChecked++;
}
}
if (outcomesChecked >= 2) {
for (var i = 0; i < aceOutcomeItems.length; i++) {
aceOutcomeItems[i].disabled = !aceOutcomeItems[i].checked;
}
}
}
if (document.getElementById('aceReinforcementList')) {
var reinforcementsChecked = 0;
var aceReinforcementItems = document.getElementById('aceReinforcementList').getElementsByTagName('input');
for (var i = 0; i < aceReinforcementItems.length; i++) {
aceReinforcementItems[i].onchange = handleReinforcementToggled;
aceReinforcementItems[i].onclick = handleReinforcementClicked;
if (aceReinforcementItems[i].checked) {
reinforcementsChecked++;
}
}
}
var courseCodeInputs = getElementsByClass('courseCodeInput');
for (var i = 0; i != courseCodeInputs.length; i++) {
courseCodeInputs[i].onchange = handleCourseCodeInputChange;
}
}
function handleAddRecord()
{
var currentTR = this.parentNode.parentNode;
var currentTable = currentTR.parentNode;
var hiddenTR = currentTR.previousSibling;
if (hiddenTR.nodeName == '#text') {
hiddenTR = hiddenTR.previousSibling;
}
var currentIndex = currentTable.getElementsByTagName('tr').length - 2 + 1000;
var newNode = hiddenTR.cloneNode(true);
for(var i = 0; i < newNode.childNodes.length; i++) {
var inputElement = newNode.childNodes[i].childNodes[1];
if (!inputElement || (inputElement.nodeName != 'INPUT' && inputElement.nodeName != 'SELECT')) {
inputElement = newNode.childNodes[i].childNodes[0];
}
if (!inputElement || (inputElement.nodeName != 'INPUT' && inputElement.nodeName != 'SELECT')) {
continue;
}
inputElement.disabled = false;
var keyIndex = inputElement.name.indexOf('__key__');
if (keyIndex > 0) {
inputElement.name = inputElement.name.substr(0, keyIndex) + '-' + currentIndex + inputElement.name.substr(keyIndex + 7);
}
}
var linkNode = newNode.childNodes[newNode.childNodes.length - 2].childNodes[1];
if (linkNode.nodeName != 'A') {
linkNode = newNode.childNodes[newNode.childNodes.length - 1].childNodes[0];
}
linkNode.onclick = handleRemoveRecord;
currentTable.insertBefore(newNode, hiddenTR);
newNode.className = '';
if(this.id.substr(0, 17) == 'add_tie_in_button') {
var courseId = this.id.substr(18).split('_');
var subjectCode = courseId[0];
var courseNumber = courseId[1];
var courseLetter = courseId[2];
var removeButtonId = 'remove' + this.id.substr(3);
courseNumber = '8' + courseNumber.substr(1);
this.style.display = 'none';
newNode.childNodes[3].childNodes[1].value = subjectCode;
newNode.childNodes[3].childNodes[1].readOnly = true;
newNode.childNodes[7].childNodes[1].value = courseNumber;
newNode.childNodes[7].childNodes[1].readOnly = true;
newNode.childNodes[11].childNodes[1].value = courseLetter;
newNode.childNodes[11].childNodes[1].readOnly = true;
newNode.childNodes[13].childNodes[1].value = 'grad tie-in';
newNode.childNodes[13].childNodes[1].readOnly = true;
newNode.childNodes[15].childNodes[1].id = removeButtonId;
newNode.className = 'grad_tie_in_row';
}
var courseCodeInputs = getElementsByClass('courseCodeInput');
for (var i = 0; i != courseCodeInputs.length; i++) {
courseCodeInputs[i].onchange = handleCourseCodeInputChange;
}
return false;
}
function handleRemoveRecord()
{
var currentTR = this.parentNode.parentNode;
var currentTable = currentTR.parentNode;
if(this.id.substr(0, 20) == 'remove_tie_in_button') {
var addButtonId = 'add' + this.id.substr(6);
document.getElementById(addButtonId).style.display = 'inline';
}
currentTable.removeChild(currentTR);
return false;
}
function handleChangeSubject()
{
var previousSubject = this.previousValue;
var currentSubject = this.value;
this.previousValue = currentSubject;
var gradTieInRows = getElementsByClass('grad_tie_in_row');
var noChange = false;
for (var i = 0; i != gradTieInRows.length; i++) {
var gradTieInRow = gradTieInRows[i];
var gradNode = gradTieInRows[i].childNodes[3].childNodes[1];
if (gradNode.value == currentSubject) {
noChange = true;
}
}
if (noChange) {
return;
}
for (var i = 0; i != gradTieInRows.length; i++) {
var gradNode = gradTieInRows[i].childNodes[3].childNodes[1];
if (gradNode.value == previousSubject) {
gradNode.value = currentSubject;
}
}
}
function handleChangeCourseNumber()
{
var gradNumber = 800 + (this.value % 100);
var gradTieInRows = getElementsByClass('grad_tie_in_row');
for (var i = 0; i != gradTieInRows.length; i++) {
gradTieInRows[i].childNodes[7].childNodes[1].value = gradNumber;
}
}
function handleChangeCourseLetter()
{
var gradLetter = this.value;
var gradTieInRows = getElementsByClass('grad_tie_in_row');
for (var i = 0; i != gradTieInRows.length; i++) {
gradTieInRows[i].childNodes[11].childNodes[1].value = gradLetter;
}
}
function handleOutcomeClicked()
{
this.blur();
}
function handleReinforcementClicked()
{
this.blur();
}
function handleOutcomeToggled()
{
var aceOutcomeItems = document.getElementById('aceOutcomeList').getElementsByTagName('input');
enforceMaximumSelectionCount(aceOutcomeItems, this, 2, true);
}
function handleReinforcementToggled()
{
var aceReinforcementItems = document.getElementById('aceReinforcementList').getElementsByTagName('input');
enforceMaximumSelectionCount(aceReinforcementItems, this, 100, true);
}
function enforceMaximumSelectionCount(inputNodes, toggledInput, maxSelected, hideTextArea)
{
var selectedCount = 0;
for (var i = 0; i < inputNodes.length; i++) {
if (inputNodes[i].checked) {
selectedCount++;
}
}
var isChecked = (toggledInput.checked);
if (hideTextArea) {
var textArea = toggledInput.parentNode.nextSibling;
if (textArea.nodeName != 'SPAN') {
textArea = textArea.nextSibling;
}
if (isChecked) {
textArea.style.display = '';
tinyMceEditors = textArea.getElementsByTagName('textarea');
for (var i = 0; i < tinyMceEditors.length; i++) {
if (tinyMceEditors[i].refreshed) {
continue;
}
tinyMCE.execCommand('mceRemoveControl', false, tinyMceEditors[i].id);
tinyMCE.execCommand('mceAddControl', false, tinyMceEditors[i].id);
tinyMceEditors[i].refreshed = true;
}
} else {
textArea.style.display = 'none';
}
}
for (var i = 0; i < inputNodes.length; i++) {
if (isChecked && selectedCount >= maxSelected) {
inputNodes[i].disabled = !inputNodes[i].checked;
} else {
inputNodes[i].disabled = false;
}
}
}
function handleCourseCodeInputChange()
{
var courseCodeNodes = this.parentNode.parentNode.getElementsByTagName('input');
var ajax = new courseCodeAvailableAjaxResponder();
ajax.subjectNode = courseCodeNodes[0];
ajax.courseNumberNode = courseCodeNodes[1];
ajax.courseLetterNode = courseCodeNodes[2];
ajax.sendRequest(ajax.getUrl());
}
var courseCodeAvailableAjaxResponder = AjaxClient.extend(
{
subjectNode: null,
courseNumberNode: null,
courseLetterNode: null,
processResponse: function() {
if(this.requestObject.responseXML.childNodes[0].childNodes[0].nodeName == 'true') {
return;
}
var message = 'The course code '
+ this.subjectNode.value + ' ' + this.courseNumberNode.value + this.courseLetterNode.value
+ ' belongs to an active course. Click OK if you are you sure you want to continue.';
if (confirm(message)) {
return;
}
this.subjectNode.value = '';
this.courseNumberNode.value = '';
this.courseLetterNode.value = '';
},
getUrl: function() {
return baseUrl
+ '/courses/edit/is-course-code-available'
+ '/subject/' + this.subjectNode.value
+ '/courseNumber/' + this.courseNumberNode.value
+ '/courseLetter/' + this.courseLetterNode.value;
}
});