Index: lams_monitoring/web/includes/javascript/monitorLesson.js =================================================================== diff -u -r7c6c781eeb44aa006745032cb26432a3aa37db91 -r7c8f41bcabfe29e1a435207eb06e98a9cb36df67 --- lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 7c6c781eeb44aa006745032cb26432a3aa37db91) +++ lams_monitoring/web/includes/javascript/monitorLesson.js (.../monitorLesson.js) (revision 7c8f41bcabfe29e1a435207eb06e98a9cb36df67) @@ -18,17 +18,17 @@ tapTimeout = 500, lastTapTime = 0, lastTapTarget = null, - + // popup window size popupWidth = 1280, popupHeight = 720, // cached gate icon data gateOpenIconPath = 'images/svg/gateOpen.svg', gateOpenIconData = null, - + fileDownloadCheckTimer = null, - + tempusDominusDefaultOptions = { restrictions: { minDate : new Date() @@ -47,11 +47,11 @@ tempusDominusDateFormatter = function(date) { return date ? date.year + '-' + date.monthFormatted + '-' + date.dateFormatted + ' ' + date.hoursFormatted + ':' + date.minutesFormatted : ''; } - dateFormatter = function(date) { - return ("0" + date.getDate()).slice(-2) + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + - date.getFullYear() + " " + ("0" + date.getHours()).slice(-2) + ":" + ("0" + date.getMinutes()).slice(-2); - }, - +dateFormatter = function(date) { + return ("0" + date.getDate()).slice(-2) + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + + date.getFullYear() + " " + ("0" + date.getHours()).slice(-2) + ":" + ("0" + date.getMinutes()).slice(-2); +}, + // colours to use on the page COLORS = { blue: '#0175E2', @@ -65,8 +65,8 @@ yellow: 'rgba(249, 248, 113, 0.85)', green: 'rgba(0, 145, 74, 0.85)' }; - + $(document).ready(function(){ initCommonElements(); loadTab(currentTab); @@ -83,24 +83,24 @@ }, titleButton : "btn btn-xs" }); - + //turn to inline mode for x-editable.js $.fn.editable.defaults.mode = 'inline'; // do not cancel on clicking outside of box $.fn.editable.defaults.onblur = 'ignore'; - + // assign action to navigation buttons $('#edit-lesson-btn').click(function(){ $('.lesson-properties').toggleClass('active'); $('.component-sidebar').toggleClass('expanded'); }); - + $('.component-menu-btn a[data-tab-name]').click(function(){ loadTab($(this).data('tab-name'), this); }); - + // initialise dialogs - + // search for users with the term the Monitor entered $("#sequenceSearchPhrase").autocomplete( { 'source' : LAMS_URL + "monitoring/monitoring/autocomplete.do?scope=lesson&lessonID=" + lessonId, @@ -143,7 +143,7 @@ return false; } }); - + var learnerGroupDialogContents = $('#learnerGroupDialogContents'); $('#learnerGroupDialogForceCompleteButton, #learnerGroupDialogForceCompleteAllButton', learnerGroupDialogContents).click(function() { var dialog = $('#learnerGroupDialog'), @@ -154,25 +154,25 @@ activityId = dialog.data('ajaxProperties').data.activityID, dropArea = sequenceCanvas.add('#completedLearnersContainer'); dropArea.css('cursor', 'pointer') - .one('click', function(event) { - dropArea.off('click').css('cursor', 'default'); - if (moveAll) { - // setting learners as 'true' is a special switch meaning "move all" - forceComplete(activityId, true, event.pageX, event.pageY); - } else { - var learners = []; - selectedLearners.each(function(){ - var learner = $(this); - learners.push({ - 'id' : learner.attr('userId'), - 'name' : learner.text() - }); + .one('click', function(event) { + dropArea.off('click').css('cursor', 'default'); + if (moveAll) { + // setting learners as 'true' is a special switch meaning "move all" + forceComplete(activityId, true, event.pageX, event.pageY); + } else { + var learners = []; + selectedLearners.each(function(){ + var learner = $(this); + learners.push({ + 'id' : learner.attr('userId'), + 'name' : learner.text() }); - forceComplete(activityId, learners, event.pageX, event.pageY); - } - }); + }); + forceComplete(activityId, learners, event.pageX, event.pageY); + } + }); dialog.modal('hide'); - + if (moveAll) { showToast(LABELS.FORCE_COMPLETE_CLICK.replace('[0]', '')); } else { @@ -184,7 +184,7 @@ showToast(LABELS.FORCE_COMPLETE_CLICK.replace('[0]', '"' + learnerNames + '"')); } }); - + $('#learnerGroupDialogViewButton', learnerGroupDialogContents).click(function() { var dialog = $('#learnerGroupDialog'), selectedLearner = $('.dialogTable .dialogListItemSelected', dialog); @@ -193,56 +193,56 @@ openPopUp(selectedLearner.attr('viewUrl'), "LearnActivity", popupHeight, popupWidth, true); } }); - + $('#learnerGroupDialogEmailButton', learnerGroupDialogContents).click(function() { var dialog = $('#learnerGroupDialog'), selectedLearner = $('.dialogTable .dialogListItemSelected', dialog); if (selectedLearner.length == 1) { showEmailDialog(selectedLearner.attr('userId')); } }); - + $('#learnerGroupDialogCloseButton', learnerGroupDialogContents).click(function(){ $('#learnerGroupDialog').modal('hide'); }); - // initialise lesson dialog + // initialise lesson dialog var learnerGroupDialog = showDialog('learnerGroupDialog',{ - 'autoOpen' : false, - 'height' : 860, - 'resizable' : true, - 'open' : function(){ - // until operator selects an user, buttons remain disabled - $('button.learnerGroupDialogSelectableButton').blur().prop('disabled', true); - }, - 'close' : function(){ - } - }, false); - + 'autoOpen' : false, + 'height' : 860, + 'resizable' : true, + 'open' : function(){ + // until operator selects an user, buttons remain disabled + $('button.learnerGroupDialogSelectableButton').blur().prop('disabled', true); + }, + 'close' : function(){ + } + }, false); + $('.modal-body', learnerGroupDialog).empty().append(learnerGroupDialogContents.show()).closest('.modal-dialog').addClass('modal-xl');; - + // search for users with the term the Monitor entered $('.dialogSearchPhrase', learnerGroupDialog).autocomplete({ - 'source' : LAMS_URL + "monitoring/monitoring/autocomplete.do?scope=lesson&lessonID=" + lessonId, - 'delay' : 700, - 'select' : function(event, ui){ - var phraseField = $(this), - dialog = $('#learnerGroupDialog'); - // learner's ID in ui.item.value is not used here - phraseField.val(ui.item.label); - $('.dialogSearchPhraseClear', dialog).css('visibility', 'visible'); - // reset to page 1 - dialog.data('ajaxProperties').data.pageNumber = 1; - showLearnerGroupDialog(); - return false; - } - }) + 'source' : LAMS_URL + "monitoring/monitoring/autocomplete.do?scope=lesson&lessonID=" + lessonId, + 'delay' : 700, + 'select' : function(event, ui){ + var phraseField = $(this), + dialog = $('#learnerGroupDialog'); + // learner's ID in ui.item.value is not used here + phraseField.val(ui.item.label); + $('.dialogSearchPhraseClear', dialog).css('visibility', 'visible'); + // reset to page 1 + dialog.data('ajaxProperties').data.pageNumber = 1; + showLearnerGroupDialog(); + return false; + } + }) // run the real search when the Monitor presses Enter .keypress(function(e){ if (e.which == 13) { var phraseField = $(this), dialog = $('#learnerGroupDialog'); - + phraseField.autocomplete("close"); if (phraseField.val()) { $('.dialogSearchPhraseClear', dialog).css('visibility', 'visible'); @@ -252,7 +252,7 @@ showLearnerGroupDialog(); } }); - + var forceBackwardsDialogContents = $('#forceBackwardsDialogContents'); showDialog('forceBackwardsDialog', { 'autoOpen' : false, @@ -265,34 +265,34 @@ }, false); // only need to do this once as then it updates the msg field directly. $('.modal-body', '#forceBackwardsDialog').empty().append($('#forceBackwardsDialogContents').show()); - + $('#forceBackwardsRemoveContentNoButton', forceBackwardsDialogContents).click(function(){ var forceBackwardsDialog = $('#forceBackwardsDialog'), learners = forceBackwardsDialog.data('learners'), moveAll = learners === true; forceCompleteExecute(moveAll ? null : learners, - moveAll ? forceBackwardsDialog.data('currentActivityId') : null, - forceBackwardsDialog.data('activityId'), - false); + moveAll ? forceBackwardsDialog.data('currentActivityId') : null, + forceBackwardsDialog.data('activityId'), + false); forceBackwardsDialog.modal('hide'); }); $('#forceBackwardsRemoveContentYesButton', forceBackwardsDialogContents).click(function(){ var forceBackwardsDialog = $('#forceBackwardsDialog'); - learners = forceBackwardsDialog.data('learners'), + learners = forceBackwardsDialog.data('learners'), moveAll = learners === true; forceCompleteExecute(moveAll ? null : learners, - moveAll ? forceBackwardsDialog.data('currentActivityId') : null, - forceBackwardsDialog.data('activityId'), - true); + moveAll ? forceBackwardsDialog.data('currentActivityId') : null, + forceBackwardsDialog.data('activityId'), + true); forceBackwardsDialog.modal('hide'); }); $('#forceBackwardsCloseButton', forceBackwardsDialogContents).click(function(){ $('#forceBackwardsDialog').modal('hide'); }); - - + + $('#presenceButton').change(function(){ var checked = $(this).prop('checked'), data = { @@ -304,7 +304,7 @@ url : LAMS_URL + 'monitoring/monitoring/presenceAvailable.do', type : 'POST', cache : false, - data : data, + data : data, success : function() { // updatePresenceAvailableCount(); if (checked) { @@ -318,7 +318,7 @@ } }); }); - + // sets instant messaging availability $('#imButton').click(function(){ var checked = $(this).prop('checked'), @@ -344,34 +344,34 @@ } }); }); - + $('#openImButton').click(openChatWindow); //enable renaming of lesson title $('#lesson-name').editable({ - type: 'text', - pk: lessonId, - url: LAMS_URL + 'monitoring/monitoring/renameLesson.do?' + csrfTokenName + '=' + csrfTokenValue, - validate: function(value) { - //close editing area on validation failure - if (!value.trim()) { - $('.editable-open').editableContainer('hide', 'cancel'); - return 'Can not be empty!'; - } - }, - //assume server response: 200 Ok {status: 'error', msg: 'field cannot be empty!'} - success: function(response, newValue) { - if(response.status == 'error') { - return response.msg; //msg will be shown in editable form - } - } + type: 'text', + pk: lessonId, + url: LAMS_URL + 'monitoring/monitoring/renameLesson.do?' + csrfTokenName + '=' + csrfTokenValue, + validate: function(value) { + //close editing area on validation failure + if (!value.trim()) { + $('.editable-open').editableContainer('hide', 'cancel'); + return 'Can not be empty!'; + } + }, + //assume server response: 200 Ok {status: 'error', msg: 'field cannot be empty!'} + success: function(response, newValue) { + if(response.status == 'error') { + return response.msg; //msg will be shown in editable form + } + } }) - + $('#editLessonNameButton').click(function(e) { - e.stopPropagation(); - $('#lesson-name').editable('toggle'); + e.stopPropagation(); + $('#lesson-name').editable('toggle'); }); - + // sets up dialog for editing class var classDialog = showDialog('classDialog',{ 'autoOpen' : false, @@ -383,60 +383,60 @@ loadTab(); } }, false); - + $('.modal-body', classDialog).empty().append($('#classDialogContents').show()).closest('.modal-dialog').addClass('modal-xl'); - + // search for users in the organisation with the term the Monitor entered $('.dialogSearchPhrase', classDialog).autocomplete({ - 'source' : LAMS_URL + "monitoring/monitoring/autocomplete.do?scope=organisation&lessonID=" + lessonId, - 'delay' : 700, - 'select' : function(event, ui){ - var phraseField = $(this), - dialog = $('#classDialog'); - // learner's ID in ui.item.value is not used here - phraseField.val(ui.item.label); - // show the "clear search phrase" button - $('.dialogSearchPhraseClear', dialog).css('visibility', 'visible'); - // reset to page 1 - dialog.data('LearnerAjaxProperties').data.pageNumber = 1; - showClassDialog('Learner'); - return false; - } - }) + 'source' : LAMS_URL + "monitoring/monitoring/autocomplete.do?scope=organisation&lessonID=" + lessonId, + 'delay' : 700, + 'select' : function(event, ui){ + var phraseField = $(this), + dialog = $('#classDialog'); + // learner's ID in ui.item.value is not used here + phraseField.val(ui.item.label); + // show the "clear search phrase" button + $('.dialogSearchPhraseClear', dialog).css('visibility', 'visible'); + // reset to page 1 + dialog.data('LearnerAjaxProperties').data.pageNumber = 1; + showClassDialog('Learner'); + return false; + } + }) // run the real search when the Monitor presses Enter .keypress(function(e){ if (e.which == 13) { var phraseField = $(this), dialog = $('#classDialog'); - + phraseField.autocomplete("close"); if (phraseField.val()) { $('.dialogSearchPhraseClear', dialog).css('visibility', 'visible'); - } + } // reset to page 1 dialog.data('LearnerAjaxProperties').pageNumber = 1; showClassDialog('Learner'); } }); var emailProgressDialog = showDialog('emailProgressDialog',{ - 'autoOpen' : false, - 'width' : 510, - 'height' : 700, - 'title' : LABELS.PROGRESS_EMAIL_TITLE, - 'resizable' : false, - 'close' : function(){} - }, false); + 'autoOpen' : false, + 'width' : 510, + 'height' : 700, + 'title' : LABELS.PROGRESS_EMAIL_TITLE, + 'resizable' : false, + 'close' : function(){} + }, false); $('.modal-body', emailProgressDialog).empty().append($('#emailProgressDialogContents').show()); - - + + // sets gradebook on complete functionality $('#gradebookOnCompleteButton').change(function(){ var checked = $(this).prop('checked'), data = { - 'gradebookOnComplete' : checked, - 'lessonID' : lessonId - }; + 'gradebookOnComplete' : checked, + 'lessonID' : lessonId + }; data[csrfTokenName] = csrfTokenValue; $.ajax({ url : LAMS_URL + 'monitoring/monitoring/gradebookOnComplete.do', @@ -452,8 +452,8 @@ } }); }); - - + + // update lesson details $.ajax({ dataType : 'json', @@ -462,7 +462,7 @@ data : { 'lessonID' : lessonId }, - + success : function(response) { // update lesson state label lessonStateId = +response.lessonStateID; @@ -495,11 +495,11 @@ break; case 7: label = LABELS.LESSON_STATE_REMOVED; - labelColour = 'danger'; + labelColour = 'danger'; break; } $('#lessonStateLabel').attr('class', 'btn btn-sm btn-' + labelColour).html(label + ' '); - + // update available options in change state dropdown menu var selectField = $('#lessonStateField'); // remove all except "Select status" option @@ -524,7 +524,7 @@ $('