Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e028c6b

Browse files
committedMar 6, 2011
fix javascript event propagation causing multiple ajax requests and weird behaviors with modal
1 parent 51fb49c commit e028c6b

8 files changed

+92
-18
lines changed
 

‎CHANGES

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
08/02/2011
1+
03/03/2011
2+
----------
3+
* add sortable option
4+
5+
6+
08/02/2011
27
----------
38
* add prototype for nested admin
49

‎Resources/public/base.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,26 @@ jQuery(document).ready(function() {
77

88
var Admin = {
99

10-
add_pretty_errors: function(subject) {
11-
10+
/**
11+
* render log message
12+
* @param mixed
13+
*/
14+
log: function() {
15+
var msg = '[Sonata.Admin] ' + Array.prototype.join.call(arguments,', ');
16+
if (window.console && window.console.log) {
17+
window.console.log(msg);
18+
}
19+
else if (window.opera && window.opera.postError) {
20+
window.opera.postError(msg);
21+
}
22+
},
1223

24+
/**
25+
* display related errors messages
26+
*
27+
* @param subject
28+
*/
29+
add_pretty_errors: function(subject) {
1330
jQuery('div.sonata-ba-field-error', subject).each(function(index, element) {
1431
var input = jQuery('input, textarea', element);
1532

@@ -44,6 +61,11 @@ var Admin = {
4461
});
4562
},
4663

64+
/**
65+
* Add the collapsed toggle option to the admin
66+
*
67+
* @param subject
68+
*/
4769
add_collapsed_toggle: function(subject) {
4870
jQuery('fieldset legend a.sonata-ba-collapsed', subject).live('click', function(event) {
4971
event.preventDefault();

‎Resources/views/CRUD/edit_many_association_script.html.twig

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ This code manage the many-to-[one|many] association field popup
3030
initialize_popup_{{ field_element.id }}();
3131
3232
event.preventDefault();
33-
33+
event.stopPropagation();
34+
3435
var element = jQuery(this).parents('#field_dialog_{{ field_element.id }} td.sonata-ba-list-field');
3536
3637
// the user does does click on a row column
@@ -60,7 +61,8 @@ This code manage the many-to-[one|many] association field popup
6061
initialize_popup_{{ field_element.id }}();
6162
6263
event.preventDefault();
63-
64+
event.stopPropagation();
65+
6466
var a = jQuery(this);
6567
6668
field_dialog_{{ field_element.id }}.html('');
@@ -113,15 +115,19 @@ This code manage the many-to-[one|many] association field popup
113115
initialize_popup_{{ field_element.id }}();
114116
115117
event.preventDefault();
118+
event.stopPropagation();
116119
117120
var a = jQuery(this);
118121
119122
field_dialog_{{ field_element.id }}.html('');
120123
124+
Admin.log('[{{ field_element.id }}|field_dialog_form_add] add link action');
121125
// retrieve the form element from the related admin generator
122126
jQuery.ajax({
123127
url: a.attr('href'),
124128
success: function(html) {
129+
130+
Admin.log('[{{ field_element.id }}|field_dialog_form_add] ajax success', field_dialog_{{ field_element.id }});
125131
126132
// populate the popup container
127133
field_dialog_{{ field_element.id }}.html(html);
@@ -139,6 +145,7 @@ This code manage the many-to-[one|many] association field popup
139145
resizable: false,
140146
title: '{{ field_description.associationadmin.label }}',
141147
close: function(event, ui) {
148+
Admin.log('[{{ field_element.id }}|field_dialog_form_add] dialog closed - removing `live` events');
142149
// make sure we have a clean state
143150
jQuery('a', field_dialog_{{ field_element.id }}).die('click');
144151
jQuery('form', field_dialog_{{ field_element.id }}).die('submit');
@@ -152,7 +159,9 @@ This code manage the many-to-[one|many] association field popup
152159
var field_dialog_form_action_{{ field_element.id }} = function(event) {
153160
154161
event.preventDefault();
155-
162+
event.stopPropagation();
163+
164+
Admin.log('[{{ field_element.id }}|field_dialog_form_action] action catch', this);
156165
initialize_popup_{{ field_element.id }}();
157166
158167
var element = jQuery(this);
@@ -168,19 +177,27 @@ This code manage the many-to-[one|many] association field popup
168177
return;
169178
}
170179
180+
if(element.hasClass('sonata-ba-action')) {
181+
Admin.log('[{{ field_element.id }}|field_dialog_form_action] reserved action stop catch all events');
182+
return;
183+
}
184+
171185
var data = {
172186
_xml_http_request: true
173187
}
174188
175189
var form = jQuery(this);
176190
191+
Admin.log('[{{ field_element.id }}|field_dialog_form_action] execute ajax call');
192+
177193
// the ajax post
178194
jQuery(form).ajaxSubmit({
179195
url: url,
180196
type: type,
181197
data: data,
182198
success: function(data) {
183199
200+
Admin.log('[{{ field_element.id }}|field_dialog_form_action] ajax success');
184201
if(typeof data == 'string') {
185202
field_dialog_{{ field_element.id }}.html(data);
186203
return;
@@ -243,6 +260,8 @@ This code manage the many-to-[one|many] association field popup
243260
244261
// move the dialog as a child of the root element, nested form breaks html ...
245262
jQuery(document).append(field_dialog_{{ field_element.id }});
263+
264+
Admin.log('[{{ field_element.id }}|field_dialog] move dialog container as a document child');
246265
}
247266
}
248267

‎Resources/views/CRUD/edit_many_to_many.html.twig

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ file that was distributed with this source code.
2121
<a
2222
href="{{ field_description.associationadmin.generateUrl('create') }}"
2323
onclick="start_field_dialog_form_add_{{ field_element.id }}(event)"
24-
class="action">
25-
<img src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'AdminBundle' %}" />
24+
class="sonata-ba-action">
25+
<img
26+
src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
27+
alt="{% trans 'btn_add' from 'AdminBundle' %}"
28+
/>
2629
</a>
2730
</span>
2831

‎Resources/views/CRUD/edit_many_to_one.html.twig

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,22 @@ file that was distributed with this source code.
4343
<span id="field_actions_{{ field_element.id }}" >
4444

4545
{% if field_description.options.edit == 'list' %}
46-
<a href="{{ field_description.associationadmin.generateUrl('list') }}" onclick="start_field_dialog_form_list_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonataadmin/famfamfam/application_view_list.png') }}" alt="{% trans 'btn_add' from 'AdminBundle' %}" /></a>
46+
<a href="{{ field_description.associationadmin.generateUrl('list') }}"
47+
onclick="start_field_dialog_form_list_{{ field_element.id }}(event)"
48+
class="sonata-ba-action">
49+
<img src="{{ asset('bundles/sonataadmin/famfamfam/application_view_list.png') }}"
50+
alt="{% trans 'btn_add' from 'AdminBundle' %}"
51+
/>
52+
</a>
4753
{% endif %}
4854

49-
<a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'AdminBundle' %}" /></a>
55+
<a href="{{ field_description.associationadmin.generateUrl('create') }}"
56+
onclick="start_field_dialog_form_add_{{ field_element.id }}(event)"
57+
class="sonata-ba-action">
58+
<img src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
59+
alt="{% trans 'btn_add' from 'AdminBundle' %}"
60+
/>
61+
</a>
5062
</span>
5163

5264
<div class="container sonata-ba-modal sonata-ba-modal-edit-one-to-one" style="display: none" id="field_dialog_{{ field_element.id }}">

‎Resources/views/CRUD/edit_one_association_script.html.twig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ This code manage the one-to-many association field popup
2626
var field_add_{{ field_element.id }} = function(event) {
2727
2828
event.preventDefault();
29+
event.stopPropagation();
2930
3031
var form = jQuery(this).closest('form');
3132

‎Resources/views/CRUD/edit_one_to_many.html.twig

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ file that was distributed with this source code.
6868
<a
6969
href="{{ field_description.associationadmin.generateUrl('create') }}"
7070
onclick="start_field_retrieve_{{ field_element.id }}(event)"
71-
class="action">
71+
class="sonata-ba-action">
7272
<img
7373
src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
7474
alt="{% trans 'btn_add' from 'AdminBundle' %}"
@@ -90,13 +90,11 @@ file that was distributed with this source code.
9090
// update the input value position
9191
jQuery('div#field_container_{{ field_element.id }} tbody.sonata-ba-tbody td.sonata-ba-td-{{ field_element.id }}-position').each(function(index, element) {
9292
// remove the sortable handler and put it back
93-
94-
// <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
95-
9693
jQuery('span.sonata-ba-sortable-handler', element).remove();
97-
jQuery(element).append('<span class="sonata-ba-sortable-handler ui-icon ui-icon-arrowthick-2-n-s"></span>');
94+
jQuery(element).append('<span class="sonata-ba-sortable-handler ui-icon ui-icon-grip-solid-horizontal"></span>');
9895
jQuery('input', element).hide();
9996
});
97+
10098
jQuery('div#field_container_{{ field_element.id }} tbody.sonata-ba-tbody td.sonata-ba-td-{{ field_element.id }}-position input').each(function(index, value) {
10199
jQuery(value).val(index + 1);
102100
});
@@ -121,7 +119,7 @@ file that was distributed with this source code.
121119
<a
122120
href="{{ field_description.associationadmin.generateUrl('create') }}"
123121
onclick="start_field_dialog_form_add_{{ field_element.id }}(event)"
124-
class="action">
122+
class="sonata-ba-action">
125123
<img
126124
src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
127125
alt="{% trans 'btn_add' from 'AdminBundle' %}"

‎Resources/views/CRUD/edit_one_to_one.html.twig

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,24 @@ file that was distributed with this source code.
4242
<span id="field_actions_{{ field_element.id }}" >
4343

4444
{% if field_description.options.edit == 'list' %}
45-
<a href="{{ field_description.associationadmin.generateUrl('list') }}" onclick="start_field_dialog_form_list_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonataadmin/famfamfam/application_view_list.png') }}" alt="{% trans 'btn_add' from 'AdminBundle' %}" /></a>
45+
<a href="{{ field_description.associationadmin.generateUrl('list') }}"
46+
onclick="start_field_dialog_form_list_{{ field_element.id }}(event)"
47+
class="sonata-ba-action">
48+
<img
49+
src="{{ asset('bundles/sonataadmin/famfamfam/application_view_list.png') }}"
50+
alt="{% trans 'btn_add' from 'AdminBundle' %}"
51+
/>
52+
</a>
4653
{% endif %}
4754

48-
<a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'AdminBundle' %}" /></a>
55+
<a href="{{ field_description.associationadmin.generateUrl('create') }}"
56+
onclick="start_field_dialog_form_add_{{ field_element.id }}(event)"
57+
class="sonata-ba-action">
58+
<img
59+
src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
60+
alt="{% trans 'btn_add' from 'AdminBundle' %}"
61+
/>
62+
</a>
4963
</span>
5064

5165
<div class="container sonata-ba-modal sonata-ba-modal-edit-one-to-one" style="display: none" id="field_dialog_{{ field_element.id }}">

0 commit comments

Comments
 (0)
Please sign in to comment.