Code

Ticket #9784: 9784.2.diff

File 9784.2.diff, 6.0 KB (added by dgouldin, 5 years ago)
Line 
1Index: django/contrib/admin/media/js/core.js
2===================================================================
3--- django/contrib/admin/media/js/core.js       (revision 10585)
4+++ django/contrib/admin/media/js/core.js       (working copy)
5@@ -29,6 +29,21 @@
6     }
7 }
8 
9+function fireEvent(obj, evType) {
10+    if(document.createEvent) {
11+        var evObj = document.createEvent('HTMLEvents');
12+        evObj.initEvent(evType, true, false);
13+        obj.dispatchEvent(evObj);
14+    }
15+    else if(document.createEventObject) {
16+        obj.fireEvent('on' + evType);
17+    }
18+}
19+
20+function hasClass(obj, className) {
21+    return !!className && obj.className.indexOf(className) > -1
22+}
23+
24 // quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
25 function quickElement() {
26     var obj = document.createElement(arguments[0]);
27Index: django/contrib/admin/media/js/admin/DateTimeShortcuts.js
28===================================================================
29--- django/contrib/admin/media/js/admin/DateTimeShortcuts.js    (revision 10585)
30+++ django/contrib/admin/media/js/admin/DateTimeShortcuts.js    (working copy)
31@@ -116,8 +116,10 @@
32        window.document.onclick = null;
33     },
34     handleClockQuicklink: function(num, val) {
35-       DateTimeShortcuts.clockInputs[num].value = val;
36-       DateTimeShortcuts.dismissClock(num);
37+        var elem = DateTimeShortcuts.clockInputs[num];
38+        elem.value = val;
39+        fireEvent(elem, 'keyup');
40+        DateTimeShortcuts.dismissClock(num);
41     },
42     // Add calendar widget to a given field.
43     addCalendar: function(inp) {
44@@ -237,12 +239,14 @@
45         DateTimeShortcuts.calendars[num].drawNextMonth();
46     },
47     handleCalendarCallback: function(num) {
48-        return "function(y, m, d) { DateTimeShortcuts.calendarInputs["+num+"].value = y+'-'+(m<10?'0':'')+m+'-'+(d<10?'0':'')+d; document.getElementById(DateTimeShortcuts.calendarDivName1+"+num+").style.display='none';}";
49+        return "function(y, m, d) { var elem = DateTimeShortcuts.calendarInputs[" + num + "]; elem.value = y+'-'+(m<10?'0':'')+m+'-'+(d<10?'0':'')+d; document.getElementById(DateTimeShortcuts.calendarDivName1+" + num + ").style.display='none'; fireEvent(elem, 'keyup');}";
50     },
51     handleCalendarQuickLink: function(num, offset) {
52        var d = new Date();
53-       d.setDate(d.getDate() + offset)
54-       DateTimeShortcuts.calendarInputs[num].value = d.getISODate();
55+       d.setDate(d.getDate() + offset);
56+       var elem = DateTimeShortcuts.calendarInputs[num];
57+       elem.value = d.getISODate();
58+       fireEvent(elem, 'keyup');
59        DateTimeShortcuts.dismissCalendar(num);
60     },
61     cancelEventPropagation: function(e) {
62Index: django/contrib/admin/templates/admin/prepopulated_fields_js.html
63===================================================================
64--- django/contrib/admin/templates/admin/prepopulated_fields_js.html    (revision 10585)
65+++ django/contrib/admin/templates/admin/prepopulated_fields_js.html    (working copy)
66@@ -1,3 +1,4 @@
67+{% autoescape off %}
68 <script type="text/javascript">
69 {% for field in prepopulated_fields %}
70     document.getElementById("{{ field.field.auto_id }}").onchange = function() { this._changed = true; };
71@@ -2,8 +3,43 @@
72     {% for dependency in field.dependencies %}
73-    document.getElementById("{{ dependency.auto_id }}").onkeyup = function() {
74-        var e = document.getElementById("{{ field.field.auto_id }}");
75-        if (!e._changed) { e.value = URLify({% for innerdep in field.dependencies %}document.getElementById("{{ innerdep.auto_id }}").value{% if not forloop.last %} + ' ' + {% endif %}{% endfor %}, {{ field.field.field.max_length|default_if_none:"50" }}); }
76-    }
77+        {% if dependency.field.widget.widgets %}
78+            {% comment %} widget is a MultiWidget {% endcomment %}
79+            {% for widget in dependency.field.widget.widgets %}
80+                document.getElementById("{{ dependency.auto_id }}_{{ forloop.counter0 }}").onkeyup = function() {
81+                    var e = document.getElementById("{{ field.field.auto_id }}");
82+                    if (!e._changed) {
83+                        var value = '';
84+                        var inputs = [];
85+                        {% for innerdep in field.dependencies %}
86+                            {% if innerdep.field.widget.widgets %}
87+                                inputs = inputs.concat({% for widget in innerdep.field.widget.widgets %}"{{ innerdep.auto_id }}_{{ forloop.counter0 }}"{% if not forloop.last %}, {% endif %}{% endfor %});
88+                            {% else %}
89+                                inputs.push("{{ innerdep.auto_id }}");
90+                            {% endif %}
91+                        {% endfor %}
92+                        for (var i = 0; i < inputs.length; i++) {
93+                            var elem = document.getElementById(inputs[i]);
94+                            if (hasClass(elem, 'vTimeField')) {
95+                                value += elem.value.replace(/:/g, "-");
96+                            } else {
97+                                value += elem.value;
98+                            }
99+                            if (i != (inputs.length - 1)) {
100+                                value += " ";
101+                            }
102+                        }
103+                        e.value = URLify(value, {{ field.field.field.max_length|default_if_none:"50" }});
104+                    }
105+                }
106+            {% endfor %}
107+        {% else %}
108+            document.getElementById("{{ dependency.auto_id }}").onkeyup = function() {
109+                var e = document.getElementById("{{ field.field.auto_id }}");
110+                if (!e._changed) {
111+                    e.value = URLify({% for innerdep in field.dependencies %}document.getElementById("{{ innerdep.auto_id }}").value{% if not forloop.last %} + ' ' + {% endif %}{% endfor %}, {{ field.field.field.max_length|default_if_none:"50" }});
112+                }
113+            }
114+        {% endif %}
115     {% endfor %}
116 {% endfor %}
117 </script>
118+{% endautoescape %}
119\ No newline at end of file