class EventItem { constructor(eventObject) { this.id = eventObject["id"]; this.name = eventObject["name"]; this.startTime = new Date(Date.parse(eventObject["starttime"])); this.endTime = new Date(Date.parse(eventObject["endtime"])); this.people = eventObject["people"]; this.desc = eventObject["description"]; this.constructElem(); } editEvent() { window.location.replace(`./event.html?id=${this.id}`); } /** * Creates the HTML Element for this Event using the standard format * *
* *

Example Event

* * * *
* *
  • People Involved
  • *
  • Description
  • *
    */ constructElem() { this.elem = document.createElement("div"); this.elem.id = `event-${this.id}`; this.elem.classList.add("event"); //top line includes event name and button section let topLine = document.createElement("span"); topLine.classList.add("event-topLine"); //event name let title = document.createElement("h3"); title.innerText = this.name; topLine.append(title); //button section as edit button let buttons = document.createElement("span"); buttons.classList.add("event-buttons"); //edit button let editButton = document.createElement("button"); editButton.classList.add("event-edit"); editButton.innerText = "Edit"; buttons.append(editButton); topLine.append(buttons); this.elem.append(topLine); //topLine end //datetime includes event date and time //if start and end time are less than 24h apart, only show the day for the start time if ((this.endTime.getTime() - this.startTime.getTime()) / 3600000 < 24) this.elem.append(this.sameDayElem()); else this.elem.append(this.bothDaysElem()); //people involved in event let eventPeople = document.createElement("li"); eventPeople.classList.add("event-people"); eventPeople.innerText = this.people; this.elem.append(eventPeople); //description of event let eventDesc = document.createElement("li"); eventDesc.classList.add("event-desc"); eventDesc.innerText = this.desc; this.elem.append(eventDesc); //elem end editButton.addEventListener("click", () => this.editEvent()); } /** * Creates the HTML Element for datetime section of the Event using the standard format * When only the day is shown for the start time * *
  • * DayOfWeek, Month ##
    * - *
  • * * @returns {HTMLElement} datetime - li that contains start date and time info */ sameDayElem() { let datetime = document.createElement("li"); datetime.classList.add = "event-datetime"; //Day for starting time datetime.append(getDay(this.startTime)); //linebreak datetime.append(document.createElement('br')); //starting time within HTML timestamp let start = document.createElement("TIME"); start.setAttribute("datetime", this.startTime.toISOString().slice(0, 16).replace('T', ' ')); start.innerText = getTime(this.startTime); datetime.append(start); //seperator datetime.append(" - "); //ending time within HTML timestamp let end = document.createElement("TIME"); end.setAttribute("datetime", this.endTime.toISOString().slice(0, 16).replace('T', ' ')); end.innerText = getTime(this.endTime); datetime.append(end); return datetime; } /** * Creates the HTML Element for datetime section of the Event using the standard format * When the day is shown for both start and end times * *
  • *
    * *
  • * * @returns {HTMLElement} datetime - li that contains end date and time info */ bothDaysElem() { let datetime = document.createElement("li"); datetime.classList.add("event-datetime"); //starting day and time within HTML timestamp let start = document.createElement("TIME"); start.setAttribute("datetime", this.startTime.toISOString().slice(0, 16).replace('T', ' ')); start.innerText = `${getDay(this.startTime)} ${getTime(this.startTime)}`; datetime.append(start); //linebreak datetime.append(document.createElement('br')); //ending day and time within HTML timestamp let end = document.createElement("TIME"); end.setAttribute("datetime", this.endTime.toISOString().slice(0, 16).replace('T', ' ')); end.innerText = `${getDay(this.endTime)} ${getTime(this.endTime)}`; datetime.append(end); return datetime; } }