<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.7.1/fullcalendar.min.css"/>
    <link rel="stylesheet" href="style.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/locale/de.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.7.1/fullcalendar.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
    <div id="app" class="wrapper">
      <div style="padding:30px;text-align:center">
      start: <input type="text" v-model="start0" /><br>
      end: <input type="text" v-model="end0" /><br>
      event: <INPUT v-model="event0" type="text" /><br>
      <button @click="addEvent">Add Event</button>
      </div>
      <calendar ref="calendar" class="cats" @dayclicked="dayclicked" @eventclicked="eventclicked" :events="events" :editable="true">
      </calendar>  
    </div>
    <script src="script.js"></script>
  </body>
</html>




Vue.component('calendar', {
  template: '<div></div>',
  props: {
    events: {
      type: Array, 
      required: true
    },
  },
  data: function() {
    return {
      cal: null
    }
  },  
  watch: {
    events: function(data) {
      this.cal.fullCalendar('refetchEvents');
    }
  },
  mounted: function() {
    var self = this;
    self.cal = $(self.$el);    
    var args = {
      lang: 'en',
      header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
      },
      height: "auto",
      allDaySlot: false,
      slotEventOverlap: false,
      timeFormat: 'HH:mm',
      events: function(start, end, timezone, callback) {
        callback(self.events)
      },
      dayClick: function(date) {
        self.$emit('dayclicked', date);
        self.cal.fullCalendar('gotoDate', date.start);
        self.cal.fullCalendar('changeView', 'agendaDay');
      },
      eventClick: function(event) {
	    	self.$emit('eventclicked', event);
	    }
    }    
    this.cal.fullCalendar(args);
  }  
})

function fetchArray(key) {
  if (localStorage.getItem(key))
  {
    return JSON.parse(localStorage.getItem(key));
  }
  return [];
}

function saveArray(key, value) {
  localStorage.setItem(key, JSON.stringify(value));
}

window.calendar = new Vue({
  el: '#app',
  mounted: function() {
  },
  data: {    
    events: fetchArray("events"),
    start0: "2020-03-22 00:00:00",
    end0: "2020-03-23 00:00:00",
    event0: "test"
  },
  methods: {
    'addEvent': function() {
      this.events.push({
        title: this.event0,
        start: this.start0,
        end: this.end0
      });
      saveArray("events", this.events);
      this.start0 = "";
      this.end0 = "";
      this.evet0 = "";
    },
    'dayclicked': function(date) {
    },
    'eventclicked': function(env) {
    }
  }
})



/* Styles go here */

.wrapper {
  margin: 2rem;
}