ifx merge for update

This commit is contained in:
2020-08-01 17:34:10 +02:00
62 changed files with 3278 additions and 946 deletions

View File

@@ -4,7 +4,7 @@
<div v-if="authUser" class="w-full overflow-y-auto">
<TopBar />
<main>
<router-view :key="$route.fullPath"></router-view>
<router-view :key="$route.fullPath" class="bg-gray-200"></router-view>
</main>
</div>
</div>

View File

@@ -1,7 +1,7 @@
<template>
<div class="relative mb-2">
<label v-if="label" :for="name" class="pb-2 font-bold text-xl ml-1">{{ label }}</label>
<input :id="name" :type="type" :placeholder="placeholder" v-model="value" @input="updateField()" :class="'w-full rounded p-2 ' + classes + ' ' + errorClassObject()">
<input :id="name" :type="type" :placeholder="placeholder" v-model="value" @input="updateField()" :class="'w-full p-2 ' + classes + ' ' + errorClassObject()">
<p class="text-red-600 m-0" v-text="errorMessage()">Error Here</p>
</div>
</template>

View File

@@ -1,7 +1,7 @@
<template>
<div class="top-bar flex justify-between bg-gray-600">
<div class="top-bar relative z-10 flex justify-between bg-marine h-16">
<router-link v-if="authUser" :to="'/profile'" class="flex items-center m-2">
<Avatar :avatar="authUser.data.attributes.profile_image.data.attributes.path" size="small" :alt="authUser.data.attributes.name" class="w-10 h-10"/>
<Avatar :avatar="authUser.data.attributes.thumbnail_cover_image.data.attributes.path" size="small" :alt="authUser.data.attributes.name" class="w-10 h-10"/>
<span class="ml-2 text-gray-100 hover:text-white">{{ authUser.data.attributes.name }}</span>
</router-link>
<form v-if="authUser && search" class="m-2">
@@ -11,7 +11,7 @@
</button>
</form>
<router-link to="/dashboard" v-if="authUser" class="text-gray-100 hover:text-white">
<svg-vue icon="params" class="w-10 m-2 fill-current" />
<svg-vue icon="params" class="w-10 m-3 fill-current" />
</router-link>
<router-link v-else to="/login">
Se connecter

View File

@@ -0,0 +1,30 @@
<template>
<div>
<div class="card block">
<h2>Raspberry Links</h2>
<ul class="mt-2">
<li><a v-for="(link, index) in links" :href="link.link" :key="index" target="_blank" class="block text-lg">{{ link.name }}</a></li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'AutomaticLinksHome',
data: function () {
return {
links: [
{ name: 'Météo', link: 'http://192.168.1.32/meteo/meteo'},
{ name: 'MotionEye', link: 'http://192.168.1.32:8765'},
{ name: 'TT-RSS', link: 'https://tt-rss.bricooli.fr'},
{ name: 'Pi-Hole', link: 'http://192.168.1.32/admin/index.php'},
{ name: 'RaspAp', link: 'http://192.168.1.32/raspap'},
{ name: 'Kodi', link: 'http://192.168.1.19:8080/'},
{ name: 'RaspiWeb Adminer', link: 'http://192.168.1.32/adminer.php'},
{ name: 'RaspiGate Adminer', link: 'http://192.168.1.29/adminer.php'},
],
}
},
}
</script>

View File

@@ -0,0 +1,52 @@
<template>
<div>
<div class="card flex flex-col">
<h2>Météo Home</h2>
<ul class="mt-2">
<li v-for="(captor, index) in captors" :key="index" class="block mb-4">
<div class="flex justify-between items-baseline mb-2">
<span class="font-bold text-lg">{{ captor.device }}</span>
<span class="text-sm">{{ captor.date_meteo }}</span>
</div>
<div class="flex flex-no-wrap text-sm -m-1">
<span v-if="captor.temperature" class="mx-1">{{ floated(captor.temperature) }} <span class="font-semibold text-xs">°C</span></span>
<span v-if="captor.humidite" class="mx-1">{{ floated(captor.humidite) }} <span class="font-semibold text-xs">%</span></span>
<span v-if="captor.pression" class="mx-1">{{ floated(captor.pression) }} <span class="font-semibold text-xs">hPa</span></span>
<span v-if="captor.lumiere" class="mx-1">{{ captor.lumiere }}</span>
</div>
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'AutomaticMeteoHome',
data: function () {
return {
captors: null,
}
},
mounted() {
// eslint-disable-next-line no-undef
axios.get('/api/automation/home')
.then(response => {
this.captors = response.data.data
console.log(response.data.data)
})
.catch(() => {
console.log('Unable to fetch memos.')
})
},
methods: {
floated: function (value) {
return value.toFixed(2)
}
},
}
</script>
<style scoped>
</style>

View File

@@ -1,68 +1,175 @@
<template>
<div class="m-2 p-2 bg-white">
<h1>testeur CSS</h1>
<h2>testeur CSS</h2>
<h3>testeur CSS</h3>
<h4>testeur CSS</h4>
<h5>testeur CSS</h5>
<h6>testeur CSS</h6>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<p>Lorem ipsum dolor sit amet, <strong>consectetur adipiscing elit</strong>, sed do <italic>eiusmod tempor incididunt</italic> ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<div class="py-4">
<a href="#" class="btn">Boutton</a>
<a href="#" class="btn-primary">Boutton primary</a>
<a href="#" class="btn-secondary">Boutton secondary</a>
<a href="#" class="btn-alert">Boutton alert</a>
<a href="#" class="btn-success">Button success</a>
</div>
<div class="py-4">
<a href="#" class="btn"><svg-vue icon="arrow" />Boutton</a>
<a href="#" class="btn-primary"><svg-vue icon="interrogation" />Boutton primary</a>
<a href="#" class="btn-secondary"><svg-vue icon="params" />Boutton secondary</a>
<a href="#" class="btn-alert"><svg-vue icon="close" />Boutton alert</a>
<a href="#" class="btn-success"><svg-vue icon="games" />Button success</a>
</div>
<div class="py-4">
<a href="#" class="btn svg"><svg-vue icon="close" /></a>
<a href="#" class="btn-primary svg"><svg-vue icon="close" /></a>
<a href="#" class="btn-secondary svg rounded-full"><svg-vue icon="close" /></a>
<a href="#" class="btn-alert svg"><svg-vue icon="close" /></a>
<a href="#" class="btn-success svg"><svg-vue icon="close" /></a>
</div>
<form>
<label class="mb-1">Test label</label>
<input type="text" placeholder="Test placeholder" class="mb-1">
<input type="number" class="mb-1">
<div>
<input type="checkbox" class="mb-1">
<label>Check me !</label>
</div>
<div>
<label class="custom-label flex">
<div class="bg-white shadow w-6 h-6 p-1 flex justify-center items-center mr-2">
<input type="checkbox" class="hidden" checked>
<div class="hidden check rounded-sm w-4 h-4 bg-gray-700 pointer-events-none"></div>
<div class="mx-2 p-2">
<div class="flex flex-wrap -mx-2">
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card bg-marine text-white shadow">
<div class="flex flex-col justify-between h-full">
<div class="text-xl">Active Users</div>
<div class="text-3xl font-bold">72</div>
<div class="mt-4">
<a href="#" class="text-white hover:text-marine-light uppercase">View Refferals -></a>
</div>
</div>
<span class="select-none"> This is a sample checkbox. All the text will toggle the state</span>
</label>
</div>
</div>
<div>
<label class="custom-label flex">
<div class="bg-white shadow w-6 h-6 p-1 flex justify-center items-center mr-2">
<input type="checkbox" class="hidden" checked>
<svg class="hidden w-4 h-4 text-green-600 pointer-events-none" viewBox="0 0 172 172"><g fill="none" stroke-width="none" stroke-miterlimit="10" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode:normal"><path d="M0 172V0h172v172z"/><path d="M145.433 37.933L64.5 118.8658 33.7337 88.0996l-10.134 10.1341L64.5 139.1341l91.067-91.067z" fill="currentColor" stroke-width="1"/></g></svg>
<div class="w-full sm:w-1/2 md:w-2/3 lg:w-3/4 mb-4">
<div class="card">
<div class="flex justify-between">
<span>Users</span>
<span class="flex-none text-green text-sm">268 %</span>
</div>
<span class="select-none"> This is a sample checkbox. All the text will toggle the state</span>
</label>
<div class="text-2xl font-bold">15K</div>
</div>
</div>
<select class="mb-1">
<option>test 1</option>
<option>test 2</option>
<option>test 3</option>
</select>
<textarea cols="30" rows="10" class="mb-1">Texte exemple</textarea>
<input type="submit" class="mb-1">
</form>
</div>
<div class="flex flex-wrap -mx-2">
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="flex justify-between">
<span>Users</span>
<span class="flex-none text-green text-sm">268 %</span>
</div>
<div class="text-2xl font-bold">15K</div>
</div>
</div>
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="flex justify-between">
<span>Sessions</span>
<span class="flex-none text-green text-sm">268 %</span>
</div>
<div class="text-2xl font-bold">17K</div>
</div>
</div>
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="flex justify-between items-start">
<span>Bouncing Rate</span>
<span class="flex-none text-red text-sm">- 158 %</span>
</div>
<div class="text-2xl font-bold">62.7 %</div>
</div>
</div>
<div class="flex-initial sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="flex justify-between">
<span>Session duration best of</span>
<span class="flex-none text-green text-sm">189 %</span>
</div>
<div class="text-2xl font-bold">1 m 32 s</div>
</div>
</div>
<div class="flex-initial sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="flex justify-between">
<span>Session duration best of</span>
<span class="flex-none text-green text-sm">189 %</span>
</div>
<div class="text-2xl font-bold">1 m 32 s</div>
</div>
</div>
<div class="flex-initial sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="-m-4">
<img src="https://portal.bricooli.fr/storage/images/default-cover.jpg" alt="" class="w-full rounded rounded-b-none">
</div>
<div class="h-full flex flex-col mt-6">
<h1 class="text-xl text-marine">Memo Name test</h1>
<span class="mt-auto self-end bg-gray-400 text-white tag">Il y a 3 mois</span>
</div>
</div>
</div>
<div class="flex-initial sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="-m-4">
<img src="https://portal.bricooli.fr/storage/images/default-cover.jpg" alt="" class="w-full rounded rounded-b-none">
</div>
<div class="h-full flex flex-col mt-6">
<h1 class="text-xl text-marine">Memo Name test</h1>
<p class="no-indent">Anim consequat duis culpa in anim aliquip dolore amet laboris eu fugiat commodo reprehenderit aute amet velit sit culpa et proident irure pariatur</p>
<span class="mt-auto self-end bg-gray-400 text-white tag">Il y a 3 mois</span>
</div>
</div>
</div>
<div class="flex-initial sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4">
<div class="card">
<div class="-m-4">
<img src="https://portal.bricooli.fr/storage/images/default-cover.jpg" alt="" class="w-full rounded rounded-b-none">
</div>
<div class="h-full flex flex-col mt-6">
<h1 class="text-xl text-marine">Memo Name test</h1>
<p class="no-indent">Anim consequat duis culpa in anim aliquip dolore amet laboris eu fugiat commodo reprehenderit</p>
<span class="mt-auto self-end bg-gray-400 text-white tag">Il y a 3 mois</span>
</div>
</div>
</div>
</div>
<div class="box">
<h1>testeur CSS</h1>
<h2>testeur CSS</h2>
<h3>testeur CSS</h3>
<h4>testeur CSS</h4>
<h5>testeur CSS</h5>
<h6>testeur CSS</h6>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<p>Lorem ipsum dolor sit amet, <strong>consectetur adipiscing elit</strong>, sed do <italic>eiusmod tempor incididunt</italic> ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
<div class="py-4">
<a href="#" class="btn">Boutton</a>
<a href="#" class="btn-primary">Boutton primary</a>
<a href="#" class="btn-secondary">Boutton secondary</a>
<a href="#" class="btn-alert">Boutton alert</a>
<a href="#" class="btn-success">Button success</a>
</div>
<div class="py-4">
<a href="#" class="btn"><svg-vue icon="arrow" />Boutton</a>
<a href="#" class="btn-primary"><svg-vue icon="interrogation" />Boutton primary</a>
<a href="#" class="btn-secondary"><svg-vue icon="params" />Boutton secondary</a>
<a href="#" class="btn-alert"><svg-vue icon="close" />Boutton alert</a>
<a href="#" class="btn-success"><svg-vue icon="games" />Button success</a>
</div>
<div class="py-4">
<a href="#" class="btn svg"><svg-vue icon="close" /></a>
<a href="#" class="btn-primary svg"><svg-vue icon="close" /></a>
<a href="#" class="btn-secondary svg rounded-full"><svg-vue icon="close" /></a>
<a href="#" class="btn-alert svg"><svg-vue icon="close" /></a>
<a href="#" class="btn-success svg"><svg-vue icon="close" /></a>
</div>
<form>
<label class="mb-1">Test label</label>
<input type="text" placeholder="Test placeholder" class="mb-1">
<input type="number" class="mb-1">
<div>
<input type="checkbox" class="mb-1">
<label>Check me !</label>
</div>
<div>
<label class="custom-label flex">
<div class="bg-white shadow w-6 h-6 p-1 flex justify-center items-center mr-2">
<input type="checkbox" class="hidden" checked>
<div class="hidden check rounded-sm w-4 h-4 bg-gray-700 pointer-events-none"></div>
</div>
<span class="select-none"> This is a sample checkbox. All the text will toggle the state</span>
</label>
</div>
<div>
<label class="custom-label flex">
<div class="bg-white shadow w-6 h-6 p-1 flex justify-center items-center mr-2">
<input type="checkbox" class="hidden" checked>
<svg class="hidden w-4 h-4 text-green-600 pointer-events-none" viewBox="0 0 172 172"><g fill="none" stroke-width="none" stroke-miterlimit="10" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode:normal"><path d="M0 172V0h172v172z"/><path d="M145.433 37.933L64.5 118.8658 33.7337 88.0996l-10.134 10.1341L64.5 139.1341l91.067-91.067z" fill="currentColor" stroke-width="1"/></g></svg>
</div>
<span class="select-none"> This is a sample checkbox. All the text will toggle the state</span>
</label>
</div>
<select class="mb-1">
<option>test 1</option>
<option>test 2</option>
<option>test 3</option>
</select>
<textarea cols="30" rows="10" class="mb-1">Texte exemple</textarea>
<input type="submit" class="mb-1">
</form>
</div>
</div>
</template>

View File

@@ -1,12 +1,14 @@
<template>
<div class="p-4">
<div class="flex justify-between">
<h1 class="page-title">Administration</h1>
<a href="#" @click.prevent="logout" class="btn">
<svg-vue icon="logout" /> Déconnexion
</a>
<div class="mx-2 p-2">
<div class="box">
<div class="flex justify-between">
<h1 class="page-title">Administration</h1>
<a href="#" @click.prevent="logout" class="btn">
<svg-vue icon="logout" /> Déconnexion
</a>
</div>
<UserAdmin />
</div>
<UserAdmin />
</div>
</template>

View File

@@ -1,9 +1,10 @@
<template>
<div class="p-4">
<h1 class="page-title">Home</h1>
<div class="flex flex-wrap -m-2 mt-2">
<OpenWeatherCard class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4" />
<MemoHome class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4" />
<div class="mx-2 p-2">
<div class="flex flex-wrap -mx-2">
<OpenWeatherCard class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 mb-4" />
<MemoHome class="w-full sm:w-1/2 md:w-1/3 lg:w-1/3 mb-4" />
<AutomaticLinksHome class="w-full sm:w-1/2 md:w-1/3 lg:w-5/12 mb-4" />
<AutomaticMeteoHome class="w-full sm:w-1/2 md:w-1/3 lg:w-1/3 mb-4" />
</div>
</div>
</template>
@@ -11,11 +12,13 @@
<script>
import OpenWeatherCard from './Meteo/OpenWeatherCard'
import MemoHome from './Memo/MemoHome'
import AutomaticLinksHome from './Automation/AutomaticLinksHome'
import AutomaticMeteoHome from './Automation/AutomaticMeteoHome'
export default {
name: 'Home',
components: {
OpenWeatherCard, MemoHome
OpenWeatherCard, MemoHome, AutomaticLinksHome, AutomaticMeteoHome
}
}
</script>

View File

@@ -1,12 +1,14 @@
<template>
<div class="p-4">
<div class="mx-2 p-2">
<form @submit.prevent="submitForm">
<div class="flex justify-between flex-center mb-4">
<router-link to="/memos/" class="btn">Back</router-link>
<button class="btn-primary">Add New Memo</button>
</div>
<InputField name="name" label="Title" placeholder="Your Title" required @update:field="form.name = $event" :errors="errors" />
<TextAreaField class="" name="memo" placeholder="Your Memo" required @update:field="form.memo = $event" :errors="errors" />
<div class="box">
<InputField name="name" label="Title" placeholder="Your Title" required @update:field="form.name = $event" :errors="errors" />
<TextAreaField name="memo" placeholder="Your Memo" required @update:field="form.memo = $event" :errors="errors" />
</div>
</form>
</div>
</template>

View File

@@ -13,14 +13,16 @@
classes="cover"
:alt="form.name"/>
</div>
<div class="p-4">
<div class="mx-2 p-2">
<form @submit.prevent="submitForm">
<div class="flex justify-between mb-4">
<router-link :to="'/memos/' + this.$route.params.id" class="btn">Back</router-link>
<button class="btn-primary">Save</button>
</div>
<InputField name="name" :data="form.name" label="Title" placeholder="Your Title" required @update:field="form.name = $event" :errors="errors" />
<TextAreaField class="memo-text-area" name="memo" :data="form.memo" placeholder="Your Memo" required @update:field="form.memo = $event" :errors="errors" />
<div class="flex justify-between mb-4">
<router-link :to="'/memos/' + this.$route.params.id" class="btn">Back</router-link>
<button class="btn-primary">Save</button>
</div>
<div class="box">
<InputField name="name" :data="form.name" label="Title" placeholder="Your Title" required @update:field="form.name = $event" :errors="errors" />
<TextAreaField class="memo-text-area" name="memo" :data="form.memo" placeholder="Your Memo" required @update:field="form.memo = $event" :errors="errors" />
</div>
</form>
</div>

View File

@@ -1,21 +1,21 @@
<template>
<div>
<div class="card m-2">
<div v-if="loading" class="p-2">
<div class="card">
<div v-if="loading">
<h2>Memos</h2>
<Loader />
</div>
<div v-else class="p-2">
<router-link to="/memos"><h2 class="mb-4 text-gray-900">{{ memos.count }} Memos</h2></router-link>
<router-link :to="memos.last_updated.links.self" class="m-2 block">
<div v-else>
<router-link to="/memos" class="mb-4 no-underline"><h2>{{ memos.count }} Memos</h2></router-link>
<router-link :to="memos.last_updated.links.self" class="m-2 block no-underline">
<div class="flex justify-between text-black">
Dernier édité
<span class="inline-block bg-gray-400 text-white text-center rounded-full px-3 py-1 text-sm font-semibold">{{ memos.last_updated.data.last_updated }}</span>
</div>
<div class="text-2xl font-bold">{{ memos.last_updated.data.name }}</div>
</router-link>
<hr class="border border-gray-900">
<router-link :to="memos.last_created.links.self" class="m-2 block">
<hr class="border border-marine">
<router-link :to="memos.last_created.links.self" class="m-2 block no-underline">
<div class="flex justify-between text-black">
Dernier créé
<span class="inline-block bg-gray-400 text-white text-center rounded-full px-3 py-1 text-sm font-semibold">{{ memos.last_created.data.last_updated }}</span>

View File

@@ -1,5 +1,5 @@
<template>
<div class="p-4">
<div class="mx-2 p-2">
<div class="flex justify-between flex-center mb-4">
<a href="#" class="btn" @click="$router.back()">Back</a>
<router-link :to="'/memos/create'" class="btn-primary">Add New Memo</router-link>
@@ -9,14 +9,14 @@
<div v-if="memos.lenght === 0">
<p>No memos yet. <router-link to="/memos/create">Get Started ></router-link></p>
</div>
<router-link v-for="memo in memos" :key="memo.data.memo_id" :to="'/memos/' + memo.data.memo_id" class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4">
<div class="m-2 max-w-lg rounded overflow-hidden shadow-lg bg-white">
<img :src="memo.data.attributes.cover_image.data.attributes.path" alt="" class="w-full">
<div class="px-6 py-4">
<h1 class="text-gray-700">{{ memo.data.name }}</h1>
<router-link v-for="memo in memos" :key="memo.data.memo_id" :to="'/memos/' + memo.data.memo_id" class="flex-initial sm:mx-auto md:w-1/2 md:mx-0 lg:w-1/3 xl:w-1/4 mb-4 no-underline">
<div class="card">
<div class="-m-4">
<img :src="memo.data.attributes.thumbnail_cover_image.data.attributes.path" alt="" class="w-full rounded rounded-b-none">
</div>
<div class="flex justify-end py-2">
<span class="inline-block bg-gray-400 text-white rounded-full px-3 py-1 text-sm font-semibold mr-2">{{ memo.data.last_updated }}</span>
<div class="h-full flex flex-col mt-6">
<h1 class="text-xl text-marine">{{ memo.data.name }}</h1>
<span class="mt-auto self-end bg-gray-400 text-white tag">{{ memo.data.last_updated }}</span>
</div>
</div>
</router-link>
@@ -54,7 +54,7 @@ export default {
methods: {
reorderList() {
this.memos.sort(function(a, b) {
return a.data.last_updated_timestamp + b.data.last_updated_timestamp
return b.data.last_updated_timestamp - a.data.last_updated_timestamp
})
}
}

View File

@@ -30,7 +30,7 @@
<!-- <TagBox :memo="memo" />-->
<div class="p-4">
<div class="memo-style rounded-t-sm p-4 pb-3 -mb-1 bg-white" v-html="memoMarkdown"></div>
<div class="box memo-style rounded-t-sm p-4 pb-3 -mb-1 bg-white" v-html="memoMarkdown"></div>
<div class="bg-gray-400 text-white rounded-b-sm px-2 py-1 flex justify-end">@last update<span class="font-semibold ml-1">{{ memo.last_updated }}</span></div>
</div>
</div>

View File

@@ -3,21 +3,19 @@
<div v-if="loading">
<Loader />
</div>
<div v-else class="m-2">
<div class="card">
<div class="text-black m-2 p-2 flex flex-col">
<h2>{{ meteo.city.name }}</h2>
<div class="flex">
<div class="flex flex-col justify-end">
<div>{{ dateFormat(meteo.list[0].dt_txt) }}</div>
<div><strong>{{ meteo.list[0].main.temp }}</strong> °C</div>
<div><strong>{{ meteo.list[0].main.humidity }}</strong> %</div>
<div><strong>{{ meteo.list[0].main.pressure }}</strong> hPa</div>
</div>
<div class="flex flex-col flex-1 justify-end items-end">
<i v-bind:class="'owf owf-5x owf-' + meteo.list[0].weather[0].id"></i>
<div><strong>{{ meteo.list[0].weather[0].description }}</strong></div>
</div>
<div v-else class="card">
<div class="flex flex-col">
<h2>{{ meteo.city.name }}</h2>
<div class="flex">
<div class="flex flex-col justify-end">
<div>{{ dateFormat(meteo.list[0].dt_txt) }}</div>
<div><strong>{{ meteo.list[0].main.temp }}</strong> °C</div>
<div><strong>{{ meteo.list[0].main.humidity }}</strong> %</div>
<div><strong>{{ meteo.list[0].main.pressure }}</strong> hPa</div>
</div>
<div class="flex flex-col flex-1 justify-end items-end">
<i v-bind:class="'current-fill text-marine owf owf-5x owf-' + meteo.list[0].weather[0].id"></i>
<div><strong>{{ meteo.list[0].weather[0].description }}</strong></div>
</div>
</div>
</div>

View File

@@ -15,7 +15,7 @@
<input type="text"
v-model="toDo.data.attributes.data.name"
@keypress.enter="updateToDo"
class="flex-1 rounded-sm border border-primary-600 pl-1">
class="flex-1 rounded-sm border border-primary-600 p-0 pl-1">
<span @click="edit = !edit">
<svg-vue icon="close" class="inline w-4 fill-current cursor-pointer mx-2" />
</span>
@@ -42,6 +42,7 @@ export default {
},
data () {
return {
id: this.toDo.data.to_do_id,
edit: false,
checked: !!(this.toDo.data.attributes.data.checked_at),
}
@@ -52,7 +53,6 @@ export default {
axios.patch('/api/to-do-lists/' + this.idList + '/to-do/' + this.toDo.data.to_do_id, {name: this.toDo.data.attributes.data.name })
.then(() => {
this.edit = false
//this.toDoList.data.attributes.data.name = this.listName
})
.catch(errorRes => {
console.log('Internal Error, Unable to delete list.' + errorRes)
@@ -61,16 +61,22 @@ export default {
},
watch: {
checked: function () {
// eslint-disable-next-line no-undef
axios.patch('/api/to-do-lists/' + this.idList + '/to-do/' + this.toDo.data.to_do_id + '/check')
.then(res => {
// this.toDoList.data.attributes.data.to_dos.data[position].data.attributes.data.checked_at = res.data.data.attributes.data.checked_at
this.toDo.data.attributes.data.checked_at = res.data.data.attributes.data.checked_at
this.checked = !!(res.data.data.attributes.data.checked_at)
})
.catch(errorRes => {
console.log('Internal Error, Unable to delete contact.' + errorRes)
})
if(event && event.type === 'click') {
// eslint-disable-next-line no-undef
axios.patch('/api/to-do-lists/' + this.idList + '/to-do/' + this.toDo.data.to_do_id + '/check')
.then(res => {
this.toDo.data.attributes.data.checked_at = res.data.data.attributes.data.checked_at
this.checked = !!(res.data.data.attributes.data.checked_at)
})
.catch(errorRes => {
console.log('Internal Error, Unable to delete contact.' + errorRes)
})
}
},
toDo: function () {
if(this.checked !== !!(this.toDo.data.attributes.data.checked_at)) {
this.checked = !!(this.toDo.data.attributes.data.checked_at)
}
}
}
}

View File

@@ -1,5 +1,5 @@
<template>
<div class="p-4">
<div class="mx-2 p-2">
<div v-if="modal" class="modal-container" @click="modal = ! modal"></div>
<div v-if="modal" class="modal px-2">
<p class="m-2 text-center">Add a new to-do list ?</p>
@@ -22,8 +22,8 @@
:key="index"
:to="'/to-do-lists/' + toDoList.data.to_do_list_id"
:to-do-list="toDoList"
class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4" >
<div class="bg-gray-300 rounded text-black m-2 p-2">
class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 no-underline" >
<div class="rounded bg-white text-black m-2 p-2">
<div class="flex justify-between">
<span class="font-bold">{{ toDoList.data.attributes.data.name }}</span>
<span>

View File

@@ -1,5 +1,5 @@
<template>
<div class="px-4 py-2">
<div class="mx-2 p-2">
<div v-if="modal" class="modal-container" @click="modal = ! modal"></div>
<div v-if="modal" class="modal">
<p class="m-2 text-center">Are you sure you want to delete this list ?</p>
@@ -12,15 +12,18 @@
<router-link to="/to-do-lists/" class="btn">Back</router-link>
<a href="#" class="btn-alert" @click="modal = ! modal">Delete</a>
</div>
<div v-if="!loading" class="bg-gray-400 rounded p-1">
<h1 class="mb-2 ml-2 todo" >
<div v-if="!loading" class="bg-marine-medium rounded p-1">
<h1 class="mb-2 ml-2 h-10 todo text-white flex items-center" >
<span v-if="!listNameEdit" class="text-2xl font-bold flex items-center">{{ toDoList.data.attributes.data.name }}
<span @click="listNameEdit = !listNameEdit">
<svg-vue icon="edit" class="edit-icon inline w-4 fill-current cursor-pointer ml-2" />
</span>
</span>
<span v-else class="flex items-center">
<input type="text" class="p-1 rounded-sm mt-1 -ml-1" v-model="listName" @keydown.enter="updateList">
<input type="text"
class="px-1 py-0 text-2xl text-white font-bold bg-marine-medium rounded-sm -ml-1"
v-model="listName"
@keydown.enter="updateList">
<span @click="listNameEdit = !listNameEdit">
<svg-vue icon="close" class="inline w-4 fill-current cursor-pointer ml-2" />
</span>
@@ -40,6 +43,7 @@
<svg-vue icon="draggable" class="w-4 block mr-2 cursor-move" />
<ToDo :to-do="toDo"
:id-list="toDoList.data.to_do_list_id"
ref="toDo"
class="flex-1 bg-blue" />
<span @click="deleteToDo(toDo, index)" class="cursor-pointer ml-2 font-bold edit-icon flex items-center">
<svg-vue icon="close" class="w-4" />
@@ -84,7 +88,7 @@ export default {
this.toDoList = res.data
this.loading = false
this.listName = res.data.data.attributes.data.name
this.reorderList()
this.sortList()
})
.catch(errorRes => {
this.loading = false
@@ -117,11 +121,14 @@ export default {
console.log('Internal Error, Unable to delete contact.' + errorRes)
})
},
reorderList() {
sortList() {
this.toDoList.data.attributes.data.to_dos.data.sort(function(a, b) {
return a.data.attributes.data.order - b.data.attributes.data.order
})
},
reorderList() {
this.sortList()
},
addToDo: function () {
if(this.toDoName.length >= 3) {
// eslint-disable-next-line no-undef

View File

@@ -25,6 +25,11 @@
<h1 class="relative z-10 text-white text-shadow text-3xl left-80 bottom-0">{{ authUser.data.attributes.name }}</h1>
</div>
</div>
<div class="m-2">
<div class="box">
Texte
</div>
</div>
</div>
</template>

View File

@@ -7,6 +7,11 @@
:alt="user.attributes.name"/>
</div>
<h1>{{ user.attributes.name }}</h1>
<div class="m-2">
<div class="box">
Texte
</div>
</div>
</div>
</template>

View File

@@ -2,7 +2,7 @@
<div v-if="authUser">
<div class="flex m-4">
<div class="avatar mr-2">
<Avatar :avatar="authUser.data.attributes.profile_image.data.attributes.path" size="6xl" :alt="authUser.data.attributes.name" class="w-24 h-24" />
<Avatar :avatar="authUser.data.attributes.thumbnail_cover_image.data.attributes.path" size="6xl" :alt="authUser.data.attributes.name" class="w-24 h-24" />
</div>
<div class="flex flex-col justify-center ml-2">
<div><strong>{{ authUser.data.attributes.name }}</strong></div>
@@ -10,7 +10,7 @@
</div>
</div>
<div v-if="authUser.data.attributes.is_admin">
<div class="box-toggle">
<div class="-mx-4 box-toggle">
<div class="box-toggle-header" @click="userAddToggle = !userAddToggle">
<h2 class="mb-1">Ajouter un membre</h2>
<svg-vue icon="arrow" v-bind:class="{ open: userAddToggle }" />
@@ -28,7 +28,7 @@
</form>
</transition>
</div>
<div class="mb-2 box-toggle">
<div class="-mx-4 mb-2 box-toggle">
<div class="box-toggle-header" @click="userListToggle = !userListToggle">
<h2>Liste des utilisateurs</h2>
<svg-vue icon="arrow" v-bind:class="{ open: userListToggle }" />

View File

@@ -1,3 +1,40 @@
h1,
h2,
h3,
h4 {
@apply font-bold;
}
h1 {
@apply text-4xl;
}
h2 {
@apply text-3xl;
}
h3 {
@apply text-2xl;
}
h4 {
@apply text-xl;
}
p {
@apply mb-2 mt-1;
text-indent: 2rem;
}
input,
textarea {
@apply border py-2 px-4 rounded;
}
textarea {
@apply ;
}
.text-shadow {
text-shadow: 1px 1px 2px #000;
}
@@ -33,3 +70,11 @@
.min-h-16 {
min-height: 4rem;
}
.indent {
text-indent: 2rem;
}
.no-indent {
text-indent: unset;
}

View File

@@ -1,7 +1,7 @@
// Button
.btn {
@apply border border-transparent inline-block bg-gray-600 text-white font-semibold whitespace-no-wrap py-2 px-4 shadow-sm rounded cursor-pointer;
@apply border border-transparent inline-block bg-gray-600 text-white font-semibold whitespace-no-wrap py-2 px-4 shadow-sm rounded cursor-pointer no-underline;
&:hover {
@apply text-white bg-gray-800 transition-all duration-300;

View File

@@ -5,10 +5,10 @@
}
a {
@apply text-gray-700;
@apply text-marine underline;
&:hover {
@apply text-gray-900;
@apply text-marine;
}
}
@@ -27,10 +27,9 @@ a {
}
.box-toggle {
@apply shadow;
&-header {
@apply flex justify-between items-center px-4 py-2 text-white bg-gray-800 font-bold cursor-pointer;
@apply flex justify-between items-center px-4 py-2 text-white bg-marine font-bold cursor-pointer;
svg {
@apply w-8 fill-current;
@@ -53,7 +52,7 @@ a {
}
.card {
@apply bg-gray-300 rounded text-black;
@apply bg-white rounded m-2 p-4 h-full flex flex-col justify-between;
svg {
@apply max-w-full max-h-48 max-w-48 m-auto fill-current;
@@ -63,3 +62,11 @@ a {
@apply text-2xl text-center font-bold;
}
}
.box {
@apply bg-white rounded p-4 my-2;
}
.tag {
@apply inline-block rounded-full px-3 py-1 text-sm font-semibold;
}

View File

@@ -1,10 +1,10 @@
nav {
@apply w-48 h-screen bg-gray-800 flex flex-col justify-between shadow;
@apply w-48 h-screen bg-marine flex flex-col justify-between shadow;
transition: width 0.3s;
svg {
@apply fill-current text-gray-300 w-12 p-2;
@apply fill-current text-white w-12 p-2;
transition: color 0.3s;
&:hover {
@@ -13,7 +13,7 @@ nav {
}
.logo {
@apply block;
@apply block text-white;
svg {
@apply w-40 m-2;
@@ -22,7 +22,7 @@ nav {
}
.nav-item {
@apply flex items-center text-gray-100;
@apply flex items-center text-white;
transition: background-color 0.3s;
span {

View File

@@ -1,34 +1,6 @@
.memo-style {
h1,
h2,
h3,
h4 {
@apply font-bold;
}
h1 {
@apply text-4xl;
}
h2 {
@apply text-3xl;
}
h3 {
@apply text-2xl;
}
h4 {
@apply text-xl;
}
p {
@apply mb-2 mt-1;
text-indent: 2rem;
}
pre,
code {
@apply bg-gray-700 text-white p-1;

View File

@@ -1,15 +1,15 @@
@extends('layouts.app')
@section('content')
<div class="bg-orange-200 mx-auto h-screen flex justify-center items-center">
<div class="w-96 m-auto bg-orange-400 rounded p-4 mt-10 shadow-xl">
<div class="bg-gray-200 mx-auto h-screen flex justify-center items-center">
<div class="w-96 m-auto bg-marine rounded p-4 mt-10 shadow-xl text-white">
<div class="text-3xl font-bold text-center mb-4">{{ __('Login') }}</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<label for="email" class="mb-2 font-bold uppercase">{{ __('E-Mail') }}</label>
<div class="mb-4">
<input id="email" type="email" class="w-full border-2 border-orange-500 focus:border-orange-700 rounded p-2 @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
<input id="email" type="email" class="w-full border-2 text-black border-marine-light rounded p-2 @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
@@ -19,7 +19,7 @@
<label for="password" class="mb-2 font-bold uppercase">{{ __('Password') }}</label>
<div class="mb-4">
<input id="password" type="password" class="w-full border-2 border-orange-500 focus:border-orange-700 rounded p-2 @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
<input id="password" type="password" class="w-full border-2 text-black border-marine-light rounded p-2 @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">

View File

@@ -1,11 +1,11 @@
@extends('layouts.app')
@section('content')
<div class="auth p-2">
<div class="title-page mb-2">{{ __('Reset Password') }}</div>
<div class="bg-gray-200 mx-auto h-screen flex justify-center items-center">
<div class="w-96 m-auto bg-marine rounded p-4 mt-10 shadow-xl text-white">
<div class="text-3xl font-bold text-center mb-4">{{ __('Reset Password') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success p-1 mb-1" role="alert">
{{ session('status') }}
@@ -15,9 +15,9 @@
<form method="POST" action="{{ route('password.email') }}">
@csrf
<label for="email" class="mb-1">{{ __('E-Mail') }}</label>
<div class="mb-2">
<input id="email" type="email" class="@error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
<label for="email" class="mb-2 font-bold uppercase">{{ __('E-Mail') }}</label>
<div class="mb-4">
<input id="email" type="email" class="w-full text-black border-2 border-marine-light rounded p-2 @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
@@ -25,13 +25,14 @@
@enderror
</div>
<div class="flex-between">
<div class="flex justify-center">
<button type="submit" class="btn-primary px-3 w-100">
{{ __('Send Password Reset Link') }}
</button>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -1,77 +0,0 @@
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Register') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('register') }}">
@csrf
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Register') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection