diff options
Diffstat (limited to 'views/newevent.handlebars')
| -rwxr-xr-x | views/newevent.handlebars | 183 | 
1 files changed, 19 insertions, 164 deletions
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  | 
