1"use strict";angular.module("mcdsRmfWebUiApp",["ngAnimate","ngAria","ngCookies","ngMessages","ngResource","ngRoute","ngSanitize","ngTouch","ng.deviceDetector","ui.router","ncy-angular-breadcrumb","dibari.angular-ellipsis","allogyMarketViewModuleApp","config"]).config(["$routeProvider","$stateProvider","$urlRouterProvider","$locationProvider","INSTRUCTOR_TRAINER_COLLECTION_ID",function(a,b,c,d,e){b.state("main",{url:"/",templateUrl:"views/main.html",controller:"MainCtrl",controllerAs:"main",resolve:{contentArray:["marketService","marketFactory","$stateParams","TENANT_ID","STATIC_MARKET_ID",function(a,b,c,d,e){return a.getMarketCategories(e).then(function(c){return b.buildCategoryArray(c.data.categories).then(function(b){return a.getMarketContents(e)},function(a){})},function(a){})}],tenantContainer:["marketService","marketFactory","$stateParams","TENANT_ID","STATIC_MARKET_ID",function(a,b,c,d,e){return a.getMarkets()}]},ncyBreadcrumb:{label:"Home"}}).state("about",{url:"/about",templateUrl:"views/about.html"}).state("instructors",{url:"/instructors",redirectTo:{state:"AllogyMarketView.market",params:{marketId:e}}}).state("instructors_request",{url:"/instructors/request",templateUrl:"views/instructor_request.html"}).state("creator",{url:"/creator",templateUrl:"views/creator.html",controller:"CreatorCtrl"}).state("privacy",{url:"/privacy?{navigation}",templateUrl:"views/privacy_policy.html"}).state("user_agreement",{url:"/user_agreement",templateUrl:"views/usg_user_agreement.html"}),c.otherwise("/"),d.html5Mode({enabled:!0})}]),angular.module("config",[]).constant("IFRAME_HOST_PATH","https://markets.allogy.com").constant("MARKET_PATH","https://markets.allogy.com").constant("BOOK_PATH","https://books.allogy.com").constant("TENANT_ID","8").constant("APPLICATION_ID","11").constant("DEFAULT_MARKET_COUNT","8").constant("DEFAULT_CONTENT_SIZE","4").constant("STATIC_DOMAIN_ID","3").constant("STATIC_CONTAINER_ID","2").constant("STATIC_MARKET_ID","11").constant("STATIC_FEATURED_CATEGORYID","8").constant("STATIC_FEATURED_COLLECTION_ID","31").constant("STATIC_FEATURED_CONTENT_ID","100").constant("STATIC_CLIENT_ID","17").constant("STATIC_CLIENT_SECRET","suc2nqk94c9gbc6s0bel0cch0i").constant("IDENTITY_URI","https://identity.allogy.com").constant("TOKEN_URI","https://identity.allogy.com/oauth/token").constant("AUTHORIZE_URI","https://identity.allogy.com/oauth/authorize").constant("PAGINATION_LIMIT",5).constant("ASM_TRAINING_MARKET_ID","171").constant("ASM_TRAINING_VIDEO_PATH","https://books.allogy.com/v1/tenant/8/media/816795a9-c5e6-4a66-8661-33764ca1801e").constant("INSTRUCTOR_TRAINER_COLLECTION_ID","226").constant("MARKET_ID_MAP",{31:"featuredContent",171:"asmTraining",193:"clsCourse"}).constant("LEARNER_URL","https://deployedmedicine.allogy.net/learner").constant("INSTRUCTOR_LINKS",{"TCCC for Medical Providers":{"TCCC for Medical Personnel 2018":"https://deployedmedicine.com/market/11/content/436"},"TCCC for All Combatants (TCCC-AC)":{"TCCC-AC PowerPoint Presentations with Embedded Video":"https://rmf.ims.allogy.com/pf.tlx?GV7G2aGgoshRv","TCCC-AC PowerPoint Presentations in PDF":"https://rmf.ims.allogy.com/pf.tlx?TeTpRT7riKG","TCCC-AC Instructor Guides":"https://rmf.ims.allogy.com/pf.tlx?cqc4Cc1aQH7","TCCC-AC Skill Sheets":"https://rmf.ims.allogy.com/pf.tlx/ZQZHPZENk3Ic","TCCC-AC Practical Exercises PowerPoint Presentations":"https://rmf.ims.allogy.com/pf.tlx/-Rp-7M-VFErq","TCCC-AC Practical Exercises in PDF":"https://rmf.ims.allogy.com/pf.tlx/yDEyY3yv5ZoB"}}),String.prototype.endsWith||(String.prototype.endsWith=function(a,b){var c=this.toString();("number"!=typeof b||!isFinite(b)||Math.floor(b)!==b||b>c.length)&&(b=c.length),b-=a.length;var d=c.lastIndexOf(a,b);return-1!==d&&d===b}),angular.module("allogyMarketViewModuleApp",["ui.bootstrap","ui.router","ui.event","ngMeta","ncy-angular-breadcrumb","config"]).run(["$cookies","$http","$rootScope","$window",function(a,b,c,d){a.get("ALLOGY_API_ACCESS_TOKEN")&&(b.defaults.headers.common.Authorization="Bearer "+a.get("ALLOGY_API_ACCESS_TOKEN"));var e=angular.element(d);c.$watch(function(){return d.innerWidth},function(a,b){c.viewPortSize=a},!0),e.bind("resize",function(){c.$apply()})}]).run(["$rootScope","$log","$state","MetaService","ngMeta","$timeout","$transitions",function(a,b,c,d,e,f,g){g.onSuccess({},function(a){console.log("FROM ",a.from().name,"TO",a.to().name),a.from().name.includes("market.home")&&a.to().name.includes("market.category")||a.from().name.includes("market.category")&&a.to().name.includes("market.category")||a.from().name.includes("market.category")&&a.to().name.includes("market.home")?console.log("No autoscroll top"):document.body.scrollTop=document.documentElement.scrollTop=0}
1),e.init(),a.rootAlerts=[],a.addAlert=function(b){a.rootAlerts.push(b)},a.closeAlert=function(b){a.rootAlerts.splice(b,1)},a.$on("rootAlertMessage",function(b,c){a.addAlert(c)})}]).factory("authorizationInterceptor",["$cookies","$rootScope","$q","$location","$window",function(a,b,c,d,e){return{request:function(b){b.headers=b.headers||{};var c=document.createElement("a");return c.href=b.url,("localhost"===c.hostname||"https:"===c.protocol&&c.hostname.endsWith("allogy.com"))&&a.get("ALLOGY_API_ACCESS_TOKEN")&&(b.headers.Authorization="Bearer "+a.get("ALLOGY_API_ACCESS_TOKEN")),b},requestError:function(a){return a},response:function(a){return 401===a.status,a||c.when(a)},responseError:function(a){return a}}}]).config(["$httpProvider","$compileProvider","$stateProvider","$urlRouterProvider","$locationProvider","$uiViewScrollProvider","STATIC_MARKET_ID","LEARNER_URL",function(a,b,c,d,e,f,g,h){b.debugInfoEnabled(!1),b.commentDirectivesEnabled(!1),b.cssClassDirectivesEnabled(!1),a.interceptors.push("authorizationInterceptor"),f.useAnchorScroll(),c.state("AllogyMarketView",{"abstract":!0,template:'<div id="allogyMarketViewWrapper" class="" ui-view autoscroll="true" ></div>',params:{containerId:null,marketId:null,contentId:null}}).state("AllogyMarketView.market",{url:"/market/:marketId",params:{marketId:null,contentId:null},redirectTo:function(a){var b=h+"/collections/"+a.params().marketId;return b=a.params().contentId?b+"/contents/"+a.params().contentId:b,window.location.assign(b),!1}}).state("AllogyMarketView.market.category",{url:"/category/:categoryId",redirectTo:function(a){return{state:"AllogyMarketView.market",params:{marketId:a.params().marketId}}}}).state("AllogyMarketView.market.content",{url:"/content/:contentId",params:{contentId:null},redirectTo:function(a){return{state:"AllogyMarketView.market",params:{contentId:a.params().contentId,marketId:a.params().marketId}}}}).state("AllogyMarketView.content",{url:"/content/:contentId",redirectTo:function(a){return window.location.assign(h+"/collections/"),!1}}).state("AllogyMarketView.search_results",{templateUrl:"views/allogy_search_results.html",url:"/search/:term",controller:"Allogymarketview.SearchResultsCtrl",params:{term:null},resolve:{searchResults:["marketService","$stateParams","TENANT_ID","STATIC_MARKET_ID",function(a,b,c,d){return a.getMarketContentsSearchResults(null,b.term)}]}}).state("AllogyMarketView.market.search_results",{url:"/search/:term",redirectTo:function(a){return{state:"AllogyMarketView.market",params:{marketId:a.params().marketId}}}}).state("AllogyMarketView.featured",{url:"/featured/:marketId",redirectTo:function(a){return window.location.assign(h+"/collections/"+a.params().marketId),!1}}).state("AllogyMarketView.login",{template:'<div class="row"><div class="col-sm-12 col-md-offset-2 col-md-8 login-block text-center"></div></div>',url:"/login?code={codeParam}&state={stateParam}#",controller:"Allogymarketview.LoginCtrl"}).state("tccc",{url:"/tccc",redirectTo:function(a){return window.location.assign(h+"/collections/"+g),!1}})}]).directive("allogyMarketplaceLogin",["AllogyOAuth","$cookies","$compile","$http","$timeout","$q","$filter","$log","IDENTITY_URI",function(a,b,c,d,e,f,g,h,i){return{templateUrl:"views/allogy_marketplace_login.html",scope:{anchorClasses:"="},restrict:"EA",link:{pre:function(c,d,e,f){c.$watch(function(){return b.get("ALLOGY_API_ACCESS_TOKEN")},function(b){c.isAuthenticated=a.isAuthenticated()},!0)},post:function(b,c,d,e){b.isAuthenticated=a.isAuthenticated()}},controller:["$scope","$rootScope","$timeout","$window","$state","$stateParams","$location","$cookies","$httpParamSerializer","marketService","uuidFactory","TENANT_ID","STATIC_MARKET_ID","AUTHORIZE_URI","IDENTITY_URI","STATIC_CLIENT_ID",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.requestLogin=function(){delete d.sessionStorage.allogyUserInitialLoc,delete d.sessionStorage.redirectUrl,delete d.sessionStorage.state,d.sessionStorage.allogyUserInitialLoc=g.absUrl(),d.sessionStorage.redirectUrl=g.protocol()+"://"+d.location.host+"/login";var a=k["new"](),b={response_type:"code",client_id:p,scope:l,redirect_uri:d.sessionStorage.redirectUrl,state:a};d.sessionStorage.state=a,d.location.href=n+"?"+i(b)},a.logout=function(){delete d.sessionStorage.allogyUserInitialLoc,delete d.sessionStorage.redirectUrl,delete d.sessionStorage.state,h.remove("ALLOGY_API_ACCESS_TOKEN")}}]}}]).factory("AllogyOAuth",["$cookies",function(a){return{isAuthenticated:function(){return angular.isDefined(a.get("ALLOGY_API_ACCESS_TOKEN"))}}}]).factory("uuidFactory",function(){function a(){var a,b="";for(a=0;32>a;a+=1)switch(a){case 8:case 20:b+="-",b+=(16*Math.random()|0).toString(16);break;case 12:b+="-",b+="4";break;case 16:b+="-",b+=(4*Math.random()|8).toString(16);break;default:b+=(16*Math.random()|0).toString(16)}return b}return{"new":function(){return a()}}}).directive("allogyIconHeightWrapper",["$compile","$rootScope","$http","$timeout","$q","$filter","$window","contentFactory",function(a,b,c,d,e,f,g,h){return{restrict:"A",scope:{mixedContent:"=",iconPath:"="},link:{pre:function(a,b,c,d){},post:function(a,b,c,e){function f(a,b){return Math.ceil(a*b)/b}function g(){a.mixedContent?(b.css("height",f(1.4375*b[0].clientWidth,1)+"px"),b.addClass("mixed-content")):b.removeClass("mixed-content")}a.$watch(function(){return b[0].clientWidth},function(a,b){a!==b&&g()},!0),a.$on("windowResize",function(a,b,c){g()}),d(function(){g()},10)}}}}]).directive("allogyIconRepresentations",["$compile","$rootScope","$http","$timeout","$q","$filter","$window","contentFactory",function(a,b,c,d,e,f,g,h){return{restrict:"A",scope:{iconContent:"="},link:{pre:function(a,b,c,d){},post:function(b,c,e,f){function g(){for(var d=window._.keys(j),e=d.length-1;e>=0;e--){if(d[e]<=c[0].parentElement.clientWidth){c[0].src=j[d[e+1]]?j[d[e+1]]:j[d[e]],a(c.contents())(b);break}if(d[0]>=c[0].parentElement.clientWidth){c[0].src=j[d[0]],a(c.contents())(b);break}}}function i(){c.addClass(b.iconContent.type),b.iconContent.icon?h.mapWidths(b.iconContent.icon.representations).then(function(a){j=a,d(function(){g()},10)}):b.iconContent.iconUri?(c[0].src=b.iconContent.iconUri,a(c.contents())(b)):(c[0].src="images/placeholders/"+b.iconContent.type+".png",c.append('<img src="images/placeholders/camera.svg" ng-style="cameraStyle" />'),a(c.contents())(b))}var j={};
1b.$watch(function(){return b.iconContent},function(a,b){a!==b&&i()},!0),b.$on("windowResize",function(a,b,c){i()}),i()}},controller:["$scope","$rootScope",function(a,b){}]}}]).directive("allogySingleMarketHorScroll",["$compile","$rootScope","$http","$timeout","$q","$filter","$window","contentFactory","marketService","marketFactory","$state","$stateParams","STATIC_MARKET_ID","TENANT_ID",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return{templateUrl:"views/allogy_single_market_hor_scroll.html",restrict:"EA",replace:!1,scope:{contentArray:"=",marketId:"=",categoryId:"=",allVideos:"="},link:{pre:function(a,b,c,d){a.contentArray||i.getMarketCategories(a.marketId).then(function(b){j.buildCategoryArray(b.data.categories).then(function(b){i.getMarketContents(a.marketId).then(function(b){a.contentArray=b.data.content},function(a){})},function(a){})},function(a){})},post:function(a,b,c,d){a.classBuilder=function(b,c){var d="";return d+=b.type+" ",d+=a.allVideos?"only ":"",d+=c?"last ":""},a.openContent=function(b){k.go("AllogyMarketView.market.content",{tenantId:n,marketId:a.marketId,contentId:b.id})}}},controller:["$scope","$rootScope","$state","LEARNER_URL",function(a,b,c,d){a.learnerUi=d}]}}]).factory("contentFactory",["$q",function(a){function b(b){var c=a.defer(),d={};return angular.forEach(b,function(a,b,c){d[a.width]=a.uri}),a.all(d).then(function(a){c.resolve(a)}),c.promise}return{mapWidths:function(a){return b(a).then(function(a){return a})},union:function(a){var b=_.union(data.content,a);data.content=_.uniq(b,!1,function(a){return a.id})},pageFinder:function(a){return Math.floor(data.content.length/a)+1},hasAllContent:function(){return data.content?(console.log("hasAllContent",data.content.length>=data.totalContentCount),data.content.length>=data.totalContentCount):!0}}}]).directive("bsBreakpoint",["$window","$rootScope","$timeout",function(a,b,c){return{controller:function(){var d=function(){var b=a.innerWidth;return 768>b?"extra small":b>=768&&992>b?"small":b>=992&&1200>b?"medium":b>=1200?"large":void 0},e=d(),f=null;c(function(){b.$broadcast("windowResize",e,f)},1e3),angular.element(a).bind("resize",function(){var a=d();a!==e&&(f=e,e=a),b.$broadcast("windowResize",e,f)})}}}]).service("MetaService",["$location","$window",function(a,b){function c(c){if(c){var f=a.protocol()+"://"+b.location.host+"/content/"+c;e=d+", app-argument="+f}else e=d}var d="app-id=1203051672",e=d;return{set:function(a){c(a)},contentValue:function(){return e}}}]),angular.module("mcdsRmfWebUiApp").controller("MainCtrl",["$scope","$state","$http","$uibModal","tenantContainer","TENANT_ID","IFRAME_HOST_PATH","STATIC_CONTAINER_ID","marketService","DEFAULT_MARKET_COUNT","DEFAULT_CONTENT_SIZE","$stateParams","$log","STATIC_MARKET_ID","STATIC_FEATURED_COLLECTION_ID","STATIC_FEATURED_CONTENT_ID","ASM_TRAINING_MARKET_ID","ASM_TRAINING_VIDEO_PATH","LEARNER_URL",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){a.learnerUi=s,a.marketId=n,a.featuredCollectionId=o,a.containerMarketArray=e.data.markets,a.banner={alt:"Standardized TCCC Training Across the Entire U.S. Military",classIdentifier:"standardizing-training-banner",img:"images/banners/TCCCBannerWide.png",imgSm:"images/banners/TCCCBannerSmall.png",marketId:"299",linkAction:function(){return b.go("AllogyMarketView.market.home",{marketId:"299"})}},a.openVideoModal=function(a){var b=d.open({template:"<div video-player-in-carousel video-src=\"'"+a+"'\" ></div>",size:"lg",windowClass:"carousel-video-media"});b.result.then(function(){},function(){})}}]).directive("videoPlayerInCarousel",["$timeout","$sce",function(a,b){return{scope:{videoSrc:"="},restrict:"A",template:' <video controls="" width={{frameWidth}} height="{{frameHeight}}" ng-attr-poster="{{contentData.iconUri}}"><source type="video/mp4" ng-src="{{urlPath}}" />Your browser does not support the video tag.</video>',link:function(c,d,e,f){c.urlPath=b.trustAsResourceUrl(c.videoSrc),a(function(){c.frameWidth=d[0].parentElement.clientWidth-10,c.frameHeight=Math.floor(c.frameWidth/1.778217821782178)},0)}}}]),angular.module("mcdsRmfWebUiApp").controller("AboutCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("mcdsRmfWebUiApp").directive("iframeRender",["$compile","$http","$timeout","$q","$filter",function(a,b,c,d,e){return{restrict:"A",replace:!0,scope:!1,link:{pre:function(a,b,c,d){},post:function(b,c,d,e){b.$watch(d.iframeRender,function(d){c.html(d),a(c.contents())(b)}),b.tenantDetails=function(a,b){return'<object type="text/html" data="'+a+"/tenant/"+b+'" style="width:100%;height:100vh;"></object>'}}},controller:["$scope","$compile","$timeout","$element","$attrs",function(a,b,c,d,e){}]}}]),angular.module("mcdsRmfWebUiApp").controller("ParentbodyCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("mcdsRmfWebUiApp").controller("HeadernavCtrl",["$scope","$rootScope","$state","$stateParams","LEARNER_URL",function(a,b,c,d,e){a.goToLearnerUrl=function(){window.open(e,"_blank")}
1,a.$watch(function(){return d.navigation},function(b){"disabled"===b&&(a.nativeDisabled=!0)}),b.$on("$stateChangeSuccess",function(b,c,d,e,f){a.navCollapsed=!0})}]),angular.module("mcdsRmfWebUiApp").controller("InstructorsCtrl",["$scope","INSTRUCTOR_LINKS",function(a,b){a.instructorsObjectBundles=b}]),angular.module("mcdsRmfWebUiApp").controller("FooterCtrl",["$scope","$rootScope","$state","$stateParams","marketService",function(a,b,c,d,e){e.getMarkets().then(function(b){a.containerMarketArray=b.data.markets},function(b){a.containerMarketArray=[{id:11,name:"Tactical Combat Casualty Care"},{id:29,name:"Surgical Combat Casualty Care"},{id:30,name:"Enroute Combat Casualty Care"}]}),a.currentYear=window.moment().format("YYYY"),a.$watch(function(){return d.navigation},function(b){"disabled"===b&&(a.nativeDisabled=!0)})}]),angular.module("mcdsRmfWebUiApp").controller("CreatorCtrl",function(){this.awesomeThings=["HTML5 Boilerplate","AngularJS","Karma"]}),angular.module("mcdsRmfWebUiApp").controller("Allogymarketview.MarketCtrl",["$scope","$rootScope","$state","$stateParams","$log","$window","$transitions","marketData","contentArray","marketCategories","marketService","marketFactory","tenantDomains",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.tenantDomains=m,a.activeDomain={domain:m[0]},a.marketData=h.data,a.marketData.content=i.data.content,a.marketCategoriesMap=l.reduceCategories(j.data),a.marketCategories=j.data.categories,a.tenantIdParam=d.tenantId,a.marketIdParam=d.marketId,a.categoryId=d.categoryId,a.contentIdParam=d.contentId,a.isCollapsed=b.viewPortSize<767,g.onBefore({from:"AllogyMarketView.market.search_results"},function(b){"AllogyMarketView.market.search_results"!==b.to().name&&(a.marketSearch="")}),a.$on("windowResize",function(b,c,d){"extra small"===c?a.isCollapsed=!0:a.isCollapsed=!1}),a.$watch(function(){return d},function(b,c){d.categoryId&&(a.categoryName=j.data.categories.find(function(a){return a.id===d.categoryId}).name)},!0),a.setActive=function(b){a.categoryId=b},a.homeToggle=function(){c.go("AllogyMarketView.market.home"),a.categoryId=null},a.currentState=function(a){return a===c.current.name.replace("AllogyMarketView.market.","")},a.backgroundImgSetter=function(b){return angular.isObject(a.marketData.banner)?{"background-image":"url("+a.marketData.banner.representations[0].uri+")"}:{"background-image":"url(images/TCCC_BG.png)"}},a.backgroundColorSetter=function(){return a.marketData.configuration?{"background-color":a.marketData.configuration.color}:{"background-color":"transparent"}},a.requestSearch=function(b,d,e,f){13!==f.keyCode&&"click"!==f.type||window._.isEmpty(d)||c.go("AllogyMarketView.market.search_results",{term:d,marketId:a.marketIdParam})}}]),angular.module("mcdsRmfWebUiApp").controller("Allogymarketview.Market.HomeCtrl",["$scope","$rootScope","$state","$stateParams","$log","$window","marketService","marketData","contentArray","contentByMarketDomain","featuredContent","MARKET_ID_MAP","LEARNER_URL",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.learnerUi=m,a.isCollapsed=!1,a.featuredContent=k.data.content[0],a.marketDomainObj=j.data,a.staticFeaturedBanner=l[d.marketId.toString()],a.text=function(a){return'<h2 class="category-name">'+a.name+"</h2>"},a.isStaticVideoCategory=function(a){return 1===a.restrictedTypes.length&&"video"===a.restrictedTypes[0]},a.collapseButtonText=function(){return a.isCollapsed?'<i class="fa fa-caret-right"></i> Show description':'<i class="fa fa-caret-up"></i> Hide description'}}]),angular.module("mcdsRmfWebUiApp").controller("Allogymarketview.Market.CategoryCtrl",["$scope","$rootScope","$state","$stateParams","$log","$window","$cookies","marketService","marketData","contentArray","categoryData","categoriesContentArray","$location","$anchorScroll","LEARNER_URL",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.learnerUi=o,a.categoryId=d.categoryId,a.marketId=d.marketId,a.sortedBy="",a.layout=void 0===g.get("categoryLayout")?"grid":g.get("categoryLayout"),a.categoryName=k.data.name,200!==k.status?(a.categoryData=[],b.$broadcast("rootAlertMessage",{type:"danger",msg:"Status: "+k.status+" - "+k.statusText+"<br />Could not retrieve list of markets",timeout:5e3})):a.categoryData=k.data,200!==l.status?(a.categoriesContentArray=[],b.$broadcast("rootAlertMessage",{type:"danger",msg:"Status: "+l.status+" - "+l.statusText+"<br />Could not retrieve list of markets",timeout:5e3}
1)):a.categoriesContentArray=l.data.content,a.setBgImg=function(a){a.icon&&(a.imgStyle={"background-image":"url("+a.icon.representations[1].uri+")"})},a.hasVideoOnlyRestriction=function(a){return 1===k.data.restrictedTypes.length&&"video"===k.data.restrictedTypes[0]},a.hasAudioOnlyRestriction=function(a){return 1===k.data.restrictedTypes.length&&"audio"===k.data.restrictedTypes[0]},a.typeAndRestrictionClasses=function(b){var c=a.hasVideoOnlyRestriction()?"":" mixed-content";return b.type+c},a.openContent=function(a){c.go("AllogyMarketView.market.content",{marketId:d.marketId,contentId:a.id})},a.sortContentsBy=function(c){a.categoriesContentArray=[],h.getCategoryContent(a.marketId,a.categoryId,c).then(function(b){a.sortedBy=c,a.categoriesContentArray=b.data.content},function(c){b.$broadcast("rootAlertMessage",{type:"danger",msg:"Status: "+c.status+" - "+c.statusText+"<br />Could not retrieve list of markets",timeout:5e3}),a.sortedBy="",a.categoriesContentArray=l.data.content})},a.viewContentsBy=function(b){g.put("categoryLayout",b),a.layout=b}}]),angular.module("mcdsRmfWebUiApp").controller("Allogymarketview.SearchResultsCtrl",["$scope","$rootScope","$state","$stateParams","$log","$window","$location","marketService","searchResults","LEARNER_URL",function(a,b,c,d,e,f,g,h,i,j){a.learnerUi=j,a.marketId=d.marketId,a.term=d.term,a.searchResults=i.data}]),angular.module("mcdsRmfWebUiApp").controller("Allogymarketview.LoginCtrl",["$scope","$rootScope","$http","$state","$stateParams","$log","$window","$location","$cookies","$timeout","$filter","TENANT_ID","STATIC_MARKET_ID","TOKEN_URI","STATIC_CLIENT_ID","STATIC_CLIENT_SECRET",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=angular.copy(g.sessionStorage.allogyUserInitialLoc);if(delete g.sessionStorage.allogyUserInitialLoc,e.state!==g.sessionStorage.state)return b.$broadcast("rootAlertMessage",{type:"danger",msg:"Please try logging in again",timeout:7500}),delete g.sessionStorage.redirectUrl,delete g.sessionStorage.state,i.remove("ALLOGY_API_ACCESS_TOKEN"),q?h.path(q):h.path("/");var r=g.btoa(o+":"+p),s={method:"POST",url:n,params:{grant_type:"authorization_code",redirect_uri:g.sessionStorage.redirectUrl,code:e.code,client_id:o},headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:"Basic "+r}};i.remove("ALLOGY_API_ACCESS_TOKEN"),c(s).then(function(a){if(200!==a.status)b.$broadcast("rootAlertMessage",{type:"danger",msg:"Status: "+a.status+" - "+k("uppercase")(a.data.error)+"<br />"+a.data.error_description+"<br />Please manually clear your cookies and cached data and try again.",timeout:7500}),i.remove("ALLOGY_API_ACCESS_TOKEN");else{var c={};c.expires=window.moment().add(30,"minutes").utc().toString();var d=new URL(a.config.url,h.absUrl());"https:"===d.protocol&&d.hostname.endsWith("allogy.com")&&(c.secure=!0),i.put("ALLOGY_API_ACCESS_TOKEN",a.data.access_token,c)}},function(a){i.remove("ALLOGY_API_ACCESS_TOKEN")})["finally"](function(){return delete g.sessionStorage.redirectUrl,delete g.sessionStorage.state,q?h.path(q):h.path("/")})}]),angular.module("mcdsRmfWebUiApp").controller("AllogyMarketView.ContentReviewCtrl",["$scope","$rootScope","$state","$stateParams","$log","$window","contentData","marketService","ReviewFactory","AllogyOAuth","TENANT_ID","PAGINATION_LIMIT","$location","$anchorScroll",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){h.getContentReviews(d.contentId,g.data.tenantId,1,a.limit).then(function(b){console.log("getReviews success",b),a.contentReviews=new i(b.data)},function(a){console.log("getReviews error",a)})}a.isAuthenticated=j.isAuthenticated(),a.customStatePath=function(){return c.includes("*.market.*")?c.href("AllogyMarketView.market.content",{contentId:d.contentId}):c.href("AllogyMarketView.content",{contentId:d.contentId})},a.contentData={},a.contentReviews={},a.newReview={title:null,reviewText:null,ratingValue:null},200!==g.status?(c.go("AllogyMarketView.market.home"),b.$broadcast("rootAlertMessage",{type:"danger",msg:"Status: "+g.status+" - "+g.statusText+"<br />Could not retrieve selected Content",timeout:5e3})):(console.log(g.data.name+" data",g.data),a.contentData=g.data,o()),a.isLoadingMore,a.hasAllContent,a.limit=l,a.loadMore=function(c){console.log("loadMore triggered"),c||a.hasAllContent||(a.isLoadingMore=!0,h.getContentReviews(d.contentId,g.data.tenantId,a.contentReviews.pageFinder(a.limit),a.limit).then(function(b){a.contentReviews.union(b.data.reviews),a.isLoadingMore=!1,a.hasAllContent=a.contentReviews.hasAllContent()},function(c){console.log("loadMore error",c),b.$broadcast("rootAlertMessage",{type:"danger",msg:"Status: "+c.status+" - "+c.statusText+"<br />Could not retrieve additional markets",timeout:5e3}),a.isLoadingMore=!1}))},a.getNumber=function(a){return new Array(a)},a.readableTime=function(a){return window.moment(a).format("l")}}]).factory("ReviewFactory",["$rootScope","$q",function(a,b){var c=function(a){var b=a;return{data:a,union:function(a){var c=_.union(b.reviews,a);b.reviews=_.uniq(c,!1,function(a){return a.id})},pageFinder:function(a){return Math.floor(b.reviews.length/a)+1},hasAllContent:function(){return b.reviews?b.reviews.length>=b.totalReviewCount:!0}}};return c}]),angular.module("mcdsRmfWebUiApp").controller("AllogyMarketView.FeaturedCtrl",["$scope","$rootScope","$state","$stateParams","$log","$window","$location","marketService","marketData","contentArray","LEARNER_URL",function(a,b,c,d,e,f,g,h,i,j,k){a.learnerUi=k,a.marketData=i.data,a.marketId=d.marketId,a.featuredMarket=j.data}]),angular.module("mcdsRmfWebUiApp").service("marketService",["$rootScope","$http","$stateParams","$log","MARKET_PATH","APPLICATION_ID","TENANT_ID","STATIC_DOMAIN_ID","STATIC_CONTAINER_ID","BOOK_PATH",function(a,b,c,d,e,f,g,h,i,j){var k={getMarkets:function(a,c,d){return b({method:"GET",url:e+"/api/v2/containers/"+i+"/markets",params:{tenantId:g,page:d,marketSize:angular.isNumber(a)?a:null,contentSize:angular.isNumber(c)?c:null}})},getMarket:function(a){return b({method:"GET",url:e+"/api/v2/markets/"+a})},getMarketContents:function(a,c){return b({method:"GET",url:e+"/api/v2/markets/"+a+"/contents",params:{categoryIds:c}})},getContent:function(a){return b({method:"GET",url:e+"/api/v2/contents/"+a})},getContentReviews:function(a,c,d,f,h,i){return b({method:"GET",url:e+"/api/v2/contents/"+a+"/reviews",params:{tenantId:c?c:g,page:d?d:1,size:f?f:3,includeRatingOnlyReviews:h?!0:!1,revision:i}})},postContentReview:function(a,c,d){return b({method:"POST",url:e+"/api/v2/contents/"+a+"/reviews",data:{ratingValue:d.ratingV
1alue,reviewText:d.reviewText,tenantId:c?c:g,title:d.title}})},getUserSpecificReview:function(a){return b({method:"GET",url:e+"/api/v2/contents/"+a+"/review"})},getAllDomains:function(){return b({method:"GET",url:e+"/api/v2/domains",params:{tenantId:g}})},getMarketCategories:function(a,c){return b({method:"GET",url:e+"/api/v2/markets/"+a+"/categories",params:{domainId:c?c:h}})},getCategoryData:function(a){return b({method:"GET",url:e+"/api/v2/categories/"+a})},getCategoryContent:function(a,c,d){return b({method:"GET",url:e+"/api/v2/markets/"+a+"/contents",params:{categoryIds:c,sort:d}})},getContentByMarketInDomain:function(a){return b({method:"GET",url:e+"/api/v2/domains/"+h+"/markets/"+a+"/contents",params:{contentSize:10}})},getMarketContentsSearchResults:function(a,c){return b({method:"GET",url:e+"/api/v2/search/contents",params:{applicationId:f,marketId:a,size:"1000",q:c}})},getWebContent:function(a){return b({method:"GET",url:j+"/web/tenant/"+g+"/books/"+a+"/book.json"})}};return k}]),angular.module("mcdsRmfWebUiApp").factory("marketFactory",["$rootScope","$log","$q","$state","$stateParams","marketService",function(a,b,c,d,e,f){function g(a,b){var d=c.defer(),e={};return angular.forEach(a.categories,function(a,c,d){e[a[b]]=a}),c.all(e).then(function(a){d.resolve(a)}),d.promise}function h(a){var b=c.defer(),d=[];return angular.forEach(a,function(a,b,c){var e=parseInt(a.id);d.push(e)}),c.all(d).then(function(a){b.resolve(a)}),b.promise}function i(a,b){var d=c.defer(),e=[];return angular.forEach(a,function(a,c,d){e.push(j(a.id,b))}),c.all(e).then(function(a){d.resolve(a)}),d.promise}function j(a,b){return f.getMarketCategories(b,a).then(function(b){return b.data.id=a,b.data},function(a){})}function k(b,e){var f=c.defer();return angular.forEach(e,function(c,e,f){return angular.isDefined(b[e])&&b[e].id===c.id?_.extend(b[e],c):(a.$broadcast("rootAlertMessage",{type:"danger",msg:"Could not build data, please try again or later",timeout:5e3}),void d.go("main"))}),c.all(b).then(function(a){f.resolve(a)}),f.promise}return{reduceCategories:function(a){return g(a,"name").then(function(a){return a})},buildCategoryArray:function(a){return h(a)},getAllDomainsWithNoEmptyCategories:function(b){var c=[];return f.getAllDomains(b).then(function(e){return c=e.data.domains,i(e.data.domains,b).then(function(a){return k(c,a)},function(b){a.$broadcast("rootAlertMessage",{type:"danger",msg:"Could not do something",timeout:5e3}),d.go("main")})},function(b){a.$broadcast("rootAlertMessage",{type:"danger",msg:"Could not do something",timeout:5e3}),d.go("main")})}}}]),angular.module("mcdsRmfWebUiApp").directive("allogyCustomInputQuery",["$rootScope",function(a){return{templateUrl:"views/allogy_custom_input_query.html",scope:{hint:"="},restrict:"EA",link:function(b,c,d){b.getContentUrl=function(){return"views/allogy_custom_input_query.html"},b.$watch(function(){return a.viewPortSize},function(a){b.viewWidth=a,b.inputWidth=c[0].firstElementChild.firstElementChild.firstElementChild.offsetWidth},!0)},controller:["$scope","$rootScope","$element","$attrs","$transclude","$compile","$timeout","$http","$log","$filter","$q","$state","MARKET_PATH","TENANT_ID","STATIC_MARKET_ID",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=null;a.getQueryInput=function(b){return window._.isUndefined(b)||window._.isNull(b)||window._.isEmpty(b)||b===p?void 0:h.get(m+"/api/v2/search/contents/suggestions",{params:{tenantId:n,marketId:null,q:b}}).then(function(c){return p=b,a.queryList=c.data.suggestions,c.data.suggestions.map(function(a){return a})})},a.shouldSelect=function(a,b,c,d,e){return 39===a.keyCode,39===a.keyCode},a.requestSearch=function(b,c,d,e){13!==e.keyCode&&"click"!==e.type||window._.isEmpty(c)||(l.go("AllogyMarketView.search_results",{term:c}),a.searchString=null,p=null)}}]}}]),angular.module("mcdsRmfWebUiApp").run(["$templateCache",function(a){a.put("views/about.html",'<div id="about" class="container-fluid"> <div class="row about"> <div class="col-sm-12 col-lg-offset-2 col-lg-8"> <h3>About <br><span class="sr-only">Deployed Medicine</span><img src="images/DM_Inline.svg" alt="" class="DMinline"></h3> <p>Deployed Medicine is a platform used by the Defense Health Agency to trial new innovative learning models aimed at improving readiness and performance of deployed military medical personnel. </p> <p>The intent is to deliver personalized, dynamic learning using the most current and accessible technology, enabling a self-directed and continuous study of medical best practices and lessons learned.</p> <p>
1For more information, please send us an email at <a href="mailto:[email protected]" target="_blank" rel="noopener">[email protected]</a></p> <p>To learn more about DHA visit <a href="https://www.health.mil/dha" target="_blank" rel="noopener">https://www.health.mil/dha</a>.</p> </div> </div> </div>'),a.put("views/allogy_content.html",'<div id="singleContent" class="container-fluid"> <div class="row" ng-switch on="contentData.type"> <div class="col-xs-12 content-header"> <h2 class="content-title"> {{contentData.name}} </h2> <h5 class="content-author">by {{contentData.author}}</h5> </div> <div class="col-xs-12 col-sm-8 col-md-9 content-media"> <div ng-switch-when="video"> <div class="component-video"> <video controls ng-attr-poster="{{contentData.iconUri}}"> <source type="video/mp4" ng-src="{{contentData.contentUri}}"> Your browser does not support the video tag. </video> <div class="visible-xs content-access"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}?download=true">Download Video</a> </div> </div> </div> <div ng-switch-when="audio"> <div class="row component-audio"> <div class="col-xs-6 col-xs-push-3 col-md-6 col-md-push-3 audio-icon"> <img ng-attr-alt="{{contentData.name}}" ng-src="{{contentData.iconUri}}"> </div> <div class="col-md-12"> <audio controls> <source type="audio/mpeg" ng-src="{{contentData.contentUri}}"> </audio> <div class="visible-xs content-access"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}?download=true">Download Audio</a> </div> </div> </div> </div> <div ng-switch-when="book"> <div class="row component-book"> <div class="col-xs-6 col-xs-push-3 col-md-6 col-md-push-3 book-icon"> <div allogy-icon-height-wrapper mixed-content="true"> <img allogy-icon-representations icon-content="contentData"> </div> <div class="visible-xs content-access"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}">View Book</a> </div> </div> </div> </div> <div ng-switch-when="pdf"> <div class="row component-pdf"> <div class="col-xs-6 col-xs-push-3 col-md-6 col-md-push-3 pdf-icon"> <div allogy-icon-height-wrapper mixed-content="true"> <img allogy-icon-representations icon-content="contentData"> </div> <div class="visible-xs content-access"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}">View Pdf</a> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}?download=true">Download Pdf</a> </div> </div> </div> </div> <div ng-switch-when="externalApp"> <div class="row component-external-app"> <div class="col-xs-6 col-xs-push-3 col-md-6 col-md-push-3 external-app-icon"> <div allogy-icon-height-wrapper mixed-content="true"> <img allogy-icon-representations icon-content="contentData"> </div> <div class="visible-xs content-access text-center"> <p> <span ng-if="isCurrentPlatformType(\'android\') && !hasExternalPlatformType(\'android\')">This app is not currently available on Android.</span> <a ng-if="hasExternalPlatformType(\'android\')" device-detector class="android-link" ng-href="{{contentData.contentUri + \'?platform=android\'}}
1" target="_blank" rel="noopener"> <span class="sr-only">Play Store</span> <img class="storeIcons" src="images/GooglePlay.svg" alt="" title="Get from Google Play"> </a> </p> <p> <span ng-if="isCurrentPlatformType(\'ios\') && !hasExternalPlatformType(\'ios\')">This app is not currently available on iOS.</span> <a ng-if="hasExternalPlatformType(\'ios\')" device-detector class="ios-link" ng-href="{{contentData.contentUri + \'?platform=ios\'}}" target="_blank" rel="noopener"> <span class="sr-only">AppStore</span> <img class="storeIcons" src="images/AppStore.svg" alt="" title="Get from App Store"> </a> </p> </div> </div> </div> </div> <div ng-switch-when="course"> <div class="row component-course"> <div class="col-xs-6 col-xs-push-3 course-icon"> <div allogy-icon-height-wrapper> <img allogy-icon-representations icon-content="contentData"> </div> <div class="visible-xs content-access text-center"> <button type="button" device-detector class="btn btn-tenant web-link" rel="noopener" ng-click="navigateToLearner()">Go to Class</button> <p class="text-center">Join this class on your smartphone</p> <a device-detector class="android-link" href="https://play.google.com/store/apps/details?id=com.allogy.deployedmedicine" target="_blank" rel="noopener"> <span class="sr-only">Play Store</span> <img class="storeIcons" src="images/GooglePlay.svg" alt="" title="Get from Google Play"> </a> <a device-detector class="ios-link" href="https://itunes.apple.com/us/app/deployed-medicine/id1203051672?mt=8" target="_blank" rel="noopener"> <span class="sr-only">AppStore</span> <img class="storeIcons" src="images/AppStore.svg" alt="" title="Get from App Store"> </a> </div> </div> </div> </div> </div> <div class="col-xs-12 col-sm-4 col-md-3 thumbnail-details"> <div class="row"> <div class="col-xs-7 col-sm-12"> <p><strong>Published:</strong> <span>{{readableTime(contentData.lastPublicationTimestamp)}}</span></p> <p><strong>Size:</strong> <span>{{formatBytes(contentData.explodedSize)}}</span></p> </div> <div class="col-xs-5 col-sm-12 content-share"> <p>Share with others:</p> <a ng-href="{{twitterLink}}" target="_blank" rel="noopener" role="button"><span class="sr-only">Twitter</span><i class="fa fa-twitter-square" aria-hidden="true"></i></a> <a ng-href="{{facebookLink}}" role="button"><span class="sr-only">Facebook</span><i class="fa fa-facebook-square" aria-hidden="true"></i></a> <a ng-href="{{linkedinLink}}" target="_blank" rel="noopener" role="button"><span class="sr-only">Linkedin</span><i class="fa fa-linkedin-square" aria-hidden="true"></i></a> <a ng-href="{{mailToLink}}" target="_blank" rel="noopener" role="button"><span class="sr-only">Mail To</span><i class="fa fa-envelope" aria-hidden="true"></i></a> </div> <div class="hidden-xs col-sm-12 content-access" ng-switch-when="book"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}">View Book</a> </div> <div class="hidden-xs col-sm-12 content-access" ng-switch-when="pdf"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}">View Pdf</a> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}?download=true">Download Pdf</a> </div> <div class="hidden-xs col-sm-12 content-access" ng-switch-when="audio"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}?download=true">Download Audio</a> </div> <div class="hidden-xs col-sm-12 content-access" ng-switch-when="video"> <a class="btn btn-tenant" target="_blank" rel="noopener" ng-href="{{contentData.contentUri}}?download=true">Download Video</a> </div> <div class="hidden-xs col-sm-12 content-access" ng-switch-when="externalApp"> <p> <a ng-if="hasExternalPlatformType(\'android\')" device-detector class="android-link" ng-href="{{contentData.contentUri + \'?platform=android\'}}
1" target="_blank" rel="noopener"> <span class="sr-only">Play Store</span> <img class="storeIcons" src="images/GooglePlay.svg" alt="" title="Get from Google Play"> </a> </p> <p ng-if="isCurrentPlatformType(\'android\') && !hasExternalPlatformType(\'android\')">This app is not currently available on Android.</p> <p> <a ng-if="hasExternalPlatformType(\'ios\')" device-detector class="ios-link" ng-href="{{contentData.contentUri + \'?platform=ios\'}}" target="_blank" rel="noopener"> <span class="sr-only">AppStore</span> <img class="storeIcons" src="images/AppStore.svg" alt="" title="Get from App Store"> </a> </p><p ng-if="isCurrentPlatformType(\'ios\') && !hasExternalPlatformType(\'ios\')">This app is not currently available on iOS.</p> </div> <div class="hidden-xs col-sm-12 content-access" ng-switch-when="course"> <p> <button type="button" device-detector class="btn btn-tenant web-link" rel="noopener" ng-click="navigateToLearner();">Go to Class</button> Join this class on your smartphone<br> <a device-detector class="android-link" href="https://play.google.com/store/apps/details?id=com.allogy.deployedmedicine" target="_blank" rel="noopener"> <span class="sr-only">Play Store</span> <img class="storeIcons" src="images/GooglePlay.svg" alt="" title="Get from Google Play"> </a> <a device-detector class="ios-link" href="https://itunes.apple.com/us/app/deployed-medicine/id1203051672?mt=8" target="_blank" rel="noopener"> <span class="sr-only">AppStore</span> <img class="storeIcons" src="images/AppStore.svg" alt="" title="Get from App Store"> </a> </p> </div> </div> </div> <div class="col-xs-12 content-details"> <div class="content-description" ng-bind-html="contentData.description"></div> <hr> </div> </div> </div>'), 2a.put("views/allogy_content_review.html",'<div id="singleContent" class="container-fluid reviews"> <div class="row"> <div class="col-xs-4 col-sm-3 col-md-2 thumnail-details"> <div allogy-icon-height-wrapper mixed-content="true"> <img allogy-icon-representations icon-content="contentData"> </div> </div> <div class="col-xs-8 col-sm-9 col-md-10 content-details"> <a ng-href="{{customStatePath()}}"> <small class="pull-left"><i class="fa fa-arrow-left" aria-hidden="true"></i> Return to content view</small> </a> <h2 class="content-title"> {{contentData.name}} </h2> <h5 class="content-author">by {{contentData.author}}</h5> <h3> <span class="rating-stars"> <span class="fa-stack fa-lg" ng-repeat="num in getNumber(5) track by $index"> <i class="fa fa-stack-1x" aria-hidden="true" ng-class="{\'fa-star\': contentData.averageRatingValue > $index, \'fa-star-o\': contentData.averageRatingValue <= $index}"></i> <i class="fa fa-star-o fa-stack-1x"></i> </span> </span> </h3> <h4>Average {{contentData.averageRatingValue}} out of 5 from {{contentReviews.data.totalReviewCount}} user reviews</h4> </div> </div> <hr> <div class="row" ng-show="contentReviews.data.reviews.length "> <div class="col-sm-12 col-md-10 col-md-offset-1"> <h3> User Reviews </h3> </div> <div class="col-sm-12 col-md-10 col-md-offset-1 single-review" ng-repeat="review in contentReviews.data.reviews"> <hr> <h5><strong>{{review.title}}</strong></h5> <h6> <span class="rating-stars"> <span class="fa-stack fa-lg" ng-repeat="num in getNumber(5) track by $index"> <i class="fa fa-stack-1x" aria-hidden="true" ng-class="{\'fa-star\': review.ratingValue > $index, \'fa-star-o\': review.ratingValue <= $index}"></i> <i class="fa fa-star-o fa-stack-1x"></i> </span> </span> on {{readableTime(review.createTimestamp)}} </h6> <p>{{review.reviewText}}</p> </div> <div class="col-sm-12 col-md-10 col-md-offset-1" ng-if="contentReviews.data.totalReviewCount > contentReviews.data.reviews.length"> <hr> <button class="btn btn-primary" ng-click="loadMore(isLoadingMore)">Load more reviews</button> </div> </div> </div>'),a.put("views/allogy_custom_input_query.html",'<div class="form-group" id="allogySearchFormGroup"> <input type="text" ng-model="searchString" uib-typeahead="item as item for item in getQueryInput($viewValue)" typeahead-show-hint="hint" typeahead-focus-first="true" typeahead-should-select="" typeahead-popup-template-url="customPopupTemplate.html" placeholder="Search Deployed Medicine" ng-keypress="requestSearch(null, searchString, null, $event)" class="form-control allogySearchInput" ng-class="{hint:hint}"> <button id="allogySearchButton" class="btn btn-default" type="button" ng-click="requestSearch(null, searchString, null, $event)"> <i class="fa fa-search" aria-hidden="true"></i> </button> </div> <script type="text/ng-template" id="customPopupTemplate.html"><ul id="" class="allogySearchList" title style="min-width: none !important; width: {{$parent.inputWidth}}px !important;" ng-class="{hidden: matches.length === 0, \'nav navbar-nav\' : $parent.viewWidth < 768, \'dropdown-menu\' : $parent.viewWidth >= 768 }" role="listbox">\n <li class="list-title"><h5><em>Suggested options</em></h5></li>\n <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }"\n ng-mouseenter="selectActive($index)" ng-click="$parent.$parent.requestSearch(null, match.label, null, $event)" role="option" id="{{::match.id}}">\n <div uib-typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n </li>\n </ul></script>'),a.put("views/allogy_featured.html",'<div id="featuredMarket" class="container-fluid"> <div class="row"> <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> <h2>{{marketData.name}}</h2> <hr> </div> <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2">
2 <div class="row single-data" ng-repeat="content in featuredMarket.content track by $index "> <div class="col-xs-12 col-sm-3 col-md-3"> <div allogy-icon-height-wrapper mixed-content="false"> <img allogy-icon-representations icon-content="content"> </div> <!-- <div style="max-width: 250px;" allogy-content-icon="content" ng-class="content.type" class="img-wrap"></div> --> </div> <div class="col-xs-12 col-sm-9 col-md-9"> <div class="row"> <div class="col-xs-12"> <a ng-href="{{learnerUi}}/collections/{{marketData.id}}/contents/{{content.id}}"> <h4 class="data-title" ng-bind="content.name" title="{{content.name}}"></h4> </a> <h5 class="data-author small">By {{content.author}}</h5> </div> <div class="col-xs-12"> <p class="data-description" ng-bind-html="content.description" ellipsis ellipsis-symbol="..."></p> </div> </div> </div> <div class="col-xs-12"> <hr> </div> </div> </div> </div> </div>'),a.put("views/allogy_main.html",'<div class="allogy-market-view-wrapper" ui-view autoscroll="true"></div>'),a.put("views/allogy_market.html",'<div id="marketBanner" class="container-fluid"> <!-- Channel banner --> <div id="collectionHead" class="row"> <div class="background-display" ng-style="backgroundImgSetter(categoryId)"> <div class="col-xs-12 col-sm-8 col-md-6 width-setter"> <div class="title-wrapper"> <h1 class="highlight-wrapper"> <span class="black-tape">{{marketData.name}}</span> </h1> </div> </div> </div> <div class="col-xs-12 collection-border" ng-style="backgroundColorSetter(categoryId)"></div> </div> <!-- Search bar and menu toggle --> <div id="collectionSearch" class="row"> <div class="col-xs-10 visible-xs panel-bar"> <div class="input-group" ng-show="currentState(\'category\')"> <input type="text" class="form-control" ng-model="marketSearch" placeholder="SEARCH {{categoryName}}"> <span class="input-group-btn"> <button class="btn btn-default" type="button"><i class="fa fa-search" aria-hidden="true"></i></button> </span> </div> <div class="input-group" ng-show="currentState(\'home\') || currentState(\'search_results\')"> <input type="text" class="form-control" ng-model="marketSearch" ng-keypress="requestSearch(null, marketSearch, null, $event)" placeholder="SEARCH COLLECTION"> <span class="input-group-btn"> <button class="btn btn-default" type="button" ng-click="requestSearch(null, marketSearch, null, $event)"><i class="fa fa-search" aria-hidden="true"></i></button> </span> </div> </div> <!-- <div class="col-xs-2 panel-bar">CategoryId: {{categoryId}}</div> --> <div class="col-xs-2 visible-xs panel-bar"> <div class="pull-right channel-toggle"> <a class="btn btn-tenant" ng-click="isCollapsed = !isCollapsed"> <i class="fa fa-bars" aria-hidden="true"></i> </a> </div> </div> </div> <div id="breadcrumbWrapper" class="row"> <!-- <div class="col-xs-12"> --> <div ncy-breadcrumb></div> <!-- </div> --> </div> </div> <div id="marketBody" class="container-fluid"> <!-- Market --> <div class="row"> <!-- Channel nav --> <div class="col-xs-12 col-sm-4 col-md-3 channel-nav" uib-collapse="isCollapsed"> <!-- <ul class="nav nav-stacked">\n </ul> --> <!-- <hr /> --> <form class="form-horizontal"> <div class="form-group"> <label class="col-xs-4 control-label">Filter by</label> <div class="col-xs-8"> <select ng-selected="activeDomain.domain.id === domain.id" ng-options="domain as domain.name for domain in tenantDomains" class="form-control" name="domainSelect" id="domainSelect" ng-model="activeDomain.domain"> <!-- <option ng-repeat="domain in tenantDomains" value="domain">{{domain.name}}</option> --> </select> <!-- <select class="form-control">\n\n <option>Channel</option>\n <option>Role</option>\n <option>Subject</option>\n </select> --> </div> </div> </form> <!-- </li> --> <ul class="nav nav-stacked"> <li class="channel" ng-class="{active: currentState(\'home\')}"> <a role="button" ui-sref="AllogyMarketView.market.home({marketId:marketData.id})" ng-click="homeToggle()" class="home"> Collection Home </a> </li> <li class="channel" ng-repeat="category in activeDomain.domain.categories" ng-class="{active: !currentState(\'home\') && categoryId === category.id}"> <a role="button" ui-sref="AllogyMarketView.market.category({categoryId:category.id, marketId:marketData.id})" ng-click="setActive(category.id);toggleMenu(isCollapsed)" class="skill"> {{category.name}}
2 </a> </li> </ul> </div> <div class="col-sm-8 col-md-9 hidden-xs" ng-show="currentState(\'home\') || currentState(\'search_results\')"> <div id="marketSearch" class="row"> <div class="col-sm-5 hidden-xs"> <div class="input-group"> <input type="text" class="form-control" ng-model="marketSearch" ng-keypress="requestSearch(null, marketSearch, null, $event)" placeholder="SEARCH COLLECTION"> <span class="input-group-btn"> <button class="btn btn-default" type="button" ng-click="requestSearch(null, marketSearch, null, $event)"><i class="fa fa-search" aria-hidden="true"></i></button> </span> </div> </div> </div> </div> <!-- Home/Channels/Content/ContentSearch --> <div ui-view autoscroll="true" class="col-xs-12 col-sm-8 col-md-9"></div> </div> <div class="row" ng-show="currentState(\'content\')"> <div class="col-xs-12"> <div class="container-fluid"> <div id="alsoCollection" class="row"> <div class="col-xs-12"> <h5 class="text-center">Also within this Collection</h5> <div allogy-single-market-hor-scroll all-videos="false" content-array="undefined" market-id="marketData.id" category-id="categoryId"></div> </div> </div> </div> </div> </div> </div> <ng-include ng-show="currentState(\'content\')" src="\'views/appstores.html\'"></ng-include>'),a.put("views/allogy_market_all.html",'<div> <div class="svg-wrapper"> <img src="images/channels/CollectionNavIcons_All_On.svg"> </div> <div class="channel-context"> <h2 class="channel-name">View all titles</h2> <h5>Compelete source:</h5> <p>Search through the eitire contents of this collection</p> </div> </div> <div class="col-xs-12 filter-search"> <!-- <select placeholder="Filter"></select> --> <div class="search input-group"> <input type="text" class="form-control" placeholder="SEARCH CONTENT" id="" ng-model="marketSearch.name"> <i class="fa fa-search"></i> <i class="fa fa-times clickable" ng-click="marketSearch.name = undefined"></i> </div> </div> <div class="col-xs-12 collection-of-titles"> <div class="row"> <div class="single-title col-xs-6 col-sm-4 col-md-3" ng-repeat="content in marketData.content | filter:marketSearch.name track by $index " ng-init="setBgImg(content)" ng-click="openContent(content)" title="{{content.name}} by {{content.author}}"> <div allogy-content-icon="content" ng-class="content.type" class="img-wrap" ng-click="openContent(content)"></div> <p class="work-title" ng-bind="content.name" ellipsis ellipsis-symbol="..."></p> <p class="work-author" ng-bind="\'by \' + content.author" ellipsis ellipsis-symbol="..."></p> </div> </div> </div>'),a.put("views/allogy_market_channel.html",'<div id="singleChannel" class="collection-of-titles"> <div class="row"> <div class="col-xs-12"> <div class="row"> <div class="col-sm-5 hidden-xs"> <div class="input-group" ng-show="currentState(\'category\')"> <input type="text" class="form-control" ng-model="$parent.marketSearch" placeholder="SEARCH {{categoryName}}"> <span class="input-group-btn"> <button class="btn btn-default" type="button"><i class="fa fa-search" aria-hidden="true"></i></button> </span> </div> </div> <div class="col-xs-12 col-sm-7 sorting-buttons"> <div class="btn-group view-changer" role="group"> <button type="button" ng-class="{\'btn-tenant\': layout === \'list\', \'btn-default\': layout !== \'list\' }" ng-click="viewContentsBy(\'list\')" class="btn"><i class="fa fa-list-ul" aria-hidden="true"></i></button> <button type="button" ng-class="{\'btn-tenant\': layout === \'grid\', \'btn-default\': layout !== \'grid\' }" ng-click="viewContentsBy(\'grid\')" class="btn"><i class="fa fa-th" aria-hidden="true"></i></button> <span class="spacer"> </span> </div> <div class="btn-group" role="group"> <label class="control-label">Sort by</label> <!-- <button type="button" ng-class="{\'btn-tenant\': sortedBy === \'\'}" ng-click="sortContentsBy(\'\')" class="btn btn-default">Default</button> --> <button type="button" ng-class="{\'btn-tenant\': sortedBy === \'lastPublicationTimestamp\', \'btn-default\': sortedBy !== \'lastPublicationTimestamp\' }" ng-click="sortContentsBy(\'lastPublicationTimestamp\')" class="btn">Recent</button> <button type="button" ng-class="{\'btn-tenant\': sortedBy === \'name\', \'btn-default\': sortedBy !== \'name\' }" ng-click="sortContentsBy(\'name\')" class="btn">Title</button> <button type="button" ng-class="{\'btn-tenant\': sortedBy === \'author\', \'btn-default\': sortedBy !== \'author\' }" ng-click="sortContentsBy(\'author\')" class="btn">Author</button> </div> </div> </div> <h2 class="category-name" ng-if="categoryName" ng-bind-html="categoryName"></h2> </div> <div class="col-xs-12 text-center" ng-if="categoriesContentArray.length === 0"> <i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i> <span class="sr-only">Loading...</span> </div> <div class="single-title" ng-if="layout === \'grid\'" ng-class="{\'col-xs-6 col-sm-4 col-md-3\':!hasVideoOnlyRestriction(categoryId),\'col-xs-12 col-sm-6 col-md-4\':hasVideoOnlyRestriction(categoryId)}" ng-repeat="content in categoriesContentArray | filter:$parent.marketSearch track by $index " title="{{content.name}} by {{content.author}}"> <a ng-href="{{learnerUi}}/collections/{{marketId}}/contents/{{content.id}}" class="ratio-container" ng-class="{\n \'ratio-1-1\':hasAudioOnlyRestriction(categoryId),\n \'ratio-16-9\':hasVideoOnlyRestriction(categoryId),\n \'ratio-16-23\':!hasAudioOnlyRestriction(categoryId) && !hasVideoOnlyRestriction(categoryId)\n }"> <div allogy-icon-height-wrapper icon-path="content.icon.representations[3].uri" mixed-content="!hasVideoOnlyRestriction(contentId) && !hasAudioOnlyRestriction(contentId)"> <img allogy-icon-representations icon-content="content"> </div> <div class="content-details"> <p class="content-title" ng-bind="content.name" ellipsis ellipsis-symbol
2="..."></p> <p class="content-author" ng-bind="\'by \' + content.author" ellipsis ellipsis-symbol="..."></p> </div> </a> </div> <div class="col-xs-12" ng-if="layout === \'list\'"> <div class="row single-title" ng-repeat="content in categoriesContentArray | filter:$parent.marketSearch track by $index " title="{{content.name}} by {{content.author}}"> <div class="col-xs-12 col-sm-3 col-md-3"> <a ng-href="{{learnerUi}}/collections/{{marketId}}/contents/{{content.id}}" class="ratio-container" ng-class="{\n \'ratio-1-1\':hasAudioOnlyRestriction(categoryId),\n \'ratio-16-9\':hasVideoOnlyRestriction(categoryId),\n \'ratio-16-23\':!hasAudioOnlyRestriction(categoryId) && !hasVideoOnlyRestriction(categoryId)\n }"> <div allogy-icon-height-wrapper icon-path="content.icon.representations[3].uri" mixed-content="!hasVideoOnlyRestrictions()"> <img allogy-icon-representations icon-content="content"> </div> </a> </div> <div class="col-xs-12 col-sm-9 col-md-9"> <div class="row"> <div class="col-xs-12"> <a ng-href="{{learnerUi}}/collections/{{marketId}}/contents/{{content.id}}"> <h4 class="data-title" ng-bind="content.name" title="{{content.name}}"></h4> </a> <h5 class="data-author small">By {{content.author}}</h5> </div> <div class="col-xs-12"> <p class="data-description" ng-bind-html="content.description" ellipsis ellipsis-symbol="..."></p> </div> </div> </div> <div class="col-xs-12"> <hr> </div> </div> </div> </div> </div>'),a.put("views/allogy_market_home.html",'<!-- Search bar and menu toggle --> <div id="featuredDescription" class="row"> <div class="col-xs-12" uib-collapse="isCollapsed" ng-bind-html="marketData.description"></div> <div class="col-xs-12"> <a role="button" class="btn btn-link" ng-click="isCollapsed = !isCollapsed" ng-bind-html="collapseButtonText()"></a> </div> </div> <div class="row"> <div class="col-xs-12"> <p class="">{{$ctrl.staticFeaturedBanner}}</p> </div> </div> <div id="featuredTitle" class="row" ng-switch="staticFeaturedBanner"> <div ng-switch-when="tccc"> <div class="col-xs-12"> <div class="container-fluid featured-bg"> <img class="featured-ribbon hidden-xs" src="images/Featured_ribbon.svg"> <div class="row"> <div class="visible-xs col-xs-3"> <img class="featured-ribbon-col" src="images/Featured_ribbon.svg"> </div> <div class="col-xs-9 col-sm-offset-2 col-sm-5 col-md-4"> <a ng-href="{{learnerUi}}/collections/{{$parent.marketData.id}}/contents/{{featuredContent.id}}"> <div allogy-icon-height-wrapper mixed-content="true"> <img ng-if="featuredContent" allogy-icon-representations icon-content="featuredContent"> </div> </a> </div> <div class="col-xs-12 col-sm-5 col-md-6"> <h3 class="parent-market">{{$parent.marketData.name}}</h3> <h1 class="featured-name">{{featuredContent.name}}</h1> </div> <a class="btn btn-tenant" href="https://books.allogy.com/v1/tenant/8/books/723cac8a-8568-4884-962d-52f7d805e760?download=true">Download<br>Guidelines PDF</a> </div> </div> </div> </div> <div ng-switch-when="asmTraining" class="col-sm-12 hidden-xs"> <div class="asm-training-featured"> <img src="images/asm-training/asm-featured-block.png" alt="" class="img-responsive"> <a href="/links/asm-instructor-materials.zip" class="download-link" target="_blank"> <img src="images/asm-training/download-button-web-asm.png" alt="" class="download-button"> </a> </div> </div> <div ng-switch-when="clsCourse" class="col-sm-12 hidden-xs"> <div class="asm-training-featured"> <img src="images/cls-course/cls-featured-block.png" alt="" class="img-responsive"> <a href="/links/cls-course-download.zip" class="download-link" target="_blank"> <img src="images/cls-course/download-button.png" alt="" class="download-button"> </a> </div> </div> <div ng-switch-default></div> </div> <div id="marketCategoryScrolls" class="row"> <div class="col-xs-12" ng-repeat="category in marketDomainObj.categories"> <a role="button" ui-sref="AllogyMarketView.market.category({categoryId:category.id, marketId:$parent.marketData.id})" ng-click="$parent.setActive(category.id)" class="btn btn-link pull-right">See all <i class="fa fa-angle-right fa-lg" aria-hidden="true"></i></a> <div ng-bind-html="text(category)"></div> <hr> <div allogy-single-market-hor-scroll ng-class="{allVideos : isStaticVideoCatrgory(category.id)}" all-videos="isStaticVideoCategory(category)" content-array="category.contents" market-id="marketData.id" category-id="category.id"></div> </div> </div>'),a.put("views/allogy_market_search_results.html",'<div id="searchResults" class="row"> <div class="col-xs-12"> <h4>Search "{{term}}" returned {{searchResults.content.length}} result<span ng-if="searchResults.content.length !== 1">s</span></h4> </div> <div class="col-xs-12"> <hr> </div> <div class="col-xs-12">
2 <div class="row single-data" ng-repeat="content in searchResults.content track by $index "> <div class="col-xs-12 col-sm-3 col-md-3"> <div allogy-icon-height-wrapper mixed-content="true"> <img allogy-icon-representations icon-content="content"> </div> <!-- <div style="max-width: 250px;" allogy-content-icon="content" ng-class="content.type" class="img-wrap"></div> --> </div> <div class="col-xs-12 col-sm-9 col-md-9"> <div class="row"> <div class="col-xs-12"> <a ng-href="{{learnerUi}}/collections/{{marketId}}/contents/{{content.id}}"> <h4 class="data-title" ng-bind="content.name" title="{{content.name}}"></h4> </a> <h5 class="data-author small">By {{content.author}}</h5> </div> <div class="col-xs-12"> <p class="data-description" ng-bind-html="content.description" ellipsis ellipsis-symbol="..."></p> </div> </div> </div> <div class="col-xs-12"> <hr> </div> </div> </div> </div>'),a.put("views/allogy_marketplace_login.html",'<button id="allogyLoggedout" ng-hide="isAuthenticated" role="button" type="button" ng-click="requestLogin()" class="btn navbar-btn" ng-class="anchorClasses">SIGN IN</button> <ul id="allogyLoggedIn" ng-show="isAuthenticated" class="nav navbar-nav"> <li class="dropdown" uib-dropdown is-open="userDropdown.isopen"> <a ng-show="isAuthenticated" type="button" role="button" aria-haspopup="true" aria-expanded="false" class="navbar-btn btn-icon dropdown-toggle" uib-dropdown-toggle ng-disabled="disabled"> <i class="fa fa-user-circle" aria-hidden="true"></i> <i class="fa fa-fw hidden" ng-class="{\'fa-caret-left\': !userDropdown.isopen, \'fa-caret-down\': userDropdown.isopen }"></i> <span class="sr-only">User Profile</span> </a> <ul uib-dropdown-menu role="menu" aria-labelledby="btn-append-to-body" class="dropdown-menu"> <li><a type="button" role="button" ng-click="logout()"><i class="fa fa-sign-out fa-flip-horizontal fa-fw"></i> Sign Out </a></li> </ul> </li> </ul>'),a.put("views/allogy_search_results.html",'<div id="searchResults" class="container-fluid"> <div class="row"> <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> <h4>Search "{{term}}" returned {{searchResults.content.length}} result<span ng-if="searchResults.content.length !== 1">s</span></h4> </div> <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> <hr> </div> <div class="col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> <div class="row single-data" ng-repeat="content in searchResults.content track by $index "> <div class="col-xs-12 col-sm-3 col-md-3"> <div allogy-icon-height-wrapper mixed-content="true"> <img allogy-icon-representations icon-content="content"> </div> <!-- <div style="max-width: 250px;" allogy-content-icon="content" ng-class="content.type" class="img-wrap"></div> --> </div> <div class="col-xs-12 col-sm-9 col-md-9"> <div class="row"> <div class="col-xs-12"> <a ng-href="{{learnerUi}}/collections/{{content.owningMarketId}}/contents/{{content.id}}" target="_blank" rel="noopener noreferrer"> <h4 class="data-title" ng-bind="content.name" title="{{content.name}}"></h4> </a> <h5 class="data-author small">By {{content.author}}</h5> </div> <div class="col-xs-12"> <p class="data-description" ng-bind-html="content.description" ellipsis ellipsis-symbol="..."></p> </div> </div> </div> <div class="col-xs-12"> <hr> </div> </div> </div> </div> </div>'),a.put("views/allogy_single_market_hor_scroll.html",'<div class="overflow-scroller"> <div class="inner-wrapper" drag-scroll="true" axis="x" index="{{$index}}"> <div class="single-content" ng-repeat="content in contentArray | limitTo: 6 " ng-class="classBuilder(content, $last)"> <a ng-href="{{learnerUi}}/collections/{{marketId}}/contents/{{content.id}}" target="_blank" rel="noopener noreferrer"> <div allogy-icon-height-wrapper mixed-content="!allVideos"> <img allogy-icon-representations icon-content="content"> </div> <p class="content-title" ng-bind="content.name" ellipsis ellipsis-symbol="..."></p> <p class="content-author" ng-bind="\'by \' + content.author" ellipsis ellipsis-symbol="..."></p> </a> </div> </div> </div>'),a.put("views/allogy_tenant.html",'<!-- <div id="tenant" class="row">\n <div class="col-xs-12 carousel-wrapper">
2\n <uib-carousel interval="7500" no-wrap="false">\n <uib-slide ng-repeat="slide in slides" active="slide.active" index="slide.id">\n <img ng-src="{{slide.image}}" style="margin:auto;">\n </uib-slide>\n </uib-carousel>\n </div>\n <div class="col-xs-12">\n <h3 class="available-collections">AVAILABLE COLLECTIONS</h3>\n <div class="row">\n <div ng-repeat="collection in marketsArray | filter:marketSearch track by $index " class="col-xs-6 col-sm-4 col-md-3 single-collection" title="{{collection.name}}">\n <a ui-sref="AllogyMarketView.market.home({containerId: containerIdParam, marketId: collection.id})">\n <div ng-if="collection.iconUri" class="img-wrap">\n <img class="exists" ng-src="{{collection.iconUri}}">\n </div>\n <div ng-if="!collection.iconUri" class="img-wrap">\n <img class="placeholder" src="images/market_placeholder.png">\n <div class="font-icon-wrapper">\n <i class="fa fa-camera" aria-hidden="true"></i>\n </div>\n </div>\n <p class="collection-title" ng-bind="collection.name" ellipsis ellipsis-symbol="..."></p>\n </a>\n </div>\n </div>\n </div>\n <div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 loading-block">\n <a class="btn btn-block" ng-click="loadMore(loadingMore);" ng-class="{\'btn-default disabled active\':loadingMore && !hasAllMarkets || !loadingMore && hasAllMarkets, \'btn-primary btn-tenant\':!loadingMore && !hasAllMarkets}">\n <span ng-if="loadingMore && !hasAllMarkets">loading <i class="fa fa-refresh fa-spin fa-lg"></i></span>\n <span ng-if="!loadingMore && hasAllMarkets">all markets loaded</span>\n <span ng-if="!loadingMore && !hasAllMarkets">load more</span>\n </a>\n </div>\n </div> -->'),a.put("views/appstores.html",'<div class="container-fluid"> <div class="row appstores"> <div class="col-xs-12"> <p> Download the app to your smartphone<br> <a href="https://play.google.com/store/apps/details?id=com.allogy.deployedmedicine" target="_blank" rel="noopener"> <span class="sr-only">Play Store</span> <img class="storeIcons" src="images/GooglePlay.svg" alt="" title="Get from Google Play"> </a> <a href="https://itunes.apple.com/us/app/deployed-medicine/id1203051672?mt=8" target="_blank" rel="noopener"> <span class="sr-only">AppStore</span> <img class="storeIcons" src="images/AppStore.svg" alt="" title="Get from App Store"> </a> </p> </div> </div> </div>'),a.put("views/contribute.html",'<!-- <div class="container-fluid">\n <div class="row contribute">\n <div class="col-sm-12 text-center">\n <h4>Do you think you have media to contribute to Deployed Medicine? </h4>\n <p>Help us refine the training we provide, and submit your assets for review via our submissions portal.</p>\n </div>\n <div class="col-sm-12 text-center">\n <p><a class="btn btn-tenant btn-lg" role="button">Visit Portal</a></p>\n </div>\n </div>\n</div> -->'),a.put("views/creator.html",'<div id="creator" class=""> <!-- Hero Slideshow --> <div class="herobanner"> <!-- Wrapper for slides --> <div class="hero-inner" role="listbox"> <div class="hero-caption"><br> <img class="CREATORlogo" src="images/creator/CREATOR.svg" alt="CREATOR" title="CREATOR" width="350px"> <h2>The digital content builder, media library and authoring tool for the Deployed Medicine learning health system.</h2> <p><em>* The Creator Suite is available for U.S. military use only.</em></p> </div> </div> </div> <div class="container-fluid"> <div class="row featured"> <div class="col-lg-12"> <h5>KEY TOOLS AND FEATURES</h5><br> <h2> Our suite of tools allow you to store all your media assets <br>and use them to build rich interactive learning content and experiences<br> to support life long learning in military health. </h2> <br><br> </div> <div class="row teasers"> <div class="col-sm-4"> <img src="images/creator/DAM.svg" alt="" width="130px"> <h2><strong>DIGITAL ASSET MANAGER</strong></h2><br> <p>Upload and manage all your videos, audio and text content in one place.</p> <br><br> </div> <div class="col-sm-4"> <img src="images/creator/ContentBuilder.svg" alt="" width="130px"> <h2><strong>RICH CONTENT BUILDER</strong></h2><br> <p>Use your own content to build out content across multple channels.</p><br><br> </div> <div class="col-sm-4"> <img src="images/creator/LearnerEnagement.svg" alt="" width="130px"> <h2><strong>LEARNER ENGAGEMENT</strong></h2><br> <p>Send out messages and updates to your learner community and track usage statistics.</p><br><br> </div> <div class="col-xs-12"> <p>The Creator Suite enables the design and distribution of medical educational content that enables medical personnel to prepare, practice and persist in meaningful learning that optimizes the delivery of care in support of deployed operations.</p> </div> </div> </div> </div> <!-- end container-fluid --> <!-- Registration --> <div class="registration"> <div class="row teasers"> <div class="col-xs-12"> <br> <div class="alert alert-info text-center"> <h2>Application for use will be coming soon</h2> <p>Our Creator tools are still being matured, so only available to our internal team at the moment.</p> <p> We hope to make them available for broader use in 2018. For more information and to learn about updates, please follow our <a href="https://www.facebook.com/DeployedMedicine/" target="_blank">Facebook page</a>
2, check back on this page, or send us an email at <a href="mailto:[email protected]">[email protected]</a>.</p> <br><br> <p><small>The Creator Suite is intended for use by official military authorities whose mission it is to support the medical readiness of U.S. military personnel.</small></p> </div> </div> </div> </div> </div>'),a.put("views/instructor_request.html",'<div id="about" class="container-fluid"> <div class="row about"> <div class="col-sm-12 col-lg-offset-2 col-lg-8"> <script src="https://static.airtable.com/js/embed/embed_snippet_v1.js"></script> <iframe class="airtable-embed airtable-dynamic-height" src="https://airtable.com/embed/shr9N9npHxYwnCenm?backgroundColor=purple" onmousewheel="" width="100%" height="1702" style="background: transparent; border: 0px"></iframe> </div> </div> </div>'),a.put("views/instructors.html",'<div id="instructorsPage"> <!-- Instructors Banner --> <div class="container-fluid"> <div class="row instructorsHero"> <div class="col-sm-12"> <h1><span>Instructor\'s</span> Area</h1> </div> </div> </div> <!-- About --> <div class="container-fluid"> <div class="row aboutCoTCCC"> <div class="col-xs-10 col-xs-offset-1 downloads"> <p>This area of Deployed Medicine serves as a central resource for instructors, physicians and medical officers who provide oversight of TCCC medical training and protocols across the U.S. military. The educational materials contained on this site are provided by the Joint Trauma System (JTS), Center of Excellence, and were created under the oversight and direction of the Committee on Tactical Combat Casualty Care (CoTCCC). These materials reflect the latest and most up-to-date information available.</p> <p>Three ways instructors can incorporate Deployed Medicine into their training plan:</p> <ul> <li>Ask students to download the mobile app prior to formal training, and review material to help prepare ahead of time</li> <li>Download the videos and incorporate them into your presentations to better engage learners and save time</li> <li>Suggest that students use the app to stay up-to-date after the formal training ends to help them sustain knowledge and skills. Students will receive push notifications via the app to alert them to changes in TCCC clinical practice guidelines, new content or other breaking news</li> </ul> <p>A Deployed Medicine poster is available for display in your training environment. If you are a US military unit, and would like posters, please email us at <a href="mailto:[email protected]">[email protected]</a> and posters will be delivered to your location, free of charge. For other partners, we can send you a file for local printing.</p> <p>The Deployed Medicine team is working hard to provide more training aids. We welcome your feedback, so please tell us what you need. Email us at <a href="mailto:[email protected]">[email protected]</a>.</p> <h2>Instructor Material</h2> <h4>Tactical Combat Casualty Care for All Service Members (TCCC ASM)- <span style="color: red">NEW</span></h4> <p>The entire course can be downloaded as a single zip file to your personal computer or laptop. The file contains a PowerPoint presentation, 15 instructional videos and other materials, so it is rather large. Please allow ample time for this download.</p> <ul> <li> <a href="/links/asm-instructor-materials.zip" target="_blank">TCCC ASM COURSE 2019</a> </li> </ul> <p>Alternatively, you can download each file from the Collection Page, one at a time, depending on what items you may
2need. For questions about the TCCC ASM Course, contact the Joint Trauma Education and Training Branch (JTET-B) at <a href="mailto:[email protected]">[email protected]</a></p> <p>For support in training the Medical Provider Course (TCCC-MP) or the All Combatants (TCCC- AC) Courses and associated Instructor Certification visit the National Association of Emergency Medical Technicians (NAEMT)</p> <br> <p>TCCC Courses and Instructor Certification through the National Association of Emergency Medical Technicians (NAEMT)</p> <br> <!-- <hr /> --> <div class="row"> <br> <div class="col-xs-12 col-md-6 downloads" ng-repeat="(provName, providerTypeObject) in instructorsObjectBundles"> <h5 ng-bind-html="provName"></h5> <ul> <li ng-repeat="(string, link) in providerTypeObject"> <a ng-href="{{link}}">{{string}}</a> </li> </ul> <br> </div> <div ng-if="false" ng-repeat="(provName, providerTypeObject) in instructorsObjectSingles" class="col-xs-12 col-md-6 downloads"> <h4 ng-bind-html="provName"></h4> <uib-accordion close-others="true"> <uib-accordion-group template-url="group-template.html" heading="{{skillKey}}" ng-repeat="(skillKey, links) in providerTypeObject"> <ul class="list-unstyled"> <li ng-repeat="(string, href) in links"> <a ng-href="{{href}}">{{string}}</a> </li> </ul> </uib-accordion-group> </uib-accordion> </div> <div class="col-xs-12 text-center"> <a href="http://cotccc.com/medical-director-instructor/" role="button" class="btn btn-link" target="_blank" rel="noopener noreferrer">Download Individual/Specific Curriculum Files Here</a> </div> </div> </div> </div> </div> <!-- Contribute --> <ng-include src="\'views/contribute.html\'"></ng-include> </div> <script ng-if="false" type="text/ng-template" id="group-template.html"><div class="instructor-accordion">\n <h5 tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading">\n <i class="fa fa-fw" ng-class="{\'fa-plus-square-o\': !isOpen, \'fa-minus-square\': isOpen}"></i> <span ng-class="{\'text-muted\': isDisabled}">{{heading}}</span>\n </h5>\n <div uib-collapse="!isOpen" ng-transclude></div>\n </div></script>'), 3a.put("views/main.html",'<div id="main"> <!-- Main Banner --> <div class="container-fluid"> <div class="row"> <a class="banner" ng-href="{{learnerUi}}/collections/{{banner.marketId}}"> <div class="hidden visible-md visible-lg visible-sm"> <img ng-src="{{banner.img}}" alt="{{banner.alt}}"> </div> <div class="hidden visible-xs"> <img ng-src="{{banner.imgSm}}" alt="{{banner.alt}}"> </div> </a> </div> </div> <!-- Collection --> <div class="container-fluid"> <div class="row featured"> <div class="col-xs-12 text-center"> <h3>FEATURED CONTENT</h3> </div> <div class="col-xs-12"> <div allogy-single-market-hor-scroll all-videos="false" content-array="undefined" market-id="featuredCollectionId" category-id="null"></div> <p class="text-center"> <a ng-href="{{learnerUi}}/collections/{{marketId}}" class="btn btn-tenant btn-lg">View All</a> </p> </div> </div> </div> <div class="container-fluid"> <div class="" id="collectionsSlide"> <div class="col-xs-12 text-center"> <h3>COLLECTIONS</h3> </div> <div class="col-xs-12"> <div class="row"> <div class="featured-collection col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-0 col-md-4 col-lg-4" ng-repeat-start="market in containerMarketArray"> <a ng-href="{{learnerUi}}/collections/{{market.id}}" style="width: 100%"> <div allogy-icon-height-wrapper mixed-content="false"> <span ng-if="market.isPrivate"> <div class="triangle" title="This collection is private and requires registration"> </div> <i class="fa fa-lock" title="This collection is private and requires registration"></i> </span> <img allogy-icon-representations icon-content="market" class="img-responsive"> </div> </a> </div> <div ng-if="($index + 1) % 2 === 0" class="clearfix visible-sm hidden-md"></div> <div ng-repeat-end ng-if="($index + 1) % 3 === 0" class="clearfix visible-md"></div> </div> </div> </div> </div> <!-- App Stores --> <ng-include src="\'views/appstores.html\'"></ng-include> <!-- ASM JTS --> <div class="container-fluid"> <div class="row channels" id="asmTraining"> <div class="col-xs-12"> <img src="images/asm-training/DHA-lockup.png" alt="" class="asm-dha-trauma img-responsive"> <h3 class="yelling-title">TRIALING INNOVATIVE LEARNING TO IMPROVE MEDICAL READINESS</h3> </div> </div> </div> <!-- About --> <ng-include src="\'views/about.html\'"></ng-include>
3 <!-- Instructors --> <div class="container-fluid"> <div class="row instructor" id="instructor"> <div class="col-sm-12 col-lg-offset-2 col-lg-8"> <h2>Are you an Instructor?</h2> <p>Our aim is to support traditional learning and instruction by utilizing the most up to date technology and media.</p> <p>If you are an instructor, we have extensive training materials for you to download and use in your classrooms, whilst also providing guides on how you can use the Deployed Medicine app to support your teaching.</p> </div> <p class="col-sm-12 col-xs-12"> <br> <a class="btn btn-tenant" ui-sref="instructors">Visit Instructor\'s Area</a> </p> <br> </div> </div> <!-- Contribute --> <ng-include src="\'views/contribute.html\'"></ng-include> </div> <script type="text/ng-template" id="carousel-template.html"><div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()">\n <div class="carousel-inner" ng-transclude></div>\n <a role="button" href class="left carousel-control" ng-click="prev()" ng-show="slides.length > 1">\n <!-- <span aria-hidden="true" class="glyphicon glyphicon-chevron-left custom"></span> -->\n <i class="fa fa-chevron-left" aria-hidden="true"></i>\n <span class="sr-only">previous</span>\n </a>\n <a role="button" href class="right carousel-control" ng-click="next()" ng-show="slides.length > 1">\n <!-- <span aria-hidden="true" class="glyphicon glyphicon-chevron-right custom"></span> -->\n <i class="fa fa-chevron-right" aria-hidden="true"></i>\n <span class="sr-only">next</span>\n </a>\n <ol class="carousel-indicators" ng-show="slides.length > 1">\n <li ng-repeat="slide in slides | orderBy:indexOfSlide track by $index" ng-class="{ active: isActive(slide) }" ng-click="select(slide)">\n <span class="sr-only">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if="isActive(slide)">, currently active</span></span>\n </li>\n </ol>\n </div></script>'),a.put("views/privacy_policy.html",'<div id="privacyPolicy" class="container-fluid"> <div class="row"> <div class="col-xs-12 col-sm-10 col-sm-offset-1"> <h2 class="text-center">Privacy Policy</h2> <p>This privacy policy has been compiled to better serve those who are concerned with how their 'Personally Identifiable Information' (PII) is being used online. PII, as described in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.</p> <h4><strong>FAQ:</strong></h4> <ol> <li><a href="#faq1">What personal information do we collect from the people that visit our websites or app?</a></li> <li><a href="#faq2">When do we collect information?</a></li> <li><a href="#faq3">How do we use your information?</a></li> <li><a href="#faq4">How do we protect your information?</a></li> <li><a href="#faq5">Do we use 'cookies'?</a></li> <li><a href="#faq6">Does our site allow third-party behavioral tracking?</a></li> </ol> <hr> <h3 id="faq1">What personal information do we collect from the people that visit our websites or app?</h3> <p>When registering on our site or app, as appropriate, you may be asked to enter your name, email address or other details to help you with your experience.</p> <hr> <h3 id="faq2">When do we collect information?</h3> <p>We collect information from you when you register on our site or app, place an order or enter information on our site or app.</p> <hr> <h3 id="faq3">How do we use your information?</h3> <p>We may use the information we collect from you when you register, view learning content, sign up for our newsletter, respond to a survey or marketing communication, surf the website or app, or use certain other features in the following ways:</p> <ul> <li>To record your learning experiences to help you earn certifications, maintain proficiency, and communicate with your team.</li> <li>To personalize your experience and to allow us to deliver the type of content and product offerings in which you are most interested.</li> <li>To improve our website and app in order to better serve you.</li> <li>To ask for ratings and reviews of services or products</li> <li>To follow up with you after correspondence.</li> </ul> <hr> <h3 id="faq4">How do we protect your information?</h3> <p>Our service are scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. We use regular Malware Scanning.</p> <p>Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.</p> <p>We implement a variety of security measures when a user enters, submits, or accesses their information to maintain the safety of your personal information.</p> <p>All transactions are processed through a gateway provider and are not stored or processed on our servers.</p> <hr> <h3 id="faq5">Do we use 'cookies'?</h3> <p> Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow) that enables the site's or service provider's systems to recognize your browser and capture and remember certain information. They are also used to help us understand your preferences based on previous or current site activity, which enables us to provide you with improved services. We also use cookies to help us compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future.</p> <p>We use cookies to:</p> <ul> <li>Understand and save user's preferences for future visits.</li> <li>Compile aggregate data about site traffic and site interactions in order to offer better site experiences and tools in the future. We may al
3so use trusted third-party services that track this information on our behalf.</li> </ul> <p>You can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn off all cookies. You do this through your browser settings. Since each browser is a little different, look at your browser's Help Menu to learn the correct way to modify your cookies.</p> <p>If users disable cookies in their browser:</p> <p>If you turn cookies off, some of the features that make your site experience more efficient may not function properly.</p> <hr> <h3 id="faq6">Third-party disclosure</h3> <p>We do not sell, trade, or otherwise transfer to outside parties your Personally Identifiable Information unless we provide users with advance notice. This does not include website hosting partners and other parties who assist us in operating our website, conducting our business, or serving our users, so long as those parties agree to keep this information confidential. We may also release information when it's release is appropriate to comply with the law, enforce our site policies, or protect ours or others' rights, property or safety.</p> <p>However, non-personally identifiable visitor information may be provided to other parties for marketing, advertising, or other uses.</p> <hr> <h3 id="">Third-party links</h3> <p>We do not include or offer third-party products or services on our website.</p> <hr> <h3 id="">California Online Privacy Protection Act</h3> <p>CalOPPA is the first state law in the nation to require commercial websites and online services to post a privacy policy. The law's reach stretches well beyond California to require any person or company in the United States (and conceivably the world) that operates websites collecting Personally Identifiable Information from California consumers to post a conspicuous privacy policy on its website stating exactly the information being collected and those individuals or companies with whom it is being shared. - See more at: <a href="http://consumercal.org/california-online-privacy-protection-act-caloppa/#sthash.0FdRbT51.dpuf">http://consumercal.org/california-online-privacy-protection-act-caloppa/#sthash.0FdRbT51.dpuf</a></p> <p>According to CalOPPA, we agree to the following:</p> <ul> <li>Users can visit our site anonymously.</li> <li>Once this privacy policy is created, we will add a link to it on our home page or as a minimum, on the first significant page after entering our website.</li> <li>Our Privacy Policy link includes the word 'Privacy' and can easily be found on the page specified above.</li> </ul> <p>You will be notified of any Privacy Policy changes:</p> <ul> <li>On our Privacy Policy Page</li> </ul> <p>You can change your personal information:</p> <ul> <li>By logging in to your account</li> </ul> <hr> <h3 id="">Does our site allow third-party behavioral tracking?</h3> <p>It's also important to note that we allow third-party behavioral tracking as described above.</p> <hr> <h3 id="">COPPA (Children Online Privacy Protection Act)</h3> <p>When it comes to the collection of personal information from children under the age of 13 years old, the Children's Online Privacy Protection Act (COPPA) puts parents in control. The Federal Trade Commission, United States' consumer protection agency, enforces the COPPA Rule, which spells out what operators of websites and online services must do to protect children's privacy and safety online.</p> <p>We do not specifically market to children under the age of 13 years old.</p> <hr> <h3 id="">Fair Information Practices</h3> <p>The Fair Information Practices Principles form the backbone of privacy law in the United States and the concepts they include have played a significant role in the development of data protection laws around the globe. Understanding the Fair Information Practice Principles and how they should be implemented is critical to comply with the various privacy laws that protect personal information. In order to be in line with Fair Information Practices we will take the following responsive action, should a data breach occur:</p> <p>We will notify you via email</p> <ul> <li>Within 7 business days</li> </ul> <p>We also agree to the Individual Redress Principle which requires that individuals have the right to legally pursue enforceable rights against data collectors and processors who fail to adhere to the law. This principle requires not only that individuals have enforceable rights against data users, but also that individuals have recourse to courts or government agencies to investigate and/or prosecute non-compliance by data processors.</p> <hr> <h3 id="">CAN SPAM Act</h3> <p>The CAN-SPAM Act is a law that sets the rules for commercial email, establishes requirements for commercial messages, gives recipients the right to have emails stopped from being sent to them, and spells out tough penalties for violations. We collect your email address in order to:</p> <ul> <li>Send information, respond to inquiries, and/or other requests or questions</li> <li>Market to our mailing list or continue to send emails to our clients after the original transaction has occurred.</li> </ul> <p>To be in accordance with CANSPAM, we agree to the following:</p> <ul> <li>Not use false or misleading subjects or email addresses.</li> <li>Identify the message as an advertisement in some reasonable way.</li> <li>Include the physical address of our business or site headquarters.</li> <li>Monitor third-party email marketing services for compliance, if one is used.</li> <li>Honor opt-out/unsubscribe requests quickly.</li> <li>Allow users to unsubscribe by using the link at the bottom of each email.</li> </ul> <p>If at any time you would like to unsubscribe from receiving future emails, you can email us by following the instructions at the bottom of each email, and we will promptly remove you from ALL correspondence.</p> <hr> <h3 id="">Contacting Us</h3> <p>If there are any questions regarding this privacy policy, you may contact us using the information below.</p> <p><a href="http://allogy.com/">http://allogy.com/</a></p> <address> <strong>Allogy</strong><br>
3 <a href="mailto:[email protected]">[email protected]</a> </address> <p>Last Edited on 2017-06-28</p> </div> </div> </div> <ng-include src="\'views/contribute.html\'"></ng-include>'),a.put("views/usg_user_agreement.html",'<div id="usgUserAgreement" class="container-fluid"> <div class="row"> <div class="col-xs-12 col-sm-10 col-sm-offset-1"> <h2 class="text-center">User Agreement</h2> <p>Deployed Medicine is provided as a service by the Defense Health Agency. Information presented on this service is protected by Creative Commons License and may not be distributed or copied for profit. The appearance of external hyperlinks does not constitute endorsement by the United States, Department of Defense, or Defense Health Agency of the linked websites or the information, products, or services contained therein. The DoD does not exercise any editorial control over the information found at these external locations.</p> <p>Section 6311 of title 5, United States Code (general) and DoDI 5400.1-R and the DHA PGI 224 authorize the collection of Personally Identifiable Information (PII) for service provision and Medical Readiness Training data management IAW DoDI 1322.24, Medical Readiness Training (MRT).</p> <p>This application and its related services use software programs to create summary statistics used to identify accounts, devices, and browsers to allow Deployed Medicineâs technical operations to maintain user accounts and associate your actions with your identity. This information also allows tracking of learner records and training performance, and contributes to usage analytics, determining technical design specifications, and identifying system performance or problem areas.</p> <p>Deployed Medicine uses "<u>cookies</u>" to store personal data on your computer. We may also link information stored on your computer in cookies with personal data about specific individuals stored on our servers. If you set up your web browser (for example, Chrome, Internet Explorer or Firefox) so that cookies are not allowed, you might not be able to use some or all of the features of our website(s) and services.</p> <p>The DoD does not use the information associated with individual Deployed Medicine accounts to track individual user activity on the internet, and shall not disclose any PII outside the Department of Defense except to Federal, State, or local law enforcement agencies when your agency becomes aware of a violation or possible violation of civil or criminal law; to a Federal agency during investigations for employment or security reasons; to the Office of Personnel Management (OPM); or the General Services Administration in connection with its responsibilities for records management.</p> <p>Providing PII is voluntary, however, users who do not wish to provide requested PII will not be able to create an account or register for classes on Deployed Medicine. This may delay their scheduled training.</p> <p>By signing up for an account with Deployed Medicine, the user provides consent to the collection of PII IAW this privacy notice. A signature is not required.</p> <p>Any use of, or attempted use of a Deployed Medicine account to upload unauthorized information, modify information, or access restricted system areas are strictly prohibited and may be punishable under the Computer Fraud and Abuse Act of 1987 and the National Information Infrastructure Protection Act (Section 1030 of Title 18, United States Code).</p> <p>To receive a written copy of this Privacy Act Statement, please send your request to <a href="mailto:[email protected]?subject=Privacy Statement Request">[email protected]</a> Subject: Privacy Statement Request. Additional privacy policy detail is also available at <a ui-sref="privacy">https://deployedmedicine.com/privacy</a>.</p> <p>Last Modified: 2021-12-06</p> </div> </div> </div>')}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.