Fix numerous issues on the way to getting calendar embed working

Add inline source mapping for debugging
Fix web calendar's json conversion being incorrect
Start work on getting the calendar styled correctly
This commit is contained in:
NovaFox161
2020-03-08 13:32:54 -05:00
parent e179123417
commit 57d32054c1
15 changed files with 291 additions and 286 deletions

View File

@@ -22,7 +22,7 @@ export class DashboardGuildRunner implements TaskCallback {
this.apiUrl = apiUrl;
this.userId = userId;
this.guildId = parseInt(window.location.pathname.split("/")[2]);
this.guildId = parseInt(window.location.pathname.split("/")[3]);
}
startDashboardGuildPage() {

View File

@@ -10,10 +10,28 @@ export class EmbedCalendarRunner {
init(key: string, url: string) {
this.embedCalendar.init(key, url);
/**loop through stuff and assign onclick to the functions here since we can't do it in html
*due to how the code is compiled and minified, making it impossible to call these functions
**/
document.getElementById("previous-month")!.onclick = function () {
this.previousMonth();
}.bind(this);
document.getElementById("next-month")!.onclick = function () {
this.nextMonth();
}.bind(this);
let dateDisplays = document.getElementsByClassName("cal-date");
for (let i = 0; i < dateDisplays.length; i++) {
let e = (<HTMLElement>dateDisplays[i]);
e.onclick = function () {
this.selectDate(e.id);
}.bind(this);
}
}
//Handle user input for the calendar....
previousEmbedMonth() {
previousMonth() {
this.embedCalendar.selectedDate.setMonth(this.embedCalendar.selectedDate.getMonth() - 1);
this.embedCalendar.selectedDate.setDate(1);
@@ -22,7 +40,7 @@ export class EmbedCalendarRunner {
this.embedCalendar.getEventsForMonth();
}
nextEmbedMonth() {
nextMonth() {
this.embedCalendar.selectedDate.setMonth(this.embedCalendar.selectedDate.getMonth() + 1);
this.embedCalendar.selectedDate.setDate(1);
@@ -31,7 +49,7 @@ export class EmbedCalendarRunner {
this.embedCalendar.getEventsForMonth();
}
selectEmbedDate(clickedId: string) {
selectDate(clickedId: string) {
let e = document.getElementById(clickedId)!;
let dateString = e.innerHTML.split("[")[0];
if (dateString !== "") {

View File

@@ -7,20 +7,17 @@ function loadDashboardGuildPage(apiKey: string, apiUrl: string, userId: string)
}
function loadEmbedCalendar(embedKey: string, apiUrl: string) {
let embedRunner = new EmbedCalendarRunner();
embedRunner.init(embedKey, apiUrl);
}
document.onload = function () {
const body = document.getElementById("page-top");
if (body!.dataset.embed_key != null) {
loadEmbedCalendar(<string>body!.dataset.embed_key, <string>body!.dataset.api_url);
} else if (body!.dataset.api_key != null) {
loadDashboardGuildPage(<string>body!.dataset.api_key,
<string>body!.dataset.api_url, <string>body!.dataset.user_id)
}
};
const body = document.getElementById("page-top");
if (body!.dataset.embedKey != null) {
loadEmbedCalendar(<string>body!.dataset.embedKey, <string>body!.dataset.apiUrl);
} else if (body!.dataset.apiKey != null) {
loadDashboardGuildPage(<string>body!.dataset.apiKey,
<string>body!.dataset.apiUrl, <string>body!.dataset.userId)
}
(function ($) {
// Toggle the side navigation

View File

@@ -26,14 +26,14 @@ export class EmbedCalendar implements TaskCallback {
private calendarData: WebCalendar;
constructor() {
this.guildId = parseInt(window.location.pathname.split("/")[2]);
this.calNumber = parseInt(window.location.pathname.split("/")[3]);
this.todaysDate = new Date();
this.selectedDate = new Date();
this.displays = [];
this.apiKey = "";
this.apiUrl = "";
}
this.guildId = parseInt(window.location.pathname.split("/")[3]);
this.calNumber = parseInt(window.location.pathname.split("/")[4]);
this.todaysDate = new Date();
this.selectedDate = new Date();
this.displays = [];
this.apiKey = "";
this.apiUrl = "";
}
init(key: string, url: string) {
this.apiKey = key;
@@ -45,14 +45,16 @@ export class EmbedCalendar implements TaskCallback {
"If you keep receiving this error, please contact the developers");
} else {
//Request calendar information
let calReq = new CalendarGetRequest(this.guildId, this.calNumber, this);
calReq.provideApiDetails(this.apiKey, this.apiUrl);
//Request calendar information
let calReq = new CalendarGetRequest(this.guildId, this.calNumber, this);
calReq.provideApiDetails(this.apiKey, this.apiUrl);
//Execute the calls
calReq.execute();
this.getEventsForMonth();
}
//Execute the calls
this.setMonth(this.selectedDate);
calReq.execute();
this.getEventsForMonth();
}
return this;
}

View File

@@ -1,57 +1,57 @@
export class WebCalendar {
private _id: number;
private _address: string;
private _link: string;
private _name: string;
private _description: string;
private _timezone: string;
private _isExternal: boolean;
private _id: string;
private _address: string;
private _number: number;
private _external: boolean;
private _summary: string;
private _description: string;
private _timezone: string;
constructor() {
}
constructor() {
}
//Getter/setter pairs
get id() {
return this._id;
}
//Getter/setter pairs
get id() {
return this._id;
}
set id(id) {
this._id = id;
}
}
get address() {
return this._address;
}
get address() {
return this._address;
}
set address(address) {
this._address = address;
}
set address(address) {
this._address = address;
}
get link() {
return this._link;
}
get number() {
return this._number;
}
set link(link) {
this._link = link;
}
set number(num) {
this._number = num;
}
get name() {
return this._name;
}
get summary() {
return this._summary;
}
set name(name) {
this._name = name;
}
set summary(summary) {
this._summary = summary;
}
get description() {
return this._description;
}
get description() {
return this._description;
}
set description(description) {
this._description = description;
}
set description(description) {
this._description = description;
}
get timezone() {
get timezone() {
return this._timezone;
}
@@ -60,23 +60,24 @@ export class WebCalendar {
}
get isExternal() {
return this._isExternal;
return this._external;
}
set isExternal(external) {
this._isExternal = external;
this._external = external;
}
//Json conversions
toJson() {
let json: any = {
"id": this.id,
"address": this.address,
"link": this.link,
"name": this.name,
"timezone": this.timezone,
"external": this.isExternal
};
"calendar_address": this.address,
"calendar_id": this.id,
"calendar_number": this.number,
"external": this.isExternal,
"summary": this.summary,
"description": this.description,
"timezone": this.timezone
};
if (this.description != null) {
json.description = this.description;
@@ -86,16 +87,14 @@ export class WebCalendar {
}
fromJson(json: any) {
this.id = json.id;
this.address = json.address;
this.link = json.link;
this.name = json.name;
if (json.hasOwnProperty("description")) {
this.description = json.description;
}
this.timezone = json.timezone;
this.isExternal = json.external;
this.address = json.calendar_address;
this.id = json.calendar_id;
this.number = json.calendar_number;
this.isExternal = json.external;
this.summary = json.summary;
this.description = json.description;
this.timezone = json.timezone;
return this;
}
return this;
}
}

View File

@@ -1,49 +0,0 @@
(function ($) {
"use strict"; // Start of use strict
// Toggle the side navigation
$("#sidebarToggle, #sidebarToggleTop").on('click', function (e) {
$("body").toggleClass("sidebar-toggled");
$(".sidebar").toggleClass("toggled");
if ($(".sidebar").hasClass("toggled")) {
$('.sidebar .collapse').collapse('hide');
}
});
// Close any open menu accordions when window is resized below 768px
$(window).resize(function () {
if ($(window).width() < 768) {
$('.sidebar .collapse').collapse('hide');
}
});
// Prevent the content wrapper from scrolling when the fixed side navigation hovered over
$('body.fixed-nav .sidebar').on('mousewheel DOMMouseScroll wheel', function (e) {
if ($(window).width() > 768) {
const e0 = e.originalEvent,
delta = e0.wheelDelta || -e0.detail;
this.scrollTop += (delta < 0 ? 1 : -1) * 30;
e.preventDefault();
}
});
// Scroll to top button appear
$(document).on('scroll', function () {
const scrollDistance = $(this).scrollTop();
if (scrollDistance > 100) {
$('.scroll-to-top').fadeIn();
} else {
$('.scroll-to-top').fadeOut();
}
});
// Smooth scrolling using jQuery easing
$(document).on('click', 'a.scroll-to-top', function (e) {
const $anchor = $(this);
$('html, body').stop().animate({
scrollTop: ($($anchor.attr('href')).offset().top)
}, 1000, 'easeInOutExpo');
e.preventDefault();
});
})(jQuery); // End of use strict

View File

@@ -8,18 +8,18 @@ export class ElementUtil {
}
static showCalendarContainer() {
document.getElementById("calendar-container")!.setAttribute("hidden", "show");
document.getElementById("calendar-container")!.hidden = false;
}
static hideCalendarContainer() {
document.getElementById("calendar-container")!.setAttribute("hidden", "hidden");
document.getElementById("calendar-container")!.hidden = true;
}
static showEventsContainer() {
document.getElementById("events-container")!.setAttribute("hidden", "show");
document.getElementById("events-container")!.hidden = true;
}
static hideEventsContainer() {
document.getElementById("events-container")!.setAttribute("hidden", "hidden");
document.getElementById("events-container")!.hidden = true;
}
}

View File

@@ -0,0 +1,10 @@
@import "variables";
.cal-date {
width: 40px;
height: 40px;
}
.cal-date:hover {
background-color: $discal-red;
}

View File

@@ -17,6 +17,7 @@
@import "footer";
@import "loader";
@import "snackbar";
@import "calendar";
// Import Bootstrap
//noinspection CssUnknownTarget

View File

@@ -1344,133 +1344,133 @@ form.user .btn-user {
@-webkit-keyframes noise-anim {
0% {
clip: rect(13px, 9999px, 18px, 0);
clip: rect(50px, 9999px, 6px, 0);
}
5% {
clip: rect(85px, 9999px, 77px, 0);
clip: rect(35px, 9999px, 70px, 0);
}
10% {
clip: rect(26px, 9999px, 11px, 0);
clip: rect(55px, 9999px, 91px, 0);
}
15% {
clip: rect(35px, 9999px, 50px, 0);
clip: rect(48px, 9999px, 63px, 0);
}
20% {
clip: rect(61px, 9999px, 9px, 0);
clip: rect(91px, 9999px, 71px, 0);
}
25% {
clip: rect(40px, 9999px, 9px, 0);
clip: rect(97px, 9999px, 58px, 0);
}
30% {
clip: rect(35px, 9999px, 92px, 0);
clip: rect(16px, 9999px, 18px, 0);
}
35% {
clip: rect(21px, 9999px, 80px, 0);
clip: rect(47px, 9999px, 17px, 0);
}
40% {
clip: rect(31px, 9999px, 47px, 0);
clip: rect(59px, 9999px, 21px, 0);
}
45% {
clip: rect(66px, 9999px, 66px, 0);
clip: rect(60px, 9999px, 93px, 0);
}
50% {
clip: rect(62px, 9999px, 89px, 0);
clip: rect(53px, 9999px, 89px, 0);
}
55% {
clip: rect(33px, 9999px, 60px, 0);
clip: rect(97px, 9999px, 44px, 0);
}
60% {
clip: rect(91px, 9999px, 20px, 0);
clip: rect(5px, 9999px, 84px, 0);
}
65% {
clip: rect(68px, 9999px, 67px, 0);
clip: rect(92px, 9999px, 90px, 0);
}
70% {
clip: rect(99px, 9999px, 27px, 0);
clip: rect(66px, 9999px, 72px, 0);
}
75% {
clip: rect(80px, 9999px, 76px, 0);
clip: rect(78px, 9999px, 46px, 0);
}
80% {
clip: rect(77px, 9999px, 10px, 0);
clip: rect(7px, 9999px, 77px, 0);
}
85% {
clip: rect(56px, 9999px, 9px, 0);
clip: rect(58px, 9999px, 3px, 0);
}
90% {
clip: rect(28px, 9999px, 20px, 0);
clip: rect(62px, 9999px, 55px, 0);
}
95% {
clip: rect(96px, 9999px, 28px, 0);
clip: rect(54px, 9999px, 27px, 0);
}
100% {
clip: rect(66px, 9999px, 47px, 0);
clip: rect(34px, 9999px, 45px, 0);
}
}
@keyframes noise-anim {
0% {
clip: rect(13px, 9999px, 18px, 0);
clip: rect(50px, 9999px, 6px, 0);
}
5% {
clip: rect(85px, 9999px, 77px, 0);
clip: rect(35px, 9999px, 70px, 0);
}
10% {
clip: rect(26px, 9999px, 11px, 0);
clip: rect(55px, 9999px, 91px, 0);
}
15% {
clip: rect(35px, 9999px, 50px, 0);
clip: rect(48px, 9999px, 63px, 0);
}
20% {
clip: rect(61px, 9999px, 9px, 0);
clip: rect(91px, 9999px, 71px, 0);
}
25% {
clip: rect(40px, 9999px, 9px, 0);
clip: rect(97px, 9999px, 58px, 0);
}
30% {
clip: rect(35px, 9999px, 92px, 0);
clip: rect(16px, 9999px, 18px, 0);
}
35% {
clip: rect(21px, 9999px, 80px, 0);
clip: rect(47px, 9999px, 17px, 0);
}
40% {
clip: rect(31px, 9999px, 47px, 0);
clip: rect(59px, 9999px, 21px, 0);
}
45% {
clip: rect(66px, 9999px, 66px, 0);
clip: rect(60px, 9999px, 93px, 0);
}
50% {
clip: rect(62px, 9999px, 89px, 0);
clip: rect(53px, 9999px, 89px, 0);
}
55% {
clip: rect(33px, 9999px, 60px, 0);
clip: rect(97px, 9999px, 44px, 0);
}
60% {
clip: rect(91px, 9999px, 20px, 0);
clip: rect(5px, 9999px, 84px, 0);
}
65% {
clip: rect(68px, 9999px, 67px, 0);
clip: rect(92px, 9999px, 90px, 0);
}
70% {
clip: rect(99px, 9999px, 27px, 0);
clip: rect(66px, 9999px, 72px, 0);
}
75% {
clip: rect(80px, 9999px, 76px, 0);
clip: rect(78px, 9999px, 46px, 0);
}
80% {
clip: rect(77px, 9999px, 10px, 0);
clip: rect(7px, 9999px, 77px, 0);
}
85% {
clip: rect(56px, 9999px, 9px, 0);
clip: rect(58px, 9999px, 3px, 0);
}
90% {
clip: rect(28px, 9999px, 20px, 0);
clip: rect(62px, 9999px, 55px, 0);
}
95% {
clip: rect(96px, 9999px, 28px, 0);
clip: rect(54px, 9999px, 27px, 0);
}
100% {
clip: rect(66px, 9999px, 47px, 0);
clip: rect(34px, 9999px, 45px, 0);
}
}
@@ -1489,133 +1489,133 @@ form.user .btn-user {
@-webkit-keyframes noise-anim-2 {
0% {
clip: rect(97px, 9999px, 72px, 0);
clip: rect(84px, 9999px, 44px, 0);
}
5% {
clip: rect(46px, 9999px, 35px, 0);
clip: rect(66px, 9999px, 61px, 0);
}
10% {
clip: rect(27px, 9999px, 50px, 0);
clip: rect(53px, 9999px, 4px, 0);
}
15% {
clip: rect(53px, 9999px, 96px, 0);
clip: rect(77px, 9999px, 27px, 0);
}
20% {
clip: rect(90px, 9999px, 66px, 0);
clip: rect(20px, 9999px, 92px, 0);
}
25% {
clip: rect(84px, 9999px, 3px, 0);
clip: rect(71px, 9999px, 47px, 0);
}
30% {
clip: rect(72px, 9999px, 15px, 0);
clip: rect(25px, 9999px, 41px, 0);
}
35% {
clip: rect(89px, 9999px, 27px, 0);
clip: rect(81px, 9999px, 42px, 0);
}
40% {
clip: rect(75px, 9999px, 13px, 0);
clip: rect(13px, 9999px, 24px, 0);
}
45% {
clip: rect(60px, 9999px, 51px, 0);
clip: rect(33px, 9999px, 45px, 0);
}
50% {
clip: rect(47px, 9999px, 52px, 0);
clip: rect(65px, 9999px, 63px, 0);
}
55% {
clip: rect(6px, 9999px, 81px, 0);
clip: rect(87px, 9999px, 55px, 0);
}
60% {
clip: rect(52px, 9999px, 40px, 0);
clip: rect(46px, 9999px, 21px, 0);
}
65% {
clip: rect(10px, 9999px, 49px, 0);
clip: rect(63px, 9999px, 57px, 0);
}
70% {
clip: rect(31px, 9999px, 51px, 0);
clip: rect(66px, 9999px, 90px, 0);
}
75% {
clip: rect(43px, 9999px, 58px, 0);
clip: rect(45px, 9999px, 50px, 0);
}
80% {
clip: rect(8px, 9999px, 66px, 0);
clip: rect(48px, 9999px, 47px, 0);
}
85% {
clip: rect(76px, 9999px, 72px, 0);
clip: rect(56px, 9999px, 9px, 0);
}
90% {
clip: rect(7px, 9999px, 73px, 0);
clip: rect(51px, 9999px, 79px, 0);
}
95% {
clip: rect(99px, 9999px, 70px, 0);
clip: rect(48px, 9999px, 13px, 0);
}
100% {
clip: rect(41px, 9999px, 94px, 0);
clip: rect(96px, 9999px, 23px, 0);
}
}
@keyframes noise-anim-2 {
0% {
clip: rect(97px, 9999px, 72px, 0);
clip: rect(84px, 9999px, 44px, 0);
}
5% {
clip: rect(46px, 9999px, 35px, 0);
clip: rect(66px, 9999px, 61px, 0);
}
10% {
clip: rect(27px, 9999px, 50px, 0);
clip: rect(53px, 9999px, 4px, 0);
}
15% {
clip: rect(53px, 9999px, 96px, 0);
clip: rect(77px, 9999px, 27px, 0);
}
20% {
clip: rect(90px, 9999px, 66px, 0);
clip: rect(20px, 9999px, 92px, 0);
}
25% {
clip: rect(84px, 9999px, 3px, 0);
clip: rect(71px, 9999px, 47px, 0);
}
30% {
clip: rect(72px, 9999px, 15px, 0);
clip: rect(25px, 9999px, 41px, 0);
}
35% {
clip: rect(89px, 9999px, 27px, 0);
clip: rect(81px, 9999px, 42px, 0);
}
40% {
clip: rect(75px, 9999px, 13px, 0);
clip: rect(13px, 9999px, 24px, 0);
}
45% {
clip: rect(60px, 9999px, 51px, 0);
clip: rect(33px, 9999px, 45px, 0);
}
50% {
clip: rect(47px, 9999px, 52px, 0);
clip: rect(65px, 9999px, 63px, 0);
}
55% {
clip: rect(6px, 9999px, 81px, 0);
clip: rect(87px, 9999px, 55px, 0);
}
60% {
clip: rect(52px, 9999px, 40px, 0);
clip: rect(46px, 9999px, 21px, 0);
}
65% {
clip: rect(10px, 9999px, 49px, 0);
clip: rect(63px, 9999px, 57px, 0);
}
70% {
clip: rect(31px, 9999px, 51px, 0);
clip: rect(66px, 9999px, 90px, 0);
}
75% {
clip: rect(43px, 9999px, 58px, 0);
clip: rect(45px, 9999px, 50px, 0);
}
80% {
clip: rect(8px, 9999px, 66px, 0);
clip: rect(48px, 9999px, 47px, 0);
}
85% {
clip: rect(76px, 9999px, 72px, 0);
clip: rect(56px, 9999px, 9px, 0);
}
90% {
clip: rect(7px, 9999px, 73px, 0);
clip: rect(51px, 9999px, 79px, 0);
}
95% {
clip: rect(99px, 9999px, 70px, 0);
clip: rect(48px, 9999px, 13px, 0);
}
100% {
clip: rect(41px, 9999px, 94px, 0);
clip: rect(96px, 9999px, 23px, 0);
}
}
@@ -1747,6 +1747,15 @@ body.sidebar-toggled footer.sticky-footer {
}
}
.cal-date {
width: 40px;
height: 40px;
}
.cal-date:hover {
background-color: #ef0813;
}
/*!
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
@@ -11177,6 +11186,22 @@ button.bg-brand-discord:focus {
padding-top: 100%;
}
.embed-responsive-21by9::before {
padding-top: 42.85714%;
}
.embed-responsive-16by9::before {
padding-top: 56.25%;
}
.embed-responsive-4by3::before {
padding-top: 75%;
}
.embed-responsive-1by1::before {
padding-top: 100%;
}
.flex-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -48,7 +48,7 @@
</head>
<body id="page-top" th:data-api_key="${key}" th:data-api_url="${api_url}" th:data-user_id="${id}">
<body id="page-top" th:data-api-key="${key}" th:data-api-url="${api_url}" th:data-user-id="${id}">
<!-- Page Wrapper -->
<div id="wrapper">

View File

@@ -48,7 +48,7 @@
</head>
<body id="page-top" th:data-embed_key="${embed_key}" th:data-api_url="${api_url}">
<body id="page-top" th:data-embed-key="${embed_key}" th:data-api-url="${api_url}">
<!-- Page Wrapper -->
<div id="wrapper">
@@ -230,13 +230,13 @@
border="#bcbcbc" cellpadding="4" cellspacing="0">
<tbody>
<tr style="height: 50px;">
<th class="nav" onclick="previousEmbedMonth()"><</th>
<th id="previous-month" class="nav"><</th>
<th></th>
<th></th>
<th id="month-display"></th>
<th></th>
<th></th>
<th class="nav" onclick="nextEmbedMonth()">></th>
<th id="next-month" class="nav">></th>
</tr>
<tr style="height: 40px;">
<th>Sunday</th>
@@ -247,60 +247,60 @@
<th>Friday</th>
<th>Saturday</th>
</tr>
<tr>
<td onclick="selectEmbedDate(this.id)" id="r1c1"></td>
<td onclick="selectEmbedDate(this.id)" id="r1c2"></td>
<td onclick="selectEmbedDate(this.id)" id="r1c3"></td>
<td onclick="selectEmbedDate(this.id)" id="r1c4"></td>
<td onclick="selectEmbedDate(this.id)" id="r1c5"></td>
<td onclick="selectEmbedDate(this.id)" id="r1c6"></td>
<td onclick="selectEmbedDate(this.id)" id="r1c7"></td>
</tr>
<tr>
<td onclick="selectEmbedDate(this.id)" id="r2c1"></td>
<td onclick="selectEmbedDate(this.id)" id="r2c2"></td>
<td onclick="selectEmbedDate(this.id)" id="r2c3"></td>
<td onclick="selectEmbedDate(this.id)" id="r2c4"></td>
<td onclick="selectEmbedDate(this.id)" id="r2c5"></td>
<td onclick="selectEmbedDate(this.id)" id="r2c6"></td>
<td onclick="selectEmbedDate(this.id)" id="r2c7"></td>
</tr>
<tr>
<td onclick="selectEmbedDate(this.id)" id="r3c1"></td>
<td onclick="selectEmbedDate(this.id)" id="r3c2"></td>
<td onclick="selectEmbedDate(this.id)" id="r3c3"></td>
<td onclick="selectEmbedDate(this.id)" id="r3c4"></td>
<td onclick="selectEmbedDate(this.id)" id="r3c5"></td>
<td onclick="selectEmbedDate(this.id)" id="r3c6"></td>
<td onclick="selectEmbedDate(this.id)" id="r3c7"></td>
</tr>
<tr>
<td onclick="selectEmbedDate(this.id)" id="r4c1"></td>
<td onclick="selectEmbedDate(this.id)" id="r4c2"></td>
<td onclick="selectEmbedDate(this.id)" id="r4c3"></td>
<td onclick="selectEmbedDate(this.id)" id="r4c4"></td>
<td onclick="selectEmbedDate(this.id)" id="r4c5"></td>
<td onclick="selectEmbedDate(this.id)" id="r4c6"></td>
<td onclick="selectEmbedDate(this.id)" id="r4c7"></td>
</tr>
<tr>
<td onclick="selectEmbedDate(this.id)" id="r5c1"></td>
<td onclick="selectEmbedDate(this.id)" id="r5c2"></td>
<td onclick="selectEmbedDate(this.id)" id="r5c3"></td>
<td onclick="selectEmbedDate(this.id)" id="r5c4"></td>
<td onclick="selectEmbedDate(this.id)" id="r5c5"></td>
<td onclick="selectEmbedDate(this.id)" id="r5c6"></td>
<td onclick="selectEmbedDate(this.id)" id="r5c7"></td>
</tr>
<tr>
<td onclick="selectEmbedDate(this.id)" id="r6c1"></td>
<td onclick="selectEmbedDate(this.id)" id="r6c2"></td>
<td onclick="selectEmbedDate(this.id)" id="r6c3"></td>
<td onclick="selectEmbedDate(this.id)" id="r6c4"></td>
<td onclick="selectEmbedDate(this.id)" id="r6c5"></td>
<td onclick="selectEmbedDate(this.id)" id="r6c6"></td>
<td onclick="selectEmbedDate(this.id)" id="r6c7"></td>
</tr>
<tr>
<td class="cal-date" id="r1c1"></td>
<td class="cal-date" id="r1c2"></td>
<td class="cal-date" id="r1c3"></td>
<td class="cal-date" id="r1c4"></td>
<td class="cal-date" id="r1c5"></td>
<td class="cal-date" id="r1c6"></td>
<td class="cal-date" id="r1c7"></td>
</tr>
<tr>
<td class="cal-date" id="r2c1"></td>
<td class="cal-date" id="r2c2"></td>
<td class="cal-date" id="r2c3"></td>
<td class="cal-date" id="r2c4"></td>
<td class="cal-date" id="r2c5"></td>
<td class="cal-date" id="r2c6"></td>
<td class="cal-date" id="r2c7"></td>
</tr>
<tr>
<td class="cal-date" id="r3c1"></td>
<td class="cal-date" id="r3c2"></td>
<td class="cal-date" id="r3c3"></td>
<td class="cal-date" id="r3c4"></td>
<td class="cal-date" id="r3c5"></td>
<td class="cal-date" id="r3c6"></td>
<td class="cal-date" id="r3c7"></td>
</tr>
<tr>
<td class="cal-date" id="r4c1"></td>
<td class="cal-date" id="r4c2"></td>
<td class="cal-date" id="r4c3"></td>
<td class="cal-date" id="r4c4"></td>
<td class="cal-date" id="r4c5"></td>
<td class="cal-date" id="r4c6"></td>
<td class="cal-date" id="r4c7"></td>
</tr>
<tr>
<td class="cal-date" id="r5c1"></td>
<td class="cal-date" id="r5c2"></td>
<td class="cal-date" id="r5c3"></td>
<td class="cal-date" id="r5c4"></td>
<td class="cal-date" id="r5c5"></td>
<td class="cal-date" id="r5c6"></td>
<td class="cal-date" id="r5c7"></td>
</tr>
<tr>
<td class="cal-date" id="r6c1"></td>
<td class="cal-date" id="r6c2"></td>
<td class="cal-date" id="r6c3"></td>
<td class="cal-date" id="r6c4"></td>
<td class="cal-date" id="r6c5"></td>
<td class="cal-date" id="r6c6"></td>
<td class="cal-date" id="r6c7"></td>
</tr>
</tbody>
</table>

View File

@@ -3,6 +3,7 @@ const path = require('path');
module.exports = {
mode: "production",
entry: './web/src/main/javascript/index.ts',
devtool: "inline-source-map",
module: {
rules: [{
test: /\.tsx?$/,