@aegisjsproject/callback-registry 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/callbacks.js CHANGED
@@ -1,9 +1,17 @@
1
+ import {
2
+ eventToProp, capture as captureAttr, once as onceAttr, passive as passiveAttr, signal as signalAttr,
3
+ registerEventAttribute, hasEventAttribute, registerSignal, abortController,
4
+ } from './events.js';
5
+
1
6
  let _isRegistrationOpen = true;
2
7
 
3
8
  const $$ = (selector, base = document) => base.querySelectorAll(selector);
4
9
 
5
10
  const $ = (selector, base = document) => base.querySelector(selector);
6
11
 
12
+ export const requestFullscreen = { attr: 'data-request-fullscreen-selector', data: 'requestFullscreenSelector' };
13
+ export const toggleFullsceen = { attr: 'data-toggle-fullscreen-selector', data: 'toggleFullscreenSelector' };
14
+
7
15
  export const FUNCS = {
8
16
  debug: {
9
17
  log: 'aegis:debug:log',
@@ -15,10 +23,12 @@ export const FUNCS = {
15
23
  back: 'aegis:navigate:back',
16
24
  forward: 'aegis:navigate:forward',
17
25
  reload: 'aegis:navigate:reload',
26
+ close: 'aegis:navigate:close',
18
27
  link: 'aegis:navigate:go',
19
28
  popup: 'aegis:navigate:popup',
20
29
  },
21
30
  ui: {
31
+ command: 'aegis:ui:command',
22
32
  print: 'aegis:ui:print',
23
33
  remove: 'aegis:ui:remove',
24
34
  hide: 'aegis:ui:hide',
@@ -32,6 +42,14 @@ export const FUNCS = {
32
42
  disable: 'aegis:ui:disable',
33
43
  scrollTo: 'aegis:ui:scrollTo',
34
44
  prevent: 'aegis:ui:prevent',
45
+ revokeObjectURL: 'aegis:ui:revokeObjectURL',
46
+ cancelAnimationFrame: 'aegis:ui:cancelAnimationFrame',
47
+ requestFullscreen: 'aegis:ui:requestFullscreen',
48
+ toggleFullscreen: 'aegis:ui:toggleFullsceen',
49
+ exitFullsceen: 'aegis:ui:exitFullscreen',
50
+ open: 'aegis:ui:open',
51
+ close: 'aegis:ui:close',
52
+ abortController: 'aegis:ui:controller:abort',
35
53
  },
36
54
  };
37
55
 
@@ -43,6 +61,7 @@ const registry = new Map([
43
61
  [FUNCS.navigate.back, () => history.back()],
44
62
  [FUNCS.navigate.forward, () => history.forward()],
45
63
  [FUNCS.navigate.reload, () => history.go(0)],
64
+ [FUNCS.navigate.close, () => globalThis.close()],
46
65
  [FUNCS.navigate.link, event => {
47
66
  if (event.isTrusted) {
48
67
  event.preventDefault();
@@ -81,6 +100,13 @@ const registry = new Map([
81
100
  });
82
101
  }
83
102
  }],
103
+ [FUNCS.ui.revokeObjectURL, ({ currentTarget }) => URL.revokeObjectURL(currentTarget.src)],
104
+ [FUNCS.ui.cancelAnimationFrame, ({ currentTarget }) => cancelAnimationFrame(parseInt(currentTarget.dataset.animationFrame))],
105
+ [FUNCS.ui.clearInterval, ({ currentTarget }) => clearInterval(parseInt(currentTarget.dataset.clearInterval))],
106
+ [FUNCS.ui.clearTimeout, ({ currentTarget }) => clearTimeout(parseInt(currentTarget.dataset.timeout))],
107
+ [FUNCS.ui.abortController, ({ currentTarget }) => abortController(currentTarget.dataset.aegisEventController, currentTarget.dataset.aegisControllerReason)],
108
+ [FUNCS.ui.open, ({ currentTarget }) => document.querySelector(currentTarget.dataset.openSelector).open = true],
109
+ [FUNCS.ui.close, ({ currentTarget }) => document.querySelector(currentTarget.dataset.closeSelector).open = false],
84
110
  [FUNCS.ui.showModal, ({ currentTarget }) => {
85
111
  const target = $(currentTarget.dataset.showModalSelector);
86
112
 
@@ -118,6 +144,25 @@ const registry = new Map([
118
144
  }],
119
145
  [FUNCS.ui.print, () => globalThis.print()],
120
146
  [FUNCS.ui.prevent, event => event.preventDefault()],
147
+ [FUNCS.ui.requestFullscreen, ({ currentTarget}) => {
148
+ if (currentTarget.dataset.hasOwnProperty(requestFullscreen.data)) {
149
+ document.getElementById(currentTarget.dataset[requestFullscreen.data]).requestFullscreen();
150
+ } else {
151
+ currentTarget.requestFullscreen();
152
+ }
153
+ }],
154
+ [FUNCS.ui.toggleFullscreen, ({ currentTarget }) => {
155
+ const target = currentTarget.dataset.hasOwnProperty(toggleFullsceen.data)
156
+ ? document.getElementById(currentTarget.dataset[toggleFullsceen.data])
157
+ : currentTarget;
158
+
159
+ if (target.isSameNode(document.fullscreenElement)) {
160
+ document.exitFullscreen();
161
+ } else {
162
+ target.requestFullscreen();
163
+ }
164
+ }],
165
+ [FUNCS.ui.exitFullsceen, () => document.exitFullscreen()],
121
166
  ]);
122
167
 
123
168
  /**
@@ -237,3 +282,39 @@ export function getHost(target) {
237
282
  return null;
238
283
  }
239
284
  }
285
+
286
+ export function on(event, callback, { capture = false, passive = false, once = false, signal } = {}) {
287
+ if (callback instanceof Function) {
288
+ return on(event, createCallback(callback), { capture, passive, once, signal });
289
+ } else if (typeof callback !== 'string' || callback.length === 0) {
290
+ throw new TypeError('Callback must be a function or a registered callback string.');
291
+ } else if (typeof event !== 'string' || event.length === 0) {
292
+ throw new TypeError('Event must be a non-empty string.');
293
+ } else {
294
+ if (! hasEventAttribute(event)) {
295
+ registerEventAttribute(event);
296
+ }
297
+
298
+ const parts = [[eventToProp(event), callback]];
299
+
300
+ if (capture) {
301
+ parts.push([captureAttr, '']);
302
+ }
303
+
304
+ if (passive) {
305
+ parts.push([passiveAttr, '']);
306
+ }
307
+
308
+ if (once) {
309
+ parts.push([onceAttr, '']);
310
+ }
311
+
312
+ if (signal instanceof AbortSignal) {
313
+ parts.push([signalAttr, registerSignal(signal)]);
314
+ } else if (typeof signal === 'string') {
315
+ parts.push([signalAttr, signal]);
316
+ }
317
+
318
+ return parts.map(([prop, val]) => `${prop}="${val}"`).join(' ');
319
+ }
320
+ }