summaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
authorRaphael Kabo <raphaelkabo@hey.com>2023-10-08 12:11:36 +0100
committerRaphael Kabo <raphaelkabo@hey.com>2023-10-08 12:11:36 +0100
commit6b220e094f215c488eb5102e25506f5b3d371245 (patch)
treebe0abbbf7a0c881d61e6375626f197c4ae124001 /views
parentb8e424a8602b586bbf346cd27171ede570a54973 (diff)
Refactor: event group form and API, extract JS
Diffstat (limited to 'views')
-rw-r--r--views/emails/createEventGroup/createEventGroupHtml.handlebars2
-rw-r--r--views/emails/createEventGroup/createEventGroupText.handlebars2
-rwxr-xr-xviews/event.handlebars5
-rwxr-xr-xviews/eventgroup.handlebars35
-rwxr-xr-xviews/newevent.handlebars183
-rw-r--r--views/partials/editeventgroupmodal.handlebars32
-rw-r--r--views/partials/editeventmodal.handlebars102
-rwxr-xr-xviews/partials/eventForm.handlebars86
-rw-r--r--views/partials/eventGroupForm.handlebars47
-rwxr-xr-xviews/partials/neweventgroupform.handlebars66
-rwxr-xr-xviews/partials/sidebar.handlebars2
11 files changed, 134 insertions, 428 deletions
diff --git a/views/emails/createEventGroup/createEventGroupHtml.handlebars b/views/emails/createEventGroup/createEventGroupHtml.handlebars
index 9951a28..0a12e91 100644
--- a/views/emails/createEventGroup/createEventGroupHtml.handlebars
+++ b/views/emails/createEventGroup/createEventGroupHtml.handlebars
@@ -1,6 +1,6 @@
<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;">You just created a new event group on {{siteName}}! Thanks a bunch - we're delighted to have you.</p>
<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;">You can edit your event group by clicking the button below, or just following this link: <a href="https://{{domain}}/group/{{eventGroupID}}?e={{editToken}}">https://{{domain}}/{{eventGroupID}}?e={{editToken}}</a></p>
-<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;">To add events to this group (whether brand new events or ones you've already made), click the 'This event is part of an event group' checkbox. You will need to copy the following two codes into the dark grey box which opens:</p>
+<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;">To add events to this group (whether brand new events or ones you've already made), click the 'This event is part of an event group' checkbox. You will need to copy the following two codes into the box which opens:</p>
<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;"><strong>Event group ID</strong>: {{eventGroupID}}</p>
<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;"><strong>Event group secret editing code</strong>: {{editToken}}</p>
<table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
diff --git a/views/emails/createEventGroup/createEventGroupText.handlebars b/views/emails/createEventGroup/createEventGroupText.handlebars
index b017510..34ad618 100644
--- a/views/emails/createEventGroup/createEventGroupText.handlebars
+++ b/views/emails/createEventGroup/createEventGroupText.handlebars
@@ -2,7 +2,7 @@ You just created a new event group on {{siteName}}! Thanks a bunch - we're delig
You can edit your event group by clicking the button below, or just following this link: https://{{domain}}/{{eventGroupID}}?e={{editToken}}
-To add events to this group (whether brand new events or ones you've already made), click the 'This event is part of an event group' checkbox. You will need to copy the following two codes into the dark grey box which opens:
+To add events to this group (whether brand new events or ones you've already made), click the 'This event is part of an event group' checkbox. You will need to copy the following two codes into the box which opens:
Event group ID: {{eventGroupID}}
diff --git a/views/event.handlebars b/views/event.handlebars
index b759b0a..ae6674a 100755
--- a/views/event.handlebars
+++ b/views/event.handlebars
@@ -397,6 +397,11 @@
{{/if}}
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+
+<script>
+window.eventData = {{{ json jsonData }}};
+</script>
+
<script>
{{#if editingEnabled}}
diff --git a/views/eventgroup.handlebars b/views/eventgroup.handlebars
index c922b99..0643ed6 100755
--- a/views/eventgroup.handlebars
+++ b/views/eventgroup.handlebars
@@ -5,7 +5,7 @@
{{/if}}
<div class="row">
<div class="col-lg">
- <h3 id="eventName" data-event-id="{{eventGroupData.id}}">{{eventGroupData.name}}</h3>
+ <h3 id="eventGroupName" data-event-id="{{eventGroupData.id}}">{{eventGroupData.name}}</h3>
</div>
<div class="col-lg-2 ml-2 edit-buttons">
{{#if editingEnabled}}
@@ -16,7 +16,7 @@
</div>
</div>
{{#if firstLoad}}
-<div class="alert alert-success alert-dismissible fade show" role="alert">
+<div class="alert alert-success alert-dismissible fade show mt-4" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -30,7 +30,7 @@
<div class="card-body">
<ul class="fa-ul eventInformation">
{{#if eventGroupHasHost}}
- <li>
+ <li id="hostName">
<span class="fa-li">
<i class="fas fa-fw fa-user-circle"></i>
</span>
@@ -38,7 +38,7 @@
</li>
{{/if}}
{{#if eventGroupData.url}}
- <li>
+ <li id="eventGroupURL">
<span class="fa-li">
<i class="fas fa-link"></i>
</span>
@@ -91,17 +91,17 @@
</div>
{{#if editingEnabled}}
- <div class="alert alert-success">
+ <div class="alert alert-info">
<p>To add an event to this group, copy and paste the two codes below into the 'Event Group' box when creating a new event or editing an existing event.</p>
<div class="table-responsive">
<table style="width:100%">
<tr style="border-bottom:1px solid rgba(0,0,0,0.2)">
<td><strong>Event group ID</strong></td>
- <td><span class="code">{{eventGroupData.id}}</span></td>
+ <td><span class="code" id="eventGroupID">{{eventGroupData.id}}</span></td>
</tr>
<tr>
<td><strong>Event group editing password</strong></td>
- <td><span class="code">{{eventGroupData.editToken}}</span></td>
+ <td><span class="code" id="eventGroupEditToken">{{eventGroupData.editToken}}</span></td>
</tr>
</table>
</div>
@@ -222,15 +222,11 @@
</div>
</div>
-
<script>
- $.validate({
- lang: 'en',
- errorElementClass: "is-invalid",
- errorMessageClass: "text-danger",
- successElementClass: "is-valid"
- });
+window.groupData = {{{ json jsonData }}};
+</script>
+<script>
$(document).ready(function() {
// Save the editing token from the URL, if it is valid
const eventID = $('#eventName').attr('data-event-id');
@@ -273,17 +269,6 @@
$('#editModal').modal('show');
}
- $.uploadPreview({
- input_field: "#eventGroupImageUpload",
- preview_box: "#eventGroupImagePreview",
- label_field: "#eventGroupImageLabel",
- label_default: "Choose file",
- label_selected: "Change file",
- no_label: false
- });
- $("#eventGroupImagePreview").css("background-image", "url('/events/{{eventGroupData.image}}')");
- $("#eventGroupImagePreview").css("background-size", "cover");
- $("#eventGroupImagePreview").css("background-position", "center center");
new ClipboardJS('#copyEventLink');
new ClipboardJS('#copyFeedLink');
autosize($('textarea'));
diff --git a/views/newevent.handlebars b/views/newevent.handlebars
index 76b6a17..349c355 100755
--- a/views/newevent.handlebars
+++ b/views/newevent.handlebars
@@ -1,28 +1,21 @@
-<h2>New event</h2>
-<hr>
-<div class="alert alert-info mb-4 text-center" role="alert">
- <i class="fas fa-exclamation-circle"></i> Events are visible to anyone who knows the link.
-</div>
-
-
-{{#each errors}}
- <div class="alert alert-danger" role="alert">{{this.msg}}</div>
-{{/each}}
-
<div class="container mb-4">
<div class="row">
<div class="col-sm-4 p-2">
- <button type="button" id="showNewEventFormButton" class="btn btn-secondary w-100"><i class="fas fa-file"></i> Create a new event</button>
+ <button type="button" id="showNewEventFormButton" class="btn btn-secondary w-100"><i class="fas fa-calendar-day"></i> Create a new event</button>
</div>
<div class="col-sm-4 p-2">
<button type="button" id="showImportEventFormButton" class="btn btn-secondary w-100"><i class="fas fa-file-import"></i> Import an existing event</button>
</div>
<div class="col-sm-4 p-2">
- <button type="button" id="showNewEventGroupFormButton" class="btn btn-secondary w-100"><i class="fas fa-folder-open"></i> Create a new event group </button>
+ <button type="button" id="showNewEventGroupFormButton" class="btn btn-secondary w-100"><i class="fas fa-calendar-alt"></i> Create a new event group </button>
</div>
</div>
</div>
+<div class="alert alert-info mb-4 text-center" role="alert">
+ <i class="fas fa-exclamation-circle"></i> Events are visible to anyone who knows the link.
+</div>
+
<div id="newEventFormContainer">
<h4 class="mb-2">Create an event</h4>
<form id="newEventForm" enctype="multipart/form-data" x-data="newEventForm()" x-init="init()" @submit.prevent="submitForm">
@@ -45,156 +38,18 @@
</div>
<div id="newEventGroupFormContainer">
- {{>neweventgroupform}}
+ <h4 class="mb-2">Create an event group</h4>
+ <p class="text-muted">An event group is a holding area for a set of linked events, like a recurring game night, a festival, or a band tour. You can share a public link to your event group just like an individual event link, and people who know the secret editing code will be able to add future events to the group.</p>
+ <p class="text-muted">Event groups do not get automatically removed like events do, but events which have been removed from {{siteName}} will of course not show up in an event group.</p>
+ <form id="newEventGroupForm" enctype="multipart/form-data" x-data="newEventGroupForm()" @submit.prevent="submitForm">
+ {{> eventGroupForm }}
+ <div class="form-group row">
+ <div class="col-sm-12 pt-3 pb-3 text-center">
+ <button type="submit" class="btn btn-primary w-50" x-bind:disabled="submitting">Create</button>
+ </div>
+ </div>
+ </form>
</div>
- <script>
- $(document).ready(function(){
- if ($('#icsImportControl')[0].files[0] != null){
- var file = $('#icsImportControl')[0].files[0].name;
- $('#icsImportControl').next('label').html('<i class="far fa-file-alt"></i> ' + file);
- }
- $("#showNewEventFormButton").click(function(){
- $("button").removeClass("active");
- $("#showImportEventFormButton #showNewEventGroupFormButton").removeClass("active");
- if ($("#newEventFormContainer").is(":visible")){
- $("#newEventFormContainer").slideUp("fast");
- }
- else {
- $("#newEventFormContainer").slideDown("fast");
- $("#importEventFormContainer").slideUp("fast");
- $("#newEventGroupFormContainer").slideUp("fast");
- $(this).addClass("active");
- }
- })
- $("#showImportEventFormButton").click(function(){
- $("button").removeClass("active");
- $("#showNewEventFormButton #showNewEventGroupFormButton").removeClass("active");
- if ($("#importEventFormContainer").is(":visible")){
- $("#importEventFormContainer").slideUp("fast");
- }
- else {
- $("#importEventFormContainer").slideDown("fast");
- $("#newEventFormContainer").slideUp("fast");
- $("#newEventGroupFormContainer").slideUp("fast");
- $(this).addClass("active");
- }
- })
- $("#showNewEventGroupFormButton").click(function(){
- $("button").removeClass("active");
- $("#showNewEventFormButton #showImportEventFormButton").removeClass("active");
- if ($("#newEventGroupFormContainer").is(":visible")){
- $("#newEventGroupFormContainer").slideUp("fast");
- }
- else {
- $("#newEventGroupFormContainer").slideDown("fast");
- $("#newEventFormContainer").slideUp("fast");
- $("#importEventFormContainer").slideUp("fast");
- $(this).addClass("active");
- }
- })
- $('#icsImportControl').change(function(){
- var file = $('#icsImportControl')[0].files[0].name;
- $(this).next('label').html('<i class="far fa-file-alt"></i> ' + file);
- });
- })
- </script>
-
-<script type="text/javascript" src="/js/generate-timezones.js"></script>
-
-<script>
- $(document).ready(function() {
- $.uploadPreview({
- input_field: "#image-upload",
- preview_box: "#image-preview",
- label_field: "#image-label",
- label_default: "Choose file",
- label_selected: "Change file",
- no_label: false
- });
- autosize($('textarea'));
- });
-
- function newEventForm() {
- return {
- data: {
- eventName: '',
- eventLocation: '',
- eventStart: '',
- eventEnd: '',
- timezone: '',
- eventDescription: '',
- eventURL: '',
- hostName: '',
- creatorEmail: '',
- eventGroupID: '',
- eventGroupEditToken: '',
- interactionCheckbox: false,
- joinCheckbox: false,
- maxAttendeesCheckbox: false,
- maxAttendees: '',
- },
- errors: [],
- submitting: false,
- init() {
- // Set up Select2
- this.select2 = $(this.$refs.timezone).select2();
- this.select2.on("select2:select", (event) => {
- this.data.timezone = event.target.value;
- });
- this.data.timezone = this.select2.val();
- // Reset checkboxes
- this.data.eventGroupCheckbox = false;
- this.data.interactionCheckbox = false;
- this.data.joinCheckbox = false;
- this.data.maxAttendeesCheckbox = false;
- },
- async submitForm() {
- this.submitting = true;
- this.errors = [];
- const formData = new FormData();
- for (const key in this.data) {
- if (this.data.hasOwnProperty(key)) {
- formData.append(key, this.data[key]);
- }
- }
- formData.append("imageUpload", this.$refs.eventImageUpload.files[0]);
- try {
- const response = await fetch("/event", {
- method: "POST",
- body: formData,
- });
- this.submitting = false;
- if (!response.ok) {
- if (response.status !== 400) {
- this.errors = [
- {
- message: "An unexpected error has occurred. Please try again later.",
- }
- ];
- return;
- }
- const json = await response.json();
- this.errors = json.errors;
- // Set Bootstrap validation classes using 'field' property
- $("input, textarea").removeClass("is-invalid");
- this.errors.forEach((error) => {
- $(`#${error.field}`).addClass("is-invalid");
- });
- return;
- }
- const json = await response.json();
- window.location.assign(json.url);
- } catch (error) {
- console.log(error);
- this.errors = [
- {
- message: "An unexpected error has occurred. Please try again later.",
- }
- ];
- this.submitting = false;
- }
- },
- }
- }
-</script> \ No newline at end of file
+<script src="/js/generate-timezones.js"></script>
+<script src="/js/modules/new.js"></script> \ No newline at end of file
diff --git a/views/partials/editeventgroupmodal.handlebars b/views/partials/editeventgroupmodal.handlebars
index 3b8f55a..2506e26 100644
--- a/views/partials/editeventgroupmodal.handlebars
+++ b/views/partials/editeventgroupmodal.handlebars
@@ -8,32 +8,10 @@
</button>
</div>
<div class="modal-body">
- <form id="editEventForm" action="/editeventgroup/{{eventGroupData.id}}/{{eventGroupData.editToken}}" method="post" enctype="multipart/form-data" autocomplete="off">
- <div class="form-group">
- <label for="eventGroupName" >Name</label>
- <input type="text" class="form-control" id="eventGroupName" name="eventGroupName" placeholder="Make it snappy." value="{{eventGroupData.name}}" data-validation="required length" data-validation-length="3-120">
- </div>
- <div class="form-group">
- <label for="eventGroupDescription" >Description</label>
- <textarea class="form-control" id="eventGroupDescription" name="eventGroupDescription" data-validation="required">{{eventGroupData.description}}</textarea>
- <small class="form-text"><a href="https://commonmark.org/help/">Markdown</a> formatting supported.</small>
- </div>
- <div class="form-group">
- <label for="eventGroupURL" >Link</label>
- <input type="url" class="form-control" id="eventURL" name="eventGroupURL" value="{{eventGroupData.url}}" placeholder="For tickets or a page with more information (optional)." data-validation="url" data-validation-optional="true">
- </div>
- <div class="form-group">
- <label for="hostName" >Host or organisation name</label>
- <input type="text" class="form-control" id="hostName" name="hostName" placeholder="Will be shown on the event group page (optional)." value="{{eventGroupData.hostName}}" data-validation="length" data-validation-length="3-120" data-validation-optional="true">
- </div>
- <div class="form-group">
- <label>Cover image</label>
- <div class="image-preview" id="eventGroupImagePreview">
- <label for="eventGroupImageUpload" id="eventGroupImageLabel">Choose file</label>
- <input type="file" name="eventGroupImageUpload" id="eventGroupImageUpload" />
- </div>
- <small class="form-text">Recommended dimensions (w x h): 920px by 300px.</small>
- </div>
+ <form id="editEventForm" enctype="multipart/form-data" x-data="editEventGroupForm()" @submit.prevent="submitForm">
+
+ {{> eventGroupForm }}
+
<div class="form-group">
<div class="card border-danger mb-3">
<div class="card-header text-danger">Delete this event group</div>
@@ -51,3 +29,5 @@
</div>
</div>
</div>
+
+<script type="text/javascript" src="/js/modules/group-edit.js"></script> \ No newline at end of file
diff --git a/views/partials/editeventmodal.handlebars b/views/partials/editeventmodal.handlebars
index 2572cbb..a36cd98 100644
--- a/views/partials/editeventmodal.handlebars
+++ b/views/partials/editeventmodal.handlebars
@@ -46,104 +46,4 @@
</script>
<script type="text/javascript" src="/js/generate-timezones.js"></script>
-
-<script>
- $(document).ready(function () {
- $.uploadPreview({
- input_field: "#image-upload",
- preview_box: "#image-preview",
- label_field: "#image-label",
- label_default: "Choose file",
- label_selected: "Change file",
- no_label: false
- });
- autosize($('textarea'));
- $("#image-preview").css("background-image", "url('/events/{{eventData.image}}')");
- $("#image-preview").css("background-size", "cover");
- $("#image-preview").css("background-position", "center center");
- $("#timezone").val('{{eventData.timezone}}').trigger('change');
- });
-
- function editEventForm() {
- return {
- data: {
- eventName: `{{{eventData.name}}}`,
- eventLocation: `{{{ eventData.location }}}`,
- eventStart: `{{{ parsedStartForDateInput }}}`,
- eventEnd: `{{{ parsedEndForDateInput }}}`,
- timezone: `{{{ eventData.timezone }}}`,
- eventDescription: `{{{ eventData.description }}}`,
- eventURL: `{{{ eventData.url }}}`,
- hostName: `{{{ eventData.hostName }}}`,
- creatorEmail: `{{{ eventData.creatorEmail }}}`,
- eventGroupID: `{{{ eventData.eventGroupID }}}`,
- eventGroupEditToken: `{{{ eventData.eventGroupEditToken }}}`,
- interactionCheckbox: {{{ eventData.usersCanComment }}},
- joinCheckbox: {{{ eventData.usersCanAttend }}},
- maxAttendeesCheckbox: {{#if eventData.maxAttendees}}true{{else}}false{{/if}},
- maxAttendees: `{{{ eventData.maxAttendees }}}`,
- },
- errors: [],
- submitting: false,
- init() {
- // Set up Select2
- this.select2 = $(this.$refs.timezone).select2();
- this.select2.on("select2:select", (event) => {
- this.data.timezone = event.target.value;
- });
- this.data.timezone = this.select2.val();
- /* Set up checkboxes */
- this.data.eventGroupCheckbox = {{#if eventData.eventGroupID}}true{{else}}false{{/if}};
- this.data.interactionCheckbox = {{eventData.usersCanComment}};
- this.data.joinCheckbox = {{eventData.usersCanAttend}};
- this.data.maxAttendeesCheckbox = {{#if eventData.maxAttendees}}true{{else}}false{{/if}};
- },
- async submitForm() {
- this.submitting = true;
- this.errors = [];
- const formData = new FormData();
- for (const key in this.data) {
- if (this.data.hasOwnProperty(key)) {
- formData.append(key, this.data[key]);
- }
- }
- formData.append("imageUpload", this.$refs.eventImageUpload.files[0]);
- formData.append("editToken", '{{eventData.editToken}}');
- try {
- const response = await fetch("/event/{{eventData.id}}", {
- method: "PUT",
- body: formData,
- });
- this.submitting = false;
- if (!response.ok) {
- if (response.status !== 400) {
- this.errors = [
- {
- message: "An unexpected error has occurred. Please try again later.",
- }
- ];
- return;
- }
- const json = await response.json();
- this.errors = json.errors;
- // Set Bootstrap validation classes using 'field' property
- $("input, textarea").removeClass("is-invalid");
- this.errors.forEach((error) => {
- $(`#${error.field}`).addClass("is-invalid");
- });
- return;
- }
- window.location.reload();
- } catch (error) {
- console.log(error);
- this.errors = [
- {
- message: "An unexpected error has occurred. Please try again later.",
- }
- ];
- this.submitting = false;
- }
- },
- }
- }
-</script> \ No newline at end of file
+<script type="text/javascript" src="/js/modules/event-edit.js"></script>
diff --git a/views/partials/eventForm.handlebars b/views/partials/eventForm.handlebars
index 36da7b8..93d679d 100755
--- a/views/partials/eventForm.handlebars
+++ b/views/partials/eventForm.handlebars
@@ -1,52 +1,52 @@
-<div class="form-group row">
- <label for="eventName" class="col-sm-2 col-form-label">Event name</label>
- <div class="form-group col-sm-10">
+<div class="form-group">
+ <label for="eventName" >Event name</label>
+ <div class="form-group ">
<input type="text" class="form-control" id="eventName" name="eventName" placeholder="Make it snappy." x-model="data.eventName" >
</div>
</div>
-<div class="form-group row">
- <label for="eventLocation" class="col-sm-2 col-form-label">Location</label>
- <div class="form-group col-sm-10">
+<div class="form-group">
+ <label for="eventLocation" >Location</label>
+ <div class="form-group ">
<input type="text" class="form-control" id="eventLocation" name="eventLocation" placeholder="Be specific." x-model="data.eventLocation">
</div>
</div>
-<div class="form-group row">
- <label for="eventStart" class="col-sm-2 col-form-label">Starts</label>
- <div class="form-group col-sm-4">
+<div class="form-group">
+ <label for="eventStart" >Starts</label>
+ <div class="form-group">
<input type="datetime-local" class="form-control" id="eventStart" name="eventStart" x-model="data.eventStart">
</div>
</div>
-<div class="form-group row">
- <label for="eventEnd" class="col-sm-2 col-form-label">Ends</label>
- <div class="form-group col-sm-4">
+<div class="form-group">
+ <label for="eventEnd" >Ends</label>
+ <div class="form-group ">
<input type="datetime-local" class="form-control" id="eventEnd" name="eventEnd" x-model="data.eventEnd">
</div>
</div>
-<div class="form-group row">
- <label for="timezone" class="col-sm-2 col-form-label">Timezone</label>
- <div class="form-group col-sm-10">
+<div class="form-group">
+ <label for="timezone" >Timezone</label>
+ <div class="form-group ">
<select class="select2" id="timezone" name="timezone" x-ref="timezone"></select>
</div>
</div>
-<div class="form-group row">
- <label for="eventDescription" class="col-sm-2 col-form-label">Description</label>
- <div class="form-group col-sm-10">
+<div class="form-group">
+ <label for="eventDescription" >Description</label>
+ <div class="form-group ">
<textarea class="form-control expand" id="eventDescription" name="eventDescription" placeholder="You can always edit it later." x-model="data.eventDescription" ></textarea>
<small class="form-text"><a href="https://commonmark.org/help/">Markdown</a> formatting supported.</small>
</div>
</div>
-<div class="form-group row">
- <label for="eventURL" class="col-sm-2 col-form-label">Link</label>
- <div class="form-group col-sm-10">
+<div class="form-group">
+ <label for="eventURL" >Link</label>
+ <div class="form-group ">
<input type="url" class="form-control" id="eventURL" name="eventURL" placeholder="For tickets or another event page (optional)." x-model="data.eventURL" >
</div>
</div>
-<div class="form-group row">
- <label for="eventImage" class="col-sm-2 col-form-label">Cover image</label>
- <div class="form-group col-sm-10">
- <div class="image-preview" id="image-preview">
- <label for="image-upload" id="image-label">Choose file</label>
- <input type="file" name="imageUpload" id="image-upload" accept="image/jpeg,image/gif,image/png" x-ref="eventImageUpload" />
+<div class="form-group">
+ <label for="eventImage" >Cover image</label>
+ <div class="form-group ">
+ <div class="image-preview" id="event-image-preview">
+ <label for="image-upload" id="event-image-label">Choose file</label>
+ <input type="file" name="imageUpload" id="event-image-upload" accept="image/jpeg,image/gif,image/png" x-ref="eventImageUpload" />
</div>
<small class="form-text">Recommended dimensions (w x h): 920px by 300px.</small>
{{#if eventData.image}}
@@ -54,22 +54,22 @@
{{/if}}
</div>
</div>
-<div class="form-group row">
- <label for="hostName" class="col-sm-2 col-form-label">Host name</label>
- <div class="form-group col-sm-10">
+<div class="form-group">
+ <label for="hostName" >Host name</label>
+ <div class="form-group ">
<input type="text" class="form-control" id="hostName" name="hostName" placeholder="Will be shown on the event page (optional)." x-model="data.hostName" >
</div>
</div>
-<div class="form-group row">
- <label for="creatorEmail" class="col-sm-2 col-form-label">Your email</label>
- <div class="form-group col-sm-10">
- <input type="email" class="form-control" id="creatorEmail" name="creatorEmail" placeholder="Will not be shown anywhere (optional)" x-model="data.creatorEmail" >
+<div class="form-group">
+ <label for="creatorEmail" >Your email</label>
+ <div class="form-group ">
+ <input type="email" class="form-control" id="creatorEmail" name="creatorEmail" placeholder="Will not be shown anywhere (optional)." x-model="data.creatorEmail" >
<small class="form-text">If you provide your email, we will send your secret editing password here, and use it to notify you of updates to the event.</small>
</div>
</div>
-<div class="form-group row">
- <div class="col-sm-2">Options</div>
- <div class="col-sm-10">
+<div class="form-group">
+ <label>Options</label>
+ <div >
<div class="form-check">
<input class="form-check-input" type="checkbox" id="eventGroupCheckbox" name="eventGroupCheckbox" x-model="data.eventGroupCheckbox">
<label class="form-check-label" for="eventGroupCheckbox">
@@ -81,14 +81,14 @@
<strong>Link this event to an event group</strong>
</div>
<div class="card-body">
- <div class="form-group row">
+ <div class="form-group">
<label for="eventGroupID" class="col-12">Event group ID</label>
<div class="form-group col-12">
<input type="text" class="form-control" id="eventGroupID" name="eventGroupID" placeholder="" x-model="data.eventGroupID" >
<small class="form-text">You can find this short string of characters in the event group's link, in your confirmation email, or on the event group's page.</small>
</div>
</div>
- <div class="form-group row">
+ <div class="form-group">
<label for="eventGroupEditToken" class="col-12">Event group secret editing code</label>
<div class="form-group col-12">
<input type="text" class="form-control" id="eventGroupEditToken" name="eventGroupEditToken" placeholder="" x-model="data.eventGroupEditToken" >
@@ -117,13 +117,13 @@
</div>
</div>
</div>
-<div class="form-group row" id="maxAttendeesContainer" x-show="data.maxAttendeesCheckbox && data.joinCheckbox">
- <label for="maxAttendees" class="col-sm-2 col-form-label">Attendee limit</label>
- <div class="form-group col-sm-10">
+<div class="form-group" id="maxAttendeesContainer" x-show="data.maxAttendeesCheckbox && data.joinCheckbox">
+ <label for="maxAttendees" >Attendee limit</label>
+ <div class="form-group ">
<input type="number" class="form-control" id="maxAttendees" name="maxAttendees" placeholder="Enter a number." x-model="data.maxAttendees" >
</div>
</div>
-<div class="form-group row">
+<div class="form-group">
<div class="col-12">
<div
class="alert alert-danger"
diff --git a/views/partials/eventGroupForm.handlebars b/views/partials/eventGroupForm.handlebars
new file mode 100644
index 0000000..0b18bba
--- /dev/null
+++ b/views/partials/eventGroupForm.handlebars
@@ -0,0 +1,47 @@
+<div class="form-group">
+ <label for="eventGroupName">Name</label>
+ <input type="text" class="form-control" id="eventGroupName" name="eventGroupName" placeholder="Make it snappy." x-model="data.eventGroupName">
+</div>
+<div class="form-group">
+ <label for="eventGroupDescription">Description</label>
+ <textarea class="form-control" id="eventGroupDescription" name="eventGroupDescription" x-model="data.eventGroupDescription">{{eventGroupData.description}}</textarea>
+ <small class="form-text"><a href="https://commonmark.org/help/">Markdown</a> formatting supported.</small>
+</div>
+<div class="form-group">
+ <label for="eventGroupURL">Link</label>
+ <input type="url" class="form-control" id="eventGroupURL" name="eventGroupURL" placeholder="For tickets or a page with more information (optional)." x-model="data.eventGroupURL">
+</div>
+<div class="form-group">
+ <label for="hostName">Host or organisation name</label>
+ <input type="text" class="form-control" id="eventGroupHostName" name="hostName" placeholder="Will be shown on the event group page (optional)." x-model="data.hostName">
+</div>
+<div class="form-group">
+ <label for="creatorEmail">Your email</label>
+ <div class="form-group">
+ <input type="email" class="form-control" id="eventGroupCreatorEmail" name="creatorEmail" placeholder="Will not be shown anywhere (optional)." x-model="data.creatorEmail">
+ <small class="form-text">If you provide your email, we will send your secret editing password here, and use it to notify you of updates to the event.</small>
+ </div>
+</div>
+<div class="form-group">
+ <label>Cover image</label>
+ <div class="image-preview" id="group-image-preview">
+ <label for="eventGroupImageUpload" id="group-image-label">Choose file</label>
+ <input type="file" name="imageUpload" id="group-image-upload" accept="image/jpeg,image/gif,image/png" x-ref="eventGroupImageUpload"/>
+ </div>
+ <small class="form-text">Recommended dimensions (w x h): 920px by 300px.</small>
+</div>
+<div class="form-group">
+ <div class="col-12">
+ <div
+ class="alert alert-danger"
+ role="alert"
+ x-show="errors.length > 0"
+ >
+ <p><i class="fas fa-exclamation-triangle"></i> Please fix these errors:</p>
+ <ul>
+ <template x-for="error in errors">
+ <li x-text="error.message"></li>
+ </template>
+ </ul>
+ </div>
+ </div> \ No newline at end of file
diff --git a/views/partials/neweventgroupform.handlebars b/views/partials/neweventgroupform.handlebars
deleted file mode 100755
index 616b8ca..0000000
--- a/views/partials/neweventgroupform.handlebars
+++ /dev/null
@@ -1,66 +0,0 @@
-<h4 class="mb-2">Create an event group</h4>
-<p>An event group is a holding area for a set of linked events, like a series of film nights, a festival, or a band tour. You can share a public link to your event group just like an individual event link, and people who know the secret editing code (sent in an email when you create the event group) will be able to add future events to the group.</p>
-<p>Event groups do not get automatically removed like events do, but events which have been removed from {{siteName}} will of course not show up in an event group.</p>
-<form id="newEventForm" action="/neweventgroup" method="post" enctype="multipart/form-data">
- <div class="form-group row">
- <label for="eventGroupName" class="col-sm-2 col-form-label">Event group name</label>
- <div class="form-group col-sm-10">
- <input type="text" class="form-control" id="eventGroupName" name="eventGroupName" placeholder="Make it snappy." value="{{data.eventName}}" data-validation="required length" data-validation-length="3-120">
- </div>
- </div>
- <div class="form-group row">
- <label for="eventGroupDescription" class="col-sm-2 col-form-label">Description</label>
- <div class="form-group col-sm-10">
- <textarea class="form-control expand" id="eventGroupDescription" name="eventGroupDescription" data-validation="required" placeholder="You can always edit it later."></textarea>
- <small class="form-text"><a href="https://commonmark.org/help/">Markdown</a> formatting supported.</small>
- </div>
- </div>
- <div class="form-group row">
- <label for="eventGroupURL" class="col-sm-2 col-form-label">Link</label>
- <div class="form-group col-sm-10">
- <input type="url" class="form-control" id="eventGroupURL" name="eventGroupURL" placeholder="For tickets or a page with more information (optional)." data-validation="url" data-validation-optional="true">
- </div>
- </div>
- <div class="form-group row">
- <label for="eventGroupImage" class="col-sm-2 col-form-label">Cover image</label>
- <div class="form-group col-sm-10">
- <div class="image-preview" id="eventGroupImagePreview">
- <label for="image-upload" id="eventGroupImageLabel">Choose file</label>
- <input type="file" name="imageUpload" id="eventGroupImageUpload" />
- </div>
- <small class="form-text">Recommended dimensions (w x h): 920px by 300px.</small>
- </div>
- </div>
- <div class="form-group row">
- <label for="hostName" class="col-sm-2 col-form-label">Host or organisation name</label>
- <div class="form-group col-sm-10">
- <input type="text" class="form-control" id="hostName" name="hostName" placeholder="Will be shown on the event group page (optional)." data-validation="length" data-validation-length="2-60" data-validation-optional="true">
- </div>
- </div>
- <div class="form-group row">
- <label for="creatorEmail" class="col-sm-2 col-form-label">Your email</label>
- <div class="form-group col-sm-10">
- <input type="email" class="form-control" id="creatorEmail" name="creatorEmail" placeholder="We won't spam you <3 (optional)" data-validation="email" data-validation-optional="true">
- <small class="form-text">If you provide your email, we will send your secret editing password here, and use it to notify you of updates to the event.</small>
- </div>
- </div>
- <div class="form-group row">
- <div class="col-sm-12 pt-3 pb-3 text-center">
- <button type="submit" class="btn btn-primary w-50">Create</button>
- </div>
- </div>
-</form>
-
-<script>
- $(document).ready(function() {
- $.uploadPreview({
- input_field: "#eventGroupImageUpload",
- preview_box: "#eventGroupImagePreview",
- label_field: "#eventGroupImageLabel",
- label_default: "Choose file",
- label_selected: "Change file",
- no_label: false
- });
- autosize($('textarea'));
- });
-</script>
diff --git a/views/partials/sidebar.handlebars b/views/partials/sidebar.handlebars
index 980e699..5d8e847 100755
--- a/views/partials/sidebar.handlebars
+++ b/views/partials/sidebar.handlebars
@@ -3,5 +3,5 @@
<p class="lead text-center mb-4">Nicer events</p>
- <a class="btn btn-success mb-2 btn-block" href="/new"><i class="far fa-calendar-plus"></i> New event</a>
+ <a class="btn btn-success mb-2 btn-block" href="/new"><i class="far fa-calendar-plus"></i> New</a>
</div>