Update Font Awesome to v5

This commit is contained in:
cuigh 2018-01-26 13:10:38 +08:00
parent ca0789ac4e
commit f08ec4a142
61 changed files with 464 additions and 3463 deletions

View File

@ -2,9 +2,9 @@ FROM golang:alpine AS build
WORKDIR /go/src/github.com/cuigh/swirl/
ADD . .
#RUN dep ensure
RUN go build
RUN CGO_ENABLED=0 go build -ldflags "-s -w"
FROM alpine:3.6
FROM alpine:3.7
MAINTAINER cuigh <noname@live.com>
WORKDIR /app
COPY --from=build /go/src/github.com/cuigh/swirl/swirl .

343
assets/fontawesome/fa-svg-with-js.css vendored Normal file
View File

@ -0,0 +1,343 @@
/*!
* Font Awesome Free 5.0.4 by @fontawesome - http://fontawesome.com
* License - http://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/
svg:not(:root).svg-inline--fa {
overflow: visible; }
.svg-inline--fa {
display: inline-block;
font-size: inherit;
height: 1em;
overflow: visible;
vertical-align: -.125em; }
.svg-inline--fa.fa-lg {
vertical-align: -.225em; }
.svg-inline--fa.fa-w-1 {
width: 0.0625em; }
.svg-inline--fa.fa-w-2 {
width: 0.125em; }
.svg-inline--fa.fa-w-3 {
width: 0.1875em; }
.svg-inline--fa.fa-w-4 {
width: 0.25em; }
.svg-inline--fa.fa-w-5 {
width: 0.3125em; }
.svg-inline--fa.fa-w-6 {
width: 0.375em; }
.svg-inline--fa.fa-w-7 {
width: 0.4375em; }
.svg-inline--fa.fa-w-8 {
width: 0.5em; }
.svg-inline--fa.fa-w-9 {
width: 0.5625em; }
.svg-inline--fa.fa-w-10 {
width: 0.625em; }
.svg-inline--fa.fa-w-11 {
width: 0.6875em; }
.svg-inline--fa.fa-w-12 {
width: 0.75em; }
.svg-inline--fa.fa-w-13 {
width: 0.8125em; }
.svg-inline--fa.fa-w-14 {
width: 0.875em; }
.svg-inline--fa.fa-w-15 {
width: 0.9375em; }
.svg-inline--fa.fa-w-16 {
width: 1em; }
.svg-inline--fa.fa-w-17 {
width: 1.0625em; }
.svg-inline--fa.fa-w-18 {
width: 1.125em; }
.svg-inline--fa.fa-w-19 {
width: 1.1875em; }
.svg-inline--fa.fa-w-20 {
width: 1.25em; }
.svg-inline--fa.fa-pull-left {
margin-right: .3em;
width: auto; }
.svg-inline--fa.fa-pull-right {
margin-left: .3em;
width: auto; }
.svg-inline--fa.fa-border {
height: 1.5em; }
.svg-inline--fa.fa-li {
width: 2em; }
.svg-inline--fa.fa-fw {
width: 1.25em; }
.fa-layers svg.svg-inline--fa {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0; }
.fa-layers {
display: inline-block;
height: 1em;
position: relative;
text-align: center;
vertical-align: -.125em;
width: 1em; }
.fa-layers svg.svg-inline--fa {
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers-text {
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-counter {
background-color: #ff253a;
border-radius: 1em;
color: #fff;
height: 1.5em;
line-height: 1;
max-width: 5em;
min-width: 1.5em;
overflow: hidden;
padding: .25em;
right: 0;
text-overflow: ellipsis;
top: 0;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-bottom-right {
bottom: 0;
right: 0;
top: auto;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: bottom right;
transform-origin: bottom right; }
.fa-layers-bottom-left {
bottom: 0;
left: 0;
right: auto;
top: auto;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: bottom left;
transform-origin: bottom left; }
.fa-layers-top-right {
right: 0;
top: 0;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-top-left {
left: 0;
right: auto;
top: 0;
-webkit-transform: scale(0.25);
transform: scale(0.25);
-webkit-transform-origin: top left;
transform-origin: top left; }
.fa-lg {
font-size: 1.33333em;
line-height: 0.75em;
vertical-align: -.0667em; }
.fa-xs {
font-size: .75em; }
.fa-sm {
font-size: .875em; }
.fa-1x {
font-size: 1em; }
.fa-2x {
font-size: 2em; }
.fa-3x {
font-size: 3em; }
.fa-4x {
font-size: 4em; }
.fa-5x {
font-size: 5em; }
.fa-6x {
font-size: 6em; }
.fa-7x {
font-size: 7em; }
.fa-8x {
font-size: 8em; }
.fa-9x {
font-size: 9em; }
.fa-10x {
font-size: 10em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: 2.5em;
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: -2em;
position: absolute;
text-align: center;
width: 2em;
line-height: inherit; }
.fa-border {
border: solid 0.08em #eee;
border-radius: .1em;
padding: .2em .25em .15em; }
.fa-pull-left {
float: left; }
.fa-pull-right {
float: right; }
.fa.fa-pull-left,
.fas.fa-pull-left,
.far.fa-pull-left,
.fal.fa-pull-left,
.fab.fa-pull-left {
margin-right: .3em; }
.fa.fa-pull-right,
.fas.fa-pull-right,
.far.fa-pull-right,
.fal.fa-pull-right,
.fab.fa-pull-right {
margin-left: .3em; }
.fa-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear; }
.fa-pulse {
-webkit-animation: fa-spin 1s infinite steps(8);
animation: fa-spin 1s infinite steps(8); }
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
.fa-rotate-90 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
.fa-rotate-180 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
.fa-rotate-270 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
.fa-flip-horizontal {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
.fa-flip-horizontal.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(-1, -1);
transform: scale(-1, -1); }
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
-webkit-filter: none;
filter: none; }
.fa-stack {
display: inline-block;
height: 2em;
position: relative;
width: 2em; }
.fa-stack-1x,
.fa-stack-2x {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0; }
.svg-inline--fa.fa-stack-1x {
height: 1em;
width: 1em; }
.svg-inline--fa.fa-stack-2x {
height: 2em;
width: 2em; }
.fa-inverse {
color: #fff; }
.sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px; }
.sr-only-focusable:active, .sr-only-focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto; }

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Binary file not shown.

View File

@ -17,13 +17,10 @@ body {
overflow-x: hidden;
}
.icon.is-huge {
height: 4rem;
width: 4rem;
}
.icon.is-huge .fa {
font-size: 70px;
.icon.infobox {
margin-left: 1em;
/*height: 4rem;*/
/*width: 4rem;*/
}
.notification.is-top {

View File

@ -1044,7 +1044,7 @@ var Swirl;
<td><input name="${this.name}s[${this.index}].value" class="input is-small" type="text"></td>
<td>
<a class="button is-small is-danger is-outlined" data-action="delete-${this.alias}">
<span class="icon is-small"><i class="fa fa-trash"></i></span>
<span class="icon is-small"><i class="fas fa-trash"></i></span>
</a>
</td>
</tr>`;
@ -1639,7 +1639,7 @@ var Swirl;
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-mount">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -1672,7 +1672,7 @@ var Swirl;
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-endpoint-port">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -1699,7 +1699,7 @@ var Swirl;
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-constraint">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -1715,7 +1715,7 @@ var Swirl;
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-preference">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -1741,7 +1741,7 @@ var Swirl;
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-${this.name}">
<span class="icon is-small">
<i class="fa fa-remove"></i>
<i class="fas fa-times"></i>
</span>
</a>
</td>

File diff suppressed because one or more lines are too long

View File

@ -108,7 +108,7 @@ namespace Swirl.Core {
<td><input name="${this.name}s[${this.index}].value" class="input is-small" type="text"></td>
<td>
<a class="button is-small is-danger is-outlined" data-action="delete-${this.alias}">
<span class="icon is-small"><i class="fa fa-trash"></i></span>
<span class="icon is-small"><i class="fas fa-trash"></i></span>
</a>
</td>
</tr>`;

View File

@ -63,7 +63,7 @@ namespace Swirl.Service {
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-mount">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -97,7 +97,7 @@ namespace Swirl.Service {
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-endpoint-port">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -125,7 +125,7 @@ namespace Swirl.Service {
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-constraint">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -142,7 +142,7 @@ namespace Swirl.Service {
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-preference">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -176,7 +176,7 @@ namespace Swirl.Service {
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-${this.name}">
<span class="icon is-small">
<i class="fa fa-remove"></i>
<i class="fas fa-times"></i>
</span>
</a>
</td>

View File

@ -25,7 +25,7 @@ func main() {
misc.BindOptions()
app.Name = "Swirl"
app.Version = "0.6.6"
app.Version = "0.6.7"
app.Desc = "A web management UI for Docker, focused on swarm cluster"
app.Action = func(ctx *app.Context) {
misc.LoadOptions()

View File

@ -6,7 +6,7 @@
<meta name="keywords" content="swirl,docker,moby,swarm,docker-compose,docker-ui,docker-web-management">
<meta name="description" content="{{ i18n("description") }}">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="/assets/lyicon/css/lyicon.css">
<link rel="stylesheet" href="/assets/fontawesome/fa-svg-with-js.css?v=5.0.4">
<link rel="stylesheet" href="/assets/bulma/bulma.css?v=0.6.1">
<link rel="stylesheet" href="/assets/swirl/css/swirl.css?v={{ version }}">
{{ block style() }}{{end}}
@ -69,7 +69,7 @@
<span>{{.ContextUser.Name()}}</span>
</div>
<div class="navbar-item has-dropdown is-hoverable is-narrow">
<div class="navbar-link is-narrow"><span class="icon"><i class="fa fa-user"></i></span></div>
<div class="navbar-link is-narrow"><span class="icon"><i class="fas fa-user"></i></span></div>
<div class="navbar-dropdown is-right">
<a class="navbar-item" href="/profile/">{{ i18n("menu.profile") }}</a>
<a class="navbar-item" href="/profile/password">{{ i18n("menu.password") }}</a>
@ -80,7 +80,7 @@
<p class="control">
<a class="button is-outlined tooltip is-tooltip-bottom" href="/logout" data-tooltip="{{ i18n("button.logout") }}">
<span class="icon">
<i class="fa fa-sign-out"></i>
<i class="fas fa-sign-out-alt"></i>
</span>
</a>
</p>
@ -99,6 +99,7 @@
</div>
</div>
</footer>
<script src="/assets/fontawesome/fontawesome-all.min.js?v=5.0.4"></script>
<script src="/assets/jquery/jquery-3.2.1.min.js"></script>
<script src="/assets/swirl/js/swirl.js?v={{ version }}"></script>
{{ block script() }}{{end}}

View File

@ -6,12 +6,13 @@
<meta name="keywords" content="swirl,docker,moby,swarm,docker-compose,docker-ui,docker-web-management">
<meta name="description" content="{{ i18n("description") }}">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="/assets/lyicon/css/lyicon.css">
<link rel="stylesheet" href="/assets/fontawesome/fa-svg-with-js.css?v=5.0.4">
<link rel="stylesheet" href="/assets/bulma/bulma.css?v=0.6.1">
<link rel="stylesheet" href="/assets/swirl/css/swirl.css?v={{ version }}">
</head>
<body>
{{ yield body() }}
<script src="/assets/fontawesome/fontawesome-all.min.js?v=5.0.4"></script>
<script src="/assets/jquery/jquery-3.2.1.min.js"></script>
<script src="/assets/swirl/js/swirl.js?v={{ version }}"></script>
</body>

View File

@ -44,7 +44,7 @@
<th width="48">
<a class="button is-small is-success is-outlined" data-action="add-{{n}}">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -64,7 +64,7 @@
<td>
<a class="button is-small is-danger is-outlined" data-action="delete-{{n}}">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -86,7 +86,7 @@
<th width="48">
<a class="button is-small is-success is-outlined" data-action="add-{{n}}">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -105,7 +105,7 @@
<td>
<a class="button is-small is-danger is-outlined" data-action="delete-{{n}}">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>

View File

@ -125,7 +125,7 @@
<th width="50">
<a class="button is-small is-outlined is-success" data-action="add-endpoint-port">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -157,7 +157,7 @@
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-endpoint-port">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -179,7 +179,7 @@
<th width="50">
<a class="button is-small is-outlined is-success" data-action="add-mount">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -218,7 +218,7 @@
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-mount">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -241,7 +241,7 @@
<th width="50">
<a class="button is-small is-outlined is-success" data-action="add-secret">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -258,7 +258,7 @@
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-secret">
<span class="icon is-small">
<i class="fa fa-remove"></i>
<i class="fas fa-times"></i>
</span>
</a>
</td>
@ -281,7 +281,7 @@
<th width="50">
<a class="button is-small is-outlined is-success" data-action="add-config">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -298,7 +298,7 @@
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-config">
<span class="icon is-small">
<i class="fa fa-remove"></i>
<i class="fas fa-times"></i>
</span>
</a>
</td>
@ -360,7 +360,7 @@
<th width="50">
<a class="button is-small is-outlined is-success" data-action="add-constraint">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -383,7 +383,7 @@
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-constraint">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -401,7 +401,7 @@
<th width="50">
<a class="button is-small is-outlined is-success" data-action="add-preference">
<span class="icon is-small">
<i class="fa fa-plus"></i>
<i class="fas fa-plus"></i>
</span>
</a>
</th>
@ -416,7 +416,7 @@
<td>
<a class="button is-small is-outlined is-danger" data-action="delete-preference">
<span class="icon is-small">
<i class="fa fa-trash"></i>
<i class="fas fa-trash"></i>
</span>
</a>
</td>
@ -564,7 +564,7 @@
<p class="control has-icons-left">
<input class="input is-small" type="text" placeholder="Searching is not implemented...">
<span class="icon is-small is-left">
<i class="fa fa-search"></i>
<i class="fas fa-search"></i>
</span>
</p>
</div>

View File

@ -40,10 +40,10 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fa fa-remove"></i></span><span>{{ i18n("button.delete") }}</span></button>
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fas fa-times"></i></span><span>{{ i18n("button.delete") }}</span></button>
</p>
<p class="level-item">
<a href="new" class="button is-success"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a href="new" class="button is-success"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>

View File

@ -60,7 +60,7 @@
</div>
{{ yield tags(title="Labels", tags=.Container.Config.Labels) }}
<a href="/container/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -54,7 +54,7 @@
{{end}}
</p>
<p class="level-item">
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fa fa-remove"></i></span><span>{{ i18n("button.delete") }}</span></button>
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fas fa-times"></i></span><span>{{ i18n("button.delete") }}</span></button>
</p>
</div>
</nav>

View File

@ -95,7 +95,7 @@
</div>
</div>
<a href="/service/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -51,7 +51,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/container/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -97,7 +97,7 @@
{{end}}
<a href="/image/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -41,7 +41,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fa fa-remove"></i></span><span>{{ i18n("button.delete") }}</span></button>
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fas fa-times"></i></span><span>{{ i18n("button.delete") }}</span></button>
</p>
</div>
</nav>

View File

@ -54,7 +54,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/image/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -6,7 +6,7 @@
<nav class="level is-mobile">
<div class="level-left">
<div class="level-item has-text-centered">
<span class="icon is-huge"><i class="fa fa-{{icon}}"></i></span>
<span class="icon infobox"><i class="fas fa-{{icon}} fa-4x"></i></span>
</div>
</div>
<div class="level-right">
@ -38,13 +38,13 @@
<p>
<a id="btn-add" class="button is-primary" href="https://github.com/cuigh/swirl" target="_blank">
<span class="icon">
<i class="fa fa-github"></i>
<i class="fab fa-github"></i>
</span>
<span>GitHub</span>
</a>
{*<a id="btn-add" class="button is-success" href="https://cuigh.tech/swirl" target="_blank">*}
{*<span class="icon">*}
{*<i class="fa fa-book"></i>*}
{*<i class="fas fa-book"></i>*}
{*</span>*}
{*<span>Document</span>*}
{*</a>*}
@ -60,7 +60,7 @@
<div class="columns">
{{yield infobox(style="success", icon="cubes", text=i18n("dashboard.node"), url="/node/", count=.NodeCount)}}
{{yield infobox(style="info", icon="globe", text=i18n("dashboard.network"), url="/network/", count=.NetworkCount)}}
{{yield infobox(style="danger", icon="ticket", text=i18n("dashboard.service"), url="/service/", count=.ServiceCount)}}
{{yield infobox(style="danger", icon="ticket-alt", text=i18n("dashboard.service"), url="/service/", count=.ServiceCount)}}
{{yield infobox(style="primary", icon="server", text=i18n("dashboard.stack"), url="/stack/task/", count=.StackCount)}}
</div>
<hr>

View File

@ -14,7 +14,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</a>
</div>
@ -29,7 +29,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
<i class="fas fa-lock"></i>
</span>
</a>
</div>
@ -47,7 +47,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</a>
</div>
@ -62,7 +62,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-envelope"></i>
<i class="fas fa-envelope"></i>
</span>
</a>
</div>

View File

@ -13,7 +13,7 @@
<p class="control has-icons-left">
<input name="name" class="input" type="text" placeholder="" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</p>
</div>
@ -22,7 +22,7 @@
<p class="control has-icons-left">
<input name="password" class="input" type="password" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
<i class="fas fa-lock"></i>
</span>
</p>
</div>

View File

@ -102,7 +102,7 @@
{{end}}
<a href="/network/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -27,7 +27,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<a href="new" class="button is-success"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a href="new" class="button is-success"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>

View File

@ -50,7 +50,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/network/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -126,7 +126,7 @@
{{end}}
<a href="/node/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -44,7 +44,7 @@
{{range .Nodes}}
<tr>
<td><a href="{{.ID}}/detail">{{.Name}}</a></td>
<td>{{.Role}}{{ if .Role == "manager" && .Leader }}<span class="icon has-text-danger tooltip" data-tooltip="Leader"><i class="fa fa-flag"></i></span>{{ end }}</td>
<td>{{.Role}}{{ if .Role == "manager" && .Leader }}<span class="icon has-text-danger tooltip" data-tooltip="Leader"><i class="fas fa-flag"></i></span>{{ end }}</td>
<td>{{.Version}}</td>
<td>{{.CPU}}</td>
<td>{{printf("%.2f", .Memory)}} GB</td>

View File

@ -53,7 +53,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/node/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -35,7 +35,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</a>
</div>
@ -50,7 +50,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-envelope"></i>
<i class="fas fa-envelope"></i>
</span>
</a>
</div>

View File

@ -35,7 +35,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
<i class="fas fa-lock"></i>
</span>
</a>
</div>
@ -50,7 +50,7 @@
<div class="control">
<a class="button is-static">
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
<i class="fas fa-lock"></i>
</span>
</a>
</div>

View File

@ -26,7 +26,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<button id="btn-new" class="button is-success modal-trigger" data-target="dlg-add"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></button>
<button id="btn-new" class="button is-success modal-trigger" data-target="dlg-add"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></button>
</p>
</div>
</nav>
@ -90,7 +90,7 @@
<div class="field">
<label class="label">{{ i18n("field.password") }}</label>
<div class="control">
<input name="password" class="input" type="password" placeholder="Login password" data-v-rule="native" required>
<input name="password" class="input" type="password" autocomplete="new-password" placeholder="Login password" data-v-rule="native" required>
</div>
</div>
</section>

View File

@ -40,10 +40,10 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fa fa-remove"></i></span><span>{{ i18n("button.delete") }}</span></button>
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fas fa-times"></i></span><span>{{ i18n("button.delete") }}</span></button>
</p>
<p class="level-item">
<a href="new" class="button is-success"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a href="new" class="button is-success"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>

View File

@ -480,7 +480,7 @@
{{end}}
<a href="/service/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -32,7 +32,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<a class="button is-success" href="new"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a class="button is-success" href="new"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>
@ -58,23 +58,23 @@
<span class="tag is-{{.Actives == 0 ? "danger" : (.Actives < .Replicas ? "warning" : "success")}}">{{.Actives}}/{{.Replicas}}</span>
</div>
</td>
<td>{{time(.UpdatedAt)}}{{ if .UpdateStatus }}<span class="icon {{ if .UpdateStatus == "completed" }}has-text-success{{ else if .UpdateStatus == "updating" }}has-text-warning{{ else }}has-text-danger{{ end }} tooltip" data-tooltip="{{.UpdateStatus}}"><i class="fa fa-circle"></i></span>{{ end }}</td>
<td>{{time(.UpdatedAt)}}{{ if .UpdateStatus }}<span class="icon {{ if .UpdateStatus == "completed" }}has-text-success{{ else if .UpdateStatus == "updating" }}has-text-warning{{ else }}has-text-danger{{ end }} tooltip" data-tooltip="{{.UpdateStatus}}"><i class="fas fa-circle"></i></span>{{ end }}</td>
<td>
<a href="{{.Name}}/edit" class="button is-small is-dark is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("button.edit") }}">
<span class="icon"><i class="fa fa-edit"></i></span>
<span class="icon"><i class="fas fa-edit"></i></span>
</a>
{{if .Mode == "replicated"}}
<button type="button" class="button is-small is-info is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("button.scale") }}" data-action="scale-service" data-replicas="{{.Replicas}}">
<span class="icon"><i class="fa fa-arrows"></i></span>
<span class="icon"><i class="fas fa-arrows-alt"></i></span>
</button>
{{end}}
{{if .Rollback }}
<button type="button" class="button is-small is-info is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("button.rollback") }}" data-action="rollback-service">
<span class="icon"><i class="fa fa-history"></i></span>
<span class="icon"><i class="fas fa-history"></i></span>
</button>
{{end}}
<button class="button is-small is-danger is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("button.delete") }}" data-action="delete-service">
<span class="icon"><i class="fa fa-remove"></i></span>
<span class="icon"><i class="fas fa-times"></i></span>
</button>
</td>
</tr>

View File

@ -88,7 +88,7 @@
</div>
</div>
<a href="/service/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -58,7 +58,7 @@
<div class="field">
<label class="label" style="display: inline-block">{{ i18n("field.user") }}</label>
<button type="button" class="button is-small is-success is-outlined tooltip is-tooltip-bottom modal-trigger" data-tooltip="{{ i18n("button.add") }}" data-action="add-user" data-target="dlg-add-user">
<span class="icon"><i class="fa fa-plus"></i></span>
<span class="icon"><i class="fas fa-plus"></i></span>
</button>
<div id="div-users" class="field is-grouped is-grouped-multiline">
{{range .Users}}
@ -89,7 +89,7 @@
<p class="control has-icons-left">
<input id="txt-query" class="input is-small" type="text" placeholder="Searching user...">
<span class="icon is-small is-left">
<i class="fa fa-search"></i>
<i class="fas fa-search"></i>
</span>
</p>
</div>

View File

@ -48,7 +48,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/service/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -32,7 +32,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<a class="button is-success" href="new"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a class="button is-success" href="new"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>
@ -53,13 +53,13 @@
<td>{{time(.UpdatedAt)}}</td>
<td>
<a href="/service/new?template={{.ID}}" class="button is-small is-success is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("service.template.button.create") }}">
<span class="icon"><i class="fa fa-plus"></i></span>
<span class="icon"><i class="fas fa-plus"></i></span>
</a>
<a href="{{.ID}}/edit" class="button is-small is-dark is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("button.edit") }}">
<span class="icon"><i class="fa fa-edit"></i></span>
<span class="icon"><i class="fas fa-edit"></i></span>
</a>
<button class="button is-small is-danger is-outlined tooltip is-tooltip-bottom" data-tooltip="{{ i18n("button.delete") }}" data-action="delete-template">
<span class="icon"><i class="fa fa-remove"></i></span>
<span class="icon"><i class="fas fa-times"></i></span>
</button>
</td>
</tr>

View File

@ -72,7 +72,7 @@
<dd class="content"><pre class="is-paddingless"><code class="yaml">{{ .Archive.Content }}</code></pre></dd>
</dl>
<a href="/stack/archive/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -91,7 +91,7 @@
<input id="file-content" name="content" class="file-input" type="file" data-v-rule="content" data-v-arg-content="upload" required>
<span class="file-cta">
<span class="file-icon">
<i class="fa fa-upload"></i>
<i class="fas fa-upload"></i>
</span>
<span class="file-label">Choose a file</span>
</span>

View File

@ -54,7 +54,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<a href="new" class="button is-success"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a href="new" class="button is-success"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>

View File

@ -63,7 +63,7 @@
<input id="file-content" name="content" class="file-input" type="file" data-v-rule="content" data-v-arg-content="upload" required>
<span class="file-cta">
<span class="file-icon">
<i class="fa fa-upload"></i>
<i class="fas fa-upload"></i>
</span>
<span class="file-label">Choose a file</span>
</span>

View File

@ -58,7 +58,7 @@
</dd>
</dl>
<a href="/system/role/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -19,7 +19,7 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<a href="new" class="button is-success"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a href="new" class="button is-success"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>

View File

@ -57,7 +57,7 @@
</select>
</div>
<div class="icon is-left">
<i class="fa fa-globe"></i>
<i class="fas fa-globe"></i>
</div>
</div>
</div>
@ -76,7 +76,7 @@
</select>
</div>
<div class="icon is-left">
<i class="fa fa-language"></i>
<i class="fas fa-language"></i>
</div>
</div>
</div>

View File

@ -62,7 +62,7 @@
{{end}}
</dl>
<a href="/system/user/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -42,7 +42,7 @@
<div class="control has-icons-left">
<input name="name" value="{{ .User.Name }}" class="input" placeholder="Name" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</div>
</div>
@ -53,7 +53,7 @@
<div class="control has-icons-left">
<input name="email" value="{{ .User.Email }}" class="input" placeholder="Email" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-envelope"></i>
<i class="fas fa-envelope"></i>
</span>
</div>
</div>

View File

@ -60,7 +60,7 @@
<a href="?filter=blocked">Blocked</a>
{{end}}
<p class="level-item">
<a href="new" class="button is-success"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a href="new" class="button is-success"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>
@ -80,7 +80,7 @@
<tbody>
{{range .Users}}
<tr data-id="{{.ID}}">
<td><a href="{{.LoginName}}/detail">{{.Name}}</a>{{ if .Admin }}<span class="icon has-text-danger tooltip" data-tooltip="Administrator"><i class="fa fa-flag"></i></span>{{ end }}</td>
<td><a href="{{.LoginName}}/detail">{{.Name}}</a>{{ if .Admin }}<span class="icon has-text-danger tooltip" data-tooltip="Administrator"><i class="fas fa-flag"></i></span>{{ end }}</td>
<td>{{.LoginName}}</td>
<td>{{.Email}}</td>
<td>{{.Type}}</td>

View File

@ -14,7 +14,7 @@
<div class="control has-icons-left">
<input name="name" class="input" placeholder="Name" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</div>
</div>
@ -23,7 +23,7 @@
<div class="control has-icons-left">
<input name="login_name" class="input" placeholder="Login name" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-user"></i>
<i class="fas fa-user"></i>
</span>
</div>
</div>
@ -32,7 +32,7 @@
<div class="control has-icons-left">
<input name="email" class="input" placeholder="Email" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-envelope"></i>
<i class="fas fa-envelope"></i>
</span>
</div>
</div>
@ -43,7 +43,7 @@
<div class="control has-icons-left">
<input id="txt-password" name="password" type="password" class="input" placeholder="Password" data-v-rule="native" required>
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
<i class="fas fa-lock"></i>
</span>
</div>
</div>
@ -52,7 +52,7 @@
<div class="control has-icons-left">
<input type="password" class="input" placeholder="Password confirmation" data-v-rule="match" data-v-arg-match="txt-password">
<span class="icon is-small is-left">
<i class="fa fa-lock"></i>
<i class="fas fa-lock"></i>
</span>
</div>
</div>

View File

@ -90,7 +90,7 @@
</div>
{{ end }}
<a href="/task/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -42,7 +42,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/task/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -54,7 +54,7 @@
{{ yield tags(title="Options", tags=.Volume.Options) }}
{{ yield tags(title="Labels", tags=.Volume.Labels) }}
<a href="/volume/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>

View File

@ -40,13 +40,13 @@
<!-- Right side -->
<div class="level-right">
<p class="level-item">
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fa fa-remove"></i></span><span>{{ i18n("button.delete") }}</span></button>
<button id="btn-delete" class="button is-danger"><span class="icon"><i class="fas fa-times"></i></span><span>{{ i18n("button.delete") }}</span></button>
</p>
<p class="level-item">
<button id="btn-prune" class="button is-warning"><span class="icon"><i class="fa fa-times-circle"></i></span><span>{{ i18n("button.prune") }}</span></button>
<button id="btn-prune" class="button is-warning"><span class="icon"><i class="fas fa-times-circle"></i></span><span>{{ i18n("button.prune") }}</span></button>
</p>
<p class="level-item">
<a class="button is-success" href="new"><span class="icon"><i class="fa fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
<a class="button is-success" href="new"><span class="icon"><i class="fas fa-plus"></i></span><span>{{ i18n("button.new") }}</span></a>
</p>
</div>
</nav>

View File

@ -49,7 +49,7 @@
<pre class="is-paddingless"><code class="json">{{ .Raw }}</code></pre>
</div>
<a href="/volume/" class="button is-primary">
<span class="icon"><i class="fa fa-reply"></i></span>
<span class="icon"><i class="fas fa-reply"></i></span>
<span>{{ i18n("button.return") }}</span>
</a>
</div>