feat: work on date menu
This commit is contained in:
@ -10,8 +10,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.0.0",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"core-js": "^3.8.3",
|
||||
"lodash": "^4.17.21",
|
||||
"v-calendar": "^3.1.2",
|
||||
"vue": "^3.2.13",
|
||||
"vue3-carousel": "^0.3.1"
|
||||
},
|
||||
|
@ -1,4 +1,4 @@
|
||||
import 'vue3-carousel/dist/carousel.css'
|
||||
import {Calendar, DatePicker} from 'v-calendar';
|
||||
import components from './components'
|
||||
|
||||
import { Carousel, Pagination, Navigation, Slide } from 'vue3-carousel'
|
||||
@ -12,6 +12,10 @@ const App = {
|
||||
Carousel,
|
||||
Pagination,
|
||||
Navigation,
|
||||
...{
|
||||
VCalendar: Calendar,
|
||||
VDatepicker: DatePicker
|
||||
},
|
||||
},
|
||||
|
||||
computed: {
|
||||
|
@ -15,14 +15,17 @@ export default class Builder {
|
||||
/**
|
||||
* Fetch app from remote and mount application.
|
||||
*/
|
||||
fetch(url, {el='#app', ...options}={}) {
|
||||
return fetch(url, options).then(response => response.text())
|
||||
fetch(url, {el='#app', historySave=true, ...options}={}) {
|
||||
const fut = fetch(url, options).then(response => response.text())
|
||||
.then(content => {
|
||||
let doc = new DOMParser().parseFromString(content, 'text/html')
|
||||
let app = doc.querySelector(el)
|
||||
content = app ? app.innerHTML : content
|
||||
return this.mount({content, title: doc.title, reset:true, url })
|
||||
})
|
||||
if(historySave)
|
||||
fut.then(() => this.historySave(url))
|
||||
return fut
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,7 +64,9 @@ export default class Builder {
|
||||
container.innerHTML = content
|
||||
if(title)
|
||||
document.title = title
|
||||
return createApp(config, props)
|
||||
const app = createApp(config, props)
|
||||
app.config.globalProperties.window = window
|
||||
return app
|
||||
}
|
||||
|
||||
unmount() {
|
||||
@ -106,7 +111,7 @@ export default class Builder {
|
||||
else
|
||||
options = {...options, method: target.method, body: formData}
|
||||
}
|
||||
this.fetch(url, options).then(() => this.historySave(url))
|
||||
this.fetch(url, options)
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
@charset "utf-8";
|
||||
|
||||
|
||||
$font-special: "bagnard";
|
||||
$font-special-url: url("assets/Bagnard.otf");
|
||||
|
||||
@ -45,14 +44,32 @@ $screen-wide: 1380px;
|
||||
|
||||
|
||||
|
||||
@import 'v-calendar/style.css';
|
||||
@import "~bulma/sass/utilities/_all.sass";
|
||||
@import "~bulma/sass/components/dropdown.sass";
|
||||
|
||||
$body-background-color: $light;
|
||||
$menu-item-hover-background-color: #dfdfdf;
|
||||
$menu-item-active-background-color: #d2d2d2;
|
||||
|
||||
@import "~bulma";
|
||||
@import "~bulma/sass/base/_all";
|
||||
@import "~bulma/sass/components/_all";
|
||||
@import "~bulma/sass/form/_all";
|
||||
@import "~bulma/sass/grid/_all";
|
||||
@import "~bulma/sass/helpers/_all";
|
||||
@import "~bulma/sass/layout/_all";
|
||||
@import "~bulma/sass/elements/box";
|
||||
@import "~bulma/sass/elements/button";
|
||||
@import "~bulma/sass/elements/container";
|
||||
@import "~bulma/sass/elements/content";
|
||||
@import "~bulma/sass/elements/icon";
|
||||
// @import "~bulma/sass/elements/image";
|
||||
// @import "~bulma/sass/elements/notification";
|
||||
@import "~bulma/sass/elements/progress";
|
||||
@import "~bulma/sass/elements/table";
|
||||
@import "~bulma/sass/elements/tag";
|
||||
@import "~bulma/sass/elements/title";
|
||||
|
||||
|
||||
|
||||
//-- helpers/modifiers
|
||||
.is-fullwidth { width: 100%; }
|
||||
@ -157,40 +174,6 @@ a.navbar-item.is-active {
|
||||
}
|
||||
}
|
||||
|
||||
//-- cards
|
||||
.card {
|
||||
.title {
|
||||
a {
|
||||
color: $dark;
|
||||
}
|
||||
|
||||
padding: 0.2em;
|
||||
font-size: $size-5;
|
||||
font-weight: $weight-medium;
|
||||
}
|
||||
|
||||
&.is-primary {
|
||||
box-shadow: 0em 0em 0.5em $black
|
||||
}
|
||||
}
|
||||
|
||||
.card-super-title {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
font-size: $size-6;
|
||||
font-weight: $weight-bold;
|
||||
padding: 0.2em;
|
||||
top: 1em;
|
||||
background-color: #ffffffc7;
|
||||
max-width: 90%;
|
||||
|
||||
.fas {
|
||||
padding: 0.1em;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-- page
|
||||
.page {
|
||||
& > .cover {
|
||||
@ -221,6 +204,7 @@ a.navbar-item.is-active {
|
||||
}
|
||||
|
||||
|
||||
// FIXME: remove -> only used in comment
|
||||
.media.item .headline {
|
||||
line-height: 1.2em;
|
||||
max-height: calc(1.2em * 3);
|
||||
@ -503,6 +487,54 @@ h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
font-size: unset !important
|
||||
}
|
||||
|
||||
|
||||
.vc-weekday-1, .vc-weekday-7 {
|
||||
color: var(--highlight-color-2) !important;
|
||||
}
|
||||
|
||||
|
||||
// ---- secondary navigation
|
||||
nav {
|
||||
margin: $mp-3 0;
|
||||
|
||||
.nav-item {
|
||||
font-family: unset;
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
margin-bottom: $mp-3;
|
||||
vertical-align: unset !important;
|
||||
|
||||
a, .button {
|
||||
padding: $mp-3;
|
||||
border: 1px solid hsl(0deg, 0%, 86%);
|
||||
background-color: var(--highlight-color);
|
||||
}
|
||||
|
||||
button, .button {
|
||||
vertical-align: inherit;
|
||||
padding-top: $mp-3;
|
||||
padding-bottom: $mp-3;
|
||||
height: unset !important;
|
||||
}
|
||||
|
||||
&.active a, &.active button {
|
||||
background-color: var(--highlight-color-2);
|
||||
color: var(--highlight-color);
|
||||
}
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: $mp-2;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ---- ---- previews & page items
|
||||
.preview {
|
||||
position: relative;
|
||||
@ -548,8 +580,6 @@ h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.list-item {
|
||||
width: 100%;
|
||||
|
||||
@ -568,10 +598,13 @@ h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
|
||||
}
|
||||
|
||||
.media-content {
|
||||
height: var(--preview-cover-small-size);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.list-item:not(.no-cover) & {
|
||||
height: var(--preview-cover-small-size);
|
||||
}
|
||||
|
||||
.content { flex-grow: 1; }
|
||||
|
||||
.actions {
|
||||
@ -639,26 +672,6 @@ h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
|
||||
}
|
||||
|
||||
|
||||
.preview-nav {
|
||||
margin-top: $mp-3;
|
||||
|
||||
.nav-item {
|
||||
font-size: $text-size-bigger;
|
||||
font-family: unset;
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: $mp-2;
|
||||
}
|
||||
|
||||
a {
|
||||
padding: $mp-3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.preview-header {
|
||||
width: 100%;
|
||||
|
||||
|
@ -1,23 +0,0 @@
|
||||
<template>
|
||||
<carousel :items-to-show="1.5">
|
||||
<slot></slot>
|
||||
<template #addons>
|
||||
<navigation />
|
||||
<pagination />
|
||||
</template>
|
||||
</carousel>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// If you are using PurgeCSS, make sure to whitelist the carousel CSS classes
|
||||
import 'vue3-carousel/dist/carousel.css'
|
||||
import { Carousel, Pagination, Navigation } from 'vue3-carousel'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Carousel,
|
||||
Pagination,
|
||||
Navigation,
|
||||
},
|
||||
}
|
||||
</script>
|
@ -1,24 +1,18 @@
|
||||
<template>
|
||||
<div>
|
||||
<div :class="['a-dropdown', itemClass, active ? activeClass : '']"
|
||||
style="display: flex; flex-direction: row"
|
||||
@click="noButton && toggle()">
|
||||
<div style="flex:auto">
|
||||
<slot name="item"></slot>
|
||||
</div>
|
||||
<slot name="button">
|
||||
<span :class="[buttonClass]" style="flex-grow:0" @click="toggle()">
|
||||
<span class="icon">
|
||||
<i v-if="!active" :class="buttonIconOpen"></i>
|
||||
<i v-if="active" :class="buttonIconClose"></i>
|
||||
</span>
|
||||
<component :is="tag" :class="[itemClass, active ? activeClass : '']">
|
||||
<slot name="before-button"></slot>
|
||||
<slot name="button" :toggle="toggle" :active="active">
|
||||
<button :class="[buttonClass]" @click="toggle()">
|
||||
<span class="icon">
|
||||
<i v-if="!active" :class="buttonIconOpen"></i>
|
||||
<i v-if="active" :class="buttonIconClose"></i>
|
||||
</span>
|
||||
</slot>
|
||||
</div>
|
||||
<div :class="contentClass" v-if="active">
|
||||
</button>
|
||||
</slot>
|
||||
<div :class="contentClass" v-show="active">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</component>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
@ -29,9 +23,9 @@ export default {
|
||||
},
|
||||
|
||||
props: {
|
||||
itemClass: String,
|
||||
tag: {type: String, default: "div"},
|
||||
activeClass: {type: String, default: "is-active"},
|
||||
buttonClass: String,
|
||||
buttonClass: {type: String, default: "button"},
|
||||
buttonIconOpen: { type: String, default:"fa fa-angle-down"},
|
||||
buttonIconClose: { type: String, default:"fa fa-angle-up"},
|
||||
contentClass: String,
|
||||
|
@ -12,6 +12,7 @@ import Builder from './appBuilder'
|
||||
import Sound from './sound'
|
||||
import {Set} from './model'
|
||||
|
||||
import "./assets/vendor"
|
||||
import './assets/styles.scss'
|
||||
|
||||
|
||||
@ -68,5 +69,10 @@ window.aircox = {
|
||||
else
|
||||
for(let item of container.querySelectorAll('a.navbar-item'))
|
||||
item.style.display = null;
|
||||
},
|
||||
|
||||
pickDate(url, date) {
|
||||
url = `${url}?date=${date.id}`
|
||||
this.builder.fetch(url)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user