From 3f281a729cb35f12e32bba160e9acbd71a0580da Mon Sep 17 00:00:00 2001 From: Maggie Allen Date: Wed, 21 Aug 2019 17:29:01 +0100 Subject: [PATCH 1/3] =?UTF-8?q?reinstate=20an=20old=20demo=20app=20as=20de?= =?UTF-8?q?mo-simple=20=20=F0=9F=90=BF=20v2.12.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demos/app.js | 8 ++++++++ demos/{demo-old.html => demo-simple.html} | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) rename demos/{demo-old.html => demo-simple.html} (92%) diff --git a/demos/app.js b/demos/app.js index 02c4a55..db6881e 100644 --- a/demos/app.js +++ b/demos/app.js @@ -26,6 +26,14 @@ app.get('/', (req, res) => { }); }); +app.get('/simple', (req, res) => { + res.render('demo-simple', { + title: 'Test App', + question: 'How was your visit today?', + type: 'radio-buttons' + }); +}); + function runPa11yTests () { const spawn = require('child_process').spawn; const pa11y = spawn('pa11y-ci'); diff --git a/demos/demo-old.html b/demos/demo-simple.html similarity index 92% rename from demos/demo-old.html rename to demos/demo-simple.html index 484c997..fee8848 100644 --- a/demos/demo-old.html +++ b/demos/demo-simple.html @@ -9,7 +9,7 @@

Demo of n-feedback

- {{> template }} + {{> demos/feedback-partial }}
From 32fbea3ea7879e9b3c54064d46bf1b0d04fda3c6 Mon Sep 17 00:00:00 2001 From: Maggie Allen Date: Wed, 21 Aug 2019 17:37:01 +0100 Subject: [PATCH 2/3] Refactor to remove the use of FormData MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🐿 v2.12.4 --- index.js | 29 +++++++++++++++++++++-------- package.json | 1 - 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 6bd055b..cbc05aa 100644 --- a/index.js +++ b/index.js @@ -3,12 +3,11 @@ const surveyBuilder = require('./src/survey-builder'); const postResponse = require('./src/post-response'); const getAdditionalInfo = require('./src/get-additional-info'); const dictionary = require('./src/dictionary'); -require('formdata-polyfill'); function getSurveyData ( surveyId ){ - // const surveyDataURL = 'http://local.ft.com:5005/public/survey.json'; - // const surveyDataURL = `http://local.ft.com:3002/v1/survey/${surveyId}`; - const surveyDataURL = `https://www.ft.com/__feedback-api/v1/survey/${surveyId}`; + // const surveyDataURL = 'http://local.ft.com:5005/public/survey.json'; // for local development + // const surveyDataURL = `http://local.ft.com:3002/v1/survey/${surveyId}`; // for local development via npm linking + const surveyDataURL = `https://www.ft.com/__feedback-api/v1/survey/${surveyId}`; // production link return fetch(surveyDataURL, { headers: { 'Accept': 'application/json', @@ -121,10 +120,24 @@ function validate (block){ function generateResponse (overlay){ const context = overlay.content; const form = document.querySelector('.n-feedback__survey__wrapper-form', context); - const response = {}; - (new FormData(form)).forEach((val, key) => { - response[key] = val; - }); + const formInputs = form.getElementsByTagName('input'); + const formTextArea = form.getElementsByTagName('textArea'); + const questionID = formInputs.item(1).name; + const textFieldId = formTextArea.item(0).name; + const textFieldValue = formTextArea.item(0).value; + let formSurveyId; + let formChecked; + + for (let i = 0; i < formInputs.length; i++) { + if (formInputs[i].name === 'surveyId') { formSurveyId = formInputs[i].value; } + if (formInputs[i].checked === true) { formChecked = formInputs[i].value; } + } + + const response = { + surveyId: formSurveyId, + [questionID]: formChecked, + [textFieldId]: textFieldValue + }; return response; } diff --git a/package.json b/package.json index 4f18655..510b8ec 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "webpack-cli": "^3.1.2" }, "dependencies": { - "formdata-polyfill": "^3.0.12", "handlebars": "^4.1.2" } } From 7088db29be22abdc4d503605376702a117c78404 Mon Sep 17 00:00:00 2001 From: Maggie Allen Date: Thu, 22 Aug 2019 17:07:29 +0100 Subject: [PATCH 3/3] =?UTF-8?q?refactor=20form=20data=20collection=20=20?= =?UTF-8?q?=F0=9F=90=BF=20v2.12.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/index.js b/index.js index cbc05aa..74e393c 100644 --- a/index.js +++ b/index.js @@ -120,26 +120,27 @@ function validate (block){ function generateResponse (overlay){ const context = overlay.content; const form = document.querySelector('.n-feedback__survey__wrapper-form', context); - const formInputs = form.getElementsByTagName('input'); - const formTextArea = form.getElementsByTagName('textArea'); - const questionID = formInputs.item(1).name; - const textFieldId = formTextArea.item(0).name; - const textFieldValue = formTextArea.item(0).value; - let formSurveyId; - let formChecked; - - for (let i = 0; i < formInputs.length; i++) { - if (formInputs[i].name === 'surveyId') { formSurveyId = formInputs[i].value; } - if (formInputs[i].checked === true) { formChecked = formInputs[i].value; } - } + const data = {}; - const response = { - surveyId: formSurveyId, - [questionID]: formChecked, - [textFieldId]: textFieldValue - }; + form.querySelectorAll('input,textarea').forEach((element) => { + if (element.type === 'radio') { + if (element.checked) { + data[element.name] = element.value; + } + } + + else if (element.type === 'checkbox') { + if (element.checked) { + data[element.name] = (data[element.name] || []).concat(element.value); + } + } + + else { + data[element.name] = element.value; + } + }); - return response; + return data; } function toggleOverlay (overlay){