edit: ajout d'une série de fenêtre flottantes déplaçable avec sytème de focus + transformation msgVisualizer en composant séparé et réglages associés
This commit is contained in:
@@ -29,6 +29,7 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
/*================ PC LARGE*/
|
/*================ PC LARGE*/
|
||||||
@media(min-width:1300px){
|
@media(min-width:1300px){
|
||||||
|
|||||||
@@ -193,10 +193,20 @@ canvas {
|
|||||||
background-color: var(--back-color);
|
background-color: var(--back-color);
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: thin;
|
border-width: thin;
|
||||||
border-radius: 16.1px;
|
border-radius: 21px;
|
||||||
border-color: var(--main-color);
|
border-color: var(--main-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.zBase{
|
||||||
|
z-index: 33;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zFocus{
|
||||||
|
z-index: 333;
|
||||||
|
border-color: var(--accent-color);
|
||||||
|
border-width: thick;
|
||||||
|
}
|
||||||
|
|
||||||
.windowTitle{
|
.windowTitle{
|
||||||
width:100%;
|
width:100%;
|
||||||
height:50px;
|
height:50px;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="infoContainer">
|
<div id="infoContainer">
|
||||||
<InfoMenuDiv></InfoMenuDiv>
|
<InfoMenuDiv></InfoMenuDiv>
|
||||||
<InboxDiv></InboxDiv>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -28,6 +27,7 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
/*================ PC LARGE*/
|
/*================ PC LARGE*/
|
||||||
@media(min-width:1300px){
|
@media(min-width:1300px){
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { reactive } from 'vue'
|
||||||
|
|
||||||
|
export const dataStorage = reactive({
|
||||||
|
selectedMsg: { //empty msg template
|
||||||
|
title: '',
|
||||||
|
date: '',
|
||||||
|
content: '',
|
||||||
|
like: 0,
|
||||||
|
isLiked: false,
|
||||||
|
going: 0,
|
||||||
|
isGoing: false,
|
||||||
|
wasRead: false,
|
||||||
|
isSelected: false,
|
||||||
|
isEvent: false
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
<script setup>
|
||||||
|
import CloseIcon from '../assets/icons/close.svg'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="artistPannel" class="windowStyle" ref="artistPannel" @mousedown="$emit('focus')" @touchstart="$emit('focus')">
|
||||||
|
<Moveable
|
||||||
|
className="moveable"
|
||||||
|
:target="target"
|
||||||
|
:draggable="true"
|
||||||
|
@drag="onDrag"
|
||||||
|
/>
|
||||||
|
<div class="windowTitle">
|
||||||
|
<p>
|
||||||
|
<b class="windowTitleLower">À PROPOS DE</b>
|
||||||
|
<br>
|
||||||
|
Nos Artistes
|
||||||
|
</p>
|
||||||
|
<!-- touchstart.capture pour passer en prio sur déplacement fenêtre/ .stop si pas de method-->
|
||||||
|
<button type="button" class="closeBtn" @mousedown.capture="$emit('close')" @touchstart.capture="$emit('close')">
|
||||||
|
<CloseIcon name="close" class="icon"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="windowContent">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/*================= Mise en page:
|
||||||
|
=> Mobile First : par défaut, moins de 500px
|
||||||
|
=> Tablette et PC format haut : de 500 à 1000px
|
||||||
|
=> PC large : à partir de 1000px
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*+++++++++++++++++ COPYBOX
|
||||||
|
================ PC HAUT/IPAD
|
||||||
|
@media(min-width:650px){}
|
||||||
|
================ PC LARGE
|
||||||
|
@media(min-width:1300px){}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#artistPannel{
|
||||||
|
position: fixed;
|
||||||
|
width: 333px;
|
||||||
|
height: 500px;
|
||||||
|
top: 16.1px;
|
||||||
|
left: 16.1px;
|
||||||
|
}
|
||||||
|
/*================ PC LARGE*/
|
||||||
|
@media(min-width:1300px){
|
||||||
|
#artistPannel{
|
||||||
|
height: 777px;
|
||||||
|
width: 666px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Moveable from 'vue3-moveable';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name : 'ArtistPannel',
|
||||||
|
components:{
|
||||||
|
Moveable
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
target: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emits: ['close','focus'],
|
||||||
|
methods:{
|
||||||
|
onDrag({ target, transform }) {
|
||||||
|
target.style.transform = transform;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
this.target = this.$refs.artistPannel;
|
||||||
|
console.log("Artist pannel is loaded!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<script setup>
|
||||||
|
import CloseIcon from '../assets/icons/close.svg'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="contactPannel" class="windowStyle" ref="contactPannel" @mousedown="$emit('focus')" @touchstart="$emit('focus')">
|
||||||
|
<Moveable
|
||||||
|
className="moveable"
|
||||||
|
:target="target"
|
||||||
|
:draggable="true"
|
||||||
|
@drag="onDrag"
|
||||||
|
/>
|
||||||
|
<div class="windowTitle">
|
||||||
|
<p>
|
||||||
|
Contacter l'orga :
|
||||||
|
</p>
|
||||||
|
<!-- touchstart.capture pour passer en prio sur déplacement fenêtre/ .stop si pas de method-->
|
||||||
|
<button type="button" class="closeBtn" @mousedown.capture="$emit('close')" @touchstart.capture="$emit('close')">
|
||||||
|
<CloseIcon name="close" class="icon"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="windowContent">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/*================= Mise en page:
|
||||||
|
=> Mobile First : par défaut, moins de 500px
|
||||||
|
=> Tablette et PC format haut : de 500 à 1000px
|
||||||
|
=> PC large : à partir de 1000px
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*+++++++++++++++++ COPYBOX
|
||||||
|
================ PC HAUT/IPAD
|
||||||
|
@media(min-width:650px){}
|
||||||
|
================ PC LARGE
|
||||||
|
@media(min-width:1300px){}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#contactPannel{
|
||||||
|
position: fixed;
|
||||||
|
width: 333px;
|
||||||
|
height: 333px;
|
||||||
|
top: 154px;
|
||||||
|
left: 66px;
|
||||||
|
}
|
||||||
|
/*================ PC LARGE*/
|
||||||
|
@media(min-width:1300px){
|
||||||
|
#contactPannel{
|
||||||
|
height: 444px;
|
||||||
|
width: 444px;
|
||||||
|
left: 366px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Moveable from 'vue3-moveable';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name : 'ContactPannel',
|
||||||
|
components:{
|
||||||
|
Moveable
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
target: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emits: ['close','focus'],
|
||||||
|
methods:{
|
||||||
|
onDrag({ target, transform }) {
|
||||||
|
target.style.transform = transform;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
this.target = this.$refs.contactPannel;
|
||||||
|
console.log("Contact pannel is loaded!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<script setup>
|
||||||
|
import CloseIcon from '../assets/icons/close.svg'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="instaPannel" class="windowStyle" ref="instaPannel" @mousedown="$emit('focus')" @touchstart="$emit('focus')">
|
||||||
|
<Moveable
|
||||||
|
className="moveable"
|
||||||
|
:target="target"
|
||||||
|
:draggable="true"
|
||||||
|
@drag="onDrag"
|
||||||
|
/>
|
||||||
|
<div class="windowTitle">
|
||||||
|
<p>
|
||||||
|
ATTENTION!
|
||||||
|
</p>
|
||||||
|
<!-- touchstart.capture pour passer en prio sur déplacement fenêtre/ .stop si pas de method-->
|
||||||
|
<button type="button" class="closeBtn" @mousedown.capture="$emit('close')" @touchstart.capture="$emit('close')">
|
||||||
|
<CloseIcon name="close" class="icon"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="windowContent">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/*================= Mise en page:
|
||||||
|
=> Mobile First : par défaut, moins de 500px
|
||||||
|
=> Tablette et PC format haut : de 500 à 1000px
|
||||||
|
=> PC large : à partir de 1000px
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*+++++++++++++++++ COPYBOX
|
||||||
|
================ PC HAUT/IPAD
|
||||||
|
@media(min-width:650px){}
|
||||||
|
================ PC LARGE
|
||||||
|
@media(min-width:1300px){}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#instaPannel{
|
||||||
|
position: fixed;
|
||||||
|
width: 333px;
|
||||||
|
height: 161px;
|
||||||
|
top: 333px;
|
||||||
|
left: 33px;
|
||||||
|
}
|
||||||
|
/*================ PC LARGE*/
|
||||||
|
@media(min-width:1300px){
|
||||||
|
#instaPannel{
|
||||||
|
height: 250px;
|
||||||
|
width: 444px;
|
||||||
|
left:333px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Moveable from 'vue3-moveable';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name : 'InstaPannel',
|
||||||
|
components:{
|
||||||
|
Moveable
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
target: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emits: ['close','focus'],
|
||||||
|
methods:{
|
||||||
|
onDrag({ target, transform }) {
|
||||||
|
target.style.transform = transform;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
this.target = this.$refs.instaPannel;
|
||||||
|
console.log("Insta pannel is loaded!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
<script setup>
|
||||||
|
import CloseIcon from '../assets/icons/close.svg'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="windowStyle" id="msgVisualizer" ref="msgPannel" @mousedown="$emit('focus')" @touchstart="$emit('focus')">
|
||||||
|
<Moveable
|
||||||
|
className="moveable"
|
||||||
|
:target="$refs.msgPannel"
|
||||||
|
:draggable="true"
|
||||||
|
@drag="onDrag"
|
||||||
|
/>
|
||||||
|
<div class="windowTitle">
|
||||||
|
<p>
|
||||||
|
<b class="windowTitleLower">Message du {{selectedMsg.date}}</b>
|
||||||
|
<br>
|
||||||
|
{{selectedMsg.title}}
|
||||||
|
</p>
|
||||||
|
<!-- touchstart.capture pour passer en prio sur déplacement fenêtre/ .stop si pas de method-->
|
||||||
|
<button type="button" class="closeBtn" @mousedown.stop @touchstart.capture="closeMsg" @click="closeMsg">
|
||||||
|
<CloseIcon name="close" class="icon"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="windowContent">
|
||||||
|
<div class="msgReact">
|
||||||
|
<p class="reactStatStyle">{{selectedMsg.like}}</p>
|
||||||
|
<button type="button" class="iconBtnStyle" :class="{reactedStyle: selectedMsg.isLiked}" @mousedown.capture="likeMsg" @touchstart.capture="likeMsg">
|
||||||
|
<CloseIcon name="test" class="icon"/>
|
||||||
|
</button>
|
||||||
|
<p v-show="selectedMsg.isEvent" class="reactStatStyle">{{selectedMsg.going}}</p>
|
||||||
|
<button v-show="selectedMsg.isEvent" type="button" class="textBtnStyle" :class="{reactedStyle: selectedMsg.isGoing}" @mousedown.capture="goingToEvent" @touchstart.capture="goingToEvent">
|
||||||
|
JE PARTICIPE!
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p id="selectedMsgText" @touchstart.stop>{{selectedMsg.content}}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/*================= Mise en page:
|
||||||
|
=> Mobile First : par défaut, moins de 500px
|
||||||
|
=> Tablette et PC format haut : de 500 à 1000px
|
||||||
|
=> PC large : à partir de 1000px
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*+++++++++++++++++ COPYBOX
|
||||||
|
================ PC HAUT/IPAD
|
||||||
|
@media(min-width:650px){}
|
||||||
|
================ PC LARGE
|
||||||
|
@media(min-width:1300px){}
|
||||||
|
*/
|
||||||
|
#msgVisualizer{
|
||||||
|
position: fixed;
|
||||||
|
top:50%;
|
||||||
|
left:3.33%;
|
||||||
|
width: 333px;
|
||||||
|
height: 333px;
|
||||||
|
}
|
||||||
|
/*================ PC LARGE*/
|
||||||
|
@media(min-width:1000px){
|
||||||
|
#msgVisualizer{
|
||||||
|
left: 45%;
|
||||||
|
top: 33.3%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.windowContent .msgReact{
|
||||||
|
margin-left: -16.1%;
|
||||||
|
width: 77%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
font-family: 'lineal';
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.windowContent .reactStatStyle{
|
||||||
|
text-align: center;
|
||||||
|
width: 33px;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
.windowContent .icon{
|
||||||
|
height: 16.1px;
|
||||||
|
width: auto;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.windowContent .iconBtnStyle{
|
||||||
|
height: 33px;
|
||||||
|
width: 33px;
|
||||||
|
border-radius: 33px;
|
||||||
|
}
|
||||||
|
.windowContent .textBtnStyle{
|
||||||
|
height: 33px;
|
||||||
|
width: 130px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#selectedMsgText{
|
||||||
|
white-space: pre-line;
|
||||||
|
font-size: 16.1px;
|
||||||
|
font-family: 'velvelyne';
|
||||||
|
color: var(--main-color);
|
||||||
|
font-weight: bold;
|
||||||
|
padding-right: 16.1px;
|
||||||
|
padding-left: 7.77px;
|
||||||
|
margin-top: 0;
|
||||||
|
height: 77%;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reactedStyle{
|
||||||
|
color: var(--accent-color);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Moveable from 'vue3-moveable';
|
||||||
|
import { dataStorage } from '../dataExchange.js'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name : 'MessagePannel',
|
||||||
|
components:{
|
||||||
|
Moveable
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
target: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emits: ['close','focus'],
|
||||||
|
computed:{
|
||||||
|
selectedMsg(){
|
||||||
|
return dataStorage.selectedMsg
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
onDrag({ target, transform }) {
|
||||||
|
target.style.transform = transform;
|
||||||
|
},
|
||||||
|
likeMsg(){
|
||||||
|
dataStorage.selectedMsg.isLiked = !dataStorage.selectedMsg.isLiked
|
||||||
|
},
|
||||||
|
goingToEvent(){
|
||||||
|
dataStorage.selectedMsg.isGoing = !dataStorage.selectedMsg.isGoing;
|
||||||
|
},
|
||||||
|
closeMsg(){
|
||||||
|
this.$emit('close');
|
||||||
|
dataStorage.selectedMsg.isSelected = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
this.target = this.$refs.msgPannel;
|
||||||
|
console.log("Message pannel is loaded!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<script setup>
|
||||||
|
import CloseIcon from '../assets/icons/close.svg'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="newsletterPannel" class="windowStyle" ref="newsletterPannel" @mousedown="$emit('focus')" @touchstart="$emit('focus')">
|
||||||
|
<Moveable
|
||||||
|
className="moveable"
|
||||||
|
:target="target"
|
||||||
|
:draggable="true"
|
||||||
|
@drag="onDrag"
|
||||||
|
/>
|
||||||
|
<div class="windowTitle">
|
||||||
|
<p>
|
||||||
|
Newsletter
|
||||||
|
</p>
|
||||||
|
<!-- touchstart.capture pour passer en prio sur déplacement fenêtre/ .stop si pas de method-->
|
||||||
|
<button type="button" class="closeBtn" @mousedown.capture="$emit('close')" @touchstart.capture="$emit('close')">
|
||||||
|
<CloseIcon name="close" class="icon"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="windowContent">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/*================= Mise en page:
|
||||||
|
=> Mobile First : par défaut, moins de 500px
|
||||||
|
=> Tablette et PC format haut : de 500 à 1000px
|
||||||
|
=> PC large : à partir de 1000px
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*+++++++++++++++++ COPYBOX
|
||||||
|
================ PC HAUT/IPAD
|
||||||
|
@media(min-width:650px){}
|
||||||
|
================ PC LARGE
|
||||||
|
@media(min-width:1300px){}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#newsletterPannel{
|
||||||
|
position: fixed;
|
||||||
|
width: 333px;
|
||||||
|
height: 161px;
|
||||||
|
top: 77px;
|
||||||
|
left: 33px;
|
||||||
|
}
|
||||||
|
/*================ PC LARGE*/
|
||||||
|
@media(min-width:1300px){
|
||||||
|
#newsletterPannel{
|
||||||
|
height: 250px;
|
||||||
|
width: 444px;
|
||||||
|
left:333px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Moveable from 'vue3-moveable';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name : 'NewsletterPannel',
|
||||||
|
components:{
|
||||||
|
Moveable
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
target: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
emits: ['close','focus'],
|
||||||
|
methods:{
|
||||||
|
onDrag({ target, transform }) {
|
||||||
|
target.style.transform = transform;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
this.target = this.$refs.newsletterPannel;
|
||||||
|
console.log("Newsletter pannel is loaded!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -28,40 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="windowStyle" v-show="msgSelected" id="msgVisualizer" ref="msgPannel">
|
|
||||||
<Moveable
|
|
||||||
className="moveable"
|
|
||||||
:target="$refs.msgPannel"
|
|
||||||
:draggable="true"
|
|
||||||
@drag="onDrag"
|
|
||||||
/>
|
|
||||||
<div class="windowTitle">
|
|
||||||
<p>
|
|
||||||
<b class="windowTitleLower">Message du {{selectedMsg.date}}</b>
|
|
||||||
<br>
|
|
||||||
{{selectedMsg.title}}
|
|
||||||
</p>
|
|
||||||
<!-- touchstart.capture pour passer en prio sur déplacement fenêtre/ .stop si pas de method-->
|
|
||||||
<button type="button" class="closeBtn" @mousedown.stop @touchstart.capture="toggleMsg" @click="toggleMsg">
|
|
||||||
<CloseIcon name="close" class="icon"/>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="windowContent">
|
|
||||||
<div class="msgReact">
|
|
||||||
<p class="reactStatStyle">{{selectedMsg.like}}</p>
|
|
||||||
<button type="button" class="iconBtnStyle" :class="{reactedStyle: selectedMsg.isLiked}" @mousedown.capture="likeMsg" @touchstart.capture="likeMsg">
|
|
||||||
<CloseIcon name="test" class="icon"/>
|
|
||||||
</button>
|
|
||||||
<p v-show="selectedMsg.isEvent" class="reactStatStyle">{{selectedMsg.going}}</p>
|
|
||||||
<button v-show="selectedMsg.isEvent" type="button" class="textBtnStyle" :class="{reactedStyle: selectedMsg.isGoing}" @mousedown.capture="goingToEvent" @touchstart.capture="goingToEvent">
|
|
||||||
JE PARTICIPE!
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<p id="selectedMsgText" @touchstart.stop>{{selectedMsg.content}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -78,21 +45,6 @@
|
|||||||
@media(min-width:1000px){}
|
@media(min-width:1000px){}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#msgVisualizer{
|
|
||||||
position: fixed;
|
|
||||||
top:50%;
|
|
||||||
left:3.33%;
|
|
||||||
width: 333px;
|
|
||||||
height: 333px;
|
|
||||||
}
|
|
||||||
/*================ PC LARGE*/
|
|
||||||
@media(min-width:1000px){
|
|
||||||
#msgVisualizer{
|
|
||||||
left: 45%;
|
|
||||||
top: 33.3%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#inboxContainer{
|
#inboxContainer{
|
||||||
width:100%;
|
width:100%;
|
||||||
position:relative;
|
position:relative;
|
||||||
@@ -230,47 +182,6 @@
|
|||||||
margin-top: -3.33px;
|
margin-top: -3.33px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.windowContent .msgReact{
|
|
||||||
margin-left: -16.1%;
|
|
||||||
width: 77%;
|
|
||||||
justify-content: flex-start;
|
|
||||||
font-family: 'lineal';
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.windowContent .reactStatStyle{
|
|
||||||
text-align: center;
|
|
||||||
width: 33px;
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
.windowContent .icon{
|
|
||||||
height: 16.1px;
|
|
||||||
width: auto;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
.windowContent .iconBtnStyle{
|
|
||||||
height: 33px;
|
|
||||||
width: 33px;
|
|
||||||
border-radius: 33px;
|
|
||||||
}
|
|
||||||
.windowContent .textBtnStyle{
|
|
||||||
height: 33px;
|
|
||||||
width: 130px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#selectedMsgText{
|
|
||||||
white-space: pre-line;
|
|
||||||
font-size: 16.1px;
|
|
||||||
font-family: 'velvelyne';
|
|
||||||
color: var(--main-color);
|
|
||||||
font-weight: bold;
|
|
||||||
padding-right: 16.1px;
|
|
||||||
padding-left: 7.77px;
|
|
||||||
margin-top: 0;
|
|
||||||
height: 77%;
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reactedStyle{
|
.reactedStyle{
|
||||||
color: var(--accent-color);
|
color: var(--accent-color);
|
||||||
}
|
}
|
||||||
@@ -285,33 +196,25 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Moveable from 'vue3-moveable';
|
import Moveable from 'vue3-moveable';
|
||||||
|
import { dataStorage } from '../dataExchange.js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name : 'InboxContent',
|
name : 'InboxContent',
|
||||||
|
emits: ['open'],
|
||||||
methods:{
|
methods:{
|
||||||
onDrag({ target, transform }) {
|
onDrag({ target, transform }) {
|
||||||
target.style.transform = transform;
|
target.style.transform = transform;
|
||||||
},
|
},
|
||||||
toggleMsg(){
|
|
||||||
this.msgSelected = !this.msgSelected;
|
|
||||||
if (!this.msgSelected){
|
|
||||||
for (let k in this.msgList){
|
|
||||||
this.msgList[k].isSelected = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
selectMsg(e){
|
selectMsg(e){
|
||||||
for(let i in this.msgList){
|
for(let i in this.msgList){
|
||||||
this.msgList[i].isSelected = false;
|
this.msgList[i].isSelected = false;
|
||||||
}
|
}
|
||||||
this.selectedMsg = e
|
this.selectedMsg = e;
|
||||||
|
dataStorage.selectedMsg = this.selectedMsg;
|
||||||
|
this.$emit('open');
|
||||||
e.isSelected = true;
|
e.isSelected = true;
|
||||||
e.wasRead = true;
|
e.wasRead = true;
|
||||||
this.unreadMsg();
|
this.unreadMsg();
|
||||||
if(!this.msgSelected){
|
|
||||||
this.msgSelected = true;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
unreadMsg(){
|
unreadMsg(){
|
||||||
this.msgNumber = 0;
|
this.msgNumber = 0;
|
||||||
@@ -319,12 +222,6 @@
|
|||||||
if (!this.msgList[j].wasRead)
|
if (!this.msgList[j].wasRead)
|
||||||
this.msgNumber += 1;
|
this.msgNumber += 1;
|
||||||
}
|
}
|
||||||
},
|
|
||||||
likeMsg(){
|
|
||||||
this.selectedMsg.isLiked = !this.selectedMsg.isLiked;
|
|
||||||
},
|
|
||||||
goingToEvent(){
|
|
||||||
this.selectedMsg.isGoing = !this.selectedMsg.isGoing;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
@@ -342,8 +239,7 @@
|
|||||||
wasRead: false,
|
wasRead: false,
|
||||||
isSelected: false,
|
isSelected: false,
|
||||||
isEvent: false
|
isEvent: false
|
||||||
},
|
}
|
||||||
msgSelected: false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted(){
|
mounted(){
|
||||||
|
|||||||
@@ -14,20 +14,52 @@
|
|||||||
<button type="button" class="textBtnStyle">NOUS SUIVRE HORS DES RÉSEAUX!</button>
|
<button type="button" class="textBtnStyle">NOUS SUIVRE HORS DES RÉSEAUX!</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="btnColumn">
|
<div id="btnColumn">
|
||||||
<button type="button" class="iconBtnStyle" id="btn001">
|
<button type="button" class="iconBtnStyle" id="btnArtist" @click="openPannel('artist')">
|
||||||
<CloseIcon name="test" class="icon"/>
|
<CloseIcon name="test" class="icon"/>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="iconBtnStyle" id="btn002">
|
<button type="button" class="iconBtnStyle" id="btnNews" @click="openPannel('news')">
|
||||||
<CloseIcon name="test" class="icon"/>
|
<CloseIcon name="test" class="icon"/>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="iconBtnStyle" id="btn003">
|
<button type="button" class="iconBtnStyle" id="btnInsta" @click="openPannel('insta')">
|
||||||
<CloseIcon name="test" class="icon"/>
|
<CloseIcon name="test" class="icon"/>
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="iconBtnStyle" id="btn004">
|
<button type="button" class="iconBtnStyle" id="btnContact" @click="openPannel('contact')">
|
||||||
<CloseIcon name="test" class="icon"/>
|
<CloseIcon name="test" class="icon"/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!--'msg' 'insta' 'news' 'contact' 'artist'-->
|
||||||
|
<InboxDiv @open="openPannel('msg')"></InboxDiv>
|
||||||
|
<ArtistPan
|
||||||
|
v-show="isActive.includes('artist')"
|
||||||
|
@close="closePannel('artist')"
|
||||||
|
@focus="focusPannel('artist')"
|
||||||
|
:class="{zBase: isFocused!=='artist', zFocus: isFocused==='artist'}">
|
||||||
|
</ArtistPan>
|
||||||
|
<NewsPan
|
||||||
|
v-show="isActive.includes('news')"
|
||||||
|
@close="closePannel('news')"
|
||||||
|
@focus="focusPannel('news')"
|
||||||
|
:class="{zBase: isFocused!=='news', zFocus: isFocused==='news'}">
|
||||||
|
</NewsPan>
|
||||||
|
<ContactPan
|
||||||
|
v-show="isActive.includes('contact')"
|
||||||
|
@close="closePannel('contact')"
|
||||||
|
@focus="focusPannel('contact')"
|
||||||
|
:class="{zBase: isFocused!=='contact', zFocus: isFocused==='contact'}">
|
||||||
|
</ContactPan>
|
||||||
|
<InstaPan
|
||||||
|
v-show="isActive.includes('insta')"
|
||||||
|
@close="closePannel('insta')"
|
||||||
|
@focus="focusPannel('insta')"
|
||||||
|
:class="{zBase: isFocused!=='insta', zFocus: isFocused==='insta'}">
|
||||||
|
</InstaPan>
|
||||||
|
<MessagePan
|
||||||
|
v-show="isActive.includes('msg')"
|
||||||
|
@close="closePannel('msg')"
|
||||||
|
@focus="focusPannel('msg')"
|
||||||
|
:class="{zBase: isFocused!=='msg', zFocus: isFocused==='msg'}">
|
||||||
|
</MessagePan>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -137,6 +169,34 @@
|
|||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name : 'InfoMenu',
|
name : 'InfoMenu',
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
isActive: [],
|
||||||
|
isFocused: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
openPannel(name){
|
||||||
|
if(!this.isActive.includes(name)){
|
||||||
|
this.isActive.push(name);
|
||||||
|
}
|
||||||
|
this.isFocused = name;
|
||||||
|
},
|
||||||
|
focusPannel(name){
|
||||||
|
if(this.isActive.includes(name)){
|
||||||
|
this.isFocused = name;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closePannel(name){
|
||||||
|
const index = this.isActive.indexOf(name)
|
||||||
|
if(index !== -1){
|
||||||
|
this.isActive.splice(index,1);
|
||||||
|
}
|
||||||
|
if(this.isFocused === name){
|
||||||
|
this.isFocused = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
mounted(){
|
mounted(){
|
||||||
console.log("Info menu is loaded!");
|
console.log("Info menu is loaded!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,19 @@ import App from './App.vue'
|
|||||||
// import composants
|
// import composants
|
||||||
import TitleContent from './components/TitleContent.vue'
|
import TitleContent from './components/TitleContent.vue'
|
||||||
import InfoContent from './components/InfoContent.vue'
|
import InfoContent from './components/InfoContent.vue'
|
||||||
|
//title
|
||||||
import TitleText from './titleComponents/TitleText.vue'
|
import TitleText from './titleComponents/TitleText.vue'
|
||||||
import GeneratedContent from './titleComponents/GeneratedContent.vue'
|
import GeneratedContent from './titleComponents/GeneratedContent.vue'
|
||||||
import MusicPlayer from './titleComponents/MusicPlayer.vue'
|
import MusicPlayer from './titleComponents/MusicPlayer.vue'
|
||||||
|
//info
|
||||||
import InfoMenu from './infoComponents/InfoMenu.vue'
|
import InfoMenu from './infoComponents/InfoMenu.vue'
|
||||||
import InboxContent from './infoComponents/InboxContent.vue'
|
import InboxContent from './infoComponents/InboxContent.vue'
|
||||||
|
//indie
|
||||||
|
import ArtistPannel from './indieComponents/ArtistPannel.vue'
|
||||||
|
import NewsletterPannel from './indieComponents/NewsletterPannel.vue'
|
||||||
|
import ContactPannel from './indieComponents/ContactPannel.vue'
|
||||||
|
import InstaPannel from './indieComponents/InstaPannel.vue'
|
||||||
|
import MessagePannel from './indieComponents/MessagePannel.vue'
|
||||||
|
|
||||||
// création app racine
|
// création app racine
|
||||||
const app = createApp(App);
|
const app = createApp(App);
|
||||||
@@ -18,11 +26,19 @@ const app = createApp(App);
|
|||||||
//Composants
|
//Composants
|
||||||
app.component('TitleDiv', TitleContent);
|
app.component('TitleDiv', TitleContent);
|
||||||
app.component('InfoDiv', InfoContent);
|
app.component('InfoDiv', InfoContent);
|
||||||
|
//title
|
||||||
app.component('PlayerDiv', MusicPlayer);
|
app.component('PlayerDiv', MusicPlayer);
|
||||||
app.component('TitleTextDiv', TitleText);
|
app.component('TitleTextDiv', TitleText);
|
||||||
app.component('GeneratedDiv',GeneratedContent);
|
app.component('GeneratedDiv',GeneratedContent);
|
||||||
|
//info
|
||||||
app.component('InfoMenuDiv', InfoMenu);
|
app.component('InfoMenuDiv', InfoMenu);
|
||||||
app.component('InboxDiv', InboxContent);
|
app.component('InboxDiv', InboxContent);
|
||||||
|
//indie
|
||||||
|
app.component('ArtistPan', ArtistPannel);
|
||||||
|
app.component('NewsPan', NewsletterPannel);
|
||||||
|
app.component('ContactPan', ContactPannel);
|
||||||
|
app.component('InstaPan', InstaPannel);
|
||||||
|
app.component('MessagePan', MessagePannel);
|
||||||
|
|
||||||
//Montage dans div#app de index.html
|
//Montage dans div#app de index.html
|
||||||
app.mount('#app');
|
app.mount('#app');
|
||||||
|
|||||||
@@ -1,6 +1,21 @@
|
|||||||
<template>
|
<script setup>
|
||||||
<div id="playerContainer" class="uiStyle">
|
import CloseIcon from '../assets/icons/close.svg'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="playerContainer">
|
||||||
|
<div id="playerCreditStyle">
|
||||||
|
<p>Test-333</p>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="iconBtnStyle">
|
||||||
|
<CloseIcon name="test" class="icon"/>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="iconBtnStyle">
|
||||||
|
<CloseIcon name="test" class="icon"/>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="iconBtnStyle">
|
||||||
|
<CloseIcon name="test" class="icon"/>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -21,12 +36,52 @@
|
|||||||
#playerContainer{
|
#playerContainer{
|
||||||
width:100%;
|
width:100%;
|
||||||
position:relative;
|
position:relative;
|
||||||
height:10%;
|
height:7.77%;
|
||||||
|
background-color: transparent;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
padding-top: 13.12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#playerContainer .iconBtnStyle{
|
||||||
|
width: 33px;
|
||||||
|
height: 33px;
|
||||||
|
margin-left: 16.1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#playerCreditStyle{
|
||||||
|
width: 50%;
|
||||||
|
height: 50px;
|
||||||
|
background-color: var(--back-color);
|
||||||
|
color: var(--main-color);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 16.1px;
|
||||||
|
padding-left: 16.1px;
|
||||||
|
border-radius: 66px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: var(--main-color);
|
||||||
|
border-width: thin;
|
||||||
|
font-family: 'velvelyne';
|
||||||
|
font-size: 16.1px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*================ PC LARGE*/
|
/*================ PC LARGE*/
|
||||||
@media(min-width:1000px){
|
@media(min-width:1300px){
|
||||||
#playerContainer{
|
#playerContainer{
|
||||||
height: 13%;
|
height: 7.77%;
|
||||||
|
padding: 16.1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#playerCreditStyle{
|
||||||
|
margin-left: 33px;
|
||||||
|
width: 33.3%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -49,9 +49,7 @@
|
|||||||
|
|
||||||
#titleTextContainer{
|
#titleTextContainer{
|
||||||
width:100%;
|
width:100%;
|
||||||
position:relative;
|
height:24%;
|
||||||
height:20%;
|
|
||||||
z-index: 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#mainTitleContainer{
|
#mainTitleContainer{
|
||||||
|
|||||||
Reference in New Issue
Block a user