diff --git a/API/src/main/java/com/cloudcraftgaming/discal/api/message/calendar/CalendarMessageFormatter.java b/API/src/main/java/com/cloudcraftgaming/discal/api/message/calendar/CalendarMessageFormatter.java
index 87841590..56ccd027 100644
--- a/API/src/main/java/com/cloudcraftgaming/discal/api/message/calendar/CalendarMessageFormatter.java
+++ b/API/src/main/java/com/cloudcraftgaming/discal/api/message/calendar/CalendarMessageFormatter.java
@@ -16,11 +16,17 @@ import java.net.URI;
* For Project: DisCal-Discord-Bot
*/
public class CalendarMessageFormatter {
+ @Deprecated
public static String getCalendarLink(String calId) {
URI callURI = URI.create(calId);
return "https://calendar.google.com/calendar/embed?src=" + callURI;
}
+ //TODO: Add support for multiple calendars.
+ public static String getCalendarLink(long guildId) {
+ return "https://www.discalbot.com/embed/calendar/" + guildId;
+ }
+
public static EmbedObject getCalendarLinkEmbed(Calendar cal, GuildSettings settings) {
EmbedBuilder em = new EmbedBuilder();
em.withAuthorIcon(DisCalAPI.getAPI().getClient().getGuildByID(266063520112574464L).getIconURL());
@@ -33,7 +39,7 @@ public class CalendarMessageFormatter {
//Some error, desc probably never set, just ignore no need to log.
}
em.appendField(MessageManager.getMessage("Embed.Calendar.Link.TimeZone", settings), cal.getTimeZone(), false);
- em.withUrl(CalendarMessageFormatter.getCalendarLink(cal.getId()));
+ em.withUrl(CalendarMessageFormatter.getCalendarLink(settings.getGuildID()));
em.withFooterText(MessageManager.getMessage("Embed.Calendar.Link.CalendarId", "%id%", cal.getId(), settings));
em.withColor(56, 138, 237);
diff --git a/API/src/main/java/com/cloudcraftgaming/discal/api/network/google/Authorization.java b/API/src/main/java/com/cloudcraftgaming/discal/api/network/google/Authorization.java
index 08be7f9e..e969c65c 100644
--- a/API/src/main/java/com/cloudcraftgaming/discal/api/network/google/Authorization.java
+++ b/API/src/main/java/com/cloudcraftgaming/discal/api/network/google/Authorization.java
@@ -197,7 +197,7 @@ public class Authorization {
em.appendField(MessageManager.getMessage("Embed.AddCalendar.List.TimeZone", settings), i.getTimeZone(), false);
em.appendField(MessageManager.getMessage("Embed.AddCalendar.List.ID", settings), i.getId(), false);
- em.withUrl(CalendarMessageFormatter.getCalendarLink(i.getId()));
+ em.withUrl(CalendarMessageFormatter.getCalendarLink(settings.getGuildID()));
em.withColor(56, 138, 237);
Message.sendDirectMessage(em.build(), poll.getUser());
}
diff --git a/API/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java b/API/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java
index 71c9b087..2c6a0371 100644
--- a/API/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java
+++ b/API/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java
@@ -6,8 +6,6 @@ import com.cloudcraftgaming.discal.api.object.calendar.CalendarData;
import com.cloudcraftgaming.discal.logger.Logger;
import com.google.api.services.calendar.model.Calendar;
-import java.net.URI;
-
/**
* Created by Nova Fox on 1/7/18.
* Website: www.cloudcraftgaming.com
@@ -93,7 +91,7 @@ public class WebCalendar {
} else {
id = cd.getCalendarId();
address = cd.getCalendarAddress();
- link = "https://calendar.google.com/calendar/embed?src=" + URI.create(cd.getCalendarAddress());
+ link = "https://www.discalbot.com/embed/calendar/" + gs.getGuildID();
external = cd.isExternal();
try {
if (cd.isExternal()) {
diff --git a/Bot/src/main/java/com/cloudcraftgaming/discal/bot/internal/calendar/calendar/CalendarMessageFormatter.java b/Bot/src/main/java/com/cloudcraftgaming/discal/bot/internal/calendar/calendar/CalendarMessageFormatter.java
index 2fcf0fd2..188c925f 100644
--- a/Bot/src/main/java/com/cloudcraftgaming/discal/bot/internal/calendar/calendar/CalendarMessageFormatter.java
+++ b/Bot/src/main/java/com/cloudcraftgaming/discal/bot/internal/calendar/calendar/CalendarMessageFormatter.java
@@ -16,11 +16,17 @@ import java.net.URI;
* For Project: DisCal
*/
public class CalendarMessageFormatter {
+ @Deprecated
public static String getCalendarLink(String calId) {
URI callURI = URI.create(calId);
return "https://calendar.google.com/calendar/embed?src=" + callURI;
}
+ //TODO: Add support for multiple calendars.
+ public static String getCalendarLink(long guildId) {
+ return "https://www.discalbot.com/embed/calendar/" + guildId;
+ }
+
public static EmbedObject getCalendarLinkEmbed(Calendar cal, GuildSettings settings) {
EmbedBuilder em = new EmbedBuilder();
em.withAuthorIcon(DisCalAPI.getAPI().getClient().getGuildByID(266063520112574464L).getIconURL());
@@ -33,7 +39,7 @@ public class CalendarMessageFormatter {
//Some error, desc probably never set, just ignore no need to log.
}
em.appendField(MessageManager.getMessage("Embed.Calendar.Link.TimeZone", settings), cal.getTimeZone(), false);
- em.withUrl(CalendarMessageFormatter.getCalendarLink(cal.getId()));
+ em.withUrl(CalendarMessageFormatter.getCalendarLink(settings.getGuildID()));
em.withFooterText(MessageManager.getMessage("Embed.Calendar.Link.CalendarId", "%id%", cal.getId(), settings));
em.withColor(56, 138, 237);
diff --git a/Bot/src/main/java/com/cloudcraftgaming/discal/bot/module/command/TimeCommand.java b/Bot/src/main/java/com/cloudcraftgaming/discal/bot/module/command/TimeCommand.java
index af7e488d..f9e4cfeb 100644
--- a/Bot/src/main/java/com/cloudcraftgaming/discal/bot/module/command/TimeCommand.java
+++ b/Bot/src/main/java/com/cloudcraftgaming/discal/bot/module/command/TimeCommand.java
@@ -105,7 +105,7 @@ public class TimeCommand implements ICommand {
em.appendField(MessageManager.getMessage("Embed.Time.TimeZone", settings), cal.getTimeZone(), false);
em.withFooterText(MessageManager.getMessage("Embed.Time.Footer", settings));
- em.withUrl(CalendarMessageFormatter.getCalendarLink(cal.getId()));
+ em.withUrl(CalendarMessageFormatter.getCalendarLink(settings.getGuildID()));
em.withColor(56, 138, 237);
Message.sendMessage(em.build(), event);
}
diff --git a/Website/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java b/Website/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java
index 1b45cde9..26b56569 100644
--- a/Website/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java
+++ b/Website/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java
@@ -44,19 +44,25 @@ public class SparkUtils {
//Requires "Authorization Header
if (request.headers().contains("Authorization")) {
String key = request.headers("Authorization");
- UserAPIAccount acc = DatabaseManager.getManager().getAPIAccount(key);
- if (acc != null) {
- if (acc.isBlocked()) {
- Logger.getLogger().api("Attempted to use blocked API Key: " + acc.getAPIKey(), request.ip());
- halt(401, "Unauthorized");
- } else {
- //Everything checks out!
- acc.setUses(acc.getUses() + 1);
- DatabaseManager.getManager().updateAPIAccount(acc);
- }
+
+ //TODO: Handle this shit better but whatever
+ if (key.equals("EMBEDDED")) {
+ Logger.getLogger().api("User using embed", request.ip(), request.host(), request.pathInfo());
} else {
- Logger.getLogger().api("Attempted to use invalid API Key: " + key, request.ip());
- halt(401, "Unauthorized");
+ UserAPIAccount acc = DatabaseManager.getManager().getAPIAccount(key);
+ if (acc != null) {
+ if (acc.isBlocked()) {
+ Logger.getLogger().api("Attempted to use blocked API Key: " + acc.getAPIKey(), request.ip());
+ halt(401, "Unauthorized");
+ } else {
+ //Everything checks out!
+ acc.setUses(acc.getUses() + 1);
+ DatabaseManager.getManager().updateAPIAccount(acc);
+ }
+ } else {
+ Logger.getLogger().api("Attempted to use invalid API Key: " + key, request.ip());
+ halt(401, "Unauthorized");
+ }
}
} else {
Logger.getLogger().api("Attempted to use API without authorization header", request.ip());
@@ -64,11 +70,9 @@ public class SparkUtils {
}
}
//Only accept json because its easier to parse and handle.
- /*
if (!request.contentType().equalsIgnoreCase("application/json")) {
halt(400, "Bad Request");
}
- */
});
//API endpoints
@@ -152,7 +156,7 @@ public class SparkUtils {
get("/dashboard/guild/rsvp", (rq, rs) -> new ModelAndView(DiscordAccountHandler.getHandler().getAccount(rq.session().id()), "pages/dashboard/components/rsvp"), new ThymeleafTemplateEngine());
//Embed pages
- //get("/embed/calendar/:guild", (rq, rs) -> new ModelAndView(DiscordAccountHandler.getHandler().getAccountForGuildEmbed(rq.session().id(), rq.params(":guild")), "pages/embed/calendar"), new ThymeleafTemplateEngine());
+ get("/embed/calendar/:guild", (rq, rs) -> new ModelAndView(DiscordAccountHandler.getHandler().getAccountForGuildEmbed(rq.session().id(), rq.params(":guild")), "pages/embed/calendar"), new ThymeleafTemplateEngine());
//Various other doc pages
get("/docs/event/colors", (rq, rs) -> new ModelAndView(DiscordAccountHandler.getHandler().getAccount(rq.session().id()), "pages/docs/events/event-colors"), new ThymeleafTemplateEngine());
diff --git a/Website/src/main/resources/web/public/pages/embed/calendar.html b/Website/src/main/resources/web/public/pages/embed/calendar.html
index e77f8d23..3d00ecf2 100644
--- a/Website/src/main/resources/web/public/pages/embed/calendar.html
+++ b/Website/src/main/resources/web/public/pages/embed/calendar.html
@@ -31,7 +31,7 @@
integrity="sha256-lnJeulOa3e5IO2EzHr8jKJ3CbT80MBwkS5a+n2ooIr4=" crossorigin="anonymous">
-
+
DISCAL
About
@@ -137,8 +137,14 @@
-
All Dates and
- Times are displayed in your local timezone!
+
All Dates and Times are
+ displayed in your local timezone!
+
+
+
+
+
@@ -147,6 +153,8 @@
+
+
diff --git a/Website/src/main/resources/web/public/scripts/dashboard/calendar.js b/Website/src/main/resources/web/public/scripts/dashboard/calendar.js
index 487ca68c..372bc9e1 100644
--- a/Website/src/main/resources/web/public/scripts/dashboard/calendar.js
+++ b/Website/src/main/resources/web/public/scripts/dashboard/calendar.js
@@ -165,26 +165,36 @@ function getEventsForMonth() {
"StartEpoch": ds.getTime().toString()
};
- var q = $.post("/api/v1/events/list/month", JSON.stringify(bodyRaw), function (response) {
- var obj = JSON.parse(response);
+ $.ajax({
+ url: "/api/v1/events/list/month",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ method: "POST",
+ dataType: "json",
+ data: JSON.stringify(bodyRaw),
+ success: function (json) {
+ var obj = json;
- //Display the event counts on the calendar...
- for (var i = 0; i < obj.events.length; i++) {
- var d = new Date(obj.events[i].epochStart);
+ //Display the event counts on the calendar...
+ for (var i = 0; i < obj.events.length; i++) {
+ var d = new Date(obj.events[i].epochStart);
- var e = document.getElementById(calendar.displays[d.getDate()]);
+ var e = document.getElementById(calendar.displays[d.getDate()]);
- if (e.innerHTML.indexOf("[") === -1) {
- e.innerHTML = d.getDate() + "[1]";
- } else {
- e.innerHTML = d.getDate().toString() + "[" + (parseInt(e.innerHTML.split("[")[1][0]) + 1).toString() + "]";
+ if (e.innerHTML.indexOf("[") === -1) {
+ e.innerHTML = d.getDate() + "[1]";
+ } else {
+ e.innerHTML = d.getDate().toString() + "[" + (parseInt(e.innerHTML.split("[")[1][0]) + 1).toString() + "]";
+ }
}
- }
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ var obj = JSON.parse(jqXHR.responseText);
- })
- .fail(function () {
- showSnackbar("Our hippos failed to find your events!");
- }, "json");
+ showSnackbar("[ERROR] " + obj.reason);
+ }
+ });
}
function getEventsForSelectedDate() {
@@ -197,342 +207,353 @@ function getEventsForSelectedDate() {
"StartEpoch": ds.getTime().toString()
};
- var q = $.post("/api/v1/events/list/date", JSON.stringify(bodyRaw), function (response) {
- var obj = JSON.parse(response);
+ $.ajax({
+ url: "/api/v1/events/list/date",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ method: "POST",
+ dataType: "json",
+ data: JSON.stringify(bodyRaw),
+ success: function (json) {
+ var obj = json;
- //Display the selected day's event details for editing and such.
- var container = document.getElementById("event-container");
+ //Display the selected day's event details for editing and such.
+ var container = document.getElementById("event-container");
- while (container.firstChild) {
- container.removeChild(container.firstChild);
- }
-
- for (var i = 0; i < obj.count; i++) {
- var event = obj.events[i];
-
- //Create Edit Button
- var editButton = document.createElement("button");
- editButton.type = "button";
- editButton.setAttribute("data-toggle", "modal");
- editButton.setAttribute("data-target", "#modal-" + event.id);
- editButton.innerHTML = "Edit";
- container.appendChild(editButton);
-
- //Create Delete button
- var deleteButton = document.createElement("button");
- deleteButton.type = "button";
- deleteButton.innerHTML = "Delete";
- deleteButton.className = "danger";
- deleteButton.id = "delete-" + event.id;
- deleteButton.onclick = function (ev) {
- deleteEvent(this.id)
- };
- container.appendChild(deleteButton);
-
- container.appendChild(document.createElement("br"));
- container.appendChild(document.createElement("br"));
-
- //Create modal container
- var modalContainer = document.createElement("div");
- modalContainer.className = "modal fade";
- modalContainer.id = "modal-" + event.id;
- modalContainer.role = "dialog";
- container.appendChild(modalContainer);
-
- //Create modal-dialog
- var modalDia = document.createElement("div");
- modalDia.className = "modal-dialog";
- modalContainer.appendChild(modalDia);
-
- //Create Modal Content
- var modalCon = document.createElement("div");
- modalCon.className = "modal-content";
- modalDia.appendChild(modalCon);
-
- //Create modal header and title
- var modalHeader = document.createElement("div");
- modalHeader.className = "modal-header";
- modalCon.appendChild(modalHeader);
- var modalTitle = document.createElement("h4");
- modalTitle.className = "modal-title";
- modalTitle.innerHTML = "Editing Event";
- modalHeader.appendChild(modalTitle);
-
- //Create Modal Body
- var modalBody = document.createElement("div");
- modalBody.className = "modal-body";
- modalCon.appendChild(modalBody);
-
- var form = document.createElement("form");
- modalBody.appendChild(form);
-
- //Summary
- var summaryLabel = document.createElement("label");
- summaryLabel.innerHTML = "Summary";
- summaryLabel.appendChild(document.createElement("br"));
- form.appendChild(summaryLabel);
- var summary = document.createElement("input");
- summary.name = "summary";
- summary.type = "text";
- summary.value = event.summary;
- summary.id = "editSummary-" + event.id;
- summaryLabel.appendChild(summary);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Description
- var descriptionLabel = document.createElement("label");
- descriptionLabel.innerHTML = "Description";
- descriptionLabel.appendChild(document.createElement("br"));
- form.appendChild(descriptionLabel);
- var description = document.createElement("input");
- description.name = "edit-description";
- description.type = "text";
- description.value = event.description;
- description.id = "editDescription-" + event.id;
- descriptionLabel.appendChild(description);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Start date and time
- var sd = new Date(event.epochStart);
- var startLabel = document.createElement("label");
- startLabel.innerHTML = "Start Date and Time";
- startLabel.appendChild(document.createElement("br"));
- form.appendChild(startLabel);
- var startDate = document.createElement("input");
- startDate.name = "start-date";
- startDate.type = "date";
- startDate.valueAsDate = sd;
- startDate.required = true;
- startDate.id = "editStartDate-" + event.id;
- startLabel.appendChild(startDate);
- var startTime = document.createElement("input");
- startTime.name = "start-time";
- startTime.type = "time";
- startTime.value = (sd.getHours() < 10 ? "0" : "") + sd.getHours() + ":" + (sd.getMinutes() < 10 ? "0" : "") + sd.getMinutes();
- startTime.required = true;
- startTime.id = "editStartTime-" + event.id;
- startLabel.appendChild(startTime);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //End date and time
- var ed = new Date(event.epochEnd);
- var endLabel = document.createElement("label");
- endLabel.innerHTML = "End Date and Time";
- endLabel.appendChild(document.createElement("br"));
- form.appendChild(endLabel);
- var endDate = document.createElement("input");
- endDate.name = "end-date";
- endDate.type = "date";
- endDate.valueAsDate = ed;
- endDate.required = true;
- endDate.id = "editEndDate-" + event.id;
- endLabel.appendChild(endDate);
- var endTime = document.createElement("input");
- endTime.name = "end-time";
- endTime.type = "time";
- endTime.value = (ed.getHours() < 10 ? "0" : "") + ed.getHours() + ":" + (ed.getMinutes() < 10 ? "0" : "") + ed.getMinutes();
- endTime.required = true;
- endTime.id = "editEndTime-" + event.id;
- endLabel.appendChild(endTime);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
-
- //Timezone (read only)
- var timezoneLabel = document.createElement("label");
- timezoneLabel.innerHTML = "Timezone";
- timezoneLabel.appendChild(document.createElement("br"));
- form.appendChild(timezoneLabel);
- var timezone = document.createElement("input");
- timezone.name = "timezone";
- timezone.type = "text";
- timezone.value = event.timezone;
- timezone.disabled = true;
- timezoneLabel.appendChild(timezone);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Location
- var locationLabel = document.createElement("label");
- locationLabel.innerHTML = "Location";
- locationLabel.appendChild(document.createElement("br"));
- form.appendChild(locationLabel);
- var location = document.createElement("input");
- location.name = "location";
- location.type = "text";
- location.value = event.location;
- location.id = "editLocation-" + event.id;
- locationLabel.appendChild(location);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Color
- var colorLabel = document.createElement("label");
- colorLabel.innerHTML = "Color";
- colorLabel.appendChild(document.createElement("br"));
- form.appendChild(colorLabel);
- var colorSelect = document.createElement("select");
- colorSelect.name = "color";
- colorSelect.id = "editColor-" + event.id;
- colorLabel.appendChild(colorSelect);
-
- for (var c = 0; c < colors().length; c++) {
- var option = document.createElement("option");
- option.value = colors()[c];
- option.text = colors()[c];
- option.selected = (event.color === colors()[c]);
- colorSelect.appendChild(option);
+ while (container.firstChild) {
+ container.removeChild(container.firstChild);
}
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
- //Recurrence
- var recurrenceLabel = document.createElement("label");
- recurrenceLabel.innerHTML = "Recurrence";
- recurrenceLabel.appendChild(document.createElement("br"));
- form.appendChild(recurrenceLabel);
+ for (var i = 0; i < obj.count; i++) {
+ var event = obj.events[i];
- if (event.isParent) {
- var enableRecurrence = document.createElement("input");
- enableRecurrence.name = "enable-recurrence";
- enableRecurrence.type = "checkbox";
- enableRecurrence.checked = false;
- enableRecurrence.id = "editEnableRecur-" + event.id;
- enableRecurrence.onclick = function (ev) {
- changeRecurrenceEditDisplays(this);
+ //Create Edit Button
+ var editButton = document.createElement("button");
+ editButton.type = "button";
+ editButton.setAttribute("data-toggle", "modal");
+ editButton.setAttribute("data-target", "#modal-" + event.id);
+ editButton.innerHTML = "Edit";
+ container.appendChild(editButton);
+
+ //Create Delete button
+ var deleteButton = document.createElement("button");
+ deleteButton.type = "button";
+ deleteButton.innerHTML = "Delete";
+ deleteButton.className = "danger";
+ deleteButton.id = "delete-" + event.id;
+ deleteButton.onclick = function (ev) {
+ deleteEvent(this.id)
};
- recurrenceLabel.appendChild(enableRecurrence);
+ container.appendChild(deleteButton);
+
+ container.appendChild(document.createElement("br"));
+ container.appendChild(document.createElement("br"));
+
+ //Create modal container
+ var modalContainer = document.createElement("div");
+ modalContainer.className = "modal fade";
+ modalContainer.id = "modal-" + event.id;
+ modalContainer.role = "dialog";
+ container.appendChild(modalContainer);
+
+ //Create modal-dialog
+ var modalDia = document.createElement("div");
+ modalDia.className = "modal-dialog";
+ modalContainer.appendChild(modalDia);
+
+ //Create Modal Content
+ var modalCon = document.createElement("div");
+ modalCon.className = "modal-content";
+ modalDia.appendChild(modalCon);
+
+ //Create modal header and title
+ var modalHeader = document.createElement("div");
+ modalHeader.className = "modal-header";
+ modalCon.appendChild(modalHeader);
+ var modalTitle = document.createElement("h4");
+ modalTitle.className = "modal-title";
+ modalTitle.innerHTML = "Editing Event";
+ modalHeader.appendChild(modalTitle);
+
+ //Create Modal Body
+ var modalBody = document.createElement("div");
+ modalBody.className = "modal-body";
+ modalCon.appendChild(modalBody);
+
+ var form = document.createElement("form");
+ modalBody.appendChild(form);
+
+ //Summary
+ var summaryLabel = document.createElement("label");
+ summaryLabel.innerHTML = "Summary";
+ summaryLabel.appendChild(document.createElement("br"));
+ form.appendChild(summaryLabel);
+ var summary = document.createElement("input");
+ summary.name = "summary";
+ summary.type = "text";
+ summary.value = event.summary;
+ summary.id = "editSummary-" + event.id;
+ summaryLabel.appendChild(summary);
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- //Frequency
- var frequencyLabel = document.createElement("label");
- frequencyLabel.innerHTML = "Recurrence - Frequency";
- frequencyLabel.appendChild(document.createElement("br"));
- form.appendChild(frequencyLabel);
- var freqSelect = document.createElement("select");
- freqSelect.name = "frequency";
- freqSelect.id = "editFrequency-" + event.id;
- frequencyLabel.appendChild(freqSelect);
+ //Description
+ var descriptionLabel = document.createElement("label");
+ descriptionLabel.innerHTML = "Description";
+ descriptionLabel.appendChild(document.createElement("br"));
+ form.appendChild(descriptionLabel);
+ var description = document.createElement("input");
+ description.name = "edit-description";
+ description.type = "text";
+ description.value = event.description;
+ description.id = "editDescription-" + event.id;
+ descriptionLabel.appendChild(description);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
- for (var f = 0; f < frequencies().length; f++) {
- var op = document.createElement("option");
- op.value = frequencies()[f];
- op.text = frequencies()[f];
- op.selected = (event.recurrence.frequency === frequencies()[f]);
- freqSelect.appendChild(op);
+ //Start date and time
+ var sd = new Date(event.epochStart);
+ var startLabel = document.createElement("label");
+ startLabel.innerHTML = "Start Date and Time";
+ startLabel.appendChild(document.createElement("br"));
+ form.appendChild(startLabel);
+ var startDate = document.createElement("input");
+ startDate.name = "start-date";
+ startDate.type = "date";
+ startDate.valueAsDate = sd;
+ startDate.required = true;
+ startDate.id = "editStartDate-" + event.id;
+ startLabel.appendChild(startDate);
+ var startTime = document.createElement("input");
+ startTime.name = "start-time";
+ startTime.type = "time";
+ startTime.value = (sd.getHours() < 10 ? "0" : "") + sd.getHours() + ":" + (sd.getMinutes() < 10 ? "0" : "") + sd.getMinutes();
+ startTime.required = true;
+ startTime.id = "editStartTime-" + event.id;
+ startLabel.appendChild(startTime);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //End date and time
+ var ed = new Date(event.epochEnd);
+ var endLabel = document.createElement("label");
+ endLabel.innerHTML = "End Date and Time";
+ endLabel.appendChild(document.createElement("br"));
+ form.appendChild(endLabel);
+ var endDate = document.createElement("input");
+ endDate.name = "end-date";
+ endDate.type = "date";
+ endDate.valueAsDate = ed;
+ endDate.required = true;
+ endDate.id = "editEndDate-" + event.id;
+ endLabel.appendChild(endDate);
+ var endTime = document.createElement("input");
+ endTime.name = "end-time";
+ endTime.type = "time";
+ endTime.value = (ed.getHours() < 10 ? "0" : "") + ed.getHours() + ":" + (ed.getMinutes() < 10 ? "0" : "") + ed.getMinutes();
+ endTime.required = true;
+ endTime.id = "editEndTime-" + event.id;
+ endLabel.appendChild(endTime);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+
+ //Timezone (read only)
+ var timezoneLabel = document.createElement("label");
+ timezoneLabel.innerHTML = "Timezone";
+ timezoneLabel.appendChild(document.createElement("br"));
+ form.appendChild(timezoneLabel);
+ var timezone = document.createElement("input");
+ timezone.name = "timezone";
+ timezone.type = "text";
+ timezone.value = event.timezone;
+ timezone.disabled = true;
+ timezoneLabel.appendChild(timezone);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Location
+ var locationLabel = document.createElement("label");
+ locationLabel.innerHTML = "Location";
+ locationLabel.appendChild(document.createElement("br"));
+ form.appendChild(locationLabel);
+ var location = document.createElement("input");
+ location.name = "location";
+ location.type = "text";
+ location.value = event.location;
+ location.id = "editLocation-" + event.id;
+ locationLabel.appendChild(location);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Color
+ var colorLabel = document.createElement("label");
+ colorLabel.innerHTML = "Color";
+ colorLabel.appendChild(document.createElement("br"));
+ form.appendChild(colorLabel);
+ var colorSelect = document.createElement("select");
+ colorSelect.name = "color";
+ colorSelect.id = "editColor-" + event.id;
+ colorLabel.appendChild(colorSelect);
+
+ for (var c = 0; c < colors().length; c++) {
+ var option = document.createElement("option");
+ option.value = colors()[c];
+ option.text = colors()[c];
+ option.selected = (event.color === colors()[c]);
+ colorSelect.appendChild(option);
}
- freqSelect.disabled = true;
- frequencyLabel.appendChild(freqSelect);
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- //Count
- var countLabel = document.createElement("label");
- countLabel.innerHTML = "Recurrence - Count";
- countLabel.appendChild(document.createElement("br"));
- form.appendChild(countLabel);
- var count = document.createElement("input");
- count.name = "count";
- count.type = "number";
- count.valueAsNumber = parseInt(event.recurrence.count);
- count.min = "-1";
- count.id = "editCount-" + event.id;
- count.disabled = true;
- countLabel.appendChild(count);
+ //Recurrence
+ var recurrenceLabel = document.createElement("label");
+ recurrenceLabel.innerHTML = "Recurrence";
+ recurrenceLabel.appendChild(document.createElement("br"));
+ form.appendChild(recurrenceLabel);
+
+ if (event.isParent) {
+ var enableRecurrence = document.createElement("input");
+ enableRecurrence.name = "enable-recurrence";
+ enableRecurrence.type = "checkbox";
+ enableRecurrence.checked = false;
+ enableRecurrence.id = "editEnableRecur-" + event.id;
+ enableRecurrence.onclick = function (ev) {
+ changeRecurrenceEditDisplays(this);
+ };
+ recurrenceLabel.appendChild(enableRecurrence);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Frequency
+ var frequencyLabel = document.createElement("label");
+ frequencyLabel.innerHTML = "Recurrence - Frequency";
+ frequencyLabel.appendChild(document.createElement("br"));
+ form.appendChild(frequencyLabel);
+ var freqSelect = document.createElement("select");
+ freqSelect.name = "frequency";
+ freqSelect.id = "editFrequency-" + event.id;
+ frequencyLabel.appendChild(freqSelect);
+
+ for (var f = 0; f < frequencies().length; f++) {
+ var op = document.createElement("option");
+ op.value = frequencies()[f];
+ op.text = frequencies()[f];
+ op.selected = (event.recurrence.frequency === frequencies()[f]);
+ freqSelect.appendChild(op);
+ }
+ freqSelect.disabled = true;
+ frequencyLabel.appendChild(freqSelect);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Count
+ var countLabel = document.createElement("label");
+ countLabel.innerHTML = "Recurrence - Count";
+ countLabel.appendChild(document.createElement("br"));
+ form.appendChild(countLabel);
+ var count = document.createElement("input");
+ count.name = "count";
+ count.type = "number";
+ count.valueAsNumber = parseInt(event.recurrence.count);
+ count.min = "-1";
+ count.id = "editCount-" + event.id;
+ count.disabled = true;
+ countLabel.appendChild(count);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Interval
+ var intervalLabel = document.createElement("label");
+ intervalLabel.innerHTML = "Recurrence - Interval";
+ intervalLabel.appendChild(document.createElement("br"));
+ form.appendChild(intervalLabel);
+ var interval = document.createElement("input");
+ interval.name = "interval";
+ interval.type = "number";
+ interval.valueAsNumber = parseInt(event.recurrence.interval);
+ interval.min = "1";
+ interval.id = "editInterval-" + event.id;
+ interval.disabled = true;
+ intervalLabel.appendChild(interval);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ } else {
+ //Cannot edit recurrence
+ var cannotEditRecur = document.createElement("input");
+ cannotEditRecur.name = "ignore-cer";
+ cannotEditRecur.type = "text";
+ cannotEditRecur.disabled = true;
+ cannotEditRecur.value = "Cannot edit child";
+ recurrenceLabel.appendChild(cannotEditRecur);
+ }
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- //Interval
- var intervalLabel = document.createElement("label");
- intervalLabel.innerHTML = "Recurrence - Interval";
- intervalLabel.appendChild(document.createElement("br"));
- form.appendChild(intervalLabel);
- var interval = document.createElement("input");
- interval.name = "interval";
- interval.type = "number";
- interval.valueAsNumber = parseInt(event.recurrence.interval);
- interval.min = "1";
- interval.id = "editInterval-" + event.id;
- interval.disabled = true;
- intervalLabel.appendChild(interval);
+ //Image
+ var imageLabel = document.createElement("label");
+ imageLabel.innerHTML = "Image";
+ imageLabel.appendChild(document.createElement("br"));
+ form.appendChild(imageLabel);
+ var image = document.createElement("input");
+ image.name = "image";
+ image.type = "text";
+ image.value = event.image;
+ image.id = "editImage-" + event.id;
+ imageLabel.appendChild(image);
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- } else {
- //Cannot edit recurrence
- var cannotEditRecur = document.createElement("input");
- cannotEditRecur.name = "ignore-cer";
- cannotEditRecur.type = "text";
- cannotEditRecur.disabled = true;
- cannotEditRecur.value = "Cannot edit child";
- recurrenceLabel.appendChild(cannotEditRecur);
+ //ID (readonly) for API
+ var idLabel = document.createElement("label");
+ idLabel.innerHTML = "Event ID";
+ idLabel.appendChild(document.createElement("br"));
+ form.appendChild(idLabel);
+ var hiddenId = document.createElement("input");
+ hiddenId.type = "text";
+ hiddenId.name = "id";
+ hiddenId.value = event.id;
+ hiddenId.id = "editId-" + event.id;
+ hiddenId.readOnly = true;
+ idLabel.appendChild(hiddenId);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Submit button
+ var submit = document.createElement("button");
+ submit.className = "submit";
+ submit.type = "button";
+ submit.id = "editsubmit-" + event.id;
+ submit.innerHTML = "Update Event!";
+ submit.onclick = function (ignore) {
+ updateEvent(this.id);
+ };
+ form.appendChild(submit);
+ //TODO: permission handling for submit button!!!!
+
+ //TODO: Reset button
+
+ //Create modal footer
+ var modalFooter = document.createElement("div");
+ modalFooter.className = "modal-footer";
+ modalCon.appendChild(modalFooter);
+
+ var closeButton = document.createElement("button");
+ closeButton.type = "button";
+ closeButton.setAttribute("data-dismiss", "modal");
+ closeButton.innerHTML = "Close";
+ modalFooter.appendChild(closeButton);
+ //Oh my god finally done!!!
}
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ var obj = JSON.parse(jqXHR.responseText);
- //Image
- var imageLabel = document.createElement("label");
- imageLabel.innerHTML = "Image";
- imageLabel.appendChild(document.createElement("br"));
- form.appendChild(imageLabel);
- var image = document.createElement("input");
- image.name = "image";
- image.type = "text";
- image.value = event.image;
- image.id = "editImage-" + event.id;
- imageLabel.appendChild(image);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //ID (readonly) for API
- var idLabel = document.createElement("label");
- idLabel.innerHTML = "Event ID";
- idLabel.appendChild(document.createElement("br"));
- form.appendChild(idLabel);
- var hiddenId = document.createElement("input");
- hiddenId.type = "text";
- hiddenId.name = "id";
- hiddenId.value = event.id;
- hiddenId.id = "editId-" + event.id;
- hiddenId.readOnly = true;
- idLabel.appendChild(hiddenId);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Submit button
- var submit = document.createElement("button");
- submit.className = "submit";
- submit.type = "button";
- submit.id = "editsubmit-" + event.id;
- submit.innerHTML = "Update Event!";
- submit.onclick = function (ignore) {
- updateEvent(this.id);
- };
- form.appendChild(submit);
- //TODO: permission handling for submit button!!!!
-
- //TODO: Reset button
-
- //Create modal footer
- var modalFooter = document.createElement("div");
- modalFooter.className = "modal-footer";
- modalCon.appendChild(modalFooter);
-
- var closeButton = document.createElement("button");
- closeButton.type = "button";
- closeButton.setAttribute("data-dismiss", "modal");
- closeButton.innerHTML = "Close";
- modalFooter.appendChild(closeButton);
- //Oh my god finally done!!!
+ showSnackbar("[ERROR] " + obj.reason);
}
- })
- .fail(function () {
- showSnackbar("Our hippos failed to find your events for the day!");
- }, "json");
+ });
}
function selectDate(clickedId) {
@@ -701,18 +722,28 @@ function deleteEvent(clickedId) {
var eventId = clickedId.replace("delete-", "");
var bodyRaw = {"id": eventId};
- var q = $.post("/api/v1/events/delete", JSON.stringify(bodyRaw), function (ignore) {
+ $.ajax({
+ url: "/api/v1/events/delete",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ method: "POST",
+ dataType: "json",
+ data: JSON.stringify(bodyRaw),
+ success: function (data) {
+ showSnackbar("Successfully deleted event!");
- showSnackbar("Successfully deleted event!");
+ setMonth({date: calendar.selectedDate});
+ getEventsForMonth();
- setMonth({date: calendar.selectedDate});
- getEventsForMonth();
+ getEventsForSelectedDate();
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ var obj = JSON.parse(jqXHR.responseText);
- getEventsForSelectedDate();
- })
- .fail(function () {
- showSnackbar("Our hippos failed to delete your event!");
- }, "json");
+ showSnackbar("[ERROR] " + obj.reason);
+ }
+ });
}
function init() {
diff --git a/Website/src/main/resources/web/public/scripts/embed/calendar.js b/Website/src/main/resources/web/public/scripts/embed/calendar.js
index c45b9097..bf99a91b 100644
--- a/Website/src/main/resources/web/public/scripts/embed/calendar.js
+++ b/Website/src/main/resources/web/public/scripts/embed/calendar.js
@@ -1,4 +1,5 @@
var calendar = {
+ guildId: 0,
todaysDate: new Date(),
selectedDate: new Date(),
displays: []
@@ -146,30 +147,41 @@ function getEventsForMonth() {
var bodyRaw = {
+ "guild_id": calendar.guildId,
"DaysInMonth": daysInMonth().toString(),
"StartEpoch": ds.getTime().toString()
};
- var q = $.post("/api/v1/events/list/month", JSON.stringify(bodyRaw), function (response) {
- var obj = JSON.parse(response);
+ $.ajax({
+ url: "/api/v1/events/list/month",
+ headers: {
+ "Content-Type": "application/json",
+ "Authorization": "EMBEDDED"
+ },
+ method: "POST",
+ dataType: "json",
+ data: JSON.stringify(bodyRaw),
+ success: function (json) {
+ var obj = json;
- //Display the event counts on the calendar...
- for (var i = 0; i < obj.events.length; i++) {
- var d = new Date(obj.events[i].epochStart);
+ //Display the event counts on the calendar...
+ for (var i = 0; i < obj.events.length; i++) {
+ var d = new Date(obj.events[i].epochStart);
- var e = document.getElementById(calendar.displays[d.getDate()]);
+ var e = document.getElementById(calendar.displays[d.getDate()]);
- if (e.innerHTML.indexOf("[") === -1) {
- e.innerHTML = d.getDate() + "[1]";
- } else {
- e.innerHTML = d.getDate().toString() + "[" + (parseInt(e.innerHTML.split("[")[1][0]) + 1).toString() + "]";
+ if (e.innerHTML.indexOf("[") === -1) {
+ e.innerHTML = d.getDate() + "[1]";
+ } else {
+ e.innerHTML = d.getDate().toString() + "[" + (parseInt(e.innerHTML.split("[")[1][0]) + 1).toString() + "]";
+ }
}
- }
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
- })
- .fail(function () {
- showSnackbar("Our hippos failed to find your events!");
- }, "json");
+ showSnackbar("[ERROR] " + jqXHR.responseText);
+ }
+ });
}
function getEventsForSelectedDate() {
@@ -178,317 +190,329 @@ function getEventsForSelectedDate() {
var bodyRaw = {
+ "guild_id": calendar.guildId,
"DaysInMonth": daysInMonth().toString(),
"StartEpoch": ds.getTime().toString()
};
- var q = $.post("/api/v1/events/list/date", JSON.stringify(bodyRaw), function (response) {
- var obj = JSON.parse(response);
+ $.ajax({
+ url: "/api/v1/events/list/date",
+ headers: {
+ "Content-Type": "application/json",
+ "Authorization": "EMBEDDED"
+ },
+ method: "POST",
+ dataType: "json",
+ data: JSON.stringify(bodyRaw),
+ success: function (json) {
+ var obj = json;
- //Display the selected day's event details for editing and such.
- var container = document.getElementById("event-container");
+ //Display the selected day's event details for editing and such.
+ var container = document.getElementById("event-container");
- while (container.firstChild) {
- container.removeChild(container.firstChild);
- }
-
- for (var i = 0; i < obj.count; i++) {
- var event = obj.events[i];
-
- //Create View Button
- var viewButton = document.createElement("button");
- viewButton.type = "button";
- viewButton.setAttribute("data-toggle", "modal");
- viewButton.setAttribute("data-target", "#modal-" + event.id);
- viewButton.innerHTML = "View";
- container.appendChild(viewButton);
-
- container.appendChild(document.createElement("br"));
- container.appendChild(document.createElement("br"));
-
- //Create modal container
- var modalContainer = document.createElement("div");
- modalContainer.className = "modal fade";
- modalContainer.id = "modal-" + event.id;
- modalContainer.role = "dialog";
- container.appendChild(modalContainer);
-
- //Create modal-dialog
- var modalDia = document.createElement("div");
- modalDia.className = "modal-dialog";
- modalContainer.appendChild(modalDia);
-
- //Create Modal Content
- var modalCon = document.createElement("div");
- modalCon.className = "modal-content";
- modalDia.appendChild(modalCon);
-
- //Create modal header and title
- var modalHeader = document.createElement("div");
- modalHeader.className = "modal-header";
- modalCon.appendChild(modalHeader);
- var modalTitle = document.createElement("h4");
- modalTitle.className = "modal-title";
- modalTitle.innerHTML = "Editing Event";
- modalHeader.appendChild(modalTitle);
-
- //Create Modal Body
- var modalBody = document.createElement("div");
- modalBody.className = "modal-body";
- modalCon.appendChild(modalBody);
-
- var form = document.createElement("form");
- modalBody.appendChild(form);
-
- //Summary
- var summaryLabel = document.createElement("label");
- summaryLabel.innerHTML = "Summary";
- summaryLabel.appendChild(document.createElement("br"));
- form.appendChild(summaryLabel);
- var summary = document.createElement("input");
- summary.name = "summary";
- summary.type = "text";
- summary.value = event.summary;
- summary.id = "editSummary-" + event.id;
- summaryLabel.appendChild(summary);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Description
- var descriptionLabel = document.createElement("label");
- descriptionLabel.innerHTML = "Description";
- descriptionLabel.appendChild(document.createElement("br"));
- form.appendChild(descriptionLabel);
- var description = document.createElement("input");
- description.name = "edit-description";
- description.type = "text";
- description.value = event.description;
- description.id = "editDescription-" + event.id;
- descriptionLabel.appendChild(description);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Start date and time
- var sd = new Date(event.epochStart);
- var startLabel = document.createElement("label");
- startLabel.innerHTML = "Start Date and Time";
- startLabel.appendChild(document.createElement("br"));
- form.appendChild(startLabel);
- var startDate = document.createElement("input");
- startDate.name = "start-date";
- startDate.type = "date";
- startDate.valueAsDate = sd;
- startDate.id = "editStartDate-" + event.id;
- startLabel.appendChild(startDate);
- var startTime = document.createElement("input");
- startTime.name = "start-time";
- startTime.type = "time";
- startTime.value = (sd.getHours() < 10 ? "0" : "") + sd.getHours() + ":" + (sd.getMinutes() < 10 ? "0" : "") + sd.getMinutes();
- startTime.id = "editStartTime-" + event.id;
- startLabel.appendChild(startTime);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //End date and time
- var ed = new Date(event.epochEnd);
- var endLabel = document.createElement("label");
- endLabel.innerHTML = "End Date and Time";
- endLabel.appendChild(document.createElement("br"));
- form.appendChild(endLabel);
- var endDate = document.createElement("input");
- endDate.name = "end-date";
- endDate.type = "date";
- endDate.valueAsDate = ed;
- endDate.id = "editEndDate-" + event.id;
- endLabel.appendChild(endDate);
- var endTime = document.createElement("input");
- endTime.name = "end-time";
- endTime.type = "time";
- endTime.value = (ed.getHours() < 10 ? "0" : "") + ed.getHours() + ":" + (ed.getMinutes() < 10 ? "0" : "") + ed.getMinutes();
- endTime.id = "editEndTime-" + event.id;
- endLabel.appendChild(endTime);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
-
- //Timezone (read only)
- var timezoneLabel = document.createElement("label");
- timezoneLabel.innerHTML = "Timezone";
- timezoneLabel.appendChild(document.createElement("br"));
- form.appendChild(timezoneLabel);
- var timezone = document.createElement("input");
- timezone.name = "timezone";
- timezone.type = "text";
- timezone.value = event.timezone;
- timezone.disabled = true;
- timezoneLabel.appendChild(timezone);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Location
- var locationLabel = document.createElement("label");
- locationLabel.innerHTML = "Location";
- locationLabel.appendChild(document.createElement("br"));
- form.appendChild(locationLabel);
- var location = document.createElement("input");
- location.name = "location";
- location.type = "text";
- location.value = event.location;
- location.id = "editLocation-" + event.id;
- locationLabel.appendChild(location);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Color
- var colorLabel = document.createElement("label");
- colorLabel.innerHTML = "Color";
- colorLabel.appendChild(document.createElement("br"));
- form.appendChild(colorLabel);
- var colorSelect = document.createElement("select");
- colorSelect.name = "color";
- colorSelect.id = "editColor-" + event.id;
- colorLabel.appendChild(colorSelect);
-
- for (var c = 0; c < colors().length; c++) {
- var option = document.createElement("option");
- option.value = colors()[c];
- option.text = colors()[c];
- option.selected = (event.color === colors()[c]);
- colorSelect.appendChild(option);
+ while (container.firstChild) {
+ container.removeChild(container.firstChild);
}
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
- //Recurrence
- var recurrenceLabel = document.createElement("label");
- recurrenceLabel.innerHTML = "Recurrence";
- recurrenceLabel.appendChild(document.createElement("br"));
- form.appendChild(recurrenceLabel);
+ for (var i = 0; i < obj.count; i++) {
+ var event = obj.events[i];
- if (event.isParent) {
- var enableRecurrence = document.createElement("input");
- enableRecurrence.name = "enable-recurrence";
- enableRecurrence.type = "checkbox";
- enableRecurrence.checked = false;
- enableRecurrence.id = "editEnableRecur-" + event.id;
- enableRecurrence.onclick = function (ev) {
- changeRecurrenceEditDisplays(this);
- };
- recurrenceLabel.appendChild(enableRecurrence);
+ //Create View Button
+ var viewButton = document.createElement("button");
+ viewButton.type = "button";
+ viewButton.setAttribute("data-toggle", "modal");
+ viewButton.setAttribute("data-target", "#modal-" + event.id);
+ viewButton.innerHTML = "View Event With ID: " + event.id;
+ container.appendChild(viewButton);
+
+ container.appendChild(document.createElement("br"));
+ container.appendChild(document.createElement("br"));
+
+ //Create modal container
+ var modalContainer = document.createElement("div");
+ modalContainer.className = "modal fade";
+ modalContainer.id = "modal-" + event.id;
+ modalContainer.role = "dialog";
+ container.appendChild(modalContainer);
+
+ //Create modal-dialog
+ var modalDia = document.createElement("div");
+ modalDia.className = "modal-dialog";
+ modalContainer.appendChild(modalDia);
+
+ //Create Modal Content
+ var modalCon = document.createElement("div");
+ modalCon.className = "modal-content";
+ modalDia.appendChild(modalCon);
+
+ //Create modal header and title
+ var modalHeader = document.createElement("div");
+ modalHeader.className = "modal-header";
+ modalCon.appendChild(modalHeader);
+ var modalTitle = document.createElement("h4");
+ modalTitle.className = "modal-title";
+ modalTitle.innerHTML = "Viewing Event";
+ modalHeader.appendChild(modalTitle);
+
+ //Create Modal Body
+ var modalBody = document.createElement("div");
+ modalBody.className = "modal-body";
+ modalCon.appendChild(modalBody);
+
+ var form = document.createElement("form");
+ modalBody.appendChild(form);
+
+ //Summary
+ var summaryLabel = document.createElement("label");
+ summaryLabel.innerHTML = "Summary";
+ summaryLabel.appendChild(document.createElement("br"));
+ form.appendChild(summaryLabel);
+ var summary = document.createElement("input");
+ summary.name = "summary";
+ summary.type = "text";
+ summary.value = event.summary;
+ summary.id = "editSummary-" + event.id;
+ summaryLabel.appendChild(summary);
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- //Frequency
- var frequencyLabel = document.createElement("label");
- frequencyLabel.innerHTML = "Recurrence - Frequency";
- frequencyLabel.appendChild(document.createElement("br"));
- form.appendChild(frequencyLabel);
- var freqSelect = document.createElement("select");
- freqSelect.name = "frequency";
- freqSelect.id = "editFrequency-" + event.id;
- frequencyLabel.appendChild(freqSelect);
+ //Description
+ var descriptionLabel = document.createElement("label");
+ descriptionLabel.innerHTML = "Description";
+ descriptionLabel.appendChild(document.createElement("br"));
+ form.appendChild(descriptionLabel);
+ var description = document.createElement("input");
+ description.name = "edit-description";
+ description.type = "text";
+ description.value = event.description;
+ description.id = "editDescription-" + event.id;
+ descriptionLabel.appendChild(description);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
- for (var f = 0; f < frequencies().length; f++) {
- var op = document.createElement("option");
- op.value = frequencies()[f];
- op.text = frequencies()[f];
- op.selected = (event.recurrence.frequency === frequencies()[f]);
- freqSelect.appendChild(op);
+ //Start date and time
+ var sd = new Date(event.epochStart);
+ var startLabel = document.createElement("label");
+ startLabel.innerHTML = "Start Date and Time";
+ startLabel.appendChild(document.createElement("br"));
+ form.appendChild(startLabel);
+ var startDate = document.createElement("input");
+ startDate.name = "start-date";
+ startDate.type = "date";
+ startDate.valueAsDate = sd;
+ startDate.id = "editStartDate-" + event.id;
+ startLabel.appendChild(startDate);
+ var startTime = document.createElement("input");
+ startTime.name = "start-time";
+ startTime.type = "time";
+ startTime.value = (sd.getHours() < 10 ? "0" : "") + sd.getHours() + ":" + (sd.getMinutes() < 10 ? "0" : "") + sd.getMinutes();
+ startTime.id = "editStartTime-" + event.id;
+ startLabel.appendChild(startTime);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //End date and time
+ var ed = new Date(event.epochEnd);
+ var endLabel = document.createElement("label");
+ endLabel.innerHTML = "End Date and Time";
+ endLabel.appendChild(document.createElement("br"));
+ form.appendChild(endLabel);
+ var endDate = document.createElement("input");
+ endDate.name = "end-date";
+ endDate.type = "date";
+ endDate.valueAsDate = ed;
+ endDate.id = "editEndDate-" + event.id;
+ endLabel.appendChild(endDate);
+ var endTime = document.createElement("input");
+ endTime.name = "end-time";
+ endTime.type = "time";
+ endTime.value = (ed.getHours() < 10 ? "0" : "") + ed.getHours() + ":" + (ed.getMinutes() < 10 ? "0" : "") + ed.getMinutes();
+ endTime.id = "editEndTime-" + event.id;
+ endLabel.appendChild(endTime);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+
+ //Timezone (read only)
+ var timezoneLabel = document.createElement("label");
+ timezoneLabel.innerHTML = "Timezone";
+ timezoneLabel.appendChild(document.createElement("br"));
+ form.appendChild(timezoneLabel);
+ var timezone = document.createElement("input");
+ timezone.name = "timezone";
+ timezone.type = "text";
+ timezone.value = event.timezone;
+ timezone.disabled = true;
+ timezoneLabel.appendChild(timezone);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Location
+ var locationLabel = document.createElement("label");
+ locationLabel.innerHTML = "Location";
+ locationLabel.appendChild(document.createElement("br"));
+ form.appendChild(locationLabel);
+ var location = document.createElement("input");
+ location.name = "location";
+ location.type = "text";
+ location.value = event.location;
+ location.id = "editLocation-" + event.id;
+ locationLabel.appendChild(location);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Color
+ var colorLabel = document.createElement("label");
+ colorLabel.innerHTML = "Color";
+ colorLabel.appendChild(document.createElement("br"));
+ form.appendChild(colorLabel);
+ var colorSelect = document.createElement("select");
+ colorSelect.name = "color";
+ colorSelect.id = "editColor-" + event.id;
+ colorLabel.appendChild(colorSelect);
+
+ for (var c = 0; c < colors().length; c++) {
+ var option = document.createElement("option");
+ option.value = colors()[c];
+ option.text = colors()[c];
+ option.selected = (event.color === colors()[c]);
+ colorSelect.appendChild(option);
}
- freqSelect.disabled = true;
- frequencyLabel.appendChild(freqSelect);
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- //Count
- var countLabel = document.createElement("label");
- countLabel.innerHTML = "Recurrence - Count";
- countLabel.appendChild(document.createElement("br"));
- form.appendChild(countLabel);
- var count = document.createElement("input");
- count.name = "count";
- count.type = "number";
- count.valueAsNumber = parseInt(event.recurrence.count);
- count.min = "-1";
- count.id = "editCount-" + event.id;
- count.disabled = true;
- countLabel.appendChild(count);
+ //Recurrence
+ var recurrenceLabel = document.createElement("label");
+ recurrenceLabel.innerHTML = "Recurrence";
+ recurrenceLabel.appendChild(document.createElement("br"));
+ form.appendChild(recurrenceLabel);
+
+ if (event.isParent) {
+ var enableRecurrence = document.createElement("input");
+ enableRecurrence.name = "enable-recurrence";
+ enableRecurrence.type = "checkbox";
+ enableRecurrence.checked = false;
+ enableRecurrence.id = "editEnableRecur-" + event.id;
+ enableRecurrence.onclick = function (ev) {
+ changeRecurrenceEditDisplays(this);
+ };
+ recurrenceLabel.appendChild(enableRecurrence);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Frequency
+ var frequencyLabel = document.createElement("label");
+ frequencyLabel.innerHTML = "Recurrence - Frequency";
+ frequencyLabel.appendChild(document.createElement("br"));
+ form.appendChild(frequencyLabel);
+ var freqSelect = document.createElement("select");
+ freqSelect.name = "frequency";
+ freqSelect.id = "editFrequency-" + event.id;
+ frequencyLabel.appendChild(freqSelect);
+
+ for (var f = 0; f < frequencies().length; f++) {
+ var op = document.createElement("option");
+ op.value = frequencies()[f];
+ op.text = frequencies()[f];
+ op.selected = (event.recurrence.frequency === frequencies()[f]);
+ freqSelect.appendChild(op);
+ }
+ freqSelect.disabled = true;
+ frequencyLabel.appendChild(freqSelect);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Count
+ var countLabel = document.createElement("label");
+ countLabel.innerHTML = "Recurrence - Count";
+ countLabel.appendChild(document.createElement("br"));
+ form.appendChild(countLabel);
+ var count = document.createElement("input");
+ count.name = "count";
+ count.type = "number";
+ count.valueAsNumber = parseInt(event.recurrence.count);
+ count.min = "-1";
+ count.id = "editCount-" + event.id;
+ count.disabled = true;
+ countLabel.appendChild(count);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Interval
+ var intervalLabel = document.createElement("label");
+ intervalLabel.innerHTML = "Recurrence - Interval";
+ intervalLabel.appendChild(document.createElement("br"));
+ form.appendChild(intervalLabel);
+ var interval = document.createElement("input");
+ interval.name = "interval";
+ interval.type = "number";
+ interval.valueAsNumber = parseInt(event.recurrence.interval);
+ interval.min = "1";
+ interval.id = "editInterval-" + event.id;
+ interval.disabled = true;
+ intervalLabel.appendChild(interval);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ } else {
+ //Cannot edit recurrence
+ var cannotEditRecur = document.createElement("input");
+ cannotEditRecur.name = "ignore-cer";
+ cannotEditRecur.type = "text";
+ cannotEditRecur.disabled = true;
+ cannotEditRecur.value = "Cannot edit child";
+ recurrenceLabel.appendChild(cannotEditRecur);
+ }
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- //Interval
- var intervalLabel = document.createElement("label");
- intervalLabel.innerHTML = "Recurrence - Interval";
- intervalLabel.appendChild(document.createElement("br"));
- form.appendChild(intervalLabel);
- var interval = document.createElement("input");
- interval.name = "interval";
- interval.type = "number";
- interval.valueAsNumber = parseInt(event.recurrence.interval);
- interval.min = "1";
- interval.id = "editInterval-" + event.id;
- interval.disabled = true;
- intervalLabel.appendChild(interval);
+ //Image
+ var imageLabel = document.createElement("label");
+ imageLabel.innerHTML = "Image";
+ imageLabel.appendChild(document.createElement("br"));
+ form.appendChild(imageLabel);
+ var image = document.createElement("input");
+ image.name = "image";
+ image.type = "text";
+ image.value = event.image;
+ image.id = "editImage-" + event.id;
+ imageLabel.appendChild(image);
form.appendChild(document.createElement("br"));
form.appendChild(document.createElement("br"));
- } else {
- //Cannot edit recurrence
- var cannotEditRecur = document.createElement("input");
- cannotEditRecur.name = "ignore-cer";
- cannotEditRecur.type = "text";
- cannotEditRecur.disabled = true;
- cannotEditRecur.value = "Cannot edit child";
- recurrenceLabel.appendChild(cannotEditRecur);
+ //ID (readonly) for API
+ var idLabel = document.createElement("label");
+ idLabel.innerHTML = "Event ID";
+ idLabel.appendChild(document.createElement("br"));
+ form.appendChild(idLabel);
+ var hiddenId = document.createElement("input");
+ hiddenId.type = "text";
+ hiddenId.name = "id";
+ hiddenId.value = event.id;
+ hiddenId.id = "editId-" + event.id;
+ hiddenId.readOnly = true;
+ idLabel.appendChild(hiddenId);
+ form.appendChild(document.createElement("br"));
+ form.appendChild(document.createElement("br"));
+
+ //Create modal footer
+ var modalFooter = document.createElement("div");
+ modalFooter.className = "modal-footer";
+ modalCon.appendChild(modalFooter);
+
+ var closeButton = document.createElement("button");
+ closeButton.type = "button";
+ closeButton.setAttribute("data-dismiss", "modal");
+ closeButton.innerHTML = "Close";
+ modalFooter.appendChild(closeButton);
+ //Oh my god finally done!!!
}
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
- //Image
- var imageLabel = document.createElement("label");
- imageLabel.innerHTML = "Image";
- imageLabel.appendChild(document.createElement("br"));
- form.appendChild(imageLabel);
- var image = document.createElement("input");
- image.name = "image";
- image.type = "text";
- image.value = event.image;
- image.id = "editImage-" + event.id;
- imageLabel.appendChild(image);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //ID (readonly) for API
- var idLabel = document.createElement("label");
- idLabel.innerHTML = "Event ID";
- idLabel.appendChild(document.createElement("br"));
- form.appendChild(idLabel);
- var hiddenId = document.createElement("input");
- hiddenId.type = "text";
- hiddenId.name = "id";
- hiddenId.value = event.id;
- hiddenId.id = "editId-" + event.id;
- hiddenId.readOnly = true;
- idLabel.appendChild(hiddenId);
- form.appendChild(document.createElement("br"));
- form.appendChild(document.createElement("br"));
-
- //Create modal footer
- var modalFooter = document.createElement("div");
- modalFooter.className = "modal-footer";
- modalCon.appendChild(modalFooter);
-
- var closeButton = document.createElement("button");
- closeButton.type = "button";
- closeButton.setAttribute("data-dismiss", "modal");
- closeButton.innerHTML = "Close";
- modalFooter.appendChild(closeButton);
- //Oh my god finally done!!!
+ showSnackbar("[ERROR] " + jqXHR.responseText);
}
- })
- .fail(function () {
- showSnackbar("Our hippos failed to find your events for the day!");
- }, "json");
+ });
}
function selectDate(clickedId) {
@@ -507,7 +531,9 @@ function selectDate(clickedId) {
}
}
-function init() {
+function init(guildId) {
+ calendar.guildId = parseInt(guildId);
+
setMonth({date: calendar.todaysDate});
getEventsForMonth();