123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- {
- 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.
|