Skip to content

Commit 998c334

Browse files
committed
Fix #309 -- handle submit buttons form* attributes
1 parent b852632 commit 998c334

File tree

5 files changed

+17
-3
lines changed

5 files changed

+17
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,4 @@ target/
5959
node_modules
6060

6161
*.min.js
62+
.python-version

s3file/static/s3file/js/s3file.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
form.appendChild(submitInput)
115115
}
116116

117-
function uploadS3Inputs (form) {
117+
function uploadS3Inputs (form, submitter) {
118118
window.uploading = 0
119119
form.loaded = 0
120120
form.total = 0
@@ -136,6 +136,15 @@
136136
window.uploading += 1
137137
uploadFiles(form, input, input.name)
138138
})
139+
// override form attributes with submit button attributes
140+
if (submitter) {
141+
form.action = submitter.getAttribute('formaction') || form.action
142+
form.method = submitter.getAttribute('formmethod') || form.method
143+
form.enctype = submitter.getAttribute('formEnctype') || form.enctype
144+
form.formnovalidate = submitter.getAttribute('formnovalidate') || form.novalidate
145+
form.target = submitter.getAttribute('formtarget') || form.target
146+
}
147+
139148
waitForAllFiles(form)
140149
}
141150

@@ -147,7 +156,7 @@
147156
forms.forEach(function (form) {
148157
form.addEventListener('submit', function (e) {
149158
e.preventDefault()
150-
uploadS3Inputs(e.target)
159+
uploadS3Inputs(e.target, e.submitter)
151160
})
152161
var submitButtons = form.querySelectorAll('input[type=submit], button[type=submit]')
153162
Array.from(submitButtons).forEach(function (submitButton) {

tests/test_forms.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ def test_file_insert_submit_value(
187187
with wait_for_page_load(driver, timeout=10):
188188
save_button.click()
189189
assert "save" in driver.page_source
190+
assert "formaction" not in driver.page_source
190191

191192
driver.get(live_server + self.create_url)
192193
file_input = driver.find_element(By.XPATH, "//input[@name='file']")
@@ -197,6 +198,7 @@ def test_file_insert_submit_value(
197198
save_button.click()
198199
assert "save_continue" in driver.page_source
199200
assert "continue_value" in driver.page_source
201+
assert "formaction" in driver.page_source
200202

201203
@pytest.mark.selenium
202204
def test_progress(self, driver, live_server, upload_file, freeze_upload_folder):

tests/testapp/templates/form.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
{% csrf_token %}
1616
{{ form }}
1717
<input type="submit" name="save" value="Save"/>
18-
<button type="submit" name="save_continue" value="continue_value">Save &amp; continue</button>
18+
<button type="submit" name="save_continue" value="continue_value" formaction="?formaction=1">Save &amp; continue</button>
1919
<div class="progress">
2020
<div class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0"
2121
aria-valuemax="100">0%

tests/testapp/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def form_valid(self, form):
2626
"file": self.request.FILES.getlist("file"),
2727
"other_file": self.request.FILES.getlist("other_file"),
2828
},
29+
"QUERY_STRING": self.request.GET,
2930
},
3031
status=201,
3132
encoder=FileEncoder,
@@ -45,6 +46,7 @@ def form_valid(self, form):
4546
"file": self.request.FILES.getlist("file"),
4647
"other_file": self.request.FILES.getlist("other_file"),
4748
},
49+
"QUERY_STRING": self.request.GET,
4850
},
4951
status=201,
5052
encoder=FileEncoder,

0 commit comments

Comments
 (0)