From 669297db4cd3c04c2d1991b9fc0b7787726b44fa Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 12:11:52 +0200 Subject: [PATCH 01/16] Fix UI issues when editing responses is blocked in forms --- www/form/inner.js | 8 ++++++++ www/form/main.js | 3 +-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/www/form/inner.js b/www/form/inner.js index 7524cd57b..f1ad9d89d 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2337,6 +2337,10 @@ define([ $cbox.after(h('div.alert.alert-info', Messages.form_authAnswer)); }); } + if (update && content.answers.cantEdit) { + $cbox.hide(); + anonName = undefined; + } var send = h('button.cp-open.btn.btn-primary', update ? Messages.form_update : Messages.form_submit); var reset = h('button.cp-open.cp-reset-button.btn.btn-danger-alt', Messages.form_reset); @@ -2392,6 +2396,10 @@ define([ $send.text(Messages.form_update); APP.hasAnswered = true; showAnsweredPage(framework, content, { '_time': +new Date() }); + if (content.answers.cantEdit) { + $cbox.hide(); + if ($anonName) { $anonName.hide(); } + } }); }); diff --git a/www/form/main.js b/www/form/main.js index 7d81b1268..8c794a19a 100644 --- a/www/form/main.js +++ b/www/form/main.js @@ -221,8 +221,7 @@ define([ delete results[parsed._proof.key]; } } - // XXX If "allow edition" is disabled, don't override here? - // if (data.cantEdit && results[senderCurve]) { return; } + if (data.cantEdit && results[senderCurve]) { return; } results[senderCurve] = { msg: parsed, hash: hash, From e2adf44a1f6d1cc86789cab8327b64cd352b6773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Wed, 1 Sep 2021 14:37:02 +0100 Subject: [PATCH 02/16] Responsive form settings layout --- www/form/app-form.less | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index d763ed204..03fde2389 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -116,8 +116,19 @@ width: 100% !important; .cp-form-creator-settings { display: flex; - justify-content: space-evenly; + justify-content: space-between; flex-wrap: wrap; + div { + flex-basis: 33.333333%; + padding-right: 20px; + } + } + } + @media screen and (max-width: 600px) { + .cp-form-creator-settings { + div { + flex-basis: 50%; + } } } } From a79a9bdd6346695f33ffc5ea441e6862298eba2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Wed, 1 Sep 2021 15:15:18 +0100 Subject: [PATCH 03/16] Add shadows to question blocks - increase contrast of light theme - prepares upcoming color themes --- customize.dist/src/less2/include/colortheme.less | 6 +++--- www/form/app-form.less | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/customize.dist/src/less2/include/colortheme.less b/customize.dist/src/less2/include/colortheme.less index 18dcb1c0a..cfc931e47 100644 --- a/customize.dist/src/less2/include/colortheme.less +++ b/customize.dist/src/less2/include/colortheme.less @@ -299,7 +299,7 @@ @cp_usergrid-selected-fg: @cryptpad_color_white; // Other -@cp_shadow-color: fade(@cryptpad_color_black, 40%); +@cp_shadow-color: fade(@cryptpad_color_black, 30%); // Apps @cp_app-bg: @cryptpad_color_grey_100; @@ -428,8 +428,8 @@ @cp_calendar-now-fg: @cryptpad_color_grey_200; // Forms -@cp_form-bg1: @cryptpad_color_grey_200; -@cp_form-bg2: @cryptpad_color_grey_100; +@cp_form-bg1: @cryptpad_color_grey_50; +@cp_form-bg2: @cryptpad_color_grey_200; @cp_form-border: @cryptpad_color_grey_200; @cp_form-poll-color: @cryptpad_color_grey_800; @cp_form-poll-no: fade(@cryptpad_color_light_red, 75%); diff --git a/www/form/app-form.less b/www/form/app-form.less index 03fde2389..d2c030df1 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -341,6 +341,7 @@ .cp-form-block { background: @cp_form-bg1; padding: 10px; + box-shadow: 0px 0px 15px @cp_shadow-color; &:not(:last-child) { margin-bottom: 20px; } @@ -699,7 +700,7 @@ margin-top: -10px; margin-right: -10px; i { margin-right: 5px; } - background: fade(@cryptpad_text_col, 15%); + background: fade(@cryptpad_text_col, 10%); } } From d2b24e666dbc5135b1b96fb9e6034b03f38252c9 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 16:25:32 +0200 Subject: [PATCH 04/16] Forms V2 fixes --- www/form/app-form.less | 13 ++++++++++++- www/form/inner.js | 44 +++++++++++++++++++----------------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index d763ed204..1cc538708 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -165,6 +165,13 @@ } } } + div.cp-form-creator-results { + .cp-form-block { + .cp-form-block-content { + overflow-x: auto; + } + } + } div.cp-form-creator-content, div.cp-form-creator-results { max-width: 1000px; min-width: 300px; @@ -393,7 +400,6 @@ } } .cp-form-block-content { - overflow-x: auto; p { a { color: @cryptpad_color_link; @@ -559,6 +565,11 @@ align-items: center; justify-content: center; flex: 1; + .cp-form-submit-actions { + button:not(:last-child) { + margin-right: 10px; + } + } } div.cp-form-creator-results { display: flex; diff --git a/www/form/inner.js b/www/form/inner.js index f1ad9d89d..ad39af67f 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -157,7 +157,7 @@ define([ h('span', Messages.form_textType), typeSelect[0] ]); - typeSelect.onChange.reg(evOnSave.fire()); + typeSelect.onChange.reg(evOnSave.fire); } setCursorGetter(function () { @@ -2176,7 +2176,8 @@ define([ }; var addResultsButton = function (framework, content) { - var $res = $(h('button.cp-toolbar-appmenu.cp-toolbar-form-button', [ + var $container = $('.cp-forms-results-participant'); + var $res = $(h('button.btn.btn-primary.cp-toolbar-form-button', [ h('i.fa.fa-bar-chart'), h('span.cp-button-name', Messages.form_results) ])); @@ -2190,20 +2191,20 @@ define([ $('body').addClass('cp-app-form-results'); renderResults(content, answers); $res.remove(); - var $editor = $(h('button.cp-toolbar-appmenu', [ + var $editor = $(h('button.btn.btn-primary', [ h('i.fa.fa-pencil'), - h('span.cp-button-name', APP.isEditor ? Messages.form_editor : Messages.form_form) + h('span.cp-button-name', Messages.form_editor) ])); $editor.click(function () { $('body').removeClass('cp-app-form-results'); $editor.remove(); addResultsButton(framework, content); }); - framework._.toolbar.$bottomL.append($editor); + $container.prepend($editor); }); }); - framework._.toolbar.$bottomL.append($res); + $container.prepend($res); }; Messages.form_alreadyAnswered = "You've responded to this form on {0}"; // XXX @@ -2213,7 +2214,7 @@ define([ var $formContainer = $('div.cp-form-creator-content').hide(); var $container = $('div.cp-form-creator-answered').empty().css('display', ''); - var viewOnly = content.answers.cantEdit; + var viewOnly = content.answers.cantEdit || APP.isClosed; var action = h('button.btn.btn-primary', [ viewOnly ? h('i.fa.fa-bar-chart') : h('i.fa.fa-pencil'), h('span', viewOnly ? Messages.form_viewAnswer : Messages.form_editAnswer) @@ -2238,7 +2239,10 @@ define([ // If responses are public, show button to view them var responses; if (content.answers.privateKey) { - responses = h('button.btn.btn-default', Messages.form_results); + responses = h('button.btn.btn-default', [ + h('i.fa.fa-bar-chart'), + h('span.cp-button-name', Messages.form_results) + ]); $(responses).click(function () { var sframeChan = framework._.sfCommon.getSframeChannel(); sframeChan.query("Q_FORM_FETCH_ANSWERS", content.answers, function (err, obj) { @@ -2387,10 +2391,7 @@ define([ } evOnChange.fire(false, true); window.onbeforeunload = undefined; - if (!update && content.answers.privateKey) { - // Add results button - addResultsButton(framework, content); - } + $send.removeAttr('disabled'); //UI.alert(Messages.form_sent); // XXX not needed anymore? $send.text(Messages.form_update); @@ -2509,7 +2510,7 @@ define([ APP.formBlocks = []; - if (APP.isClosed && content.answers.privateKey && !APP.isEditor) { + if (APP.isClosed && content.answers.privateKey && !APP.isEditor && !APP.hasAnswered) { var sframeChan = framework._.sfCommon.getSframeChannel(); sframeChan.query("Q_FORM_FETCH_ANSWERS", content.answers, function (err, obj) { var answers = obj && obj.results; @@ -3073,10 +3074,11 @@ define([ var $toolbarContainer = $('#cp-toolbar'); - if (APP.isEditor || priv.form_auditorKey) { - var helpMenu = framework._.sfCommon.createHelpMenu(['text', 'pad']); - $toolbarContainer.after(helpMenu.menu); - framework._.toolbar.$drawer.append(helpMenu.button); + var helpMenu = framework._.sfCommon.createHelpMenu(['text', 'pad']); + $toolbarContainer.after(helpMenu.menu); + framework._.toolbar.$drawer.append(helpMenu.button); + if (!APP.isEditor && !priv.form_auditorKey) { + $(helpMenu.menu).hide(); } var offlineEl = h('div.alert.alert-danger.cp-burn-after-reading', Messages.disconnected); @@ -3126,7 +3128,7 @@ define([ }); }); - Messages.form_makePublicWarning = "Are you sure you want to make responses to this form public? Past and future responses will be visible by participants. This cannot be undone." // XXX existing key + Messages.form_makePublicWarning = "Are you sure you want to make responses to this form public? Past and future responses will be visible by participants. This cannot be undone."; // XXX existing key // Private / public status var resultsType = h('div.cp-form-results-type-container'); var $results = $(resultsType); @@ -3618,9 +3620,6 @@ define([ // If we have a non-anon answer, we can't answer anonymously later if (answers[curve1]) { APP.cantAnon = true; } - // Add results button - if (myAnswers) { addResultsButton(framework, content); } - updateForm(framework, content, false, myAnswers); }); return; @@ -3648,9 +3647,6 @@ define([ APP.hasAnswered = true; // If we have a non-anon answer, we can't answer anonymously later if (!obj._isAnon) { APP.cantAnon = true; } - - // Add results button - if (content.answers.privateKey) { addResultsButton(framework, content); } } checkIntegrity(false); updateForm(framework, content, false, answers); From 415ee6018b4745eb00d98e15dbadba5fad9c1adb Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 16:53:00 +0200 Subject: [PATCH 05/16] Add number of form responses in the button --- www/form/inner.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/www/form/inner.js b/www/form/inner.js index ad39af67f..85c3c0bfd 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2175,11 +2175,18 @@ define([ } }; - var addResultsButton = function (framework, content) { + var getAnswersLength = function (answers) { + return Object.keys(answers || {}).filter(function (key) { + return key && key.slice(0,1) !== "_"; + }).length; + }; + Messages.form_results = "Responses ({0})"; // XXX update key + var addResultsButton = function (framework, content, answers) { var $container = $('.cp-forms-results-participant'); + var l = getAnswersLength(answers); var $res = $(h('button.btn.btn-primary.cp-toolbar-form-button', [ h('i.fa.fa-bar-chart'), - h('span.cp-button-name', Messages.form_results) + h('span.cp-button-name', Messages._getKey('form_results', [l])), ])); $res.click(function () { $res.attr('disabled', 'disabled'); @@ -2198,7 +2205,10 @@ define([ $editor.click(function () { $('body').removeClass('cp-app-form-results'); $editor.remove(); - addResultsButton(framework, content); + sframeChan.query("Q_FORM_FETCH_ANSWERS", content.answers, function (err, obj) { + var answers = obj && obj.results; + addResultsButton(framework, content, answers); + }); }); $container.prepend($editor); }); @@ -2239,12 +2249,18 @@ define([ // If responses are public, show button to view them var responses; if (content.answers.privateKey) { + var l = getAnswersLength(answers); responses = h('button.btn.btn-default', [ h('i.fa.fa-bar-chart'), - h('span.cp-button-name', Messages.form_results) + h('span.cp-button-name', Messages._getKey('form_results', [l])) ]); + var sframeChan = framework._.sfCommon.getSframeChannel(); + sframeChan.query("Q_FORM_FETCH_ANSWERS", content.answers, function (err, obj) { + var answers = obj && obj.results; + var l = getAnswersLength(answers); + $(responses).find('.cp-button-name').text(Messages._getKey('form_results', [l])); + }); $(responses).click(function () { - var sframeChan = framework._.sfCommon.getSframeChannel(); sframeChan.query("Q_FORM_FETCH_ANSWERS", content.answers, function (err, obj) { var answers = obj && obj.results; if (answers) { APP.answers = answers; } @@ -3559,7 +3575,6 @@ define([ } if (APP.isEditor) { - addResultsButton(framework, content); sframeChan.query("Q_FORM_FETCH_ANSWERS", { channel: content.answers.channel, validateKey: content.answers.validateKey, @@ -3567,6 +3582,7 @@ define([ cantEdit: content.answers.cantEdit }, function (err, obj) { var answers = obj && obj.results; + addResultsButton(framework, content, answers); if (answers) { APP.answers = answers; } checkIntegrity(false); updateForm(framework, content, true); From 7f244d532f611ab06e3102f4e52ffbbea4f9aea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Wed, 1 Sep 2021 16:11:50 +0100 Subject: [PATCH 06/16] Style required question submit error --- www/form/app-form.less | 4 ++++ www/form/inner.js | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index 06d559c85..5bc46a085 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -308,6 +308,10 @@ color: @cryptpad_color_link; } } + .alert-danger { + font-size: 1rem; + padding: 10px; + } } .cp-form-anon-answer { text-align: center; diff --git a/www/form/inner.js b/www/form/inner.js index 85c3c0bfd..8bdd1296a 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2500,8 +2500,10 @@ define([ }); var list = h('ul', lis); var divContent = [ - h('span', Messages.form_requiredWarning), - list + h('div.alert.alert-danger', [ + Messages.form_requiredWarning, + list + ]) ]; $errors.empty().append(divContent); }); From 258ccd4e60b7a49ea086a32c127f3c59b6e4319a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Wed, 1 Sep 2021 16:19:43 +0100 Subject: [PATCH 07/16] Use default button for Responses/Editor --- www/form/inner.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/form/inner.js b/www/form/inner.js index 8bdd1296a..7eb2d8fc2 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2184,7 +2184,7 @@ define([ var addResultsButton = function (framework, content, answers) { var $container = $('.cp-forms-results-participant'); var l = getAnswersLength(answers); - var $res = $(h('button.btn.btn-primary.cp-toolbar-form-button', [ + var $res = $(h('button.btn.btn-default.cp-toolbar-form-button', [ h('i.fa.fa-bar-chart'), h('span.cp-button-name', Messages._getKey('form_results', [l])), ])); @@ -2198,7 +2198,7 @@ define([ $('body').addClass('cp-app-form-results'); renderResults(content, answers); $res.remove(); - var $editor = $(h('button.btn.btn-primary', [ + var $editor = $(h('button.btn.btn-default', [ h('i.fa.fa-pencil'), h('span.cp-button-name', Messages.form_editor) ])); From bcd4d88f8112304ee87d295af14ac1901f026e09 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 17:25:16 +0200 Subject: [PATCH 08/16] Fix reordering questions in forms --- www/form/inner.js | 1 + 1 file changed, 1 insertion(+) diff --git a/www/form/inner.js b/www/form/inner.js index 85c3c0bfd..e1e719534 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2987,6 +2987,7 @@ define([ updateAddInline(); if (editable) { + if (APP.mainSortable) { APP.mainSortable.destroy(); } APP.mainSortable = Sortable.create($container[0], { direction: "vertical", filter: "input, button, .CodeMirror, .cp-form-type-sort, .cp-form-block-type.editable", From 15eeaa75f65e95ab44a88032e2e501b46487200c Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 17:32:55 +0200 Subject: [PATCH 09/16] Add logo to the submit page --- www/form/app-form.less | 5 +++++ www/form/inner.js | 27 ++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index 5bc46a085..2a1533268 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -581,11 +581,16 @@ align-items: center; justify-content: center; flex: 1; + flex-flow: column; .cp-form-submit-actions { button:not(:last-child) { margin-right: 10px; } } + .cp-form-view-logo { + margin-top: 100px; + padding-bottom: 20px; + } } div.cp-form-creator-results { display: flex; diff --git a/www/form/inner.js b/www/form/inner.js index 40bc96272..75d4b47af 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2217,6 +2217,20 @@ define([ $container.prepend($res); }; + var getLogo = function () { + var logo = h('div.cp-form-view-logo', [ + h('img', { + src:'/customize/CryptPad_logo_grey.svg?'+ApiConfig.requireConf.urlArgs, + alt:'CryptPad_logo' + }), + h('span', 'CryptPad') + ]); + $(logo).click(function () { + framework._.sfCommon.gotoURL('/drive/'); + }); + return logo; + }; + Messages.form_alreadyAnswered = "You've responded to this form on {0}"; // XXX Messages.form_editAnswer = "Edit my responses"; // XXX Messages.form_viewAnswer = "View my responses"; // XXX @@ -2290,6 +2304,7 @@ define([ new Date(APP.lastAnswerTime).toLocaleString()])), actions ])); + $container.append(getLogo()); }; var getFormResults = function () { @@ -3047,17 +3062,7 @@ define([ // at the bottom var title = framework._.title.title || framework._.title.defaultTitle; $container.prepend(h('h1.cp-form-view-title', title)); - var logo = h('div.cp-form-view-logo', [ - h('img', { - src:'/customize/CryptPad_logo_grey.svg?'+ApiConfig.requireConf.urlArgs, - alt:'CryptPad_logo' - }), - h('span', 'CryptPad') - ]); - $(logo).click(function () { - framework._.sfCommon.gotoURL('/drive/'); - }); - $container.append(logo); + $container.append(getLogo()); if (!answers) { $container.find('.cp-reset-button').attr('disabled', 'disabled'); From cfa4a2708dd831ef0dab726ad6c8b3f0e2ba4ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Wed, 1 Sep 2021 16:42:28 +0100 Subject: [PATCH 10/16] Truncate response chart option values + add full option as tooltip --- www/form/app-form.less | 5 ++++- www/form/inner.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index 5bc46a085..45c075f8a 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -673,7 +673,10 @@ & > span { .cp-form-results-cell(); &.cp-value { - min-width: 200px; + max-width: 200px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } &.cp-bar-container { width: 99%; diff --git a/www/form/inner.js b/www/form/inner.js index 7eb2d8fc2..296d8b79c 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -1020,7 +1020,7 @@ define([ var itemScale = (itemCount / max); rows.push(h('div.cp-form-results-type-radio-data', [ - h('span.cp-value', value), + h('span.cp-value', {'title': value}, value), h('span.cp-count', itemCount), showBar? barGraphic(itemScale): undefined, ])); From ab79f32055f6e45912b7dda0545ce5a9b0743c13 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 17:44:40 +0200 Subject: [PATCH 11/16] Fix forms issues --- www/form/inner.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/www/form/inner.js b/www/form/inner.js index 75d4b47af..d04baa3f7 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2235,6 +2235,8 @@ define([ Messages.form_editAnswer = "Edit my responses"; // XXX Messages.form_viewAnswer = "View my responses"; // XXX var showAnsweredPage = function (framework, content, answers) { + if (APP.submitPage) { return; } + APP.submitPage = true; var $formContainer = $('div.cp-form-creator-content').hide(); var $container = $('div.cp-form-creator-answered').empty().css('display', ''); From 478e95e24cbbcde50f2674eb61ebc2ff0b45cd70 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 18:25:14 +0200 Subject: [PATCH 12/16] Fix forms charts UI --- www/form/app-form.less | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index 913384c58..738909e1d 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -182,6 +182,12 @@ overflow-x: auto; } } + .cp-form-creator-results-timeline { + margin-bottom: 20px; + table.cp-charts.column { + overflow-x: initial; + } + } } div.cp-form-creator-content, div.cp-form-creator-results { max-width: 1000px; @@ -611,7 +617,6 @@ .cp-form-creator-results-controls { margin-bottom: 20px; - margin-top: 20px; //background: @cp_form-bg1; //padding: 10px; button { @@ -674,11 +679,12 @@ } .cp-form-results-type-radio-data { display: table-row; - border: 1px solid @cp_form-border; + border: 1px solid transparent; & > span { .cp-form-results-cell(); &.cp-value { max-width: 200px; + min-width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -687,10 +693,14 @@ width: 99%; padding: 0px; position: relative; + background: transparent; + border-left-width: 15px; + border-right-width: 15px; .cp-bar { position: absolute; - background: @cryptpad_color_brand; - height: 100%; + background: fade(@cryptpad_text_col, 50%); + height: 50%; + top: 25%; } } } From 513c2d51fc8004c361b313170f6d701998ff4134 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 18:26:56 +0200 Subject: [PATCH 13/16] Update logo redirect in forms --- www/form/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/form/inner.js b/www/form/inner.js index 9f09f0115..e5c4e5171 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2226,7 +2226,7 @@ define([ h('span', 'CryptPad') ]); $(logo).click(function () { - framework._.sfCommon.gotoURL('/drive/'); + APP.framework._.sfCommon.gotoURL('/'); }); return logo; }; From 2ebe2b955cb0f371c851f0b2ad6c69737a6a61d6 Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 1 Sep 2021 18:29:06 +0200 Subject: [PATCH 14/16] Move submit message in the submit page --- www/form/inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/form/inner.js b/www/form/inner.js index e5c4e5171..d2621f257 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2301,9 +2301,9 @@ define([ var title = framework._.title.title || framework._.title.defaultTitle; $container.append(h('div.cp-form-submit-success', [ h('h3.cp-form-view-title', title), - description, h('div.alert.alert-info', Messages._getKey('form_alreadyAnswered', [ new Date(APP.lastAnswerTime).toLocaleString()])), + description, actions ])); $container.append(getLogo()); From cd65bea28cf9eab0d92321f0276b3b0b75ff03f6 Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 2 Sep 2021 11:00:03 +0200 Subject: [PATCH 15/16] Add 'Answer as ...' in forms --- www/form/app-form.less | 4 ++++ www/form/inner.js | 27 ++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/www/form/app-form.less b/www/form/app-form.less index 738909e1d..d17045009 100644 --- a/www/form/app-form.less +++ b/www/form/app-form.less @@ -331,6 +331,10 @@ margin-left: 10px; } } + .cp-form-anon-answer-registered { + font-style: italic; + margin-left: 10px; + } } } diff --git a/www/form/inner.js b/www/form/inner.js index d2621f257..9dc726ee4 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -2346,6 +2346,7 @@ define([ } else if (content.answers.anonymous) { // Answers aren't anonymous and guests are allowed // Guests can set a username and logged in users can answer anonymously + var $anon; if (!loggedIn) { anonName = h('div.cp-form-anon-answer-input', [ Messages.form_answerAs, @@ -2355,15 +2356,24 @@ define([ }) ]); $anonName = $(anonName).hide(); - $anonBox.on('change', function () { - if (Util.isChecked($anonBox)) { $anonName.hide(); } - else { $anonName.show(); } - }); } else if (APP.cantAnon) { // You've already answered with your credentials $cbox.hide(); $anonBox.attr('disabled', 'disabled').prop('checked', false); } + if (!anonName) { + anonName = h('div.cp-form-anon-answer-input', [ + Messages.form_answerAs, + h('span.cp-form-anon-answer-registered', user.name || Messages.anonymous) + ]); + } + if (!APP.cantAnon) { + var $anon = $(anonName).hide(); + $anonBox.on('change', function () { + if (Util.isChecked($anonBox)) { $anon.hide(); } + else { $anon.show(); } + }); + } } else { // Answers don't have to be anonymous and only logged in users can answer // ==> they have to answer with their keys so we know their name too @@ -2374,7 +2384,7 @@ define([ $cbox.after(h('div.alert.alert-info', Messages.form_authAnswer)); }); } - if (update && content.answers.cantEdit) { + if (update && content.answers.cantEdit || APP.isClosed) { $cbox.hide(); anonName = undefined; } @@ -3036,6 +3046,13 @@ define([ new Date(answers._time || APP.lastAnswerTime).toLocaleString()]))); } + if (APP.isClosed) { + APP.formBlocks.forEach(function (b) { + if (!b.setEditable) { return; } + b.setEditable(false); + }); + } + // In view mode, add "Submit" and "reset" buttons $container.append(makeFormControls(framework, content, Boolean(answers), evOnChange)); From bbd449855fcd604f0cc603db25675c221e71830b Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 2 Sep 2021 11:04:18 +0200 Subject: [PATCH 16/16] Cancel adding a closing date --- www/form/inner.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/www/form/inner.js b/www/form/inner.js index 9dc726ee4..f96bb6d13 100644 --- a/www/form/inner.js +++ b/www/form/inner.js @@ -3399,14 +3399,21 @@ define([ }); var save = h('button.btn.btn-primary', Messages.settings_save); $(save).click(function () { + if (dataPicker.value === '') { + return void refreshEndDate(); + } var d = picker.parseDate(datePicker.value); content.answers.endDate = +d; framework.localChange(); refreshEndDate(); }); + var cancel = h('button.btn.btn-danger', h('i.fa.fa-times')); + $(cancel).click(function () { + refreshEndDate(); + }); var confirmContent = h('div', [ h('div', Messages.form_setEnd), - h('div.cp-form-input-block', [datePicker, save]), + h('div.cp-form-input-block', [datePicker, save, cancel]), ]); $button.after(confirmContent); $button.remove();