- Added loader for spells list

This commit is contained in:
Alexis
2020-06-28 17:57:34 +02:00
parent 52a7348d7e
commit eadbaa53ac
6 changed files with 141 additions and 31 deletions

View File

@@ -1,28 +1,14 @@
<template> <template>
<div id="srs"> <div id="srs">
<header> <header>
<navigation/> <navbar/>
</header> </header>
<router-view/> <router-view/>
</div> </div>
</template> </template>
<script> <script>
import navbar from "./components/global/navbar/navbar";
export default { export default {
name: 'app', name: 'app'
components: {
'navigation': navbar
}
} }
</script> </script>
<style lang="scss">
</style>

View File

@@ -44,7 +44,6 @@ var {
font-style: normal; font-style: normal;
} }
// MISC.
hr { hr {
border: none; border: none;
border-top-style: solid; border-top-style: solid;

View File

@@ -0,0 +1,110 @@
<template>
<div class="lds-roller">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</template>
<script>
export default {
name: 'loader',
data() {
return {
}
}
}
</script>
<style scoped lang="scss">
.lds-roller {
display: inline-block;
position: relative;
width: 80px;
height: 80px;
div {
animation: lds-roller 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
transform-origin: 40px 40px;
&:after {
content: "";
display: block;
position: absolute;
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--primary);
margin: -4px 0 0 -4px;
}
&:nth-child(1) {
animation-delay: -0.036s;
&:after {
top: 63px;
left: 63px;
}
}
&:nth-child(2) {
animation-delay: -0.072s;
&:after {
top: 68px;
left: 56px;
}
}
&:nth-child(3) {
animation-delay: -0.108s;
&:after {
top: 71px;
left: 48px;
}
}
&:nth-child(4) {
animation-delay: -0.144s;
&:after {
top: 72px;
left: 40px;
}
}
&:nth-child(5) {
animation-delay: -0.18s;
&:after {
top: 71px;
left: 32px;
}
}
&:nth-child(6) {
animation-delay: -0.216s;
&:after {
top: 68px;
left: 24px;
}
}
&:nth-child(7) {
animation-delay: -0.252s;
&:after {
top: 63px;
left: 17px;
}
}
&:nth-child(8) {
animation-delay: -0.288s;
&:after {
top: 56px;
left: 12px;
}
}
}
}
@keyframes lds-roller {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style>

View File

@@ -62,6 +62,11 @@
@cancelAdd="cancelAdd" @cancelAdd="cancelAdd"
@addSpell="addSpell"/> @addSpell="addSpell"/>
</div> </div>
<div
v-else
class="loader-wrapper">
<loader/>
</div>
</div> </div>
</template> </template>
@@ -74,7 +79,6 @@ import AddSpellCard from "./add-spell-card"
// API // API
import { RepositoryFactory } from "~/api/repositories" import { RepositoryFactory } from "~/api/repositories"
const Spells = RepositoryFactory.get('spells') const Spells = RepositoryFactory.get('spells')
// const Schools = RepositoryFactory.get('schools')
export default { export default {
name: 'spellslist', name: 'spellslist',
@@ -184,5 +188,8 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.loader-wrapper {
margin-top: 3rem;
text-align: center;
}
</style> </style>

View File

@@ -0,0 +1,7 @@
import Navbar from './components/global/navbar/navbar'
import Loader from './components/global/loader'
export default [
Navbar,
Loader
]

View File

@@ -3,38 +3,36 @@ import Vue from 'vue'
import VueRouter from 'vue-router' import VueRouter from 'vue-router'
import App from './app.vue' import App from './app.vue'
import Globals from './global-components.js'
Globals.forEach(component => {
Vue.component(component.name, component)
});
// Auth // Auth
require('dotenv').config() require('dotenv').config()
// Router
import routes from './routes'
Vue.use(VueRouter)
// Jquery // Jquery
import jquery from 'jquery' import jquery from 'jquery'
window.$ = jquery window.$ = jquery
window.jquery = jquery window.jquery = jquery
// Global styles // Styles
import './assets/scss/_global.scss' import './assets/scss/_global.scss'
// Bootstrap
import 'bootstrap/dist/css/bootstrap.css' import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css' import 'bootstrap-vue/dist/bootstrap-vue.css'
import 'bootstrap/dist/js/bootstrap.js' import 'bootstrap/dist/js/bootstrap.js'
// Plugins
import { BootstrapVue } from 'bootstrap-vue' import { BootstrapVue } from 'bootstrap-vue'
Vue.use(BootstrapVue) Vue.use(BootstrapVue)
// Masonry
import { VueMasonryPlugin } from 'vue-masonry'; import { VueMasonryPlugin } from 'vue-masonry';
Vue.use(VueMasonryPlugin) Vue.use(VueMasonryPlugin)
// Clipboard plugin
import clipboard from 'v-clipboard' import clipboard from 'v-clipboard'
Vue.use(clipboard) Vue.use(clipboard)
Vue.config.productionTip = false // FUNCTIONS
var filter = function(text, length, clamp){ var filter = function(text, length, clamp){
clamp = clamp || '...'; clamp = clamp || '...';
var node = document.createElement('div'); var node = document.createElement('div');
@@ -44,6 +42,9 @@ var filter = function(text, length, clamp){
}; };
Vue.filter('truncate', filter); Vue.filter('truncate', filter);
// Router
import routes from './routes'
Vue.use(VueRouter)
const router = new VueRouter({ const router = new VueRouter({
mode: 'history', mode: 'history',
routes, routes,
@@ -51,9 +52,9 @@ const router = new VueRouter({
linkExactActiveClass: "active", linkExactActiveClass: "active",
}); });
// Mount Vue
const app = new Vue({ const app = new Vue({
render: h => h(App), render: h => h(App),
router router
}) })
app.$mount('#srs') app.$mount('#srs')