libflatpickr.pas 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. unit libflatpickr;
  2. {$mode objfpc}
  3. {$modeswitch externalclass}
  4. interface
  5. uses types, js, web, libjquery;
  6. Type
  7. TJSDateDynArray = Array of TJSDate;
  8. TJSHTMLElementDynArray = Array of TJSHTMLElement;
  9. TJSHTMLInputElementDynArray = Array of TJSHTMLInputElement;
  10. TJSNodeDynArray = Array of TJSNode;
  11. TJSHTMLDivElement = TJSHTMLElement;
  12. TJSHTMLSpanElement = TJSHTMLElement;
  13. TFPRevFormat = JSValue;
  14. TFPFormats = JSValue;
  15. TFPTokenRegex = JSValue;
  16. TFPLocaleKey = string;
  17. TFPDateOption = jsValue;
  18. TFPDateOptionArray = array of TFPDateOption;
  19. TFPPositionFunction = reference to procedure(aSelf: TJSObject; customElement: TJSHTMLElement);
  20. TFPErrorHandler = reference to procedure (e: TJSError);
  21. TFPWeekdayNames = Class external name 'Object' (TJSObject)
  22. shorthand : array[0..6] of string;
  23. longhand : array[0..6] of string;
  24. end;
  25. TFPMonthNames = Class external name 'Object' (TJSObject)
  26. shorthand : array[0..11] of string;
  27. longhand : array[0..11] of string;
  28. end;
  29. TFPDaysInmonth = Array [0..11] of Integer;
  30. TFPOrdinalFunction = reference to function (nth: integer) : string;
  31. TFPAMPMArray = array[0..1] of string;
  32. TFPLocale = Class external name 'Object' (TJSObject)
  33. weekdays : TFPWeekDayNames;
  34. months : TFPMonthNames;
  35. daysInMonth : TFPDaysInMonth;
  36. firstDayOfWeek: Integer;
  37. ordinal: TFPOrdinalfunction;
  38. rangeSeparator: string;
  39. weekAbbreviation: string;
  40. scrollTitle: string;
  41. toggleTitle: string;
  42. amPM: TFPAMPMArray;
  43. yearAriaLabel: string;
  44. monthAriaLabel: string;
  45. hourAriaLabel: string;
  46. minuteAriaLabel: string;
  47. time_24hr: boolean;
  48. end;
  49. TFPDateFormatHandler = reference to function (date: TJSDate; format: string; locale: TFPLocale) : String;
  50. TFPDateParserHandler = reference to function (date: string; format: string) : TJSDate;
  51. TFPHook = reference to Procedure (dates : TJSDateDynArray; CurrentDateString : String; aSelf : TJSObject; Data : JSValue);
  52. TFPHookDynArray = Array of TFPHook;
  53. TFPDateToWeekHandler = reference to function (adate: TJSDate) : string;
  54. TFlatPickrOptions = Class external name 'Object' (TJSObject)
  55. allowInput: boolean;
  56. allowInvalidPreload: boolean;
  57. altFormat: string;
  58. altInput: boolean;
  59. altInputClass: string;
  60. animate: boolean;
  61. appendTo: TJSHTMLElement;
  62. ariaDateFormat: string;
  63. autoFillDefaultTime: boolean;
  64. clickOpens: boolean;
  65. closeOnSelect: boolean;
  66. conjunction: string;
  67. dateFormat: string;
  68. defaultDate: TFPDateOption;
  69. defaultDateArray : TFPDateOptionArray; external name 'defaultDate';
  70. defaultHour: Integer;
  71. defaultMinute: Integer;
  72. defaultSeconds: Integer;
  73. disable: JSValue;
  74. disableMobile: boolean;
  75. enable: JSValue;
  76. enableSeconds: boolean;
  77. enableTime: boolean;
  78. errorHandler: TFPErrorHandler;
  79. formatDate: TFPDateFormatHandler;
  80. getWeek : TFPDateToWeekHandler;
  81. hourIncrement: integer;
  82. ignoredFocusElements: TJSHTMLElementDynArray;
  83. inline_: boolean; external name 'inline';
  84. locale: string;
  85. maxDate: TFPDateOption;
  86. maxTime: TFPDateOption;
  87. minDate: TFPDateOption;
  88. minTime: TFPDateOption;
  89. minuteIncrement: integer;
  90. mode: string;
  91. monthSelectorType: string;
  92. nextArrow: string;
  93. noCalendar: boolean;
  94. now: TFPDateOption;
  95. onChange: TFPHook;
  96. onChangeArray : TFPHookDynArray; external name 'onChange';
  97. onClose: TFPHook;
  98. onCloseArray : TFPHookDynArray; external name 'onClose';
  99. onDayCreate: TFPHook;
  100. onDayCreateArray : TFPHookDynArray; external name 'onDayCreate';
  101. onDestroy: TFPHook;
  102. onDestroyArray : TFPHookDynArray; external name 'onDestroy';
  103. onKeyDown: TFPHook;
  104. onKeyDownArray : TFPHookDynArray; external name 'onKeyDown';
  105. onMonthChange: TFPHook;
  106. onMonthChangeArray : TFPHookDynArray; external name 'onMonthChange';
  107. onOpen: TFPHook;
  108. onOpenArray : TFPHookDynArray; external name 'onOpen';
  109. onParseConfig: TFPHook;
  110. onParseConfigArray : TFPHookDynArray; external name 'onParseConfig';
  111. onReady: TFPHook;
  112. onReadyArray : TFPHookDynArray; external name 'onReady';
  113. onValueUpdate: TFPHook;
  114. onValueUpdateArray : TFPHookDynArray; external name 'onValueUpdate';
  115. onYearChange: TFPHook;
  116. onYearChangeArray : TFPHookDynArray; external name 'onYearChange';
  117. onPreCalendarPosition: TFPHook;
  118. onPreCalendarPositionArray : TFPHookDynArray; external name 'onPreCalendarPosition';
  119. parseDate: TFPDateParserHandler;
  120. plugins: TJSValueDynArray;
  121. position: String;
  122. positionFunction : TFPPositionFunction; external name 'position';
  123. positionElement: TJSHTMLElement;
  124. prevArrow: string;
  125. shorthandCurrentMonth: boolean;
  126. static_: boolean; external name 'static';
  127. showMonths: Integer;
  128. time_24hr: boolean;
  129. weekNumbers: boolean;
  130. wrap: boolean;
  131. end;
  132. TFlatPickr = Class external name 'Object' (TJSObject)
  133. // Formatting
  134. revFormat: TFPRevFormat;
  135. formats: TFPFormats;
  136. tokenRegex: TFPTokenRegex;
  137. // elements
  138. element: TJSHTMLElement;
  139. input: TJSHTMLInputElement;
  140. altInput: TJSHTMLInputElement;
  141. _input: TJSHTMLInputElement;
  142. mobileInput: TJSHTMLInputElement;
  143. mobileFormatStr: string;
  144. selectedDateElem: TJSHTMLElement;
  145. todayDateElem: TJSHTMLElement;
  146. _positionElement: TJSHTMLElement;
  147. weekdayContainer: TJSHTMLDivElement;
  148. calendarContainer: TJSHTMLDivElement;
  149. innerContainer: TJSHTMLDivElement;
  150. rContainer: TJSHTMLDivElement;
  151. daysContainer: TJSHTMLDivElement;
  152. days: TJSHTMLDivElement;
  153. weekWrapper: TJSHTMLDivElement;
  154. weekNumbers: TJSHTMLDivElement;
  155. // month nav
  156. monthNav: TJSHTMLDivElement;
  157. monthsDropdownContainer: TJSHTMLSelectElement;
  158. yearElements: TJSHTMLInputElementDynArray;
  159. monthElements: TJSHTMLSpanElement;
  160. // month nav getters
  161. currentYearElement: TJSHTMLInputElement;
  162. currentMonthElement: TJSHTMLSpanElement;
  163. // month nav arrows
  164. _hidePrevMonthArrow: boolean;
  165. _hideNextMonthArrow: boolean;
  166. prevMonthNav: TJSHTMLElement;
  167. nextMonthNav: TJSHTMLElement;
  168. timeContainer: TJSHTMLDivElement;
  169. hourElement: TJSHTMLInputElement;
  170. minuteElement: TJSHTMLInputElement;
  171. secondElement: TJSHTMLInputElement;
  172. amPM: TJSHTMLSpanElement;
  173. pluginElements: TJSNodeDynArray;
  174. minRangeDate: TJSDate;
  175. maxRangeDate: TJSDate;
  176. now: TJSDate;
  177. latestSelectedDateObj: TJSDate;
  178. _selectedDateObj : TJSDate;
  179. selectedDates: TJSDateDynArray;
  180. _initialDate: TJSDate;
  181. // State
  182. config: TJSObject;
  183. loadedPlugins: TJSstringDynArray;
  184. l10n: TFPLocale;
  185. currentYear: integer;
  186. currentMonth: integer;
  187. isOpen: boolean;
  188. isMobile: boolean;
  189. minDateHasTime: boolean;
  190. maxDateHasTime: boolean;
  191. // Methods
  192. procedure changeMonth (value: Integer; isOffset: boolean; fromKeyboard: boolean);
  193. procedure changeMonth (value: Integer; isOffset: boolean);
  194. procedure changeMonth (value: Integer);
  195. procedure changeYear (year: integer);
  196. procedure clear (emitChangeEvent: boolean; toInitial: boolean);
  197. procedure clear (emitChangeEvent: boolean);
  198. procedure clear ();
  199. procedure close ();
  200. procedure destroy ();
  201. function isEnabled (date: TFPDateOption; timeless: boolean) : boolean;
  202. function isEnabled (date: TFPDateOption) : boolean;
  203. procedure jumpToDate (date: TFPDateOption; triggerChange: boolean);
  204. procedure open (e: TJSEvent; positionElement: TJSHTMLElement);
  205. procedure open (e: TJSEvent);
  206. procedure redraw ();
  207. procedure set_ (option: string; value: JSValue) ; external name 'set';
  208. procedure setDate (date: TFPDateOption; triggerChange: boolean; format: string) ;
  209. procedure setDate (date: TFPDateOption; triggerChange: boolean) ;
  210. procedure setDate (date: TFPDateOption) ;
  211. procedure setDate (date: TFPDateOptionArray; triggerChange: boolean; format: string) ;
  212. procedure setDate (date: TFPDateOptionArray; triggerChange: boolean) ;
  213. procedure setDate (date: TFPDateOptionArray);
  214. procedure toggle;
  215. function pad (num: string ) : string;
  216. function pad (num: integer ) : string;
  217. function parseDate (adate: TJSDate; givenFormat: string; timeless: boolean) : TJSDate;
  218. function parseDate (adate: string; givenFormat: string; timeless: boolean) : TJSDate;
  219. function parseDate (adate: integer; givenFormat: string; timeless: boolean) : TJSDate;
  220. function parseDate (adate: TJSDate; givenFormat: string) : TJSDate;
  221. function parseDate (adate: string; givenFormat: string) : TJSDate;
  222. function parseDate (adate: integer; givenFormat: string) : TJSDate;
  223. function formatDate (dateObj: TJSDate; frmt: string) : string;
  224. end;
  225. TFlatPickrArray = array of TFlatPickr;
  226. { JQueryFlatPickrHelper }
  227. JQueryFlatPickrHelper = class helper for TJQuery
  228. Function flatpickr (aOptions : TFlatPickrOptions) : TFlatPickr; external name 'flatpickr';
  229. Function flatpickr () : TFlatPickr; external name 'flatpickr';
  230. end;
  231. { JJSElementFlatPickrHelper }
  232. JJSElementFlatPickrHelper = class helper for TJSElement
  233. Function _flatpickr : TFlatPickr;
  234. end;
  235. Function flatpickr(aElement : TJSHTMLElement) : TFlatPickr; external name 'flatpickr';
  236. Function flatpickr(aElement : TJSHTMLElement; aOptions : TFlatPickrOptions) : TFlatPickr; external name 'flatpickr';
  237. Function flatpickr(aElementID : String) : TFlatPickr; external name 'flatpickr';
  238. Function flatpickr(aElementID : String; aOptions : TFlatPickrOptions) : TFlatPickr; external name 'flatpickr';
  239. Function multiflatpickr(const aSelector : String) : TFlatPickrArray; external name 'flatpickr';
  240. Function multiflatpickr(const aSelector : String; aOptions : TFlatPickrOptions) : TFlatPickrArray; external name 'flatpickr';
  241. implementation
  242. { JQueryFlatPickrHelper }
  243. { JJSElementFlatPickrHelper }
  244. function JJSElementFlatPickrHelper._flatpickr: TFlatPickr;
  245. begin
  246. Result:=TFlatPickr(Self.Properties['_flatpickr']);
  247. end;
  248. end.