Fioddor Superconcentrado 6e747f281e
networks: Use radio buttons for network modes
Closes: #1974

BTW: Javascript IPV4/6 hide/show arrangements triggered on page load.
Otherwise page loads form fields inconsistently.

Signed-off-by: Fioddor Superconcentrado <fioddor@gmail.com>
[sunil: Fix the use of RadioSelect widget]
[sunil: Alter the wording of what each type means]
[sunil: Drop the help text for radio group as it is mostly repetitive]
[sunil: js: Make the entire jQuery code run on document ready]
[sunil: js: Revert unneeded double call to change methods, change() is enough]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2021-01-25 15:40:45 -08:00

101 lines
3.8 KiB
JavaScript

// SPDX-License-Identifier: AGPL-3.0-or-later
/**
* @licstart The following is the entire license notice for the JavaScript
* code in this page.
*
* This file is part of FreedomBox.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @licend The above is the entire license notice for the JavaScript code
* in this page.
*/
jQuery(function($) {
function ip_required(required, ip_version, fields) {
var prefix = '#id_' + ip_version + '_';
for (var i = 0; i < fields.length; i++) {
$(prefix + fields[i]).prop("required", required);
}
}
function ip_readonly(readonly, ip_version, fields) {
var prefix = '#id_' + ip_version + '_';
for (var i = 0; i < fields.length; i++) {
$(prefix + fields[i]).prop("readOnly", readonly);
if (readonly) {
$(prefix + fields[i]).val("");
$(prefix + fields[i]).prop("required", false);
}
}
}
function on_ipv4_method_change() {
var selected = $("input[name=ipv4_method]:checked");
if (selected.prop("value") == "manual") {
ip_required(true, 'ipv4', ['address']);
ip_readonly(false, 'ipv4', ['address', 'netmask', 'gateway',
'dns', 'second_dns'
]);
} else if (selected.prop("value") == "shared") {
ip_required(false, 'ipv4', ['address']);
ip_readonly(false, 'ipv4', ['address', 'netmask']);
ip_readonly(true, 'ipv4', ['gateway', 'dns', 'second_dns']);
} else if (selected.prop("value") == "auto") {
ip_readonly(true, 'ipv4', ['address', 'netmask', 'gateway']);
ip_readonly(false, 'ipv4', ['dns', 'second_dns']);
} else {
ip_readonly(true, 'ipv4', ['address', 'netmask', 'gateway',
'dns', 'second_dns'
]);
}
}
function on_ipv6_method_change() {
var selected = $("input[name=ipv6_method]:checked");
if (selected.prop("value") == "manual") {
ip_required(true, 'ipv6', ['address', 'prefix']);
ip_readonly(false, 'ipv6', ['address', 'prefix', 'gateway',
'dns', 'second_dns'
]);
} else if (selected.prop("value") == "auto" ||
$("#id_ipv6_method").prop("value") == "dhcp") {
ip_readonly(true, 'ipv6', ['address', 'prefix', 'gateway']);
ip_readonly(false, 'ipv6', ['dns', 'second_dns']);
} else {
ip_readonly(true, 'ipv6', ['address', 'prefix', 'gateway',
'dns', 'second_dns'
]);
}
}
$("#id_name").focus();
$("input[name=ipv4_method]").change(on_ipv4_method_change).change();
$("input[name=ipv6_method]").change(on_ipv6_method_change).change();
$('#id_show_password').change(function() {
// Changing type attribute from password to text is prevented by
// most browsers. Making a new form field works.
new_type = 'password';
if ($('#id_show_password').prop('checked'))
new_type = 'text';
$('#id_password').replaceWith(
$('#id_password').clone().attr('type', new_type));
});
});