Merge pull request #2203 from unraid/feat/responsive-improvements

feat: responsive improvements
This commit is contained in:
tom mortensen
2025-05-24 20:57:48 -07:00
committed by GitHub
32 changed files with 704 additions and 368 deletions

View File

@@ -32,7 +32,20 @@ function getUPSstatus() {
$(getUPSstatus);
</script>
<table class="tablesorter shift">
<thead><tr><th style="width:15%">_(Key)_</th><th style="width:35%">_(Value)_</th><th style="width:15%">_(Key)_</th><th style="width:35%">_(Value)_</th></tr></thead>
<tbody id="ups_status"><tr><td colspan="4"><div class="spinner"></div></td></tr></tbody>
</table>
<div class="TableContainer">
<table class="tablesorter shift">
<thead>
<tr>
<th style="width:15%">_(Key)_</th>
<th style="width:35%">_(Value)_</th>
<th style="width:15%">_(Key)_</th>
<th style="width:35%">_(Value)_</th>
</tr>
</thead>
<tbody id="ups_status">
<tr>
<td colspan="4"><div class="spinner"></div></td>
</tr>
</tbody>
</table>
</div>

View File

@@ -195,7 +195,12 @@ _(Docker vDisk size)_:
_(Docker vDisk location)_:
: <input type="text" id="DOCKER_IMAGE_FILE1" name="DOCKER_IMAGE_FILE1" autocomplete="off" spellcheck="false" value="<?=htmlspecialchars(_var($dockercfg,'DOCKER_IMAGE_FILE'))?>" placeholder="_(e.g.)_ /mnt/user/system/docker.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt" data-pickfolders="true" disabled required pattern="^[^\\]*(docker-xfs\.img|docker\.img)$">
<span class="deleteLabel"><label><input type="checkbox" class="deleteCheckbox"> _(Delete vDisk file)_</label></span>
<span class="deleteLabel">
<label>
<input type="checkbox" class="deleteCheckbox">
_(Delete vDisk file)_
</label>
</span>
<?if ($var['fsState'] != "Started"):?>
<span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span>
<?endif;?>
@@ -207,7 +212,12 @@ _(Docker vDisk location)_:
<div markdown="1" id="vdisk_dir" style="display:none">
_(Docker directory)_:
: <input type="text" id="DOCKER_IMAGE_FILE2" name="DOCKER_IMAGE_FILE2" autocomplete="off" spellcheck="false" value="<?=htmlspecialchars(_var($dockercfg,'DOCKER_IMAGE_FILE'))?>" placeholder="_(e.g.)_ /mnt/user/system/docker" data-pickcloseonfile="true" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="/mnt" data-pickfolders="true" disabled required pattern="^[^\\]*/$">
<span class="deleteLabel"><label><input type="checkbox" class="deleteCheckbox"> _(Delete directory)_</label></span>
<span class="deleteLabel">
<label>
<input type="checkbox" class="deleteCheckbox">
_(Delete directory)_
</label>
</span>
<?if ($var['fsState'] != "Started"):?>
<span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span>
<?endif;?>
@@ -283,7 +293,10 @@ _(Docker custom network type)_:
: <select name="DOCKER_NETWORK_TYPE">
<?=mk_option(_var($dockercfg,'DOCKER_NETWORK_TYPE'), '1', _('ipvlan'), $bridge?'':'disabled')?>
<?=mk_option(_var($dockercfg,'DOCKER_NETWORK_TYPE'), '', _('macvlan'), $bridge?'':'selected')?>
</select>&nbsp;_(Please read the Help carefully)_. _(Misconfiguration can cause problems)_.
</select>
<span class="input-instructions">
_(Please read the Help carefully)_. _(Misconfiguration can cause problems)_.
</span>
:docker_custom_network_type_help:
@@ -291,7 +304,10 @@ _(Host access to custom networks)_:
: <select name="DOCKER_ALLOW_ACCESS">
<?=mk_option(_var($dockercfg,'DOCKER_ALLOW_ACCESS'), '', _('Disabled'))?>
<?=mk_option(_var($dockercfg,'DOCKER_ALLOW_ACCESS'), 'yes', _('Enabled'))?>
</select>&nbsp;_(Make sure you understand what you are doing before enabling)_.
</select>
<span class="input-instructions">
_(Make sure you understand what you are doing before enabling)_.
</span>
:docker_custom_network_access_help:
@@ -333,32 +349,82 @@ _(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
case ($mask < 24): $prefix = $net[0].'.'.$net[1]; $box = 2; break;
case ($mask < 32): $prefix = $net[0].'.'.$net[1].'.'.$net[2]; $box = 3 ;break;
}
?>
: <input type="checkbox" id="<?=$docker_dhcp?>_edit" onchange="changeEdit(this.id, 4)"<?=$auto?'checked':''?>>
<span id="<?=$docker_dhcp?>_line" class="<?=$autoDisabled?>">
<span class="<?=$ip4class?>">**_(Subnet)_:** <?=$route?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=$gateway[$network]?></span>
<input type="checkbox" id="<?=$docker_dhcp?>_dhcp" onchange="changeDHCP(this.id, 4)"<?=$dhcp?'checked':''?><?=$autoDisabled?>>
**_(DHCP pool)_:**<span id="<?=$docker_dhcp?>_net" class="net <?=$dhcpDisabled?>"><?=$prefix?>.</span>
</span>
<?
for ($b=$box; $b<=3; $b++) {
// Build network select options arrays
$network_selects = [];
for ($b = $box; $b <= 3; $b++) {
switch ($b) {
case 1: $step = floor($size/65536)%256; break;
case 2: $step = floor($size/256)%256; break;
case 3: $step = $size%256; break;
case 1: $step = floor($size/65536) % 256; break;
case 2: $step = floor($size/256) % 256; break;
case 3: $step = $size % 256; break;
}
if ($step === 0) $step = 256;
$network_selects[$b] = [
'id' => "{$docker_dhcp}_{$b}",
'options' => []
];
for ($n = $net[$b]; $n <= $max[$b]; $n++) {
$network_selects[$b]['options'][] = mk_option($net_user[$b], $n, $n, $n % $step == 0 ? '' : 'class="hide"');
}
if ($step===0) $step = 256;
echo "<select id=\"{$docker_dhcp}_{$b}\" class=\"net\" $dhcpDisabled>";
for ($n=$net[$b]; $n<=$max[$b]; $n++) echo mk_option($net_user[$b],$n,$n,$n%$step==0?'':'class="hide"');
echo "</select>";
}
echo "/ ";
echo "<select id=\"{$docker_dhcp}_mask\" class=\"mask\" onchange=\"changeMask(this.id,this.value)\" $dhcpDisabled>";
for ($m=$mask+1; $m<=30; $m++) echo mk_option($mask_user,$m,$m);
echo "</select><span id=\"{$docker_dhcp}_size\" style=\"".($dhcp?'':'display:none')."\">($size "._('hosts').")</span>";
echo "<input type=\"hidden\" name=\"$docker_dhcp\" value=\"\">";
// Build mask select options
$mask_options = [];
for ($m = $mask + 1; $m <= 30; $m++) {
$mask_options[] = mk_option($mask_user, $m, $m);
}
?>
: <div class="flex flex-col justify-start flex-wrap gap-4">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" id="<?=$docker_dhcp?>_edit" onchange="changeEdit(this.id, 4)"<?=$auto?'checked':''?>>
_(Edit)_
</label>
<span id="<?=$docker_dhcp?>_line" class="flex flex-row items-center flex-wrap gap-4 <?=$autoDisabled?>">
<span class="<?=$ip4class?>">
<strong><?=_('Subnet')?>:</strong> <?=$route?>
</span>
<span class="<?=$gw4class?>">
<strong><?=_('Gateway')?>:</strong> <?=$gateway[$network]?>
</span>
<span class="flex flex-row items-center gap-2">
<span class="flex flex-row items-center gap-2">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" id="<?=$docker_dhcp?>_dhcp" onchange="changeDHCP(this.id, 4)"<?=$dhcp?'checked':''?><?=$autoDisabled?>>
<strong><?=_('DHCP pool')?>:</strong>
</label>
<span id="<?=$docker_dhcp?>_net" class="net <?=$dhcpDisabled?>">
<?=$prefix?>.
</span>
</span>
<span class="flex flex-row items-center gap-2">
<? foreach ($network_selects as $select): ?>
<select id="<?=$select['id']?>" class="net" <?=$dhcpDisabled?>>
<? foreach ($select['options'] as $option): ?>
<?=$option?>
<? endforeach; ?>
</select>
<? endforeach; ?>
<span>/</span>
<select id="<?=$docker_dhcp?>_mask" class="mask" onchange="changeMask(this.id,this.value)" <?=$dhcpDisabled?>>
<? foreach ($mask_options as $option): ?>
<?=$option?>
<? endforeach; ?>
</select>
<span id="<?=$docker_dhcp?>_size" class="flex-shrink-0" style="<?=$dhcp ? '' : 'display:none'?>">(<?=$size?> <?=_('hosts')?>)</span>
<input type="hidden" name="<?=$docker_dhcp?>" value="">
</span>
</span>
</span>
</div>
<?if ($hide_wlan):?>
</div>
@@ -384,17 +450,46 @@ $hide_eth = hide_eth($network);
<?endif;?>
_(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
: <input type="checkbox" id="DOCKER_CUSTOM_<?=$port?>_edit" onchange="changeCustom(this.id,4)"<?=$subnet?'checked':''?>><span id="DOCKER_CUSTOM_<?=$port?>_line" class="<?=$subnet?'':'disabled'?>">
<span class="<?=$ip4class?>">**_(Subnet)_:** <input type="text" id="DOCKER_CUSTOM_<?=$port?>_net" name="DOCKER_SUBNET_<?=$port?>" class="ip4" value="<?=$subnet?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>>/
<select id="DOCKER_CUSTOM_<?=$port?>_mask" name="DOCKER_MASK_<?=$port?>" class="mask"<?=$disabled?>>
<?for ($m=16; $m<=30; $m++) echo mk_option($mask?:24,$m,$m)?></select>
</span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <input type="text" id="DOCKER_CUSTOM_<?=$port?>_gw" name="DOCKER_GATEWAY_<?=$port?>" class="ip4" value="<?=htmlspecialchars(_var($dockercfg,"DOCKER_GATEWAY_$port"))?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>></span>
<input type="checkbox" id="DOCKER_CUSTOM_<?=$port?>_dhcp" onchange="customDHCP(this.id,4)"<?=$subnet?'checked':''?><?=$dhcpDisabled?>>
**_(DHCP pool)_:** <input type="text" id="DOCKER_CUSTOM_<?=$port?>_pool" name="DOCKER_RANGE_<?=$port?>" class="ip4" value="<?=$range?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>>/
<select id="DOCKER_CUSTOM_<?=$port?>_size" name="DOCKER_SIZE_<?=$port?>" class="mask" onchange="changeHosts(this.id,this.value)"<?=$disabled?>>
<?for ($m=16; $m<=30; $m++) echo mk_option($size?:25,$m,$m)?></select>
<span id="DOCKER_CUSTOM_<?=$port?>_hosts" style="<?=$subnet?'':'display:none'?>">(<?=pow(2,32-($size?:25))?> _(hosts)_)</span></span>
: <div class="flex flex-col justify-start flex-wrap gap-4">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" id="DOCKER_CUSTOM_<?=$port?>_edit" onchange="changeCustom(this.id,4)"<?=$subnet?'checked':''?>>
<?=_('Edit') ?>
</label>
<span id="DOCKER_CUSTOM_<?=$port?>_line" class="flex flex-row items-center flex-wrap gap-4 <?=$subnet?'':'disabled'?>">
<span class="flex flex-row items-center gap-2 <?=$ip4class?>">
<label class="flex flex-row items-center gap-2">
<strong><?=_('Subnet') ?>:</strong>
<input type="text" id="DOCKER_CUSTOM_<?=$port?>_net" name="DOCKER_SUBNET_<?=$port?>" class="ip4" value="<?=$subnet?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>>
</label>
<span>/</span>
<select id="DOCKER_CUSTOM_<?=$port?>_mask" name="DOCKER_MASK_<?=$port?>" class="mask"<?=$disabled?>>
<?for ($m=16; $m<=30; $m++) echo mk_option($mask?:24,$m,$m)?>
</select>
</span>
<span class="flex flex-row items-center gap-2">
<label class="flex flex-row items-center gap-2 <?=$gw4class?>">
<strong><?=_('Gateway') ?>:</strong>
<input type="text" id="DOCKER_CUSTOM_<?=$port?>_gw" name="DOCKER_GATEWAY_<?=$port?>" class="ip4" value="<?=htmlspecialchars(_var($dockercfg,"DOCKER_GATEWAY_$port"))?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>>
</label>
<span class="flex flex-row items-center gap-2">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" id="DOCKER_CUSTOM_<?=$port?>_dhcp" onchange="customDHCP(this.id,4)"<?=$subnet?'checked':''?><?=$dhcpDisabled?>>
<strong><?=_('DHCP pool') ?>:</strong>
</label>
<input type="text" id="DOCKER_CUSTOM_<?=$port?>_pool" name="DOCKER_RANGE_<?=$port?>" class="ip4" value="<?=$range?>" title="_(IPv4 address A.B.C.D)_"<?=$disabled?>>
<span>/</span>
<select id="DOCKER_CUSTOM_<?=$port?>_size" name="DOCKER_SIZE_<?=$port?>" class="mask" onchange="changeHosts(this.id,this.value)"<?=$disabled?>>
<?for ($m=16; $m<=30; $m++) echo mk_option($size?:25,$m,$m)?>
</select>
<span id="DOCKER_CUSTOM_<?=$port?>_hosts" class="flex-shrink-0" style="<?=$subnet?'':'display:none'?>">
(<?=pow(2,32-($size?:25))?> _(hosts)_)
</span>
</span>
</span>
</span>
</div>
<?endif;?>
<?if ($hide_eth):?>
@@ -430,10 +525,16 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
$net_user = $dhcp6 ? str_replace("$net:","",base_net($dhcp6)) : '';
$mask_user = $dhcp6 ? explode('/',$dhcp6)[1] : $mask;
?>
: <input type="checkbox" id="<?=$docker_dhcp6?>_edit" onchange="changeEdit(this.id, 6)"<?=$auto6?'checked':''?>>
<span id="<?=$docker_dhcp6?>_line" class="<?=$auto6Disabled?>">
<span class="ip6">**_(Subnet)_:** <?=$route?></span>
<span class="gw6">**_(Gateway)_:** <?=$gateway6[$network]?></span>
: <span class="flex flex-col justify-start flex-wrap gap-4">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" id="<?=$docker_dhcp6?>_edit" onchange="changeEdit(this.id, 6)"<?=$auto6?'checked':''?>>
_(Edit)_
</label>
<span id="<?=$docker_dhcp6?>_line" class="<?=$auto6Disabled?>">
<span class="ip6">**_(Subnet)_:** <?=$route?></span>
<span class="gw6">**_(Gateway)_:** <?=$gateway6[$network]?></span>
</span>
</span>
<?if ($hide_wlan):?>
</div>
@@ -458,11 +559,27 @@ $hide_eth = hide_eth($network);
<?endif;?>
_(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
: <input type="checkbox" id="DOCKER_CUSTOM6_<?=$port?>_edit" onchange="changeCustom(this.id,6)"<?=$subnet6?'checked':''?>><span id="DOCKER_CUSTOM6_<?=$port?>_line" class="<?=$subnet6?'':'disabled'?>">
<span class="ip6">**_(Subnet)_:**<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_net" name="DOCKER_SUBNET6_<?=$port?>" class="ip6" value="<?=$subnet6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>>/
<select id="DOCKER_CUSTOM6_<?=$port?>_mask" name="DOCKER_MASK6_<?=$port?>" class="mask"<?=$disabled?>>
<?for ($m=64; $m<=120; $m+=8) echo mk_option($mask6?:64,$m,$m)?></select></span>
<span class="gw6">**_(Gateway)_:**<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_gw" name="DOCKER_GATEWAY6_<?=$port?>" class="gw6" value="<?=_var($dockercfg,"DOCKER_GATEWAY6_$port")?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>></span>
: <div class="flex flex-col justify-start flex-wrap gap-4">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" id="DOCKER_CUSTOM6_<?=$port?>_edit" onchange="changeCustom(this.id,6)"<?=$subnet6?'checked':''?>>
<?=_('Edit') ?>
</label>
<span id="DOCKER_CUSTOM6_<?=$port?>_line" class="flex flex-row items-center flex-wrap gap-2 <?=$subnet6?'':'disabled'?>">
<span class="ip6 flex flex-row items-center gap-2">
<strong><?=_('Subnet') ?>:</strong>
<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_net" name="DOCKER_SUBNET6_<?=$port?>" class="ip6" value="<?=$subnet6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>>
<span>/</span>
<select id="DOCKER_CUSTOM6_<?=$port?>_mask" name="DOCKER_MASK6_<?=$port?>" class="mask"<?=$disabled?>>
<?for ($m=64; $m<=120; $m+=8) echo mk_option($mask6?:64,$m,$m)?>
</select>
</span>
<span class="gw6 flex flex-row items-center gap-2">
<strong><?=_('Gateway') ?>:</strong>
<input type="text" id="DOCKER_CUSTOM6_<?=$port?>_gw" name="DOCKER_GATEWAY6_<?=$port?>" class="gw6" value="<?=_var($dockercfg,"DOCKER_GATEWAY6_$port")?>" title="_(IPv6 address nnnn:xxxx::yyyy)_"<?=$disabled?>>
</span>
</span>
</div>
<?if ($hide_eth):?>
</div>
@@ -534,9 +651,11 @@ $hide_wlan = hide_wlan($network);
<?endif;?>
_(IPv4 custom network on interface)_ <?=$network?>:
: <span class="<?=$gw4class?>">**_(Subnet)_:** <?=$route?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=$gateway[$network]?></span>
<span>**_(DHCP pool)_:** <?=_var($dockercfg,$docker_dhcp) ?: "_(not set)_"?><?if (isset($dockercfg[$docker_dhcp])):?>&nbsp;&nbsp;(<?=pow(2,32-my_explode('/',$dockercfg[$docker_dhcp])[1])?> _(hosts)_)<?endif;?></span>
: <span class="flex flex-row flex-wrap items-center gap-4">
<span class="<?=$gw4class?>">**_(Subnet)_:** <?=$route?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=$gateway[$network]?></span>
<span>**_(DHCP pool)_:** <?=_var($dockercfg,$docker_dhcp) ?: "_(not set)_"?><?if (isset($dockercfg[$docker_dhcp])):?>&nbsp;&nbsp;(<?=pow(2,32-my_explode('/',$dockercfg[$docker_dhcp])[1])?> _(hosts)_)<?endif;?></span>
</span>
<?if ($hide_wlan):?>
</div>
@@ -571,9 +690,11 @@ if (substr($network,0,4) != 'wlan') {
<?endif;?>
_(IPv4 custom network on interface)_ <?=$network?>:
: <span class="<?=$gw4class?>">**_(Subnet)_:** <?=$subnet?>/<?=$mask?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=_var($dockercfg,"DOCKER_GATEWAY_$port")?></span>
**_(DHCP pool)_:** <?=$range ? "$range/$size" : "_(not set)_"?><?if ($range):?>&nbsp;&nbsp;(<?=pow(2,32-($size?:25))?> _(hosts)_)<?endif;?>
: <span class="flex flex-row flex-wrap items-center gap-4">
<span class="<?=$gw4class?>">**_(Subnet)_:** <?=$subnet?>/<?=$mask?></span>
<span class="<?=$gw4class?>">**_(Gateway)_:** <?=_var($dockercfg,"DOCKER_GATEWAY_$port")?></span>
<span>**_(DHCP pool)_:** <?=$range ? "$range/$size" : "_(not set)_"?><?if ($range):?>&nbsp;&nbsp;(<?=pow(2,32-($size?:25))?> _(hosts)_)<?endif;?></span>
</span>
<?if ($hide_eth):?>
</div>
@@ -593,8 +714,10 @@ if (isset($dockercfg[$docker_dhcp6]) || empty($dockercfg["DOCKER_AUTO_$net"])):?
<?endif;?>
_(IPv6 custom network on interface)_ <?=$network?>:
: <span class="gw6">**_(Subnet)_:** <?=$route?></span>
<span class="gw6">**_(Gateway)_:** <?=$gateway6[$network]?></span>
: <span class="flex flex-row flex-wrap items-center gap-4">
<span class="gw6">**_(Subnet)_:** <?=$route?></span>
<span class="gw6">**_(Gateway)_:** <?=$gateway6[$network]?></span>
</span>
<?if ($hide_wlan):?>
</div>
@@ -629,8 +752,10 @@ if (substr($network,0,4) != 'wlan') {
<?endif;?>
_(IPv6 custom network on interface)_ <?=$network?>:
: <span class="gw6">**_(Subnet)_:** <?=$subnet6?>/<?=$mask6?></span>
<span class="gw6">**_(Gateway)_:** <?=_var($dockercfg,"DOCKER_GATEWAY6_$port")?></span>
: <span class="flex flex-row flex-wrap items-center gap-4">
<span class="gw6">**_(Subnet)_:** <?=$subnet6?>/<?=$mask6?></span>
<span class="gw6">**_(Gateway)_:** <?=_var($dockercfg,"DOCKER_GATEWAY6_$port")?></span>
</span>
<?if ($hide_eth):?>
</div>
@@ -667,6 +792,7 @@ _(btrfs scrub status)_:
<input type="hidden" name="#arg[1]" value="start">
<input type="hidden" name="#arg[2]" value="/var/lib/docker">
<input type="hidden" name="#arg[3]" value="-r">
&nbsp;
: <span class="inline-block">
<input type="submit" value="_(Scrub)_">
@@ -679,6 +805,7 @@ _(btrfs scrub status)_:
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_scrub">
<input type="hidden" name="#arg[1]" value="cancel">
<input type="hidden" name="#arg[2]" value="/var/lib/docker">
&nbsp;
: <span class="inline-block">
<input type="submit" value="_(Cancel)_">

View File

@@ -1154,7 +1154,9 @@ _(Container Network)_:
<div markdown="1" class='TSNetworkAllowed'>
_(Use Tailscale)_:
: <input type="checkbox" class="switch-on-off" name="contTailscale" id="contTailscale" <?php if (!empty($xml['TailscaleEnabled']) && $xml['TailscaleEnabled'] == 'true') echo 'checked'; ?> onchange="showTailscale(this)">
: <span class="flex flex-row items-center">
<input type="checkbox" class="switch-on-off" name="contTailscale" id="contTailscale" <?php if (!empty($xml['TailscaleEnabled']) && $xml['TailscaleEnabled'] == 'true') echo 'checked'; ?> onchange="showTailscale(this)">
</span>
:docker_tailscale_help:
@@ -1411,7 +1413,9 @@ _(Console shell command)_:
</select>
_(Privileged)_:
: <input type="checkbox" class="switch-on-off" name="contPrivileged">
: <span class="flex flex-row items-center">
<input type="checkbox" class="switch-on-off" name="contPrivileged">
</span>
:docker_privileged_help:
@@ -1485,7 +1489,7 @@ _(Default Value)_:
<div id="Mode"></div>
_(Description)_:
: <textarea name="Description" spellcheck="false" cols="80" rows="3" style="width:304px;"></textarea>
: <textarea name="Description" spellcheck="false" cols="80" rows="3"></textarea>
<div markdown="1" class="advanced">
_(Display)_:
@@ -1520,8 +1524,20 @@ _(Password Mask)_:
<input type="hidden" name="confDisplay[]" value="{6}">
<input type="hidden" name="confRequired[]" value="{7}">
<input type="hidden" name="confMask[]" value="{8}">
<span class="{11}"><i class="fa fa-fw fa-{13}"></i>&nbsp;&nbsp;{0}:</span>
: <span class="boxed"><input type="text" class="setting_input" name="confValue[]" default="{2}" value="{9}" autocomplete="off" spellcheck="false" {11}>{10}<br><span class='orange-text'>{12}: {1}</span><br><span class="orange-text">{4}</span><br></span>
: <span class="flex flex-col gap-4">
<span class="flex flex-row flex-wrap items-center gap-4 buttons-no-margin">
<input type="text" class="setting_input" name="confValue[]" default="{2}" value="{9}" autocomplete="off" spellcheck="false" {11}>
{10}
</span>
<span class="boxed">
<span class='orange-text'>{12}: {1}</span>
<br>
<span class="orange-text">{4}</span>
<br>
</span>
</span>
</div>
<div markdown="1" id="templateAllocations" style="display:none">
@@ -1865,11 +1881,15 @@ $(function() {
confNum += 1;
Opts = Settings.Config[i];
if (Opts.Display == "always-hide" || Opts.Display == "advanced-hide") {
Opts.Buttons = "<span class='advanced'><button type='button' onclick='editConfigPopup("+confNum+",<?=$disableEdit?>)'>_(Edit)_</button>";
Opts.Buttons = "<span class='flex flex-row items-center gap-4'>";
Opts.Buttons += "<span class='advanced'><button type='button' onclick='editConfigPopup("+confNum+",<?=$disableEdit?>)'>_(Edit)_</button>";
Opts.Buttons += "<button type='button' onclick='removeConfig("+confNum+")'>_(Remove)_</button></span>";
Opts.Buttons += "</span>";
} else {
Opts.Buttons = "<button type='button' onclick='editConfigPopup("+confNum+",<?=$disableEdit?>)'>_(Edit)_</button>";
Opts.Buttons = "<span class='flex flex-row items-center gap-4'>";
Opts.Buttons += "<button type='button' onclick='editConfigPopup("+confNum+",<?=$disableEdit?>)'>_(Edit)_</button>";
Opts.Buttons += "<button type='button' onclick='removeConfig("+confNum+")'>_(Remove)_</button>";
Opts.Buttons += "</span>";
}
Opts.Number = confNum;
if (Opts.Type == "Device") {

View File

@@ -8,9 +8,7 @@
}
span.boxed {
display: inline-block;
line-height: normal;
white-space: normal;
width: 60%;
max-width: 100ch;
}
span.cpu,
label.checkbox {
@@ -29,7 +27,7 @@ span.ip {
display: inline-block;
width: 160px;
}
dl,
/* dl,
dt,
dd {
line-height: normal !important;
@@ -41,21 +39,21 @@ dl {
dl > dt:nth-of-type(2),
dl > dd:nth-of-type(2) {
padding: 20px 0 0 0 !important;
}
input.setting_input {
} */
/* input.setting_input {
margin-right: 4rem;
}
input,
} */
/* input,
select {
margin-top: -0.8rem !important;
}
div#configLocation,
} */
/* div#configLocation,
div#configLocation dl {
padding: 0 !important;
}
div#configLocation dt {
margin-top: -0.18rem !important;
}
} */
:root {
--add-container-file-tree-background: var(--black);

View File

@@ -24,10 +24,10 @@ select.mask {
min-width: 0;
margin: 0 10px 0 4px;
}
select.net {
/* select.net {
min-width: 0;
margin: 0 4px 0 2px;
}
} */
select option.hide {
display: none;
}
@@ -51,11 +51,11 @@ input.pool6 {
width: 40px;
margin: 0 4px 0 1px;
}
span.net {
/* span.net {
margin-left: 4px;
margin-right: 2px;
}
span.ip4 {
} */
/* span.ip4 {
display: inline-block;
width: 260px;
}
@@ -66,11 +66,11 @@ span.ip6 {
span.gw4 {
display: inline-block;
width: 200px;
}
span.gw6 {
} */
/* span.gw6 {
display: inline-block;
width: 270px;
}
} */
span.nonexist {
margin-left: 20px;
}

View File

@@ -315,6 +315,7 @@ _(btrfs scrub status)_:
<input type="hidden" name="#arg[1]" value="start">
<input type="hidden" name="#arg[2]" value="/etc/libvirt">
<input type="hidden" name="#arg[3]" value="-r">
&nbsp;
: <span class="inline-block">
<input type="submit" value="_(Scrub)_">
@@ -327,6 +328,7 @@ _(btrfs scrub status)_:
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_scrub">
<input type="hidden" name="#arg[1]" value="cancel">
<input type="hidden" name="#arg[2]" value="/etc/libvirt">
&nbsp;
: <span class="inline-block">
<input type="submit" value="_(Cancel)_">

View File

@@ -7,9 +7,6 @@
--vm-machines-file-tree-background: var(--gray-100);
}
body {
-webkit-overflow-scrolling: touch;
}
.errortext {
color: var(--red-800); /* Condensed from: #ef3d47 */
display: none;
@@ -30,10 +27,8 @@ body {
}
#download_button {
cursor: pointer;
margin-left: -2px;
color: var(--blue-700); /* Condensed from: #08c */
display: none;
transform: translate(0px, 2px);
}
#download_button.fa-spin {
cursor: default;
@@ -48,16 +43,9 @@ body {
}
#remove_button {
cursor: pointer;
margin-left: -2px;
color: var(--red-800); /* Condensed from: #ef3d47 */
display: none;
transform: translate(0px, 2px);
}
#remove_button span {
font-family: clear-sans;
}
/* .fileTree {
width: 300px;
max-height: 150px;
} */

View File

@@ -15,20 +15,28 @@ Tag="icon-cpu"
*/
?>
<form name="is">
<input type="hidden" name="names" value="isolcpus">
<input type="hidden" name="names" value="isolcpus">
<div class="TableContainer">
<table class='tablesorter shift' style='width:auto'>
<div class="TableContainer--no-min-width">
<table class="tablesorter shift" style="width: auto">
<thead>
<tr>
<th><i class="fa fa-list"></i> _(Isolation)_</th>
<?create()?>
</tr>
</thead>
<tbody id="table-is"><?=$spinner?></tbody>
</table>
</div>
<input type="button" value="_(Apply)_" onclick="apply(this.form)" disabled><input type="button" value="_(Done)_" onclick="done()"><span id="wait-is" class="red-text" style="display:none"><i class="fa fa-spinner fa-spin"></i> _(Please wait)_...</span>
<tbody id="table-is"><?=$spinner?></tbody>
</table>
</div>
<div class="flex flex-row items-center gap-2">
<input type="button" value="_(Apply)_" onclick="apply(this.form)" disabled>
<input type="button" value="_(Done)_" onclick="done()">
<span id="wait-is" class="red-text" style="display:none">
<i class="fa fa-spinner fa-spin"></i>
<span>_(Please wait)_...</span>
</span>
</div>
</form>
<?if (!$safemode):?>
<?else:?>

View File

@@ -16,21 +16,30 @@ Tag="icon-cpu"
?>
<?if ($dockerd):?>
<form name="ct">
<input type="hidden" name="names" id="names-ct" value="">
<div class="TableContainer">
<table class='tablesorter shift' style='width:auto'>
<thead>
<tr>
<th><i class="fa fa-list"></i> _(Container)_</th>
<?create()?>
</tr>
</thead>
<tbody id="table-ct">
<?=$spinner?>
</tbody>
</table>
</div>
<input type="button" value="_(Apply)_" onclick="apply(this.form)" disabled><input type="button" value="_(Done)_" onclick="done()"><span id="wait-ct" class="red-text" style="display:none"><i class="fa fa-spinner fa-spin"></i> _(Please wait)_...</span>
<input type="hidden" name="names" id="names-ct" value="">
<div class="TableContainer--no-min-width">
<table class="tablesorter shift" style="width: auto">
<thead>
<tr>
<th><i class="fa fa-list"></i> _(Container)_</th>
<?create()?>
</tr>
</thead>
<tbody id="table-ct">
<?=$spinner?>
</tbody>
</table>
</div>
<div class="flex flex-row items-center gap-2">
<input type="button" value="_(Apply)_" onclick="apply(this.form)" disabled>
<input type="button" value="_(Done)_" onclick="done()">
<span id="wait-ct" class="red-text" style="display:none">
<i class="fa fa-spinner fa-spin"></i>
<span>_(Please wait)_...</span>
</span>
</div>
</form>
<?else:?>
<div class="notice">_(No CPU pinning available. Docker service must be started)_</div>

View File

@@ -310,19 +310,28 @@ $(function() {
</script>
<?if ($libvirtd):?>
<form name="vm">
<input type="hidden" name="names" id="names-vm" value="">
<div class="TableContainer">
<table class='tablesorter shift' style='width:auto'>
<thead>
<tr>
<th><i class="fa fa-list"></i> _(VM)_</th>
<?create("vm")?>
</tr>
</thead>
<tbody id="table-vm"><?=$spinner?></tbody>
</table>
</div>
<input type="button" value="_(Apply)_" onclick="apply(this.form)" disabled><input type="button" value="_(Done)_" onclick="done()"><span id="wait-vm" class="red-text" style="display:none"><i class="fa fa-spinner fa-spin"></i> _(Please wait)_...</span>
<input type="hidden" name="names" id="names-vm" value="">
<div class="TableContainer--no-min-width">
<table class="tablesorter shift" style="width: auto">
<thead>
<tr>
<th><i class="fa fa-list"></i> _(VM)_</th>
<?create("vm")?>
</tr>
</thead>
<tbody id="table-vm"><?=$spinner?></tbody>
</table>
</div>
<div class="flex flex-row items-center gap-2">
<input type="button" value="_(Apply)_" onclick="apply(this.form)" disabled>
<input type="button" value="_(Done)_" onclick="done()">
<span id="wait-vm" class="red-text" style="display:none">
<i class="fa fa-spinner fa-spin"></i>
<span>_(Please wait)_...</span>
</span>
</div>
</form>
<?else:?>
<div class="notice">_(No CPU pinning available. VM service must be started)_</div>

View File

@@ -1380,6 +1380,7 @@ _(xfs_repair status)_:
<input type="hidden" name="#cleanup" value="true">
<input type="hidden" name="smEvents" value="">
<input type="hidden" name="smGlue" value="<?=_var($var,'smGlue')?>">
<?if (_var($disk,'rotational',1)==1):?>
_(Warning disk temperature threshold)_ (&deg;<?=_var($display,'unit','C')?>):
<?elseif (_var($disk,'transport')=='nvme'):?>

View File

@@ -281,6 +281,7 @@ _(Default critical SSD temperature threshold)_ (&deg;<?=_var($display,'unit','C'
<input type="hidden" name="olddata" value="">
<input type="hidden" name="oldluks" value="">
<?endif;?>
_(Existing encryption key)_:
: <select name="oldinput" class="lock" onchange='selectInput(this.value,true)' <?=$keyfile?'disabled':''?>>
<?=mk_option(1,'text',_('Passphrase'))?>
@@ -290,9 +291,14 @@ _(Existing encryption key)_:
<?if (!$keyfile):?>
<div markdown="1" id="oldtext">
_(Enter existing passphrase)_:
: <input type="password" name="oldtext" class="lock" maxlength="512" value="" autocomplete="off" spellcheck="false"><input name="showPass" type="checkbox" class="lock" onchange="showInput(this.checked,true)">_(show passphrase)_
: <div class="flex flex-row items-center gap-2">
<input type="password" name="oldtext" class="lock" maxlength="512" value="" autocomplete="off" spellcheck="false">
<label for="showPass">
<input name="showPass" type="checkbox" class="lock" onchange="showInput(this.checked,true)">
_(show passphrase)_
</label>
</div>
</div>
<div markdown="1" id="oldfile" style="display:none">
_(Select existing keyfile)_:
: <input type="file" name="oldfile" class="lock" onchange="getFileContent(event,this.form,'olddata')">
@@ -308,7 +314,13 @@ _(Change encryption key)_:
<div markdown="1" id="newtext">
_(Type new passphrase)_:
: <input type="password" name="newtext" class="lock" maxlength="512" value="" autocomplete="off" spellcheck="false" onkeyup="checkInput(this.form)" placeholder="_(use printable characters only)_"><input name="showPass" type="checkbox" class="lock" onchange="showInput(this.checked,false)">_(show passphrase)_
: <div class="flex flex-row items-center gap-2">
<input type="password" name="newtext" class="lock" maxlength="512" value="" autocomplete="off" spellcheck="false" onkeyup="checkInput(this.form)" placeholder="_(use printable characters only)_">
<label for="showPass">
<input name="showPass" type="checkbox" class="lock" onchange="showInput(this.checked,false)">
_(show passphrase)_
</label>
</div>
_(Retype new passphrase)_:
: <input type="password" name="newcopy" class="lock" maxlength="512" value="" autocomplete="off" spellcheck="false" onkeyup="checkInput(this.form)">
@@ -335,6 +347,7 @@ _(Select new keyfile)_:
<input type="hidden" name="#top" value="1">
<input type="hidden" name="smEvents" value="">
<input type="hidden" name="smIndex" value="0">
_(Default SMART notification value)_:
: <select name="smSelect">
<?=mk_option(_var($var,'smSelect'), "0", _('Raw'))?>

View File

@@ -649,9 +649,7 @@ _(IPv6 DNS server)_ 3:
_(Interface description)_:
: <input type="text" name="DESCRIPTION:0" maxlength="80" autocomplete="off" spellcheck="false" value="<?=htmlspecialchars(_var($eth0, "DESCRIPTION:0"))?>">
&nbsp;
: <span class="inline-block">
<span class="inline-block">
<input type="button" class="form" value="_(Info)_" onclick="networkInfo('eth0')">
</span>

View File

@@ -73,7 +73,6 @@ $(function() {
});
</script>
<div class="title nocontrol shift">&nbsp;</div>
<form markdown="1" name="ethX_settings" method="POST" action="/update.php" target="progressFrame" onchange="signalRun(this,2)" onsubmit="return prepareSettings(this)">
<input type="hidden" name="#file" value="<?=$ini?>">
<input type="hidden" name="#include" value="/webGui/include/update.ethernet.php">
@@ -85,13 +84,16 @@ $(function() {
<input type="hidden" name="BRNAME" value="brX">
<input type="hidden" name="BRSTP" value="no">
<input type="hidden" name="BRFD" value="0">
_(Interface description)_:
<?if (!$more):?>
: <input type="text" name="DESCRIPTION:0" maxlength="80" autocomplete="off" spellcheck="false" value="<?=htmlspecialchars(_var($ethX,"DESCRIPTION:0"))?>">
<input type="button" class="form" value="_(Info)_" onclick="networkInfo('ethX')">
<?else:?>
: <span class="<?=$class?>"><?=$reason?></span>
<?endif;?>
: <?if (!$more):?>
<input type="text" name="DESCRIPTION:0" maxlength="80" autocomplete="off" spellcheck="false" value="<?=htmlspecialchars(_var($ethX,"DESCRIPTION:0"))?>">
<span class="inline-block">
<input type="button" class="form" value="_(Info)_" onclick="networkInfo('ethX')">
</span>
<?else:?>
<span class="<?=$class?>"><?=$reason?></span>
<?endif;?>
:eth_interface_description_help:
@@ -252,7 +254,9 @@ _(Enable VLANs)_:
<div markdown="1" id="index-ethX-<?=$i?>" class="access-ethX shade hide">
_(Interface description)_:
: <input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" autocomplete="off" spellcheck="false" value="<?=htmlspecialchars(_var($ethX,"DESCRIPTION:$i"))?>">
<input type="button" class="form" value="_(Info)_" onclick="networkInfo('eth0',<?=_var($ethX,"VLANID:$i")?>)">
<span class="inline-block">
<input type="button" class="form" value="_(Info)_" onclick="networkInfo('eth0',<?=_var($ethX,"VLANID:$i")?>)">
</span>
:eth_interface_description_help:
@@ -346,10 +350,15 @@ _(IPv6 privacy extensions)_:
<input type="submit" value="_(Apply)_" onclick="$('#wait_<?=$tabbed?'eth0':'ethX'?>').show()" disabled>
<input type="button" value="_(Done)_" onclick="done()">
</span>
<input type="button" name="#shut_ethX" value="<?=_('Port '.$cmd)?>" onclick="portToggle('ethX','<?=$cmd?>')">
<?if (!$service):?>
<input type="button" id="button-add-ethX" class="hide" value="_(Add VLAN)_" onclick="addVLAN('ethX')">
<?else:?><?=sprintf(_('Stop **%s** to make changes, see'),$service).' (<a href="/Settings">'._('Settings').'</a>)'?><?endif;?>
<span class="flex flex-row flex-wrap items-center gap-4">
<input type="button" name="#shut_ethX" value="<?=_('Port '.$cmd)?>" onclick="portToggle('ethX','<?=$cmd?>')">
<?if (!$service):?>
<input type="button" id="button-add-ethX" class="hide" value="_(Add VLAN)_" onclick="addVLAN('ethX')">
<?endif;?>
</span>
<?if ($service):?>
<span><?=sprintf(_('Stop **%s** to make changes, see'),$service).' (<a href="/Settings">'._('Settings').'</a>)'?></span>
<?endif;?>
</form>
<script markdown="1" type="text/html" id="network-template-ethX">

View File

@@ -68,7 +68,6 @@ $(function(){
_(Current listening interfaces)_:
: <span id="listen"><?=exec("$docroot/webGui/scripts/show_interfaces") ?: _('Any')?></span><span class="red-text" style="margin-left:30px"><?=exec("$docroot/webGui/scripts/error_interfaces")?></span>
<hr>
_(Include listening interfaces)_:
: <textarea name="include" spellcheck="false" cols="80" rows="<?=substr_count($include_interfaces, "\n") + 1?>" maxlength="2048" name="text" class="resize-none"><?=htmlspecialchars($include_interfaces)?></textarea>

View File

@@ -54,7 +54,6 @@ function update_info(id,mac) {
$('#info-'+id).html(info['_'+mac.replace(/:/g,'')]);
}
</script>
<div class="title nocontrol shift">&nbsp;</div>
<form markdown="1" name="network_rules" method="POST" action="/update.php" target="progressFrame" onsubmit="return check_rules(this)">
<input type="hidden" name="#file" value="not-used">
<input type="hidden" name="#include" value="/webGui/include/update.rules.php">

View File

@@ -36,6 +36,90 @@ if (file_exists($memory)) {
}
if ($parity['mode']<2) $parity['cumulative'] = '';
if ($parity['mode']==2) $parity['frequency'] = '1';
// Build day options array based on mode
$day_options = [];
$day_select_attrs = 'name="day"';
if ($parity['mode'] == 2) {
// Weekly mode - regular dropdown
for ($d = 0; $d < count($days); $d++) {
$day_options[] = mk_option($parity['day'], strval($d), ucfirst(_($days[$d],0)));
}
} elseif ($parity['mode'] == 5) {
// Custom mode - multiple select
$day_select_attrs = 'id="s1" name="day" multiple="multiple" style="display:none"';
for ($d = 0; $d < count($days); $d++) {
$day_options[] = mk_option_check($parity['day'], strval($d), ucfirst(_($days[$d],0)));
}
} else {
// Other modes - disabled placeholder
$day_options[] = mk_option($parity['day'], "*", "--------");
}
// Build dotm (day of the month/week) options array based on mode
$dotm_options = [];
if ($parity['mode'] >= 3) {
if ($parity['mode'] == 5) {
// Custom mode - week options
$dotm_options[] = mk_option($parity['dotm'], "*", _("Every week"));
$dotm_options[] = mk_option($parity['dotm'], "W1", _("First week"));
$dotm_options[] = mk_option($parity['dotm'], "W2", _("Second week"));
$dotm_options[] = mk_option($parity['dotm'], "W3", _("Third week"));
$dotm_options[] = mk_option($parity['dotm'], "W4", _("Fourth week"));
$dotm_options[] = mk_option($parity['dotm'], "WL", _("Last week"));
} else {
// Monthly/Yearly mode - day options
$dotm_options[] = mk_option($parity['dotm'], "1", _("First day"));
$dotm_options[] = mk_option($parity['dotm'], "28-31", _("Last day"));
for ($d = 2; $d <= 31; $d++) {
$dotm_options[] = mk_option($parity['dotm'], strval($d), sprintf("%02d", $d));
}
}
} else {
// Other modes - disabled placeholder
$dotm_options[] = mk_option($parity['dotm'], "*", "--------");
}
// Set the label for dotm field based on mode
$dotm_label = ($parity['mode'] < 5) ? _('Day of the month') : _('Week of the month');
// Build month options array based on mode
$month_options = [];
$month_select_attrs = 'name="month"';
if ($parity['mode'] >= 4) {
if ($parity['mode'] == 5) {
// Custom mode - multiple select
$month_select_attrs = 'id="s2" name="month" multiple="multiple" style="display:none"';
for ($m = 0; $m < count($months); $m++) {
$month_options[] = mk_option_check($parity['month'], strval($m+1), ucfirst(_($months[$m],0)));
}
} else {
// Yearly mode - regular dropdown
for ($m = 0; $m < count($months); $m++) {
$month_options[] = mk_option($parity['month'], strval($m+1), ucfirst(_($months[$m],0)));
}
}
} else {
// Other modes - disabled placeholder
$month_options[] = mk_option($parity['month'], "*", "--------");
}
// Build hour options array based on mode
$hour_options = [];
if ($parity['mode'] > 0) {
// Active modes - generate 24-hour options with 30-minute intervals
for ($h = 0; $h < 24; $h++) {
$hour_options[] = mk_option($parity['hour'], sprintf("0 %d", $h), sprintf("%02d:00", $h));
$hour_options[] = mk_option($parity['hour'], sprintf("30 %d", $h), sprintf("%02d:30", $h));
}
} else {
// Disabled mode - placeholder
$hour_options[] = mk_option($parity['hour'], "*", "--------");
}
?>
<script>
<?if ($parity['mode']==5):?>
@@ -100,6 +184,7 @@ $(function(){
<input type="hidden" name="#file" value="dynamix/dynamix.cfg"/>
<input type="hidden" name="#section" value="parity"/>
<input type="hidden" name="#include" value="/webGui/include/update.parity.php"/>
_(Scheduled parity check)_:
: <select name="mode" onchange="submit()">
<?for ($m=0; $m<count($mode); $m++):?>
@@ -110,83 +195,37 @@ _(Scheduled parity check)_:
:parity_check_scheduled_help:
_(Day of the week)_:
<?if ($parity['mode']==2):?>
: <select name="day">
<?for ($d=0; $d<count($days); $d++):?>
<?=mk_option($parity['day'], strval($d), ucfirst(_($days[$d],0)))?>
<?endfor;?>
<?elseif ($parity['mode']==5):?>
: <select id="s1" name="day" multiple="multiple" style="display:none">
<?for ($d=0; $d<count($days); $d++):?>
<?=mk_option_check($parity['day'], strval($d), ucfirst(_($days[$d],0)))?>
<?endfor;?>
<?else:?>
: <select name="day">
<?=mk_option($parity['day'], "*", "--------")?>
<?endif;?>
: <select <?=$day_select_attrs?>>
<?foreach ($day_options as $option):?>
<?=$option?>
<?endforeach;?>
</select>
:parity_day_of_the_week_help:
<?if ($parity['mode']<5):?>
_(Day of the month)_:
<?else:?>
_(Week of the month)_:
<?endif;?>
<?= $dotm_label ?>:
: <select name="dotm">
<?if ($parity['mode']>=3):?>
<?if ($parity['mode']==5):?>
<?=mk_option($parity['dotm'], "*", _("Every week"))?>
<?=mk_option($parity['dotm'], "W1", _("First week"))?>
<?=mk_option($parity['dotm'], "W2", _("Second week"))?>
<?=mk_option($parity['dotm'], "W3", _("Third week"))?>
<?=mk_option($parity['dotm'], "W4", _("Fourth week"))?>
<?=mk_option($parity['dotm'], "WL", _("Last week"))?>
<?else:?>
<?=mk_option($parity['dotm'], "1", _("First day"))?>
<?=mk_option($parity['dotm'], "28-31", _("Last day"))?>
<?for ($d=2; $d<=31; $d++):?>
<?=mk_option($parity['dotm'], strval($d), sprintf("%02d", $d))?>
<?endfor;?>
<?endif;?>
<?else:?>
<?=mk_option($parity['dotm'], "*", "--------")?>
<?endif;?>
<?foreach ($dotm_options as $option):?>
<?=$option?>
<?endforeach;?>
</select>
:parity_week_of_the_month_help:
_(Time of the day)_:
: <select name="hour">
<?if ($parity['mode']>0):?>
<?for ($h=0; $h<24; $h++):?>
<?=mk_option($parity['hour'], sprintf("0 %d", $h), sprintf("%02d:00", $h))?>
<?=mk_option($parity['hour'], sprintf("30 %d",$h), sprintf("%02d:30", $h))?>
<?endfor;?>
<?else:?>
<?=mk_option($parity['hour'], "*", "--------")?>
<?endif;?>
<?foreach ($hour_options as $option):?>
<?=$option?>
<?endforeach;?>
</select>
:parity_time_of_the_day_help:
_(Month of the year)_:
<?if ($parity['mode']>=4):?>
<?if ($parity['mode']==5):?>
: <select id="s2" name="month" multiple="multiple" style="display:none">
<?for ($m=0; $m<count($months); $m++):?>
<?=mk_option_check($parity['month'], strval($m+1), ucfirst(_($months[$m],0)))?>
<?endfor;?>
<?else:?>
: <select name="month">
<?for ($m=0; $m<count($months); $m++):?>
<?=mk_option($parity['month'], strval($m+1), ucfirst(_($months[$m],0)))?>
<?endfor;?>
<?endif;?>
<?else:?>
: <select name="month">
<?=mk_option($parity['month'], "*", "--------")?>
<?endif;?>
: <select <?=$month_select_attrs?>>
<?foreach ($month_options as $option):?>
<?=$option?>
<?endforeach;?>
</select>
:parity_month_of_the_year_help:
@@ -210,7 +249,7 @@ _(Cumulative parity check)_:
<div markdown="1" id="cumulative" style="display:none">
_(Accumulation frequency)_:
: <select name="frequency">
<?=mk_option(_var($parity,'frequency'), "1", _("Daily"))?>
<?=mk_option(_var($parity,'frequency'), "1", _("Daily"),$parity['mode']==2 ? 'disabled' : '')?>
<?=mk_option(_var($parity,'frequency'), "7", _("Weekly"),$parity['mode']==2 ? 'disabled' : '')?>
</select>
@@ -226,6 +265,7 @@ _(Accumulation duration)_:
:parity_accumulation_duration_help:
</div>
&nbsp;
: <span class="inline-block">
<input type="submit" name="#apply" value="_(Apply)_" disabled>

View File

@@ -74,13 +74,20 @@ $(function(){
<div class="shade" style="margin-top:12px;padding:12px 4px;">
<form markdown="1" name="add_routes" method="POST" action="/webGui/include/RoutingTable.php" target="progressFrame" onsubmit="setTimeout(resetTable,500)">
_(Enter route + gateway + metric)_:
: <input type="text" name="route" maxlength="39" value="" class="fixed" placeholder="_(IPv4/nn or IPv6/nn route)_" required>
<input type="text" name="gateway" class="fixed" value="" list="device" placeholder="_(gateway name or address)_" required>
<datalist id="device"><?foreach ($list as $port):?><?echo "<option value='$port'>"?><?endforeach;?></datalist>
<span class="inline-block">
<input type="text" name="metric" min="1" max="9999" value="" class="trim" placeholder="1"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred))_*
: <span class="flex flex-row flex-wrap items-center gap-2">
<input type="text" name="route" maxlength="39" value="" class="fixed" placeholder="_(IPv4/nn or IPv6/nn route)_" required>
<input type="text" name="gateway" class="fixed" value="" list="device" placeholder="_(gateway name or address)_" required>
<datalist id="device"><?foreach ($list as $port):?><?echo "<option value='$port'>"?><?endforeach;?></datalist>
<span class="flex flex-row flex-wrap items-center gap-2">
<input type="text" name="metric" min="1" max="9999" value="" class="trim" placeholder="1">
<span class="flex flex-row flex-wrap items-center gap-1">
<i class="fa fa-sort-numeric-asc"></i>
<span>_(optional metric (lowest is preferred))_</span>
</span>
</span>
<input type="hidden" name="task" value="Add Route">
</span>
<input type="hidden" name="task" value="Add Route">
:eth_routing_table_help:
&nbsp;

View File

@@ -48,8 +48,11 @@ function prepareMenu(form) {
$('input[name="#arg[1]"]').val(form.boot.checked?1:0);
if ($('div.basic').is(':visible')) {
var label = [], area = [];
$(form).find('span[id^=label]').each(function(){
label.push($(this).text());
$(form).find('label[id^=label]').each(function(){
var $label = $(this).clone();
$label.find('input').remove();
var labelText = $label.text().replace(/\s+/g, ' ').trim();
label.push(labelText);
});
$(form).find('textarea.menu').each(function(i){
var start = $('#input-'+i).prop('checked') ? menu+'\n' : '';
@@ -186,6 +189,7 @@ $(function(){
<input type="hidden" name="#command" value="/webGui/scripts/bootmode">
<input type="hidden" name="#arg[1]" value="">
<input type="hidden" name="text" value="">
<div markdown="1" class="basic">
_(Syslinux configuration)_:
: <?$i=0;

View File

@@ -147,7 +147,80 @@ $(function() {
<?endif;?>
showLog(logfile);
});
$('.tabs').append("<span class='status'><span class='lite label'>_(Log size)_:&nbsp;&nbsp;<input type='number' id='max' value='' placeholder='<?=$max?>'></span><?=$select?><span class='lite label'><label>_(Text)_<input type='checkbox' class='ctrl' onclick='highlight(!this.checked,\"N\")' checked></label></span><span class='error label'><label>_(Error)_<input type='checkbox' onclick='highlight(this.checked,\"E\")' checked></label></span><span class='warn label'><label>_(Warning)_<input type='checkbox' onclick='highlight(this.checked,\"W\")' checked></label></span><span class='system label'><label>_(System)_<input type='checkbox' onclick='highlight(this.checked,\"S\")' checked></label></span><span class='array label'><label>_(Array)_<input type='checkbox' onclick='highlight(this.checked,\"A\")' checked></label></span><span class='login label'><label>_(Login)_<input type='checkbox' onclick='highlight(this.checked,\"L\")' checked></label></span><span class='lite label'><input type='checkbox' class='ctrl' onclick='toggle(this.checked)' checked></span></span>");
// $('.title .right').append("");
</script>
<pre class='up'></pre>
<input type="button" id="download" value="_(Download)_" onclick="syslog(zipfile())"><input type="button" value="_(Refresh)_" onclick="showLog(logfile)"><input type="button" value="_(Done)_" onclick="done()">
<div class="syslog-controls">
<div class="flex flex-row justify-between items-center gap-4 flex-wrap w-full">
<div class="flex flex-row items-center gap-4">
<div class="lite label">
<label class="flex flex-row items-center gap-2">
<span class="flex-shrink-0">_(Log size)_:</span>
<input type="number" id="max" value="" placeholder="<?=$max?>" class="w-20">
</label>
</div>
<?if (!empty($select)):?>
<div class="lite label">
<label class="flex flex-row items-center gap-2">
<span class="flex-shrink-0">_(Log file)_:</span>
<?= $select ?>
</label>
</div>
<?endif;?>
</div>
<div class="flex flex-wrap flex-row items-center gap-3">
<div class="lite label">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" class="ctrl" onclick="highlight(!this.checked, 'N')" checked>
_(Text)_
</label>
</div>
<span class="error label">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" onclick="highlight(this.checked, 'E')" checked>
_(Error)_
</label>
</span>
<span class="warn label">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" onclick="highlight(this.checked, 'W')" checked>
_(Warning)_
</label>
</span>
<span class="system label">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" onclick="highlight(this.checked, 'S')" checked>
_(System)_
</label>
</span>
<span class="array label">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" onclick="highlight(this.checked, 'A')" checked>
_(Array)_
</label>
</span>
<span class="login label">
<label class="flex flex-row items-center gap-2">
<input type="checkbox" onclick="highlight(this.checked, 'L')" checked>
_(Login)_
</label>
</span>
<span class="lite label">
<label class="flex items-center gap-2">
<input type="checkbox" class="ctrl" onclick="toggle(this.checked)" checked>
_(Toggle All)_
</label>
</span>
</div>
</div>
</div>
<pre class="up"></pre>
<div class="flex flex-row items-center gap-2">
<input type="button" id="download" value="_(Download)_" onclick="syslog(zipfile())">
<input type="button" value="_(Refresh)_" onclick="showLog(logfile)">
<input type="button" value="_(Done)_" onclick="done()">
</div>

View File

@@ -165,9 +165,18 @@ _(Custom image)_:
:user_add_custom_image_help:
_(Password)_:
: <input type="hidden" name="userPassword" value="">
<input type="password" name="userPasswordGUI" maxlength="129" autocomplete="new-password" onKeyUp="validatePassword(this.value);this.form.cmdUserEdit.disabled=(this.form.userName.value=='' || this.form.userPasswordGUI.value!=this.form.userPasswordConfGUI.value)">
<i id="showPass" class="fa fa-eye" style="cursor:pointer" title="_(Show / Hide password)_" onclick="showPassword()"></i><span><span class="usage-disk sys none"><span id="strength-bar" style="width:0"></span><span></span></span><span id="strength-text"></span></span>
: <span class="flex flex-row items-center gap-2">
<input type="hidden" name="userPassword" value="">
<input type="password" name="userPasswordGUI" maxlength="129" autocomplete="new-password" onKeyUp="validatePassword(this.value);this.form.cmdUserEdit.disabled=(this.form.userName.value=='' || this.form.userPasswordGUI.value!=this.form.userPasswordConfGUI.value)">
<i id="showPass" class="fa fa-eye" style="cursor:pointer" title="_(Show / Hide password)_" onclick="showPassword()"></i>
<span>
<span class="usage-disk sys none">
<span id="strength-bar" style="width:0"></span>
<span></span>
</span>
<span id="strength-text"></span>
</span>
</span>
:user_password_help:

View File

@@ -202,14 +202,23 @@ _(Delete)_<input type="checkbox" name="confirmDelete" onChange="chkDelete(this.f
<input type="button" value="_(Done)_" onclick="done('UserEdit')">
</span>
</form>
<br><br>
<form markdown="1" method="POST" action="/update.htm" onsubmit="return checkPassword(this)" target="progressFrame">
<input type="hidden" name="userName" value="<?=htmlspecialchars($name)?>">
_(Password)_:
: <input type="hidden" name="userPassword" value="">
<input type="password" name="userPasswordGUI" maxlength="129" autocomplete="new-password" onKeyUp="validatePassword(this.value);this.form.cmdUserEdit.disabled=(this.form.userPasswordGUI.value != this.form.userPasswordConfGUI.value);">
<i id="showPass" class="fa fa-eye" style="cursor:pointer" title="_(Show / Hide password)_" onclick="showPassword()"></i><span><span class="usage-disk sys none"><span id="strength-bar" style="width:0"></span><span></span></span><span id="strength-text"></span></span>
: <span class="flex flex-row items-center gap-2">
<input type="hidden" name="userPassword" value="">
<input type="password" name="userPasswordGUI" maxlength="129" autocomplete="new-password" onKeyUp="validatePassword(this.value);this.form.cmdUserEdit.disabled=(this.form.userPasswordGUI.value != this.form.userPasswordConfGUI.value);">
<i id="showPass" class="fa fa-eye" style="cursor:pointer" title="_(Show / Hide password)_" onclick="showPassword()"></i>
<span>
<span class="usage-disk sys none">
<span id="strength-bar" style="width:0"></span>
<span></span>
</span>
<span id="strength-text"></span>
</span>
</span>
:user_password_help:
@@ -230,7 +239,7 @@ _(Retype password)_:
<input type="hidden" name="#file" value="<?=$file;?>">
_(SSH authorized keys)_:
: <textarea spellcheck="false" cols="80" rows="<?=max(substr_count($text,"\n")+1,10)?>" maxlength="16384" name="text" style="resize:none;white-space:normal;font-family:bitstream;width:65.5%"><?=htmlspecialchars($text)?></textarea>
: <textarea class="font-mono" spellcheck="false" cols="80" rows="<?=max(substr_count($text,"\n")+1,10)?>" maxlength="16384" name="text"><?=htmlspecialchars($text)?></textarea>
&nbsp;
: <span class="inline-block">

View File

@@ -21,31 +21,40 @@ $cfg = '/boot/config/wireless.cfg';
$regions = file("$docroot/webGui/include/regions.key", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (file_exists($cfg)) $wlan0 = parse_ini_file($cfg,true)['wlan0'];
?>
<div class="title nocontrol shift">&nbsp;</div>
<form markdown="1" name="wifi_settings" method="POST" action="/update.php" target="progressFrame" onsubmit="enable_wifi(this.WIFI.value)">
<input type="hidden" name="#file" value="<?=$cfg?>"/>
<input type="hidden" name="#section" value="wlan0"/>
<input type="hidden" name="#command" value="/webGui/scripts/wireless">
<input type="hidden" name="#arg[1]" value=""/>
<div markdown="1">
_(Wi-Fi)_:
: <select name="WIFI" class="wifi">
: <select name="WIFI">
<?=mk_option(_var($wlan0,'WIFI'), "no", _("Disabled"))?>
<?=mk_option(_var($wlan0,'WIFI'), "yes", _("Enabled"))?>
</select>
</div>
<div markdown="1">
_(Regulatory region)_:
: <select name="REGION" class="wifi" onchange="showManual(this.value)"><?
echo mk_option(_var($wlan0,'REGION'), "", _("Automatic"));
echo mk_option(_var($wlan0,'REGION'), "00", _("Manual"));
echo mk_option(_var($wlan0,'REGION'), "--", "--------", 'disabled');
foreach ($regions as $region) {
[$code, $country] = my_explode('|', $region);
echo mk_option(_var($wlan0,'REGION'), $code, _($country));
}
?></select><span id="manual" class="hide">_(Manual input)_ [XX]: <input type="text" name="REGION_XX" class="wifi" value="<?=_var($wlan0,'REGION_XX')?>" minlength="2" maxlength="2" title="_(Two letter country code)_ (ISO 3166)"></span>
: <select name="REGION" onchange="showManual(this.value)">
<?=mk_option(_var($wlan0,'REGION'), "", _("Automatic"))?>
<?=mk_option(_var($wlan0,'REGION'), "00", _("Manual"))?>
<?=mk_option(_var($wlan0,'REGION'), "--", "--------", 'disabled')?>
<?foreach ($regions as $region):?>
<?[$code, $country] = my_explode('|', $region);?>
<?=mk_option(_var($wlan0,'REGION'), $code, _($country))?>
<?endforeach;?>
</select>
</div>
<div markdown="1" id="manual" class="hide">
_(Manual input)_ [XX]:
: <input type="text" name="REGION_XX" value="<?=_var($wlan0,'REGION_XX')?>" minlength="2" maxlength="2" title="_(Two letter country code)_ (ISO 3166)">
</div>
&nbsp;
: <span class="inline-block">
: <span class="flex flex-row flex-wrap items-center gap-2">
<input type="submit" value="_(Apply)_" disabled>
<input type="button" value="_(Done)_" onclick="done()">
</span>
@@ -54,23 +63,32 @@ _(Regulatory region)_:
<div id="wifi" class="hide">
<div markdown="1" id="connected" class="shade">
_(Connected)_:
: <i class="fa fa-spin fa-circle-o-notch"></i>
: <span class="inline-block">
<i class="fa fa-spin fa-circle-o-notch"></i>
</span>
</div>
<div markdown="1" id="my_networks" class="shade">
_(My networks)_:
: <i class="fa fa-spin fa-circle-o-notch"></i>
: <span class="inline-block">
<i class="fa fa-spin fa-circle-o-notch"></i>
</span>
</div>
<div markdown="1" id="other_networks" class="shade">
_(Other networks)_:
: <i class="fa fa-spin fa-circle-o-notch"></i>
: <span class="inline-block">
<i class="fa fa-spin fa-circle-o-notch"></i>
</span>
</div>
<div markdown="1" class="shade">
_(Add network)_:
: <span class="wifi"><input name="CUSTOM" type="text" class="narrow" maxlength="32" autocomplete="off" spellcheck="false" value=""></span><i class="fa fa-wifi hand grey-text" onclick="manage_wifi(encodeURIComponent($('input[name=CUSTOM]').val()),3)" title="<?=$title?>"></i>
: <span>
<input name="CUSTOM" type="text" class="narrow" maxlength="32" autocomplete="off" spellcheck="false" value="">
<i class="fa fa-wifi hand grey-text" onclick="manage_wifi(encodeURIComponent($('input[name=CUSTOM]').val()),3)" title="<?=$title?>"></i>
</span>
</div>
</div>

View File

@@ -342,8 +342,17 @@ function openError(data) {
return false;
}
function showStatus(name,plugin,job) {
$.post('/webGui/include/ProcessStatus.php',{name:name,plugin:plugin,job:job},function(status){$(".tabs").append(status);});
function showStatus(name, plugin, job) {
$.post('/webGui/include/ProcessStatus.php',
{
name,
plugin,
job,
},
function(status) {
$('.title .right').eq(0).append(status);
}
);
}
function showFooter(data, id) {

View File

@@ -116,14 +116,14 @@ case 'list':
if (isset($wifi[$network]['GROUP'])) {
if ($network == $alive || $wifi[$network]['GROUP'] == 'active') {
$echo['active'][] = "<dl><dt>$state:</dt>";
$echo['active'][] = "<dd><span class=\"wifi\">$network</span><i class=\"fa fa-fw fa-wifi hand $color-text\" onclick=\"manage_wifi(encodeURIComponent('$network'),1)\" title=\"$title\"></i><input type=\"button\" class=\"form\" value=\""._('Info')."\" onclick=\"networkInfo('$port')\"></dd>";
$echo['active'][] = "<dd><span class=\"inline-flex flex-row items-center gap-2\"><span>$network</span><i class=\"fa fa-fw fa-wifi hand $color-text\" onclick=\"manage_wifi(encodeURIComponent('$network'),1)\" title=\"$title\"></i><input type=\"button\" class=\"form\" value=\""._('Info')."\" onclick=\"networkInfo('$port')\"></span></dd>";
} else {
$echo['saved'][] = empty($echo['saved']) ? "<dl><dt>"._('My networks').":</dt>" : "<dt>&nbsp;</dt>";
$echo['saved'][] = "<dd><span class=\"wifi\">$network</span><i class=\"fa fa-wifi hand blue-text\" onclick=\"manage_wifi(encodeURIComponent('$network'),1)\" title=\"$title\"></i></dd>";
$echo['saved'][] = "<dd><span class=\"inline-flex flex-row items-center gap-2\"><span>$network</span><i class=\"fa fa-wifi hand blue-text\" onclick=\"manage_wifi(encodeURIComponent('$network'),1)\" title=\"$title\"></i></span></dd>";
}
} else {
$echo['other'][] = empty($echo['other']) ? "<dl><dt>"._('Other networks').":</dt>" : "<dt>&nbsp;</dt>";
$echo['other'][] = "<dd><span class=\"wifi\">$network</span><i class=\"fa fa-wifi hand grey-text\" onclick=\"manage_wifi(encodeURIComponent('$network'),0)\" title=\"$title\"></i></dd>";
$echo['other'][] = "<dd><span class=\"inline-flex flex-row items-center gap-2\"><span>$network</span><i class=\"fa fa-wifi hand grey-text\" onclick=\"manage_wifi(encodeURIComponent('$network'),0)\" title=\"$title\"></i></span></dd>";
}
}
if (empty($echo['active'])) $echo['active'][] = "<dl><dt>"._('Connected').":</dt><dd>"._('None')."</dd>";

View File

@@ -1,22 +1,3 @@
:root {
/* Input styles - default values (for azure/gray themes) */
--eth0-narrow-input-width: 188px;
--eth0-narrow-input-padding: 5px 6px;
--eth0-narrow-input-border-color: var(--border-color);
--eth0-narrow-input-text-color: var(--text-color);
--eth0-narrow-input-border-style: 1px solid;
}
.Theme--black {
--eth0-narrow-input-border-color: var(--gray-100);
--eth0-narrow-input-text-color: var(--gray-100);
}
.Theme--white {
--eth0-narrow-input-border-color: var(--gray-800);
--eth0-narrow-input-text-color: var(--gray-800);
}
/* Status colors */
span.red {
color: var(--orange-300);
@@ -56,35 +37,3 @@ input.slim {
select.ctrl {
margin-right: 20px;
}
/* Base narrow input styles */
input[type="text"].narrow {
display: inline;
width: var(--eth0-narrow-input-width);
padding: var(--eth0-narrow-input-padding);
border: var(--eth0-narrow-input-border-style) var(--eth0-narrow-input-border-color);
color: var(--eth0-narrow-input-text-color);
font-size: 1.3rem;
background-color: transparent;
text-indent: 0;
height: auto;
min-height: 2rem;
line-height: 2rem;
outline: none;
margin: 0 20px 0 0;
box-shadow: none;
border-radius: 0;
transition: none;
}
/* Theme-specific styles - consolidated black/white theme styles */
.Theme--black,
.Theme--white {
--eth0-narrow-input-width: 166px;
--eth0-narrow-input-padding: 4px 0;
--eth0-narrow-input-border-style: none;
input[type="text"].narrow {
border-bottom: 1px solid var(--eth0-narrow-input-border-color);
}
}

View File

@@ -1,3 +0,0 @@
span[id^="info-"] {
margin-left: 20px;
}

View File

@@ -1,10 +0,0 @@
span[id^="info-"] {
margin-left: 20px;
}
.Theme--black,
.Theme--white {
span.status.vhshift {
margin-right: -10px !important;
}
}

View File

@@ -1,6 +1,29 @@
input#max {
border: none;
width: 60px;
margin: 0;
padding: 0;
}
.syslog-controls {
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
margin-bottom: 10px;
box-sizing: border-box;
* {
box-sizing: border-box;
}
.label {
display: flex;
flex-direction: row;
align-items: center;
gap: 10px;
margin: 0;
padding: .2rem .6rem;
}
input[type="checkbox"] {
margin: 0;
}
}

View File

@@ -17,11 +17,6 @@
}
/* Base styles */
.wifi {
display: inline-block;
width: 300px;
}
.hide {
display: none;
}
@@ -31,16 +26,6 @@ i.hand {
text-decoration: none;
}
input.form {
font-size: 1rem;
padding: 5px 10px;
margin: 0;
}
input[type=button].form {
margin-left: 20px;
}
table.swal {
text-align: left;
font-size: 1.2rem;
@@ -57,16 +42,6 @@ table.swal td:nth-child(1) {
margin-left: 10px;
}
select.wifi {
max-width: 100px;
}
input.wifi {
margin-left: 10px;
width: 2.4rem;
text-transform: uppercase;
}
/* Theme-specific input focus styles */
input.narrow:focus,
input.slim:focus {

View File

@@ -149,7 +149,6 @@ textarea,
min-height: 2rem;
line-height: 2rem;
outline: none;
/* width: 300px; */
width: 100%;
margin: 0;
box-shadow: none;
@@ -196,6 +195,24 @@ a.button,
background: var(--button-background);
background-size: var(--button-background-size);
}
/* necessary evil until we re-write button styles */
.buttons-no-margin {
display: flex;
flex-wrap: wrap;
gap: 1rem;
input[type="button"],
input[type="reset"],
input[type="submit"],
button,
button[type="button"],
a.button,
.sweet-alert button {
margin: 0;
}
}
input[type="checkbox"] {
vertical-align: middle;
margin-right: 6px;
@@ -474,8 +491,7 @@ div.title {
letter-spacing: 1.8px;
font-size: 1.4rem;
/* target first title */
&:first-child {
&:first-of-type {
margin-top: 0;
}
}
@@ -866,6 +882,11 @@ div.title.shift {
}
}
.TableContainer--no-min-width {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
table {
border-collapse: collapse;
border-spacing: 0;
@@ -1269,7 +1290,7 @@ a.list {
* Force remove any small empty space elements.
* Necessary evil to prevent needing to rewrite .page file parsing and allow for a more responsive page.
*/
dt, dd, p, div, span {
dt, dd, p {
&:empty {
display: none !important;
margin: 0 !important;
@@ -1342,31 +1363,29 @@ a.list {
.tab-content {
display: none;
form {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
width: 100%;
max-width: 80rem;
margin: 0 auto;
form:first-of-type {
padding-top: 1rem;
}
.shade form {
padding-top: 0;
}
}
.Panels {
display: flex;
flex-direction: row;
flex-wrap: wrap;
column-gap: 3rem;
row-gap: 2rem;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 120px));
gap: 1rem;
margin-top: 2rem;
box-sizing: border-box;
justify-content: start;
}
.Panel {
position: relative;
text-align: center;
box-sizing: border-box;
background-color: transparent;
max-width: 120px;
a {
position: relative;
@@ -1477,6 +1496,8 @@ pre {
line-height: 1.8rem;
padding: 4px 6px;
overflow: auto;
width: 100%;
box-sizing: border-box;
}
iframe#progressFrame {
position: fixed;
@@ -1514,6 +1535,7 @@ dt {
dd {
margin: 0;
white-space: normal;
box-sizing: border-box;
p {
margin: 0 0 4px 0;
@@ -1730,6 +1752,12 @@ span#wlan0 {
background-color: var(--shade-bg-color);
}
/* TailwindCSS inspired utility classes */
.font-mono {
font-family: bitstream, monospace;
}
.hidden {
display: none;
}
@@ -1746,6 +1774,18 @@ span#wlan0 {
display: inline-flex;
}
.flex-wrap {
flex-wrap: wrap;
}
.flex-wrap-reverse {
flex-wrap: wrap-reverse;
}
.flex-nowrap {
flex-wrap: nowrap;
}
.flex-col {
flex-direction: column;
}
@@ -1762,6 +1802,10 @@ span#wlan0 {
flex-direction: row-reverse;
}
.flex-shrink-0 {
flex-shrink: 0;
}
.justify-start {
justify-content: flex-start;
}
@@ -2304,7 +2348,7 @@ span#wlan0 {
.title p {
display: none;
}
div.title:first-child {
div.title:first-of-type {
margin-top: 0;
}
div.title.shift {
@@ -2469,10 +2513,6 @@ span#wlan0 {
border: 1px solid var(--table-alt-border-color);
}
pre.up {
margin-top: 0;
}
pre {
border: 1px solid var(--table-alt-border-color);
margin-bottom: 10px;

View File

@@ -358,7 +358,7 @@ table.t1.tablesorter tbody tr.normal-row {
background-color: var(--dynamix-tablesorter-tbody-row-bg-color);
}
input.t1.search {
color: var(--gray-100);
color: var(--text-color);
background-color: var(--dynamix-tablesorter-tbody-row-bg-color);
}
span.select ul {