Add embed page for calendars. No more linking out to google!!!!

This commit is contained in:
NovaFox161
2018-05-28 17:15:28 -05:00
parent 2a2cd83b1c
commit 26716916c1
9 changed files with 742 additions and 663 deletions

View File

@@ -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);

View File

@@ -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());
}

View File

@@ -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()) {

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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());

View File

@@ -31,7 +31,7 @@
integrity="sha256-lnJeulOa3e5IO2EzHr8jKJ3CbT80MBwkS5a+n2ooIr4=" crossorigin="anonymous"></script>
</head>
<body>
<body th:onload="'init(' + ${embed.id} + ')'">
<div class="top-nav">
<a href="/" class="title"><h1>DISCAL</h1></a>
<a href="/about">About</a>
@@ -137,8 +137,14 @@
</tr>
</tbody>
</table>
<p style="text-align: center; font-size: 20px" id="local-time-display">All Dates and
Times are displayed in your local timezone!</p>
<p style="text-align: center; font-size: 20px" id="local-time-display">All Dates and Times are
displayed in your local timezone!</p>
<br>
<br>
<a target="_blank"
th:href="'https://calendar.google.com/calendar/embed?src=' + ${embed.calendar.id}">
<button>View on Google Calendar</button>
</a>
</div>
<hr>
<br>
@@ -147,6 +153,8 @@
<div id="event-container">
</div>
<div id="snackbar"></div>
</div>
</body>

View File

@@ -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() {

View File

@@ -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();