+
+
{% if is_busy %}
-
+ {% icon 'refresh' class='svg-icon spin text-info' %}
{% elif new_version %}
-
+ {% icon 'frown-o' class='svg-icon text-warning' %}
{% else %}
-
+ {% icon 'smile-o' class='svg-icon text-body-tertiary' %}
{% endif %}
-
+
{% blocktrans trimmed %}
You are running {{ os_release }} and {{ box_name }} version {{ version }}.
{% endblocktrans %}
@@ -41,7 +41,7 @@
{% else %}
{% blocktrans %}{{ box_name }} is up to date.{% endblocktrans %}
{% endif %}
-
+
{% endblock %}
diff --git a/plinth/templates/first_setup.html b/plinth/templates/first_setup.html
index e2ea9f9e0..2d7045a00 100644
--- a/plinth/templates/first_setup.html
+++ b/plinth/templates/first_setup.html
@@ -6,6 +6,7 @@
{% load bootstrap %}
{% load i18n %}
{% load static %}
+{% load plinth_extras %}
{% block body_class %}
no-brand
@@ -20,7 +21,7 @@ no-brand
{% if is_first_setup_running %}
-
+ {% icon 'refresh' class='svg-icon spin' %}
{% endif %}
diff --git a/plinth/templates/operation-notification.html b/plinth/templates/operation-notification.html
index e524cb0be..753e7f0fd 100644
--- a/plinth/templates/operation-notification.html
+++ b/plinth/templates/operation-notification.html
@@ -10,7 +10,7 @@
{% if data.state == "waiting" %}
{% icon 'clock-o' %}
{% elif data.state == "running" %}
-
+ {% icon 'refresh' class='svg-icon spin' %}
{% elif data.state == "completed" %}
{% endif %}
diff --git a/plinth/templates/operations.html b/plinth/templates/operations.html
index 12529c42c..fc45b307b 100644
--- a/plinth/templates/operations.html
+++ b/plinth/templates/operations.html
@@ -2,9 +2,11 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
{% endcomment %}
+{% load plinth_extras %}
+
{% for operation in operations %}
-
+ {% icon 'refresh' class='svg-icon spin' %}
{{ operation.translated_message }}
{% endfor %}
diff --git a/static/themes/default/css/main.css b/static/themes/default/css/main.css
index 95ecc7ffb..1a804e5d2 100644
--- a/static/themes/default/css/main.css
+++ b/static/themes/default/css/main.css
@@ -364,6 +364,24 @@ footer {
margin: 0.125em 0.25em;
}
+@keyframes spin {
+ 0% {
+ transform: none;
+ }
+ 100% {
+ transform: rotate(1turn);
+ }
+}
+
+.svg-icon.spin {
+ animation: spin 2s infinite linear;
+}
+
+.svg-icon[data-icon-name="spinner"].spin {
+ /* Spin in discrete steps of 8 */
+ animation: spin 1s infinite steps(8);
+}
+
/*
* Bootstrap extensions
*/
@@ -675,11 +693,7 @@ footer {
*/
.firstboot-spinner {
text-align: center;
-}
-
-.firstboot-spinner span.fa {
- float: none;
- margin: auto;
+ font-size: 4em;
}
.next-steps {
@@ -1077,3 +1091,16 @@ textarea.log {
width: 80%;
}
}
+
+/*
+ * Upgrades app pages
+ */
+.upgrades-status-icon,
+.upgrades-dist-upgrade-running-icon {
+ font-size: 3rem;
+}
+
+.upgrades-status-icon svg,
+.upgrades-dist-upgrade-running-icon svg {
+ margin-left: 0;
+}