Commit f771c498464c6caaf25fec41f6a5c2c08bd343d6
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('pages', [ |
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 & 2nd Intercostal Spaces</td> | |
236 | - <td>Thorax</td> | |
237 | - | |
238 | - </tr> | |
239 | - <tr> | |
240 | - <td>1st, 3rd, &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 & 2nd Intercostal Spaces</td> | |
251 | - <td>Thorax</td> | |
252 | - | |
253 | - </tr> | |
254 | - <tr> | |
255 | - <td>1st, 3rd, &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 & 2nd Intercostal Spaces</td> | |
266 | - <td>Thorax</td> | |
267 | - | |
268 | - </tr> | |
269 | - <tr> | |
270 | - <td>1st, 3rd, &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 & 2nd Intercostal Spaces</td> | |
281 | - <td>Thorax</td> | |
282 | - | |
283 | - </tr> | |
284 | - <tr> | |
285 | - <td>1st, 3rd, &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 & 2nd Intercostal Spaces</td> | |
296 | - <td>Thorax</td> | |
297 | - | |
298 | - </tr> | |
299 | - <tr> | |
300 | - <td>1st, 3rd, &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