$(function()
{
$('[name^=control]').change(function()
{
var $tr = $(this).parents('tr');
var $type = $tr.find('[name^=type]');
var $length = $tr.find('[name^=length]');
var $integerDigits = $tr.find('[name^=integerDigits]');
var $decimalDigits = $tr.find('[name^=decimalDigits]');
var $optionType = $tr.find('[name^=optionType]');
var $default = $tr.find('[name^=default]');
var type = window.defaultField.type;
var optionClass = window.defaultField.optionClass;
var control = $(this).val();
var length = $length.val();
var integerDigits = $integerDigits.val();
var decimalDigits = $decimalDigits.val();
var optionType = $optionType.val();
var isOptionControl = (control == 'select' || control == 'multi-select' || control == 'radio' || control == 'checkbox');
if(!length) length = window.defaultField.varcharLength;
if(!integerDigits) integerDigits = window.defaultField.integerDigits;
if(!decimalDigits) decimalDigits = window.defaultField.decimalDigits;
switch(control)
{
case 'formula' :
case 'decimal' :
type = 'decimal';
optionClass = 'decimal';
length = '';
break;
case 'integer' :
type = 'int';
optionClass = 'integer';
length = '';
break;
case 'multi-select' :
case 'checkbox' :
case 'textarea' :
case 'richtext' :
type = 'text';
optionClass = 'text';
length = '';
break;
case 'date' :
type = 'date';
optionClass = 'date';
length = '';
break;
case 'datetime' :
type = 'datetime';
optionClass = 'time';
length = '';
break;
}
$length.val(length);
$integerDigits.val(integerDigits);
$decimalDigits.val(decimalDigits);
$type.val(type).change().find('option').show().not('.' + optionClass).hide();
if(isOptionControl)
{
$optionType.val(optionType).change().removeAttr('disabled').trigger('chosen:updated');
}
else
{
$optionType.val('').change().attr('disabled', 'disabled').trigger('chosen:updated');
}
});
$('[name^=type]').change(function()
{
var $tr = $(this).parents('tr');
var type = $(this).val();
if(type == 'char') $tr.find('[name^=length]').attr({'placeholder' : window.placeholder.charLength, 'title' : window.placeholder.charLength, 'max' : window.maxField.charLength});
if(type == 'varchar') $tr.find('[name^=length]').attr({'placeholder' : window.placeholder.varcharLength, 'title' : window.placeholder.varcharLength, 'max' : window.maxField.varcharLength});
$tr.find('.length').toggle(type == 'char' || type == 'varchar');
$tr.find('.digits').toggle(type == 'decimal');
setDefault($tr);
});
$('[name^=length], [name^=integerDigits], [name^=decimalDigits]').change(function()
{
setDefault($(this).parents('tr'));
});
$('[name^=optionType]').change(function()
{
var $tr = $(this).parents('tr');
var $sql = $tr.find('[name^=sql]');
var $options = $tr.find('[name^=options]');
var optionType = $(this).val();
var control = $tr.find('[name^=control]').val();
var isOptionControl = (control == 'select' || control == 'multi-select' || control == 'radio' || control == 'checkbox');
$sql.parent().find('.text-error').remove();
if(isOptionControl && optionType == 'sql')
{
$sql.show();
$options.val('');
$options.hide();
}
else if(isOptionControl && optionType == 'custom')
{
$sql.val('');
$sql.hide();
$options.removeAttr('readonly').show();
}
else
{
$sql.val('');
$sql.hide();
$options.attr('readonly', 'readonly').show();
}
setDefault($tr);
});
$('[name^=options], [name^=sql]').change(function()
{
$(this).parent().find('.text-error').remove();
setDefault($(this).parents('tr'));
});
$('#fieldTable [name^=control]').change();
})
function setDefault($tr)
{
var key = $tr.data('key');
var control = $tr.find('[name^=control]').val();
var type = $tr.find('[name^=type]').val();
var optionType = $tr.find('[name^=optionType]').val();
var $defaultTD = $tr.find('[name^=default]').parent();
if(control == 'textarea' || control == 'multi-select' || control == 'checkbox' || control == 'richtext' || control == 'file')
{
$defaultTD.html("");
return false;
}
if(control == 'input')
{
$defaultTD.html("");
return false;
}
if(control == 'date')
{
var dateOptions =
{
language: config.clientLang,
weekStart: 1,
todayBtn: 1,
autoclose: 1,
todayHighlight: 1,
startView: 2,
minView: 2,
forceParse: 0,
format: 'yyyy-mm-dd'
};
$defaultTD.html("");
$tr.find('[name^=default]').datetimepicker(dateOptions);
return false;
}
if(control == 'datetime')
{
var datetimeOptions =
{
language: config.clientLang,
weekStart: 1,
todayBtn: 1,
autoclose: 1,
todayHighlight: 1,
startView: 2,
forceParse: 0,
showMeridian: 1,
format: 'yyyy-mm-dd hh:ii'
};
$defaultTD.html("");
$tr.find('[name^=default]').datetimepicker(datetimeOptions);
return false;
}
if(control == 'integer')
{
var max = window.maxField[type];
var min = window.minField[type];
$defaultTD.html("");
return false;
}
if(control == 'decimal' || control == 'formula')
{
var integerDigits = $tr.find('[name^=integerDigits]').val();
integerDigits = integerDigits ? parseInt(integerDigits) : 0;
integerDigits = integerDigits > window.maxField.integerDigits ? window.maxField.integerDigits : integerDigits;
integerDigits = integerDigits < window.minField.integerDigits ? window.defaultField.integerDigits : integerDigits;
integerDigits = parseInt(integerDigits);
var decimalDigits = $tr.find('[name^=decimalDigits]').val();
decimalDigits = decimalDigits ? parseInt(decimalDigits) : 0;
decimalDigits = decimalDigits > window.maxField.decimalDigits ? window.maxField.decimalDigits : decimalDigits;
decimalDigits = decimalDigits < window.minField.integerDigits ? window.defaultField.decimalDigits : decimalDigits;
decimalDigits = parseInt(decimalDigits);
var max = '.'.padStart(integerDigits + 1, 9).padEnd(integerDigits + decimalDigits + 1, 9);
var min = '-' + max;
var step = '0.'.padEnd(decimalDigits + 1, 0) + 1;
$defaultTD.html("");
return false;
}
if(!optionType || optionType == 'category' || optionType == 'prevModule')
{
$defaultTD.html("");
return false;
}
var name = (control == 'multi-select' || control == 'checkbox') ? 'default[' + key + '][]' : 'default[]';
var defaultValue = $tr.find('[name^=default]').val();
if(typeof defaultValue === 'string') defaultValue = defaultValue.split(',');
if(optionType == 'custom')
{
var multiple = (control == 'multi-select' || control == 'checkbox') ? 'multiple' : '';
$defaultTD.html("