liquid_feedback_frontend

annotate app/main/survey/participate.lua @ 1805:dadba1e28226

Avoid counter overlapping with question text
author bsw
date Thu Nov 18 14:33:00 2021 +0100 (2021-11-18)
parents 6d69bc46440e
children
rev   line source
bsw@1735 1 local survey = Survey:get_open()
bsw@1735 2 if not survey then
bsw@1735 3 return execute.view { module = "index", view = "404" }
bsw@1735 4 end
bsw@1735 5
bsw@1735 6 local survey_member = SurveyMember:by_pk(survey.id, app.session.member_id)
bsw@1735 7 if not survey_member then
bsw@1735 8 return execute.view { module = "index", view = "404" }
bsw@1735 9 end
bsw@1735 10
bsw@1735 11 local question
bsw@1752 12 local question_number = #survey.questions
bsw@1735 13
bsw@1735 14 if survey_member then
bsw@1735 15 local answer_set = survey_member.answer_set
bsw@1735 16 if answer_set then
bsw@1735 17 local answers_by_question_id = {}
bsw@1735 18 for i, answer in ipairs(answer_set.answers) do
bsw@1735 19 answers_by_question_id[answer.survey_question_id] = answer
bsw@1735 20 end
bsw@1735 21 for i, q in ipairs(survey.questions) do
bsw@1735 22 if not question and not answers_by_question_id[q.id] then
bsw@1735 23 question = q
bsw@1752 24 question_number = i - 1
bsw@1735 25 end
bsw@1735 26 end
bsw@1735 27 end
bsw@1735 28 end
bsw@1735 29
bsw@1742 30 ui.title(survey.title)
bsw@1735 31 ui.grid{ content = function()
bsw@1735 32 ui.cell_main{ content = function()
bsw@1735 33
bsw@1740 34 ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp survey" }, content = function()
bsw@1752 35 ui.container{ attr = { class = "mdl-card__title" }, content = function()
bsw@1746 36 ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = function()
bsw@1746 37 if survey_member.finished then
bsw@1746 38 slot.put(survey.finished_title)
bsw@1746 39 else
bsw@1805 40 ui.tag{ attr = { class = "survey_counter" }, content = (question_number + 1) .. " / " .. #survey.questions }
bsw@1752 41 ui.tag{ tag = "span", content = question.question }
bsw@1746 42 end
bsw@1747 43 end }
bsw@1735 44 end }
bsw@1752 45 slot.put('<div id = "progressbar1" style="width: 100%;" class = "mdl-progress mdl-js-progress"></div>')
bsw@1752 46
bsw@1752 47 ui.script{ script = [[
bsw@1752 48 document.querySelector('#progressbar1').addEventListener('mdl-componentupgraded',
bsw@1752 49 function() {
bsw@1752 50 this.MaterialProgress.setProgress(]] .. question_number / #survey.questions * 100 .. [[);
bsw@1752 51 });
bsw@1752 52
bsw@1752 53 ]] }
bsw@1735 54 ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function()
bsw@1735 55 if survey_member.finished then
bsw@1735 56 ui.container{ content = function()
bsw@1735 57 slot.put(survey.finished_text)
bsw@1735 58 end }
bsw@1735 59 slot.put("<br>")
bsw@1735 60 ui.link{
bsw@1735 61 attr = { class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored" },
bsw@1735 62 module = "index", view = "index", content = _"Go to start page"
bsw@1735 63 }
bsw@1735 64 return
bsw@1735 65 else
bsw@1735 66 if question.description then
bsw@1735 67 ui.container{ content = question.description }
bsw@1750 68 slot.put("<br>")
bsw@1735 69 end
bsw@1735 70 ui.form{
bsw@1735 71 module = "survey", action = "answer",
bsw@1735 72 routing = {
bsw@1735 73 ok = { mode = "redirect", module = "survey", view = "participate" },
bsw@1735 74 error = { mode = "forward", module = "survey", view = "participate" },
bsw@1735 75 },
bsw@1735 76 content = function()
bsw@1752 77
bsw@1735 78 ui.field.hidden{ name = "question_id", value = question.id }
bsw@1743 79
bsw@1735 80 if question.answer_type == "radio" then
bsw@1735 81 for i, answer_option in ipairs(question.answer_options) do
bsw@1735 82 ui.container{ content = function()
bsw@1735 83 ui.tag{ tag = "label", attr = {
bsw@1735 84 class = "mdl-radio mdl-js-radio mdl-js-ripple-effect",
bsw@1735 85 ["for"] = "answer_" .. i
bsw@1735 86 },
bsw@1735 87 content = function()
bsw@1735 88 ui.tag{
bsw@1735 89 tag = "input",
bsw@1735 90 attr = {
bsw@1735 91 id = "answer_" .. i,
bsw@1735 92 class = "mdl-radio__button",
bsw@1735 93 type = "radio",
bsw@1735 94 name = "answer",
bsw@1735 95 value = answer_option,
bsw@1735 96 checked = param.get("answer") == answer_option and "checked" or nil,
bsw@1735 97 }
bsw@1735 98 }
bsw@1735 99 ui.tag{
bsw@1735 100 attr = { class = "mdl-radio__label", ['for'] = "answer_" .. i },
bsw@1735 101 content = answer_option
bsw@1735 102 }
bsw@1735 103 end
bsw@1735 104 }
bsw@1735 105 end }
bsw@1745 106 end
bsw@1743 107
bsw@1744 108 elseif question.answer_type == "checkbox" then
bsw@1743 109 for i, answer_option in ipairs(question.answer_options) do
bsw@1743 110 ui.container{ content = function()
bsw@1743 111 ui.tag{ tag = "label", attr = {
bsw@1743 112 class = "mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect",
bsw@1743 113 ["for"] = "answer_" .. i
bsw@1743 114 },
bsw@1743 115 content = function()
bsw@1743 116 ui.tag{
bsw@1743 117 tag = "input",
bsw@1743 118 attr = {
bsw@1743 119 id = "answer_" .. i,
bsw@1749 120 class = "mdl-checkbox__input",
bsw@1743 121 type = "checkbox",
bsw@1743 122 name = "answer_" .. answer_option,
bsw@1743 123 value = "1",
bsw@1743 124 checked = param.get("answer_" .. answer_option) and "checked" or nil,
bsw@1743 125 }
bsw@1743 126 }
bsw@1743 127 ui.tag{
bsw@1743 128 attr = { class = "mdl-checkbox__label", ['for'] = "answer_" .. i },
bsw@1743 129 content = answer_option
bsw@1743 130 }
bsw@1743 131 end
bsw@1743 132 }
bsw@1743 133 end }
bsw@1735 134 end
bsw@1745 135 end
bsw@1743 136
bsw@1745 137 slot.put("<br>")
bsw@1745 138 ui.tag{
bsw@1745 139 tag = "input",
bsw@1745 140 attr = {
bsw@1745 141 type = "submit",
bsw@1745 142 class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
bsw@1745 143 value = _"Next step"
bsw@1745 144 },
bsw@1745 145 content = ""
bsw@1745 146 }
bsw@1735 147 end
bsw@1735 148 }
bsw@1735 149 end
bsw@1735 150 end }
bsw@1735 151 end }
bsw@1735 152 end }
bsw@1735 153 end }

Impressum / About Us