{"version":3,"sources":["main.js","app.module.js","check-in/checkIn.module.js","comments/comments.module.js","check-in-event/checkInEvent.module.js","check-in-presentation/checkInPresentation.module.js","errors/errors.module.js","game/game.module.js","layout/layout.module.js","logger/logger.module.js","exception/exception.module.js","logo-screen/logoScreen.module.js","pause-screen/pauseScreen.module.js","questions/questions.module.js","rating/rating.module.js","quiz/quiz.module.js","redirect/redirect.module.js","scoreboard/scoreboard.module.js","seeker/seeker.module.js","slide-show/slideShow.module.js","top-scores/topScores.module.js","voting/voting.module.js","vimeo/vimeo.module.js","app/app.config.js","app/app.controller.js","app/app.route.js","app/app.run.js","check-in/checkIn.factory.js","check-in/checkIn.index.controller.js","check-in/checkIn.route.js","comments/comments.factory.js","comments/comments.index.controller.js","comments/comments.route.js","check-in-event/checkInEvent.factory.js","check-in-event/checkInEvent.index.controller.js","check-in-event/checkInEvent.route.js","check-in-presentation/checkInPresentation.factory.js","check-in-presentation/checkInPresentation.index.controller.js","check-in-presentation/checkInPresentation.route.js","errors/errors.controller.js","errors/errors.route.js","game/game.factory.js","game/game.index.controller.js","game/game.route.js","logger/logger.factory.js","exception/exception.factory.js","logo-screen/logoScreen.factory.js","logo-screen/logoScreen.index.controller.js","logo-screen/logoScreen.route.js","pause-screen/pauseScreen.factory.js","pause-screen/pauseScreen.index.controller.js","pause-screen/pauseScreen.route.js","questions/questions.factory.js","questions/questions.index.controller.js","questions/questions.route.js","rating/rating.factory.js","rating/rating.index.controller.js","rating/rating.route.js","quiz/quiz.factory.js","quiz/quiz.index.controller.js","quiz/quiz.route.js","redirect/redirect.factory.js","redirect/redirect.index.controller.js","redirect/redirect.route.js","scoreboard/scoreboard.factory.js","scoreboard/scoreboard.index.controller.js","scoreboard/scoreboard.route.js","seeker/seeker.factory.js","seeker/seeker.index.controller.js","seeker/seeker.route.js","slide-show/slideShow.factory.js","slide-show/slideShow.index.controller.js","slide-show/slideShow.route.js","top-scores/topScores.factory.js","top-scores/topScores.individual.controller.js","top-scores/topScores.route.js","top-scores/topScores.team.controller.js","voting/voting.factory.js","voting/voting.index.controller.js","voting/voting.route.js","vimeo/vimeo.directive.js","vimeo/vimeo.factory.js","app/directives/app.a.directive.js","app/directives/app.anchor-scroll.directive.js","app/directives/app.animate-on-load-list.directive.js","app/directives/app.animate-on-load.directive.js","app/directives/app.height.directive.js","app/directives/app.preloader.directive.js","app/factories/app.assets.factory.js","app/factories/app.helpers.factory.js","app/factories/app.settings.factory.js","app/factories/app.translations.factory.js","app/filters/app.comma-to-dot.filter.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"main.js","sourcesContent":["var viewPort;\r\n\r\n/**\r\n * Ready\r\n */\r\n$(function() {\r\n viewPort = getCurrentViewPort();\r\n});\r\n\r\n/**\r\n * Resize window\r\n */\r\n$(window).resize(function() {\r\n var oldViewPort = viewPort;\r\n viewPort = getCurrentViewPort();\r\n\r\n if (oldViewPort != viewPort) {\r\n $.event.trigger({\r\n type: \"viewPortChange\",\r\n viewPort: viewPort,\r\n oldViewPort: oldViewPort\r\n });\r\n }\r\n});\r\n\r\n/**\r\n * Get current view port\r\n *\r\n * @returns {*}\r\n */\r\nfunction getCurrentViewPort() {\r\n var viewPortWidth;\r\n\r\n if (typeof window.innerWidth != \"undefined\") {\r\n viewPortWidth = window.innerWidth;\r\n } else {\r\n viewPortWidth = $(\"body\").outerWidth();\r\n }\r\n\r\n if (viewPortWidth < 768) {\r\n return \"xs\";\r\n } else if (viewPortWidth >= 768 && viewPortWidth < 992) {\r\n return \"sm\";\r\n } else if (viewPortWidth >= 992 && viewPortWidth < 1200) {\r\n return \"md\";\r\n } else {\r\n return \"lg\";\r\n }\r\n}\r\n","/**\r\n * App module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\", [\r\n \"ngAnimate\",\r\n \"ngCookies\",\r\n \"ngSanitize\",\r\n \"restangular\",\r\n \"ui.router\",\r\n \"ui.bootstrap\",\r\n \"oc.lazyLoad\",\r\n \"LocalStorageModule\",\r\n \"timer\",\r\n \"angularMoment\",\r\n \"pusher-angular\",\r\n \"app.exception\",\r\n \"app.logger\",\r\n \"app.vimeo\",\r\n \"app.scoreboard\",\r\n \"app.game\",\r\n \"app.checkIn\",\r\n \"app.checkInEvent\",\r\n \"app.checkInPresentation\",\r\n \"app.comments\",\r\n \"app.logoScreen\",\r\n \"app.pauseScreen\",\r\n \"app.quiz\",\r\n \"app.rating\",\r\n \"app.seeker\",\r\n \"app.topScores\",\r\n \"app.voting\",\r\n \"app.questions\",\r\n \"app.slideShow\",\r\n \"app.errors\",\r\n \"app.redirect\"\r\n ]);\r\n})();\r\n","/**\r\n * Check in module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkIn\", []);\r\n})();\r\n","/**\r\n * Comments module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.comments\", []);\r\n})();\r\n","/**\r\n * Check in event module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkInEvent\", []);\r\n})();\r\n","/**\r\n * Check in presentation module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkInPresentation\", []);\r\n})();\r\n","/**\r\n * Errors module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.errors\", []);\r\n})();\r\n","/**\r\n * Game module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.game\", []);\r\n})();\r\n","/**\r\n * Layout module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.layout\", []);\r\n})();\r\n","/**\r\n * Logger module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.logger\", []);\r\n})();\r\n","/**\r\n * Exception module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.exception\", []);\r\n})();\r\n","/**\r\n * Logo screen module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.logoScreen\", []);\r\n})();\r\n","/**\r\n * Pause screen module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.pauseScreen\", []);\r\n})();\r\n","/**\r\n * Questions module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.questions\", []);\r\n})();\r\n","/**\r\n * Rating module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.rating\", []);\r\n})();\r\n","/**\r\n * Quiz module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.quiz\", []);\r\n})();\r\n","/**\r\n * Redirect module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.redirect\", []);\r\n})();\r\n","/**\r\n * Questions module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.scoreboard\", []);\r\n})();\r\n","/**\r\n * Seeker module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.seeker\", []);\r\n})();\r\n","/**\r\n * Slide show module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module('app.slideShow', []).config(function($sceDelegateProvider) {\r\n $sceDelegateProvider.resourceUrlWhitelist([\r\n // Allow same origin resource loads.\r\n 'self',\r\n // Allow loading from our asset's domain. **.\r\n 'https://player.vimeo.com/**'\r\n ]);\r\n });\r\n})();\r\n","/**\r\n * Top scores module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.topScores\", []);\r\n})();\r\n","/**\r\n * Voting module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.voting\", []);\r\n})();\r\n","/**\r\n * Vimeo module.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.vimeo\", []);\r\n})();\r\n","/**\r\n * App config.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").config(configure);\r\n\r\n configure.$inject = [\r\n \"$stateProvider\",\r\n \"$urlRouterProvider\",\r\n \"$ocLazyLoadProvider\",\r\n \"RestangularProvider\",\r\n \"localStorageServiceProvider\",\r\n \"config\"\r\n ];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n * @param $urlRouterProvider\r\n * @param $ocLazyLoadProvider\r\n * @param RestangularProvider\r\n * @param localStorageServiceProvider\r\n * @param config\r\n */\r\n function configure(\r\n $stateProvider,\r\n $urlRouterProvider,\r\n $ocLazyLoadProvider,\r\n RestangularProvider,\r\n localStorageServiceProvider,\r\n config\r\n ) {\r\n /**\r\n * Restangular\r\n */\r\n RestangularProvider.setBaseUrl(config.apiUrl);\r\n\r\n /**\r\n * Local storage provider\r\n */\r\n localStorageServiceProvider\r\n .setPrefix(\"Scoreboard\")\r\n .setStorageType(\"localStorage\")\r\n .setNotify(true, true);\r\n\r\n /**\r\n * Lazy load resources.\r\n */\r\n $ocLazyLoadProvider.config({\r\n cssFilesInsertBefore: \"ng_load_plugins_before\"\r\n });\r\n\r\n /**\r\n * Unmatched URL.\r\n */\r\n $urlRouterProvider.otherwise(\"/errors/404\");\r\n }\r\n})();\r\n","(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").controller(\"AppController\", AppController);\r\n\r\n AppController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$state\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$window\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"config\",\r\n \"localStorageService\",\r\n \"settingsService\",\r\n \"assetsService\",\r\n \"translationsService\",\r\n \"settingsFactory\",\r\n \"assetsFactory\",\r\n \"translationsFactory\",\r\n \"helpersFactory\",\r\n \"redirectFactory\",\r\n ];\r\n\r\n /**\r\n * App controller.\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $state\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $window\r\n * @param $timeout\r\n * @param $pusher\r\n * @param config\r\n * @param localStorageService\r\n * @param settingsService\r\n * @param assetsService\r\n * @param translationsService\r\n * @param settingsFactory\r\n * @param assetsFactory\r\n * @param translationsFactory\r\n * @param helpersFactory\r\n * @param redirectFactory\r\n * @constructor\r\n */\r\n function AppController(\r\n $rootScope,\r\n $scope,\r\n $state,\r\n $stateParams,\r\n $interval,\r\n $window,\r\n $timeout,\r\n $pusher,\r\n config,\r\n localStorageService,\r\n settingsService,\r\n assetsService,\r\n translationsService,\r\n settingsFactory,\r\n assetsFactory,\r\n translationsFactory,\r\n helpersFactory,\r\n redirectFactory\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n vm.settings = {};\r\n vm.assets = {};\r\n vm.translations = {};\r\n vm.keywords = {};\r\n vm.options = {\r\n show_all: 0,\r\n rand: Math.random()\r\n };\r\n vm.showAll = 0;\r\n vm.index = index;\r\n vm.getSettings = getSettings;\r\n vm.getAssets = getAssets;\r\n vm.getTranslations = getTranslations;\r\n vm.getSettingsService = getSettingsService;\r\n vm.getAssetsService = getAssetsService;\r\n vm.getTranslationsService = getTranslationsService;\r\n vm.inIframe = inIframe;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.redirectToModule = redirectToModule;\r\n vm.updateShowAll = updateShowAll;\r\n\r\n /**\r\n * Index.\r\n */\r\n vm.index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getSettingsService(settingsService);\r\n vm.getAssetsService(assetsService);\r\n vm.getTranslationsService(translationsService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get settings.\r\n */\r\n function getSettings() {\r\n vm.options.rand = Math.random();\r\n\r\n return settingsFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getSettingsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get assets.\r\n */\r\n function getAssets() {\r\n vm.options.rand = Math.random();\r\n\r\n return assetsFactory.index(vm.options, $stateParams).then(function(data) {\r\n return vm.getAssetsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get translations.\r\n */\r\n function getTranslations() {\r\n vm.options.rand = Math.random();\r\n\r\n return translationsFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getTranslationsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get settings service.\r\n *\r\n * @param data\r\n */\r\n function getSettingsService(data) {\r\n vm.settings = data;\r\n\r\n vm.showAll = Number(vm.settings.show_all);\r\n\r\n /**\r\n * Add settings to root scope.\r\n */\r\n $rootScope.settings = vm.settings;\r\n\r\n return vm.settings;\r\n }\r\n\r\n /**\r\n * Get assets service.\r\n *\r\n * @param data\r\n */\r\n function getAssetsService(data) {\r\n vm.assets = data.settings;\r\n\r\n /**\r\n * Add assets to scope\r\n *\r\n * @type {{}|*}\r\n */\r\n $scope.assets = vm.assets;\r\n\r\n return vm.assets;\r\n }\r\n\r\n /**\r\n * Get translations service.\r\n *\r\n * @param data\r\n */\r\n function getTranslationsService(data) {\r\n vm.translations = data;\r\n vm.keywords = vm.translations.keywords;\r\n\r\n return vm.translations;\r\n }\r\n\r\n /**\r\n * Redirect to correct module with path.\r\n */\r\n function redirectToModule() {\r\n return redirectFactory.redirect(vm.settings, $state);\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Settings service.\r\n */\r\n vm.getSettings();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval.\r\n */\r\n function getInterval() {\r\n /**\r\n * Settings service\r\n */\r\n vm.getSettings();\r\n }\r\n\r\n /**\r\n * In iframe.\r\n */\r\n function inIframe() {\r\n try {\r\n return (\r\n window.self !== window.top &&\r\n window.frameElement.className === \"scoreboard-iframe\"\r\n );\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n // /**\r\n // * Cancel interval.\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n\r\n /**\r\n * Watch module_alias for non-special modules.\r\n */\r\n $scope.$watch(\r\n \"vm.settings\",\r\n function(newValue, oldValue) {\r\n /**\r\n * Check if any data that triggers a redirect changed.\r\n *\r\n * @type {boolean}\r\n */\r\n var shouldRedirect =\r\n $state.current.url !== \"/scoreboard\" &&\r\n $state.current.url !== \"/game\" &&\r\n !vm.inIframe() &&\r\n (newValue.module_alias !== oldValue.module_alias ||\r\n newValue.presentation_id !== oldValue.presentation_id ||\r\n newValue.points_category_alias !== oldValue.points_category_alias ||\r\n newValue.question_id !== oldValue.question_id ||\r\n newValue.is_screen_paused !== oldValue.is_screen_paused ||\r\n newValue.screen_pause_type !== oldValue.screen_pause_type);\r\n\r\n if (shouldRedirect) {\r\n vm.redirectToModule();\r\n }\r\n },\r\n true\r\n );\r\n\r\n /**\r\n * Mobile view.\r\n */\r\n $scope.mobileView = 767;\r\n\r\n /**\r\n * App.\r\n */\r\n $scope.app = {\r\n name: \"Scoreboard\",\r\n author: \"Dorin Niscu\",\r\n version: \"1.0.0\",\r\n layout: {}\r\n };\r\n\r\n /**\r\n * Get / Set app layout.\r\n */\r\n if (localStorageService.get(\"layout\")) {\r\n $scope.app.layout = localStorageService.get(\"layout\");\r\n } else {\r\n localStorageService.set(\"layout\", $scope.app.layout);\r\n }\r\n\r\n /**\r\n * Watch app layout.\r\n */\r\n $scope.$watch(\r\n \"app.layout\",\r\n function() {\r\n localStorageService.set(\"layout\", $scope.app.layout);\r\n },\r\n true\r\n );\r\n\r\n /**\r\n * View content loaded.\r\n */\r\n $scope.$on(\"$viewContentLoaded\", function(event) {\r\n /**\r\n * Init.\r\n */\r\n helpersFactory.init();\r\n\r\n /**\r\n * Page load.\r\n */\r\n angular.element(\".page-load\").fadeOut(1500);\r\n\r\n $timeout(function() {\r\n helpersFactory.scalePage($stateParams);\r\n });\r\n\r\n angular.element($window).bind(\"resize\", function() {\r\n helpersFactory.scalePage($stateParams);\r\n });\r\n });\r\n\r\n /**\r\n * Add version.\r\n *\r\n * @param value\r\n * @param random\r\n */\r\n $scope.addVersion = function(value, random) {\r\n return angular.isUndefined(value)\r\n ? \"\"\r\n : helpersFactory.addVersion(value, random);\r\n };\r\n\r\n /**\r\n * Update show all.\r\n * @returns {*}\r\n */\r\n function updateShowAll() {\r\n vm.showAll = Number(!vm.showAll);\r\n\r\n vm.options.rand = Math.random();\r\n vm.options.show_all = vm.showAll;\r\n\r\n return settingsFactory.updateShowAll(vm.options, $stateParams);\r\n }\r\n }\r\n})();\r\n","/**\r\n * App routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n settingsService.$inject = [\"settingsFactory\", \"$stateParams\"];\r\n assetsService.$inject = [\"assetsFactory\", \"$stateParams\"];\r\n translationsService.$inject = [\"translationsFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app\", {\r\n abstract: true,\r\n url:\r\n \"/{eid:int}/{sid:int}?nav&scalable&scoreboard&showAll&token&intervalTime&presentationId&slideShowIteration&slideShowDuration\",\r\n templateUrl: \"modules/layout/layout.html\",\r\n controller: \"AppController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n settingsService: settingsService,\r\n assetsService: assetsService,\r\n translationsService: translationsService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Settings service\r\n *\r\n * @param settingsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function settingsService(settingsFactory, $stateParams) {\r\n return settingsFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Assets service\r\n *\r\n * @param assetsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function assetsService(assetsFactory, $stateParams) {\r\n return assetsFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Translations service\r\n *\r\n * @param translationsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function translationsService(translationsFactory, $stateParams) {\r\n return translationsFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * App run.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").run(configure);\r\n\r\n configure.$inject = [\r\n \"$rootScope\",\r\n \"$state\",\r\n \"$stateParams\",\r\n \"$anchorScroll\",\r\n \"settingsFactory\",\r\n \"amMoment\",\r\n \"config\",\r\n ];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $rootScope\r\n * @param $state\r\n * @param $stateParams\r\n * @param $anchorScroll\r\n * @param settingsFactory\r\n * @param amMoment\r\n * @param config\r\n */\r\n function configure(\r\n $rootScope,\r\n $state,\r\n $stateParams,\r\n $anchorScroll,\r\n settingsFactory,\r\n amMoment,\r\n config\r\n ) {\r\n /**\r\n * Access $state from view\r\n */\r\n $rootScope.$state = $state;\r\n\r\n /**\r\n * Access $stateParams from view\r\n */\r\n $rootScope.$stateParams = $stateParams;\r\n\r\n /**\r\n * Access settings factory from view\r\n */\r\n $rootScope.settingsFactory = settingsFactory;\r\n\r\n /**\r\n * Access settings from view\r\n */\r\n $rootScope.settings = {};\r\n\r\n /**\r\n * Disable auto scroll\r\n *\r\n * @type {angular.noop}\r\n */\r\n $anchorScroll = angular.noop;\r\n\r\n /**\r\n * Anchor scroll\r\n *\r\n * @type {number}\r\n */\r\n $anchorScroll.yOffset = 55;\r\n\r\n /**\r\n * State change\r\n */\r\n $rootScope.$on(\"$stateChangeSuccess\", function() {\r\n window.scrollTo(0, 0);\r\n });\r\n\r\n /**\r\n * Events client.\r\n */\r\n $rootScope.eventsClient = new Pusher(config.pusher.key, {\r\n cluster: config.pusher.cluster\r\n });\r\n\r\n /**\r\n * Fast click\r\n */\r\n FastClick.attach(document.body);\r\n\r\n /**\r\n * Angular moment\r\n */\r\n amMoment.changeLocale(\"en\");\r\n }\r\n})();\r\n","/**\r\n * Check in factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkIn\").factory(\"checkInFactory\", checkInFactory);\r\n\r\n checkInFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Check in factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function checkInFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_event_check_in\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Check in index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.checkIn\")\r\n .controller(\"CheckInIndexController\", CheckInIndexController);\r\n\r\n CheckInIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"checkInFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Check in index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param checkInFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function CheckInIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n checkInFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.checkIn = {};\r\n vm.title = \"\";\r\n vm.location = \"\";\r\n vm.countDown = 0;\r\n vm.leftList = [];\r\n vm.rightList = [];\r\n vm.totalCount = 0;\r\n vm.checkedInCount = 0;\r\n vm.showAnswers = false;\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return checkInFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getIndexService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n vm.checkIn = data;\r\n\r\n vm.title = vm.checkIn.presentation ? vm.checkIn.presentation.title : '';\r\n vm.location = vm.checkIn.presentation ? vm.checkIn.presentation.location : '';\r\n vm.countDown =\r\n vm.checkIn.presentation ? (vm.checkIn.presentation.start_time > 0\r\n ? vm.checkIn.presentation.start_time * 1000\r\n : new Date().getTime()) : '';\r\n vm.totalCount = vm.checkIn.count_bookings ? vm.checkIn.count_bookings.total : '';\r\n vm.checkedInCount = vm.checkIn.count_bookings ? vm.checkIn.count_bookings.checked_in : '';\r\n vm.leftList = vm.checkIn.left_bookings;\r\n vm.rightList = vm.checkIn.right_bookings;\r\n vm.showAnswers = vm.checkIn.presentation ? vm.checkIn.presentation.show_answers : '';\r\n\r\n return vm.checkIn;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Check in routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkIn\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"checkInFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.checkIn/index\", {\r\n url: \"/check-in\",\r\n templateUrl: \"modules/check-in/check-in.html\",\r\n data: {\r\n pageTitle: \"Check in\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"CheckInIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param checkInFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(checkInFactory, $stateParams) {\r\n return checkInFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Comments factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.comments\").factory(\"commentsFactory\", commentsFactory);\r\n\r\n commentsFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Comments factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function commentsFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: options.what || \"get_scoreboard_comments\",\r\n showAll: $stateParams.showAll,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Comments index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.comments\")\r\n .controller(\"CommentsIndexController\", CommentsIndexController);\r\n\r\n CommentsIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"commentsFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Comments index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param commentsFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function CommentsIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n commentsFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.comments = {};\r\n vm.title = \"\";\r\n vm.allComments = [];\r\n vm.leftComments = [];\r\n vm.rightComments = [];\r\n vm.countComments = 0;\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.renderItems = renderItems;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return commentsFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getIndexService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n vm.comments = data;\r\n vm.title = vm.comments.presentation_title;\r\n vm.allComments = vm.comments.all_comments;\r\n vm.countComments = vm.comments.number_of_comments;\r\n\r\n vm.renderItems();\r\n\r\n return vm.comments;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n\r\n /**\r\n * Render items\r\n */\r\n function renderItems() {\r\n vm.leftComments = vm.comments.left_comments;\r\n vm.rightComments = vm.comments.right_comments;\r\n }\r\n }\r\n})();\r\n","/**\r\n * Comments routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.comments\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"commentsFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.comments/index\", {\r\n url: \"/comments\",\r\n templateUrl: \"modules/comments/comments.html\",\r\n data: {\r\n pageTitle: \"Comments\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"CommentsIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param commentsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(commentsFactory, $stateParams) {\r\n return commentsFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Check in event factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.checkInEvent\")\r\n .factory(\"checkInEventFactory\", checkInEventFactory);\r\n\r\n checkInEventFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Check in event factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function checkInEventFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_event_check_in\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Check in event index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.checkInEvent\")\r\n .controller(\"CheckInEventIndexController\", CheckInEventIndexController);\r\n\r\n CheckInEventIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"checkInEventFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Check in event index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param checkInEventFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function CheckInEventIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n checkInEventFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.checkIn = {};\r\n vm.title = \"\";\r\n vm.location = \"\";\r\n vm.countDown = 0;\r\n vm.leftList = [];\r\n vm.rightList = [];\r\n vm.totalCount = 0;\r\n vm.checkedInCount = 0;\r\n vm.showAnswers = false;\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return checkInEventFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getIndexService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n vm.checkIn = data;\r\n\r\n vm.title = vm.checkIn.presentation ? vm.checkIn.presentation.title : '';\r\n vm.location = vm.checkIn.presentation ? vm.checkIn.presentation.location : '';\r\n vm.countDown =\r\n vm.checkIn.presentation ? (vm.checkIn.presentation.start_time > 0\r\n ? vm.checkIn.presentation.start_time * 1000\r\n : new Date().getTime()) : '';\r\n vm.totalCount = vm.checkIn.count_bookings ? vm.checkIn.count_bookings.total : '';\r\n vm.checkedInCount = vm.checkIn.count_bookings ? vm.checkIn.count_bookings.checked_in : '';\r\n vm.leftList = vm.checkIn.left_bookings;\r\n vm.rightList = vm.checkIn.right_bookings;\r\n vm.showAnswers = vm.checkIn.presentation ? vm.checkIn.presentation.show_answers : '';\r\n\r\n return vm.checkIn;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Check in event routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkInEvent\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"checkInEventFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.checkInEvent/index\", {\r\n url: \"/check-in-event\",\r\n templateUrl: \"modules/check-in-event/check-in-event.html\",\r\n data: {\r\n pageTitle: \"Check in\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"CheckInEventIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param checkInEventFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(checkInEventFactory, $stateParams) {\r\n return checkInEventFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Check in presentation factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.checkInPresentation\")\r\n .factory(\"checkInPresentationFactory\", checkInPresentationFactory);\r\n\r\n checkInPresentationFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Check in presentation factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function checkInPresentationFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n presentation_id: $stateParams.presentationId,\r\n what: \"get_scoreboard_presentation_check_in\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Check in presentation index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.checkInPresentation\")\r\n .controller(\r\n \"CheckInPresentationIndexController\",\r\n CheckInPresentationIndexController\r\n );\r\n\r\n CheckInPresentationIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"checkInPresentationFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Check in presentation index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param checkInPresentationFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function CheckInPresentationIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n checkInPresentationFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.checkIn = {};\r\n vm.title = \"\";\r\n vm.location = \"\";\r\n vm.countDown = 0;\r\n vm.leftList = [];\r\n vm.rightList = [];\r\n vm.totalCount = 0;\r\n vm.checkedInCount = 0;\r\n vm.showAnswers = false;\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return checkInPresentationFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getIndexService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n vm.checkIn = data;\r\n\r\n vm.title = vm.checkIn.presentation.title;\r\n vm.location = vm.checkIn.presentation.location;\r\n vm.countDown =\r\n vm.checkIn.presentation.start_time > 0\r\n ? vm.checkIn.presentation.start_time * 1000\r\n : new Date().getTime();\r\n vm.totalCount = vm.checkIn.count_bookings.total;\r\n vm.checkedInCount = vm.checkIn.count_bookings.checked_in;\r\n vm.leftList = vm.checkIn.left_bookings;\r\n vm.rightList = vm.checkIn.right_bookings;\r\n vm.showAnswers = vm.checkIn.presentation.show_answers;\r\n\r\n return vm.checkIn;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Check in presentation routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.checkInPresentation\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"checkInPresentationFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.checkInPresentation/index\", {\r\n url: \"/check-in-presentation\",\r\n templateUrl: \"modules/check-in-presentation/check-in-presentation.html\",\r\n data: {\r\n pageTitle: \"Check in\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"CheckInPresentationIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param checkInPresentationFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(checkInPresentationFactory, $stateParams) {\r\n return checkInPresentationFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Errors.\r\n */\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.errors\").controller(\"ErrorsController\", ErrorsController);\r\n\r\n ErrorsController.$inject = [\"$scope\"];\r\n\r\n /**\r\n * Errors controller\r\n *\r\n * @param $scope\r\n * @constructor\r\n */\r\n function ErrorsController($scope) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n }\r\n})();\r\n","/**\r\n * Errors routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.errors\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"errors/404\", {\r\n url: \"/errors/404?nav\",\r\n templateUrl: \"modules/errors/404.html\",\r\n data: {\r\n pageTitle: \"404\",\r\n contentClasses: \"\"\r\n },\r\n controller: \"ErrorsController\",\r\n controllerAs: \"vm\",\r\n resolve: {}\r\n });\r\n }\r\n})();\r\n","/**\r\n * Game factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.game\")\r\n .factory(\"gameFactory\", gameFactory);\r\n\r\n gameFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Game factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{presentationModules: presentationModules, updateScreenData: updateScreenData}}\r\n */\r\n function gameFactory(Restangular, exception) {\r\n return {\r\n scoreboardScreens: scoreboardScreens,\r\n scoreboardPresentations: scoreboardPresentations,\r\n scoreboardPresentationModules: scoreboardPresentationModules,\r\n presentationModules: presentationModules,\r\n updateScreenData: updateScreenData,\r\n updateScreenModule: updateScreenModule,\r\n updateGameDuration: updateGameDuration,\r\n updateCommentActive: updateCommentActive,\r\n updateCommentFavorite: updateCommentFavorite,\r\n moduleItems: moduleItems\r\n };\r\n\r\n /**\r\n * Scoreboard screens\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardScreens(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_scoreboard_screens\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Scoreboard presentations\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardPresentations(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_scoreboard_presentations\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Scoreboard presentation modules\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardPresentationModules(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_scoreboard_presentation_modules\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Presentation modules\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function presentationModules(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_presentation_modules\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Module items\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function moduleItems(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_module_items\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Update screen data\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function updateScreenData(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"update_screen_data\",\r\n module_alias: options.module_alias,\r\n point_category_id: options.point_category_id,\r\n question_id: options.question_id,\r\n is_screen_paused: options.is_screen_paused,\r\n screen_pause_type: options.screen_pause_type,\r\n show_all: options.show_all,\r\n slide_show_filter: options.slide_show_filter,\r\n slide_show_duration: options.slide_show_duration,\r\n 'results_modules[]': options.results_modules.toString(),\r\n results_duration: options.results_duration,\r\n game_duration: options.game_duration,\r\n game_duration_action: options.game_duration_action,\r\n comments_filter: options.comments_filter,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Update screen module\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function updateScreenModule(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"update_screen_module\",\r\n module_alias: options.module_alias,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Update game duration\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function updateGameDuration(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"update_game_duration\",\r\n game_duration: options.game_duration,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Update comment active\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function updateCommentActive(options, $stateParams) {\r\n console.log(options);\r\n\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"update_game_comments_active\",\r\n instance_id: options.instance_id,\r\n active: options.active,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Update comment favorite\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function updateCommentFavorite(options, $stateParams) {\r\n console.log(options);\r\n\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"update_game_comments_favorite\",\r\n instance_id: options.instance_id,\r\n favorite: options.favorite,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Game index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.game\")\r\n .controller(\"GameIndexController\", GameIndexController);\r\n\r\n GameIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$state\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"$window\",\r\n \"$location\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsService\",\r\n \"scoreboardScreensService\",\r\n \"scoreboardPresentationsService\",\r\n \"scoreboardCommentsService\",\r\n \"settingsFactory\",\r\n \"redirectFactory\",\r\n \"commentsFactory\",\r\n \"gameFactory\"\r\n ];\r\n\r\n /**\r\n * Game index controller.\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $state\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param $window\r\n * @param $location\r\n * @param logger\r\n * @param config\r\n * @param settingsService\r\n * @param scoreboardScreensService\r\n * @param scoreboardPresentationsService\r\n * @param scoreboardCommentsService\r\n * @param settingsFactory\r\n * @param redirectFactory\r\n * @param commentsFactory\r\n * @param gameFactory\r\n *\r\n * @constructor\r\n */\r\n function GameIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $state,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n $window,\r\n $location,\r\n logger,\r\n config,\r\n settingsService,\r\n scoreboardScreensService,\r\n scoreboardPresentationsService,\r\n scoreboardCommentsService,\r\n settingsFactory,\r\n redirectFactory,\r\n commentsFactory,\r\n gameFactory\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.options = {\r\n module_alias: \"\",\r\n module_url: \"\",\r\n point_category_id: \"\",\r\n points_category_alias: {\r\n scoreboard_user: \"\",\r\n scoreboard_team: \"\"\r\n },\r\n question_id: \"\",\r\n is_screen_paused: \"\",\r\n screen_pause_type: \"\",\r\n show_all: 0,\r\n slide_show_filter: \"\",\r\n slide_show_duration: \"\",\r\n results_modules: \"\",\r\n results_duration: \"\",\r\n game_duration: \"\",\r\n game_current_date_time: \"\",\r\n game_started_at: \"\",\r\n game_ended_at: \"\",\r\n game_paused_at: \"\",\r\n game_started: false,\r\n game_ended: false,\r\n game_paused: false,\r\n game_duration_left: \"\",\r\n comments_filter: \"\",\r\n rand: Math.random()\r\n };\r\n vm.settings = {};\r\n vm.modules = {};\r\n vm.allComments = [];\r\n vm.countComments = 0;\r\n vm.index = index;\r\n vm.getSettings = getSettings;\r\n vm.getScoreboardScreensService = getScoreboardScreensService;\r\n vm.getScoreboardPresentationsService = getScoreboardPresentationsService;\r\n vm.getPresentationModules = getPresentationModules;\r\n vm.getSettingsService = getSettingsService;\r\n vm.getPresentationModulesService = getPresentationModulesService;\r\n vm.getComments = getComments;\r\n vm.getCommentsService = getCommentsService;\r\n vm.openScreen = openScreen;\r\n vm.interval = null;\r\n vm.timeout = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n vm.scoreboard = $stateParams.scoreboard === \"true\";\r\n vm.screens = {};\r\n vm.currentScreen = 'instance_' + $stateParams.sid;\r\n vm.selectedScreen = vm.currentScreen;\r\n vm.changeScreen = changeScreen;\r\n vm.showClipboardMessage = false;\r\n vm.copyScreenUrl = copyScreenUrl;\r\n vm.presentations = [];\r\n vm.slideShowOptions = {\r\n 'all': 'Run All',\r\n 'approved': 'Run Approved (Default)',\r\n 'favorites': 'Run Favorites',\r\n // 'hide': 'Don`t display Slideshow'\r\n };\r\n vm.resultsModulesOptions = {\r\n 'scoreboard_slide_show': {\r\n title: 'Slideshow (All sessions)',\r\n duration: '',\r\n icon: 'oc-icon-files',\r\n url: 'slide-show',\r\n alias: 'scoreboard_slide_show',\r\n },\r\n 'quiz': {\r\n title: 'Course / Quiz (All sessions)',\r\n duration: '',\r\n icon: 'oc-icon-quiz',\r\n url: 'quiz',\r\n alias: 'quiz',\r\n },\r\n 'seeker': {\r\n title: 'Seeker games (All sessions)',\r\n duration: '',\r\n icon: 'oc-icon-seeker',\r\n url: 'seeker',\r\n alias: 'quiz',\r\n },\r\n 'scoreboard_team': {\r\n title: 'Team scoreboard / Totals',\r\n duration: '',\r\n icon: 'oc-icon-booking',\r\n url: 'top-scores/team/total',\r\n alias: 'scoreboard_team',\r\n },\r\n };\r\n vm.resultsModules = ['scoreboard_slide_show'];\r\n vm.toggleResultsModules = toggleResultsModules;\r\n vm.isActiveResultsModule = isActiveResultsModule;\r\n vm.resultsModule = 'scoreboard_slide_show';\r\n vm.timerActive = true;\r\n vm.gameDurationOptions = {\r\n '30': 30 * 60,\r\n '60': 60 * 60,\r\n '90': 90 * 60,\r\n '120': 120 * 60,\r\n };\r\n vm.toggleGameDuration = toggleGameDuration;\r\n vm.startGame = startGame;\r\n vm.resumeGame = resumeGame;\r\n vm.saveGameDuration = saveGameDuration;\r\n vm.commentsOptions = {\r\n 'all': 'Show All',\r\n 'approved': 'Show Approved (Default)',\r\n 'not_approved': 'Show Not Approved',\r\n 'favorites': 'Show Favorites',\r\n };\r\n vm.showSaveMessage = false;\r\n vm.saveScreenData = saveScreenData;\r\n vm.updateScreenData = updateScreenData;\r\n vm.updateScreenModule = updateScreenModule;\r\n vm.updateResultsModule = updateResultsModule;\r\n vm.nextResultsModule = nextResultsModule;\r\n vm.getFullScreenUrl = getFullScreenUrl;\r\n vm.currentTime = 0;\r\n vm.slideShowIteration = 0;\r\n vm.toggleCommentActive = toggleCommentActive;\r\n vm.toggleCommentFavorite = toggleCommentFavorite;\r\n\r\n vm.currentComment = '';\r\n vm.changeComment = changeComment;\r\n vm.closeComment = closeComment;\r\n vm.updated = false;\r\n\r\n /**\r\n * Index.\r\n */\r\n vm.index();\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getSettingsService(settingsService);\r\n vm.getScoreboardScreensService(scoreboardScreensService);\r\n vm.getScoreboardPresentationsService(scoreboardPresentationsService);\r\n vm.getCommentsService(scoreboardCommentsService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get settings.\r\n */\r\n function getSettings() {\r\n vm.options.rand = Math.random();\r\n\r\n return settingsFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getSettingsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get presentation modules.\r\n */\r\n function getPresentationModules() {\r\n vm.options.rand = Math.random();\r\n\r\n return gameFactory\r\n .presentationModules(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getPresentationModulesService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get comments.\r\n */\r\n function getComments() {\r\n vm.options.rand = Math.random();\r\n vm.options.what = 'get_game_comments';\r\n\r\n return commentsFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getCommentsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get settings service.\r\n *\r\n * @param data\r\n */\r\n function getSettingsService(data) {\r\n vm.settings = data;\r\n\r\n vm.options = {\r\n rand: Math.random(),\r\n module_alias: vm.settings.module_alias,\r\n point_category_id: \"\",\r\n points_category_alias: {\r\n scoreboard_user:\r\n vm.settings.module_alias === \"scoreboard_user\"\r\n ? pointCategoryToAlias(vm.settings.points_category_alias)\r\n : \"total\",\r\n scoreboard_team:\r\n vm.settings.module_alias === \"scoreboard_team\"\r\n ? pointCategoryToAlias(vm.settings.points_category_alias)\r\n : \"total\"\r\n },\r\n question_id: vm.settings.question_id,\r\n is_screen_paused: vm.settings.is_screen_paused,\r\n screen_pause_type: vm.settings.screen_pause_type,\r\n show_all: vm.settings.show_all,\r\n slide_show_filter: vm.settings.slide_show_filter,\r\n slide_show_duration: vm.settings.slide_show_duration,\r\n results_modules: vm.settings.results_modules,\r\n results_duration: vm.settings.results_duration,\r\n game_duration: vm.settings.game_duration,\r\n game_current_date_time: vm.settings.game_current_date_time,\r\n game_started_at: vm.settings.game_started_at,\r\n game_ended_at: vm.settings.game_ended_at,\r\n game_paused_at: vm.settings.game_paused_at,\r\n game_started: vm.settings.game_started_at !== '' && vm.settings.game_started_at !== '0',\r\n game_ended: vm.settings.game_ended_at !== '' && vm.settings.game_ended_at !== '0',\r\n game_paused: vm.settings.game_paused_at !== '' && vm.settings.game_paused_at !== '0',\r\n game_duration_left: vm.settings.game_ended_at -vm.settings.game_current_date_time,\r\n comments_filter: vm.settings.comments_filter,\r\n };\r\n\r\n vm.resultsModulesOptions['scoreboard_slide_show']['duration'] = vm.settings.slide_show_duration * 1000;\r\n vm.resultsModulesOptions['quiz']['duration'] = vm.settings.results_duration * 1000;\r\n vm.resultsModulesOptions['seeker']['duration'] = vm.settings.results_duration * 1000;\r\n vm.resultsModulesOptions['scoreboard_team']['duration'] = vm.settings.results_duration * 1000;\r\n\r\n vm.resultsModules = vm.options.results_modules;\r\n vm.resultsModule = vm.resultsModules[0];\r\n\r\n //if (vm.updated === false) {\r\n vm.updateResultsModule();\r\n //}\r\n\r\n vm.resumeGame();\r\n }\r\n\r\n /**\r\n * Get scoreboard screens service.\r\n *\r\n * @param data\r\n */\r\n function getScoreboardScreensService(data) {\r\n $.each(data.screens, function( index, screen ) {\r\n vm.screens['instance_' + screen.instance_id] = screen;\r\n });\r\n }\r\n\r\n /**\r\n * Get scoreboard presentations service.\r\n *\r\n * @param data\r\n */\r\n function getScoreboardPresentationsService(data) {\r\n vm.presentations = data.presentations;\r\n }\r\n\r\n /**\r\n * Get presentation modules service.\r\n *\r\n * @param data\r\n */\r\n function getPresentationModulesService(data) {\r\n $.each(data.items, function( index, item ) {\r\n vm.modules[item.alias] = item;\r\n });\r\n }\r\n\r\n /**\r\n * Get comments service.\r\n *\r\n * @param data\r\n */\r\n function getCommentsService(data) {\r\n vm.comments = data;\r\n\r\n vm.allComments = vm.comments.comments;\r\n vm.countComments = vm.comments.number_of_comments;\r\n }\r\n\r\n /**\r\n * Toggle results modules.\r\n */\r\n function toggleResultsModules(key) {\r\n vm.resultsModules.includes(key) ? vm.resultsModules.splice(vm.resultsModules.indexOf(key), 1) : vm.resultsModules.push(key);\r\n\r\n vm.options.results_modules = vm.resultsModules;\r\n\r\n vm.saveScreenData();\r\n }\r\n\r\n /**\r\n * Is active results module.\r\n */\r\n function isActiveResultsModule(key) {\r\n return vm.resultsModules.includes(key);\r\n }\r\n\r\n /**\r\n * Is active results module.\r\n */\r\n function updateResultsModule() {\r\n vm.updated = true;\r\n vm.currentTime = 0;\r\n vm.slideShowIteration = 0;\r\n\r\n if (angular.isDefined(vm.timeout)) {\r\n $timeout.cancel(vm.timeout);\r\n }\r\n\r\n if (JSON.stringify(vm.resultsModules) !== JSON.stringify(['scoreboard_slide_show'])) {\r\n vm.nextResultsModule();\r\n }\r\n }\r\n\r\n /**\r\n * Is active results module.\r\n */\r\n function nextResultsModule() {\r\n var resultsModule = vm.resultsModulesOptions[vm.resultsModule];\r\n\r\n vm.timeout = $timeout(function () {\r\n const keys = Object.keys(vm.resultsModulesOptions);\r\n\r\n const filteredKeys = vm.resultsModules.length > 0 ? keys.filter(value => vm.resultsModules.includes(value)) : ['scoreboard_slide_show'];\r\n\r\n const nextItem = filteredKeys.at(filteredKeys.indexOf(vm.resultsModule) + 1);\r\n\r\n vm.resultsModule = nextItem !== undefined ? nextItem : filteredKeys[0];\r\n\r\n vm.options.module_alias = vm.resultsModule;\r\n\r\n vm.updateScreenModule().then(function(data) {\r\n console.log(vm.options);\r\n\r\n if (data['status'] === 'success') {\r\n vm.nextResultsModule();\r\n\r\n vm.currentTime += resultsModule['duration'];\r\n\r\n if (vm.resultsModule === 'scoreboard_slide_show') {\r\n vm.slideShowIteration++;\r\n }\r\n }\r\n });\r\n }, resultsModule['duration']);\r\n }\r\n\r\n /**\r\n * Get full screen url.\r\n *\r\n * @param moduleAlias\r\n * @param defaultIntervalTime\r\n * @param slideShowIteration\r\n * @param slideShowDuration\r\n * @returns {string}\r\n */\r\n function getFullScreenUrl(moduleAlias, defaultIntervalTime, slideShowIteration, slideShowDuration) {\r\n var intervalTime = \"\";\r\n var url = \"\";\r\n\r\n if (settingsFactory.PRESENTATION_MODULES[moduleAlias]) {\r\n url = settingsFactory.PRESENTATION_MODULES[moduleAlias];\r\n } else if (settingsFactory.SCOREBOARD_MODULES[moduleAlias]) {\r\n url =\r\n \"top-scores/\" +\r\n settingsFactory.SCOREBOARD_MODULES[moduleAlias] +\r\n \"/\" +\r\n settingsFactory.POINTS_CATEGORIES[\r\n vm.options.points_category_alias[moduleAlias]\r\n ];\r\n }\r\n\r\n if (defaultIntervalTime) {\r\n intervalTime = settingsFactory.intervalTime;\r\n } else {\r\n intervalTime = $stateParams.intervalTime\r\n ? $stateParams.intervalTime\r\n : settingsFactory.intervalTime;\r\n }\r\n\r\n return \"index.php#/\" +\r\n $stateParams.eid +\r\n \"/\" +\r\n $stateParams.sid +\r\n '/' + url + '?token=hHR2g4h4&scalable&scoreboard&showAll=1&intervalTime=' + intervalTime + '&slideShowIteration=' + slideShowIteration + '&slideShowDuration=' + slideShowDuration;\r\n }\r\n\r\n /**\r\n * Toggle game duration.\r\n */\r\n function toggleGameDuration(key) {\r\n vm.options.game_duration = key;\r\n\r\n $scope.$broadcast('timer-set-countdown', vm.options.game_duration_left > 0 ? vm.options.game_duration_left : vm.gameDurationOptions[key]);\r\n\r\n $scope.$broadcast('timer-start');\r\n\r\n $scope.$broadcast('timer-stop');\r\n }\r\n\r\n /**\r\n * Resume game.\r\n */\r\n function resumeGame() {\r\n $scope.$broadcast('timer-stop');\r\n\r\n $scope.$broadcast('timer-set-countdown', vm.options.game_duration_left > 0 ? vm.options.game_duration_left : vm.gameDurationOptions[vm.options.game_duration]);\r\n\r\n $timeout(function () {\r\n if (!vm.options.game_paused && vm.options.game_duration_left > 0) {\r\n $scope.$broadcast('timer-start');\r\n\r\n vm.timerActive = true;\r\n }\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Start game.\r\n */\r\n function startGame() {\r\n vm.saveGameDuration();\r\n }\r\n\r\n /**\r\n * Change screen.\r\n */\r\n function changeScreen() {\r\n $state.go('.', {\r\n sid: vm.screens[vm.selectedScreen]['instance_id']\r\n });\r\n }\r\n\r\n /**\r\n * Copy screen URL.\r\n */\r\n function copyScreenUrl() {\r\n copyToClipboard(vm.screens[vm.selectedScreen]['url']);\r\n }\r\n\r\n function copyToClipboard(value) {\r\n navigator.clipboard.writeText(value);\r\n\r\n vm.showClipboardMessage = true;\r\n\r\n setTimeout(() => {\r\n $scope.$apply(() => vm.showClipboardMessage = false);\r\n }, 1000);\r\n }\r\n\r\n /**\r\n * Open screen.\r\n */\r\n function openScreen() {\r\n $window.open(\"index.php#/\" + $stateParams.eid + \"/\" + $stateParams.sid);\r\n }\r\n\r\n /**\r\n * Point category to alias.\r\n *\r\n * @param item\r\n */\r\n function pointCategoryToAlias(item) {\r\n if (item === \"bonus-points\") {\r\n return \"early_bird\";\r\n } else if (item === \"quiz\") {\r\n return \"first_mover\";\r\n }\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * Save screen data.\r\n *\r\n * @returns {*}\r\n */\r\n function saveScreenData() {\r\n vm.options.rand = Math.random();\r\n\r\n return gameFactory.updateScreenData(vm.options, $stateParams).then(function(data) {\r\n if (data['status'] === 'success') {\r\n vm.showSaveMessage = true;\r\n vm.updated = false;\r\n\r\n setTimeout(() => {\r\n $scope.$apply(() => {\r\n vm.showSaveMessage = false;\r\n });\r\n }, 1000);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update screen data.\r\n *\r\n * @returns {*}\r\n */\r\n function updateScreenData() {\r\n vm.options.rand = Math.random();\r\n\r\n return gameFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Update screen module.\r\n *\r\n * @returns {*}\r\n */\r\n function updateScreenModule() {\r\n vm.options.rand = Math.random();\r\n\r\n return gameFactory.updateScreenModule(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Save game duration.\r\n *\r\n * @returns {*}\r\n */\r\n function saveGameDuration() {\r\n vm.options.rand = Math.random();\r\n\r\n return gameFactory.updateGameDuration(vm.options, $stateParams).then(function(data) {\r\n if (data['status'] === 'success') {\r\n vm.showSaveMessage = true;\r\n\r\n setTimeout(() => {\r\n $scope.$apply(() => vm.showSaveMessage = false);\r\n }, 1000);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update comment active.\r\n *\r\n * @returns {*}\r\n */\r\n function toggleCommentActive(item) {\r\n var active = Boolean(Number(item.active));\r\n\r\n var toggleActive = !active;\r\n\r\n return gameFactory.updateCommentActive({\r\n instance_id: item.instance_id,\r\n active: toggleActive === true ? 1 : 0,\r\n rand: Math.random(),\r\n }, $stateParams).then(function(data) {\r\n if (data['status'] === 'success') {\r\n vm.getComments();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update comment favorite.\r\n *\r\n * @returns {*}\r\n */\r\n function toggleCommentFavorite(item) {\r\n var favorite = Boolean(Number(item.favorite));\r\n\r\n var toggleFavorite = !favorite;\r\n\r\n return gameFactory.updateCommentFavorite({\r\n instance_id: item.instance_id,\r\n favorite: toggleFavorite === true ? 1 : 0,\r\n rand: Math.random(),\r\n }, $stateParams).then(function(data) {\r\n if (data['status'] === 'success') {\r\n vm.getComments();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Change comment.\r\n *\r\n * @param item\r\n */\r\n function changeComment(item) {\r\n if (item['comment_image']['large'] !== '') {\r\n vm.currentComment = item;\r\n\r\n // if (angular.isDefined(vm.timeout)) {\r\n // $timeout.cancel(vm.timeout);\r\n // }\r\n }\r\n }\r\n\r\n /**\r\n * Close comment.\r\n */\r\n function closeComment() {\r\n vm.currentComment = '';\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n if (data['is_module_updated']) {\r\n console.log('is_module_updated');\r\n return;\r\n }\r\n\r\n /**\r\n * Settings service\r\n */\r\n vm.getSettings();\r\n\r\n /**\r\n * Comments service\r\n */\r\n vm.getComments();\r\n }\r\n }\r\n );\r\n\r\n eventsClient.bind('refresh-gd',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Settings service\r\n */\r\n vm.getSettings();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval.\r\n */\r\n function getInterval() {\r\n /**\r\n * Get settings.\r\n */\r\n vm.getSettings();\r\n }\r\n\r\n /**\r\n * Tooltip.\r\n */\r\n $(function () {\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n });\r\n\r\n /**\r\n * Cancel timeout\r\n */\r\n $scope.$on(\"$destroy\", function() {\r\n if (angular.isDefined(vm.timeout)) {\r\n $timeout.cancel(vm.timeout);\r\n }\r\n });\r\n\r\n $scope.$on('timer-stopped', function (event, data){\r\n vm.timerActive = false;\r\n });\r\n }\r\n})();\r\n","/**\r\n * Game routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.game\").config(configure);\r\n\r\n /**\r\n * Inject dependencies\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n scoreboardScreensService.$inject = [\"gameFactory\", \"$stateParams\"];\r\n scoreboardPresentationsService.$inject = [\"gameFactory\", \"$stateParams\"];\r\n scoreboardCommentsService.$inject = [\"commentsFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.game/index\", {\r\n url: \"/game\",\r\n templateUrl: \"modules/game/game.html\",\r\n data: {\r\n pageTitle: \"Game\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"GameIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n scoreboardScreensService: scoreboardScreensService,\r\n scoreboardPresentationsService: scoreboardPresentationsService,\r\n scoreboardCommentsService: scoreboardCommentsService,\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scoreboard screens service\r\n *\r\n * @param gameFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardScreensService(\r\n gameFactory,\r\n $stateParams\r\n ) {\r\n return gameFactory.scoreboardScreens(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Scoreboard presentations service\r\n *\r\n * @param gameFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardPresentationsService(\r\n gameFactory,\r\n $stateParams\r\n ) {\r\n return gameFactory.scoreboardPresentations(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Scoreboard presentation modules service\r\n *\r\n * @param gameFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardPresentationModulesService(\r\n gameFactory,\r\n $stateParams\r\n ) {\r\n return gameFactory.scoreboardPresentationModules(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Scoreboard comments service\r\n *\r\n * @param commentsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardCommentsService(\r\n commentsFactory,\r\n $stateParams\r\n ) {\r\n return commentsFactory.index(\r\n {\r\n rand: Math.random(),\r\n what : \"get_game_comments\"\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Logger factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").factory(\"logger\", logger);\r\n\r\n logger.$inject = [\"$log\"];\r\n\r\n /**\r\n * Logger factory\r\n *\r\n * @param $log\r\n * @returns {{error: error, info: info, success: success, warning: warning, log: log}}\r\n */\r\n function logger($log) {\r\n return {\r\n error: error,\r\n info: info,\r\n success: success,\r\n warning: warning,\r\n log: log\r\n };\r\n\r\n /**\r\n * Error\r\n *\r\n * @param message\r\n * @param data\r\n * @param title\r\n */\r\n function error(message, data, title) {\r\n $log.error(\"Error: \" + message, data);\r\n }\r\n\r\n /**\r\n * Info\r\n *\r\n * @param message\r\n * @param data\r\n * @param title\r\n */\r\n function info(message, data, title) {\r\n $log.info(\"Info: \" + message, data);\r\n }\r\n\r\n /**\r\n * Success\r\n *\r\n * @param message\r\n * @param data\r\n * @param title\r\n */\r\n function success(message, data, title) {\r\n $log.info(\"Success: \" + message, data);\r\n }\r\n\r\n /**\r\n * Warning\r\n *\r\n * @param message\r\n * @param data\r\n * @param title\r\n */\r\n function warning(message, data, title) {\r\n $log.warn(\"Warning: \" + message, data);\r\n }\r\n\r\n /**\r\n * Warning\r\n *\r\n * @param message\r\n * @param data\r\n * @param title\r\n */\r\n function log(message, data, title) {\r\n $log.log(\"Log: \" + message, data);\r\n }\r\n }\r\n})();\r\n","/**\r\n * Exception factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").factory(\"exception\", exception);\r\n\r\n exception.$inject = [\"logger\"];\r\n\r\n /**\r\n * Exception factory\r\n *\r\n * @param logger\r\n * @returns {{catcher: catcher}}\r\n */\r\n function exception(logger) {\r\n return {\r\n catcher: catcher\r\n };\r\n\r\n /**\r\n * Catcher\r\n *\r\n * @param message\r\n * @param data\r\n * @returns {*}\r\n */\r\n function catcher(message, data) {\r\n return logger.error(message, data);\r\n }\r\n }\r\n})();\r\n","/**\r\n * Logo screen factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.logoScreen\")\r\n .factory(\"logoScreenFactory\", logoScreenFactory);\r\n\r\n logoScreenFactory.$inject = [\"Restangular\"];\r\n\r\n /**\r\n * Logo screen factory\r\n *\r\n * @param Restangular\r\n * @returns {{}}\r\n */\r\n function logoScreenFactory(Restangular) {\r\n return {};\r\n }\r\n})();\r\n","/**\r\n * Logo screen index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.logoScreen\")\r\n .controller(\"LogoScreenIndexController\", LogoScreenIndexController);\r\n\r\n LogoScreenIndexController.$inject = [\"$scope\"];\r\n\r\n /**\r\n * Logo screen index controller\r\n *\r\n * @param $scope\r\n * @constructor\r\n */\r\n function LogoScreenIndexController($scope) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n }\r\n})();\r\n","/**\r\n * Logo screen routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.logoScreen\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.logoScreen/index\", {\r\n url: \"/logo-screen\",\r\n templateUrl: \"modules/logo-screen/logo-screen.html\",\r\n data: {\r\n pageTitle: \"Logo screen\",\r\n contentClasses: \"\"\r\n },\r\n controller: \"LogoScreenIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {}\r\n });\r\n }\r\n})();\r\n","/**\r\n * Pause screen factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.pauseScreen\")\r\n .factory(\"pauseScreenFactory\", pauseScreenFactory);\r\n\r\n pauseScreenFactory.$inject = [\"Restangular\"];\r\n\r\n /**\r\n * Pause screen factory\r\n *\r\n * @param Restangular\r\n * @returns {{}}\r\n */\r\n function pauseScreenFactory(Restangular) {\r\n return {};\r\n }\r\n})();\r\n","/**\r\n * Pause screen index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.pauseScreen\")\r\n .controller(\"PauseScreenIndexController\", PauseScreenIndexController);\r\n\r\n PauseScreenIndexController.$inject = [\"$scope\", \"$stateParams\"];\r\n\r\n /**\r\n * Pause screen index controller\r\n * @param $scope\r\n * @param $stateParams\r\n * @constructor\r\n */\r\n function PauseScreenIndexController($scope, $stateParams) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n vm.scoreboard = $stateParams.scoreboard === \"true\";\r\n vm.options = {\r\n autoplay: true,\r\n muted: vm.scoreboard,\r\n controls: !vm.scoreboard,\r\n color: $scope.assets.text_color,\r\n loop: true,\r\n api: true\r\n };\r\n }\r\n})();\r\n","/**\r\n * Pause screen routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.pauseScreen\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.pauseScreen/index\", {\r\n url: \"/pause-screen\",\r\n templateUrl: \"modules/pause-screen/pause-screen.html\",\r\n data: {\r\n pageTitle: \"Pause screen\",\r\n contentClasses: \"\"\r\n },\r\n controller: \"PauseScreenIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {}\r\n });\r\n }\r\n})();\r\n","/**\r\n * Questions factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.questions\").factory(\"questionsFactory\", questionsFactory);\r\n\r\n questionsFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Questions factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{selectedQuestion: selectedQuestion, questions: questions}}\r\n */\r\n function questionsFactory(Restangular, exception) {\r\n return {\r\n selectedQuestion: selectedQuestion,\r\n questions: questions\r\n };\r\n\r\n /**\r\n * Selected question\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function selectedQuestion(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_selected_question\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Questions\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function questions(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_questions\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Questions index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.questions\")\r\n .controller(\"QuestionsIndexController\", QuestionsIndexController);\r\n\r\n QuestionsIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"questionsFactory\",\r\n \"questionsService\",\r\n \"selectedQuestionService\"\r\n ];\r\n\r\n /**\r\n * Questions index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param questionsFactory\r\n * @param questionsService\r\n * @param selectedQuestionService\r\n * @constructor\r\n */\r\n function QuestionsIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n questionsFactory,\r\n questionsService,\r\n selectedQuestionService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.questions = {};\r\n vm.selectedQuestion = {};\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getSelectedQuestion = getSelectedQuestion;\r\n vm.getQuestions = getQuestions;\r\n vm.getSelectedQuestionService = getSelectedQuestionService;\r\n vm.getQuestionsService = getQuestionsService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n //vm.getQuestionsService(questionsService);\r\n vm.getSelectedQuestionService(selectedQuestionService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get selected question\r\n *\r\n * @returns {*}\r\n */\r\n function getSelectedQuestion() {\r\n vm.options.rand = Math.random();\r\n\r\n return questionsFactory\r\n .selectedQuestion(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getSelectedQuestionService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get questions\r\n *\r\n * @returns {*}\r\n */\r\n function getQuestions() {\r\n vm.options.rand = Math.random();\r\n\r\n return questionsFactory\r\n .questions(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getQuestionsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get selected question service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getSelectedQuestionService(data) {\r\n vm.selectedQuestion = data;\r\n\r\n return vm.selectedQuestion;\r\n }\r\n\r\n /**\r\n * Get questions service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getQuestionsService(data) {\r\n vm.questions = data;\r\n\r\n return vm.questions;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Questions service.\r\n */\r\n //vm.getQuestions();\r\n\r\n /**\r\n * Selected question service.\r\n */\r\n vm.getSelectedQuestion();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Questions service\r\n */\r\n //vm.getQuestions();\r\n\r\n /**\r\n * Selected question service\r\n */\r\n vm.getSelectedQuestion();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Questions routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.questions\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n selectedQuestionService.$inject = [\"questionsFactory\", \"$stateParams\"];\r\n questionsService.$inject = [\"questionsFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.questions/index\", {\r\n url: \"/questions\",\r\n templateUrl: \"modules/questions/question.html\",\r\n data: {\r\n pageTitle: \"Question\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"QuestionsIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n selectedQuestionService: selectedQuestionService,\r\n questionsService: questionsService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Selected question service\r\n *\r\n * @param questionsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function selectedQuestionService(questionsFactory, $stateParams) {\r\n return questionsFactory.selectedQuestion(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Questions service\r\n *\r\n * @param questionsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function questionsService(questionsFactory, $stateParams) {\r\n return questionsFactory.questions(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Rating factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.rating\").factory(\"ratingFactory\", ratingFactory);\r\n\r\n ratingFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Rating factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{lastRating: lastRating, averageRating: averageRating, ratings: ratings}}\r\n */\r\n function ratingFactory(Restangular, exception) {\r\n return {\r\n lastRating: lastRating,\r\n averageRating: averageRating,\r\n ratings: ratings\r\n };\r\n\r\n /**\r\n * Last rating\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function lastRating(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_last_rating\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Average rating\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function averageRating(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_average_rating\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Ratings\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function ratings(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_ratings\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Rating index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.rating\")\r\n .controller(\"RatingIndexController\", RatingIndexController);\r\n\r\n RatingIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"ratingFactory\",\r\n \"ratingsService\",\r\n \"averageRatingService\",\r\n \"lastRatingService\"\r\n ];\r\n\r\n /**\r\n * Rating index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param ratingFactory\r\n * @param ratingsService\r\n * @param averageRatingService\r\n * @param lastRatingService\r\n * @constructor\r\n */\r\n function RatingIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n ratingFactory,\r\n ratingsService,\r\n averageRatingService,\r\n lastRatingService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.ratings = {};\r\n vm.averageRating = {};\r\n vm.averageRatingPercentage = 0;\r\n vm.lastRating = {};\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getLastRating = getLastRating;\r\n vm.getAverageRating = getAverageRating;\r\n vm.getRatings = getRatings;\r\n vm.getLastRatingService = getLastRatingService;\r\n vm.getAverageRatingService = getAverageRatingService;\r\n vm.getRatingsService = getRatingsService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n //vm.getLastRatingService(lastRatingService);\r\n vm.getAverageRatingService(averageRatingService);\r\n vm.getRatingsService(ratingsService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get last rating\r\n *\r\n * @returns {*}\r\n */\r\n function getLastRating() {\r\n vm.options.rand = Math.random();\r\n\r\n return ratingFactory\r\n .lastRating(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getLastRatingService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get average rating\r\n *\r\n * @returns {*}\r\n */\r\n function getAverageRating() {\r\n vm.options.rand = Math.random();\r\n\r\n return ratingFactory\r\n .averageRating(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getAverageRatingService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get ratings\r\n *\r\n * @returns {*}\r\n */\r\n function getRatings() {\r\n vm.options.rand = Math.random();\r\n\r\n return ratingFactory\r\n .ratings(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getRatingsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get last rating service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getLastRatingService(data) {\r\n vm.lastRating = data;\r\n\r\n return vm.lastRating;\r\n }\r\n\r\n /**\r\n * Get average rating service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getAverageRatingService(data) {\r\n vm.averageRating = data;\r\n vm.averageRatingPercentage =\r\n (vm.averageRating.presentation_ratings.average_rating * 100) / 5;\r\n\r\n return vm.averageRating;\r\n }\r\n\r\n /**\r\n * Get ratings service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getRatingsService(data) {\r\n vm.ratings = data;\r\n\r\n return vm.ratings;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Last rating service.\r\n */\r\n //vm.getLastRating();\r\n\r\n /**\r\n * Average rating service.\r\n */\r\n vm.getAverageRating();\r\n\r\n /**\r\n * Ratings service.\r\n */\r\n vm.getRatings();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Last rating service\r\n */\r\n //vm.getLastRating();\r\n\r\n /**\r\n * Average rating service\r\n */\r\n vm.getAverageRating();\r\n\r\n /**\r\n * Ratings service\r\n */\r\n vm.getRatings();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Rating routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.rating\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n lastRatingService.$inject = [\"ratingFactory\", \"$stateParams\"];\r\n averageRatingService.$inject = [\"ratingFactory\", \"$stateParams\"];\r\n ratingsService.$inject = [\"ratingFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.rating/index\", {\r\n url: \"/rating\",\r\n templateUrl: \"modules/rating/rating.html\",\r\n data: {\r\n pageTitle: \"Rating\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"RatingIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n lastRatingService: lastRatingService,\r\n ratingsService: ratingsService,\r\n averageRatingService: averageRatingService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Last rating service\r\n *\r\n * @param ratingFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function lastRatingService(ratingFactory, $stateParams) {\r\n return ratingFactory.lastRating(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Average rating service\r\n *\r\n * @param ratingFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function averageRatingService(ratingFactory, $stateParams) {\r\n return ratingFactory.averageRating(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Ratings service\r\n *\r\n * @param ratingFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function ratingsService(ratingFactory, $stateParams) {\r\n return ratingFactory.ratings(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Quiz factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.quiz\").factory(\"quizFactory\", quizFactory);\r\n\r\n quizFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Quiz factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function quizFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_quiz\",\r\n showAll: $stateParams.showAll,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Quiz index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.quiz\")\r\n .controller(\"QuizIndexController\", QuizIndexController);\r\n\r\n QuizIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"quizFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Quiz index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param quizFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function QuizIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n quizFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.quiz = {};\r\n vm.title = \"\";\r\n vm.answersLeftList = [];\r\n vm.answersRightList = [];\r\n vm.countQuestions = 0;\r\n vm.lastAnswers = [];\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return quizFactory.index(vm.options, $stateParams).then(function(data) {\r\n return vm.getIndexService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n vm.quiz = data;\r\n vm.title = vm.quiz.quiz_title;\r\n vm.countQuestions = vm.quiz.number_of_questions;\r\n vm.answersLeftList = vm.quiz.left_answers;\r\n vm.answersRightList = vm.quiz.right_answers;\r\n vm.lastAnswers = vm.quiz.last_answers;\r\n\r\n return vm.quiz;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Quiz routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.quiz\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"quizFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.quiz/index\", {\r\n url: \"/quiz\",\r\n templateUrl: \"modules/quiz/quiz.html\",\r\n data: {\r\n pageTitle: \"Quiz\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"QuizIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param quizFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(quizFactory, $stateParams) {\r\n return quizFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Redirect factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app\").factory(\"redirectFactory\", redirectFactory);\r\n\r\n redirectFactory.$inject = [\"settingsFactory\"];\r\n\r\n /**\r\n * Redirect factory\r\n *\r\n * @param settingsFactory\r\n * @returns {{redirect: redirect}}\r\n */\r\n function redirectFactory(settingsFactory) {\r\n return {\r\n redirect: redirect\r\n };\r\n\r\n /**\r\n * Redirect\r\n *\r\n * @param settings\r\n * @param $state\r\n * @returns {boolean}\r\n */\r\n function redirect(settings, $state) {\r\n console.log(settings.module_alias);\r\n var go = {};\r\n\r\n if (settings.is_screen_paused === settingsFactory.SCREEN_PAUSED) {\r\n if (\r\n settings.screen_pause_type ===\r\n settingsFactory.SCREEN_PAUSE_TYPE_CHECK_IN\r\n ) {\r\n /**\r\n * Check-in type.\r\n */\r\n go = { route: \"app.checkIn/index\", params: {} };\r\n } else if (\r\n settings.screen_pause_type ===\r\n settingsFactory.SCREEN_PAUSE_TYPE_CHECK_IN_EVENT\r\n ) {\r\n /**\r\n * Check-in event type.\r\n */\r\n go = { route: \"app.checkInEvent/index\", params: {} };\r\n } else if (\r\n settings.screen_pause_type ===\r\n settingsFactory.SCREEN_PAUSE_TYPE_CHECK_IN_PRESENTATION\r\n ) {\r\n /**\r\n * Check-in presentation type.\r\n */\r\n go = {\r\n route: \"app.checkInPresentation/index\",\r\n params: {\r\n presentationId: settings.presentation_id\r\n }\r\n };\r\n } else {\r\n /**\r\n * Image or video type.\r\n */\r\n go = { route: \"app.pauseScreen/index\", params: {} };\r\n }\r\n } else if (\r\n settings.module_alias === settingsFactory.MODULE_ALIAS_SCOREBOARD_USER\r\n ) {\r\n /**\r\n * If module scoreboard (user type).\r\n */\r\n go = {\r\n route: \"app.topScores/individual\",\r\n params: { category: settings.points_category_alias }\r\n };\r\n } else if (\r\n settings.module_alias === settingsFactory.MODULE_ALIAS_SCOREBOARD_TEAM\r\n ) {\r\n /**\r\n * If module scoreboard (team type).\r\n */\r\n go = {\r\n route: \"app.topScores/team\",\r\n params: { category: settings.points_category_alias }\r\n };\r\n } else if (\r\n settings.module_alias === settingsFactory.MODULE_ALIAS_SCOREBOARD_SLIDE_SHOW\r\n ) {\r\n /**\r\n * If module scoreboard slide show.\r\n */\r\n go = {\r\n route: \"app.slideShow/index\",\r\n params: {}\r\n };\r\n } else if (\r\n settingsFactory.PRESENTATION_MODULES[settings.module_alias]\r\n ) {\r\n /**\r\n * If any other module.\r\n */\r\n go = {\r\n route:\r\n \"app.\" +\r\n settingsFactory.PRESENTATION_MODULES[settings.module_alias] +\r\n \"/index\",\r\n params: {}\r\n };\r\n } else {\r\n /**\r\n * Fallback.\r\n */\r\n go = {\r\n route:\r\n \"app.\" +\r\n settingsFactory.PRESENTATION_MODULES['voting'] +\r\n \"/index\",\r\n params: {}\r\n };\r\n }\r\n\r\n $state.go(go.route, go.params);\r\n\r\n return true;\r\n }\r\n }\r\n})();\r\n","/**\r\n * Redirect index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.redirect\")\r\n .controller(\"RedirectIndexController\", RedirectIndexController);\r\n\r\n RedirectIndexController.$inject = [\r\n \"$state\",\r\n \"settingsService\",\r\n \"redirectFactory\"\r\n ];\r\n\r\n /**\r\n * Redirect index controller\r\n *\r\n * @param $state\r\n * @param settingsService\r\n * @param redirectFactory\r\n * @constructor\r\n */\r\n function RedirectIndexController($state, settingsService, redirectFactory) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n vm.settings = {};\r\n vm.index = index;\r\n vm.redirectToModule = redirectToModule;\r\n\r\n /**\r\n * Index\r\n */\r\n vm.index();\r\n\r\n /**\r\n * Redirect to module.\r\n */\r\n vm.redirectToModule();\r\n\r\n /**\r\n * Index\r\n *\r\n * @returns {Array|*}\r\n */\r\n function index() {\r\n vm.settings = settingsService;\r\n\r\n return vm.settings;\r\n }\r\n\r\n /**\r\n * Redirect to correct module with path.\r\n *\r\n * @returns {{}|*}\r\n */\r\n function redirectToModule() {\r\n return redirectFactory.redirect(vm.settings, $state);\r\n }\r\n }\r\n})();\r\n","/**\r\n * Redirect routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.redirect\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"settingsFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.redirect/index\", {\r\n url: \"\",\r\n templateUrl: \"modules/redirect/redirect.html\",\r\n data: {\r\n pageTitle: \"Redirect\",\r\n contentClasses: \"\"\r\n },\r\n controller: \"RedirectIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param settingsFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(settingsFactory, $stateParams) {\r\n return settingsFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Scoreboard factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.scoreboard\")\r\n .factory(\"scoreboardFactory\", scoreboardFactory);\r\n\r\n scoreboardFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Scoreboard factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{presentationModules: presentationModules, updateScreenData: updateScreenData}}\r\n */\r\n function scoreboardFactory(Restangular, exception) {\r\n return {\r\n presentationModules: presentationModules,\r\n updateScreenData: updateScreenData,\r\n removeQuestion: removeQuestion,\r\n moduleItems: moduleItems\r\n };\r\n\r\n /**\r\n * Presentation modules\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function presentationModules(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_presentation_modules\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Module items\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function moduleItems(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"get_module_items\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Update screen data\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function updateScreenData(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"update_screen_data\",\r\n module_alias: options.module_alias,\r\n point_category_id: options.point_category_id,\r\n question_id: options.question_id,\r\n is_screen_paused: options.is_screen_paused,\r\n screen_pause_type: options.screen_pause_type,\r\n show_all: options.show_all,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Remove question\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function removeQuestion(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n token: $stateParams.token,\r\n what: \"remove_question\",\r\n question_id: options.question_id,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Scoreboard index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.scoreboard\")\r\n .controller(\"ScoreboardIndexController\", ScoreboardIndexController);\r\n\r\n ScoreboardIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"$window\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsService\",\r\n \"scoreboardPresentationModulesService\",\r\n \"scoreboardModuleItemsService\",\r\n \"settingsFactory\",\r\n \"scoreboardFactory\"\r\n ];\r\n\r\n /**\r\n * Scoreboard index controller.\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param $window\r\n * @param logger\r\n * @param config\r\n * @param settingsService\r\n * @param scoreboardPresentationModulesService\r\n * @param scoreboardModuleItemsService\r\n * @param settingsFactory\r\n * @param scoreboardFactory\r\n * @constructor\r\n */\r\n function ScoreboardIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n $window,\r\n logger,\r\n config,\r\n settingsService,\r\n scoreboardPresentationModulesService,\r\n scoreboardModuleItemsService,\r\n settingsFactory,\r\n scoreboardFactory\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.options = {\r\n module_alias: \"\",\r\n module_url: \"\",\r\n point_category_id: \"\",\r\n points_category_alias: {\r\n scoreboard_user: \"\",\r\n scoreboard_team: \"\"\r\n },\r\n question_id: \"\",\r\n is_screen_paused: \"\",\r\n screen_pause_type: \"\",\r\n show_all: 0,\r\n rand: Math.random()\r\n };\r\n vm.settings = {};\r\n vm.modules = [];\r\n vm.q_and_a_items = [];\r\n vm.showQuestions = false;\r\n vm.showAll = false;\r\n vm.team_items = [];\r\n vm.individual_items = [];\r\n vm.index = index;\r\n vm.getSettings = getSettings;\r\n vm.getPresentationModules = getPresentationModules;\r\n vm.getModuleItems = getModuleItems;\r\n vm.getSettingsService = getSettingsService;\r\n vm.getPresentationModulesService = getPresentationModulesService;\r\n vm.getModuleItemsService = getModuleItemsService;\r\n vm.updateScreenData = updateScreenData;\r\n vm.updateQuestion = updateQuestion;\r\n vm.removeQuestion = removeQuestion;\r\n vm.updateShowAll = updateShowAll;\r\n vm.updateTeamScoreboard = updateTeamScoreboard;\r\n vm.updateIndividualScoreboard = updateIndividualScoreboard;\r\n vm.updatePauseScreen = updatePauseScreen;\r\n vm.screenUrl = screenUrl;\r\n vm.openScreen = openScreen;\r\n vm.toggleQuestions = toggleQuestions;\r\n vm.toggleShowAll = toggleShowAll;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n vm.scoreboard = $stateParams.scoreboard === \"true\";\r\n\r\n /**\r\n * Index.\r\n */\r\n vm.index();\r\n\r\n // /**\r\n // * Reload index.\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getSettingsService(settingsService);\r\n vm.getPresentationModulesService(scoreboardPresentationModulesService);\r\n vm.getModuleItemsService(scoreboardModuleItemsService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get settings.\r\n */\r\n function getSettings() {\r\n vm.options.rand = Math.random();\r\n\r\n return settingsFactory\r\n .index(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getSettingsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get presentation modules.\r\n */\r\n function getPresentationModules() {\r\n vm.options.rand = Math.random();\r\n\r\n return scoreboardFactory\r\n .presentationModules(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getPresentationModulesService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get module items.\r\n */\r\n function getModuleItems() {\r\n vm.options.rand = Math.random();\r\n\r\n return scoreboardFactory\r\n .moduleItems(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getModuleItemsService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get settings service.\r\n *\r\n * @param data\r\n */\r\n function getSettingsService(data) {\r\n vm.settings = data;\r\n\r\n vm.options = {\r\n rand: Math.random(),\r\n module_alias: vm.settings.module_alias,\r\n point_category_id: \"\",\r\n points_category_alias: {\r\n scoreboard_user:\r\n vm.settings.module_alias === \"scoreboard_user\"\r\n ? pointCategoryToAlias(vm.settings.points_category_alias)\r\n : \"total\",\r\n scoreboard_team:\r\n vm.settings.module_alias === \"scoreboard_team\"\r\n ? pointCategoryToAlias(vm.settings.points_category_alias)\r\n : \"total\"\r\n },\r\n question_id: vm.settings.question_id,\r\n is_screen_paused: vm.settings.is_screen_paused,\r\n screen_pause_type: vm.settings.screen_pause_type,\r\n show_all: vm.settings.show_all,\r\n };\r\n }\r\n\r\n /**\r\n * Get presentation modules service.\r\n *\r\n * @param data\r\n */\r\n function getPresentationModulesService(data) {\r\n vm.modules = data.presentation_modules;\r\n }\r\n\r\n /**\r\n * Get module items service.\r\n *\r\n * @param data\r\n */\r\n function getModuleItemsService(data) {\r\n vm.q_and_a_items = data.q_and_a_module_items;\r\n vm.team_items = data.team_items;\r\n vm.individual_items = data.individual_items;\r\n }\r\n\r\n /**\r\n * Update screen data.\r\n *\r\n * @param moduleAlias\r\n * @param options\r\n */\r\n function updateScreenData(moduleAlias, options) {\r\n vm.options.rand = Math.random();\r\n vm.options.module_alias = moduleAlias;\r\n // vm.options.point_category_id = \"\";\r\n // vm.options.points_category_alias= {\r\n // scoreboard_user: \"total\",\r\n // scoreboard_team: \"total\"\r\n // };\r\n\r\n vm.options.is_screen_paused =\r\n options && options.is_screen_paused ? options.is_screen_paused : 0;\r\n\r\n vm.options.screen_pause_type =\r\n options && options.screen_pause_type ? options.screen_pause_type : \"\";\r\n\r\n return scoreboardFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Update individual scoreboard.\r\n *\r\n * @param moduleAlias\r\n * @param item\r\n */\r\n function updateIndividualScoreboard(moduleAlias, item) {\r\n vm.options.rand = Math.random();\r\n vm.options.module_alias = moduleAlias;\r\n vm.options.point_category_id = item.instance_id;\r\n vm.options.points_category_alias.scoreboard_user = item.alias;\r\n\r\n return scoreboardFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Update team scoreboard.\r\n *\r\n * @param moduleAlias\r\n * @param item\r\n */\r\n function updateTeamScoreboard(moduleAlias, item) {\r\n vm.options.rand = Math.random();\r\n vm.options.module_alias = moduleAlias;\r\n vm.options.point_category_id = item.instance_id;\r\n vm.options.points_category_alias.scoreboard_team = item.alias;\r\n\r\n return scoreboardFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Update pause screen.\r\n *\r\n * @param moduleAlias\r\n * @param pauseType\r\n */\r\n function updatePauseScreen(moduleAlias, pauseType) {\r\n vm.options.rand = Math.random();\r\n vm.options.module_alias = moduleAlias;\r\n vm.options.is_screen_paused = 1;\r\n vm.options.screen_pause_type = pauseType;\r\n\r\n return scoreboardFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Update question.\r\n *\r\n * @param moduleAlias\r\n * @param item\r\n * @returns {*}\r\n */\r\n function updateQuestion(moduleAlias, item) {\r\n vm.options.rand = Math.random();\r\n vm.options.module_alias = moduleAlias;\r\n vm.options.question_id = item.instance_id;\r\n\r\n vm.toggleQuestions(true);\r\n\r\n return scoreboardFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Remove question.\r\n *\r\n * @param item\r\n */\r\n function removeQuestion(item) {\r\n vm.options.rand = Math.random();\r\n vm.options.question_id = item.instance_id;\r\n\r\n $(\".questionsModal\").modal(\"hide\");\r\n\r\n return scoreboardFactory.removeQuestion(vm.options, $stateParams);\r\n }\r\n\r\n /**\r\n * Screen url.\r\n *\r\n * @param moduleAlias\r\n * @param defaultIntervalTime\r\n */\r\n function screenUrl(moduleAlias, defaultIntervalTime) {\r\n var intervalTime = \"\";\r\n var url = \"\";\r\n\r\n if (settingsFactory.PRESENTATION_MODULES[moduleAlias]) {\r\n url = settingsFactory.PRESENTATION_MODULES[moduleAlias];\r\n } else if (settingsFactory.SCOREBOARD_MODULES[moduleAlias]) {\r\n url =\r\n \"top-scores/\" +\r\n settingsFactory.SCOREBOARD_MODULES[moduleAlias] +\r\n \"/\" +\r\n settingsFactory.POINTS_CATEGORIES[\r\n vm.options.points_category_alias[moduleAlias]\r\n ];\r\n }\r\n\r\n if (defaultIntervalTime) {\r\n intervalTime = settingsFactory.intervalTime;\r\n } else {\r\n intervalTime = $stateParams.intervalTime\r\n ? $stateParams.intervalTime\r\n : settingsFactory.intervalTime;\r\n }\r\n\r\n return \"index.php#/\" +\r\n $stateParams.eid +\r\n \"/\" +\r\n $stateParams.sid +\r\n \"/\" +\r\n url +\r\n \"?scalable&scoreboard&intervalTime=\" +\r\n intervalTime;\r\n }\r\n\r\n /**\r\n * Open screen.\r\n */\r\n function openScreen() {\r\n $window.open(\"index.php#/\" + $stateParams.eid + \"/\" + $stateParams.sid);\r\n }\r\n\r\n /**\r\n * Point category to alias.\r\n *\r\n * @param item\r\n */\r\n function pointCategoryToAlias(item) {\r\n if (item === \"bonus-points\") {\r\n return \"early_bird\";\r\n } else if (item === \"quiz\") {\r\n return \"first_mover\";\r\n }\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * Toggle questions.\r\n *\r\n * @param show\r\n */\r\n function toggleQuestions(show) {\r\n vm.showQuestions = show;\r\n }\r\n\r\n /**\r\n * Toggle the show all flag.\r\n *\r\n * @param {boolean} show - The flag to set for showing all.\r\n */\r\n function toggleShowAll(show) {\r\n vm.showAll = show;\r\n }\r\n\r\n /**\r\n * Update show all.\r\n *\r\n * @param moduleAlias\r\n * @param show\r\n * @returns {*}\r\n */\r\n function updateShowAll(moduleAlias, show) {\r\n vm.options.rand = Math.random();\r\n vm.options.module_alias = moduleAlias;\r\n vm.options.show_all = Number(show);\r\n\r\n vm.toggleShowAll(show);\r\n\r\n return scoreboardFactory.updateScreenData(vm.options, $stateParams);\r\n }\r\n\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Settings service\r\n */\r\n vm.getSettings();\r\n\r\n /**\r\n * Get presentation modules.\r\n */\r\n vm.getPresentationModules();\r\n\r\n /**\r\n * Get module items.\r\n */\r\n vm.getModuleItems();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval.\r\n */\r\n function getInterval() {\r\n /**\r\n * Get settings.\r\n */\r\n vm.getSettings();\r\n\r\n /**\r\n * Get presentation modules.\r\n */\r\n vm.getPresentationModules();\r\n\r\n /**\r\n * Get module items.\r\n */\r\n vm.getModuleItems();\r\n }\r\n\r\n // /**\r\n // * Cancel interval.\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Scoreboard routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.scoreboard\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n scoreboardPresentationModulesService.$inject = [\r\n \"scoreboardFactory\",\r\n \"$stateParams\"\r\n ];\r\n scoreboardModuleItemsService.$inject = [\"scoreboardFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.scoreboard/index\", {\r\n url: \"/scoreboard\",\r\n templateUrl: \"modules/scoreboard/scoreboard.html\",\r\n data: {\r\n pageTitle: \"Scoreboard\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"ScoreboardIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n scoreboardPresentationModulesService: scoreboardPresentationModulesService,\r\n scoreboardModuleItemsService: scoreboardModuleItemsService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scoreboard presentation modules service\r\n *\r\n * @param scoreboardFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardPresentationModulesService(\r\n scoreboardFactory,\r\n $stateParams\r\n ) {\r\n return scoreboardFactory.presentationModules(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Scoreboard module items service\r\n *\r\n * @param scoreboardFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function scoreboardModuleItemsService(scoreboardFactory, $stateParams) {\r\n return scoreboardFactory.moduleItems(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Seeker factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.seeker\").factory(\"seekerFactory\", seekerFactory);\r\n\r\n seekerFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Seeker factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function seekerFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_seeker\",\r\n showAll: $stateParams.showAll,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Quiz index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.seeker\")\r\n .controller(\"SeekerIndexController\", SeekerIndexController);\r\n\r\n SeekerIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"seekerFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Seeker index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param seekerFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function SeekerIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n seekerFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.seeker = {};\r\n vm.title = \"\";\r\n vm.answersLeftList = [];\r\n vm.answersRightList = [];\r\n vm.countFloormaps = 0;\r\n vm.lastAnswers = [];\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return seekerFactory.index(vm.options, $stateParams).then(function(data) {\r\n return vm.getIndexService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n vm.seeker = data;\r\n vm.title = vm.seeker.seeker_title;\r\n vm.countFloormaps = vm.seeker.number_of_questions;\r\n vm.answersLeftList = vm.seeker.left_answers;\r\n vm.answersRightList = vm.seeker.right_answers;\r\n vm.lastAnswers = vm.seeker.last_answers;\r\n\r\n return vm.seeker;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Seeker routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.seeker\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"seekerFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.seeker/index\", {\r\n url: \"/seeker\",\r\n templateUrl: \"modules/seeker/seeker.html\",\r\n data: {\r\n pageTitle: \"Seeker\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"SeekerIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param seekerFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(seekerFactory, $stateParams) {\r\n return seekerFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Slide show factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.slideShow\").factory(\"slideShowFactory\", slideShowFactory);\r\n\r\n slideShowFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Slide show factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{slideShow: slideShow}}\r\n */\r\n function slideShowFactory(Restangular, exception) {\r\n return {\r\n slideShow: slideShow\r\n };\r\n\r\n /**\r\n * Slide show\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function slideShow(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_slide_show\",\r\n showAll: $stateParams.showAll,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Slide show index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.slideShow\")\r\n .controller(\"SlideShowIndexController\", SlideShowIndexController);\r\n\r\n SlideShowIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"$window\",\r\n \"$state\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"slideShowFactory\",\r\n \"slideShowService\",\r\n ];\r\n\r\n /**\r\n * Slide show index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param $window\r\n * @param $state\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param slideShowFactory\r\n * @param slideShowService\r\n * @constructor\r\n */\r\n function SlideShowIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n $window,\r\n $state,\r\n logger,\r\n config,\r\n settingsFactory,\r\n slideShowFactory,\r\n slideShowService,\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.slideShow = {};\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getSlideShow = getSlideShow;\r\n vm.getSlideShowService = getSlideShowService;\r\n vm.getSlides = getSlides;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n vm.slideShowIteration = $stateParams.slideShowIteration ? $stateParams.slideShowIteration : 0;\r\n vm.slideShowDuration = $stateParams.slideShowDuration ? $stateParams.slideShowDuration : 0;\r\n vm.lansdscapeRatio = 80;\r\n vm.portraitRatio = 120;\r\n vm.files = {\r\n 'landscape': [],\r\n 'portrait': [],\r\n 'square': [],\r\n };\r\n vm.images = {\r\n 'landscape': [],\r\n 'portrait': [],\r\n 'square': [],\r\n };\r\n vm.videos = {\r\n 'landscape': [],\r\n 'portrait': [],\r\n 'square': [],\r\n };\r\n vm.videoJsInstances = [];\r\n vm.videoJsSources = {};\r\n vm.slides = [];\r\n vm.slidesLength = 0;\r\n vm.slidesPerIteration = 0;\r\n vm.iteratedSlides = 0;\r\n vm.currentSlide = 0;\r\n vm.slidesInterval = 5000;\r\n vm.isFullscreen = false;\r\n vm.openFullscreen = openFullscreen;\r\n vm.closeFullscreen = closeFullscreen;\r\n vm.showIndicators = false;\r\n vm.toggleIndicators = toggleIndicators;\r\n vm.getVideoSource = getVideoSource;\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getSlideShowService(slideShowService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get slide show\r\n *\r\n * @returns {*}\r\n */\r\n function getSlideShow() {\r\n vm.options.rand = Math.random();\r\n\r\n return slideShowFactory\r\n .slideShow(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getSlideShowService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get slide show service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getSlideShowService(data) {\r\n vm.slideShow = data;\r\n\r\n vm.getSlides(data);\r\n\r\n return vm.slideShow;\r\n }\r\n\r\n /**\r\n * Get slides\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getSlides(data) {\r\n resetFiles();\r\n\r\n parseFiles(data);\r\n\r\n var $carousel = $(\".carousel\");\r\n\r\n $carousel.carousel({\r\n interval: vm.slidesInterval\r\n });\r\n\r\n $(document).on(\"keydown\", function (e) {\r\n if (e.keyCode === 39) {\r\n $carousel.carousel(\"next\");\r\n }\r\n\r\n if (e.keyCode === 37) {\r\n $carousel.carousel(\"prev\");\r\n }\r\n });\r\n\r\n $carousel\r\n .hammer()\r\n .on(\"swipeleft\", function () {\r\n console.log('swipeleft');\r\n $(this).carousel(\"next\");\r\n });\r\n\r\n $carousel\r\n .hammer()\r\n .on(\"swiperight\", function () {\r\n console.log('swiperight');\r\n $(this).carousel(\"prev\");\r\n });\r\n\r\n $(function () {\r\n var videos = $(\".video-background\");\r\n\r\n videos.each(function() {\r\n var video = $(this);\r\n\r\n vm.videoJsSources[video[0]['id']] = video[0]['outerHTML'];\r\n });\r\n\r\n console.log(vm.videoJsSources);\r\n\r\n loadVideos();\r\n\r\n $carousel.on('slide.bs.carousel', function (item) {\r\n // console.log(item['relatedTarget']);\r\n // console.log(item['direction']);\r\n\r\n $.each(vm.videoJsInstances, function(index, videoId) {\r\n videojs(videoId).pause();\r\n videojs(videoId).dispose();\r\n\r\n $('#slide-' + videoId).html(vm.videoJsSources[videoId]);\r\n\r\n vm.videoJsInstances = [];\r\n });\r\n\r\n loadVideos(item['relatedTarget']['id']);\r\n });\r\n });\r\n }\r\n\r\n function loadVideos(slide = 'slide-0') {\r\n var videos = $('#' + slide + \" .video-background\");\r\n\r\n videos.each(function() {\r\n var videoId = $(this)[0]['id'];\r\n var video;\r\n\r\n video = videojs( videoId,{\r\n controlBar: {},\r\n },function () {\r\n var playPromise = video.play();\r\n\r\n if (playPromise !== undefined) {\r\n playPromise.then(_ => {})\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n }\r\n });\r\n\r\n vm.videoJsInstances.push(videoId);\r\n });\r\n }\r\n\r\n /**\r\n * Parse files.\r\n *\r\n * @param data\r\n */\r\n function parseFiles(data) {\r\n $.each(data['comments'], function(commentIndex, item) {\r\n $.each( item['images'], function(imageIndex, image) {\r\n var img = {\r\n user_name: item['user_name'],\r\n user_image: item['user_image'],\r\n user_team: item['user_team'],\r\n comment: item['comment'],\r\n timestamp: item['timestamp'],\r\n image: image,\r\n video: null\r\n };\r\n\r\n if(image['size']['hw_ratio']) {\r\n if(image['size']['hw_ratio'] <= vm.lansdscapeRatio) {\r\n vm.files['landscape'].push(img);\r\n vm.images['landscape'].push(img);\r\n } else if(image['size']['hw_ratio'] > vm.lansdscapeRatio && image['size']['hw_ratio'] < vm.portraitRatio) {\r\n vm.files['square'].push(img);\r\n vm.images['square'].push(img);\r\n } else if(image['size']['hw_ratio'] >= vm.portraitRatio) {\r\n vm.files['portrait'].push(img);\r\n vm.images['portrait'].push(img);\r\n }\r\n }\r\n });\r\n\r\n if(item['video'] && item['video']['original_file_id']) {\r\n var vdo = {\r\n user_name: item['user_name'],\r\n user_image: item['user_image'],\r\n comment: item['comment'],\r\n timestamp: item['timestamp'],\r\n image: null,\r\n video: item['video'],\r\n };\r\n\r\n if(item['video']['size']['hw_ratio']) {\r\n if(item['video']['size']['hw_ratio'] <= vm.lansdscapeRatio) {\r\n vm.files['landscape'].push(vdo);\r\n vm.videos['landscape'].push(vdo);\r\n } else if(item['video']['size']['hw_ratio'] > vm.lansdscapeRatio && item['video']['size']['hw_ratio'] < vm.portraitRatio) {\r\n vm.files['square'].push(vdo);\r\n vm.videos['square'].push(vdo);\r\n } else if(item['video']['size']['hw_ratio'] >= vm.portraitRatio) {\r\n vm.files['portrait'].push(vdo);\r\n vm.videos['portrait'].push(vdo);\r\n }\r\n }\r\n }\r\n });\r\n\r\n $.each(vm.files['landscape'], function(fileIndex, file) {\r\n vm.slides.push({\r\n type: 'landscape',\r\n files: [],\r\n });\r\n\r\n vm.slides[vm.slides.length - 1]['files'].push(file);\r\n });\r\n\r\n $.each(vm.files['square'], function(fileIndex, file) {\r\n if(fileIndex % 2 === 0) {\r\n vm.slides.push({\r\n type: 'square',\r\n files: [],\r\n });\r\n }\r\n\r\n vm.slides[vm.slides.length - 1]['files'].push(file);\r\n });\r\n\r\n $.each(vm.files['portrait'], function(fileIndex, file) {\r\n if(fileIndex % 3 === 0) {\r\n vm.slides.push({\r\n type: 'portrait',\r\n files: [],\r\n });\r\n }\r\n\r\n vm.slides[vm.slides.length - 1]['files'].push(file);\r\n });\r\n\r\n vm.slidesLength = vm.slides.length;\r\n\r\n vm.slidesPerIteration = Math.floor(vm.slideShowDuration * 1000 / vm.slidesInterval);\r\n\r\n var iteratedSlides = vm.slideShowIteration * vm.slidesPerIteration;\r\n\r\n vm.iteratedSlides = iteratedSlides <= vm.slidesLength ? iteratedSlides : vm.slidesLength;\r\n\r\n vm.currentSlide = vm.iteratedSlides % vm.slidesLength;\r\n\r\n // console.log('total slides');\r\n // console.log(vm.slidesLength);\r\n //\r\n // console.log('slides per iteration');\r\n // console.log(vm.slidesPerIteration);\r\n //\r\n // console.log('slide show iteration');\r\n // console.log(vm.slideShowIteration);\r\n //\r\n // console.log('iterated slides');\r\n // console.log(vm.iteratedSlides);\r\n //\r\n // console.log('current slide');\r\n // console.log(vm.currentSlide);\r\n }\r\n\r\n /**\r\n * Reset files.\r\n */\r\n function resetFiles() {\r\n vm.files = {\r\n 'landscape': [],\r\n 'portrait': [],\r\n 'square': [],\r\n };\r\n\r\n vm.images = {\r\n 'landscape': [],\r\n 'portrait': [],\r\n 'square': [],\r\n };\r\n\r\n vm.videos = {\r\n 'landscape': [],\r\n 'portrait': [],\r\n 'square': [],\r\n };\r\n\r\n vm.slides = [];\r\n }\r\n\r\n /**\r\n * Get video source\r\n */\r\n function getVideoSource(video) {\r\n var url = '';\r\n var vimeo = '';\r\n\r\n if (video['hosted_vimeo_link_hd']) {\r\n vimeo = video['hosted_vimeo_link_hd'];\r\n } else if (video['hosted_vimeo_link_sd960']) {\r\n vimeo = video['hosted_vimeo_link_sd960'];\r\n } else if (video['hosted_vimeo_link_sd640']) {\r\n vimeo = video['hosted_vimeo_link_sd640'];\r\n } else if (video['hosted_vimeo_link_mobile']) {\r\n vimeo = video['hosted_vimeo_link_mobile'];\r\n }\r\n\r\n if (vimeo) {\r\n url = 'https' + vimeo + '#t=0.1';\r\n } else if (video['path']) {\r\n url = video['path'];\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n\r\n /**\r\n * Slide show service.\r\n */\r\n //vm.getSlideShow();\r\n\r\n /**\r\n * Reload state.\r\n */\r\n $state.reload();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Slide show service\r\n */\r\n vm.getSlideShow();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n\r\n var elem = document.documentElement;\r\n\r\n /**\r\n * View in fullscreen\r\n */\r\n function openFullscreen() {\r\n if (elem.requestFullscreen) {\r\n elem.requestFullscreen();\r\n } else if (elem.webkitRequestFullscreen) { /* Safari */\r\n elem.webkitRequestFullscreen();\r\n } else if (elem.msRequestFullscreen) { /* IE11 */\r\n elem.msRequestFullscreen();\r\n }\r\n }\r\n\r\n /**\r\n * Close fullscreen\r\n */\r\n function closeFullscreen() {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document.webkitExitFullscreen) { /* Safari */\r\n document.webkitExitFullscreen();\r\n } else if (document.msExitFullscreen) { /* IE11 */\r\n document.msExitFullscreen();\r\n }\r\n }\r\n\r\n $(document).on(\"fullscreenchange\", function() {\r\n if (document.fullscreenElement) {\r\n //console.log(`Element: ${document.fullscreenElement.id} entered fullscreen mode.`);\r\n\r\n $scope.$apply(() => vm.isFullscreen = true);\r\n } else {\r\n //console.log(\"Leaving fullscreen mode.\");\r\n\r\n $scope.$apply(() => vm.isFullscreen = false);\r\n }\r\n });\r\n\r\n /**\r\n * Toggle indicators\r\n */\r\n function toggleIndicators() {\r\n vm.showIndicators = true;\r\n\r\n setTimeout(() => {\r\n vm.showIndicators = false;\r\n\r\n $scope.$apply(() => vm.showIndicators = false);\r\n }, 3000);\r\n }\r\n\r\n /**\r\n * On destroy\r\n */\r\n // $scope.$on(\"$destroy\", function() {\r\n // console.log('destroy slide show');\r\n //\r\n // vm.videojs.forEach(function(video) {\r\n // video.dispose();\r\n // });\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Slide show routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.slideShow\").config(configure);\r\n\r\n /**\r\n * Inject dependencies\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n slideShowService.$inject = [\"slideShowFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.slideShow/index\", {\r\n url: \"/slide-show\",\r\n templateUrl: \"modules/slide-show/slide-show.html\",\r\n data: {\r\n pageTitle: \"Slide show\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"SlideShowIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n slideShowService: slideShowService,\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Slide show service\r\n *\r\n * @param slideShowFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function slideShowService(slideShowFactory, $stateParams) {\r\n return slideShowFactory.slideShow(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Top scores factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.topScores\").factory(\"topScoresFactory\", topScoresFactory);\r\n\r\n topScoresFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Top scores factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{individualTopScores: individualTopScores, teamTopScores: teamTopScores}}\r\n */\r\n function topScoresFactory(Restangular, exception) {\r\n return {\r\n individualTopScores: individualTopScores,\r\n teamTopScores: teamTopScores\r\n };\r\n\r\n /**\r\n * Individual top scores\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function individualTopScores(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_totals_individual\",\r\n showAll: $stateParams.showAll,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Team top scores\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function teamTopScores(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n what: \"get_scoreboard_totals_team\",\r\n showAll: $stateParams.showAll,\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Top scores individual.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.topScores\")\r\n .controller(\"TopScoresIndividualController\", TopScoresIndividualController);\r\n\r\n TopScoresIndividualController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"topScoresFactory\",\r\n \"individualTopScoresService\"\r\n ];\r\n\r\n /**\r\n * Top scores individual controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param topScoresFactory\r\n * @param individualTopScoresService\r\n * @constructor\r\n */\r\n function TopScoresIndividualController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n topScoresFactory,\r\n individualTopScoresService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.topScores = {};\r\n vm.topScoresCategory = {};\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.currentPage = 1;\r\n vm.perPage = 10;\r\n vm.totalItems = 0;\r\n vm.totalPages = 0;\r\n vm.category = $stateParams.category;\r\n vm.index = index;\r\n vm.getTopScores = getTopScores;\r\n vm.getTopScoresService = getTopScoresService;\r\n vm.getTopScoresPagination = getTopScoresPagination;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n /**\r\n * Reload index\r\n */\r\n vm.interval = $interval(\r\n vm.getInterval,\r\n 5000\r\n );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getTopScores(individualTopScoresService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get top scores\r\n *\r\n * @returns {*}\r\n */\r\n function getTopScores() {\r\n vm.options.rand = Math.random();\r\n\r\n return topScoresFactory\r\n .individualTopScores(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getTopScoresService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get top scores service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getTopScoresService(data) {\r\n vm.topScores = data;\r\n\r\n vm.getTopScoresPagination();\r\n\r\n return vm.topScores;\r\n }\r\n\r\n /**\r\n * Get top scores pagination\r\n */\r\n function getTopScoresPagination() {\r\n vm.topScoresCategory = [];\r\n\r\n vm.totalItems = vm.topScores[vm.category].length;\r\n\r\n vm.totalPages = Math.ceil(vm.totalItems / vm.perPage);\r\n\r\n $.each(vm.topScores[vm.category], function(key, value) {\r\n value['index'] = key + 1;\r\n });\r\n\r\n vm.topScoresCategory = paginate(vm.topScores[vm.category], vm.currentPage, vm.perPage);\r\n\r\n vm.currentPage = Number($rootScope['settings']['total_points_rotation']) && vm.currentPage < vm.totalPages ? vm.currentPage + 1 : 1;\r\n }\r\n\r\n function paginate(array, currentPage, pageSize) {\r\n const startIndex = (currentPage - 1) * pageSize;\r\n const endIndex = startIndex + pageSize;\r\n\r\n return array.slice(startIndex, endIndex);\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n console.log('refresh-sb individual');\r\n console.log(data);\r\n\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n console.log('getTopScores');\r\n\r\n /**\r\n * Get top scores.\r\n */\r\n vm.getTopScores();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Get top scores pagination\r\n */\r\n vm.getTopScoresPagination();\r\n }\r\n\r\n /**\r\n * Cancel interval\r\n */\r\n $scope.$on(\"$destroy\", function() {\r\n if (angular.isDefined(vm.interval)) {\r\n $interval.cancel(vm.interval);\r\n }\r\n });\r\n }\r\n})();\r\n","/**\r\n * Top scores routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.topScores\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n individualTopScoresService.$inject = [\"topScoresFactory\", \"$stateParams\"];\r\n teamTopScoresService.$inject = [\"topScoresFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider\r\n .state(\"app.topScores/individual\", {\r\n url:\r\n \"/top-scores/individual/{category:bonus-points|communication|quiz|seeker|social|total}\",\r\n templateUrl: \"modules/top-scores/top-scores.individual.html\",\r\n data: {\r\n pageTitle: \"Individual top scores\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"TopScoresIndividualController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n individualTopScoresService: individualTopScoresService\r\n }\r\n })\r\n .state(\"app.topScores/team\", {\r\n url:\r\n \"/top-scores/team/{category:bonus-points|communication|quiz|seeker|social|total}\",\r\n templateUrl: \"modules/top-scores/top-scores.team.html\",\r\n data: {\r\n pageTitle: \"Team top scores\",\r\n contentClasses: \"radial-gradient\"\r\n },\r\n controller: \"TopScoresTeamController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n teamTopScoresService: teamTopScoresService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Individual top scores service\r\n *\r\n * @param topScoresFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function individualTopScoresService(topScoresFactory, $stateParams) {\r\n return topScoresFactory.individualTopScores(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n\r\n /**\r\n * Team top scores service\r\n *\r\n * @param topScoresFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function teamTopScoresService(topScoresFactory, $stateParams) {\r\n return topScoresFactory.teamTopScores(\r\n $stateParams,\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Top scores team.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.topScores\")\r\n .controller(\"TopScoresTeamController\", TopScoresTeamController);\r\n\r\n TopScoresTeamController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"topScoresFactory\",\r\n \"teamTopScoresService\"\r\n ];\r\n\r\n /**\r\n * Top scores team controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param topScoresFactory\r\n * @param teamTopScoresService\r\n * @constructor\r\n */\r\n function TopScoresTeamController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n topScoresFactory,\r\n teamTopScoresService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.topScores = {};\r\n vm.topScoresCategory = {};\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.currentPage = 1;\r\n vm.perPage = 10;\r\n vm.totalItems = 0;\r\n vm.totalPages = 0;\r\n vm.category = $stateParams.category;\r\n vm.index = index;\r\n vm.getTopScores = getTopScores;\r\n vm.getTopScoresService = getTopScoresService;\r\n vm.getTopScoresPagination = getTopScoresPagination;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n /**\r\n * Reload index\r\n */\r\n vm.interval = $interval(\r\n vm.getInterval,\r\n 5000\r\n );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getTopScores(teamTopScoresService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get top scores\r\n *\r\n * @returns {*}\r\n */\r\n function getTopScores() {\r\n vm.options.rand = Math.random();\r\n\r\n return topScoresFactory\r\n .teamTopScores(vm.options, $stateParams)\r\n .then(function(data) {\r\n return vm.getTopScoresService(data);\r\n });\r\n }\r\n\r\n /**\r\n * Get top scores service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getTopScoresService(data) {\r\n vm.topScores = data;\r\n\r\n vm.getTopScoresPagination();\r\n\r\n return vm.topScores;\r\n }\r\n\r\n /**\r\n * Get top scores pagination\r\n */\r\n function getTopScoresPagination() {\r\n vm.topScoresCategory = [];\r\n \r\n vm.totalItems = vm.topScores[vm.category].length;\r\n\r\n vm.totalPages = Math.ceil(vm.totalItems / vm.perPage);\r\n\r\n $.each(vm.topScores[vm.category], function(key, value) {\r\n value['index'] = key + 1;\r\n });\r\n\r\n vm.topScoresCategory = paginate(vm.topScores[vm.category], vm.currentPage, vm.perPage);\r\n\r\n vm.currentPage = Number($rootScope['settings']['total_points_rotation']) && vm.currentPage < vm.totalPages ? vm.currentPage + 1 : 1;\r\n }\r\n\r\n function paginate(array, currentPage, pageSize) {\r\n const startIndex = (currentPage - 1) * pageSize;\r\n const endIndex = startIndex + pageSize;\r\n\r\n return array.slice(startIndex, endIndex);\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n console.log('refresh-sb team');\r\n console.log(data);\r\n\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n console.log('getTopScores');\r\n \r\n /**\r\n * Get top scores.\r\n */\r\n vm.getTopScores();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Get top scores pagination\r\n */\r\n vm.getTopScoresPagination();\r\n }\r\n\r\n /**\r\n * Cancel interval\r\n */\r\n $scope.$on(\"$destroy\", function() {\r\n if (angular.isDefined(vm.interval)) {\r\n $interval.cancel(vm.interval);\r\n }\r\n });\r\n }\r\n})();\r\n","/**\r\n * Voting factory.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.voting\").factory(\"votingFactory\", votingFactory);\r\n\r\n votingFactory.$inject = [\"Restangular\", \"exception\"];\r\n\r\n /**\r\n * Voting factory\r\n *\r\n * @param Restangular\r\n * @param exception\r\n * @returns {{index: index}}\r\n */\r\n function votingFactory(Restangular, exception) {\r\n return {\r\n index: index\r\n };\r\n\r\n /**\r\n * Index\r\n *\r\n * @param options\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function index(options, $stateParams) {\r\n return Restangular.all(\"scoreboard_ws.php\")\r\n .doGET(\"\", {\r\n eid: $stateParams.eid,\r\n sid: $stateParams.sid,\r\n what: \"get_scoreboard_voting\",\r\n rand: options.rand\r\n })\r\n .then(\r\n function(data) {\r\n return data;\r\n },\r\n function(data) {\r\n exception.catcher(\"XHR Failed!\", data);\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n","/**\r\n * Voting index.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.voting\")\r\n .controller(\"VotingIndexController\", VotingIndexController);\r\n\r\n VotingIndexController.$inject = [\r\n \"$rootScope\",\r\n \"$scope\",\r\n \"$stateParams\",\r\n \"$interval\",\r\n \"$timeout\",\r\n \"$pusher\",\r\n \"logger\",\r\n \"config\",\r\n \"settingsFactory\",\r\n \"helpersFactory\",\r\n \"votingFactory\",\r\n \"indexService\"\r\n ];\r\n\r\n /**\r\n * Voting index controller\r\n *\r\n * @param $rootScope\r\n * @param $scope\r\n * @param $stateParams\r\n * @param $interval\r\n * @param $timeout\r\n * @param $pusher\r\n * @param logger\r\n * @param config\r\n * @param settingsFactory\r\n * @param helpersFactory\r\n * @param votingFactory\r\n * @param indexService\r\n * @constructor\r\n */\r\n function VotingIndexController(\r\n $rootScope,\r\n $scope,\r\n $stateParams,\r\n $interval,\r\n $timeout,\r\n $pusher,\r\n logger,\r\n config,\r\n settingsFactory,\r\n helpersFactory,\r\n votingFactory,\r\n indexService\r\n ) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.votingSessionName = \"\";\r\n vm.voteItems = [];\r\n vm.totalVotes = 0;\r\n vm.votingValues = [];\r\n vm.maxBars = \"\";\r\n vm.maxItems = 0;\r\n vm.minGuideValue = 0;\r\n vm.maxGuideValue = 0;\r\n vm.guideLinesAsc = [];\r\n vm.guideLinesDesc = [];\r\n vm.maxValue = 0;\r\n vm.options = {\r\n rand: Math.random()\r\n };\r\n vm.index = index;\r\n vm.getIndex = getIndex;\r\n vm.getIndexService = getIndexService;\r\n vm.getChart = getChart;\r\n vm.getMaxItems = getMaxItems;\r\n vm.getWidth = getWidth;\r\n vm.getHeight = getHeight;\r\n vm.getMaxGuideValue = getMaxGuideValue;\r\n vm.interval = null;\r\n vm.getInterval = getInterval;\r\n vm.getEvents = getEvents;\r\n vm.scalable = $stateParams.scalable === \"true\";\r\n\r\n /**\r\n * Index\r\n */\r\n index();\r\n\r\n // /**\r\n // * Reload index\r\n // */\r\n // vm.interval = $interval(\r\n // vm.getInterval,\r\n // $stateParams.intervalTime\r\n // ? $stateParams.intervalTime\r\n // : settingsFactory.intervalTime\r\n // );\r\n\r\n /**\r\n * Index.\r\n */\r\n function index() {\r\n vm.getIndexService(indexService);\r\n vm.getEvents();\r\n }\r\n\r\n /**\r\n * Get index\r\n *\r\n * @returns {*}\r\n */\r\n function getIndex() {\r\n vm.options.rand = Math.random();\r\n\r\n return votingFactory.index(vm.options, $stateParams).then(function(data) {\r\n /**\r\n * Get index service\r\n */\r\n vm.getIndexService(data);\r\n\r\n return data;\r\n });\r\n }\r\n\r\n /**\r\n * Get index service\r\n *\r\n * @param data\r\n * @returns {{}|*}\r\n */\r\n function getIndexService(data) {\r\n /**\r\n * Voting data\r\n */\r\n vm.voting = data;\r\n\r\n /**\r\n * Get chart values\r\n */\r\n vm.getChart();\r\n\r\n /**\r\n * Get max items\r\n */\r\n vm.maxBars = vm.getMaxItems();\r\n\r\n return vm.voting;\r\n }\r\n\r\n /**\r\n * Get chart\r\n *\r\n * @returns {boolean}\r\n */\r\n function getChart() {\r\n vm.votingSessionName = vm.voting.voting_session_name;\r\n\r\n vm.voteItems = vm.voting.vote_items;\r\n\r\n vm.totalVotes = vm.voting.total_votes;\r\n\r\n vm.votingValues = vm.voteItems.map(function(a) {\r\n return a.total;\r\n });\r\n\r\n vm.maxItems = vm.voteItems.length;\r\n\r\n vm.maxGuideValue = vm.getMaxGuideValue(\r\n Math.max.apply(null, vm.votingValues)\r\n );\r\n\r\n vm.guideLinesAsc = helpersFactory\r\n .createArray(vm.minGuideValue, vm.maxGuideValue, 4)\r\n .sort(helpersFactory.compareNumbersAsc);\r\n\r\n vm.guideLinesDesc = helpersFactory\r\n .createArray(vm.minGuideValue, vm.maxGuideValue, 4)\r\n .sort(helpersFactory.compareNumbersDesc);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get max guide value\r\n *\r\n * @param value\r\n * @returns {number}\r\n */\r\n function getMaxGuideValue(value) {\r\n var raport = 1;\r\n\r\n if (value > 1000) {\r\n raport = 100;\r\n } else if (value > 100) {\r\n raport = 10;\r\n }\r\n\r\n return Math.floor(value / raport) * raport;\r\n }\r\n\r\n /**\r\n * Get max items\r\n *\r\n * @returns {*}\r\n */\r\n function getMaxItems() {\r\n if (vm.maxItems <= 7) {\r\n return \"max-7\";\r\n } else if (vm.maxItems <= 14) {\r\n return \"max-14\";\r\n } else {\r\n return \"max-35\";\r\n }\r\n }\r\n\r\n /**\r\n * Get width\r\n *\r\n * @param value\r\n * @param maxGuideValue\r\n * @returns {number}\r\n */\r\n function getWidth(value, maxGuideValue) {\r\n return Math.ceil((value / maxGuideValue) * 100);\r\n }\r\n\r\n /**\r\n * Get height\r\n *\r\n * @param value\r\n * @param maxGuideValue\r\n * @returns {number}\r\n */\r\n function getHeight(value, maxGuideValue) {\r\n return Math.ceil((value / maxGuideValue) * 100);\r\n }\r\n\r\n /**\r\n * Get events.\r\n */\r\n function getEvents() {\r\n /**\r\n * Client.\r\n */\r\n var eventsClient = $pusher($rootScope.eventsClient);\r\n\r\n /**\r\n * Subscribe.\r\n */\r\n eventsClient.subscribe(config.pusher.channel);\r\n\r\n /**\r\n * Bind.\r\n */\r\n eventsClient.bind('refresh-sb',\r\n function(data) {\r\n if(parseInt(data['e_id']) === parseInt($stateParams['eid']) && parseInt(data['screen_id']) === parseInt($stateParams['sid'])) {\r\n /**\r\n * Index service.\r\n */\r\n vm.getIndex();\r\n }\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Get interval\r\n */\r\n function getInterval() {\r\n /**\r\n * Index service\r\n */\r\n vm.getIndex();\r\n }\r\n\r\n // /**\r\n // * Cancel interval\r\n // */\r\n // $scope.$on(\"$destroy\", function() {\r\n // if (angular.isDefined(vm.interval)) {\r\n // $interval.cancel(vm.interval);\r\n // }\r\n // });\r\n }\r\n})();\r\n","/**\r\n * Voting routes.\r\n */\r\n\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.voting\").config(configure);\r\n\r\n /**\r\n * Inject dependences\r\n *\r\n * @type {string[]}\r\n */\r\n configure.$inject = [\"$stateProvider\"];\r\n indexService.$inject = [\"votingFactory\", \"$stateParams\"];\r\n\r\n /**\r\n * Configure\r\n *\r\n * @param $stateProvider\r\n */\r\n function configure($stateProvider) {\r\n $stateProvider.state(\"app.voting/index\", {\r\n url: \"/voting\",\r\n templateUrl: \"modules/voting/voting.html\",\r\n data: {\r\n pageTitle: \"Voting\",\r\n contentClasses: \"\"\r\n },\r\n controller: \"VotingIndexController\",\r\n controllerAs: \"vm\",\r\n resolve: {\r\n indexService: indexService\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Index service\r\n *\r\n * @param votingFactory\r\n * @param $stateParams\r\n * @returns {*}\r\n */\r\n function indexService(votingFactory, $stateParams) {\r\n return votingFactory.index(\r\n {\r\n rand: Math.random()\r\n },\r\n $stateParams\r\n );\r\n }\r\n})();\r\n","/**\r\n * Vimeo\r\n */\r\n(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"app.vimeo\").directive(\"vimeo\", vimeo);\r\n\r\n vimeo.$inject = [\"vimeoFactory\"];\r\n\r\n /**\r\n * Vimeo\r\n *\r\n * @param vimeoFactory\r\n * @returns {{restrict: string, replace: boolean, scope: {videoId: string, playerOpts: string, playerHeight: string, playerWidth: string, api: string}, link: link}}\r\n */\r\n function vimeo(vimeoFactory) {\r\n return {\r\n restrict: \"EA\",\r\n replace: true,\r\n scope: {\r\n videoId: \"=\",\r\n playerOpts: \"=\",\r\n playerHeight: \"=\",\r\n playerWidth: \"=\",\r\n api: \"=\"\r\n },\r\n link: link\r\n };\r\n\r\n function link(scope, element, attrs, ctrl) {\r\n /**\r\n * Watch the vimeo id.\r\n */\r\n scope.$watch(\"videoId\", function(newValue, oldValue) {\r\n if (newValue == null) {\r\n element.html(\"\");\r\n } else {\r\n var playerId = attrs.playerId || element[0].id;\r\n element[0].id = playerId;\r\n\r\n var videoId = \"https://vimeo.com/\" + scope.videoId,\r\n params = {\r\n callback: \"JSON_CALLBACK\",\r\n url: videoId,\r\n player_id: playerId\r\n },\r\n options = scope.playerOpts || null;\r\n\r\n if (scope.playerWidth) {\r\n params.width = scope.playerWidth;\r\n }\r\n\r\n if (scope.playerHeight) {\r\n params.height = scope.playerHeight;\r\n }\r\n\r\n if (scope.api) {\r\n params.api = 1;\r\n }\r\n\r\n /**\r\n * If params obj is passed, loop through object keys and append query param\r\n */\r\n if (options) {\r\n for (var prop in options) {\r\n params[prop] = options[prop];\r\n }\r\n }\r\n\r\n vimeoFactory.oembed(params).then(\r\n function(data) {\r\n element.html(data.html);\r\n },\r\n function(data) {\r\n element.html(\"