pas2js/packages/pushjs/pushjs.pas
2019-07-13 14:27:49 +00:00

165 lines
5.4 KiB
ObjectPascal

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