|
|
@@ -0,0 +1,189 @@
|
|
|
+<template>
|
|
|
+ <div class="timeline">
|
|
|
+ <div v-for="timeline in timelines" :class="`container ${timeline.posittion}`">
|
|
|
+ <div class="content">
|
|
|
+ <h2>{{timeline.label}}</h2>
|
|
|
+ <p>{{timeline.description}}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts">
|
|
|
+ import { useTimelineStore } from '@/stores/timeline'
|
|
|
+ import { useI18n } from 'vue-i18n'
|
|
|
+
|
|
|
+ export default {
|
|
|
+ name: 'Timeline',
|
|
|
+ data () {
|
|
|
+ return {
|
|
|
+ timelines: [] as Array<any>,
|
|
|
+ timelineStore: null as any
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setup(){
|
|
|
+ const { t } = useI18n({
|
|
|
+ inheritLocale: true
|
|
|
+ })
|
|
|
+ return{
|
|
|
+ t
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async mounted () {
|
|
|
+ if(!this.timelineStore){
|
|
|
+ this.timelineStore = useTimelineStore()
|
|
|
+ }
|
|
|
+ this.timelines = await this.timelineStore.getTimelines(this.$i18n.locale)
|
|
|
+ console.log(this.timelines)
|
|
|
+ },
|
|
|
+ async update () {
|
|
|
+ if(!this.timelineStore){
|
|
|
+ this.timelineStore = useTimelineStore()
|
|
|
+ }
|
|
|
+ this.timelines = await this.timelineStore.getTimelines(this.$i18n.locale)
|
|
|
+ console.log(this.timelines)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+* {
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+h2{
|
|
|
+ color: white;
|
|
|
+}
|
|
|
+
|
|
|
+/* Set a background color */
|
|
|
+body {
|
|
|
+ background-color: #474e5d;
|
|
|
+ font-family: Helvetica, sans-serif;
|
|
|
+}
|
|
|
+
|
|
|
+/* The actual timeline (the vertical ruler) */
|
|
|
+.timeline {
|
|
|
+ position: relative;
|
|
|
+ max-width: 1200px;
|
|
|
+ margin: 0 auto;
|
|
|
+}
|
|
|
+
|
|
|
+/* The actual timeline (the vertical ruler) */
|
|
|
+.timeline::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ width: 6px;
|
|
|
+ background-color:#6495ed;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ left: 50%;
|
|
|
+ margin-left: -3px;
|
|
|
+}
|
|
|
+
|
|
|
+/* Container around content */
|
|
|
+.container {
|
|
|
+ padding: 10px 40px;
|
|
|
+ position: relative;
|
|
|
+ background-color: white;
|
|
|
+ width: 50%;
|
|
|
+}
|
|
|
+
|
|
|
+/* The circles on the timeline */
|
|
|
+.container::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ width: 75px;
|
|
|
+ height: 75px;
|
|
|
+ right: -78px;
|
|
|
+ background-color: white;
|
|
|
+ border: 4px solid #aac5f5;
|
|
|
+ top: 15px;
|
|
|
+ border-radius: 50%;
|
|
|
+ z-index: 1;
|
|
|
+}
|
|
|
+
|
|
|
+/* Place the container to the left */
|
|
|
+.left {
|
|
|
+ left: -3%;
|
|
|
+}
|
|
|
+
|
|
|
+/* Place the container to the right */
|
|
|
+.right {
|
|
|
+ left: 53%;
|
|
|
+}
|
|
|
+
|
|
|
+/* Add arrows to the left container (pointing right) */
|
|
|
+.left::before {
|
|
|
+ content: " ";
|
|
|
+ height: 0;
|
|
|
+ position: absolute;
|
|
|
+ top: 45px;
|
|
|
+ width: 0;
|
|
|
+ z-index: 1;
|
|
|
+ right: 30px;
|
|
|
+ border: medium solid #aac5f5;
|
|
|
+ border-width: 10px 0 10px 10px;
|
|
|
+ border-color: transparent transparent transparent #aac5f5;
|
|
|
+}
|
|
|
+
|
|
|
+/* Add arrows to the right container (pointing left) */
|
|
|
+.right::before {
|
|
|
+ content: " ";
|
|
|
+ height: 0;
|
|
|
+ position: absolute;
|
|
|
+ top: 45px;
|
|
|
+ width: 0;
|
|
|
+ z-index: 1;
|
|
|
+ left: 30px;
|
|
|
+ border: medium solid #aac5f5;
|
|
|
+ border-width: 10px 10px 10px 0;
|
|
|
+ border-color: transparent #aac5f5 transparent transparent;
|
|
|
+}
|
|
|
+
|
|
|
+/* Fix the circle for containers on the right side */
|
|
|
+.right::after {
|
|
|
+ left: -76px;
|
|
|
+}
|
|
|
+
|
|
|
+/* The actual content */
|
|
|
+.content {
|
|
|
+ padding: 20px 30px;
|
|
|
+ background-color: #aac5f5;
|
|
|
+ position: relative;
|
|
|
+ border-radius: 6px;
|
|
|
+}
|
|
|
+
|
|
|
+/* Media queries - Responsive timeline on screens less than 600px wide */
|
|
|
+@media screen and (max-width: 600px) {
|
|
|
+/* Place the timelime to the left */
|
|
|
+ .timeline::after {
|
|
|
+ left: 31px;
|
|
|
+ }
|
|
|
+
|
|
|
+/* Full-width containers */
|
|
|
+ .container {
|
|
|
+ width: 100%;
|
|
|
+ padding-left: 70px;
|
|
|
+ padding-right: 25px;
|
|
|
+ }
|
|
|
+
|
|
|
+/* Make sure that all arrows are pointing leftwards */
|
|
|
+ .container::before {
|
|
|
+ left: 60px;
|
|
|
+ border: medium solid white;
|
|
|
+ border-width: 10px 10px 10px 0;
|
|
|
+ border-color: transparent white transparent transparent;
|
|
|
+ }
|
|
|
+
|
|
|
+/* Make sure all circles are at the same spot */
|
|
|
+ .left::after, .right::after {
|
|
|
+ left: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+/* Make all right containers behave like the left ones */
|
|
|
+ .right {
|
|
|
+ left: 0%;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|