Bhikkhu-Kosalla il y a 5 ans
Parent
commit
75beda215d
98 fichiers modifiés avec 6152 ajouts et 0 suppressions
  1. 102 0
      app/calendar/examples/background-events.html
  2. 105 0
      app/calendar/examples/daygrid-views.html
  3. 70 0
      app/calendar/examples/external-dragging-2cals.html
  4. 150 0
      app/calendar/examples/external-dragging-builtin.html
  5. 126 0
      app/calendar/examples/full-height.html
  6. 78 0
      app/calendar/examples/google-calendar.html
  7. 141 0
      app/calendar/examples/js/theme-chooser.js
  8. 85 0
      app/calendar/examples/json.html
  9. 228 0
      app/calendar/examples/json/events.json
  10. 78 0
      app/calendar/examples/list-sticky-header.html
  11. 115 0
      app/calendar/examples/list-views.html
  12. 144 0
      app/calendar/examples/locales.html
  13. 101 0
      app/calendar/examples/month-view.html
  14. 109 0
      app/calendar/examples/natural-height.html
  15. 50 0
      app/calendar/examples/php/get-events.php
  16. 9 0
      app/calendar/examples/php/get-time-zones.php
  17. 130 0
      app/calendar/examples/php/utils.php
  18. 124 0
      app/calendar/examples/selectable.html
  19. 212 0
      app/calendar/examples/theming.html
  20. 168 0
      app/calendar/examples/time-zones.html
  21. 122 0
      app/calendar/examples/timegrid-sticky-header.html
  22. 107 0
      app/calendar/examples/timegrid-views-hscroll.html
  23. 109 0
      app/calendar/examples/timegrid-views.html
  24. 111 0
      app/calendar/examples/week-numbers.html
  25. 1425 0
      app/calendar/lib/locales-all.js
  26. 0 0
      app/calendar/lib/locales-all.min.js
  27. 27 0
      app/calendar/lib/locales/af.js
  28. 28 0
      app/calendar/lib/locales/ar-dz.js
  29. 28 0
      app/calendar/lib/locales/ar-kw.js
  30. 28 0
      app/calendar/lib/locales/ar-ly.js
  31. 28 0
      app/calendar/lib/locales/ar-ma.js
  32. 28 0
      app/calendar/lib/locales/ar-sa.js
  33. 28 0
      app/calendar/lib/locales/ar-tn.js
  34. 28 0
      app/calendar/lib/locales/ar.js
  35. 29 0
      app/calendar/lib/locales/az.js
  36. 28 0
      app/calendar/lib/locales/bg.js
  37. 29 0
      app/calendar/lib/locales/bs.js
  38. 27 0
      app/calendar/lib/locales/ca.js
  39. 29 0
      app/calendar/lib/locales/cs.js
  40. 27 0
      app/calendar/lib/locales/da.js
  41. 30 0
      app/calendar/lib/locales/de.js
  42. 27 0
      app/calendar/lib/locales/el.js
  43. 14 0
      app/calendar/lib/locales/en-au.js
  44. 14 0
      app/calendar/lib/locales/en-gb.js
  45. 14 0
      app/calendar/lib/locales/en-nz.js
  46. 27 0
      app/calendar/lib/locales/es-us.js
  47. 27 0
      app/calendar/lib/locales/es.js
  48. 29 0
      app/calendar/lib/locales/et.js
  49. 27 0
      app/calendar/lib/locales/eu.js
  50. 30 0
      app/calendar/lib/locales/fa.js
  51. 27 0
      app/calendar/lib/locales/fi.js
  52. 24 0
      app/calendar/lib/locales/fr-ca.js
  53. 28 0
      app/calendar/lib/locales/fr-ch.js
  54. 28 0
      app/calendar/lib/locales/fr.js
  55. 27 0
      app/calendar/lib/locales/gl.js
  56. 24 0
      app/calendar/lib/locales/he.js
  57. 29 0
      app/calendar/lib/locales/hi.js
  58. 29 0
      app/calendar/lib/locales/hr.js
  59. 27 0
      app/calendar/lib/locales/hu.js
  60. 27 0
      app/calendar/lib/locales/id.js
  61. 27 0
      app/calendar/lib/locales/is.js
  62. 29 0
      app/calendar/lib/locales/it.js
  63. 25 0
      app/calendar/lib/locales/ja.js
  64. 29 0
      app/calendar/lib/locales/ka.js
  65. 29 0
      app/calendar/lib/locales/kk.js
  66. 23 0
      app/calendar/lib/locales/ko.js
  67. 27 0
      app/calendar/lib/locales/lb.js
  68. 27 0
      app/calendar/lib/locales/lt.js
  69. 29 0
      app/calendar/lib/locales/lv.js
  70. 25 0
      app/calendar/lib/locales/mk.js
  71. 29 0
      app/calendar/lib/locales/ms.js
  72. 27 0
      app/calendar/lib/locales/nb.js
  73. 27 0
      app/calendar/lib/locales/ne.js
  74. 27 0
      app/calendar/lib/locales/nl.js
  75. 27 0
      app/calendar/lib/locales/nn.js
  76. 27 0
      app/calendar/lib/locales/pl.js
  77. 25 0
      app/calendar/lib/locales/pt-br.js
  78. 27 0
      app/calendar/lib/locales/pt.js
  79. 29 0
      app/calendar/lib/locales/ro.js
  80. 29 0
      app/calendar/lib/locales/ru.js
  81. 29 0
      app/calendar/lib/locales/sk.js
  82. 27 0
      app/calendar/lib/locales/sl.js
  83. 29 0
      app/calendar/lib/locales/sq.js
  84. 29 0
      app/calendar/lib/locales/sr-cyrl.js
  85. 29 0
      app/calendar/lib/locales/sr.js
  86. 27 0
      app/calendar/lib/locales/sv.js
  87. 30 0
      app/calendar/lib/locales/th.js
  88. 27 0
      app/calendar/lib/locales/tr.js
  89. 17 0
      app/calendar/lib/locales/ug.js
  90. 29 0
      app/calendar/lib/locales/uk.js
  91. 21 0
      app/calendar/lib/locales/uz.js
  92. 29 0
      app/calendar/lib/locales/vi.js
  93. 30 0
      app/calendar/lib/locales/zh-cn.js
  94. 23 0
      app/calendar/lib/locales/zh-tw.js
  95. 71 0
      app/calendar/lib/main.css
  96. 56 0
      app/calendar/lib/main.js
  97. 0 0
      app/calendar/lib/main.min.css
  98. 5 0
      app/calendar/lib/main.min.js

+ 102 - 0
app/calendar/examples/background-events.html

@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
+      },
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      businessHours: true, // display business hours
+      editable: true,
+      selectable: true,
+      events: [
+        {
+          title: 'Business Lunch',
+          start: '2020-09-03T13:00:00',
+          constraint: 'businessHours'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-13T11:00:00',
+          constraint: 'availableForMeeting', // defined below
+          color: '#257e4a'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-18',
+          end: '2020-09-20'
+        },
+        {
+          title: 'Party',
+          start: '2020-09-29T20:00:00'
+        },
+
+        // areas where "Meeting" must be dropped
+        {
+          groupId: 'availableForMeeting',
+          start: '2020-09-11T10:00:00',
+          end: '2020-09-11T16:00:00',
+          display: 'background'
+        },
+        {
+          groupId: 'availableForMeeting',
+          start: '2020-09-13T10:00:00',
+          end: '2020-09-13T16:00:00',
+          display: 'background'
+        },
+
+        // red areas where no events can be dropped
+        {
+          start: '2020-09-24',
+          end: '2020-09-28',
+          overlap: false,
+          display: 'background',
+          color: '#ff9f89'
+        },
+        {
+          start: '2020-09-06',
+          end: '2020-09-08',
+          overlap: false,
+          display: 'background',
+          color: '#ff9f89'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 105 - 0
app/calendar/examples/daygrid-views.html

@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prevYear,prev,next,nextYear today',
+        center: 'title',
+        right: 'dayGridMonth,dayGridWeek,dayGridDay'
+      },
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01'
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 70 - 0
app/calendar/examples/external-dragging-2cals.html

@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var srcCalendarEl = document.getElementById('source-calendar');
+    var destCalendarEl = document.getElementById('destination-calendar');
+
+    var srcCalendar = new FullCalendar.Calendar(srcCalendarEl, {
+      editable: true,
+      initialDate: '2020-09-12',
+      events: [
+        {
+          title: 'event1',
+          start: '2020-09-11T10:00:00',
+          end: '2020-09-11T16:00:00'
+        },
+        {
+          title: 'event2',
+          start: '2020-09-13T10:00:00',
+          end: '2020-09-13T16:00:00'
+        }
+      ],
+      eventLeave: function(info) {
+        console.log('event left!', info.event);
+      }
+    });
+
+    var destCalendar = new FullCalendar.Calendar(destCalendarEl, {
+      initialDate: '2020-09-12',
+      editable: true,
+      droppable: true, // will let it receive events!
+      eventReceive: function(info) {
+        console.log('event received!', info.event);
+      }
+    });
+
+    srcCalendar.render();
+    destCalendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 20px 0 0 20px;
+    font-size: 14px;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+  }
+
+  #source-calendar,
+  #destination-calendar {
+    float: left;
+    width: 600px;
+    margin: 0 20px 20px 0;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='source-calendar'></div>
+  <div id='destination-calendar'></div>
+
+</body>
+</html>

+ 150 - 0
app/calendar/examples/external-dragging-builtin.html

@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+
+    /* initialize the external events
+    -----------------------------------------------------------------*/
+
+    var containerEl = document.getElementById('external-events-list');
+    new FullCalendar.Draggable(containerEl, {
+      itemSelector: '.fc-event',
+      eventData: function(eventEl) {
+        return {
+          title: eventEl.innerText.trim()
+        }
+      }
+    });
+
+    //// the individual way to do it
+    // var containerEl = document.getElementById('external-events-list');
+    // var eventEls = Array.prototype.slice.call(
+    //   containerEl.querySelectorAll('.fc-event')
+    // );
+    // eventEls.forEach(function(eventEl) {
+    //   new FullCalendar.Draggable(eventEl, {
+    //     eventData: {
+    //       title: eventEl.innerText.trim(),
+    //     }
+    //   });
+    // });
+
+    /* initialize the calendar
+    -----------------------------------------------------------------*/
+
+    var calendarEl = document.getElementById('calendar');
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      editable: true,
+      droppable: true, // this allows things to be dropped onto the calendar
+      drop: function(arg) {
+        // is the "remove after drop" checkbox checked?
+        if (document.getElementById('drop-remove').checked) {
+          // if so, remove the element from the "Draggable Events" list
+          arg.draggedEl.parentNode.removeChild(arg.draggedEl);
+        }
+      }
+    });
+    calendar.render();
+
+  });
+
+</script>
+<style>
+
+  body {
+    margin-top: 40px;
+    font-size: 14px;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+  }
+
+  #external-events {
+    position: fixed;
+    left: 20px;
+    top: 20px;
+    width: 150px;
+    padding: 0 10px;
+    border: 1px solid #ccc;
+    background: #eee;
+    text-align: left;
+  }
+
+  #external-events h4 {
+    font-size: 16px;
+    margin-top: 0;
+    padding-top: 1em;
+  }
+
+  #external-events .fc-event {
+    margin: 3px 0;
+    cursor: move;
+  }
+
+  #external-events p {
+    margin: 1.5em 0;
+    font-size: 11px;
+    color: #666;
+  }
+
+  #external-events p input {
+    margin: 0;
+    vertical-align: middle;
+  }
+
+  #calendar-wrap {
+    margin-left: 200px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+  <div id='wrap'>
+
+    <div id='external-events'>
+      <h4>Draggable Events</h4>
+
+      <div id='external-events-list'>
+        <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+          <div class='fc-event-main'>My Event 1</div>
+        </div>
+        <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+          <div class='fc-event-main'>My Event 2</div>
+        </div>
+        <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+          <div class='fc-event-main'>My Event 3</div>
+        </div>
+        <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+          <div class='fc-event-main'>My Event 4</div>
+        </div>
+        <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+          <div class='fc-event-main'>My Event 5</div>
+        </div>
+      </div>
+
+      <p>
+        <input type='checkbox' id='drop-remove' />
+        <label for='drop-remove'>remove after drop</label>
+      </p>
+    </div>
+
+    <div id='calendar-wrap'>
+      <div id='calendar'></div>
+    </div>
+
+  </div>
+</body>
+</html>

+ 126 - 0
app/calendar/examples/full-height.html

@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      height: '100%',
+      expandRows: true,
+      slotMinTime: '08:00',
+      slotMaxTime: '20:00',
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      initialView: 'dayGridMonth',
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      selectable: true,
+      nowIndicator: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01',
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  html, body {
+    overflow: hidden; /* don't do scrollbars */
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar-container {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+  }
+
+  .fc-header-toolbar {
+    /*
+    the calendar will be butting up against the edges,
+    but let's scoot in the header's buttons
+    */
+    padding-top: 1em;
+    padding-left: 1em;
+    padding-right: 1em;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar-container'>
+    <div id='calendar'></div>
+  </div>
+
+</body>
+</html>

+ 78 - 0
app/calendar/examples/google-calendar.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,listYear'
+      },
+
+      displayEventTime: false, // don't show the time column in list view
+
+      // THIS KEY WON'T WORK IN PRODUCTION!!!
+      // To make your own Google API key, follow the directions here:
+      // http://fullcalendar.io/docs/google_calendar/
+      googleCalendarApiKey: 'AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE',
+
+      // US Holidays
+      events: 'en.usa#holiday@group.v.calendar.google.com',
+
+      eventClick: function(arg) {
+        // opens events in a popup window
+        window.open(arg.event.url, 'google-calendar-event', 'width=700,height=600');
+
+        arg.jsEvent.preventDefault() // don't navigate in main tab
+      },
+
+      loading: function(bool) {
+        document.getElementById('loading').style.display =
+          bool ? 'block' : 'none';
+      }
+
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #loading {
+    display: none;
+    position: absolute;
+    top: 10px;
+    right: 10px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='loading'>loading...</div>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 141 - 0
app/calendar/examples/js/theme-chooser.js

@@ -0,0 +1,141 @@
+
+function initThemeChooser(settings) {
+  var isInitialized = false;
+  var currentThemeSystem; // don't set this directly. use setThemeSystem
+  var currentStylesheetEl;
+  var loadingEl = document.getElementById('loading');
+  var systemSelectEl = document.querySelector('#theme-system-selector select');
+  var themeSelectWrapEls = Array.prototype.slice.call( // convert to real array
+    document.querySelectorAll('.selector[data-theme-system]')
+  );
+
+  systemSelectEl.addEventListener('change', function() {
+    setThemeSystem(this.value);
+  });
+
+  setThemeSystem(systemSelectEl.value);
+
+  themeSelectWrapEls.forEach(function(themeSelectWrapEl) {
+    var themeSelectEl = themeSelectWrapEl.querySelector('select');
+
+    themeSelectWrapEl.addEventListener('change', function() {
+      setTheme(
+        currentThemeSystem,
+        themeSelectEl.options[themeSelectEl.selectedIndex].value
+      );
+    });
+  });
+
+
+  function setThemeSystem(themeSystem) {
+    var selectedTheme;
+
+    currentThemeSystem = themeSystem;
+
+    themeSelectWrapEls.forEach(function(themeSelectWrapEl) {
+      var themeSelectEl = themeSelectWrapEl.querySelector('select');
+
+      if (themeSelectWrapEl.getAttribute('data-theme-system') === themeSystem) {
+        selectedTheme = themeSelectEl.options[themeSelectEl.selectedIndex].value;
+        themeSelectWrapEl.style.display = 'inline-block';
+      } else {
+        themeSelectWrapEl.style.display = 'none';
+      }
+    });
+
+    setTheme(themeSystem, selectedTheme);
+  }
+
+
+  function setTheme(themeSystem, themeName) {
+    var stylesheetUrl = generateStylesheetUrl(themeSystem, themeName);
+    var stylesheetEl;
+
+    function done() {
+      if (!isInitialized) {
+        isInitialized = true;
+        settings.init(themeSystem);
+      }
+      else {
+        settings.change(themeSystem);
+      }
+
+      showCredits(themeSystem, themeName);
+    }
+
+    if (stylesheetUrl) {
+      stylesheetEl = document.createElement('link');
+      stylesheetEl.setAttribute('rel', 'stylesheet');
+      stylesheetEl.setAttribute('href', stylesheetUrl);
+      document.querySelector('head').appendChild(stylesheetEl);
+
+      loadingEl.style.display = 'inline';
+
+      whenStylesheetLoaded(stylesheetEl, function() {
+        if (currentStylesheetEl) {
+          currentStylesheetEl.parentNode.removeChild(currentStylesheetEl);
+        }
+        currentStylesheetEl = stylesheetEl;
+        loadingEl.style.display = 'none';
+        done();
+      });
+    } else {
+      if (currentStylesheetEl) {
+        currentStylesheetEl.parentNode.removeChild(currentStylesheetEl);
+        currentStylesheetEl = null
+      }
+      done();
+    }
+  }
+
+
+  function generateStylesheetUrl(themeSystem, themeName) {
+    if (themeSystem === 'bootstrap') {
+      if (themeName) {
+        return 'https://bootswatch.com/4/' + themeName + '/bootstrap.min.css';
+      }
+      else { // the default bootstrap theme
+        return 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css';
+      }
+    }
+  }
+
+
+  function showCredits(themeSystem, themeName) {
+    var creditId;
+
+    if (themeSystem.match('bootstrap')) {
+      if (themeName) {
+        creditId = 'bootstrap-custom';
+      }
+      else {
+        creditId = 'bootstrap-standard';
+      }
+    }
+
+    Array.prototype.slice.call( // convert to real array
+      document.querySelectorAll('.credits')
+    ).forEach(function(creditEl) {
+      if (creditEl.getAttribute('data-credit-id') === creditId) {
+        creditEl.style.display = 'block';
+      } else {
+        creditEl.style.display = 'none';
+      }
+    })
+  }
+
+
+  function whenStylesheetLoaded(linkNode, callback) {
+    var isReady = false;
+
+    function ready() {
+      if (!isReady) { // avoid double-call
+        isReady = true;
+        callback();
+      }
+    }
+
+    linkNode.onload = ready; // does not work cross-browser
+    setTimeout(ready, 2000); // max wait. also handles browsers that don't support onload
+  }
+}

+ 85 - 0
app/calendar/examples/json.html

@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      initialDate: '2020-09-12',
+      editable: true,
+      navLinks: true, // can click day/week names to navigate views
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: {
+        url: 'php/get-events.php',
+        failure: function() {
+          document.getElementById('script-warning').style.display = 'block'
+        }
+      },
+      loading: function(bool) {
+        document.getElementById('loading').style.display =
+          bool ? 'block' : 'none';
+      }
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 0;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #script-warning {
+    display: none;
+    background: #eee;
+    border-bottom: 1px solid #ddd;
+    padding: 0 10px;
+    line-height: 40px;
+    text-align: center;
+    font-weight: bold;
+    font-size: 12px;
+    color: red;
+  }
+
+  #loading {
+    display: none;
+    position: absolute;
+    top: 10px;
+    right: 10px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 40px auto;
+    padding: 0 10px;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='script-warning'>
+    <code>php/get-events.php</code> must be running.
+  </div>
+
+  <div id='loading'>loading...</div>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 228 - 0
app/calendar/examples/json/events.json

@@ -0,0 +1,228 @@
+[
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-11-30T08:00:00+06:30",
+		"end": "2020-11-30T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-1T08:00:00+06:30",
+		"end": "2020-12-1T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-4T08:00:00+06:30",
+		"end": "2020-12-4T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-7T08:00:00+06:30",
+		"end": "2020-12-7T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-8T08:00:00+06:30",
+		"end": "2020-12-8T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-11T08:00:00+06:30",
+		"end": "2020-12-11T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-14T08:00:00+06:30",
+		"end": "2020-12-14T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-15T08:00:00+06:30",
+		"end": "2020-12-15T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-18T08:00:00+06:30",
+		"end": "2020-12-18T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-21T08:00:00+06:30",
+		"end": "2020-12-21T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-22T08:00:00+06:30",
+		"end": "2020-12-22T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-25T08:00:00+06:30",
+		"end": "2020-12-25T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-28T08:00:00+06:30",
+		"end": "2020-12-28T09:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2020-12-29T08:00:00+06:30",
+		"end": "2020-12-29T09:30:00+06:30"
+	},
+	{
+		"id": "888",
+		"title": "kāmasuttaniddesa",
+		"url": "https://www.wikipali.org/app/course/course.php?id=7f18a3b9-0cd5-47f6-99dd-bae441227d27",
+		"start": "2020-12-3T7:00:00+06:30",
+		"end": "2020-12-3T8:30:00+06:30"
+	},
+	{
+		"id": "888",
+		"title": "kāmasuttaniddesa",
+		"url": "https://www.wikipali.org/app/course/course.php?id=7f18a3b9-0cd5-47f6-99dd-bae441227d27",
+		"start": "2020-12-10T7:00:00+06:30",
+		"end": "2020-12-10T8:30:00+06:30"
+	},
+	{
+		"id": "888",
+		"title": "kāmasuttaniddesa",
+		"url": "https://www.wikipali.org/app/course/course.php?id=7f18a3b9-0cd5-47f6-99dd-bae441227d27",
+		"start": "2020-12-17T7:00:00+06:30",
+		"end": "2020-12-17T8:30:00+06:30"
+	},
+	{
+		"id": "888",
+		"title": "kāmasuttaniddesa",
+		"url": "https://www.wikipali.org/app/course/course.php?id=7f18a3b9-0cd5-47f6-99dd-bae441227d27",
+		"start": "2020-12-24T7:00:00+06:30",
+		"end": "2020-12-24T8:30:00+06:30"
+	},
+	{
+		"id": "888",
+		"title": "kāmasuttaniddesa",
+		"url": "https://www.wikipali.org/app/course/course.php?id=7f18a3b9-0cd5-47f6-99dd-bae441227d27",
+		"start": "2020-12-31T7:00:00+06:30",
+		"end": "2020-12-31T8:30:00+06:30"
+	},
+	{
+		"id": "888",
+		"title": "kāmasuttaniddesa",
+		"url": "https://www.wikipali.org/app/course/course.php?id=7f18a3b9-0cd5-47f6-99dd-bae441227d27",
+		"start": "2021-1-7T7:00:00+06:30",
+		"end": "2021-1-7T8:30:00+06:30"
+	},
+	{
+		"id": "999",
+		"title": "Dhammacakkha",
+		"url": "https://www.wikipali.org/app/course/lesson.php?id=6a42e993-8f7e-414a-a291-a4094764f992",
+		"start": "2021-1-1T08:00:00+06:30",
+		"end": "2021-1-1T09:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-07T2:30:00-05:00",
+		"end": "2020-12-07T4:00:00-05:00"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-10T2:30:00-05:00",
+		"end": "2020-12-10T4:00:00-05:00"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-11T2:30:00-05:00",
+		"end": "2020-12-11T4:00:00-05:00"
+	},
+	{
+		"id": "1001",
+		"title": "haritaca-jātaka",
+		"url": "https://youtu.be/5UdZDewA3TA",
+		"start": "2020-12-13T19:00:00+07:00",
+		"end": "2020-12-13T21:00:00+07:00"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-16T14:00:00+06:30",
+		"end": "2020-12-16T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-17T14:00:00+06:30",
+		"end": "2020-12-17T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-18T14:00:00+06:30",
+		"end": "2020-12-18T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-21T14:00:00+06:30",
+		"end": "2020-12-21T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-24T14:00:00+06:30",
+		"end": "2020-12-24T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-25T14:00:00+06:30",
+		"end": "2020-12-25T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-28T14:00:00+06:30",
+		"end": "2020-12-28T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2020-12-30T14:00:00+06:30",
+		"end": "2020-12-30T15:30:00+06:30"
+	},
+	{
+		"id": "1000",
+		"title": "nibbāna-gāmini",
+		"start": "2021-01-01T14:00:00+06:30",
+		"end": "2021-01-01T15:30:00+06:30"
+	}
+]

+ 78 - 0
app/calendar/examples/list-sticky-header.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      height: 'auto',
+      // stickyHeaderDates: false, // for disabling
+
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'listMonth,listYear'
+      },
+
+      // customize the button names,
+      // otherwise they'd all just say "list"
+      views: {
+        listMonth: { buttonText: 'list month' },
+        listYear: { buttonText: 'list year' }
+      },
+
+      initialView: 'listYear',
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      events: [
+        {
+          title: 'repeating event 1',
+          daysOfWeek: [ 1, 2, 3 ],
+          duration: '00:30'
+        },
+        {
+          title: 'repeating event 2',
+          daysOfWeek: [ 1, 2, 3 ],
+          duration: '00:30'
+        },
+        {
+          title: 'repeating event 3',
+          daysOfWeek: [ 1, 2, 3 ],
+          duration: '00:30'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 115 - 0
app/calendar/examples/list-views.html

@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'listDay,listWeek'
+      },
+
+      // customize the button names,
+      // otherwise they'd all just say "list"
+      views: {
+        listDay: { buttonText: 'list day' },
+        listWeek: { buttonText: 'list week' }
+      },
+
+      initialView: 'listWeek',
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01'
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 144 - 0
app/calendar/examples/locales.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script src='../lib/locales-all.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var initialLocaleCode = 'en';
+    var localeSelectorEl = document.getElementById('locale-selector');
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
+      },
+      initialDate: '2020-09-12',
+      locale: initialLocaleCode,
+      buttonIcons: false, // show the prev/next text
+      weekNumbers: true,
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01'
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+
+    // build the locale selector's options
+    calendar.getAvailableLocaleCodes().forEach(function(localeCode) {
+      var optionEl = document.createElement('option');
+      optionEl.value = localeCode;
+      optionEl.selected = localeCode == initialLocaleCode;
+      optionEl.innerText = localeCode;
+      localeSelectorEl.appendChild(optionEl);
+    });
+
+    // when the selected option changes, dynamically change the calendar option
+    localeSelectorEl.addEventListener('change', function() {
+      if (this.value) {
+        calendar.setOption('locale', this.value);
+      }
+    });
+
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 0;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #top {
+    background: #eee;
+    border-bottom: 1px solid #ddd;
+    padding: 0 10px;
+    line-height: 40px;
+    font-size: 12px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 40px auto;
+    padding: 0 10px;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='top'>
+
+    Locales:
+    <select id='locale-selector'></select>
+
+  </div>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 101 - 0
app/calendar/examples/month-view.html

@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      initialDate: '2020-09-12',
+      editable: true,
+      selectable: true,
+      businessHours: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01'
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 109 - 0
app/calendar/examples/natural-height.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      initialDate: '2020-09-12',
+      initialView: 'timeGridWeek',
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      height: 'auto',
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      selectable: true,
+      selectMirror: true,
+      nowIndicator: true,
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01',
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 50 - 0
app/calendar/examples/php/get-events.php

@@ -0,0 +1,50 @@
+<?php
+
+//--------------------------------------------------------------------------------------------------
+// This script reads event data from a JSON file and outputs those events which are within the range
+// supplied by the "start" and "end" GET parameters.
+//
+// An optional "timeZone" GET parameter will force all ISO8601 date stings to a given timeZone.
+//
+// Requires PHP 5.2.0 or higher.
+//--------------------------------------------------------------------------------------------------
+
+// Require our Event class and datetime utilities
+require dirname(__FILE__) . '/utils.php';
+
+// Short-circuit if the client did not give us a date range.
+if (!isset($_GET['start']) || !isset($_GET['end'])) {
+  die("Please provide a date range.");
+}
+
+// Parse the start/end parameters.
+// These are assumed to be ISO8601 strings with no time nor timeZone, like "2013-12-29".
+// Since no timeZone will be present, they will parsed as UTC.
+$range_start = parseDateTime($_GET['start']);
+$range_end = parseDateTime($_GET['end']);
+
+// Parse the timeZone parameter if it is present.
+$time_zone = null;
+if (isset($_GET['timeZone'])) {
+  $time_zone = new DateTimeZone($_GET['timeZone']);
+}
+
+// Read and parse our events JSON file into an array of event data arrays.
+$json = file_get_contents(dirname(__FILE__) . '/../json/events.json');
+$input_arrays = json_decode($json, true);
+
+// Accumulate an output array of event data arrays.
+$output_arrays = array();
+foreach ($input_arrays as $array) {
+
+  // Convert the input array into a useful Event object
+  $event = new Event($array, $time_zone);
+
+  // If the event is in-bounds, add it to the output
+  if ($event->isWithinDayRange($range_start, $range_end)) {
+    $output_arrays[] = $event->toArray();
+  }
+}
+
+// Send JSON to the client.
+echo json_encode($output_arrays);

+ 9 - 0
app/calendar/examples/php/get-time-zones.php

@@ -0,0 +1,9 @@
+<?php
+
+//--------------------------------------------------------------------------------------------------
+// This script outputs a JSON array of all timezones (like "America/Chicago") that PHP supports.
+//
+// Requires PHP 5.2.0 or higher.
+//--------------------------------------------------------------------------------------------------
+
+echo json_encode(DateTimeZone::listIdentifiers());

+ 130 - 0
app/calendar/examples/php/utils.php

@@ -0,0 +1,130 @@
+<?php
+
+//--------------------------------------------------------------------------------------------------
+// Utilities for our event-fetching scripts.
+//
+// Requires PHP 5.2.0 or higher.
+//--------------------------------------------------------------------------------------------------
+
+// PHP will fatal error if we attempt to use the DateTime class without this being set.
+date_default_timezone_set('UTC');
+
+
+class Event {
+
+  // Tests whether the given ISO8601 string has a time-of-day or not
+  const ALL_DAY_REGEX = '/^\d{4}-\d\d-\d\d$/'; // matches strings like "2013-12-29"
+
+  public $title;
+  public $allDay; // a boolean
+  public $start; // a DateTime
+  public $end; // a DateTime, or null
+  public $properties = array(); // an array of other misc properties
+
+
+  // Constructs an Event object from the given array of key=>values.
+  // You can optionally force the timeZone of the parsed dates.
+  public function __construct($array, $timeZone=null) {
+
+    $this->title = $array['title'];
+
+    if (isset($array['allDay'])) {
+      // allDay has been explicitly specified
+      $this->allDay = (bool)$array['allDay'];
+    }
+    else {
+      // Guess allDay based off of ISO8601 date strings
+      $this->allDay = preg_match(self::ALL_DAY_REGEX, $array['start']) &&
+        (!isset($array['end']) || preg_match(self::ALL_DAY_REGEX, $array['end']));
+    }
+
+    if ($this->allDay) {
+      // If dates are allDay, we want to parse them in UTC to avoid DST issues.
+      $timeZone = null;
+    }
+
+    // Parse dates
+    $this->start = parseDateTime($array['start'], $timeZone);
+    $this->end = isset($array['end']) ? parseDateTime($array['end'], $timeZone) : null;
+
+    // Record misc properties
+    foreach ($array as $name => $value) {
+      if (!in_array($name, array('title', 'allDay', 'start', 'end'))) {
+        $this->properties[$name] = $value;
+      }
+    }
+  }
+
+
+  // Returns whether the date range of our event intersects with the given all-day range.
+  // $rangeStart and $rangeEnd are assumed to be dates in UTC with 00:00:00 time.
+  public function isWithinDayRange($rangeStart, $rangeEnd) {
+
+    // Normalize our event's dates for comparison with the all-day range.
+    $eventStart = stripTime($this->start);
+
+    if (isset($this->end)) {
+      $eventEnd = stripTime($this->end); // normalize
+    }
+    else {
+      $eventEnd = $eventStart; // consider this a zero-duration event
+    }
+
+    // Check if the two whole-day ranges intersect.
+    return $eventStart < $rangeEnd && $eventEnd >= $rangeStart;
+  }
+
+
+  // Converts this Event object back to a plain data array, to be used for generating JSON
+  public function toArray() {
+
+    // Start with the misc properties (don't worry, PHP won't affect the original array)
+    $array = $this->properties;
+
+    $array['title'] = $this->title;
+
+    // Figure out the date format. This essentially encodes allDay into the date string.
+    if ($this->allDay) {
+      $format = 'Y-m-d'; // output like "2013-12-29"
+    }
+    else {
+      $format = 'c'; // full ISO8601 output, like "2013-12-29T09:00:00+08:00"
+    }
+
+    // Serialize dates into strings
+    $array['start'] = $this->start->format($format);
+    if (isset($this->end)) {
+      $array['end'] = $this->end->format($format);
+    }
+
+    return $array;
+  }
+
+}
+
+
+// Date Utilities
+//----------------------------------------------------------------------------------------------
+
+
+// Parses a string into a DateTime object, optionally forced into the given timeZone.
+function parseDateTime($string, $timeZone=null) {
+  $date = new DateTime(
+    $string,
+    $timeZone ? $timeZone : new DateTimeZone('UTC')
+      // Used only when the string is ambiguous.
+      // Ignored if string has a timeZone offset in it.
+  );
+  if ($timeZone) {
+    // If our timeZone was ignored above, force it.
+    $date->setTimezone($timeZone);
+  }
+  return $date;
+}
+
+
+// Takes the year/month/date values of the given DateTime and converts them to a new DateTime,
+// but in UTC.
+function stripTime($datetime) {
+  return new DateTime($datetime->format('Y-m-d'));
+}

+ 124 - 0
app/calendar/examples/selectable.html

@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay'
+      },
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      selectable: true,
+      selectMirror: true,
+      select: function(arg) {
+        var title = prompt('Event Title:');
+        if (title) {
+          calendar.addEvent({
+            title: title,
+            start: arg.start,
+            end: arg.end,
+            allDay: arg.allDay
+          })
+        }
+        calendar.unselect()
+      },
+      eventClick: function(arg) {
+        if (confirm('Are you sure you want to delete this event?')) {
+          arg.event.remove()
+        }
+      },
+      editable: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01'
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 212 - 0
app/calendar/examples/theming.html

@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='https://use.fontawesome.com/releases/v5.0.6/css/all.css' rel='stylesheet'>
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script src='js/theme-chooser.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+    var calendar;
+
+    initThemeChooser({
+
+      init: function(themeSystem) {
+        calendar = new FullCalendar.Calendar(calendarEl, {
+          themeSystem: themeSystem,
+          headerToolbar: {
+            left: 'prev,next today',
+            center: 'title',
+            right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
+          },
+          initialDate: '2020-09-12',
+          weekNumbers: true,
+          navLinks: true, // can click day/week names to navigate views
+          editable: true,
+          selectable: true,
+          nowIndicator: true,
+          dayMaxEvents: true, // allow "more" link when too many events
+          // showNonCurrentDates: false,
+          events: [
+            {
+              title: 'All Day Event',
+              start: '2020-09-01'
+            },
+            {
+              title: 'Long Event',
+              start: '2020-09-07',
+              end: '2020-09-10'
+            },
+            {
+              groupId: 999,
+              title: 'Repeating Event',
+              start: '2020-09-09T16:00:00'
+            },
+            {
+              groupId: 999,
+              title: 'Repeating Event',
+              start: '2020-09-16T16:00:00'
+            },
+            {
+              title: 'Conference',
+              start: '2020-09-11',
+              end: '2020-09-13'
+            },
+            {
+              title: 'Meeting',
+              start: '2020-09-12T10:30:00',
+              end: '2020-09-12T12:30:00'
+            },
+            {
+              title: 'Lunch',
+              start: '2020-09-12T12:00:00'
+            },
+            {
+              title: 'Meeting',
+              start: '2020-09-12T14:30:00'
+            },
+            {
+              title: 'Happy Hour',
+              start: '2020-09-12T17:30:00'
+            },
+            {
+              title: 'Dinner',
+              start: '2020-09-12T20:00:00'
+            },
+            {
+              title: 'Birthday Party',
+              start: '2020-09-13T07:00:00'
+            },
+            {
+              title: 'Click for Google',
+              url: 'http://google.com/',
+              start: '2020-09-28'
+            }
+          ]
+        });
+        calendar.render();
+      },
+
+      change: function(themeSystem) {
+        calendar.setOption('themeSystem', themeSystem);
+      }
+
+    });
+
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 0;
+    padding: 0;
+    font-size: 14px;
+  }
+
+  #top,
+  #calendar.fc-theme-standard {
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+  }
+
+  #calendar.fc-theme-bootstrap {
+    font-size: 14px;
+  }
+
+  #top {
+    background: #eee;
+    border-bottom: 1px solid #ddd;
+    padding: 0 10px;
+    line-height: 40px;
+    font-size: 12px;
+    color: #000;
+  }
+
+  #top .selector {
+    display: inline-block;
+    margin-right: 10px;
+  }
+
+  #top select {
+    font: inherit; /* mock what Boostrap does, don't compete  */
+  }
+
+  .left { float: left }
+  .right { float: right }
+  .clear { clear: both }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 40px auto;
+    padding: 0 10px;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='top'>
+
+    <div class='left'>
+
+      <div id='theme-system-selector' class='selector'>
+        Theme System:
+
+        <select>
+          <option value='bootstrap' selected>Bootstrap 4</option>
+          <option value='standard'>unthemed</option>
+        </select>
+      </div>
+
+      <div data-theme-system="bootstrap" class='selector' style='display:none'>
+        Theme Name:
+
+        <select>
+          <option value='' selected>Default</option>
+          <option value='cerulean'>Cerulean</option>
+          <option value='cosmo'>Cosmo</option>
+          <option value='cyborg'>Cyborg</option>
+          <option value='darkly'>Darkly</option>
+          <option value='flatly'>Flatly</option>
+          <option value='journal'>Journal</option>
+          <option value='litera'>Litera</option>
+          <option value='lumen'>Lumen</option>
+          <option value='lux'>Lux</option>
+          <option value='materia'>Materia</option>
+          <option value='minty'>Minty</option>
+          <option value='pulse'>Pulse</option>
+          <option value='sandstone'>Sandstone</option>
+          <option value='simplex'>Simplex</option>
+          <option value='sketchy'>Sketchy</option>
+          <option value='slate'>Slate</option>
+          <option value='solar'>Solar</option>
+          <option value='spacelab'>Spacelab</option>
+          <option value='superhero'>Superhero</option>
+          <option value='united'>United</option>
+          <option value='yeti'>Yeti</option>
+        </select>
+      </div>
+
+      <span id='loading' style='display:none'>loading theme...</span>
+
+    </div>
+
+    <div class='right'>
+      <span class='credits' data-credit-id='bootstrap-standard' style='display:none'>
+        <a href='https://getbootstrap.com/docs/3.3/' target='_blank'>Theme by Bootstrap</a>
+      </span>
+      <span class='credits' data-credit-id='bootstrap-custom' style='display:none'>
+        <a href='https://bootswatch.com/' target='_blank'>Theme by Bootswatch</a>
+      </span>
+    </div>
+
+    <div class='clear'></div>
+  </div>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 168 - 0
app/calendar/examples/time-zones.html

@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<link href="../lib/main.css" rel="stylesheet" />
+		<script src="../lib/main.js"></script>
+		<script>
+			function getCookie(name) {
+				var start = document.cookie.indexOf(name + "=");
+				var len = start + name.length + 1;
+				if (!start && name != document.cookie.substring(0, name.length)) {
+					return null;
+				}
+				if (start == -1) return null;
+				var end = document.cookie.indexOf(";", len);
+				if (end == -1) end = document.cookie.length;
+				return decodeURI(document.cookie.substring(len, end));
+			}
+
+			document.addEventListener("DOMContentLoaded", function () {
+				var initialTimeZone = "local";
+				var timeZoneSelectorEl = document.getElementById("time-zone-selector");
+				var loadingEl = document.getElementById("loading");
+				var calendarEl = document.getElementById("calendar");
+
+				var calendar = new FullCalendar.Calendar(calendarEl, {
+					timeZone: initialTimeZone,
+					locale: getCookie("language"),
+					headerToolbar: {
+						left: "prev,next today",
+						center: "title",
+						right: "dayGridMonth,timeGridWeek,timeGridDay,listWeek",
+					},
+					//initialDate: "2020-12-12",
+					navLinks: true, // can click day/week names to navigate views
+					editable: true,
+					selectable: true,
+					dayMaxEvents: true, // allow "more" link when too many events
+					events: {
+						url: "php/get-events.php",
+						failure: function () {
+							document.getElementById("script-warning").style.display = "inline"; // show
+						},
+					},
+					eventClick: function (info) {
+						info.jsEvent.preventDefault(); // don't let the browser navigate
+
+						if (info.event.url) {
+							window.open(info.event.url);
+						}
+					},
+
+					loading: function (bool) {
+						if (bool) {
+							loadingEl.style.display = "inline"; // show
+						} else {
+							loadingEl.style.display = "none"; // hide
+						}
+					},
+
+					eventTimeFormat: { hour: "numeric", minute: "2-digit" },
+
+					dateClick: function (arg) {
+						console.log("dateClick", calendar.formatIso(arg.date));
+					},
+					select: function (arg) {
+						console.log("select", calendar.formatIso(arg.start), calendar.formatIso(arg.end));
+					},
+				});
+
+				calendar.render();
+
+				// load the list of available timezones, build the <select> options
+				// it's HIGHLY recommended to use a different library for network requests, not this internal util func
+				FullCalendar.requestJson(
+					"GET",
+					"php/get-time-zones.php",
+					{},
+					function (timeZones) {
+						timeZones.forEach(function (timeZone) {
+							var optionEl;
+
+							if (timeZone !== "UTC") {
+								// UTC is already in the list
+								optionEl = document.createElement("option");
+								optionEl.value = timeZone;
+								optionEl.innerText = timeZone;
+								timeZoneSelectorEl.appendChild(optionEl);
+							}
+						});
+					},
+					function () {
+						// TODO: handle error
+					}
+				);
+
+				// when the timezone selector changes, dynamically change the calendar option
+				timeZoneSelectorEl.addEventListener("change", function () {
+					calendar.setOption("timeZone", this.value);
+				});
+			});
+		</script>
+		<style>
+			body {
+				margin: 0;
+				padding: 0;
+				font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+				font-size: 14px;
+			}
+
+			#top {
+				background: #eee;
+				border-bottom: 1px solid #ddd;
+				padding: 0 10px;
+				line-height: 40px;
+				font-size: 12px;
+			}
+			.left {
+				float: left;
+			}
+			.right {
+				float: right;
+			}
+			.clear {
+				clear: both;
+			}
+
+			#script-warning,
+			#loading {
+				display: none;
+			}
+			#script-warning {
+				font-weight: bold;
+				color: red;
+			}
+
+			#calendar {
+				max-width: 1100px;
+				margin: 40px auto;
+				padding: 0 10px;
+			}
+
+			.tzo {
+				color: #000;
+			}
+		</style>
+	</head>
+	<body>
+		<div id="top">
+			<div class="left">
+				Timezone:
+				<select id="time-zone-selector">
+					<option value="local" selected>local</option>
+					<option value="UTC">UTC</option>
+				</select>
+			</div>
+
+			<div class="right">
+				<span id="loading">loading...</span>
+				<span id="script-warning"><code>php/get-events.php</code> must be running.</span>
+			</div>
+
+			<div class="clear"></div>
+		</div>
+
+		<div id="calendar"></div>
+	</body>
+</html>

+ 122 - 0
app/calendar/examples/timegrid-sticky-header.html

@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      height: 'auto', // enough to active sticky headers
+      dayMinWidth: 200,
+
+      slotDuration: '00:05:00',
+      initialDate: '2020-09-12',
+      initialView: 'timeGridWeek',
+      nowIndicator: true,
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      selectable: true,
+      selectMirror: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01',
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+    text-align: center;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <p style='margin-bottom: 5em'>
+    Demo for sticky header. Also, the bottom scrollbars stick.
+  </p>
+
+  <div id='calendar'></div>
+
+  <p style='margin-top: 5em'>
+    Cool, right?
+  </p>
+
+</body>
+</html>

+ 107 - 0
app/calendar/examples/timegrid-views-hscroll.html

@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      dayMinWidth: 200,
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      initialDate: '2020-09-12',
+      initialView: 'timeGridWeek',
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01',
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 109 - 0
app/calendar/examples/timegrid-views.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      initialDate: '2020-09-12',
+      initialView: 'timeGridWeek',
+      nowIndicator: true,
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      navLinks: true, // can click day/week names to navigate views
+      editable: true,
+      selectable: true,
+      selectMirror: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01',
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 111 - 0
app/calendar/examples/week-numbers.html

@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<link href='../lib/main.css' rel='stylesheet' />
+<script src='../lib/main.js'></script>
+<script>
+
+  document.addEventListener('DOMContentLoaded', function() {
+    var calendarEl = document.getElementById('calendar');
+
+    var calendar = new FullCalendar.Calendar(calendarEl, {
+      headerToolbar: {
+        left: 'prev,next today',
+        center: 'title',
+        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+      },
+      initialDate: '2020-09-12',
+      navLinks: true, // can click day/week names to navigate views
+      nowIndicator: true,
+
+      weekNumbers: true,
+      weekNumberCalculation: 'ISO',
+
+      editable: true,
+      selectable: true,
+      dayMaxEvents: true, // allow "more" link when too many events
+      events: [
+        {
+          title: 'All Day Event',
+          start: '2020-09-01'
+        },
+        {
+          title: 'Long Event',
+          start: '2020-09-07',
+          end: '2020-09-10'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-09T16:00:00'
+        },
+        {
+          groupId: 999,
+          title: 'Repeating Event',
+          start: '2020-09-16T16:00:00'
+        },
+        {
+          title: 'Conference',
+          start: '2020-09-11',
+          end: '2020-09-13'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T10:30:00',
+          end: '2020-09-12T12:30:00'
+        },
+        {
+          title: 'Lunch',
+          start: '2020-09-12T12:00:00'
+        },
+        {
+          title: 'Meeting',
+          start: '2020-09-12T14:30:00'
+        },
+        {
+          title: 'Happy Hour',
+          start: '2020-09-12T17:30:00'
+        },
+        {
+          title: 'Dinner',
+          start: '2020-09-12T20:00:00'
+        },
+        {
+          title: 'Birthday Party',
+          start: '2020-09-13T07:00:00'
+        },
+        {
+          title: 'Click for Google',
+          url: 'http://google.com/',
+          start: '2020-09-28'
+        }
+      ]
+    });
+
+    calendar.render();
+  });
+
+</script>
+<style>
+
+  body {
+    margin: 40px 10px;
+    padding: 0;
+    font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+    font-size: 14px;
+  }
+
+  #calendar {
+    max-width: 1100px;
+    margin: 0 auto;
+  }
+
+</style>
+</head>
+<body>
+
+  <div id='calendar'></div>
+
+</body>
+</html>

+ 1425 - 0
app/calendar/lib/locales-all.js

@@ -0,0 +1,1425 @@
+[].push.apply(FullCalendar.globalLocales, function () {
+  'use strict';
+
+  var l0 = {
+    code: 'af',
+    week: {
+      dow: 1, // Maandag is die eerste dag van die week.
+      doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+    },
+    buttonText: {
+      prev: 'Vorige',
+      next: 'Volgende',
+      today: 'Vandag',
+      year: 'Jaar',
+      month: 'Maand',
+      week: 'Week',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    allDayText: 'Heeldag',
+    moreLinkText: 'Addisionele',
+    noEventsText: 'Daar is geen gebeurtenisse nie',
+  };
+
+  var l1 = {
+    code: 'ar-dz',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 4, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l2 = {
+    code: 'ar-kw',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l3 = {
+    code: 'ar-ly',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l4 = {
+    code: 'ar-ma',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l5 = {
+    code: 'ar-sa',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 6, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l6 = {
+    code: 'ar-tn',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l7 = {
+    code: 'ar',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  var l8 = {
+    code: 'az',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Əvvəl',
+      next: 'Sonra',
+      today: 'Bu Gün',
+      month: 'Ay',
+      week: 'Həftə',
+      day: 'Gün',
+      list: 'Gündəm',
+    },
+    weekText: 'Həftə',
+    allDayText: 'Bütün Gün',
+    moreLinkText(n) {
+      return '+ daha çox ' + n
+    },
+    noEventsText: 'Göstərmək üçün hadisə yoxdur',
+  };
+
+  var l9 = {
+    code: 'bg',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'назад',
+      next: 'напред',
+      today: 'днес',
+      month: 'Месец',
+      week: 'Седмица',
+      day: 'Ден',
+      list: 'График',
+    },
+    allDayText: 'Цял ден',
+    moreLinkText(n) {
+      return '+още ' + n
+    },
+    noEventsText: 'Няма събития за показване',
+  };
+
+  var l10 = {
+    code: 'bs',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prošli',
+      next: 'Sljedeći',
+      today: 'Danas',
+      month: 'Mjesec',
+      week: 'Sedmica',
+      day: 'Dan',
+      list: 'Raspored',
+    },
+    weekText: 'Sed',
+    allDayText: 'Cijeli dan',
+    moreLinkText(n) {
+      return '+ još ' + n
+    },
+    noEventsText: 'Nema događaja za prikazivanje',
+  };
+
+  var l11 = {
+    code: 'ca',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Anterior',
+      next: 'Següent',
+      today: 'Avui',
+      month: 'Mes',
+      week: 'Setmana',
+      day: 'Dia',
+      list: 'Agenda',
+    },
+    weekText: 'Set',
+    allDayText: 'Tot el dia',
+    moreLinkText: 'més',
+    noEventsText: 'No hi ha esdeveniments per mostrar',
+  };
+
+  var l12 = {
+    code: 'cs',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Dříve',
+      next: 'Později',
+      today: 'Nyní',
+      month: 'Měsíc',
+      week: 'Týden',
+      day: 'Den',
+      list: 'Agenda',
+    },
+    weekText: 'Týd',
+    allDayText: 'Celý den',
+    moreLinkText(n) {
+      return '+další: ' + n
+    },
+    noEventsText: 'Žádné akce k zobrazení',
+  };
+
+  var l13 = {
+    code: 'da',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Forrige',
+      next: 'Næste',
+      today: 'I dag',
+      month: 'Måned',
+      week: 'Uge',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    weekText: 'Uge',
+    allDayText: 'Hele dagen',
+    moreLinkText: 'flere',
+    noEventsText: 'Ingen arrangementer at vise',
+  };
+
+  var l14 = {
+    code: 'de',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Zurück',
+      next: 'Vor',
+      today: 'Heute',
+      year: 'Jahr',
+      month: 'Monat',
+      week: 'Woche',
+      day: 'Tag',
+      list: 'Terminübersicht',
+    },
+    weekText: 'KW',
+    allDayText: 'Ganztägig',
+    moreLinkText(n) {
+      return '+ weitere ' + n
+    },
+    noEventsText: 'Keine Ereignisse anzuzeigen',
+  };
+
+  var l15 = {
+    code: 'el',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Προηγούμενος',
+      next: 'Επόμενος',
+      today: 'Σήμερα',
+      month: 'Μήνας',
+      week: 'Εβδομάδα',
+      day: 'Ημέρα',
+      list: 'Ατζέντα',
+    },
+    weekText: 'Εβδ',
+    allDayText: 'Ολοήμερο',
+    moreLinkText: 'περισσότερα',
+    noEventsText: 'Δεν υπάρχουν γεγονότα προς εμφάνιση',
+  };
+
+  var l16 = {
+    code: 'en-au',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+  };
+
+  var l17 = {
+    code: 'en-gb',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+  };
+
+  var l18 = {
+    code: 'en-nz',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+  };
+
+  var l19 = {
+    code: 'es',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 6, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Ant',
+      next: 'Sig',
+      today: 'Hoy',
+      month: 'Mes',
+      week: 'Semana',
+      day: 'Día',
+      list: 'Agenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Todo el día',
+    moreLinkText: 'más',
+    noEventsText: 'No hay eventos para mostrar',
+  };
+
+  var l20 = {
+    code: 'es',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Ant',
+      next: 'Sig',
+      today: 'Hoy',
+      month: 'Mes',
+      week: 'Semana',
+      day: 'Día',
+      list: 'Agenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Todo el día',
+    moreLinkText: 'más',
+    noEventsText: 'No hay eventos para mostrar',
+  };
+
+  var l21 = {
+    code: 'et',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Eelnev',
+      next: 'Järgnev',
+      today: 'Täna',
+      month: 'Kuu',
+      week: 'Nädal',
+      day: 'Päev',
+      list: 'Päevakord',
+    },
+    weekText: 'näd',
+    allDayText: 'Kogu päev',
+    moreLinkText(n) {
+      return '+ veel ' + n
+    },
+    noEventsText: 'Kuvamiseks puuduvad sündmused',
+  };
+
+  var l22 = {
+    code: 'eu',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Aur',
+      next: 'Hur',
+      today: 'Gaur',
+      month: 'Hilabetea',
+      week: 'Astea',
+      day: 'Eguna',
+      list: 'Agenda',
+    },
+    weekText: 'As',
+    allDayText: 'Egun osoa',
+    moreLinkText: 'gehiago',
+    noEventsText: 'Ez dago ekitaldirik erakusteko',
+  };
+
+  var l23 = {
+    code: 'fa',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'قبلی',
+      next: 'بعدی',
+      today: 'امروز',
+      month: 'ماه',
+      week: 'هفته',
+      day: 'روز',
+      list: 'برنامه',
+    },
+    weekText: 'هف',
+    allDayText: 'تمام روز',
+    moreLinkText(n) {
+      return 'بیش از ' + n
+    },
+    noEventsText: 'هیچ رویدادی به نمایش',
+  };
+
+  var l24 = {
+    code: 'fi',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Edellinen',
+      next: 'Seuraava',
+      today: 'Tänään',
+      month: 'Kuukausi',
+      week: 'Viikko',
+      day: 'Päivä',
+      list: 'Tapahtumat',
+    },
+    weekText: 'Vk',
+    allDayText: 'Koko päivä',
+    moreLinkText: 'lisää',
+    noEventsText: 'Ei näytettäviä tapahtumia',
+  };
+
+  var l25 = {
+    code: 'fr',
+    buttonText: {
+      prev: 'Précédent',
+      next: 'Suivant',
+      today: "Aujourd'hui",
+      year: 'Année',
+      month: 'Mois',
+      week: 'Semaine',
+      day: 'Jour',
+      list: 'Mon planning',
+    },
+    weekText: 'Sem.',
+    allDayText: 'Toute la journée',
+    moreLinkText: 'en plus',
+    noEventsText: 'Aucun événement à afficher',
+  };
+
+  var l26 = {
+    code: 'fr-ch',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Précédent',
+      next: 'Suivant',
+      today: 'Courant',
+      year: 'Année',
+      month: 'Mois',
+      week: 'Semaine',
+      day: 'Jour',
+      list: 'Mon planning',
+    },
+    weekText: 'Sm',
+    allDayText: 'Toute la journée',
+    moreLinkText: 'en plus',
+    noEventsText: 'Aucun événement à afficher',
+  };
+
+  var l27 = {
+    code: 'fr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Précédent',
+      next: 'Suivant',
+      today: "Aujourd'hui",
+      year: 'Année',
+      month: 'Mois',
+      week: 'Semaine',
+      day: 'Jour',
+      list: 'Planning',
+    },
+    weekText: 'Sem.',
+    allDayText: 'Toute la journée',
+    moreLinkText: 'en plus',
+    noEventsText: 'Aucun événement à afficher',
+  };
+
+  var l28 = {
+    code: 'gl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Ant',
+      next: 'Seg',
+      today: 'Hoxe',
+      month: 'Mes',
+      week: 'Semana',
+      day: 'Día',
+      list: 'Axenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Todo o día',
+    moreLinkText: 'máis',
+    noEventsText: 'Non hai eventos para amosar',
+  };
+
+  var l29 = {
+    code: 'he',
+    direction: 'rtl',
+    buttonText: {
+      prev: 'הקודם',
+      next: 'הבא',
+      today: 'היום',
+      month: 'חודש',
+      week: 'שבוע',
+      day: 'יום',
+      list: 'סדר יום',
+    },
+    allDayText: 'כל היום',
+    moreLinkText: 'אחר',
+    noEventsText: 'אין אירועים להצגה',
+    weekText: 'שבוע',
+  };
+
+  var l30 = {
+    code: 'hi',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 6, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'पिछला',
+      next: 'अगला',
+      today: 'आज',
+      month: 'महीना',
+      week: 'सप्ताह',
+      day: 'दिन',
+      list: 'कार्यसूची',
+    },
+    weekText: 'हफ्ता',
+    allDayText: 'सभी दिन',
+    moreLinkText(n) {
+      return '+अधिक ' + n
+    },
+    noEventsText: 'कोई घटनाओं को प्रदर्शित करने के लिए',
+  };
+
+  var l31 = {
+    code: 'hr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prijašnji',
+      next: 'Sljedeći',
+      today: 'Danas',
+      month: 'Mjesec',
+      week: 'Tjedan',
+      day: 'Dan',
+      list: 'Raspored',
+    },
+    weekText: 'Tje',
+    allDayText: 'Cijeli dan',
+    moreLinkText(n) {
+      return '+ još ' + n
+    },
+    noEventsText: 'Nema događaja za prikaz',
+  };
+
+  var l32 = {
+    code: 'hu',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'vissza',
+      next: 'előre',
+      today: 'ma',
+      month: 'Hónap',
+      week: 'Hét',
+      day: 'Nap',
+      list: 'Napló',
+    },
+    weekText: 'Hét',
+    allDayText: 'Egész nap',
+    moreLinkText: 'további',
+    noEventsText: 'Nincs megjeleníthető esemény',
+  };
+
+  var l33 = {
+    code: 'id',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'mundur',
+      next: 'maju',
+      today: 'hari ini',
+      month: 'Bulan',
+      week: 'Minggu',
+      day: 'Hari',
+      list: 'Agenda',
+    },
+    weekText: 'Mg',
+    allDayText: 'Sehari penuh',
+    moreLinkText: 'lebih',
+    noEventsText: 'Tidak ada acara untuk ditampilkan',
+  };
+
+  var l34 = {
+    code: 'is',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Fyrri',
+      next: 'Næsti',
+      today: 'Í dag',
+      month: 'Mánuður',
+      week: 'Vika',
+      day: 'Dagur',
+      list: 'Dagskrá',
+    },
+    weekText: 'Vika',
+    allDayText: 'Allan daginn',
+    moreLinkText: 'meira',
+    noEventsText: 'Engir viðburðir til að sýna',
+  };
+
+  var l35 = {
+    code: 'it',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prec',
+      next: 'Succ',
+      today: 'Oggi',
+      month: 'Mese',
+      week: 'Settimana',
+      day: 'Giorno',
+      list: 'Agenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Tutto il giorno',
+    moreLinkText(n) {
+      return '+altri ' + n
+    },
+    noEventsText: 'Non ci sono eventi da visualizzare',
+  };
+
+  var l36 = {
+    code: 'ja',
+    buttonText: {
+      prev: '前',
+      next: '次',
+      today: '今日',
+      month: '月',
+      week: '週',
+      day: '日',
+      list: '予定リスト',
+    },
+    weekText: '週',
+    allDayText: '終日',
+    moreLinkText(n) {
+      return '他 ' + n + ' 件'
+    },
+    noEventsText: '表示する予定はありません',
+  };
+
+  var l37 = {
+    code: 'ka',
+    week: {
+      dow: 1,
+      doy: 7,
+    },
+    buttonText: {
+      prev: 'წინა',
+      next: 'შემდეგი',
+      today: 'დღეს',
+      month: 'თვე',
+      week: 'კვირა',
+      day: 'დღე',
+      list: 'დღის წესრიგი',
+    },
+    weekText: 'კვ',
+    allDayText: 'მთელი დღე',
+    moreLinkText(n) {
+      return '+ კიდევ ' + n
+    },
+    noEventsText: 'ღონისძიებები არ არის',
+  };
+
+  var l38 = {
+    code: 'kk',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Алдыңғы',
+      next: 'Келесі',
+      today: 'Бүгін',
+      month: 'Ай',
+      week: 'Апта',
+      day: 'Күн',
+      list: 'Күн тәртібі',
+    },
+    weekText: 'Не',
+    allDayText: 'Күні бойы',
+    moreLinkText(n) {
+      return '+ тағы ' + n
+    },
+    noEventsText: 'Көрсету үшін оқиғалар жоқ',
+  };
+
+  var l39 = {
+    code: 'ko',
+    buttonText: {
+      prev: '이전달',
+      next: '다음달',
+      today: '오늘',
+      month: '월',
+      week: '주',
+      day: '일',
+      list: '일정목록',
+    },
+    weekText: '주',
+    allDayText: '종일',
+    moreLinkText: '개',
+    noEventsText: '일정이 없습니다',
+  };
+
+  var l40 = {
+    code: 'lb',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Zréck',
+      next: 'Weider',
+      today: 'Haut',
+      month: 'Mount',
+      week: 'Woch',
+      day: 'Dag',
+      list: 'Terminiwwersiicht',
+    },
+    weekText: 'W',
+    allDayText: 'Ganzen Dag',
+    moreLinkText: 'méi',
+    noEventsText: 'Nee Evenementer ze affichéieren',
+  };
+
+  var l41 = {
+    code: 'lt',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Atgal',
+      next: 'Pirmyn',
+      today: 'Šiandien',
+      month: 'Mėnuo',
+      week: 'Savaitė',
+      day: 'Diena',
+      list: 'Darbotvarkė',
+    },
+    weekText: 'SAV',
+    allDayText: 'Visą dieną',
+    moreLinkText: 'daugiau',
+    noEventsText: 'Nėra įvykių rodyti',
+  };
+
+  var l42 = {
+    code: 'lv',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Iepr.',
+      next: 'Nāk.',
+      today: 'Šodien',
+      month: 'Mēnesis',
+      week: 'Nedēļa',
+      day: 'Diena',
+      list: 'Dienas kārtība',
+    },
+    weekText: 'Ned.',
+    allDayText: 'Visu dienu',
+    moreLinkText(n) {
+      return '+vēl ' + n
+    },
+    noEventsText: 'Nav notikumu',
+  };
+
+  var l43 = {
+    code: 'mk',
+    buttonText: {
+      prev: 'претходно',
+      next: 'следно',
+      today: 'Денес',
+      month: 'Месец',
+      week: 'Недела',
+      day: 'Ден',
+      list: 'График',
+    },
+    weekText: 'Сед',
+    allDayText: 'Цел ден',
+    moreLinkText(n) {
+      return '+повеќе ' + n
+    },
+    noEventsText: 'Нема настани за прикажување',
+  };
+
+  var l44 = {
+    code: 'ms',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Sebelum',
+      next: 'Selepas',
+      today: 'hari ini',
+      month: 'Bulan',
+      week: 'Minggu',
+      day: 'Hari',
+      list: 'Agenda',
+    },
+    weekText: 'Mg',
+    allDayText: 'Sepanjang hari',
+    moreLinkText(n) {
+      return 'masih ada ' + n + ' acara'
+    },
+    noEventsText: 'Tiada peristiwa untuk dipaparkan',
+  };
+
+  var l45 = {
+    code: 'nb',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Forrige',
+      next: 'Neste',
+      today: 'I dag',
+      month: 'Måned',
+      week: 'Uke',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    weekText: 'Uke',
+    allDayText: 'Hele dagen',
+    moreLinkText: 'til',
+    noEventsText: 'Ingen hendelser å vise',
+  };
+
+  var l46 = {
+    code: 'ne', // code for nepal
+    week: {
+      dow: 7, // Sunday is the first day of the week.
+      doy: 1, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'अघिल्लो',
+      next: 'अर्को',
+      today: 'आज',
+      month: 'महिना',
+      week: 'हप्ता',
+      day: 'दिन',
+      list: 'सूची',
+    },
+    weekText: 'हप्ता',
+    allDayText: 'दिनभरि',
+    moreLinkText: 'थप लिंक',
+    noEventsText: 'देखाउनको लागि कुनै घटनाहरू छैनन्',
+  };
+
+  var l47 = {
+    code: 'nl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Voorgaand',
+      next: 'Volgende',
+      today: 'Vandaag',
+      year: 'Jaar',
+      month: 'Maand',
+      week: 'Week',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    allDayText: 'Hele dag',
+    moreLinkText: 'extra',
+    noEventsText: 'Geen evenementen om te laten zien',
+  };
+
+  var l48 = {
+    code: 'nn',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Førre',
+      next: 'Neste',
+      today: 'I dag',
+      month: 'Månad',
+      week: 'Veke',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    weekText: 'Veke',
+    allDayText: 'Heile dagen',
+    moreLinkText: 'til',
+    noEventsText: 'Ingen hendelser å vise',
+  };
+
+  var l49 = {
+    code: 'pl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Poprzedni',
+      next: 'Następny',
+      today: 'Dziś',
+      month: 'Miesiąc',
+      week: 'Tydzień',
+      day: 'Dzień',
+      list: 'Plan dnia',
+    },
+    weekText: 'Tydz',
+    allDayText: 'Cały dzień',
+    moreLinkText: 'więcej',
+    noEventsText: 'Brak wydarzeń do wyświetlenia',
+  };
+
+  var l50 = {
+    code: 'pt-br',
+    buttonText: {
+      prev: 'Anterior',
+      next: 'Próximo',
+      today: 'Hoje',
+      month: 'Mês',
+      week: 'Semana',
+      day: 'Dia',
+      list: 'Lista',
+    },
+    weekText: 'Sm',
+    allDayText: 'dia inteiro',
+    moreLinkText(n) {
+      return 'mais +' + n
+    },
+    noEventsText: 'Não há eventos para mostrar',
+  };
+
+  var l51 = {
+    code: 'pt',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Anterior',
+      next: 'Seguinte',
+      today: 'Hoje',
+      month: 'Mês',
+      week: 'Semana',
+      day: 'Dia',
+      list: 'Agenda',
+    },
+    weekText: 'Sem',
+    allDayText: 'Todo o dia',
+    moreLinkText: 'mais',
+    noEventsText: 'Não há eventos para mostrar',
+  };
+
+  var l52 = {
+    code: 'ro',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'precedentă',
+      next: 'următoare',
+      today: 'Azi',
+      month: 'Lună',
+      week: 'Săptămână',
+      day: 'Zi',
+      list: 'Agendă',
+    },
+    weekText: 'Săpt',
+    allDayText: 'Toată ziua',
+    moreLinkText(n) {
+      return '+alte ' + n
+    },
+    noEventsText: 'Nu există evenimente de afișat',
+  };
+
+  var l53 = {
+    code: 'ru',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Пред',
+      next: 'След',
+      today: 'Сегодня',
+      month: 'Месяц',
+      week: 'Неделя',
+      day: 'День',
+      list: 'Повестка дня',
+    },
+    weekText: 'Нед',
+    allDayText: 'Весь день',
+    moreLinkText(n) {
+      return '+ ещё ' + n
+    },
+    noEventsText: 'Нет событий для отображения',
+  };
+
+  var l54 = {
+    code: 'sk',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Predchádzajúci',
+      next: 'Nasledujúci',
+      today: 'Dnes',
+      month: 'Mesiac',
+      week: 'Týždeň',
+      day: 'Deň',
+      list: 'Rozvrh',
+    },
+    weekText: 'Ty',
+    allDayText: 'Celý deň',
+    moreLinkText(n) {
+      return '+ďalšie: ' + n
+    },
+    noEventsText: 'Žiadne akcie na zobrazenie',
+  };
+
+  var l55 = {
+    code: 'sl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prejšnji',
+      next: 'Naslednji',
+      today: 'Trenutni',
+      month: 'Mesec',
+      week: 'Teden',
+      day: 'Dan',
+      list: 'Dnevni red',
+    },
+    weekText: 'Teden',
+    allDayText: 'Ves dan',
+    moreLinkText: 'več',
+    noEventsText: 'Ni dogodkov za prikaz',
+  };
+
+  var l56 = {
+    code: 'sq',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'mbrapa',
+      next: 'Përpara',
+      today: 'sot',
+      month: 'Muaj',
+      week: 'Javë',
+      day: 'Ditë',
+      list: 'Listë',
+    },
+    weekText: 'Ja',
+    allDayText: 'Gjithë ditën',
+    moreLinkText(n) {
+      return '+më tepër ' + n
+    },
+    noEventsText: 'Nuk ka evente për të shfaqur',
+  };
+
+  var l57 = {
+    code: 'sr-cyrl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Претходна',
+      next: 'следећи',
+      today: 'Данас',
+      month: 'Месец',
+      week: 'Недеља',
+      day: 'Дан',
+      list: 'Планер',
+    },
+    weekText: 'Сед',
+    allDayText: 'Цео дан',
+    moreLinkText(n) {
+      return '+ још ' + n
+    },
+    noEventsText: 'Нема догађаја за приказ',
+  };
+
+  var l58 = {
+    code: 'sr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prethodna',
+      next: 'Sledeći',
+      today: 'Danas',
+      month: 'Mеsеc',
+      week: 'Nеdеlja',
+      day: 'Dan',
+      list: 'Planеr',
+    },
+    weekText: 'Sed',
+    allDayText: 'Cеo dan',
+    moreLinkText(n) {
+      return '+ još ' + n
+    },
+    noEventsText: 'Nеma događaja za prikaz',
+  };
+
+  var l59 = {
+    code: 'sv',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Förra',
+      next: 'Nästa',
+      today: 'Idag',
+      month: 'Månad',
+      week: 'Vecka',
+      day: 'Dag',
+      list: 'Program',
+    },
+    weekText: 'v.',
+    allDayText: 'Heldag',
+    moreLinkText: 'till',
+    noEventsText: 'Inga händelser att visa',
+  };
+
+  var l60 = {
+    code: 'th',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'ก่อนหน้า',
+      next: 'ถัดไป',
+      prevYear: 'ปีก่อนหน้า',
+      nextYear: 'ปีถัดไป',
+      year: 'ปี',
+      today: 'วันนี้',
+      month: 'เดือน',
+      week: 'สัปดาห์',
+      day: 'วัน',
+      list: 'กำหนดการ',
+    },
+    weekText: 'สัปดาห์',
+    allDayText: 'ตลอดวัน',
+    moreLinkText: 'เพิ่มเติม',
+    noEventsText: 'ไม่มีกิจกรรมที่จะแสดง',
+  };
+
+  var l61 = {
+    code: 'tr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'geri',
+      next: 'ileri',
+      today: 'bugün',
+      month: 'Ay',
+      week: 'Hafta',
+      day: 'Gün',
+      list: 'Ajanda',
+    },
+    weekText: 'Hf',
+    allDayText: 'Tüm gün',
+    moreLinkText: 'daha fazla',
+    noEventsText: 'Gösterilecek etkinlik yok',
+  };
+
+  var l62 = {
+    code: 'ug',
+    buttonText: {
+      month: 'ئاي',
+      week: 'ھەپتە',
+      day: 'كۈن',
+      list: 'كۈنتەرتىپ',
+    },
+    allDayText: 'پۈتۈن كۈن',
+  };
+
+  var l63 = {
+    code: 'uk',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Попередній',
+      next: 'далі',
+      today: 'Сьогодні',
+      month: 'Місяць',
+      week: 'Тиждень',
+      day: 'День',
+      list: 'Порядок денний',
+    },
+    weekText: 'Тиж',
+    allDayText: 'Увесь день',
+    moreLinkText(n) {
+      return '+ще ' + n + '...'
+    },
+    noEventsText: 'Немає подій для відображення',
+  };
+
+  var l64 = {
+    code: 'uz',
+    buttonText: {
+      month: 'Oy',
+      week: 'Xafta',
+      day: 'Kun',
+      list: 'Kun tartibi',
+    },
+    allDayText: "Kun bo'yi",
+    moreLinkText(n) {
+      return '+ yana ' + n
+    },
+    noEventsText: "Ko'rsatish uchun voqealar yo'q",
+  };
+
+  var l65 = {
+    code: 'vi',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Trước',
+      next: 'Tiếp',
+      today: 'Hôm nay',
+      month: 'Tháng',
+      week: 'Tuần',
+      day: 'Ngày',
+      list: 'Lịch biểu',
+    },
+    weekText: 'Tu',
+    allDayText: 'Cả ngày',
+    moreLinkText(n) {
+      return '+ thêm ' + n
+    },
+    noEventsText: 'Không có sự kiện để hiển thị',
+  };
+
+  var l66 = {
+    code: 'zh-cn',
+    week: {
+      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: '上月',
+      next: '下月',
+      today: '今天',
+      month: '月',
+      week: '周',
+      day: '日',
+      list: '日程',
+    },
+    weekText: '周',
+    allDayText: '全天',
+    moreLinkText(n) {
+      return '另外 ' + n + ' 个'
+    },
+    noEventsText: '没有事件显示',
+  };
+
+  var l67 = {
+    code: 'zh-tw',
+    buttonText: {
+      prev: '上月',
+      next: '下月',
+      today: '今天',
+      month: '月',
+      week: '週',
+      day: '天',
+      list: '活動列表',
+    },
+    weekText: '周',
+    allDayText: '整天',
+    moreLinkText: '顯示更多',
+    noEventsText: '没有任何活動',
+  };
+
+  /* eslint max-len: off */
+
+  var localesAll = [
+    l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36, l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48, l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60, l61, l62, l63, l64, l65, l66, l67, 
+  ];
+
+  return localesAll;
+
+}());

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
app/calendar/lib/locales-all.min.js


+ 27 - 0
app/calendar/lib/locales/af.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var af = {
+    code: 'af',
+    week: {
+      dow: 1, // Maandag is die eerste dag van die week.
+      doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+    },
+    buttonText: {
+      prev: 'Vorige',
+      next: 'Volgende',
+      today: 'Vandag',
+      year: 'Jaar',
+      month: 'Maand',
+      week: 'Week',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    allDayText: 'Heeldag',
+    moreLinkText: 'Addisionele',
+    noEventsText: 'Daar is geen gebeurtenisse nie',
+  };
+
+  return af;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar-dz.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var arDz = {
+    code: 'ar-dz',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 4, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return arDz;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar-kw.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var arKw = {
+    code: 'ar-kw',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return arKw;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar-ly.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var arLy = {
+    code: 'ar-ly',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return arLy;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar-ma.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var arMa = {
+    code: 'ar-ma',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return arMa;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar-sa.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var arSa = {
+    code: 'ar-sa',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 6, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return arSa;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar-tn.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var arTn = {
+    code: 'ar-tn',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return arTn;
+
+}());

+ 28 - 0
app/calendar/lib/locales/ar.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ar = {
+    code: 'ar',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'السابق',
+      next: 'التالي',
+      today: 'اليوم',
+      month: 'شهر',
+      week: 'أسبوع',
+      day: 'يوم',
+      list: 'أجندة',
+    },
+    weekText: 'أسبوع',
+    allDayText: 'اليوم كله',
+    moreLinkText: 'أخرى',
+    noEventsText: 'أي أحداث لعرض',
+  };
+
+  return ar;
+
+}());

+ 29 - 0
app/calendar/lib/locales/az.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var az = {
+    code: 'az',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Əvvəl',
+      next: 'Sonra',
+      today: 'Bu Gün',
+      month: 'Ay',
+      week: 'Həftə',
+      day: 'Gün',
+      list: 'Gündəm',
+    },
+    weekText: 'Həftə',
+    allDayText: 'Bütün Gün',
+    moreLinkText(n) {
+      return '+ daha çox ' + n
+    },
+    noEventsText: 'Göstərmək üçün hadisə yoxdur',
+  };
+
+  return az;
+
+}());

+ 28 - 0
app/calendar/lib/locales/bg.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var bg = {
+    code: 'bg',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'назад',
+      next: 'напред',
+      today: 'днес',
+      month: 'Месец',
+      week: 'Седмица',
+      day: 'Ден',
+      list: 'График',
+    },
+    allDayText: 'Цял ден',
+    moreLinkText(n) {
+      return '+още ' + n
+    },
+    noEventsText: 'Няма събития за показване',
+  };
+
+  return bg;
+
+}());

+ 29 - 0
app/calendar/lib/locales/bs.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var bs = {
+    code: 'bs',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prošli',
+      next: 'Sljedeći',
+      today: 'Danas',
+      month: 'Mjesec',
+      week: 'Sedmica',
+      day: 'Dan',
+      list: 'Raspored',
+    },
+    weekText: 'Sed',
+    allDayText: 'Cijeli dan',
+    moreLinkText(n) {
+      return '+ još ' + n
+    },
+    noEventsText: 'Nema događaja za prikazivanje',
+  };
+
+  return bs;
+
+}());

+ 27 - 0
app/calendar/lib/locales/ca.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ca = {
+    code: 'ca',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Anterior',
+      next: 'Següent',
+      today: 'Avui',
+      month: 'Mes',
+      week: 'Setmana',
+      day: 'Dia',
+      list: 'Agenda',
+    },
+    weekText: 'Set',
+    allDayText: 'Tot el dia',
+    moreLinkText: 'més',
+    noEventsText: 'No hi ha esdeveniments per mostrar',
+  };
+
+  return ca;
+
+}());

+ 29 - 0
app/calendar/lib/locales/cs.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var cs = {
+    code: 'cs',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Dříve',
+      next: 'Později',
+      today: 'Nyní',
+      month: 'Měsíc',
+      week: 'Týden',
+      day: 'Den',
+      list: 'Agenda',
+    },
+    weekText: 'Týd',
+    allDayText: 'Celý den',
+    moreLinkText(n) {
+      return '+další: ' + n
+    },
+    noEventsText: 'Žádné akce k zobrazení',
+  };
+
+  return cs;
+
+}());

+ 27 - 0
app/calendar/lib/locales/da.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var da = {
+    code: 'da',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Forrige',
+      next: 'Næste',
+      today: 'I dag',
+      month: 'Måned',
+      week: 'Uge',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    weekText: 'Uge',
+    allDayText: 'Hele dagen',
+    moreLinkText: 'flere',
+    noEventsText: 'Ingen arrangementer at vise',
+  };
+
+  return da;
+
+}());

+ 30 - 0
app/calendar/lib/locales/de.js

@@ -0,0 +1,30 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var de = {
+    code: 'de',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Zurück',
+      next: 'Vor',
+      today: 'Heute',
+      year: 'Jahr',
+      month: 'Monat',
+      week: 'Woche',
+      day: 'Tag',
+      list: 'Terminübersicht',
+    },
+    weekText: 'KW',
+    allDayText: 'Ganztägig',
+    moreLinkText(n) {
+      return '+ weitere ' + n
+    },
+    noEventsText: 'Keine Ereignisse anzuzeigen',
+  };
+
+  return de;
+
+}());

+ 27 - 0
app/calendar/lib/locales/el.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var el = {
+    code: 'el',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Προηγούμενος',
+      next: 'Επόμενος',
+      today: 'Σήμερα',
+      month: 'Μήνας',
+      week: 'Εβδομάδα',
+      day: 'Ημέρα',
+      list: 'Ατζέντα',
+    },
+    weekText: 'Εβδ',
+    allDayText: 'Ολοήμερο',
+    moreLinkText: 'περισσότερα',
+    noEventsText: 'Δεν υπάρχουν γεγονότα προς εμφάνιση',
+  };
+
+  return el;
+
+}());

+ 14 - 0
app/calendar/lib/locales/en-au.js

@@ -0,0 +1,14 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var enAu = {
+    code: 'en-au',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+  };
+
+  return enAu;
+
+}());

+ 14 - 0
app/calendar/lib/locales/en-gb.js

@@ -0,0 +1,14 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var enGb = {
+    code: 'en-gb',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+  };
+
+  return enGb;
+
+}());

+ 14 - 0
app/calendar/lib/locales/en-nz.js

@@ -0,0 +1,14 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var enNz = {
+    code: 'en-nz',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+  };
+
+  return enNz;
+
+}());

+ 27 - 0
app/calendar/lib/locales/es-us.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var esUs = {
+    code: 'es',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 6, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Ant',
+      next: 'Sig',
+      today: 'Hoy',
+      month: 'Mes',
+      week: 'Semana',
+      day: 'Día',
+      list: 'Agenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Todo el día',
+    moreLinkText: 'más',
+    noEventsText: 'No hay eventos para mostrar',
+  };
+
+  return esUs;
+
+}());

+ 27 - 0
app/calendar/lib/locales/es.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var es = {
+    code: 'es',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Ant',
+      next: 'Sig',
+      today: 'Hoy',
+      month: 'Mes',
+      week: 'Semana',
+      day: 'Día',
+      list: 'Agenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Todo el día',
+    moreLinkText: 'más',
+    noEventsText: 'No hay eventos para mostrar',
+  };
+
+  return es;
+
+}());

+ 29 - 0
app/calendar/lib/locales/et.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var et = {
+    code: 'et',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Eelnev',
+      next: 'Järgnev',
+      today: 'Täna',
+      month: 'Kuu',
+      week: 'Nädal',
+      day: 'Päev',
+      list: 'Päevakord',
+    },
+    weekText: 'näd',
+    allDayText: 'Kogu päev',
+    moreLinkText(n) {
+      return '+ veel ' + n
+    },
+    noEventsText: 'Kuvamiseks puuduvad sündmused',
+  };
+
+  return et;
+
+}());

+ 27 - 0
app/calendar/lib/locales/eu.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var eu = {
+    code: 'eu',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Aur',
+      next: 'Hur',
+      today: 'Gaur',
+      month: 'Hilabetea',
+      week: 'Astea',
+      day: 'Eguna',
+      list: 'Agenda',
+    },
+    weekText: 'As',
+    allDayText: 'Egun osoa',
+    moreLinkText: 'gehiago',
+    noEventsText: 'Ez dago ekitaldirik erakusteko',
+  };
+
+  return eu;
+
+}());

+ 30 - 0
app/calendar/lib/locales/fa.js

@@ -0,0 +1,30 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var fa = {
+    code: 'fa',
+    week: {
+      dow: 6, // Saturday is the first day of the week.
+      doy: 12, // The week that contains Jan 1st is the first week of the year.
+    },
+    direction: 'rtl',
+    buttonText: {
+      prev: 'قبلی',
+      next: 'بعدی',
+      today: 'امروز',
+      month: 'ماه',
+      week: 'هفته',
+      day: 'روز',
+      list: 'برنامه',
+    },
+    weekText: 'هف',
+    allDayText: 'تمام روز',
+    moreLinkText(n) {
+      return 'بیش از ' + n
+    },
+    noEventsText: 'هیچ رویدادی به نمایش',
+  };
+
+  return fa;
+
+}());

+ 27 - 0
app/calendar/lib/locales/fi.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var fi = {
+    code: 'fi',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Edellinen',
+      next: 'Seuraava',
+      today: 'Tänään',
+      month: 'Kuukausi',
+      week: 'Viikko',
+      day: 'Päivä',
+      list: 'Tapahtumat',
+    },
+    weekText: 'Vk',
+    allDayText: 'Koko päivä',
+    moreLinkText: 'lisää',
+    noEventsText: 'Ei näytettäviä tapahtumia',
+  };
+
+  return fi;
+
+}());

+ 24 - 0
app/calendar/lib/locales/fr-ca.js

@@ -0,0 +1,24 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var frCa = {
+    code: 'fr',
+    buttonText: {
+      prev: 'Précédent',
+      next: 'Suivant',
+      today: "Aujourd'hui",
+      year: 'Année',
+      month: 'Mois',
+      week: 'Semaine',
+      day: 'Jour',
+      list: 'Mon planning',
+    },
+    weekText: 'Sem.',
+    allDayText: 'Toute la journée',
+    moreLinkText: 'en plus',
+    noEventsText: 'Aucun événement à afficher',
+  };
+
+  return frCa;
+
+}());

+ 28 - 0
app/calendar/lib/locales/fr-ch.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var frCh = {
+    code: 'fr-ch',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Précédent',
+      next: 'Suivant',
+      today: 'Courant',
+      year: 'Année',
+      month: 'Mois',
+      week: 'Semaine',
+      day: 'Jour',
+      list: 'Mon planning',
+    },
+    weekText: 'Sm',
+    allDayText: 'Toute la journée',
+    moreLinkText: 'en plus',
+    noEventsText: 'Aucun événement à afficher',
+  };
+
+  return frCh;
+
+}());

+ 28 - 0
app/calendar/lib/locales/fr.js

@@ -0,0 +1,28 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var fr = {
+    code: 'fr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Précédent',
+      next: 'Suivant',
+      today: "Aujourd'hui",
+      year: 'Année',
+      month: 'Mois',
+      week: 'Semaine',
+      day: 'Jour',
+      list: 'Planning',
+    },
+    weekText: 'Sem.',
+    allDayText: 'Toute la journée',
+    moreLinkText: 'en plus',
+    noEventsText: 'Aucun événement à afficher',
+  };
+
+  return fr;
+
+}());

+ 27 - 0
app/calendar/lib/locales/gl.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var gl = {
+    code: 'gl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Ant',
+      next: 'Seg',
+      today: 'Hoxe',
+      month: 'Mes',
+      week: 'Semana',
+      day: 'Día',
+      list: 'Axenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Todo o día',
+    moreLinkText: 'máis',
+    noEventsText: 'Non hai eventos para amosar',
+  };
+
+  return gl;
+
+}());

+ 24 - 0
app/calendar/lib/locales/he.js

@@ -0,0 +1,24 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var he = {
+    code: 'he',
+    direction: 'rtl',
+    buttonText: {
+      prev: 'הקודם',
+      next: 'הבא',
+      today: 'היום',
+      month: 'חודש',
+      week: 'שבוע',
+      day: 'יום',
+      list: 'סדר יום',
+    },
+    allDayText: 'כל היום',
+    moreLinkText: 'אחר',
+    noEventsText: 'אין אירועים להצגה',
+    weekText: 'שבוע',
+  };
+
+  return he;
+
+}());

+ 29 - 0
app/calendar/lib/locales/hi.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var hi = {
+    code: 'hi',
+    week: {
+      dow: 0, // Sunday is the first day of the week.
+      doy: 6, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'पिछला',
+      next: 'अगला',
+      today: 'आज',
+      month: 'महीना',
+      week: 'सप्ताह',
+      day: 'दिन',
+      list: 'कार्यसूची',
+    },
+    weekText: 'हफ्ता',
+    allDayText: 'सभी दिन',
+    moreLinkText(n) {
+      return '+अधिक ' + n
+    },
+    noEventsText: 'कोई घटनाओं को प्रदर्शित करने के लिए',
+  };
+
+  return hi;
+
+}());

+ 29 - 0
app/calendar/lib/locales/hr.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var hr = {
+    code: 'hr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prijašnji',
+      next: 'Sljedeći',
+      today: 'Danas',
+      month: 'Mjesec',
+      week: 'Tjedan',
+      day: 'Dan',
+      list: 'Raspored',
+    },
+    weekText: 'Tje',
+    allDayText: 'Cijeli dan',
+    moreLinkText(n) {
+      return '+ još ' + n
+    },
+    noEventsText: 'Nema događaja za prikaz',
+  };
+
+  return hr;
+
+}());

+ 27 - 0
app/calendar/lib/locales/hu.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var hu = {
+    code: 'hu',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'vissza',
+      next: 'előre',
+      today: 'ma',
+      month: 'Hónap',
+      week: 'Hét',
+      day: 'Nap',
+      list: 'Napló',
+    },
+    weekText: 'Hét',
+    allDayText: 'Egész nap',
+    moreLinkText: 'további',
+    noEventsText: 'Nincs megjeleníthető esemény',
+  };
+
+  return hu;
+
+}());

+ 27 - 0
app/calendar/lib/locales/id.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var id = {
+    code: 'id',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'mundur',
+      next: 'maju',
+      today: 'hari ini',
+      month: 'Bulan',
+      week: 'Minggu',
+      day: 'Hari',
+      list: 'Agenda',
+    },
+    weekText: 'Mg',
+    allDayText: 'Sehari penuh',
+    moreLinkText: 'lebih',
+    noEventsText: 'Tidak ada acara untuk ditampilkan',
+  };
+
+  return id;
+
+}());

+ 27 - 0
app/calendar/lib/locales/is.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var is = {
+    code: 'is',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Fyrri',
+      next: 'Næsti',
+      today: 'Í dag',
+      month: 'Mánuður',
+      week: 'Vika',
+      day: 'Dagur',
+      list: 'Dagskrá',
+    },
+    weekText: 'Vika',
+    allDayText: 'Allan daginn',
+    moreLinkText: 'meira',
+    noEventsText: 'Engir viðburðir til að sýna',
+  };
+
+  return is;
+
+}());

+ 29 - 0
app/calendar/lib/locales/it.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var it = {
+    code: 'it',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prec',
+      next: 'Succ',
+      today: 'Oggi',
+      month: 'Mese',
+      week: 'Settimana',
+      day: 'Giorno',
+      list: 'Agenda',
+    },
+    weekText: 'Sm',
+    allDayText: 'Tutto il giorno',
+    moreLinkText(n) {
+      return '+altri ' + n
+    },
+    noEventsText: 'Non ci sono eventi da visualizzare',
+  };
+
+  return it;
+
+}());

+ 25 - 0
app/calendar/lib/locales/ja.js

@@ -0,0 +1,25 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ja = {
+    code: 'ja',
+    buttonText: {
+      prev: '前',
+      next: '次',
+      today: '今日',
+      month: '月',
+      week: '週',
+      day: '日',
+      list: '予定リスト',
+    },
+    weekText: '週',
+    allDayText: '終日',
+    moreLinkText(n) {
+      return '他 ' + n + ' 件'
+    },
+    noEventsText: '表示する予定はありません',
+  };
+
+  return ja;
+
+}());

+ 29 - 0
app/calendar/lib/locales/ka.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ka = {
+    code: 'ka',
+    week: {
+      dow: 1,
+      doy: 7,
+    },
+    buttonText: {
+      prev: 'წინა',
+      next: 'შემდეგი',
+      today: 'დღეს',
+      month: 'თვე',
+      week: 'კვირა',
+      day: 'დღე',
+      list: 'დღის წესრიგი',
+    },
+    weekText: 'კვ',
+    allDayText: 'მთელი დღე',
+    moreLinkText(n) {
+      return '+ კიდევ ' + n
+    },
+    noEventsText: 'ღონისძიებები არ არის',
+  };
+
+  return ka;
+
+}());

+ 29 - 0
app/calendar/lib/locales/kk.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var kk = {
+    code: 'kk',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Алдыңғы',
+      next: 'Келесі',
+      today: 'Бүгін',
+      month: 'Ай',
+      week: 'Апта',
+      day: 'Күн',
+      list: 'Күн тәртібі',
+    },
+    weekText: 'Не',
+    allDayText: 'Күні бойы',
+    moreLinkText(n) {
+      return '+ тағы ' + n
+    },
+    noEventsText: 'Көрсету үшін оқиғалар жоқ',
+  };
+
+  return kk;
+
+}());

+ 23 - 0
app/calendar/lib/locales/ko.js

@@ -0,0 +1,23 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ko = {
+    code: 'ko',
+    buttonText: {
+      prev: '이전달',
+      next: '다음달',
+      today: '오늘',
+      month: '월',
+      week: '주',
+      day: '일',
+      list: '일정목록',
+    },
+    weekText: '주',
+    allDayText: '종일',
+    moreLinkText: '개',
+    noEventsText: '일정이 없습니다',
+  };
+
+  return ko;
+
+}());

+ 27 - 0
app/calendar/lib/locales/lb.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var lb = {
+    code: 'lb',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Zréck',
+      next: 'Weider',
+      today: 'Haut',
+      month: 'Mount',
+      week: 'Woch',
+      day: 'Dag',
+      list: 'Terminiwwersiicht',
+    },
+    weekText: 'W',
+    allDayText: 'Ganzen Dag',
+    moreLinkText: 'méi',
+    noEventsText: 'Nee Evenementer ze affichéieren',
+  };
+
+  return lb;
+
+}());

+ 27 - 0
app/calendar/lib/locales/lt.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var lt = {
+    code: 'lt',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Atgal',
+      next: 'Pirmyn',
+      today: 'Šiandien',
+      month: 'Mėnuo',
+      week: 'Savaitė',
+      day: 'Diena',
+      list: 'Darbotvarkė',
+    },
+    weekText: 'SAV',
+    allDayText: 'Visą dieną',
+    moreLinkText: 'daugiau',
+    noEventsText: 'Nėra įvykių rodyti',
+  };
+
+  return lt;
+
+}());

+ 29 - 0
app/calendar/lib/locales/lv.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var lv = {
+    code: 'lv',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Iepr.',
+      next: 'Nāk.',
+      today: 'Šodien',
+      month: 'Mēnesis',
+      week: 'Nedēļa',
+      day: 'Diena',
+      list: 'Dienas kārtība',
+    },
+    weekText: 'Ned.',
+    allDayText: 'Visu dienu',
+    moreLinkText(n) {
+      return '+vēl ' + n
+    },
+    noEventsText: 'Nav notikumu',
+  };
+
+  return lv;
+
+}());

+ 25 - 0
app/calendar/lib/locales/mk.js

@@ -0,0 +1,25 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var mk = {
+    code: 'mk',
+    buttonText: {
+      prev: 'претходно',
+      next: 'следно',
+      today: 'Денес',
+      month: 'Месец',
+      week: 'Недела',
+      day: 'Ден',
+      list: 'График',
+    },
+    weekText: 'Сед',
+    allDayText: 'Цел ден',
+    moreLinkText(n) {
+      return '+повеќе ' + n
+    },
+    noEventsText: 'Нема настани за прикажување',
+  };
+
+  return mk;
+
+}());

+ 29 - 0
app/calendar/lib/locales/ms.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ms = {
+    code: 'ms',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Sebelum',
+      next: 'Selepas',
+      today: 'hari ini',
+      month: 'Bulan',
+      week: 'Minggu',
+      day: 'Hari',
+      list: 'Agenda',
+    },
+    weekText: 'Mg',
+    allDayText: 'Sepanjang hari',
+    moreLinkText(n) {
+      return 'masih ada ' + n + ' acara'
+    },
+    noEventsText: 'Tiada peristiwa untuk dipaparkan',
+  };
+
+  return ms;
+
+}());

+ 27 - 0
app/calendar/lib/locales/nb.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var nb = {
+    code: 'nb',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Forrige',
+      next: 'Neste',
+      today: 'I dag',
+      month: 'Måned',
+      week: 'Uke',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    weekText: 'Uke',
+    allDayText: 'Hele dagen',
+    moreLinkText: 'til',
+    noEventsText: 'Ingen hendelser å vise',
+  };
+
+  return nb;
+
+}());

+ 27 - 0
app/calendar/lib/locales/ne.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ne = {
+    code: 'ne', // code for nepal
+    week: {
+      dow: 7, // Sunday is the first day of the week.
+      doy: 1, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'अघिल्लो',
+      next: 'अर्को',
+      today: 'आज',
+      month: 'महिना',
+      week: 'हप्ता',
+      day: 'दिन',
+      list: 'सूची',
+    },
+    weekText: 'हप्ता',
+    allDayText: 'दिनभरि',
+    moreLinkText: 'थप लिंक',
+    noEventsText: 'देखाउनको लागि कुनै घटनाहरू छैनन्',
+  };
+
+  return ne;
+
+}());

+ 27 - 0
app/calendar/lib/locales/nl.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var nl = {
+    code: 'nl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Voorgaand',
+      next: 'Volgende',
+      today: 'Vandaag',
+      year: 'Jaar',
+      month: 'Maand',
+      week: 'Week',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    allDayText: 'Hele dag',
+    moreLinkText: 'extra',
+    noEventsText: 'Geen evenementen om te laten zien',
+  };
+
+  return nl;
+
+}());

+ 27 - 0
app/calendar/lib/locales/nn.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var nn = {
+    code: 'nn',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Førre',
+      next: 'Neste',
+      today: 'I dag',
+      month: 'Månad',
+      week: 'Veke',
+      day: 'Dag',
+      list: 'Agenda',
+    },
+    weekText: 'Veke',
+    allDayText: 'Heile dagen',
+    moreLinkText: 'til',
+    noEventsText: 'Ingen hendelser å vise',
+  };
+
+  return nn;
+
+}());

+ 27 - 0
app/calendar/lib/locales/pl.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var pl = {
+    code: 'pl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Poprzedni',
+      next: 'Następny',
+      today: 'Dziś',
+      month: 'Miesiąc',
+      week: 'Tydzień',
+      day: 'Dzień',
+      list: 'Plan dnia',
+    },
+    weekText: 'Tydz',
+    allDayText: 'Cały dzień',
+    moreLinkText: 'więcej',
+    noEventsText: 'Brak wydarzeń do wyświetlenia',
+  };
+
+  return pl;
+
+}());

+ 25 - 0
app/calendar/lib/locales/pt-br.js

@@ -0,0 +1,25 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ptBr = {
+    code: 'pt-br',
+    buttonText: {
+      prev: 'Anterior',
+      next: 'Próximo',
+      today: 'Hoje',
+      month: 'Mês',
+      week: 'Semana',
+      day: 'Dia',
+      list: 'Lista',
+    },
+    weekText: 'Sm',
+    allDayText: 'dia inteiro',
+    moreLinkText(n) {
+      return 'mais +' + n
+    },
+    noEventsText: 'Não há eventos para mostrar',
+  };
+
+  return ptBr;
+
+}());

+ 27 - 0
app/calendar/lib/locales/pt.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var pt = {
+    code: 'pt',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Anterior',
+      next: 'Seguinte',
+      today: 'Hoje',
+      month: 'Mês',
+      week: 'Semana',
+      day: 'Dia',
+      list: 'Agenda',
+    },
+    weekText: 'Sem',
+    allDayText: 'Todo o dia',
+    moreLinkText: 'mais',
+    noEventsText: 'Não há eventos para mostrar',
+  };
+
+  return pt;
+
+}());

+ 29 - 0
app/calendar/lib/locales/ro.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ro = {
+    code: 'ro',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'precedentă',
+      next: 'următoare',
+      today: 'Azi',
+      month: 'Lună',
+      week: 'Săptămână',
+      day: 'Zi',
+      list: 'Agendă',
+    },
+    weekText: 'Săpt',
+    allDayText: 'Toată ziua',
+    moreLinkText(n) {
+      return '+alte ' + n
+    },
+    noEventsText: 'Nu există evenimente de afișat',
+  };
+
+  return ro;
+
+}());

+ 29 - 0
app/calendar/lib/locales/ru.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ru = {
+    code: 'ru',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Пред',
+      next: 'След',
+      today: 'Сегодня',
+      month: 'Месяц',
+      week: 'Неделя',
+      day: 'День',
+      list: 'Повестка дня',
+    },
+    weekText: 'Нед',
+    allDayText: 'Весь день',
+    moreLinkText(n) {
+      return '+ ещё ' + n
+    },
+    noEventsText: 'Нет событий для отображения',
+  };
+
+  return ru;
+
+}());

+ 29 - 0
app/calendar/lib/locales/sk.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var sk = {
+    code: 'sk',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Predchádzajúci',
+      next: 'Nasledujúci',
+      today: 'Dnes',
+      month: 'Mesiac',
+      week: 'Týždeň',
+      day: 'Deň',
+      list: 'Rozvrh',
+    },
+    weekText: 'Ty',
+    allDayText: 'Celý deň',
+    moreLinkText(n) {
+      return '+ďalšie: ' + n
+    },
+    noEventsText: 'Žiadne akcie na zobrazenie',
+  };
+
+  return sk;
+
+}());

+ 27 - 0
app/calendar/lib/locales/sl.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var sl = {
+    code: 'sl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prejšnji',
+      next: 'Naslednji',
+      today: 'Trenutni',
+      month: 'Mesec',
+      week: 'Teden',
+      day: 'Dan',
+      list: 'Dnevni red',
+    },
+    weekText: 'Teden',
+    allDayText: 'Ves dan',
+    moreLinkText: 'več',
+    noEventsText: 'Ni dogodkov za prikaz',
+  };
+
+  return sl;
+
+}());

+ 29 - 0
app/calendar/lib/locales/sq.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var sq = {
+    code: 'sq',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'mbrapa',
+      next: 'Përpara',
+      today: 'sot',
+      month: 'Muaj',
+      week: 'Javë',
+      day: 'Ditë',
+      list: 'Listë',
+    },
+    weekText: 'Ja',
+    allDayText: 'Gjithë ditën',
+    moreLinkText(n) {
+      return '+më tepër ' + n
+    },
+    noEventsText: 'Nuk ka evente për të shfaqur',
+  };
+
+  return sq;
+
+}());

+ 29 - 0
app/calendar/lib/locales/sr-cyrl.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var srCyrl = {
+    code: 'sr-cyrl',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Претходна',
+      next: 'следећи',
+      today: 'Данас',
+      month: 'Месец',
+      week: 'Недеља',
+      day: 'Дан',
+      list: 'Планер',
+    },
+    weekText: 'Сед',
+    allDayText: 'Цео дан',
+    moreLinkText(n) {
+      return '+ још ' + n
+    },
+    noEventsText: 'Нема догађаја за приказ',
+  };
+
+  return srCyrl;
+
+}());

+ 29 - 0
app/calendar/lib/locales/sr.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var sr = {
+    code: 'sr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Prethodna',
+      next: 'Sledeći',
+      today: 'Danas',
+      month: 'Mеsеc',
+      week: 'Nеdеlja',
+      day: 'Dan',
+      list: 'Planеr',
+    },
+    weekText: 'Sed',
+    allDayText: 'Cеo dan',
+    moreLinkText(n) {
+      return '+ još ' + n
+    },
+    noEventsText: 'Nеma događaja za prikaz',
+  };
+
+  return sr;
+
+}());

+ 27 - 0
app/calendar/lib/locales/sv.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var sv = {
+    code: 'sv',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Förra',
+      next: 'Nästa',
+      today: 'Idag',
+      month: 'Månad',
+      week: 'Vecka',
+      day: 'Dag',
+      list: 'Program',
+    },
+    weekText: 'v.',
+    allDayText: 'Heldag',
+    moreLinkText: 'till',
+    noEventsText: 'Inga händelser att visa',
+  };
+
+  return sv;
+
+}());

+ 30 - 0
app/calendar/lib/locales/th.js

@@ -0,0 +1,30 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var th = {
+    code: 'th',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'ก่อนหน้า',
+      next: 'ถัดไป',
+      prevYear: 'ปีก่อนหน้า',
+      nextYear: 'ปีถัดไป',
+      year: 'ปี',
+      today: 'วันนี้',
+      month: 'เดือน',
+      week: 'สัปดาห์',
+      day: 'วัน',
+      list: 'กำหนดการ',
+    },
+    weekText: 'สัปดาห์',
+    allDayText: 'ตลอดวัน',
+    moreLinkText: 'เพิ่มเติม',
+    noEventsText: 'ไม่มีกิจกรรมที่จะแสดง',
+  };
+
+  return th;
+
+}());

+ 27 - 0
app/calendar/lib/locales/tr.js

@@ -0,0 +1,27 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var tr = {
+    code: 'tr',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'geri',
+      next: 'ileri',
+      today: 'bugün',
+      month: 'Ay',
+      week: 'Hafta',
+      day: 'Gün',
+      list: 'Ajanda',
+    },
+    weekText: 'Hf',
+    allDayText: 'Tüm gün',
+    moreLinkText: 'daha fazla',
+    noEventsText: 'Gösterilecek etkinlik yok',
+  };
+
+  return tr;
+
+}());

+ 17 - 0
app/calendar/lib/locales/ug.js

@@ -0,0 +1,17 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var ug = {
+    code: 'ug',
+    buttonText: {
+      month: 'ئاي',
+      week: 'ھەپتە',
+      day: 'كۈن',
+      list: 'كۈنتەرتىپ',
+    },
+    allDayText: 'پۈتۈن كۈن',
+  };
+
+  return ug;
+
+}());

+ 29 - 0
app/calendar/lib/locales/uk.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var uk = {
+    code: 'uk',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 7, // The week that contains Jan 1st is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Попередній',
+      next: 'далі',
+      today: 'Сьогодні',
+      month: 'Місяць',
+      week: 'Тиждень',
+      day: 'День',
+      list: 'Порядок денний',
+    },
+    weekText: 'Тиж',
+    allDayText: 'Увесь день',
+    moreLinkText(n) {
+      return '+ще ' + n + '...'
+    },
+    noEventsText: 'Немає подій для відображення',
+  };
+
+  return uk;
+
+}());

+ 21 - 0
app/calendar/lib/locales/uz.js

@@ -0,0 +1,21 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var uz = {
+    code: 'uz',
+    buttonText: {
+      month: 'Oy',
+      week: 'Xafta',
+      day: 'Kun',
+      list: 'Kun tartibi',
+    },
+    allDayText: "Kun bo'yi",
+    moreLinkText(n) {
+      return '+ yana ' + n
+    },
+    noEventsText: "Ko'rsatish uchun voqealar yo'q",
+  };
+
+  return uz;
+
+}());

+ 29 - 0
app/calendar/lib/locales/vi.js

@@ -0,0 +1,29 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var vi = {
+    code: 'vi',
+    week: {
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: 'Trước',
+      next: 'Tiếp',
+      today: 'Hôm nay',
+      month: 'Tháng',
+      week: 'Tuần',
+      day: 'Ngày',
+      list: 'Lịch biểu',
+    },
+    weekText: 'Tu',
+    allDayText: 'Cả ngày',
+    moreLinkText(n) {
+      return '+ thêm ' + n
+    },
+    noEventsText: 'Không có sự kiện để hiển thị',
+  };
+
+  return vi;
+
+}());

+ 30 - 0
app/calendar/lib/locales/zh-cn.js

@@ -0,0 +1,30 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var zhCn = {
+    code: 'zh-cn',
+    week: {
+      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+      dow: 1, // Monday is the first day of the week.
+      doy: 4, // The week that contains Jan 4th is the first week of the year.
+    },
+    buttonText: {
+      prev: '上月',
+      next: '下月',
+      today: '今天',
+      month: '月',
+      week: '周',
+      day: '日',
+      list: '日程',
+    },
+    weekText: '周',
+    allDayText: '全天',
+    moreLinkText(n) {
+      return '另外 ' + n + ' 个'
+    },
+    noEventsText: '没有事件显示',
+  };
+
+  return zhCn;
+
+}());

+ 23 - 0
app/calendar/lib/locales/zh-tw.js

@@ -0,0 +1,23 @@
+FullCalendar.globalLocales.push(function () {
+  'use strict';
+
+  var zhTw = {
+    code: 'zh-tw',
+    buttonText: {
+      prev: '上月',
+      next: '下月',
+      today: '今天',
+      month: '月',
+      week: '週',
+      day: '天',
+      list: '活動列表',
+    },
+    weekText: '周',
+    allDayText: '整天',
+    moreLinkText: '顯示更多',
+    noEventsText: '没有任何活動',
+  };
+
+  return zhTw;
+
+}());

Fichier diff supprimé car celui-ci est trop grand
+ 71 - 0
app/calendar/lib/main.css


Fichier diff supprimé car celui-ci est trop grand
+ 56 - 0
app/calendar/lib/main.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
app/calendar/lib/main.min.css


Fichier diff supprimé car celui-ci est trop grand
+ 5 - 0
app/calendar/lib/main.min.js


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff