@letscooee/web-sdk 0.0.5 → 0.0.9
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/CHANGELOG.md +22 -0
- package/README.md +2 -2
- package/dist/constants.js +7 -3
- package/dist/init/visibility-listener.js +2 -2
- package/dist/models/trigger/action/click-action-executor.js +14 -6
- package/dist/models/trigger/blocks/border.js +2 -0
- package/dist/models/trigger/elements/base-element.js +2 -0
- package/dist/models/trigger/elements/text-element.js +2 -0
- package/dist/models/trigger/embedded-trigger.js +26 -0
- package/dist/models/trigger/inapp/container.js +81 -1
- package/dist/models/trigger/trigger-data.js +2 -2
- package/dist/models/trigger/trigger-helper.js +52 -0
- package/dist/renderer/block-processor.js +11 -14
- package/dist/renderer/container-renderer.js +7 -5
- package/dist/renderer/iFrame-renderer.js +2 -5
- package/dist/renderer/image-renderer.js +2 -2
- package/dist/renderer/in-app-renderer.js +14 -6
- package/dist/renderer/index.js +9 -5
- package/dist/renderer/renderer.js +22 -10
- package/dist/renderer/root-container-renderer.js +19 -10
- package/dist/renderer/text-renderer.js +2 -1
- package/dist/sdk-preview.min.js +1 -1
- package/dist/sdk.min.js +1 -1
- package/dist/services/http-api.service.js +28 -8
- package/dist/services/user-auth.service.js +7 -7
- package/dist/session/new-session-executor.js +2 -2
- package/dist/session/session-manager.js +1 -0
- package/dist/utils/local-storage-helper.js +22 -0
- package/dist/utils/log.js +14 -10
- package/package.json +7 -6
- package/dist/models/trigger/blocks/colour.js +0 -1
- package/dist/models/trigger/blocks/flex.js +0 -1
- package/dist/models/trigger/blocks/position.js +0 -1
- package/dist/models/trigger/elements/base-text-element.js +0 -1
- package/dist/models/trigger/elements/group-element.js +0 -1
- package/dist/renderer/block-renderer.js +0 -44
- package/dist/renderer/group-renderer.js +0 -44
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
# 0.0.9
|
|
4
|
+
|
|
5
|
+
1. Fix: glassmorphism on iOS.
|
|
6
|
+
2. Fix: Fix rendering scaled images.
|
|
7
|
+
3. Fix: Update in KPI for CTA.
|
|
8
|
+
4. Fix: Do not remove in-app if being used inside an element.
|
|
9
|
+
|
|
10
|
+
# 0.0.8
|
|
11
|
+
|
|
12
|
+
1. Feature: Ability of InApp to be rendered inside an element.
|
|
13
|
+
2. Fix: Overflowed content should not be rendered.
|
|
14
|
+
3. Fix: Placing in-app on east direction.
|
|
15
|
+
|
|
16
|
+
# 0.0.7
|
|
17
|
+
|
|
18
|
+
More feature support in the sdk.
|
|
19
|
+
|
|
20
|
+
# 0.0.6
|
|
21
|
+
|
|
22
|
+
1. Build: Upgrade TypeScript to 4.4.
|
|
23
|
+
2. Fix: Convert \n to `<br>` in texts.
|
|
24
|
+
|
|
3
25
|
# 0.0.5
|
|
4
26
|
|
|
5
27
|
Supporting changes based on the in-app composer.
|
package/README.md
CHANGED
|
@@ -27,11 +27,11 @@ code before calling any other CooeeSDK functions.
|
|
|
27
27
|
<script src="https://cdn.jsdelivr.net/npm/@letscooee/web-sdk@latest/dist/sdk.min.js" async></script>
|
|
28
28
|
<script>
|
|
29
29
|
window.CooeeSDK = window.CooeeSDK || {events: [], profile: [], account: []};
|
|
30
|
-
CooeeSDK.account.push({"appID": "MY_COOEE_APP_ID"
|
|
30
|
+
CooeeSDK.account.push({"appID": "MY_COOEE_APP_ID"});
|
|
31
31
|
</script>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Replace `MY_COOEE_APP_ID`
|
|
34
|
+
Replace `MY_COOEE_APP_ID` with the app id as seen in your Cooee dashboard.
|
|
35
35
|
|
|
36
36
|
#### Step 2: Track Custom Events
|
|
37
37
|
|
package/dist/constants.js
CHANGED
|
@@ -8,8 +8,7 @@ var Constants = /** @class */ (function () {
|
|
|
8
8
|
function Constants() {
|
|
9
9
|
}
|
|
10
10
|
Constants.API_URL = 'https://api.sdk.letscooee.com';
|
|
11
|
-
Constants.SDK_VERSION = '
|
|
12
|
-
Constants.SDK_VERSION_CODE = 4;
|
|
11
|
+
Constants.SDK_VERSION = require('../package.json').version;
|
|
13
12
|
Constants.SDK_DEBUG = false;
|
|
14
13
|
Constants.SDK = 'WEB';
|
|
15
14
|
Constants.LOG_PREFIX = 'CooeeSDK';
|
|
@@ -26,10 +25,15 @@ var Constants = /** @class */ (function () {
|
|
|
26
25
|
Constants.STORAGE_FIRST_TIME_LAUNCH = 'ifl';
|
|
27
26
|
Constants.STORAGE_LAST_ACTIVE = 'la';
|
|
28
27
|
Constants.STORAGE_TRIGGER_START_TIME = 'tst';
|
|
29
|
-
Constants.
|
|
28
|
+
Constants.STORAGE_ACTIVE_TRIGGER = 'at';
|
|
29
|
+
Constants.STORAGE_ACTIVE_TRIGGERS = 'ats';
|
|
30
30
|
// endregion
|
|
31
31
|
Constants.IDLE_TIME_IN_SECONDS = 30 * 60;
|
|
32
32
|
Constants.IN_APP_CONTAINER_NAME = 'cooee-wrapper';
|
|
33
|
+
(function () {
|
|
34
|
+
var rawCode = Constants.SDK_VERSION.split('.').map(function (item) { return item.padStart(2, '0'); }).join('');
|
|
35
|
+
Constants.SDK_VERSION_CODE = parseInt(rawCode, 10);
|
|
36
|
+
})();
|
|
33
37
|
return Constants;
|
|
34
38
|
}());
|
|
35
39
|
export { Constants };
|
|
@@ -89,7 +89,7 @@ var VisibilityListener = /** @class */ (function () {
|
|
|
89
89
|
}
|
|
90
90
|
props = {};
|
|
91
91
|
props[VisibilityListener.INACTIVE_DURATION] = duration;
|
|
92
|
-
event = new Event('CE
|
|
92
|
+
event = new Event('CE App Foreground', props);
|
|
93
93
|
_a = event;
|
|
94
94
|
return [4 /*yield*/, new DevicePropertiesCollector().get()];
|
|
95
95
|
case 1:
|
|
@@ -113,7 +113,7 @@ var VisibilityListener = /** @class */ (function () {
|
|
|
113
113
|
duration = this.runtimeData.getTimeForActiveInSeconds();
|
|
114
114
|
props = {};
|
|
115
115
|
props[VisibilityListener.ACTIVE_DURATION] = duration;
|
|
116
|
-
this.apiService.sendEvent(new Event('CE
|
|
116
|
+
this.apiService.sendEvent(new Event('CE App Background', props));
|
|
117
117
|
return [2 /*return*/];
|
|
118
118
|
});
|
|
119
119
|
});
|
|
@@ -124,21 +124,29 @@ var ClickActionExecutor = /** @class */ (function () {
|
|
|
124
124
|
* Performs close action
|
|
125
125
|
*/
|
|
126
126
|
ClickActionExecutor.prototype.closeAction = function () {
|
|
127
|
+
var _a;
|
|
127
128
|
if (!this.action.close) {
|
|
128
129
|
return;
|
|
129
130
|
}
|
|
130
131
|
new RootContainerRenderer().removeInApp();
|
|
131
132
|
var startTime = LocalStorageHelper.getNumber(Constants.STORAGE_TRIGGER_START_TIME, new Date().getTime());
|
|
132
|
-
var triggerID = LocalStorageHelper.
|
|
133
|
+
var triggerID = (_a = LocalStorageHelper.getObject(Constants.STORAGE_ACTIVE_TRIGGER)) === null || _a === void 0 ? void 0 : _a.triggerID;
|
|
133
134
|
var diffInSeconds = (new Date().getTime() - startTime) / 1000;
|
|
135
|
+
var closeBehaviour;
|
|
136
|
+
if (this.action.ext || this.action.up || this.action.kv ||
|
|
137
|
+
this.action.iab || this.action.prompt || this.action.share) {
|
|
138
|
+
closeBehaviour = 'CTA';
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
closeBehaviour = 'Close';
|
|
142
|
+
}
|
|
134
143
|
var eventProps = {
|
|
135
144
|
'triggerID': triggerID,
|
|
136
|
-
'
|
|
137
|
-
'
|
|
145
|
+
'closeBehaviour': closeBehaviour,
|
|
146
|
+
'duration': diffInSeconds,
|
|
138
147
|
};
|
|
139
148
|
this.apiService.sendEvent(new Event('CE Trigger Closed', eventProps));
|
|
140
149
|
LocalStorageHelper.remove(Constants.STORAGE_TRIGGER_START_TIME);
|
|
141
|
-
LocalStorageHelper.remove(Constants.STORAGE_ACTIVE_TRIGGER_ID);
|
|
142
150
|
};
|
|
143
151
|
/**
|
|
144
152
|
* Performs share action i.e. share some url on CTA.
|
|
@@ -152,7 +160,7 @@ var ClickActionExecutor = /** @class */ (function () {
|
|
|
152
160
|
// TODO test in mobile browsers
|
|
153
161
|
var share = navigator.share;
|
|
154
162
|
if (!share) {
|
|
155
|
-
Log.
|
|
163
|
+
Log.warning('Navigator.share is not compatible with this browser');
|
|
156
164
|
return;
|
|
157
165
|
}
|
|
158
166
|
navigator.share({ 'text': this.action.share.text, 'title': 'Share' })
|
|
@@ -182,7 +190,7 @@ var ClickActionExecutor = /** @class */ (function () {
|
|
|
182
190
|
ClickActionExecutor.prototype.promptPushNotificationPermission = function () {
|
|
183
191
|
var _this = this;
|
|
184
192
|
if (!('Notification' in window)) {
|
|
185
|
-
Log.
|
|
193
|
+
Log.warning('This browser does not support desktop notification');
|
|
186
194
|
return;
|
|
187
195
|
}
|
|
188
196
|
// TODO Need device endpoints to update this property
|
|
@@ -40,8 +40,10 @@ var Border = /** @class */ (function () {
|
|
|
40
40
|
return Border;
|
|
41
41
|
}());
|
|
42
42
|
export { Border };
|
|
43
|
+
/* eslint-disable no-unused-vars */
|
|
43
44
|
export var BorderStyle;
|
|
44
45
|
(function (BorderStyle) {
|
|
45
46
|
BorderStyle[BorderStyle["SOLID"] = 1] = "SOLID";
|
|
46
47
|
BorderStyle[BorderStyle["DASHED"] = 2] = "DASHED";
|
|
47
48
|
})(BorderStyle || (BorderStyle = {}));
|
|
49
|
+
/* eslint-enable no-unused-vars */
|
|
@@ -39,6 +39,7 @@ var BaseElement = /** @class */ (function () {
|
|
|
39
39
|
return BaseElement;
|
|
40
40
|
}());
|
|
41
41
|
export { BaseElement };
|
|
42
|
+
/* eslint-disable no-unused-vars */
|
|
42
43
|
export var ElementType;
|
|
43
44
|
(function (ElementType) {
|
|
44
45
|
ElementType[ElementType["IMAGE"] = 1] = "IMAGE";
|
|
@@ -46,3 +47,4 @@ export var ElementType;
|
|
|
46
47
|
ElementType[ElementType["BUTTON"] = 3] = "BUTTON";
|
|
47
48
|
ElementType[ElementType["SHAPE"] = 100] = "SHAPE";
|
|
48
49
|
})(ElementType || (ElementType = {}));
|
|
50
|
+
/* eslint-disable no-unused-vars */
|
|
@@ -64,6 +64,7 @@ var TextPart = /** @class */ (function () {
|
|
|
64
64
|
return TextPart;
|
|
65
65
|
}());
|
|
66
66
|
export { TextPart };
|
|
67
|
+
/* eslint-disable no-unused-vars */
|
|
67
68
|
export var TextAlign;
|
|
68
69
|
(function (TextAlign) {
|
|
69
70
|
TextAlign[TextAlign["START"] = 0] = "START";
|
|
@@ -77,3 +78,4 @@ export var TextScript;
|
|
|
77
78
|
TextScript[TextScript["SUPER"] = 1] = "SUPER";
|
|
78
79
|
TextScript[TextScript["SUB"] = 2] = "SUB";
|
|
79
80
|
})(TextScript || (TextScript = {}));
|
|
81
|
+
/* eslint-enable no-unused-vars */
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class store data related to triggers which are active/activated by clicking on the trigger notification or by
|
|
3
|
+
* looking an in-app trigger(in future). This would be commonly sent with events as <code>activeTrigger</code>.
|
|
4
|
+
*
|
|
5
|
+
* @author Abhishek Taparia
|
|
6
|
+
* @since 1.1.0
|
|
7
|
+
*/
|
|
8
|
+
var EmbeddedTrigger = /** @class */ (function () {
|
|
9
|
+
function EmbeddedTrigger(data) {
|
|
10
|
+
this.triggerID = data.id;
|
|
11
|
+
this.engagementID = data.engagementID;
|
|
12
|
+
this.expireAt = data.expireAt;
|
|
13
|
+
if (this.isExpired) {
|
|
14
|
+
this.expired = this.isExpired;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(EmbeddedTrigger.prototype, "isExpired", {
|
|
18
|
+
get: function () {
|
|
19
|
+
return this.expireAt < new Date().getTime();
|
|
20
|
+
},
|
|
21
|
+
enumerable: false,
|
|
22
|
+
configurable: true
|
|
23
|
+
});
|
|
24
|
+
return EmbeddedTrigger;
|
|
25
|
+
}());
|
|
26
|
+
export { EmbeddedTrigger };
|
|
@@ -17,8 +17,88 @@ import { BaseElement } from '../elements';
|
|
|
17
17
|
var Container = /** @class */ (function (_super) {
|
|
18
18
|
__extends(Container, _super);
|
|
19
19
|
function Container(data) {
|
|
20
|
-
|
|
20
|
+
var _a;
|
|
21
|
+
var _this = _super.call(this, data) || this;
|
|
22
|
+
_this.o = (_a = data.o) !== null && _a !== void 0 ? _a : ContainerOrigin.C;
|
|
23
|
+
return _this;
|
|
21
24
|
}
|
|
25
|
+
Container.prototype.getStyles = function () {
|
|
26
|
+
var styles;
|
|
27
|
+
if (this.o === ContainerOrigin.NW) {
|
|
28
|
+
styles = {
|
|
29
|
+
top: 0,
|
|
30
|
+
left: 0,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else if (this.o === ContainerOrigin.N) {
|
|
34
|
+
styles = {
|
|
35
|
+
top: 0,
|
|
36
|
+
left: '50%',
|
|
37
|
+
transform: 'translateX(-50%)',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
else if (this.o === ContainerOrigin.NE) {
|
|
41
|
+
styles = {
|
|
42
|
+
top: 0,
|
|
43
|
+
right: 0,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
else if (this.o === ContainerOrigin.E) {
|
|
47
|
+
styles = {
|
|
48
|
+
top: '50%',
|
|
49
|
+
right: 0,
|
|
50
|
+
transform: 'translateY(-50%)',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
else if (this.o === ContainerOrigin.SE) {
|
|
54
|
+
styles = {
|
|
55
|
+
bottom: 0,
|
|
56
|
+
right: 0,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
else if (this.o === ContainerOrigin.S) {
|
|
60
|
+
styles = {
|
|
61
|
+
bottom: 0,
|
|
62
|
+
left: '50%',
|
|
63
|
+
transform: 'translateX(-50%)',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (this.o === ContainerOrigin.SW) {
|
|
67
|
+
styles = {
|
|
68
|
+
bottom: 0,
|
|
69
|
+
left: 0,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
else if (this.o === ContainerOrigin.W) {
|
|
73
|
+
styles = {
|
|
74
|
+
top: '50%',
|
|
75
|
+
left: 0,
|
|
76
|
+
transform: 'translateY(-50%)',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
styles = {
|
|
81
|
+
top: '50%',
|
|
82
|
+
left: '50%',
|
|
83
|
+
transform: 'translateX(-50%) translateY(-50%)',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
styles.position = 'absolute';
|
|
87
|
+
styles.overflow = 'hidden';
|
|
88
|
+
return styles;
|
|
89
|
+
};
|
|
22
90
|
return Container;
|
|
23
91
|
}(BaseElement));
|
|
24
92
|
export { Container };
|
|
93
|
+
export var ContainerOrigin;
|
|
94
|
+
(function (ContainerOrigin) {
|
|
95
|
+
ContainerOrigin[ContainerOrigin["NW"] = 1] = "NW";
|
|
96
|
+
ContainerOrigin[ContainerOrigin["N"] = 2] = "N";
|
|
97
|
+
ContainerOrigin[ContainerOrigin["NE"] = 3] = "NE";
|
|
98
|
+
ContainerOrigin[ContainerOrigin["W"] = 4] = "W";
|
|
99
|
+
ContainerOrigin[ContainerOrigin["C"] = 5] = "C";
|
|
100
|
+
ContainerOrigin[ContainerOrigin["E"] = 6] = "E";
|
|
101
|
+
ContainerOrigin[ContainerOrigin["SW"] = 7] = "SW";
|
|
102
|
+
ContainerOrigin[ContainerOrigin["S"] = 8] = "S";
|
|
103
|
+
ContainerOrigin[ContainerOrigin["SE"] = 9] = "SE";
|
|
104
|
+
})(ContainerOrigin || (ContainerOrigin = {}));
|
|
@@ -9,9 +9,9 @@ var TriggerData = /** @class */ (function () {
|
|
|
9
9
|
* @param {Props} data payload
|
|
10
10
|
*/
|
|
11
11
|
function TriggerData(data) {
|
|
12
|
-
this.
|
|
12
|
+
this.expireAt = new Date().getTime();
|
|
13
13
|
this.id = data.id;
|
|
14
|
-
this.
|
|
14
|
+
this.expireAt = data.expireAt;
|
|
15
15
|
this.version = data.version;
|
|
16
16
|
this.engagementID = data.engagementID;
|
|
17
17
|
this.internal = data.internal;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { LocalStorageHelper } from '../../utils/local-storage-helper';
|
|
2
|
+
import { Constants } from '../../constants';
|
|
3
|
+
import { EmbeddedTrigger } from './embedded-trigger';
|
|
4
|
+
/**
|
|
5
|
+
* A small helper class for any kind of engagement trigger like caching or retrieving from local storage.
|
|
6
|
+
*
|
|
7
|
+
* @author Abhishek Taparia
|
|
8
|
+
* @since 0.0.7
|
|
9
|
+
*/
|
|
10
|
+
var TriggerHelper = /** @class */ (function () {
|
|
11
|
+
function TriggerHelper() {
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Store the current active trigger details in local storage for "late engagement tracking".
|
|
15
|
+
* @param triggerData trigger data
|
|
16
|
+
*/
|
|
17
|
+
TriggerHelper.storeActiveTrigger = function (triggerData) {
|
|
18
|
+
if (triggerData.id === 'test') {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
var activeTriggers = LocalStorageHelper.getObject(Constants.STORAGE_ACTIVE_TRIGGERS);
|
|
22
|
+
if (!activeTriggers) {
|
|
23
|
+
activeTriggers = [];
|
|
24
|
+
}
|
|
25
|
+
var embeddedTrigger = new EmbeddedTrigger(triggerData);
|
|
26
|
+
if (!embeddedTrigger.isExpired) {
|
|
27
|
+
activeTriggers.push(embeddedTrigger);
|
|
28
|
+
}
|
|
29
|
+
LocalStorageHelper.setObject(Constants.STORAGE_ACTIVE_TRIGGER, embeddedTrigger);
|
|
30
|
+
LocalStorageHelper.setObject(Constants.STORAGE_ACTIVE_TRIGGERS, activeTriggers);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Get the list of non-expired active triggers from local storage for "late engagement tracking".
|
|
34
|
+
*
|
|
35
|
+
* @return EmbeddedTrigger[] list of active triggers
|
|
36
|
+
*/
|
|
37
|
+
TriggerHelper.getActiveTriggers = function () {
|
|
38
|
+
var activeTriggers = LocalStorageHelper.getObject(Constants.STORAGE_ACTIVE_TRIGGERS);
|
|
39
|
+
if (!activeTriggers) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
activeTriggers.forEach(function (trigger, index, array) {
|
|
43
|
+
if (new EmbeddedTrigger(trigger).isExpired) {
|
|
44
|
+
array.splice(index, 1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
LocalStorageHelper.setObject(Constants.STORAGE_ACTIVE_TRIGGERS, activeTriggers);
|
|
48
|
+
return activeTriggers;
|
|
49
|
+
};
|
|
50
|
+
return TriggerHelper;
|
|
51
|
+
}());
|
|
52
|
+
export { TriggerHelper };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Renderer } from './renderer';
|
|
2
|
-
import UAParser from 'ua-parser-js';
|
|
3
2
|
import { ClickActionExecutor } from '../models/trigger/action/click-action-executor';
|
|
4
3
|
import { getScalingFactor } from './index';
|
|
5
4
|
import { Container } from '../models/trigger/inapp/container';
|
|
@@ -10,16 +9,13 @@ import { Container } from '../models/trigger/inapp/container';
|
|
|
10
9
|
* @version 0.0.5
|
|
11
10
|
*/
|
|
12
11
|
var BlockProcessor = /** @class */ (function () {
|
|
13
|
-
/**
|
|
14
|
-
* Constructor
|
|
15
|
-
*/
|
|
16
12
|
function BlockProcessor(parentHTMLEl, inappElement) {
|
|
13
|
+
this.renderer = Renderer.get();
|
|
17
14
|
this.screenWidth = 0;
|
|
18
15
|
this.screenHeight = 0;
|
|
19
16
|
this.scalingFactor = getScalingFactor();
|
|
20
17
|
this.parentHTMLEl = parentHTMLEl;
|
|
21
18
|
this.inappElement = inappElement;
|
|
22
|
-
this.renderer = new Renderer();
|
|
23
19
|
this.screenWidth = this.renderer.getWidth();
|
|
24
20
|
this.screenHeight = this.renderer.getHeight();
|
|
25
21
|
}
|
|
@@ -40,7 +36,6 @@ var BlockProcessor = /** @class */ (function () {
|
|
|
40
36
|
this.processSpaceBlock();
|
|
41
37
|
this.processTransformBlock();
|
|
42
38
|
this.registerAction();
|
|
43
|
-
this.renderer.setStyle(this.inappHTMLEl, 'overflow', 'visible');
|
|
44
39
|
this.renderer.setStyle(this.inappHTMLEl, 'outline', 'none');
|
|
45
40
|
};
|
|
46
41
|
/**
|
|
@@ -141,7 +136,8 @@ var BlockProcessor = /** @class */ (function () {
|
|
|
141
136
|
if (!action) {
|
|
142
137
|
return;
|
|
143
138
|
}
|
|
144
|
-
this.inappHTMLEl.addEventListener('click', function () {
|
|
139
|
+
this.inappHTMLEl.addEventListener('click', function (event) {
|
|
140
|
+
event.stopPropagation();
|
|
145
141
|
new ClickActionExecutor(action).execute();
|
|
146
142
|
});
|
|
147
143
|
};
|
|
@@ -149,7 +145,6 @@ var BlockProcessor = /** @class */ (function () {
|
|
|
149
145
|
* Process background block of the element
|
|
150
146
|
*/
|
|
151
147
|
BlockProcessor.prototype.processBackgroundBlock = function () {
|
|
152
|
-
var _a;
|
|
153
148
|
var bg = this.inappElement.bg;
|
|
154
149
|
if (!bg) {
|
|
155
150
|
return;
|
|
@@ -159,12 +154,11 @@ var BlockProcessor = /** @class */ (function () {
|
|
|
159
154
|
if (this.inappElement instanceof Container) {
|
|
160
155
|
htmlElement = htmlElement.parentElement;
|
|
161
156
|
}
|
|
162
|
-
var prefix = '';
|
|
163
|
-
if ((_a = new UAParser().getBrowser().name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes('safari')) {
|
|
164
|
-
prefix = '-webkit-';
|
|
165
|
-
}
|
|
166
157
|
if (bg.glossy) {
|
|
167
|
-
|
|
158
|
+
// Style for Apple devices
|
|
159
|
+
this.renderer.setStyle(htmlElement, '-webkit-backdrop-filter', "blur(" + bg.glossy.radius + "px)");
|
|
160
|
+
// Style for other devices
|
|
161
|
+
this.renderer.setStyle(htmlElement, 'backdrop-filter', "blur(" + bg.glossy.radius + "px)");
|
|
168
162
|
if (bg.glossy.color) {
|
|
169
163
|
this.processColourBlock(bg.glossy.color, 'background', htmlElement);
|
|
170
164
|
}
|
|
@@ -185,7 +179,10 @@ var BlockProcessor = /** @class */ (function () {
|
|
|
185
179
|
this.renderer.setStyle(htmlElement, 'background', value);
|
|
186
180
|
this.renderer.setStyle(htmlElement, 'background-size', 'cover');
|
|
187
181
|
if (bg.img.a) {
|
|
188
|
-
|
|
182
|
+
// Style for Apple devices
|
|
183
|
+
this.renderer.setStyle(htmlElement, '-webkit-backdrop-filter', "opacity(" + bg.img.a + ")");
|
|
184
|
+
// Style for other devices
|
|
185
|
+
this.renderer.setStyle(htmlElement, 'backdrop-filter', "opacity(" + bg.img.a + ")");
|
|
189
186
|
}
|
|
190
187
|
}
|
|
191
188
|
};
|
|
@@ -13,7 +13,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
13
13
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
14
|
};
|
|
15
15
|
})();
|
|
16
|
-
import {
|
|
16
|
+
import { BlockProcessor } from './block-processor';
|
|
17
17
|
/**
|
|
18
18
|
* Renders container element.
|
|
19
19
|
*
|
|
@@ -24,6 +24,8 @@ var ContainerRenderer = /** @class */ (function (_super) {
|
|
|
24
24
|
__extends(ContainerRenderer, _super);
|
|
25
25
|
function ContainerRenderer(parentElement, inappElement) {
|
|
26
26
|
var _this = _super.call(this, parentElement, inappElement) || this;
|
|
27
|
+
_this.inappHTMLEl = _this.renderer.createElement('div');
|
|
28
|
+
_this.insertElement();
|
|
27
29
|
// Need to figure out the best way of doing this
|
|
28
30
|
_this.inappElement.w = 1080;
|
|
29
31
|
_this.inappElement.h = 1920;
|
|
@@ -31,14 +33,14 @@ var ContainerRenderer = /** @class */ (function (_super) {
|
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* Render group element from layers list in {@link InAppTrigger} block.
|
|
36
|
+
* @return The instance of this renderer.
|
|
34
37
|
*/
|
|
35
38
|
ContainerRenderer.prototype.render = function () {
|
|
36
|
-
|
|
39
|
+
this.processCommonBlocks();
|
|
37
40
|
this.renderer.setStyle(this.inappHTMLEl, 'position', 'relative');
|
|
38
|
-
|
|
39
|
-
this.renderer.setStyle(this.inappHTMLEl, 'height', '100%');*/
|
|
41
|
+
Object.assign(this.inappHTMLEl.style, this.inappElement.getStyles());
|
|
40
42
|
return this;
|
|
41
43
|
};
|
|
42
44
|
return ContainerRenderer;
|
|
43
|
-
}(
|
|
45
|
+
}(BlockProcessor));
|
|
44
46
|
export { ContainerRenderer };
|
|
@@ -7,11 +7,8 @@ import { Constants } from '../constants';
|
|
|
7
7
|
* @version 0.0.5
|
|
8
8
|
*/
|
|
9
9
|
var IFrameRenderer = /** @class */ (function () {
|
|
10
|
-
/**
|
|
11
|
-
* Constructor
|
|
12
|
-
*/
|
|
13
10
|
function IFrameRenderer() {
|
|
14
|
-
this.renderer =
|
|
11
|
+
this.renderer = Renderer.get();
|
|
15
12
|
}
|
|
16
13
|
/**
|
|
17
14
|
* Render iFrame element on CTAs.
|
|
@@ -20,7 +17,7 @@ var IFrameRenderer = /** @class */ (function () {
|
|
|
20
17
|
* @private
|
|
21
18
|
*/
|
|
22
19
|
IFrameRenderer.prototype.render = function (url) {
|
|
23
|
-
var root =
|
|
20
|
+
var root = document.querySelector("." + Constants.IN_APP_CONTAINER_NAME);
|
|
24
21
|
var iFrameDiv = this.createIFrameContainer();
|
|
25
22
|
this.createIFrameElement(iFrameDiv, url);
|
|
26
23
|
// Create and render close button for iFrame with anchor tag
|
|
@@ -33,8 +33,8 @@ var ImageRenderer = /** @class */ (function (_super) {
|
|
|
33
33
|
*/
|
|
34
34
|
ImageRenderer.prototype.render = function () {
|
|
35
35
|
this.renderer.setAttribute(this.inappHTMLEl, 'src', this.inappElement.src);
|
|
36
|
-
this.renderer.setStyle(this.inappHTMLEl, 'max-width', '
|
|
37
|
-
this.renderer.setStyle(this.inappHTMLEl, 'max-height', '
|
|
36
|
+
this.renderer.setStyle(this.inappHTMLEl, 'max-width', 'none');
|
|
37
|
+
this.renderer.setStyle(this.inappHTMLEl, 'max-height', 'none');
|
|
38
38
|
this.renderer.setStyle(this.inappHTMLEl, 'display', 'block');
|
|
39
39
|
this.renderer.setStyle(this.inappHTMLEl, 'margin', '0 auto');
|
|
40
40
|
this.processCommonBlocks();
|
|
@@ -5,6 +5,9 @@ import { LocalStorageHelper } from '../utils/local-storage-helper';
|
|
|
5
5
|
import { Constants } from '../constants';
|
|
6
6
|
import { ImageRenderer, RootContainerRenderer, ShapeRenderer, TextRenderer } from './';
|
|
7
7
|
import { ContainerRenderer } from './container-renderer';
|
|
8
|
+
import { TriggerHelper } from '../models/trigger/trigger-helper';
|
|
9
|
+
import { SafeHttpService } from '../services/safe-http-service';
|
|
10
|
+
import { Event } from '../models/event/event';
|
|
8
11
|
/**
|
|
9
12
|
* Renders In App trigger
|
|
10
13
|
*
|
|
@@ -13,10 +16,13 @@ import { ContainerRenderer } from './container-renderer';
|
|
|
13
16
|
*/
|
|
14
17
|
var InAppRenderer = /** @class */ (function () {
|
|
15
18
|
/**
|
|
16
|
-
* Public constructor
|
|
19
|
+
* Public constructor.
|
|
20
|
+
*
|
|
21
|
+
* @param parent Place the in-app in the given parent instead of the document.body.
|
|
17
22
|
*/
|
|
18
|
-
function InAppRenderer() {
|
|
19
|
-
this.
|
|
23
|
+
function InAppRenderer(parent) {
|
|
24
|
+
this.parent = parent;
|
|
25
|
+
this.rootContainer = new RootContainerRenderer(parent).render();
|
|
20
26
|
}
|
|
21
27
|
/**
|
|
22
28
|
* Renders in-app trigger from payload received
|
|
@@ -27,11 +33,13 @@ var InAppRenderer = /** @class */ (function () {
|
|
|
27
33
|
this.ian = triggerData.ian;
|
|
28
34
|
try {
|
|
29
35
|
this.renderContainer();
|
|
36
|
+
var event_1 = new Event('CE Trigger Displayed', { 'triggerID': triggerData.id });
|
|
37
|
+
SafeHttpService.getInstance().sendEvent(event_1);
|
|
30
38
|
LocalStorageHelper.setNumber(Constants.STORAGE_TRIGGER_START_TIME, new Date().getTime());
|
|
31
|
-
|
|
39
|
+
TriggerHelper.storeActiveTrigger(triggerData);
|
|
32
40
|
}
|
|
33
41
|
catch (e) {
|
|
34
|
-
Log.
|
|
42
|
+
Log.error(e);
|
|
35
43
|
}
|
|
36
44
|
};
|
|
37
45
|
/**
|
|
@@ -50,7 +58,7 @@ var InAppRenderer = /** @class */ (function () {
|
|
|
50
58
|
new ShapeRenderer(parentEl, inappElement).render();
|
|
51
59
|
}
|
|
52
60
|
else {
|
|
53
|
-
Log.
|
|
61
|
+
Log.error('Unsupported element type- ' + inappElement.type);
|
|
54
62
|
}
|
|
55
63
|
};
|
|
56
64
|
/**
|
package/dist/renderer/index.js
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
import { Constants } from '../constants';
|
|
2
|
+
import { Renderer } from './renderer';
|
|
2
3
|
export { TextRenderer } from './text-renderer';
|
|
3
4
|
export { ShapeRenderer } from './shape-renderer';
|
|
4
5
|
export { ImageRenderer } from './image-renderer';
|
|
5
6
|
export { RootContainerRenderer } from './root-container-renderer';
|
|
6
7
|
export { IFrameRenderer } from './iFrame-renderer';
|
|
7
8
|
/**
|
|
8
|
-
* Calculate scaling factor according to
|
|
9
|
+
* Calculate scaling factor according to parent most container where the in-app's root container will be rendered.
|
|
9
10
|
* @return number scaling factor
|
|
10
11
|
*/
|
|
11
12
|
export function getScalingFactor() {
|
|
12
|
-
var screenWidth =
|
|
13
|
-
var screenHeight =
|
|
13
|
+
var screenWidth = Renderer.get().getWidth();
|
|
14
|
+
var screenHeight = Renderer.get().getHeight();
|
|
15
|
+
var scalingFactor;
|
|
14
16
|
if (screenWidth < screenHeight) {
|
|
15
17
|
var shortEdge = Math.min(Constants.CANVAS_WIDTH, Constants.CANVAS_HEIGHT);
|
|
16
|
-
|
|
18
|
+
scalingFactor = screenWidth / shortEdge;
|
|
17
19
|
}
|
|
18
20
|
else {
|
|
19
21
|
var longEdge = Math.max(Constants.CANVAS_WIDTH, Constants.CANVAS_HEIGHT);
|
|
20
|
-
|
|
22
|
+
scalingFactor = screenHeight / longEdge;
|
|
21
23
|
}
|
|
24
|
+
// The in-app should not scale beyond 100%
|
|
25
|
+
return Math.min(scalingFactor, 1);
|
|
22
26
|
}
|
|
@@ -5,21 +5,34 @@
|
|
|
5
5
|
* @version 0.0.5
|
|
6
6
|
*/
|
|
7
7
|
var Renderer = /** @class */ (function () {
|
|
8
|
+
// No need to instantiate this class.
|
|
8
9
|
function Renderer() {
|
|
9
10
|
this.doc = document;
|
|
10
11
|
}
|
|
12
|
+
Renderer.get = function () {
|
|
13
|
+
if (!Renderer._instance) {
|
|
14
|
+
Renderer._instance = new Renderer();
|
|
15
|
+
}
|
|
16
|
+
return Renderer._instance;
|
|
17
|
+
};
|
|
11
18
|
/**
|
|
12
|
-
* Get width of the
|
|
13
|
-
* @return
|
|
19
|
+
* Get width of the parent most container where the Cooee's root div will render.
|
|
20
|
+
* @return width of the parent most container.
|
|
14
21
|
*/
|
|
15
22
|
Renderer.prototype.getWidth = function () {
|
|
23
|
+
if (this.parentContainer) {
|
|
24
|
+
return this.parentContainer.clientWidth;
|
|
25
|
+
}
|
|
16
26
|
return document.documentElement.clientWidth;
|
|
17
27
|
};
|
|
18
28
|
/**
|
|
19
|
-
* Get height of the
|
|
20
|
-
* @return
|
|
29
|
+
* Get height of the parent most container where the Cooee's root div will render.
|
|
30
|
+
* @return height of the parent most container.
|
|
21
31
|
*/
|
|
22
32
|
Renderer.prototype.getHeight = function () {
|
|
33
|
+
if (this.parentContainer) {
|
|
34
|
+
return this.parentContainer.clientHeight;
|
|
35
|
+
}
|
|
23
36
|
return document.documentElement.clientHeight;
|
|
24
37
|
};
|
|
25
38
|
/**
|
|
@@ -53,7 +66,7 @@ var Renderer = /** @class */ (function () {
|
|
|
53
66
|
element.style.removeProperty(styleName);
|
|
54
67
|
return;
|
|
55
68
|
}
|
|
56
|
-
element.style.setProperty(styleName, value);
|
|
69
|
+
element.style.setProperty(styleName, value, 'important');
|
|
57
70
|
};
|
|
58
71
|
/**
|
|
59
72
|
* Set style of the element
|
|
@@ -65,12 +78,11 @@ var Renderer = /** @class */ (function () {
|
|
|
65
78
|
element.setAttribute(attrName, value);
|
|
66
79
|
};
|
|
67
80
|
/**
|
|
68
|
-
*
|
|
69
|
-
* @param
|
|
70
|
-
* @return {HTMLElement | null} returns element if present, otherwise null
|
|
81
|
+
* Set the parent most container where the Cooee's In-App's root div will render.
|
|
82
|
+
* @param container The HTML holder element.
|
|
71
83
|
*/
|
|
72
|
-
Renderer.prototype.
|
|
73
|
-
|
|
84
|
+
Renderer.prototype.setParentContainer = function (container) {
|
|
85
|
+
this.parentContainer = container;
|
|
74
86
|
};
|
|
75
87
|
return Renderer;
|
|
76
88
|
}());
|