Jelajahi Sumber

* flatpickr lib

michael 4 tahun lalu
induk
melakukan
3435ab3e7b
1 mengubah file dengan 293 tambahan dan 0 penghapusan
  1. 293 0
      packages/flatpickr/libflatpickr.pas

+ 293 - 0
packages/flatpickr/libflatpickr.pas

@@ -0,0 +1,293 @@
+unit libflatpickr;
+
+{$mode objfpc}
+{$modeswitch externalclass}
+
+interface
+
+uses types, js, web, libjquery;
+
+Type
+  TJSDateDynArray = Array of TJSDate;
+  TJSHTMLElementDynArray = Array of TJSHTMLElement;
+  TJSHTMLInputElementDynArray = Array of TJSHTMLInputElement;
+  TJSNodeDynArray = Array of TJSNode;
+  TJSHTMLDivElement = TJSHTMLElement;
+  TJSHTMLSpanElement = TJSHTMLElement;
+  TFPRevFormat = JSValue;
+  TFPFormats = JSValue;
+  TFPTokenRegex = JSValue;
+
+  TFPLocaleKey = string;
+
+  TFPDateOption = jsValue;
+  TFPDateOptionArray = array of TFPDateOption;
+  TFPPositionFunction = reference to procedure(aSelf: TJSObject; customElement: TJSHTMLElement);
+
+  TFPErrorHandler = reference to procedure (e: TJSError);
+
+  TFPWeekdayNames = Class external name 'Object' (TJSObject)
+    shorthand : array[0..6] of string;
+    longhand : array[0..6] of string;
+  end;
+  TFPMonthNames = Class external name 'Object' (TJSObject)
+    shorthand : array[0..11] of string;
+    longhand : array[0..11] of string;
+  end;
+  TFPDaysInmonth = Array [0..11] of Integer;
+  TFPOrdinalFunction = reference to function (nth: integer) : string;
+  TFPAMPMArray = array[0..1] of string;
+
+  TFPLocale = Class external name 'Object' (TJSObject)
+    weekdays : TFPWeekDayNames;
+    months : TFPMonthNames;
+    daysInMonth : TFPDaysInMonth;
+    firstDayOfWeek: Integer;
+    ordinal: TFPOrdinalfunction;
+    rangeSeparator: string;
+    weekAbbreviation: string;
+    scrollTitle: string;
+    toggleTitle: string;
+    amPM: TFPAMPMArray;
+    yearAriaLabel: string;
+    monthAriaLabel: string;
+    hourAriaLabel: string;
+    minuteAriaLabel: string;
+    time_24hr: boolean;
+  end;
+
+  TFPDateFormatHandler = reference to function (date: TJSDate; format: string; locale: TFPLocale) : String;
+  TFPDateParserHandler = reference to function (date: string; format: string) : TJSDate;
+  TFPHook = reference to Procedure (dates : TJSDateDynArray; CurrentDateString : String; aSelf : TJSObject; Data : JSValue);
+  TFPHookDynArray = Array of TFPHook;
+  TFPDateToWeekHandler = reference to function (adate: TJSDate) : string;
+
+  TFlatPickrOptions = Class external name 'Object' (TJSObject)
+    allowInput: boolean;
+    allowInvalidPreload: boolean;
+    altFormat: string;
+    altInput: boolean;
+    altInputClass: string;
+    animate: boolean;
+    appendTo: TJSHTMLElement;
+    ariaDateFormat: string;
+    autoFillDefaultTime: boolean;
+    clickOpens: boolean;
+    closeOnSelect: boolean;
+    conjunction: string;
+    dateFormat: string;
+    defaultDate: TFPDateOption;
+    defaultDateArray : TFPDateOptionArray; external name 'defaultDate';
+    defaultHour: Integer;
+    defaultMinute: Integer;
+    defaultSeconds: Integer;
+    disable: JSValue;
+    disableMobile: boolean;
+    enable: JSValue;
+    enableSeconds: boolean;
+    enableTime: boolean;
+    errorHandler: TFPErrorHandler;
+    formatDate: TFPDateFormatHandler;
+    getWeek : TFPDateToWeekHandler;
+    hourIncrement: integer;
+    ignoredFocusElements: TJSHTMLElementDynArray;
+    inline_: boolean; external name 'inline';
+    locale: string;
+    maxDate: TFPDateOption;
+    maxTime: TFPDateOption;
+    minDate: TFPDateOption;
+    minTime: TFPDateOption;
+    minuteIncrement: integer;
+    mode: string;
+    monthSelectorType: string;
+    nextArrow: string;
+    noCalendar: boolean;
+    now: TFPDateOption;
+    onChange: TFPHook;
+    onChangeArray : TFPHookDynArray; external name 'onChange';
+    onClose: TFPHook;
+    onCloseArray : TFPHookDynArray; external name 'onClose';
+    onDayCreate: TFPHook;
+    onDayCreateArray : TFPHookDynArray; external name 'onDayCreate';
+    onDestroy: TFPHook;
+    onDestroyArray : TFPHookDynArray; external name 'onDestroy';
+    onKeyDown: TFPHook;
+    onKeyDownArray : TFPHookDynArray; external name 'onKeyDown';
+    onMonthChange: TFPHook;
+    onMonthChangeArray : TFPHookDynArray; external name 'onMonthChange';
+    onOpen: TFPHook;
+    onOpenArray : TFPHookDynArray; external name 'onOpen';
+    onParseConfig: TFPHook;
+    onParseConfigArray : TFPHookDynArray; external name 'onParseConfig';
+    onReady: TFPHook;
+    onReadyArray : TFPHookDynArray; external name 'onReady';
+    onValueUpdate: TFPHook;
+    onValueUpdateArray : TFPHookDynArray; external name 'onValueUpdate';
+    onYearChange: TFPHook;
+    onYearChangeArray : TFPHookDynArray; external name 'onYearChange';
+    onPreCalendarPosition: TFPHook;
+    onPreCalendarPositionArray : TFPHookDynArray; external name 'onPreCalendarPosition';
+    parseDate: TFPDateParserHandler;
+    plugins: TJSValueDynArray;
+    position: String;
+    positionFunction : TFPPositionFunction; external name 'position';
+    positionElement: TJSHTMLElement;
+    prevArrow: string;
+    shorthandCurrentMonth: boolean;
+    static_: boolean; external name 'static';
+    showMonths: Integer;
+    time_24hr: boolean;
+    weekNumbers: boolean;
+    wrap: boolean;
+  end;
+
+  TFlatPickr = Class external name 'Object' (TJSObject)
+    // Formatting
+
+    revFormat: TFPRevFormat;
+    formats: TFPFormats;
+    tokenRegex: TFPTokenRegex;
+
+    // elements
+    element: TJSHTMLElement;
+    input: TJSHTMLInputElement;
+    altInput: TJSHTMLInputElement;
+    _input: TJSHTMLInputElement;
+    mobileInput: TJSHTMLInputElement;
+    mobileFormatStr: string;
+
+    selectedDateElem: TJSHTMLElement;
+    todayDateElem: TJSHTMLElement;
+
+    _positionElement: TJSHTMLElement;
+    weekdayContainer: TJSHTMLDivElement;
+    calendarContainer: TJSHTMLDivElement;
+    innerContainer: TJSHTMLDivElement;
+    rContainer: TJSHTMLDivElement;
+    daysContainer: TJSHTMLDivElement;
+    days: TJSHTMLDivElement;
+
+    weekWrapper: TJSHTMLDivElement;
+    weekNumbers: TJSHTMLDivElement;
+
+    // month nav
+    monthNav: TJSHTMLDivElement;
+
+    monthsDropdownContainer: TJSHTMLSelectElement;
+
+    yearElements: TJSHTMLInputElementDynArray;
+    monthElements: TJSHTMLSpanElement;
+
+    // month nav getters
+    currentYearElement: TJSHTMLInputElement;
+    currentMonthElement: TJSHTMLSpanElement;
+
+    // month nav arrows
+    _hidePrevMonthArrow: boolean;
+    _hideNextMonthArrow: boolean;
+    prevMonthNav: TJSHTMLElement;
+    nextMonthNav: TJSHTMLElement;
+
+    timeContainer: TJSHTMLDivElement;
+    hourElement: TJSHTMLInputElement;
+    minuteElement: TJSHTMLInputElement;
+    secondElement: TJSHTMLInputElement;
+    amPM: TJSHTMLSpanElement;
+
+    pluginElements: TJSNodeDynArray;
+
+    minRangeDate: TJSDate;
+    maxRangeDate: TJSDate;
+    now: TJSDate;
+    latestSelectedDateObj: TJSDate;
+    _selectedDateObj : TJSDate;
+    selectedDates: TJSDateDynArray;
+    _initialDate: TJSDate;
+
+    // State
+    config: TJSObject;
+    loadedPlugins: TJSstringDynArray;
+    l10n: TFPLocale;
+
+    currentYear: integer;
+    currentMonth: integer;
+
+    isOpen: boolean;
+    isMobile: boolean;
+
+    minDateHasTime: boolean;
+    maxDateHasTime: boolean;
+
+    // Methods
+    procedure changeMonth (value: Integer; isOffset: boolean; fromKeyboard: boolean);
+    procedure changeMonth (value: Integer; isOffset: boolean);
+    procedure changeMonth (value: Integer);
+    procedure changeYear (year: integer);
+    procedure clear (emitChangeEvent: boolean; toInitial: boolean);
+    procedure clear (emitChangeEvent: boolean);
+    procedure clear ();
+    procedure close ();
+    procedure destroy ();
+    function isEnabled (date: TFPDateOption; timeless: boolean) : boolean;
+    function isEnabled (date: TFPDateOption) : boolean;
+    procedure jumpToDate (date: TFPDateOption; triggerChange: boolean);
+    procedure open (e: TJSEvent; positionElement: TJSHTMLElement);
+    procedure open (e: TJSEvent);
+    procedure redraw ();
+    procedure set_ (option: string; value: JSValue) ; external name 'set';
+    procedure setDate (date: TFPDateOption; triggerChange: boolean; format: string) ;
+    procedure setDate (date: TFPDateOption; triggerChange: boolean) ;
+    procedure setDate (date: TFPDateOption) ;
+    procedure setDate (date: TFPDateOptionArray; triggerChange: boolean; format: string) ;
+    procedure setDate (date: TFPDateOptionArray; triggerChange: boolean) ;
+    procedure setDate (date: TFPDateOptionArray);
+    procedure toggle;
+
+    function pad (num: string ) : string;
+    function pad (num: integer ) : string;
+    function parseDate (adate: TJSDate; givenFormat: string; timeless: boolean) : TJSDate;
+    function parseDate (adate: string; givenFormat: string; timeless: boolean) : TJSDate;
+    function parseDate (adate: integer; givenFormat: string; timeless: boolean) : TJSDate;
+    function parseDate (adate: TJSDate; givenFormat: string) : TJSDate;
+    function parseDate (adate: string; givenFormat: string) : TJSDate;
+    function parseDate (adate: integer; givenFormat: string) : TJSDate;
+    function formatDate (dateObj: TJSDate; frmt: string) : string;
+  end;
+  TFlatPickrArray = array of TFlatPickr;
+
+  { JQueryFlatPickrHelper }
+
+  JQueryFlatPickrHelper = class helper for TJQuery
+    Function flatpickr (aOptions : TFlatPickrOptions) : TFlatPickr; external name 'flatpickr';
+    Function flatpickr () : TFlatPickr; external name 'flatpickr';
+  end;
+
+  { JJSElementFlatPickrHelper }
+
+  JJSElementFlatPickrHelper = class helper for TJSElement
+    Function _flatpickr : TFlatPickr;
+  end;
+
+
+Function flatpickr(aElement : TJSHTMLElement) : TFlatPickr; external name 'flatpickr';
+Function flatpickr(aElement : TJSHTMLElement; aOptions : TFlatPickrOptions) : TFlatPickr; external name 'flatpickr';
+Function flatpickr(aElementID : String) : TFlatPickr; external name 'flatpickr';
+Function flatpickr(aElementID : String; aOptions : TFlatPickrOptions) : TFlatPickr; external name 'flatpickr';
+Function multiflatpickr(const aSelector : String) : TFlatPickrArray; external name 'flatpickr';
+Function multiflatpickr(const aSelector : String; aOptions : TFlatPickrOptions) : TFlatPickrArray; external name 'flatpickr';
+
+
+implementation
+
+
+
+{ JQueryFlatPickrHelper }
+
+{ JJSElementFlatPickrHelper }
+
+function JJSElementFlatPickrHelper._flatpickr: TFlatPickr;
+begin
+  Result:=TFlatPickr(Self.Properties['_flatpickr']);
+end;
+
+end.