Project

General

Profile

Download (9.65 KB) Statistics
| Branch: | Tag: | Revision:


function remove_interface(interface_id) {
$('#interface'+interface_id).remove();
$('#interfaceHidden'+interface_id+' .destroyFlag').val(1);
}

function edit_interface(interface_id) {
if (interface_id == null)
form = get_interface_template_clone();
else
form = $('#interfaces #interfaceHidden'+interface_id).clone(true);
show_interface_modal(form);
}

function show_interface_modal(modal_content) {
var modal_window = $('#interfaceModal');
var interface_id = modal_content.data('interface-id');

modal_window.data('current-id', interface_id);

var identifier = modal_content.find('.interface_identifier').val();


modal_window.find('.modal-body').html('');
modal_window.find('.modal-body').append(modal_content.contents());
modal_window.find('.modal-title').html(__('Interface') + ' ' + String(identifier));
modal_window.modal({'show': true});

modal_window.find('a[rel="popover-modal"]').popover();
modal_window.find('select').select2({ allowClear: true });
}

function save_interface_modal() {
var modal_window = $('#interfaceModal');
var interface_id = modal_window.data('current-id');

// mark the selected values to preserve them for form hiding
preserve_selected_options(modal_window);

var modal_form = modal_window.find('.modal-body').contents();
if (modal_form.find('.interface_primary').is(':checked')) {
$('#interfaceForms .interface_primary:checked').attr("checked", false);
}
if (modal_form.find('.interface_provision').is(':checked')) {
$('#interfaceForms .interface_provision:checked').attr("checked", false);
}

var interface_hidden = get_interface_hidden(interface_id);
interface_hidden.html('');
interface_hidden.append(modal_form);

close_interface_modal();
sync_primary_name(false);
update_interface_table();
update_fqdn();
}

function sync_primary_name(ovewrite_blank) {
var nic_name = primary_nic_form().find('.interface_name');
var host_name = $('#host_name');

if (ovewrite_blank && (nic_name.val().length == 0))
nic_name.val(host_name.val());
else
host_name.val(nic_name.val());
}

function close_interface_modal() {
var modal_window = $('#interfaceModal');

modal_window.modal('hide');
modal_window.removeData('current-id');
modal_window.find('.modal-body').html('');
}

function get_interface_template_clone() {
var content = $('#interfaces .interfaces_fields_template').html();
var interface_id = new Date().getTime();

content = fix_template_names(content, 'interfaces', interface_id);

var hidden = $(content);

$('#interfaceForms').closest("form").trigger({type: 'nested:fieldAdded', field: hidden});
$('a[rel="popover"]').popover();
$('a[rel="twipsy"]').tooltip();

hidden.attr('id', 'interfaceHidden'+interface_id);
hidden.data('interface-id', interface_id);
hidden.find('.destroyFlag').val(0);

return hidden;
}

function get_interface_row(interface_id) {
var interface_row = $('#interface'+interface_id);
if ( interface_row.length == 0) {
interface_row = $('#interfaceTemplate').clone(true);
interface_row.attr('id', 'interface'+interface_id);
interface_row.data('interface-id', interface_id);

interface_row.find('.showModal').click( function(){
edit_interface(interface_id);
return false;
});

interface_row.find('.removeInterface').click( function(){
remove_interface(interface_id);
return false;
});

interface_row.show();
interface_row.insertBefore('#interfaceTemplate');
}
return interface_row;
}

function get_interface_hidden(interface_id) {
var interface_hidden = $('#interfaceHidden'+interface_id);
if ( interface_hidden.length == 0) {

interface_hidden = $('<div></div>');
interface_hidden.attr('class', 'hidden');
interface_hidden.attr('id', 'interfaceHidden'+interface_id);
interface_hidden.data('interface-id', interface_id);

$('#interfaceForms').append(interface_hidden);
}
return interface_hidden;
}

function fqdn(name, domain) {
if (!name || !domain)
return ""
else
return name + '.' + domain;
}

function update_interface_row(row, interface_form) {

var has_errors = (interface_form.find('.has-error').length > 0)
row.toggleClass('has-error', has_errors);

var virtual = interface_form.find('.virtual').is(':checked');
var attached = interface_form.find('.attached').val();

var type = interface_form.find('.interface_type option:selected').text();
type += '<div class="additional-info">'
type += nic_info(interface_form);
type += '</div>'
row.find('.type').html(type);

row.find('.identifier').html(interface_form.find('.interface_identifier').val());
row.find('.mac').html(interface_form.find('.interface_mac').val());
row.find('.ip').html(interface_form.find('.interface_ip').val());

var flags = '', primary_class = '', provision_class = '';
if (interface_form.find('.interface_primary').is(':checked'))
primary_class = 'active'

if (interface_form.find('.interface_provision').is(':checked'))
provision_class = 'active'

if (primary_class == '' && provision_class == '')
row.find('.removeInterface').removeClass('disabled');
else
row.find('.removeInterface').addClass('disabled');

flags += '<i class="glyphicon glyphicon glyphicon-tag primary-flag '+ primary_class +'" title="" data-original-title="'+ __('Primary') +'"></i>';
flags += '<i class="glyphicon glyphicon glyphicon-hdd provision-flag '+ provision_class +'" title="" data-original-title="'+ __('Provisioning') +'"></i>';

row.find('.flags').html(flags);

row.find('.fqdn').html(fqdn(
interface_form.find('.interface_name').val(),
interface_form.find('.interface_domain option:selected').text()
));

$('.primary-flag').tooltip();
$('.provision-flag').tooltip();
}

function update_interface_table() {
$.each(active_interface_forms(), function(index, form) {
var interface_id = $(form).data('interface-id');

var interface_row = get_interface_row(interface_id);
var interface_hidden = get_interface_hidden(interface_id)

update_interface_row(interface_row, interface_hidden);
})
}

function active_interface_forms() {
return $.grep($('#interfaceForms > div'), function(f) {
var flag = $(f).find('.destroyFlag').val();
return (flag == false || flag == undefined);
});
}

function confirm_flag_change(element, element_selector, massage) {
if (!$(element).is(':checked'))
return;

var this_interface_id = $('#interfaceModal').data('current-id');

var other_selected;
other_selected = $(active_interface_forms()).find(element_selector + ':checked').closest('fieldset');
other_selected = $.grep(other_selected, function(i) {
return ($(i).parent().data('interface-id') != this_interface_id);
});

if (other_selected.length > 0) {
return confirm(massage);
}
}

function primary_nic_form() {
return $(active_interface_forms()).find('.interface_primary:checked').closest('fieldset');
}

$(document).on('click', '.interface_primary', function () {
var confirmed = confirm_flag_change(this, '.interface_primary',
__("Some other interface is already set as primary. Are you sure you want to use this one instead?")
);

if (confirmed) {
// preset dns name from host name if it's blank
var name = $(this).closest('fieldset').find('.interface_name');
if (name.val().length == 0)
name.val($('#host_name').val());
}

return confirmed;
});

$(document).on('click', '.interface_provision', function () {
return confirm_flag_change(this, '.interface_provision',
__("Some other interface is already set as provisioning. Are you sure you want to use this one instead?")
);
});

$(document).on('change', '#host_name', function () {
// copy host name to the primary interface's name
primary_nic_form().find('.interface_name').val($(this).val());
update_interface_table();
update_fqdn();
});

$(document).on('click', '.primary-flag', function () {
var interface_id = $(this).closest('tr').data('interface-id');

$('#interfaceForms .interface_primary:checked').prop('checked', false);
get_interface_hidden(interface_id).find('.interface_primary').prop('checked', true);

sync_primary_name(true);
update_interface_table();
update_fqdn();
});

$(document).on('click', '.provision-flag', function () {
var interface_id = $(this).closest('tr').data('interface-id');

$('#interfaceForms .interface_provision:checked').prop('checked', false);
get_interface_hidden(interface_id).find('.interface_provision').prop('checked', true);

update_interface_table();
});

var providerSpecificNICInfo = null;

function nic_info(form) {
var info = "";
if (form.find('.virtual').is(':checked') || form.find('.interface_type').val() == "Nic::Bond") {

// common virtual
var attached = form.find('.attached').val();
if (attached != "")
info = Jed.sprintf(__("virtual attached to %s"), attached);
else
info = __("virtual");

} else {

// provider specific
if (typeof(providerSpecificNICInfo) == "function")
info = providerSpecificNICInfo(form);
else
info = __("physical")

}
return info;
}

$(document).on('change', '.compute_attributes', function () {
// remove "from profile" note if any of the fields changes
$(this).closest('.compute_attributes').find('.profile').html('');
});

$(document).on('change', '.virtual', function () {
var is_virtual = $(this).is(':checked');

$(this).closest('fieldset').find('.virtual_form').toggle(is_virtual);
$(this).closest('fieldset').find('.compute_attributes').toggle(!is_virtual);
});

function update_fqdn() {
var host_name = $('#host_name').val();
var domain_name = primary_nic_form().find('.interface_domain option:selected').text();

var name = fqdn(host_name, domain_name)
if (name.length > 0)
name = "| " + name

$('#hostFQDN').text(name);
}
(12-12/31)