1
0
Fork 0
mirror of https://github.com/em-squared/5e-drs.git synced 2025-10-29 12:44:20 +00:00

tooltips pour les états préjudiciables

This commit is contained in:
Maxime Moraine 2021-03-12 19:28:30 +01:00
parent 7c23239138
commit b508862c9b
8 changed files with 156 additions and 4 deletions

View file

@ -114,6 +114,17 @@ export const tooltips = {
"Toute attaque qui touche la créature est obligatoirement un coup critique si l'assaillant se trouve dans un rayon de 1,50 mètre autour d'elle."
]
},
'paralyse': {
id: 'paralyse',
basePath: '/gerer-la-sante-du-personnage/',
title: 'Paralysé',
description: [
"Une créature <em>paralysée</em> est <em>neutralisée</em> (voir l'état) et ne peut ni parler ni se déplacer.",
"La créature rate automatiquement tous ses jets de sauvegarde de Force et de Dextérité.",
"Les attaques visant la créature bénéficient d'un <em>avantage</em>.",
"Toute attaque qui touche la créature est obligatoirement un coup critique si l'assaillant se trouve dans un rayon de 1,50 mètre autour d'elle."
]
},
'petrifie': {
id: 'petrifie',
basePath: '/gerer-la-sante-du-personnage/',

View file

@ -23,6 +23,7 @@
<script>
import {displayItemMeta} from '@theme/util/magicItemHelpers'
import MarkdownIt from 'markdown-it'
import { handleTooltips } from '@theme/util'
export default {
name: 'MagicItem',
@ -39,6 +40,17 @@ export default {
displayItemMeta () {
return displayItemMeta(this.magicItem.frontmatter)
}
},
mounted () {
setTimeout(function () {
handleTooltips()
}, 100);
this.$router.afterEach(() => {
setTimeout(function () {
handleTooltips()
}, 100)
})
}
}
</script>

View file

@ -168,6 +168,8 @@ import {
displayMonsterTypeSizeAlignment
} from '@theme/util/monsterHelpers'
import { handleTooltips } from '@theme/util'
import {stats} from '../../data/stats.js'
import {armorTypes} from '../../data/armorTypes.js'
import MarkdownIt from 'markdown-it'
@ -508,6 +510,14 @@ export default {
mounted () {
//console.log(this.$page)
setTimeout(function () {
handleTooltips()
}, 100);
this.$router.afterEach(() => {
setTimeout(function () {
handleTooltips()
}, 100)
})
}
}
</script>

View file

@ -7,9 +7,20 @@
</template>
<script>
import { handleTooltips } from '@theme/util'
export default {
name: 'Page',
components: { }
components: { },
mounted () {
setTimeout(function () {
handleTooltips()
}, 100);
this.$router.afterEach(() => {
setTimeout(function () {
handleTooltips()
}, 100)
})
}
}
</script>

View file

@ -41,6 +41,7 @@
<script>
import { displaySchoolLevel } from '@theme/util/spellHelpers'
import MarkdownIt from 'markdown-it'
import { handleTooltips } from '@theme/util'
export default {
name: 'Spell',
@ -61,6 +62,14 @@ export default {
mounted () {
// console.log(this.spell)
setTimeout(function () {
handleTooltips()
}, 100);
this.$router.afterEach(() => {
setTimeout(function () {
handleTooltips()
}, 100)
})
}
}
</script>

View file

@ -29,8 +29,8 @@
<v-btn color="primary" class="d-print-none" fab bottom right fixed @click="toTop" v-show="toTopButton" v-scroll="onScroll">
<v-icon class="d-print-none">mdi-chevron-up</v-icon>
</v-btn>
</v-fab-transition>
</v-main>
</v-fab-transition>
</v-main>
<v-bottom-sheet v-model="cookieConsentDialog" hide-overlay>
<v-sheet class="" tile>
@ -64,6 +64,13 @@
</v-card>
</v-dialog>
<div id="tooltip">
<div id="tooltip-title" class="tooltip-title">
</div>
<div id="tooltip-content" class="tooltip-content">
</div>
</div>
</v-app>
</template>
@ -74,6 +81,7 @@ import NavDrawer from '@theme/components/NavDrawer.vue'
import RightDrawer from '@theme/components/RightDrawer.vue'
import Vue from 'vue'
import Cookies from 'js-cookie'
import { tooltips } from '../../data/ruleTooltips.js'
export default {
name: 'GlobalLayout',
@ -188,7 +196,7 @@ export default {
setTimeout(function () {
self.hintCopied = ''
}, 2000)
}
},
}
}
</script>

View file

@ -1,3 +1,40 @@
#tooltip {
position: absolute;
display: none;
z-index: 1000;
text-align: left;
width: 50vw;
max-width: 555px;
min-width: 350px;
background-color: #fff;
color: #555;
box-shadow: 0 0 12px #333;
border-radius: 5px;
.tooltip-title {
background-color: $color-hero;
&.tooltip-spell {
background-color: $color-dragon;
}
// &.tooltip-condition {
// }
color: #fff;
font-family: 'Oswald', sans-serif;
font-weight: bold;
padding: 12px;
border-radius: 5px 5px 0 0;
}
.tooltip-content {
padding: 12px;
ul {
margin: 0;
padding: 0 0 0 15px;
}
}
}
.v-tooltip__content {
&.spell-tooltip-container,
&.condition-tooltip-container {

View file

@ -262,3 +262,57 @@ export function isResourceInLibrary (resource, library) {
}
return false
}
/*
** Handles rule tooltips like conditions
*/
import { tooltips } from '../../data/ruleTooltips.js'
export function handleTooltips (component) {
if (!component) {
component = document
}
// Gestion des tooltips
let tooltip = document.getElementById('tooltip')
let tooltipTitle = document.getElementById('tooltip-title')
let tooltipContent = document.getElementById('tooltip-content')
window.onmousemove = function (e) {
var x = e.pageX + 20,
y = e.pageY + 20;
tooltip.style.top = y + 'px';
tooltip.style.left = x + 'px';
// Get calculated tooltip coordinates and size
var tooltip_rect = tooltip.getBoundingClientRect();
// Corrections if out of window
if ((tooltip_rect.x + tooltip_rect.width) > window.innerWidth) // Out on the right
x = x - tooltip_rect.width - 20; // Simulate a "right: tipX" position
if ((tooltip_rect.y + tooltip_rect.height) > window.innerHeight) // Out on the bottom
y = y - tooltip_rect.height - 20; // Align on the bottom
// Apply corrected position
tooltip.style.top = y + 'px';
tooltip.style.left = x + 'px';
}
// Arborescence des liens
let links = component.querySelectorAll("a")
for (var l of links) {
let hash = l.hash.replace('#', '')
if (hash != "" && tooltips[hash]) {
l.addEventListener("mouseover", function( event ) {
tooltipTitle.innerHTML = tooltips[hash].title
let tcontent = '<ul>'
for (var d of tooltips[hash].description) {
tcontent += '<li>' + d + '</li>'
}
tcontent += '</ul>'
tooltipContent.innerHTML = tcontent
tooltip.style.display = 'block'
}, false);
l.addEventListener("mouseout", function( event ) {
tooltip.style.display = 'none'
}, false);
}
}
}