libfullcalendar5.pp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881
  1. {
  2. This file is part of the Pas2JS run time library.
  3. Copyright (C) 2019 Michael Van Canneyt
  4. FullCalendar version 5 mappings for pas2js
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. unit libfullcalendar5;
  12. {$mode objfpc}
  13. {$modeswitch externalclass}
  14. interface
  15. uses
  16. sysutils, types, js, web;
  17. Const
  18. fcViewMonth = 'dayGridMonth';
  19. fcViewWeek = 'timeGridWeek';
  20. fcViewDay = 'timeGridDay';
  21. // A list of plugin names, created from the plugin index page
  22. fcInteractionPlugin = 'interaction';
  23. fcDayGridPlugin = 'dayGrid';
  24. fcTimeGridPlugin = 'timeGrid';
  25. fcListPlugin = 'list';
  26. fcTimelinePlugin = 'timeline';
  27. fcResourceDayGridPlugin = 'resourceDayGrid';
  28. fcResourceTimeGridPlugin = 'resourceTimeGrid';
  29. fcResourceTimelinePlugin = 'resourceTimeline';
  30. fcBootstrapPlugin = 'bootstrap';
  31. fcGoogleCalendarPlugin = 'googleCalendar';
  32. fcRRulePlugin = 'rrule';
  33. fcMomentPlugin = 'moment';
  34. fcMomentTimezonePlugin = 'momentTimeZone';
  35. fcReactPlugin = 'react';
  36. fcAngularPlugin = 'angular';
  37. fcVuePlugin = 'vue';
  38. fcHeaderFooterTitle = 'title';
  39. fcHeaderFooterPrev = 'prev';
  40. fcHeaderFooterNext = 'next';
  41. fcHeaderFooterPrevYear = 'prevYear';
  42. fcHeaderFooterNextYear = 'nextYear';
  43. fcHeaderFooterToday = 'today';
  44. fcDateFormatNumeric = 'numeric';
  45. fcDateFormat2Digit = '2-digit';
  46. fcDateFormatLong = 'long';
  47. fcDateFormatShort = 'short';
  48. fcDateFormatNarrow = 'narrow';
  49. fcEventDisplayAuto = 'auto';
  50. fcEventDisplayBlock = 'block';
  51. fcEventDisplayListItem = 'list-item';
  52. fcEventDisplayBackground = 'background';
  53. fcEventDisplayInverseBackground = 'inverse-background';
  54. fcEventDisplayNone = 'none';
  55. fcSlotFuture = 'fc-slot-future';
  56. fcSlotPast = 'fc-slot-past';
  57. fcSlotFri = 'fc-slot-fri';
  58. fcSlotSat = 'fc-slot-sat';
  59. fcSlotSun = 'fc-slot-sun';
  60. fcSlotToday = 'fc-slot-today';
  61. Type
  62. TProcedural = reference to procedure;
  63. TDateFunction = reference to Function : TJSDate;
  64. TDateFormatter = Class external name 'Object' (TJSObject)
  65. // Use fcDateFormat* constants
  66. year : String;
  67. month : String;
  68. day : String;
  69. week : string;
  70. meridiem : string;
  71. weekday : String;
  72. hour : string;
  73. minute : string;
  74. second : string;
  75. hour12 : Boolean;
  76. timeZoneName : string;
  77. omitZeroMinute : Boolean;
  78. omitCommas : Boolean;
  79. end;
  80. TDuration = Class external name 'Object' (TJSObject)
  81. years : NativeInt;
  82. months : NativeInt;
  83. days : NativeInt;
  84. milliseconds : NativeInt;
  85. end;
  86. TDateRange = Class external name 'Object' (TJSObject)
  87. start : TJSDate;
  88. startStr : string; external name 'start';
  89. startInt : nativeInt; external name 'start';
  90. end;
  91. TCalendarHeaderFooterOptions = Class external name 'Object' (TJSObject)
  92. // use the fcHeaderFooter consts
  93. start : string;
  94. end_ : string; external name 'end';
  95. center : string;
  96. end;
  97. TDateFormatHandler = reference to function(aDate : TJSDate) : String;
  98. TButtonText = Class external name 'Object' (TJSObject)
  99. today : string;
  100. month : string;
  101. week : string;
  102. day : string;
  103. list : string;
  104. end;
  105. TButtonTextRec = record
  106. today : string;
  107. month : string;
  108. week : string;
  109. day : string;
  110. list : string;
  111. end;
  112. TButtonIcons = Class external name 'Object' (TJSObject)
  113. title : string;
  114. prev : string;
  115. next : string;
  116. prevYear : string;
  117. nextYear : string;
  118. today : string;
  119. end;
  120. TButtonIconsRec = record
  121. today : string;
  122. title : string;
  123. prev : string;
  124. next : string;
  125. prevYear : string;
  126. nextYear : string;
  127. end;
  128. TCustomButtonSpec = record
  129. text : string;
  130. click : TJSEventHandler;
  131. end;
  132. TFontAwesomeSpec = Class external name 'Object' (TJSObject)
  133. close : string;
  134. title : string;
  135. prev : string;
  136. next : string;
  137. prevYear : string;
  138. nextYear : string;
  139. today : string;
  140. end;
  141. TFontAwesomeSpecRec = record
  142. close : string;
  143. title : string;
  144. prev : string;
  145. next : string;
  146. prevYear : string;
  147. nextYear : string;
  148. today : string;
  149. end;
  150. TCustomButtonSpecs = Class external name 'Object' (TJSObject)
  151. private
  152. function GetButton(Name: String): TCustomButtonSpec; external name '[]';
  153. procedure SetButton(Name: String; const AValue: TCustomButtonSpec); external name '[]';
  154. Public
  155. property buttons [aIndex : string] : TCustomButtonSpec read GetButton Write SetButton;
  156. end;
  157. TBusinessHoursSpec = Class external name 'Object' (TJSObject)
  158. daysOfWeek : TIntegerDynArray;
  159. startTime : TDuration;
  160. startTimeStr : string; external name 'startTime';
  161. startTimeInt : nativeInt; external name 'startTime';
  162. endTime : TDuration;
  163. endTimeStr : string; external name 'endTime';
  164. endTimeInt : nativeInt; external name 'endTime';
  165. end;
  166. TBusinessHoursSpecArray = Array of TBusinessHoursSpec;
  167. TCalendarEvent = Class;
  168. TCalendarResource = Class;
  169. TFullCalendarView = class;
  170. TAllowDropInfo = record
  171. allDay : Boolean;
  172. end_ : TJSDate; external name 'end';
  173. resource : TCalendarResource;
  174. start : TJSDate;
  175. startStr : String;
  176. end;
  177. TAllowFunction = reference to function (dropInfo : TAllowDropInfo; draggedEvent : TCalendarEvent) : Boolean;
  178. TBaseCalendarResource = Class external name 'Object' (TJSObject)
  179. id : String;
  180. title : string;
  181. eventColor : string;
  182. eventBackgroundColor : string;
  183. eventBorderColor : string;
  184. eventTextColor : string;
  185. eventClassNames : String;
  186. eventClassNamesArray : TStringDynArray; external name 'eventClassNames';
  187. eventOverlap : Boolean;
  188. eventAllow : TAllowFunction;
  189. end;
  190. TBaseCalendarResourceArray = array of TBaseCalendarResource;
  191. TCalendarResource = Class external name 'Object' (TJSObject)
  192. end;
  193. TCalendarResourceArray = array of TCalendarResource;
  194. THeightHandler = Reference to function : NativeInt;
  195. TBaseCalendarEvent = Class external name 'Object' (TJSObject)
  196. id : string;
  197. idInt : NativeInt; external name 'id';
  198. groupId : string;
  199. groupIdInt : NativeInt; external name 'groupId';
  200. allDay : Boolean;
  201. start : TJSDate;
  202. startStr : string; external name 'start';
  203. startInt : nativeInt; external name 'start';
  204. end_ : TJSDate; external name 'end';
  205. endStr : string; external name 'end';
  206. endInt : nativeInt; external name 'end';
  207. daysOfWeek : TIntegerDynArray;
  208. startTime : TDuration;
  209. startTimeStr : string; external name 'startTime';
  210. endTime : TDuration;
  211. endTimeStr : string; external name 'endTime';
  212. startRecur : TJSDate;
  213. startRecurStr : string; external name 'startRecur';
  214. startRecurInt : nativeInt; external name 'startRecur';
  215. endRecur : TJSDate;
  216. endRecurStr : string; external name 'endRecur';
  217. endRecurInt : nativeInt; external name 'endRecur';
  218. title : string;
  219. url : string;
  220. classNames : string;
  221. classNamesArray : TStringDynArray; external name 'classNames';
  222. editable : boolean;
  223. startEditable : Boolean;
  224. durationEditable : Boolean;
  225. resourceEditable : Boolean;
  226. resourceId : String;
  227. resourceIds : TStringDynArray;
  228. display : string;
  229. overlap : boolean;
  230. constraint : string;
  231. constraintObj : TBusinessHoursSpec; external name 'constraint';
  232. color : string;
  233. backgroundColor : string;
  234. borderColor : string;
  235. textColor : string;
  236. extendedProps : TJSObject;
  237. end;
  238. TBaseCalendarEventArray = array of TBaseCalendarEvent;
  239. { TBaseCalendarEventHelper }
  240. TBaseCalendarEventHelper = class helper for TBaseCalendarEvent
  241. class function event(const aTitle : String; aStart,aEnd : TDateTime) : TBaseCalendarEvent; static;
  242. end;
  243. { TCalendarEvent }
  244. TCalendarEvent = Class external name 'Object' (TJSObject)
  245. private
  246. FAllDay: Boolean; external name 'allDay';
  247. FbackgroundColor: string; external name 'backgroundColor';
  248. FBorderColor: string; external name 'borderColor';
  249. FClassNames: TStringDynArray; external name 'classNames';
  250. FdurationEditable: Boolean; external name 'durationEditable';
  251. feditable: boolean; external name 'editable';
  252. FEnd: TJSDate; external name 'end';
  253. fEventConstraint: string; external name 'eventConstraint';
  254. FExtendedProps: TJSObject; external name 'extendedProps';
  255. FGroupID: string; external name 'groupId';
  256. FID: string; external name 'id';
  257. FOverLap: boolean; external name 'overlap';
  258. FRendering: string; external name 'rendering';
  259. FresourceEditable: Boolean; external name 'resourceEditable';
  260. FSource: JSValue; external name 'source';
  261. FStart: TJSDate; external name 'start';
  262. FstartEditable: Boolean; external name 'startEditable';
  263. FTextColor: string; external name 'textColor';
  264. FTitle: string; external name 'title';
  265. FURL: string; external name 'url';
  266. Public
  267. procedure setProp(const aName : string; aValue : JSValue);
  268. procedure setExtendedProp(const aName : string; aValue : JSValue);
  269. Procedure setStart(aDate : TJSDate); overload;
  270. Procedure setStart(aDate : String); overload;
  271. Procedure setStart(aDate : NativeInt); overload;
  272. Procedure setStart(aDate : TJSDate; Options : TJSObject); overload;
  273. Procedure setStart(aDate : String; Options : TJSObject); overload;
  274. Procedure setStart(aDate : NativeInt; Options : TJSObject); overload;
  275. Procedure setEnd(aDate : TJSDate); overload;
  276. Procedure setEnd(aDate : String); overload;
  277. Procedure setEnd(aDate : NativeInt); overload;
  278. Procedure setDates(aStart,aEnd : TJSDate); overload;
  279. Procedure setDates(aStart,aEnd : String); overload;
  280. Procedure setDates(aStart,aEnd : NativeInt); overload;
  281. Procedure setDates(aStart,aEnd : TJSDate; Options : TJSObject); overload;
  282. Procedure setDates(aStart,aEnd : String; Options : TJSObject); overload;
  283. Procedure setDates(aStart,aEnd : NativeInt; Options : TJSObject); overload;
  284. Procedure setAllDay(aValue : Boolean); overload;
  285. Procedure setAllDay(aValue : Boolean; Options:TJSObject); overload;
  286. Procedure moveStart(aDelta : TDuration); overload;
  287. Procedure moveStart(aDelta : String); overload;
  288. Procedure moveStart(aDelta : NativeInt); overload;
  289. Procedure moveEnd(aDelta : TDuration); overload;
  290. Procedure moveEnd(aDelta : String); overload;
  291. Procedure moveEnd(aDelta : NativeInt); overload;
  292. Procedure moveDates(aDelta : TDuration); overload;
  293. Procedure moveDates(aDelta : String); overload;
  294. Procedure moveDates(aDelta : NativeInt); overload;
  295. Procedure formatRange(formatter : TDateFormatter);
  296. Procedure remove;
  297. Function getResources : TCalendarResourceArray;
  298. Procedure setResources(aResources : array of string); overload;
  299. Procedure setResources(aResources : TCalendarResourceArray); overload;
  300. Property id : string read FID;
  301. Property groupId : string read FGroupID;
  302. Property allDay : Boolean read FAllDay;
  303. Property start : TJSDate read FStart;
  304. Property end_ : TJSDate read FEnd;
  305. Property title : string read FTitle;
  306. Property url : string read FURL;
  307. Property classNames : TStringDynArray read FClassNames;
  308. Property editable : boolean read feditable;
  309. Property startEditable : Boolean read FstartEditable;
  310. property eventConstraint : string Read fEventConstraint;
  311. Property durationEditable : Boolean Read FdurationEditable;
  312. Property resourceEditable : Boolean read FresourceEditable;
  313. Property rendering : string read FRendering;
  314. Property overlap : boolean read FOverLap;
  315. Property backgroundColor : string read FbackgroundColor;
  316. Property borderColor : string read FBorderColor;
  317. Property textColor : string Read FTextColor;
  318. Property extendedProps : TJSObject Read FExtendedProps;
  319. Property source : JSValue Read FSource;
  320. end;
  321. TCalendarEventArray = array of TCalendarEvent;
  322. TGoogleCalendarEventsSpec = Class external name 'Object' (TJSObject)
  323. googleCalendarId : String;
  324. // Other options can be specified
  325. end;
  326. TJSONFeedSpec = Class external name 'Object' (TJSObject)
  327. url : string;
  328. // Other options can be specified
  329. end;
  330. TEventGeneratorInfo = record
  331. start : TJSDate;
  332. end_ : TJSDate; external name 'end';
  333. startStr : String;
  334. endStr : String;
  335. timeZone : String;
  336. end;
  337. TSelectInfo = Record
  338. Start : TJSDate;
  339. end_ : TJSDate; external name 'end';
  340. resourceId : String;
  341. end;
  342. TEventMouseInfo = record
  343. event : TCalendarEvent;
  344. el : TJSHTMLElement;
  345. jsEvent : TJSEvent;
  346. view : TFullCalendarView;
  347. end;
  348. TGenerateEventsCallBack = Procedure (Res : TBaseCalendarEventArray);
  349. TGenerateEventsFailureCallBack = Procedure (Res : JSValue);
  350. TCalendarEventGenerator = reference to Procedure (info : TEventGeneratorInfo; successCallBack : TGenerateEventsCallBack; FailCallBack : TGenerateEventsFailureCallBack);
  351. TCalendarLoadingCallback = reference to procedure (isLoading : Boolean);
  352. TSelectOverlapHandler = reference to function(Event : TJSObject) : boolean;
  353. TSelectAllowHandler = reference to function(info : TSelectInfo) : Boolean;
  354. TEventMouseEventHandler = reference to procedure(info : TEventMouseInfo);
  355. TCalendarEventSource = Class external name 'Object' (TJSObject)
  356. events : TBaseCalendarEventArray;
  357. eventsStr : string; external name 'events'; // JSON feed
  358. eventsFunc : TCalendarEventGenerator; external name 'events'; // JSON feed
  359. eventsJSONFeed : TJSONFeedSpec; external name 'events'; // JSON feed
  360. eventsArr : TCalendarEventArray; external name 'events'; // JSON feed
  361. eventsObjList : TJSObjectDynArray ; external name 'events'; // Roll your own
  362. Procedure refetch;
  363. Procedure remove;
  364. end;
  365. TCalendarEventRenderInfo = record
  366. event: TCalendarEvent;
  367. el : TJSHTMLElement;
  368. timeText : string;
  369. isStart : Boolean;
  370. isEnd : Boolean;
  371. isMirror : Boolean;
  372. isPast : Boolean;
  373. isFuture : Boolean;
  374. isToday : Boolean;
  375. view : TFullCalendarView;
  376. end;
  377. TCalendarEventContentObj = Class external name 'Object' (TJSObject)
  378. html : string;
  379. domNodes : Array of TJSHTMLElement;
  380. end;
  381. TSlotLabelContentObj = TCalendarEventContentObj;
  382. TSlotLaneContentObj = TCalendarEventContentObj;
  383. TweekNumberContentObj = TCalendarEventContentObj;
  384. TViewContentObj = TCalendarEventContentObj;
  385. TRevertHandler = reference to procedure;
  386. TAddEventInfo = Class external name 'Object' (TJSObject)
  387. event : TCalendarEvent;
  388. relatedEvents : TCalendarEventArray;
  389. revert : TRevertHandler;
  390. end;
  391. TChangeEventInfo = Class external name 'Object' (TJSObject)
  392. event : TCalendarEvent;
  393. oldevent : TCalendarEvent;
  394. relatedEvents : TCalendarEventArray;
  395. revert : TRevertHandler;
  396. end;
  397. TRemoveEventInfo = Class external name 'Object' (TJSObject)
  398. event : TCalendarEvent;
  399. relatedEvents : TCalendarEventArray;
  400. revert : TRevertHandler;
  401. end;
  402. TCalendarViewRenderInfo = record
  403. view: TFullCalendarView;
  404. el : TJSHTMLElement;
  405. end;
  406. TDayHeaderRenderInfo = Record
  407. date : TJSDate;
  408. text : string;
  409. isPast : Boolean;
  410. isFuture : Boolean;
  411. isToday : Boolean;
  412. isOther : boolean;
  413. resource : TJSObject;
  414. el : TJSHTMLElement;
  415. end;
  416. TDayCellRenderInfo = Record
  417. date : TJSDate;
  418. dayNumberText : string;
  419. isPast : Boolean;
  420. isFuture : Boolean;
  421. isToday : Boolean;
  422. isOther : boolean;
  423. resource : TJSObject;
  424. el : TJSHTMLElement;
  425. end;
  426. TSlotLabelRenderInfo = Record
  427. date : TJSDate;
  428. text : string;
  429. isPast : Boolean;
  430. isFuture : Boolean;
  431. isToday : Boolean;
  432. lebel : Integer;
  433. el : TJSHTMLElement;
  434. end;
  435. TSlotLaneRenderInfo = TSlotLabelRenderInfo;
  436. TWeekNumberRenderInfo = Record
  437. num : integer;
  438. text : string;
  439. date : TJSDate;
  440. end;
  441. TCalendarEventClassNamesCallback = reference to function(Info : TCalendarEventRenderInfo) : string;
  442. TCalendarEventContentCallback = reference to function (Info : TCalendarEventRenderInfo) : TCalendarEventContentObj;
  443. TCalendarEventMountCallback = reference to Procedure (Info : TCalendarEventRenderInfo);
  444. TEventSortCallBack = reference to function (ev1,ev2 : TCalendarEvent) : Integer;
  445. TCalendarEventSourceArray = Array of TCalendarEventSource;
  446. TAddEventCallBack = reference to procedure (addInfo : TAddEventInfo);
  447. TChangeEventCallBack = reference to procedure (changeInfo : TChangeEventInfo);
  448. TRemoveEventCallBack = reference to procedure (removeInfo : TRemoveEventInfo);
  449. TCalendarViewClassNamesCallback = reference to function(Info : TCalendarViewRenderInfo) : string;
  450. TCalendarViewMountCallback = reference to Procedure (Info : TCalendarViewRenderInfo);
  451. TDayHeaderClassNamesCallback = reference to function(Info : TDayHeaderRenderInfo) : string;
  452. TDayHeaderContentStrCallback = reference to function (Info : TDayHeaderRenderInfo) : string;
  453. TDayHeaderContentObjCallback = reference to function (Info : TDayHeaderRenderInfo) : TCalendarEventContentObj;
  454. TDayHeaderMountCallback = reference to Procedure (Info : TDayHeaderRenderInfo);
  455. TDayCellClassNamesCallback = reference to function(Info : TDayCellRenderInfo) : string;
  456. TDayCellContentStrCallback = reference to function (Info : TDayCellRenderInfo) : string;
  457. TDayCellContentObjCallback = reference to function (Info : TDayCellRenderInfo) : TCalendarEventContentObj;
  458. TDayCellMountCallback = reference to Procedure (Info : TDayCellRenderInfo);
  459. TSlotLabelClassNamesCallback = reference to function(Info : TSlotLabelRenderInfo) : string;
  460. TSlotLabelContentStrCallback = reference to function (Info : TSlotLabelRenderInfo) : string;
  461. TSlotLabelContentObjCallback = reference to function (Info : TSlotLabelRenderInfo) : TCalendarEventContentObj;
  462. TSlotLabelMountCallback = reference to Procedure (Info : TSlotLabelRenderInfo);
  463. TSlotLaneClassNamesCallback = reference to function(Info : TSlotLaneRenderInfo) : string;
  464. TSlotLaneContentStrCallback = reference to function (Info : TSlotLaneRenderInfo) : string;
  465. TSlotLaneContentObjCallback = reference to function (Info : TSlotLaneRenderInfo) : TCalendarEventContentObj;
  466. TSlotLaneMountCallback = reference to Procedure (Info : TSlotLaneRenderInfo);
  467. TweekNumberClassNamesCallback = reference to function(Info : TweekNumberRenderInfo) : string;
  468. TweekNumberContentStrCallback = reference to function (Info : TweekNumberRenderInfo) : string;
  469. TweekNumberContentObjCallback = reference to function (Info : TweekNumberRenderInfo) : TCalendarEventContentObj;
  470. TweekNumberMountCallback = reference to Procedure (Info : TweekNumberRenderInfo);
  471. TFullCalendarOptions = Class external name 'Object' (TJSObject)
  472. plugins : TStringDynArray;
  473. pluginRaw : TJSArray; external name 'plugins';
  474. rerenderDelay : NativeInt;
  475. initialDate : TJSDate;
  476. initialDateStr : string; external name 'initialDate';
  477. initialDateInt : nativeInt; external name 'initialDate';
  478. defaultAllDay : Boolean;
  479. defaultAllDayEventDuration : TDuration;
  480. defaultAllDayEventDurationStr : String; external name 'defaultAllDayEventDuration';
  481. defaultTimedEventDuration : TDuration;
  482. defaultTimedEventDurationStr : String; external name 'defaultTimedEventDuration';
  483. forceEventDuration : Boolean;
  484. eventDisplay : string;
  485. eventAdd : TAddEventCallBack;
  486. eventChange : TChangeEventCallBack;
  487. eventRemove : TRemoveEventCallBack;
  488. eventColor : String;
  489. eventBorderColor : String;
  490. eventTextColor : String;
  491. eventBackgroundColor : String;
  492. dateIncrement : TDuration;
  493. dateIncrementStr : string; external name 'dateIncrement';
  494. dateAlignment : String;
  495. validRange : TDateRange;
  496. headerToolbar : TCalendarHeaderFooterOptions;
  497. headerToolbarBool : Boolean; external name 'headerToolbar';
  498. footerToolbar : TCalendarHeaderFooterOptions;
  499. footerToolbarBool : Boolean; external name 'footerToolbar';
  500. titleFormat : TDateFormatter;
  501. titleFormatStr : string; external name 'titleFormat';
  502. titleFormatFunc : TDateFormatHandler; external name 'titleFormat';
  503. titleRangeSeparator : String;
  504. buttonText : TButtonText;
  505. buttonTextRec : TButtonTextRec;
  506. buttonIcons : TButtonIcons;
  507. buttonIconsRec : TButtonIconsRec;
  508. customButtons : TCustomButtonSpecs;
  509. customButtonsObj : TJSObject;
  510. themeSystem : string;
  511. bootstrapFontAwesome : TFontAwesomeSpec;
  512. bootstrapFontAwesomeRec : TFontAwesomeSpecRec;
  513. weekends : boolean;
  514. hiddenDays : TNativeIntDynArray;
  515. dayHeader : Boolean;
  516. dayHeaderFormat : TDateFormatter;
  517. dayHeaderClassNames : String;
  518. dayHeaderClassNamesFunc : TDayHeaderClassnamesCallback; external name 'dayHeaderClassNames';
  519. dayHeaderContent : TDayHeaderClassnamesCallback;
  520. dayHeaderContentStr : TDayHeaderContentStrCallback; external name 'dayHeaderContent';
  521. dayHeaderContentObj : TDayHeaderContentObjCallback; external name 'dayHeaderContent';
  522. dayHeaderDidMount : TDayHeaderMountCallBack;
  523. dayHeaderWillUnmount : TDayHeaderMountCallBack;
  524. dayCellClassNames : String;
  525. dayCellClassNamesFunc : TDayCellClassnamesCallback; external name 'dayCellClassNames';
  526. dayCellContent : TDayCellClassnamesCallback;
  527. dayCellContentStr : TDayCellContentStrCallback; external name 'dayCellContent';
  528. dayCellContentObj : TDayCellContentObjCallback; external name 'dayCellContent';
  529. dayCellDidMount : TDayCellMountCallBack;
  530. dayCellWillUnmount : TDayCellMountCallBack;
  531. slotDuration : TDuration;
  532. slotDurationStr : string; external name 'slotDuration';
  533. slotLabelInterval : TDuration;
  534. slotLabelIntervalStr : string; external name 'slotLabelInterval';
  535. slotLabelFormat : TDateFormatter;
  536. slotLabelFormatStr : String;
  537. slotMinTime : TDuration;
  538. slotMinTimeStr : string; external name 'slotMinTime';
  539. slotMaxTime : TDuration;
  540. slotMaxTimeStr : string; external name 'slotMaxTime';
  541. slotMinWidth : Integer;
  542. slotLabelClassNames : String;
  543. slotLabelClassNamesFunc : TSlotLabelClassNamesCallback; external name 'slotLabelClassNames';
  544. slotLabelContent : String;
  545. slotLabelContentObj : TSlotLabelContentObj; external name 'slotLabelContent';
  546. slotLabelContentObjFunc : TSlotLabelContentObjCallback; external name 'slotLabelContent';
  547. slotLabelContentStrFunc : TSlotLabelContentStrCallback; external name 'slotLabelContent';
  548. slotLabelDidMount : TSlotLabelMountCallback;
  549. slotLabelWillUnmout : TSlotLabelMountCallback;
  550. slotLaneClassNames : String;
  551. slotLaneClassNamesFunc : TSlotLaneClassNamesCallback; external name 'slotLaneClassNames';
  552. slotLaneContent : String;
  553. slotLaneContentObj : TSlotLaneContentObj; external name 'slotLaneContent';
  554. slotLaneContentObjFunc : TSlotLaneContentObjCallback; external name 'slotLaneContent';
  555. slotLaneContentStrFunc : TSlotLaneClassNamesCallback; external name 'slotLaneContent';
  556. slotLaneDidMount : TSlotLaneMountCallback;
  557. slotLaneWillUnmout : TSlotLaneMountCallback;
  558. weekText : string;
  559. weekNumberFormat : TDateFormatter;
  560. weekNumberFormatStr : String; external name 'weekNumberFormat';
  561. weekNumberClassNames : String;
  562. weekNumberClassNamesFunc : TweekNumberClassNamesCallback; external name 'weekNumberClassNames';
  563. weekNumberContent : String;
  564. weekNumberContentObj : TweekNumberContentObj; external name 'weekNumberContent';
  565. weekNumberContentObjFunc : TweekNumberContentObjCallback; external name 'weekNumberContent';
  566. weekNumberContentStrFunc : TweekNumberClassNamesCallback; external name 'weekNumberContent';
  567. weekNumberDidMount : TweekNumberMountCallback;
  568. weekNumberWillUnmout : TweekNumberMountCallback;
  569. scrollTime : TDuration;
  570. scrollTimeStr : string; external name 'scrollTime';
  571. firstDay : Integer;
  572. locale : string;
  573. dir : string;
  574. height : Integer;
  575. heightStr : String; external name 'height';
  576. heightFunc : THeightHandler; external name 'height';
  577. contentHeight : Integer;
  578. contentHeightStr : String; external name 'contentHeight';
  579. contentHeightFunc : THeightHandler; external name 'contentHeight';
  580. aspectRatio : Double;
  581. handleWindoResize : Boolean;
  582. windowResizeDelay : Integer;
  583. showNonCurrentDates : Boolean;
  584. fixedWeekCount : Boolean;
  585. businessHours : TBusinessHoursSpec;
  586. businessHoursBool : Boolean; external name 'businessHours';
  587. businessHoursArray : TBusinessHoursSpecArray; external name 'businessHours';
  588. nowIndicator : Boolean;
  589. now : TJSDate;
  590. nowStr : string; external name 'now';
  591. nowInt : nativeInt; external name 'now';
  592. nowFunc : TDateFunction; external name 'now';
  593. eventLimit : Boolean;
  594. eventLimitInt : Integer; external name 'eventLimit';
  595. events : TBaseCalendarEventArray;
  596. eventsStr : string; external name 'events'; // JSON feed
  597. eventsFunc : TCalendarEventGenerator; external name 'events'; // JSON feed
  598. eventsJSONFeed : TJSONFeedSpec; external name 'events'; // JSON feed
  599. eventsArr : TCalendarEventArray; external name 'events'; // JSON feed
  600. eventsObjList : TJSObjectDynArray ; external name 'events'; // Roll your own
  601. eventSources : TCalendarEventSourceArray;
  602. eventClassNames : String;
  603. eventClassNamesFunc : TCalendarEventClassNamesCallback; external name 'eventClassNames';
  604. eventContent : String;
  605. eventContentObj : TCalendarEventContentObj; external name 'eventContent';
  606. eventContentObjFunc : TCalendarEventContentCallback; external name 'eventContent';
  607. eventContentStrFunc : TCalendarEventClassNamesCallback; external name 'eventContent';
  608. eventDidMount : TCalendarEventMountCallback;
  609. eventWillUnmout : TCalendarEventMountCallback;
  610. eventTimeFormat : TDateFormatter;
  611. eventOrder : String;
  612. eventOrderArr : TStringDynArray; external name 'eventOrder';
  613. eventOrderFunc : TEventSortCallBack; external name 'eventOrder';
  614. progressiveEventRendering : Boolean;
  615. displayEventTime : Boolean;
  616. displayEventEnd: Boolean;
  617. nextDayTreshold : String;
  618. startParam : string;
  619. endParam : string;
  620. timeZoneParam : string;
  621. timeZone : string;
  622. lazyFetching : Boolean;
  623. loading : TCalendarLoadingCallback;
  624. selectable : boolean;
  625. selectMirror : Boolean;
  626. unselectAuto : Boolean;
  627. unselectCancel : string;
  628. selectOverlap : boolean;
  629. selectOverlapFunc : TSelectOverlapHandler; external name 'selectOverlap';
  630. selectAllow : TSelectAllowHandler;
  631. selectMinDistance : Integer;
  632. selectConstraint: TBusinessHoursSpec;
  633. eventClick : TEventMouseEventHandler;
  634. eventMouseEnter : TEventMouseEventHandler;
  635. eventMouseLeave : TEventMouseEventHandler;
  636. listDayFormat : TDateFormatter;
  637. listDayBool : Boolean; external name 'listDayFormat';
  638. listDayAltFormat : TDateFormatter;
  639. listDayAltBool : Boolean; external name 'listDayAltFormat';
  640. noEventsMessage : String;
  641. weekNumbers : Boolean;
  642. dayMaxEvents : Integer;
  643. dayMaxEventsBool : Boolean; external name 'dayMaxEvents';
  644. initialView : string;
  645. viewClassNames : String;
  646. viewClassNamesFunc : TCalendarViewClassNamesCallback; external name 'eventClassNames';
  647. viewDidMount : TCalendarViewMountCallback;
  648. viewWillUnmount : TCalendarViewMountCallback;
  649. end;
  650. { TFullCalendarView }
  651. TDateSelector = Class external name 'Object' (TJSObject)
  652. start : TJSDate;
  653. startStr : string; external name 'start';
  654. startInt : NativeInt; external name 'start';
  655. end_ : TJSDate;
  656. endStr : string; external name 'end';
  657. endInt : NativeInt; external name 'end';
  658. allDay : Boolean;
  659. resourceId : String;
  660. end;
  661. TFullCalendarView = Class external name 'Object' (TJSObject)
  662. private
  663. FType: string; external name 'type';
  664. Public
  665. title : string;
  666. activeStart : TJSDate;
  667. activeEnd : TJSDate;
  668. currentStart : TJSDate;
  669. currentEnd : TJSDate;
  670. Property type_ : string read FType;
  671. end;
  672. TFullCalendarEventInfo = record
  673. view : TFullCalendarView;
  674. el : TJSHTMLElement;
  675. end;
  676. TDayRenderInfo = record
  677. date : TJSDate;
  678. view : TFullCalendarView;
  679. el : TJSHTMLElement;
  680. end;
  681. TDateClickInfo = record
  682. date : TJSDate;
  683. dateStr : string;
  684. allDay : Boolean;
  685. dayEl : TJSHTMLElement;
  686. jsEvent : TJSEvent;
  687. view : TFullCalendarView;
  688. resource : TCalendarResource;
  689. end;
  690. TDateSelectInfo = record
  691. start : TJSDate;
  692. startStr : string;
  693. end_ : TJSDate; external name 'end';
  694. endStr : string;
  695. allDay : Boolean;
  696. jsEvent : TJSEvent;
  697. view : TFullCalendarView;
  698. resource : TCalendarResource;
  699. end;
  700. TFullCalendarEvent = reference to function(Info :TFullCalendarEventInfo) : Boolean;
  701. TDayRenderEvent = reference to function(Info : TDayrenderInfo) : Boolean;
  702. TViewEvent = reference to function(View : TFullCalendarView) : Boolean;
  703. TDateClickEvent = reference to procedure (Info: TDateClickInfo);
  704. TDateSelectEvent = reference to procedure (Info: TDateSelectInfo);
  705. TDateUnSelectEvent = reference to procedure (event: TJSEvent; View : TFullCalendarView);
  706. TFullCalendar = Class external name 'FullCalendar.Calendar' (TJSObject)
  707. Constructor new(el : TJSHTMLElement; Options : TFullCalendarOptions) ; // external name 'Calendar';
  708. class function Calendar(el : TJSHTMLElement; Options : TFullCalendarOptions) : TFullCalendar; static;
  709. function getOption(aName : String) : JSValue;
  710. procedure setOption(aName : string; aValue : JSValue);
  711. procedure render;
  712. procedure destroy;
  713. Procedure batchRendering(aBatch : TProcedural);
  714. Procedure prev;
  715. Procedure next;
  716. Procedure prevYear;
  717. Procedure nextYear;
  718. Procedure today;
  719. Procedure gotoDate(aDate : string); overload;
  720. Procedure gotoDate(aDate : NativeInt); overload;
  721. Procedure gotoDate(aDate : TJSDate); overload;
  722. Procedure incrementDate(aDuration : TDuration); overload;
  723. Procedure incrementDate(aDuration : string);overload;
  724. Procedure incrementDate(aDuration : NativeInt);overload;
  725. Procedure on_(eventName : string; aHandler : TFullCalendarEvent); external name 'on';
  726. Procedure on_(eventName : string; aHandler : TDayRenderEvent);external name 'on';
  727. Procedure on_(eventName : string; aHandler : TViewEvent);external name 'on';
  728. Procedure on_(eventName : string; aHandler : TDateSelectEvent);external name 'on';
  729. Procedure on_(eventName : string; aHandler : TDateClickEvent);external name 'on';
  730. Procedure on_(eventName : string; aHandler : TDateUnSelectEvent);external name 'on';
  731. Procedure off(eventName : string); overload;
  732. Procedure off(eventName : string; aHandler : TFullCalendarEvent); overload;
  733. Procedure off(eventName : string; aHandler : TDayRenderEvent);
  734. Procedure off(eventName : string; aHandler : TViewEvent);
  735. Procedure off(eventName : string; aHandler : TDateClickEvent);
  736. Procedure off(eventName : string; aHandler : TDateUnSelectEvent);
  737. function GetDate : TJSDate;
  738. function View : TFullCalendarView;
  739. procedure changeView(aViewName : string); overload;
  740. procedure changeView(aViewName : string; aDate : TJSDate); overload;
  741. procedure changeView(aViewName : string; aDate : String); overload;
  742. procedure changeView(aViewName : string; aDate : NativeInt); overload;
  743. procedure changeView(aViewName : string; aDate : TDateRange); overload;
  744. procedure scrollToTime(aTime : TDuration); overload;
  745. procedure scrollToTime(aTime : String); overload;
  746. procedure scrollToTime(aTime : NativeInt); overload;
  747. Procedure updateSize;
  748. Function getEvents : TCalendarEventArray;
  749. Function getEvent(aID : NativeInt) :TCalendarEvent; overload;
  750. Function getEvent(aID : String) : TCalendarEvent; overload;
  751. Function addEvent(aEvent : TBaseCalendarEvent) : TCalendarEvent; overload;
  752. Function addEvent(aEvent : TBaseCalendarEvent; Source : String) : TCalendarEvent; overload;
  753. Function addEvent(aEvent : TBaseCalendarEvent; Source : TBaseCalendarEvent) : TCalendarEvent; overload;
  754. Function getEventSources : TCalendarEventSourceArray;
  755. Function getEventSourcebyId(aID: String) : TCalendarEventSource;
  756. Procedure addEventSource(aSource : TCalendarEventGenerator);
  757. Procedure addEventSource(aSource : TJSONFeedSpec);
  758. Procedure addEventSource(aSource : TCalendarEventArray);
  759. Procedure addEventSource(aSource : TBaseCalendarEventArray);
  760. Procedure addEventSource(aSource : String);
  761. procedure refetchEvents;
  762. procedure Select(aStart : TJSDate; aEnd : TJSDate);
  763. procedure Select(aStart : String; aEnd : String);
  764. procedure Select(aStart : NativeInt; aEnd : NativeInt);
  765. procedure Select(aStart : TJSDate);
  766. procedure Select(aStart : String);
  767. procedure Select(aStart : NativeInt);
  768. procedure Select(aSel : TDateSelector);
  769. procedure unselect;
  770. Function getAvailableLocaleCodes : TStringDynArray;
  771. Property Date : TJSDate Read GetDate Write GotoDate;
  772. end;
  773. implementation
  774. { TBaseCalendarEventHelper }
  775. class function TBaseCalendarEventHelper.event(const aTitle : String; aStart,aEnd : TDateTime) : TBaseCalendarEvent;
  776. begin
  777. Result:=TBaseCalendarEvent.new;
  778. Result.title:=aTitle;
  779. Result.Start:=DateTimeToJSDate(aStart);
  780. Result.end_:=DateTimeToJSDate(aEnd);
  781. end;
  782. end.