dbm 1.4.16 → 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/package.json +1 -1
- package/react/area/ModalDialog.js +89 -0
- package/react/area/index.js +1 -0
- package/react/blocks/content/ContentBlock.js +7 -2
- package/react/cookies/CookieBar.js +5 -3
- package/react/cookies/CookieOverlayMessage.js +4 -2
- package/tracking/Controller.js +12 -0
- package/tracking/ConversionLinker.js +53 -0
- package/tracking/PageListTracker.js +46 -0
- package/tracking/index.js +34 -0
package/commands/index.js
CHANGED
|
@@ -57,7 +57,7 @@ export const trackEvent = function(aEventName, aAdditionalData = {}) {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
export const performCommands = function(aCommands, aFromObject = null, aEventData = null) {
|
|
60
|
-
let currentArray = aCommands;
|
|
60
|
+
let currentArray = Dbm.utils.ArrayFunctions.singleOrArray(aCommands);
|
|
61
61
|
let currentArrayLength = currentArray.length;
|
|
62
62
|
for(let i = 0; i < currentArrayLength; i++) {
|
|
63
63
|
let currentCommand = currentArray[i];
|
package/package.json
CHANGED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class ModalDialog extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
this._isOpen = false;
|
|
9
|
+
let updateCommand = this._getScopedCallFunctionCommand(this._updateOpen);
|
|
10
|
+
|
|
11
|
+
let startValue = this.getPropValue("startState") === "open";
|
|
12
|
+
let openProperty = this.getDynamicPropWithoutState("open", startValue);
|
|
13
|
+
openProperty.addUpdate(updateCommand);
|
|
14
|
+
|
|
15
|
+
let elementProperty = this.item.requireProperty("ref/mainElement", null);
|
|
16
|
+
elementProperty.addUpdate(updateCommand);
|
|
17
|
+
elementProperty.addUpdate(this._getScopedCallFunctionCommand(this._addCancelListener));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
_removedUsedProps(aProps) {
|
|
21
|
+
delete aProps["startState"];
|
|
22
|
+
delete aProps["open"];
|
|
23
|
+
delete aProps["preventKeyboardClosing"];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
_updateOpen() {
|
|
27
|
+
console.log("_updateOpen");
|
|
28
|
+
let open = this.getPropValue("open");
|
|
29
|
+
|
|
30
|
+
let element = this.item.mainElement;
|
|
31
|
+
if(element) {
|
|
32
|
+
console.log(this.item.mainElement, this.item);
|
|
33
|
+
if(open && !this._isOpen) {
|
|
34
|
+
element.showModal();
|
|
35
|
+
this._isOpen = true;
|
|
36
|
+
}
|
|
37
|
+
else if(this._isOpen) {
|
|
38
|
+
element.close();
|
|
39
|
+
this._isOpen = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
_addCancelListener() {
|
|
45
|
+
console.log("_addCancelListener");
|
|
46
|
+
let element = this.item.mainElement;
|
|
47
|
+
if(element) {
|
|
48
|
+
element.addEventListener("cancel", this._callback_cancel.bind(this), true);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
_callback_cancel(aEvent) {
|
|
53
|
+
console.log("_callback_cancel");
|
|
54
|
+
let preventKeyboardClosing = this.getPropValueWithoutNull("preventKeyboardClosing", false);
|
|
55
|
+
console.log(preventKeyboardClosing);
|
|
56
|
+
|
|
57
|
+
if(preventKeyboardClosing) {
|
|
58
|
+
aEvent.preventDefault();
|
|
59
|
+
aEvent.stopImmediatePropagation();
|
|
60
|
+
|
|
61
|
+
if(!aEvent.defaultPrevented) {
|
|
62
|
+
this._isOpen = false;
|
|
63
|
+
this.item.properties["props/open"].getMostUpstreamProperty().value = false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this._isOpen = false;
|
|
68
|
+
this.item.properties["props/open"].getMostUpstreamProperty().value = false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
componentDidMount() {
|
|
73
|
+
this._updateOpen();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
_renderMainElement() {
|
|
77
|
+
console.log("ModalDialog::_renderMainElement");
|
|
78
|
+
console.log(this);
|
|
79
|
+
|
|
80
|
+
return this._createMainElement("dialog", {"className": "modal-dialog", "ref": this.createRef("mainElement")},
|
|
81
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties["props/open"]},
|
|
82
|
+
React.createElement(Dbm.react.context.AddContextVariables, {"values": {"open": this.item.properties["props/open"]}},
|
|
83
|
+
this.getPropValue("children")
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
package/react/area/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export {default as SingleItemSlideshow} from "./SingleItemSlideshow.js";
|
|
|
18
18
|
export {default as SlideshowSteps} from "./SlideshowSteps.js";
|
|
19
19
|
export {default as RepeatedSlider} from "./RepeatedSlider.js";
|
|
20
20
|
export {default as Layout} from "./Layout.js";
|
|
21
|
+
export {default as ModalDialog} from "./ModalDialog.js";
|
|
21
22
|
|
|
22
23
|
export const responsiveLayout = function(aDefaultLayout) {
|
|
23
24
|
let newResponsiveLayout = new Dbm.react.area.ResponsiveLayout();
|
|
@@ -5,9 +5,14 @@ export default class ContentBlock extends Dbm.react.BaseObject {
|
|
|
5
5
|
_construct() {
|
|
6
6
|
super._construct();
|
|
7
7
|
|
|
8
|
-
let contentBlockId = this.context.blockData.contentBlock;
|
|
9
|
-
|
|
10
8
|
this.item.requireProperty("item", null);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_constructAfterProps() {
|
|
12
|
+
super._constructAfterProps();
|
|
13
|
+
|
|
14
|
+
let contentBlockId = this.getPropValueWithDefault("id", this.context.blockData.contentBlock);
|
|
15
|
+
console.log(contentBlockId);
|
|
11
16
|
|
|
12
17
|
let graphApi = Dbm.getInstance().repository.getItem("cachedGraphApi").controller;
|
|
13
18
|
{
|
|
@@ -37,6 +37,8 @@ export default class CookieBar extends Dbm.react.BaseObject {
|
|
|
37
37
|
elementSize.input.properties.element.connectInput(this.item.properties.widthElement);
|
|
38
38
|
elementSize.start();
|
|
39
39
|
|
|
40
|
+
let settingsUrl = this.getDynamicPropWithoutState("settingsUrl", "/cookie-settings/");
|
|
41
|
+
|
|
40
42
|
let layoutSwitch = new Dbm.flow.updatefunctions.logic.RangeSwitch();
|
|
41
43
|
layoutSwitch.input.properties.value.connectInput(elementSize.output.properties.width);
|
|
42
44
|
|
|
@@ -59,7 +61,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
|
|
|
59
61
|
Dbm.react.text.translatedText("Only necessary", "onlyNecessary")
|
|
60
62
|
),
|
|
61
63
|
React.createElement("div", {"className": "spacing small"}),
|
|
62
|
-
React.createElement(Dbm.react.text.Link, {"href":
|
|
64
|
+
React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
|
|
63
65
|
React.createElement("div", {"className": "secondary-button standard-button-padding text-align-center"},
|
|
64
66
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
65
67
|
)
|
|
@@ -81,7 +83,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
|
|
|
81
83
|
|
|
82
84
|
React.createElement("div", {"className": "flex-row small-item-spacing"},
|
|
83
85
|
React.createElement("div", {"className": "flex-row-item"},
|
|
84
|
-
React.createElement(Dbm.react.text.Link, {"href":
|
|
86
|
+
React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
|
|
85
87
|
React.createElement("div", {"className": "secondary-button standard-button-padding"},
|
|
86
88
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
87
89
|
)
|
|
@@ -115,7 +117,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
|
|
|
115
117
|
React.createElement("div", {"className": "flex-row-item"},
|
|
116
118
|
React.createElement("div", {"className": "flex-row small-item-spacing"},
|
|
117
119
|
React.createElement("div", {"className": "flex-row-item"},
|
|
118
|
-
React.createElement(Dbm.react.text.Link, {"href":
|
|
120
|
+
React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
|
|
119
121
|
React.createElement("div", {"className": "secondary-button standard-button-padding"},
|
|
120
122
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
121
123
|
)
|
|
@@ -37,6 +37,8 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
|
|
|
37
37
|
elementSize.input.properties.element.connectInput(this.item.properties.widthElement);
|
|
38
38
|
elementSize.start();
|
|
39
39
|
|
|
40
|
+
let settingsUrl = this.getDynamicPropWithoutState("settingsUrl", "/cookie-settings/");
|
|
41
|
+
|
|
40
42
|
let layoutSwitch = new Dbm.flow.updatefunctions.logic.RangeSwitch();
|
|
41
43
|
layoutSwitch.input.properties.value.connectInput(elementSize.output.properties.width);
|
|
42
44
|
|
|
@@ -66,7 +68,7 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
|
|
|
66
68
|
Dbm.react.text.translatedText("Take full control over how we use cookies:", "text/settingsLinkDescription")
|
|
67
69
|
),
|
|
68
70
|
React.createElement("div", {"className": "spacing small"}),
|
|
69
|
-
React.createElement("a", {"href":
|
|
71
|
+
React.createElement("a", {"href": settingsUrl, className:"custom-styled-link"},
|
|
70
72
|
React.createElement("div", {"className": "secondary-button standard-button-padding text-align-center"},
|
|
71
73
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
72
74
|
)
|
|
@@ -106,7 +108,7 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
|
|
|
106
108
|
Dbm.react.text.translatedText("Take full control over how we use cookies:", "text/settingsLinkDescription")
|
|
107
109
|
),
|
|
108
110
|
React.createElement("div", {"className": "flex-row-item"},
|
|
109
|
-
React.createElement("a", {"href":
|
|
111
|
+
React.createElement("a", {"href": settingsUrl, className:"custom-styled-link"},
|
|
110
112
|
React.createElement("div", {"className": "cookie-settings-link"},
|
|
111
113
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
112
114
|
)
|
package/tracking/Controller.js
CHANGED
|
@@ -187,6 +187,18 @@ export default class Controller extends Dbm.core.BaseObject {
|
|
|
187
187
|
this.trackEvent("Product view", data, "ecommerce");
|
|
188
188
|
}
|
|
189
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
|
+
|
|
190
202
|
trackAddedToCart(aProductOrProducts) {
|
|
191
203
|
let data = this.createProductItemsSummary(aProductOrProducts);
|
|
192
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
|
+
}
|
|
@@ -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
|
+
}
|
package/tracking/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export {default as MetaPixelTracker} from "./MetaPixelTracker.js";
|
|
|
6
6
|
export {default as TagManagerTracker} from "./TagManagerTracker.js";
|
|
7
7
|
export {default as GtagTracker} from "./GtagTracker.js";
|
|
8
8
|
export {default as SingleAccountMetaPixelTracker} from "./SingleAccountMetaPixelTracker.js";
|
|
9
|
+
export {default as PageListTracker} from "./PageListTracker.js";
|
|
10
|
+
export {default as ConversionLinker} from "./ConversionLinker.js";
|
|
9
11
|
|
|
10
12
|
export const addStartTagManagerMarker = function() {
|
|
11
13
|
window.dataLayer=window.dataLayer || [];
|
|
@@ -26,6 +28,8 @@ export const setup = function() {
|
|
|
26
28
|
let dataLayerTracker = new Dbm.tracking.DataLayerTracker();
|
|
27
29
|
dataLayerTracker.item.register("tracking/dataLayerTracker");
|
|
28
30
|
controller.addTracker(dataLayerTracker.item);
|
|
31
|
+
|
|
32
|
+
return controller;
|
|
29
33
|
}
|
|
30
34
|
|
|
31
35
|
export const setupExternalTagManager = function() {
|
|
@@ -40,6 +44,8 @@ export const setupExternalTagManager = function() {
|
|
|
40
44
|
dataLayerTracker.item.setConsent = false;
|
|
41
45
|
dataLayerTracker.item.register("tracking/dataLayerTracker");
|
|
42
46
|
controller.addTracker(dataLayerTracker.item);
|
|
47
|
+
|
|
48
|
+
return controller;
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
export const addMetaPixel = function(aPixelId) {
|
|
@@ -47,6 +53,17 @@ export const addMetaPixel = function(aPixelId) {
|
|
|
47
53
|
tracker.item.pixelId = aPixelId;
|
|
48
54
|
tracker.item.register("tracking/metaPixelTracker");
|
|
49
55
|
Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
|
|
56
|
+
|
|
57
|
+
return tracker;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const addSingleAccountMetaPixel = function(aPixelId) {
|
|
61
|
+
let tracker = new Dbm.tracking.SingleAccountMetaPixelTracker();
|
|
62
|
+
tracker.item.pixelId = aPixelId;
|
|
63
|
+
tracker.item.register("tracking/metaPixelTracker/" + aPixelId);
|
|
64
|
+
Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
|
|
65
|
+
|
|
66
|
+
return tracker;
|
|
50
67
|
}
|
|
51
68
|
|
|
52
69
|
export const setCurrency = function(aCurrency) {
|
|
@@ -58,4 +75,21 @@ export const addTagManagerTracking = function(aId) {
|
|
|
58
75
|
let tracker = new Dbm.tracking.TagManagerTracker();
|
|
59
76
|
tracker.item.tagManagerId = aId;
|
|
60
77
|
Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
|
|
78
|
+
|
|
79
|
+
return tracker;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const addGtagTracker = function(aId) {
|
|
83
|
+
let tracker = new Dbm.tracking.GtagTracker();
|
|
84
|
+
tracker.item.tagId = aId;
|
|
85
|
+
Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
|
|
86
|
+
|
|
87
|
+
return tracker;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const setupDefaultConversionLinker = function() {
|
|
91
|
+
let tracker = new Dbm.tracking.ConversionLinker();
|
|
92
|
+
Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
|
|
93
|
+
|
|
94
|
+
return tracker;
|
|
61
95
|
}
|