572 lines
21 KiB
JavaScript
572 lines
21 KiB
JavaScript
'use strict';
|
|
'require form';
|
|
'require view';
|
|
'require uci';
|
|
'require fs';
|
|
'require network';
|
|
'require poll';
|
|
'require tools.widgets as widgets';
|
|
'require tools.nikki as nikki';
|
|
|
|
return view.extend({
|
|
load: function () {
|
|
return Promise.all([
|
|
uci.load('nikki'),
|
|
network.getNetworks(),
|
|
|
|
]);
|
|
},
|
|
render: function (data) {
|
|
const networks = data[1];
|
|
|
|
let m, s, o, so;
|
|
|
|
m = new form.Map('nikki');
|
|
|
|
s = m.section(form.NamedSection, 'mixin', 'mixin', _('Mixin Option'));
|
|
|
|
s.tab('general', _('General Config'));
|
|
|
|
o = s.taboption('general', form.ListValue, 'log_level', _('Log Level'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('silent');
|
|
o.value('error');
|
|
o.value('warning');
|
|
o.value('info');
|
|
o.value('debug');
|
|
|
|
o = s.taboption('general', form.ListValue, 'mode', _('Mode'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('global', _('Global Mode'));
|
|
o.value('rule', _('Rule Mode'));
|
|
o.value('direct', _('Direct Mode'));
|
|
|
|
o = s.taboption('general', form.ListValue, 'match_process', _('Match Process'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('off');
|
|
o.value('strict');
|
|
o.value('always');
|
|
|
|
o = s.taboption('general', form.ListValue, 'outbound_interface', _('Outbound Interface'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
|
|
for (const network of networks) {
|
|
if (network.getName() === 'loopback') {
|
|
continue;
|
|
}
|
|
o.value(network.getName());
|
|
}
|
|
|
|
o = s.taboption('general', form.ListValue, 'ipv6', _('IPv6'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('general', form.ListValue, 'unify_delay', _('Unify Delay'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('general', form.ListValue, 'tcp_concurrent', _('TCP Concurrent'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('general', form.ListValue, 'disable_tcp_keep_alive', _('Disable TCP Keep Alive'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('general', form.Value, 'tcp_keep_alive_idle', _('TCP Keep Alive Idle'));
|
|
o.datatype = 'uinteger';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('general', form.Value, 'tcp_keep_alive_interval', _('TCP Keep Alive Interval'));
|
|
o.datatype = 'uinteger';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('general', form.Value, 'global_client_fingerprint', _('Global Client Fingerprint'));
|
|
o.placeholder = _('Unmodified');
|
|
o.value('random', _('Random'));
|
|
o.value('chrome', 'Chrome');
|
|
o.value('firefox', 'Firefox');
|
|
o.value('safari', 'Safari');
|
|
o.value('edge', 'Edge');
|
|
|
|
s.tab('external_control', _('External Control Config'));
|
|
|
|
o = s.taboption('external_control', form.Value, 'ui_path', '*' + ' ' + _('UI Path'));
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('external_control', form.Value, 'ui_name', _('UI Name'));
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('external_control', form.Value, 'ui_url', _('UI Url'));
|
|
o.placeholder = _('Unmodified');
|
|
o.value('https://github.com/Zephyruso/zashboard/archive/refs/heads/gh-pages.zip', 'Zashboard');
|
|
o.value('https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip', 'MetaCubeXD');
|
|
o.value('https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip', 'YACD');
|
|
o.value('https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip', 'Razord');
|
|
|
|
o = s.taboption('external_control', form.Value, 'api_listen', '*' + ' ' + _('API Listen'));
|
|
o.datatype = 'ipaddrport(1)';
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('external_control', form.Value, 'api_secret', _('API Secret'));
|
|
o.password = true;
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('external_control', form.ListValue, 'selection_cache', _('Save Proxy Selection'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
s.tab('inbound', _('Inbound Config'));
|
|
|
|
o = s.taboption('inbound', form.ListValue, 'allow_lan', _('Allow Lan'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('inbound', form.Value, 'http_port', _('HTTP Port'));
|
|
o.datatype = 'port';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('inbound', form.Value, 'socks_port', _('SOCKS Port'));
|
|
o.datatype = 'port';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('inbound', form.Value, 'mixed_port', _('Mixed Port'));
|
|
o.datatype = 'port';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('inbound', form.Value, 'redir_port', '*' + ' ' + _('Redirect Port'));
|
|
o.datatype = 'port';
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('inbound', form.Value, 'tproxy_port', '*' + ' ' + _('TPROXY Port'));
|
|
o.datatype = 'port';
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('inbound', form.Flag, 'authentication', _('Overwrite Authentication'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('inbound', form.SectionValue, '_authentications', form.TableSection, 'authentication', _('Edit Authentications'));
|
|
o.retain = true;
|
|
o.depends('authentication', '1');
|
|
|
|
o.subsection.addremove = true;
|
|
o.subsection.anonymous = true;
|
|
o.subsection.sortable = true;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'username', _('Username'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'password', _('Password'));
|
|
so.password = true;
|
|
so.rmempty = false;
|
|
|
|
s.tab('tun', _('TUN Config'));
|
|
|
|
o = s.taboption('tun', form.Value, 'tun_device', '*' + ' ' + _('Device Name'));
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('tun', form.ListValue, 'tun_stack', _('Stack'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('system', 'System');
|
|
o.value('gvisor', 'gVisor');
|
|
o.value('mixed', 'Mixed');
|
|
|
|
o = s.taboption('tun', form.Value, 'tun_mtu', _('MTU'));
|
|
o.datatype = 'uinteger';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('tun', form.ListValue, 'tun_gso', _('GSO'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('tun', form.Value, 'tun_gso_max_size', _('GSO Max Size'));
|
|
o.datatype = 'uinteger';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('tun', form.ListValue, 'tun_endpoint_independent_nat', _('Endpoint Independent NAT'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('tun', form.Flag, 'tun_dns_hijack', _('Overwrite DNS Hijack'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('tun', form.DynamicList, 'tun_dns_hijacks', _('Edit DNS Hijacks'));
|
|
o.retain = true;
|
|
o.depends('tun_dns_hijack', '1');
|
|
o.value('tcp://any:53');
|
|
o.value('udp://any:53');
|
|
|
|
s.tab('dns', _('DNS Config'));
|
|
|
|
o = s.taboption('dns', form.Value, 'dns_listen', '*' + ' ' + _('DNS Listen'));
|
|
o.datatype = 'ipaddrport(1)';
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('dns', form.ListValue, 'dns_ipv6', _('IPv6'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('dns', form.ListValue, 'dns_mode', '*' + ' ' + _('DNS Mode'));
|
|
o.placeholder = _('Unmodified');
|
|
o.value('redir-host', 'Redir-Host');
|
|
o.value('fake-ip', 'Fake-IP');
|
|
|
|
o = s.taboption('dns', form.Value, 'fake_ip_range', '*' + ' ' + _('Fake-IP Range'));
|
|
o.datatype = 'cidr4';
|
|
o.placeholder = _('Unmodified');
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('dns', form.Flag, 'fake_ip_filter', _('Overwrite Fake-IP Filter'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('dns', form.DynamicList, 'fake_ip_filters', _('Edit Fake-IP Filters'));
|
|
o.retain = true;
|
|
o.depends('fake_ip_filter', '1');
|
|
|
|
o = s.taboption('dns', form.ListValue, 'fake_ip_filter_mode', _('Fake-IP Filter Mode'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('blacklist', _('Block Mode'));
|
|
o.value('whitelist', _('Allow Mode'));
|
|
|
|
o = s.taboption('dns', form.ListValue, 'fake_ip_cache', _('Fake-IP Cache'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('dns', form.ListValue, 'dns_respect_rules', _('Respect Rules'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('dns', form.ListValue, 'dns_doh_prefer_http3', _('DoH Prefer HTTP/3'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('dns', form.ListValue, 'dns_system_hosts', _('Use System Hosts'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('dns', form.ListValue, 'dns_hosts', _('Use Hosts'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('dns', form.Flag, 'hosts', _('Overwrite Hosts'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('dns', form.SectionValue, '_hosts', form.TableSection, 'hosts', _('Edit Hosts'));
|
|
o.retain = true;
|
|
o.depends('hosts', '1');
|
|
|
|
o.subsection.addremove = true;
|
|
o.subsection.anonymous = true;
|
|
o.subsection.sortable = true;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'domain_name', _('Domain Name'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.DynamicList, 'ip', _('IP'));
|
|
|
|
o = s.taboption('dns', form.Flag, 'dns_nameserver', _('Overwrite Nameserver'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('dns', form.SectionValue, '_dns_nameservers', form.TableSection, 'nameserver', _('Edit Nameservers'));
|
|
o.retain = true;
|
|
o.depends('dns_nameserver', '1');
|
|
|
|
o.subsection.addremove = true;
|
|
o.subsection.anonymous = true;
|
|
o.subsection.sortable = true;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.ListValue, 'type', _('Type'));
|
|
so.value('default-nameserver');
|
|
so.value('proxy-server-nameserver');
|
|
so.value('direct-nameserver');
|
|
so.value('nameserver');
|
|
so.value('fallback');
|
|
|
|
so = o.subsection.option(form.DynamicList, 'nameserver', _('Nameserver'));
|
|
|
|
o = s.taboption('dns', form.Flag, 'dns_nameserver_policy', _('Overwrite Nameserver Policy'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('dns', form.SectionValue, '_dns_nameserver_policies', form.TableSection, 'nameserver_policy', _('Edit Nameserver Policies'));
|
|
o.retain = true;
|
|
o.depends('dns_nameserver_policy', '1');
|
|
|
|
o.subsection.addremove = true;
|
|
o.subsection.anonymous = true;
|
|
o.subsection.sortable = true;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'matcher', _('Matcher'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.DynamicList, 'nameserver', _('Nameserver'));
|
|
|
|
s.tab('sniffer', _('Sniffer Config'));
|
|
|
|
o = s.taboption('sniffer', form.ListValue, 'sniffer', _('Enable'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('sniffer', form.ListValue, 'sniffer_sniff_dns_mapping', _('Sniff Redir-Host'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('sniffer', form.ListValue, 'sniffer_sniff_pure_ip', _('Sniff Pure IP'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('sniffer', form.Flag, 'sniffer_force_domain_name', _('Overwrite Force Sniff Domain Name'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('sniffer', form.DynamicList, 'sniffer_force_domain_names', _('Force Sniff Domain Name'));
|
|
o.retain = true;
|
|
o.depends('sniffer_force_domain_name', '1');
|
|
|
|
o = s.taboption('sniffer', form.Flag, 'sniffer_ignore_domain_name', _('Overwrite Ignore Sniff Domain Name'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('sniffer', form.DynamicList, 'sniffer_ignore_domain_names', _('Ignore Sniff Domain Name'));
|
|
o.retain = true;
|
|
o.depends('sniffer_ignore_domain_name', '1');
|
|
|
|
o = s.taboption('sniffer', form.Flag, 'sniffer_sniff', _('Overwrite Sniff By Protocol'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('sniffer', form.SectionValue, '_sniffer_sniffs', form.TableSection, 'sniff', _('Sniff By Protocol'));
|
|
o.retain = true;
|
|
o.depends('sniffer_sniff', '1');
|
|
|
|
o.subsection.anonymous = true;
|
|
o.subsection.addremove = false;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.ListValue, 'protocol', _('Protocol'));
|
|
so.value('HTTP');
|
|
so.value('TLS');
|
|
so.value('QUIC');
|
|
so.readonly = true;
|
|
|
|
so = o.subsection.option(form.DynamicList, 'port', _('Port'));
|
|
so.datatype = 'portrange';
|
|
|
|
so = o.subsection.option(form.Flag, 'overwrite_destination', _('Overwrite Destination'));
|
|
so.rmempty = false;
|
|
|
|
s.tab('rule', _('Rule Config'));
|
|
|
|
o = s.taboption('rule', form.Flag, 'rule_provider', _('Append Rule Provider'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('rule', form.SectionValue, '_rule_providers', form.GridSection, 'rule_provider', _('Edit Rule Providers'));
|
|
o.retain = true;
|
|
o.depends('rule_provider', '1');
|
|
|
|
o.subsection.anonymous = true;
|
|
o.subsection.addremove = true;
|
|
o.subsection.sortable = true;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.default = 1;
|
|
so.editable = true;
|
|
so.modalonly = false;
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'name', _('Name'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.ListValue, 'type', _('Type'));
|
|
so.default = 'http';
|
|
so.rmempty = false;
|
|
so.value('http');
|
|
so.value('file');
|
|
|
|
so = o.subsection.option(form.Value, 'url', _('Url'));
|
|
so.modalonly = true;
|
|
so.rmempty = false;
|
|
so.depends('type', 'http');
|
|
|
|
so = o.subsection.option(form.Value, 'node', _('Node'));
|
|
so.default = 'DIRECT';
|
|
so.modalonly = true;
|
|
so.depends('type', 'http');
|
|
so.value('GLOBAL');
|
|
so.value('DIRECT');
|
|
|
|
so = o.subsection.option(form.Value, 'file_size_limit', _('File Size Limit'));
|
|
so.datatype = 'uinteger';
|
|
so.default = 0;
|
|
so.modalonly = true;
|
|
so.depends('type', 'http');
|
|
|
|
so = o.subsection.option(form.FileUpload, 'file_path', _('File Path'));
|
|
so.modalonly = true;
|
|
so.rmempty = false;
|
|
so.root_directory = nikki.ruleProvidersDir;
|
|
so.depends('type', 'file');
|
|
|
|
so = o.subsection.option(form.ListValue, 'file_format', _('File Format'));
|
|
so.default = 'yaml';
|
|
so.value('mrs');
|
|
so.value('yaml');
|
|
so.value('text');
|
|
|
|
so = o.subsection.option(form.ListValue, 'behavior', _('Behavior'));
|
|
so.default = 'classical';
|
|
so.rmempty = false;
|
|
so.value('classical');
|
|
so.value('domain');
|
|
so.value('ipcidr');
|
|
|
|
so = o.subsection.option(form.Value, 'update_interval', _('Update Interval'));
|
|
so.datatype = 'uinteger';
|
|
so.default = 0;
|
|
so.modalonly = true;
|
|
so.depends('type', 'http');
|
|
|
|
o = s.taboption('rule', form.Flag, 'rule', _('Append Rule'));
|
|
o.rmempty = false;
|
|
|
|
o = s.taboption('rule', form.SectionValue, '_rules', form.TableSection, 'rule', _('Edit Rules'));
|
|
o.retain = true;
|
|
o.depends('rule', '1');
|
|
|
|
o.subsection.anonymous = true;
|
|
o.subsection.addremove = true;
|
|
o.subsection.sortable = true;
|
|
|
|
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
|
so.default = 1;
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'type', _('Type'));
|
|
so.rmempty = false;
|
|
so.value('RULE-SET', _('Rule Set'));
|
|
so.value('DOMAIN', _('Domain Name'));
|
|
so.value('DOMAIN-SUFFIX', _('Domain Name Suffix'));
|
|
so.value('DOMAIN-KEYWORD', _('Domain Name Keyword'));
|
|
so.value('DOMAIN-REGEX', _('Domain Name Regex'));
|
|
so.value('IP-CIDR', _('Destination IP'));
|
|
so.value('DST-PORT', _('Destination Port'));
|
|
so.value('PROCESS-NAME', _('Process Name'));
|
|
so.value('GEOSITE', _('Domain Name Geo'));
|
|
so.value('GEOIP', _('Destination IP Geo'));
|
|
|
|
so = o.subsection.option(form.Value, 'matcher', _('Matcher'));
|
|
so.rmempty = false;
|
|
|
|
so = o.subsection.option(form.Value, 'node', _('Node'));
|
|
so.default = 'GLOBAL';
|
|
so.value('GLOBAL');
|
|
so.value('DIRECT');
|
|
so.value('REJECT');
|
|
so.value('REJECT-DROP');
|
|
|
|
so = o.subsection.option(form.Flag, 'no_resolve', _('No Resolve'));
|
|
so.rmempty = false;
|
|
so.depends('type', 'IP-CIDR');
|
|
so.depends('type', 'IP-CIDR6');
|
|
so.depends('type', 'GEOIP');
|
|
|
|
s.tab('geox', _('GeoX Config'));
|
|
|
|
o = s.taboption('geox', form.ListValue, 'geoip_format', _('GeoIP Format'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('dat', 'DAT');
|
|
o.value('mmdb', 'MMDB');
|
|
|
|
o = s.taboption('geox', form.ListValue, 'geodata_loader', _('GeoData Loader'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('standard', _('Standard Loader'));
|
|
o.value('memconservative', _('Memory Conservative Loader'));
|
|
|
|
o = s.taboption('geox', form.Value, 'geosite_url', _('GeoSite Url'));
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('geox', form.Value, 'geoip_mmdb_url', _('GeoIP(MMDB) Url'));
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('geox', form.Value, 'geoip_dat_url', _('GeoIP(DAT) Url'));
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('geox', form.Value, 'geoip_asn_url', _('GeoIP(ASN) Url'));
|
|
o.placeholder = _('Unmodified');
|
|
|
|
o = s.taboption('geox', form.ListValue, 'geox_auto_update', _('GeoX Auto Update'));
|
|
o.optional = true;
|
|
o.placeholder = _('Unmodified');
|
|
o.value('0', _('Disable'));
|
|
o.value('1', _('Enable'));
|
|
|
|
o = s.taboption('geox', form.Value, 'geox_update_interval', _('GeoX Update Interval'));
|
|
o.datatype = 'uinteger';
|
|
o.placeholder = _('Unmodified');
|
|
|
|
s.tab('mixin_file_content', _('Mixin File Content'));
|
|
|
|
o = s.taboption('mixin_file_content', form.Flag, 'mixin_file_content', _('Enable'), _('Please go to the editor tab to edit the file for mixin'));
|
|
o.rmempty = false;
|
|
|
|
return m.render();
|
|
}
|
|
}); |