main.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /*!
  2. FullCalendar Luxon Plugin v4.3.0
  3. Docs & License: https://fullcalendar.io/
  4. (c) 2019 Adam Shaw
  5. */
  6. (function (global, factory) {
  7. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('luxon'), require('@fullcalendar/core')) :
  8. typeof define === 'function' && define.amd ? define(['exports', 'luxon', '@fullcalendar/core'], factory) :
  9. (global = global || self, factory(global.FullCalendarLuxon = {}, global.luxon, global.FullCalendar));
  10. }(this, function (exports, luxon, core) {
  11. 'use strict';
  12. /*! *****************************************************************************
  13. Copyright (c) Microsoft Corporation. All rights reserved.
  14. Licensed under the Apache License, Version 2.0 (the "License"); you may not use
  15. this file except in compliance with the License. You may obtain a copy of the
  16. License at http://www.apache.org/licenses/LICENSE-2.0
  17. THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  18. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  19. WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  20. MERCHANTABLITY OR NON-INFRINGEMENT.
  21. See the Apache Version 2.0 License for specific language governing permissions
  22. and limitations under the License.
  23. ***************************************************************************** */
  24. /* global Reflect, Promise */
  25. var extendStatics = function (d, b) {
  26. extendStatics = Object.setPrototypeOf ||
  27. ({__proto__: []} instanceof Array && function (d, b) {
  28. d.__proto__ = b;
  29. }) ||
  30. function (d, b) {
  31. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  32. };
  33. return extendStatics(d, b);
  34. };
  35. function __extends(d, b) {
  36. extendStatics(d, b);
  37. function __() {
  38. this.constructor = d;
  39. }
  40. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  41. }
  42. var __assign = function () {
  43. __assign = Object.assign || function __assign(t) {
  44. for (var s, i = 1, n = arguments.length; i < n; i++) {
  45. s = arguments[i];
  46. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
  47. }
  48. return t;
  49. };
  50. return __assign.apply(this, arguments);
  51. };
  52. function toDateTime(date, calendar) {
  53. if (!(calendar instanceof core.Calendar)) {
  54. throw new Error('must supply a Calendar instance');
  55. }
  56. return luxon.DateTime.fromJSDate(date, {
  57. zone: calendar.dateEnv.timeZone,
  58. locale: calendar.dateEnv.locale.codes[0]
  59. });
  60. }
  61. function toDuration(duration, calendar) {
  62. if (!(calendar instanceof core.Calendar)) {
  63. throw new Error('must supply a Calendar instance');
  64. }
  65. return luxon.Duration.fromObject(__assign({}, duration, {locale: calendar.dateEnv.locale.codes[0]}));
  66. }
  67. var LuxonNamedTimeZone = /** @class */ (function (_super) {
  68. __extends(LuxonNamedTimeZone, _super);
  69. function LuxonNamedTimeZone() {
  70. return _super !== null && _super.apply(this, arguments) || this;
  71. }
  72. LuxonNamedTimeZone.prototype.offsetForArray = function (a) {
  73. return arrayToLuxon(a, this.timeZoneName).offset;
  74. };
  75. LuxonNamedTimeZone.prototype.timestampToArray = function (ms) {
  76. return luxonToArray(luxon.DateTime.fromMillis(ms, {
  77. zone: this.timeZoneName
  78. }));
  79. };
  80. return LuxonNamedTimeZone;
  81. }(core.NamedTimeZoneImpl));
  82. function formatWithCmdStr(cmdStr, arg) {
  83. var cmd = parseCmdStr(cmdStr);
  84. if (arg.end) {
  85. var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
  86. var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
  87. return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.separator);
  88. }
  89. return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
  90. }
  91. var main = core.createPlugin({
  92. cmdFormatter: formatWithCmdStr,
  93. namedTimeZonedImpl: LuxonNamedTimeZone
  94. });
  95. function luxonToArray(datetime) {
  96. return [
  97. datetime.year,
  98. datetime.month - 1,
  99. datetime.day,
  100. datetime.hour,
  101. datetime.minute,
  102. datetime.second,
  103. datetime.millisecond
  104. ];
  105. }
  106. function arrayToLuxon(arr, timeZone, locale) {
  107. return luxon.DateTime.fromObject({
  108. zone: timeZone,
  109. locale: locale,
  110. year: arr[0],
  111. month: arr[1] + 1,
  112. day: arr[2],
  113. hour: arr[3],
  114. minute: arr[4],
  115. second: arr[5],
  116. millisecond: arr[6]
  117. });
  118. }
  119. function parseCmdStr(cmdStr) {
  120. var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
  121. if (parts) {
  122. var middle = parseCmdStr(parts[2]);
  123. return {
  124. head: parts[1],
  125. middle: middle,
  126. tail: parts[3],
  127. whole: parts[1] + middle.whole + parts[3]
  128. };
  129. } else {
  130. return {
  131. head: null,
  132. middle: null,
  133. tail: null,
  134. whole: cmdStr
  135. };
  136. }
  137. }
  138. function formatRange(cmd, formatStart, formatEnd, separator) {
  139. if (cmd.middle) {
  140. var startHead = formatStart(cmd.head);
  141. var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
  142. var startTail = formatStart(cmd.tail);
  143. var endHead = formatEnd(cmd.head);
  144. var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
  145. var endTail = formatEnd(cmd.tail);
  146. if (startHead === endHead && startTail === endTail) {
  147. return startHead +
  148. (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
  149. startTail;
  150. }
  151. }
  152. var startWhole = formatStart(cmd.whole);
  153. var endWhole = formatEnd(cmd.whole);
  154. if (startWhole === endWhole) {
  155. return startWhole;
  156. } else {
  157. return startWhole + separator + endWhole;
  158. }
  159. }
  160. exports.default = main;
  161. exports.toDateTime = toDateTime;
  162. exports.toDuration = toDuration;
  163. Object.defineProperty(exports, '__esModule', {value: true});
  164. }));