advent22/ui/src/components/Calendar.vue

75 lines
1.8 KiB
Vue
Raw Normal View History

2023-09-07 00:41:38 +00:00
<template>
<MultiModal ref="multi_modal" />
2023-09-09 23:52:58 +00:00
<figure>
<div class="image is-unselectable">
2023-09-12 13:55:08 +00:00
<img :src="$advent22.api_url('images/background')" />
2023-09-09 23:52:58 +00:00
<ThouCanvas>
<CalendarDoor
v-for="(door, index) in doors"
:key="`door-${index}`"
:door="door"
@doorClick="door_click"
@doorSuccess="door_success"
@doorFailure="door_failure"
@touch="door_hover(door.day)"
@mouseover="door_hover(door.day)"
@touchend="door_unhover"
@mouseout="door_unhover"
/>
</ThouCanvas>
</div>
<figcaption>{{ figure_caption }}</figcaption>
</figure>
2023-09-07 00:41:38 +00:00
</template>
<script lang="ts">
2023-09-07 02:08:56 +00:00
import { Door } from "@/lib/door";
2023-09-07 00:41:38 +00:00
import { Options, Vue } from "vue-class-component";
2023-09-07 02:08:56 +00:00
import CalendarDoor from "./calendar/CalendarDoor.vue";
import MultiModal from "./calendar/MultiModal.vue";
import ThouCanvas from "./calendar/ThouCanvas.vue";
2023-09-07 00:41:38 +00:00
@Options({
components: {
MultiModal,
ThouCanvas,
CalendarDoor,
},
props: {
doors: Array,
},
})
export default class extends Vue {
public readonly doors!: Door[];
2023-09-09 23:52:58 +00:00
private readonly idle_caption = "Finde die Türchen auf dem Adventskalender!";
public figure_caption = this.idle_caption;
2023-09-07 00:41:38 +00:00
declare $refs: {
multi_modal: MultiModal;
};
2023-09-12 14:55:08 +00:00
public door_hover(day: number) {
2023-09-12 17:46:09 +00:00
this.figure_caption = this.$advent22.name_door(day);
2023-09-09 23:52:58 +00:00
}
public door_unhover() {
this.figure_caption = this.idle_caption;
}
2023-09-07 00:41:38 +00:00
public door_click() {
this.$refs.multi_modal.show_progress();
}
2023-09-12 17:42:02 +00:00
public door_success(day: number, image_src: string) {
2023-09-12 17:46:09 +00:00
this.$refs.multi_modal.show_image(image_src, this.$advent22.name_door(day));
2023-09-07 00:41:38 +00:00
}
public door_failure(msg: string) {
this.$refs.multi_modal.set_active(false);
alert(msg);
}
}
</script>