libfullcalendar5.pp 33 KB

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