consumerportal
Version:
mydna Custimised for you
144 lines (124 loc) • 5.5 kB
text/typescript
/// <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);
}