Skip to content

Commit 14f8416

Browse files
authored
Merge pull request #1 from JakeSCahill/forms
Implement feedback form modal
2 parents 4e7263b + f7d2c7f commit 14f8416

File tree

4 files changed

+77
-56
lines changed

4 files changed

+77
-56
lines changed

src/css/feedback-form.css

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@
3939
margin-bottom: 20px;
4040
}
4141

42-
.form-field.submit {
43-
margin: auto;
42+
.form-field.wrapper {
43+
margin: 0 auto;
44+
text-align: center;
4445
}
4546

46-
button[type=submit] {
47+
button[type=submit],
48+
button.close {
4749
background-color: var(--link-font-color);
4850
border: 1px solid #dadce0;
4951
border-radius: 8px;

src/partials/feedback-forms.hbs

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<textarea id="otherText" name="otherText" rows="4" cols="50" placeholder="Please share details or suggestions for this topic."></textarea>
4141
</div>
4242
</div>
43-
<div class="form-field submit">
43+
<div class="form-field wrapper">
4444
<button type="submit" class="button">Submit</button>
4545
</div>
4646
</div>
@@ -90,60 +90,11 @@
9090
<textarea id="otherText" name="otherText" rows="4" cols="50" placeholder="Please share details or suggestions for this topic."></textarea>
9191
</div>
9292
</div>
93-
<div class="form-field submit">
93+
<div class="form-field wrapper">
9494
<button type="submit" class="button">Submit</button>
9595
</div>
9696
</div>
9797
</div>
9898
<div class="modal-overlay" id="modal-overlay">
9999
</div>
100-
</form>
101-
<script>
102-
function encode(data) {
103-
return Object.keys(data)
104-
.map(key => encodeURIComponent(key) + "=" + encodeURIComponent(data[key]))
105-
.join("&");
106-
}
107-
108-
const handleSubmit = function (e) {
109-
e.preventDefault();
110-
console.log(e)
111-
const currentUrl = '{{{ or site.url siteRootPath }}}{{{ page.url }}}'
112-
const beta = {{ is-beta page }}
113-
const version = {{ page.attributes.version }}
114-
115-
var formData = {}
116-
formData.version = version
117-
formData.url = currentUrl
118-
formData.beta = beta
119-
120-
const form = e.target.closest('form')
121-
const feedback = form.querySelector('input[name="feedback"]:checked').value
122-
123-
formData.positiveFeedback = feedback
124-
formData.otherText = form.querySelector('textarea[name="otherText"]').value
125-
126-
formData.email = form.querySelector('input[name="email"]').value
127-
128-
formData.date = new Date().toISOString()
129-
formData.navigator = JSON.stringify({
130-
appName: window.navigator.appName,
131-
appVersion: window.navigator.appVersion,
132-
platform: window.navigator.platform,
133-
userAgent: window.navigator.userAgent,
134-
language: window.navigator.language
135-
})
136-
137-
fetch('/', {
138-
method: 'POST',
139-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
140-
body: encode(formData)
141-
})
142-
.then(() => {
143-
console.log('Form submission success')
144-
})
145-
.catch(error => {
146-
console.error('Form submission error:', error)
147-
})
148-
}
149-
</script>
100+
</form>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<div class="form-field wrapper">
2+
<span class="material-icons MuiIcon-root" aria-hidden="true" style="color: green;overflow: hidden;width: 1em;height: 1em;font-size: 4em;">checkmark</span>
3+
<h4>Thank you for your feedback!</h4>
4+
<p>We appreciate your input and will use it to improve our documentation.</p>
5+
<div class="form-field wrapper">
6+
<button onclick="closeForm(event)" class="button close">Close</button>
7+
</div>
8+
</div>

src/partials/footer-scripts.hbs

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,78 @@ docsearch({
3434
});
3535
</script>
3636
{{/if}}
37+
{{#if page.version }}
3738
<script>
3839
const thumbs = document.querySelectorAll('.thumb');
3940
const positiveModal = document.getElementById('positive');
4041
const negativeModal = document.getElementById('negative');
42+
var currentForm;
4143
4244
thumbs.forEach(function(thumb) {
4345
thumb.addEventListener('click', function() {
4446
if (thumb.id.indexOf('up') !== -1) {
4547
positiveModal.classList.toggle("hidden");
48+
currentForm = positiveModal
4649
} else if (thumb.id.indexOf('down') !== -1) {
4750
negativeModal.classList.toggle("hidden");
51+
currentForm = negativeModal
4852
}
4953
});
5054
});
51-
</script>
55+
</script>
56+
<script>
57+
const handleSubmit = function (e) {
58+
e.preventDefault();
59+
const currentUrl = '{{{ or site.url siteRootPath }}}{{{ page.url }}}'
60+
const beta = {{ is-beta page }}
61+
const version = {{ page.attributes.version }}
62+
63+
const form = event.target;
64+
var formData = new FormData(form);
65+
66+
formData.set('version', version)
67+
formData.set('url', currentUrl)
68+
formData.set('beta', beta)
69+
70+
const formFields = e.target.closest('form')
71+
const feedback = formFields.querySelector('input[name="feedback"]:checked').value
72+
73+
formData.set('positiveFeedback', feedback)
74+
formData.set('otherText', (form.querySelector('textarea[name="otherText"]').value))
75+
76+
formData.set('email', (form.querySelector('input[name="email"]').value))
77+
78+
formData.set('date', new Date().toISOString())
79+
formData.set('navigator', JSON.stringify({
80+
appName: window.navigator.appName,
81+
appVersion: window.navigator.appVersion,
82+
platform: window.navigator.platform,
83+
userAgent: window.navigator.userAgent,
84+
language: window.navigator.language
85+
}))
86+
87+
fetch("/", {
88+
method: "POST",
89+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
90+
body: new URLSearchParams(formData).toString(),
91+
}).then(() => {
92+
console.log('Form submission success')
93+
clearFeedbackModal()
94+
})
95+
.catch(error => {
96+
console.error('Form submission error:', error)
97+
})
98+
}
99+
function clearFeedbackModal() {
100+
var modalBody = currentForm.querySelector('.feedback-modal-body');
101+
modalBody.innerHTML = `
102+
{{> feedback-success-modal}}
103+
`;
104+
}
105+
106+
function closeForm(e) {
107+
e.preventDefault()
108+
currentForm.classList.toggle("hidden");
109+
}
110+
</script>
111+
{{/if}}

0 commit comments

Comments
 (0)