From 542f4737998a3f5f16a8d582c9ede412f9cf99ec Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Thu, 17 Nov 2022 08:30:02 +0000 Subject: [PATCH] Unify loading animations across the system, fixes #930 Closes #930 Merge request studip/studip!546 --- app/views/messages/overview.php | 2 +- public/assets/images/loading-indicator.svg | 21 +++++++++++++++++++ .../javascripts/bootstrap/application.js | 3 --- .../assets/javascripts/bootstrap/files.js | 2 +- .../assets/javascripts/bootstrap/members.js | 2 +- .../javascripts/bootstrap/statusgroups.js | 2 +- .../javascripts/bootstrap/subcourses.js | 2 +- resources/assets/javascripts/lib/admission.js | 2 +- .../assets/javascripts/lib/course_wizard.js | 6 +++--- .../assets/javascripts/lib/fullcalendar.js | 2 +- resources/assets/javascripts/lib/resources.js | 2 +- .../assets/javascripts/lib/smiley_picker.js | 2 +- .../assets/javascripts/mvv_course_wizard.js | 6 +++--- resources/assets/stylesheets/scss/admin.scss | 2 +- resources/assets/stylesheets/scss/ajax.scss | 4 ++-- .../assets/stylesheets/scss/globalsearch.scss | 2 +- .../assets/stylesheets/scss/installer.scss | 2 +- .../stylesheets/scss/progress_indicator.scss | 4 ++-- resources/assets/stylesheets/scss/search.scss | 2 +- .../assets/stylesheets/scss/smileys.scss | 2 +- .../stylesheets/scss/studip-overlay.scss | 8 ++----- .../vue/components/BlubberGlobalstream.vue | 4 ++-- resources/vue/components/BlubberThread.vue | 4 ++-- .../vue/components/BlubberThreadWidget.vue | 2 +- .../components/StudipProgressIndicator.vue | 17 ++++++++------- 25 files changed, 62 insertions(+), 45 deletions(-) create mode 100644 public/assets/images/loading-indicator.svg diff --git a/app/views/messages/overview.php b/app/views/messages/overview.php index 6ece39466b7..6e39e0d9a20 100644 --- a/app/views/messages/overview.php +++ b/app/views/messages/overview.php @@ -81,7 +81,7 @@ </tr> <? endif ?> <tr id="reloader" class="more"> - <td colspan="7"><?= Assets::img("ajax_indicator_small.gif") ?></td> + <td colspan="7"></td> </tr> </tbody> </table> diff --git a/public/assets/images/loading-indicator.svg b/public/assets/images/loading-indicator.svg new file mode 100644 index 00000000000..94113e09b52 --- /dev/null +++ b/public/assets/images/loading-indicator.svg @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;} + .st1{fill:#28497C;} + .st2{fill:#EBEBEC; display: none;} +</style> +<rect y="0" class="st0" width="64" height="64"/> + <path class="st1" d="M32,4C16.5,4,4,16.5,4,32h8.3c0-10.9,8.8-19.7,19.7-19.6c10.9,0,19.7,8.8,19.6,19.7c0,10.9-8.8,19.6-19.7,19.6 + V60c15.5,0,28-12.5,28-28S47.5,4,32,4z"> + <animateTransform attributeName="transform" type="rotate" from="0 32 32" to="360 32 32" dur="5s" repeatCount="indefinite" /> + </path> + <path class="st1" d="M42.5,32c0-5.8-4.7-10.5-10.5-10.5c-5.8,0-10.5,4.7-10.5,10.5c0,5.8,4.7,10.5,10.5,10.5 + C37.8,42.6,42.5,37.8,42.5,32C42.5,32,42.5,32,42.5,32z"/> + <path class="st2" d="M42.5,32L42.5,32c0,5.8-4.7,10.5-10.5,10.5c-5.8,0-10.5-4.7-10.5-10.5c0-5.8,4.7-10.5,10.5-10.5c0,0,0,0,0,0 + v-9.2h0c-10.9,0-19.7,8.8-19.7,19.7S21.1,51.7,32,51.7c10.9,0,19.7-8.8,19.7-19.7H42.5z"> + <animateTransform attributeName="transform" type="rotate" from="360 32 32" to="0 32 32" dur="4s" repeatCount="indefinite" /> + </path> +</svg> diff --git a/resources/assets/javascripts/bootstrap/application.js b/resources/assets/javascripts/bootstrap/application.js index 5dd746fdf8f..633062c40d8 100644 --- a/resources/assets/javascripts/bootstrap/application.js +++ b/resources/assets/javascripts/bootstrap/application.js @@ -74,9 +74,6 @@ STUDIP.ready(function() { * application wide setup * ------------------------------------------------------------------------ */ STUDIP.domReady(function () { - // AJAX Indicator - STUDIP.ajax_indicator = true; - STUDIP.study_area_selection.initialize(); if (document.createElement('textarea').style.resize === undefined) { diff --git a/resources/assets/javascripts/bootstrap/files.js b/resources/assets/javascripts/bootstrap/files.js index 2f0c172667d..72a2a6e63e0 100644 --- a/resources/assets/javascripts/bootstrap/files.js +++ b/resources/assets/javascripts/bootstrap/files.js @@ -2,7 +2,7 @@ function searchMoreFiles (button) { var table = $(button).closest('table'); var loading = $('<div class="loading" style="padding: 10px">').html( $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css('width', '24') .css('height', '24') ); diff --git a/resources/assets/javascripts/bootstrap/members.js b/resources/assets/javascripts/bootstrap/members.js index b6a519146c3..ff689bcd2bf 100644 --- a/resources/assets/javascripts/bootstrap/members.js +++ b/resources/assets/javascripts/bootstrap/members.js @@ -9,7 +9,7 @@ STUDIP.domReady(() => { $('<img>').attr({ width: 32, height: 32, - src: STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg' + src: STUDIP.ASSETS_URL + 'images/loading-indicator.svg' }) ); diff --git a/resources/assets/javascripts/bootstrap/statusgroups.js b/resources/assets/javascripts/bootstrap/statusgroups.js index c79bb324e3a..3ec865b6f72 100644 --- a/resources/assets/javascripts/bootstrap/statusgroups.js +++ b/resources/assets/javascripts/bootstrap/statusgroups.js @@ -12,7 +12,7 @@ STUDIP.ready(function() { $('<img>').attr({ width: 32, height: 32, - src: STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg' + src: STUDIP.ASSETS_URL + 'images/loading-indicator.svg' }) ); diff --git a/resources/assets/javascripts/bootstrap/subcourses.js b/resources/assets/javascripts/bootstrap/subcourses.js index cf777da12ab..dd4e1f71b04 100644 --- a/resources/assets/javascripts/bootstrap/subcourses.js +++ b/resources/assets/javascripts/bootstrap/subcourses.js @@ -38,7 +38,7 @@ $(document).on('click', '.toggle-subcourses', function(event) { $('<div class="loading" style="padding: 10px">') .html( $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css('width', '24') .css('height', '24') ) diff --git a/resources/assets/javascripts/lib/admission.js b/resources/assets/javascripts/lib/admission.js index dd4642239d5..307fb154734 100644 --- a/resources/assets/javascripts/lib/admission.js +++ b/resources/assets/javascripts/lib/admission.js @@ -23,7 +23,7 @@ const Admission = { var loading = $gettext('Wird geladen'); $('#instcourses').empty(); $('<img/>', { - src: STUDIP.ASSETS_URL + 'images/ajax_indicator_small.gif' + src: STUDIP.ASSETS_URL + 'images/loading-indicator.svg' }).appendTo('#instcourses'); $('#instcourses').append(loading); $('#instcourses').load(targetUrl, data); diff --git a/resources/assets/javascripts/lib/course_wizard.js b/resources/assets/javascripts/lib/course_wizard.js index 87e65707e5a..be01ee13692 100644 --- a/resources/assets/javascripts/lib/course_wizard.js +++ b/resources/assets/javascripts/lib/course_wizard.js @@ -188,7 +188,7 @@ const CourseWizard = { target.children('ul').append( $('<li class="tree-loading">').html( $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css('width', '16') .css('height', '16') ) @@ -237,7 +237,7 @@ const CourseWizard = { .parent() .append( $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .attr('id', 'sem-tree-search-loading') .css('width', '16') .css('height', '16') @@ -542,7 +542,7 @@ const CourseWizard = { left: pos.left }); var loading = $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css({ width: 32, height: 32, diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js index 1a1945a0ecd..c511847b6b4 100644 --- a/resources/assets/javascripts/lib/fullcalendar.js +++ b/resources/assets/javascripts/lib/fullcalendar.js @@ -521,7 +521,7 @@ class Fullcalendar if (!$('#loading-spinner').length) { jQuery('#layout_content').append( $('<div id="loading-spinner" style="position: absolute; top: calc(50% - 55px); left: calc(50% + 135px); z-index: 9001;">').html( - $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css({ width: 64, height: 64 diff --git a/resources/assets/javascripts/lib/resources.js b/resources/assets/javascripts/lib/resources.js index 36fb3d7f6ae..ac182a9f9e1 100644 --- a/resources/assets/javascripts/lib/resources.js +++ b/resources/assets/javascripts/lib/resources.js @@ -737,7 +737,7 @@ class Resources if (!$('#loading-spinner').length) { jQuery('#layout_content').append( $('<div id="loading-spinner" style="position: absolute; top: calc(50% - 55px); left: calc(50% + 135px); z-index: 9001;">').html( - $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css({ width: 64, height: 64 diff --git a/resources/assets/javascripts/lib/smiley_picker.js b/resources/assets/javascripts/lib/smiley_picker.js index 8fd85ca6a22..21d8bc23ba7 100644 --- a/resources/assets/javascripts/lib/smiley_picker.js +++ b/resources/assets/javascripts/lib/smiley_picker.js @@ -37,7 +37,7 @@ function loadURL(url, callback) { var that = this, src = this.src, image = new Image(); - this.src = STUDIP.ASSETS_URL + 'images/ajax_indicator_small.gif'; + this.src = STUDIP.ASSETS_URL + 'images/loading-indicator.gif'; image.onload = image.onerror = function() { that.src = src; diff --git a/resources/assets/javascripts/mvv_course_wizard.js b/resources/assets/javascripts/mvv_course_wizard.js index 63822f562cd..d182f34dc17 100644 --- a/resources/assets/javascripts/mvv_course_wizard.js +++ b/resources/assets/javascripts/mvv_course_wizard.js @@ -24,7 +24,7 @@ STUDIP.MVV.CourseWizard = { target.children('ul').append( $('<li class="tree-loading">').html( $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css('width', '16') .css('height', '16') ) @@ -83,7 +83,7 @@ STUDIP.MVV.CourseWizard = { .parent() .append( $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .attr('id', 'lvgroup-tree-search-loading') .css('width', '16') .css('height', '16') @@ -260,7 +260,7 @@ STUDIP.MVV.CourseWizard = { left: pos.left }); var loading = $('<img>') - .attr('src', STUDIP.ASSETS_URL + 'images/ajax-indicator-black.svg') + .attr('src', STUDIP.ASSETS_URL + 'images/loading-indicator.svg') .css({ width: 32, height: 32, diff --git a/resources/assets/stylesheets/scss/admin.scss b/resources/assets/stylesheets/scss/admin.scss index bd147e580b9..26f1369a2d8 100644 --- a/resources/assets/stylesheets/scss/admin.scss +++ b/resources/assets/stylesheets/scss/admin.scss @@ -148,7 +148,7 @@ fieldset.attribute_table { } &.ajaxing { - background-image: url("#{$image-path}/ajax_indicator_small.gif"); + background-image: url("#{$image-path}/loading-indicator.svg"); } } } diff --git a/resources/assets/stylesheets/scss/ajax.scss b/resources/assets/stylesheets/scss/ajax.scss index 19adf7db70d..053395fa01a 100644 --- a/resources/assets/stylesheets/scss/ajax.scss +++ b/resources/assets/stylesheets/scss/ajax.scss @@ -20,7 +20,7 @@ position: relative; .notification { - background: rgba(255, 255, 255, 0.5) url("#{$image-path}/ajax_indicator_small.gif") center center no-repeat; + background: rgba(255, 255, 255, 0.5) url("#{$image-path}/loading-indicator.svg") center center no-repeat; border: 1px solid #ccc; border-radius: 8px; display: inline-block; @@ -33,7 +33,7 @@ } .ajaxing { - background: url("#{$image-path}/ajax_indicator_small.gif") center no-repeat; + background: url("#{$image-path}/loading-indicator.svg") center no-repeat; display: inline-block; @include size(16px, 16px); @include hide-text(); diff --git a/resources/assets/stylesheets/scss/globalsearch.scss b/resources/assets/stylesheets/scss/globalsearch.scss index 5fc1d53239f..61aa9d9722e 100644 --- a/resources/assets/stylesheets/scss/globalsearch.scss +++ b/resources/assets/stylesheets/scss/globalsearch.scss @@ -122,7 +122,7 @@ display: none; text-align: center; - background-image: url("#{$image-path}/ajax-indicator-black.svg"); + background-image: url("#{$image-path}/loading-indicator.svg"); background-position: center bottom; background-repeat: no-repeat; background-size: $icon-size; diff --git a/resources/assets/stylesheets/scss/installer.scss b/resources/assets/stylesheets/scss/installer.scss index 9268b9c9cff..9a72993b7cb 100644 --- a/resources/assets/stylesheets/scss/installer.scss +++ b/resources/assets/stylesheets/scss/installer.scss @@ -135,7 +135,7 @@ background-size: 16px; } dt.requesting { - background: url('#{$image-path}/ajax-indicator-black.svg') no-repeat top 3px right; + background: url('#{$image-path}/loading-indicator.svg') no-repeat top 3px right; background-size: 16px; } diff --git a/resources/assets/stylesheets/scss/progress_indicator.scss b/resources/assets/stylesheets/scss/progress_indicator.scss index 0f78c4c2931..3346d661aaf 100644 --- a/resources/assets/stylesheets/scss/progress_indicator.scss +++ b/resources/assets/stylesheets/scss/progress_indicator.scss @@ -5,7 +5,7 @@ .progress-indicator { width: 100%; - background-image: url("#{$image-path}/ajax-indicator-black.svg"); + background-image: url("#{$image-path}/loading-indicator.svg"); background-repeat: no-repeat; background-position: center; } @@ -26,4 +26,4 @@ display: block; } } -} \ No newline at end of file +} diff --git a/resources/assets/stylesheets/scss/search.scss b/resources/assets/stylesheets/scss/search.scss index 8d6b37046de..8ba202a08fe 100644 --- a/resources/assets/stylesheets/scss/search.scss +++ b/resources/assets/stylesheets/scss/search.scss @@ -10,7 +10,7 @@ label.inactive-settings-category { display: none; text-align: center; - background-image: url("#{$image-path}/ajax-indicator-black.svg"); + background-image: url("#{$image-path}/loading-indicator.svg"); background-position: center bottom; background-repeat: no-repeat; background-size: $icon-size; diff --git a/resources/assets/stylesheets/scss/smileys.scss b/resources/assets/stylesheets/scss/smileys.scss index 1621b47e5d1..e6bc47c3984 100644 --- a/resources/assets/stylesheets/scss/smileys.scss +++ b/resources/assets/stylesheets/scss/smileys.scss @@ -88,7 +88,7 @@ } &.ajax { - background-image: url("#{$image-path}/ajax_indicator_small.gif"); + background-image: url("#{$image-path}/loading-indicator.svg"); } } diff --git a/resources/assets/stylesheets/scss/studip-overlay.scss b/resources/assets/stylesheets/scss/studip-overlay.scss index a48bc72a571..d7dbb928da2 100644 --- a/resources/assets/stylesheets/scss/studip-overlay.scss +++ b/resources/assets/stylesheets/scss/studip-overlay.scss @@ -26,14 +26,10 @@ // browsers (except for some old android versions that we can neglect). // Thus said, if the loading animation looks ugly - update your // browser ffs! - background-image: url("#{$image-path}/ajax_indicator_small.gif"); - background-image: none, url("#{$image-path}/ajax-indicator-white.svg"); + background-image: url("#{$image-path}/loading-indicator.svg"); background-position: center; background-repeat: no-repeat; - } - - &-ajax.modal-overlay-dark { - background-image: none, url("#{$image-path}/ajax-indicator-black.svg"); + background-size: 32px; } // Progress diff --git a/resources/vue/components/BlubberGlobalstream.vue b/resources/vue/components/BlubberGlobalstream.vue index 548e1fd57ba..2236e1fba96 100644 --- a/resources/vue/components/BlubberGlobalstream.vue +++ b/resources/vue/components/BlubberGlobalstream.vue @@ -4,7 +4,7 @@ <blubber-public-composer></blubber-public-composer> <ol class="postings" aria-live="polite"> <li class="more" v-if="streamData.more_up"> - <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img> + <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img> </li> <li :class="blubber.class" @@ -25,7 +25,7 @@ </li> <li class="more" v-if="more_down"> - <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img> + <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img> </li> </ol> </div> diff --git a/resources/vue/components/BlubberThread.vue b/resources/vue/components/BlubberThread.vue index a3a5d7027a4..b5d287d4aaf 100644 --- a/resources/vue/components/BlubberThread.vue +++ b/resources/vue/components/BlubberThread.vue @@ -34,7 +34,7 @@ <ol class="comments" aria-live="polite"> <li class="more" v-if="threadData.more_up"> - <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img> + <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img> </li> <li :class="comment.class" @@ -62,7 +62,7 @@ </li> <li class="more" v-if="threadData.more_down"> - <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img> + <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img> </li> </ol> diff --git a/resources/vue/components/BlubberThreadWidget.vue b/resources/vue/components/BlubberThreadWidget.vue index 0606eb88972..cfa6cb18b7c 100644 --- a/resources/vue/components/BlubberThreadWidget.vue +++ b/resources/vue/components/BlubberThreadWidget.vue @@ -21,7 +21,7 @@ </a> </li> <li class="more" v-if="display_more_down" key="more"> - <studip-asset-img file="ajax-indicator-black.svg" width="20"></studip-asset-img> + <studip-asset-img file="loading-indicator.svg" width="20"></studip-asset-img> </li> </transition-group> </div> diff --git a/resources/vue/components/StudipProgressIndicator.vue b/resources/vue/components/StudipProgressIndicator.vue index 8266ca2ae03..b6f7ee23537 100644 --- a/resources/vue/components/StudipProgressIndicator.vue +++ b/resources/vue/components/StudipProgressIndicator.vue @@ -1,7 +1,7 @@ <template> <div class="progress-indicator-wrapper"> <div class="progress-indicator" :style="indicatorStyle"></div> - <p v-if="description !== ''" class="progress-indicator-description"> + <p v-if="hasDescription" class="progress-indicator-description"> {{ description }} </p> <p v-else class="progress-indicator-description-default"> @@ -18,18 +18,21 @@ export default { type: String, required: false }, - width: { + size: { type: Number, default: 32 } }, computed: { indicatorStyle() { - let style = 'background-size: ' + this.width + 'px;'; - style += 'height: ' + this.width + 'px;'; - - return style; + return { + backgroundSize: `${this.size}px`, + height: `${this.size}px` + }; + }, + hasDescription () { + return this.description.trim().length > 0; } } } -</script> \ No newline at end of file +</script> -- GitLab