Projet

Général

Profil

0001-gadjo.js-add-support-for-ajax-submission-of-form.patch

Benjamin Dauvergne, 19 juillet 2014 00:47

Télécharger (4,22 ko)

Voir les différences:

Subject: [PATCH] gadjo.js: add support for ajax submission of form

 gadjo/static/js/gadjo.js |   74 +++++++++++++++++++++++++++++++++++-----------
 1 file changed, 57 insertions(+), 17 deletions(-)
gadjo/static/js/gadjo.js
1 1
function displayPopup(event)
2 2
{
3
    var url = $(this).attr('href');
3
    var $anchor = $(this);
4
    var url = $anchor.attr('href');
5
    var selector = $anchor.data('selector') || 'form';
6
    var title_selector = $anchor.data('title-selector') || '#appbar h2';
7

  
8
    function ajaxform_submit (data, status, xhr, form) {
9
        if ('location' in data) {
10
            var e = $.Event('gadjo:dialog-done');
11
            $anchor.trigger(e, form);
12

  
13
            if (! e.isDefaultPrevented()) {
14
              if (data.location.split('#')[0] == window.location.href.split('#')[0]) {
15
                  window.location.reload(true);
16
              }
17
              window.location = data.location;
18
            }
19
        } else {
20
            var $form = $(form);
21

  
22
            $form.empty().append($(data.content).find(selector).children());
23
            $form.find('.buttons').hide();
24
        }
25
    }
26

  
4 27
    $.ajax({
5 28
        url: url,
6 29
        success: function(html) {
7
            var form = $(html).find('#content form');
8
            var title = $(html).find('#appbar h2').text();
9
            var dialog = $(form).dialog({modal: true, title: title, width: 'auto'});
30
            var is_json = typeof html != 'string';
31
            if (is_json) {
32
                var html = html.content;
33
            } else {
34
                var html = html;
35
            }
36
            var $html = $(html);
37
            var $form = $html.find(selector);
38
            var title = $html.find(title_selector).text();
10 39
            var buttons = Array();
11
            if (! form.prop('action')) {
12
                form.prop('action', url);
40

  
41
            $form.dialog({modal: true, 'title': title, width: 'auto'});
42

  
43
            if (! $form.prop('action')) {
44
                $form.prop('action', url);
13 45
            }
14
            $(dialog).find('.buttons').hide();
15
            $(html).find('.buttons button, .buttons a').each(function(idx, elem) {
46

  
47
            $form.find('.buttons').hide();
48

  
49
            $form.find('.buttons button, .buttons a').each(function(idx, elem) {
50
                var $elem = $(elem);
16 51
                var button = Object();
17
                button.text = $(elem).text();
18
                if ($(elem).hasClass('cancel')) {
19
                    button.click = function() { $(this).dialog('destroy'); return false; };
52

  
53
                button.text = $elem.text();
54
                if ($elem.hasClass('cancel')) {
55
                    button.click = function() { $form.dialog('destroy'); return false; };
20 56
                } else {
21
                    button.click = function() { (form).find('button').click(); return false; };
57
                    button.click = function() { $form.find('button').click(); return false; };
22 58
                }
23
                if ($(elem).hasClass('submit-button')) {
59
                if ($elem.hasClass('submit-button')) {
24 60
                    button.class = 'submit-button';
25
                } else if ($(elem).hasClass('delete-button')) {
61
                } else if ($elem.hasClass('delete-button')) {
26 62
                    button.class = 'delete-button';
27 63
                }
28 64
                buttons.push(button);
29 65
            });
66

  
30 67
            buttons.reverse();
31
            $(dialog).dialog('option', 'buttons', buttons);
32
            if ($(dialog).find('input:visible').length) {
33
                $(dialog).find('input:visible')[0].focus();
68
            $form.dialog('option', 'buttons', buttons);
69
            if ($form.find('input:visible').length) {
70
                $form.find('input:visible')[0].focus();
71
            }
72
            if (is_json && $.fn.ajaxForm != undefined) {
73
                $form.ajaxForm({success: ajaxform_submit});
34 74
            }
35 75
            return false;
36 76
        }
37
-