Skip to content
Snippets Groups Projects
Select Git revision
  • e3b6e5ae22d7d387172522d79131837f91457a43
  • master default
  • disable-new-requests
  • fix-bulletin-view-missing-notes-error
  • add-missing-queue-managers
  • projects-task-53
  • projects-task-51
  • projects-task-43
  • projects-task-24
  • projects-task-31
  • projects-task-32
  • projects-task-8
  • project-setup-docs
  • projects-task-28
  • projects-task-27
  • projects-task-9
  • projects-task-7
  • mass-update-course-codes-in-sections
  • wdn-four
  • learning-outcomes
  • additional-bulletin-pages
  • svn-redesign
  • svn-popups
  • svn-trunk
  • svn-performance
  • svn-tim
26 results

edit.js

Blame
  • user avatar
    Tim Steiner authored
    e3b6e5ae
    History
    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; 
        }
    });