dbm 1.4.15 → 1.4.17
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/commands/index.js +1 -1
- package/css/admin.css +6 -1
- package/css/all.css +4 -1
- package/css/cookie-bar.css +40 -0
- package/css/elements.css +41 -0
- package/css/form-field.css +46 -0
- package/css/grid.css +8 -0
- package/css/icons.css +2 -0
- package/css/utils.css +12 -6
- package/dbm.js +1 -1
- package/ecommerce/Cart.js +44 -9
- package/ecommerce/LocalStorageCartLoader.js +7 -3
- package/flow/controllers/select/SingleSelection.js +7 -0
- package/flow/updatefunctions/basic/index.js +1 -1
- package/graphapi/webclient/decode/Relations.js +12 -0
- package/loading/index.js +34 -0
- package/package.json +1 -1
- package/react/BaseObject.js +22 -5
- package/react/admin/editor/Editor.js +5 -6
- package/react/admin/editor/fields/ArrayField.js +24 -7
- package/react/admin/editor/fields/Link.js +53 -0
- package/react/admin/editor/fields/index.js +2 -1
- package/react/admin/objects/ExploreObject.js +103 -0
- package/react/admin/objects/explore/Relation.js +67 -0
- package/react/admin/objects/explore/RelationType.js +38 -0
- package/react/admin/objects/explore/RelationTypeGroup.js +22 -0
- package/react/admin/objects/explore/index.js +3 -0
- package/react/admin/objects/index.js +3 -1
- package/react/admin/objects/itemeditors/DraggableHierarchyDisplay.js +1 -1
- package/react/admin/objects/itemeditors/TextAreaField.js +26 -0
- package/react/admin/objects/itemeditors/index.js +1 -0
- package/react/animation/AnimationController.js +1 -3
- package/react/animation/index.js +15 -0
- package/react/area/InsertElement.js +3 -0
- package/react/area/Layout.js +20 -0
- package/react/area/List.js +4 -0
- package/react/area/ModalDialog.js +89 -0
- package/react/area/NativeElement.js +37 -0
- package/react/area/RepeatedSlider.js +73 -0
- package/react/area/SingleItemSlideshow.js +69 -0
- package/react/area/SlideshowSteps.js +45 -0
- package/react/area/index.js +7 -1
- package/react/blocks/admin/objects/Explore.js +18 -0
- package/react/blocks/admin/objects/index.js +2 -1
- package/react/blocks/content/Buttons.js +33 -0
- package/react/blocks/content/ContentBlock.js +7 -2
- package/react/blocks/content/SectionsGrid.js +19 -0
- package/react/blocks/content/Spacing.js +13 -0
- package/react/blocks/content/SpacingLine.js +18 -0
- package/react/blocks/content/index.js +5 -1
- package/react/blocks/index.js +108 -0
- package/react/context/AddContextVariables.js +9 -4
- package/react/cookies/CookieBar.js +6 -4
- package/react/cookies/CookieOverlayMessage.js +6 -4
- package/react/dynamic/DesignRepositoryProxy.js +22 -0
- package/react/dynamic/DynamicDesignElement.js +24 -0
- package/react/dynamic/index.js +60 -0
- package/react/form/EditObjectProperty.js +15 -2
- package/react/form/EditableContent.js +71 -0
- package/react/form/GraphApiImageWithAltText.js +268 -0
- package/react/form/Link.js +40 -0
- package/react/form/Url.js +25 -0
- package/react/form/index.js +4 -0
- package/react/index.js +12 -0
- package/react/interaction/Checked.js +32 -0
- package/react/interaction/ClickOutsideTrigger.js +1 -1
- package/react/interaction/index.js +2 -1
- package/react/svg/AddGlobalFilterClasses.js +3 -3
- package/react/svg/BlendColorFilter.js +42 -0
- package/react/svg/GlobalFilters.js +1 -1
- package/react/svg/MatrixFilter.js +1 -3
- package/react/svg/index.js +20 -0
- package/react/text/index.js +4 -0
- package/repository/Item.js +8 -0
- package/repository/admin/index.js +10 -0
- package/repository/index.js +3 -0
- package/repository/proxy/RepositoryProxy.js +60 -0
- package/repository/proxy/index.js +1 -0
- package/site/BrowserUpdater.js +3 -3
- package/startup/index.js +1 -1
- package/tracking/Controller.js +26 -8
- package/tracking/ConversionLinker.js +53 -0
- package/tracking/DataLayerTracker.js +27 -18
- package/tracking/GtagTracker.js +112 -0
- package/tracking/MetaPixelTracker.js +1 -1
- package/tracking/PageListTracker.js +46 -0
- package/tracking/SingleAccountMetaPixelTracker.js +118 -0
- package/tracking/TagManagerTracker.js +2 -2
- package/tracking/index.js +58 -0
- package/utils/svg/ColorMatrixFunctions.js +13 -0
package/repository/index.js
CHANGED
|
@@ -3,6 +3,9 @@ import Dbm from "../index.js";
|
|
|
3
3
|
export {default as Item} from "./Item.js";
|
|
4
4
|
export {default as Repository} from "./Repository.js";
|
|
5
5
|
|
|
6
|
+
export * as proxy from "./proxy/index.js";
|
|
7
|
+
export * as admin from "./admin/index.js";
|
|
8
|
+
|
|
6
9
|
export const getItem = function(aName) {
|
|
7
10
|
return Dbm.getInstance().repository.getItem(aName);
|
|
8
11
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
|
|
3
|
+
export default class RepositoryProxy extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this._setupDefaults();
|
|
8
|
+
this.proxy = new Proxy({}, {get: this._proxy_get_mainProperty.bind(this)});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_setupDefaults() {
|
|
12
|
+
this.reposityPrefix = "";
|
|
13
|
+
this.propertyName = "(self)";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
_setupItem(aItem, aFullPath) {
|
|
17
|
+
//MENOTE: shoud be overridden
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
_getProperty(aTarget, aPropertyName, aPrefix) {
|
|
21
|
+
//MENOTE: this is not called directly by the proxy get function, but looks very similar
|
|
22
|
+
|
|
23
|
+
if(aTarget[aPropertyName]) {
|
|
24
|
+
return aTarget[aPropertyName];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
let firstLetter = aPropertyName.charAt(0);
|
|
29
|
+
let fullPath = aPrefix + aPropertyName;
|
|
30
|
+
|
|
31
|
+
if (firstLetter >= 'A' && firstLetter <= 'Z') {
|
|
32
|
+
let item = Dbm.repository.getItemIfExists(fullPath);
|
|
33
|
+
if(!item) {
|
|
34
|
+
let item = Dbm.repository.getItem(fullPath);
|
|
35
|
+
this._setupItem(item, fullPath);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return Dbm.objectPath(item, this.propertyName);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
aTarget[aPropertyName] = this._getProxyWithPrefix(fullPath + "/");
|
|
42
|
+
|
|
43
|
+
return aTarget[aPropertyName];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
_proxy_get_mainProperty(aTarget, aPropertyName, aReceiver) {
|
|
47
|
+
return this._getProperty(aTarget, aPropertyName, this.reposityPrefix);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_getProxyWithPrefix(aPrefix) {
|
|
51
|
+
|
|
52
|
+
let proxyFunction = function(aTarget, aPropertyName, aReceiver) {
|
|
53
|
+
return this._getProperty(aTarget, aPropertyName, aPrefix);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
let proxy = new Proxy({}, {get: proxyFunction.bind(this)});
|
|
57
|
+
|
|
58
|
+
return proxy;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {default as RepositoryProxy} from "./RepositoryProxy.js";
|
package/site/BrowserUpdater.js
CHANGED
|
@@ -16,12 +16,12 @@ export default class BrowserUpdater extends Dbm.core.BaseObject {
|
|
|
16
16
|
return this;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
_trackPage(aUrl) {
|
|
19
|
+
_trackPage(aUrl, aTitle) {
|
|
20
20
|
//console.log("_trackPage");
|
|
21
21
|
|
|
22
22
|
let trackingController = Dbm.getInstance().repository.getItem("trackingController").controller;
|
|
23
23
|
if(trackingController) {
|
|
24
|
-
trackingController.trackPage(aUrl);
|
|
24
|
+
trackingController.trackPage(aUrl, aTitle);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -59,6 +59,6 @@ export default class BrowserUpdater extends Dbm.core.BaseObject {
|
|
|
59
59
|
|
|
60
60
|
window.scrollTo(0, 0);
|
|
61
61
|
|
|
62
|
-
this._trackPage(document.location.href);
|
|
62
|
+
this._trackPage(document.location.href, document.title);
|
|
63
63
|
}
|
|
64
64
|
}
|
package/startup/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Dbm from "../index.js";
|
|
2
|
+
import React from "react";
|
|
2
3
|
|
|
3
4
|
export {default as Runner} from "./Runner.js";
|
|
4
5
|
export {default as Controller} from "./Controller.js";
|
|
@@ -34,5 +35,4 @@ export const setupLibrary = function() {
|
|
|
34
35
|
library.setValue("Dbm/flow/addUpdateCommandWhenMatched", Dbm.flow.addUpdateCommandWhenMatched);
|
|
35
36
|
library.setValue("Dbm/flow/updatefunctions/logic/Condition", Dbm.flow.updatefunctions.logic.Condition);
|
|
36
37
|
library.setValue("Dbm/flow/updatefunctions/logic/Switch", Dbm.flow.updatefunctions.logic.Switch);
|
|
37
|
-
|
|
38
38
|
}
|
package/tracking/Controller.js
CHANGED
|
@@ -18,11 +18,7 @@ export default class Controller extends Dbm.core.BaseObject {
|
|
|
18
18
|
//aItem.propertyInput("allowMarketing", this.item.getProperty("allowMarketing"));
|
|
19
19
|
//aItem.propertyInput("allowStatistics", this.item.getProperty("allowStatistics"));
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
trackers.push(aItem);
|
|
24
|
-
|
|
25
|
-
this.item.trackers = trackers;
|
|
21
|
+
this.item.addToArray("trackers", aItem);
|
|
26
22
|
|
|
27
23
|
if(this.item.active) {
|
|
28
24
|
aItem.controller.startTracking();
|
|
@@ -37,12 +33,22 @@ export default class Controller extends Dbm.core.BaseObject {
|
|
|
37
33
|
return this;
|
|
38
34
|
}
|
|
39
35
|
|
|
36
|
+
removeTracker(aItem) {
|
|
37
|
+
this.item.removeFromArray("trackers", aItem);
|
|
38
|
+
|
|
39
|
+
if(this.item.active) {
|
|
40
|
+
aItem.controller.stopTracking();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
|
|
40
46
|
setupPermissionsFromCookies() {
|
|
41
47
|
this.item.allowStatistics = Cookies.get("cookie/allowStatistics") === "1";
|
|
42
48
|
this.item.allowMarketing = Cookies.get("cookie/allowMarketing") === "1";
|
|
43
49
|
|
|
44
50
|
let cookieBarHiddenInitialSetting = Cookies.get("cookie/hideCookieBar") === "1";
|
|
45
|
-
|
|
51
|
+
Dbm.getRepositoryItem("userSettings").setValue("hideCookieBar", cookieBarHiddenInitialSetting);
|
|
46
52
|
|
|
47
53
|
return this;
|
|
48
54
|
}
|
|
@@ -135,14 +141,14 @@ export default class Controller extends Dbm.core.BaseObject {
|
|
|
135
141
|
return this;
|
|
136
142
|
}
|
|
137
143
|
|
|
138
|
-
trackPage(aUrl) {
|
|
144
|
+
trackPage(aUrl, aTitle = null) {
|
|
139
145
|
if(this.item.active && this.item.allowStatistics) {
|
|
140
146
|
let currentArray = this.item.trackers;
|
|
141
147
|
let currentArrayLength = currentArray.length;
|
|
142
148
|
|
|
143
149
|
for(let i = 0; i < currentArrayLength; i++) {
|
|
144
150
|
let currentTracker = currentArray[i];
|
|
145
|
-
currentTracker.controller.trackPage(aUrl);
|
|
151
|
+
currentTracker.controller.trackPage(aUrl, aTitle);
|
|
146
152
|
}
|
|
147
153
|
}
|
|
148
154
|
}
|
|
@@ -181,6 +187,18 @@ export default class Controller extends Dbm.core.BaseObject {
|
|
|
181
187
|
this.trackEvent("Product view", data, "ecommerce");
|
|
182
188
|
}
|
|
183
189
|
|
|
190
|
+
trackProductListView(aProducts, aListId = null) {
|
|
191
|
+
|
|
192
|
+
let additionalData = {};
|
|
193
|
+
if(aListId) {
|
|
194
|
+
additionalData["item_list_id"] = aListId;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let data = this.createProductItemsSummary(aProducts, additionalData);
|
|
198
|
+
|
|
199
|
+
this.trackEvent("Product list view", data, "ecommerce");
|
|
200
|
+
}
|
|
201
|
+
|
|
184
202
|
trackAddedToCart(aProductOrProducts) {
|
|
185
203
|
let data = this.createProductItemsSummary(aProductOrProducts);
|
|
186
204
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import Dbm from "../index.js";
|
|
2
|
+
|
|
3
|
+
export default class ConversionLinker extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this.item.setValue("linkerDomains", [document.location.host]);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
_gtag() {
|
|
11
|
+
window.dataLayer.push(arguments);
|
|
12
|
+
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
startTracking() {
|
|
17
|
+
if(!window.dataLayer) {
|
|
18
|
+
window.dataLayer = [];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
startStatisticsTracking() {
|
|
25
|
+
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
startMarketingTracking() {
|
|
30
|
+
|
|
31
|
+
this._gtag("set", "linker", {"domains": this.item.linkerDomains})
|
|
32
|
+
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
stopTracking() {
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
trackEvent(aEventName, aData, aDataStructure = null) {
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
trackCurrentPage() {
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
trackPage(aUrl, aTitle = null) {
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -7,6 +7,8 @@ export default class DataLayerTracker extends Dbm.core.BaseObject {
|
|
|
7
7
|
this._statisticsTracking = false;
|
|
8
8
|
this._marketingTracking = false;
|
|
9
9
|
|
|
10
|
+
this.item.setValue("setConsent", true);
|
|
11
|
+
this.item.setValue("sendMarketingEvents", true);
|
|
10
12
|
this.item.setValue("ecommerceDataWrapper", null);
|
|
11
13
|
this.item.setValue("eventNameMap", new Dbm.repository.Item());
|
|
12
14
|
}
|
|
@@ -29,12 +31,15 @@ export default class DataLayerTracker extends Dbm.core.BaseObject {
|
|
|
29
31
|
window.dataLayer = [];
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
this.
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
if(this.item.setConsent) {
|
|
35
|
+
this._gtag("consent", "default", {
|
|
36
|
+
"ad_storage": "denied",
|
|
37
|
+
"ad_user_data": "denied",
|
|
38
|
+
"ad_personalization": "denied",
|
|
39
|
+
"analytics_storage": "denied"
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
|
|
39
44
|
return this;
|
|
40
45
|
}
|
|
@@ -42,9 +47,11 @@ export default class DataLayerTracker extends Dbm.core.BaseObject {
|
|
|
42
47
|
startStatisticsTracking() {
|
|
43
48
|
|
|
44
49
|
this._statisticsTracking = true;
|
|
45
|
-
this.
|
|
46
|
-
"
|
|
47
|
-
|
|
50
|
+
if(this.item.setConsent) {
|
|
51
|
+
this._gtag("consent", "update", {
|
|
52
|
+
"analytics_storage": "granted"
|
|
53
|
+
});
|
|
54
|
+
}
|
|
48
55
|
this.addToDataLayer({"event": "enableStatistics"});
|
|
49
56
|
this.addToDataLayer({"event": "trackCurrentPage"});
|
|
50
57
|
|
|
@@ -54,11 +61,13 @@ export default class DataLayerTracker extends Dbm.core.BaseObject {
|
|
|
54
61
|
startMarketingTracking() {
|
|
55
62
|
|
|
56
63
|
this._marketingTracking = true;
|
|
57
|
-
this.
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
if(this.item.setConsent) {
|
|
65
|
+
this._gtag("consent", "update", {
|
|
66
|
+
"ad_storage": "granted",
|
|
67
|
+
"ad_user_data": "granted",
|
|
68
|
+
"ad_personalization": "granted"
|
|
69
|
+
});
|
|
70
|
+
}
|
|
62
71
|
this.addToDataLayer({"event": "enableMarketing"});
|
|
63
72
|
|
|
64
73
|
return this;
|
|
@@ -98,7 +107,7 @@ export default class DataLayerTracker extends Dbm.core.BaseObject {
|
|
|
98
107
|
|
|
99
108
|
}
|
|
100
109
|
|
|
101
|
-
if(this._marketingTracking) {
|
|
110
|
+
if(this._marketingTracking && this.item.sendMarketingEvents) {
|
|
102
111
|
this.addToDataLayer({"event": "trackMarketingEvent", "value": {"name": aEventName, "data": aData}});
|
|
103
112
|
if(aDataStructure === "raw") {
|
|
104
113
|
let adjustedData = {
|
|
@@ -118,10 +127,10 @@ export default class DataLayerTracker extends Dbm.core.BaseObject {
|
|
|
118
127
|
}
|
|
119
128
|
|
|
120
129
|
trackCurrentPage() {
|
|
121
|
-
this.trackPage(document.location.href);
|
|
130
|
+
this.trackPage(document.location.href, document.title);
|
|
122
131
|
}
|
|
123
132
|
|
|
124
|
-
trackPage(aUrl) {
|
|
125
|
-
this.addToDataLayer({"event": "trackPage", "value": {"url": aUrl}});
|
|
133
|
+
trackPage(aUrl, aTitle = null) {
|
|
134
|
+
this.addToDataLayer({"event": "trackPage", "value": {"url": aUrl, "title": aTitle}});
|
|
126
135
|
}
|
|
127
136
|
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import Dbm from "../index.js";
|
|
2
|
+
|
|
3
|
+
export default class GtagTracker extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this.item.setValue("tagId", null);
|
|
8
|
+
this.item.setValue("eventNameMap", new Dbm.repository.Item());
|
|
9
|
+
|
|
10
|
+
this.item.eventNameMap.setValue("Product list view", "view_item_list");
|
|
11
|
+
this.item.eventNameMap.setValue("Product view", "view_item");
|
|
12
|
+
this.item.eventNameMap.setValue("Added to cart", "add_to_cart");
|
|
13
|
+
this.item.eventNameMap.setValue("View cart", "view_cart");
|
|
14
|
+
this.item.eventNameMap.setValue("Add shipping", "add_shipping_info");
|
|
15
|
+
this.item.eventNameMap.setValue("Purchase", "purchase");
|
|
16
|
+
this.item.eventNameMap.setValue("Checkout started", "begin_checkout");
|
|
17
|
+
this.item.eventNameMap.setValue("Add payment", "add_payment_info");
|
|
18
|
+
|
|
19
|
+
this.item.setValue("conversionIds", new Dbm.repository.Item());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
addPurchaseTrackingId(aId) {
|
|
23
|
+
|
|
24
|
+
this.item.conversionIds.setValue("purchase", aId);
|
|
25
|
+
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
addToDataLayer(aData) {
|
|
30
|
+
|
|
31
|
+
window.dataLayer.push(aData);
|
|
32
|
+
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
_gtag() {
|
|
37
|
+
window.dataLayer.push(arguments);
|
|
38
|
+
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
startTracking() {
|
|
43
|
+
if(!window.dataLayer) {
|
|
44
|
+
window.dataLayer = [];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
this._gtag("config", this.item.tagId, {
|
|
48
|
+
"send_page_view": false
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
startStatisticsTracking() {
|
|
55
|
+
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
startMarketingTracking() {
|
|
60
|
+
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
stopTracking() {
|
|
65
|
+
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
_getSendData(aData) {
|
|
70
|
+
let sendData = {
|
|
71
|
+
...aData,
|
|
72
|
+
"send_to": this.item.tagId
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return sendData;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
trackEvent(aEventName, aData, aDataStructure = null) {
|
|
79
|
+
console.log("trackEvent");
|
|
80
|
+
console.log(aEventName, aData, aDataStructure);
|
|
81
|
+
|
|
82
|
+
let translatedEventName = this.item.eventNameMap[aEventName];
|
|
83
|
+
if(translatedEventName) {
|
|
84
|
+
aEventName = translatedEventName;
|
|
85
|
+
|
|
86
|
+
this._gtag("event", aEventName, this._getSendData(aData));
|
|
87
|
+
|
|
88
|
+
let conversionId = this.item.conversionIds[aEventName];
|
|
89
|
+
if(conversionId) {
|
|
90
|
+
let sendData = this._getSendData(aData);
|
|
91
|
+
sendData["send_to"] += "/" + conversionId;
|
|
92
|
+
this._gtag("event", "conversion", sendData);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
trackCurrentPage() {
|
|
100
|
+
this.trackPage(document.location.href, document.title);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
trackPage(aUrl, aTitle = null) {
|
|
104
|
+
|
|
105
|
+
let data = {
|
|
106
|
+
page_location: aUrl,
|
|
107
|
+
page_title: aTitle
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
this._gtag("event", "page_view", this._getSendData(data));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import Dbm from "../index.js";
|
|
2
|
+
|
|
3
|
+
export default class PageListTracker extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this.item.requireProperty("items", []);
|
|
8
|
+
this.item.requireProperty("listId", null);
|
|
9
|
+
|
|
10
|
+
let allLoaded = Dbm.flow.updatefunctions.logic.allAtValue(true);
|
|
11
|
+
this.item.requireProperty("allLoaded", allLoaded);
|
|
12
|
+
|
|
13
|
+
let rendered = this.item.requireProperty("rendered", false);
|
|
14
|
+
allLoaded.addCheck(rendered);
|
|
15
|
+
|
|
16
|
+
this.item.requireProperty("ready", false).addUpdateWhenMatched(true, this._getScopedCallFunctionCommand(this._readyToSend));
|
|
17
|
+
this.item.properties.ready.connectInput(allLoaded.output.properties.value);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
startRenderTime(aTime = 0.2) {
|
|
21
|
+
this.item.properties.rendered.delayValue(true, aTime);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
createItem() {
|
|
25
|
+
let newItem = new Dbm.repository.Item();
|
|
26
|
+
|
|
27
|
+
let readyProperty = newItem.requireProperty("ready", false);
|
|
28
|
+
newItem.setValue("item", null);
|
|
29
|
+
this.item.addToArray("items", newItem);
|
|
30
|
+
|
|
31
|
+
this.item.allLoaded.addCheck(readyProperty);
|
|
32
|
+
|
|
33
|
+
return newItem;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
_readyToSend() {
|
|
37
|
+
console.log("_readyToSend");
|
|
38
|
+
|
|
39
|
+
let products = Dbm.utils.ArrayFunctions.removeValues(Dbm.utils.ArrayFunctions.mapField(this.item.items, "item"), [null, undefined]);
|
|
40
|
+
|
|
41
|
+
if(products.length) {
|
|
42
|
+
let trackingController = Dbm.repository.getControllerIfExists("trackingController");
|
|
43
|
+
trackingController.trackProductListView(products, this.item.listId);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import Dbm from "../index.js";
|
|
2
|
+
|
|
3
|
+
export default class SingleAccountMetaPixelTracker extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this._isStarted = false;
|
|
8
|
+
this.item.requireProperty("pixelId");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_setupFunction() {
|
|
12
|
+
|
|
13
|
+
if(window.fbq) return;
|
|
14
|
+
|
|
15
|
+
let fbq = function() {
|
|
16
|
+
fbq.callMethod ? fbq.callMethod.apply(fbq, arguments) : fbq.queue.push(arguments);
|
|
17
|
+
}
|
|
18
|
+
window.fbq = fbq;
|
|
19
|
+
|
|
20
|
+
if(!window._fbq) {
|
|
21
|
+
window._fbq = fbq;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
fbq.push = fbq;
|
|
25
|
+
fbq.loaded = true;
|
|
26
|
+
fbq.version = "2.0";
|
|
27
|
+
fbq.queue = [];
|
|
28
|
+
fbq.disablePushState = true;
|
|
29
|
+
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
startTracking() {
|
|
34
|
+
|
|
35
|
+
//MENOTE: do nothing
|
|
36
|
+
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
startStatisticsTracking() {
|
|
41
|
+
|
|
42
|
+
//MENOTE: do nothing
|
|
43
|
+
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
startMarketingTracking() {
|
|
48
|
+
|
|
49
|
+
this._isStarted = true;
|
|
50
|
+
this._setupFunction();
|
|
51
|
+
Dbm.loading.loadScript("https://connect.facebook.net/en_US/fbevents.js");
|
|
52
|
+
|
|
53
|
+
let pixelId = this.item.pixelId;
|
|
54
|
+
|
|
55
|
+
if(this.item.pixelId) {
|
|
56
|
+
window.fbq("init", this.item.pixelId);
|
|
57
|
+
window.fbq("trackSingle", this.item.pixelId, "PageView");
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
stopTracking() {
|
|
64
|
+
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
_convertGooogleAnalyctisData(aData) {
|
|
69
|
+
|
|
70
|
+
let data = {
|
|
71
|
+
content_type: "product",
|
|
72
|
+
value: aData.value,
|
|
73
|
+
currency: aData.currency,
|
|
74
|
+
contents: aData.items,
|
|
75
|
+
num_items: aData.items.length,
|
|
76
|
+
content_ids: Dbm.utils.ArrayFunctions.mapField(aData.items, "id")
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
if(aData.items.length === 1) {
|
|
80
|
+
data["content_name"] = aData.items[0]["item_name"];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return data;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
trackEvent(aEventName, aData) {
|
|
87
|
+
console.log("trackEvent");
|
|
88
|
+
console.log(aEventName, aData);
|
|
89
|
+
|
|
90
|
+
if(!this._isStarted) return;
|
|
91
|
+
|
|
92
|
+
if(aEventName === "Purchase") {
|
|
93
|
+
window.fbq('trackSingle', this.item.pixelId, 'Purchase', this._convertGooogleAnalyctisData(aData), {eventID: aData.transaction_id});
|
|
94
|
+
}
|
|
95
|
+
else if(aEventName === "Product view") {
|
|
96
|
+
window.fbq('trackSingle', this.item.pixelId, 'ViewContent', this._convertGooogleAnalyctisData(aData));
|
|
97
|
+
}
|
|
98
|
+
else if(aEventName === "Added to cart") {
|
|
99
|
+
window.fbq('trackSingle', this.item.pixelId, 'AddToCart', this._convertGooogleAnalyctisData(aData));
|
|
100
|
+
}
|
|
101
|
+
else if(aEventName === "Checkout started") {
|
|
102
|
+
window.fbq('trackSingle', this.item.pixelId, 'InitiateCheckout', this._convertGooogleAnalyctisData(aData));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
window.fbq("trackSingleCustom", this.item.pixelId, aEventName, aData);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
trackCurrentPage() {
|
|
110
|
+
if(!this._isStarted) return;
|
|
111
|
+
window.fbq("trackSingle", this.item.pixelId, "PageView");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
trackPage(aUrl, aTitle = null) {
|
|
115
|
+
if(!this._isStarted) return;
|
|
116
|
+
window.fbq("trackSingle", this.item.pixelId, "PageView");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -27,7 +27,7 @@ export default class TagManagerTracker extends Dbm.core.BaseObject {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
startStatisticsTracking() {
|
|
30
|
-
console.log("TagManagerTracker::startStatisticsTracking");
|
|
30
|
+
//console.log("TagManagerTracker::startStatisticsTracking");
|
|
31
31
|
this.loadTagManager();
|
|
32
32
|
|
|
33
33
|
return this;
|
|
@@ -52,7 +52,7 @@ export default class TagManagerTracker extends Dbm.core.BaseObject {
|
|
|
52
52
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
trackPage(aUrl) {
|
|
55
|
+
trackPage(aUrl, aTitle = null) {
|
|
56
56
|
|
|
57
57
|
}
|
|
58
58
|
}
|