Projekt

Obecné

Profil

Stáhnout (12.9 KB) Statistiky
| Větev: | Tag: | Revize:
8baed187 Michal Kliment
<?php
/**
* Device templates add JavaScript functionality. Manages dynamic form for adding
* of template.
*
* @author Ondřej Fibich
*/

// IDE complementation
if (FALSE): ?><script type='text/javascript'><?php endif

?>
// port mode options
var port_mode_options = '<?php foreach (Iface_Model::get_port_modes() as $k => $v): ?><option value="<?php echo $k ?>"><?php echo $v ?></option><?php endforeach; ?>';
// port mode options
var wiface_mode_options = '<?php foreach (Iface_Model::get_wireless_modes() as $k => $v): ?><option value="<?php echo $k ?>"<?php echo ($k == Iface_Model::WIRELESS_MODE_CLIENT) ? ' selected="selected"' : '' ?>><?php echo $v ?></option><?php endforeach; ?>';
// port mode options
var wiface_antenna_options = '<?php foreach (Iface_Model::get_wireless_antennas() as $k => $v): ?><option value="<?php echo $k ?>"<?php echo ($k == Iface_Model::WIRELESS_ANTENNA_SECTIONAL) ? ' selected="selected"' : '' ?>><?php echo $v ?></option><?php endforeach; ?>';
/**
* Makes ethernet inputs - enables to add ethrnet input name
*
* @param parent Parent object after which elements will be added
* @param count Count of ethernets
*/
function make_ethernet_inputs(parent, count)
{
var ename = 'values_ethernet_items';
// create root element
if (!$('#' + ename).length)
{
parent.after($('<tr>').append(
$('<td>').attr('colspan', '2').append(
$('<table>').attr('id', ename).css('margin', '4px 20px')
)
));
}
// limit
if (count > 99)
{
count = 99;
}
var e = $('#' + ename);
var ch_count = e.find('tr').length;
// inputs alread added but there is too much of them => drop some of them
if (ch_count > count)
{
for (var i = count; i < ch_count; i++)
{
e.find('#' + ename + '_id_' + i).remove();
}
}
// add missing items
else if (ch_count < count)
{
for (var i = ch_count; i < count; i++)
{
e.append($('<tr>').attr('id', ename + '_id_' + i).append(
$('<td>').html($('<label>').text('<?php echo __('Name') ?>:')).append(
$('<input>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_ETHERNET ?>][items][' + i + '][name]',
'value' : '<?php echo Iface_Model::get_default_name(Iface_Model::TYPE_ETHERNET) ?>' + (i + 1),
'class' : 'textbox',
'type' : 'text'
}).css('margin', '4px 15px')
)
));
}
}
}
/**
* Makes port inputs - enables to add port modes and numbers
*
* @param parent Parent object after which elements will be added
* @param count Count of ports
*/
function make_port_inputs(parent, count)
{
var ename = 'values_port_items';
// create root element
if (!$('#' + ename).length)
{
parent.after($('<tr>').append(
$('<td>').attr('colspan', '2').append(
$('<table>').attr('id', ename).css('margin', '4px 20px')
)
));
}
// limit
if (count > 99)
{
count = 99;
}
var e = $('#' + ename);
var ch_count = e.find('tr').length;
// inputs alread added but there is too much of them => drop some of them
if (ch_count > count)
{
for (var i = count; i < ch_count; i++)
{
e.find('#' + ename + '_id_' + i).remove();
}
}
// add missing items
else if (ch_count < count)
{
for (var i = ch_count; i < count; i++)
{
e.append($('<tr>').attr('id', ename + '_id_' + i).append(
$('<td>').html($('<label>').text('<?php echo __('Name') ?>:')).append(
$('<input>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_PORT ?>][items][' + i + '][name]',
'value' : '<?php echo Iface_Model::get_default_name(Iface_Model::TYPE_PORT) ?> ' + (i + 1),
'class' : 'textbox',
'type' : 'text'
}).css('margin', '4px 15px')
)
).append(
$('<td>').html($('<label>').text('<?php echo __('Port number') ?>:')).append(
$('<input>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_PORT ?>][items][' + i + '][number]',
'class' : 'textbox number',
'type' : 'text',
'value' : i + 1
}).css('width', '25px').css('margin', '4px 15px')
)
).append(
$('<td>').html($('<label>').text('<?php echo __('Mode') ?>:')).append(
$('<select>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_PORT ?>][items][' + i + '][port_mode]',
'class' : 'dropdown',
'type' : 'dropdown'
}).html(port_mode_options).css('margin', '4px')
)
));
}
}
}
/**
* Makes wireless ifaces inputs - enables to add wireless antenna and mode
*
* @param parent Parent object after which elements will be added
* @param count Max count of ifaces
*/
function make_wireless_iface_inputs(parent, count)
{
var ename = 'values_wireless_items';
// create root element
if (!$('#' + ename).length)
{
parent.after($('<tr>').append(
$('<td>').attr('colspan', '2').append(
$('<table>').attr('id', ename).css('margin', '4px 20px')
)
));
}
// limit
if (count > 99)
{
count = 99;
}
var e = $('#' + ename);
var ch_count = e.find('tr').length;
// inputs alread added but there is too much of them => drop some of them
if (ch_count > count)
{
for (var i = count; i < ch_count; i++)
{
e.find('#' + ename + '_id_' + i).remove();
}
}
// add missing items
else if (ch_count < count)
{
for (var i = ch_count; i < count; i++)
{
e.append($('<tr>').attr('id', ename + '_id_' + i).append(
$('<td>').html($('<label>').text('<?php echo __('Name') ?>:')).append(
$('<input>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_WIRELESS ?>][items][' + i + '][name]',
'value' : '<?php echo Iface_Model::get_default_name(Iface_Model::TYPE_WIRELESS) ?>' + (i + 1),
'class' : 'textbox',
'type' : 'text'
}).html(wiface_mode_options).css('margin', '4px 15px')
)
).append(
$('<td>').html($('<label>').text('<?php echo __('Mode') ?>:')).append(
$('<select>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_WIRELESS ?>][items][' + i + '][wireless_mode]',
'class' : 'dropdown',
'type' : 'dropdown'
}).html(wiface_mode_options).css('margin', '4px 15px')
)
).append(
$('<td>').html($('<label>').text('<?php echo __('Antenna') ?>:')).append(
$('<select>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_WIRELESS ?>][items][' + i + '][wireless_antenna]',
'class' : 'dropdown',
'type' : 'dropdown'
}).html(wiface_antenna_options).css('margin', '4px 15px')
)
));
}
}
}
/**
* Makes internal ifaces inputs - enables to add name
*
* @param parent Parent object after which elements will be added
* @param count Count of internal ifaces
*/
function make_internal_iface_inputs(parent, count)
{
var ename = 'values_internal_items';
// create root element
if (!$('#' + ename).length)
{
parent.after($('<tr>').append(
$('<td>').attr('colspan', '2').append(
$('<table>').attr('id', ename).css('margin', '4px 20px')
)
));
}
// limit
if (count > 99)
{
count = 99;
}
var e = $('#' + ename);
var ch_count = e.find('tr').length;
// inputs alread added but there is too much of them => drop some of them
if (ch_count > count)
{
for (var i = count; i < ch_count; i++)
{
e.find('#' + ename + '_id_' + i).remove();
}
}
// add missing items
else if (ch_count < count)
{
for (var i = ch_count; i < count; i++)
{
e.append($('<tr>').attr('id', ename + '_id_' + i).append(
$('<td>').html($('<label>').text('<?php echo __('Name') ?>:')).append(
$('<input>').attr({
'name' : 'values[<?php echo Iface_Model::TYPE_INTERNAL ?>][items][' + i + '][name]',
'value' : '<?php echo Iface_Model::get_default_name(Iface_Model::TYPE_INTERNAL) ?>' + i,
'class' : 'textbox',
'type' : 'text'
}).css('margin', '4px 15px')
)
));
}
}
}
/** Last value of wiface_min_max_keyup (cache) */
var wiface_min_max_keyup_cache = null;
/**
* Processes key events of inputs that allows to fill counts of wireless ifaces
*
* @param e Elements who trigger event
*/
function wiface_min_max_keyup(e)
{
var emin_count = $('input[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][min_count]"]');
var emax_count = $('input[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][max_count]"]');
var min_count = emin_count.val();
var max_count = emax_count.val();
if (!max_count.length)
{
max_count = 0;
}
else if (isNaN(max_count) || isNaN(min_count))
{
if (isNaN(max_count) && isNaN(min_count))
{
return false;
}
else if (isNaN(max_count))
{
max_count = 0;
}
else if (isNaN(min_count))
{
min_count = 0;
}
}
min_count = parseInt(min_count);
max_count = parseInt(max_count);
if (max_count < min_count)
{
max_count = min_count;
emax_count.val(max_count);
}
if (max_count != wiface_min_max_keyup_cache)
{
wiface_min_max_keyup_cache = max_count;
make_wireless_iface_inputs(emax_count.parent().parent(), max_count);
}
}
/// triggers code //////////////////////////////////////////////////////////
var e_port_count = $('input[name="values[<?php echo Iface_Model::TYPE_PORT ?>][count]"]');
var e_ethernet_count = $('input[name="values[<?php echo Iface_Model::TYPE_ETHERNET ?>][count]"]');
var e_wireless_min_count = $('input[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][min_count]"]');
var e_wireless_max_count = $('input[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][max_count]"]');
var e_internal_count = $('input[name="values[<?php echo Iface_Model::TYPE_INTERNAL ?>][count]"]');
// on change of ethernet count
e_ethernet_count.keyup(function ()
{
var count = $(this).val();
if (!count.length)
{
count = 0;
}
else if (isNaN(count))
{
return false;
}
make_ethernet_inputs($(this).parent().parent(), count);
});
// on change of port count
e_port_count.keyup(function ()
{
var count = $(this).val();
if (!count.length)
{
count = 0;
}
else if (isNaN(count))
{
return false;
}
make_port_inputs($(this).parent().parent(), count);
});
// on change of min wireless ifaces count
e_wireless_min_count.keyup(wiface_min_max_keyup);
// on change of max wireless ifaces count
e_wireless_max_count.keyup(wiface_min_max_keyup);
// on change of wireless ifaces count
e_internal_count.keyup(function ()
{
var count = $(this).val();
if (!count.length)
{
count = 0;
}
else if (isNaN(count))
{
return false;
}
make_internal_iface_inputs($(this).parent().parent(), count);
});
// add buttons for increasing, decreasing
input_add_increase_decrease_buttons(e_port_count, 0, 99);
input_add_increase_decrease_buttons(e_ethernet_count, 0, 99);
input_add_increase_decrease_buttons(e_wireless_min_count, 0, 99);
input_add_increase_decrease_buttons(e_wireless_max_count, 0, 99);
input_add_increase_decrease_buttons(e_internal_count, 0, 99);
<?php if (isset($device_template_value)): ?>
/// edit functionality /////////////////////////////////////////////////////
e_ethernet_count.trigger('keyup');
e_port_count.trigger('keyup');
e_wireless_min_count.trigger('keyup');
e_wireless_max_count.trigger('keyup');
e_internal_count.trigger('keyup');
// set values of ethernet ifaces items
<?php $i = 0; foreach ($device_template_value[Iface_Model::TYPE_ETHERNET]['items'] as $item): ?>
$('input[name="values[<?php echo Iface_Model::TYPE_ETHERNET ?>][items][<?php echo $i++ ?>][name]"]').val('<?php echo $item['name'] ?>');
<?php endforeach; ?>
// set values of wireless ifaces items
<?php $i = 0; foreach ($device_template_value[Iface_Model::TYPE_WIRELESS]['items'] as $item): ?>
$('input[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][items][<?php echo $i ?>][name]"]').val('<?php echo $item['name'] ?>');
$('select[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][items][<?php echo $i ?>][wireless_mode]"]').val('<?php echo $item['wireless_mode'] ?>');
$('select[name="values[<?php echo Iface_Model::TYPE_WIRELESS ?>][items][<?php echo $i++ ?>][wireless_antenna]"]').val('<?php echo $item['wireless_antenna'] ?>');
<?php endforeach; ?>
// set values of port items
<?php $i = 0; foreach ($device_template_value[Iface_Model::TYPE_PORT]['items'] as $item): ?>
$('input[name="values[<?php echo Iface_Model::TYPE_PORT ?>][items][<?php echo $i ?>][name]"]').val('<?php echo $item['name'] ?>');
$('select[name="values[<?php echo Iface_Model::TYPE_PORT ?>][items][<?php echo $i ?>][port_mode]"]').val('<?php echo $item['port_mode'] ?>');
$('input[name="values[<?php echo Iface_Model::TYPE_PORT ?>][items][<?php echo $i++ ?>][number]"]').val('<?php echo $item['number'] ?>');
<?php endforeach; ?>
// set values of internal ifaces items
<?php $i = 0; foreach ($device_template_value[Iface_Model::TYPE_INTERNAL]['items'] as $item): ?>
$('input[name="values[<?php echo Iface_Model::TYPE_INTERNAL ?>][items][<?php echo $i++ ?>][name]"]').val('<?php echo $item['name'] ?>');
<?php endforeach; ?>
<?php endif; ?>