Merge pull request #141 from bergware/6.4-wip

Fixed IP calculation in docker settings
This commit is contained in:
tom mortensen
2017-07-09 12:02:16 -07:00
committed by GitHub
12 changed files with 165 additions and 40 deletions

View File

@@ -6,6 +6,8 @@ Icon="dynamix.docker.manager.png"
/* Copyright 2005-2017, Lime Technology
* Copyright 2014-2017, Guilherme Jardim, Eric Schultz, Jon Panozzo.
*
* Additional updates by Bergware International (July 2017)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
@@ -64,13 +66,13 @@ foreach ($custom as $network) {
</style>
<span class="status"><input type="checkbox" class="advancedview"></span>
<form markdown="1" id="settingsForm" method="POST" action="/update.php" target="progressFrame">
<input type="hidden" name="#file" value="<?=$docker_cfgfile;?>">
<input type="hidden" name="#command" value="/plugins/dynamix/scripts/emhttpd_update" />
<form markdown="1" id="settingsForm" name="settingsForm" method="POST" action="/update.php" target="progressFrame">
<input type="hidden" name="#file" value="<?=$docker_cfgfile?>">
<input type="hidden" name="#command" value="/plugins/dynamix/scripts/emhttpd_update">
Enable Docker:
: <select id="DOCKER_ENABLED" name="DOCKER_ENABLED" class="narrow">
<?= mk_option($dockercfg['DOCKER_ENABLED'], 'no', 'No'); ?>
<?= mk_option($dockercfg['DOCKER_ENABLED'], 'yes', 'Yes'); ?>
<?=mk_option($dockercfg['DOCKER_ENABLED'], 'no', 'No')?>
<?=mk_option($dockercfg['DOCKER_ENABLED'], 'yes', 'Yes')?>
</select>
<?if ($var['fsState'] != "Started"):?>
<span id="arraystopped"><i class="fa fa-warning icon warning"></i> <?=($dockercfg['DOCKER_ENABLED']=='yes')?'Docker will be available after Array is Started':'Apply to activate Docker after Array is Started'?></span>
@@ -85,35 +87,82 @@ Enable Docker:
<?if ($DockerStopped):?>
<div markdown="1" class="advanced">
Docker vdisk size:
: <input id="DOCKER_IMAGE_SIZE" type="number" name="DOCKER_IMAGE_SIZE" value="<?=$dockercfg['DOCKER_IMAGE_SIZE'];?>" style="width:50px;" required="required" />GB <span id="SIZE_ERROR" class="errortext"></span></dd>
: <input id="DOCKER_IMAGE_SIZE" type="number" name="DOCKER_IMAGE_SIZE" value="<?=$dockercfg['DOCKER_IMAGE_SIZE']?>" style="width:50px;" required="required">GB <span id="SIZE_ERROR" class="errortext"></span>
> If the system needs to create a new docker image file, this is the default size to use specified in GB.
>
> To resize an existing image file, specify the new size here. Next time the Docker service is started the file (and file system) will increased to the new size (but never decreased).
Docker storage location:
: <input id="DOCKER_IMAGE_FILE" type="text" name="DOCKER_IMAGE_FILE" value="<?=$dockercfg['DOCKER_IMAGE_FILE'];?>" placeholder="e.g. /mnt/disk1/docker.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt/" data-pickfolders="true" required="required" /> <?php if (file_exists($dockercfg['DOCKER_IMAGE_FILE'])) { ?><span id="deletePanel"><label><input type="checkbox" id="deleteCheckbox" /> Delete Image File</label></span><?php } ?> <?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><?elseif (!is_dir(dirname($dockercfg['DOCKER_IMAGE_FILE']))):?><span><i class="fa fa-warning icon warning"></i> Path does not exist</span><?endif;?> <span id="IMAGE_ERROR" class="errortext"></span></dd>
: <input id="DOCKER_IMAGE_FILE" type="text" name="DOCKER_IMAGE_FILE" value="<?=$dockercfg['DOCKER_IMAGE_FILE']?>" placeholder="e.g. /mnt/disk1/docker.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt/" data-pickfolders="true" required="required">
<?if (file_exists($dockercfg['DOCKER_IMAGE_FILE'])):?>
<span id="deletePanel"><label><input type="checkbox" id="deleteCheckbox"> Delete Image File</label></span>
<?endif;?>
<?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>
<?elseif (!is_dir(dirname($dockercfg['DOCKER_IMAGE_FILE']))):?>
<span><i class="fa fa-warning icon warning"></i> Path does not exist</span>
<?endif;?><span id="IMAGE_ERROR" class="errortext"></span>
> You must specify an image file for Docker. The system will automatically create this file when the Docker service is first started.
Docker LOG rotation:
: <select name="DOCKER_LOG_ROTATION" class="narrow" onchange="showLogOptions(this.value)">
<?=mk_option($dockercfg['DOCKER_LOG_ROTATION'], 'no', 'Disabled')?>
<?=mk_option($dockercfg['DOCKER_LOG_ROTATION'], 'yes', 'Enabled')?>
</select>
> By default LOG rotation is disabled and will create a single LOG file of unlimited size.
>
> Enable LOG rotation to limit the size of the LOG file and specify the number of files to keep in the rotation scheme.
<div markdown="1" id="DOCKER_LOG_OPTIONS" style="display:none">
Docker LOG maximum file size:
: <select name="DOCKER_LOG_SIZE" class="narrow">
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '10m', '10 MB')?>
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '20m', '20 MB')?>
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '50m', '50 MB')?>
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '100m', '100 MB')?>
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '500m', '500 MB')?>
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '1g', '1000 MB')?>
</select>
Docker LOG number of files:
: <select name="DOCKER_LOG_FILES" class="narrow">
<?=mk_option($dockercfg['DOCKER_LOG_FILES'], '1', '1')?>
<?=mk_option($dockercfg['DOCKER_LOG_FILES'], '2', '2')?>
<?=mk_option($dockercfg['DOCKER_LOG_FILES'], '3', '3')?>
</select>
</div>
<?else: /* IF DOCKER STARTED */?>
</div>
<?else: /* DOCKER STARTED */?>
<div markdown="1" class="advanced">
Docker version:
: <? $arrInfo = $docker->getInfo(); echo $arrInfo['Version']; ?>
: <?$arrInfo = $docker->getInfo(); echo $arrInfo['Version']?>
> This is the docker version.
Docker storage location:
: <?=$dockercfg['DOCKER_IMAGE_FILE'];?>
: <?=$dockercfg['DOCKER_IMAGE_FILE']?>
> This is the docker volume.
Docker LOG rotation:
: <?=$dockercfg['DOCKER_LOG_ROTATION']=='yes'?'Enabled':'Disabled'?>
> By default a single unlimited LOG file is created. Otherwise LOG file size and number of files are limited when LOG rotation is enabled.
</div>
<?endif;?>
<div markdown="1" class="advanced">
Default appdata storage location:
: <input id="DOCKER_APP_CONFIG_PATH" type="text" name="DOCKER_APP_CONFIG_PATH" value="<?=$dockercfg['DOCKER_APP_CONFIG_PATH'];?>" placeholder="e.g. /mnt/user/appdata" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="<?= (is_dir('/mnt/user/') ? '/mnt/user/' : '/mnt/') ?>" data-pickfolders="true" /> <?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><?elseif (!is_dir($dockercfg['DOCKER_APP_CONFIG_PATH'])):?><span><i class="fa fa-warning icon warning"></i> Path does not exist</span><?endif;?>
: <input id="DOCKER_APP_CONFIG_PATH" type="text" name="DOCKER_APP_CONFIG_PATH" value="<?=$dockercfg['DOCKER_APP_CONFIG_PATH']?>" placeholder="e.g. /mnt/user/appdata" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="<?=(is_dir('/mnt/user/') ? '/mnt/user/' : '/mnt/')?>" data-pickfolders="true">
<?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>
<?elseif (!is_dir($dockercfg['DOCKER_APP_CONFIG_PATH'])):?>
<span><i class="fa fa-warning icon warning"></i> Path does not exist</span>
<?endif;?>
> You can specify a folder to automatically generate and store subfolders containing configuration files for each Docker app (via the /config mapped volume).
>
@@ -122,8 +171,8 @@ Default appdata storage location:
<!--
Auto-map user shares to containers as /unraid:
: <select id="DOCKER_APP_UNRAID_PATH" name="DOCKER_APP_UNRAID_PATH" class="narrow">
<?= mk_option($dockercfg['DOCKER_APP_UNRAID_PATH'], ($dockercfg['DOCKER_APP_UNRAID_PATH'] != '' ? $dockercfg['DOCKER_APP_UNRAID_PATH'] : '/mnt/user'), 'Yes'); ?>
<?= mk_option($dockercfg['DOCKER_APP_UNRAID_PATH'], '', 'No'); ?>
<?=mk_option($dockercfg['DOCKER_APP_UNRAID_PATH'], ($dockercfg['DOCKER_APP_UNRAID_PATH'] != '' ? $dockercfg['DOCKER_APP_UNRAID_PATH'] : '/mnt/user'), 'Yes')?>
<?=mk_option($dockercfg['DOCKER_APP_UNRAID_PATH'], '', 'No')?>
</select>
> You can expose all of your user shares (/mnt/user) to a folder named /unraid within Docker containers.
@@ -134,8 +183,8 @@ Auto-map user shares to containers as /unraid:
<div markdown="1" class="advanced">
Template Authoring Mode:
: <select id="DOCKER_AUTHORING_MODE" name="DOCKER_AUTHORING_MODE" class="narrow">
<?= mk_option($dockercfg['DOCKER_AUTHORING_MODE'], 'no', 'No'); ?>
<?= mk_option($dockercfg['DOCKER_AUTHORING_MODE'], 'yes', 'Yes'); ?>
<?=mk_option($dockercfg['DOCKER_AUTHORING_MODE'], 'no', 'No')?>
<?=mk_option($dockercfg['DOCKER_AUTHORING_MODE'], 'yes', 'Yes')?>
</select>
> If set to **Yes**, when creating/editing containers the interface will be present with some extra fields related to template authoring.
@@ -175,7 +224,7 @@ DHCPv6 pool of custom network <?=$network?>:
</form>
<form id="removeForm" method="POST" action="/update.php" target="progressFrame">
<input type="hidden" name="#command" value="/plugins/dynamix.docker.manager/scripts/docker_rm" />
<input type="hidden" name="#command" value="/plugins/dynamix.docker.manager/scripts/docker_rm">
</form>
<?if (!$DockerStopped):?>
@@ -185,7 +234,7 @@ btrfs filesystem show:
: <?="<pre>".shell_exec("btrfs filesystem show /var/lib/docker")."</pre>"?>
<form markdown="1" method="POST" action="/update.php" target="progressFrame">
<?exec("$docroot/webGui/scripts/btrfs_scrub status /var/lib/docker", $scrub_status, $retval);?>
<?exec("$docroot/webGui/scripts/btrfs_scrub status /var/lib/docker", $scrub_status, $retval)?>
btrfs scrub status:
: <?="<pre>".implode("\n", $scrub_status)."</pre>"?>
@@ -230,9 +279,13 @@ function checkDHCPv4() {
var base = $('#'+id).text().split('/');
if (good && typeof(pool[1])=='undefined') {good = false; swal('Missing subnet size','Pool subnet size is not defined','error');}
if (good && pool[1]<=base[1]) {good = false; swal('Invalid subnet size','Pool subnet size is too large','error');}
var ippool = ip2int(pool[0]);
var ipbase = ip2int(base[0]);
if (good && (ippool < ipbase || ippool+2**(32-pool[1]) > ipbase+2**(32-base[1]))) {good = false; swal('Invalid pool address','Pool address is out of range','error');}
if (typeof(pool[1])=='undefined') pool[1] = 0;
if (typeof(base[1])=='undefined') base[1] = 32;
var toppool = ip2int(pool[0]);
var topbase = ip2int(base[0]);
var endpool = toppool+2**(32-pool[1]);
var endbase = topbase+2**(32-base[1]);
if (good && (toppool < topbase || endpool > endbase)) {good = false; swal('Invalid pool address','Pool address is out of range','error');}
}
});
return good;
@@ -250,6 +303,13 @@ function checkDHCPv6() {
});
return good;
}
function showLogOptions(log) {
if (log == 'no') {
$('#DOCKER_LOG_OPTIONS').hide('slow');
} else {
$('#DOCKER_LOG_OPTIONS').show('slow');
}
}
$(function() {
$("#applyBtn").click(function(){
if (!checkDHCPv4() || !checkDHCPv6()) return;
@@ -299,7 +359,7 @@ $(function() {
$("#DOCKER_IMAGE_FILE").on("input change", function(){
$("#IMAGE_ERROR").fadeOut();
$("#applyBtn").prop("disabled", false);
<? if (file_exists($dockercfg['DOCKER_IMAGE_FILE'])) { ?>
<?if (file_exists($dockercfg['DOCKER_IMAGE_FILE'])):?>
if ($(this).val() != "<?=$dockercfg['DOCKER_IMAGE_FILE']?>") {
$("#deleteCheckbox").prop("disabled", true).attr("checked", false);
$("#deletePanel").fadeOut();
@@ -307,7 +367,7 @@ $(function() {
$("#deleteCheckbox").attr("checked", false).prop("disabled", false);
$("#deletePanel").fadeIn();
}
<? } ?>
<?endif;?>
});
<?if ($var['fsState'] == "Started"):?>
@@ -344,9 +404,11 @@ $(function() {
});
showStatus('pid','dockerd');
<?if ($var['fsState'] == "Started"):?>
$("#DOCKER_APP_CONFIG_PATH").fileTreeAttach();
<?endif;?>
<?if ($DockerStopped):?>
showLogOptions(document.settingsForm.DOCKER_LOG_ROTATION.value);
<?endif;?>
<?if ($var['fsState'] == "Started"):?>
$("#DOCKER_APP_CONFIG_PATH").fileTreeAttach();
<?endif;?>
});
</script>

View File

@@ -2,8 +2,8 @@ Menu="Plugins"
Title="Install Plugin"
---
<?PHP
/* Copyright 2005-2016, Lime Technology
* Copyright 2012-2016, Bergware International.
/* Copyright 2005-2017, Lime Technology
* Copyright 2012-2017, 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,
@@ -16,7 +16,7 @@ Title="Install Plugin"
<script>
function installPlugin(name) {
var file = name.trim();
if (file) openBox('/plugins/dynamix.plugin.manager/scripts/plugin&arg1=install&arg2='+file,'Install Plugin',600,900,true);
if (file) {noAudit();openBox('/plugins/dynamix.plugin.manager/scripts/plugin&arg1=install&arg2='+file,'Install Plugin',600,900,true);}
}
</script>
**Enter URL of remote plugin file or local plugin file**

View File

@@ -41,8 +41,17 @@ function resize(bind) {
}
}
<?endif;?>
function noAudit() {
hideUpgrade();
$.cookie('noAudit','true',{path:'/'});
}
$(function() {
$.get('/plugins/dynamix.plugin.manager/include/ShowPlugins.php',{audit:<?=$audit?>},function(data) {
var audit = <?=$audit?>;
if ($.cookie('noAudit') != null) {
$.removeCookie('noAudit',{path:'/'});
audit = 0;
}
$.get('/plugins/dynamix.plugin.manager/include/ShowPlugins.php',{audit:audit},function(data) {
if (data) $('#plugin_list').html(data);
<?if ($display['resize']):?>
resize();

View File

@@ -31,7 +31,8 @@ function make_link($method, $arg, $extra='') {
$check = $method=='remove' ? "<input type='checkbox' onClick='document.getElementById(\"$id\").disabled=!this.checked'>" : "";
$disabled = $check ? ' disabled' : '';
$cmd = $method == 'delete' ? "/plugins/dynamix.plugin.manager/scripts/plugin_rm&arg1=$arg" : "/plugins/dynamix.plugin.manager/scripts/plugin&arg1=$method&arg2=$arg".($extra?"&arg3=$extra":"");
return "{$check}<input type='button' id='$id' value='".ucfirst($method)."' onclick='hideUpgrade();openBox(\"{$cmd}\",\"".ucwords($method)." Plugin\",600,900,true)'{$disabled}>";
$clr = $method == 'delete' ? "" : "noAudit();";
return "{$check}<input type='button' id='$id' value='".ucfirst($method)."' onclick='{$clr}openBox(\"{$cmd}\",\"".ucwords($method)." Plugin\",600,900,true)'{$disabled}>";
}
// trying our best to find an icon

View File

@@ -3,8 +3,8 @@ Title="Identity"
Cond="strpos($disks[$name]['status'],'_NP')===false"
---
<?PHP
/* Copyright 2005-2016, Lime Technology
* Copyright 2012-2016, Bergware International.
/* Copyright 2005-2017, Lime Technology
* Copyright 2012-2017, 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,
@@ -14,13 +14,21 @@ Cond="strpos($disks[$name]['status'],'_NP')===false"
* all copies or substantial portions of the Software.
*/
?>
<style>
input[type=date]{border:none;margin-left:-2px;padding-left:0;background:transparent;box-shadow:none}
select.noframe{border:none;margin-left:-5px;padding-left:0;background:transparent;box-shadow:none}
</style>
<script>
function disklog(disk,key,value) {
$.post('/webGui/include/DiskLog.php',{disk:disk,key:key,value:value});
}
$(function() {
$.post("/webGui/include/SmartInfo.php",{cmd:'identify',port:'<?=addslashes(htmlspecialchars(isset($disks[$name]['device'])?$disks[$name]['device']:$name))?>',name:'<?=addslashes(htmlspecialchars($name))?>'}, function(data) {
$('#disk_identify').html(data);
});
});
</script>
<table class='share_status small'>
<thead><td style="width:33%">Title</td><td>Information</td></thead>
<tbody id="disk_identify"><tr><td colspan='2' style='text-align:center;padding-top:12px'><i class='fa fa-spinner fa-spin'></i>&nbsp;<em>Please wait... retrieving S.M.A.R.T. information!</em></td></tr></tbody>

View File

@@ -521,7 +521,7 @@ $(function() {
}
}
if (ini['fsProgress'].length)
status += "&bullet;<span class='green strong'>"+ini['fsProgress']+"</span>";
status += "&bullet;<span class='blue strong'>"+ini['fsProgress']+"</span>";
$('#statusbar').html(status);
});
watchdog.start();

View File

@@ -0,0 +1,27 @@
<?PHP
/* Copyright 2005-2017, Lime Technology
* Copyright 2012-2017, 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,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
?>
<?
$file = '/boot/config/disk.log';
$disks = file_exists($file) ? parse_ini_file($file,true) : [];
$disk = $_POST['disk'];
$key = $_POST['key'];
$value = $_POST['value'];
$text = '';
$disks[$disk][$key] = $value;
foreach ($disks as $disk => $block) {
$text .= "[$disk]\n";
foreach ($block as $key => $value) $text .= "$key=\"$value\"\n";
}
file_put_contents($file,$text);
?>

View File

@@ -11,7 +11,7 @@
*/
?>
<?
$docroot = $docroot ?: @$_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
$docroot = $docroot ?: $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
function normalize($text, $glue='_') {
$words = explode($glue,$text);
@@ -121,7 +121,21 @@ case "identify":
echo "<tr>".normalize(preg_replace('/ is:$/',':',"$title:"),' ')."<td>$info</td></tr>";
$empty = false;
}
if ($empty) echo "<tr><td colspan='2' style='text-align:center;padding-top:12px'>Can not read identification</td></tr>";
if ($empty) {
echo "<tr><td colspan='2' style='text-align:center;padding-top:12px'>Can not read identification</td></tr>";
} else {
$file = '/boot/config/disk.log';
$disks = parse_ini_file('state/disks.ini',true);
$extra = file_exists($file) ? parse_ini_file($file,true) : [];
$disk = $disks[$name]['id'];
$info = &$extra[$disk];
$periods = ['6','12','18','24','36','48','60'];
echo "<tr><td>Manufacturing date:</td><td><input type='date' class='narrow' value='{$info['date']}' onchange='disklog(\"$disk\",\"date\",this.value)'></td></tr>";
echo "<tr><td>Date of purchase:</td><td><input type='date' class='narrow' value='{$info['purchase']}' onchange='disklog(\"$disk\",\"purchase\",this.value)'></td></tr>";
echo "<tr><td>Warranty period:</td><td><select size='1' class='noframe' onchange='disklog(\"$disk\",\"warranty\",this.value)'><option value=''>unknown</option>";
foreach ($periods as $period) echo "<option value='$period'".($info['warranty']==$period?" selected":"").">$period months</option>";
echo "</select></td></tr>";
}
break;
case "save":
exec("smartctl -a $type ".escapeshellarg("/dev/$port")." >".escapeshellarg("$docroot/{$_POST['file']}"));

View File

@@ -19,7 +19,7 @@ pre ul{margin:0;padding-top:0;padding-bottom:0;padding-left:28px}
pre li{margin:0;padding-top:0;padding-bottom:0;padding-left:18px}
big{font-size:15px;font-weight:bold;text-transform:uppercase}
hr{border-color:#EDEAEF}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F}
input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:13px;border:1px solid #9F9180;border-radius:5px;margin:10px 20px 10px 0;padding:8px 12px;cursor:pointer;outline:none;color:#9F9180;background:#EDEAEF}
input[type=checkbox]{vertical-align:middle;margin-right:6px}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none}
@@ -108,6 +108,7 @@ span.tub span[id^='txt-tub']{margin-top:7px}
.green{color:#4F8A10;padding-left:5px;padding-right:5px}
.red{color:#F0000C;padding-left:5px;padding-right:5px}
.orange{color:#E68A00;padding-left:5px;padding-right:5px}
.blue{color:#3B5998;padding-left:5px;padding-right:5px}
.green-text,.passed{color:#4F8A10}
.red-text,.failed{color:#F0000C}
.orange-text,.warning{color:#E68A00}

View File

@@ -16,7 +16,7 @@ a.nohand{cursor:default}
i.spacing{margin-left:-6px}
i.icon{margin-right:4px}
hr{border-color:rgba(255,255,255,0.25)}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],textarea,.textarea{font-family:arimo;font-size:12px;color:#808080;background-color:#000000;border:1px solid #404040;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #404040}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:12px;color:#808080;background-color:#000000;border:1px solid #404040;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #404040}
input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:12px;border:1px solid #303030;border-radius:6px;margin:7px 14px 0 0;padding:8px 12px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;color:#808080;background:-webkit-radial-gradient(#505050,#181818);background:linear-gradient(#505050,#181818)}
input[type=checkbox]{vertical-align:middle;margin-right:6px}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance: none}
@@ -84,6 +84,7 @@ input.trim{width:50px}
.green{color:#4F8A10;padding-left:5px;padding-right:5px}
.red{color:#F0000C;padding-left:5px;padding-right:5px}
.orange{color:#E68A00;padding-left:5px;padding-right:5px}
.blue{color:#3B5998;padding-left:5px;padding-right:5px}
.green-text,.passed{color:#4F8A10}
.red-text,.failed{color:#F0000C}
.orange-text,.warning{color:#E68A00}

View File

@@ -19,7 +19,7 @@ pre ul{margin:0;padding-top:0;padding-bottom:0;padding-left:28px}
pre li{margin:0;padding-top:0;padding-bottom:0;padding-left:18px}
big{font-size:15px;font-weight:bold;text-transform:uppercase}
hr{border-color:#121510}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F}
input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:13px;border:1px solid #606E7F;border-radius:5px;margin:10px 20px 10px 0;padding:8px 12px;cursor:pointer;outline:none;color:#606E7F;background:#121510}
input[type=checkbox]{vertical-align:middle;margin-right:6px}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none}
@@ -108,6 +108,7 @@ span.tub span[id^='txt-tub']{margin-top:7px}
.green{color:#4F8A10;padding-left:5px;padding-right:5px}
.red{color:#F0000C;padding-left:5px;padding-right:5px}
.orange{color:#E68A00;padding-left:5px;padding-right:5px}
.blue{color:#3B5998;padding-left:5px;padding-right:5px}
.green-text,.passed{color:#4F8A10}
.red-text,.failed{color:#F0000C}
.orange-text,.warning{color:#E68A00}

View File

@@ -16,7 +16,7 @@ a.nohand{cursor:default}
i.spacing{margin-left:-6px}
i.icon{margin-right:4px}
hr{border-color:rgba(255,255,255,0.25)}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],textarea,.textarea{font-family:arimo;font-size:12px;color:#303030;background-color:#FFFFFF;border:1px solid #E0E0E0;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #F0F0F0}
input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:12px;color:#303030;background-color:#FFFFFF;border:1px solid #E0E0E0;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #F0F0F0}
input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:12px;border:1px solid #E8E8E8;border-radius:6px;margin:7px 14px 0 0;padding:8px 12px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;color:#303030;background:-webkit-radial-gradient(#F0F0F0,#C8C8C8);background:linear-gradient(#F0F0F0,#C8C8C8)}
input[type=checkbox]{vertical-align:middle;margin-right:6px}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance: none}
@@ -84,6 +84,7 @@ input.trim{width:50px}
.green{color:#4F8A10;padding-left:5px;padding-right:5px}
.red{color:#F0000C;padding-left:5px;padding-right:5px}
.orange{color:#E68A00;padding-left:5px;padding-right:5px}
.blue{color:#3B5998;padding-left:5px;padding-right:5px}
.green-text,.passed{color:#4F8A10}
.red-text,.failed{color:#F0000C}
.orange-text,.warning{color:#E68A00}