Fossil SCM

Bug fixes: /attachadd?legacyArgName=X was (A) having its form pulled out from underneath it by JS and (B) not handling ticket IDs properly.

stephan 2026-06-12 15:22 UTC forum-editor-2026
Commit fd327fd26136546a924e2377f552bd66bd347705780be6e5b920ac892e92dbbf
2 files changed +2 -2 +3 -2
+2 -2
--- src/attach.c
+++ src/attach.c
@@ -585,11 +585,11 @@
585585
const char *zTechNote,
586586
const char *zTicket,
587587
const char *zWikiPage,
588588
const char *zComment,
589589
const char *zFrom){
590
- form_begin("enctype='multipart/form-data' class='remove-on-load'",
590
+ form_begin("enctype='multipart/form-data' id='attachadd-legacy-form'",
591591
"%R/attachadd");
592592
@ <div>\
593593
@ File to Attach:
594594
@ <input type="file" name="f" size="60"><br>
595595
@ Description:<br>
@@ -750,11 +750,11 @@
750750
style_header("Add Attachment");
751751
if( !goodCaptcha ){
752752
@ <p class="generalError">Error: Incorrect security code.</p>
753753
}
754754
@ <h2>Add Attachment To %s(zTargetType)</h2>
755
- attach_render_legacy_form(zForumPost, zTechNote, zTechNote, zPage,
755
+ attach_render_legacy_form(zForumPost, zTechNote, zTkt, zPage,
756756
zComment, zFrom);
757757
builtin_fossil_js_bundle_or("attach", NULL);
758758
style_finish_page();
759759
fossil_free(zTargetType);
760760
fossil_free(zExtraFree);
761761
--- src/attach.c
+++ src/attach.c
@@ -585,11 +585,11 @@
585 const char *zTechNote,
586 const char *zTicket,
587 const char *zWikiPage,
588 const char *zComment,
589 const char *zFrom){
590 form_begin("enctype='multipart/form-data' class='remove-on-load'",
591 "%R/attachadd");
592 @ <div>\
593 @ File to Attach:
594 @ <input type="file" name="f" size="60"><br>
595 @ Description:<br>
@@ -750,11 +750,11 @@
750 style_header("Add Attachment");
751 if( !goodCaptcha ){
752 @ <p class="generalError">Error: Incorrect security code.</p>
753 }
754 @ <h2>Add Attachment To %s(zTargetType)</h2>
755 attach_render_legacy_form(zForumPost, zTechNote, zTechNote, zPage,
756 zComment, zFrom);
757 builtin_fossil_js_bundle_or("attach", NULL);
758 style_finish_page();
759 fossil_free(zTargetType);
760 fossil_free(zExtraFree);
761
--- src/attach.c
+++ src/attach.c
@@ -585,11 +585,11 @@
585 const char *zTechNote,
586 const char *zTicket,
587 const char *zWikiPage,
588 const char *zComment,
589 const char *zFrom){
590 form_begin("enctype='multipart/form-data' id='attachadd-legacy-form'",
591 "%R/attachadd");
592 @ <div>\
593 @ File to Attach:
594 @ <input type="file" name="f" size="60"><br>
595 @ Description:<br>
@@ -750,11 +750,11 @@
750 style_header("Add Attachment");
751 if( !goodCaptcha ){
752 @ <p class="generalError">Error: Incorrect security code.</p>
753 }
754 @ <h2>Add Attachment To %s(zTargetType)</h2>
755 attach_render_legacy_form(zForumPost, zTechNote, zTkt, zPage,
756 zComment, zFrom);
757 builtin_fossil_js_bundle_or("attach", NULL);
758 style_finish_page();
759 fossil_free(zTargetType);
760 fossil_free(zExtraFree);
761
--- src/fossil.attach.js
+++ src/fossil.attach.js
@@ -9,11 +9,10 @@
99
(function(namespace){
1010
"use strict";
1111
const F = namespace, D = F.dom;
1212
1313
let idCounter = 0;
14
- document.body.querySelectorAll('.remove-on-load').forEach(e=>e.remove());
1514
/**
1615
Implements a multi-file selector widget. Intended to be plugged
1716
in to places in Fossil's UI where attachments can be assigned to
1817
an artifact.
1918
*/
@@ -576,13 +575,15 @@
576575
F.Attacher = Attacher;
577576
578577
F.onPageLoad(function(){
579578
const eAttachWrapper = document.querySelector('#attachadd-form-wrapper');
580579
if( eAttachWrapper ){
581
- /* This page is /attachadd v2 or a workalike. eAttachWrapper holds
580
+ /* This page is /attachadd v2. eAttachWrapper holds
582581
input[type=hidden] fields for use in attaching files and is
583582
where we inject a file attachment widget. */
583
+ document.body.querySelectorAll('#attachadd-legacy-form').forEach(e=>e.remove());
584
+
584585
eAttachWrapper.classList.remove('hidden');
585586
const urlArgs = new URLSearchParams(window.location.search);
586587
let zTarget = urlArgs.get('target');
587588
let zTo = urlArgs.get('to') || urlArgs.get('from');
588589
const eBtnSubmit = D.button("Submit");
589590
--- src/fossil.attach.js
+++ src/fossil.attach.js
@@ -9,11 +9,10 @@
9 (function(namespace){
10 "use strict";
11 const F = namespace, D = F.dom;
12
13 let idCounter = 0;
14 document.body.querySelectorAll('.remove-on-load').forEach(e=>e.remove());
15 /**
16 Implements a multi-file selector widget. Intended to be plugged
17 in to places in Fossil's UI where attachments can be assigned to
18 an artifact.
19 */
@@ -576,13 +575,15 @@
576 F.Attacher = Attacher;
577
578 F.onPageLoad(function(){
579 const eAttachWrapper = document.querySelector('#attachadd-form-wrapper');
580 if( eAttachWrapper ){
581 /* This page is /attachadd v2 or a workalike. eAttachWrapper holds
582 input[type=hidden] fields for use in attaching files and is
583 where we inject a file attachment widget. */
 
 
584 eAttachWrapper.classList.remove('hidden');
585 const urlArgs = new URLSearchParams(window.location.search);
586 let zTarget = urlArgs.get('target');
587 let zTo = urlArgs.get('to') || urlArgs.get('from');
588 const eBtnSubmit = D.button("Submit");
589
--- src/fossil.attach.js
+++ src/fossil.attach.js
@@ -9,11 +9,10 @@
9 (function(namespace){
10 "use strict";
11 const F = namespace, D = F.dom;
12
13 let idCounter = 0;
 
14 /**
15 Implements a multi-file selector widget. Intended to be plugged
16 in to places in Fossil's UI where attachments can be assigned to
17 an artifact.
18 */
@@ -576,13 +575,15 @@
575 F.Attacher = Attacher;
576
577 F.onPageLoad(function(){
578 const eAttachWrapper = document.querySelector('#attachadd-form-wrapper');
579 if( eAttachWrapper ){
580 /* This page is /attachadd v2. eAttachWrapper holds
581 input[type=hidden] fields for use in attaching files and is
582 where we inject a file attachment widget. */
583 document.body.querySelectorAll('#attachadd-legacy-form').forEach(e=>e.remove());
584
585 eAttachWrapper.classList.remove('hidden');
586 const urlArgs = new URLSearchParams(window.location.search);
587 let zTarget = urlArgs.get('target');
588 let zTo = urlArgs.get('to') || urlArgs.get('from');
589 const eBtnSubmit = D.button("Submit");
590

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button