Revision c6505d41
Added by koszko over 1 year ago
index.json | ||
---|---|---|
196 | 196 |
"identifier": "google-forms-fix", |
197 | 197 |
"long_name": "Google Forms submission (incomplete) fix", |
198 | 198 |
"uuid": "23f51630-6118-4ef2-9709-2a1dba7ebb52", |
199 |
"version": [2022, 2, 21],
|
|
199 |
"version": [2022, 3, 7],
|
|
200 | 200 |
"revision": 1, |
201 | 201 |
"description": "Enable filling and submitting of Google Forms without nonfree JavaScript.", |
202 | 202 |
"dependencies": [], |
... | ... | |
206 | 206 |
"identifier": "google-forms-fix", |
207 | 207 |
"long_name": "Google Forms submission (incomplete) fix", |
208 | 208 |
"uuid": "0aba91dc-e552-4276-a981-1a56d30f9058", |
209 |
"version": [2022, 2, 21],
|
|
209 |
"version": [2022, 3, 7],
|
|
210 | 210 |
"description": "Enable filling and submitting of Google Forms without nonfree JavaScript.", |
211 | 211 |
"payloads": { |
212 |
// * https://old.reddit.com/search?q=url%3Adocs.google.com%2Fforms <- to get more testing links |
|
213 |
// * https://docs.google.com/forms/d/e/1FAIpQLSeptahnx4tj-mr2QIzKiy1LN0HrZVR88-XwVtKDb33KbshaQA/viewform |
|
214 |
// * https://docs.google.com/forms/d/e/1FAIpQLSeswHRJzUMWnCQPnaGHeB3xM7YyJdWMf2eMpHJOnetLEoeXmw/viewform |
|
215 |
// * https://docs.google.com/forms/d/e/1FAIpQLSeptahnx4tj-mr2QIzKiy1LN0HrZVR88-XwVtKDb33KbshaQA/viewform |
|
212 |
// * https://old.reddit.com/search?q=url%3Adocs.google.com%2Fforms <- to get testing links |
|
213 |
// note: forms tend to expire quickly |
|
216 | 214 |
"https://docs.google.com/forms/d/**": { |
217 | 215 |
"identifier": "google-forms-fix" |
216 |
}, |
|
217 |
"https://docs.google.com/forms/u/1/d/**": { |
|
218 |
"identifier": "google-forms-fix" |
|
218 | 219 |
} |
219 | 220 |
} |
220 | 221 |
}, { |
src/google_forms.js | ||
---|---|---|
24 | 24 |
*/ |
25 | 25 |
|
26 | 26 |
var form = document.forms[0]; |
27 |
|
|
28 |
/* Fix form fields. */ |
|
27 | 29 |
for (let div of form.querySelectorAll('div[data-params]')) { |
28 | 30 |
var data = JSON.parse('[' + div.dataset.params.substring(4)); |
29 | 31 |
var name = 'entry.' + data[0][4][0][0]; |
30 |
var input = div.querySelector('input'); |
|
32 |
var input = div.querySelector('input, textarea');
|
|
31 | 33 |
|
32 | 34 |
if (!input) { |
33 | 35 |
console.error(`cannot enable input ${name}`, div); |
34 | 36 |
continue; |
35 | 37 |
} |
36 | 38 |
|
37 |
if (input.name === name + '_sentinel') { // Radio |
|
38 |
for (const input_div of div.querySelectorAll('.appsMaterialWizToggleRadiogroupEl')) { |
|
39 |
if (input.name === name + '_sentinel') { |
|
40 |
/* Handle radio buttons. */ |
|
41 |
for (const input_div of div.querySelectorAll('[data-value]')) { |
|
39 | 42 |
const new_radio = document.createElement('input'); |
40 | 43 |
new_radio.type = 'radio'; |
41 | 44 |
new_radio.name = name; |
... | ... | |
45 | 48 |
} else { |
46 | 49 |
input.removeAttribute('disabled'); |
47 | 50 |
input.name = name; |
51 |
|
|
52 |
/* Enlarge textareas and make them stand out from mere input fields. */ |
|
53 |
if (input.tagName === "TEXTAREA") { |
|
54 |
input.style.height = "8em"; |
|
55 |
input.style.overflowY = "scroll"; |
|
56 |
} |
|
48 | 57 |
} |
49 | 58 |
} |
50 | 59 |
|
51 |
for (div of document.querySelectorAll('.quantumWizTextinputPaperinputPlaceholder'))
|
|
52 |
div.remove();
|
|
60 |
/* Remove placeholders in text input fields and textareas. */
|
|
61 |
document.querySelectorAll('[jsname=LwH6nd]').forEach(n => n.remove());
|
|
53 | 62 |
|
63 |
/* Enable the form sumbission button (if any). */ |
|
64 |
for (const submit_but of document.querySelectorAll('[jsname=M2UYVd]')) |
|
65 |
submit_but.addEventListener("click", () => form.submit()); |
|
66 |
|
|
67 |
/* Enable the "next page" button (if any). */ |
|
54 | 68 |
function goToNext() |
55 | 69 |
{ |
56 | 70 |
var next = document.createElement('input'); |
... | ... | |
61 | 75 |
form.submit(); |
62 | 76 |
} |
63 | 77 |
|
64 |
const submit_selector = ".freebirdFormviewerViewNavigationSubmitButton"; |
|
65 |
const next_selector = ".freebirdFormviewerViewNavigationNoSubmitButton"; |
|
66 |
for (const but_div of document.querySelectorAll(submit_selector)) |
|
67 |
but_div.addEventListener("click", () => form.submit()); |
|
68 |
|
|
69 |
for (const but_div of document.querySelectorAll(next_selector)) |
|
70 |
but_div.addEventListener("click", goToNext); |
|
78 |
for (const next_but of document.querySelectorAll('[jsname=OCpkoe]')) |
|
79 |
next_but.addEventListener("click", goToNext); |
|
71 | 80 |
|
72 |
// TODO: back, instate previous entries, fix form parts that still don't work |
|
81 |
// TODO: |
|
82 |
// * support "back" with instatiation of previous entries |
|
83 |
// * find and fix form parts that still don't work (if any) |
Also available in: Unified diff
update Google Forms fix