fullcalendar.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /*=========================================================================================
  2. File Name: fullcalendar.js
  3. Description: Fullcalendar
  4. --------------------------------------------------------------------------------------
  5. Item name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
  6. Author: PIXINVENT
  7. Author URL: http://www.themeforest.net/user/pixinvent
  8. ==========================================================================================*/
  9. document.addEventListener('DOMContentLoaded', function () {
  10. // color object for different event types
  11. var colors = {
  12. primary: "#7367f0",
  13. success: "#28c76f",
  14. danger: "#ea5455",
  15. warning: "#ff9f43"
  16. };
  17. // chip text object for different event types
  18. var categoryText = {
  19. primary: "Others",
  20. success: "Business",
  21. danger: "Personal",
  22. warning: "Work"
  23. };
  24. var categoryBullets = $(".cal-category-bullets").html(),
  25. evtColor = "",
  26. eventColor = "";
  27. // calendar init
  28. var calendarEl = document.getElementById('fc-default');
  29. var calendar = new FullCalendar.Calendar(calendarEl, {
  30. plugins: ["dayGrid", "timeGrid", "interaction"],
  31. customButtons: {
  32. addNew: {
  33. text: ' Add',
  34. click: function () {
  35. var calDate = new Date,
  36. todaysDate = calDate.toISOString().slice(0, 10);
  37. $(".modal-calendar").modal("show");
  38. $(".modal-calendar .cal-submit-event").addClass("d-none");
  39. $(".modal-calendar .remove-event").addClass("d-none");
  40. $(".modal-calendar .cal-add-event").removeClass("d-none")
  41. $(".modal-calendar .cancel-event").removeClass("d-none")
  42. $(".modal-calendar .add-category .chip").remove();
  43. $("#cal-start-date").val(todaysDate);
  44. $("#cal-end-date").val(todaysDate);
  45. $(".modal-calendar #cal-start-date").attr("disabled", false);
  46. }
  47. }
  48. },
  49. header: {
  50. left: "addNew",
  51. center: "dayGridMonth,timeGridWeek,timeGridDay",
  52. right: "prev,title,next"
  53. },
  54. displayEventTime: false,
  55. navLinks: true,
  56. editable: true,
  57. allDay: true,
  58. navLinkDayClick: function (date) {
  59. $(".modal-calendar").modal("show");
  60. },
  61. dateClick: function (info) {
  62. $(".modal-calendar #cal-start-date").val(info.dateStr).attr("disabled", true);
  63. $(".modal-calendar #cal-end-date").val(info.dateStr);
  64. },
  65. // displays saved event values on click
  66. eventClick: function (info) {
  67. $(".modal-calendar").modal("show");
  68. $(".modal-calendar #cal-event-title").val(info.event.title);
  69. $(".modal-calendar #cal-start-date").val(moment(info.event.start).format('YYYY-MM-DD'));
  70. $(".modal-calendar #cal-end-date").val(moment(info.event.end).format('YYYY-MM-DD'));
  71. $(".modal-calendar #cal-description").val(info.event.extendedProps.description);
  72. $(".modal-calendar .cal-submit-event").removeClass("d-none");
  73. $(".modal-calendar .remove-event").removeClass("d-none");
  74. $(".modal-calendar .cal-add-event").addClass("d-none");
  75. $(".modal-calendar .cancel-event").addClass("d-none");
  76. $(".calendar-dropdown .dropdown-menu").find(".selected").removeClass("selected");
  77. var eventCategory = info.event.extendedProps.dataEventColor;
  78. var eventText = categoryText[eventCategory]
  79. $(".modal-calendar .chip-wrapper .chip").remove();
  80. $(".modal-calendar .chip-wrapper").append($("<div class='chip chip-" + eventCategory + "'>" +
  81. "<div class='chip-body'>" +
  82. "<span class='chip-text'> " + eventText + " </span>" +
  83. "</div>" +
  84. "</div>"));
  85. },
  86. });
  87. // render calendar
  88. calendar.render();
  89. // appends bullets to left class of header
  90. $("#basic-examples .fc-right").append(categoryBullets);
  91. // Close modal on submit button
  92. $(".modal-calendar .cal-submit-event").on("click", function () {
  93. $(".modal-calendar").modal("hide");
  94. });
  95. // Remove Event
  96. $(".remove-event").on("click", function () {
  97. var removeEvent = calendar.getEventById('newEvent');
  98. removeEvent.remove();
  99. });
  100. // reset input element's value for new event
  101. if ($("td:not(.fc-event-container)").length > 0) {
  102. $(".modal-calendar").on('hidden.bs.modal', function (e) {
  103. $('.modal-calendar .form-control').val('');
  104. })
  105. }
  106. // remove disabled attr from button after entering info
  107. $(".modal-calendar .form-control").on("keyup", function () {
  108. if ($(".modal-calendar #cal-event-title").val().length >= 1) {
  109. $(".modal-calendar .modal-footer .btn").removeAttr("disabled");
  110. }
  111. else {
  112. $(".modal-calendar .modal-footer .btn").attr("disabled", true);
  113. }
  114. });
  115. // open add event modal on click of day
  116. $(document).on("click", ".fc-day", function () {
  117. $(".modal-calendar").modal("show");
  118. $(".calendar-dropdown .dropdown-menu").find(".selected").removeClass("selected");
  119. $(".modal-calendar .cal-submit-event").addClass("d-none");
  120. $(".modal-calendar .remove-event").addClass("d-none");
  121. $(".modal-calendar .cal-add-event").removeClass("d-none");
  122. $(".modal-calendar .cancel-event").removeClass("d-none");
  123. $(".modal-calendar .add-category .chip").remove();
  124. $(".modal-calendar .modal-footer .btn").attr("disabled", true);
  125. evtColor = colors.primary;
  126. eventColor = "primary";
  127. });
  128. // change chip's and event's color according to event type
  129. $(".calendar-dropdown .dropdown-menu .dropdown-item").on("click", function () {
  130. var selectedColor = $(this).data("color");
  131. evtColor = colors[selectedColor];
  132. eventTag = categoryText[selectedColor];
  133. eventColor = selectedColor;
  134. // changes event color after selecting category
  135. $(".cal-add-event").on("click", function () {
  136. calendar.addEvent({
  137. color: evtColor,
  138. dataEventColor: eventColor,
  139. className: eventColor
  140. });
  141. })
  142. $(".calendar-dropdown .dropdown-menu").find(".selected").removeClass("selected");
  143. $(this).addClass("selected");
  144. // add chip according to category
  145. $(".modal-calendar .chip-wrapper .chip").remove();
  146. $(".modal-calendar .chip-wrapper").append($("<div class='chip chip-" + selectedColor + "'>" +
  147. "<div class='chip-body'>" +
  148. "<span class='chip-text'> " + eventTag + " </span>" +
  149. "</div>" +
  150. "</div>"));
  151. });
  152. // calendar add event
  153. $(".cal-add-event").on("click", function () {
  154. $(".modal-calendar").modal("hide");
  155. var eventTitle = $("#cal-event-title").val(),
  156. startDate = $("#cal-start-date").val(),
  157. endDate = $("#cal-end-date").val(),
  158. eventDescription = $("#cal-description").val(),
  159. correctEndDate = new Date(endDate);
  160. calendar.addEvent({
  161. id: "newEvent",
  162. title: eventTitle,
  163. start: startDate,
  164. end: correctEndDate,
  165. description: eventDescription,
  166. color: evtColor,
  167. dataEventColor: eventColor,
  168. allDay: true
  169. });
  170. });
  171. // date picker
  172. $(".pickadate").pickadate({
  173. format: 'yyyy-mm-dd'
  174. });
  175. });