You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
6.7 KiB
222 lines
6.7 KiB
|
|
/*
|
|
* All required uci packages are stored variable uci.
|
|
* The GUI code displayes and manipulated this variable.
|
|
*/
|
|
var uci = {};
|
|
var gid = 0;
|
|
|
|
|
|
function init()
|
|
{
|
|
send('/cgi-bin/settings', { func : 'get_settings' }, function(data) {
|
|
uci = fromUCI(data);
|
|
rebuild_general();
|
|
adv_apply();
|
|
tr();
|
|
});
|
|
}
|
|
|
|
function updateFrom(src)
|
|
{
|
|
var obj = {};
|
|
collect_inputs(src, obj);
|
|
for (var name in obj)
|
|
{
|
|
var value = obj[name];
|
|
var path = name.split('#');
|
|
|
|
var pkg = path[0];
|
|
var sec = path[1];
|
|
var opt = path[2];
|
|
|
|
uci[pkg].pchanged = true;
|
|
uci[pkg][sec][opt] = value
|
|
}
|
|
}
|
|
|
|
function getChangeModeAction(ifname)
|
|
{
|
|
return function(e) {
|
|
var src = (e.target || e.srcElement);
|
|
var mode = (src.data || src.value);
|
|
delNetSection(ifname);
|
|
addNetSection(ifname, mode);
|
|
};
|
|
}
|
|
|
|
function appendSetting(p, path, value, mode)
|
|
{
|
|
var id = path.join('#');
|
|
var b;
|
|
var cfg = path[0]
|
|
var name = path[path.length-1];
|
|
switch (name)
|
|
{
|
|
case 'latitude':
|
|
b = append_input(p, 'tr_latitude', id, value);
|
|
b.lastChild.placeholder = '52.xxx';
|
|
addInputCheck(b.lastChild, /^$|^[1-9]\d{0,2}\.\d{1,8}$/, 'tr_invalid_gps');
|
|
addHelp(b, 'tr_gps_help');
|
|
break;
|
|
case 'longitude':
|
|
b = append_input(p, 'tr_longitude', id, value);
|
|
b.lastChild.placeholder = '8.xxx';
|
|
addInputCheck(b.lastChild, /^$|^[1-9]\d{0,2}\.\d{1,8}$/, 'tr_invalid_gps');
|
|
addHelp(b, 'tr_gps_help');
|
|
break;
|
|
case 'name':
|
|
b = append_input(p, 'tr_node_name', id, value);
|
|
b.lastChild.placeholder = 'MyRouter';
|
|
addInputCheck(b.lastChild, /^$|^[\-\^'\w\.\:\[\]\(\)\/ &@\+\u0080-\u00FF]{0,32}$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_node_name_help');
|
|
break;
|
|
case 'contact':
|
|
b = append_input(p, 'tr_contact_details', id, value);
|
|
b.lastChild.placeholder = 'info@example.com';
|
|
addInputCheck(b.lastChild, /^$|^[\-\^'\w\.\:\[\]\(\)\/ &@\+\u0080-\u00FF]{0,50}$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_contact_help');
|
|
break;
|
|
case 'community_url':
|
|
b = append_input(p, 'tr_community_site', id, value);
|
|
b.lastChild.placeholder = 'http://example.de';
|
|
b.classList.add('adv_hide');
|
|
addInputCheck(b.lastChild, /^$|^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/, 'Ung\xfcltige URL.');
|
|
addHelp(b, 'tr_website_help');
|
|
break;
|
|
case 'enabled':
|
|
if (cfg == 'autoupdater') {
|
|
b = append_radio(p, 'tr_autoupdater', id, value, [['tr_on', '1'], ['tr_off', '0']]);
|
|
addHelp(b, 'tr_autoupdater_help');
|
|
}
|
|
if (cfg == 'simple-tc') {
|
|
b = append_radio(p, 'tr_bandwidth_ctl', id, value, [['tr_on', '1'], ['tr_off', '0']]);
|
|
addHelp(b, 'tr_bandwidth_control_help');
|
|
}
|
|
if (cfg == 'fastd') {
|
|
b = append_radio(p, 'tr_vpn', id, value, [['tr_on', '1'], ['tr_off', '0']]);
|
|
addHelp(b, 'tr_fastd_help');
|
|
b.classList.add('adv_hide');
|
|
}
|
|
break;
|
|
case 'publish_map':
|
|
b = append_radio(p, 'tr_contribute_map', id, value, [['tr_none', 'none'], ['tr_basic', 'basic'], ['tr_more', 'more'], ['tr_all', 'all']]);
|
|
addHelp(b, 'tr_contribute_map_help');
|
|
break;
|
|
case 'limit_egress':
|
|
b = append_input(p, 'tr_freifunk_upload', id, value);
|
|
addInputCheck(b.lastChild, /^\d+$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_max_upload_help');
|
|
break;
|
|
case 'limit_ingress':
|
|
b = append_input(p, 'tr_freifunk_download', id, value);
|
|
addInputCheck(b.lastChild, /^\d+$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_max_download_help');
|
|
break;
|
|
case 'allow_access_from':
|
|
b = append_check(p, 'tr_access', id, split(value), [['WAN','wan'], ['LAN','lan'], ['Freifunk','freifunk']]);
|
|
addHelp(b, 'tr_access_help');
|
|
break;
|
|
case 'service_link':
|
|
var ula_prefix = uci['network']['globals']['ula_prefix'];
|
|
var addr_prefix = ula_prefix.replace(/:\/[0-9]+$/,''); //cut off ':/64'
|
|
var regexp = new RegExp('^$|((?=.*'+addr_prefix+'|.*\.ff[a-z]{0,3})(?=^.{0,128}$))');
|
|
|
|
b = append_input(p, 'tr_service_link', id, value);
|
|
b.lastChild.placeholder = 'http://['+addr_prefix+':1]/index.html';
|
|
addInputCheck(b.lastChild, regexp, 'tr_invalid_input');
|
|
addHelp(b, 'tr_external_ref_help');
|
|
break;
|
|
case 'service_label':
|
|
b = append_input(p, 'tr_service_name', id, value);
|
|
b.lastChild.placeholder = 'MyWebseite';
|
|
addInputCheck(b.lastChild, /^$|^[\[\]\(\) \w&\/.:\u0080-\u00FF]{0,32}$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_service_name_help');
|
|
break;
|
|
case 'service_display_max':
|
|
b = append_input(p, 'tr_max_entries', id, value);
|
|
addInputCheck(b.lastChild, /^\d+$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_max_entries_help');
|
|
break;
|
|
case 'community':
|
|
b = append_input(p, 'tr_community', id, value);
|
|
b.classList.add('adv_hide');
|
|
addInputCheck(b.lastChild, /^[a-z0-9_\-]{3,30}$/, 'tr_invalid_input');
|
|
addHelp(b, 'tr_community_help');
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
b.id = id; //needed for updateFrom
|
|
b.onchange = function() {
|
|
updateFrom(b);
|
|
};
|
|
|
|
return b;
|
|
}
|
|
|
|
function rebuild_general()
|
|
{
|
|
var gfs = $('general');
|
|
var rfs = $('resource');
|
|
var tfs = $('traffic');
|
|
|
|
removeChilds(gfs);
|
|
removeChilds(rfs);
|
|
removeChilds(tfs);
|
|
|
|
if ('freifunk' in uci) {
|
|
var f = uci.freifunk;
|
|
var i = firstSectionID(f, 'settings');
|
|
appendSetting(gfs, ['freifunk', i, 'name'], f[i]['name']);
|
|
appendSetting(gfs, ['freifunk', i, 'latitude'], f[i]['latitude']);
|
|
appendSetting(gfs, ['freifunk', i, 'longitude'], f[i]['longitude']);
|
|
appendSetting(gfs, ['freifunk', i, 'contact'], f[i]['contact']);
|
|
appendSetting(rfs, ['freifunk', i, 'community_url'], f[i]['community_url']);
|
|
appendSetting(rfs, ['freifunk', i, 'community'], f[i]['community']);
|
|
appendSetting(gfs, ['freifunk', i, 'publish_map'], f[i]['publish_map']);
|
|
appendSetting(gfs, ['freifunk', i, 'allow_access_from'], f[i]['allow_access_from']);
|
|
appendSetting(rfs, ['freifunk', i, 'service_label'], f[i]['service_label']);
|
|
appendSetting(rfs, ['freifunk', i, 'service_link'], f[i]['service_link']);
|
|
appendSetting(rfs, ['freifunk', i, 'service_display_max'], f[i]['service_display_max']);
|
|
}
|
|
|
|
if ('autoupdater' in uci) {
|
|
var a = uci.autoupdater;
|
|
var i = firstSectionID(a, 'autoupdater');
|
|
appendSetting(gfs, ['autoupdater', i, 'enabled'], a[i]['enabled']);
|
|
}
|
|
|
|
if ('simple-tc' in uci) {
|
|
var t = uci['simple-tc'];
|
|
var i = firstSectionID(t, 'interface');
|
|
appendSetting(tfs, ['simple-tc', i, 'enabled'], t[i]['enabled']);
|
|
appendSetting(tfs, ['simple-tc', i, 'limit_ingress'], t[i]['limit_ingress']);
|
|
appendSetting(tfs, ['simple-tc', i, 'limit_egress'], t[i]['limit_egress']);
|
|
}
|
|
|
|
if ('fastd' in uci) {
|
|
var a = uci.fastd;
|
|
var i = firstSectionID(a, 'fastd');
|
|
appendSetting(gfs, ['fastd', i, 'enabled'], a[i]['enabled']);
|
|
}
|
|
}
|
|
|
|
function save_data()
|
|
{
|
|
for (var name in uci)
|
|
{
|
|
var obj = uci[name];
|
|
if (!obj.pchanged)
|
|
continue;
|
|
var data = toUCI(obj);
|
|
send('/cgi-bin/misc', { func : 'set_config_file', name : name, data : data },
|
|
function(data) {
|
|
$('msg').textContent = data;
|
|
$('msg').focus();
|
|
init();
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|