'use strict'; AIA.controller("AODController", ["$scope", "$window", "$rootScope", "$compile", "$http", "$log", "$location", "$timeout","DataService", "ModuleService", "$interval", "AIAConstants", function ($scope, $window, $rootScope, $compile, $http, log, $location, $timeout,DataService, ModuleService, $interval, AIAConstants) { $scope.ObjectAttribute=function(windowviewid) { var windata={ 'multiwinid': windowviewid, 'AODAnimationData': [], 'moduleName': '', 'clickedVideo':'', 'currentViewTitle': '', 'parentSlugName': '', 'currentSlug': '', 'imageId': '', 'y': 0, 'x': 0, 'width': 0, 'height': 0, 'minimised': false, 'maximised': false, 'minmaxAutoEvent':true }; return windata; } $scope.initializeAODWindowData = function (windowviewid, isOpenWithExistsModule, openPanelNo) { if (isOpenWithExistsModule || openPanelNo == 0) { if ($rootScope.AODWindowData != undefined) { $rootScope.AODWindowData.length = 0; } else { $rootScope.AODWindowData = []; } $rootScope.AODWindowData.push($scope.ObjectAttribute(windowviewid)); } else { var isNewWindow = true; for (var k = 0; k < $rootScope.AODWindowData.length; k++) { if ($rootScope.AODWindowData[k].multiwinid == windowviewid) { isNewWindow = false; break; } } if (isNewWindow) { $rootScope.AODWindowData.push($scope.ObjectAttribute(windowviewid)); } } } $scope.GetAODwindowStoreData = function (windowviewid, keyname) { for (var x = 0 ; x < $rootScope.AODWindowData.length; x++) { if ($rootScope.AODWindowData[x].multiwinid == windowviewid) { return $rootScope.AODWindowData[x][keyname]; } } } $scope.SetAODwindowStoreData = function (windowviewid, keyname, value) { for (var x = 0 ; x < $rootScope.AODWindowData.length; x++) { if ($rootScope.AODWindowData[x].multiwinid == windowviewid) { $rootScope.AODWindowData[x][keyname] = value; } } } $scope.DisableUI = function () { var aniImagePanelConetent = document.getElementsByClassName("jsPanel-content"); for (var i = 0; i < aniImagePanelConetent.length; i++) { aniImagePanelConetent[i].style.pointerEvents = "none"; aniImagePanelConetent[i].style.opacity = "0.7"; } $rootScope.isLoading = true; $('#spinner').css('visibility', 'visible'); // CB module disable all $('#HomeContainerDiv').css('pointer-events', 'none'); $('#HomeContainerDiv').css('opacity', '0.7'); } $scope.EnableUI = function () { var aniImagePanelConetent = document.getElementsByClassName("jsPanel-content"); for (var i = 0; i < aniImagePanelConetent.length; i++) { aniImagePanelConetent[i].style.pointerEvents = "auto"; aniImagePanelConetent[i].style.opacity = "1"; } $rootScope.isLoading = false; $('#spinner').css('visibility', 'hidden'); // CB module enable all $('#HomeContainerDiv').css('pointer-events', 'auto'); $('#HomeContainerDiv').css('opacity', '1'); } $scope.RemoveJSPanel = function (panelid) { var len = (panelid).split("_").length; var windowviewid = (panelid).split("_")[len - 1]; // remove old stored data after close panel for (var index = 0 ; index < $rootScope.AODWindowData.length; index++) { if ($rootScope.AODWindowData[index].multiwinid == windowviewid) { if (index != -1) { // remove module which one is loaded var reffid=$rootScope.AODWindowData[index].imageId; $rootScope.AODWindowData.splice(index, 1); //remove also stream/source video from close panel from cb if($rootScope.collectAnimationSource !=undefined) { for (var vdx = 0 ; vdx < $rootScope.collectAnimationSource.length; vdx++) { if(reffid==$rootScope.collectAnimationSource[vdx].imageId) $rootScope.collectAnimationSource.splice(vdx, 1); } } if ($('#' + panelid).html() != undefined) { $('#' + panelid).remove(); } // $rootScope.resetjsPanelTop(panelid); } } } } $scope.PanelActivity = function () { // close panel $(document).on("click", "#" + $scope.jsPanelID + " .jsPanel-hdr .jsPanel-hdr-r .jsPanel-btn-close .jsglyph-remove", function (event) { var panelid = $(event.target).parent().parent().parent().parent().attr('id'); $scope.RemoveJSPanel(panelid); }); } $scope.loadAIModuleById = function (moduleId) { $rootScope.isCallFromOtherModule = undefined; $rootScope.MULTI_VIEW_ID += 1 // store exist module in module service var ExistData = ModuleService.getModuleData("ADAM_ON_DEMAND"); if (ExistData != undefined && ExistData.length > 0) { // clear all module data before open new module in cb ModuleService.ClearWinDataByModule(ExistData.mType); } var newWindowData = { "mType": 'ADAM_ON_DEMAND', }; ModuleService.setModuleData(newWindowData, 0); // close/remove prev panel when in minimised mode if($rootScope.AODWindowData!=undefined) { if($rootScope.AODWindowData.length>0) { for(var x=0 ;x < $rootScope.AODWindowData.length;x++){ var winid=$rootScope.AODWindowData[x].multiwinid; if ($('#aodImagePanel_' + winid).html() != undefined) { $('#aodImagePanel_' + winid).remove(); } } $rootScope.AODWindowData=[]; } } $scope.initializeAODWindowData($rootScope.MULTI_VIEW_ID, true, undefined); $scope.DisableUI(); if ($rootScope.refreshcheck == null) { $location.path('/'); } // code that will be executed ... // every time this view is loaded $rootScope.currentActiveModuleTitle = "ADAM ON DEMAND"; $scope.SetAODwindowStoreData($rootScope.MULTI_VIEW_ID, 'moduleName', "ADAM ON DEMAND"); $scope.LoadAODJsonData($rootScope.MULTI_VIEW_ID); setTimeout(function () { var curtab = $rootScope.getLocalStorageValue("currentCATabView"); //call time interval function until load Illustration data var timeintval = null; timeintval = $interval(function () { var AODAnimationData = $scope.GetAODwindowStoreData($rootScope.MULTI_VIEW_ID, 'AODAnimationData'); if (AODAnimationData.length>0) { $scope.stopIntervalAOD(); $scope.loadAODList($rootScope.MULTI_VIEW_ID); } else { console.log("waiting for aod Data"); } }, 100); $scope.stopIntervalAOD = function () { if (angular.isDefined(timeintval)) { $interval.cancel(timeintval); timeintval = undefined; } }; }, 200); }; $scope.LoadAODJsonData = function (windowviewid) { var promise = DataService.getJson('~/../content/data/json/aod/aod_courselist.json') promise.then( function (result) { var AODAnimationData = new jinqJs() .from(result.root.AODData) .orderBy([{ field: '_BodySystem', sort: 'asc' }]) .select(); $scope.SetAODwindowStoreData(windowviewid, 'AODAnimationData', AODAnimationData); }, function (error) { $scope.EnableUI(); } ); }; $scope.loadAODList = function (windowviewid) { var selectedAODListViewData = $scope.GetAODwindowStoreData(windowviewid, 'AODAnimationData'); $('#grid-view').empty(); angular.forEach(selectedAODListViewData, function (value, key) { var imagePath = "~/../content/images/aod/thumbnails/" + value._ThumbnailImage; var $el = $('
' + '
' + '' + '

'+'ID: '+ value._ImageId + '

' + value._Title + '

').appendTo('#grid-view'); $compile($el)($scope); $(".sidebar").mCustomScrollbar({ autoHideScrollbar: true, //theme:"rounded" }); }); $('#' + $rootScope.getLocalStorageValue("currentBodyViewId")).find('.thumbnail').addClass('HightLightThumbnail'); $timeout(function () { if ($rootScope.getLocalStorageValue('AODGridViewScroll') !== null && $location.url() == "/ADAM-on-demand") { $('html, body').animate({ scrollTop: $rootScope.getLocalStorageValue('AODGridViewScroll') }, 'slow'); } }, 200); $timeout(function () { $scope.EnableUI(); }, 400); } $scope.openView = function ($event) { var windowviewid = $rootScope.MULTI_VIEW_ID; $rootScope.MenuModuleName = "AOD"; $rootScope.currentBodyViewId = $event.currentTarget.id; if ($event.currentTarget.textContent !== null && typeof ($event.currentTarget.textContent) !== "undefined") { var selectedAODListViewData = $scope.GetAODwindowStoreData(windowviewid, 'AODAnimationData'); var selectedTileData = []; selectedTileData = new jinqJs() .from(selectedAODListViewData) .where('_ImageId = ' + $event.currentTarget.id) .select(); $rootScope.ViewTitle = selectedTileData[0]._Title; } else { $rootScope.ViewTitle = $event.currentTarget.textContent; } var isopenResourceRequest = sessionStorage.getItem('isModuleOpenByOpenResource'); if (isopenResourceRequest == "true") { //set default module data var AODDopenData = { "id": $event.currentTarget.id, "mType": 'ADAM_ON_DEMAND', "windowTitle": $rootScope.ViewTitle, "size": { height: 800, width: 900 }, "position": { x: 300, y: 110 } }; window.parent.AIAModuleOpenResourceInfo(AODDopenData); } else { localStorage.setItem("currentViewTitle", $rootScope.ViewTitle); localStorage.setItem("currentBodyViewId", $event.currentTarget.id); $scope.SetAODwindowStoreData(windowviewid, 'currentViewTitle', $rootScope.ViewTitle); $scope.SetAODwindowStoreData(windowviewid, 'imageId', $event.currentTarget.id); var promise = DataService.getJson('~/../content/data/json/aod/aod_courselist_video.json') promise.then( function (result) { // $scope.AnimationData = result; $scope.AODlistViewData = result.root.AODData; var id = $scope.GetAODwindowStoreData(windowviewid, 'imageId'); var clickedAODVideoData = []; clickedAODVideoData = new jinqJs() .from($scope.AODlistViewData) .where('_ImageId == ' + id) .select('_Video'); var clickedVideo = clickedAODVideoData[0]._Video; $scope.SetAODwindowStoreData(windowviewid, 'clickedVideo', clickedVideo); var AODGridViewScrollPosition = $($window).scrollTop(); localStorage.setItem('AODGridViewScroll', AODGridViewScrollPosition); $location.url('/AOD-view-detail'); }, function (error) { } ); } } $rootScope.openAODBodyViewMain = function () { if ($rootScope.isCallFromOtherModule) { $scope.DisableUI(); $scope.VideoModuleData = ModuleService.getModuleData("ADAM_ON_DEMAND"); $scope.readyToLoad = true; $rootScope.AODLoadComplete = false; $scope.wincount = 1; var winlen = $scope.VideoModuleData.length; var timeint = null; timeint = $interval(function () { if ($scope.readyToLoad == true) { var windata = $scope.VideoModuleData[$scope.wincount - 1]; $scope.OpenAODView(windata); } $scope.readyToLoad = false; if ($scope.wincount < winlen && $rootScope.AODLoadComplete == true) { $scope.wincount = $scope.wincount + 1; $rootScope.AODLoadComplete = false; $scope.readyToLoad = true; } if ($scope.wincount == winlen && $rootScope.AODLoadComplete == true) { $scope.stopInterval(); $scope.$emit("LoadModuleComplete", "ADAM_ON_DEMAND"); } }, 100); $scope.stopInterval = function () { if (angular.isDefined(timeint)) { $interval.cancel(timeint); timeint = undefined; } }; } else { $scope.OpenAODView(null); } } $scope.OpenAODView = function (vidModuleData) { if ($rootScope.isCallFromOtherModule == true) { $scope.AODpenInOtherModules = vidModuleData; $rootScope.MULTI_VIEW_ID += 1; var windowviewid = $rootScope.MULTI_VIEW_ID; $scope.initializeAODWindowData(windowviewid, false, $scope.AODpenInOtherModules.currentWindowId); var moduleName = $scope.AODpenInOtherModules.mType; $scope.SetAODwindowStoreData(windowviewid, 'moduleName', moduleName); var promise = DataService.getJson('~/../content/data/json/aod/aod_courselist_video.json') promise.then( function (result) { $scope.AODlistViewData = result.root.AODData; // serial no of imageid var imageId = $scope.AODpenInOtherModules.id; var clickedVideoData = []; clickedVideoData = new jinqJs() .from($scope.AODlistViewData) .where('_ImageId == ' + imageId) .select('_Video'); if (clickedVideoData.length == 0) { $rootScope.AODLoadComplete = true return; } $scope.SetAODwindowStoreData(windowviewid, 'imageId', imageId); var clickedCAVideo = clickedVideoData[0]._Video; $scope.SetAODwindowStoreData(windowviewid, 'clickedVideo', clickedCAVideo); var ciTitle = $scope.AODpenInOtherModules.anatomyTitle; $scope.SetAODwindowStoreData(windowviewid, 'currentViewTitle', ciTitle); localStorage.setItem("currentViewTitle", ciTitle); var isMaximize = $scope.AODpenInOtherModules.maximised; var isMinimize = $scope.AODpenInOtherModules.minimised; $scope.SetAODwindowStoreData(windowviewid, 'maximised', isMaximize); $scope.SetAODwindowStoreData(windowviewid, 'minimised', isMinimize); if($location.url()== "/curriculum-builder-detail") { $scope.SetAODwindowStoreData(windowviewid,'parentSlugName',($location.url()).replace('/', '')); } else { $scope.SetAODwindowStoreData(windowviewid,'parentSlugName','ADAM-on-demand'); } $scope.loadAdamVideo(windowviewid); }, function (error) { } ); } else { $scope.SetAODwindowStoreData($rootScope.MULTI_VIEW_ID, 'parentSlugName', 'ADAM-on-demand'); $scope.loadAdamVideo($rootScope.MULTI_VIEW_ID); } } $scope.loadAdamVideo = function (windowviewid) { $scope.DisableUI(); $scope.jsPanelID = 'aodImagePanel' + '_' + windowviewid; var tittle = $scope.GetAODwindowStoreData(windowviewid, 'currentViewTitle'); var videoUrl = $scope.GetAODwindowStoreData(windowviewid, 'clickedVideo'); if ($rootScope.isCallFromOtherModule) { // open JS panel for curriculum with define cornonate in CB jason $scope.jsPanelWidth = $scope.AODpenInOtherModules.size.width;//1000; if ($scope.AODpenInOtherModules.size.width < 800) $scope.jsPanelWidth = 800; $scope.jsPanelHeight = $scope.AODpenInOtherModules.size.height; if ($scope.AODpenInOtherModules.size.height <360) $scope.jsPanelHeight = 360; $scope.jsPanelLeft = $scope.AODpenInOtherModules.position.x; if ($scope.AODpenInOtherModules.position.x < 20) $scope.jsPanelLeft = 20; $scope.jsPanelTop = $scope.AODpenInOtherModules.position.y; if($location.url()!= "/curriculum-builder-detail") { $scope.jsPanelLeft = 1; $scope.jsPanelTop = $rootScope.cBModulejsPanelTop(); } } else { $scope.jsPanelWidth = $(window).outerWidth() - 20; $scope.jsPanelHeight = $(window).outerHeight() - 140; $scope.jsPanelLeft = 1; $scope.jsPanelTop = 70; } if (videoUrl.length > 0 ) { $scope.jsPanelVideo = $.jsPanel({ id: $scope.jsPanelID, selector: '.aodView', theme: 'success', currentController: 'AODController', parentSlug: $scope.GetAODwindowStoreData(windowviewid, 'parentSlugName'), content: '
' + '' + '
', title: tittle, position: { top: $scope.jsPanelTop, left: $scope.jsPanelLeft }, size: { width: $scope.jsPanelWidth, height: $scope.jsPanelHeight }, onminimized:function (panel) { var isAutoCalled = $scope.GetAODwindowStoreData(windowviewid, 'minmaxAutoEvent'); if(!isAutoCalled) { $rootScope.UnsaveCurriculum = true; } $scope.SetAODwindowStoreData(windowviewid, 'minimised',true); $scope.SetAODwindowStoreData(windowviewid, 'maximised',false); }, onmaximized:function (panel) { var isAutoCalled = $scope.GetAODwindowStoreData(windowviewid, 'minmaxAutoEvent'); if(!isAutoCalled) { $rootScope.UnsaveCurriculum = true; } $scope.SetAODwindowStoreData(windowviewid, 'maximised',true); $scope.SetAODwindowStoreData(windowviewid, 'minimised',false); }, onnormalized:function (panel) { var isAutoCalled = $scope.GetAODwindowStoreData(windowviewid, 'minmaxAutoEvent'); if(!isAutoCalled) { $rootScope.UnsaveCurriculum = true; } $scope.SetAODwindowStoreData(windowviewid, 'minimised',false); $scope.SetAODwindowStoreData(windowviewid, 'maximised',false); }, resizable: { stop: function (event, ui) { var len = (event.currentTarget.id).split("_").length; var windowviewid = (event.currentTarget.id).split("_")[len - 1]; $scope.SetAODwindowStoreData(windowviewid, 'width', ui.size.width); $scope.SetAODwindowStoreData(windowviewid, 'height', ui.size.height); $rootScope.UnsaveCurriculum = true; } }, draggable: { stop: function( event, ui ) { var len = (event.currentTarget.id).split("_").length; var windowviewid = (event.currentTarget.id).split("_")[len - 1]; $scope.SetAODwindowStoreData(windowviewid, 'y', ui.position.top); $scope.SetAODwindowStoreData(windowviewid, 'x', ui.position.left); $rootScope.UnsaveCurriculum = true; } }, }); var isMaximize = $scope.GetAODwindowStoreData(windowviewid, 'maximised'); var isMinimize = $scope.GetAODwindowStoreData(windowviewid, 'minimised'); if (isMaximize) { $scope.jsPanelVideo.maximize(); } else if (isMinimize) { $scope.jsPanelVideo.minimize(); } else { $scope.jsPanelVideo.normalize(); } // set false after initial call of min,max or normal $scope.SetAODwindowStoreData(windowviewid, 'minmaxAutoEvent', false); $scope.SetAODwindowStoreData(windowviewid, 'y', $scope.jsPanelTop); $scope.SetAODwindowStoreData(windowviewid, 'x', $scope.jsPanelLeft); $scope.SetAODwindowStoreData(windowviewid, 'width', $scope.jsPanelWidth); $scope.SetAODwindowStoreData(windowviewid, 'height', $scope.jsPanelHeight); $scope.SetAODwindowStoreData(windowviewid, 'currentSlug', 'AOD-view-detail'); $('html, body').animate({ scrollTop: 0 }); } if (!$rootScope.isCallFromOtherModule) { $('#AODView').css("height", $(window).outerHeight() - 20); $('#AODView').css("width", $(window).outerWidth() - 30); } //Calling methode for save Js Panel Activity for SaveCB $scope.PanelActivity(); } $scope.MyAODvideoOnLoad = function (windowviewid) { $scope.EnableUI(); if ($rootScope.isCallFromOtherModule) { $rootScope.AODLoadComplete = true; } $scope.JsPanelclick(windowviewid); } $scope.JsPanelclick = function (windowviewid) { //reset option list manager and annotation //call when module loaded $rootScope.resetMenuOption(); var timeintval = null; timeintval = $interval(PointerEventEnableDisable, 5000); function PointerEventEnableDisable() { var pointevents = $("#aodvideo_" + windowviewid).css('pointer-events'); if (pointevents=='auto') { $scope.stopaodrefresh(timeintval); timeintval = $interval(PointerEventEnableDisable, 500); $("#aodvideo_" + windowviewid).css('pointer-events', 'none'); } else if(pointevents=='none') { $("#aodvideo_" + windowviewid).css('pointer-events', 'auto'); $scope.stopaodrefresh(timeintval); timeintval = $interval(PointerEventEnableDisable, 10000); } else { //auto clode interval when panel close $scope.stopaodrefresh(timeintval); } } $scope.stopaodrefresh = function (timeintval) { if (angular.isDefined(timeintval)) { $interval.cancel(timeintval); timeintval = undefined; } }; // call from while open module in CB //click event not work on object-tag document //so then add mouseenter //remove pre event $("#aodImagePanel_" + windowviewid).off("click mouseenter mouseout"); $("#aodImagePanel_" + windowviewid).on('click mouseenter mouseout', function (event) { //after drawing annotation click not work on iPad/Android device var pnlName = event.currentTarget.id; $rootScope.resetMenuOptionOnClick(pnlName); }); } }]); function MyAODvideoOnLoad(event) { console.log('video loaded') var scope = angular.element(document.getElementById("AODView")).scope(); var len = (event.target.id).split("_").length; var windowviewid = (event.target.id).split("_")[1]; setTimeout(function() { scope.$apply(function () { scope.MyAODvideoOnLoad(windowviewid); }); }, 500); }