Browse Source

* Add Fetch API by Simon Ameis

michael 6 years ago
parent
commit
d472e24793
1 changed files with 66 additions and 2 deletions
  1. 66 2
      packages/rtl/web.pas

+ 66 - 2
packages/rtl/web.pas

@@ -21,6 +21,7 @@ interface
 uses Types, JS;
 uses Types, JS;
 
 
 Type
 Type
+  TJSEvent = Class;
   // Forward definitions
   // Forward definitions
   TJSWindow = class;
   TJSWindow = class;
   TJSDOMTokenList = class;
   TJSDOMTokenList = class;
@@ -66,13 +67,16 @@ Type
   end;
   end;
 
 
   TJSEventHandler = reference to function(Event: TEventListenerEvent): boolean;
   TJSEventHandler = reference to function(Event: TEventListenerEvent): boolean;
+  TJSRawEventHandler = reference to Procedure(Event: TJSEvent);
 
 
   TJSEventTarget = class external name 'EventTarget' (TJSObject)
   TJSEventTarget = class external name 'EventTarget' (TJSObject)
   public
   public
     procedure addEventListener(aname : string; aListener : TJSEventHandler);
     procedure addEventListener(aname : string; aListener : TJSEventHandler);
+    procedure addEventListener(aname : string; aListener : TJSRawEventHandler);
     procedure addEventListener(aname : string; aListener : JSValue);
     procedure addEventListener(aname : string; aListener : JSValue);
     function dispatchEvent(event : JSValue) : Boolean;
     function dispatchEvent(event : JSValue) : Boolean;
-    procedure removeEventListener(aname : string; aListener : TJSEventHandler);
+    procedure RemoveEventListener(aname : string; aListener : TJSEventHandler);
+    procedure RemoveEventListener(aname : string; aListener : TJSRawEventHandler);
     procedure removeEventListener(aname : string; aListener : JSValue);
     procedure removeEventListener(aname : string; aListener : JSValue);
   end;
   end;
 
 
@@ -436,6 +440,7 @@ Type
   public    
   public    
     cancelBubble : Boolean;
     cancelBubble : Boolean;
     constructor new (aType : String; const aInit : TJSEventInit); overload;
     constructor new (aType : String; const aInit : TJSEventInit); overload;
+    constructor new (aType : String); overload;
     procedure preventDefault;
     procedure preventDefault;
     procedure stopImmediatePropagation;
     procedure stopImmediatePropagation;
     procedure stopPropagation;
     procedure stopPropagation;
@@ -1843,6 +1848,61 @@ Type
     Property media : String Read FMedia;
     Property media : String Read FMedia;
   end;
   end;
 
 
+  TJSReadableStream = class external name 'ReadableStream' (TJSObject)
+  private
+    flocked: Boolean; external name 'locked';
+  public
+    property locked: Boolean read flocked;
+    constructor new(underlyingSource: TJSObject);
+    constructor new(underlyingSource, queueingStrategy: TJSObject);
+    function cancel(reason: TJSDOMString): TJSPromise;
+    function getReader(): TJSObject; overload;
+    function getReader(mode: TJSObject): TJSObject; overload;
+    function pipeThrough(transformStream: TJSObject): TJSReadableStream; overload;
+    function pipeThrough(transformStream, options: TJSObject): TJSReadableStream; overload;
+    function pipeTo(destination: TJSObject): TJSPromise; overload;
+    function pipeTo(destination, options: TJSObject): TJSPromise; overload;
+    function tee(): TJSArray; // array containing two TJSReadableStream instances
+  end;
+
+  TJSBody = class external name 'Body' (TJSObject)
+  private
+    fbody: TJSReadableStream; external name 'body';
+    fbodyUsed: Boolean; external name 'bodyUsed';
+  public
+    property body: TJSReadableStream read fbody;
+    property bodyUsed: Boolean read fbodyUsed;
+    function arrayBuffer(): TJSPromise; // resolves to TJSArrayBuffer
+    function blob(): TJSPromise; // resolves to TJSBlob
+    function json(): TJSPromise; // resolves to JSON / TJSValue
+    function text(): TJSPromise; // resolves to USVString, always decoded using UTF-8
+  end;
+
+  TJSResponse = class external name 'Response' (TJSBody)
+  private
+    fheaders: TJSObject;external name 'headers';
+    fok: Boolean; external name 'ok';
+    fredirected: Boolean; external name 'redirected';
+    fstatus: NativeInt; external name 'status';
+    fstatusText: String; external name 'statusText';
+    ftype: String; external name 'type';
+    furl: String; external name 'url';
+    fuseFinalUrl: Boolean; external name 'useFinalUrl';
+  public
+    property headers: TJSObject read fheaders; //
+    property ok: Boolean read fok;
+    property redirected: Boolean read fredirected;
+    property status: NativeInt read fstatus;
+    property statusText: String read fstatusText; //
+    property type_: String read ftype; //
+    property url: String read furl; //
+    property useFinalUrl: Boolean read fuseFinalUrl write fuseFinalUrl;
+    constructor new(body: TJSObject; init: TJSObject); varargs; external name 'new';
+    function clone(): TJSResponse;
+    function error(): TJSResponse;
+    function redirect(url: String; Status: NativeInt): TJSResponse;
+  end;
+
   { TJSWindow }
   { TJSWindow }
   TJSDOMHighResTimeStamp = Double;
   TJSDOMHighResTimeStamp = Double;
   TFrameRequestCallback = procedure (aTime: TJSDOMHighResTimeStamp);
   TFrameRequestCallback = procedure (aTime: TJSDOMHighResTimeStamp);
@@ -1958,6 +2018,10 @@ Type
     procedure cancelAnimationFrame(aHandle: Integer);
     procedure cancelAnimationFrame(aHandle: Integer);
     Procedure close;
     Procedure close;
     Function confirm(Const aMsg : String) :  boolean;
     Function confirm(Const aMsg : String) :  boolean;
+    function fetch(resource: String; init: TJSObject): TJSPromise; overload; external name 'fetch';
+    function fetch(resource: String): TJSPromise; overload; external name 'fetch';
+    function fetch(resource: TJSObject; init: TJSObject): TJSPromise; overload; external name 'fetch';
+    function fetch(resource: TJSObject): TJSPromise; overload; external name 'fetch';
     procedure focus;
     procedure focus;
     Function getComputedStyle(aElement : TJSElement) : TJSCSSStyleDeclaration; overload;
     Function getComputedStyle(aElement : TJSElement) : TJSCSSStyleDeclaration; overload;
     Function getComputedStyle(aElement,aPseudoElement : TJSElement) : TJSCSSStyleDeclaration; overload;
     Function getComputedStyle(aElement,aPseudoElement : TJSElement) : TJSCSSStyleDeclaration; overload;
@@ -1982,7 +2046,7 @@ Type
     Function setTimeout(ahandler : TJSTimerCallBack; aTimeout : NativeUInt) : NativeInt; varargs;
     Function setTimeout(ahandler : TJSTimerCallBack; aTimeout : NativeUInt) : NativeInt; varargs;
     Function setTimeout(ahandler : TJSTimerCallBack) : NativeInt;
     Function setTimeout(ahandler : TJSTimerCallBack) : NativeInt;
     procedure stop;
     procedure stop;
-    { public methods }
+    { public properties }
     property console : TJSConsole Read FConsole;
     property console : TJSConsole Read FConsole;
     property closed : boolean read FClosed;
     property closed : boolean read FClosed;
     property crypto : TJSCrypto Read FCrypto;
     property crypto : TJSCrypto Read FCrypto;