mirror of
https://github.com/Fluffy-Bean/TastyBites.git
synced 2024-12-29 10:56:15 +00:00
Calendar
This commit is contained in:
parent
3538e4d9bc
commit
cb6721ab96
73
front/src/components/Calendar.svelte
Normal file
73
front/src/components/Calendar.svelte
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
<script>
|
||||||
|
import { ArrowArcLeft, ArrowArcRight } from "phosphor-svelte";
|
||||||
|
|
||||||
|
const weekLabels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
|
||||||
|
const monthLabels = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
||||||
|
|
||||||
|
let date = new Date();
|
||||||
|
let year = date.getFullYear();
|
||||||
|
let month = date.getMonth();
|
||||||
|
|
||||||
|
$: firstDayOffset = new Date(year, month, 0).getDay();
|
||||||
|
$: monthLength = new Date(year, month + 1, 0).getDate();
|
||||||
|
$: lastDayOffset = new Date(year, month, monthLength).getDay();
|
||||||
|
|
||||||
|
function last() {
|
||||||
|
month -= 1;
|
||||||
|
|
||||||
|
if (month < 0 || month > 11) {
|
||||||
|
date = new Date(year, month, new Date().getDate());
|
||||||
|
year = date.getFullYear();
|
||||||
|
month = date.getMonth();
|
||||||
|
} else {
|
||||||
|
date = new Date();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function next() {
|
||||||
|
month += 1;
|
||||||
|
|
||||||
|
if (month < 0 || month > 11) {
|
||||||
|
date = new Date(year, month, new Date().getDate());
|
||||||
|
year = date.getFullYear();
|
||||||
|
month = date.getMonth();
|
||||||
|
} else {
|
||||||
|
date = new Date();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Full reference code:
|
||||||
|
// https://www.geeksforgeeks.org/how-to-design-a-simple-calendar-using-javascript/
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="calendar">
|
||||||
|
<div class="calendar-header">
|
||||||
|
<p>{monthLabels[month]} {year}</p>
|
||||||
|
<button on:click={last}><ArrowArcLeft weight="fill" /></button>
|
||||||
|
<button on:click={next}><ArrowArcRight weight="fill" /></button>
|
||||||
|
</div>
|
||||||
|
<div class="calendar-weeks">
|
||||||
|
{#each weekLabels as weekname}
|
||||||
|
<span>{weekname}</span>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
<div class="calendar-days">
|
||||||
|
{#each {length:firstDayOffset} as _}
|
||||||
|
<div />
|
||||||
|
{/each}
|
||||||
|
{#each {length:monthLength} as _, i}
|
||||||
|
<div
|
||||||
|
class:today={
|
||||||
|
i === date.getDate()
|
||||||
|
&& month === new Date().getMonth()
|
||||||
|
&& year === new Date().getFullYear()
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<button>{i+1}</button>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
{#each {length:lastDayOffset} as _}
|
||||||
|
<!-- Not really important to add these.... -->
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,5 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { expandOnTyping } from "../lib/utils";
|
import { expandOnTyping } from "../lib/utils";
|
||||||
|
import Calendar from "../components/Calendar.svelte";
|
||||||
|
|
||||||
const specialRequestsMax = 300;
|
const specialRequestsMax = 300;
|
||||||
|
|
||||||
|
@ -88,11 +89,11 @@
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="spacer half" />
|
|
||||||
<hr>
|
|
||||||
<div class="spacer" />
|
<div class="spacer" />
|
||||||
<hr>
|
|
||||||
<div class="spacer half" />
|
<Calendar />
|
||||||
|
|
||||||
|
<div class="spacer" />
|
||||||
|
|
||||||
<div class="form-element">
|
<div class="form-element">
|
||||||
<label class="form-label" for="message">Message</label>
|
<label class="form-label" for="message">Message</label>
|
||||||
|
|
107
front/src/styles/_calendar.scss
Normal file
107
front/src/styles/_calendar.scss
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
.calendar {
|
||||||
|
width: 400px;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
|
||||||
|
border-radius: $border-radius-large;
|
||||||
|
background-color: $color-light;
|
||||||
|
color: $color-on-light;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-header {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
border-bottom: 1px dotted rgba($color-light, 0.2);
|
||||||
|
background-color: $color-dark;
|
||||||
|
color: $color-on-dark;
|
||||||
|
|
||||||
|
z-index: 4;
|
||||||
|
|
||||||
|
> p {
|
||||||
|
padding-left: $spacing-normal;
|
||||||
|
flex-grow: 1;
|
||||||
|
font-size: $font-size-h4;
|
||||||
|
}
|
||||||
|
|
||||||
|
> button {
|
||||||
|
padding: $spacing-normal;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
font-size: $font-size-p;
|
||||||
|
|
||||||
|
border-radius: $border-radius-normal;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-color: transparent;
|
||||||
|
color: $color-on-dark;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $color-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-weeks {
|
||||||
|
padding: $spacing-small;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
||||||
|
|
||||||
|
background-color: $color-dark;
|
||||||
|
color: $color-on-dark;
|
||||||
|
box-shadow: 0 0 3px 1px rgba(#000, 0.3);
|
||||||
|
|
||||||
|
> span {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-days {
|
||||||
|
padding: $spacing-small;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
||||||
|
|
||||||
|
> div {
|
||||||
|
height: 40px;
|
||||||
|
overflow: hidden;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
> button {
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
border-radius: $border-radius-normal;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-color: transparent;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border: 1px solid rgba($color-dark, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.today {
|
||||||
|
> button {
|
||||||
|
background-color: $color-primary;
|
||||||
|
color: $color-on-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,3 +8,4 @@
|
||||||
@import "container";
|
@import "container";
|
||||||
@import "menu_item";
|
@import "menu_item";
|
||||||
@import "form_element";
|
@import "form_element";
|
||||||
|
@import "calendar";
|
||||||
|
|
Loading…
Reference in a new issue