Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- checkQuestion = (q) ->
- if not q.question?
- throw "Не задан текст вопроса!"
- if q.rightAnswerID == -1
- throw "В вопросе '#{q.question}' не задан правильный вариант ответа!"
- if q.answers.length > 5
- throw "В вопросе '#{q.question}' кол-во вариантов ответа превышает 5!"
- if q.answers.length < 2
- throw "В вопросе '#{q.question}' кол-во вариантов ответа менее 2!"
- for a in q.answers
- commas = a.answer.match(/,/ig) || []
- if commas.length + 1 isnt q.omissionsCount
- throw "В вопросе '#{q.question}' вариант ответа '#{a.answer}' не может заполнить все #{q.omissionsCount} плейсхолдеры в вопросе!"
- return q
- parseAnswers = (answers) ->
- _answers = [] # Варианты ответа на вопрос
- rightAnswerID = -1 # Индекс в результирующем наборе списка вопросов
- for answer in answers
- isRightAnswer = if /\+\s*$/.test(answer) then 'y' else 'n'
- answer = $.trim answer.replace /\+\s*$/, ''
- if answer.length > 0
- rightAnswerID = _answers.length if isRightAnswer == 'y'
- _answers.push
- answer: answer
- isRightAnswer: isRightAnswer
- return [rightAnswerID, _answers]
- parseQuestion = (question) ->
- q =
- index: -1 # Индекс вопроса, если есть
- question: undefined # Текст вопроса
- omissionsCount: 0 # Сколько пропусков для подстановки вариантов вопроса в вопросе
- rightAnswerID: -1 # Идентификатор правильного варианта ответа
- answers: [] # Варианты ответа
- lines = question.split '\n'
- match = lines[0].match /^((\d+)\.\s)?(.+)$/i
- q.index = parseInt match[2], 10
- q.question = $.trim(match[3]).replace /([^_])__[_]*/ig, '$1_____'
- q.omissionsCount = omissions.length if (omissions = q.question.match(/_____/ig))?
- [q.rightAnswerID, q.answers] = parseAnswers lines[1...lines.length]
- return q
- parseTest = (testText) ->
- test = $.trim(testText).split '\n\n'
- checkQuestion parseQuestion question for question in test
- $ -> console.log parseTest $('textarea').val()
Add Comment
Please, Sign In to add comment