This commit is contained in:
itimpi
2019-11-15 09:19:57 +00:00
28 changed files with 289 additions and 183 deletions
@@ -1,11 +1,11 @@
Menu="Docker:2"
Title="Docker Repositories"
Title="Template Repositories"
Tag="clone"
Cond="(pgrep('dockerd')!==false)"
---
<?PHP
/* Copyright 2005-2018, Lime Technology
* Copyright 2014-2018, Guilherme Jardim, Eric Schultz, Jon Panozzo.
/* Copyright 2005-2019, Lime Technology
* Copyright 2014-2019, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -380,11 +380,9 @@ function pullImage($name, $image, $echo=true) {
$strError = '';
$DockerClient->pullImage($image, function ($line) use (&$alltotals, &$laststatus, &$waitID, &$strError, $image, $DockerClient, $DockerUpdate, $echo) {
$cnt = json_decode($line, true);
$id = (isset($cnt['id'])) ? trim($cnt['id']) : '';
$status = (isset($cnt['status'])) ? trim($cnt['status']) : '';
if (isset($cnt['error'])) {
$strError = $cnt['error'];
}
$id = $cnt['id'] ?? '';
$status = $cnt['status'] ?? '';
if ($cnt['error']) $strError = $cnt['error'];
if ($waitID !== false) {
if ($echo) {
echo "<script>stop_Wait($waitID);</script>\n";
@@ -406,26 +404,26 @@ function pullImage($name, $image, $echo=true) {
break;
case 'Downloading':
if ($laststatus[$id] != $status) {
if ($echo) echo "<script>addToID('${id}','".addslashes(htmlspecialchars($status))."');</script>\n";
if ($echo) echo "<script>addToID('$id','".addslashes(htmlspecialchars($status))."');</script>\n";
}
$total = $cnt['progressDetail']['total'];
$current = $cnt['progressDetail']['current'];
if ($total > 0) {
$percentage = round(($current / $total) * 100);
if ($echo) echo "<script>progress('${id}',' ".$percentage."% of ".$DockerClient->formatBytes($total)."');</script>\n";
if ($echo) echo "<script>progress('$id',' ".$percentage."% of ".$DockerClient->formatBytes($total)."');</script>\n";
} else {
// Docker must not know the total download size (http-chunked or something?)
// just show the current download progress without the percentage
$alltotals[$id] = $current;
if ($echo) echo "<script>progress('${id}',' ".$DockerClient->formatBytes($current)."');</script>\n";
if ($echo) echo "<script>progress('$id',' ".$DockerClient->formatBytes($current)."');</script>\n";
}
break;
default:
if ($laststatus[$id] == "Downloading") {
if ($echo) echo "<script>progress('${id}',' 100% of ".$DockerClient->formatBytes($alltotals[$id])."');</script>\n";
if ($echo) echo "<script>progress('$id',' 100% of ".$DockerClient->formatBytes($alltotals[$id])."');</script>\n";
}
if ($laststatus[$id] != $status) {
if ($echo) echo "<script>addToID('${id}','".addslashes(htmlspecialchars($status))."');</script>\n";
if ($echo) echo "<script>addToID('".($id=='latest'?rand():$id)."','".addslashes(htmlspecialchars($status))."');</script>\n";
}
break;
}
+3 -36
View File
@@ -75,6 +75,7 @@ tr#copy,tr#file{display:none}
td.gap{padding-left:26px!important}
span#pass{display:none;margin-left:20px}
</style>
<script src="<?autov('/webGui/javascript/jquery.base64.js')?>"></script>
<script>
var ctrl = "<span class='status <?=$tabbed?'':'vhshift'?>'><a style='cursor:pointer' class='tooltip_diskio' title='Toggle reads/writes display' onclick='toggle_diskio();return false'><i class='toggle fa'></i></a></span>";
@@ -118,39 +119,6 @@ function getFileContent(event,form) {
reader.onload = function(){form.file.value=reader.result;selectInput(form);};
reader.readAsDataURL(input.files[0]);
}
function base64(text) {
var xlat = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var size = text.length;
var tail = size % 3;
var code = '';
var l, t, x;
function encode(i) {
return xlat.charAt(i & 0x3F);
}
function shift(n) {
return encode(n >> 18) + encode(n >> 12) + encode(n >> 6) + encode(n);
}
for (x=0, l=size-tail; x<l; x+=3) {
code += shift((text.charCodeAt(x) << 16) + (text.charCodeAt(x+1) << 8) + text.charCodeAt(x+2));
}
switch (tail) {
case 1:
t = text.charCodeAt(size-1);
code += encode(t >> 2);
code += encode(t << 4);
code += '==';
break;
case 2:
t = (text.charCodeAt(size-2) << 8) + text.charCodeAt(size-1);
code += encode(t >> 10);
code += encode(t >> 4);
code += encode(t << 2);
code += '=';
break;
}
return code;
}
function prepareInput(form) {
$(form).append('<input type="hidden" name="cmdStart" value="Start">');
if (form.input === undefined) {
@@ -162,9 +130,8 @@ function prepareInput(form) {
form.file.disabled = true;
form.text.disabled = true;
form.copy.disabled = true;
var text = base64(form.text.value);
if (text) {
$(form).append('<input type="hidden" name="luksKey" value="'+text+'">');
if (form.text.value) {
$(form).append('<input type="hidden" name="luksKey" value="'+base64(form.text.value)+'">');
form.submit();
return;
}
+42 -14
View File
@@ -172,7 +172,7 @@ div.left{float:left;width:66%;margin-top:-12px}
div.right{float:right;margin:-12px 20px 0 0;text-align:center}
span.ctrl{float:right;margin-right:10px}
span.outer{float:left}
span.inner{width:155px}
span.inner{width:<?=$theme1?153:140?>px}
span.ups{width:124px;display:inline-block}
span.busy,i.inactive{opacity:0.5}
span#inbound{width:75px;display:inline-block}
@@ -237,7 +237,7 @@ form[name=boot]{display:none}
<i id='mycase' class='fa fa-hdd-o'></i><br>
<?endif;?>
</span>
<input type='button' value='Edit' onclick='openBox("/webGui/include/SelectCase.php?file=<?=$myfile?>&csrf=<?=$var['csrf_token']?>","Select Case Model",600,980,true,"setCase");return false'>
<input type='button' value='Edit' onclick='openBox("/webGui/include/SelectCase.php?file=<?=$myfile?>&csrf=<?=$var['csrf_token']?>","Select Case Model",700,980,true,"setCase");return false'>
</div>
</td><td></td></tr>
</tbody>
@@ -245,7 +245,7 @@ form[name=boot]{display:none}
<tbody sort='<?=$N?>' class='sortable'>
<tr><td></td><td colspan='3' class='next'><i class='icon-motherboard'></i><div class='section'>Motherboard<br><span id='mb-temp'></span><br><br></div>
<i class='fa fa-fw chevron' id='mb_view' onclick='toggleChevron("mb_view",0)'></i>
<a href='/Dashboard/ManagementAccess' title='Go to access settings'><i class='fa fa-fw fa-cog chevron'></i></a>
<a href='#' onclick='InfoButton();' title='Show Information'><i class='fa fa-fw fa-cog chevron'></i></a>
</td><td></td></tr>
<tr class='mb_view'><td></td><td colspan='3'><?=$board?><br><?=$bios?><br><?=$biosdate?></td><td></td></tr>
</tbody>
@@ -276,7 +276,7 @@ foreach ($cpus as $pair) {
<tbody sort='<?=$N?>' class='sortable'>
<tr><td></td><td colspan='3' class='next'><i class='icon-ram'></i><div class='section'>Memory<br><span><?="$memory_installed $unit $memory_type $ecc"?><span id='util'>Utilization: <span class='sys0'>0%</span></span><br><br></div>
<i class='fa fa-fw chevron' id='mem_view' onclick='toggleChevron("mem_view",0)'></i>
<a href='/Dashboard/DiskSettings' title='Go to disk settings'><i class='fa fa-fw fa-cog chevron'></i></a>
<a href='/Dashboard/Processes' title='View Running Processes'><i class='fa fa-fw fa-cog chevron'></i></a>
</td><td></td></tr>
<tr class='mem_view'><td></td><td>Maximum size: <?="$memory_maximum $unit"?><?=$low?'*':''?></td><td><i class='mm'>RAM</i><span class='sys0 load'>0%</span><div class='usage-disk sys'><span id='sys0'></span><span></span></div></td>
<td><i class='mm'>Flash</i><span class='sys1 load'>0%</span><div class='usage-disk sys'><span id='sys1'></span><span></span></div></td><td></td></tr>
@@ -472,8 +472,20 @@ foreach ($users as $user) {
} else {
$write = 0; $read = 0;
foreach ($shares as $share) {
if (strpos($sec[$share['name']]['writeList'],$name)!==false) $write++;
if (strpos($sec[$share['name']]['readList'],$name)!==false) $read++;
$access = $sec[$share['name']];
if ($access['export']=='-') continue;
switch ($access['security']) {
case 'public':
$write++;
break;
case 'secure':
if (in_array($name,explode(',',$access['writeList']))) $write++; else $read++;
break;
case 'private':
if (in_array($name,explode(',',$access['writeList']))) $write++;
if (in_array($name,explode(',',$access['readList']))) $read++;
break;
}
}
}
if ($user['passwd']!='yes') $list = str_replace('blue-text','orange-text',$list);
@@ -492,8 +504,20 @@ foreach ($users as $user) {
} else {
$write = 0; $read = 0;
foreach ($shares as $share) {
if (strpos($sec_afp[$share['name']]['writeList'],$name)!==false) $write++;
if (strpos($sec_afp[$share['name']]['readList'],$name)!==false) $read++;
$access = $sec_afp[$share['name']];
if ($access['export']=='-') continue;
switch ($access['security']) {
case 'public':
$write++;
break;
case 'secure':
if (in_array($name,explode(',',$access['writeList']))) $write++; else $read++;
break;
case 'private':
if (in_array($name,explode(',',$access['writeList']))) $write++;
if (in_array($name,explode(',',$access['readList']))) $read++;
break;
}
}
}
if ($user['passwd']!='yes') $list = str_replace('blue-text','orange-text',$list);
@@ -715,13 +739,17 @@ function update1() {
var info = row[i].split(';');
vtun = info[0];
if (typeof n[vtun]=='undefined') n[vtun] = 0; else n[vtun]++;
if (info[1] > 0) {
var hr = parseInt(info[1]/3600).pad();
var mn = parseInt(info[1]/60%60).pad();
var sc = parseInt(info[1]%60).pad();
$('td#'+vtun+'-hs-'+n[vtun]).text(hr+':'+mn+':'+sc+' ago');
} else {
if (info[1] == 0) {
$('td#'+vtun+'-hs-'+n[vtun]).text('not received');
} else if (info[1] > 86400) {
var d = parseInt(info[1]/86400);
var s = d==1 ? '' : 's';
$('td#'+vtun+'-hs-'+n[vtun]).text(d+' day'+s+' ago');
} else {
var h = parseInt(info[1]/3600).pad();
var m = parseInt(info[1]/60%60).pad();
var s = parseInt(info[1]%60).pad();
$('td#'+vtun+'-hs-'+n[vtun]).text(h+':'+m+':'+s+' ago');
}
$('td#'+vtun+'-rx-'+n[vtun]).html(info[2]+'&nbsp;<i class="fa fa-fw fa-arrow-up"></i>&nbsp;&nbsp;&nbsp;'+info[3]+'&nbsp;<i class="fa fa-fw fa-arrow-down"></i>');
}
+19 -2
View File
@@ -151,6 +151,8 @@ Tunable (enable NCQ):
> If set to **No** then *Native Command Queuing* is disabled for all array devices that support NCQ.
>
> **Auto** leaves the setting for each device as-is.
>
> Note: You must reboot after selecting Auto for setting to take effect.
Tunable (nr_requests):
: <input type="text" name="nr_requests" maxlength="10" value="<?=$var['nr_requests']?>" class="narrow"><?=$var['nr_requests_status']?>
@@ -159,7 +161,22 @@ Tunable (nr_requests):
>
> **Auto** leaves the setting for each device as-is.
>
> Note: if you set to blank and click Apply, the setting is restored to its default.
> Note: if you set to blank and click Apply, the setting is restored to its default, and you must reboot for setting to take effect.
Tunable (scheduler):
: <select name="md_scheduler" size="1">
<?=mk_option($var['md_scheduler'], "auto", "Auto")?>
<?=mk_option($var['md_scheduler'], "mq-deadline", "mq-deadline")?>
<?=mk_option($var['md_scheduler'], "kyber", "kyber")?>
<?=mk_option($var['md_scheduler'], "bfq", "bfq")?>
<?=mk_option($var['md_scheduler'], "none", "none")?>
</select>
> Selects which kernel I/O scheduler to use for all array devices.
>
> **Auto** leaves the setting for each device as-is (mq-deadline).
>
> Note: You must reboot after selecting Auto for setting to take effect.
Tunable (md_num_stripes):
: <input type="text" name="md_num_stripes" maxlength="10" value="<?=$var['md_num_stripes']?>" class="narrow"><?=$var['md_num_stripes_status']?>
@@ -167,7 +184,7 @@ Tunable (md_num_stripes):
> This is the size of the *stripe pool* in number of *stripes*. A *stripe* refers to a data structure that faclitiates parallel 4K read/write
> operations necessary for a parity-protected array.
>
> Note: if you set to blank and click Apply, the setting is restored to its default.
> Note: if you set to blank and click Apply, the setting is restored to its default, and will take effect after reboot.
Tunable (md_queue_limit):
: <input type="text" name="md_queue_limit" maxlength="10" value="<?=$var['md_queue_limit']?>" class="narrow"><?=$var['md_queue_limit_status']?>
+1 -1
View File
@@ -27,6 +27,6 @@ $(function() {
</script>
<?endif;?>
<?
echo ($display['resize'] ? "<pre class='up' style='display:none'>" : "<pre class='up'>").shell_exec('ps -ef')."</pre>";
echo ($display['resize'] ? "<pre class='up' style='display:none'>" : "<pre class='up'>").shell_exec('ps -aux')."</pre>";
?>
<input type="button" value="Done" onclick="done()">
+4 -4
View File
@@ -3,8 +3,8 @@ Title="Share Settings"
Tag="share-alt-square"
---
<?PHP
/* Copyright 2005-2018, Lime Technology
* Copyright 2012-2018, Bergware International.
/* Copyright 2005-2019, Lime Technology
* Copyright 2012-2019, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -223,8 +223,8 @@ Use cache (for new files/directories):
> When the *mover* is invoked, files and subdirectories are transferred off the array and onto the Cache disk/pool.
>
> **NOTE:** Mover will never move any files that are currently in use.
> Tnis means if you want to move files associated with system services such as Docker or VMs then you need to
> disable these services while nover is running.
> This means if you want to move files associated with system services such as Docker or VMs then you need to
> disable these services while mover is running.
Enable Copy-on-write:
: <select name="shareCOW" size="1"<?if ($name):?> disabled<?endif;?>>
+1 -1
View File
@@ -49,7 +49,7 @@ Local syslog server:
<?=mk_option($syslog['server_protocol'], "tcp", "TCP")?>
<?=mk_option($syslog['server_protocol'], "both", "Both")?>
</select>
<input type="text" name="server_port" class="trim" value="<?=$syslog['server_port']?>" maxlength="4" placeholder="514">
<input type="text" name="server_port" class="trim" value="<?=$syslog['server_port']?>" maxlength="5" placeholder="514">
> Let the server act as a central syslog server and collect syslog messages from other systems.
> The server can listen on UDP, TCP or both with a selectable port number.
+3
View File
@@ -34,6 +34,7 @@ i.top{position:absolute;padding-top:4px;cursor:pointer;}
</style>
<script src="<?autov('/webGui/javascript/jquery.filedrop.js')?>"></script>
<script src="<?autov('/webGui/javascript/jquery.base64.js')?>"></script>
<script>
var path = '/boot/config/plugins/dynamix/users';
var filename = '';
@@ -61,6 +62,8 @@ function checkUsername(form) {
if (filename) {
$.post("/webGui/include/FileUpload.php",{cmd:'save',path:path,filename:filename,output:username+'.png'});
}
form.userPassword.value = base64(form.userPassword.value);
form.userPasswordConf.value = base64(form.userPasswordConf.value);
return true;
}
+3
View File
@@ -41,6 +41,7 @@ i.top{position:absolute;padding-top:4px;cursor:pointer;}
</style>
<script src="<?autov('/webGui/javascript/jquery.filedrop.js')?>"></script>
<script src="<?autov('/webGui/javascript/jquery.base64.js')?>"></script>
<script>
var path = '/boot/config/plugins/dynamix/users';
var filename = '';
@@ -50,6 +51,8 @@ function checkPassword(form) {
swal({title:"Password too long",text:"Use a password up to 128 characters",type:"error"});
return false;
}
form.userPassword.value = base64(form.userPassword.value);
form.userPasswordConf.value = base64(form.userPasswordConf.value);
return true;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

+1 -1
View File
@@ -83,7 +83,7 @@ foreach ($cases as $case) if (substr($case,0,6)=='.case-') $models[] = substr($c
sort($models);
foreach ($models as $model) {
$name = substr($model,5);
$title = str_replace('3u-md1510','avs-10/4',$name);
$title = str_replace('3u-avs-10-4','3u-avs-10/4',$name);
$select = $name==$casemodel ? 'color:#e68a00' : '';
echo "<a style='text-decoration:none;cursor:pointer;$select' onclick='setCase(\"$name\")'><div class='case-list' id='$name'><i class='$model'></i><div class='case-name'>$title</div></div></a>";
}
@@ -0,0 +1 @@
function base64(r){var e,t,a,c,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=r.length,n=o%3,A="";function d(r){return h.charAt(63&r)}for(a=0,e=o-n;a<e;a+=3)A+=d((c=(r.charCodeAt(a)<<16)+(r.charCodeAt(a+1)<<8)+r.charCodeAt(a+2))>>18)+d(c>>12)+d(c>>6)+d(c);switch(n){case 1:A+=d((t=r.charCodeAt(o-1))>>2),A+=d(t<<4),A+="==";break;case 2:A+=d((t=(r.charCodeAt(o-2)<<8)+r.charCodeAt(o-1))>>10),A+=d(t>>4),A+=d(t<<2),A+="="}return A}
+19 -12
View File
@@ -17,7 +17,7 @@ $all = isset($opt['a']) || isset($opt['all']);
$zip = $all ? $argv[2] : $argv[1];
$cli = empty($zip);
$get = "/var/local/emhttp";
$var = file_exists("$get/var.ini") ? parse_ini_file("$get/var.ini") : [];
$var = (array)@parse_ini_file("$get/var.ini");
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$folders = ['/boot','/boot/config','/boot/config/plugins','/boot/extra','/boot/syslinux','/var/log','/var/log/plugins','/var/log/packages','/tmp'];
@@ -85,13 +85,14 @@ foreach (glob("$get/*.ini") as $file) {
if ($all || $ini != "users") file_put_contents("/$diag/system/vars.txt",preg_replace(["/\n/","/^Array/"],["\r\n",$ini],anonymize(print_r(parse_ini_file($file,true),true),1)),FILE_APPEND);
}
// Create loads.txt
$cpuload = exert("uptime")." Cores: ".exert("nproc")."\r\n".file_get_contents("/var/local/emhttp/cpuload.ini")."\r\n";
$diskload = file("/var/local/emhttp/diskload.ini");
$disks = parse_ini_file("/var/local/emhttp/disks.ini",true);
foreach ( $diskload as $loadLine ) {
$load = explode("=",$loadLine);
foreach ( $disks as $disk ) {
if ( $load[0] == $disk['device'] ) {
$cpuload = exert("uptime")." Cores: ".exert("nproc")."\r\n".(string)@file_get_contents("$get/cpuload.ini")."\r\n";
$diskload = (array)@file("$get/diskload.ini");
$disks = (array)@parse_ini_file("$get/disks.ini",true);
$loadTxt = [];
foreach ($diskload as $loadLine) {
$load = explode('=',$loadLine);
foreach ($disks as $disk) {
if ($load[0]==$disk['device']) {
$loadTxt[] = "{$disk['device']} ({$disk['name']})=".trim($load[1]);
break;
}
@@ -135,8 +136,8 @@ exert("cp /boot/config/*.{cfg,conf,dat} /boot/config/go ".escapeshellarg("/$diag
if (!$all) exert("sed -ri 's/^((disk|flash)(Read|Write)List.*=\")[^\"]+/\\1.../' ".escapeshellarg("/$diag/config/*.cfg")." 2>/dev/null");
// don't anonymize system share names
$vardomain = file_exists('/boot/config/domain.cfg') ? parse_ini_file('/boot/config/domain.cfg') : [];
$vardocker = file_exists('/boot/config/docker.cfg') ? parse_ini_file('/boot/config/docker.cfg') : [];
$vardomain = (array)@parse_ini_file('/boot/config/domain.cfg');
$vardocker = (array)@parse_ini_file('/boot/config/docker.cfg');
$showshares = [];
$showshares[] = current(array_slice(explode('/',$vardomain['IMAGE_FILE']), 3, 1)).'.cfg';
$showshares[] = current(array_slice(explode('/',$vardomain['DOMAINDIR']), 3, 1)).'.cfg';
@@ -159,7 +160,7 @@ foreach ($files as $file) {
file_put_contents($dest,"# Share exists on ".shareDisks($share)."\r\n",FILE_APPEND);
}
// create default user shares information
$shares = file_exists("$get/shares.ini") ? parse_ini_file("$get/shares.ini", true) : [];
$shares = (array)@parse_ini_file("$get/shares.ini", true);
foreach ($shares as $share) {
$name = $share['name'];
if (!in_array("/boot/config/shares/$name.cfg",$files)) file_put_contents(anonymize("/$diag/shares/$name.cfg",2),"# This share has default settings.\r\n# Share exists on ".shareDisks($name)."\r\n");
@@ -176,7 +177,7 @@ if (file_exists($docker)) {
}
}
// create SMART reports (suppress errors)
$disks = file_exists("$get/disks.ini") ? parse_ini_file("$get/disks.ini", true) : [];
$disks = (array)@parse_ini_file("$get/disks.ini", true);
include_once "$docroot/webGui/include/CustomMerge.php";
include_once "$docroot/webGui/include/Wrappers.php";
exert("ls -l /dev/disk/by-id/[asun]* 2>/dev/null|sed '/-part/d;s|^.*/by-id/[^-]*-||;s|-> ../../||;s|:|-|'", $devices);
@@ -259,6 +260,12 @@ foreach (glob("/var/log/syslog*") as $file) {
if (basename($file)=='syslog' && filesize($file)>=$max) exert("tail -n 200 ".escapeshellarg("$log.txt")." >".escapeshellarg("$log.last200.txt"));
exert("truncate -s '<$max' ".escapeshellarg("$log.txt"));
}
// copy graphql-api.log
$graphql = "/var/log/graphql-api.log";
if (file_exists($graphql)) {
$log = "/$diag/logs/graphql-api.txt";
exert("todos <$graphql >".escapeshellarg($log));
}
// create resulting zip file and remove temp folder
exert("zip -qmr ".escapeshellarg($zip)." ".escapeshellarg("/$diag"));
if ($cli) echo "done.\nZIP file '$zip' created.\n";
+38 -28
View File
@@ -1,36 +1,46 @@
@font-face{font-family:cases;font-weight:normal;font-style:normal;
src:url('font-cases.eot?20190217');src:url('font-cases.eot?20190217#iefix') format('embedded-opentype'),url('font-cases.ttf?20190217') format('truetype'),url('font-cases.woff?20190217') format('woff'),url('font-cases.svg?20190217#cases') format('svg')}
src:url('font-cases.eot?20191026');src:url('font-cases.eot?20191026#iefix') format('embedded-opentype'),url('font-cases.ttf?20191026') format('truetype'),url('font-cases.woff?20191026') format('woff'),url('font-cases.svg?20191026#cases') format('svg')}
[class^='case-'],[class*=' case-']{font-family:cases!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none}
.case-1u-disks:before{content:'\e90d'}
.case-1u-vents:before{content:'\e90e'}
.case-2u-disks:before{content:'\e90b'}
.case-2u-poweredge:before{content:'\e91d'}
.case-2u-vents:before{content:'\e90c'}
.case-3u-disks:before{content:'\e90a'}
.case-3u-fans:before{content:'\e909'}
.case-3u-md1510:before{content:'\e91a'}
.case-4u-disks:before{content:'\e908'}
.case-4u-fans:before{content:'\e907'}
.case-4u-storinator:before{content:'\e91b'}
.case-a79:before{content:'\e902'}
.case-core-wp200:before{content:'\e911'}
.case-css-cs380:before{content:'\e913'}
.case-dark-base-700:before{content:'\e906'}
.case-define-r5:before{content:'\e900'}
.case-elite-110:before{content:'\e905'}
.case-1u-disks:before{content:'\e907'}
.case-1u-vents:before{content:'\e908'}
.case-2u-disks:before{content:'\e909'}
.case-2u-poweredge:before{content:'\e90a'}
.case-2u-vents:before{content:'\e90b'}
.case-3u-avs-10-4:before{content:'\e90c'}
.case-3u-disks:before{content:'\e90d'}
.case-3u-fans:before{content:'\e90e'}
.case-4u-disks:before{content:'\e91a'}
.case-4u-fans:before{content:'\e91b'}
.case-4u-norco-4116:before{content:'\e91d'}
.case-4u-norco-4220:before{content:'\e921'}
.case-4u-rsv-l4411:before{content:'\e924'}
.case-4u-storinator:before{content:'\e926'}
.case-4u-vents:before{content:'\e927'}
.case-the-tower-900:before{content:'\e92b'}
.case-zalman-ms800:before{content:'\e928'}
.case-lancool-k12:before{content:'\e92a'}
.case-node-202:before{content:'\e922'}
.case-obsidian-550d:before{content:'\e923'}
.case-vivopc:before{content:'\e925'}
.case-router:before{content:'\e91f'}
.case-vm:before{content:'\e920'}
.case-stormtrooper:before{content:'\e91e'}
.case-storinator-ws:before{content:'\e91c'}
.case-full-tower:before{content:'\e914'}
.case-h500:before{content:'\e901'}
.case-htpc:before{content:'\e915'}
.case-mercury-s8:before{content:'\e910'}
.case-mid-tower:before{content:'\e916'}
.case-mini-tower:before{content:'\e917'}
.case-nineteen-hundred:before{content:'\e903'}
.case-node-804:before{content:'\e904'}
.case-nova-x2m:before{content:'\e90f'}
.case-poweredge-t630:before{content:'\e912'}
.case-router:before{content:'\e91f'}
.case-sff:before{content:'\e918'}
.case-storinator-ws:before{content:'\e91c'}
.case-stormtrooper:before{content:'\e91e'}
.case-v350:before{content:'\e919'}
.case-vm:before{content:'\e920'}
.case-nova-x2m:before{content:'\e90f'}
.case-mercury-s8:before{content:'\e910'}
.case-core-wp200:before{content:'\e911'}
.case-poweredge-t630:before{content:'\e912'}
.case-css-cs380:before{content:'\e913'}
.case-define-r5:before{content:'\e900'}
.case-h500:before{content:'\e901'}
.case-a79:before{content:'\e902'}
.case-nineteen-hundred:before{content:'\e903'}
.case-dark-base-700:before{content:'\e906'}
.case-node-804:before{content:'\e904'}
.case-elite-110:before{content:'\e905'}
+39 -8
View File
@@ -1,23 +1,24 @@
@font-face{font-family:clear-sans;font-weight:normal;font-style:normal;
src:url('clear-sans.eot?20190313');src:url('clear-sans.eot?20190313#iefix') format('embedded-opentype'),url('clear-sans.woff?20190313') format('woff'),url('clear-sans.ttf?20190313') format('truetype'),url('clear-sans.svg?20190313#clear-sans') format('svg')}
src:url('clear-sans.eot?20191026');src:url('clear-sans.eot?20191026#iefix') format('embedded-opentype'),url('clear-sans.woff?20191026') format('woff'),url('clear-sans.ttf?20191026') format('truetype'),url('clear-sans.svg?20191026#clear-sans') format('svg')}
@font-face{font-family:clear-sans;font-weight:bold;font-style:normal;
src:url('clear-sans-bold.eot?20190313');src:url('clear-sans-bold.eot?20190313?#iefix') format('embedded-opentype'),url('clear-sans-bold.woff?20190313') format('woff'),url('clear-sans-bold.ttf?20190313') format('truetype'),url('clear-sans-bold.svg?20190313#clear-sans-bold') format('svg')}
src:url('clear-sans-bold.eot?20191026');src:url('clear-sans-bold.eot?20191026?#iefix') format('embedded-opentype'),url('clear-sans-bold.woff?20191026') format('woff'),url('clear-sans-bold.ttf?20191026') format('truetype'),url('clear-sans-bold.svg?20191026#clear-sans-bold') format('svg')}
@font-face{font-family:clear-sans;font-weight:normal;font-style:italic;
src:url('clear-sans-italic.eot?20190313');src:url('clear-sans-italic.eot?20190313?#iefix') format('embedded-opentype'),url('clear-sans-italic.woff?20190313') format('woff'),url('clear-sans-italic.ttf?20190313') format('truetype'),url('clear-sans-italic.svg?20190313#clear-sans-italic') format('svg')}
src:url('clear-sans-italic.eot?20191026');src:url('clear-sans-italic.eot?20191026?#iefix') format('embedded-opentype'),url('clear-sans-italic.woff?20191026') format('woff'),url('clear-sans-italic.ttf?20191026') format('truetype'),url('clear-sans-italic.svg?20191026#clear-sans-italic') format('svg')}
@font-face{font-family:clear-sans;font-weight:bold;font-style:italic;
src:url('clear-sans-bold-italic.eot?20190313');src:url('clear-sans-bold-italic.eot?20190313?#iefix') format('embedded-opentype'),url('clear-sans-bold-italic.woff?20190313') format('woff'),url('clear-sans-bold-italic.ttf?20190313') format('truetype'),url('clear-sans-bold-italic.svg?20190313#clear-sans-bold-italic') format('svg')}
src:url('clear-sans-bold-italic.eot?20191026');src:url('clear-sans-bold-italic.eot?20191026?#iefix') format('embedded-opentype'),url('clear-sans-bold-italic.woff?20191026') format('woff'),url('clear-sans-bold-italic.ttf?20191026') format('truetype'),url('clear-sans-bold-italic.svg?20191026#clear-sans-bold-italic') format('svg')}
@font-face{font-family:bitstream;font-weight:normal;font-style:normal;
src:url('bitstream.eot?20190313');src:url('bitstream.eot?20190313?#iefix') format('embedded-opentype'),url('bitstream.woff?20190313') format('woff'),url('bitstream.ttf?20190313') format('truetype'),url('bitstream.svg?20190313#bitstream') format('svg')}
src:url('bitstream.eot?20191026');src:url('bitstream.eot?20191026?#iefix') format('embedded-opentype'),url('bitstream.woff?20191026') format('woff'),url('bitstream.ttf?20191026') format('truetype'),url('bitstream.svg?20191026#bitstream') format('svg')}
@font-face{font-family:docker-icon;font-weight:normal;font-style:normal;
src:url('docker-icon.eot?20190313');src:url('docker-icon.eot?20190313?#iefix') format('embedded-opentype'),url('docker-icon.woff?20190313') format('woff'),url('docker-icon.ttf?20190313') format('truetype'),url('docker-icon.svg?20190313#docker-icon') format('svg')}
src:url('docker-icon.eot?20191026');src:url('docker-icon.eot?20191026?#iefix') format('embedded-opentype'),url('docker-icon.woff?20191026') format('woff'),url('docker-icon.ttf?20191026') format('truetype'),url('docker-icon.svg?20191026#docker-icon') format('svg')}
[data-icon]:before{content:attr(data-icon)}
[data-icon]:before,.fa-docker:before{font-family:docker-icon!important;content:'\f100'}
@font-face{font-family:unraid;font-weight:normal;font-style:normal;
src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') format('embedded-opentype'),url('font-unraid.ttf?20190313') format('truetype'),url('font-unraid.woff?20190313') format('woff'),url('font-unraid.svg?20190313#unraid') format('svg')}
src:url('font-unraid.eot?20191026');src:url('font-unraid.eot?20191026#iefix') format('embedded-opentype'),url('font-unraid.ttf?20191026') format('truetype'),url('font-unraid.woff?20191026') format('woff'),url('font-unraid.svg?20191026#unraid') format('svg')}
[class^='icon-'],[class*=' icon-']{font-family:unraid!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none}
.icon-algorithm:before{content:'\e97b'}
.icon-app:before{content:'\e900'}
.icon-apple:before{content:'\e901'}
.icon-apps:before{content:'\e942'}
@@ -30,13 +31,16 @@ src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') fo
.icon-cpu:before{content:'\e905'}
.icon-cpu-pinning:before{content:'\e904'}
.icon-credits:before{content:'\e91c'}
.icon-custom:before{content:'\e97a'}
.icon-dashboard:before{content:'\e943'}
.icon-diagnostics:before{content:'\e91d'}
.icon-disc:before{content:'\e979'}
.icon-disk:before{content:'\e907'}
.icon-disk-encrypted:before{content:'\e906'}
.icon-disks:before{content:'\e908'}
.icon-display:before{content:'\e90a'}
.icon-docker:before{content:'\e90b'}
.icon-energysaving:before{content:'\e977'}
.icon-ethernet:before{content:'\e90c'}
.icon-eula:before{content:'\e91e'}
.icon-fan:before{content:'\e90d'}
@@ -49,10 +53,13 @@ src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') fo
.icon-linux:before{content:'\e910'}
.icon-log:before{content:'\e921'}
.icon-motherboard:before{content:'\e92c'}
.icon-move:before{content:'\e97c'}
.icon-network:before{content:'\e911'}
.icon-notifications:before{content:'\e912'}
.icon-nvme:before{content:'\e929'}
.icon-packages:before{content:'\e976'}
.icon-pagemap:before{content:'\e922'}
.icon-performance:before{content:'\e978'}
.icon-permissions:before{content:'\e923'}
.icon-picture:before{content:'\e94b'}
.icon-plugins:before{content:'\e944'}
@@ -63,9 +70,21 @@ src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') fo
.icon-recycle:before{content:'\e946'}
.icon-registration:before{content:'\e925'}
.icon-remote-access:before{content:'\e94d'}
.icon-repeatable:before{content:'\e96e'}
.icon-scheduler:before{content:'\e914'}
.icon-security:before{content:'\e975'}
.icon-share:before{content:'\e915'}
.icon-sharing-protocol:before{content:'\e96f'}
.icon-shop:before{content:'\e970'}
.icon-snapshot:before{content:'\e971'}
.icon-temp:before{content:'\e926'}
.icon-template:before{content:'\e972'}
.icon-themes:before{content:'\e973'}
.icon-u-arrow-down:before{content:'\e95e'}
.icon-u-arrow-left:before{content:'\e95f'}
.icon-u-arrow-right:before{content:'\e960'}
.icon-u-arrow-up:before{content:'\e961'}
.icon-u-bell:before{content:'\e962'}
.icon-u-change:before{content:'\e947'}
.icon-u-chat:before{content:'\e93e'}
.icon-u-check:before{content:'\e94f'}
@@ -74,7 +93,9 @@ src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') fo
.icon-u-delete:before{content:'\e92f'}
.icon-u-display:before{content:'\e930'}
.icon-u-download:before{content:'\e950'}
.icon-u-duplicate:before{content:'\e963'}
.icon-u-edit:before{content:'\e931'}
.icon-u-expand:before{content:'\e964'}
.icon-u-full:before{content:'\e932'}
.icon-u-globe:before{content:'\e951'}
.icon-u-half:before{content:'\e933'}
@@ -86,9 +107,13 @@ src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') fo
.icon-u-lock-open:before{content:'\e954'}
.icon-u-log:before{content:'\e936'}
.icon-u-logout:before{content:'\e937'}
.icon-u-minimize:before{content:'\e965'}
.icon-u-minus:before{content:'\e967'}
.icon-u-move:before{content:'\e966'}
.icon-u-pause:before{content:'\e939'}
.icon-update:before{content:'\e927'}
.icon-u-play:before{content:'\e93a'}
.icon-u-plus-Copy-3:before{content:'\e968'}
.icon-u-polygon:before{content:'\e93b'}
.icon-ups:before{content:'\e916'}
.icon-u-restart:before{content:'\e93c'}
@@ -96,19 +121,25 @@ src:url('font-unraid.eot?20190313');src:url('font-unraid.eot?20190313#iefix') fo
.icon-u-search:before{content:'\e956'}
.icon-user:before{content:'\e917'}
.icon-users:before{content:'\e945'}
.icon-u-shutdown:before{content:'\e969'}
.icon-u-sort:before{content:'\e959'}
.icon-u-sort-down:before{content:'\e957'}
.icon-u-sort-up:before{content:'\e958'}
.icon-u-square:before{content:'\e93d'}
.icon-u-star:before{content:'\e95a'}
.icon-u-stop:before{content:'\e96d'}
.icon-u-tab:before{content:'\e938'}
.icon-u-tag:before{content:'\e95b'}
.icon-u-terminal:before{content:'\e93f'}
.icon-u-third:before{content:'\e940'}
.icon-u-thumbs-down:before{content:'\e96a'}
.icon-u-thumbs-up:before{content:'\e96b'}
.icon-u-triangle:before{content:'\e941'}
.icon-u-two-thirds:before{content:'\e96c'}
.icon-vars:before{content:'\e928'}
.icon-video:before{content:'\e94e'}
.icon-virtualization:before{content:'\e918'}
.icon-vpn:before{content:'\e95c'}
.icon-windows:before{content:'\e919'}
.icon-windows:before{content:'\e919'}
.icon-wireguard:before{content:'\e95d'}
.icon-zip:before{content:'\e974'}
+2 -2
View File
@@ -29,7 +29,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:91px}
#sb-info-inner,#sb-loading-inner,div.sb-message{color:#1c1b1b;background-color:#f2f2f2}
#sb-title,#sb-title-inner{border-top-left-radius:10px;border-top-right-radius:10px;width:100%;height:5rem;line-height:5rem;font-family:clear-sans;font-size:1.8rem;font-weight:bold;letter-spacing:1.8px;background:#c0c0c0;color:#606060;text-indent:10px;text-align:center}
#sb-title,#sb-info{position:relative;margin:0;padding:0;overflow:hidden}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:999;text-align:left;visibility:hidden;display:none}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:10000;text-align:left;visibility:hidden;display:none}
#sb-overlay{position:relative;height:100%;width:100%}
#sb-wrapper{position:absolute;visibility:hidden;width:100px;border:1px #808080 solid;border-radius:10px;color:#1c1b1b;background:#f2f2f2}
#sb-wrapper-inner{overflow:hidden;height:10rem}
@@ -44,7 +44,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:91px}
#sb-info-inner{font-family:clear-sans;font-size:1.3rem}
#sb-nav{float:right;height:16px;padding:2px 0;width:45%}
#sb-nav a{display:block;float:right;height:16px;width:16px;margin-left:3px;cursor:pointer;background-repeat:no-repeat}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:999;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:10000;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-counter{float:left;width:45%}
#sb-counter a{padding:0 4px 0 0;text-decoration:none;cursor:pointer}
#sb-counter a.sb-counter-current{text-decoration:underline}
+2 -2
View File
@@ -29,7 +29,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:130px}
#sb-info-inner,#sb-loading-inner,div.sb-message{color:#1c1b1b;background-color:#f2f2f2}
#sb-title,#sb-title-inner{border-top-left-radius:10px;border-top-right-radius:10px;width:100%;height:5rem;line-height:5rem;font-family:clear-sans;font-size:1.8rem;font-weight:bold;letter-spacing:1.8px;background:#c0c0c0;color:#606060;text-indent:10px;text-align:center}
#sb-title,#sb-info{position:relative;margin:0;padding:0;overflow:hidden}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:999;text-align:left;visibility:hidden;display:none}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:10000;text-align:left;visibility:hidden;display:none}
#sb-overlay{position:relative;height:100%;width:100%}
#sb-wrapper{position:absolute;visibility:hidden;width:100px;border:1px #808080 solid;border-radius:10px;color:#1c1b1b;background:#f2f2f2}
#sb-wrapper-inner{overflow:hidden;height:10rem}
@@ -44,7 +44,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:130px}
#sb-info-inner{font-family:clear-sans;font-size:1.3rem}
#sb-nav{float:right;height:16px;padding:2px 0;width:45%}
#sb-nav a{display:block;float:right;height:16px;width:16px;margin-left:3px;cursor:pointer;background-repeat:no-repeat}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:999;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:10000;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-counter{float:left;width:45%}
#sb-counter a{padding:0 4px 0 0;text-decoration:none;cursor:pointer}
#sb-counter a.sb-counter-current{text-decoration:underline}
+2 -2
View File
@@ -29,7 +29,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:91px}
#sb-info-inner,#sb-loading-inner,div.sb-message{color:#1c1b1b;background-color:#f2f2f2}
#sb-title,#sb-title-inner{border-top-left-radius:10px;border-top-right-radius:10px;width:100%;height:5rem;line-height:5rem;font-family:clear-sans;font-size:1.8rem;font-weight:bold;letter-spacing:1.8px;background:#c0c0c0;color:#606060;text-indent:10px;text-align:center}
#sb-title,#sb-info{position:relative;margin:0;padding:0;overflow:hidden}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:999;text-align:left;visibility:hidden;display:none}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:10000;text-align:left;visibility:hidden;display:none}
#sb-overlay{position:relative;height:100%;width:100%}
#sb-wrapper{position:absolute;visibility:hidden;width:100px;border:1px #808080 solid;border-radius:10px;color:#1c1b1b;background:#f2f2f2}
#sb-wrapper-inner{overflow:hidden;height:10rem}
@@ -44,7 +44,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:91px}
#sb-info-inner{font-family:clear-sans;font-size:1.3rem}
#sb-nav{float:right;height:16px;padding:2px 0;width:45%}
#sb-nav a{display:block;float:right;height:16px;width:16px;margin-left:3px;cursor:pointer;background-repeat:no-repeat}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:999;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:10000;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-counter{float:left;width:45%}
#sb-counter a{padding:0 4px 0 0;text-decoration:none;cursor:pointer}
#sb-counter a.sb-counter-current{text-decoration:underline}
+2 -2
View File
@@ -29,7 +29,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:130px}
#sb-info-inner,#sb-loading-inner,div.sb-message{color:#1c1b1b;background-color:#f2f2f2}
#sb-title,#sb-title-inner{border-top-left-radius:10px;border-top-right-radius:10px;width:100%;height:5rem;line-height:5rem;font-family:clear-sans;font-size:1.8rem;font-weight:bold;letter-spacing:1.8px;background:#c0c0c0;color:#606060;text-indent:10px;text-align:center}
#sb-title,#sb-info{position:relative;margin:0;padding:0;overflow:hidden}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:999;text-align:left;visibility:hidden;display:none}
#sb-container{position:fixed;margin:0;padding:0;top:0;left:0;z-index:10000;text-align:left;visibility:hidden;display:none}
#sb-overlay{position:relative;height:100%;width:100%}
#sb-wrapper{position:absolute;visibility:hidden;width:100px;border:1px #808080 solid;border-radius:10px;color:#1c1b1b;background:#f2f2f2}
#sb-wrapper-inner{overflow:hidden;height:10rem}
@@ -44,7 +44,7 @@ div.jGrowl div.jGrowl-closer.top{position:fixed;top:130px}
#sb-info-inner{font-family:clear-sans;font-size:1.3rem}
#sb-nav{float:right;height:16px;padding:2px 0;width:45%}
#sb-nav a{display:block;float:right;height:16px;width:16px;margin-left:3px;cursor:pointer;background-repeat:no-repeat}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:999;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-nav-close{background-image:url(../images/close.png);position:absolute;display:block;z-index:10000;width:32px;height:32px;top:-16px;right:-16px;cursor:pointer}
#sb-counter{float:left;width:45%}
#sb-counter a{padding:0 4px 0 0;text-decoration:none;cursor:pointer}
#sb-counter a.sb-counter-current{text-decoration:underline}
Binary file not shown.
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.
Binary file not shown.