* hydra: layout changes
This commit is contained in:
parent
a1c7e359be
commit
f0706a75a2
|
@ -93,7 +93,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
<div id="tabs-summary">
|
<div id="tabs-summary">
|
||||||
|
|
||||||
<table class="statusTable">
|
<table class="layoutTable">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
[% INCLUDE renderBuildStatusIcon size=128, build=build %]
|
[% INCLUDE renderBuildStatusIcon size=128, build=build %]
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
|
|
||||||
|
|
||||||
[% BLOCK renderBuildList %]
|
[% BLOCK renderBuildList %]
|
||||||
<table class="buildList tablesorter">
|
<table class="buildList tablesorter[% IF !showSchedulingInfo %] queue[% END %]">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
[% IF !hideResultInfo %]
|
[% IF !hideResultInfo %]
|
||||||
|
@ -69,6 +69,7 @@
|
||||||
[% END %]
|
[% END %]
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
[% IF showSchedulingInfo %]
|
[% IF showSchedulingInfo %]
|
||||||
|
<th></th>
|
||||||
<th>P</th>
|
<th>P</th>
|
||||||
[% END %]
|
[% END %]
|
||||||
<th>Job</th>
|
<th>Job</th>
|
||||||
|
@ -104,6 +105,7 @@
|
||||||
[% END %]
|
[% END %]
|
||||||
<td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td>
|
<td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td>
|
||||||
[% IF showSchedulingInfo %]
|
[% IF showSchedulingInfo %]
|
||||||
|
<td>[% IF build.get_column('busy') %]<img src="/static/images/running.gif" alt="Running" />[% ELSIF build.get_column('disabled') == 1 || build.get_column('enabled') == 0 %]Disabled[% END %]</td>
|
||||||
<td>[% build.get_column('priority') %]</td>
|
<td>[% build.get_column('priority') %]</td>
|
||||||
[% END %]
|
[% END %]
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -106,7 +106,7 @@
|
||||||
|
|
||||||
[% IF !edit && activeJobsStatus -%]
|
[% IF !edit && activeJobsStatus -%]
|
||||||
<h2>Status</h2>
|
<h2>Status</h2>
|
||||||
<table class="activeJobsStatus">
|
<table>
|
||||||
<thead><tr><th>Job</th>[% FOREACH s IN systems %]<th>[% s.system %]</th>[% END %]</tr></thead>
|
<thead><tr><th>Job</th>[% FOREACH s IN systems %]<th>[% s.system %]</th>[% END %]</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
[% odd = 0 %]
|
[% odd = 0 %]
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
[% FOREACH s IN systems %]
|
[% FOREACH s IN systems %]
|
||||||
[% system = s.system %]
|
[% system = s.system %]
|
||||||
[% systemStatus = j.get_column(system) %]
|
[% systemStatus = j.get_column(system) %]
|
||||||
<td>
|
<td class="centered">
|
||||||
[% IF systemStatus != undef %]
|
[% IF systemStatus != undef %]
|
||||||
<a href="[% c.uri_for('/build' j.get_column(system _ '-build') ) %]">
|
<a href="[% c.uri_for('/build' j.get_column(system _ '-build') ) %]">
|
||||||
[% IF systemStatus == 0 %]
|
[% IF systemStatus == 0 %]
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
nrProducts = 0; FOREACH product IN build.buildproducts; nrProducts = nrProducts + 1; END
|
nrProducts = 0; FOREACH product IN build.buildproducts; nrProducts = nrProducts + 1; END
|
||||||
%]
|
%]
|
||||||
|
|
||||||
<ul class="productList">
|
<table class="productList layoutTable">
|
||||||
|
|
||||||
[% FOREACH product IN build.buildproducts -%]
|
[% FOREACH product IN build.buildproducts -%]
|
||||||
|
|
||||||
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
[% CASE "nix-build" %]
|
[% CASE "nix-build" %]
|
||||||
|
|
||||||
<li class="product">
|
<tr class="product">
|
||||||
|
<td>
|
||||||
[% uri = c.uri_for('/build' build.id 'nix' 'pkg' "${build.nixname}-${build.system}.nixpkg") %]
|
[% uri = c.uri_for('/build' build.id 'nix' 'pkg' "${build.nixname}-${build.system}.nixpkg") %]
|
||||||
<a href="[% uri %]">
|
<a href="[% uri %]">
|
||||||
<img src="/static/images/nix-build.png" alt="Source" />
|
<img src="/static/images/nix-build.png" alt="Source" />
|
||||||
|
@ -45,9 +46,11 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</li>
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<li class="product">
|
<tr class="product">
|
||||||
|
<td>
|
||||||
|
|
||||||
[% filename = "${build.nixname}.closure.gz" %]
|
[% filename = "${build.nixname}.closure.gz" %]
|
||||||
[% uri = c.uri_for('/build' build.id 'nix' 'closure' filename ) %]
|
[% uri = c.uri_for('/build' build.id 'nix' 'closure' filename ) %]
|
||||||
|
@ -82,12 +85,14 @@
|
||||||
command as <tt>root</tt>.</p>
|
command as <tt>root</tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</li>
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
[% CASE "file" %]
|
[% CASE "file" %]
|
||||||
|
|
||||||
<li class="product">
|
<tr class="product">
|
||||||
|
<td>
|
||||||
<a href="[% uri %]">
|
<a href="[% uri %]">
|
||||||
[% SWITCH product.subtype %]
|
[% SWITCH product.subtype %]
|
||||||
[% CASE "source-dist" %]
|
[% CASE "source-dist" %]
|
||||||
|
@ -134,11 +139,14 @@
|
||||||
<tr><th>Full path:</th><td><tt>[% product.path %]</tt></td></tr>
|
<tr><th>Full path:</th><td><tt>[% product.path %]</tt></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
[% CASE "report" %]
|
[% CASE "report" %]
|
||||||
|
|
||||||
<li class="product">
|
<tr class="product">
|
||||||
|
<td>
|
||||||
<a href="[% uri %]">
|
<a href="[% uri %]">
|
||||||
<img src="/static/images/report.png" alt="Report" />
|
<img src="/static/images/report.png" alt="Report" />
|
||||||
[% SWITCH product.subtype %]
|
[% SWITCH product.subtype %]
|
||||||
|
@ -148,11 +156,13 @@
|
||||||
Report of type <tt>[% product.subtype %]</tt>
|
Report of type <tt>[% product.subtype %]</tt>
|
||||||
[% END %]
|
[% END %]
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
[% CASE ["doc", "doc-pdf"] %]
|
[% CASE ["doc", "doc-pdf"] %]
|
||||||
|
|
||||||
<li class="product">
|
<tr class="product">
|
||||||
|
<td>
|
||||||
<a href="[% uri %]">
|
<a href="[% uri %]">
|
||||||
[% IF product.type == "doc-pdf" %]
|
[% IF product.type == "doc-pdf" %]
|
||||||
<img src="/static/images/pdf.png" alt="PDF document" />
|
<img src="/static/images/pdf.png" alt="PDF document" />
|
||||||
|
@ -170,19 +180,22 @@
|
||||||
Documentation of type <tt>[% product.subtype %]</tt>
|
Documentation of type <tt>[% product.subtype %]</tt>
|
||||||
[% END %]
|
[% END %]
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
[% CASE DEFAULT %]
|
[% CASE DEFAULT %]
|
||||||
|
|
||||||
<li class="product">
|
<tr class="product">
|
||||||
|
<td>
|
||||||
Something of type <tt>[% product.type %]</tt>
|
Something of type <tt>[% product.type %]</tt>
|
||||||
</li>
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
[% END -%]
|
[% END -%]
|
||||||
|
|
||||||
</ul>
|
</table>
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,6 @@
|
||||||
|
|
||||||
[% ELSE %]
|
[% ELSE %]
|
||||||
|
|
||||||
<p>Note: Builds in <span class="runningBuild">red</span> are
|
|
||||||
currently executing. Builds in <span
|
|
||||||
class="disabledBuild">grey</span> are currently disabled.</p>
|
|
||||||
|
|
||||||
[% INCLUDE renderBuildList builds=queue showSchedulingInfo=1 hideResultInfo=1 %]
|
[% INCLUDE renderBuildList builds=queue showSchedulingInfo=1 hideResultInfo=1 %]
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
|
@ -1,63 +1,137 @@
|
||||||
#generic-tabs li {
|
body {
|
||||||
height : 30px;
|
font-family: sans-serif;
|
||||||
font-size : 90%;
|
background: white;
|
||||||
}
|
margin: 2em 1em 2em 1em;
|
||||||
#generic-tabs {
|
|
||||||
min-height: 30em;
|
|
||||||
}
|
|
||||||
#generic-tabs div {
|
|
||||||
font-size : 90%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#logo img {
|
#logo img {
|
||||||
width: 8em;
|
width: 8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statusTable td, .statusTable th {
|
img {
|
||||||
border-style: none;
|
border-style: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.clickable:hover {
|
a { text-decoration: none;}
|
||||||
background-color: #a0a0f0;
|
a:link { color: #0048b3; }
|
||||||
cursor: pointer;
|
a:visited { color: #002a6a; }
|
||||||
}
|
a.no-hover:hover { background: none; }
|
||||||
|
a:hover, a:visited:hover { text-decoration: underline;}
|
||||||
.layoutTable td, .layoutTable th {
|
|
||||||
border-style: none;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.layoutTable th {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.activeJobsStatus td, .activeJobsStatus th {
|
|
||||||
border-style: 1px dotted #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
.activeJobsStatus tbody tr td {
|
|
||||||
align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.smallLink {
|
a.smallLink {
|
||||||
font-size: 60%;
|
font-size: 60%;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
a#error-link {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table {
|
||||||
|
empty-cells: show;
|
||||||
|
border-spacing: 1px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background-color:#E6EEEE;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter tr:nth-child(even) {
|
||||||
|
background-color: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.clickable:hover {
|
||||||
|
background-color: #E6EEFF;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
td.centered {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.layoutTable td, .layoutTable th {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter thead tr .header {
|
||||||
|
background-image: url(/static/js/tablesorter/themes/blue/bg.gif);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center right;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter thead tr .headerSortUp {
|
||||||
|
background-image: url(/static/js/tablesorter/themes/blue/asc.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter thead tr .headerSortDown {
|
||||||
|
background-image: url(/static/js/tablesorter/themes/blue/desc.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
|
||||||
|
background-color: #D6DDDD;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tablesorter thead tr th {
|
||||||
|
padding-right: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#generic-tabs li {
|
||||||
|
height : 30px;
|
||||||
|
font-size : 90%;
|
||||||
|
}
|
||||||
|
#generic-tabs div {
|
||||||
|
font-size : 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #002a70;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.productList {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.productList li {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.productDetails {
|
||||||
|
display: none;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.runningBuild {
|
||||||
|
color: #ff9900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.disabledBuild {
|
||||||
|
color: #b0b0b0;
|
||||||
|
}
|
||||||
|
|
||||||
.error-msg {
|
.error-msg {
|
||||||
color: red;
|
color: red;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
a#error-link {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error {
|
.error {
|
||||||
color: red;
|
color: red;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-left: 1.5em;
|
||||||
|
margin-right: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
pre.buildlog {
|
pre.buildlog {
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
padding: 0.3em;
|
padding: 0.3em;
|
||||||
|
@ -75,31 +149,6 @@ div.buildlog {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.productList {
|
|
||||||
list-style: none;
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.productList li {
|
|
||||||
margin-top: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.runningBuild {
|
|
||||||
background-color: #ff3030;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.disabledBuild {
|
|
||||||
background-color: #b0b0b0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.productDetails {
|
|
||||||
display: none;
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
margin-left: 3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.template {
|
.template {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -115,46 +164,11 @@ div.help pre {
|
||||||
color: #400000;
|
color: #400000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Sortable tables */
|
|
||||||
|
|
||||||
table.tablesorter {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.tablesorter thead tr .header {
|
|
||||||
background-image: url(/static/js/tablesorter/themes/blue/bg.gif);
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: center right;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.tablesorter thead tr .headerSortUp {
|
|
||||||
background-image: url(/static/js/tablesorter/themes/blue/asc.gif);
|
|
||||||
}
|
|
||||||
|
|
||||||
table.tablesorter thead tr .headerSortDown {
|
|
||||||
background-image: url(/static/js/tablesorter/themes/blue/desc.gif);
|
|
||||||
}
|
|
||||||
|
|
||||||
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
|
|
||||||
background-color: #ffe000;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.tablesorter thead tr th {
|
|
||||||
padding-right: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Overriding tablesorter... */
|
|
||||||
|
|
||||||
th.releaseSetJobName {
|
th.releaseSetJobName {
|
||||||
font-size: 60%;
|
font-size: 60%;
|
||||||
padding: 0 0 0 0;
|
padding: 0 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Editing */
|
|
||||||
|
|
||||||
input.string {
|
input.string {
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
font-size: 100%;
|
font-size: 100%;
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
body {
|
|
||||||
font-family: sans-serif;
|
|
||||||
background: white;
|
|
||||||
margin: 2em 1em 2em 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h2, h3 {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #005aa0;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 180%;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
font-size: 130%;
|
|
||||||
margin-top: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
empty-cells: show;
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.odd {
|
|
||||||
background: #f4f4ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
text-align: center;
|
|
||||||
font-weight: bold;
|
|
||||||
background: #ffffc0;
|
|
||||||
}
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding: 2px 5px;
|
|
||||||
border: solid black 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.centered {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover, a:visited:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:link { color: #0048b3; }
|
|
||||||
a:visited { color: #002a6a; }
|
|
||||||
a.no-hover:hover { background: none; }
|
|
||||||
|
|
||||||
img {
|
|
||||||
border-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
margin-left: 1.5em;
|
|
||||||
margin-right: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre.code {
|
|
||||||
border: 1px solid #6185a0;
|
|
||||||
padding: 6px 6px;
|
|
||||||
color: #600000;
|
|
||||||
background: #f4f4f8;
|
|
||||||
}
|
|
|
@ -7,18 +7,12 @@ body {
|
||||||
div#page {
|
div#page {
|
||||||
max-width: 120em;
|
max-width: 120em;
|
||||||
min-width: 50em;
|
min-width: 50em;
|
||||||
min-height: 30em;
|
|
||||||
margin: 1em auto;
|
margin: 1em auto;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
|
|
||||||
/* Put a rounded border around the page. */
|
/* Put a rounded border around the page. */
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
border-radius: 1em;
|
|
||||||
-moz-border-radius: 1em;
|
|
||||||
-webkit-border-radius: 1em;
|
|
||||||
-moz-box-shadow: #404040 0px 5px 50px;
|
|
||||||
-webkit-box-shadow: #404040 0px 5px 50px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The header. */
|
/* The header. */
|
||||||
|
@ -93,18 +87,16 @@ ul.short-menu li a:hover {
|
||||||
/* The left menu. */
|
/* The left menu. */
|
||||||
div#main {
|
div#main {
|
||||||
position: relative;
|
position: relative;
|
||||||
min-height: 20em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div#content {
|
div#content {
|
||||||
min-height: 20em;
|
min-height: 35em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div#left-bar {
|
div#left-bar {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0em;
|
left: 0em;
|
||||||
width: 8em;
|
width: 8em;
|
||||||
min-height: 20em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div#left-title {
|
div#left-title {
|
||||||
|
|
BIN
src/root/static/images/running.gif
Normal file
BIN
src/root/static/images/running.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
Loading…
Reference in a new issue