mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-07 09:57:57 +02:00
165 lines
5.4 KiB
ObjectPascal
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.
|