mirror of
https://github.com/em-squared/5e-drs.git
synced 2025-10-30 05:04:21 +00:00
table of contents in pages
This commit is contained in:
parent
f415fa8613
commit
a6e1803b23
12 changed files with 165 additions and 10 deletions
|
|
@ -129,7 +129,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Partir à l'aventure",
|
title: "Partir à l'aventure",
|
||||||
path: '/partir-a-laventure/'
|
path: '/partir-a-l-aventure/'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Combattre",
|
title: "Combattre",
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ export default new Vuex.Store({
|
||||||
drawer: true,
|
drawer: true,
|
||||||
rightDrawer: false,
|
rightDrawer: false,
|
||||||
hasRightDrawer: false,
|
hasRightDrawer: false,
|
||||||
inRightSidebar: null,
|
inRightDrawer: null,
|
||||||
},
|
},
|
||||||
|
|
||||||
getters: {
|
getters: {
|
||||||
|
|
@ -38,7 +38,7 @@ export default new Vuex.Store({
|
||||||
commit('setInRightDrawer', payload)
|
commit('setInRightDrawer', payload)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
mutations: {
|
mutations: {
|
||||||
setDrawer: (state, payload) => {
|
setDrawer: (state, payload) => {
|
||||||
state.drawer = payload
|
state.drawer = payload
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,17 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
reset: ({ commit }) => {
|
||||||
|
commit('resetSearch')
|
||||||
|
commit('resetMustBeConcentration')
|
||||||
|
commit('resetMustBeRitual')
|
||||||
|
commit('resetClasses')
|
||||||
|
commit('resetLevels')
|
||||||
|
commit('resetSchools')
|
||||||
|
commit('resetComponentVerbal')
|
||||||
|
commit('resetComponentSomatic')
|
||||||
|
commit('resetComponentMaterial')
|
||||||
|
},
|
||||||
updateSearch: ({ commit }, payload) => {
|
updateSearch: ({ commit }, payload) => {
|
||||||
commit('setSearch', payload)
|
commit('setSearch', payload)
|
||||||
},
|
},
|
||||||
|
|
@ -109,12 +120,21 @@ export default {
|
||||||
setSearch: (state, payload) => {
|
setSearch: (state, payload) => {
|
||||||
state.search = payload
|
state.search = payload
|
||||||
},
|
},
|
||||||
|
resetSearch: (state) => {
|
||||||
|
state.search = ''
|
||||||
|
},
|
||||||
setMustBeConcentration: (state, payload) => {
|
setMustBeConcentration: (state, payload) => {
|
||||||
state.mustBeConcentration = payload
|
state.mustBeConcentration = payload
|
||||||
},
|
},
|
||||||
|
resetMustBeConcentration: (state) => {
|
||||||
|
state.mustBeConcentration = undefined
|
||||||
|
},
|
||||||
setMustBeRitual: (state, payload) => {
|
setMustBeRitual: (state, payload) => {
|
||||||
state.mustBeRitual = payload
|
state.mustBeRitual = payload
|
||||||
},
|
},
|
||||||
|
resetMustBeRitual: (state) => {
|
||||||
|
state.mustBeRitual = undefined
|
||||||
|
},
|
||||||
setClasses: (state, payload) => {
|
setClasses: (state, payload) => {
|
||||||
state.classes = payload
|
state.classes = payload
|
||||||
},
|
},
|
||||||
|
|
@ -196,12 +216,21 @@ export default {
|
||||||
setComponentVerbal: (state, payload) => {
|
setComponentVerbal: (state, payload) => {
|
||||||
state.componentVerbal = payload
|
state.componentVerbal = payload
|
||||||
},
|
},
|
||||||
|
resetComponentVerbal: (state) => {
|
||||||
|
state.componentVerbal = undefined
|
||||||
|
},
|
||||||
setComponentSomatic: (state, payload) => {
|
setComponentSomatic: (state, payload) => {
|
||||||
state.componentSomatic = payload
|
state.componentSomatic = payload
|
||||||
},
|
},
|
||||||
|
resetComponentSomatic: (state) => {
|
||||||
|
state.componentSomatic = undefined
|
||||||
|
},
|
||||||
setComponentMaterial: (state, payload) => {
|
setComponentMaterial: (state, payload) => {
|
||||||
state.componentMaterial = payload
|
state.componentMaterial = payload
|
||||||
},
|
},
|
||||||
|
resetComponentMaterial: (state) => {
|
||||||
|
state.componentMaterial = undefined
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<!-- <v-text-field flat solo-inverted hide-details prepend-inner-icon="mdi-magnify" label="Search" class="hidden-sm-and-down" /> -->
|
<!-- <v-text-field flat solo-inverted hide-details prepend-inner-icon="mdi-magnify" label="Search" class="hidden-sm-and-down" /> -->
|
||||||
<v-spacer />
|
<v-spacer />
|
||||||
<v-btn @click.stop="setRightDrawer" icon v-if="hasRightDrawer">
|
<v-btn @click.stop="setRightDrawer" icon v-if="hasRightDrawer">
|
||||||
<v-icon>mdi-format-list-bulleted</v-icon>
|
<v-icon>{{ rightDrawerIcon }}</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -39,6 +39,17 @@ export default {
|
||||||
},
|
},
|
||||||
hasRightDrawer() {
|
hasRightDrawer() {
|
||||||
return this.$store.state.hasRightDrawer
|
return this.$store.state.hasRightDrawer
|
||||||
|
},
|
||||||
|
inRightDrawer() {
|
||||||
|
return this.$store.state.inRightDrawer
|
||||||
|
},
|
||||||
|
rightDrawerIcon() {
|
||||||
|
if (this.inRightDrawer == 'pageToc') {
|
||||||
|
return 'mdi-format-list-bulleted'
|
||||||
|
} else if (this.inRightDrawer == 'spellFilters') {
|
||||||
|
return 'mdi-filter-variant'
|
||||||
|
}
|
||||||
|
return 'mdi-menu'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
63
docs/.vuepress/theme/components/PageToc.vue
Normal file
63
docs/.vuepress/theme/components/PageToc.vue
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
<template>
|
||||||
|
<div class="page-toc mt-4">
|
||||||
|
<p class="subtitle-2 pl-6 pr-6">Table des matières</p>
|
||||||
|
<ul>
|
||||||
|
<li :class="[ itemPadding(h), 'mb-1' ]" v-for="h in headers">
|
||||||
|
<a :href="anchor(h)">{{ h.title }}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'PageToc',
|
||||||
|
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
headers () {
|
||||||
|
return this.$page.headers
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
anchor (h) {
|
||||||
|
return '#' + h.slug
|
||||||
|
},
|
||||||
|
itemPadding (h) {
|
||||||
|
return 'pl-' + (h.level - 2) * 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted () {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import '../styles/colors';
|
||||||
|
|
||||||
|
.page-toc {
|
||||||
|
ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-right: 24px;
|
||||||
|
|
||||||
|
li {
|
||||||
|
a {
|
||||||
|
color: $color-gray;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $color-dragon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -1,17 +1,20 @@
|
||||||
<template>
|
<template>
|
||||||
<v-navigation-drawer class="right-drawer" v-model="rightDrawer" :clipped="$vuetify.breakpoint.lgAndUp" width="300" app right>
|
<v-navigation-drawer class="right-drawer" v-model="rightDrawer" :clipped="$vuetify.breakpoint.lgAndUp" width="300" app right>
|
||||||
|
<PageToc v-if="hasPageToc" />
|
||||||
<SpellFilters v-if="hasSpellFilters" />
|
<SpellFilters v-if="hasSpellFilters" />
|
||||||
</v-navigation-drawer>
|
</v-navigation-drawer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import SpellFilters from '@theme/components/SpellFilters.vue'
|
import PageToc from '@theme/components/PageToc'
|
||||||
|
import SpellFilters from '@theme/components/SpellFilters'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'RightDrawer',
|
name: 'RightDrawer',
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
SpellFilters
|
SpellFilters,
|
||||||
|
PageToc
|
||||||
},
|
},
|
||||||
|
|
||||||
data () {
|
data () {
|
||||||
|
|
@ -28,9 +31,12 @@ export default {
|
||||||
this.$store.commit('setRightDrawer', newValue)
|
this.$store.commit('setRightDrawer', newValue)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
hasPageToc () {
|
||||||
|
return this.$store.state.inRightDrawer == 'pageToc'
|
||||||
|
},
|
||||||
hasSpellFilters () {
|
hasSpellFilters () {
|
||||||
return this.$store.state.inRightDrawer == 'spellFilters'
|
return this.$store.state.inRightDrawer == 'spellFilters'
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted () {
|
mounted () {
|
||||||
|
|
|
||||||
|
|
@ -325,6 +325,9 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted () {
|
mounted () {
|
||||||
|
console.log('filter mounted')
|
||||||
|
this.$store.dispatch('spellFilters/reset')
|
||||||
|
|
||||||
let selectedSchools = getUrlParameter(window.location.href, "ecoles").split(",")
|
let selectedSchools = getUrlParameter(window.location.href, "ecoles").split(",")
|
||||||
let selectedClasses = getUrlParameter(window.location.href, "classes").split(",")
|
let selectedClasses = getUrlParameter(window.location.href, "classes").split(",")
|
||||||
let selectedLevels = getUrlParameter(window.location.href, "niveaux").split(",")
|
let selectedLevels = getUrlParameter(window.location.href, "niveaux").split(",")
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,30 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
setRightDrawer () {
|
||||||
|
this.$store.commit('setHasRightDrawer', false)
|
||||||
|
this.$store.commit('setRightDrawer', false)
|
||||||
|
this.$store.commit('setInRightDrawer', null)
|
||||||
|
|
||||||
|
if (this.$page.headers && this.$page.headers.length > 0 && this.$page.frontmatter.toc !== false) {
|
||||||
|
this.$store.commit('setHasRightDrawer', true)
|
||||||
|
this.$store.commit('setRightDrawer', true)
|
||||||
|
this.$store.commit('setInRightDrawer', 'pageToc')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
$route (id) {
|
||||||
|
this.setRightDrawer()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted () {
|
||||||
|
this.setRightDrawer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,12 @@ export default {
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
Spell
|
Spell
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted () {
|
||||||
|
this.$store.commit('setHasRightDrawer', false)
|
||||||
|
this.$store.commit('setRightDrawer', false)
|
||||||
|
this.$store.commit('setInRightDrawer', null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
>
|
>
|
||||||
|
|
||||||
<template v-slot:item.title="{ item }">
|
<template v-slot:item.title="{ item }">
|
||||||
<router-link :to="{ path: item.path }">{{ item.title }}</router-link>
|
<router-link :to="{ path: item.path }" class="subtitle-2">{{ item.title }}</router-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:item.frontmatter.level="{ item }">
|
<template v-slot:item.frontmatter.level="{ item }">
|
||||||
|
|
@ -165,5 +165,18 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
|
@import '../styles/colors';
|
||||||
|
|
||||||
|
.v-data-table {
|
||||||
|
a {
|
||||||
|
color: $color-dragon;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-data-table__mobile-row {
|
||||||
|
min-height: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
$color-hero: #563f5a;
|
$color-hero: #563f5a;
|
||||||
$color-dragon: #9b1c47;
|
$color-dragon: #9b1c47;
|
||||||
$color-gray: #555;
|
$color-gray: #6f6f6f;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue