|
@@ -0,0 +1,164 @@
|
|
|
|
+{
|
|
|
|
+ This file is part of the Pas2JS run time library.
|
|
|
|
+ Copyright (C) 2019 Silvio Clecio (silvioprog) and
|
|
|
|
+ Fernando Baroni (frbaroni).
|
|
|
|
+
|
|
|
|
+ Pascal mapping for PushJS: https://pushjs.org
|
|
|
|
+
|
|
|
|
+ See the file COPYING.FPC, included in this distribution,
|
|
|
|
+ for details about the copyright.
|
|
|
|
+
|
|
|
|
+ This program is distributed in the hope that it will be useful,
|
|
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
+
|
|
|
|
+ **********************************************************************}
|
|
|
|
+
|
|
|
|
+{ Compact and cross-browser solution for Notifications API. }
|
|
|
|
+
|
|
|
|
+unit PushJS;
|
|
|
|
+
|
|
|
|
+{$MODE OBJFPC}
|
|
|
|
+{$MODESWITCH EXTERNALCLASS}
|
|
|
|
+
|
|
|
|
+interface
|
|
|
|
+
|
|
|
|
+uses
|
|
|
|
+ JS;
|
|
|
|
+
|
|
|
|
+{ TODO:
|
|
|
|
+ - Plugins: https://pushjs.org/docs/plugins }
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+
|
|
|
|
+ { TPushFunction }
|
|
|
|
+
|
|
|
|
+ TPushFunction = reference to procedure;
|
|
|
|
+
|
|
|
|
+ { TPushOptions }
|
|
|
|
+
|
|
|
|
+ TPushOptions = class external name 'Object'
|
|
|
|
+ // The body text of the notification
|
|
|
|
+ body: string;
|
|
|
|
+ // Data to pass to ServiceWorker notifications
|
|
|
|
+ data: JSValue;
|
|
|
|
+ // Can be either the URL to an icon image or an array containing 16x16 and 32x32 pixel icon images (see above).
|
|
|
|
+ icon: string;
|
|
|
|
+ // A relative URL path to navigate to when the user clicks on the notification on mobile (e.g. if you want users
|
|
|
|
+ // to navigate to your page http://example.com/page, then the relative URL is just page). If the page is already
|
|
|
|
+ // open in the background, then the browser window will automatically become focused. Requires the serviceWorker.js
|
|
|
|
+ // file to be present on your server to work.
|
|
|
|
+ link: string;
|
|
|
|
+ // When set to true, the notification will not close unless the user manually closes or clicks on it
|
|
|
|
+ requireInteraction: Boolean;
|
|
|
|
+ // Unique tag used to identify the notification. Can be used to later close the notification manually.
|
|
|
|
+ tag: string;
|
|
|
|
+ // Time in milliseconds until the notification closes automatically
|
|
|
|
+ timeout: Integer;
|
|
|
|
+ // An array of durations for a mobile device receiving the notification to vibrate. For example, [200, 100] would
|
|
|
|
+ // vibrate first for 200 milliseconds, pause, then continue for 100 milliseconds. For more information, see below.
|
|
|
|
+ // Available in Mobile Chrome only.
|
|
|
|
+ vibrate: Boolean;
|
|
|
|
+ // Specifies whether the notification should be silent, i.e. no sounds or vibrations should be issued, regardless
|
|
|
|
+ // of the device settings.
|
|
|
|
+ // Supported only in Chrome 43.0 or higher.
|
|
|
|
+ silent: Boolean;
|
|
|
|
+ // Callback to execute when the notification is clicked
|
|
|
|
+ onClick: TPushFunction;
|
|
|
|
+ // Callback to execute when if the notification throws an error
|
|
|
|
+ onError: TPushFunction;
|
|
|
|
+ // Creates new push options
|
|
|
|
+ constructor new;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ { TPushFallbackPayload }
|
|
|
|
+
|
|
|
|
+ TPushFallbackPayload = class external name 'Object'
|
|
|
|
+ // Notification title
|
|
|
|
+ title: string;
|
|
|
|
+ // Notification body
|
|
|
|
+ body: string;
|
|
|
|
+ // Notification tag
|
|
|
|
+ tag: string;
|
|
|
|
+ // Notification icon
|
|
|
|
+ icon: string;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ { TPushParamsFallback }
|
|
|
|
+
|
|
|
|
+ TPushParamsFallback = reference to procedure(payload: TPushFallbackPayload);
|
|
|
|
+
|
|
|
|
+ { TPushParams }
|
|
|
|
+
|
|
|
|
+ TPushParams = class external name 'Object'
|
|
|
|
+ // Sets a custom service worker script
|
|
|
|
+ serviceWorker: string;
|
|
|
|
+ // Code that executes on browsers with no notification support
|
|
|
|
+ // "payload" is an object containing the
|
|
|
|
+ // title, body, tag, and icon of the notification
|
|
|
|
+ fallback: TPushParamsFallback;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ { TPushPermission }
|
|
|
|
+
|
|
|
|
+ TPushPermission = class external name 'Object'
|
|
|
|
+ private
|
|
|
|
+ FDEFAULT: string; external name 'DEFAULT';
|
|
|
|
+ FGRANTED: string; external name 'GRANTED';
|
|
|
|
+ FDENIED: string; external name 'DENIED';
|
|
|
|
+ public
|
|
|
|
+ // Requests permission for desktop notifications
|
|
|
|
+ procedure request(
|
|
|
|
+ // Function to execute once permission is granted
|
|
|
|
+ onGranted: TPushFunction;
|
|
|
|
+ // Function to execute once permission is denied
|
|
|
|
+ onDenied: TPushFunction);
|
|
|
|
+ // Returns whether Push has been granted permission to run
|
|
|
|
+ function has: Boolean;
|
|
|
|
+ // Gets the permission level
|
|
|
|
+ function get: string;
|
|
|
|
+ // 'default'
|
|
|
|
+ property DEFAULT: string read FDEFAULT;
|
|
|
|
+ // 'granted'
|
|
|
|
+ property GRANTED: string read FGRANTED;
|
|
|
|
+ // 'denied'
|
|
|
|
+ property DENIED: string read FDENIED;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ { TPush }
|
|
|
|
+
|
|
|
|
+ TPush = class external name 'Push' (TJSPromise)
|
|
|
|
+ private class var
|
|
|
|
+ FPermission: TPushPermission; external name 'Permission';
|
|
|
|
+ public
|
|
|
|
+ // Creates and displays a new notification
|
|
|
|
+ class function create(
|
|
|
|
+ // Notification title
|
|
|
|
+ const title: string): TPush; overload; external name 'create';
|
|
|
|
+ // Creates and displays a new notification
|
|
|
|
+ class function create(
|
|
|
|
+ // Notification title
|
|
|
|
+ const title: string;
|
|
|
|
+ // Notification options
|
|
|
|
+ params: TPushOptions): TPush; overload; external name 'create';
|
|
|
|
+ // Returns the notification count
|
|
|
|
+ class function count: Integer;
|
|
|
|
+ // Closes a notification with the given tag
|
|
|
|
+ // Return boolean denoting success
|
|
|
|
+ class function close(
|
|
|
|
+ // Tag of the notification to close
|
|
|
|
+ const tag: string): Boolean;
|
|
|
|
+ // Clears all notifications
|
|
|
|
+ // Return boolean denoting whether the clear was successful in closing all notifications
|
|
|
|
+ class function clear: Boolean;
|
|
|
|
+ // Denotes whether Push is supported in the current browser
|
|
|
|
+ class function supported: Boolean;
|
|
|
|
+ // Modifies settings or returns all settings if no parameter passed
|
|
|
|
+ class procedure config(params: TPushParams);
|
|
|
|
+ // Permission object
|
|
|
|
+ class property Permission: TPushPermission read FPermission;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+implementation
|
|
|
|
+
|
|
|
|
+end.
|