add popup welcome on first visit

This commit is contained in:
axolotle
2021-07-02 19:41:29 +02:00
parent ad8575b7c9
commit fa83b7ca41
7 changed files with 129 additions and 33 deletions
+9 -1
View File
@@ -86,6 +86,7 @@ $font-family-sans-serif: 'Noto Sans';
$font-family-text: 'Redaction'; // custom
$font-size-base: 1rem;
$font-size-base-em: 1em;
$font-size-sm: $font-size-base * .9;
$line-height-base: 1.5;
@@ -95,6 +96,13 @@ $line-height-sm: $line-height-base;
// Headings
$headings-font-weight: 700;
$headings-line-height: $line-height-base;
$h1-font-size: $font-size-base-em * 2.5;
$h2-font-size: $font-size-base-em * 2;
$h3-font-size: $font-size-base-em * 1.75;
$h4-font-size: $font-size-base-em * 1.5;
$h5-font-size: $font-size-base-em * 1.25;
$h6-font-size: $font-size-base-em;
// Buttons
$input-btn-padding-y: 0;
$input-btn-padding-x: .5rem;
@@ -161,7 +169,7 @@ $popover-arrow-outer-color: null;
// HEADER
$header-spacer-sm: 18px;
$header-spacer: 35px;
$header-spacer: 30px;
$header-height: 86px;
// NODEVIEW
@@ -52,6 +52,6 @@ a:hover {
@if $color == 'depart' {
@include text-emphasis-variant(".text-#{$color}", $black, true);
} @else {
@include text-emphasis-variant(".text-#{$color}", darken($value, 30%), true);
@include text-emphasis-variant(".text-#{$color}", darken($value, 15%), true);
}
}
+11 -15
View File
@@ -1,5 +1,5 @@
<template lang="html">
<div class="page wh-100" :class="'page-' + slug">
<div class="page" :class="'page-' + slug">
<div class="page-wrapper" v-html="page.content" />
</div>
</template>
@@ -13,16 +13,9 @@ export default {
slug: { type: String, required: true }
},
data () {
return {
links: undefined
}
},
methods: {
addFootnotes () {
const links = this.$el.querySelectorAll('.page-wrapper a')
console.log('addFootnotes', links)
links.forEach((link, i) => {
const number = parseInt(link.hash.replace('#', ''))
if (!isNaN(number)) {
@@ -38,8 +31,6 @@ export default {
this.addFootnoteContent(link, i)
}
})
this.links = links
},
addFootnoteContent (link, i) {
@@ -51,13 +42,14 @@ export default {
},
onFootnoteLinkClick (e) {
document.getElementById(e.target.id + '-content').classList.toggle('show')
console.log('onFootnoteLinkClick', e.target.dataset.number, e)
const container = document.getElementById(e.target.id + '-content')
if (container) {
container.classList.toggle('show')
}
}
},
mounted () {
console.log('mounted', this.page.notes)
if (this.page.notes) this.addFootnotes()
}
}
@@ -65,6 +57,12 @@ export default {
<style lang="scss">
.page {
font-size: 1rem;
@include media-breakpoint-up($size-bp) {
font-size: 1.5rem;
}
padding: $node-view-spacer-sm-y $node-view-spacer-sm-x;
@include media-breakpoint-up($size-bp) {
@@ -135,7 +133,5 @@ export default {
margin: 0 0 1em 2em;
}
}
}
</style>
+1 -1
View File
@@ -2,7 +2,7 @@
<div
class="node-view-footer" :class="'node-view-footer-' + mode"
>
<div class="node-view-footer-wrapper d-flex w-100">
<div class="node-view-footer-wrapper w-100">
<div class="tags mb-n2">
<b-badge
v-for="tag in node.tags" :key="tag.id"
+14 -3
View File
@@ -1,10 +1,21 @@
<template>
<component-debug :component="this">
</component-debug>
<div class="view-home">
</div>
</template>
<script>
export default {
name: 'Home'
name: 'Home',
data () {
return {
}
},
created () {
}
}
</script>
<style lang="scss" scoped>
</style>
+84 -10
View File
@@ -1,14 +1,27 @@
<template>
<b-overlay
class="intro"
:show="page === undefined"
z-index="0"
>
<page-view v-if="page" :page="page" slug="intro" />
</b-overlay>
<div class="view-introduction" :class="{ 'overflow-hidden': visited === false }">
<b-overlay
class="intro"
:show="page === undefined"
z-index="0"
>
<page-view v-if="page" :page="page" slug="intro" />
</b-overlay>
<div v-if="visited === false" class="page-popup">
<div class="page-popup-container h-100">
<b-overlay :show="popup === undefined" z-index="0" class="h-100">
<button-close @click="onPopupClose()" />
<page-view v-if="popup" :page="popup" slug="welcome" />
</b-overlay>
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { PageView } from '@/components/layouts'
@@ -21,20 +34,42 @@ export default {
data () {
return {
page: undefined
page: undefined,
popup: undefined
}
},
computed: {
...mapGetters(['visited']),
},
methods: {
onPopupClose () {
this.$store.commit('SET_VISITED', true)
}
},
async created () {
if (this.visited === false) {
this.popup = await this.$store.dispatch('QUERY_PAGE', 'welcome')
}
this.page = await this.$store.dispatch('QUERY_PAGE', 'intro')
}
}
</script>
<style lang="scss" scoped>
.view-introduction {
height: 100%;
position: relative;
&.overflow-hidden {
overflow: hidden;
}
}
.intro {
min-height: 100%;
min-width: 100%;
height: 100%;
.page-intro {
font-family: $font-family-text;
@@ -45,4 +80,43 @@ export default {
}
}
}
.page-popup {
border: $line;
background-color: $white;
position: absolute;
width: 100%;
&-container {
height: 100%;
width: 100%;
overflow-y: auto;
}
@include media-breakpoint-down($size-bp-down) {
top: -2px;
height: calc(100% + 2px);
margin-bottom: -2px;
}
@include media-breakpoint-up($size-bp) {
height: 80%;
width: 80%;
left: 10%;
top: 50%;
transform: translate(0, -50%);
}
&-container {
position: relative;
.btn-close {
position: sticky;
z-index: 2;
float: right;
right: $node-view-spacer-sm-x;
top: $node-view-spacer-sm-y;
}
}
}
</style>
+9 -2
View File
@@ -7,14 +7,20 @@ export default {
welcome: undefined,
intro: undefined,
ids: {
welcome: 1,
welcome: 208,
intro: 207
}
},
visited: localStorage.getItem('visited') === 'true'
},
mutations: {
'SET_PAGE' (state, { slug, page }) {
state[slug] = page
},
'SET_VISITED' (state, visited) {
state.visited = visited
localStorage.setItem('visited', visited)
}
},
@@ -29,5 +35,6 @@ export default {
},
getters: {
visited: state => state.visited
}
}