77 lines
3.0 KiB
JavaScript
77 lines
3.0 KiB
JavaScript
if (elementCollectionEditor == null) var elementCollectionEditor = {};
|
|
|
|
openxava.addEditorInitFunction(function() {
|
|
$('.xava_sortable_elements').sortable({
|
|
items: '>.xava_sortable_element_row',
|
|
handle: ".xava_handle",
|
|
stop: function( event, ui ) {
|
|
var table = $(event.target).closest("table");
|
|
var row = table.find('tr').eq(1);
|
|
elementCollectionEditor.renumber(row, 0);
|
|
}
|
|
});
|
|
});
|
|
|
|
elementCollectionEditor.onChangeRow = function(element, rowIndex) {
|
|
var currentRow = $(element).parent().parent();
|
|
var nextRow = currentRow.next();
|
|
if (nextRow.is(':visible')) return;
|
|
var newRow = nextRow.clone();
|
|
var token1 = new RegExp("__" + (rowIndex + 1), "g");
|
|
var token2 = "__" + (rowIndex + 2);
|
|
newRow.attr("id", newRow.attr("id").replace(token1, token2));
|
|
var newRowHtml = newRow.html().replace(token1, token2);
|
|
token1 = new RegExp(", " + (rowIndex + 1) + "\\)", "g");
|
|
token2 = ", " + (rowIndex + 2) + ")";
|
|
newRowHtml = newRowHtml.replace(token1, token2);
|
|
token1 = new RegExp(", this, " + (rowIndex + 1) + ", ", "g");
|
|
token2 = ", this, " + (rowIndex + 2) + ", ";
|
|
newRowHtml = newRowHtml.replace(token1, token2);
|
|
newRow.html(newRowHtml);
|
|
newRow.css("display", "none");
|
|
var table = currentRow.parent().parent();
|
|
elementCollectionEditor.setDefaultValues(table, rowIndex);
|
|
nextRow.show();
|
|
$(nextRow).after(newRow);
|
|
currentRow.children().first().find("nobr").css('visibility', 'visible');
|
|
currentRow.addClass("xava_sortable_element_row");
|
|
openxava.initEditors();
|
|
}
|
|
|
|
elementCollectionEditor.setDefaultValues = function(table, rowIndex) {
|
|
var header = table.children().first().children().first();
|
|
header.children("[id]").each(function() {
|
|
var headerId = $( this ).attr("id");
|
|
var inputName = headerId.replace(new RegExp("__H", "g"), "__" + rowIndex);
|
|
$("[name='" + inputName + "']").val($( this ).attr("data-default-value"));
|
|
});
|
|
}
|
|
|
|
elementCollectionEditor.removeRow = function(application, module, element, rowIndex, hasTotals) {
|
|
var currentRow = $(element).parent().parent().parent().parent();
|
|
var nextRow = currentRow.next();
|
|
currentRow.remove();
|
|
elementCollectionEditor.renumber(nextRow, rowIndex);
|
|
if (hasTotals) {
|
|
openxava.executeAction(application, module, "", false, "ElementCollection.refreshTotals");
|
|
}
|
|
openxava.initEditors();
|
|
}
|
|
|
|
elementCollectionEditor.renumber = function(row, rowIndex) {
|
|
var token1 = new RegExp("__\\d+", "g");
|
|
var token2 = "__" + rowIndex;
|
|
row.attr("id", row.attr("id").replace(token1, token2));
|
|
row.find('input').each(function(){
|
|
$(this).attr('value',$(this).val());
|
|
});
|
|
var rowHtml = row.html()
|
|
.replace(token1, token2)
|
|
.replace(new RegExp("this, \\d+", "g"), "this, " + rowIndex)
|
|
.replace(new RegExp("keyProperty=(.*)\\.\\d+\\.", "g"), "keyProperty=$1." + rowIndex + ".");
|
|
row.html(rowHtml);
|
|
if ($(row).css("display") !== 'none') { // is:visible/hidden not work on mobile (removing one record removes all until end)
|
|
elementCollectionEditor.renumber(row.next(), rowIndex + 1);
|
|
}
|
|
}
|