Skip to content

Commit 1615e23

Browse files
committed
- issue2550796: Calendar and Classhelp selection tools don't cause
onchange event to be triggered. Using the helper popups for modifying lists of users, lists of issues, dates etc.. now trigger the change event on the form's field. This allows onchange javascript to trigger to highlight changes, recalculate other form values etc. See ``upgrading.txt`` for details on applying these changes to your tracker.
1 parent 1c39e69 commit 1615e23

File tree

9 files changed

+98
-5
lines changed

9 files changed

+98
-5
lines changed

CHANGES.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ Features:
149149
- Number properties now have an optional attribute use_double to request
150150
double precision float as the storage type for this property. (Ralf
151151
Schlatterbeck)
152+
- issue2550796: Calendar and Classhelp selection tools don't cause
153+
onchange event to be triggered.
154+
Using the helper popups for modifying lists of users, lists of
155+
issues, dates etc.. now trigger the change event on the form's
156+
field. This allows onchange javascript to trigger to highlight
157+
changes, recalculate other form values etc. See ``upgrading.txt``
158+
for details on applying these changes to your tracker. (John Rouillard)
152159

153160
Fixed:
154161

doc/upgrading.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,34 @@ the page for the newly created item. The url value assigned to
207207
__redirect_to must be under the tracker's base url and must be properly
208208
url encoded.
209209

210+
Helper popups trigger change events on the original page
211+
--------------------------------------------------------
212+
213+
The helper popups used to set dates (from a calendar), change lists of
214+
users or lists of issues did not notify the browser that the fields
215+
had been changed. This release adds code to trigger the change event.
216+
217+
To add the change event to the calendar popup, you don't need to do
218+
any changes to the tracker. It is all done in the roundup python code
219+
in templating.py.
220+
221+
To add the change event when updating users using the help-submit
222+
template, copy
223+
share/roundup/templates/devel/html/_generic.help-submit.html and
224+
replace your tracker's html/_generic.help-submit.html. If you have
225+
done local changes to this file, change your file to include the code
226+
that defines the onclick event for the input field with
227+
id="btn_apply".
228+
229+
To add the change event when updating lists of issues copy
230+
share/roundup/templates/devel/html/help_controls.js to your tracer's
231+
html directory. If you have made local changes to the javascript file,
232+
merge the two if/else blocks labeled::
233+
234+
/* trigger change event on the field we changed */
235+
236+
into your help_controls.js
237+
210238
html/_generic.404.html in trackers use page template
211239
----------------------------------------------------
212240

roundup/cgi/templating.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3083,8 +3083,9 @@ def html_calendar(self, request):
30833083
for week in calendar.monthcalendar(display.year, display.month):
30843084
res.append(' <tr>')
30853085
for day in week:
3086-
link = "javascript:form[field].value = '%d-%02d-%02d'; " \
3087-
"window.close ();"%(display.year, display.month, day)
3086+
link = "javascript:form[field].value = '%d-%02d-%02d'; " \
3087+
"if ('createEvent' in document) { var evt = document.createEvent('HTMLEvents'); evt.initEvent('change', true, true); form[field].dispatchEvent(evt); } else { form[field].fireEvent('onchange'); }" \
3088+
"window.close ();"%(display.year, display.month, day)
30883089
if (day == curr_date.day and display.month == curr_date.month
30893090
and display.year == curr_date.year):
30903091
# highlight

share/roundup/templates/classic/html/_generic.help-submit.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
onclick="text_field.value=original_field;f=getListForm();if (f) {reviseList_framed(f, this)};return false"
6262
/>
6363
<input type="submit" id="btn_apply" class="apply"
64-
value=" Apply " onclick="callingform[field].value=text_field.value; parent.close();"
64+
value=" Apply " onclick="callingform[field].value=text_field.value; if ('createEvent' in document) { var evt = document.createEvent('HTMLEvents'); evt.initEvent('change', true, true); callingform[field].dispatchEvent(evt); } else
65+
{ callingform[field].fireEvent('onchange'); } parent.close();"
6566
i18n:attributes="value" />
6667
</form>
6768
<script type="text/javascript"><!--

share/roundup/templates/classic/html/help_controls.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,30 @@ function updateOpener() {
5252
// write back to opener window
5353
if (document.frm_help.check==undefined) { return; }
5454
form[field].value = text_field.value;
55+
56+
/* trigger change event on the field we changed */
57+
if ("createEvent" in document) {
58+
var evt = document.createEvent("HTMLEvents");
59+
evt.initEvent("change", true, true);
60+
form[field].dispatchEvent(evt);
61+
}
62+
else
63+
form[field].fireEvent("onchange");
5564
}
5665

5766
function updateList() {
5867
// write back to opener window
5968
if (document.frm_help.check==undefined) { return; }
6069
form[field].value = determineList();
70+
71+
/* trigger change event on the field we changed */
72+
if ("createEvent" in document) {
73+
var evt = document.createEvent("HTMLEvents");
74+
evt.initEvent("change", true, true);
75+
form[field].dispatchEvent(evt);
76+
}
77+
else
78+
form[field].fireEvent("onchange");
6179
}
6280

6381
function updatePreview() {

share/roundup/templates/devel/html/_generic.help-submit.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
onclick="text_field.value=original_field;f=getListForm();if (f) {reviseList_framed(f, this)};return false"
6262
/>
6363
<input type="submit" id="btn_apply" class="apply"
64-
value=" Apply " onclick="callingform[field].value=text_field.value; parent.close();"
64+
value=" Apply " onclick="callingform[field].value=text_field.value; if ('createEvent' in document) { var evt = document.createEvent('HTMLEvents'); evt.initEvent('change', true, true); callingform[field].dispatchEvent(evt); } else
65+
{ callingform[field].fireEvent('onchange'); } parent.close();"
6566
i18n:attributes="value" />
6667
</form>
6768
<script type="text/javascript"><!--

share/roundup/templates/devel/html/help_controls.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,30 @@ function updateOpener() {
5252
// write back to opener window
5353
if (document.frm_help.check==undefined) { return; }
5454
form[field].value = text_field.value;
55+
56+
/* trigger change event on the field we changed */
57+
if ("createEvent" in document) {
58+
var evt = document.createEvent("HTMLEvents");
59+
evt.initEvent("change", true, true);
60+
form[field].dispatchEvent(evt);
61+
}
62+
else
63+
form[field].fireEvent("onchange");
5564
}
5665

5766
function updateList() {
5867
// write back to opener window
5968
if (document.frm_help.check==undefined) { return; }
6069
form[field].value = determineList();
70+
71+
/* trigger change event on the field we changed */
72+
if ("createEvent" in document) {
73+
var evt = document.createEvent("HTMLEvents");
74+
evt.initEvent("change", true, true);
75+
form[field].dispatchEvent(evt);
76+
}
77+
else
78+
form[field].fireEvent("onchange");
6179
}
6280

6381
function updatePreview() {

share/roundup/templates/responsive/html/_generic.help-submit.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
onclick="text_field.value=original_field;f=getListForm();if (f) {reviseList_framed(f, this)};return false"
6262
/>
6363
<input type="submit" id="btn_apply" class="apply"
64-
value=" Apply " onclick="callingform[field].value=text_field.value; parent.close();"
64+
value=" Apply " onclick="callingform[field].value=text_field.value; if ('createEvent' in document) { var evt = document.createEvent('HTMLEvents'); evt.initEvent('change', true, true); callingform[field].dispatchEvent(evt); } else
65+
{ callingform[field].fireEvent('onchange'); } parent.close();"
6566
i18n:attributes="value" />
6667
</form>
6768
<script type="text/javascript"><!--

share/roundup/templates/responsive/html/help_controls.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,30 @@ function updateOpener() {
5252
// write back to opener window
5353
if (document.frm_help.check==undefined) { return; }
5454
form[field].value = text_field.value;
55+
56+
/* trigger change event on the field we changed */
57+
if ("createEvent" in document) {
58+
var evt = document.createEvent("HTMLEvents");
59+
evt.initEvent("change", true, true);
60+
form[field].dispatchEvent(evt);
61+
}
62+
else
63+
form[field].fireEvent("onchange");
5564
}
5665

5766
function updateList() {
5867
// write back to opener window
5968
if (document.frm_help.check==undefined) { return; }
6069
form[field].value = determineList();
70+
71+
/* trigger change event on the field we changed */
72+
if ("createEvent" in document) {
73+
var evt = document.createEvent("HTMLEvents");
74+
evt.initEvent("change", true, true);
75+
form[field].dispatchEvent(evt);
76+
}
77+
else
78+
form[field].fireEvent("onchange");
6179
}
6280

6381
function updatePreview() {

0 commit comments

Comments
 (0)