From a522720a592986883eb2224ab9b7f4839570838c Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 2 Jun 2021 15:37:16 +0200 Subject: [PATCH] Show individual answers --- www/form/app-form.less | 14 ++++ www/form/inner.js | 155 +++++++++++++++++++++++++++++++++++------ 2 files changed, 149 insertions(+), 20 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index 5a85fff24..6c63d193c 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -237,6 +237,20 @@ } } } + .cp-form-individual { + & > *:not(:last-child) { + margin-right: 10px; + } + .cp-form-warning { + color: @cp-limit-bar-warning; + } + .cp-form-friend { + color: @cp_profile-hint; + .fa { + margin-right: 5px; + } + } + } } } diff --git a/www/form/inner.js b/www/form/inner.js index 9cf85bc64..649e8c7b0 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -111,6 +111,13 @@ define([ Messages.form_viewResults = "Go to responses"; Messages.form_viewCreator = "Go to form creator"; + Messages.form_showIndividual = "Show individual answers"; + Messages.form_showSummary = "Show summary"; + Messages.form_answerAnonymous = "Anonymous answer on {0}"; + Messages.form_viewButton = "View"; + Messages.form_backButton = "Back"; + Messages.form_answerName = "Answer from {0} on {1}"; + Messages.form_answerWarning = "Unconfirmed identity"; Messages.form_notAnswered = "And {0} empty answers"; @@ -1258,25 +1265,119 @@ define([ var renderResults = function (content, answers) { var $container = $('div.cp-form-creator-results').empty(); - var form = content.form; - var elements = content.order.map(function (uid) { - var block = form[uid]; - var type = block.type; - var model = TYPES[type]; - if (!model || !model.printResults) { return; } - var print = model.printResults(answers, uid, form); + var controls = h('div.cp-form-creator-results-controls'); + var $controls = $(controls).appendTo($container); + var results = h('div.cp-form-creator-results-content'); + var $results = $(results).appendTo($container); - var q = h('div.cp-form-block-question', block.q || Messages.form_default); - return h('div.cp-form-block', [ - h('div.cp-form-block-type', [ - TYPES[type].icon.cloneNode(), - h('span', Messages['form_type_'+type]) - ]), - q, - h('div.cp-form-block-content', print), - ]); + var summary = true; + var form = content.form; + + var switchMode = h('button.btn.btn-primary', Messages.form_showIndividual); + $controls.append(switchMode); + + var show = function (answers, header) { + var elements = content.order.map(function (uid) { + var block = form[uid]; + var type = block.type; + var model = TYPES[type]; + if (!model || !model.printResults) { return; } + var print = model.printResults(answers, uid, form); + + var q = h('div.cp-form-block-question', block.q || Messages.form_default); + return h('div.cp-form-block', [ + h('div.cp-form-block-type', [ + TYPES[type].icon.cloneNode(), + h('span', Messages['form_type_'+type]) + ]), + q, + h('div.cp-form-block-content', print), + ]); + }); + $results.empty().append(elements); + if (header) { $results.prepend(header); } + }; + show(answers); + + var $s = $(switchMode).click(function () { + $results.empty(); + if (!summary) { + $s.text(Messages.form_showIndividual); + summary = true; + show(answers); + return; + } + summary = false; + $s.text(Messages.form_showSummary); + + var origin, priv; + if (APP.common) { + var metadataMgr = APP.common.getMetadataMgr(); + priv = metadataMgr.getPrivateData(); + origin = priv.origin; + } + var getHref = function (hash) { + if (APP.common) { + return origin + Hash.hashToHref(hash, 'profile'); + } + return '#'; + }; + + var els = Object.keys(answers).map(function (curve) { + var obj = answers[curve]; + var answer = obj.msg; + var date = new Date(obj.time).toLocaleString(); + var text, warning, badge; + if (!answer._userdata || !answer._userdata.name) { + text = Messages._getKey('form_answerAnonymous', [date]); + } else { + var ud = answer._userdata; + var user; + if (ud.profile) { + if (priv && priv.friends[curve]) { + badge = h('span.cp-form-friend', [ + h('i.fa.fa-address-book'), + Messages._getKey('isContact', [ud.name || Messages.anonymous]) + ]); + } + user = h('a', { + href: getHref(ud.profile) // Only used visually + }, Util.fixHTML(ud.name || Messages.anonymous)); + if (curve !== ud.curvePublic || 1) { + warning = h('span.cp-form-warning', Messages.form_answerWarning); + } + // XXX back + // XXX confirm curve and ud.curvePublic match + } else { + user = h('b', Util.fixHTML(ud.name || Messages.anonymous)); + } + text = Messages._getKey('form_answerName', [user.outerHTML, date]); + } + var span = UI.setHTML(h('span'), text); + var viewButton = h('button.btn.btn-secondary.small', Messages.form_viewButton); + var div = h('div.cp-form-individual', [span, viewButton, warning, badge]); + $(viewButton).click(function () { + var res = {}; + res[curve] = obj; + var back = h('button.btn.btn-secondary.small', Messages.form_backButton); + $(back).click(function () { + summary = true; + $s.click(); + }); + var header = h('div.cp-form-individual', [ + span.cloneNode(true), + back + ]); + show(res, header); + }); + $(div).find('a').click(function (e) { + e.preventDefault(); + APP.common.openURL(Hash.hashToHref(ud.profile, 'profile')); + }); + return div; + }); + $results.append(els); }); - $container.append(elements); }; var getFormResults = function () { @@ -1290,19 +1391,22 @@ define([ }; var makeFormControls = function (framework, content, update) { var loggedIn = framework._.sfCommon.isLoggedIn(); + var metadataMgr = framework._.cpNfInner.metadataMgr; if (!loggedIn && !content.answers.anonymous) { return; } var cbox; + cbox = UI.createCheckbox('cp-form-anonymous', + Messages.form_anonymousBox, false, { mark: { tabindex:1 } }); if (loggedIn) { - cbox = UI.createCheckbox('cp-form-anonymous', - Messages.form_anonymousBox, false, { mark: { tabindex:1 } }); if (!content.answers.anonymous || APP.cantAnon) { $(cbox).hide().find('input').attr('disabled', 'disabled'); } - } + var user = metadataMgr.getUserData(); + console.log(user); + var send = h('button.cp-open.btn.btn-primary', update ? Messages.form_update : Messages.form_submit); var reset = h('button.cp-open.btn.btn-danger-alt', Messages.form_reset); $(reset).click(function () { @@ -1316,6 +1420,17 @@ define([ var results = getFormResults(); if (!results) { return; } + var user = metadataMgr.getUserData(); + if (!Util.isChecked($(cbox).find('input'))) { + results._userdata = loggedIn ? { + avatar: user.avatar, + name: user.name, + notifications: user.notifications, + curvePublic: user.curvePublic, + profile: user.profile + } : { name: user.name }; + } + var sframeChan = framework._.sfCommon.getSframeChannel(); sframeChan.query('Q_FORM_SUBMIT', { mailbox: content.answers,