add LegendToggle component

This commit is contained in:
axolotle
2021-08-01 17:53:04 +02:00
parent 35f540e5fa
commit 2f81979706
6 changed files with 154 additions and 3 deletions
+7 -2
View File
@@ -36,8 +36,13 @@ export default {
<style lang="scss" scoped>
.btn-zoom {
position: absolute;
top: 24px;
right: 24px;
top: 9px;
right: 9px;
@include media-breakpoint-up($size-bp) {
top: 24px;
right: 24px;
}
}
.btn-zoom-item {
+96
View File
@@ -0,0 +1,96 @@
<template>
<div class="legend-toggle">
<b-button
variant="dark"
class="btn-legend-toggle"
:class="visible ? null : 'collapsed'"
:aria-expanded="visible ? 'true' : 'false'"
aria-controls="collapse-legend-toggle"
@click="onBtnClick"
>
<span>?</span>
</b-button>
<b-collapse id="collapse-legend-toggle" v-model="visible">
<div class="collapse-body" ref="body">
<slot name="default" />
</div>
</b-collapse>
</div>
</template>
<script>
export default {
name: 'LegendToggle',
data () {
return {
visible: false
}
},
methods: {
onBtnClick () {
this.visible = !this.visible
if (this.visible) {
document.addEventListener('mousedown', this.onDocumentClick, { capture: true })
}
},
onDocumentClick (e) {
if (this.$refs.body.contains(e.target)) return
document.removeEventListener('mousedown', this.onDocumentClick, { capture: true })
if (!e.target.classList.contains('btn')) {
this.visible = false
}
}
}
}
</script>
<style lang="scss" scoped>
.legend-toggle {
position: absolute;
z-index: 1;
top: 15px;
left: 15px;
@include media-breakpoint-up($size-bp) {
top: 30px;
left: 30px;
}
}
.btn-legend-toggle {
display: block;
width: $btn-size;
height: $btn-size;
padding: 0;
border: 0;
font-weight: $font-weight-bold;
// font-size: 1.7rem;
line-height: 1;
margin-bottom: 10px;
span {
pointer-events: none;
}
}
.collapse {
transition: none;
}
.collapse-body {
max-width: 500px;
margin-right: 15px;
border: $line;
background-color: $white;
padding: $node-card-spacer-y $node-card-spacer-x;
@include media-breakpoint-up($size-bp) {
margin-right: 30px;
}
}
</style>
+2 -1
View File
@@ -68,7 +68,8 @@ export default {
data () {
return {
scrollValue: 0
scrollValue: 0,
h: 0
}
},
+6
View File
@@ -1,6 +1,12 @@
<template>
<b-overlay :show="filteredNodes === undefined" class="h-100" z-index="0">
<div class="library-list">
<legend-toggle>
<h6>Mode Alphabétique</h6>
<p>Ce mode vous permet de retrouver l'ensemble des textes de départ.</p>
<p>Pour naviguer plus rapidement vous pouvez <i>Aller à la lettre</i> dans le menu d'options.</p>
</legend-toggle>
<div class="library-list-container" @click="onContainerClick">
<div v-for="([char, nodes]) in filteredNodes" :key="char">
<h3 :id="char">
+6
View File
@@ -1,5 +1,11 @@
<template>
<b-overlay :show="nodes === undefined" class="h-100" z-index="0">
<legend-toggle>
<h6>Mode Aléatoire</h6>
<p>Ce mode vous propose 3 textes de départ tirés aléatoirement ainsi que leurs textes produits et leurs textes rebonds.</p>
<p>Pour tirer aléatoirement 3 nouveaux textes, cliquez sur <i>Mélanger</i> dans le menu d'options.</p>
</legend-toggle>
<map-zoom
id="library-map" ref="map"
:min-zoom="0.2" :max-zoom="2" :initial-zoom="0.5"
+37
View File
@@ -51,6 +51,17 @@
</g>
</map-zoom>
<legend-toggle>
<h6>Mode Arborescent</h6>
<p>Ce mode vous permet d'observer l'arbre des relations d'un texte de départ.</p>
Types de relation:
<ul>
<li><span class="children" /> Textes produits</li>
<li><span class="siblings" /> Textes rebonds</li>
</ul>
</legend-toggle>
<node-preview-zone v-model="previewNode" :nodes="dataNodes" @open-node="onPreviewNodeClick" />
</b-overlay>
</template>
@@ -210,4 +221,30 @@ foreignObject {
margin: 0;
}
}
.legend-toggle {
ul {
list-style: none;
padding: 0;
margin-top: .5rem;
li {
font-style: italic;
margin-left: 1rem;
}
}
span {
display: inline-block;
height: 0px;
width: 15px;
margin-right: .5rem;
}
.children {
border-top: 3px dashed grey;
}
.siblings {
border-top: 3px solid grey;
}
}
</style>