pattern-view.js 4.99 KB
var main_field = 'name';
var qualifier_options = { // copypasta z leksemów...
  noneSelectedText: 'Wybierz kwalifikatory',
    selectedText: '# kwalifikatorów',
    selectedList: 4,
    header: false,
    create: function() {
    "use strict";
    var select = $(this);
    var selected = select.val();
    if (selected) {
      $.each(selected, function(i, value) {
        toggle_excluded(select, value, false);
      });
    }
  },
  click: function(event, ui) {
    "use strict";
    toggle_excluded(this, ui.value, !ui.checked);
  }
};
$.extend(jqgrid, {
  main_field: main_field,
  initialColModel: [
    {name:'name', index:'name', width:150},
    {name:'type', index:'type', width:70},
    {name:'part_of_speech', index:'part_of_speech', width:200}
  ],
  initialColNames: ['Id', 'Typ', 'Cz. mowy'],
  initial_sort_rules: [{field: main_field, order: 'asc'}],
  grid_caption: "Wzory",
  edit_form_id: 'pattern-edit-form',
  edit_form_cancel_id: 'pattern-edit-cancel',
  edit_form_submit_id: 'pattern-edit-submit'
});
var deleted;
$dj.reverse_exclusion_classes = {};


$.each($dj.exclusion_classes, function(ec, qualifiers) {
  "use strict";
  $.each(qualifiers, function(i, q_id) {
    $dj.reverse_exclusion_classes[q_id] = ec;
  });
});

// duuuużo copypasty :(
function toggle_excluded(select, value, enable) {
  "use strict";
  var ec = $dj.reverse_exclusion_classes[Number(value)],
      values = $dj.exclusion_classes[ec];
  if (values)
    $.each(values, function(i, v) {
      if (v !== Number(value))
        common.multiselect_toggle(select, v, enable);
    });
}

function init_form_widgets() {
  "use strict";
  $('span.remove').live('click', 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();
    jqgrid.show_changed();
  });
  $('.add-ending').live('click', function() {
    var id = $('input[name=id]', $(this).closest('form')).value();
    var new_row = $(get_new_row_html());
    $(this).closest('tr').find('.ending-group').append(new_row);
    $('#ending-list').find('.qualifiers').last().multiselect2(qualifier_options);
    jqgrid.show_changed();
  });
}
jqgrid.init_form_widgets = init_form_widgets;

function load_content(id) {
  "use strict";
  $.ajaxJSON({
    method: 'get',
    url: $dj.ajax_edit_form,
    dest: $('#edit'),
    data: {id: id},
    callback: function() {
      edit_form_init();
      //created = Boolean(is_created);
    }
  });
  jqgrid.grid.jqGrid('setGridParam', {'lastSelectedId' : id});
}
jqgrid.load_content = load_content;

function edit_form_init() {
  "use strict";
  $('button', '#edit').button();
  $('#ending-list.editable').find('.ending-group').sortable().sortable({
    change: function() {
      jqgrid.show_changed();
    }
  });
  //$('#ending-list').disableSelection();
  $('#ending-list').find('.qualifiers').multiselect2(qualifier_options);
  deleted = [];
  jqgrid.hide_changed();
  if (jqgrid.ctrl)
    jqgrid.ctrl.remove();
}

jqgrid.edit_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 = $(input).attr('id').split('-')[1], q_id;
      if (id === 'add')
        q_id = '#id_add-' + $(input).attr('id').split('-')[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});
  jqgrid.ctrl = getBusyOverlay(
    'viewport',
    {color: 'black', opacity: 0.5},
    {size: 100});
  $.ajaxJSON({
    method: 'post',
    url: $dj.ajax_update_pattern,
    data: {
      form_data: form_data
    },
    description: "Zapisanie zmian",
    callback: function() {
      jqgrid.hide_changed();
      jqgrid.grid.jqGrid('setGridParam', {'setOnComplete' : true});
      jqgrid.grid.trigger("reloadGrid");
    },
    error_callback: function(xhr, status, error) {
      common.error_alert(status + ': ' + error);
      if (jqgrid.ctrl)
        jqgrid.ctrl.remove();
    },
    bad_data_callback: function() {
      if (jqgrid.ctrl)
        jqgrid.ctrl.remove();
      return true;
    }
  });
  return false;
};

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: {},
    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;
}

jqgrid.add_buttons = function() {};