From 22a898403e2e99bf97e250b95e0fedc52e5bc4da Mon Sep 17 00:00:00 2001 From: zuzanna-maria Date: Mon, 9 Jan 2023 23:19:54 +0100 Subject: [PATCH] added date as an answer option to forms --- www/common/translations/messages.json | 1 + www/form/inner.js | 107 +++++++++++++++++++++++++- 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index 75b4a0f7b..ecee99cd0 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1216,6 +1216,7 @@ "form_type_textarea": "Paragraph", "form_type_radio": "Choice", "form_type_multiradio": "Choice Grid", + "form_type_date": "Date", "form_type_checkbox": "Checkbox", "form_type_multicheck": "Checkbox Grid", "form_type_poll": "Poll", diff --git a/www/form/inner.js b/www/form/inner.js index 11f29ba20..25341c8df 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -199,6 +199,24 @@ define([ saveAndCancel ]; }; + + + var editDateOptions = function (cb) { + var evOnSave = Util.mkEvent(); + + evOnSave.reg(function () { + var res = getSaveRes(); + if (!res) { return; } + cb(res); + }); + + var saveAndCancel = saveAndCancelOptions(cb); + + return [ + saveAndCancel + ]; + }; + var editOptions = function (v, isDefaultOpts, setCursorGetter, cb, tmp) { var evOnSave = Util.mkEvent(); @@ -1127,6 +1145,8 @@ define([ printResults: function () { return; }, icon: h('i.cptools.cptools-form-page-break') }, + + section: { defaultOpts: { questions: [] @@ -1643,6 +1663,7 @@ define([ }; }, printResults: function (answers, uid) { // results text + var results = []; var empty = 0; var tally = {}; @@ -1995,6 +2016,89 @@ define([ }, icon: h('i.cptools.cptools-form-grid-radio') }, + date: { + defaultOpts: { + type: 'date', + }, + get: function (opts, a, n, evOnChange) { + opts = Util.clone(TYPES.date.defaultOpts) + var tag = h('input', { + type: opts.type, + }); + + var $tag = $(tag); + $tag.on('change keypress', Util.throttle(function () { + evOnChange.fire(); + }, 500)); + var cursorGetter; + var setCursorGetter = function (f) { cursorGetter = f; }; + + return { + tag: tag, + isEmpty: function () { return !$tag.val().trim(); }, + getValue: function () { + var invalid = $tag.is(':invalid'); + if (invalid) { return; } + return $tag.val(); + + }, + setValue: function (val) { $tag.val(val); }, + setEditable: function (state) { + if (state) { $tag.removeAttr('disabled'); } + else { $tag.attr('disabled', 'disabled'); } + }, + edit: function (cb, tmp) { + + return editDateOptions(cb); + }, + getCursor: function () { return cursorGetter(); }, + reset: function () { $tag.val(''); } + }; + }, + printResults: function (answers, uid) { // results text + var results = []; + var empty = 0; + var tally = {}; + + var isEmpty = function (answer) { + return !answer || !answer.trim(); + }; + + Object.keys(answers).forEach(function (author) { + var obj = answers[author]; + var answer = obj.msg[uid]; + if (isEmpty(answer)) { return empty++; } + Util.inc(tally, answer); + }); + + //if (max < 2) { // there are no duplicates, so just return text + results.push(getEmpty(empty)); + Object.keys(answers).forEach(function (author) { + var obj = answers[author]; + var answer = obj.msg[uid]; + if (!answer || !answer.trim()) { return empty++; } + results.push(h('div.cp-charts-row', h('span.cp-value', answer))); + }); + return h('div.cp-form-results-contained', h('div.cp-charts.cp-text-table', results)); + + + return h('div.cp-charts.cp-bar-table', results); + }, + exportCSV: function (answer, form) { + var opts = form.opts || {}; + var q = form.q || Messages.form_default; + if (answer === false) { + return (opts.items || []).map(function (obj) { + return q + ' | ' + obj.v; + }); + } + if (!answer) { return ['']; } + return (opts.items || []).map(function (obj) { + var uid = obj.uid; + return String(answer[uid] || ''); + }); + }, + icon: h('i.cp-calendar-active.fa.fa-calendar')}, checkbox: { compatible: ['radio', 'checkbox', 'sort'], defaultOpts: { @@ -2767,7 +2871,6 @@ define([ var switchMode = h('button.btn.btn-secondary', Messages.form_showIndividual); $controls.hide().append(switchMode); - var show = function (answers, header) { var order = getFullOrder(content); var elements = order.map(function (uid) { @@ -2791,6 +2894,7 @@ define([ TYPES[type].icon.cloneNode(), h('span', Messages['form_type_'+type]) ]), + q, h('div.cp-form-block-content', print), ]); @@ -3529,7 +3633,6 @@ define([ }); } - var getFormCreator = function (uid, inSection) { if (!APP.isEditor) { return; } var full = !uid;