Update #18: UX Document Template Bulk Generating

Improved UX
This commit is contained in:
Gary Sharp committed 2013-10-24 22:15:46 +11:00
1 parent 723eeec91e
commit 233d62442c
6 files changed
+299 -94

No files matched your search

@@ -453,7 +453,7 @@ namespace Disco.Web.Areas.API.Controllers
throw new InvalidOperationException("Unknown DocumentType Scope"); throw new InvalidOperationException("Unknown DocumentType Scope");
} }
var dataIds = DataIds.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); var dataIds = DataIds.Split(new string[] { Environment.NewLine, ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
var timeStamp = DateTime.Now; var timeStamp = DateTime.Now;
var pdf = documentTemplate.GeneratePdfBulk(Database, UserService.CurrentUser, timeStamp, dataIds); var pdf = documentTemplate.GeneratePdfBulk(Database, UserService.CurrentUser, timeStamp, dataIds);
@@ -383,20 +383,6 @@
} }
</td> </td>
</tr> </tr>
@if (canBulkGenerate)
{
<tr>
<th>Bulk Generate
</th>
<td>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post))
{
<textarea name="DataIds"></textarea>
<input class="button" type="submit" value="Generate" />
}
</td>
</tr>
}
</table> </table>
</div> </div>
<h2>Template Expressions</h2> <h2>Template Expressions</h2>
@@ -443,6 +429,80 @@
{ {
@Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser()) @Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser())
} }
@if (canBulkGenerate)
{
<a id="buttonBulkGenerate" href="#" class="button">Bulk Generate</a>
<div id="dialogBulkGenerate" class="hiddenDialog" title="Bulk Generate: @(Model.DocumentTemplate.Id)">
<div class="brief">
<div>
Enter multiple <span class="scopeDescBulkGenerate"></span>&nbsp;separated by <code>&lt;new line&gt;</code>, commas (<code>,</code>) or semicolons (<code>;</code>).
</div>
<div class="examples clearfix">
<h4>Examples:</h4>
<div class="example1 code"></div>
<div class="example2 code"></div>
<div class="example3 code"></div>
</div>
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post))
{
<div class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="DataIds"></div>
<textarea id="inputBulkGenerateDataIds" name="DataIds" data-val="true" data-val-required="Identifiers are required"></textarea>
}
</div>
<script>
$(function () {
var dialog;
$('#buttonBulkGenerate').click(function () {
if (!dialog) {
dialog = $('#dialogBulkGenerate').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Bulk Generate": function () {
dialog.find('form').submit();
dialog.dialog("disable");
},
Close: function () {
$(this).dialog("close");
}
}
});
$.validator.unobtrusive.reparse('#inputBulkGenerateDataIds');
}
switch ($('#DocumentTemplate_Scope').val()) {
case 'Device':
dialog.find('.scopeDescBulkGenerate').text('Device Serial Numbers');
dialog.find('.example1').html('01234567<br />ABCD9876<br />8VQ6G2R');
dialog.find('.example2').text('01234567,ABCD9876,8VQ6G2R');
dialog.find('.example3').text('01234567;ABCD9876;8VQ6G2R');
break;
case 'Job':
dialog.find('.scopeDescBulkGenerate').text('Job Ids');
dialog.find('.example1').html('86<br />99<br />44');
dialog.find('.example2').text('86,99,44');
dialog.find('.example3').text('86;99;44');
break;
case 'User':
dialog.find('.scopeDescBulkGenerate').text('User Ids');
dialog.find('.example1').html('user6<br />smi0099<br />rsmith');
dialog.find('.example2').text('user6,smi0099,rsmith');
dialog.find('.example3').text('user6;smi0099;rsmith');
break;
}
dialog.dialog('open');
return false;
});
});
</script>
}
@if (Authorization.Has(Claims.Config.DocumentTemplate.Delete)) @if (Authorization.Has(Claims.Config.DocumentTemplate.Delete))
{ {
@Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete") @Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete")
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.18051 // Runtime Version:4.0.30319.34003
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@@ -965,75 +965,11 @@ WriteLiteral("\r\n </div>\r\n");
#line default #line default
#line hidden #line hidden
WriteLiteral(" </td>\r\n </tr>\r\n"); WriteLiteral(" </td>\r\n </tr>\r\n </table>\r\n</div>\r\n<h2>Template Expressions<" +
"/h2>\r\n");
#line 386 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 389 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
#line default
#line hidden
#line 386 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
if (canBulkGenerate)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n <th>Bulk Generate\r\n </th>\r\n " +
" <td>\r\n");
#line 392 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
#line default
#line hidden
#line 392 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post))
{
#line default
#line hidden
WriteLiteral(" <textarea");
WriteLiteral(" name=\"DataIds\"");
WriteLiteral("></textarea>\r\n");
WriteLiteral(" <input");
WriteLiteral(" class=\"button\"");
WriteLiteral(" type=\"submit\"");
WriteLiteral(" value=\"Generate\"");
WriteLiteral(" />\r\n");
#line 396 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
}
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r\n");
#line 399 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
}
#line default
#line hidden
WriteLiteral(" </table>\r\n</div>\r\n<h2>Template Expressions</h2>\r\n");
#line 403 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
Write(Html.Partial(MVC.Config.DocumentTemplate.Views._ExpressionsTable, Model.TemplateExpressions)); Write(Html.Partial(MVC.Config.DocumentTemplate.Views._ExpressionsTable, Model.TemplateExpressions));
@@ -1097,13 +1033,13 @@ WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 442 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 428 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
#line default #line default
#line hidden #line hidden
#line 442 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 428 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
if (Authorization.Has(Claims.Config.Show)) if (Authorization.Has(Claims.Config.Show))
{ {
@@ -1111,14 +1047,14 @@ WriteLiteral(">\r\n");
#line default #line default
#line hidden #line hidden
#line 444 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 430 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
Write(Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser())); Write(Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser()));
#line default #line default
#line hidden #line hidden
#line 444 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 430 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
} }
@@ -1128,7 +1064,164 @@ WriteLiteral(">\r\n");
WriteLiteral(" "); WriteLiteral(" ");
#line 446 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 432 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
if (canBulkGenerate)
{
#line default
#line hidden
WriteLiteral(" <a");
WriteLiteral(" id=\"buttonBulkGenerate\"");
WriteLiteral(" href=\"#\"");
WriteLiteral(" class=\"button\"");
WriteLiteral(">Bulk Generate</a>\r\n");
WriteLiteral(" <div");
WriteLiteral(" id=\"dialogBulkGenerate\"");
WriteLiteral(" class=\"hiddenDialog\"");
WriteAttribute("title", Tuple.Create(" title=\"", 20958), Tuple.Create("\"", 21009)
, Tuple.Create(Tuple.Create("", 20966), Tuple.Create("Bulk", 20966), true)
, Tuple.Create(Tuple.Create(" ", 20970), Tuple.Create("Generate:", 20971), true)
#line 435 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
, Tuple.Create(Tuple.Create(" ", 20980), Tuple.Create<System.Object, System.Int32>(Model.DocumentTemplate.Id
#line default
#line hidden
, 20981), false)
);
WriteLiteral(">\r\n <div");
WriteLiteral(" class=\"brief\"");
WriteLiteral(">\r\n <div>\r\n Enter multiple <span");
WriteLiteral(" class=\"scopeDescBulkGenerate\"");
WriteLiteral("></span>&nbsp;separated by <code>&lt;new line&gt;</code>, commas (<code>,</code>)" +
" or semicolons (<code>;</code>).\r\n </div>\r\n <div");
WriteLiteral(" class=\"examples clearfix\"");
WriteLiteral(">\r\n <h4>Examples:</h4>\r\n <div");
WriteLiteral(" class=\"example1 code\"");
WriteLiteral("></div>\r\n <div");
WriteLiteral(" class=\"example2 code\"");
WriteLiteral("></div>\r\n <div");
WriteLiteral(" class=\"example3 code\"");
WriteLiteral("></div>\r\n </div>\r\n </div>\r\n");
#line 447 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
#line default
#line hidden
#line 447 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post))
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" class=\"field-validation-valid\"");
WriteLiteral(" data-valmsg-replace=\"true\"");
WriteLiteral(" data-valmsg-for=\"DataIds\"");
WriteLiteral("></div>\r\n");
WriteLiteral(" <textarea");
WriteLiteral(" id=\"inputBulkGenerateDataIds\"");
WriteLiteral(" name=\"DataIds\"");
WriteLiteral(" data-val=\"true\"");
WriteLiteral(" data-val-required=\"Identifiers are required\"");
WriteLiteral("></textarea>\r\n");
#line 451 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n");
#line 453 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
#line default
#line hidden
WriteLiteral(" <script>\r\n $(function () {\r\n var dialog;\r\n\r\n " +
" $(\'#buttonBulkGenerate\').click(function () {\r\n i" +
"f (!dialog) {\r\n dialog = $(\'#dialogBulkGenerate\').dialog(" +
"{\r\n resizable: false,\r\n mo" +
"dal: true,\r\n autoOpen: false,\r\n " +
" width: 460,\r\n buttons: {\r\n " +
" \"Bulk Generate\": function () {\r\n d" +
"ialog.find(\'form\').submit();\r\n dialog.dialog(" +
"\"disable\");\r\n },\r\n " +
" Close: function () {\r\n $(this).dialog(\"close" +
"\");\r\n }\r\n }\r\n " +
" });\r\n\r\n $.validator.unobtrusive.reparse(\'#" +
"inputBulkGenerateDataIds\');\r\n }\r\n\r\n switch" +
" ($(\'#DocumentTemplate_Scope\').val()) {\r\n case \'Device\':\r" +
"\n dialog.find(\'.scopeDescBulkGenerate\').text(\'Device " +
"Serial Numbers\');\r\n dialog.find(\'.example1\').html(\'01" +
"234567<br />ABCD9876<br />8VQ6G2R\');\r\n dialog.find(\'." +
"example2\').text(\'01234567,ABCD9876,8VQ6G2R\');\r\n dialo" +
"g.find(\'.example3\').text(\'01234567;ABCD9876;8VQ6G2R\');\r\n " +
" break;\r\n case \'Job\':\r\n dia" +
"log.find(\'.scopeDescBulkGenerate\').text(\'Job Ids\');\r\n " +
" dialog.find(\'.example1\').html(\'86<br />99<br />44\');\r\n " +
" dialog.find(\'.example2\').text(\'86,99,44\');\r\n dialo" +
"g.find(\'.example3\').text(\'86;99;44\');\r\n break;\r\n " +
" case \'User\':\r\n dialog.find(\'.scope" +
"DescBulkGenerate\').text(\'User Ids\');\r\n dialog.find(\'." +
"example1\').html(\'user6<br />smi0099<br />rsmith\');\r\n " +
"dialog.find(\'.example2\').text(\'user6,smi0099,rsmith\');\r\n " +
" dialog.find(\'.example3\').text(\'user6;smi0099;rsmith\');\r\n " +
" break;\r\n }\r\n\r\n dialog.dialog(\'open" +
"\');\r\n return false;\r\n });\r\n });\r\n " +
" </script>\r\n");
#line 505 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 506 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
if (Authorization.Has(Claims.Config.DocumentTemplate.Delete)) if (Authorization.Has(Claims.Config.DocumentTemplate.Delete))
{ {
@@ -1136,14 +1229,14 @@ WriteLiteral(" ");
#line default #line default
#line hidden #line hidden
#line 448 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 508 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
Write(Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete")); Write(Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete"));
#line default #line default
#line hidden #line hidden
#line 448 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml" #line 508 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
} }
+23
View File
@@ -542,6 +542,29 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
padding: 2px; padding: 2px;
height: 430px; height: 430px;
} }
#dialogBulkGenerate .brief {
margin: 0 0 8px 0;
}
#dialogBulkGenerate .brief .scopeDescBulkGenerate {
font-weight: bold;
}
#dialogBulkGenerate .brief div.examples {
margin: 8px auto;
width: 300px;
}
#dialogBulkGenerate .brief div.examples div {
margin: 2px 4px 2px 0;
width: 150px;
float: left;
}
#dialogBulkGenerate .brief div.examples div.example1 {
width: 100px;
}
#dialogBulkGenerate textarea {
width: 100%;
height: 200px;
margin: 0 auto;
}
#importStatus #sessions .session { #importStatus #sessions .session {
padding: 4px; padding: 4px;
margin-bottom: 10px; margin-bottom: 10px;
+32 -3
View File
@@ -540,6 +540,38 @@ div.logEventsViewport {
} }
} }
// Document Templates
#dialogBulkGenerate {
.brief {
margin: 0 0 8px 0;
.scopeDescBulkGenerate {
font-weight: bold;
}
div.examples {
margin: 8px auto;
width: 300px;
div {
margin: 2px 4px 2px 0;
width: 150px;
float: left;
&.example1 {
width: 100px;
}
}
}
}
textarea {
width: 100%;
height: 200px;
margin: 0 auto;
}
}
// Document Templates - Import Status // Document Templates - Import Status
#importStatus { #importStatus {
#sessions { #sessions {
@@ -757,7 +789,6 @@ div.logEventsViewport {
text-align: right; text-align: right;
} }
} }
// Device Batches // Device Batches
.deviceBatches { .deviceBatches {
#DeviceBatch_PurchaseDetails_Container { #DeviceBatch_PurchaseDetails_Container {
@@ -792,9 +823,7 @@ div.logEventsViewport {
height: 200px; height: 200px;
} }
} }
// Plugins // Plugins
#plugins { #plugins {
.pageMenuArea a > h3 { .pageMenuArea a > h3 {
display: inline; display: inline;
+1 -1
View File
@@ -1 +1 @@
.tableData{border:solid 1px #e8eef4;border-collapse:collapse}.tableData>tbody>tr>td{border:solid 1px #e8eef4;background-color:#fff}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfd}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#e8eef4;border:solid 1px #e8eef4}.tableData>tbody>tr:hover>td{background-color:#e8eef4}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#e8eef4}.tableDataDark{border:solid 1px #8db2d8;border-collapse:collapse}.tableDataDark td{border:solid 1px #8db2d8;background-color:#fff}.tableDataDark th{background-color:#8db2d8;border:solid 1px #8db2d8}.tableDataContainer{background-color:#fff}.tableDataVertical{border:solid 1px #e8eef4;border-collapse:collapse}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#e8eef4;margin:0;padding:0}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer}.subtleUntilHover{-moz-opacity:.3;opacity:.3}.subtleUntilHover:hover{-moz-opacity:1;opacity:1}#pageMenu td .pageMenuArea>a.config{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACsElEQVQ4y41T3UtTcRie3QaNRhKC/4SgN4KBeSGK4EAvuzChNZQSvJgXYldCV5tMiUzEDVuZ84M0P4OmpjO3lV+bs21nH2fnbGd69mFuMz/39DunFsUadODh/Hj5vc/zPu/7/iQAJP9CQ0NDrU6nO9Lr9YnS0tKqfPdyAoODg7daWlpuqFQqYyyeQDKVQmdnp6G9vf26RqO5nZfAYDC0vZ2ezuj0es5oHEuGuQhCYQ7RWAznFxeYmpo6fmkwcCaTKfO8v1/5F4FMJrv26vUIQ7MhxOJxEYc8DzrIgItEcHB4iONkEql0Gqdn5xgdHfXnVFBXV6cNkATK54M/QMNm+4yPq2vY3NqCl8QSR0ci0icnqK6ufppDoO3t3fSRROe+C/PzCyKJ3e64CjLslZC0tLyMyMHPSjQ9PZbfBEqlslar1fIut/uS8vpgtdoQCoVB/NJSqVReWFh4b2FxkY8SW0JVQl88FHXZ19fHl5eXV0kqK++qInwU+y43duwOrJnXQVE+1NfLn2RVHigUAx7KC/P6BulLEH6aJs2No6LiTpukrKzsEcOy2HN+xfbOLlbXzOCjMajV6vdZgiGd7oswlZnZOdj3nAjQhCQQQElJiUJCPmlTU9MsGR1H/GJre0ds1uTkJEZG3nwzGo3HY+Pj4jSsNhu8/gD0w8OskCPk/rl5z1LpE7DE/wfTkjjGXWLJQRRpovhuZgYO5z4pP4iamhp1zhS6u7u572dniCcScHs8sFisWN+w4NMvWIi6QB4ku9LV1RXKIVB1dJjJX1iiDNm+TJjjRL+CqrAfRDlDFusqHDlAa2vrSg6B4KexsXGiqKjofnFx8WNSxalfbBYNyutNkvhDElfI5fIJ4W7ex5TFi4EBF0umwzAMmpubV/77NWZRUFAgI52eE0DON/Pd+wH6O+vw3ozilAAAAABJRU5ErkJggg==)}#pageMenu td .pageMenuArea>a.config:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACiElEQVQ4y41Ta0iTYRQe/ShCTCpJiiRIKvtTiUE3+2VRiMR+JEk3ktKMslmGJZVEf1aZhpFFS/uRQ7Jcq2jVKvKCu2S66eZl05zu5qd9m+5i28TtO73njYXyNeiDw/dyOOc5z3me9xUAgOBfUXYgNUv3+JxH/0Q0lZ22MjNWHS/R9agwsfZU+hL5hZ0vAi4HhLwsKC5lSBuLtsepbx9MignQ/bRENCC7xekkRYyx4brf6zCB194Pv1gbhGeCMNAk9pEaZlgp4Tru5xXOA0hKWLSg59kVu8dqBJyK4R+3wJSlG3xOM/iZHxD0TEDI54LZ4DQYpFdHeAyK96+rxgb3YAdMDevBoZXDaHM9jH1/R3MBt5PGjH8SzmSmiHkAmru5Omz8aWyGwbf3KAijV0YIqwg2WT7XgW9siDJR38n59hdAcjI9S1NxiGX728M4ya5uAo+tF8i+1sT4hcLk5YuPDikesLgWskJdXCZNWFt1hM3ZtjpTcDxjTen0xAiwfW04EUZbpOA2a6Eka315dMrDE2kS0gTWtgaqC7JDcXN3JIsExOMinIjUGd1HCoCA7WLhpygAuQ9d6Ir5TRWM93yhABj7NiUVCMiXUHl4s4JYx6ALTNcHKlZf400w1Jd5Sd7X+/wGdcOueQWTQ52gry12YA/2zr15NWgTsiFeUxtxpQnDVzrNJK+gLPF8dm9KJc+FlvI9zGzAR++Aa0AFNtXLeYHTERxDeXm3kwfw+uIuFReJIABHBOJwZ9yXTv0jHEf+EczX5W9t5QHgPteEG2VrV8Tlpa6KP09YhKJiEVf8JH+a5AtKszfIsDbmY4pGZ02+mVImwlYf29L6369xDqNlROn3GOS8NFbdbzB85s9H8NGVAAAAAElFTkSuQmCC)}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:4px 10px 4px 70px;text-align:right;height:64px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAABACAYAAACz4p94AAAVPUlEQVRo3s2aWaxk13Wev7X3PkONd+6+PQ+cmoNItkha4iCYtBVLpGQ7MkQ78EMICBZt+EFAAENMgAAKkAQInYcEQR6Sl8AKHE1OBBkg2YJFKS0O8iCSgimymyLZTXY3e+471q1bVWfYKw/7nLrVDCkDQQNhNQ7OrdNVe69/Tf9aa5dwLV+P/ycOuE1z8fxZKaa2U4pQYkEBY0m3tZk79pKePXbc8/ZPrtm27pqscvfn4aWnYO+exq5WvqCptUOXMHAJmYkZFYpzMfO7usysnSnOvnnqIpB9tEC89BQArW5zenpK7ugPB+nQRLRtQm4tK3lJZCKmui1ttFt9Ytf76IGoXs00WUib9oHp6dlOZoyU4siNxY9KrHV0Gw1Va5dw9nVg9SMJIo3jxTSJPjnXbc8UYqWwjhzDMCmxxtFsNXQTvUDkvguc/kiCEGsX4ii6ud3tTJXGUIhjKJbesERcRLedMvB+Gmu713LfawoC9Q1nbDrTdHFpHKWxbIil5RTjItrNhEtIijWNjyyIIi8iI0g3TSisozQOVUPTCDZKaDYjBBVEoo8siOFoJKinncTk1lLaiEwtqXNESUI3teABMeYjC2IwGIovSpqxIzeO0jr6RKQupptEbIs8AmBEP7og+hv4vCB2DmsdhYtwGtHEMR8J2xyIEhj8IxvYvR5lNsIaQYxBjMFhaakw42C23k2uLYhr6ptcPJ8x3FQjghXBVEASK7Ss0A67KSvr2TW1xF9897uRM/aPW63mnla7U7Zb7bC5UN0FEETkqmfhOUglrBHDn3z32cM220yCpDJWuAGsASuQRK79L77y2Jef+Mf/40EFUdlaQyb2kbAZBkFRijwnyzLyoiDPMrJwRXme/5UzmEjEfBkxtwqCMeHaEnTr76ufT2wuAqIcmmlxYZDhvWppVEpVCpQcyD1kHk0i17hp1/bfCZKCqdarARgRMBPPjCAalBeAMt5bVVHV0llr1BjJjAhxHBEnCda6qzRvEMSAiA2LimDEhA3HloDIOWBEXnopjacsPUP19MXQK6HnEUWI4pi02awiPAgKEnxbggWlAmOqTxljq2ASvCp5ntcgCmeMwVpLmjb43z/8AUl+kZgMjEHiGfCKiWJwCUWRUSKIsYhmCAXYFCmGiHpeO9OnffAuhmVJQYliGPmCnhiuGEvHwWiwyQ/+15+z9uPv4FUxrS6MelDm+NYUuBhrLNYlaL+HZhkap2AU1ZCieyPLdTffwaFDN6GqODGVyQRmZ2f4/V/7OKkbgFho7YM8g7QFaYdvP3+MYxeWKLLine truncated .tableData{border:solid 1px #e8eef4;border-collapse:collapse}.tableData>tbody>tr>td{border:solid 1px #e8eef4;background-color:#fff}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfd}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#e8eef4;border:solid 1px #e8eef4}.tableData>tbody>tr:hover>td{background-color:#e8eef4}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#e8eef4}.tableDataDark{border:solid 1px #8db2d8;border-collapse:collapse}.tableDataDark td{border:solid 1px #8db2d8;background-color:#fff}.tableDataDark th{background-color:#8db2d8;border:solid 1px #8db2d8}.tableDataContainer{background-color:#fff}.tableDataVertical{border:solid 1px #e8eef4;border-collapse:collapse}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#e8eef4;margin:0;padding:0}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer}.subtleUntilHover{-moz-opacity:.3;opacity:.3}.subtleUntilHover:hover{-moz-opacity:1;opacity:1}#pageMenu td .pageMenuArea>a.config{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACsElEQVQ4y41T3UtTcRie3QaNRhKC/4SgN4KBeSGK4EAvuzChNZQSvJgXYldCV5tMiUzEDVuZ84M0P4OmpjO3lV+bs21nH2fnbGd69mFuMz/39DunFsUadODh/Hj5vc/zPu/7/iQAJP9CQ0NDrU6nO9Lr9YnS0tKqfPdyAoODg7daWlpuqFQqYyyeQDKVQmdnp6G9vf26RqO5nZfAYDC0vZ2ezuj0es5oHEuGuQhCYQ7RWAznFxeYmpo6fmkwcCaTKfO8v1/5F4FMJrv26vUIQ7MhxOJxEYc8DzrIgItEcHB4iONkEql0Gqdn5xgdHfXnVFBXV6cNkATK54M/QMNm+4yPq2vY3NqCl8QSR0ci0icnqK6ufppDoO3t3fSRROe+C/PzCyKJ3e64CjLslZC0tLyMyMHPSjQ9PZbfBEqlslar1fIut/uS8vpgtdoQCoVB/NJSqVReWFh4b2FxkY8SW0JVQl88FHXZ19fHl5eXV0kqK++qInwU+y43duwOrJnXQVE+1NfLn2RVHigUAx7KC/P6BulLEH6aJs2No6LiTpukrKzsEcOy2HN+xfbOLlbXzOCjMajV6vdZgiGd7oswlZnZOdj3nAjQhCQQQElJiUJCPmlTU9MsGR1H/GJre0ds1uTkJEZG3nwzGo3HY+Pj4jSsNhu8/gD0w8OskCPk/rl5z1LpE7DE/wfTkjjGXWLJQRRpovhuZgYO5z4pP4iamhp1zhS6u7u572dniCcScHs8sFisWN+w4NMvWIi6QB4ku9LV1RXKIVB1dJjJX1iiDNm+TJjjRL+CqrAfRDlDFusqHDlAa2vrSg6B4KexsXGiqKjofnFx8WNSxalfbBYNyutNkvhDElfI5fIJ4W7ex5TFi4EBF0umwzAMmpubV/77NWZRUFAgI52eE0DON/Pd+wH6O+vw3ozilAAAAABJRU5ErkJggg==)}#pageMenu td .pageMenuArea>a.config:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACiElEQVQ4y41Ta0iTYRQe/ShCTCpJiiRIKvtTiUE3+2VRiMR+JEk3ktKMslmGJZVEf1aZhpFFS/uRQ7Jcq2jVKvKCu2S66eZl05zu5qd9m+5i28TtO73njYXyNeiDw/dyOOc5z3me9xUAgOBfUXYgNUv3+JxH/0Q0lZ22MjNWHS/R9agwsfZU+hL5hZ0vAi4HhLwsKC5lSBuLtsepbx9MignQ/bRENCC7xekkRYyx4brf6zCB194Pv1gbhGeCMNAk9pEaZlgp4Tru5xXOA0hKWLSg59kVu8dqBJyK4R+3wJSlG3xOM/iZHxD0TEDI54LZ4DQYpFdHeAyK96+rxgb3YAdMDevBoZXDaHM9jH1/R3MBt5PGjH8SzmSmiHkAmru5Omz8aWyGwbf3KAijV0YIqwg2WT7XgW9siDJR38n59hdAcjI9S1NxiGX728M4ya5uAo+tF8i+1sT4hcLk5YuPDikesLgWskJdXCZNWFt1hM3ZtjpTcDxjTen0xAiwfW04EUZbpOA2a6Eka315dMrDE2kS0gTWtgaqC7JDcXN3JIsExOMinIjUGd1HCoCA7WLhpygAuQ9d6Ir5TRWM93yhABj7NiUVCMiXUHl4s4JYx6ALTNcHKlZf400w1Jd5Sd7X+/wGdcOueQWTQ52gry12YA/2zr15NWgTsiFeUxtxpQnDVzrNJK+gLPF8dm9KJc+FlvI9zGzAR++Aa0AFNtXLeYHTERxDeXm3kwfw+uIuFReJIABHBOJwZ9yXTv0jHEf+EczX5W9t5QHgPteEG2VrV8Tlpa6KP09YhKJiEVf8JH+a5AtKszfIsDbmY4pGZ02+mVImwlYf29L6369xDqNlROn3GOS8NFbdbzB85s9H8NGVAAAAAElFTkSuQmCC)}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:4px 10px 4px 70px;text-align:right;height:64px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAABACAYAAACz4p94AAAVPUlEQVRo3s2aWaxk13Wev7X3PkONd+6+PQ+cmoNItkha4iCYtBVLpGQ7MkQ78EMICBZt+EFAAENMgAAKkAQInYcEQR6Sl8AKHE1OBBkg2YJFKS0O8iCSgimymyLZTXY3e+471q1bVWfYKw/7nLrVDCkDQQNhNQ7OrdNVe69/Tf9aa5dwLV+P/ycOuE1z8fxZKaa2U4pQYkEBY0m3tZk79pKePXbc8/ZPrtm27pqscvfn4aWnYO+exq5WvqCptUOXMHAJmYkZFYpzMfO7usysnSnOvnnqIpB9tEC89BQArW5zenpK7ugPB+nQRLRtQm4tK3lJZCKmui1ttFt9Ytf76IGoXs00WUib9oHp6dlOZoyU4siNxY9KrHV0Gw1Va5dw9nVg9SMJIo3jxTSJPjnXbc8UYqWwjhzDMCmxxtFsNXQTvUDkvguc/kiCEGsX4ii6ud3tTJXGUIhjKJbesERcRLedMvB+Gmu713LfawoC9Q1nbDrTdHFpHKWxbIil5RTjItrNhEtIijWNjyyIIi8iI0g3TSisozQOVUPTCDZKaDYjBBVEoo8siOFoJKinncTk1lLaiEwtqXNESUI3teABMeYjC2IwGIovSpqxIzeO0jr6RKQupptEbIs8AmBEP7og+hv4vCB2DmsdhYtwGtHEMR8J2xyIEhj8IxvYvR5lNsIaQYxBjMFhaakw42C23k2uLYhr6ptcPJ8x3FQjghXBVEASK7Ss0A67KSvr2TW1xF9897uRM/aPW63mnla7U7Zb7bC5UN0FEETkqmfhOUglrBHDn3z32cM220yCpDJWuAGsASuQRK79L77y2Jef+Mf/40EFUdlaQyb2kbAZBkFRijwnyzLyoiDPMrJwRXme/5UzmEjEfBkxtwqCMeHaEnTr76ufT2wuAqIcmmlxYZDhvWppVEpVCpQcyD1kHk0i17hp1/bfCZKCqdarARgRMBPPjCAalBeAMt5bVVHV0llr1BjJjAhxHBEnCda6qzRvEMSAiA2LimDEhA3HloDIOWBEXnopjacsPUP19MXQK6HnEUWI4pi02awiPAgKEnxbggWlAmOqTxljq2ASvCp5ntcgCmeMwVpLmjb43z/8AUl+kZgMjEHiGfCKiWJwCUWRUSKIsYhmCAXYFCmGiHpeO9OnffAuhmVJQYliGPmCnhiuGEvHwWiwyQ/+15+z9uPv4FUxrS6MelDm+NYUuBhrLNYlaL+HZhkap2AU1ZCieyPLdTffwaFDN6GqODGVyQRmZ2f4/V/7OKkbgFho7YM8g7QFaYdvP3+MYxeWKLLine truncated