UNPKG

consumerportal

Version:

mydna Custimised for you

144 lines (124 loc) 5.5 kB
/// <reference path="../../includes.ts" /> module app { import IUser = services.IUser; import SportsWorkoutCombined = services.SportsWorkoutCombined; import SportsWorkoutExercise = services.SportsWorkoutExercise; class Controller { static $inject = [ '$scope', '$sce', 'sportsService', 'user' ]; public details: any; public selected: any; public loaded: boolean = false; public days: string[] = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; public dayIndex: number = -1; public diary: any; public day: SportsWorkoutCombined; public dayDescription: string; public sessionTabs: any[]; public exerciseTabs: any[]; public exerciseTabValue: string = 'exercises'; public sessionTabValue: number = 0; public session: SportsWorkoutExercise[]; public exercise: SportsWorkoutExercise; public warmup: SportsWorkoutCombined; public cooldown: SportsWorkoutCombined; public video: string; public navigation: any[] = this.sportsService.navigation(); constructor( private $scope: angular.IScope, private $sce: angular.ISCEService, private sportsService: services.ISportsService, public user: IUser ) { $scope.$on('sportsMetricsChanged', (ev: any, details: any) => { this.details = details; this.diary = this.sportsService.diaryForCurrentMetrics(); this.draw(); }); $scope.$on('selectDay', (ev: any, index: number) => { this.dayIndex = index; this.diary = this.sportsService.diaryForCurrentMetrics(); this.draw(); }); $scope.$on('changeSessionEvent', (ev: any, tab: any) => { this.sessionTabValue = tab.value; this.draw(); }); $scope.$on('changeExerciseEvent', (ev: any, tab: any) => { this.exerciseTabValue = tab.value; }); sportsService.details().then((value: any) => { this.details = value; this.warmup = this.sportsService.warmupForCurrentMetrics(); this.cooldown = this.sportsService.cooldownForCurrentMetrics(); this.navigation = this.sportsService.navigation(); this.loaded = true; }); } draw() { this.diary = this.diary || this.sportsService.diaryForCurrentMetrics(); this.day = this.diary[this.dayIndex]; this.sessionTabs = []; if (this.day.sessions) { this.day.sessions.forEach((s: SportsWorkoutExercise[], index: number) => { this.sessionTabs.push({value: index, label: 'Session ' + (index+ 1)}); }); } if (['rest', 'recovery'].indexOf(this.day.key) === -1) { this.exerciseTabs = [ { value: 'warmup', label: 'Warm Up'}, { value: 'exercises', label: 'Exercises'}, { value: 'cooldown', label: 'Cool Down'} ]; } else { this.exerciseTabs = [ { value: 'exercises', label: 'Exercises'} ]; } this.exerciseTabValue = 'exercises'; if (this.sessionTabValue >= this.day.sessions.length) { this.sessionTabValue = 0; } this.session = this.day.sessions[this.sessionTabValue]; if (this.day.description) { this.dayDescription = this.$sce.trustAsHtml( this.day.description .replace(/\{\{reps\}\}/g, this.day.reps ? this.day.reps.toString(10) : '') .replace('{{sets}}', this.day.sets ? this.day.sets.toString(10) : '') .replace('{{difficulty}}', this.day.difficulty ? this.day.difficulty.toString(10) : '') .replace('{{rest}}', this.day.rest ? this.day.rest.toString(10) : '') .replace('{{totalrest}}', this.day.totalrest ? this.day.totalrest.toString(10) : '') .replace('{{totalreps}}', this.day.totalreps ? this.day.totalreps.toString(10) : '') ); } else { this.dayDescription = ''; } } exerciseImage(loc: string) { if (loc) { if (loc.indexOf('.') > -1) { return 'url(' + loc + ')' } else { return 'url(https://i.vimeocdn.com/video/' + loc + '_640.jpg)' } } return ''; } viewVideo(exercise: SportsWorkoutExercise) { if (exercise.video.length) { this.video = this.$sce.trustAsResourceUrl('https://player.vimeo.com/video/' + exercise.video + '?autoplay=1&loop=1'); this.exercise = exercise; } } closeVideo() { this.exercise = null; } } angular .module('app') .controller('sportsTrainingCtrl', Controller); }