Index: lams_central/web/includes/javascript/addLesson.js =================================================================== diff -u -rfe19797ec82718905555353176ed719bec11043e -r1b10f714f1b19a4a448ab215fdab8e469ac2fd91 --- lams_central/web/includes/javascript/addLesson.js (.../addLesson.js) (revision fe19797ec82718905555353176ed719bec11043e) +++ lams_central/web/includes/javascript/addLesson.js (.../addLesson.js) (revision 1b10f714f1b19a4a448ab215fdab8e469ac2fd91) @@ -3,7 +3,7 @@ lastSelectedUsers = {}, sortOrderAscending = {}, generatingLearningDesign = false; - submitInProgress = false, +submitInProgress = false, originalThumbnailWidth = 0, originalThumbnailHeight = 0; @@ -19,33 +19,38 @@ */ function initLessonTab(){ tree = $('#learningDesignTree'); - + // customise treeview label ldTreeview.LABEL_RUN_SEQUENCES_FOLDER = LABEL_RUN_SEQUENCES_FOLDER; - - ldTreeview.init('#learningDesignTree', - function(event, node) { + + ldTreeview.init('#learningDesignTree', + function(event, node) { // deselect LD if highlighted in "recently used sequences" section $('div#accessDiv .access-selected').removeClass('access-selected'); - + // hide existing LD image $('.ldChoiceDependentCanvasElement').css('display', 'none'); - + if (orgGroupingsAvailable) { $('#grouping-tab-desc-select, #grouping-tab-select').hide(); $('#grouping-tab-desc-none').show(); } - + // if a LD is selected if (node.state.selected && node.learningDesignId) { $('#lessonNameInput').val(node.label); //focus element only if it's visible in the current viewport (to avoid unwanted scrolling) if (isElementInViewport($('#lessonNameInput'))) { $('#lessonNameInput').focus(); } + + if (node.modifiedDate) { + $('#modified-date-span').text(node.modifiedDate).show(); + } + // display "loading" animation and finally LD thumbnail loadLearningDesignSVG(node.learningDesignId); - + if (orgGroupingsAvailable) { $.ajax({ 'url' : LAMS_URL + 'monitoring/monitoring/isLearningDesignHasGroupings.do', @@ -63,42 +68,43 @@ } else { // a folder got selected or LD got deselected $('#lessonNameInput').val(null); + $('#modified-date-span').hide(); toggleCanvasResize(CANVAS_RESIZE_OPTION_NONE); } }, - function(event, node) { + function(event, node) { if (!node.learningDesignId){ if (!node.state.expanded) { ldTreeview.refresh(tree, node); } return; } - + // start lesson addLesson(node.learningDesignId, node.label); - }); - + }); + // ability to start a lesson on pressing Enter button in a lesson name input $('#lessonNameInput').on('keyup', function (e) { - if (e.keyCode == 13) { - addLesson(); - } + if (e.keyCode == 13) { + addLesson(); + } }); - + loadRecentlyAccessedLearningDesigns(); } //checks whether element is visible in the current viewport function isElementInViewport(el) { el = el[0]; - var rect = el.getBoundingClientRect(); + var rect = el.getBoundingClientRect(); - return ( - rect.top >= 0 && - rect.left >= 0 && - rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ - rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ - ); + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ + rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ + ); } @@ -108,52 +114,52 @@ fillUserContainer(users.unselectedLearners, 'unselected-learners'); fillUserContainer(users.selectedMonitors, 'selected-monitors'); fillUserContainer(users.unselectedMonitors, 'unselected-monitors'); - + // allow dragging of user divs $('.draggableItem').each(function(){ $(this).draggable({ 'scope' : getDraggableScope($(this).parents('.userContainer').attr('id')), - 'appendTo' : 'body', - 'containment' : '#classTable', - 'revert' : 'invalid', - 'distance' : 20, - 'scroll' : false, - 'cursor' : 'move', - 'helper' : function(event){ - // include the user from which dragging started - $(this).addClass('draggableSelected'); - - // copy selected users - var helperContainer = $('
'); - $(this).siblings('.draggableSelected').addBack().each(function(){ - $(this).clone().appendTo(helperContainer); - }); - return helperContainer; - } + 'appendTo' : 'body', + 'containment' : '#classTable', + 'revert' : 'invalid', + 'distance' : 20, + 'scroll' : false, + 'cursor' : 'move', + 'helper' : function(event){ + // include the user from which dragging started + $(this).addClass('draggableSelected'); + + // copy selected users + var helperContainer = $('
'); + $(this).siblings('.draggableSelected').addBack().each(function(){ + $(this).clone().appendTo(helperContainer); + }); + return helperContainer; + } }).click(function(event){ var wasSelected = $(this).hasClass('draggableSelected'); var parentId = $(this).parent().attr('id'); // this is needed for shift+click var lastSelectedUser = lastSelectedUsers[parentId]; - + if (event.shiftKey && lastSelectedUser && lastSelectedUser != this) { // clear current selection $(this).siblings().addBack().removeClass('draggableSelected'); - + // find range of users to select var lastSelectedIndex = $(lastSelectedUser).index(); var index = $(this).index(); - + var startingElem = lastSelectedIndex > index ? this : lastSelectedUser; var endingElem = lastSelectedIndex > index ? lastSelectedUser : this; - + $(startingElem).nextUntil(endingElem).addBack().add(endingElem) .addClass('draggableSelected'); } else { if (!event.ctrlKey) { // clear current sleection $(this).siblings().addBack().removeClass('draggableSelected'); } - + if (wasSelected && !event.shiftKey){ $(this).removeClass('draggableSelected'); lastSelectedUsers[parentId] = null; @@ -164,23 +170,23 @@ } }); }); - + // allow putting dragged users into container divs $('.userContainer').each(function(){ var containerId = $(this).attr('id'); - + $(this).droppable({'scope' : containerId, - 'activeClass' : 'droppableHighlight', - 'tolerance' : 'touch', - 'accept' : function (draggable) { - return acceptDraggable(draggable, containerId); - }, - 'drop' : function () { - transferUsers(containerId); - } + 'activeClass' : 'droppableHighlight', + 'tolerance' : 'touch', + 'accept' : function (draggable) { + return acceptDraggable(draggable, containerId); + }, + 'drop' : function () { + transferUsers(containerId); + } }); }); - + $('.sortUsersButton').click(function(){ sortUsers($(this).attr('id')); }); @@ -192,13 +198,13 @@ // CKEditor needs to load first, then only hide the whole div to prevent errors $('#introDescriptionDiv').hide(); }); - + $('#splitLearnersCountField').attr({ 'step' : 1, 'min' : 1, 'max' : users.selectedLearners ? users.selectedLearners.length : 1 }).change(updateSplitLearnersFields); - + $('#splitLearnersField').change(function(){ if ($(this).is(':checked')) { $('#splitLearnersTable').show('slow'); @@ -207,19 +213,19 @@ $('#splitLearnersTable').hide('slow'); } }); - + $('#introEnableField').change(function(){ if ($(this).is(':checked')) { $('#introDescriptionDiv').show('slow'); } else { $('#introDescriptionDiv').hide('slow'); } }); - + $('#presenceEnableField').change(function(){ $('#imEnableField').prop('disabled', !$(this).is(':checked')); }); - + $('#schedulingEnableField').change(function(){ if ($(this).is(':checked')) { $('#scheduleStartTime').show('slow'); @@ -229,20 +235,20 @@ $('#scheduleEndTime').hide('slow'); } }); - + $('#startMonitorField').change(function(){ var checked = !$(this).is(':checked'); if (!checked) { $('#schedulingEnableField, #precedingLessonEnableField, ' + - '#timeLimitEnableField, #timeLimitIndividualField').prop('checked', false).change(); + '#timeLimitEnableField, #timeLimitIndividualField').prop('checked', false).change(); $('#schedulingDatetimeField').val(null); $('#schedulingEndDatetimeField').val(null); } - + $('#schedulingEnableField, #precedingLessonEnableField, #timeLimitEnableField, #timeLimitIndividualField,' + - '#precedingLessonIdField, #schedulingDatetimeField, #schedulingEndDatetimeField').prop('disabled', !checked); + '#precedingLessonIdField, #schedulingDatetimeField, #schedulingEndDatetimeField').prop('disabled', !checked); }); - + $('#schedulingDatetimeField').datetimepicker({ 'minDate' : 0, 'dateFormat' : 'yy-mm-dd' @@ -251,8 +257,8 @@ 'minDate' : 0, 'dateFormat' : 'yy-mm-dd' }); - - + + $('#schedulingEndDatetimeField').change(function(){ if ( $('#schedulingEndDatetimeField').val() == "" ) { $('#timeLimitIndividualField').prop('disabled', false); @@ -284,13 +290,13 @@ $('#precedingLessonIdField').hide('slow'); } }); - + $('#timeLimitDaysField').attr({ 'min' : 0, 'max' : 180, 'step' : 1 }).val(30); - + $('#timeLimitEnableField').change(function(){ if ($(this).is(':checked')) { $('#timeLimitDiv').show('slow'); @@ -317,7 +323,7 @@ if (lessonName){ $('#lessonNameInput').removeClass('errorBorder'); } - + if (!learningDesignId) { var ldNode = tree.treeview('getSelected')[0]; if (ldNode == null) { @@ -326,16 +332,16 @@ learningDesignId = ldNode.learningDesignId; } } - + if (!learningDesignId) { $('#ldNotChosenError').show(); doSelectTab(1); return; } $('#ldIdField').val(learningDesignId); - + if (lessonName){ - var nameValidator = /^[^<>^*@%$]*$/igm; + var nameValidator = /^[^<>^*@%$]*$/igm; if (!nameValidator.test(lessonName)) { $('#lessonNameInput').addClass('errorBorder'); doSelectTab(1); @@ -348,23 +354,23 @@ return; } $('#lessonNameField').val(lessonName); - - + + var learners = getSelectedUserList('selected-learners'); if (learners == ''){ $('
').addClass('errorMessage') - .text(LABEL_MISSING_LEARNERS) - .appendTo('#selected-learners'); + .text(LABEL_MISSING_LEARNERS) + .appendTo('#selected-learners'); doSelectTab(2); return; } $('#learnersField').val(learners); - + var monitors = getSelectedUserList('selected-monitors'); if (monitors == ''){ $('
').addClass('errorMessage') - .text(LABEL_MISSING_MONITORS) - .appendTo('#selected-monitors'); + .text(LABEL_MISSING_MONITORS) + .appendTo('#selected-monitors'); doSelectTab(2); return; } @@ -379,19 +385,19 @@ $("#timelimitError").css("display","none"); } } - + $('#addButton').button('loading'); - + if ($('#splitLearnersField').is(':checked')) { var maxLearnerCount = $('#selected-learners div.draggableItem').length, learnerCount = $('#splitLearnersCountField').val(), instances = Math.ceil(maxLearnerCount/learnerCount); $('#splitNumberLessonsField').val(instances); } - + // copy CKEditor contents to textarea for submit $('#introDescription').val(CKEDITOR.instances['introDescription'].getData()); - + //handle multiple lessons feature if ($(".multiple-lessons:checked").length) { //don't send main organisation's id to the server in case other multiple lessons are chosen @@ -409,7 +415,7 @@ function previewLesson(){ var ldNode = tree.treeview('getSelected')[0], learningDesignID = null; - popupWidth = 1280, + popupWidth = 1280, popupHeight = 720; if (ldNode && ldNode.learningDesignId) { @@ -419,7 +425,7 @@ // get data from "recently used sequences" list learningDesignID = +$('div#accessDiv .access-selected').data('learningDesignId'); } - + if (!learningDesignID) { $('#ldNotChosenError').show(); doSelectTab(1); @@ -442,7 +448,7 @@ previewButton.button('reset'); return; } - + $.ajax({ url : LAMS_URL + 'monitoring/monitoring/startPreviewLesson.do', data : { @@ -453,7 +459,7 @@ success : function() { // open preview pop up window window.open(LAMS_URL + 'home/learner.do?mode=preview&lessonID='+lessonID,'Preview', - 'width=' + popupWidth + ',height=' + popupHeight + ',resizable,status=yes'); + 'width=' + popupWidth + ',height=' + popupHeight + ',resizable,status=yes'); previewButton.button('reset'); } }); @@ -465,7 +471,7 @@ // ********** LESSON TAB FUNCTIONS ********** function loadLearningDesignSVG(ldId) { - + $.ajax({ dataType : 'text', url : LAMS_URL + 'home/getLearningDesignThumbnail.do', @@ -474,13 +480,13 @@ data : { 'ldId' : ldId, '_t' : new Date().getTime() - + }, success : function(response) { // hide "loading" animation $('.ldChoiceDependentCanvasElement').css('display', 'none'); generatingLearningDesign = false; - + // show the thumbnail $('#ldScreenshotAuthor').html(response); $('#ldScreenshotAuthor').css('display', 'block').css('width', 'auto').css('height', 'auto'); @@ -491,7 +497,7 @@ // resize if needed var resized = resizeSequenceThumbnail(); toggleCanvasResize(resized ? CANVAS_RESIZE_OPTION_FIT - : CANVAS_RESIZE_OPTION_NONE); + : CANVAS_RESIZE_OPTION_NONE); }, error : function(error) { @@ -504,17 +510,17 @@ } generatingLearningDesign = true; - + // iframe just to load Authoring for a single purpose, generate the SVG var frame = $('