'use strict' angular.module 'SocialSystem' .controller 'QuestionCtrl', ['$scope', '$rootScope', '$state', '$stateParams', '$document', 'Quiz', '$splash', 'Config', ($scope, $rootScope, $state, $stateParams, $document, Quiz, $splash, Config) -> $scope.questionIndex = $stateParams['index'] - 1 $state.go 'list' if $stateParams['index'] < 1 $scope.sortableOptions = disabled: true getQuiz = () -> $scope.quiz = Quiz.getQuiz() $scope.sortableOptions.disabled = $scope.quiz.questions[$scope.questionIndex].is_answered if not $.isEmptyObject $scope.quiz validateMissing = (questionId) -> validation = for answer in $scope.quiz.questions[questionId].answers do (answer)-> switch answer.pattern.split(':')[1] when 'number' then [answer.user_text, 'number', /^\d+$/.test answer.user_text] when 'cyrillic' then [answer.user_text, 'cyrillic', /[\u0400-\u04FF]/gi.test answer.user_text] validationErrMsg = (entry, values) -> Config.messages.validate_errors.text.replace('[entry]', '"'+entry+'"').replace('[values]', Config.messages.validate_errors[values]) errors = [] (errors.push validationErrMsg(row[0], row[1]) if row && row[2] is false) for row in validation if errors.length > 0 errors else null getQuiz() $rootScope.$on 'quiz:updated', -> getQuiz() $scope.disableSendBtn = false $scope.$on 'answers:sent', -> $scope.quiz.questions[$stateParams['index'] - 1].is_answered = true $scope.disableSendBtn = false $rootScope.$on 'answers:sent', undefined $state.go 'list' $scope.send = () -> unless $scope.quiz.questions[$scope.questionIndex].is_answered $scope.disableSendBtn = true switch $scope.quiz.questions[$scope.questionIndex].type_id when 'single_choice' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers when answer.user_choice) when 'multi_choice' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers when answer.user_choice) when 'order' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers) when 'compare' then userAnswer = ( [answer.id, $scope.quiz.questions[$scope.questionIndex].answers.relation[i].id] for answer, i in $scope.quiz.questions[$scope.questionIndex].answers.main by 1 ) when 'missing' then userAnswer = ([answer.id, answer.user_text] for answer in $scope.quiz.questions[$scope.questionIndex].answers) when 'word' then userAnswer = [$scope.quiz.questions[$scope.questionIndex].answers.user_text] emptyCount = 0 (emptyCount++ if answer[1] is '') for answer in userAnswer if userAnswer.length == 0 or emptyCount > 0 or userAnswer.length == 1 && userAnswer[0] == '' $splash.open title: Config.messages.empty_answer.title, message: Config.messages.empty_answer.text $scope.disableSendBtn = false else if $scope.quiz.questions[$scope.questionIndex].type_id == 'missing' && errors = validateMissing($scope.questionIndex) $splash.open title: Config.messages.validate_errors.title, message: errors.join ' ' $scope.disableSendBtn = false else Quiz.sendAnswers $scope.quiz.questions[$scope.questionIndex].id, userAnswer ]