@smoud/playable-sdk 1.1.4 → 1.2.0
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/README.md +3 -0
- package/dist/esm/index.js +49 -19
- package/dist/iife/index.js +49 -19
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +49 -19
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -353,6 +353,9 @@ sdk.off('eventName', [callback], [context]);
|
|
|
353
353
|
| `ready` | - | Ad container is ready `post` init callback | Start resource loading |
|
|
354
354
|
| `start` | - | Playable experience started | Begin gameplay/animation |
|
|
355
355
|
| `interaction` | `count` | User interaction occurred | Track engagement |
|
|
356
|
+
| `pointerdown` | `x, y, event` | Mouse/touch pressed (unified, no duplicates) | Start drag / tap |
|
|
357
|
+
| `pointermove` | `x, y, event` | Mouse/touch moved while pressed | Update drag |
|
|
358
|
+
| `pointerup` | `x, y, event` | Mouse/touch released or cancelled | End drag / tap |
|
|
356
359
|
| `resize` | `width, height` | Container size changed | Update layout |
|
|
357
360
|
| `pause` | - | Playable entered pause state | Pause gameplay |
|
|
358
361
|
| `resume` | - | Playable resumed from pause | Resume gameplay |
|
package/dist/esm/index.js
CHANGED
|
@@ -192,6 +192,51 @@ function initTrackingProtocols() {
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
+
// src/interaction.ts
|
|
196
|
+
var TOUCH_MOUSE_DEDUPE_MS = 500;
|
|
197
|
+
var lastTouchTime = 0;
|
|
198
|
+
var isPointerDown = false;
|
|
199
|
+
var isRegistered = false;
|
|
200
|
+
var isMoveRegistered = false;
|
|
201
|
+
function createPointerHandler(name) {
|
|
202
|
+
return function(event) {
|
|
203
|
+
const touches = event.changedTouches;
|
|
204
|
+
let point = event;
|
|
205
|
+
if (touches) {
|
|
206
|
+
lastTouchTime = event.timeStamp;
|
|
207
|
+
point = touches[0];
|
|
208
|
+
} else if (event.timeStamp - lastTouchTime < TOUCH_MOUSE_DEDUPE_MS) return;
|
|
209
|
+
if (name === "pointerdown") {
|
|
210
|
+
isPointerDown = true;
|
|
211
|
+
sdk.interactions += 1;
|
|
212
|
+
emitEvent("interaction", sdk.interactions);
|
|
213
|
+
} else if (!isPointerDown) return;
|
|
214
|
+
else if (name === "pointerup") isPointerDown = !!touches && event.touches.length > 0;
|
|
215
|
+
emitEvent(name, point.clientX, point.clientY, event);
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
var onPointerDown = createPointerHandler("pointerdown");
|
|
219
|
+
var onPointerMove = createPointerHandler("pointermove");
|
|
220
|
+
var onPointerUp = createPointerHandler("pointerup");
|
|
221
|
+
function listen(type, handler) {
|
|
222
|
+
document.addEventListener(type, handler);
|
|
223
|
+
}
|
|
224
|
+
function registerInteractionHandlers() {
|
|
225
|
+
if (isRegistered) return;
|
|
226
|
+
isRegistered = true;
|
|
227
|
+
listen("mousedown", onPointerDown);
|
|
228
|
+
listen("touchstart", onPointerDown);
|
|
229
|
+
listen("mouseup", onPointerUp);
|
|
230
|
+
listen("touchend", onPointerUp);
|
|
231
|
+
listen("touchcancel", onPointerUp);
|
|
232
|
+
}
|
|
233
|
+
function registerMoveHandler() {
|
|
234
|
+
if (isMoveRegistered) return;
|
|
235
|
+
isMoveRegistered = true;
|
|
236
|
+
listen("mousemove", onPointerMove);
|
|
237
|
+
listen("touchmove", onPointerMove);
|
|
238
|
+
}
|
|
239
|
+
|
|
195
240
|
// src/core.ts
|
|
196
241
|
var destinationUrl = "";
|
|
197
242
|
var isSDKInitialized = false;
|
|
@@ -396,23 +441,6 @@ function handleResize(width, height) {
|
|
|
396
441
|
sdk.isLandscape = sdk.maxWidth > sdk.maxHeight;
|
|
397
442
|
emitEvent("resize", sdk.maxWidth, sdk.maxHeight);
|
|
398
443
|
}
|
|
399
|
-
var isListeningToTouchEvents = false;
|
|
400
|
-
var isTouchEventRegistered = false;
|
|
401
|
-
function onUserInteraction(event) {
|
|
402
|
-
if (typeof TouchEvent !== "undefined" && event instanceof TouchEvent) {
|
|
403
|
-
isListeningToTouchEvents = true;
|
|
404
|
-
}
|
|
405
|
-
if (isListeningToTouchEvents && event instanceof MouseEvent) return;
|
|
406
|
-
sdk.interactions += 1;
|
|
407
|
-
emitEvent("interaction", sdk.interactions);
|
|
408
|
-
}
|
|
409
|
-
function registerTouchHandlers() {
|
|
410
|
-
if (!isTouchEventRegistered) {
|
|
411
|
-
document.addEventListener("mousedown", onUserInteraction);
|
|
412
|
-
document.addEventListener("touchstart", onUserInteraction);
|
|
413
|
-
isTouchEventRegistered = true;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
444
|
function initSDK() {
|
|
417
445
|
destinationUrl = /android/i.test(navigator.userAgent) ? GOOGLE_PLAY_URL : APP_STORE_URL;
|
|
418
446
|
ensureProtocol();
|
|
@@ -466,7 +494,7 @@ var _sdk = class _sdk {
|
|
|
466
494
|
if (_sdk.isStarted) return;
|
|
467
495
|
_sdk.isStarted = true;
|
|
468
496
|
emitEvent("start");
|
|
469
|
-
|
|
497
|
+
registerInteractionHandlers();
|
|
470
498
|
if ("mintegral" === AD_NETWORK && isMintegral()) {
|
|
471
499
|
_sdk.resize();
|
|
472
500
|
handlePause();
|
|
@@ -638,6 +666,7 @@ var _sdk = class _sdk {
|
|
|
638
666
|
* }, gameInstance);
|
|
639
667
|
*/
|
|
640
668
|
static on(event, fn, context) {
|
|
669
|
+
if (event === "pointermove") registerMoveHandler();
|
|
641
670
|
onEvent(event, fn, context);
|
|
642
671
|
}
|
|
643
672
|
/**
|
|
@@ -654,6 +683,7 @@ var _sdk = class _sdk {
|
|
|
654
683
|
* });
|
|
655
684
|
*/
|
|
656
685
|
static once(event, fn, context) {
|
|
686
|
+
if (event === "pointermove") registerMoveHandler();
|
|
657
687
|
onEvent(event, fn, context, true);
|
|
658
688
|
}
|
|
659
689
|
/**
|
|
@@ -676,7 +706,7 @@ var _sdk = class _sdk {
|
|
|
676
706
|
}
|
|
677
707
|
};
|
|
678
708
|
/** Current version of the SDK */
|
|
679
|
-
_sdk.version = "1.
|
|
709
|
+
_sdk.version = "1.2.0";
|
|
680
710
|
/** Current maximum width of the playable ad container in pixels */
|
|
681
711
|
_sdk.maxWidth = Math.floor(window.innerWidth);
|
|
682
712
|
/** Current maximum height of the playable ad container in pixels */
|
package/dist/iife/index.js
CHANGED
|
@@ -194,6 +194,51 @@
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
+
// src/interaction.ts
|
|
198
|
+
var TOUCH_MOUSE_DEDUPE_MS = 500;
|
|
199
|
+
var lastTouchTime = 0;
|
|
200
|
+
var isPointerDown = false;
|
|
201
|
+
var isRegistered = false;
|
|
202
|
+
var isMoveRegistered = false;
|
|
203
|
+
function createPointerHandler(name) {
|
|
204
|
+
return function(event) {
|
|
205
|
+
const touches = event.changedTouches;
|
|
206
|
+
let point = event;
|
|
207
|
+
if (touches) {
|
|
208
|
+
lastTouchTime = event.timeStamp;
|
|
209
|
+
point = touches[0];
|
|
210
|
+
} else if (event.timeStamp - lastTouchTime < TOUCH_MOUSE_DEDUPE_MS) return;
|
|
211
|
+
if (name === "pointerdown") {
|
|
212
|
+
isPointerDown = true;
|
|
213
|
+
sdk.interactions += 1;
|
|
214
|
+
emitEvent("interaction", sdk.interactions);
|
|
215
|
+
} else if (!isPointerDown) return;
|
|
216
|
+
else if (name === "pointerup") isPointerDown = !!touches && event.touches.length > 0;
|
|
217
|
+
emitEvent(name, point.clientX, point.clientY, event);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
var onPointerDown = createPointerHandler("pointerdown");
|
|
221
|
+
var onPointerMove = createPointerHandler("pointermove");
|
|
222
|
+
var onPointerUp = createPointerHandler("pointerup");
|
|
223
|
+
function listen(type, handler) {
|
|
224
|
+
document.addEventListener(type, handler);
|
|
225
|
+
}
|
|
226
|
+
function registerInteractionHandlers() {
|
|
227
|
+
if (isRegistered) return;
|
|
228
|
+
isRegistered = true;
|
|
229
|
+
listen("mousedown", onPointerDown);
|
|
230
|
+
listen("touchstart", onPointerDown);
|
|
231
|
+
listen("mouseup", onPointerUp);
|
|
232
|
+
listen("touchend", onPointerUp);
|
|
233
|
+
listen("touchcancel", onPointerUp);
|
|
234
|
+
}
|
|
235
|
+
function registerMoveHandler() {
|
|
236
|
+
if (isMoveRegistered) return;
|
|
237
|
+
isMoveRegistered = true;
|
|
238
|
+
listen("mousemove", onPointerMove);
|
|
239
|
+
listen("touchmove", onPointerMove);
|
|
240
|
+
}
|
|
241
|
+
|
|
197
242
|
// src/core.ts
|
|
198
243
|
var destinationUrl = "";
|
|
199
244
|
var isSDKInitialized = false;
|
|
@@ -398,23 +443,6 @@
|
|
|
398
443
|
sdk.isLandscape = sdk.maxWidth > sdk.maxHeight;
|
|
399
444
|
emitEvent("resize", sdk.maxWidth, sdk.maxHeight);
|
|
400
445
|
}
|
|
401
|
-
var isListeningToTouchEvents = false;
|
|
402
|
-
var isTouchEventRegistered = false;
|
|
403
|
-
function onUserInteraction(event) {
|
|
404
|
-
if (typeof TouchEvent !== "undefined" && event instanceof TouchEvent) {
|
|
405
|
-
isListeningToTouchEvents = true;
|
|
406
|
-
}
|
|
407
|
-
if (isListeningToTouchEvents && event instanceof MouseEvent) return;
|
|
408
|
-
sdk.interactions += 1;
|
|
409
|
-
emitEvent("interaction", sdk.interactions);
|
|
410
|
-
}
|
|
411
|
-
function registerTouchHandlers() {
|
|
412
|
-
if (!isTouchEventRegistered) {
|
|
413
|
-
document.addEventListener("mousedown", onUserInteraction);
|
|
414
|
-
document.addEventListener("touchstart", onUserInteraction);
|
|
415
|
-
isTouchEventRegistered = true;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
446
|
function initSDK() {
|
|
419
447
|
destinationUrl = /android/i.test(navigator.userAgent) ? GOOGLE_PLAY_URL : APP_STORE_URL;
|
|
420
448
|
ensureProtocol();
|
|
@@ -468,7 +496,7 @@
|
|
|
468
496
|
if (_sdk.isStarted) return;
|
|
469
497
|
_sdk.isStarted = true;
|
|
470
498
|
emitEvent("start");
|
|
471
|
-
|
|
499
|
+
registerInteractionHandlers();
|
|
472
500
|
if ("mintegral" === AD_NETWORK && isMintegral()) {
|
|
473
501
|
_sdk.resize();
|
|
474
502
|
handlePause();
|
|
@@ -640,6 +668,7 @@
|
|
|
640
668
|
* }, gameInstance);
|
|
641
669
|
*/
|
|
642
670
|
static on(event, fn, context) {
|
|
671
|
+
if (event === "pointermove") registerMoveHandler();
|
|
643
672
|
onEvent(event, fn, context);
|
|
644
673
|
}
|
|
645
674
|
/**
|
|
@@ -656,6 +685,7 @@
|
|
|
656
685
|
* });
|
|
657
686
|
*/
|
|
658
687
|
static once(event, fn, context) {
|
|
688
|
+
if (event === "pointermove") registerMoveHandler();
|
|
659
689
|
onEvent(event, fn, context, true);
|
|
660
690
|
}
|
|
661
691
|
/**
|
|
@@ -678,7 +708,7 @@
|
|
|
678
708
|
}
|
|
679
709
|
};
|
|
680
710
|
/** Current version of the SDK */
|
|
681
|
-
_sdk.version = "1.
|
|
711
|
+
_sdk.version = "1.2.0";
|
|
682
712
|
/** Current maximum width of the playable ad container in pixels */
|
|
683
713
|
_sdk.maxWidth = Math.floor(window.innerWidth);
|
|
684
714
|
/** Current maximum height of the playable ad container in pixels */
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
|
|
1
|
+
type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'pointerdown' | 'pointermove' | 'pointerup' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
|
|
2
2
|
|
|
3
3
|
type InitCallbackType = (maxWidth: number, maxHeight: number) => void;
|
|
4
4
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
|
|
1
|
+
type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'pointerdown' | 'pointermove' | 'pointerup' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
|
|
2
2
|
|
|
3
3
|
type InitCallbackType = (maxWidth: number, maxHeight: number) => void;
|
|
4
4
|
/**
|
package/dist/index.js
CHANGED
|
@@ -219,6 +219,51 @@ function initTrackingProtocols() {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
+
// src/interaction.ts
|
|
223
|
+
var TOUCH_MOUSE_DEDUPE_MS = 500;
|
|
224
|
+
var lastTouchTime = 0;
|
|
225
|
+
var isPointerDown = false;
|
|
226
|
+
var isRegistered = false;
|
|
227
|
+
var isMoveRegistered = false;
|
|
228
|
+
function createPointerHandler(name) {
|
|
229
|
+
return function(event) {
|
|
230
|
+
const touches = event.changedTouches;
|
|
231
|
+
let point = event;
|
|
232
|
+
if (touches) {
|
|
233
|
+
lastTouchTime = event.timeStamp;
|
|
234
|
+
point = touches[0];
|
|
235
|
+
} else if (event.timeStamp - lastTouchTime < TOUCH_MOUSE_DEDUPE_MS) return;
|
|
236
|
+
if (name === "pointerdown") {
|
|
237
|
+
isPointerDown = true;
|
|
238
|
+
sdk.interactions += 1;
|
|
239
|
+
emitEvent("interaction", sdk.interactions);
|
|
240
|
+
} else if (!isPointerDown) return;
|
|
241
|
+
else if (name === "pointerup") isPointerDown = !!touches && event.touches.length > 0;
|
|
242
|
+
emitEvent(name, point.clientX, point.clientY, event);
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
var onPointerDown = createPointerHandler("pointerdown");
|
|
246
|
+
var onPointerMove = createPointerHandler("pointermove");
|
|
247
|
+
var onPointerUp = createPointerHandler("pointerup");
|
|
248
|
+
function listen(type, handler) {
|
|
249
|
+
document.addEventListener(type, handler);
|
|
250
|
+
}
|
|
251
|
+
function registerInteractionHandlers() {
|
|
252
|
+
if (isRegistered) return;
|
|
253
|
+
isRegistered = true;
|
|
254
|
+
listen("mousedown", onPointerDown);
|
|
255
|
+
listen("touchstart", onPointerDown);
|
|
256
|
+
listen("mouseup", onPointerUp);
|
|
257
|
+
listen("touchend", onPointerUp);
|
|
258
|
+
listen("touchcancel", onPointerUp);
|
|
259
|
+
}
|
|
260
|
+
function registerMoveHandler() {
|
|
261
|
+
if (isMoveRegistered) return;
|
|
262
|
+
isMoveRegistered = true;
|
|
263
|
+
listen("mousemove", onPointerMove);
|
|
264
|
+
listen("touchmove", onPointerMove);
|
|
265
|
+
}
|
|
266
|
+
|
|
222
267
|
// src/core.ts
|
|
223
268
|
var destinationUrl = "";
|
|
224
269
|
var isSDKInitialized = false;
|
|
@@ -423,23 +468,6 @@ function handleResize(width, height) {
|
|
|
423
468
|
sdk.isLandscape = sdk.maxWidth > sdk.maxHeight;
|
|
424
469
|
emitEvent("resize", sdk.maxWidth, sdk.maxHeight);
|
|
425
470
|
}
|
|
426
|
-
var isListeningToTouchEvents = false;
|
|
427
|
-
var isTouchEventRegistered = false;
|
|
428
|
-
function onUserInteraction(event) {
|
|
429
|
-
if (typeof TouchEvent !== "undefined" && event instanceof TouchEvent) {
|
|
430
|
-
isListeningToTouchEvents = true;
|
|
431
|
-
}
|
|
432
|
-
if (isListeningToTouchEvents && event instanceof MouseEvent) return;
|
|
433
|
-
sdk.interactions += 1;
|
|
434
|
-
emitEvent("interaction", sdk.interactions);
|
|
435
|
-
}
|
|
436
|
-
function registerTouchHandlers() {
|
|
437
|
-
if (!isTouchEventRegistered) {
|
|
438
|
-
document.addEventListener("mousedown", onUserInteraction);
|
|
439
|
-
document.addEventListener("touchstart", onUserInteraction);
|
|
440
|
-
isTouchEventRegistered = true;
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
471
|
function initSDK() {
|
|
444
472
|
destinationUrl = /android/i.test(navigator.userAgent) ? GOOGLE_PLAY_URL : APP_STORE_URL;
|
|
445
473
|
ensureProtocol();
|
|
@@ -493,7 +521,7 @@ var _sdk = class _sdk {
|
|
|
493
521
|
if (_sdk.isStarted) return;
|
|
494
522
|
_sdk.isStarted = true;
|
|
495
523
|
emitEvent("start");
|
|
496
|
-
|
|
524
|
+
registerInteractionHandlers();
|
|
497
525
|
if ("mintegral" === AD_NETWORK && isMintegral()) {
|
|
498
526
|
_sdk.resize();
|
|
499
527
|
handlePause();
|
|
@@ -665,6 +693,7 @@ var _sdk = class _sdk {
|
|
|
665
693
|
* }, gameInstance);
|
|
666
694
|
*/
|
|
667
695
|
static on(event, fn, context) {
|
|
696
|
+
if (event === "pointermove") registerMoveHandler();
|
|
668
697
|
onEvent(event, fn, context);
|
|
669
698
|
}
|
|
670
699
|
/**
|
|
@@ -681,6 +710,7 @@ var _sdk = class _sdk {
|
|
|
681
710
|
* });
|
|
682
711
|
*/
|
|
683
712
|
static once(event, fn, context) {
|
|
713
|
+
if (event === "pointermove") registerMoveHandler();
|
|
684
714
|
onEvent(event, fn, context, true);
|
|
685
715
|
}
|
|
686
716
|
/**
|
|
@@ -703,7 +733,7 @@ var _sdk = class _sdk {
|
|
|
703
733
|
}
|
|
704
734
|
};
|
|
705
735
|
/** Current version of the SDK */
|
|
706
|
-
_sdk.version = "1.
|
|
736
|
+
_sdk.version = "1.2.0";
|
|
707
737
|
/** Current maximum width of the playable ad container in pixels */
|
|
708
738
|
_sdk.maxWidth = Math.floor(window.innerWidth);
|
|
709
739
|
/** Current maximum height of the playable ad container in pixels */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smoud/playable-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "It's unified Playable SDK that supports MRAID, Google, Facebook, Vungle, and many more Ad Networks, simplifying playable ad development with a standardized interface for seamless cross-network compatibility.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|