192 lines
6.3 KiB
JavaScript
192 lines
6.3 KiB
JavaScript
|
function InputfieldPageTableDialog() {
|
||
|
|
||
|
var $a = $(this);
|
||
|
var url = $a.attr('data-url');
|
||
|
var title = $a.attr('data-title');
|
||
|
var closeOnSave = true;
|
||
|
var $container = $(this).parents('.InputfieldPageTableContainer');
|
||
|
var dialogPageID = 0;
|
||
|
var noclose = parseInt($container.attr('data-noclose'));
|
||
|
var modalSettings = {
|
||
|
close: function(event, ui) {
|
||
|
if(dialogPageID > 0) {
|
||
|
var ajaxURL = $container.attr('data-url') + '&InputfieldPageTableAdd=' + dialogPageID;
|
||
|
var sort = $container.siblings(".InputfieldPageTableSort").val();
|
||
|
if(typeof sort != "undefined" && sort.length) ajaxURL += '&InputfieldPageTableSort=' + sort.replace(/\|/g, ',');
|
||
|
$.get(ajaxURL, function(data) {
|
||
|
$container.html(data);
|
||
|
$container.find(".Inputfield").trigger('reloaded', ['InputfieldPageTable']);
|
||
|
$container.effect('highlight', 500, function() {
|
||
|
var $table = $container.find('table');
|
||
|
$table.find('tbody').css('overflow', 'visible');
|
||
|
InputfieldPageTableSortable($table);
|
||
|
|
||
|
// restore appearance of any items marked for deletion
|
||
|
var deleteIDs = $container.siblings("input.InputfieldPageTableDelete").eq(0).val().split('|');
|
||
|
if(deleteIDs.length) {
|
||
|
for(var n = 0; n < deleteIDs.length; n++) {
|
||
|
var deleteID = deleteIDs[n];
|
||
|
if(!deleteID.length) continue;
|
||
|
$table.find("tr[data-id=" + deleteID + "]")
|
||
|
.addClass('InputfieldPageTableDelete ui-state-error-text ui-state-disabled');
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
var $iframe = pwModalWindow(url, modalSettings, 'large');
|
||
|
var closeOnSaveReady = false;
|
||
|
|
||
|
if($a.is('.InputfieldPageTableAdd')) closeOnSave = false;
|
||
|
|
||
|
$iframe.on('load', function() {
|
||
|
|
||
|
var buttons = [];
|
||
|
//$dialog.dialog('option', 'buttons', {});
|
||
|
var $icontents = $iframe.contents();
|
||
|
var n = 0;
|
||
|
// var title = $icontents.find('title').text();
|
||
|
|
||
|
dialogPageID = $icontents.find('#Inputfield_id').val(); // page ID that will get added if not already present
|
||
|
|
||
|
// hide things we don't need in a modal context
|
||
|
$icontents.find('#wrap_Inputfield_template, #wrap_template, #wrap_parent_id').hide();
|
||
|
//$icontents.find('#breadcrumbs ul.nav, #_ProcessPageEditDelete, #_ProcessPageEditChildren').hide();
|
||
|
$icontents.find('#_ProcessPageEditDelete, #_ProcessPageEditChildren').hide();
|
||
|
|
||
|
closeOnSave = noclose == 0 && $icontents.find('#ProcessPageAdd').length == 0;
|
||
|
|
||
|
if(closeOnSave && closeOnSaveReady) {
|
||
|
if($icontents.find(".NoticeError, .NoticeWarning, .ui-state-error").length == 0) {
|
||
|
if(typeof Notifications != "undefined") {
|
||
|
var messages = [];
|
||
|
$icontents.find(".NoticeMessage").each(function() {
|
||
|
messages[messages.length] = $(this).text();
|
||
|
});
|
||
|
if(messages.length > 0) setTimeout(function() {
|
||
|
for(var i = 0; i < messages.length; i++) {
|
||
|
Notifications.message(messages[i]);
|
||
|
}
|
||
|
}, 500);
|
||
|
}
|
||
|
$iframe.dialog('close');
|
||
|
return;
|
||
|
} else {
|
||
|
// errors occurred, so keep it open
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// copy buttons in iframe to dialog
|
||
|
$icontents.find("#content form button.ui-button[type=submit]").each(function() {
|
||
|
var $button = $(this);
|
||
|
var text = $button.text();
|
||
|
var skip = false;
|
||
|
// avoid duplicate buttons
|
||
|
for(var i = 0; i < buttons.length; i++) {
|
||
|
if(buttons[i].text == text || text.length < 1) skip = true;
|
||
|
}
|
||
|
if(!skip) {
|
||
|
buttons[n] = {
|
||
|
'text': text,
|
||
|
'class': ($button.is('.ui-priority-secondary') ? 'ui-priority-secondary' : ''),
|
||
|
'click': function() {
|
||
|
$button.trigger('click');
|
||
|
if(closeOnSave) closeOnSaveReady = true;
|
||
|
if(!noclose) closeOnSave = true; // only let closeOnSave happen once
|
||
|
}
|
||
|
};
|
||
|
n++;
|
||
|
};
|
||
|
$button.hide();
|
||
|
});
|
||
|
|
||
|
$iframe.setButtons(buttons);
|
||
|
});
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function InputfieldPageTableUpdate($table) {
|
||
|
var value = '';
|
||
|
if(!$table.is('tbody')) $table = $table.find('tbody');
|
||
|
$table.find('tr').each(function() {
|
||
|
var pageID = $(this).attr('data-id');
|
||
|
if(value.length > 0) value += '|';
|
||
|
value += pageID;
|
||
|
});
|
||
|
var $container = $table.parents('.InputfieldPageTableContainer');
|
||
|
var $input = $container.siblings('.InputfieldPageTableSort');
|
||
|
$input.val(value);
|
||
|
}
|
||
|
|
||
|
function InputfieldPageTableSortable($tables) {
|
||
|
|
||
|
$tables.each(function() {
|
||
|
var $table = $(this);
|
||
|
if($table.closest('.InputfieldRenderValueMode').length) return;
|
||
|
$table.find('tbody').sortable({
|
||
|
axis: 'y',
|
||
|
start: function(event, ui) {
|
||
|
var widths = [];
|
||
|
var n = 0;
|
||
|
$table.find('thead').find('th').each(function() {
|
||
|
widths[n] = $(this).width();
|
||
|
n++;
|
||
|
});
|
||
|
n = 0;
|
||
|
ui.helper.find('td').each(function() {
|
||
|
$(this).attr('width', widths[n]);
|
||
|
n++;
|
||
|
});
|
||
|
},
|
||
|
stop: function(event, ui) {
|
||
|
InputfieldPageTableUpdate($(this));
|
||
|
},
|
||
|
update: function(e, ui) {
|
||
|
$table.closest('.Inputfield').trigger('sorted', [ ui.item ]);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function InputfieldPageTableDelete() {
|
||
|
var $row = $(this).closest('tr');
|
||
|
$row.toggleClass('InputfieldPageTableDelete ui-state-error-text ui-state-disabled');
|
||
|
var ids = '';
|
||
|
$row.parents('tbody').children('tr').each(function() {
|
||
|
var $tr = $(this);
|
||
|
var id = $tr.attr('data-id');
|
||
|
if($tr.is('.InputfieldPageTableDelete')) ids += (ids.length > 0 ? '|' : '') + id;
|
||
|
});
|
||
|
|
||
|
var $input = $(this).parents('.InputfieldPageTableContainer').siblings('input.InputfieldPageTableDelete');
|
||
|
$input.val(ids);
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$(document).ready(function() {
|
||
|
|
||
|
$(document).on('click', '.InputfieldPageTableAdd, .InputfieldPageTableEdit', InputfieldPageTableDialog);
|
||
|
$(document).on('click', 'a.InputfieldPageTableDelete', InputfieldPageTableDelete);
|
||
|
$(document).on('dblclick', '.InputfieldPageTable .AdminDataTable td', function() {
|
||
|
$(this).closest('tr').find('.InputfieldPageTableEdit').trigger('click');
|
||
|
});
|
||
|
|
||
|
InputfieldPageTableSortable($(".InputfieldPageTable table"));
|
||
|
|
||
|
$(document).on('reloaded', '.InputfieldPageTable', function() {
|
||
|
InputfieldPageTableSortable($(this).find(".InputfieldPageTableContainer > table"));
|
||
|
});
|
||
|
|
||
|
$(document).on('click', '.InputfieldPageTableOrphansAll', function() {
|
||
|
var $checkboxes = $(this).closest('.InputfieldPageTableOrphans').find('input');
|
||
|
// if($checkboxes.eq(0).is(":checked")) $checkboxes.removeAttr('checked'); // JQM
|
||
|
// else $checkboxes.attr('checked', 'checked'); // JQM
|
||
|
$checkboxes.prop('checked', ($checkboxes.eq(0).is(':checked') ? false : true));
|
||
|
return false;
|
||
|
});
|
||
|
});
|