Commit f771c498464c6caaf25fec41f6a5c2c08bd343d6

Authored by Birendra
1 parent 907fad24

creating AOD list

Showing 34 changed files with 991 additions and 372 deletions
400-SOURCECODE/AIAHTML5.API/Controllers/ConfigurationController.cs
... ... @@ -6,6 +6,9 @@ using System.Net.Http;
6 6 using System.Web.Http;
7 7 using System.Configuration;
8 8 using Newtonsoft.Json;
  9 +using System.Text;
  10 +using System.Security.Cryptography;
  11 +using System.IO;
9 12  
10 13 namespace AIAHTML5.API.Controllers
11 14 {
... ... @@ -23,6 +26,15 @@ namespace AIAHTML5.API.Controllers
23 26 mconfig.pingInterval = Int32.Parse(ConfigurationManager.AppSettings["PING_INTERVAL"]);
24 27 mconfig.serverPath = ConfigurationManager.AppSettings["ANIMATION_HOSTING_SERVER"];
25 28 mconfig.fileSize = Int32.Parse(ConfigurationManager.AppSettings["UploadMaxFileSize"]);
  29 + mconfig.aodSiteUrl = ConfigurationManager.AppSettings["Aod_site_Url"];
  30 +
  31 + var plainkey = ConfigurationManager.AppSettings["aiapasskey"];
  32 +
  33 + AdamOnDemand aod = new AdamOnDemand();
  34 +
  35 + mconfig.aodkeypass = aod.Encrypt(plainkey);
  36 +
  37 + // var simplekey= aod.Decrypt(mconfig.aodkeypass);
26 38  
27 39 responseData = JsonConvert.SerializeObject(mconfig);
28 40  
... ... @@ -38,4 +50,170 @@ public class MyConfig
38 50 public int pingInterval { get; set; }
39 51 public string serverPath { get; set; }
40 52 public int fileSize { get; set; }
41   -}
42 53 \ No newline at end of file
  54 +
  55 + public string aodSiteUrl { get; set; }
  56 + public string aodkeypass { get; set; }
  57 +}
  58 +
  59 +
  60 +public class AdamOnDemand
  61 +{
  62 + //Triple Des encription/decription
  63 + public string Encrypt(string plainText)
  64 + {
  65 + string passPhrase = ConfigurationManager.AppSettings["EncryptionKey"].ToString();
  66 + string saltValue = ConfigurationManager.AppSettings["SaltValue"].ToString();
  67 + string hashAlgorithm = ConfigurationManager.AppSettings["HashAlgorithm"].ToString();
  68 + int passwordIterations = Convert.ToInt32(ConfigurationManager.AppSettings["IterationCount"]);
  69 + string initVector = ConfigurationManager.AppSettings["InitVector"].ToString();
  70 + int keySize = Convert.ToInt32(ConfigurationManager.AppSettings["KeySize"]); ;
  71 +
  72 +
  73 + return EncryptData(plainText, passPhrase, saltValue, hashAlgorithm,passwordIterations, initVector, keySize);
  74 + }
  75 +
  76 + //Triple Des encription/decription
  77 + public string Decrypt(string encryptedText)
  78 + {
  79 + string passPhrase = ConfigurationManager.AppSettings["EncryptionKey"].ToString();
  80 + string saltValue = ConfigurationManager.AppSettings["SaltValue"].ToString();
  81 + string hashAlgorithm = ConfigurationManager.AppSettings["HashAlgorithm"].ToString();
  82 + int passwordIterations = Convert.ToInt32(ConfigurationManager.AppSettings["IterationCount"]);
  83 + string initVector = ConfigurationManager.AppSettings["InitVector"].ToString();
  84 + int keySize = Convert.ToInt32(ConfigurationManager.AppSettings["KeySize"]); ;
  85 +
  86 +
  87 + return DecryptData(encryptedText, passPhrase, saltValue, hashAlgorithm,passwordIterations, initVector, keySize);
  88 + }
  89 +
  90 + private string EncryptData(string plainText, string passPhrase, string saltValue, string hashAlgorithm,int passwordIterations, string initVector, int keySize)
  91 + {
  92 + // Convert strings into byte arrays.
  93 + // Let us assume that strings only contain ASCII codes.
  94 + // If strings include Unicode characters, use Unicode, UTF7, or UTF8
  95 + // encoding.
  96 + byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
  97 + byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
  98 +
  99 + // Convert our plaintext into a byte array.
  100 + // Let us assume that plaintext contains UTF8-encoded characters.
  101 + byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
  102 +
  103 + // First, we must create a password, from which the key will be derived.
  104 + // This password will be generated from the specified passphrase and
  105 + // salt value. The password will be created using the specified hash
  106 + // algorithm. Password creation can be done in several iterations.
  107 + PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);
  108 +
  109 + // Use the password to generate pseudo-random bytes for the encryption
  110 + // key. Specify the size of the key in bytes (instead of bits).
  111 + byte[] keyBytes = password.GetBytes(keySize / 8);
  112 +
  113 + // Create uninitialized Rijndael encryption object.
  114 + RijndaelManaged symmetricKey = new RijndaelManaged();
  115 +
  116 + // It is reasonable to set encryption mode to Cipher Block Chaining
  117 + // (CBC). Use default options for other symmetric key parameters.
  118 + symmetricKey.Mode = CipherMode.CBC;
  119 +
  120 + // Generate encryptor from the existing key bytes and initialization
  121 + // vector. Key size will be defined based on the number of the key
  122 + // bytes.
  123 + ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
  124 +
  125 + // Define memory stream which will be used to hold encrypted data.
  126 + MemoryStream memoryStream = new MemoryStream();
  127 +
  128 + // Define cryptographic stream (always use Write mode for encryption).
  129 + CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
  130 + // Start encrypting.
  131 + cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
  132 +
  133 + // Finish encrypting.
  134 + cryptoStream.FlushFinalBlock();
  135 +
  136 + // Convert our encrypted data from a memory stream into a byte array.
  137 + byte[] cipherTextBytes = memoryStream.ToArray();
  138 +
  139 + // Close both streams.
  140 + memoryStream.Close();
  141 + cryptoStream.Close();
  142 +
  143 + // Convert encrypted data into a base64-encoded string.
  144 + string cipherText = Convert.ToBase64String(cipherTextBytes);
  145 +
  146 + // Return encrypted string.
  147 + return cipherText;
  148 + }
  149 +
  150 + private string DecryptData(string encryptedText, string passPhrase, string saltValue, string hashAlgorithm, int passwordIterations, string initVector, int keySize)
  151 + {
  152 + try
  153 + {
  154 + // arrays. Let us assume that strings only contain ASCII codes.
  155 + // If strings include Unicode characters, use Unicode, UTF7, or UTF8
  156 + // encoding.
  157 + byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
  158 + byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
  159 +
  160 + // Convert our encryptedvalue into a byte array.
  161 + byte[] cipherTextBytes = Convert.FromBase64String(encryptedText);
  162 +
  163 + // First, we must create a password, from which the key will be
  164 + // derived. This password will be generated from the specified
  165 + // passphrase and salt value. The password will be created using
  166 + // the specified hash algorithm. Password creation can be done in
  167 + // several iterations.
  168 + PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);
  169 +
  170 + // Use the password to generate pseudo-random bytes for the encryption
  171 + // key. Specify the size of the key in bytes (instead of bits).
  172 + byte[] keyBytes = password.GetBytes(keySize / 8);
  173 +
  174 + // Create uninitialized Rijndael encryption object.
  175 + RijndaelManaged symmetricKey = new RijndaelManaged();
  176 +
  177 + // It is reasonable to set encryption mode to Cipher Block Chaining
  178 + // (CBC). Use default options for other symmetric key parameters.
  179 + symmetricKey.Mode = CipherMode.CBC;
  180 +
  181 + // Generate decryptor from the existing key bytes and initialization
  182 + // vector. Key size will be defined based on the number of the key
  183 + // bytes.
  184 + ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
  185 +
  186 + // Define memory stream which will be used to hold encrypted data.
  187 + MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
  188 +
  189 + // Define cryptographic stream (always use Read mode for encryption).
  190 + CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
  191 +
  192 + // Since at this point we don't know what the size of decrypted data
  193 + // will be, allocate the buffer long enough to hold ciphertext;
  194 + // plaintext is never longer than ciphertext.
  195 + byte[] plainTextBytes = new byte[cipherTextBytes.Length];
  196 +
  197 + // Start decrypting.
  198 + int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
  199 +
  200 + // Close both streams.
  201 + memoryStream.Close();
  202 + cryptoStream.Close();
  203 +
  204 + // Convert decrypted data into a string.
  205 + // Let us assume that the original plaintext string was UTF8-encoded.
  206 + string plainText = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
  207 +
  208 + // Return decrypted string.
  209 + return plainText;
  210 +
  211 + }
  212 + catch( Exception ex)
  213 + {
  214 + return null;
  215 + }
  216 + // Convert strings defining encryption key characteristics into byte
  217 +
  218 + }
  219 +
  220 +}
... ...
400-SOURCECODE/AIAHTML5.API/Web.config
... ... @@ -58,6 +58,16 @@
58 58 <add key ="UnblockUserEmailTemplate" value="~/Templates/unblock-User.html"/>
59 59 <add key ="ForgotPasswordEmailTemplate" value="~/Templates/forgot-Password.html"/>
60 60 <add key ="ForgotUserIdEmailTemplate" value="~/Templates/forgot-UserId.html"/>
  61 +
  62 + <!-- This is for encryption: Added by Birendra-->
  63 + <add key="Aod_site_Url" value="https://uat.adamondemand.com/"/>
  64 + <add key="aiapasskey" value="as@2$eDu8Jk"/>
  65 + <add key="EncryptionKey" value="I0rw3rthFych@n"/>
  66 + <add key="SaltValue" value="Fl@1Thb3rtaIcH"/>
  67 + <add key="HashAlgorithm" value="SHA1"/>
  68 + <add key="IterationCount" value="2"/>
  69 + <add key="InitVector" value="@1B2c3D4e5F6g7H8"/>
  70 + <add key="KeySize" value="256"/>
61 71  
62 72  
63 73 <!--<add key ="AIADatabaseV5Context" value="Data Source=192.168.90.53;Initial Catalog=AIADatabaseV5;User ID=AIA_Dev;Password=india123;"/>-->
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/AODController.js
1   -AIA.controller("AODController", ["$scope", "$rootScope", "pages", "$log","$location",
2   -function ($scope, $rootScope, pages, log, $location) {
3   - //$scope.showTabButton = true;
4   - //$scope.IsVisible = function () {
5   - // $scope.scroll();
  1 +'use strict';
6 2  
7   - //}
  3 +AIA.controller("AODController", ["$scope", "$window", "$rootScope", "$compile", "$http", "$log", "$location", "$timeout","DataService", "ModuleService", "$interval", "AIAConstants",
  4 +function ($scope, $window, $rootScope, $compile, $http, log, $location, $timeout,DataService, ModuleService, $interval, AIAConstants) {
  5 + $scope.ObjectAttribute=function(windowviewid)
  6 + {
  7 + var windata={
  8 + 'multiwinid': windowviewid,
  9 + 'AODAnimationData': [],
  10 + 'moduleName': '',
  11 + 'VideoUrl':'',
  12 + 'currentViewTitle': '',
  13 + 'parentSlugName': '',
  14 + 'currentSlug': '',
  15 + 'imageId': ''
  16 + };
  17 + return windata;
  18 + }
8 19  
9   - $scope.setActiveTab = function (tabToSet) {
10   - $scope.activeTab = tabToSet;
11   - localStorage.setItem("currentAODTabView", $scope.activeTab);
12   - };
  20 + $scope.initializeAODWindowData = function (windowviewid, isOpenWithExistsModule, openPanelNo) {
  21 + if (isOpenWithExistsModule || openPanelNo == 0) {
  22 + if ($rootScope.AODWindowData != undefined) {
  23 + $rootScope.AODWindowData.length = 0;
  24 + }
  25 + else {
  26 + $rootScope.AODWindowData = [];
  27 + }
  28 +
  29 + $rootScope.AODWindowData.push($scope.ObjectAttribute(windowviewid));
  30 +
  31 + }
  32 + else {
  33 + var isNewWindow = true;
  34 + for (var k = 0; k < $rootScope.AODWindowData.length; k++) {
  35 + if ($rootScope.AODWindowData[k].multiwinid == windowviewid) {
  36 + isNewWindow = false;
  37 + break;
  38 + }
  39 + }
13 40  
14   - $scope.scroll = function () {
15   - // $window.scrollTo(0, 0);
16   - $("html,body").scrollTop(0);
17   - //alert("scroll");
  41 + if (isNewWindow) {
  42 + $rootScope.AODWindowData.push($scope.ObjectAttribute(windowviewid));
  43 + }
  44 + }
18 45 }
19   - //$rootScope.currentActiveModuleTitle = pages[10].name;
  46 +
  47 + $scope.GetAODwindowStoreData = function (windowviewid, keyname) {
  48 + for (var x = 0 ; x < $rootScope.AODWindowData.length; x++) {
20 49  
21   - $scope.$on('$viewContentLoaded', function (event) {
  50 + if ($rootScope.AODWindowData[x].multiwinid == windowviewid) {
  51 + return $rootScope.AODWindowData[x][keyname];
  52 + }
  53 + }
  54 + }
  55 +
  56 + $scope.SetAODwindowStoreData = function (windowviewid, keyname, value) {
  57 + for (var x = 0 ; x < $rootScope.AODWindowData.length; x++) {
  58 +
  59 + if ($rootScope.AODWindowData[x].multiwinid == windowviewid) {
  60 + $rootScope.AODWindowData[x][keyname] = value;
  61 + }
  62 + }
  63 + }
  64 +
  65 + $scope.DisableUI = function () {
  66 +
  67 + var aniImagePanelConetent = document.getElementsByClassName("jsPanel-content");
  68 + for (var i = 0; i < aniImagePanelConetent.length; i++) {
  69 + aniImagePanelConetent[i].style.pointerEvents = "none";
  70 + aniImagePanelConetent[i].style.opacity = "0.7";
  71 +
  72 + }
  73 + $rootScope.isLoading = true;
  74 + $('#spinner').css('visibility', 'visible');
  75 +
  76 + // CB module disable all
  77 + $('#HomeContainerDiv').css('pointer-events', 'none');
  78 + $('#HomeContainerDiv').css('opacity', '0.7');
  79 + }
  80 +
  81 + $scope.EnableUI = function () {
  82 +
  83 + var aniImagePanelConetent = document.getElementsByClassName("jsPanel-content");
  84 + for (var i = 0; i < aniImagePanelConetent.length; i++) {
  85 + aniImagePanelConetent[i].style.pointerEvents = "auto";
  86 + aniImagePanelConetent[i].style.opacity = "1";
  87 + }
  88 +
  89 + $rootScope.isLoading = false;
  90 + $('#spinner').css('visibility', 'hidden');
  91 + // CB module enable all
  92 + $('#HomeContainerDiv').css('pointer-events', 'auto');
  93 + $('#HomeContainerDiv').css('opacity', '1');
  94 +
  95 + }
  96 +
  97 + $scope.RemoveJSPanel = function (panelid) {
  98 +
  99 + var len = (panelid).split("_").length;
  100 + var windowviewid = (panelid).split("_")[len - 1];
  101 +
  102 + // remove old stored data after close panel
  103 + for (var index = 0 ; index < $rootScope.AODWindowData.length; index++) {
  104 +
  105 + if ($rootScope.AODWindowData[index].multiwinid == windowviewid) {
  106 +
  107 + if (index != -1) {
  108 + // remove module which one is loaded
  109 + var reffid=$rootScope.AODWindowData[index].imageId;
  110 + $rootScope.AODWindowData.splice(index, 1);
  111 + //remove also stream/source video from close panel from cb
  112 + if($rootScope.collectAnimationSource !=undefined)
  113 + {
  114 + for (var vdx = 0 ; vdx < $rootScope.collectAnimationSource.length; vdx++) {
  115 + if(reffid==$rootScope.collectAnimationSource[vdx].imageId)
  116 + $rootScope.collectAnimationSource.splice(vdx, 1);
  117 + }
  118 + }
  119 + if ($('#' + panelid).html() != undefined) {
  120 +
  121 + $('#' + panelid).remove();
  122 +
  123 + }
  124 + // $rootScope.resetjsPanelTop(panelid);
  125 + }
  126 + }
  127 + }
  128 + }
  129 + $scope.PanelActivity = function () {
  130 + // close panel
  131 + $(document).on("click", "#" + $scope.jsPanelID + " .jsPanel-hdr .jsPanel-hdr-r .jsPanel-btn-close .jsglyph-remove", function (event) {
  132 +
  133 + var panelid = $(event.target).parent().parent().parent().parent().attr('id');
  134 +
  135 + $scope.RemoveJSPanel(panelid);
  136 +
  137 + });
  138 + }
  139 +
  140 +
  141 + $scope.loadAIModuleById = function (moduleId) {
  142 +
  143 + $rootScope.MULTI_VIEW_ID += 1
  144 +
  145 + if($rootScope.AODWindowData!=undefined)
  146 + {
  147 + if($rootScope.AODWindowData.length>0)
  148 + {
  149 + for(var x=0 ;x < $rootScope.AODWindowData.length;x++){
  150 + var winid=$rootScope.AODWindowData[x].multiwinid;
  151 + if ($('#aodImagePanel_' + winid).html() != undefined) {
  152 + $('#aodImagePanel_' + winid).remove();
  153 + }
  154 + }
  155 + $rootScope.AODWindowData=[];
  156 + }
  157 + }
  158 +
  159 + $scope.initializeAODWindowData($rootScope.MULTI_VIEW_ID, true, undefined);
  160 +
  161 + $scope.DisableUI();
22 162  
23 163 if ($rootScope.refreshcheck == null) {
24 164 $location.path('/');
25 165 }
26   -
27   - // code that will be executed ...
  166 + // code that will be executed ...
28 167 // every time this view is loaded
29 168  
30   - //get current path
31   - var currentURL = $location.path();
32   - var selectedModuleName = '';
33   - //set module title
34   - angular.forEach($rootScope.userModules, function (value, key) {
35   - if (value.slug === currentURL.replace('/', '')) {
36   - selectedModuleName = value.name;
  169 +
  170 + $rootScope.currentActiveModuleTitle = "ADAM ON DEMAND";
  171 +
  172 + $scope.SetAODwindowStoreData($rootScope.MULTI_VIEW_ID, 'moduleName', "ADAM ON DEMAND");
  173 +
  174 + $scope.LoadAODJsonData($rootScope.MULTI_VIEW_ID);
  175 +
  176 + setTimeout(function () {
  177 +
  178 + //call time interval function until load Illustration data
  179 + var timeintval = null;
  180 + timeintval = $interval(function () {
  181 + var AODAnimationData = $scope.GetAODwindowStoreData($rootScope.MULTI_VIEW_ID, 'AODAnimationData');
  182 + if (AODAnimationData.length>0) {
  183 + $scope.stopIntervalAOD();
  184 + $scope.loadAODList($rootScope.MULTI_VIEW_ID);
  185 + }
  186 + else
  187 + {
  188 + console.log("waiting for aod Data");
  189 + }
  190 + }, 100);
  191 +
  192 + $scope.stopIntervalAOD = function () {
  193 + if (angular.isDefined(timeintval)) {
  194 + $interval.cancel(timeintval);
  195 + timeintval = undefined;
37 196 }
38   - $rootScope.currentActiveModuleTitle = selectedModuleName;
39   - })
  197 + };
  198 +
  199 + }, 200);
  200 + };
  201 +
  202 + $scope.LoadAODJsonData = function (windowviewid) {
  203 +
  204 + var promise = DataService.getJson('~/../content/data/json/aod/aod_courselist.json')
  205 + promise.then(
  206 + function (result) {
  207 +
  208 + var AODAnimationData = new jinqJs()
  209 + .from(result.root.AODData)
  210 + .orderBy([{ field: '_BodySystem', sort: 'asc' }])
  211 + .select();
  212 +
  213 + $scope.SetAODwindowStoreData(windowviewid, 'AODAnimationData', AODAnimationData);
  214 +
  215 + },
  216 + function (error) {
  217 + $scope.EnableUI();
  218 +
  219 + }
  220 + );
  221 +
  222 +
  223 + };
  224 +
  225 + $scope.loadAODList = function (windowviewid) {
  226 +
  227 + var selectedAODListViewData = $scope.GetAODwindowStoreData(windowviewid, 'AODAnimationData');
  228 +
  229 + $('#grid-view').empty();
40 230  
41   - $scope.showTabButton = true;
42   - $scope.IsVisible = function () {
43   - $scope.scroll();
  231 + angular.forEach(selectedAODListViewData, function (value, key) {
  232 + var imagePath = "~/../content/images/aod/thumbnails/" + value._ThumbnailImage;
44 233  
  234 +
  235 + var $el = $('<div id="' + value._ImageId + '" class="col-sm-3 col-lg-2" title = "'+ value._Title + '" data-ng-click="openView($event)">'
  236 + + '<div class="thumbnail" ><a href="#">'
  237 + + '<img id="' + value._Title + '" class="img-responsive" style="width:100%;height:100%;" ng-src="' + imagePath + '" alt="" title="" >'
  238 + + '<div class="caption" style="padding:0px;height:80px"><p style="height:15px"><em>'+'ID: '+ value._ImageId + '</em></p><p style="font-weight:bold;white-space:pre-wrap">' + value._Title + '</p></div></a></div></div>').appendTo('#grid-view');
  239 +
  240 + $compile($el)($scope);
  241 +
  242 + $(".sidebar").mCustomScrollbar({
  243 + autoHideScrollbar: true,
  244 + //theme:"rounded"
  245 + });
  246 +
  247 + });
  248 +
  249 + $('#' + $rootScope.getLocalStorageValue("currentBodyViewId")).find('.thumbnail').addClass('HightLightThumbnail');
  250 + $timeout(function () {
  251 + if ($rootScope.getLocalStorageValue('AODGridViewScroll') !== null && $location.url() == "/ADAM-on-demand") {
  252 +
  253 + $('html, body').animate({ scrollTop: $rootScope.getLocalStorageValue('AODGridViewScroll') }, 'slow');
  254 + }
  255 + },
  256 + 200);
  257 +
  258 +
  259 + $timeout(function () {
  260 + $scope.EnableUI();
  261 + $scope.ResetGridListLength();
  262 + }, 400);
  263 +
  264 + }
  265 + $scope.ResetGridListLength=function()
  266 + {
  267 + var $ua = navigator.userAgent;
  268 +
  269 + if (($ua.match(/(iPod|iPhone|iPad|android)/i))) {
  270 +
  271 + if(screen.height<=768)
  272 + {
  273 + $('#grid-view').css({"height":"660","overflow":"scroll"});
  274 + }
  275 + else if(screen.height<=1024)
  276 + {
  277 + $('#grid-view').css({"height":"910","overflow":"scroll"});
  278 + }
  279 + else
  280 + {
  281 + $('#grid-view').css({"height":"1250","overflow":"scroll"});
  282 + }
  283 + }
  284 + else
  285 + {
  286 + $('#grid-view').css({"height":"830","overflow":"scroll"});
45 287 }
  288 + }
46 289  
47   - // $rootScope.currentActiveModuleTitle = pages[10].name;
  290 + $scope.openView = function ($event) {
  291 + var windowviewid = $rootScope.MULTI_VIEW_ID;
48 292  
49   - //set the local storage
  293 + $rootScope.MenuModuleName = "AOD";
  294 + $rootScope.currentBodyViewId = $event.currentTarget.id;
  295 + if ($event.currentTarget.textContent !== null && typeof ($event.currentTarget.textContent) !== "undefined") {
  296 + var selectedAODListViewData = $scope.GetAODwindowStoreData(windowviewid, 'AODAnimationData');
  297 + var selectedTileData = [];
  298 + selectedTileData = new jinqJs()
  299 + .from(selectedAODListViewData)
  300 + .where('_ImageId = ' + $event.currentTarget.id)
  301 + .select();
50 302  
51   - var curtab = $rootScope.getLocalStorageValue("currentAODTabView");
52   - if (curtab == 2) {
53   - $scope.setActiveTab(2);
  303 + $rootScope.ViewTitle = selectedTileData[0]._Title;
54 304 }
55 305 else {
56   - $scope.setActiveTab(1);
  306 + $rootScope.ViewTitle = $event.currentTarget.textContent;
57 307 }
58 308  
59   - });
  309 + localStorage.setItem("currentViewTitle", $rootScope.ViewTitle);
  310 + localStorage.setItem("currentBodyViewId", $event.currentTarget.id);
  311 +
  312 + $scope.SetAODwindowStoreData(windowviewid, 'currentViewTitle', $rootScope.ViewTitle);
  313 + $scope.SetAODwindowStoreData(windowviewid, 'imageId', $event.currentTarget.id);
  314 +
  315 + var promise = DataService.getJson('~/../content/data/json/aod/aod_courselist_video.json')
  316 + promise.then(
  317 + function (result) {
  318 + // $scope.AnimationData = result;
  319 + $scope.AODlistViewData = result.root.AODData;
  320 + var id = $scope.GetAODwindowStoreData(windowviewid, 'imageId');
  321 + var clickedAODVideoData = [];
  322 + clickedAODVideoData = new jinqJs()
  323 + .from($scope.AODlistViewData)
  324 + .where('_ImageId == ' + id)
  325 + .select('_VideoUrl');
  326 +
  327 + var clickedVideoUrl = clickedAODVideoData[0]._VideoUrl;
  328 +
  329 + $scope.SetAODwindowStoreData(windowviewid, 'VideoUrl', clickedVideoUrl);
  330 +
  331 + var AODGridViewScrollPosition = $($window).scrollTop();
  332 + localStorage.setItem('AODGridViewScroll', AODGridViewScrollPosition);
  333 + $location.url('/AOD-view-detail');
  334 +
  335 + },
  336 + function (error) {
  337 +
  338 + }
  339 +
  340 + );
  341 +
  342 +
  343 + }
  344 +
  345 +
  346 + $scope.openAODBodyViewMain = function () {
  347 + $scope.SetAODwindowStoreData($rootScope.MULTI_VIEW_ID, 'parentSlugName', 'ADAM-on-demand');
  348 + $scope.loadAdamVideo($rootScope.MULTI_VIEW_ID);
  349 +
  350 + }
  351 +
  352 + $scope.loadAdamVideo = function (windowviewid) {
  353 + $scope.DisableUI();
  354 + $scope.jsPanelID = 'aodImagePanel' + '_' + windowviewid;
  355 + var tittle = $scope.GetAODwindowStoreData(windowviewid, 'currentViewTitle');
  356 + var videoUrl = $rootScope.aodSiteUrl+ $scope.GetAODwindowStoreData(windowviewid, 'VideoUrl');
  357 + // var videoUrl = "https://adamondemand.com/"+ $scope.GetAODwindowStoreData(windowviewid, 'VideoUrl');
  358 +
  359 + $scope.jsPanelWidth = $(window).outerWidth() - 20;
  360 + $scope.jsPanelHeight = $(window).outerHeight() - 140;
  361 + $scope.jsPanelLeft = 1;
  362 + $scope.jsPanelTop = 70;
  363 +
  364 + if (videoUrl.length > 0 ) {
  365 + $scope.jsPanelVideo = $.jsPanel({
  366 + id: $scope.jsPanelID,
  367 + selector: '.aodView',
  368 + theme: 'success',
  369 + currentController: 'AODController',
  370 + parentSlug: $scope.GetAODwindowStoreData(windowviewid, 'parentSlugName'),
  371 + content: '<div class="col-sm-12" style="height: 100%;overflow: scroll;" >' +
  372 + // '<iframe name="myFrame" src="' + videoUrl + '" style="width: 100%;height:100%" id="aodvideo_' + windowviewid + '" onload="MyAODvideoOnLoad(event)"></iframe>'+
  373 + '<object data="' + videoUrl + '" width="100%" height="100%" id="aodvideo_' + windowviewid + '" onload="MyAODvideoOnLoad(event)"></object>' +
  374 + '</div><script>$(document).ready(function(){var $ua = navigator.userAgent; if (($ua.match(/(iPod|iPhone|iPad|android)/i))) {var threeDivWidth = $("#AODView").css("width");$("#AODView").css({"left":"0px","width":"100%","min-idth": threeDivWidth}); var jspanelContainerWidth = $(".jsPanel-content").css("width"); $(".jsPanel-content").css({ "width": "100%", "min-width": jspanelContainerWidth}); $("#aodImagePanel_' + windowviewid + '").css("width", "100%"); }});</script>',
  375 + title: tittle,
  376 + position: {
  377 + top: $scope.jsPanelTop,
  378 + left: $scope.jsPanelLeft
  379 + },
  380 +
  381 + size: {
  382 + width: $scope.jsPanelWidth,
  383 + height: $scope.jsPanelHeight
  384 + },
  385 + controls: { buttons: 'closeonly' },
  386 + resizable: {
  387 + start:function(event, ui)
  388 + {
  389 + var len = (event.currentTarget.id).split("_").length;
  390 + var windowviewid = (event.currentTarget.id).split("_")[len - 1];
  391 + $('#aodvideo_'+windowviewid).css("display",'block');
  392 +
  393 + }
  394 + },
  395 +
  396 + });
  397 +
  398 +
  399 + $scope.jsPanelVideo.maximize();
  400 + $scope.SetAODwindowStoreData(windowviewid, 'currentSlug', 'AOD-view-detail');
  401 + $('html, body').animate({ scrollTop: 0 });
  402 +
  403 + // $.post($rootScope.aodSiteUrl+"/AodHome/CoursePlayerAIAP", { aiakeypass: "as@2$eDu8Jk" }, function (result) {
  404 +
  405 + // if (result.Success === true) {
  406 + // alert('ok')
  407 + // $('#aodvideo_' + windowviewid).attr('src', videoUrl+"&type=SCORMPackage&uID=" + 2, "_self")
  408 +
  409 + // // window.open("https://adamondemand.com/AodHome/CoursePlayerAIATest?courseid=" + ProID + "&type=" + productype + "&uID=" + userid, "_self");
  410 + // }
  411 + // else
  412 + // {
  413 + // alert('failed')
  414 + // }
  415 +
  416 + // });
  417 +
  418 +
  419 + // $('#aodkey').attr('name',"aiakeypass")
  420 + // $('#aodkey').val($rootScope.aodkeypass);
  421 + // $('#aodform').attr('action',videoUrl).submit();
60 422  
61   -}]
  423 + }
  424 + $('#AODView').css("height", $(window).outerHeight() - 20);
  425 +
  426 + $('#AODView').css("width", $(window).outerWidth() - 30);
  427 +
  428 + //Calling methode for save Js Panel Activity for SaveCB
  429 + $scope.PanelActivity();
  430 +
  431 + }
  432 +
  433 + $scope.MyAODvideoOnLoad = function (windowviewid)
  434 + {
  435 + $scope.EnableUI();
  436 + }
62 437  
  438 + }]);
63 439  
  440 + function MyAODvideoOnLoad(event) {
64 441  
65   -);
66 442 \ No newline at end of file
  443 + console.log('video loaded')
  444 + var scope = angular.element(document.getElementById("AODView")).scope();
  445 + var windowviewid = (event.target.id).split("_")[1];
  446 +
  447 + setTimeout(function()
  448 + {
  449 + scope.$apply(function () {
  450 + scope.MyAODvideoOnLoad(windowviewid);
  451 + });
  452 + }, 500);
  453 +
  454 + }
67 455 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/HomeController.js
... ... @@ -380,7 +380,7 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
380 380 '#Link\\/symptom-navigator{pointer-events: none; opacity: .3} ' +
381 381 '#Link\\/health-navigator{pointer-events: none; opacity: .3} ' +
382 382 '#Link\\/wellness-tools{pointer-events: none; opacity: .3} ' +
383   - '#Link\\/aod{pointer-events: none; opacity: .3} ' +
  383 + '#ADAM-on-demand{pointer-events: none; opacity: .3} ' +
384 384  
385 385  
386 386 '</style>';
... ... @@ -727,6 +727,9 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
727 727 $rootScope.aiaPingInterval = configresult.pingInterval;
728 728 $rootScope.aiaAnimationPath = configresult.serverPath;
729 729 $rootScope.MaxOneFileSize = configresult.fileSize;
  730 + $rootScope.aodkeypass = configresult.aodkeypass;
  731 + $rootScope.aodSiteUrl = configresult.aodSiteUrl;
  732 +
730 733 var loggedInUser = JSON.parse($scope.currentUserDetails);
731 734 //incase site user login userid is 0 so then using license id
732 735 //logout site user while reload url without parameter
... ... @@ -958,6 +961,8 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
958 961 $rootScope.aiaPingInterval = configresult.pingInterval;
959 962 $rootScope.aiaAnimationPath = configresult.serverPath;
960 963 $rootScope.MaxOneFileSize = configresult.fileSize;
  964 + $rootScope.aodkeypass = configresult.aodkeypass;
  965 + $rootScope.aodSiteUrl = configresult.aodSiteUrl;
961 966  
962 967 });
963 968 }
... ... @@ -1202,6 +1207,13 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1202 1207 $rootScope.userData = result;
1203 1208 $rootScope.userModules = result.Modules;
1204 1209  
  1210 + //update slag of aod untill push to PROD
  1211 + $rootScope.userModules = new jinqJs()
  1212 + .from($rootScope.userModules)
  1213 + .update(function (coll, index) { coll[index].slug = 'ADAM-on-demand'; })
  1214 + .at("id == " + 17)
  1215 + .select();
  1216 +
1205 1217 localStorage.setItem('loggedInUserDetails', JSON.stringify(result));
1206 1218  
1207 1219 if (isCommingSoonModel == true) {
... ... @@ -1267,6 +1279,13 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1267 1279 $rootScope.userData = result;
1268 1280 $rootScope.userModules = result.Modules;
1269 1281  
  1282 + //update slag of aod untill push to PROD
  1283 + $rootScope.userModules = new jinqJs()
  1284 + .from($rootScope.userModules)
  1285 + .update(function (coll, index) { coll[index].slug = 'ADAM-on-demand'; })
  1286 + .at("id == " + 17)
  1287 + .select();
  1288 +
1270 1289 //only instructor allowed to change modesty
1271 1290 //concurrent user of non-instructor
1272 1291 if( result.UserTypeId == 6 && result.EditionId!=1 && result.EditionId!=2)
... ... @@ -1482,6 +1501,8 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1482 1501 $rootScope.aiaPingInterval = configresult.pingInterval;
1483 1502 $rootScope.aiaAnimationPath = configresult.serverPath;
1484 1503 $rootScope.MaxOneFileSize = configresult.fileSize;
  1504 + $rootScope.aodkeypass = configresult.aodkeypass;
  1505 + $rootScope.aodSiteUrl = configresult.aodSiteUrl;
1485 1506  
1486 1507 userInfo.username = result.LoginId;
1487 1508 userInfo.password = result.Password;
... ... @@ -1536,6 +1557,8 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1536 1557 $rootScope.aiaPingInterval = configresult.pingInterval;
1537 1558 $rootScope.aiaAnimationPath = configresult.serverPath;
1538 1559 $rootScope.MaxOneFileSize = configresult.fileSize;
  1560 + $rootScope.aodkeypass = configresult.aodkeypass;
  1561 + $rootScope.aodSiteUrl = configresult.aodSiteUrl;
1539 1562  
1540 1563 var loggedInUser = JSON.parse($scope.currentUserDetails);
1541 1564 //check already login by account number bcz no login id for site login
... ... @@ -1683,6 +1706,12 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1683 1706  
1684 1707 $rootScope.userData = result;
1685 1708 $rootScope.userModules = result.Modules;
  1709 + //update slag of aod untill push to PROD
  1710 + $rootScope.userModules = new jinqJs()
  1711 + .from($rootScope.userModules)
  1712 + .update(function (coll, index) { coll[index].slug = 'ADAM-on-demand'; })
  1713 + .at("id == " + 17)
  1714 + .select();
1686 1715  
1687 1716 localStorage.setItem('loggedInUserDetails', JSON.stringify(result));
1688 1717  
... ... @@ -1732,8 +1761,14 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1732 1761 }
1733 1762  
1734 1763  
1735   - $rootScope.userData = result;
1736   - $rootScope.userModules = result.Modules;
  1764 + $rootScope.userData = result;
  1765 + $rootScope.userModules = result.Modules;
  1766 + //update slag of aod untill push to PROD
  1767 + $rootScope.userModules = new jinqJs()
  1768 + .from($rootScope.userModules)
  1769 + .update(function (coll, index) { coll[index].slug = 'ADAM-on-demand'; })
  1770 + .at("id == " + 17)
  1771 + .select();
1737 1772  
1738 1773 //1. set haveRoleAdmin = false because LicenseInfo is not null
1739 1774 $rootScope.haveRoleAdmin = false;
... ... @@ -1855,6 +1890,13 @@ function ($rootScope, $scope, Modules, $log, $location, $compile, $timeout, Data
1855 1890 $rootScope.isVisibleLogin = false;
1856 1891 $rootScope.userData = userInfo;
1857 1892 $rootScope.userModules = userInfo.Modules;
  1893 +
  1894 + //update slag of aod untill push to PROD
  1895 + $rootScope.userModules = new jinqJs()
  1896 + .from($rootScope.userModules)
  1897 + .update(function (coll, index) { coll[index].slug = 'ADAM-on-demand'; })
  1898 + .at("id == " + 17)
  1899 + .select();
1858 1900 // ShowAssignedModulesPopup(userInfo.Modules);;
1859 1901 // for reseller type user first need to update profile
1860 1902 if (userInfo.UserTypeId == 7 && (userInfo.FirstName == "" || userInfo.EmailId == "" || userInfo.LastName == "")) {
... ...
400-SOURCECODE/AIAHTML5.Web/app/main/AIA.js
... ... @@ -146,11 +146,11 @@ AIA.constant(&#39;pages&#39;, [
146 146 pageController: 'LinkController'
147 147  
148 148 },
149   - {
150   - name: 'A.D.A.M OnDemand',
151   - pageSlug: 'Link/aod',
152   - pageUrl: 'app/views/Link/Link-view.html',
153   - pageController: 'LinkController'
  149 + {
  150 + name: 'A.D.A.M OnDemand',
  151 + pageSlug: 'AOD-view-detail',
  152 + pageUrl: 'app/views/AOD/AOD-view-detail.html',
  153 + pageController: 'AODController'
154 154  
155 155 },
156 156 { //id:18,
... ...
400-SOURCECODE/AIAHTML5.Web/app/views/AOD/AOD-view-detail.html 0 → 100644
  1 +<div>
  2 + <div ng-include="aap/widget/MainMenu.html"></div>
  3 + <form id="aodform" target="myFrame" method="POST">
  4 + <input type="hidden" id="aodkey" />
  5 + <!-- <input type="hidden" id="aodkey" name="aiakeypass" value="as@2$eDu8Jk" /> -->
  6 + <!-- <input type="hidden" name="aiakeypass" value="{{aodkeypass}}" /> -->
  7 +
  8 + </form>
  9 +
  10 + <div ng-init="openAODBodyViewMain()" id="AODView" class="aodView" ng-controller="AODController"></div>
  11 +</div>
... ...
400-SOURCECODE/AIAHTML5.Web/app/views/AOD/AOD-view.html
1 1 <div class="bodyWrap row ">
2 2 <div ng-include="'app/widget/MainMenu.html'" />
3   - <div class="main">
4   -
5   -
6   - <div class="row tab-content" style="padding-left:25px; width:99%">
7   - <div role="tabpanel" ng-class="{'tab-pane active' : activeTab === 1,'tab-pane' : activeTab !==1 }" id="grid-view">
8   - <div class="col-sm-3 col-lg-2">
9   - <div class="thumbnail">
10   - <a href="clinical-animations-details.html">
11   - <img src="~/../content/images/aod-1.jpg" alt="" title="">
12   - <div class="caption">
13   - <p>Cardiovascular System - Anatomy</p>
14   - </div>
15   - </a>
16   - </div>
17   - </div>
18   - <div class="col-sm-3 col-lg-2">
19   - <div class="thumbnail">
20   - <a href="clinical-animations-details.html">
21   - <img src="~/../content/images/aod-2.jpg" alt="" title="">
22   - <div class="caption">
23   - <p>Cardiovascular System - Physiology</p>
24   - </div>
25   - </a>
26   - </div>
27   - </div>
28   - <div class="col-sm-3 col-lg-2">
29   - <div class="thumbnail">
30   - <a href="clinical-animations-details.html">
31   - <img src="~/../content/images/aod-3.jpg" alt="" title="">
32   - <div class="caption">
33   - <p>Digestive System - Anatomy</p>
34   - </div>
35   - </a>
36   - </div>
37   - </div>
38   - <div class="col-sm-3 col-lg-2">
39   - <div class="thumbnail">
40   - <a href="clinical-animations-details.html">
41   - <img src="~/../content/images/aod-4.jpg" alt="" title="">
42   - <div class="caption">
43   - <p>Digestive System - Physiology</p>
44   - </div>
45   - </a>
46   - </div>
47   - </div>
48   - <div class="col-sm-3 col-lg-2">
49   - <div class="thumbnail">
50   - <a href="clinical-animations-details.html">
51   - <img src="~/../content/images/aod-5.jpg" alt="" title="">
52   - <div class="caption">
53   - <p>Endocrine System - Anatomy</p>
54   - </div>
55   - </a>
56   - </div>
57   - </div>
58   - <div class="col-sm-3 col-lg-2">
59   - <div class="thumbnail">
60   - <a href="clinical-animations-details.html">
61   - <img src="~/../content/images/aod-6.jpg" alt="" title="">
62   - <div class="caption">
63   - <p>Endocrine System - Physiology</p>
64   - </div>
65   - </a>
66   - </div>
67   - </div>
68   - <div class="col-sm-3 col-lg-2">
69   - <div class="thumbnail">
70   - <a href="clinical-animations-details.html">
71   - <img src="~/../content/images/aod-7.jpg" alt="" title="">
72   - <div class="caption">
73   - <p>Immune System - Anatomy</p>
74   - </div>
75   - </a>
76   - </div>
77   - </div>
78   - <div class="col-sm-3 col-lg-2">
79   - <div class="thumbnail">
80   - <a href="clinical-animations-details.html">
81   - <img src="~/../content/images/aod-8.jpg" alt="" title="">
82   - <div class="caption">
83   - <p>Immune System - Physiology</p>
84   - </div>
85   - </a>
86   - </div>
87   - </div>
88   - <div class="col-sm-3 col-lg-2">
89   - <div class="thumbnail">
90   - <a href="clinical-animations-details.html">
91   - <img src="~/../content/images/aod-9.jpg" alt="" title="">
92   - <div class="caption">
93   - <p>Musculoskeletal System - Anatomy</p>
94   - </div>
95   - </a>
96   - </div>
97   - </div>
98   - <div class="col-sm-3 col-lg-2">
99   - <div class="thumbnail">
100   - <a href="clinical-animations-details.html">
101   - <img src="~/../content/images/aod-10.jpg" alt="" title="">
102   - <div class="caption">
103   - <p>Musculoskeletal System - Physiology</p>
104   - </div>
105   - </a>
106   - </div>
107   - </div>
108   - <div class="col-sm-3 col-lg-2">
109   - <div class="thumbnail">
110   - <a href="clinical-animations-details.html">
111   - <img src="~/../content/images/aod-11.jpg" alt="" title="">
112   - <div class="caption">
113   - <p>Nervous System - Anatomy</p>
114   - </div>
115   - </a>
116   - </div>
117   - </div>
118   - <div class="col-sm-3 col-lg-2">
119   - <div class="thumbnail">
120   - <a href="clinical-animations-details.html">
121   - <img src="~/../content/images/aod-12.jpg" alt="" title="">
122   - <div class="caption">
123   - <p>Nervous System - Physiology</p>
124   - </div>
125   - </a>
126   - </div>
127   - </div>
128   -
129   - <div class="col-sm-3 col-lg-2">
130   - <div class="thumbnail">
131   - <a href="clinical-animations-details.html">
132   - <img src="~/../content/images/aod-13.jpg" alt="" title="">
133   - <div class="caption">
134   - <p>Respiratory System - Anatomy</p>
135   - </div>
136   - </a>
137   - </div>
138   - </div>
139   - <div class="col-sm-3 col-lg-2">
140   - <div class="thumbnail">
141   - <a href="clinical-animations-details.html">
142   - <img src="~/../content/images/aod-14.jpg" alt="" title="">
143   - <div class="caption">
144   - <p>Respiratory System - Physiology</p>
145   - </div>
146   - </a>
147   - </div>
148   - </div>
149   - <div class="col-sm-3 col-lg-2">
150   - <div class="thumbnail">
151   - <a href="clinical-animations-details.html">
152   - <img src="~/../content/images/aod-15.jpg" alt="" title="">
153   - <div class="caption">
154   - <p>Skin - Anatomy</p>
155   - </div>
156   - </a>
157   - </div>
158   - </div>
159   - <div class="col-sm-3 col-lg-2">
160   - <div class="thumbnail">
161   - <a href="clinical-animations-details.html">
162   - <img src="~/../content/images/aod-16.jpg" alt="" title="">
163   - <div class="caption">
164   - <p>Skin - Physiology</p>
165   - </div>
166   - </a>
167   - </div>
168   - </div>
169   - <div class="col-sm-3 col-lg-2">
170   - <div class="thumbnail">
171   - <a href="clinical-animations-details.html">
172   - <img src="~/../content/images/aod-17.jpg" alt="" title="">
173   - <div class="caption">
174   - <p>The Blood Anatomy and Physiology</p>
175   - </div>
176   - </a>
177   - </div>
178   - </div>
179   - <div class="col-sm-3 col-lg-2">
180   - <div class="thumbnail">
181   - <a href="clinical-animations-details.html">
182   - <img src="~/../content/images/aod-18.jpg" alt="" title="">
183   - <div class="caption">
184   - <p>Understanding Cell Biology</p>
185   - </div>
186   - </a>
187   - </div>
188   - </div>
189   - <div class="col-sm-3 col-lg-2">
190   - <div class="thumbnail">
191   - <a href="clinical-animations-details.html">
192   - <img src="~/../content/images/aod-19.jpg" alt="" title="">
193   - <div class="caption">
194   - <p>Urinary System - Physiology</p>
195   - </div>
196   - </a>
197   - </div>
198   - </div>
199   - <div class="col-sm-3 col-lg-2">
200   - <div class="thumbnail">
201   - <a href="clinical-animations-details.html">
202   - <img src="~/../content/images/aod-20.jpg" alt="" title="">
203   - <div class="caption">
204   - <p>Visual System - Anatomy</p>
205   - </div>
206   - </a>
207   - </div>
208   - </div>
209   - <div class="col-sm-3 col-lg-2">
210   - <div class="thumbnail">
211   - <a href="clinical-animations-details.html">
212   - <img src="~/../content/images/aod-21.jpg" alt="" title="">
213   - <div class="caption">
214   - <p>Visual System - Physiology</p>
215   - </div>
216   - </a>
217   - </div>
218   - </div>
219   -
220   -
221   -
222   - </div>
223   - <div role="tabpanel" ng-class="{'tab-pane active' : activeTab === 2,'tab-pane' : activeTab !==2 }" id="list-view">
224   - <div class="col-sm-12 table-responsive ">
225   - <table class="table table-hover table-condensed bg-white">
226   - <thead>
227   - <tr class="active">
228   - <th>Title</th>
229   - <th>System</th>
230   -
231   - </tr>
232   - </thead>
233   - <tbody>
234   - <tr>
235   - <td>1st &amp; 2nd Intercostal Spaces</td>
236   - <td>Thorax</td>
237   -
238   - </tr>
239   - <tr>
240   - <td>1st, 3rd, &amp;8th Ribs</td>
241   - <td>Body Wall and Back</td>
242   -
243   - </tr>
244   - <tr>
245   - <td>Abdomen at L5 Vertebra (Inf)</td>
246   - <td>Abdomen</td>
247   -
248   - </tr>
249   - <tr>
250   - <td>1st &amp; 2nd Intercostal Spaces</td>
251   - <td>Thorax</td>
252   -
253   - </tr>
254   - <tr>
255   - <td>1st, 3rd, &amp;8th Ribs</td>
256   - <td>Body Wall and Back</td>
257   -
258   - </tr>
259   - <tr>
260   - <td>Abdomen at L5 Vertebra (Inf)</td>
261   - <td>Abdomen</td>
262   -
263   - </tr>
264   - <tr>
265   - <td>1st &amp; 2nd Intercostal Spaces</td>
266   - <td>Thorax</td>
267   -
268   - </tr>
269   - <tr>
270   - <td>1st, 3rd, &amp;8th Ribs</td>
271   - <td>Body Wall and Back</td>
272   -
273   - </tr>
274   - <tr>
275   - <td>Abdomen at L5 Vertebra (Inf)</td>
276   - <td>Abdomen</td>
277   -
278   - </tr>
279   - <tr>
280   - <td>1st &amp; 2nd Intercostal Spaces</td>
281   - <td>Thorax</td>
282   -
283   - </tr>
284   - <tr>
285   - <td>1st, 3rd, &amp;8th Ribs</td>
286   - <td>Body Wall and Back</td>
287   -
288   - </tr>
289   - <tr>
290   - <td>Abdomen at L5 Vertebra (Inf)</td>
291   - <td>Abdomen</td>
292   -
293   - </tr>
294   - <tr>
295   - <td>1st &amp; 2nd Intercostal Spaces</td>
296   - <td>Thorax</td>
297   -
298   - </tr>
299   - <tr>
300   - <td>1st, 3rd, &amp;8th Ribs</td>
301   - <td>Body Wall and Back</td>
302   -
303   - </tr>
304   - <tr>
305   - <td>Abdomen at L5 Vertebra (Inf)</td>
306   - <td>Abdomen</td>
307   -
308   - </tr>
309   - <tr class="active">
310   - <td colspan="6">
311   -
312   - <div class="col-sm-3 col-lg-2 no-padding">
313   - <div class="thumbnail no-margin">
314   - <a href="atlas-anatomy-detail.html">
315   - <img src="~/../content/images/aod-12.jpg" alt="" title="">
316   -
317   - </a>
318   - </div>
319   - </div>
320   - </td>
321   - </tr>
322   - </tbody>
323   - </table>
324   -
325   - </div>
326   - </div>
  3 + <div class="main" ng-init="loadAIModuleById(13)">
  4 + <div id="grid-view" class="col-sm-12" style="padding-left:25px; width:99%">
327 5 </div>
328 6 </div>
329 7 </div>
... ...
400-SOURCECODE/AIAHTML5.Web/content/data/json/aod/aod_courselist.json 0 → 100644
  1 +{
  2 + "root":{
  3 + "AODData":[
  4 + {
  5 + "_ImageId":"11014009",
  6 + "_Title":"Anatomy and Physiology of the Breast",
  7 + "_BodySystem":"Breast",
  8 + "_ThumbnailImage":"11014009.jpg"
  9 + },
  10 + {
  11 + "_ImageId":"02011209",
  12 + "_Title":"Understanding the Physiology of the Skin",
  13 + "_BodySystem":"Skin",
  14 + "_ThumbnailImage":"02011209.jpg"
  15 + },
  16 + {
  17 + "_ImageId":"14011109",
  18 + "_Title":"Understanding the Anatomy of the Urinary System",
  19 + "_BodySystem":"Urinary System",
  20 + "_ThumbnailImage":"14011109.jpg"
  21 + },
  22 + {
  23 + "_ImageId":"06011109",
  24 + "_Title":"Understanding the Anatomy of the Immune System",
  25 + "_BodySystem":"Immune System",
  26 + "_ThumbnailImage":"06011109.jpg"
  27 + },
  28 + {
  29 + "_ImageId":"09011209",
  30 + "_Title":"Understanding the Physiology of the Visual System",
  31 + "_BodySystem":"Visual System",
  32 + "_ThumbnailImage":"09011209.jpg"
  33 + },
  34 + {
  35 + "_ImageId":"02011109",
  36 + "_Title":"Understanding the Anatomy of the Skin",
  37 + "_BodySystem":"Skin",
  38 + "_ThumbnailImage":"02011109.jpg"
  39 + },
  40 + {
  41 + "_ImageId":"09011109",
  42 + "_Title":"Understanding the Anatomy of the Visual System",
  43 + "_BodySystem":"Visual System",
  44 + "_ThumbnailImage":"09011109.jpg"
  45 + },
  46 + {
  47 + "_ImageId":"01011209",
  48 + "_Title":"Understanding the Physiology of the Cardiovascular System",
  49 + "_BodySystem":"Cardiovascular System",
  50 + "_ThumbnailImage":"01011209.jpg"
  51 + },
  52 + {
  53 + "_ImageId":"13011209",
  54 + "_Title":"Understanding the Physiology of the Musculoskeletal System",
  55 + "_BodySystem":"Musculoskeletal System",
  56 + "_ThumbnailImage":"13011209.jpg"
  57 + },
  58 + {
  59 + "_ImageId":"04011209",
  60 + "_Title":"Understanding the Physiology of the Digestive System",
  61 + "_BodySystem":"Digestive System",
  62 + "_ThumbnailImage":"04011209.jpg"
  63 + },
  64 + {
  65 + "_ImageId":"01011109",
  66 + "_Title":"Understanding the Anatomy of the Cardiovascular System",
  67 + "_BodySystem":"Cardiovascular System",
  68 + "_ThumbnailImage":"01011109.jpg"
  69 + },
  70 + {
  71 + "_ImageId":"13011109",
  72 + "_Title":"Understanding the Anatomy of the Musculoskeletal System",
  73 + "_BodySystem":"Musculoskeletal System",
  74 + "_ThumbnailImage":"13011109.jpg"
  75 + },
  76 + {
  77 + "_ImageId":"04011109",
  78 + "_Title":"Understanding the Anatomy of the Digestive System",
  79 + "_BodySystem":"Digestive System",
  80 + "_ThumbnailImage":"04011109.jpg"
  81 + },
  82 + {
  83 + "_ImageId":"07011209",
  84 + "_Title":"Understanding the Physiology of the Nervous System",
  85 + "_BodySystem":"Nervous System",
  86 + "_ThumbnailImage":"07011209.jpg"
  87 + },
  88 + {
  89 + "_ImageId":"01011009",
  90 + "_Title":"Introduction to the Cardiovascular System",
  91 + "_BodySystem":"Cardiovascular System",
  92 + "_ThumbnailImage":"01011009.jpg"
  93 + },
  94 + {
  95 + "_ImageId":"12011209",
  96 + "_Title":"Understanding the Physiology of the Respiratory System",
  97 + "_BodySystem":"Respiratory System",
  98 + "_ThumbnailImage":"12011209.jpg"
  99 + },
  100 + {
  101 + "_ImageId":"03011209",
  102 + "_Title":"Understanding the Physiology of the Endocrine System",
  103 + "_BodySystem":"Endocrine System",
  104 + "_ThumbnailImage":"03011209.jpg"
  105 + },
  106 + {
  107 + "_ImageId":"07011109",
  108 + "_Title":"Understanding the Anatomy of the Nervous System",
  109 + "_BodySystem":"Nervous System",
  110 + "_ThumbnailImage":"07011109.jpg"
  111 + },
  112 + {
  113 + "_ImageId":"12011109",
  114 + "_Title":"Understanding the Anatomy of the Respiratory System",
  115 + "_BodySystem":"Respiratory System",
  116 + "_ThumbnailImage":"12011109.jpg"
  117 + },
  118 + {
  119 + "_ImageId":"03011109",
  120 + "_Title":"Understanding the Anatomy of the Endocrine System",
  121 + "_BodySystem":"Endocrine System",
  122 + "_ThumbnailImage":"03011109.jpg"
  123 + },
  124 + {
  125 + "_ImageId":"14011209",
  126 + "_Title":"Understanding the Physiology of the Urinary System",
  127 + "_BodySystem":"Urinary System",
  128 + "_ThumbnailImage":"14011209.jpg"
  129 + },
  130 + {
  131 + "_ImageId":"06011209",
  132 + "_Title":"Understanding the Physiology of the Immune System",
  133 + "_BodySystem":"Immune System",
  134 + "_ThumbnailImage":"06011209.jpg"
  135 + },
  136 + {
  137 + "_ImageId":"00016009",
  138 + "_Title":"Understanding Cell Biology",
  139 + "_BodySystem":"1",
  140 + "_ThumbnailImage":"00016009.jpg"
  141 + },
  142 + {
  143 + "_ImageId":"05011009",
  144 + "_Title":"Blood Anatomy and Physiology",
  145 + "_BodySystem":"2",
  146 + "_ThumbnailImage":"05011009.jpg"
  147 + },
  148 + {
  149 + "_ImageId":"07029109",
  150 + "_Title":"Understanding the Physiology of Pain",
  151 + "_BodySystem":"3",
  152 + "_ThumbnailImage":"07029109.jpg"
  153 + }
  154 + ]
  155 + }
  156 +}
0 157 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/content/data/json/aod/aod_courselist_video.json 0 → 100644
  1 +{
  2 + "root":{
  3 + "AODData":[
  4 + {
  5 + "_id":"1",
  6 + "_ImageId":"11014009",
  7 + "_Title":"Anatomy and Physiology of the Breast",
  8 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=11014009&type=SCORMPackage&uID=2,_self"
  9 + },
  10 + {
  11 + "_id":"2",
  12 + "_ImageId":"02011209",
  13 + "_Title":"Understanding the Physiology of the Skin",
  14 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=02011209&type=SCORMPackage&uID=2,_self"
  15 + },
  16 + {
  17 + "_id":"3",
  18 + "_ImageId":"14011109",
  19 + "_Title":"Understanding the Anatomy of the Urinary System",
  20 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=14011109&type=SCORMPackage&uID=2,_self"
  21 + },
  22 + {
  23 + "_id":"4",
  24 + "_ImageId":"06011109",
  25 + "_Title":"Understanding the Anatomy of the Immune System",
  26 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=06011109&type=SCORMPackage&uID=2,_self"
  27 + },
  28 + {
  29 + "_id":"5",
  30 + "_ImageId":"09011209",
  31 + "_Title":"Understanding the Physiology of the Visual System",
  32 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=09011209&type=SCORMPackage&uID=2,_self"
  33 + },
  34 + {
  35 + "_id":"6",
  36 + "_ImageId":"02011109",
  37 + "_Title":"Understanding the Anatomy of the Skin",
  38 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=02011109&type=SCORMPackage&uID=2,_self"
  39 + },
  40 + {
  41 + "_id":"7",
  42 + "_ImageId":"00016009",
  43 + "_Title":"Understanding Cell Biology",
  44 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=00016009&type=SCORMPackage&uID=2,_self"
  45 + },
  46 + {
  47 + "_id":"8",
  48 + "_ImageId":"05011009",
  49 + "_Title":"Blood Anatomy and Physiology",
  50 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=05011009&type=SCORMPackage&uID=2,_self"
  51 + },
  52 + {
  53 + "_id":"9",
  54 + "_ImageId":"09011109",
  55 + "_Title":"Understanding the Anatomy of the Visual System",
  56 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=09011109&type=SCORMPackage&uID=2,_self"
  57 + },
  58 + {
  59 + "_id":"10",
  60 + "_ImageId":"01011209",
  61 + "_Title":"Understanding the Physiology of the Cardiovascular System",
  62 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=01011209&type=SCORMPackage&uID=2,_self"
  63 + },
  64 + {
  65 + "_id":"11",
  66 + "_ImageId":"13011209",
  67 + "_Title":"Understanding the Physiology of the Musculoskeletal System",
  68 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=13011209&type=SCORMPackage&uID=2,_self"
  69 + },
  70 + {
  71 + "_id":"12",
  72 + "_ImageId":"04011209",
  73 + "_Title":"Understanding the Physiology of the Digestive System",
  74 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=04011209&type=SCORMPackage&uID=2,_self"
  75 + },
  76 + {
  77 + "_id":"13",
  78 + "_ImageId":"07029109",
  79 + "_Title":"Understanding the Physiology of Pain",
  80 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=07029109&type=SCORMPackage&uID=2,_self"
  81 + },
  82 + {
  83 + "_id":"14",
  84 + "_ImageId":"01011109",
  85 + "_Title":"Understanding the Anatomy of the Cardiovascular System",
  86 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=01011109&type=SCORMPackage&uID=2,_self"
  87 + },
  88 + {
  89 + "_id":"15",
  90 + "_ImageId":"13011109",
  91 + "_Title":"Understanding the Anatomy of the Musculoskeletal System",
  92 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=13011109&type=SCORMPackage&uID=2,_self"
  93 + },
  94 + {
  95 + "_id":"16",
  96 + "_ImageId":"04011109",
  97 + "_Title":"Understanding the Anatomy of the Digestive System",
  98 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=04011109&type=SCORMPackage&uID=2,_self"
  99 + },
  100 + {
  101 + "_id":"17",
  102 + "_ImageId":"07011209",
  103 + "_Title":"Understanding the Physiology of the Nervous System",
  104 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=07011209&type=SCORMPackage&uID=2,_self"
  105 + },
  106 + {
  107 + "_id":"18",
  108 + "_ImageId":"01011009",
  109 + "_Title":"Introduction to the Cardiovascular System",
  110 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=01011009&type=SCORMPackage&uID=2,_self"
  111 + },
  112 + {
  113 + "_id":"19",
  114 + "_ImageId":"12011209",
  115 + "_Title":"Understanding the Physiology of the Respiratory System",
  116 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=12011209&type=SCORMPackage&uID=2,_self"
  117 + },
  118 + {
  119 + "_id":"20",
  120 + "_ImageId":"03011209",
  121 + "_Title":"Understanding the Physiology of the Endocrine System",
  122 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=03011209&type=SCORMPackage&uID=2,_self"
  123 + },
  124 + {
  125 + "_id":"21",
  126 + "_ImageId":"07011109",
  127 + "_Title":"Understanding the Anatomy of the Nervous System",
  128 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=07011109&type=SCORMPackage&uID=2,_self"
  129 + },
  130 + {
  131 + "_id":"22",
  132 + "_ImageId":"12011109",
  133 + "_Title":"Understanding the Anatomy of the Respiratory System",
  134 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=12011109&type=SCORMPackage&uID=2,_self"
  135 + },
  136 + {
  137 + "_id":"23",
  138 + "_ImageId":"03011109",
  139 + "_Title":"Understanding the Anatomy of the Endocrine System",
  140 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=03011109&type=SCORMPackage&uID=2,_self"
  141 + },
  142 + {
  143 + "_id":"24",
  144 + "_ImageId":"14011209",
  145 + "_Title":"Understanding the Physiology of the Urinary System",
  146 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=14011209&type=SCORMPackage&uID=2,_self"
  147 + },
  148 + {
  149 + "_id":"25",
  150 + "_ImageId":"06011209",
  151 + "_Title":"Understanding the Physiology of the Immune System",
  152 + "_VideoUrl":"AodHome/CoursePlayerAIA?courseid=06011209&type=SCORMPackage&uID=2,_self"
  153 + }
  154 + ]
  155 + }
  156 +}
0 157 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/00016009.jpg 0 → 100644

16.7 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/01011009.jpg 0 → 100644

36.5 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/01011109.jpg 0 → 100644

42.5 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/01011209.jpg 0 → 100644

45 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/02011109.jpg 0 → 100644

38.9 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/02011209.jpg 0 → 100644

45.4 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/03011109.jpg 0 → 100644

31.5 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/03011209.jpg 0 → 100644

35.5 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/04011109.jpg 0 → 100644

37.8 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/04011209.jpg 0 → 100644

34.5 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/05011009.jpg 0 → 100644

29.2 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/06011109.jpg 0 → 100644

40.1 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/06011209.jpg 0 → 100644

19 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/07011109.jpg 0 → 100644

34.3 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/07011209.jpg 0 → 100644

39.8 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/07029109.jpg 0 → 100644

30.2 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/09011109.jpg 0 → 100644

30.3 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/09011209.jpg 0 → 100644

38.7 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/11014009.jpg 0 → 100644

34.6 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/12011109.jpg 0 → 100644

37.3 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/12011209.jpg 0 → 100644

17.3 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/13011109.jpg 0 → 100644

16.2 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/13011209.jpg 0 → 100644

16.1 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/14011109.jpg 0 → 100644

33.7 KB

400-SOURCECODE/AIAHTML5.Web/content/images/aod/thumbnails/14011209.jpg 0 → 100644

19.4 KB