pattern-edit.js 4.25 KB
var deleted;

var new_row_counter = 1; // potrzebne tylko dla niepowtarzalności idów
function get_new_row_html() {
    "use strict";
    var new_row_html = $.ajax({
        type: 'get',
        url: $dj.ajax_new_ending_row,
        data: {pattern_id: edit.get_id()},
        async: false // w zasadzie się tak nie powinno robić
    }).responseText;
    var row_html = new_row_html.replace(/NUM/g, new_row_counter);
    new_row_counter++;
    return row_html;
}

$.extend(edit, {
    form_id: 'pattern-edit-form',
    form_cancel_id: 'pattern-edit-cancel',
    form_submit_id: 'pattern-edit-submit',

    init_form_widgets: function() {
        "use strict";
        $(document).on('click', 'span.remove', function () {
            var li = $(this).closest('li');
            var name = li.find('input')[0].id;
            if (name.split('-')[1] !== 'add')
                deleted.push(name.split('-')[1]);
            li.remove();
            edit.show_changed();
        });
        $(document).on('click', '.add-ending', function () {
            var id = $('input[name=id]', $(this).closest('form')).value();
            var new_row = $(get_new_row_html());
            var this_group = $(this).closest('tr').find('.ending-group');
            this_group.append(new_row);
            edit.qualifier_select(this_group.find('.qualifiers').last());
            edit.show_changed();
        });
        $('#edit').on('scroll', function() {
            $(this).find('select[multiple]').multiselect2('close');
            $('#id_new_owner').selectmenu('close');
        });
    },

    load_content: function(id, check_callback) {
        "use strict";
        $.ajaxJSON({
            method: 'get',
            url: $dj.ajax_edit_form,
            dest: $('#edit'),
            data: {id: id},
            callback: function () {
                edit.form_init();
                //created = Boolean(is_created);
            },
            check_callback: check_callback
        });
        edit.active_id = id;
    },

    form_init: function() {
        "use strict";
        $('button', '#edit').button();
        $('#ending-list.editable').find('.ending-group').sortable().sortable({
            change: function () {
                edit.show_changed();
            }
        });
        //$('#ending-list').disableSelection();
        edit.qualifier_select($('#ending-list').find('.qualifiers'));
        deleted = [];
        edit.hide_changed();
        edit.busy_off();
    },

    form_submit: function () {
        "use strict";
        var this_form = $(this);
        var form_data = this_form.serializeArray();
        form_data.push({name: 'deleted', value: deleted});
        deleted = [];
        var ending_list = [];
        var rows = $('#ending-list').find('tr');
        $.each(rows, function (i, row) {
            var label = $(row).find('td:eq(0) strong').html();
            var endings = [];
            $(row).find('td:eq(1) input').map(function (i, input) {
                var id_parts = $(input).attr('id').split('-');
                var id = id_parts[1], q_id;
                if (id === 'add')
                    q_id = '#id_add-' + id_parts[2] + '-qualifiers';
                else
                    q_id = '#id_end' + id + '-qualifiers';
                endings.push({
                    id: id,
                    string: $(input).val(),
                    qualifiers: $(q_id).val() || []
                });
            });
            ending_list.push({base_form_label: label, endings: endings});
        });
        form_data.push({name: 'ending_list', value: ending_list});
        edit.busy_on();
        $.ajaxJSON({
            method: 'post',
            url: $dj.ajax_update_pattern,
            data: {
                form_data: form_data
            },
            description: "Zapisanie zmian",
            callback: function () {
                edit.hide_changed();
                // odświeżyć?
                edit.load_content(edit.get_id());
            },
            error_callback: function (xhr, status, error) {
                common.error_alert(status + ': ' + error);
                edit.busy_off();
            },
            bad_data_callback: function () {
                edit.busy_off();
                return true;
            }
        });
        return false;
    }
});