Coffeescript SocialSystem


SUBMITTED BY: Guest

DATE: May 21, 2015, 10:26 a.m.

FORMAT: Text only

SIZE: 4.3 kB

HITS: 3939

  1. 'use strict'
  2. angular.module 'SocialSystem'
  3. .controller 'QuestionCtrl', ['$scope', '$rootScope', '$state', '$stateParams', '$document', 'Quiz', '$splash', 'Config', ($scope, $rootScope, $state, $stateParams, $document, Quiz, $splash, Config) ->
  4. $scope.questionIndex = $stateParams['index'] - 1
  5. $state.go 'list' if $stateParams['index'] < 1
  6. $scope.sortableOptions =
  7. disabled: true
  8. getQuiz = () ->
  9. $scope.quiz = Quiz.getQuiz()
  10. $scope.sortableOptions.disabled = $scope.quiz.questions[$scope.questionIndex].is_answered if not $.isEmptyObject $scope.quiz
  11. validateMissing = (questionId) ->
  12. validation = for answer in $scope.quiz.questions[questionId].answers
  13. do (answer)->
  14. switch answer.pattern.split(':')[1]
  15. when 'number' then [answer.user_text, 'number', /^\d+$/.test answer.user_text]
  16. when 'cyrillic' then [answer.user_text, 'cyrillic', /[\u0400-\u04FF]/gi.test answer.user_text]
  17. validationErrMsg = (entry, values) ->
  18. Config.messages.validate_errors.text.replace('[entry]', '"'+entry+'"').replace('[values]', Config.messages.validate_errors[values])
  19. errors = []
  20. (errors.push validationErrMsg(row[0], row[1]) if row && row[2] is false) for row in validation
  21. if errors.length > 0
  22. errors
  23. else
  24. null
  25. getQuiz()
  26. $rootScope.$on 'quiz:updated', ->
  27. getQuiz()
  28. $scope.disableSendBtn = false
  29. $scope.$on 'answers:sent', ->
  30. $scope.quiz.questions[$stateParams['index'] - 1].is_answered = true
  31. $scope.disableSendBtn = false
  32. $rootScope.$on 'answers:sent', undefined
  33. $state.go 'list'
  34. $scope.send = () ->
  35. unless $scope.quiz.questions[$scope.questionIndex].is_answered
  36. $scope.disableSendBtn = true
  37. switch $scope.quiz.questions[$scope.questionIndex].type_id
  38. when 'single_choice' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers when answer.user_choice)
  39. when 'multi_choice' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers when answer.user_choice)
  40. when 'order' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers)
  41. when 'compare' then userAnswer = (
  42. [answer.id, $scope.quiz.questions[$scope.questionIndex].answers.relation[i].id] for answer, i in $scope.quiz.questions[$scope.questionIndex].answers.main by 1
  43. )
  44. when 'missing' then userAnswer = ([answer.id, answer.user_text] for answer in $scope.quiz.questions[$scope.questionIndex].answers)
  45. when 'word' then userAnswer = [$scope.quiz.questions[$scope.questionIndex].answers.user_text]
  46. emptyCount = 0
  47. (emptyCount++ if answer[1] is '') for answer in userAnswer
  48. if userAnswer.length == 0 or emptyCount > 0 or userAnswer.length == 1 && userAnswer[0] == ''
  49. $splash.open
  50. title: Config.messages.empty_answer.title,
  51. message: Config.messages.empty_answer.text
  52. $scope.disableSendBtn = false
  53. else if $scope.quiz.questions[$scope.questionIndex].type_id == 'missing' && errors = validateMissing($scope.questionIndex)
  54. $splash.open
  55. title: Config.messages.validate_errors.title,
  56. message: errors.join ' '
  57. $scope.disableSendBtn = false
  58. else
  59. Quiz.sendAnswers $scope.quiz.questions[$scope.questionIndex].id, userAnswer
  60. ]

comments powered by Disqus